ThimraTV/MoviaBox/Libs/Cache/SPAppCacheManager.swift
2025-04-29 15:47:30 +08:00

114 lines
2.9 KiB
Swift

//
// SPAppCacheManager.swift
// MoviaBox
//
// Created by on 2025/4/29.
//
import UIKit
import Kingfisher
class SPAppCacheManager: NSObject {
static let manager = SPAppCacheManager()
private(set) var imageCache: Double = 0
private(set) var videoCache: Double = 0
var allCache: Double {
return imageCache + videoCache
}
private var group = DispatchGroup()
///
func getAllCache(completer: ((_ value: Double) -> Void)?) {
self.group.enter()
getImageCache { [weak self] value in
guard let self = self else { return }
self.group.leave()
}
self.group.enter()
getVideoCache { [weak self] value in
guard let self = self else { return }
self.group.leave()
}
self.group.notify(queue: DispatchQueue.main) { [weak self] in
guard let self = self else { return }
completer?(self.imageCache + self.videoCache)
}
}
///
func cleanAllCache(completer: (() -> Void)?) {
self.group.enter()
cleanImageCache { [weak self] in
self?.group.leave()
}
self.group.enter()
cleanVideoCache { [weak self] in
self?.group.leave()
}
self.group.notify(queue: DispatchQueue.main) { [weak self] in
guard let self = self else { return }
completer?()
}
}
///
func getImageCache(completer: ((_ value: Double) -> Void)?) {
ImageCache.default.calculateDiskStorageSize { [weak self] result in
guard let self = self else { return }
switch result {
case .success(let value):
self.imageCache = Double(value)
default:
self.imageCache = 0
break
}
completer?(self.imageCache)
}
}
///
func getVideoCache(completer: ((_ value: Double) -> Void)?) {
self.videoCache = Double(KTVHTTPCache.cacheTotalCacheLength())
completer?(self.videoCache)
}
///
func cleanImageCache(completer: (() -> Void)?) {
DispatchQueue.global().async {
ImageCache.default.clearDiskCache {
self.imageCache = 0
completer?()
}
}
}
///
func cleanVideoCache(completer: (() -> Void)?) {
KTVHTTPCache.cacheDeleteAllCaches()
self.videoCache = 0
completer?()
}
}
extension SPAppCacheManager {
static func cacheToString(cache: Double) -> String {
let size = cache / 1024 / 1024
if size > 100 {
return String(format: "%.0fM", size)
} else {
return String(format: "%.2fM", size)
}
}
}