diff --git a/build.gradle.kts b/build.gradle.kts index 2f83557..d7f79e8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,7 @@ plugins { application - kotlin("jvm") version "1.6.10" - kotlin("plugin.serialization") version "1.6.10" + kotlin("jvm") version "1.6.20" + kotlin("plugin.serialization") version "1.6.20" } group = "eu.fosil" @@ -19,7 +19,7 @@ dependencies { implementation("io.ktor:ktor-client-cio:$ktorVersion") // Trixnity - implementation("net.folivo:trixnity-appservice:1.2.0-RC1") + implementation("net.folivo:trixnity-applicationservice:2.0.0-RC2") // Exposed val exposedVersion: String by project diff --git a/gradle.properties b/gradle.properties index f94bfb4..9094430 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,4 @@ kotlin.code.style=official - exposedVersion=0.37.3 -ktorVersion=2.0.0-beta-1 -jacksonVersion=2.13.1 \ No newline at end of file +ktorVersion=2.0.0 +jacksonVersion=2.13.2 diff --git a/src/main/kotlin/eu/fosil/okupamicoche/Main.kt b/src/main/kotlin/eu/fosil/okupamicoche/Main.kt index 1ca2f71..af8f124 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/Main.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/Main.kt @@ -7,11 +7,7 @@ import eu.fosil.okupamicoche.matrix.event.TravelEventContentSerializerMappings import eu.fosil.okupamicoche.matrix.matrixApiClient import io.ktor.server.engine.* import io.ktor.server.netty.* -import mu.KotlinLogging -import net.folivo.trixnity.appservice.MatrixAppserviceProperties -import net.folivo.trixnity.appservice.rest.matrixAppserviceModule - -private val logger = KotlinLogging.logger {} +import net.folivo.trixnity.applicationserviceapi.server.matrixApplicationServiceApiServer suspend fun main() { @@ -25,9 +21,9 @@ suspend fun main() { // Start Ktor server embeddedServer(Netty, port = 8080, host = "0.0.0.0") { - matrixAppserviceModule( - properties = MatrixAppserviceProperties(config.tokens.homeserver), - appserviceService = createAppService(matrixApiClient), + matrixApplicationServiceApiServer( + hsToken = config.tokens.homeserver, + applicationServiceApiServerHandler = createAppService(matrixApiClient), customMappings = TravelEventContentSerializerMappings ) }.start(wait = true) diff --git a/src/main/kotlin/eu/fosil/okupamicoche/matrix/createAppService.kt b/src/main/kotlin/eu/fosil/okupamicoche/matrix/createAppService.kt index 043e224..8998fb9 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/matrix/createAppService.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/matrix/createAppService.kt @@ -7,8 +7,8 @@ import eu.fosil.okupamicoche.matrix.services.EventTnxService import eu.fosil.okupamicoche.matrix.services.RoomService import eu.fosil.okupamicoche.matrix.services.UserService import mu.KotlinLogging -import net.folivo.trixnity.appservice.AppserviceService -import net.folivo.trixnity.appservice.DefaultAppserviceService +import net.folivo.trixnity.applicationserviceapi.server.ApplicationServiceApiServerHandler +import net.folivo.trixnity.appservice.DefaultApplicationServiceApiServerHandler import net.folivo.trixnity.clientserverapi.client.MatrixClientServerApiClient import net.folivo.trixnity.core.model.events.Event import net.folivo.trixnity.core.model.events.m.room.CreateEventContent @@ -21,14 +21,14 @@ val db = Database.connect("jdbc:h2:./okupamicoche", driver = "org.h2.Driver") private val logger = KotlinLogging.logger {} -fun createAppService(matrixClientServerApiClient: MatrixClientServerApiClient): AppserviceService { +fun createAppService(matrixClientServerApiClient: MatrixClientServerApiClient): ApplicationServiceApiServerHandler { transaction(db) { SchemaUtils.create(TravelsTable) logger.info { "Travels table created" } } - return DefaultAppserviceService( + return DefaultApplicationServiceApiServerHandler( EventTnxService(), UserService(matrixClientServerApiClient), RoomService(matrixClientServerApiClient) @@ -36,16 +36,16 @@ fun createAppService(matrixClientServerApiClient: MatrixClientServerApiClient): subscribeAllEvents { logger.debug("All events: $it") } - subscribe { + subscribe(CreateEventContent::class) { if (it is Event.RoomEvent) { logger.info("${it.content.creator} created room ${it.roomId}") } } - subscribe { event -> + subscribe(TravelCreatedMessageEventContent::class) { event -> logger.info("NEW TRAVEL CREATED EVENT!!") logger.info("$event") } - subscribe { event -> + subscribe(RoomMessageEventContent.TextMessageEventContent::class) { event -> require(event is Event.MessageEvent) val roomId = event.roomId val body = event.content.body diff --git a/src/main/kotlin/eu/fosil/okupamicoche/matrix/matrixApiClient.kt b/src/main/kotlin/eu/fosil/okupamicoche/matrix/matrixApiClient.kt index 73a87bf..610d033 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/matrix/matrixApiClient.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/matrix/matrixApiClient.kt @@ -3,11 +3,9 @@ package eu.fosil.okupamicoche.matrix import eu.fosil.okupamicoche.config.ConfigReader import eu.fosil.okupamicoche.matrix.event.TravelEventContentSerializerMappings import io.ktor.http.* -import kotlinx.coroutines.flow.filter -import kotlinx.coroutines.flow.firstOrNull import mu.KotlinLogging import net.folivo.trixnity.clientserverapi.client.MatrixClientServerApiClient -import net.folivo.trixnity.clientserverapi.model.rooms.Visibility +import net.folivo.trixnity.clientserverapi.model.rooms.DirectoryVisibility import net.folivo.trixnity.core.model.RoomAliasId import net.folivo.trixnity.core.model.RoomId import net.folivo.trixnity.core.model.UserId @@ -31,7 +29,7 @@ object MatrixApiClient { suspend fun init() { requireNotNull(matrixApiClient) - appServiceUserId = matrixApiClient.users.whoAmI().getOrThrow().userId + appServiceUserId = matrixApiClient.authentication.whoAmI().getOrThrow().userId mainRoomId = createMainRoomIfNeeded() } @@ -46,7 +44,7 @@ object MatrixApiClient { if (roomAliasRes == null) { logger.info("Creating $roomMainAlias public room") mainRoomId = matrixApiClient.rooms.createRoom( - visibility = Visibility.PUBLIC, + visibility = DirectoryVisibility.PUBLIC, roomAliasId = RoomAliasId(roomMainAlias) ).getOrNull() } else { @@ -60,8 +58,8 @@ object MatrixApiClient { matrixApiClient.rooms.joinRoom(mainRoomId) } - val roomStateRes = matrixApiClient.rooms.getState(mainRoomId).getOrNull() - roomStateRes?.collect { stateEvent -> + val roomStateEvents = matrixApiClient.rooms.getState(mainRoomId).getOrNull() + roomStateEvents?.forEach { stateEvent -> logger.debug("stateEvent=$stateEvent") } } diff --git a/src/main/kotlin/eu/fosil/okupamicoche/matrix/services/EventTnxService.kt b/src/main/kotlin/eu/fosil/okupamicoche/matrix/services/EventTnxService.kt index 13ca502..b83b22f 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/matrix/services/EventTnxService.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/matrix/services/EventTnxService.kt @@ -1,18 +1,18 @@ package eu.fosil.okupamicoche.matrix.services import mu.KotlinLogging -import net.folivo.trixnity.appservice.event.AppserviceEventTnxService +import net.folivo.trixnity.appservice.ApplicationServiceEventTxnService private val logger = KotlinLogging.logger {} -class EventTnxService : AppserviceEventTnxService { - override suspend fun eventTnxProcessingState(tnxId: String): AppserviceEventTnxService.EventTnxProcessingState { - logger.debug("eventTnxProcessingState tnxId=$tnxId") - return AppserviceEventTnxService.EventTnxProcessingState.NOT_PROCESSED +class EventTnxService : ApplicationServiceEventTxnService { + override suspend fun eventTnxProcessingState(txnId: String): ApplicationServiceEventTxnService.EventTnxProcessingState { + logger.debug("eventTnxProcessingState tnxId=$txnId") + return ApplicationServiceEventTxnService.EventTnxProcessingState.NOT_PROCESSED // return AppserviceEventTnxService.EventTnxProcessingState.PROCESSED } - override suspend fun onEventTnxProcessed(tnxId: String) { - logger.debug("onEventTnxProcessed tnxId=$tnxId") + override suspend fun onEventTnxProcessed(txnId: String) { + logger.debug("onEventTnxProcessed tnxId=$txnId") } -} \ No newline at end of file +} diff --git a/src/main/kotlin/eu/fosil/okupamicoche/matrix/services/RoomService.kt b/src/main/kotlin/eu/fosil/okupamicoche/matrix/services/RoomService.kt index b104ef4..93d0bbf 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/matrix/services/RoomService.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/matrix/services/RoomService.kt @@ -1,29 +1,30 @@ package eu.fosil.okupamicoche.matrix.services import mu.KotlinLogging -import net.folivo.trixnity.appservice.room.AppserviceRoomService -import net.folivo.trixnity.appservice.room.CreateRoomParameter +import net.folivo.trixnity.appservice.ApplicationServiceRoomService +import net.folivo.trixnity.appservice.CreateRoomParameter import net.folivo.trixnity.clientserverapi.client.MatrixClientServerApiClient -import net.folivo.trixnity.clientserverapi.model.rooms.Visibility +import net.folivo.trixnity.clientserverapi.model.rooms.DirectoryVisibility import net.folivo.trixnity.core.model.RoomAliasId import net.folivo.trixnity.core.model.RoomId private val logger = KotlinLogging.logger {} -class RoomService(override val matrixClientServerApiClient: MatrixClientServerApiClient) : AppserviceRoomService { +class RoomService(override val matrixClientServerApiClient: MatrixClientServerApiClient) : + ApplicationServiceRoomService { override suspend fun getCreateRoomParameter(roomAlias: RoomAliasId): CreateRoomParameter { logger.info("getCreateRoomParameter") - return CreateRoomParameter(Visibility.PUBLIC) + return CreateRoomParameter(DirectoryVisibility.PUBLIC) } override suspend fun onCreatedRoom(roomAlias: RoomAliasId, roomId: RoomId) { logger.info("onCreatedRoom") } - override suspend fun roomExistingState(roomAlias: RoomAliasId): AppserviceRoomService.RoomExistingState { + override suspend fun roomExistingState(roomAlias: RoomAliasId): ApplicationServiceRoomService.RoomExistingState { logger.info("roomExistingState") - return AppserviceRoomService.RoomExistingState.DOES_NOT_EXISTS + return ApplicationServiceRoomService.RoomExistingState.DOES_NOT_EXISTS } -} \ No newline at end of file +} diff --git a/src/main/kotlin/eu/fosil/okupamicoche/matrix/services/UserService.kt b/src/main/kotlin/eu/fosil/okupamicoche/matrix/services/UserService.kt index 814f7e3..e98f854 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/matrix/services/UserService.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/matrix/services/UserService.kt @@ -1,11 +1,12 @@ package eu.fosil.okupamicoche.matrix.services -import net.folivo.trixnity.appservice.user.AppserviceUserService -import net.folivo.trixnity.appservice.user.RegisterUserParameter +import net.folivo.trixnity.appservice.ApplicationServiceUserService +import net.folivo.trixnity.appservice.RegisterUserParameter import net.folivo.trixnity.clientserverapi.client.MatrixClientServerApiClient import net.folivo.trixnity.core.model.UserId -class UserService(override val matrixClientServerApiClient: MatrixClientServerApiClient) : AppserviceUserService { +class UserService(override val matrixClientServerApiClient: MatrixClientServerApiClient) : + ApplicationServiceUserService { override suspend fun getRegisterUserParameter(userId: UserId): RegisterUserParameter { println("getRegisterUserParameter") @@ -16,9 +17,9 @@ class UserService(override val matrixClientServerApiClient: MatrixClientServerAp println("onRegisteredUser") } - override suspend fun userExistingState(userId: UserId): AppserviceUserService.UserExistingState { + override suspend fun userExistingState(userId: UserId): ApplicationServiceUserService.UserExistingState { println("userExistingState") - return AppserviceUserService.UserExistingState.CAN_BE_CREATED + return ApplicationServiceUserService.UserExistingState.CAN_BE_CREATED } -} \ No newline at end of file +} diff --git a/src/main/kotlin/eu/fosil/okupamicoche/usecase/travel/createTravel.kt b/src/main/kotlin/eu/fosil/okupamicoche/usecase/travel/createTravel.kt index 20b6f2b..23e71a4 100644 --- a/src/main/kotlin/eu/fosil/okupamicoche/usecase/travel/createTravel.kt +++ b/src/main/kotlin/eu/fosil/okupamicoche/usecase/travel/createTravel.kt @@ -12,7 +12,7 @@ import eu.fosil.okupamicoche.matrix.matrixApiClient import eu.fosil.okupamicoche.model.Travel import eu.fosil.okupamicoche.model.TravelOptions import mu.KotlinLogging -import net.folivo.trixnity.clientserverapi.model.rooms.Visibility +import net.folivo.trixnity.clientserverapi.model.rooms.DirectoryVisibility import net.folivo.trixnity.core.model.RoomAliasId import net.folivo.trixnity.core.model.RoomId import net.folivo.trixnity.core.model.UserId @@ -69,7 +69,7 @@ private suspend fun createRoom(travelOptions: TravelOptions, driver: UserId): Ro ) return matrixApiClient.rooms.createRoom( - visibility = Visibility.PUBLIC, + visibility = DirectoryVisibility.PUBLIC, roomAliasId = newRoomAliasAndName.aliasId, name = newRoomAliasAndName.name, topic = travelOptions.description,