Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
3dee197
feat(playlist): auto-detect import method that parses pasted provider…
claude Aug 11, 2026
c26596a
fix(playlist): keep the pasted provider message when switching import…
claude Aug 11, 2026
de6d012
feat(playlist): recognize decorated reseller labels in auto-detect im…
claude Aug 11, 2026
7b57b22
feat(playlist): fold negative-circled labels and parse dual device ID…
claude Aug 11, 2026
b8af728
fix(playlist): do not fold real flag emoji in auto-detect label folding
claude Aug 15, 2026
e17a4ba
feat(playlist): extend auto-detect with bare handouts, spaced serials…
claude Aug 15, 2026
98c3b44
fix(playlist): address bot review — no identity cross-pairing across …
claude Aug 15, 2026
1d59932
fix(playlist): omit ambiguous portals for multi-MAC pastes, align sca…
claude Aug 15, 2026
9b58ed5
ci: retrigger checks after embedded-mpv frame-copy smoke flake
claude Aug 15, 2026
3248c54
fix(playlist): cover the generic-URL fallback in the multi-MAC portal…
claude Aug 15, 2026
c0df0df
ci: retrigger checks after category-management macOS E2E flake
claude Aug 15, 2026
c67f0f8
fix(playlist): DOM-safety caps far beyond real handouts, port-aware p…
claude Aug 15, 2026
ba19f51
fix(playlist): lazy capped scanners and wrapping candidate headers
claude Aug 15, 2026
526e8ab
fix(playlist): mask query passwords on M3U cards, drop stale auto-det…
claude Aug 15, 2026
6e81d70
fix(playlist): strip panel_api.php endpoints, path-aware portal ambig…
claude Aug 15, 2026
f3723eb
fix(playlist): apply separately labeled ports to detected API and por…
claude Aug 15, 2026
2ef6e51
fix(playlist): port-aware portal ambiguity keys, mask URLs beyond the…
claude Aug 15, 2026
70f5e41
test(playlist): E2E coverage for the auto-detect handoff; sanitize la…
claude Aug 16, 2026
422459e
fix(playlist): disambiguate the MAC label in the auto-detect E2E
claude Aug 16, 2026
34a5aa0
fix(playlist): mask every password parameter on cards, skip host labe…
claude Aug 16, 2026
36f340c
fix(playlist): stop URL spans at inline delimiters, IPv6-safe port ch…
claude Aug 16, 2026
2cea665
fix(playlist): keep IPv6 brackets, honor written default ports, colli…
claude Aug 16, 2026
d0d3e0b
fix(playlist): mask HTTP Basic passwords on auto-detect cards
claude Aug 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .changes/playlist-auto-detect-import.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
type: feature
area: playlist
---

