Merge branch 'master' into master

This commit is contained in:
Osten 2021-11-06 20:46:06 +01:00 committed by GitHub
commit c60852794f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 257 additions and 232 deletions

BIN
.github/downloads.jpg vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

BIN
.github/home.jpg vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 KiB

After

Width:  |  Height:  |  Size: 190 KiB

BIN
.github/player.jpg vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 176 KiB

BIN
.github/results.jpg vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 KiB

After

Width:  |  Height:  |  Size: 232 KiB

BIN
.github/search.jpg vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 316 KiB

After

Width:  |  Height:  |  Size: 321 KiB

View file

@ -13,7 +13,7 @@ import android.widget.FrameLayout
import android.widget.TextView import android.widget.TextView
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider import androidx.fragment.app.activityViewModels
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
@ -34,6 +34,7 @@ import com.lagradost.cloudstream3.ui.result.START_ACTION_RESUME_LATEST
import com.lagradost.cloudstream3.ui.search.* import com.lagradost.cloudstream3.ui.search.*
import com.lagradost.cloudstream3.ui.search.SearchFragment.Companion.filterSearchResponse import com.lagradost.cloudstream3.ui.search.SearchFragment.Companion.filterSearchResponse
import com.lagradost.cloudstream3.ui.search.SearchHelper.handleSearchClickCallback import com.lagradost.cloudstream3.ui.search.SearchHelper.handleSearchClickCallback
import com.lagradost.cloudstream3.utils.AppUtils
import com.lagradost.cloudstream3.utils.AppUtils.loadSearchResult import com.lagradost.cloudstream3.utils.AppUtils.loadSearchResult
import com.lagradost.cloudstream3.utils.DataStore.getKey import com.lagradost.cloudstream3.utils.DataStore.getKey
import com.lagradost.cloudstream3.utils.DataStore.setKey import com.lagradost.cloudstream3.utils.DataStore.setKey
@ -97,15 +98,15 @@ class HomeFragment : Fragment() {
} }
} }
private lateinit var homeViewModel: HomeViewModel private val homeViewModel: HomeViewModel by activityViewModels()
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
container: ViewGroup?, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View? {
homeViewModel = //homeViewModel =
ViewModelProvider(this).get(HomeViewModel::class.java) // ViewModelProvider(this).get(HomeViewModel::class.java)
return inflater.inflate(R.layout.fragment_home, container, false) return inflater.inflate(R.layout.fragment_home, container, false)
} }
@ -167,19 +168,9 @@ class HomeFragment : Fragment() {
} }
private val apiChangeClickListener = View.OnClickListener { view -> private val apiChangeClickListener = View.OnClickListener { view ->
val allApis = apis.filter { api -> api.hasMainPage }.toMutableList()
var validAPIs = allApis
val settingsManager = PreferenceManager.getDefaultSharedPreferences(context) val settingsManager = PreferenceManager.getDefaultSharedPreferences(context)
val currentPrefMedia = settingsManager.getInt(getString(R.string.preferred_media_settings), 0) val currentPrefMedia = settingsManager.getInt(getString(R.string.preferred_media_settings), 0)
val validAPIs = AppUtils.filterProviderByPreferredMedia(apis, currentPrefMedia).toMutableList()
// Filter API depending on preferred media type
if (currentPrefMedia > 0) {
val listEnumAnime = listOf(TvType.Anime, TvType.AnimeMovie, TvType.ONA)
val listEnumMovieTv = listOf(TvType.Movie, TvType.TvSeries, TvType.Cartoon)
val mediaTypeList = if (currentPrefMedia==1) listEnumMovieTv else listEnumAnime
validAPIs = allApis.filter { api -> api.supportedTypes.any { it in mediaTypeList } }.toMutableList()
}
validAPIs.add(0, randomApi) validAPIs.add(0, randomApi)
validAPIs.add(0, noneApi) validAPIs.add(0, noneApi)
@ -423,9 +414,11 @@ class HomeFragment : Fragment() {
reloadStored() reloadStored()
val apiName = context?.getKey<String>(HOMEPAGE_API) val apiName = context?.getKey<String>(HOMEPAGE_API)
val settingsManager = PreferenceManager.getDefaultSharedPreferences(context)
val currentPrefMedia = settingsManager.getInt(getString(R.string.preferred_media_settings), 0)
if (homeViewModel.apiName.value != apiName || apiName == null) { if (homeViewModel.apiName.value != apiName || apiName == null) {
//println("Caught home: " + homeViewModel.apiName.value + " at " + apiName) //println("Caught home: " + homeViewModel.apiName.value + " at " + apiName)
homeViewModel.loadAndCancel(apiName, 0) homeViewModel.loadAndCancel(apiName, currentPrefMedia)
} }
} }
} }

View file

