fix: follow push notification deep-link not works issue

This commit is contained in:
CMK 2022-02-11 15:28:39 +08:00
parent 9e954c517e
commit d85af16e03
2 changed files with 34 additions and 68 deletions

View File

@ -56,48 +56,43 @@ final class RemoteProfileViewModel: ProfileViewModel {
init(context: AppContext, notificationID: Mastodon.Entity.Notification.ID) {
super.init(context: context, optionalMastodonUser: nil)
guard let activeMastodonAuthenticationBox = context.authenticationService.activeMastodonAuthenticationBox.value else {
guard let authenticationBox = context.authenticationService.activeMastodonAuthenticationBox.value else {
return
}
let domain = activeMastodonAuthenticationBox.domain
let authorization = activeMastodonAuthenticationBox.userAuthorization
// context.apiService.notification(
// notificationID: notificationID,
// mastodonAuthenticationBox: activeMastodonAuthenticationBox
// )
// .compactMap { [weak self] response -> AnyPublisher<Mastodon.Response.Content<Mastodon.Entity.Account>, Error>? in
// let userID = response.value.account.id
// // TODO: use .account directly
// return context.apiService.accountInfo(
// domain: domain,
// userID: userID,
// authorization: authorization
// )
// }
// .switchToLatest()
// .retry(3)
// .sink { completion in
// switch completion {
// case .failure(let error):
// // TODO: handle error
// os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s: remote notification %s user fetch failed: %s", ((#file as NSString).lastPathComponent), #line, #function, notificationID, error.localizedDescription)
// case .finished:
// os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s: remote notification %s user fetched", ((#file as NSString).lastPathComponent), #line, #function, notificationID)
// }
// } receiveValue: { [weak self] response in
// guard let self = self else { return }
// let managedObjectContext = context.managedObjectContext
// let request = MastodonUser.sortedFetchRequest
// request.fetchLimit = 1
// request.predicate = MastodonUser.predicate(domain: domain, id: response.value.id)
// guard let mastodonUser = managedObjectContext.safeFetch(request).first else {
// assertionFailure()
// return
// }
// self.mastodonUser.value = mastodonUser
// }
// .store(in: &disposeBag)
Task { @MainActor in
let response = try await context.apiService.notification(
notificationID: notificationID,
authenticationBox: authenticationBox
)
let userID = response.value.account.id
let _user: MastodonUser? = try await context.managedObjectContext.perform {
let request = MastodonUser.sortedFetchRequest
request.predicate = MastodonUser.predicate(domain: authenticationBox.domain, id: userID)
request.fetchLimit = 1
return context.managedObjectContext.safeFetch(request).first
}
if let user = _user {
self.user = user
} else {
_ = try await context.apiService.accountInfo(
domain: authenticationBox.domain,
userID: userID,
authorization: authenticationBox.userAuthorization
)
let _user: MastodonUser? = try await context.managedObjectContext.perform {
let request = MastodonUser.sortedFetchRequest
request.predicate = MastodonUser.predicate(domain: authenticationBox.domain, id: userID)
request.fetchLimit = 1
return context.managedObjectContext.safeFetch(request).first
}
self.user = _user
}
} // end Task
}
}

View File

@ -43,35 +43,6 @@ extension APIService {
}
return response
// .flatMap { response -> AnyPublisher<Mastodon.Response.Content<Mastodon.Entity.Account>, Error> in
// let log = OSLog.api
// let account = response.value
//
// return self.backgroundManagedObjectContext.performChanges {
// let (mastodonUser, isCreated) = APIService.CoreData.createOrMergeMastodonUser(
// into: self.backgroundManagedObjectContext,
// for: nil,
// in: domain,
// entity: account,
// userCache: nil,
// networkDate: response.networkDate,
// log: log
// )
// let flag = isCreated ? "+" : "-"
// os_log(.info, log: log, "%{public}s[%{public}ld], %{public}s: fetch mastodon user [%s](%s)%s", ((#file as NSString).lastPathComponent), #line, #function, flag, mastodonUser.id, mastodonUser.username)
// }
// .setFailureType(to: Error.self)
// .tryMap { result -> Mastodon.Response.Content<Mastodon.Entity.Account> in
// switch result {
// case .success:
// return response
// case .failure(let error):
// throw error
// }
// }
// .eraseToAnyPublisher()
// }
// .eraseToAnyPublisher()
}
}