Add preference to hide attachment badges

Closes #354
This commit is contained in:
Shadowfacts 2023-02-13 20:40:17 -05:00
parent 1992a4c60b
commit 9e76879ce6
3 changed files with 31 additions and 8 deletions

View File

@ -65,6 +65,7 @@ class Preferences: Codable, ObservableObject {
self.blurMediaBehindContentWarning = try container.decodeIfPresent(Bool.self, forKey: .blurMediaBehindContentWarning) ?? true self.blurMediaBehindContentWarning = try container.decodeIfPresent(Bool.self, forKey: .blurMediaBehindContentWarning) ?? true
self.automaticallyPlayGifs = try container.decode(Bool.self, forKey: .automaticallyPlayGifs) self.automaticallyPlayGifs = try container.decode(Bool.self, forKey: .automaticallyPlayGifs)
self.showUncroppedMediaInline = try container.decodeIfPresent(Bool.self, forKey: .showUncroppedMediaInline) ?? true self.showUncroppedMediaInline = try container.decodeIfPresent(Bool.self, forKey: .showUncroppedMediaInline) ?? true
self.showAttachmentBadges = try container.decodeIfPresent(Bool.self, forKey: .showAttachmentBadges) ?? true
self.openLinksInApps = try container.decode(Bool.self, forKey: .openLinksInApps) self.openLinksInApps = try container.decode(Bool.self, forKey: .openLinksInApps)
self.useInAppSafari = try container.decode(Bool.self, forKey: .useInAppSafari) self.useInAppSafari = try container.decode(Bool.self, forKey: .useInAppSafari)
@ -116,6 +117,7 @@ class Preferences: Codable, ObservableObject {
try container.encode(blurMediaBehindContentWarning, forKey: .blurMediaBehindContentWarning) try container.encode(blurMediaBehindContentWarning, forKey: .blurMediaBehindContentWarning)
try container.encode(automaticallyPlayGifs, forKey: .automaticallyPlayGifs) try container.encode(automaticallyPlayGifs, forKey: .automaticallyPlayGifs)
try container.encode(showUncroppedMediaInline, forKey: .showUncroppedMediaInline) try container.encode(showUncroppedMediaInline, forKey: .showUncroppedMediaInline)
try container.encode(showAttachmentBadges, forKey: .showAttachmentBadges)
try container.encode(openLinksInApps, forKey: .openLinksInApps) try container.encode(openLinksInApps, forKey: .openLinksInApps)
try container.encode(useInAppSafari, forKey: .useInAppSafari) try container.encode(useInAppSafari, forKey: .useInAppSafari)
@ -175,6 +177,7 @@ class Preferences: Codable, ObservableObject {
@Published var blurMediaBehindContentWarning = true @Published var blurMediaBehindContentWarning = true
@Published var automaticallyPlayGifs = true @Published var automaticallyPlayGifs = true
@Published var showUncroppedMediaInline = true @Published var showUncroppedMediaInline = true
@Published var showAttachmentBadges = true
// MARK: Behavior // MARK: Behavior
@Published var openLinksInApps = true @Published var openLinksInApps = true
@ -229,6 +232,7 @@ class Preferences: Codable, ObservableObject {
case blurMediaBehindContentWarning case blurMediaBehindContentWarning
case automaticallyPlayGifs case automaticallyPlayGifs
case showUncroppedMediaInline case showUncroppedMediaInline
case showAttachmentBadges
case openLinksInApps case openLinksInApps
case useInAppSafari case useInAppSafari

View File

@ -42,6 +42,10 @@ struct MediaPrefsView: View {
Toggle(isOn: $preferences.showUncroppedMediaInline) { Toggle(isOn: $preferences.showUncroppedMediaInline) {
Text("Show Uncropped Media Inline") Text("Show Uncropped Media Inline")
} }
Toggle(isOn: $preferences.showAttachmentBadges) {
Text("Show GIF/ALT Badges")
}
} }
.appGroupedListRowBackground() .appGroupedListRowBackground()
} }

View File

@ -23,6 +23,7 @@ class AttachmentView: GIFImageView {
var playImageView: UIImageView? var playImageView: UIImageView?
var gifvView: GifvAttachmentView? var gifvView: GifvAttachmentView?
private var badgeContainer: UIStackView?
var attachment: Attachment! var attachment: Attachment!
var index: Int! var index: Int!
@ -77,6 +78,10 @@ class AttachmentView: GIFImageView {
self.displayImage() self.displayImage()
} }
} }
if getBadges().isEmpty != Preferences.shared.showAttachmentBadges {
createBadgesView(getBadges())
}
} }
@objc private func gifPlaybackModeChanged() { @objc private func gifPlaybackModeChanged() {
@ -127,14 +132,7 @@ class AttachmentView: GIFImageView {
} }
} }
var badges: Badges = [] createBadgesView(getBadges())
if attachment.description?.isEmpty == false {
badges.formUnion(.alt)
}
if attachment.kind == .gifv || attachment.url.pathExtension == "gif" {
badges.formUnion(.gif)
}
createBadgesView(badges)
switch attachment.kind { switch attachment.kind {
case .image: case .image:
@ -150,6 +148,20 @@ class AttachmentView: GIFImageView {
} }
} }
private func getBadges() -> Badges {
guard Preferences.shared.showAttachmentBadges else {
return []
}
var badges: Badges = []
if attachment.description?.isEmpty == false {
badges.formUnion(.alt)
}
if attachment.kind == .gifv || attachment.url.pathExtension == "gif" {
badges.formUnion(.gif)
}
return badges
}
var attachmentAspectRatio: CGFloat? { var attachmentAspectRatio: CGFloat? {
if let meta = self.attachment.meta { if let meta = self.attachment.meta {
if let width = meta.width, let height = meta.height { if let width = meta.width, let height = meta.height {
@ -313,10 +325,13 @@ class AttachmentView: GIFImageView {
private func createBadgesView(_ badges: Badges) { private func createBadgesView(_ badges: Badges) {
guard !badges.isEmpty else { guard !badges.isEmpty else {
badgeContainer?.removeFromSuperview()
badgeContainer = nil
return return
} }
let stack = UIStackView() let stack = UIStackView()
self.badgeContainer = stack
stack.axis = .horizontal stack.axis = .horizontal
stack.spacing = 2 stack.spacing = 2
stack.translatesAutoresizingMaskIntoConstraints = false stack.translatesAutoresizingMaskIntoConstraints = false