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.viewmodels.LibraryViewModel
|
||||||
import dev.jdtech.jellyfin.adapters.ViewItemListAdapter
|
import dev.jdtech.jellyfin.adapters.ViewItemListAdapter
|
||||||
import dev.jdtech.jellyfin.databinding.FragmentLibraryBinding
|
import dev.jdtech.jellyfin.databinding.FragmentLibraryBinding
|
||||||
import dev.jdtech.jellyfin.viewmodels.LibraryViewModelFactory
|
|
||||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class LibraryFragment : Fragment() {
|
class LibraryFragment : Fragment() {
|
||||||
|
|
||||||
private lateinit var binding: FragmentLibraryBinding
|
private lateinit var binding: FragmentLibraryBinding
|
||||||
|
private val viewModel: LibraryViewModel by viewModels()
|
||||||
|
|
||||||
private val args: LibraryFragmentArgs by navArgs()
|
private val args: LibraryFragmentArgs by navArgs()
|
||||||
|
|
||||||
|
@ -35,14 +35,12 @@ class LibraryFragment : Fragment() {
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
val viewModelFactory =
|
|
||||||
LibraryViewModelFactory(requireNotNull(this.activity).application, args.libraryId)
|
|
||||||
val viewModel: LibraryViewModel by viewModels { viewModelFactory }
|
|
||||||
binding.viewModel = viewModel
|
binding.viewModel = viewModel
|
||||||
binding.itemsRecyclerView.adapter =
|
binding.itemsRecyclerView.adapter =
|
||||||
ViewItemListAdapter(ViewItemListAdapter.OnClickListener { item ->
|
ViewItemListAdapter(ViewItemListAdapter.OnClickListener { item ->
|
||||||
navigateToMediaInfoFragment(item)
|
navigateToMediaInfoFragment(item)
|
||||||
})
|
})
|
||||||
|
viewModel.loadItems(args.libraryId)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun navigateToMediaInfoFragment(item: BaseItemDto) {
|
private fun navigateToMediaInfoFragment(item: BaseItemDto) {
|
||||||
|
|
|
@ -5,4 +5,6 @@ import java.util.*
|
||||||
|
|
||||||
interface JellyfinRepository {
|
interface JellyfinRepository {
|
||||||
suspend fun getItem(itemId: UUID): BaseItemDto
|
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
|
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
|
package dev.jdtech.jellyfin.viewmodels
|
||||||
|
|
||||||
import android.app.Application
|
|
||||||
import androidx.lifecycle.*
|
import androidx.lifecycle.*
|
||||||
import dev.jdtech.jellyfin.api.JellyfinApi
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import kotlinx.coroutines.Dispatchers
|
import dev.jdtech.jellyfin.repository.JellyfinRepository
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
|
||||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
class LibraryViewModel(application: Application, userId: UUID) : AndroidViewModel(application) {
|
@HiltViewModel
|
||||||
private val jellyfinApi = JellyfinApi.getInstance(application, "")
|
class LibraryViewModel
|
||||||
|
@Inject
|
||||||
|
constructor(private val jellyfinRepository: JellyfinRepository) : ViewModel() {
|
||||||
|
|
||||||
private val _items = MutableLiveData<List<BaseItemDto>>()
|
private val _items = MutableLiveData<List<BaseItemDto>>()
|
||||||
val items: LiveData<List<BaseItemDto>> = _items
|
val items: LiveData<List<BaseItemDto>> = _items
|
||||||
|
@ -18,18 +19,10 @@ class LibraryViewModel(application: Application, userId: UUID) : AndroidViewMode
|
||||||
private val _finishedLoading = MutableLiveData<Boolean>()
|
private val _finishedLoading = MutableLiveData<Boolean>()
|
||||||
val finishedLoading: LiveData<Boolean> = _finishedLoading
|
val finishedLoading: LiveData<Boolean> = _finishedLoading
|
||||||
|
|
||||||
init {
|
fun loadItems(parentId: UUID) {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
_items.value = getItems(jellyfinApi.userId!!, userId)
|
_items.value = jellyfinRepository.getItems(parentId)
|
||||||
_finishedLoading.value = true
|
_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