mirror of https://github.com/NekoX-Dev/NekoX.git
91 lines
2.7 KiB
Kotlin
91 lines
2.7 KiB
Kotlin
package tw.nekomimi.nekogram.utils
|
|
|
|
import android.content.Context
|
|
import android.os.Build
|
|
import android.os.Environment
|
|
import android.os.storage.StorageManager
|
|
import org.telegram.messenger.AndroidUtilities
|
|
import org.telegram.messenger.ApplicationLoader
|
|
import org.telegram.messenger.FileLog
|
|
import tw.nekomimi.nekogram.NekoConfig
|
|
import java.io.File
|
|
import java.util.*
|
|
|
|
object EnvUtil {
|
|
|
|
@JvmStatic
|
|
@Suppress("UNCHECKED_CAST")
|
|
val rootDirectories: List<File> by lazy {
|
|
|
|
try {
|
|
val mStorageManager = ApplicationLoader.applicationContext.getSystemService(Context.STORAGE_SERVICE) as StorageManager
|
|
(mStorageManager.javaClass.getMethod("getVolumePaths").invoke(mStorageManager) as Array<String>).map { File(it) }
|
|
} catch (e: Throwable) {
|
|
AndroidUtilities.getRootDirs()
|
|
}
|
|
|
|
}
|
|
|
|
@JvmStatic
|
|
val availableDirectories
|
|
get() = LinkedList<File>().apply {
|
|
|
|
add(File(ApplicationLoader.getDataDirFixed(), "files/media"))
|
|
add(File(ApplicationLoader.getDataDirFixed(), "cache/media"))
|
|
|
|
rootDirectories.forEach {
|
|
|
|
add(File(it, "Android/data/" + ApplicationLoader.applicationContext.packageName + "/files"))
|
|
add(File(it, "Android/data/" + ApplicationLoader.applicationContext.packageName + "/cache"))
|
|
|
|
}
|
|
|
|
if (Build.VERSION.SDK_INT < 30) {
|
|
add(Environment.getExternalStoragePublicDirectory("NekoX"))
|
|
}
|
|
|
|
}.map { it.path }.toTypedArray()
|
|
|
|
// This is the only media path of NekoX, don't use other!
|
|
@JvmStatic
|
|
fun getTelegramPath(): File {
|
|
|
|
if (NekoConfig.cachePath.String() == "") {
|
|
// https://github.com/NekoX-Dev/NekoX/issues/284
|
|
NekoConfig.cachePath.setConfigString(availableDirectories[2]);
|
|
}
|
|
var telegramPath = File(NekoConfig.cachePath.String())
|
|
if (telegramPath.isDirectory || telegramPath.mkdirs()) {
|
|
return telegramPath
|
|
} else {
|
|
NekoConfig.cachePath.setConfigString(availableDirectories[2])
|
|
}
|
|
|
|
// fallback
|
|
|
|
telegramPath = ApplicationLoader.applicationContext.getExternalFilesDir(null) ?: File(ApplicationLoader.getDataDirFixed(), "cache/files")
|
|
|
|
if (telegramPath.isDirectory || telegramPath.mkdirs()) {
|
|
|
|
return telegramPath
|
|
|
|
}
|
|
|
|
telegramPath = File(ApplicationLoader.getDataDirFixed(), "cache/files")
|
|
|
|
if (!telegramPath.isDirectory) telegramPath.mkdirs();
|
|
|
|
return telegramPath;
|
|
|
|
}
|
|
|
|
@JvmStatic
|
|
fun doTest() {
|
|
|
|
FileLog.d("rootDirectories: ${rootDirectories.size}")
|
|
|
|
rootDirectories.forEach { FileLog.d(it.path) }
|
|
|
|
}
|
|
|
|
} |