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)
"deleteEmptyDirectories" -> ioScope.launch { safe(call, result, ::deleteEmptyDirectories) }
"deleteTempDirectory" -> ioScope.launch { safe(call, result, ::deleteTempDirectory) }
"deleteExternalCache" -> ioScope.launch { safe(call, result, ::deleteExternalCache) }
"canRequestMediaFileBulkAccess" -> safe(call, result, ::canRequestMediaFileBulkAccess)
"canInsertMedia" -> safe(call, result, ::canInsertMedia)
else -> result.notImplemented()
@ -49,16 +50,17 @@ class StorageHandler(private val context: Context) : MethodCallHandler {
var internalCache = getFolderSize(context.cacheDir)
internalCache += getFolderSize(context.codeCacheDir)
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 database = getFolderSize(File(dataDir, "databases"))
val flutter = getFolderSize(File(PathUtils.getDataDirectory(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 externalData = context.getExternalFilesDirs(null).map(::getFolderSize).sum()
val externalData = externalFilesDirs.map(::getFolderSize).sum()
val miscData = internalData + externalData - (database + flutter + vaults + trash)
result.success(
@ -224,6 +226,11 @@ class StorageHandler(private val context: Context) : MethodCallHandler {
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) {
result.success(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
}

View file

@ -33,6 +33,8 @@ abstract class StorageService {
Future<bool> deleteTempDirectory();
Future<bool> deleteExternalCache();
// returns whether user granted access to a directory of his choosing
Future<bool> requestDirectoryAccess(String path);
@ -202,6 +204,17 @@ class PlatformStorageService implements StorageService {
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
Future<bool> canRequestMediaFileBulkAccess() async {
try {

View file

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

View file

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