From fc2b1cb1ff16825416745e638b6ad2b42f39d129 Mon Sep 17 00:00:00 2001 From: kunfei Date: Fri, 8 Apr 2022 09:47:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/constant/AppPattern.kt | 1 + .../main/java/io/legado/app/data/README.md | 1 + .../io/legado/app/data/entities/BookSource.kt | 32 ++++----- .../io/legado/app/data/entities/RssSource.kt | 24 +++---- .../main/java/io/legado/app/help/BookHelp.kt | 6 +- .../java/io/legado/app/help/RuleComplete.kt | 32 +++++---- .../help/exoplayer/OkhttpCacheDataSource.java | 2 +- .../io/legado/app/help/http/CookieStore.kt | 2 +- .../io/legado/app/help/http/HttpHelper.kt | 2 +- .../app/help/http/cronet/CronetLoader.kt | 5 +- .../io/legado/app/help/storage/AppWebDav.kt | 2 +- app/src/main/java/io/legado/app/lib/README.md | 1 + .../java/io/legado/app/model/CheckSource.kt | 7 +- .../main/java/io/legado/app/model/Debug.kt | 5 +- .../main/java/io/legado/app/model/README.md | 1 + .../main/java/io/legado/app/model/ReadBook.kt | 2 +- .../app/model/analyzeRule/AnalyzeRule.kt | 6 +- .../legado/app/service/CheckSourceService.kt | 2 +- .../app/service/HttpReadAloudService.kt | 2 +- .../main/java/io/legado/app/service/README.md | 1 + .../legado/app/ui/book/audio/ComposeView.kt | 3 +- .../app/ui/book/bookmark/BookmarkAdapter.kt | 2 +- .../app/ui/book/cache/CacheViewModel.kt | 2 +- .../ChangeChapterSourceAdapter.kt | 2 +- .../app/ui/book/read/BaseReadBookActivity.kt | 2 +- .../app/ui/book/read/ReadBookViewModel.kt | 2 +- .../app/ui/book/read/page/ContentTextView.kt | 2 +- .../read/page/provider/ChapterProvider.kt | 4 +- .../searchContent/SearchContentViewModel.kt | 15 ++-- .../app/ui/book/searchContent/SearchResult.kt | 9 +-- .../book/source/manage/BookSourceAdapter.kt | 8 +-- .../app/ui/book/toc/ChapterListAdapter.kt | 12 ++-- .../legado/app/ui/config/CheckSourceConfig.kt | 1 + .../io/legado/app/ui/dict/DictViewModel.kt | 4 +- .../main/bookshelf/style2/BaseBooksAdapter.kt | 70 +++++++++---------- .../ui/rss/source/manage/RssSourceAdapter.kt | 4 +- .../io/legado/app/ui/widget/BatteryView.kt | 2 +- .../main/java/io/legado/app/utils/ACache.kt | 8 ++- .../io/legado/app/utils/ContextExtensions.kt | 5 +- .../java/io/legado/app/utils/FileUtils.kt | 2 +- .../java/io/legado/app/utils/NetworkUtils.kt | 2 +- .../java/io/legado/app/utils/Utf8BomUtils.kt | 18 ++--- 42 files changed, 175 insertions(+), 140 deletions(-) diff --git a/app/src/main/java/io/legado/app/constant/AppPattern.kt b/app/src/main/java/io/legado/app/constant/AppPattern.kt index e98f6bbf5..731a7296a 100644 --- a/app/src/main/java/io/legado/app/constant/AppPattern.kt +++ b/app/src/main/java/io/legado/app/constant/AppPattern.kt @@ -10,6 +10,7 @@ object AppPattern { //匹配格式化后的图片格式 val imgPattern: Pattern = Pattern.compile("]*src=\"([^\"]*(?:\"[^>]+\\})?)\"[^>]*>") + //dataURL图片类型 val dataUriRegex = Regex("data:.*?;base64,(.*)") diff --git a/app/src/main/java/io/legado/app/data/README.md b/app/src/main/java/io/legado/app/data/README.md index a9354610f..68dc6840a 100644 --- a/app/src/main/java/io/legado/app/data/README.md +++ b/app/src/main/java/io/legado/app/data/README.md @@ -1,4 +1,5 @@ # 存储数据用 + * dao 数据操作 * entities 数据模型 * \Book 书籍信息 diff --git a/app/src/main/java/io/legado/app/data/entities/BookSource.kt b/app/src/main/java/io/legado/app/data/entities/BookSource.kt index fed30b16c..2d1d164c7 100644 --- a/app/src/main/java/io/legado/app/data/entities/BookSource.kt +++ b/app/src/main/java/io/legado/app/data/entities/BookSource.kt @@ -183,22 +183,22 @@ data class BookSource( fun equal(source: BookSource) = equal(bookSourceName, source.bookSourceName) - && equal(bookSourceUrl, source.bookSourceUrl) - && equal(bookSourceGroup, source.bookSourceGroup) - && bookSourceType == source.bookSourceType - && equal(bookUrlPattern, source.bookUrlPattern) - && equal(bookSourceComment, source.bookSourceComment) - && enabled == source.enabled - && enabledExplore == source.enabledExplore - && equal(header, source.header) - && loginUrl == source.loginUrl - && equal(exploreUrl, source.exploreUrl) - && equal(searchUrl, source.searchUrl) - && getSearchRule() == source.getSearchRule() - && getExploreRule() == source.getExploreRule() - && getBookInfoRule() == source.getBookInfoRule() - && getTocRule() == source.getTocRule() - && getContentRule() == source.getContentRule() + && equal(bookSourceUrl, source.bookSourceUrl) + && equal(bookSourceGroup, source.bookSourceGroup) + && bookSourceType == source.bookSourceType + && equal(bookUrlPattern, source.bookUrlPattern) + && equal(bookSourceComment, source.bookSourceComment) + && enabled == source.enabled + && enabledExplore == source.enabledExplore + && equal(header, source.header) + && loginUrl == source.loginUrl + && equal(exploreUrl, source.exploreUrl) + && equal(searchUrl, source.searchUrl) + && getSearchRule() == source.getSearchRule() + && getExploreRule() == source.getExploreRule() + && getBookInfoRule() == source.getBookInfoRule() + && getTocRule() == source.getTocRule() + && getContentRule() == source.getContentRule() private fun equal(a: String?, b: String?) = a == b || (a.isNullOrEmpty() && b.isNullOrEmpty()) diff --git a/app/src/main/java/io/legado/app/data/entities/RssSource.kt b/app/src/main/java/io/legado/app/data/entities/RssSource.kt index 32c5a2743..8c3e98d46 100644 --- a/app/src/main/java/io/legado/app/data/entities/RssSource.kt +++ b/app/src/main/java/io/legado/app/data/entities/RssSource.kt @@ -63,18 +63,18 @@ data class RssSource( fun equal(source: RssSource): Boolean { return equal(sourceUrl, source.sourceUrl) - && equal(sourceIcon, source.sourceIcon) - && enabled == source.enabled - && equal(sourceGroup, source.sourceGroup) - && equal(ruleArticles, source.ruleArticles) - && equal(ruleNextPage, source.ruleNextPage) - && equal(ruleTitle, source.ruleTitle) - && equal(rulePubDate, source.rulePubDate) - && equal(ruleDescription, source.ruleDescription) - && equal(ruleLink, source.ruleLink) - && equal(ruleContent, source.ruleContent) - && enableJs == source.enableJs - && loadWithBaseUrl == source.loadWithBaseUrl + && equal(sourceIcon, source.sourceIcon) + && enabled == source.enabled + && equal(sourceGroup, source.sourceGroup) + && equal(ruleArticles, source.ruleArticles) + && equal(ruleNextPage, source.ruleNextPage) + && equal(ruleTitle, source.ruleTitle) + && equal(rulePubDate, source.rulePubDate) + && equal(ruleDescription, source.ruleDescription) + && equal(ruleLink, source.ruleLink) + && equal(ruleContent, source.ruleContent) + && enableJs == source.enableJs + && loadWithBaseUrl == source.loadWithBaseUrl } private fun equal(a: String?, b: String?): Boolean { diff --git a/app/src/main/java/io/legado/app/help/BookHelp.kt b/app/src/main/java/io/legado/app/help/BookHelp.kt index e3728eeab..a77157db2 100644 --- a/app/src/main/java/io/legado/app/help/BookHelp.kt +++ b/app/src/main/java/io/legado/app/help/BookHelp.kt @@ -324,9 +324,9 @@ object BookHelp { val chapterName1 = StringUtils.fullToHalf(chapterName).replace(regexA, "") return StringUtils.stringToInt( ( - chapterNamePattern1.matcher(chapterName1).takeIf { it.find() } - ?: chapterNamePattern2.matcher(chapterName1).takeIf { it.find() } - )?.group(1) + chapterNamePattern1.matcher(chapterName1).takeIf { it.find() } + ?: chapterNamePattern2.matcher(chapterName1).takeIf { it.find() } + )?.group(1) ?: "-1" ) } diff --git a/app/src/main/java/io/legado/app/help/RuleComplete.kt b/app/src/main/java/io/legado/app/help/RuleComplete.kt index 41afc75ed..d37595e83 100644 --- a/app/src/main/java/io/legado/app/help/RuleComplete.kt +++ b/app/src/main/java/io/legado/app/help/RuleComplete.kt @@ -1,18 +1,21 @@ package io.legado.app.help +@Suppress("RegExpRedundantEscape") object RuleComplete { // 需要补全 - private val needComplete =Regex( - """(?\&{2}|%%|\|{2}|$)""") + private val needComplete = Regex( + """(?\&{2}|%%|\|{2}|$)""" + ) // 不能补全 存在js/json/{{xx}}的复杂情况 private val notComplete = Regex("""^:|^##|\{\{|@js:||@Json:|\$\.""") // 修正从图片获取信息 - private val fixImgInfo = Regex("""(?<=(^|tag\.|[\+/@>~| &]))img(?(\[@?.+\]|\.[-\w]+)?)[@/]+text(\(\))?(?\&{2}|%%|\|{2}|$)""") + private val fixImgInfo = + Regex("""(?<=(^|tag\.|[\+/@>~| &]))img(?(\[@?.+\]|\.[-\w]+)?)[@/]+text(\(\))?(?\&{2}|%%|\|{2}|$)""") - private val isXpath= Regex("^//|^@Xpath:") + private val isXpath = Regex("^//|^@Xpath:") /** * 对简单规则进行补全,简化部分书源规则的编写 @@ -31,33 +34,38 @@ object RuleComplete { preRule: String? = null, type: Int = 1 ): String? { - if (rules.isNullOrEmpty()||rules.contains(notComplete) || preRule?.contains(notComplete) ?: false){ + if (rules.isNullOrEmpty() || rules.contains(notComplete) || preRule?.contains(notComplete) == true) { return rules } /** 尾部##分割的正则或由,分割的参数 */ val tailStr: String + /** 分割字符 */ - val splitStr:String + val splitStr: String + /** 用于获取文字时添加的规则 */ val textRule: String + /** 用于获取链接时添加的规则 */ val linkRule: String + /** 用于获取图片时添加的规则 */ val imgRule: String + /** 用于获取图片alt属性时添加的规则 */ val imgText: String // 分离尾部规则 - val regexSplit=rules.split("""##|,\{""".toRegex(),2) - val cleanedRule=regexSplit[0] - if (regexSplit.size>1){ - splitStr="""##|,\{""".toRegex().find(rules)?.value ?: "" + val regexSplit = rules.split("""##|,\{""".toRegex(), 2) + val cleanedRule = regexSplit[0] + if (regexSplit.size > 1) { + splitStr = """##|,\{""".toRegex().find(rules)?.value ?: "" tailStr = splitStr + regexSplit[1] - }else{ + } else { tailStr = "" } - if (cleanedRule.contains(isXpath)){ + if (cleanedRule.contains(isXpath)) { textRule = "//text()\${seq}" linkRule = "//@href\${seq}" imgRule = "//@src\${seq}" diff --git a/app/src/main/java/io/legado/app/help/exoplayer/OkhttpCacheDataSource.java b/app/src/main/java/io/legado/app/help/exoplayer/OkhttpCacheDataSource.java index fadbdbea0..abf8e8c71 100644 --- a/app/src/main/java/io/legado/app/help/exoplayer/OkhttpCacheDataSource.java +++ b/app/src/main/java/io/legado/app/help/exoplayer/OkhttpCacheDataSource.java @@ -173,7 +173,7 @@ public final class OkhttpCacheDataSource implements DataSource { return this; } - public Factory setDefaultRequestProperties(Map defaultRequestProperties){ + public Factory setDefaultRequestProperties(Map defaultRequestProperties) { if (this.upstreamDataSourceFactory != null) { this.upstreamDataSourceFactory.setDefaultRequestProperties(defaultRequestProperties); } diff --git a/app/src/main/java/io/legado/app/help/http/CookieStore.kt b/app/src/main/java/io/legado/app/help/http/CookieStore.kt index f9fba9520..e9f9b4dc6 100644 --- a/app/src/main/java/io/legado/app/help/http/CookieStore.kt +++ b/app/src/main/java/io/legado/app/help/http/CookieStore.kt @@ -34,7 +34,7 @@ object CookieStore : CookieManager { val cookieBean = appDb.cookieDao.get(NetworkUtils.getSubDomain(url)) return cookieBean?.cookie ?: "" } - + fun getKey(url: String, key: String): String { val cookie = getCookie(url) val cookieMap = cookieToMap(cookie) diff --git a/app/src/main/java/io/legado/app/help/http/HttpHelper.kt b/app/src/main/java/io/legado/app/help/http/HttpHelper.kt index 83433c8c8..c4d8f1f1c 100644 --- a/app/src/main/java/io/legado/app/help/http/HttpHelper.kt +++ b/app/src/main/java/io/legado/app/help/http/HttpHelper.kt @@ -27,7 +27,7 @@ val okHttpClient: OkHttpClient by lazy { .connectTimeout(15, TimeUnit.SECONDS) .writeTimeout(15, TimeUnit.SECONDS) .readTimeout(15, TimeUnit.SECONDS) - .callTimeout(60,TimeUnit.SECONDS) + .callTimeout(60, TimeUnit.SECONDS) .sslSocketFactory(SSLHelper.unsafeSSLSocketFactory, SSLHelper.unsafeTrustManager) .retryOnConnectionFailure(true) .hostnameVerifier(SSLHelper.unsafeHostnameVerifier) diff --git a/app/src/main/java/io/legado/app/help/http/cronet/CronetLoader.kt b/app/src/main/java/io/legado/app/help/http/cronet/CronetLoader.kt index a5604bfe3..b06d0719b 100644 --- a/app/src/main/java/io/legado/app/help/http/cronet/CronetLoader.kt +++ b/app/src/main/java/io/legado/app/help/http/cronet/CronetLoader.kt @@ -34,13 +34,14 @@ object CronetLoader : CronetEngine.Builder.LibraryLoader() { private var cpuAbi: String? = null private var md5: String var download = false + @Volatile private var cacheInstall = false init { soUrl = ("https://storage.googleapis.com/chromium-cronet/android/" - + soVersion + "/Release/cronet/libs/" - + getCpuAbi(appCtx) + "/" + soName) + + soVersion + "/Release/cronet/libs/" + + getCpuAbi(appCtx) + "/" + soName) md5 = getMd5(appCtx) val dir = appCtx.getDir("cronet", Context.MODE_PRIVATE) soFile = File(dir.toString() + "/" + getCpuAbi(appCtx), soName) diff --git a/app/src/main/java/io/legado/app/help/storage/AppWebDav.kt b/app/src/main/java/io/legado/app/help/storage/AppWebDav.kt index 8898f1f4f..0dcb35120 100644 --- a/app/src/main/java/io/legado/app/help/storage/AppWebDav.kt +++ b/app/src/main/java/io/legado/app/help/storage/AppWebDav.kt @@ -205,7 +205,7 @@ object AppWebDav { getBookProgress(book)?.let { bookProgress -> if (bookProgress.durChapterIndex > book.durChapterIndex || (bookProgress.durChapterIndex == book.durChapterIndex && - bookProgress.durChapterPos > book.durChapterPos) + bookProgress.durChapterPos > book.durChapterPos) ) { book.durChapterIndex = bookProgress.durChapterIndex book.durChapterPos = bookProgress.durChapterPos diff --git a/app/src/main/java/io/legado/app/lib/README.md b/app/src/main/java/io/legado/app/lib/README.md index de7b7bd78..11a6b3705 100644 --- a/app/src/main/java/io/legado/app/lib/README.md +++ b/app/src/main/java/io/legado/app/lib/README.md @@ -1,4 +1,5 @@ # 放置一些copy过来的库 + * dialogs 弹出框 * icu4j 编码识别库 * permission 权限申请库 diff --git a/app/src/main/java/io/legado/app/model/CheckSource.kt b/app/src/main/java/io/legado/app/model/CheckSource.kt index c26d196c1..e3d313bca 100644 --- a/app/src/main/java/io/legado/app/model/CheckSource.kt +++ b/app/src/main/java/io/legado/app/model/CheckSource.kt @@ -11,6 +11,7 @@ import splitties.init.appCtx object CheckSource { var keyword = "我的" + //校验设置 var timeout = CacheManager.getLong("checkSourceTimeout") ?: 180000L var checkSearch = CacheManager.get("checkSearch")?.toBoolean() ?: true @@ -53,6 +54,10 @@ object CheckSource { if (checkInfo) checkItem = "$checkItem ${appCtx.getString(R.string.source_tab_info)}" if (checkCategory) checkItem = "$checkItem ${appCtx.getString(R.string.chapter_list)}" if (checkContent) checkItem = "$checkItem ${appCtx.getString(R.string.main_body)}" - return appCtx.getString(R.string.check_source_config_summary, (timeout / 1000).toString(), checkItem) + return appCtx.getString( + R.string.check_source_config_summary, + (timeout / 1000).toString(), + checkItem + ) } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/model/Debug.kt b/app/src/main/java/io/legado/app/model/Debug.kt index 9152bae22..9be322adc 100644 --- a/app/src/main/java/io/legado/app/model/Debug.kt +++ b/app/src/main/java/io/legado/app/model/Debug.kt @@ -55,7 +55,7 @@ object Debug { if (showTime && debugTimeMap[sourceUrl] != null) { val time = debugTimeFormat.format(Date(System.currentTimeMillis() - debugTimeMap[sourceUrl]!!)) - printMsg = printMsg.replace(AppPattern.debugMessageSymbolRegex,"") + printMsg = printMsg.replace(AppPattern.debugMessageSymbolRegex, "") debugMessageMap[sourceUrl] = "$time $printMsg" } @@ -93,7 +93,8 @@ object Debug { fun updateFinalMessage(sourceUrl: String, state: String) { if (debugTimeMap[sourceUrl] != null && debugMessageMap[sourceUrl] != null) { val spendingTime = System.currentTimeMillis() - debugTimeMap[sourceUrl]!! - debugTimeMap[sourceUrl] = if (state == "校验成功") spendingTime else CheckSource.timeout + spendingTime + debugTimeMap[sourceUrl] = + if (state == "校验成功") spendingTime else CheckSource.timeout + spendingTime val printTime = debugTimeFormat.format(Date(spendingTime)) debugMessageMap[sourceUrl] = "$printTime $state" } diff --git a/app/src/main/java/io/legado/app/model/README.md b/app/src/main/java/io/legado/app/model/README.md index 150cfb8bd..8583fd4bb 100644 --- a/app/src/main/java/io/legado/app/model/README.md +++ b/app/src/main/java/io/legado/app/model/README.md @@ -1,4 +1,5 @@ # 放置一些模块类 + * analyzeRule 书源规则解析 * localBook 本地书籍解析 * rss 订阅规则解析 diff --git a/app/src/main/java/io/legado/app/model/ReadBook.kt b/app/src/main/java/io/legado/app/model/ReadBook.kt index 6be083ce9..979737d44 100644 --- a/app/src/main/java/io/legado/app/model/ReadBook.kt +++ b/app/src/main/java/io/legado/app/model/ReadBook.kt @@ -91,7 +91,7 @@ object ReadBook : CoroutineScope by MainScope() { fun setProgress(progress: BookProgress) { if (progress.durChapterIndex < chapterSize && (durChapterIndex != progress.durChapterIndex - || durChapterPos != progress.durChapterPos) + || durChapterPos != progress.durChapterPos) ) { durChapterIndex = progress.durChapterIndex durChapterPos = progress.durChapterPos diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt index 0c039598e..1336497bf 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt @@ -600,9 +600,9 @@ class AnalyzeRule( private fun isRule(ruleStr: String): Boolean { return ruleStr.startsWith('@') //js首个字符不可能是@,除非是装饰器,所以@开头规定为规则 - || ruleStr.startsWith("$.") - || ruleStr.startsWith("$[") - || ruleStr.startsWith("//") + || ruleStr.startsWith("$.") + || ruleStr.startsWith("$[") + || ruleStr.startsWith("//") } } diff --git a/app/src/main/java/io/legado/app/service/CheckSourceService.kt b/app/src/main/java/io/legado/app/service/CheckSourceService.kt index 02a1ca05a..9f08fcb2a 100644 --- a/app/src/main/java/io/legado/app/service/CheckSourceService.kt +++ b/app/src/main/java/io/legado/app/service/CheckSourceService.kt @@ -181,7 +181,7 @@ class CheckSourceService : BaseService() { if (finalCheckMessage.isNotBlank()) throw NoStackTraceException(finalCheckMessage) }.timeout(CheckSource.timeout) .onError(searchCoroutine) { - when(it) { + when (it) { is TimeoutCancellationException -> source.addGroup("校验超时") is ScriptException, is WrappedException -> source.addGroup("js失效") !is NoStackTraceException -> source.addGroup("网站失效") diff --git a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt index 46ef94b91..8b5381185 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -229,7 +229,7 @@ class HttpReadAloudService : BaseReadAloudService(), private fun md5SpeakFileName(url: String, ttsConfig: String, content: String): String { return MD5Utils.md5Encode16(textChapter?.title ?: "") + "_" + - MD5Utils.md5Encode16("$url-|-$ttsConfig-|-$content") + MD5Utils.md5Encode16("$url-|-$ttsConfig-|-$content") } private fun createSilentSound(fileName: String) { diff --git a/app/src/main/java/io/legado/app/service/README.md b/app/src/main/java/io/legado/app/service/README.md index 2d40d9375..ca6bcbfe1 100644 --- a/app/src/main/java/io/legado/app/service/README.md +++ b/app/src/main/java/io/legado/app/service/README.md @@ -1,4 +1,5 @@ # android服务 + * AudioPlayService 音频播放服务 * CheckSourceService 书源检测服务 * DownloadService 缓存服务 diff --git a/app/src/main/java/io/legado/app/ui/book/audio/ComposeView.kt b/app/src/main/java/io/legado/app/ui/book/audio/ComposeView.kt index e1a262314..ab7edd7ea 100644 --- a/app/src/main/java/io/legado/app/ui/book/audio/ComposeView.kt +++ b/app/src/main/java/io/legado/app/ui/book/audio/ComposeView.kt @@ -28,7 +28,8 @@ fun TimerDialog(state: MutableState, parent: View) { Card(Modifier.fillMaxWidth()) { Slider( modifier = Modifier.padding(horizontal = 16.dp), - value = timeMinute.value.toFloat(), onValueChange = { + value = timeMinute.value.toFloat(), + onValueChange = { timeMinute.value = it.toInt() AudioPlay.setTimer(it.toInt()) }, diff --git a/app/src/main/java/io/legado/app/ui/book/bookmark/BookmarkAdapter.kt b/app/src/main/java/io/legado/app/ui/book/bookmark/BookmarkAdapter.kt index 7db9ea6ed..a823c082e 100644 --- a/app/src/main/java/io/legado/app/ui/book/bookmark/BookmarkAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/bookmark/BookmarkAdapter.kt @@ -48,7 +48,7 @@ class BookmarkAdapter(context: Context, val callback: Callback) : val lastItem = getItem(position - 1) val curItem = getItem(position) return !(lastItem?.bookName == curItem?.bookName - && lastItem?.bookAuthor == curItem?.bookAuthor) + && lastItem?.bookAuthor == curItem?.bookAuthor) } interface Callback { diff --git a/app/src/main/java/io/legado/app/ui/book/cache/CacheViewModel.kt b/app/src/main/java/io/legado/app/ui/book/cache/CacheViewModel.kt index 74d13a090..16b2bde11 100644 --- a/app/src/main/java/io/legado/app/ui/book/cache/CacheViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/cache/CacheViewModel.kt @@ -278,7 +278,7 @@ class CacheViewModel(application: Application) : BaseViewModel(application) { when { //正文模板 file.name.equals("chapter.html", true) - || file.name.equals("chapter.xhtml", true) -> { + || file.name.equals("chapter.xhtml", true) -> { contentModel = file.readText(context) } //封面等其他模板 diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceAdapter.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceAdapter.kt index 73a680e53..7e1bef5a3 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeChapterSourceAdapter.kt @@ -29,7 +29,7 @@ class ChangeChapterSourceAdapter( override fun areContentsTheSame(oldItem: SearchBook, newItem: SearchBook): Boolean { return oldItem.originName == newItem.originName - && oldItem.getDisplayLastChapterTitle() == newItem.getDisplayLastChapterTitle() + && oldItem.getDisplayLastChapterTitle() == newItem.getDisplayLastChapterTitle() } } diff --git a/app/src/main/java/io/legado/app/ui/book/read/BaseReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/BaseReadBookActivity.kt index cb5d5dbae..099ee02df 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/BaseReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/BaseReadBookActivity.kt @@ -45,7 +45,7 @@ abstract class BaseReadBookActivity : override val binding by viewBinding(ActivityBookReadBinding::inflate) override val viewModel by viewModels() var bottomDialog = 0 - private val selectBookFolderResult = registerForActivityResult(HandleFileContract()){ + private val selectBookFolderResult = registerForActivityResult(HandleFileContract()) { it.uri?.let { ReadBook.book?.let { book -> viewModel.loadChapterList(book) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt index 2f98e9704..d6fc3381b 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt @@ -178,7 +178,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { }.onSuccess { progress -> if (progress.durChapterIndex < book.durChapterIndex || (progress.durChapterIndex == book.durChapterIndex - && progress.durChapterPos < book.durChapterPos) + && progress.durChapterPos < book.durChapterPos) ) { alertSync?.invoke(progress) } else { diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt index d4c0a1940..e5553ce71 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt @@ -145,7 +145,7 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at drawImage(canvas, it, lineTop, lineBottom, isImageLine) } else { textPaint.color = textColor - if(it.isSearchResult) { + if (it.isSearchResult) { textPaint.color = context.accentColor } canvas.drawText(it.charData, it.start, lineBase, textPaint) diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt b/app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt index 8a676c873..7ea820bdc 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt @@ -622,8 +622,8 @@ object ChapterProvider { */ fun upLayout() { doublePage = (viewWidth > viewHeight || appCtx.isPad) - && ReadBook.pageAnim() != 3 - && AppConfig.doublePageHorizontal + && ReadBook.pageAnim() != 3 + && AppConfig.doublePageHorizontal if (viewWidth > 0 && viewHeight > 0) { paddingLeft = ReadBookConfig.paddingLeft.dpToPx() paddingTop = ReadBookConfig.paddingTop.dpToPx() diff --git a/app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentViewModel.kt b/app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentViewModel.kt index c46ae03a1..bdabf6701 100644 --- a/app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentViewModel.kt @@ -44,12 +44,15 @@ class SearchContentViewModel(application: Application) : BaseViewModel(applicati //先搜索没有启用净化的正文 withContext(Dispatchers.IO) { chapter.title = when (AppConfig.chineseConverterType) { - 1 -> ChineseUtils.t2s(chapter.title) - 2 -> ChineseUtils.s2t(chapter.title) + 1 -> ChineseUtils.t2s(chapter.title) + 2 -> ChineseUtils.s2t(chapter.title) else -> chapter.title } mContent = contentProcessor!!.getContent( - book, chapter, chapterContent, chineseConvert = false, reSegment = false, useReplace = false + book, chapter, chapterContent, + chineseConvert = false, + reSegment = false, + useReplace = false ).joinToString("") } val positions = searchPosition(query) @@ -90,7 +93,11 @@ class SearchContentViewModel(application: Application) : BaseViewModel(applicati return position } - private fun getResultAndQueryIndex(content: String, queryIndexInContent: Int, query: String): Pair { + private fun getResultAndQueryIndex( + content: String, + queryIndexInContent: Int, + query: String + ): Pair { // 左右移动20个字符,构建关键词周边文字,在搜索结果里显示 // todo: 判断段落,只在关键词所在段落内分割 // todo: 利用标点符号分割完整的句 diff --git a/app/src/main/java/io/legado/app/ui/book/searchContent/SearchResult.kt b/app/src/main/java/io/legado/app/ui/book/searchContent/SearchResult.kt index 85de0c63f..8def7cb5d 100644 --- a/app/src/main/java/io/legado/app/ui/book/searchContent/SearchResult.kt +++ b/app/src/main/java/io/legado/app/ui/book/searchContent/SearchResult.kt @@ -23,9 +23,9 @@ data class SearchResult( val rightString = resultText.substring(queryIndexInSurrounding + query.length, resultText.length) val html = leftString.colorTextForHtml(textColor) + - query.colorTextForHtml(accentColor) + - rightString.colorTextForHtml(textColor) + - chapterTitle.colorTextForHtml(accentColor) + query.colorTextForHtml(accentColor) + + rightString.colorTextForHtml(textColor) + + chapterTitle.colorTextForHtml(accentColor) HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY) } else { HtmlCompat.fromHtml( @@ -35,6 +35,7 @@ data class SearchResult( } } - private fun String.colorTextForHtml(textColor: String) = "$this" + private fun String.colorTextForHtml(textColor: String) = + "$this" } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt index 876bd816d..b7c713cff 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt @@ -52,10 +52,10 @@ class BookSourceAdapter(context: Context, val callBack: CallBack) : override fun areContentsTheSame(oldItem: BookSource, newItem: BookSource): Boolean { return oldItem.bookSourceName == newItem.bookSourceName - && oldItem.bookSourceGroup == newItem.bookSourceGroup - && oldItem.enabled == newItem.enabled - && oldItem.enabledExplore == newItem.enabledExplore - && oldItem.exploreUrl == newItem.exploreUrl + && oldItem.bookSourceGroup == newItem.bookSourceGroup + && oldItem.enabled == newItem.enabled + && oldItem.enabledExplore == newItem.enabledExplore + && oldItem.exploreUrl == newItem.exploreUrl } override fun getChangePayload(oldItem: BookSource, newItem: BookSource): Any? { diff --git a/app/src/main/java/io/legado/app/ui/book/toc/ChapterListAdapter.kt b/app/src/main/java/io/legado/app/ui/book/toc/ChapterListAdapter.kt index c6318f016..2c16a8530 100644 --- a/app/src/main/java/io/legado/app/ui/book/toc/ChapterListAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/toc/ChapterListAdapter.kt @@ -43,12 +43,12 @@ class ChapterListAdapter(context: Context, val callback: Callback) : newItem: BookChapter ): Boolean { return oldItem.bookUrl == newItem.bookUrl - && oldItem.url == newItem.url - && oldItem.isVip == newItem.isVip - && oldItem.isPay == newItem.isPay - && oldItem.title == newItem.title - && oldItem.tag == newItem.tag - && oldItem.isVolume == newItem.isVolume + && oldItem.url == newItem.url + && oldItem.isVip == newItem.isVip + && oldItem.isPay == newItem.isPay + && oldItem.title == newItem.title + && oldItem.tag == newItem.tag + && oldItem.isVolume == newItem.isVolume } } diff --git a/app/src/main/java/io/legado/app/ui/config/CheckSourceConfig.kt b/app/src/main/java/io/legado/app/ui/config/CheckSourceConfig.kt index b0c9254a3..2636870c6 100644 --- a/app/src/main/java/io/legado/app/ui/config/CheckSourceConfig.kt +++ b/app/src/main/java/io/legado/app/ui/config/CheckSourceConfig.kt @@ -18,6 +18,7 @@ import splitties.views.onClick class CheckSourceConfig : BaseDialogFragment(R.layout.dialog_check_source_config) { private val binding by viewBinding(DialogCheckSourceConfigBinding::bind) + //允许的最小超时时间,秒 private val minTimeout = 0L diff --git a/app/src/main/java/io/legado/app/ui/dict/DictViewModel.kt b/app/src/main/java/io/legado/app/ui/dict/DictViewModel.kt index 41d56d03b..b502e4d44 100644 --- a/app/src/main/java/io/legado/app/ui/dict/DictViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/dict/DictViewModel.kt @@ -15,9 +15,9 @@ class DictViewModel(application: Application) : BaseViewModel(application) { var dictHtmlData: MutableLiveData = MutableLiveData() fun dict(word: String) { - if(isChinese(word)){ + if (isChinese(word)) { baiduDict(word) - }else{ + } else { haiciDict(word) } diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/style2/BaseBooksAdapter.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/style2/BaseBooksAdapter.kt index 8a3d4cedb..1314b9c39 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/style2/BaseBooksAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/style2/BaseBooksAdapter.kt @@ -22,46 +22,46 @@ abstract class BaseBooksAdapter( return when { oldItem.durChapterTime != newItem.durChapterTime -> false oldItem.name != newItem.name -> false - oldItem.author != newItem.author -> false - oldItem.durChapterTitle != newItem.durChapterTitle -> false - oldItem.latestChapterTitle != newItem.latestChapterTitle -> false - oldItem.lastCheckCount != newItem.lastCheckCount -> false - oldItem.getDisplayCover() != newItem.getDisplayCover() -> false - oldItem.getUnreadChapterNum() != newItem.getUnreadChapterNum() -> false - else -> true - } + oldItem.author != newItem.author -> false + oldItem.durChapterTitle != newItem.durChapterTitle -> false + oldItem.latestChapterTitle != newItem.latestChapterTitle -> false + oldItem.lastCheckCount != newItem.lastCheckCount -> false + oldItem.getDisplayCover() != newItem.getDisplayCover() -> false + oldItem.getUnreadChapterNum() != newItem.getUnreadChapterNum() -> false + else -> true } + } - override fun getChangePayload(oldItem: Book, newItem: Book): Any? { - val bundle = bundleOf() - if (oldItem.name != newItem.name) { - bundle.putString("name", newItem.name) - } - if (oldItem.author != newItem.author) { - bundle.putString("author", newItem.author) - } - if (oldItem.durChapterTitle != newItem.durChapterTitle) { - bundle.putString("dur", newItem.durChapterTitle) - } - if (oldItem.latestChapterTitle != newItem.latestChapterTitle) { - bundle.putString("last", newItem.latestChapterTitle) - } - if (oldItem.getDisplayCover() != newItem.getDisplayCover()) { - bundle.putString("cover", newItem.getDisplayCover()) - } - if (oldItem.lastCheckCount != newItem.lastCheckCount - || oldItem.durChapterTime != newItem.durChapterTime - || oldItem.getUnreadChapterNum() != newItem.getUnreadChapterNum() - || oldItem.lastCheckCount != newItem.lastCheckCount - ) { - bundle.putBoolean("refresh", true) - } - if (bundle.isEmpty) return null - return bundle + override fun getChangePayload(oldItem: Book, newItem: Book): Any? { + val bundle = bundleOf() + if (oldItem.name != newItem.name) { + bundle.putString("name", newItem.name) } - + if (oldItem.author != newItem.author) { + bundle.putString("author", newItem.author) + } + if (oldItem.durChapterTitle != newItem.durChapterTitle) { + bundle.putString("dur", newItem.durChapterTitle) + } + if (oldItem.latestChapterTitle != newItem.latestChapterTitle) { + bundle.putString("last", newItem.latestChapterTitle) + } + if (oldItem.getDisplayCover() != newItem.getDisplayCover()) { + bundle.putString("cover", newItem.getDisplayCover()) + } + if (oldItem.lastCheckCount != newItem.lastCheckCount + || oldItem.durChapterTime != newItem.durChapterTime + || oldItem.getUnreadChapterNum() != newItem.getUnreadChapterNum() + || oldItem.lastCheckCount != newItem.lastCheckCount + ) { + bundle.putBoolean("refresh", true) + } + if (bundle.isEmpty) return null + return bundle } + } + fun notification(bookUrl: String) { for (i in 0 until itemCount) { callBack.getItem(i).let { diff --git a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceAdapter.kt b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceAdapter.kt index 9300d0e4a..dd1480046 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceAdapter.kt @@ -44,8 +44,8 @@ class RssSourceAdapter(context: Context, val callBack: CallBack) : override fun areContentsTheSame(oldItem: RssSource, newItem: RssSource): Boolean { return oldItem.sourceName == newItem.sourceName - && oldItem.sourceGroup == newItem.sourceGroup - && oldItem.enabled == newItem.enabled + && oldItem.sourceGroup == newItem.sourceGroup + && oldItem.enabled == newItem.enabled } override fun getChangePayload(oldItem: RssSource, newItem: RssSource): Any? { diff --git a/app/src/main/java/io/legado/app/ui/widget/BatteryView.kt b/app/src/main/java/io/legado/app/ui/widget/BatteryView.kt index 07af8922c..3606b6d72 100644 --- a/app/src/main/java/io/legado/app/ui/widget/BatteryView.kt +++ b/app/src/main/java/io/legado/app/ui/widget/BatteryView.kt @@ -69,7 +69,7 @@ class BatteryView @JvmOverloads constructor( .getPrimaryHorizontal(text.length - battery.toString().length) .toInt() + 2.dpToPx() val batteryEnd = batteryStart + - StaticLayout.getDesiredWidth(battery.toString(), paint).toInt() + 4.dpToPx() + StaticLayout.getDesiredWidth(battery.toString(), paint).toInt() + 4.dpToPx() outFrame.set( batteryStart, 2.dpToPx(), diff --git a/app/src/main/java/io/legado/app/utils/ACache.kt b/app/src/main/java/io/legado/app/utils/ACache.kt index be3e606df..cd41ad72d 100644 --- a/app/src/main/java/io/legado/app/utils/ACache.kt +++ b/app/src/main/java/io/legado/app/utils/ACache.kt @@ -109,7 +109,10 @@ class ACache private constructor(cacheDir: File, max_size: Long, max_count: Int) * @param saveTime 保存的时间,单位:秒 */ fun put(key: String, value: String, saveTime: Int) { - if (saveTime == 0) put(key, value) else put(key, Utils.newStringWithDateInfo(saveTime, value)) + if (saveTime == 0) put(key, value) else put( + key, + Utils.newStringWithDateInfo(saveTime, value) + ) } /** @@ -245,7 +248,8 @@ class ACache private constructor(cacheDir: File, max_size: Long, max_count: Int) * @param saveTime 保存的时间,单位:秒 */ fun put(key: String, value: ByteArray, saveTime: Int) { - if (saveTime == 0) put(key, value) else put(key, Utils.newByteArrayWithDateInfo(saveTime, value)) + if (saveTime == 0) put(key, value) + else put(key, Utils.newByteArrayWithDateInfo(saveTime, value)) } /** diff --git a/app/src/main/java/io/legado/app/utils/ContextExtensions.kt b/app/src/main/java/io/legado/app/utils/ContextExtensions.kt index 3ab04d1e8..43323e519 100644 --- a/app/src/main/java/io/legado/app/utils/ContextExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/ContextExtensions.kt @@ -162,8 +162,8 @@ fun Context.restart() { intent?.let { intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK - or Intent.FLAG_ACTIVITY_CLEAR_TASK - or Intent.FLAG_ACTIVITY_CLEAR_TOP + or Intent.FLAG_ACTIVITY_CLEAR_TASK + or Intent.FLAG_ACTIVITY_CLEAR_TOP ) startActivity(intent) //杀掉以前进程 @@ -327,6 +327,7 @@ fun Context.openFileUri(uri: Uri, type: String? = null) { } } +@Suppress("DEPRECATION") val Context.isWifiConnect: Boolean get() { val info = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI) diff --git a/app/src/main/java/io/legado/app/utils/FileUtils.kt b/app/src/main/java/io/legado/app/utils/FileUtils.kt index 01ae6dc3d..11fe7de72 100644 --- a/app/src/main/java/io/legado/app/utils/FileUtils.kt +++ b/app/src/main/java/io/legado/app/utils/FileUtils.kt @@ -278,7 +278,7 @@ object FileUtils { //返回当前目录所有以某些扩展名结尾的文件 val extension = getExtension(name) allowExtensions?.contentDeepToString()?.contains(extension) == true - || allowExtensions == null + || allowExtensions == null } } diff --git a/app/src/main/java/io/legado/app/utils/NetworkUtils.kt b/app/src/main/java/io/legado/app/utils/NetworkUtils.kt index 4c35021ce..241dce047 100644 --- a/app/src/main/java/io/legado/app/utils/NetworkUtils.kt +++ b/app/src/main/java/io/legado/app/utils/NetworkUtils.kt @@ -231,7 +231,7 @@ object NetworkUtils { */ private val IPV4_PATTERN = Pattern.compile( "^(" + "([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}" + - "([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$" + "([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$" ) /** diff --git a/app/src/main/java/io/legado/app/utils/Utf8BomUtils.kt b/app/src/main/java/io/legado/app/utils/Utf8BomUtils.kt index 73440b819..1de5e9421 100644 --- a/app/src/main/java/io/legado/app/utils/Utf8BomUtils.kt +++ b/app/src/main/java/io/legado/app/utils/Utf8BomUtils.kt @@ -7,9 +7,9 @@ object Utf8BomUtils { fun removeUTF8BOM(xmlText: String): String { val bytes = xmlText.toByteArray() 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) { return String(bytes, 3, bytes.size - 3) } @@ -18,9 +18,9 @@ object Utf8BomUtils { 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) @@ -31,8 +31,8 @@ object Utf8BomUtils { 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]) + && bytes[0] == UTF8_BOM_BYTES[0] + && bytes[1] == UTF8_BOM_BYTES[1] + && bytes[2] == UTF8_BOM_BYTES[2]) } } \ No newline at end of file