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()
|
.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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user