Procházet zdrojové kódy

Merge branch 'master' of https://github.com/celetor/legado

 Conflicts:
	.github/workflows/test.yml
celetor před 4 roky
rodič
revize
ceb6d8c326

+ 8 - 0
app/src/main/java/io/legado/app/help/CacheManager.kt

@@ -28,6 +28,10 @@ object CacheManager {
         }
     }
 
+    fun putString2File(key: String, value: String, saveTime: Int = 0) {
+        ACache.get(appCtx).put(key, value, saveTime)
+    }
+    
     fun get(key: String): String? {
         return appDb.cacheDao.get(key, System.currentTimeMillis())
     }
@@ -52,6 +56,10 @@ object CacheManager {
         return ACache.get(appCtx).getAsBinary(key)
     }
 
+    fun getString(key: String): String? {
+        return ACache.get(appCtx).getAsString(key)
+    }
+
     fun getQueryTTF(key: String): QueryTTF? {
         val cache = queryTTFMap[key] ?: return null
         if (cache.first == 0L || cache.first > System.currentTimeMillis()) {

+ 7 - 8
app/src/main/java/io/legado/app/help/JsExtensions.kt

@@ -138,15 +138,14 @@ interface JsExtensions {
      * @param saveTime 缓存时间,单位:秒
      * @return 返回缓存后的文件内容
      */
-    fun cacheFile(url: String, saveTime: Int = 0): String? {
-        val key = md5Encode16(url)
-	    val cache = ACache.get(appCtx).getAsString(key)
+    fun cacheFile(urlStr: String, saveTime: Int = 0): String? {
+        val key = md5Encode16(urlStr)
+	    val cache = CacheManager.getString(key)
 	    if(cache.isNullOrBlank()) {
-	        log("首次下载${url}...")
-	        val value = ajax(url) ?: ""
-	        if (saveTime == 0) {
-	            ACache.get(appCtx).put(key, value)
-	        } else ACache.get(appCtx).put(key, value, saveTime)
+	        log("首次下载 ${urlStr}")
+	        val value = ajax(urlStr) ?: return null
+	        CacheManager.putString2File(key, value, saveTime)
+	        return value
          }
          return cache
     }

+ 2 - 2
app/src/main/java/io/legado/app/ui/book/read/SearchMenu.kt

@@ -40,8 +40,8 @@ class SearchMenu @JvmOverloads constructor(
     private var onMenuOutEnd: (() -> Unit)? = null
 
     private val searchResultList: MutableList<SearchResult> = mutableListOf()
-    private var currentSearchResultIndex: Int = 0
-    private var lastSearchResultIndex: Int = 0
+    private var currentSearchResultIndex: Int = -1
+    private var lastSearchResultIndex: Int = -1
     private val hasSearchResult: Boolean
         get() = searchResultList.isNotEmpty()
     val selectedSearchResult: SearchResult?

+ 2 - 2
app/src/main/java/io/legado/app/utils/ACache.kt

@@ -109,7 +109,7 @@ class ACache private constructor(cacheDir: File, max_size: Long, max_count: Int)
      * @param saveTime 保存的时间,单位:秒
      */
     fun put(key: String, value: String, saveTime: Int) {
-        put(key, Utils.newStringWithDateInfo(saveTime, value))
+        if (saveTime == 0) put(key, value) else put(key, Utils.newStringWithDateInfo(saveTime, value))
     }
 
     /**
@@ -245,7 +245,7 @@ class ACache private constructor(cacheDir: File, max_size: Long, max_count: Int)
      * @param saveTime 保存的时间,单位:秒
      */
     fun put(key: String, value: ByteArray, saveTime: Int) {
-        put(key, Utils.newByteArrayWithDateInfo(saveTime, value))
+        if (saveTime == 0) put(key, value) else put(key, Utils.newByteArrayWithDateInfo(saveTime, value))
     }
 
     /**

+ 10 - 3
app/src/main/java/io/legado/app/utils/UTF8BOMFighter.kt

@@ -18,9 +18,9 @@ object UTF8BOMFighter {
 
     fun removeUTF8BOM(bytes: ByteArray): ByteArray {
         val containsBOM = (bytes.size > 3
-                && bytes[0] == UTF8_BOM_BYTES[0]
-                && bytes[1] == UTF8_BOM_BYTES[1]
-                && bytes[2] == UTF8_BOM_BYTES[2])
+            && bytes[0] == UTF8_BOM_BYTES[0]
+            && bytes[1] == UTF8_BOM_BYTES[1]
+            && bytes[2] == UTF8_BOM_BYTES[2])
         if (containsBOM) {
             val copy = ByteArray(bytes.size - 3)
             System.arraycopy(bytes, 3, copy, 0, bytes.size - 3)
@@ -28,4 +28,11 @@ object UTF8BOMFighter {
         }
         return bytes
     }
+
+    fun hasBom(bytes: ByteArray): Boolean {
+        return (bytes.size > 3
+            && bytes[0] == UTF8_BOM_BYTES[0]
+            && bytes[1] == UTF8_BOM_BYTES[1]
+            && bytes[2] == UTF8_BOM_BYTES[2])
+    }
 }