about: clearing cache also removes external cache

This commit is contained in:
Thibault Deckers 2024-07-01 22:48:52 +02:00
parent 3e8bd108b0
commit ead7adb36c
4 changed files with 24 additions and 3 deletions

View file

@ -39,6 +39,7 @@ class StorageHandler(private val context: Context) : MethodCallHandler {
"revokeDirectoryAccess" -> safe(call, result, ::revokeDirectoryAccess) "revokeDirectoryAccess" -> safe(call, result, ::revokeDirectoryAccess)
"deleteEmptyDirectories" -> ioScope.launch { safe(call, result, ::deleteEmptyDirectories) } "deleteEmptyDirectories" -> ioScope.launch { safe(call, result, ::deleteEmptyDirectories) }
"deleteTempDirectory" -> ioScope.launch { safe(call, result, ::deleteTempDirectory) } "deleteTempDirectory" -> ioScope.launch { safe(call, result, ::deleteTempDirectory) }
"deleteExternalCache" -> ioScope.launch { safe(call, result, ::deleteExternalCache) }
"canRequestMediaFileBulkAccess" -> safe(call, result, ::canRequestMediaFileBulkAccess) "canRequestMediaFileBulkAccess" -> safe(call, result, ::canRequestMediaFileBulkAccess)
"canInsertMedia" -> safe(call, result, ::canInsertMedia) "canInsertMedia" -> safe(call, result, ::canInsertMedia)
else -> result.notImplemented() else -> result.notImplemented()
@ -49,16 +50,17 @@ class StorageHandler(private val context: Context) : MethodCallHandler {
var internalCache = getFolderSize(context.cacheDir) var internalCache = getFolderSize(context.cacheDir)
internalCache += getFolderSize(context.codeCacheDir) internalCache += getFolderSize(context.codeCacheDir)
val externalCache = context.externalCacheDirs.map(::getFolderSize).sum() val externalCache = context.externalCacheDirs.map(::getFolderSize).sum()
val externalFilesDirs = context.getExternalFilesDirs(null)
val dataDir = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) context.dataDir else File(context.applicationInfo.dataDir) val dataDir = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) context.dataDir else File(context.applicationInfo.dataDir)
val database = getFolderSize(File(dataDir, "databases")) val database = getFolderSize(File(dataDir, "databases"))
val flutter = getFolderSize(File(PathUtils.getDataDirectory(context))) val flutter = getFolderSize(File(PathUtils.getDataDirectory(context)))
val vaults = getFolderSize(File(StorageUtils.getVaultRoot(context))) val vaults = getFolderSize(File(StorageUtils.getVaultRoot(context)))
val trash = context.getExternalFilesDirs(null).mapNotNull { StorageUtils.trashDirFor(context, it.path) }.map(::getFolderSize).sum() val trash = externalFilesDirs.mapNotNull { StorageUtils.trashDirFor(context, it.path) }.map(::getFolderSize).sum()
val internalData = getFolderSize(dataDir) - internalCache val internalData = getFolderSize(dataDir) - internalCache
val externalData = context.getExternalFilesDirs(null).map(::getFolderSize).sum() val externalData = externalFilesDirs.map(::getFolderSize).sum()
val miscData = internalData + externalData - (database + flutter + vaults + trash) val miscData = internalData + externalData - (database + flutter + vaults + trash)
result.success( result.success(
@ -224,6 +226,11 @@ class StorageHandler(private val context: Context) : MethodCallHandler {
result.success(StorageUtils.deleteTempDirectory(context)) result.success(StorageUtils.deleteTempDirectory(context))
} }
private fun deleteExternalCache(@Suppress("unused_parameter") call: MethodCall, result: MethodChannel.Result) {
context.externalCacheDirs.filter { it.exists() }.forEach { it.deleteRecursively() }
result.success(true)
}
private fun canRequestMediaFileBulkAccess(@Suppress("unused_parameter") call: MethodCall, result: MethodChannel.Result) { private fun canRequestMediaFileBulkAccess(@Suppress("unused_parameter") call: MethodCall, result: MethodChannel.Result) {
result.success(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) result.success(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
} }

View file

@ -33,6 +33,8 @@ abstract class StorageService {
Future<bool> deleteTempDirectory(); Future<bool> deleteTempDirectory();
Future<bool> deleteExternalCache();
// returns whether user granted access to a directory of his choosing // returns whether user granted access to a directory of his choosing
Future<bool> requestDirectoryAccess(String path); Future<bool> requestDirectoryAccess(String path);
@ -202,6 +204,17 @@ class PlatformStorageService implements StorageService {
return false; return false;
} }
@override
Future<bool> deleteExternalCache() async {
try {
final result = await _platform.invokeMethod('deleteExternalCache');
if (result != null) return result as bool;
} on PlatformException catch (e, stack) {
await reportService.recordError(e, stack);
}
return false;
}
@override @override
Future<bool> canRequestMediaFileBulkAccess() async { Future<bool> canRequestMediaFileBulkAccess() async {
try { try {

View file

@ -87,6 +87,7 @@ class _AboutDataUsageState extends State<AboutDataUsage> with FeedbackMixin {
label: context.l10n.aboutDataUsageClearCache, label: context.l10n.aboutDataUsageClearCache,
onPressed: () async { onPressed: () async {
await storageService.deleteTempDirectory(); await storageService.deleteTempDirectory();
await storageService.deleteExternalCache();
await mediaFetchService.clearSizedThumbnailDiskCache(); await mediaFetchService.clearSizedThumbnailDiskCache();
imageCache.clear(); imageCache.clear();
_reload(); _reload();

View file

@ -113,7 +113,7 @@ class ViewerDebugPage extends StatelessWidget {
'isRotated': '${entry.isRotated}', 'isRotated': '${entry.isRotated}',
'isFlipped': '${entry.isFlipped}', 'isFlipped': '${entry.isFlipped}',
'displayAspectRatio': '${entry.displayAspectRatio}', 'displayAspectRatio': '${entry.displayAspectRatio}',
'displaySize': '${entry.displaySize}', 'displaySize': '${entry.displaySize.width}x${entry.displaySize.height}',
}, },
), ),
const Divider(), const Divider(),