|  |  |  | @ -9,6 +9,8 @@ import androidx.room.PrimaryKey | 
			
		
	
		
			
				
					|  |  |  |  | import com.jayway.jsonpath.DocumentContext | 
			
		
	
		
			
				
					|  |  |  |  | import io.legado.app.constant.AppPattern | 
			
		
	
		
			
				
					|  |  |  |  | import io.legado.app.utils.* | 
			
		
	
		
			
				
					|  |  |  |  | import kotlinx.coroutines.Dispatchers.IO | 
			
		
	
		
			
				
					|  |  |  |  | import kotlinx.coroutines.withContext | 
			
		
	
		
			
				
					|  |  |  |  | import kotlinx.parcelize.Parcelize | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | @Parcelize | 
			
		
	
	
		
			
				
					|  |  |  | @ -133,32 +135,41 @@ data class RssSource( | 
			
		
	
		
			
				
					|  |  |  |  |         return this | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     fun sortUrls(): List<Pair<String, String>> = arrayListOf<Pair<String, String>>().apply { | 
			
		
	
		
			
				
					|  |  |  |  |         kotlin.runCatching { | 
			
		
	
		
			
				
					|  |  |  |  |             var a = sortUrl | 
			
		
	
		
			
				
					|  |  |  |  |             if (sortUrl?.startsWith("<js>", false) == true | 
			
		
	
		
			
				
					|  |  |  |  |                 || sortUrl?.startsWith("@js:", false) == true | 
			
		
	
		
			
				
					|  |  |  |  |             ) { | 
			
		
	
		
			
				
					|  |  |  |  |                 val aCache = ACache.get("rssSortUrl") | 
			
		
	
		
			
				
					|  |  |  |  |                 a = aCache.getAsString(sourceUrl) ?: "" | 
			
		
	
		
			
				
					|  |  |  |  |                 if (a.isBlank()) { | 
			
		
	
		
			
				
					|  |  |  |  |                     val jsStr = if (sortUrl!!.startsWith("@")) { | 
			
		
	
		
			
				
					|  |  |  |  |                         sortUrl!!.substring(4) | 
			
		
	
		
			
				
					|  |  |  |  |                     } else { | 
			
		
	
		
			
				
					|  |  |  |  |                         sortUrl!!.substring(4, sortUrl!!.lastIndexOf("<")) | 
			
		
	
		
			
				
					|  |  |  |  |     suspend fun sortUrls(): List<Pair<String, String>> = arrayListOf<Pair<String, String>>().apply { | 
			
		
	
		
			
				
					|  |  |  |  |         withContext(IO) { | 
			
		
	
		
			
				
					|  |  |  |  |             kotlin.runCatching { | 
			
		
	
		
			
				
					|  |  |  |  |                 var a = sortUrl | 
			
		
	
		
			
				
					|  |  |  |  |                 if (sortUrl?.startsWith("<js>", false) == true | 
			
		
	
		
			
				
					|  |  |  |  |                     || sortUrl?.startsWith("@js:", false) == true | 
			
		
	
		
			
				
					|  |  |  |  |                 ) { | 
			
		
	
		
			
				
					|  |  |  |  |                     val aCache = ACache.get("rssSortUrl") | 
			
		
	
		
			
				
					|  |  |  |  |                     a = aCache.getAsString(sourceUrl) ?: "" | 
			
		
	
		
			
				
					|  |  |  |  |                     if (a.isBlank()) { | 
			
		
	
		
			
				
					|  |  |  |  |                         val jsStr = if (sortUrl!!.startsWith("@")) { | 
			
		
	
		
			
				
					|  |  |  |  |                             sortUrl!!.substring(4) | 
			
		
	
		
			
				
					|  |  |  |  |                         } else { | 
			
		
	
		
			
				
					|  |  |  |  |                             sortUrl!!.substring(4, sortUrl!!.lastIndexOf("<")) | 
			
		
	
		
			
				
					|  |  |  |  |                         } | 
			
		
	
		
			
				
					|  |  |  |  |                         a = evalJS(jsStr).toString() | 
			
		
	
		
			
				
					|  |  |  |  |                         aCache.put(sourceUrl, a) | 
			
		
	
		
			
				
					|  |  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |  |                     a = evalJS(jsStr).toString() | 
			
		
	
		
			
				
					|  |  |  |  |                     aCache.put(sourceUrl, a) | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |                 a?.split("(&&|\n)+".toRegex())?.forEach { c -> | 
			
		
	
		
			
				
					|  |  |  |  |                     val d = c.split("::") | 
			
		
	
		
			
				
					|  |  |  |  |                     if (d.size > 1) | 
			
		
	
		
			
				
					|  |  |  |  |                         add(Pair(d[0], d[1])) | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |                 if (isEmpty()) { | 
			
		
	
		
			
				
					|  |  |  |  |                     add(Pair("", sourceUrl)) | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |             a?.split("(&&|\n)+".toRegex())?.forEach { c -> | 
			
		
	
		
			
				
					|  |  |  |  |                 val d = c.split("::") | 
			
		
	
		
			
				
					|  |  |  |  |                 if (d.size > 1) | 
			
		
	
		
			
				
					|  |  |  |  |                     add(Pair(d[0], d[1])) | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |             if (isEmpty()) { | 
			
		
	
		
			
				
					|  |  |  |  |                 add(Pair("", sourceUrl)) | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     suspend fun removeSortCache() { | 
			
		
	
		
			
				
					|  |  |  |  |         withContext(IO) { | 
			
		
	
		
			
				
					|  |  |  |  |             val aCache = ACache.get("rssSortUrl") | 
			
		
	
		
			
				
					|  |  |  |  |             aCache.remove(sourceUrl) | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | 
 |