|
@@ -1,13 +1,17 @@
|
|
|
package io.legado.app.help.book
|
|
package io.legado.app.help.book
|
|
|
|
|
|
|
|
import android.net.Uri
|
|
import android.net.Uri
|
|
|
|
|
+import androidx.documentfile.provider.DocumentFile
|
|
|
import io.legado.app.constant.BookSourceType
|
|
import io.legado.app.constant.BookSourceType
|
|
|
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
|
|
|
import io.legado.app.data.entities.BookSource
|
|
import io.legado.app.data.entities.BookSource
|
|
|
|
|
+import io.legado.app.help.config.AppConfig.defaultBookTreeUri
|
|
|
import io.legado.app.exception.NoStackTraceException
|
|
import io.legado.app.exception.NoStackTraceException
|
|
|
import io.legado.app.utils.isContentScheme
|
|
import io.legado.app.utils.isContentScheme
|
|
|
|
|
+import io.legado.app.utils.getFile
|
|
|
import java.io.File
|
|
import java.io.File
|
|
|
|
|
+import splitties.init.appCtx
|
|
|
|
|
|
|
|
|
|
|
|
|
val Book.isAudio: Boolean
|
|
val Book.isAudio: Boolean
|
|
@@ -50,10 +54,25 @@ val Book.isOnLineTxt: Boolean
|
|
|
|
|
|
|
|
fun Book.getLocalUri(): Uri {
|
|
fun Book.getLocalUri(): Uri {
|
|
|
if (isLocal) {
|
|
if (isLocal) {
|
|
|
- if (bookUrl.isContentScheme()) {
|
|
|
|
|
- return Uri.parse(bookUrl)
|
|
|
|
|
|
|
+ val originBookUri = if (bookUrl.isContentScheme()) {
|
|
|
|
|
+ Uri.parse(bookUrl)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ Uri.fromFile(File(bookUrl))
|
|
|
|
|
+ }
|
|
|
|
|
+ //不同的设备书籍保存路径可能不一样 优先尝试寻找当前保存路径下的文件
|
|
|
|
|
+ defaultBookTreeUri ?: return originBookUri
|
|
|
|
|
+ val treeUri = Uri.parse(defaultBookTreeUri)
|
|
|
|
|
+ return if (treeUri.isContentScheme()) {
|
|
|
|
|
+ DocumentFile.fromTreeUri(appCtx, treeUri)?.run {
|
|
|
|
|
+ findFile(originName)?.let {
|
|
|
|
|
+ if (it.exists()) it.uri else originBookUri
|
|
|
|
|
+ } ?: originBookUri
|
|
|
|
|
+ } ?: originBookUri
|
|
|
|
|
+ } else {
|
|
|
|
|
+ val treeFile = File(treeUri.path!!)
|
|
|
|
|
+ val file = treeFile.getFile(originName)
|
|
|
|
|
+ if (file.exists()) Uri.fromFile(file) else originBookUri
|
|
|
}
|
|
}
|
|
|
- return Uri.fromFile(File(bookUrl))
|
|
|
|
|
}
|
|
}
|
|
|
throw NoStackTraceException("不是本地书籍")
|
|
throw NoStackTraceException("不是本地书籍")
|
|
|
}
|
|
}
|