diff --git a/app/src/main/java/io/legado/app/data/dao/BookGroupDao.kt b/app/src/main/java/io/legado/app/data/dao/BookGroupDao.kt index 5e1fe7684..4ce64c2e0 100644 --- a/app/src/main/java/io/legado/app/data/dao/BookGroupDao.kt +++ b/app/src/main/java/io/legado/app/data/dao/BookGroupDao.kt @@ -58,6 +58,9 @@ interface BookGroupDao { @get:Query("SELECT * FROM book_groups ORDER BY `order`") val all: List + @get:Query("select count(*) < 64 from book_groups where groupId >= 0 or groupId == ${Long.MIN_VALUE}") + val canAddGroup: Boolean + @Query("update book_groups set show = 1 where groupId = :groupId") fun enableGroup(groupId: Long) diff --git a/app/src/main/java/io/legado/app/help/TTS.kt b/app/src/main/java/io/legado/app/help/TTS.kt index 6774638ff..3165bb3e8 100644 --- a/app/src/main/java/io/legado/app/help/TTS.kt +++ b/app/src/main/java/io/legado/app/help/TTS.kt @@ -77,24 +77,23 @@ class TTS { } private fun addTextToSpeakList() { - textToSpeech?.let { tts -> - kotlin.runCatching { - var result = tts.speak("", TextToSpeech.QUEUE_FLUSH, null, null) - if (result == TextToSpeech.ERROR) { - clearTts() - textToSpeech = TextToSpeech(appCtx, initListener) - return - } - text?.splitNotBlank("\n")?.forEachIndexed { i, s -> - result = tts.speak(s, TextToSpeech.QUEUE_ADD, null, tag + i) - if (result == TextToSpeech.ERROR) { - AppLog.put("tts朗读出错:$text") - } - } - }.onFailure { - AppLog.put("tts朗读出错", it) - appCtx.toastOnUi(it.localizedMessage) + val tts = textToSpeech ?: return + kotlin.runCatching { + var result = tts.speak("", TextToSpeech.QUEUE_FLUSH, null, null) + if (result == TextToSpeech.ERROR) { + clearTts() + textToSpeech = TextToSpeech(appCtx, initListener) + return } + text?.splitNotBlank("\n")?.forEachIndexed { i, s -> + result = tts.speak(s, TextToSpeech.QUEUE_ADD, null, tag + i) + if (result == TextToSpeech.ERROR) { + AppLog.put("tts朗读出错:$text") + } + } + }.onFailure { + AppLog.put("tts朗读出错", it) + appCtx.toastOnUi(it.localizedMessage) } } 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 6470c06f1..4403d4f2f 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 @@ -6,6 +6,7 @@ import androidx.documentfile.provider.DocumentFile import io.legado.app.constant.AppLog import io.legado.app.constant.PreferKey import io.legado.app.data.appDb +import io.legado.app.exception.NoStackTraceException import io.legado.app.help.AppWebDav import io.legado.app.help.DirectLinkUpload import io.legado.app.help.config.AppConfig @@ -186,6 +187,7 @@ object Backup { } AppWebDav.backUpWebDav(zipFileName) } + FileUtils.delete(backupPath) } } @@ -203,12 +205,15 @@ object Backup { @Throws(Exception::class) @Suppress("SameParameterValue") private fun copyBackup(context: Context, uri: Uri, fileName: String) { - DocumentFile.fromTreeUri(context, uri)?.let { treeDoc -> - treeDoc.findFile(fileName)?.delete() - treeDoc.createFile("", fileName)?.openOutputStream()?.use { outputS -> - FileInputStream(File(zipFilePath)).use { inputS -> - inputS.copyTo(outputS) - } + val treeDoc = DocumentFile.fromTreeUri(context, uri)!! + treeDoc.findFile(fileName)?.delete() + val fileDoc = treeDoc.createFile("", fileName) + ?: throw NoStackTraceException("创建文件失败") + val outputS = fileDoc.openOutputStream() + ?: throw NoStackTraceException("打开OutputStream失败") + outputS.use { + FileInputStream(zipFilePath).use { inputS -> + inputS.copyTo(outputS) } } } diff --git a/app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt b/app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt index 4f9775886..2347f7015 100644 --- a/app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt @@ -26,6 +26,7 @@ import io.legado.app.ui.widget.recycler.VerticalDivider import io.legado.app.utils.applyTint import io.legado.app.utils.setLayout import io.legado.app.utils.showDialogFragment +import io.legado.app.utils.toastOnUi import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.visible import kotlinx.coroutines.flow.conflate @@ -82,7 +83,13 @@ class GroupManageDialog : BaseDialogFragment(R.layout.dialog_recycler_view), override fun onMenuItemClick(item: MenuItem?): Boolean { when (item?.itemId) { - R.id.menu_add -> showDialogFragment(GroupEditDialog()) + R.id.menu_add -> { + if (appDb.bookGroupDao.canAddGroup) { + showDialogFragment(GroupEditDialog()) + } else { + toastOnUi("分组已达上限(64个)") + } + } } return true }