From bbf9f247a9308ce7c39f31151eecd6076982c3b3 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Mon, 15 Aug 2022 03:31:33 +0200 Subject: [PATCH] Add reference to public list --- .../lagradost/cloudstream3/MainActivity.kt | 8 ++-- .../cloudstream3/plugins/RepositoryManager.kt | 6 ++- .../cloudstream3/ui/home/HomeFragment.kt | 1 + .../settings/extensions/ExtensionsFragment.kt | 13 +++++- .../ui/setup/SetupFragmentExtensions.kt | 40 ++++++++++++++++-- .../ui/setup/SetupFragmentLanguage.kt | 6 ++- app/src/main/res/layout/add_repo_input.xml | 35 +++++++++++----- .../main/res/layout/fragment_extensions.xml | 14 +++++-- .../res/layout/fragment_setup_extensions.xml | 41 ++++++++++++++++--- app/src/main/res/values/strings.xml | 2 + 10 files changed, 135 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt index 73017eeb..7c9207b8 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt @@ -83,9 +83,9 @@ import kotlin.concurrent.thread import kotlin.reflect.KClass import com.lagradost.cloudstream3.plugins.PluginManager import com.lagradost.cloudstream3.plugins.RepositoryManager -import com.lagradost.cloudstream3.plugins.RepositoryManager.PREBUILT_REPOSITORIES import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringRepo import com.lagradost.cloudstream3.ui.settings.extensions.RepositoryData +import com.lagradost.cloudstream3.ui.setup.SetupFragmentExtensions import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.Event @@ -133,6 +133,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { companion object { const val TAG = "MAINACT" val afterPluginsLoadedEvent = Event() + val afterRepositoryLoadedEvent = Event() } override fun onColorSelected(dialogId: Int, color: Int) { @@ -347,6 +348,7 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { Toast.LENGTH_LONG ) } + afterRepositoryLoadedEvent.invoke(true) } } @@ -695,9 +697,9 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener { // If no plugins bring up extensions screen } else if (PluginManager.getPluginsOnline().isEmpty() && PluginManager.getPluginsLocal().isEmpty() - && PREBUILT_REPOSITORIES.isNotEmpty() +// && PREBUILT_REPOSITORIES.isNotEmpty() ) { - navController.navigate(R.id.navigation_setup_extensions) + navController.navigate(R.id.navigation_setup_extensions, SetupFragmentExtensions.newInstance(false)) } } catch (e: Exception) { logError(e) diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt index 8266ebc7..ea60459d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/RepositoryManager.kt @@ -123,11 +123,15 @@ object RepositoryManager { } } + fun getRepositories(): Array { + return getKey(REPOSITORIES_KEY) ?: emptyArray() + } + // Don't want to read before we write in another thread private val repoLock = Mutex() suspend fun addRepository(repository: RepositoryData) { repoLock.withLock { - val currentRepos = getKey>(REPOSITORIES_KEY) ?: emptyArray() + val currentRepos = getRepositories() // No duplicates setKey(REPOSITORIES_KEY, (currentRepos + repository).distinctBy { it.url }) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt index 8a9c1de2..74230638 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt @@ -60,6 +60,7 @@ import com.lagradost.cloudstream3.utils.DataStoreHelper.deleteAllResumeStateIds import com.lagradost.cloudstream3.utils.DataStoreHelper.removeLastWatched import com.lagradost.cloudstream3.utils.DataStoreHelper.setResultWatchState import com.lagradost.cloudstream3.utils.Event +import com.lagradost.cloudstream3.utils.ExtractorLink import com.lagradost.cloudstream3.utils.HOMEPAGE_API import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showOptionSelectStringRes import com.lagradost.cloudstream3.utils.SubtitleHelper.getFlagFromIso diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt index 70c9550a..34b400e4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/ExtensionsFragment.kt @@ -14,6 +14,7 @@ import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController +import com.lagradost.cloudstream3.AcraApplication.Companion.openBrowser import com.lagradost.cloudstream3.CommonActivity.showToast import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.mvvm.Some @@ -25,9 +26,10 @@ import com.lagradost.cloudstream3.utils.Coroutines.ioSafe import com.lagradost.cloudstream3.utils.Coroutines.main import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe import kotlinx.android.synthetic.main.add_repo_input.* -import kotlinx.android.synthetic.main.add_repo_input.apply_btt -import kotlinx.android.synthetic.main.add_repo_input.cancel_btt import kotlinx.android.synthetic.main.fragment_extensions.* +import kotlinx.android.synthetic.main.fragment_extensions.list_repositories + +const val PUBLIC_REPOSITORIES_LIST = "https://recloudstream.github.io/repos/" class ExtensionsFragment : Fragment() { override fun onCreateView( @@ -98,6 +100,10 @@ class ExtensionsFragment : Fragment() { (repo_recycler_view?.adapter as? RepoAdapter)?.updateList(it) } + list_repositories?.setOnClickListener { + openBrowser(PUBLIC_REPOSITORIES_LIST) + } + observe(extensionViewModel.pluginStats) { when (it) { is Some.Success -> { @@ -154,6 +160,9 @@ class ExtensionsFragment : Fragment() { dialog.repo_url_input?.setText(fixedUrl) } } + dialog.list_repositories?.setOnClickListener { + openBrowser(PUBLIC_REPOSITORIES_LIST) + } // dialog.text2?.text = provider.name dialog.apply_btt?.setOnClickListener secondListener@{ diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentExtensions.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentExtensions.kt index b90be076..8287ae4a 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentExtensions.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentExtensions.kt @@ -7,8 +7,12 @@ import android.view.ViewGroup import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController +import com.lagradost.cloudstream3.AcraApplication.Companion.openBrowser +import com.lagradost.cloudstream3.MainActivity.Companion.afterRepositoryLoadedEvent import com.lagradost.cloudstream3.R +import com.lagradost.cloudstream3.plugins.RepositoryManager import com.lagradost.cloudstream3.plugins.RepositoryManager.PREBUILT_REPOSITORIES +import com.lagradost.cloudstream3.ui.settings.extensions.PUBLIC_REPOSITORIES_LIST import com.lagradost.cloudstream3.ui.settings.extensions.PluginsViewModel import com.lagradost.cloudstream3.ui.settings.extensions.RepoAdapter import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar @@ -19,6 +23,10 @@ import kotlinx.android.synthetic.main.fragment_setup_media.* class SetupFragmentExtensions : Fragment() { companion object { const val SETUP_EXTENSION_BUNDLE_IS_SETUP = "isSetup" + + /** + * If false then this is treated a singular screen with a done button + * */ fun newInstance(isSetup: Boolean): Bundle { return Bundle().apply { putBoolean(SETUP_EXTENSION_BUNDLE_IS_SETUP, isSetup) @@ -33,6 +41,33 @@ class SetupFragmentExtensions : Fragment() { return inflater.inflate(R.layout.fragment_setup_extensions, container, false) } + override fun onResume() { + super.onResume() + afterRepositoryLoadedEvent += ::setRepositories + } + + override fun onStop() { + super.onStop() + afterRepositoryLoadedEvent -= ::setRepositories + } + + private fun setRepositories(success: Boolean = true) { + val repositories = RepositoryManager.getRepositories() + PREBUILT_REPOSITORIES + val hasRepos = repositories.isNotEmpty() + repo_recycler_view?.isVisible = hasRepos + blank_repo_screen?.isVisible = !hasRepos + + if (hasRepos) { + repo_recycler_view?.adapter = RepoAdapter(true, {}, { + PluginsViewModel.downloadAll(activity, it.url, null) + }).apply { updateList(repositories) } + } else { + list_repositories?.setOnClickListener { + openBrowser(PUBLIC_REPOSITORIES_LIST) + } + } + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) context?.fixPaddingStatusbar(setup_root) @@ -40,10 +75,7 @@ class SetupFragmentExtensions : Fragment() { with(context) { if (this == null) return - - repo_recycler_view?.adapter = RepoAdapter(true, {}, { - PluginsViewModel.downloadAll(activity, it.url, null) - }).apply { updateList(PREBUILT_REPOSITORIES) } + setRepositories() if (!isSetup) { next_btt.setText(R.string.setup_done) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentLanguage.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentLanguage.kt index 5e8abdca..71472328 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentLanguage.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/setup/SetupFragmentLanguage.kt @@ -80,8 +80,10 @@ class SetupFragmentLanguage : Fragment() { next_btt?.setOnClickListener { // If no plugins go to plugins page - val nextDestination = if (PluginManager.getPluginsOnline() - .isEmpty() && PREBUILT_REPOSITORIES.isNotEmpty() + val nextDestination = if ( + PluginManager.getPluginsOnline().isEmpty() + && PluginManager.getPluginsLocal().isEmpty() + //&& PREBUILT_REPOSITORIES.isNotEmpty() ) R.id.action_navigation_global_to_navigation_setup_extensions else R.id.action_navigation_setup_language_to_navigation_setup_provider_languages diff --git a/app/src/main/res/layout/add_repo_input.xml b/app/src/main/res/layout/add_repo_input.xml index c9f41ca3..0e8b72aa 100644 --- a/app/src/main/res/layout/add_repo_input.xml +++ b/app/src/main/res/layout/add_repo_input.xml @@ -6,22 +6,35 @@ android:layout_height="match_parent" android:orientation="vertical"> - - android:paddingStart="?android:attr/listPreferredItemPaddingStart" - android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" - android:text="@string/add_repository" - android:textColor="?attr/textColor" - android:textSize="20sp" - android:textStyle="bold" /> + + + + + tools:listitem="@layout/repository_item" + tools:visibility="visible" /> + + - + android:layout_margin="20dp" + android:gravity="center" + android:orientation="vertical" + tools:visibility="gone"> + + + + + + + + + Disabled: %d Not downloaded: %d Add a repository to install site extensions + View public repositories + Public list