mirror of
https://github.com/recloudstream/cloudstream.git
synced 2024-08-15 01:53:11 +00:00
Merge branch 'master' into githubAccount
This commit is contained in:
commit
c8fe80842d
13 changed files with 235 additions and 84 deletions
|
@ -110,6 +110,17 @@
|
|||
|
||||
<data android:scheme="cloudstreamrepo" />
|
||||
</intent-filter>
|
||||
|
||||
<!-- Allow searching with intents: cloudstreamsearch://Your%20Name -->
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data android:scheme="cloudstreamsearch" />
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
||||
|
|
|
@ -16,11 +16,9 @@ import androidx.appcompat.app.AlertDialog
|
|||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.NavDestination
|
||||
import androidx.navigation.*
|
||||
import androidx.navigation.NavDestination.Companion.hierarchy
|
||||
import androidx.navigation.NavGraph.Companion.findStartDestination
|
||||
import androidx.navigation.NavOptions
|
||||
import androidx.navigation.fragment.NavHostFragment
|
||||
import androidx.navigation.ui.setupWithNavController
|
||||
import androidx.preference.PreferenceManager
|
||||
|
@ -45,6 +43,7 @@ import com.lagradost.cloudstream3.CommonActivity.onUserLeaveHint
|
|||
import com.lagradost.cloudstream3.CommonActivity.showToast
|
||||
import com.lagradost.cloudstream3.CommonActivity.updateLocale
|
||||
import com.lagradost.cloudstream3.mvvm.logError
|
||||
import com.lagradost.cloudstream3.mvvm.normalSafeApiCall
|
||||
import com.lagradost.cloudstream3.network.initClient
|
||||
import com.lagradost.cloudstream3.plugins.PluginManager
|
||||
import com.lagradost.cloudstream3.plugins.PluginManager.loadSinglePlugin
|
||||
|
@ -54,9 +53,11 @@ import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.account
|
|||
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appString
|
||||
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringRepo
|
||||
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.githubApi
|
||||
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.appStringSearch
|
||||
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.inAppAuths
|
||||
import com.lagradost.cloudstream3.ui.APIRepository
|
||||
import com.lagradost.cloudstream3.ui.download.DOWNLOAD_NAVIGATE_TO
|
||||
import com.lagradost.cloudstream3.ui.search.SearchFragment
|
||||
import com.lagradost.cloudstream3.ui.search.SearchResultBuilder
|
||||
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isEmulatorSettings
|
||||
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings
|
||||
|
@ -92,11 +93,9 @@ import kotlinx.android.synthetic.main.activity_main.*
|
|||
import kotlinx.android.synthetic.main.fragment_result_swipe.*
|
||||
import kotlinx.coroutines.sync.Mutex
|
||||
import kotlinx.coroutines.sync.withLock
|
||||
import okhttp3.ConnectionSpec
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.internal.applyConnectionSpec
|
||||
import java.io.File
|
||||
import java.net.URI
|
||||
import java.net.URLDecoder
|
||||
import java.nio.charset.Charset
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
|
@ -151,7 +150,7 @@ val VLC = ResultResume(
|
|||
val MPV = ResultResume(
|
||||
MPV_PACKAGE,
|
||||
//"is.xyz.mpv.MPVActivity.result", // resume not working :pensive:
|
||||
position = "position",
|
||||
position = "position",
|
||||
duration = "duration",
|
||||
)
|
||||
|
||||
|
@ -192,6 +191,15 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
|
|||
companion object {
|
||||
const val TAG = "MAINACT"
|
||||
|
||||
/**
|
||||
* Setting this will automatically enter the query in the search
|
||||
* next time the search fragment is opened.
|
||||
* This variable will clear itself after one use. Null does nothing.
|
||||
*
|
||||
* This is a very bad solution but I was unable to find a better one.
|
||||
**/
|
||||
private var nextSearchQuery: String? = null
|
||||
|
||||
/**
|
||||
* Fires every time a new batch of plugins have been loaded, no guarantee about how often this is run and on which thread
|
||||
* */
|
||||
|
@ -210,6 +218,9 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
|
|||
isWebview: Boolean
|
||||
): Boolean =
|
||||
with(activity) {
|
||||
// Invalid URIs can crash
|
||||
fun safeURI(uri: String) = normalSafeApiCall { URI(uri) }
|
||||
|
||||
if (str != null && this != null) {
|
||||
if (str.startsWith("https://cs.repo")) {
|
||||
val realUrl = "https://" + str.substringAfter("?")
|
||||
|
@ -245,10 +256,14 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
|
|||
return true
|
||||
}
|
||||
}
|
||||
} else if (URI(str).scheme == appStringRepo) {
|
||||
} else if (safeURI(str)?.scheme == appStringRepo) {
|
||||
val url = str.replaceFirst(appStringRepo, "https")
|
||||
loadRepository(url)
|
||||
return true
|
||||
} else if (safeURI(str)?.scheme == appStringSearch) {
|
||||
nextSearchQuery =
|
||||
URLDecoder.decode(str.substringAfter("$appStringSearch://"), "UTF-8")
|
||||
nav_view.selectedItemId = R.id.navigation_search
|
||||
} else if (!isWebview) {
|
||||
if (str.startsWith(DOWNLOAD_NAVIGATE_TO)) {
|
||||
this.navigate(R.id.navigation_downloads)
|
||||
|
@ -645,6 +660,17 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
|
|||
val navHostFragment =
|
||||
supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
|
||||
val navController = navHostFragment.navController
|
||||
|
||||
navController.addOnDestinationChangedListener { _: NavController, navDestination: NavDestination, bundle: Bundle? ->
|
||||
// Intercept search and add a query
|
||||
if (navDestination.matchDestination(R.id.navigation_search) && !nextSearchQuery.isNullOrBlank()) {
|
||||
bundle?.apply {
|
||||
this.putString(SearchFragment.SEARCH_QUERY, nextSearchQuery)
|
||||
nextSearchQuery = null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//val navController = findNavController(R.id.nav_host_fragment)
|
||||
|
||||
/*navOptions = NavOptions.Builder()
|
||||
|
|
|
@ -13,39 +13,42 @@ open class VoeExtractor : ExtractorApi() {
|
|||
override val requiresReferer = false
|
||||
|
||||
private data class ResponseLinks(
|
||||
@JsonProperty("hls") val url: String?,
|
||||
@JsonProperty("hls") val hls: String?,
|
||||
@JsonProperty("mp4") val mp4: String?,
|
||||
@JsonProperty("video_height") val label: Int?
|
||||
//val type: String // Mp4
|
||||
)
|
||||
|
||||
override suspend fun getUrl(url: String, referer: String?): List<ExtractorLink> {
|
||||
val extractedLinksList: MutableList<ExtractorLink> = mutableListOf()
|
||||
val doc = app.get(url).text
|
||||
if (doc.isNotBlank()) {
|
||||
val start = "const sources ="
|
||||
var src = doc.substring(doc.indexOf(start))
|
||||
src = src.substring(start.length, src.indexOf(";"))
|
||||
val html = app.get(url).text
|
||||
if (html.isNotBlank()) {
|
||||
val src = html.substringAfter("const sources =").substringBefore(";")
|
||||
// Remove last comma, it is not proper json otherwise
|
||||
.replace("0,", "0")
|
||||
.trim()
|
||||
// Make json use the proper quotes
|
||||
.replace("'", "\"")
|
||||
|
||||
//Log.i(this.name, "Result => (src) ${src}")
|
||||
parseJson<ResponseLinks?>(src)?.let { voelink ->
|
||||
//Log.i(this.name, "Result => (voelink) ${voelink}")
|
||||
val linkUrl = voelink.url
|
||||
val linkLabel = voelink.label?.toString() ?: ""
|
||||
parseJson<ResponseLinks?>(src)?.let { voeLink ->
|
||||
//Log.i(this.name, "Result => (voeLink) ${voeLink}")
|
||||
|
||||
// Always defaults to the hls link, but returns the mp4 if null
|
||||
val linkUrl = voeLink.hls ?: voeLink.mp4
|
||||
val linkLabel = voeLink.label?.toString() ?: ""
|
||||
if (!linkUrl.isNullOrEmpty()) {
|
||||
extractedLinksList.add(
|
||||
return listOf(
|
||||
ExtractorLink(
|
||||
name = this.name,
|
||||
source = this.name,
|
||||
url = linkUrl,
|
||||
quality = getQualityFromName(linkLabel),
|
||||
referer = url,
|
||||
isM3u8 = true
|
||||
isM3u8 = voeLink.hls != null
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
return extractedLinksList
|
||||
return emptyList()
|
||||
}
|
||||
}
|
|
@ -44,6 +44,9 @@ abstract class AccountManager(private val defIndex: Int) : AuthAPI {
|
|||
const val appString = "cloudstreamapp"
|
||||
const val appStringRepo = "cloudstreamrepo"
|
||||
|
||||
// Instantly start the search given a query
|
||||
const val appStringSearch = "cloudstreamsearch"
|
||||
|
||||
val unixTime: Long
|
||||
get() = System.currentTimeMillis() / 1000L
|
||||
val unixTimeMs: Long
|
||||
|
|
|
@ -612,6 +612,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() {
|
|||
//player_media_route_button?.isClickable = !isGone
|
||||
player_go_back_holder?.isGone = isGone
|
||||
player_sources_btt?.isGone = isGone
|
||||
player_skip_episode?.isGone = isGone
|
||||
}
|
||||
|
||||
private fun updateLockUI() {
|
||||
|
@ -1101,7 +1102,6 @@ open class FullScreenPlayer : AbstractPlayerFragment() {
|
|||
}
|
||||
|
||||
protected fun uiReset() {
|
||||
isLocked = false
|
||||
isShowing = false
|
||||
|
||||
// if nothing has loaded these buttons should not be visible
|
||||
|
|
|
@ -1582,7 +1582,6 @@ class ResultViewModel2 : ViewModel() {
|
|||
return
|
||||
}
|
||||
|
||||
val episodes = currentEpisodes[indexer]
|
||||
val ranges = currentRanges[indexer]
|
||||
|
||||
if (ranges?.contains(range) != true) {
|
||||
|
@ -1594,7 +1593,6 @@ class ResultViewModel2 : ViewModel() {
|
|||
}
|
||||
}
|
||||
|
||||
val size = episodes?.size
|
||||
val isMovie = currentResponse?.isMovie() == true
|
||||
currentIndex = indexer
|
||||
currentRange = range
|
||||
|
@ -1604,6 +1602,7 @@ class ResultViewModel2 : ViewModel() {
|
|||
text to r
|
||||
} ?: emptyList())
|
||||
|
||||
val size = currentEpisodes[indexer]?.size
|
||||
_episodesCountText.postValue(
|
||||
some(
|
||||
if (isMovie) null else
|
||||
|
@ -1683,9 +1682,12 @@ class ResultViewModel2 : ViewModel() {
|
|||
generator = if (isMovie) {
|
||||
getMovie()?.let { RepoLinkGenerator(listOf(it), page = currentResponse) }
|
||||
} else {
|
||||
episodes?.let { list ->
|
||||
RepoLinkGenerator(list, page = currentResponse)
|
||||
}
|
||||
val episodes = currentEpisodes.filter { it.key.dubStatus == indexer.dubStatus }
|
||||
.toList()
|
||||
.sortedBy { it.first.season }
|
||||
.flatMap { it.second }
|
||||
|
||||
RepoLinkGenerator(episodes, page = currentResponse)
|
||||
}
|
||||
|
||||
if (isMovie) {
|
||||
|
|
|
@ -73,6 +73,14 @@ class SearchFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
const val SEARCH_QUERY = "search_query"
|
||||
|
||||
fun newInstance(query: String): Bundle {
|
||||
return Bundle().apply {
|
||||
putString(SEARCH_QUERY, query)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val searchViewModel: SearchViewModel by activityViewModels()
|
||||
|
@ -132,7 +140,8 @@ class SearchFragment : Fragment() {
|
|||
val default = enumValues<TvType>().sorted().filter { it != TvType.NSFW }
|
||||
.map { it.ordinal.toString() }.toSet()
|
||||
val preferredTypes = (PreferenceManager.getDefaultSharedPreferences(ctx)
|
||||
.getStringSet(this.getString(R.string.prefer_media_type_key), default)?.ifEmpty { default } ?: default)
|
||||
.getStringSet(this.getString(R.string.prefer_media_type_key), default)
|
||||
?.ifEmpty { default } ?: default)
|
||||
.mapNotNull { it.toIntOrNull() ?: return@mapNotNull null }
|
||||
|
||||
val settings = ctx.getApiSettings()
|
||||
|
@ -487,6 +496,14 @@ class SearchFragment : Fragment() {
|
|||
search_master_recycler?.adapter = masterAdapter
|
||||
search_master_recycler?.layoutManager = GridLayoutManager(context, 1)
|
||||
|
||||
// Automatically search the specified query, this allows the app search to launch from intent
|
||||
arguments?.getString(SEARCH_QUERY)?.let { query ->
|
||||
if (query.isBlank()) return@let
|
||||
main_search?.setQuery(query, true)
|
||||
// Clear the query as to not make it request the same query every time the page is opened
|
||||
arguments?.putString(SEARCH_QUERY, null)
|
||||
}
|
||||
|
||||
// SubtitlesFragment.push(activity)
|
||||
//searchViewModel.search("iron man")
|
||||
//(activity as AppCompatActivity).loadResult("https://shiro.is/overlord-dubbed", "overlord-dubbed", "Shiro")
|
||||
|
|
|
@ -274,7 +274,12 @@
|
|||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popExitAnim="@anim/exit_anim"
|
||||
tools:layout="@layout/fragment_search" />
|
||||
tools:layout="@layout/fragment_search">
|
||||
<argument
|
||||
android:name="search_query"
|
||||
android:defaultValue=""
|
||||
app:argType="string" />
|
||||
</fragment>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/navigation_downloads"
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
<string name="app_name">CloudStream</string>
|
||||
<string name="play_with_app_name">تشغيل بواسطة CloudStream</string>
|
||||
<string name="title_home">الصفحة الرئيسية</string>
|
||||
<string name="title_home">الرئيسية</string>
|
||||
<string name="title_search">البحث</string>
|
||||
<string name="title_downloads">التنزيلات</string>
|
||||
<string name="title_settings">الإعدادات</string>
|
||||
|
@ -31,8 +31,8 @@
|
|||
<string name="no_data">لايوجد بيانات</string>
|
||||
<string name="episode_more_options_des">المزيد من الخيارات</string>
|
||||
<string name="next_episode">الحلقة التالية</string>
|
||||
<string name="result_tags">أنواع</string>
|
||||
<string name="result_share">شارك</string>
|
||||
<string name="result_tags">النوع</string>
|
||||
<string name="result_share">مشاركة</string>
|
||||
<string name="result_open_in_browser">فتح في الويب</string>
|
||||
<string name="skip_loading">تخطي التحميل</string>
|
||||
<string name="loading">…تحميل</string>
|
||||
|
@ -230,7 +230,7 @@
|
|||
<string name="rating">تقييم</string>
|
||||
<string name="duration">المدة الزمنية</string>
|
||||
<string name="site">موقع</string>
|
||||
<string name="synopsis">ملخص</string>
|
||||
<string name="synopsis">القصة</string>
|
||||
|
||||
<string name="queued">في قائمة الانتظار</string>
|
||||
<string name="no_subtitles">الترجمة ليست موجودة</string>
|
||||
|
|
|
@ -19,11 +19,11 @@
|
|||
<string name="app_name">CloudStream</string>
|
||||
<string name="play_with_app_name">Mit CloudStream abspielen</string>
|
||||
<string name="title_home">Startseite</string>
|
||||
<string name="title_search">Suche</string>
|
||||
<string name="title_search">Suchen</string>
|
||||
<string name="title_downloads">Downloads</string>
|
||||
<string name="title_settings">Einstellungen</string>
|
||||
|
||||
<string name="search_hint">Suche…</string>
|
||||
<string name="search_hint">Suchen…</string>
|
||||
<string name="search_hint_site" formatted="true">Suche %s…</string>
|
||||
|
||||
<string name="no_data">Keine Daten vorhanden</string>
|
||||
|
@ -32,15 +32,15 @@
|
|||
<string name="result_tags">Genres</string>
|
||||
<string name="result_share">Teilen</string>
|
||||
<string name="result_open_in_browser">In Browser öffnen</string>
|
||||
<string name="skip_loading">Buffern überspringen</string>
|
||||
<string name="skip_loading">Puffern überspringen</string>
|
||||
<string name="loading">Lädt…</string>
|
||||
|
||||
<string name="type_watching">Am schauen</string>
|
||||
<string name="type_on_hold">Pausiert</string>
|
||||
<string name="type_completed">Abgeschlossen</string>
|
||||
<string name="type_dropped">Abgebrochen</string>
|
||||
<string name="type_plan_to_watch">Möchte schauen</string>
|
||||
<string name="type_none">None</string>
|
||||
<string name="type_plan_to_watch">Geplant</string>
|
||||
<string name="type_none">Nichts</string>
|
||||
<string name="type_re_watching">Erneut anschauen</string>
|
||||
|
||||
<string name="play_movie_button">Film abspielen</string>
|
||||
|
@ -90,7 +90,7 @@
|
|||
<string name="sort_clear">Löschen</string>
|
||||
<string name="sort_save">Speichern</string>
|
||||
|
||||
<string name="player_speed">Players Geschwindigkeit</string>
|
||||
<string name="player_speed">Player Geschwindigkeit</string>
|
||||
|
||||
<string name="subtitles_settings">Untertiteleinstellungen</string>
|
||||
<string name="subs_text_color">Textfarbe</string>
|
||||
|
@ -275,8 +275,8 @@
|
|||
<string name="source_error">Quellenfehler</string>
|
||||
<string name="remote_error">Remotefehler</string>
|
||||
<string name="render_error">Renderfehler</string>
|
||||
<string name="unexpected_error">Unerwarteter Player-Fehler</string>
|
||||
<string name="storage_error">Download-Fehler, Speicherberechtigungen prüfen</string>
|
||||
<string name="unexpected_error">Unerwarteter Playerfehler</string>
|
||||
<string name="storage_error">Downloadfehler, Speicherberechtigungen prüfen</string>
|
||||
|
||||
<string name="episode_action_chromecast_episode">Chromecast-Episode</string>
|
||||
<string name="episode_action_chromecast_mirror">Chromecastmirror</string>
|
||||
|
@ -453,7 +453,7 @@
|
|||
<string name="trailer">Trailer</string>
|
||||
<string name="network_adress_example">Link zum Stream</string>
|
||||
<string name="referer">Referent</string>
|
||||
<string name="next">Nächste</string>
|
||||
<string name="next">Weiter</string>
|
||||
<string name="provider_languages_tip">Videos in diesen Sprachen ansehen</string>
|
||||
<string name="previous">Vorherige</string>
|
||||
<string name="skip_setup">Einrichtung überspringen</string>
|
||||
|
@ -497,4 +497,39 @@
|
|||
<string name="tracks">Spuren</string>
|
||||
<string name="enable_nsfw_on_providers">Aktivieren der NSFW auf unterstützten Anbietern</string>
|
||||
<string name="category_providers">Anbieter</string>
|
||||
|
||||
<string name="extension_rating" formatted="true">Bewertung: %s</string>
|
||||
<string name="extension_description">Beschreibung</string>
|
||||
<string name="extension_version">Version</string>
|
||||
<string name="extension_status">Status</string>
|
||||
<string name="extension_size">Größe</string>
|
||||
<string name="extension_authors">Autoren</string>
|
||||
<string name="extension_types">Unterstützt</string>
|
||||
<string name="extension_language">Sprache</string>
|
||||
<string name="extension_install_first">Zuerst muss die Erweiterung installiert werden</string>
|
||||
|
||||
<string name="hls_playlist">HLS Playlist</string>
|
||||
|
||||
<string name="player_pref">Bevorzugter Videoplayer</string>
|
||||
<string name="player_settings_play_in_app">Interner Player</string>
|
||||
<string name="player_settings_play_in_vlc">VLC</string>
|
||||
<string name="player_settings_play_in_mpv">MPV</string>
|
||||
<string name="player_settings_play_in_web">Web Video Cast</string>
|
||||
<string name="player_settings_play_in_browser">Browser</string>
|
||||
<string name="app_not_found_error">App nicht gefunden</string>
|
||||
<string name="all_languages_preference">Alle Sprachen</string>
|
||||
|
||||
<string name="skip_type_format" formatted="true">Überspringen %s</string>
|
||||
<string name="skip_type_op">Opening</string>
|
||||
<string name="skip_type_ed">Ending</string>
|
||||
<string name="skip_type_recap">Zusammenfassung</string>
|
||||
<string name="skip_type_mixed_ed">Vermischte Endings</string>
|
||||
<string name="skip_type_mixed_op">Vermischte Openings</string>
|
||||
<string name="skip_type_creddits">Abspann</string>
|
||||
<string name="skip_type_intro">Intro</string>
|
||||
|
||||
<string name="clear_history">Verlauf löschen</string>
|
||||
<string name="history">Verlauf</string>
|
||||
<string name="enable_skip_op_from_database_des">Überspringen Button für Openings/Endings anzeigen</string>
|
||||
<string name="clipboard_too_large">Zu viel Text. Kann nicht in der Zwischenablage gespeichert werden.</string>
|
||||
</resources>
|
||||
|
|
|
@ -10,18 +10,18 @@
|
|||
<string name="no_data">Aucune Donnée</string>
|
||||
<string name="episode_more_options_des">Plus d\'options</string>
|
||||
<string name="go_back_img_des">Retour</string>
|
||||
<string name="next_episode">Episode suivant</string>
|
||||
<string name="next_episode">Épisode suivant</string>
|
||||
<string name="result_poster_img_des">Miniature</string>
|
||||
<string name="result_tags">Genres</string>
|
||||
<string name="result_share">Partager</string>
|
||||
<string name="result_open_in_browser">Ouvrir dans le naviguateur</string>
|
||||
<string name="result_open_in_browser">Ouvrir dans le navigateur</string>
|
||||
<string name="skip_loading">Passer le chargement</string>
|
||||
<string name="loading">Chargement…</string>
|
||||
<string name="type_watching">En visionnage</string>
|
||||
<string name="type_on_hold">En pose</string>
|
||||
<string name="type_on_hold">En pause</string>
|
||||
<string name="type_completed">Terminé</string>
|
||||
<string name="type_dropped">Abandonné</string>
|
||||
<string name="type_plan_to_watch">A regarder</string>
|
||||
<string name="type_plan_to_watch">À regarder</string>
|
||||
<string name="type_none">Aucun</string>
|
||||
<string name="play_movie_button">Lire</string>
|
||||
<string name="play_torrent_button">Streamer le Torrent</string>
|
||||
|
@ -29,15 +29,15 @@
|
|||
<string name="pick_subtitle">Sous-titres</string>
|
||||
<string name="reload_error">Réessayer la connection…</string>
|
||||
<string name="go_back">Retour</string>
|
||||
<string name="episode_poster_img_des">Miniature de l\'Episode</string>
|
||||
<string name="play_episode">Lire l\'Episode</string>
|
||||
<string name="episode_poster_img_des">Miniature de l\'Épisode</string>
|
||||
<string name="play_episode">Lire l\'Épisode</string>
|
||||
<!--<string name="need_storage">Permet de télécharger les épisodes</string>-->
|
||||
<string name="download">Télécharger</string>
|
||||
<string name="downloaded">Téléchargé</string>
|
||||
<string name="downloading">Téléchargement</string>
|
||||
<string name="download_paused">Téléchargement en pause</string>
|
||||
<string name="download_started">Téléchargement commencé</string>
|
||||
<string name="download_failed">Echec du Téléchargement</string>
|
||||
<string name="download_failed">Échec du Téléchargement</string>
|
||||
<string name="download_canceled">Téléchargement Annulé</string>
|
||||
<string name="download_done">Téléchargement Terminé</string>
|
||||
<string name="error_loading_links_toast">Erreur lors du téléchargement des liens</string>
|
||||
|
@ -68,34 +68,34 @@
|
|||
<string name="subs_background_color">Couleur de fond</string>
|
||||
<string name="subs_window_color">Couleur de la fenètre</string>
|
||||
<string name="subs_edge_type">Type de bordure</string>
|
||||
<string name="subs_subtitle_elevation">Elevation des sous-titres</string>
|
||||
<string name="subs_subtitle_elevation">Élévation des sous-titres</string>
|
||||
<string name="preview_background_img_des">Aperçu de l\'arrière-plan</string>
|
||||
<string name="subs_font">Police</string>
|
||||
<string name="search_provider_text_providers">Rechercher en utilisant les fournisseurs</string>
|
||||
<string name="search_provider_text_types">Rechercher en utilisant les types</string>
|
||||
<string name="benene_count_text">%d Benenes données au dev</string>
|
||||
<string name="benene_count_text_none">Aucune Benenes donnée</string>
|
||||
<string name="subs_auto_select_language">Séléction automatique de la langue</string>
|
||||
<string name="subs_auto_select_language">Sélection automatique de la langue</string>
|
||||
<string name="subs_download_languages">Télécharger les langues</string>
|
||||
<string name="subs_hold_to_reset_to_default">Maintenir pour réinitialliser les valeurs par défault</string>
|
||||
<string name="continue_watching">Continer à regarder</string>
|
||||
<string name="subs_hold_to_reset_to_default">Maintenir pour réinitialiser les valeurs par défaut</string>
|
||||
<string name="continue_watching">Continuer à regarder</string>
|
||||
<string name="action_remove_watching">Supprimer</string>
|
||||
<string name="action_open_watching">Plus d\'info</string>
|
||||
<string name="vpn_might_be_needed">Un VPN peut être requit pour que ce fournisseur fonctionne</string>
|
||||
<string name="vpn_torrent">Ce fournisseur est un torrent, un VPN est recommendé</string>
|
||||
<string name="vpn_torrent">Ce fournisseur est un torrent, un VPN est recommandé</string>
|
||||
<string name="torrent_plot">Description</string>
|
||||
<string name="normal_no_plot">Aucune description trouvée</string>
|
||||
<string name="torrent_no_plot">Aucune description trouvée</string>
|
||||
<string name="picture_in_picture">Lecteur en mode Picture-in-Picture</string>
|
||||
<string name="picture_in_picture_des">Continuer la lecture dans une fenêtre miniature en superposition sur d\'autres applis</string>
|
||||
<string name="player_size_settings">Boutton de redimentionnement du lecteur</string>
|
||||
<string name="player_size_settings">Bouton de redimensionnement du lecteur</string>
|
||||
<string name="player_size_settings_des">Supprimer les bordures noires</string>
|
||||
<string name="player_subtitles_settings">Sous-titres</string>
|
||||
<string name="player_subtitles_settings_des">Paramètres des sous-titres du lecteur</string>
|
||||
<string name="eigengraumode_settings">Vitesse de lecture</string>
|
||||
<string name="eigengraumode_settings_des">Ajouter l\'option de vitesse sur le lecteur</string>
|
||||
<string name="swipe_to_seek_settings">Balayer pour avancer rapidement</string>
|
||||
<string name="swipe_to_seek_settings_des">Balayer vers la gauche ou la droite pour controler le temps du lecteur vidéo</string>
|
||||
<string name="swipe_to_seek_settings_des">Balayer vers la gauche ou la droite pour contrôler le temps du lecteur vidéo</string>
|
||||
<string name="swipe_to_change_settings">Balayer pour changer les paramètres</string>
|
||||
<string name="swipe_to_change_settings_des">Balayer sur le coté droit ou gauche pour changer le niveau de luminosité ou de volume</string>
|
||||
<string name="double_tap_to_seek_settings">Taper deux fois pour rechercher</string>
|
||||
|
@ -106,13 +106,13 @@
|
|||
<string name="search">Rechercher</string>
|
||||
<string name="settings_info">Informations</string>
|
||||
<string name="advanced_search">Recherche Avancée</string>
|
||||
<string name="advanced_search_des">Donne les résultats séparé par les fournisseur</string>
|
||||
<string name="advanced_search_des">Donne les résultats séparés par les fournisseurs</string>
|
||||
<string name="bug_report_settings_off">N\'envoyer les données que lors d\'un crash</string>
|
||||
<string name="bug_report_settings_on">N\'envoyer aucune données</string>
|
||||
<string name="updates_settings">Afficher les mises-à-jour de l\'application</string>
|
||||
<string name="updates_settings_des">Chercher des mises-à-jour automatiquement au démarage</string>
|
||||
<string name="uprereleases_settings">Mettre à jour vers une version béta</string>
|
||||
<string name="uprereleases_settings_des">Rechercher pour une mise à jour vers une version béta au lieu des version complètes seulement</string>
|
||||
<string name="uprereleases_settings">Mettre à jour vers une version bêta</string>
|
||||
<string name="uprereleases_settings_des">Rechercher pour une mise à jour vers une version bêta au lieu des version complètes seulement</string>
|
||||
<string name="github">Github</string>
|
||||
<string name="lightnovel">L\'application Light Novel par les mêmes devs</string>
|
||||
<string name="anim">Application d\'animés par les mêmes devs</string>
|
||||
|
@ -122,24 +122,24 @@
|
|||
<string name="app_language">Language de l\'application</string>
|
||||
<string name="no_chromecast_support_toast">Ce fournisseur ne supporte pas le Chromecast</string>
|
||||
<string name="no_links_found_toast">Aucun lien trouvé</string>
|
||||
<string name="copy_link_toast">Lien copié dans le presse-papiers</string>
|
||||
<string name="copy_link_toast">Lien copié dans le presse-papier</string>
|
||||
<string name="play_episode_toast">Lecture de l\'episode</string>
|
||||
<string name="subs_default_reset_toast">Réinitialiser aux valeurs par défault</string>
|
||||
<string name="acra_report_toast">Désolé, l\'application à crashé. Un rapport de bug anonyme va être envoyé aux devloppeurs</string>
|
||||
<string name="acra_report_toast">Désolé, l\'application à crashé. Un rapport de bug anonyme va être envoyé aux développeurs</string>
|
||||
<string name="season">Saison</string>
|
||||
<string name="no_season">Pas de Saison</string>
|
||||
<string name="episode">Episode</string>
|
||||
<string name="episodes">Episodes</string>
|
||||
<string name="episode">Épisode</string>
|
||||
<string name="episodes">Épisodes</string>
|
||||
<string name="season_short">S</string>
|
||||
<string name="episode_short">E</string>
|
||||
<string name="delete_file">Supprimer le Fichier</string>
|
||||
<string name="delete">Supprimer</string>
|
||||
<string name="pause">Pause</string>
|
||||
<string name="resume">Reprendre</string>
|
||||
<string name="delete_message">Cela va supprimer définitivement %s\nÊtes vous sûr ?</string>
|
||||
<string name="delete_message">Cela va supprimer définitivement %s\nÊtes-vous sûr ?</string>
|
||||
<string name="status_ongoing">En cours</string>
|
||||
<string name="status_completed">Terminé</string>
|
||||
<string name="status">Status</string>
|
||||
<string name="status">Statut</string>
|
||||
<string name="year">Année</string>
|
||||
<string name="rating">Note</string>
|
||||
<string name="duration">Durée</string>
|
||||
|
@ -159,9 +159,9 @@
|
|||
<string name="source_error">Erreur de la source</string>
|
||||
<string name="remote_error">Erreur distante</string>
|
||||
<string name="render_error">Erreur d\'affichage</string>
|
||||
<string name="unexpected_error">Erreur innatendue du lecteur</string>
|
||||
<string name="unexpected_error">Erreur inattendue du lecteur</string>
|
||||
<string name="storage_error">Erreur du téléchargement, vérifier l\'autorisation du stockage</string>
|
||||
<string name="episode_action_chromecast_episode">Episode Chromecast</string>
|
||||
<string name="episode_action_chromecast_episode">Épisode 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_format">Lecture dans %s</string>
|
||||
|
@ -207,18 +207,18 @@
|
|||
<string name="app_layout">Disposition de l\'application</string>
|
||||
<string name="tv_layout">Disposition TV</string>
|
||||
<string name="provider_lang_settings">Language des fournisseurs</string>
|
||||
<string name="preferred_media_settings">Médias préfères</string>
|
||||
<string name="preferred_media_settings">Médias préférées</string>
|
||||
<string name="automatic">Auto</string>
|
||||
<string name="cast_format">Acteurs: %s</string>
|
||||
<string name="duration_format">%d min</string>
|
||||
<string name="search_hint_site">Rechercher sur %s...</string>
|
||||
<string name="type_re_watching">A re-regarder</string>
|
||||
<string name="type_re_watching">À re-regarder</string>
|
||||
<string name="sort_copy">Copier</string>
|
||||
<string name="sort_close">Coller</string>
|
||||
<string name="sort_clear">Effacer</string>
|
||||
<string name="sort_save">Enregister</string>
|
||||
<string name="subs_import_text">Importer des polices en les plaçants dans %s</string>
|
||||
<string name="provider_info_meta">Les metadonnées ne sont pas fournies par le site, le chargement de la vidéo va échoué si elle n\'existe pas sur le site.</string>
|
||||
<string name="provider_info_meta">Les metadonnées ne sont pas fournies par le site, le chargement de la vidéo va échouer si elle n\'existe pas sur le site.</string>
|
||||
<string name="show_log_cat">Afficher les logs 🐈</string>
|
||||
<string name="chromecast_subtitles_settings">Sous-titres Chromecast</string>
|
||||
<string name="chromecast_subtitles_settings_des">Paramètres des sous-titres Chromecast</string>
|
||||
|
@ -228,7 +228,7 @@
|
|||
<string name="restore_settings">Restaurer les données sauvegardées</string>
|
||||
<string name="backup_settings">Sauvegarder les données</string>
|
||||
<string name="restore_success">Fichier de sauvegarde chargé</string>
|
||||
<string name="restore_failed_format">Echec de la restauration des données depuis le fichier</string>
|
||||
<string name="restore_failed_format">Échec de la restauration des données depuis le fichier</string>
|
||||
<string name="backup_success">Restauration des données réussie</string>
|
||||
<string name="backup_failed">Permission d\'accès au stockage manquante</string>
|
||||
<string name="backup_failed_error_format">Erreur pendant la sauvegarde %s</string>
|
||||
|
@ -250,7 +250,7 @@
|
|||
<string name="video_ram_description">Causera des crashs aléatoire si mit trop haut. Ne le changez pas si vous avez un appareil avec peu de ram comme une télévision android ou un vieux téléphone.</string>
|
||||
<string name="video_disk_description">Causera des problèmes si mit trop haut et si vous avez un appareil avec peu de stockage comme une télévision android ou un vieux téléphone.</string>
|
||||
<string name="random_button_settings">Bouton aléatoire</string>
|
||||
<string name="random_button_settings_desc">Afficher le boutton aléatoire</string>
|
||||
<string name="random_button_settings_desc">Afficher le bouton aléatoire</string>
|
||||
<string name="emulator_layout">Disposition émulateur</string>
|
||||
<string name="bottom_title_settings">Position du titre du poster</string>
|
||||
<string name="bottom_title_settings_des">Mettre le titre sous le poster</string>
|
||||
|
@ -272,15 +272,15 @@
|
|||
<string name="subtitles_outline">Contour</string>
|
||||
<string name="subtitles_depressed">Déprimé</string>
|
||||
<string name="subtitles_shadow">Ombre</string>
|
||||
<string name="subtitles_raised">Elevation</string>
|
||||
<string name="subtitles_raised">Élévation</string>
|
||||
<string name="subtitle_offset">Synchroniser les sous-titres</string>
|
||||
<string name="subtitle_offset_hint">1000ms</string>
|
||||
<string name="subtitle_offset_title">Délai des sous-titres</string>
|
||||
<string name="subtitle_offset_extra_hint_later_format">Utilisez si les sous-titres sont affichés %dms trop tôt</string>
|
||||
<string name="subtitle_offset_extra_hint_before_format">Utilisez si les sous-titres sont affichés %dms trop tard</string>
|
||||
<string name="subtitle_offset_extra_hint_none_format">Aucun délai de sous-titre</string>
|
||||
<string name="subtitles_example_text">Le rapide rendard brun saute au-dessus du chien paresseux</string>
|
||||
<string name="recommended">Recommendé</string>
|
||||
<string name="subtitles_example_text">Portez ce vieux whisky au juge blond qui fume</string>
|
||||
<string name="recommended">Recommandé</string>
|
||||
<string name="player_loaded_subtitles">%s chargé</string>
|
||||
<string name="player_load_subtitles">Charger depuis le fichier</string>
|
||||
<string name="downloaded_file">Fichier téléchargé</string>
|
||||
|
@ -289,7 +289,7 @@
|
|||
<string name="actor_background">Arrière plan</string>
|
||||
<string name="home_source">Source</string>
|
||||
<string name="home_random">Aléatoire</string>
|
||||
<string name="coming_soon">A venir ...</string>
|
||||
<string name="coming_soon">À venir ...</string>
|
||||
<string name="poster_image">Image de l\'affiche</string>
|
||||
<string name="authenticated_user">Connecté %s</string>
|
||||
<string name="action_add_to_bookmarks">Définir le statut de visionage</string>
|
||||
|
|
|
@ -153,6 +153,10 @@
|
|||
<string name="swipe_to_seek_settings_des">Scorri a sinistra o a destra per controllare il tempo del video</string>
|
||||
<string name="swipe_to_change_settings">Scorri per cambiare le impostazioni</string>
|
||||
<string name="swipe_to_change_settings_des">Passa il dito sul lato sinistro o destro per cambiare la luminosità o il volume</string>
|
||||
|
||||
<string name="autoplay_next_settings">Riproduci automaticamente l\'episodio successivo</string>
|
||||
<string name="autoplay_next_settings_des">Avvia l\'episodio successivo al termine di quello in corso</string>
|
||||
|
||||
<string name="double_tap_to_seek_settings">Doppio tocco per andare avanti/indietro</string>
|
||||
<string name="double_tap_to_pause_settings">Doppio tocco per mettere in pausa</string>
|
||||
<string name="double_tap_to_seek_settings_des">Tocca due volte il lato destro o sinistro dello schermo per mandare avanti o indietro il video</string>
|
||||
|
@ -186,7 +190,9 @@
|
|||
<string name="show_fillers_settings">Mostra tag [filler] per anime</string>
|
||||
<string name="show_trailers_settings">Mostra trailer</string>
|
||||
<string name="kitsu_settings">Mostra poster da Kitsu</string>
|
||||
<string name="pref_filter_search_quality">Nascondi la qualità video selezionata dai risultati di ricerca</string>
|
||||
|
||||
<string name="automatic_plugin_updates">Aggiorna automaticamente i plugin</string>
|
||||
<string name="updates_settings">Mostra gli aggiornamenti dell\'app</string>
|
||||
<string name="updates_settings_des">Cerca automaticamente nuovi aggiornamenti all\'avvio</string>
|
||||
<string name="uprereleases_settings">Aggiorna alle prerelease</string>
|
||||
|
@ -208,9 +214,12 @@
|
|||
<string name="acra_report_toast">Spiacente, l\'applicazione è andata in crash. Una segnalazione anonima di bug sarà inviata agli sviluppatori</string>
|
||||
|
||||
<string name="season">Stagione</string>
|
||||
<string name="season_format">%s %d%s</string>
|
||||
<string name="no_season">Nessuna stagione</string>
|
||||
<string name="episode">Episodio</string>
|
||||
<string name="episodes">Episodi</string>
|
||||
<string name="episodes_range">%d-%d</string>
|
||||
<string name="episode_format" formatted="true">%d %s</string>
|
||||
<string name="season_short">S</string>
|
||||
<string name="episode_short">E</string>
|
||||
<string name="no_episodes_found">Nessun episodio trovato</string>
|
||||
|
@ -251,6 +260,8 @@
|
|||
<string name="documentaries">Documentari</string>
|
||||
<string name="asian_drama">Drama Asiatici</string>
|
||||
<string name="livestreams">Livestreams</string>
|
||||
<string name="nsfw">NSFW</string>
|
||||
<string name="others">Altri</string>
|
||||
|
||||
<!--singular-->
|
||||
<string name="movies_singular">Film</string>
|
||||
|
@ -262,6 +273,8 @@
|
|||
<string name="documentaries_singular">Documentario</string>
|
||||
<string name="asian_drama_singular">Drama Asiatico</string>
|
||||
<string name="live_singular">Livestream</string>
|
||||
<string name="nsfw_singular">NSFW</string>
|
||||
<string name="other_singular">Altro</string>
|
||||
|
||||
<string name="source_error">Source error</string>
|
||||
<string name="remote_error">Remote error</string>
|
||||
|
@ -333,7 +346,9 @@
|
|||
<string name="provider_lang_settings">Lingua provider</string>
|
||||
<string name="app_layout">Layout app</string>
|
||||
<string name="preferred_media_settings">Media preferito</string>
|
||||
<string name="enable_nsfw_on_providers">Abilita NSFW sui provider supportati</string>
|
||||
<string name="subtitles_encoding">Encoding Sottotitoli</string>
|
||||
<string name="category_providers">Provider</string>
|
||||
<string name="category_ui">Interfaccia utente</string>
|
||||
|
||||
<string name="automatic">Auto</string>
|
||||
|
@ -438,11 +453,11 @@
|
|||
<string name="error">Errore</string>
|
||||
<!--<string name="subtitles_remove_captions">Remove closed captions from subtitles</string>-->
|
||||
<!--<string name="subtitles_remove_bloat">Remove bloat from subtitles</string>-->
|
||||
<!--<string name="extras">Extra</string>-->
|
||||
<string name="subtitles_filter_lang">Filtra in base alla lingua preferita</string>
|
||||
<string name="extras">Extra</string>
|
||||
<string name="trailer">Trailer</string>
|
||||
<string name="network_adress_example">Link allo stream</string>
|
||||
|
||||
|
||||
|
||||
<string name="referer">Referer</string>
|
||||
<string name="next">Prossimo</string>
|
||||
<string name="provider_languages_tip">Guarda video in queste lingue</string>
|
||||
|
@ -472,6 +487,7 @@
|
|||
<string name="plugins_downloaded" formatted="true">Scaricato: %d</string>
|
||||
<string name="plugins_disabled" formatted="true">Disabilitato: %d</string>
|
||||
<string name="plugins_not_downloaded" formatted="true">Non scaricato: %d</string>
|
||||
<string name="plugins_updated" formatted="true">Aggiornati %d plugin</string>
|
||||
<string name="blank_repo_message">Aggiungi una repository per installare l\'estensione dei siti</string>
|
||||
<string name="view_public_repositories_button">Vedi le repository della community</string>
|
||||
<string name="view_public_repositories_button_short">Lista pubblica</string>
|
||||
|
@ -485,10 +501,41 @@
|
|||
<string name="apply_on_restart">Applica al riavvio</string>
|
||||
|
||||
<string name="safe_mode_title">Safe Mode abilitata</string>
|
||||
<string name="safe_mode_description">Si è verificato un crash irrecuperabile e abbiamo disabilitato automaticamente tutte le estensioni, in modo che possiate trovare e rimuovere l\'estensione che causa il problema.</string>
|
||||
<string name="safe_mode_description">Si è verificato un crash irrecuperabile. Tutte le estensioni sono state disabilitate, in modo da trovare e rimuovere l\'estensione che causa il problema.</string>
|
||||
<string name="safe_mode_crash_info">Vedi informazioni del crash</string>
|
||||
|
||||
<string name="extension_rating" formatted="true">Voto: %s</string>
|
||||
<string name="extension_description">Descrizione</string>
|
||||
<string name="extension_version">Versione</string>
|
||||
<string name="extension_status">Stato</string>
|
||||
<string name="extension_size">Dimensione</string>
|
||||
<string name="extension_authors">Autori</string>
|
||||
<string name="extension_types">Supportati</string>
|
||||
<string name="extension_language">Lingua</string>
|
||||
<string name="extension_install_first">Prima installa l\'estensione</string>
|
||||
|
||||
<string name="hls_playlist">HLS Playlist</string>
|
||||
|
||||
<!--<string name="refer
|
||||
er">Referer</string>-->
|
||||
<string name="player_pref">Video player preferito</string>
|
||||
<string name="player_settings_play_in_app">Player interno</string>
|
||||
<string name="player_settings_play_in_vlc">VLC</string>
|
||||
<string name="player_settings_play_in_mpv">MPV</string>
|
||||
<string name="player_settings_play_in_web">Web Video Cast</string>
|
||||
<string name="player_settings_play_in_browser">Browser</string>
|
||||
<string name="app_not_found_error">App non trovata</string>
|
||||
<string name="all_languages_preference">Tutte le lingue</string>
|
||||
|
||||
<string name="skip_type_format" formatted="true">Salta %s</string>
|
||||
<!--<string name="skip_type_op">Opening</string>-->
|
||||
<!--<string name="skip_type_ed">Ending</string>-->
|
||||
<string name="skip_type_recap">Riassunto</string>
|
||||
<!--<string name="skip_type_mixed_ed">Mixed ending</string>-->
|
||||
<!--<string name="skip_type_mixed_op">Mixed opening</string>-->
|
||||
<string name="skip_type_creddits">Crediti</string>
|
||||
<!--<string name="skip_type_intro">Intro</string>-->
|
||||
|
||||
<string name="clear_history">Cancella cronologia</string>
|
||||
<string name="history">Cronologia</string>
|
||||
<string name="enable_skip_op_from_database_des">Mostra popup per salta sigla iniziale/finale</string>
|
||||
<string name="clipboard_too_large">Testo troppo lungo. Impossibile salvare negli appunti.</string>
|
||||
</resources>
|
||||
|
|
|
@ -590,4 +590,6 @@
|
|||
|
||||
<string name="clear_history">清除历史记录</string>
|
||||
<string name="history">历史记录</string>
|
||||
<string name="enable_skip_op_from_database_des">显示跳过片头/片尾弹窗</string>
|
||||
<string name="clipboard_too_large">文本过多,无法保存到剪贴板。</string>
|
||||
</resources>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue