From 7f567eaad22700c93cb4f9245ec543c24bcb8bf0 Mon Sep 17 00:00:00 2001 From: "Cuong M. Tran" Date: Sat, 18 May 2024 16:51:22 +0700 Subject: [PATCH] What's New & Preview peeking - Showing What's New from all Github's release notes - Add button to show What's Coming from Preview repo - Add regex to styling Github's comparing link (cherry picked from commit 06cfba58998fa7d1ff39be80770f16833f81409c) --- .../presentation/more/ComingUpdatesScreen.kt | 90 +++++ .../presentation/more/NewUpdateScreen.kt | 3 +- .../presentation/more/WhatsNewScreen.kt | 89 +++++ .../more/settings/screen/about/AboutScreen.kt | 115 +++++- .../data/updater/AppUpdateChecker.kt | 40 ++- .../tachiyomi/ui/more/ComingUpdatesScreen.kt | 43 +++ .../tachiyomi/ui/more/WhatsNewScreen.kt | 35 ++ app/src/main/res/raw/changelog_debug.xml | 331 +---------------- app/src/main/res/raw/changelog_release.xml | 336 +----------------- .../tachiyomi/data/release/GithubRelease.kt | 38 +- .../data/release/ReleaseServiceImpl.kt | 12 + .../interactor/GetApplicationRelease.kt | 40 ++- .../tachiyomi/domain/release/model/Release.kt | 4 + .../domain/release/service/ReleaseService.kt | 4 + .../commonMain/resources/MR/base/strings.xml | 1 + .../commonMain/resources/MR/base/strings.xml | 3 + 16 files changed, 526 insertions(+), 658 deletions(-) create mode 100644 app/src/main/java/eu/kanade/presentation/more/ComingUpdatesScreen.kt create mode 100644 app/src/main/java/eu/kanade/presentation/more/WhatsNewScreen.kt create mode 100644 app/src/main/java/eu/kanade/tachiyomi/ui/more/ComingUpdatesScreen.kt create mode 100644 app/src/main/java/eu/kanade/tachiyomi/ui/more/WhatsNewScreen.kt diff --git a/app/src/main/java/eu/kanade/presentation/more/ComingUpdatesScreen.kt b/app/src/main/java/eu/kanade/presentation/more/ComingUpdatesScreen.kt new file mode 100644 index 000000000..2483475b6 --- /dev/null +++ b/app/src/main/java/eu/kanade/presentation/more/ComingUpdatesScreen.kt @@ -0,0 +1,90 @@ +package eu.kanade.presentation.more + +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.outlined.OpenInNew +import androidx.compose.material.icons.outlined.NewReleases +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.tooling.preview.PreviewLightDark +import com.halilibo.richtext.markdown.Markdown +import com.halilibo.richtext.ui.RichTextStyle +import com.halilibo.richtext.ui.material3.RichText +import com.halilibo.richtext.ui.string.RichTextStringStyle +import eu.kanade.presentation.theme.TachiyomiPreviewTheme +import tachiyomi.i18n.MR +import tachiyomi.i18n.sy.SYMR +import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource +import tachiyomi.presentation.core.screens.InfoScreen + +@Composable +fun ComingUpdatesScreen( + versionName: String, + changelogInfo: String, + onOpenInBrowser: () -> Unit, + onRejectUpdate: () -> Unit, + onAcceptUpdate: () -> Unit, +) { + InfoScreen( + icon = Icons.Outlined.NewReleases, + headingText = stringResource(MR.strings.update_check_notification_preview_available), + subtitleText = stringResource(SYMR.strings.latest_, versionName), + acceptText = stringResource(MR.strings.update_check_try_now), + onAcceptClick = onAcceptUpdate, + rejectText = stringResource(MR.strings.action_not_now), + onRejectClick = onRejectUpdate, + ) { + RichText( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = MaterialTheme.padding.large), + style = RichTextStyle( + stringStyle = RichTextStringStyle( + linkStyle = SpanStyle(color = MaterialTheme.colorScheme.primary), + ), + ), + ) { + Markdown(content = changelogInfo) + + TextButton( + onClick = onOpenInBrowser, + modifier = Modifier.padding(top = MaterialTheme.padding.small), + ) { + Text(text = stringResource(MR.strings.update_check_open)) + Spacer(modifier = Modifier.width(MaterialTheme.padding.extraSmall)) + Icon(imageVector = Icons.AutoMirrored.Outlined.OpenInNew, contentDescription = null) + } + } + } +} + +@PreviewLightDark +@Composable +private fun ComingUpdatesScreenPreview() { + TachiyomiPreviewTheme { + ComingUpdatesScreen( + versionName = "v0.99.9", + changelogInfo = """ + ## Yay + Foobar + + ### More info + [komikku-app/komikku@23d862d17...48fb4a2e6](https://github.com/komikku-app/komikku/compare/23d862d17...48fb4a2e6) + - Hello ([@cuong-tran](@https://github.com/cuong-tran)) + - World + """.trimIndent(), + onOpenInBrowser = {}, + onRejectUpdate = {}, + onAcceptUpdate = {}, + ) + } +} diff --git a/app/src/main/java/eu/kanade/presentation/more/NewUpdateScreen.kt b/app/src/main/java/eu/kanade/presentation/more/NewUpdateScreen.kt index 3d561b0c3..60e29e7d7 100644 --- a/app/src/main/java/eu/kanade/presentation/more/NewUpdateScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/NewUpdateScreen.kt @@ -21,6 +21,7 @@ import com.halilibo.richtext.ui.material3.RichText import com.halilibo.richtext.ui.string.RichTextStringStyle import eu.kanade.presentation.theme.TachiyomiPreviewTheme import tachiyomi.i18n.MR +import tachiyomi.i18n.sy.SYMR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.InfoScreen @@ -36,7 +37,7 @@ fun NewUpdateScreen( InfoScreen( icon = Icons.Outlined.NewReleases, headingText = stringResource(MR.strings.update_check_notification_update_available), - subtitleText = versionName, + subtitleText = stringResource(SYMR.strings.latest_, versionName), acceptText = stringResource(MR.strings.update_check_confirm), onAcceptClick = onAcceptUpdate, rejectText = stringResource(MR.strings.action_not_now), diff --git a/app/src/main/java/eu/kanade/presentation/more/WhatsNewScreen.kt b/app/src/main/java/eu/kanade/presentation/more/WhatsNewScreen.kt new file mode 100644 index 000000000..7c03300fb --- /dev/null +++ b/app/src/main/java/eu/kanade/presentation/more/WhatsNewScreen.kt @@ -0,0 +1,89 @@ +package eu.kanade.presentation.more + +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.outlined.OpenInNew +import androidx.compose.material.icons.outlined.NewReleases +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.tooling.preview.PreviewLightDark +import com.halilibo.richtext.markdown.Markdown +import com.halilibo.richtext.ui.RichTextStyle +import com.halilibo.richtext.ui.material3.RichText +import com.halilibo.richtext.ui.string.RichTextStringStyle +import eu.kanade.presentation.theme.TachiyomiPreviewTheme +import tachiyomi.i18n.MR +import tachiyomi.i18n.sy.SYMR +import tachiyomi.presentation.core.components.material.padding +import tachiyomi.presentation.core.i18n.stringResource +import tachiyomi.presentation.core.screens.InfoScreen + +@Composable +fun WhatsNewScreen( + currentVersion: String, + versionName: String, + changelogInfo: String, + onOpenInBrowser: () -> Unit, + onAcceptUpdate: () -> Unit, +) { + InfoScreen( + icon = Icons.Outlined.NewReleases, + headingText = stringResource(MR.strings.whats_new), + subtitleText = stringResource(SYMR.strings.latest_, versionName) + + " - " + stringResource(SYMR.strings.current_, currentVersion), + acceptText = stringResource(MR.strings.action_ok), + onAcceptClick = onAcceptUpdate, + ) { + RichText( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = MaterialTheme.padding.large), + style = RichTextStyle( + stringStyle = RichTextStringStyle( + linkStyle = SpanStyle(color = MaterialTheme.colorScheme.primary), + ), + ), + ) { + Markdown(content = changelogInfo) + + TextButton( + onClick = onOpenInBrowser, + modifier = Modifier.padding(top = MaterialTheme.padding.small), + ) { + Text(text = stringResource(MR.strings.update_check_open)) + Spacer(modifier = Modifier.width(MaterialTheme.padding.extraSmall)) + Icon(imageVector = Icons.AutoMirrored.Outlined.OpenInNew, contentDescription = null) + } + } + } +} + +@PreviewLightDark +@Composable +private fun WhatsNewScreenPreview() { + TachiyomiPreviewTheme { + WhatsNewScreen( + currentVersion = "v0.99.9", + versionName = "v1.00.0", + changelogInfo = """ + ## Yay + Foobar + + ### More info + [komikku-app/komikku@23d862d17...48fb4a2e6](https://github.com/komikku-app/komikku/compare/23d862d17...48fb4a2e6) + - Hello ([@cuong-tran](@https://github.com/cuong-tran)) + - World + """.trimIndent(), + onOpenInBrowser = {}, + onAcceptUpdate = {}, + ) + } +} diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt index 254ede63d..5ce5b14d5 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt @@ -28,10 +28,14 @@ import eu.kanade.presentation.util.LocalBackPress import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.data.updater.AppUpdateChecker +import eu.kanade.tachiyomi.ui.more.ComingUpdatesScreen import eu.kanade.tachiyomi.ui.more.NewUpdateScreen +import eu.kanade.tachiyomi.ui.more.WhatsNewScreen import eu.kanade.tachiyomi.util.CrashLogUtil import eu.kanade.tachiyomi.util.lang.toDateTimestampString import eu.kanade.tachiyomi.util.system.copyToClipboard +import eu.kanade.tachiyomi.util.system.isDevFlavor +import eu.kanade.tachiyomi.util.system.isReleaseBuildType import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.launch import logcat.LogPriority @@ -64,6 +68,11 @@ object AboutScreen : Screen() { val navigator = LocalNavigator.currentOrThrow var isCheckingUpdates by remember { mutableStateOf(false) } + // KMK --> + var isCheckingWhatsNew by remember { mutableStateOf(false) } + var isCheckingWhatsComing by remember { mutableStateOf(false) } + // KMK <-- + // SY --> var showWhatsNewDialog by remember { mutableStateOf(false) } // SY <-- @@ -134,16 +143,84 @@ object AboutScreen : Screen() { } } - if (!BuildConfig.DEBUG) { + // KMK --> + item { + TextPreferenceWidget( + title = stringResource(MR.strings.whats_new), + widget = { + AnimatedVisibility(visible = isCheckingWhatsNew) { + CircularProgressIndicator( + modifier = Modifier.size(28.dp), + strokeWidth = 3.dp, + ) + } + }, + onPreferenceClick = { + if (!isCheckingWhatsNew) { + scope.launch { + isCheckingWhatsNew = true + + getReleaseNotes( + context = context, + onAvailableUpdate = { result -> + val whatsNewScreen = WhatsNewScreen( + currentVersion = BuildConfig.VERSION_NAME, + versionName = result.release.version, + changelogInfo = result.release.info, + releaseLink = result.release.releaseLink, + ) + navigator.push(whatsNewScreen) + }, + onFinish = { + isCheckingWhatsNew = false + }, + ) + } + } + }, + ) + } + + if (isReleaseBuildType || isDevFlavor) { item { TextPreferenceWidget( - title = stringResource(MR.strings.whats_new), - // SY --> - onPreferenceClick = { showWhatsNewDialog = true }, - // SY <-- + title = stringResource(MR.strings.whats_coming), + widget = { + AnimatedVisibility(visible = isCheckingWhatsComing) { + CircularProgressIndicator( + modifier = Modifier.size(28.dp), + strokeWidth = 3.dp, + ) + } + }, + onPreferenceClick = { + if (!isCheckingWhatsComing) { + scope.launch { + isCheckingWhatsComing = true + + checkVersion( + context = context, + onAvailableUpdate = { result -> + val updateScreen = ComingUpdatesScreen( + versionName = result.release.version, + changelogInfo = result.release.info, + releaseLink = result.release.releaseLink, + downloadLink = result.release.getDownloadLink(), + ) + navigator.push(updateScreen) + }, + onFinish = { + isCheckingWhatsComing = false + }, + peekIntoPreview = true, + ) + } + } + }, ) } } + // KMK <-- // item { // TextPreferenceWidget( @@ -222,8 +299,11 @@ object AboutScreen : Screen() { context: Context, onAvailableUpdate: (GetApplicationRelease.Result.NewUpdate) -> Unit, onFinish: () -> Unit, + // KMK --> + peekIntoPreview: Boolean = false, + // KMK <-- ) { - val updateChecker = AppUpdateChecker() + val updateChecker = AppUpdateChecker(peekIntoPreview) withUIContext { try { when (val result = withIOContext { updateChecker.checkForUpdate(context, forceCheck = true) }) { @@ -247,6 +327,29 @@ object AboutScreen : Screen() { } } + private suspend fun getReleaseNotes( + context: Context, + onAvailableUpdate: (GetApplicationRelease.Result.NewUpdate) -> Unit, + onFinish: () -> Unit, + ) { + val updateChecker = AppUpdateChecker() + withUIContext { + try { + when (val result = withIOContext { updateChecker.getReleaseNotes(context) }) { + is GetApplicationRelease.Result.NewUpdate -> { + onAvailableUpdate(result) + } + else -> {} + } + } catch (e: Exception) { + context.toast(e.message) + logcat(LogPriority.ERROR, e) + } finally { + onFinish() + } + } + } + fun getVersionName(withBuildDate: Boolean): String { return when { BuildConfig.DEBUG -> { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt index 8b4522f67..fe7f6cbe2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt @@ -7,7 +7,11 @@ import tachiyomi.core.common.util.lang.withIOContext import tachiyomi.domain.release.interactor.GetApplicationRelease import uy.kohesive.injekt.injectLazy -class AppUpdateChecker { +class AppUpdateChecker( + // KMK --> + private val peekIntoPreview: Boolean = false, + // KMK <-- +) { private val getApplicationRelease: GetApplicationRelease by injectLazy() @@ -20,11 +24,11 @@ class AppUpdateChecker { return withIOContext { val result = getApplicationRelease.await( GetApplicationRelease.Arguments( - isPreview = BuildConfig.PREVIEW, + isPreview = BuildConfig.PREVIEW || peekIntoPreview, isThirdParty = context.isInstalledFromFDroid(), commitCount = BuildConfig.COMMIT_COUNT.toInt(), versionName = BuildConfig.VERSION_NAME, - repository = GITHUB_REPO, + repository = getGithubRepo(peekIntoPreview), forceCheck = forceCheck, ), ) @@ -40,22 +44,40 @@ class AppUpdateChecker { result } } + + // KMK --> + suspend fun getReleaseNotes(context: Context): GetApplicationRelease.Result { + return withIOContext { + getApplicationRelease.awaitReleaseNotes( + GetApplicationRelease.Arguments( + isPreview = BuildConfig.PREVIEW || peekIntoPreview, + isThirdParty = context.isInstalledFromFDroid(), + commitCount = BuildConfig.COMMIT_COUNT.toInt(), + versionName = BuildConfig.VERSION_NAME, + repository = getGithubRepo(peekIntoPreview), + ), + ) + } + } + // KMK <-- } -val GITHUB_REPO: String by lazy { - if (BuildConfig.PREVIEW) { +val GITHUB_REPO: String by lazy { getGithubRepo() } + +fun getGithubRepo(peekIntoPreview: Boolean = false): String = + if (BuildConfig.PREVIEW || peekIntoPreview) { "komikku-app/komikku-preview" } else { "komikku-app/komikku" } -} -val RELEASE_TAG: String by lazy { - if (BuildConfig.PREVIEW) { +val RELEASE_TAG: String by lazy { getReleaseTag() } + +fun getReleaseTag(peekIntoPreview: Boolean = false): String = + if (BuildConfig.PREVIEW || peekIntoPreview) { "r${BuildConfig.COMMIT_COUNT}" } else { "v${BuildConfig.VERSION_NAME}" } -} val RELEASE_URL = "https://github.com/$GITHUB_REPO/releases/tag/$RELEASE_TAG" diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/more/ComingUpdatesScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/more/ComingUpdatesScreen.kt new file mode 100644 index 000000000..441510e1f --- /dev/null +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/more/ComingUpdatesScreen.kt @@ -0,0 +1,43 @@ +package eu.kanade.tachiyomi.ui.more + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.platform.LocalContext +import cafe.adriel.voyager.navigator.LocalNavigator +import cafe.adriel.voyager.navigator.currentOrThrow +import eu.kanade.presentation.more.ComingUpdatesScreen +import eu.kanade.presentation.util.Screen +import eu.kanade.tachiyomi.data.updater.AppUpdateDownloadJob +import eu.kanade.tachiyomi.util.system.openInBrowser + +class ComingUpdatesScreen( + private val versionName: String, + private val changelogInfo: String, + private val releaseLink: String, + private val downloadLink: String, +) : Screen() { + + @Composable + override fun Content() { + val navigator = LocalNavigator.currentOrThrow + val context = LocalContext.current + val changelogInfoNoChecksum = remember { + changelogInfo.replace("""---(\R|.)*Checksums(\R|.)*""".toRegex(), "") + } + + ComingUpdatesScreen( + versionName = versionName, + changelogInfo = changelogInfoNoChecksum, + onOpenInBrowser = { context.openInBrowser(releaseLink) }, + onRejectUpdate = navigator::pop, + onAcceptUpdate = { + AppUpdateDownloadJob.start( + context = context, + url = downloadLink, + title = versionName, + ) + navigator.pop() + }, + ) + } +} diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/more/WhatsNewScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/more/WhatsNewScreen.kt new file mode 100644 index 000000000..3a17207d8 --- /dev/null +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/more/WhatsNewScreen.kt @@ -0,0 +1,35 @@ +package eu.kanade.tachiyomi.ui.more + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.platform.LocalContext +import cafe.adriel.voyager.navigator.LocalNavigator +import cafe.adriel.voyager.navigator.currentOrThrow +import eu.kanade.presentation.more.WhatsNewScreen +import eu.kanade.presentation.util.Screen +import eu.kanade.tachiyomi.util.system.openInBrowser + +class WhatsNewScreen( + private val currentVersion: String, + private val versionName: String, + private val changelogInfo: String, + private val releaseLink: String, +) : Screen() { + + @Composable + override fun Content() { + val context = LocalContext.current + val navigator = LocalNavigator.currentOrThrow + val changelogInfoNoChecksum = remember { + changelogInfo.replace("""---(\R|.)*Checksums(\R|.)*""".toRegex(), "") + } + + WhatsNewScreen( + currentVersion = currentVersion, + versionName = versionName, + changelogInfo = changelogInfoNoChecksum, + onOpenInBrowser = { context.openInBrowser(releaseLink) }, + onAcceptUpdate = { navigator.pop() }, + ) + } +} diff --git a/app/src/main/res/raw/changelog_debug.xml b/app/src/main/res/raw/changelog_debug.xml index 3906b1f16..651eb1bd6 100644 --- a/app/src/main/res/raw/changelog_debug.xml +++ b/app/src/main/res/raw/changelog_debug.xml @@ -1,27 +1,29 @@ - + A dedicated screen for related entries, fetching directly from sources Faster loading of related entries Enable fetching related entries from site's entry page (things like "More like this", "Recommendations" etc.) Improve & fix bugs of algorithm looking for related entries + A peek into Preview-build's 'What's New' in About screen + Update to TachiyomiSY preview-142 Beta build switch to 'preview' repo - Show related mangas for all sources - Bulk select multiple entries to favorite/category + [b]New[/b] Show related mangas for all sources + [b]New[/b] Bulk select multiple entries to favorite/category + [b]New[/b] Search for sources in Browse screen + [b]New[/b] Quick NSFW sources filter in both Extensions/Browse screen + [b]Improved[/b] Feeds screen support all sources + [b]Improved[/b] More Feed's entries Built-in official extensions repo - Search for sources in Browse screen - Quick NSFW sources filter in both Extensions/Browse screen - Feeds screen support all sources - More Feed's entries - Click manga's source name will jump to source browsing - Show extensions/sources NSFW & languages tag - Jump to extensions' settings from Source screen + [b]Improved[/b] Click manga's source name will jump to source browsing + [b]Improved[/b] Show extensions/sources NSFW & languages tag + [b]Improved[/b] Jump to extensions' settings from Source screen Migrate to Komikku's own Tracking clients - Configurable interval to refresh entries from downloaded storage + [b]New[/b] Configurable interval to refresh entries from downloaded storage Updater switched to method similar to Mihon's Revert back support to show extensions' changelog & readme [b]Based on TachiyomiSY stable 1.10.5(Mar 2,2024)[/b] @@ -29,316 +31,9 @@ Minor fix for marking duplicate chapters as read Include the delayed tracker update fix - - Hotfix for 1.10.3 - - - [b]Based on Mihon stable 0.16.3(from 0.16.1)[/b] - Use Mihon.app website - Add hide feed tab option(Thanks @Riztard) - Add mark dupes as read option(Thanks @Riztard) - Add custom Thumbnail url(Thanks @Riztard) - Improve Chinese translation(Thanks @ouovouo) - - - [b]Based on Mihon stable 0.16.1(from Tachiyomi 0.15.3)[/b] - - - [b]Based on Tachiyomi stable 0.15.3(from 0.15.2)[/b] - Fix MangaDex auth spamming the refresh login endpoint - Cleanup links to Tachiyomi and change some to Mihon - - - [b]Based on Tachiyomi stable 0.15.2(from 0.14.7)[/b] - Use ReadableAt for MangaDex dates - Add Exh source icon - Allow seeing all read manga statistics - Add exceeded page quota error - Add encrypted database(Thanks @Shamicen) - Add encrypted local covers(Thanks @Shamicen) - Add encrypted cbz archives(Thanks @Shamicen) - Center the Exh Utils(Thanks @Koranir) - Shorter chapter list in reader(Thanks @Riztard) - So much other stuff that I give up, I'm just going to make the release - - - [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 - - - Hotfix for 1.9.1, fix tag editing - - - [b]Based on Tachiyomi stable 0.14.6(from 0.14.3)[/b] - [b]New[/b] Add support for wsrv.nl data saver - [b]New[/b] Add MangaDex Data Saver support to MangaPlus Chapters - [b]New[/b] Add Smooth Scrolling for auto-scroll in Webtoon format - Handle refreshing Feed properly and allow manual refresh - Fix open in webview for some sources - Fix common crashes - Fix library tag sorting - Fix library category selection - - - [b]Based on Tachiyomi stable 0.14.3(from 0.13.6)[/b] - Support new E-H/EXH search engine - [b]New[/b] Add custom igneous cookie option - [b]New[/b] Add page previews - [b]New[/b] Deduplication for chapters - Update Autofill E-Hentai tags - Support external extension repos better - Improve E-H/Exh toplist support - Remove links from MangaDex manga - Use new MangaDex OAuth Login - Removed AutoCaptcha solver - Removed Drag & Drop - - - [b]Based on Tachiyomi stable 0.13.6(from 0.13.5)[/b] - Update EH tags for auto-complete filter - Update supported MangaDex languages - - - [b]Based on Tachiyomi stable 0.13.5(from 0.13.4)[/b] - Fix On Hiatus dynamic category - Fix group by tracking - Migrate custom covers - Improve sheet selection items - Use Tachiyomi Image decoder for double pages, fixes certain image types not loading for double pages - Only use auto-scroll when app is in focus - Stop ddos when updating a merge manga - Fix auto-downloading for merge manga - Fix mangadex blocked uploaders - Add visibility virtual tag for E-Hentai, you can now search for expunged in the library - - - [b]Based on Tachiyomi stable 0.13.4(from 0.13.3)[/b] - Added chinese simplified translation(By Howard20181) - - - [b]Based on Tachiyomi stable 0.13.3(from 0.13.1)[/b] - [b]New[/b] Replace Latest tab with Feed menu for using saved searches - [b]New[/b] Add Sources feed to combined Browse/Latest menu by long clicking a saved search - Support Mangadex blocked groups and uploaders extension setting - Improve E-H redirect to existing galleries - Fix Tsumino Email Protected issues - Fix HBrowse new galleries - Improve migration sheet, by CrepeTF - Fix rounded corners for migration menu - Only show scanlator filter if there are 2 or over scanlators - Fix renamed manga delete after read - Save combined image now respects folderPerManga, by curche - Fix clear database keep read setting - Updated Russian translations (By D3xron and e-shl) - - - [b]Based on Tachiyomi stable 0.13.1(from 0.13.0)[/b] - [b]New[/b] Use MangaDex blocked groups and uploaders from the extension settings - Fixed delete after read for renamed manga - - - [b]Based on Tachiyomi stable 0.13.0(from 0.11.1)[/b] - [b]New[/b] When Favorites sync takes longer then 5 seconds for a gallery, display the gallery name - [b]Improved[/b] Replace Favorites Sync realm database with the regular database - Fix some sources not updating when grouping by source - [b]New[/b] Search EHentai uploader on click - Fix EH/ExhHentai duplicate results in search - [b]New[/b] Add EH/ExhHentai popular as the default browse menu - [b]New[/b] Add a toplists filter for E-Hentai - [b]Improved[/b] Throw error when ExHentai igneous cookie is mystery - [b]Improved[/b] Updated E-Hentai tag list for autocomplete view - [b]Improved[/b] Replace Icon with a better one - [b]New[/b] Add way to open merged mangas in webview - Fix merged manga delete after read - [b]Improved[/b] Improve Hitomi tag list - [b]Improved[/b] Better support tag search - Stop excluding Tsumino from library updates - [b]New[/b] Re-Add MangaDex delegation, includes many features - [b]Improved[/b] Improve filter by scanlator to handle all sources - [b]New[/b] Rename manga directory if title changes - [b]New[/b] Add duel page viewer - [b]New[/b] Add cancel button in reader chapters dialog - [b]Improved[/b] Add new websites for Webtoon mode trigger (By @joseph619) - Fix chapter navigation for pager reader - Bugfix reader chapter list - Fix crash when opening reader or webview during migration - [b]New[/b] Add way to keep the manga when canceling migration - [b]Improved[/b] Handle the + for configurable sources better(By @curche) - [b]Removed[/b] Remove pure red theme - [b]New[/b] Add option to backup all read manga in addition your library - Sync edited info fields with J2k (By @null-dev) - [b]New[/b] Add a way to exclude sources from data saver - [b]New[/b] Add a way to exclude the downloader from data saver - [b]New[/b] Add biometric time range - [b]Improved[/b] Updated PT-BR translations(By @Sam-Oak) - [b]Improved[/b] Updated Russian translations (By @D3xron and @e-shl) - [b]New[/b] Add Indonesian translation (By @HaruSasaki) - - - [b]Based on Tachiyomi stable 0.11.1(from 0.10.12)[/b] - [b]New[/b] Add reader bottom button customization (by E-SHL) - Add more lewd tag checks (Jobobby04, E-SHL) - Convert chapter bottom sheet to a dialog - Exh login menu now supports a custom igneous cookie - Exh sync fixes, now doesn't stop on missing galleries - Browse source from migration now properly adds it as a result - Drop support for Android 5 - - - [b]Based on Tachiyomi stable 0.10.12(from 0.10.11)[/b] - [b]New[/b] Add Dark Blue AMOLED theme (by E-SHL) - Fix bug with clean orphaned downloads deleting manga downloads it shouldn't have - - - [b]Based on Tachiyomi stable 0.10.11(from 0.10.10)[/b] - Add a debug function to address really old SY full backups reader mode bug - Block merged manga from migration - Remove useless source migration action from overflow - - - [b]Based on Tachiyomi stable 0.10.10(from 0.10.9)[/b] - [b]New[/b] Edit manga status - [b]New[/b] Backup custom manga info - [b]New[/b] Logs now output to file, logging to file is now useful, and can be used to debug - [b]New[/b] Vertical Seekbar for webtoon and vertical - [b]New[/b] Hot Pink theme by OncePunchedBot - [b]Removed[/b] Mangadex delegation and tracking - Clear db now has a option to keep read manga - Clear db now works properly with merged manga - EHentai updater should now die less - Fix 8Muses delegation - Logs now output to file, logging to file is now useful, and can be used to debug - In the browse/latest menu errors now populate instead of just saying no results found - Fix download issue with scanlator for merged manga - Fix Migration getting stuck - Fix crash when opening chapter from manual search in migration - - - [b]Based on Tachiyomi stable 0.10.9(from 0.10.7)[/b] - [b]New[/b] Clicking the title now takes you to the manga page - [b]New[/b] Enhanced Reader Bottom menu - [b]New[/b] MDList now works for all manga, not just mangadex manga - [b]New[/b] Backup now backs up read manga not in library - [b]New[/b] Library update now updates manga from different sources in parallel - [b]New[/b] Use new Mangadex API server and API v2 - [b]New[/b] Deeplink Mangadex chapters - Fix Mangadex Deeplink errors - Fix Mangadex login autofill saving wrong info - Fix Merged manga chapters not being marked as read on the manga page after reading - Fix Merged manga downloads - Fix Similar Manga notification - - - [b]Based on Tachiyomi stable 0.10.7(from 0.10.6)[/b] - [b]New[/b] Add separate crop borders setting for Continues Vertical - [b]New[/b] Add simple external repo support - Fix crashes with Merge Settings - Maybe fix push to Mangadex - Improve Anilist rec names(thanks She11sh0cked) - Deeplink and Batch add will now only search enabled sources - - - [b]Based on Tachiyomi stable 0.10.6(from 0.10.5)[/b] - [b]New[/b] NEW ICON! Thanks to Aytox who made it! - [b]New[/b] Add french translation, thanks to Adam-sama - [b]New[/b] Double clicking the updates bottom bar button will open downloads - [b]New[/b] Add a way to exclude manga in certain categories from auto delete - [b]New[/b] Add Sort by Tags library sorting method, adds a customizable list of tags that manga will by sorted by the position of the tag in the list - Update Lewd manga filter to include new sources and tags - Enhance More Info menu - Cleanup the looks of manga extra info - Fix Smart background so it works properly(it half worked before) - Community recommendations enhancements, errors now properly show - Add ability to use Neko similar manga for Mangadex manga - Support the short title NHentai source setting - Switch to the Mangadex extension for the low quality cover setting - [b]New[/b] Add push to Mangadex in Mangadex settings - Fix Mangadex settings inconsistencies - [b]New[/b] If the E-Hentai download limit exceeded image is sent, stop downloading - EHentai options will be hidden instead of greyed out when not logged in - Fix MDList tracking stalling when it thinks its logged in but its not - Fix MDList tracking getting set to complete when its not - E-Hentai migrations will be throttled so that you dont get banned - Migrating will migrate viewer, chapter sort, and other stuff - - - [b]New[/b] Share manga info when you share a page - Tweak preload settings, make the max 20, defaults to 10 - Set the new browse + latest view as default - Fix Mangadex 2FA input - Fix backup for merged manga - - - [b]Based on Tachiyomi stable 0.10.5(from 0.10.4)[/b] - [b]New[/b] Delegate MangaDex, add Mangadex Follows browse, import, push, and tracking, as well as a custom manga view! - [b]New[/b] No title grid option - [b]New[/b] Started filter - [b]New[/b] Grab J2k chapters bottom sheet - [b]New[/b] Add data saver proxy server support - [b]New[/b] Long click to copy metadata information - [b]New[/b] Expand manga thumbnails(Inspired by J2k) - [b]Rewritten[/b] Overhaul merge manga, its actually usable now - [b]New[/b] Always display read progress on E-Hentai chapters when preserve reading positon is enabled - [b]New[/b] Add combined latest/browse page as a option - [b]New[/b] Add download as CBZ - Network logging to file fixes - - [b]Based on Tachiyomi stable 0.10.4(from 0.10.2)[/b] - [b]New[/b] cleanup orphaned downloads option (from J2k) - [b]New[/b] delegate Hitomi, please download the extension to continue using your Hitomi manga - [b]New[/b] delegate NHentai, please download the extension to continue using your NHentai manga - [b]New[/b] delegate PervEden, please download the extension to continue using your PervEden manga - [b]New[/b] delegate 8Muses, manga in your library cannot be migrated because of the extension format, 8Muses is in the EroMuse extension - [b]New[/b] Dynamic Categories, inspired by J2ks feature, but written from the ground up, quickly organize your library into different sets of categories, by source, status, and tracking, or totally ungrouped, its in the library bottom sheet - [b]New[/b] Continue reading button, inspired by the J2k feature, it will take you to the first unread chapter, can be toggled in the library bottom sheet - [b]Rewritten[/b] Redo drag and drop, now you can drag and drop in any mode, and it will switch your mode to it when you drag and drop something [b]New[/b] quick clean Titles, adds a quick clean that will clean titles from manga from certain sources, it will quickly remove unnecessary bloat [b]Rewritten[/b] rewrite the library search engine (that was inherited from EH), it now can exclude, use quotes for absolute searches, it supports namespace tags, and a bunch more, its probably the most advanced search engine any Tachi fork has - Fix pressing download unread chapters on an Exh manga would download the latest chapter even if it was read [b]New[/b] smart Background, when using a pager like LTR, the background will now change color depending on the page (from J2k) - [b]New[/b] force disable zoom out option for webtoon mode, no more do you accidently zoom out, on by default but can be toggled off (from J2k) - [b]New[/b] finishing an Exh chapter will mark previous chapters as read - Don’t download new chapters after refreshing Exh manga - Fix a migration crash that happened when the chapter list threw an exception - Fix a start-up crash that made the app unusable for some people - Some icon fixes - Change the way releases are built, likely fixes problems with installing the app for some people - - - [b]Based on Tachiyomi stable 0.10.2(from 0.10.1)[/b] - Delegated HBrowse, if you used that source please install the extension to continue using your manga - - - [b]Based on Tachiyomi stable 0.10.1(from a 0.9.2 preview)[/b] - Made the app translatable! Feel free to ask how to in the Tachiyomi discord or open a issue if you want to help with translations - Move to the new 0.10.0 manga page - [b]New[/b] Add move recommendations to overflow menu option - [b]New[/b] Add special browse view for E-Hentai - [b]New[/b] Add special manga info view to integrated and delegated sources - [b]New[/b] Add special tag view for certain sources - Made global search respect the source manga view setting - [b]New[/b] Manga info edit - [b]New[/b] Pressing download unread chapters on E-Hentai manga will only download the latest version - [b]New[/b] Using the manga floating action button on E-Hentai manga will open the latest version - [b]New[/b] Allow hitomi.la users to select if they want to download manga as webp or not - Fix 8muses - Fix hitomi.la - Fix Pururin - Fix blacklisted nhentai sources - Fix download badges for internal sources - Fix source category deletion crash - - - Welcome to my first full release of TachiyomiSY! - I hope you enjoy your stay, many improvements are planned! diff --git a/app/src/main/res/raw/changelog_release.xml b/app/src/main/res/raw/changelog_release.xml index a7837e830..eaa09ebdf 100644 --- a/app/src/main/res/raw/changelog_release.xml +++ b/app/src/main/res/raw/changelog_release.xml @@ -1,24 +1,27 @@ - A dedicated screen for related entries, fetching directly from sources - Faster loading of related entries - Enable fetching related entries from site's entry page (things like "More like this", "Recommendations" etc.) + [b]New[/b] A dedicated screen for related entries, fetching directly from sources + [b]Improved[/b] Faster loading of related entries + [b]Improved[/b] Enable fetching related entries from site's entry page (things like "More like this", "Recommendations" etc.) Improve & fix bugs of algorithm looking for related entries + [b]New[/b] A peek into Preview-build's 'What's New' in About screen + [b]Update to TachiyomiSY 1.10.6[/b] + [b]Update to Mihon 0.16.6[/b] - Show related mangas for all sources - Bulk select multiple entries to favorite/category + [b]New[/b] Show related mangas for all sources + [b]New[/b] Bulk select multiple entries to favorite/category + [b]New[/b] Search for sources in Browse screen + [b]New[/b] Quick NSFW sources filter in both Extensions/Browse screen + [b]Improved[/b] Feeds screen support all sources + [b]Improved[/b] More Feed's entries Built-in official extensions repo - Search for sources in Browse screen - Quick NSFW sources filter in both Extensions/Browse screen - Feeds screen support all sources - More Feed's entries - Click manga's source name will jump to source browsing - Show extensions/sources NSFW & languages tag - Jump to extensions' settings from Source screen + [b]Improved[/b] Click manga's source name will jump to source browsing + [b]Improved[/b] Show extensions/sources NSFW & languages tag + [b]Improved[/b] Jump to extensions' settings from Source screen Migrate to Komikku's own Tracking clients - Configurable interval to refresh entries from downloaded storage + [b]New[/b] Configurable interval to refresh entries from downloaded storage Updater switched to method similar to Mihon's Revert back support to show extensions' changelog & readme [b]Based on TachiyomiSY stable 1.10.5(Mar 2,2024)[/b] @@ -26,316 +29,9 @@ Minor fix for marking duplicate chapters as read Include the delayed tracker update fix - - Hotfix for 1.10.3 - - - [b]Based on Mihon stable 0.16.3(from 0.16.1)[/b] - Use Mihon.app website - Add hide feed tab option(Thanks @Riztard) - Add mark dupes as read option(Thanks @Riztard) - Add custom Thumbnail url(Thanks @Riztard) - Improve Chinese translation(Thanks @ouovouo) - - - [b]Based on Mihon stable 0.16.1(from Tachiyomi 0.15.3)[/b] - - - [b]Based on Tachiyomi stable 0.15.3(from 0.15.2)[/b] - Fix MangaDex auth spamming the refresh login endpoint - Cleanup links to Tachiyomi and change some to Mihon - - - [b]Based on Tachiyomi stable 0.15.2(from 0.14.7)[/b] - Use ReadableAt for MangaDex dates - Add Exh source icon - Allow seeing all read manga statistics - Add exceeded page quota error - Add encrypted database(Thanks @Shamicen) - Add encrypted local covers(Thanks @Shamicen) - Add encrypted cbz archives(Thanks @Shamicen) - Center the Exh Utils(Thanks @Koranir) - Shorter chapter list in reader(Thanks @Riztard) - So much other stuff that I give up, I'm just going to make the release - - - [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 - - - Hotfix for 1.9.1, fix tag editing - - - [b]Based on Tachiyomi stable 0.14.6(from 0.14.3)[/b] - [b]New[/b] Add support for wsrv.nl data saver - [b]New[/b] Add MangaDex Data Saver support to MangaPlus Chapters - [b]New[/b] Add Smooth Scrolling for auto-scroll in Webtoon format - Handle refreshing Feed properly and allow manual refresh - Fix open in webview for some sources - Fix common crashes - Fix library tag sorting - Fix library category selection - - - [b]Based on Tachiyomi stable 0.14.3(from 0.13.6)[/b] - Support new E-H/EXH search engine - [b]New[/b] Add custom igneous cookie option - [b]New[/b] Add page previews - [b]New[/b] Deduplication for chapters - Update Autofill E-Hentai tags - Support external extension repos better - Improve E-H/Exh toplist support - Remove links from MangaDex manga - Use new MangaDex OAuth Login - Removed AutoCaptcha solver - Removed Drag & Drop - - - [b]Based on Tachiyomi stable 0.13.6(from 0.13.5)[/b] - Update EH tags for auto-complete filter - Update supported MangaDex languages - - - [b]Based on Tachiyomi stable 0.13.5(from 0.13.4)[/b] - Fix On Hiatus dynamic category - Fix group by tracking - Migrate custom covers - Improve sheet selection items - Use Tachiyomi Image decoder for double pages, fixes certain image types not loading for double pages - Only use auto-scroll when app is in focus - Stop ddos when updating a merge manga - Fix auto-downloading for merge manga - Fix mangadex blocked uploaders - Add visibility virtual tag for E-Hentai, you can now search for expunged in the library - - - [b]Based on Tachiyomi stable 0.13.4(from 0.13.3)[/b] - Added chinese simplified translation(By Howard20181) - - - [b]Based on Tachiyomi stable 0.13.3(from 0.13.1)[/b] - [b]New[/b] Replace Latest tab with Feed menu for using saved searches - [b]New[/b] Add Sources feed to combined Browse/Latest menu by long clicking a saved search - Support Mangadex blocked groups and uploaders extension setting - Improve E-H redirect to existing galleries - Fix Tsumino Email Protected issues - Fix HBrowse new galleries - Improve migration sheet, by CrepeTF - Fix rounded corners for migration menu - Only show scanlator filter if there are 2 or over scanlators - Fix renamed manga delete after read - Save combined image now respects folderPerManga, by curche - Fix clear database keep read setting - Updated Russian translations (By D3xron and e-shl) - - - [b]Based on Tachiyomi stable 0.13.1(from 0.13.0)[/b] - [b]New[/b] Use MangaDex blocked groups and uploaders from the extension settings - Fixed delete after read for renamed manga - - - [b]Based on Tachiyomi stable 0.13.0(from 0.11.1)[/b] - [b]New[/b] When Favorites sync takes longer then 5 seconds for a gallery, display the gallery name - [b]Improved[/b] Replace Favorites Sync realm database with the regular database - Fix some sources not updating when grouping by source - [b]New[/b] Search EHentai uploader on click - Fix EH/ExhHentai duplicate results in search - [b]New[/b] Add EH/ExhHentai popular as the default browse menu - [b]New[/b] Add a toplists filter for E-Hentai - [b]Improved[/b] Throw error when ExHentai igneous cookie is mystery - [b]Improved[/b] Updated E-Hentai tag list for autocomplete view - [b]Improved[/b] Replace Icon with a better one - [b]New[/b] Add way to open merged mangas in webview - Fix merged manga delete after read - [b]Improved[/b] Improve Hitomi tag list - [b]Improved[/b] Better support tag search - Stop excluding Tsumino from library updates - [b]New[/b] Re-Add MangaDex delegation, includes many features - [b]Improved[/b] Improve filter by scanlator to handle all sources - [b]New[/b] Rename manga directory if title changes - [b]New[/b] Add duel page viewer - [b]New[/b] Add cancel button in reader chapters dialog - [b]Improved[/b] Add new websites for Webtoon mode trigger (By @joseph619) - Fix chapter navigation for pager reader - Bugfix reader chapter list - Fix crash when opening reader or webview during migration - [b]New[/b] Add way to keep the manga when canceling migration - [b]Improved[/b] Handle the + for configurable sources better(By @curche) - [b]Removed[/b] Remove pure red theme - [b]New[/b] Add option to backup all read manga in addition your library - Sync edited info fields with J2k (By @null-dev) - [b]New[/b] Add a way to exclude sources from data saver - [b]New[/b] Add a way to exclude the downloader from data saver - [b]New[/b] Add biometric time range - [b]Improved[/b] Updated PT-BR translations(By @Sam-Oak) - [b]Improved[/b] Updated Russian translations (By @D3xron and @e-shl) - [b]New[/b] Add Indonesian translation (By @HaruSasaki) - - - [b]Based on Tachiyomi stable 0.11.1(from 0.10.12)[/b] - [b]New[/b] Add reader bottom button customization (by E-SHL) - Add more lewd tag checks (Jobobby04, E-SHL) - Convert chapter bottom sheet to a dialog - Exh login menu now supports a custom igneous cookie - Exh sync fixes, now doesn't stop on missing galleries - Browse source from migration now properly adds it as a result - Drop support for Android 5 - - - [b]Based on Tachiyomi stable 0.10.12(from 0.10.11)[/b] - [b]New[/b] Add Dark Blue AMOLED theme (by E-SHL) - Fix bug with clean orphaned downloads deleting manga downloads it shouldn't have - - - [b]Based on Tachiyomi stable 0.10.11(from 0.10.10)[/b] - Add a debug function to address really old SY full backups reader mode bug - Block merged manga from migration - Remove useless source migration action from overflow - - - [b]Based on Tachiyomi stable 0.10.10(from 0.10.9)[/b] - [b]New[/b] Edit manga status - [b]New[/b] Backup custom manga info - [b]New[/b] Logs now output to file, logging to file is now useful, and can be used to debug - [b]New[/b] Vertical Seekbar for webtoon and vertical - [b]New[/b] Hot Pink theme by OncePunchedBot - [b]Removed[/b] Mangadex delegation and tracking - Clear db now has a option to keep read manga - Clear db now works properly with merged manga - EHentai updater should now die less - Fix 8Muses delegation - Logs now output to file, logging to file is now useful, and can be used to debug - In the browse/latest menu errors now populate instead of just saying no results found - Fix download issue with scanlator for merged manga - Fix Migration getting stuck - Fix crash when opening chapter from manual search in migration - - - [b]Based on Tachiyomi stable 0.10.9(from 0.10.7)[/b] - [b]New[/b] Clicking the title now takes you to the manga page - [b]New[/b] Enhanced Reader Bottom menu - [b]New[/b] MDList now works for all manga, not just mangadex manga - [b]New[/b] Backup now backs up read manga not in library - [b]New[/b] Library update now updates manga from different sources in parallel - [b]New[/b] Use new Mangadex API server and API v2 - [b]New[/b] Deeplink Mangadex chapters - Fix Mangadex Deeplink errors - Fix Mangadex login autofill saving wrong info - Fix Merged manga chapters not being marked as read on the manga page after reading - Fix Merged manga downloads - Fix Similar Manga notification - - - [b]Based on Tachiyomi stable 0.10.7(from 0.10.6)[/b] - [b]New[/b] Add separate crop borders setting for Continues Vertical - [b]New[/b] Add simple external repo support - Fix crashes with Merge Settings - Maybe fix push to Mangadex - Improve Anilist rec names(thanks She11sh0cked) - Deeplink and Batch add will now only search enabled sources - - - [b]Based on Tachiyomi stable 0.10.6(from 0.10.5)[/b] - [b]New[/b] NEW ICON! Thanks to Aytox who made it! - [b]New[/b] Add french translation, thanks to Adam-sama - [b]New[/b] Double clicking the updates bottom bar button will open downloads - [b]New[/b] Add a way to exclude manga in certain categories from auto delete - [b]New[/b] Add Sort by Tags library sorting method, adds a customizable list of tags that manga will by sorted by the position of the tag in the list - Update Lewd manga filter to include new sources and tags - Enhance More Info menu - Cleanup the looks of manga extra info - Fix Smart background so it works properly(it half worked before) - Community recommendations enhancements, errors now properly show - Add ability to use Neko similar manga for Mangadex manga - Support the short title NHentai source setting - Switch to the Mangadex extension for the low quality cover setting - [b]New[/b] Add push to Mangadex in Mangadex settings - Fix Mangadex settings inconsistencies - [b]New[/b] If the E-Hentai download limit exceeded image is sent, stop downloading - EHentai options will be hidden instead of greyed out when not logged in - Fix MDList tracking stalling when it thinks its logged in but its not - Fix MDList tracking getting set to complete when its not - E-Hentai migrations will be throttled so that you dont get banned - Migrating will migrate viewer, chapter sort, and other stuff - - - [b]New[/b] Share manga info when you share a page - Tweak preload settings, make the max 20, defaults to 10 - Set the new browse + latest view as default - Fix Mangadex 2FA input - Fix backup for merged manga - - - [b]Based on Tachiyomi stable 0.10.5(from 0.10.4)[/b] - [b]New[/b] Delegate MangaDex, add Mangadex Follows browse, import, push, and tracking, as well as a custom manga view! - [b]New[/b] No title grid option - [b]New[/b] Started filter - [b]New[/b] Grab J2k chapters bottom sheet - [b]New[/b] Add data saver proxy server support - [b]New[/b] Long click to copy metadata information - [b]New[/b] Expand manga thumbnails(Inspired by J2k) - [b]Rewritten[/b] Overhaul merge manga, its actually usable now - [b]New[/b] Always display read progress on E-Hentai chapters when preserve reading positon is enabled - [b]New[/b] Add combined latest/browse page as a option - [b]New[/b] Add download as CBZ - Network logging to file fixes - - [b]Based on Tachiyomi stable 0.10.4(from 0.10.2)[/b] - [b]New[/b] cleanup orphaned downloads option (from J2k) - [b]New[/b] delegate Hitomi, please download the extension to continue using your Hitomi manga - [b]New[/b] delegate NHentai, please download the extension to continue using your NHentai manga - [b]New[/b] delegate PervEden, please download the extension to continue using your PervEden manga - [b]New[/b] delegate 8Muses, manga in your library cannot be migrated because of the extension format, 8Muses is in the EroMuse extension - [b]New[/b] Dynamic Categories, inspired by J2ks feature, but written from the ground up, quickly organize your library into different sets of categories, by source, status, and tracking, or totally ungrouped, its in the library bottom sheet - [b]New[/b] Continue reading button, inspired by the J2k feature, it will take you to the first unread chapter, can be toggled in the library bottom sheet - [b]Rewritten[/b] Redo drag and drop, now you can drag and drop in any mode, and it will switch your mode to it when you drag and drop something [b]New[/b] quick clean Titles, adds a quick clean that will clean titles from manga from certain sources, it will quickly remove unnecessary bloat [b]Rewritten[/b] rewrite the library search engine (that was inherited from EH), it now can exclude, use quotes for absolute searches, it supports namespace tags, and a bunch more, its probably the most advanced search engine any Tachi fork has - Fix pressing download unread chapters on an Exh manga would download the latest chapter even if it was read [b]New[/b] smart Background, when using a pager like LTR, the background will now change color depending on the page (from J2k) - [b]New[/b] force disable zoom out option for webtoon mode, no more do you accidently zoom out, on by default but can be toggled off (from J2k) - [b]New[/b] finishing an Exh chapter will mark previous chapters as read - Don’t download new chapters after refreshing Exh manga - Fix a migration crash that happened when the chapter list threw an exception - Fix a start-up crash that made the app unusable for some people - Some icon fixes - Change the way releases are built, likely fixes problems with installing the app for some people - - - [b]Based on Tachiyomi stable 0.10.2(from 0.10.1)[/b] - Delegated HBrowse, if you used that source please install the extension to continue using your manga - - - [b]Based on Tachiyomi stable 0.10.1(from a 0.9.2 preview)[/b] - Made the app translatable! Feel free to ask how to in the Tachiyomi discord or open a issue if you want to help with translations - Move to the new 0.10.0 manga page - [b]New[/b] Add move recommendations to overflow menu option - [b]New[/b] Add special browse view for E-Hentai - [b]New[/b] Add special manga info view to integrated and delegated sources - [b]New[/b] Add special tag view for certain sources - Made global search respect the source manga view setting - [b]New[/b] Manga info edit - [b]New[/b] Pressing download unread chapters on E-Hentai manga will only download the latest version - [b]New[/b] Using the manga floating action button on E-Hentai manga will open the latest version - [b]New[/b] Allow hitomi.la users to select if they want to download manga as webp or not - Fix 8muses - Fix hitomi.la - Fix Pururin - Fix blacklisted nhentai sources - Fix download badges for internal sources - Fix source category deletion crash - - - Welcome to my first full release of TachiyomiSY! - I hope you enjoy your stay, many improvements are planned! diff --git a/data/src/main/java/tachiyomi/data/release/GithubRelease.kt b/data/src/main/java/tachiyomi/data/release/GithubRelease.kt index f7fa16923..0e25fd7a1 100644 --- a/data/src/main/java/tachiyomi/data/release/GithubRelease.kt +++ b/data/src/main/java/tachiyomi/data/release/GithubRelease.kt @@ -13,6 +13,10 @@ data class GithubRelease( @SerialName("body") val info: String, @SerialName("html_url") val releaseLink: String, @SerialName("assets") val assets: List, + // KMK --> + @SerialName("prerelease") val preRelease: Boolean = false, + @SerialName("draft") val draft: Boolean = false, + // KMK <-- ) /** @@ -29,6 +33,8 @@ data class GitHubAssets(@SerialName("browser_download_url") val downloadLink: St * - Cannot begin or end with a hyphen * - Max length of 39 characters * + * Convert '(@cuong-tran)' to '([@cuong-tran](https://github.com/cuong-tran))' + * * Reference: https://stackoverflow.com/a/30281147 */ val gitHubUsernameMentionRegex = @@ -36,13 +42,39 @@ val gitHubUsernameMentionRegex = RegexOption.IGNORE_CASE, ) +// KMK --> +/** + * Convert from: https://github.com/komikku-app/komikku/compare/23d862d17...48fb4a2e6 + * to: [komikku-app/komikku@23d862d17...48fb4a2e6](https://github.com/komikku-app/komikku/compare/23d862d17...48fb4a2e6) + */ +val gitHubCommitsCompareRegex = + """https://github.com/(?[^/]+)/(?[^/]+)/compare/(?[0-9a-f]+)...(?[0-9a-f]+)""".toRegex( + RegexOption.IGNORE_CASE, + ) +// KMK <-- + val releaseMapper: (GithubRelease) -> Release = { Release( it.version, - it.info.replace(gitHubUsernameMentionRegex) { mention -> - "[${mention.value}](https://github.com/${mention.value.substring(1)})" - }, + it.info + .replace(gitHubUsernameMentionRegex) { mention -> + "[${mention.value}](https://github.com/${mention.value.substring(1)})" + } + // KMK --> + .replace(gitHubCommitsCompareRegex) { matchResult -> + val owner = matchResult.groups["owner"]!!.value + val repo = matchResult.groups["repo"]!!.value + val from = matchResult.groups["from"]!!.value + val to = matchResult.groups["to"]!!.value + + "[$owner/$repo@$from...$to](https://github.com/$owner/$repo/compare/$from...$to)" + }, + // KMK <-- it.releaseLink, it.assets.map(GitHubAssets::downloadLink), + // KMK --> + preRelease = it.preRelease, + draft = it.draft, + // KMK <-- ) } diff --git a/data/src/main/java/tachiyomi/data/release/ReleaseServiceImpl.kt b/data/src/main/java/tachiyomi/data/release/ReleaseServiceImpl.kt index ea2363d53..0cdd8bc81 100644 --- a/data/src/main/java/tachiyomi/data/release/ReleaseServiceImpl.kt +++ b/data/src/main/java/tachiyomi/data/release/ReleaseServiceImpl.kt @@ -22,4 +22,16 @@ class ReleaseServiceImpl( .let(releaseMapper) } } + + // KMK --> + override suspend fun releaseNotes(repository: String): List { + return with(json) { + networkService.client + .newCall(GET("https://api.github.com/repos/$repository/releases")) + .awaitSuccess() + .parseAs>() + .map(releaseMapper) + } + } + // KMK <-- } diff --git a/domain/src/main/java/tachiyomi/domain/release/interactor/GetApplicationRelease.kt b/domain/src/main/java/tachiyomi/domain/release/interactor/GetApplicationRelease.kt index 9f399052e..95030e3d6 100644 --- a/domain/src/main/java/tachiyomi/domain/release/interactor/GetApplicationRelease.kt +++ b/domain/src/main/java/tachiyomi/domain/release/interactor/GetApplicationRelease.kt @@ -27,7 +27,27 @@ class GetApplicationRelease( return Result.NoNewUpdate } - val release = service.latest(arguments.repository) + // KMK --> + val releases = service.releaseNotes(arguments.repository) + .filter { + !it.preRelease && isNewVersion( + arguments.isPreview, + arguments.commitCount, + arguments.versionName, + it.version + ) + } + val checksumRegex = """---(\R|.)*Checksums(\R|.)*""".toRegex() + + val release = releases.firstOrNull() + ?.copy( + info = releases.joinToString("\r---\r") { + "## ${it.version}\r\r" + + it.info.replace(checksumRegex, "") + } + ) + if (release == null) return Result.NoNewUpdate + // KMK <-- lastChecked.set(now.toEpochMilli()) @@ -45,6 +65,24 @@ class GetApplicationRelease( } } + // KMK --> + suspend fun awaitReleaseNotes(arguments: Arguments): Result { + val releases = service.releaseNotes(arguments.repository) + .filter { !it.preRelease } + val checksumRegex = """---(\R|.)*Checksums(\R|.)*""".toRegex() + + val release = releases.firstOrNull() + ?.copy( + info = releases.joinToString("\r---\r") { + "## ${it.version}\r\r" + + it.info.replace(checksumRegex, "") + } + ) + if (release == null) return Result.NoNewUpdate + return Result.NewUpdate(release) + } + // KMK <-- + /** * [isPreview] is if current version is Preview (beta) build * diff --git a/domain/src/main/java/tachiyomi/domain/release/model/Release.kt b/domain/src/main/java/tachiyomi/domain/release/model/Release.kt index 10d68d247..82e6e7f4a 100644 --- a/domain/src/main/java/tachiyomi/domain/release/model/Release.kt +++ b/domain/src/main/java/tachiyomi/domain/release/model/Release.kt @@ -10,6 +10,10 @@ data class Release( val info: String, val releaseLink: String, private val assets: List, + // KMK --> + val preRelease: Boolean = false, + val draft: Boolean = false, + // KMK <-- ) { /** diff --git a/domain/src/main/java/tachiyomi/domain/release/service/ReleaseService.kt b/domain/src/main/java/tachiyomi/domain/release/service/ReleaseService.kt index 61bbdb351..9856f8957 100644 --- a/domain/src/main/java/tachiyomi/domain/release/service/ReleaseService.kt +++ b/domain/src/main/java/tachiyomi/domain/release/service/ReleaseService.kt @@ -5,4 +5,8 @@ import tachiyomi.domain.release.model.Release interface ReleaseService { suspend fun latest(repository: String): Release + + // KMK --> + suspend fun releaseNotes(repository: String): List + // KMK <-- } diff --git a/i18n-sy/src/commonMain/resources/MR/base/strings.xml b/i18n-sy/src/commonMain/resources/MR/base/strings.xml index 543f32022..a9e1e061f 100644 --- a/i18n-sy/src/commonMain/resources/MR/base/strings.xml +++ b/i18n-sy/src/commonMain/resources/MR/base/strings.xml @@ -465,6 +465,7 @@ Skip this step next time Hide not found entries Search parameter (e.g. language:english) + Current: %1$s Latest: %1$s migrating to Match pinned sources diff --git a/i18n/src/commonMain/resources/MR/base/strings.xml b/i18n/src/commonMain/resources/MR/base/strings.xml index 5c5e4632d..7828738b8 100644 --- a/i18n/src/commonMain/resources/MR/base/strings.xml +++ b/i18n/src/commonMain/resources/MR/base/strings.xml @@ -608,6 +608,7 @@ Website Version What\'s new + What\'s coming (soon) Help translate Open source licenses Privacy policy @@ -896,6 +897,7 @@ Download + Try now Open on GitHub This Android version is no longer supported @@ -906,6 +908,7 @@ Tap to install update Download error New version available! + Coming (soon) updates! A new version is available from the official releases. Tap to learn how to migrate from unofficial F-Droid releases.