chore: move core logic into package
This commit is contained in:
parent
64f3d2fe3a
commit
fa27a28a60
|
@ -6,6 +6,7 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
protocol NeedsDependency: AnyObject {
|
protocol NeedsDependency: AnyObject {
|
||||||
var context: AppContext! { get set }
|
var context: AppContext! { get set }
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
// Created by sxiaojian on 2021/4/22.
|
// Created by sxiaojian on 2021/4/22.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
import CoreData
|
import CoreData
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
import Foundation
|
import MastodonCore
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
import UIKit
|
|
||||||
|
|
||||||
enum SelectedAccountSection: Equatable, Hashable {
|
enum SelectedAccountSection: Equatable, Hashable {
|
||||||
case main
|
case main
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
enum ComposeStatusAttachmentItem {
|
enum ComposeStatusAttachmentItem {
|
||||||
case attachment(attachmentService: MastodonAttachmentService)
|
case attachment(attachmentService: MastodonAttachmentService)
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
import Foundation
|
import Foundation
|
||||||
import Combine
|
import Combine
|
||||||
import CoreData
|
import CoreData
|
||||||
|
import MastodonCore
|
||||||
import MastodonMeta
|
import MastodonMeta
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ enum ComposeStatusSection: Equatable, Hashable {
|
||||||
}
|
}
|
||||||
|
|
||||||
extension ComposeStatusSection {
|
extension ComposeStatusSection {
|
||||||
enum ComposeKind {
|
public enum ComposeKind {
|
||||||
case post
|
case post
|
||||||
case hashtag(hashtag: String)
|
case hashtag(hashtag: String)
|
||||||
case mention(user: ManagedObjectRecord<MastodonUser>)
|
case mention(user: ManagedObjectRecord<MastodonUser>)
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
import os.log
|
import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
|
import MastodonCore
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ import UIKit
|
||||||
import MetaTextKit
|
import MetaTextKit
|
||||||
import MastodonMeta
|
import MastodonMeta
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
enum NotificationSection: Equatable, Hashable {
|
enum NotificationSection: Equatable, Hashable {
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
import os
|
import os
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
|
import MastodonCore
|
||||||
import MastodonMeta
|
import MastodonMeta
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ import UIKit
|
||||||
import MetaTextKit
|
import MetaTextKit
|
||||||
import MastodonMeta
|
import MastodonMeta
|
||||||
import Combine
|
import Combine
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
enum RecommendAccountSection: Equatable, Hashable {
|
enum RecommendAccountSection: Equatable, Hashable {
|
||||||
case main
|
case main
|
||||||
|
|
|
@ -13,6 +13,7 @@ import MastodonSDK
|
||||||
import UIKit
|
import UIKit
|
||||||
import os.log
|
import os.log
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
enum ReportSection: Equatable, Hashable {
|
enum ReportSection: Equatable, Hashable {
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
enum SearchHistorySection: Hashable {
|
enum SearchHistorySection: Hashable {
|
||||||
case main
|
case main
|
||||||
|
|
|
@ -12,6 +12,7 @@ import UIKit
|
||||||
import CoreData
|
import CoreData
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
enum SearchSection: Hashable {
|
enum SearchSection: Hashable {
|
||||||
|
|
|
@ -9,6 +9,7 @@ import UIKit
|
||||||
import CoreData
|
import CoreData
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
enum SettingsSection: Hashable {
|
enum SettingsSection: Hashable {
|
||||||
|
@ -124,7 +125,7 @@ extension SettingsSection {
|
||||||
|
|
||||||
extension SettingsSection {
|
extension SettingsSection {
|
||||||
|
|
||||||
static func configureSettingToggle(
|
public static func configureSettingToggle(
|
||||||
cell: SettingsToggleTableViewCell,
|
cell: SettingsToggleTableViewCell,
|
||||||
item: SettingsItem,
|
item: SettingsItem,
|
||||||
setting: Setting
|
setting: Setting
|
||||||
|
@ -155,7 +156,7 @@ extension SettingsSection {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static func configureSettingToggle(
|
public static func configureSettingToggle(
|
||||||
cell: SettingsToggleTableViewCell,
|
cell: SettingsToggleTableViewCell,
|
||||||
switchMode: SettingsItem.NotificationSwitchMode,
|
switchMode: SettingsItem.NotificationSwitchMode,
|
||||||
subscription: NotificationSubscription
|
subscription: NotificationSubscription
|
||||||
|
|
|
@ -15,6 +15,7 @@ import AlamofireImage
|
||||||
import MastodonMeta
|
import MastodonMeta
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
import NaturalLanguage
|
import NaturalLanguage
|
||||||
|
import MastodonCore
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
|
|
||||||
enum StatusSection: Equatable, Hashable {
|
enum StatusSection: Equatable, Hashable {
|
||||||
|
|
|
@ -9,6 +9,7 @@ import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import CoreData
|
import CoreData
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
|
import MastodonCore
|
||||||
import MetaTextKit
|
import MetaTextKit
|
||||||
import MastodonMeta
|
import MastodonMeta
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
extension DataSourceFacade {
|
extension DataSourceFacade {
|
||||||
static func responseToUserBlockAction(
|
static func responseToUserBlockAction(
|
||||||
|
|
|
@ -8,9 +8,10 @@
|
||||||
import UIKit
|
import UIKit
|
||||||
import CoreData
|
import CoreData
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
extension DataSourceFacade {
|
extension DataSourceFacade {
|
||||||
static func responseToStatusBookmarkAction(
|
public static func responseToStatusBookmarkAction(
|
||||||
provider: DataSourceProvider,
|
provider: DataSourceProvider,
|
||||||
status: ManagedObjectRecord<Status>,
|
status: ManagedObjectRecord<Status>,
|
||||||
authenticationBox: MastodonAuthenticationBox
|
authenticationBox: MastodonAuthenticationBox
|
||||||
|
|
|
@ -8,9 +8,10 @@
|
||||||
import UIKit
|
import UIKit
|
||||||
import CoreData
|
import CoreData
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
extension DataSourceFacade {
|
extension DataSourceFacade {
|
||||||
static func responseToStatusFavoriteAction(
|
public static func responseToStatusFavoriteAction(
|
||||||
provider: DataSourceProvider,
|
provider: DataSourceProvider,
|
||||||
status: ManagedObjectRecord<Status>,
|
status: ManagedObjectRecord<Status>,
|
||||||
authenticationBox: MastodonAuthenticationBox
|
authenticationBox: MastodonAuthenticationBox
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
import UIKit
|
import UIKit
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
import class CoreDataStack.Notification
|
import class CoreDataStack.Notification
|
||||||
|
import MastodonCore
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
extension DataSourceFacade {
|
extension DataSourceFacade {
|
||||||
static func responseToUserMuteAction(
|
static func responseToUserMuteAction(
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
|
import MastodonCore
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
|
|
||||||
extension DataSourceFacade {
|
extension DataSourceFacade {
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
extension DataSourceFacade {
|
extension DataSourceFacade {
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
|
import MastodonCore
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
import os.log
|
import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
|
import MastodonCore
|
||||||
|
import MastodonUI
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
extension UITableViewDelegate where Self: DataSourceProvider {
|
extension UITableViewDelegate where Self: DataSourceProvider {
|
||||||
|
|
|
@ -9,6 +9,7 @@ import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
import FLAnimatedImage
|
import FLAnimatedImage
|
||||||
import MetaTextKit
|
import MetaTextKit
|
||||||
|
import MastodonCore
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
|
|
||||||
final class AccountListTableViewCell: UITableViewCell {
|
final class AccountListTableViewCell: UITableViewCell {
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
import os.log
|
import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
protocol AutoCompleteViewControllerDelegate: AnyObject {
|
protocol AutoCompleteViewControllerDelegate: AnyObject {
|
||||||
func autoCompleteViewController(_ viewController: AutoCompleteViewController, didSelectItem item: AutoCompleteItem)
|
func autoCompleteViewController(_ viewController: AutoCompleteViewController, didSelectItem item: AutoCompleteItem)
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
|
import MastodonCore
|
||||||
|
import MastodonUI
|
||||||
|
|
||||||
final class AutoCompleteTopChevronView: UIView {
|
final class AutoCompleteTopChevronView: UIView {
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,8 @@ import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
|
import MastodonUI
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
protocol ComposeStatusPollExpiresOptionCollectionViewCellDelegate: AnyObject {
|
protocol ComposeStatusPollExpiresOptionCollectionViewCellDelegate: AnyObject {
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
import os.log
|
import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
|
import MastodonUI
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
protocol ComposeStatusPollOptionAppendEntryCollectionViewCellDelegate: AnyObject {
|
protocol ComposeStatusPollOptionAppendEntryCollectionViewCellDelegate: AnyObject {
|
||||||
|
|
|
@ -9,6 +9,7 @@ import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
|
|
||||||
|
|
|
@ -9,11 +9,12 @@ import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
import PhotosUI
|
import PhotosUI
|
||||||
|
import Meta
|
||||||
import MetaTextKit
|
import MetaTextKit
|
||||||
import MastodonMeta
|
import MastodonMeta
|
||||||
import Meta
|
|
||||||
import MastodonUI
|
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
|
import MastodonUI
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
|
|
||||||
|
@ -752,7 +753,10 @@ extension ComposeViewController {
|
||||||
// TODO: handle error
|
// TODO: handle error
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
context.statusPublishService.publish(composeViewModel: viewModel)
|
|
||||||
|
// context.statusPublishService.publish(composeViewModel: viewModel)
|
||||||
|
assertionFailure()
|
||||||
|
|
||||||
dismiss(animated: true, completion: nil)
|
dismiss(animated: true, completion: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,11 +9,12 @@ import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
import MastodonSDK
|
|
||||||
import MastodonMeta
|
|
||||||
import MetaTextKit
|
import MetaTextKit
|
||||||
|
import MastodonMeta
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
import MastodonSDK
|
||||||
|
|
||||||
extension ComposeViewModel {
|
extension ComposeViewModel {
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ import CoreDataStack
|
||||||
import GameplayKit
|
import GameplayKit
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
import MastodonMeta
|
import MastodonMeta
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
|
import MastodonUI
|
||||||
|
|
||||||
final class ComposeRepliedToStatusContentTableViewCell: UITableViewCell {
|
final class ComposeRepliedToStatusContentTableViewCell: UITableViewCell {
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,9 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import MastodonUI
|
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
|
import MastodonUI
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
extension AttachmentContainerView {
|
extension AttachmentContainerView {
|
||||||
|
|
|
@ -10,6 +10,8 @@ import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
|
import MastodonUI
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
protocol ComposeToolbarViewDelegate: AnyObject {
|
protocol ComposeToolbarViewDelegate: AnyObject {
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
import UIKit
|
import UIKit
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
final class StatusContentWarningEditorView: UIView {
|
final class StatusContentWarningEditorView: UIView {
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
import os.log
|
import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
|
import MastodonCore
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
|
|
||||||
// Local Timeline
|
// Local Timeline
|
||||||
|
|
|
@ -164,7 +164,7 @@ extension DiscoveryCommunityViewModel.State {
|
||||||
self.maxID = newMaxID
|
self.maxID = newMaxID
|
||||||
|
|
||||||
var hasNewStatusesAppend = false
|
var hasNewStatusesAppend = false
|
||||||
var statusIDs = isReloading ? [] : viewModel.statusFetchedResultsController.statusIDs.value
|
var statusIDs = isReloading ? [] : viewModel.statusFetchedResultsController.statusIDs
|
||||||
for status in response.value {
|
for status in response.value {
|
||||||
guard !statusIDs.contains(status.id) else { continue }
|
guard !statusIDs.contains(status.id) else { continue }
|
||||||
statusIDs.append(status.id)
|
statusIDs.append(status.id)
|
||||||
|
@ -177,7 +177,7 @@ extension DiscoveryCommunityViewModel.State {
|
||||||
} else {
|
} else {
|
||||||
await enter(state: NoMore.self)
|
await enter(state: NoMore.self)
|
||||||
}
|
}
|
||||||
viewModel.statusFetchedResultsController.statusIDs.value = statusIDs
|
viewModel.statusFetchedResultsController.statusIDs = statusIDs
|
||||||
viewModel.didLoadLatest.send()
|
viewModel.didLoadLatest.send()
|
||||||
|
|
||||||
} catch {
|
} catch {
|
||||||
|
|
|
@ -54,7 +54,7 @@ final class DiscoveryCommunityViewModel {
|
||||||
|
|
||||||
context.authenticationService.activeMastodonAuthentication
|
context.authenticationService.activeMastodonAuthentication
|
||||||
.map { $0?.domain }
|
.map { $0?.domain }
|
||||||
.assign(to: \.value, on: statusFetchedResultsController.domain)
|
.assign(to: \.domain, on: statusFetchedResultsController)
|
||||||
.store(in: &disposeBag)
|
.store(in: &disposeBag)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ import Combine
|
||||||
import Tabman
|
import Tabman
|
||||||
import Pageboy
|
import Pageboy
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
|
|
||||||
public class DiscoveryViewController: TabmanViewController, NeedsDependency {
|
public class DiscoveryViewController: TabmanViewController, NeedsDependency {
|
||||||
|
|
|
@ -9,6 +9,7 @@ import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
import Tabman
|
import Tabman
|
||||||
import Pageboy
|
import Pageboy
|
||||||
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
final class DiscoveryViewModel {
|
final class DiscoveryViewModel {
|
||||||
|
|
|
@ -9,6 +9,7 @@ import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
final class DiscoveryForYouViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
|
final class DiscoveryForYouViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ import GameplayKit
|
||||||
import CoreData
|
import CoreData
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
final class DiscoveryForYouViewModel {
|
final class DiscoveryForYouViewModel {
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
import os.log
|
import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
|
import MastodonCore
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
|
|
||||||
final class DiscoveryHashtagsViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
|
final class DiscoveryHashtagsViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
|
||||||
|
|
|
@ -11,6 +11,7 @@ import Combine
|
||||||
import GameplayKit
|
import GameplayKit
|
||||||
import CoreData
|
import CoreData
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
|
import MastodonCore
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
|
|
||||||
final class DiscoveryHashtagsViewModel {
|
final class DiscoveryHashtagsViewModel {
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
import os.log
|
import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
|
import MastodonCore
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
|
|
||||||
final class DiscoveryNewsViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
|
final class DiscoveryNewsViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
|
||||||
|
|
|
@ -12,6 +12,7 @@ import GameplayKit
|
||||||
import CoreData
|
import CoreData
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
final class DiscoveryNewsViewModel {
|
final class DiscoveryNewsViewModel {
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
import os.log
|
import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
|
import MastodonCore
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
|
|
||||||
final class DiscoveryPostsViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
|
final class DiscoveryPostsViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
|
||||||
|
|
|
@ -9,6 +9,7 @@ import os.log
|
||||||
import Foundation
|
import Foundation
|
||||||
import GameplayKit
|
import GameplayKit
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
extension DiscoveryPostsViewModel {
|
extension DiscoveryPostsViewModel {
|
||||||
class State: GKState, NamingState {
|
class State: GKState, NamingState {
|
||||||
|
@ -166,7 +167,7 @@ extension DiscoveryPostsViewModel.State {
|
||||||
self.offset = newOffset
|
self.offset = newOffset
|
||||||
|
|
||||||
var hasNewStatusesAppend = false
|
var hasNewStatusesAppend = false
|
||||||
var statusIDs = isReloading ? [] : viewModel.statusFetchedResultsController.statusIDs.value
|
var statusIDs = isReloading ? [] : viewModel.statusFetchedResultsController.statusIDs
|
||||||
for status in response.value {
|
for status in response.value {
|
||||||
guard !statusIDs.contains(status.id) else { continue }
|
guard !statusIDs.contains(status.id) else { continue }
|
||||||
statusIDs.append(status.id)
|
statusIDs.append(status.id)
|
||||||
|
@ -178,7 +179,7 @@ extension DiscoveryPostsViewModel.State {
|
||||||
} else {
|
} else {
|
||||||
await enter(state: NoMore.self)
|
await enter(state: NoMore.self)
|
||||||
}
|
}
|
||||||
viewModel.statusFetchedResultsController.statusIDs.value = statusIDs
|
viewModel.statusFetchedResultsController.statusIDs = statusIDs
|
||||||
viewModel.didLoadLatest.send()
|
viewModel.didLoadLatest.send()
|
||||||
|
|
||||||
} catch {
|
} catch {
|
||||||
|
|
|
@ -12,6 +12,7 @@ import GameplayKit
|
||||||
import CoreData
|
import CoreData
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
final class DiscoveryPostsViewModel {
|
final class DiscoveryPostsViewModel {
|
||||||
|
|
||||||
|
@ -51,7 +52,7 @@ final class DiscoveryPostsViewModel {
|
||||||
|
|
||||||
context.authenticationService.activeMastodonAuthentication
|
context.authenticationService.activeMastodonAuthentication
|
||||||
.map { $0?.domain }
|
.map { $0?.domain }
|
||||||
.assign(to: \.value, on: statusFetchedResultsController.domain)
|
.assign(to: \.domain, on: statusFetchedResultsController)
|
||||||
.store(in: &disposeBag)
|
.store(in: &disposeBag)
|
||||||
|
|
||||||
Task {
|
Task {
|
||||||
|
|
|
@ -9,6 +9,8 @@ import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
|
import MastodonUI
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
public protocol DiscoveryIntroBannerViewDelegate: AnyObject {
|
public protocol DiscoveryIntroBannerViewDelegate: AnyObject {
|
||||||
|
|
|
@ -12,6 +12,7 @@ import Combine
|
||||||
import GameplayKit
|
import GameplayKit
|
||||||
import CoreData
|
import CoreData
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
final class HashtagTimelineViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
|
final class HashtagTimelineViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
|
||||||
|
|
|
@ -167,7 +167,7 @@ extension HashtagTimelineViewModel.State {
|
||||||
self.maxID = newMaxID
|
self.maxID = newMaxID
|
||||||
|
|
||||||
var hasNewStatusesAppend = false
|
var hasNewStatusesAppend = false
|
||||||
var statusIDs = isReloading ? [] : viewModel.fetchedResultsController.statusIDs.value
|
var statusIDs = isReloading ? [] : viewModel.fetchedResultsController.statusIDs
|
||||||
for status in response.value {
|
for status in response.value {
|
||||||
guard !statusIDs.contains(status.id) else { continue }
|
guard !statusIDs.contains(status.id) else { continue }
|
||||||
statusIDs.append(status.id)
|
statusIDs.append(status.id)
|
||||||
|
|
|
@ -12,6 +12,7 @@ import CoreData
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
import GameplayKit
|
import GameplayKit
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
final class HashtagTimelineViewModel {
|
final class HashtagTimelineViewModel {
|
||||||
|
|
||||||
|
@ -63,7 +64,7 @@ final class HashtagTimelineViewModel {
|
||||||
|
|
||||||
context.authenticationService.activeMastodonAuthenticationBox
|
context.authenticationService.activeMastodonAuthenticationBox
|
||||||
.map { $0?.domain }
|
.map { $0?.domain }
|
||||||
.assign(to: \.value, on: fetchedResultsController.domain)
|
.assign(to: \.domain, on: fetchedResultsController)
|
||||||
.store(in: &disposeBag)
|
.store(in: &disposeBag)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ import CoreData
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
import FLEX
|
import FLEX
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
import MastodonCore
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
import StoreKit
|
import StoreKit
|
||||||
|
|
|
@ -16,8 +16,9 @@ import MastodonSDK
|
||||||
import AlamofireImage
|
import AlamofireImage
|
||||||
import StoreKit
|
import StoreKit
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
import MastodonLocalization
|
import MastodonCore
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
|
import MastodonLocalization
|
||||||
|
|
||||||
final class HomeTimelineViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
|
final class HomeTimelineViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ import Foundation
|
||||||
import CoreData
|
import CoreData
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
import GameplayKit
|
import GameplayKit
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
extension HomeTimelineViewModel {
|
extension HomeTimelineViewModel {
|
||||||
class LoadLatestState: GKState {
|
class LoadLatestState: GKState {
|
||||||
|
|
|
@ -15,6 +15,7 @@ import CoreDataStack
|
||||||
import GameplayKit
|
import GameplayKit
|
||||||
import AlamofireImage
|
import AlamofireImage
|
||||||
import DateToolsSwift
|
import DateToolsSwift
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
final class HomeTimelineViewModel: NSObject {
|
final class HomeTimelineViewModel: NSObject {
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
import Combine
|
import Combine
|
||||||
import Foundation
|
import Foundation
|
||||||
import UIKit
|
import UIKit
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
final class HomeTimelineNavigationBarTitleViewModel {
|
final class HomeTimelineNavigationBarTitleViewModel {
|
||||||
|
|
||||||
|
@ -48,21 +49,21 @@ final class HomeTimelineNavigationBarTitleViewModel {
|
||||||
.assign(to: \.value, on: isOffline)
|
.assign(to: \.value, on: isOffline)
|
||||||
.store(in: &disposeBag)
|
.store(in: &disposeBag)
|
||||||
|
|
||||||
context.statusPublishService.latestPublishingComposeViewModel
|
// context.statusPublishService.latestPublishingComposeViewModel
|
||||||
.receive(on: DispatchQueue.main)
|
// .receive(on: DispatchQueue.main)
|
||||||
.sink { [weak self] composeViewModel in
|
// .sink { [weak self] composeViewModel in
|
||||||
guard let self = self else { return }
|
// guard let self = self else { return }
|
||||||
guard let composeViewModel = composeViewModel,
|
// guard let composeViewModel = composeViewModel,
|
||||||
let state = composeViewModel.publishStateMachine.currentState else {
|
// let state = composeViewModel.publishStateMachine.currentState else {
|
||||||
self.isPublishingPost.value = false
|
// self.isPublishingPost.value = false
|
||||||
self.isPublished.value = false
|
// self.isPublished.value = false
|
||||||
return
|
// return
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
self.isPublishingPost.value = state is ComposeViewModel.PublishState.Publishing || state is ComposeViewModel.PublishState.Fail
|
// self.isPublishingPost.value = state is ComposeViewModel.PublishState.Publishing || state is ComposeViewModel.PublishState.Fail
|
||||||
self.isPublished.value = state is ComposeViewModel.PublishState.Finish
|
// self.isPublished.value = state is ComposeViewModel.PublishState.Finish
|
||||||
}
|
// }
|
||||||
.store(in: &disposeBag)
|
// .store(in: &disposeBag)
|
||||||
|
|
||||||
Publishers.CombineLatest4(
|
Publishers.CombineLatest4(
|
||||||
hasNewPosts.eraseToAnyPublisher(),
|
hasNewPosts.eraseToAnyPublisher(),
|
||||||
|
|
|
@ -11,6 +11,7 @@ import Combine
|
||||||
import Alamofire
|
import Alamofire
|
||||||
import AlamofireImage
|
import AlamofireImage
|
||||||
import FLAnimatedImage
|
import FLAnimatedImage
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
class MediaPreviewImageViewModel {
|
class MediaPreviewImageViewModel {
|
||||||
|
|
||||||
|
@ -29,18 +30,18 @@ class MediaPreviewImageViewModel {
|
||||||
|
|
||||||
extension MediaPreviewImageViewModel {
|
extension MediaPreviewImageViewModel {
|
||||||
|
|
||||||
enum ImagePreviewItem {
|
public enum ImagePreviewItem {
|
||||||
case remote(RemoteImageContext)
|
case remote(RemoteImageContext)
|
||||||
case local(LocalImageContext)
|
case local(LocalImageContext)
|
||||||
}
|
}
|
||||||
|
|
||||||
struct RemoteImageContext {
|
public struct RemoteImageContext {
|
||||||
let assetURL: URL?
|
let assetURL: URL?
|
||||||
let thumbnail: UIImage?
|
let thumbnail: UIImage?
|
||||||
let altText: String?
|
let altText: String?
|
||||||
}
|
}
|
||||||
|
|
||||||
struct LocalImageContext {
|
public struct LocalImageContext {
|
||||||
let image: UIImage
|
let image: UIImage
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,8 @@ import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
import Pageboy
|
import Pageboy
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
|
import MastodonUI
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
final class MediaPreviewViewController: UIViewController, NeedsDependency {
|
final class MediaPreviewViewController: UIViewController, NeedsDependency {
|
||||||
|
|
|
@ -10,6 +10,7 @@ import Combine
|
||||||
import CoreData
|
import CoreData
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
import Pageboy
|
import Pageboy
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
final class MediaPreviewViewModel: NSObject {
|
final class MediaPreviewViewModel: NSObject {
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ import UIKit
|
||||||
import AVKit
|
import AVKit
|
||||||
import Combine
|
import Combine
|
||||||
import AlamofireImage
|
import AlamofireImage
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
final class MediaPreviewVideoViewModel {
|
final class MediaPreviewVideoViewModel {
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
import os.log
|
import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
|
import MastodonCore
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
|
|
||||||
final class NotificationTableViewCell: UITableViewCell {
|
final class NotificationTableViewCell: UITableViewCell {
|
||||||
|
|
|
@ -9,6 +9,7 @@ import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
final class NotificationTimelineViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
|
final class NotificationTimelineViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
|
||||||
|
|
|
@ -11,6 +11,7 @@ import Combine
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
import GameplayKit
|
import GameplayKit
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
final class NotificationTimelineViewModel {
|
final class NotificationTimelineViewModel {
|
||||||
|
|
||||||
|
@ -78,7 +79,7 @@ final class NotificationTimelineViewModel {
|
||||||
|
|
||||||
extension NotificationTimelineViewModel {
|
extension NotificationTimelineViewModel {
|
||||||
|
|
||||||
typealias Scope = APIService.NotificationScope
|
typealias Scope = APIService.MastodonNotificationScope
|
||||||
|
|
||||||
static func feedPredicate(
|
static func feedPredicate(
|
||||||
authenticationBox: MastodonAuthenticationBox,
|
authenticationBox: MastodonAuthenticationBox,
|
||||||
|
|
|
@ -12,6 +12,7 @@ import MastodonAsset
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
import Tabman
|
import Tabman
|
||||||
import Pageboy
|
import Pageboy
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
final class NotificationViewController: TabmanViewController, NeedsDependency {
|
final class NotificationViewController: TabmanViewController, NeedsDependency {
|
||||||
|
|
||||||
|
|
|
@ -8,9 +8,10 @@
|
||||||
import os.log
|
import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
import MastodonAsset
|
|
||||||
import MastodonLocalization
|
|
||||||
import Pageboy
|
import Pageboy
|
||||||
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
|
import MastodonLocalization
|
||||||
|
|
||||||
final class NotificationViewModel {
|
final class NotificationViewModel {
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,8 @@ import os.log
|
||||||
import ThirdPartyMailer
|
import ThirdPartyMailer
|
||||||
import UIKit
|
import UIKit
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
|
import MastodonUI
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
final class MastodonConfirmEmailViewController: UIViewController, NeedsDependency {
|
final class MastodonConfirmEmailViewController: UIViewController, NeedsDependency {
|
||||||
|
@ -205,10 +207,10 @@ extension MastodonConfirmEmailViewController {
|
||||||
}
|
}
|
||||||
|
|
||||||
func showEmailAppAlert() {
|
func showEmailAppAlert() {
|
||||||
let clients = ThirdPartyMailClient.clients()
|
let clients = ThirdPartyMailClient.clients
|
||||||
let application = UIApplication.shared
|
let application = UIApplication.shared
|
||||||
let availableClients = clients.filter { client -> Bool in
|
let availableClients = clients.filter { client -> Bool in
|
||||||
ThirdPartyMailer.application(application, isMailClientAvailable: client)
|
ThirdPartyMailer.isMailClientAvailable(client)
|
||||||
}
|
}
|
||||||
let alertController = UIAlertController(title: L10n.Scene.ConfirmEmail.OpenEmailApp.openEmailClient, message: nil, preferredStyle: .alert)
|
let alertController = UIAlertController(title: L10n.Scene.ConfirmEmail.OpenEmailApp.openEmailClient, message: nil, preferredStyle: .alert)
|
||||||
|
|
||||||
|
@ -218,7 +220,7 @@ extension MastodonConfirmEmailViewController {
|
||||||
alertController.addAction(alertAction)
|
alertController.addAction(alertAction)
|
||||||
_ = availableClients.compactMap { client -> UIAlertAction in
|
_ = availableClients.compactMap { client -> UIAlertAction in
|
||||||
let alertAction = UIAlertAction(title: client.name, style: .default) { _ in
|
let alertAction = UIAlertAction(title: client.name, style: .default) { _ in
|
||||||
_ = ThirdPartyMailer.application(application, openMailClient: client)
|
_ = ThirdPartyMailer.open(client, completionHandler: nil)
|
||||||
}
|
}
|
||||||
alertController.addAction(alertAction)
|
alertController.addAction(alertAction)
|
||||||
return alertAction
|
return alertAction
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
import Combine
|
import Combine
|
||||||
import Foundation
|
import Foundation
|
||||||
|
import MastodonCore
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
|
|
||||||
final class MastodonConfirmEmailViewModel {
|
final class MastodonConfirmEmailViewModel {
|
||||||
|
|
|
@ -11,6 +11,7 @@ import Combine
|
||||||
import GameController
|
import GameController
|
||||||
import AuthenticationServices
|
import AuthenticationServices
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
|
|
||||||
|
@ -281,7 +282,7 @@ extension MastodonPickServerViewController {
|
||||||
guard let info = AuthenticationViewModel.AuthenticateInfo(
|
guard let info = AuthenticationViewModel.AuthenticateInfo(
|
||||||
domain: server.domain,
|
domain: server.domain,
|
||||||
application: application,
|
application: application,
|
||||||
redirectURI: response.value.redirectURI ?? MastodonAuthenticationController.callbackURL
|
redirectURI: response.value.redirectURI ?? APIService.oauthCallbackURL
|
||||||
) else {
|
) else {
|
||||||
throw APIService.APIError.explicit(.badResponse)
|
throw APIService.APIError.explicit(.badResponse)
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,8 @@ import MastodonSDK
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
import OrderedCollections
|
import OrderedCollections
|
||||||
import Tabman
|
import Tabman
|
||||||
|
import MastodonCore
|
||||||
|
import MastodonUI
|
||||||
|
|
||||||
class MastodonPickServerViewModel: NSObject {
|
class MastodonPickServerViewModel: NSObject {
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
|
import MastodonUI
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
final class PickServerLoaderTableViewCell: TimelineLoaderTableViewCell {
|
final class PickServerLoaderTableViewCell: TimelineLoaderTableViewCell {
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
import UIKit
|
import UIKit
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonUI
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
class PickServerCategoryView: UIView {
|
class PickServerCategoryView: UIView {
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
|
import MastodonUI
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
final class PickServerEmptyStateView: UIView {
|
final class PickServerEmptyStateView: UIView {
|
||||||
|
|
|
@ -14,6 +14,7 @@ import UIKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
final class MastodonRegisterViewController: UIViewController, NeedsDependency, OnboardingViewControllerAppearance {
|
final class MastodonRegisterViewController: UIViewController, NeedsDependency, OnboardingViewControllerAppearance {
|
||||||
|
|
|
@ -10,6 +10,7 @@ import Foundation
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
import UIKit
|
import UIKit
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
final class MastodonRegisterViewModel: ObservableObject {
|
final class MastodonRegisterViewModel: ObservableObject {
|
||||||
|
|
|
@ -9,6 +9,7 @@ import Combine
|
||||||
import os.log
|
import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import WebKit
|
import WebKit
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
final class MastodonResendEmailViewController: UIViewController, NeedsDependency {
|
final class MastodonResendEmailViewController: UIViewController, NeedsDependency {
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ import MastodonSDK
|
||||||
import SafariServices
|
import SafariServices
|
||||||
import MetaTextKit
|
import MetaTextKit
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
final class MastodonServerRulesViewController: UIViewController, NeedsDependency {
|
final class MastodonServerRulesViewController: UIViewController, NeedsDependency {
|
||||||
|
|
|
@ -11,6 +11,7 @@ import CoreData
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
import Combine
|
import Combine
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
final class AuthenticationViewModel {
|
final class AuthenticationViewModel {
|
||||||
|
|
||||||
|
@ -121,7 +122,7 @@ extension AuthenticationViewModel {
|
||||||
init?(
|
init?(
|
||||||
domain: String,
|
domain: String,
|
||||||
application: Mastodon.Entity.Application,
|
application: Mastodon.Entity.Application,
|
||||||
redirectURI: String = MastodonAuthenticationController.callbackURL
|
redirectURI: String = APIService.oauthCallbackURL
|
||||||
) {
|
) {
|
||||||
self.domain = domain
|
self.domain = domain
|
||||||
guard let clientID = application.clientID,
|
guard let clientID = application.clientID,
|
||||||
|
|
|
@ -9,13 +9,14 @@ import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
import AuthenticationServices
|
import AuthenticationServices
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
final class MastodonAuthenticationController {
|
final class MastodonAuthenticationController {
|
||||||
|
|
||||||
var disposeBag = Set<AnyCancellable>()
|
var disposeBag = Set<AnyCancellable>()
|
||||||
|
|
||||||
// input
|
// input
|
||||||
var context: AppContext!
|
var context: AppContext
|
||||||
let authenticateURL: URL
|
let authenticateURL: URL
|
||||||
var authenticationSession: ASWebAuthenticationSession?
|
var authenticationSession: ASWebAuthenticationSession?
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
|
import MastodonUI
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
final class WelcomeIllustrationView: UIView {
|
final class WelcomeIllustrationView: UIView {
|
||||||
|
|
|
@ -9,6 +9,7 @@ import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
final class WelcomeViewController: UIViewController, NeedsDependency {
|
final class WelcomeViewController: UIViewController, NeedsDependency {
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
import Combine
|
import Combine
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
final class WelcomeViewModel {
|
final class WelcomeViewModel {
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ import Combine
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
import MetaTextKit
|
import MetaTextKit
|
||||||
|
import MastodonCore
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
|
|
||||||
final class ProfileFieldAddEntryCollectionViewCell: UICollectionViewCell {
|
final class ProfileFieldAddEntryCollectionViewCell: UICollectionViewCell {
|
||||||
|
|
|
@ -10,6 +10,8 @@ import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
import MetaTextKit
|
import MetaTextKit
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
|
import MastodonUI
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
protocol ProfileFieldEditCollectionViewCellDelegate: AnyObject {
|
protocol ProfileFieldEditCollectionViewCellDelegate: AnyObject {
|
||||||
|
|
|
@ -12,6 +12,7 @@ import MetaTextKit
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
import TabBarPager
|
import TabBarPager
|
||||||
import XLPagerTabStrip
|
import XLPagerTabStrip
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
protocol ProfileAboutViewControllerDelegate: AnyObject {
|
protocol ProfileAboutViewControllerDelegate: AnyObject {
|
||||||
func profileAboutViewController(_ viewController: ProfileAboutViewController, profileFieldCollectionViewCell: ProfileFieldCollectionViewCell, metaLabel: MetaLabel, didSelectMeta meta: Meta)
|
func profileAboutViewController(_ viewController: ProfileAboutViewController, profileFieldCollectionViewCell: ProfileFieldCollectionViewCell, metaLabel: MetaLabel, didSelectMeta meta: Meta)
|
||||||
|
|
|
@ -11,6 +11,7 @@ import Combine
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
import MastodonMeta
|
import MastodonMeta
|
||||||
|
import MastodonCore
|
||||||
import Kanna
|
import Kanna
|
||||||
|
|
||||||
final class ProfileAboutViewModel {
|
final class ProfileAboutViewModel {
|
||||||
|
|
|
@ -11,6 +11,7 @@ import AVKit
|
||||||
import Combine
|
import Combine
|
||||||
import GameplayKit
|
import GameplayKit
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
final class BookmarkViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
|
final class BookmarkViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
|
||||||
|
|
|
@ -9,6 +9,7 @@ import os.log
|
||||||
import Foundation
|
import Foundation
|
||||||
import GameplayKit
|
import GameplayKit
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
extension BookmarkViewModel {
|
extension BookmarkViewModel {
|
||||||
class State: GKState, NamingState {
|
class State: GKState, NamingState {
|
||||||
|
@ -72,7 +73,7 @@ extension BookmarkViewModel.State {
|
||||||
guard let viewModel = viewModel, let stateMachine = stateMachine else { return }
|
guard let viewModel = viewModel, let stateMachine = stateMachine else { return }
|
||||||
|
|
||||||
// reset
|
// reset
|
||||||
viewModel.statusFetchedResultsController.statusIDs.value = []
|
viewModel.statusFetchedResultsController.statusIDs = []
|
||||||
|
|
||||||
stateMachine.enter(Loading.self)
|
stateMachine.enter(Loading.self)
|
||||||
}
|
}
|
||||||
|
@ -150,7 +151,7 @@ extension BookmarkViewModel.State {
|
||||||
)
|
)
|
||||||
|
|
||||||
var hasNewStatusesAppend = false
|
var hasNewStatusesAppend = false
|
||||||
var statusIDs = viewModel.statusFetchedResultsController.statusIDs.value
|
var statusIDs = viewModel.statusFetchedResultsController.statusIDs
|
||||||
for status in response.value {
|
for status in response.value {
|
||||||
guard !statusIDs.contains(status.id) else { continue }
|
guard !statusIDs.contains(status.id) else { continue }
|
||||||
statusIDs.append(status.id)
|
statusIDs.append(status.id)
|
||||||
|
@ -169,7 +170,7 @@ extension BookmarkViewModel.State {
|
||||||
} else {
|
} else {
|
||||||
await enter(state: NoMore.self)
|
await enter(state: NoMore.self)
|
||||||
}
|
}
|
||||||
viewModel.statusFetchedResultsController.statusIDs.value = statusIDs
|
viewModel.statusFetchedResultsController.statusIDs = statusIDs
|
||||||
} catch {
|
} catch {
|
||||||
logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): fetch user bookmarks fail: \(error.localizedDescription)")
|
logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): fetch user bookmarks fail: \(error.localizedDescription)")
|
||||||
await enter(state: Fail.self)
|
await enter(state: Fail.self)
|
||||||
|
|
|
@ -10,6 +10,7 @@ import Combine
|
||||||
import CoreData
|
import CoreData
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
import GameplayKit
|
import GameplayKit
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
final class BookmarkViewModel {
|
final class BookmarkViewModel {
|
||||||
|
|
||||||
|
@ -51,7 +52,7 @@ final class BookmarkViewModel {
|
||||||
|
|
||||||
activeMastodonAuthenticationBox
|
activeMastodonAuthenticationBox
|
||||||
.map { $0?.domain }
|
.map { $0?.domain }
|
||||||
.assign(to: \.value, on: statusFetchedResultsController.domain)
|
.assign(to: \.domain, on: statusFetchedResultsController)
|
||||||
.store(in: &disposeBag)
|
.store(in: &disposeBag)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
final class CachedProfileViewModel: ProfileViewModel {
|
final class CachedProfileViewModel: ProfileViewModel {
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
import os.log
|
import os.log
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
final class FamiliarFollowersViewController: UIViewController, NeedsDependency {
|
final class FamiliarFollowersViewController: UIViewController, NeedsDependency {
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
|
import MastodonCore
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ import AVKit
|
||||||
import Combine
|
import Combine
|
||||||
import GameplayKit
|
import GameplayKit
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
import MastodonCore
|
||||||
import MastodonLocalization
|
import MastodonLocalization
|
||||||
|
|
||||||
final class FavoriteViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
|
final class FavoriteViewController: UIViewController, NeedsDependency, MediaPreviewableViewController {
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
import os.log
|
import os.log
|
||||||
import Foundation
|
import Foundation
|
||||||
import GameplayKit
|
import GameplayKit
|
||||||
|
import MastodonCore
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
|
|
||||||
extension FavoriteViewModel {
|
extension FavoriteViewModel {
|
||||||
|
@ -72,7 +73,7 @@ extension FavoriteViewModel.State {
|
||||||
guard let viewModel = viewModel, let stateMachine = stateMachine else { return }
|
guard let viewModel = viewModel, let stateMachine = stateMachine else { return }
|
||||||
|
|
||||||
// reset
|
// reset
|
||||||
viewModel.statusFetchedResultsController.statusIDs.value = []
|
viewModel.statusFetchedResultsController.statusIDs = []
|
||||||
|
|
||||||
stateMachine.enter(Loading.self)
|
stateMachine.enter(Loading.self)
|
||||||
}
|
}
|
||||||
|
@ -150,7 +151,7 @@ extension FavoriteViewModel.State {
|
||||||
)
|
)
|
||||||
|
|
||||||
var hasNewStatusesAppend = false
|
var hasNewStatusesAppend = false
|
||||||
var statusIDs = viewModel.statusFetchedResultsController.statusIDs.value
|
var statusIDs = viewModel.statusFetchedResultsController.statusIDs
|
||||||
for status in response.value {
|
for status in response.value {
|
||||||
guard !statusIDs.contains(status.id) else { continue }
|
guard !statusIDs.contains(status.id) else { continue }
|
||||||
statusIDs.append(status.id)
|
statusIDs.append(status.id)
|
||||||
|
@ -169,7 +170,7 @@ extension FavoriteViewModel.State {
|
||||||
} else {
|
} else {
|
||||||
await enter(state: NoMore.self)
|
await enter(state: NoMore.self)
|
||||||
}
|
}
|
||||||
viewModel.statusFetchedResultsController.statusIDs.value = statusIDs
|
viewModel.statusFetchedResultsController.statusIDs = statusIDs
|
||||||
} catch {
|
} catch {
|
||||||
logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): fetch user favorites fail: \(error.localizedDescription)")
|
logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): fetch user favorites fail: \(error.localizedDescription)")
|
||||||
await enter(state: Fail.self)
|
await enter(state: Fail.self)
|
||||||
|
|
|
@ -10,6 +10,7 @@ import Combine
|
||||||
import CoreData
|
import CoreData
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
import GameplayKit
|
import GameplayKit
|
||||||
|
import MastodonCore
|
||||||
|
|
||||||
final class FavoriteViewModel {
|
final class FavoriteViewModel {
|
||||||
|
|
||||||
|
@ -51,7 +52,7 @@ final class FavoriteViewModel {
|
||||||
|
|
||||||
activeMastodonAuthenticationBox
|
activeMastodonAuthenticationBox
|
||||||
.map { $0?.domain }
|
.map { $0?.domain }
|
||||||
.assign(to: \.value, on: statusFetchedResultsController.domain)
|
.assign(to: \.domain, on: statusFetchedResultsController)
|
||||||
.store(in: &disposeBag)
|
.store(in: &disposeBag)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue