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 thumbCacheKeys(String path, int size, DateTime modified) { final k = '$path|$size|${modified.millisecondsSinceEpoch}'; return [k, '$k|640']; } /// 메모리에 둔 썸네일 기억을 잊는 곳들 (화면 쪽이 등록 - 경로를 받아 그 경로의 것만 잊음) final thumbMemoryForgetters = {}; /// [path] 의 썸네일 캐시 파일을 지우고 메모리 기억도 잊는다. 지운 파일 수 Future 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; }