From 85b38c0197726695b7cd5e084c413c1f9767b559 Mon Sep 17 00:00:00 2001 From: craitose <52755601+craitose@users.noreply.github.com> Date: Wed, 25 Feb 2026 17:53:13 +0000 Subject: [PATCH 1/3] enhanced regex auto-stream select --- .../tv/core/player/StreamAutoPlaySelector.kt | 82 ++++++++++++++++--- .../settings/PlaybackAutoPlaySettings.kt | 1 + 2 files changed, 72 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/nuvio/tv/core/player/StreamAutoPlaySelector.kt b/app/src/main/java/com/nuvio/tv/core/player/StreamAutoPlaySelector.kt index 28238360..17db2bc0 100644 --- a/app/src/main/java/com/nuvio/tv/core/player/StreamAutoPlaySelector.kt +++ b/app/src/main/java/com/nuvio/tv/core/player/StreamAutoPlaySelector.kt @@ -4,6 +4,8 @@ import com.nuvio.tv.data.local.StreamAutoPlayMode import com.nuvio.tv.data.local.StreamAutoPlaySource import com.nuvio.tv.domain.model.AddonStreams import com.nuvio.tv.domain.model.Stream +import java.net.HttpURLConnection +import java.net.URL object StreamAutoPlaySelector { fun orderAddonStreams( @@ -17,6 +19,52 @@ object StreamAutoPlaySelector { return orderedAddons + pluginEntries } + private fun resolvePlayableUrl(stream: Stream): String? { + val url = stream.getStreamUrl() ?: return null + + // Pixeldrain is the ONLY host that needs special resolving + if ("pixeldrain" in url) { + val id = url.substringAfterLast("/") + val infoUrl = "https://pixeldrain.dev/api/file/$id/info" + + val infoJson = runCatching { URL(infoUrl).readText() }.getOrNull() ?: return null + + if (!infoJson.contains("\"success\":true")) return null + if (!infoJson.contains("\"mime_type\":\"video")) return null + + return "https://pixeldrain.dev/api/file/$id?download" + } + + // Everything else: return as-is + return url + } + + + + private fun urlWorks(url: String): Boolean { + val lower = url.lowercase() + + // Skip probing for signed or tokened URLs + if (listOf("token=", "expires=", "signature=", "sig=", "auth=", "key=", "hash=", "x-amz-", "hdnts=", "cf_") + .any { lower.contains(it) }) { + return true + } + + // Safe HEAD probe for everything else + return runCatching { + val connection = URL(url).openConnection() as HttpURLConnection + connection.requestMethod = "HEAD" + connection.connectTimeout = 3000 + connection.readTimeout = 3000 + connection.instanceFollowRedirects = true + connection.connect() + connection.responseCode in 200..399 + }.getOrElse { false } + } + + + + fun selectAutoPlayStream( streams: List, mode: StreamAutoPlayMode, @@ -59,9 +107,10 @@ object StreamAutoPlaySelector { StreamAutoPlayMode.REGEX_MATCH -> { val pattern = regexPattern.trim() if (pattern.isBlank()) return null - - // Try to compile the user regex - val userRegex = runCatching { Regex(pattern, RegexOption.IGNORE_CASE) }.getOrNull() ?: return null + + // Try to compile user regex + val userRegex = runCatching { Regex(pattern, RegexOption.IGNORE_CASE) } + .getOrNull() ?: return null // Auto-extract exclusion patterns from negative lookaheads val exclusionMatches = Regex("\\(\\?![^)]*?\\(([^)]+)\\)").findAll(pattern) @@ -76,9 +125,9 @@ object StreamAutoPlaySelector { Regex("\\b(${exclusionWords.joinToString("|")})\\b", RegexOption.IGNORE_CASE) } else null - - candidateStreams.firstOrNull { stream -> - val url = stream.getStreamUrl() ?: return@firstOrNull false + // 1. Build list of ALL regex‑matching streams + val matchingStreams = candidateStreams.filter { stream -> + val url = stream.getStreamUrl() ?: return@filter false val searchableText = buildString { append(stream.addonName).append(' ') @@ -87,20 +136,31 @@ object StreamAutoPlaySelector { append(stream.description.orEmpty()).append(' ') append(url) } - - // Must match user include pattern - if (!userRegex.containsMatchIn(searchableText)) return@firstOrNull false - // Must NOT match user exclusion pattern (if any) + // Must match include pattern + if (!userRegex.containsMatchIn(searchableText)) return@filter false + + // Must NOT match exclusion pattern if (excludeRegex != null && excludeRegex.containsMatchIn(searchableText)) { - return@firstOrNull false + return@filter false } true + } + if (matchingStreams.isEmpty()) return null + + // 2. Try each matching stream until one works + for (stream in matchingStreams) { + val resolved = resolvePlayableUrl(stream) ?: continue + println("Trying resolved stream: $resolved") + if (urlWorks(resolved)) return stream } + // None worked + null } + } } } diff --git a/app/src/main/java/com/nuvio/tv/ui/screens/settings/PlaybackAutoPlaySettings.kt b/app/src/main/java/com/nuvio/tv/ui/screens/settings/PlaybackAutoPlaySettings.kt index 41bfbcb2..f59207a7 100644 --- a/app/src/main/java/com/nuvio/tv/ui/screens/settings/PlaybackAutoPlaySettings.kt +++ b/app/src/main/java/com/nuvio/tv/ui/screens/settings/PlaybackAutoPlaySettings.kt @@ -975,6 +975,7 @@ private fun StreamRegexDialog( "Dolby Atmos / DTS" to "(atmos|truehd|dts[-\\s]?hd|dtsx?)", "English" to "(\\beng\\b|english)", "No CAM/TS" to "^(?!.*\\b(cam|hdcam|ts|telesync)\\b).*$" + "No REMUX/HDR" to "(?is)^(?!.*\\b(hdr|hdr10|dv|dolby|vision|hevc|remux|2160p)\\b).+$" ) } From 1ec6c99e4acc67ece8110261351e0314b09330dd Mon Sep 17 00:00:00 2001 From: craitose <52755601+craitose@users.noreply.github.com> Date: Wed, 25 Feb 2026 20:50:14 +0000 Subject: [PATCH 2/3] added slovak (sk) translation --- .../screens/settings/ThemeSettingsScreen.kt | 3 +- app/src/main/res/values-sk/strings.xml | 735 ++++++++++++++++++ app/src/main/res/xml/locale_config.xml | 1 + 3 files changed, 738 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/values-sk/strings.xml diff --git a/app/src/main/java/com/nuvio/tv/ui/screens/settings/ThemeSettingsScreen.kt b/app/src/main/java/com/nuvio/tv/ui/screens/settings/ThemeSettingsScreen.kt index 59821bdb..b00d5a91 100644 --- a/app/src/main/java/com/nuvio/tv/ui/screens/settings/ThemeSettingsScreen.kt +++ b/app/src/main/java/com/nuvio/tv/ui/screens/settings/ThemeSettingsScreen.kt @@ -90,7 +90,8 @@ fun ThemeSettingsContent( listOf( null to strLanguageSystem, "en" to "English", - "pl" to "Polski" + "pl" to "Polski", + "sk" to "Slovensky" ) } var selectedTag by remember { diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml new file mode 100644 index 00000000..c28a81d0 --- /dev/null +++ b/app/src/main/res/values-sk/strings.xml @@ -0,0 +1,735 @@ + + Film + Seriál + Neznáme + + + Žiadne doplnky nie sú nainštalované. Pridajte jeden pre začiatok. + Žiadne katalógové doplnky. Nainštalujte katalógový doplnok pre zobrazenie obsahu. + Vyskytla sa chyba + + + Skúsiť znova + + + Pokračovať v sledovaní + Čoskoro + Ďalší diel + Pokračovať + Vysiela sa %1$s + Prejsť na detaily + Odstrániť + Vyberte, čo chcete s touto položkou urobiť. + + + z %1$s + Zobraziť všetko + + + Tvorca: %1$s + Režisér: %1$s + Scenár: %1$s + Prehrať + Prehrať S%1$d, E%2$d + Pridať do knižnice + Odstrániť z knižnice + Označiť ako videné + Označiť ako nevidené + Prehrať trailer + Stlačte späť pre ukončenie traileru + Hodnotenie + + + Séria %1$d + Špeciály + Epizóda + Videné + Akcie epizódy + Označiť ako videné + Označiť ako nevidené + Označiť sériu ako videnú + Označiť sériu ako nevidenú + Označiť predchádzajúce epizódy ako videné + Prehrať + Akcie série + + + Tvorcovia a herci + Hodnotenia + Podobné tituly + Stanica + Produkcia + Zoznamy + Vyberte, do ktorých zoznamov má byť tento titul zaradený. + Uložiť + Ukladá sa… + + + Jazyk aplikácie + Prepísať jazyk systému + Predvolené podľa systému + Vyberte jazyk + Reštartujte aplikáciu pre použitie zmeny jazyka. + + + Vzhľad + Vyberte farebnú tému a jazyk + Vybrané + + + O aplikácii + Informácie o aplikácii, aktualizácie a právne odkazy + Vytvorené s ❤️ tímom Tapframe a priateľmi + Verzia %1$s + Skontrolovať aktualizácie + Stiahnuť najnovšiu verziu + Zásady ochrany osobných údajov + Zobraziť zásady ochrany osobných údajov + + + Účet + Účet a stav synchronizácie. + Profily + Spravovať používateľské profily. + Rozloženie + Domáca obrazovka a štýly posterov. + Pluginy + Repozitáre a poskytovatelia. + Integrácia + Prehrávanie + Prehrávač, titulky a automatické prehrávanie. + Otvoriť obrazovku pripojenia Trakt. + Verzia a zásady. + Debug + Nástroje pre vývojárov a funkčné prepínače. + Spravovať repozitáre, poskytovateľov a stavy pluginov. + Účet a stav synchronizácie. + Integrácie + Vyberte nastavenia TMDB alebo MDBList + Ovládanie obohatenia metadát + Externí poskytovatelia hodnotení + + + Nastavenia prehrávania + Konfigurácia videa a titulkov + Znížiť + Zvýšiť + Zrušiť + Žiadne + + + Všeobecné + Základné správanie prehrávania. + Načítavacia obrazovka + Zobraziť načítavaciu obrazovku až do prvého video rámca. + Pauzovacia obrazovka + Zobraziť detaily po 5 sekundách pauzy. + Zobraziť aktuálny čas a čas ukončenia počas zobrazenia ovládacích prvkov. + Preskočiť intro + Použiť introdb.app na detekciu úvodov a rekapitulácií. + Automatická snímková frekvencia + Prehrávač & výber streamu + Preferencie prehrávača, automatické prehrávanie a filtrovanie zdrojov. + Prehrávač + Interný + Externý + Opýtať sa pri každom prehratí + Audio & Trailer + Správanie trailerov a ovládanie audia. + Titulky + Jazyk, štýl a režim renderovania. + Otvoriť + Zatvorené + Vypnuté + Nemení obnovovaciu frekvenciu displeja. + Pri spustení + Prepnúť pri začiatku prehrávania. + Pri spustení/ukončení + Prepnúť pri spustení a obnoviť pri ukončení. + Vždy otvoriť streamy v externej aplikácii + Vybrať prehrávač pri každom prehratí + + + Trailer + Automaticky prehrávať trailery + Automaticky prehrať trailery na detailnej obrazovke po chvíli nečinnosti + Oneskorenie traileru + Audio + Predvolené (podľa súboru) + Jazyk zariadenia + Preferovaný jazyk audia + Preskočiť ticho + Preskočiť tiché časti audia počas prehrávania + Pokročilé audio + Tieto nastavenia môžu spôsobiť problémy na niektorých zariadeniach. Meníte na vlastné riziko. + Iba hardvérové dekodéry + Preferovať hardvérové dekodéry + Preferovať dekodéry aplikácie (FFmpeg) + Priorita dekodéra + Tunelované prehrávanie + Hardvérová synchronizácia audio/video. Môže zlepšiť prehrávanie na niektorých Android TV zariadeniach. + Mapovať Dolby Vision profil 7 na štandardné HEVC pre zariadenia bez DV podpory + Použiť iba vstavané hardvérové dekodéry. Najkompatibilnejšie, ale nemusia podporovať všetky formáty. + Použiť hardvérové dekodéry, ak sú dostupné, inak FFmpeg. Odporúčané pre väčšinu zariadení. + Použiť FFmpeg dekodéry, ak sú dostupné. Lepšia podpora formátov, vyššie zaťaženie CPU. + Ovláda, či sa použijú hardvérové alebo softvérové (FFmpeg) dekodéry pre audio a video + + + Titulky + Nenastavené + Preferovaný jazyk + Sekundárny preferovaný jazyk + Usporiadanie titulkov + Veľkosť + Vertikálna pozícia + Tučné písmo + Použiť tučné písmo pre titulky + Farba textu + Farba pozadia + Obrys + Pridať obrys okolo textu titulkov pre lepšiu čitateľnosť + Farba obrysu + Pokročilé renderovanie titulkov + Použiť libass pre ASS/SSA titulky + Dočasne vypnuté kvôli údržbe + Režim renderovania Libass + Overlay OpenGL (odporúčané) + Najlepšia kvalita s podporou HDR. Renderuje titulky na samostatnom vlákne. + Overlay Canvas + Efekty OpenGL + Podpora animácií pomocou Media3 efektov. Rýchlejšie ako Canvas. + Efekty Canvas + Podpora animácií pomocou Media3 efektov s Canvas renderovaním. + Štandardné titulky + Základné renderovanie titulkov bez animácií. Najkompatibilnejšie. + Žiadne (predvolené poradie) + Podľa jazyka + Podľa doplnku + Zobraziť titulky v predvolenom poradí doplnkov. + Zoskupiť titulky podľa jazyka. + Zoskupiť titulky podľa zdroja doplnku. + + + Použiť posledný odkaz + Automaticky prehrať posledný funkčný stream pre tento film/epizódu, ak je cache stále platná + Doba platnosti cache posledného odkazu + Manuálne (vybrať stream) + Automaticky prehrať prvý zdroj + Automaticky prehrať podľa regexu + Výber streamu + Automaticky prehrať ďalšiu epizódu + Spustiť ďalšiu epizódu automaticky, keď sa zobrazí výzva. + Percentá + Minúty pred koncom + Režim prahu pre ďalšiu epizódu + Percentuálny prah + Použije sa, keď nie je dostupný čas outro sekvencie. + Prahové minúty + Použije sa, keď nie je dostupný čas outro sekvencie. + Všetky zdroje + Iba nainštalované doplnky + Iba povolené pluginy + Rozsah automatického prehrávania + Povolené doplnky + Všetky nainštalované doplnky + Povolené pluginy + Všetky povolené pluginy + Nie je nastavený žiadny vzor. Príklad: 4K|2160p|Remux + Regex vzor + Žiadne položky nie sú dostupné + Vždy zobraziť zoznam zdrojov a nechať ma vybrať. + Automaticky prehrať prvý dostupný zdroj. + Prehrať prvý zdroj, ktorý zodpovedá regex vzoru. + Automatické prehrávanie môže použiť doplnky aj pluginy. + Automatické prehrávanie zohľadní iba streamy z nainštalovaných doplnkov. + Automatické prehrávanie zohľadní iba streamy z povolených pluginov. + Použije sa, keď nie je dostupný čas outro sekvencie. + Použije sa, keď nie je dostupný čas outro sekvencie. + Porovnáva názov/titul/description/addon/url streamu. Príklad: 4K|2160p|Remux + Predvoľby + Neplatný regex vzor + + + Nastavenia rozloženia + Upravte domáce rozloženie, viditeľnosť obsahu a správanie posterov + Klasické zobrazenie + Mriežkové zobrazenie + Moderné zobrazenie + Prechádzajte kategórie horizontálne + Prehliadajte všetko vo vertikálnej mriežke s hero sekciou + Fixný hero s jedným aktívnym riadkom pre rýchlejšie prehliadanie + Domáce rozloženie + Vyberte štruktúru a zdroj hero obsahu. + Na šírku + Prepínať medzi portrétnymi a landscape kartami v modernom zobrazení. + Zobraziť náhľadový riadok + Zobraziť čiastočný náhľad nasledujúceho riadku v modernom rozložení. + Hero katalógy + Vyberte jeden alebo viac katalógov pre hero obsah. + Obsah domovskej obrazovky + Ovládajte, čo sa zobrazuje na domovskej obrazovke a v hľadaní. + Skryť bočný panel + Skryť bočný panel predvolene; zobraziť pri zameraní. + Moderný bočný panel + Povoliť plávajúcu bočnú navigáciu. + Rozmazanie bočného panelu + Prepínať efekt rozmazania pre moderný bočný panel. + Zobraziť hero sekciu + Zobraziť hero karusel v hornej časti domovskej obrazovky. + Zobraziť Objavovať v hľadaní + Zobraziť sekciu prehliadania, keď je hľadanie prázdne. + Zobraziť názvy posterov + Zobraziť názvy pod postermi v radoch, mriežke a zobrazení všetkých. + Zobraziť názov doplnku + Zobraziť názov zdroja pod katalógovými titulmi. + Zobraziť typ katalógu + Zobraziť typ (Film/Seriál) vedľa názvu katalógu. + Detailná stránka + Nastavenia pre detailnú a epizódovú obrazovku. + Rozmazať nevidené epizódy + Rozmazať náhľady epizód, kým nie sú videné, aby sa predišlo spoilerom. + Zobraziť tlačidlo traileru + Zobraziť tlačidlo traileru na detailnej stránke (iba ak je dostupný). + Preferovať externé meta + Použiť metadáta z externého doplnku namiesto katalógového. + Zameraná karta + Pokročilé správanie pre zamerané karty. + Rozšíriť zameraný poster na pozadie + Rozšíriť zameraný poster po oneskorení. + Oneskorenie rozšírenia + Ako dlho čakať pred rozšírením zameraných kariet. + Automaticky prehrať trailer + Automaticky prehrať trailer v rozšírenej karte + Prehrať trailer pre zameraný obsah, ak je dostupný. + Prehrať trailer v rozšírenom pozadí, ak je dostupný. + Prehrať trailer bez zvuku + Stlmiť zvuk traileru počas náhľadu. + Stlmiť zvuk traileru v rozšírených kartách. + Štýl posterov + Upraviť šírku a zaoblenie rohov kariet. + Otvorené + Zatvorené + Umiestnenie traileru v modernom zobrazení + Vyberte, kde sa prehráva trailer v modernom rozložení. + Rozšírená karta + Hero médiá + Kompaktné + Husté + Štandardné + Vyvážené + Komfortné + Veľké + Ostré + Jemné + Klasické + Zaoblené + Pilulkové + Šírka + Zaoblenie rohov + Obnoviť predvolené + Vlastné + + + MDBList hodnotenia + Nastavenie externých hodnotení zobrazených v detaile + Povoliť MDBList hodnotenia + Získať hodnotenia z externých poskytovateľov v detaile metadát + API kľúč + Vyžaduje sa pre získanie hodnotení z MDBList + Trakt + Zobraziť Trakt skóre + IMDb + Zobraziť IMDb skóre (a skryť predvolený IMDb riadok, ak je dostupný) + TMDB + Zobraziť TMDB skóre + Letterboxd + Zobraziť Letterboxd skóre + Rotten Tomatoes + Zobraziť hodnotenie kritikov + Hodnotenie divákov + Zobraziť hodnotenie publika + Metacritic + Zobraziť Metacritic skóre + MDBList API kľúč + Zadajte API kľúč pre získanie externých hodnotení + Zadajte MDBList API kľúč + Nenastavené + Vymazať + + + TMDB obohatenie + Vyberte, ktoré metadáta majú pochádzať z TMDB + Povoliť TMDB obohatenie + Použiť TMDB ako zdroj metadát pre obohatenie údajov doplnkov + Jazyk + Jazyk TMDB metadát pre názov, logo a povolené polia + Grafika + Logo a pozadia z TMDB + Základné informácie + Popis, žánre a hodnotenie z TMDB + Detaily + Dĺžka, dátum vydania, krajina a jazyk z TMDB + Obsadenie + Herci s fotkami, režisér a scenárista z TMDB + Produkcie + Produkčné spoločnosti z TMDB + Stanice + Stanice s logami z TMDB + Epizódy + Názvy epizód, popisy, náhľady a dĺžka z TMDB + Podobné tituly + Odporúčania TMDB na detailnej stránke + Jazyk TMDB + + + Synchronizujte svoj watchlist, postup sledovania, pokračovanie v sledovaní, scrobbly a osobné zoznamy s Trakt. + Pripojený ako %1$s + Prihlásenie do účtu + Prejdite na trakt.tv/activate a zadajte tento kód: + Kód vyprší o %1$s + Prístupový token Trakt sa obnoví o %1$s + Stlačte Prihlásiť sa pre spustenie autentifikácie Trakt. Tu sa zobrazí QR kód. + Chýba TRAKT_CLIENT_ID / TRAKT_CLIENT_SECRET v local.properties. + Okno pokračovania v sledovaní + Trakt história zahrnutá do pokračovania v sledovaní + Nevysielané epizódy + Zobraziť nadchádzajúce epizódy pred ich odvysielaním + Zobrazené + Skryté + V cache + Filmy + Seriály + Epizódy + Hodiny sledovania + Odpojiť + Odpojiť Trakt? + Týmto odpojíte svoj Trakt účet od Nuvio. + Prihlásiť sa + Skúsiť znova + Späť + Okno pokračovania v sledovaní + Vyberte, koľko Trakt aktivity sa má zobraziť v pokračovaní v sledovaní. + Nevysielané epizódy + Vyberte, či sa majú zobrazovať epizódy pred ich vydaním. + Zobraziť nevysielané epizódy + Skryť nevysielané epizódy + Celá história + %1$d dní + + + Debug + Nástroje pre vývojárov a testovacie funkcie (iba debug buildy) + Testovanie popupov / dialógov + Obrazovka chyby prehrávania + Zobraziť testovaciu obrazovku chyby prehrávania + Funkčné prepínače + Experimentálne funkcie a interné prepínače + Logy + Zobraziť alebo exportovať logy aplikácie + Vymazať cache + Vymazať lokálnu cache aplikácie + Vynútiť pád aplikácie + Testovať crash reporting + + + Profily + Spravujte používateľské profily pre tento účet. + Primárny + Zdieľa %1$s primárneho profilu + Upraviť + Pridať profil + Vytvoriť profil + Upraviť profil %1$s + Názov profilu + Farba avatara + Použiť doplnky primárneho profilu + Použiť pluginy primárneho profilu + Vytvára sa… + Vytvoriť + Potvrdiť + Odstrániť + doplnky + pluginy + + + Doplnky + Používajú sa doplnky primárneho profilu a nemožno ich meniť + Nainštalovať doplnok + https://example.com + Inštaluje sa + Inštalovať + Nainštalované + Žiadne doplnky nie sú nainštalované. Pridajte jeden pre začiatok. + Odstrániť + Spravovať z telefónu + Naskenujte QR kód a spravujte doplnky a katalógy z telefónu + Zmeniť poradie katalógov + Ovláda poradie katalógov na domovskej obrazovke (Klasické + Moderné + Mriežka) + Naskenujte telefónom pre správu doplnkov a katalógov + Zavrieť + Potvrdiť zmeny doplnkov a katalógov + Nasledujúce zmeny boli vykonané z vášho telefónu: + Pridané: + Odstránené: + Poradie katalógov bolo zmenené + Katalógy vypnuté na domovskej obrazovke: + Katalógy zapnuté na domovskej obrazovke: + Neboli zistené žiadne zmeny + Zamietnuť + Potvrdiť + + + Zmeniť poradie katalógov + Ovláda poradie katalógov na domovskej obrazovke (Klasické + Moderné + Mriežka). + Zatiaľ nie sú dostupné žiadne katalógy. + Vypnuté na domovskej obrazovke + Zapnúť + Vypnúť + + + Skúsiť znova + Nenašli sa žiadne streamy + Skúste nainštalovať viac doplnkov + Hľadá sa zdroj streamu + Torrent + YouTube + Externý + Ktorý prehrávač sa má použiť? + Interný + Externý + + + Končí o: %1$s + cez %1$s + Oneskorenie titulkov + Chyba prehrávania + Späť + Rýchlosť prehrávania + Ďalšie akcie + Rýchlosť prehrávania + Pomer strán + Otvoriť v externom prehrávači + + + Zdroje + Obnoviť + Zavrieť + Nenašli sa žiadne streamy + + + Zavrieť + Späť + Obnoviť + Nenašli sa žiadne streamy + Žiadne epizódy nie sú dostupné + + + Audio + + + Titulky + Žiadne vstavané titulky nie sú dostupné + Načítavajú sa titulky z doplnkov… + Žiadne titulky z doplnkov nie sú dostupné + Farba textu + Farba obrysu + Obnoviť predvolené + Štýl titulkov + Farba + Resetovať + + + Sledujete + Obsadenie + Späť na detaily + ako %1$s + + + Ďalšia epizóda + + + Stlačte Hotovo na klávesnici pre vyhľadávanie + Hľadať filmy a seriály + + + Synchronizuje sa Trakt knižnica… + Knižnica + Zoznam + Typ + Triediť + Spravovať zoznamy + Spravovať Trakt zoznamy + Zatiaľ žiadne osobné zoznamy. + Vytvoriť + Upraviť + Posunúť hore + Posunúť dole + Odstrániť + Zavrieť + Názov + Popis + Súkromie + Odstrániť tento zoznam? + Týmto odstránite zoznam a všetky položky zoznamu z Trakt. + Odstrániť + LOKÁLNE + Všetko + položiek + Zatiaľ žiadne %1$s + Žiadne %1$s v tomto zozname + Začnite ukladať obľúbené položky, aby sa tu zobrazili + Použite + v detailoch pre pridanie do watchlistu alebo zoznamov + + + Načítava sa… + Synchronizujte knižnicu, postup sledovania, doplnky a pluginy medzi zariadeniami. + Prihlásiť sa pomocou QR + Naskenujte QR kód a dokončite prihlásenie cez telefón + Prihlásený + Celkom + Načítavajú sa synchronizačné údaje… + Odhlásiť sa + + + Prihlásiť sa + Zadávanie emailu/hesla na TV je vypnuté. Pokračujte prihlásením cez QR. + Pokračovať cez QR + + + Prihlásiť sa cez QR + Prihlásenie do účtu + Dokončuje sa prihlásenie… + Kód: %1$s + Vyprší o %1$s + + + Vygenerovať synchronizačný kód + Vytvorte PIN pre ochranu synchronizačného kódu. Zdieľajte ho s ostatnými zariadeniami. + Váš synchronizačný kód + Zadajte tento kód a PIN na druhom zariadení pre prepojenie. + Hotovo + Vyberte PIN (4–8 znakov) + Zadajte PIN + + + Prepojiť zariadenie + Zadajte synchronizačný kód a PIN z druhého zariadenia. + Zariadenie bolo úspešne prepojené! Vaše doplnky a pluginy sa teraz synchronizujú. + Hotovo + Synchronizačný kód + XXXX-XXXX-XXXX-XXXX-XXXX + PIN + Zadajte PIN + + + Používajú sa pluginy primárneho profilu a nemožno ich meniť + Repozitáre (%1$d) + Poskytovatelia (%1$d) + Pluginy + Spravovať lokálne scrapery a poskytovateľov + Pridať repozitár + Pridať + Spravovať z telefónu + Naskenujte QR kód pre pridanie alebo odstránenie repozitárov + Naskenujte telefónom pre správu repozitárov + Zavrieť + Potvrdiť zmeny repozitárov + Nasledujúce zmeny boli vykonané z vášho telefónu: + Pridané: + Odstránené: + Neboli zistené žiadne zmeny + Celkový počet repozitárov: %1$d + Zamietnuť + Potvrdiť + Aktualizované: %1$s + Testovať + Výsledky testu (%1$d streamov) + + + Kto sleduje? + Vyberte profil pre pokračovanie + Použite D-pad na výber profilu + Nenašli sa žiadne profily + PRIMÁRNY + + + Niečo sa pokazilo + Skúsiť znova + Filmografia + + + z %1$s + Žiadne položky nie sú dostupné + Skúste iný katalóg alebo sa vráťte neskôr + + + Vitajte v Nuvio + Vyberte rozloženie domovskej obrazovky + Pokračovať + + + Aktualizácia aplikácie + Sťahuje sa aktualizácia + Povoľte inštalácie z neznámych zdrojov, aby ste mohli pokračovať. + + + Účet + Prihláste sa pre synchronizáciu knižnice, postupu sledovania, doplnkov a pluginov medzi zariadeniami. Knižnica a postup sledovania sa synchronizujú iba vtedy, keď Trakt nie je pripojený. + Synchronizačný kód + Synchronizujte zariadenia bez vytvárania účtu. + Prepojené zariadenia (%1$d) + Žiadne prepojené zariadenia + Odpojiť + + + Načítavajú sa hodnotenia epizód... + Hodnotenia epizód nie sú dostupné. + Séria %1$d – %2$d epizód + + + Objavovať + Načítať viac + Načítava sa... + Typ + Katalóg + Žáner + Vybrať + Predvolené + Vyberte katalóg + Vyberte katalóg prehliadania + Nenašiel sa žiadny obsah + Skúste iný žáner alebo katalóg + + + Celkový počet doplnkov: %1$d + Celkový počet katalógov: %1$d + Katalógy: %1$d – Typy: %2$s + + + ... a ďalších %1$d + %1$d poskytovateľov + Povolené + Zakázané + Zatiaľ neboli pridané žiadne repozitáre.\nPridajte repozitár pre začiatok. + + + Upraviť profil %1$d + + + Audio passthrough (TrueHD, DTS, AC-3 atď.) je automatický. Pri pripojení k kompatibilnému AV prijímaču alebo soundbaru cez HDMI sa bezstratové audio odosiela bez dekódovania. + DV7 – HEVC fallback + + + Domov + Objavovať + Hľadať + Knižnica + Doplnky + Nastavenia + Rozbaliť bočný panel + + Zavrieť + Otvoriť nastavenia + Inštalovať + Ignorovať + diff --git a/app/src/main/res/xml/locale_config.xml b/app/src/main/res/xml/locale_config.xml index 917dae4d..aea56879 100644 --- a/app/src/main/res/xml/locale_config.xml +++ b/app/src/main/res/xml/locale_config.xml @@ -2,4 +2,5 @@ + From 06500f65c49b82058ee78ad018abfee7236fe6e7 Mon Sep 17 00:00:00 2001 From: craitose <52755601+craitose@users.noreply.github.com> Date: Sat, 28 Feb 2026 07:03:12 +0000 Subject: [PATCH 3/3] Update StreamAutoPlaySelector.kt --- .../java/com/nuvio/tv/core/player/StreamAutoPlaySelector.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/nuvio/tv/core/player/StreamAutoPlaySelector.kt b/app/src/main/java/com/nuvio/tv/core/player/StreamAutoPlaySelector.kt index 17db2bc0..905f340c 100644 --- a/app/src/main/java/com/nuvio/tv/core/player/StreamAutoPlaySelector.kt +++ b/app/src/main/java/com/nuvio/tv/core/player/StreamAutoPlaySelector.kt @@ -106,7 +106,9 @@ object StreamAutoPlaySelector { StreamAutoPlayMode.FIRST_STREAM -> candidateStreams.firstOrNull { it.getStreamUrl() != null } StreamAutoPlayMode.REGEX_MATCH -> { val pattern = regexPattern.trim() - if (pattern.isBlank()) return null + if (pattern.isBlank()) { + return null + } // Try to compile user regex val userRegex = runCatching { Regex(pattern, RegexOption.IGNORE_CASE) }