优化
This commit is contained in:
@@ -31,7 +31,7 @@ import java.util.*
|
|||||||
* webDav初始化会访问网络,不要放到主线程
|
* webDav初始化会访问网络,不要放到主线程
|
||||||
*/
|
*/
|
||||||
object AppWebDav {
|
object AppWebDav {
|
||||||
const val defaultWebDavUrl = "https://dav.jianguoyun.com/dav/"
|
private const val defaultWebDavUrl = "https://dav.jianguoyun.com/dav/"
|
||||||
private val zipFilePath = "${appCtx.externalFiles.absolutePath}${File.separator}backup.zip"
|
private val zipFilePath = "${appCtx.externalFiles.absolutePath}${File.separator}backup.zip"
|
||||||
private val bookProgressUrl get() = "${rootWebDavUrl}bookProgress/"
|
private val bookProgressUrl get() = "${rootWebDavUrl}bookProgress/"
|
||||||
private val exportsWebDavUrl get() = "${rootWebDavUrl}books/"
|
private val exportsWebDavUrl get() = "${rootWebDavUrl}books/"
|
||||||
@@ -48,7 +48,7 @@ object AppWebDav {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val rootWebDavUrl: String
|
val rootWebDavUrl: String
|
||||||
get() {
|
get() {
|
||||||
val configUrl = appCtx.getPrefString(PreferKey.webDavUrl)?.trim()
|
val configUrl = appCtx.getPrefString(PreferKey.webDavUrl)?.trim()
|
||||||
var url = if (configUrl.isNullOrEmpty()) defaultWebDavUrl else configUrl
|
var url = if (configUrl.isNullOrEmpty()) defaultWebDavUrl else configUrl
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ package io.legado.app.ui.book.remote
|
|||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.view.Menu
|
||||||
|
import android.view.MenuItem
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
import androidx.core.view.isGone
|
import androidx.core.view.isGone
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
@@ -50,13 +52,27 @@ class RemoteBookActivity : VMBaseActivity<ActivityRemoteBookBinding,RemoteBookVi
|
|||||||
viewModel.loadRemoteBookList()
|
viewModel.loadRemoteBookList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onCompatCreateOptionsMenu(menu: Menu): Boolean {
|
||||||
|
menuInflater.inflate(R.menu.book_remote, menu)
|
||||||
|
return super.onCompatCreateOptionsMenu(menu)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onCompatOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
|
when (item.itemId) {
|
||||||
|
R.id.menu_refresh -> {
|
||||||
|
viewModel.loadRemoteBookList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return super.onCompatOptionsItemSelected(item)
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressLint("NotifyDataSetChanged")
|
@SuppressLint("NotifyDataSetChanged")
|
||||||
override fun addToBookshelf(remoteBook: RemoteBook) {
|
override fun addToBookshelf(remoteBook: RemoteBook) {
|
||||||
waitDialog.show()
|
waitDialog.show()
|
||||||
viewModel.addToBookshelf(remoteBook, success = {
|
viewModel.addToBookshelf(remoteBook, success = {
|
||||||
toastOnUi(getString(R.string.download_book_success))
|
toastOnUi(getString(R.string.download_book_success))
|
||||||
adapter.notifyDataSetChanged()
|
adapter.notifyDataSetChanged()
|
||||||
}){
|
}) {
|
||||||
waitDialog.dismiss()
|
waitDialog.dismiss()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,6 +54,8 @@ class RemoteBookViewModel(application: Application): BaseViewModel(application){
|
|||||||
dataCallback?.clear()
|
dataCallback?.clear()
|
||||||
val bookList = RemoteBookWebDav.getRemoteBookList()
|
val bookList = RemoteBookWebDav.getRemoteBookList()
|
||||||
dataCallback?.setItems(bookList)
|
dataCallback?.setItems(bookList)
|
||||||
|
}.onError {
|
||||||
|
context.toastOnUi("获取webDav书籍出错\n${it.localizedMessage}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,17 +3,14 @@ package io.legado.app.ui.book.remote.manager
|
|||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import io.legado.app.constant.AppPattern.bookFileRegex
|
import io.legado.app.constant.AppPattern.bookFileRegex
|
||||||
import io.legado.app.constant.PreferKey
|
|
||||||
import io.legado.app.exception.NoStackTraceException
|
import io.legado.app.exception.NoStackTraceException
|
||||||
import io.legado.app.help.AppWebDav
|
import io.legado.app.help.AppWebDav
|
||||||
import io.legado.app.help.config.AppConfig
|
|
||||||
import io.legado.app.lib.webdav.WebDav
|
import io.legado.app.lib.webdav.WebDav
|
||||||
import io.legado.app.lib.webdav.WebDavFile
|
import io.legado.app.lib.webdav.WebDavFile
|
||||||
import io.legado.app.model.localBook.LocalBook
|
import io.legado.app.model.localBook.LocalBook
|
||||||
import io.legado.app.ui.book.remote.RemoteBook
|
import io.legado.app.ui.book.remote.RemoteBook
|
||||||
import io.legado.app.ui.book.remote.RemoteBookManager
|
import io.legado.app.ui.book.remote.RemoteBookManager
|
||||||
import io.legado.app.utils.NetworkUtils
|
import io.legado.app.utils.NetworkUtils
|
||||||
import io.legado.app.utils.getPrefString
|
|
||||||
import io.legado.app.utils.isContentScheme
|
import io.legado.app.utils.isContentScheme
|
||||||
import io.legado.app.utils.readBytes
|
import io.legado.app.utils.readBytes
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
@@ -22,7 +19,7 @@ import java.io.File
|
|||||||
import java.net.URLDecoder
|
import java.net.URLDecoder
|
||||||
|
|
||||||
object RemoteBookWebDav : RemoteBookManager() {
|
object RemoteBookWebDav : RemoteBookManager() {
|
||||||
private val remoteBookUrl get() = "${rootWebDavUrl}${remoteBookFolder}"
|
private val remoteBookUrl get() = "${AppWebDav.rootWebDavUrl}${remoteBookFolder}"
|
||||||
|
|
||||||
init {
|
init {
|
||||||
runBlocking {
|
runBlocking {
|
||||||
@@ -30,19 +27,6 @@ object RemoteBookWebDav : RemoteBookManager() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val rootWebDavUrl: String
|
|
||||||
get() {
|
|
||||||
val configUrl = appCtx.getPrefString(PreferKey.webDavUrl)?.trim()
|
|
||||||
var url = if (configUrl.isNullOrEmpty()) AppWebDav.defaultWebDavUrl else configUrl
|
|
||||||
if (!url.endsWith("/")) url = "${url}/"
|
|
||||||
AppConfig.webDavDir?.trim()?.let {
|
|
||||||
if (it.isNotEmpty()) {
|
|
||||||
url = "${url}${it}/"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return url
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun initRemoteContext() {
|
override suspend fun initRemoteContext() {
|
||||||
AppWebDav.authorization?.let {
|
AppWebDav.authorization?.let {
|
||||||
WebDav(remoteBookUrl, it).makeAsDir()
|
WebDav(remoteBookUrl, it).makeAsDir()
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/menu_refresh"
|
||||||
|
android:title="@string/refresh"
|
||||||
|
android:icon="@drawable/ic_refresh_black_24dp"
|
||||||
|
app:showAsAction="always" />
|
||||||
|
|
||||||
|
</menu>
|
||||||
Reference in New Issue
Block a user