From 641dd5f290b4c8c3515d962d741383b76d3981ab Mon Sep 17 00:00:00 2001 From: rimthekid Date: Thu, 10 Feb 2022 15:32:22 +0400 Subject: [PATCH] fetch servers from github --- app/build.gradle | 1 + .../java/com/github/libretube/PipedApi.kt | 2 + .../java/com/github/libretube/Settings.kt | 70 +++++++++++++++++-- app/src/main/res/values/array.xml | 12 +++- 4 files changed, 78 insertions(+), 7 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2f6023299..9c19a0651 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -54,4 +54,5 @@ dependencies { implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-jackson:2.9.0' implementation 'com.fasterxml.jackson.core:jackson-annotations:2.13.1' + implementation 'com.squareup.retrofit2:converter-scalars:2.1.0' } \ No newline at end of file diff --git a/app/src/main/java/com/github/libretube/PipedApi.kt b/app/src/main/java/com/github/libretube/PipedApi.kt index fe133a617..054756dd2 100644 --- a/app/src/main/java/com/github/libretube/PipedApi.kt +++ b/app/src/main/java/com/github/libretube/PipedApi.kt @@ -52,5 +52,7 @@ interface PipedApi { @POST("unsubscribe") suspend fun unsubscribe(@Header("Authorization") token: String, @Body subscribe: Subscribe): String + @GET("Instances.md") + suspend fun getInstances(): String } \ No newline at end of file diff --git a/app/src/main/java/com/github/libretube/Settings.kt b/app/src/main/java/com/github/libretube/Settings.kt index 9ca921602..44f5c3982 100644 --- a/app/src/main/java/com/github/libretube/Settings.kt +++ b/app/src/main/java/com/github/libretube/Settings.kt @@ -2,29 +2,91 @@ package com.github.libretube import android.os.Bundle import android.util.Log +import android.view.View +import androidx.fragment.app.Fragment +import androidx.lifecycle.lifecycleScope import androidx.preference.ListPreference import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat -import androidx.preference.SwitchPreferenceCompat -import okhttp3.HttpUrl +import androidx.preference.PreferenceManager +import com.github.libretube.adapters.TrendingAdapter +import retrofit2.HttpException import retrofit2.Retrofit import retrofit2.converter.jackson.JacksonConverterFactory +import retrofit2.converter.scalars.ScalarsConverterFactory +import java.io.IOException class Settings : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.settings, rootKey) val instance = findPreference("instance") + fetchInstance() instance?.setOnPreferenceChangeListener { preference, newValue -> - RetrofitInstance.url=newValue.toString() + RetrofitInstance.url = newValue.toString() RetrofitInstance.lazyMgr.reset() true } val login = findPreference("login_register") login?.setOnPreferenceClickListener { val newFragment = LoginDialog() - newFragment.show(childFragmentManager,"fuck") + newFragment.show(childFragmentManager, "fuck") true } } + + private fun fetchInstance() { + val api: PipedApi by lazy{ + Retrofit.Builder() + .baseUrl("https://raw.githubusercontent.com/wiki/TeamPiped/Piped-Frontend/") + .addConverterFactory(ScalarsConverterFactory.create()) + .build() + .create(PipedApi::class.java) + } + lifecycleScope.launchWhenCreated { + val response = try { + api.getInstances() + } catch (e: IOException) { + println(e) + Log.e("settings", "IOException, you might not have internet connection") + return@launchWhenCreated + } catch (e: HttpException) { + Log.e("settings", "HttpException, unexpected response ${e.toString()}") + return@launchWhenCreated + } catch (e: Exception){ + Log.e("settings",e.toString()) + return@launchWhenCreated + } + //println("dafaq $response") + val listEntries: MutableList = ArrayList() + val listEntryValues: MutableList = ArrayList() + var skipped = 0 + val lines = response.split("\n") + for(line in lines) { + val split = line.split("|") + if (split.size == 5) { + if (skipped < 2) { + skipped++ + }else{ + println("dafaq $line") + listEntries.add(split[0]) + listEntryValues.add(split[1]) + } + } + + } + val entries = listEntries.toTypedArray() + val entryValues = listEntryValues.toTypedArray() + runOnUiThread { + val instance = findPreference("instance") + instance?.entries = entries + instance?.entryValues = entryValues + } + } + } + private fun Fragment?.runOnUiThread(action: () -> Unit) { + this ?: return + if (!isAdded) return // Fragment not attached to an Activity + activity?.runOnUiThread(action) + } } diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml index 0359e51d1..1f2f7dfcb 100644 --- a/app/src/main/res/values/array.xml +++ b/app/src/main/res/values/array.xml @@ -1,12 +1,18 @@ - piped.tokhmi.xyz - piped.kavin.rocks + kavin.rocks (Official) + silkky.cloud + tokhmi.xyz + moomoo.me + mint.lgbt - https://pipedapi.tokhmi.xyz/ https://pipedapi.kavin.rocks/ + https://api.piped.silkky.cloud + https://pipedapi.tokhmi.xyz/ + https://pipedapi.moomoo.me + https://pa.mint.lgbt Afghanistan