Merge branch 'master' into sync-part-final

This commit is contained in:
KaiserBh 2024-01-07 10:16:43 +11:00 committed by GitHub
commit 1bbdfff826
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 84 additions and 57 deletions

View File

@ -77,7 +77,7 @@ internal fun GlobalSearchContent(
title = fromSourceId?.let { title = fromSourceId?.let {
"${source.name}".takeIf { source.id == fromSourceId } "${source.name}".takeIf { source.id == fromSourceId }
} ?: source.name, } ?: source.name,
subtitle = LocaleHelper.getDisplayName(source.lang), subtitle = LocaleHelper.getLocalizedDisplayName(source.lang),
onClick = { onClickSource(source) }, onClick = { onClickSource(source) },
) { ) {
when (result) { when (result) {

View File

@ -34,7 +34,6 @@ import tachiyomi.core.i18n.stringResource
import tachiyomi.i18n.MR import tachiyomi.i18n.MR
import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.Scaffold
import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.i18n.stringResource
import java.util.Locale
class AppLanguageScreen : Screen() { class AppLanguageScreen : Screen() {
@ -104,9 +103,9 @@ class AppLanguageScreen : Screen() {
for (i in 0..<parser.attributeCount) { for (i in 0..<parser.attributeCount) {
if (parser.getAttributeName(i) == "name") { if (parser.getAttributeName(i) == "name") {
val langTag = parser.getAttributeValue(i) val langTag = parser.getAttributeValue(i)
val displayName = LocaleHelper.getDisplayName(langTag) val displayName = LocaleHelper.getLocalizedDisplayName(langTag)
if (displayName.isNotEmpty()) { if (displayName.isNotEmpty()) {
langs.add(Language(langTag, displayName, Locale.forLanguageTag(langTag).displayName)) langs.add(Language(langTag, displayName, LocaleHelper.getDisplayName(langTag)))
} }
} }
} }

View File

@ -17,10 +17,12 @@ import kotlinx.coroutines.MainScope
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.supervisorScope import kotlinx.coroutines.supervisorScope
import logcat.LogPriority
import tachiyomi.core.util.lang.launchIO import tachiyomi.core.util.lang.launchIO
import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.lang.withIOContext
import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.lang.withUIContext
import tachiyomi.core.util.system.ImageUtil import tachiyomi.core.util.system.ImageUtil
import tachiyomi.core.util.system.logcat
import java.io.BufferedInputStream import java.io.BufferedInputStream
import java.io.ByteArrayInputStream import java.io.ByteArrayInputStream
import java.io.InputStream import java.io.InputStream
@ -136,6 +138,7 @@ class PagerPageHolder(
val streamFn = page.stream ?: return val streamFn = page.stream ?: return
try {
val (bais, isAnimated, background) = withIOContext { val (bais, isAnimated, background) = withIOContext {
streamFn().buffered(16).use { stream -> streamFn().buffered(16).use { stream ->
process(item, stream).use { itemStream -> process(item, stream).use { itemStream ->
@ -171,6 +174,12 @@ class PagerPageHolder(
} }
removeErrorLayout() removeErrorLayout()
} }
} catch (e: Throwable) {
logcat(LogPriority.ERROR, e)
withUIContext {
setError()
}
}
} }
private fun process(page: ReaderPage, imageStream: BufferedInputStream): InputStream { private fun process(page: ReaderPage, imageStream: BufferedInputStream): InputStream {

View File

@ -23,10 +23,12 @@ import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.supervisorScope import kotlinx.coroutines.supervisorScope
import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.suspendCancellableCoroutine
import logcat.LogPriority
import tachiyomi.core.util.lang.launchIO import tachiyomi.core.util.lang.launchIO
import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.lang.withIOContext
import tachiyomi.core.util.lang.withUIContext import tachiyomi.core.util.lang.withUIContext
import tachiyomi.core.util.system.ImageUtil import tachiyomi.core.util.system.ImageUtil
import tachiyomi.core.util.system.logcat
import java.io.BufferedInputStream import java.io.BufferedInputStream
import java.io.InputStream import java.io.InputStream
@ -184,6 +186,7 @@ class WebtoonPageHolder(
val streamFn = page?.stream ?: return val streamFn = page?.stream ?: return
try {
val (openStream, isAnimated) = withIOContext { val (openStream, isAnimated) = withIOContext {
val stream = streamFn().buffered(16) val stream = streamFn().buffered(16)
val openStream = process(stream) val openStream = process(stream)
@ -207,6 +210,12 @@ class WebtoonPageHolder(
suspendCancellableCoroutine<Nothing> { continuation -> suspendCancellableCoroutine<Nothing> { continuation ->
continuation.invokeOnCancellation { openStream.close() } continuation.invokeOnCancellation { openStream.close() }
} }
} catch (e: Throwable) {
logcat(LogPriority.ERROR, e)
withUIContext {
setError()
}
}
} }
private fun process(imageStream: BufferedInputStream): InputStream { private fun process(imageStream: BufferedInputStream): InputStream {

View File

@ -21,7 +21,7 @@ object LocaleHelper {
} else if (b == "all") { } else if (b == "all") {
1 1
} else { } else {
getDisplayName(a).compareTo(getDisplayName(b)) getLocalizedDisplayName(a).compareTo(getLocalizedDisplayName(b))
} }
} }
@ -34,16 +34,26 @@ object LocaleHelper {
SourcesScreenModel.PINNED_KEY -> context.stringResource(MR.strings.pinned_sources) SourcesScreenModel.PINNED_KEY -> context.stringResource(MR.strings.pinned_sources)
"other" -> context.stringResource(MR.strings.other_source) "other" -> context.stringResource(MR.strings.other_source)
"all" -> context.stringResource(MR.strings.multi_lang) "all" -> context.stringResource(MR.strings.multi_lang)
else -> getDisplayName(lang) else -> getLocalizedDisplayName(lang)
} }
} }
fun getDisplayName(lang: String): String {
val normalizedLang = when (lang) {
"zh-CN" -> "zh-Hans"
"zh-TW" -> "zh-Hant"
else -> lang
}
return Locale.forLanguageTag(normalizedLang).displayName
}
/** /**
* Returns display name of a string language code. * Returns display name of a string language code.
* *
* @param lang empty for system language * @param lang empty for system language
*/ */
fun getDisplayName(lang: String?): String { fun getLocalizedDisplayName(lang: String?): String {
if (lang == null) { if (lang == null) {
return "" return ""
} }