Skip to content

Commit

Permalink
Implement quiet public as a default post visibility option
Browse files Browse the repository at this point in the history
Update code to handle the additional .unlisted post visibility option. And make sure to fetch full account info, which includes any custom privacy settings.

Fixes  #1395 [BUG] Implement Quit Public post privacy like the Android app
  • Loading branch information
whattherestimefor committed Feb 12, 2025
1 parent 8752282 commit 44ac523
Show file tree
Hide file tree
Showing 7 changed files with 12 additions and 24 deletions.
5 changes: 1 addition & 4 deletions Localization/app.json
Original file line number Diff line number Diff line change
Expand Up @@ -873,10 +873,7 @@
"custom": "Custom"
},
"default_post_visibility": {
"title": "Default Post Visibility",
"public": "Public",
"followers_only": "Followers Only",
"only_people_mentioned": "Only People Mentioned"
"title": "Default Post Visibility"
},
"manually_approve_follow_requests": "Manually Approve Follow Requests",
"show_followers_and_following": "Show Followers & Following",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@ class PrivacySafetyViewModel: ObservableObject, PrivacySafetySettingApplicable {
var title: String {
switch self {
case .public:
return L10n.Scene.Settings.PrivacySafety.DefaultPostVisibility.public
return L10n.Scene.Compose.Visibility.public
case .unlisted:
return L10n.Scene.Settings.PrivacySafety.DefaultPostVisibility.unlisted
return L10n.Scene.Compose.Visibility.unlisted
case .followersOnly:
return L10n.Scene.Settings.PrivacySafety.DefaultPostVisibility.followersOnly
return L10n.Scene.Compose.Visibility.private
case .onlyPeopleMentioned:
return L10n.Scene.Settings.PrivacySafety.DefaultPostVisibility.onlyPeopleMentioned
return L10n.Scene.Compose.Visibility.direct
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,7 @@ import MastodonSDK
extension APIService {
public func accountInfo(_ authenticationBox: MastodonAuthenticationBox
) async throws -> Mastodon.Entity.Account {
let account = try await Mastodon.API.Account.accountInfo(
session: session,
domain: authenticationBox.domain,
userID: authenticationBox.userID,
authorization: authenticationBox.userAuthorization
).singleOutput().value
let account = try await Mastodon.API.Account.verifyCredentials(session: session, domain: authenticationBox.domain, authorization: authenticationBox.userAuthorization)

PersistenceManager.shared.cacheAccount(account, forUserID: authenticationBox.authentication.userIdentifier())

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1717,12 +1717,6 @@ public enum L10n {
/// Privacy & Safety
public static let title = L10n.tr("Localizable", "Scene.Settings.PrivacySafety.Title", fallback: "Privacy & Safety")
public enum DefaultPostVisibility {
/// Followers Only
public static let followersOnly = L10n.tr("Localizable", "Scene.Settings.PrivacySafety.DefaultPostVisibility.FollowersOnly", fallback: "Followers Only")
/// Only People Mentioned
public static let onlyPeopleMentioned = L10n.tr("Localizable", "Scene.Settings.PrivacySafety.DefaultPostVisibility.OnlyPeopleMentioned", fallback: "Only People Mentioned")
/// Public
public static let `public` = L10n.tr("Localizable", "Scene.Settings.PrivacySafety.DefaultPostVisibility.Public", fallback: "Public")
/// Default Post Visibility
public static let title = L10n.tr("Localizable", "Scene.Settings.PrivacySafety.DefaultPostVisibility.Title", fallback: "Default Post Visibility")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -598,9 +598,6 @@ If you disagree with the policy for **%@**, you can go back and pick a different
"Scene.Settings.Overview.SupportMastodon" = "Donate to Mastodon";
"Scene.Settings.Overview.Title" = "Settings";
"Scene.Settings.PrivacySafety.AppearInSearchEngines" = "Appear in Search Engines";
"Scene.Settings.PrivacySafety.DefaultPostVisibility.FollowersOnly" = "Followers Only";
"Scene.Settings.PrivacySafety.DefaultPostVisibility.OnlyPeopleMentioned" = "Only People Mentioned";
"Scene.Settings.PrivacySafety.DefaultPostVisibility.Public" = "Public";
"Scene.Settings.PrivacySafety.DefaultPostVisibility.Title" = "Default Post Visibility";
"Scene.Settings.PrivacySafety.ManuallyApproveFollowRequests" = "Manually Approve Follow Requests";
"Scene.Settings.PrivacySafety.Preset.Custom" = "Custom";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,7 @@ extension ComposeContentViewController {
viewModel.$recentLanguages.assign(to: &composeContentToolbarViewModel.$recentLanguages)

// bind back to source due to visibility not update via delegate
composeContentToolbarViewModel.visibility = viewModel.visibility
composeContentToolbarViewModel.$visibility
.dropFirst()
.receive(on: DispatchQueue.main)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,11 @@ public final class ComposeContentViewModel: NSObject, ObservableObject {
guard let author = authenticationBox.cachedAccount else {
return .public
}
return author.locked ? .private : .public
if let defaultPrivacy = author.source?.privacy, let statusPrivacy = Mastodon.Entity.Status.Visibility(rawValue: defaultPrivacy.rawValue) {
return statusPrivacy
} else {
return author.locked ? .private : .public
}
}()
// set visibility for reply post
if case .reply(let record) = destination {
Expand Down

0 comments on commit 44ac523

Please sign in to comment.