diff options
| author | Fuwn <[email protected]> | 2025-02-25 00:02:22 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-02-25 00:02:22 -0800 |
| commit | 9b72faf4cdb95d2993a1de8f105a3703ff7f896c (patch) | |
| tree | 372ddfd4656920aca6bfb98b6ec970e7843e1462 | |
| parent | feat: Development commit (diff) | |
| download | sora-testing-9b72faf4cdb95d2993a1de8f105a3703ff7f896c.tar.xz sora-testing-9b72faf4cdb95d2993a1de8f105a3703ff7f896c.zip | |
feat: Development commit
| -rw-r--r-- | Sora/Data/Booru/BooruManager.swift | 49 | ||||
| -rw-r--r-- | Sora/Views/MainView.swift | 17 | ||||
| -rw-r--r-- | Sora/Views/Settings/Section/SettingsSearchView.swift | 7 | ||||
| -rw-r--r-- | Sora/Views/Settings/SettingsView.swift | 1 |
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)) } |