From 9da1ce603226409fa72b7fc7a773f190f6070e80 Mon Sep 17 00:00:00 2001 From: LagradOst Date: Fri, 2 Jul 2021 21:43:15 +0200 Subject: [PATCH] subtitles correct scroll --- .../com/lagradost/cloudstream3/MainAPI.kt | 26 ++++++++++++++++--- .../cloudstream3/ui/ControllerActivity.kt | 19 ++++++++------ .../cloudstream3/utils/CastHelper.kt | 3 ++- 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt index 9d474b81..5c38706f 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/MainAPI.kt @@ -14,6 +14,7 @@ import com.lagradost.cloudstream3.movieproviders.TrailersToProvider import com.lagradost.cloudstream3.utils.ExtractorLink import java.util.* import kotlin.collections.ArrayList +import kotlin.collections.HashMap const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0" val baseHeader = mapOf("User-Agent" to USER_AGENT) @@ -48,8 +49,10 @@ object APIHolder { fun Activity.getApiSettings(): HashSet { val settingsManager = PreferenceManager.getDefaultSharedPreferences(this) - return settingsManager.getStringSet(this.getString(R.string.search_providers_list_key), - setOf(apis[defProvider].name))?.toHashSet() ?: hashSetOf(apis[defProvider].name) + return settingsManager.getStringSet( + this.getString(R.string.search_providers_list_key), + setOf(apis[defProvider].name) + )?.toHashSet() ?: hashSetOf(apis[defProvider].name) } } @@ -72,7 +75,12 @@ abstract class MainAPI { } // callback is fired once a link is found, will return true if method is executed successfully - open fun loadLinks(data: String, isCasting: Boolean, subtitleCallback : (SubtitleFile) -> Unit, callback: (ExtractorLink) -> Unit): Boolean { + open fun loadLinks( + data: String, + isCasting: Boolean, + subtitleCallback: (SubtitleFile) -> Unit, + callback: (ExtractorLink) -> Unit + ): Boolean { return false } } @@ -103,6 +111,16 @@ fun sortUrls(urls: List): List { return urls.sortedBy { t -> -t.quality } } +fun sortSubs(urls: List): List { + val encounteredTimes = HashMap() + return urls.sortedBy { t -> t.lang }.map { + val times = encounteredTimes[it.lang]?.plus(1) ?: 1 + encounteredTimes[it.lang] = times + + SubtitleFile("${it.lang} ${if (times > 1) "($times)" else ""}", it.url) + } +} + enum class ShowStatus { Completed, Ongoing, @@ -120,7 +138,7 @@ enum class TvType { ONA, } -data class SubtitleFile(val lang : String, val url : String) +data class SubtitleFile(val lang: String, val url: String) interface SearchResponse { val name: String diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt index 0e72ea68..641a67fa 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/ControllerActivity.kt @@ -7,7 +7,6 @@ import android.view.Menu import android.view.View.* import android.widget.* import androidx.appcompat.app.AlertDialog -import androidx.core.graphics.toColorInt import com.fasterxml.jackson.databind.DeserializationFeature import com.fasterxml.jackson.databind.json.JsonMapper import com.fasterxml.jackson.module.kotlin.KotlinModule @@ -118,11 +117,20 @@ class SelectSourceController(val view: ImageView, val activity: ControllerActivi } else { val arrayAdapter = ArrayAdapter(view.context, R.layout.sort_bottom_single_choice) arrayAdapter.add("No Subtitles") - arrayAdapter.addAll(subTracks.map { it.name }.filterNotNull()) + arrayAdapter.addAll(subTracks.mapNotNull { it.name }) subtitleList.choiceMode = AbsListView.CHOICE_MODE_SINGLE subtitleList.adapter = arrayAdapter + val currentTracks = remoteMediaClient?.mediaStatus?.activeTrackIds + + val subtitleIndex = + if (currentTracks == null) 0 else subTracks.map { it.id } + .indexOfFirst { currentTracks.contains(it) } + 1 + + subtitleList.setSelection(subtitleIndex) + subtitleList.setItemChecked(subtitleIndex, true) + subtitleList.setOnItemClickListener { _, _, which, _ -> if (which == 0) { remoteMediaClient.setActiveMediaTracks(longArrayOf()) // NO SUBS @@ -164,6 +172,7 @@ class SelectSourceController(val view: ImageView, val activity: ControllerActivi providerList.choiceMode = AbsListView.CHOICE_MODE_SINGLE providerList.adapter = arrayAdapter + providerList.setSelection(sotringIndex) providerList.setItemChecked(sotringIndex, true) providerList.setOnItemClickListener { _, _, which, _ -> @@ -359,11 +368,5 @@ class ControllerActivity : ExpandedControllerActivity() { uiMediaController.bindViewToUIController(skipBackButton, SkipTimeController(skipBackButton, false)) uiMediaController.bindViewToUIController(skipForwardButton, SkipTimeController(skipForwardButton, true)) uiMediaController.bindViewToUIController(skipOpButton, SkipNextEpisodeController(skipOpButton)) - - - /* val progressBar: CastSeekBar? = findViewById(R.id.cast_seek_bar) - - progressBar?.backgroundTintList = (UIHelper.adjustAlpha(colorFromAttribute(R.attr.colorPrimary), 0.35f)) - */ } } \ No newline at end of file diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/CastHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/CastHelper.kt index 634d8b5c..f88ed6c6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/CastHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/CastHelper.kt @@ -14,6 +14,7 @@ import com.google.android.gms.cast.framework.media.RemoteMediaClient import com.google.android.gms.common.api.PendingResult import com.google.android.gms.common.images.WebImage import com.lagradost.cloudstream3.SubtitleFile +import com.lagradost.cloudstream3.sortSubs import com.lagradost.cloudstream3.ui.MetadataHolder import com.lagradost.cloudstream3.ui.result.ResultEpisode import com.lagradost.cloudstream3.utils.Coroutines.main @@ -50,7 +51,7 @@ object CastHelper { } var subIndex = 0 - val tracks = subtitles.map { + val tracks = sortSubs(subtitles).map { MediaTrack.Builder(subIndex++.toLong(), MediaTrack.TYPE_TEXT) .setName(it.lang) .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)