feat: Add Filter Data class and filter method

This commit is contained in:
Lucàs
2025-01-13 18:15:07 +01:00
parent ffb8234e19
commit 5f027ce683
3 changed files with 34 additions and 2 deletions
@@ -0,0 +1,23 @@
package fr.univpau.queezer.data
data class Filter(
val date: DateFilter = DateFilter.DESCENDING,
val mode : List<GameMode> = listOf(GameMode.TITLE, GameMode.ARTIST, GameMode.ALL),
val nbTitle : Int? = null,
)
fun filterGames(filter: Filter, games: List<Game>): List<Game> {
return games.filter { game ->
filter.mode.contains(game.settings.gameMode) && (filter.nbTitle == null || game.playlist.tracks.size == filter.nbTitle)
}.sortedBy { game ->
when (filter.date) {
DateFilter.ASCENDING -> game.date.time
DateFilter.DESCENDING -> -game.date.time
}
}
}
enum class DateFilter {
ASCENDING,
DESCENDING
}
@@ -18,7 +18,7 @@ fun GameCardItemList(games: List<Game>) {
.fillMaxWidth() .fillMaxWidth()
.padding(horizontal = 16.dp) .padding(horizontal = 16.dp)
.verticalScroll(rememberScrollState()), .verticalScroll(rememberScrollState()),
verticalArrangement = Arrangement.spacedBy(16.dp), verticalArrangement = Arrangement.spacedBy(16.dp),
) { ) {
for (game in games) GameCardItem(game) for (game in games) GameCardItem(game)
@@ -1,5 +1,6 @@
package fr.univpau.queezer.view.screens package fr.univpau.queezer.view.screens
import android.util.Log
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
@@ -18,6 +19,8 @@ import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.livedata.observeAsState import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
@@ -26,7 +29,9 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.navigation.NavHostController import androidx.navigation.NavHostController
import fr.univpau.queezer.R import fr.univpau.queezer.R
import fr.univpau.queezer.data.Filter
import fr.univpau.queezer.data.Game import fr.univpau.queezer.data.Game
import fr.univpau.queezer.data.filterGames
import fr.univpau.queezer.view.components.GameCardItemList import fr.univpau.queezer.view.components.GameCardItemList
import fr.univpau.queezer.viewmodel.GameViewModel import fr.univpau.queezer.viewmodel.GameViewModel
import kotlin.math.max import kotlin.math.max
@@ -35,11 +40,15 @@ import kotlin.math.max
@Composable @Composable
fun ScoreScreen(navController: NavHostController, gameViewModel: GameViewModel) { fun ScoreScreen(navController: NavHostController, gameViewModel: GameViewModel) {
val context = LocalContext.current val context = LocalContext.current
val filter = remember { mutableStateOf(Filter()) }
val games: List<Game> = gameViewModel.games.observeAsState().value ?: emptyList() val games: List<Game> = gameViewModel.games.observeAsState().value ?: emptyList()
val nbGames = games.size; val nbGames = games.size;
val averageSuccessRate = games.sumOf { it.score }.div(max(games.size, 1)) val averageSuccessRate = games.sumOf { it.score }.div(max(games.size, 1))
val filteredGames = filterGames(filter.value, games)
Log.i("ScoreScreen", "filteredGames: $filteredGames")
Scaffold( Scaffold(
topBar = { topBar = {
CenterAlignedTopAppBar( CenterAlignedTopAppBar(
@@ -91,7 +100,7 @@ fun ScoreScreen(navController: NavHostController, gameViewModel: GameViewModel)
// Todo add filters // Todo add filters
GameCardItemList(games) GameCardItemList(filteredGames)
} }
} }