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

This commit is contained in:
Xwite
2023-03-17 18:04:10 +08:00
parent 4eb8d1fc3a
commit 71bcf76273
2 changed files with 25 additions and 12 deletions
@@ -58,6 +58,14 @@ val Book.isUpError: Boolean
val Book.isArchive: Boolean val Book.isArchive: Boolean
get() = isType(BookType.archive) 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 { fun Book.contains(word: String?): Boolean {
if (word.isNullOrEmpty()) { if (word.isNullOrEmpty()) {
return true return true
@@ -132,13 +140,12 @@ fun Book.getLocalUri(): Uri {
return uri return uri
} }
fun Book.getArchiveUri(): Uri? { fun Book.getArchiveUri(): Uri? {
val defaultBookDir = AppConfig.defaultBookTreeUri val defaultBookDir = AppConfig.defaultBookTreeUri
return if (isArchive && !defaultBookDir.isNullOrBlank()) { return if (isArchive && !defaultBookDir.isNullOrBlank()) {
// local_book::archive.rar FileDoc.fromUri(Uri.parse(defaultBookDir), true)
// webDav::https://...../archive.rar .find(archiveName)?.uri
val archiveFileName = origin.substringAfter("::").substringAfterLast("/")
FileDoc.fromUri(Uri.parse(defaultBookDir), true).find(archiveFileName)?.uri
} else { } else {
null null
} }
@@ -399,16 +399,22 @@ object LocalBook {
AppWebDav.authorization?.let { WebDav(webDavUrl, it) } AppWebDav.authorization?.let { WebDav(webDavUrl, it) }
?: throw WebDavException("Unexpected defaultBookWebDav") ?: throw WebDavException("Unexpected defaultBookWebDav")
} }
val fileUri = runBlocking { val InputStream = runBlocking {
saveBookFile(webdav.downloadInputStream(), localBook.originName) webdav.downloadInputStream()
} }
if (localBook.isArchive) { InputStream.use {
importArchiveFile(fileUri, localBook.originName) { if (localBook.isArchive) {
it.contains(localBook.originName) // 压缩包
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) { } catch (e: Exception) {
e.printOnDebug() e.printOnDebug()