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 51da445da..8878b3ba2 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 @@ -88,6 +88,7 @@ import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.core.common.util.system.ImageUtil import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.chapter.interactor.GetChaptersByMangaId +import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.manga.interactor.GetAllManga import tachiyomi.domain.manga.interactor.ResetViewerFlags @@ -120,7 +121,10 @@ object SettingsAdvancedScreen : SearchableSettings { val basePreferences = remember { Injekt.get() } val networkPreferences = remember { Injekt.get() } val libraryPreferences = remember { Injekt.get() } + // SY --> + val downloadPreferences = remember { Injekt.get() } val exhPreferences = remember { Injekt.get() } + // SY <-- return listOf( Preference.PreferenceItem.TextPreference( @@ -180,6 +184,9 @@ object SettingsAdvancedScreen : SearchableSettings { getDataGroup(), getNetworkGroup(networkPreferences = networkPreferences), getLibraryGroup(libraryPreferences = libraryPreferences), + // SY --> + getDownloadsGroup(downloadPreferences = downloadPreferences), + // SY <-- getReaderGroup(basePreferences = basePreferences), getExtensionsGroup(basePreferences = basePreferences), // SY --> @@ -400,6 +407,24 @@ object SettingsAdvancedScreen : SearchableSettings { ) } + // SY -> + @Composable + private fun getDownloadsGroup( + downloadPreferences: DownloadPreferences, + ): Preference.PreferenceGroup { + return Preference.PreferenceGroup( + title = stringResource(MR.strings.pref_category_downloads), + preferenceItems = persistentListOf( + Preference.PreferenceItem.SwitchPreference( + preference = downloadPreferences.includeChapterUrlHash(), + title = stringResource(SYMR.strings.pref_include_chapter_url_hash), + subtitle = stringResource(SYMR.strings.pref_include_chapter_url_hash_desc), + ), + ), + ) + } + // <- SY + @Composable private fun getReaderGroup( basePreferences: BasePreferences, diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt index 75f64c029..6c7152f7b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt @@ -10,6 +10,7 @@ import tachiyomi.core.common.i18n.stringResource import tachiyomi.core.common.storage.displayablePath import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.chapter.model.Chapter +import tachiyomi.domain.download.service.DownloadPreferences import tachiyomi.domain.library.service.LibraryPreferences import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.storage.service.StorageManager @@ -29,6 +30,9 @@ class DownloadProvider( private val context: Context, private val storageManager: StorageManager = Injekt.get(), private val libraryPreferences: LibraryPreferences = Injekt.get(), + // SY --> + private val downloadPreferences: DownloadPreferences = Injekt.get(), + // SY <-- ) { private val downloadsDir: UniFile? @@ -209,6 +213,9 @@ class DownloadProvider( chapterScanlator: String?, chapterUrl: String, disallowNonAsciiFilenames: Boolean = libraryPreferences.disallowNonAsciiFilenames().get(), + // SY --> + includeChapterUrlHash: Boolean = downloadPreferences.includeChapterUrlHash().get(), + // SY <-- ): String { var dirName = sanitizeChapterName(chapterName) if (!chapterScanlator.isNullOrBlank()) { @@ -216,7 +223,7 @@ class DownloadProvider( } // Subtract 7 bytes for hash and underscore, 4 bytes for .cbz dirName = DiskUtil.buildValidFilename(dirName, DiskUtil.MAX_FILE_NAME_BYTES - 11, disallowNonAsciiFilenames) - dirName += "_" + md5(chapterUrl).take(6) + /* SY --> */ if (includeChapterUrlHash) /* SY <-- */ dirName += "_" + md5(chapterUrl).take(6) return dirName } @@ -243,7 +250,7 @@ class DownloadProvider( ) // Get the filename that would be generated if the user were - // using the other value for the disallow non-ASCII + // using the other value for the disallow non-ASCII or non-hash // filenames setting. This ensures that chapters downloaded // before the user changed the setting can still be found. val otherChapterDirName = @@ -252,6 +259,9 @@ class DownloadProvider( chapterScanlator, chapterUrl, !libraryPreferences.disallowNonAsciiFilenames().get(), + // SY --> + !downloadPreferences.includeChapterUrlHash().get(), + // SY <-- ) return buildList(2) { diff --git a/domain/src/main/java/tachiyomi/domain/download/service/DownloadPreferences.kt b/domain/src/main/java/tachiyomi/domain/download/service/DownloadPreferences.kt index 21586b356..9d2a481a1 100644 --- a/domain/src/main/java/tachiyomi/domain/download/service/DownloadPreferences.kt +++ b/domain/src/main/java/tachiyomi/domain/download/service/DownloadPreferences.kt @@ -41,6 +41,10 @@ class DownloadPreferences( fun parallelPageLimit() = preferenceStore.getInt("download_parallel_page_limit", 5) + // SY --> + fun includeChapterUrlHash() = preferenceStore.getBoolean("download_include_chapter_url_hash", true) + // SY <-- + // KMK --> fun downloadCacheRenewInterval() = preferenceStore.getInt("download_cache_renew_interval", 1) // KMK <-- diff --git a/i18n-sy/src/commonMain/moko-resources/base/strings.xml b/i18n-sy/src/commonMain/moko-resources/base/strings.xml index 0dfaa6c28..703923ac8 100644 --- a/i18n-sy/src/commonMain/moko-resources/base/strings.xml +++ b/i18n-sy/src/commonMain/moko-resources/base/strings.xml @@ -153,6 +153,8 @@ Bandwidth Hero Proxy Server Put Bandwidth Hero Proxy server url here Keep entries with read chapters + Include chapter URL hash + Append the first six characters of the chapter URL's MD5 hash to the chapter file or folder name. Minimal