From 74adb1c96c050ec578d96984a7c5554f5a49900a Mon Sep 17 00:00:00 2001 From: Niels van Velzen Date: Tue, 6 Sep 2022 13:59:05 +0200 Subject: [PATCH] Add SocketInstance to dependency injection Required for playback rewrite module to share the same WebSocket connection --- .../data/eventhandling/SocketHandler.kt | 46 ++++++++++--------- .../org/jellyfin/androidtv/di/AppModule.kt | 5 +- 2 files changed, 28 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/org/jellyfin/androidtv/data/eventhandling/SocketHandler.kt b/app/src/main/java/org/jellyfin/androidtv/data/eventhandling/SocketHandler.kt index 8ba0d32844..c5415032c0 100644 --- a/app/src/main/java/org/jellyfin/androidtv/data/eventhandling/SocketHandler.kt +++ b/app/src/main/java/org/jellyfin/androidtv/data/eventhandling/SocketHandler.kt @@ -33,12 +33,12 @@ import java.util.UUID class SocketHandler( private val context: Context, private val api: ApiClient, + private val socketInstance: SocketInstance, private val dataRefreshService: DataRefreshService, private val mediaManager: MediaManager, private val playbackControllerContainer: PlaybackControllerContainer, ) { private val coroutineScope = CoroutineScope(Dispatchers.IO) - private var socketInstance: SocketInstance = createInstance() val state = socketInstance.state suspend fun updateSession() { @@ -61,27 +61,29 @@ class SocketHandler( else socketInstance.updateCredentials() } - private fun createInstance() = api.ws().apply { - // Library - addListener { message -> onLibraryChanged(message.info) } - - // Media playback - addListener { message -> onPlayMessage(message) } - addListener { message -> onPlayStateMessage(message) } - - // General commands - addGeneralCommandsListener(setOf(GeneralCommandType.DISPLAY_CONTENT)) { message -> - val itemId by message - val itemUuid = itemId?.toUUIDOrNull() - - if (itemUuid != null) onDisplayContent(itemUuid) - } - addGeneralCommandsListener(setOf(GeneralCommandType.DISPLAY_MESSAGE, GeneralCommandType.SEND_STRING)) { message -> - val header by message - val text by message - val string by message - - onDisplayMessage(header, text ?: string) + init { + socketInstance.apply { + // Library + addListener { message -> onLibraryChanged(message.info) } + + // Media playback + addListener { message -> onPlayMessage(message) } + addListener { message -> onPlayStateMessage(message) } + + // General commands + addGeneralCommandsListener(setOf(GeneralCommandType.DISPLAY_CONTENT)) { message -> + val itemId by message + val itemUuid = itemId?.toUUIDOrNull() + + if (itemUuid != null) onDisplayContent(itemUuid) + } + addGeneralCommandsListener(setOf(GeneralCommandType.DISPLAY_MESSAGE, GeneralCommandType.SEND_STRING)) { message -> + val header by message + val text by message + val string by message + + onDisplayMessage(header, text ?: string) + } } } diff --git a/app/src/main/java/org/jellyfin/androidtv/di/AppModule.kt b/app/src/main/java/org/jellyfin/androidtv/di/AppModule.kt index c655671517..64ef849fd1 100644 --- a/app/src/main/java/org/jellyfin/androidtv/di/AppModule.kt +++ b/app/src/main/java/org/jellyfin/androidtv/di/AppModule.kt @@ -27,6 +27,7 @@ import org.jellyfin.apiclient.android import org.jellyfin.apiclient.logging.AndroidLogger import org.jellyfin.apiclient.serialization.GsonJsonSerializer import org.jellyfin.sdk.android.androidDevice +import org.jellyfin.sdk.api.client.ApiClient import org.jellyfin.sdk.createJellyfin import org.jellyfin.sdk.model.ClientInfo import org.jellyfin.sdk.model.DeviceInfo @@ -61,7 +62,9 @@ val appModule = module { get().createApi() } - single { SocketHandler(get(), get(), get(), get(), get()) } + single { get().ws() } + + single { SocketHandler(get(), get(), get(), get(), get(), get()) } // Old apiclient single { GsonJsonSerializer() }