From 55fc1aeadd284dda1386dd40339ed6b59e31905d Mon Sep 17 00:00:00 2001 From: Koitharu Date: Sun, 11 Oct 2020 13:55:04 +0300 Subject: [PATCH] Option to configure tracked manga --- .../kotatsu/core/prefs/AppSettings.kt | 8 ++++ .../domain/tracking/TrackingRepository.kt | 44 +++++++++++-------- .../ui/settings/MainSettingsFragment.kt | 4 +- .../kotatsu/ui/tracker/TrackWorker.kt | 11 ++++- app/src/main/res/values-ru/strings.xml | 12 ++--- app/src/main/res/values/arrays.xml | 4 ++ app/src/main/res/values/constants.xml | 8 ++++ app/src/main/res/values/strings.xml | 24 +++++----- app/src/main/res/xml/pref_main.xml | 24 ++++++---- 9 files changed, 93 insertions(+), 46 deletions(-) diff --git a/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt b/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt index d1bf1a919..b00b1c19f 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt @@ -87,6 +87,11 @@ class AppSettings private constructor(resources: Resources, private val prefs: S false ) + val trackSources by StringSetPreferenceDelegate( + resources.getString(R.string.key_track_sources), + setOf(TRACK_FAVOURITES, TRACK_HISTORY) + ) + private var sourcesOrderStr by NullableStringPreferenceDelegate(resources.getString(R.string.key_sources_order)) var sourcesOrder: List @@ -127,5 +132,8 @@ class AppSettings private constructor(resources: Resources, private val prefs: S const val PAGE_SWITCH_TAPS = "taps" const val PAGE_SWITCH_VOLUME_KEYS = "volume" + + const val TRACK_HISTORY = "history" + const val TRACK_FAVOURITES = "favourites" } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/domain/tracking/TrackingRepository.kt b/app/src/main/java/org/koitharu/kotatsu/domain/tracking/TrackingRepository.kt index 9f6df13f3..e9dff68cf 100644 --- a/app/src/main/java/org/koitharu/kotatsu/domain/tracking/TrackingRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/domain/tracking/TrackingRepository.kt @@ -19,26 +19,32 @@ class TrackingRepository : KoinComponent { return entity.newChapters } - suspend fun getAllTracks(): List { - val favourites = db.favouritesDao.findAllManga() - val history = db.historyDao.findAllManga() - val mangas = (favourites + history).distinctBy { it.id } - val tracks = db.tracksDao.findAll().groupBy { it.mangaId } - return mangas.mapNotNull { me -> - var manga = me.toManga() - if (manga.source == MangaSource.LOCAL) { - manga = MangaProviderFactory.createLocal().getRemoteManga(manga) - ?: return@mapNotNull null - } - val track = tracks[manga.id]?.singleOrNull() - MangaTracking( - manga = manga, - knownChaptersCount = track?.totalChapters ?: -1, - lastChapterId = track?.lastChapterId ?: 0L, - lastNotifiedChapterId = track?.lastNotifiedChapterId ?: 0L, - lastCheck = track?.lastCheck?.takeUnless { it == 0L }?.let(::Date) - ) + suspend fun getAllTracks(useFavourites: Boolean, useHistory: Boolean): List { + val mangaList = ArrayList() + if (useFavourites) { + db.favouritesDao.findAllManga().mapTo(mangaList) { it.toManga() } } + if (useHistory) { + db.historyDao.findAllManga().mapTo(mangaList) { it.toManga() } + } + val tracks = db.tracksDao.findAll().groupBy { it.mangaId } + return mangaList + .distinctBy { it.id } + .mapNotNull { me -> + val manga = if (me.source == MangaSource.LOCAL) { + MangaProviderFactory.createLocal().getRemoteManga(me) + } else { + me + } ?: return@mapNotNull null + val track = tracks[manga.id]?.singleOrNull() + MangaTracking( + manga = manga, + knownChaptersCount = track?.totalChapters ?: -1, + lastChapterId = track?.lastChapterId ?: 0L, + lastNotifiedChapterId = track?.lastNotifiedChapterId ?: 0L, + lastCheck = track?.lastCheck?.takeUnless { it == 0L }?.let(::Date) + ) + } } suspend fun getTrackingLog(offset: Int, limit: Int): List { diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/settings/MainSettingsFragment.kt b/app/src/main/java/org/koitharu/kotatsu/ui/settings/MainSettingsFragment.kt index a22f15647..8b81724cc 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/settings/MainSettingsFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/settings/MainSettingsFragment.kt @@ -41,6 +41,8 @@ class MainSettingsFragment : BasePreferenceFragment(R.string.settings), } findPreference(R.string.key_reader_switchers)?.summaryProvider = MultiSummaryProvider(R.string.gestures_only) + findPreference(R.string.key_track_sources)?.summaryProvider = + MultiSummaryProvider(R.string.dont_check) findPreference(R.string.key_app_update_auto)?.run { isVisible = AppUpdateChecker.isUpdateSupported(context) } @@ -105,7 +107,7 @@ class MainSettingsFragment : BasePreferenceFragment(R.string.settings), } getString(R.string.key_local_storage) -> { val ctx = context ?: return false - StorageSelectDialog.Builder(ctx, settings.getStorageDir(ctx),this) + StorageSelectDialog.Builder(ctx, settings.getStorageDir(ctx), this) .setTitle(preference.title) .setNegativeButton(android.R.string.cancel) .create() diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/tracker/TrackWorker.kt b/app/src/main/java/org/koitharu/kotatsu/ui/tracker/TrackWorker.kt index fcc6d8bfc..45d66bf5a 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/tracker/TrackWorker.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/tracker/TrackWorker.kt @@ -36,9 +36,16 @@ class TrackWorker(context: Context, workerParams: WorkerParameters) : private val settings by inject() - override suspend fun doWork(): Result = withContext(Dispatchers.IO) { + override suspend fun doWork(): Result = withContext(Dispatchers.Default) { + val trackSources = settings.trackSources + if (trackSources.isEmpty()) { + return@withContext Result.success() + } val repo = TrackingRepository() - val tracks = repo.getAllTracks() + val tracks = repo.getAllTracks( + useFavourites = AppSettings.TRACK_FAVOURITES in trackSources, + useHistory = AppSettings.TRACK_HISTORY in trackSources + ) if (tracks.isEmpty()) { return@withContext Result.success() } diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 6d07bc4b7..dac5db2da 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -89,14 +89,14 @@ Отмена… Ошибка Очистить кэш миниатюр - Очистить историю поиска - История поиска очищена + Очистить историю поиска + История поиска очищена Только жесты Внутренний накопитель Внешнее хранилище - Домен - По умолчанию - Обновление приложения + Домен + По умолчанию + Обновление приложения Доступно обновление приложения Показывать уведомление при наличии новой версии Открыть в браузере @@ -145,4 +145,6 @@ Повернуть экран Обновить Обновление скоро начнётся + Проверять обновления манги + Не проверять \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 3b66255b6..ff41472f7 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -9,4 +9,8 @@ @string/taps_on_edges @string/volume_buttons + + @string/favourites + @string/history + \ No newline at end of file diff --git a/app/src/main/res/values/constants.xml b/app/src/main/res/values/constants.xml index 694073c15..56ea250de 100644 --- a/app/src/main/res/values/constants.xml +++ b/app/src/main/res/values/constants.xml @@ -14,6 +14,7 @@ remote_sources local_storage reader_switchers + track_sources app_update app_update_auto tracker_notifications @@ -37,4 +38,11 @@ taps + + favourites + history + + + favourites + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2ff9c04ca..ceb9024dd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5,7 +5,7 @@ Local storage Favourites History - An error has occurred + An error has occurred Network connection error Details Chapters @@ -15,16 +15,16 @@ List mode Settings Remote sources - Loading… + Loading… Chapter %1$d of %2$d Close Try again - Clear history + Clear history Nothing found History is empty Read Add bookmark - You have not favourites yet + You have not favourites yet Add to favourites Add new category Add @@ -34,7 +34,7 @@ Create shortcut… Share %s Search - Search manga + Search manga Manga downloading… Processing… Download complete @@ -77,7 +77,7 @@ Grid size Search results on %s Search on %s - Delete manga + Delete manga Do you really want to delete \"%s\" from your phone\'s local storage? \nThis operation cannot be undone. Reader settings Switch pages @@ -90,14 +90,14 @@ Cancelling… Error Clear thumbnails cache - Clear search history - Search history cleared + Clear search history + Search history cleared Gestures only Internal storage External storage - Domain - Default - Application update + Domain + Default + Application update Application update is available Show notification if update is available Open in browser @@ -146,4 +146,6 @@ Rotate screen Update Feed update will start soon + Check updates for manga + Don`t check \ No newline at end of file diff --git a/app/src/main/res/xml/pref_main.xml b/app/src/main/res/xml/pref_main.xml index c544eb209..1cada76e6 100644 --- a/app/src/main/res/xml/pref_main.xml +++ b/app/src/main/res/xml/pref_main.xml @@ -68,14 +68,13 @@ app:allowDividerAbove="true" app:iconSpaceReserved="false"> - + + + \ No newline at end of file