diff --git a/app/src/main/java/io/legado/app/help/BookHelp.kt b/app/src/main/java/io/legado/app/help/BookHelp.kt index 2c1330b12..6c65af7ed 100644 --- a/app/src/main/java/io/legado/app/help/BookHelp.kt +++ b/app/src/main/java/io/legado/app/help/BookHelp.kt @@ -41,8 +41,14 @@ object BookHelp { } fun clearCache() { - FileUtils.deleteFile(getBookCachePath()) - FileUtils.getFolder(getBookCachePath()) + if (downloadUri.isDocumentUri(App.INSTANCE)) { + DocumentFile.fromTreeUri(App.INSTANCE, downloadUri) + ?.findFile(cacheFolderName) + ?.delete() + } else { + FileUtils.deleteFile(getBookCachePath()) + FileUtils.createFolderIfNotExist(getBookCachePath()) + } } @Synchronized @@ -132,11 +138,11 @@ object BookHelp { fun delContent(book: Book, bookChapter: BookChapter) { if (downloadUri.isDocumentUri(App.INSTANCE)) { DocumentFile.fromTreeUri(App.INSTANCE, downloadUri)?.let { - DocumentUtils.createFileIfNotExist( + DocumentUtils.getDirDocument( it, - "${bookChapterName(bookChapter)}.nb", subDirs = *arrayOf(cacheFolderName, bookFolderName(book)) - )?.delete() + )?.findFile("${bookChapterName(bookChapter)}.nb") + ?.delete() } } else { FileUtils.createFileIfNotExist( diff --git a/app/src/main/java/io/legado/app/help/storage/Backup.kt b/app/src/main/java/io/legado/app/help/storage/Backup.kt index 8a635bafc..fd28eea7f 100644 --- a/app/src/main/java/io/legado/app/help/storage/Backup.kt +++ b/app/src/main/java/io/legado/app/help/storage/Backup.kt @@ -47,40 +47,40 @@ object Backup { App.db.bookDao().allBooks.let { if (it.isNotEmpty()) { val json = GSON.toJson(it) - FileUtils.getFile(backupPath + File.separator + "bookshelf.json") + FileUtils.createFileIfNotExist(backupPath + File.separator + "bookshelf.json") .writeText(json) } } App.db.bookGroupDao().all().let { if (it.isNotEmpty()) { val json = GSON.toJson(it) - FileUtils.getFile(backupPath + File.separator + "bookGroup.json") + FileUtils.createFileIfNotExist(backupPath + File.separator + "bookGroup.json") .writeText(json) } } App.db.bookSourceDao().all.let { if (it.isNotEmpty()) { val json = GSON.toJson(it) - FileUtils.getFile(backupPath + File.separator + "bookSource.json") + FileUtils.createFileIfNotExist(backupPath + File.separator + "bookSource.json") .writeText(json) } } App.db.rssSourceDao().all.let { if (it.isNotEmpty()) { val json = GSON.toJson(it) - FileUtils.getFile(backupPath + File.separator + "rssSource.json") + FileUtils.createFileIfNotExist(backupPath + File.separator + "rssSource.json") .writeText(json) } } App.db.replaceRuleDao().all.let { if (it.isNotEmpty()) { val json = GSON.toJson(it) - FileUtils.getFile(backupPath + File.separator + "replaceRule.json") + FileUtils.createFileIfNotExist(backupPath + File.separator + "replaceRule.json") .writeText(json) } } GSON.toJson(ReadBookConfig.configList)?.let { - FileUtils.getFile(backupPath + File.separator + ReadBookConfig.readConfigFileName) + FileUtils.createFileIfNotExist(backupPath + File.separator + ReadBookConfig.readConfigFileName) .writeText(it) } Preferences.getSharedPreferences(App.INSTANCE, backupPath, "config")?.let { sp -> @@ -113,7 +113,7 @@ object Backup { doc?.let { DocumentUtils.writeText( context, - FileUtils.getFile(backupPath + File.separator + fileName).readText(), + FileUtils.createFileIfNotExist(backupPath + File.separator + fileName).readText(), doc.uri ) } @@ -124,8 +124,11 @@ object Backup { private fun copyBackup() { try { for (fileName in backupFileNames) { - FileUtils.getFile(backupPath + File.separator + "bookshelf.json") - .copyTo(FileUtils.getFile(legadoPath + File.separator + "bookshelf.json"), true) + FileUtils.createFileIfNotExist(backupPath + File.separator + "bookshelf.json") + .copyTo( + FileUtils.createFileIfNotExist(legadoPath + File.separator + "bookshelf.json"), + true + ) } } catch (e: Exception) { e.printStackTrace() diff --git a/app/src/main/java/io/legado/app/help/storage/Restore.kt b/app/src/main/java/io/legado/app/help/storage/Restore.kt index 6741e6830..3f7110a54 100644 --- a/app/src/main/java/io/legado/app/help/storage/Restore.kt +++ b/app/src/main/java/io/legado/app/help/storage/Restore.kt @@ -37,7 +37,7 @@ object Restore { for (fileName in Backup.backupFileNames) { if (doc.name == fileName) { DocumentUtils.readText(context, doc.uri)?.let { - FileUtils.getFile(Backup.backupPath + File.separator + fileName) + FileUtils.createFileIfNotExist(Backup.backupPath + File.separator + fileName) .writeText(it) } } @@ -50,7 +50,7 @@ object Restore { suspend fun restore(path: String) { withContext(IO) { try { - val file = FileUtils.getFile(path + File.separator + "bookshelf.json") + val file = FileUtils.createFileIfNotExist(path + File.separator + "bookshelf.json") val json = file.readText() GSON.fromJsonArray(json)?.let { App.db.bookDao().insert(*it.toTypedArray()) @@ -59,7 +59,7 @@ object Restore { e.printStackTrace() } try { - val file = FileUtils.getFile(path + File.separator + "bookGroup.json") + val file = FileUtils.createFileIfNotExist(path + File.separator + "bookGroup.json") val json = file.readText() GSON.fromJsonArray(json)?.let { App.db.bookGroupDao().insert(*it.toTypedArray()) @@ -68,7 +68,7 @@ object Restore { e.printStackTrace() } try { - val file = FileUtils.getFile(path + File.separator + "bookSource.json") + val file = FileUtils.createFileIfNotExist(path + File.separator + "bookSource.json") val json = file.readText() GSON.fromJsonArray(json)?.let { App.db.bookSourceDao().insert(*it.toTypedArray()) @@ -77,7 +77,7 @@ object Restore { e.printStackTrace() } try { - val file = FileUtils.getFile(path + File.separator + "rssSource.json") + val file = FileUtils.createFileIfNotExist(path + File.separator + "rssSource.json") val json = file.readText() GSON.fromJsonArray(json)?.let { App.db.rssSourceDao().insert(*it.toTypedArray()) @@ -86,7 +86,8 @@ object Restore { e.printStackTrace() } try { - val file = FileUtils.getFile(path + File.separator + "replaceRule.json") + val file = + FileUtils.createFileIfNotExist(path + File.separator + "replaceRule.json") val json = file.readText() GSON.fromJsonArray(json)?.let { App.db.replaceRuleDao().insert(*it.toTypedArray()) @@ -96,7 +97,7 @@ object Restore { } try { val file = - FileUtils.getFile(path + File.separator + ReadBookConfig.readConfigFileName) + FileUtils.createFileIfNotExist(path + File.separator + ReadBookConfig.readConfigFileName) val configFile = File(App.INSTANCE.filesDir.absolutePath + File.separator + ReadBookConfig.readConfigFileName) if (file.exists()) { @@ -125,7 +126,7 @@ object Restore { GlobalScope.launch(IO) { try {// 导入书架 val shelfFile = - FileUtils.getFile(Backup.defaultPath + File.separator + "myBookShelf.json") + FileUtils.createFileIfNotExist(Backup.defaultPath + File.separator + "myBookShelf.json") val json = shelfFile.readText() val importCount = importOldBookshelf(json) withContext(Main) { @@ -139,7 +140,7 @@ object Restore { try {// Book source val sourceFile = - FileUtils.getFile(Backup.defaultPath + File.separator + "myBookSource.json") + FileUtils.createFileIfNotExist(Backup.defaultPath + File.separator + "myBookSource.json") val json = sourceFile.readText() val importCount = importOldSource(json) withContext(Main) { @@ -153,7 +154,7 @@ object Restore { try {// Replace rules val ruleFile = - FileUtils.getFile(Backup.defaultPath + File.separator + "myBookReplaceRule.json") + FileUtils.createFileIfNotExist(Backup.defaultPath + File.separator + "myBookReplaceRule.json") val json = ruleFile.readText() val importCount = importOldReplaceRule(json) withContext(Main) { diff --git a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt index b12fef048..6f211a3c7 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -100,7 +100,7 @@ class HttpReadAloudService : BaseReadAloudService(), } private fun getSpeakFile(index: Int = nowSpeak): File { - return FileUtils.getFile("${ttsFolder}${File.separator}${index}.mp3") + return FileUtils.createFileIfNotExist("${ttsFolder}${File.separator}${index}.mp3") } private fun getAudioBody(content: String): Map { diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt index 460e234c0..8fe683273 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt @@ -173,7 +173,7 @@ class BgTextConfigDialog : DialogFragment() { var file = requireContext().getExternalFilesDir(null) ?: requireContext().filesDir file = - FileUtils.getFile(file.absolutePath + File.separator + "bg" + File.separator + doc.name) + FileUtils.createFileIfNotExist(file.absolutePath + File.separator + "bg" + File.separator + doc.name) DocumentUtils.readBytes(requireContext(), uri)?.let { file.writeBytes(it) ReadBookConfig.getConfig().setBg(2, file.absolutePath) diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt index 5c75187bd..06edf4033 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt @@ -91,7 +91,7 @@ class BookSourceViewModel(application: Application) : BaseViewModel(application) }.let { val json = GSON.toJson(it) val file = - FileUtils.getFile(Backup.exportPath + File.separator + "exportBookSource.json") + FileUtils.createFileIfNotExist(Backup.exportPath + File.separator + "exportBookSource.json") file.writeText(json) } }.onSuccess { diff --git a/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.kt b/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.kt index 60be30fae..00a279a33 100644 --- a/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.kt @@ -80,7 +80,7 @@ class ReplaceRuleViewModel(application: Application) : BaseViewModel(application }.let { val json = GSON.toJson(it) val file = - FileUtils.getFile(Backup.exportPath + File.separator + "exportReplaceRule.json") + FileUtils.createFileIfNotExist(Backup.exportPath + File.separator + "exportReplaceRule.json") file.writeText(json) } }.onSuccess { diff --git a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceViewModel.kt index 22c8f62f4..bf82505d3 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceViewModel.kt @@ -65,7 +65,7 @@ class RssSourceViewModel(application: Application) : BaseViewModel(application) App.db.rssSourceDao().getRssSources(*ids.toTypedArray()).let { val json = GSON.toJson(it) val file = - FileUtils.getFile(Backup.exportPath + File.separator + "exportRssSource.json") + FileUtils.createFileIfNotExist(Backup.exportPath + File.separator + "exportRssSource.json") file.writeText(json) } }.onSuccess { diff --git a/app/src/main/java/io/legado/app/ui/widget/font/FontSelectDialog.kt b/app/src/main/java/io/legado/app/ui/widget/font/FontSelectDialog.kt index 5e57e79fc..79d3c9512 100644 --- a/app/src/main/java/io/legado/app/ui/widget/font/FontSelectDialog.kt +++ b/app/src/main/java/io/legado/app/ui/widget/font/FontSelectDialog.kt @@ -126,7 +126,7 @@ class FontSelectDialog : DialogFragment(), DocumentFile.fromTreeUri(App.INSTANCE, uri)?.listFiles()?.forEach { file -> if (file.name?.toLowerCase()?.matches(".*\\.[ot]tf".toRegex()) == true) { DocumentUtils.readBytes(App.INSTANCE, file.uri)?.let { - FileUtils.getFile(fontCacheFolder + file.name).writeBytes(it) + FileUtils.createFileIfNotExist(fontCacheFolder + file.name).writeBytes(it) } } } @@ -162,7 +162,8 @@ class FontSelectDialog : DialogFragment(), override fun onClick(file: File) { launch(IO) { - file.copyTo(FileUtils.getFile(fontFolder + file.name), true).absolutePath.let { path -> + file.copyTo(FileUtils.createFileIfNotExist(fontFolder + file.name), true) + .absolutePath.let { path -> val cb = (parentFragment as? CallBack) ?: (activity as? CallBack) cb?.let { if (it.curFontPath != path) { diff --git a/app/src/main/java/io/legado/app/utils/FileUtils.kt b/app/src/main/java/io/legado/app/utils/FileUtils.kt index 3d9923448..f8876c69d 100644 --- a/app/src/main/java/io/legado/app/utils/FileUtils.kt +++ b/app/src/main/java/io/legado/app/utils/FileUtils.kt @@ -22,12 +22,12 @@ object FileUtils { fun createFileIfNotExist(file: File, fileName: String, vararg subDirs: String): File { val filePath = file.absolutePath + File.separator + subDirs.joinToString(File.separator) + File.separator + fileName - return getFile(filePath) + return createFileIfNotExist(filePath) } fun createFileIfNotExist(file: File, vararg subDirs: String): File { val filePath = file.absolutePath + File.separator + subDirs.joinToString(File.separator) - return getFolder(filePath) + return createFolderIfNotExist(filePath) } fun getCachePath(): String { @@ -35,8 +35,7 @@ object FileUtils { ?: App.INSTANCE.cacheDir.absolutePath } - //获取文件夹 - fun getFolder(filePath: String): File { + fun createFolderIfNotExist(filePath: String): File { val file = File(filePath) //如果文件夹不存在,就创建它 if (!file.exists()) { @@ -45,15 +44,14 @@ object FileUtils { return file } - //获取文件 @Synchronized - fun getFile(filePath: String): File { + fun createFileIfNotExist(filePath: String): File { val file = File(filePath) try { if (!file.exists()) { //创建父类文件夹 file.parent?.let { - getFolder(it) + createFolderIfNotExist(it) } //创建文件 file.createNewFile() diff --git a/app/src/main/java/io/legado/app/utils/LogUtils.kt b/app/src/main/java/io/legado/app/utils/LogUtils.kt index b6712ad4d..7953259f5 100644 --- a/app/src/main/java/io/legado/app/utils/LogUtils.kt +++ b/app/src/main/java/io/legado/app/utils/LogUtils.kt @@ -30,7 +30,7 @@ object LogUtils { private val fileHandler by lazy { val logFolder = FileUtils.getCachePath() + File.separator + "logs" - FileUtils.getFolder(logFolder) + FileUtils.createFolderIfNotExist(logFolder) FileHandler( logFolder + File.separator + "app.log", 10240,