This commit is contained in:
Xwite
2023-03-17 12:57:17 +08:00
parent eeca8b22f2
commit 78bf12dc65
5 changed files with 28 additions and 11 deletions
@@ -62,7 +62,8 @@ val Book.archiveName: String?
get() { get() {
return if (isArchive) { return if (isArchive) {
// local_book::archive.rar // local_book::archive.rar
origin.substring(BookType.localTag.length + 2) // webDav::https://...../archive.rar
origin.substringAfter("::").substringAfterLast("/")
} else { } else {
null null
} }
@@ -213,6 +213,21 @@ object LocalBook {
} }
/* 批量导入 支持自动导入压缩包的支持书籍 */ /* 批量导入 支持自动导入压缩包的支持书籍 */
fun importFiles(uri: Uri): List<Book> {
val books = mutableListOf<Book>()
val fileDoc = FileDoc.fromUri(uri, false)
if (ArchiveUtils.isArchive(fileDoc.name)) {
books.addAll(
importArchiveFile(uri) {
it.matches(AppPattern.bookFileRegex)
}
)
} else {
books.add(importFile(uri))
}
return books
}
fun importFiles(uris: List<Uri>) { fun importFiles(uris: List<Uri>) {
var errorCount = 0 var errorCount = 0
uris.forEach { uri -> uris.forEach { uri ->
@@ -1,6 +1,7 @@
package io.legado.app.model.remote package io.legado.app.model.remote
import android.net.Uri import android.net.Uri
import io.legado.app.constant.AppPattern.archiveFileRegex
import io.legado.app.constant.AppPattern.bookFileRegex import io.legado.app.constant.AppPattern.bookFileRegex
import io.legado.app.constant.BookType import io.legado.app.constant.BookType
import io.legado.app.data.entities.Book import io.legado.app.data.entities.Book
@@ -39,7 +40,8 @@ class RemoteBookWebDav(
val remoteWebDavFileList: List<WebDavFile> = WebDav(path, authorization).listFiles() val remoteWebDavFileList: List<WebDavFile> = WebDav(path, authorization).listFiles()
//转化远程文件信息到本地对象 //转化远程文件信息到本地对象
remoteWebDavFileList.forEach { webDavFile -> remoteWebDavFileList.forEach { webDavFile ->
if (webDavFile.isDir || bookFileRegex.matches(webDavFile.displayName)) { if (webDavFile.isDir || bookFileRegex.matches(webDavFile.displayName) || archiveFileRegex.matches(webDavFile.displayName)
) {
//扩展名符合阅读的格式则认为是书籍 //扩展名符合阅读的格式则认为是书籍
remoteBooks.add(RemoteBook(webDavFile)) remoteBooks.add(RemoteBook(webDavFile))
} }
@@ -124,18 +124,17 @@ class RemoteBookViewModel(application: Application) : BaseViewModel(application)
fun addToBookshelf(remoteBooks: HashSet<RemoteBook>, finally: () -> Unit) { fun addToBookshelf(remoteBooks: HashSet<RemoteBook>, finally: () -> Unit) {
execute { execute {
remoteBooks.forEach { remoteBook ->
val bookWebDav = remoteBookWebDav val bookWebDav = remoteBookWebDav
?: throw NoStackTraceException("没有配置webDav") ?: throw NoStackTraceException("没有配置webDav")
val downloadBookPath = bookWebDav.downloadRemoteBook(remoteBook) remoteBooks.forEach { remoteBook ->
downloadBookPath.let { val downloadBookUri = bookWebDav.downloadRemoteBook(remoteBook)
val localBook = LocalBook.importFile(it) LocalBook.importFiles(downloadBookUri).forEach { book ->
localBook.origin = BookType.webDavTag + CustomUrl(remoteBook.path) book.origin = BookType.webDavTag + CustomUrl(remoteBook.path)
.putAttribute( .putAttribute(
"serverID", "serverID",
bookWebDav.serverID bookWebDav.serverID
).toString() ).toString()
localBook.save() book.save()
remoteBook.isOnBookShelf = true remoteBook.isOnBookShelf = true
} }
} }
@@ -82,7 +82,7 @@ object UrlUtil {
val headersString = buildString { val headersString = buildString {
headers.forEach { (key, value) -> headers.forEach { (key, value) ->
value.forEach { value.forEach {
append(key ?: "HEAD ${url.toString}") append(key)
append(": ") append(": ")
append(it) append(it)
append("\n") append("\n")