summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-03-05 02:27:17 -0800
committerFuwn <[email protected]>2025-03-05 02:27:17 -0800
commit6ccaf3883c0a5b1a77b613547b275c6025674add (patch)
tree2d948c96f1c0f7da85bef0ddb1fb402f9d5dfcdd
parentfeat: Development commit (diff)
downloadsora-testing-6ccaf3883c0a5b1a77b613547b275c6025674add.tar.xz
sora-testing-6ccaf3883c0a5b1a77b613547b275c6025674add.zip
feat: Development commit
-rw-r--r--Sora/Data/Booru/BooruProvider.swift27
-rw-r--r--Sora/Data/Booru/Provider/BooruProvider.swift61
-rw-r--r--Sora/Data/Booru/Provider/BooruProviderCustom.swift13
-rw-r--r--Sora/Data/Booru/Provider/BooruProviderFlavor.swift (renamed from Sora/Data/Booru/BooruProviderFlavor.swift)0
-rw-r--r--Sora/Data/Settings/SettingsManager.swift10
5 files changed, 83 insertions, 28 deletions
diff --git a/Sora/Data/Booru/BooruProvider.swift b/Sora/Data/Booru/BooruProvider.swift
deleted file mode 100644
index 3642da0..0000000
--- a/Sora/Data/Booru/BooruProvider.swift
+++ /dev/null
@@ -1,27 +0,0 @@
-enum BooruProvider: String, CaseIterable, Codable {
- case danbooru = "Danbooru"
- case gelbooru = "Gelbooru"
- case konachan = "Konachan.com"
- case safebooru = "Safebooru"
- case sakugabooru = "sakugabooru"
- case yandere = "yande.re"
-
- // MARK: - Properties
- var domain: String {
- Self.domains[self] ?? rawValue.lowercased()
- }
-
- var asFileNameComponent: String {
- rawValue.lowercased().replacingOccurrences(of: ".", with: "_")
- }
-
- // MARK: - Private
- private static let domains: [Self: String] = [
- .yandere: "yande.re",
- .konachan: "konachan.com",
- .sakugabooru: "sakugabooru.com",
- .safebooru: "safebooru.org",
- .gelbooru: "gelbooru.com",
- .danbooru: "danbooru.donmai.us",
- ]
-}
diff --git a/Sora/Data/Booru/Provider/BooruProvider.swift b/Sora/Data/Booru/Provider/BooruProvider.swift
new file mode 100644
index 0000000..84b76c8
--- /dev/null
+++ b/Sora/Data/Booru/Provider/BooruProvider.swift
@@ -0,0 +1,61 @@
+enum BooruProvider: CaseIterable, Codable, Hashable, Equatable {
+ case custom(BooruProviderCustom)
+ case danbooru
+ case gelbooru
+ case konachan
+ case safebooru
+ case sakugabooru
+ case yandere
+
+ // MARK: - Computed Properties
+ var domain: String {
+ Self.domains[self] ?? rawValue.lowercased()
+ }
+
+ var asFileNameComponent: String {
+ rawValue.lowercased().replacingOccurrences(of: ".", with: "_")
+ }
+
+ static var allCases: [Self] {
+ [.danbooru, .gelbooru, .konachan, .safebooru, .sakugabooru, .yandere]
+ }
+
+ static func == (lhs: Self, rhs: Self) -> Bool {
+ lhs.rawValue == rhs.rawValue
+ }
+
+ var rawValue: String {
+ switch self {
+ case .danbooru:
+ "Danbooru"
+
+ case .gelbooru:
+ "Gelbooru"
+
+ case .konachan:
+ "Konachan.com"
+
+ case .safebooru:
+ "Safebooru"
+
+ case .sakugabooru:
+ "sakugabooru.com"
+
+ case .yandere:
+ "yande.re"
+
+ case .custom(let provider):
+ provider.baseURL
+ }
+ }
+
+ // MARK: - Private
+ private static let domains: [Self: String] = [
+ .yandere: "yande.re",
+ .konachan: "konachan.com",
+ .sakugabooru: "sakugabooru.com",
+ .safebooru: "safebooru.org",
+ .gelbooru: "gelbooru.com",
+ .danbooru: "danbooru.donmai.us",
+ ]
+}
diff --git a/Sora/Data/Booru/Provider/BooruProviderCustom.swift b/Sora/Data/Booru/Provider/BooruProviderCustom.swift
new file mode 100644
index 0000000..a2be323
--- /dev/null
+++ b/Sora/Data/Booru/Provider/BooruProviderCustom.swift
@@ -0,0 +1,13 @@
+import Foundation
+
+struct BooruProviderCustom: Identifiable, Codable, Hashable {
+ let id: UUID
+ var baseURL: String
+ var flavor: BooruProviderFlavor
+
+ init(baseURL: String, flavor: BooruProviderFlavor, id: UUID = UUID()) {
+ self.id = id
+ self.baseURL = baseURL
+ self.flavor = flavor
+ }
+}
diff --git a/Sora/Data/Booru/BooruProviderFlavor.swift b/Sora/Data/Booru/Provider/BooruProviderFlavor.swift
index c94a40d..c94a40d 100644
--- a/Sora/Data/Booru/BooruProviderFlavor.swift
+++ b/Sora/Data/Booru/Provider/BooruProviderFlavor.swift
diff --git a/Sora/Data/Settings/SettingsManager.swift b/Sora/Data/Settings/SettingsManager.swift
index 0ad3973..f4273ef 100644
--- a/Sora/Data/Settings/SettingsManager.swift
+++ b/Sora/Data/Settings/SettingsManager.swift
@@ -15,7 +15,7 @@ class SettingsManager: ObservableObject {
var thumbnailGridColumns = 2
@AppStorage("preferredBooru")
- var preferredBooru: BooruProvider = .safebooru
+ var preferredBooruData = Data()
@AppStorage("enableShareShortcut")
var enableShareShortcut = false
@@ -77,6 +77,14 @@ class SettingsManager: ObservableObject {
set { searchHistoryData = Self.encode(newValue) ?? searchHistoryData }
}
+ var preferredBooru: BooruProvider {
+ get {
+ Self.decode(BooruProvider.self, from: preferredBooruData) ?? .safebooru
+ }
+
+ set { preferredBooruData = Self.encode(newValue) ?? preferredBooruData }
+ }
+
// MARK: - Private Helpers
private static func encode<T: Encodable>(_ value: T) -> Data? {
try? JSONEncoder().encode(value)