Option to configure tracked manga

This commit is contained in:
Koitharu
2020-10-11 13:55:04 +03:00
parent 693f568b8e
commit 55fc1aeadd
9 changed files with 93 additions and 46 deletions

View File

@@ -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"
}
}

View File

@@ -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> {

View File

@@ -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()

View File

@@ -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()
}