Skip to content

Commit

Permalink
Merge remote-tracking branch 'f/main'
Browse files Browse the repository at this point in the history
  • Loading branch information
UjuiUjuMandan committed Dec 19, 2023
2 parents 400048d + 1c15d9a commit 762a7ca
Show file tree
Hide file tree
Showing 23 changed files with 109 additions and 50 deletions.
13 changes: 13 additions & 0 deletions CHANGELOG.zh-CN.MD
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
# 变更日志

## 未发布

### 重大变更

* 由于 Apache HttpClient 5 在 Android 10 以下无法使用,后备 HTTP 引擎恢复为 OkHttp [#514](https://github.com/FooIbar/EhViewer/issues/514)

### Bug 修复

* 修复获取 pToken 失败导致无限加载 [#508](https://github.com/FooIbar/EhViewer/issues/508)
* 修复阅读页快速滑动滑块导致下载延时过多累计 [#512](https://github.com/FooIbar/EhViewer/issues/512)
* 修复 Android 9 以下的设备上无法退出搜索栏 [#513](https://github.com/FooIbar/EhViewer/issues/513)


## 1.10.0

### 重大变更
Expand Down
4 changes: 2 additions & 2 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ android {
applicationId = "moe.tarsin.ehviewer"
minSdk = 28
targetSdk = 34
versionCode = 180047
versionName = "1.10.0"
versionCode = 180048
versionName = "1.10.1"
versionNameSuffix = "-cc"
resourceConfigurations.addAll(
listOf(
Expand Down
19 changes: 19 additions & 0 deletions app/src/main/kotlin/com/hippo/ehviewer/EhApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,10 @@ import eu.kanade.tachiyomi.util.system.logcat
import io.ktor.client.HttpClient
import io.ktor.client.engine.okhttp.OkHttp
import io.ktor.client.plugins.cookies.HttpCookies
import java.io.File
import kotlinx.coroutines.ensureActive
import kotlinx.coroutines.launch
import moe.tarsin.coroutines.runSuspendCatching
import okhttp3.AsyncDns
import okhttp3.android.AndroidAsyncDns
import okio.Path.Companion.toOkioPath
Expand Down Expand Up @@ -117,6 +120,22 @@ class EhApplication : Application(), SingletonImageLoader.Factory {
launchIO {
DownloadManager.isIdle
}
launchIO {
runSuspendCatching {
val files = mutableListOf<File>()
AppConfig.externalCrashDir?.listFiles()?.let { files.addAll(it) }
AppConfig.externalParseErrorDir?.listFiles()?.let { files.addAll(it) }
files.sortByDescending { it.lastModified() }
files.forEachIndexed { index, file ->
ensureActive()
if (index > 9) {
file.delete()
}
}
}.onFailure {
it.printStackTrace()
}
}
launchIO {
cleanupDownload()
}
Expand Down
18 changes: 10 additions & 8 deletions app/src/main/kotlin/com/hippo/ehviewer/client/EhCookieStore.kt
Original file line number Diff line number Diff line change
Expand Up @@ -65,16 +65,18 @@ object EhCookieStore : CookiesStorage {
override fun close() = Unit

fun load(url: Url): List<Cookie> {
val cookies = manager.getCookie(url.toString()) ?: return emptyList()
val cookies = manager.getCookie(url.toString())
val checkTips = EhUrl.DOMAIN_E in url.host
return parseClientCookiesHeader(cookies)
.map { Cookie(it.key, it.value, maxAge = Int.MAX_VALUE) }
.filterTo(mutableListOf()) { it.name != KEY_UTMP_NAME }.apply {
if (checkTips) {
removeAll { it.name == KEY_CONTENT_WARNING }
add(sTipsCookie)
return cookies?.let {
parseClientCookiesHeader(cookies)
.map { Cookie(it.key, it.value, maxAge = Int.MAX_VALUE) }
.filterTo(mutableListOf()) { it.name != KEY_UTMP_NAME }.apply {
if (checkTips) {
removeAll { it.name == KEY_CONTENT_WARNING }
add(sTipsCookie)
}
}
}
} ?: if (checkTips) listOf(sTipsCookie) else emptyList()
}

override suspend fun get(requestUrl: Url) = load(requestUrl)
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ class MainActivity : EhActivity() {
LaunchedEffect(Unit) {
if (connectivityManager.isActiveNetworkMetered) {
if (isAtLeastQ) {
val ret = snackbarState.showSnackbar(warning, settings)
val ret = snackbarState.showSnackbar(warning, settings, true)
if (ret == SnackbarResult.ActionPerformed) {
val panelIntent = Intent(android.provider.Settings.Panel.ACTION_INTERNET_CONNECTIVITY)
startActivity(panelIntent)
Expand Down Expand Up @@ -322,7 +322,7 @@ class MainActivity : EhActivity() {
launch = { navController.navigate(ProgressScreenDestination(result2.gid, result2.pToken, result2.page)) }
}
launch?.let {
val ret = snackbarState.showSnackbar(snackMessage, snackAction)
val ret = snackbarState.showSnackbar(snackMessage, snackAction, true)
if (ret == SnackbarResult.ActionPerformed) it()
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,7 @@ fun SignInScreen(navigator: DestinationsNavigator) {
withStyle(
style = SpanStyle(textDecoration = TextDecoration.Underline),
) {
append(stringResource(id = R.string.tourist_mode))
append(stringResource(id = R.string.guest_mode))
}
},
)
Expand Down Expand Up @@ -356,7 +356,7 @@ fun SignInScreen(navigator: DestinationsNavigator) {
withStyle(
style = SpanStyle(textDecoration = TextDecoration.Underline),
) {
append(stringResource(id = R.string.tourist_mode))
append(stringResource(id = R.string.guest_mode))
}
},
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,7 @@ fun GalleryDetailScreen(args: GalleryDetailScreenArgs, navigator: DestinationsNa
}
}
}.onFailure {
galleryInfo?.let { info -> EhDB.putHistoryInfo(info.findBaseInfo()) }
getDetailError = ExceptionUtils.getReadableString(it)
}.getOrNull()
galleryDetail?.let {
Expand Down
29 changes: 19 additions & 10 deletions app/src/main/kotlin/com/hippo/ehviewer/ui/screen/SearchBarScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.hippo.ehviewer.ui.screen
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.animation.core.tween
import androidx.compose.foundation.clickable
import androidx.compose.foundation.focusable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
Expand All @@ -19,6 +20,7 @@ import androidx.compose.foundation.layout.navigationBars
import androidx.compose.foundation.layout.only
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.foundation.layout.union
import androidx.compose.foundation.layout.windowInsetsPadding
Expand Down Expand Up @@ -77,6 +79,7 @@ import com.hippo.ehviewer.ui.LocalNavDrawerState
import com.hippo.ehviewer.ui.LockDrawer
import com.hippo.ehviewer.ui.main.FAB_ANIMATE_TIME
import com.hippo.ehviewer.ui.tools.LocalDialogState
import com.hippo.ehviewer.util.isAtLeastP
import com.jamal.composeprefs3.ui.ifNotNullThen
import com.jamal.composeprefs3.ui.ifTrueThen
import eu.kanade.tachiyomi.util.lang.launchIO
Expand Down Expand Up @@ -233,15 +236,21 @@ fun SearchBarScreen(
Modifier
}

// Workaround IME not hiding after performing search
// https://github.com/FooIbar/EhViewer/pull/412
val view = LocalView.current
val keyboardManager = remember { SoftwareKeyboardControllerCompat(view) }
SideEffect {
if (!active) keyboardManager.hide()
}

Box(modifier = Modifier.fillMaxSize()) {
if (isAtLeastP) {
// Workaround IME not hiding after performing search
// https://github.com/FooIbar/EhViewer/pull/412
val view = LocalView.current
val keyboardManager = remember { SoftwareKeyboardControllerCompat(view) }
SideEffect {
if (!active) keyboardManager.hide()
}
} else {
// Workaround unable to exit search field
// https://android.googlesource.com/platform/frameworks/support/+/8f81d46e2c3f37564d0b7515ec9411314645e187
Box(Modifier.size(1.dp).focusable())
}

Scaffold(
topBar = {
// Placeholder, fill immutable SearchBar padding
Expand Down Expand Up @@ -289,8 +298,8 @@ fun SearchBarScreen(
}
active = it
},
title = title?.let { { Text(it, overflow = TextOverflow.Ellipsis) } },
placeholder = searchFieldHint?.let { { Text(it) } },
title = title.ifNotNullThen { Text(title!!, overflow = TextOverflow.Ellipsis) },
placeholder = searchFieldHint.ifNotNullThen { Text(searchFieldHint!!) },
leadingIcon = {
if (active) {
IconButton(onClick = { hideSearchView() }) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,12 +84,12 @@ fun EhScreen(navigator: DestinationsNavigator) {
},
snackbarHost = { SnackbarHost(snackbarHostState) },
) { paddingValues ->
val touristMode = stringResource(id = R.string.settings_eh_identity_cookies_tourist)
val guestMode = stringResource(id = R.string.settings_eh_identity_cookies_guest)
val copiedToClipboard = stringResource(id = R.string.copied_to_clipboard)
Column(modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection).verticalScroll(rememberScrollState()).padding(paddingValues)) {
Preference(
title = stringResource(id = R.string.account_name),
summary = Settings.displayName ?: touristMode,
summary = Settings.displayName ?: guestMode,
) {
val eCookies = EhCookieStore.load(Url(EhUrl.HOST_E))
val exCookies = EhCookieStore.load(Url(EhUrl.HOST_EX))
Expand All @@ -114,7 +114,7 @@ fun EhScreen(navigator: DestinationsNavigator) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) launchSnackBar(copiedToClipboard)
}
} else {
setMessage(touristMode)
setMessage(guestMode)
}
setPositiveButton(R.string.settings_eh_sign_out) { _, _ ->
EhUtils.signOut()
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/kotlin/com/hippo/ehviewer/util/Crash.kt
Original file line number Diff line number Diff line change
Expand Up @@ -78,5 +78,9 @@ object Crash {
it.printStackTrace()
file.delete()
}
if (t is OutOfMemoryError) {
val dumpFile = File(dir, "hprof-$nowString.hprof")
Debug.dumpHprofData(dumpFile.absolutePath)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,11 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ModalBottomSheetFix
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
Expand Down Expand Up @@ -110,6 +112,8 @@ import eu.kanade.tachiyomi.util.system.isNightMode
import java.io.File
import java.io.IOException
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.merge
Expand Down Expand Up @@ -322,6 +326,12 @@ class ReaderActivity : EhActivity() {
dialogState.Intercept()

val showSeekbar by Settings.showReaderSeekbar.collectAsState()
val sliderValueFlow = remember { MutableStateFlow(0) }
LaunchedEffect(sliderValueFlow) {
sliderValueFlow.drop(1).debounce(200).collect {
moveToPageIndex(it)
}
}
ReaderAppBars(
visible = menuVisible,
isRtl = isRtl,
Expand All @@ -330,7 +340,8 @@ class ReaderActivity : EhActivity() {
totalPages = totalPage,
onSliderValueChange = {
isScrollingThroughPages = true
moveToPageIndex(it)
sliderValueFlow.value = it
currentPage = it + 1
},
onClickSettings = { readerSettingSheetDialog?.show() },
)
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@
<string name="app_waring">Inhalt dieser App kommt aus dem Internet, von dem einige dir körperlichen oder emotionalen Schaden zufügen kann. Du hast es wirklich erfahrt und möchtest immer noch fortsetzen.</string>
<string name="error_username_cannot_empty">Gibt den Nutzername ein</string>
<string name="error_password_cannot_empty">Gibt das Passwort ein</string>
<string name="tourist_mode">Anmeldung überspringen</string>
<string name="guest_mode">Anmeldung überspringen</string>
<string name="sign_in_failed">Anmeldung fehlgeschlagen</string>
<string name="clipboard_gallery_url_snack_message">Ein Link von einen Galerie wurde in Zwischenablage erkennt.</string>
<string name="clipboard_gallery_url_snack_action">Gehen</string>
Expand All @@ -330,7 +330,7 @@
<string name="download_reset_reading_progress">Lesefortschritte zurücksetzen</string>
<string name="reset_reading_progress_message">Lesefortschritte aus allen heruntergeladenen Galerie zurücksetzen?</string>
<string name="settings_eh_identity_cookies_signed">Wenn jemand die folgenden Informationen hat, kann er sich als du anmelden. &lt;br&gt;&lt;b&gt;ALSO GEHEIM HALTEN!&lt;/b&gt;&lt;br&gt;&lt;br&gt;%s</string>
<string name="settings_eh_identity_cookies_tourist">Du hast dich noch nicht angemeldet.</string>
<string name="settings_eh_identity_cookies_guest">Du hast dich noch nicht angemeldet.</string>
<string name="settings_eh_identity_cookies_copy">Kopieren</string>
<string name="settings_eh_show_gallery_pages">Galerieseitenzahl anzeigen</string>
<string name="settings_eh_show_gallery_pages_summary">Die Galerieseitenzahle in der Galerieliste anzeigen</string>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/values-es/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@

<string name="app_waring">El contenido de esta aplicación es de Internet. Algunas de ellas pueden causarle daño psicológico. Ahora sabes los riesgos anteriormente mencionado y te gustaría asumirlos</string>
<string name="error_username_cannot_empty">El usuario no puede estar vacío</string>
<string name="tourist_mode">Saltar inicio de sesión</string>
<string name="guest_mode">Saltar inicio de sesión</string>
<string name="sign_in_failed">Inicio de sesión fallido</string>
<string name="get_it">Entendido</string>

Expand Down
4 changes: 2 additions & 2 deletions app/src/main/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@
<string name="app_waring">Le contenu de l\'application provient de l\'Internet, dont quelque chose peut vous causer le dommage physique ou mentale. Vous l\'avez bien compris et voulez continuer quand même.</string>
<string name="error_username_cannot_empty">Nom d\'ultilisateur ne doit pas être une chaîne vide</string>
<string name="error_password_cannot_empty">Mot de passe ne doit pas être une chaîne vide</string>
<string name="tourist_mode">Continuer sans se connecter</string>
<string name="guest_mode">Continuer sans se connecter</string>
<string name="sign_in_failed">Impossible de se connecter</string>
<string name="get_it">Compris</string>

Expand Down Expand Up @@ -436,7 +436,7 @@
<string name="settings_advanced_app_language_title">Langue de l\'app (Language)</string>
<string name="app_language_system">Langue du système (défaut)</string>
<string name="settings_eh_identity_cookies_signed">Tout le monde peut utiliser les cookies de ce compte pour s\'y connecter.&lt;br&gt;&lt;b&gt;GARDEZ-LES BIEN !&lt;/b&gt;&lt;br&gt;&lt;br&gt;%s</string>
<string name="settings_eh_identity_cookies_tourist">Vous ne vous êtes pas connecté.</string>
<string name="settings_eh_identity_cookies_guest">Vous ne vous êtes pas connecté.</string>
<string name="settings_eh_identity_cookies_copy">Copier</string>
<string name="settings_eh_show_gallery_pages">Montrer les nombres des pages des galeries</string>
<string name="settings_eh_show_gallery_pages_summary">Montrer le nombre des pages des galerie dans la liste des galeries</string>
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/res/values-ja/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
<string name="app_waring">このアプリの内容はインターネットから取得したものです。その内容の一部は使用者のお体や心理に傷つける恐れがあります。それでも続行しますか?</string>
<string name="error_username_cannot_empty">ユーザー名を入力してください。</string>
<string name="error_password_cannot_empty">パスワードを入力してください。</string>
<string name="tourist_mode">ログインをスキップ</string>
<string name="guest_mode">ログインをスキップ</string>
<string name="sign_in_failed">ログインに失敗しました。</string>
<string name="get_it">了解</string>

Expand Down Expand Up @@ -434,7 +434,7 @@
<string name="download_service">ダウンロードサービス</string>

<string name="settings_eh_identity_cookies_signed">下記の情報を持つ誰でもこのアカウントにログインできますので&lt;br&gt;&lt;b&gt;絶対に他人に渡さないように!&lt;/b&gt;&lt;br&gt;&lt;br&gt;%s</string>
<string name="settings_eh_identity_cookies_tourist">まだログインしていません</string>
<string name="settings_eh_identity_cookies_guest">まだログインしていません</string>
<string name="settings_eh_identity_cookies_copy">コピー</string>
<string name="settings_eh_show_gallery_pages">ギャラリーページ数を表示</string>
<string name="settings_eh_show_gallery_pages_summary">リストにギャラリーのページの数量を表示します</string>
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/res/values-ko/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
<string name="app_waring">이 앱의 내용은 인터넷에서 받아옵니다. 이 앱을 사용하기 위해서는 받아온 내용 중 일부가 사용자에게 가할 수 있는 신체적 또는 정신적 피해를 감수해야 합니다.</string>
<string name="error_username_cannot_empty">사용자 이름은 비워둘 수 없습니다.</string>
<string name="error_password_cannot_empty">비밀번호는 비워둘 수 없습니다.</string>
<string name="tourist_mode">로그인 없이 사용</string>
<string name="guest_mode">로그인 없이 사용</string>
<string name="sign_in_failed">로그인 실패</string>
<string name="get_it">알겠습니다</string>

Expand Down Expand Up @@ -264,7 +264,7 @@
<string name="settings_eh">EH</string>
<string name="settings_eh_sign_out">로그아웃</string>
<string name="settings_eh_identity_cookies_signed">식별용 쿠키를 사용하여 이 계정으로 로그인할 수 있습니다.&lt;br&gt;&lt;b&gt;안전하게 보관하세요.&lt;/b&gt;&lt;br&gt;&lt;br&gt;%s</string>
<string name="settings_eh_identity_cookies_tourist">로그인 상태가 아닙니다.</string>
<string name="settings_eh_identity_cookies_guest">로그인 상태가 아닙니다.</string>
<string name="settings_eh_identity_cookies_copy">복사</string>
<string name="settings_u_config">E-Hentai 설정</string>
<string name="settings_u_config_summary">E-Hentai 사이트의 설정 페이지를 엽니다.</string>
Expand Down
Loading

0 comments on commit 762a7ca

Please sign in to comment.