From 47bedff5e51ef9ac4970c77cbdd13016739de5a9 Mon Sep 17 00:00:00 2001 From: Nathan Mattes Date: Tue, 21 May 2024 18:11:18 +0200 Subject: [PATCH] Cleanup (IOS-238) --- .../Scene/Account/AccountListViewModel.swift | 4 +-- .../ForYou/ProfileCardView+ViewModel.swift | 6 +--- .../NotificationView+Configuration.swift | 3 +- .../View/ProfileHeaderView+ViewModel.swift | 4 +-- .../AutoCompleteSection+Diffable.swift | 4 +-- ...liarFollowersDashboardView+ViewModel.swift | 6 +--- .../View/Content/StatusView+ViewModel.swift | 16 ++-------- .../View/Content/UserView+ViewModel.swift | 24 +++++---------- .../View/ImageView/AvatarImageView.swift | 30 ++++--------------- 9 files changed, 23 insertions(+), 74 deletions(-) diff --git a/Mastodon/Scene/Account/AccountListViewModel.swift b/Mastodon/Scene/Account/AccountListViewModel.swift index e081f432c..afd48a6e7 100644 --- a/Mastodon/Scene/Account/AccountListViewModel.swift +++ b/Mastodon/Scene/Account/AccountListViewModel.swift @@ -106,9 +106,7 @@ extension AccountListViewModel { guard let account = authentication.account() else { return } // avatar - cell.avatarButton.avatarImageView.configure( - configuration: .init(url: account.avatarImageURL()) - ) + cell.avatarButton.avatarImageView.configure(with: account.avatarImageURL()) // name do { diff --git a/Mastodon/Scene/Discovery/ForYou/ProfileCardView+ViewModel.swift b/Mastodon/Scene/Discovery/ForYou/ProfileCardView+ViewModel.swift index f197cfb68..cfcc75113 100644 --- a/Mastodon/Scene/Discovery/ForYou/ProfileCardView+ViewModel.swift +++ b/Mastodon/Scene/Discovery/ForYou/ProfileCardView+ViewModel.swift @@ -73,11 +73,7 @@ extension ProfileCardView.ViewModel { private func bindUser(view: ProfileCardView) { $authorAvatarImageURL .sink { url in - view.avatarButton.avatarImageView.configure( - configuration: .init( - url: url - ) - ) + view.avatarButton.avatarImageView.configure(with: url) view.avatarButton.avatarImageView.configure( cornerConfiguration: .init(corner: .fixed(radius: 12)) ) diff --git a/Mastodon/Scene/Notification/NotificationView/NotificationView+Configuration.swift b/Mastodon/Scene/Notification/NotificationView/NotificationView+Configuration.swift index 353f309db..01ae0ab10 100644 --- a/Mastodon/Scene/Notification/NotificationView/NotificationView+Configuration.swift +++ b/Mastodon/Scene/Notification/NotificationView/NotificationView+Configuration.swift @@ -66,8 +66,7 @@ extension NotificationView { let author = notification.account // author avatar - let configuration = AvatarImageView.Configuration(url: author.avatarImageURL()) - avatarButton.avatarImageView.configure(configuration: configuration) + avatarButton.avatarImageView.configure(with: author.avatarImageURL()) avatarButton.avatarImageView.configure(cornerConfiguration: .init(corner: .fixed(radius: 12))) // author name diff --git a/Mastodon/Scene/Profile/Header/View/ProfileHeaderView+ViewModel.swift b/Mastodon/Scene/Profile/Header/View/ProfileHeaderView+ViewModel.swift index cf5dfcd61..f7d461283 100644 --- a/Mastodon/Scene/Profile/Header/View/ProfileHeaderView+ViewModel.swift +++ b/Mastodon/Scene/Profile/Header/View/ProfileHeaderView+ViewModel.swift @@ -116,9 +116,7 @@ extension ProfileHeaderView.ViewModel { ) .sink { avatarImageURL, avatarImageEditing, isEditing, _ in view.avatarButton.avatarImageView.image = avatarImageEditing - view.avatarButton.avatarImageView.configure(configuration: .init( - url: (!isEditing || avatarImageEditing == nil) ? avatarImageURL : nil - )) + view.avatarButton.avatarImageView.configure(with: (!isEditing || avatarImageEditing == nil) ? avatarImageURL : nil) } .store(in: &disposeBag) // blur for blocking & blockingBy diff --git a/MastodonSDK/Sources/MastodonUI/DataSource/AutoCompleteSection+Diffable.swift b/MastodonSDK/Sources/MastodonUI/DataSource/AutoCompleteSection+Diffable.swift index 3022899f1..ff8dd20f3 100644 --- a/MastodonSDK/Sources/MastodonUI/DataSource/AutoCompleteSection+Diffable.swift +++ b/MastodonSDK/Sources/MastodonUI/DataSource/AutoCompleteSection+Diffable.swift @@ -78,7 +78,7 @@ extension AutoCompleteSection { } cell.subtitleLabel.text = "@" + account.acct cell.avatarImageView.isHidden = false - cell.avatarImageView.configure(configuration: .init(url: URL(string: account.avatar))) + cell.avatarImageView.configure(with: URL(string: account.avatar)) } private static func configureEmoji(cell: AutoCompleteTableViewCell, emoji: Mastodon.Entity.Emoji, isFirst: Bool) { @@ -88,7 +88,7 @@ extension AutoCompleteSection { // cell.subtitleLabel.text = isFirst ? L10n.Scene.Compose.AutoComplete.spaceToAdd : " " cell.subtitleLabel.text = " " cell.avatarImageView.isHidden = false - cell.avatarImageView.configure(configuration: .init(url: URL(string: emoji.url))) + cell.avatarImageView.configure(with: URL(string: emoji.url)) } } diff --git a/MastodonSDK/Sources/MastodonUI/View/Content/FamiliarFollowersDashboardView+ViewModel.swift b/MastodonSDK/Sources/MastodonUI/View/Content/FamiliarFollowersDashboardView+ViewModel.swift index c95ebf7ef..4896af198 100644 --- a/MastodonSDK/Sources/MastodonUI/View/Content/FamiliarFollowersDashboardView+ViewModel.swift +++ b/MastodonSDK/Sources/MastodonUI/View/Content/FamiliarFollowersDashboardView+ViewModel.swift @@ -51,11 +51,7 @@ extension FamiliarFollowersDashboardView.ViewModel { avatarButton.size = size avatarButton.frame = CGRect(origin: origin, size: size) view.avatarContainerView.addSubview(avatarButton) - avatarButton.avatarImageView.configure( - configuration: .init( - url: avatarURL - ) - ) + avatarButton.avatarImageView.configure(with: avatarURL) avatarButton.avatarImageView.configure( cornerConfiguration: .init( corner: .fixed(radius: 7), diff --git a/MastodonSDK/Sources/MastodonUI/View/Content/StatusView+ViewModel.swift b/MastodonSDK/Sources/MastodonUI/View/Content/StatusView+ViewModel.swift index 6cceb071f..58bb9df89 100644 --- a/MastodonSDK/Sources/MastodonUI/View/Content/StatusView+ViewModel.swift +++ b/MastodonSDK/Sources/MastodonUI/View/Content/StatusView+ViewModel.swift @@ -241,19 +241,9 @@ extension StatusView.ViewModel { private func bindAuthor(statusView: StatusView) { let authorView = statusView.authorView // avatar - Publishers.CombineLatest( - $authorAvatarImage.removeDuplicates(), - $authorAvatarImageURL.removeDuplicates() - ) - .sink { image, url in - let configuration: AvatarImageView.Configuration = { - if let image { - return AvatarImageView.Configuration(image: image) - } else { - return AvatarImageView.Configuration(url: url) - } - }() - authorView.avatarButton.avatarImageView.configure(configuration: configuration) + $authorAvatarImageURL.removeDuplicates() + .sink { url in + authorView.avatarButton.avatarImageView.configure(with: url) authorView.avatarButton.avatarImageView.configure(cornerConfiguration: .init(corner: .fixed(radius: 12))) } .store(in: &disposeBag) diff --git a/MastodonSDK/Sources/MastodonUI/View/Content/UserView+ViewModel.swift b/MastodonSDK/Sources/MastodonUI/View/Content/UserView+ViewModel.swift index c29bdd88d..17bf4cfad 100644 --- a/MastodonSDK/Sources/MastodonUI/View/Content/UserView+ViewModel.swift +++ b/MastodonSDK/Sources/MastodonUI/View/Content/UserView+ViewModel.swift @@ -20,7 +20,6 @@ extension UserView { public var disposeBag = Set() public var observations = Set() - @Published public var authorAvatarImage: UIImage? @Published public var authorAvatarImageURL: URL? @Published public var authorName: MetaContent? @Published public var authorUsername: String? @@ -36,22 +35,13 @@ extension UserView.ViewModel { func bind(userView: UserView) { // avatar - Publishers.CombineLatest( - $authorAvatarImage, - $authorAvatarImageURL - ) - .sink { image, url in - let configuration: AvatarImageView.Configuration = { - if let image = image { - return AvatarImageView.Configuration(image: image) - } else { - return AvatarImageView.Configuration(url: url) - } - }() - userView.avatarButton.avatarImageView.configure(configuration: configuration) - userView.avatarButton.avatarImageView.configure(cornerConfiguration: .init(corner: .fixed(radius: 7))) - } - .store(in: &disposeBag) + $authorAvatarImageURL + .sink { url in + userView.avatarButton.avatarImageView.configure(with: url) + userView.avatarButton.avatarImageView.configure(cornerConfiguration: .init(corner: .fixed(radius: 7))) + } + .store(in: &disposeBag) + // name $authorName .sink { metaContent in diff --git a/MastodonSDK/Sources/MastodonUI/View/ImageView/AvatarImageView.swift b/MastodonSDK/Sources/MastodonUI/View/ImageView/AvatarImageView.swift index 047582e1c..92f800443 100644 --- a/MastodonSDK/Sources/MastodonUI/View/ImageView/AvatarImageView.swift +++ b/MastodonSDK/Sources/MastodonUI/View/ImageView/AvatarImageView.swift @@ -11,7 +11,7 @@ import AlamofireImage public class AvatarImageView: FLAnimatedImageView { public var imageViewSize: CGSize? - public var configuration = Configuration(url: nil) + public var url: URL? = nil public var cornerConfiguration = CornerConfiguration() } @@ -55,35 +55,17 @@ extension AvatarImageView { public static let placeholder = UIImage.placeholder(color: .systemFill) - public struct Configuration { - public let url: URL? - - public init( - url: URL? - ) { - self.url = url - } - - public init( - image: UIImage - ) { - self.url = nil - } - } - - public func configure(configuration: Configuration) { + public func configure(with url: URL?) { prepareForReuse() - self.configuration = configuration - - guard let url = configuration.url else { - return - } + self.url = url + guard let url else { return } + switch url.pathExtension.lowercased() { case "gif": setImage( - url: configuration.url, + url: url, scaleToSize: imageViewSize ) default: