From e07aab4434a9fffadd8618f0ddecb91a75c12e66 Mon Sep 17 00:00:00 2001
From: FooIbar <118464521+FooIbar@users.noreply.github.com>
Date: Tue, 12 Mar 2024 21:10:56 +0800
Subject: [PATCH] Drop basic login as captcha is mandatory now
---
.../com/hippo/ehviewer/client/EhEngine.kt | 17 --
.../kotlin/com/hippo/ehviewer/client/EhUrl.kt | 1 -
.../ehviewer/client/parser/SignInParser.kt | 42 ----
.../hippo/ehviewer/ui/login/SignInScreen.kt | 229 +++---------------
app/src/main/res/values-de/strings.xml | 7 -
app/src/main/res/values-es/strings.xml | 8 -
app/src/main/res/values-fr/strings.xml | 8 -
app/src/main/res/values-ja/strings.xml | 8 -
app/src/main/res/values-ko/strings.xml | 8 -
app/src/main/res/values-nb-rNO/strings.xml | 4 -
app/src/main/res/values-th/strings.xml | 8 -
app/src/main/res/values-tr/strings.xml | 8 -
app/src/main/res/values-zh-rCN/strings.xml | 8 -
app/src/main/res/values-zh-rHK/strings.xml | 9 -
app/src/main/res/values-zh-rTW/strings.xml | 8 -
app/src/main/res/values/strings.xml | 8 -
16 files changed, 35 insertions(+), 346 deletions(-)
delete mode 100644 app/src/main/kotlin/com/hippo/ehviewer/client/parser/SignInParser.kt
diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/EhEngine.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/EhEngine.kt
index 3b586a76d..12a39a293 100644
--- a/app/src/main/kotlin/com/hippo/ehviewer/client/EhEngine.kt
+++ b/app/src/main/kotlin/com/hippo/ehviewer/client/EhEngine.kt
@@ -44,7 +44,6 @@ import com.hippo.ehviewer.client.parser.GalleryTokenApiParser
import com.hippo.ehviewer.client.parser.HomeParser
import com.hippo.ehviewer.client.parser.ProfileParser
import com.hippo.ehviewer.client.parser.RateGalleryResult
-import com.hippo.ehviewer.client.parser.SignInParser
import com.hippo.ehviewer.client.parser.TorrentParser
import com.hippo.ehviewer.client.parser.TorrentResult
import com.hippo.ehviewer.client.parser.VoteCommentResult
@@ -233,22 +232,6 @@ object EhEngine {
suspend fun getFavorites(url: String) = ehRequest(url, EhUrl.referer).fetchUsingAsByteBuffer(FavoritesParser::parse)
.apply { galleryInfoList.fillInfo(url) }
- suspend fun signIn(username: String, password: String): String {
- val referer = "https://forums.e-hentai.org/index.php?act=Login&CODE=00"
- val url = EhUrl.API_SIGN_IN
- val origin = "https://forums.e-hentai.org"
- return ehRequest(url, referer, origin) {
- formBody {
- append("referer", referer)
- append("b", "")
- append("bt", "")
- append("UserName", username)
- append("PassWord", password)
- append("CookieDate", "1")
- }
- }.fetchUsingAsText(SignInParser::parse)
- }
-
suspend fun commentGallery(url: String, comment: String, id: Long = -1) = ehRequest(url, url, EhUrl.origin) {
formBody {
if (id == -1L) {
diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/EhUrl.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/EhUrl.kt
index 836270725..fcad9383f 100644
--- a/app/src/main/kotlin/com/hippo/ehviewer/client/EhUrl.kt
+++ b/app/src/main/kotlin/com/hippo/ehviewer/client/EhUrl.kt
@@ -36,7 +36,6 @@ object EhUrl {
const val API_E = "https://api.e-hentai.org/api.php"
const val URL_UCONFIG_E = HOST_E + "uconfig.php"
const val URL_MY_TAGS_E = HOST_E + "mytags"
- const val API_SIGN_IN = "https://forums.e-hentai.org/index.php?act=Login&CODE=01"
const val URL_POPULAR_E = "https://e-hentai.org/popular"
const val URL_POPULAR_EX = "https://exhentai.org/popular"
const val URL_IMAGE_SEARCH_E = "https://upload.e-hentai.org/image_lookup.php"
diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/parser/SignInParser.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/parser/SignInParser.kt
deleted file mode 100644
index 0568f0546..000000000
--- a/app/src/main/kotlin/com/hippo/ehviewer/client/parser/SignInParser.kt
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2016 Hippo Seven
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.hippo.ehviewer.client.parser
-
-import com.hippo.ehviewer.client.exception.EhException
-import com.hippo.ehviewer.client.exception.ParseException
-import java.util.regex.Pattern
-
-object SignInParser {
- private val NAME_PATTERN = Pattern.compile("
You are now logged in as: (.+?)<")
- private val ERROR_PATTERN = Pattern.compile(
- "
The error returned was:
\\s*(.+?)
" +
- "|(.+?)",
- )
-
- fun parse(body: String): String {
- var m = NAME_PATTERN.matcher(body)
- return if (m.find()) {
- m.group(1)!!
- } else {
- m = ERROR_PATTERN.matcher(body)
- if (m.find()) {
- throw EhException(m.group(1) ?: m.group(2))
- } else {
- throw ParseException("Can't parse sign in")
- }
- }
- }
-}
diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/login/SignInScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/login/SignInScreen.kt
index 728e611f2..bd6cc5bc4 100644
--- a/app/src/main/kotlin/com/hippo/ehviewer/ui/login/SignInScreen.kt
+++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/login/SignInScreen.kt
@@ -14,66 +14,37 @@ import androidx.compose.foundation.layout.systemBarsPadding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.widthIn
import androidx.compose.foundation.rememberScrollState
-import androidx.compose.foundation.text.KeyboardActions
-import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.Info
-import androidx.compose.material.icons.filled.Visibility
-import androidx.compose.material.icons.filled.VisibilityOff
import androidx.compose.material3.Button
-import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.FilledTonalButton
-import androidx.compose.material3.Icon
-import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.rememberCoroutineScope
-import androidx.compose.runtime.saveable.rememberSaveable
-import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.buildAnnotatedString
-import androidx.compose.ui.text.input.ImeAction
-import androidx.compose.ui.text.input.KeyboardType
-import androidx.compose.ui.text.input.PasswordVisualTransformation
-import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.text.withStyle
import androidx.compose.ui.unit.dp
import com.hippo.ehviewer.R
import com.hippo.ehviewer.Settings
-import com.hippo.ehviewer.client.EhEngine
import com.hippo.ehviewer.client.EhUrl
-import com.hippo.ehviewer.client.EhUtils
import com.hippo.ehviewer.ui.LockDrawer
import com.hippo.ehviewer.ui.StartDestination
import com.hippo.ehviewer.ui.destinations.WebViewSignInScreenDestination
import com.hippo.ehviewer.ui.openBrowser
import com.hippo.ehviewer.ui.screen.popNavigate
-import com.hippo.ehviewer.ui.tools.LocalDialogState
import com.hippo.ehviewer.ui.tools.LocalWindowSizeClass
-import com.hippo.ehviewer.util.displayString
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.annotation.RootNavGraph
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
-import eu.kanade.tachiyomi.util.lang.launchIO
-import eu.kanade.tachiyomi.util.lang.withNonCancellableContext
-import eu.kanade.tachiyomi.util.lang.withUIContext
-import kotlinx.coroutines.Job
@RootNavGraph(start = true)
@Destination
@@ -81,100 +52,7 @@ import kotlinx.coroutines.Job
fun SignInScreen(navigator: DestinationsNavigator) {
LockDrawer(true)
val windowSizeClass = LocalWindowSizeClass.current
- val coroutineScope = rememberCoroutineScope()
- val focusManager = LocalFocusManager.current
- var isProgressIndicatorVisible by rememberSaveable { mutableStateOf(false) }
- var showUsernameError by rememberSaveable { mutableStateOf(false) }
- var showPasswordError by rememberSaveable { mutableStateOf(false) }
- var username by rememberSaveable { mutableStateOf("") }
- var password by rememberSaveable { mutableStateOf("") }
- var passwordHidden by rememberSaveable { mutableStateOf(true) }
val context = LocalContext.current
- var signInJob by remember { mutableStateOf(null) }
- val dialogState = LocalDialogState.current
-
- fun signIn() {
- if (signInJob?.isActive == true) return
- if (username.isEmpty()) {
- showUsernameError = true
- return
- } else {
- showUsernameError = false
- }
- if (password.isEmpty()) {
- showPasswordError = true
- return
- } else {
- showPasswordError = false
- }
- focusManager.clearFocus()
- isProgressIndicatorVisible = true
-
- EhUtils.signOut()
- signInJob = coroutineScope.launchIO {
- runCatching {
- EhEngine.signIn(username, password)
- }.onFailure {
- withUIContext {
- focusManager.clearFocus()
- dialogState.awaitPermissionOrCancel(
- confirmText = R.string.get_it,
- title = R.string.sign_in_failed,
- showCancelButton = false,
- text = {
- Text(
- """
- ${it.displayString()}
- ${stringResource(R.string.sign_in_failed_tip)}
- """.trimIndent(),
- )
- },
- )
- isProgressIndicatorVisible = false
- }
- }.onSuccess {
- withNonCancellableContext { postLogin() }
- withUIContext { navigator.popNavigate(StartDestination) }
- }
- }
- }
-
- @Composable
- fun UsernameAndPasswordTextField() {
- OutlinedTextField(
- value = username,
- onValueChange = { username = it },
- modifier = Modifier.width(dimensionResource(id = R.dimen.single_max_width)),
- label = { Text(stringResource(R.string.username)) },
- supportingText = { if (showUsernameError) Text(stringResource(R.string.error_username_cannot_empty)) },
- trailingIcon = { if (showUsernameError) Icon(imageVector = Icons.Filled.Info, contentDescription = null) },
- keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next),
- singleLine = true,
- isError = showUsernameError,
- )
- OutlinedTextField(
- value = password,
- onValueChange = { password = it },
- Modifier.width(dimensionResource(id = R.dimen.single_max_width)),
- label = { Text(stringResource(R.string.password)) },
- visualTransformation = if (passwordHidden) PasswordVisualTransformation() else VisualTransformation.None,
- supportingText = { if (showPasswordError) Text(stringResource(R.string.error_password_cannot_empty)) },
- keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password),
- keyboardActions = KeyboardActions(onDone = { signIn() }),
- trailingIcon = {
- if (showPasswordError) {
- Icon(imageVector = Icons.Filled.Info, contentDescription = null)
- } else {
- IconButton(onClick = { passwordHidden = !passwordHidden }) {
- val visibilityIcon = if (passwordHidden) Icons.Filled.Visibility else Icons.Filled.VisibilityOff
- Icon(imageVector = visibilityIcon, contentDescription = null)
- }
- }
- },
- singleLine = true,
- isError = showPasswordError,
- )
- }
Box(contentAlignment = Alignment.Center) {
when (windowSizeClass.widthSizeClass) {
@@ -188,7 +66,6 @@ fun SignInScreen(navigator: DestinationsNavigator) {
contentDescription = null,
modifier = Modifier.padding(dimensionResource(id = R.dimen.keyline_margin)),
)
- UsernameAndPasswordTextField()
Text(
text = stringResource(id = R.string.app_waring),
modifier = Modifier.widthIn(max = dimensionResource(id = R.dimen.single_max_width)).padding(top = 24.dp),
@@ -199,7 +76,7 @@ fun SignInScreen(navigator: DestinationsNavigator) {
modifier = Modifier.widthIn(max = dimensionResource(id = R.dimen.single_max_width)).padding(top = 12.dp),
style = MaterialTheme.typography.headlineMedium,
)
- Spacer(modifier = Modifier.weight(1f))
+ Spacer(modifier = Modifier.height(dimensionResource(id = R.dimen.keyline_margin)))
Row(modifier = Modifier.padding(top = dimensionResource(R.dimen.keyline_margin))) {
FilledTonalButton(
onClick = { context.openBrowser(EhUrl.URL_REGISTER) },
@@ -208,44 +85,28 @@ fun SignInScreen(navigator: DestinationsNavigator) {
Text(text = stringResource(id = R.string.register))
}
Button(
- onClick = ::signIn,
+ onClick = { navigator.navigate(WebViewSignInScreenDestination) },
modifier = Modifier.weight(1f).padding(horizontal = 4.dp),
) {
Text(text = stringResource(id = R.string.sign_in))
}
}
- Row(modifier = Modifier.padding(horizontal = 4.dp)) {
- TextButton(
- onClick = { navigator.navigate(WebViewSignInScreenDestination) },
- modifier = Modifier.padding(horizontal = 8.dp),
- ) {
- Text(
- text = buildAnnotatedString {
- withStyle(
- style = SpanStyle(textDecoration = TextDecoration.Underline),
- ) {
- append(stringResource(id = R.string.sign_in_via_webview))
- }
- },
- )
- }
- TextButton(
- onClick = {
- Settings.needSignIn = false
- Settings.gallerySite = EhUrl.SITE_E
- navigator.popNavigate(StartDestination)
+ TextButton(
+ onClick = {
+ Settings.needSignIn = false
+ Settings.gallerySite = EhUrl.SITE_E
+ navigator.popNavigate(StartDestination)
+ },
+ ) {
+ Text(
+ text = buildAnnotatedString {
+ withStyle(
+ style = SpanStyle(textDecoration = TextDecoration.Underline),
+ ) {
+ append(stringResource(id = R.string.guest_mode))
+ }
},
- ) {
- Text(
- text = buildAnnotatedString {
- withStyle(
- style = SpanStyle(textDecoration = TextDecoration.Underline),
- ) {
- append(stringResource(id = R.string.guest_mode))
- }
- },
- )
- }
+ )
}
}
}
@@ -279,11 +140,10 @@ fun SignInScreen(navigator: DestinationsNavigator) {
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
) {
- UsernameAndPasswordTextField()
- Spacer(modifier = Modifier.height(8.dp))
+ Spacer(modifier = Modifier.height(48.dp))
Row(horizontalArrangement = Arrangement.Center) {
Button(
- onClick = ::signIn,
+ onClick = { navigator.navigate(WebViewSignInScreenDestination) },
modifier = Modifier.padding(horizontal = 4.dp).width(128.dp),
) {
Text(text = stringResource(id = R.string.sign_in))
@@ -296,46 +156,27 @@ fun SignInScreen(navigator: DestinationsNavigator) {
}
}
Spacer(modifier = Modifier.height(8.dp))
- Row(horizontalArrangement = Arrangement.Center) {
- TextButton(
- onClick = { navigator.navigate(WebViewSignInScreenDestination) },
- modifier = Modifier.padding(horizontal = 4.dp),
- ) {
- Text(
- text = buildAnnotatedString {
- withStyle(
- style = SpanStyle(textDecoration = TextDecoration.Underline),
- ) {
- append(stringResource(id = R.string.sign_in_via_webview))
- }
- },
- )
- }
- TextButton(
- onClick = {
- Settings.needSignIn = false
- Settings.gallerySite = EhUrl.SITE_E
- navigator.popNavigate(StartDestination)
+ TextButton(
+ onClick = {
+ Settings.needSignIn = false
+ Settings.gallerySite = EhUrl.SITE_E
+ navigator.popNavigate(StartDestination)
+ },
+ modifier = Modifier.padding(horizontal = 4.dp),
+ ) {
+ Text(
+ text = buildAnnotatedString {
+ withStyle(
+ style = SpanStyle(textDecoration = TextDecoration.Underline),
+ ) {
+ append(stringResource(id = R.string.guest_mode))
+ }
},
- modifier = Modifier.padding(horizontal = 4.dp),
- ) {
- Text(
- text = buildAnnotatedString {
- withStyle(
- style = SpanStyle(textDecoration = TextDecoration.Underline),
- ) {
- append(stringResource(id = R.string.guest_mode))
- }
- },
- )
- }
+ )
}
}
}
}
}
- if (isProgressIndicatorVisible) {
- CircularProgressIndicator()
- }
}
}
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 3b0aa63f2..187f4806e 100755
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -23,11 +23,8 @@
Verlauf
Downloads
Einstellungen
- Benutzername
- Kennwort
Anmelden
Konto erstellen
- Mit WebView anmelden
Melde dich zunächst an
Der Text wird nicht eingegeben
Achtung
@@ -49,7 +46,6 @@
Fehler beim Erhalten pTokens
Das Bild konnte nicht gespeichert werden
Nummer ungültig
- Verstanden
ExHentai durchsuchen
E-Hentai durchsuchen
Die Welt ist so groß und der Panda sitzt ganz allein
@@ -294,10 +290,7 @@
Screenshot verhindern
Screenshots werden verhindert. Inhalt der App wird in Aktuelle Apps-Liste nicht angezeigt.
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.
- Gibt den Nutzername ein
- Gibt das Passwort ein
Anmeldung überspringen
- Anmeldung fehlgeschlagen
Ein Link von einen Galerie wurde in Zwischenablage erkennt.
Gehen
Größe des Lesezwischenspeichers
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index cc240062f..983a7f3d4 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -26,12 +26,8 @@
Descargas
Configuración
- Usuario
- Contraseña
-
Iniciar sesión
Registrarse
- Iniciar sesión vía web
Por favor, inicie sesión primero
El texto está vacío
@@ -58,10 +54,7 @@
Número invalido
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
- El usuario no puede estar vacío
Saltar inicio de sesión
- Inicio de sesión fallido
- Entendido
Buscar ExHentai
@@ -385,7 +378,6 @@
Eliminar
Descarga fallida
Descarga en pausa
- La contraseña no puede estar vacía
Ocurrió algo malo
Privacidad
Bloqueo de galerías
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 2dbc9cc1c..5eef9e39a 100755
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -26,12 +26,8 @@
Téléchargement
Paramétres
- Nom d\'utilisateur
- Mot de passe
-
Se connecter
Créer un compte
- Se connecter via WebView
Connectez-vous pour continuer
Entrez le texte.
@@ -58,11 +54,7 @@
Nombre invalide
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.
- Nom d\'ultilisateur ne doit pas être une chaîne vide
- Mot de passe ne doit pas être une chaîne vide
Continuer sans se connecter
- Impossible de se connecter
- Compris
Chercher sur ExHentai
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 58f1b675e..dac465aeb 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -24,12 +24,8 @@
ダウンロード
設定
- ユーザー名
- パスワード
-
ログイン
登録
- Webでログイン
ログインしてください
テキストを入力してください
@@ -56,11 +52,7 @@
無効な数字です
このアプリの内容はインターネットから取得したものです。その内容の一部は使用者のお体や心理に傷つける恐れがあります。それでも続行しますか?
- ユーザー名を入力してください。
- パスワードを入力してください。
ログインをスキップ
- ログインに失敗しました。
- 了解
ExHentaiを検索
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index 4a3301eeb..596b7d7a7 100755
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -25,12 +25,8 @@
다운로드
설정
- 사용자 이름
- 비밀번호
-
로그인
회원가입
- WebView를 통하여 로그인
먼저 로그인하세요.
텍스트가 비어 있습니다.
@@ -60,11 +56,7 @@
잘못된 번호
이 앱의 내용은 인터넷에서 받아옵니다. 이 앱을 사용하기 위해서는 받아온 내용 중 일부가 사용자에게 가할 수 있는 신체적 또는 정신적 피해를 감수해야 합니다.
- 사용자 이름은 비워둘 수 없습니다.
- 비밀번호는 비워둘 수 없습니다.
로그인 없이 사용
- 로그인 실패
- 알겠습니다
ExHentai 검색
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index 0a1ba375c..388f6f953 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -8,8 +8,6 @@
Ukjent vert
For mange videresendinger
Nettverksfeil
- Passord
- Logg inn via WebView
Nedlastninger
Registrering
Ugyldig nummer
@@ -18,7 +16,6 @@
Historikk
Abonnement
Innstillinger
- Brukernavn
Logg inn
Logg inn først
Last ned
@@ -53,7 +50,6 @@
Torrenter
Flere forhåndsvisninger
Gjenoppfrisk
- Skjønner
Nøkkelordssøk
Etiketter
Ubegrenset
diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml
index 37ace0f92..4a40b124a 100644
--- a/app/src/main/res/values-th/strings.xml
+++ b/app/src/main/res/values-th/strings.xml
@@ -25,12 +25,8 @@
ดาวน์โหลด
การตั้งค่า
- ชื่อผู้ใช้
- รหัสผ่าน
-
ลงชื่อเข้าใช้
ลงทะเบียน
- ลงชื่อเข้าใช้ผ่านมุมมองเว็บไซต์
โปรดลงชื่อเข้าใช้ก่อนเป็นอันดับแรก
ข้อความห้ามเว้นว่างไว้
@@ -60,11 +56,7 @@
จำนวนไม่ถูกต้อง
เนื้อหาภายในแอปพลิเคชั่นนี้มาจากอินเทอร์เน็ตทั้งหมด อาจมีเนื้อหาบางอย่างที่มีผลต่อร่างกายหรือจิตใจของคุณ คุณจะต้องยอมรับความเสี่ยงที่ดังกล่าว และดำเนินการต่อไป
- ชื่อผู้ใช้ห้ามเว้นว่างไว้
- รหัสผ่านห้ามเว้นว่างไว้
ดำเนินการต่อโดยไม่ต้องลงชื่อเข้าระบบ
- การลงชื่อเข้าใช้ล้มเหลว
- เข้าใจแล้ว ไม่ต้องแสดงอีก
ค้นหาใน ExHentai
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 49baeb70e..516de4c2d 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -8,11 +8,8 @@
Geçmiş
İndirilenler
Ayarlar
- Kullanıcı adı
- Şifre
Giriş yap
Kaydol
- WebView aracılığıyla giriş yap
Lütfen önce giriş yap
Uyarı
İndirme konumu kullanılamıyor. Lütfen Ayarlardan ayarlayın.
@@ -33,11 +30,7 @@
pToken alınamadı
Görsel kaydedilemiyor
Geçersiz numara
- Kullanıcı adı boş bir metin olamaz
- Şifre boş bir metin olamaz
Giriş yapmaksızın devam et
- Giriş başarısız
- Anladım
Dünya büyük olmasına rağmen pandacık yalnız oturuyor
Anahtar Kelime Arama
Görsel Arama
@@ -68,7 +61,6 @@
Bilinmeyen host
Bu uygulamadaki içerikler internetten alınmaktadır. Bazı içerikler fiziksel veya zihinsel olarak size zararlı gelebilir.Yukarıda, riskleri öğrendiniz ve üstleneceksiniz.
\nKullanmaya devam ederek, yukarıdaki koşulları kabul edersiniz.
- Bu sorun devam ederse, \"WebView aracılığıyla giriş yap\" seçeneğini veya \"Çerez aracılığıyla giriş yap\" seçeneğini deneyin.
Galeriyi aç
E-Hentai\'de Arayın
Etiketlere Ayarlar->EH->Etiketlerim yerinden abone olun
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 77e59a739..474f30aac 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -22,11 +22,8 @@
历史
下载
设置
- 用户名
- 密码
登录
注册
- 通过网页登录
请先登录
文本为空
警告
@@ -52,12 +49,7 @@
非法数字
本应用中内容来自互联网,部分内容可能对您的生理及心理造成难以恢复的伤害。本应用作者不会对由本应用造成的任何后果负责。未成年人应在监护人指导下使用本应用。请遵守所在地的法律法规。
继续使用即代表您同意上述条款。
- 用户名不可为空
- 密码不可为空
游客模式
- 登录失败
- 若持续出错,请尝试“通过网页登录”或“通过 Cookie 登录”。
- 知道了
搜索 ExHentai
搜索 E-Hentai
diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml
index e3ca1e255..1b010abcf 100755
--- a/app/src/main/res/values-zh-rHK/strings.xml
+++ b/app/src/main/res/values-zh-rHK/strings.xml
@@ -26,12 +26,8 @@
下載
設置
- 用户名
- 密碼
-
登錄
註冊
- 通過網頁登錄
請先登錄
文本為空
@@ -61,12 +57,7 @@
非法數字
本應用中內容來自互聯網,部分內容可能對您的生理及心理造成難以恢復的傷害。本應用作者不會對由本應用造成的任何後果負責。\n\n未成年人應在監護人指導下使用本應用。
- 用户名不可為空
- 密碼不可為空
跳過登錄
- 登錄失敗
- 若持續出錯,請嘗試“通過網頁登錄”或“通過 Cookie 登錄”。
- 知道了
搜索 ExHentai
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index a2667edf4..c550c8ece 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -22,11 +22,8 @@
歷史
下載
設定
- 使用者名稱
- 密碼
登入
註冊
- 透過網頁登入
請先登入
文字是空的
警告
@@ -52,12 +49,7 @@
無效的數字
本應用程式中內容來自網際網路,部分內容可能對您的生理及心理造成難以恢復的傷害。本應用程式的作者不會對由其所造成的任何影響負責。\n\n未成年人應在監護人指導下使用本應用程式。\n\n繼續使用即代表您同意上述條款。
繼續使用即表示您同意上述條款。
- 使用者名稱欄位不能為空
- 密碼欄位不能為空
略過登入
- 登入失敗
- 若持續出錯,請嘗試“通過網頁登入”或“通過 Cookie 登入”。
- 知道了
在 ExHentai 搜尋
在 E-Hentai 搜尋
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5545ea540..aaf34745a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -36,11 +36,8 @@
History
Downloads
Settings
- Username
- Password
Sign in
Register
- Sign in via WebView
Please sign in first
Text is empty
Warning
@@ -90,12 +87,7 @@
Invalid number
The content of this application is from the Internet. Some of it may do physical or mental harm to you. You have learnt the risks above and would like to undertake them. By continuing to use it, you agree to the above terms.
By continuing to use it, you agree to the above terms.
- Username cannot be an empty string
- Password cannot be an empty string
Continue without signing in
- Sign in failed
- If this issue continues, try \"Sign in via WebView\" or \"Sign in via cookies\".
- Got it
Search ExHentai
Search E-Hentai