diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 639932c4..b0798e44 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -50,13 +50,14 @@ android {
}
}
- compileSdk = 34
+ // https://developer.android.com/about/versions/14/behavior-changes-14#safer-dynamic-code-loading
+ compileSdk = 33 // android 14 is fucked
buildToolsVersion = "34.0.0"
defaultConfig {
applicationId = "com.lagradost.cloudstream3"
minSdk = 21
- targetSdk = 34
+ targetSdk = 33
versionCode = 62
versionName = "4.2.1"
@@ -156,16 +157,19 @@ dependencies {
implementation("androidx.test.ext:junit-ktx:1.1.5")
testImplementation("org.json:json:20230618")
- implementation("androidx.core:core-ktx:1.12.0")
+ implementation("androidx.core:core-ktx:1.10.1") // need 34 for higher
implementation("androidx.appcompat:appcompat:1.6.1") // need target 32 for 1.5.0
// dont change this to 1.6.0 it looks ugly af
- implementation("com.google.android.material:material:1.10.0")
+ implementation("com.google.android.material:material:1.5.0")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
- implementation("androidx.navigation:navigation-fragment-ktx:2.7.4")
- implementation("androidx.navigation:navigation-ui-ktx:2.7.4")
- implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.2")
- implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2")
+
+ // need 34 for higher
+ implementation("androidx.navigation:navigation-fragment-ktx:2.6.0")
+ implementation("androidx.navigation:navigation-ui-ktx:2.6.0")
+ implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.1")
+ implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1")
+
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
@@ -173,9 +177,10 @@ dependencies {
// implementation("io.karn:khttp-android:0.1.2") //okhttp instead
// implementation("org.jsoup:jsoup:1.13.1")
- implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.15.2")
+ // DONT UPDATE, WILL CRASH ANDROID TV ????
+ implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.13.1")
- implementation("androidx.preference:preference-ktx:1.2.1")
+ implementation("androidx.preference:preference-ktx:1.2.0")
implementation("com.github.bumptech.glide:glide:4.13.1")
kapt("com.github.bumptech.glide:compiler:4.13.1")
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 503cd76b..e0d43338 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,6 +15,8 @@
+
+
@@ -186,6 +189,7 @@
android:exported="false" />
diff --git a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt
index 16a438b3..759f99d4 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/CommonActivity.kt
@@ -302,12 +302,15 @@ object CommonActivity {
val currentOverlayTheme =
when (settingsManager.getString(act.getString(R.string.primary_color_key), "Normal")) {
"Normal" -> R.style.OverlayPrimaryColorNormal
+ "DandelionYellow" -> R.style.OverlayPrimaryColorDandelionYellow
"CarnationPink" -> R.style.OverlayPrimaryColorCarnationPink
+ "Orange" -> R.style.OverlayPrimaryColorOrange
"DarkGreen" -> R.style.OverlayPrimaryColorDarkGreen
"Maroon" -> R.style.OverlayPrimaryColorMaroon
"NavyBlue" -> R.style.OverlayPrimaryColorNavyBlue
"Grey" -> R.style.OverlayPrimaryColorGrey
"White" -> R.style.OverlayPrimaryColorWhite
+ "CoolBlue" -> R.style.OverlayPrimaryColorCoolBlue
"Brown" -> R.style.OverlayPrimaryColorBrown
"Purple" -> R.style.OverlayPrimaryColorPurple
"Green" -> R.style.OverlayPrimaryColorGreen
diff --git a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt
index 5bb96ed1..8e87cc99 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/plugins/PluginManager.kt
@@ -477,6 +477,14 @@ object PluginManager {
Log.i(TAG, "Loading plugin: $data")
return try {
+ /* in case of android 14 then
+ try {
+ File(filePath).setReadOnly()
+ } catch (t : Throwable) {
+ Log.e(TAG, "Failed to set dex as readonly")
+ logError(t)
+ }*/
+
val loader = PathClassLoader(filePath, context.classLoader)
var manifest: Plugin.Manifest
loader.getResourceAsStream("manifest.json").use { stream ->
diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt
index 431e4fe1..17a90da9 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/AbstractPlayerFragment.kt
@@ -37,6 +37,7 @@ import com.lagradost.cloudstream3.CommonActivity.canEnterPipMode
import com.lagradost.cloudstream3.CommonActivity.isInPIPMode
import com.lagradost.cloudstream3.CommonActivity.keyEventListener
import com.lagradost.cloudstream3.CommonActivity.playerEventListener
+import com.lagradost.cloudstream3.CommonActivity.screenWidth
import com.lagradost.cloudstream3.CommonActivity.showToast
import com.lagradost.cloudstream3.R
import com.lagradost.cloudstream3.mvvm.logError
@@ -79,12 +80,12 @@ abstract class AbstractPlayerFragment(
var isBuffering = true
protected open var hasPipModeSupport = true
- var playerPausePlayHolderHolder : FrameLayout? = null
- var playerPausePlay : ImageView? = null
- var playerBuffering : ProgressBar? = null
- var playerView : PlayerView? = null
- var piphide : FrameLayout? = null
- var subtitleHolder : FrameLayout? = null
+ var playerPausePlayHolderHolder: FrameLayout? = null
+ var playerPausePlay: ImageView? = null
+ var playerBuffering: ProgressBar? = null
+ var playerView: PlayerView? = null
+ var piphide: FrameLayout? = null
+ var subtitleHolder: FrameLayout? = null
@LayoutRes
protected open var layout: Int = R.layout.fragment_player
@@ -97,11 +98,11 @@ abstract class AbstractPlayerFragment(
throw NotImplementedError()
}
- open fun playerPositionChanged(position: Long, duration : Long) {
+ open fun playerPositionChanged(position: Long, duration: Long) {
throw NotImplementedError()
}
- open fun playerDimensionsLoaded(width: Int, height : Int) {
+ open fun playerDimensionsLoaded(width: Int, height: Int) {
throw NotImplementedError()
}
@@ -137,8 +138,10 @@ abstract class AbstractPlayerFragment(
}
}
- private fun updateIsPlaying(wasPlaying : CSPlayerLoading,
- isPlaying : CSPlayerLoading) {
+ private fun updateIsPlaying(
+ wasPlaying: CSPlayerLoading,
+ isPlaying: CSPlayerLoading
+ ) {
val isPlayingRightNow = CSPlayerLoading.IsPlaying == isPlaying
val isPausedRightNow = CSPlayerLoading.IsPaused == isPlaying
@@ -186,7 +189,11 @@ abstract class AbstractPlayerFragment(
canEnterPipMode = isPlayingRightNow && hasPipModeSupport
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
activity?.let { act ->
- PlayerPipHelper.updatePIPModeActions(act, isPlayingRightNow, player.getAspectRatio())
+ PlayerPipHelper.updatePIPModeActions(
+ act,
+ isPlayingRightNow,
+ player.getAspectRatio()
+ )
}
}
}
@@ -375,49 +382,61 @@ abstract class AbstractPlayerFragment(
/** This receives the events from the player, if you want to append functionality you do it here,
* do note that this only receives events for UI changes,
* and returning early WONT stop it from changing in eg the player time or pause status */
- open fun mainCallback(event : PlayerEvent) {
+ open fun mainCallback(event: PlayerEvent) {
Log.i(TAG, "Handle event: $event")
- when(event) {
+ when (event) {
is ResizedEvent -> {
playerDimensionsLoaded(event.width, event.height)
}
+
is PlayerAttachedEvent -> {
playerUpdated(event.player)
}
+
is SubtitlesUpdatedEvent -> {
subtitlesChanged()
}
+
is TimestampSkippedEvent -> {
onTimestampSkipped(event.timestamp)
}
+
is TimestampInvokedEvent -> {
onTimestamp(event.timestamp)
}
+
is TracksChangedEvent -> {
onTracksInfoChanged()
}
+
is EmbeddedSubtitlesFetchedEvent -> {
embeddedSubtitlesFetched(event.tracks)
}
+
is ErrorEvent -> {
playerError(event.error)
}
+
is RequestAudioFocusEvent -> {
requestAudioFocus()
}
+
is EpisodeSeekEvent -> {
- when(event.offset) {
+ when (event.offset) {
-1 -> prevEpisode()
1 -> nextEpisode()
else -> {}
}
}
+
is StatusEvent -> {
updateIsPlaying(wasPlaying = event.wasPlaying, isPlaying = event.isPlaying)
}
+
is PositionEvent -> {
playerPositionChanged(position = event.toMs, duration = event.durationMs)
}
+
is VideoEndedEvent -> {
context?.let { ctx ->
// Only play next episode if autoplay is on (default)
@@ -434,6 +453,7 @@ abstract class AbstractPlayerFragment(
}
}
}
+
is PauseEvent -> Unit
is PlayEvent -> Unit
}
@@ -457,10 +477,10 @@ abstract class AbstractPlayerFragment(
if (player is CS3IPlayer) {
// preview bar
- val progressBar : PreviewTimeBar? = playerView?.findViewById(R.id.exo_progress)
- val previewImageView : ImageView? = playerView?.findViewById(R.id.previewImageView)
- val previewFrameLayout : FrameLayout? = playerView?.findViewById(R.id.previewFrameLayout)
- if(progressBar != null && previewImageView != null && previewFrameLayout != null) {
+ val progressBar: PreviewTimeBar? = playerView?.findViewById(R.id.exo_progress)
+ val previewImageView: ImageView? = playerView?.findViewById(R.id.previewImageView)
+ val previewFrameLayout: FrameLayout? = playerView?.findViewById(R.id.previewFrameLayout)
+ if (progressBar != null && previewImageView != null && previewFrameLayout != null) {
var resume = false
progressBar.addOnScrubListener(object : PreviewBar.OnScrubListener {
override fun onScrubStart(previewBar: PreviewBar?) {
@@ -495,19 +515,34 @@ abstract class AbstractPlayerFragment(
subView = playerView?.findViewById(R.id.exo_subtitles)
subStyle = SubtitlesFragment.getCurrentSavedStyle()
player.initSubtitles(subView, subtitleHolder, subStyle)
+ (player.imageGenerator as? PreviewGenerator)?.params = ImageParams.new16by9(screenWidth)
+ /*previewImageView?.doOnLayout {
+ (player.imageGenerator as? PreviewGenerator)?.params = ImageParams(
+ it.measuredWidth,
+ it.measuredHeight
+ )
+ }*/
/** this might seam a bit fucky and that is because it is, the seek event is captured twice, once by the player
* and once by the UI even if it should only be registered once by the UI */
- playerView?.findViewById(R.id.exo_progress)?.addListener(object : TimeBar.OnScrubListener {
- override fun onScrubStart(timeBar: TimeBar, position: Long) = Unit
- override fun onScrubMove(timeBar: TimeBar, position: Long) = Unit
- override fun onScrubStop(timeBar: TimeBar, position: Long, canceled: Boolean) {
- if (canceled) return
- val playerDuration = player.getDuration() ?: return
- val playerPosition = player.getPosition() ?: return
- mainCallback(PositionEvent(source = PlayerEventSource.UI, durationMs = playerDuration, fromMs = playerPosition, toMs = position))
- }
- })
+ playerView?.findViewById(R.id.exo_progress)
+ ?.addListener(object : TimeBar.OnScrubListener {
+ override fun onScrubStart(timeBar: TimeBar, position: Long) = Unit
+ override fun onScrubMove(timeBar: TimeBar, position: Long) = Unit
+ override fun onScrubStop(timeBar: TimeBar, position: Long, canceled: Boolean) {
+ if (canceled) return
+ val playerDuration = player.getDuration() ?: return
+ val playerPosition = player.getPosition() ?: return
+ mainCallback(
+ PositionEvent(
+ source = PlayerEventSource.UI,
+ durationMs = playerDuration,
+ fromMs = playerPosition,
+ toMs = position
+ )
+ )
+ }
+ })
SubtitlesFragment.applyStyleEvent += ::onSubStyleChanged
diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt
index 49904f6a..8d1eb7df 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/CS3IPlayer.kt
@@ -100,7 +100,7 @@ class CS3IPlayer : IPlayer {
var simpleCacheSize = 0L
var videoBufferMs = 0L
- private val imageGenerator = PreviewGenerator()
+ val imageGenerator = IPreviewGenerator.new()
private val seekActionTime = 30000L
@@ -205,7 +205,7 @@ class CS3IPlayer : IPlayer {
subtitles: Set,
subtitle: SubtitleData?,
autoPlay: Boolean?,
- preview : Boolean,
+ preview: Boolean,
) {
Log.i(TAG, "loadPlayer")
if (sameEpisode) {
@@ -224,24 +224,30 @@ class CS3IPlayer : IPlayer {
// release the current exoplayer and cache
releasePlayer()
+
if (link != null) {
// only video support atm
- if (preview) {
- imageGenerator.load(link, sameEpisode)
- } else {
- imageGenerator.clear(sameEpisode)
+ (imageGenerator as? PreviewGenerator)?.let { gen ->
+ if (preview) {
+ gen.load(link, sameEpisode)
+ } else {
+ gen.clear(sameEpisode)
+ }
}
loadOnlinePlayer(context, link)
} else if (data != null) {
- if (preview) {
- imageGenerator.load(context, data, sameEpisode)
- } else {
- imageGenerator.clear(sameEpisode)
+ (imageGenerator as? PreviewGenerator)?.let { gen ->
+ if (preview) {
+ gen.load(context, data, sameEpisode)
+ } else {
+ gen.clear(sameEpisode)
+ }
}
loadOfflinePlayer(context, data)
} else {
throw IllegalArgumentException("Requires link or uri")
}
+
}
override fun setActiveSubtitles(subtitles: Set) {
@@ -537,7 +543,10 @@ class CS3IPlayer : IPlayer {
**/
var preferredAudioTrackLanguage: String? = null
get() {
- return field ?: getKey("$currentAccount/$PREFERRED_AUDIO_LANGUAGE_KEY", field)?.also {
+ return field ?: getKey(
+ "$currentAccount/$PREFERRED_AUDIO_LANGUAGE_KEY",
+ field
+ )?.also {
field = it
}
}
diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt
index ffb4751f..6414374b 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PreviewGenerator.kt
@@ -4,9 +4,12 @@ import android.content.Context
import android.graphics.Bitmap
import android.media.MediaMetadataRetriever
import android.net.Uri
+import android.os.Build
import android.util.Log
import androidx.annotation.WorkerThread
+import androidx.core.graphics.scale
import com.lagradost.cloudstream3.mvvm.logError
+import com.lagradost.cloudstream3.ui.settings.SettingsFragment
import com.lagradost.cloudstream3.utils.Coroutines.ioSafe
import com.lagradost.cloudstream3.utils.ExtractorLink
import com.lagradost.cloudstream3.utils.ExtractorLinkType
@@ -25,21 +28,98 @@ import kotlin.math.log2
const val MAX_LOD = 6
const val MIN_LOD = 3
+data class ImageParams(
+ val width: Int,
+ val height: Int,
+) {
+ companion object {
+ val DEFAULT = ImageParams(200, 320)
+ fun new16by9(width: Int): ImageParams {
+ if (width < 100) {
+ return DEFAULT
+ }
+ return ImageParams(
+ width / 4,
+ (width * 9) / (4 * 16)
+ )
+ }
+ }
+
+ init {
+ assert(width > 0 && height > 0)
+ }
+}
+
interface IPreviewGenerator {
fun hasPreview(): Boolean
fun getPreviewImage(fraction: Float): Bitmap?
fun release()
+ var params: ImageParams
+
var durationMs: Long
var loadedImages: Int
+
+ companion object {
+ fun new(): IPreviewGenerator {
+ /** because TV has low ram + not show we disable this for now */
+ return if (SettingsFragment.isTrueTvSettings()) {
+ empty()
+ } else {
+ PreviewGenerator()
+ }
+ }
+
+ fun empty(): IPreviewGenerator {
+ return NoPreviewGenerator()
+ }
+ }
+}
+
+private fun rescale(image: Bitmap, params: ImageParams): Bitmap {
+ if (image.width <= params.width && image.height <= params.height) return image
+ val new = image.scale(params.width, params.height)
+ // throw away the old image
+ if (new != image) {
+ image.recycle()
+ }
+ return new
+}
+
+/** rescale to not take up as much memory */
+private fun MediaMetadataRetriever.image(timeUs: Long, params: ImageParams): Bitmap? {
+ /*if (timeUs <= 0 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+ try {
+ val primary = this.primaryImage
+ if (primary != null) {
+ return rescale(primary, params)
+ }
+ } catch (t: Throwable) {
+ logError(t)
+ }
+ }*/
+
+ return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
+ this.getScaledFrameAtTime(
+ timeUs,
+ MediaMetadataRetriever.OPTION_CLOSEST_SYNC,
+ params.width,
+ params.height
+ )
+ } else {
+ return rescale(this.getFrameAtTime(timeUs) ?: return null, params)
+ }
}
/** PreviewGenerator that hides the implementation details of the sub generators that is used, used for source switch cache */
class PreviewGenerator : IPreviewGenerator {
+
/** the most up to date generator, will always mirror the actual source in the player */
private var currentGenerator: IPreviewGenerator = NoPreviewGenerator()
+
/** the longest generated preview of the same episode */
private var lastGenerator: IPreviewGenerator = NoPreviewGenerator()
+
/** always NoPreviewGenerator, used as a cache for nothing */
private val dummy: IPreviewGenerator = NoPreviewGenerator()
@@ -76,6 +156,14 @@ class PreviewGenerator : IPreviewGenerator {
currentGenerator = NoPreviewGenerator()
}
+ override var params: ImageParams = ImageParams.DEFAULT
+ set(value) {
+ field = value
+ lastGenerator.params = value
+ backupGenerator.params = value
+ currentGenerator.params = value
+ }
+
override var durationMs: Long
get() = currentGenerator.durationMs
set(_) {}
@@ -110,13 +198,13 @@ class PreviewGenerator : IPreviewGenerator {
when (link.type) {
ExtractorLinkType.M3U8 -> {
- currentGenerator = M3u8PreviewGenerator().apply {
+ currentGenerator = M3u8PreviewGenerator(params).apply {
load(url = link.url, headers = link.getAllHeaders())
}
}
ExtractorLinkType.VIDEO -> {
- currentGenerator = Mp4PreviewGenerator().apply {
+ currentGenerator = Mp4PreviewGenerator(params).apply {
load(url = link.url, headers = link.getAllHeaders())
}
}
@@ -129,21 +217,25 @@ class PreviewGenerator : IPreviewGenerator {
fun load(context: Context, link: ExtractorUri, keepCache: Boolean) {
clear(keepCache)
- currentGenerator = Mp4PreviewGenerator().apply {
+ currentGenerator = Mp4PreviewGenerator(params).apply {
load(keepCache = keepCache, context = context, uri = link.uri)
}
}
}
+@Suppress("UNUSED_PARAMETER")
private class NoPreviewGenerator : IPreviewGenerator {
override fun hasPreview(): Boolean = false
override fun getPreviewImage(fraction: Float): Bitmap? = null
override fun release() = Unit
+ override var params: ImageParams
+ get() = ImageParams(0, 0)
+ set(value) {}
override var durationMs: Long = 0L
override var loadedImages: Int = 0
}
-private class M3u8PreviewGenerator : IPreviewGenerator {
+private class M3u8PreviewGenerator(override var params: ImageParams) : IPreviewGenerator {
// generated images 1:1 to idx of hsl
private var images: Array = arrayOf()
@@ -194,6 +286,9 @@ private class M3u8PreviewGenerator : IPreviewGenerator {
private fun clear() {
synchronized(images) {
currentJob?.cancel()
+ // for (i in images.indices) {
+ // images[i]?.recycle()
+ // }
images = arrayOf()
prefixSum = arrayOf()
loadedImages = 0
@@ -280,7 +375,7 @@ private class M3u8PreviewGenerator : IPreviewGenerator {
if (!isActive) {
return@withContext
}
- val img = retriever.getFrameAtTime(0)
+ val img = retriever.image(0, params)
if (!isActive) {
return@withContext
}
@@ -308,7 +403,7 @@ private class M3u8PreviewGenerator : IPreviewGenerator {
}
}
-private class Mp4PreviewGenerator : IPreviewGenerator {
+private class Mp4PreviewGenerator(override var params: ImageParams) : IPreviewGenerator {
// lod = level of detail where the number indicates how many ones there is
// 2^(lod-1) = images
private var loadedLod = 0
@@ -369,6 +464,10 @@ private class Mp4PreviewGenerator : IPreviewGenerator {
synchronized(images) {
loadedLod = 0
loadedImages = 0
+ // for (i in images.indices) {
+ // images[i]?.recycle()
+ // images[i] = null
+ //}
images.fill(null)
}
}
@@ -425,10 +524,7 @@ private class Mp4PreviewGenerator : IPreviewGenerator {
val fraction = (1.0f.div((1 shl l).toFloat()) + i * 1.0f.div(items.toFloat()))
Log.i(TAG, "Generating preview for ${fraction * 100}%")
val frame = durationUs * fraction
- val img = retriever.getFrameAtTime(
- frame.toLong(),
- MediaMetadataRetriever.OPTION_CLOSEST_SYNC
- )
+ val img = retriever.image(frame.toLong(), params);
if (!scope.isActive) return
if (img == null || img.width <= 1 || img.height <= 1) continue
synchronized(images) {
diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt
index ae5f0aab..17efd276 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/ui/settings/SettingsGeneral.kt
@@ -80,6 +80,7 @@ val appLanguages = arrayListOf(
Triple("", "日本語 (にほんご)", "ja"),
Triple("", "ಕನ್ನಡ", "kn"),
Triple("", "한국어", "ko"),
+ Triple("", "lietuvių kalba", "lt"),
Triple("", "latviešu valoda", "lv"),
Triple("", "македонски", "mk"),
Triple("", "മലയാളം", "ml"),
diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/PackageInstallerService.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/PackageInstallerService.kt
index dcb1e047..7ff7b067 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/utils/PackageInstallerService.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/utils/PackageInstallerService.kt
@@ -1,12 +1,12 @@
package com.lagradost.cloudstream3.utils
-import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.app.Service
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
+import android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC
import android.os.Build
import android.os.IBinder
import android.util.Log
@@ -54,7 +54,11 @@ class PackageInstallerService : Service() {
UPDATE_CHANNEL_NAME,
UPDATE_CHANNEL_DESCRIPTION
)
- startForeground(UPDATE_NOTIFICATION_ID, baseNotification.build())
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ startForeground(UPDATE_NOTIFICATION_ID, baseNotification.build(), FOREGROUND_SERVICE_TYPE_DATA_SYNC)
+ } else{
+ startForeground(UPDATE_NOTIFICATION_ID, baseNotification.build())
+ }
}
private val updateLock = Mutex()
diff --git a/app/src/main/res/values-ajp/strings.xml b/app/src/main/res/values-ajp/strings.xml
index 42eba3cc..47c69a28 100644
--- a/app/src/main/res/values-ajp/strings.xml
+++ b/app/src/main/res/values-ajp/strings.xml
@@ -1,2 +1,8 @@
-
+
+ السرعة (%.2fx)
+ غير المصدر
+ حتنزل الحلقة %d ب
+ التنزيلات
+ %s الحلقة %d
+
diff --git a/app/src/main/res/values-am/strings.xml b/app/src/main/res/values-am/strings.xml
index 5a799eb4..32f4dcd7 100644
--- a/app/src/main/res/values-am/strings.xml
+++ b/app/src/main/res/values-am/strings.xml
@@ -2,4 +2,112 @@
%s ክፍል %d
ተዋናዮች: %s
+ ፍጥነት(%.2fx)
+ ቀጣይ በዘፈቀደ
+ ዳራ ቅድም እይታ
+ %dሰዓት %dደቂቃ
+ ፖስተር
+ የወረዱ
+ አዲስ ማሻሻያ ተገኝቷል!
+\n%s -> %s
+ ተመለስ
+ ተጨማሪ አማራጮች
+ በማየት ላይ
+ ዘውጎች
+ የክፍሉ ፖስተር
+ %sን ፈልግ…
+ መሙያ
+ አቅራቢ ቀይር
+ ፍለጋ…
+ ተመዘነ: %.1f
+ አሳሽ
+ %dቀን %dሰዓት %dደቂቃ
+ ቀጣይ ክፍል
+ %dደቂቃ
+ %d ደቂቃ
+ ፖስተር
+ በአሳሽ ውስጥ ይክፈቱ
+ ውሂብ የለም
+ መነሻ
+ መጫንን ዝለል
+ ክፍል %d በ ይለቀቃል
+ ማጋሪያ
+ ዋና ፖስተር
+ ቅንብሮች
+ መፈለጊያ
+ በመጫን ላይ…
+ CloudStream
+ በCloudStream አጫውት
+ ያስወግዱ
+ ዕልባቶች
+ ማውረድ ተጀምሯል
+ ሙቪ አጫውት
+ አጽዳ
+ የዳርቻ ቀለም
+ ዕልባቶችን ማጣሪያ
+ በእቅድ ላይ
+ ማዘመን ተጀምሯል
+ ቅዳ
+ ተጨማሪ መረጃ
+ አገናኞችን መጫን ላይ ስህተት
+ የጠርዝ ዓይነት
+ ማውረድ ተከናውኗል
+ በማውረድ ላይ
+ ክፍልን አጫውት
+ የአጫዋች ፍጥነት
+ የተተወ
+ የዳራ ቀለም
+ ማውረድ ለአፍታ አቁም
+ ትርጉም ድምጽ
+ የትርጉም ጽሑፍ ቅንብሮች
+ የዊንዶው ቀለም
+ Torrent አጫውት
+ ማውረድ ተቋርጧል
+ ደብቅ
+ አጽድቅ
+ የትርጉም ጽሑፎች
+ ማውረድ ቆሟል
+ ማውረጃ
+ ግንኙነትን እንደገና ይሞሩ…
+ ፋይል አጥፋ
+ ወርዷል
+ ማውረድ ቀጥል
+ የጽሑፍ ቀለም
+ የተጠናቀቀ
+ ምንም
+ የፊልም ማስታወቂያ አጫውት
+ የቀጥታ ስርጭት አጫውት
+ ፋይል አጫውት
+ እንደገና በማየት ላይ
+ ሰርዝ
+ ወደ ኋላ መመለሻ
+ መረጃ
+ ያስቀምጡ
+ ማውረድ አልተሳካም
+ ምንጮች
+ ትርጉም ጽሁፍ
+ ዥረት
+ በመቆየት ላይ
+ አጫውት
+ ውስጣዊ ማከማቻ
+ ዝጋ
+ የምልከታ ሁኔታን ያቀናብሩ
+ ወደ ነባሪ ዳግም ለማስጀመር ጫን አድርገው ይያዙ
+ የቅርጸ-ቁምፊ መጠን
+ ቋንቋን በራስ ይምረጥ
+ መመልከትዎን ይቀጥሉ
+ ቋንቋዎችን ያውርዱ
+ አቅራቢዎችን በመጠቀም ይፈልጉ
+ %d ሙዝ ለዴቭሎፐሮቹ ተሰጥቷል
+ ይህ አቅራቢ በትክክል እንዲሰራ ቪፒኤን ሊያስፈልግ ይችላል
+ ምንም ሙዝ አልተሰጠም
+ የትርጉም ጽሑፍ ቋንቋ
+ ሜታዳታ በድረ-ገጹ ላይ አይገኝም፣ ቪድዮ መጫን ሜታዳታ ድረ-ገጹ ላይ ከሌለ አይሳካም።
+ ይህ አቅራቢ ቶረንት ነው፣ ቪፒኤን ይመከራል
+ ቅርጸ-ቁምፊ
+ መግለጫ
+ ያስወግዱ
+ ተጨማሪ መረጃ
+ ዓይነቶችን በመጠቀም ይፈልጉ
+ ቅርጸ-ቁምፊዎችን በ%s ውስጥ በማስቀመጥ ያጫኑ
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 0c11f7e9..8805ec5d 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -99,13 +99,13 @@
إضغط بإستمرار لإعادة التعيين للإعدادات الافتراضية
إستيراد خطوط بوضعها هنا %s
متابعة المشاهدة
- حذف
- مزيد من المعلومات
+ ازالة
+ المزيد من المعلومات
قد تكون هناك حاجة إلى VPN لكي يعمل هذا المزود بشكل صحيح
- هذا المزود هو تورنت ، يوصى باستخدام شبكة ظاهرية خاصة
+ هذا المزود هو تورنت، يوصى باستخدام شبكة ظاهرية خاصة
لا يتم توفير البيانات الوصفية بواسطة الموقع، وسيفشل تحميل الفيديو إذا لم يكن موجودًا في الموقع.
الوصف
- لم يتم العثور على وصف
+ لم يتم العثور على حبكة
لم يتم العثور على وصف
عرض سجل الاخطاء 🐈
نافذة منبثقة
@@ -585,4 +585,5 @@
لا توجد اضافة في المستودع
المستودع لم يتم العثور عليه، تحقق من العنوان اوجرب شبكة افتراضية خاصة(vpn)
لقد صوتت بالفعل
+ معدل النسخ الإحتياطي
diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml
index d76aa94b..e9ae65a1 100644
--- a/app/src/main/res/values-bg/strings.xml
+++ b/app/src/main/res/values-bg/strings.xml
@@ -159,7 +159,7 @@
Скрий избраното видео качество в резултатите от търсенето
Автоматични актуализации на плъгини
Показвай актуализации на приложението
- Автоматично търси нови актуализации при стартиране
+ Автоматично търси нови актуализации при стартиране на приложението.
Актуализация до експериментални версии
Търсете експериментални актуализации вместо само пълни версии
Github
@@ -223,8 +223,8 @@
Филм
Серия
Анимационен филм
- @string/anime
- @string/ova
+ Аниме
+ ОВА
Торент
Документален филм
Азиатска драма
@@ -260,7 +260,7 @@
Не показвай отново
Пропуснете тази актуализация
Актуализация
- Предпочитано качество за гледане
+ Предпочитано качество за гледане (през WiFi)
Максимален брой знаци за заглавие във видеоплейъра
Разделителна способност на видео плейъра
Размер на видео буфера
@@ -505,4 +505,45 @@
Библиотека
Предпочитано качество за гледане (Мобилни данни)
Начало
+ Избери режим, да филтрира изтегляне на добавки
+ raw.githubusercontent.com Прокси
+ Неуспешно свързване с GitHub. Включване на jsDelivr прокси…
+ Заобикаля блокирането на GitHub с помощта на jsDelivr. Може да доведе до забавяне на актуализациите с няколко дни.
+ Тест на доставчик
+ Деактивиране
+ Android TV
+ Заобикаляне на интернет доставчик
+ Няма намерени добавки в този архив.
+ Архивът не е намерен, проверете уеб-адреса и пробвайте с VPN
+ Оценка (От висока до ниска)
+ Сортирай по
+ Стоп
+ Рестартиране
+ Сортиране
+ Оценка (от ниска до висока)
+ Абонирани сте за %s
+ Обновяване на абонирани сериали
+ Мобилни данни
+ Абонаменти
+ Връщане
+ Избиране на библиотека
+ Отписахте се от %s
+ Профили
+ По азбучен ред (Z до A)
+ Създаването на потребителският интерфейс е неуспешно, това е ГОЛЯМ БЪГ и трябва да бъде докладван незабавно %s
+ Редактиране
+ Wi-Fi
+ Помощ
+ Списъкът е празен. Опитайте да превключите на друг.
+ Профил %d
+ По азбучен ред (A до Z)
+ Отваряне с
+ Вашата библиотека е празна :(
+\nВпишете се в акаунт с библиотеки или добавете сериали в локалната Ви библиотека.
+ Използване
+ Епизод %d е публикуван!
+ Намерен е файл за безопасен режим!
+\nНяма да се зареждат никакви разширения при стартиране, докато файлът не бъде премахнат.
+ Вече сте гласували
+ Задаване по подразбиране
diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml
index ba754fa5..c55c8943 100644
--- a/app/src/main/res/values-bn/strings.xml
+++ b/app/src/main/res/values-bn/strings.xml
@@ -127,9 +127,9 @@
বিরতি দিতে মাঝে চাপুন
সিস্টেম এর উজ্জ্বলতা ব্যবহার করুন
ট্রেইলার চালু করুন
- ভিডিওপ্লেয়ার এ সময় নিয়ন্ত্রণ করতে, ডানে অথবা বামে সোয়াইপ করুন
+ ভিডিওর সময় নিয়ন্ত্রণ করতে, ডানে অথবা বামে সোয়াইপ করুন
সেটিংস পরিবর্তন করতে সোয়াইপ করুন
- উজ্জ্বলতা অথবা স্বরমাত্রা পরিবর্তন করতে যথাক্রমে বামে অথবা ডানে সোয়াইপ করুন
+ উজ্জ্বলতা বা ভলিউম পরিবর্তন করতে বাম বা ডান দিকে উপরে বা নিচে স্লাইড করুন
স্বয়ংক্রিয়ভাবে পরবর্তী পর্ব চালান
বর্তমান পর্বটি শেষ হলে পরের পর্বটি চালান
থামতে দুইবার চাপুন
@@ -143,10 +143,11 @@
হালনাগাদ ও ব্যাকআপ
অ্যাপ এর হালনাগাদ দেখান
খুঁজতে সোয়াইপ করুন
- @string/result_poster_img_des
+ পোস্টার
@string/home_play
আগাতে ডবল ট্যাপ করুন
আইজেনগ্রাভি মোড
আপডেট শুরু হয়েছে
ব্রাউজার
+ লগ
diff --git a/app/src/main/res/values-bp/strings.xml b/app/src/main/res/values-bp/strings.xml
index 016fbe43..7116a167 100644
--- a/app/src/main/res/values-bp/strings.xml
+++ b/app/src/main/res/values-bp/strings.xml
@@ -127,14 +127,14 @@
Modo Eigengravy
Adiciona um botão de velocidade no player
Deslize para avançar o vídeo
- Deslize para a esq. ou dir. para controlar o tempo no player
+ Deslize de lado à lado para controlar a posição no vídeo
Deslize para mudar as configurações
- Deslize para o lado esq. ou dir. para ajustar brilho ou volume
+ Deslize para cima ou para baixo, para ajustar brilho ou volume
Toque duplo para avançar o vídeo
Toque duplo para pausar
Segundos avançados no player
Toque duplo no lado direito ou esquerdo para regredir ou avançar vídeo
- Toque no meio para pausar
+ Toque duas vezes no meio para pausar
Usar brilho do sistema
Usar brilho do sistema no player ao invés da sobreposição escura
Atualizar progresso assistido
@@ -143,8 +143,8 @@
Fazer Backup
Arquivo de Backup carregado
Falha em restaurar dados do arquivo %s
- Dados salvos com sucesso
- Permissões de armazenamento faltando, por favor tente de novo
+ Dados salvos
+ Permissões de armazenamento faltando. Por favor tente novamente.
Erro no backup de %s
Procurar
Contas
@@ -160,7 +160,7 @@
Esconder qualidades de vídeo selecionadas nos resultados da pesquisa
Atualizações de plugin automáticas
Mostrar atualizações do app
- Automaticamente procurar por novas atualizações ao abrir
+ Automaticamente procurar por novas atualizações ao abrir.
Atualizar para pré-lançamento
Procura atualizações do pré-lançamento ao invés de apenas do lançamento oficial
Github
@@ -223,7 +223,7 @@
Série
Desenho Animado
Anime
- @string/ova
+ OVA
Torrent
Documentário
Drama Asiático
@@ -264,7 +264,7 @@
Comprimento do buffer do vídeo
Cache do vídeo em disco
Limpar cache de vídeo e imagem
- Causará travamentos aleatórios se definido muito alto. Não mude caso tiver pouca memória RAM, como um Android TV ou um telefone antigo
+ Causará travamentos se o valor escolhido for muito alto em dispositivos com pouca memória RAM, como um Android TV.
Causa problemas em sistemas com pouco espaço de armazenamento se definido muito alto, como em dispositivos Android TV.
DNS sobre HTTPS
Útil para burlar bloqueios de provedores de internet
@@ -326,7 +326,7 @@
/\?\?
/%d
%s autenticado
- Falha em autenticar para %s
+ Não foi possível fazer login em %s
Nenhum
Normal
@@ -340,8 +340,8 @@
Sincronizar legendas
1000 ms
Atraso de legenda
- Use isto se as legendas forem mostradas %dms adiantadas
- Use isto se as legendas forem mostradas %dms atrasadas
+ Use isto se as legendas forem mostradas %d ms adiantadas
+ Use isto se as legendas forem mostradas %d ms atrasadas
Sem atraso de legenda
- रफ्तार (%.2fx)
+ स्पीड (%.2fx)
नया अपडेट आया है!
\n%s -> %s
होम
खोजें
- डाउनलोड
- सेटिंग
- डेटा उपलब्ध नही है
- अन्य ऑप्शन
+ डाउनलोडस
+ सेटिंग्स
+ डेटा उपलब्ध नहीं
+ और विकल्प
अगला एपिसोड
शैलियां
- शेयर
+ साझा करें
ब्राउज़र में खोलें
देखा जा रहा है
होल्ड पर
पूरा देखा
अधूरा छोड़ा
देखने की योजना
- मूवी चलाये
- टोरेंट चलाये
- सूत्र
- फिरसे प्रयास करे…
+ मूवी चलाएं
+ टोरेंट चलाएं
+ सोर्स
+ पुनः प्रयास करें…
वापिस जाए
- एपिसोड चलाये
+ एपिसोड चलाएं
डाउनलोड
डाउनलोड किया गया
डाउनलोड हो रहा
डाउनलोड रोका गया
- डाउनलोड शुरू
- डाउनलोड नही हो पाया
+ डाउनलोड शुरू हुआ
+ डाउनलोड विफल
डाउनलोड रद्द
- डाउनलोड पूरा हुआ
- लिंक में गड़बड़ है
+ डाउनलोड मुकम्मल
+ लिंक लोड करने में त्रुटि
अंदरूनी स्टोरेज
- फ़ाइल डिलीट
- फ़ाइल चलाये
- डाउनलोड फिर शुरू करे
- डाउनलोड रोके
- स्वचालित त्रुटि रिपोर्ट रोकें
+ फ़ाइल मिटाएँ
+ फ़ाइल चलाएं
+ डाउनलोड फिर शुरू करें
+ डाउनलोड रोकें
+ स्वचालित बग रिपोर्टिंग अक्षम करें
और जानकारी
- छिपाये
- चलाये
+ छिपाएं
+ चलाएं
जानकारी
बुकमार्क छांटे
बुकमार्क्स
हटाएँ
- लागू करे
- रद्द करे
- प्लेयर की रफ्तार
- सूत्रों से छांटे
- प्रकार से छांटे
- %d केले दिए गए
- कोई केले नही दिए गए
- रिसेट करने ले किये दबाये रखे
+ लागू करें
+ रद्द करें
+ प्लेयर स्पीड
+ प्रोवाइडरों का उपयोग कर खोजें
+ प्रकार का उपयोग करके खोजें
+ %d केले डेवलपर्स को दिए गए
+ कोई केले नहीं दिए गए
+ डिफ़ॉल्ट पर रीसेट करने के लिए दबाए रखें
देखना जारी रखें
हटाएँ
अधिक जानकारी
- इस सूत्र को इस्तेमाल करने के लिए एक VPN की ज़रूरत पड़ सकती है
- यह सूत्र एक torrent है, एक VPN इस्तेमाल करने की सिफारिश की जाती है
+ इस प्रोवाइडर को सही ढंग से काम करने के लिए VPN की ज़रूरत पड़ सकती है
+ यह प्रोवाइडर एक torrent है, एक VPN इस्तेमाल करने की सिफारिश की जाती है
वर्णन
- कोई विषय नही मिला
- कोई वर्णन नही मिला
- आपकी वीडियो एक छोटे से डब्बे में चलाता है
- काले बॉर्डर को हटाता है
- प्लेयर की subtitle सेटिंग्स
- प्लेयर में वीडियो की रफ्तार धिमी या तेज़ करता है
- दाएं या बाएं तरफ स्वाइप करने से वीडियो को आगे पीछे करता है
- दाएं तरफ या बाएं तरफ स्वाइप करने से रोशिनी और आवाज़ को ऊपर नीचे करता है
- दो बार दाएं या बाएं तरफ दबाने से वीडियो को आगे या पीछे करा जा सकता है
+ कोई विषय नहीं मिला
+ कोई वर्णन नहीं मिला
+ अन्य ऐप्स के ऊपर एक लघु प्लेयर में प्लेबैक जारी रखता है
+ काले बॉर्डर हटाएँ
+ प्लेयर उपशीर्षक सेटिंग्स
+ प्लेयर में स्पीड विकल्प जोड़ता है
+ किसी वीडियो में अपनी स्थिति नियंत्रित करने के लिए एक ओर से दूसरी ओर स्वाइप करें
+ चमक या वॉल्यूम बदलने के लिए बाईं या दाईं ओर ऊपर या नीचे स्लाइड करें
+ आगे या पीछे करने के लिए दाईं या बाईं ओर दो बार टैप करें
खोजें
जानकारी
- नतीजों को सूत्रों के हिसाब से बांटकर दिखता है
- सिर्फ दुर्घटना होने पे आपकी कुछ जानकारी भेजी जाएगी
- आपकी जानकारी नही भेजी जाएगी
- हर बार खुलने पे नए अपडेट के लिए जांच करेगा
- पूरी रिलीस के बजाए पूर्व रिलीस की जांच करेगा
- हमारा एक Light novel app
- हमारा एक Anime app
+ खोज नतीजों को प्रोवाइडरों के हिसाब से अलग-अलग आपको दिखाता है
+ केवल क्रैश पर जानकारी भेजी जाएगी
+ आपकी जानकारी नहीं भेजी जाएगी
+ हर बार एप खुलने पर स्वचालित रूप से नए अपडेट खोजें।
+ केवल पूर्ण रिलीज़ के बजाय प्रीरिलीज़ अपडेट खोजें
+ उन्हीं डेवलपर्स द्वारा Light novel ऐप
+ उन्हीं डेवलपर्स द्वारा Anime ऐप
Discord से जुड़िये
- इस प्रोग्राम के निर्माता को केला चढ़ाये
+ इस प्रोग्राम के निर्माता को केला दें
केले दे दिए गए
एप्प की भाषा
- यह सूत्र क्रोमकास्ट का समर्थन नही करता
- कोई लिंक नही मिले
- लिंक को क्लिपबोर्ड पे कॉपी करदिया गया
- चलाये
- असुविधा के लिए खेद है, यह एप्प क्रैश हो गया है । एक गुमनाम रिपोर्ट निर्माताओं को भेज दी गयी है ।
+ यह प्रोवाइडर क्रोमकास्ट का समर्थन नहीं करता
+ कोई लिंक नहीं मिले
+ लिंक क्लिपबोर्ड पर कॉपी किया गया
+ एपिसोड चलायें
+ क्षमा करें, एप्प क्रैश हो गया है । निर्माताओं को एक अनाम बग रिपोर्ट भेजी जाएगी
फ़ाइल डिलीट करें
डिलीट
- रोके
- वापिस चलाये
- एज इस चीज़ को हमेशा के लिए नष्ट कर देगा %s
+ रोकें
+ फिर से चलाएं
+ इससे %s स्थायी रूप से हट जाएगा
\nक्या आपका निर्णय निश्चित है \?
अभी चालू है
- खत्म हो गया है
- स्तिथि
+ मुकम्मल हुया
+ स्थिति
साल
रेटिंग
अवधि
- सूत्र
- Synopsis
- खाली
+ साइट
+ सारांश
+ ख़ाली
इस्तेमाल में
एप्प
- मूवी
+ मूवीज
टीवी सीरियल
कार्टून
- अनिमे
+ एनिमे
टोरेंट
क्रोमकास्ट एपिसोड
- कक्रोमकास्ट मिरर
- एप्प मैं चलाये
- %s में चलाए
- Browser में चलाए
+ क्रोमकास्ट मिरर
+ एप्प में चलाएं
+ %s में चलाएं
+ Browser में चलाएं
लिंक कॉपी करें
- डाउनलोड करे
+ डाउनलोड करें
मिरर डाउनलोड
- लिंक फिरसे लोड करें
- कोई अपडेट नही मिला
- अपडेट के लिए खोजे
+ लिंक दोबारा लोड करें
+ कोई अपडेट नहीं मिला
+ अपडेट के लिये जांचें
ताला
- आकार
- सूत्र
+ आकार बदलें
+ सोर्स
OP स्किप करें
- फिरसे ना दिखाए
+ फिर ना दिखाएँ
अपडेट
- पसंदीदा देखने की क्वालिटी
+ देखने की तरजीही क्वालिटी (वाईफ़ाई)
ISP ब्लॉक से छुटकारा पाएं
- सूत्र की भाषाएं
+ प्रोवाइडर की भाषाएं
ऐप का लेआउट
- पसंदीदा मीडिया
- डाउनलोड करने का मार्ग
- Dubbed या Subbed Anime दिखाये
+ तरजीही मीडिया
+ डाउनलोड पथ
+ डब किए /सबब् किए एनीमे दिखाएं
टीवी लेआउट
फ़ोन लेआउट
मुख्य रंग
- ऐप का रंग
+ ऐप का थीम
देखा हुआ चिह्नित करें
इतिहास
- भाग %d जारी होगा
+ भाग %d रिलीज़ किया जाएगा
%dd %dh %dm
%dh %dm
%dm
- विज्ञापन
अगला रैंडम
- वापस जाओ
+ वापिस जाओ
पोस्टर
- पृष्ठभूमि का पूर्वावलोकन करें
- प्रदाता बदलें
+ प्रीव्यू बैकग्राउंड
+ प्रोवाइडर बदलें
Cast: %s
मुख्य पोस्टर
एपिसोड का पोस्टर
%s Ep %d
+ पूरक
+ रेटिंग: %.1f
+ %s पर खोजें…
+ खोजें…
+ %d मिनट
+ क्लाउडस्ट्रीम
+ क्लाउडस्ट्रीम के साथ चलाएं
diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml
index 477ab92b..84915a38 100644
--- a/app/src/main/res/values-hr/strings.xml
+++ b/app/src/main/res/values-hr/strings.xml
@@ -28,7 +28,7 @@
Preview Background
Brzina (%.2fx)
- Ocijenjeno: %.1f
+ Ocjena: %.1f
Pronađeno novo ažuriranje!
\n%s -> %s
Umetak
@@ -89,7 +89,7 @@
Informacije
Filtriraj oznake
Oznake
- Makni
+ Ukloni
Postavi status gledanja
Primijeni
Poništi
@@ -117,7 +117,7 @@
Držite za vraćanje na zadane postavke
Uvezi fontove tako da ih postavite u %s
Nastavite s gledanjem
- Makni
+ Ukloni
Više informacija
@string/home_play
Za ispravan rad ovog pružatelja usluga može biti potreban VPN
@@ -130,7 +130,7 @@
Picture-in-picture
Nastavlja reprodukciju u minijaturnom playeru povrh drugih aplikacija
Gumb za promjenu veličine playera
- Ukloni crne rubove
+ Uklaja crne rubove
Titlovi
Postavke titlova playera
Chromecast Titlovi
@@ -151,7 +151,7 @@
Koristi svijetlinu u sustavu
Koristi svjetlinu sustava u playeru aplikacija umjesto tamnog preklopa
Ažuriraj napredak gledanja
- Automatski sinkroniziraj svoj trenutni napredak u epizodi
+ Automatski sinkronizira vaš trenutni napredak u filmu ili epizodi
Vraćanje podataka iz sigurnosne kopije
Sigurnosno kopiranje podataka
Učitana datoteka sigurnosne kopije
@@ -306,7 +306,7 @@
Omogući NSFW na podržanim pružateljima usluga
Kodiranje titlova
Pružatelji usluga
- Respored
+ Raspored
Auto
TV izgled
Izgled za telefone
@@ -314,7 +314,7 @@
Primarna boja
Tema aplikacije
Mjesto naslova postera
- Stavi naslov ispod postera
+ Stavlja naslov ispod postera
lozinka123
MojeCoolIme
@@ -398,7 +398,7 @@
Nevažeći podaci
URL je nevažeći
Greška
- Ukloni titlove iz titlova
+ Ukloni CC iz titlova
Ukloni reklame iz titlova
Filtriraj po željenom jeziku medija
Extras
@@ -446,7 +446,7 @@
Zapis
Audio zapis
Video zapis
- Primijeni na ponovnom pokretanju
+ Primjenjuje se na ponovnom pokretanju
Sigurnosni način rada omogućen
Sve su ekstenzije isključene zbog rušenja aplikacije kako biste lakše pronašli ono koje uzrokuje probleme.
Pogledajte podatke o padu
@@ -472,7 +472,7 @@
Svi jezici
Previše teksta. Nije moguće spremiti u međuspremnik.
Označi kao gledano
- Prikaži skočne prozore za preskakanje za početak/završetak
+ Prikazuje skočni prozor za preskakanje početka ili završetka medija
Da
Preuzimanje ažuriranja aplikacije…
Jeste li sigurni da želite izaći\?
@@ -495,7 +495,7 @@
Geste
Značajke playera
Titlovi
- Respored
+ Raspored
Zadane postavke
Izgled
Značajke
@@ -527,7 +527,7 @@
Odaberite biblioteku
Otvori sa
Vaša je biblioteka prazna :(
-\nPrijavite se na račun biblioteke ili dodajte emisije u svoju lokalnu biblioteku.
+\nPrijavite se na račun biblioteke ili dodajte filmove / serije u svoju lokalnu biblioteku.
Ova je lista prazna. Pokušajte se prebaciti na jednu drugu listu.
Pronađena datoteka sigurnog načina rada!
\nNe učitavaju se ekstenzije pri pokretanju dok se datoteka ne ukloni.
@@ -577,4 +577,6 @@
\nImat će kombinirani prioritet videozapisa od 10.
\n
\nNAPOMENA: Ako je zbroj 10 ili više, video player će automatski preskočiti učitavanje kada se ta poveznica učita!
+ Već si glasao/la
+ Učestalost rezervne kopije
diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml
index aaa65897..d6d5b7f6 100644
--- a/app/src/main/res/values-iw/strings.xml
+++ b/app/src/main/res/values-iw/strings.xml
@@ -132,7 +132,7 @@
העדכון התחיל
מידע
התקן אוטומטית את כל התוספים שטרם הותקנו ממאגרים שנוספו.
- חפש אוטומטית עדכונים חדשים בפתיחת האפליקציה
+ חפש אוטומטית עדכונים חדשים לאחר פתיחת האפליקציה.
הצג עדכונים לאפליקציה
בצע מחדש את תהליך ההגדרה
עדכן למהדורות מוקדמות
@@ -146,7 +146,7 @@
לא נמצאו פרקים
מחק קובץ
מחק
- עצור
+ השהה
המשך
-30
+30
@@ -176,7 +176,7 @@
אל תראה שוב
דלג על עדכון זה
עדכון
- איכות צפייה מועדפת
+ איכות צפייה מועדפת (WiFi)
נגן וידאו כותרת מקסימום תווים
רזולוציית נגן וידאו
הוסף מעקב
@@ -184,7 +184,7 @@
הבא
ספריה
מטא-דאטה לא מסופק על ידי האתר, טעינת הסרטון תיכשל אם הוא לא קיים באתר.
- החלק על הצד השמאלי או הימני כדי לשנות את הבהירות או עוצמת הקול
+ החלק בצד השמאלי או הימני כדי לשנות את הבהירות או עוצמת הקול
שחזור הנתונים מהקובץ נכשל %s
עדכונים וגיבויים
נותן לך את תוצאות החיפוש מופרדות לפי ספק
@@ -194,7 +194,7 @@
כמות בנינים שניתנו
עונה
מצטערים, האפליקציה קרסה. דוח באג אנונימי יישלח למפתחים
- טורנט
+ טורנטים
NSFW
שגיאת מעבד
הורד מראה
@@ -226,8 +226,8 @@
תכונות נגן
עדכן התקדמות צפייה
DNS מעל HTTPS
- לחץ באמצע כדי לעצור
- החלק שמאלה או ימינה כדי לשלוט על זמן בנגן הסרטונים
+ לחץ פעמיים באמצע כדי לעצור
+ החלק מצד לצד כדי לשלוט על מיקומך בסרטון
נגן אוטומטית את הפרק הבא
התחל את הפרק הבא כאשר הפרק הנוכחי נגמר
לחץ פעמיים על צד ימין או שמאל כדי להציץ קדימה או אחורה
@@ -264,11 +264,11 @@
איכות מצלמה
החלק כדי להציץ
גיבוי
- כמות הצצת הנגן
+ כמות הזזת הנגן (שניות)
סרטון
גיטהאב
מצלמה
- החלק לשינוי ההגדרות
+ החלק כדי לשנות הגדרות
דפדפן
צבע חלון
הצג לוג
@@ -438,7 +438,7 @@
מיין
בחר ספרייה
נראה שהספרייה שלכם ריקה :(
-\nהתחברו לחשבון ספריה או הוסף סדרות לספרייה המקומית שלך
+\nהתחברו לחשבון ספריה או הוסיפו סדרות לספרייה המקומית שלכם.
קובץ מצב בטוח נמצא!
\nלא טוען שום תוספות בהפעלה עד להסרת הקובץ.
לא ניתן להתקין את הגרסה החדשה של האפליקציה
@@ -505,5 +505,52 @@
אלפביתי (א \'עד ת\')
אלפביתי (ת\' עד א\')
פתח עם
- נראה שהרשימה הזו ריקה, נסו לעבור לרשימה אחרת
+ נראה שהרשימה הזו ריקה, נסו לעבור לרשימה אחרת.
+ רשום ל%s
+ מעדכן סדרות שנרשמת אליהן
+ נגן מוסתר - כמות הזזה
+ רשת סלולארית
+ רשום
+ חזור
+ הרשמה ל-%s מבוטלת
+ פרוקסי עבור raw.githubusercontent.com
+ פרופילים
+ הממשק לא נוצר נכון. זוהי שגיאה רצינית, נא לדווח עליה מיידית ל-%s
+ עריכה
+ Wi-Fi
+ רקע הפרופיל
+ @string/default_subtitles
+ רשומה
+ עזרה
+ התחלה
+ עצור
+ פרופיל %d
+ הזמן שיזוז כשהנגן מוצג
+ נגן מוצג - כמות הזזה
+ אתחול
+ עוקף את החסימה של GitHub באמצעות jsDelivr. עלול לגרום לעדכונים להתעכב בכמה ימים.
+ בחר מצב כדי לסנן תוספים להורדה
+ איכויות
+ השתמש
+ בדיקת ספק
+ נכשל
+ פרק %d שוחרר לצפיה!
+ ביטול
+ איכות צפיה מועדפת (אינטרנט סלולארי)
+ המאגר לא נמצא, נא לבדוק את ה-URL ולנסות VPN
+ ההתחברות אל GitHub נכשלה. מדליק פרוקסי אל jsDelivr…
+ הזמן שיזוז כשהנגן מוסתר
+ כבר הצבעת
+ לא נמצאו תוספים במאגר
+ טלוויזיית אנדרואיד
+ קביעה כברירת מחדל
+ עבר
+ מעקף ספק אינטרנט
+ כאן ניתן לשנות את סדר המקורות. אם לוידיאו יש עדיפות גבוהה יותר, הוא יופיע גבוה יותר בבחירת המקור. סכום עדיפות המקור ועדיפות האיכות היא עדיפות הוידיאו.
+\n
+\nמקור א: 3
+\nאיכות ב: 7
+\nיגרמו לעדיפות הסרטון להיות 10.
+\n
+\nשימו לב: אם הסכום הוא 10 או יותר, הנגן ידלג על טעינת הסרטון כאשר הלינק נטען!
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index af4ea695..7f10aad4 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -218,4 +218,5 @@
フォントサイズ
プロバイダーから探す
言語の自動選択
+ リンクの読み込みエラー
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
new file mode 100644
index 00000000..a702a62f
--- /dev/null
+++ b/app/src/main/res/values-lt/strings.xml
@@ -0,0 +1,265 @@
+
+
+ Ištrinti failą
+ Pašalinti
+ Greitis (%.2fx)
+ Žymos
+ %d %s
+ Siuntimas pradėtas
+ Sekantis atsitiktinai
+ Peržiūros fonas
+ Paleisti filmą
+ Išjungti automatini klaidų pateikimą
+ Atstatyti į numatytą reikšmę
+ Išvalyti
+ Plakatas
+ Filtruoti žymas
+ Nepavyko įrašyti naujos programos versijos
+ Automatiškai ieškoti atnaujinimų, kai paleidžiama programa.
+ Filmas
+ Torrentas
+ Rodyti tarpines serijas animei
+ Šrifto dydis
+ Nuorodos ne rastos
+ Planuojama žiūrėti
+ Atnaujinimas pradėtas
+ Kopijuoti
+ Duoti bananai
+ Daugiau informacijos
+ Atsiuntimai
+ Automatiškai pasirinkti kalbą
+ Klaida kraunant nuorodas
+ +30
+ Atsiuntimas baigtas
+ Tęsti žiūrėjimą
+ Rastas atnaujinimas!
+\n%s -> %s
+ Atsisiųsti kalbas
+ Ieškoti naudojant tiekėjus
+ Grįžti atgal
+ Siunčiama
+ Daugiau pasirinkčiu
+ Paleisti seriją
+ Grotuvo greitis
+ %d Bananai duoti kūrėjams
+ Žiūrima
+ Pauzė
+ Žanrai
+ -30
+ Serijos plakatas
+ Gali reikėti VPN šitam tiekėjui, kad veiktų teisingai
+ Ieškoti %s…
+ Github
+ Nėra duotu bananų
+ Subtitrų kalba
+ Keisti teikėją
+ Fono spalva
+ Ieškoti…
+ Nėra Sezonų
+ Leisti seriją
+ Paskyros
+ Sustabdyti siuntimą
+ Įgarsinimas
+ Subtitrų nustatymai
+ Lango spalva
+ Dokumentika
+ Transliuoti Torrentą
+ Ištrinti
+ Pradėti
+ Prideda greičio pasirinkti grotuve
+ Filmukas
+ Atsiuntimas atšauktas
+ Išplėstinė paieška
+ Tuščias sąrašas. Pabandykite pasirinkti kitą sąrašą.
+ Chromecast subtitrai
+ Įvertinimas: %.1f
+ Slėpti
+ Pritaikyti
+ Naršyklė
+ Subtitrai
+ Kita serija
+ Siuntimas sustabdytas
+ Rodyti programos atnaujinimus
+ Atsisiųsti
+ Biblioteka
+ Kelią problemas jei nustatytas per didelis ant prietaisų su mažai turymos vietos, tokiu kaip Android TV.
+ Kita
+ Ištrinti failą
+ Atsisiųsta
+ Pratęsti siuntimą
+ Azijietiškos dramos
+ Serija
+ Jūsų biblioteka tuščia :(
+\nPrisijunkite prie bibliotekos paskyros arba pridėkite laidas prie vietinės bibliotekos.
+ Pradėti sekančia seriją, kai dabartinė baigsis
+ Teksto spalva
+ Užbaigta
+ Naudoti sistemos ryškumą programos grotuve vietoj tamsumo
+ Tuščia
+ Nepavyko atstatyti duomenis iš failo %s
+ Paleisti anonsa
+ Paleisti gyva transliacija
+ Nerasta serijų
+ Šis tiekėjas yra iš Torrentų, VPN rekomenduojama naudoti
+ Nepavyko
+ Plakatas
+ Paleisti failą
+ Peržiūrima
+ Atidaryti Naršyklėje
+ Naudoti sistemos ryškumą
+ Atšaukti
+ Nėra duomenų
+ Šriftas
+ Perdaryti nustatymo procesą
+ %d-%d
+ Duoti bananą kūrėjams
+ Sugryšti
+ Nuoroda nukopijuota į iškarpinę
+ Paieška
+ Informacija
+ Praleisti įkėlima
+ Informacija
+ Serija %d bus išleista
+ Išsaugoti
+ Perdaug teksto. Nepavyko išsaugoti i iškarpynę.
+ Atsiuntimas nepavyko
+ Pasidalinti
+ Pagrindinis Plakatas
+ Šaltiniai
+ Nustatymai
+ Ieškoti
+ Kraunama…
+ Pašalinti
+ Daugiau informacijos
+ Sustabdyta
+ CloudStream
+ Paleisti
+ Gyvos transliacijos
+ APK įrašymas
+ Vidinė atmintis
+ Automatiškai paleisti kitą seriją
+ Grotuvo subtitrų nustatymai
+ Programos kalba
+ Uždaryti
+ Nustatyti žiūrėjimo statusą
+ Paleisti su CloudStream
+ Subtitrų iškėlimas
+ Serijos
+ Skleisti: %s
+ Sezonas
+ Pridėta %s
+ Šaltinis
+ Programos atnaujinimai
+ Nerasta atnaujinimų
+ Pavadinimas
+ Atsiuntimo kelias
+ Normalu
+ Klonuoti puslapį
+ Atnaujinimas
+ Atsisiųsti subtitrus
+ Ne rodyti dar kartą
+ Praleisti OP
+ Gyva transliacija
+ /\?\?
+ Netikėta grotuvo klaida
+ Įvertinta
+ Praleisti šį atnaujinimą
+ Veiksmai
+ Kopijuoti nuorodą
+ Paleisti programoje
+ Sinchronizuoti
+ Paleisti naršyklėje
+ Pašalinti puslapį
+ Perkrauti nuorodos
+ Išjungti
+ %d / 10
+ Nuorodos
+ Pritraukti
+ Sutalpinti į ekraną
+ Užrakinti
+ Atsiuntimo klaida, patikrinkite atminties leidimus
+ Android TV
+ Azijietiška drama
+ /%d
+ Šaltinio klaida
+ Viešas sąrašas
+ 127.0.0.1
+ Atsiųsta %d %s
+ Praleisti %s
+ Pagal numatytuosius nustatymus „CloudStream“ neturi įdiegtų svetainių. Turite įdiegti svetaines iš saugyklų.
+\n
+\nDėl beprotiško DMCA reikalavimų, kurios atliko Sky UK Limited 🤮, negalime susieti saugyklos svetainės programoje.
+\n
+\nPrisijunkite prie mūsų Discord arba ieškokite internete.
+ Mobilūs duomenys
+ šaunusPrisijungimoVardas
+ Autoriai
+ Naršyklė
+ Visos kalbos
+ 4K
+ Pradėta siųsti %d %s…
+ Aprašymas
+ Saugus režimas įjungtas
+ HDR
+ Ne atsiųsta: %d
+ Kitas
+ Pasirinkti biblioteką
+ Ne
+ Kalbos kodas (lt)
+ Baigta
+ Išvalyti istoriją
+ VLC
+ Redaguoti
+ Wi-Fi
+ Greitai būs…
+ Taip
+ Pagalba
+ Programa nerasta
+ Išjungta: %d
+ Rūšiuoti pagal
+ Atidarymas
+ Slaptazodis123
+ Atidaryti su
+ Kalba
+ SD
+ sveikas@pasauli.com
+ Naudoti
+ SDR
+ Pavyzdys.com
+ UHD
+ Dydis
+ Palaikoma
+ MPV
+ ManoŠaunusPuslapis
+ Anonsas
+ Istorija
+ Serija %d išleista!
+ Atsiunčiamas programos atnaujinimas…
+ Atsiųsta: %d
+ Klaida
+ Atsijungti
+ Rūšiuoti
+ Vaizdo takelis
+ Blu-ray
+ Programa bus atnaujinta išėjus
+ Pagrindinė kalba
+ Prisijungti
+ Pažymėti kaip žiūrima
+ Ką norite matyti
+ Įrašomas programos atnaujinimas…
+ Nepavyko įkelti %s
+ Įvertinimas: %s
+ Statusas
+ Pabaiga
+ Klaidingas URL
+ Versija
+ 18+
+ %s (išjungta)
+ DVD
+ Integruotas grotuvas
+ Atsisiųskite sąrašą puslapiu jūs norite naudoti
+ %s Ser %d
+ Ar tikrai norite išeiti\?
+ Pašalinti iš žiūrimų
+ Garso takelis
+
diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml
index 17eeb883..222bef61 100644
--- a/app/src/main/res/values-ms/strings.xml
+++ b/app/src/main/res/values-ms/strings.xml
@@ -37,4 +37,23 @@
Kelajuan (%.2fx)
Poster
Poster
+ Salin
+ Muat Turun
+ Genre
+ Cari %s…
+ Sunting
+ Carian…
+ Pelayar
+ Episod seterusnya
+ Muat Turun
+ Buka dengan
+ Padam Fail
+ Buka Dalam Pelayar
+ Batal
+ Tiada Data
+ Info
+ Simpan
+ Kongsi
+ Tetapan
+ Tutup
diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml
index 177f7ea1..63dba53d 100644
--- a/app/src/main/res/values-or/strings.xml
+++ b/app/src/main/res/values-or/strings.xml
@@ -158,4 +158,5 @@
%s ସନ୍ଧାନ କରିବା…
ପରବର୍ତ୍ତୀ ଅଧ୍ୟାୟ
କୌଣସି ତଥ୍ୟ ନାହିଁ
+ %s ଅ %d
diff --git a/app/src/main/res/values-pl/array.xml b/app/src/main/res/values-pl/array.xml
index 30b6f4a1..8384187f 100644
--- a/app/src/main/res/values-pl/array.xml
+++ b/app/src/main/res/values-pl/array.xml
@@ -203,12 +203,15 @@
- Normalny
+ - Żółty mniszek lekarski
- Goździk różowy
+ - Pomarańczowy
- Ciemnozielony
- Kasztanowaty
- Ciemnoniebieski
- Szary
- Biały
+ - Fajny niebieski
- Brązowy
- Niebieski
- Czerwony
@@ -223,12 +226,15 @@
- Normal
+ - DandelionYellow
- CarnationPink
+ - Orange
- DarkGreen
- Maroon
- NavyBlue
- Grey
- White
+ - CoolBlue
- Brown
- Blue
- Red
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index bcd3fc0f..e7b85b3d 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -90,7 +90,7 @@
Скорость проигрыватель
Воспроизвести Эпизод
%dд %dч %dм
- %d мин.
+ %d мин
Dub
Sub
Установите смотреть состояние
@@ -200,7 +200,7 @@
Автоматически загружать еще не установленные плагины из добавленных репозиториев.
Присоединится в Discord
Бесплатно
- %d мин.
+ %dm
%d ч. %d мин.
Фильмы
Мультфильм
@@ -529,4 +529,28 @@
Обход ограничения доступа к GitHub с помощью jsDelivr может задержать обновления на несколько дней.
Подписные
Отказались от подписки на %s
+ Мобильный интернет
+ Профили
+ Пользовательский интерфейс не был доступен для правильного создания, это ГЛАВНАЯ ОШИБКА и должна быть сообщена немедленно %s
+ Изменить
+ Интернет
+ Задний фон профиля
+ \@строка/обычные_субтитры
+ Помощь
+ Профиль %d
+ Выберите режим фильтера плагинов для загрузки
+ Качество
+ Использовать
+ Выключить
+ Хранилище не обнаружено, проверьте URL и попробуйте с ВПН
+ Вы уже проголосовали
+ Никаких плагинов не обнаружено
+ Поставить обычный
+ Здесь вы можете изменить порядок расположения источников. Если видео имеет более высокий приоритет, оно будет отображаться выше в списке источников. Сумма приоритета источника и приоритета качества составляет приоритет видео.
+\n
+\nИсточник А: 3
+\nКачество Б: 7
+\nБудет иметь общий приоритет видео 10.
+\n
+\nПРИМЕЧАНИЕ. Если сумма равна 10 или более, плеер автоматически пропустит загрузку при загрузке этой ссылки!
diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml
index 3f4134e5..9c9a335b 100644
--- a/app/src/main/res/values-ta/strings.xml
+++ b/app/src/main/res/values-ta/strings.xml
@@ -1,8 +1,8 @@
- தேடுக
- தேடல் %s…
- வேகம்
+ தேடுக…
+ %s இல் தேடவும்…
+ வேகம் (%.2fx)
முகப்பு
தேடு
பதிவிறக்கம்
@@ -60,7 +60,7 @@
தேடுவதற்கு இருமுறை தட்டவும்
பிளேயரில் தேடுதல் வேகம்
இடைநிறுத்துவதற்கு நடுவில் தட்டவும்
- நடிகர்கள்
+ நடிகர்கள்: %s
பின் செல்
அமைப்புகள்
ஏதும் இல்லை
@@ -117,4 +117,9 @@
புதிய புதுப்பிப்பு உள்ளது
\n%s->%s
நிரப்பி
+ போஸ்டர்
+ எபிசோட்டின் போஸ்டர்
+ போஸ்டர்
+ பிரதான போஸ்டர்
+ %s Ep %d
diff --git a/app/src/main/res/values-tr/array.xml b/app/src/main/res/values-tr/array.xml
index dca01736..d14a3e2a 100644
--- a/app/src/main/res/values-tr/array.xml
+++ b/app/src/main/res/values-tr/array.xml
@@ -229,12 +229,15 @@
- Normal
+ - Karahindiba sarı
- Karanfil Pembesi
+ - Turuncu
- Koyu Yeşil
- Kestane
- Lacivert
- Gri
- Beyaz
+ - Soğuk Mavi
- Kahverengi
- Soğuk
- Ateş
@@ -249,12 +252,15 @@
- Normal
+ - DandelionYellow
- CarnationPink
+ - Orange
- DarkGreen
- Maroon
- NavyBlue
- Grey
- White
+ - CoolBlue
- Brown
- Blue
- Red
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index eef9bc95..e0d7e4cd 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -594,4 +594,6 @@
\nNOT: Toplam 10 veya daha fazlaysa, bu bağlantı yüklendiğinde oynatıcı otomatik olarak yüklemeyi atlayacaktır!
Kaliteler
Profil arkaplanı
+ UI was unable to be created correctly, this is a MAJOR BUG and should be reported immediately %s
+ Select mode to filter plugins download
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index f9dccfc4..c069cae0 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -38,7 +38,7 @@
Переглянути фільм
Переглянути трейлер
Трансляція через торент
- Повторити підключення…
+ Повторити з\'єднання…
Назад
Переглянути епізод
Завантажено
@@ -136,7 +136,7 @@
Крок перемотки (секунди)
Натисніть двічі посередині, щоб призупинити відтворення відео
Використовувати яскравість системи
- Оновити прогрес перегляду
+ Оновлювати прогрес перегляду
Відновлення даних з резервної копії
Резервне копіювання даних
Не вдалося відновити дані з файлу %s
@@ -193,7 +193,7 @@
Телесеріали
Мультфільми
Аніме
- ОВА
+ OVA
Азіатські драми
Прямі трансляції
Інше
@@ -206,7 +206,7 @@
Відео
Помилка джерела
Віддалена помилка
- Помилка рендеринга
+ Помилка рендерингу
Дзеркало Chromecast
Переглянути в застосунку
Переглянути в %s
@@ -214,7 +214,7 @@
Завантажити дзеркало
Перевірити наявність оновлень
Заблокувати
- Пропускати OP
+ Пропустити ОП
Не показувати знову
Оновити
Бажана якість перегляду (WiFi)
@@ -233,7 +233,7 @@
Автоматично шукає нові оновлення після запуску застосунку.
Оновлення до бета-версій
Посилання скопійовано в буфер обміну
- Деякі телефони не підтримують новий інсталятор пакетів. Спробуйте стару версію, якщо оновлення не встановлюються.
+ Деякі телефони не підтримують новий встановлювач пакетів. Спробуйте стару версію, якщо оновлення не встановлюються.
Приєднуйтесь до Discord
Дано бананів
Рік
@@ -553,4 +553,5 @@
Репозиторій не знайдено, перевірте URL-адресу та спробуйте VPN
Не знайдено жодних плагінів у репозиторії
Ви вже проголосували
+ Частота резервного копіювання
diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml
index 48b73efa..b9585d07 100644
--- a/app/src/main/res/values-ur/strings.xml
+++ b/app/src/main/res/values-ur/strings.xml
@@ -28,12 +28,12 @@
مزید آپشنز
اگلا قسط
براؤزر میں کھولیں
- لوڈ کرنا سکیپ کر دیں
+ لوڈنگ چھوڑیں
لوڈ ہو رہا ہے…
- دیکھنا
- آن ہولڈ
- گرا دیا
- دیکھنا ہے
+ دیکھ رہے ہیں
+ معطل
+ چھوڑ دیا گیا
+ دیکھنے کا منصوبہ
کوئی نہیں
دوبارہ دیکھنا
مووی لگائے
@@ -95,7 +95,7 @@
کھلا (آن)
یہ سورس Torrent ہے، ضرورت پڑنے پر VPN کا استعمال کریں
تفصیل
- کوئی تفصیل نہیں ملی
+ کوئی کہانی نہیں ملی
کوئی تفصیل نہیں ملی
غلطی کا لاگ دیکھیں 🐈
PIP
@@ -134,14 +134,14 @@
ایپ کی تازہ کاریاں نمایش کریں
سیٹ اپ کا عمل دوبارہ کریں
پری ریلیز کے لیے اپ ڈیٹ کریں
- صرف مکمل ریلیز کے بجائے پری ریلیز اپ ڈیٹس تلاش کریں
+ صرف مکمل جاریات کی بجائے پیش رلیز اپ ڈیٹس کی تلاش کریں
APK انسٹالر
Github
- ایک ہی dev کی طرف سے light ناول اپلی کیشن
- اسی devs کے ذریعے anime ایپ
+ یہ لائٹ ناول ایپ وہی ڈویلپرز نے تیار کی ہے جو اس ایپ کو ڈویلپ کیا ہے
+ یہ اینمی ایپ وہی ڈویلپرز نے تیار کی ہے جو اس ایپ کو ڈویلپ کیا ہے
ڈسکارڈ میں شامل ہوں
- دیووں کو ایک بینین دیں
- دی گئی بینین
+ شکریہ ڈویلپرز کو! آپ کا کام شاندار ہے
+ تعریفیں
ایپ کی زبان
اس فراہم کنندہ کے پاس کروم کاسٹ سپورٹ نہیں ہے
کوئی لنکس نہیں ملے
@@ -150,7 +150,7 @@
طے شدہ قدر پر ری سیٹ کریں
%s قسط %d
پوسٹر
- شیئر
+ شئیر کریں
انواع
رفتار (%.2fx)
مکمل
@@ -178,7 +178,7 @@
anime کے لیے فلر ایپیسوڈ دکھائیں
پلگ ان خود بخود ڈاؤن لوڈ کریں
شامل کردہ ذخیروں سے خود بخود تمام ابھی تک انسٹال نہیں ہوئے پلگ ان انسٹال کریں۔
- شروع ہونے پر خودکار طور پر نئی اپ ڈیٹس تلاش کریں
+ اپلیکیشن کو شروع کرنے کے بعد خود بخود نئی اپ ڈیٹس کی تلاش کریں۔
کچھ فون نئے پیکیج انسٹالر کو سپورٹ نہیں کرتے ہیں. اگر اپ ڈیٹس انسٹال نہیں ہوتے ہیں تو لیگیسی آپشن کو آزمائیں.
معذرت، ایپلی کیشن کریش ہو گئی. ایک گمنام بگ رپورٹ ڈویلپرز کو بھیجی جائے گی
سیزن
@@ -233,7 +233,7 @@
اووا
ٹورینٹ
دستاویزی فلم
- ایشیائی ڈرامے
+ ایشین ڈرامہ
لائیو اسٹریمز
ویڈیو
ماخذ نقص
@@ -333,15 +333,15 @@
سایہ
ذیلی ہم وقت سازی کریں
1000 ms
- سب ٹائٹل تاخیر
+ زیرنویس میں دیری
اگر سب ٹائٹلز %d ms بہت جلد دکھائے جائیں تو اسے استعمال کریں
- سب ٹائٹل تاخیر
+ کوئی زیرنویس میں دیری نہیں
این ایس ایف ڈبلیو
آٹو ڈاؤن لوڈ
براؤزر میں چلائیں
کم میموری والے آلات، جیسے کہ Android TV پر بہت زیادہ سیٹ ہونے پر کریشوں کا سبب بنتا ہے.
سائٹ ہٹائیں
- ایک مختلف URL کے ساتھ ، موجودہ سائٹ کا کلون شامل کریں.
+ ایک مختلف URL کے ساتھ ، موجودہ سائٹ کا کلون شامل کریں
اسکرین پر فٹ
کھینچیں
اکاؤنٹ بنائیں
@@ -488,7 +488,7 @@
غلط ID
مخزن کا نام
ختم ہونے والا
- کھل رہا
+ کھولنا
کیا آپ کو یقین ہے کہ آپ ہیاں سے نکلنا چاہتے ہیں؟
ایس ڈی
تمام زبانیں
@@ -519,12 +519,38 @@
سب ٹائٹلز سے بند کیپشنز کو ہٹا دیں
اپنے آلے کے مطابق ایپ کی شکل تبدیل کریں
اگلے
- CloudStream میں بذریعہ ڈیفالٹ کوئی سائٹ انسٹال نہیں ہے۔ آپ کو ریپوزٹری سے سائٹس انسٹال کرنے کی ضرورت ہے۔
-\nSky UK Limited 🤮 کی طرف سے بے دماغ DMCA ہٹانے کی وجہ سے ہم ایپ میں ریپوزٹری سائٹ کو لنک نہیں کر سکتے۔
-\nہمارے ڈسکارڈ میں شامل ہوں یا آن لائن تلاش کریں۔
+ CloudStream کے ساتھ پہلے سے کوئی ویب سائٹس انسٹال نہیں ہیں۔ آپ کو مخزنوں سے ویب سائٹس انسٹال کرنی ہوں گی۔
+\n
+\nSky UK Limited کی طرف سے DMCA کے تعلیم نامے کی بنا پر 🤮، ہم ایپ کے اندر مخزن سائٹ کی مستقیم لنک فراہم نہیں کر سکتے۔
+\n
+\nبراہ کرم ہمارے ڈسکارڈ کمیونٹی میں شامل ہونے کو مد نظر رکھیں یا مخزن کیلئے آن لائن تلاش کریں۔
تمام ایکسٹینشنز کریش کی وجہ سے آف کر دی گئیں تاکہ آپ کو پریشانی کا باعث تلاش کرنے میں مدد مل سکے۔
پہلے ایکسٹینشن انسٹال کریں
بہت زیادہ متن۔ کلپ بورڈ میں محفوظ کرنے سے قاصر۔
ایپ اپ ڈیٹ انسٹال ہو رہا ہے…
یہ فہرست خالی ہے۔ کسی اور پر سوئچ کرنے کی کوشش کریں۔
+ موبائل ڈیٹا
+ پروفائلز
+ یو آئی درست طریقے سے تخلیق نہیں کی جاسکتی تھی، یہ ایک بڑا بگ ہے اور فوراً رپورٹ کیا جانا چاہئے%s
+ ترتیب دیں
+ وائی فائی
+ پروفائل پس منظر
+ @string/default_subtitles
+ مدد
+ پروفائل %d
+ پلگ انز کو ڈاؤن لوڈ کرنے کے لئے موڈ منتخب کریں
+ کوالٹیز
+ استعمال کریں
+ غیرفعال کریں
+ مخزن نہیں ملا، URL کو چیک کریں اور VPN استعمال کریں
+ آپ نے پہلے ہی ووٹ دیا ہے
+ مخزن میں کوئی پلگ انز نہیں ملا
+ ترجیحی تعین کریں
+ یہاں آپ تبدیلی کرسکتے ہیں کہ سورسز کو کس طرح کی ترتیب دی جائے۔ اگر ایک ویڈیو کی زیادہ پرائیورٹی ہوتی ہے تو یہ سورس کی انتخاب میں زیادہ اوپر آئے گی۔ سورس کی پرائیورٹی اور کوالٹی کی پرائیورٹی کا مجموعہ ویڈیو کی پرائیورٹی ہوتی ہے۔
+\n
+\nسورس A: 3
+\nکوالٹی B: 7
+\nاس کا مجموعی ویڈیو پرائیورٹی 10 ہوتی ہے۔
+\n
+\nنوٹ: اگر مجموعہ 10 یا اس سے زیادہ ہو تو پلیر وہ لنک لوڈ کرنے کو خود بخود چھوڑ دے گا!
diff --git a/app/src/main/res/values-vi/array.xml b/app/src/main/res/values-vi/array.xml
index a5145c9e..d32f37ce 100644
--- a/app/src/main/res/values-vi/array.xml
+++ b/app/src/main/res/values-vi/array.xml
@@ -195,12 +195,15 @@
- Mặc định
+ - bồ công anh màu vàng
- Hồng nhạt
+ - Quả cam
- Xanh lam đậm
- Nâu sẫm
- Xanh lục
- Xám
- Trắng
+ - Màu xanh mát
- Nâu
- Xanh lục nhạt
- Đỏ
@@ -215,12 +218,15 @@
- Normal
+ - DandelionYellow
- CarnationPink
+ - Orange
- DarkGreen
- Maroon
- NavyBlue
- Grey
- White
+ - CoolBlue
- Brown
- Blue
- Red
diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml
index b8f0cbf8..e38dd5c9 100644
--- a/app/src/main/res/values/array.xml
+++ b/app/src/main/res/values/array.xml
@@ -266,12 +266,15 @@
- Normal
+ - Dandelion Yellow
- Carnation Pink
+ - Orange
- Dark Green
- Maroon
- Navy Blue
- Grey
- White
+ - Cool Blue
- Brown
- Cool
- Fire
@@ -286,12 +289,15 @@
- Normal
+ - DandelionYellow
- CarnationPink
+ - Orange
- DarkGreen
- Maroon
- NavyBlue
- Grey
- White
+ - CoolBlue
- Brown
- Blue
- Red
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index d9258c40..c2c84d0d 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -81,6 +81,9 @@
#515151
#FFFFFF
#622C00
+ #CE8500
+ #F5BB00
+ #408cac
#48E484
#ea596e
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index c047c749..2fa4eb41 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -353,6 +353,36 @@
- @color/colorPrimaryBrown
+
+
+
+
+
+