summaryrefslogtreecommitdiff
path: root/Sora/Data
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 /Sora/Data
parentfeat: Development commit (diff)
downloadsora-testing-9b72faf4cdb95d2993a1de8f105a3703ff7f896c.tar.xz
sora-testing-9b72faf4cdb95d2993a1de8f105a3703ff7f896c.zip
feat: Development commit
Diffstat (limited to 'Sora/Data')
-rw-r--r--Sora/Data/Booru/BooruManager.swift49
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()
}