62 lines
No EOL
1.8 KiB
Kotlin
62 lines
No EOL
1.8 KiB
Kotlin
package dev.jdtech.jellyfin.viewmodels
|
|
|
|
import android.app.Application
|
|
import androidx.lifecycle.LiveData
|
|
import androidx.lifecycle.MutableLiveData
|
|
import androidx.lifecycle.ViewModel
|
|
import androidx.lifecycle.viewModelScope
|
|
import dev.jdtech.jellyfin.api.JellyfinApi
|
|
import dev.jdtech.jellyfin.database.Server
|
|
import dev.jdtech.jellyfin.database.ServerDatabaseDao
|
|
import kotlinx.coroutines.Dispatchers
|
|
import kotlinx.coroutines.launch
|
|
import kotlinx.coroutines.withContext
|
|
import java.util.*
|
|
|
|
class ServerSelectViewModel(
|
|
val database: ServerDatabaseDao,
|
|
val application: Application,
|
|
) : ViewModel() {
|
|
private val _servers = database.getAllServers()
|
|
val servers: LiveData<List<Server>> = _servers
|
|
|
|
private val _navigateToMain = MutableLiveData<Boolean>()
|
|
val navigateToMain: LiveData<Boolean> = _navigateToMain
|
|
|
|
/**
|
|
* Delete server from database
|
|
*
|
|
* @param server The server
|
|
*/
|
|
fun deleteServer(server: Server) {
|
|
viewModelScope.launch {
|
|
withContext(Dispatchers.IO) {
|
|
database.delete(server.id)
|
|
}
|
|
}
|
|
}
|
|
|
|
fun connectToServer(server: Server) {
|
|
val jellyfinApi = JellyfinApi.newInstance(application, server.address).apply {
|
|
api.accessToken = server.accessToken
|
|
userId = UUID.fromString(server.userId)
|
|
}
|
|
|
|
viewModelScope.launch {
|
|
postCapabilities(jellyfinApi)
|
|
}
|
|
|
|
|
|
_navigateToMain.value = true
|
|
}
|
|
|
|
fun doneNavigatingToMain() {
|
|
_navigateToMain.value = false
|
|
}
|
|
|
|
private suspend fun postCapabilities(jellyfinApi: JellyfinApi) {
|
|
withContext(Dispatchers.IO) {
|
|
jellyfinApi.sessionApi.postCapabilities(playableMediaTypes = listOf("Video"), supportsMediaControl = false, supportsSync = false, supportsPersistentIdentifier = true)
|
|
}
|
|
}
|
|
} |