Fix login prompts despite being logged in to trackers in Manga screen
(cherry picked from commit cbcd8bd6682023f728568f2b44da26124618aed7) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt
This commit is contained in:
parent
74a71de53e
commit
b12735732f
2 changed files with 39 additions and 40 deletions
|
|
@ -290,7 +290,7 @@ class MangaScreen(
|
||||||
)
|
)
|
||||||
}.takeIf { isHttpSource },
|
}.takeIf { isHttpSource },
|
||||||
onTrackingClicked = {
|
onTrackingClicked = {
|
||||||
if (successState.loggedInTracker.isEmpty()) {
|
if (!successState.hasLoggedInTrackers) {
|
||||||
navigator.push(SettingsScreen(SettingsScreen.Destination.Tracking))
|
navigator.push(SettingsScreen(SettingsScreen.Destination.Tracking))
|
||||||
} else {
|
} else {
|
||||||
screenModel.showTrackDialog()
|
screenModel.showTrackDialog()
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,6 @@ import eu.kanade.tachiyomi.data.download.DownloadCache
|
||||||
import eu.kanade.tachiyomi.data.download.DownloadManager
|
import eu.kanade.tachiyomi.data.download.DownloadManager
|
||||||
import eu.kanade.tachiyomi.data.download.model.Download
|
import eu.kanade.tachiyomi.data.download.model.Download
|
||||||
import eu.kanade.tachiyomi.data.track.EnhancedTracker
|
import eu.kanade.tachiyomi.data.track.EnhancedTracker
|
||||||
import eu.kanade.tachiyomi.data.track.Tracker
|
|
||||||
import eu.kanade.tachiyomi.data.track.TrackerManager
|
import eu.kanade.tachiyomi.data.track.TrackerManager
|
||||||
import eu.kanade.tachiyomi.data.track.mdlist.MdList
|
import eu.kanade.tachiyomi.data.track.mdlist.MdList
|
||||||
import eu.kanade.tachiyomi.network.HttpException
|
import eu.kanade.tachiyomi.network.HttpException
|
||||||
|
|
@ -62,7 +61,6 @@ import eu.kanade.tachiyomi.source.online.all.MergedSource
|
||||||
import eu.kanade.tachiyomi.ui.manga.RelatedManga.Companion.isLoading
|
import eu.kanade.tachiyomi.ui.manga.RelatedManga.Companion.isLoading
|
||||||
import eu.kanade.tachiyomi.ui.manga.RelatedManga.Companion.removeDuplicates
|
import eu.kanade.tachiyomi.ui.manga.RelatedManga.Companion.removeDuplicates
|
||||||
import eu.kanade.tachiyomi.ui.manga.RelatedManga.Companion.sorted
|
import eu.kanade.tachiyomi.ui.manga.RelatedManga.Companion.sorted
|
||||||
import eu.kanade.tachiyomi.ui.manga.track.TrackItem
|
|
||||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
|
||||||
import eu.kanade.tachiyomi.util.chapter.getNextUnread
|
import eu.kanade.tachiyomi.util.chapter.getNextUnread
|
||||||
import eu.kanade.tachiyomi.util.removeCovers
|
import eu.kanade.tachiyomi.util.removeCovers
|
||||||
|
|
@ -154,6 +152,7 @@ import tachiyomi.domain.source.model.StubSource
|
||||||
import tachiyomi.domain.source.service.SourceManager
|
import tachiyomi.domain.source.service.SourceManager
|
||||||
import tachiyomi.domain.track.interactor.GetTracks
|
import tachiyomi.domain.track.interactor.GetTracks
|
||||||
import tachiyomi.domain.track.interactor.InsertTrack
|
import tachiyomi.domain.track.interactor.InsertTrack
|
||||||
|
import tachiyomi.domain.track.model.Track
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.i18n.sy.SYMR
|
import tachiyomi.i18n.sy.SYMR
|
||||||
import tachiyomi.source.local.LocalSource
|
import tachiyomi.source.local.LocalSource
|
||||||
|
|
@ -400,16 +399,6 @@ class MangaScreenModel(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
screenModelScope.launchIO {
|
|
||||||
trackerManager.loggedInTrackersFlow()
|
|
||||||
.distinctUntilChanged()
|
|
||||||
.collectLatest { trackers ->
|
|
||||||
updateSuccessState {
|
|
||||||
it.copy(loggedInTracker = trackers)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
observeDownloads()
|
observeDownloads()
|
||||||
|
|
||||||
screenModelScope.launchIO {
|
screenModelScope.launchIO {
|
||||||
|
|
@ -1755,42 +1744,54 @@ class MangaScreenModel(
|
||||||
getTracks.subscribe(manga.id).catch { logcat(LogPriority.ERROR, it) },
|
getTracks.subscribe(manga.id).catch { logcat(LogPriority.ERROR, it) },
|
||||||
trackerManager.loggedInTrackersFlow(),
|
trackerManager.loggedInTrackersFlow(),
|
||||||
) { mangaTracks, loggedInTrackers ->
|
) { mangaTracks, loggedInTrackers ->
|
||||||
loggedInTrackers
|
// Show only if the service supports this manga's source
|
||||||
// Map to TrackItem
|
val supportedTrackers = loggedInTrackers.filter { (it as? EnhancedTracker)?.accept(source!!) ?: true }
|
||||||
.map { service -> TrackItem(mangaTracks.find { it.trackerId == service.id }, service) }
|
val supportedTrackerIds = supportedTrackers.map { it.id }.toHashSet()
|
||||||
// Show only if the service supports this manga's source
|
val supportedTrackerTracks = mangaTracks.filter { it.trackerId in supportedTrackerIds }
|
||||||
.filter { (it.tracker as? EnhancedTracker)?.accept(source!!) ?: true }
|
supportedTrackerTracks to supportedTrackers
|
||||||
}
|
}
|
||||||
// SY -->
|
// SY -->
|
||||||
.map { trackItems ->
|
.map { (tracks, supportedTrackers) ->
|
||||||
if (manga.source in mangaDexSourceIds || state.mergedData?.manga?.values.orEmpty().any {
|
val supportedTrackerTracks = if (manga.source in mangaDexSourceIds || state.mergedData?.manga?.values.orEmpty().any {
|
||||||
it.source in mangaDexSourceIds
|
it.source in mangaDexSourceIds
|
||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
val mdTrack = trackItems.firstOrNull { it.tracker is MdList }
|
val mdTrack = supportedTrackers.firstOrNull { it is MdList }
|
||||||
when {
|
when {
|
||||||
mdTrack == null -> {
|
mdTrack == null -> {
|
||||||
trackItems
|
tracks
|
||||||
}
|
}
|
||||||
mdTrack.track == null -> {
|
// KMK: auto track MangaDex
|
||||||
trackItems - mdTrack + createMdListTrack()
|
mdTrack.id !in tracks.map { it.trackerId } -> {
|
||||||
|
tracks + createMdListTrack()
|
||||||
}
|
}
|
||||||
else -> trackItems
|
else -> tracks
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
trackItems
|
tracks
|
||||||
}
|
}
|
||||||
|
supportedTrackerTracks
|
||||||
|
.filter {
|
||||||
|
it.trackerId != trackerManager.mdList.id ||
|
||||||
|
it.status != FollowStatus.UNFOLLOWED.long
|
||||||
|
}
|
||||||
|
.size to supportedTrackers.isNotEmpty()
|
||||||
}
|
}
|
||||||
// SY <--
|
// SY <--
|
||||||
.distinctUntilChanged()
|
.distinctUntilChanged()
|
||||||
.collectLatest { trackItems ->
|
.collectLatest { (trackingCount, hasLoggedInTrackers) ->
|
||||||
updateSuccessState { it.copy(trackItems = trackItems) }
|
updateSuccessState {
|
||||||
|
it.copy(
|
||||||
|
trackingCount = trackingCount,
|
||||||
|
hasLoggedInTrackers = hasLoggedInTrackers,
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
private suspend fun createMdListTrack(): TrackItem {
|
private suspend fun createMdListTrack(): Track {
|
||||||
val state = successState!!
|
val state = successState!!
|
||||||
val mdManga = state.manga.takeIf { it.source in mangaDexSourceIds }
|
val mdManga = state.manga.takeIf { it.source in mangaDexSourceIds }
|
||||||
?: state.mergedData?.manga?.values?.find { it.source in mangaDexSourceIds }
|
?: state.mergedData?.manga?.values?.find { it.source in mangaDexSourceIds }
|
||||||
|
|
@ -1798,7 +1799,13 @@ class MangaScreenModel(
|
||||||
val track = trackerManager.mdList.createInitialTracker(state.manga, mdManga)
|
val track = trackerManager.mdList.createInitialTracker(state.manga, mdManga)
|
||||||
.toDomainTrack(false)!!
|
.toDomainTrack(false)!!
|
||||||
insertTrack.await(track)
|
insertTrack.await(track)
|
||||||
return TrackItem(getTracks.await(mangaId).first { it.trackerId == trackerManager.mdList.id }, trackerManager.mdList)
|
/* KMK -->
|
||||||
|
return TrackItem(
|
||||||
|
getTracks.await(mangaId).first { it.trackerId == trackerManager.mdList.id },
|
||||||
|
trackerManager.mdList,
|
||||||
|
)
|
||||||
|
KMK <-- */
|
||||||
|
return getTracks.await(mangaId).first { it.trackerId == trackerManager.mdList.id }
|
||||||
}
|
}
|
||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
|
|
@ -1896,11 +1903,11 @@ class MangaScreenModel(
|
||||||
val chapters: List<ChapterList.Item>,
|
val chapters: List<ChapterList.Item>,
|
||||||
val availableScanlators: ImmutableSet<String>,
|
val availableScanlators: ImmutableSet<String>,
|
||||||
val excludedScanlators: ImmutableSet<String>,
|
val excludedScanlators: ImmutableSet<String>,
|
||||||
val trackItems: List<TrackItem> = emptyList(),
|
val trackingCount: Int = 0,
|
||||||
|
val hasLoggedInTrackers: Boolean = false,
|
||||||
val isRefreshingData: Boolean = false,
|
val isRefreshingData: Boolean = false,
|
||||||
val dialog: MangaScreenModel.Dialog? = null,
|
val dialog: MangaScreenModel.Dialog? = null,
|
||||||
val hasPromptedToAddBefore: Boolean = false,
|
val hasPromptedToAddBefore: Boolean = false,
|
||||||
val loggedInTracker: List<Tracker> = emptyList(),
|
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
val meta: RaisedSearchMetadata?,
|
val meta: RaisedSearchMetadata?,
|
||||||
|
|
@ -1981,14 +1988,6 @@ class MangaScreenModel(
|
||||||
val filterActive: Boolean
|
val filterActive: Boolean
|
||||||
get() = scanlatorFilterActive || manga.chaptersFiltered()
|
get() = scanlatorFilterActive || manga.chaptersFiltered()
|
||||||
|
|
||||||
val trackingCount: Int
|
|
||||||
get() = trackItems.count {
|
|
||||||
it.track != null && (
|
|
||||||
it.tracker !is MdList ||
|
|
||||||
it.track.status != FollowStatus.UNFOLLOWED.long
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Applies the view filters to the list of chapters obtained from the database.
|
* Applies the view filters to the list of chapters obtained from the database.
|
||||||
* @return an observable of the list of chapters filtered and sorted.
|
* @return an observable of the list of chapters filtered and sorted.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue