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
}
@@ -1,5 +1,6 @@
package fr.univpau.queezer.view.screens
import android.util.Log
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@@ -18,6 +19,8 @@ import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
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.Modifier
import androidx.compose.ui.platform.LocalContext
@@ -26,7 +29,9 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.navigation.NavHostController
import fr.univpau.queezer.R
import fr.univpau.queezer.data.Filter
import fr.univpau.queezer.data.Game
import fr.univpau.queezer.data.filterGames
import fr.univpau.queezer.view.components.GameCardItemList
import fr.univpau.queezer.viewmodel.GameViewModel
import kotlin.math.max
@@ -35,11 +40,15 @@ import kotlin.math.max
@Composable
fun ScoreScreen(navController: NavHostController, gameViewModel: GameViewModel) {
val context = LocalContext.current
val filter = remember { mutableStateOf(Filter()) }
val games: List<Game> = gameViewModel.games.observeAsState().value ?: emptyList()
val nbGames = games.size;
val averageSuccessRate = games.sumOf { it.score }.div(max(games.size, 1))
val filteredGames = filterGames(filter.value, games)
Log.i("ScoreScreen", "filteredGames: $filteredGames")
Scaffold(
topBar = {
CenterAlignedTopAppBar(
@@ -91,7 +100,7 @@ fun ScoreScreen(navController: NavHostController, gameViewModel: GameViewModel)
// Todo add filters
GameCardItemList(games)
GameCardItemList(filteredGames)
}
}