From a6c9b05d52c7eaa18655ecf093ede97dbe17746c Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 8 Mar 2023 23:06:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/help/AppWebDav.kt | 1 + .../io/legado/app/help/storage/Restore.kt | 8 +++-- .../book/import/remote/ServerConfigDialog.kt | 7 +++-- .../import/remote/ServerConfigViewModel.kt | 22 ++++++++++++++ .../ui/book/import/remote/ServersDialog.kt | 15 +++++++++- .../ui/book/import/remote/ServersViewModel.kt | 7 +++++ .../main/res/layout/item_server_select.xml | 30 ++++++++++++++----- 7 files changed, 77 insertions(+), 13 deletions(-) create mode 100644 app/src/main/java/io/legado/app/ui/book/import/remote/ServerConfigViewModel.kt diff --git a/app/src/main/java/io/legado/app/help/AppWebDav.kt b/app/src/main/java/io/legado/app/help/AppWebDav.kt index 41fa36c54..c935884c4 100644 --- a/app/src/main/java/io/legado/app/help/AppWebDav.kt +++ b/app/src/main/java/io/legado/app/help/AppWebDav.kt @@ -154,6 +154,7 @@ object AppWebDav { authorization?.let { val webDav = WebDav(rootWebDavUrl + name, it) webDav.downloadTo(zipFilePath, true) + FileUtils.delete(Backup.backupPath) ZipUtils.unzipFile(zipFilePath, Backup.backupPath) Restore.restoreDatabase() Restore.restoreConfig() 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 595f9e4b4..6ea181b42 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 @@ -221,9 +221,11 @@ object Restore { private inline fun fileToListT(path: String, fileName: String): List? { try { - val file = FileUtils.createFileIfNotExist(path + File.separator + fileName) - FileInputStream(file).use { - return GSON.fromJsonArray(it).getOrThrow() + val file = File(path + File.separator + fileName) + if (file.exists()) { + FileInputStream(file).use { + return GSON.fromJsonArray(it).getOrThrow() + } } } catch (e: Exception) { AppLog.put("$fileName\n读取解析出错\n${e.localizedMessage}", e) diff --git a/app/src/main/java/io/legado/app/ui/book/import/remote/ServerConfigDialog.kt b/app/src/main/java/io/legado/app/ui/book/import/remote/ServerConfigDialog.kt index 20a1009ee..2a926e2ea 100644 --- a/app/src/main/java/io/legado/app/ui/book/import/remote/ServerConfigDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/import/remote/ServerConfigDialog.kt @@ -7,6 +7,7 @@ import android.view.MenuItem import android.view.View import android.view.ViewGroup import androidx.appcompat.widget.Toolbar +import androidx.fragment.app.viewModels import io.legado.app.R import io.legado.app.base.BaseDialogFragment import io.legado.app.data.appDb @@ -30,6 +31,7 @@ class ServerConfigDialog() : BaseDialogFragment(R.layout.dialog_webdav_server, t } private val binding by viewBinding(DialogWebdavServerBinding::bind) + private val viewModel by viewModels() private val serverUi = listOf( RowUi("url"), @@ -47,8 +49,9 @@ class ServerConfigDialog() : BaseDialogFragment(R.layout.dialog_webdav_server, t binding.toolBar.inflateMenu(R.menu.server_config) binding.toolBar.menu.applyTint(requireContext()) binding.toolBar.setOnMenuItemClickListener(this) - - upConfigView(null) + viewModel.init(arguments?.getLong("id")) { + upConfigView(viewModel.server) + } } override fun onMenuItemClick(item: MenuItem): Boolean { diff --git a/app/src/main/java/io/legado/app/ui/book/import/remote/ServerConfigViewModel.kt b/app/src/main/java/io/legado/app/ui/book/import/remote/ServerConfigViewModel.kt new file mode 100644 index 000000000..ed816b7ed --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/book/import/remote/ServerConfigViewModel.kt @@ -0,0 +1,22 @@ +package io.legado.app.ui.book.import.remote + +import android.app.Application +import io.legado.app.base.BaseViewModel +import io.legado.app.data.appDb +import io.legado.app.data.entities.Server + +class ServerConfigViewModel(application: Application): BaseViewModel(application) { + + var server: Server? = null + + fun init(id: Long?, onSuccess: () -> Unit) { + execute { + if (server == null && id != null) { + server = appDb.serverDao.get(id) + } + }.onSuccess { + onSuccess.invoke() + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/import/remote/ServersDialog.kt b/app/src/main/java/io/legado/app/ui/book/import/remote/ServersDialog.kt index 2d249b7e1..7a9de16bb 100644 --- a/app/src/main/java/io/legado/app/ui/book/import/remote/ServersDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/import/remote/ServersDialog.kt @@ -17,6 +17,7 @@ import io.legado.app.data.appDb import io.legado.app.data.entities.Server import io.legado.app.databinding.DialogRecyclerViewBinding import io.legado.app.databinding.ItemServerSelectBinding +import io.legado.app.lib.dialogs.alert import io.legado.app.lib.theme.backgroundColor import io.legado.app.lib.theme.primaryColor import io.legado.app.ui.widget.recycler.VerticalDivider @@ -92,11 +93,23 @@ class ServersDialog : BaseDialogFragment(R.layout.dialog_recycler_view), selectServerId = getItemByLayoutPosition(holder.layoutPosition)?.id } } - binding.tvEdit.setOnClickListener { + binding.ivEdit.setOnClickListener { getItemByLayoutPosition(holder.layoutPosition)?.let { server -> showDialogFragment(ServerConfigDialog(server.id)) } } + binding.ivDelete.setOnClickListener { + alert { + setTitle(R.string.draw) + setMessage(R.string.sure_del) + yesButton { + getItemByLayoutPosition(holder.layoutPosition)?.let { server -> + viewModel.delete(server) + } + } + noButton() + } + } } override fun convert( diff --git a/app/src/main/java/io/legado/app/ui/book/import/remote/ServersViewModel.kt b/app/src/main/java/io/legado/app/ui/book/import/remote/ServersViewModel.kt index b2b1281a6..0508e87cb 100644 --- a/app/src/main/java/io/legado/app/ui/book/import/remote/ServersViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/import/remote/ServersViewModel.kt @@ -2,9 +2,16 @@ package io.legado.app.ui.book.import.remote import android.app.Application import io.legado.app.base.BaseViewModel +import io.legado.app.data.appDb +import io.legado.app.data.entities.Server class ServersViewModel(application: Application): BaseViewModel(application) { + fun delete(server: Server) { + execute { + appDb.serverDao.delete(server) + } + } } \ No newline at end of file diff --git a/app/src/main/res/layout/item_server_select.xml b/app/src/main/res/layout/item_server_select.xml index cad8e9166..748f39ea9 100644 --- a/app/src/main/res/layout/item_server_select.xml +++ b/app/src/main/res/layout/item_server_select.xml @@ -2,6 +2,7 @@ - + + + + \ No newline at end of file