mirror of
https://github.com/recloudstream/cloudstream.git
synced 2024-08-15 01:53:11 +00:00
added webvideocaster
This commit is contained in:
parent
88a7248e47
commit
071004f6c2
33 changed files with 209 additions and 118 deletions
|
@ -23,6 +23,7 @@
|
|||
|
||||
<queries>
|
||||
<package android:name="org.videolan.vlc" />
|
||||
<package android:name="com.instantbits.cast.webvideo" />
|
||||
</queries>
|
||||
|
||||
<!--TODO https://stackoverflow.com/questions/41799732/chromecast-button-not-visible-in-android-->
|
||||
|
|
|
@ -101,12 +101,13 @@ val VLC_COMPONENT: ComponentName =
|
|||
ComponentName(VLC_PACKAGE, "org.videolan.vlc.gui.video.VideoPlayerActivity")
|
||||
const val VLC_REQUEST_CODE = 42
|
||||
|
||||
const val VLC_FROM_START = -1
|
||||
const val VLC_FROM_PROGRESS = -2
|
||||
const val VLC_EXTRA_POSITION_OUT = "extra_position"
|
||||
const val VLC_EXTRA_DURATION_OUT = "extra_duration"
|
||||
const val VLC_LAST_ID_KEY = "vlc_last_open_id"
|
||||
|
||||
const val WEB_VIDEO_CAST_PACKAGE = "com.instantbits.cast.webvideo"
|
||||
|
||||
|
||||
// Short name for requests client to make it nicer to use
|
||||
|
||||
var app = Requests(responseParser = object : ResponseParser {
|
||||
|
|
|
@ -55,6 +55,9 @@ const val ACTION_SHOW_DESCRIPTION = 15
|
|||
const val ACTION_DOWNLOAD_EPISODE_SUBTITLE = 13
|
||||
const val ACTION_DOWNLOAD_EPISODE_SUBTITLE_MIRROR = 14
|
||||
|
||||
const val ACTION_PLAY_EPISODE_IN_WEB_VIDEO = 16
|
||||
|
||||
|
||||
data class EpisodeClickEvent(val action: Int, val data: ResultEpisode)
|
||||
|
||||
class EpisodeAdapter(
|
||||
|
@ -73,6 +76,7 @@ class EpisodeAdapter(
|
|||
1 -> ACTION_PLAY_EPISODE_IN_PLAYER
|
||||
2 -> ACTION_PLAY_EPISODE_IN_VLC_PLAYER
|
||||
3 -> ACTION_PLAY_EPISODE_IN_BROWSER
|
||||
4 -> ACTION_PLAY_EPISODE_IN_WEB_VIDEO
|
||||
else -> ACTION_PLAY_EPISODE_IN_PLAYER
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.lagradost.cloudstream3.ui.result
|
|||
import android.app.Activity
|
||||
import android.content.*
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.widget.Toast
|
||||
import androidx.core.content.FileProvider
|
||||
|
@ -51,9 +52,7 @@ import com.lagradost.cloudstream3.utils.DataStoreHelper.getViewPos
|
|||
import com.lagradost.cloudstream3.utils.DataStoreHelper.setDub
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.setResultEpisode
|
||||
import com.lagradost.cloudstream3.utils.DataStoreHelper.setResultSeason
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.checkWrite
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.navigate
|
||||
import com.lagradost.cloudstream3.utils.UIHelper.requestRW
|
||||
import kotlinx.coroutines.*
|
||||
import java.io.File
|
||||
import java.lang.Math.abs
|
||||
|
@ -955,26 +954,64 @@ class ResultViewModel2 : ViewModel() {
|
|||
return LinkLoadingResult(sortUrls(links), sortSubs(subs))
|
||||
}
|
||||
|
||||
private fun launchActivity(
|
||||
activity: Activity?,
|
||||
work: suspend (CoroutineScope.(Activity) -> Unit)
|
||||
): Job? {
|
||||
val act = activity ?: return null
|
||||
return CoroutineScope(Dispatchers.IO).launch {
|
||||
try {
|
||||
work(act)
|
||||
} catch (t: Throwable) {
|
||||
logError(t)
|
||||
main {
|
||||
if (t is ActivityNotFoundException) {
|
||||
showToast(activity, txt(R.string.app_not_found_error), Toast.LENGTH_LONG)
|
||||
} else {
|
||||
showToast(activity, t.toString(), Toast.LENGTH_LONG)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun playInWebVideo(
|
||||
activity: Activity?,
|
||||
link: ExtractorLink,
|
||||
title: String?,
|
||||
posterUrl: String?,
|
||||
subtitles: List<SubtitleData>
|
||||
) = launchActivity(activity) { act ->
|
||||
val shareVideo = Intent(Intent.ACTION_VIEW)
|
||||
|
||||
shareVideo.setDataAndType(Uri.parse(link.url), "video/*")
|
||||
shareVideo.setPackage(WEB_VIDEO_CAST_PACKAGE)
|
||||
shareVideo.putExtra("subs", subtitles.map { it.url.toUri() }.toTypedArray())
|
||||
title?.let { shareVideo.putExtra("title", title) }
|
||||
posterUrl?.let { shareVideo.putExtra("poster", posterUrl) }
|
||||
val headers = Bundle().apply {
|
||||
if (link.referer.isNotBlank())
|
||||
putString("Referer", link.referer)
|
||||
putString("User-Agent", USER_AGENT)
|
||||
for ((key, value) in link.headers) {
|
||||
putString(key, value)
|
||||
}
|
||||
}
|
||||
shareVideo.putExtra("android.media.intent.extra.HTTP_HEADERS", headers)
|
||||
shareVideo.putExtra("secure_uri", true)
|
||||
|
||||
act.startActivity(shareVideo)
|
||||
}
|
||||
|
||||
// https://wiki.videolan.org/Android_Player_Intents/
|
||||
private fun playWithVlc(
|
||||
act: Activity?,
|
||||
activity: Activity?,
|
||||
data: LinkLoadingResult,
|
||||
id: Int,
|
||||
resume: Boolean = true,
|
||||
// if it is only a single link then resume works correctly
|
||||
singleFile: Boolean? = null
|
||||
) = ioSafe {
|
||||
if (act == null) return@ioSafe
|
||||
if (data.links.isEmpty()) {
|
||||
showToast(act, R.string.no_links_found_toast, Toast.LENGTH_SHORT)
|
||||
return@ioSafe
|
||||
}
|
||||
try {
|
||||
if (!act.checkWrite()) {
|
||||
act.requestRW()
|
||||
if (act.checkWrite()) return@ioSafe
|
||||
}
|
||||
|
||||
) = launchActivity(activity) { act ->
|
||||
val vlcIntent = Intent(VLC_INTENT_ACTION_RESULT)
|
||||
|
||||
vlcIntent.setPackage(VLC_PACKAGE)
|
||||
|
@ -1039,22 +1076,31 @@ class ResultViewModel2 : ViewModel() {
|
|||
vlcIntent.component = VLC_COMPONENT
|
||||
act.setKey(VLC_LAST_ID_KEY, id)
|
||||
act.startActivityForResult(vlcIntent, VLC_REQUEST_CODE)
|
||||
} catch (e: Exception) {
|
||||
logError(e)
|
||||
main {
|
||||
if (e is ActivityNotFoundException) {
|
||||
showToast(act, txt(R.string.vlc_not_found_error), Toast.LENGTH_LONG)
|
||||
} else {
|
||||
showToast(act, e.toString(), Toast.LENGTH_LONG)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun handleAction(activity: Activity?, click: EpisodeClickEvent) = viewModelScope.launchSafe {
|
||||
fun handleAction(activity: Activity?, click: EpisodeClickEvent) =
|
||||
viewModelScope.launchSafe {
|
||||
handleEpisodeClickEvent(activity, click)
|
||||
}
|
||||
|
||||
data class ExternalApp(
|
||||
val packageString: String,
|
||||
val name: Int,
|
||||
val action: Int,
|
||||
)
|
||||
|
||||
private val apps = listOf(
|
||||
ExternalApp(
|
||||
VLC_PACKAGE,
|
||||
R.string.player_settings_play_in_vlc,
|
||||
ACTION_PLAY_EPISODE_IN_VLC_PLAYER
|
||||
), ExternalApp(
|
||||
WEB_VIDEO_CAST_PACKAGE,
|
||||
R.string.player_settings_play_in_web,
|
||||
ACTION_PLAY_EPISODE_IN_WEB_VIDEO
|
||||
)
|
||||
)
|
||||
|
||||
private suspend fun handleEpisodeClickEvent(activity: Activity?, click: EpisodeClickEvent) {
|
||||
when (click.action) {
|
||||
ACTION_SHOW_OPTIONS -> {
|
||||
|
@ -1069,9 +1115,17 @@ class ResultViewModel2 : ViewModel() {
|
|||
}
|
||||
options.add(txt(R.string.episode_action_play_in_app) to ACTION_PLAY_EPISODE_IN_PLAYER)
|
||||
|
||||
if (activity?.isAppInstalled(VLC_PACKAGE) == true) {
|
||||
options.add(txt(R.string.episode_action_play_in_vlc) to ACTION_PLAY_EPISODE_IN_VLC_PLAYER)
|
||||
for (app in apps) {
|
||||
if (activity?.isAppInstalled(app.packageString) == true) {
|
||||
options.add(
|
||||
txt(
|
||||
R.string.episode_action_play_in_format,
|
||||
txt(app.name)
|
||||
) to app.action
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
options.addAll(
|
||||
listOf(
|
||||
txt(R.string.episode_action_play_in_browser) to ACTION_PLAY_EPISODE_IN_BROWSER,
|
||||
|
@ -1247,6 +1301,11 @@ class ResultViewModel2 : ViewModel() {
|
|||
}
|
||||
ACTION_PLAY_EPISODE_IN_VLC_PLAYER -> {
|
||||
loadLinks(click.data, isVisible = true, isCasting = true) { links ->
|
||||
if (links.links.isEmpty()) {
|
||||
showToast(activity, R.string.no_links_found_toast, Toast.LENGTH_SHORT)
|
||||
return@loadLinks
|
||||
}
|
||||
|
||||
playWithVlc(
|
||||
activity,
|
||||
links,
|
||||
|
@ -1254,6 +1313,22 @@ class ResultViewModel2 : ViewModel() {
|
|||
)
|
||||
}
|
||||
}
|
||||
ACTION_PLAY_EPISODE_IN_WEB_VIDEO -> acquireSingleLink(
|
||||
click.data,
|
||||
isCasting = true,
|
||||
txt(
|
||||
R.string.episode_action_play_in_format,
|
||||
txt(R.string.player_settings_play_in_web)
|
||||
)
|
||||
) { (result, index) ->
|
||||
playInWebVideo(
|
||||
activity,
|
||||
result.links[index],
|
||||
click.data.name ?: click.data.headerName,
|
||||
click.data.poster,
|
||||
result.subs
|
||||
)
|
||||
}
|
||||
ACTION_PLAY_EPISODE_IN_PLAYER -> {
|
||||
val data = currentResponse?.syncData?.toList() ?: emptyList()
|
||||
val list =
|
||||
|
@ -1319,7 +1394,11 @@ class ResultViewModel2 : ViewModel() {
|
|||
}, {
|
||||
if (this !is AnimeLoadResponse) return@argamap
|
||||
val map =
|
||||
Kitsu.getEpisodesDetails(getMalId(), getAniListId(), isResponseRequired = false)
|
||||
Kitsu.getEpisodesDetails(
|
||||
getMalId(),
|
||||
getAniListId(),
|
||||
isResponseRequired = false
|
||||
)
|
||||
if (map.isNullOrEmpty()) return@argamap
|
||||
updateEpisodes = DubStatus.values().map { dubStatus ->
|
||||
val current =
|
||||
|
@ -1339,8 +1418,10 @@ class ResultViewModel2 : ViewModel() {
|
|||
val currentBack = this
|
||||
this.description = this.description ?: node.description?.en
|
||||
this.name = this.name ?: node.titles?.canonical
|
||||
this.episode = this.episode ?: node.num ?: episodeNumbers[index]
|
||||
this.posterUrl = this.posterUrl ?: node.thumbnail?.original?.url
|
||||
this.episode =
|
||||
this.episode ?: node.num ?: episodeNumbers[index]
|
||||
this.posterUrl =
|
||||
this.posterUrl ?: node.thumbnail?.original?.url
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1628,7 +1709,8 @@ class ResultViewModel2 : ViewModel() {
|
|||
for ((index, i) in ep.value.withIndex()) {
|
||||
val episode = i.episode ?: (index + 1)
|
||||
val id =
|
||||
mainId + episode + idIndex * 1_000_000 + (i.season?.times(10_000) ?: 0)
|
||||
mainId + episode + idIndex * 1_000_000 + (i.season?.times(10_000)
|
||||
?: 0)
|
||||
if (!existingEpisodes.contains(id)) {
|
||||
existingEpisodes.add(id)
|
||||
val seasonData = loadResponse.seasonNames.getSeason(i.season)
|
||||
|
|
|
@ -274,7 +274,7 @@
|
|||
<string name="episode_action_chromecast_episode">حلقة كروم كاست</string>
|
||||
<string name="episode_action_chromecast_mirror">مرآة كروم كاست</string>
|
||||
<string name="episode_action_play_in_app">تشغيل في التطبيق</string>
|
||||
<string name="episode_action_play_in_vlc">VLC تشغيل في</string>
|
||||
<string name="episode_action_play_in_format">%s تشغيل في</string>
|
||||
<string name="episode_action_play_in_browser">تشغيل في الويب </string>
|
||||
<string name="episode_action_copy_link">نسخ الرابط</string>
|
||||
<string name="episode_action_auto_download">التحميل التلقائي</string>
|
||||
|
|
|
@ -279,7 +279,7 @@
|
|||
<string name="episode_action_chromecast_episode">Episódio pelo Chromecast</string>
|
||||
<string name="episode_action_chromecast_mirror">Alternativa pelo Chromecast</string>
|
||||
<string name="episode_action_play_in_app">Assistir no App</string>
|
||||
<string name="episode_action_play_in_vlc">Assistir no VLC</string>
|
||||
<string name="episode_action_play_in_format">Assistir no %s</string>
|
||||
<string name="episode_action_play_in_browser">Assistir no navegador</string>
|
||||
<string name="episode_action_copy_link">Copiar link</string>
|
||||
<string name="episode_action_auto_download">Auto download</string>
|
||||
|
|
|
@ -268,7 +268,7 @@
|
|||
<string name="episode_action_chromecast_episode">Chromecastovat epizodu</string>
|
||||
<string name="episode_action_chromecast_mirror">Chromecast jako zrcadlo</string>
|
||||
<string name="episode_action_play_in_app">Přehrát v aplikace</string>
|
||||
<string name="episode_action_play_in_vlc">Přehrát ve VLC</string>
|
||||
<string name="episode_action_play_in_format">Přehrát ve %s</string>
|
||||
<string name="episode_action_play_in_browser">Přehrát v prohlížeči</string>
|
||||
<string name="episode_action_copy_link">Zkopírovat odkaz</string>
|
||||
<string name="episode_action_auto_download">Automaticky stáhnout</string>
|
||||
|
|
|
@ -281,7 +281,7 @@
|
|||
<string name="episode_action_chromecast_episode">Chromecast-Episode</string>
|
||||
<string name="episode_action_chromecast_mirror">Chromecastmirror</string>
|
||||
<string name="episode_action_play_in_app">In App wiedergeben</string>
|
||||
<string name="episode_action_play_in_vlc">In VLC wiedergeben</string>
|
||||
<string name="episode_action_play_in_format">In %s wiedergeben</string>
|
||||
<string name="episode_action_play_in_browser">In Browser wiedergeben</string>
|
||||
<string name="episode_action_copy_link">Link kopieren</string>
|
||||
<string name="episode_action_auto_download">Auto Download</string>
|
||||
|
|
|
@ -156,7 +156,7 @@
|
|||
<item>@string/episode_action_chromecast_episode</item>
|
||||
<item>@string/episode_action_chromecast_mirror</item>
|
||||
<item>@string/episode_action_play_in_app</item>
|
||||
<item>@string/episode_action_play_in_vlc</item>
|
||||
<item>@string/episode_action_play_in_format</item>
|
||||
<item>@string/episode_action_play_in_browser</item>
|
||||
<item>@string/episode_action_copy_link</item>
|
||||
<item>@string/episode_action_auto_download</item>
|
||||
|
|
|
@ -269,7 +269,7 @@
|
|||
<string name="episode_action_chromecast_episode">Episodio Chromecast</string>
|
||||
<string name="episode_action_chromecast_mirror">Espejo Chromecast</string>
|
||||
<string name="episode_action_play_in_app">Reproducir en la app</string>
|
||||
<string name="episode_action_play_in_vlc">Reproducir en VLC</string>
|
||||
<string name="episode_action_play_in_format">Reproducir en %s</string>
|
||||
<string name="episode_action_play_in_browser">Reproducir en el navegador</string>
|
||||
<string name="episode_action_copy_link">Copiar enlace</string>
|
||||
<string name="episode_action_auto_download">Descarga automática</string>
|
||||
|
|
|
@ -164,7 +164,7 @@
|
|||
<string name="episode_action_chromecast_episode">Episode Chromecast</string>
|
||||
<string name="episode_action_chromecast_mirror">Miroir Chromecast</string>
|
||||
<string name="episode_action_play_in_app">Lecture dans l\'application</string>
|
||||
<string name="episode_action_play_in_vlc">Lecture dans VLC</string>
|
||||
<string name="episode_action_play_in_format">Lecture dans %s</string>
|
||||
<string name="episode_action_play_in_browser">Lecture dans le navigateur</string>
|
||||
<string name="episode_action_copy_link">Copier le lien</string>
|
||||
<string name="episode_action_auto_download">Téléchargement Automatique</string>
|
||||
|
|
|
@ -136,7 +136,7 @@
|
|||
<string name="episode_action_chromecast_episode">क्रोमकास्ट एपिसोड</string>
|
||||
<string name="episode_action_chromecast_mirror">कक्रोमकास्ट मिरर</string>
|
||||
<string name="episode_action_play_in_app">एप्प मैं चलाये</string>
|
||||
<string name="episode_action_play_in_vlc">VLC में चलाए</string>
|
||||
<string name="episode_action_play_in_format">%s में चलाए</string>
|
||||
<string name="episode_action_play_in_browser">Browser में चलाए</string>
|
||||
<string name="episode_action_copy_link">लिंक कॉपी करें</string>
|
||||
<string name="episode_action_auto_download">डाउनलोड करे</string>
|
||||
|
|
|
@ -299,7 +299,7 @@
|
|||
<string name="episode_action_chromecast_episode">Chromecast epizoda</string>
|
||||
<string name="episode_action_chromecast_mirror">Chromecast mirror</string>
|
||||
<string name="episode_action_play_in_app">Pokreni u aplikaciji</string>
|
||||
<string name="episode_action_play_in_vlc">Pokreni u VLC-u</string>
|
||||
<string name="episode_action_play_in_format">Pokreni u %s</string>
|
||||
<string name="episode_action_play_in_browser">Pokreni u pregledniku</string>
|
||||
<string name="episode_action_copy_link">Kopiraj poveznicu</string>
|
||||
<string name="episode_action_auto_download">Automatsko preuzimanje</string>
|
||||
|
|
|
@ -264,7 +264,7 @@
|
|||
<string name="episode_action_chromecast_episode">Episode Chromecast</string>
|
||||
<string name="episode_action_chromecast_mirror">Mirror Chromecast</string>
|
||||
<string name="episode_action_play_in_app">Putar di aplikasi</string>
|
||||
<string name="episode_action_play_in_vlc">Putar di VLC</string>
|
||||
<string name="episode_action_play_in_format">Putar di %s</string>
|
||||
<string name="episode_action_play_in_browser">Putar di browser</string>
|
||||
<string name="episode_action_copy_link">Salin tautan</string>
|
||||
<string name="episode_action_auto_download">Download otomatis</string>
|
||||
|
|
|
@ -271,7 +271,7 @@
|
|||
<string name="episode_action_chromecast_episode">Chromecast</string>
|
||||
<string name="episode_action_chromecast_mirror">Chromecast mirror</string>
|
||||
<string name="episode_action_play_in_app">Riproduci in app</string>
|
||||
<string name="episode_action_play_in_vlc">Riproduci in VLC</string>
|
||||
<string name="episode_action_play_in_format">Riproduci in %s</string>
|
||||
<string name="episode_action_play_in_browser">Riproduci nel browser</string>
|
||||
<string name="episode_action_copy_link">Copia link</string>
|
||||
<string name="episode_action_auto_download">Download</string>
|
||||
|
|
|
@ -190,7 +190,7 @@
|
|||
<string name="episode_action_chromecast_episode">Епизода на Chromecast</string>
|
||||
<string name="episode_action_chromecast_mirror">Огледало на Chromecastr</string>
|
||||
<string name="episode_action_play_in_app">Пушти во апликацијата</string>
|
||||
<string name="episode_action_play_in_vlc">Пушти на VLC</string>
|
||||
<string name="episode_action_play_in_format">Пушти на %s</string>
|
||||
<string name="episode_action_play_in_browser">Пушти на прелистувач</string>
|
||||
<string name="episode_action_copy_link">Копирај линк</string>
|
||||
<string name="episode_action_auto_download">Авто превземање</string>
|
||||
|
|
|
@ -175,7 +175,7 @@
|
|||
<!-- <string name="episode_action_chomecast_episode">Chromecast Episode</string>
|
||||
<string name="episode_action_chomecast_mirror">Chromecast Mirror</string> -->
|
||||
<string name="episode_action_play_in_app">ആപ്പിൽ പ്ലേയ് ചെയ്യുക</string>
|
||||
<string name="episode_action_play_in_vlc">VLCയിൽ പ്ലേയ് ചെയ്യുക</string>
|
||||
<string name="episode_action_play_in_format">%sയിൽ പ്ലേയ് ചെയ്യുക</string>
|
||||
<string name="episode_action_play_in_browser">ബ്രൗസറിൽ പ്ലേയ് ചെയ്യുക</string>
|
||||
<string name="episode_action_copy_link">ലിങ്ക് പകർത്തുക</string>
|
||||
<string name="episode_action_auto_download">ഡൌൺലോഡ് ചെയ്യൂ</string>
|
||||
|
|
|
@ -145,7 +145,7 @@
|
|||
<string name="episode_action_chromecast_episode">aauugghhooo-ahah ohaaauugghh</string>
|
||||
<string name="episode_action_chromecast_mirror">aoohaaahhu ahouuhhh</string>
|
||||
<string name="episode_action_play_in_app">ooo-ahahaauuh aaahhu</string>
|
||||
<string name="episode_action_play_in_vlc">ooo-ahah ohaauuh</string>
|
||||
<string name="episode_action_play_in_format">ooo-ahah ohaauuh</string>
|
||||
<string name="episode_action_play_in_browser">ahoha ooo-ahahohoohah oooohh</string>
|
||||
<string name="episode_action_copy_link">aauugghhahhaauugghh</string>
|
||||
<string name="episode_action_auto_download">aaaghhoooohh aaahhu ahooo</string>
|
||||
|
|
|
@ -274,7 +274,7 @@
|
|||
<string name="episode_action_chromecast_episode">Chromecast aflevering</string>
|
||||
<string name="episode_action_chromecast_mirror">Chromecast mirror</string>
|
||||
<string name="episode_action_play_in_app">Speel in app</string>
|
||||
<string name="episode_action_play_in_vlc">Speel in VLC</string>
|
||||
<string name="episode_action_play_in_format">Speel in %s</string>
|
||||
<string name="episode_action_play_in_browser">Speel in browser</string>
|
||||
<string name="episode_action_copy_link">Kopieer link</string>
|
||||
<string name="episode_action_auto_download">Automatisch downloaden</string>
|
||||
|
|
|
@ -196,7 +196,7 @@
|
|||
<string name="episode_action_chromecast_episode">Støpt Episode</string>
|
||||
<string name="episode_action_chromecast_mirror">Støpt Speil</string>
|
||||
<string name="episode_action_play_in_app">Spill i appen</string>
|
||||
<string name="episode_action_play_in_vlc">Spill i VLC</string>
|
||||
<string name="episode_action_play_in_format">Spill i %s</string>
|
||||
<string name="episode_action_play_in_browser">Spill i nettleseren</string>
|
||||
<string name="episode_action_copy_link">Kopier link</string>
|
||||
<string name="episode_action_auto_download">Automatisk nedlasting</string>
|
||||
|
|
|
@ -165,7 +165,7 @@
|
|||
<item>@string/episode_action_chromecast_episode</item>
|
||||
<item>@string/episode_action_chromecast_mirror</item>
|
||||
<item>@string/episode_action_play_in_app</item>
|
||||
<item>@string/episode_action_play_in_vlc</item>
|
||||
<item>@string/episode_action_play_in_format</item>
|
||||
<item>@string/episode_action_play_in_browser</item>
|
||||
<item>@string/episode_action_copy_link</item>
|
||||
<item>@string/episode_action_auto_download</item>
|
||||
|
|
|
@ -252,7 +252,7 @@
|
|||
<string name="episode_action_chromecast_episode">Chromecast odcinka</string>
|
||||
<string name="episode_action_chromecast_mirror">Chromecast mirroru</string>
|
||||
<string name="episode_action_play_in_app">Odtwórz w aplikacji</string>
|
||||
<string name="episode_action_play_in_vlc">Odtwórz w VLC</string>
|
||||
<string name="episode_action_play_in_format">Odtwórz w %s</string>
|
||||
<string name="episode_action_play_in_browser">Odtwórz w przeglądarce</string>
|
||||
<string name="episode_action_copy_link">Kopiuj link</string>
|
||||
<string name="episode_action_auto_download">Automatyczne pobieranie</string>
|
||||
|
|
|
@ -268,7 +268,7 @@
|
|||
<string name="episode_action_chromecast_episode">Episódio pelo Chromecast</string>
|
||||
<string name="episode_action_chromecast_mirror">Alternativa pelo Chromecast</string>
|
||||
<string name="episode_action_play_in_app">Reproduzir na app</string>
|
||||
<string name="episode_action_play_in_vlc">Reproduzir no VLC</string>
|
||||
<string name="episode_action_play_in_format">Reproduzir no %s</string>
|
||||
<string name="episode_action_play_in_browser">Reproduzir no navegador</string>
|
||||
<string name="episode_action_copy_link">Copiar link</string>
|
||||
<string name="episode_action_auto_download">Transferência Automática</string>
|
||||
|
|
|
@ -267,7 +267,7 @@
|
|||
<string name="episode_action_chromecast_episode">Chromecast</string>
|
||||
<string name="episode_action_chromecast_mirror">Chromecast alternativ</string>
|
||||
<string name="episode_action_play_in_app">Redă în Aplicație</string>
|
||||
<string name="episode_action_play_in_vlc">Redă în VLC</string>
|
||||
<string name="episode_action_play_in_format">Redă în %s</string>
|
||||
<string name="episode_action_play_in_browser">Redă în Browser</string>
|
||||
<string name="episode_action_copy_link">Copiază link-ul</string>
|
||||
<string name="episode_action_auto_download">Auto-descărcare</string>
|
||||
|
|
|
@ -167,7 +167,7 @@
|
|||
<string name="episode_action_chromecast_episode">Chromecasta ett Avsnitt</string>
|
||||
<string name="episode_action_chromecast_mirror">Chromecasta en Länk</string>
|
||||
<string name="episode_action_play_in_app">Spela upp i appen</string>
|
||||
<string name="episode_action_play_in_vlc">Spela upp i VLC</string>
|
||||
<string name="episode_action_play_in_format">Spela upp i %s</string>
|
||||
<string name="episode_action_play_in_browser">Spela upp i webbläsaren</string>
|
||||
<string name="episode_action_copy_link">Kopiera länk</string>
|
||||
<string name="episode_action_auto_download">Automatisk nerladdning</string>
|
||||
|
|
|
@ -204,7 +204,7 @@
|
|||
<string name="episode_action_chromecast_episode">Chromecast Episode</string>
|
||||
<string name="episode_action_chromecast_mirror">Chromecast Mirror</string>
|
||||
<string name="episode_action_play_in_app">I-play sa App</string>
|
||||
<string name="episode_action_play_in_vlc">I-play sa VLC</string>
|
||||
<string name="episode_action_play_in_format">I-play sa %s</string>
|
||||
<string name="episode_action_play_in_browser">I-play sa browser</string>
|
||||
<string name="episode_action_copy_link">Kopyahin ang Link</string>
|
||||
<string name="episode_action_auto_download">Awtomatiking i-download</string>
|
||||
|
|
|
@ -156,7 +156,7 @@
|
|||
<item>@string/episode_action_chromecast_episode</item>
|
||||
<item>@string/episode_action_chromecast_mirror</item>
|
||||
<item>@string/episode_action_play_in_app</item>
|
||||
<item>@string/episode_action_play_in_vlc</item>
|
||||
<item>@string/episode_action_play_in_format</item>
|
||||
<item>@string/episode_action_play_in_browser</item>
|
||||
<item>@string/episode_action_copy_link</item>
|
||||
<item>@string/episode_action_auto_download</item>
|
||||
|
|
|
@ -272,7 +272,7 @@
|
|||
<string name="episode_action_chromecast_episode">Bölümü Chromecast ile yayınla</string>
|
||||
<string name="episode_action_chromecast_mirror">Bağlantıyı Chromecast ile yayınla</string>
|
||||
<string name="episode_action_play_in_app">Uygulamada oynat</string>
|
||||
<string name="episode_action_play_in_vlc">VLC\'de oynat</string>
|
||||
<string name="episode_action_play_in_format">%s\'de oynat</string>
|
||||
<string name="episode_action_play_in_browser">Tarayıcıda oynat</string>
|
||||
<string name="episode_action_copy_link">Linki kopyala</string>
|
||||
<string name="episode_action_auto_download">Otomatik indir</string>
|
||||
|
|
|
@ -157,7 +157,7 @@
|
|||
<item>@string/episode_action_chromecast_episode</item>
|
||||
<item>@string/episode_action_chromecast_mirror</item>
|
||||
<item>@string/episode_action_play_in_app</item>
|
||||
<item>@string/episode_action_play_in_vlc</item>
|
||||
<item>@string/episode_action_play_in_format</item>
|
||||
<item>@string/episode_action_play_in_browser</item>
|
||||
<item>@string/episode_action_copy_link</item>
|
||||
<item>@string/episode_action_auto_download</item>
|
||||
|
|
|
@ -292,7 +292,7 @@
|
|||
<string name="episode_action_chromecast_episode">Tập Chromecast</string>
|
||||
<string name="episode_action_chromecast_mirror">Chiếu Chromecast</string>
|
||||
<string name="episode_action_play_in_app">Xem với trình phát mặc định</string>
|
||||
<string name="episode_action_play_in_vlc">Xem với trình phát VLC</string>
|
||||
<string name="episode_action_play_in_format">Xem với trình phát %s</string>
|
||||
<string name="episode_action_play_in_browser">Xem tại trình duyệt</string>
|
||||
<string name="episode_action_copy_link">Sao chép liên kết</string>
|
||||
<string name="episode_action_auto_download">Tự động tải xuống</string>
|
||||
|
|
|
@ -303,7 +303,7 @@
|
|||
<string name="episode_action_chromecast_episode">投屏剧集</string>
|
||||
<string name="episode_action_chromecast_mirror">投屏镜像</string>
|
||||
<string name="episode_action_play_in_app">在应用中播放</string>
|
||||
<string name="episode_action_play_in_vlc">在 VLC 中播放</string>
|
||||
<string name="episode_action_play_in_format">在 %s 中播放</string>
|
||||
<string name="episode_action_play_in_browser">在浏览器中播放</string>
|
||||
<string name="episode_action_copy_link">复制链接</string>
|
||||
<string name="episode_action_auto_download">自动下载</string>
|
||||
|
|
|
@ -36,12 +36,14 @@
|
|||
<array name="player_pref_names">
|
||||
<item>@string/player_settings_play_in_app</item>
|
||||
<item>@string/player_settings_play_in_vlc</item>
|
||||
<item>@string/player_settings_play_in_web</item>
|
||||
<item>@string/player_settings_play_in_browser</item>
|
||||
</array>
|
||||
|
||||
<array name="player_pref_values">
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
<item>4</item>
|
||||
<item>3</item>
|
||||
</array>
|
||||
|
||||
|
@ -187,7 +189,7 @@
|
|||
<item>@string/episode_action_chromecast_episode</item>
|
||||
<item>@string/episode_action_chromecast_mirror</item>
|
||||
<item>@string/episode_action_play_in_app</item>
|
||||
<item>@string/episode_action_play_in_vlc</item>
|
||||
<item>@string/episode_action_play_in_format</item>
|
||||
<item>@string/episode_action_play_in_browser</item>
|
||||
<item>@string/episode_action_copy_link</item>
|
||||
<item>@string/episode_action_auto_download</item>
|
||||
|
|
|
@ -364,7 +364,7 @@
|
|||
<string name="episode_action_chromecast_episode">Chromecast episode</string>
|
||||
<string name="episode_action_chromecast_mirror">Chromecast mirror</string>
|
||||
<string name="episode_action_play_in_app">Play in app</string>
|
||||
<string name="episode_action_play_in_vlc">Play in VLC</string>
|
||||
<string name="episode_action_play_in_format">Play in %s</string>
|
||||
<string name="episode_action_play_in_browser">Play in browser</string>
|
||||
<string name="episode_action_copy_link">Copy link</string>
|
||||
<string name="episode_action_auto_download">Auto download</string>
|
||||
|
@ -633,6 +633,7 @@
|
|||
<string name="player_pref">Preferred video player</string>
|
||||
<string name="player_settings_play_in_app">Internal player</string>
|
||||
<string name="player_settings_play_in_vlc">VLC</string>
|
||||
<string name="player_settings_play_in_web">Web Video Cast</string>
|
||||
<string name="player_settings_play_in_browser">Browser</string>
|
||||
<string name="vlc_not_found_error">VLC not found</string>
|
||||
<string name="app_not_found_error">App not found</string>
|
||||
</resources>
|
||||
|
|
Loading…
Reference in a new issue