summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-02-25 00:02:22 -0800
committerFuwn <[email protected]>2025-02-25 00:02:22 -0800
commit9b72faf4cdb95d2993a1de8f105a3703ff7f896c (patch)
tree372ddfd4656920aca6bfb98b6ec970e7843e1462
parentfeat: Development commit (diff)
downloadsora-testing-9b72faf4cdb95d2993a1de8f105a3703ff7f896c.tar.xz
sora-testing-9b72faf4cdb95d2993a1de8f105a3703ff7f896c.zip
feat: Development commit
-rw-r--r--Sora/Data/Booru/BooruManager.swift49
-rw-r--r--Sora/Views/MainView.swift17
-rw-r--r--Sora/Views/Settings/Section/SettingsSearchView.swift7
-rw-r--r--Sora/Views/Settings/SettingsView.swift1
4 files changed, 71 insertions, 3 deletions
diff --git a/Sora/Data/Booru/BooruManager.swift b/Sora/Data/Booru/BooruManager.swift
index 00fb3d1..505ee9c 100644
--- a/Sora/Data/Booru/BooruManager.swift
+++ b/Sora/Data/Booru/BooruManager.swift
@@ -4,10 +4,11 @@ import SwiftUI
class BooruManager: ObservableObject {
@Published var posts: [BooruPost] = []
@Published var allTags: [BooruTag] = []
- @Published var isLoading: Bool = false
- @Published var currentPage: Int = 1
+ @Published var isLoading = false
+ @Published var currentPage = 1
@Published var searchText = ""
- @Published var endOfData: Bool = false
+ @Published var endOfData = false
+ @Published var cacheSize: String?
private var currentTask: Task<Void, Never>?
let provider: BooruProvider
var tags: [String] {
@@ -36,9 +37,12 @@ class BooruManager: ObservableObject {
init(_ provider: BooruProvider) {
self.provider = provider
+ }
+ func initializeTags() {
loadCachedTags()
fetchAllTags()
+ updateCacheSize()
}
func fetchPosts(page: Int = 1, limit: Int = 100, tags: [String] = [], replace: Bool = false) async
@@ -124,6 +128,7 @@ class BooruManager: ObservableObject {
DispatchQueue.main.async {
self.allTags = BooruTagXMLParser(data: data).parse().sorted { $0.count > $1.count }
self.saveTagsToCache()
+ self.updateCacheSize()
}
} catch {
if (error as? URLError)?.code != .cancelled {
@@ -187,6 +192,7 @@ class BooruManager: ObservableObject {
let data = try JSONEncoder().encode(allTags)
try data.write(to: url)
+ updateCacheSize()
} catch {
#if DEBUG
print("saveTagsToCache: \(error)")
@@ -203,6 +209,7 @@ class BooruManager: ObservableObject {
DispatchQueue.main.async {
self.allTags = cachedTags
+ self.updateCacheSize()
}
} catch {
#if DEBUG
@@ -211,6 +218,42 @@ class BooruManager: ObservableObject {
}
}
+ func clearCachedTags() {
+ guard let url = tagsCacheFileURL else { return }
+
+ do {
+ try FileManager.default.removeItem(at: url)
+ updateCacheSize()
+ } catch {
+ #if DEBUG
+ print("clearCachedTags: \(error)")
+ #endif
+ }
+ }
+
+ private func updateCacheSize() {
+ guard let url = tagsCacheFileURL else {
+ cacheSize = nil
+
+ return
+ }
+
+ do {
+ cacheSize = ByteCountFormatter.string(
+ fromByteCount: Int64(
+ (try FileManager.default.attributesOfItem(atPath: url.path)[.size] as? Int) ?? 0
+ ),
+ countStyle: .file
+ )
+ } catch {
+ cacheSize = nil
+
+ #if DEBUG
+ print("updateCacheSize: \(error)")
+ #endif
+ }
+ }
+
deinit {
currentTask?.cancel()
}
diff --git a/Sora/Views/MainView.swift b/Sora/Views/MainView.swift
index 0cf2679..88b93c0 100644
--- a/Sora/Views/MainView.swift
+++ b/Sora/Views/MainView.swift
@@ -12,6 +12,11 @@ struct MainView: View {
.onChange(of: settings.preferredBooru) { _, newState in
updateManager(newState)
}
+ .onChange(of: settings.searchSuggestions) { _, newState in
+ if newState {
+ refreshTags()
+ }
+ }
.onAppear(perform: initializeManager)
}
@@ -44,6 +49,8 @@ struct MainView: View {
manager.searchText = previousSearchText
Task {
+ refreshTags()
+
if manager.searchText.isEmpty {
await manager.fetchPosts()
} else {
@@ -56,9 +63,19 @@ struct MainView: View {
manager = BooruManager(settings.preferredBooru)
Task {
+ refreshTags()
+
if manager.posts.isEmpty {
await manager.fetchPosts()
}
}
}
+
+ private func refreshTags() {
+ if settings.searchSuggestions {
+ Task {
+ manager.initializeTags()
+ }
+ }
+ }
}
diff --git a/Sora/Views/Settings/Section/SettingsSearchView.swift b/Sora/Views/Settings/Section/SettingsSearchView.swift
index 63be2f1..644b02c 100644
--- a/Sora/Views/Settings/Section/SettingsSearchView.swift
+++ b/Sora/Views/Settings/Section/SettingsSearchView.swift
@@ -2,8 +2,15 @@ import SwiftUI
struct SettingsSearchView: View {
@EnvironmentObject var settings: Settings
+ @EnvironmentObject var manager: BooruManager
var body: some View {
Toggle("Suggest Search Tags", isOn: $settings.searchSuggestions)
+
+ Button(
+ "Clear Cached Tags (\(manager.cacheSize ?? "Unknown size"))"
+ ) {
+ manager.clearCachedTags()
+ }
}
}
diff --git a/Sora/Views/Settings/SettingsView.swift b/Sora/Views/Settings/SettingsView.swift
index 02f9e34..a0eba01 100644
--- a/Sora/Views/Settings/SettingsView.swift
+++ b/Sora/Views/Settings/SettingsView.swift
@@ -43,4 +43,5 @@ struct SettingsView: View {
#Preview {
SettingsView()
.environmentObject(Settings())
+ .environmentObject(BooruManager(.yandere))
}