Option to configure tracked manga
This commit is contained in:
@@ -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<Int>
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -19,26 +19,32 @@ class TrackingRepository : KoinComponent {
|
||||
return entity.newChapters
|
||||
}
|
||||
|
||||
suspend fun getAllTracks(): List<MangaTracking> {
|
||||
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<MangaTracking> {
|
||||
val mangaList = ArrayList<Manga>()
|
||||
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<TrackingLogItem> {
|
||||
|
||||
@@ -41,6 +41,8 @@ class MainSettingsFragment : BasePreferenceFragment(R.string.settings),
|
||||
}
|
||||
findPreference<MultiSelectListPreference>(R.string.key_reader_switchers)?.summaryProvider =
|
||||
MultiSummaryProvider(R.string.gestures_only)
|
||||
findPreference<MultiSelectListPreference>(R.string.key_track_sources)?.summaryProvider =
|
||||
MultiSummaryProvider(R.string.dont_check)
|
||||
findPreference<Preference>(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()
|
||||
|
||||
@@ -36,9 +36,16 @@ class TrackWorker(context: Context, workerParams: WorkerParameters) :
|
||||
|
||||
private val settings by inject<AppSettings>()
|
||||
|
||||
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()
|
||||
}
|
||||
|
||||
@@ -89,14 +89,14 @@
|
||||
<string name="cancelling_">Отмена…</string>
|
||||
<string name="error">Ошибка</string>
|
||||
<string name="clear_thumbs_cache">Очистить кэш миниатюр</string>
|
||||
<string name="clear_search_history">Очистить историю поиска</string>
|
||||
<string name="search_history_cleared">История поиска очищена</string>
|
||||
<string name="clear_search_history">Очистить историю поиска</string>
|
||||
<string name="search_history_cleared">История поиска очищена</string>
|
||||
<string name="gestures_only">Только жесты</string>
|
||||
<string name="internal_storage">Внутренний накопитель</string>
|
||||
<string name="external_storage">Внешнее хранилище</string>
|
||||
<string name="domain">Домен</string>
|
||||
<string name="_default">По умолчанию</string>
|
||||
<string name="application_update">Обновление приложения</string>
|
||||
<string name="domain">Домен</string>
|
||||
<string name="_default">По умолчанию</string>
|
||||
<string name="application_update">Обновление приложения</string>
|
||||
<string name="app_update_available">Доступно обновление приложения</string>
|
||||
<string name="show_notification_app_update">Показывать уведомление при наличии новой версии</string>
|
||||
<string name="open_in_browser">Открыть в браузере</string>
|
||||
@@ -145,4 +145,6 @@
|
||||
<string name="rotate_screen">Повернуть экран</string>
|
||||
<string name="update">Обновить</string>
|
||||
<string name="feed_will_update_soon">Обновление скоро начнётся</string>
|
||||
<string name="track_sources">Проверять обновления манги</string>
|
||||
<string name="dont_check">Не проверять</string>
|
||||
</resources>
|
||||
@@ -9,4 +9,8 @@
|
||||
<item>@string/taps_on_edges</item>
|
||||
<item>@string/volume_buttons</item>
|
||||
</string-array>
|
||||
<string-array name="track_sources">
|
||||
<item>@string/favourites</item>
|
||||
<item>@string/history</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -14,6 +14,7 @@
|
||||
<string name="key_remote_sources">remote_sources</string>
|
||||
<string name="key_local_storage">local_storage</string>
|
||||
<string name="key_reader_switchers">reader_switchers</string>
|
||||
<string name="key_track_sources">track_sources</string>
|
||||
<string name="key_app_update">app_update</string>
|
||||
<string name="key_app_update_auto">app_update_auto</string>
|
||||
<string name="key_tracker_notifications">tracker_notifications</string>
|
||||
@@ -37,4 +38,11 @@
|
||||
<string-array name="values_reader_switchers_default">
|
||||
<item>taps</item>
|
||||
</string-array>
|
||||
<string-array name="values_track_sources">
|
||||
<item>favourites</item>
|
||||
<item>history</item>
|
||||
</string-array>
|
||||
<string-array name="values_track_sources_default">
|
||||
<item>favourites</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -5,7 +5,7 @@
|
||||
<string name="local_storage">Local storage</string>
|
||||
<string name="favourites">Favourites</string>
|
||||
<string name="history">History</string>
|
||||
<string name="error_occurred">An error has occurred</string>
|
||||
<string name="error_occurred">An error has occurred</string>
|
||||
<string name="network_error">Network connection error</string>
|
||||
<string name="details">Details</string>
|
||||
<string name="chapters">Chapters</string>
|
||||
@@ -15,16 +15,16 @@
|
||||
<string name="list_mode">List mode</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="remote_sources">Remote sources</string>
|
||||
<string name="loading_">Loading…</string>
|
||||
<string name="loading_">Loading…</string>
|
||||
<string name="chapter_d_of_d">Chapter %1$d of %2$d</string>
|
||||
<string name="close">Close</string>
|
||||
<string name="try_again">Try again</string>
|
||||
<string name="clear_history">Clear history</string>
|
||||
<string name="clear_history">Clear history</string>
|
||||
<string name="nothing_found">Nothing found</string>
|
||||
<string name="history_is_empty">History is empty</string>
|
||||
<string name="read">Read</string>
|
||||
<string name="add_bookmark">Add bookmark</string>
|
||||
<string name="you_have_not_favourites_yet">You have not favourites yet</string>
|
||||
<string name="you_have_not_favourites_yet">You have not favourites yet</string>
|
||||
<string name="add_to_favourites">Add to favourites</string>
|
||||
<string name="add_new_category">Add new category</string>
|
||||
<string name="add">Add</string>
|
||||
@@ -34,7 +34,7 @@
|
||||
<string name="create_shortcut">Create shortcut…</string>
|
||||
<string name="share_s">Share %s</string>
|
||||
<string name="search">Search</string>
|
||||
<string name="search_manga">Search manga</string>
|
||||
<string name="search_manga">Search manga</string>
|
||||
<string name="manga_downloading_">Manga downloading…</string>
|
||||
<string name="processing_">Processing…</string>
|
||||
<string name="download_complete">Download complete</string>
|
||||
@@ -77,7 +77,7 @@
|
||||
<string name="grid_size">Grid size</string>
|
||||
<string name="search_results_on_s">Search results on %s</string>
|
||||
<string name="search_on_s">Search on %s</string>
|
||||
<string name="delete_manga">Delete manga</string>
|
||||
<string name="delete_manga">Delete manga</string>
|
||||
<string name="text_delete_local_manga">Do you really want to delete \"%s\" from your phone\'s local storage? \nThis operation cannot be undone.</string>
|
||||
<string name="reader_settings">Reader settings</string>
|
||||
<string name="switch_pages">Switch pages</string>
|
||||
@@ -90,14 +90,14 @@
|
||||
<string name="cancelling_">Cancelling…</string>
|
||||
<string name="error">Error</string>
|
||||
<string name="clear_thumbs_cache">Clear thumbnails cache</string>
|
||||
<string name="clear_search_history">Clear search history</string>
|
||||
<string name="search_history_cleared">Search history cleared</string>
|
||||
<string name="clear_search_history">Clear search history</string>
|
||||
<string name="search_history_cleared">Search history cleared</string>
|
||||
<string name="gestures_only">Gestures only</string>
|
||||
<string name="internal_storage">Internal storage</string>
|
||||
<string name="external_storage">External storage</string>
|
||||
<string name="domain">Domain</string>
|
||||
<string name="_default">Default</string>
|
||||
<string name="application_update">Application update</string>
|
||||
<string name="domain">Domain</string>
|
||||
<string name="_default">Default</string>
|
||||
<string name="application_update">Application update</string>
|
||||
<string name="app_update_available">Application update is available</string>
|
||||
<string name="show_notification_app_update">Show notification if update is available</string>
|
||||
<string name="open_in_browser">Open in browser</string>
|
||||
@@ -146,4 +146,6 @@
|
||||
<string name="rotate_screen">Rotate screen</string>
|
||||
<string name="update">Update</string>
|
||||
<string name="feed_will_update_soon">Feed update will start soon</string>
|
||||
<string name="track_sources">Check updates for manga</string>
|
||||
<string name="dont_check">Don`t check</string>
|
||||
</resources>
|
||||
@@ -68,14 +68,13 @@
|
||||
app:allowDividerAbove="true"
|
||||
app:iconSpaceReserved="false">
|
||||
|
||||
<SwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="@string/key_app_update_auto"
|
||||
android:summary="@string/show_notification_app_update"
|
||||
android:title="@string/application_update"
|
||||
app:iconSpaceReserved="false"
|
||||
app:isPreferenceVisible="false"
|
||||
tools:isPreferenceVisible="true" />
|
||||
<MultiSelectListPreference
|
||||
android:defaultValue="@array/values_track_sources_default"
|
||||
android:entries="@array/track_sources"
|
||||
android:entryValues="@array/values_track_sources"
|
||||
android:key="@string/key_track_sources"
|
||||
android:title="@string/track_sources"
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<SwitchPreference
|
||||
android:defaultValue="true"
|
||||
@@ -90,6 +89,15 @@
|
||||
android:title="@string/notifications_settings"
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
<SwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="@string/key_app_update_auto"
|
||||
android:summary="@string/show_notification_app_update"
|
||||
android:title="@string/application_update"
|
||||
app:iconSpaceReserved="false"
|
||||
app:isPreferenceVisible="false"
|
||||
tools:isPreferenceVisible="true" />
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
</PreferenceScreen>
|
||||
Reference in New Issue
Block a user