Download accounts at start and don't fail if there's no me (IOS-192)

Known issue for know is that the profile-tab shows a blank screen. Still gotta fix that.
This commit is contained in:
Nathan Mattes 2024-01-11 16:33:20 +01:00
parent 64dc97ab9b
commit cea6129229
2 changed files with 31 additions and 29 deletions

View File

@ -89,38 +89,39 @@ class MainTabBarController: UITabBarController {
@MainActor
func viewController(context: AppContext, authContext: AuthContext?, coordinator: SceneCoordinator) -> UIViewController {
guard let authContext, let me = authContext.mastodonAuthenticationBox.authentication.account() else {
return UITableViewController()
}
guard let authContext else { return UITableViewController() }
let viewController: UIViewController
switch self {
case .home:
let _viewController = HomeTimelineViewController()
_viewController.context = context
_viewController.coordinator = coordinator
_viewController.viewModel = .init(context: context, authContext: authContext)
viewController = _viewController
case .search:
let _viewController = SearchViewController()
_viewController.context = context
_viewController.coordinator = coordinator
_viewController.viewModel = .init(context: context, authContext: authContext)
viewController = _viewController
case .compose:
viewController = UIViewController()
case .notifications:
let _viewController = NotificationViewController()
_viewController.context = context
_viewController.coordinator = coordinator
_viewController.viewModel = .init(context: context, authContext: authContext)
viewController = _viewController
case .me:
let _viewController = ProfileViewController()
_viewController.context = context
_viewController.coordinator = coordinator
_viewController.viewModel = ProfileViewModel(context: context, authContext: authContext, account: me, relationship: nil, me: me)
viewController = _viewController
case .home:
let _viewController = HomeTimelineViewController()
_viewController.context = context
_viewController.coordinator = coordinator
_viewController.viewModel = HomeTimelineViewModel(context: context, authContext: authContext)
viewController = _viewController
case .search:
let _viewController = SearchViewController()
_viewController.context = context
_viewController.coordinator = coordinator
_viewController.viewModel = .init(context: context, authContext: authContext)
viewController = _viewController
case .compose:
viewController = UIViewController()
case .notifications:
let _viewController = NotificationViewController()
_viewController.context = context
_viewController.coordinator = coordinator
_viewController.viewModel = .init(context: context, authContext: authContext)
viewController = _viewController
case .me:
#warning("What happens if there's no me at the beginning? I guess we _do_ need another migration?")
guard let me = authContext.mastodonAuthenticationBox.authentication.account() else { return UIViewController() }
let _viewController = ProfileViewController()
_viewController.context = context
_viewController.coordinator = coordinator
_viewController.viewModel = ProfileViewModel(context: context, authContext: authContext, account: me, relationship: nil, me: me)
viewController = _viewController
}
viewController.title = self.title
return AdaptiveStatusBarStyleNavigationController(rootViewController: viewController)

View File

@ -77,6 +77,7 @@ private extension FeedDataController {
func load(kind: MastodonFeed.Kind, sinceId: MastodonStatus.ID?) async throws -> [MastodonFeed] {
switch kind {
case .home:
await context.authenticationService.authenticationServiceProvider.fetchAccounts(apiService: context.apiService)
return try await context.apiService.homeTimeline(sinceID: sinceId, authenticationBox: authContext.mastodonAuthenticationBox)
.value.map { .fromStatus(.fromEntity($0), kind: .home) }
case .notificationAll: