fix: don't use dead fallback instances api anymore

This commit is contained in:
Bnyro 2023-12-17 16:29:07 +01:00
parent 916a91a861
commit 8edef3583c
6 changed files with 19 additions and 19 deletions

View File

@ -1,6 +1,6 @@
package com.github.libretube.api 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.api.obj.SubmitSegmentResponse
import com.github.libretube.obj.update.UpdateInfo import com.github.libretube.obj.update.UpdateInfo
import retrofit2.http.GET import retrofit2.http.GET
@ -14,7 +14,7 @@ private const val SB_API_URL = "https://sponsor.ajay.app"
interface ExternalApi { interface ExternalApi {
// only for fetching servers list // only for fetching servers list
@GET @GET
suspend fun getInstances(@Url url: String): List<Instances> suspend fun getInstances(@Url url: String): List<PipedInstance>
// fetch latest version info // fetch latest version info
@GET(GITHUB_API_URL) @GET(GITHUB_API_URL)

View File

@ -2,34 +2,31 @@ package com.github.libretube.api
import android.content.Context import android.content.Context
import com.github.libretube.R 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.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
object InstanceHelper { object InstanceHelper {
private const val PIPED_INSTANCES_URL = "https://piped-instances.kavin.rocks" 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<Instances> { suspend fun getInstances(context: Context): List<PipedInstance> {
return withContext(Dispatchers.IO) { return withContext(Dispatchers.IO) {
runCatching { runCatching {
RetrofitInstance.externalApi.getInstances(PIPED_INSTANCES_URL) RetrofitInstance.externalApi.getInstances(PIPED_INSTANCES_URL)
}.getOrNull() ?: runCatching {
RetrofitInstance.externalApi.getInstances(FALLBACK_INSTANCES_URL)
}.getOrNull() ?: run { }.getOrNull() ?: run {
throw Exception(context.getString(R.string.failed_fetching_instances)) throw Exception(context.getString(R.string.failed_fetching_instances))
} }
} }
} }
fun getInstancesFallback(context: Context): List<Instances> { fun getInstancesFallback(context: Context): List<PipedInstance> {
val instanceNames = context.resources.getStringArray(R.array.instances) val instanceNames = context.resources.getStringArray(R.array.instances)
return context.resources.getStringArray(R.array.instancesValue) return context.resources.getStringArray(R.array.instancesValue)
.mapIndexed { index, instanceValue -> .mapIndexed { index, instanceValue ->
Instances(instanceNames[index], instanceValue) PipedInstance(instanceNames[index], instanceValue)
} }
} }
} }

View File

@ -4,7 +4,7 @@ import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
data class Instances( data class PipedInstance(
val name: String, val name: String,
@SerialName("api_url") val apiUrl: String, @SerialName("api_url") val apiUrl: String,
val locations: String = "", val locations: String = "",
@ -16,5 +16,8 @@ data class Instances(
@SerialName("cache") val chache: Boolean = false, @SerialName("cache") val chache: Boolean = false,
@SerialName("s3_enabled") val s3Enabled: Boolean = false, @SerialName("s3_enabled") val s3Enabled: Boolean = false,
@SerialName("image_proxy_url") val imageProxyUrl: String = "", @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
) )

View File

@ -5,13 +5,13 @@ import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.R 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.databinding.InstanceRowBinding
import com.github.libretube.ui.models.WelcomeModel import com.github.libretube.ui.models.WelcomeModel
import com.github.libretube.ui.viewholders.InstancesViewHolder import com.github.libretube.ui.viewholders.InstancesViewHolder
class InstancesAdapter( class InstancesAdapter(
private val instances: List<Instances>, private val instances: List<PipedInstance>,
viewModel: WelcomeModel, viewModel: WelcomeModel,
private val onSelectInstance: (index: Int) -> Unit private val onSelectInstance: (index: Int) -> Unit
) : RecyclerView.Adapter<InstancesViewHolder>() { ) : RecyclerView.Adapter<InstancesViewHolder>() {

View File

@ -5,7 +5,7 @@ import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.github.libretube.api.InstanceHelper 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 com.github.libretube.extensions.toastFromMainDispatcher
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -13,7 +13,7 @@ import kotlinx.coroutines.launch
class WelcomeModel(private val application: Application) : AndroidViewModel(application) { class WelcomeModel(private val application: Application) : AndroidViewModel(application) {
val selectedInstanceIndex = MutableLiveData<Int>() val selectedInstanceIndex = MutableLiveData<Int>()
var instances = MutableLiveData<List<Instances>>() var instances = MutableLiveData<List<PipedInstance>>()
fun fetchInstances() { fun fetchInstances() {
if (!instances.value.isNullOrEmpty()) return if (!instances.value.isNullOrEmpty()) return

View File

@ -10,7 +10,7 @@ import androidx.preference.SwitchPreferenceCompat
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.api.InstanceHelper import com.github.libretube.api.InstanceHelper
import com.github.libretube.api.RetrofitInstance 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.IntentData
import com.github.libretube.constants.PreferenceKeys import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.db.DatabaseHolder.Database import com.github.libretube.db.DatabaseHolder.Database
@ -135,14 +135,14 @@ class InstanceSettings : BasePreferenceFragment() {
private suspend fun initInstancesPref( private suspend fun initInstancesPref(
instancePrefs: List<ListPreference>, instancePrefs: List<ListPreference>,
publicInstances: List<Instances> publicInstances: List<PipedInstance>
) = runCatching { ) = runCatching {
val customInstanceList = withContext(Dispatchers.IO) { val customInstanceList = withContext(Dispatchers.IO) {
Database.customInstanceDao().getAll() Database.customInstanceDao().getAll()
} }
val customInstances = customInstanceList val customInstances = customInstanceList
.map { Instances(it.name, it.apiUrl) } .map { PipedInstance(it.name, it.apiUrl) }
val instances = publicInstances val instances = publicInstances
.plus(customInstances) .plus(customInstances)