feat: add event filtering logic, TypeFilter enum, AuthSettings, and OAuthClient interface
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
package ch.parano.myice.auth
|
||||
|
||||
import ch.parano.myice.network.AuthTokenHolder
|
||||
import com.russhwolf.settings.Settings
|
||||
|
||||
class AuthSettings(private val settings: Settings) {
|
||||
|
||||
companion object {
|
||||
private const val TOKEN_KEY = "access_token"
|
||||
private const val ACCOUNT_KEY = "selected_account"
|
||||
}
|
||||
|
||||
fun getStoredToken(): String? = settings.getStringOrNull(TOKEN_KEY)
|
||||
|
||||
fun setToken(token: String?) {
|
||||
if (token != null) {
|
||||
settings.putString(TOKEN_KEY, token)
|
||||
} else {
|
||||
settings.remove(TOKEN_KEY)
|
||||
}
|
||||
AuthTokenHolder.token = token
|
||||
}
|
||||
|
||||
fun getStoredAccount(): String? = settings.getStringOrNull(ACCOUNT_KEY)
|
||||
|
||||
fun setAccount(account: String) {
|
||||
settings.putString(ACCOUNT_KEY, account)
|
||||
}
|
||||
|
||||
fun clear() {
|
||||
settings.remove(TOKEN_KEY)
|
||||
settings.remove(ACCOUNT_KEY)
|
||||
AuthTokenHolder.token = null
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package ch.parano.myice.auth
|
||||
|
||||
interface OAuthClient {
|
||||
suspend fun authenticate(loginUrl: String): String?
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package ch.parano.myice.filter
|
||||
|
||||
import ch.parano.myice.models.Event
|
||||
|
||||
fun extractSubgroup(name: String): String {
|
||||
val parts = name.split(" - ")
|
||||
return if (parts.size > 1) parts.dropLast(1).joinToString(" - ") else name
|
||||
}
|
||||
|
||||
fun filterEvents(
|
||||
events: List<Event>,
|
||||
agegroup: String?,
|
||||
subgroup: String?,
|
||||
typeFilter: TypeFilter,
|
||||
): List<Event> = events.filter { event ->
|
||||
val typeMatches = when (typeFilter) {
|
||||
TypeFilter.ALL -> true
|
||||
TypeFilter.GAMES -> event.eventType == "Jeu"
|
||||
TypeFilter.PRACTICES -> event.eventType != "Jeu"
|
||||
}
|
||||
if (!typeMatches) return@filter false
|
||||
|
||||
if (agegroup != null && event.agegroup != agegroup) return@filter false
|
||||
|
||||
if (subgroup != null) {
|
||||
val eventSubgroup = extractSubgroup(event.name)
|
||||
if (eventSubgroup != subgroup) return@filter false
|
||||
}
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
fun List<Event>.distinctAgegroups(): List<String> =
|
||||
map { it.agegroup }.toSet().sorted()
|
||||
|
||||
fun List<Event>.distinctSubgroups(): List<String> =
|
||||
map { extractSubgroup(it.name) }.toSet().sorted()
|
||||
@@ -0,0 +1,9 @@
|
||||
package ch.parano.myice.filter
|
||||
|
||||
enum class TypeFilter {
|
||||
ALL, GAMES, PRACTICES;
|
||||
|
||||
companion object {
|
||||
val DEFAULT = GAMES
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user