diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6f130105..b50a58b8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -71,8 +71,6 @@ jobs: echo "$line => $short_name" cp "$line" "$short_name" done - apks=$(find app/build/outputs/apk -name '*.apk' -print0 | tr '\0' ',' | sed 's/,$//') - echo "apks=$apks" >> "$GITHUB_OUTPUT" - name: Checksums run: | echo "SHA256 checksums:" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5a7de9cb..fb9d21f1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -36,7 +36,7 @@ jobs: ORG_GRADLE_PROJECT_WholphinExtensionsUsername: "${{ secrets.EXTENSIONS_USERNAME }}" ORG_GRADLE_PROJECT_WholphinExtensionsPassword: "${{ secrets.EXTENSIONS_PASSWORD }}" run: | - ./gradlew clean assembleDefaultRelease bundleAppstoreRelease --no-daemon + ./gradlew clean assembleDefaultRelease bundleAppstoreRelease bundleFiretvRelease --no-daemon - name: Verify signatures run: | @@ -53,11 +53,6 @@ jobs: echo "$line => $short_name" cp "$line" "$short_name" done - apks=$(find app/build/outputs/apk -name '*.apk' -print0 | tr '\0' ',' | sed 's/,$//') - echo "apks=$apks" >> "$GITHUB_OUTPUT" - - aab=$(find app/build/outputs -name '*.aab') - echo "aab=$aab" >> "$GITHUB_OUTPUT" - name: Checksums run: | echo "SHA256 checksums:" diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 21d41e3e..2026c9ee 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -49,6 +49,8 @@ Wholphin uses several native components for extra playback compatibility. This i If you want to include these in a local build, see the [instructions here](https://github.com/damontecres/wholphin-extensions?tab=readme-ov-file#usage) for configuring the repository. +You can also build the extensions locally from https://github.com/damontecres/wholphin-extensions and include them in `app/libs`. The gradle build dependency resolution prefers these local files over fetching from the remote maven registry. + ### App settings App settings are available with the `AppPreferences` object and defined by different `AppPreference` objects (note the `s` differences). diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 6221f85a..02b20fb9 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,3 +1,4 @@ +import com.android.build.api.dsl.ProductFlavor import com.google.protobuf.gradle.id import com.mikepenz.aboutlibraries.plugin.DuplicateMode import com.mikepenz.aboutlibraries.plugin.DuplicateRule @@ -112,16 +113,34 @@ android { } flavorDimensions += "version" productFlavors { + val featureLeanback = "leanback" + val featureUpdate = "UPDATING_ENABLED" + val featureDiscover = "DISCOVER_ENABLED" + + fun ProductFlavor.setFeatureFlag( + name: String, + enabled: Boolean, + ) { + this.buildConfigField("boolean", name, "Boolean.parseBoolean(\"${enabled}\")") + } create("default") { dimension = "version" isDefault = true - manifestPlaceholders += mapOf("leanback" to false) - buildConfigField("boolean", "UPDATING_ENABLED", "true") + manifestPlaceholders += mapOf(featureLeanback to false) + setFeatureFlag(featureUpdate, true) + setFeatureFlag(featureDiscover, true) } create("appstore") { dimension = "version" - manifestPlaceholders += mapOf("leanback" to true) - buildConfigField("boolean", "UPDATING_ENABLED", "false") + manifestPlaceholders += mapOf(featureLeanback to true) + setFeatureFlag(featureUpdate, false) + setFeatureFlag(featureDiscover, true) + } + create("firetv") { + dimension = "version" + manifestPlaceholders += mapOf(featureLeanback to true) + setFeatureFlag(featureUpdate, false) + setFeatureFlag(featureDiscover, false) } } compileOptions { diff --git a/app/src/main/java/com/github/damontecres/wholphin/preferences/AppPreference.kt b/app/src/main/java/com/github/damontecres/wholphin/preferences/AppPreference.kt index 765e41d2..0979442f 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/preferences/AppPreference.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/preferences/AppPreference.kt @@ -5,6 +5,7 @@ import androidx.annotation.ArrayRes import androidx.annotation.StringRes import androidx.core.content.edit import androidx.preference.PreferenceManager +import com.github.damontecres.wholphin.BuildConfig import com.github.damontecres.wholphin.R import com.github.damontecres.wholphin.WholphinApplication import com.github.damontecres.wholphin.services.UpdateChecker @@ -1087,10 +1088,12 @@ val basicPreferences = PreferenceGroup( title = R.string.more, preferences = - listOf( - AppPreference.SeerrIntegration, - AppPreference.AdvancedSettings, - ), + buildList { + if (BuildConfig.DISCOVER_ENABLED) { + add(AppPreference.SeerrIntegration) + } + add(AppPreference.AdvancedSettings) + }, ), ) diff --git a/app/src/main/java/com/github/damontecres/wholphin/services/MusicService.kt b/app/src/main/java/com/github/damontecres/wholphin/services/MusicService.kt index 0fb0c774..ff7699a6 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/services/MusicService.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/services/MusicService.kt @@ -279,6 +279,7 @@ class MusicService onMain { player.addMediaItems(mediaItems) } } updateQueueSize() + start() } /** diff --git a/app/src/main/java/com/github/damontecres/wholphin/services/SeerrApi.kt b/app/src/main/java/com/github/damontecres/wholphin/services/SeerrApi.kt index 5c62655f..685b858c 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/services/SeerrApi.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/services/SeerrApi.kt @@ -1,5 +1,6 @@ package com.github.damontecres.wholphin.services +import com.github.damontecres.wholphin.BuildConfig import com.github.damontecres.wholphin.api.seerr.SeerrApiClient import com.github.damontecres.wholphin.ui.isNotNullOrBlank import com.github.damontecres.wholphin.ui.setup.seerr.createSeerrApiUrl @@ -19,7 +20,7 @@ class SeerrApi( ) private set - val active: Boolean get() = api.baseUrl.isNotNullOrBlank() + val active: Boolean get() = api.baseUrl.isNotNullOrBlank() && BuildConfig.DISCOVER_ENABLED fun update( baseUrl: String, diff --git a/app/src/main/java/com/github/damontecres/wholphin/services/SeerrServerRepository.kt b/app/src/main/java/com/github/damontecres/wholphin/services/SeerrServerRepository.kt index 0f073af6..7096b833 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/services/SeerrServerRepository.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/services/SeerrServerRepository.kt @@ -4,6 +4,7 @@ import android.content.Context import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.asFlow import androidx.lifecycle.lifecycleScope +import com.github.damontecres.wholphin.BuildConfig import com.github.damontecres.wholphin.api.seerr.SeerrApiClient import com.github.damontecres.wholphin.api.seerr.model.AuthJellyfinPostRequest import com.github.damontecres.wholphin.api.seerr.model.AuthLocalPostRequest @@ -292,44 +293,46 @@ class UserSwitchListener launchIO { homeSettingsService.loadCurrentSettings(user.id) } - // Check for seerr server - launchIO { - seerrServerDao - .getUsersByJellyfinUser(user.rowId) - .lastOrNull() - ?.let { seerrUser -> - val server = - seerrServerDao.getServer(seerrUser.serverId)?.server - if (server != null) { - Timber.i("Found a seerr user & server") - try { - seerrApi.update(server.url, seerrUser.credential) - val userConfig = - if (seerrUser.authMethod != SeerrAuthMethod.API_KEY) { - login( - seerrApi.api, - seerrUser.authMethod, - seerrUser.username, - seerrUser.password, - ) - } else { - seerrApi.api.usersApi.authMeGet() - } - seerrServerRepository.set( - server, - seerrUser, - userConfig, - ) - } catch (ex: Exception) { - Timber.w( - ex, - "Error logging into %s", - server.url, - ) - seerrServerRepository.error(server, seerrUser, ex) + if (BuildConfig.DISCOVER_ENABLED) { + // Check for seerr server + launchIO { + seerrServerDao + .getUsersByJellyfinUser(user.rowId) + .lastOrNull() + ?.let { seerrUser -> + val server = + seerrServerDao.getServer(seerrUser.serverId)?.server + if (server != null) { + Timber.i("Found a seerr user & server") + try { + seerrApi.update(server.url, seerrUser.credential) + val userConfig = + if (seerrUser.authMethod != SeerrAuthMethod.API_KEY) { + login( + seerrApi.api, + seerrUser.authMethod, + seerrUser.username, + seerrUser.password, + ) + } else { + seerrApi.api.usersApi.authMeGet() + } + seerrServerRepository.set( + server, + seerrUser, + userConfig, + ) + } catch (ex: Exception) { + Timber.w( + ex, + "Error logging into %s", + server.url, + ) + seerrServerRepository.error(server, seerrUser, ex) + } } } - } + } } } } diff --git a/app/src/main/java/com/github/damontecres/wholphin/services/UpdateChecker.kt b/app/src/main/java/com/github/damontecres/wholphin/services/UpdateChecker.kt index 40a04218..f2a0bd23 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/services/UpdateChecker.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/services/UpdateChecker.kt @@ -65,7 +65,7 @@ class UpdateChecker private val NOTE_REGEX = Regex("") - const val ACTIVE = BuildConfig.UPDATING_ENABLED + val ACTIVE = BuildConfig.UPDATING_ENABLED } /** diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/CollectionFolderGrid.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/CollectionFolderGrid.kt index ae945726..f574e883 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/CollectionFolderGrid.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/CollectionFolderGrid.kt @@ -64,6 +64,7 @@ import com.github.damontecres.wholphin.services.BackdropService import com.github.damontecres.wholphin.services.FavoriteWatchManager import com.github.damontecres.wholphin.services.MediaManagementService import com.github.damontecres.wholphin.services.MediaReportService +import com.github.damontecres.wholphin.services.MusicService import com.github.damontecres.wholphin.services.NavigationManager import com.github.damontecres.wholphin.services.ThemeSongPlayer import com.github.damontecres.wholphin.services.UserPreferencesService @@ -80,6 +81,7 @@ import com.github.damontecres.wholphin.ui.detail.MoreDialogActions import com.github.damontecres.wholphin.ui.detail.PlaylistDialog import com.github.damontecres.wholphin.ui.detail.PlaylistLoadingState import com.github.damontecres.wholphin.ui.detail.buildMoreDialogItemsForHome +import com.github.damontecres.wholphin.ui.detail.music.addToQueue import com.github.damontecres.wholphin.ui.equalsNotNull import com.github.damontecres.wholphin.ui.launchDefault import com.github.damontecres.wholphin.ui.launchIO @@ -139,6 +141,7 @@ class CollectionFolderViewModel private val themeSongPlayer: ThemeSongPlayer, private val userPreferencesService: UserPreferencesService, private val mediaManagementService: MediaManagementService, + private val musicService: MusicService, val mediaReportService: MediaReportService, @Assisted itemId: String, @Assisted initialSortAndDirection: SortAndDirection?, @@ -532,6 +535,11 @@ class CollectionFolderViewModel item: BaseItem, appPreferences: AppPreferences, ): Boolean = mediaManagementService.canDelete(item, appPreferences) + + fun addToQueue( + item: BaseItem, + index: Int, + ) = addToQueue(api, musicService, item, index) } /** @@ -776,6 +784,9 @@ fun CollectionFolderGrid( onClickGoTo = { onClickItem.invoke(position, it) }, + onClickAddToQueue = { + viewModel.addToQueue(it, 0) + }, ), ), onDismissRequest = { moreDialog.makeAbsent() }, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/Dialogs.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/Dialogs.kt index 37de91ce..538f623b 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/Dialogs.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/Dialogs.kt @@ -76,6 +76,8 @@ import kotlinx.coroutines.launch import org.jellyfin.sdk.model.api.MediaSourceInfo import org.jellyfin.sdk.model.api.MediaStream import org.jellyfin.sdk.model.api.MediaStreamType +import org.jellyfin.sdk.model.serializer.toUUIDOrNull +import java.util.UUID /** * Parameters for rendering a [DialogPopup] @@ -597,6 +599,7 @@ fun ConfirmDeleteDialog( fun chooseVersionParams( context: Context, sources: List, + chosenSourceId: UUID?, onClick: (Int) -> Unit, ): DialogParams = DialogParams( @@ -604,6 +607,7 @@ fun chooseVersionParams( title = context.getString(R.string.choose_stream, context.getString(R.string.version)), items = sources.filter { it.id.isNotNullOrBlank() }.mapIndexed { index, source -> + val uuid = source.id?.toUUIDOrNull() val videoStream = source.mediaStreams?.firstOrNull { it.type == MediaStreamType.VIDEO } val title = source.name ?: source.path ?: source.id ?: "" @@ -611,6 +615,9 @@ fun chooseVersionParams( headlineContent = { Text(text = title) }, + leadingContent = { + SelectedLeadingContent(uuid != null && uuid == chosenSourceId) + }, supportingContent = { videoStream?.displayTitle?.let { Text(text = it) } }, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/RecommendedContent.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/RecommendedContent.kt index 5eb1a210..1e2d3e61 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/RecommendedContent.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/RecommendedContent.kt @@ -26,6 +26,7 @@ import com.github.damontecres.wholphin.services.BackdropService import com.github.damontecres.wholphin.services.FavoriteWatchManager import com.github.damontecres.wholphin.services.MediaManagementService import com.github.damontecres.wholphin.services.MediaReportService +import com.github.damontecres.wholphin.services.MusicService import com.github.damontecres.wholphin.services.NavigationManager import com.github.damontecres.wholphin.services.deleteItem import com.github.damontecres.wholphin.ui.OneTimeLaunchedEffect @@ -35,6 +36,7 @@ import com.github.damontecres.wholphin.ui.detail.MoreDialogActions import com.github.damontecres.wholphin.ui.detail.PlaylistDialog import com.github.damontecres.wholphin.ui.detail.PlaylistLoadingState import com.github.damontecres.wholphin.ui.detail.buildMoreDialogItemsForHome +import com.github.damontecres.wholphin.ui.detail.music.addToQueue import com.github.damontecres.wholphin.ui.launchDefault import com.github.damontecres.wholphin.ui.launchIO import com.github.damontecres.wholphin.ui.main.HomePageContent @@ -48,6 +50,7 @@ import kotlinx.coroutines.Deferred import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async import kotlinx.coroutines.flow.MutableStateFlow +import org.jellyfin.sdk.api.client.ApiClient import org.jellyfin.sdk.model.api.MediaType import java.util.UUID @@ -56,9 +59,11 @@ import java.util.UUID */ abstract class RecommendedViewModel( @param:ApplicationContext val context: Context, + val api: ApiClient, val navigationManager: NavigationManager, val favoriteWatchManager: FavoriteWatchManager, val mediaReportService: MediaReportService, + private val musicService: MusicService, private val backdropService: BackdropService, private val mediaManagementService: MediaManagementService, ) : ViewModel() { @@ -147,6 +152,11 @@ abstract class RecommendedViewModel( item: BaseItem, appPreferences: AppPreferences, ): Boolean = mediaManagementService.canDelete(item, appPreferences) + + fun addToQueue( + item: BaseItem, + index: Int, + ) = addToQueue(api, musicService, item, index) } @Composable @@ -244,6 +254,9 @@ fun RecommendedContent( }, onSendMediaInfo = viewModel.mediaReportService::sendReportFor, onClickDelete = { showDeleteDialog = RowColumnItem(position, item) }, + onClickAddToQueue = { + viewModel.addToQueue(it, 0) + }, ), ), onDismissRequest = { moreDialog.makeAbsent() }, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/RecommendedMovie.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/RecommendedMovie.kt index 392c77a5..3228046b 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/RecommendedMovie.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/RecommendedMovie.kt @@ -16,6 +16,7 @@ import com.github.damontecres.wholphin.services.BackdropService import com.github.damontecres.wholphin.services.FavoriteWatchManager import com.github.damontecres.wholphin.services.MediaManagementService import com.github.damontecres.wholphin.services.MediaReportService +import com.github.damontecres.wholphin.services.MusicService import com.github.damontecres.wholphin.services.NavigationManager import com.github.damontecres.wholphin.services.SuggestionService import com.github.damontecres.wholphin.services.SuggestionsResource @@ -55,7 +56,8 @@ class RecommendedMovieViewModel @AssistedInject constructor( @ApplicationContext context: Context, - private val api: ApiClient, + api: ApiClient, + musicService: MusicService, private val serverRepository: ServerRepository, private val preferencesDataStore: DataStore, private val suggestionService: SuggestionService, @@ -67,9 +69,11 @@ class RecommendedMovieViewModel mediaManagementService: MediaManagementService, ) : RecommendedViewModel( context, + api, navigationManager, favoriteWatchManager, mediaReportService, + musicService, backdropService, mediaManagementService, ) { diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/RecommendedMusic.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/RecommendedMusic.kt index 87cc7c0d..e659347b 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/RecommendedMusic.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/RecommendedMusic.kt @@ -17,6 +17,7 @@ import com.github.damontecres.wholphin.services.BackdropService import com.github.damontecres.wholphin.services.FavoriteWatchManager import com.github.damontecres.wholphin.services.MediaManagementService import com.github.damontecres.wholphin.services.MediaReportService +import com.github.damontecres.wholphin.services.MusicService import com.github.damontecres.wholphin.services.NavigationManager import com.github.damontecres.wholphin.services.SuggestionService import com.github.damontecres.wholphin.services.SuggestionsResource @@ -54,7 +55,8 @@ class RecommendedMusicViewModel @AssistedInject constructor( @ApplicationContext context: Context, - private val api: ApiClient, + api: ApiClient, + musicService: MusicService, private val serverRepository: ServerRepository, private val preferencesDataStore: DataStore, private val suggestionService: SuggestionService, @@ -66,9 +68,11 @@ class RecommendedMusicViewModel mediaManagementService: MediaManagementService, ) : RecommendedViewModel( context, + api, navigationManager, favoriteWatchManager, mediaReportService, + musicService, backdropService, mediaManagementService, ) { diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/components/RecommendedTvShow.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/components/RecommendedTvShow.kt index db7f7b4f..a48af22d 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/components/RecommendedTvShow.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/components/RecommendedTvShow.kt @@ -16,6 +16,7 @@ import com.github.damontecres.wholphin.services.FavoriteWatchManager import com.github.damontecres.wholphin.services.LatestNextUpService import com.github.damontecres.wholphin.services.MediaManagementService import com.github.damontecres.wholphin.services.MediaReportService +import com.github.damontecres.wholphin.services.MusicService import com.github.damontecres.wholphin.services.NavigationManager import com.github.damontecres.wholphin.services.SuggestionService import com.github.damontecres.wholphin.services.SuggestionsResource @@ -58,7 +59,8 @@ class RecommendedTvShowViewModel @AssistedInject constructor( @ApplicationContext context: Context, - private val api: ApiClient, + api: ApiClient, + musicService: MusicService, private val serverRepository: ServerRepository, private val preferencesDataStore: DataStore, private val lastestNextUpService: LatestNextUpService, @@ -71,9 +73,11 @@ class RecommendedTvShowViewModel mediaManagementService: MediaManagementService, ) : RecommendedViewModel( context, + api, navigationManager, favoriteWatchManager, mediaReportService, + musicService, backdropService, mediaManagementService, ) { diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/DetailUtils.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/DetailUtils.kt index 74fdaa1e..049569d9 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/DetailUtils.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/DetailUtils.kt @@ -3,6 +3,7 @@ package com.github.damontecres.wholphin.ui.detail import android.content.Context import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowForward +import androidx.compose.material.icons.filled.Add import androidx.compose.material.icons.filled.ArrowForward import androidx.compose.material.icons.filled.Delete import androidx.compose.material.icons.filled.Info @@ -32,6 +33,7 @@ data class MoreDialogActions( val onClickDelete: (BaseItem) -> Unit, val onClickGoTo: (BaseItem) -> Unit = { navigateTo(it.destination()) }, val onClickRemoveFromNextUp: (BaseItem) -> Unit = {}, + val onClickAddToQueue: (BaseItem) -> Unit = {}, ) enum class ClearChosenStreams { @@ -331,6 +333,16 @@ fun buildMoreDialogItemsForHome( ) } } + if (item.type == BaseItemKind.MUSIC_ALBUM) { + add( + DialogItem( + context.getString(R.string.add_to_queue), + Icons.Default.Add, + ) { + actions.onClickAddToQueue(item) + }, + ) + } add( DialogItem( text = R.string.add_to_playlist, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/PlaylistDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/PlaylistDetails.kt index d50b7af5..ff5809fb 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/PlaylistDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/PlaylistDetails.kt @@ -430,6 +430,7 @@ fun PlaylistDetails( }, onSendMediaInfo = viewModel::sendMediaReport, onClickDelete = { showDeleteDialog = it }, + onClickAddToQueue = { viewModel.addToQueue(it, 0) }, ) PlaylistDetailsContent( diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/collection/CollectionDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/collection/CollectionDetails.kt index bd647d47..96a4ea4f 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/collection/CollectionDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/collection/CollectionDetails.kt @@ -124,6 +124,7 @@ fun CollectionDetails( }, onSendMediaInfo = viewModel.mediaReportService::sendReportFor, onClickDelete = { item -> showDeleteDialog = Pair(position, item) }, + onClickAddToQueue = { viewModel.addToQueue(it, 0) }, ), ) moreDialog = @@ -244,6 +245,7 @@ fun CollectionDetails( }, onSendMediaInfo = viewModel.mediaReportService::sendReportFor, onClickDelete = { item -> showDeleteDialog = Pair(null, item) }, + onClickAddToQueue = { viewModel.addToQueue(it, 0) }, ), ) moreDialog = diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/collection/CollectionViewModel.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/collection/CollectionViewModel.kt index 4a717ee0..b0a6c606 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/collection/CollectionViewModel.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/collection/CollectionViewModel.kt @@ -19,6 +19,7 @@ import com.github.damontecres.wholphin.services.ImageUrlService import com.github.damontecres.wholphin.services.KeyValueService import com.github.damontecres.wholphin.services.MediaManagementService import com.github.damontecres.wholphin.services.MediaReportService +import com.github.damontecres.wholphin.services.MusicService import com.github.damontecres.wholphin.services.NavigationManager import com.github.damontecres.wholphin.services.ThemeSongPlayer import com.github.damontecres.wholphin.services.UserPreferencesService @@ -27,6 +28,7 @@ import com.github.damontecres.wholphin.ui.SlimItemFields import com.github.damontecres.wholphin.ui.collectLatestIn import com.github.damontecres.wholphin.ui.data.RowColumn import com.github.damontecres.wholphin.ui.data.SortAndDirection +import com.github.damontecres.wholphin.ui.detail.music.addToQueue import com.github.damontecres.wholphin.ui.formatTypeName import com.github.damontecres.wholphin.ui.launchDefault import com.github.damontecres.wholphin.ui.launchIO @@ -86,6 +88,7 @@ class CollectionViewModel private val keyValueService: KeyValueService, private val libraryDisplayInfoDao: LibraryDisplayInfoDao, private val imageUrlService: ImageUrlService, + private val musicService: MusicService, val mediaReportService: MediaReportService, @Assisted private val itemId: UUID, ) : ViewModel() { @@ -462,6 +465,11 @@ class CollectionViewModel } } + fun addToQueue( + item: BaseItem, + index: Int, + ) = addToQueue(api, musicService, item, index) + companion object { val typesInCollection = listOf( diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/episode/EpisodeDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/episode/EpisodeDetails.kt index e4b5a047..bdacc389 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/episode/EpisodeDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/episode/EpisodeDetails.kt @@ -176,6 +176,7 @@ fun EpisodeDetails( chooseVersionParams( context, ep.data.mediaSources!!, + chosenStreams?.source?.id?.toUUIDOrNull(), ) { idx -> val source = ep.data.mediaSources!![idx] viewModel.savePlayVersion( diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetails.kt index 440e8d4a..bf7d4601 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetails.kt @@ -210,6 +210,7 @@ fun MovieDetails( chooseVersionParams( context, movie.data.mediaSources!!, + chosenStreams?.source?.id?.toUUIDOrNull(), ) { idx -> val source = movie.data.mediaSources!![idx] viewModel.savePlayVersion( diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/music/MusicViewModel.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/music/MusicViewModel.kt index e7b85418..812927f1 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/music/MusicViewModel.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/music/MusicViewModel.kt @@ -81,35 +81,7 @@ abstract class MusicViewModel( fun addToQueue( item: BaseItem, index: Int, - ) { - viewModelScope.launchIO { - Timber.v("addToQueue %s %s", item.type, item.id) - when (item.type) { - BaseItemKind.AUDIO -> { - musicService.addAllToQueue(BlockingList.of(listOf(item)), 0) - } - - BaseItemKind.MUSIC_ALBUM -> { - val pager = getPagerForAlbum(api, item.id) - musicService.addAllToQueue(pager, 0) - } - - BaseItemKind.MUSIC_ARTIST -> { - val pager = getPagerForArtist(api, item.id) - musicService.addAllToQueue(pager, 0) - } - - BaseItemKind.PLAYLIST -> { - val pager = getPagerForPlaylist(api, item.id) - musicService.addAllToQueue(pager, 0) - } - - else -> { - Timber.w("Unknown item type to queue for music: %s", item.type) - } - } - } - } + ) = addToQueue(api, musicService, item, index) fun startInstantMix(itemId: UUID) { viewModelScope.launchIO { @@ -140,3 +112,38 @@ abstract class MusicViewModel( internal abstract fun init() } + +fun ViewModel.addToQueue( + api: ApiClient, + musicService: MusicService, + item: BaseItem, + index: Int, +) { + viewModelScope.launchIO { + Timber.v("addToQueue %s %s", item.type, item.id) + when (item.type) { + BaseItemKind.AUDIO -> { + musicService.addAllToQueue(BlockingList.of(listOf(item)), 0) + } + + BaseItemKind.MUSIC_ALBUM -> { + val pager = getPagerForAlbum(api, item.id) + musicService.addAllToQueue(pager, 0) + } + + BaseItemKind.MUSIC_ARTIST -> { + val pager = getPagerForArtist(api, item.id) + musicService.addAllToQueue(pager, 0) + } + + BaseItemKind.PLAYLIST -> { + val pager = getPagerForPlaylist(api, item.id) + musicService.addAllToQueue(pager, 0) + } + + else -> { + Timber.w("Unknown item type to queue for music: %s", item.type) + } + } + } +} diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesOverview.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesOverview.kt index 84180f20..e048a008 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesOverview.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesOverview.kt @@ -225,6 +225,7 @@ fun SeriesOverview( chooseVersionParams( context, ep.data.mediaSources!!, + chosenStreams?.source?.id?.toUUIDOrNull(), ) { idx -> val source = ep.data.mediaSources!![idx] viewModel.savePlayVersion( diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt index cfc43be9..de04149b 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt @@ -287,8 +287,7 @@ class SeriesViewModel item.value?.let { item -> if (loading.value == LoadingState.Success) { viewModelScope.launchIO { - val seasons = getSeasons(item, null).await() - this@SeriesViewModel.seasons.setValueOnMain(seasons) + (seasons.value as? ApiRequestPager<*>)?.refresh() } } } diff --git a/app/src/main/java/com/github/damontecres/wholphin/util/RequestPager.kt b/app/src/main/java/com/github/damontecres/wholphin/util/RequestPager.kt index c9f91534..b478338b 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/util/RequestPager.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/util/RequestPager.kt @@ -107,6 +107,13 @@ abstract class RequestPager( } } + suspend fun refresh() { + cachedPages.asMap().keys.forEachIndexed { index, pageNum -> + if (DEBUG) Timber.v("refresh: pageNum=%s", pageNum) + fetchPageBlocking(pageNum * pageSize, index == 0) + } + } + protected abstract suspend fun fetchPage( pageNumber: Int, includeTotalCount: Boolean, diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 70aa278d..e56a1a43 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -578,4 +578,5 @@ Fortfahren Verschiedene Arten Logos anstatt Titelnamen anzeigen + Wholphin aktualisiert auf %s diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 13147e59..fa312ec6 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -573,7 +573,7 @@ Mostrar portada del álbum Mostrar visualizador Mostrar imagen de fondo - Reproducir en + Reproducir como... Para visualizar el audio en reproducción, se requiere permiso para grabar audio. Continuar Álbumes @@ -596,4 +596,12 @@ Eliminar de la cola Separar por tipos Preferir logotipos para los títulos + Wholphin se ha actualizado a la versión %s + Ver más + Descubrir series + Descubrir películas + Eliminar de \"Continuar viendo\" + Eliminar de \"Siguiente\" + Ver series eliminadas de \"Siguiente\" + Estudios en %1$s diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index eab60eff..3d535faf 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -552,4 +552,38 @@ Lõputiitrite ja lõpuklipi ajal Jätkuv sari Mis tüüpi objekte peaks piltide kontekstis näitama + Albumid + Esitajad + Lood + Mine esitaja juurde + Hetkel esitamisel + Kiirmiks + Mine albumi juurde + Lisa esitusjärjekorda + Albumi esitaja + Album + Populaarsed lood + Esita järgmisena + Muusikavideod + Laulusõnad + Peida laulusõnad + Näita laulusõnu + Laulusõnad on olemas + Eemalda esitusjärjekorrast + Näita albumi kaanepilti + Näita visualiseerijat + Näita tausta + Kas esitad kui? + Hetkel esitamisel heliriba visualiseerimine toimib, kui rakendusel on õigus heli salvestada. + Jätka + Eraldi tüübid + Pealkirjade puhul eelista logode kuvamist + Wholphin on uuendatud versioonini %s + Eemalda „Jätka vaatamist“ valikust + Eemalda sari valikust „Järgmisena esitamisel“ + Vaata sarja, mis sai eemaldatud valikust „Järgmisena esitamisel“ + Vaata veel + Leia telesaateid + Leia filme + Stuudiod: %1$s diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 05968332..894c286c 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -35,7 +35,7 @@ Taille Forcé Genres - Aller à la série + Voir la série Aller à Masquer Accueil @@ -197,7 +197,7 @@ Échelle de contenu par défaut Installer la mise à jour Version installée - Eléments sur les lignes de la page d\'accueil + Éléments sur les lignes de la page d\'accueil Choisissez les éléments à afficher par défaut, les autres seront masqués Personnaliser les éléments du menu de navigation Cliquez pour changer de page @@ -289,7 +289,7 @@ - + Calendrier du DVR @@ -315,7 +315,7 @@ Code PIN requis pour le profil Confirmer le code PIN Erroné - Le code PIN doit comporter au moins 4 éléments + Le code PIN doit comporter au moins 4 chiffres Supprimera le code PIN Taille du cache disque de l\'image (Mo) Options d\'affichage @@ -424,7 +424,7 @@ Décodage logiciel AV1 MPV est désormais le lecteur par défaut, sauf pour HDR.\nVous pouvez modifier cela dans les paramètres. Style de sous-titres HDR - opacité du sous-titre de l\'image + Opacité du sous-titre de l\'image Luminosité Contraste Saturation @@ -475,7 +475,7 @@ Suggestions pour %1$s Augmenter la taille pour toutes les cartes Diminuer la taille pour toutes les cartes - Utilisez des images de miniatures + Utiliser des miniatures Paramètres enregistrés Afficher les préréglages Préréglages intégrés pour styliser rapidement toutes les lignes @@ -511,18 +511,18 @@ Le plus bas Faible Moyen - Haute - Complet + Haut + Maximum Violet Orange - Bleu gras + Bleu vif Noir Ignorer Passer automatiquement Demander à passer - N\'utilisez FFmpeg que si aucun décodeur intégré n\'existe - Préférez utiliser FFmpeg plutôt que les décodeurs intégrés - N\'utilisez jamais les décodeurs FFmpeg + N\'utiliser FFmpeg que si aucun décodeur intégré n\'existe + Préférer l\'utilisation de FFmpeg plutôt que les décodeurs intégrés + Ne jamais utiliser les décodeurs FFmpeg À la fin de la lecture Pendant le générique de fin/outro Blanc @@ -545,29 +545,59 @@ Miniature Image avec couleur dynamique Image uniquement - Entrez l\'URL et la clé API + Saisir l\'URL et la clé API Clé API Se connecter au serveur Seerr Utilisateur Jellyfin Utilisateur local Rechercher et télécharger des sous-titres Aucun sous-titre distant n\'a été trouvé - Présent + En cours Utiliser l\'économiseur d\'écran intégré Acteur Compositeur - Écrivain + Scénariste Invité spécial Producteur - Conducteur + Chef d\'orchestre Parolier Arrangeur Ingénieur - Mélangeur + Mixeur Créateur Artiste Êtes-vous sûr de vouloir supprimer cet élément ? Afficher les options de gestion des médias Recherche %s Tout sélectionner + Albums + Artistes + Chansons + Voir l\'artiste + Lecture en cours + Mix instantané + Voir l\'album + Ajouter à la file + Artiste de l\'album + Album + Titres populaires + Lire ensuite + Clips + Paroles + Masquer les paroles + Afficher les paroles + Contient des paroles + Retirer de la file + Afficher la pochette + Afficher le visualiseur + Afficher l\'arrière-plan + Qui écoute ? + L\'affichage du visualiseur nécessite l\'autorisation d\'enregistrer du contenu audio. + Suivant + Séparer par types + Préférer les logos pour les titres + Wholphin a été mis à jour vers la version %s + Voir plus + Parcourir les séries + Parcourir les films diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index ae739f25..3f8fa5ea 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -41,7 +41,7 @@ Nonaktif Aktif Genre - Masuk ke serial + Buka serial Masuk ke Paksa Sembunyikan kontrol pemutaran @@ -534,4 +534,30 @@ Layar penuh Lebar penuh Tinggi penuh + Utamakan logo untuk judul + Album + Artis + Lagu + Sedang diputar + Campuran instan + Tambahkan ke antrean + Artis album + Album + Lagu populer + Putar berikutnya + Video musik + Lirik + Sembunyikan lirik + Tampilkan lirik + Tersedia lirik + Hapus dari antrean + Tampilkan sampul album + Tampilkan visualisator + Tampilkan backdrop + Putar sebagai? + Memvisualisasikan audio yang sedang diputar memerlukan izin untuk merekam audio. + Lanjutkan + Pisahkan jenis + Buka artis + Buka album diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 604a9ed5..88a3da3c 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -442,8 +442,8 @@ Ruota a destra Ingrandisci Rimpicciolisci - Durata slideshow - Riproduci video durante lo slideshow + Durata dello slideshow + Riproduci i video durante lo slideshow Invia log informazioni media al server %s giorno @@ -570,4 +570,31 @@ Sei sicuro di voler cancellare questo elemento? Mostra opzioni di gestione dei media Seleziona tutti + Album + Artisti + Canzoni + Vai all\'artista + In riproduzione + Mix istantaneo + Vai all\'album + Aggiungi alla coda + Album artista + Album + Canzoni popolari + Riproduci successivo + Video musicali + Testi + Nascondi testi + Mostra testi + La canzone ha i testi + Rimuovi dalla coda + Mostra copertina album + Mostra visualizzatore + Mostra sfondo + Riproduci come? + Per visualizzare l’audio in riproduzione è necessario il permesso di registrare l’audio. + Continua + Tipi separati + Preferisci mostrare i loghi per i titoli + Wholphin aggiornato a %s diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 1afae518..647c32c6 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -13,7 +13,7 @@ Serieopname afbreken Annuleren Hoofdstukken - ‘%1$s’ kiezen + %1$s kiezen Afbeeldingscache wissen Collectie Collecties @@ -23,7 +23,7 @@ Bevestigen Verder kijken Beoordeling (recensie) - %.1f seconden + %.2f seconden Standaard Verwijderen Overleden @@ -57,8 +57,8 @@ Bezig met laden… Serie als bekeken markeren? Serie als niet-bekeken markeren? - Markeren als niet-bekeken - Markeren als bekeken + Als niet-bekeken markeren + Als bekeken markeren Max. bitsnelheid Soortgelijk Meer @@ -88,7 +88,7 @@ Onlangs toegevoegd aan %1$s Onlangs toegevoegd Onlangs opgenomen - Onlangs uitgebracht + Onlangs verschenen Aanbevolen Programma opnemen Serie opnemen @@ -109,28 +109,28 @@ Toegevoegd Toegevoegd (aflevering) Bekeken - Uitgebracht + Verschenen Naam Willekeurig Studio\'s Versturen Het downloaden duurt erg lang - het kan zijn dat je opnieuw moet beginnen met afspelen - Ondertiteling + Onderschrift Ondertiteling Suggesties Andere server kiezen Kiezen - Best beoordeeld, niet-bekeken + Best beoordeeld niet-bekeken Trailer - Trailers - + Trailer + Trailers DVR-schema Gids Seizoen Seizoenen - Afleveringen + Series Vormgeving Onbekend Updates @@ -311,7 +311,7 @@ Gastrollen Randbreedte - Automatische ververssnelheid toepassen + Beeldfrequentie omschakelen Automatisch Gebruikersnaam/wachtwoord gebruiken Inloggen @@ -325,7 +325,7 @@ Niveau Resolutie Anamorfisch - Met interlatie + Geïnterlinieerd Framesnelheid Bitdiepte Videobereik @@ -374,12 +374,12 @@ Login bij Seerr server Zoek %s Acteur - Afspeel voorkeuren wissen + Afspeelvoorkeuren wissen Aflevering thumbnails Auteur Voor afleveringen Start na - Toevoegen aan wachtrij + Aan wachtrij toevoegen Componist Serie thumbnails Weet u zeker dat u dit item wilt verwijderen? @@ -399,9 +399,9 @@ Wachtwoord Verwachte films Verwachte series - Verzoek in 4K + Aanvragen in 4K Helderheid - Stuur media-info log naar server + Media-info log naar server Resolutie schakelen Lokaal Achtergrondstijl @@ -432,7 +432,7 @@ Geen limiet Startscherm aanpassen Startrijen - "Aanbevelingen voor %1$s" + Aanbevelingen voor %1$s Laagst Automatisch overslaan Dirigent @@ -441,4 +441,94 @@ %s dag %s dagen + + %s minuut + %s minuten + + Een ander apparaat toestaan om in te loggen op uw account + Quick Connect code invoeren + Code moet 6 cijfers bevatten + Apparaat succesvol geautoriseerd + MPV is nu de standaard speler behalve voor HDR. \nU kunt dit in de instellingen wijzigen. + Bewaar voor album + Diavoorstelling afspelen + Diavoorstelling stoppen + Aan het begin + Geen foto\'s meer + Duur diavoorstelling + Speel video\'s tijdens diavoorstelling + Artiesten + Nummers + Alle kaarten vergroten + Alle kaarten verkleinen + Kleine afbeeldingen gebruiken + Weergavevoorkeuren + Ingebouwde presets om snel alle rijen te stijlen + Kies rijen en afbeeldingen op startscherm + Animeer + Max leeftijdsclassificatie + Geen max + Schermbeveiliging + Instellingen schermbeveiliging + Start schermbeveiliging + Foto\'s + Soort toevoegen + Welke soorten afbeeldingen moeten worden getoond + Passend + Bijsnijden + Vullen + Vulbreedte + Vulhoogte + Wholphin standaard + Wholphin compact + Laag + Middel + Hoog + Volledig + Paars + Oranje + Felblauw + Zwart + Alleen FFmpeg gebruiken als er geen ingebouwde decoder is + Voorkeur voor FFmpeg boven ingebouwde decoders + Nooit FFmpeg decoders gebruiken + Aan het einde van de weergave + Tijdens aftiteling/outro + Wit + Lichtgrijs + Donkergrijs + Geel + Cyaan + Omtrek + Schaduw + Voorkeur voor MPV + ExoPlayer voor HDR gebruiken + Vierkant (1:1) + Primair + Miniatuur + Afbeelding met dynamische kleuren + Alleen afbeelding + Jellyfin gebruiker + Lokale gebruiker + Geen externe ondertiteling gevonden + Huidig + In-app schermbeveiliging gebruiken + Media-management opties tonen + Tekstschrijver + Arrangeur + Technicus + Bedenker + Artiest + Album artiest + Populaire nummers + Volgende afspelen + Tekst + Tekst verbergen + Tekst tonen + Nummer bevat tekst + Albumhoes tonen + Visualisatie tonen + Achtergrond tonen + Afspelen als? + Visualisatie van de huidig afspelende audio vereist toestemming voor opname. diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 53cd49fc..c096e2ba 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -253,7 +253,7 @@ Playlista Streszczenie Zapisz serial - + Pokaż Pobieranie napisów trwa zbyt długo, może być konieczne ponowne uruchomienie odtwarzacza Harmonogram nagrywania @@ -298,4 +298,55 @@ Cofnij gdy wznawiasz odtwarzanie Player odtwarzający Ochrona przed uśpieniem + Kończy się o %1$s + Wprowadź adres serwera + Natychmiastowo + Nie znaleziono serwerów + Tylko wymuszone napisy + Wyszukiwanie głosowe + Uruchamianie + Mów żeby wyszukać + Przetwarzanie + Wciśnij wstecz aby anulować + Błąd nagrywania dźwięku + Błąd rozpoznawania mowy + Wymagane uprawnienia mikrofonu + Błąd sieci + Błąd serwera + Ponów + Wideo + Filmy + Oglądanie na żywo + Urządzenie uwierzytelniono pomyślnie + Hasło + Nazwa użytkownika + URL + Popularne + Nadchodzące filmy + Nadchodzące seriale + Poproś o 4K + AV1 dekodowanie programowe + MPV jest teraz domyślnym odtwarzaczem, z wyjątkiem HDR.\nMożesz to zmienić w ustawieniach. + Styl napisów HDR + Obróć w lewo + Obróć w prawo + Powiększ + Pomniejsz + Wyślij dane dziennika mediów do serwera + Bez limitu + Maksymalna ilość dni w \"Do obejrzenia\" + Albumy + Artyści + Utwory + Przejdź do artysty + Teraz odtwarzane + Przejdź do albumu + Dodaj do kolejki + Dodaj wiersz + Wysokość + Zastosuj do wszystkich wierszy + Personalizacja strony głównej + Wczytaj profil użytkownika z serwera + Zapisz do profilu użytkownika na serwerze + Wczytaj z klienta webowego diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index b99bf40b..46a38847 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -1,7 +1,7 @@ Despre - Favorite + Favorit Adaugă server Adaugă utilizator Audio @@ -42,8 +42,8 @@ Nu este disponibilă nicio actualizare Filme - - + + Librărie Mergi la @@ -55,8 +55,8 @@ Marchează ca vizionat Persoane - - + + Număr de redări Mai mult @@ -173,7 +173,7 @@ Cheie API Conectează-te la serverul Seerr Servere descoperite - + Reclamă Evaluarea comunității A apărut o eroare! Apasă butonul pentru a trimite jurnalele către serverul tău. @@ -215,8 +215,8 @@ Sezoane Seriale TV - - + + Interfață Necunoscut @@ -228,8 +228,8 @@ Pauză cu un click Interviuri - - + + Fundal @@ -306,4 +306,95 @@ Cântecul are versuri Selectează tot Redă ca? + Anulează înregistrarea seriei + Informații privind licența + Forțat + Ascunde informațiile de depanare + Imediat + Niciuna + Redă de aici + Viteza de redare + Redare + Listă de redare + Afișează informații de depanare privind redarea + Doar subtitrări forțate + Salvează + + Reia + Începe + Vorbește pentru a căuta + Repornire + Eroare rețea + Amestecă + Cele mai bine cotate, nevizionate + + Trailere + + + + Redă cu transcodare + Informații media + Creează o listă noua de redare + Adaugă în lista de redare + + Altele + + + + + În spatele scenelor + + + + + Melodii tematice + + + + + Scene șterse + + + + Evaluare parentală + Timp de execuție + Extra + + Clipuri + + + + %s favorit + Temă aplicație + Verifică automat dacă există actualizări + Dispozitivul acceptă formatele AC3/Dolby Digital + Setări avansate + Interfață avansată + Redă automat următorul + Se aplică numai serialelor TV + Faceți clic pentru a schimba paginile + Sări peste segment + Sări peste final + Autentificare prin server + Apăsați în centru pentru a confirma + Solicită codul PIN pentru profil + Opțiuni de vizualizare + Autentificare + Aspect + Rotește la stânga + Suprascrie setările pe server? + Suprascrie setările locale? + Începe după + Pentru ce tipuri de articole să se afișeze imagini + Negru + Ignoră + La sfârșitul redării + În timpul genericului de final/outro + Albastru aldin + Font aldin + Motorul de redare + MPV: Utilizează decodarea hardware + Dezactivează această opțiune dacă aplicația se blochează + Opacitatea fundalului + Profil diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml new file mode 100644 index 00000000..42948ac7 --- /dev/null +++ b/app/src/main/res/values-th/strings.xml @@ -0,0 +1,551 @@ + + + เกี่ยวกับแอปนี้ + การบันทึกที่ใช้งานอยู่ + ชื่นชอบ + เพิ่มเซิร์ฟเวอร์ + เพิ่มผู้ใช้ + เสียง + บ้านเกิด + บิตเรท + เกิด + ยกเลิกการบันทึก + ยกเลิกการบันทึกซีรีส์ + ยกเลิก + ฉาก + เลือก %1$s + ล้างแคชภาพ + คอลเลคชัน + คอลเลกชัน + ทางการค้า + การให้คะแนนของชุมชน + เกิดข้อผิดพลาด! กดปุ่มเพื่อส่งบันทึกไปยังเซิร์ฟเวอร์ของคุณ + ตกลง + ดูต่อครับ + การจัดอันดับนักวิจารณ์ + %.2f วินาที + ค่าเริ่มต้น + ลบ\" + เสียชีวิต + กำกับโดย %1$s + ผู้กำกับ + ปิดใช้งาน + เซิร์ฟเวอร์ที่ค้นพบ + ดาวน์โหลดและอัปเดต + กำลังดาวน์โหลด… + ใช้งาน + จบที่ %1$s + ป้อนที่อยู่ IP หรือ URL ของเซิร์ฟเวอร์ + ป้อนที่อยู่เซิร์ฟเวอร์ + ตอน + เกิดข้อผิดพลาดในการโหลดคอลเล็กชัน %1$s + ภายนอก + ชื่นชอบ + ขนาด + บังคับ + ประเภทเพลง + ไปซีรีย์ + ไปที่ + ซ่อนการควบคุมการเล่น + ซ่อนข้อมูลการแก้ไขข้อบกพร่อง + ซ่อน + หน้าหลัก + ทันที + บทนำ + #ABCDEFGHIJKLMNOPQRSTUVWXYZ + คลังเพลง + ข้อมูลใบอนุญาต + ทีวี สด + กำลังโหลด… + ทำเครื่องหมายว่าเล่นซีรีส์ทั้งหมดแล้วหรือไม่? + ทำเครื่องหมายซีรีส์ทั้งหมดว่ายังไม่ได้เล่น? + ทำเครื่องหมายว่ายังไม่ได้ดู + ทำเครื่องหมายว่าดูแล้ว + บิตเรตสูงสุด + เช่นนี้มากขึ้น + เพิ่มเติม + + ภาพยนตร์ + + ชื่อ + ถัดไปขึ้นมา + ไม่มีข้อมูล + ไม่มีผลลัพธ์ + ไม่พบเซิร์ฟเวอร์ + ไม่มีการบันทึกตามกำหนดเวลา + ไม่มีการอัปเดต + ไม่มี + คำบรรยายแบบบังคับเท่านั้น + เอาท์โตร + เส้นทาง + + ผู้คน + + จำนวนครั้งที่เล่น + เล่นจากที่นี่ + เล่น + แสดงข้อมูลการแก้ไขข้อผิดพลาดในการเล่น + ความเร็วในการเล่น + การเล่น + เพลย์ลิสต์ + เพลย์ลิสต์ + ดูตัวอย่าง + การตั้งค่าโปรไฟล์ผู้ใช้ + คิว + สรุป + ที่เพิ่งเพิ่ม %1$s + ที่เพิ่งเพิ่ม + บันทึกล่าสุด + ที่เพิ่งวางขาย + แนะนำ + โปรแกรมบันทึก + บันทึกซีรีส์ + ไม่เป็นที่ชื่นชอบ + เริ่มใหม่ + เล่นเกมต่อ + บันทึก + ค้นหาและดาวน์โหลด + ค้นหา + ค้นหา… + ค้นหาด้วยเสียง + กำลังเริ่มต้น + พูดเพื่อค้นหา + กำลังประมวลผล + กดกลับเพื่อยกเลิก + ข้อผิดพลาดในการบันทึกเสียง + ข้อผิดพลาดในการจดจำเสียง + ต้องได้รับอนุญาตจากไมโครโฟน + ข้อผิดพลาดของเครือข่าย + หมดเวลาเครือข่าย + ไม่มีคำพูดใดที่ได้รับการยอมรับ + การจดจำเสียงไม่ว่าง + ข้อผิดพลาดของเซิร์ฟเวอร์ + ไม่พบคำพูด + ข้อผิดพลาดที่ไม่รู้จัก + ไม่สามารถเริ่มการจดจำเสียงได้ + การจดจำเสียงหมดเวลา + ทำซ้ำ + เลือกเซิร์ฟเวอร์ + เลือกผู้ใช้งาน + แสดงข้อมูลการแก้ไขข้อบกพร่อง + แสดงต่อไป + แสดง + สุ่ม + ข้าม + บันทึกวันที่แล้ว + วันที่เพิ่มตอน + วันที่เล่น + วันที่เผยแพร่ + ชื่อ + สุ่ม + สตูดิโอ + ยืนยัน + การดาวน์โหลดใช้เวลานาน คุณอาจต้องเริ่มเล่นใหม่ + คำบรรยาย + คำบรรยาย + คำแนะนำ + สลับเซิร์ฟเวอร์ + สวิตช์ + เรตติ้งสูงสุด (ยังไม่มีคนดู) + ตัวอย่าง + + รถพ่วง + + กำหนดการ DVR + แนะนำ + ฤดูกาล + ฤดูกาล + + รายการทีวี + + อินเทอร์เฟซ + ไม่มีข้อมูล + มีอัพเดต + เวอร์ชัน + สเกลวิดีโอ + วิดีโอ + วิดีโอ + ชมสด + %1$d ปี + เล่นกับการแปลงรหัส + ข้อมูลสื่อ + แสดงนาฬิกา + ลำดับตอนที่ออกอากาศ + สร้างเพลย์ลิสต์ใหม่ + เพิ่มชื่อเพลย์ลิสต์ + หยุดเกมด้วยการคลิกเพียงครั้งเดียว + กดปุ่ม D-Pad ตรงกลางเพื่อหยุด/เล่น + ทำตัวเอียง + ฟ้อนต์ + พื้นหลัง + สำเร็จ + การให้คะแนนโดยผู้ปกครอง + รันไทม์ + บริการพิเศษ + + อื่นๆ + + + เบื้องหลัง + + + เพลงธีม + + + วิดีโอธีม + + + คลิป + + + ฉากที่ถูกลบ + + + สัมภาษณ์ + + + ซีน + + + ตัวอย่าง + + + สารคดี + + + กางเกงขาสั้น + + ชื่นชอบ %s + อุปกรณ์รองรับระบบเสียง AC3/Dolby Digital + การตั้งค่าขั้นสูง + UI ขั้นสูง + ธีมแอปพลิเคชัน + ตรวจสอบการอัปเดตโดยอัตโนมัติ + หน่วงเวลาก่อนเล่นเพลงถัดไป + เล่นอัตโนมัติถัดไป + ตรวจสอบอัปเดต + ใช้ได้กับซีรีส์โทรทัศน์เท่านั้น + รวมตัวเลือก \"ดูต่อ\" และ \"รายการถัดไป\" เข้าด้วยกัน + เล่นคำบรรยาย ASS โดยตรง + เล่นคำบรรยาย PGS โดยตรง + ลดระดับเสียงลงเป็นสเตอริโอเสมอ + ใช้โมดูลถอดรหัส FFmpeg + ขนาดเนื้อหาเริ่มต้น + ติดตั้งอัปเดต + เวอร์ชันที่ติดตั้ง + จำนวนรายการสูงสุดในแถวหน้าแรก + เลือกรายการเริ่มต้นที่จะแสดง รายการอื่นๆ จะถูกซ่อนไว้ + ปรับแต่งรายการเมนูนำทาง + คลิกเพื่อสลับหน้า + สลับหน้าเมนูนำทางเมื่อโฟกัส + การป้องกันการส่งผ่าน + เล่นเพลงธีม + การเล่นจะแทนที่ + จำแท็บที่เลือก + เปิดใช้งานการรับชมซ้ำในครั้งต่อไป + ค้นหาขั้นบันได + มีประโยชน์สำหรับการแก้ไขข้อผิดพลาด + ส่งบันทึกแอปไปยังเซิร์ฟเวอร์ปัจจุบัน + จะพยายามส่งไปยังเซิร์ฟเวอร์ที่เชื่อมต่อล่าสุด + ส่งรายงานข้อขัดข้อง + ตั้งค่า + ย้อนกลับเมื่อกลับมาเล่นต่อ + ข้ามกลับ + พฤติกรรมการข้ามโฆษณา + ข้ามไปข้างหน้า + ข้ามพฤติกรรมการแนะนำ + ข้ามพฤติกรรมตอนจบ + ข้ามพฤติกรรมการแสดงตัวอย่าง + ข้ามพฤติกรรมการสรุป + มีอัปเดตใหม่ + URL ที่ใช้ตรวจสอบการอัปเดตแอป + อัปเดต URL + ขนาดตัวอักษร + สีตัวอักษร + ความทึบของตัวอักษร + สไตล์ขอบ + สีขอบ + ความเข้มจางของพื้นหลัง + สไตล์พื้นหลัง + สไตล์คำบรรยาย + สีพื้นหลัง + รีเซ็ต + ตัวอักษรตัวหนา + การเล่นแบ็กเอนด์ + MPV: ใช้การถอดรหัสฮาร์ดแวร์ + ปิดใช้งานหากพบปัญหาโปรแกรมหยุดทำงาน + MPV ตัวเลือก + ตัวเลือก ExoPlayer + ข้ามส่วน + ข้ามโฆษณา + ข้ามการแสดงตัวอย่าง + ข้ามสรุป + ข้ามเอาท์โทร + ข้ามบทนำ + เล่นแล้ว + ตัวกรอง + ปี + ทศวรรษ + ลบ + Dolby Vision + ทิ้งการเปลี่ยนแปลง? + ขอบ + การบันทึกข้อมูลแบบละเอียด + ป้อนรหัส PIN + ลงชื่อเข้าใช้โดยอัตโนมัติ + เข้าสู่ระบบผ่านเซิร์ฟเวอร์ + กดตรงกลางเพื่อยืนยัน + ต้องใส่รหัส PIN สำหรับโปรไฟล์ + ยืนยันรหัส PIN + ไม่ถูกต้อง + รหัส PIN ต้องมีอย่างน้อย 4 ปุ่ม + จะลบ PIN + ขนาดแคชดิสก์รูปภาพ (เมกะไบต์) + ตัวเลือกการดู + คอลัมน์ + ระยะห่าง + อัตราส่วนภาพ + แสดงรายละเอียด + ประเภทรูปภาพ + นักแสดงและทีมงาน + ดารารับเชิญ + ขนาดขอบ + การสลับอัตราการรีเฟรช + อัตโนมัติ + ใช้ชื่อผู้ใช้/รหัสผ่าน + เข้าสู่ระบบ + ทั่วไป + คอนเทนเนอร์ + ชื่อเรื่อง + Codec + โปรไฟล์ + เลเวล + ความละเอียด + อะนามอร์ฟิก + อินเทอร์เลซ + อัตราเฟรม + ความคมชัดสี + ช่วงวิดีโอ + ประเภทช่วงวิดีโอ + พื้นที่สี + การถ่ายโอนสี + แม่สี + รูปแบบพิกเซล + เฟรมอ้างอิง + NAL + ภาษา + การจัดวาง + ช่อง + อัตราการสุ่มตัวอย่าง + AVC + ใช่ + ไม่ + SDR + HDR + HDR10 + HDR10+ + HLG + bit + Hz + แสดงชื่อเรื่อง + ทำซ้ำ + แสดงช่องโปรดก่อน + เรียงลำดับช่องตามลำดับการรับชมล่าสุด + โปรแกรมรหัสสี + คำบรรยายล่าช้า + สไตล์ฉากหลัง + การสลับความละเอียด + ท้องถิ่น + เล่นตัวอย่าง + ไม่มีรถพ่วง + ล้างตัวเลือกแทร็ก + DTS:X + DTS:HD + DTS:HD MA + TrueHD + DD + DD+ + DTS + Direct play Dolby Vision Profile 7 + ไม่สนใจการตรวจสอบความเข้ากันได้ของอุปกรณ์ + ค้นพบ + คำขอ + รอดำเนินการ + การผสานรวม Seerr + ลบเซิร์ฟเวอร์ Seerr + เพิ่มเซิร์ฟเวอร์ Seerr แล้ว + เชื่อมต่อด่วน + อนุญาตให้อุปกรณ์อื่นเข้าสู่ระบบบัญชีของคุณ + ป้อนรหัสการเชื่อมต่อด่วน + รหัสต้องมี 6 หลัก + อนุญาตอุปกรณ์สำเร็จแล้ว + รหัสผ่าน + ชื่อผู้ใช้ + URL + เทรนด์ + ภาพยนตร์ที่จะเกิดขึ้น + รายการทีวีที่จะออกอากาศเร็วๆ นี้ + ขอในความละเอียด 4K + AV1 software decoding + ขณะนี้ MPV เป็นโปรแกรมเล่นวิดีโอเริ่มต้น ยกเว้นวิดีโอ HDR\nคุณสามารถเปลี่ยนการตั้งค่านี้ได้ในเมนูการตั้งค่า + รูปแบบคำบรรยาย HDR + ความทึบของคำบรรยายภาพ + ความสว่าง + คอนทราสต์ + ท้องอิ่ม + เนื้อสี + แดง + เขียว + น้ำเงิน + เบลอ + บันทึกไว้ในอัลบั้ม + เล่นสไลด์โชว์ + หยุดสไลด์โชว์ + เมื่อเริ่มต้น + ไม่มีรูปถ่ายอีกต่อไป + หมุนไปทางซ้าย + หมุนไปทางขวา + ขยายเข้า + ซูมออก + ระยะเวลาการแสดงภาพสไลด์ + เล่นวิดีโอระหว่างการนำเสนอสไลด์ + ส่งบันทึกข้อมูลสื่อไปยังเซิร์ฟเวอร์ + ไม่มีขีดจำกัด + จำนวนวันสูงสุดใน Next Up + อัลบั้ม + ศิลปิน + เพลง + ไปยังศิลปิน + ขณะนี้กำลังเล่น + ผสมทันที + ไปยังอัลบัม + เพิ่มเข้าคิวเพลง + เพิ่มแถว + Dolby Atmos + MPV: ใช้ gpu-next + แก้ไข mpv.conf + ประเภทใน %1$s + เพิ่งเปิดตัวใน %1$s + ความสูง + นำไปใช้กับทุกแถว + ปรับแต่งหน้าแรก + แถวบ้าน + โหลดจากโปรไฟล์ผู้ใช้เซิร์ฟเวอร์ + ดาวน์โหลดจากโปรไฟล์ผู้ใช้คืนนี้ + โหลดจากเว็บไคลเอ็นต์ + ใช้ภาพชุด + เพิ่มแถวสำหรับ %1$s + ตั้งค่าทับบนเซิร์ฟเวอร์หรือไม่? + แทนที่การตั้งค่าในเครื่องหรือไม่? + สำหรับตอนต่างๆ + คำแนะนำสำหรับ %1$s + เพิ่มขนาดสำหรับการ์ดทุกใบ + ลดขนาดการ์ดทั้งหมด + ใช้ภาพขนาดย่อ + บันทึกการตั้งค่าแล้ว + แสดงค่าที่ตั้งไว้ล่วงหน้า + มีค่าที่ตั้งไว้ล่วงหน้าเพื่อจัดสไตล์ทุกแถวได้อย่างรวดเร็ว + เลือกแถวและรูปภาพบนหน้าแรก + เริ่มทีหลัง + เคลื่อนไหว + ระดับอายุสูงสุด + ไม่มีสูงสุด + สำหรับทุกเพศทุกวัย + อายุไม่เกิน %s + รักษาหน้าจอ + การตั้งค่าโปรแกรมรักษาหน้าจอ + เริ่มโปรแกรมรักษาหน้าจอ + ระยะเวลา + ภาพถ่าย + รวมประเภท + ควรแสดงภาพสินค้าประเภทใดบ้าง + Fit + ครอบตัด + สีพื้น + เติมความกว้าง + เติมความสูง + Wholphin ค่าเริ่มต้น + Wholphin คอมแพค + ภาพขนาดย่อของซีรี่ส์ + ภาพขนาดย่อของตอน + ต่ำสุด + ต่ำ + ปานกลาง + สูง + เต็มดาว + สีม่วง + สีส้ม + ฟ้าใส + ดำ + ไม่สนใจ + ข้ามโดยอัตโนมัติ + ขอให้ข้ามไป + ใช้ FFmpeg เฉพาะในกรณีที่ไม่มีตัวถอดรหัสในตัวเท่านั้น + ควรเลือกใช้ FFmpeg มากกว่าตัวถอดรหัสในตัว + ห้ามใช้ตัวถอดรหัส FFmpeg เด็ดขาด + เมื่อการเล่นจบลง + ระหว่างเครดิตท้ายเรื่อง/ฉากจบ + ขาว + สีเทาอ่อน + สีเทาเข้ม + เหลือง + น้ำเงินเขียว + บานเย็น + โครงร่าง + เงา + ห่อ + ชนิดบรรจุกล่อง + เลือกใช้ MPV + ใช้ ExoPlayer สำหรับการเล่นวิดีโอ HDR + โปสเตอร์ (2:3) + 16:9 + 4:3 + สี่เหลี่ยมจัตุรัส (1:1) + หลัก + นิ้วหัวแม่มือ + ภาพที่มีสีแบบไดนามิก + รูปภาพเท่านั้น + ป้อน URL และ API Key + คีย์ API + เข้าสู่ระบบเซิร์ฟเวอร์ Seerr + Jellyfin ผู้ใช้ + ผู้ใช้ท้องถิ่น + ค้นหาและดาวน์โหลดคำบรรยาย + ไม่พบคำบรรยายระยะไกล + ปัจจุบัน + ใช้โปรแกรมรักษาหน้าจอในแอป + คุณแน่ใจหรือไม่ว่าต้องการลบรายการนี้? + แสดงตัวเลือกการจัดการสื่อ + ค้นหา %s + ผู้ดำเนินการ + ผู้แต่ง + นักเขียน + ดารารับเชิญ + ผู้ผลิต + คอนดักเตอร์ + นักแต่งเพลง + ผู้จัด + วิศวกร + มิกเซอร์ + ผู้สร้าง + ศิลปิน + อัลบัมศิลปิน + อัลบัม + เพลงฮิต + เล่นถัดไป + มิวสิควิดีโอ + เนื้อเพลง + ซ่อนเนื้อเพลง + แสดงเนื้อเพลง + เพลงมีเนื้อเพลง + เอาออกจากคิว + แสดงรูปปกอัลบัม + แสดงวิชวลไลเซอร์ + แสดงฉากหลัง + เล่นเป็น? + การแสดงภาพเสียงที่กำลังเล่นอยู่จำเป็นต้องได้รับอนุญาตในการบันทึกเสียง + ต่อไป + เลือกทั้งหมด + แยกประเภท + ควรแสดงโลโก้แทนชื่อเรื่อง + diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index ede526c0..e1f87f9e 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -585,4 +585,14 @@ Nasıl çalınsın? Çalan sesi görselleştirmek için ses kaydetme izni gerekiyor. Devam et + Farklı türler + Başlık yerine logo göster + Wholphin %s sürümüne güncellendi + Daha fazla göster + Dizileri Keşfet + Filmleri Keşfet + İzlemeye devam et listesinden kaldır + Sıradaki bölümlerden kaldır + Sıradaki bölümlerden kaldırılan dizileri göster + Stüdyolar: %1$s diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index de4c04c7..921f46c8 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -559,4 +559,13 @@ 可视化当前播放的音频需要录音权限。 继续 分开类型 + 优先显示标题图标 + Wholphin 已更新至 %s + 查看更多 + 发现电视节目 + 发现电影 + 从继续观看中移除 + 从即将播放中移除剧集 + 查看已从即将播放中移除的剧集 + %1$s 制片公司 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index ecb15f67..35d3502b 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -199,7 +199,7 @@ 移出我的最愛 繼續播放 - 製片公司 + 製作公司 高評分未觀看 錄影排程 電視劇 @@ -560,4 +560,12 @@ 即時混播 依類型分開顯示 優先顯示圖像標題 + Wholphin 已更新至 %s + 查看更多 + 探索電視劇 + 探索電影 + 從繼續觀看中移除 + 從接下來播放中移除劇集 + 查看從接下來播放中移除的劇集 + %1$s 製作公司 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f46d9654..df0d6731 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -aboutLibraries = "13.2.1" +aboutLibraries = "14.0.0" acra = "5.13.1" agp = "9.0.1" auto-service = "1.1.1" @@ -15,7 +15,7 @@ appcompat = "1.7.1" composeBom = "2026.03.01" mockk = "1.14.9" robolectric = "4.16.1" -multiplatformMarkdownRenderer = "0.39.2" +multiplatformMarkdownRenderer = "0.40.2" okhttpBom = "5.3.2" programguide = "1.6.0" slf4j2Timber = "1.2" @@ -45,7 +45,7 @@ kotlinxCoroutinesTest = "1.10.2" coreTesting = "2.2.0" openapi-generator = "7.21.0" runner = "1.7.0" -wholphin-extensions = "0.1.0" +wholphin-extensions = "0.1.1" [libraries] wholphin-extensions-mpv = { module = "com.github.damontecres.wholphin.mpv:wholphin-mpv", version.ref = "wholphin-extensions" } diff --git a/renovate.json b/renovate.json index 03e6a404..bba12817 100644 --- a/renovate.json +++ b/renovate.json @@ -23,7 +23,8 @@ "groupName": "Jellyfin SDK", "matchPackageNames": [ "org.jellyfin.sdk:**" - ] + ], + "enabled": false }, { "groupName": "AGP", @@ -36,6 +37,13 @@ "matchPackageNames": [ "org.jetbrains.kotlin**" ] + }, + { + "groupName": "Internal dependencies", + "matchPackageNames": [ + "com.github.damontecres.wholphin**" + ], + "enabled": false } ] }