From 3556b740654099f3b8d54b1f4f2967625c6fe943 Mon Sep 17 00:00:00 2001 From: Eneko Nieto Date: Sat, 30 Apr 2022 19:54:09 +0200 Subject: [PATCH] getSeatsLeft() re-implemented --- build.gradle.kts | 4 ++-- .../eu/fosil/okupamicoche/cli/CommandParser.kt | 5 ++++- .../fosil/okupamicoche/model/TravelRepository.kt | 14 +++++++++----- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index d7f79e8..ece34da 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -19,7 +19,7 @@ dependencies { implementation("io.ktor:ktor-client-cio:$ktorVersion") // Trixnity - implementation("net.folivo:trixnity-applicationservice:2.0.0-RC2") + implementation("net.folivo:trixnity-applicationservice:2.0.0-RC5") // Exposed val exposedVersion: String by project @@ -30,7 +30,7 @@ dependencies { } // H2 database - implementation("com.h2database:h2:2.1.210") + implementation("com.h2database:h2:2.1.212") // Jackson (YAML parser) val jacksonVersion: String by project diff --git a/src/main/kotlin/eu/fosil/okupamicoche/cli/CommandParser.kt b/src/main/kotlin/eu/fosil/okupamicoche/cli/CommandParser.kt index c1cbd5b..5ce6934 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/cli/CommandParser.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/cli/CommandParser.kt @@ -44,6 +44,7 @@ object CommandParser { "join" -> Usecase.joinTravel(room, user, args) "leave" -> Usecase.leaveTravel(room, user) "cancel" -> Usecase.cancelTravel(room, user) + // TODO help } } catch (e: Exception) { logger.error { "Exception captured: $e" } @@ -61,6 +62,8 @@ object CommandParser { roomId: RoomId, args: List ) { + // TODO check arguments and show help on error + val date = args[2] val time = args[3] val formatter = DateTimeFormatter.ofPattern("yyyy/M/d H:mm").withZone(ZoneId.systemDefault()) @@ -70,7 +73,7 @@ object CommandParser { from = args[0], to = args[1], time = unixTime, - seats = args[4].toIntOrNull() ?: 0, + seats = args[4].toInt(), description = args.subList(5, args.size).joinToString(" ") ) diff --git a/src/main/kotlin/eu/fosil/okupamicoche/model/TravelRepository.kt b/src/main/kotlin/eu/fosil/okupamicoche/model/TravelRepository.kt index cad421b..19ede90 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/model/TravelRepository.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/model/TravelRepository.kt @@ -54,17 +54,21 @@ object TravelRepository { (content is TravelMembershipStateEventContent) && (content.membership == Membership.JOIN.value) }?.map { UserId("@${it.stateKey}") } + private suspend fun getUsedSeats(roomId: RoomId) = MatrixApiClient.client.rooms.getState(roomId).getOrNull()?.map { + it.content + }?.filterIsInstance(TravelMembershipStateEventContent::class.java)?.filter { + it.membership == Membership.JOIN.value + }?.sumOf { it.seats } ?: 0 + suspend fun getSeatsLeft(roomId: RoomId): Int? { // Get travel total seats (not counting driver) val roomState = MatrixApiClient.client.rooms.getStateEvent(roomId).getOrNull() ?: return null - // TODO sum seats per traveler + // Get used seats + val usedSeats = getUsedSeats(roomId) - // Get travelers count - val travelersCount = getTravelers(roomId)?.size ?: 0 - - return roomState.seats - travelersCount + return roomState.seats - usedSeats } }