feat(shared): align non-Apple UX with Apple

This commit is contained in:
2026-07-24 19:58:33 +02:00
parent b66cb8c1f1
commit c81cb7c8b6
34 changed files with 902 additions and 91 deletions

View File

@@ -48,6 +48,9 @@ private class JvmFileSystemService : FileSystemService {
return desktopTemporaryUsage(receiveFolder)
}
override suspend fun reclaimTemporaryStorage(appDataDir: String, receiveFolder: ReceiveFolder): ULong =
desktopReclaimTemporaryStorage(appDataDir, receiveFolder)
override fun createReceiveOutputSink(folder: ReceiveFolder): ReceiveOutputSinkV2? = null
override suspend fun sharePickedFiles(
@@ -88,3 +91,35 @@ internal fun desktopTemporaryUsage(receiveFolder: ReceiveFolder): ULong {
}
}.getOrDefault(0UL)
}
internal fun desktopReclaimTemporaryStorage(appDataDir: String, receiveFolder: ReceiveFolder): ULong {
var reclaimed = 0UL
if (receiveFolder.kind == ReceiveFolderKind.FileSystemPath) {
val receiveRoot = File(receiveFolder.value)
receiveRoot.walkTopDown()
.filter { file ->
file.isFile &&
file.name.startsWith(".") &&
file.name.contains(".vnidrop-") &&
file.name.endsWith(".part")
}
.toList()
.forEach { file ->
val size = file.length().coerceAtLeast(0L).toULong()
if (file.delete()) reclaimed += size
}
}
val appDataRoot = File(appDataDir)
if (appDataRoot.isDirectory) {
appDataRoot.walkTopDown()
.filter { it.isDirectory && it.name == ".Trash" }
.toList()
.forEach { trash ->
val size = trash.walkTopDown()
.filter(File::isFile)
.fold(0UL) { total, file -> total + file.length().coerceAtLeast(0L).toULong() }
if (trash.deleteRecursively()) reclaimed += size
}
}
return reclaimed
}