diff --git a/app/src/main/java/com/github/libretube/api/ExternalApi.kt b/app/src/main/java/com/github/libretube/api/ExternalApi.kt index 0ca6ee5ff..6685d75ea 100644 --- a/app/src/main/java/com/github/libretube/api/ExternalApi.kt +++ b/app/src/main/java/com/github/libretube/api/ExternalApi.kt @@ -1,6 +1,6 @@ package com.github.libretube.api -import com.github.libretube.api.obj.Instances +import com.github.libretube.api.obj.PipedInstance import com.github.libretube.api.obj.SubmitSegmentResponse import com.github.libretube.obj.update.UpdateInfo import retrofit2.http.GET @@ -14,7 +14,7 @@ private const val SB_API_URL = "https://sponsor.ajay.app" interface ExternalApi { // only for fetching servers list @GET - suspend fun getInstances(@Url url: String): List + suspend fun getInstances(@Url url: String): List // fetch latest version info @GET(GITHUB_API_URL) diff --git a/app/src/main/java/com/github/libretube/api/InstanceHelper.kt b/app/src/main/java/com/github/libretube/api/InstanceHelper.kt index d481d4c39..54280da43 100644 --- a/app/src/main/java/com/github/libretube/api/InstanceHelper.kt +++ b/app/src/main/java/com/github/libretube/api/InstanceHelper.kt @@ -2,34 +2,31 @@ package com.github.libretube.api import android.content.Context import com.github.libretube.R -import com.github.libretube.api.obj.Instances +import com.github.libretube.api.obj.PipedInstance import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext object InstanceHelper { private const val PIPED_INSTANCES_URL = "https://piped-instances.kavin.rocks" - private const val FALLBACK_INSTANCES_URL = "https://instances.tokhmi.xyz" /** - * fetch official public instances from kavin.rocks as well as tokhmi.xyz as fallback + * Fetch official public instances from kavin.rocks */ - suspend fun getInstances(context: Context): List { + suspend fun getInstances(context: Context): List { return withContext(Dispatchers.IO) { runCatching { RetrofitInstance.externalApi.getInstances(PIPED_INSTANCES_URL) - }.getOrNull() ?: runCatching { - RetrofitInstance.externalApi.getInstances(FALLBACK_INSTANCES_URL) }.getOrNull() ?: run { throw Exception(context.getString(R.string.failed_fetching_instances)) } } } - fun getInstancesFallback(context: Context): List { + fun getInstancesFallback(context: Context): List { val instanceNames = context.resources.getStringArray(R.array.instances) return context.resources.getStringArray(R.array.instancesValue) .mapIndexed { index, instanceValue -> - Instances(instanceNames[index], instanceValue) + PipedInstance(instanceNames[index], instanceValue) } } } diff --git a/app/src/main/java/com/github/libretube/api/obj/Instances.kt b/app/src/main/java/com/github/libretube/api/obj/PipedInstance.kt similarity index 75% rename from app/src/main/java/com/github/libretube/api/obj/Instances.kt rename to app/src/main/java/com/github/libretube/api/obj/PipedInstance.kt index 52a2e9137..9435d85f2 100644 --- a/app/src/main/java/com/github/libretube/api/obj/Instances.kt +++ b/app/src/main/java/com/github/libretube/api/obj/PipedInstance.kt @@ -4,7 +4,7 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable -data class Instances( +data class PipedInstance( val name: String, @SerialName("api_url") val apiUrl: String, val locations: String = "", @@ -16,5 +16,8 @@ data class Instances( @SerialName("cache") val chache: Boolean = false, @SerialName("s3_enabled") val s3Enabled: Boolean = false, @SerialName("image_proxy_url") val imageProxyUrl: String = "", - @SerialName("registration_disabled") val registrationDisabled: Boolean = false + @SerialName("registration_disabled") val registrationDisabled: Boolean = false, + @SerialName("uptime_24h") val uptimeToday: Float = 0f, + @SerialName("uptime_7d") val uptimeWeek: Float = 0f, + @SerialName("uptime_30d") val uptimeMonth: Float = 0f ) diff --git a/app/src/main/java/com/github/libretube/ui/adapters/InstancesAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/InstancesAdapter.kt index 8d1dacfcd..dc481b8bb 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/InstancesAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/InstancesAdapter.kt @@ -5,13 +5,13 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.github.libretube.R -import com.github.libretube.api.obj.Instances +import com.github.libretube.api.obj.PipedInstance import com.github.libretube.databinding.InstanceRowBinding import com.github.libretube.ui.models.WelcomeModel import com.github.libretube.ui.viewholders.InstancesViewHolder class InstancesAdapter( - private val instances: List, + private val instances: List, viewModel: WelcomeModel, private val onSelectInstance: (index: Int) -> Unit ) : RecyclerView.Adapter() { diff --git a/app/src/main/java/com/github/libretube/ui/models/WelcomeModel.kt b/app/src/main/java/com/github/libretube/ui/models/WelcomeModel.kt index 97db0a1eb..5d4e48883 100644 --- a/app/src/main/java/com/github/libretube/ui/models/WelcomeModel.kt +++ b/app/src/main/java/com/github/libretube/ui/models/WelcomeModel.kt @@ -5,7 +5,7 @@ import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope import com.github.libretube.api.InstanceHelper -import com.github.libretube.api.obj.Instances +import com.github.libretube.api.obj.PipedInstance import com.github.libretube.extensions.toastFromMainDispatcher import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -13,7 +13,7 @@ import kotlinx.coroutines.launch class WelcomeModel(private val application: Application) : AndroidViewModel(application) { val selectedInstanceIndex = MutableLiveData() - var instances = MutableLiveData>() + var instances = MutableLiveData>() fun fetchInstances() { if (!instances.value.isNullOrEmpty()) return diff --git a/app/src/main/java/com/github/libretube/ui/preferences/InstanceSettings.kt b/app/src/main/java/com/github/libretube/ui/preferences/InstanceSettings.kt index e01a1707b..caf5a85bf 100644 --- a/app/src/main/java/com/github/libretube/ui/preferences/InstanceSettings.kt +++ b/app/src/main/java/com/github/libretube/ui/preferences/InstanceSettings.kt @@ -10,7 +10,7 @@ import androidx.preference.SwitchPreferenceCompat import com.github.libretube.R import com.github.libretube.api.InstanceHelper import com.github.libretube.api.RetrofitInstance -import com.github.libretube.api.obj.Instances +import com.github.libretube.api.obj.PipedInstance import com.github.libretube.constants.IntentData import com.github.libretube.constants.PreferenceKeys import com.github.libretube.db.DatabaseHolder.Database @@ -135,14 +135,14 @@ class InstanceSettings : BasePreferenceFragment() { private suspend fun initInstancesPref( instancePrefs: List, - publicInstances: List + publicInstances: List ) = runCatching { val customInstanceList = withContext(Dispatchers.IO) { Database.customInstanceDao().getAll() } val customInstances = customInstanceList - .map { Instances(it.name, it.apiUrl) } + .map { PipedInstance(it.name, it.apiUrl) } val instances = publicInstances .plus(customInstances)