diff options
| author | Fuwn <[email protected]> | 2025-02-25 21:14:13 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-02-25 21:14:13 -0800 |
| commit | 5c9d5f5f9e39fb669921889b453fbb4e46b48bec (patch) | |
| tree | 0be7551f15774000ce1efda52efe94b58f38985c | |
| parent | feat: Development commit (diff) | |
| download | sora-testing-5c9d5f5f9e39fb669921889b453fbb4e46b48bec.tar.xz sora-testing-5c9d5f5f9e39fb669921889b453fbb4e46b48bec.zip | |
feat: Development commit
| -rw-r--r-- | Sora/Data/Booru/BooruManager.swift | 37 | ||||
| -rw-r--r-- | Sora/Data/Booru/BooruProviderFlavor.swift | 14 | ||||
| -rw-r--r-- | Sora/Views/Post/Details/PostDetailsImageView.swift | 37 |
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 + } } |