41 lines
1.5 KiB
Dart
41 lines
1.5 KiB
Dart
import 'dart:convert';
|
|
import 'dart:io';
|
|
|
|
import 'package:crypto/crypto.dart';
|
|
import 'package:path/path.dart' as p;
|
|
|
|
/// 앱이 만든 작은 그림 (썸네일) 캐시 (관리자 지시 10/21, 28 지적): 암호 보관함에 넣은 파일의 썸네일이 캐시에 남지 않게 지운다.
|
|
/// 캐시 이름은 "경로|크기|바뀐 때 (ms)" (빠른 보기 큰 것은 끝에 "|640") 의 md5 + .jpg - 파일 탐색기 동영상 썸네일 (jj_thumbs) ·
|
|
/// 원격 썸네일 (jj_rthumbs) 이 같은 꼴을 쓴다
|
|
const thumbCacheDirs = ['jj_thumbs', 'jj_rthumbs'];
|
|
|
|
List<String> thumbCacheKeys(String path, int size, DateTime modified) {
|
|
final k = '$path|$size|${modified.millisecondsSinceEpoch}';
|
|
return [k, '$k|640'];
|
|
}
|
|
|
|
/// 메모리에 둔 썸네일 기억을 잊는 곳들 (화면 쪽이 등록 - 경로를 받아 그 경로의 것만 잊음)
|
|
final thumbMemoryForgetters = <void Function(String path)>{};
|
|
|
|
/// [path] 의 썸네일 캐시 파일을 지우고 메모리 기억도 잊는다. 지운 파일 수
|
|
Future<int> removeThumbCaches(String tempDir, String path, int size, DateTime modified) async {
|
|
var n = 0;
|
|
for (final d in thumbCacheDirs) {
|
|
for (final k in thumbCacheKeys(path, size, modified)) {
|
|
final f = File(p.join(tempDir, d, '${md5.convert(utf8.encode(k))}.jpg'));
|
|
try {
|
|
if (await f.exists()) {
|
|
await f.delete();
|
|
n++;
|
|
}
|
|
} catch (_) {}
|
|
}
|
|
}
|
|
for (final forget in thumbMemoryForgetters) {
|
|
try {
|
|
forget(path);
|
|
} catch (_) {}
|
|
}
|
|
return n;
|
|
}
|