diff --git a/app/src/main/java/eu/kanade/domain/chapter/interactor/SyncChaptersWithSource.kt b/app/src/main/java/eu/kanade/domain/chapter/interactor/SyncChaptersWithSource.kt index f7d9a9d73..f4d41a3d9 100644 --- a/app/src/main/java/eu/kanade/domain/chapter/interactor/SyncChaptersWithSource.kt +++ b/app/src/main/java/eu/kanade/domain/chapter/interactor/SyncChaptersWithSource.kt @@ -200,7 +200,7 @@ class SyncChaptersWithSource( bookmark = chapter.chapterNumber in deletedBookmarkedChapterNumbers, ) - // Try to to use the fetch date of the original entry to not pollute 'Updates' tab + // Try to use the fetch date of the original entry to not pollute 'Updates' tab deletedChapterNumberDateFetchMap[chapter.chapterNumber]?.let { chapter = chapter.copy(dateFetch = it) } 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 ccd66c659..47cb647ab 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 @@ -293,9 +293,14 @@ object SettingsLibraryScreen : SearchableSettings { title = stringResource(KMR.strings.pref_show_empty_categories_search), ), Preference.PreferenceItem.SwitchPreference( - preference = libraryPreferences.syncOnAdd(), - title = stringResource(KMR.strings.pref_sync_manga_on_add), - subtitle = stringResource(KMR.strings.pref_sync_manga_on_add_description), + preference = libraryPreferences.fetchMetadataOnAdd(), + title = stringResource(KMR.strings.pref_fetch_manga_metadata_on_add), + subtitle = stringResource(KMR.strings.pref_fetch_manga_metadata_on_add_description), + ), + Preference.PreferenceItem.SwitchPreference( + preference = libraryPreferences.fetchChaptersOnAdd(), + title = stringResource(KMR.strings.pref_fetch_manga_chapters_on_add), + subtitle = stringResource(KMR.strings.pref_fetch_manga_chapters_on_add_description), ), // KMK <-- ), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/BulkFavoriteScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/BulkFavoriteScreenModel.kt index 4000dbbeb..1c29aaf72 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/BulkFavoriteScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/BulkFavoriteScreenModel.kt @@ -1,6 +1,5 @@ package eu.kanade.tachiyomi.ui.browse -import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Immutable import androidx.compose.ui.hapticfeedback.HapticFeedback import androidx.compose.ui.hapticfeedback.HapticFeedbackType @@ -60,7 +59,6 @@ class BulkFavoriteScreenModel( private val setMangaDefaultChapterFlags: SetMangaDefaultChapterFlags = Injekt.get(), private val addTracks: AddTracks = Injekt.get(), private val syncChaptersWithSource: SyncChaptersWithSource = Injekt.get(), - val snackbarHostState: SnackbarHostState = SnackbarHostState(), ) : StateScreenModel(initialState) { fun backHandler() { @@ -83,7 +81,7 @@ class BulkFavoriteScreenModel( } /** - * @param toSelectedState set to true to only Select, set to false to only Unselect + * @param toSelectedState set to `true` to only Select, set to `false` to only Unselect */ fun toggleSelection(manga: Manga, toSelectedState: Boolean? = null) { mutableState.update { state -> @@ -131,7 +129,7 @@ class BulkFavoriteScreenModel( if (entryWithDuplicates != null) { val (index, manga, duplicates) = entryWithDuplicates if (state.value.selection.size == 1) { - // If only one manga is selected, show the multiple duplicates dialog. + // If only one manga is selected, show the multiple-duplicates dialog. setDialog(Dialog.AddDuplicateManga(manga, duplicates)) } else { setDialog(Dialog.BulkAllowDuplicate(manga, duplicates, index)) @@ -256,17 +254,22 @@ class BulkFavoriteScreenModel( setMangaDefaultChapterFlags.await(manga) addTracks.bindEnhancedTrackers(manga, source) updateManga.awaitUpdateFavorite(manga.id, true) - if (libraryPreferences.syncOnAdd().get()) { + val fetchMetadataOnAdd = libraryPreferences.fetchMetadataOnAdd().get() + val fetchChaptersOnAdd = libraryPreferences.fetchChaptersOnAdd().get() + if (fetchMetadataOnAdd || fetchChaptersOnAdd) { val sManga = manga.toSManga() - val remoteManga = source.getMangaDetails(sManga) - val chapters = source.getChapterList(sManga) - // Use `manga` instead of `new` so its title got updated with source's `getMangaDetails` - updateManga.awaitUpdateFromSource(manga, remoteManga, false, coverCache) - syncChaptersWithSource.await(chapters, manga, source, false) + if (fetchMetadataOnAdd) { + val remoteMetadata = source.getMangaDetails(sManga) + // Use `manga` instead of `new` so its title got updated with source's `getMangaDetails` + updateManga.awaitUpdateFromSource(manga, remoteMetadata, false, coverCache) + } + if (fetchChaptersOnAdd) { + val chapters = source.getChapterList(sManga) + syncChaptersWithSource.await(chapters, manga, source, false) + } } } catch (e: Exception) { logcat(LogPriority.ERROR, e) - snackbarHostState.showSnackbar(message = "Failed to sync manga: ${e.message}") } } } @@ -351,18 +354,23 @@ class BulkFavoriteScreenModel( } updateManga.await(new.toMangaUpdate()) - if (new.favorite && libraryPreferences.syncOnAdd().get()) { + val fetchMetadataOnAdd = libraryPreferences.fetchMetadataOnAdd().get() + val fetchChaptersOnAdd = libraryPreferences.fetchChaptersOnAdd().get() + if (new.favorite && (fetchMetadataOnAdd || fetchChaptersOnAdd)) { withIOContext { try { val sManga = manga.toSManga() - val remoteManga = source.getMangaDetails(sManga) - val chapters = source.getChapterList(sManga) - // Use `manga` instead of `new` so its title got updated with source's `getMangaDetails` - updateManga.awaitUpdateFromSource(manga, remoteManga, false, coverCache) - syncChaptersWithSource.await(chapters, manga, source, false) + if (fetchMetadataOnAdd) { + val remoteMetadata = source.getMangaDetails(sManga) + // Use `manga` instead of `new` so its title got updated with source's `getMangaDetails` + updateManga.awaitUpdateFromSource(manga, remoteMetadata, false, coverCache) + } + if (fetchChaptersOnAdd) { + val chapters = source.getChapterList(sManga) + syncChaptersWithSource.await(chapters, manga, source, false) + } } catch (e: Exception) { logcat(LogPriority.ERROR, e) - snackbarHostState.showSnackbar(message = "Failed to sync manga: ${e.message}") } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt index 75b8219c9..d44f87764 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt @@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.ui.browse.source.browse import android.content.res.Configuration import androidx.compose.foundation.lazy.grid.GridCells -import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Immutable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -120,7 +119,6 @@ open class BrowseSourceScreenModel( private val toggleIncognito: ToggleIncognito = Injekt.get(), private val extensionManager: ExtensionManager = Injekt.get(), private val syncChaptersWithSource: SyncChaptersWithSource = Injekt.get(), - val snackbarHostState: SnackbarHostState = SnackbarHostState(), // KMK <-- // SY --> @@ -424,20 +422,23 @@ open class BrowseSourceScreenModel( updateManga.await(new.toMangaUpdate()) // KMK --> - if (new.favorite && libraryPreferences.syncOnAdd().get()) { + val fetchMetadataOnAdd = libraryPreferences.fetchMetadataOnAdd().get() + val fetchChaptersOnAdd = libraryPreferences.fetchChaptersOnAdd().get() + if (new.favorite && (fetchMetadataOnAdd || fetchChaptersOnAdd)) { withIOContext { try { val sManga = manga.toSManga() - val remoteManga = source.getMangaDetails(sManga) - val chapters = source.getChapterList(sManga) - // Use `manga` instead of `new` so its title got updated with source's `getMangaDetails` - updateManga.awaitUpdateFromSource(manga, remoteManga, false, coverCache) - syncChaptersWithSource.await(chapters, manga, source, false) + if (fetchMetadataOnAdd) { + val remoteMetadata = source.getMangaDetails(sManga) + // Use `manga` instead of `new` so its title got updated with source's `getMangaDetails` + updateManga.awaitUpdateFromSource(manga, remoteMetadata, false, coverCache) + } + if (fetchChaptersOnAdd) { + val chapters = source.getChapterList(sManga) + syncChaptersWithSource.await(chapters, manga, source, false) + } } catch (e: Exception) { logcat(LogPriority.ERROR, e) - screenModelScope.launch { - snackbarHostState.showSnackbar(message = "Failed to sync manga: ${e.message}") - } } } } diff --git a/domain/src/main/java/tachiyomi/domain/library/service/LibraryPreferences.kt b/domain/src/main/java/tachiyomi/domain/library/service/LibraryPreferences.kt index 5209d95b9..053debf13 100644 --- a/domain/src/main/java/tachiyomi/domain/library/service/LibraryPreferences.kt +++ b/domain/src/main/java/tachiyomi/domain/library/service/LibraryPreferences.kt @@ -74,7 +74,8 @@ class LibraryPreferences( fun autoUpdateMetadata() = preferenceStore.getBoolean("auto_update_metadata", false) // KMK --> - fun syncOnAdd() = preferenceStore.getBoolean("sync_on_add", false) + fun fetchMetadataOnAdd() = preferenceStore.getBoolean("fetch_metadata_on_add", false) + fun fetchChaptersOnAdd() = preferenceStore.getBoolean("fetch_chapters_on_add", false) // KMK <-- fun showContinueReadingButton() = preferenceStore.getBoolean( diff --git a/i18n-kmk/src/commonMain/moko-resources/ar/strings.xml b/i18n-kmk/src/commonMain/moko-resources/ar/strings.xml index e85a1a754..df7a724f5 100644 --- a/i18n-kmk/src/commonMain/moko-resources/ar/strings.xml +++ b/i18n-kmk/src/commonMain/moko-resources/ar/strings.xml @@ -145,9 +145,11 @@ لن يتم عرض العناصر في الفئات المستبعدة حتى لو كانت موجودة أيضًا في الفئات المشمولة. جاري التحديث عرض الفئات الفارغة أثناء البحث/التصفية - مزامنة المانجا عند إضافتها إلى المكتبة - يقوم تلقائيًا بجلب البيانات الوصفية وقائمة الفصول الخاصة بمانجا جديدة عند إضافتها إلى المكتبة فتح قائمة المزامنة عند الإضافة للمكتبة + تحديث بيانات المانجا عند الإضافة للمكتبة + جلب العنوان والوصف والعلامات وغيرها عند إضافة المانجا إلى المكتبة + جلب الفصول عند الإضافة للمكتبة + تحديث قائمة الفصول مباشرة بعد إضافة المانجا إلى المكتبة WebDAV رابط سيرفر WebDAV ادخل رابط سيرفر WebDAV diff --git a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml index 62f531c5b..4bfb09902 100644 --- a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml +++ b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml @@ -96,8 +96,10 @@ Entries in excluded categories will not be shown even if they are also in included categories. Updating Show empty categories during search/filtering - Sync manga when adding to library - Automatically fetches the metadata and chapter list of a new manga when adding it to the library + Fetch metadata when adding to library + Automatically fetches the metadata of a new manga when adding it to the library + Fetch chapters when adding to library + Automatically fetches the chapter list of a new manga when adding it to the library Refresh extension page to update list. More extensions... diff --git a/i18n-kmk/src/commonMain/moko-resources/fil/strings.xml b/i18n-kmk/src/commonMain/moko-resources/fil/strings.xml index 37cd80a83..35461dd78 100644 --- a/i18n-kmk/src/commonMain/moko-resources/fil/strings.xml +++ b/i18n-kmk/src/commonMain/moko-resources/fil/strings.xml @@ -172,12 +172,14 @@ Di natapos na kabanata Mga entry na wala sa aklatan Kaswal - I-sync ang manga kapag nagdadagdag sa aklatan - Awtomatikong kinukuha ang metadata at listahan ng kabanata ng isang bagong manga kapag idinagdag ito sa aklatan Server URL ng WebDAV Ipasok ang address ng WebDAV server Ipasok ang iyong username ng WebDAV account Ipasok ang iyong password ng WebDAV account Ise-save ng aplikasyon ang data sa folder na ito Rich Presence ng Discord + Kunin ang metadata ng manga kapag idinadagdag sa aklatan + Awtomatikong kunin at i-update ang metadata ng manga kapag idinagdag mo ito sa iyong aklatan + Kunin ang mga kabanata kapag idinadagdag ang manga sa aklatan + Awtomatikong i-scan ang source para sa mga kabanata kapag idinagdag ang manga sa iyong aklatan diff --git a/i18n-kmk/src/commonMain/moko-resources/it/strings.xml b/i18n-kmk/src/commonMain/moko-resources/it/strings.xml index b0802f505..b1f921db7 100644 --- a/i18n-kmk/src/commonMain/moko-resources/it/strings.xml +++ b/i18n-kmk/src/commonMain/moko-resources/it/strings.xml @@ -173,7 +173,6 @@ Apri per configurare Discord RPC Impossibile aprire cartella Mostra categorie vuote durante ricerca/filtraggio - Sincronizzare i manga quando vengono aggiunti alla libreria Capitoli e cronologia dal database Pianificazione aggiornamento automatico libreria fallita: %s Pianificazione backup automatico fallito: %s @@ -186,7 +185,6 @@ Mostra copertina allineata in alto accanto alle informazioni sul manga Doom Le voci nelle categorie escluse non verranno mostrate anche se presenti nelle categorie incluse. - Recupera automaticamente i metadati e l\'elenco dei capitoli di un nuovo manga quando lo aggiungi alla libreria WebDAV Se abilitato, seleziona automaticamente il risultato con la corrispondenza migliore. Altrimenti, mostra tutti i risultati della ricerca per la selezione manuale. Discord, altri in arrivo... diff --git a/i18n-kmk/src/commonMain/moko-resources/ru/strings.xml b/i18n-kmk/src/commonMain/moko-resources/ru/strings.xml index 5301b91d8..86bbcd3c5 100644 --- a/i18n-kmk/src/commonMain/moko-resources/ru/strings.xml +++ b/i18n-kmk/src/commonMain/moko-resources/ru/strings.xml @@ -204,8 +204,10 @@ Незаконченные тайтлы Незаконченные главы Тайтлы не в библиотеке - Синхронизировать тайтлы при добавлении в библиотеку - Автоматически загружает метаданные и список глав при добавлении в библиотеку Использовать умный поиск Если включено, автоматически выбирает наиболее совпадающий результат. Иначе, показывает все результаты поиска для ручного выбора. + Получать метаданные манги при добавлении + Автоматически загружать обложку, описание и другую информацию при добавлении манги в библиотеку + Получать главы при добавлении + Автоматически обновлять список глав при добавлении манги в библиотеку diff --git a/i18n-kmk/src/commonMain/moko-resources/zh-rTW/strings.xml b/i18n-kmk/src/commonMain/moko-resources/zh-rTW/strings.xml index 9fde8c2ed..53fbe39e0 100644 --- a/i18n-kmk/src/commonMain/moko-resources/zh-rTW/strings.xml +++ b/i18n-kmk/src/commonMain/moko-resources/zh-rTW/strings.xml @@ -195,8 +195,6 @@ 尚未讀完 未讀完章節 未收藏項目 - 新增至書庫時自動同步 - 將新漫畫加入書庫時,自動取得其元資料及章節列表 WebDAV WebDAV 伺服器 URL 輸入 WebDAV 伺服器地址 @@ -208,4 +206,8 @@ 應用將把資料儲存在這個資料夾中 使用智慧搜尋 若已啟用,自動選取最佳匹配結果,否則顯示所有搜尋結果供手動選擇 + 新增至書櫃時更新漫畫資料 + 在將作品加入書櫃後,自動抓取標題、作者等最新漫畫資訊 + 新增至書櫃時更新章節列表 + 在將作品加入書櫃後,自動抓取最新章節列表