metatext/Share Extension/ShareExtensionNavigationViewController.swift

51 lines
1.6 KiB
Swift
Raw Normal View History

2020-12-06 03:10:27 +00: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 20:07:22 +00:00
let viewModel: NewStatusViewModel
2020-12-06 03:10:27 +00:00
do {
2020-12-06 20:07:22 +00:00
viewModel = try newStatusViewModel()
2020-12-06 03:10:27 +00:00
} catch {
setViewControllers([ShareErrorViewController(error: error)], animated: false)
return
}
2020-12-06 20:07:22 +00:00
setViewControllers([NewStatusViewController(viewModel: viewModel)], animated: false)
2020-12-06 03:10:27 +00: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 20:07:22 +00:00
var recentId: Identity.Id?
2020-12-06 03:10:27 +00:00
_ = allIdentitiesService.immediateMostRecentlyUsedIdentityIdPublisher()
2020-12-06 20:07:22 +00:00
.sink { _ in } receiveValue: { recentId = $0 }
2020-12-06 03:10:27 +00:00
2020-12-06 20:07:22 +00:00
guard let id = recentId else { throw ShareExtensionError.noAccountFound }
2020-12-06 03:10:27 +00:00
2020-12-06 20:07:22 +00:00
let newStatusService = try allIdentitiesService.identityService(id: id).newStatusService()
2020-12-06 03:10:27 +00:00
return NewStatusViewModel(service: newStatusService)
}
}