diff --git a/app/src/main/java/io/legado/app/data/dao/ServerDao.kt b/app/src/main/java/io/legado/app/data/dao/ServerDao.kt index 4933541e9..fd6b41198 100644 --- a/app/src/main/java/io/legado/app/data/dao/ServerDao.kt +++ b/app/src/main/java/io/legado/app/data/dao/ServerDao.kt @@ -25,6 +25,9 @@ interface ServerDao { @Delete fun delete(vararg server: Server) + @Query("delete from servers where id = :id") + fun delete(id: Long) + @Query("delete from servers where id < 0") fun deleteDefault() } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/data/entities/Server.kt b/app/src/main/java/io/legado/app/data/entities/Server.kt index ce00b65e0..093cfef21 100644 --- a/app/src/main/java/io/legado/app/data/entities/Server.kt +++ b/app/src/main/java/io/legado/app/data/entities/Server.kt @@ -6,6 +6,7 @@ import androidx.room.PrimaryKey import io.legado.app.utils.GSON import io.legado.app.utils.fromJsonObject import kotlinx.parcelize.Parcelize +import org.json.JSONObject /** * 服务器 @@ -19,7 +20,7 @@ data class Server( var type: TYPE = TYPE.WEBDAV, var config: String? = null, var sortNumber: Int = 0 -): Parcelable { +) : Parcelable { enum class TYPE { WEBDAV, ALIYUN, GOOGLEYUN @@ -36,6 +37,12 @@ data class Server( return false } + fun getConfigJsonObject(): JSONObject? { + val json = config + json ?: return null + return JSONObject(json) + } + fun getWebDavConfig(): WebDavConfig? { return GSON.fromJsonObject(config).getOrNull() } diff --git a/app/src/main/java/io/legado/app/ui/book/import/remote/RemoteBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/import/remote/RemoteBookViewModel.kt index 2ee320ae9..6026d883f 100644 --- a/app/src/main/java/io/legado/app/ui/book/import/remote/RemoteBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/import/remote/RemoteBookViewModel.kt @@ -4,6 +4,7 @@ import android.app.Application import io.legado.app.base.BaseViewModel import io.legado.app.constant.AppLog import io.legado.app.constant.BookType +import io.legado.app.data.appDb import io.legado.app.exception.NoStackTraceException import io.legado.app.help.AppWebDav import io.legado.app.lib.webdav.Authorization @@ -11,7 +12,6 @@ import io.legado.app.lib.webdav.WebDav import io.legado.app.model.localBook.LocalBook import io.legado.app.model.remote.RemoteBook import io.legado.app.model.remote.RemoteBookWebDav -import io.legado.app.utils.ACache import io.legado.app.utils.toastOnUi import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.channels.awaitClose @@ -79,7 +79,7 @@ class RemoteBookViewModel(application: Application) : BaseViewModel(application) fun initData(onSuccess: () -> Unit) { execute { - val config = ACache.get().getAsJSONObject("remoteServerConfig") + val config = appDb.serverDao.get(10001)?.getConfigJsonObject() if (config != null && config.has("url")) { val url = config.getString("url") if (url.isNotBlank()) { 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 1c5955e4f..65af6ed8e 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 @@ -9,11 +9,12 @@ import android.view.ViewGroup import androidx.appcompat.widget.Toolbar import io.legado.app.R import io.legado.app.base.BaseDialogFragment +import io.legado.app.data.appDb +import io.legado.app.data.entities.Server import io.legado.app.data.entities.rule.RowUi import io.legado.app.databinding.DialogWebdavServerBinding import io.legado.app.databinding.ItemSourceEditBinding import io.legado.app.lib.theme.primaryColor -import io.legado.app.utils.ACache import io.legado.app.utils.GSON import io.legado.app.utils.applyTint import io.legado.app.utils.setLayout @@ -48,9 +49,14 @@ class ServerConfigDialog : BaseDialogFragment(R.layout.dialog_webdav_server, tru R.id.menu_save -> { val data = getConfigData() if (data.isEmpty()) { - ACache.get().remove("remoteServerConfig") + appDb.serverDao.delete(10001) } else { - ACache.get().put("remoteServerConfig", GSON.toJson(data)) + appDb.serverDao.insert( + Server( + id = 10001, + config = GSON.toJson(data) + ) + ) } dismissAllowingStateLoss() } @@ -59,7 +65,7 @@ class ServerConfigDialog : BaseDialogFragment(R.layout.dialog_webdav_server, tru } private fun initConfigView() { - val data = ACache.get().getAsJSONObject("remoteServerConfig") + val data = appDb.serverDao.get(10001)?.getConfigJsonObject() serverUi.forEachIndexed { index, rowUi -> when (rowUi.type) { RowUi.Type.text -> ItemSourceEditBinding.inflate(