diff --git a/app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt index 84982dbb..1b7b8099 100644 --- a/app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt +++ b/app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt @@ -32,6 +32,7 @@ import androidx.media3.ui.DefaultTimeBar import androidx.media3.ui.PlayerView import androidx.navigation.navArgs import dagger.hilt.android.AndroidEntryPoint +import dev.jdtech.jellyfin.core.R as CoreR import dev.jdtech.jellyfin.databinding.ActivityPlayerBinding import dev.jdtech.jellyfin.dialogs.SpeedSelectionDialogFragment import dev.jdtech.jellyfin.dialogs.TrackSelectionDialogFragment @@ -136,10 +137,15 @@ class PlayerActivity : BasePlayerActivity() { videoNameTextView.text = currentItemTitle // Skip Intro button - skipIntroButton.isVisible = !isInPictureInPictureMode && currentIntro != null + skipIntroButton.isVisible = !isInPictureInPictureMode && (currentIntro != null || currentCredit != null) + skipIntroButton.text = if (currentCredit != null) getString(CoreR.string.skip_credit_button) else getString(CoreR.string.skip_intro_button) skipIntroButton.setOnClickListener { - currentIntro?.let { - binding.playerView.player?.seekTo((it.introEnd * 1000).toLong()) + if (currentIntro != null) { + currentIntro?.let { + binding.playerView.player?.seekTo((it.introEnd * 1000).toLong()) + } + } else if (currentCredit != null) { + binding.playerView.player?.seekToNext() } } diff --git a/app/phone/src/main/res/layout/exo_player_view.xml b/app/phone/src/main/res/layout/exo_player_view.xml index 03b28bbd..16b91058 100644 --- a/app/phone/src/main/res/layout/exo_player_view.xml +++ b/app/phone/src/main/res/layout/exo_player_view.xml @@ -55,7 +55,6 @@ android:layout_gravity="end|bottom" android:layout_marginEnd="24dp" android:layout_marginBottom="64dp" - android:text="@string/player_controls_skip_intro" android:textColor="@android:color/white" android:visibility="gone" app:backgroundTint="@color/player_background" diff --git a/core/src/main/java/dev/jdtech/jellyfin/utils/DownloaderImpl.kt b/core/src/main/java/dev/jdtech/jellyfin/utils/DownloaderImpl.kt index 0b670493..66630ed8 100644 --- a/core/src/main/java/dev/jdtech/jellyfin/utils/DownloaderImpl.kt +++ b/core/src/main/java/dev/jdtech/jellyfin/utils/DownloaderImpl.kt @@ -15,6 +15,7 @@ import dev.jdtech.jellyfin.models.FindroidMovie import dev.jdtech.jellyfin.models.FindroidSource import dev.jdtech.jellyfin.models.TrickPlayManifest import dev.jdtech.jellyfin.models.UiText +import dev.jdtech.jellyfin.models.toCreditDto import dev.jdtech.jellyfin.models.toFindroidEpisodeDto import dev.jdtech.jellyfin.models.toFindroidMediaStreamDto import dev.jdtech.jellyfin.models.toFindroidMovieDto @@ -46,6 +47,7 @@ class DownloaderImpl( try { val source = jellyfinRepository.getMediaSources(item.id, true).first { it.id == sourceId } val intro = jellyfinRepository.getIntroTimestamps(item.id) + val credit = jellyfinRepository.getCreditTimestamps(item.id) val trickPlayManifest = jellyfinRepository.getTrickPlayManifest(item.id) val trickPlayData = if (trickPlayManifest != null) { jellyfinRepository.getTrickPlayData( @@ -81,6 +83,9 @@ class DownloaderImpl( if (intro != null) { database.insertIntro(intro.toIntroDto(item.id)) } + if (credit != null) { + database.insertCredit(credit.toCreditDto(item.id)) + } if (trickPlayManifest != null && trickPlayData != null) { downloadTrickPlay(item, trickPlayManifest, trickPlayData) } @@ -110,6 +115,9 @@ class DownloaderImpl( if (intro != null) { database.insertIntro(intro.toIntroDto(item.id)) } + if (credit != null) { + database.insertCredit(credit.toCreditDto(item.id)) + } if (trickPlayManifest != null && trickPlayData != null) { downloadTrickPlay(item, trickPlayManifest, trickPlayData) } diff --git a/core/src/main/res/values-it/strings.xml b/core/src/main/res/values-it/strings.xml index 5a961d89..c5303760 100644 --- a/core/src/main/res/values-it/strings.xml +++ b/core/src/main/res/values-it/strings.xml @@ -185,4 +185,6 @@ Diretta TV Riproduci Rimuovi dai preferiti + Salta intro + Prossimo episodio \ No newline at end of file diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index ec8684c0..87846ec4 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -140,9 +140,9 @@ Video output Audio output Intro Skipper - Requires ConfusedPolarBear\'s Intro Skipper plugin to be installed on the server + Requires ConfusedPolarBear\'s Intro Skipper plugin to be installed on the server.\nInstall jumoog\'s Intro Skipper v0.1.8 or higher to skip end credits. Trick Play - Requires nicknsy\'s Jellyscrub plugin to be installed on the server + Requires nicknsy\'s Jellyscrub plugin to be installed on the server Addresses Add address Add server address @@ -185,4 +185,6 @@ Unmark as played Add to favorites Remove from favorites + Skip Intro + Next episode diff --git a/data/schemas/dev.jdtech.jellyfin.database.ServerDatabase/3.json b/data/schemas/dev.jdtech.jellyfin.database.ServerDatabase/3.json index 22b5646d..6742f17d 100644 --- a/data/schemas/dev.jdtech.jellyfin.database.ServerDatabase/3.json +++ b/data/schemas/dev.jdtech.jellyfin.database.ServerDatabase/3.json @@ -2,7 +2,7 @@ "formatVersion": 1, "database": { "version": 3, - "identityHash": "3cb9aaa3295b9e461cb94dfc708258ed", + "identityHash": "2611f255654b3d481be40f080a8b5401", "entities": [ { "tableName": "servers", @@ -758,6 +758,50 @@ "indices": [], "foreignKeys": [] }, + { + "tableName": "credits", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`itemId` TEXT NOT NULL, `start` REAL NOT NULL, `end` REAL NOT NULL, `showAt` REAL NOT NULL, `hideAt` REAL NOT NULL, PRIMARY KEY(`itemId`))", + "fields": [ + { + "fieldPath": "itemId", + "columnName": "itemId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "start", + "columnName": "start", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "end", + "columnName": "end", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "showAt", + "columnName": "showAt", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "hideAt", + "columnName": "hideAt", + "affinity": "REAL", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "itemId" + ] + }, + "indices": [], + "foreignKeys": [] + }, { "tableName": "userdata", "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`userId` TEXT NOT NULL, `itemId` TEXT NOT NULL, `played` INTEGER NOT NULL, `favorite` INTEGER NOT NULL, `playbackPositionTicks` INTEGER NOT NULL, `toBeSynced` INTEGER NOT NULL, PRIMARY KEY(`userId`, `itemId`))", @@ -813,7 +857,7 @@ "views": [], "setupQueries": [ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", - "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '3cb9aaa3295b9e461cb94dfc708258ed')" + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '2611f255654b3d481be40f080a8b5401')" ] } } \ No newline at end of file diff --git a/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabase.kt b/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabase.kt index 1d84c004..f63625cf 100644 --- a/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabase.kt +++ b/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabase.kt @@ -4,6 +4,7 @@ import androidx.room.AutoMigration import androidx.room.Database import androidx.room.RoomDatabase import androidx.room.TypeConverters +import dev.jdtech.jellyfin.models.CreditDto import dev.jdtech.jellyfin.models.FindroidEpisodeDto import dev.jdtech.jellyfin.models.FindroidMediaStreamDto import dev.jdtech.jellyfin.models.FindroidMovieDto @@ -18,7 +19,7 @@ import dev.jdtech.jellyfin.models.TrickPlayManifestDto import dev.jdtech.jellyfin.models.User @Database( - entities = [Server::class, ServerAddress::class, User::class, FindroidMovieDto::class, FindroidShowDto::class, FindroidSeasonDto::class, FindroidEpisodeDto::class, FindroidSourceDto::class, FindroidMediaStreamDto::class, TrickPlayManifestDto::class, IntroDto::class, FindroidUserDataDto::class], + entities = [Server::class, ServerAddress::class, User::class, FindroidMovieDto::class, FindroidShowDto::class, FindroidSeasonDto::class, FindroidEpisodeDto::class, FindroidSourceDto::class, FindroidMediaStreamDto::class, TrickPlayManifestDto::class, IntroDto::class, CreditDto::class, FindroidUserDataDto::class], version = 3, autoMigrations = [ AutoMigration(from = 2, to = 3), diff --git a/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt b/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt index 1d78c789..b6d2c271 100644 --- a/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt +++ b/data/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt @@ -6,6 +6,7 @@ import androidx.room.OnConflictStrategy import androidx.room.Query import androidx.room.Transaction import androidx.room.Update +import dev.jdtech.jellyfin.models.CreditDto import dev.jdtech.jellyfin.models.FindroidEpisodeDto import dev.jdtech.jellyfin.models.FindroidMediaStreamDto import dev.jdtech.jellyfin.models.FindroidMovieDto @@ -222,6 +223,15 @@ interface ServerDatabaseDao { @Query("DELETE FROM intros WHERE itemId = :itemId") fun deleteIntro(itemId: UUID) + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertCredit(credit: CreditDto) + + @Query("SELECT * FROM credits WHERE itemId = :itemId") + fun getCredit(itemId: UUID): CreditDto? + + @Query("DELETE FROM credits WHERE itemId = :itemId") + fun deleteCredit(itemId: UUID) + @Query("SELECT * FROM seasons") fun getSeasons(): List diff --git a/data/src/main/java/dev/jdtech/jellyfin/models/Credit.kt b/data/src/main/java/dev/jdtech/jellyfin/models/Credit.kt new file mode 100644 index 00000000..1f4311b6 --- /dev/null +++ b/data/src/main/java/dev/jdtech/jellyfin/models/Credit.kt @@ -0,0 +1,33 @@ +package dev.jdtech.jellyfin.models + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class Credit( + @SerialName("Credits") + val credit: Credits, +) + +@Serializable +data class Credits( + @SerialName("IntroStart") + val introStart: Double, + @SerialName("IntroEnd") + val introEnd: Double, + @SerialName("ShowSkipPromptAt") + val showSkipPromptAt: Double, + @SerialName("HideSkipPromptAt") + val hideSkipPromptAt: Double, +) + +fun CreditDto.toCredit(): Credit { + return Credit( + credit = Credits( + introStart = start, + introEnd = end, + showSkipPromptAt = showAt, + hideSkipPromptAt = hideAt, + ) + ) +} diff --git a/data/src/main/java/dev/jdtech/jellyfin/models/CreditDto.kt b/data/src/main/java/dev/jdtech/jellyfin/models/CreditDto.kt new file mode 100644 index 00000000..4f24bf68 --- /dev/null +++ b/data/src/main/java/dev/jdtech/jellyfin/models/CreditDto.kt @@ -0,0 +1,25 @@ +package dev.jdtech.jellyfin.models + +import androidx.room.Entity +import androidx.room.PrimaryKey +import java.util.UUID + +@Entity(tableName = "credits") +data class CreditDto( + @PrimaryKey + val itemId: UUID, + val start: Double, + val end: Double, + val showAt: Double, + val hideAt: Double, +) + +fun Credit.toCreditDto(itemId: UUID): CreditDto { + return CreditDto( + itemId = itemId, + start = credit.introStart, + end = credit.introEnd, + showAt = credit.showSkipPromptAt, + hideAt = credit.hideSkipPromptAt, + ) +} diff --git a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt index 8b902f55..7f31e281 100644 --- a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt +++ b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt @@ -1,6 +1,7 @@ package dev.jdtech.jellyfin.repository import androidx.paging.PagingData +import dev.jdtech.jellyfin.models.Credit import dev.jdtech.jellyfin.models.FindroidCollection import dev.jdtech.jellyfin.models.FindroidEpisode import dev.jdtech.jellyfin.models.FindroidItem @@ -86,6 +87,8 @@ interface JellyfinRepository { suspend fun getIntroTimestamps(itemId: UUID): Intro? + suspend fun getCreditTimestamps(itemId: UUID): Credit? + suspend fun getTrickPlayManifest(itemId: UUID): TrickPlayManifest? suspend fun getTrickPlayData(itemId: UUID, width: Int): ByteArray? diff --git a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt index f5019f0c..8c887036 100644 --- a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt +++ b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt @@ -7,6 +7,7 @@ import androidx.paging.PagingData import dev.jdtech.jellyfin.AppPreferences import dev.jdtech.jellyfin.api.JellyfinApi import dev.jdtech.jellyfin.database.ServerDatabaseDao +import dev.jdtech.jellyfin.models.Credit import dev.jdtech.jellyfin.models.FindroidCollection import dev.jdtech.jellyfin.models.FindroidEpisode import dev.jdtech.jellyfin.models.FindroidItem @@ -17,6 +18,7 @@ import dev.jdtech.jellyfin.models.FindroidSource import dev.jdtech.jellyfin.models.Intro import dev.jdtech.jellyfin.models.SortBy import dev.jdtech.jellyfin.models.TrickPlayManifest +import dev.jdtech.jellyfin.models.toCredit import dev.jdtech.jellyfin.models.toFindroidCollection import dev.jdtech.jellyfin.models.toFindroidEpisode import dev.jdtech.jellyfin.models.toFindroidItem @@ -372,6 +374,28 @@ class JellyfinRepositoryImpl( } } + override suspend fun getCreditTimestamps(itemId: UUID): Credit? = + withContext(Dispatchers.IO) { + val credit = database.getCredit(itemId)?.toCredit() + + if (credit != null) { + return@withContext credit + } + + // https://github.com/ConfusedPolarBear/intro-skipper/blob/master/docs/api.md + val pathParameters = mutableMapOf() + pathParameters["itemId"] = itemId + + try { + return@withContext jellyfinApi.api.get( + "/Episode/{itemId}/IntroSkipperSegments", + pathParameters, + ).content + } catch (e: Exception) { + return@withContext null + } + } + override suspend fun getTrickPlayManifest(itemId: UUID): TrickPlayManifest? = withContext(Dispatchers.IO) { val trickPlayManifest = database.getTrickPlayManifest(itemId) diff --git a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryOfflineImpl.kt b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryOfflineImpl.kt index 2fb4a399..389749a1 100644 --- a/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryOfflineImpl.kt +++ b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryOfflineImpl.kt @@ -5,6 +5,7 @@ import androidx.paging.PagingData import dev.jdtech.jellyfin.AppPreferences import dev.jdtech.jellyfin.api.JellyfinApi import dev.jdtech.jellyfin.database.ServerDatabaseDao +import dev.jdtech.jellyfin.models.Credit import dev.jdtech.jellyfin.models.FindroidCollection import dev.jdtech.jellyfin.models.FindroidEpisode import dev.jdtech.jellyfin.models.FindroidItem @@ -15,6 +16,7 @@ import dev.jdtech.jellyfin.models.FindroidSource import dev.jdtech.jellyfin.models.Intro import dev.jdtech.jellyfin.models.SortBy import dev.jdtech.jellyfin.models.TrickPlayManifest +import dev.jdtech.jellyfin.models.toCredit import dev.jdtech.jellyfin.models.toFindroidEpisode import dev.jdtech.jellyfin.models.toFindroidMovie import dev.jdtech.jellyfin.models.toFindroidSeason @@ -184,6 +186,11 @@ class JellyfinRepositoryOfflineImpl( database.getIntro(itemId)?.toIntro() } + override suspend fun getCreditTimestamps(itemId: UUID): Credit? = + withContext(Dispatchers.IO) { + database.getCredit(itemId)?.toCredit() + } + override suspend fun getTrickPlayManifest(itemId: UUID): TrickPlayManifest? = withContext(Dispatchers.IO) { database.getTrickPlayManifest(itemId)?.toTrickPlayManifest() diff --git a/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt b/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt index b2ee5e9d..377c9d9d 100644 --- a/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt +++ b/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt @@ -18,6 +18,8 @@ import androidx.media3.exoplayer.ExoPlayer import androidx.media3.exoplayer.trackselection.DefaultTrackSelector import dagger.hilt.android.lifecycle.HiltViewModel import dev.jdtech.jellyfin.AppPreferences +import dev.jdtech.jellyfin.models.Credit +import dev.jdtech.jellyfin.models.Credits import dev.jdtech.jellyfin.models.Intro import dev.jdtech.jellyfin.models.PlayerItem import dev.jdtech.jellyfin.mpv.MPVPlayer @@ -55,6 +57,7 @@ constructor( UiState( currentItemTitle = "", currentIntro = null, + currentCredit = null, currentTrickPlay = null, fileLoaded = false, ), @@ -65,12 +68,14 @@ constructor( val eventsChannelFlow = eventsChannel.receiveAsFlow() private val intros: MutableMap = mutableMapOf() + private val credits: MutableMap = mutableMapOf() private val trickPlays: MutableMap = mutableMapOf() data class UiState( val currentItemTitle: String, val currentIntro: Intro?, + val currentCredit: Credits?, val currentTrickPlay: BifData?, val fileLoaded: Boolean, ) @@ -152,6 +157,9 @@ constructor( jellyfinRepository.getIntroTimestamps(item.itemId)?.let { intro -> intros[item.itemId] = intro } + jellyfinRepository.getCreditTimestamps(item.itemId)?.let { credit -> + credits[item.itemId] = credit.credit + } } Timber.d("Stream url: $streamUrl") @@ -241,10 +249,11 @@ constructor( handler.postDelayed(this, 5000L) } } - val introCheckRunnable = object : Runnable { + val skipCheckRunnable = object : Runnable { override fun run() { if (player.currentMediaItem != null && player.currentMediaItem!!.mediaId.isNotEmpty()) { val itemId = UUID.fromString(player.currentMediaItem!!.mediaId) + intros[itemId]?.let { intro -> val seconds = player.currentPosition / 1000.0 if (seconds > intro.showSkipPromptAt && seconds < intro.hideSkipPromptAt) { @@ -253,12 +262,22 @@ constructor( } _uiState.update { it.copy(currentIntro = null) } } + + credits[itemId]?.let { credit -> + val seconds = player.currentPosition / 1000.0 + if (seconds > credit.showSkipPromptAt && seconds < credit.hideSkipPromptAt) { + _uiState.update { it.copy(currentCredit = credit) } + return@let + } + _uiState.update { it.copy(currentCredit = null) } + } } + handler.postDelayed(this, 1000L) } } handler.post(playbackProgressRunnable) - if (intros.isNotEmpty()) handler.post(introCheckRunnable) + if (intros.isNotEmpty()) handler.post(skipCheckRunnable) } override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) { diff --git a/player/video/src/main/res/values-b+es+419/strings.xml b/player/video/src/main/res/values-b+es+419/strings.xml index b76a8749..3a11a2b3 100644 --- a/player/video/src/main/res/values-b+es+419/strings.xml +++ b/player/video/src/main/res/values-b+es+419/strings.xml @@ -7,7 +7,6 @@ Rebobinar> Salir de reproductor Avanzar - Saltar intro Externo Saltar atrás Reproducir pausar diff --git a/player/video/src/main/res/values-bg/strings.xml b/player/video/src/main/res/values-bg/strings.xml index 55bf2fa1..7fc902d3 100644 --- a/player/video/src/main/res/values-bg/strings.xml +++ b/player/video/src/main/res/values-bg/strings.xml @@ -14,6 +14,5 @@ Truques Pausa na reprodução Sair do reprodutor - Pular introdução Insira imagem em imagem \ No newline at end of file diff --git a/player/video/src/main/res/values-cs-rCZ/strings.xml b/player/video/src/main/res/values-cs-rCZ/strings.xml index daae75dd..f033c9bf 100644 --- a/player/video/src/main/res/values-cs-rCZ/strings.xml +++ b/player/video/src/main/res/values-cs-rCZ/strings.xml @@ -9,7 +9,6 @@ Přeskočit zpět Přehrát pauza Přetočit - Přeskočit úvod Ukončit přehrávač Rychlý posun vpřed Přeskočit vpřed diff --git a/player/video/src/main/res/values-de/strings.xml b/player/video/src/main/res/values-de/strings.xml index 37ba16d3..b0e68dc9 100644 --- a/player/video/src/main/res/values-de/strings.xml +++ b/player/video/src/main/res/values-de/strings.xml @@ -8,5 +8,4 @@ Player verlassen Wiederholen Vorspulen - Intro überspringen diff --git a/player/video/src/main/res/values-es-rMX/strings.xml b/player/video/src/main/res/values-es-rMX/strings.xml index a3da9e7f..ff19a455 100644 --- a/player/video/src/main/res/values-es-rMX/strings.xml +++ b/player/video/src/main/res/values-es-rMX/strings.xml @@ -8,7 +8,6 @@ Salir de reproductor Atrasar Avanzar - Saltar intro Saltar adelante Avance Bloquea el reproductor diff --git a/player/video/src/main/res/values-es/strings.xml b/player/video/src/main/res/values-es/strings.xml index fa5bc468..6b101382 100644 --- a/player/video/src/main/res/values-es/strings.xml +++ b/player/video/src/main/res/values-es/strings.xml @@ -8,7 +8,6 @@ Salir del reproductor Rebobinar Avanzar - Saltar introducción Saltar adelante Bloquea el reproductor Reproducir pausar diff --git a/player/video/src/main/res/values-fr/strings.xml b/player/video/src/main/res/values-fr/strings.xml index c4f13ee4..94ad3382 100644 --- a/player/video/src/main/res/values-fr/strings.xml +++ b/player/video/src/main/res/values-fr/strings.xml @@ -8,7 +8,6 @@ Quitter le lecteur Rembobiner Avance rapide - Ignorer l\'introduction Verrouille le lecteur Lecture / Pause Retour en arrière diff --git a/player/video/src/main/res/values-hu/strings.xml b/player/video/src/main/res/values-hu/strings.xml index 0d87f497..a1a2c227 100644 --- a/player/video/src/main/res/values-hu/strings.xml +++ b/player/video/src/main/res/values-hu/strings.xml @@ -8,7 +8,6 @@ Kilépés a lejátszóból Visszatekerés Előrepörgetés - Intro kihagyása Zárolja a lejátszót Ugrás vissza Ugrás előre diff --git a/player/video/src/main/res/values-it/strings.xml b/player/video/src/main/res/values-it/strings.xml index caf23db6..083bfe92 100644 --- a/player/video/src/main/res/values-it/strings.xml +++ b/player/video/src/main/res/values-it/strings.xml @@ -14,7 +14,6 @@ Riavvolgi Blocca il player Esci dal player - Salta intro Attiva picture in picture Nessuno \ No newline at end of file diff --git a/player/video/src/main/res/values-iw/strings.xml b/player/video/src/main/res/values-iw/strings.xml index c2fa91a4..dae114b9 100644 --- a/player/video/src/main/res/values-iw/strings.xml +++ b/player/video/src/main/res/values-iw/strings.xml @@ -8,7 +8,6 @@ צא מהנגן הרצה אחורה הרצה קדימה - דלג פתיח דלג קדימה נועל את הנגן דלג אחורה diff --git a/player/video/src/main/res/values-ko/strings.xml b/player/video/src/main/res/values-ko/strings.xml index 8993e36d..c6ee35dd 100644 --- a/player/video/src/main/res/values-ko/strings.xml +++ b/player/video/src/main/res/values-ko/strings.xml @@ -8,7 +8,6 @@ 되감기 빨리 감기 플레이어 나가기 - 오프닝 스킵 플레이어 잠금 Trickplay 뒤로 건너뛰기 diff --git a/player/video/src/main/res/values-nl/strings.xml b/player/video/src/main/res/values-nl/strings.xml index 6b69e563..c021b257 100644 --- a/player/video/src/main/res/values-nl/strings.xml +++ b/player/video/src/main/res/values-nl/strings.xml @@ -8,5 +8,4 @@ Sluit speler Terugspoelen Snel vooruit - Intro overslaan diff --git a/player/video/src/main/res/values-pl/strings.xml b/player/video/src/main/res/values-pl/strings.xml index ee45bc6f..fba463a4 100644 --- a/player/video/src/main/res/values-pl/strings.xml +++ b/player/video/src/main/res/values-pl/strings.xml @@ -8,7 +8,6 @@ Zamknij odtwarzacz Przewiń Przewiń do przodu - Pomiń czołówkę Zablokuj odtwarzacz Skocz do tyłu Trickplay diff --git a/player/video/src/main/res/values-pt-rBR/strings.xml b/player/video/src/main/res/values-pt-rBR/strings.xml index d394cac9..6eb53b13 100644 --- a/player/video/src/main/res/values-pt-rBR/strings.xml +++ b/player/video/src/main/res/values-pt-rBR/strings.xml @@ -8,7 +8,6 @@ Sair do reprodutor Retroceder Avanço rápido - Pular introdução Bloqueia o reprodutor Saltar para trás Miniatura de pré-visualização diff --git a/player/video/src/main/res/values-pt/strings.xml b/player/video/src/main/res/values-pt/strings.xml index 0cc14bd2..b07f00b0 100644 --- a/player/video/src/main/res/values-pt/strings.xml +++ b/player/video/src/main/res/values-pt/strings.xml @@ -14,6 +14,5 @@ Barra de progresso Avançar Pular para trás - Pular introdução Insira imagem em imagem \ No newline at end of file diff --git a/player/video/src/main/res/values-ru/strings.xml b/player/video/src/main/res/values-ru/strings.xml index f4e97c9d..fd12b06a 100644 --- a/player/video/src/main/res/values-ru/strings.xml +++ b/player/video/src/main/res/values-ru/strings.xml @@ -8,7 +8,6 @@ Выйти из проигрывателя Перемотка Быстрая перемотка - Пропустить заставку Блокировка Перейти назад Плей пауза diff --git a/player/video/src/main/res/values-sk/strings.xml b/player/video/src/main/res/values-sk/strings.xml index ccb936f2..2dc95d79 100644 --- a/player/video/src/main/res/values-sk/strings.xml +++ b/player/video/src/main/res/values-sk/strings.xml @@ -8,7 +8,6 @@ Zavrieť prehrávač Pretočiť dozadu Pretočiť dopredu - Preskočiť úvodnú zvučku Zamkne prehrávač Preskočiť späť Preskočiť dopredu diff --git a/player/video/src/main/res/values-sl/strings.xml b/player/video/src/main/res/values-sl/strings.xml index 72b604ef..a5e04c51 100644 --- a/player/video/src/main/res/values-sl/strings.xml +++ b/player/video/src/main/res/values-sl/strings.xml @@ -8,7 +8,6 @@ Izhod iz predvajalnika Previj nazaj Navijaj naprej - Preskoči uvod Zaklene predvajalnik Preskoči nazaj Predvajaj ustavi diff --git a/player/video/src/main/res/values-sv/strings.xml b/player/video/src/main/res/values-sv/strings.xml index 3e9998a1..c7086524 100644 --- a/player/video/src/main/res/values-sv/strings.xml +++ b/player/video/src/main/res/values-sv/strings.xml @@ -8,5 +8,4 @@ Avsluta spelare Spola tillbaka Spola framåt - Hoppa över intro \ No newline at end of file diff --git a/player/video/src/main/res/values-uk/strings.xml b/player/video/src/main/res/values-uk/strings.xml index 8b54d3f5..41c42b80 100644 --- a/player/video/src/main/res/values-uk/strings.xml +++ b/player/video/src/main/res/values-uk/strings.xml @@ -8,5 +8,4 @@ Відмотка Швидке перемотування Вийти з плеєра - Пропустити вступ \ No newline at end of file diff --git a/player/video/src/main/res/values-vi/strings.xml b/player/video/src/main/res/values-vi/strings.xml index f3061da1..44964e2c 100644 --- a/player/video/src/main/res/values-vi/strings.xml +++ b/player/video/src/main/res/values-vi/strings.xml @@ -8,7 +8,6 @@ Thoát khỏi trình xem Tua lùi Tua tới - Bỏ qua đoạn mở đầu Bỏ qua / Trở về Khoá trình phát Phát / Tạm dừng diff --git a/player/video/src/main/res/values-zh-rCN/strings.xml b/player/video/src/main/res/values-zh-rCN/strings.xml index 4d329a21..59cd4ed1 100644 --- a/player/video/src/main/res/values-zh-rCN/strings.xml +++ b/player/video/src/main/res/values-zh-rCN/strings.xml @@ -8,7 +8,6 @@ 退出播放器 快退 快进 - 跳过片头 锁定播放器 跳回 播放暂停 diff --git a/player/video/src/main/res/values-zh-rTW/strings.xml b/player/video/src/main/res/values-zh-rTW/strings.xml index 0c81db38..c4bf81c9 100644 --- a/player/video/src/main/res/values-zh-rTW/strings.xml +++ b/player/video/src/main/res/values-zh-rTW/strings.xml @@ -8,7 +8,6 @@ 關閉播放器 倒帶 快轉 - 跳過片頭 鎖定播放器 跳回 播放暫停 diff --git a/player/video/src/main/res/values/strings.xml b/player/video/src/main/res/values/strings.xml index fe54ebe6..eb6df272 100644 --- a/player/video/src/main/res/values/strings.xml +++ b/player/video/src/main/res/values/strings.xml @@ -11,7 +11,6 @@ Play pause Rewind Exit player - Skip Intro Fast forward Skip forward Trickplay