mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-04-20 11:08:03 +08:00
* tweak * opt: async * tweak * opt: PopularSeries tile * tweak * opt: sc * mod: more account type * tweak * opt: qrcode * tweak * partial revert: opt: sc * fix * fix * mod: window enqueue
100 lines
2.7 KiB
Dart
100 lines
2.7 KiB
Dart
import 'dart:async';
|
|
import 'dart:io';
|
|
|
|
import 'package:PiliPlus/utils/extension.dart';
|
|
import 'package:PiliPlus/utils/storage_pref.dart';
|
|
import 'package:PiliPlus/utils/utils.dart';
|
|
import 'package:path_provider/path_provider.dart';
|
|
|
|
abstract class CacheManage {
|
|
// 获取缓存目录
|
|
static Future<int> loadApplicationCache([
|
|
final num maxSize = double.infinity,
|
|
]) async {
|
|
/// clear all of image in memory
|
|
// clearMemoryImageCache();
|
|
/// get ImageCache
|
|
// var res = getMemoryImageCache();
|
|
|
|
// 缓存大小
|
|
// cached_network_image directory
|
|
Directory tempDirectory = await getTemporaryDirectory();
|
|
if (Utils.isDesktop) {
|
|
final dir = Directory('${tempDirectory.path}/libCachedImageData');
|
|
if (dir.existsSync()) {
|
|
return await getTotalSizeOfFilesInDir(dir, maxSize);
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
// 获取缓存大小
|
|
if (tempDirectory.existsSync()) {
|
|
return await getTotalSizeOfFilesInDir(tempDirectory, maxSize);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
// 循环计算文件的大小
|
|
static Future<int> getTotalSizeOfFilesInDir(
|
|
final Directory file, [
|
|
final num maxSize = double.infinity,
|
|
]) async {
|
|
final children = file.list(recursive: true);
|
|
int total = 0;
|
|
await for (final child in children) {
|
|
if (child is File) {
|
|
total += await child.length();
|
|
if (total >= maxSize) break;
|
|
}
|
|
}
|
|
return total;
|
|
}
|
|
|
|
// 缓存大小格式转换
|
|
static String formatSize(num value) {
|
|
const unitArr = ['B', 'K', 'M', 'G', 'T', 'P'];
|
|
int index = 0;
|
|
while (value >= 1024) {
|
|
index++;
|
|
value = value / 1024;
|
|
}
|
|
String size = value.toStringAsFixed(2);
|
|
return size + unitArr.getOrElse(index, orElse: () => '');
|
|
}
|
|
|
|
// 清除 Library/Caches 目录及文件缓存
|
|
static Future<void> clearLibraryCache() async {
|
|
var tempDirectory = await getTemporaryDirectory();
|
|
if (Utils.isDesktop) {
|
|
final dir = Directory('${tempDirectory.path}/libCachedImageData');
|
|
if (dir.existsSync()) {
|
|
await dir.delete(recursive: true);
|
|
}
|
|
return;
|
|
}
|
|
if (tempDirectory.existsSync()) {
|
|
// await appDocDir.delete(recursive: true);
|
|
final children = tempDirectory.list(recursive: false);
|
|
await for (final file in children) {
|
|
await file.delete(recursive: true);
|
|
}
|
|
}
|
|
}
|
|
|
|
static Future<void> autoClearCache() async {
|
|
if (Pref.autoClearCache) {
|
|
await clearLibraryCache();
|
|
} else {
|
|
final maxCacheSize = Pref.maxCacheSize;
|
|
if (maxCacheSize != 0) {
|
|
final currCache = await loadApplicationCache(maxCacheSize);
|
|
if (currCache >= maxCacheSize) {
|
|
await clearLibraryCache();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|