summaryrefslogtreecommitdiff
path: root/Sora/Data/Booru/BooruManager.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Sora/Data/Booru/BooruManager.swift')
-rw-r--r--Sora/Data/Booru/BooruManager.swift28
1 files changed, 16 insertions, 12 deletions
diff --git a/Sora/Data/Booru/BooruManager.swift b/Sora/Data/Booru/BooruManager.swift
index 3c9c5ca..45a2240 100644
--- a/Sora/Data/Booru/BooruManager.swift
+++ b/Sora/Data/Booru/BooruManager.swift
@@ -9,7 +9,7 @@ class BooruManager: ObservableObject {
@Published var searchText = ""
@Published var endOfData: Bool = false
private var currentTask: Task<Void, Never>?
- let provider: BooruProvider?
+ let provider: BooruProvider
var tags: [String] {
if searchText.isEmpty {
return []
@@ -26,7 +26,7 @@ class BooruManager: ObservableObject {
@Published var selectedPost: BooruPost?
#endif
- init(_ provider: BooruProvider? = nil) {
+ init(_ provider: BooruProvider) {
self.provider = provider
fetchAllTags()
@@ -35,7 +35,6 @@ class BooruManager: ObservableObject {
func fetchPosts(page: Int = 1, limit: Int = 100, tags: [String] = [], replace: Bool = false) async
{
guard !isLoading else { return }
- guard provider != nil else { return }
currentTask?.cancel()
@@ -63,7 +62,10 @@ class BooruManager: ObservableObject {
if Task.isCancelled { return }
DispatchQueue.main.async {
- let newPosts = Array(Set(BooruPostXMLParser(data: data).parse())).sorted { $0.id > $1.id }
+ let newPosts = Array(Set(BooruPostXMLParser(data: data, provider: self.provider).parse()))
+ .sorted { lhs, rhs in
+ lhs.id > rhs.id
+ }
if newPosts.isEmpty {
self.endOfData = true
@@ -102,8 +104,6 @@ class BooruManager: ObservableObject {
}
func fetchAllTags(limit: Int = 100_000) {
- guard provider != nil else { return }
-
Task {
guard let url = urlForTags(limit: limit) else { return }
@@ -129,6 +129,13 @@ class BooruManager: ObservableObject {
URL(string: "https://\(domain)/post.xml?page=\(page)&limit=\(limit)&tags=\(tagString)")
}
+ private func gelbooruURL(domain: String, page: Int, limit: Int, tagString: String) -> URL? {
+ URL(
+ string:
+ "https://\(domain)/index.php?page=dapi&s=post&q=index&pid=\(page)&limit=\(limit)&tags=\(tagString)"
+ )
+ }
+
private func urlForPosts(page: Int, limit: Int, tags: [String]) -> URL? {
let tagString = tags.joined(separator: "+")
@@ -143,13 +150,10 @@ class BooruManager: ObservableObject {
return moebooruURL(domain: "sakugabooru.com", page: page, limit: limit, tagString: tagString)
case .safebooru:
- return URL(
- string:
- "https://safebooru.org/index.php?page=dapi&s=post&q=index&pid=\(page)&limit=\(limit)&tags=\(tagString)"
- )
+ return gelbooruURL(domain: "safebooru.org", page: page, limit: limit, tagString: tagString)
- default:
- return nil
+ case .gelbooru:
+ return gelbooruURL(domain: "gelbooru.com", page: page, limit: limit, tagString: tagString)
}
}