diff options
Diffstat (limited to 'Sora/Data/Booru/BooruManager.swift')
| -rw-r--r-- | Sora/Data/Booru/BooruManager.swift | 28 |
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) } } |