114 lines
2.9 KiB
Swift
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)
|
|
}
|
|
}
|
|
|
|
}
|