Skip to content

Commit

Permalink
feat(MediaList): support split completed lists
Browse files Browse the repository at this point in the history
  • Loading branch information
axiel7 committed Sep 15, 2024
1 parent 3cae681 commit 6b01588
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ query UserListCollection(
type: $type,
sort: $sort,
chunk: $chunk,
perChunk: $perChunk,
forceSingleCompletedList: true
perChunk: $perChunk
) {
lists {
name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,31 +33,34 @@ fun String.asMediaListStatus() = when (this) {
"Dropped" -> MediaListStatus.DROPPED
"Paused" -> MediaListStatus.PAUSED
"Repeating", "Rewatching", "Rereading" -> MediaListStatus.REPEATING
else -> null
}

fun MediaListStatus?.listName(mediaType: MediaType) = when (this) {
MediaListStatus.CURRENT -> when (mediaType) {
MediaType.ANIME -> "Watching"
MediaType.MANGA -> "Reading"
MediaType.UNKNOWN__ -> null
else -> {
if (startsWith("Completed")) {
MediaListStatus.COMPLETED
} else {
null
}
}
}

MediaListStatus.PLANNING -> "Planning"
MediaListStatus.COMPLETED -> "Completed"
MediaListStatus.DROPPED -> "Dropped"
MediaListStatus.PAUSED -> "Paused"
MediaListStatus.REPEATING -> when (mediaType) {
MediaType.ANIME -> "Rewatching"
MediaType.MANGA -> "Rereading"
MediaType.UNKNOWN__ -> null
@Composable
fun String.localizedListStatus() = when (this) {
"Watching" -> stringResource(R.string.watching)
"Reading" -> stringResource(R.string.reading)
"Current" -> stringResource(R.string.current)
"Planning" -> stringResource(R.string.planning)
"Completed" -> stringResource(R.string.completed)
"Dropped" -> stringResource(R.string.dropped)
"Paused" -> stringResource(R.string.paused)
"Repeating", "Rewatching", "Rereading" -> stringResource(R.string.repeating)
else -> {
if (startsWith("Completed")) {
stringResource(R.string.completed) + replaceFirst("Completed", "")
} else {
this
}
}
else -> null
}

val mediaListStatusNames =
arrayOf("Watching", "Reading", "Planning", "Completed", "Dropped", "Paused", "Rewatching", "Rereading")

/**
* Returns if this is a status considered as active.
* That means the user is consuming or will be consuming the series.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package com.axiel7.anihyou.ui.screens.usermedialist
import androidx.compose.runtime.Stable
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.snapshots.SnapshotStateList
import com.axiel7.anihyou.data.model.media.mediaListStatusNames
import com.axiel7.anihyou.fragment.CommonMediaListEntry
import com.axiel7.anihyou.type.MediaListSort
import com.axiel7.anihyou.type.MediaListStatus
Expand Down Expand Up @@ -44,13 +43,4 @@ data class UserMediaListUiState(
override fun setLoading(value: Boolean) = copy(isLoading = value)
override fun setPage(value: Int) = copy(page = value)
override fun setHasNextPage(value: Boolean) = copy(hasNextPage = value)

fun getEntriesFromListName(name: String?) = if (name != null) {
lists[name].orEmpty()
} else {
lists.keys
.filter { mediaListStatusNames.contains(it) } // filter custom list entries
.mapNotNull { lists[it] }
.flatten()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -97,12 +97,17 @@ class UserMediaListViewModel @AssistedInject constructor(
viewModelScope.launch {
mutableUiState.update {
it.entries.clear()
it.entries.addAll(it.getEntriesFromListName(listName))
if (listName != null) {
it.entries.addAll(it.lists[listName].orEmpty())
} else {
it.entries.addAll(it.lists.values.flatten())
}
it.copy(
selectedListName = listName,
status = listName?.asMediaListStatus()
)
}

if (mediaType == MediaType.ANIME) {
listPreferencesRepository.setAnimeListSelected(listName)
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,9 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.Dp
import com.axiel7.anihyou.R
import com.axiel7.anihyou.data.model.media.asMediaListStatus
import com.axiel7.anihyou.data.model.media.icon
import com.axiel7.anihyou.data.model.media.listName
import com.axiel7.anihyou.data.model.media.localized
import com.axiel7.anihyou.type.MediaListStatus
import com.axiel7.anihyou.data.model.media.localizedListStatus
import com.axiel7.anihyou.ui.composables.sheet.SelectionSheet
import com.axiel7.anihyou.ui.composables.sheet.SelectionSheetItem
import com.axiel7.anihyou.ui.screens.usermedialist.UserMediaListUiState
Expand Down Expand Up @@ -38,24 +37,11 @@ fun ListSelectSheet(
onDismiss()
}
)
MediaListStatus.knownEntries.forEach { status ->
val name = remember(status) { status.listName(uiState.mediaType) }
uiState.lists.keys.forEach { name ->
val count = remember(name) { uiState.lists[name]?.size ?: 0 }
SelectionSheetItem(
name = status.localized(uiState.mediaType),
icon = status.icon(),
count = count,
isSelected = uiState.selectedListName == name,
onClick = {
onListChanged(name)
onDismiss()
}
)
}
uiState.customLists.forEach { name ->
val count = remember(name) { uiState.lists[name]?.size ?: 0 }
SelectionSheetItem(
name = name,
name = name.localizedListStatus(),
icon = name.asMediaListStatus()?.icon(),
count = count,
isSelected = uiState.selectedListName == name,
onClick = {
Expand Down

0 comments on commit 6b01588

Please sign in to comment.