Improve server discovery (no longer need to type http:// or https:// or ports)
This commit is contained in:
parent
2094ec9870
commit
306c3b02c2
1 changed files with 24 additions and 8 deletions
|
@ -9,8 +9,11 @@ import dev.jdtech.jellyfin.api.JellyfinApi
|
||||||
import dev.jdtech.jellyfin.database.Server
|
import dev.jdtech.jellyfin.database.Server
|
||||||
import dev.jdtech.jellyfin.database.ServerDatabaseDao
|
import dev.jdtech.jellyfin.database.ServerDatabaseDao
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.flow.first
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
import org.jellyfin.sdk.discovery.RecommendedServerInfo
|
||||||
|
import org.jellyfin.sdk.discovery.RecommendedServerInfoScore
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@ -34,19 +37,32 @@ constructor(
|
||||||
* - Connect to server and check if it is a Jellyfin server
|
* - Connect to server and check if it is a Jellyfin server
|
||||||
* - Check if server is not already in Database
|
* - Check if server is not already in Database
|
||||||
*/
|
*/
|
||||||
fun checkServer(baseUrl: String) {
|
fun checkServer(inputValue: String) {
|
||||||
_error.value = null
|
_error.value = null
|
||||||
|
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
jellyfinApi.apply {
|
|
||||||
api.baseUrl = baseUrl
|
|
||||||
api.accessToken = null
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
val publicSystemInfo by jellyfinApi.systemApi.getPublicSystemInfo()
|
val candidates = jellyfinApi.jellyfin.discovery.getAddressCandidates(inputValue)
|
||||||
Timber.d("Remote server: ${publicSystemInfo.id}")
|
val recommended = jellyfinApi.jellyfin.discovery.getRecommendedServers(
|
||||||
|
candidates,
|
||||||
|
RecommendedServerInfoScore.GOOD
|
||||||
|
)
|
||||||
|
val recommendedServer: RecommendedServerInfo
|
||||||
|
|
||||||
if (serverAlreadyInDatabase(publicSystemInfo.id)) {
|
try {
|
||||||
|
recommendedServer = recommended.first()
|
||||||
|
} catch (e: NoSuchElementException) {
|
||||||
|
throw Exception("Server not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
jellyfinApi.apply {
|
||||||
|
api.baseUrl = recommendedServer.address
|
||||||
|
api.accessToken = null
|
||||||
|
}
|
||||||
|
|
||||||
|
Timber.d("Remote server: ${recommendedServer.systemInfo?.id}")
|
||||||
|
|
||||||
|
if (serverAlreadyInDatabase(recommendedServer.systemInfo?.id)) {
|
||||||
_error.value = "Server already added"
|
_error.value = "Server already added"
|
||||||
_navigateToLogin.value = false
|
_navigateToLogin.value = false
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue