Skip to content

Commit 35690b8

Browse files
committed
feat(Instances): always show hard-coded fallback instances
Avoids using the soft-fallback of fetching the Markdown list of available instances, as it is severely out-of-date, misleading users when trying to sign-up into offline instances. Instead, we always fallback to the hardcoded official instance.
1 parent 6295cb7 commit 35690b8

4 files changed

Lines changed: 8 additions & 22 deletions

File tree

app/src/main/java/com/github/libretube/api/ExternalApi.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,12 @@ private const val RYD_API_URL = "https://ryd-proxy.kavin.rocks"
2525
private const val GOOGLE_API_KEY = "AIzaSyDyT5W0Jh49F30Pqqtyfdf7pDLFKLJoAnw"
2626
const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.3"
2727
private const val PIPED_INSTANCES_URL = "https://piped-instances.kavin.rocks"
28-
private const val PIPED_INSTANCES_MARKDOWN_URL = "https://raw.githubusercontent.com/TeamPiped/documentation/refs/heads/main/content/docs/public-instances/index.md"
2928

3029
interface ExternalApi {
3130
// only for fetching servers list
3231
@GET
3332
suspend fun getInstances(@Url url: String = PIPED_INSTANCES_URL): List<PipedInstance>
3433

35-
@GET
36-
suspend fun getInstancesMarkdown(@Url url: String = PIPED_INSTANCES_MARKDOWN_URL): Response<ResponseBody>
37-
3834
@GET("config")
3935
suspend fun getInstanceConfig(@Url url: String): PipedConfig
4036

app/src/main/java/com/github/libretube/api/InstanceRepository.kt

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import kotlinx.coroutines.withContext
77
import okhttp3.HttpUrl.Companion.toHttpUrl
88

99
class InstanceRepository {
10-
1110
/**
1211
* Fetch official public instances from kavin.rocks
1312
*/
@@ -17,19 +16,10 @@ class InstanceRepository {
1716
}
1817
}
1918

20-
suspend fun getInstancesFallback(): List<PipedInstance> = withContext(Dispatchers.IO) {
21-
return@withContext try {
22-
RetrofitInstance.externalApi.getInstancesMarkdown().body()!!.string().lines().reversed()
23-
.takeWhile { !it.startsWith("---") }
24-
.filter { it.isNotBlank() }
25-
.map { line ->
26-
val infoParts = line.split("|").map { it.trim() }
27-
28-
PipedInstance(name = infoParts[0], apiUrl = infoParts[1], locations = infoParts[2], cdn = infoParts[3] == "Yes")
29-
}
30-
} catch (_: Exception) {
31-
// worst case scenario: only return official instance
32-
return@withContext listOf(PipedInstance(name = PIPED_API_URL.toHttpUrl().host, apiUrl = PIPED_API_URL))
33-
}
19+
companion object {
20+
/**
21+
* Hardcoded list of fallback instances.
22+
*/
23+
val FALLBACK_INSTANCES = listOf(PipedInstance(name = PIPED_API_URL.toHttpUrl().host, apiUrl = PIPED_API_URL));
3424
}
3525
}

app/src/main/java/com/github/libretube/ui/models/InstancesModel.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ class InstancesModel : ViewModel() {
2828
private val instancesRepo = InstanceRepository()
2929

3030
suspend fun fetchCustomInstances(onIntermediateError: (Throwable) -> Unit) {
31-
val instances =instancesRepo.getInstances()
31+
val instances = instancesRepo.getInstances()
3232
.onFailure { onIntermediateError(it) }
33-
.getOrElse { instancesRepo.getInstancesFallback() }
33+
.getOrElse { InstanceRepository.FALLBACK_INSTANCES }
3434

3535
publicInstances.emit(instances)
3636
}

app/src/main/java/com/github/libretube/ui/models/WelcomeViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class WelcomeViewModel(
4040
}
4141
.onFailure {
4242
savedStateHandle[UI_STATE] = _uiState.value.copy(
43-
instances = instanceRepository.getInstancesFallback(),
43+
instances = InstanceRepository.FALLBACK_INSTANCES,
4444
error = R.string.failed_fetching_instances,
4545
)
4646
}

0 commit comments

Comments
 (0)