diff options
Diffstat (limited to 'Sora/Data')
| -rw-r--r-- | Sora/Data/Moebooru/MoebooruManager.swift | 2 | ||||
| -rw-r--r-- | Sora/Data/Moebooru/MoebooruTag.swift | 2 | ||||
| -rw-r--r-- | Sora/Data/Moebooru/MoebooruTagXMLParser.swift | 59 | ||||
| -rw-r--r-- | Sora/Data/Settings.swift | 3 |
4 files changed, 45 insertions, 21 deletions
diff --git a/Sora/Data/Moebooru/MoebooruManager.swift b/Sora/Data/Moebooru/MoebooruManager.swift index 286a187..25d2489 100644 --- a/Sora/Data/Moebooru/MoebooruManager.swift +++ b/Sora/Data/Moebooru/MoebooruManager.swift @@ -100,7 +100,7 @@ class MoebooruManager: ObservableObject { if Task.isCancelled { return } DispatchQueue.main.async { - self.allTags = (MoebooruTagXMLParser().parse(data: data)).sorted { $0.count > $1.count } + self.allTags = (MoebooruTagXMLParser(data: data).parse()).sorted { $0.count > $1.count } } } catch { if (error as? URLError)?.code != .cancelled { diff --git a/Sora/Data/Moebooru/MoebooruTag.swift b/Sora/Data/Moebooru/MoebooruTag.swift index cc783f0..6aa7449 100644 --- a/Sora/Data/Moebooru/MoebooruTag.swift +++ b/Sora/Data/Moebooru/MoebooruTag.swift @@ -1,7 +1,7 @@ import Foundation struct MoebooruTag: Identifiable, Hashable { - let id: Int + let id: String let name: String let count: Int let type: Int diff --git a/Sora/Data/Moebooru/MoebooruTagXMLParser.swift b/Sora/Data/Moebooru/MoebooruTagXMLParser.swift index 7ea2e8e..e8b0213 100644 --- a/Sora/Data/Moebooru/MoebooruTagXMLParser.swift +++ b/Sora/Data/Moebooru/MoebooruTagXMLParser.swift @@ -2,34 +2,57 @@ import Foundation class MoebooruTagXMLParser: NSObject, XMLParserDelegate { private var tags: [MoebooruTag] = [] + private var currentTag: MoebooruTag? + private var parser: XMLParser - func parse(data: Data) -> [MoebooruTag] { - let parser = XMLParser(data: data) + init(data: Data) { + parser = XMLParser(data: data) + + super.init() parser.delegate = self + } + + func parse() -> [MoebooruTag] { parser.parse() return tags } - func parser(_: XMLParser, didStartElement elementName: String, - namespaceURI _: String?, qualifiedName _: String?, - attributes attributeDict: [String: String]) - { + func parser(_: XMLParser, didStartElement elementName: String, namespaceURI _: String?, qualifiedName _: String?, attributes attributeDict: [String: String] = [:]) { if elementName == "tag" { - if let id = Int(attributeDict["id"] ?? ""), - let count = Int(attributeDict["count"] ?? ""), - let type = Int(attributeDict["type"] ?? ""), - let ambiguous = Bool(attributeDict["ambiguous"] ?? "false") - { - tags.append(MoebooruTag( - id: id, - name: attributeDict["name"] ?? "", - count: count, - type: type, - ambiguous: ambiguous - )) + guard let id = attributeDict["id"], + let name = attributeDict["name"], + let countStr = attributeDict["count"], + let count = Int(countStr), + let typeStr = attributeDict["type"], + let type = Int(typeStr), + let ambiguousStr = attributeDict["ambiguous"] + else { + return } + + currentTag = MoebooruTag( + id: id, + name: name, + count: count, + type: type, + ambiguous: ambiguousStr == "true" + ) + } + } + + func parser(_: XMLParser, didEndElement elementName: String, namespaceURI _: String?, qualifiedName _: String?) { + if elementName == "tag", let tag = currentTag { + tags.append(tag) + + currentTag = nil } } + + #if DEBUG + func parser(_: XMLParser, parseErrorOccurred parseError: any Error) { + print(parseError) + } + #endif } diff --git a/Sora/Data/Settings.swift b/Sora/Data/Settings.swift index cf90a95..4d5a030 100644 --- a/Sora/Data/Settings.swift +++ b/Sora/Data/Settings.swift @@ -9,5 +9,6 @@ class Settings: ObservableObject { @AppStorage("thumbnailType") var thumbnailType: PostFileType = .preview @AppStorage("searchSuggestions") var searchSuggestions: Bool = false @AppStorage("columns") var columns: Int = 2 - @AppStorage("blurUnsafeThumbnails") var blurUnsafeThumbnails: Bool = false + @AppStorage("blurNSFWThumbnails") var blurNSFWThumbnails: Bool = false + @AppStorage("showNSFWPosts") var showNSFWPosts: Bool = false } |