From e7ed173692c14666424d2dee582fdd3882e80d1f Mon Sep 17 00:00:00 2001 From: Justin Caveda Date: Thu, 29 Jan 2026 16:11:13 -0600 Subject: [PATCH 01/23] Fix(player): add exoplayer fallback for all 4k playback when MPV software decoding is enabled (#761) ## Description Updates the logic in the Prefer MPV setting to prevent performance issues when software decoding is selected. When the MPV backend is configured to use software decoding, the app will now automatically fallback to ExoPlayer for 4K content. Most Android TV devices cannot smoothly render 4K video via software decoding, so falling back to Exoplayer for this content makes sense in most cases when using the software renderer. This mirrors the existing fallback mechanism used for HDR content. ### Related issues N/A ### Screenshots N/A ### AI/LLM usage None --------- Co-authored-by: Ray <154766448+damontecres@users.noreply.github.com> --- .../wholphin/ui/playback/PlaybackViewModel.kt | 14 ++++++++++---- .../wholphin/ui/playback/SimpleMediaStream.kt | 1 + 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackViewModel.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackViewModel.kt index 1951d1d9..931ac551 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackViewModel.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackViewModel.kt @@ -207,7 +207,11 @@ class PlaybackViewModel jobs.forEach { it.cancel() } } - private suspend fun createPlayer(isHdr: Boolean) { + private suspend fun createPlayer( + isHdr: Boolean, + is4k: Boolean, + ) { + val softwareDecoding = !preferences.appPreferences.playbackPreferences.mpvOptions.enableHardwareDecoding val playerBackend = when (preferences.appPreferences.playbackPreferences.playerBackend) { PlayerBackend.UNRECOGNIZED, @@ -216,7 +220,7 @@ class PlaybackViewModel PlayerBackend.MPV -> PlayerBackend.MPV - PlayerBackend.PREFER_MPV -> if (isHdr) PlayerBackend.EXO_PLAYER else PlayerBackend.MPV + PlayerBackend.PREFER_MPV -> if (isHdr || (is4k && softwareDecoding)) PlayerBackend.EXO_PLAYER else PlayerBackend.MPV } Timber.d("Selected backend: %s", playerBackend) @@ -428,11 +432,13 @@ class PlaybackViewModel val isHdr = it.videoRange == VideoRange.HDR || (it.videoRangeType != VideoRangeType.SDR && it.videoRangeType != VideoRangeType.UNKNOWN) - SimpleVideoStream(it.index, isHdr) + // Often times 4k movies have a wider aspect ratio so the height is lower even though the width is still 3840 + val is4k = (it.width ?: 0) > 2560 || (it.height ?: 0) > 1440 + SimpleVideoStream(it.index, isHdr, is4k) } // Create the correct player for the media - createPlayer(videoStream?.hdr == true) + createPlayer(videoStream?.hdr == true, videoStream?.is4k == true) val subtitleStreams = mediaSource.mediaStreams diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/playback/SimpleMediaStream.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/playback/SimpleMediaStream.kt index f63e91b2..6444a268 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/playback/SimpleMediaStream.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/playback/SimpleMediaStream.kt @@ -27,4 +27,5 @@ data class SimpleMediaStream( data class SimpleVideoStream( val index: Int, val hdr: Boolean, + val is4k: Boolean, ) From 003fe8348cb0b0b996168f406e80edb47f06ca87 Mon Sep 17 00:00:00 2001 From: Ray <154766448+damontecres@users.noreply.github.com> Date: Fri, 30 Jan 2026 11:34:12 -0500 Subject: [PATCH 02/23] Improve series overview loading speed (#800) ## Description Improves loading speed for the series overview page (one with list of episodes). This is mostly accomplished by querying for the cast/crew in the episodes on demand instead of during the initial query. Also stops using the date as a replacement for the episode index. Using this caused an extra unnecessary (long) query. Going from home to the 109th of a 230 episode season is ~2x faster with this change on my test server. ### Related issues Closes #599 --- .../wholphin/data/model/BaseItem.kt | 3 +- .../ui/detail/series/SeriesViewModel.kt | 35 ++++++++++++++----- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/github/damontecres/wholphin/data/model/BaseItem.kt b/app/src/main/java/com/github/damontecres/wholphin/data/model/BaseItem.kt index 312b7446..a9673131 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/data/model/BaseItem.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/data/model/BaseItem.kt @@ -72,8 +72,7 @@ data class BaseItem( @Transient val aspectRatio: Float? = data.primaryImageAspectRatio?.toFloat()?.takeIf { it > 0 } - @Transient - val indexNumber = data.indexNumber ?: dateAsIndex() + val indexNumber get() = data.indexNumber val playbackPosition get() = data.userData?.playbackPositionTicks?.ticks ?: Duration.ZERO 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 4c0fb81b..8ae7a579 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 @@ -39,6 +39,7 @@ import com.github.damontecres.wholphin.util.GetEpisodesRequestHandler import com.github.damontecres.wholphin.util.GetItemsRequestHandler import com.github.damontecres.wholphin.util.LoadingExceptionHandler import com.github.damontecres.wholphin.util.LoadingState +import com.google.common.cache.CacheBuilder import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject @@ -57,6 +58,7 @@ import kotlinx.coroutines.withContext import org.jellyfin.sdk.api.client.ApiClient import org.jellyfin.sdk.api.client.extensions.libraryApi import org.jellyfin.sdk.api.client.extensions.tvShowsApi +import org.jellyfin.sdk.api.client.extensions.userLibraryApi import org.jellyfin.sdk.model.api.BaseItemKind import org.jellyfin.sdk.model.api.ItemFields import org.jellyfin.sdk.model.api.ItemSortBy @@ -293,14 +295,16 @@ class SeriesViewModel listOf( ItemFields.MEDIA_SOURCES, ItemFields.MEDIA_SOURCE_COUNT, - ItemFields.MEDIA_STREAMS, ItemFields.OVERVIEW, ItemFields.CUSTOM_RATING, - ItemFields.TRICKPLAY, ItemFields.PRIMARY_IMAGE_ASPECT_RATIO, - ItemFields.PEOPLE, ), ) + Timber.v( + "loadEpisodesInternal: episodeId=%s, episodeNumber=%s", + episodeId, + episodeNumber, + ) val pager = ApiRequestPager(api, request, GetEpisodesRequestHandler, viewModelScope) pager.init(episodeNumber ?: 0) val initialIndex = @@ -504,19 +508,34 @@ class SeriesViewModel } private var peopleInEpisodeJob: Job? = null + private val peopleInEpisodeCache = + CacheBuilder + .newBuilder() + .maximumSize(25) + .build>() suspend fun lookupPeopleInEpisode(item: BaseItem) { peopleInEpisodeJob?.cancel() if (peopleInEpisode.value?.itemId != item.id) { peopleInEpisode.setValueOnMain(PeopleInItem()) + val result = + peopleInEpisodeCache + .get(item.id) { + viewModelScope.async(Dispatchers.IO) { + val list = + api.userLibraryApi + .getItem(item.id) + .content.people + ?.map { Person.fromDto(it, api) } + .orEmpty() + + PeopleInItem(item.id, list) + } + } peopleInEpisodeJob = viewModelScope.launch(ExceptionHandler()) { delay(250) - val people = - item.data.people - ?.letNotEmpty { it.map { Person.fromDto(it, api) } } - .orEmpty() - peopleInEpisode.setValueOnMain(PeopleInItem(item.id, people)) + peopleInEpisode.setValueOnMain(result.await()) } } } From a48acd5d1ca989a4b5cb0c875e8344626f66c817 Mon Sep 17 00:00:00 2001 From: opakholis Date: Mon, 19 Jan 2026 23:00:22 +0000 Subject: [PATCH 03/23] Translated using Weblate (Indonesian) Currently translated at 100.0% (361 of 361 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/id/ --- app/src/main/res/values-in/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index ac50eb20..c1bf5242 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -388,4 +388,5 @@ Minta dalam 4K Minta Tertunda + Dekode perangkat lunak AV1 From ff7e9517e913b103c78e355ea89fe4da4c23b984 Mon Sep 17 00:00:00 2001 From: arcker95 Date: Tue, 20 Jan 2026 17:47:40 +0000 Subject: [PATCH 04/23] Translated using Weblate (Italian) Currently translated at 100.0% (361 of 361 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 c90f7419..4797e289 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -420,4 +420,5 @@ Impossibile avviare il riconoscimento vocale Riprova Riconoscimento vocale scaduto + Decodifica software AV1 From a99b54bc4969260305858aa27aabb23921137709 Mon Sep 17 00:00:00 2001 From: SimonHung Date: Tue, 20 Jan 2026 19:05:54 +0000 Subject: [PATCH 05/23] Translated using Weblate (Chinese (Traditional Han script)) Currently translated at 100.0% (361 of 361 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hant/ --- app/src/main/res/values-zh-rTW/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 60d38f86..fd54746c 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -388,4 +388,5 @@ 無法啟動語音辨識 語音辨識逾時 重試 + AV1 軟體解碼 From d2826d21f7091b25bccd77ea9005dca05f11af97 Mon Sep 17 00:00:00 2001 From: Sathen Date: Tue, 20 Jan 2026 19:58:13 +0000 Subject: [PATCH 06/23] Added translation using Weblate (Ukrainian) --- app/src/main/res/values-uk/strings.xml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 app/src/main/res/values-uk/strings.xml diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml new file mode 100644 index 00000000..55344e51 --- /dev/null +++ b/app/src/main/res/values-uk/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file From b189720be5ab1d618081972faefe3c15cea9c9cb Mon Sep 17 00:00:00 2001 From: viretius Date: Tue, 20 Jan 2026 21:33:53 +0000 Subject: [PATCH 07/23] Translated using Weblate (German) Currently translated at 85.3% (308 of 361 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/ --- app/src/main/res/values-de/strings.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index e0c430d1..e65a036e 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -81,7 +81,7 @@ Automatisch auf Aktualisierungen prüfen Auf Aktualisierungen prüfen Einstellungen - Wählen %1$s + %1$s Wählen Bilder Cache leeren Community Bewertung Es ist ein Fehler aufgetreten! Drücke den Knopf um Logs zu deinem Server zu senden. @@ -369,4 +369,6 @@ DD DD+ Im Trend + Starten der Spracherkennung fehlgeschlagen + Zurück wählen um abzubrechen From 1d5afa7809d4ca7692ec4a999e79e93ca048f8d8 Mon Sep 17 00:00:00 2001 From: veisen Date: Wed, 21 Jan 2026 19:17:20 +0000 Subject: [PATCH 08/23] Translated using Weblate (Czech) Currently translated at 100.0% (361 of 361 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/cs/ --- app/src/main/res/values-cs/strings.xml | 447 ++++++++++++++++++++++++- 1 file changed, 446 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 8f716bcd..5056fe5f 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -2,9 +2,454 @@ O aplikaci Aktivní nahrávání - Oblíbené + Oblíbený Přidat server Přidat uživatele Zvuk Místo narození + Bitrate + Narozen + Zrušit nahrávání + Zrušit nahrávání seriálu + Zrušit + Kapitoly + Vybrat %1$s + Vymazat mezipaměť obrázků + Sbírka + Kolekce + Hodnocení Komunity + Došlo k chybě! Stiskněte tlačítko pro odeslání protokolů na server. + Potvrdit + Pokračovat ve sledování + Hodnocení kritiků + %.1f sekund + Výchozí + Smazat + Zemřel + Režie %1$s + Režisér + Vypnuto + Nalezené Servery + Stahování… + Zapnuto + Konec v %1$s + Vložte Server IP nebo URL + Vložte adresu serveru + Epizody + Chyba při načítání kolekce %1$s + Externí + Oblíbené + Velikost + Nucené + Žánry + Přejít do + Skrýt ovládací prvky přehrávání + Přejít na sérii + Skrýt informace o ladění + Skrýt + Domů + Úvod + #ABCDEFGHIJKLMNOPQRSTUVWXYZ + Knihovna + Informace o licenci + Živá TV + Načítání… + Označit celou sérii jako zhlédnutou? + Označit celou sérii jako nezhlédnuté? + Označit jako nezhlédnuté + Označit jako zhlédnuté + Maximální bitrate + Více podobných + Více + + Filmy + + + + + Jméno + Další v pořadí + Žádná data + Žádné výsledky + Nenalezeny žádné servery + Žádné naplánované nahrávání + Žádné aktualizace nejsou k dispozici + Žádný + Pouze vynucené titulky + Závěr + Cesta + + Lidé + + + + + Počet přehrání + Přehrát odtud + Přehrát + Zobrazit informace o ladění přehrávání + Rychlost přehrávání + Přehrávání + Seznam + Seznamy + Náhled + Nastavení uživatelského profilu + Fronta + Shrnout + Nedávno přidáno v %1$s + Nedávno přidáno + Nedávno nahráno + Nedávno vydané + Doporučeno + Nahrát Program + Nahrát Seriál + Odebrat z oblíbených + Restart + Pokračovat + Uložit + Hledat + Vyhledávání… + Hlasové vyhledávání + Začátek + Hledat hlasem + Zpracování + Zrušíte stisknutím tlačítka zpět + Chyba nahrávání zvuku + Chyba rozpoznávání hlasu + Vyžadováno oprávnění k přístupu k mikrofonu + Chyba sítě + Časový limit sítě + Řeč nerozpoznaná + Rozpoznávání hlasu je zaneprázdněno + Chyba serveru + Nebyla detekována žádná řeč + Neznámá chyba + Nepodařilo se spustit rozpoznávání hlasu + Časový limit pro rozpoznávání hlasu vypršel + Zkusit znovu + Vybrat server + Vybrat Uživatele + Zobrazit informace o ladění + Zobrazit další + Ukázat + Náhodně + Přeskočit + Datum přidání + Datum přidání epizody + Datum přehraní + Datum vydání + Jméno + Náhodný + Studia + Odeslat + Stahování trvá dlouho, možná budete muset restartovat přehrávání + Podnázev + Titulky + Návrhy + Přepnout servery + Přepnout + Nejlépe hodnocené Nezhlédnuté + Upoutávka + + Upoutávky + + + + + Harmonogram nahrávání + Televizní program + Sezóna + Sezóny + + Seriály + + + + + Prostředí + Neznámý + Aktualizace + Verze + Měřítko videa + Video + Videa + Sledujte živě + %1$d let starý + Přehraj s překódováním + Informace o médiu + Zobrazit hodiny + Pořadí odvysílaných epizod + Vytvořit nový playlist + Přidat do playlistu + Pozastavení jedním kliknutím + Stisknutím středu D-Padu pozastavíte/přehrajete + Kurzíva + Font + Pozadí + Úspěch + Rodičovské hodnocení + Doplňky + + Jiný + + + + + + V zákulisí + + + + + + Znělky + + + + + + Tématická videa + + + + + + Klipy + + + + + + Vymazané scény + + + + + + Rozhovory + + + + + + Scény + + + + + + Krátkometrážní filmy + + + + + + %d hodina + %d hodin + %d hodin + %d hodin + + + %d položka + %d položky + %d položek + %d položek + + + %d sekunda + %d sekundy + %d sekund + %d sekund + + Zařízení podporuje AC3/Dolby Digital + Pokročilá Nastavení + Pokročilé UI + Vzhled Aplikace + Automaticky kontrolovat aktualizace + Zpoždění před dalším přehráním + Další přehrát automaticky + Zkontrolovat aktualizace + Platí pouze pro Seriály + Vždy downmixovat do stereo formátu + Použijte modul dekodéru FFmpeg + Výchozí měřítko obsahu + Nainstalovat aktualizaci + Nainstalovaná verze + Maximální počet položek v řádcích domovské stránky + Vyberte výchozí položky, které se mají zobrazit, ostatní budou skryty + Přizpůsobení položek navigačního panelu + Kliknutím přepnete stránky + Přepnout stránky navigačního panelu při zaostření + Ochrana proti výpadku + Přehrát tematickou hudbu + Přepsání přehrávání + Zapamatovat vybrané karty + Povolit opakované sledování v dalším videu + Kroky Seek baru + Užitečné pro ladění + Odeslat protokoly aplikací na aktuální server + Pokusím se odeslat na poslední připojený server + Odesílat zprávy o selhání + Nastavení + Přeskočit zpět při obnovení přehrávání + Přeskočit zpět + Přeskakovat reklamy + Přeskočit vpřed + Chování přeskočení úvodu + Přeskočit chování konce + Chování přeskočení náhledů + Aktualizace k dispozici + URL adresa používaná ke kontrole aktualizací aplikace + Aktualizovat URL + Velikost písma + Barva písma + Průhlednost písma + Styl okraje + Barva okraje + Průhlednost pozadí + Styl pozadí + Styl titulků + Barva pozadí + Reset + Tučné písmo + MPV: Použití hardwarového dekódování + Zakažte, pokud dojde k pádům + Možnosti MPV + Možnosti ExoPlayeru + Přeskočit segment + Přeskočit reklamy + Přeskočit náhled + Přeskočit shrnutí + Chování přeskočení shrnutí + Přeskočit konec + Přeskočit úvod + Přehráno + Filtr + Rok + Desetiletí + Odstranit + DolbyVision + Atmos + MPV: Použití gpu-next + Upravit mpv.conf + Zahodit změny? + Okraj + Podrobné protokolování + Zadejte PIN + Automatické přihlášení + Přihlášení přes server + Stiskněte středové tlačítko pro potvrzení + Vyžadovat PIN pro profil + Potvrdit PIN + Nesprávný + PIN musí mít 4 znaky nebo více + PIN bude odstraněn + Velikost mezipaměti (MB) + Možnosti zobrazení + Sloupce + Mezery + Poměr stran + Zobrazit podrobnosti + Typ obrázku + Hostující hvězdy + Velikost okraje + Přepínání obnovovací frekvence + Automaticky + Použijte uživatelské jméno/heslo + Přihlášení + Obecné + Kontejner + Titul + Kodek + Profil + Úroveň + Rozlišení + Snímková frekvence + Bitová hloubka + Rozsah videa + Typ rozsahu videa + Barevný prostor + Přenos barev + Základní barvy + Formát pixelů + Referenční snímky + NAL + Jazyk + Rozložení + Kanály + Vzorkovací frekvence + AVC + Ano + Ne + SDR + HDR + HDR10 + HDR10+ + HLG + bit + Hz + Zobrazit názvy + Opakovat + Zobrazit oblíbené kanály jako první + Řadit kanály podle naposledy sledovaných + Zpoždění titulků + Styl prospektu + Přepínání rozlišení + Místní + Přehrát upoutávku + Žádné upoutávky + Vyčistit výběr skladeb + DTS:X + DTS:HD + True HD + DD + DD+ + DTS + Direct play Dolby Vision Profil 7 + Ignoruj kontrolu kompatibility zařízení + Najít + Žádost + Čeká na vyřízení + Seerr integrace + Odstranit Seerr Server + Seerr server přidán + Heslo + Uživatelské jméno + URL + Nadcházející filmy + Trendy + Nadcházející TV pořady + Žádost ve 4K + Softwarové dekódování AV1 + Komerční + + Bezprostředně + + Trvání + + Vzorky + + + + + + Krátká videa + + + + + + %s Stažen + %s Staženo + %s Stažení + %s Stažení + + + Direct play ASS titulky + Direct play PGS titulky + Přehrávání Backendu + + Anamorfní + Prokládané + Color code programs From b083bea4bd2abe35771e7b2c095e4ec18a81968c Mon Sep 17 00:00:00 2001 From: Sathen Date: Tue, 20 Jan 2026 22:53:18 +0000 Subject: [PATCH 09/23] Translated using Weblate (Ukrainian) Currently translated at 100.0% (361 of 361 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/uk/ --- app/src/main/res/values-uk/strings.xml | 454 ++++++++++++++++++++++++- 1 file changed, 453 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 55344e51..17de12b3 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -1,3 +1,455 @@ - \ No newline at end of file + Про застосунок + Активні Записи + Улюблене + Додати сервер + Додати користувача + Аудіо + Місце народження + Бітрейт + Місце народженя + Скасувати запис + Скасувати запис серіалу + Скасувати + Розділи + Виберіть%1$s + Очистити кеш зображень + Колекція + Колекції + Реклама + Оцінка спільноти + Сталася помилка! Натисніть кнопку, щоб надіслати звіт на ваш сервер. + Підтвердити + Продовжити перегляд + Оцінка критиків + %.1fсекунд + За замовчуванням + Видалити + Помер + Режисер: %1$s + Режисер + Вимкнутий + Виявлені сервери + + Завантаження… + Увімкнено + Закінчується о %1$s + Введіть IP-адресу сервера або URL-адресу + Введіть адресу сервера + Епізоди + Помилка під час завантаження колекції %1$s + Зовнішній + Улюблені + Розмір + Forced + Жанри + Перейти до серії + Перейти до + Приховати елементи керування відтворенням + Приховати інформацію про налагодження + Приховати + Головна + Негайно + Вступ + #абвгґдеєжзиіїйклмнопрстуфхцчшщьюя + Бібліотека + Інформація про ліцензію + Ефірне ТБ + Завантаження… + Серія переглянута? + Позначити серію не відтворену? + Позначити як непереглянуте + Позначити як переглянуте + Максимальна швидкість передачі даних + Більше подібного + Більше + + Фільми + + + + + Ім\'я + Наступний + Дані відсутні + Відсутні результати + Сервери не знайдені + Заплановані записи відсутні + Немає доступних оновлень + Нічого + Тільки примусові субтитри + Завершення + Шлях + + Люди + + + + + Кількість відтворень + Відтворити звідси + Відтворити + Показати інформацію про налагодження відтворення + Швидкість відтворення + Відтворення + Список відтворення + Списки відтворення + Попередній перегляд + Налаштування користувача + Черга + Підсумок + Нещодавно додано: %1$s + Нещодавно додано + Нещодавно записано + Нещодавно випущено + Рекомендовано + Програма запису + Запис серії + Не улюблений + Перезавантаження + Відновити + Зберегти + + Пошук + Шукаю… + Голосовий пошук + Початок + Говорити для пошуку + Обробка + Натисніть назад, щоб скасувати + Помилка аудіозапису + Помилка розпізнавання голосу + Потрібен дозвіл на використання мікрофона + Помилка мережі + Час очікування мережі завершився + Не розпізнано мовлення + Розпізнавання голосу зайнято + Помилка сервера + Не виявлено мовлення + Невідома помилка + Не вдалося запустити розпізнавання голосу + Час очікування розпізнавання голосу закінчився + Повторити спробу + Обрати сервер + Обрати користувача + Показати додаткову інформацію + Показати наступне + Показати + Перемішати + Пропустити + Дата додавання + Дата додавання епізоду + Дата відтворення + Дата випуску + Ім\'я + Випадковий + Судії + Надіслати + Завантаження триває надто довго, можливо, потрібно перезапустити відтворення + Підзаголовок + Субтитри + Пропозиції + Перемикнути сервер + Перемкнути + Топ непереглянутих + Трейлер + + Трейлери + + + + + Розклад DVR + Посібник + Сезон + Сезони + + Серіали + + + + + Інтерфейс + Невідомо + Оновлення + Версія + Маштаб відео + Відео + Відоси + Дивитись онлайн + %1$d років + Відтворити з перекодуванням + Інформація + Показати годиник + Порядок ефірних епізодів + Створити новий список відтворення + Додати до списку відтворення + Пауза в один клік + Натисніть центр D-Pad, щоб призупинити/відтворити + Курсив + Шрифт + Обкладенка + Успіх + Вікова оцінка + Час виконання + Додатково + + Інше + + + + + + Позакадром + + + + + + Тематичні пісні + + + + + + Тематичні відео + + + + + + Кліпи + + + + + + Видалені сцени + + + + + + Інтерв\'ю + + + + + + Сцени + + + + + + Зразки + + + + + + Короткометражні фільми + + + + + + Шорти + + + + + + %s завантаження + %s завантаження + %s завантажень + %s завантажень + + + %d година + %d години + %d годин + %d годин + + + %d елемент + %d елемента + %d елементів + %d елементів + + + %d секунда + %d секунди + %d секунд + %d секунд + + Пристрій підтримує AC3/Dolby Digital + Додаткові налаштування + Розширений інтерфейс користувача + Тема застосунку + Автоматична перевірка оновлень + Затримка перед відтворенням наступного + Автоматичне відтворення наступного + Перевірити оноалення + Застосовується тільки до серіалів + Пряме відтворення субтитрів ASS + Пряме відтворення субтитрів PGS + Завжди змішувати в стерео + Використовувати модуль декодера FFmpeg + Масштабувати контент за замовчуванням + Встановити оновлення + Встановлена версія + Максимальна кількість елементів в рядку на головній сторінці + Виберіть елементи, які будуть відображатися за замовчуванням, інші будуть приховані + Налаштування елементів навігаційного меню + Натисніть, щоб перейти на іншу сторінку + Перемикання сторінок навігаційного меню при фокусуванні + Захист від відключення + Відтворити музичну тему + Перегляд записів + Запам\'ятати вибрані вкладки + Увімкнути повторний перегляд як наступне + Кроки пошуку + Корисно для налагодження + Надіслати журнали програми на поточний сервер + Спробує надіслати на останній підключений сервер + Надіслати звіти про збій + Налаштування + Перейти назад при відновленні відтворення + Перейти назад + Пропускати рекламу + Перемотати вперед + Пропустити початок + Пропустити кінець + Пропусти попередній перегляд + Пропустити підсумок + Оновлення доступні + URL для перевірки оновлень + Оновити URL + Розмір шрифта + Колір шрифта + Непрозорість шрифту + Стиль контурів + Колір контуру + Прозорість фону + Стиль фону + Стиль заголовку + Колір фону + Скинути + Жирний шрифт + Playback Backend + MPV: Використовувати апаратне декодування + Вимкніть, якщо ви стикаєтеся з проблемами + Варіанти MPV + Параметри ExoPlayer + Пропустити сегмент + Пропустити реклами + Пропустити попередній перегляд + Пропустити повтор + Пропустити кінець + Пропустити вступ + Відтворено + Фільтр + Рік + Десятиліття + Видалити + Dolby Vision + Dolby Atmos + MPV: Використовувати gpu + Редагувати mpv.conf + Відмінити зміни? + Відступ + Детальне ведення журналу + Ведіть PIN + Автоматичний вхід + Увійти через сервер + Натисніть по центру для підтвердження + Вимагати PIN для профілю + Підтвердити PIN + Невірно + PIN-код повинен складатися з 4 або більше символів + Видалити PIN-код + Розмір кешу зображень (МБ) + Переглянути параметри + Колонки + Відступ(Інтервал) + Співвідношення сторін + Показати деталі + + Тип зображення + + Запрошені зірки + Розмір контуру + Перемикання частоти оновлення + Автоматично + Використовуйте ім\'я користувача/пароль + Увійти + Загальні + Контейнер + Заголовок + Codec + Профіль + Рівень + Розширення + Anamorphic + Interlaced + Частота кадрів + Bit depth + Діапазон відео + Тип діапазону відео + Кольоровий простір + Перенесення кольору + Головний колір + Формат пікселю + Ref frames + NAL + Мова + Компонування + Канали + Sample rate + AVC + Так + Ні + SDR + HDR + HDR10 + HDR10+ + HLG + біт + Гц + Показати заголовок + Повторити + Показати обрані канали на початку + Відсортувати канали за нещодавно переглянутими + Кольоровий код програм + Затримка субтитрів + Стиль фону + Перемикання розширення + Локальний + Відтворити трейлер + Трейлери відсутні + Чіткий вибір доріжки + DTS:X + DTS:HD + TrueHD + DD + DD+ + DTS + Пряме відтворення Dolby Vision Profile 7 + Ігноруваии перевірку сумісності пристроїв + Відкрийте для себе + Запит + В очікувані + Seerr інтеграція + Видалити Seerr Server + Seerr сервер додано + Пароль + Нік + URL + Популярні + Заплановані Фільми + Заплановані Серіали + Запит в 4К + Програмне декодування AV1 + From 82744322e9fcf26cfbc2f6133613645504ae56ff Mon Sep 17 00:00:00 2001 From: veisen Date: Wed, 21 Jan 2026 19:44:55 +0000 Subject: [PATCH 10/23] Translated using Weblate (Czech) Currently translated at 100.0% (361 of 361 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/cs/ --- app/src/main/res/values-cs/strings.xml | 94 +++++++++++++------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 5056fe5f..8dfe2f89 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -2,7 +2,7 @@ O aplikaci Aktivní nahrávání - Oblíbený + Oblíbené Přidat server Přidat uživatele Zvuk @@ -38,7 +38,7 @@ Epizody Chyba při načítání kolekce %1$s Externí - Oblíbené + Oblíbený Velikost Nucené Žánry @@ -63,9 +63,9 @@ Více Filmy - - - + + + Jméno Další v pořadí @@ -80,9 +80,9 @@ Cesta Lidé - - - + + + Počet přehrání Přehrát odtud @@ -152,9 +152,9 @@ Upoutávka Upoutávky - - - + + + Harmonogram nahrávání Televizní program @@ -162,9 +162,9 @@ Sezóny Seriály - - - + + + Prostředí Neznámý @@ -191,57 +191,57 @@ Doplňky Jiný - - - + + + V zákulisí - - - + + + Znělky - - - + + + Tématická videa - - - + + + Klipy - - - + + + Vymazané scény - - - + + + Rozhovory - - - + + + Scény - - - + + + Krátkometrážní filmy - - - + + + %d hodina @@ -428,15 +428,15 @@ Trvání Vzorky - - - + + + Krátká videa - - - + + + %s Stažen From c714afeb3b4a10617656236e1b04e5a2565954b3 Mon Sep 17 00:00:00 2001 From: Outbreak2096 Date: Fri, 23 Jan 2026 14:10:30 +0000 Subject: [PATCH 11/23] Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (362 of 362 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/zh_Hans/ --- app/src/main/res/values-zh-rCN/strings.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 1dc78897..10a25eac 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -254,9 +254,9 @@ 重置 粗体 播放后端 - MPV:使用硬件解码 + mpv:使用硬件解码 如果遇到崩溃,请禁用 - MPV 选项 + mpv 选项 ExoPlayer 选项 跳过片段 跳过广告 @@ -271,7 +271,7 @@ 移除 杜比视界 杜比全景声 - MPV:使用 gpu-next + mpv:使用 gpu-next 编辑 mpv.conf 舍弃更改? 边距 @@ -389,4 +389,5 @@ 语音识别超时 重试 AV1 软件解码 + 除 HDR 视频外,mpv 现在是默认播放器。\n您可以在设置中更改此设置。 From 8bf3c48a129d553b5cd2876afd6b37b6961732e5 Mon Sep 17 00:00:00 2001 From: arcker95 Date: Fri, 23 Jan 2026 18:47:36 +0000 Subject: [PATCH 12/23] Translated using Weblate (Italian) Currently translated at 100.0% (362 of 362 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 4797e289..15a70f3d 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -421,4 +421,5 @@ Riprova Riconoscimento vocale scaduto Decodifica software AV1 + MPV è ora il lettore predefinito, eccetto per i contenuti HDR.\nPuoi modificarlo nelle impostazioni. From e632c76ff293d7177531c5ed7312da3a850ad25f Mon Sep 17 00:00:00 2001 From: Fjuro Date: Sat, 24 Jan 2026 00:11:27 +0000 Subject: [PATCH 13/23] Translated using Weblate (Czech) Currently translated at 100.0% (362 of 362 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/cs/ --- app/src/main/res/values-cs/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 8dfe2f89..4ed1e15c 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -452,4 +452,5 @@ Anamorfní Prokládané Color code programs + MPV je nyní výchozím přehrávačem mimo HDR.\nToto můžete změnit v nastavení. From 1d11eab48dccdf58cd5731ac3282e3f2b19e8aca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Sun, 25 Jan 2026 19:39:18 +0000 Subject: [PATCH 14/23] Translated using Weblate (Estonian) Currently translated at 100.0% (362 of 362 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/et/ --- app/src/main/res/values-et/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index df0f7913..765c5fe2 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -405,4 +405,5 @@ Kõnetuvastus aegus Proovi uuesti AV1 tarkvaraline dekodeerimine + MPV on nüüd vaikimisi meediaesitaja kõige v.a. HDR-i jaoks.\nSeda saad muuta seadistustest. From d260791e62205d6dfa579aa2f5b3b30bded07ac4 Mon Sep 17 00:00:00 2001 From: viretius Date: Mon, 26 Jan 2026 05:19:32 +0000 Subject: [PATCH 15/23] Translated using Weblate (German) Currently translated at 88.9% (322 of 362 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 e65a036e..d5aacdb0 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -371,4 +371,5 @@ Im Trend Starten der Spracherkennung fehlgeschlagen Zurück wählen um abzubrechen + MPV ist jetzt der Standard-Player, außer für HDR.\nDas kannst du in den Einstellungen ändern. From aae7a64cc49620fe35276f835d1e07005290c133 Mon Sep 17 00:00:00 2001 From: Lorixx Date: Mon, 26 Jan 2026 18:28:00 +0000 Subject: [PATCH 16/23] Translated using Weblate (German) Currently translated at 88.9% (322 of 362 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/ --- app/src/main/res/values-de/strings.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index d5aacdb0..03387b11 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -372,4 +372,16 @@ Starten der Spracherkennung fehlgeschlagen Zurück wählen um abzubrechen MPV ist jetzt der Standard-Player, außer für HDR.\nDas kannst du in den Einstellungen ändern. + Sprachsuche + Sprechen, um zu suchen + Ignoriert geräte kompatibilität + kommende Filme + kommende Serien + Direktes abspielen von Dolby Vision Profil 7 + Untertitelverzögerung + Sortiere Kanäle nach zuletzt geschaut + Favoriten als erstes anzeigen + Hintergrundstil + Bildwiederholraten-Anpassung + Keine Spracheingabe erkannt From 2f19003dd9f5ab3c46187558143e22b051dafb94 Mon Sep 17 00:00:00 2001 From: Sk4hnt42 Date: Mon, 26 Jan 2026 18:32:29 +0000 Subject: [PATCH 17/23] Translated using Weblate (German) Currently translated at 88.9% (322 of 362 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/de/ --- app/src/main/res/values-de/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 03387b11..03038fc8 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -118,7 +118,7 @@ Als nächstes Keine Von hier wiedergeben - Abspielen + Wiedergeben Wiedergabegeschwindigkeit Wiedergabe Vorschau From 1ac6c9366b7dfdbf243a8862fd70d5142e46a5f6 Mon Sep 17 00:00:00 2001 From: American_Jesus Date: Mon, 26 Jan 2026 19:02:13 +0000 Subject: [PATCH 18/23] Translated using Weblate (Portuguese) Currently translated at 100.0% (362 of 362 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/pt/ --- app/src/main/res/values-pt/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index f6570fbd..3205d05d 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -421,4 +421,5 @@ Tempo limite do reconhecimento de voz expirado Tentar novamente Decodificação de AV1 por software + O MPV é agora o reprodutor padrão, exceto para HDR.\nPode alterar esta configuração nas definições. From f64c9d2e7380af492167e19067c6db15d4bc0567 Mon Sep 17 00:00:00 2001 From: ymir Date: Mon, 26 Jan 2026 07:37:41 +0000 Subject: [PATCH 19/23] Translated using Weblate (French) Currently translated at 100.0% (362 of 362 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/fr/ --- app/src/main/res/values-fr/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 7c4aac7c..a53c580f 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -421,4 +421,5 @@ Séries à venir Demande en 4K Décodage logiciel AV1 + MPV est désormais le lecteur par défaut, sauf pour HDR.\nVous pouvez modifier cela dans les paramètres. From cb9eab2aa551c6d945616a5e774be52442c3aa8a Mon Sep 17 00:00:00 2001 From: Sathen Date: Mon, 26 Jan 2026 11:20:43 +0000 Subject: [PATCH 20/23] Translated using Weblate (Ukrainian) Currently translated at 100.0% (362 of 362 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/uk/ --- app/src/main/res/values-uk/strings.xml | 91 +++++++++++++------------- 1 file changed, 46 insertions(+), 45 deletions(-) diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 17de12b3..dce8332a 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -66,9 +66,9 @@ Більше Фільми - - - + + + Ім\'я Наступний @@ -83,9 +83,9 @@ Шлях Люди - - - + + + Кількість відтворень Відтворити звідси @@ -156,9 +156,9 @@ Трейлер Трейлери - - - + + + Розклад DVR Посібник @@ -166,9 +166,9 @@ Сезони Серіали - - - + + + Інтерфейс Невідомо @@ -196,69 +196,69 @@ Додатково Інше - - - + + + Позакадром - - - + + + Тематичні пісні - - - + + + Тематичні відео - - - + + + Кліпи - - - + + + Видалені сцени - - - + + + Інтерв\'ю - - - + + + Сцени - - - + + + Зразки - - - + + + Короткометражні фільми - - - + + + Шорти - - - + + + %s завантаження @@ -452,4 +452,5 @@ Заплановані Серіали Запит в 4К Програмне декодування AV1 + MPV тепер є плеєром за замовчуванням, за винятком для HDR.\nВи можете змінити це в налаштуваннях. From 853c224b61dec433c42e3297351aa4a34a88c8ae Mon Sep 17 00:00:00 2001 From: Ckau Date: Tue, 27 Jan 2026 04:24:05 +0000 Subject: [PATCH 21/23] Translated using Weblate (Russian) Currently translated at 85.6% (310 of 362 strings) Translation: Wholphin/Wholphin Translate-URL: https://translate.codeberg.org/projects/wholphin/wholphin/ru/ --- app/src/main/res/values-ru/strings.xml | 80 +++++++++++++++++++++----- 1 file changed, 65 insertions(+), 15 deletions(-) diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index aeb28c50..04204a19 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -299,15 +299,15 @@ Отрывки - - - + + + Дополнительные материалы - - - + + + Выбор плеера Толщина обводки @@ -316,15 +316,15 @@ Форсированные Саундтреки - - - + + + Видеоролики - - - + + + Настроить элементы боковой панели Выберите элементы для показа на панели, остальные элементы будут скрыты @@ -339,8 +339,58 @@ Остановка воспроизведения при бездействии Короткометражки - - - + + + + Конец в %1$s + Введите адрес сервера + Серверы не найдены + Только форсированные субтитры + Голосовой поиск + Запуск + Говорите для поиска + Обработка + Нажмите назад для отмены + Ошибка записи звука + Ошибка распознавания голоса + Требуется разрешение на использование микрофона + Сетевая ошибка + Сетевой таймаут + Речь не распознана + Голосовое распознавание занято + Ошибка сервера + Речь не обнаружена + Неизвестная ошибка + Не удалось запустить распознавание голоса + Время ожидания распознавания голоса истекло + Повторить + О медиаданных + Переключение частоты обновления + Автоматически + Исп. имя пользователя/пароль + Логин + Пароль + Имя пользователя + Язык + Основное + Контейнер + Заголовок + Кодек + Профиль + Уровень + Разрешение + Анаморфность + Чересстрочность + Ч-та кадров + Разрядность + Диапазон видео + Тип диапазона видео + Цветовое пространство + Передача цвета + Основные цвета + Формат пикселей + Опорные кадры + Да + Нет From 3ada35c731748f77c722d6d20076925e636c5fda Mon Sep 17 00:00:00 2001 From: Ray <154766448+damontecres@users.noreply.github.com> Date: Fri, 30 Jan 2026 16:15:35 -0500 Subject: [PATCH 22/23] Fix error reporting & crash during Jellyseerr login (#802) ## Description Makes sure the invalid credentials error is propagated up instead of displaying "No URL" as the error message. Makes sure `OkHttp` is initialized since the startup initialization provider is disabled. This fixes a possible crash if `OkHttp` needs to access its assets. Also, shows the URL when removing the Jellyseerr server. --- .../com/github/damontecres/wholphin/WholphinApplication.kt | 2 ++ .../wholphin/ui/preferences/PreferencesContent.kt | 3 ++- .../wholphin/ui/setup/seerr/SwitchSeerrViewModel.kt | 6 ++++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/github/damontecres/wholphin/WholphinApplication.kt b/app/src/main/java/com/github/damontecres/wholphin/WholphinApplication.kt index ae4b5d28..cf2c159a 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/WholphinApplication.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/WholphinApplication.kt @@ -10,6 +10,7 @@ import androidx.compose.runtime.ExperimentalComposeRuntimeApi import androidx.hilt.work.HiltWorkerFactory import androidx.work.Configuration import dagger.hilt.android.HiltAndroidApp +import okhttp3.OkHttp import org.acra.ACRA import org.acra.ReportField import org.acra.config.dialog @@ -63,6 +64,7 @@ class WholphinApplication : override fun onCreate() { super.onCreate() + OkHttp.initialize(this) initAcra { buildConfigClass = BuildConfig::class.java reportFormat = StringFormat.JSON diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/preferences/PreferencesContent.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/preferences/PreferencesContent.kt index fcb418b8..8fedf3b6 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/preferences/PreferencesContent.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/preferences/PreferencesContent.kt @@ -88,6 +88,7 @@ fun PreferencesContent( val state = rememberLazyListState() var preferences by remember { mutableStateOf(initialPreferences) } val currentUser by viewModel.currentUser.observeAsState() + val currentServer by seerrVm.currentSeerrServer.collectAsState(null) var showPinFlow by remember { mutableStateOf(false) } val navDrawerPins by viewModel.navDrawerPins.observeAsState(mapOf()) @@ -481,7 +482,7 @@ fun PreferencesContent( SeerrDialogMode.Remove -> { ConfirmDialog( title = stringResource(R.string.remove_seerr_server), - body = "", + body = currentServer?.url ?: "", onCancel = { seerrDialogMode = SeerrDialogMode.None }, onConfirm = { seerrVm.removeServer() diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/setup/seerr/SwitchSeerrViewModel.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/setup/seerr/SwitchSeerrViewModel.kt index 6148bfec..4f93217a 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/setup/seerr/SwitchSeerrViewModel.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/setup/seerr/SwitchSeerrViewModel.kt @@ -30,6 +30,7 @@ class SwitchSeerrViewModel private val serverRepository: ServerRepository, ) : ViewModel() { val currentUser = serverRepository.currentUser + val currentSeerrServer = seerrServerRepository.currentServer val serverConnectionStatus = MutableStateFlow(LoadingState.Pending) @@ -61,15 +62,16 @@ class SwitchSeerrViewModel passwordOrApiKey = passwordOrApiKey, ) } catch (ex: ClientException) { - Timber.w(ex, "Error logging in") + Timber.w(ex, "ClientException logging in") if (ex.statusCode == 401 || ex.statusCode == 403) { showToast(context, "Invalid credentials") - LoadingState.Error("Invalid credentials", ex) + result = LoadingState.Error("Invalid credentials", ex) break } else { LoadingState.Error("Could not connect with URL") } } catch (ex: Exception) { + Timber.w(ex, "Exception logging in") LoadingState.Error(ex) } if (result is LoadingState.Success) { From 1bffa413a2b1a1401e6fe6e1d70ab4f976106f8f Mon Sep 17 00:00:00 2001 From: voc0der Date: Fri, 30 Jan 2026 21:16:39 +0000 Subject: [PATCH 23/23] Fix Seerr Local/Jellyfin authentication and request permissions (#734) ## Description When using LOCAL or JELLYFIN authentication methods to connect to Seerr, the login flow was not properly establishing session cookies and user permissions. The login would 'succeed' and you were led to thinking it worked, but then... This caused: - Request functionality to be greyed out even though the user should have access - Users to appear to have no permissions after login (permissions=0) ## Solution This PR fixes the authentication flow by: **Fetching full user config after login**: For LOCAL and JELLYFIN auth methods, the login endpoints (`authLocalPost()` and `authJellyfinPost()`) establish the session cookie but return incomplete user data. This PR now calls `authMeGet()` immediately after login to fetch the fully-populated user configuration including proper permissions. ## Tests - Have working apk on my dev fork. - Ran logins as Local + API. Cannot test Jellyfin due to environment, but codewise, it looks correct. ## Related issues Related to https://github.com/damontecres/Wholphin/issues/747 --------- Co-authored-by: Ray <154766448+damontecres@users.noreply.github.com> --- .../damontecres/wholphin/services/SeerrServerRepository.kt | 2 ++ 1 file changed, 2 insertions(+) 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 5d1ce4d3..f06a7529 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 @@ -196,6 +196,7 @@ private suspend fun login( password = password ?: "", ), ) + client.usersApi.authMeGet() } SeerrAuthMethod.JELLYFIN -> { @@ -205,6 +206,7 @@ private suspend fun login( password = password ?: "", ), ) + client.usersApi.authMeGet() } SeerrAuthMethod.API_KEY -> {