-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathFileUtil.kt
More file actions
67 lines (59 loc) · 2.24 KB
/
FileUtil.kt
File metadata and controls
67 lines (59 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/*
* Wire
* Copyright (C) 2024 Wire Swiss GmbH
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/.
*/
package com.wire.kalium.util
import kotlinx.coroutines.await
import kotlin.js.Promise
actual object FileUtil {
actual fun mkDirs(path: String): Boolean {
// Web targets do not expose a host filesystem here; crypto persistence is handled elsewhere.
return path.isNotBlank()
}
actual fun deleteDirectory(path: String): Boolean {
return path.isNotBlank()
}
actual suspend fun deletePersistentDirectory(path: String): Boolean {
val indexedDb = js("window.indexedDB")
return when {
path.isBlank() -> false
indexedDb == null -> false
js("typeof indexedDb.databases !== 'function'") as Boolean -> deleteIndexedDb(indexedDb, path).await()
else -> {
val databases = indexedDb.databases().unsafeCast<Promise<Array<dynamic>>>().await()
val matchingNames = databases
.mapNotNull { it?.name as? String }
.filter { name -> name == path || name.startsWith("$path/") }
matchingNames.isEmpty() || matchingNames.map { deleteIndexedDb(indexedDb, it).await() }.all { it }
}
}
}
actual fun isDirectoryNonEmpty(path: String): Boolean {
return false
}
}
private fun deleteIndexedDb(indexedDb: dynamic, name: String): Promise<Boolean> = Promise { resolve, _ ->
val request = indexedDb.deleteDatabase(name)
request.onsuccess = {
resolve(true)
}
request.onerror = {
resolve(false)
}
request.onblocked = {
resolve(false)
}
}