Просмотр исходного кода

压缩文件和远程文件自动恢复

Xwite 3 лет назад
Родитель
Сommit
71bcf76273

+ 11 - 4
app/src/main/java/io/legado/app/help/book/BookExtensions.kt

@@ -58,6 +58,14 @@ val Book.isUpError: Boolean
 val Book.isArchive: Boolean
     get() = isType(BookType.archive)
 
+val Book.archiveName: String
+    get() {
+        if (!isArchive) throw NoStackTraceException("Book is not deCompressed from archive")
+        // local_book::archive.rar
+        // webDav::https://...../archive.rar
+        return origin.substringAfter("::").substringAfterLast("/")
+    }
+
 fun Book.contains(word: String?): Boolean {
     if (word.isNullOrEmpty()) {
         return true
@@ -132,13 +140,12 @@ fun Book.getLocalUri(): Uri {
     return uri
 }
 
+
 fun Book.getArchiveUri(): Uri? {
     val defaultBookDir = AppConfig.defaultBookTreeUri
     return if (isArchive && !defaultBookDir.isNullOrBlank()) {
-        // local_book::archive.rar
-        // webDav::https://...../archive.rar
-        val archiveFileName = origin.substringAfter("::").substringAfterLast("/")
-        FileDoc.fromUri(Uri.parse(defaultBookDir), true).find(archiveFileName)?.uri
+        FileDoc.fromUri(Uri.parse(defaultBookDir), true)
+            .find(archiveName)?.uri
     } else {
         null
     }

+ 14 - 8
app/src/main/java/io/legado/app/model/localBook/LocalBook.kt

@@ -399,16 +399,22 @@ object LocalBook {
                 AppWebDav.authorization?.let { WebDav(webDavUrl, it) }
                     ?: throw WebDavException("Unexpected defaultBookWebDav")
             }
-            val fileUri = runBlocking {
-                saveBookFile(webdav.downloadInputStream(), localBook.originName)
+            val InputStream = runBlocking {
+                webdav.downloadInputStream()
             }
-            if (localBook.isArchive) {
-                importArchiveFile(fileUri, localBook.originName) {
-                    it.contains(localBook.originName)
+            InputStream.use {
+                if (localBook.isArchive) {
+                    // 压缩包
+                    val fileUri = saveBookFile(it, localBook.archiveName)
+                    importArchiveFile(fileUri, localBook.originName) {
+                        it.contains(localBook.originName)
+                    }
+                } else {
+                    // txt epub pdf umd
+                    val fileUri = saveBookFile(it, localBook.originName)
+                    localBook.bookUrl = FileDoc.fromUri(fileUri, false).toString()
+                    localBook.save()
                 }
-            } else {
-                localBook.bookUrl = FileDoc.fromUri(fileUr, false).toString()
-                localBook.save()
             }
         } catch (e: Exception) {
             e.printOnDebug()