mirror of
https://github.com/gedoor/legado.git
synced 2025-08-10 00:52:30 +00:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
4
app/proguard-rules.pro
vendored
4
app/proguard-rules.pro
vendored
@@ -232,10 +232,12 @@
|
||||
public static ** valueOf(java.lang.String);
|
||||
}
|
||||
|
||||
## 保证该私有变量不被混淆
|
||||
## ExoPlayer 反射设置ua 保证该私有变量不被混淆
|
||||
-keepclassmembers class com.google.android.exoplayer2.upstream.cache.CacheDataSource$Factory {
|
||||
*** upstreamDataSourceFactory;
|
||||
}
|
||||
## ExoPlayer 如果还不能播放就取消注释这个
|
||||
# -keep class com.google.android.exoplayer2.** {*;}
|
||||
|
||||
## 对外提供api
|
||||
-keep class io.legado.app.api.ReturnData{*;}
|
||||
|
||||
@@ -66,42 +66,65 @@ private val localUriCache by lazy {
|
||||
}
|
||||
|
||||
fun Book.getLocalUri(): Uri {
|
||||
if (isLocal) {
|
||||
var uri = localUriCache[bookUrl]
|
||||
if (uri != null) {
|
||||
return uri
|
||||
}
|
||||
uri = if (bookUrl.isUri()) {
|
||||
Uri.parse(bookUrl)
|
||||
} else {
|
||||
Uri.fromFile(File(bookUrl))
|
||||
}
|
||||
//先检测uri是否有效,这个比较快
|
||||
uri.inputStream(appCtx).getOrNull()?.use {
|
||||
localUriCache[bookUrl] = uri
|
||||
}?.let {
|
||||
return uri
|
||||
}
|
||||
//不同的设备书籍保存路径可能不一样, uri无效时尝试寻找当前保存路径下的文件
|
||||
val defaultBookDir = AppConfig.defaultBookTreeUri
|
||||
if (defaultBookDir.isNullOrBlank()) {
|
||||
localUriCache[bookUrl] = uri
|
||||
return uri
|
||||
}
|
||||
if (!isLocal) {
|
||||
throw NoStackTraceException("不是本地书籍")
|
||||
}
|
||||
var uri = localUriCache[bookUrl]
|
||||
if (uri != null) {
|
||||
return uri
|
||||
}
|
||||
uri = if (bookUrl.isUri()) {
|
||||
Uri.parse(bookUrl)
|
||||
} else {
|
||||
Uri.fromFile(File(bookUrl))
|
||||
}
|
||||
//先检测uri是否有效,这个比较快
|
||||
uri.inputStream(appCtx).getOrNull()?.use {
|
||||
localUriCache[bookUrl] = uri
|
||||
}?.let {
|
||||
return uri
|
||||
}
|
||||
//不同的设备书籍保存路径可能不一样, uri无效时尝试寻找当前保存路径下的文件
|
||||
val defaultBookDir = AppConfig.defaultBookTreeUri
|
||||
val importBookDir = AppConfig.importBookPath
|
||||
|
||||
// 查找书籍保存目录
|
||||
if (!defaultBookDir.isNullOrBlank()) {
|
||||
val treeUri = Uri.parse(defaultBookDir)
|
||||
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) {
|
||||
localUriCache[bookUrl] = fileDoc.uri
|
||||
//更新bookUrl 重启不用再找一遍
|
||||
bookUrl = fileDoc.toString()
|
||||
save()
|
||||
return fileDoc.uri
|
||||
}
|
||||
localUriCache[bookUrl] = uri
|
||||
return uri
|
||||
}
|
||||
throw NoStackTraceException("不是本地书籍")
|
||||
|
||||
localUriCache[bookUrl] = uri
|
||||
return uri
|
||||
}
|
||||
|
||||
fun Book.cacheLocalUri(uri: Uri) {
|
||||
|
||||
@@ -135,6 +135,7 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
}
|
||||
}
|
||||
|
||||
// 书籍保存位置
|
||||
var defaultBookTreeUri: String?
|
||||
get() = appCtx.getPrefString(PreferKey.defaultBookTreeUri)
|
||||
set(value) {
|
||||
@@ -166,6 +167,7 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
appCtx.putPrefInt(PreferKey.threadCount, value)
|
||||
}
|
||||
|
||||
// 添加本地选择的目录
|
||||
var importBookPath: String?
|
||||
get() = appCtx.getPrefString("importBookPath")
|
||||
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() 非常的慢,尽量不要使用
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user