diff --git a/app/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt b/app/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt index 5f2a2119..7363f121 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt @@ -23,6 +23,9 @@ interface ServerDatabaseDao { @Query("select * from servers") fun getAllServers(): LiveData> + @Query("select * from servers") + fun getAllServersSync(): List + @Query("delete from servers where id = :id") fun delete(id: String) } \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt index 43e48d7d..8f39423f 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt @@ -7,10 +7,16 @@ 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.ServerDatabase +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import java.lang.Exception class AddServerViewModel(val application: Application) : ViewModel() { + private val database = ServerDatabase.getInstance(application).serverDatabaseDao + private val _navigateToLogin = MutableLiveData() val navigateToLogin: LiveData get() = _navigateToLogin @@ -20,12 +26,21 @@ class AddServerViewModel(val application: Application) : ViewModel() { get() = _error fun checkServer(baseUrl: String) { + _error.value = null + viewModelScope.launch { val jellyfinApi = JellyfinApi.newInstance(application, baseUrl) try { - jellyfinApi.systemApi.getPublicSystemInfo() - _error.value = null - _navigateToLogin.value = true + val publicSystemInfo by jellyfinApi.systemApi.getPublicSystemInfo() + Log.i("AddServerViewModel", "Remote server: ${publicSystemInfo.id}") + + if (serverAlreadyInDatabase(publicSystemInfo.id)) { + _error.value = "Server already added" + _navigateToLogin.value = false + } else { + _error.value = null + _navigateToLogin.value = true + } } catch (e: Exception) { Log.e("AddServerViewModel", "${e.message}") _error.value = e.message @@ -34,6 +49,21 @@ class AddServerViewModel(val application: Application) : ViewModel() { } } + private suspend fun serverAlreadyInDatabase(id: String?): Boolean { + val servers: List + withContext(Dispatchers.IO) { + servers = database.getAllServersSync() + } + for (server in servers) { + Log.i("AddServerViewModel", "Database server: ${server.id}") + if (server.id == id) { + Log.i("AddServerViewModel", "Server already in the database") + return true + } + } + return false + } + fun onNavigateToLoginDone() { _navigateToLogin.value = false }