adding share preference option and clear legacy code

adding share preference option
clear legacy code
pull/1251/head
Jason Yao 3 years ago
parent 144f29f501
commit 73033e14cb
  1. 2
      app/src/main/java/io/legado/app/constant/PreferKey.kt
  2. 3
      app/src/main/java/io/legado/app/help/AppConfig.kt
  3. 8
      app/src/main/java/io/legado/app/model/Debug.kt
  4. 49
      app/src/main/java/io/legado/app/service/CheckSourceService.kt
  5. 4
      app/src/main/java/io/legado/app/ui/book/source/debug/BookSourceDebugModel.kt
  6. 21
      app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt
  7. 16
      app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt
  8. 4
      app/src/main/java/io/legado/app/ui/rss/source/debug/RssSourceDebugModel.kt
  9. 2
      app/src/main/java/io/legado/app/web/SourceDebugWebSocket.kt
  10. 14
      app/src/main/res/layout/item_book_source.xml
  11. 2
      app/src/main/res/values-es-rES/strings.xml
  12. 2
      app/src/main/res/values-ja-rJP/strings.xml
  13. 2
      app/src/main/res/values-pt-rBR/strings.xml
  14. 2
      app/src/main/res/values-zh-rHK/strings.xml
  15. 2
      app/src/main/res/values-zh-rTW/strings.xml
  16. 2
      app/src/main/res/values-zh/strings.xml
  17. 2
      app/src/main/res/values/strings.xml
  18. 7
      app/src/main/res/xml/pref_config_other.xml

@ -100,5 +100,5 @@ object PreferKey {
const val cNBBackground = "colorBottomBackgroundNight"
const val bgImageN = "backgroundImageNight"
const val bgImageNBlurring = "backgroundImageNightBlurring"
const val checkSourceMessage = "checkSourceMessage"
}