@ -7,25 +7,24 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.lagradost.cloudstream3.APIHolder.apis import com.lagradost.cloudstream3.APIHolder.apis
import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull import com.lagradost.cloudstream3.APIHolder.getApiFromNameNull
import com.lagradost.cloudstream3.AcraApplication.Companion.context
import com.lagradost.cloudstream3.HomePageResponse import com.lagradost.cloudstream3.HomePageResponse
import com.lagradost.cloudstream3.MainAPI import com.lagradost.cloudstream3.MainAPI
import com.lagradost.cloudstream3.SearchResponse import com.lagradost.cloudstream3.SearchResponse
import com.lagradost.cloudstream3.TvType
import com.lagradost.cloudstream3.mvvm.Resource import com.lagradost.cloudstream3.mvvm.Resource
import com.lagradost.cloudstream3.ui.APIRepository import com.lagradost.cloudstream3.ui.APIRepository
import com.lagradost.cloudstream3.ui.APIRepository.Companion.noneApi import com.lagradost.cloudstream3.ui.APIRepository.Companion.noneApi
import com.lagradost.cloudstream3.ui.APIRepository.Companion.randomApi import com.lagradost.cloudstream3.ui.APIRepository.Companion.randomApi
import com.lagradost.cloudstream3.ui.WatchType import com.lagradost.cloudstream3.ui.WatchType
import com.lagradost.cloudstream3.utils.DOWNLOAD_HEADER_CACHE import com.lagradost.cloudstream3.utils.*
import com.lagradost.cloudstream3.utils.DataStore.getKey import com.lagradost.cloudstream3.utils.DataStore.getKey
import com.lagradost.cloudstream3.utils.DataStoreHelper import com.lagradost.cloudstream3.utils.DataStore.setKey
import com.lagradost.cloudstream3.utils.DataStoreHelper.getAllResumeStateIds import com.lagradost.cloudstream3.utils.DataStoreHelper.getAllResumeStateIds
import com.lagradost.cloudstream3.utils.DataStoreHelper.getAllWatchStateIds import com.lagradost.cloudstream3.utils.DataStoreHelper.getAllWatchStateIds
import com.lagradost.cloudstream3.utils.DataStoreHelper.getBookmarkedData import com.lagradost.cloudstream3.utils.DataStoreHelper.getBookmarkedData
import com.lagradost.cloudstream3.utils.DataStoreHelper.getLastWatched import com.lagradost.cloudstream3.utils.DataStoreHelper.getLastWatched
import com.lagradost.cloudstream3.utils.DataStoreHelper.getResultWatchState import com.lagradost.cloudstream3.utils.DataStoreHelper.getResultWatchState
import com.lagradost.cloudstream3.utils.DataStoreHelper.getViewPos import com.lagradost.cloudstream3.utils.DataStoreHelper.getViewPos
import com.lagradost.cloudstream3.utils.VideoDownloadHelper
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -154,16 +153,10 @@ class HomeViewModel : ViewModel() {
if (preferredApiName == noneApi.name) if (preferredApiName == noneApi.name)
loadAndCancel(noneApi) loadAndCancel(noneApi)
else if(preferredApiName == randomApi.name || api == null) { else if(preferredApiName == randomApi.name || api == null) {
val allApis = apis.filter { api -> api.hasMainPage }.toMutableList() var validAPIs = AppUtils.filterProviderByPreferredMedia(apis, currentPrefMedia)
var validAPIs = allApis val apiRandom = validAPIs.random()
if (currentPrefMedia > 0) { loadAndCancel(apiRandom)
val listEnumAnime = listOf(TvType.Anime, TvType.AnimeMovie, TvType.ONA) context?.setKey(HOMEPAGE_API, apiRandom.name)
val listEnumMovieTv = listOf(TvType.Movie, TvType.TvSeries, TvType.Cartoon)
val mediaTypeList = if (currentPrefMedia==1) listEnumMovieTv else listEnumAnime
validAPIs = allApis.filter { api -> api.supportedTypes.any { it in mediaTypeList } }.toMutableList()
}
loadAndCancel(validAPIs.random())
} else { } else {
loadAndCancel(api) loadAndCancel(api)
} }

View file

@ -34,7 +34,7 @@ import android.widget.Toast.LENGTH_SHORT
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider import androidx.fragment.app.activityViewModels
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import androidx.transition.Fade import androidx.transition.Fade
import androidx.transition.Transition import androidx.transition.Transition
@ -86,7 +86,6 @@ import com.lagradost.cloudstream3.utils.CastHelper.startCast
import com.lagradost.cloudstream3.utils.DataStore.getKey import com.lagradost.cloudstream3.utils.DataStore.getKey
import com.lagradost.cloudstream3.utils.DataStore.setKey import com.lagradost.cloudstream3.utils.DataStore.setKey
import com.lagradost.cloudstream3.utils.DataStoreHelper.setLastWatched import com.lagradost.cloudstream3.utils.DataStoreHelper.setLastWatched
import com.lagradost.cloudstream3.utils.DataStoreHelper.setViewPos
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showDialog
import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute import com.lagradost.cloudstream3.utils.UIHelper.colorFromAttribute
import com.lagradost.cloudstream3.utils.UIHelper.getNavigationBarHeight import com.lagradost.cloudstream3.utils.UIHelper.getNavigationBarHeight
@ -248,7 +247,7 @@ class PlayerFragment : Fragment() {
private var isFullscreen = false private var isFullscreen = false
private var isPlayerPlaying = true private var isPlayerPlaying = true
private lateinit var viewModel: ResultViewModel private val viewModel: ResultViewModel by activityViewModels()
private lateinit var playerData: PlayerData private lateinit var playerData: PlayerData
private lateinit var uriData: UriData private lateinit var uriData: UriData
private var isDownloadedFile = false private var isDownloadedFile = false
@ -791,20 +790,20 @@ class PlayerFragment : Fragment() {
if (this::exoPlayer.isInitialized) { if (this::exoPlayer.isInitialized) {
if (exoPlayer.duration > 0 && exoPlayer.currentPosition > 0) { if (exoPlayer.duration > 0 && exoPlayer.currentPosition > 0) {
context?.let { ctx -> context?.let { ctx ->
if (this::viewModel.isInitialized) { //if (this::viewModel.isInitialized) {
viewModel.setViewPos( viewModel.setViewPos(
ctx, ctx,
if (isDownloadedFile) uriData.id else getEpisode()?.id, if (isDownloadedFile) uriData.id else getEpisode()?.id,
exoPlayer.currentPosition, exoPlayer.currentPosition,
exoPlayer.duration exoPlayer.duration
) )
} else { /*} else {
ctx.setViewPos( ctx.setViewPos(
if (isDownloadedFile) uriData.id else getEpisode()?.id, if (isDownloadedFile) uriData.id else getEpisode()?.id,
exoPlayer.currentPosition, exoPlayer.currentPosition,
exoPlayer.duration exoPlayer.duration
) )
} }*/
if (isDownloadedFile) { if (isDownloadedFile) {
ctx.setLastWatched(uriData.parentId, uriData.id, uriData.episode, uriData.season, true) ctx.setLastWatched(uriData.parentId, uriData.id, uriData.episode, uriData.season, true)
@ -880,6 +879,7 @@ class PlayerFragment : Fragment() {
val isClick = !isLocked val isClick = !isLocked
exo_play?.isClickable = isClick exo_play?.isClickable = isClick
sources_btt?.isClickable = isClick
exo_pause?.isClickable = isClick exo_pause?.isClickable = isClick
exo_ffwd?.isClickable = isClick exo_ffwd?.isClickable = isClick
exo_rew?.isClickable = isClick exo_rew?.isClickable = isClick
@ -1055,8 +1055,9 @@ class PlayerFragment : Fragment() {
showToast(activity, resizeModes[resizeMode].second, LENGTH_SHORT) showToast(activity, resizeModes[resizeMode].second, LENGTH_SHORT)
} }
PlayerEventType.ShowSpeed.value -> { PlayerEventType.ShowSpeed.value -> {
val speedsText = listOf("0.5x", "0.75x", "1x", "1.25x", "1.5x", "1.75x", "2x") val speedsText =
val speedsNumbers = listOf(0.5f, 0.75f, 1f, 1.25f, 1.5f, 1.75f, 2f) listOf("0.5x", "0.75x", "0.85x", "1x", "1.15x", "1.25x", "1.4x", "1.5x", "1.75x", "2x")
val speedsNumbers = listOf(0.5f, 0.75f, 0.85f, 1f, 1.15f, 1.25f, 1.4f, 1.5f, 1.75f, 2f)
val speedIndex = speedsNumbers.indexOf(playbackSpeed) val speedIndex = speedsNumbers.indexOf(playbackSpeed)
context?.let { ctx -> context?.let { ctx ->
@ -1383,7 +1384,7 @@ class PlayerFragment : Fragment() {
} }
if (!isDownloadedFile) { if (!isDownloadedFile) {
viewModel = ViewModelProvider(activity ?: this).get(ResultViewModel::class.java) //viewModel = ViewModelProvider(activity ?: this).get(ResultViewModel::class.java)
observeDirectly(viewModel.episodes) { _episodes -> observeDirectly(viewModel.episodes) { _episodes ->
episodes = _episodes episodes = _episodes

View file

@ -23,7 +23,7 @@ import androidx.core.text.color
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.core.widget.NestedScrollView import androidx.core.widget.NestedScrollView
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider import androidx.fragment.app.activityViewModels
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@ -165,7 +165,7 @@ class ResultFragment : Fragment() {
} }
private var currentLoadingCount = 0 // THIS IS USED TO PREVENT LATE EVENTS, AFTER DISMISS WAS CLICKED private var currentLoadingCount = 0 // THIS IS USED TO PREVENT LATE EVENTS, AFTER DISMISS WAS CLICKED
private lateinit var viewModel: ResultViewModel private val viewModel: ResultViewModel by activityViewModels()
private var allEpisodes: HashMap<Int, ArrayList<ExtractorLink>> = HashMap() private var allEpisodes: HashMap<Int, ArrayList<ExtractorLink>> = HashMap()
private var allEpisodesSubs: HashMap<Int, ArrayList<SubtitleFile>> = HashMap() private var allEpisodesSubs: HashMap<Int, ArrayList<SubtitleFile>> = HashMap()
private var currentHeaderName: String? = null private var currentHeaderName: String? = null
@ -178,8 +178,8 @@ class ResultFragment : Fragment() {
container: ViewGroup?, container: ViewGroup?,
savedInstanceState: Bundle?, savedInstanceState: Bundle?,
): View? { ): View? {
viewModel = // viewModel =
ViewModelProvider(activity ?: this).get(ResultViewModel::class.java) // ViewModelProvider(activity ?: this).get(ResultViewModel::class.java)
return inflater.inflate(R.layout.fragment_result, container, false) return inflater.inflate(R.layout.fragment_result, container, false)
} }
@ -1161,6 +1161,7 @@ class ResultFragment : Fragment() {
} }
if (restart || viewModel.resultResponse.value == null) { if (restart || viewModel.resultResponse.value == null) {
viewModel.clear()
viewModel.load(ctx, tempUrl, apiName, showFillers) viewModel.load(ctx, tempUrl, apiName, showFillers)
} }
} }

View file

@ -37,6 +37,22 @@ const val EPISODE_RANGE_SIZE = 50
const val EPISODE_RANGE_OVERLOAD = 60 const val EPISODE_RANGE_OVERLOAD = 60
class ResultViewModel : ViewModel() { class ResultViewModel : ViewModel() {
fun clear() {
repo = null
_resultResponse.value = null
_episodes.value = null
episodeById.value = null
_publicEpisodes.value = null
_publicEpisodesCount.value = null
_rangeOptions.value = null
selectedRange.value = null
selectedRangeInt.value = null
_dubStatus.value = null
id.value = null
selectedSeason.value = -2
_dubSubEpisodes.value = null
}
private var repo: APIRepository? = null private var repo: APIRepository? = null
private val _resultResponse: MutableLiveData<Resource<Any?>> = MutableLiveData() private val _resultResponse: MutableLiveData<Resource<Any?>> = MutableLiveData()
@ -55,7 +71,7 @@ class ResultViewModel : ViewModel() {
val publicEpisodes: LiveData<Resource<List<ResultEpisode>>> get() = _publicEpisodes val publicEpisodes: LiveData<Resource<List<ResultEpisode>>> get() = _publicEpisodes
val publicEpisodesCount: LiveData<Int> get() = _publicEpisodesCount val publicEpisodesCount: LiveData<Int> get() = _publicEpisodesCount
val dubStatus: MutableLiveData<DubStatus> get() = _dubStatus val dubStatus: LiveData<DubStatus> get() = _dubStatus
private val _dubStatus: MutableLiveData<DubStatus> = MutableLiveData() private val _dubStatus: MutableLiveData<DubStatus> = MutableLiveData()
private val page: MutableLiveData<LoadResponse> = MutableLiveData() private val page: MutableLiveData<LoadResponse> = MutableLiveData()
@ -63,10 +79,10 @@ class ResultViewModel : ViewModel() {
val selectedSeason: MutableLiveData<Int> = MutableLiveData(-2) val selectedSeason: MutableLiveData<Int> = MutableLiveData(-2)
val seasonSelections: MutableLiveData<List<Int?>> = MutableLiveData() val seasonSelections: MutableLiveData<List<Int?>> = MutableLiveData()
val dubSubSelections: MutableLiveData<Set<DubStatus>> get() = _dubSubSelections val dubSubSelections: LiveData<Set<DubStatus>> get() = _dubSubSelections
private val _dubSubSelections: MutableLiveData<Set<DubStatus>> = MutableLiveData() private val _dubSubSelections: MutableLiveData<Set<DubStatus>> = MutableLiveData()
val dubSubEpisodes: MutableLiveData<Map<DubStatus, List<ResultEpisode>>?> get() = _dubSubEpisodes val dubSubEpisodes: LiveData<Map<DubStatus, List<ResultEpisode>>?> get() = _dubSubEpisodes
private val _dubSubEpisodes: MutableLiveData<Map<DubStatus, List<ResultEpisode>>?> = MutableLiveData() private val _dubSubEpisodes: MutableLiveData<Map<DubStatus, List<ResultEpisode>>?> = MutableLiveData()
private val _watchStatus: MutableLiveData<WatchType> = MutableLiveData() private val _watchStatus: MutableLiveData<WatchType> = MutableLiveData()
@ -180,7 +196,7 @@ class ResultViewModel : ViewModel() {
fun changeDubStatus(context: Context, status: DubStatus?) { fun changeDubStatus(context: Context, status: DubStatus?) {
dubSubEpisodes.value?.get(status)?.let { episodes -> dubSubEpisodes.value?.get(status)?.let { episodes ->
dubStatus.postValue(status) _dubStatus.postValue(status)
updateEpisodes(context, null, episodes, null) updateEpisodes(context, null, episodes, null)
} }
} }

View file

@ -29,6 +29,9 @@ import com.lagradost.cloudstream3.mvvm.logError
import com.lagradost.cloudstream3.network.initRequestClient import com.lagradost.cloudstream3.network.initRequestClient
import com.lagradost.cloudstream3.ui.APIRepository import com.lagradost.cloudstream3.ui.APIRepository
import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment
import com.lagradost.cloudstream3.utils.AppUtils
import com.lagradost.cloudstream3.utils.DataStore.setKey
import com.lagradost.cloudstream3.utils.HOMEPAGE_API
import com.lagradost.cloudstream3.utils.InAppUpdater.Companion.runAutoUpdate import com.lagradost.cloudstream3.utils.InAppUpdater.Companion.runAutoUpdate
import com.lagradost.cloudstream3.utils.Qualities import com.lagradost.cloudstream3.utils.Qualities
import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showBottomDialog
@ -203,8 +206,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
return@setOnPreferenceClickListener true return@setOnPreferenceClickListener true
} }
fun getDownloadDirs(): List<String> { fun getDownloadDirs(): List<String> {
val defaultDir = getDownloadDir()?.filePath val defaultDir = getDownloadDir()?.filePath
@ -246,29 +248,29 @@ class SettingsFragment : PreferenceFragmentCompat() {
} }
return@setOnPreferenceClickListener true return@setOnPreferenceClickListener true
} }
preferedMediaTypePreference.setOnPreferenceClickListener {
val prefNames = resources.getStringArray(R.array.media_type_pref)
val prefValues = resources.getIntArray(R.array.media_type_pref_values)
val settingsManager = PreferenceManager.getDefaultSharedPreferences(context)
if (preferedMediaTypePreference != null) { val currentPrefMedia =
preferedMediaTypePreference.setOnPreferenceClickListener { settingsManager.getInt(getString(R.string.preferred_media_settings), 0)
val prefNames = resources.getStringArray(R.array.media_type_pref)
val prefValues = resources.getIntArray(R.array.media_type_pref_values)
val settingsManager = PreferenceManager.getDefaultSharedPreferences(context)
val currentPrefMedia = context?.showBottomDialog(
settingsManager.getInt(getString(R.string.preferred_media_settings), 0) prefNames.toList(),
prefValues.indexOf(currentPrefMedia),
context?.showBottomDialog( getString(R.string.preferred_media_settings),
prefNames.toList(), true,
prefValues.indexOf(currentPrefMedia), {}) {
getString(R.string.preferred_media_settings), settingsManager.edit()
true, .putInt(getString(R.string.preferred_media_settings), prefValues[it])
{}) { .apply()
settingsManager.edit() val apiRandom = AppUtils.filterProviderByPreferredMedia(apis, prefValues[it]).random()
.putInt(getString(R.string.preferred_media_settings), prefValues[it]) context?.setKey(HOMEPAGE_API, apiRandom.name)
.apply() context?.initRequestClient()
context?.initRequestClient()
}
return@setOnPreferenceClickListener true
} }
return@setOnPreferenceClickListener true
} }
allLayoutPreference.setOnPreferenceClickListener { allLayoutPreference.setOnPreferenceClickListener {

View file

@ -18,8 +18,10 @@ import com.google.android.gms.cast.framework.CastState
import com.google.android.gms.common.ConnectionResult import com.google.android.gms.common.ConnectionResult
import com.google.android.gms.common.GoogleApiAvailability import com.google.android.gms.common.GoogleApiAvailability
import com.google.android.gms.common.wrappers.Wrappers import com.google.android.gms.common.wrappers.Wrappers
import com.lagradost.cloudstream3.MainAPI
import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.R
import com.lagradost.cloudstream3.SearchResponse import com.lagradost.cloudstream3.SearchResponse
import com.lagradost.cloudstream3.TvType
import com.lagradost.cloudstream3.ui.result.ResultFragment import com.lagradost.cloudstream3.ui.result.ResultFragment
import com.lagradost.cloudstream3.utils.UIHelper.navigate import com.lagradost.cloudstream3.utils.UIHelper.navigate
@ -75,9 +77,11 @@ object AppUtils {
return "" return ""
} }
//private val viewModel: ResultViewModel by activityViewModels()
fun AppCompatActivity.loadResult(url: String, apiName: String, startAction: Int = 0, startValue: Int = 0) { fun AppCompatActivity.loadResult(url: String, apiName: String, startAction: Int = 0, startValue: Int = 0) {
this.runOnUiThread { this.runOnUiThread {
viewModelStore.clear() // viewModelStore.clear()
this.navigate(R.id.global_to_navigation_results, ResultFragment.newInstance(url, apiName, startAction, startValue)) this.navigate(R.id.global_to_navigation_results, ResultFragment.newInstance(url, apiName, startAction, startValue))
} }
} }
@ -184,4 +188,19 @@ object AppUtils {
} }
return currentAudioFocusRequest return currentAudioFocusRequest
} }
fun filterProviderByPreferredMedia(apis: ArrayList<MainAPI>, currentPrefMedia: Int): List<MainAPI> {
val allApis = apis.filter { api -> api.hasMainPage }
return if (currentPrefMedia < 1) {
allApis
} else {
// Filter API depending on preferred media type
val listEnumAnime = listOf(TvType.Anime, TvType.AnimeMovie, TvType.ONA)
val listEnumMovieTv = listOf(TvType.Movie, TvType.TvSeries, TvType.Cartoon)
val mediaTypeList = if (currentPrefMedia==1) listEnumMovieTv else listEnumAnime
val filteredAPI = allApis.filter { api -> api.supportedTypes.any { it in mediaTypeList } }
filteredAPI
}
}
} }

View file

@ -1,4 +1,4 @@
<vector android:height="24dp" android:tint="#FFFFFF" <vector android:height="24dp" android:tint="?attr/white"
android:viewportHeight="24" android:viewportWidth="24" android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M8,5v14l11,-7z"/> <path android:fillColor="@android:color/white" android:pathData="M8,5v14l11,-7z"/>

View file

@ -25,16 +25,16 @@
<FrameLayout <FrameLayout
android:id="@+id/home_loading_statusbar" android:id="@+id/home_loading_statusbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="60dp"> android:layout_height="70dp">
<ImageView <ImageView
android:id="@+id/home_change_api_loading" android:id="@+id/home_change_api_loading"
android:layout_margin="10dp" android:layout_margin="10dp"
android:layout_gravity="center_vertical|end" android:layout_gravity="center_vertical|end"
android:background="?android:attr/selectableItemBackgroundBorderless" android:background="?android:attr/selectableItemBackgroundBorderless"
android:src="@drawable/ic_outline_settings_24" android:src="@drawable/ic_baseline_keyboard_arrow_down_24"
android:layout_width="25dp" android:layout_width="30dp"
android:layout_height="25dp" android:layout_height="30dp"
android:contentDescription="@string/home_change_provider_img_des"> android:contentDescription="@string/home_change_provider_img_des">
</ImageView> </ImageView>
</FrameLayout> </FrameLayout>
@ -146,9 +146,9 @@
android:layout_gravity="center|end" android:layout_gravity="center|end"
android:background="?android:attr/selectableItemBackgroundBorderless" android:background="?android:attr/selectableItemBackgroundBorderless"
android:src="@drawable/ic_outline_settings_24" android:src="@drawable/ic_baseline_keyboard_arrow_down_24"
android:layout_width="25dp" android:layout_width="30dp"
android:layout_height="25dp" android:layout_height="30dp"
android:contentDescription="@string/home_change_provider_img_des"> android:contentDescription="@string/home_change_provider_img_des">
<requestFocus/> <requestFocus/>
</ImageView> </ImageView>

View file

@ -7,192 +7,192 @@
<string name="app_dub_sub_episode_text_format">%s Ep %d</string> <string name="app_dub_sub_episode_text_format">%s Ep %d</string>
<!-- IS NOT NEEDED TO TRANSLATE AS THEY ARE ONLY USED FOR SCREEN READERS AND WONT SHOW UP TO NORMAL USERS --> <!-- IS NOT NEEDED TO TRANSLATE AS THEY ARE ONLY USED FOR SCREEN READERS AND WONT SHOW UP TO NORMAL USERS -->
<string name="result_poster_img_des">Paskil</string> <string name="result_poster_img_des">Poster</string>
<string name="search_poster_img_des">@string/result_poster_img_des</string> <string name="search_poster_img_des">@string/result_poster_img_des</string>
<string name="episode_poster_img_des">Episodyo Paskil</string> <string name="episode_poster_img_des">Episode Poster</string>
<string name="home_main_poster_img_des">Pangunahing Paskil</string> <string name="home_main_poster_img_des">Main Poster</string>
<string name="home_next_random_img_des">Susunod Walang tiyak</string> <string name="home_next_random_img_des">Next Random</string>
<string name="go_back_img_des">Pumunta Likod</string> <string name="go_back_img_des">Go back</string>
<string name="home_change_provider_img_des">Pagbabago Pinagmulan</string> <string name="home_change_provider_img_des">Change Provider</string>
<string name="preview_background_img_des">Prebiyu Likuran</string> <string name="preview_background_img_des">Preview Background</string>
<!-- TRANSLATE, BUT DON'T FORGET FORMAT --> <!-- TRANSLATE, BUT DON'T FORGET FORMAT -->
<string name="player_speed_text_format" formatted="true">Tulin (%.2fx)</string> <string name="player_speed_text_format" formatted="true">Bilis (%.2fx)</string>
<string name="rated_format" formatted="true">Tantiyahin: %.1f</string> <string name="rated_format" formatted="true">Rated: %.1f</string>
<string name="new_update_format" formatted="true">Bago magpabago itatag!\n%s -> %s</string> <string name="new_update_format" formatted="true">Bagong update!\n%s -> %s</string>
<string name="filler_format" formatted="true">(Sobra) %s</string> <string name="filler_format" formatted="true">(Filler) %s</string>
<string name="app_name">CloudStream</string> <string name="app_name">CloudStream</string>
<string name="title_home">Simula</string> <string name="title_home">Home</string>
<string name="title_search">Hanapin</string> <string name="title_search">Maghanap</string>
<string name="title_downloads">Itabi</string> <string name="title_downloads">Mga Downloads</string>
<string name="title_settings">Kagustuhan</string> <string name="title_settings">Mga Settings</string>
<string name="search_hint">Hanapin</string> <string name="search_hint">Maghanap</string>
<string name="no_data">Wala Datos</string> <string name="no_data">Walang datos</string>
<string name="episode_more_options_des">Mas Opsyon</string> <string name="episode_more_options_des">Opsyon</string>
<string name="next_episode">Susunod Episodyo</string> <string name="next_episode">Susunod na Episode</string>
<string name="result_tags">Dyanra</string> <string name="result_tags">Genres</string>
<string name="result_share">Magbahagi</string> <string name="result_share">I-share</string>
<string name="result_open_in_browser">Buksan Ito Panlabas</string> <string name="result_open_in_browser">Buksan sa browser</string>
<string name="skip_loading">Laktawan Pagkarga</string> <string name="skip_loading">Skip Loading…</string>
<string name="loading_chromecast">Pagkarga</string> <string name="loading_chromecast">Loading</string>
<string name="type_watching">Magbantay</string> <string name="type_watching">Pinapanood</string>
<string name="type_on_hold">Sa-Humawak</string> <string name="type_on_hold">Inihinto</string>
<string name="type_completed">Tapos</string> <string name="type_completed">Tapos nang panoorin</string>
<string name="type_dropped">Bumagsak</string> <string name="type_dropped">Ayaw nang panoorin</string>
<string name="type_plan_to_watch">Balak panoorin</string> <string name="type_plan_to_watch">Balak panoorin</string>
<string name="type_none">Wala</string> <string name="type_none">None</string>
<string name="play_movie_button">Laruin Pelikula</string> <string name="play_movie_button">I-play ang Movie</string>
<string name="play_torrent_button">Laruin Torrent</string> <string name="play_torrent_button">Stream Torrent</string>
<string name="pick_source">Pinagmulan</string> <string name="pick_source">Sources</string>
<string name="pick_subtitle">pangalawang pamagat</string> <string name="pick_subtitle">Subtitles</string>
<string name="reload_error">Subukan muli</string> <string name="reload_error">Retry connection</string>
<string name="result_go_back">Pumunta Likod</string> <string name="result_go_back">Go back</string>
<string name="play_episode">Laruin Episodyo</string> <string name="play_episode">I-play ang episode</string>
<!--<string name="need_storage">Payagan sa Itabi</string>--> <!--<string name="need_storage">Payagan sa Itabi</string>-->
<string name="download">Itabi</string> <string name="download">Download</string>
<string name="downloaded">Na naka-imbak</string> <string name="downloaded">Downloaded</string>
<string name="downloading">Pag-iimbak</string> <string name="downloading">Downloading</string>
<string name="download_paused">Pag-iimbak humawak</string> <string name="download_paused">Download Paused</string>
<string name="download_started">Pag-iimbak</string> <string name="download_started">Download Started</string>
<string name="download_failed">Pag-iimbak nabigo</string> <string name="download_failed">Download Failed</string>
<string name="download_canceled">Pag-iimbak Kinansela</string> <string name="download_canceled">Download Canceled</string>
<string name="download_done">Tapos</string> <string name="download_done">Download Done</string>
<string name="error_loading_links_toast">Kamalian</string> <string name="error_loading_links_toast">Error Loading Links</string>
<string name="download_storage_text">Espasyo sa Imbakan</string> <string name="download_storage_text">Internal Storage</string>
<string name="app_dubbed_text">Dub</string> <string name="app_dubbed_text">Dub</string>
<string name="app_subbed_text">Sub</string> <string name="app_subbed_text">Sub</string>
<string name="popup_delete_file">Alisin</string> <string name="popup_delete_file">I-delete ang file</string>
<string name="popup_play_file">Laruin</string> <string name="popup_play_file">I-play ang file</string>
<string name="popup_resume_download">Ipagpatuloy</string> <string name="popup_resume_download">I-resume ang download</string>
<string name="popup_pause_download">Tumigil Sandali</string> <string name="popup_pause_download">I-pause ang download</string>
<string name="pref_disable_acra">Huwag Paganahin ang Awtomatikong Pag-uulat ng Bug</string> <string name="pref_disable_acra">Huwag awtomatikong mag-ulat ng bug</string>
<string name="home_more_info">Mas Impormasyon</string> <string name="home_more_info">More Info</string>
<string name="home_expanded_hide">Itago</string> <string name="home_expanded_hide">Itago</string>
<string name="home_play">Laruin</string> <string name="home_play">I-play</string>
<string name="home_info">Impormasyon</string> <string name="home_info">Impormasyon</string>
<string name="filter_bookmarks">Salain ang mga Bookmark</string> <string name="filter_bookmarks">Filter Bookmarks</string>
<string name="error_bookmarks_text">Bookmark</string> <string name="error_bookmarks_text">Bookmark</string>
<string name="action_remove_from_bookmarks">Tanggalin</string> <string name="action_remove_from_bookmarks">Tanggalin</string>
<string name="sort_apply">Gamitin</string> <string name="sort_apply">Kumpirmahin</string>
<string name="sort_cancel">Kanselahin</string> <string name="sort_cancel">Kanselahin</string>
<string name="player_speed">Silis ng Playback</string> <string name="player_speed">Bilis ng Playback</string>
<string name="subtitles_settings">Pangalawang Pamagat Kagustuhan</string> <string name="subtitles_settings">Subtitle Setting</string>
<string name="subs_text_color">Kulay ng Teksto</string> <string name="subs_text_color">Kulay ng Teksto</string>
<string name="subs_outline_color">Kulay ng Balangkas</string> <string name="subs_outline_color">Kulay ng Outline</string>
<string name="subs_background_color">Kulay ng Background</string> <string name="subs_background_color">Kulay ng Background</string>
<string name="subs_window_color">Kulay ng Bintana</string> <string name="subs_window_color">Window Color</string>
<string name="subs_edge_type">Uri ng Gilid</string> <string name="subs_edge_type">Edge Type</string>
<string name="subs_subtitle_elevation">Pangalawang Pamagat Kataasan</string> <string name="subs_subtitle_elevation">Subtitle Elevation</string>
<string name="subs_font">Font Estilio</string> <string name="subs_font">Istilo ng Font</string>
<string name="subs_font_size">Font Laki</string> <string name="subs_font_size">Laki ng Font</string>
<string name="search_provider_text_providers">Paghahanap gamit ang pinagmulan</string> <string name="search_provider_text_providers">Search using providers</string>
<string name="search_provider_text_types">Paghahanap gamit ang uri</string> <string name="search_provider_text_types">Search using types</string>
<string name="benene_count_text">%d Benenes ibinigay sa devs</string> <string name="benene_count_text">%d Benenes na ibinigay sa mga devs</string>
<string name="benene_count_text_none">Wala Benenes binigay</string> <string name="benene_count_text_none">Walang Benenes na binigay</string>
<string name="subs_auto_select_language">Awtomatikong pilin ang wika</string> <string name="subs_auto_select_language">Awtomatikong magpili ng lenggwahe</string>
<string name="subs_download_languages">Itabi Wika</string> <string name="subs_download_languages">Download Languages</string>
<string name="subs_hold_to_reset_to_default">Pindutin nang matagal upang i-reset sa default</string> <string name="subs_hold_to_reset_to_default">Pindutin nang matagal upang i-reset sa default</string>
<string name="continue_watching">Magpatuloy</string> <string name="continue_watching">Ipagpatuloy ang pinapanood</string>
<string name="action_remove_watching">Tanggalin</string> <string name="action_remove_watching">Tanggalin</string>
<string name="action_open_watching">Mas impormasyon</string> <string name="action_open_watching">Impormasyon</string>
<string name="vpn_might_be_needed">Maaaring kailanganin ang isang VPN upang gumana ito ng tama.</string> <string name="vpn_might_be_needed">Maaaring nangangailangan gumamit ng VPN upang gumana ito</string>
<string name="vpn_torrent">Ito ay torrent, Inirerekomenda ang isang VPN</string> <string name="vpn_torrent">Ito ay torrent, inirerekomenda ang paggamit ng VPN</string>
<string name="torrent_plot">Paglalarawan</string> <string name="torrent_plot">Deskripsyon</string>
<string name="normal_no_plot">Walang nahanap na impormasyon</string> <string name="normal_no_plot">Walang nakitang plot</string>
<string name="torrent_no_plot">Walang nahanap na paglalarawan</string> <string name="torrent_no_plot">Walang nakitang deskripsyon</string>
<string name="picture_in_picture">Larawan-sa-Larawan</string> <string name="picture_in_picture">Picture-in-picture</string>
<string name="picture_in_picture_des">Nagpapatuloy sa pag-playback sa isang maliit na manlalaro sa itaas</string> <string name="picture_in_picture_des">Nagpapatuloy ang playback sa isang maliit na player sa itaas ng ibang apps</string>
<string name="player_size_settings">Pindutan na baguhin ang laki</string> <string name="player_size_settings">Pindutan upang baguhin ang laki</string>
<string name="player_size_settings_des">Alisin ang mga itim na hangganan</string> <string name="player_size_settings_des">Alisin ang black borders</string>
<string name="player_subtitles_settings">Pangalawang Pamagat</string> <string name="player_subtitles_settings">Subtitles</string>
<string name="player_subtitles_settings_des">Pangalawang Pamagat Kagustuhan</string> <string name="player_subtitles_settings_des">Player subtitles settings</string>
<string name="eigengraumode_settings">Eigengravy Mode</string> <string name="eigengraumode_settings">Eigengravy Mode</string>
<string name="eigengraumode_settings_des">Nagdadagdag ng bilis kagustuhan</string> <string name="eigengraumode_settings_des">Nagdadagdag ng opsyon sa player upang baguhin ang bilis ng pinapanood</string>
<string name="swipe_to_seek_settings">Palo sa maghanap</string> <string name="swipe_to_seek_settings">Swipe to seek</string>
<string name="swipe_to_seek_settings_des">Palo sa Kaliwa o Kanan sa kontrolin ang oras sa</string> <string name="swipe_to_seek_settings_des">Swipe pakanan o pakaliwa upang makontrol ang oras ng pinapanood</string>
<string name="swipe_to_change_settings">Palo sa magbago kagustuhan</string> <string name="swipe_to_change_settings">Swipe to change settings</string>
<string name="swipe_to_change_settings_des">Palo sa Kaliwa o Kanan sa magbago ningning o dami</string> <string name="swipe_to_change_settings_des">Swipe pataas/pababa sa kanan o kaliwang bahagi ng player upang dagdagan/bawasan ang brightness/volume</string>
<string name="double_tap_to_seek_settings">Doble tapikin sa magnahap</string> <string name="double_tap_to_seek_settings">Double tap to seek</string>
<string name="double_tap_to_seek_settings_des">Doble tapikin sa kaliwa o kanan panig sa gumalaw pasulong o paatras</string> <string name="double_tap_to_seek_settings_des">Tapikin ng dalawang beses sa kanan o kaliwang bahagi ng player upang mag-forward/backward</string>
<string name="use_system_brightness_settings">Gamitin sistema ningning</string> <string name="use_system_brightness_settings">Gamitin ang brightness ng system</string>
<string name="use_system_brightness_settings_des">Gamitin sistemo liwanag sa halip na madilim kalupkop</string> <string name="use_system_brightness_settings_des">Gamitin ang brightness ng system para sa player</string>
<string name="search">Paghahanap</string> <string name="search">Maghanap</string>
<string name="settings_info">Impormasyon</string> <string name="settings_info">Impormasyon</string>
<string name="advanced_search">Pinahusay paghahanap</string> <string name="advanced_search">Adbans na maghanap</string>
<string name="advanced_search_des">Nagbibigay sa iyo ng mga resulta ng paghahanap na pinaghihiwalay ng mga pinagmulan</string> <string name="advanced_search_des">Magbibigay ng pinaghiwa-hiwalay na resulta</string>
<string name="bug_report_settings_off">Nagpapadala lamang ng ulat tungkol sa pagkabigo</string> <string name="bug_report_settings_off">Nagpapadala lamang ng data kung nag-crash ang app</string>
<string name="bug_report_settings_on">Hindi nagpapadala ng ulat</string> <string name="bug_report_settings_on">Hindi magpapadala ng kahit anong data</string>
<string name="show_fillers_settings">Magpakita sobra episodyo para sa anime</string> <string name="show_fillers_settings">Ipakita ang filler episode sa anime</string>
<string name="updates_settings">Magpakita magpabago</string> <string name="updates_settings">Ipakita kung may bagong update</string>
<string name="updates_settings_des">Awtomatikong maghanap ng bago sa simula</string> <string name="updates_settings_des">Awtomatikong mag-check ng bagong update pagbukas ng app</string>
<string name="uprereleases_settings">Magpabago sa pang-eksperimentong paglabas</string> <string name="uprereleases_settings">Update to prereleases</string>
<string name="uprereleases_settings_des">Maghanap lamang ng pang-eksperimentong paglabas</string> <string name="uprereleases_settings_des">Search for prerelease updates instead of full releases only</string>
<string name="github">Github</string> <string name="github">Github</string>
<string name="lightnovel">Light novel app ng parehong koponan</string> <string name="lightnovel">Light novel app ng parehong devs</string>
<string name="anim">Anime app ng parehong koponan</string> <string name="anim">Anime app ng parehong devs</string>
<string name="discord">Jumali Discord</string> <string name="discord">Sumali sa Discord</string>
<string name="benene">Magbigay ng benene sa ang devs</string> <string name="benene">Magbigay ng benene sa ang devs</string>
<string name="benene_des">Sumali benene</string> <string name="benene_des">Sumali benene</string>
<string name="app_language">Wika</string> <string name="app_language">Wika</string>
<string name="no_chomecast_support_toast">Ito pinagmulan may hindi chromecast suporta</string> <string name="no_chomecast_support_toast">Walang chromecast support ang provider na ito</string>
<string name="no_links_found_toast">Walang nakitang laruin</string> <string name="no_links_found_toast">Walang link na nakita</string>
<string name="copy_link_toast">Kinopya</string> <string name="copy_link_toast">Link copied to clipboard</string>
<string name="play_episode_toast">Laruin Episodyo</string> <string name="play_episode_toast">Play Episode</string>
<string name="subs_default_reset_toast">I-reset sa default</string> <string name="subs_default_reset_toast">I-reset sa default value</string>
<string name="acra_report_toast">Ipinadala ang ulat ng pag-crash</string> <string name="acra_report_toast">Paumanhin, ang app ay nag-crash. Isang anonymous bug report ang ipapadala sa developers</string>
<string name="season">Bahagi</string> <string name="season">Season</string>
<string name="no_season">Hindi Bahagi</string> <string name="no_season">No season</string>
<string name="episode">Episodyo</string> <string name="episode">Episode</string>
<string name="episodes">Episodyo</string> <string name="episodes">Episodes</string>
<string name="season_short">B</string> <string name="season_short">S</string>
<string name="episode_short">E</string> <string name="episode_short">E</string>
<string name="delete_file">Tanggalin</string> <string name="delete_file">Burahin ang file</string>
<string name="delete">Tanggalin</string> <string name="delete">Tanggalin</string>
<string name="pause">Humawak</string> <string name="pause">I-pause</string>
<string name="resume">Magpatuloy</string> <string name="resume">I-resume</string>
<string name="delete_message">Permanenteng tatanggalin %s\nSigurado ka ba?</string> <string name="delete_message">This will permanently delete %s\nAre you sure?</string>
<string name="status_ongoing">Nagpapatuloy</string> <string name="status_ongoing">Patuloy</string>
<string name="status_completed">Nakumpleto</string> <string name="status_completed">Tapos na</string>
<string name="status">Katayuan</string> <string name="status">Katayuan</string>
<string name="year">Taon</string> <string name="year">Taon</string>
<string name="rating">Marka</string> <string name="rating">Marka</string>
<string name="duration">Tagal</string> <string name="duration">Tagal</string>
<string name="site">Lugar</string> <string name="site">Site</string>
<string name="synopsis">Sinopsis</string> <string name="synopsis">Sinopsis</string>
<string name="queued">nakapila</string> <string name="queued">nakapila</string>
<string name="no_subtitles">walang subtitles</string> <string name="no_subtitles">walang subtitles</string>
<string name="default_subtitles">Default</string> <string name="default_subtitles">Default</string>
<string name="free_storage">Walang laman</string> <string name="free_storage">Bakante</string>
<string name="used_storage">Ginamit</string> <string name="used_storage">Gamit</string>
<string name="app_storage">App</string> <string name="app_storage">App</string>
<string name="movies">Pelikula</string> <string name="movies">Pelikula</string>
<string name="tv_series">Palabas sa TV</string> <string name="tv_series">Palabas sa TV</string>
<string name="cartoons">Kartun</string> <string name="cartoons">Cartoons</string>
<string name="anime">Anime</string> <string name="anime">Anime</string>
<string name="torrent">Torrent</string> <string name="torrent">Torrent</string>
@ -202,43 +202,43 @@
<string name="unexpected_error">Unexpected player error</string> <string name="unexpected_error">Unexpected player error</string>
<string name="storage_error">Download error, check storage permissions</string> <string name="storage_error">Download error, check storage permissions</string>
<string name="episode_action_chomecast_episode">Chromecast Episodyo</string> <string name="episode_action_chomecast_episode">Chromecast Episode</string>
<string name="episode_action_chomecast_mirror">Chromecast Kahalili</string> <string name="episode_action_chomecast_mirror">Chromecast Mirror</string>
<string name="episode_action_play_in_app">Laruin sa App</string> <string name="episode_action_play_in_app">I-play sa App</string>
<string name="episode_action_play_in_vlc">Laruin sa VLC</string> <string name="episode_action_play_in_vlc">I-play sa VLC</string>
<string name="episode_action_play_in_browser">Laruin sa browser</string> <string name="episode_action_play_in_browser">I-play sa browser</string>
<string name="episode_action_copy_link">Kopya Link</string> <string name="episode_action_copy_link">Kopyahin ang Link</string>
<string name="episode_action_auto_download">Awto pag-download</string> <string name="episode_action_auto_download">Awtomatiking i-download</string>
<string name="episode_action_download_mirror">Pag-download kahalili</string> <string name="episode_action_download_mirror">Download mirror</string>
<string name="episode_action_reload_links">Subukan muli</string> <string name="episode_action_reload_links">Subukan muli</string>
<string name="no_update_found">Wala itatag</string> <string name="no_update_found">Walang bagong update</string>
<string name="check_for_update">Siyasatin para sa magpabago</string> <string name="check_for_update">Tingnan kung may bagong update</string>
<string name="video_lock">Kandado</string> <string name="video_lock">I-lock</string>
<string name="video_aspect_ratio_resize">Laki</string> <string name="video_aspect_ratio_resize">Palakihin</string>
<string name="video_source">Pinagmulan</string> <string name="video_source">Source</string>
<string name="video_skip_op">Laktawan OP</string> <string name="video_skip_op">Skip OP</string>
<string name="dont_show_again">Wag ka nang magpakita ulit</string> <string name="dont_show_again">Huwag nang ipakita ulit</string>
<string name="update">Magpabago</string> <string name="update">Update</string>
<string name="watch_quality_pref">Ginustong kalidas</string> <string name="watch_quality_pref">Preferred watch quality</string>
<string name="dns_pref">DNS over HTTPS</string> <string name="dns_pref">DNS over HTTPS</string>
<string name="dns_pref_summary">Mahusay gamitin sa pag-bypass ISP sagabal</string> <string name="dns_pref_summary">Mainam gamitin sa pag-bypass ng ISP blocks</string>
<string name="display_subbed_dubbed_settings">Magpakita Dubbed/Subbed Anime</string> <string name="display_subbed_dubbed_settings">Display Dubbed/Subbed Anime</string>
<string name="resize_fit">Pinakamainam</string> <string name="resize_fit">Fit to screen</string>
<string name="resize_fill">Palakihin</string> <string name="resize_fill">Punan ang buong screen</string>
<string name="resize_zoom">Magpalaki</string> <string name="resize_zoom">Zoom</string>
<string name="general">Pangkalahatan</string> <string name="general">Pangkalahatan</string>
<string name="provider_lang_settings">Pinagmulan wika</string> <string name="provider_lang_settings">Lenggwahe ng Provider</string>
<string name="app_layout">App Ayos</string> <string name="app_layout">App Layout</string>
<string name="automatic">Automatiko</string> <string name="automatic">Awtomatik</string>
<string name="tv_layout">Telebisyon Ayos</string> <string name="tv_layout">TV Layout</string>
<string name="phone_layout">Phone Ayos</string> <string name="phone_layout">Phone Layout</string>
<string name="primary_color_settings">Pangunahin Kulay</string> <string name="primary_color_settings">Pangunahin Kulay</string>
<string name="app_theme_settings">App Tema</string> <string name="app_theme_settings">Tema ng app</string>
<string name="preferred_media_settings">Ginustong Nilalaman</string> <string name="preferred_media_settings">Preferred Media</string>
</resources> </resources>