diff --git a/README.md b/README.md index 3b8b057b0..4c8e8de44 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,11 @@ Mihon is a free and open source manga reader for Android 6.0 and above. This ver ## Features +Features of SY-Plus include: +* Automatically trust extensions +* Removal of rate limits +* Re addition of more frequent library update timers + Features of Mihon(original) include: * Online reading from a variety of sources * Local reading of downloaded content diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt index d67724054..94f64234c 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt @@ -487,13 +487,6 @@ object SettingsAdvancedScreen : SearchableSettings { } }, ), - Preference.PreferenceItem.TextPreference( - title = stringResource(MR.strings.ext_revoke_trust), - onClick = { - trustExtension.revokeAll() - context.toast(MR.strings.requires_app_restart) - }, - ), ), ) } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt index 3c77da500..e835dbb37 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt @@ -275,7 +275,10 @@ object SettingsDataScreen : SearchableSettings { preference = backupPreferences.backupInterval(), entries = persistentMapOf( 0 to stringResource(MR.strings.off), + 1 to stringResource(MR.strings.update_1hour), + 3 to stringResource(MR.strings.update_3hour), 6 to stringResource(MR.strings.update_6hour), + 8 to stringResource(MR.strings.update_8hour), 12 to stringResource(MR.strings.update_12hour), 24 to stringResource(MR.strings.update_24hour), 48 to stringResource(MR.strings.update_48hour), diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt index 461c975a7..188cb70f6 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt @@ -157,6 +157,10 @@ object SettingsLibraryScreen : SearchableSettings { preference = autoUpdateIntervalPref, entries = persistentMapOf( 0 to stringResource(MR.strings.update_never), + 1 to stringResource(MR.strings.update_1hour), + 3 to stringResource(MR.strings.update_3hour), + 6 to stringResource(MR.strings.update_6hour), + 8 to stringResource(MR.strings.update_8hour), 12 to stringResource(MR.strings.update_12hour), 24 to stringResource(MR.strings.update_24hour), 48 to stringResource(MR.strings.update_48hour), diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt index 3ac53ee2d..69d267639 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt @@ -377,9 +377,9 @@ class Downloader( download.status = Download.State.DOWNLOADING // Start downloading images, consider we can have downloaded images already - // Concurrently do 2 pages at a time + // Concurrently do 16 pages at a time pageList.asFlow() - .flatMapMerge(concurrency = 2) { page -> + .flatMapMerge(concurrency = 16) { page -> flow { // Fetch image URL if necessary if (page.imageUrl.isNullOrEmpty()) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistApi.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistApi.kt index 07aa1b632..da45c1a4b 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistApi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistApi.kt @@ -14,7 +14,7 @@ import eu.kanade.tachiyomi.data.track.model.TrackMangaMetadata import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.awaitSuccess -import eu.kanade.tachiyomi.network.interceptor.rateLimit +import eu.kanade.tachiyomi.network.interceptor.reallyApplyRateLimit import eu.kanade.tachiyomi.network.jsonMime import eu.kanade.tachiyomi.network.parseAs import eu.kanade.tachiyomi.util.lang.htmlDecode @@ -40,7 +40,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) { private val authClient = client.newBuilder() .addInterceptor(interceptor) - .rateLimit(permits = 85, period = 1.minutes) + .reallyApplyRateLimit(permits = 85, period = 1.minutes) .build() suspend fun addLibManga(track: Track): Track { diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt index 739ce15cc..c76401a50 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt @@ -252,7 +252,7 @@ internal object ExtensionLoader { if (signatures.isNullOrEmpty()) { logcat(LogPriority.WARN) { "Package $pkgName isn't signed" } return LoadResult.Error - } else if (!trustExtension.isTrusted(pkgInfo, signatures)) { + } else if (false) { val extension = Extension.Untrusted( extName, pkgName, diff --git a/app/src/main/java/mihon/core/migration/migrations/Migrations.kt b/app/src/main/java/mihon/core/migration/migrations/Migrations.kt index fdb04bfbc..1d204128d 100644 --- a/app/src/main/java/mihon/core/migration/migrations/Migrations.kt +++ b/app/src/main/java/mihon/core/migration/migrations/Migrations.kt @@ -17,9 +17,7 @@ val migrations: List ResetReaderSettingsMigration(), DeleteOldMangaDexTracksMigration(), RemoveOldReaderThemeMigration(), - RemoveShorterLibraryUpdatesMigration(), MoveLibrarySortingSettingsMigration(), - RemoveShortLibraryUpdatesMigration(), MoveLibraryNonCompleteSettingMigration(), DeleteOldEhFavoritesDatabaseMigration(), MoveSecureScreenSettingMigration(), diff --git a/app/src/main/java/mihon/core/migration/migrations/RemoveShortLibraryUpdatesMigration.kt b/app/src/main/java/mihon/core/migration/migrations/RemoveShortLibraryUpdatesMigration.kt deleted file mode 100644 index 5c8d08cfe..000000000 --- a/app/src/main/java/mihon/core/migration/migrations/RemoveShortLibraryUpdatesMigration.kt +++ /dev/null @@ -1,20 +0,0 @@ -package mihon.core.migration.migrations - -import mihon.core.migration.Migration -import mihon.core.migration.MigrationContext -import tachiyomi.core.common.util.lang.withIOContext -import tachiyomi.domain.library.service.LibraryPreferences - -class RemoveShortLibraryUpdatesMigration : Migration { - override val version: Float = 22f - - override suspend fun invoke(migrationContext: MigrationContext): Boolean = withIOContext { - val libraryPreferences = migrationContext.get() ?: return@withIOContext false - val updateInterval = libraryPreferences.autoUpdateInterval().get() - if (updateInterval in listOf(3, 4, 6, 8)) { - libraryPreferences.autoUpdateInterval().set(12) - } - - return@withIOContext true - } -} diff --git a/app/src/main/java/mihon/core/migration/migrations/RemoveShorterLibraryUpdatesMigration.kt b/app/src/main/java/mihon/core/migration/migrations/RemoveShorterLibraryUpdatesMigration.kt deleted file mode 100644 index 5716ca125..000000000 --- a/app/src/main/java/mihon/core/migration/migrations/RemoveShorterLibraryUpdatesMigration.kt +++ /dev/null @@ -1,20 +0,0 @@ -package mihon.core.migration.migrations - -import mihon.core.migration.Migration -import mihon.core.migration.MigrationContext -import tachiyomi.core.common.util.lang.withIOContext -import tachiyomi.domain.library.service.LibraryPreferences - -class RemoveShorterLibraryUpdatesMigration : Migration { - override val version: Float = 18f - - override suspend fun invoke(migrationContext: MigrationContext): Boolean = withIOContext { - val libraryPreferences = migrationContext.get() ?: return@withIOContext false - val updateInterval = libraryPreferences.autoUpdateInterval().get() - if (updateInterval == 1 || updateInterval == 2) { - libraryPreferences.autoUpdateInterval().set(3) - } - - return@withIOContext true - } -} diff --git a/core/common/src/main/kotlin/eu/kanade/tachiyomi/network/interceptor/RateLimitInterceptor.kt b/core/common/src/main/kotlin/eu/kanade/tachiyomi/network/interceptor/RateLimitInterceptor.kt index eab5ec302..a6ba6db9e 100644 --- a/core/common/src/main/kotlin/eu/kanade/tachiyomi/network/interceptor/RateLimitInterceptor.kt +++ b/core/common/src/main/kotlin/eu/kanade/tachiyomi/network/interceptor/RateLimitInterceptor.kt @@ -35,7 +35,7 @@ fun OkHttpClient.Builder.rateLimit( permits: Int, period: Long = 1, unit: TimeUnit = TimeUnit.SECONDS, -) = addInterceptor(RateLimitInterceptor(null, permits, period.toDuration(unit.toDurationUnit()))) +) = this /** * An OkHttp interceptor that handles rate limiting. @@ -51,6 +51,9 @@ fun OkHttpClient.Builder.rateLimit( * @param period [Duration] The limiting duration. Defaults to 1.seconds. */ fun OkHttpClient.Builder.rateLimit(permits: Int, period: Duration = 1.seconds) = + this + +fun OkHttpClient.Builder.reallyApplyRateLimit(permits: Int, period: Duration = 1.seconds) = addInterceptor(RateLimitInterceptor(null, permits, period)) /** We can probably accept domains or wildcards by comparing with [endsWith], etc. */ diff --git a/i18n/src/commonMain/moko-resources/base/strings.xml b/i18n/src/commonMain/moko-resources/base/strings.xml index f7939238a..5b483fb5c 100755 --- a/i18n/src/commonMain/moko-resources/base/strings.xml +++ b/i18n/src/commonMain/moko-resources/base/strings.xml @@ -1,6 +1,6 @@ - TachiyomiSY + TachiyomiSY Plus On @@ -276,7 +276,10 @@ Global update Automatic updates Off + Every 1 hour + Every 3 hours Every 6 hours + Every 8 hours Every 12 hours Daily Every 2 days