Allow user to read all read manga stats
This commit is contained in:
@@ -43,6 +43,7 @@ import tachiyomi.domain.manga.interactor.GetMergedManga
|
||||
import tachiyomi.domain.manga.interactor.GetMergedMangaById
|
||||
import tachiyomi.domain.manga.interactor.GetMergedMangaForDownloading
|
||||
import tachiyomi.domain.manga.interactor.GetMergedReferencesById
|
||||
import tachiyomi.domain.manga.interactor.GetReadMangaNotInLibrary
|
||||
import tachiyomi.domain.manga.interactor.GetSearchMetadata
|
||||
import tachiyomi.domain.manga.interactor.GetSearchTags
|
||||
import tachiyomi.domain.manga.interactor.GetSearchTitles
|
||||
@@ -108,6 +109,7 @@ class SYDomainModule : InjektModule {
|
||||
addFactory { GetPagePreviews(get(), get()) }
|
||||
addFactory { SearchEngine() }
|
||||
addFactory { IsTrackUnfollowed() }
|
||||
addFactory { GetReadMangaNotInLibrary(get()) }
|
||||
|
||||
// Required for [MetadataSource]
|
||||
addFactory<MetadataSource.GetMangaId> { GetManga(get()) }
|
||||
|
||||
@@ -8,6 +8,7 @@ import cafe.adriel.voyager.core.model.rememberScreenModel
|
||||
import cafe.adriel.voyager.navigator.LocalNavigator
|
||||
import cafe.adriel.voyager.navigator.currentOrThrow
|
||||
import eu.kanade.presentation.components.AppBar
|
||||
import eu.kanade.presentation.components.AppBarActions
|
||||
import eu.kanade.presentation.more.stats.StatsScreenContent
|
||||
import eu.kanade.presentation.more.stats.StatsScreenState
|
||||
import eu.kanade.presentation.util.Screen
|
||||
@@ -35,11 +36,28 @@ class StatsScreen : Screen() {
|
||||
title = stringResource(R.string.label_stats),
|
||||
navigateUp = navigator::pop,
|
||||
scrollBehavior = scrollBehavior,
|
||||
// SY -->
|
||||
actions = {
|
||||
val allRead by screenModel.allRead.collectAsState()
|
||||
AppBarActions(
|
||||
listOf(
|
||||
AppBar.OverflowAction(
|
||||
title = if (allRead) {
|
||||
stringResource(R.string.ignore_non_library_entries)
|
||||
} else {
|
||||
stringResource(R.string.include_all_read_entries)
|
||||
},
|
||||
onClick = screenModel::toggleReadManga,
|
||||
),
|
||||
),
|
||||
)
|
||||
},
|
||||
// SY <--
|
||||
)
|
||||
},
|
||||
) { paddingValues ->
|
||||
StatsScreenContent(
|
||||
state = state as StatsScreenState.Success,
|
||||
state = state as? StatsScreenState.Success ?: return@Scaffold,
|
||||
paddingValues = paddingValues,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -12,8 +12,11 @@ import eu.kanade.presentation.more.stats.data.StatsData
|
||||
import eu.kanade.tachiyomi.data.download.DownloadManager
|
||||
import eu.kanade.tachiyomi.data.track.TrackManager
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import kotlinx.coroutines.flow.update
|
||||
import tachiyomi.core.util.lang.launchIO
|
||||
import tachiyomi.domain.history.interactor.GetTotalReadDuration
|
||||
import tachiyomi.domain.library.model.LibraryManga
|
||||
import tachiyomi.domain.library.service.LibraryPreferences
|
||||
@@ -21,6 +24,7 @@ import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_HAS_U
|
||||
import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_NON_COMPLETED
|
||||
import tachiyomi.domain.library.service.LibraryPreferences.Companion.MANGA_NON_READ
|
||||
import tachiyomi.domain.manga.interactor.GetLibraryManga
|
||||
import tachiyomi.domain.manga.interactor.GetReadMangaNotInLibrary
|
||||
import tachiyomi.domain.track.interactor.GetTracks
|
||||
import tachiyomi.domain.track.model.Track
|
||||
import tachiyomi.source.local.isLocal
|
||||
@@ -34,13 +38,28 @@ class StatsScreenModel(
|
||||
private val getTracks: GetTracks = Injekt.get(),
|
||||
private val preferences: LibraryPreferences = Injekt.get(),
|
||||
private val trackManager: TrackManager = Injekt.get(),
|
||||
// SY -->
|
||||
private val getReadMangaNotInLibrary: GetReadMangaNotInLibrary = Injekt.get(),
|
||||
// SY <--
|
||||
) : StateScreenModel<StatsScreenState>(StatsScreenState.Loading) {
|
||||
|
||||
private val loggedServices by lazy { trackManager.services.fastFilter { it.isLogged } }
|
||||
|
||||
// SY -->
|
||||
private val _allRead = MutableStateFlow(false)
|
||||
val allRead = _allRead.asStateFlow()
|
||||
// SY <--
|
||||
|
||||
init {
|
||||
coroutineScope.launchIO {
|
||||
val libraryManga = getLibraryManga.await()
|
||||
// SY -->
|
||||
_allRead.onEach { allRead ->
|
||||
mutableState.update { StatsScreenState.Loading }
|
||||
val libraryManga = getLibraryManga.await() + if (allRead) {
|
||||
getReadMangaNotInLibrary.await()
|
||||
} else {
|
||||
emptyList()
|
||||
}
|
||||
// SY <--
|
||||
|
||||
val distinctLibraryManga = libraryManga.fastDistinctBy { it.id }
|
||||
|
||||
@@ -83,7 +102,9 @@ class StatsScreenModel(
|
||||
trackers = trackersStatData,
|
||||
)
|
||||
}
|
||||
}
|
||||
// SY -->
|
||||
}.launchIn(coroutineScope)
|
||||
// SY <--
|
||||
}
|
||||
|
||||
private fun getGlobalUpdateItemCount(libraryManga: List<LibraryManga>): Int {
|
||||
@@ -149,4 +170,8 @@ class StatsScreenModel(
|
||||
val service = trackManager.getService(track.syncId)!!
|
||||
return service.get10PointScore(track)
|
||||
}
|
||||
|
||||
fun toggleReadManga() {
|
||||
_allRead.value = !_allRead.value
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user