diff options
| author | Fuwn <[email protected]> | 2025-02-27 16:46:41 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-02-27 16:46:41 -0800 |
| commit | ec2feb28f80d1e4667fe8b0ea489e4d65339934f (patch) | |
| tree | d1ea7ad4f91ee36cea0f4ff704ec03ca2702f41d /Sora/Data/Booru | |
| parent | feat: Development commit (diff) | |
| download | sora-testing-ec2feb28f80d1e4667fe8b0ea489e4d65339934f.tar.xz sora-testing-ec2feb28f80d1e4667fe8b0ea489e4d65339934f.zip | |
feat: Development commit
Diffstat (limited to 'Sora/Data/Booru')
| -rw-r--r-- | Sora/Data/Booru/BooruManager.swift | 25 | ||||
| -rw-r--r-- | Sora/Data/Booru/BooruProvider.swift | 1 | ||||
| -rw-r--r-- | Sora/Data/Booru/BooruProviderFlavor.swift | 4 | ||||
| -rw-r--r-- | Sora/Data/Booru/Post/BooruPost.swift | 2 | ||||
| -rw-r--r-- | Sora/Data/Booru/Post/BooruPostXMLParser.swift | 1 |
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"], |