diff --git a/Mastodon/Protocol/Provider/DataSourceFacade+Status.swift b/Mastodon/Protocol/Provider/DataSourceFacade+Status.swift index 9d9e73eb3..412079293 100644 --- a/Mastodon/Protocol/Provider/DataSourceFacade+Status.swift +++ b/Mastodon/Protocol/Provider/DataSourceFacade+Status.swift @@ -205,6 +205,9 @@ extension DataSourceFacade { menuContext: MenuContext ) async throws { switch action { + case .hideReblogs(_): + //TODO: Implement. Alert. Toggle on Server. + return case .muteUser(let actionContext): let alertController = UIAlertController( title: actionContext.isMuting ? L10n.Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.title : L10n.Scene.Profile.RelationshipActionAlert.ConfirmMuteUser.title, diff --git a/Mastodon/Scene/Profile/ProfileViewController.swift b/Mastodon/Scene/Profile/ProfileViewController.swift index 9dd06b22c..34c2775c8 100644 --- a/Mastodon/Scene/Profile/ProfileViewController.swift +++ b/Mastodon/Scene/Profile/ProfileViewController.swift @@ -378,6 +378,7 @@ extension ProfileViewController { let _ = ManagedObjectRecord(objectID: user.objectID) let menu = MastodonMenu.setupMenu( actions: [ + .hideReblogs(.init(showReblogs: self.viewModel.relationshipViewModel.showReblogs)), .muteUser(.init(name: name, isMuting: self.viewModel.relationshipViewModel.isMuting)), .blockUser(.init(name: name, isBlocking: self.viewModel.relationshipViewModel.isBlocking)), .reportUser(.init(name: name)), diff --git a/MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift b/MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift index c64a50fa2..1d5b9895b 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift +++ b/MastodonSDK/Sources/MastodonLocalization/Generated/Strings.swift @@ -198,6 +198,8 @@ public enum L10n { public static let follow = L10n.tr("Localizable", "Common.Controls.Friendship.Follow") /// Following public static let following = L10n.tr("Localizable", "Common.Controls.Friendship.Following") + /// Hide Reblogs + public static let hideReblogs = L10n.tr("Localizable", "Common.Controls.Friendship.HideReblogs") /// Mute public static let mute = L10n.tr("Localizable", "Common.Controls.Friendship.Mute") /// Muted @@ -210,6 +212,8 @@ public enum L10n { public static let pending = L10n.tr("Localizable", "Common.Controls.Friendship.Pending") /// Request public static let request = L10n.tr("Localizable", "Common.Controls.Friendship.Request") + /// Show Reblogs + public static let showReblogs = L10n.tr("Localizable", "Common.Controls.Friendship.ShowReblogs") /// Unblock public static let unblock = L10n.tr("Localizable", "Common.Controls.Friendship.Unblock") /// Unblock %@ diff --git a/MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings b/MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings index 1c40bf855..94bee697c 100644 --- a/MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings +++ b/MastodonSDK/Sources/MastodonLocalization/Resources/en.lproj/Localizable.strings @@ -77,6 +77,8 @@ Please check your internet connection."; "Common.Controls.Friendship.UnblockUser" = "Unblock %@"; "Common.Controls.Friendship.Unmute" = "Unmute"; "Common.Controls.Friendship.UnmuteUser" = "Unmute %@"; +"Common.Controls.Friendship.HideReblogs" = "Hide Reblogs"; +"Common.Controls.Friendship.ShowReblogs" = "Show Reblogs"; "Common.Controls.Keyboard.Common.ComposeNewPost" = "Compose New Post"; "Common.Controls.Keyboard.Common.OpenSettings" = "Open Settings"; "Common.Controls.Keyboard.Common.ShowFavorites" = "Show Favorites"; diff --git a/MastodonSDK/Sources/MastodonUI/View/Menu/MastodonMenu.swift b/MastodonSDK/Sources/MastodonUI/View/Menu/MastodonMenu.swift index d6a5bdbac..b85e71138 100644 --- a/MastodonSDK/Sources/MastodonUI/View/Menu/MastodonMenu.swift +++ b/MastodonSDK/Sources/MastodonUI/View/Menu/MastodonMenu.swift @@ -45,11 +45,23 @@ extension MastodonMenu { case reportUser(ReportUserActionContext) case shareUser(ShareUserActionContext) case bookmarkStatus(BookmarkStatusActionContext) + case hideReblogs(HideReblogsActionContext) case shareStatus case deleteStatus func build(delegate: MastodonMenuDelegate) -> BuiltAction { switch self { + case .hideReblogs(let context): + let title = context.showReblogs ? L10n.Common.Controls.Friendship.hideReblogs : L10n.Common.Controls.Friendship.hideReblogs + let reblogAction = BuiltAction( + title: title, + image: UIImage(systemName: "arrow.2.squarepath") + ) { [weak delegate] in + guard let delegate = delegate else { return } + delegate.menuAction(self) + } + + return reblogAction case .muteUser(let context): let muteAction = BuiltAction( title: context.isMuting ? L10n.Common.Controls.Friendship.unmuteUser(context.name) : L10n.Common.Controls.Friendship.muteUser(context.name), @@ -205,5 +217,12 @@ extension MastodonMenu { self.name = name } } - + + public struct HideReblogsActionContext { + public let showReblogs: Bool + + public init(showReblogs: Bool) { + self.showReblogs = showReblogs + } + } } diff --git a/MastodonSDK/Sources/MastodonUI/ViewModel/RelationshipViewModel.swift b/MastodonSDK/Sources/MastodonUI/ViewModel/RelationshipViewModel.swift index a19de5138..5b032aa90 100644 --- a/MastodonSDK/Sources/MastodonUI/ViewModel/RelationshipViewModel.swift +++ b/MastodonSDK/Sources/MastodonUI/ViewModel/RelationshipViewModel.swift @@ -114,6 +114,7 @@ public final class RelationshipViewModel { @Published public var isFollowing = false @Published public var isFollowingBy = false @Published public var isMuting = false + @Published public var showReblogs = false @Published public var isBlocking = false @Published public var isBlockingBy = false @Published public var isSuspended = false