diff --git a/app/src/main/java/io/legado/app/help/storage/WebDavHelp.kt b/app/src/main/java/io/legado/app/help/storage/WebDavHelp.kt index 190ec2176..e728c28de 100644 --- a/app/src/main/java/io/legado/app/help/storage/WebDavHelp.kt +++ b/app/src/main/java/io/legado/app/help/storage/WebDavHelp.kt @@ -51,28 +51,25 @@ object WebDavHelp { return false } + @Throws(Exception::class) private fun getWebDavFileNames(): ArrayList { val url = rootWebDavUrl val names = arrayListOf() if (initWebDav()) { - try { - var files = WebDav(url).listFiles() - files = files.reversed() - for (index: Int in 0 until min(10, files.size)) { - files[index].displayName?.let { - names.add(it) - } + var files = WebDav(url).listFiles() + files = files.reversed() + for (index: Int in 0 until min(10, files.size)) { + files[index].displayName?.let { + names.add(it) } - } catch (e: Exception) { - return names } } return names } - suspend fun showRestoreDialog(context: Context): Boolean { + suspend fun showRestoreDialog(context: Context) { val names = withContext(IO) { getWebDavFileNames() } - return if (names.isNotEmpty()) { + if (names.isNotEmpty()) { withContext(Main) { context.selector( title = context.getString(R.string.select_restore_file), @@ -83,9 +80,8 @@ object WebDavHelp { } } } - true } else { - false + throw Exception("Web dav no back up file") } } diff --git a/app/src/main/java/io/legado/app/ui/config/BackupRestoreUi.kt b/app/src/main/java/io/legado/app/ui/config/BackupRestoreUi.kt index 391a76ddf..39939e8cf 100644 --- a/app/src/main/java/io/legado/app/ui/config/BackupRestoreUi.kt +++ b/app/src/main/java/io/legado/app/ui/config/BackupRestoreUi.kt @@ -19,6 +19,7 @@ import io.legado.app.help.storage.WebDavHelp import io.legado.app.ui.filechooser.FilePicker import io.legado.app.utils.getPrefString import io.legado.app.utils.isContentPath +import io.legado.app.utils.longToast import io.legado.app.utils.toast import kotlinx.coroutines.Dispatchers.Main import org.jetbrains.anko.toast @@ -77,24 +78,24 @@ object BackupRestoreUi { fun restore(fragment: Fragment) { Coroutine.async(context = Main) { - val restoreFromWebDav = WebDavHelp.showRestoreDialog(fragment.requireContext()) - if (!restoreFromWebDav) { - val backupPath = fragment.getPrefString(PreferKey.backupPath) - if (backupPath?.isNotEmpty() == true) { - if (backupPath.isContentPath()) { - val uri = Uri.parse(backupPath) - val doc = DocumentFile.fromTreeUri(fragment.requireContext(), uri) - if (doc?.canWrite() == true) { - Restore.restore(fragment.requireContext(), backupPath) - } else { - selectBackupFolder(fragment, restoreSelectRequestCode) - } + WebDavHelp.showRestoreDialog(fragment.requireContext()) + }.onError { + fragment.longToast("WebDavError:${it.localizedMessage},将从本地备份恢复。") + val backupPath = fragment.getPrefString(PreferKey.backupPath) + if (backupPath?.isNotEmpty() == true) { + if (backupPath.isContentPath()) { + val uri = Uri.parse(backupPath) + val doc = DocumentFile.fromTreeUri(fragment.requireContext(), uri) + if (doc?.canWrite() == true) { + Restore.restore(fragment.requireContext(), backupPath) } else { - restoreUsePermission(fragment, backupPath) + selectBackupFolder(fragment, restoreSelectRequestCode) } } else { - selectBackupFolder(fragment, restoreSelectRequestCode) + restoreUsePermission(fragment, backupPath) } + } else { + selectBackupFolder(fragment, restoreSelectRequestCode) } } }