diff --git a/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt b/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt index a59b2db5d..3953dae5b 100644 --- a/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt +++ b/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt @@ -219,6 +219,8 @@ object LocalBook { fileName: String, source: BaseSource? = null, ): Uri { + AppConfig.defaultBookTreeUri + ?: throw NoStackTraceException("没有设置书籍保存位置!") val bytes = when { str.isAbsUrl() -> AnalyzeUrl(str, source = source).getByteArray() str.isDataUrl() -> Base64.decode(str.substringAfter("base64,"), Base64.DEFAULT) @@ -269,6 +271,26 @@ object LocalBook { } } + fun isOnBookShelf( + fileName: String + ): Boolean { + val defaultBookTreeUri = AppConfig.defaultBookTreeUri + if (defaultBookTreeUri.isNullOrBlank()) throw NoStackTraceException("没有设置书籍保存位置!") + val treeUri = Uri.parse(defaultBookTreeUri) + var bookUrl: String = "" + if (treeUri.isContentScheme()) { + val treeDoc = DocumentFile.fromTreeUri(appCtx, treeUri) + var doc = treeDoc!!.findFile(fileName) ?: return false + bookUrl = doc.uri.toString() + } else { + val treeFile = File(treeUri.path!!) + val file = treeFile.getFile(fileName) + if (!file.exists()) return false + bookUrl = file.absolutePath + } + return appDb.bookDao.getBook(bookUrl) != null + } + //文件类书源 合并在线书籍信息 在线 > 本地 fun mergeBook(localBook: Book, onLineBook: Book?): Book { onLineBook ?: return localBook diff --git a/app/src/main/java/io/legado/app/ui/book/remote/RemoteBook.kt b/app/src/main/java/io/legado/app/ui/book/remote/RemoteBook.kt index c04098421..b0a45c332 100644 --- a/app/src/main/java/io/legado/app/ui/book/remote/RemoteBook.kt +++ b/app/src/main/java/io/legado/app/ui/book/remote/RemoteBook.kt @@ -5,5 +5,6 @@ data class RemoteBook( val urlName: String, val size: Long, val contentType: String, - val lastModify: Long + val lastModify: Long, + val isOnBookShelf: Boolean ) \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/remote/RemoteBookManager.kt b/app/src/main/java/io/legado/app/ui/book/remote/RemoteBookManager.kt index 9fd1d1faf..84ce53428 100644 --- a/app/src/main/java/io/legado/app/ui/book/remote/RemoteBookManager.kt +++ b/app/src/main/java/io/legado/app/ui/book/remote/RemoteBookManager.kt @@ -2,11 +2,8 @@ package io.legado.app.ui.book.remote import android.net.Uri - - abstract class RemoteBookManager { protected val remoteBookFolder : String = "books" - protected val contentTypeList: ArrayList = arrayListOf("epub","txt") abstract suspend fun initRemoteContext() abstract suspend fun getRemoteBookList(): MutableList abstract suspend fun upload(localBookUri: Uri): Boolean diff --git a/app/src/main/java/io/legado/app/ui/book/remote/manager/RemoteBookWebDav.kt b/app/src/main/java/io/legado/app/ui/book/remote/manager/RemoteBookWebDav.kt index 995463f58..77a45ad31 100644 --- a/app/src/main/java/io/legado/app/ui/book/remote/manager/RemoteBookWebDav.kt +++ b/app/src/main/java/io/legado/app/ui/book/remote/manager/RemoteBookWebDav.kt @@ -3,6 +3,7 @@ package io.legado.app.ui.book.remote.manager import android.net.Uri import io.legado.app.constant.PreferKey +import io.legado.app.constant.AppPattern.bookFileRegex import io.legado.app.exception.NoStackTraceException import io.legado.app.help.AppWebDav import io.legado.app.help.config.AppConfig @@ -68,8 +69,14 @@ object RemoteBookWebDav : RemoteBookManager() { val fileExtension = webDavFileName.substringAfterLast(".") //扩展名符合阅读的格式则认为是书籍 - if (contentTypeList.contains(fileExtension)) { - remoteBooks.add(RemoteBook(webDavFileName,webDavUrlName,webDavFile.size,fileExtension,webDavFile.lastModify)) + if (bookFileRegex.matches(webDavFileName)) { + val isOnBookShelf = LocalBook.isOnBookShelf(webDavFileName) + remoteBooks.add( + RemoteBook( + webDavFileName, webDavUrlName, webDavFile.size, + fileExtension, webDavFile.lastModify, isOnBookShelf + ) + ) } } } ?: throw NoStackTraceException("webDav没有配置")