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> = _servers private val _navigateToMain = MutableLiveData() val navigateToMain: LiveData = _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) } } }