summaryrefslogtreecommitdiff
path: root/Sora/Data
diff options
context:
space:
mode:
Diffstat (limited to 'Sora/Data')
-rw-r--r--Sora/Data/ImageCacheManager.swift36
-rw-r--r--Sora/Data/Settings/SettingsManager.swift4
2 files changed, 40 insertions, 0 deletions
diff --git a/Sora/Data/ImageCacheManager.swift b/Sora/Data/ImageCacheManager.swift
new file mode 100644
index 0000000..cc5cb7e
--- /dev/null
+++ b/Sora/Data/ImageCacheManager.swift
@@ -0,0 +1,36 @@
+import Combine
+import SwiftUI
+
+class ImageCacheManager {
+ static let shared = ImageCacheManager()
+ private let cache: URLCache
+ private var cancellables: Set<AnyCancellable> = []
+
+ init() {
+ cache = URLCache(
+ memoryCapacity: 100 * 1_024 * 1_024, // 100 MB
+ diskCapacity: 500 * 1_024 * 1_024, // 500 MB
+ diskPath: "SoraImageCache"
+ )
+
+ URLCache.shared = cache
+ }
+
+ func preloadImages(_ urls: [URL]) {
+ urls.forEach { url in
+ URLSession.shared.dataTaskPublisher(for: url)
+ .sink(
+ receiveCompletion: { _ in () },
+ receiveValue: { data, response in
+ let cachedResponse = CachedURLResponse(
+ response: response,
+ data: data
+ )
+
+ self.cache.storeCachedResponse(cachedResponse, for: URLRequest(url: url))
+ }
+ )
+ .store(in: &cancellables)
+ }
+ }
+}
diff --git a/Sora/Data/Settings/SettingsManager.swift b/Sora/Data/Settings/SettingsManager.swift
index 6035de3..3c4dc77 100644
--- a/Sora/Data/Settings/SettingsManager.swift
+++ b/Sora/Data/Settings/SettingsManager.swift
@@ -41,6 +41,9 @@ class SettingsManager: ObservableObject {
var saveTagsToFile = false
#endif
+ @AppStorage("preloadedCarouselImages")
+ var preloadedCarouselImages = 3
+
var bookmarks: [SettingsBookmark] {
get {
if let bookmarks = try? JSONDecoder().decode([SettingsBookmark].self, from: bookmarksData) {
@@ -129,6 +132,7 @@ class SettingsManager: ObservableObject {
displayRatingsData = Self.defaultRatingsData()
blurRatingsData = Self.initializeRatingsData(enabledRatings: [.explicit])
displayDetailsInformationBar = true
+ preloadedCarouselImages = 3
#if os(macOS)
saveTagsToFile = false