diff --git a/damus/Models/ContentFilters.swift b/damus/Models/ContentFilters.swift index ca9baa057..3e9cd62c8 100644 --- a/damus/Models/ContentFilters.swift +++ b/damus/Models/ContentFilters.swift @@ -25,7 +25,7 @@ enum FilterState : Int { /// Simple filter to determine whether to show posts with #nsfw tags func nsfw_tag_filter(ev: NostrEvent) -> Bool { - return ev.referenced_hashtags.first(where: { t in t.hashtag == "nsfw" }) == nil + return ev.referenced_hashtags.first(where: { t in t.hashtag == "nsfw" }) == nil && References(tags: ev.tags).first == nil } func get_repost_of_muted_user_filter(damus_state: DamusState) -> ((_ ev: NostrEvent) -> Bool) { diff --git a/damus/Nostr/Id.swift b/damus/Nostr/Id.swift index 5d8864bda..f2f06201a 100644 --- a/damus/Nostr/Id.swift +++ b/damus/Nostr/Id.swift @@ -130,6 +130,29 @@ struct ReplaceableParam: TagConvertible { var keychar: AsciiCharacter { "d" } } +struct ContentWarningTag: TagConvertible { + let reason: String? + + static func from_tag(tag: TagSequence) -> ContentWarningTag? { + var i = tag.makeIterator() + + guard tag.count >= 1, + let t0 = i.next(), + t0.matches_str("content-warning") else { + return nil + } + + guard let t1 = i.next() else { + return ContentWarningTag(reason: nil) + } + + return ContentWarningTag(reason: t1.string()) + } + var tag: [String] { + self.reason == nil ? ["content-warning"] : ["content-warning", self.reason!] + } +} + struct Signature: Hashable, Equatable { let data: Data