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
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)
}
}

View file

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

View file

@ -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<String>()
val error: LiveData<String> = _error

View file

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