about: clearing cache also removes external cache
This commit is contained in:
parent
3e8bd108b0
commit
ead7adb36c
4 changed files with 24 additions and 3 deletions
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
Loading…
Reference in a new issue