forked from zelo72/mastodon-ios
fix: tab bar avatar button not update issue. resolve #383
This commit is contained in:
parent
b2b81e27e8
commit
d90b61e732
|
@ -106,6 +106,10 @@ class MainTabBarController: UITabBarController {
|
||||||
var _viewControllers: [UIViewController] = []
|
var _viewControllers: [UIViewController] = []
|
||||||
|
|
||||||
private(set) var isReadyForWizardAvatarButton = false
|
private(set) var isReadyForWizardAvatarButton = false
|
||||||
|
|
||||||
|
// output
|
||||||
|
var avatarURLObserver: AnyCancellable?
|
||||||
|
@Published var avatarURL: URL?
|
||||||
|
|
||||||
init(context: AppContext, coordinator: SceneCoordinator) {
|
init(context: AppContext, coordinator: SceneCoordinator) {
|
||||||
self.context = context
|
self.context = context
|
||||||
|
@ -226,17 +230,34 @@ extension MainTabBarController {
|
||||||
.store(in: &disposeBag)
|
.store(in: &disposeBag)
|
||||||
|
|
||||||
layoutAvatarButton()
|
layoutAvatarButton()
|
||||||
|
|
||||||
|
$avatarURL
|
||||||
|
.receive(on: DispatchQueue.main)
|
||||||
|
.sink { [weak self] avatarURL in
|
||||||
|
guard let self = self else { return }
|
||||||
|
self.avatarButton.avatarImageView.setImage(
|
||||||
|
url: avatarURL,
|
||||||
|
placeholder: .placeholder(color: .systemFill),
|
||||||
|
scaleToSize: MainTabBarController.avatarButtonSize
|
||||||
|
)
|
||||||
|
}
|
||||||
|
.store(in: &disposeBag)
|
||||||
context.authenticationService.activeMastodonAuthentication
|
context.authenticationService.activeMastodonAuthentication
|
||||||
.receive(on: DispatchQueue.main)
|
.receive(on: DispatchQueue.main)
|
||||||
.sink { [weak self] activeMastodonAuthentication in
|
.sink { [weak self] activeMastodonAuthentication in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
|
|
||||||
let avatarImageURL = activeMastodonAuthentication?.user.avatarImageURL()
|
if let user = activeMastodonAuthentication?.user {
|
||||||
self.avatarButton.avatarImageView.setImage(
|
self.avatarURLObserver = user.publisher(for: \.avatar)
|
||||||
url: avatarImageURL,
|
.sink { [weak self, weak user] _ in
|
||||||
placeholder: .placeholder(color: .systemFill),
|
guard let self = self else { return }
|
||||||
scaleToSize: MainTabBarController.avatarButtonSize
|
guard let user = user else { return }
|
||||||
)
|
guard user.managedObjectContext != nil else { return }
|
||||||
|
self.avatarURL = user.avatarImageURL()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
self.avatarURLObserver = nil
|
||||||
|
}
|
||||||
|
|
||||||
// a11y
|
// a11y
|
||||||
let _profileTabItem = self.tabBar.items?.first { item in item.tag == Tab.me.tag }
|
let _profileTabItem = self.tabBar.items?.first { item in item.tag == Tab.me.tag }
|
||||||
|
|
Loading…
Reference in New Issue