mirror of
https://github.com/LucasVbr/Queezer.git
synced 2026-05-13 17:11:55 +00:00
feat: Add Filter Data class and filter method
This commit is contained in:
@@ -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()
|
||||
.padding(horizontal = 16.dp)
|
||||
.verticalScroll(rememberScrollState()),
|
||||
|
||||
|
||||
verticalArrangement = Arrangement.spacedBy(16.dp),
|
||||
) {
|
||||
for (game in games) GameCardItem(game)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user