From e4c7de185c21202b20d4906265d311bddb8aa012 Mon Sep 17 00:00:00 2001 From: Horis <821938089@qq.com> Date: Mon, 19 Jun 2023 23:16:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/model/ReadAloud.kt | 17 ++++----- .../changesource/ChangeBookSourceViewModel.kt | 36 +++++++++++-------- .../io/legado/app/utils/ContextExtensions.kt | 2 +- 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/ReadAloud.kt b/app/src/main/java/io/legado/app/model/ReadAloud.kt index de7b887e0..51c49199b 100644 --- a/app/src/main/java/io/legado/app/model/ReadAloud.kt +++ b/app/src/main/java/io/legado/app/model/ReadAloud.kt @@ -3,6 +3,7 @@ package io.legado.app.model import android.content.Context import android.content.Intent import android.os.Bundle +import androidx.core.content.ContextCompat import io.legado.app.constant.EventBus import io.legado.app.constant.IntentAction import io.legado.app.data.appDb @@ -50,7 +51,7 @@ object ReadAloud { intent.putExtra("play", play) intent.putExtra("pageIndex", pageIndex) intent.putExtra("startPos", startPos) - context.startService(intent) + ContextCompat.startForegroundService(context, intent) } fun playByEventBus( @@ -70,7 +71,7 @@ object ReadAloud { if (BaseReadAloudService.isRun) { val intent = Intent(context, aloudClass) intent.action = IntentAction.pause - context.startService(intent) + ContextCompat.startForegroundService(context, intent) } } @@ -78,7 +79,7 @@ object ReadAloud { if (BaseReadAloudService.isRun) { val intent = Intent(context, aloudClass) intent.action = IntentAction.resume - context.startService(intent) + ContextCompat.startForegroundService(context, intent) } } @@ -86,7 +87,7 @@ object ReadAloud { if (BaseReadAloudService.isRun) { val intent = Intent(context, aloudClass) intent.action = IntentAction.stop - context.startService(intent) + ContextCompat.startForegroundService(context, intent) } } @@ -94,7 +95,7 @@ object ReadAloud { if (BaseReadAloudService.isRun) { val intent = Intent(context, aloudClass) intent.action = IntentAction.prevParagraph - context.startService(intent) + ContextCompat.startForegroundService(context, intent) } } @@ -102,7 +103,7 @@ object ReadAloud { if (BaseReadAloudService.isRun) { val intent = Intent(context, aloudClass) intent.action = IntentAction.nextParagraph - context.startService(intent) + ContextCompat.startForegroundService(context, intent) } } @@ -110,7 +111,7 @@ object ReadAloud { if (BaseReadAloudService.isRun) { val intent = Intent(context, aloudClass) intent.action = IntentAction.upTtsSpeechRate - context.startService(intent) + ContextCompat.startForegroundService(context, intent) } } @@ -119,7 +120,7 @@ object ReadAloud { val intent = Intent(context, aloudClass) intent.action = IntentAction.setTimer intent.putExtra("minute", minute) - context.startService(intent) + ContextCompat.startForegroundService(context, intent) } } diff --git a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt index 0a5494c15..11a00d04e 100644 --- a/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/changesource/ChangeBookSourceViewModel.kt @@ -7,6 +7,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope import io.legado.app.base.BaseViewModel import io.legado.app.constant.AppConst +import io.legado.app.constant.AppLog import io.legado.app.constant.AppPattern import io.legado.app.constant.EventBus import io.legado.app.constant.PreferKey @@ -90,23 +91,30 @@ open class ChangeBookSourceViewModel(application: Application) : BaseViewModel(a searchCallback = null } }.map { - searchBooks.sortedWith { o1, o2 -> - val o1bs = SourceConfig.getBookScore(o1.origin, o1.name, o1.author) - val o2bs = SourceConfig.getBookScore(o2.origin, o2.name, o2.author) - when { - o1bs - o2bs > 0 -> -1 - o1bs - o2bs < 0 -> 1 - else -> { - val o1ss = SourceConfig.getSourceScore(o1.origin) - val o2ss = SourceConfig.getSourceScore(o2.origin) - when { - o1ss - o2ss > 0 -> -1 - o1ss - o2ss < 0 -> 1 - else -> o1.originOrder - o2.originOrder + kotlin.runCatching { + searchBooks.sortedWith { o1, o2 -> + val o1bs = SourceConfig.getBookScore(o1.origin, o1.name, o1.author) + val o2bs = SourceConfig.getBookScore(o2.origin, o2.name, o2.author) + when { + o1bs - o2bs > 0 -> -1 + o1bs - o2bs < 0 -> 1 + else -> { + val o1ss = SourceConfig.getSourceScore(o1.origin) + val o2ss = SourceConfig.getSourceScore(o2.origin) + when { + o1ss - o2ss > 0 -> -1 + o1ss - o2ss < 0 -> 1 + else -> { + val n = o1.originOrder - o2.originOrder + if (n == 0) -1 else n + } + } } } } - } + }.onFailure { + AppLog.put("换源排序出错\n${it.localizedMessage}", it) + }.getOrDefault(searchBooks) }.flowOn(IO) @Volatile 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 d76ed852c..b924404bb 100644 --- a/app/src/main/java/io/legado/app/utils/ContextExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/ContextExtensions.kt @@ -43,7 +43,7 @@ inline fun Context.startActivity(configIntent: Intent.() } inline fun Context.startService(configIntent: Intent.() -> Unit = {}) { - startService(Intent(this, T::class.java).apply(configIntent)) + ContextCompat.startForegroundService(this, Intent(this, T::class.java).apply(configIntent)) } inline fun Context.stopService() {