@ -246,6 +246,9 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
val fullScreenGesturesSupport: Boolean
get() = appCtx.getPrefBoolean(PreferKey.fullScreenGesturesSupport, false)
val checkSourceMessage: Boolean
get() = appCtx.getPrefBoolean(PreferKey.checkSourceMessage)
private fun getPrefUserAgent(): String {
val ua = appCtx.getPrefString(PreferKey.userAgent)
if (ua.isNullOrBlank()) {

@ -4,6 +4,7 @@ import android.annotation.SuppressLint
import android.util.Log
import io.legado.app.constant.EventBus
import io.legado.app.data.entities.*
import io.legado.app.help.AppConfig
import io.legado.app.help.coroutine.CompositeCoroutine
import io.legado.app.model.rss.Rss
import io.legado.app.model.webBook.WebBook
@ -20,7 +21,7 @@ object Debug {
private var debugSource: String? = null
private val tasks: CompositeCoroutine = CompositeCoroutine()
val debugMessageMap = ConcurrentHashMap<String, String>()
var isChecking: Boolean = false
private var isChecking: Boolean = false
@SuppressLint("ConstantLocale")
private val DEBUG_TIME_FORMAT = SimpleDateFormat("[mm:ss.SSS]", Locale.getDefault())
@ -48,8 +49,7 @@ object Debug {
it.printLog(state, printMsg)
if (sourceUrl != null && printMsg.length < 30) {
debugMessageMap[sourceUrl] = printMsg
callback?.printCheckSourceMessage(sourceUrl, printMsg)
Log.d(EventBus.CHECK_SOURCE_MESSAGE, "debugMessage after filter $printMsg")
callback?.postCheckMessageEvent(sourceUrl)
}
}
}
@ -264,7 +264,7 @@ object Debug {
interface Callback {
fun printLog(state: Int, msg: String)
fun printCheckSourceMessage(sourceUrl: String, msg: String)
fun postCheckMessageEvent(sourceUrl: String)
}
}

@ -1,7 +1,6 @@
package io.legado.app.service
import android.content.Intent
import android.util.Log
import androidx.core.app.NotificationCompat
import io.legado.app.R
import io.legado.app.base.BaseService
@ -10,6 +9,7 @@ import io.legado.app.constant.EventBus
import io.legado.app.constant.IntentAction
import io.legado.app.data.appDb
import io.legado.app.data.entities.BookSource
import io.legado.app.help.AppConfig
import io.legado.app.help.IntentHelp
import io.legado.app.help.coroutine.CompositeCoroutine
import io.legado.app.model.Debug
@ -23,23 +23,14 @@ import java.util.concurrent.Executors
import kotlin.math.min
class CheckSourceService : BaseService() {
private var threadCount = 1
private var threadCount = AppConfig.threadCount
private var searchCoroutine = Executors.newFixedThreadPool(min(threadCount,8)).asCoroutineDispatcher()
private var tasks = CompositeCoroutine()
private val allIds = ArrayList<String>()
private val checkedIds = ArrayList<String>()
private var processIndex = 0
private var notificationMsg = ""
private val debugCallback = object : Debug.Callback{
override fun printLog(state: Int, msg: String) {
}
@Synchronized
override fun printCheckSourceMessage(sourceUrl: String, msg: String) {
postEvent(EventBus.CHECK_SOURCE_MESSAGE, Pair(sourceUrl, null))
Log.d(EventBus.CHECK_SOURCE_MESSAGE, "printCheckSourceMessage to post $sourceUrl $msg")
}
}
private var debugCallback : Debug.Callback? = null
private val notificationBuilder by lazy {
NotificationCompat.Builder(this, AppConst.channelIdReadAloud)
.setSmallIcon(R.drawable.ic_network_check)
@ -59,7 +50,18 @@ class CheckSourceService : BaseService() {
override fun onCreate() {
super.onCreate()
notificationMsg = getString(R.string.start)
Debug.callback = debugCallback
if (AppConfig.checkSourceMessage) {
debugCallback = object : Debug.Callback {
override fun printLog(state: Int, msg: String) {}
@Synchronized
override fun postCheckMessageEvent(sourceUrl: String) {
postEvent(EventBus.CHECK_SOURCE_MESSAGE, sourceUrl)
}
}
Debug.callback = debugCallback
threadCount = 1
}
upNotification()
}
@ -118,7 +120,9 @@ class CheckSourceService : BaseService() {
fun check(source: BookSource) {
execute(context = searchCoroutine) {
Debug.startChecking(source)
if (AppConfig.checkSourceMessage) {
Debug.startChecking(source)
}
val webBook = WebBook(source)
var books = webBook.searchBookAwait(this, CheckSource.keyword)
if (books.isEmpty()) {
@ -148,8 +152,10 @@ class CheckSourceService : BaseService() {
"error:${it.localizedMessage}
${source.bookSourceComment}"
""".trimIndent()
val message = Debug.debugMessageMap[source.bookSourceUrl] + " 失败"
postEvent(EventBus.CHECK_SOURCE_MESSAGE, Pair(source.bookSourceUrl, message))
debugCallback?.let {
Debug.debugMessageMap[source.bookSourceUrl] = Debug.debugMessageMap[source.bookSourceUrl] + " 失败"
postEvent(EventBus.CHECK_SOURCE_MESSAGE, source.bookSourceUrl)
}
appDb.bookSourceDao.update(source)
}.onSuccess(searchCoroutine) {
source.removeGroup("失效")
@ -158,14 +164,11 @@ class CheckSourceService : BaseService() {
?.filterNot {
it.startsWith("error:")
}?.joinToString("\n")
Debug.debugMessageMap[source.bookSourceUrl]?.let { lastMessage ->
lastMessage.indexOf("]").let {
if (it > 0) {
val timeMessage = lastMessage.substring(0, it) + " 校验成功"
postEvent(EventBus.CHECK_SOURCE_MESSAGE, Pair(source.bookSourceUrl, timeMessage))
}
}
debugCallback?.let { debugCallback
Debug.debugMessageMap[source.bookSourceUrl] = Debug.debugMessageMap[source.bookSourceUrl] + " 成功"
postEvent(EventBus.CHECK_SOURCE_MESSAGE, source.bookSourceUrl)
}
appDb.bookSourceDao.update(source)
}.onFinally(searchCoroutine) {
onNext(source.bookSourceUrl, source.bookSourceName)

@ -51,9 +51,7 @@ class BookSourceDebugModel(application: Application) : BaseViewModel(application
}
}
override fun printCheckSourceMessage(sourceUrl: String, msg: String) {
TODO("Not yet implemented")
}
override fun postCheckMessageEvent(sourceUrl: String) {}
override fun onCleared() {
super.onCleared()

@ -340,7 +340,6 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
CheckSource.keyword = it
}
}
adapter.notifyItemRangeChanged(0, adapter.itemCount, bundleOf(Pair("startChecking", null)))
CheckSource.start(this@BookSourceActivity, adapter.selection)
}
noButton()
@ -442,23 +441,21 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
snackBar?.dismiss()
Debug.finishChecking()
snackBar = null
// groups.map { group ->
// if (group.contains("失效")) {
// searchView.setQuery("失效", true)
// toastOnUi("发现有失效书源,已为您自动筛选!")
// }
// }
groups.map { group ->
if (group.contains("失效")) {
searchView.setQuery("失效", true)
toastOnUi("发现有失效书源,已为您自动筛选!")
}
}
}
observeEvent<Pair<String, String?>>(EventBus.CHECK_SOURCE_MESSAGE) { messagePair ->
observeEvent<String>(EventBus.CHECK_SOURCE_MESSAGE) { bookSourceUrl ->
sourceFlowJob?.cancel()
sourceFlowJob = launch {
appDb.bookSourceDao.flowSearch(messagePair.first)
appDb.bookSourceDao.flowSearch(bookSourceUrl)
.map { adapter.getItems().indexOf(it[0]) }
.collect {
adapter.notifyItemChanged(it, bundleOf(Pair(EventBus.CHECK_SOURCE_MESSAGE, messagePair.second))) }
adapter.notifyItemChanged(it, bundleOf(Pair(EventBus.CHECK_SOURCE_MESSAGE, null))) }
}
}
}

@ -116,22 +116,10 @@ class BookSourceAdapter(context: Context, val callBack: CallBack) :
payload.keySet().map {
when (it) {
"selected" -> cbBookSource.isChecked = selected.contains(item)
"startChecking" -> {
ivProgressBar.visibility = if(selected.contains(item)) View.VISIBLE else ivProgressBar.visibility
}
"checkSourceDone" -> {
ivProgressBar.visibility = if(selected.contains(item)) View.GONE else ivProgressBar.visibility
}
EventBus.CHECK_SOURCE_MESSAGE -> {
val message = payload[it] as? String?
if (message != null) {
ivDebugText.text = message
ivProgressBar.visibility = View.GONE
}
else{
ivDebugText.text = Debug.debugMessageMap[item.bookSourceUrl] ?: ""
}
ivDebugText.text = Debug.debugMessageMap[item.bookSourceUrl] ?: ""
ivDebugText.visibility = if(ivDebugText.text.toString().length > 1) View.VISIBLE else View.GONE
ivProgressBar.visibility = if(ivDebugText.text.toString().contains(Regex("成功|失败"))) View.GONE else View.VISIBLE
}
}
}

@ -44,9 +44,7 @@ class RssSourceDebugModel(application: Application) : BaseViewModel(application)
}
}
override fun printCheckSourceMessage(sourceUrl: String, msg: String) {
TODO("Not yet implemented")
}
override fun postCheckMessageEvent(sourceUrl: String) {}
override fun onCleared() {
super.onCleared()

@ -95,7 +95,7 @@ class SourceDebugWebSocket(handshakeRequest: NanoHTTPD.IHTTPSession) :
}
}
override fun printCheckSourceMessage(sourceUrl: String, msg: String) {
override fun postCheckMessageEvent(sourceUrl: String) {
TODO("Not yet implemented")
}

@ -17,7 +17,7 @@
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/swt_enabled"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="@id/iv_menu_more" />
app:layout_constraintBottom_toTopOf="@id/iv_debug_text" />
<io.legado.app.lib.theme.view.ATESwitch
android:id="@+id/swt_enabled"
@ -29,7 +29,7 @@
tools:ignore="RtlSymmetry"
app:layout_constraintRight_toLeftOf="@id/iv_edit"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="@id/iv_menu_more" />
app:layout_constraintBottom_toTopOf="@id/iv_debug_text" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_edit"
@ -43,7 +43,7 @@
android:tint="@color/primaryText"
app:layout_constraintRight_toLeftOf="@id/iv_menu_more"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="@id/iv_menu_more" />
app:layout_constraintBottom_toTopOf="@id/iv_debug_text" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_menu_more"
@ -55,7 +55,7 @@
android:tint="@color/primaryText"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/iv_progressBar"
app:layout_constraintBottom_toTopOf="@id/iv_debug_text"
tools:ignore="RtlHardcoded" />
<io.legado.app.ui.widget.image.CircleImageView
@ -79,8 +79,8 @@
android:indeterminateBehavior="repeat"
tools:visibility="visible"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_menu_more"
app:layout_constraintBottom_toBottomOf="parent" />
app:layout_constraintTop_toTopOf="@id/iv_debug_text"
app:layout_constraintBottom_toBottomOf="@id/iv_debug_text" />
<TextView
android:id="@+id/iv_debug_text"
@ -92,7 +92,7 @@
tools:visibility="visible"
android:layout_marginStart="10dp"
app:layout_constraintStart_toEndOf="@id/iv_progressBar"
app:layout_constraintTop_toTopOf="@id/iv_progressBar"
app:layout_constraintTop_toBottomOf="@id/cb_book_source"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />

@ -853,4 +853,6 @@
<string name="pref_media_button_per_next">媒体按钮•上一首|下一首</string>
<string name="pref_media_button_per_next_summary">上一段|下一段/上一章|下一章</string>
<string name="read_aloud_by_page_summary">及时翻页,翻页时会停顿一下</string>
<string name="check_source_show_debug_message">La fuente del libro de cheques muestra un mensaje de depuración</string>
<string name="check_source_show_debug_message_summary">Muestra los pasos y el tiempo de la solicitud de red durante la verificación de la fuente del libro; actualmente solo admite la verificación de un solo hilo</string>
</resources>

@ -854,4 +854,6 @@
<string name="pref_media_button_per_next">媒体按钮•上一首|下一首</string>
<string name="pref_media_button_per_next_summary">上一段|下一段/上一章|下一章</string>
<string name="read_aloud_by_page_summary">及时翻页,翻页时会停顿一下</string>
<string name="check_source_show_debug_message">Check book source shows debug message</string>
<string name="check_source_show_debug_message_summary">Show network status and timestamp during source checking, currently only supports single-thread</string>
</resources>

@ -853,4 +853,6 @@
<string name="pref_media_button_per_next">媒体按钮•上一首|下一首</string>
<string name="pref_media_button_per_next_summary">上一段|下一段/上一章|下一章</string>
<string name="read_aloud_by_page_summary">及时翻页,翻页时会停顿一下</string>
<string name="check_source_show_debug_message">Verificar a fonte do livro mostra uma mensagem de depuração</string>
<string name="check_source_show_debug_message_summary">Exibir etapas de solicitação de rede e tempo durante a verificação da fonte do livro; atualmente, oferece suporte apenas à verificação de thread único</string>
</resources>

@ -855,5 +855,7 @@
<string name="pref_media_button_per_next">媒体按钮•上一首|下一首</string>
<string name="pref_media_button_per_next_summary">上一段|下一段/上一章|下一章</string>
<string name="read_aloud_by_page_summary">及时翻页,翻页时会停顿一下</string>
<string name="check_source_show_debug_message">校驗書源顯示詳細信息</string>
<string name="check_source_show_debug_message_summary">書源校驗時顯示網絡請求步驟和時間,當前只支持單線程校驗</string>
</resources>

@ -856,5 +856,7 @@
<string name="pref_media_button_per_next">媒体按钮•上一首|下一首</string>
<string name="pref_media_button_per_next_summary">上一段|下一段/上一章|下一章</string>
<string name="read_aloud_by_page_summary">及时翻页,翻页时会停顿一下</string>
<string name="check_source_show_debug_message">校驗書源顯示詳細信息</string>
<string name="check_source_show_debug_message_summary">書源校驗時顯示網絡請求步驟和時間,當前只支持單線程校驗</string>
</resources>

@ -857,5 +857,7 @@
<string name="pref_media_button_per_next">媒体按钮•上一首|下一首</string>
<string name="pref_media_button_per_next_summary">上一段|下一段/上一章|下一章</string>
<string name="read_aloud_by_page_summary">及时翻页,翻页时会停顿一下</string>
<string name="check_source_show_debug_message">校验显示详细信息</string>
<string name="check_source_show_debug_message_summary">书源校验时显示网络请求步骤和时间,当前只支持单线程校验</string>
</resources>

@ -858,5 +858,7 @@
<string name="pref_media_button_per_next">媒体按钮•上一首|下一首</string>
<string name="pref_media_button_per_next_summary">上一段|下一段/上一章|下一章</string>
<string name="read_aloud_by_page_summary">及时翻页,翻页时会停顿一下</string>
<string name="check_source_show_debug_message">Check book source shows debug message</string>
<string name="check_source_show_debug_message_summary">Show network status and timestamp during source checking, currently only supports single-thread</string>
</resources>

@ -103,6 +103,13 @@
android:title="@string/threads_num_title"
app:iconSpaceReserved="false" />
<io.legado.app.ui.widget.prefs.SwitchPreference
android:defaultValue="false"
android:key="checkSourceMessage"
android:summary="@string/check_source_show_debug_message_summary"
android:title="@string/check_source_show_debug_message"
app:iconSpaceReserved="false" />
<io.legado.app.ui.widget.prefs.SwitchPreference
android:defaultValue="true"
android:key="process_text"

Loading…
Cancel
Save