Dependency injection for JellyfinApi

This commit is contained in:
Jarne Demeulemeester 2021-07-20 13:48:45 +02:00
parent f7ef7736ac
commit 96a9de3e0d
No known key found for this signature in database
GPG key ID: 60884A0C1EBA43E5
5 changed files with 32 additions and 14 deletions

View file

@ -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, "")
}
}

View file

@ -1,10 +1,8 @@
package dev.jdtech.jellyfin.di package dev.jdtech.jellyfin.di
import android.content.Context
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
import dagger.hilt.InstallIn import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent import dagger.hilt.components.SingletonComponent
import dev.jdtech.jellyfin.api.JellyfinApi import dev.jdtech.jellyfin.api.JellyfinApi
import dev.jdtech.jellyfin.repository.JellyfinRepository import dev.jdtech.jellyfin.repository.JellyfinRepository
@ -16,8 +14,9 @@ import javax.inject.Singleton
object RepositoryModule { object RepositoryModule {
@Singleton @Singleton
@Provides @Provides
fun provideJellyfinRepository(@ApplicationContext application: Context): JellyfinRepository { fun provideJellyfinRepository(
val jellyfinApi = JellyfinApi.getInstance(application, "") jellyfinApi: JellyfinApi
): JellyfinRepository {
return JellyfinRepositoryImpl(jellyfinApi) return JellyfinRepositoryImpl(jellyfinApi)
} }
} }

View file

@ -1,6 +1,5 @@
package dev.jdtech.jellyfin.viewmodels package dev.jdtech.jellyfin.viewmodels
import android.app.Application
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
@ -19,7 +18,7 @@ import javax.inject.Inject
class AddServerViewModel class AddServerViewModel
@Inject @Inject
constructor( constructor(
private val application: Application, private val jellyfinApi: JellyfinApi,
private val database: ServerDatabaseDao private val database: ServerDatabaseDao
) : ViewModel() { ) : ViewModel() {
@ -39,7 +38,10 @@ constructor(
_error.value = null _error.value = null
viewModelScope.launch { viewModelScope.launch {
val jellyfinApi = JellyfinApi.newInstance(application, baseUrl) jellyfinApi.apply {
api.baseUrl = baseUrl
api.accessToken = null
}
try { try {
val publicSystemInfo by jellyfinApi.systemApi.getPublicSystemInfo() val publicSystemInfo by jellyfinApi.systemApi.getPublicSystemInfo()
Timber.d("Remote server: ${publicSystemInfo.id}") Timber.d("Remote server: ${publicSystemInfo.id}")

View file

@ -1,6 +1,5 @@
package dev.jdtech.jellyfin.viewmodels package dev.jdtech.jellyfin.viewmodels
import android.app.Application
import androidx.lifecycle.* import androidx.lifecycle.*
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import dev.jdtech.jellyfin.api.JellyfinApi import dev.jdtech.jellyfin.api.JellyfinApi
@ -18,11 +17,9 @@ import javax.inject.Inject
class LoginViewModel class LoginViewModel
@Inject @Inject
constructor( constructor(
application: Application, private val jellyfinApi: JellyfinApi,
private val database: ServerDatabaseDao private val database: ServerDatabaseDao
) : ViewModel() { ) : ViewModel() {
// BaseUrl can be empty string because we want to get the existing instance.
private val jellyfinApi = JellyfinApi.getInstance(application, "")
private val _error = MutableLiveData<String>() private val _error = MutableLiveData<String>()
val error: LiveData<String> = _error val error: LiveData<String> = _error

View file

@ -1,6 +1,5 @@
package dev.jdtech.jellyfin.viewmodels package dev.jdtech.jellyfin.viewmodels
import android.app.Application
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
@ -19,7 +18,7 @@ import javax.inject.Inject
class ServerSelectViewModel class ServerSelectViewModel
@Inject @Inject
constructor( constructor(
private val application: Application, private val jellyfinApi: JellyfinApi,
private val database: ServerDatabaseDao, private val database: ServerDatabaseDao,
) : ViewModel() { ) : ViewModel() {
@ -43,7 +42,8 @@ constructor(
} }
fun connectToServer(server: Server) { fun connectToServer(server: Server) {
JellyfinApi.newInstance(application, server.address).apply { jellyfinApi.apply {
api.baseUrl = server.address
api.accessToken = server.accessToken api.accessToken = server.accessToken
userId = UUID.fromString(server.userId) userId = UUID.fromString(server.userId)
} }