Add dependency injection to LibraryViewModel
This commit is contained in:
parent
e79731f21b
commit
beb7c6f838
5 changed files with 21 additions and 40 deletions
|
@ -12,13 +12,13 @@ import dagger.hilt.android.AndroidEntryPoint
|
|||
import dev.jdtech.jellyfin.viewmodels.LibraryViewModel
|
||||
import dev.jdtech.jellyfin.adapters.ViewItemListAdapter
|
||||
import dev.jdtech.jellyfin.databinding.FragmentLibraryBinding
|
||||
import dev.jdtech.jellyfin.viewmodels.LibraryViewModelFactory
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||
|
||||
@AndroidEntryPoint
|
||||
class LibraryFragment : Fragment() {
|
||||
|
||||
private lateinit var binding: FragmentLibraryBinding
|
||||
private val viewModel: LibraryViewModel by viewModels()
|
||||
|
||||
private val args: LibraryFragmentArgs by navArgs()
|
||||
|
||||
|
@ -35,14 +35,12 @@ class LibraryFragment : Fragment() {
|
|||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
val viewModelFactory =
|
||||
LibraryViewModelFactory(requireNotNull(this.activity).application, args.libraryId)
|
||||
val viewModel: LibraryViewModel by viewModels { viewModelFactory }
|
||||
binding.viewModel = viewModel
|
||||
binding.itemsRecyclerView.adapter =
|
||||
ViewItemListAdapter(ViewItemListAdapter.OnClickListener { item ->
|
||||
navigateToMediaInfoFragment(item)
|
||||
})
|
||||
viewModel.loadItems(args.libraryId)
|
||||
}
|
||||
|
||||
private fun navigateToMediaInfoFragment(item: BaseItemDto) {
|
||||
|
|
|
@ -5,4 +5,6 @@ import java.util.*
|
|||
|
||||
interface JellyfinRepository {
|
||||
suspend fun getItem(itemId: UUID): BaseItemDto
|
||||
|
||||
suspend fun getItems(parentId: UUID): List<BaseItemDto>
|
||||
}
|
|
@ -14,4 +14,12 @@ class JellyfinRepositoryImpl(private val jellyfinApi: JellyfinApi) : JellyfinRep
|
|||
}
|
||||
return item
|
||||
}
|
||||
|
||||
override suspend fun getItems(parentId: UUID): List<BaseItemDto> {
|
||||
val items: List<BaseItemDto>
|
||||
withContext(Dispatchers.IO) {
|
||||
items = jellyfinApi.itemsApi.getItems(jellyfinApi.userId!!, parentId = parentId).content.items ?: listOf()
|
||||
}
|
||||
return items
|
||||
}
|
||||
}
|
|
@ -1,16 +1,17 @@
|
|||
package dev.jdtech.jellyfin.viewmodels
|
||||
|
||||
import android.app.Application
|
||||
import androidx.lifecycle.*
|
||||
import dev.jdtech.jellyfin.api.JellyfinApi
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import dev.jdtech.jellyfin.repository.JellyfinRepository
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
|
||||
class LibraryViewModel(application: Application, userId: UUID) : AndroidViewModel(application) {
|
||||
private val jellyfinApi = JellyfinApi.getInstance(application, "")
|
||||
@HiltViewModel
|
||||
class LibraryViewModel
|
||||
@Inject
|
||||
constructor(private val jellyfinRepository: JellyfinRepository) : ViewModel() {
|
||||
|
||||
private val _items = MutableLiveData<List<BaseItemDto>>()
|
||||
val items: LiveData<List<BaseItemDto>> = _items
|
||||
|
@ -18,18 +19,10 @@ class LibraryViewModel(application: Application, userId: UUID) : AndroidViewMode
|
|||
private val _finishedLoading = MutableLiveData<Boolean>()
|
||||
val finishedLoading: LiveData<Boolean> = _finishedLoading
|
||||
|
||||
init {
|
||||
fun loadItems(parentId: UUID) {
|
||||
viewModelScope.launch {
|
||||
_items.value = getItems(jellyfinApi.userId!!, userId)
|
||||
_items.value = jellyfinRepository.getItems(parentId)
|
||||
_finishedLoading.value = true
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun getItems(userId: UUID, parentId: UUID): List<BaseItemDto> {
|
||||
val items: List<BaseItemDto>
|
||||
withContext(Dispatchers.IO) {
|
||||
items = jellyfinApi.itemsApi.getItems(userId, parentId = parentId).content.items!!
|
||||
}
|
||||
return items
|
||||
}
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
package dev.jdtech.jellyfin.viewmodels
|
||||
|
||||
import android.app.Application
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import java.lang.IllegalArgumentException
|
||||
import java.util.*
|
||||
|
||||
class LibraryViewModelFactory(
|
||||
private val application: Application,
|
||||
private val libraryId: UUID
|
||||
) : ViewModelProvider.Factory {
|
||||
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
|
||||
if (modelClass.isAssignableFrom(LibraryViewModel::class.java)) {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return LibraryViewModel(application, libraryId) as T
|
||||
}
|
||||
throw IllegalArgumentException("Unknown ViewModel class")
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue