From ffb01d2b6c5b53eb789ad0ed1ecfb5fe4f0fe0cf Mon Sep 17 00:00:00 2001 From: Bnyro Date: Sat, 6 Aug 2022 12:03:44 +0200 Subject: [PATCH 1/5] fix update checker --- app/proguard-rules.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 057b8b690..195375515 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -24,4 +24,4 @@ -keep class com.github.libretube.obj.** { *; } # prevents android from removing it --keep class com.github.libretube.update.** { ; } +-keep class com.github.libretube.update.** { *; } From 6dad539aa93c39996caddb121ef94cac00cefdec Mon Sep 17 00:00:00 2001 From: Bnyro Date: Sat, 6 Aug 2022 12:05:01 +0200 Subject: [PATCH 2/5] notifications without login --- .../java/com/github/libretube/util/NotificationHelper.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/github/libretube/util/NotificationHelper.kt b/app/src/main/java/com/github/libretube/util/NotificationHelper.kt index cd8f65584..e649ed93d 100644 --- a/app/src/main/java/com/github/libretube/util/NotificationHelper.kt +++ b/app/src/main/java/com/github/libretube/util/NotificationHelper.kt @@ -89,7 +89,10 @@ object NotificationHelper { val token = PreferenceHelper.getToken() runBlocking { val task = async { - RetrofitInstance.authApi.getFeed(token) + if (token != "") RetrofitInstance.authApi.getFeed(token) + else RetrofitInstance.authApi.getUnauthenticatedFeed( + SubscriptionHelper.getFormattedLocalSubscriptions() + ) } // fetch the users feed val videoFeed = try { From 3d71d3f2f10420bb65b83b8f7009f46c6212f1e0 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Sat, 6 Aug 2022 12:22:26 +0200 Subject: [PATCH 3/5] export subscriptions --- .../libretube/preferences/InstanceSettings.kt | 26 ++++++++-- .../libretube/preferences/PreferenceKeys.kt | 1 + .../com/github/libretube/util/ImportHelper.kt | 47 ++++++++++++++++++- app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/instance_settings.xml | 7 ++- 5 files changed, 75 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/github/libretube/preferences/InstanceSettings.kt b/app/src/main/java/com/github/libretube/preferences/InstanceSettings.kt index 437f8b152..12ea9de8c 100644 --- a/app/src/main/java/com/github/libretube/preferences/InstanceSettings.kt +++ b/app/src/main/java/com/github/libretube/preferences/InstanceSettings.kt @@ -25,13 +25,25 @@ import com.github.libretube.util.RetrofitInstance class InstanceSettings : PreferenceFragmentCompat() { val TAG = "InstanceSettings" + + /** + * result listeners for importing and exporting subscriptions + */ private lateinit var getContent: ActivityResultLauncher + private lateinit var createFile: ActivityResultLauncher override fun onCreate(savedInstanceState: Bundle?) { getContent = - registerForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? -> - ImportHelper(requireActivity() as AppCompatActivity).importSubscriptions(uri) + registerForActivityResult( + ActivityResultContracts.GetContent() + ) { uri: Uri? -> + ImportHelper(requireActivity()).importSubscriptions(uri) } + createFile = registerForActivityResult( + ActivityResultContracts.CreateDocument() + ) { uri: Uri? -> + ImportHelper(requireActivity()).exportSubscriptions(uri) + } super.onCreate(savedInstanceState) } @@ -126,8 +138,8 @@ class InstanceSettings : PreferenceFragmentCompat() { true } - val importFromYt = findPreference(PreferenceKeys.IMPORT_SUBS) - importFromYt?.setOnPreferenceClickListener { + val importSubscriptions = findPreference(PreferenceKeys.IMPORT_SUBS) + importSubscriptions?.setOnPreferenceClickListener { // check StorageAccess val accessGranted = PermissionHelper.isStoragePermissionGranted(activity as AppCompatActivity) @@ -137,6 +149,12 @@ class InstanceSettings : PreferenceFragmentCompat() { else PermissionHelper.requestReadWrite(activity as AppCompatActivity) true } + + val exportSubscriptions = findPreference(PreferenceKeys.EXPORT_SUBS) + exportSubscriptions?.setOnPreferenceClickListener { + createFile.launch("application/json") + true + } } private fun initCustomInstances(instancePref: ListPreference) { diff --git a/app/src/main/java/com/github/libretube/preferences/PreferenceKeys.kt b/app/src/main/java/com/github/libretube/preferences/PreferenceKeys.kt index 18ad2c013..47e89cb2d 100644 --- a/app/src/main/java/com/github/libretube/preferences/PreferenceKeys.kt +++ b/app/src/main/java/com/github/libretube/preferences/PreferenceKeys.kt @@ -34,6 +34,7 @@ object PreferenceKeys { const val LOGIN_REGISTER = "login_register" const val DELETE_ACCOUNT = "delete_account" const val IMPORT_SUBS = "import_from_yt" + const val EXPORT_SUBS = "export_subs" /** * Player diff --git a/app/src/main/java/com/github/libretube/util/ImportHelper.kt b/app/src/main/java/com/github/libretube/util/ImportHelper.kt index 92b45aacd..2502c0315 100644 --- a/app/src/main/java/com/github/libretube/util/ImportHelper.kt +++ b/app/src/main/java/com/github/libretube/util/ImportHelper.kt @@ -1,23 +1,27 @@ package com.github.libretube.util +import android.app.Activity import android.net.Uri import android.util.Log import android.widget.Toast -import androidx.appcompat.app.AppCompatActivity import com.fasterxml.jackson.databind.ObjectMapper import com.github.libretube.R +import com.github.libretube.obj.NewPipeSubscription import com.github.libretube.obj.NewPipeSubscriptions +import com.github.libretube.preferences.PreferenceHelper import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking import java.io.BufferedReader +import java.io.FileOutputStream import java.io.InputStream import java.io.InputStreamReader import java.util.zip.ZipEntry import java.util.zip.ZipInputStream class ImportHelper( - private val activity: AppCompatActivity + private val activity: Activity ) { private val TAG = "ImportHelper" @@ -87,4 +91,43 @@ class ImportHelper( } return stringBuilder.toString() } + + /** + * write the text to the document + */ + fun exportSubscriptions(uri: Uri?) { + if (uri == null) return + try { + val mapper = ObjectMapper() + val token = PreferenceHelper.getToken() + runBlocking { + val subs = if (token != "") RetrofitInstance.authApi.subscriptions(token) + else RetrofitInstance.authApi.unauthenticatedSubscriptions( + SubscriptionHelper.getFormattedLocalSubscriptions() + ) + val newPipeChannels = mutableListOf() + subs.forEach { + newPipeChannels += NewPipeSubscription( + name = it.name, + service_id = 0, + url = "https://youtube.com/channel/" + it.url + ) + } + + val newPipeSubscriptions = NewPipeSubscriptions( + subscriptions = newPipeChannels + ) + + val data = mapper.writeValueAsBytes(newPipeSubscriptions) + + activity.contentResolver.openFileDescriptor(uri, "w")?.use { + FileOutputStream(it.fileDescriptor).use { fileOutputStream -> + fileOutputStream.write(data) + } + } + } + } catch (e: Exception) { + e.printStackTrace() + } + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a260cd287..d6bfb73e3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -291,4 +291,5 @@ Copied Downloaded Share with start time + Export Subscriptions diff --git a/app/src/main/res/xml/instance_settings.xml b/app/src/main/res/xml/instance_settings.xml index 7ce04b572..40fc7824e 100644 --- a/app/src/main/res/xml/instance_settings.xml +++ b/app/src/main/res/xml/instance_settings.xml @@ -59,11 +59,16 @@ + + \ No newline at end of file From ac955d837777f6d9e5e98f9a3edaafe10a924a66 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Sat, 6 Aug 2022 12:48:08 +0200 Subject: [PATCH 4/5] fixes --- .../java/com/github/libretube/preferences/InstanceSettings.kt | 2 +- app/src/main/java/com/github/libretube/util/ImportHelper.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/github/libretube/preferences/InstanceSettings.kt b/app/src/main/java/com/github/libretube/preferences/InstanceSettings.kt index 12ea9de8c..5bf938c33 100644 --- a/app/src/main/java/com/github/libretube/preferences/InstanceSettings.kt +++ b/app/src/main/java/com/github/libretube/preferences/InstanceSettings.kt @@ -152,7 +152,7 @@ class InstanceSettings : PreferenceFragmentCompat() { val exportSubscriptions = findPreference(PreferenceKeys.EXPORT_SUBS) exportSubscriptions?.setOnPreferenceClickListener { - createFile.launch("application/json") + createFile.launch("subscriptions.json") true } } diff --git a/app/src/main/java/com/github/libretube/util/ImportHelper.kt b/app/src/main/java/com/github/libretube/util/ImportHelper.kt index 2502c0315..c66a16185 100644 --- a/app/src/main/java/com/github/libretube/util/ImportHelper.kt +++ b/app/src/main/java/com/github/libretube/util/ImportHelper.kt @@ -110,7 +110,7 @@ class ImportHelper( newPipeChannels += NewPipeSubscription( name = it.name, service_id = 0, - url = "https://youtube.com/channel/" + it.url + url = "https://youtube.com" + it.url ) } From 3b19d9b99575b35e7903f9c2ca38754185c04ed4 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Sat, 6 Aug 2022 12:51:53 +0200 Subject: [PATCH 5/5] . --- app/src/main/java/com/github/libretube/util/ImportHelper.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/github/libretube/util/ImportHelper.kt b/app/src/main/java/com/github/libretube/util/ImportHelper.kt index c66a16185..1c1480caa 100644 --- a/app/src/main/java/com/github/libretube/util/ImportHelper.kt +++ b/app/src/main/java/com/github/libretube/util/ImportHelper.kt @@ -110,7 +110,7 @@ class ImportHelper( newPipeChannels += NewPipeSubscription( name = it.name, service_id = 0, - url = "https://youtube.com" + it.url + url = "https://www.youtube.com" + it.url ) }