diff --git a/app/src/main/java/eu/kanade/presentation/library/LibraryScreen.kt b/app/src/main/java/eu/kanade/presentation/library/LibraryScreen.kt index 742d8c3e8..1e841efe1 100644 --- a/app/src/main/java/eu/kanade/presentation/library/LibraryScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/library/LibraryScreen.kt @@ -120,6 +120,13 @@ fun LibraryScreen( // SY <-- getColumnsForOrientation = { presenter.getColumnsPreferenceForCurrentOrientation(it) }, getLibraryForPage = { presenter.getMangaForCategory(page = it) }, + showDownloadBadges = presenter.showDownloadBadges, + showUnreadBadges = presenter.showUnreadBadges, + showLocalBadges = presenter.showLocalBadges, + showLanguageBadges = presenter.showLanguageBadges, + // SY --> + showStartReadingButton = presenter.showStartReadingButton, + // SY <-- isIncognitoMode = presenter.isIncognitoMode, isDownloadOnly = presenter.isDownloadOnly, // SY --> diff --git a/app/src/main/java/eu/kanade/presentation/library/components/LibraryBadges.kt b/app/src/main/java/eu/kanade/presentation/library/components/LibraryBadges.kt new file mode 100644 index 000000000..878f78d67 --- /dev/null +++ b/app/src/main/java/eu/kanade/presentation/library/components/LibraryBadges.kt @@ -0,0 +1,53 @@ +package eu.kanade.presentation.library.components + +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import eu.kanade.presentation.components.Badge +import eu.kanade.tachiyomi.R +import eu.kanade.tachiyomi.ui.library.LibraryItem + +@Composable +fun DownloadsBadge( + enabled: Boolean, + item: LibraryItem, +) { + if (enabled && item.downloadCount > 0) { + Badge( + text = "${item.downloadCount}", + color = MaterialTheme.colorScheme.tertiary, + textColor = MaterialTheme.colorScheme.onTertiary, + ) + } +} + +@Composable +fun UnreadBadge( + enabled: Boolean, + item: LibraryItem, +) { + if (enabled && item.unreadCount > 0) { + Badge(text = "${item.unreadCount}") + } +} + +@Composable +fun LanguageBadge( + showLanguage: Boolean, + showLocal: Boolean, + item: LibraryItem, +) { + if (showLocal && item.isLocal) { + Badge( + text = stringResource(R.string.local_source_badge), + color = MaterialTheme.colorScheme.tertiary, + textColor = MaterialTheme.colorScheme.onTertiary, + ) + } else if (showLanguage && item.sourceLanguage.isNotEmpty()) { + Badge( + text = item.sourceLanguage.uppercase(), + color = MaterialTheme.colorScheme.tertiary, + textColor = MaterialTheme.colorScheme.onTertiary, + ) + } +} diff --git a/app/src/main/java/eu/kanade/presentation/library/components/LibraryComfortableGrid.kt b/app/src/main/java/eu/kanade/presentation/library/components/LibraryComfortableGrid.kt index 3e1aa80cf..bc9ae0cef 100644 --- a/app/src/main/java/eu/kanade/presentation/library/components/LibraryComfortableGrid.kt +++ b/app/src/main/java/eu/kanade/presentation/library/components/LibraryComfortableGrid.kt @@ -20,6 +20,13 @@ import eu.kanade.tachiyomi.ui.library.LibraryItem @Composable fun LibraryComfortableGrid( items: List, + showDownloadBadges: Boolean, + showUnreadBadges: Boolean, + showLocalBadges: Boolean, + showLanguageBadges: Boolean, + // SY --> + showStartReadingButton: Boolean, + // SY <-- columns: Int, contentPadding: PaddingValues, selection: List, @@ -43,12 +50,19 @@ fun LibraryComfortableGrid( contentType = { "library_comfortable_grid_item" }, ) { libraryItem -> LibraryComfortableGridItem( - libraryItem, - libraryItem.libraryManga in selection, - onClick, - onLongClick, + item = libraryItem, + showDownloadBadge = showDownloadBadges, + showUnreadBadge = showUnreadBadges, + showLocalBadge = showLocalBadges, + showLanguageBadge = showLanguageBadges, // SY --> - onOpenReader, + showStartReadingButton = showStartReadingButton, + // SY <-- + isSelected = libraryItem.libraryManga in selection, + onClick = onClick, + onLongClick = onLongClick, + // SY --> + onOpenReader = onOpenReader, // SY <-- ) } @@ -58,10 +72,19 @@ fun LibraryComfortableGrid( @Composable fun LibraryComfortableGridItem( item: LibraryItem, + showDownloadBadge: Boolean, + showUnreadBadge: Boolean, + showLocalBadge: Boolean, + showLanguageBadge: Boolean, + // SY --> + showStartReadingButton: Boolean, + // SY <-- isSelected: Boolean, onClick: (LibraryManga) -> Unit, onLongClick: (LibraryManga) -> Unit, + // SY --> onOpenReader: (LibraryManga) -> Unit, + // SY <-- ) { val libraryManga = item.libraryManga val manga = libraryManga.manga @@ -85,12 +108,13 @@ fun LibraryComfortableGridItem( manga.thumbnailUrl, manga.coverLastModified, ), - downloadCount = item.downloadCount, - unreadCount = item.unreadCount, - isLocal = item.isLocal, - language = item.sourceLanguage, + item = item, + showDownloadBadge = showDownloadBadge, + showUnreadBadge = showUnreadBadge, + showLocalBadge = showLocalBadge, + showLanguageBadge = showLanguageBadge, // SY --> - showPlayButton = item.startReadingButton && item.libraryManga.unreadCount > 0, + showStartReadingButton = showStartReadingButton && item.libraryManga.unreadCount > 0, onOpenReader = { onOpenReader(item.libraryManga) }, diff --git a/app/src/main/java/eu/kanade/presentation/library/components/LibraryCompactGrid.kt b/app/src/main/java/eu/kanade/presentation/library/components/LibraryCompactGrid.kt index 60ab59bfc..04a8d9650 100644 --- a/app/src/main/java/eu/kanade/presentation/library/components/LibraryCompactGrid.kt +++ b/app/src/main/java/eu/kanade/presentation/library/components/LibraryCompactGrid.kt @@ -29,6 +29,13 @@ import eu.kanade.tachiyomi.ui.library.LibraryItem @Composable fun LibraryCompactGrid( items: List, + showDownloadBadges: Boolean, + showUnreadBadges: Boolean, + showLocalBadges: Boolean, + showLanguageBadges: Boolean, + // SY --> + showStartReadingButton: Boolean, + // SY <-- columns: Int, contentPadding: PaddingValues, selection: List, @@ -53,6 +60,13 @@ fun LibraryCompactGrid( ) { libraryItem -> LibraryCompactGridItem( item = libraryItem, + showDownloadBadge = showDownloadBadges, + showUnreadBadge = showUnreadBadges, + showLocalBadge = showLocalBadges, + showLanguageBadge = showLanguageBadges, + // SY --> + showStartReadingButton = showStartReadingButton, + // SY <-- isSelected = libraryItem.libraryManga in selection, onClick = onClick, onLongClick = onLongClick, @@ -67,6 +81,13 @@ fun LibraryCompactGrid( @Composable fun LibraryCompactGridItem( item: LibraryItem, + showDownloadBadge: Boolean, + showUnreadBadge: Boolean, + showLocalBadge: Boolean, + showLanguageBadge: Boolean, + // SY --> + showStartReadingButton: Boolean, + // SY <-- isSelected: Boolean, onClick: (LibraryManga) -> Unit, onLongClick: (LibraryManga) -> Unit, @@ -94,12 +115,13 @@ fun LibraryCompactGridItem( manga.thumbnailUrl, manga.coverLastModified, ), - downloadCount = item.downloadCount, - unreadCount = item.unreadCount, - isLocal = item.isLocal, - language = item.sourceLanguage, + item = item, + showDownloadBadge = showDownloadBadge, + showUnreadBadge = showUnreadBadge, + showLocalBadge = showLocalBadge, + showLanguageBadge = showLanguageBadge, // SY --> - showPlayButton = item.startReadingButton && item.libraryManga.unreadCount > 0, + showStartReadingButton = showStartReadingButton && item.libraryManga.unreadCount > 0, playButtonPosition = PlayButtonPosition.Top, onOpenReader = { onOpenReader(item.libraryManga) diff --git a/app/src/main/java/eu/kanade/presentation/library/components/LibraryContent.kt b/app/src/main/java/eu/kanade/presentation/library/components/LibraryContent.kt index c19d40b48..57162c955 100644 --- a/app/src/main/java/eu/kanade/presentation/library/components/LibraryContent.kt +++ b/app/src/main/java/eu/kanade/presentation/library/components/LibraryContent.kt @@ -24,7 +24,6 @@ import eu.kanade.domain.library.model.LibraryDisplayMode import eu.kanade.domain.library.model.LibraryManga import eu.kanade.presentation.components.SwipeRefresh import eu.kanade.presentation.library.LibraryState -import eu.kanade.presentation.util.plus import eu.kanade.tachiyomi.ui.library.LibraryItem import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -35,8 +34,6 @@ fun LibraryContent( contentPadding: PaddingValues, currentPage: () -> Int, isLibraryEmpty: Boolean, - isDownloadOnly: Boolean, - isIncognitoMode: Boolean, showPageTabs: Boolean, showMangaCount: Boolean, onChangeCurrentPage: (Int) -> Unit, @@ -49,6 +46,15 @@ fun LibraryContent( getDisplayModeForPage: @Composable (Int) -> LibraryDisplayMode, getColumnsForOrientation: (Boolean) -> PreferenceMutableState, getLibraryForPage: @Composable (Int) -> List, + showDownloadBadges: Boolean, + showUnreadBadges: Boolean, + showLocalBadges: Boolean, + showLanguageBadges: Boolean, + // SY --> + showStartReadingButton: Boolean, + // SY <-- + isDownloadOnly: Boolean, + isIncognitoMode: Boolean, // SY --> onOpenReader: (LibraryManga) -> Unit, getCategoryName: (Context, Category, Int, String) -> String, @@ -120,6 +126,13 @@ fun LibraryContent( getDisplayModeForPage = getDisplayModeForPage, getColumnsForOrientation = getColumnsForOrientation, getLibraryForPage = getLibraryForPage, + showDownloadBadges = showDownloadBadges, + showUnreadBadges = showUnreadBadges, + showLocalBadges = showLocalBadges, + showLanguageBadges = showLanguageBadges, + // SY --> + showStartReadingButton = showStartReadingButton, + // SY <-- onClickManga = onClickManga, onLongClickManga = onLongClickManga, onGlobalSearchClicked = onGlobalSearchClicked, diff --git a/app/src/main/java/eu/kanade/presentation/library/components/LibraryCoverOnlyGrid.kt b/app/src/main/java/eu/kanade/presentation/library/components/LibraryCoverOnlyGrid.kt index d5b302e83..d72744536 100644 --- a/app/src/main/java/eu/kanade/presentation/library/components/LibraryCoverOnlyGrid.kt +++ b/app/src/main/java/eu/kanade/presentation/library/components/LibraryCoverOnlyGrid.kt @@ -12,6 +12,13 @@ import eu.kanade.tachiyomi.ui.library.LibraryItem @Composable fun LibraryCoverOnlyGrid( items: List, + showDownloadBadges: Boolean, + showUnreadBadges: Boolean, + showLocalBadges: Boolean, + showLanguageBadges: Boolean, + // SY --> + showStartReadingButton: Boolean, + // SY <-- columns: Int, contentPadding: PaddingValues, selection: List, @@ -36,6 +43,13 @@ fun LibraryCoverOnlyGrid( ) { libraryItem -> LibraryCoverOnlyGridItem( item = libraryItem, + showDownloadBadge = showDownloadBadges, + showUnreadBadge = showUnreadBadges, + showLocalBadge = showLocalBadges, + showLanguageBadge = showLanguageBadges, + // SY --> + showStartReadingButton = showStartReadingButton, + // SY <-- isSelected = libraryItem.libraryManga in selection, onClick = onClick, onLongClick = onLongClick, @@ -50,6 +64,13 @@ fun LibraryCoverOnlyGrid( @Composable fun LibraryCoverOnlyGridItem( item: LibraryItem, + showDownloadBadge: Boolean, + showUnreadBadge: Boolean, + showLocalBadge: Boolean, + showLanguageBadge: Boolean, + // SY --> + showStartReadingButton: Boolean, + // SY <-- isSelected: Boolean, onClick: (LibraryManga) -> Unit, onLongClick: (LibraryManga) -> Unit, @@ -77,12 +98,13 @@ fun LibraryCoverOnlyGridItem( manga.thumbnailUrl, manga.coverLastModified, ), - downloadCount = item.downloadCount, - unreadCount = item.unreadCount, - isLocal = item.isLocal, - language = item.sourceLanguage, + item = item, + showDownloadBadge = showDownloadBadge, + showUnreadBadge = showUnreadBadge, + showLocalBadge = showLocalBadge, + showLanguageBadge = showLanguageBadge, // SY --> - showPlayButton = item.startReadingButton && item.libraryManga.unreadCount > 0, + showStartReadingButton = showStartReadingButton && item.libraryManga.unreadCount > 0, onOpenReader = { onOpenReader(item.libraryManga) }, diff --git a/app/src/main/java/eu/kanade/presentation/library/components/LibraryGridCover.kt b/app/src/main/java/eu/kanade/presentation/library/components/LibraryGridCover.kt index 6e4f63c35..5ac6e3718 100644 --- a/app/src/main/java/eu/kanade/presentation/library/components/LibraryGridCover.kt +++ b/app/src/main/java/eu/kanade/presentation/library/components/LibraryGridCover.kt @@ -7,16 +7,13 @@ import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import eu.kanade.presentation.components.Badge import eu.kanade.presentation.components.BadgeGroup import eu.kanade.presentation.components.MangaCover -import eu.kanade.tachiyomi.R +import eu.kanade.tachiyomi.ui.library.LibraryItem @Composable fun MangaGridCover( @@ -25,7 +22,7 @@ fun MangaGridCover( badgesStart: (@Composable RowScope.() -> Unit)? = null, badgesEnd: (@Composable RowScope.() -> Unit)? = null, // SY --> - showPlayButton: Boolean = false, + showStartReadingButton: Boolean = false, playButtonPosition: PlayButtonPosition = PlayButtonPosition.Bottom, onOpenReader: () -> Unit = {}, // SY <-- @@ -62,11 +59,11 @@ fun MangaGridCover( ) } // SY --> - if (showPlayButton && playButtonPosition == PlayButtonPosition.Top) { + if (showStartReadingButton && playButtonPosition == PlayButtonPosition.Top) { StartReadingButton(onOpenReader = onOpenReader) } } - if (showPlayButton && playButtonPosition == PlayButtonPosition.Bottom) { + if (showStartReadingButton && playButtonPosition == PlayButtonPosition.Bottom) { StartReadingButton( Modifier.align(playButtonPosition.alignment), onOpenReader = onOpenReader, @@ -80,12 +77,13 @@ fun MangaGridCover( fun LibraryGridCover( modifier: Modifier = Modifier, mangaCover: eu.kanade.domain.manga.model.MangaCover, - downloadCount: Long, - unreadCount: Long, - isLocal: Boolean, - language: String, + item: LibraryItem, + showDownloadBadge: Boolean, + showUnreadBadge: Boolean, + showLocalBadge: Boolean, + showLanguageBadge: Boolean, // SY --> - showPlayButton: Boolean, + showStartReadingButton: Boolean, playButtonPosition: PlayButtonPosition = PlayButtonPosition.Bottom, onOpenReader: () -> Unit, // SY <-- @@ -100,34 +98,14 @@ fun LibraryGridCover( ) }, badgesStart = { - if (downloadCount > 0) { - Badge( - text = "$downloadCount", - color = MaterialTheme.colorScheme.tertiary, - textColor = MaterialTheme.colorScheme.onTertiary, - ) - } - if (unreadCount > 0) { - Badge(text = "$unreadCount") - } + DownloadsBadge(enabled = showDownloadBadge, item = item) + UnreadBadge(enabled = showUnreadBadge, item = item) }, badgesEnd = { - if (isLocal) { - Badge( - text = stringResource(R.string.local_source_badge), - color = MaterialTheme.colorScheme.tertiary, - textColor = MaterialTheme.colorScheme.onTertiary, - ) - } else if (language.isNotEmpty()) { - Badge( - text = language, - color = MaterialTheme.colorScheme.tertiary, - textColor = MaterialTheme.colorScheme.onTertiary, - ) - } + LanguageBadge(showLanguage = showLanguageBadge, showLocal = showLocalBadge, item = item) }, // SY --> - showPlayButton = showPlayButton, + showStartReadingButton = showStartReadingButton, playButtonPosition = playButtonPosition, onOpenReader = onOpenReader, // SY <-- diff --git a/app/src/main/java/eu/kanade/presentation/library/components/LibraryList.kt b/app/src/main/java/eu/kanade/presentation/library/components/LibraryList.kt index e7644a0b3..c56ad4bd8 100644 --- a/app/src/main/java/eu/kanade/presentation/library/components/LibraryList.kt +++ b/app/src/main/java/eu/kanade/presentation/library/components/LibraryList.kt @@ -21,7 +21,6 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.zIndex import eu.kanade.domain.library.model.LibraryManga import eu.kanade.domain.manga.model.MangaCover -import eu.kanade.presentation.components.Badge import eu.kanade.presentation.components.BadgeGroup import eu.kanade.presentation.components.FastScrollLazyColumn import eu.kanade.presentation.components.MangaCover.Square @@ -35,6 +34,10 @@ import eu.kanade.tachiyomi.ui.library.LibraryItem @Composable fun LibraryList( items: List, + showDownloadBadges: Boolean, + showUnreadBadges: Boolean, + showLocalBadges: Boolean, + showLanguageBadges: Boolean, contentPadding: PaddingValues, selection: List, onClick: (LibraryManga) -> Unit, @@ -63,6 +66,10 @@ fun LibraryList( ) { libraryItem -> LibraryListItem( item = libraryItem, + showDownloadBadge = showDownloadBadges, + showUnreadBadge = showUnreadBadges, + showLocalBadge = showLocalBadges, + showLanguageBadge = showLanguageBadges, isSelected = libraryItem.libraryManga in selection, onClick = onClick, onLongClick = onLongClick, @@ -74,6 +81,10 @@ fun LibraryList( @Composable fun LibraryListItem( item: LibraryItem, + showDownloadBadge: Boolean, + showUnreadBadge: Boolean, + showLocalBadge: Boolean, + showLanguageBadge: Boolean, isSelected: Boolean, onClick: (LibraryManga) -> Unit, onLongClick: (LibraryManga) -> Unit, @@ -93,30 +104,9 @@ fun LibraryListItem( onClick = { onClick(libraryManga) }, onLongClick = { onLongClick(libraryManga) }, ) { - if (item.downloadCount > 0) { - Badge( - text = "${item.downloadCount}", - color = MaterialTheme.colorScheme.tertiary, - textColor = MaterialTheme.colorScheme.onTertiary, - ) - } - if (item.unreadCount > 0) { - Badge(text = "${item.unreadCount}") - } - if (item.isLocal) { - Badge( - text = stringResource(R.string.local_source_badge), - color = MaterialTheme.colorScheme.tertiary, - textColor = MaterialTheme.colorScheme.onTertiary, - ) - } - if (item.isLocal.not() && item.sourceLanguage.isNotEmpty()) { - Badge( - text = item.sourceLanguage, - color = MaterialTheme.colorScheme.tertiary, - textColor = MaterialTheme.colorScheme.onTertiary, - ) - } + DownloadsBadge(enabled = showDownloadBadge, item = item) + UnreadBadge(enabled = showUnreadBadge, item = item) + LanguageBadge(showLanguage = showLanguageBadge, showLocal = showLocalBadge, item = item) } } diff --git a/app/src/main/java/eu/kanade/presentation/library/components/LibraryPager.kt b/app/src/main/java/eu/kanade/presentation/library/components/LibraryPager.kt index 1b12a461e..de225c7e0 100644 --- a/app/src/main/java/eu/kanade/presentation/library/components/LibraryPager.kt +++ b/app/src/main/java/eu/kanade/presentation/library/components/LibraryPager.kt @@ -28,6 +28,13 @@ fun LibraryPager( getDisplayModeForPage: @Composable (Int) -> LibraryDisplayMode, getColumnsForOrientation: (Boolean) -> PreferenceMutableState, getLibraryForPage: @Composable (Int) -> List, + showDownloadBadges: Boolean, + showUnreadBadges: Boolean, + showLocalBadges: Boolean, + showLanguageBadges: Boolean, + // SY --> + showStartReadingButton: Boolean, + // SY <-- onClickManga: (LibraryManga) -> Unit, onLongClickManga: (LibraryManga) -> Unit, // SY --> @@ -59,6 +66,10 @@ fun LibraryPager( LibraryDisplayMode.List -> { LibraryList( items = library, + showDownloadBadges = showDownloadBadges, + showUnreadBadges = showUnreadBadges, + showLocalBadges = showLocalBadges, + showLanguageBadges = showLanguageBadges, contentPadding = contentPadding, selection = selectedManga, onClick = onClickManga, @@ -70,6 +81,13 @@ fun LibraryPager( LibraryDisplayMode.CompactGrid -> { LibraryCompactGrid( items = library, + showDownloadBadges = showDownloadBadges, + showUnreadBadges = showUnreadBadges, + showLocalBadges = showLocalBadges, + showLanguageBadges = showLanguageBadges, + // SY --> + showStartReadingButton = showStartReadingButton, + // SY <-- columns = columns, contentPadding = contentPadding, selection = selectedManga, @@ -85,6 +103,13 @@ fun LibraryPager( LibraryDisplayMode.ComfortableGrid -> { LibraryComfortableGrid( items = library, + showDownloadBadges = showDownloadBadges, + showUnreadBadges = showUnreadBadges, + showLocalBadges = showLocalBadges, + showLanguageBadges = showLanguageBadges, + // SY --> + showStartReadingButton = showStartReadingButton, + // SY <-- columns = columns, contentPadding = contentPadding, selection = selectedManga, @@ -100,6 +125,13 @@ fun LibraryPager( LibraryDisplayMode.CoverOnlyGrid -> { LibraryCoverOnlyGrid( items = library, + showDownloadBadges = showDownloadBadges, + showUnreadBadges = showUnreadBadges, + showLocalBadges = showLocalBadges, + showLanguageBadges = showLanguageBadges, + // SY --> + showStartReadingButton = showStartReadingButton, + // SY <-- columns = columns, contentPadding = contentPadding, selection = selectedManga, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt index 3ed9f81c2..761dfc4a0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt @@ -210,13 +210,10 @@ class LibraryController( when (group) { is LibrarySettingsSheet.Filter.FilterGroup -> onFilterChanged() is LibrarySettingsSheet.Sort.SortGroup -> onSortChanged() - is LibrarySettingsSheet.Display.DisplayGroup -> {} - is LibrarySettingsSheet.Display.BadgeGroup -> onBadgeSettingChanged() - is LibrarySettingsSheet.Display.TabsGroup -> {} // onTabsSettingsChanged() // SY --> is LibrarySettingsSheet.Grouping.InternalGroup -> onGroupSettingChanged() - is LibrarySettingsSheet.Display.ButtonsGroup -> onButtonSettingChanged() - // SY --> + // SY <-- + else -> {} // Handled via different mechanisms } } } @@ -245,15 +242,7 @@ class LibraryController( activity?.invalidateOptionsMenu() } - private fun onBadgeSettingChanged() { - presenter.requestBadgesUpdate() - } - // SY --> - private fun onButtonSettingChanged() { - presenter.requestButtonsUpdate() - } - private fun onGroupSettingChanged() { presenter.requestGroupsUpdate() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt index 86ee0af01..548aec4c8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryItem.kt @@ -17,10 +17,6 @@ class LibraryItem( var isLocal = false var sourceLanguage = "" - // SY --> - var startReadingButton = false - // SY <-- - /** * Filters a manga depending on a query. * diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt index 6efa6c4a1..aed12c3fb 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt @@ -159,6 +159,15 @@ class LibraryPresenter( val tabVisibility by libraryPreferences.categoryTabs().asState() val mangaCountVisibility by libraryPreferences.categoryNumberOfItems().asState() + val showDownloadBadges by libraryPreferences.downloadBadge().asState() + val showUnreadBadges by libraryPreferences.unreadBadge().asState() + val showLocalBadges by libraryPreferences.localBadge().asState() + val showLanguageBadges by libraryPreferences.languageBadge().asState() + + // SY --> + val showStartReadingButton by libraryPreferences.startReadingButton().asState() + // SY <-- + var activeCategory: Int by libraryPreferences.lastUsedCategory().asState() val isDownloadOnly: Boolean by preferences.downloadedOnly().asState() @@ -169,11 +178,6 @@ class LibraryPresenter( */ private val filterTriggerRelay = BehaviorRelay.create(Unit) - /** - * Relay used to apply the UI update to the last emission of the library. - */ - private val badgeTriggerRelay = BehaviorRelay.create(Unit) - /** * Relay used to apply the selected sorting method to the last emission of the library. */ @@ -192,11 +196,6 @@ class LibraryPresenter( } } - /** - * Relay used to apply the UI update to the last emission of the library. - */ - private val buttonTriggerRelay = BehaviorRelay.create(Unit) - /** * Relay used to apply the UI update to the last emission of the library. */ @@ -227,18 +226,12 @@ class LibraryPresenter( * TODO: Move this to a coroutine world * - Move filter and sort to getMangaForCategory and only filter and sort the current display category instead of whole library as some has 5000+ items in the library * - Create new db view and new query to just fetch the current category save as needed to instance variable - * - Fetch badges to maps and retrive as needed instead of fetching all of them at once + * - Fetch badges to maps and retrieve as needed instead of fetching all of them at once */ if (librarySubscription == null || librarySubscription!!.isCancelled) { librarySubscription = presenterScope.launchIO { getLibraryFlow().asObservable() - .combineLatest(badgeTriggerRelay.observeOn(Schedulers.io())) { lib, _ -> - lib.apply { setBadges(mangaMap) } - } // SY --> - .combineLatest(buttonTriggerRelay.observeOn(Schedulers.io())) { lib, _ -> - lib.apply { setButtons(mangaMap) } - } .combineLatest(groupingTriggerRelay.observeOn(Schedulers.io())) { lib, _ -> val (map, categories) = applyGrouping(lib.mangaMap, lib.categories) lib.copy(mangaMap = map, categories = categories) @@ -302,7 +295,7 @@ class LibraryPresenter( val filterFnUnread: (LibraryItem) -> Boolean = unread@{ item -> if (filterUnread == State.IGNORE.value) return@unread true - val isUnread = item.libraryManga.unreadCount != 0L + val isUnread = item.libraryManga.unreadCount > 0 return@unread if (filterUnread == State.INCLUDE.value) { isUnread @@ -400,74 +393,6 @@ class LibraryPresenter( return map.mapValues { entry -> entry.value.filter(filterFn) } } - // SY --> - /** - * Sets the button on each manga. - * - * @param map the map of manga. - */ - private fun setButtons(map: LibraryMap) { - val startReadingButton = libraryPreferences.startReadingButton().get() - - for ((_, itemList) in map) { - for (item in itemList) { - item.startReadingButton = startReadingButton - } - } - } - // SY <-- - - /** - * Sets downloaded chapter count to each manga. - * - * @param map the map of manga. - */ - private fun setBadges(map: LibraryMap) { - val showDownloadBadges = libraryPreferences.downloadBadge().get() - val showUnreadBadges = libraryPreferences.unreadBadge().get() - val showLocalBadges = libraryPreferences.localBadge().get() - val showLanguageBadges = libraryPreferences.languageBadge().get() - - for ((_, itemList) in map) { - for (item in itemList) { - item.downloadCount = if (showDownloadBadges) { - // SY --> - if (item.libraryManga.manga.source == MERGED_SOURCE_ID) { - runBlocking { - getMergedMangaById.await(item.libraryManga.manga.id) - }.sumOf { downloadManager.getDownloadCount(it) }.toLong() - } else { - /* SY <-- */ downloadManager.getDownloadCount(item.libraryManga.manga).toLong() - } - } else { - // Unset download count if not enabled - -1 - } - - item.unreadCount = if (showUnreadBadges) { - item.libraryManga.unreadCount - } else { - // Unset unread count if not enabled - -1 - } - - item.isLocal = if (showLocalBadges) { - item.libraryManga.manga.isLocal() - } else { - // Hide / Unset local badge if not enabled - false - } - - item.sourceLanguage = if (showLanguageBadges) { - sourceManager.getOrStub(item.libraryManga.manga.source).lang.uppercase() - } else { - // Unset source language if not enabled - "" - } - } - } - } - /** * Applies library sorting to the given map of manga. * @@ -614,8 +539,19 @@ class LibraryPresenter( .map { list -> list.map { libraryManga -> // Display mode based on user preference: take it from global library setting or category - LibraryItem(libraryManga) - }.groupBy { it.libraryManga.category.toLong() } + LibraryItem(libraryManga).apply { + downloadCount = /* SY --> */ if (libraryManga.manga.source == MERGED_SOURCE_ID) { + runBlocking { + getMergedMangaById.await(libraryManga.manga.id) + }.sumOf { downloadManager.getDownloadCount(it) }.toLong() + } else { + downloadManager.getDownloadCount(libraryManga.manga).toLong() + } /* SY <-- */ + unreadCount = libraryManga.unreadCount + isLocal = libraryManga.manga.isLocal() + sourceLanguage = sourceManager.getOrStub(libraryManga.manga.source).lang + } + }.groupBy { it.libraryManga.category } } return combine(categoriesFlow, libraryMangasFlow) { dbCategories, libraryManga -> val categories = if (libraryManga.isNotEmpty() && libraryManga.containsKey(0).not()) { @@ -664,7 +600,7 @@ class LibraryPresenter( */ private fun getFilterObservable(): Observable>> { return filterTriggerRelay.observeOn(Schedulers.io()) - .combineLatest(getTracksObservable()) { _, tracks -> tracks } + .combineLatest(getTracksFlow().asObservable().observeOn(Schedulers.io())) { _, tracks -> tracks } } /** @@ -672,7 +608,7 @@ class LibraryPresenter( * * @return an observable of tracked manga. */ - private fun getTracksObservable(): Observable>> { + private fun getTracksFlow(): Flow>> { // TODO: Move this to domain/data layer return getTracks.subscribe() .map { tracks -> @@ -685,8 +621,6 @@ class LibraryPresenter( } } } - .asObservable() - .observeOn(Schedulers.io()) } /** @@ -696,21 +630,7 @@ class LibraryPresenter( filterTriggerRelay.call(Unit) } - /** - * Requests the library to have download badges added. - */ - fun requestBadgesUpdate() { - badgeTriggerRelay.call(Unit) - } - // SY --> - /** - * Requests the library to have buttons toggled. - */ - fun requestButtonsUpdate() { - buttonTriggerRelay.call(Unit) - } - /** * Requests the library to have groups refreshed. */