Merge remote-tracking branch 'origin/master'

This commit is contained in:
kunfei
2022-10-17 16:52:32 +08:00
4 changed files with 63 additions and 28 deletions
+3 -1
View File
@@ -232,10 +232,12 @@
public static ** valueOf(java.lang.String); public static ** valueOf(java.lang.String);
} }
## 保证该私有变量不被混淆 ## ExoPlayer 反射设置ua 保证该私有变量不被混淆
-keepclassmembers class com.google.android.exoplayer2.upstream.cache.CacheDataSource$Factory { -keepclassmembers class com.google.android.exoplayer2.upstream.cache.CacheDataSource$Factory {
*** upstreamDataSourceFactory; *** upstreamDataSourceFactory;
} }
## ExoPlayer 如果还不能播放就取消注释这个
# -keep class com.google.android.exoplayer2.** {*;}
## 对外提供api ## 对外提供api
-keep class io.legado.app.api.ReturnData{*;} -keep class io.legado.app.api.ReturnData{*;}
@@ -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() && defaultBookDir != importBookDir) {
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() 非常的慢,尽量不要使用
*/ */