2020-12-06 04:10:27 +01:00
|
|
|
// Copyright © 2020 Metabolist. All rights reserved.
|
|
|
|
|
|
|
|
import Combine
|
|
|
|
import ServiceLayer
|
|
|
|
import UIKit
|
|
|
|
import ViewModels
|
|
|
|
|
|
|
|
@objc(ShareExtensionNavigationViewController)
|
|
|
|
class ShareExtensionNavigationViewController: UINavigationController {
|
|
|
|
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
|
|
|
|
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
|
|
|
|
|
2020-12-06 21:07:22 +01:00
|
|
|
let viewModel: NewStatusViewModel
|
2020-12-06 04:10:27 +01:00
|
|
|
|
|
|
|
do {
|
2020-12-06 21:07:22 +01:00
|
|
|
viewModel = try newStatusViewModel()
|
2020-12-06 04:10:27 +01:00
|
|
|
} catch {
|
|
|
|
setViewControllers([ShareErrorViewController(error: error)], animated: false)
|
|
|
|
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2020-12-06 21:07:22 +01:00
|
|
|
setViewControllers([NewStatusViewController(viewModel: viewModel)], animated: false)
|
2020-12-06 04:10:27 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@available(*, unavailable)
|
|
|
|
required init?(coder aDecoder: NSCoder) {
|
|
|
|
fatalError("init(coder:) has not been implemented")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private extension ShareExtensionNavigationViewController {
|
|
|
|
func newStatusViewModel() throws -> NewStatusViewModel {
|
|
|
|
let environment = AppEnvironment.live(
|
|
|
|
userNotificationCenter: .current(),
|
|
|
|
reduceMotion: { UIAccessibility.isReduceMotionEnabled })
|
|
|
|
let allIdentitiesService = try AllIdentitiesService(environment: environment)
|
|
|
|
|
2020-12-06 21:07:22 +01:00
|
|
|
var recentId: Identity.Id?
|
2020-12-06 04:10:27 +01:00
|
|
|
|
|
|
|
_ = allIdentitiesService.immediateMostRecentlyUsedIdentityIdPublisher()
|
2020-12-06 21:07:22 +01:00
|
|
|
.sink { _ in } receiveValue: { recentId = $0 }
|
2020-12-06 04:10:27 +01:00
|
|
|
|
2020-12-06 21:07:22 +01:00
|
|
|
guard let id = recentId else { throw ShareExtensionError.noAccountFound }
|
2020-12-06 04:10:27 +01:00
|
|
|
|
2020-12-06 21:07:22 +01:00
|
|
|
let newStatusService = try allIdentitiesService.identityService(id: id).newStatusService()
|
2020-12-06 04:10:27 +01:00
|
|
|
|
|
|
|
return NewStatusViewModel(service: newStatusService)
|
|
|
|
}
|
|
|
|
}
|