kunfei hace 3 años
padre
commit
9659c39cd7

+ 1 - 0
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()

+ 5 - 3
app/src/main/java/io/legado/app/help/storage/Restore.kt

@@ -221,9 +221,11 @@ object Restore {
 
     private inline fun <reified T> fileToListT(path: String, fileName: String): List<T>? {
         try {
-            val file = FileUtils.createFileIfNotExist(path + File.separator + fileName)
-            FileInputStream(file).use {
-                return GSON.fromJsonArray<T>(it).getOrThrow()
+            val file = File(path + File.separator + fileName)
+            if (file.exists()) {
+                FileInputStream(file).use {
+                    return GSON.fromJsonArray<T>(it).getOrThrow()
+                }
             }
         } catch (e: Exception) {
             AppLog.put("$fileName\n读取解析出错\n${e.localizedMessage}", e)

+ 5 - 2
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<ServerConfigViewModel>()
 
     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 {

+ 22 - 0
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()
+        }
+    }
+
+}

+ 14 - 1
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(

+ 7 - 0
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)
+        }
+    }
 
 }

+ 23 - 7
app/src/main/res/layout/item_server_select.xml

@@ -2,6 +2,7 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
+    xmlns:tools="http://schemas.android.com/tools"
     android:background="@color/background"
     android:padding="8dp"
     android:gravity="center_vertical"
@@ -16,12 +17,27 @@
         android:singleLine="true"
         android:textColor="@color/primaryText" />
 
-    <TextView
-        android:id="@+id/tv_edit"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:background="?attr/selectableItemBackground"
-        android:padding="8dp"
-        android:text="@string/edit" />
+
+    <androidx.appcompat.widget.AppCompatImageView
+        android:id="@+id/iv_edit"
+        android:layout_width="36dp"
+        android:layout_height="36dp"
+        android:layout_gravity="center"
+        android:background="?android:attr/selectableItemBackgroundBorderless"
+        android:contentDescription="@string/edit"
+        android:padding="6dp"
+        android:src="@drawable/ic_edit"
+        android:tint="@color/primaryText" />
+
+    <androidx.appcompat.widget.AppCompatImageView
+        android:id="@+id/iv_delete"
+        android:layout_width="36dp"
+        android:layout_height="36dp"
+        android:padding="6dp"
+        android:background="?attr/selectableItemBackgroundBorderless"
+        android:src="@drawable/ic_outline_delete"
+        android:tint="@color/primaryText"
+        android:contentDescription="@string/delete"
+        tools:ignore="RtlHardcoded" />
 
 </LinearLayout>