From c2963709cd72784c5ca74e52c0521a4623fae05f Mon Sep 17 00:00:00 2001 From: arkon Date: Sun, 16 Jul 2023 15:44:36 -0400 Subject: [PATCH 01/13] Use consistent extension icon URLs Better caching between versions. (cherry picked from commit 30f845139d76762798e2cdec7804a38806c3eeca) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt (cherry picked from commit 01e0c3c0401daec57e565b5bf5341e45f78c98d5) --- .../eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt index 61a84a26e..e2e9c0264 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt @@ -151,7 +151,7 @@ internal class ExtensionGithubApi { hasChangelog = it.hasChangelog == 1, sources = it.sources?.toExtensionSources() ?: emptyList(), apkName = it.apk, - iconUrl = "${/* SY --> */ repoUrl /* SY <-- */}icon/${it.apk.replace(".apk", ".png")}", + iconUrl = "${/* SY --> */ repoUrl /* SY <-- */}icon/${it.pkg}.png", // SY --> repoUrl = repoUrl, isRepoSource = repoSource, From d14cf0cceafa812f65f13ddd4054e20e37f8c54a Mon Sep 17 00:00:00 2001 From: Vlasov Roman Date: Thu, 19 Oct 2023 09:49:45 +0700 Subject: [PATCH 02/13] Change Shikimori domain from ".me" to ".one" (#10027) (cherry picked from commit 8f3681d79f1624a092e5c356c9459897f4220c29) (cherry picked from commit 2ba546009637f2a8a58fc59805a9ddac659abee8) --- .../eu/kanade/tachiyomi/data/track/shikimori/ShikimoriApi.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriApi.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriApi.kt index 5340f8562..2d16a10dc 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriApi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/shikimori/ShikimoriApi.kt @@ -158,7 +158,7 @@ class ShikimoriApi(private val client: OkHttpClient, interceptor: ShikimoriInter private const val clientId = "1aaf4cf232372708e98b5abc813d795b539c5a916dbbfe9ac61bf02a360832cc" private const val clientSecret = "229942c742dd4cde803125d17d64501d91c0b12e14cb1e5120184d77d67024c0" - private const val baseUrl = "https://shikimori.me" + private const val baseUrl = "https://shikimori.one" private const val apiUrl = "$baseUrl/api" private const val oauthUrl = "$baseUrl/oauth/token" private const val loginUrl = "$baseUrl/oauth/authorize" From 72ac3c275c67476c2781f80f906e86aa753d96f5 Mon Sep 17 00:00:00 2001 From: arkon Date: Wed, 25 Oct 2023 09:18:59 -0400 Subject: [PATCH 03/13] Avoid opening blobs as webpages Fixes #10060 (cherry picked from commit 548f7f415a28529522f5aef0d53546e8bc68957e) (cherry picked from commit 7ccb8eaaf24d5621f831826afd56210c6d93f2c7) # Conflicts: # app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt --- .../kanade/presentation/webview/WebViewScreenContent.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt b/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt index b496a6a05..9ed61803b 100644 --- a/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt +++ b/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt @@ -123,7 +123,13 @@ fun WebViewScreenContent( view: WebView?, request: WebResourceRequest?, ): Boolean { - request?.let { + request?.let { + // Don't attempt to open blobs as webpages + if (it.url.toString().startsWith("blob:http")) { + return false + } + + // Continue with request, but with custom headers view?.loadUrl(it.url.toString(), headers) } return super.shouldOverrideUrlLoading(view, request) From f645440c12f4e745f64331014492a97d74f53e48 Mon Sep 17 00:00:00 2001 From: arkon Date: Tue, 24 Oct 2023 21:58:53 -0400 Subject: [PATCH 04/13] Update default user agent string (cherry picked from commit 092d930175e7a9a6e1bb73f8d97948903db06d67) (cherry picked from commit f25b70cdef339b4bdf90006eff9a75be7a46fd0a) # Conflicts: # core/src/main/java/eu/kanade/tachiyomi/network/NetworkPreferences.kt --- .../java/eu/kanade/tachiyomi/network/NetworkPreferences.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/eu/kanade/tachiyomi/network/NetworkPreferences.kt b/core/src/main/java/eu/kanade/tachiyomi/network/NetworkPreferences.kt index 1fdb1d81a..b552f4423 100644 --- a/core/src/main/java/eu/kanade/tachiyomi/network/NetworkPreferences.kt +++ b/core/src/main/java/eu/kanade/tachiyomi/network/NetworkPreferences.kt @@ -17,6 +17,9 @@ class NetworkPreferences( } fun defaultUserAgent(): Preference { - return preferenceStore.getString("default_user_agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:110.0) Gecko/20100101 Firefox/110.0") + return preferenceStore.getString( + "default_user_agent", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0", + ) } } From 3aefee3ce097a41f58e43108d7256fcdade8f852 Mon Sep 17 00:00:00 2001 From: arkon Date: Sun, 10 Sep 2023 18:16:53 -0400 Subject: [PATCH 05/13] Update website links (cherry picked from commit ccc9a5a052b133174f8ba361490386ff0361283e) (cherry picked from commit bc5ba6092b3ec2f2cd5eae5a5a80fec7bf23f414) # Conflicts: # CONTRIBUTING.md # app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/AboutScreen.kt # app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateNotifier.kt # app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt # app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsScreenModel.kt --- CONTRIBUTING.md | 2 +- app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt | 2 +- .../kanade/presentation/more/settings/screen/AboutScreen.kt | 4 ++-- .../eu/kanade/tachiyomi/data/library/LibraryUpdateNotifier.kt | 4 ++-- .../eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt | 2 +- app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt | 2 +- .../browse/extension/details/ExtensionDetailsScreenModel.kt | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 91d8db27d..15d4d1b3a 100755 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -30,7 +30,7 @@ Before you start, please note that the ability to use following technologies is # Translations -Translations are done externally via Weblate. See [our website](https://tachiyomi.org/help/contribution/#translation) for more details. +Translations are done externally via Weblate. See [our website](https://tachiyomi.org/docs/contribute#translation) for more details. # Forks diff --git a/app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt b/app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt index 2d508f0eb..2ff074058 100644 --- a/app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt @@ -72,7 +72,7 @@ fun MoreScreen( WarningBanner( textRes = R.string.fdroid_warning, modifier = Modifier.clickable { - uriHandler.openUri("https://tachiyomi.org/help/faq/#how-do-i-migrate-from-the-f-droid-version") + uriHandler.openUri("https://tachiyomi.org/docs/faq/general#how-do-i-update-from-the-f-droid-builds") }, ) } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/AboutScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/AboutScreen.kt index 602682e05..ecc682659 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/AboutScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/AboutScreen.kt @@ -129,7 +129,7 @@ object AboutScreen : Screen { item { TextPreferenceWidget( title = stringResource(R.string.help_translate), - onPreferenceClick = { uriHandler.openUri("https://tachiyomi.org/help/contribution/#translation") }, + onPreferenceClick = { uriHandler.openUri("https://tachiyomi.org/docs/contribute#translation") }, ) } @@ -143,7 +143,7 @@ object AboutScreen : Screen { item { TextPreferenceWidget( title = stringResource(R.string.privacy_policy), - onPreferenceClick = { uriHandler.openUri("https://tachiyomi.org/privacy") }, + onPreferenceClick = { uriHandler.openUri("https://tachiyomi.org/privacy/") }, ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateNotifier.kt index 9a989fdb6..ebbf1314d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateNotifier.kt @@ -340,11 +340,11 @@ class LibraryUpdateNotifier(private val context: Context) { } companion object { - const val HELP_WARNING_URL = "https://tachiyomi.org/help/faq/#why-does-the-app-warn-about-large-bulk-updates-and-downloads" + const val HELP_WARNING_URL = "https://tachiyomi.org/docs/faq/library#why-am-i-warned-about-large-bulk-updates-and-downloads" } } private const val NOTIF_MAX_CHAPTERS = 5 private const val NOTIF_TITLE_MAX_LEN = 45 private const val NOTIF_ICON_SIZE = 192 -private const val HELP_SKIPPED_URL = "https://tachiyomi.org/help/faq/#why-does-global-update-skip-some-entries" +private const val HELP_SKIPPED_URL = "https://tachiyomi.org/docs/faq/library#why-is-global-update-skipping-entries" diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt index 53aacd4cf..650a94a9c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateNotifier.kt @@ -138,7 +138,7 @@ internal class AppUpdateNotifier(private val context: Context) { setContentTitle(context.getString(R.string.update_check_notification_update_available)) setContentText(context.getString(R.string.update_check_fdroid_migration_info)) setSmallIcon(R.drawable.ic_tachi) - setContentIntent(NotificationHandler.openUrl(context, "https://tachiyomi.org/help/faq/#how-do-i-migrate-from-the-f-droid-version")) + setContentIntent(NotificationHandler.openUrl(context, "https://tachiyomi.org/docs/faq/general#how-do-i-update-from-the-f-droid-builds")) } notificationBuilder.show(Notifications.ID_APP_UPDATE_PROMPT) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt b/app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt index b3f817f27..80dd46b32 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/LocalSource.kt @@ -410,7 +410,7 @@ class LocalSource( companion object { const val ID = 0L - const val HELP_URL = "https://tachiyomi.org/help/guides/local-manga/" + const val HELP_URL = "https://tachiyomi.org/docs/guides/local-source/" private const val DEFAULT_COVER_NAME = "cover.jpg" private val LATEST_THRESHOLD = TimeUnit.MILLISECONDS.convert(7, TimeUnit.DAYS) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsScreenModel.kt index 1cdf9c16d..fb594cde1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsScreenModel.kt @@ -102,7 +102,7 @@ class ExtensionDetailsScreenModel( val extension = state.value.extension ?: return "" if (!extension.hasReadme) { - return "https://tachiyomi.org/help/faq/#extensions" + return "https://tachiyomi.org/docs/faq/browse/extensions" } val pkgName = extension.pkgName.substringAfter("eu.kanade.tachiyomi.extension.") From 4cab34e06c1c8d4eb30563f77cbb2cb702833ab4 Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Sun, 1 Oct 2023 16:48:58 -0400 Subject: [PATCH 06/13] Use readableAt (cherry picked from commit d37463cf0f091ade15fa80c7b75fe378a45eee61) --- app/src/main/java/exh/md/dto/ChapterDto.kt | 1 + app/src/main/java/exh/md/handlers/ApiMangaParser.kt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/exh/md/dto/ChapterDto.kt b/app/src/main/java/exh/md/dto/ChapterDto.kt index d7ff47912..52c22c354 100644 --- a/app/src/main/java/exh/md/dto/ChapterDto.kt +++ b/app/src/main/java/exh/md/dto/ChapterDto.kt @@ -36,6 +36,7 @@ data class ChapterAttributesDto( val createdAt: String, val updatedAt: String, val publishAt: String, + val readableAt: String, ) @Serializable diff --git a/app/src/main/java/exh/md/handlers/ApiMangaParser.kt b/app/src/main/java/exh/md/handlers/ApiMangaParser.kt index 7665e7cab..45659d4f0 100644 --- a/app/src/main/java/exh/md/handlers/ApiMangaParser.kt +++ b/app/src/main/java/exh/md/handlers/ApiMangaParser.kt @@ -245,7 +245,7 @@ class ApiMangaParser( val name = chapterName.toString() // Convert from unix time - val dateUpload = MdUtil.parseDate(attributes.publishAt) + val dateUpload = MdUtil.parseDate(attributes.readableAt) val scanlatorName = networkChapter.relationships .filter { From e0480ce8c38256fca738746ac33f918dc7eb9045 Mon Sep 17 00:00:00 2001 From: AntsyLich <59261191+AntsyLich@users.noreply.github.com> Date: Mon, 30 Oct 2023 04:12:04 +0600 Subject: [PATCH 07/13] pain (#968) (cherry picked from commit 8fc04d8cc6ff7cf0135b9facbb57072614a2f9b2) --- .../presentation/browse/components/BrowseSourceEHentaiList.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceEHentaiList.kt b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceEHentaiList.kt index 570855ab5..1846166a7 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceEHentaiList.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceEHentaiList.kt @@ -171,7 +171,7 @@ fun BrowseSourceEHentaiListItem( drawRect(overlayColor) } }, - data = manga.thumbnailUrl, + data = manga, ) if (manga.favorite) { BadgeGroup( From 099758f02dc25a3ef4f3759c1e8c71d7bbffa2e5 Mon Sep 17 00:00:00 2001 From: Luqman Date: Mon, 30 Oct 2023 05:13:52 +0700 Subject: [PATCH 08/13] Fix Mangadex recommendation (#951) * Fix Md recs Disable Md recs if delegated setting is disabled * Revert "Fix Md recs" This reverts commit 7dbfa662be2665aa97664720df42e2562bc4adb0. * Rerun This reverts commit 971315278b92bcabfbf6b5610cb1c63e281bc172. (cherry picked from commit 6baa24273a098f492a11efe29e93ef3f64cfd951) --- app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt index 439c39f75..d67519e57 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt @@ -63,6 +63,7 @@ import eu.kanade.tachiyomi.util.system.toShareIntent import eu.kanade.tachiyomi.util.system.toast import exh.md.similar.MangaDexSimilarScreen import exh.pagepreview.PagePreviewScreen +import exh.pref.DelegateSourcePreferences import exh.recs.RecommendsScreen import exh.source.MERGED_SOURCE_ID import exh.source.getMainSource @@ -503,7 +504,7 @@ class MangaScreen( // AZ --> private fun openRecommends(context: Context, navigator: Navigator, source: Source?, manga: Manga) { source ?: return - if (source.isMdBasedSource()) { + if (source.isMdBasedSource() && Injekt.get().delegateSources().get()) { MaterialAlertDialogBuilder(context) .setTitle(R.string.az_recommends) .setSingleChoiceItems( From 0d894d5977a5f5189e98746a47338ae34d184b9e Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Fri, 27 Oct 2023 17:12:46 -0400 Subject: [PATCH 09/13] Fix crash on Chinese (cherry picked from commit 729e13cc1a090d73f0ae5f7f4b77d910fdb0d8a0) --- i18n/src/main/res/values-zh-rCN/strings_sy.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/i18n/src/main/res/values-zh-rCN/strings_sy.xml b/i18n/src/main/res/values-zh-rCN/strings_sy.xml index 09dc6b48b..3e325fd0a 100644 --- a/i18n/src/main/res/values-zh-rCN/strings_sy.xml +++ b/i18n/src/main/res/values-zh-rCN/strings_sy.xml @@ -135,7 +135,7 @@ 忽略 JPEG 图像 忽略 Gif 动画 图像质量 - 更高值意味着更高的保存的图像质量,但这意味着更大的文件大小,80% 可以很好地平衡图片质量和文件大小 + 更高值意味着更高的保存的图像质量,但这意味着更大的文件大小,80\% 可以很好地平衡图片质量和文件大小 压缩为 JPEG JPEG 文件的大小要比 Webp 小得多(意味着节省了更多的流量),但它也会使图像损失更多的质量。\n目前压缩为 JPEG JPEG 文件的大小要比 Webp 小得多(意味着节省了更多的流量),但它也会使图像损失更多的质量。\n目前压缩为 Webp From 230aec370ca088e3c3290db9c3a64ee873a01f6c Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Fri, 27 Oct 2023 17:13:27 -0400 Subject: [PATCH 10/13] Fix import of reader preferences in reader (cherry picked from commit 90281affc4bcd12c07cb036f948497002f78c197) --- .../main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt | 2 +- .../java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt index feefa3d43..a86c6730e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt @@ -322,7 +322,7 @@ class ReaderViewModel( val context = Injekt.get() // val source = sourceManager.getOrStub(manga.source) - loader = ChapterLoader(context, downloadManager, downloadProvider, manga, source, /* SY --> */sourceManager, mergedReferences, mergedManga/* SY <-- */) + loader = ChapterLoader(context, downloadManager, downloadProvider, manga, source, /* SY --> */sourceManager, readerPreferences, mergedReferences, mergedManga/* SY <-- */) loadChapter(loader!!, chapterList.first { chapterId == it.chapter.id } /* SY --> */, page/* SY <-- */) Result.success(true) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt index b3a03ac9c..3024040f0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt @@ -11,7 +11,7 @@ import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.source.online.all.MergedSource import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter -import exh.debug.DebugFunctions.readerPrefs +import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.system.logcat import tachiyomi.domain.manga.model.Manga @@ -28,6 +28,7 @@ class ChapterLoader( private val source: Source, // SY --> private val sourceManager: SourceManager, + private val readerPrefs: ReaderPreferences, private val mergedReferences: List, private val mergedManga: Map, // SY <-- From 7565e51f951328c663ee32ffc101a926bf3334e3 Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Fri, 27 Oct 2023 17:13:54 -0400 Subject: [PATCH 11/13] Fix page previews after E-H update (cherry picked from commit d45563e58d7f5f8f50046e0dbb8dc2e147ac0789) --- .../tachiyomi/source/online/all/EHentai.kt | 77 ++++++++++--------- 1 file changed, 39 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt index d2279482e..3aad2d3bf 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt @@ -1143,18 +1143,23 @@ class EHentai( .toString(), ), ).awaitSuccess().asJsoup() - val previews = if (doc.selectFirst("div#gdo4 .ths")!!.attr("onClick").contains("inline_set=ts_l")) { - doc.body() - .select("#gdt div a") - .map { - PagePreviewInfo(it.text().toInt(), imageUrl = it.select("img").attr("src")) - } - } else { - parseNormalPreviewSet(doc) - .map { preview -> - PagePreviewInfo(preview.index, imageUrl = preview.toUrl()) - } - } + + val body = doc.body() + val previews = body + .select("#gdt div div") + .map { + val preview = parseNormalPreview(it) + PagePreviewInfo(preview.index, imageUrl = preview.toUrl()) + } + .ifEmpty { + body.select("#gdt div a img") + .map { + PagePreviewInfo( + it.attr("alt").toInt(), + imageUrl = it.attr("src") + ) + } + } return PagePreviewPage( page = page, @@ -1175,37 +1180,33 @@ class EHentai( /** * Parse normal previews with regular expressions */ - private fun parseNormalPreviewSet(doc: Document): List { - return doc.body() - .select("#gdt div div") - .map { it.selectFirst("img")!!.attr("alt").toInt() to it.attr("style") } - .map { (index, style) -> - val styles = style.split(";").mapNotNull { it.trimOrNull() } - val width = styles.first { it.startsWith("width:") } - .removePrefix("width:") - .removeSuffix("px") - .toInt() + private fun parseNormalPreview(element: Element): EHentaiThumbnailPreview { + val index = element.selectFirst("img")!!.attr("alt").toInt() + val styles = element.attr("style").split(";").mapNotNull { it.trimOrNull() } + val width = styles.first { it.startsWith("width:") } + .removePrefix("width:") + .removeSuffix("px") + .toInt() - val height = styles.first { it.startsWith("height:") } - .removePrefix("height:") - .removeSuffix("px") - .toInt() + val height = styles.first { it.startsWith("height:") } + .removePrefix("height:") + .removeSuffix("px") + .toInt() - val background = styles.first { it.startsWith("background:") } - .removePrefix("background:") - .split(" ") + val background = styles.first { it.startsWith("background:") } + .removePrefix("background:") + .split(" ") - val url = background.first { it.startsWith("url(") } - .removePrefix("url(") - .removeSuffix(")") + val url = background.first { it.startsWith("url(") } + .removePrefix("url(") + .removeSuffix(")") - val widthOffset = background.first { it.startsWith("-") } - .removePrefix("-") - .removeSuffix("px") - .toInt() + val widthOffset = background.first { it.startsWith("-") } + .removePrefix("-") + .removeSuffix("px") + .toInt() - EHentaiThumbnailPreview(url, width, height, widthOffset, index) - } + return EHentaiThumbnailPreview(url, width, height, widthOffset, index).also(::println) } data class EHentaiThumbnailPreview( val imageUrl: String, From 6ba8318b8a0ddc74ab3482471d5ca2ffba23dcfb Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Fri, 27 Oct 2023 17:14:38 -0400 Subject: [PATCH 12/13] Fix page previews cache (cherry picked from commit d600ddc11ad496ab5c8b879b18e6bb1187a05799) # Conflicts: # app/build.gradle.kts # app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt # app/src/main/java/exh/EXHMigrations.kt # app/src/main/java/exh/debug/DebugFunctions.kt --- .../webview/WebViewScreenContent.kt | 2 +- .../tachiyomi/data/cache/PagePreviewCache.kt | 11 ++-- .../tachiyomi/data/coil/PagePreviewFetcher.kt | 55 ++++++++++--------- .../tachiyomi/source/online/all/EHentai.kt | 2 +- .../kanade/tachiyomi/ui/main/MainActivity.kt | 1 + app/src/main/java/exh/EXHMigrations.kt | 17 ++++++ app/src/main/java/exh/debug/DebugFunctions.kt | 32 ++++++++++- 7 files changed, 84 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt b/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt index 9ed61803b..a5b18ca3e 100644 --- a/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt +++ b/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt @@ -123,7 +123,7 @@ fun WebViewScreenContent( view: WebView?, request: WebResourceRequest?, ): Boolean { - request?.let { + request?.let { // Don't attempt to open blobs as webpages if (it.url.toString().startsWith("blob:http")) { return false diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/cache/PagePreviewCache.kt b/app/src/main/java/eu/kanade/tachiyomi/data/cache/PagePreviewCache.kt index bbb7c6ba1..21f3eda3d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/cache/PagePreviewCache.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/cache/PagePreviewCache.kt @@ -9,9 +9,11 @@ import eu.kanade.tachiyomi.util.storage.saveTo import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json -import okhttp3.Response +import logcat.LogPriority +import okio.Source import okio.buffer import okio.sink +import tachiyomi.core.util.system.logcat import tachiyomi.domain.manga.model.Manga import uy.kohesive.injekt.injectLazy import java.io.File @@ -159,7 +161,7 @@ class PagePreviewCache(private val context: Context) { * @throws IOException page error. */ @Throws(IOException::class) - fun putImageToCache(imageUrl: String, response: Response) { + fun putImageToCache(imageUrl: String, source: Source) { // Initialize editor (edits the values for an entry). var editor: DiskLruCache.Editor? = null @@ -169,12 +171,12 @@ class PagePreviewCache(private val context: Context) { editor = diskCache.edit(key) ?: throw IOException("Unable to edit key") // Get OutputStream and write page with Okio. - response.body.source().saveTo(editor.newOutputStream(0)) + source.buffer().saveTo(editor.newOutputStream(0)) diskCache.flush() editor.commit() } finally { - response.body.close() + source.close() editor?.abortUnlessCommitted() } } @@ -207,6 +209,7 @@ class PagePreviewCache(private val context: Context) { // Remove file from cache. diskCache.remove(key) } catch (e: Exception) { + logcat(LogPriority.WARN, e) { "Failed to remove file from cache" } false } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/coil/PagePreviewFetcher.kt b/app/src/main/java/eu/kanade/tachiyomi/data/coil/PagePreviewFetcher.kt index 50a212c4c..432a4069a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/coil/PagePreviewFetcher.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/coil/PagePreviewFetcher.kt @@ -24,8 +24,6 @@ import okhttp3.Response import okhttp3.internal.http.HTTP_NOT_MODIFIED import okio.Path.Companion.toOkioPath import okio.Source -import okio.buffer -import okio.sink import tachiyomi.core.util.system.logcat import uy.kohesive.injekt.injectLazy import java.io.File @@ -39,7 +37,9 @@ import java.io.File class PagePreviewFetcher( private val page: PagePreview, private val options: Options, - private val pagePreviewFileLazy: Lazy, + private val pagePreviewFile: () -> File, + private val isInCache: () -> Boolean, + private val writeToCache: (Source) -> Unit, private val diskCacheKeyLazy: Lazy, private val sourceLazy: Lazy, private val callFactoryLazy: Lazy, @@ -62,14 +62,14 @@ class PagePreviewFetcher( } private suspend fun httpLoader(): FetchResult { - if (pagePreviewFileLazy.value.exists() && options.diskCachePolicy.readEnabled) { - return fileLoader(pagePreviewFileLazy.value) + if (isInCache() && options.diskCachePolicy.readEnabled) { + return fileLoader(pagePreviewFile()) } var snapshot = readFromDiskCache() try { // Fetch from disk cache if (snapshot != null) { - val snapshotPagePreviewCache = moveSnapshotToPagePreviewCache(snapshot, pagePreviewFileLazy.value) + val snapshotPagePreviewCache = moveSnapshotToPagePreviewCache(snapshot) if (snapshotPagePreviewCache != null) { // Read from page preview cache return fileLoader(snapshotPagePreviewCache) @@ -88,7 +88,7 @@ class PagePreviewFetcher( val responseBody = checkNotNull(response.body) { "Null response source" } try { // Read from page preview cache after page preview updated - val responsePagePreviewCache = writeResponseToPagePreviewCache(response, pagePreviewFileLazy.value) + val responsePagePreviewCache = writeResponseToPagePreviewCache(response) if (responsePagePreviewCache != null) { return fileLoader(responsePagePreviewCache) } @@ -153,45 +153,44 @@ class PagePreviewFetcher( return request.build() } - private fun moveSnapshotToPagePreviewCache(snapshot: DiskCache.Snapshot, cacheFile: File): File? { + private fun moveSnapshotToPagePreviewCache(snapshot: DiskCache.Snapshot): File? { return try { diskCacheLazy.value.run { fileSystem.source(snapshot.data).use { input -> - writeSourceToPagePreviewCache(input, cacheFile) + writeSourceToPagePreviewCache(input) } remove(diskCacheKey) } - cacheFile.takeIf { it.exists() } + return if (isInCache()) { + pagePreviewFile() + } else { + null + } } catch (e: Exception) { - logcat(LogPriority.ERROR, e) { "Failed to write snapshot data to page preview cache ${cacheFile.name}" } + logcat(LogPriority.ERROR, e) { "Failed to write snapshot data to page preview cache $diskCacheKey" } null } } - private fun writeResponseToPagePreviewCache(response: Response, cacheFile: File): File? { + private fun writeResponseToPagePreviewCache(response: Response): File? { if (!options.diskCachePolicy.writeEnabled) return null return try { response.peekBody(Long.MAX_VALUE).source().use { input -> - writeSourceToPagePreviewCache(input, cacheFile) + writeSourceToPagePreviewCache(input) + } + return if (isInCache()) { + pagePreviewFile() + } else { + null } - cacheFile.takeIf { it.exists() } } catch (e: Exception) { - logcat(LogPriority.ERROR, e) { "Failed to write response data to page preview cache ${cacheFile.name}" } + logcat(LogPriority.ERROR, e) { "Failed to write response data to page preview cache $diskCacheKey" } null } } - private fun writeSourceToPagePreviewCache(input: Source, cacheFile: File) { - cacheFile.parentFile?.mkdirs() - cacheFile.delete() - try { - cacheFile.sink().buffer().use { output -> - output.writeAll(input) - } - } catch (e: Exception) { - cacheFile.delete() - throw e - } + private fun writeSourceToPagePreviewCache(input: Source) { + writeToCache(input) } private fun readFromDiskCache(): DiskCache.Snapshot? { @@ -232,7 +231,9 @@ class PagePreviewFetcher( return PagePreviewFetcher( page = data, options = options, - pagePreviewFileLazy = lazy { pagePreviewCache.getImageFile(data.imageUrl) }, + pagePreviewFile = { pagePreviewCache.getImageFile(data.imageUrl) }, + isInCache = { pagePreviewCache.isImageInCache(data.imageUrl) }, + writeToCache = { pagePreviewCache.putImageToCache(data.imageUrl, it) }, diskCacheKeyLazy = lazy { PagePreviewKeyer().key(data, options) }, sourceLazy = lazy { sourceManager.get(data.source) as? PagePreviewSource }, callFactoryLazy = callFactoryLazy, diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt index 3aad2d3bf..25354a022 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt @@ -1156,7 +1156,7 @@ class EHentai( .map { PagePreviewInfo( it.attr("alt").toInt(), - imageUrl = it.attr("src") + imageUrl = it.attr("src"), ) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt index 15c381833..82044db2d 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt @@ -180,6 +180,7 @@ class MainActivity : BaseActivity() { libraryPreferences = libraryPreferences, readerPreferences = Injekt.get(), backupPreferences = Injekt.get(), + pagePreviewCache = Injekt.get(), ) } else { false diff --git a/app/src/main/java/exh/EXHMigrations.kt b/app/src/main/java/exh/EXHMigrations.kt index 9c6ce359b..dff924b27 100644 --- a/app/src/main/java/exh/EXHMigrations.kt +++ b/app/src/main/java/exh/EXHMigrations.kt @@ -21,6 +21,7 @@ import eu.kanade.domain.ui.UiPreferences import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.core.security.SecurityPreferences import eu.kanade.tachiyomi.data.backup.BackupCreatorJob +import eu.kanade.tachiyomi.data.cache.PagePreviewCache import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.library.LibraryUpdateJob import eu.kanade.tachiyomi.data.preference.MANGA_NON_COMPLETED @@ -56,6 +57,7 @@ import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.contentOrNull import kotlinx.serialization.json.jsonArray import kotlinx.serialization.json.jsonPrimitive +import logcat.LogPriority import tachiyomi.core.preference.PreferenceStore import tachiyomi.core.util.system.logcat import tachiyomi.data.DatabaseHandler @@ -102,6 +104,7 @@ object EXHMigrations { libraryPreferences: LibraryPreferences, readerPreferences: ReaderPreferences, backupPreferences: BackupPreferences, + pagePreviewCache: PagePreviewCache, ): Boolean { val lastVersionCode = preferenceStore.getInt("eh_last_version_code", 0) val oldVersion = lastVersionCode.get() @@ -515,6 +518,20 @@ object EXHMigrations { val trackManager = Injekt.get() trackManager.mdList.logout() } + if (oldVersion under 51) { + pagePreviewCache.clear() + File(context.cacheDir, PagePreviewCache.PARAMETER_CACHE_DIRECTORY).listFiles()?.forEach { + if (it.name == "journal" || it.name.startsWith("journal.")) { + return@forEach + } + + try { + it.delete() + } catch (e: Exception) { + logcat(LogPriority.WARN, e) { "Failed to remove file from cache" } + } + } + } // if (oldVersion under 1) { } (1 is current release version) // do stuff here when releasing changed crap diff --git a/app/src/main/java/exh/debug/DebugFunctions.kt b/app/src/main/java/exh/debug/DebugFunctions.kt index c3eb1ba55..5c7109a83 100644 --- a/app/src/main/java/exh/debug/DebugFunctions.kt +++ b/app/src/main/java/exh/debug/DebugFunctions.kt @@ -17,6 +17,7 @@ import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.domain.ui.UiPreferences import eu.kanade.tachiyomi.core.security.SecurityPreferences import eu.kanade.tachiyomi.data.backup.models.Backup +import eu.kanade.tachiyomi.data.cache.PagePreviewCache import eu.kanade.tachiyomi.network.NetworkPreferences import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.online.all.NHentai @@ -57,17 +58,42 @@ object DebugFunctions { val getExhFavoriteMangaWithMetadata: GetExhFavoriteMangaWithMetadata by injectLazy() val getSearchMetadata: GetSearchMetadata by injectLazy() val getAllManga: GetAllManga by injectLazy() + val pagePreviewCache: PagePreviewCache by injectLazy() fun forceUpgradeMigration() { val lastVersionCode = prefsStore.getInt("eh_last_version_code", 0) lastVersionCode.set(1) - EXHMigrations.upgrade(app, prefsStore, basePrefs, uiPrefs, networkPrefs, sourcePrefs, securityPrefs, libraryPrefs, readerPrefs, backupPrefs) + EXHMigrations.upgrade( + context = app, + preferenceStore = prefsStore, + basePreferences = basePrefs, + uiPreferences = uiPrefs, + networkPreferences = networkPrefs, + sourcePreferences = sourcePrefs, + securityPreferences = securityPrefs, + libraryPreferences = libraryPrefs, + readerPreferences = readerPrefs, + backupPreferences = backupPrefs, + pagePreviewCache = pagePreviewCache, + ) } fun forceSetupJobs() { val lastVersionCode = prefsStore.getInt("eh_last_version_code", 0) lastVersionCode.set(0) - EXHMigrations.upgrade(app, prefsStore, basePrefs, uiPrefs, networkPrefs, sourcePrefs, securityPrefs, libraryPrefs, readerPrefs, backupPrefs) + EXHMigrations.upgrade( + context = app, + preferenceStore = prefsStore, + basePreferences = basePrefs, + uiPreferences = uiPrefs, + networkPreferences = networkPrefs, + sourcePreferences = sourcePrefs, + securityPreferences = securityPrefs, + libraryPreferences = libraryPrefs, + readerPreferences = readerPrefs, + backupPreferences = backupPrefs, + pagePreviewCache = pagePreviewCache, + ) } fun resetAgedFlagInEXHManga() { @@ -187,7 +213,7 @@ object DebugFunctions { """ { id: ${info.id}, - isPeriodic: ${j.extras["EXTRA_IS_PERIODIC"]}, + isPeriodic: ${j.extras.getBoolean("EXTRA_IS_PERIODIC")}, state: ${info.state.name}, tags: [ ${info.tags.joinToString(separator = ",\n ")} From 2f9cba87b551e62a657b0bd7e06b534cf4d048c3 Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Sun, 29 Oct 2023 18:45:34 -0400 Subject: [PATCH 13/13] Release v1.9.4 --- .github/ISSUE_TEMPLATE.md | 2 +- .github/ISSUE_TEMPLATE/report_issue.yml | 4 ++-- .github/ISSUE_TEMPLATE/request_feature.yml | 2 +- app/build.gradle.kts | 4 ++-- app/src/main/res/raw/changelog_release.xml | 9 +++++++++ 5 files changed, 15 insertions(+), 6 deletions(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 7b43b23bf..d23f92b79 100755 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -3,7 +3,7 @@ I acknowledge that: - I have updated: - - To the latest version of the app (stable is v1.9.3) + - To the latest version of the app (stable is v1.9.4) - All extensions - I have tried the troubleshooting guide: https://tachiyomi.org/help/guides/troubleshooting-problems/ - If this is an issue with an extension, that I should be opening an issue in https://github.com/tachiyomiorg/tachiyomi-extensions diff --git a/.github/ISSUE_TEMPLATE/report_issue.yml b/.github/ISSUE_TEMPLATE/report_issue.yml index 7397843b5..cd8c40139 100644 --- a/.github/ISSUE_TEMPLATE/report_issue.yml +++ b/.github/ISSUE_TEMPLATE/report_issue.yml @@ -53,7 +53,7 @@ body: label: Tachiyomi version description: You can find your Tachiyomi version in **More → About**. placeholder: | - Example: "1.9.3" + Example: "1.9.4" validations: required: true @@ -100,7 +100,7 @@ body: required: true - label: I have tried the [troubleshooting guide](https://tachiyomi.org/help/guides/troubleshooting/). required: true - - label: I have updated the app to version **[1.9.3](https://github.com/jobobby04/tachiyomisy/releases/latest)**. + - label: I have updated the app to version **[1.9.4](https://github.com/jobobby04/tachiyomisy/releases/latest)**. required: true - label: I have updated all installed extensions. required: true diff --git a/.github/ISSUE_TEMPLATE/request_feature.yml b/.github/ISSUE_TEMPLATE/request_feature.yml index f9109a4a5..5567f4c57 100644 --- a/.github/ISSUE_TEMPLATE/request_feature.yml +++ b/.github/ISSUE_TEMPLATE/request_feature.yml @@ -33,7 +33,7 @@ body: required: true - label: If this is an issue with an extension, I should be opening an issue in the [extensions repository](https://github.com/tachiyomiorg/tachiyomi-extensions/issues/new/choose). required: true - - label: I have updated the app to version **[1.9.3](https://github.com/jobobby04/tachiyomisy/releases/latest)**. + - label: I have updated the app to version **[1.9.4](https://github.com/jobobby04/tachiyomisy/releases/latest)**. required: true - label: I will fill out all of the requested information in this form. required: true diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f6b82e5be..15912bb58 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -26,8 +26,8 @@ android { defaultConfig { applicationId = "eu.kanade.tachiyomi.sy" - versionCode = 50 - versionName = "1.9.3" + versionCode = 51 + versionName = "1.9.4" buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"") buildConfigField("String", "COMMIT_SHA", "\"${getGitSha()}\"") diff --git a/app/src/main/res/raw/changelog_release.xml b/app/src/main/res/raw/changelog_release.xml index c3d992f65..f25e1b6cf 100755 --- a/app/src/main/res/raw/changelog_release.xml +++ b/app/src/main/res/raw/changelog_release.xml @@ -1,5 +1,14 @@ + + [b]Based on Tachiyomi stable 0.14.7(from 0.14.6)[/b] + Use ReadableAt for MangaDex dates + Fix E-H/Exh page previews + Fix page previews cache + Fix E-H/Exh browse thumbnails + Fix crash on Chinese + Fix Mangadex Recommendations when Delegation is off + Hotfix for 1.9.2, fix backup restore