@@ -66,42 +66,65 @@ private val localUriCache by lazy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun Book.getLocalUri(): Uri {
|
fun Book.getLocalUri(): Uri {
|
||||||
if (isLocal) {
|
if (!isLocal) {
|
||||||
var uri = localUriCache[bookUrl]
|
throw NoStackTraceException("不是本地书籍")
|
||||||
if (uri != null) {
|
}
|
||||||
return uri
|
var uri = localUriCache[bookUrl]
|
||||||
}
|
if (uri != null) {
|
||||||
uri = if (bookUrl.isUri()) {
|
return uri
|
||||||
Uri.parse(bookUrl)
|
}
|
||||||
} else {
|
uri = if (bookUrl.isUri()) {
|
||||||
Uri.fromFile(File(bookUrl))
|
Uri.parse(bookUrl)
|
||||||
}
|
} else {
|
||||||
//先检测uri是否有效,这个比较快
|
Uri.fromFile(File(bookUrl))
|
||||||
uri.inputStream(appCtx).getOrNull()?.use {
|
}
|
||||||
localUriCache[bookUrl] = uri
|
//先检测uri是否有效,这个比较快
|
||||||
}?.let {
|
uri.inputStream(appCtx).getOrNull()?.use {
|
||||||
return uri
|
localUriCache[bookUrl] = uri
|
||||||
}
|
}?.let {
|
||||||
//不同的设备书籍保存路径可能不一样, uri无效时尝试寻找当前保存路径下的文件
|
return uri
|
||||||
val defaultBookDir = AppConfig.defaultBookTreeUri
|
}
|
||||||
if (defaultBookDir.isNullOrBlank()) {
|
//不同的设备书籍保存路径可能不一样, uri无效时尝试寻找当前保存路径下的文件
|
||||||
localUriCache[bookUrl] = uri
|
val defaultBookDir = AppConfig.defaultBookTreeUri
|
||||||
return uri
|
val importBookDir = AppConfig.importBookPath
|
||||||
}
|
|
||||||
|
// 查找书籍保存目录
|
||||||
|
if (!defaultBookDir.isNullOrBlank()) {
|
||||||
val treeUri = Uri.parse(defaultBookDir)
|
val treeUri = Uri.parse(defaultBookDir)
|
||||||
val treeFileDoc = FileDoc.fromUri(treeUri, true)
|
val treeFileDoc = FileDoc.fromUri(treeUri, true)
|
||||||
val fileDoc = treeFileDoc.find(originName, 3)
|
if (!treeFileDoc.exists()) {
|
||||||
|
appCtx.toastOnUi("书籍保存目录失效,请重新设置!")
|
||||||
|
} else {
|
||||||
|
val fileDoc = treeFileDoc.find(originName, 5)
|
||||||
|
if (fileDoc != null) {
|
||||||
|
localUriCache[bookUrl] = fileDoc.uri
|
||||||
|
//更新bookUrl 重启不用再找一遍
|
||||||
|
bookUrl = fileDoc.toString()
|
||||||
|
save()
|
||||||
|
return fileDoc.uri
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查找添加本地选择的目录
|
||||||
|
if (!importBookDir.isNullOrBlank()) {
|
||||||
|
val treeUri = if (importBookDir.isUri()) {
|
||||||
|
Uri.parse(importBookDir)
|
||||||
|
} else {
|
||||||
|
Uri.fromFile(File(importBookDir))
|
||||||
|
}
|
||||||
|
val treeFileDoc = FileDoc.fromUri(treeUri, true)
|
||||||
|
val fileDoc = treeFileDoc.find(originName, 5)
|
||||||
if (fileDoc != null) {
|
if (fileDoc != null) {
|
||||||
localUriCache[bookUrl] = fileDoc.uri
|
localUriCache[bookUrl] = fileDoc.uri
|
||||||
//更新bookUrl 重启不用再找一遍
|
|
||||||
bookUrl = fileDoc.toString()
|
bookUrl = fileDoc.toString()
|
||||||
save()
|
save()
|
||||||
return fileDoc.uri
|
return fileDoc.uri
|
||||||
}
|
}
|
||||||
localUriCache[bookUrl] = uri
|
|
||||||
return uri
|
|
||||||
}
|
}
|
||||||
throw NoStackTraceException("不是本地书籍")
|
|
||||||
|
localUriCache[bookUrl] = uri
|
||||||
|
return uri
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Book.cacheLocalUri(uri: Uri) {
|
fun Book.cacheLocalUri(uri: Uri) {
|
||||||
|
|||||||
@@ -135,6 +135,7 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 书籍保存位置
|
||||||
var defaultBookTreeUri: String?
|
var defaultBookTreeUri: String?
|
||||||
get() = appCtx.getPrefString(PreferKey.defaultBookTreeUri)
|
get() = appCtx.getPrefString(PreferKey.defaultBookTreeUri)
|
||||||
set(value) {
|
set(value) {
|
||||||
@@ -166,6 +167,7 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
|
|||||||
appCtx.putPrefInt(PreferKey.threadCount, value)
|
appCtx.putPrefInt(PreferKey.threadCount, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 添加本地选择的目录
|
||||||
var importBookPath: String?
|
var importBookPath: String?
|
||||||
get() = appCtx.getPrefString("importBookPath")
|
get() = appCtx.getPrefString("importBookPath")
|
||||||
set(value) {
|
set(value) {
|
||||||
|
|||||||
@@ -221,6 +221,14 @@ fun FileDoc.exists(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun FileDoc.exists(): Boolean {
|
||||||
|
return if (uri.isContentScheme()) {
|
||||||
|
DocumentFile.fromTreeUri(appCtx, uri)!!.exists()
|
||||||
|
} else {
|
||||||
|
FileUtils.exist(uri.path!!)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DocumentFile 的 listFiles() 非常的慢,尽量不要使用
|
* DocumentFile 的 listFiles() 非常的慢,尽量不要使用
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user