Control library badge visibility with props instead
Fixes #8174 (cherry picked from commit 6635dd2990851d830e83a628b7e62091bd20cb43) # Conflicts: # app/src/main/java/eu/kanade/presentation/library/components/LibraryComfortableGrid.kt # app/src/main/java/eu/kanade/presentation/library/components/LibraryCompactGrid.kt # app/src/main/java/eu/kanade/presentation/library/components/LibraryContent.kt # app/src/main/java/eu/kanade/presentation/library/components/LibraryCoverOnlyGrid.kt # app/src/main/java/eu/kanade/presentation/library/components/LibraryGridCover.kt # app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt # app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt
This commit is contained in:
parent
aebfef345b
commit
0b5b9cb5cc
@ -120,6 +120,13 @@ fun LibraryScreen(
|
|||||||
// SY <--
|
// SY <--
|
||||||
getColumnsForOrientation = { presenter.getColumnsPreferenceForCurrentOrientation(it) },
|
getColumnsForOrientation = { presenter.getColumnsPreferenceForCurrentOrientation(it) },
|
||||||
getLibraryForPage = { presenter.getMangaForCategory(page = 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,
|
isIncognitoMode = presenter.isIncognitoMode,
|
||||||
isDownloadOnly = presenter.isDownloadOnly,
|
isDownloadOnly = presenter.isDownloadOnly,
|
||||||
// SY -->
|
// SY -->
|
||||||
|
@ -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,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
@ -20,6 +20,13 @@ import eu.kanade.tachiyomi.ui.library.LibraryItem
|
|||||||
@Composable
|
@Composable
|
||||||
fun LibraryComfortableGrid(
|
fun LibraryComfortableGrid(
|
||||||
items: List<LibraryItem>,
|
items: List<LibraryItem>,
|
||||||
|
showDownloadBadges: Boolean,
|
||||||
|
showUnreadBadges: Boolean,
|
||||||
|
showLocalBadges: Boolean,
|
||||||
|
showLanguageBadges: Boolean,
|
||||||
|
// SY -->
|
||||||
|
showStartReadingButton: Boolean,
|
||||||
|
// SY <--
|
||||||
columns: Int,
|
columns: Int,
|
||||||
contentPadding: PaddingValues,
|
contentPadding: PaddingValues,
|
||||||
selection: List<LibraryManga>,
|
selection: List<LibraryManga>,
|
||||||
@ -43,12 +50,19 @@ fun LibraryComfortableGrid(
|
|||||||
contentType = { "library_comfortable_grid_item" },
|
contentType = { "library_comfortable_grid_item" },
|
||||||
) { libraryItem ->
|
) { libraryItem ->
|
||||||
LibraryComfortableGridItem(
|
LibraryComfortableGridItem(
|
||||||
libraryItem,
|
item = libraryItem,
|
||||||
libraryItem.libraryManga in selection,
|
showDownloadBadge = showDownloadBadges,
|
||||||
onClick,
|
showUnreadBadge = showUnreadBadges,
|
||||||
onLongClick,
|
showLocalBadge = showLocalBadges,
|
||||||
|
showLanguageBadge = showLanguageBadges,
|
||||||
// SY -->
|
// SY -->
|
||||||
onOpenReader,
|
showStartReadingButton = showStartReadingButton,
|
||||||
|
// SY <--
|
||||||
|
isSelected = libraryItem.libraryManga in selection,
|
||||||
|
onClick = onClick,
|
||||||
|
onLongClick = onLongClick,
|
||||||
|
// SY -->
|
||||||
|
onOpenReader = onOpenReader,
|
||||||
// SY <--
|
// SY <--
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -58,10 +72,19 @@ fun LibraryComfortableGrid(
|
|||||||
@Composable
|
@Composable
|
||||||
fun LibraryComfortableGridItem(
|
fun LibraryComfortableGridItem(
|
||||||
item: LibraryItem,
|
item: LibraryItem,
|
||||||
|
showDownloadBadge: Boolean,
|
||||||
|
showUnreadBadge: Boolean,
|
||||||
|
showLocalBadge: Boolean,
|
||||||
|
showLanguageBadge: Boolean,
|
||||||
|
// SY -->
|
||||||
|
showStartReadingButton: Boolean,
|
||||||
|
// SY <--
|
||||||
isSelected: Boolean,
|
isSelected: Boolean,
|
||||||
onClick: (LibraryManga) -> Unit,
|
onClick: (LibraryManga) -> Unit,
|
||||||
onLongClick: (LibraryManga) -> Unit,
|
onLongClick: (LibraryManga) -> Unit,
|
||||||
|
// SY -->
|
||||||
onOpenReader: (LibraryManga) -> Unit,
|
onOpenReader: (LibraryManga) -> Unit,
|
||||||
|
// SY <--
|
||||||
) {
|
) {
|
||||||
val libraryManga = item.libraryManga
|
val libraryManga = item.libraryManga
|
||||||
val manga = libraryManga.manga
|
val manga = libraryManga.manga
|
||||||
@ -85,12 +108,13 @@ fun LibraryComfortableGridItem(
|
|||||||
manga.thumbnailUrl,
|
manga.thumbnailUrl,
|
||||||
manga.coverLastModified,
|
manga.coverLastModified,
|
||||||
),
|
),
|
||||||
downloadCount = item.downloadCount,
|
item = item,
|
||||||
unreadCount = item.unreadCount,
|
showDownloadBadge = showDownloadBadge,
|
||||||
isLocal = item.isLocal,
|
showUnreadBadge = showUnreadBadge,
|
||||||
language = item.sourceLanguage,
|
showLocalBadge = showLocalBadge,
|
||||||
|
showLanguageBadge = showLanguageBadge,
|
||||||
// SY -->
|
// SY -->
|
||||||
showPlayButton = item.startReadingButton && item.libraryManga.unreadCount > 0,
|
showStartReadingButton = showStartReadingButton && item.libraryManga.unreadCount > 0,
|
||||||
onOpenReader = {
|
onOpenReader = {
|
||||||
onOpenReader(item.libraryManga)
|
onOpenReader(item.libraryManga)
|
||||||
},
|
},
|
||||||
|
@ -29,6 +29,13 @@ import eu.kanade.tachiyomi.ui.library.LibraryItem
|
|||||||
@Composable
|
@Composable
|
||||||
fun LibraryCompactGrid(
|
fun LibraryCompactGrid(
|
||||||
items: List<LibraryItem>,
|
items: List<LibraryItem>,
|
||||||
|
showDownloadBadges: Boolean,
|
||||||
|
showUnreadBadges: Boolean,
|
||||||
|
showLocalBadges: Boolean,
|
||||||
|
showLanguageBadges: Boolean,
|
||||||
|
// SY -->
|
||||||
|
showStartReadingButton: Boolean,
|
||||||
|
// SY <--
|
||||||
columns: Int,
|
columns: Int,
|
||||||
contentPadding: PaddingValues,
|
contentPadding: PaddingValues,
|
||||||
selection: List<LibraryManga>,
|
selection: List<LibraryManga>,
|
||||||
@ -53,6 +60,13 @@ fun LibraryCompactGrid(
|
|||||||
) { libraryItem ->
|
) { libraryItem ->
|
||||||
LibraryCompactGridItem(
|
LibraryCompactGridItem(
|
||||||
item = libraryItem,
|
item = libraryItem,
|
||||||
|
showDownloadBadge = showDownloadBadges,
|
||||||
|
showUnreadBadge = showUnreadBadges,
|
||||||
|
showLocalBadge = showLocalBadges,
|
||||||
|
showLanguageBadge = showLanguageBadges,
|
||||||
|
// SY -->
|
||||||
|
showStartReadingButton = showStartReadingButton,
|
||||||
|
// SY <--
|
||||||
isSelected = libraryItem.libraryManga in selection,
|
isSelected = libraryItem.libraryManga in selection,
|
||||||
onClick = onClick,
|
onClick = onClick,
|
||||||
onLongClick = onLongClick,
|
onLongClick = onLongClick,
|
||||||
@ -67,6 +81,13 @@ fun LibraryCompactGrid(
|
|||||||
@Composable
|
@Composable
|
||||||
fun LibraryCompactGridItem(
|
fun LibraryCompactGridItem(
|
||||||
item: LibraryItem,
|
item: LibraryItem,
|
||||||
|
showDownloadBadge: Boolean,
|
||||||
|
showUnreadBadge: Boolean,
|
||||||
|
showLocalBadge: Boolean,
|
||||||
|
showLanguageBadge: Boolean,
|
||||||
|
// SY -->
|
||||||
|
showStartReadingButton: Boolean,
|
||||||
|
// SY <--
|
||||||
isSelected: Boolean,
|
isSelected: Boolean,
|
||||||
onClick: (LibraryManga) -> Unit,
|
onClick: (LibraryManga) -> Unit,
|
||||||
onLongClick: (LibraryManga) -> Unit,
|
onLongClick: (LibraryManga) -> Unit,
|
||||||
@ -94,12 +115,13 @@ fun LibraryCompactGridItem(
|
|||||||
manga.thumbnailUrl,
|
manga.thumbnailUrl,
|
||||||
manga.coverLastModified,
|
manga.coverLastModified,
|
||||||
),
|
),
|
||||||
downloadCount = item.downloadCount,
|
item = item,
|
||||||
unreadCount = item.unreadCount,
|
showDownloadBadge = showDownloadBadge,
|
||||||
isLocal = item.isLocal,
|
showUnreadBadge = showUnreadBadge,
|
||||||
language = item.sourceLanguage,
|
showLocalBadge = showLocalBadge,
|
||||||
|
showLanguageBadge = showLanguageBadge,
|
||||||
// SY -->
|
// SY -->
|
||||||
showPlayButton = item.startReadingButton && item.libraryManga.unreadCount > 0,
|
showStartReadingButton = showStartReadingButton && item.libraryManga.unreadCount > 0,
|
||||||
playButtonPosition = PlayButtonPosition.Top,
|
playButtonPosition = PlayButtonPosition.Top,
|
||||||
onOpenReader = {
|
onOpenReader = {
|
||||||
onOpenReader(item.libraryManga)
|
onOpenReader(item.libraryManga)
|
||||||
|
@ -24,7 +24,6 @@ import eu.kanade.domain.library.model.LibraryDisplayMode
|
|||||||
import eu.kanade.domain.library.model.LibraryManga
|
import eu.kanade.domain.library.model.LibraryManga
|
||||||
import eu.kanade.presentation.components.SwipeRefresh
|
import eu.kanade.presentation.components.SwipeRefresh
|
||||||
import eu.kanade.presentation.library.LibraryState
|
import eu.kanade.presentation.library.LibraryState
|
||||||
import eu.kanade.presentation.util.plus
|
|
||||||
import eu.kanade.tachiyomi.ui.library.LibraryItem
|
import eu.kanade.tachiyomi.ui.library.LibraryItem
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@ -35,8 +34,6 @@ fun LibraryContent(
|
|||||||
contentPadding: PaddingValues,
|
contentPadding: PaddingValues,
|
||||||
currentPage: () -> Int,
|
currentPage: () -> Int,
|
||||||
isLibraryEmpty: Boolean,
|
isLibraryEmpty: Boolean,
|
||||||
isDownloadOnly: Boolean,
|
|
||||||
isIncognitoMode: Boolean,
|
|
||||||
showPageTabs: Boolean,
|
showPageTabs: Boolean,
|
||||||
showMangaCount: Boolean,
|
showMangaCount: Boolean,
|
||||||
onChangeCurrentPage: (Int) -> Unit,
|
onChangeCurrentPage: (Int) -> Unit,
|
||||||
@ -49,6 +46,15 @@ fun LibraryContent(
|
|||||||
getDisplayModeForPage: @Composable (Int) -> LibraryDisplayMode,
|
getDisplayModeForPage: @Composable (Int) -> LibraryDisplayMode,
|
||||||
getColumnsForOrientation: (Boolean) -> PreferenceMutableState<Int>,
|
getColumnsForOrientation: (Boolean) -> PreferenceMutableState<Int>,
|
||||||
getLibraryForPage: @Composable (Int) -> List<LibraryItem>,
|
getLibraryForPage: @Composable (Int) -> List<LibraryItem>,
|
||||||
|
showDownloadBadges: Boolean,
|
||||||
|
showUnreadBadges: Boolean,
|
||||||
|
showLocalBadges: Boolean,
|
||||||
|
showLanguageBadges: Boolean,
|
||||||
|
// SY -->
|
||||||
|
showStartReadingButton: Boolean,
|
||||||
|
// SY <--
|
||||||
|
isDownloadOnly: Boolean,
|
||||||
|
isIncognitoMode: Boolean,
|
||||||
// SY -->
|
// SY -->
|
||||||
onOpenReader: (LibraryManga) -> Unit,
|
onOpenReader: (LibraryManga) -> Unit,
|
||||||
getCategoryName: (Context, Category, Int, String) -> String,
|
getCategoryName: (Context, Category, Int, String) -> String,
|
||||||
@ -120,6 +126,13 @@ fun LibraryContent(
|
|||||||
getDisplayModeForPage = getDisplayModeForPage,
|
getDisplayModeForPage = getDisplayModeForPage,
|
||||||
getColumnsForOrientation = getColumnsForOrientation,
|
getColumnsForOrientation = getColumnsForOrientation,
|
||||||
getLibraryForPage = getLibraryForPage,
|
getLibraryForPage = getLibraryForPage,
|
||||||
|
showDownloadBadges = showDownloadBadges,
|
||||||
|
showUnreadBadges = showUnreadBadges,
|
||||||
|
showLocalBadges = showLocalBadges,
|
||||||
|
showLanguageBadges = showLanguageBadges,
|
||||||
|
// SY -->
|
||||||
|
showStartReadingButton = showStartReadingButton,
|
||||||
|
// SY <--
|
||||||
onClickManga = onClickManga,
|
onClickManga = onClickManga,
|
||||||
onLongClickManga = onLongClickManga,
|
onLongClickManga = onLongClickManga,
|
||||||
onGlobalSearchClicked = onGlobalSearchClicked,
|
onGlobalSearchClicked = onGlobalSearchClicked,
|
||||||
|
@ -12,6 +12,13 @@ import eu.kanade.tachiyomi.ui.library.LibraryItem
|
|||||||
@Composable
|
@Composable
|
||||||
fun LibraryCoverOnlyGrid(
|
fun LibraryCoverOnlyGrid(
|
||||||
items: List<LibraryItem>,
|
items: List<LibraryItem>,
|
||||||
|
showDownloadBadges: Boolean,
|
||||||
|
showUnreadBadges: Boolean,
|
||||||
|
showLocalBadges: Boolean,
|
||||||
|
showLanguageBadges: Boolean,
|
||||||
|
// SY -->
|
||||||
|
showStartReadingButton: Boolean,
|
||||||
|
// SY <--
|
||||||
columns: Int,
|
columns: Int,
|
||||||
contentPadding: PaddingValues,
|
contentPadding: PaddingValues,
|
||||||
selection: List<LibraryManga>,
|
selection: List<LibraryManga>,
|
||||||
@ -36,6 +43,13 @@ fun LibraryCoverOnlyGrid(
|
|||||||
) { libraryItem ->
|
) { libraryItem ->
|
||||||
LibraryCoverOnlyGridItem(
|
LibraryCoverOnlyGridItem(
|
||||||
item = libraryItem,
|
item = libraryItem,
|
||||||
|
showDownloadBadge = showDownloadBadges,
|
||||||
|
showUnreadBadge = showUnreadBadges,
|
||||||
|
showLocalBadge = showLocalBadges,
|
||||||
|
showLanguageBadge = showLanguageBadges,
|
||||||
|
// SY -->
|
||||||
|
showStartReadingButton = showStartReadingButton,
|
||||||
|
// SY <--
|
||||||
isSelected = libraryItem.libraryManga in selection,
|
isSelected = libraryItem.libraryManga in selection,
|
||||||
onClick = onClick,
|
onClick = onClick,
|
||||||
onLongClick = onLongClick,
|
onLongClick = onLongClick,
|
||||||
@ -50,6 +64,13 @@ fun LibraryCoverOnlyGrid(
|
|||||||
@Composable
|
@Composable
|
||||||
fun LibraryCoverOnlyGridItem(
|
fun LibraryCoverOnlyGridItem(
|
||||||
item: LibraryItem,
|
item: LibraryItem,
|
||||||
|
showDownloadBadge: Boolean,
|
||||||
|
showUnreadBadge: Boolean,
|
||||||
|
showLocalBadge: Boolean,
|
||||||
|
showLanguageBadge: Boolean,
|
||||||
|
// SY -->
|
||||||
|
showStartReadingButton: Boolean,
|
||||||
|
// SY <--
|
||||||
isSelected: Boolean,
|
isSelected: Boolean,
|
||||||
onClick: (LibraryManga) -> Unit,
|
onClick: (LibraryManga) -> Unit,
|
||||||
onLongClick: (LibraryManga) -> Unit,
|
onLongClick: (LibraryManga) -> Unit,
|
||||||
@ -77,12 +98,13 @@ fun LibraryCoverOnlyGridItem(
|
|||||||
manga.thumbnailUrl,
|
manga.thumbnailUrl,
|
||||||
manga.coverLastModified,
|
manga.coverLastModified,
|
||||||
),
|
),
|
||||||
downloadCount = item.downloadCount,
|
item = item,
|
||||||
unreadCount = item.unreadCount,
|
showDownloadBadge = showDownloadBadge,
|
||||||
isLocal = item.isLocal,
|
showUnreadBadge = showUnreadBadge,
|
||||||
language = item.sourceLanguage,
|
showLocalBadge = showLocalBadge,
|
||||||
|
showLanguageBadge = showLanguageBadge,
|
||||||
// SY -->
|
// SY -->
|
||||||
showPlayButton = item.startReadingButton && item.libraryManga.unreadCount > 0,
|
showStartReadingButton = showStartReadingButton && item.libraryManga.unreadCount > 0,
|
||||||
onOpenReader = {
|
onOpenReader = {
|
||||||
onOpenReader(item.libraryManga)
|
onOpenReader(item.libraryManga)
|
||||||
},
|
},
|
||||||
|
@ -7,16 +7,13 @@ import androidx.compose.foundation.layout.RowScope
|
|||||||
import androidx.compose.foundation.layout.aspectRatio
|
import androidx.compose.foundation.layout.aspectRatio
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.material3.MaterialTheme
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.stringResource
|
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import eu.kanade.presentation.components.Badge
|
|
||||||
import eu.kanade.presentation.components.BadgeGroup
|
import eu.kanade.presentation.components.BadgeGroup
|
||||||
import eu.kanade.presentation.components.MangaCover
|
import eu.kanade.presentation.components.MangaCover
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.ui.library.LibraryItem
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun MangaGridCover(
|
fun MangaGridCover(
|
||||||
@ -25,7 +22,7 @@ fun MangaGridCover(
|
|||||||
badgesStart: (@Composable RowScope.() -> Unit)? = null,
|
badgesStart: (@Composable RowScope.() -> Unit)? = null,
|
||||||
badgesEnd: (@Composable RowScope.() -> Unit)? = null,
|
badgesEnd: (@Composable RowScope.() -> Unit)? = null,
|
||||||
// SY -->
|
// SY -->
|
||||||
showPlayButton: Boolean = false,
|
showStartReadingButton: Boolean = false,
|
||||||
playButtonPosition: PlayButtonPosition = PlayButtonPosition.Bottom,
|
playButtonPosition: PlayButtonPosition = PlayButtonPosition.Bottom,
|
||||||
onOpenReader: () -> Unit = {},
|
onOpenReader: () -> Unit = {},
|
||||||
// SY <--
|
// SY <--
|
||||||
@ -62,11 +59,11 @@ fun MangaGridCover(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
// SY -->
|
// SY -->
|
||||||
if (showPlayButton && playButtonPosition == PlayButtonPosition.Top) {
|
if (showStartReadingButton && playButtonPosition == PlayButtonPosition.Top) {
|
||||||
StartReadingButton(onOpenReader = onOpenReader)
|
StartReadingButton(onOpenReader = onOpenReader)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (showPlayButton && playButtonPosition == PlayButtonPosition.Bottom) {
|
if (showStartReadingButton && playButtonPosition == PlayButtonPosition.Bottom) {
|
||||||
StartReadingButton(
|
StartReadingButton(
|
||||||
Modifier.align(playButtonPosition.alignment),
|
Modifier.align(playButtonPosition.alignment),
|
||||||
onOpenReader = onOpenReader,
|
onOpenReader = onOpenReader,
|
||||||
@ -80,12 +77,13 @@ fun MangaGridCover(
|
|||||||
fun LibraryGridCover(
|
fun LibraryGridCover(
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
mangaCover: eu.kanade.domain.manga.model.MangaCover,
|
mangaCover: eu.kanade.domain.manga.model.MangaCover,
|
||||||
downloadCount: Long,
|
item: LibraryItem,
|
||||||
unreadCount: Long,
|
showDownloadBadge: Boolean,
|
||||||
isLocal: Boolean,
|
showUnreadBadge: Boolean,
|
||||||
language: String,
|
showLocalBadge: Boolean,
|
||||||
|
showLanguageBadge: Boolean,
|
||||||
// SY -->
|
// SY -->
|
||||||
showPlayButton: Boolean,
|
showStartReadingButton: Boolean,
|
||||||
playButtonPosition: PlayButtonPosition = PlayButtonPosition.Bottom,
|
playButtonPosition: PlayButtonPosition = PlayButtonPosition.Bottom,
|
||||||
onOpenReader: () -> Unit,
|
onOpenReader: () -> Unit,
|
||||||
// SY <--
|
// SY <--
|
||||||
@ -100,34 +98,14 @@ fun LibraryGridCover(
|
|||||||
)
|
)
|
||||||
},
|
},
|
||||||
badgesStart = {
|
badgesStart = {
|
||||||
if (downloadCount > 0) {
|
DownloadsBadge(enabled = showDownloadBadge, item = item)
|
||||||
Badge(
|
UnreadBadge(enabled = showUnreadBadge, item = item)
|
||||||
text = "$downloadCount",
|
|
||||||
color = MaterialTheme.colorScheme.tertiary,
|
|
||||||
textColor = MaterialTheme.colorScheme.onTertiary,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
if (unreadCount > 0) {
|
|
||||||
Badge(text = "$unreadCount")
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
badgesEnd = {
|
badgesEnd = {
|
||||||
if (isLocal) {
|
LanguageBadge(showLanguage = showLanguageBadge, showLocal = showLocalBadge, item = item)
|
||||||
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,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
// SY -->
|
// SY -->
|
||||||
showPlayButton = showPlayButton,
|
showStartReadingButton = showStartReadingButton,
|
||||||
playButtonPosition = playButtonPosition,
|
playButtonPosition = playButtonPosition,
|
||||||
onOpenReader = onOpenReader,
|
onOpenReader = onOpenReader,
|
||||||
// SY <--
|
// SY <--
|
||||||
|
@ -21,7 +21,6 @@ import androidx.compose.ui.unit.dp
|
|||||||
import androidx.compose.ui.zIndex
|
import androidx.compose.ui.zIndex
|
||||||
import eu.kanade.domain.library.model.LibraryManga
|
import eu.kanade.domain.library.model.LibraryManga
|
||||||
import eu.kanade.domain.manga.model.MangaCover
|
import eu.kanade.domain.manga.model.MangaCover
|
||||||
import eu.kanade.presentation.components.Badge
|
|
||||||
import eu.kanade.presentation.components.BadgeGroup
|
import eu.kanade.presentation.components.BadgeGroup
|
||||||
import eu.kanade.presentation.components.FastScrollLazyColumn
|
import eu.kanade.presentation.components.FastScrollLazyColumn
|
||||||
import eu.kanade.presentation.components.MangaCover.Square
|
import eu.kanade.presentation.components.MangaCover.Square
|
||||||
@ -35,6 +34,10 @@ import eu.kanade.tachiyomi.ui.library.LibraryItem
|
|||||||
@Composable
|
@Composable
|
||||||
fun LibraryList(
|
fun LibraryList(
|
||||||
items: List<LibraryItem>,
|
items: List<LibraryItem>,
|
||||||
|
showDownloadBadges: Boolean,
|
||||||
|
showUnreadBadges: Boolean,
|
||||||
|
showLocalBadges: Boolean,
|
||||||
|
showLanguageBadges: Boolean,
|
||||||
contentPadding: PaddingValues,
|
contentPadding: PaddingValues,
|
||||||
selection: List<LibraryManga>,
|
selection: List<LibraryManga>,
|
||||||
onClick: (LibraryManga) -> Unit,
|
onClick: (LibraryManga) -> Unit,
|
||||||
@ -63,6 +66,10 @@ fun LibraryList(
|
|||||||
) { libraryItem ->
|
) { libraryItem ->
|
||||||
LibraryListItem(
|
LibraryListItem(
|
||||||
item = libraryItem,
|
item = libraryItem,
|
||||||
|
showDownloadBadge = showDownloadBadges,
|
||||||
|
showUnreadBadge = showUnreadBadges,
|
||||||
|
showLocalBadge = showLocalBadges,
|
||||||
|
showLanguageBadge = showLanguageBadges,
|
||||||
isSelected = libraryItem.libraryManga in selection,
|
isSelected = libraryItem.libraryManga in selection,
|
||||||
onClick = onClick,
|
onClick = onClick,
|
||||||
onLongClick = onLongClick,
|
onLongClick = onLongClick,
|
||||||
@ -74,6 +81,10 @@ fun LibraryList(
|
|||||||
@Composable
|
@Composable
|
||||||
fun LibraryListItem(
|
fun LibraryListItem(
|
||||||
item: LibraryItem,
|
item: LibraryItem,
|
||||||
|
showDownloadBadge: Boolean,
|
||||||
|
showUnreadBadge: Boolean,
|
||||||
|
showLocalBadge: Boolean,
|
||||||
|
showLanguageBadge: Boolean,
|
||||||
isSelected: Boolean,
|
isSelected: Boolean,
|
||||||
onClick: (LibraryManga) -> Unit,
|
onClick: (LibraryManga) -> Unit,
|
||||||
onLongClick: (LibraryManga) -> Unit,
|
onLongClick: (LibraryManga) -> Unit,
|
||||||
@ -93,30 +104,9 @@ fun LibraryListItem(
|
|||||||
onClick = { onClick(libraryManga) },
|
onClick = { onClick(libraryManga) },
|
||||||
onLongClick = { onLongClick(libraryManga) },
|
onLongClick = { onLongClick(libraryManga) },
|
||||||
) {
|
) {
|
||||||
if (item.downloadCount > 0) {
|
DownloadsBadge(enabled = showDownloadBadge, item = item)
|
||||||
Badge(
|
UnreadBadge(enabled = showUnreadBadge, item = item)
|
||||||
text = "${item.downloadCount}",
|
LanguageBadge(showLanguage = showLanguageBadge, showLocal = showLocalBadge, item = item)
|
||||||
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,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,6 +28,13 @@ fun LibraryPager(
|
|||||||
getDisplayModeForPage: @Composable (Int) -> LibraryDisplayMode,
|
getDisplayModeForPage: @Composable (Int) -> LibraryDisplayMode,
|
||||||
getColumnsForOrientation: (Boolean) -> PreferenceMutableState<Int>,
|
getColumnsForOrientation: (Boolean) -> PreferenceMutableState<Int>,
|
||||||
getLibraryForPage: @Composable (Int) -> List<LibraryItem>,
|
getLibraryForPage: @Composable (Int) -> List<LibraryItem>,
|
||||||
|
showDownloadBadges: Boolean,
|
||||||
|
showUnreadBadges: Boolean,
|
||||||
|
showLocalBadges: Boolean,
|
||||||
|
showLanguageBadges: Boolean,
|
||||||
|
// SY -->
|
||||||
|
showStartReadingButton: Boolean,
|
||||||
|
// SY <--
|
||||||
onClickManga: (LibraryManga) -> Unit,
|
onClickManga: (LibraryManga) -> Unit,
|
||||||
onLongClickManga: (LibraryManga) -> Unit,
|
onLongClickManga: (LibraryManga) -> Unit,
|
||||||
// SY -->
|
// SY -->
|
||||||
@ -59,6 +66,10 @@ fun LibraryPager(
|
|||||||
LibraryDisplayMode.List -> {
|
LibraryDisplayMode.List -> {
|
||||||
LibraryList(
|
LibraryList(
|
||||||
items = library,
|
items = library,
|
||||||
|
showDownloadBadges = showDownloadBadges,
|
||||||
|
showUnreadBadges = showUnreadBadges,
|
||||||
|
showLocalBadges = showLocalBadges,
|
||||||
|
showLanguageBadges = showLanguageBadges,
|
||||||
contentPadding = contentPadding,
|
contentPadding = contentPadding,
|
||||||
selection = selectedManga,
|
selection = selectedManga,
|
||||||
onClick = onClickManga,
|
onClick = onClickManga,
|
||||||
@ -70,6 +81,13 @@ fun LibraryPager(
|
|||||||
LibraryDisplayMode.CompactGrid -> {
|
LibraryDisplayMode.CompactGrid -> {
|
||||||
LibraryCompactGrid(
|
LibraryCompactGrid(
|
||||||
items = library,
|
items = library,
|
||||||
|
showDownloadBadges = showDownloadBadges,
|
||||||
|
showUnreadBadges = showUnreadBadges,
|
||||||
|
showLocalBadges = showLocalBadges,
|
||||||
|
showLanguageBadges = showLanguageBadges,
|
||||||
|
// SY -->
|
||||||
|
showStartReadingButton = showStartReadingButton,
|
||||||
|
// SY <--
|
||||||
columns = columns,
|
columns = columns,
|
||||||
contentPadding = contentPadding,
|
contentPadding = contentPadding,
|
||||||
selection = selectedManga,
|
selection = selectedManga,
|
||||||
@ -85,6 +103,13 @@ fun LibraryPager(
|
|||||||
LibraryDisplayMode.ComfortableGrid -> {
|
LibraryDisplayMode.ComfortableGrid -> {
|
||||||
LibraryComfortableGrid(
|
LibraryComfortableGrid(
|
||||||
items = library,
|
items = library,
|
||||||
|
showDownloadBadges = showDownloadBadges,
|
||||||
|
showUnreadBadges = showUnreadBadges,
|
||||||
|
showLocalBadges = showLocalBadges,
|
||||||
|
showLanguageBadges = showLanguageBadges,
|
||||||
|
// SY -->
|
||||||
|
showStartReadingButton = showStartReadingButton,
|
||||||
|
// SY <--
|
||||||
columns = columns,
|
columns = columns,
|
||||||
contentPadding = contentPadding,
|
contentPadding = contentPadding,
|
||||||
selection = selectedManga,
|
selection = selectedManga,
|
||||||
@ -100,6 +125,13 @@ fun LibraryPager(
|
|||||||
LibraryDisplayMode.CoverOnlyGrid -> {
|
LibraryDisplayMode.CoverOnlyGrid -> {
|
||||||
LibraryCoverOnlyGrid(
|
LibraryCoverOnlyGrid(
|
||||||
items = library,
|
items = library,
|
||||||
|
showDownloadBadges = showDownloadBadges,
|
||||||
|
showUnreadBadges = showUnreadBadges,
|
||||||
|
showLocalBadges = showLocalBadges,
|
||||||
|
showLanguageBadges = showLanguageBadges,
|
||||||
|
// SY -->
|
||||||
|
showStartReadingButton = showStartReadingButton,
|
||||||
|
// SY <--
|
||||||
columns = columns,
|
columns = columns,
|
||||||
contentPadding = contentPadding,
|
contentPadding = contentPadding,
|
||||||
selection = selectedManga,
|
selection = selectedManga,
|
||||||
|
@ -210,13 +210,10 @@ class LibraryController(
|
|||||||
when (group) {
|
when (group) {
|
||||||
is LibrarySettingsSheet.Filter.FilterGroup -> onFilterChanged()
|
is LibrarySettingsSheet.Filter.FilterGroup -> onFilterChanged()
|
||||||
is LibrarySettingsSheet.Sort.SortGroup -> onSortChanged()
|
is LibrarySettingsSheet.Sort.SortGroup -> onSortChanged()
|
||||||
is LibrarySettingsSheet.Display.DisplayGroup -> {}
|
|
||||||
is LibrarySettingsSheet.Display.BadgeGroup -> onBadgeSettingChanged()
|
|
||||||
is LibrarySettingsSheet.Display.TabsGroup -> {} // onTabsSettingsChanged()
|
|
||||||
// SY -->
|
// SY -->
|
||||||
is LibrarySettingsSheet.Grouping.InternalGroup -> onGroupSettingChanged()
|
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()
|
activity?.invalidateOptionsMenu()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun onBadgeSettingChanged() {
|
|
||||||
presenter.requestBadgesUpdate()
|
|
||||||
}
|
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
private fun onButtonSettingChanged() {
|
|
||||||
presenter.requestButtonsUpdate()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun onGroupSettingChanged() {
|
private fun onGroupSettingChanged() {
|
||||||
presenter.requestGroupsUpdate()
|
presenter.requestGroupsUpdate()
|
||||||
}
|
}
|
||||||
|
@ -17,10 +17,6 @@ class LibraryItem(
|
|||||||
var isLocal = false
|
var isLocal = false
|
||||||
var sourceLanguage = ""
|
var sourceLanguage = ""
|
||||||
|
|
||||||
// SY -->
|
|
||||||
var startReadingButton = false
|
|
||||||
// SY <--
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filters a manga depending on a query.
|
* Filters a manga depending on a query.
|
||||||
*
|
*
|
||||||
|
@ -159,6 +159,15 @@ class LibraryPresenter(
|
|||||||
val tabVisibility by libraryPreferences.categoryTabs().asState()
|
val tabVisibility by libraryPreferences.categoryTabs().asState()
|
||||||
val mangaCountVisibility by libraryPreferences.categoryNumberOfItems().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()
|
var activeCategory: Int by libraryPreferences.lastUsedCategory().asState()
|
||||||
|
|
||||||
val isDownloadOnly: Boolean by preferences.downloadedOnly().asState()
|
val isDownloadOnly: Boolean by preferences.downloadedOnly().asState()
|
||||||
@ -169,11 +178,6 @@ class LibraryPresenter(
|
|||||||
*/
|
*/
|
||||||
private val filterTriggerRelay = BehaviorRelay.create(Unit)
|
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.
|
* 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.
|
* 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
|
* 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
|
* - 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
|
* - 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) {
|
if (librarySubscription == null || librarySubscription!!.isCancelled) {
|
||||||
librarySubscription = presenterScope.launchIO {
|
librarySubscription = presenterScope.launchIO {
|
||||||
getLibraryFlow().asObservable()
|
getLibraryFlow().asObservable()
|
||||||
.combineLatest(badgeTriggerRelay.observeOn(Schedulers.io())) { lib, _ ->
|
|
||||||
lib.apply { setBadges(mangaMap) }
|
|
||||||
}
|
|
||||||
// SY -->
|
// SY -->
|
||||||
.combineLatest(buttonTriggerRelay.observeOn(Schedulers.io())) { lib, _ ->
|
|
||||||
lib.apply { setButtons(mangaMap) }
|
|
||||||
}
|
|
||||||
.combineLatest(groupingTriggerRelay.observeOn(Schedulers.io())) { lib, _ ->
|
.combineLatest(groupingTriggerRelay.observeOn(Schedulers.io())) { lib, _ ->
|
||||||
val (map, categories) = applyGrouping(lib.mangaMap, lib.categories)
|
val (map, categories) = applyGrouping(lib.mangaMap, lib.categories)
|
||||||
lib.copy(mangaMap = map, categories = categories)
|
lib.copy(mangaMap = map, categories = categories)
|
||||||
@ -302,7 +295,7 @@ class LibraryPresenter(
|
|||||||
|
|
||||||
val filterFnUnread: (LibraryItem) -> Boolean = unread@{ item ->
|
val filterFnUnread: (LibraryItem) -> Boolean = unread@{ item ->
|
||||||
if (filterUnread == State.IGNORE.value) return@unread true
|
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) {
|
return@unread if (filterUnread == State.INCLUDE.value) {
|
||||||
isUnread
|
isUnread
|
||||||
@ -400,74 +393,6 @@ class LibraryPresenter(
|
|||||||
return map.mapValues { entry -> entry.value.filter(filterFn) }
|
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.
|
* Applies library sorting to the given map of manga.
|
||||||
*
|
*
|
||||||
@ -614,8 +539,19 @@ class LibraryPresenter(
|
|||||||
.map { list ->
|
.map { list ->
|
||||||
list.map { libraryManga ->
|
list.map { libraryManga ->
|
||||||
// Display mode based on user preference: take it from global library setting or category
|
// Display mode based on user preference: take it from global library setting or category
|
||||||
LibraryItem(libraryManga)
|
LibraryItem(libraryManga).apply {
|
||||||
}.groupBy { it.libraryManga.category.toLong() }
|
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 ->
|
return combine(categoriesFlow, libraryMangasFlow) { dbCategories, libraryManga ->
|
||||||
val categories = if (libraryManga.isNotEmpty() && libraryManga.containsKey(0).not()) {
|
val categories = if (libraryManga.isNotEmpty() && libraryManga.containsKey(0).not()) {
|
||||||
@ -664,7 +600,7 @@ class LibraryPresenter(
|
|||||||
*/
|
*/
|
||||||
private fun getFilterObservable(): Observable<Map<Long, Map<Long, Boolean>>> {
|
private fun getFilterObservable(): Observable<Map<Long, Map<Long, Boolean>>> {
|
||||||
return filterTriggerRelay.observeOn(Schedulers.io())
|
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.
|
* @return an observable of tracked manga.
|
||||||
*/
|
*/
|
||||||
private fun getTracksObservable(): Observable<Map<Long, Map<Long, Boolean>>> {
|
private fun getTracksFlow(): Flow<Map<Long, Map<Long, Boolean>>> {
|
||||||
// TODO: Move this to domain/data layer
|
// TODO: Move this to domain/data layer
|
||||||
return getTracks.subscribe()
|
return getTracks.subscribe()
|
||||||
.map { tracks ->
|
.map { tracks ->
|
||||||
@ -685,8 +621,6 @@ class LibraryPresenter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.asObservable()
|
|
||||||
.observeOn(Schedulers.io())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -696,21 +630,7 @@ class LibraryPresenter(
|
|||||||
filterTriggerRelay.call(Unit)
|
filterTriggerRelay.call(Unit)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Requests the library to have download badges added.
|
|
||||||
*/
|
|
||||||
fun requestBadgesUpdate() {
|
|
||||||
badgeTriggerRelay.call(Unit)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
/**
|
|
||||||
* Requests the library to have buttons toggled.
|
|
||||||
*/
|
|
||||||
fun requestButtonsUpdate() {
|
|
||||||
buttonTriggerRelay.call(Unit)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Requests the library to have groups refreshed.
|
* Requests the library to have groups refreshed.
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user