Compare commits
No commits in common. "afe47437e4917a1f352d38df06c0809981d0c49c" and "0f2a85b1088cd7d8a27924b37715c465c2a52420" have entirely different histories.
afe47437e4
...
0f2a85b108
|
@ -217,18 +217,6 @@ public final class InstanceFeatures: ObservableObject {
|
||||||
instanceType.isPleroma
|
instanceType.isPleroma
|
||||||
}
|
}
|
||||||
|
|
||||||
public var muteNotifications: Bool {
|
|
||||||
!instanceType.isPixelfed
|
|
||||||
}
|
|
||||||
|
|
||||||
public var blockDomains: Bool {
|
|
||||||
!instanceType.isPixelfed
|
|
||||||
}
|
|
||||||
|
|
||||||
public var hideReblogs: Bool {
|
|
||||||
!instanceType.isPixelfed
|
|
||||||
}
|
|
||||||
|
|
||||||
public init() {
|
public init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -350,14 +338,6 @@ extension InstanceFeatures {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var isPixelfed: Bool {
|
|
||||||
if case .pixelfed = self {
|
|
||||||
return true
|
|
||||||
} else {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@_spi(InstanceType) public enum MastodonType {
|
@_spi(InstanceType) public enum MastodonType {
|
||||||
|
|
|
@ -27,13 +27,10 @@ public struct Relationship: RelationshipProtocol, Decodable, Sendable {
|
||||||
self.followedBy = try container.decode(Bool.self, forKey: .followedBy)
|
self.followedBy = try container.decode(Bool.self, forKey: .followedBy)
|
||||||
self.blocking = try container.decode(Bool.self, forKey: .blocking)
|
self.blocking = try container.decode(Bool.self, forKey: .blocking)
|
||||||
self.muting = try container.decode(Bool.self, forKey: .muting)
|
self.muting = try container.decode(Bool.self, forKey: .muting)
|
||||||
// not supported on pixelfed
|
self.mutingNotifications = try container.decode(Bool.self, forKey: .mutingNotifications)
|
||||||
self.mutingNotifications = try container.decodeIfPresent(Bool.self, forKey: .mutingNotifications) ?? false
|
|
||||||
self.followRequested = try container.decode(Bool.self, forKey: .followRequested)
|
self.followRequested = try container.decode(Bool.self, forKey: .followRequested)
|
||||||
// not supported on pixelfed
|
self.domainBlocking = try container.decode(Bool.self, forKey: .domainBlocking)
|
||||||
self.domainBlocking = try container.decodeIfPresent(Bool.self, forKey: .domainBlocking) ?? false
|
self.showingReblogs = try container.decode(Bool.self, forKey: .showingReblogs)
|
||||||
// not supported on pixelfed
|
|
||||||
self.showingReblogs = try container.decodeIfPresent(Bool.self, forKey: .showingReblogs) ?? true
|
|
||||||
self.endorsed = try container.decodeIfPresent(Bool.self, forKey: .endorsed) ?? false
|
self.endorsed = try container.decodeIfPresent(Bool.self, forKey: .endorsed) ?? false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -78,20 +78,18 @@ struct MuteAccountView: View {
|
||||||
}
|
}
|
||||||
.accessibilityHidden(true)
|
.accessibilityHidden(true)
|
||||||
|
|
||||||
if mastodonController.instanceFeatures.muteNotifications {
|
Section {
|
||||||
Section {
|
Toggle(isOn: $muteNotifications) {
|
||||||
Toggle(isOn: $muteNotifications) {
|
Text("Hide notifications from this person")
|
||||||
Text("Hide notifications from this person")
|
}
|
||||||
}
|
} footer: {
|
||||||
} footer: {
|
if muteNotifications {
|
||||||
if muteNotifications {
|
Text("This user's posts and notifications will be hidden.")
|
||||||
Text("This user's posts and notifications will be hidden.")
|
} else {
|
||||||
} else {
|
Text("This user's posts will be hidden from your timeline. You can still receive notifications from them.")
|
||||||
Text("This user's posts will be hidden from your timeline. You can still receive notifications from them.")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
.appGroupedListRowBackground()
|
|
||||||
}
|
}
|
||||||
|
.appGroupedListRowBackground()
|
||||||
|
|
||||||
Section {
|
Section {
|
||||||
Picker(selection: $duration) {
|
Picker(selection: $duration) {
|
||||||
|
|
|
@ -9,12 +9,6 @@
|
||||||
import UIKit
|
import UIKit
|
||||||
import Pachyderm
|
import Pachyderm
|
||||||
import Combine
|
import Combine
|
||||||
import OSLog
|
|
||||||
#if canImport(Sentry)
|
|
||||||
import Sentry
|
|
||||||
#endif
|
|
||||||
|
|
||||||
private let logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "ProfileStatusesViewController")
|
|
||||||
|
|
||||||
class ProfileStatusesViewController: UIViewController, TimelineLikeCollectionViewController, CollectionViewController {
|
class ProfileStatusesViewController: UIViewController, TimelineLikeCollectionViewController, CollectionViewController {
|
||||||
|
|
||||||
|
@ -256,16 +250,9 @@ class ProfileStatusesViewController: UIViewController, TimelineLikeCollectionVie
|
||||||
state = .setupInitialSnapshot
|
state = .setupInitialSnapshot
|
||||||
|
|
||||||
Task {
|
Task {
|
||||||
do {
|
if let (all, _) = try? await mastodonController.run(Client.getRelationships(accounts: [accountID])),
|
||||||
let (all, _) = try await mastodonController.run(Client.getRelationships(accounts: [accountID]))
|
let relationship = all.first {
|
||||||
if let relationship = all.first {
|
self.mastodonController.persistentContainer.addOrUpdate(relationship: relationship)
|
||||||
self.mastodonController.persistentContainer.addOrUpdate(relationship: relationship)
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
logger.error("Error fetching relationship: \(String(describing: error))")
|
|
||||||
#if canImport(Sentry)
|
|
||||||
SentrySDK.capture(error: error)
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -557,15 +557,11 @@ extension MenuActionProvider {
|
||||||
return createAction(identifier: "block", title: "Unblock \(displayName)", systemImageName: "circle.slash", handler: handler(false))
|
return createAction(identifier: "block", title: "Unblock \(displayName)", systemImageName: "circle.slash", handler: handler(false))
|
||||||
} else {
|
} else {
|
||||||
let image = UIImage(systemName: "circle.slash")
|
let image = UIImage(systemName: "circle.slash")
|
||||||
var children = [
|
return UIMenu(title: "Block", image: image, children: [
|
||||||
UIAction(title: "Cancel", handler: { _ in }),
|
UIAction(title: "Cancel", handler: { _ in }),
|
||||||
UIAction(title: "Block \(displayName)", image: image, attributes: .destructive, handler: handler(true)),
|
UIAction(title: "Block \(displayName)", image: image, attributes: .destructive, handler: handler(true)),
|
||||||
]
|
UIAction(title: "Block \(host)", image: image, attributes: .destructive, handler: domainHandler(true))
|
||||||
if mastodonController.instanceFeatures.blockDomains,
|
])
|
||||||
host != mastodonController.account?.url.host {
|
|
||||||
children.append(UIAction(title: "Block \(host)", image: image, attributes: .destructive, handler: domainHandler(true)))
|
|
||||||
}
|
|
||||||
return UIMenu(title: "Block", image: image, children: children)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -596,8 +592,7 @@ extension MenuActionProvider {
|
||||||
@MainActor
|
@MainActor
|
||||||
private func hideReblogsAction(for relationship: RelationshipMO, mastodonController: MastodonController) -> UIMenuElement? {
|
private func hideReblogsAction(for relationship: RelationshipMO, mastodonController: MastodonController) -> UIMenuElement? {
|
||||||
// don't show action for people that the user isn't following and isn't already hiding reblogs for
|
// don't show action for people that the user isn't following and isn't already hiding reblogs for
|
||||||
guard relationship.following || relationship.showingReblogs,
|
guard relationship.following || relationship.showingReblogs else {
|
||||||
mastodonController.instanceFeatures.hideReblogs else {
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
let title = relationship.showingReblogs ? "Hide Reblogs" : "Show Reblogs"
|
let title = relationship.showingReblogs ? "Hide Reblogs" : "Show Reblogs"
|
||||||
|
|
Loading…
Reference in New Issue