summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-02-25 21:14:13 -0800
committerFuwn <[email protected]>2025-02-25 21:14:13 -0800
commit5c9d5f5f9e39fb669921889b453fbb4e46b48bec (patch)
tree0be7551f15774000ce1efda52efe94b58f38985c
parentfeat: Development commit (diff)
downloadsora-testing-5c9d5f5f9e39fb669921889b453fbb4e46b48bec.tar.xz
sora-testing-5c9d5f5f9e39fb669921889b453fbb4e46b48bec.zip
feat: Development commit
-rw-r--r--Sora/Data/Booru/BooruManager.swift37
-rw-r--r--Sora/Data/Booru/BooruProviderFlavor.swift14
-rw-r--r--Sora/Views/Post/Details/PostDetailsImageView.swift37
3 files changed, 65 insertions, 23 deletions
diff --git a/Sora/Data/Booru/BooruManager.swift b/Sora/Data/Booru/BooruManager.swift
index 7e27730..c64d7e5 100644
--- a/Sora/Data/Booru/BooruManager.swift
+++ b/Sora/Data/Booru/BooruManager.swift
@@ -10,6 +10,8 @@ class BooruManager: ObservableObject {
@Published var endOfData = false
@Published var cacheSize: String?
@Published var selectedPost: BooruPost?
+ @Published var flavor: BooruProviderFlavor
+ @Published var domain: String
private var currentTask: Task<Void, Never>?
let provider: BooruProvider
var tags: [String] {
@@ -36,6 +38,24 @@ class BooruManager: ObservableObject {
init(_ provider: BooruProvider) {
self.provider = provider
+ self.flavor = BooruProviderFlavor(provider: provider)
+
+ switch provider {
+ case .yandere:
+ domain = "yande.re"
+
+ case .konachan:
+ domain = "konachan.com"
+
+ case .sakugabooru:
+ domain = "sakugabooru.com"
+
+ case .safebooru:
+ domain = "safebooru.org"
+
+ case .gelbooru:
+ domain = "gelbooru.com"
+ }
}
func initializeTags() {
@@ -153,21 +173,12 @@ class BooruManager: ObservableObject {
private func urlForPosts(page: Int, limit: Int, tags: [String]) -> URL? {
let tagString = tags.joined(separator: "+")
- switch provider {
- case .yandere:
- return moebooruURL(domain: "yande.re", page: page, limit: limit, tagString: tagString)
-
- case .konachan:
- return moebooruURL(domain: "konachan.com", page: page, limit: limit, tagString: tagString)
-
- case .sakugabooru:
- return moebooruURL(domain: "sakugabooru.com", page: page, limit: limit, tagString: tagString)
-
- case .safebooru:
- return gelbooruURL(domain: "safebooru.org", page: page, limit: limit, tagString: tagString)
+ switch flavor {
+ case .moebooru:
+ return moebooruURL(domain: domain, page: page, limit: limit, tagString: tagString)
case .gelbooru:
- return gelbooruURL(domain: "gelbooru.com", page: page, limit: limit, tagString: tagString)
+ return gelbooruURL(domain: domain, page: page, limit: limit, tagString: tagString)
}
}
diff --git a/Sora/Data/Booru/BooruProviderFlavor.swift b/Sora/Data/Booru/BooruProviderFlavor.swift
new file mode 100644
index 0000000..69e3d1c
--- /dev/null
+++ b/Sora/Data/Booru/BooruProviderFlavor.swift
@@ -0,0 +1,14 @@
+enum BooruProviderFlavor: String, CaseIterable, Decodable, Encodable {
+ case gelbooru = "Gelbooru"
+ case moebooru = "Moebooru"
+
+ init(provider: BooruProvider) {
+ switch provider {
+ case .yandere, .konachan, .sakugabooru:
+ self = .moebooru
+
+ case .safebooru, .gelbooru:
+ self = .gelbooru
+ }
+ }
+}
diff --git a/Sora/Views/Post/Details/PostDetailsImageView.swift b/Sora/Views/Post/Details/PostDetailsImageView.swift
index bc40fae..67d3d68 100644
--- a/Sora/Views/Post/Details/PostDetailsImageView.swift
+++ b/Sora/Views/Post/Details/PostDetailsImageView.swift
@@ -7,7 +7,6 @@ struct PostDetailsImageView<Placeholder: View>: View {
var url: URL?
@Binding var loadingState: BooruPostLoadingState
var finalLoadingState: BooruPostLoadingState
- private var postURL: URL?
let placeholder: () -> Placeholder
let post: BooruPost?
@State private var currentScale: CGFloat = 1.0
@@ -79,15 +78,17 @@ struct PostDetailsImageView<Placeholder: View>: View {
}
#endif
- if let url = postURL {
+ Button {
+ openURL(postURL(for: post?.id ?? ""))
+ } label: {
+ Label("Open in Safari", systemImage: "safari")
+ }
+
+ if let source = post?.source {
Button {
- #if os(iOS)
- UIApplication.shared.open(url)
- #else
- NSWorkspace.shared.open(url)
- #endif
+ openURL(URL(string: source)!)
} label: {
- Label("Open in Safari", systemImage: "safari")
+ Label("Open Source in Safari", systemImage: "safari")
}
}
}
@@ -129,12 +130,20 @@ struct PostDetailsImageView<Placeholder: View>: View {
self.url = url
_loadingState = loadingStage
self.finalLoadingState = finalLoadingState
- self.postURL =
- post != nil ? URL(string: "https://yande.re/post/show/\(String(post?.id ?? "0"))")! : nil
self.placeholder = placeholder
self.post = post
}
+ private func postURL(for id: String) -> URL {
+ switch manager.flavor {
+ case .moebooru:
+ return URL(string: "https://\(manager.domain)/post/show/\(id)")!
+
+ case .gelbooru:
+ return URL(string: "https://\(manager.domain)/index.php?page=post&s=view&id=\(id)")!
+ }
+ }
+
#if os(macOS)
private func saveImageToPicturesFolder() {
guard let url = self.url else { return }
@@ -174,4 +183,12 @@ struct PostDetailsImageView<Placeholder: View>: View {
.resume()
}
#endif
+
+ private func openURL(_ url: URL) {
+ #if os(iOS)
+ UIApplication.shared.open(url)
+ #else
+ NSWorkspace.shared.open(url)
+ #endif
+ }
}