From c968c07d0bd22e19aadae8360a7a0e6ae0b31493 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 16:12:10 -0400 Subject: [PATCH 01/45] fix(deps): update dependencies to v0.40.2 (#1202) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 49b8b45a..abfef091 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -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" From 6aa28e22da648719abc34f06fcadeb5ad5732f8d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 16:12:39 -0400 Subject: [PATCH 02/45] fix(deps): update dependencies to v14 (major) (#1208) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index abfef091..aaaa95fa 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" From ff37eff27d5873a35414cc3d51abef07aec9d036 Mon Sep 17 00:00:00 2001 From: Ray <154766448+damontecres@users.noreply.github.com> Date: Thu, 9 Apr 2026 14:42:30 -0400 Subject: [PATCH 03/45] Update rennovate settings (#1217) ## Description Ignore dependencies from `wholphin-extensions` & the Jellyfin SDK. These dependencies should be updated manually. ### Related issues N/A ### Testing N/A ## Screenshots N/A ## AI or LLM usage None --- renovate.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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 } ] } From 97e10f57ca98cd382e2eaa41a7c74d0789e1e943 Mon Sep 17 00:00:00 2001 From: Ray <154766448+damontecres@users.noreply.github.com> Date: Fri, 10 Apr 2026 14:56:43 -0400 Subject: [PATCH 04/45] Few UI improvments & fixes (#1229) ## Description - Add indicator to mark the chosen version on the choose version dialog - Add an option for album's context menu to add it to the now playing queue - Fix how season cards refresh on the series detail page so the images don't glitch ### Related issues Related to #1220 ### Testing Emulator mostly ## Screenshots The indicator shows which version will play, whether explicitly chosen by the user or implicitly picked by Wholphin. ![choose_version_indicator Large](https://github.com/user-attachments/assets/7440ee1a-b9eb-4b34-ac39-86206c2eca09) ## AI or LLM usage None --- .../wholphin/services/MusicService.kt | 1 + .../ui/components/CollectionFolderGrid.kt | 11 ++++ .../wholphin/ui/components/Dialogs.kt | 7 ++ .../ui/components/RecommendedContent.kt | 13 ++++ .../ui/components/RecommendedMovie.kt | 6 +- .../ui/components/RecommendedMusic.kt | 6 +- .../ui/components/RecommendedTvShow.kt | 6 +- .../wholphin/ui/detail/DetailUtils.kt | 12 ++++ .../wholphin/ui/detail/PlaylistDetails.kt | 1 + .../ui/detail/collection/CollectionDetails.kt | 2 + .../detail/collection/CollectionViewModel.kt | 8 +++ .../ui/detail/episode/EpisodeDetails.kt | 1 + .../wholphin/ui/detail/movie/MovieDetails.kt | 1 + .../ui/detail/music/MusicViewModel.kt | 65 ++++++++++--------- .../ui/detail/series/SeriesOverview.kt | 1 + .../ui/detail/series/SeriesViewModel.kt | 3 +- .../damontecres/wholphin/util/RequestPager.kt | 7 ++ 17 files changed, 117 insertions(+), 34 deletions(-) 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/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, From 0f165d1dbf5e47a06756e2177ff443c204345b81 Mon Sep 17 00:00:00 2001 From: opakholis Date: Tue, 31 Mar 2026 07:31:39 +0000 Subject: [PATCH 05/45] Translated using Weblate (Indonesian) Currently translated at 95.8% (508 of 530 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/id/ --- app/src/main/res/values-in/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index ae739f25..6bf057c9 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -534,4 +534,8 @@ Layar penuh Lebar penuh Tinggi penuh + Utamakan logo untuk judul + Album + Artis + Lagu From 32258407df9e303fa4d97638a1e43226c2d35e12 Mon Sep 17 00:00:00 2001 From: arcker95 Date: Tue, 31 Mar 2026 14:21:39 +0000 Subject: [PATCH 06/45] Translated using Weblate (Italian) Currently translated at 100.0% (530 of 530 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/it/ --- app/src/main/res/values-it/strings.xml | 30 ++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 604a9ed5..e487bde1 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,30 @@ 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 From a29cdae0a4bed4063deb0927a3524622edcf90f5 Mon Sep 17 00:00:00 2001 From: lednurb Date: Tue, 31 Mar 2026 20:45:19 +0000 Subject: [PATCH 07/45] Translated using Weblate (Dutch) Currently translated at 74.3% (394 of 530 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/nl/ --- app/src/main/res/values-nl/strings.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 1afae518..6878d1a0 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 @@ -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 @@ -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? @@ -401,7 +401,7 @@ Verwachte series Verzoek 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 From bfbcfe9678f2ec289eadf2c5f6759f4335298249 Mon Sep 17 00:00:00 2001 From: Chosnuk Date: Tue, 31 Mar 2026 21:12:36 +0000 Subject: [PATCH 08/45] Translated using Weblate (Polish) Currently translated at 48.8% (259 of 530 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pl/ --- app/src/main/res/values-pl/strings.xml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 53cd49fc..bcdae23a 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,18 @@ 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 From 97690bdb7ba4058be25c98a24bd62e49c6e2b980 Mon Sep 17 00:00:00 2001 From: Outbreak2096 Date: Wed, 1 Apr 2026 04:35:54 +0000 Subject: [PATCH 09/45] Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (530 of 530 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/ --- app/src/main/res/values-zh-rCN/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index de4c04c7..341fb704 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -559,4 +559,5 @@ 可视化当前播放的音频需要录音权限。 继续 分开类型 + 优先显示标题图标 From 36d2926ff79375c8eac231f8c575c2a17997fbce Mon Sep 17 00:00:00 2001 From: Pwnisher Date: Tue, 31 Mar 2026 07:30:53 +0000 Subject: [PATCH 10/45] Translated using Weblate (Romanian) Currently translated at 63.9% (339 of 530 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/ro/ --- app/src/main/res/values-ro/strings.xml | 111 ++++++++++++++++++++++--- 1 file changed, 101 insertions(+), 10 deletions(-) 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 From ffb7293368519f8b9924aed93363250924f78719 Mon Sep 17 00:00:00 2001 From: lednurb Date: Wed, 1 Apr 2026 16:12:42 +0000 Subject: [PATCH 11/45] Translated using Weblate (Dutch) Currently translated at 91.1% (483 of 530 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/nl/ --- app/src/main/res/values-nl/strings.xml | 100 +++++++++++++++++++++++-- 1 file changed, 95 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 6878d1a0..b9ee6cd2 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -23,7 +23,7 @@ Bevestigen Verder kijken Beoordeling (recensie) - %.1f seconden + %.2f seconden Standaard Verwijderen Overleden @@ -115,7 +115,7 @@ 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 @@ -123,8 +123,8 @@ Best beoordeeld, niet-bekeken Trailer - Trailers - + Trailer + Trailers DVR-schema Gids @@ -311,7 +311,7 @@ Gastrollen Randbreedte - Automatische ververssnelheid toepassen + Beeldfrequentie omschakelen Automatisch Gebruikersnaam/wachtwoord gebruiken Inloggen @@ -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. From d055ba4ab4421ea05f1fa245f7ce0641389ba2fb Mon Sep 17 00:00:00 2001 From: Chosnuk Date: Wed, 1 Apr 2026 13:30:57 +0000 Subject: [PATCH 12/45] Translated using Weblate (Polish) Currently translated at 49.8% (264 of 530 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pl/ --- app/src/main/res/values-pl/strings.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index bcdae23a..d1c14e19 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -312,4 +312,9 @@ Błąd rozpoznawania mowy Wymagane uprawnienia mikrofonu Błąd sieci + Błąd serwera + Ponów + Wideo + Filmy + Oglądanie na żywo From 81a0ae39f0881b7b3e736d837b52977e13b929c4 Mon Sep 17 00:00:00 2001 From: idezentas Date: Wed, 1 Apr 2026 08:43:59 +0000 Subject: [PATCH 13/45] Translated using Weblate (Turkish) Currently translated at 100.0% (530 of 530 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/tr/ --- app/src/main/res/values-tr/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index ede526c0..4667c806 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -585,4 +585,6 @@ 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 From 9e2df5660af4f5c5bce06634064960744096a108 Mon Sep 17 00:00:00 2001 From: jbrek Date: Thu, 2 Apr 2026 14:06:28 +0000 Subject: [PATCH 14/45] Added translation using Weblate (Thai) --- app/src/main/res/values-th/strings.xml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 app/src/main/res/values-th/strings.xml 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..55344e51 --- /dev/null +++ b/app/src/main/res/values-th/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file From ac0e42320fac7fdbe9cc7fe8082ac0e87ee71aeb Mon Sep 17 00:00:00 2001 From: opakholis Date: Fri, 3 Apr 2026 04:00:14 +0000 Subject: [PATCH 15/45] Translated using Weblate (Indonesian) Currently translated at 100.0% (530 of 530 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/id/ --- app/src/main/res/values-in/strings.xml | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 6bf057c9..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 @@ -538,4 +538,26 @@ 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 From 278d2cc3e6fdef4ed2a600fc72c04d801db4c78e Mon Sep 17 00:00:00 2001 From: jbrek Date: Fri, 3 Apr 2026 07:57:37 +0000 Subject: [PATCH 16/45] Translated using Weblate (Thai) Currently translated at 29.2% (155 of 530 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/th/ --- app/src/main/res/values-th/strings.xml | 262 ++++++++++++++++++++++++- 1 file changed, 261 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 55344e51..0eac48c2 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -1,3 +1,263 @@ - \ No newline at end of file + เกี่ยวกับแอปนี้ + การบันทึกที่ใช้งานอยู่ + ชื่นชอบ + เพิ่มเซิร์ฟเวอร์ + เพิ่มผู้ใช้ + เสียง + บ้านเกิด + บิตเรท + เกิด + ยกเลิกการบันทึก + ยกเลิกการบันทึกซีรีส์ + ยกเลิก + ฉาก + เลือก %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 + From 7f1ccc6146dcfedf6a176f020c3d9e6ddde0c66f Mon Sep 17 00:00:00 2001 From: jbrek Date: Fri, 3 Apr 2026 14:35:37 +0000 Subject: [PATCH 17/45] Translated using Weblate (Thai) Currently translated at 98.8% (524 of 530 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/th/ --- app/src/main/res/values-th/strings.xml | 291 +++++++++++++++++++++++++ 1 file changed, 291 insertions(+) diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 0eac48c2..8e59e73a 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -260,4 +260,295 @@ มีอัปเดตใหม่ 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 + ผู้ดำเนินการ + ผู้แต่ง + นักเขียน + ดารารับเชิญ + ผู้ผลิต + คอนดักเตอร์ + นักแต่งเพลง + ผู้จัด + วิศวกร + มิกเซอร์ + ผู้สร้าง + ศิลปิน + อัลบัมศิลปิน + อัลบัม + เพลงฮิต + เล่นถัดไป + มิวสิควิดีโอ + เนื้อเพลง + ซ่อนเนื้อเพลง + แสดงเนื้อเพลง + เพลงมีเนื้อเพลง + เอาออกจากคิว + แสดงรูปปกอัลบัม + แสดงวิชวลไลเซอร์ + แสดงฉากหลัง + เล่นเป็น? + การแสดงภาพเสียงที่กำลังเล่นอยู่จำเป็นต้องได้รับอนุญาตในการบันทึกเสียง + ต่อไป + เลือกทั้งหมด + แยกประเภท + ควรแสดงโลโก้แทนชื่อเรื่อง + + + From f53b0dd507c560459fe4229ca4ccfa31d8ee1528 Mon Sep 17 00:00:00 2001 From: Codeberg Translate Date: Fri, 3 Apr 2026 16:45:09 +0000 Subject: [PATCH 18/45] Update translation files Updated by "Remove blank strings" add-on in Weblate. Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/ --- app/src/main/res/values-th/strings.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 8e59e73a..42948ac7 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -548,7 +548,4 @@ เลือกทั้งหมด แยกประเภท ควรแสดงโลโก้แทนชื่อเรื่อง - - - From cae9f8d25d0e885c3a0d5027b25f4e0dfc2f76ec Mon Sep 17 00:00:00 2001 From: danpergal84 Date: Fri, 3 Apr 2026 21:36:52 +0000 Subject: [PATCH 19/45] Translated using Weblate (Spanish) Currently translated at 100.0% (531 of 531 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/es/ --- app/src/main/res/values-es/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 13147e59..0147bc55 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -596,4 +596,5 @@ Eliminar de la cola Separar por tipos Preferir logotipos para los títulos + Wholphin se ha actualizado a la versión %s From a442fd21b876fe60ebe563cd979becf6776ff0ba Mon Sep 17 00:00:00 2001 From: arcker95 Date: Sat, 4 Apr 2026 14:57:02 +0000 Subject: [PATCH 20/45] Translated using Weblate (Italian) Currently translated at 100.0% (531 of 531 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/it/ --- app/src/main/res/values-it/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index e487bde1..88a3da3c 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -596,4 +596,5 @@ Continua Tipi separati Preferisci mostrare i loghi per i titoli + Wholphin aggiornato a %s From d4f1de461dc0f469e2193b493f1743ce1dbbedaa Mon Sep 17 00:00:00 2001 From: lednurb Date: Fri, 3 Apr 2026 20:45:03 +0000 Subject: [PATCH 21/45] Translated using Weblate (Dutch) Currently translated at 90.9% (483 of 531 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/nl/ --- app/src/main/res/values-nl/strings.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index b9ee6cd2..3054e981 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -88,7 +88,7 @@ Onlangs toegevoegd aan %1$s Onlangs toegevoegd Onlangs opgenomen - Onlangs uitgebracht + Onlangs verschenen Aanbevolen Programma opnemen Serie opnemen @@ -109,7 +109,7 @@ Toegevoegd Toegevoegd (aflevering) Bekeken - Uitgebracht + Verschenen Naam Willekeurig Studio\'s @@ -120,7 +120,7 @@ Suggesties Andere server kiezen Kiezen - Best beoordeeld, niet-bekeken + Best beoordeeld niet-bekeken Trailer Trailer @@ -130,7 +130,7 @@ Gids Seizoen Seizoenen - Afleveringen + Series Vormgeving Onbekend Updates @@ -388,7 +388,7 @@ Muziekvideos Max. aantal dagen in Volgende Wordt nu afgespeeld - Aanvragen + Aangevraagd Trailer afspelen Geen servers gevonden Alleen geforceerde ondertiteling @@ -399,7 +399,7 @@ Wachtwoord Verwachte films Verwachte series - Verzoek in 4K + Aanvragen in 4K Helderheid Media-info log naar server Resolutie schakelen From 664e7edb12af8480c91686295bfd6790b1736087 Mon Sep 17 00:00:00 2001 From: idezentas Date: Fri, 3 Apr 2026 23:23:53 +0000 Subject: [PATCH 22/45] Translated using Weblate (Turkish) Currently translated at 100.0% (531 of 531 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/tr/ --- app/src/main/res/values-tr/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 4667c806..07d2cb02 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -587,4 +587,5 @@ Devam et Farklı türler Başlık yerine logo göster + Wholphin %s sürümüne güncellendi From 90ef9fda2edc62914ef972637da9055734f8c526 Mon Sep 17 00:00:00 2001 From: North-DaCoder Date: Mon, 6 Apr 2026 07:15:57 +0000 Subject: [PATCH 23/45] Translated using Weblate (German) Currently translated at 100.0% (531 of 531 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/ --- app/src/main/res/values-de/strings.xml | 1 + 1 file changed, 1 insertion(+) 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 From 1e1af85196d176119e6760475d157b5bb868bf7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Sun, 5 Apr 2026 13:19:05 +0000 Subject: [PATCH 24/45] Translated using Weblate (Estonian) Currently translated at 100.0% (531 of 531 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/et/ --- app/src/main/res/values-et/strings.xml | 27 ++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index eab60eff..7bb9f326 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -552,4 +552,31 @@ 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 From 9674f8e8b50c23fa8deff7e713d866e0446157cc Mon Sep 17 00:00:00 2001 From: lednurb Date: Sun, 5 Apr 2026 19:23:25 +0000 Subject: [PATCH 25/45] Translated using Weblate (Dutch) Currently translated at 90.9% (483 of 531 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/nl/ --- app/src/main/res/values-nl/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 3054e981..647c32c6 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -388,7 +388,7 @@ Muziekvideos Max. aantal dagen in Volgende Wordt nu afgespeeld - Aangevraagd + Aanvragen Trailer afspelen Geen servers gevonden Alleen geforceerde ondertiteling From 4e63f528fae0908717141c1968ed0df7d0545033 Mon Sep 17 00:00:00 2001 From: SimonHung Date: Mon, 6 Apr 2026 17:48:23 +0000 Subject: [PATCH 26/45] Translated using Weblate (Chinese (Traditional Han script)) Currently translated at 100.0% (534 of 534 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hant/ --- app/src/main/res/values-zh-rTW/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index ecb15f67..2c7c1554 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -560,4 +560,8 @@ 即時混播 依類型分開顯示 優先顯示圖像標題 + Wholphin 已更新至 %s + 查看更多 + 探索電視劇 + 探索電影 From a700b370078bca172d7e281d43df235409232f3d Mon Sep 17 00:00:00 2001 From: SimonHung Date: Mon, 6 Apr 2026 17:47:23 +0000 Subject: [PATCH 27/45] Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 99.2% (530 of 534 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/ --- app/src/main/res/values-zh-rCN/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 341fb704..71a78f7b 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -560,4 +560,6 @@ 继续 分开类型 优先显示标题图标 + + From c2b620f15afc5291f7eb1728e56f344f84062740 Mon Sep 17 00:00:00 2001 From: Codeberg Translate Date: Mon, 6 Apr 2026 19:24:49 +0000 Subject: [PATCH 28/45] Update translation files Updated by "Remove blank strings" add-on in Weblate. Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/ --- app/src/main/res/values-zh-rCN/strings.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 71a78f7b..341fb704 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -560,6 +560,4 @@ 继续 分开类型 优先显示标题图标 - - From c539ba1bf6023d5b5e1e47fd9a41138869f06e84 Mon Sep 17 00:00:00 2001 From: danpergal84 Date: Mon, 6 Apr 2026 22:55:01 +0000 Subject: [PATCH 29/45] Translated using Weblate (Spanish) Currently translated at 100.0% (534 of 534 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/es/ --- app/src/main/res/values-es/strings.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 0147bc55..ee2848fb 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 @@ -597,4 +597,7 @@ 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 From cadbf04b4f79e8ed227402224727f7e49d337cbd Mon Sep 17 00:00:00 2001 From: Alan700 Date: Tue, 7 Apr 2026 11:46:22 +0000 Subject: [PATCH 30/45] Translated using Weblate (French) Currently translated at 100.0% (534 of 534 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/fr/ --- app/src/main/res/values-fr/strings.xml | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 05968332..96bf1756 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -570,4 +570,34 @@ Afficher les options de gestion des médias Recherche %s Tout sélectionner + Albums + Artistes + Chansons + Aller à 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 From a5a0d3f34904960fd41a54ee04101ca47d379176 Mon Sep 17 00:00:00 2001 From: Outbreak2096 Date: Tue, 7 Apr 2026 00:20:32 +0000 Subject: [PATCH 31/45] Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (534 of 534 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/ --- app/src/main/res/values-zh-rCN/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 341fb704..d2871763 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -560,4 +560,8 @@ 继续 分开类型 优先显示标题图标 + Wholphin 已更新至 %s + 查看更多 + 发现电视节目 + 发现电影 From a8a906b81fe24c8bee009024976a3dc55146ca27 Mon Sep 17 00:00:00 2001 From: Alan700 Date: Tue, 7 Apr 2026 12:17:24 +0000 Subject: [PATCH 32/45] Translated using Weblate (French) Currently translated at 100.0% (534 of 534 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/fr/ --- app/src/main/res/values-fr/strings.xml | 36 +++++++++++++------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 96bf1756..970cdf16 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,25 +545,25 @@ Miniature Image avec couleur dynamique Image uniquement - Entrez 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 ? @@ -573,7 +573,7 @@ Albums Artistes Chansons - Aller à l\'artiste + Voir l\'artiste Lecture en cours Mix instantané Voir l\'album From 7718eca0c42497fc31a6a26666b087417eed19a8 Mon Sep 17 00:00:00 2001 From: idezentas Date: Tue, 7 Apr 2026 14:28:27 +0000 Subject: [PATCH 33/45] Translated using Weblate (Turkish) Currently translated at 100.0% (534 of 534 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/tr/ --- app/src/main/res/values-tr/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 07d2cb02..9425e4b4 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -588,4 +588,7 @@ 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 From e18a4ebfe2dcf3da38fa79e97c8b16521b9004fc Mon Sep 17 00:00:00 2001 From: danpergal84 Date: Wed, 8 Apr 2026 05:20:01 +0000 Subject: [PATCH 34/45] Translated using Weblate (Spanish) Currently translated at 100.0% (538 of 538 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/es/ --- app/src/main/res/values-es/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index ee2848fb..fa312ec6 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -600,4 +600,8 @@ Ver más Descubrir series Descubrir películas + Eliminar de \"Continuar viendo\" + Eliminar de \"Siguiente\" + Ver series eliminadas de \"Siguiente\" + Estudios en %1$s From 9a4bf6eaa8fe7d1bd748c9bd116b29b16d8365cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Wed, 8 Apr 2026 06:34:47 +0000 Subject: [PATCH 35/45] Translated using Weblate (Estonian) Currently translated at 100.0% (538 of 538 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/et/ --- app/src/main/res/values-et/strings.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 7bb9f326..3d535faf 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -579,4 +579,11 @@ 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 From 1f7b7c8b24c29c69e91f75d4c31c40622d318314 Mon Sep 17 00:00:00 2001 From: Chosnuk Date: Wed, 8 Apr 2026 13:40:45 +0000 Subject: [PATCH 36/45] Translated using Weblate (Polish) Currently translated at 55.0% (296 of 538 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pl/ --- app/src/main/res/values-pl/strings.xml | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index d1c14e19..c096e2ba 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -317,4 +317,36 @@ 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 From 89dc42871e393918a2d267fc8a174c0f021516c3 Mon Sep 17 00:00:00 2001 From: Outbreak2096 Date: Wed, 8 Apr 2026 00:13:11 +0000 Subject: [PATCH 37/45] Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (538 of 538 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/ --- app/src/main/res/values-zh-rCN/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index d2871763..921f46c8 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -564,4 +564,8 @@ 查看更多 发现电视节目 发现电影 + 从继续观看中移除 + 从即将播放中移除剧集 + 查看已从即将播放中移除的剧集 + %1$s 制片公司 From acf4eab1d92e9e8e1d3d31f71962890316d30483 Mon Sep 17 00:00:00 2001 From: idezentas Date: Thu, 9 Apr 2026 22:01:42 +0000 Subject: [PATCH 38/45] Translated using Weblate (Turkish) Currently translated at 100.0% (538 of 538 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/tr/ --- app/src/main/res/values-tr/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 9425e4b4..e1f87f9e 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -591,4 +591,8 @@ 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 From 2a9f8a27af7c3df1dfad089467f510748dbe6406 Mon Sep 17 00:00:00 2001 From: Damontecres Date: Sat, 11 Apr 2026 13:40:20 -0400 Subject: [PATCH 39/45] Fix formatting --- app/src/main/res/values-fr/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 970cdf16..894c286c 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -545,7 +545,7 @@ Miniature Image avec couleur dynamique Image uniquement - + Saisir l\'URL et la clé API Clé API Se connecter au serveur Seerr Utilisateur Jellyfin From 287a7b0c69f81032520df007cb1d2f856514d122 Mon Sep 17 00:00:00 2001 From: Ray <154766448+damontecres@users.noreply.github.com> Date: Sat, 11 Apr 2026 19:30:23 -0400 Subject: [PATCH 40/45] Create FireTV specific app variant (#1230) ## Description Adds a variant of Wholphin targeted for the Amazon Fire TV App store. ### Related issues See #1192 for more details ### Testing Emulator ## Screenshots N/A ## AI or LLM usage None --- .github/workflows/release.yml | 2 +- app/build.gradle.kts | 27 ++++++- .../wholphin/preferences/AppPreference.kt | 11 ++- .../damontecres/wholphin/services/SeerrApi.kt | 3 +- .../services/SeerrServerRepository.kt | 75 ++++++++++--------- .../wholphin/services/UpdateChecker.kt | 2 +- 6 files changed, 73 insertions(+), 47 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5a7de9cb..f144385e 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: | diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 80a6b2e4..3504f887 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 e88c1ffb..26e8e623 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 @@ -1085,10 +1086,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/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 } /** From 9037527d2ac2119caf5a7e49e85a7124fdbf7270 Mon Sep 17 00:00:00 2001 From: SimonHung Date: Sat, 11 Apr 2026 19:05:57 +0000 Subject: [PATCH 41/45] Translated using Weblate (Chinese (Traditional Han script)) Currently translated at 100.0% (538 of 538 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hant/ --- app/src/main/res/values-zh-rTW/strings.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 2c7c1554..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 @@ 移出我的最愛 繼續播放 - 製片公司 + 製作公司 高評分未觀看 錄影排程 電視劇 @@ -564,4 +564,8 @@ 查看更多 探索電視劇 探索電影 + 從繼續觀看中移除 + 從接下來播放中移除劇集 + 查看從接下來播放中移除的劇集 + %1$s 製作公司 From 24ed1bb18257894a134e328abdd74892e4377fa7 Mon Sep 17 00:00:00 2001 From: Damontecres Date: Sun, 12 Apr 2026 08:44:17 -0400 Subject: [PATCH 42/45] Release v0.6.1 From 57e954f502065f43ab06b7ee3fcc309cb02942c0 Mon Sep 17 00:00:00 2001 From: Damontecres Date: Sun, 12 Apr 2026 09:00:57 -0400 Subject: [PATCH 43/45] Fix build script --- .github/workflows/main.yml | 2 -- .github/workflows/release.yml | 5 ----- 2 files changed, 7 deletions(-) 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 f144385e..fb9d21f1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -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:" From c923afde8da231053a6d0e7582b5f36c12f7c263 Mon Sep 17 00:00:00 2001 From: Ray <154766448+damontecres@users.noreply.github.com> Date: Mon, 13 Apr 2026 13:50:24 -0400 Subject: [PATCH 44/45] Use wholphin-extensions v0.1.1 (#1241) ## Description Updates to use the latest wholphin-extensions which includes https://github.com/damontecres/wholphin-extensions/pull/2 The crash in #1239 occurs if "AV1 software decoding" is enabled and seemingly only if the app was installed via APK, including app stores. ### Related issues Fixes #1239 ### Testing Emulator, nvidia shield ## Screenshots N/A ## AI or LLM usage None --- DEVELOPMENT.md | 2 ++ gradle/libs.versions.toml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) 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/gradle/libs.versions.toml b/gradle/libs.versions.toml index aaaa95fa..ad6fa059 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -44,7 +44,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" } From 923a3713aff9b9540e219d5d1d0b9bee8c378342 Mon Sep 17 00:00:00 2001 From: Damontecres Date: Mon, 13 Apr 2026 19:20:13 -0400 Subject: [PATCH 45/45] Release v0.6.2