summaryrefslogtreecommitdiff
path: root/Sora/Data
diff options
context:
space:
mode:
Diffstat (limited to 'Sora/Data')
-rw-r--r--Sora/Data/Moebooru/MoebooruManager.swift2
-rw-r--r--Sora/Data/Moebooru/MoebooruTag.swift2
-rw-r--r--Sora/Data/Moebooru/MoebooruTagXMLParser.swift59
-rw-r--r--Sora/Data/Settings.swift3
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
}