The Add playlist dialog has a new "Auto-detect" method: paste whatever your
provider sent you — links, Xtream credentials, a MAC address with device IDs —
and IPTVnator recognizes the source type and fills the matching import form
for you to review. Detection runs entirely inside the app; nothing you paste
is sent anywhere.
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ This is an Nx monorepo with the following structure:
- **libs/** - Shared libraries:
- **epg/data-access** - EPG services, runtime bridge, program normalization
- **m3u-state** - NgRx state management for M3U playlists
- **playlist/import/feature** - Playlist import flows (file/URL/text upload, Xtream and Stalker import dialogs)
- **playlist/import/feature** - Playlist import flows (file/URL/text upload, Xtream and Stalker import dialogs, and the "Auto-detect" method: paste a provider message, `detectProviderImportCandidates` in `libs/shared/interfaces` deterministically extracts URLs/credentials/MAC+device identity and prefills the matching form — detection only proposes, the target form's own validation and behavioral probes stay authoritative)
- **playlist/m3u/feature-player** - M3U video player page and `/workspace/playlists/:id` routes
- **playlist/shared/{ui,util}** - Shared playlist UI and utilities
- **portal/xtream/{data-access,feature}** - XtreamStore, services, data sources; routed Xtream components
Expand Down
17 changes: 15 additions & 2 deletions apps/web/src/assets/i18n/ar.json
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,9 @@
"METHOD_STALKER_LABEL": "بوابة Stalker",
"METHOD_STALKER_SUB": "عنوان MAC ورابط البوابة",
"METHOD_TEXT_LABEL": "نص m3u الخام",
"METHOD_TEXT_SUB": "للقوائم العابرة أو عندما يتوفر لديك النص فقط"
"METHOD_TEXT_SUB": "للقوائم العابرة أو عندما يتوفر لديك النص فقط",
"METHOD_AUTO_LABEL": "اكتشاف تلقائي",
"METHOD_AUTO_SUB": "الصق رسالة مزوّد الخدمة"
},
"FILE_UPLOAD": {
"DRAG_DROP": "اسحب وأفلت الملفات هنا",
Expand Down Expand Up @@ -228,7 +230,18 @@
"STALKER": "Stalker"
},
"IMPORTED_AS_TEXT": "مستوردة كنص",
"PARSING_ERROR": "خطأ: فشل التحليل، ليست قائمة تشغيل صالحة:"
"PARSING_ERROR": "خطأ: فشل التحليل، ليست قائمة تشغيل صالحة:",
"AUTO_DETECT": {
"LABEL": "رسالة مزوّد الخدمة",
"PLACEHOLDER": "الصق كل ما أرسله مزوّد الخدمة — الروابط واسم المستخدم وكلمة المرور وعنوان MAC…",
"PRIVACY_HINT": "يتم الاكتشاف محليًا داخل التطبيق؛ النص الملصق لا يُرسل إلى أي مكان.",
"NO_MATCHES": "لم يتم التعرف على شيء بعد. الصق الرسالة كاملة مع الرابط أو بيانات الدخول.",
"CONFIDENCE_HIGH": "تطابق مؤكد",
"CONFIDENCE_MEDIUM": "تطابق محتمل",
"CONFIDENCE_LOW": "تخمين",
"USE": "ملء النموذج",
"M3U_TEXT_NOTE": "يبدو أنها قائمة تشغيل M3U — سيتم استيرادها كنص ملصق."
}
},
"SETTINGS": {
"TITLE": "الإعدادات",
Expand Down
17 changes: 15 additions & 2 deletions apps/web/src/assets/i18n/ary.json
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,9 @@
"METHOD_STALKER_LABEL": "بوابة Stalker",
"METHOD_STALKER_SUB": "عنوان MAC ورابط البوابة",
"METHOD_TEXT_LABEL": "نص m3u خام",
"METHOD_TEXT_SUB": "للقوائم المؤقتة ولا إلى عندك غير النص"
"METHOD_TEXT_SUB": "للقوائم المؤقتة ولا إلى عندك غير النص",
"METHOD_AUTO_LABEL": "اكتشاف تلقائي",
"METHOD_AUTO_SUB": "الصق رسالة مزوّد الخدمة"
},
"FILE_UPLOAD": {
"DRAG_DROP": "جر وأفلت الملفات هنا",
Expand Down Expand Up @@ -228,7 +230,18 @@
"STALKER": "Stalker"
},
"IMPORTED_AS_TEXT": "استورد كنص",
"PARSING_ERROR": "خطأ: التحليل فشل، ماشي قائمة تشغيل صحيحة:"
"PARSING_ERROR": "خطأ: التحليل فشل، ماشي قائمة تشغيل صحيحة:",
"AUTO_DETECT": {
"LABEL": "رسالة مزوّد الخدمة",
"PLACEHOLDER": "الصق كل ما أرسله مزوّد الخدمة — الروابط واسم المستخدم وكلمة المرور وعنوان MAC…",
"PRIVACY_HINT": "يتم الاكتشاف محليًا داخل التطبيق؛ النص الملصق لا يُرسل إلى أي مكان.",
"NO_MATCHES": "لم يتم التعرف على شيء بعد. الصق الرسالة كاملة مع الرابط أو بيانات الدخول.",
"CONFIDENCE_HIGH": "تطابق مؤكد",
"CONFIDENCE_MEDIUM": "تطابق محتمل",
"CONFIDENCE_LOW": "تخمين",
"USE": "ملء النموذج",
"M3U_TEXT_NOTE": "يبدو أنها قائمة تشغيل M3U — سيتم استيرادها كنص ملصق."
}
},
"SETTINGS": {
"TITLE": "الإعدادات",
Expand Down
17 changes: 15 additions & 2 deletions apps/web/src/assets/i18n/by.json
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,9 @@
"METHOD_STALKER_LABEL": "Stalker партал",
"METHOD_STALKER_SUB": "MAC-адрас і URL партала",
"METHOD_TEXT_LABEL": "Тэкст M3U",
"METHOD_TEXT_SUB": "Для разавых спісаў або калі ў вас ёсць толькі тэкст"
"METHOD_TEXT_SUB": "Для разавых спісаў або калі ў вас ёсць толькі тэкст",
"METHOD_AUTO_LABEL": "Аўтавызначэнне",
"METHOD_AUTO_SUB": "Устаўце паведамленне ад правайдара"
},
"FILE_UPLOAD": {
"DRAG_DROP": "Перацягніце файл у гэтую вобласць",
Expand Down Expand Up @@ -228,7 +230,18 @@
"STALKER": "Stalker"
},
"IMPORTED_AS_TEXT": "Імпартавана як тэкст",
"PARSING_ERROR": "Памылка парсінгу, несапраўдны плэйліст:"
"PARSING_ERROR": "Памылка парсінгу, несапраўдны плэйліст:",
"AUTO_DETECT": {
"LABEL": "Паведамленне ад правайдара",
"PLACEHOLDER": "Устаўце ўсё, што даслаў правайдар — спасылкі, лагін і пароль, MAC-адрас…",
"PRIVACY_HINT": "Распазнаванне выконваецца лакальна ў праграме; устаўлены тэкст нікуды не адпраўляецца.",
"NO_MATCHES": "Пакуль нічога не распазнана. Устаўце паведамленне цалкам — са спасылкай або ўліковымі данымі.",
"CONFIDENCE_HIGH": "Дакладнае супадзенне",
"CONFIDENCE_MEDIUM": "Верагоднае супадзенне",
"CONFIDENCE_LOW": "Здагадка",
"USE": "Запоўніць форму",
"M3U_TEXT_NOTE": "Падобна на плэйліст M3U — ён будзе імпартаваны як устаўлены тэкст."
}
},
"SETTINGS": {
"TITLE": "Налады",
Expand Down
17 changes: 15 additions & 2 deletions apps/web/src/assets/i18n/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,9 @@
"METHOD_STALKER_LABEL": "Stalker-Portal",
"METHOD_STALKER_SUB": "MAC-Adresse und Portal-URL",
"METHOD_TEXT_LABEL": "M3U-Text",
"METHOD_TEXT_SUB": "Für einmalige Listen oder wenn Sie nur Text haben"
"METHOD_TEXT_SUB": "Für einmalige Listen oder wenn Sie nur Text haben",
"METHOD_AUTO_LABEL": "Automatisch erkennen",
"METHOD_AUTO_SUB": "Nachricht des Anbieters einfügen"
},
"FILE_UPLOAD": {
"DRAG_DROP": "Ziehen Sie Dateien per Drag & Drop",
Expand Down Expand Up @@ -228,7 +230,18 @@
"STALKER": "Stalker"
},
"IMPORTED_AS_TEXT": "Als Text importiert",
"PARSING_ERROR": "Fehler: Parsen fehlgeschlagen, keine gültige Playlist:"
"PARSING_ERROR": "Fehler: Parsen fehlgeschlagen, keine gültige Playlist:",
"AUTO_DETECT": {
"LABEL": "Nachricht Ihres Anbieters",
"PLACEHOLDER": "Fügen Sie alles ein, was Ihr Anbieter geschickt hat — Links, Benutzername und Passwort, MAC-Adresse…",
"PRIVACY_HINT": "Die Erkennung läuft lokal in der App; der eingefügte Text wird nirgendwohin gesendet.",
"NO_MATCHES": "Noch nichts erkannt. Fügen Sie die vollständige Nachricht mit Link oder Zugangsdaten ein.",
"CONFIDENCE_HIGH": "Sichere Übereinstimmung",
"CONFIDENCE_MEDIUM": "Wahrscheinliche Übereinstimmung",
"CONFIDENCE_LOW": "Vermutung",
"USE": "Formular ausfüllen",
"M3U_TEXT_NOTE": "Sieht wie eine M3U-Playlist aus — sie wird als eingefügter Text importiert."
}
},
"SETTINGS": {
"TITLE": "Einstellungen",
Expand Down
17 changes: 15 additions & 2 deletions apps/web/src/assets/i18n/el.json
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,9 @@
"METHOD_STALKER_LABEL": "Πύλη Stalker",
"METHOD_STALKER_SUB": "MAC address και URL πύλης",
"METHOD_TEXT_LABEL": "Ακατέργαστο κείμενο m3u",
"METHOD_TEXT_SUB": "Για λίστες μίας χρήσης ή όταν έχετε μόνο κείμενο"
"METHOD_TEXT_SUB": "Για λίστες μίας χρήσης ή όταν έχετε μόνο κείμενο",
"METHOD_AUTO_LABEL": "Αυτόματη αναγνώριση",
"METHOD_AUTO_SUB": "Επικολλήστε το μήνυμα του παρόχου σας"
},
"FILE_UPLOAD": {
"DRAG_DROP": "Σύρετε και αποθέστε αρχεία εδώ",
Expand Down Expand Up @@ -228,7 +230,18 @@
"STALKER": "Stalker"
},
"IMPORTED_AS_TEXT": "Εισήχθη ως κείμενο",
"PARSING_ERROR": "Σφάλμα: Η ανάλυση απέτυχε, δεν είναι έγκυρη λίστα αναπαραγωγής:"
"PARSING_ERROR": "Σφάλμα: Η ανάλυση απέτυχε, δεν είναι έγκυρη λίστα αναπαραγωγής:",
"AUTO_DETECT": {
"LABEL": "Μήνυμα του παρόχου σας",
"PLACEHOLDER": "Επικολλήστε ό,τι σας έστειλε ο πάροχος — συνδέσμους, όνομα χρήστη και κωδικό, διεύθυνση MAC…",
"PRIVACY_HINT": "Η αναγνώριση γίνεται τοπικά στην εφαρμογή· το κείμενο δεν αποστέλλεται πουθενά.",
"NO_MATCHES": "Δεν αναγνωρίστηκε τίποτα ακόμη. Επικολλήστε ολόκληρο το μήνυμα με τον σύνδεσμο ή τα διαπιστευτήρια.",
"CONFIDENCE_HIGH": "Σίγουρη αντιστοιχία",
"CONFIDENCE_MEDIUM": "Πιθανή αντιστοιχία",
"CONFIDENCE_LOW": "Εικασία",
"USE": "Συμπλήρωση φόρμας",
"M3U_TEXT_NOTE": "Μοιάζει με λίστα M3U — θα εισαχθεί ως επικολλημένο κείμενο."
}
},
"SETTINGS": {
"TITLE": "Ρυθμίσεις",
Expand Down
17 changes: 15 additions & 2 deletions apps/web/src/assets/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,9 @@
"METHOD_STALKER_LABEL": "Stalker portal",
"METHOD_STALKER_SUB": "MAC address and portal URL",
"METHOD_TEXT_LABEL": "Raw m3u text",
"METHOD_TEXT_SUB": "For one-off lists or when you only have text"
"METHOD_TEXT_SUB": "For one-off lists or when you only have text",
"METHOD_AUTO_LABEL": "Auto-detect",
"METHOD_AUTO_SUB": "Paste the message from your provider"
},
"FILE_UPLOAD": {
"DRAG_DROP": "Drop an .m3u or .m3u8 file here",
Expand Down Expand Up @@ -228,7 +230,18 @@
"STALKER": "Stalker"
},
"IMPORTED_AS_TEXT": "Imported as text",
"PARSING_ERROR": "Error: Parsing failed, not a valid playlist:"
"PARSING_ERROR": "Error: Parsing failed, not a valid playlist:",
"AUTO_DETECT": {
"LABEL": "Message from your provider",
"PLACEHOLDER": "Paste everything your provider sent — links, username and password, MAC address…",
"PRIVACY_HINT": "Detection runs locally in the app; nothing you paste is sent anywhere.",
"NO_MATCHES": "Nothing recognized yet. Paste the full message including the link or credentials.",
"CONFIDENCE_HIGH": "Confident match",
"CONFIDENCE_MEDIUM": "Likely match",
"CONFIDENCE_LOW": "Guess",
"USE": "Fill the form",
"M3U_TEXT_NOTE": "Looks like a raw M3U playlist — it will be imported as pasted text."
}
},
"SETTINGS": {
"TITLE": "Settings",
Expand Down
17 changes: 15 additions & 2 deletions apps/web/src/assets/i18n/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,9 @@
"METHOD_STALKER_LABEL": "Portal Stalker",
"METHOD_STALKER_SUB": "Dirección MAC y URL del portal",
"METHOD_TEXT_LABEL": "Texto m3u sin formato",
"METHOD_TEXT_SUB": "Para listas puntuales o cuando solo tienes texto"
"METHOD_TEXT_SUB": "Para listas puntuales o cuando solo tienes texto",
"METHOD_AUTO_LABEL": "Detección automática",
"METHOD_AUTO_SUB": "Pega el mensaje de tu proveedor"
},
"FILE_UPLOAD": {
"DRAG_DROP": "Arrastre & suelte archivos aquí",
Expand Down Expand Up @@ -228,7 +230,18 @@
"STALKER": "Stalker"
},
"IMPORTED_AS_TEXT": "Importado como texto",
"PARSING_ERROR": "Error: Error al analizar, no es una lista de reproducción válida:"
"PARSING_ERROR": "Error: Error al analizar, no es una lista de reproducción válida:",
"AUTO_DETECT": {
"LABEL": "Mensaje de tu proveedor",
"PLACEHOLDER": "Pega todo lo que te envió tu proveedor: enlaces, usuario y contraseña, dirección MAC…",
"PRIVACY_HINT": "La detección se realiza localmente en la aplicación; el texto pegado no se envía a ningún sitio.",
"NO_MATCHES": "Aún no se ha reconocido nada. Pega el mensaje completo con el enlace o las credenciales.",
"CONFIDENCE_HIGH": "Coincidencia segura",
"CONFIDENCE_MEDIUM": "Coincidencia probable",
"CONFIDENCE_LOW": "Suposición",
"USE": "Rellenar el formulario",
"M3U_TEXT_NOTE": "Parece una lista M3U: se importará como texto pegado."
}
},
"SETTINGS": {
"TITLE": "Ajustes",
Expand Down
17 changes: 15 additions & 2 deletions apps/web/src/assets/i18n/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,9 @@
"METHOD_STALKER_LABEL": "Portail Stalker",
"METHOD_STALKER_SUB": "Adresse MAC et URL du portail",
"METHOD_TEXT_LABEL": "Texte m3u brut",
"METHOD_TEXT_SUB": "Pour les listes ponctuelles ou quand vous n'avez que du texte"
"METHOD_TEXT_SUB": "Pour les listes ponctuelles ou quand vous n'avez que du texte",
"METHOD_AUTO_LABEL": "Détection automatique",
"METHOD_AUTO_SUB": "Collez le message de votre fournisseur"
},
"FILE_UPLOAD": {
"DRAG_DROP": "Glissez un fichier ici",
Expand Down Expand Up @@ -228,7 +230,18 @@
"STALKER": "Stalker"
},
"IMPORTED_AS_TEXT": "Importé sous forme de texte",
"PARSING_ERROR": "Erreur : échec de l'analyse, liste de lecture non valide :"
"PARSING_ERROR": "Erreur : échec de l'analyse, liste de lecture non valide :",
"AUTO_DETECT": {
"LABEL": "Message de votre fournisseur",
"PLACEHOLDER": "Collez tout ce que votre fournisseur a envoyé : liens, identifiant et mot de passe, adresse MAC…",
"PRIVACY_HINT": "La détection s'effectue localement dans l'application ; le texte collé n'est envoyé nulle part.",
"NO_MATCHES": "Rien de reconnu pour l'instant. Collez le message complet avec le lien ou les identifiants.",
"CONFIDENCE_HIGH": "Correspondance sûre",
"CONFIDENCE_MEDIUM": "Correspondance probable",
"CONFIDENCE_LOW": "Supposition",
"USE": "Remplir le formulaire",
"M3U_TEXT_NOTE": "Ressemble à une liste M3U — elle sera importée comme texte collé."
}
},
"SETTINGS": {
"TITLE": "Paramètres",
Expand Down
17 changes: 15 additions & 2 deletions apps/web/src/assets/i18n/hu.json
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,9 @@
"METHOD_STALKER_LABEL": "Stalker-portál",
"METHOD_STALKER_SUB": "MAC-cím és a portál URL-címe",
"METHOD_TEXT_LABEL": "Nyers M3U-szöveg",
"METHOD_TEXT_SUB": "Egyszeri listákhoz, vagy ha csak szöveg áll rendelkezésére"
"METHOD_TEXT_SUB": "Egyszeri listákhoz, vagy ha csak szöveg áll rendelkezésére",
"METHOD_AUTO_LABEL": "Automatikus felismerés",
"METHOD_AUTO_SUB": "Illessze be a szolgáltató üzenetét"
},
"FILE_UPLOAD": {
"DRAG_DROP": "Húzzon ide egy .m3u- vagy .m3u8-fájlt",
Expand Down Expand Up @@ -228,7 +230,18 @@
"STALKER": "Stalker"
},
"IMPORTED_AS_TEXT": "Szövegként importálva",
"PARSING_ERROR": "Hiba: a feldolgozás sikertelen; ez nem érvényes lejátszási lista:"
"PARSING_ERROR": "Hiba: a feldolgozás sikertelen; ez nem érvényes lejátszási lista:",
"AUTO_DETECT": {
"LABEL": "A szolgáltató üzenete",
"PLACEHOLDER": "Illesszen be mindent, amit a szolgáltató küldött — linkek, felhasználónév és jelszó, MAC-cím…",
"PRIVACY_HINT": "A felismerés helyben, az alkalmazásban történik; a beillesztett szöveg nem kerül elküldésre.",
"NO_MATCHES": "Még semmi sem felismerhető. Illessze be a teljes üzenetet a linkkel vagy a belépési adatokkal.",
"CONFIDENCE_HIGH": "Biztos találat",
"CONFIDENCE_MEDIUM": "Valószínű találat",
"CONFIDENCE_LOW": "Feltételezés",
"USE": "Űrlap kitöltése",
"M3U_TEXT_NOTE": "M3U-lejátszási listának tűnik — beillesztett szövegként lesz importálva."
}
},
"SETTINGS": {
"TITLE": "Beállítások",
Expand Down
17 changes: 15 additions & 2 deletions apps/web/src/assets/i18n/it.json
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,9 @@
"METHOD_STALKER_LABEL": "Portale Stalker",
"METHOD_STALKER_SUB": "Indirizzo MAC e URL del portale",
"METHOD_TEXT_LABEL": "Testo m3u grezzo",
"METHOD_TEXT_SUB": "Per liste occasionali o quando hai solo il testo"
"METHOD_TEXT_SUB": "Per liste occasionali o quando hai solo il testo",
"METHOD_AUTO_LABEL": "Rilevamento automatico",
"METHOD_AUTO_SUB": "Incolla il messaggio del tuo provider"
},
"FILE_UPLOAD": {
"DRAG_DROP": "Trascina e rilascia qui i file",
Expand Down Expand Up @@ -228,7 +230,18 @@
"STALKER": "Stalker"
},
"IMPORTED_AS_TEXT": "Importato come testo",
"PARSING_ERROR": "Errore: analisi fallita, non è una playlist valida:"
"PARSING_ERROR": "Errore: analisi fallita, non è una playlist valida:",
"AUTO_DETECT": {
"LABEL": "Messaggio del tuo provider",
"PLACEHOLDER": "Incolla tutto ciò che il provider ti ha inviato: link, nome utente e password, indirizzo MAC…",
"PRIVACY_HINT": "Il rilevamento avviene localmente nell'app; il testo incollato non viene inviato da nessuna parte.",
"NO_MATCHES": "Ancora nulla di riconosciuto. Incolla il messaggio completo con il link o le credenziali.",
"CONFIDENCE_HIGH": "Corrispondenza sicura",
"CONFIDENCE_MEDIUM": "Corrispondenza probabile",
"CONFIDENCE_LOW": "Ipotesi",
"USE": "Compila il modulo",
"M3U_TEXT_NOTE": "Sembra una playlist M3U: verrà importata come testo incollato."
}
},
"SETTINGS": {
"TITLE": "Impostazioni IPTVnator",
Expand Down
Loading
Loading