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 /Sora/Data | |
| parent | feat: Development commit (diff) | |
| download | sora-testing-9b72faf4cdb95d2993a1de8f105a3703ff7f896c.tar.xz sora-testing-9b72faf4cdb95d2993a1de8f105a3703ff7f896c.zip | |
feat: Development commit
Diffstat (limited to 'Sora/Data')
| -rw-r--r-- | Sora/Data/Booru/BooruManager.swift | 49 |
1 files changed, 46 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() } |