summaryrefslogtreecommitdiff
path: root/Sora/Data/Booru
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-02-27 16:46:41 -0800
committerFuwn <[email protected]>2025-02-27 16:46:41 -0800
commitec2feb28f80d1e4667fe8b0ea489e4d65339934f (patch)
treed1ea7ad4f91ee36cea0f4ff704ec03ca2702f41d /Sora/Data/Booru
parentfeat: Development commit (diff)
downloadsora-testing-ec2feb28f80d1e4667fe8b0ea489e4d65339934f.tar.xz
sora-testing-ec2feb28f80d1e4667fe8b0ea489e4d65339934f.zip
feat: Development commit
Diffstat (limited to 'Sora/Data/Booru')
-rw-r--r--Sora/Data/Booru/BooruManager.swift25
-rw-r--r--Sora/Data/Booru/BooruProvider.swift1
-rw-r--r--Sora/Data/Booru/BooruProviderFlavor.swift4
-rw-r--r--Sora/Data/Booru/Post/BooruPost.swift2
-rw-r--r--Sora/Data/Booru/Post/BooruPostXMLParser.swift1
5 files changed, 27 insertions, 6 deletions
diff --git a/Sora/Data/Booru/BooruManager.swift b/Sora/Data/Booru/BooruManager.swift
index 8cf1ac6..0fb0256 100644
--- a/Sora/Data/Booru/BooruManager.swift
+++ b/Sora/Data/Booru/BooruManager.swift
@@ -56,6 +56,9 @@ class BooruManager: ObservableObject {
case .gelbooru:
domain = "gelbooru.com"
+
+ case .danbooru:
+ domain = "danbooru.donmai.us"
}
}
@@ -95,10 +98,16 @@ class BooruManager: ObservableObject {
if Task.isCancelled { return }
DispatchQueue.main.async {
- let newPosts = Array(Set(BooruPostXMLParser(data: data, provider: self.provider).parse()))
- .sorted { lhs, rhs in
- lhs.id > rhs.id
- }
+ let newPosts = Array(
+ Set(
+ self.flavor == .danbooru
+ ? DanbooruPostParser(data: data).parse()
+ : BooruPostXMLParser(data: data, provider: self.provider).parse()
+ )
+ )
+ .sorted { lhs, rhs in
+ lhs.id > rhs.id
+ }
if newPosts.isEmpty {
self.endOfData = true
@@ -166,6 +175,11 @@ class BooruManager: ObservableObject {
let tagString = tags.joined(separator: "+")
switch flavor {
+ case .danbooru:
+ return URL(
+ string: "https://\(domain)/posts.json?page=\(page)&tags=\(tagString)"
+ )
+
case .moebooru:
return URL(string: "https://\(domain)/post.xml?page=\(page)&limit=\(limit)&tags=\(tagString)")
@@ -184,6 +198,9 @@ class BooruManager: ObservableObject {
case .gelbooru:
URL(string: "https://\(domain)/index.php?page=dapi&s=tag&q=index&limit=\(limit)")
+
+ case .danbooru:
+ nil
}
}
diff --git a/Sora/Data/Booru/BooruProvider.swift b/Sora/Data/Booru/BooruProvider.swift
index 3331fd9..5458223 100644
--- a/Sora/Data/Booru/BooruProvider.swift
+++ b/Sora/Data/Booru/BooruProvider.swift
@@ -1,4 +1,5 @@
enum BooruProvider: String, CaseIterable, Decodable, Encodable {
+ case danbooru = "Danbooru"
case gelbooru = "Gelbooru"
case konachan = "Konachan.com"
case safebooru = "Safebooru"
diff --git a/Sora/Data/Booru/BooruProviderFlavor.swift b/Sora/Data/Booru/BooruProviderFlavor.swift
index 69e3d1c..8917ab1 100644
--- a/Sora/Data/Booru/BooruProviderFlavor.swift
+++ b/Sora/Data/Booru/BooruProviderFlavor.swift
@@ -1,9 +1,13 @@
enum BooruProviderFlavor: String, CaseIterable, Decodable, Encodable {
+ case danbooru = "Danbooru"
case gelbooru = "Gelbooru"
case moebooru = "Moebooru"
init(provider: BooruProvider) {
switch provider {
+ case .danbooru:
+ self = .danbooru
+
case .yandere, .konachan, .sakugabooru:
self = .moebooru
diff --git a/Sora/Data/Booru/Post/BooruPost.swift b/Sora/Data/Booru/Post/BooruPost.swift
index 09ba38b..458faa6 100644
--- a/Sora/Data/Booru/Post/BooruPost.swift
+++ b/Sora/Data/Booru/Post/BooruPost.swift
@@ -13,7 +13,7 @@ struct BooruPost: Identifiable, Hashable {
let rating: BooruRating
let tags: [String]
let width: Int
- let change: String
+ let change: String?
let md5: String
let creatorID: String
let authorID: String?
diff --git a/Sora/Data/Booru/Post/BooruPostXMLParser.swift b/Sora/Data/Booru/Post/BooruPostXMLParser.swift
index fe14b7d..4960a79 100644
--- a/Sora/Data/Booru/Post/BooruPostXMLParser.swift
+++ b/Sora/Data/Booru/Post/BooruPostXMLParser.swift
@@ -59,7 +59,6 @@ class BooruPostXMLParser: NSObject, XMLParserDelegate {
let change = attributeDict["change"],
let md5 = attributeDict["md5"],
let creatorId = attributeDict["creator_id"],
- let hasChildrenStr = attributeDict["has_children"],
let createdAt = attributeDict["created_at"],
let status = attributeDict["status"],
let source = attributeDict["source"],