From 96a9de3e0dca6e26e8ee33ba3e8da5fd8ac1f32a Mon Sep 17 00:00:00 2001 From: Jarne Demeulemeester Date: Tue, 20 Jul 2021 13:48:45 +0200 Subject: [PATCH] Dependency injection for JellyfinApi --- .../java/dev/jdtech/jellyfin/di/ApiModule.kt | 20 +++++++++++++++++++ .../jdtech/jellyfin/di/RepositoryModule.kt | 7 +++---- .../jellyfin/viewmodels/AddServerViewModel.kt | 8 +++++--- .../jellyfin/viewmodels/LoginViewModel.kt | 5 +---- .../viewmodels/ServerSelectViewModel.kt | 6 +++--- 5 files changed, 32 insertions(+), 14 deletions(-) create mode 100644 app/src/main/java/dev/jdtech/jellyfin/di/ApiModule.kt diff --git a/app/src/main/java/dev/jdtech/jellyfin/di/ApiModule.kt b/app/src/main/java/dev/jdtech/jellyfin/di/ApiModule.kt new file mode 100644 index 00000000..944b0fe6 --- /dev/null +++ b/app/src/main/java/dev/jdtech/jellyfin/di/ApiModule.kt @@ -0,0 +1,20 @@ +package dev.jdtech.jellyfin.di + +import android.content.Context +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent +import dev.jdtech.jellyfin.api.JellyfinApi +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object ApiModule { + @Singleton + @Provides + fun provideJellyfinApi(@ApplicationContext application: Context): JellyfinApi { + return JellyfinApi.getInstance(application, "") + } +} \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/di/RepositoryModule.kt b/app/src/main/java/dev/jdtech/jellyfin/di/RepositoryModule.kt index bc7c2585..e3865bb7 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/di/RepositoryModule.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/di/RepositoryModule.kt @@ -1,10 +1,8 @@ package dev.jdtech.jellyfin.di -import android.content.Context import dagger.Module import dagger.Provides import dagger.hilt.InstallIn -import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import dev.jdtech.jellyfin.api.JellyfinApi import dev.jdtech.jellyfin.repository.JellyfinRepository @@ -16,8 +14,9 @@ import javax.inject.Singleton object RepositoryModule { @Singleton @Provides - fun provideJellyfinRepository(@ApplicationContext application: Context): JellyfinRepository { - val jellyfinApi = JellyfinApi.getInstance(application, "") + fun provideJellyfinRepository( + jellyfinApi: JellyfinApi + ): JellyfinRepository { return JellyfinRepositoryImpl(jellyfinApi) } } \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt index abc5adff..829d6dc5 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt @@ -1,6 +1,5 @@ package dev.jdtech.jellyfin.viewmodels -import android.app.Application import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -19,7 +18,7 @@ import javax.inject.Inject class AddServerViewModel @Inject constructor( - private val application: Application, + private val jellyfinApi: JellyfinApi, private val database: ServerDatabaseDao ) : ViewModel() { @@ -39,7 +38,10 @@ constructor( _error.value = null viewModelScope.launch { - val jellyfinApi = JellyfinApi.newInstance(application, baseUrl) + jellyfinApi.apply { + api.baseUrl = baseUrl + api.accessToken = null + } try { val publicSystemInfo by jellyfinApi.systemApi.getPublicSystemInfo() Timber.d("Remote server: ${publicSystemInfo.id}") diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LoginViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LoginViewModel.kt index 19065b41..47fcf7a1 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LoginViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LoginViewModel.kt @@ -1,6 +1,5 @@ package dev.jdtech.jellyfin.viewmodels -import android.app.Application import androidx.lifecycle.* import dagger.hilt.android.lifecycle.HiltViewModel import dev.jdtech.jellyfin.api.JellyfinApi @@ -18,11 +17,9 @@ import javax.inject.Inject class LoginViewModel @Inject constructor( - application: Application, + private val jellyfinApi: JellyfinApi, private val database: ServerDatabaseDao ) : ViewModel() { - // BaseUrl can be empty string because we want to get the existing instance. - private val jellyfinApi = JellyfinApi.getInstance(application, "") private val _error = MutableLiveData() val error: LiveData = _error diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerSelectViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerSelectViewModel.kt index cf938f48..268646a0 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerSelectViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerSelectViewModel.kt @@ -1,6 +1,5 @@ package dev.jdtech.jellyfin.viewmodels -import android.app.Application import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -19,7 +18,7 @@ import javax.inject.Inject class ServerSelectViewModel @Inject constructor( - private val application: Application, + private val jellyfinApi: JellyfinApi, private val database: ServerDatabaseDao, ) : ViewModel() { @@ -43,7 +42,8 @@ constructor( } fun connectToServer(server: Server) { - JellyfinApi.newInstance(application, server.address).apply { + jellyfinApi.apply { + api.baseUrl = server.address api.accessToken = server.accessToken userId = UUID.fromString(server.userId) }