mirror of
https://github.com/mastodon/mastodon-ios
synced 2025-04-11 22:58:02 +02:00
MainActor for the new PersistenceManager
This commit is contained in:
parent
d1ac4e8796
commit
d7f473c892
@ -261,7 +261,7 @@ extension SettingsCoordinator: NotificationSettingsViewControllerDelegate {
|
||||
extension SettingsCoordinator: PolicySelectionViewControllerDelegate {
|
||||
func newPolicySelected(_ viewController: PolicySelectionViewController, newPolicy: NotificationPolicy) {
|
||||
self.setting.activeSubscription?.policyRaw = newPolicy.subscriptionPolicy.rawValue
|
||||
try? PersistenceManager.shared.managedObjectContext.save()
|
||||
try? PersistenceManager.shared.mainActorManagedObjectContext.save()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -78,7 +78,7 @@ extension ThreadViewModel {
|
||||
newSnapshot.appendSections([.main])
|
||||
|
||||
// top loader
|
||||
let _hasReplyTo: Bool? = try? await PersistenceManager.shared.managedObjectContext.perform {
|
||||
let _hasReplyTo: Bool? = try? await PersistenceManager.shared.mainActorManagedObjectContext.perform {
|
||||
guard case let .root(threadContext) = root else { return nil }
|
||||
return threadContext.status.entity.inReplyToID != nil
|
||||
}
|
||||
|
@ -12,10 +12,11 @@ import CoreData
|
||||
import CoreDataStack
|
||||
import AlamofireImage
|
||||
|
||||
@MainActor
|
||||
public class PersistenceManager {
|
||||
public static let shared = { PersistenceManager() }()
|
||||
public let coreDataStack: CoreDataStack
|
||||
public let managedObjectContext: NSManagedObjectContext
|
||||
public let mainActorManagedObjectContext: NSManagedObjectContext
|
||||
public let backgroundManagedObjectContext: NSManagedObjectContext
|
||||
|
||||
private var disposeBag = Set<AnyCancellable>()
|
||||
@ -26,15 +27,15 @@ public class PersistenceManager {
|
||||
let _backgroundManagedObjectContext = _coreDataStack.persistentContainer.newBackgroundContext()
|
||||
|
||||
coreDataStack = _coreDataStack
|
||||
managedObjectContext = _managedObjectContext
|
||||
mainActorManagedObjectContext = _managedObjectContext
|
||||
backgroundManagedObjectContext = _backgroundManagedObjectContext
|
||||
|
||||
backgroundManagedObjectContext.mergePolicy = NSMergePolicy.mergeByPropertyObjectTrump
|
||||
NotificationCenter.default.publisher(for: .NSManagedObjectContextDidSave, object: backgroundManagedObjectContext)
|
||||
.sink { [weak self] notification in
|
||||
guard let self = self else { return }
|
||||
self.managedObjectContext.perform {
|
||||
self.managedObjectContext.mergeChanges(fromContextDidSave: notification)
|
||||
self.mainActorManagedObjectContext.perform {
|
||||
self.mainActorManagedObjectContext.mergeChanges(fromContextDidSave: notification)
|
||||
}
|
||||
}
|
||||
.store(in: &disposeBag)
|
||||
@ -60,9 +61,6 @@ public class AppContext: ObservableObject {
|
||||
.eraseToAnyPublisher()
|
||||
|
||||
private init() {
|
||||
|
||||
let authProvider = AuthenticationServiceProvider.shared
|
||||
|
||||
documentStore = DocumentStore()
|
||||
documentStoreSubscription = documentStore.objectWillChange
|
||||
.receive(on: DispatchQueue.main)
|
||||
|
@ -53,7 +53,7 @@ public class AuthenticationServiceProvider: ObservableObject {
|
||||
Task {
|
||||
if authenticationMigrationRequired {
|
||||
migrateLegacyAuthentications(
|
||||
in: PersistenceManager.shared.managedObjectContext
|
||||
in: PersistenceManager.shared.mainActorManagedObjectContext
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ public final class SettingFetchedResultController: NSObject {
|
||||
fetchRequest.fetchBatchSize = 20
|
||||
let controller = NSFetchedResultsController(
|
||||
fetchRequest: fetchRequest,
|
||||
managedObjectContext: PersistenceManager.shared.managedObjectContext,
|
||||
managedObjectContext: PersistenceManager.shared.mainActorManagedObjectContext,
|
||||
sectionNameKeyPath: nil,
|
||||
cacheName: nil
|
||||
)
|
||||
|
@ -183,7 +183,7 @@ extension NotificationService {
|
||||
) async throws {
|
||||
// Subscription maybe failed to cancel when sign-out
|
||||
// Try cancel again if receive that kind push notification
|
||||
let managedObjectContext = PersistenceManager.shared.managedObjectContext
|
||||
let managedObjectContext = PersistenceManager.shared.mainActorManagedObjectContext
|
||||
|
||||
let userAccessToken = pushNotification.accessToken
|
||||
|
||||
@ -209,7 +209,7 @@ extension NotificationService {
|
||||
}
|
||||
|
||||
private func domain(for pushNotification: MastodonPushNotification) async throws -> String? {
|
||||
let managedObjectContext = PersistenceManager.shared.managedObjectContext
|
||||
let managedObjectContext = PersistenceManager.shared.mainActorManagedObjectContext
|
||||
return try await managedObjectContext.perform {
|
||||
let subscriptionRequest = NotificationSubscription.sortedFetchRequest
|
||||
subscriptionRequest.predicate = NotificationSubscription.predicate(userToken: pushNotification.accessToken)
|
||||
|
Loading…
x
Reference in New Issue
Block a user