parent
cf317e15e9
commit
2467297f04
|
@ -87,6 +87,7 @@ public final class Preferences: Codable, ObservableObject {
|
||||||
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.showAttachmentBadges = try container.decodeIfPresent(Bool.self, forKey: .showAttachmentBadges) ?? true
|
||||||
|
self.attachmentAltBadgeInverted = try container.decodeIfPresent(Bool.self, forKey: .attachmentAltBadgeInverted) ?? false
|
||||||
|
|
||||||
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)
|
||||||
|
@ -145,6 +146,7 @@ public final class Preferences: Codable, ObservableObject {
|
||||||
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(showAttachmentBadges, forKey: .showAttachmentBadges)
|
||||||
|
try container.encode(attachmentAltBadgeInverted, forKey: .attachmentAltBadgeInverted)
|
||||||
|
|
||||||
try container.encode(openLinksInApps, forKey: .openLinksInApps)
|
try container.encode(openLinksInApps, forKey: .openLinksInApps)
|
||||||
try container.encode(useInAppSafari, forKey: .useInAppSafari)
|
try container.encode(useInAppSafari, forKey: .useInAppSafari)
|
||||||
|
@ -211,6 +213,7 @@ public final class Preferences: Codable, ObservableObject {
|
||||||
@Published public var automaticallyPlayGifs = true
|
@Published public var automaticallyPlayGifs = true
|
||||||
@Published public var showUncroppedMediaInline = true
|
@Published public var showUncroppedMediaInline = true
|
||||||
@Published public var showAttachmentBadges = true
|
@Published public var showAttachmentBadges = true
|
||||||
|
@Published public var attachmentAltBadgeInverted = false
|
||||||
|
|
||||||
// MARK: Behavior
|
// MARK: Behavior
|
||||||
@Published public var openLinksInApps = true
|
@Published public var openLinksInApps = true
|
||||||
|
@ -274,6 +277,7 @@ public final class Preferences: Codable, ObservableObject {
|
||||||
case automaticallyPlayGifs
|
case automaticallyPlayGifs
|
||||||
case showUncroppedMediaInline
|
case showUncroppedMediaInline
|
||||||
case showAttachmentBadges
|
case showAttachmentBadges
|
||||||
|
case attachmentAltBadgeInverted
|
||||||
|
|
||||||
case openLinksInApps
|
case openLinksInApps
|
||||||
case useInAppSafari
|
case useInAppSafari
|
||||||
|
|
|
@ -44,8 +44,13 @@ struct MediaPrefsView: View {
|
||||||
}
|
}
|
||||||
|
|
||||||
Toggle(isOn: $preferences.showAttachmentBadges) {
|
Toggle(isOn: $preferences.showAttachmentBadges) {
|
||||||
Text("Show GIF/ALT Badges")
|
Text("Show GIF/\(Text("Alt").font(.body.lowercaseSmallCaps())) Badges")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Toggle(isOn: $preferences.attachmentAltBadgeInverted) {
|
||||||
|
Text("Show Badge when Missing \(Text("Alt").font(.body.lowercaseSmallCaps()))")
|
||||||
|
}
|
||||||
|
.disabled(!preferences.showAttachmentBadges)
|
||||||
}
|
}
|
||||||
.appGroupedListRowBackground()
|
.appGroupedListRowBackground()
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,8 @@ class AttachmentView: GIFImageView {
|
||||||
var attachment: Attachment!
|
var attachment: Attachment!
|
||||||
var index: Int!
|
var index: Int!
|
||||||
|
|
||||||
|
private var currentBadges: Badges = []
|
||||||
|
|
||||||
private var loadAttachmentTask: Task<Void, Never>?
|
private var loadAttachmentTask: Task<Void, Never>?
|
||||||
private var source: Source?
|
private var source: Source?
|
||||||
var attachmentImage: UIImage? {
|
var attachmentImage: UIImage? {
|
||||||
|
@ -103,8 +105,9 @@ class AttachmentView: GIFImageView {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if getBadges().isEmpty != Preferences.shared.showAttachmentBadges {
|
let newBadges = getBadges()
|
||||||
createBadgesView(getBadges())
|
if currentBadges != newBadges {
|
||||||
|
createBadgesView(newBadges)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,8 +178,13 @@ class AttachmentView: GIFImageView {
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
var badges: Badges = []
|
var badges: Badges = []
|
||||||
if attachment.description?.isEmpty == false {
|
let hasDescription = attachment.description?.isEmpty == false
|
||||||
|
if hasDescription,
|
||||||
|
!Preferences.shared.attachmentAltBadgeInverted {
|
||||||
badges.formUnion(.alt)
|
badges.formUnion(.alt)
|
||||||
|
} else if !hasDescription,
|
||||||
|
Preferences.shared.attachmentAltBadgeInverted {
|
||||||
|
badges.formUnion(.noAlt)
|
||||||
}
|
}
|
||||||
if attachment.kind == .gifv || attachment.url.pathExtension == "gif" {
|
if attachment.kind == .gifv || attachment.url.pathExtension == "gif" {
|
||||||
badges.formUnion(.gif)
|
badges.formUnion(.gif)
|
||||||
|
@ -354,6 +362,8 @@ class AttachmentView: GIFImageView {
|
||||||
}
|
}
|
||||||
|
|
||||||
private func createBadgesView(_ badges: Badges) {
|
private func createBadgesView(_ badges: Badges) {
|
||||||
|
currentBadges = badges
|
||||||
|
|
||||||
guard !badges.isEmpty else {
|
guard !badges.isEmpty else {
|
||||||
badgeContainer?.removeFromSuperview()
|
badgeContainer?.removeFromSuperview()
|
||||||
badgeContainer = nil
|
badgeContainer = nil
|
||||||
|
@ -393,6 +403,9 @@ class AttachmentView: GIFImageView {
|
||||||
if badges.contains(.alt) {
|
if badges.contains(.alt) {
|
||||||
makeBadgeView(text: "ALT")
|
makeBadgeView(text: "ALT")
|
||||||
}
|
}
|
||||||
|
if badges.contains(.noAlt) {
|
||||||
|
makeBadgeView(text: "No ALT")
|
||||||
|
}
|
||||||
|
|
||||||
let first = stack.arrangedSubviews.first!
|
let first = stack.arrangedSubviews.first!
|
||||||
first.layer.masksToBounds = true
|
first.layer.masksToBounds = true
|
||||||
|
@ -445,6 +458,7 @@ fileprivate extension AttachmentView {
|
||||||
struct Badges: OptionSet {
|
struct Badges: OptionSet {
|
||||||
static let gif = Badges(rawValue: 1 << 0)
|
static let gif = Badges(rawValue: 1 << 0)
|
||||||
static let alt = Badges(rawValue: 1 << 1)
|
static let alt = Badges(rawValue: 1 << 1)
|
||||||
|
static let noAlt = Badges(rawValue: 1 << 2)
|
||||||
|
|
||||||
let rawValue: Int
|
let rawValue: Int
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue