mirror of
https://github.com/gedoor/legado.git
synced 2025-08-10 00:52:30 +00:00
优化
This commit is contained in:
@@ -16,15 +16,15 @@ import io.legado.app.constant.AppConst.channelIdReadAloud
|
||||
import io.legado.app.constant.AppConst.channelIdWeb
|
||||
import io.legado.app.constant.PreferKey
|
||||
import io.legado.app.data.appDb
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.AppWebDav
|
||||
import io.legado.app.help.CrashHandler
|
||||
import io.legado.app.help.LifecycleHelp
|
||||
import io.legado.app.help.RuleBigDataHelp
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.help.config.ThemeConfig.applyDayNight
|
||||
import io.legado.app.help.coroutine.Coroutine
|
||||
import io.legado.app.help.http.cronet.CronetLoader
|
||||
import io.legado.app.help.webdav.AppWebDav
|
||||
import io.legado.app.model.BookCover
|
||||
import io.legado.app.utils.defaultSharedPreferences
|
||||
import io.legado.app.utils.getPrefBoolean
|
||||
|
||||
@@ -7,12 +7,12 @@ import io.legado.app.data.appDb
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.BookProgress
|
||||
import io.legado.app.data.entities.BookSource
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.AppWebDav
|
||||
import io.legado.app.help.CacheManager
|
||||
import io.legado.app.help.ContentProcessor
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.book.ContentProcessor
|
||||
import io.legado.app.help.glide.ImageLoader
|
||||
import io.legado.app.help.isLocal
|
||||
import io.legado.app.help.webdav.AppWebDav
|
||||
import io.legado.app.model.BookCover
|
||||
import io.legado.app.model.localBook.LocalBook
|
||||
import io.legado.app.model.webBook.WebBook
|
||||
|
||||
@@ -6,8 +6,8 @@ import io.legado.app.constant.AppPattern
|
||||
import io.legado.app.constant.BookType
|
||||
import io.legado.app.constant.PageAnim
|
||||
import io.legado.app.data.appDb
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.ContentProcessor
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.book.ContentProcessor
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.help.config.ReadBookConfig
|
||||
import io.legado.app.help.isEpub
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.legado.app.help.webdav
|
||||
package io.legado.app.help
|
||||
|
||||
import android.content.Context
|
||||
import io.legado.app.R
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.legado.app.help
|
||||
package io.legado.app.help.book
|
||||
|
||||
import android.net.Uri
|
||||
import androidx.documentfile.provider.DocumentFile
|
||||
@@ -9,6 +9,9 @@ import io.legado.app.data.appDb
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.BookChapter
|
||||
import io.legado.app.data.entities.BookSource
|
||||
import io.legado.app.help.isEpub
|
||||
import io.legado.app.help.isLocal
|
||||
import io.legado.app.help.isLocalTxt
|
||||
import io.legado.app.model.analyzeRule.AnalyzeUrl
|
||||
import io.legado.app.model.localBook.LocalBook
|
||||
import io.legado.app.utils.*
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.legado.app.help
|
||||
package io.legado.app.help.book
|
||||
|
||||
import java.util.regex.Pattern
|
||||
import kotlin.math.max
|
||||
@@ -478,7 +478,7 @@ object ContentHelp {
|
||||
val patten = Pattern.compile(
|
||||
"""
|
||||
(?<=["'”“])([^
|
||||
\p{P}]{1,${WORD_MAX_LENGTH}})(?=["'”“])
|
||||
\p{P}]{1,$WORD_MAX_LENGTH})(?=["'”“])
|
||||
""".trimIndent()
|
||||
)
|
||||
//Pattern patten = Pattern.compile("(?<=[\"'”“])([^\n\"'”“]{1,16})(?=[\"'”“])");
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.legado.app.help
|
||||
package io.legado.app.help.book
|
||||
|
||||
import com.github.liuyueyi.quick.transfer.ChineseUtils
|
||||
import io.legado.app.constant.AppLog
|
||||
@@ -6,12 +6,12 @@ import androidx.documentfile.provider.DocumentFile
|
||||
import io.legado.app.constant.AppLog
|
||||
import io.legado.app.constant.PreferKey
|
||||
import io.legado.app.data.appDb
|
||||
import io.legado.app.help.AppWebDav
|
||||
import io.legado.app.help.DirectLinkUpload
|
||||
import io.legado.app.help.config.LocalConfig
|
||||
import io.legado.app.help.config.ReadBookConfig
|
||||
import io.legado.app.help.config.ThemeConfig
|
||||
import io.legado.app.help.coroutine.Coroutine
|
||||
import io.legado.app.help.webdav.AppWebDav
|
||||
import io.legado.app.utils.*
|
||||
import kotlinx.coroutines.Dispatchers.IO
|
||||
import kotlinx.coroutines.ensureActive
|
||||
|
||||
@@ -8,6 +8,8 @@ import io.legado.app.help.http.okHttpClient
|
||||
import io.legado.app.help.http.text
|
||||
import io.legado.app.utils.NetworkUtils
|
||||
import io.legado.app.utils.printOnDebug
|
||||
import kotlinx.coroutines.Dispatchers.IO
|
||||
import kotlinx.coroutines.withContext
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.MediaType.Companion.toMediaType
|
||||
import okhttp3.RequestBody.Companion.asRequestBody
|
||||
@@ -274,16 +276,18 @@ open class WebDav(val path: String, val authorization: Authorization) {
|
||||
contentType: String = "application/octet-stream"
|
||||
) {
|
||||
kotlin.runCatching {
|
||||
val file = File(localPath)
|
||||
if (!file.exists()) throw WebDavException("文件不存在")
|
||||
// 务必注意RequestBody不要嵌套,不然上传时内容可能会被追加多余的文件信息
|
||||
val fileBody = file.asRequestBody(contentType.toMediaType())
|
||||
val url = httpUrl ?: throw WebDavException("url不能为空")
|
||||
webDavClient.newCallResponse {
|
||||
url(url)
|
||||
put(fileBody)
|
||||
}.let {
|
||||
checkResult(it)
|
||||
withContext(IO) {
|
||||
val file = File(localPath)
|
||||
if (!file.exists()) throw WebDavException("文件不存在")
|
||||
// 务必注意RequestBody不要嵌套,不然上传时内容可能会被追加多余的文件信息
|
||||
val fileBody = file.asRequestBody(contentType.toMediaType())
|
||||
val url = httpUrl ?: throw WebDavException("url不能为空")
|
||||
webDavClient.newCallResponse {
|
||||
url(url)
|
||||
put(fileBody)
|
||||
}.let {
|
||||
checkResult(it)
|
||||
}
|
||||
}
|
||||
}.onFailure {
|
||||
AppLog.put("WebDav上传失败\n${it.localizedMessage}", it)
|
||||
@@ -295,13 +299,15 @@ open class WebDav(val path: String, val authorization: Authorization) {
|
||||
suspend fun upload(byteArray: ByteArray, contentType: String) {
|
||||
// 务必注意RequestBody不要嵌套,不然上传时内容可能会被追加多余的文件信息
|
||||
kotlin.runCatching {
|
||||
val fileBody = byteArray.toRequestBody(contentType.toMediaType())
|
||||
val url = httpUrl ?: throw NoStackTraceException("url不能为空")
|
||||
webDavClient.newCallResponse {
|
||||
url(url)
|
||||
put(fileBody)
|
||||
}.let {
|
||||
checkResult(it)
|
||||
withContext(IO) {
|
||||
val fileBody = byteArray.toRequestBody(contentType.toMediaType())
|
||||
val url = httpUrl ?: throw NoStackTraceException("url不能为空")
|
||||
webDavClient.newCallResponse {
|
||||
url(url)
|
||||
put(fileBody)
|
||||
}.let {
|
||||
checkResult(it)
|
||||
}
|
||||
}
|
||||
}.onFailure {
|
||||
AppLog.put("WebDav上传失败\n${it.localizedMessage}", it)
|
||||
|
||||
@@ -10,7 +10,7 @@ import io.legado.app.data.appDb
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.BookChapter
|
||||
import io.legado.app.data.entities.BookSource
|
||||
import io.legado.app.help.ContentProcessor
|
||||
import io.legado.app.help.book.ContentProcessor
|
||||
import io.legado.app.help.coroutine.Coroutine
|
||||
import io.legado.app.service.AudioPlayService
|
||||
import io.legado.app.utils.postEvent
|
||||
|
||||
@@ -9,7 +9,7 @@ import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.BookChapter
|
||||
import io.legado.app.data.entities.BookSource
|
||||
import io.legado.app.exception.ConcurrentException
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.isLocal
|
||||
import io.legado.app.model.webBook.WebBook
|
||||
import io.legado.app.service.CacheBookService
|
||||
|
||||
@@ -3,13 +3,13 @@ package io.legado.app.model
|
||||
import io.legado.app.constant.AppLog
|
||||
import io.legado.app.data.appDb
|
||||
import io.legado.app.data.entities.*
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.ContentProcessor
|
||||
import io.legado.app.help.AppWebDav
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.book.ContentProcessor
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.help.config.ReadBookConfig
|
||||
import io.legado.app.help.coroutine.Coroutine
|
||||
import io.legado.app.help.isLocal
|
||||
import io.legado.app.help.webdav.AppWebDav
|
||||
import io.legado.app.model.webBook.WebBook
|
||||
import io.legado.app.service.BaseReadAloudService
|
||||
import io.legado.app.ui.book.read.page.entities.TextChapter
|
||||
|
||||
@@ -6,7 +6,7 @@ import android.text.TextUtils
|
||||
import io.legado.app.constant.AppLog
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.BookChapter
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.utils.*
|
||||
import me.ag2s.epublib.domain.EpubBook
|
||||
import me.ag2s.epublib.domain.Resource
|
||||
|
||||
@@ -14,11 +14,11 @@ import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.BookChapter
|
||||
import io.legado.app.exception.NoStackTraceException
|
||||
import io.legado.app.exception.TocEmptyException
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.AppWebDav
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.help.isEpub
|
||||
import io.legado.app.help.isUmd
|
||||
import io.legado.app.help.webdav.AppWebDav
|
||||
import io.legado.app.lib.webdav.WebDav
|
||||
import io.legado.app.model.analyzeRule.AnalyzeUrl
|
||||
import io.legado.app.utils.*
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package io.legado.app.model.remote
|
||||
|
||||
import android.net.Uri
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.RemoteBook
|
||||
|
||||
abstract class RemoteBookManager {
|
||||
protected val remoteBookFolder: String = "books"
|
||||
|
||||
abstract suspend fun initRemoteContext()
|
||||
|
||||
/**
|
||||
* 获取书籍列表
|
||||
*/
|
||||
@Throws(Exception::class)
|
||||
abstract suspend fun getRemoteBookList(path: String): MutableList<RemoteBook>
|
||||
|
||||
/**
|
||||
* 上传书籍
|
||||
*/
|
||||
@Throws(Exception::class)
|
||||
abstract suspend fun upload(book: Book)
|
||||
|
||||
/**
|
||||
* 删除书籍
|
||||
*/
|
||||
@Throws(Exception::class)
|
||||
abstract suspend fun delete(remoteBookUrl: String)
|
||||
|
||||
/**
|
||||
* @return Uri:下载到本地的路径
|
||||
*/
|
||||
@Throws(Exception::class)
|
||||
abstract suspend fun getRemoteBook(remoteBook: RemoteBook): Uri
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.legado.app.help.webdav
|
||||
package io.legado.app.model.remote
|
||||
|
||||
import android.net.Uri
|
||||
import io.legado.app.constant.AppPattern.bookFileRegex
|
||||
@@ -6,10 +6,10 @@ import io.legado.app.constant.BookType
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.RemoteBook
|
||||
import io.legado.app.exception.NoStackTraceException
|
||||
import io.legado.app.help.AppWebDav
|
||||
import io.legado.app.lib.webdav.WebDav
|
||||
import io.legado.app.lib.webdav.WebDavFile
|
||||
import io.legado.app.model.localBook.LocalBook
|
||||
import io.legado.app.ui.book.remote.RemoteBookManager
|
||||
import io.legado.app.utils.NetworkUtils
|
||||
import io.legado.app.utils.isContentScheme
|
||||
import io.legado.app.utils.readBytes
|
||||
@@ -32,9 +32,6 @@ object RemoteBookWebDav : RemoteBookManager() {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取远程书籍列表
|
||||
*/
|
||||
@Throws(Exception::class)
|
||||
override suspend fun getRemoteBookList(path: String): MutableList<RemoteBook> {
|
||||
val remoteBooks = mutableListOf<RemoteBook>()
|
||||
@@ -70,23 +67,17 @@ object RemoteBookWebDav : RemoteBookManager() {
|
||||
return remoteBooks
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载指定的远程书籍到本地
|
||||
*/
|
||||
override suspend fun getRemoteBook(remoteBook: RemoteBook): Uri? {
|
||||
override suspend fun getRemoteBook(remoteBook: RemoteBook): Uri {
|
||||
return AppWebDav.authorization?.let {
|
||||
val webdav = WebDav(remoteBook.path, it)
|
||||
webdav.downloadInputStream().let { inputStream ->
|
||||
LocalBook.saveBookFile(inputStream, remoteBook.filename)
|
||||
}
|
||||
}
|
||||
} ?: throw NoStackTraceException("webDav没有配置")
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传本地导入的书籍到远程
|
||||
*/
|
||||
override suspend fun upload(book: Book): Boolean {
|
||||
if (!NetworkUtils.isAvailable()) return false
|
||||
override suspend fun upload(book: Book) {
|
||||
if (!NetworkUtils.isAvailable()) throw NoStackTraceException("网络不可用")
|
||||
val localBookUri = Uri.parse(book.bookUrl)
|
||||
val putUrl = "$rootBookUrl${File.separator}${book.originName}"
|
||||
AppWebDav.authorization?.let {
|
||||
@@ -98,17 +89,15 @@ object RemoteBookWebDav : RemoteBookManager() {
|
||||
} else {
|
||||
WebDav(putUrl, it).upload(localBookUri.path!!)
|
||||
}
|
||||
}
|
||||
} ?: throw NoStackTraceException("webDav没有配置")
|
||||
book.origin = BookType.webDavTag + putUrl
|
||||
book.save()
|
||||
return true
|
||||
}
|
||||
|
||||
override suspend fun delete(remoteBookUrl: String): Boolean {
|
||||
override suspend fun delete(remoteBookUrl: String) {
|
||||
AppWebDav.authorization?.let {
|
||||
return WebDav(remoteBookUrl, it).delete()
|
||||
}
|
||||
return false
|
||||
WebDav(remoteBookUrl, it).delete()
|
||||
} ?: throw NoStackTraceException("webDav没有配置")
|
||||
}
|
||||
|
||||
}
|
||||
@@ -8,7 +8,7 @@ import io.legado.app.data.entities.BookSource
|
||||
import io.legado.app.data.entities.rule.TocRule
|
||||
import io.legado.app.exception.NoStackTraceException
|
||||
import io.legado.app.exception.TocEmptyException
|
||||
import io.legado.app.help.ContentProcessor
|
||||
import io.legado.app.help.book.ContentProcessor
|
||||
import io.legado.app.model.Debug
|
||||
import io.legado.app.model.analyzeRule.AnalyzeRule
|
||||
import io.legado.app.model.analyzeRule.AnalyzeUrl
|
||||
|
||||
@@ -8,7 +8,7 @@ import io.legado.app.data.entities.BookSource
|
||||
import io.legado.app.data.entities.rule.ContentRule
|
||||
import io.legado.app.exception.ContentEmptyException
|
||||
import io.legado.app.exception.NoStackTraceException
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.model.Debug
|
||||
import io.legado.app.model.analyzeRule.AnalyzeRule
|
||||
import io.legado.app.model.analyzeRule.AnalyzeUrl
|
||||
|
||||
@@ -6,7 +6,7 @@ import io.legado.app.constant.BookType
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.BookSource
|
||||
import io.legado.app.exception.NoStackTraceException
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.model.Debug
|
||||
import io.legado.app.model.analyzeRule.AnalyzeRule
|
||||
import io.legado.app.utils.DebugLog
|
||||
|
||||
@@ -6,7 +6,7 @@ import io.legado.app.data.entities.BookSource
|
||||
import io.legado.app.data.entities.SearchBook
|
||||
import io.legado.app.data.entities.rule.BookListRule
|
||||
import io.legado.app.exception.NoStackTraceException
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.getBookType
|
||||
import io.legado.app.model.Debug
|
||||
import io.legado.app.model.analyzeRule.AnalyzeRule
|
||||
|
||||
@@ -10,7 +10,7 @@ import io.legado.app.constant.AppPattern
|
||||
import io.legado.app.data.appDb
|
||||
import io.legado.app.data.entities.BookSource
|
||||
import io.legado.app.exception.NoStackTraceException
|
||||
import io.legado.app.help.ContentProcessor
|
||||
import io.legado.app.help.book.ContentProcessor
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.help.http.newCallResponseBody
|
||||
import io.legado.app.help.http.okHttpClient
|
||||
|
||||
@@ -18,7 +18,7 @@ import io.legado.app.data.entities.BookChapter
|
||||
import io.legado.app.data.entities.BookGroup
|
||||
import io.legado.app.databinding.ActivityCacheBookBinding
|
||||
import io.legado.app.databinding.DialogEditTextBinding
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.help.isAudio
|
||||
import io.legado.app.lib.dialogs.SelectItem
|
||||
|
||||
@@ -18,11 +18,11 @@ import io.legado.app.data.appDb
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.BookChapter
|
||||
import io.legado.app.exception.NoStackTraceException
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.ContentProcessor
|
||||
import io.legado.app.help.AppWebDav
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.book.ContentProcessor
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.help.coroutine.OrderCoroutine
|
||||
import io.legado.app.help.webdav.AppWebDav
|
||||
import io.legado.app.utils.*
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.ensureActive
|
||||
|
||||
@@ -21,7 +21,7 @@ import io.legado.app.data.entities.BookChapter
|
||||
import io.legado.app.data.entities.BookSource
|
||||
import io.legado.app.data.entities.SearchBook
|
||||
import io.legado.app.databinding.DialogChapterChangeSourceBinding
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.lib.dialogs.alert
|
||||
import io.legado.app.lib.theme.elevation
|
||||
|
||||
@@ -23,12 +23,12 @@ import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.help.isAudio
|
||||
import io.legado.app.help.isLocal
|
||||
import io.legado.app.help.isLocalTxt
|
||||
import io.legado.app.help.webdav.RemoteBookWebDav
|
||||
import io.legado.app.lib.dialogs.alert
|
||||
import io.legado.app.lib.theme.backgroundColor
|
||||
import io.legado.app.lib.theme.bottomBackground
|
||||
import io.legado.app.lib.theme.getPrimaryTextColor
|
||||
import io.legado.app.model.BookCover
|
||||
import io.legado.app.model.remote.RemoteBookWebDav
|
||||
import io.legado.app.ui.about.AppLogDialog
|
||||
import io.legado.app.ui.association.ImportOnLineBookFileDialog
|
||||
import io.legado.app.ui.book.audio.AudioPlayActivity
|
||||
@@ -213,11 +213,7 @@ class BookInfoActivity :
|
||||
waitDialog.setText("上传中.....")
|
||||
waitDialog.show()
|
||||
try {
|
||||
val isUpload = RemoteBookWebDav.upload(it)
|
||||
if (isUpload)
|
||||
toastOnUi(getString(R.string.upload_book_success))
|
||||
else
|
||||
toastOnUi(getString(R.string.upload_book_fail))
|
||||
RemoteBookWebDav.upload(it)
|
||||
} catch (e: Exception) {
|
||||
toastOnUi(e.localizedMessage)
|
||||
} finally {
|
||||
|
||||
@@ -14,7 +14,7 @@ import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.BookChapter
|
||||
import io.legado.app.data.entities.BookSource
|
||||
import io.legado.app.exception.NoStackTraceException
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.coroutine.Coroutine
|
||||
import io.legado.app.help.isLocal
|
||||
import io.legado.app.model.BookCover
|
||||
|
||||
@@ -12,8 +12,8 @@ import io.legado.app.data.appDb
|
||||
import io.legado.app.data.entities.BookChapter
|
||||
import io.legado.app.databinding.DialogContentEditBinding
|
||||
import io.legado.app.databinding.DialogEditTextBinding
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.ContentProcessor
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.book.ContentProcessor
|
||||
import io.legado.app.help.isLocal
|
||||
import io.legado.app.lib.dialogs.alert
|
||||
import io.legado.app.lib.theme.primaryColor
|
||||
|
||||
@@ -23,12 +23,12 @@ import io.legado.app.data.entities.BookProgress
|
||||
import io.legado.app.data.entities.BookSource
|
||||
import io.legado.app.exception.NoStackTraceException
|
||||
import io.legado.app.help.*
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.help.config.ReadBookConfig
|
||||
import io.legado.app.help.config.ReadTipConfig
|
||||
import io.legado.app.help.coroutine.Coroutine
|
||||
import io.legado.app.help.storage.Backup
|
||||
import io.legado.app.help.webdav.AppWebDav
|
||||
import io.legado.app.lib.dialogs.SelectItem
|
||||
import io.legado.app.lib.dialogs.alert
|
||||
import io.legado.app.lib.dialogs.selector
|
||||
|
||||
@@ -15,12 +15,12 @@ import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.BookChapter
|
||||
import io.legado.app.data.entities.BookProgress
|
||||
import io.legado.app.exception.NoStackTraceException
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.ContentProcessor
|
||||
import io.legado.app.help.AppWebDav
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.book.ContentProcessor
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.help.coroutine.Coroutine
|
||||
import io.legado.app.help.isLocal
|
||||
import io.legado.app.help.webdav.AppWebDav
|
||||
import io.legado.app.model.ReadAloud
|
||||
import io.legado.app.model.ReadBook
|
||||
import io.legado.app.model.analyzeRule.AnalyzeRule
|
||||
|
||||
@@ -10,7 +10,7 @@ import io.legado.app.constant.PageAnim
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.BookSource
|
||||
import io.legado.app.exception.NoStackTraceException
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.help.coroutine.Coroutine
|
||||
import io.legado.app.help.isEpub
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
package io.legado.app.ui.book.remote
|
||||
|
||||
import android.net.Uri
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.RemoteBook
|
||||
|
||||
abstract class RemoteBookManager {
|
||||
protected val remoteBookFolder : String = "books"
|
||||
abstract suspend fun initRemoteContext()
|
||||
abstract suspend fun getRemoteBookList(path: String): MutableList<RemoteBook>
|
||||
abstract suspend fun upload(book: Book): Boolean
|
||||
abstract suspend fun delete(remoteBookUrl: String): Boolean
|
||||
|
||||
/**
|
||||
* @return String:下载到本地的路径
|
||||
*/
|
||||
abstract suspend fun getRemoteBook(remoteBook: RemoteBook): Uri?
|
||||
}
|
||||
@@ -5,8 +5,8 @@ import io.legado.app.base.BaseViewModel
|
||||
import io.legado.app.constant.AppLog
|
||||
import io.legado.app.constant.BookType
|
||||
import io.legado.app.data.entities.RemoteBook
|
||||
import io.legado.app.help.webdav.RemoteBookWebDav
|
||||
import io.legado.app.model.localBook.LocalBook
|
||||
import io.legado.app.model.remote.RemoteBookWebDav
|
||||
import io.legado.app.utils.toastOnUi
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.channels.awaitClose
|
||||
@@ -96,7 +96,7 @@ class RemoteBookViewModel(application: Application) : BaseViewModel(application)
|
||||
execute {
|
||||
remoteBooks.forEach { remoteBook ->
|
||||
val downloadBookPath = RemoteBookWebDav.getRemoteBook(remoteBook)
|
||||
downloadBookPath?.let {
|
||||
downloadBookPath.let {
|
||||
val localBook = LocalBook.importFile(it)
|
||||
localBook.origin = BookType.webDavTag + remoteBook.path
|
||||
localBook.save()
|
||||
|
||||
@@ -13,8 +13,8 @@ import io.legado.app.data.appDb
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.BookChapter
|
||||
import io.legado.app.databinding.ActivitySearchContentBinding
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.IntentData
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.isLocal
|
||||
import io.legado.app.lib.theme.bottomBackground
|
||||
import io.legado.app.lib.theme.getPrimaryTextColor
|
||||
|
||||
@@ -7,8 +7,8 @@ import io.legado.app.base.BaseViewModel
|
||||
import io.legado.app.data.appDb
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.BookChapter
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.ContentProcessor
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.book.ContentProcessor
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.ensureActive
|
||||
|
||||
@@ -9,7 +9,7 @@ import io.legado.app.base.adapter.ItemViewHolder
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.BookChapter
|
||||
import io.legado.app.databinding.ItemChapterListBinding
|
||||
import io.legado.app.help.ContentProcessor
|
||||
import io.legado.app.help.book.ContentProcessor
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.help.coroutine.Coroutine
|
||||
import io.legado.app.lib.theme.ThemeUtils
|
||||
|
||||
@@ -14,7 +14,7 @@ import io.legado.app.data.appDb
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.BookChapter
|
||||
import io.legado.app.databinding.FragmentChapterListBinding
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.isLocal
|
||||
import io.legado.app.lib.theme.bottomBackground
|
||||
import io.legado.app.lib.theme.getPrimaryTextColor
|
||||
|
||||
@@ -18,6 +18,7 @@ import androidx.preference.Preference
|
||||
import io.legado.app.R
|
||||
import io.legado.app.constant.AppLog
|
||||
import io.legado.app.constant.PreferKey
|
||||
import io.legado.app.help.AppWebDav
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.help.config.LocalConfig
|
||||
import io.legado.app.help.coroutine.Coroutine
|
||||
@@ -25,7 +26,6 @@ import io.legado.app.help.storage.Backup
|
||||
import io.legado.app.help.storage.BackupConfig
|
||||
import io.legado.app.help.storage.ImportOldData
|
||||
import io.legado.app.help.storage.Restore
|
||||
import io.legado.app.help.webdav.AppWebDav
|
||||
import io.legado.app.lib.dialogs.alert
|
||||
import io.legado.app.lib.permission.Permissions
|
||||
import io.legado.app.lib.permission.PermissionsCompat
|
||||
|
||||
@@ -3,8 +3,8 @@ package io.legado.app.ui.config
|
||||
import android.app.Application
|
||||
import io.legado.app.R
|
||||
import io.legado.app.base.BaseViewModel
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.webdav.AppWebDav
|
||||
import io.legado.app.help.AppWebDav
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.utils.FileUtils
|
||||
import io.legado.app.utils.toastOnUi
|
||||
|
||||
|
||||
@@ -21,12 +21,12 @@ import io.legado.app.constant.AppConst.appInfo
|
||||
import io.legado.app.constant.EventBus
|
||||
import io.legado.app.constant.PreferKey
|
||||
import io.legado.app.databinding.ActivityMainBinding
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.AppWebDav
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.help.config.LocalConfig
|
||||
import io.legado.app.help.coroutine.Coroutine
|
||||
import io.legado.app.help.storage.Backup
|
||||
import io.legado.app.help.webdav.AppWebDav
|
||||
import io.legado.app.lib.dialogs.alert
|
||||
import io.legado.app.lib.theme.elevation
|
||||
import io.legado.app.lib.theme.primaryColor
|
||||
|
||||
@@ -9,12 +9,12 @@ import io.legado.app.constant.EventBus
|
||||
import io.legado.app.data.appDb
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.BookSource
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.AppWebDav
|
||||
import io.legado.app.help.DefaultData
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.help.config.LocalConfig
|
||||
import io.legado.app.help.isLocal
|
||||
import io.legado.app.help.webdav.AppWebDav
|
||||
import io.legado.app.model.CacheBook
|
||||
import io.legado.app.model.analyzeRule.AnalyzeRule
|
||||
import io.legado.app.model.webBook.WebBook
|
||||
|
||||
@@ -19,8 +19,8 @@ import io.legado.app.data.appDb
|
||||
import io.legado.app.data.entities.ReplaceRule
|
||||
import io.legado.app.databinding.ActivityReplaceRuleBinding
|
||||
import io.legado.app.databinding.DialogEditTextBinding
|
||||
import io.legado.app.help.ContentProcessor
|
||||
import io.legado.app.help.DirectLinkUpload
|
||||
import io.legado.app.help.book.ContentProcessor
|
||||
import io.legado.app.help.coroutine.Coroutine
|
||||
import io.legado.app.lib.dialogs.alert
|
||||
import io.legado.app.lib.theme.primaryColor
|
||||
|
||||
@@ -7,7 +7,7 @@ import com.bumptech.glide.request.RequestOptions
|
||||
import io.legado.app.R
|
||||
import io.legado.app.base.BaseDialogFragment
|
||||
import io.legado.app.databinding.DialogPhotoViewBinding
|
||||
import io.legado.app.help.BookHelp
|
||||
import io.legado.app.help.book.BookHelp
|
||||
import io.legado.app.help.glide.ImageLoader
|
||||
import io.legado.app.help.glide.OkHttpModelLoader
|
||||
import io.legado.app.model.BookCover
|
||||
|
||||
Reference in New Issue
Block a user