From bb49f79c284fc7b4f1cc47513913e2cca4893ddb Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 16 Jun 2018 14:25:34 +0200 Subject: [PATCH 01/66] Add files via upload --- .../resources/language/Italian/strings.po | 3543 +++++++++++++++++ 1 file changed, 3543 insertions(+) create mode 100644 plugin.video.alfa/resources/language/Italian/strings.po diff --git a/plugin.video.alfa/resources/language/Italian/strings.po b/plugin.video.alfa/resources/language/Italian/strings.po new file mode 100644 index 00000000..c3c84d41 --- /dev/null +++ b/plugin.video.alfa/resources/language/Italian/strings.po @@ -0,0 +1,3543 @@ +# Kodi Media Center language file +# strings 30000 thru 30999 reserved for plugins and plugin settings +# +msgid "" +msgstr "" +"Project-Id-Version: KODI Main\n" +"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2018-03-26 03:02+0200\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.0.4\n" +"Last-Translator: MrTruth\n" +"Last-Translator: Angedam\n" +"Language: it_IT\n" + +msgctxt "#20000" +msgid "Icarus" +msgstr "Icarus" + +msgctxt "#30001" +msgid "Check for updates:" +msgstr "Verifica aggiornamenti:" + +msgctxt "#30002" +msgid "Enable adult mode:" +msgstr "Abilita modalità adulti:" + +msgctxt "#30003" +msgid "Enable debug logging:" +msgstr "Abilita logging di debug:" + +msgctxt "#30004" +msgid "Automatic update channels:" +msgstr "Aggiorna automaticamente i canali:" + +msgctxt "#30005" +msgid "Default play setting:" +msgstr "Impostazioni predefinite di riproduzione:" + +msgctxt "#30006" +msgid "Ask" +msgstr "Chiedi" + +msgctxt "#30007" +msgid "Watch in low quality" +msgstr "Guarda in bassa qualità" + +msgctxt "#30008" +msgid "Watch in high quality" +msgstr "Guarda in alta qualità" + +msgctxt "#30010" +msgid "Channel icons view:" +msgstr "Visualizzazione icone dei canali:" + +msgctxt "#30011" +msgid "Poster (vertical)" +msgstr "Poster (verticale)" + +msgctxt "#30012" +msgid "Banner (horizontal)" +msgstr "Banner (orizzontale)" + +msgctxt "#30014" +msgid "Username:" +msgstr "Username:" + +msgctxt "#30015" +msgid "Password:" +msgstr "Password:" + +msgctxt "#30017" +msgid "Download path:" +msgstr "Percorso download:" + +msgctxt "#30018" +msgid "Download list path:" +msgstr "Percorso lista downloads:" + +msgctxt "#30019" +msgid "Filter channels by language:" +msgstr "Filtra canale per lingua:" + +msgctxt "#30043" +msgid "Force view mode:" +msgstr "Forza modalità di visualizzazione:" + +msgctxt "#30044" +msgid "Play mode:" +msgstr "Modalità di riproduzione:" + +msgctxt "#30050" +msgid "Server connection error" +msgstr "Errore connessione server" + +msgctxt "#30051" +msgid "Website error message (http code %d)" +msgstr "Messaggio d'errore sito web (codice http %d)" + +msgctxt "#30055" +msgid "Video not available" +msgstr "Video non disponibile" + +msgctxt "#30057" +msgid "The video has been removed from %s" +msgstr "Il video è stato rimosso da %s" + +msgctxt "#30058" +msgid "Try another server or channel" +msgstr "Prova un altro server o canale" + +msgctxt "#30065" +msgid "Unsopported Server" +msgstr "Server non supportato" + +msgctxt "#30067" +msgid "Videolibrary path:" +msgstr "Percorso videoteca:" + +msgctxt "#30068" +msgid "Filter by servers:" +msgstr "Filtra per server:" + +msgctxt "#30100" +msgid "Settings" +msgstr "Impostazioni" + +msgctxt "#30101" +msgid "Downloads" +msgstr "Downloads" + +msgctxt "#30102" +msgid "Favorites" +msgstr "Preferiti" + +msgctxt "#30103" +msgid "Global search" +msgstr "Ricerca globale" + +msgctxt "#30104" +msgid "Help" +msgstr "Aiuto" + +msgctxt "#30105" +msgid "Removed from favorites" +msgstr "Rimosso dai preferiti" + +msgctxt "#30108" +msgid "added to favorites" +msgstr "aggiunto ai preferiti" + +msgctxt "#30109" +msgid "added to download list" +msgstr "aggiunto alla lista download" + +msgctxt "#30112" +msgid "Enter title to search" +msgstr "Inserisci il titolo da cercare" + +msgctxt "#30118" +msgid "Channels" +msgstr "Canali" + +msgctxt "#30119" +msgid "Choose a Category" +msgstr "Categorie" + +msgctxt "#30121" +msgid "All" +msgstr "Tutti i canali" + +msgctxt "#30122" +msgid "Movies" +msgstr "Film" + +msgctxt "#30123" +msgid "TV Shows" +msgstr "Serie TV" + +msgctxt "#30124" +msgid "Anime" +msgstr "Anime" + +msgctxt "#30125" +msgid "Documentaries" +msgstr "Documentari" + +msgctxt "#30126" +msgid "Adult" +msgstr "Adulti" + +msgctxt "#30130" +msgid "Recent" +msgstr "Novità" + +msgctxt "#30131" +msgid "Videolibrary" +msgstr "Videoteca" + +msgctxt "#30135" +msgid "added to the videolibrary" +msgstr "aggiunto alla libreria" + +msgctxt "#30136" +msgid "Original version" +msgstr "Versione Originale" + +msgctxt "#30137" +msgid "Direct" +msgstr "Diretto" + +msgctxt "#30151" +msgid "Watch the video" +msgstr "Guarda il video" + +msgctxt "#30153" +msgid "Download" +msgstr "Download" + +msgctxt "#30154" +msgid "Remove from favorites" +msgstr "Rimuovi dai preferiti" + +msgctxt "#30155" +msgid "Add to favorites" +msgstr "Aggiungi ai preferiti" + +msgctxt "#30161" +msgid "Add to videolibrary" +msgstr "Aggiungi alla videoteca" + +msgctxt "#30162" +msgid "Search for trailer" +msgstr "Cerca il trailer" + +msgctxt "#30163" +msgid "Choose an option" +msgstr "Scegli un'opzione" + +msgctxt "#30164" +msgid "Delete this file" +msgstr "Cancella questo file" + +msgctxt "#30200" +msgid "Square" +msgstr "Square" + +msgctxt "#30300" +msgid "Faster context menus" +msgstr "Menu contestuali rapidi (possono causare il mancato funzionamento di alcune opzioni)" + +msgctxt "#30501" +msgid "Paths" +msgstr "Percorsi" + +msgctxt "#30974" +msgid "Search in Channels" +msgstr "Cerca nei Canali" + +msgctxt "#30975" +msgid "Movie Info" +msgstr "Informazioni Film" + +msgctxt "#30976" +msgid "TVShows - Airing Today" +msgstr "Serie TV - In Onda" + +msgctxt "#30977" +msgid "Last Episodes - On-Air" +msgstr "Ultimi Episodi - In Onda" + +msgctxt "#30978" +msgid "New TVShows" +msgstr "Nuove Serie TV" + +msgctxt "#30979" +msgid "Character Info" +msgstr "Informazioni Persona" + +msgctxt "#30980" +msgid "Search by Title" +msgstr "Cerca per Titolo ..." + +msgctxt "#30981" +msgid "Search by Person" +msgstr "Cerca per Persona ..." + +msgctxt "#30982" +msgid "Search by Company" +msgstr "Cerca per Società" + +msgctxt "#30983" +msgid "Now Playing" +msgstr "Oggi in Sala" + +msgctxt "#30984" +msgid "Popular" +msgstr "Popolari" + +msgctxt "#30985" +msgid "Top Rated" +msgstr "Migliori" + +msgctxt "#30986" +msgid "Search by Collection" +msgstr "Ricerca per Collezione ..." + +msgctxt "#30987" +msgid "Genre" +msgstr "Genere" + +msgctxt "#30988" +msgid "Search by Year" +msgstr "Ricerca per Anno ..." + +msgctxt "#30989" +msgid "Search Similar Movies" +msgstr "Cerca Film Simili ..." + +msgctxt "#30990" +msgid "Search TV show" +msgstr "Cerca Serie TV ..." + +msgctxt "#30991" +msgid "Library" +msgstr "Videoteca" + +msgctxt "#30992" +msgid "Next Page" +msgstr "Successivo" + +msgctxt "#30993" +msgid "Looking for %s..." +msgstr "Ricerca di %s ..." + +msgctxt "#30994" +msgid "Searching in %s..." +msgstr "Sto cercando in %s ..." + +msgctxt "#30995" +msgid "%d found so far: %s" +msgstr "%d trovati sinora: %s" + +msgctxt "#30996" +msgid "Most Voted" +msgstr "Più Votati" + +msgctxt "#30997" +msgid "Academy Awards" +msgstr "Premi Oscar" + +msgctxt "#30998" +msgid "Shortcut" +msgstr "Scorciatoia" + +msgctxt "#30999" +msgid "Add key to open Shortcut" +msgstr "Aggiungi tasto per aprire la scorciatoia" + +msgctxt "#50000" +msgid "Sagas" +msgstr "Saghe" + +msgctxt "#50001" +msgid "Today on TV" +msgstr "Oggi in TV" + +msgctxt "#50002" +msgid "Latest News" +msgstr "Novità" + +msgctxt "#50003" +msgid "Loading" +msgstr "Caricamento" + +msgctxt "#50004" +msgid "Path: " +msgstr "Percorso: " + +msgctxt "#59970" +msgid "Synchronization with Trakt started" +msgstr "Sincronizzazione con Trakt iniziata" + +msgctxt "#59971" +msgid "Icarus Auto-configuration" +msgstr "Icarus Auto-configurazione" + +msgctxt "#59972" +msgid "Search for: '%s' | Found: %d vídeos | Time: %2.f seconds" +msgstr "Ricerca di: '%s' | Trovati: %d vídeos | Tempo: %2.f secondi" + +msgctxt "#59973" +msgid "Search Cancelled" +msgstr "Ricerca annullata" + +msgctxt "#59974" +msgid "Choose categories" +msgstr "Scegli categorie" + +msgctxt "#59975" +msgid "Subtitles" +msgstr "Sottotitolati" + +msgctxt "#59976" +msgid "Latin" +msgstr "Sudamericano" + +msgctxt "#59977" +msgid "4k" +msgstr "4k" + +msgctxt "#59978" +msgid "horror" +msgstr "horror" + +msgctxt "#59979" +msgid "kids" +msgstr "bambini" + +msgctxt "#59980" +msgid "Castilian" +msgstr "castigliano" + +msgctxt "#59981" +msgid "latin" +msgstr "sudamericano" + +msgctxt "#59982" +msgid "torrent" +msgstr "torrent" + +msgctxt "#59983" +msgid "" +msgstr "" + +msgctxt "#59984" +msgid "An error has occurred in icarus, \nCheck log for more details." +msgstr "Si è verificato un errore in icarus, \nControlla il log per maggiori dettagli." + +msgctxt "#59985" +msgid "Error in the channel" +msgstr "Errore nel canale" + +msgctxt "#59986" +msgid "Error loading the server: %s\n" +msgstr "Errore al caricamento del server: %s\n" + +msgctxt "#59987" +msgid "Start downloading now?" +msgstr "Iniziare il download adesso?" + +msgctxt "#59988" +msgid "Saving configuration..." +msgstr "Salvataggio configurazione..." + +msgctxt "#59989" +msgid "Please wait" +msgstr "Attendere prego" + +msgctxt "#59990" +msgid "Channels included in the search" +msgstr "Canali inclusi nella ricerca" + +msgctxt "#59991" +msgid "All" +msgstr "Tutti" + +msgctxt "#59992" +msgid "None" +msgstr "Nessuno" + +msgctxt "#59993" +msgid "Configuration -- Search" +msgstr "Configurazione -- Ricerca" + +msgctxt "#59994" +msgid "Choose channels to include in your search" +msgstr "Scegli i canali da includere nella ricerca" + +msgctxt "#59995" +msgid "Saved Searches" +msgstr "Ricerche salvate" + +msgctxt "#59996" +msgid "Delete saved searches" +msgstr "Elimina le ricerche salvate" + +msgctxt "#59997" +msgid "Options" +msgstr "Opzioni" + +msgctxt "#59998" +msgid "Search by categories (advanced search)" +msgstr "Cerca per categorie (ricerca avanzata)" + +msgctxt "#59999" +msgid "Search for actor/actress" +msgstr "Cerca attore/attrice" + +msgctxt "#60000" +msgid "Filtra server (Black List)" +msgstr "Filtra server (Black List)" + +msgctxt "#60001" +msgid "Filtra server (Black List)\nNessun collegamento disponibile che soddisfi i requisiti della Black list.\nRiprova modificando il filtro in 'Configurazione Server" +msgstr "Filtra server (Black List)\nNessun collegamento disponibile che soddisfi i requisiti della Black list.\nRiprova modificando il filtro in 'Configurazione Server" + +msgctxt "#60003" +msgid "Connessione con %s" +msgstr "Connessione con %s" + +msgctxt "#60004" +msgid "No connector for the server %s" +msgstr "Non c'è nessun connettore per il server %s" + +msgctxt "#60005" +msgid "Connecting with %s" +msgstr "Connessione con %s" + +msgctxt "#60006" +msgid "An error has occurred in %s" +msgstr "Si è verificato un errore in %s" + +msgctxt "#60007" +msgid "An error has occurred on %s" +msgstr "Si è verificato un errore su %s" + +msgctxt "#60008" +msgid "Process completed" +msgstr "Processo completato" + +msgctxt "#60009" +msgid "To watch a vide on %s you need
an account on: %s" +msgstr "Per poter vedere un vídeo su %s occorre
un account su: %s" + +msgctxt "#60010" +msgid "All available links belongs to server on your black list.\nDo you want to show these links?" +msgstr "Tutti i collegamenti disponibili appartengono ai server inclusi nella tua Black List.\nVuoi mostrare questi link?" + +msgctxt "#60011" +msgid "Cache deleted" +msgstr "Cache eliminata" + +msgctxt "#60012" +msgid "No video to play" +msgstr "Nessun video da riprodurre" + +msgctxt "#60013" +msgid "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s.\nIf the web page is working correctly, please report the error on : https://alfa-addon.com/categories/icarus-addon.50/" +msgstr "Questo sito non sembra essere disponibile, riprova più tardi, se il problema persiste verifica mediante un browser: %s.\nSe la pagina web funziona correttamente segnala l'errore su : https://alfa-addon.com/categories/icarus-addon.50/" + +msgctxt "#60014" +msgid "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of icarus.\nTo have more details, see the log file." +msgstr "Potrebbe essere dovuto a un problema di connessione, la pagina web del canale ha cambiato la sua struttura, oppure un errore interno di icarus.\nPer avere maggiori dettagli, consulta il file di log." + +msgctxt "#60015" +msgid "Check the log for more details on the error." +msgstr "Controlla il log per avere maggiori dettagli sull'errore." + +msgctxt "#60016" +msgid "Segna film come non visto" +msgstr "Segna film come non visto" + +msgctxt "#60017" +msgid "Mark movie as not watched" +msgstr "Segna film come visto" + +msgctxt "#60018" +msgid "Delete movie/channel" +msgstr "Elimina film/canale" + +msgctxt "#60019" +msgid "Delete this movie" +msgstr "Elimina questo film" + +msgctxt "#60020" +msgid "Mark tv series as not watched" +msgstr "Segna serie come non vista" + +msgctxt "#60021" +msgid "Mark tv series as watched" +msgstr "Segna serie come vista" + +msgctxt "#60022" +msgid "Automatically find new episodes: Disable" +msgstr "Trova automaticamente nuovi episodi: Disattiva" + +msgctxt "#60023" +msgid "Automatically find new episodes: Enable" +msgstr "Trova automaticamente nuovi episodi: Attiva" + +msgctxt "#60024" +msgid "Delete tv series/channel" +msgstr "Elimina serie/canale" + +msgctxt "#60025" +msgid "Delete tv series" +msgstr "Elimina serie" + +msgctxt "#60026" +msgid "Search for new episodes and update" +msgstr "Cerca nuovi episodi e aggiorna" + +msgctxt "#60027" +msgid "Season %s" +msgstr "Stagione %s" + +msgctxt "#60028" +msgid "Segna stagione come non vista" +msgstr "Segna stagione come non vista" + +msgctxt "#60029" +msgid "Mark season as not watched" +msgstr "Segna stagione come vista" + +msgctxt "#60030" +msgid "*All the seasons" +msgstr "*Tutte le stagioni" + +msgctxt "#60031" +msgid "Season %s Episode %s" +msgstr "Stagione %s Episodio %s" + +msgctxt "#60032" +msgid "Mark episode as not watched" +msgstr "Segna episodio come non visto" + +msgctxt "#60033" +msgid "Mark episode as watched" +msgstr "Segna episodio come visto" + +msgctxt "#60034" +msgid "Show only link %s" +msgstr "Mostra solo link %s" + +msgctxt "#60035" +msgid "Show all the links" +msgstr "Mostra tutti i collegamenti" + +msgctxt "#60036" +msgid "Episode %s" +msgstr "Episodio %s" + +msgctxt "#60037" +msgid "Tv series update ..." +msgstr "Aggiornamento serie ..." + +msgctxt "#60038" +msgid "An error has occurred on icarus" +msgstr "Si è verificato un errore su icarus" + +msgctxt "#60039" +msgid "Error on channel %s" +msgstr "Errore nel canale %s" + +msgctxt "#60040" +msgid "Delete movie" +msgstr "Rimuovere film" + +msgctxt "#60041" +msgid "Delete tv series" +msgstr "Rimuovere serie" + +msgctxt "#60042" +msgid "Delete only the links of %s" +msgstr "Rimuovere solo i link dei %s" + +msgctxt "#60043" +msgid "Delete %s links of channel %s" +msgstr "Cancellati %s collegamenti del canale %s" + +msgctxt "#60044" +msgid "Do you want really to delete '%s' from videolibrary?" +msgstr "Vuoi davvero rimuovere '%s' dalla videoteca?" + +msgctxt "#60045" +msgid "Sync with Trakt started" +msgstr "Sincronizzazione con Trakt iniziata" + +msgctxt "#60046" +msgid "TheMovieDB not present.\nInstall it now?" +msgstr "The Movie database non presente.\nInstallare ora?" + +msgctxt "#60047" +msgid "The Movie Database is not installed." +msgstr "The Movie Database non è installato." + +msgctxt "#60048" +msgid "The TVDB not present.\nInstall it now?" +msgstr "The TVDB non presente.\nInstallare ora?" + +msgctxt "#60049" +msgid "The TVDB is not installed." +msgstr "The TVDB non è installato." + +msgctxt "#60050" +msgid "TheMovieDB not present.\nInstall it now?" +msgstr "TheMovieDB non presente.\nInstallare ora?" + +msgctxt "#60051" +msgid "The Movie Database is not installed." +msgstr "The Movie Database non è installato." + +msgctxt "#60052" +msgid "Error on setting LibraryPath in BD" +msgstr "Errore di impostazione LibraryPath in BD" + +msgctxt "#60053" +msgid "Do you want to configure this scraper in italian as default option for the movies ?" +msgstr "Si desidera configurare questo scraper in italiano come opzione predefinita per i film ?" + +msgctxt "#60054" +msgid "Do you want to configure this scraper in italian as default option for the tv series ?" +msgstr "Si desidera configurare questo scraper in italiano come opzione predefinita per le serie ?" + +msgctxt "#60055" +msgid "Error of provider configuration in BD." +msgstr "Errore di configurazione del provider in BD." + +msgctxt "#60058" +msgid "You need to restart Kodi for the changes to take effect." +msgstr "E' necessario riavviare Kodi affinchè le modifiche abbiano effetto." + +msgctxt "#60059" +msgid "Congratulations, Kodi's video library has been configured correctly." +msgstr "Complimenti, la videoteca di Kodi è stata configurata correttamente." + +msgctxt "#60062" +msgid "Adding movies to your video library..." +msgstr "Aggiunta film alla videoteca..." + +msgctxt "#60063" +msgid "Error in adding movies to your video library..." +msgstr "Errore di aggiunta alla videoteca..." + +msgctxt "#60064" +msgid "Adding Episodes to the Video Library..." +msgstr "Aggiunta episodi alla videoteca..." + +msgctxt "#60065" +msgid "Added Episode to Video Library..." +msgstr "Aggiunta episodio alla videoteca..." + +msgctxt "#60066" +msgid "ERROR, It has NOT been possible to add the video to the video library" +msgstr "ERRORE, NON è stato possibile aggiungere il video alla videoteca" + +msgctxt "#60067" +msgid "ERROR, tv series has NOT been added to videolibrary\nIt has NOT been possible to add no episode" +msgstr "ERRORE, la serie NON è stata aggiunta alla videoteca\nNon è stato possibile aggiungere alcun episodio" + +msgctxt "#60068" +msgid "ERROR, tv series has NOT been added to videolibrary" +msgstr "ERRORE, la serie NON è stata aggiunta alla videoteca" + +msgctxt "#60069" +msgid "ERRORE, tv series has NOT been added completely to videolibrary" +msgstr "ERRORE, la serie NON è stata aggiunta completamente alla videoteca" + +msgctxt "#60070" +msgid "tv series has been added to videolibrary" +msgstr "La serie è stata aggiunta alla videoteca" + +msgctxt "#60071" +msgid "Autoplay Configuration" +msgstr "Configurazione Autoplay" + +msgctxt "#60072" +msgid "It seems that links of %s are not working." +msgstr "Sembra che i collegamenti di %s Non funzionino." + +msgctxt "#60073" +msgid "Do you want to ignore all the links from this server?" +msgstr "Vuoi ignorare tutti i collegamenti di questo server?" + +msgctxt "#60074" +msgid "It's not possible to use AutoPlay" +msgstr "Impossibile utilizzare AutoPlay" + +msgctxt "#60075" +msgid "No coincidence" +msgstr "Nessuna coincidenza" + +msgctxt "#60076" +msgid "New quality/server available in \nConfiguration" +msgstr "Nuova qualità/server disponibile in \nConfigurazione" + +msgctxt "#60077" +msgid "AutoPlay initialization error" +msgstr "Errore inizializzazione AutoPlay" + +msgctxt "#60078" +msgid "View the log for more information." +msgstr "Consultare il log per maggiori informazioni." + +msgctxt "#60079" +msgid "AutoPlay (Turns AutoPlay On/Off)" +msgstr "AutoPlay (Attiva/Disattiva la Riproduzione Automatica)" + +msgctxt "#60080" +msgid "AutoPlay Language (Optional)" +msgstr "Lingua per AutoPlay (opzionale)" + +msgctxt "#60081" +msgid " Favorite servers" +msgstr " Server Preferiti" + +msgctxt "#60082" +msgid " \u2665 Favorite server %s" +msgstr " \u2665 Server Preferito %s" + +msgctxt "#60083" +msgid " Preferred Qualities" +msgstr " Qualità Preferite" + +msgctxt "#60084" +msgid " \u2665 Preferred Quality %s" +msgstr " \u2665 Qualità Preferita %s" + +msgctxt "#60085" +msgid " Priority (Indicates the order for AutoPlay)" +msgstr " Priorità (Indica l'ordine per la Riproduzione Automatica)" + +msgctxt "#60086" +msgid "It has been renamed to:" +msgstr "È Stato rinominato in:" + +msgctxt "#60087" +msgid "Unexpected error on channel %s" +msgstr "Errore inaspettato sul canale %s" + +msgctxt "#60088" +msgid "Enter URL" +msgstr "Inserisci URL" + +msgctxt "#60089" +msgid "Enter the URL [Link to server / download]" +msgstr "Inserire l'URL [Link a server / download]" + +msgctxt "#60090" +msgid "Enter the URL [Direct link to video]." +msgstr "Inserire l'URL [Link diretto al video]" + +msgctxt "#60091" +msgid "Enter the URL [Search for links in a URL]" +msgstr "Inserire l'URL [Ricerca link in un URL]" + +msgctxt "#60092" +msgid "View Direct URL" +msgstr "Vedi URL Diretto" + +msgctxt "#60093" +msgid "There is no compatible video in this URL" +msgstr "Non c'è nessun video compatibile in questo URL" + +msgctxt "#60200" +msgid "Download..." +msgstr "Download in corso..." + +msgctxt "#60201" +msgid "Download starting..." +msgstr "Inizio download..." + +msgctxt "#60202" +msgid "Remaining time: %s" +msgstr "Tempo rimanente: %s" + +msgctxt "#60203" +msgid "Downloader %s/%s" +msgstr "Downloader %s/%s" + +msgctxt "#60204" +msgid "Speed Meter" +msgstr "Misuratore di velocità" + +msgctxt "#60205" +msgid "File Writer" +msgstr "Scrittura File" + +msgctxt "#60206" +msgid "plugin" +msgstr "plugin" + +msgctxt "#60207" +msgid "Download..." +msgstr "Download in corso..." + +msgctxt "#60208" +msgid "You can't download this video" +msgstr "Non è possibile scaricare questo video" + +msgctxt "#60209" +msgid "RTMP downloads are not" +msgstr "I download in RTMP non sono " + +msgctxt "#60210" +msgid "still supported" +msgstr "ancora supportati" + +msgctxt "#60211" +msgid "Missing %s" +msgstr "Manca %s" + +msgctxt "#60212" +msgid "Check that rtmpdump is installed" +msgstr "Verifica che rtmpdump sia installato" + +msgctxt "#60213" +msgid "The RTMP download option is experimental" +msgstr "L'opzione di download RTMP è sperimentale" + +msgctxt "#60214" +msgid "and the video will be downloaded in the background." +msgstr "e il video verrà scaricato in background." + +msgctxt "#60215" +msgid "No progress bar will be displayed." +msgstr "Non verrà visualizzata alcuna barra di avanzamento." + +msgctxt "#60216" +msgid "addon" +msgstr "addon" + +msgctxt "#60217" +msgid "Download..." +msgstr "Download in corso..." + +msgctxt "#60218" +msgid "%.2fMB/%.2fMB (%d%%) %.2f Kb/s %s missing " +msgstr "%.2fMB/%.2fMB (%d%%) %.2f Kb/s %s manca " + +msgctxt "#60219" +msgid "Copying the file" +msgstr "Copia del file" + +msgctxt "#60220" +msgid "Error while deleting the file" +msgstr "Errore durante l'eliminazione del file" + +msgctxt "#60221" +msgid "Error while deleting the directory" +msgstr "Errore durante l'eliminazione della directory" + +msgctxt "#60222" +msgid "Error while creating the directory" +msgstr "Errore durante la creazione della directory" + +msgctxt "#60223" +msgid "Enter another name" +msgstr "Immettere un altro nome" + +msgctxt "#60224" +msgid "Complete information" +msgstr "Completare le informazioni" + +msgctxt "#60225" +msgid "Search in TheMovieDB.org" +msgstr "Cerca in TheMovieDB.org" + +msgctxt "#60226" +msgid "Search in TheTvDB.org" +msgstr "Cerca in TheTvDB.com" + +msgctxt "#60227" +msgid "Identifier not found for: %s" +msgstr "Identificatore non trovato per: %s" + +msgctxt "#60228" +msgid "No information found for: %s" +msgstr "Nessuna informazione trovata per: %s" + +msgctxt "#60229" +msgid "Enter the name of %s to search" +msgstr "Inserisci il nome di %s per cercare" + +msgctxt "#60230" +msgid "Title:" +msgstr "Titolo:" + +msgctxt "#60231" +msgid "Original title" +msgstr "Titolo originale" + +msgctxt "#60232" +msgid "Year" +msgstr "Anno" + +msgctxt "#60233" +msgid "Identifiers:" +msgstr "Identificatori:" + +msgctxt "#60234" +msgid " The Movie Database ID" +msgstr " The Movie Database ID" + +msgctxt "#60235" +msgid " URL Tmdb" +msgstr " URL Tmdb" + +msgctxt "#60236" +msgid " The TVDB ID" +msgstr " The TVDB ID" + +msgctxt "#60237" +msgid " URL TVDB" +msgstr " URL TVDB" + +msgctxt "#60238" +msgid " IMDb ID" +msgstr " IMDb ID" + +msgctxt "#60239" +msgid " Other ID" +msgstr " Altro ID" + +msgctxt "#60240" +msgid "Images(urls):" +msgstr "Immagini(urls):" + +msgctxt "#60241" +msgid " Background" +msgstr " Fondo" + +msgctxt "#60242" +msgid " Thumbnail" +msgstr " Miniatura" + +msgctxt "#60243" +msgid "Type of content" +msgstr "Tipo di contenuto" + +msgctxt "#60244" +msgid "Movie" +msgstr "Film" + +msgctxt "#60245" +msgid "Series" +msgstr "Serie" + +msgctxt "#60246" +msgid "Full information" +msgstr "Informazioni complete" + +msgctxt "#60247" +msgid "[%s]: Select the correct %s" +msgstr "[%s]: Selecciona la %s correcta" + +msgctxt "#60248" +msgid "Login to this page: %s" +msgstr "Accedi a questa pagina: %s" + +msgctxt "#60249" +msgid "Enter this code and accept: %s" +msgstr "Inserisci questo codice e accetta: %s" + +msgctxt "#60250" +msgid "Once done, click here!" +msgstr "Una volta fatto, clicca qui!" + +msgctxt "#60251" +msgid "Synchronize with Trakt. Do not close this window" +msgstr "Sincronizza con Trakt. Non chiudere questa finestra" + +msgctxt "#60252" +msgid "1. Enter the following URL: %s" +msgstr "1. Inserisci il seguente URL: %s" + +msgctxt "#60253" +msgid "2. Enter this code on the page and accept: %s" +msgstr "2. Inserisci questo codice sulla pagina e accetta: %s" + +msgctxt "#60254" +msgid "3. Wait until this window closes" +msgstr "3. Attendi fino a quando questa finestra non si chiude" + +msgctxt "#60255" +msgid "Successfully completed" +msgstr "Completato con successo" + +msgctxt "#60256" +msgid "Account linked correctly" +msgstr "Account collegato correttamente" + +msgctxt "#60257" +msgid "Error" +msgstr "Errore" + +msgctxt "#60258" +msgid "Problem in the connection process" +msgstr "Problema nel processo di collegamento" + +msgctxt "#60259" +msgid "Account linked correctly" +msgstr "Account collegato correttamente" + +msgctxt "#60260" +msgid "Problem in the connection process" +msgstr "Problema nel processo di collegamento" + +msgctxt "#60261" +msgid "Icarus" +msgstr "Icarus" + +msgctxt "#60262" +msgid "You can install the Trakt script below, once installed and configured what you see will be automatically synchronized with your account." +msgstr "Puoi installare lo script Trakt qui sotto, una volta installato e configurato ciò che vedi sarà sincronizzato automaticamente con il tuo account." + +msgctxt "#60263" +msgid "Do you want to continue?" +msgstr "Vuoi continuare?" + +msgctxt "#60264" +msgid "In progress" +msgstr "In corso" + +msgctxt "#60265" +msgid "Completed" +msgstr "Completato" + +msgctxt "#60266" +msgid "Action" +msgstr "Azione" + +msgctxt "#60267" +msgid "Adventure" +msgstr "Avventura" + +msgctxt "#60268" +msgid "Animation" +msgstr "Animazione" + +msgctxt "#60269" +msgid "Kids" +msgstr "Bambini" + +msgctxt "#60270" +msgid "Comedy" +msgstr "Commedia" + +msgctxt "#60271" +msgid "Crime" +msgstr "Crimine" + +msgctxt "#60272" +msgid "Documentaries" +msgstr "Documentari" + +msgctxt "#60273" +msgid "Family" +msgstr "Famiglia" + +msgctxt "#60274" +msgid "Fantasy" +msgstr "Fantasy" + +msgctxt "#60275" +msgid "Cooking" +msgstr "Cucina" + +msgctxt "#60276" +msgid "Contests" +msgstr "Gare" + +msgctxt "#60277" +msgid "Home and garden" +msgstr "Casa e giardino" + +msgctxt "#60278" +msgid "Mistery" +msgstr "Mistero" + +msgctxt "#60279" +msgid "News" +msgstr "Notizie" + +msgctxt "#60280" +msgid "Romantic" +msgstr "Romantico" + +msgctxt "#60281" +msgid "Science fiction" +msgstr "Fantascienza" + +msgctxt "#60282" +msgid "Soap Opera" +msgstr "Telenovele" + +msgctxt "#60283" +msgid "Sport" +msgstr "Sport" + +msgctxt "#60284" +msgid "Talk Show" +msgstr "Talk Show" + +msgctxt "#60285" +msgid "Travels" +msgstr "Viaggi" + +msgctxt "#60286" +msgid "Pre-child audience: children under 6 years" +msgstr "Pubblico pre-infanzia: bambini sotto i 6 anni" + +msgctxt "#60287" +msgid "Child audience: from 7 years old" +msgstr "Pubblico infantile: dai 7 anni" + +msgctxt "#60288" +msgid "General audience: without family control" +msgstr "Pubblico generico: senza controllo familiare" + +msgctxt "#60289" +msgid "Parental control" +msgstr "Guida parentale: supervisione dei genitori" + +msgctxt "#60290" +msgid "More than 14 years old" +msgstr "Più di 14 anni" + +msgctxt "#60291" +msgid "More than 17 years old" +msgstr "Più di 17 anni" + +msgctxt "#60292" +msgid "Searching for TV Series Information" +msgstr "Ricerca di informazioni sulla serie" + +msgctxt "#60293" +msgid "Please wait..." +msgstr "Attendere prego..." + +msgctxt "#60294" +msgid "Searching for TV Series Information" +msgstr "Ricerca di informazioni sulla serie" + +msgctxt "#60295" +msgid "Loading results..." +msgstr "Caricamento risultati..." + +msgctxt "#60296" +msgid "Searching for TV Series Information" +msgstr "Ricerca di informazioni sulla serie" + +msgctxt "#60297" +msgid "Find %s possible matches" +msgstr "Trovate %s possibili corrispondenze" + +msgctxt "#60298" +msgid "[%s]: Select the correct TV series" +msgstr "[%s]: Seleziona la serie corretta" + +msgctxt "#60299" +msgid "Not found in the language '%s'" +msgstr "Non trovato nella lingua '%s'" + +msgctxt "#60300" +msgid "Search in language 'en'" +msgstr "Cerca nella lingua 'en'" + +msgctxt "#60301" +msgid "Not found in the language '%s'" +msgstr "Non trovato nella lingua '%s'" + +msgctxt "#60302" +msgid "Search in language 'en'" +msgstr "Cerca nella lingua 'en'" + +msgctxt "#60303" +msgid "The file already exists" +msgstr "Il file esiste già" + +msgctxt "#60304" +msgid "The unzipped %s file already exists, or you want to overwrite it.?" +msgstr "il file %s da decomprimere esiste già, vuoi sovrascriverlo?" + +msgctxt "#60305" +msgid "Adult channels" +msgstr "Canali per adulti" + +msgctxt "#60306" +msgid "The fields 'New password' and 'Confirm new password' do not match" +msgstr "I campi 'Nuova password' e 'Conferma nuova password' non corrispondono." + +msgctxt "#60307" +msgid "Use 'Preferences' to change your password" +msgstr "Entra in 'Preferenze' per cambiare la password" + +msgctxt "#60308" +msgid "Adult channels" +msgstr "Canali para adulti" + +msgctxt "#60309" +msgid "The password is not correct." +msgstr "La password non è corretta." + +msgctxt "#60310" +msgid "Changes made in this section will not be saved." +msgstr "Le modifiche apportate in questa sezione non verranno salvate." + +msgctxt "#60311" +msgid "Download..." +msgstr "Download in corso..." + +msgctxt "#60312" +msgid "Close this window to start playback" +msgstr "Chiudi questa finestra per avviare la riproduzione" + +msgctxt "#60313" +msgid "Cancel this window to start playback" +msgstr "Annulla questa finestra per avviare la riproduzione" + +msgctxt "#60314" +msgid "Speed: " +msgstr "Velocità: " + +msgctxt "#60315" +msgid " KB/s " +msgstr " KB/s " + +msgctxt "#60316" +msgid "MB of " +msgstr "MB de " + +msgctxt "#60317" +msgid "MB" +msgstr "MB" + +msgctxt "#60318" +msgid "Remaining time: " +msgstr "Tempo rimanente: " + +msgctxt "#60319" +msgid "Cancelled" +msgstr "Annullato" + +msgctxt "#60320" +msgid "Download in background cancelled" +msgstr "Download in background cancellato" + +msgctxt "#60321" +msgid "Press the button to be used to open the window" +msgstr "Premere il tasto da utilizzare per aprire la finestra" + +msgctxt "#60322" +msgid "You have %s seconds" +msgstr "Hai %s secondi" + +msgctxt "#60323" +msgid "Press the button to be used to open the window" +msgstr "Premere il tasto da utilizzare per aprire la finestra" + +msgctxt "#60324" +msgid "You have %s seconds" +msgstr "Hai %s segcondi" + +msgctxt "#60325" +msgid "Saved key" +msgstr "Chiave salvata" + +msgctxt "#60326" +msgid "Restart Kodi to apply changes" +msgstr "Riavvia Kodi per applicare le modifiche" + +msgctxt "#60327" +msgid "Novelties" +msgstr "Novità" + +msgctxt "#60328" +msgid "Channels" +msgstr "Canali" + +msgctxt "#60329" +msgid "Search" +msgstr "Ricerca" + +msgctxt "#60330" +msgid "Favorites" +msgstr "Preferiti" + +msgctxt "#60331" +msgid "Videolibrary" +msgstr "Videoteca" + +msgctxt "#60332" +msgid "Downloads" +msgstr "Downloads" + +msgctxt "#60333" +msgid "Configuration" +msgstr "Configurazione" + +msgctxt "#60334" +msgid "Password for adult channels" +msgstr "Password per i canali per adulti" + +msgctxt "#60335" +msgid "Watch in" +msgstr "Vedere in" + +msgctxt "#60336" +msgid "Download in" +msgstr "Scaricare in" + +msgctxt "#60337" +msgid "icarus-MCT: No support adf.ly" +msgstr "icarus-MCT: Sin soporte adf.ly" + +msgctxt "#60338" +msgid "The script does not support URL reduction adf.ly." +msgstr "Lo script non supporta la riduzione di URL adf.ly." + +msgctxt "#60339" +msgid "Nothing to Play" +msgstr "Niente da riprodurre" + +msgctxt "#60342" +msgid "Download completed: " +msgstr "Download completo: " + +msgctxt "#60343" +msgid "BMC-Kodi has closed the video." +msgstr "XBMC-Kodi ha chiuso il video." + +msgctxt "#60344" +msgid "Continue with the session?" +msgstr "Continuare con la sessione?" + +msgctxt "#60345" +msgid "icarus-MCT: List of videos" +msgstr "icarus-MCT: Lista di video" + +msgctxt "#60346" +msgid "Delete video downloads" +msgstr "Elimina i download di video" + +msgctxt "#60347" +msgid "No items to display" +msgstr "Nessun elemento da visualizzare" + +msgctxt "#60348" +msgid "Information" +msgstr "Informazione" + +msgctxt "#60349" +msgid "Go to the Main Menu" +msgstr "Andare al Menu Principale" + +msgctxt "#60350" +msgid "[COLOR yellow]Search in other channels[/COLOR]" +msgstr "[COLOR yellow]Cerca negli altri canali[/COLOR]" + +msgctxt "#60351" +msgid "Set as homepage" +msgstr "[COLOR 0xffccff00]Impostare come HomePage[/COLOR]" + +msgctxt "#60352" +msgid "Add TV Series to Videolibrary" +msgstr "Aggiungi Serie alla Videoteca" + +msgctxt "#60353" +msgid "Add Movie to Videolibrary" +msgstr "Aggiungi film alla Videoteca" + +msgctxt "#60354" +msgid "Download Movie" +msgstr "Scarica Film" + +msgctxt "#60355" +msgid "Download TV Series" +msgstr "Scarica Serie" + +msgctxt "#60356" +msgid "Download Episode" +msgstr "Scarica Episodio" + +msgctxt "#60357" +msgid "Download Season" +msgstr "Scarica Stagione" + +msgctxt "#60358" +msgid "Open Configuration" +msgstr "Apri Configurazione" + +msgctxt "#60359" +msgid "Search Trailer" +msgstr "Cerca Trailer" + +msgctxt "#60360" +msgid "[COLOR 0xffccff00][/COLOR]" +msgstr "[COLOR 0xffccff00][/COLOR]" + +msgctxt "#60361" +msgid "Super Favourites Menu" +msgstr "Super Favourites Menu" + +msgctxt "#60362" +msgid "You can't watch this video because..." +msgstr "Non è possibile vedere questo video perchè..." + +msgctxt "#60363" +msgid "The server on which it is hosted" +msgstr "Il server in cui è ospitato " + +msgctxt "#60364" +msgid "is not yet supported in Icarus" +msgstr "non è ancora supportato in Icarus" + +msgctxt "#60365" +msgid "Loading video..." +msgstr "Caricamento video..." + +msgctxt "#60366" +msgid "External plugin: %s" +msgstr "Plugin esterno: %s" + +msgctxt "#60376" +msgid "Video information" +msgstr "Informazioni video" + +msgctxt "#60377" +msgid "Title:" +msgstr "Titolo:" + +msgctxt "#60378" +msgid "Original Title:" +msgstr "Titolo original:" + +msgctxt "#60379" +msgid "Original language:" +msgstr "Lingua originale:" + +msgctxt "#60380" +msgid "Score:" +msgstr "Punteggio:" + +msgctxt "#60381" +msgid "Release:" +msgstr "Rilascio:" + +msgctxt "#60382" +msgid "Genres:" +msgstr "Generi:" + +msgctxt "#60383" +msgid "Series:" +msgstr "Serie:" + +msgctxt "#60384" +msgid "Season title:" +msgstr "Titolo della stagione:" + +msgctxt "#60385" +msgid "Season:" +msgstr "Stagione:" + +msgctxt "#60386" +msgid "Episode:" +msgstr "Episodio:" + +msgctxt "#60387" +msgid "Emission:" +msgstr "Emissione:" + +msgctxt "#60388" +msgid "Summary:" +msgstr "Riassunto:" + +msgctxt "#60389" +msgid "Videolibrary update...." +msgstr "Aggiornamento videoteca...." + +msgctxt "#60390" +msgid "AutoPlay Configuration" +msgstr "Configurazione AutoPlay" + +msgctxt "#60391" +msgid "AutoPlay" +msgstr "AutoPlay" + +msgctxt "#60392" +msgid "\n\n\nTotal Reset of the addon %s.\n\n[COLOR red]Attention This function completely resets the addon.[/COLOR]" +msgstr "\n\n\nReset totale dell'addon %s.\n\n[COLOR red]Attenzione questa funzione resetta totalmente l'addon.[/COLOR]" + +msgctxt "#60393" +msgid "[COLOR red]Reset %s[/COLOR]" +msgstr "[COLOR red]Reset %s[/COLOR]" + +msgctxt "#60394" +msgid "Reset %s" +msgstr "Reset %s" + +msgctxt "#60395" +msgid "Are you sure you want to reset all settings of %s ?" +msgstr "Sei sicuro di voler resettare tutte le impostazioni di %s ?" + +msgctxt "#60396" +msgid "Cancel" +msgstr "Annulla" + +msgctxt "#60397" +msgid "Confirm" +msgstr "Conferma" + +msgctxt "#60398" +msgid " Settings Reset was successful!" +msgstr "Reset delle impostazioni è avvenuto con successo!" + +msgctxt "#60399" +msgid "AutoPlay allows you to auto play links directly, based on your server settings and preferred qualities. " +msgstr "AutoPlay consente di riprodurre automaticamente i collegamenti, in base alla configurazione dei server e alle qualità preferite. " + +msgctxt "#60400" +msgid "512 Mega" +msgstr "512 Mega" + +msgctxt "#60401" +msgid "1 Gb" +msgstr "1 Gb" + +msgctxt "#60402" +msgid "2 Gb" +msgstr "2 Gb" + +msgctxt "#60403" +msgid "more than 2 Gb" +msgstr "più di 2 Gb" + +msgctxt "#60404" +msgid "Choose cache setting" +msgstr "Scegli settaggio cache" + +msgctxt "#60405" +msgid "\n[COLOR orange]Cache Set for 512 Mega RAM[/COLOR]" +msgstr "\n[COLOR orange]Cache Impostata per 512 Mega di RAM[/COLOR]" + +msgctxt "#60406" +msgid "\n[COLOR orange]Cache Set for 1 Gb RAM[/COLOR]" +msgstr "\n[COLOR orange]Cache Impostata per 1 Gb di RAM[/COLOR]" + +msgctxt "#60407" +msgid "\n[COLOR orange]Cache Set for 2 Gb RAM[/COLOR]" +msgstr "\n[COLOR orange]Cache Impostata per 2 Gb di RAM[/COLOR]" + +msgctxt "#60408" +msgid "\n[COLOR orange]Cache Set higher than 2 Gb of RAM[/COLOR]" +msgstr "\n[COLOR orange]Cache Impostata superiore a 2 Gb di RAM[/COLOR]" + +msgctxt "#60409" +msgid "plugin" +msgstr "plugin" + +msgctxt "#60410" +msgid "An advancedsettings.xml file has been created" +msgstr "E' stato creato un file advancedsettings.xml" + +msgctxt "#60411" +msgid "with the ideal streaming configuration." +msgstr "con la configurazione ideale per lo streaming." + +msgctxt "#60412" +msgid "Choose channels to include" +msgstr "Scegli i canali da includere" + +msgctxt "#60413" +msgid "[COLOR yellow]New Movie Search...[/COLOR]" +msgstr "[COLOR yellow]Nuova ricerca film...[/COLOR]" + +msgctxt "#60414" +msgid "[COLOR yellow]New search tv series...[/COLOR]" +msgstr "[COLOR yellow]Nuova ricerca serie tv...[/COLOR]" + +msgctxt "#60415" +msgid "[COLOR green]Other settings[/COLOR]" +msgstr "[COLOR green]Altre impostazioni[/COLOR]" + +msgctxt "#60416" +msgid "Delete saved searches" +msgstr "Cancella ricerche salvate" + +msgctxt "#60417" +msgid "[COLOR red]Delete search history[/COLOR]" +msgstr "[COLOR red]Elimina cronologia ricerche[/COLOR]" + +msgctxt "#60418" +msgid "Choose channels to include in your search" +msgstr "Scegli i canali da includere nella ricerca" + +msgctxt "#60419" +msgid "Delete saved searches" +msgstr "Cancella ricerche salvate" + +msgctxt "#60420" +msgid "More Options" +msgstr "Altre opzioni" + +msgctxt "#60421" +msgid "Channels included in the global search " +msgstr "Canali inclusi nella ricerca globale " + +msgctxt "#60422" +msgid "Search " +msgstr "Ricerca " + +msgctxt "#60423" +msgid "Search" +msgstr "Ricerca" + +msgctxt "#60424" +msgid "Searches key have been deleted correctly" +msgstr "Ricerche cancellate correttamente" + +msgctxt "#60425" +msgid "Channel search" +msgstr "Cerca canale" + +msgctxt "#60426" +msgid "FILTER: Configure" +msgstr "FILTRO: Configura" + +msgctxt "#60427" +msgid "FILTER: Adding '%s'" +msgstr "FILTRO: Aggiungere '%s'" + +msgctxt "#60428" +msgid "FILTER: Delete '%s'" +msgstr "FILTRO: Eliminare '%s'" + +msgctxt "#60429" +msgid "[COLOR %s]Filter configuration for TV series...[/COLOR]" +msgstr "[COLOR %s]Configura filtro per serie tv...[/COLOR]" + +msgctxt "#60430" +msgid "FILTRO: Delete '%s'" +msgstr "FILTRO: Eliminare '%s'" + +msgctxt "#60431" +msgid " and quality %s" +msgstr " e qualità %s" + +msgctxt "#60432" +msgid "[COLOR %s]No results in this language '%s'%s, click to show without filter[/COLOR]" +msgstr "[COLOR %s]Nessun risultato in questa lingua '%s'%s, clicca per mostrare senza filtro[/COLOR]" + +msgctxt "#60433" +msgid " (disabled)" +msgstr " (disattivato)" + +msgctxt "#60434" +msgid "Configure [COLOR %s][%s][/COLOR]%s" +msgstr "Configurare [COLOR %s][%s][/COLOR]%s" + +msgctxt "#60435" +msgid "There are no filters, search for a TV series and click on the context menu 'FILTER: Configure'" +msgstr "Non ci sono filtri, cerca una serie tv e fai clic sul menu contestuale 'FILTRO: Configura'" + +msgctxt "#60436" +msgid "Spanish" +msgstr "Spagnolo" + +msgctxt "#60437" +msgid "Delete" +msgstr "Eliminare" + +msgctxt "#60438" +msgid "¿Enable / disable filter?" +msgstr "Attiva / Disattiva filtro?" + +msgctxt "#60439" +msgid "Language" +msgstr "Linguaggio" + +msgctxt "#60440" +msgid "Permitted quality" +msgstr "Qualità consentita" + +msgctxt "#60441" +msgid "Filter links for: [COLOR %s]%s[/COLOR]" +msgstr "Link di filtro per: [COLOR %s]%s[/COLOR]" + +msgctxt "#60442" +msgid "Are you sure you want to delete the filter?" +msgstr "Sei sicuro di voler eliminare il filtro?" + +msgctxt "#60443" +msgid "Click 'Yes' to remove the filter from [COLOR %s]%s[/COLOR], click 'No' or close the window to do nothing." +msgstr "Clicca 'Sì' per rimuovere il filtro da [COLOR %s]%s[/COLOR], Clicca 'No' o chiudere la finestra per non fare nulla." + +msgctxt "#60444" +msgid "FILTER DELETED" +msgstr "FILTRO ELIMINATO" + +msgctxt "#60445" +msgid "Error on saving on disk" +msgstr "Errore nel salvataggio su disco" + +msgctxt "#60446" +msgid "FILTER SAVED" +msgstr "FILTRO SALVATO" + +msgctxt "#60447" +msgid "FAQ:" +msgstr "FAQ:" + +msgctxt "#60448" +msgid " - How do I report an error?" +msgstr " - Come segnalo un errore?" + +msgctxt "#60449" +msgid " - Is it possible to enable/disable channels?" +msgstr " - È Possibile attivare/disattivare i canali?" + +msgctxt "#60450" +msgid " - Is automatic synchronization with Trakt possible?" +msgstr " - È Possibile la sincronizzazione automatica con Trakt?" + +msgctxt "#60451" +msgid " - Is it possible to show all the results together in the global search?" +msgstr " - È Possibile mostrare tutti i risultati uniti nella ricerca globale?" + +msgctxt "#60452" +msgid " - Links take too long to appear." +msgstr " - I link ci mettono troppo ad apparire." + +msgctxt "#60453" +msgid " - The content search is not performed correctly." +msgstr " - La ricerca dei contenuti non viene eseguita correttamente." + +msgctxt "#60454" +msgid " - Some channels do not function properly." +msgstr " - Alcuni canali non funzionano correttamente." + +msgctxt "#60455" +msgid " - The library does not update correctly." +msgstr " - La libreria non viene aggiornata correttamente." + +msgctxt "#60456" +msgid " - Links of interest" +msgstr " - Collegamenti di interesse" + +msgctxt "#60457" +msgid "Icarus" +msgstr "Icarus" + +msgctxt "#60458" +msgid "The disabling can be done in 'Settings>Turn on/off channels'. You can toggle channels on/off one at a time or all at the same time. Want to manage your channels now?" +msgstr "La disabilitazione può essere fatta in 'Impostazioni>Attiva/Disattiva canali'. È Possibile Attivare/Disattivare i canali uno alla volta o tutti allo stesso tempo. Vuoi gestire i canali adesso?" + +msgctxt "#60459" +msgid "Currently it is possible to activate the synchronization (silent) after having marked an episode as 'as watched' (this happens automatically). This option can be enabled in 'Settings>Library Settings'. Do you want access to these settings?" +msgstr "Attualmente è possibile attivare la sincronizzazione (silenziosa) dopo aver segnato come 'come visto' un episodio (ciò avviene automaticamente). Questa opzione può essere attivata in 'Impostazioni>Impostazioni libreria'. Vuoi accedere a queste impostazioni?" + +msgctxt "#60460" +msgid "This can be improved by limiting the maximum number of links or by displaying them in a Pop-Up window. These settings can be found in 'Settings>Library Settings' Do you want to access these settings?" +msgstr "Questo può essere migliorato limitando il numero massimo di collegamenti o visualizzandoli in una finestra Pop-Up. Queste impostazioni possono essere trovate in 'Impostazioni>Impostazioni libreria' Vuoi accedere a queste impostazioni?" + +msgctxt "#60461" +msgid "Icarus - FAQ - %s" +msgstr "Icarus - FAQ - %s" + +msgctxt "#60462" +msgid "You may not have written the library path correctly in 'Settings>Preferences'.\nIl The specified path must be exactly the same as the 'source' entered in 'Archive' of the Kodi library.\nAVANZATO: This path is also found in 'sources.xml'.\nThere can be problems using some Kodi forks and paths with 'special://'. SPMC, for example, has problems with this, and there doesn't seem to be a solution, as it is an external problem to Icarus that has existed for a long time.\nYou can try solving these problems in 'Settings>Library Settings' by changing the 'Search in' setting from 'The folder of each series' to 'All library'." +msgstr "Potresti non aver scritto correttamente il percorso della libreria in 'Impostazioni>Preferenze'.\nIl percorso specificato deve essere esattamente uguale al 'sorgente' inserito in 'Archivio' della libreria di Kodi.\nAVANZATO: Questo percorso si trova anche in 'sources.xml'.\nPotresti riscontrare dei problemi utilizzando alcuni fork di Kodi e percorsi con 'special://'. SPMC, per esempio, ha problemi con questo, e non sembra esserci una soluzione, poichè è un problema esterno ad Alfa che esiste da molto tempo.\nPuoi provare a risolvere questi problemi in 'Impostazioni>Impostazioni libreria', modificando l'impostazione 'Esegui ricerca contenuto in' da 'La cartella di ogni serie' in 'Tutta la libreria'." + +msgctxt "#60463" +msgid "The channel site may not work. In case the site works you can report the problem on github." +msgstr "Può darsi che il sito del canale non funzioni. Nel caso il sito funzioni puoi segnalare il problema su github." + +msgctxt "#60464" +msgid "It is possible that you have updated Alfa recently and that the changes have not been fully applied Well, you can try 'Settings>Other Tools', checking the *_data.json files or reattaching everything to the library again" +msgstr "È Possibile che tu abbia aggiornato Alfa di recente e che i cambiamenti non siano stati totalmente applicati Bene, puoi provare in 'Impostazioni>Altri strumenti', controllando i files *_data.json o riaggiungendo tutto ancora alla libreria" + +msgctxt "#60465" +msgid "Do you want access to these settings?" +msgstr "Vuoi accedere a queste impostazioni?" + +msgctxt "#60466" +msgid "Yes, the option to display merged or split results by channels can be found in 'Settings>Global Search Settings>Other Settings'. Do you want access to these settings?" +msgstr "Sì, l'opzione per mostrare i risultati uniti o divisi per canali si trova in 'Impostazioni>Impostazioni ricerca globale>Altre impostazioni'. Vuoi accedere a queste impostazioni?" + +msgctxt "#60467" +msgid "To report a problem on'http://alfa-addon.com' you need to:|the version you're using of Alpha.|The version you're using of kodi, mediaserver, etc.|the version and name of the operating system you're using.|The name of the skin (in case you're using Kodi) and whether using the default skin has solved the problem.|Description of the problem and any test cases.To activate the log in detailed mode, go to:|Configuration.|Preferences.|In the General tab - Check the option: Generate detailed log. The detailed log file can be found in the following path: \n\n%s" +msgstr "Per segnalare un problema su 'http://alfa-addon.com' è necessario:|la versione che si sta usando di Alpha.|La versione che si sta usando di kodi, mediaserver, ecc.|la versione e il nome del sistema operativo che si sta usando.|Il nome della skin (nel caso in cui si stia usando Kodi) e se l'utilizzo della skin predefinita ha risolto il problema.|La descrizione del problema e tutti i casi di test.Per attivare il log in modalità dettagliata, andare su:|Configurazione.|Preferenze.|Nella scheda Generale - Selezionare l'opzione: Genera log dettagliato Il file di log dettagliato si trova nel seguente percorso: \n\n%s" + +msgctxt "#60468" +msgid "You can find our Telegram channel at @StreamOnDemandOfficial\nSe you have doubts you can write to us in the Telegram group: https://bit.ly/2I3kRwF" +msgstr "Puoi trovare il nostro canale Telegram in @StreamOnDemandOfficial\nSe hai dubbi puoi scriverci nel gruppo Telegram: https://bit.ly/2I3kRwF" + +msgctxt "#60469" +msgid "Uploading new data" +msgstr "Caricamento nuovi dati" + +msgctxt "#60470" +msgid "Buscando en Tmdb......." +msgstr "Ricerca in Tmdb......." + +msgctxt "#60471" +msgid "No results, missing information about the year of the video" +msgstr "Nessun risultato, informazioni mancanti sull'anno del video" + +msgctxt "#60472" +msgid "There is no information on the %s required" +msgstr "Non ci sono informazioni sulla %s richiesta" + +msgctxt "#60473" +msgid "No results" +msgstr "Nessun risultato" + +msgctxt "#60474" +msgid "There is no information on the %s required" +msgstr "Non ci sono informazioni sulla %s richiesta" + +msgctxt "#60475" +msgid "Filmaffinity recording......." +msgstr "Registrazione filmaffinity......." + +msgctxt "#60476" +msgid "[COLOR yellow][B]There is no information about this movie...[/B][/COLOR]" +msgstr "[COLOR yellow][B]Non ci sono informazioni su questo film...[/B][/COLOR]" + +msgctxt "#60477" +msgid "Important recommendations......." +msgstr "Raccomandazioni importanti......." + +msgctxt "#60478" +msgid "[COLOR aquamarine][B]Completated %s[/B][/COLOR]" +msgstr "[COLOR aquamarine][B]Completata %s[/B][/COLOR]" + +msgctxt "#60479" +msgid "[COLOR aquamarine][B]In progress %s[/B][/COLOR]" +msgstr "[COLOR aquamarine][B]In corso %s[/B][/COLOR]" + +msgctxt "#60480" +msgid "(Seasons: %s)" +msgstr "(Stagioni: %s)" + +msgctxt "#60481" +msgid "Picture collection on FANART.TV" +msgstr "Raccolta di immagini su FANART.TV" + +msgctxt "#60482" +msgid "Tuned Instruments in Vtunes" +msgstr "Strumenti sintonizzati in Vtunes" + +msgctxt "#60483" +msgid "Picture collection on FANART.TV" +msgstr "Raccolta di immagini su FANART.TV" + +msgctxt "#60484" +msgid "[COLOR red][B]Update Kodi to its latest version[/B][/COLOR]" +msgstr "[COLOR red][B]Aggiorna Kodi alla sua ultima versione[/B][/COLOR]" + +msgctxt "#60485" +msgid "[COLOR skyblue]for detailed info[/COLOR]" +msgstr "[COLOR skyblue]per info dettagliate[/COLOR]" + +msgctxt "#60486" +msgid "Uploading new information" +msgstr "Caricamento nuove informazioni" + +msgctxt "#60487" +msgid "Search in Tmdb......." +msgstr "Ricerca in Tmdb......." + +msgctxt "#60488" +msgid "No information..." +msgstr "Nessuna informazione..." + +msgctxt "#60489" +msgid "[COLOR limegreen][B]Production company: [/B][/COLOR]" +msgstr "[COLOR limegreen][B]Compagnia di produzione: [/B][/COLOR]" + +msgctxt "#60490" +msgid "[COLOR limegreen][B]Country: [/B][/COLOR]" +msgstr "[COLOR limegreen][B]Nazione: [/B][/COLOR]" + +msgctxt "#60491" +msgid "[COLOR limegreen][B]Preview: [/B][/COLOR]" +msgstr "[COLOR limegreen][B]Anteprima: [/B][/COLOR]" + +msgctxt "#60492" +msgid "[COLOR limegreen][B]Seasons/Episodes: [/B][/COLOR]" +msgstr "[COLOR limegreen][B]Stagioni/Episodi: [/B][/COLOR]" + +msgctxt "#60493" +msgid "[COLOR orange][B]Is there the tv series you're looking for?[/B][/COLOR]" +msgstr "[COLOR orange][B]C'è la serie che cerchi?[/B][/COLOR]" + +msgctxt "#60494" +msgid "[COLOR orange][B]Is there the movie you are looking for?[/B][/COLOR]" +msgstr "[COLOR orange][B]C'è il film che stai cercando?[/B][/COLOR]" + +msgctxt "#60495" +msgid "[COLOR tomato][B]Close[/B][/COLOR]" +msgstr "[COLOR tomato][B]Chiudere[/B][/COLOR]" + +msgctxt "#60496" +msgid "Loading results" +msgstr "Caricamento risultati" + +msgctxt "#60497" +msgid "Wait........" +msgstr "Attendere........" + +msgctxt "#60498" +msgid "[COLOR orange][B]Select...[/B][/COLOR]" +msgstr "[COLOR orange][B]Seleziona...[/B][/COLOR]" + +msgctxt "#60499" +msgid "plugin" +msgstr "plugin" + +msgctxt "#60500" +msgid "Nothing to play" +msgstr "Nulla da riprodurre" + +msgctxt "#60501" +msgid "[COLOR orange][B]Department[/B][/COLOR]" +msgstr "[COLOR orange][B]Reparto[/B][/COLOR]" + +msgctxt "#60502" +msgid "Uploading new data" +msgstr "Caricamento nuovi dati" + +msgctxt "#60503" +msgid "Loading data from the %s..." +msgstr "Caricamento dati del %s..." + +msgctxt "#60504" +msgid "No information" +msgstr "Nessuna informazione" + +msgctxt "#60505" +msgid "[COLOR rosybrown]Uploading filmography...[/COLOR]" +msgstr "[COLOR rosybrown]Caricamento filmografia...[/COLOR]" + +msgctxt "#60506" +msgid "[COLOR plum]Picture collection...[/COLOR]" +msgstr "[COLOR plum]Raccolta di immagini...[/COLOR]" + +msgctxt "#60507" +msgid "[COLOR crimson][B]Error[/B][/COLOR]" +msgstr "[COLOR crimson][B]Errore[/B][/COLOR]" + +msgctxt "#60508" +msgid "[COLOR tomato]Video not available[/COLOR]" +msgstr "[COLOR tomato]Video non disponibile[/COLOR]" + +msgctxt "#60509" +msgid "Movies" +msgstr "Film" + +msgctxt "#60510" +msgid "Kids" +msgstr "Bambini" + +msgctxt "#60511" +msgid "TV series Episodes" +msgstr "Episodi di serie tv" + +msgctxt "#60512" +msgid "Anime Episodes" +msgstr "Episodi di anime" + +msgctxt "#60513" +msgid "Documentaries" +msgstr "Documentari" + +msgctxt "#60514" +msgid "Channels included in: %s" +msgstr "Canali inclusi in: %s" + +msgctxt "#60515" +msgid "Simultaneous search deactivated" +msgstr "Ricerca simultanea disattivata" + +msgctxt "#60516" +msgid "Simultaneous novelty search provides" +msgstr "La ricerca simultanea di novità fornisce" + +msgctxt "#60517" +msgid "higher speed and its deactivation is advisable only in case of failure." +msgstr "una maggiore velocità e la sua disattivazione è consigliabile solo in caso di guasto." + +msgctxt "#60518" +msgid "Would you like to activate the simultaneous search now?" +msgstr "Vuoi attivare la ricerca simultanea ora?" + +msgctxt "#60519" +msgid "Channel search..." +msgstr "Ricerca canali..." + +msgctxt "#60520" +msgid "Search in '%s'..." +msgstr "Ricerca in '%s'..." + +msgctxt "#60521" +msgid "Completed in %d/%d channels..." +msgstr "Completato in %d/%d canali..." + +msgctxt "#60522" +msgid "Results obtained: %s | Time: %2.f seconds" +msgstr "Risultati ottenuti: %s | Tempo: %2.f secondi" + +msgctxt "#60523" +msgid " (In %s and %s)" +msgstr " (In %s y %s)" + +msgctxt "#60524" +msgid " (In %s)" +msgstr " (In %s)" + +msgctxt "#60525" +msgid "Channels included in:" +msgstr "Canali inclusi in:" + +msgctxt "#60526" +msgid " - Movies " +msgstr " - Film " + +msgctxt "#60527" +msgid " - Kids" +msgstr " - Bambini" + +msgctxt "#60528" +msgid " - Series Tv Episodes" +msgstr " - Episodi di serie tv" + +msgctxt "#60529" +msgid " - Anime Episodes" +msgstr " - Episodi di anime" + +msgctxt "#60530" +msgid " - Documentaries" +msgstr " - Documentari" + +msgctxt "#60531" +msgid "Other Settings" +msgstr "Altre Impostazioni" + +msgctxt "#60532" +msgid "Configuration -- News" +msgstr "Configurazione -- Novità" + +msgctxt "#60533" +msgid "Channels included in News " +msgstr "Canali inclusi in Novità " + +msgctxt "#60534" +msgid "Last 2 months" +msgstr "Ultimi 2 Mesi" + +msgctxt "#60535" +msgid "Preferences" +msgstr "Preferenze" + +msgctxt "#60536" +msgid "Special settings" +msgstr "Impostazioni speciali" + +msgctxt "#60537" +msgid "Channel settings" +msgstr "Impostazioni canali" + +msgctxt "#60538" +msgid "Server settings" +msgstr "Impostazioni servers" + +msgctxt "#60539" +msgid "Settings for the 'News' section" +msgstr "Impostazioni per la sezione 'Novità'" + +msgctxt "#60540" +msgid "Global search settings" +msgstr "Impostazioni ricerca globale" + +msgctxt "#60541" +msgid "Download settings" +msgstr "Impostazioni download" + +msgctxt "#60542" +msgid "Videolibrary settings" +msgstr "Impostazioni della videoteca" + +msgctxt "#60544" +msgid "More Options" +msgstr "Altre opzioni" + +msgctxt "#60545" +msgid "Activate/deactivate channels" +msgstr "Attiva/disattiva canali" + +msgctxt "#60546" +msgid "Channel settings" +msgstr "Impostazioni dei canali" + +msgctxt "#60547" +msgid "Channel Configuration '%s'" +msgstr "Configurazione del canale '%s'" + +msgctxt "#60548" +msgid "HChannel Options" +msgstr "Opzioni del canale" + +msgctxt "#60549" +msgid "Check the files * _data.json" +msgstr "Controlla i file * _data.json" + +msgctxt "#60550" +msgid "Servers locked" +msgstr "Servers bloccati" + +msgctxt "#60551" +msgid "Favorite servers" +msgstr "Servers preferiti" + +msgctxt "#60552" +msgid "Debriders settings" +msgstr "Impostazioni debriders" + +msgctxt "#60553" +msgid " Server configuration '%s'" +msgstr " Configurazione del server '%s'" + +msgctxt "#60554" +msgid "Server settings" +msgstr "Impostazioni servers" + +msgctxt "#60557" +msgid "Saving configuration" +msgstr "Salvataggio configurazione" + +msgctxt "#60558" +msgid "Please wait." +msgstr "Attendere prego." + +msgctxt "#60559" +msgid "Saving configuration...%s" +msgstr "Salvataggio configurazione...%s" + +msgctxt "#60560" +msgid " - [COLOR red] CORRECTED!![/COLOR]" +msgstr " - [COLOR red] CORRETTO!![/COLOR]" + +msgctxt "#60561" +msgid "Saving configuration..." +msgstr "Salvataggio configurazione" + +msgctxt "#60562" +msgid "Please wait" +msgstr "Attendere prego" + +msgctxt "#60563" +msgid "Saving configuration..." +msgstr "Salvataggio configurazione" + +msgctxt "#60564" +msgid "Channel Options" +msgstr "Opzioni dei canali" + +msgctxt "#60565" +msgid " Check the files * _data.json" +msgstr " Controlla i file * _data.json" + +msgctxt "#60566" +msgid "Videolibrary options" +msgstr "Opzioni della videoteca" + +msgctxt "#60567" +msgid " Overwrite the entire video library (strm, nfo and json)" +msgstr "Sovrascrivi l'intera videoteca (strm, nfo e json)" + +msgctxt "#60568" +msgid " Search for new episodes and update the video library" +msgstr "Cerca nuovi episodi e aggiorna la videoteca" + +msgctxt "#60569" +msgid " - There are no default settings" +msgstr "- Non ci sono impostazioni predefinite" + +msgctxt "#60570" +msgid " | Error Detail: %s" +msgstr " | Dettaglio dell' errore: %s" + +msgctxt "#60571" +msgid " - [COLOR red] Default settings cannot be loaded![/COLOR]" +msgstr " - [COLOR red] Non è possibile caricare le impostazioni di default![/COLOR]" + +msgctxt "#60572" +msgid "Ask" +msgstr "Chiedere" + +msgctxt "#60577" +msgid "Order Servers" +msgstr "Ordina i server" + +msgctxt "#60578" +msgid " Server #%s" +msgstr " Server #%s" + +msgctxt "#60579" +msgid "Error" +msgstr "Errore" + +msgctxt "#60580" +msgid "A saving error occurred" +msgstr "Si è verificato un errore al salvataggio" + +msgctxt "#60581" +msgid "Overwriting the entire video library" +msgstr "Sovrascrittura di tutta la videoteca" + +msgctxt "#60582" +msgid "This may take some time." +msgstr "Questo potrebbe richiedere del tempo." + +msgctxt "#60583" +msgid "Do you want to continue?" +msgstr "Vuoi continuare?" + +msgctxt "#60584" +msgid "Overwriting the video library...TV SERIES" +msgstr "Sovrascrittura della videoteca....SERIE TV" + +msgctxt "#60585" +msgid "alfa" +msgstr "icarus" + +msgctxt "#60586" +msgid "Overwriting the video library...MOVIES" +msgstr "Sovrascrittura della videoteca....FILM" + +msgctxt "#60587" +msgid "Video library update...." +msgstr "Aggiornamento videoteca...." + +msgctxt "#60588" +msgid " - Settings created" +msgstr "- Impostazioni create" + +msgctxt "#60589" +msgid "- - No correction necessary" +msgstr " - Nessuna correzione necessaria" + +msgctxt "#60590" +msgid " - An error has occurred" +msgstr " - Si è verificato un errore" + +msgctxt "#60591" +msgid "Activate all" +msgstr "Attiva tutti" + +msgctxt "#60592" +msgid "Deactivate all" +msgstr "Disattiva tutti" + +msgctxt "#60593" +msgid "Default Set" +msgstr "Imposta di default" + +msgctxt "#60594" +msgid "All channels" +msgstr "Tutti i canali" + +msgctxt "#60595" +msgid " [COLOR grey](Default disabled)[/COLOR]" +msgstr " [COLOR grey](Disattivato di default)[/COLOR]" + +msgctxt "#60596" +msgid "Channels" +msgstr "Canali" + +msgctxt "#60597" +msgid " Server #%s" +msgstr " Server #%s" + +msgctxt "#60598" +msgid "Configuration -- Video Library" +msgstr "Configurazione -- Videoteca" + +msgctxt "#60600" +msgid "Series" +msgstr "Serie" + +msgctxt "#60601" +msgid "Video library update" +msgstr "Aggiornamento videoteca" + +msgctxt "#60602" +msgid "Never" +msgstr "Mai" + +msgctxt "#60603" +msgid "When Kodi starts" +msgstr "All'avvio di Kodi" + +msgctxt "#60604" +msgid "Once a day" +msgstr "Una volta al giorno" + +msgctxt "#60605" +msgid "At the start of Kodi and once a day" +msgstr "All'avvio di Kodi e una volta al giorno" + +msgctxt "#60606" +msgid " Wait before updating at startup of Kodi" +msgstr " Attendere prima di aggiornare all'avvio di Kodi" + +msgctxt "#60607" +msgid "When Kodi starts" +msgstr "All'avvio di Kodi" + +msgctxt "#60609" +msgid "10 sec" +msgstr "10 sec" + +msgctxt "#60610" +msgid "20 sec" +msgstr "20 sec" + +msgctxt "#60611" +msgid "30 sec" +msgstr "30 sec" + +msgctxt "#60612" +msgid "60 sec" +msgstr "60 sec" + +msgctxt "#60613" +msgid " Begin scheduled update from" +msgstr "Inizia aggiornamento programmato a partire dalle" + +msgctxt "#60614" +msgid " Search for new episodes in active tv series" +msgstr " Cerca nuovi episodi nelle serie attive" + +msgctxt "#60615" +msgid "Never" +msgstr "Mai" + +msgctxt "#60616" +msgid "Always" +msgstr "Sempre" + +msgctxt "#60617" +msgid "According to new episodes" +msgstr "Secondo le uscite" + +msgctxt "#60618" +msgid " Search for content in" +msgstr " Esegui ricerca dei contenuti in" + +msgctxt "#60619" +msgid "The folder of each tv series" +msgstr "La cartella di ogni serie" + +msgctxt "#60620" +msgid "All video library" +msgstr "Tutta la videoteca" + +msgctxt "#60621" +msgid "Show links in" +msgstr "Mostra collegamenti in" + +msgctxt "#60622" +msgid "Conventional window" +msgstr "Finestra convenzionale" + +msgctxt "#60623" +msgid "Pop-up window" +msgstr "Finestra pop-up" + +msgctxt "#60624" +msgid " Maximum number of links to display (recommended for slow devices)" +msgstr " Numero massimo di link da visualizzare (consigliato per dispositivi lenti)" + +msgctxt "#60625" +msgid "All" +msgstr "Tutti" + +msgctxt "#60626" +msgid " Sort by whitelist" +msgstr " Ordina per whitelist" + +msgctxt "#60627" +msgid " Remove the channel name at the beginning" +msgstr " Rimuovi il nome del canale all'inizio" + +msgctxt "#60628" +msgid " Pop-up window: Replace \"View in\" with \"[V]\" and \"Download in\" with \"[D]\"" +msgstr " Finestra pop-up: Sostituisci \"Vedi in\" con \"[V]\" e \"Scarica in\" con \"[D]\"" + +msgctxt "#60629" +msgid "Database location" +msgstr "Posizione del database" + +msgctxt "#60630" +msgid "Local" +msgstr "Locale" + +msgctxt "#60631" +msgid "Remote" +msgstr "Remota" + +msgctxt "#60632" +msgid " Server Name" +msgstr " Nome Server" + +msgctxt "#60633" +msgid " Server port" +msgstr " Porta del server" + +msgctxt "#60634" +msgid "Automatically mark as watched" +msgstr "Segna automaticamente come visto" + +msgctxt "#60635" +msgid " Video viewing time" +msgstr " Tempo di visione del video" + +msgctxt "#60636" +msgid "0 seg" +msgstr "0 sec" + +msgctxt "#60637" +msgid "Synchronizing with Trakt" +msgstr "Sincronizzazione con Trakt" + +msgctxt "#60638" +msgid " After mark as watched the episode" +msgstr " Dopo aver segnato come visto l'episodio" + +msgctxt "#60639" +msgid " Show notification" +msgstr " Mostra notifica" + +msgctxt "#60640" +msgid " On adding a TV series to the video library" +msgstr " All'aggiunta di una serie alla videoteca" + +msgctxt "#60641" +msgid " Wait until the tv series is added" +msgstr " Attendere finchè la serie sia aggiunta" + +msgctxt "#60642" +msgid "Show option \"All Seasons\"." +msgstr "Mostra l'opzione \"Tutte le stagioni\"" + +msgctxt "#60643" +msgid "Do not combine the seasons of the series"" +msgstr "Non unire le stagioni delle serie" + +msgctxt "#60644" +msgid "Only if there is one season" +msgstr "Solo se c'è una stagione" + +msgctxt "#60645" +msgid "Show channel selection box" +msgstr "Mostra la casella di selezione del canale" + +msgctxt "#60646" +msgid "Create directories on your system using" +msgstr "Crea directory sul sistema usando" + +msgctxt "#60647" +msgid "Localized title" +msgstr "Titolo in Italiano" + +msgctxt "#60648" +msgid "Never" +msgstr "Mai" + +msgctxt "#60649" +msgid "Original title" +msgstr "Titolo originale" + +msgctxt "#60650" +msgid "When you add content, you get information from:" +msgstr "All'aggiunta dei contenuti,ottieni informazioni da:" + +msgctxt "#60651" +msgid " Movies:" +msgstr " Film:" + +msgctxt "#60652" +msgid " TV Series:" +msgstr " Serie TV:" + +msgctxt "#60653" +msgid " If there are no results also search in English" +msgstr " Se non ci sono risultati cerca anche in inglese" + +msgctxt "#60654" +msgid "Include in blacklist" +msgstr "Includi in blacklist" + +msgctxt "#60655" +msgid "Include in Favorites List" +msgstr "Includi nella lista dei preferiti" + +msgctxt "#60656" +msgid "Simultaneous search (multiprocessing)" +msgstr "Ricerca contemporanea (multiprocessing)" + +msgctxt "#60657" +msgid "Show Results:" +msgstr "Mostra risultati:" + +msgctxt "#60658" +msgid "Grouped by content" +msgstr "Raggruppati per contenuto" + +msgctxt "#60659" +msgid "Grouped by channel" +msgstr "Raggruppati per canale" + +msgctxt "#60660" +msgid "Without group" +msgstr "Senza raggruppare" + +msgctxt "#60661" +msgid "News" +msgstr "Novità" + +msgctxt "#60662" +msgid "code cleaning" +msgstr "pulizia di codice" + +msgctxt "#60663" +msgid "Add the progress window" +msgstr "Aggiungi la finestra di avanzamento" + +msgctxt "#60664" +msgid "Eliminated unnecessary code." +msgstr "Eliminato codice non necessario." + +msgctxt "#60665" +msgid "Possibility to include other channels, through the configuration" +msgstr "Possibilità di includere altri canali, attraverso la configurazione" + +msgctxt "#60666" +msgid "Color Profile" +msgstr "Profilo di colore" + +msgctxt "#60667" +msgid "Cold" +msgstr "Freddo" + +msgctxt "#60668" +msgid "Hot" +msgstr "Caldo" + +msgctxt "#60669" +msgid "Lilac" +msgstr "Lilla" + +msgctxt "#60670" +msgid "Pastel" +msgstr "Pastello" + +msgctxt "#60671" +msgid "Vivid" +msgstr "Vivido" + +msgctxt "#60672" +msgid "Global Search" +msgstr "Ricerca globale" + +msgctxt "#60673" +msgid "MultiThread Search" +msgstr "Ricerca MultiThread" + +msgctxt "#60674" +msgid "Show Results:" +msgstr "Mostra risultati:" + +msgctxt "#60675" +msgid "Per channel" +msgstr "Per canale" + +msgctxt "#60676" +msgid "All Together" +msgstr "Tutto insieme" + +msgctxt "#60677" +msgid "Saved Searches:" +msgstr "Ricerche salvate" + +msgctxt "#60678" +msgid "Remember the latest search" +msgstr "Ricorda l'ultima ricerca" + +msgctxt "#60679" +msgid "Novelties in %s" +msgstr "Novità in %s" + +msgctxt "#60680" +msgid "documentaries" +msgstr "documentari" + +msgctxt "#60681" +msgid "movies" +msgstr "film" + +msgctxt "#60682" +msgid "tv series" +msgstr "serie tv" + +msgctxt "#60683" +msgid "anime" +msgstr "anime" + +msgctxt "#70000" +msgid "Options" +msgstr "Opzioni" + +msgctxt "#70001" +msgid "OK" +msgstr "OK" + +msgctxt "#70002" +msgid "Cancel" +msgstr "Annullare" + +msgctxt "#70003" +msgid "Default" +msgstr "Default" + +msgctxt "#70004" +msgid "Loading..." +msgstr "Caricamento..." + +msgctxt "#70005" +msgid "Previous" +msgstr "Precedente" + +msgctxt "#70006" +msgid "Next" +msgstr "Successivo" + +msgctxt "#70007" +msgid "Accept" +msgstr "Accetta" + +msgctxt "#70008" +msgid "Reload" +msgstr "Ricarica" + +msgctxt "#70009" +msgid "Classic Menu" +msgstr "Menu Principale" + +msgctxt "#70010" +msgid "Where To Search" +msgstr "Dove cercare" + +msgctxt "#70011" +msgid "Search for actor" +msgstr "Cerca attore" + +msgctxt "#70012" +msgid "Beginnin" +msgstr "Inizio" + +msgctxt "#70013" +msgid "Terror" +msgstr "Orrore" + +msgctxt "#70014" +msgid "Castellan" +msgstr "Castigliano" + +msgctxt "#70015" +msgid "Torrents" +msgstr "Torrents" + +msgctxt "#70016" +msgid "Active channels" +msgstr "Canali attivi" + +msgctxt "#70017" +msgid "TV Series" +msgstr "Serie TV" + +msgctxt "#70018" +msgid "Children" +msgstr "Bambini" + +msgctxt "#70019" +msgid "Documentary" +msgstr "Documentari" + +msgctxt "#70020" +msgid "[COLOR yellow]Search similar[/COLOR]" +msgstr "[COLOR yellow]Cerca simili[/COLOR]" + +msgctxt "#70021" +msgid "Search in TMDB" +msgstr "Cerca in TMDB" + +msgctxt "#70022" +msgid " - Movies" +msgstr " - Film" + +msgctxt "#70023" +msgid " - TV Shows" +msgstr " - Serie TV" + +msgctxt "#70024" +msgid "Search in Filmaffinity" +msgstr "Cerca in Filmaffinity" + +msgctxt "#70025" +msgid "Search in IMDB" +msgstr "Cerca in IMDB" + +msgctxt "#70026" +msgid "MyAnimeList" +msgstr "MyAnimeList" + +msgctxt "#70027" +msgid "Search engine settings" +msgstr "Impostazioni motori di ricerca" + +msgctxt "#70028" +msgid "Most Popular" +msgstr "Più Popolari" + +msgctxt "#70029" +msgid "Top rated" +msgstr "Più Votati" + +msgctxt "#70030" +msgid "On The Bill" +msgstr "In Cartellone" + +msgctxt "#70031" +msgid "Next" +msgstr "In Uscita" + +msgctxt "#70032" +msgid "Genres" +msgstr "Generi" + +msgctxt "#70033" +msgid "Actors/Actresses by popularity" +msgstr "Attori/Attrici per popolarità" + +msgctxt "#70034" +msgid "Coming Soon" +msgstr "Prossimamente" + +msgctxt "#70035" +msgid "Search %s" +msgstr "Cerca %s" + +msgctxt "#70036" +msgid "Search actor/actress" +msgstr "Cerca attore/attrice" + +msgctxt "#70037" +msgid "Search director, writer..." +msgstr "Cerca regista, sceneggiatore..." + +msgctxt "#70038" +msgid "Custom Filter" +msgstr "Filtro Personalizzato" + +msgctxt "#70039" +msgid "Keyword filter" +msgstr "Filtro per parola chiave" + +msgctxt "#70040" +msgid "Top Filmaffinity" +msgstr "Top Filmaffinity" + +msgctxt "#70041" +msgid "Modern TV Shows" +msgstr "Serie di attualità" + +msgctxt "#70042" +msgid "Year" +msgstr "Anno" + +msgctxt "#70043" +msgid "Coming Out" +msgstr "Prossime Uscite" + +msgctxt "#70044" +msgid "Sagas and Collections" +msgstr "Saghe e Collezioni" + +msgctxt "#70045" +msgid "Movies/TV Shows/Documentaries by Themes" +msgstr "Film/Serie/Documentari a Tema" + +msgctxt "#70046" +msgid "Search Movies/TV Shows" +msgstr "Cerca Film/Serie TV" + +msgctxt "#70047" +msgid " Search by director" +msgstr "Cerca per regista" + +msgctxt "#70048" +msgid " My Account" +msgstr " Il Mio Account" + +msgctxt "#70049" +msgid " Most Popular" +msgstr "Più Popolari" + +msgctxt "#70050" +msgid " Recommended Now" +msgstr "Da Vedere" + +msgctxt "#70051" +msgid " Most Anticipated " +msgstr "Più Attesi" + +msgctxt "#70052" +msgid " Custom recommendations" +msgstr "Raccomandazioni personalizzate" + +msgctxt "#70053" +msgid " Most Viewed" +msgstr "Più Visti" + +msgctxt "#70054" +msgid "Link your trakt account" +msgstr "Collega il tuo account trakt" + +msgctxt "#70055" +msgid "Watchlists" +msgstr "Lista Osservati" + +msgctxt "#70056" +msgid "Viewed" +msgstr "Visti" + +msgctxt "#70057" +msgid "My lists" +msgstr "Le Mie Liste" + +msgctxt "#70058" +msgid "Top Series" +msgstr "Top Serie TV" + +msgctxt "#70059" +msgid "Top Movies" +msgstr "Top Film" + +msgctxt "#70060" +msgid "Most Anticipated" +msgstr "Più Attesi" + +msgctxt "#70061" +msgid "Top Anime" +msgstr "Top Anime" + +msgctxt "#70062" +msgid "Anime by Seasons" +msgstr "Anime per Stagioni" + +msgctxt "#70063" +msgid "Anime by Genres" +msgstr "Anime per Genere" + +msgctxt "#70064" +msgid "Search Tv Shows/Movies/Anime" +msgstr "Cerca SerieTV/Film/Anime" + +msgctxt "#70065" +msgid ">> Next Page" +msgstr ">> Pagina successiva" + +msgctxt "#70066" +msgid " Search title in spanish: %s" +msgstr "Cerca il suo titolo in italiano: %s"" + +msgctxt "#70067" +msgid "Info Seasons [%s]" +msgstr "Info delle stagioni [%s]" + +msgctxt "#70068" +msgid "In my Collection" +msgstr "Nella mia Collezione" + +msgctxt "#70069" +msgid "Search %s in icarus: %s" +msgstr "Cerca %s in icarus: %s" + +msgctxt "#70070" +msgid " Search original title: %s" +msgstr "Cerca il titolo originale: %s" + +msgctxt "#70071" +msgid "Cast" +msgstr "Vedi Cast" + +msgctxt "#70072" +msgid " Most Viewed" +msgstr " Più Viste" + +msgctxt "#70073" +msgid "Most Anticipated" +msgstr "Più Attese" + +msgctxt "#70074" +msgid "Viewed" +msgstr "Viste" + +msgctxt "#70075" +msgid "Most Anticipated" +msgstr "Più Attese" + +msgctxt "#70076" +msgid "Top rated" +msgstr "Più Votate" + +msgctxt "#70077" +msgid " Most Viewed" +msgstr "Più Viste" + +msgctxt "#70078" +msgid "Show only links of " +msgstr "Mostra solo link di " + +msgctxt "#70079" +msgid "Remove only links of " +msgstr "Rimuovere solo i collegamenti di " + +msgctxt "#70080" +msgid "Do you want Alfa to auto-configure Kodi's video library?" +msgstr "Vuoi che Alfa auto-configuri la videoteca di Kodi?" + +msgctxt "#70081" +msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." +msgstr "Se scegli 'No' potrai farlo in seguito da 'Configurazione > Preferenze > Percorsi'." + +msgctxt "#70082" +msgid "Global Search" +msgstr "Ricerca Globale" + +msgctxt "#70083" +msgid "Show all links" +msgstr "Mostra tutti i link" + +msgctxt "#70084" +msgid "Delete movie" +msgstr "Elimina film" + +msgctxt "#70085" +msgid "Delete TV Show" +msgstr "Elimina serie" + +msgctxt "#70086" +msgid "Remove only links of %s" +msgstr "Rimuovere solo i collegamenti di %s" + +msgctxt "#70087" +msgid "Deleted %s links from canal %s" +msgstr "Eliminati %s links del canale %s" + +msgctxt "#70088" +msgid "Are you sure you want to delete '%s' from videolibrary ?" +msgstr "Vuoi davvero eliminare '%s' dalla videoteca?" + +msgctxt "#70089" +msgid "Show only links of %s" +msgstr "Mostra solo link di %s" + +msgctxt "#70090" +msgid " Exclude all streams with specific words" +msgstr "Escludi streams con specifiche parole" + +msgctxt "#70091" +msgid " Words" +msgstr "Parole" + +msgctxt "#70092" +msgid "Add to videolibrary" +msgstr "Aggiungere alla videoteca" + +msgctxt "#70093" +msgid "The Movie Database" +msgstr "The Movie Database" + +msgctxt "#70094" +msgid "Select scraper for movies" +msgstr "Seleziona provider info per i film" + +msgctxt "#70095" +msgid "Universal Movie Scraper not present.\nInstall it now?" +msgstr "Universal Movie Scraper\nNon presente.\nInstallarlo ora?" + +msgctxt "#70096" +msgid "Universal Movie Scraper" +msgstr "Universal Movie Scraper" + +msgctxt "#70097" +msgid "Universal Movie Scraper not installed." +msgstr "Universal Movie Scraper non è stato installato." + +msgctxt "#70098" +msgid "The TVDB" +msgstr "The TVDB" + +msgctxt "#70099" +msgid "The TVDB not installed." +msgstr "The TVDB non è stato installato." + +msgctxt "#70100" +msgid "The Movie Database not present.\nInstall it now?" +msgstr "The Movie Database\nNon presente.\nInstallarlo ora?" + +msgctxt "#70101" +msgid "Error fixing videolibrarypath in BD" +msgstr "Errore durante il fissaggio del videolibrarypath in BD" + +msgctxt "#70102" +msgid "Videolibrary %s not configured" +msgstr "Videoteca %s non configurata" + +msgctxt "#70103" +msgid "Videolibrary %s configured" +msgstr "Videoteca %s configurata" + +msgctxt "#70104" +msgid "Congratulations, the Kodi video library has been configured correctly." +msgstr "Complimenti, la videoteca di Kodi è stata configurata correttamente." + +msgctxt "#70105" +msgid "Do you want Alfa to automatically configure the Kodi library?You will be asked to set up scrapers for movies and series." +msgstr "Vuoi che Alfa auto-configuri la videoteca di Kodi?Ti verrà chiesto di installare i providers info per film e serie tv." + +msgctxt "#70106" +msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." +msgstr "Si Scegli 'No' potrai farlo in seguito da 'Ipostazioni > Preferenze > Percorsi'." + +msgctxt "#70107" +msgid "Select scraper for Tv Shows" +msgstr "Seleziona il provider info per le serie tv" + +msgctxt "#70108" +msgid "Icons Set" +msgstr "Set di icone" + +msgctxt "#70109" +msgid "Sync with Trakt.tv (You must have an account)" +msgstr "Sincronizza con Trakt.tv (necessario un account)" + +msgctxt "#70110" +msgid "Priority Method" +msgstr "Priorità" + +msgctxt "#70111" +msgid "Stop looking when you find an option" +msgstr "Smettere di cercare quando si trova un'opzione" + +msgctxt "#70112" +msgid "Hide payment servers without an account" +msgstr "Nascondere servers senza account" + +msgctxt "#70113" +msgid "Password (default 0000)" +msgstr "Password (default 0000):" + +msgctxt "#70114" +msgid "Only until Kodi restarts" +msgstr "Fino al riavvio di Kodi" + +msgctxt "#70115" +msgid "Request password to open adult channels" +msgstr "Richiedi password per aprire canali per adulti" + +msgctxt "#70116" +msgid "New password:" +msgstr "Nuova password:" + +msgctxt "#70117" +msgid "Confirm New password:" +msgstr "Conferma Nuova password:" + +msgctxt "#70118" +msgid "Folder name for 'Series'" +msgstr "Nome della cartella per 'Serie'" + +msgctxt "#70119" +msgid "Folder name for 'Movies'" +msgstr "Nome della cartella per 'Film'" + +msgctxt "#70120" +msgid "Autoconfigure XBMC / Kodi library for Alfa content" +msgstr "Autoconfigura videoteca di XBMC/Kodi per il contenuto di Alfa" + +msgctxt "#70121" +msgid "Activate Home Page" +msgstr "Attivare Home Page" + +msgctxt "#70122" +msgid "Custom (select from a channel)" +msgstr "Personalizato (selezionare da un canale)" + +msgctxt "#70123" +msgid "Show Recent" +msgstr "Mostra Novità" + +msgctxt "#70124" +msgid "Category" +msgstr "Categoria" + +msgctxt "#70125" +msgid "Movie|Tv Shows|Anime|Children|Documentary|Horror|Castellan|Latin|Torrent" +msgstr "Fim|Serie TV|Anime|Bambini|Documentari|Horror|Castigliano|Latino|Torrent" + +msgctxt "#70126" +msgid "Visual Options" +msgstr "Opzioni Vista" + +msgctxt "#70127" +msgid "Anime" +msgstr "Anime" + +msgctxt "#70128" +msgid "Infoplus visual option" +msgstr "Opzioni Vista Infoplus" + +msgctxt "#70129" +msgid "Without animation" +msgstr "Senza animazione" + +msgctxt "#70130" +msgid "With animation" +msgstr "Con animazione" + +msgctxt "#70131" +msgid "Thumbnail for videos" +msgstr "Thumbnail per i video" + +msgctxt "#70132" +msgid "Poster" +msgstr "Poster" + +msgctxt "#70133" +msgid "Server logo" +msgstr "Server logo" + +msgctxt "#70134" +msgid "Intelligent Titles" +msgstr "Titoli Intelligenti" + +msgctxt "#70135" +msgid "Custom Colours" +msgstr "Colori Personalizzati" + +msgctxt "#70136" +msgid "Tv Show" +msgstr "Serie" + +msgctxt "#70137" +msgid "Movie" +msgstr "Film" + +msgctxt "#70138" +msgid "Low Rating" +msgstr "Valutazione Bassa" + +msgctxt "#70139" +msgid "Average Rating" +msgstr "Valutazione Media" + +msgctxt "#70140" +msgid "High Rating" +msgstr "Valutazione Alta" + +msgctxt "#70141" +msgid "Quality" +msgstr "Qualita" + +msgctxt "#70142" +msgid "VOSE (Original Subtitled Spanish Version)" +msgstr "VOSE (Version Original Sottotitolato Spagnolo)" + +msgctxt "#70143" +msgid "VOS (Original Subtitled Version)" +msgstr "VOS (Version Original Sottotitolato)" + +msgctxt "#70144" +msgid "VO (Original Version Originale)" +msgstr "VO (Original)" + +msgctxt "#70145" +msgid "Servers" +msgstr "Servers" + +msgctxt "#70146" +msgid "Add to videolibrary" +msgstr "Aggiungi alla Videoteca" + +msgctxt "#70147" +msgid "Videolibrary (Update series)" +msgstr "Videoteca (Aggiorna serie)" + +msgctxt "#70148" +msgid "Videolibrary (Do not update series)" +msgstr "Videoteca (Non aggiornare serie)" + +msgctxt "#70149" +msgid "Others" +msgstr "Altro" + +msgctxt "#70150" +msgid "Movie/series info in contextual menu" +msgstr "Info film/serie nel menu contestuale" + +msgctxt "#70151" +msgid "Show Infoplus option:" +msgstr "Mostra opzione Infoplus:" + +msgctxt "#70152" +msgid "Show ExtendedInfo option (External addon required):" +msgstr "Mostra opzione ExtendedInfo (Necessario addon esterno):" + +msgctxt "#70153" +msgid "Buttons/Access keys (Changes require Kodi restart)" +msgstr "Pulsanti/Chiavi di accesso (le modifiche richiedono il riavvio di Kodi)" + +msgctxt "#70154" +msgid "TheMovieDB (obtains data from movies or series)" +msgstr "TheMovieDB (ottieni dati dei film o series)" + +msgctxt "#70155" +msgid "Simultaneous searches (may cause instability)" +msgstr "Ricerche Simultanee (può causare instabilità)" + +msgctxt "#70156" +msgid "Search extended information (actor's data) Increase search time" +msgstr "Cerca informazioni estese (dati sugli attori) Aumenta il tempo di ricerca" + +msgctxt "#70157" +msgid "Use cache (improves recurring searches)" +msgstr "Usa cache (mejora le ricerche ricorrenti)" + +msgctxt "#70158" +msgid "every 1 day" +msgstr "ogni 1 giorni" + +msgctxt "#70159" +msgid "every 7 days" +msgstr "ogni 7 giorni" + +msgctxt "#70160" +msgid "every 15 days" +msgstr "ogni 15 giorni" + +msgctxt "#70161" +msgid "every 30 days" +msgstr "ogni 30 giorni" + +msgctxt "#70162" +msgid "Renew cache?" +msgstr "Rinnovare la cache?" + +msgctxt "#70163" +msgid "Press to 'Clear cache' saved" +msgstr "Clicca per 'Eliminare la cache' salvata" + +msgctxt "#70164" +msgid "Free First" +msgstr "Free prima" + +msgctxt "#70165" +msgid "Premium First" +msgstr "Premium prima" + +msgctxt "#70166" +msgid "Debriders First" +msgstr "Debriders prima" + +msgctxt "#70167" +msgid "Titles Options" +msgstr "Opzioni per i Titoli" + +msgctxt "#70168" +msgid "General" +msgstr "Generale" + +msgctxt "#70169" +msgid "Servers use" +msgstr "Uso dei servers" + +msgctxt "#70170" +msgid "No" +msgstr "No" + +msgctxt "#70171" +msgid "Torrent" +msgstr "Torrent" + +msgctxt "#70172" +msgid " Plan B (If favourites fail try other links)" +msgstr " Piano B (Se i preferiti non vanno prova altri link)" + +msgctxt "#70173" +msgid "No working links" +msgstr "Nessun link funzionante" + +msgctxt "#70174" +msgid "Server and Quality" +msgstr "Servidor y Calidad" + +msgctxt "#70175" +msgid "Quality and Server" +msgstr "Calidad y Servidor" + +msgctxt "#70176" +msgid "Wait" +msgstr "Attendi" + +msgctxt "#70177" +msgid "seconds for the video to start ..." +msgstr "secondi che inizi il video..." + +msgctxt "#70178" +msgid "Trying with: %s" +msgstr "Provando con: %s" + +msgctxt "#70179" +msgid "Getting list of available servers ..." +msgstr "Ottenimento lista servers disponibili..." + +msgctxt "#70180" +msgid "Connecting with %s..." +msgstr "Connessione con %s..." + +msgctxt "#70181" +msgid "Available servers: %s" +msgstr "Servers disponibili: %s" + +msgctxt "#70182" +msgid "Identifying servers ..." +msgstr "Identificazione servers..." + +msgctxt "#70183" +msgid "Getting list of available servers" +msgstr "Ottenimento lista servers disponibili" + +msgctxt "#70184" +msgid "Getting list of available servers:" +msgstr "Ottenimento lista servers disponibili:" + +msgctxt "#70185" +msgid " chapters of: " +msgstr " capitoli di: " + +msgctxt "#70186" +msgid "Getting episodes..." +msgstr "Ottenimento episodi..." + +msgctxt "#70187" +msgid "connecting with %s..." +msgstr "connessione con %s..." + +msgctxt "#70188" +msgid "Obtaining data from the series" +msgstr "Ottenimento dati della serie" + +msgctxt "#70189" +msgid "Start the download now?" +msgstr "Iniziare il download ora?" + +msgctxt "#70190" +msgid "Add chapters..." +msgstr "Aggiunta capitoli..." + +msgctxt "#70191" +msgid "Obtaining data from the movie" +msgstr "Ottenimento dati del film" + +msgctxt "#70192" +msgid "Select server" +msgstr "Seleziona il server" + +msgctxt "#70193" +msgid "Open torrent with..." +msgstr "Apri torrent con..." + +msgctxt "#70194" +msgid "alfa-torrent" +msgstr "alfa-torrent" + +msgctxt "#70195" +msgid "Alfa - Torrent" +msgstr "Alfa - Torrent" + +msgctxt "#70196" +msgid "Beginning..." +msgstr "Inizio..." + +msgctxt "#70197" +msgid "Automatically stopping at: %ss" +msgstr "Arresto automatico in: %ss" + +msgctxt "#70198" +msgid "Do you want to start playback?" +msgstr "Vuoi iniziare la riproduzione?" + +msgctxt "#70199" +msgid "Do you want to cancel the process?" +msgstr "Vuoi annullare il processo?" + +msgctxt "#70200" +msgid "Finishing and deleting data" +msgstr Fine e cancellazione dati" + +msgctxt "#70201" +msgid "Mass Testing Tools" +msgstr "Strumenti di test massivo" + +msgctxt "#70202" +msgid "- Test channels ..." +msgstr "- Test canali ..." + +msgctxt "#70203" +msgid "- Test servers ..." +msgstr "- Test servers ..." + +msgctxt "#70204" +msgid "- Test recent!" +msgstr "- Test novità!" + +msgctxt "#70205" +msgid "- Upload tests to web!" +msgstr "- Upload tests su web!" + +msgctxt "#70206" +msgid "Link found in %s" +msgstr " %s" + From 51935e8ad1b69750cf1a6d8a6e6bc687732a7496 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 16 Jun 2018 14:26:20 +0200 Subject: [PATCH 02/66] Add files via upload --- .../resources/language/Spanish/strings.po | 3360 ++++++++++++++++- 1 file changed, 3311 insertions(+), 49 deletions(-) diff --git a/plugin.video.alfa/resources/language/Spanish/strings.po b/plugin.video.alfa/resources/language/Spanish/strings.po index 38cecf4d..17b7b58c 100644 --- a/plugin.video.alfa/resources/language/Spanish/strings.po +++ b/plugin.video.alfa/resources/language/Spanish/strings.po @@ -6,16 +6,20 @@ msgstr "" "Project-Id-Version: KODI Main\n" "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Kodi Translation Team\n" -"Language-Team: Spanish (Spanish) (http://www.transifex.com/projects/p/kodi-main/language/en_GB/)\n" +"PO-Revision-Date: 2018-03-26 03:02+0200\n" +"Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es_ES\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.0.4\n" +"Last-Translator: MrTruth\n" +"Last-Translator: Angedam\n" +"Language: es_ES\n" -# empty string with id 30000 +msgctxt "#20000" +msgid "Alfa" +msgstr "Alfa" msgctxt "#30001" msgid "Check for updates:" @@ -23,16 +27,12 @@ msgstr "Comprobar actualizaciones:" msgctxt "#30002" msgid "Enable adult mode:" -msgstr "Mostrar canales para adultos" +msgstr "Activar canales para adultos:" msgctxt "#30003" msgid "Enable debug logging:" msgstr "Generar log detallado:" -msgctxt "#30043" -msgid "Force view mode:" -msgstr "Forzar el modo de vista:" - msgctxt "#30004" msgid "Automatic update channels:" msgstr "Actualizar automáticamente canales:" @@ -53,8 +53,6 @@ msgctxt "#30008" msgid "Watch in high quality" msgstr "Ver en calidad alta" -# empty string with id 30009 - msgctxt "#30010" msgid "Channel icons view:" msgstr "Logos de canales:" @@ -67,22 +65,14 @@ msgctxt "#30012" msgid "Banner (horizontal)" msgstr "Banner (horizontal)" -msgctxt "#30200" -msgid "Square" -msgstr "Cuadrado" - -# empty string with id 30013 - msgctxt "#30014" msgid "Username:" -msgstr "Usuario:" +msgstr "Username:" msgctxt "#30015" msgid "Password:" msgstr "Password:" -# empty string with id 30016 - msgctxt "#30017" msgid "Download path:" msgstr "Directorio de descargas:" @@ -91,22 +81,18 @@ msgctxt "#30018" msgid "Download list path:" msgstr "Directorio de lista descargas:" -msgctxt "#30067" -msgid "Videolibrary path:" -msgstr "Directorio de la videoteca:" - msgctxt "#30019" msgid "Filter channels by language:" -msgstr "Filtrar canales por idioma:" +msgstr "Filter channels by language:" + +msgctxt "#30043" +msgid "Force view mode:" +msgstr "Forzar el modo de vista:" msgctxt "#30044" msgid "Play mode:" msgstr "Modo de reproducción:" -msgctxt "#30068" -msgid "Filter by servers:" -msgstr "Filtrar por servidores:" - msgctxt "#30050" msgid "Server connection error" msgstr "No se puede conectar con el servidor" @@ -131,8 +117,16 @@ msgctxt "#30065" msgid "Unsopported Server" msgstr "Servidor no soportado" +msgctxt "#30067" +msgid "Videolibrary path:" +msgstr "Directorio de la videoteca:" + +msgctxt "#30068" +msgid "Filter by servers:" +msgstr "Filtrar por servidores:" + msgctxt "#30100" -msgid "Configuration" +msgid "Settings" msgstr "Configuración" msgctxt "#30101" @@ -167,14 +161,6 @@ msgctxt "#30112" msgid "Enter title to search" msgstr "Introduce el título a buscar" -msgctxt "#30135" -msgid "added to the videolibrary" -msgstr "se ha añadido a la videoteca" - -msgctxt "#30130" -msgid "Recent" -msgstr "Novedades" - msgctxt "#30118" msgid "Channels" msgstr "Canales" @@ -203,22 +189,30 @@ msgctxt "#30125" msgid "Documentaries" msgstr "Documentales" -msgctxt "#30136" -msgid "Original version" -msgstr "Versión original" - msgctxt "#30126" msgid "Adult" -msgstr "" +msgstr "Adultos" -msgctxt "#30137" -msgid "Direct" -msgstr "Directos" +msgctxt "#30130" +msgid "Recent" +msgstr "Novedades" msgctxt "#30131" msgid "Videolibrary" msgstr "Videoteca" +msgctxt "#30135" +msgid "added to the videolibrary" +msgstr "added to the videolibrary" + +msgctxt "#30136" +msgid "Original version" +msgstr "Versión original" + +msgctxt "#30137" +msgid "Direct" +msgstr "Directos" + msgctxt "#30151" msgid "Watch the video" msgstr "Ver el vídeo" @@ -251,6 +245,10 @@ msgctxt "#30164" msgid "Delete this file" msgstr "Borrar este fichero" +msgctxt "#30200" +msgid "Square" +msgstr "Cuadrado" + msgctxt "#30300" msgid "Faster context menus" msgstr "Menús contextuales rápidos (puede causar que algunas opciones no funcionen)" @@ -259,10 +257,3274 @@ msgctxt "#30501" msgid "Paths" msgstr "Rutas" +msgctxt "#30974" +msgid "Search in Channels" +msgstr "Buscar en los canales" + +msgctxt "#30975" +msgid "Movie Info" +msgstr "Información de la película" + +msgctxt "#30976" +msgid "TVShows - Airing Today" +msgstr "TVShows - Airing Today" + +msgctxt "#30977" +msgid "Last Episodes - On-Air" +msgstr "Últimos episodios - en el aire" + +msgctxt "#30978" +msgid "New TVShows" +msgstr "Nuevas Series" + +msgctxt "#30979" +msgid "Character Info" +msgstr "Información de personajes" + +msgctxt "#30980" +msgid "Search by Title" +msgstr "Búsqueda por Titulo" + +msgctxt "#30981" +msgid "Search by Person" +msgstr "Búsqueda por Persona" + +msgctxt "#30982" +msgid "Search by Company" +msgstr "Búsqueda por Company" + +msgctxt "#30983" +msgid "Now Playing" +msgstr "Ahora Playing" + +msgctxt "#30984" +msgid "Popular" +msgstr "Populares" + +msgctxt "#30985" +msgid "Top Rated" +msgstr "Top Rated" + +msgctxt "#30986" +msgid "Search by Collection" +msgstr "Búsqueda por Colección" + +msgctxt "#30987" +msgid "Genre" +msgstr "Generos" + +msgctxt "#30988" +msgid "Search by Year" +msgstr "Búsqueda por año" + +msgctxt "#30989" +msgid "Search Similar Movies" +msgstr "Buscar películas similares" + +msgctxt "#30990" +msgid "Search TV show" +msgstr "Buscar series" + +msgctxt "#30991" +msgid "Library" +msgstr "Biblioteca" + +msgctxt "#30992" +msgid "Next Page" +msgstr "Página Siguiente" + +msgctxt "#30993" +msgid "Looking for %s..." +msgstr "Buscando %s..." + +msgctxt "#30994" +msgid "Searching in %s..." +msgstr "Buscando en %s..." + +msgctxt "#30995" +msgid "%d found so far: %s" +msgstr "%d encontrado hasta ahora: %s" + +msgctxt "#30996" +msgid "Most Voted" +msgstr "Los más votados" + +msgctxt "#30997" +msgid "Academy Awards" +msgstr "Academy Awards" + msgctxt "#30998" msgid "Shortcut" -msgstr "Acceso directo" +msgstr "Shortcut" msgctxt "#30999" msgid "Add key to open Shortcut" -msgstr "Añadir tecla para acceso directo" \ No newline at end of file +msgstr "Agregar clave para abrir el atajo" + +msgctxt "#50000" +msgid "Sagas" +msgstr "Sagas" + +msgctxt "#50001" +msgid "Today on TV" +msgstr "Hoy en TV" + +msgctxt "#50002" +msgid "Latest News" +msgstr "Últimas Novedades" + +msgctxt "#50003" +msgid "Loading" +msgstr "Cargando" + +msgctxt "#50004" +msgid "Path: " +msgstr "Ruta: " + +msgctxt "#59970" +msgid "Synchronization with Trakt started" +msgstr "Sincronizacion con Trakt iniciada" + +msgctxt "#59971" +msgid "Alfa Auto-configuration" +msgstr "Alfa Auto-configuración" + +msgctxt "#59972" +msgid "Search for: '%s' | Found: %d vídeos | Time: %2.f seconds" +msgstr "Buscando: '%s' | Encontrado: %d vídeos | Tiempo: %2.f segundos" + +msgctxt "#59973" +msgid "Search Cancelled" +msgstr "Búsqueda cancelada" + +msgctxt "#59974" +msgid "Choose categories" +msgstr "Elegir categorías" + +msgctxt "#59975" +msgid "Subtitles" +msgstr "VOS" + +msgctxt "#59976" +msgid "Latin" +msgstr "Latino" + +msgctxt "#59977" +msgid "4k" +msgstr "4k" + +msgctxt "#59978" +msgid "horror" +msgstr "terror" + +msgctxt "#59979" +msgid "kids" +msgstr "infantiles" + +msgctxt "#59980" +msgid "Castilian" +msgstr "castellano" + +msgctxt "#59981" +msgid "latin" +msgstr "latino" + +msgctxt "#59982" +msgid "torrent" +msgstr "torrent" + +msgctxt "#59983" +msgid "" +msgstr "" + +msgctxt "#59984" +msgid "An error has occurred in alfa, \nCheck log for more details." +msgstr "Se ha producido un error en alfa,\nComprueba el log para ver mas detalles del error." + +msgctxt "#59985" +msgid "Error in the channel" +msgstr "Error en el canal" + +msgctxt "#59986" +msgid "Error loading the server: %s\n" +msgstr "Error al cargar el servidor: %s\n" + +msgctxt "#59987" +msgid "Start downloading now?" +msgstr "¿Iniciar la descargaahora?" + +msgctxt "#59988" +msgid "Saving configuration..." +msgstr "Guardando configuración..." + +msgctxt "#59989" +msgid "Please wait" +msgstr "Espere un momento por favor." + +msgctxt "#59990" +msgid "Channels included in the search" +msgstr "Canales incluidos en la búsqueda" + +msgctxt "#59991" +msgid "All" +msgstr "Todos" + +msgctxt "#59992" +msgid "None" +msgstr "Ninguno" + +msgctxt "#59993" +msgid "Configuration -- Search" +msgstr "configuración -- Buscador" + +msgctxt "#59994" +msgid "Choose channels to include in your search" +msgstr "Elegir canales incluidos en la búsqueda" + +msgctxt "#59995" +msgid "Saved Searches" +msgstr "Búsquedasguardadas" + +msgctxt "#59996" +msgid "Delete saved searches" +msgstr "Borrar búsquedas guardadas" + +msgctxt "#59997" +msgid "Options" +msgstr "Opciones" + +msgctxt "#59998" +msgid "Search by categories (advanced search)" +msgstr "Buscar por categorias (búsqueda avanzada)" + +msgctxt "#59999" +msgid "Search for actor/actress" +msgstr "Buscar actor/actriz" + +msgctxt "#60000" +msgid "Filter server (Black List)" +msgstr "Filtrar servidores (Lista Negra)" + +msgctxt "#60001" +msgid "Filter server (Black List)\nNo connection available that meets the requirements of the Black list.\nTry again by changing the filter in 'Server Configuration" +msgstr "Filtrar servidores (Lista Negra)\nNo hay enlaces disponibles que cumplan los requisitos de su Lista Negra.\nPruebe de nuevo modificando el fíltro en 'Configuracíon Servidores"" + +msgctxt "#60003" +msgid "Connecting with %s" +msgstr "Conectando con %s" + +msgctxt "#60004" +msgid "No connector for the server %s" +msgstr "No existe conector para el servidor %s" + +msgctxt "#60005" +msgid "Connecting with %s" +msgstr "Conectando con %s" + +msgctxt "#60006" +msgid "An error has occurred in %s" +msgstr "Se ha producido un error en %s" + +msgctxt "#60007" +msgid "An error has occurred on %s" +msgstr "Se ha producido un error en %s" + +msgctxt "#60008" +msgid "Process completed" +msgstr "Proceso finalizado" + +msgctxt "#60009" +msgid "To watch a vide on %s you need
an account on: %s" +msgstr "Para ver un vídeo en %s necesitas
una cuenta en: %s" + +msgctxt "#60010" +msgid "All available links belongs to server on your black list.\nDo you want to show these links?" +msgstr "Filtrar servidores (Lista Negra)\nTodos los enlaces disponibles pertenecen a servidores incluidos en su Lista Negra.\n¿Desea mostrar estos enlaces?" + +msgctxt "#60011" +msgid "Cache deleted" +msgstr "cachè eliminada" + +msgctxt "#60012" +msgid "No video to play" +msgstr "No hay nada que reproducir" + +msgctxt "#60013" +msgid "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s.\nIf the web page is working correctly, please report the error on : https://alfa-addon.com/categories/alfa-addon.50/" +msgstr "La web de la que depende parece no estar disponible, puede volver a intentarlo,\nsi el problema persiste verifique mediante un navegador la web: %s. \nSi la web funciona correctamente informe el error en: www.alfa-addon.com" + +msgctxt "#60014" +msgid "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of alfa.\nTo have more details, see the log file." +msgstr "Puede deberse a un fallo de conexión, la web del canal\nha cambiado su estructura,o un error interno de alfa.\nPara saber más detalles, consulta el log." + +msgctxt "#60015" +msgid "Check the log for more details on the error." +msgstr "Comprueba el log para ver mas detalles del error." + +msgctxt "#60016" +msgid "Segna film come non visto" +msgstr "Marcar película como no vista" + +msgctxt "#60017" +msgid "Mark movie as not watched" +msgstr "Marcar película como vista" + +msgctxt "#60018" +msgid "Delete movie/channel" +msgstr "Eliminar película/canal" + +msgctxt "#60019" +msgid "Delete this movie" +msgstr "Eliminar esta película" + +msgctxt "#60020" +msgid "Mark tv series as not watched" +msgstr "Marcar serie como no vista" + +msgctxt "#60021" +msgid "Mark tv series as watched" +msgstr "Marcar serie como vista" + +msgctxt "#60022" +msgid "Automatically find new episodes: Disable" +msgstr Buscar automáticamente nuevos episodios: Desactivar" + +msgctxt "#60023" +msgid "Automatically find new episodes: Enable" +msgstr "Buscar automáticamente nuevos episodios: Activar" + +msgctxt "#60024" +msgid "Delete tv series/channel" +msgstr "Eliminar serie/canal" + +msgctxt "#60025" +msgid "Delete tv series" +msgstr "Eliminar esta serie" + +msgctxt "#60026" +msgid "Search for new episodes and update" +msgstr "Buscar nuevos episodios y actualizar videoteca" + +msgctxt "#60027" +msgid "Season %s" +msgstr "Temporada %s" + +msgctxt "#60028" +msgid "Segna stagione come non vista" +msgstr "Marcar temporada como no vista" + +msgctxt "#60029" +msgid "Mark season as not watched" +msgstr "Marcar temporada como vista" + +msgctxt "#60030" +msgid "*All the seasons" +msgstr "*Todas las temporadas" + +msgctxt "#60031" +msgid "Season %s Episode %s" +msgstr "Temporada %s Episodio %s" + +msgctxt "#60032" +msgid "Mark episode as not watched" +msgstr "Marcar episodio como no visto" + +msgctxt "#60033" +msgid "Mark episode as watched" +msgstr "Marcar episodio como visto" + +msgctxt "#60034" +msgid "Show only link %s" +msgstr "Mostrar solo los enlaces de %s" + +msgctxt "#60035" +msgid "Show all the links" +msgstr "Mostrar todos los enlaces" + +msgctxt "#60036" +msgid "Episode %s" +msgstr "Episodio %s" + +msgctxt "#60037" +msgid "Tv series update ..." +msgstr "Actualizando serie...." + +msgctxt "#60038" +msgid "An error has occurred on alfa" +msgstr "Si è verificato un errore su alfa" + +msgctxt "#60039" +msgid "Error on channel %s" +msgstr "Error en el canal %s" + +msgctxt "#60040" +msgid "Delete movie" +msgstr "Eliminar película" + +msgctxt "#60041" +msgid "Delete tv series" +msgstr "Eliminar serie" + +msgctxt "#60042" +msgid "Delete only the links of %s" +msgstr "Eliminar solo los enlaces de %s" + +msgctxt "#60043" +msgid "Delete %s links of channel %s" +msgstr "Eliminados %s enlaces del canal %s" + +msgctxt "#60044" +msgid "Do you want really to delete '%s' from videolibrary?" +msgstr "¿Realmente desea eliminar '%s' de su videoteca?" + +msgctxt "#60045" +msgid "Sync with Trakt started" +msgstr "Sincronizacion con Trakt iniciada" + +msgctxt "#60046" +msgid "TheMovieDB not present.\nInstall it now?" +msgstr "TheMovieDB\nNo se ha encontrado el Scraper de películas de TheMovieDB.\n¿Desea instalarlo ahora?" + +msgctxt "#60047" +msgid "The Movie Database is not installed." +msgstr "The Movie Database no instalado." + +msgctxt "#60048" +msgid "The TVDB not present.\nInstall it now?" +msgstr "The TVDB\nNo se ha encontrado el Scraper de series de The TVDB.\n¿Desea instalarlo ahora?" + +msgctxt "#60049" +msgid "The TVDB is not installed." +msgstr "The TVDB non è installato." + +msgctxt "#60050" +msgid "TheMovieDB not present.\nInstall it now?" +msgstr "TheMovieDB non presente.\nInstallare ora?" + +msgctxt "#60051" +msgid "The Movie Database is not installed." +msgstr "The Movie Database non è installato." + +msgctxt "#60052" +msgid "Error on setting LibraryPath in BD" +msgstr "Errore di impostazione LibraryPath in BD" + +msgctxt "#60053" +msgid "Do you want to configure this scraper in italian as default option for the movies ?" +msgstr "¿Desea configurar este Scraper en español como opción por defecto para películas?" + +msgctxt "#60054" +msgid "Do you want to configure this scraper in italian as default option for the tv series ?" +msgstr "¿Desea configurar este Scraper en español como opción por defecto para series?" + +msgctxt "#60055" +msgid "Error of provider configuration in BD." +msgstr "Error al configurar el scraper en la BD." + +msgctxt "#60060" +msgid "Alfa Auto-configuration" +msgstr "Alfa Auto-configuración" + +msgctxt "#60062" +msgid "Adding movie..." +msgstr "Añadiendo película..." + +msgctxt "#60063" +msgid "Error in adding movies to your video library..." +msgstr "Fallo al añadir..." + +msgctxt "#60064" +msgid "Adding Episodes to the Video Library..." +msgstr "Añadiendo episodios..." + +msgctxt "#60065" +msgid "Added Episode" +msgstr "Añadiendo episodio..." + +msgctxt "#60066" +msgid "ERROR, It has NOT been possible to add the video to the video library" +msgstr "ERROR, la pelicula NO se ha añadido a la videoteca" + +msgctxt "#60067" +msgid "ERROR, tv series has NOT been added to videolibrary\nIt has NOT been possible to add no episode" +msgstr "ERROR, la serie NO se ha añadido a la videoteca\nNo se ha podido obtener ningun episodio" + +msgctxt "#60068" +msgid "ERROR, tv series has NOT been added to videolibrary" +msgstr "ERROR, la serie NO se ha añadido a la videoteca" + +msgctxt "#60069" +msgid "ERRORE, tv series has NOT been added completely to videolibrary" +msgstr "ERROR, la serie NO se ha añadido completa a la videoteca" + +msgctxt "#60070" +msgid "tv series has been added to videolibrary" +msgstr "La serie se ha añadido a la videoteca" + +msgctxt "#60071" +msgid "Autoplay Configuration" +msgstr "Configurar AutoPlay" + +msgctxt "#60072" +msgid "It seems that links of %s are not working." +msgstr "Parece que los enlaces de %s no estan funcionando." + +msgctxt "#60073" +msgid "Do you want to ignore all the links from this server?" +msgstr "¿Desea ignorar todos los enlaces de este servidor?" + +msgctxt "#60074" +msgid "It's not possible to use AutoPlay" +msgstr "AutoPlay No Fue Posible" + +msgctxt "#60075" +msgid "No coincidence" +msgstr "No Hubo Coincidencias" + +msgctxt "#60076" +msgid "New quality/server available in \nConfiguration" +msgstr "Nueva Calidad/Servidor disponible en la \nConfiguracion" + +msgctxt "#60077" +msgid "AutoPlay initialization error" +msgstr "Error al iniciar AutoPlay" + +msgctxt "#60078" +msgid "View the log for more information." +msgstr "Consulte su log para obtener mas información." + +msgctxt "#60079" +msgid "AutoPlay (Turns AutoPlay On/Off)" +msgstr "AutoPlay (activar/desactivar la auto-reproduccion)" + +msgctxt "#60080" +msgid "AutoPlay Language (Optional)" +msgstr "Idioma para AutoPlay (Opcional)" + +msgctxt "#60081" +msgid " Favorite servers" +msgstr " Servidores favoritos" + +msgctxt "#60082" +msgid " \u2665 Favorite server %s" +msgstr " \u2665 Servidor Favorito %s + +msgctxt "#60083" +msgid " Preferred Qualities" +msgstr " Calidades Favoritas" + +msgctxt "#60084" +msgid " \u2665 Preferred Quality %s" +msgstr " \u2665 Calidad Favorita %s" + +msgctxt "#60085" +msgid " Priority (Indicates the order for AutoPlay)" +msgstr " Prioridad (Indica el orden para Auto-Reproducir)" + +msgctxt "#60086" +msgid "It has been renamed to:" +msgstr "È Stato rinominato in:" + +msgctxt "#60087" +msgid "Unexpected error on channel %s" +msgstr "Error inesperado en el canal %s" + +msgctxt "#60088" +msgid "Enter URL" +msgstr "Tengo una URL" + +msgctxt "#60089" +msgid "Enter the URL [Link to server/download]" +msgstr "Entra aquí y teclea la URL [Enlace a servidor online/descarga]" + +msgctxt "#60090" +msgid "Enter the URL [Direct link to video]." +msgstr "Entra aquí y teclea la URL [Enlace directo a un vídeo]" + +msgctxt "#60091" +msgid "Enter the URL [Search for links in a URL]" +msgstr "Entra aquí y teclea la URL [Búsqueda de enlaces en una url]" + +msgctxt "#60092" +msgid "View Direct URL" +msgstr "Ver enlace directo" + +msgctxt "#60093" +msgid "There is no compatible video in this URL" +msgstr "No hay ningún vídeo compatible en esa URL" + +msgctxt "#60200" +msgid "Download..." +msgstr "Descargando..." + +msgctxt "#60201" +msgid "Download starting..." +msgstr "Iniciando descarga..." + +msgctxt "#60202" +msgid "Remaining time: %s" +msgstr "Tiempo restante: %s" + +msgctxt "#60203" +msgid "Downloader %s/%s" +msgstr "Downloader %s/%s" + +msgctxt "#60204" +msgid "Speed Meter" +msgstr "Speed Meter" + +msgctxt "#60205" +msgid "File Writer" +msgstr "File Writer" + +msgctxt "#60206" +msgid "plugin" +msgstr "plugin" + +msgctxt "#60207" +msgid "Download..." +msgstr "Descargando..." + +msgctxt "#60208" +msgid "You can't download this video" +msgstr "No puedes descargar ese vídeo" + +msgctxt "#60209" +msgid "RTMP downloads are not" +msgstr "Las descargas en RTMP aún no" + +msgctxt "#60210" +msgid "still supported" +msgstr "están soportadas" + +msgctxt "#60211" +msgid "Missing %s" +msgstr "Falta %s" + +msgctxt "#60212" +msgid "Check that rtmpdump is installed" +msgstr "Comprueba que rtmpdump está instalado" + +msgctxt "#60213" +msgid "The RTMP download option is experimental" +msgstr "La opción de descarga RTMP es experimental" + +msgctxt "#60214" +msgid "and the video will be downloaded in the background." +msgstr "y el vídeo se descargará en segundo plano." + +msgctxt "#60215" +msgid "No progress bar will be displayed." +msgstr "No se mostrará ninguna barra de progreso." + +msgctxt "#60216" +msgid "addon" +msgstr "addon" + +msgctxt "#60217" +msgid "Download..." +msgstr "Descargando..." + +msgctxt "#60218" +msgid "%.2fMB/%.2fMB (%d%%) %.2f Kb/s %s missing " +msgstr "%.2fMB/%.2fMB (%d%%) %.2f Kb/s %s falta " + +msgctxt "#60219" +msgid "Copying the file" +msgstr "Copiando archivo" + +msgctxt "#60220" +msgid "Error while deleting the file" +msgstr "Error al eliminar el archivo" + +msgctxt "#60221" +msgid "Error while deleting the directory" +msgstr "Error al eliminar el directorio" + +msgctxt "#60222" +msgid "Error while creating the directory" +msgstr "Error al crear el directorio" + +msgctxt "#60223" +msgid "Enter another name" +msgstr "Introducir otro nombre" + +msgctxt "#60224" +msgid "Complete information" +msgstr "Completar información" + +msgctxt "#60225" +msgid "Search in TheMovieDB.org" +msgstr "Buscar en TheMovieDB.org" + +msgctxt "#60226" +msgid "Search in TheTvDB.org" +msgstr "Buscar en TheTvDB.com" + +msgctxt "#60227" +msgid "Identifier not found for: %s" +msgstr "Identificador no encontrado para: %s" + +msgctxt "#60228" +msgid "No information found for: %s" +msgstr "No se ha encontrado informacion para: %s" + +msgctxt "#60229" +msgid "Enter the name of %s to search" +msgstr "Introduzca el nombre de la %s a buscar" + +msgctxt "#60230" +msgid "Title:" +msgstr "Titulo:" + +msgctxt "#60231" +msgid "Original title" +msgstr "Titulo original" + +msgctxt "#60232" +msgid "Year" +msgstr "Año" + +msgctxt "#60233" +msgid "Identifiers:" +msgstr "Identificadores:" + +msgctxt "#60234" +msgid " The Movie Database ID" +msgstr " The Movie Database ID" + +msgctxt "#60235" +msgid " URL Tmdb" +msgstr " URL Tmdb" + +msgctxt "#60236" +msgid " The TVDB ID" +msgstr " The TVDB ID" + +msgctxt "#60237" +msgid " URL TVDB" +msgstr " URL TVDB" + +msgctxt "#60238" +msgid " IMDb ID" +msgstr " IMDb ID" + +msgctxt "#60239" +msgid " Other ID" +msgstr " Otro ID" + +msgctxt "#60240" +msgid "Images(urls):" +msgstr "Imágenes (urls):" + +msgctxt "#60241" +msgid " Background" +msgstr " Fondo" + +msgctxt "#60242" +msgid " Thumbnail" +msgstr " Miniatura" + +msgctxt "#60243" +msgid "Type of content" +msgstr "Tipo de contenido" + +msgctxt "#60244" +msgid "Movie" +msgstr "Película" + +msgctxt "#60245" +msgid "Series" +msgstr "Serie" + +msgctxt "#60246" +msgid "Full information" +msgstr "Completar información" + +msgctxt "#60247" +msgid "[%s]: Select the correct %s" +msgstr "[%s]: Selecciona la %s correcta" + +msgctxt "#60248" +msgid "Login to this page: %s" +msgstr "Accede a esta página: %s" + +msgctxt "#60249" +msgid "Enter this code and accept: %s" +msgstr "Ingresa este código y acepta: %s" + +msgctxt "#60250" +msgid "Once done, click here!" +msgstr "Una vez hecho, pulsa aquí!" + +msgctxt "#60251" +msgid "Synchronize with Trakt. Do not close this window" +msgstr "Sincronizar con Trakt. No cierres esta ventana" + +msgctxt "#60252" +msgid "1. Enter the following URL: %s" +msgstr "1. Entra en la siguiente url: %s" + +msgctxt "#60253" +msgid "2. Enter this code on the page and accept: %s" +msgstr "2. Ingresa este código en la página y acepta: %s" + +msgctxt "#60254" +msgid "3. Wait until this window closes" +msgstr "3. Espera a que se cierre esta ventana" + +msgctxt "#60255" +msgid "Successfully completed" +msgstr "Éxito" + +msgctxt "#60256" +msgid "Account linked correctly" +msgstr "Cuenta vinculada correctamente" + +msgctxt "#60257" +msgid "Error" +msgstr "Error" + +msgctxt "#60258" +msgid "Problem in the connection process" +msgstr "Fallo en el proceso de vinculación" + +msgctxt "#60259" +msgid "Account linked correctly" +msgstr "Cuenta vinculada con éxito" + +msgctxt "#60260" +msgid "Problem in the connection process" +msgstr "Fallo en el proceso de vinculación" + +msgctxt "#60261" +msgid "Alfa" +msgstr "Alfa" + +msgctxt "#60262" +msgid "You can install the Trakt script below, once installed and configured what you see will be automatically synchronized with your account." +msgstr "Puedes instalar el script de Trakt a continuacíon, una vez instalado y configurado lo que veas se sincronizara con tu cuenta automaticamente." + +msgctxt "#60263" +msgid "Do you want to continue?" +msgstr "¿Deseas continuar?" + +msgctxt "#60264" +msgid "In progress" +msgstr "En emisión" + +msgctxt "#60265" +msgid "Completed" +msgstr "Finalizada" + +msgctxt "#60266" +msgid "Action" +msgstr "Acción" + +msgctxt "#60267" +msgid "Adventure" +msgstr "Aventura" + +msgctxt "#60268" +msgid "Animation" +msgstr "Animación" + +msgctxt "#60269" +msgid "Kids" +msgstr "Niños" + +msgctxt "#60270" +msgid "Comedy" +msgstr "Comedia" + +msgctxt "#60271" +msgid "Crime" +msgstr "Crimen" + +msgctxt "#60272" +msgid "Documentaries" +msgstr "Documental" + +msgctxt "#60273" +msgid "Family" +msgstr "Familiar" + +msgctxt "#60274" +msgid "Fantasy" +msgstr "Fantasía" + +msgctxt "#60275" +msgid "Cooking" +msgstr "Comida" + +msgctxt "#60276" +msgid "Contests" +msgstr "Concurso" + +msgctxt "#60277" +msgid "Home and garden" +msgstr "Hogar y Jardín" + +msgctxt "#60278" +msgid "Mistery" +msgstr "Misterio" + +msgctxt "#60279" +msgid "News" +msgstr "Noticias" + +msgctxt "#60280" +msgid "Romantic" +msgstr "Romántico" + +msgctxt "#60281" +msgid "Science fiction" +msgstr "Ciencia-Ficción" + +msgctxt "#60282" +msgid "Soap Opera" +msgstr "Telenovela" + +msgctxt "#60283" +msgid "Sport" +msgstr "Deporte" + +msgctxt "#60284" +msgid "Talk Show" +msgstr "Programa de Entrevistas" + +msgctxt "#60285" +msgid "Travels" +msgstr "Viaje" + +msgctxt "#60286" +msgid "Pre-child audience: children under 6 years" +msgstr "Público pre-infantil: niños menores de 6 años" + +msgctxt "#60287" +msgid "Child audience: from 7 years old" +msgstr "Público infantil: desde 7 años" + +msgctxt "#60288" +msgid "General audience: without family control" +msgstr "Público general: sin supervisión familiar" + +msgctxt "#60289" +msgid "Parental control" +msgstr "Guía paterna: Supervisión paternal" + +msgctxt "#60290" +msgid "More than 14 years old" +msgstr "Mayores de 14 años" + +msgctxt "#60291" +msgid "More than 17 years old" +msgstr "Mayores de 17 años" + +msgctxt "#60292" +msgid "Searching for TV Series Information" +msgstr "Buscando información de la serie" + +msgctxt "#60293" +msgid "Please wait..." +msgstr "Espere por favor..." + +msgctxt "#60294" +msgid "Searching for TV Series Information" +msgstr "Buscando información de la serie" + +msgctxt "#60295" +msgid "Loading results..." +msgstr "Obteniendo resultados..." + +msgctxt "#60296" +msgid "Searching for TV Series Information" +msgstr "Buscando información de la serie" + +msgctxt "#60297" +msgid "Find %s possible matches" +msgstr "Encontrados %s posibles coincidencias" + +msgctxt "#60298" +msgid "[%s]: Select the correct TV series" +msgstr "[%s]: Selecciona la serie correcta" + +msgctxt "#60299" +msgid "Not found in the language '%s'" +msgstr "No se ha encontrado en idioma '%s'" + +msgctxt "#60300" +msgid "Search in language 'en'" +msgstr "Se busca en idioma 'en'" + +msgctxt "#60301" +msgid "Not found in the language '%s'" +msgstr "No se ha encontrado en idioma '%s'" + +msgctxt "#60302" +msgid "Search in language 'en'" +msgstr "Se busca en idioma 'en'" + +msgctxt "#60303" +msgid "The file already exists" +msgstr "El archivo ya existe" + +msgctxt "#60304" +msgid "The unzipped %s file already exists, or you want to overwrite it.?" +msgstr "El archivo %s a descomprimir ya existe, ¿desea sobrescribirlo?" + +msgctxt "#60305" +msgid "Adult channels" +msgstr "Canales para adultos" + +msgctxt "#60306" +msgid "The fields 'New password' and 'Confirm new password' do not match" +msgstr "Los campos 'Nueva contraseña' y 'Confirmar nueva contraseña' no coinciden." + +msgctxt "#60307" +msgid "Use 'Preferences' to change your password" +msgstr "Entre de nuevo en 'Preferencias' para cambiar la contraseña" + +msgctxt "#60308" +msgid "Adult channels" +msgstr "Canales para adultos" + +msgctxt "#60309" +msgid "The password is not correct." +msgstr "La contraseña no es correcta." + +msgctxt "#60310" +msgid "Changes made in this section will not be saved." +msgstr "Los cambios realizados en esta sección no se guardaran." + +msgctxt "#60311" +msgid "Download..." +msgstr "Descargando..." + +msgctxt "#60312" +msgid "Close this window to start playback" +msgstr "Cierra esta ventana para empezar la reproducción" + +msgctxt "#60313" +msgid "Cancel this window to start playback" +msgstr "Cancela esta ventana para empezar la reproducción" + +msgctxt "#60314" +msgid "Speed: " +msgstr "Velocidad: " + +msgctxt "#60315" +msgid " KB/s " +msgstr " KB/s " + +msgctxt "#60316" +msgid "MB of " +msgstr "MB de " + +msgctxt "#60317" +msgid "MB" +msgstr "MB" + +msgctxt "#60318" +msgid "Remaining time: " +msgstr "Tiempo restante: " + +msgctxt "#60319" +msgid "Cancelled" +msgstr "Cancelado" + +msgctxt "#60320" +msgid "Download in background cancelled" +msgstr "Descarga en segundo plano cancelada" + +msgctxt "#60321" +msgid "Press the button to be used to open the window" +msgstr "Presiona la tecla a usar para abrir la ventana" + +msgctxt "#60322" +msgid "You have %s seconds" +msgstr "Tienes %s segundos" + +msgctxt "#60323" +msgid "Press the button to be used to open the window" +msgstr "Presiona la tecla a usar para abrir la ventana" + +msgctxt "#60324" +msgid "You have %s seconds" +msgstr "Tienes %s segundos" + +msgctxt "#60325" +msgid "Saved key" +msgstr "Tecla guardada" + +msgctxt "#60326" +msgid "Restart Kodi to apply changes" +msgstr "Reinicia Kodi para que se apliquen los cambios" + +msgctxt "#60327" +msgid "Novelties" +msgstr "Novedades" + +msgctxt "#60328" +msgid "Channels" +msgstr "Canales" + +msgctxt "#60329" +msgid "Search" +msgstr "Buscador" + +msgctxt "#60330" +msgid "Favorites" +msgstr "Favoritos" + +msgctxt "#60331" +msgid "Videolibrary" +msgstr "Videoteca" + +msgctxt "#60332" +msgid "Downloads" +msgstr "Descargas" + +msgctxt "#60333" +msgid "Configuration" +msgstr "Configuración" + +msgctxt "#60334" +msgid "Password for adult channels" +msgstr "Contraseña para canales de adultos" + +msgctxt "#60335" +msgid "Watch in" +msgstr "Vedere in" + +msgctxt "#60336" +msgid "Download in" +msgstr "Scaricare in" + +msgctxt "#60337" +msgid "alfa-MCT: No support adf.ly" +msgstr "alfa-MCT: Sin soporte adf.ly" + +msgctxt "#60338" +msgid "The script does not support URL reduction adf.ly." +msgstr "El script no tiene soporte para el acortador de urls adf.ly." + +msgctxt "#60339" +msgid "Nothing to Play" +msgstr "No se puede reproducir" + +msgctxt "#60342" +msgid "Download completed: " +msgstr "Descarga completa: " + +msgctxt "#60343" +msgid "BMC-Kodi has closed the video." +msgstr "XBMC-Kodi Cerró el vídeo." + +msgctxt "#60344" +msgid "Continue with the session?" +msgstr "¿Continuar con la sesión?" + +msgctxt "#60345" +msgid "alfa-MCT: List of videos" +msgstr "alfa-MCT: Lista de vídeos" + +msgctxt "#60346" +msgid "Delete video downloads" +msgstr "Borrar las descargas del video" + +msgctxt "#60347" +msgid "No items to display" +msgstr "No hay elementos que mostrar" + +msgctxt "#60348" +msgid "Information" +msgstr "Información" + +msgctxt "#60349" +msgid "Go to the Main Menu" +msgstr "Ir al Menu Principal" + +msgctxt "#60350" +msgid "[COLOR yellow]Search in other channels[/COLOR]" +msgstr "[COLOR yellow]Buscar en otros canales[/COLOR]" + +msgctxt "#60351" +msgid "Set as homepage" +msgstr "[COLOR 0xffccff00]Definir como pagina de inicio[/COLOR]" + +msgctxt "#60352" +msgid "Add TV Series to Videolibrary" +msgstr "Añadir Serie a Videoteca" + +msgctxt "#60353" +msgid "Add Movie to Videolibrary" +msgstr "Añadir Pelicula a Videoteca" + +msgctxt "#60354" +msgid "Download Movie" +msgstr "Descargar Pelicula" + +msgctxt "#60355" +msgid "Download TV Series" +msgstr "Descargar Serie" + +msgctxt "#60356" +msgid "Download Episode" +msgstr "Descargar Episodio" + +msgctxt "#60357" +msgid "Download Season" +msgstr "Descargar Temporada" + +msgctxt "#60358" +msgid "Open Configuration" +msgstr "Abrir Configuración" + +msgctxt "#60359" +msgid "Search Trailer" +msgstr "Buscar Trailer" + +msgctxt "#60360" +msgid "[COLOR 0xffccff00][/COLOR]" +msgstr "[COLOR 0xffccff00][/COLOR]" + +msgctxt "#60361" +msgid "Super Favourites Menu" +msgstr "Super Favourites Menu" + +msgctxt "#60362" +msgid "You can't watch this video because..." +msgstr "No puedes ver ese vídeo porque..." + +msgctxt "#60363" +msgid "The server on which it is hosted" +msgstr "El servidor donde está alojado no está" + +msgctxt "#60364" +msgid "is not yet supported in Alfa" +msgstr "soportado en Alfa todavía" + +msgctxt "#60365" +msgid "Loading video..." +msgstr "Cargando vídeo..." + +msgctxt "#60366" +msgid "External plugin: %s" +msgstr "Plugin externo: %s" + +msgctxt "#60376" +msgid "Video information" +msgstr "Información del vídeo" + +msgctxt "#60377" +msgid "Title:" +msgstr "Título:" + +msgctxt "#60378" +msgid "Original Title:" +msgstr "Título original:" + +msgctxt "#60379" +msgid "Original language:" +msgstr "Idioma original:" + +msgctxt "#60380" +msgid "Score:" +msgstr "Puntuación:" + +msgctxt "#60381" +msgid "Release:" +msgstr "Lanzamiento:" + +msgctxt "#60382" +msgid "Genres:" +msgstr "Géneros:" + +msgctxt "#60383" +msgid "Series:" +msgstr "Serie:" + +msgctxt "#60384" +msgid "Season title:" +msgstr "Título temporada:" + +msgctxt "#60385" +msgid "Season:" +msgstr "Temporada:" + +msgctxt "#60386" +msgid "Episode:" +msgstr "Episodio:" + +msgctxt "#60387" +msgid "Emission:" +msgstr "Emisión:" + +msgctxt "#60388" +msgid "Summary:" +msgstr "Sinopsis:" + +msgctxt "#60389" +msgid "Videolibrary update...." +msgstr "Actualizando videoteca...." + +msgctxt "#60390" +msgid "AutoPlay Configuration" +msgstr "Configurar AutoPlay" + +msgctxt "#60391" +msgid "AutoPlay" +msgstr "AutoPlay" + +msgctxt "#60392" +msgid "\n\n\nTotal Reset of the addon %s.\n\n[COLOR red]Attention This function completely resets the addon.[/COLOR]" +msgstr "\n\n\nReset totale dell'addon %s.\n\n[COLOR red]Attenzione questa funzione resetta totalmente l'addon.[/COLOR]" + +msgctxt "#60393" +msgid "[COLOR red]Reset %s[/COLOR]" +msgstr "[COLOR red]Reset %s[/COLOR]" + +msgctxt "#60394" +msgid "Reset %s" +msgstr "Reset %s" + +msgctxt "#60395" +msgid "Are you sure you want to reset all settings of %s ?" +msgstr "Sei sicuro di voler resettare tutte le impostazioni di %s ?" + +msgctxt "#60396" +msgid "Cancel" +msgstr "Annulla" + +msgctxt "#60397" +msgid "Confirm" +msgstr "Conferma" + +msgctxt "#60398" +msgid " Settings Reset was successful!" +msgstr "Reset delle impostazioni è avvenuto con successo!" + +msgctxt "#60399" +msgid "AutoPlay allows you to auto play links directly, based on your server settings and preferred qualities. " +msgstr "AutoPlay permite auto reproducir los enlaces directamente, basándose en la configuracion de tus servidores y calidades preferidas. " + +msgctxt "#60400" +msgid "512 Mega" +msgstr "512 Mega" + +msgctxt "#60401" +msgid "1 Gb" +msgstr "1 Gb" + +msgctxt "#60402" +msgid "2 Gb" +msgstr "2 Gb" + +msgctxt "#60403" +msgid "more than 2 Gb" +msgstr "più di 2 Gb" + +msgctxt "#60404" +msgid "Choose cache setting" +msgstr "Scegli settaggio cache" + +msgctxt "#60405" +msgid "\n[COLOR orange]Cache Set for 512 Mega RAM[/COLOR]" +msgstr "\n[COLOR orange]Cache Impostata per 512 Mega di RAM[/COLOR]" + +msgctxt "#60406" +msgid "\n[COLOR orange]Cache Set for 1 Gb RAM[/COLOR]" +msgstr "\n[COLOR orange]Cache Impostata per 1 Gb di RAM[/COLOR]" + +msgctxt "#60407" +msgid "\n[COLOR orange]Cache Set for 2 Gb RAM[/COLOR]" +msgstr "\n[COLOR orange]Cache Impostata per 2 Gb di RAM[/COLOR]" + +msgctxt "#60408" +msgid "\n[COLOR orange]Cache Set higher than 2 Gb of RAM[/COLOR]" +msgstr "\n[COLOR orange]Cache Impostata a superiore di 2 Gb di RAM[/COLOR]" + +msgctxt "#60409" +msgid "plugin" +msgstr "plugin" + +msgctxt "#60410" +msgid "An advancedsettings.xml file has been created" +msgstr "E' stato creato un file advancedsettings.xml" + +msgctxt "#60411" +msgid "with the ideal streaming configuration." +msgstr "con la configurazione ideale per lo streaming." + +msgctxt "#60412" +msgid "Choose channels to include" +msgstr "Elegir canales incluidos" + +msgctxt "#60413" +msgid "[COLOR yellow]New Movie Search...[/COLOR]" +msgstr "[COLOR yellow]Nuova ricerca film...[/COLOR]" + +msgctxt "#60414" +msgid "[COLOR yellow]New search tv series...[/COLOR]" +msgstr "[COLOR yellow]Nuova ricerca serie tv...[/COLOR]" + +msgctxt "#60415" +msgid "[COLOR green]Other settings[/COLOR]" +msgstr "[COLOR green]Altre impostazioni[/COLOR]" + +msgctxt "#60416" +msgid "Delete saved searches" +msgstr "Cancella ricerche salvate" + +msgctxt "#60417" +msgid "[COLOR red]Delete search history[/COLOR]" +msgstr "[COLOR red]Elimina cronologia ricerche[/COLOR]" + +msgctxt "#60418" +msgid "Choose channels to include in your search" +msgstr "Scegli i canali da includere nella ricerca" + +msgctxt "#60419" +msgid "Delete saved searches" +msgstr "Cancella ricerche salvate" + +msgctxt "#60420" +msgid "More Options" +msgstr "Altre opzioni" + +msgctxt "#60421" +msgid "Channels included in the global search " +msgstr "Canali inclusi nella ricerca globale " + +msgctxt "#60422" +msgid "Search " +msgstr "Buscando " + +msgctxt "#60423" +msgid "Search" +msgstr "Ricerca" + +msgctxt "#60424" +msgid "Searches key have been deleted correctly" +msgstr "Búsquedas borradas correctamente" + +msgctxt "#60425" +msgid "Channel search" +msgstr "Cerca canale" + +msgctxt "#60426" +msgid "FILTER: Configure" +msgstr "FILTRO: Configurar" + +msgctxt "#60427" +msgid "FILTER: Adding '%s'" +msgstr "FILTRO: Añadir '%s'" + +msgctxt "#60428" +msgid "FILTER: Delete '%s'" +msgstr "FILTRO: Borrar '%s'" + +msgctxt "#60429" +msgid "[COLOR %s]Filter configuration for TV series...[/COLOR]" +msgstr "[COLOR %s]Configurar filtro para series...[/COLOR]" + +msgctxt "#60430" +msgid "FILTRO: Delete '%s'" +msgstr "FILTRO: Borrar '%s'" + +msgctxt "#60431" +msgid " and quality %s" +msgstr " y calidad %s" + +msgctxt "#60432" +msgid "[COLOR %s]No results in this language '%s'%s, click to show without filter[/COLOR]" +msgstr "[COLOR %s]No hay elementos con idioma '%s'%s, pulsa para mostrar sin filtro[/COLOR]" + +msgctxt "#60433" +msgid " (disabled)" +msgstr " (desactivado)" + +msgctxt "#60434" +msgid "Configure [COLOR %s][%s][/COLOR]%s" +msgstr "Configurar [COLOR %s][%s][/COLOR]%s" + +msgctxt "#60435" +msgid "There are no filters, search for a TV series and click on the context menu 'FILTER: Configure'" +msgstr "No existen filtros, busca una serie y pulsa en menú contextual 'FILTRO: Configurar'" + +msgctxt "#60436" +msgid "Spanish" +msgstr "Español" + +msgctxt "#60437" +msgid "Delete" +msgstr "Borrar" + +msgctxt "#60438" +msgid "¿Enable / disable filter?" +msgstr "¿Activar/Desactivar filtro?" + +msgctxt "#60439" +msgid "Language" +msgstr "Idioma" + +msgctxt "#60440" +msgid "Permitted quality" +msgstr "Calidad permitida" + +msgctxt "#60441" +msgid "Filter links for: [COLOR %s]%s[/COLOR]" +msgstr "Filtrado de enlaces para: [COLOR %s]%s[/COLOR]" + +msgctxt "#60442" +msgid "Are you sure you want to delete the filter?" +msgstr "¿Está seguro que desea eliminar el filtro?" + +msgctxt "#60443" +msgid "Click 'Yes' to remove the filter from [COLOR %s]%s[/COLOR], click 'No' or close the window to do nothing." +msgstr "Pulse 'Si' para eliminar el filtro de [COLOR %s]%s[/COLOR], pulse 'No' o cierre la ventana para no hacer nada." + +msgctxt "#60444" +msgid "FILTER DELETED" +msgstr "FILTRO ELIMINADO" + +msgctxt "#60445" +msgid "Error on saving on disk" +msgstr "Error al guardar en disco" + +msgctxt "#60446" +msgid "FILTER SAVED" +msgstr "FILTRO GUARDADO" + +msgctxt "#60447" +msgid "FAQ:" +msgstr "FAQ:" + +msgctxt "#60448" +msgid " - How do I report an error?" +msgstr " - Come segnalo un errore?" + +msgctxt "#60449" +msgid " - Is it possible to enable/disable channels?" +msgstr " - È Possibile attivare/disattivare i canali?" + +msgctxt "#60450" +msgid " - Is automatic synchronization with Trakt possible?" +msgstr " - È Possibile la sincronizzazione automatica con Trakt?" + +msgctxt "#60451" +msgid " - Is it possible to show all the results together in the global search?" +msgstr " - È Possibile mostrare tutti i risultati uniti nella ricerca globale?" + +msgctxt "#60452" +msgid " - Links take too long to appear." +msgstr " - I link ci mettono troppo ad apparire." + +msgctxt "#60453" +msgid " - The content search is not performed correctly." +msgstr " - La ricerca dei contenuti non viene eseguita correttamente." + +msgctxt "#60454" +msgid " - Some channels do not function properly." +msgstr " - Alcuni canali non funzionano correttamente." + +msgctxt "#60455" +msgid " - The library does not update correctly." +msgstr " - La libreria non viene aggiornata correttamente." + +msgctxt "#60456" +msgid " - Links of interest" +msgstr " - Collegamenti di interesse" + +msgctxt "#60457" +msgid "Alfa" +msgstr "Alfa" + +msgctxt "#60458" +msgid "The disabling can be done in 'Settings>Turn on/off channels'. You can toggle channels on/off one at a time or all at the same time. Want to manage your channels now?" +msgstr "La disabilitazione può essere fatta in 'Impostazioni>Attiva/Disattiva canali'. È Possibile Attivare/Disattivare i canali uno alla volta o tutti allo stesso tempo. Vuoi gestire i canali adesso?" + +msgctxt "#60459" +msgid "Currently it is possible to activate the synchronization (silent) after having marked an episode as 'as watched' (this happens automatically). This option can be enabled in 'Settings>Library Settings'. Do you want access to these settings?" +msgstr "Attualmente è possibile attivare la sincronizzazione (silenziosa) dopo aver segnato come 'come visto' un episodio (ciò avviene automaticamente). Questa opzione può essere attivata in 'Impostazioni>Impostazioni libreria'. Vuoi accedere a queste impostazioni?" + +msgctxt "#60460" +msgid "This can be improved by limiting the maximum number of links or by displaying them in a Pop-Up window. These settings can be found in 'Settings>Library Settings' Do you want to access these settings?" +msgstr "Questo può essere migliorato limitando il numero massimo di collegamenti o visualizzandoli in una finestra Pop-Up. Queste impostazioni possono essere trovate in 'Impostazioni>Impostazioni libreria' Vuoi accedere a queste impostazioni?" + +msgctxt "#60461" +msgid "Alfa - FAQ - %s" +msgstr "Alfa- FAQ - %s" + +msgctxt "#60462" +msgid "You may not have written the library path correctly in 'Settings>Preferences'.\nIl The specified path must be exactly the same as the 'source' entered in 'Archive' of the Kodi library.\nAVANZATO: This path is also found in 'sources.xml'.\nThere can be problems using some Kodi forks and paths with 'special://'. SPMC, for example, has problems with this, and there doesn't seem to be a solution, as it is an external problem to Alfa that has existed for a long time.\nYou can try solving these problems in 'Settings>Library Settings' by changing the 'Search in' setting from 'The folder of each series' to 'All library'." +msgstr "Potresti non aver scritto correttamente il percorso della libreria in 'Impostazioni>Preferenze'.\nIl percorso specificato deve essere esattamente uguale al 'sorgente' inserito in 'Archivio' della libreria di Kodi.\nAVANZATO: Questo percorso si trova anche in 'sources.xml'.\nPotresti riscontrare dei problemi utilizzando alcuni fork di Kodi e percorsi con 'special://'. SPMC, per esempio, ha problemi con questo, e non sembra esserci una soluzione, poichè è un problema esterno ad Orion che esiste da molto tempo.\nPuoi provare a risolvere questi problemi in 'Impostazioni>Impostazioni libreria', modificando l'impostazione 'Esegui ricerca contenuto in' da 'La cartella di ogni serie' in 'Tutta la libreria'." + +msgctxt "#60463" +msgid "The channel site may not work. In case the site works you can report the problem on github." +msgstr "Può darsi che il sito del canale non funzioni. Nel caso il sito funzioni puoi segnalare il problema su github." + +msgctxt "#60464" +msgid "It is possible that you have updated Alfa recently and that the changes have not been fully applied Well, you can try 'Settings>Other Tools', checking the *_data.json files or reattaching everything to the library again" +msgstr "È Possibile che tu abbia aggiornato Orion di recente e che i cambiamenti non siano stati totalmente applicati Bene, puoi provare in 'Impostazioni>Altri strumenti', controllando i files *_data.json o riaggiungendo tutto ancora alla libreria" + +msgctxt "#60465" +msgid "Do you want access to these settings?" +msgstr "Vuoi accedere a queste impostazioni?" + +msgctxt "#60466" +msgid "Yes, the option to display merged or split results by channels can be found in 'Settings>Global Search Settings>Other Settings'. Do you want access to these settings?" +msgstr "Sì, l'opzione per mostrare i risultati uniti o divisi per canali si trova in 'Impostazioni>Impostazioni ricerca globale>Altre impostazioni'. Vuoi accedere a queste impostazioni?" + +msgctxt "#60467" +msgid "To report a problem on'http://alfa-addon.com' you need to:|the version you're using of Alpha.|The version you're using of kodi, mediaserver, etc.|the version and name of the operating system you're using.|The name of the skin (in case you're using Kodi) and whether using the default skin has solved the problem.|Description of the problem and any test cases.To activate the log in detailed mode, go to:|Configuration.|Preferences.|In the General tab - Check the option: Generate detailed log. The detailed log file can be found in the following path: \n\n%s" +msgstr "Para reportar un problema en 'http://alfa-addon.com' es necesario:\n - Versión que usas de Alfa.\n - Versión que usas de kodi, mediaserver, etc.\n - Versión y nombre del sistema operativo que usas.\n - Nombre del skin (en el caso que uses Kodi) y si se te ha resuelto el problema al usar el skin por defecto.\n - Descripción del problema y algún caso de prueba.\n - Agregar el log en modo detallado, una vez hecho esto, zipea el log y lo puedes adjuntar en un post.\n\nPara activar el log en modo detallado, ingresar a:\n - Configuración.\n - Preferencias.\n - En la pestaña General - Marcar la opción: Generar log detallado.\n\nEl archivo de log detallado se encuentra en la siguiente ruta: \n\n%s" + +msgctxt "#60468" +msgid "You can find our Telegram channel at @StreamOnDemandOfficial\nSe you have doubts you can write to us in the Telegram group: https://bit.ly/2I3kRwF" +msgstr "Puoi trovare il nostro canale Telegram in @StreamOnDemandOfficial\nSe hai dubbi puoi scriverci nel gruppo Telegram: https://bit.ly/2I3kRwF" + +msgctxt "#60469" +msgid "Uploading new data" +msgstr "Cargando nuevos datos" + +msgctxt "#60470" +msgid "Buscando en Tmdb......." +msgstr "Buscando en Tmdb......." + +msgctxt "#60471" +msgid "No results, missing information about the year of the video" +msgstr "Sin resultados. Falta información del año del video" + +msgctxt "#60472" +msgid "There is no information on the %s required" +msgstr "No hay info de la %s solicitada" + +msgctxt "#60473" +msgid "No results" +msgstr "Sin resultados" + +msgctxt "#60474" +msgid "There is no information on the %s required" +msgstr "No hay info de la %s solicitada" + +msgctxt "#60475" +msgid "Filmaffinity recording......." +msgstr "Registrando filmaffinity......." + +msgctxt "#60476" +msgid "[COLOR yellow][B]There is no information about this movie...[/B][/COLOR]" +msgstr "[COLOR yellow][B]Esta pelicula no tiene informacion...[/B][/COLOR]" + +msgctxt "#60477" +msgid "Important recommendations......." +msgstr "Indagando recomendaciones......." + +msgctxt "#60478" +msgid "[COLOR aquamarine][B]Completated %s[/B][/COLOR]" +msgstr "[COLOR aquamarine][B]Finalizada %s[/B][/COLOR]" + +msgctxt "#60479" +msgid "[COLOR aquamarine][B]In progress %s[/B][/COLOR]" +msgstr "[COLOR aquamarine][B]En emisión %s[/B][/COLOR]" + +msgctxt "#60480" +msgid "(Seasons: %s)" +msgstr "(Temporadas: %s)" + +msgctxt "#60481" +msgid "Picture collection on FANART.TV" +msgstr "Recopilando imágenes en FANART.TV" + +msgctxt "#60482" +msgid "Tuned Instruments in Vtunes" +msgstr "Afinado instrumentos en Vtunes" + +msgctxt "#60483" +msgid "Picture collection on FANART.TV" +msgstr "Recopilando imágenes en FANART.TV" + +msgctxt "#60484" +msgid "[COLOR red][B]Update Kodi to its latest version[/B][/COLOR]" +msgstr "[COLOR red][B]Actualiza Kodi a su última versión[/B][/COLOR]" + +msgctxt "#60485" +msgid "[COLOR skyblue]for detailed info[/COLOR]" +msgstr "[COLOR skyblue]para mejor info[/COLOR]" + +msgctxt "#60486" +msgid "Uploading new information" +msgstr "Cargando nueva info" + +msgctxt "#60487" +msgid "Search in Tmdb......." +msgstr "Buscando en Tmdb......." + +msgctxt "#60488" +msgid "No information..." +msgstr "Sin información..." + +msgctxt "#60489" +msgid "[COLOR limegreen][B]Production company: [/B][/COLOR]" +msgstr "[COLOR limegreen][B]Productora: [/B][/COLOR]" + +msgctxt "#60490" +msgid "[COLOR limegreen][B]Country: [/B][/COLOR]" +msgstr "[COLOR limegreen][B]País: [/B][/COLOR]" + +msgctxt "#60491" +msgid "[COLOR limegreen][B]Preview: [/B][/COLOR]" +msgstr "[COLOR limegreen][B]Estreno: [/B][/COLOR]" + +msgctxt "#60492" +msgid "[COLOR limegreen][B]Seasons/Episodes: [/B][/COLOR]" +msgstr "[COLOR limegreen][B]Temporadas/Episodios: [/B][/COLOR]" + +msgctxt "#60493" +msgid "[COLOR orange][B]Is there the tv series you're looking for?[/B][/COLOR]" +msgstr "[COLOR orange][B]¿Está la serie que buscas?[/B][/COLOR]" + +msgctxt "#60494" +msgid "[COLOR orange][B]Is there the movie you are looking for?[/B][/COLOR]" +msgstr "[COLOR orange][B]¿Está la película que buscas?[/B][/COLOR]" + +msgctxt "#60495" +msgid "[COLOR tomato][B]Close[/B][/COLOR]" +msgstr "[COLOR tomato][B]Cerrar[/B][/COLOR]" + +msgctxt "#60496" +msgid "Loading results" +msgstr "Cargando resultados" + +msgctxt "#60497" +msgid "Wait........" +msgstr "Espere........" + +msgctxt "#60498" +msgid "[COLOR orange][B]Select...[/B][/COLOR]" +msgstr "[COLOR orange][B]Selecciona...[/B][/COLOR]" + +msgctxt "#60499" +msgid "plugin" +msgstr "plugin" + +msgctxt "#60500" +msgid "Nothing to play" +msgstr "No hay nada para reproducir" + +msgctxt "#60501" +msgid "[COLOR orange][B]Department[/B][/COLOR]" +msgstr "[COLOR orange][B]Reparto[/B][/COLOR]" + +msgctxt "#60502" +msgid "Uploading new data" +msgstr "Cargando nuevos datos" + +msgctxt "#60503" +msgid "Loading data from the %s..." +msgstr "Obteniendo datos del %s..." + +msgctxt "#60504" +msgid "No information" +msgstr "Sin información" + +msgctxt "#60505" +msgid "[COLOR rosybrown]Uploading filmography...[/COLOR]" +msgstr "[COLOR rosybrown]Obteniendo filmografía...[/COLOR]" + +msgctxt "#60506" +msgid "[COLOR plum]Picture collection...[/COLOR]" +msgstr "[COLOR plum]Recopilando imágenes...[/COLOR]" + +msgctxt "#60507" +msgid "[COLOR crimson][B]Error[/B][/COLOR]" +msgstr "[COLOR crimson][B]Error[/B][/COLOR]" + +msgctxt "#60508" +msgid "[COLOR tomato]Video not available[/COLOR]" +msgstr "[COLOR tomato]Vídeo no disponible[/COLOR]" + +msgctxt "#60509" +msgid "Movies" +msgstr "Películas" + +msgctxt "#60510" +msgid "Kids" +msgstr "Para niños" + +msgctxt "#60511" +msgid "TV series Episodes" +msgstr "Episodios de series" + +msgctxt "#60512" +msgid "Anime Episodes" +msgstr "Episodios de anime" + +msgctxt "#60513" +msgid "Documentaries" +msgstr "Documentales" + +msgctxt "#60514" +msgid "Channels included in: %s" +msgstr "Canales incluidos en: %s" + +msgctxt "#60515" +msgid "Simultaneous search deactivated" +msgstr "Búsqueda concurrente desactivada" + +msgctxt "#60516" +msgid "Simultaneous novelty search provides" +msgstr "La búsqueda concurrente de novedades proporciona" + +msgctxt "#60517" +msgid "higher speed and its deactivation is advisable only in case of failure." +msgstr "una mayor velocidad y su desactivación solo es aconsejable en caso de fallo." + +msgctxt "#60518" +msgid "Would you like to activate the simultaneous search now?" +msgstr "¿Desea activar la búsqueda concurrente ahora?" + +msgctxt "#60519" +msgid "Channel search..." +msgstr "Buscando canales..." + +msgctxt "#60520" +msgid "Search in '%s'..." +msgstr "Buscando en '%s'..." + +msgctxt "#60521" +msgid "Completed in %d/%d channels..." +msgstr "Finalizado en %d/%d canales..." + +msgctxt "#60522" +msgid "Results obtained: %s | Time: %2.f seconds" +msgstr "Resultados obtenidos: %s | Tiempo: %2.f segundos" + +msgctxt "#60523" +msgid " (In %s and %s)" +msgstr " (En %s y %s)" + +msgctxt "#60524" +msgid " (In %s)" +msgstr " (En %s)" + +msgctxt "#60525" +msgid "Channels included in:" +msgstr "Canales incluidos en:" + +msgctxt "#60526" +msgid " - Movies " +msgstr " - Películas " + +msgctxt "#60527" +msgid " - Kids" +msgstr " - Para niños" + +msgctxt "#60528" +msgid " - Series Tv Episodes" +msgstr " - Episodios de series" + +msgctxt "#60529" +msgid " - Anime Episodes" +msgstr " - Episodios de anime" + +msgctxt "#60530" +msgid " - Documentaries" +msgstr " - Documentales" + +msgctxt "#60531" +msgid "Other Settings" +msgstr "Otros ajustes" + +msgctxt "#60532" +msgid "Configuration -- News" +msgstr "configuración -- Novedades" + +msgctxt "#60533" +msgid "Channels included in News " +msgstr "Canales incluidos en Novedades " + +msgctxt "#60534" +msgid "Last 2 months" +msgstr "Last 2 months" + +msgctxt "#60535" +msgid "Preferences" +msgstr "Preferencias" + +msgctxt "#60536" +msgid "Special settings" +msgstr "Ajustes especiales" + +msgctxt "#60537" +msgid "Channel settings" +msgstr "Ajustes de Canales" + +msgctxt "#60538" +msgid "Server settings" +msgstr "Ajustes de Servidores" + +msgctxt "#60539" +msgid "Settings for the 'News' section" +msgstr "Ajustes de la sección 'Novedades'" + +msgctxt "#60540" +msgid "Global search settings" +msgstr "Ajustes del buscador global" + +msgctxt "#60541" +msgid "Download settings" +msgstr "Ajustes de descargas" + +msgctxt "#60542" +msgid "Videolibrary settings" +msgstr "Ajustes de la videoteca" + +msgctxt "#60544" +msgid "More Options" +msgstr "Otras herramientas" + +msgctxt "#60545" +msgid "Activate/deactivate channels" +msgstr "Activar/desactivar canales" + +msgctxt "#60546" +msgid "Channel settings" +msgstr "Ajustes por canales" + +msgctxt "#60547" +msgid "Channel Configuration '%s'" +msgstr "Configuración del canal '%s'" + +msgctxt "#60548" +msgid "HChannel Options" +msgstr "Herramientas de canales" + +msgctxt "#60549" +msgid "Check the files * _data.json" +msgstr "Comprobar archivos *_data.json"," + +msgctxt "#60550" +msgid "Servers locked" +msgstr "Sevidores bloqueados" + +msgctxt "#60551" +msgid "Favorite servers" +msgstr "Servidores favoritos" + +msgctxt "#60552" +msgid "Debriders settings" +msgstr "Ajustes de debriders:" + +msgctxt "#60553" +msgid " Server configuration '%s'" +msgstr " Configuración del servidor '%s'" + +msgctxt "#60554" +msgid "Server settings" +msgstr "Ajustes de servidores" + +msgctxt "#60557" +msgid "Saving configuration" +msgstr "Guardando configuración..." + +msgctxt "#60558" +msgid "Please wait." +msgstr "Espere un momento por favor." + +msgctxt "#60559" +msgid "Saving configuration...%s" +msgstr "Guardando configuración...%s" + +msgctxt "#60560" +msgid " - [COLOR red] CORRECTED!![/COLOR]" +msgstr " - [COLOR red] CORREGIDO!![/COLOR]" + +msgctxt "#60561" +msgid "Saving configuration..." +msgstr "Guardando configuración..." + +msgctxt "#60562" +msgid "Please wait" +msgstr "Espere un momento por favor" + +msgctxt "#60563" +msgid "Saving configuration..." +msgstr "Guardando configuración..." + +msgctxt "#60564" +msgid "Channel Options" +msgstr "Herramientas de canales" + +msgctxt "#60565" +msgid " Check the files * _data.json" +msgstr " Comprobar archivos *_data.json" + +msgctxt "#60566" +msgid "Videolibrary options" +msgstr "Herramientas de videoteca" + +msgctxt "#60567" +msgid " Overwrite the entire video library (strm, nfo and json)" +msgstr " Sobreescribir toda la videoteca (strm, nfo y json)" + +msgctxt "#60568" +msgid " Search for new episodes and update the video library" +msgstr " Buscar nuevos episodios y actualizar videoteca" + +msgctxt "#60569" +msgid " - There are no default settings" +msgstr " - No tiene ajustes por defecto" + +msgctxt "#60570" +msgid " | Error Detail: %s" +msgstr " | Detalle del error: %s" + +msgctxt "#60571" +msgid " - [COLOR red] Default settings cannot be loaded![/COLOR]" +msgstr " - [COLOR red] Imposible cargar los ajustes por defecto![/COLOR]" + +msgctxt "#60572" +msgid "Ask" +msgstr "Preguntar" + +msgctxt "#60577" +msgid "Order Servers" +msgstr "Ordenar servidores" + +msgctxt "#60578" +msgid " Server #%s" +msgstr " Servidor #%s" + +msgctxt "#60579" +msgid "Error" +msgstr "Error" + +msgctxt "#60580" +msgid "A saving error occurred" +msgstr "Se ha producido un error al guardar" + +msgctxt "#60581" +msgid "Overwriting the entire video library" +msgstr "Sobrescribir toda la videoteca" + +msgctxt "#60582" +msgid "This may take some time." +msgstr "Esto puede llevar algún tiempo." + +msgctxt "#60583" +msgid "Do you want to continue?" +msgstr "¿Desea continuar?" + +msgctxt "#60584" +msgid "Overwriting the video library...TV SERIES" +msgstr "Sobrescribiendo videoteca....SERIES" + +msgctxt "#60585" +msgid "alfa" +msgstr "alfa" + +msgctxt "#60586" +msgid "Overwriting the video library...MOVIES" +msgstr "Sobrescribiendo videoteca....PELICULAS" + +msgctxt "#60587" +msgid "Video library update...." +msgstr "Actualización videoteca ...." + +msgctxt "#60588" +msgid " - Settings created" +msgstr " - Ajustes creados" + +msgctxt "#60589" +msgid "- - No correction necessary" +msgstr "- - No necesita corrección" + +msgctxt "#60590" +msgid " - An error has occurred" +msgstr " - Ha ocurrido algun error" + +msgctxt "#60591" +msgid "Activate all" +msgstr "Activar todos" + +msgctxt "#60592" +msgid "Deactivate all" +msgstr "Desactivar todos" + +msgctxt "#60593" +msgid "Default Set" +msgstr "Establecer estado por defecto" + +msgctxt "#60594" +msgid "All channels" +msgstr "Todos los canales" + +msgctxt "#60595" +msgid " [COLOR grey](Default disabled)[/COLOR]" +msgstr " [COLOR grey](Desactivado por defecto)[/COLOR]" + +msgctxt "#60596" +msgid "Channels" +msgstr "Canales" + +msgctxt "#60597" +msgid " Server #%s" +msgstr " Servidor #%s" + +msgctxt "#60598" +msgid "Configuration -- Video Library" +msgstr "configuración -- Videoteca" + +msgctxt "#60600" +msgid "Series" +msgstr "Series" + +msgctxt "#60601" +msgid "Video library update" +msgstr "Actualizar la videoteca" + +msgctxt "#60602" +msgid "Never" +msgstr "Nunca" + +msgctxt "#60603" +msgid "When Kodi starts" +msgstr "Al iniciar Kodi" + +msgctxt "#60604" +msgid "Once a day" +msgstr "Una sola vez al día" + +msgctxt "#60605" +msgid "At the start of Kodi and once a day" +msgstr "Al iniciar Kodi y al menos una vez al día" + +msgctxt "#60606" +msgid " Wait before updating at startup of Kodi" +msgstr " Esperar antes de actualizar al iniciar kodi" + +msgctxt "#60607" +msgid "When Kodi starts" +msgstr "Al iniciar Kodi" + +msgctxt "#60609" +msgid "10 sec" +msgstr "10 seg" + +msgctxt "#60610" +msgid "20 sec" +msgstr "20 seg" + +msgctxt "#60611" +msgid "30 sec" +msgstr "30 seg" + +msgctxt "#60612" +msgid "60 sec" +msgstr "60 seg" + +msgctxt "#60613" +msgid " Begin scheduled update from" +msgstr " Iniciar actualización programada a partir de las" + +msgctxt "#60614" +msgid " Search for new episodes in active tv series" +msgstr " Buscar nuevos episodios en las series activas" + +msgctxt "#60615" +msgid "Never" +msgstr "Nunca" + +msgctxt "#60616" +msgid "Always" +msgstr "Siempre" + +msgctxt "#60617" +msgid "According to new episodes" +msgstr "Según su emisión" + +msgctxt "#60618" +msgid " Search for content in" +msgstr " Realizar búsqueda de contenido en" + +msgctxt "#60619" +msgid "The folder of each tv series" +msgstr "La carpeta de cada serie" + +msgctxt "#60620" +msgid "All video library" +msgstr "Toda la videoteca" + +msgctxt "#60621" +msgid "Show links in" +msgstr "Mostrar los enlaces en" + +msgctxt "#60622" +msgid "Conventional window" +msgstr "Ventana convencional" + +msgctxt "#60623" +msgid "Pop-up window" +msgstr "Ventana emergente" + +msgctxt "#60624" +msgid " Maximum number of links to display (recommended for slow devices)" +msgstr " Numero máximo de enlaces a mostrar (recomendable para equipos lentos)" + +msgctxt "#60625" +msgid "All" +msgstr "Todos" + +msgctxt "#60626" +msgid " Sort by whitelist" +msgstr " Ordenar segun el orden de la lista blanca" + +msgctxt "#60627" +msgid " Remove the channel name at the beginning" +msgstr " Quitar el nombre del canal del principio" + +msgctxt "#60628" +msgid " Pop-up window: Replace \"View in\" with \"[V]\" and \"Download in\" with \"[D]\"" +msgstr " Ventana emergente: Reemplazar \"Ver en\" por \"[V]\" y \"Descargar en\" por \"[D]\"" + +msgctxt "#60629" +msgid "Database location" +msgstr "Ubicación de Base de datos" + +msgctxt "#60630" +msgid "Local" +msgstr "Local" + +msgctxt "#60631" +msgid "Remote" +msgstr "Remota" + +msgctxt "#60632" +msgid " Server Name" +msgstr " Nombre Servidor" + +msgctxt "#60633" +msgid " Server port" +msgstr " Puerto Servidor" + +msgctxt "#60634" +msgid "Automatically mark as watched" +msgstr "Marcar automáticamente como visto" + +msgctxt "#60635" +msgid " Video viewing time" +msgstr " Tiempo necesario del video" + +msgctxt "#60636" +msgid "0 seg" +msgstr "0 seg" + +msgctxt "#60637" +msgid "Synchronizing with Trakt" +msgstr "Sincronización con Trakt" + +msgctxt "#60638" +msgid " After mark as watched the episode" +msgstr " Tras marcar como visto el episodio" + +msgctxt "#60639" +msgid " Show notification" +msgstr " Mostrar notificación" + +msgctxt "#60640" +msgid " On adding a TV series to the video library" +msgstr " Al añadir una serie a la videoteca" + +msgctxt "#60641" +msgid " Wait until the tv series is added" +msgstr " Esperar a que se añada la serie a la videoteca" + +msgctxt "#60642" +msgid "Show option \"All Seasons\"." +msgstr "Mostrar la opción \"Todas las temporadas\"" + +msgctxt "#60643" +msgid "Do not combine the seasons of the series"" +msgstr "No apilar temporadas de series"" + +msgctxt "#60644" +msgid "Only if there is one season" +msgstr "Sólo si hay una temporada" + +msgctxt "#60645" +msgid "Show channel selection box" +msgstr "Mostrar cuadro de selección de canales" + +msgctxt "#60646" +msgid "Create directories on your system using" +msgstr "Crear directorios en el sistema usando" + +msgctxt "#60647" +msgid "Localized title" +msgstr "Título localizado" + +msgctxt "#60648" +msgid "Never" +msgstr "Nunca" + +msgctxt "#60649" +msgid "Original title" +msgstr "Título original" + +msgctxt "#60650" +msgid "When you add content, you get information from:" +msgstr "Al añadir contenido, obtener información de:" + +msgctxt "#60651" +msgid " Movies:" +msgstr " Peliculas:" + +msgctxt "#60652" +msgid " TV Series:" +msgstr " Series:" + +msgctxt "#60653" +msgid " If there are no results also search in English" +msgstr " Si no hay resultados buscar también en Inglés" + +msgctxt "#60654" +msgid "Include in blacklist" +msgstr "Incluir en lista negra" + +msgctxt "#60655" +msgid "Include in Favorites List" +msgstr "Incluir en lista de favoritos" + +msgctxt "#60656" +msgid "Simultaneous search (multiprocessing)" +msgstr "Buscar de manera concurrente (multiprocesos)" + +msgctxt "#60657" +msgid "Show Results:" +msgstr "Mostrar resultados:" + +msgctxt "#60658" +msgid "Grouped by content" +msgstr "Agrupados por contenido" + +msgctxt "#60659" +msgid "Grouped by channel" +msgstr "Agrupados por canales" + +msgctxt "#60660" +msgid "Without group" +msgstr "Sin Agrupar" + +msgctxt "#60661" +msgid "News" +msgstr "Novedades" + +msgctxt "#60662" +msgid "code cleaning" +msgstr "limpieza código" + +msgctxt "#60663" +msgid "Add the progress window" +msgstr "Añadir cuadro de progreso" + +msgctxt "#60664" +msgid "Eliminated unnecessary code." +msgstr "Eliminado código innecesario." + +msgctxt "#60665" +msgid "Possibility to include other channels, through the configuration" +msgstr "Posibilidad de incluir otros canales, mediante configuracion" + +msgctxt "#60666" +msgid "Color Profile" +msgstr "Perfil de color" + +msgctxt "#60667" +msgid "Cold" +msgstr "Frio" + +msgctxt "#60668" +msgid "Hot" +msgstr "Calido" + +msgctxt "#60669" +msgid "Lilac" +msgstr "Lila" + +msgctxt "#60670" +msgid "Pastel" +msgstr "Pastel" + +msgctxt "#60671" +msgid "Vivid" +msgstr "Vivos" + +msgctxt "#60672" +msgid "Global Search" +msgstr "Buscador global" + +msgctxt "#60673" +msgid "MultiThread Search" +msgstr "Buscador MultiThread" + +msgctxt "#60674" +msgid "Show Results:" +msgstr "Mostrar resultados:" + +msgctxt "#60675" +msgid "Per channel" +msgstr "Por canales" + +msgctxt "#60676" +msgid "All Together" +msgstr "Todo junto" + +msgctxt "#60677" +msgid "Saved Searches:" +msgstr "Busquedas guardadas:" + +msgctxt "#60678" +msgid "Remember the latest search" +msgstr "Recordar última búsqueda" + +msgctxt "#60679" +msgid "Novelties in %s" +msgstr "Novedades en %s" + +msgctxt "#60680" +msgid "documentaries" +msgstr "documentales" + +msgctxt "#60681" +msgid "movies" +msgstr "peliculas" + +msgctxt "#60682" +msgid "tv series" +msgstr "series" + +msgctxt "#60683" +msgid "anime" +msgstr "anime" + +msgctxt "#70000" +msgid "Options" +msgstr "Opciones" + +msgctxt "#70001" +msgid "OK" +msgstr "OK" + +msgctxt "#70002" +msgid "Cancel" +msgstr "Cancelar" + +msgctxt "#70003" +msgid "Default" +msgstr "Por defecto" + +msgctxt "#70004" +msgid "Loading..." +msgstr "Cargando..." + +msgctxt "#70005" +msgid "Previous" +msgstr "Anterior" + +msgctxt "#70006" +msgid "Next" +msgstr "Siguiente" + +msgctxt "#70007" +msgid "Accept" +msgstr "Aceptar" + +msgctxt "#70008" +msgid "Reload" +msgstr "Recargar" + +msgctxt "#70009" +msgid "Classic Menu" +msgstr "Menu Clasico" + +msgctxt "#70010" +msgid "Where To Search" +msgstr "Donde buscar" + +msgctxt "#70011" +msgid "Search for actor" +msgstr "Buscar por actor" + +msgctxt "#70012" +msgid "Beginning" +msgstr "Inìcio" + +msgctxt "#70013" +msgid "Terror" +msgstr "Terror" + +msgctxt "#70014" +msgid "Castellan" +msgstr "Castellano" + +msgctxt "#70015" +msgid "Torrents" +msgstr "Torrents" + +msgctxt "#70016" +msgid "Active channels" +msgstr "Canales activos" + +msgctxt "#70017" +msgid "TV Series" +msgstr "Series" + +msgctxt "#70018" +msgid "Children" +msgstr "Infantiles" + +msgctxt "#70019" +msgid "Documentary" +msgstr "Documentales" + +msgctxt "#70020" +msgid "[COLOR yellow]Search similar[/COLOR]" +msgstr "[COLOR yellow]Cerca simili[/COLOR]" + +msgctxt "#70021" +msgid "Search in TMDB" +msgstr "Búsqueda en TMDB" + +msgctxt "#70022" +msgid " - Movies" +msgstr " - Películas" + +msgctxt "#70023" +msgid " - TV Shows" +msgstr " - Series" + +msgctxt "#70024" +msgid "Search in Filmaffinity" +msgstr "Búsqueda en Filmaffinity" + +msgctxt "#70025" +msgid "Search in IMDB" +msgstr "Búsqueda en IMDB" + +msgctxt "#70026" +msgid "MyAnimeList" +msgstr "MyAnimeList" + +msgctxt "#70027" +msgid "Search engine settings" +msgstr "Ajustes motores de búsqueda" + +msgctxt "#70028" +msgid "Most Popular" +msgstr "Más Populares" + +msgctxt "#70029" +msgid "Top rated" +msgstr "Más Valoradas" + +msgctxt "#70030" +msgid "On The Bill" +msgstr "En Cartelera" + +msgctxt "#70031" +msgid "Next" +msgstr "En Emisión" + +msgctxt "#70032" +msgid "Genres" +msgstr "Géneros" + +msgctxt "#70033" +msgid "Actors / Actresses by popularity" +msgstr "Actores/Actrices por popularidad" + +msgctxt "#70034" +msgid "Coming Soon" +msgstr "Próximamente" + +msgctxt "#70035" +msgid "Search %s" +msgstr "Buscar %s" + +msgctxt "#70036" +msgid "Search actor/actress" +msgstr "Buscar actor/actriz" + +msgctxt "#70037" +msgid "Search director, writer..." +msgstr "Buscar director, guionista..." + +msgctxt "#70038" +msgid "Custom Filter" +msgstr "Filtro Personalizado" + +msgctxt "#70039" +msgid "Keyword filter" +msgstr "Filtro por palabra clave" + +msgctxt "#70040" +msgid "Top Filmaffinity" +msgstr "Top Filmaffinity" + +msgctxt "#70041" +msgid "Modern TV Shows" +msgstr "Series de actualidad" + +msgctxt "#70042" +msgid "Year" +msgstr "Año" + +msgctxt "#70043" +msgid "Coming Out" +msgstr "Próximos Estrenos" + +msgctxt "#70044" +msgid "Sagas and Collections" +msgstr "Sagas y Colecciones" + +msgctxt "#70045" +msgid "Movies/TV Shows/Documentaries by Themes" +msgstr "Películas/Series/Documentales por Temas"" + +msgctxt "#70046" +msgid "Search Movies/TV Shows" +msgstr "Buscar Películas/Series" + +msgctxt "#70047" +msgid " Search by director" +msgstr " Buscar por director" + +msgctxt "#70048" +msgid " My Account" +msgstr " Mi Cuenta" + +msgctxt "#70049" +msgid " Most Popular" +msgstr " Más Populares" + +msgctxt "#70050" +msgid " Recommended Now" +msgstr " Viéndose Ahora" + +msgctxt "#70051" +msgid " Most Anticipated " +msgstr " Más Esperadas" + +msgctxt "#70052" +msgid " Custom recommendations" +msgstr " Recomendaciones personalizadas" + +msgctxt "#70053" +msgid " Most Viewed" +msgstr " Más Vistas" + +msgctxt "#70054" +msgid "Link your trakt account" +msgstr "Vincula tu cuenta trakt" + +msgctxt "#70055" +msgid "Watchlists" +msgstr "Watchlists" + +msgctxt "#70056" +msgid "Viewed " +msgstr "Vistas" + +msgctxt "#70057" +msgid "My lists" +msgstr "Mis listas" + +msgctxt "#70058" +msgid "Top Series" +msgstr "Top Serie TV" + +msgctxt "#70059" +msgid "Top Movies" +msgstr "Top Películas" + +msgctxt "#70060" +msgid "Most Anticipated" +msgstr "Más Esperados" + +msgctxt "#70061" +msgid "Top Anime" +msgstr "Top Ovas" + +msgctxt "#70062" +msgid "Anime by Seasons" +msgstr "Anime por Temporadas" + +msgctxt "#70063" +msgid "Anime by Genres" +msgstr "Anime por Géneros" + +msgctxt "#70064" +msgid "Search Tv Shows/Movies/Anime" +msgstr "Buscar Series/Películas/Ovas" + +msgctxt "#70065" +msgid ">> Next Page" +msgstr ">> Página siguiente"" + +msgctxt "#70066" +msgid " Search title in spanish: %s" +msgstr " Buscar por su título en español: %s" + +msgctxt "#70067" +msgid "Info Seasons [%s]" +msgstr "Info de temporadas [%s]" + +msgctxt "#70068" +msgid "In my Collection" +msgstr "En mi Colección" + +msgctxt "#70069" +msgid "Search %s in alfa: %s" +msgstr "Buscar %s en alfa: %s" + +msgctxt "#70070" +msgid " Search original title: %s" +msgstr " Buscar por su nombre original: %s" + +msgctxt "#70071" +msgid "Cast" +msgstr "Ver Reparto" + +msgctxt "#70072" +msgid " Most Viewed" +msgstr " Más Vistas" + +msgctxt "#70073" +msgid "Most Anticipated" +msgstr "Más Esperados" + +msgctxt "#70074" +msgid "Viewed" +msgstr "Vistas" + +msgctxt "#70075" +msgid "Most Anticipated" +msgstr " Más Esperadas" + +msgctxt "#70076" +msgid "Top rated" +msgstr "Más Valoradas" + +msgctxt "#70077" +msgid " Most Viewed" +msgstr " Más Vistas" + +msgctxt "#70078" +msgid "Show only links of " +msgstr "Mostrar solo los enlaces de " + +msgctxt "#70079" +msgid "Remove only links of " +msgstr "Eliminar solo los enlaces de " + +msgctxt "#70080" +msgid "Do you want Alfa to auto-configure Kodi's video library?" +msgstr "¿Desea que Alfa auto-configure la videoteca de Kodi?" + +msgctxt "#70081" +msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." +msgstr "Si pulsa 'No' podra hacerlo desde 'Configuración > Preferencia > Rutas'." + +msgctxt "#70082" +msgid "Global Search" +msgstr "Buscador global" + +msgctxt "#70083" +msgid "Show all links" +msgstr "Mostrar todos los enlaces" + +msgctxt "#70084" +msgid "Delete movie" +msgstr "Eliminar película" + +msgctxt "#70085" +msgid "Delete TV Show" +msgstr "Eliminar serie" + +msgctxt "#70086" +msgid "Remove only links of %s" +msgstr "Eliminar solo los enlaces de %s" + +msgctxt "#70087" +msgid "Deleted %s links from canal %s" +msgstr "Eliminados %s enlaces del canal %s" + +msgctxt "#70088" +msgid "Are you sure you want to delete '%s' from videolibrary ?" +msgstr "¿Realmente desea eliminar '%s' de su videoteca?" + +msgctxt "#70089" +msgid "Show only links of %s" +msgstr "Mostrar solo los enlaces de %s " + +msgctxt "#70090" +msgid " Exclude all streams with specific words" +msgstr " Excluir los streams que contienen etiquetas específicas" + +msgctxt "#70091" +msgid " Words" +msgstr " Etiquetas" + +msgctxt "#70092" +msgid "Add to videolibrary" +msgstr "Añadir a la videoteca" + +msgctxt "#70093" +msgid "The Movie Database" +msgstr "The Movie Database" + +msgctxt "#70094" +msgid "Select scraper for movies" +msgstr "Seleccione el scraper para las películas" + +msgctxt "#70095" +msgid "Universal Movie Scraper not present.\nInstall it now?" +msgstr "Universal Movie Scraper\nNo se ha encontrado el Scraper de películas de TheMovieDB.\n¿Desea instalarlo ahora?" + +msgctxt "#70096" +msgid "Universal Movie Scraper" +msgstr "Universal Movie Scraper" + +msgctxt "#70097" +msgid "Universal Movie Scraper not installed." +msgstr "Universal Movie Scraper no instalado." + +msgctxt "#70098" +msgid "The TVDB" +msgstr "The TVDB" + +msgctxt "#70099" +msgid "The TVDB not installed." +msgstr "The TVDB no instalado." + +msgctxt "#70100" +msgid "The Movie Database not present.\nInstall it now?" +msgstr "The Movie Database\nNo se ha encontrado el Scraper de series de TheMovieDB.\n¿Desea instalarlo ahora?" + +msgctxt "#70101" +msgid "Error fixing videolibrarypath in BD" +msgstr "Error al fijar videolibrarypath en BD" + +msgctxt "#70102" +msgid "Videolibrary %s not configured" +msgstr "Videoteca %s no configurada" + +msgctxt "#70103" +msgid "Videolibrary %s configured" +msgstr "Videoteca %s configurada" + +msgctxt "#70104" +msgid "Congratulations, the Kodi video library has been configured correctly." +msgstr "Felicidades la videoteca de Kodi ha sido configurada correctamente." + +msgctxt "#70105" +msgid "Do you want Alfa to automatically configure the Kodi library?You will be asked to set up scrapers for movies and series." +msgstr "¿Desea que Alfa auto-configure la videoteca de Kodi?Se le pedirá que configure los scrapers para las películas y las series." + +msgctxt "#70106" +msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." +msgstr "Si pulsa 'No' podra hacerlo desde 'Configuración > Preferencia > Rutas'." + +msgctxt "#70107" +msgid "Select scraper for Tv Shows" +msgstr "Seleccione el scraper para las series" + +msgctxt "#70108" +msgid "Icons Set" +msgstr "Set de iconos" + +msgctxt "#70109" +msgid "Sync with Trakt.tv (You must have an account)" +msgstr "Sincronizar con Trakt.tv (Debes tener una cuenta)" + +msgctxt "#70110" +msgid "Priority Method" +msgstr "Método prioritario" + +msgctxt "#70111" +msgid "Stop looking when you find an option" +msgstr "Dejar de buscar cuando encuentre una opción" + +msgctxt "#70112" +msgid "Hide payment servers without an account" +msgstr "Ocultar servidores de pago sin cuenta" + +msgctxt "#70113" +msgid "Password (default 0000)" +msgstr "Contraseña (por defecto 0000):" + +msgctxt "#70114" +msgid "Only until Kodi restarts" +msgstr "Solo hasta que se reinicie Kodi" + +msgctxt "#70115" +msgid "Request password to open adult channels" +msgstr "Solicitar contraseña para abrir canales de adultos" + +msgctxt "#70116" +msgid "New password:" +msgstr "Nueva contraseña:" + +msgctxt "#70117" +msgid "Confirm New password:" +msgstr "Confirmar nueva contraseña:" + +msgctxt "#70118" +msgid "Folder name for 'Series'" +msgstr "Nombre de carpeta para 'Series'" + +msgctxt "#70119" +msgid "Folder name for 'Movies'" +msgstr "Nombre de carpeta para 'Peliculas'" + +msgctxt "#70120" +msgid "Autoconfigure XBMC / Kodi library for Alfa content" +msgstr "Autoconfigurar videoteca de XBMC/Kodi para contenido de Alfa" + +msgctxt "#70121" +msgid "Activate Home Page" +msgstr "Activar pagina de inicio" + +msgctxt "#70122" +msgid "Custom (select from a channel)" +msgstr "Personalizado (seleccionar desde un canal)" + +msgctxt "#70123" +msgid "Show Recent" +msgstr "Mostrar Novedades" + +msgctxt "#70124" +msgid "Category" +msgstr "Categoria" + +msgctxt "#70125" +msgid "Movie|Tv Shows|Anime|Children|Documentary|Horror|Castellan|Latin|Torrent" +msgstr "Peliculas|Series|Anime|Infantiles|Documentales|Terror|Castellano|Latino|Torrent" + +msgctxt "#70126" +msgid "Visual Options" +msgstr "Opciones Visuales" + +msgctxt "#70127" +msgid "Anime" +msgstr "Anime" + +msgctxt "#70128" +msgid "Infoplus visual option" +msgstr "Opción visual Infoplus" + +msgctxt "#70129" +msgid "Without animation" +msgstr "Sin animación" + +msgctxt "#70130" +msgid "With animation" +msgstr "Con animación" + +msgctxt "#70131" +msgid "Thumbnail for videos" +msgstr "Thumbnail para videos" + +msgctxt "#70132" +msgid "Poster" +msgstr "Poster" + +msgctxt "#70133" +msgid "Server logo" +msgstr "Logo del servidor" + +msgctxt "#70134" +msgid "Intelligent Titles" +msgstr "Titulos Inteligentes" + +msgctxt "#70135" +msgid "Custom Colours" +msgstr "Colores Personalizados" + +msgctxt "#70136" +msgid "Tv Show" +msgstr "Serie" + +msgctxt "#70137" +msgid "Movie" +msgstr "Pelicula" + +msgctxt "#70138" +msgid "Low Rating" +msgstr "Valoracion Baja" + +msgctxt "#70139" +msgid "Average Rating" +msgstr "Valoracion Media" + +msgctxt "#70140" +msgid "High Rating" +msgstr "Valoracion Alta" + +msgctxt "#70141" +msgid "Quality" +msgstr "Calidad" + +msgctxt "#70142" +msgid "VOSE (Original Subtitled Spanish Version)" +msgstr "VOSE (Versión Original Subtitulado Español)" + +msgctxt "#70143" +msgid "VOS (Original Subtitled Version)" +msgstr "VOS (Versión Original Subtitulado)" + +msgctxt "#70144" +msgid "VO (Original Version)" +msgstr "VO (Versión Original)" + +msgctxt "#70145" +msgid "Servers" +msgstr "Servidores" + +msgctxt "#70146" +msgid "Add to videolibrary" +msgstr "Añadir a Videoteca" + +msgctxt "#70147" +msgid "Videolibrary (Update series)" +msgstr "Videoteca (Actualizar serie)" + +msgctxt "#70148" +msgid "Videolibrary (Do not update series)" +msgstr "Videoteca (No actualizar serie)" + +msgctxt "#70149" +msgid "Others" +msgstr "Otros" + +msgctxt "#70150" +msgid "Movie/series info in contextual menu" +msgstr "Info de películas/series en menú contextual" + +msgctxt "#70151" +msgid "Show Infoplus option:" +msgstr "Mostrar opción Infoplus:" + +msgctxt "#70152" +msgid "Show ExtendedInfo option (External addon required):" +msgstr "Mostrar opción ExtendedInfo (Necesario addon externo):" + +msgctxt "#70153" +msgid "Buttons/Access keys (Changes require Kodi restart)" +msgstr "Botones/Teclas de acceso (Cambios requieren reiniciar Kodi)" + +msgctxt "#70154" +msgid "TheMovieDB (obtains data from movies or series)" +msgstr "TheMovieDB (obtiene datos de las películas o series)" + +msgctxt "#70155" +msgid "Simultaneous searches (may cause instability)" +msgstr "Búsquedas simultáneas (puede causar inestabilidad)" + +msgctxt "#70156" +msgid "Search extended information (actor's data) Increase search time" +msgstr "Buscar información extendida (datos de actores) Aumenta el tiempo de búsqueda" + +msgctxt "#70157" +msgid "Use cache (improves recurring searches)" +msgstr "Usar caché (mejora las búsquedas recurrentes)" + +msgctxt "#70158" +msgid "every 1 day" +msgstr "cada 1 día" + +msgctxt "#70159" +msgid "every 7 days" +msgstr "cada 7 días" + +msgctxt "#70160" +msgid "every 15 days" +msgstr "cada 15 días" + +msgctxt "#70161" +msgid "every 30 days" +msgstr "cada 30 días" + +msgctxt "#70162" +msgid "Renew cache?" +msgstr "¿Renovar caché?" + +msgctxt "#70163" +msgid "Press to 'Clear cache' saved" +msgstr "Pulse para 'Borrar caché' guardada" + +msgctxt "#70164" +msgid "Free First|Premium First|Debriders First" +msgstr "Free primero|Premium primero|Debriders primero" + +msgctxt "#70167" +msgid "Titles Options" +msgstr "Opciones para Titulos" + +msgctxt "#70168" +msgid "General" +msgstr "Generale" + +msgctxt "#70169" +msgid "Servers use" +msgstr "Uso de servidores" + +msgctxt "#70170" +msgid "No" +msgstr "No" + +msgctxt "#70171" +msgid "Torrent" +msgstr "Torrent" + +msgctxt "#70172" +msgid " Plan B (If favourites fail try other links)" +msgstr " Plan B (Si fallan los favoritos prueba otros enlaces)" + +msgctxt "#70173" +msgid "No working links" +msgstr "No hubo enlaces funcionales" + +msgctxt "#70174" +msgid "Server and Quality" +msgstr "Servidor y Calidad" + +msgctxt "#70175" +msgid "Quality and Server" +msgstr "Calidad y Servidor" + +msgctxt "#70176" +msgid "Wait" +msgstr "Espera" + +msgctxt "#70177" +msgid "seconds for the video to start ..." +msgstr "segundos para que comience el vídeo..." + +msgctxt "#70178" +msgid "Trying with: %s" +msgstr "Probando con: %s" + +msgctxt "#70179" +msgid "Getting list of available servers ..." +msgstr "Obteniendo lista de servidores disponibles..." + +msgctxt "#70180" +msgid "Connecting with %s..." +msgstr "Conectando con %s..." + +msgctxt "#70181" +msgid "Available servers: %s" +msgstr "Servidores disponibles: %s" + +msgctxt "#70182" +msgid "Identifying servers ..." +msgstr "Identificando servidores..." + +msgctxt "#70183" +msgid "Getting list of available servers" +msgstr "Obteniendo lista de servidores disponibles" + +msgctxt "#70184" +msgid "Getting list of available servers:" +msgstr "Obteniendo lista de servidores disponibles:" + +msgctxt "#70185" +msgid " chapters of: " +msgstr " capitulos de: " + +msgctxt "#70186" +msgid "Getting episodes..." +msgstr "Obteniendo episodios..." + +msgctxt "#70187" +msgid "connecting with %s..." +msgstr "conectando con %s..." + +msgctxt "#70188" +msgid "Obtaining data from the series" +msgstr "Obteniendo datos de la serie" + +msgctxt "#70189" +msgid "Start the download now?" +msgstr "¿Iniciar la descarga ahora?" + +msgctxt "#70190" +msgid "Add chapters..." +msgstr "Añadiendo capitulos..." + +msgctxt "#70191" +msgid "Obtaining data from the movie" +msgstr "Obteniendo datos de la pelicula" + +msgctxt "#70192" +msgid "Select server" +msgstr "Selecciona el servidor" + +msgctxt "#70193" +msgid "Open torrent with..." +msgstr "Abrir torrent con..." + +msgctxt "#70194" +msgid "alfa-torrent" +msgstr "alfa-torrent" + +msgctxt "#70195" +msgid "Alfa - Torrent" +msgstr "Alfa - Torrent" + +msgctxt "#70196" +msgid "Beginning..." +msgstr "Iniciando..." + +msgctxt "#70197" +msgid "Automatically stopping at: %ss" +msgstr "Deteniendo automaticamente en: %ss" + +msgctxt "#70198" +msgid "Do you want to start playback?" +msgstr "¿Deseas iniciar la reproduccion?" + +msgctxt "#70199" +msgid "Do you want to cancel the process?" +msgstr "¿Deseas cancelar el proceso?" + +msgctxt "#70200" +msgid "Finishing and deleting data" +msgstr "Terminando y eliminando datos" + +msgctxt "#70201" +msgid "Mass Testing Tools" +msgstr "Herramientas de Testeo masivo" + +msgctxt "#70202" +msgid "- Test channels ..." +msgstr "- Testear canales ..." + +msgctxt "#70203" +msgid "- Test servers ..." +msgstr "- Testear servidores ..." + +msgctxt "#70204" +msgid "- Test recent!" +msgstr "- Testear novedades!" + +msgctxt "#70205" +msgid "- Upload tests to web!" +msgstr "- Upload tests to web!" + +msgctxt "#70206" +msgid "Link found in %s" +msgstr "Enlace encontrado en %s" \ No newline at end of file From 3ee17bcb9c0d593ff642e26d3f5f71a3b2dec13e Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 16 Jun 2018 14:27:01 +0200 Subject: [PATCH 03/66] Add files via upload --- .../language/Spanish (Argentina)/strings.po | 3360 ++++++++++++++++- 1 file changed, 3311 insertions(+), 49 deletions(-) diff --git a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po index fb8cbf4d..17b7b58c 100644 --- a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po @@ -6,16 +6,20 @@ msgstr "" "Project-Id-Version: KODI Main\n" "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Kodi Translation Team\n" -"Language-Team: Spanish (Spanish) (http://www.transifex.com/projects/p/kodi-main/language/en_GB/)\n" +"PO-Revision-Date: 2018-03-26 03:02+0200\n" +"Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es_ES\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.0.4\n" +"Last-Translator: MrTruth\n" +"Last-Translator: Angedam\n" +"Language: es_ES\n" -# empty string with id 30000 +msgctxt "#20000" +msgid "Alfa" +msgstr "Alfa" msgctxt "#30001" msgid "Check for updates:" @@ -23,16 +27,12 @@ msgstr "Comprobar actualizaciones:" msgctxt "#30002" msgid "Enable adult mode:" -msgstr "Mostrar canales para adultos" +msgstr "Activar canales para adultos:" msgctxt "#30003" msgid "Enable debug logging:" msgstr "Generar log detallado:" -msgctxt "#30043" -msgid "Force view mode:" -msgstr "Forzar el modo de vista:" - msgctxt "#30004" msgid "Automatic update channels:" msgstr "Actualizar automáticamente canales:" @@ -53,8 +53,6 @@ msgctxt "#30008" msgid "Watch in high quality" msgstr "Ver en calidad alta" -# empty string with id 30009 - msgctxt "#30010" msgid "Channel icons view:" msgstr "Logos de canales:" @@ -67,22 +65,14 @@ msgctxt "#30012" msgid "Banner (horizontal)" msgstr "Banner (horizontal)" -msgctxt "#30200" -msgid "Square" -msgstr "Cuadrado" - -# empty string with id 30013 - msgctxt "#30014" msgid "Username:" -msgstr "Usuario:" +msgstr "Username:" msgctxt "#30015" msgid "Password:" msgstr "Password:" -# empty string with id 30016 - msgctxt "#30017" msgid "Download path:" msgstr "Directorio de descargas:" @@ -91,22 +81,18 @@ msgctxt "#30018" msgid "Download list path:" msgstr "Directorio de lista descargas:" -msgctxt "#30067" -msgid "Videolibrary path:" -msgstr "Directorio de la videoteca:" - msgctxt "#30019" msgid "Filter channels by language:" -msgstr "Filtrar canales por idioma:" +msgstr "Filter channels by language:" + +msgctxt "#30043" +msgid "Force view mode:" +msgstr "Forzar el modo de vista:" msgctxt "#30044" msgid "Play mode:" msgstr "Modo de reproducción:" -msgctxt "#30068" -msgid "Filter by servers:" -msgstr "Filtrar por servidores:" - msgctxt "#30050" msgid "Server connection error" msgstr "No se puede conectar con el servidor" @@ -131,8 +117,16 @@ msgctxt "#30065" msgid "Unsopported Server" msgstr "Servidor no soportado" +msgctxt "#30067" +msgid "Videolibrary path:" +msgstr "Directorio de la videoteca:" + +msgctxt "#30068" +msgid "Filter by servers:" +msgstr "Filtrar por servidores:" + msgctxt "#30100" -msgid "Configuration" +msgid "Settings" msgstr "Configuración" msgctxt "#30101" @@ -167,14 +161,6 @@ msgctxt "#30112" msgid "Enter title to search" msgstr "Introduce el título a buscar" -msgctxt "#30135" -msgid "added to the videolibrary" -msgstr "se ha añadido a la videoteca" - -msgctxt "#30130" -msgid "Recent" -msgstr "Novedades" - msgctxt "#30118" msgid "Channels" msgstr "Canales" @@ -203,22 +189,30 @@ msgctxt "#30125" msgid "Documentaries" msgstr "Documentales" -msgctxt "#30136" -msgid "Original version" -msgstr "Versión original" - msgctxt "#30126" msgid "Adult" -msgstr "" +msgstr "Adultos" -msgctxt "#30137" -msgid "Direct" -msgstr "Directos" +msgctxt "#30130" +msgid "Recent" +msgstr "Novedades" msgctxt "#30131" msgid "Videolibrary" msgstr "Videoteca" +msgctxt "#30135" +msgid "added to the videolibrary" +msgstr "added to the videolibrary" + +msgctxt "#30136" +msgid "Original version" +msgstr "Versión original" + +msgctxt "#30137" +msgid "Direct" +msgstr "Directos" + msgctxt "#30151" msgid "Watch the video" msgstr "Ver el vídeo" @@ -251,6 +245,10 @@ msgctxt "#30164" msgid "Delete this file" msgstr "Borrar este fichero" +msgctxt "#30200" +msgid "Square" +msgstr "Cuadrado" + msgctxt "#30300" msgid "Faster context menus" msgstr "Menús contextuales rápidos (puede causar que algunas opciones no funcionen)" @@ -259,10 +257,3274 @@ msgctxt "#30501" msgid "Paths" msgstr "Rutas" +msgctxt "#30974" +msgid "Search in Channels" +msgstr "Buscar en los canales" + +msgctxt "#30975" +msgid "Movie Info" +msgstr "Información de la película" + +msgctxt "#30976" +msgid "TVShows - Airing Today" +msgstr "TVShows - Airing Today" + +msgctxt "#30977" +msgid "Last Episodes - On-Air" +msgstr "Últimos episodios - en el aire" + +msgctxt "#30978" +msgid "New TVShows" +msgstr "Nuevas Series" + +msgctxt "#30979" +msgid "Character Info" +msgstr "Información de personajes" + +msgctxt "#30980" +msgid "Search by Title" +msgstr "Búsqueda por Titulo" + +msgctxt "#30981" +msgid "Search by Person" +msgstr "Búsqueda por Persona" + +msgctxt "#30982" +msgid "Search by Company" +msgstr "Búsqueda por Company" + +msgctxt "#30983" +msgid "Now Playing" +msgstr "Ahora Playing" + +msgctxt "#30984" +msgid "Popular" +msgstr "Populares" + +msgctxt "#30985" +msgid "Top Rated" +msgstr "Top Rated" + +msgctxt "#30986" +msgid "Search by Collection" +msgstr "Búsqueda por Colección" + +msgctxt "#30987" +msgid "Genre" +msgstr "Generos" + +msgctxt "#30988" +msgid "Search by Year" +msgstr "Búsqueda por año" + +msgctxt "#30989" +msgid "Search Similar Movies" +msgstr "Buscar películas similares" + +msgctxt "#30990" +msgid "Search TV show" +msgstr "Buscar series" + +msgctxt "#30991" +msgid "Library" +msgstr "Biblioteca" + +msgctxt "#30992" +msgid "Next Page" +msgstr "Página Siguiente" + +msgctxt "#30993" +msgid "Looking for %s..." +msgstr "Buscando %s..." + +msgctxt "#30994" +msgid "Searching in %s..." +msgstr "Buscando en %s..." + +msgctxt "#30995" +msgid "%d found so far: %s" +msgstr "%d encontrado hasta ahora: %s" + +msgctxt "#30996" +msgid "Most Voted" +msgstr "Los más votados" + +msgctxt "#30997" +msgid "Academy Awards" +msgstr "Academy Awards" + msgctxt "#30998" msgid "Shortcut" -msgstr "Acceso directo" +msgstr "Shortcut" msgctxt "#30999" msgid "Add key to open Shortcut" -msgstr "Añadir tecla para acceso directo" +msgstr "Agregar clave para abrir el atajo" + +msgctxt "#50000" +msgid "Sagas" +msgstr "Sagas" + +msgctxt "#50001" +msgid "Today on TV" +msgstr "Hoy en TV" + +msgctxt "#50002" +msgid "Latest News" +msgstr "Últimas Novedades" + +msgctxt "#50003" +msgid "Loading" +msgstr "Cargando" + +msgctxt "#50004" +msgid "Path: " +msgstr "Ruta: " + +msgctxt "#59970" +msgid "Synchronization with Trakt started" +msgstr "Sincronizacion con Trakt iniciada" + +msgctxt "#59971" +msgid "Alfa Auto-configuration" +msgstr "Alfa Auto-configuración" + +msgctxt "#59972" +msgid "Search for: '%s' | Found: %d vídeos | Time: %2.f seconds" +msgstr "Buscando: '%s' | Encontrado: %d vídeos | Tiempo: %2.f segundos" + +msgctxt "#59973" +msgid "Search Cancelled" +msgstr "Búsqueda cancelada" + +msgctxt "#59974" +msgid "Choose categories" +msgstr "Elegir categorías" + +msgctxt "#59975" +msgid "Subtitles" +msgstr "VOS" + +msgctxt "#59976" +msgid "Latin" +msgstr "Latino" + +msgctxt "#59977" +msgid "4k" +msgstr "4k" + +msgctxt "#59978" +msgid "horror" +msgstr "terror" + +msgctxt "#59979" +msgid "kids" +msgstr "infantiles" + +msgctxt "#59980" +msgid "Castilian" +msgstr "castellano" + +msgctxt "#59981" +msgid "latin" +msgstr "latino" + +msgctxt "#59982" +msgid "torrent" +msgstr "torrent" + +msgctxt "#59983" +msgid "" +msgstr "" + +msgctxt "#59984" +msgid "An error has occurred in alfa, \nCheck log for more details." +msgstr "Se ha producido un error en alfa,\nComprueba el log para ver mas detalles del error." + +msgctxt "#59985" +msgid "Error in the channel" +msgstr "Error en el canal" + +msgctxt "#59986" +msgid "Error loading the server: %s\n" +msgstr "Error al cargar el servidor: %s\n" + +msgctxt "#59987" +msgid "Start downloading now?" +msgstr "¿Iniciar la descargaahora?" + +msgctxt "#59988" +msgid "Saving configuration..." +msgstr "Guardando configuración..." + +msgctxt "#59989" +msgid "Please wait" +msgstr "Espere un momento por favor." + +msgctxt "#59990" +msgid "Channels included in the search" +msgstr "Canales incluidos en la búsqueda" + +msgctxt "#59991" +msgid "All" +msgstr "Todos" + +msgctxt "#59992" +msgid "None" +msgstr "Ninguno" + +msgctxt "#59993" +msgid "Configuration -- Search" +msgstr "configuración -- Buscador" + +msgctxt "#59994" +msgid "Choose channels to include in your search" +msgstr "Elegir canales incluidos en la búsqueda" + +msgctxt "#59995" +msgid "Saved Searches" +msgstr "Búsquedasguardadas" + +msgctxt "#59996" +msgid "Delete saved searches" +msgstr "Borrar búsquedas guardadas" + +msgctxt "#59997" +msgid "Options" +msgstr "Opciones" + +msgctxt "#59998" +msgid "Search by categories (advanced search)" +msgstr "Buscar por categorias (búsqueda avanzada)" + +msgctxt "#59999" +msgid "Search for actor/actress" +msgstr "Buscar actor/actriz" + +msgctxt "#60000" +msgid "Filter server (Black List)" +msgstr "Filtrar servidores (Lista Negra)" + +msgctxt "#60001" +msgid "Filter server (Black List)\nNo connection available that meets the requirements of the Black list.\nTry again by changing the filter in 'Server Configuration" +msgstr "Filtrar servidores (Lista Negra)\nNo hay enlaces disponibles que cumplan los requisitos de su Lista Negra.\nPruebe de nuevo modificando el fíltro en 'Configuracíon Servidores"" + +msgctxt "#60003" +msgid "Connecting with %s" +msgstr "Conectando con %s" + +msgctxt "#60004" +msgid "No connector for the server %s" +msgstr "No existe conector para el servidor %s" + +msgctxt "#60005" +msgid "Connecting with %s" +msgstr "Conectando con %s" + +msgctxt "#60006" +msgid "An error has occurred in %s" +msgstr "Se ha producido un error en %s" + +msgctxt "#60007" +msgid "An error has occurred on %s" +msgstr "Se ha producido un error en %s" + +msgctxt "#60008" +msgid "Process completed" +msgstr "Proceso finalizado" + +msgctxt "#60009" +msgid "To watch a vide on %s you need
an account on: %s" +msgstr "Para ver un vídeo en %s necesitas
una cuenta en: %s" + +msgctxt "#60010" +msgid "All available links belongs to server on your black list.\nDo you want to show these links?" +msgstr "Filtrar servidores (Lista Negra)\nTodos los enlaces disponibles pertenecen a servidores incluidos en su Lista Negra.\n¿Desea mostrar estos enlaces?" + +msgctxt "#60011" +msgid "Cache deleted" +msgstr "cachè eliminada" + +msgctxt "#60012" +msgid "No video to play" +msgstr "No hay nada que reproducir" + +msgctxt "#60013" +msgid "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s.\nIf the web page is working correctly, please report the error on : https://alfa-addon.com/categories/alfa-addon.50/" +msgstr "La web de la que depende parece no estar disponible, puede volver a intentarlo,\nsi el problema persiste verifique mediante un navegador la web: %s. \nSi la web funciona correctamente informe el error en: www.alfa-addon.com" + +msgctxt "#60014" +msgid "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of alfa.\nTo have more details, see the log file." +msgstr "Puede deberse a un fallo de conexión, la web del canal\nha cambiado su estructura,o un error interno de alfa.\nPara saber más detalles, consulta el log." + +msgctxt "#60015" +msgid "Check the log for more details on the error." +msgstr "Comprueba el log para ver mas detalles del error." + +msgctxt "#60016" +msgid "Segna film come non visto" +msgstr "Marcar película como no vista" + +msgctxt "#60017" +msgid "Mark movie as not watched" +msgstr "Marcar película como vista" + +msgctxt "#60018" +msgid "Delete movie/channel" +msgstr "Eliminar película/canal" + +msgctxt "#60019" +msgid "Delete this movie" +msgstr "Eliminar esta película" + +msgctxt "#60020" +msgid "Mark tv series as not watched" +msgstr "Marcar serie como no vista" + +msgctxt "#60021" +msgid "Mark tv series as watched" +msgstr "Marcar serie como vista" + +msgctxt "#60022" +msgid "Automatically find new episodes: Disable" +msgstr Buscar automáticamente nuevos episodios: Desactivar" + +msgctxt "#60023" +msgid "Automatically find new episodes: Enable" +msgstr "Buscar automáticamente nuevos episodios: Activar" + +msgctxt "#60024" +msgid "Delete tv series/channel" +msgstr "Eliminar serie/canal" + +msgctxt "#60025" +msgid "Delete tv series" +msgstr "Eliminar esta serie" + +msgctxt "#60026" +msgid "Search for new episodes and update" +msgstr "Buscar nuevos episodios y actualizar videoteca" + +msgctxt "#60027" +msgid "Season %s" +msgstr "Temporada %s" + +msgctxt "#60028" +msgid "Segna stagione come non vista" +msgstr "Marcar temporada como no vista" + +msgctxt "#60029" +msgid "Mark season as not watched" +msgstr "Marcar temporada como vista" + +msgctxt "#60030" +msgid "*All the seasons" +msgstr "*Todas las temporadas" + +msgctxt "#60031" +msgid "Season %s Episode %s" +msgstr "Temporada %s Episodio %s" + +msgctxt "#60032" +msgid "Mark episode as not watched" +msgstr "Marcar episodio como no visto" + +msgctxt "#60033" +msgid "Mark episode as watched" +msgstr "Marcar episodio como visto" + +msgctxt "#60034" +msgid "Show only link %s" +msgstr "Mostrar solo los enlaces de %s" + +msgctxt "#60035" +msgid "Show all the links" +msgstr "Mostrar todos los enlaces" + +msgctxt "#60036" +msgid "Episode %s" +msgstr "Episodio %s" + +msgctxt "#60037" +msgid "Tv series update ..." +msgstr "Actualizando serie...." + +msgctxt "#60038" +msgid "An error has occurred on alfa" +msgstr "Si è verificato un errore su alfa" + +msgctxt "#60039" +msgid "Error on channel %s" +msgstr "Error en el canal %s" + +msgctxt "#60040" +msgid "Delete movie" +msgstr "Eliminar película" + +msgctxt "#60041" +msgid "Delete tv series" +msgstr "Eliminar serie" + +msgctxt "#60042" +msgid "Delete only the links of %s" +msgstr "Eliminar solo los enlaces de %s" + +msgctxt "#60043" +msgid "Delete %s links of channel %s" +msgstr "Eliminados %s enlaces del canal %s" + +msgctxt "#60044" +msgid "Do you want really to delete '%s' from videolibrary?" +msgstr "¿Realmente desea eliminar '%s' de su videoteca?" + +msgctxt "#60045" +msgid "Sync with Trakt started" +msgstr "Sincronizacion con Trakt iniciada" + +msgctxt "#60046" +msgid "TheMovieDB not present.\nInstall it now?" +msgstr "TheMovieDB\nNo se ha encontrado el Scraper de películas de TheMovieDB.\n¿Desea instalarlo ahora?" + +msgctxt "#60047" +msgid "The Movie Database is not installed." +msgstr "The Movie Database no instalado." + +msgctxt "#60048" +msgid "The TVDB not present.\nInstall it now?" +msgstr "The TVDB\nNo se ha encontrado el Scraper de series de The TVDB.\n¿Desea instalarlo ahora?" + +msgctxt "#60049" +msgid "The TVDB is not installed." +msgstr "The TVDB non è installato." + +msgctxt "#60050" +msgid "TheMovieDB not present.\nInstall it now?" +msgstr "TheMovieDB non presente.\nInstallare ora?" + +msgctxt "#60051" +msgid "The Movie Database is not installed." +msgstr "The Movie Database non è installato." + +msgctxt "#60052" +msgid "Error on setting LibraryPath in BD" +msgstr "Errore di impostazione LibraryPath in BD" + +msgctxt "#60053" +msgid "Do you want to configure this scraper in italian as default option for the movies ?" +msgstr "¿Desea configurar este Scraper en español como opción por defecto para películas?" + +msgctxt "#60054" +msgid "Do you want to configure this scraper in italian as default option for the tv series ?" +msgstr "¿Desea configurar este Scraper en español como opción por defecto para series?" + +msgctxt "#60055" +msgid "Error of provider configuration in BD." +msgstr "Error al configurar el scraper en la BD." + +msgctxt "#60060" +msgid "Alfa Auto-configuration" +msgstr "Alfa Auto-configuración" + +msgctxt "#60062" +msgid "Adding movie..." +msgstr "Añadiendo película..." + +msgctxt "#60063" +msgid "Error in adding movies to your video library..." +msgstr "Fallo al añadir..." + +msgctxt "#60064" +msgid "Adding Episodes to the Video Library..." +msgstr "Añadiendo episodios..." + +msgctxt "#60065" +msgid "Added Episode" +msgstr "Añadiendo episodio..." + +msgctxt "#60066" +msgid "ERROR, It has NOT been possible to add the video to the video library" +msgstr "ERROR, la pelicula NO se ha añadido a la videoteca" + +msgctxt "#60067" +msgid "ERROR, tv series has NOT been added to videolibrary\nIt has NOT been possible to add no episode" +msgstr "ERROR, la serie NO se ha añadido a la videoteca\nNo se ha podido obtener ningun episodio" + +msgctxt "#60068" +msgid "ERROR, tv series has NOT been added to videolibrary" +msgstr "ERROR, la serie NO se ha añadido a la videoteca" + +msgctxt "#60069" +msgid "ERRORE, tv series has NOT been added completely to videolibrary" +msgstr "ERROR, la serie NO se ha añadido completa a la videoteca" + +msgctxt "#60070" +msgid "tv series has been added to videolibrary" +msgstr "La serie se ha añadido a la videoteca" + +msgctxt "#60071" +msgid "Autoplay Configuration" +msgstr "Configurar AutoPlay" + +msgctxt "#60072" +msgid "It seems that links of %s are not working." +msgstr "Parece que los enlaces de %s no estan funcionando." + +msgctxt "#60073" +msgid "Do you want to ignore all the links from this server?" +msgstr "¿Desea ignorar todos los enlaces de este servidor?" + +msgctxt "#60074" +msgid "It's not possible to use AutoPlay" +msgstr "AutoPlay No Fue Posible" + +msgctxt "#60075" +msgid "No coincidence" +msgstr "No Hubo Coincidencias" + +msgctxt "#60076" +msgid "New quality/server available in \nConfiguration" +msgstr "Nueva Calidad/Servidor disponible en la \nConfiguracion" + +msgctxt "#60077" +msgid "AutoPlay initialization error" +msgstr "Error al iniciar AutoPlay" + +msgctxt "#60078" +msgid "View the log for more information." +msgstr "Consulte su log para obtener mas información." + +msgctxt "#60079" +msgid "AutoPlay (Turns AutoPlay On/Off)" +msgstr "AutoPlay (activar/desactivar la auto-reproduccion)" + +msgctxt "#60080" +msgid "AutoPlay Language (Optional)" +msgstr "Idioma para AutoPlay (Opcional)" + +msgctxt "#60081" +msgid " Favorite servers" +msgstr " Servidores favoritos" + +msgctxt "#60082" +msgid " \u2665 Favorite server %s" +msgstr " \u2665 Servidor Favorito %s + +msgctxt "#60083" +msgid " Preferred Qualities" +msgstr " Calidades Favoritas" + +msgctxt "#60084" +msgid " \u2665 Preferred Quality %s" +msgstr " \u2665 Calidad Favorita %s" + +msgctxt "#60085" +msgid " Priority (Indicates the order for AutoPlay)" +msgstr " Prioridad (Indica el orden para Auto-Reproducir)" + +msgctxt "#60086" +msgid "It has been renamed to:" +msgstr "È Stato rinominato in:" + +msgctxt "#60087" +msgid "Unexpected error on channel %s" +msgstr "Error inesperado en el canal %s" + +msgctxt "#60088" +msgid "Enter URL" +msgstr "Tengo una URL" + +msgctxt "#60089" +msgid "Enter the URL [Link to server/download]" +msgstr "Entra aquí y teclea la URL [Enlace a servidor online/descarga]" + +msgctxt "#60090" +msgid "Enter the URL [Direct link to video]." +msgstr "Entra aquí y teclea la URL [Enlace directo a un vídeo]" + +msgctxt "#60091" +msgid "Enter the URL [Search for links in a URL]" +msgstr "Entra aquí y teclea la URL [Búsqueda de enlaces en una url]" + +msgctxt "#60092" +msgid "View Direct URL" +msgstr "Ver enlace directo" + +msgctxt "#60093" +msgid "There is no compatible video in this URL" +msgstr "No hay ningún vídeo compatible en esa URL" + +msgctxt "#60200" +msgid "Download..." +msgstr "Descargando..." + +msgctxt "#60201" +msgid "Download starting..." +msgstr "Iniciando descarga..." + +msgctxt "#60202" +msgid "Remaining time: %s" +msgstr "Tiempo restante: %s" + +msgctxt "#60203" +msgid "Downloader %s/%s" +msgstr "Downloader %s/%s" + +msgctxt "#60204" +msgid "Speed Meter" +msgstr "Speed Meter" + +msgctxt "#60205" +msgid "File Writer" +msgstr "File Writer" + +msgctxt "#60206" +msgid "plugin" +msgstr "plugin" + +msgctxt "#60207" +msgid "Download..." +msgstr "Descargando..." + +msgctxt "#60208" +msgid "You can't download this video" +msgstr "No puedes descargar ese vídeo" + +msgctxt "#60209" +msgid "RTMP downloads are not" +msgstr "Las descargas en RTMP aún no" + +msgctxt "#60210" +msgid "still supported" +msgstr "están soportadas" + +msgctxt "#60211" +msgid "Missing %s" +msgstr "Falta %s" + +msgctxt "#60212" +msgid "Check that rtmpdump is installed" +msgstr "Comprueba que rtmpdump está instalado" + +msgctxt "#60213" +msgid "The RTMP download option is experimental" +msgstr "La opción de descarga RTMP es experimental" + +msgctxt "#60214" +msgid "and the video will be downloaded in the background." +msgstr "y el vídeo se descargará en segundo plano." + +msgctxt "#60215" +msgid "No progress bar will be displayed." +msgstr "No se mostrará ninguna barra de progreso." + +msgctxt "#60216" +msgid "addon" +msgstr "addon" + +msgctxt "#60217" +msgid "Download..." +msgstr "Descargando..." + +msgctxt "#60218" +msgid "%.2fMB/%.2fMB (%d%%) %.2f Kb/s %s missing " +msgstr "%.2fMB/%.2fMB (%d%%) %.2f Kb/s %s falta " + +msgctxt "#60219" +msgid "Copying the file" +msgstr "Copiando archivo" + +msgctxt "#60220" +msgid "Error while deleting the file" +msgstr "Error al eliminar el archivo" + +msgctxt "#60221" +msgid "Error while deleting the directory" +msgstr "Error al eliminar el directorio" + +msgctxt "#60222" +msgid "Error while creating the directory" +msgstr "Error al crear el directorio" + +msgctxt "#60223" +msgid "Enter another name" +msgstr "Introducir otro nombre" + +msgctxt "#60224" +msgid "Complete information" +msgstr "Completar información" + +msgctxt "#60225" +msgid "Search in TheMovieDB.org" +msgstr "Buscar en TheMovieDB.org" + +msgctxt "#60226" +msgid "Search in TheTvDB.org" +msgstr "Buscar en TheTvDB.com" + +msgctxt "#60227" +msgid "Identifier not found for: %s" +msgstr "Identificador no encontrado para: %s" + +msgctxt "#60228" +msgid "No information found for: %s" +msgstr "No se ha encontrado informacion para: %s" + +msgctxt "#60229" +msgid "Enter the name of %s to search" +msgstr "Introduzca el nombre de la %s a buscar" + +msgctxt "#60230" +msgid "Title:" +msgstr "Titulo:" + +msgctxt "#60231" +msgid "Original title" +msgstr "Titulo original" + +msgctxt "#60232" +msgid "Year" +msgstr "Año" + +msgctxt "#60233" +msgid "Identifiers:" +msgstr "Identificadores:" + +msgctxt "#60234" +msgid " The Movie Database ID" +msgstr " The Movie Database ID" + +msgctxt "#60235" +msgid " URL Tmdb" +msgstr " URL Tmdb" + +msgctxt "#60236" +msgid " The TVDB ID" +msgstr " The TVDB ID" + +msgctxt "#60237" +msgid " URL TVDB" +msgstr " URL TVDB" + +msgctxt "#60238" +msgid " IMDb ID" +msgstr " IMDb ID" + +msgctxt "#60239" +msgid " Other ID" +msgstr " Otro ID" + +msgctxt "#60240" +msgid "Images(urls):" +msgstr "Imágenes (urls):" + +msgctxt "#60241" +msgid " Background" +msgstr " Fondo" + +msgctxt "#60242" +msgid " Thumbnail" +msgstr " Miniatura" + +msgctxt "#60243" +msgid "Type of content" +msgstr "Tipo de contenido" + +msgctxt "#60244" +msgid "Movie" +msgstr "Película" + +msgctxt "#60245" +msgid "Series" +msgstr "Serie" + +msgctxt "#60246" +msgid "Full information" +msgstr "Completar información" + +msgctxt "#60247" +msgid "[%s]: Select the correct %s" +msgstr "[%s]: Selecciona la %s correcta" + +msgctxt "#60248" +msgid "Login to this page: %s" +msgstr "Accede a esta página: %s" + +msgctxt "#60249" +msgid "Enter this code and accept: %s" +msgstr "Ingresa este código y acepta: %s" + +msgctxt "#60250" +msgid "Once done, click here!" +msgstr "Una vez hecho, pulsa aquí!" + +msgctxt "#60251" +msgid "Synchronize with Trakt. Do not close this window" +msgstr "Sincronizar con Trakt. No cierres esta ventana" + +msgctxt "#60252" +msgid "1. Enter the following URL: %s" +msgstr "1. Entra en la siguiente url: %s" + +msgctxt "#60253" +msgid "2. Enter this code on the page and accept: %s" +msgstr "2. Ingresa este código en la página y acepta: %s" + +msgctxt "#60254" +msgid "3. Wait until this window closes" +msgstr "3. Espera a que se cierre esta ventana" + +msgctxt "#60255" +msgid "Successfully completed" +msgstr "Éxito" + +msgctxt "#60256" +msgid "Account linked correctly" +msgstr "Cuenta vinculada correctamente" + +msgctxt "#60257" +msgid "Error" +msgstr "Error" + +msgctxt "#60258" +msgid "Problem in the connection process" +msgstr "Fallo en el proceso de vinculación" + +msgctxt "#60259" +msgid "Account linked correctly" +msgstr "Cuenta vinculada con éxito" + +msgctxt "#60260" +msgid "Problem in the connection process" +msgstr "Fallo en el proceso de vinculación" + +msgctxt "#60261" +msgid "Alfa" +msgstr "Alfa" + +msgctxt "#60262" +msgid "You can install the Trakt script below, once installed and configured what you see will be automatically synchronized with your account." +msgstr "Puedes instalar el script de Trakt a continuacíon, una vez instalado y configurado lo que veas se sincronizara con tu cuenta automaticamente." + +msgctxt "#60263" +msgid "Do you want to continue?" +msgstr "¿Deseas continuar?" + +msgctxt "#60264" +msgid "In progress" +msgstr "En emisión" + +msgctxt "#60265" +msgid "Completed" +msgstr "Finalizada" + +msgctxt "#60266" +msgid "Action" +msgstr "Acción" + +msgctxt "#60267" +msgid "Adventure" +msgstr "Aventura" + +msgctxt "#60268" +msgid "Animation" +msgstr "Animación" + +msgctxt "#60269" +msgid "Kids" +msgstr "Niños" + +msgctxt "#60270" +msgid "Comedy" +msgstr "Comedia" + +msgctxt "#60271" +msgid "Crime" +msgstr "Crimen" + +msgctxt "#60272" +msgid "Documentaries" +msgstr "Documental" + +msgctxt "#60273" +msgid "Family" +msgstr "Familiar" + +msgctxt "#60274" +msgid "Fantasy" +msgstr "Fantasía" + +msgctxt "#60275" +msgid "Cooking" +msgstr "Comida" + +msgctxt "#60276" +msgid "Contests" +msgstr "Concurso" + +msgctxt "#60277" +msgid "Home and garden" +msgstr "Hogar y Jardín" + +msgctxt "#60278" +msgid "Mistery" +msgstr "Misterio" + +msgctxt "#60279" +msgid "News" +msgstr "Noticias" + +msgctxt "#60280" +msgid "Romantic" +msgstr "Romántico" + +msgctxt "#60281" +msgid "Science fiction" +msgstr "Ciencia-Ficción" + +msgctxt "#60282" +msgid "Soap Opera" +msgstr "Telenovela" + +msgctxt "#60283" +msgid "Sport" +msgstr "Deporte" + +msgctxt "#60284" +msgid "Talk Show" +msgstr "Programa de Entrevistas" + +msgctxt "#60285" +msgid "Travels" +msgstr "Viaje" + +msgctxt "#60286" +msgid "Pre-child audience: children under 6 years" +msgstr "Público pre-infantil: niños menores de 6 años" + +msgctxt "#60287" +msgid "Child audience: from 7 years old" +msgstr "Público infantil: desde 7 años" + +msgctxt "#60288" +msgid "General audience: without family control" +msgstr "Público general: sin supervisión familiar" + +msgctxt "#60289" +msgid "Parental control" +msgstr "Guía paterna: Supervisión paternal" + +msgctxt "#60290" +msgid "More than 14 years old" +msgstr "Mayores de 14 años" + +msgctxt "#60291" +msgid "More than 17 years old" +msgstr "Mayores de 17 años" + +msgctxt "#60292" +msgid "Searching for TV Series Information" +msgstr "Buscando información de la serie" + +msgctxt "#60293" +msgid "Please wait..." +msgstr "Espere por favor..." + +msgctxt "#60294" +msgid "Searching for TV Series Information" +msgstr "Buscando información de la serie" + +msgctxt "#60295" +msgid "Loading results..." +msgstr "Obteniendo resultados..." + +msgctxt "#60296" +msgid "Searching for TV Series Information" +msgstr "Buscando información de la serie" + +msgctxt "#60297" +msgid "Find %s possible matches" +msgstr "Encontrados %s posibles coincidencias" + +msgctxt "#60298" +msgid "[%s]: Select the correct TV series" +msgstr "[%s]: Selecciona la serie correcta" + +msgctxt "#60299" +msgid "Not found in the language '%s'" +msgstr "No se ha encontrado en idioma '%s'" + +msgctxt "#60300" +msgid "Search in language 'en'" +msgstr "Se busca en idioma 'en'" + +msgctxt "#60301" +msgid "Not found in the language '%s'" +msgstr "No se ha encontrado en idioma '%s'" + +msgctxt "#60302" +msgid "Search in language 'en'" +msgstr "Se busca en idioma 'en'" + +msgctxt "#60303" +msgid "The file already exists" +msgstr "El archivo ya existe" + +msgctxt "#60304" +msgid "The unzipped %s file already exists, or you want to overwrite it.?" +msgstr "El archivo %s a descomprimir ya existe, ¿desea sobrescribirlo?" + +msgctxt "#60305" +msgid "Adult channels" +msgstr "Canales para adultos" + +msgctxt "#60306" +msgid "The fields 'New password' and 'Confirm new password' do not match" +msgstr "Los campos 'Nueva contraseña' y 'Confirmar nueva contraseña' no coinciden." + +msgctxt "#60307" +msgid "Use 'Preferences' to change your password" +msgstr "Entre de nuevo en 'Preferencias' para cambiar la contraseña" + +msgctxt "#60308" +msgid "Adult channels" +msgstr "Canales para adultos" + +msgctxt "#60309" +msgid "The password is not correct." +msgstr "La contraseña no es correcta." + +msgctxt "#60310" +msgid "Changes made in this section will not be saved." +msgstr "Los cambios realizados en esta sección no se guardaran." + +msgctxt "#60311" +msgid "Download..." +msgstr "Descargando..." + +msgctxt "#60312" +msgid "Close this window to start playback" +msgstr "Cierra esta ventana para empezar la reproducción" + +msgctxt "#60313" +msgid "Cancel this window to start playback" +msgstr "Cancela esta ventana para empezar la reproducción" + +msgctxt "#60314" +msgid "Speed: " +msgstr "Velocidad: " + +msgctxt "#60315" +msgid " KB/s " +msgstr " KB/s " + +msgctxt "#60316" +msgid "MB of " +msgstr "MB de " + +msgctxt "#60317" +msgid "MB" +msgstr "MB" + +msgctxt "#60318" +msgid "Remaining time: " +msgstr "Tiempo restante: " + +msgctxt "#60319" +msgid "Cancelled" +msgstr "Cancelado" + +msgctxt "#60320" +msgid "Download in background cancelled" +msgstr "Descarga en segundo plano cancelada" + +msgctxt "#60321" +msgid "Press the button to be used to open the window" +msgstr "Presiona la tecla a usar para abrir la ventana" + +msgctxt "#60322" +msgid "You have %s seconds" +msgstr "Tienes %s segundos" + +msgctxt "#60323" +msgid "Press the button to be used to open the window" +msgstr "Presiona la tecla a usar para abrir la ventana" + +msgctxt "#60324" +msgid "You have %s seconds" +msgstr "Tienes %s segundos" + +msgctxt "#60325" +msgid "Saved key" +msgstr "Tecla guardada" + +msgctxt "#60326" +msgid "Restart Kodi to apply changes" +msgstr "Reinicia Kodi para que se apliquen los cambios" + +msgctxt "#60327" +msgid "Novelties" +msgstr "Novedades" + +msgctxt "#60328" +msgid "Channels" +msgstr "Canales" + +msgctxt "#60329" +msgid "Search" +msgstr "Buscador" + +msgctxt "#60330" +msgid "Favorites" +msgstr "Favoritos" + +msgctxt "#60331" +msgid "Videolibrary" +msgstr "Videoteca" + +msgctxt "#60332" +msgid "Downloads" +msgstr "Descargas" + +msgctxt "#60333" +msgid "Configuration" +msgstr "Configuración" + +msgctxt "#60334" +msgid "Password for adult channels" +msgstr "Contraseña para canales de adultos" + +msgctxt "#60335" +msgid "Watch in" +msgstr "Vedere in" + +msgctxt "#60336" +msgid "Download in" +msgstr "Scaricare in" + +msgctxt "#60337" +msgid "alfa-MCT: No support adf.ly" +msgstr "alfa-MCT: Sin soporte adf.ly" + +msgctxt "#60338" +msgid "The script does not support URL reduction adf.ly." +msgstr "El script no tiene soporte para el acortador de urls adf.ly." + +msgctxt "#60339" +msgid "Nothing to Play" +msgstr "No se puede reproducir" + +msgctxt "#60342" +msgid "Download completed: " +msgstr "Descarga completa: " + +msgctxt "#60343" +msgid "BMC-Kodi has closed the video." +msgstr "XBMC-Kodi Cerró el vídeo." + +msgctxt "#60344" +msgid "Continue with the session?" +msgstr "¿Continuar con la sesión?" + +msgctxt "#60345" +msgid "alfa-MCT: List of videos" +msgstr "alfa-MCT: Lista de vídeos" + +msgctxt "#60346" +msgid "Delete video downloads" +msgstr "Borrar las descargas del video" + +msgctxt "#60347" +msgid "No items to display" +msgstr "No hay elementos que mostrar" + +msgctxt "#60348" +msgid "Information" +msgstr "Información" + +msgctxt "#60349" +msgid "Go to the Main Menu" +msgstr "Ir al Menu Principal" + +msgctxt "#60350" +msgid "[COLOR yellow]Search in other channels[/COLOR]" +msgstr "[COLOR yellow]Buscar en otros canales[/COLOR]" + +msgctxt "#60351" +msgid "Set as homepage" +msgstr "[COLOR 0xffccff00]Definir como pagina de inicio[/COLOR]" + +msgctxt "#60352" +msgid "Add TV Series to Videolibrary" +msgstr "Añadir Serie a Videoteca" + +msgctxt "#60353" +msgid "Add Movie to Videolibrary" +msgstr "Añadir Pelicula a Videoteca" + +msgctxt "#60354" +msgid "Download Movie" +msgstr "Descargar Pelicula" + +msgctxt "#60355" +msgid "Download TV Series" +msgstr "Descargar Serie" + +msgctxt "#60356" +msgid "Download Episode" +msgstr "Descargar Episodio" + +msgctxt "#60357" +msgid "Download Season" +msgstr "Descargar Temporada" + +msgctxt "#60358" +msgid "Open Configuration" +msgstr "Abrir Configuración" + +msgctxt "#60359" +msgid "Search Trailer" +msgstr "Buscar Trailer" + +msgctxt "#60360" +msgid "[COLOR 0xffccff00][/COLOR]" +msgstr "[COLOR 0xffccff00][/COLOR]" + +msgctxt "#60361" +msgid "Super Favourites Menu" +msgstr "Super Favourites Menu" + +msgctxt "#60362" +msgid "You can't watch this video because..." +msgstr "No puedes ver ese vídeo porque..." + +msgctxt "#60363" +msgid "The server on which it is hosted" +msgstr "El servidor donde está alojado no está" + +msgctxt "#60364" +msgid "is not yet supported in Alfa" +msgstr "soportado en Alfa todavía" + +msgctxt "#60365" +msgid "Loading video..." +msgstr "Cargando vídeo..." + +msgctxt "#60366" +msgid "External plugin: %s" +msgstr "Plugin externo: %s" + +msgctxt "#60376" +msgid "Video information" +msgstr "Información del vídeo" + +msgctxt "#60377" +msgid "Title:" +msgstr "Título:" + +msgctxt "#60378" +msgid "Original Title:" +msgstr "Título original:" + +msgctxt "#60379" +msgid "Original language:" +msgstr "Idioma original:" + +msgctxt "#60380" +msgid "Score:" +msgstr "Puntuación:" + +msgctxt "#60381" +msgid "Release:" +msgstr "Lanzamiento:" + +msgctxt "#60382" +msgid "Genres:" +msgstr "Géneros:" + +msgctxt "#60383" +msgid "Series:" +msgstr "Serie:" + +msgctxt "#60384" +msgid "Season title:" +msgstr "Título temporada:" + +msgctxt "#60385" +msgid "Season:" +msgstr "Temporada:" + +msgctxt "#60386" +msgid "Episode:" +msgstr "Episodio:" + +msgctxt "#60387" +msgid "Emission:" +msgstr "Emisión:" + +msgctxt "#60388" +msgid "Summary:" +msgstr "Sinopsis:" + +msgctxt "#60389" +msgid "Videolibrary update...." +msgstr "Actualizando videoteca...." + +msgctxt "#60390" +msgid "AutoPlay Configuration" +msgstr "Configurar AutoPlay" + +msgctxt "#60391" +msgid "AutoPlay" +msgstr "AutoPlay" + +msgctxt "#60392" +msgid "\n\n\nTotal Reset of the addon %s.\n\n[COLOR red]Attention This function completely resets the addon.[/COLOR]" +msgstr "\n\n\nReset totale dell'addon %s.\n\n[COLOR red]Attenzione questa funzione resetta totalmente l'addon.[/COLOR]" + +msgctxt "#60393" +msgid "[COLOR red]Reset %s[/COLOR]" +msgstr "[COLOR red]Reset %s[/COLOR]" + +msgctxt "#60394" +msgid "Reset %s" +msgstr "Reset %s" + +msgctxt "#60395" +msgid "Are you sure you want to reset all settings of %s ?" +msgstr "Sei sicuro di voler resettare tutte le impostazioni di %s ?" + +msgctxt "#60396" +msgid "Cancel" +msgstr "Annulla" + +msgctxt "#60397" +msgid "Confirm" +msgstr "Conferma" + +msgctxt "#60398" +msgid " Settings Reset was successful!" +msgstr "Reset delle impostazioni è avvenuto con successo!" + +msgctxt "#60399" +msgid "AutoPlay allows you to auto play links directly, based on your server settings and preferred qualities. " +msgstr "AutoPlay permite auto reproducir los enlaces directamente, basándose en la configuracion de tus servidores y calidades preferidas. " + +msgctxt "#60400" +msgid "512 Mega" +msgstr "512 Mega" + +msgctxt "#60401" +msgid "1 Gb" +msgstr "1 Gb" + +msgctxt "#60402" +msgid "2 Gb" +msgstr "2 Gb" + +msgctxt "#60403" +msgid "more than 2 Gb" +msgstr "più di 2 Gb" + +msgctxt "#60404" +msgid "Choose cache setting" +msgstr "Scegli settaggio cache" + +msgctxt "#60405" +msgid "\n[COLOR orange]Cache Set for 512 Mega RAM[/COLOR]" +msgstr "\n[COLOR orange]Cache Impostata per 512 Mega di RAM[/COLOR]" + +msgctxt "#60406" +msgid "\n[COLOR orange]Cache Set for 1 Gb RAM[/COLOR]" +msgstr "\n[COLOR orange]Cache Impostata per 1 Gb di RAM[/COLOR]" + +msgctxt "#60407" +msgid "\n[COLOR orange]Cache Set for 2 Gb RAM[/COLOR]" +msgstr "\n[COLOR orange]Cache Impostata per 2 Gb di RAM[/COLOR]" + +msgctxt "#60408" +msgid "\n[COLOR orange]Cache Set higher than 2 Gb of RAM[/COLOR]" +msgstr "\n[COLOR orange]Cache Impostata a superiore di 2 Gb di RAM[/COLOR]" + +msgctxt "#60409" +msgid "plugin" +msgstr "plugin" + +msgctxt "#60410" +msgid "An advancedsettings.xml file has been created" +msgstr "E' stato creato un file advancedsettings.xml" + +msgctxt "#60411" +msgid "with the ideal streaming configuration." +msgstr "con la configurazione ideale per lo streaming." + +msgctxt "#60412" +msgid "Choose channels to include" +msgstr "Elegir canales incluidos" + +msgctxt "#60413" +msgid "[COLOR yellow]New Movie Search...[/COLOR]" +msgstr "[COLOR yellow]Nuova ricerca film...[/COLOR]" + +msgctxt "#60414" +msgid "[COLOR yellow]New search tv series...[/COLOR]" +msgstr "[COLOR yellow]Nuova ricerca serie tv...[/COLOR]" + +msgctxt "#60415" +msgid "[COLOR green]Other settings[/COLOR]" +msgstr "[COLOR green]Altre impostazioni[/COLOR]" + +msgctxt "#60416" +msgid "Delete saved searches" +msgstr "Cancella ricerche salvate" + +msgctxt "#60417" +msgid "[COLOR red]Delete search history[/COLOR]" +msgstr "[COLOR red]Elimina cronologia ricerche[/COLOR]" + +msgctxt "#60418" +msgid "Choose channels to include in your search" +msgstr "Scegli i canali da includere nella ricerca" + +msgctxt "#60419" +msgid "Delete saved searches" +msgstr "Cancella ricerche salvate" + +msgctxt "#60420" +msgid "More Options" +msgstr "Altre opzioni" + +msgctxt "#60421" +msgid "Channels included in the global search " +msgstr "Canali inclusi nella ricerca globale " + +msgctxt "#60422" +msgid "Search " +msgstr "Buscando " + +msgctxt "#60423" +msgid "Search" +msgstr "Ricerca" + +msgctxt "#60424" +msgid "Searches key have been deleted correctly" +msgstr "Búsquedas borradas correctamente" + +msgctxt "#60425" +msgid "Channel search" +msgstr "Cerca canale" + +msgctxt "#60426" +msgid "FILTER: Configure" +msgstr "FILTRO: Configurar" + +msgctxt "#60427" +msgid "FILTER: Adding '%s'" +msgstr "FILTRO: Añadir '%s'" + +msgctxt "#60428" +msgid "FILTER: Delete '%s'" +msgstr "FILTRO: Borrar '%s'" + +msgctxt "#60429" +msgid "[COLOR %s]Filter configuration for TV series...[/COLOR]" +msgstr "[COLOR %s]Configurar filtro para series...[/COLOR]" + +msgctxt "#60430" +msgid "FILTRO: Delete '%s'" +msgstr "FILTRO: Borrar '%s'" + +msgctxt "#60431" +msgid " and quality %s" +msgstr " y calidad %s" + +msgctxt "#60432" +msgid "[COLOR %s]No results in this language '%s'%s, click to show without filter[/COLOR]" +msgstr "[COLOR %s]No hay elementos con idioma '%s'%s, pulsa para mostrar sin filtro[/COLOR]" + +msgctxt "#60433" +msgid " (disabled)" +msgstr " (desactivado)" + +msgctxt "#60434" +msgid "Configure [COLOR %s][%s][/COLOR]%s" +msgstr "Configurar [COLOR %s][%s][/COLOR]%s" + +msgctxt "#60435" +msgid "There are no filters, search for a TV series and click on the context menu 'FILTER: Configure'" +msgstr "No existen filtros, busca una serie y pulsa en menú contextual 'FILTRO: Configurar'" + +msgctxt "#60436" +msgid "Spanish" +msgstr "Español" + +msgctxt "#60437" +msgid "Delete" +msgstr "Borrar" + +msgctxt "#60438" +msgid "¿Enable / disable filter?" +msgstr "¿Activar/Desactivar filtro?" + +msgctxt "#60439" +msgid "Language" +msgstr "Idioma" + +msgctxt "#60440" +msgid "Permitted quality" +msgstr "Calidad permitida" + +msgctxt "#60441" +msgid "Filter links for: [COLOR %s]%s[/COLOR]" +msgstr "Filtrado de enlaces para: [COLOR %s]%s[/COLOR]" + +msgctxt "#60442" +msgid "Are you sure you want to delete the filter?" +msgstr "¿Está seguro que desea eliminar el filtro?" + +msgctxt "#60443" +msgid "Click 'Yes' to remove the filter from [COLOR %s]%s[/COLOR], click 'No' or close the window to do nothing." +msgstr "Pulse 'Si' para eliminar el filtro de [COLOR %s]%s[/COLOR], pulse 'No' o cierre la ventana para no hacer nada." + +msgctxt "#60444" +msgid "FILTER DELETED" +msgstr "FILTRO ELIMINADO" + +msgctxt "#60445" +msgid "Error on saving on disk" +msgstr "Error al guardar en disco" + +msgctxt "#60446" +msgid "FILTER SAVED" +msgstr "FILTRO GUARDADO" + +msgctxt "#60447" +msgid "FAQ:" +msgstr "FAQ:" + +msgctxt "#60448" +msgid " - How do I report an error?" +msgstr " - Come segnalo un errore?" + +msgctxt "#60449" +msgid " - Is it possible to enable/disable channels?" +msgstr " - È Possibile attivare/disattivare i canali?" + +msgctxt "#60450" +msgid " - Is automatic synchronization with Trakt possible?" +msgstr " - È Possibile la sincronizzazione automatica con Trakt?" + +msgctxt "#60451" +msgid " - Is it possible to show all the results together in the global search?" +msgstr " - È Possibile mostrare tutti i risultati uniti nella ricerca globale?" + +msgctxt "#60452" +msgid " - Links take too long to appear." +msgstr " - I link ci mettono troppo ad apparire." + +msgctxt "#60453" +msgid " - The content search is not performed correctly." +msgstr " - La ricerca dei contenuti non viene eseguita correttamente." + +msgctxt "#60454" +msgid " - Some channels do not function properly." +msgstr " - Alcuni canali non funzionano correttamente." + +msgctxt "#60455" +msgid " - The library does not update correctly." +msgstr " - La libreria non viene aggiornata correttamente." + +msgctxt "#60456" +msgid " - Links of interest" +msgstr " - Collegamenti di interesse" + +msgctxt "#60457" +msgid "Alfa" +msgstr "Alfa" + +msgctxt "#60458" +msgid "The disabling can be done in 'Settings>Turn on/off channels'. You can toggle channels on/off one at a time or all at the same time. Want to manage your channels now?" +msgstr "La disabilitazione può essere fatta in 'Impostazioni>Attiva/Disattiva canali'. È Possibile Attivare/Disattivare i canali uno alla volta o tutti allo stesso tempo. Vuoi gestire i canali adesso?" + +msgctxt "#60459" +msgid "Currently it is possible to activate the synchronization (silent) after having marked an episode as 'as watched' (this happens automatically). This option can be enabled in 'Settings>Library Settings'. Do you want access to these settings?" +msgstr "Attualmente è possibile attivare la sincronizzazione (silenziosa) dopo aver segnato come 'come visto' un episodio (ciò avviene automaticamente). Questa opzione può essere attivata in 'Impostazioni>Impostazioni libreria'. Vuoi accedere a queste impostazioni?" + +msgctxt "#60460" +msgid "This can be improved by limiting the maximum number of links or by displaying them in a Pop-Up window. These settings can be found in 'Settings>Library Settings' Do you want to access these settings?" +msgstr "Questo può essere migliorato limitando il numero massimo di collegamenti o visualizzandoli in una finestra Pop-Up. Queste impostazioni possono essere trovate in 'Impostazioni>Impostazioni libreria' Vuoi accedere a queste impostazioni?" + +msgctxt "#60461" +msgid "Alfa - FAQ - %s" +msgstr "Alfa- FAQ - %s" + +msgctxt "#60462" +msgid "You may not have written the library path correctly in 'Settings>Preferences'.\nIl The specified path must be exactly the same as the 'source' entered in 'Archive' of the Kodi library.\nAVANZATO: This path is also found in 'sources.xml'.\nThere can be problems using some Kodi forks and paths with 'special://'. SPMC, for example, has problems with this, and there doesn't seem to be a solution, as it is an external problem to Alfa that has existed for a long time.\nYou can try solving these problems in 'Settings>Library Settings' by changing the 'Search in' setting from 'The folder of each series' to 'All library'." +msgstr "Potresti non aver scritto correttamente il percorso della libreria in 'Impostazioni>Preferenze'.\nIl percorso specificato deve essere esattamente uguale al 'sorgente' inserito in 'Archivio' della libreria di Kodi.\nAVANZATO: Questo percorso si trova anche in 'sources.xml'.\nPotresti riscontrare dei problemi utilizzando alcuni fork di Kodi e percorsi con 'special://'. SPMC, per esempio, ha problemi con questo, e non sembra esserci una soluzione, poichè è un problema esterno ad Orion che esiste da molto tempo.\nPuoi provare a risolvere questi problemi in 'Impostazioni>Impostazioni libreria', modificando l'impostazione 'Esegui ricerca contenuto in' da 'La cartella di ogni serie' in 'Tutta la libreria'." + +msgctxt "#60463" +msgid "The channel site may not work. In case the site works you can report the problem on github." +msgstr "Può darsi che il sito del canale non funzioni. Nel caso il sito funzioni puoi segnalare il problema su github." + +msgctxt "#60464" +msgid "It is possible that you have updated Alfa recently and that the changes have not been fully applied Well, you can try 'Settings>Other Tools', checking the *_data.json files or reattaching everything to the library again" +msgstr "È Possibile che tu abbia aggiornato Orion di recente e che i cambiamenti non siano stati totalmente applicati Bene, puoi provare in 'Impostazioni>Altri strumenti', controllando i files *_data.json o riaggiungendo tutto ancora alla libreria" + +msgctxt "#60465" +msgid "Do you want access to these settings?" +msgstr "Vuoi accedere a queste impostazioni?" + +msgctxt "#60466" +msgid "Yes, the option to display merged or split results by channels can be found in 'Settings>Global Search Settings>Other Settings'. Do you want access to these settings?" +msgstr "Sì, l'opzione per mostrare i risultati uniti o divisi per canali si trova in 'Impostazioni>Impostazioni ricerca globale>Altre impostazioni'. Vuoi accedere a queste impostazioni?" + +msgctxt "#60467" +msgid "To report a problem on'http://alfa-addon.com' you need to:|the version you're using of Alpha.|The version you're using of kodi, mediaserver, etc.|the version and name of the operating system you're using.|The name of the skin (in case you're using Kodi) and whether using the default skin has solved the problem.|Description of the problem and any test cases.To activate the log in detailed mode, go to:|Configuration.|Preferences.|In the General tab - Check the option: Generate detailed log. The detailed log file can be found in the following path: \n\n%s" +msgstr "Para reportar un problema en 'http://alfa-addon.com' es necesario:\n - Versión que usas de Alfa.\n - Versión que usas de kodi, mediaserver, etc.\n - Versión y nombre del sistema operativo que usas.\n - Nombre del skin (en el caso que uses Kodi) y si se te ha resuelto el problema al usar el skin por defecto.\n - Descripción del problema y algún caso de prueba.\n - Agregar el log en modo detallado, una vez hecho esto, zipea el log y lo puedes adjuntar en un post.\n\nPara activar el log en modo detallado, ingresar a:\n - Configuración.\n - Preferencias.\n - En la pestaña General - Marcar la opción: Generar log detallado.\n\nEl archivo de log detallado se encuentra en la siguiente ruta: \n\n%s" + +msgctxt "#60468" +msgid "You can find our Telegram channel at @StreamOnDemandOfficial\nSe you have doubts you can write to us in the Telegram group: https://bit.ly/2I3kRwF" +msgstr "Puoi trovare il nostro canale Telegram in @StreamOnDemandOfficial\nSe hai dubbi puoi scriverci nel gruppo Telegram: https://bit.ly/2I3kRwF" + +msgctxt "#60469" +msgid "Uploading new data" +msgstr "Cargando nuevos datos" + +msgctxt "#60470" +msgid "Buscando en Tmdb......." +msgstr "Buscando en Tmdb......." + +msgctxt "#60471" +msgid "No results, missing information about the year of the video" +msgstr "Sin resultados. Falta información del año del video" + +msgctxt "#60472" +msgid "There is no information on the %s required" +msgstr "No hay info de la %s solicitada" + +msgctxt "#60473" +msgid "No results" +msgstr "Sin resultados" + +msgctxt "#60474" +msgid "There is no information on the %s required" +msgstr "No hay info de la %s solicitada" + +msgctxt "#60475" +msgid "Filmaffinity recording......." +msgstr "Registrando filmaffinity......." + +msgctxt "#60476" +msgid "[COLOR yellow][B]There is no information about this movie...[/B][/COLOR]" +msgstr "[COLOR yellow][B]Esta pelicula no tiene informacion...[/B][/COLOR]" + +msgctxt "#60477" +msgid "Important recommendations......." +msgstr "Indagando recomendaciones......." + +msgctxt "#60478" +msgid "[COLOR aquamarine][B]Completated %s[/B][/COLOR]" +msgstr "[COLOR aquamarine][B]Finalizada %s[/B][/COLOR]" + +msgctxt "#60479" +msgid "[COLOR aquamarine][B]In progress %s[/B][/COLOR]" +msgstr "[COLOR aquamarine][B]En emisión %s[/B][/COLOR]" + +msgctxt "#60480" +msgid "(Seasons: %s)" +msgstr "(Temporadas: %s)" + +msgctxt "#60481" +msgid "Picture collection on FANART.TV" +msgstr "Recopilando imágenes en FANART.TV" + +msgctxt "#60482" +msgid "Tuned Instruments in Vtunes" +msgstr "Afinado instrumentos en Vtunes" + +msgctxt "#60483" +msgid "Picture collection on FANART.TV" +msgstr "Recopilando imágenes en FANART.TV" + +msgctxt "#60484" +msgid "[COLOR red][B]Update Kodi to its latest version[/B][/COLOR]" +msgstr "[COLOR red][B]Actualiza Kodi a su última versión[/B][/COLOR]" + +msgctxt "#60485" +msgid "[COLOR skyblue]for detailed info[/COLOR]" +msgstr "[COLOR skyblue]para mejor info[/COLOR]" + +msgctxt "#60486" +msgid "Uploading new information" +msgstr "Cargando nueva info" + +msgctxt "#60487" +msgid "Search in Tmdb......." +msgstr "Buscando en Tmdb......." + +msgctxt "#60488" +msgid "No information..." +msgstr "Sin información..." + +msgctxt "#60489" +msgid "[COLOR limegreen][B]Production company: [/B][/COLOR]" +msgstr "[COLOR limegreen][B]Productora: [/B][/COLOR]" + +msgctxt "#60490" +msgid "[COLOR limegreen][B]Country: [/B][/COLOR]" +msgstr "[COLOR limegreen][B]País: [/B][/COLOR]" + +msgctxt "#60491" +msgid "[COLOR limegreen][B]Preview: [/B][/COLOR]" +msgstr "[COLOR limegreen][B]Estreno: [/B][/COLOR]" + +msgctxt "#60492" +msgid "[COLOR limegreen][B]Seasons/Episodes: [/B][/COLOR]" +msgstr "[COLOR limegreen][B]Temporadas/Episodios: [/B][/COLOR]" + +msgctxt "#60493" +msgid "[COLOR orange][B]Is there the tv series you're looking for?[/B][/COLOR]" +msgstr "[COLOR orange][B]¿Está la serie que buscas?[/B][/COLOR]" + +msgctxt "#60494" +msgid "[COLOR orange][B]Is there the movie you are looking for?[/B][/COLOR]" +msgstr "[COLOR orange][B]¿Está la película que buscas?[/B][/COLOR]" + +msgctxt "#60495" +msgid "[COLOR tomato][B]Close[/B][/COLOR]" +msgstr "[COLOR tomato][B]Cerrar[/B][/COLOR]" + +msgctxt "#60496" +msgid "Loading results" +msgstr "Cargando resultados" + +msgctxt "#60497" +msgid "Wait........" +msgstr "Espere........" + +msgctxt "#60498" +msgid "[COLOR orange][B]Select...[/B][/COLOR]" +msgstr "[COLOR orange][B]Selecciona...[/B][/COLOR]" + +msgctxt "#60499" +msgid "plugin" +msgstr "plugin" + +msgctxt "#60500" +msgid "Nothing to play" +msgstr "No hay nada para reproducir" + +msgctxt "#60501" +msgid "[COLOR orange][B]Department[/B][/COLOR]" +msgstr "[COLOR orange][B]Reparto[/B][/COLOR]" + +msgctxt "#60502" +msgid "Uploading new data" +msgstr "Cargando nuevos datos" + +msgctxt "#60503" +msgid "Loading data from the %s..." +msgstr "Obteniendo datos del %s..." + +msgctxt "#60504" +msgid "No information" +msgstr "Sin información" + +msgctxt "#60505" +msgid "[COLOR rosybrown]Uploading filmography...[/COLOR]" +msgstr "[COLOR rosybrown]Obteniendo filmografía...[/COLOR]" + +msgctxt "#60506" +msgid "[COLOR plum]Picture collection...[/COLOR]" +msgstr "[COLOR plum]Recopilando imágenes...[/COLOR]" + +msgctxt "#60507" +msgid "[COLOR crimson][B]Error[/B][/COLOR]" +msgstr "[COLOR crimson][B]Error[/B][/COLOR]" + +msgctxt "#60508" +msgid "[COLOR tomato]Video not available[/COLOR]" +msgstr "[COLOR tomato]Vídeo no disponible[/COLOR]" + +msgctxt "#60509" +msgid "Movies" +msgstr "Películas" + +msgctxt "#60510" +msgid "Kids" +msgstr "Para niños" + +msgctxt "#60511" +msgid "TV series Episodes" +msgstr "Episodios de series" + +msgctxt "#60512" +msgid "Anime Episodes" +msgstr "Episodios de anime" + +msgctxt "#60513" +msgid "Documentaries" +msgstr "Documentales" + +msgctxt "#60514" +msgid "Channels included in: %s" +msgstr "Canales incluidos en: %s" + +msgctxt "#60515" +msgid "Simultaneous search deactivated" +msgstr "Búsqueda concurrente desactivada" + +msgctxt "#60516" +msgid "Simultaneous novelty search provides" +msgstr "La búsqueda concurrente de novedades proporciona" + +msgctxt "#60517" +msgid "higher speed and its deactivation is advisable only in case of failure." +msgstr "una mayor velocidad y su desactivación solo es aconsejable en caso de fallo." + +msgctxt "#60518" +msgid "Would you like to activate the simultaneous search now?" +msgstr "¿Desea activar la búsqueda concurrente ahora?" + +msgctxt "#60519" +msgid "Channel search..." +msgstr "Buscando canales..." + +msgctxt "#60520" +msgid "Search in '%s'..." +msgstr "Buscando en '%s'..." + +msgctxt "#60521" +msgid "Completed in %d/%d channels..." +msgstr "Finalizado en %d/%d canales..." + +msgctxt "#60522" +msgid "Results obtained: %s | Time: %2.f seconds" +msgstr "Resultados obtenidos: %s | Tiempo: %2.f segundos" + +msgctxt "#60523" +msgid " (In %s and %s)" +msgstr " (En %s y %s)" + +msgctxt "#60524" +msgid " (In %s)" +msgstr " (En %s)" + +msgctxt "#60525" +msgid "Channels included in:" +msgstr "Canales incluidos en:" + +msgctxt "#60526" +msgid " - Movies " +msgstr " - Películas " + +msgctxt "#60527" +msgid " - Kids" +msgstr " - Para niños" + +msgctxt "#60528" +msgid " - Series Tv Episodes" +msgstr " - Episodios de series" + +msgctxt "#60529" +msgid " - Anime Episodes" +msgstr " - Episodios de anime" + +msgctxt "#60530" +msgid " - Documentaries" +msgstr " - Documentales" + +msgctxt "#60531" +msgid "Other Settings" +msgstr "Otros ajustes" + +msgctxt "#60532" +msgid "Configuration -- News" +msgstr "configuración -- Novedades" + +msgctxt "#60533" +msgid "Channels included in News " +msgstr "Canales incluidos en Novedades " + +msgctxt "#60534" +msgid "Last 2 months" +msgstr "Last 2 months" + +msgctxt "#60535" +msgid "Preferences" +msgstr "Preferencias" + +msgctxt "#60536" +msgid "Special settings" +msgstr "Ajustes especiales" + +msgctxt "#60537" +msgid "Channel settings" +msgstr "Ajustes de Canales" + +msgctxt "#60538" +msgid "Server settings" +msgstr "Ajustes de Servidores" + +msgctxt "#60539" +msgid "Settings for the 'News' section" +msgstr "Ajustes de la sección 'Novedades'" + +msgctxt "#60540" +msgid "Global search settings" +msgstr "Ajustes del buscador global" + +msgctxt "#60541" +msgid "Download settings" +msgstr "Ajustes de descargas" + +msgctxt "#60542" +msgid "Videolibrary settings" +msgstr "Ajustes de la videoteca" + +msgctxt "#60544" +msgid "More Options" +msgstr "Otras herramientas" + +msgctxt "#60545" +msgid "Activate/deactivate channels" +msgstr "Activar/desactivar canales" + +msgctxt "#60546" +msgid "Channel settings" +msgstr "Ajustes por canales" + +msgctxt "#60547" +msgid "Channel Configuration '%s'" +msgstr "Configuración del canal '%s'" + +msgctxt "#60548" +msgid "HChannel Options" +msgstr "Herramientas de canales" + +msgctxt "#60549" +msgid "Check the files * _data.json" +msgstr "Comprobar archivos *_data.json"," + +msgctxt "#60550" +msgid "Servers locked" +msgstr "Sevidores bloqueados" + +msgctxt "#60551" +msgid "Favorite servers" +msgstr "Servidores favoritos" + +msgctxt "#60552" +msgid "Debriders settings" +msgstr "Ajustes de debriders:" + +msgctxt "#60553" +msgid " Server configuration '%s'" +msgstr " Configuración del servidor '%s'" + +msgctxt "#60554" +msgid "Server settings" +msgstr "Ajustes de servidores" + +msgctxt "#60557" +msgid "Saving configuration" +msgstr "Guardando configuración..." + +msgctxt "#60558" +msgid "Please wait." +msgstr "Espere un momento por favor." + +msgctxt "#60559" +msgid "Saving configuration...%s" +msgstr "Guardando configuración...%s" + +msgctxt "#60560" +msgid " - [COLOR red] CORRECTED!![/COLOR]" +msgstr " - [COLOR red] CORREGIDO!![/COLOR]" + +msgctxt "#60561" +msgid "Saving configuration..." +msgstr "Guardando configuración..." + +msgctxt "#60562" +msgid "Please wait" +msgstr "Espere un momento por favor" + +msgctxt "#60563" +msgid "Saving configuration..." +msgstr "Guardando configuración..." + +msgctxt "#60564" +msgid "Channel Options" +msgstr "Herramientas de canales" + +msgctxt "#60565" +msgid " Check the files * _data.json" +msgstr " Comprobar archivos *_data.json" + +msgctxt "#60566" +msgid "Videolibrary options" +msgstr "Herramientas de videoteca" + +msgctxt "#60567" +msgid " Overwrite the entire video library (strm, nfo and json)" +msgstr " Sobreescribir toda la videoteca (strm, nfo y json)" + +msgctxt "#60568" +msgid " Search for new episodes and update the video library" +msgstr " Buscar nuevos episodios y actualizar videoteca" + +msgctxt "#60569" +msgid " - There are no default settings" +msgstr " - No tiene ajustes por defecto" + +msgctxt "#60570" +msgid " | Error Detail: %s" +msgstr " | Detalle del error: %s" + +msgctxt "#60571" +msgid " - [COLOR red] Default settings cannot be loaded![/COLOR]" +msgstr " - [COLOR red] Imposible cargar los ajustes por defecto![/COLOR]" + +msgctxt "#60572" +msgid "Ask" +msgstr "Preguntar" + +msgctxt "#60577" +msgid "Order Servers" +msgstr "Ordenar servidores" + +msgctxt "#60578" +msgid " Server #%s" +msgstr " Servidor #%s" + +msgctxt "#60579" +msgid "Error" +msgstr "Error" + +msgctxt "#60580" +msgid "A saving error occurred" +msgstr "Se ha producido un error al guardar" + +msgctxt "#60581" +msgid "Overwriting the entire video library" +msgstr "Sobrescribir toda la videoteca" + +msgctxt "#60582" +msgid "This may take some time." +msgstr "Esto puede llevar algún tiempo." + +msgctxt "#60583" +msgid "Do you want to continue?" +msgstr "¿Desea continuar?" + +msgctxt "#60584" +msgid "Overwriting the video library...TV SERIES" +msgstr "Sobrescribiendo videoteca....SERIES" + +msgctxt "#60585" +msgid "alfa" +msgstr "alfa" + +msgctxt "#60586" +msgid "Overwriting the video library...MOVIES" +msgstr "Sobrescribiendo videoteca....PELICULAS" + +msgctxt "#60587" +msgid "Video library update...." +msgstr "Actualización videoteca ...." + +msgctxt "#60588" +msgid " - Settings created" +msgstr " - Ajustes creados" + +msgctxt "#60589" +msgid "- - No correction necessary" +msgstr "- - No necesita corrección" + +msgctxt "#60590" +msgid " - An error has occurred" +msgstr " - Ha ocurrido algun error" + +msgctxt "#60591" +msgid "Activate all" +msgstr "Activar todos" + +msgctxt "#60592" +msgid "Deactivate all" +msgstr "Desactivar todos" + +msgctxt "#60593" +msgid "Default Set" +msgstr "Establecer estado por defecto" + +msgctxt "#60594" +msgid "All channels" +msgstr "Todos los canales" + +msgctxt "#60595" +msgid " [COLOR grey](Default disabled)[/COLOR]" +msgstr " [COLOR grey](Desactivado por defecto)[/COLOR]" + +msgctxt "#60596" +msgid "Channels" +msgstr "Canales" + +msgctxt "#60597" +msgid " Server #%s" +msgstr " Servidor #%s" + +msgctxt "#60598" +msgid "Configuration -- Video Library" +msgstr "configuración -- Videoteca" + +msgctxt "#60600" +msgid "Series" +msgstr "Series" + +msgctxt "#60601" +msgid "Video library update" +msgstr "Actualizar la videoteca" + +msgctxt "#60602" +msgid "Never" +msgstr "Nunca" + +msgctxt "#60603" +msgid "When Kodi starts" +msgstr "Al iniciar Kodi" + +msgctxt "#60604" +msgid "Once a day" +msgstr "Una sola vez al día" + +msgctxt "#60605" +msgid "At the start of Kodi and once a day" +msgstr "Al iniciar Kodi y al menos una vez al día" + +msgctxt "#60606" +msgid " Wait before updating at startup of Kodi" +msgstr " Esperar antes de actualizar al iniciar kodi" + +msgctxt "#60607" +msgid "When Kodi starts" +msgstr "Al iniciar Kodi" + +msgctxt "#60609" +msgid "10 sec" +msgstr "10 seg" + +msgctxt "#60610" +msgid "20 sec" +msgstr "20 seg" + +msgctxt "#60611" +msgid "30 sec" +msgstr "30 seg" + +msgctxt "#60612" +msgid "60 sec" +msgstr "60 seg" + +msgctxt "#60613" +msgid " Begin scheduled update from" +msgstr " Iniciar actualización programada a partir de las" + +msgctxt "#60614" +msgid " Search for new episodes in active tv series" +msgstr " Buscar nuevos episodios en las series activas" + +msgctxt "#60615" +msgid "Never" +msgstr "Nunca" + +msgctxt "#60616" +msgid "Always" +msgstr "Siempre" + +msgctxt "#60617" +msgid "According to new episodes" +msgstr "Según su emisión" + +msgctxt "#60618" +msgid " Search for content in" +msgstr " Realizar búsqueda de contenido en" + +msgctxt "#60619" +msgid "The folder of each tv series" +msgstr "La carpeta de cada serie" + +msgctxt "#60620" +msgid "All video library" +msgstr "Toda la videoteca" + +msgctxt "#60621" +msgid "Show links in" +msgstr "Mostrar los enlaces en" + +msgctxt "#60622" +msgid "Conventional window" +msgstr "Ventana convencional" + +msgctxt "#60623" +msgid "Pop-up window" +msgstr "Ventana emergente" + +msgctxt "#60624" +msgid " Maximum number of links to display (recommended for slow devices)" +msgstr " Numero máximo de enlaces a mostrar (recomendable para equipos lentos)" + +msgctxt "#60625" +msgid "All" +msgstr "Todos" + +msgctxt "#60626" +msgid " Sort by whitelist" +msgstr " Ordenar segun el orden de la lista blanca" + +msgctxt "#60627" +msgid " Remove the channel name at the beginning" +msgstr " Quitar el nombre del canal del principio" + +msgctxt "#60628" +msgid " Pop-up window: Replace \"View in\" with \"[V]\" and \"Download in\" with \"[D]\"" +msgstr " Ventana emergente: Reemplazar \"Ver en\" por \"[V]\" y \"Descargar en\" por \"[D]\"" + +msgctxt "#60629" +msgid "Database location" +msgstr "Ubicación de Base de datos" + +msgctxt "#60630" +msgid "Local" +msgstr "Local" + +msgctxt "#60631" +msgid "Remote" +msgstr "Remota" + +msgctxt "#60632" +msgid " Server Name" +msgstr " Nombre Servidor" + +msgctxt "#60633" +msgid " Server port" +msgstr " Puerto Servidor" + +msgctxt "#60634" +msgid "Automatically mark as watched" +msgstr "Marcar automáticamente como visto" + +msgctxt "#60635" +msgid " Video viewing time" +msgstr " Tiempo necesario del video" + +msgctxt "#60636" +msgid "0 seg" +msgstr "0 seg" + +msgctxt "#60637" +msgid "Synchronizing with Trakt" +msgstr "Sincronización con Trakt" + +msgctxt "#60638" +msgid " After mark as watched the episode" +msgstr " Tras marcar como visto el episodio" + +msgctxt "#60639" +msgid " Show notification" +msgstr " Mostrar notificación" + +msgctxt "#60640" +msgid " On adding a TV series to the video library" +msgstr " Al añadir una serie a la videoteca" + +msgctxt "#60641" +msgid " Wait until the tv series is added" +msgstr " Esperar a que se añada la serie a la videoteca" + +msgctxt "#60642" +msgid "Show option \"All Seasons\"." +msgstr "Mostrar la opción \"Todas las temporadas\"" + +msgctxt "#60643" +msgid "Do not combine the seasons of the series"" +msgstr "No apilar temporadas de series"" + +msgctxt "#60644" +msgid "Only if there is one season" +msgstr "Sólo si hay una temporada" + +msgctxt "#60645" +msgid "Show channel selection box" +msgstr "Mostrar cuadro de selección de canales" + +msgctxt "#60646" +msgid "Create directories on your system using" +msgstr "Crear directorios en el sistema usando" + +msgctxt "#60647" +msgid "Localized title" +msgstr "Título localizado" + +msgctxt "#60648" +msgid "Never" +msgstr "Nunca" + +msgctxt "#60649" +msgid "Original title" +msgstr "Título original" + +msgctxt "#60650" +msgid "When you add content, you get information from:" +msgstr "Al añadir contenido, obtener información de:" + +msgctxt "#60651" +msgid " Movies:" +msgstr " Peliculas:" + +msgctxt "#60652" +msgid " TV Series:" +msgstr " Series:" + +msgctxt "#60653" +msgid " If there are no results also search in English" +msgstr " Si no hay resultados buscar también en Inglés" + +msgctxt "#60654" +msgid "Include in blacklist" +msgstr "Incluir en lista negra" + +msgctxt "#60655" +msgid "Include in Favorites List" +msgstr "Incluir en lista de favoritos" + +msgctxt "#60656" +msgid "Simultaneous search (multiprocessing)" +msgstr "Buscar de manera concurrente (multiprocesos)" + +msgctxt "#60657" +msgid "Show Results:" +msgstr "Mostrar resultados:" + +msgctxt "#60658" +msgid "Grouped by content" +msgstr "Agrupados por contenido" + +msgctxt "#60659" +msgid "Grouped by channel" +msgstr "Agrupados por canales" + +msgctxt "#60660" +msgid "Without group" +msgstr "Sin Agrupar" + +msgctxt "#60661" +msgid "News" +msgstr "Novedades" + +msgctxt "#60662" +msgid "code cleaning" +msgstr "limpieza código" + +msgctxt "#60663" +msgid "Add the progress window" +msgstr "Añadir cuadro de progreso" + +msgctxt "#60664" +msgid "Eliminated unnecessary code." +msgstr "Eliminado código innecesario." + +msgctxt "#60665" +msgid "Possibility to include other channels, through the configuration" +msgstr "Posibilidad de incluir otros canales, mediante configuracion" + +msgctxt "#60666" +msgid "Color Profile" +msgstr "Perfil de color" + +msgctxt "#60667" +msgid "Cold" +msgstr "Frio" + +msgctxt "#60668" +msgid "Hot" +msgstr "Calido" + +msgctxt "#60669" +msgid "Lilac" +msgstr "Lila" + +msgctxt "#60670" +msgid "Pastel" +msgstr "Pastel" + +msgctxt "#60671" +msgid "Vivid" +msgstr "Vivos" + +msgctxt "#60672" +msgid "Global Search" +msgstr "Buscador global" + +msgctxt "#60673" +msgid "MultiThread Search" +msgstr "Buscador MultiThread" + +msgctxt "#60674" +msgid "Show Results:" +msgstr "Mostrar resultados:" + +msgctxt "#60675" +msgid "Per channel" +msgstr "Por canales" + +msgctxt "#60676" +msgid "All Together" +msgstr "Todo junto" + +msgctxt "#60677" +msgid "Saved Searches:" +msgstr "Busquedas guardadas:" + +msgctxt "#60678" +msgid "Remember the latest search" +msgstr "Recordar última búsqueda" + +msgctxt "#60679" +msgid "Novelties in %s" +msgstr "Novedades en %s" + +msgctxt "#60680" +msgid "documentaries" +msgstr "documentales" + +msgctxt "#60681" +msgid "movies" +msgstr "peliculas" + +msgctxt "#60682" +msgid "tv series" +msgstr "series" + +msgctxt "#60683" +msgid "anime" +msgstr "anime" + +msgctxt "#70000" +msgid "Options" +msgstr "Opciones" + +msgctxt "#70001" +msgid "OK" +msgstr "OK" + +msgctxt "#70002" +msgid "Cancel" +msgstr "Cancelar" + +msgctxt "#70003" +msgid "Default" +msgstr "Por defecto" + +msgctxt "#70004" +msgid "Loading..." +msgstr "Cargando..." + +msgctxt "#70005" +msgid "Previous" +msgstr "Anterior" + +msgctxt "#70006" +msgid "Next" +msgstr "Siguiente" + +msgctxt "#70007" +msgid "Accept" +msgstr "Aceptar" + +msgctxt "#70008" +msgid "Reload" +msgstr "Recargar" + +msgctxt "#70009" +msgid "Classic Menu" +msgstr "Menu Clasico" + +msgctxt "#70010" +msgid "Where To Search" +msgstr "Donde buscar" + +msgctxt "#70011" +msgid "Search for actor" +msgstr "Buscar por actor" + +msgctxt "#70012" +msgid "Beginning" +msgstr "Inìcio" + +msgctxt "#70013" +msgid "Terror" +msgstr "Terror" + +msgctxt "#70014" +msgid "Castellan" +msgstr "Castellano" + +msgctxt "#70015" +msgid "Torrents" +msgstr "Torrents" + +msgctxt "#70016" +msgid "Active channels" +msgstr "Canales activos" + +msgctxt "#70017" +msgid "TV Series" +msgstr "Series" + +msgctxt "#70018" +msgid "Children" +msgstr "Infantiles" + +msgctxt "#70019" +msgid "Documentary" +msgstr "Documentales" + +msgctxt "#70020" +msgid "[COLOR yellow]Search similar[/COLOR]" +msgstr "[COLOR yellow]Cerca simili[/COLOR]" + +msgctxt "#70021" +msgid "Search in TMDB" +msgstr "Búsqueda en TMDB" + +msgctxt "#70022" +msgid " - Movies" +msgstr " - Películas" + +msgctxt "#70023" +msgid " - TV Shows" +msgstr " - Series" + +msgctxt "#70024" +msgid "Search in Filmaffinity" +msgstr "Búsqueda en Filmaffinity" + +msgctxt "#70025" +msgid "Search in IMDB" +msgstr "Búsqueda en IMDB" + +msgctxt "#70026" +msgid "MyAnimeList" +msgstr "MyAnimeList" + +msgctxt "#70027" +msgid "Search engine settings" +msgstr "Ajustes motores de búsqueda" + +msgctxt "#70028" +msgid "Most Popular" +msgstr "Más Populares" + +msgctxt "#70029" +msgid "Top rated" +msgstr "Más Valoradas" + +msgctxt "#70030" +msgid "On The Bill" +msgstr "En Cartelera" + +msgctxt "#70031" +msgid "Next" +msgstr "En Emisión" + +msgctxt "#70032" +msgid "Genres" +msgstr "Géneros" + +msgctxt "#70033" +msgid "Actors / Actresses by popularity" +msgstr "Actores/Actrices por popularidad" + +msgctxt "#70034" +msgid "Coming Soon" +msgstr "Próximamente" + +msgctxt "#70035" +msgid "Search %s" +msgstr "Buscar %s" + +msgctxt "#70036" +msgid "Search actor/actress" +msgstr "Buscar actor/actriz" + +msgctxt "#70037" +msgid "Search director, writer..." +msgstr "Buscar director, guionista..." + +msgctxt "#70038" +msgid "Custom Filter" +msgstr "Filtro Personalizado" + +msgctxt "#70039" +msgid "Keyword filter" +msgstr "Filtro por palabra clave" + +msgctxt "#70040" +msgid "Top Filmaffinity" +msgstr "Top Filmaffinity" + +msgctxt "#70041" +msgid "Modern TV Shows" +msgstr "Series de actualidad" + +msgctxt "#70042" +msgid "Year" +msgstr "Año" + +msgctxt "#70043" +msgid "Coming Out" +msgstr "Próximos Estrenos" + +msgctxt "#70044" +msgid "Sagas and Collections" +msgstr "Sagas y Colecciones" + +msgctxt "#70045" +msgid "Movies/TV Shows/Documentaries by Themes" +msgstr "Películas/Series/Documentales por Temas"" + +msgctxt "#70046" +msgid "Search Movies/TV Shows" +msgstr "Buscar Películas/Series" + +msgctxt "#70047" +msgid " Search by director" +msgstr " Buscar por director" + +msgctxt "#70048" +msgid " My Account" +msgstr " Mi Cuenta" + +msgctxt "#70049" +msgid " Most Popular" +msgstr " Más Populares" + +msgctxt "#70050" +msgid " Recommended Now" +msgstr " Viéndose Ahora" + +msgctxt "#70051" +msgid " Most Anticipated " +msgstr " Más Esperadas" + +msgctxt "#70052" +msgid " Custom recommendations" +msgstr " Recomendaciones personalizadas" + +msgctxt "#70053" +msgid " Most Viewed" +msgstr " Más Vistas" + +msgctxt "#70054" +msgid "Link your trakt account" +msgstr "Vincula tu cuenta trakt" + +msgctxt "#70055" +msgid "Watchlists" +msgstr "Watchlists" + +msgctxt "#70056" +msgid "Viewed " +msgstr "Vistas" + +msgctxt "#70057" +msgid "My lists" +msgstr "Mis listas" + +msgctxt "#70058" +msgid "Top Series" +msgstr "Top Serie TV" + +msgctxt "#70059" +msgid "Top Movies" +msgstr "Top Películas" + +msgctxt "#70060" +msgid "Most Anticipated" +msgstr "Más Esperados" + +msgctxt "#70061" +msgid "Top Anime" +msgstr "Top Ovas" + +msgctxt "#70062" +msgid "Anime by Seasons" +msgstr "Anime por Temporadas" + +msgctxt "#70063" +msgid "Anime by Genres" +msgstr "Anime por Géneros" + +msgctxt "#70064" +msgid "Search Tv Shows/Movies/Anime" +msgstr "Buscar Series/Películas/Ovas" + +msgctxt "#70065" +msgid ">> Next Page" +msgstr ">> Página siguiente"" + +msgctxt "#70066" +msgid " Search title in spanish: %s" +msgstr " Buscar por su título en español: %s" + +msgctxt "#70067" +msgid "Info Seasons [%s]" +msgstr "Info de temporadas [%s]" + +msgctxt "#70068" +msgid "In my Collection" +msgstr "En mi Colección" + +msgctxt "#70069" +msgid "Search %s in alfa: %s" +msgstr "Buscar %s en alfa: %s" + +msgctxt "#70070" +msgid " Search original title: %s" +msgstr " Buscar por su nombre original: %s" + +msgctxt "#70071" +msgid "Cast" +msgstr "Ver Reparto" + +msgctxt "#70072" +msgid " Most Viewed" +msgstr " Más Vistas" + +msgctxt "#70073" +msgid "Most Anticipated" +msgstr "Más Esperados" + +msgctxt "#70074" +msgid "Viewed" +msgstr "Vistas" + +msgctxt "#70075" +msgid "Most Anticipated" +msgstr " Más Esperadas" + +msgctxt "#70076" +msgid "Top rated" +msgstr "Más Valoradas" + +msgctxt "#70077" +msgid " Most Viewed" +msgstr " Más Vistas" + +msgctxt "#70078" +msgid "Show only links of " +msgstr "Mostrar solo los enlaces de " + +msgctxt "#70079" +msgid "Remove only links of " +msgstr "Eliminar solo los enlaces de " + +msgctxt "#70080" +msgid "Do you want Alfa to auto-configure Kodi's video library?" +msgstr "¿Desea que Alfa auto-configure la videoteca de Kodi?" + +msgctxt "#70081" +msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." +msgstr "Si pulsa 'No' podra hacerlo desde 'Configuración > Preferencia > Rutas'." + +msgctxt "#70082" +msgid "Global Search" +msgstr "Buscador global" + +msgctxt "#70083" +msgid "Show all links" +msgstr "Mostrar todos los enlaces" + +msgctxt "#70084" +msgid "Delete movie" +msgstr "Eliminar película" + +msgctxt "#70085" +msgid "Delete TV Show" +msgstr "Eliminar serie" + +msgctxt "#70086" +msgid "Remove only links of %s" +msgstr "Eliminar solo los enlaces de %s" + +msgctxt "#70087" +msgid "Deleted %s links from canal %s" +msgstr "Eliminados %s enlaces del canal %s" + +msgctxt "#70088" +msgid "Are you sure you want to delete '%s' from videolibrary ?" +msgstr "¿Realmente desea eliminar '%s' de su videoteca?" + +msgctxt "#70089" +msgid "Show only links of %s" +msgstr "Mostrar solo los enlaces de %s " + +msgctxt "#70090" +msgid " Exclude all streams with specific words" +msgstr " Excluir los streams que contienen etiquetas específicas" + +msgctxt "#70091" +msgid " Words" +msgstr " Etiquetas" + +msgctxt "#70092" +msgid "Add to videolibrary" +msgstr "Añadir a la videoteca" + +msgctxt "#70093" +msgid "The Movie Database" +msgstr "The Movie Database" + +msgctxt "#70094" +msgid "Select scraper for movies" +msgstr "Seleccione el scraper para las películas" + +msgctxt "#70095" +msgid "Universal Movie Scraper not present.\nInstall it now?" +msgstr "Universal Movie Scraper\nNo se ha encontrado el Scraper de películas de TheMovieDB.\n¿Desea instalarlo ahora?" + +msgctxt "#70096" +msgid "Universal Movie Scraper" +msgstr "Universal Movie Scraper" + +msgctxt "#70097" +msgid "Universal Movie Scraper not installed." +msgstr "Universal Movie Scraper no instalado." + +msgctxt "#70098" +msgid "The TVDB" +msgstr "The TVDB" + +msgctxt "#70099" +msgid "The TVDB not installed." +msgstr "The TVDB no instalado." + +msgctxt "#70100" +msgid "The Movie Database not present.\nInstall it now?" +msgstr "The Movie Database\nNo se ha encontrado el Scraper de series de TheMovieDB.\n¿Desea instalarlo ahora?" + +msgctxt "#70101" +msgid "Error fixing videolibrarypath in BD" +msgstr "Error al fijar videolibrarypath en BD" + +msgctxt "#70102" +msgid "Videolibrary %s not configured" +msgstr "Videoteca %s no configurada" + +msgctxt "#70103" +msgid "Videolibrary %s configured" +msgstr "Videoteca %s configurada" + +msgctxt "#70104" +msgid "Congratulations, the Kodi video library has been configured correctly." +msgstr "Felicidades la videoteca de Kodi ha sido configurada correctamente." + +msgctxt "#70105" +msgid "Do you want Alfa to automatically configure the Kodi library?You will be asked to set up scrapers for movies and series." +msgstr "¿Desea que Alfa auto-configure la videoteca de Kodi?Se le pedirá que configure los scrapers para las películas y las series." + +msgctxt "#70106" +msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." +msgstr "Si pulsa 'No' podra hacerlo desde 'Configuración > Preferencia > Rutas'." + +msgctxt "#70107" +msgid "Select scraper for Tv Shows" +msgstr "Seleccione el scraper para las series" + +msgctxt "#70108" +msgid "Icons Set" +msgstr "Set de iconos" + +msgctxt "#70109" +msgid "Sync with Trakt.tv (You must have an account)" +msgstr "Sincronizar con Trakt.tv (Debes tener una cuenta)" + +msgctxt "#70110" +msgid "Priority Method" +msgstr "Método prioritario" + +msgctxt "#70111" +msgid "Stop looking when you find an option" +msgstr "Dejar de buscar cuando encuentre una opción" + +msgctxt "#70112" +msgid "Hide payment servers without an account" +msgstr "Ocultar servidores de pago sin cuenta" + +msgctxt "#70113" +msgid "Password (default 0000)" +msgstr "Contraseña (por defecto 0000):" + +msgctxt "#70114" +msgid "Only until Kodi restarts" +msgstr "Solo hasta que se reinicie Kodi" + +msgctxt "#70115" +msgid "Request password to open adult channels" +msgstr "Solicitar contraseña para abrir canales de adultos" + +msgctxt "#70116" +msgid "New password:" +msgstr "Nueva contraseña:" + +msgctxt "#70117" +msgid "Confirm New password:" +msgstr "Confirmar nueva contraseña:" + +msgctxt "#70118" +msgid "Folder name for 'Series'" +msgstr "Nombre de carpeta para 'Series'" + +msgctxt "#70119" +msgid "Folder name for 'Movies'" +msgstr "Nombre de carpeta para 'Peliculas'" + +msgctxt "#70120" +msgid "Autoconfigure XBMC / Kodi library for Alfa content" +msgstr "Autoconfigurar videoteca de XBMC/Kodi para contenido de Alfa" + +msgctxt "#70121" +msgid "Activate Home Page" +msgstr "Activar pagina de inicio" + +msgctxt "#70122" +msgid "Custom (select from a channel)" +msgstr "Personalizado (seleccionar desde un canal)" + +msgctxt "#70123" +msgid "Show Recent" +msgstr "Mostrar Novedades" + +msgctxt "#70124" +msgid "Category" +msgstr "Categoria" + +msgctxt "#70125" +msgid "Movie|Tv Shows|Anime|Children|Documentary|Horror|Castellan|Latin|Torrent" +msgstr "Peliculas|Series|Anime|Infantiles|Documentales|Terror|Castellano|Latino|Torrent" + +msgctxt "#70126" +msgid "Visual Options" +msgstr "Opciones Visuales" + +msgctxt "#70127" +msgid "Anime" +msgstr "Anime" + +msgctxt "#70128" +msgid "Infoplus visual option" +msgstr "Opción visual Infoplus" + +msgctxt "#70129" +msgid "Without animation" +msgstr "Sin animación" + +msgctxt "#70130" +msgid "With animation" +msgstr "Con animación" + +msgctxt "#70131" +msgid "Thumbnail for videos" +msgstr "Thumbnail para videos" + +msgctxt "#70132" +msgid "Poster" +msgstr "Poster" + +msgctxt "#70133" +msgid "Server logo" +msgstr "Logo del servidor" + +msgctxt "#70134" +msgid "Intelligent Titles" +msgstr "Titulos Inteligentes" + +msgctxt "#70135" +msgid "Custom Colours" +msgstr "Colores Personalizados" + +msgctxt "#70136" +msgid "Tv Show" +msgstr "Serie" + +msgctxt "#70137" +msgid "Movie" +msgstr "Pelicula" + +msgctxt "#70138" +msgid "Low Rating" +msgstr "Valoracion Baja" + +msgctxt "#70139" +msgid "Average Rating" +msgstr "Valoracion Media" + +msgctxt "#70140" +msgid "High Rating" +msgstr "Valoracion Alta" + +msgctxt "#70141" +msgid "Quality" +msgstr "Calidad" + +msgctxt "#70142" +msgid "VOSE (Original Subtitled Spanish Version)" +msgstr "VOSE (Versión Original Subtitulado Español)" + +msgctxt "#70143" +msgid "VOS (Original Subtitled Version)" +msgstr "VOS (Versión Original Subtitulado)" + +msgctxt "#70144" +msgid "VO (Original Version)" +msgstr "VO (Versión Original)" + +msgctxt "#70145" +msgid "Servers" +msgstr "Servidores" + +msgctxt "#70146" +msgid "Add to videolibrary" +msgstr "Añadir a Videoteca" + +msgctxt "#70147" +msgid "Videolibrary (Update series)" +msgstr "Videoteca (Actualizar serie)" + +msgctxt "#70148" +msgid "Videolibrary (Do not update series)" +msgstr "Videoteca (No actualizar serie)" + +msgctxt "#70149" +msgid "Others" +msgstr "Otros" + +msgctxt "#70150" +msgid "Movie/series info in contextual menu" +msgstr "Info de películas/series en menú contextual" + +msgctxt "#70151" +msgid "Show Infoplus option:" +msgstr "Mostrar opción Infoplus:" + +msgctxt "#70152" +msgid "Show ExtendedInfo option (External addon required):" +msgstr "Mostrar opción ExtendedInfo (Necesario addon externo):" + +msgctxt "#70153" +msgid "Buttons/Access keys (Changes require Kodi restart)" +msgstr "Botones/Teclas de acceso (Cambios requieren reiniciar Kodi)" + +msgctxt "#70154" +msgid "TheMovieDB (obtains data from movies or series)" +msgstr "TheMovieDB (obtiene datos de las películas o series)" + +msgctxt "#70155" +msgid "Simultaneous searches (may cause instability)" +msgstr "Búsquedas simultáneas (puede causar inestabilidad)" + +msgctxt "#70156" +msgid "Search extended information (actor's data) Increase search time" +msgstr "Buscar información extendida (datos de actores) Aumenta el tiempo de búsqueda" + +msgctxt "#70157" +msgid "Use cache (improves recurring searches)" +msgstr "Usar caché (mejora las búsquedas recurrentes)" + +msgctxt "#70158" +msgid "every 1 day" +msgstr "cada 1 día" + +msgctxt "#70159" +msgid "every 7 days" +msgstr "cada 7 días" + +msgctxt "#70160" +msgid "every 15 days" +msgstr "cada 15 días" + +msgctxt "#70161" +msgid "every 30 days" +msgstr "cada 30 días" + +msgctxt "#70162" +msgid "Renew cache?" +msgstr "¿Renovar caché?" + +msgctxt "#70163" +msgid "Press to 'Clear cache' saved" +msgstr "Pulse para 'Borrar caché' guardada" + +msgctxt "#70164" +msgid "Free First|Premium First|Debriders First" +msgstr "Free primero|Premium primero|Debriders primero" + +msgctxt "#70167" +msgid "Titles Options" +msgstr "Opciones para Titulos" + +msgctxt "#70168" +msgid "General" +msgstr "Generale" + +msgctxt "#70169" +msgid "Servers use" +msgstr "Uso de servidores" + +msgctxt "#70170" +msgid "No" +msgstr "No" + +msgctxt "#70171" +msgid "Torrent" +msgstr "Torrent" + +msgctxt "#70172" +msgid " Plan B (If favourites fail try other links)" +msgstr " Plan B (Si fallan los favoritos prueba otros enlaces)" + +msgctxt "#70173" +msgid "No working links" +msgstr "No hubo enlaces funcionales" + +msgctxt "#70174" +msgid "Server and Quality" +msgstr "Servidor y Calidad" + +msgctxt "#70175" +msgid "Quality and Server" +msgstr "Calidad y Servidor" + +msgctxt "#70176" +msgid "Wait" +msgstr "Espera" + +msgctxt "#70177" +msgid "seconds for the video to start ..." +msgstr "segundos para que comience el vídeo..." + +msgctxt "#70178" +msgid "Trying with: %s" +msgstr "Probando con: %s" + +msgctxt "#70179" +msgid "Getting list of available servers ..." +msgstr "Obteniendo lista de servidores disponibles..." + +msgctxt "#70180" +msgid "Connecting with %s..." +msgstr "Conectando con %s..." + +msgctxt "#70181" +msgid "Available servers: %s" +msgstr "Servidores disponibles: %s" + +msgctxt "#70182" +msgid "Identifying servers ..." +msgstr "Identificando servidores..." + +msgctxt "#70183" +msgid "Getting list of available servers" +msgstr "Obteniendo lista de servidores disponibles" + +msgctxt "#70184" +msgid "Getting list of available servers:" +msgstr "Obteniendo lista de servidores disponibles:" + +msgctxt "#70185" +msgid " chapters of: " +msgstr " capitulos de: " + +msgctxt "#70186" +msgid "Getting episodes..." +msgstr "Obteniendo episodios..." + +msgctxt "#70187" +msgid "connecting with %s..." +msgstr "conectando con %s..." + +msgctxt "#70188" +msgid "Obtaining data from the series" +msgstr "Obteniendo datos de la serie" + +msgctxt "#70189" +msgid "Start the download now?" +msgstr "¿Iniciar la descarga ahora?" + +msgctxt "#70190" +msgid "Add chapters..." +msgstr "Añadiendo capitulos..." + +msgctxt "#70191" +msgid "Obtaining data from the movie" +msgstr "Obteniendo datos de la pelicula" + +msgctxt "#70192" +msgid "Select server" +msgstr "Selecciona el servidor" + +msgctxt "#70193" +msgid "Open torrent with..." +msgstr "Abrir torrent con..." + +msgctxt "#70194" +msgid "alfa-torrent" +msgstr "alfa-torrent" + +msgctxt "#70195" +msgid "Alfa - Torrent" +msgstr "Alfa - Torrent" + +msgctxt "#70196" +msgid "Beginning..." +msgstr "Iniciando..." + +msgctxt "#70197" +msgid "Automatically stopping at: %ss" +msgstr "Deteniendo automaticamente en: %ss" + +msgctxt "#70198" +msgid "Do you want to start playback?" +msgstr "¿Deseas iniciar la reproduccion?" + +msgctxt "#70199" +msgid "Do you want to cancel the process?" +msgstr "¿Deseas cancelar el proceso?" + +msgctxt "#70200" +msgid "Finishing and deleting data" +msgstr "Terminando y eliminando datos" + +msgctxt "#70201" +msgid "Mass Testing Tools" +msgstr "Herramientas de Testeo masivo" + +msgctxt "#70202" +msgid "- Test channels ..." +msgstr "- Testear canales ..." + +msgctxt "#70203" +msgid "- Test servers ..." +msgstr "- Testear servidores ..." + +msgctxt "#70204" +msgid "- Test recent!" +msgstr "- Testear novedades!" + +msgctxt "#70205" +msgid "- Upload tests to web!" +msgstr "- Upload tests to web!" + +msgctxt "#70206" +msgid "Link found in %s" +msgstr "Enlace encontrado en %s" \ No newline at end of file From ab1d4192f27327812fcd79e2b1ac00e9d42d8928 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 16 Jun 2018 14:28:40 +0200 Subject: [PATCH 04/66] Add files via upload --- .../language/Spanish (Mexico)/strings.po | 3360 ++++++++++++++++- 1 file changed, 3311 insertions(+), 49 deletions(-) diff --git a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po index fb8cbf4d..17b7b58c 100644 --- a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po @@ -6,16 +6,20 @@ msgstr "" "Project-Id-Version: KODI Main\n" "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Kodi Translation Team\n" -"Language-Team: Spanish (Spanish) (http://www.transifex.com/projects/p/kodi-main/language/en_GB/)\n" +"PO-Revision-Date: 2018-03-26 03:02+0200\n" +"Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: es_ES\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.0.4\n" +"Last-Translator: MrTruth\n" +"Last-Translator: Angedam\n" +"Language: es_ES\n" -# empty string with id 30000 +msgctxt "#20000" +msgid "Alfa" +msgstr "Alfa" msgctxt "#30001" msgid "Check for updates:" @@ -23,16 +27,12 @@ msgstr "Comprobar actualizaciones:" msgctxt "#30002" msgid "Enable adult mode:" -msgstr "Mostrar canales para adultos" +msgstr "Activar canales para adultos:" msgctxt "#30003" msgid "Enable debug logging:" msgstr "Generar log detallado:" -msgctxt "#30043" -msgid "Force view mode:" -msgstr "Forzar el modo de vista:" - msgctxt "#30004" msgid "Automatic update channels:" msgstr "Actualizar automáticamente canales:" @@ -53,8 +53,6 @@ msgctxt "#30008" msgid "Watch in high quality" msgstr "Ver en calidad alta" -# empty string with id 30009 - msgctxt "#30010" msgid "Channel icons view:" msgstr "Logos de canales:" @@ -67,22 +65,14 @@ msgctxt "#30012" msgid "Banner (horizontal)" msgstr "Banner (horizontal)" -msgctxt "#30200" -msgid "Square" -msgstr "Cuadrado" - -# empty string with id 30013 - msgctxt "#30014" msgid "Username:" -msgstr "Usuario:" +msgstr "Username:" msgctxt "#30015" msgid "Password:" msgstr "Password:" -# empty string with id 30016 - msgctxt "#30017" msgid "Download path:" msgstr "Directorio de descargas:" @@ -91,22 +81,18 @@ msgctxt "#30018" msgid "Download list path:" msgstr "Directorio de lista descargas:" -msgctxt "#30067" -msgid "Videolibrary path:" -msgstr "Directorio de la videoteca:" - msgctxt "#30019" msgid "Filter channels by language:" -msgstr "Filtrar canales por idioma:" +msgstr "Filter channels by language:" + +msgctxt "#30043" +msgid "Force view mode:" +msgstr "Forzar el modo de vista:" msgctxt "#30044" msgid "Play mode:" msgstr "Modo de reproducción:" -msgctxt "#30068" -msgid "Filter by servers:" -msgstr "Filtrar por servidores:" - msgctxt "#30050" msgid "Server connection error" msgstr "No se puede conectar con el servidor" @@ -131,8 +117,16 @@ msgctxt "#30065" msgid "Unsopported Server" msgstr "Servidor no soportado" +msgctxt "#30067" +msgid "Videolibrary path:" +msgstr "Directorio de la videoteca:" + +msgctxt "#30068" +msgid "Filter by servers:" +msgstr "Filtrar por servidores:" + msgctxt "#30100" -msgid "Configuration" +msgid "Settings" msgstr "Configuración" msgctxt "#30101" @@ -167,14 +161,6 @@ msgctxt "#30112" msgid "Enter title to search" msgstr "Introduce el título a buscar" -msgctxt "#30135" -msgid "added to the videolibrary" -msgstr "se ha añadido a la videoteca" - -msgctxt "#30130" -msgid "Recent" -msgstr "Novedades" - msgctxt "#30118" msgid "Channels" msgstr "Canales" @@ -203,22 +189,30 @@ msgctxt "#30125" msgid "Documentaries" msgstr "Documentales" -msgctxt "#30136" -msgid "Original version" -msgstr "Versión original" - msgctxt "#30126" msgid "Adult" -msgstr "" +msgstr "Adultos" -msgctxt "#30137" -msgid "Direct" -msgstr "Directos" +msgctxt "#30130" +msgid "Recent" +msgstr "Novedades" msgctxt "#30131" msgid "Videolibrary" msgstr "Videoteca" +msgctxt "#30135" +msgid "added to the videolibrary" +msgstr "added to the videolibrary" + +msgctxt "#30136" +msgid "Original version" +msgstr "Versión original" + +msgctxt "#30137" +msgid "Direct" +msgstr "Directos" + msgctxt "#30151" msgid "Watch the video" msgstr "Ver el vídeo" @@ -251,6 +245,10 @@ msgctxt "#30164" msgid "Delete this file" msgstr "Borrar este fichero" +msgctxt "#30200" +msgid "Square" +msgstr "Cuadrado" + msgctxt "#30300" msgid "Faster context menus" msgstr "Menús contextuales rápidos (puede causar que algunas opciones no funcionen)" @@ -259,10 +257,3274 @@ msgctxt "#30501" msgid "Paths" msgstr "Rutas" +msgctxt "#30974" +msgid "Search in Channels" +msgstr "Buscar en los canales" + +msgctxt "#30975" +msgid "Movie Info" +msgstr "Información de la película" + +msgctxt "#30976" +msgid "TVShows - Airing Today" +msgstr "TVShows - Airing Today" + +msgctxt "#30977" +msgid "Last Episodes - On-Air" +msgstr "Últimos episodios - en el aire" + +msgctxt "#30978" +msgid "New TVShows" +msgstr "Nuevas Series" + +msgctxt "#30979" +msgid "Character Info" +msgstr "Información de personajes" + +msgctxt "#30980" +msgid "Search by Title" +msgstr "Búsqueda por Titulo" + +msgctxt "#30981" +msgid "Search by Person" +msgstr "Búsqueda por Persona" + +msgctxt "#30982" +msgid "Search by Company" +msgstr "Búsqueda por Company" + +msgctxt "#30983" +msgid "Now Playing" +msgstr "Ahora Playing" + +msgctxt "#30984" +msgid "Popular" +msgstr "Populares" + +msgctxt "#30985" +msgid "Top Rated" +msgstr "Top Rated" + +msgctxt "#30986" +msgid "Search by Collection" +msgstr "Búsqueda por Colección" + +msgctxt "#30987" +msgid "Genre" +msgstr "Generos" + +msgctxt "#30988" +msgid "Search by Year" +msgstr "Búsqueda por año" + +msgctxt "#30989" +msgid "Search Similar Movies" +msgstr "Buscar películas similares" + +msgctxt "#30990" +msgid "Search TV show" +msgstr "Buscar series" + +msgctxt "#30991" +msgid "Library" +msgstr "Biblioteca" + +msgctxt "#30992" +msgid "Next Page" +msgstr "Página Siguiente" + +msgctxt "#30993" +msgid "Looking for %s..." +msgstr "Buscando %s..." + +msgctxt "#30994" +msgid "Searching in %s..." +msgstr "Buscando en %s..." + +msgctxt "#30995" +msgid "%d found so far: %s" +msgstr "%d encontrado hasta ahora: %s" + +msgctxt "#30996" +msgid "Most Voted" +msgstr "Los más votados" + +msgctxt "#30997" +msgid "Academy Awards" +msgstr "Academy Awards" + msgctxt "#30998" msgid "Shortcut" -msgstr "Acceso directo" +msgstr "Shortcut" msgctxt "#30999" msgid "Add key to open Shortcut" -msgstr "Añadir tecla para acceso directo" +msgstr "Agregar clave para abrir el atajo" + +msgctxt "#50000" +msgid "Sagas" +msgstr "Sagas" + +msgctxt "#50001" +msgid "Today on TV" +msgstr "Hoy en TV" + +msgctxt "#50002" +msgid "Latest News" +msgstr "Últimas Novedades" + +msgctxt "#50003" +msgid "Loading" +msgstr "Cargando" + +msgctxt "#50004" +msgid "Path: " +msgstr "Ruta: " + +msgctxt "#59970" +msgid "Synchronization with Trakt started" +msgstr "Sincronizacion con Trakt iniciada" + +msgctxt "#59971" +msgid "Alfa Auto-configuration" +msgstr "Alfa Auto-configuración" + +msgctxt "#59972" +msgid "Search for: '%s' | Found: %d vídeos | Time: %2.f seconds" +msgstr "Buscando: '%s' | Encontrado: %d vídeos | Tiempo: %2.f segundos" + +msgctxt "#59973" +msgid "Search Cancelled" +msgstr "Búsqueda cancelada" + +msgctxt "#59974" +msgid "Choose categories" +msgstr "Elegir categorías" + +msgctxt "#59975" +msgid "Subtitles" +msgstr "VOS" + +msgctxt "#59976" +msgid "Latin" +msgstr "Latino" + +msgctxt "#59977" +msgid "4k" +msgstr "4k" + +msgctxt "#59978" +msgid "horror" +msgstr "terror" + +msgctxt "#59979" +msgid "kids" +msgstr "infantiles" + +msgctxt "#59980" +msgid "Castilian" +msgstr "castellano" + +msgctxt "#59981" +msgid "latin" +msgstr "latino" + +msgctxt "#59982" +msgid "torrent" +msgstr "torrent" + +msgctxt "#59983" +msgid "" +msgstr "" + +msgctxt "#59984" +msgid "An error has occurred in alfa, \nCheck log for more details." +msgstr "Se ha producido un error en alfa,\nComprueba el log para ver mas detalles del error." + +msgctxt "#59985" +msgid "Error in the channel" +msgstr "Error en el canal" + +msgctxt "#59986" +msgid "Error loading the server: %s\n" +msgstr "Error al cargar el servidor: %s\n" + +msgctxt "#59987" +msgid "Start downloading now?" +msgstr "¿Iniciar la descargaahora?" + +msgctxt "#59988" +msgid "Saving configuration..." +msgstr "Guardando configuración..." + +msgctxt "#59989" +msgid "Please wait" +msgstr "Espere un momento por favor." + +msgctxt "#59990" +msgid "Channels included in the search" +msgstr "Canales incluidos en la búsqueda" + +msgctxt "#59991" +msgid "All" +msgstr "Todos" + +msgctxt "#59992" +msgid "None" +msgstr "Ninguno" + +msgctxt "#59993" +msgid "Configuration -- Search" +msgstr "configuración -- Buscador" + +msgctxt "#59994" +msgid "Choose channels to include in your search" +msgstr "Elegir canales incluidos en la búsqueda" + +msgctxt "#59995" +msgid "Saved Searches" +msgstr "Búsquedasguardadas" + +msgctxt "#59996" +msgid "Delete saved searches" +msgstr "Borrar búsquedas guardadas" + +msgctxt "#59997" +msgid "Options" +msgstr "Opciones" + +msgctxt "#59998" +msgid "Search by categories (advanced search)" +msgstr "Buscar por categorias (búsqueda avanzada)" + +msgctxt "#59999" +msgid "Search for actor/actress" +msgstr "Buscar actor/actriz" + +msgctxt "#60000" +msgid "Filter server (Black List)" +msgstr "Filtrar servidores (Lista Negra)" + +msgctxt "#60001" +msgid "Filter server (Black List)\nNo connection available that meets the requirements of the Black list.\nTry again by changing the filter in 'Server Configuration" +msgstr "Filtrar servidores (Lista Negra)\nNo hay enlaces disponibles que cumplan los requisitos de su Lista Negra.\nPruebe de nuevo modificando el fíltro en 'Configuracíon Servidores"" + +msgctxt "#60003" +msgid "Connecting with %s" +msgstr "Conectando con %s" + +msgctxt "#60004" +msgid "No connector for the server %s" +msgstr "No existe conector para el servidor %s" + +msgctxt "#60005" +msgid "Connecting with %s" +msgstr "Conectando con %s" + +msgctxt "#60006" +msgid "An error has occurred in %s" +msgstr "Se ha producido un error en %s" + +msgctxt "#60007" +msgid "An error has occurred on %s" +msgstr "Se ha producido un error en %s" + +msgctxt "#60008" +msgid "Process completed" +msgstr "Proceso finalizado" + +msgctxt "#60009" +msgid "To watch a vide on %s you need
an account on: %s" +msgstr "Para ver un vídeo en %s necesitas
una cuenta en: %s" + +msgctxt "#60010" +msgid "All available links belongs to server on your black list.\nDo you want to show these links?" +msgstr "Filtrar servidores (Lista Negra)\nTodos los enlaces disponibles pertenecen a servidores incluidos en su Lista Negra.\n¿Desea mostrar estos enlaces?" + +msgctxt "#60011" +msgid "Cache deleted" +msgstr "cachè eliminada" + +msgctxt "#60012" +msgid "No video to play" +msgstr "No hay nada que reproducir" + +msgctxt "#60013" +msgid "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s.\nIf the web page is working correctly, please report the error on : https://alfa-addon.com/categories/alfa-addon.50/" +msgstr "La web de la que depende parece no estar disponible, puede volver a intentarlo,\nsi el problema persiste verifique mediante un navegador la web: %s. \nSi la web funciona correctamente informe el error en: www.alfa-addon.com" + +msgctxt "#60014" +msgid "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of alfa.\nTo have more details, see the log file." +msgstr "Puede deberse a un fallo de conexión, la web del canal\nha cambiado su estructura,o un error interno de alfa.\nPara saber más detalles, consulta el log." + +msgctxt "#60015" +msgid "Check the log for more details on the error." +msgstr "Comprueba el log para ver mas detalles del error." + +msgctxt "#60016" +msgid "Segna film come non visto" +msgstr "Marcar película como no vista" + +msgctxt "#60017" +msgid "Mark movie as not watched" +msgstr "Marcar película como vista" + +msgctxt "#60018" +msgid "Delete movie/channel" +msgstr "Eliminar película/canal" + +msgctxt "#60019" +msgid "Delete this movie" +msgstr "Eliminar esta película" + +msgctxt "#60020" +msgid "Mark tv series as not watched" +msgstr "Marcar serie como no vista" + +msgctxt "#60021" +msgid "Mark tv series as watched" +msgstr "Marcar serie como vista" + +msgctxt "#60022" +msgid "Automatically find new episodes: Disable" +msgstr Buscar automáticamente nuevos episodios: Desactivar" + +msgctxt "#60023" +msgid "Automatically find new episodes: Enable" +msgstr "Buscar automáticamente nuevos episodios: Activar" + +msgctxt "#60024" +msgid "Delete tv series/channel" +msgstr "Eliminar serie/canal" + +msgctxt "#60025" +msgid "Delete tv series" +msgstr "Eliminar esta serie" + +msgctxt "#60026" +msgid "Search for new episodes and update" +msgstr "Buscar nuevos episodios y actualizar videoteca" + +msgctxt "#60027" +msgid "Season %s" +msgstr "Temporada %s" + +msgctxt "#60028" +msgid "Segna stagione come non vista" +msgstr "Marcar temporada como no vista" + +msgctxt "#60029" +msgid "Mark season as not watched" +msgstr "Marcar temporada como vista" + +msgctxt "#60030" +msgid "*All the seasons" +msgstr "*Todas las temporadas" + +msgctxt "#60031" +msgid "Season %s Episode %s" +msgstr "Temporada %s Episodio %s" + +msgctxt "#60032" +msgid "Mark episode as not watched" +msgstr "Marcar episodio como no visto" + +msgctxt "#60033" +msgid "Mark episode as watched" +msgstr "Marcar episodio como visto" + +msgctxt "#60034" +msgid "Show only link %s" +msgstr "Mostrar solo los enlaces de %s" + +msgctxt "#60035" +msgid "Show all the links" +msgstr "Mostrar todos los enlaces" + +msgctxt "#60036" +msgid "Episode %s" +msgstr "Episodio %s" + +msgctxt "#60037" +msgid "Tv series update ..." +msgstr "Actualizando serie...." + +msgctxt "#60038" +msgid "An error has occurred on alfa" +msgstr "Si è verificato un errore su alfa" + +msgctxt "#60039" +msgid "Error on channel %s" +msgstr "Error en el canal %s" + +msgctxt "#60040" +msgid "Delete movie" +msgstr "Eliminar película" + +msgctxt "#60041" +msgid "Delete tv series" +msgstr "Eliminar serie" + +msgctxt "#60042" +msgid "Delete only the links of %s" +msgstr "Eliminar solo los enlaces de %s" + +msgctxt "#60043" +msgid "Delete %s links of channel %s" +msgstr "Eliminados %s enlaces del canal %s" + +msgctxt "#60044" +msgid "Do you want really to delete '%s' from videolibrary?" +msgstr "¿Realmente desea eliminar '%s' de su videoteca?" + +msgctxt "#60045" +msgid "Sync with Trakt started" +msgstr "Sincronizacion con Trakt iniciada" + +msgctxt "#60046" +msgid "TheMovieDB not present.\nInstall it now?" +msgstr "TheMovieDB\nNo se ha encontrado el Scraper de películas de TheMovieDB.\n¿Desea instalarlo ahora?" + +msgctxt "#60047" +msgid "The Movie Database is not installed." +msgstr "The Movie Database no instalado." + +msgctxt "#60048" +msgid "The TVDB not present.\nInstall it now?" +msgstr "The TVDB\nNo se ha encontrado el Scraper de series de The TVDB.\n¿Desea instalarlo ahora?" + +msgctxt "#60049" +msgid "The TVDB is not installed." +msgstr "The TVDB non è installato." + +msgctxt "#60050" +msgid "TheMovieDB not present.\nInstall it now?" +msgstr "TheMovieDB non presente.\nInstallare ora?" + +msgctxt "#60051" +msgid "The Movie Database is not installed." +msgstr "The Movie Database non è installato." + +msgctxt "#60052" +msgid "Error on setting LibraryPath in BD" +msgstr "Errore di impostazione LibraryPath in BD" + +msgctxt "#60053" +msgid "Do you want to configure this scraper in italian as default option for the movies ?" +msgstr "¿Desea configurar este Scraper en español como opción por defecto para películas?" + +msgctxt "#60054" +msgid "Do you want to configure this scraper in italian as default option for the tv series ?" +msgstr "¿Desea configurar este Scraper en español como opción por defecto para series?" + +msgctxt "#60055" +msgid "Error of provider configuration in BD." +msgstr "Error al configurar el scraper en la BD." + +msgctxt "#60060" +msgid "Alfa Auto-configuration" +msgstr "Alfa Auto-configuración" + +msgctxt "#60062" +msgid "Adding movie..." +msgstr "Añadiendo película..." + +msgctxt "#60063" +msgid "Error in adding movies to your video library..." +msgstr "Fallo al añadir..." + +msgctxt "#60064" +msgid "Adding Episodes to the Video Library..." +msgstr "Añadiendo episodios..." + +msgctxt "#60065" +msgid "Added Episode" +msgstr "Añadiendo episodio..." + +msgctxt "#60066" +msgid "ERROR, It has NOT been possible to add the video to the video library" +msgstr "ERROR, la pelicula NO se ha añadido a la videoteca" + +msgctxt "#60067" +msgid "ERROR, tv series has NOT been added to videolibrary\nIt has NOT been possible to add no episode" +msgstr "ERROR, la serie NO se ha añadido a la videoteca\nNo se ha podido obtener ningun episodio" + +msgctxt "#60068" +msgid "ERROR, tv series has NOT been added to videolibrary" +msgstr "ERROR, la serie NO se ha añadido a la videoteca" + +msgctxt "#60069" +msgid "ERRORE, tv series has NOT been added completely to videolibrary" +msgstr "ERROR, la serie NO se ha añadido completa a la videoteca" + +msgctxt "#60070" +msgid "tv series has been added to videolibrary" +msgstr "La serie se ha añadido a la videoteca" + +msgctxt "#60071" +msgid "Autoplay Configuration" +msgstr "Configurar AutoPlay" + +msgctxt "#60072" +msgid "It seems that links of %s are not working." +msgstr "Parece que los enlaces de %s no estan funcionando." + +msgctxt "#60073" +msgid "Do you want to ignore all the links from this server?" +msgstr "¿Desea ignorar todos los enlaces de este servidor?" + +msgctxt "#60074" +msgid "It's not possible to use AutoPlay" +msgstr "AutoPlay No Fue Posible" + +msgctxt "#60075" +msgid "No coincidence" +msgstr "No Hubo Coincidencias" + +msgctxt "#60076" +msgid "New quality/server available in \nConfiguration" +msgstr "Nueva Calidad/Servidor disponible en la \nConfiguracion" + +msgctxt "#60077" +msgid "AutoPlay initialization error" +msgstr "Error al iniciar AutoPlay" + +msgctxt "#60078" +msgid "View the log for more information." +msgstr "Consulte su log para obtener mas información." + +msgctxt "#60079" +msgid "AutoPlay (Turns AutoPlay On/Off)" +msgstr "AutoPlay (activar/desactivar la auto-reproduccion)" + +msgctxt "#60080" +msgid "AutoPlay Language (Optional)" +msgstr "Idioma para AutoPlay (Opcional)" + +msgctxt "#60081" +msgid " Favorite servers" +msgstr " Servidores favoritos" + +msgctxt "#60082" +msgid " \u2665 Favorite server %s" +msgstr " \u2665 Servidor Favorito %s + +msgctxt "#60083" +msgid " Preferred Qualities" +msgstr " Calidades Favoritas" + +msgctxt "#60084" +msgid " \u2665 Preferred Quality %s" +msgstr " \u2665 Calidad Favorita %s" + +msgctxt "#60085" +msgid " Priority (Indicates the order for AutoPlay)" +msgstr " Prioridad (Indica el orden para Auto-Reproducir)" + +msgctxt "#60086" +msgid "It has been renamed to:" +msgstr "È Stato rinominato in:" + +msgctxt "#60087" +msgid "Unexpected error on channel %s" +msgstr "Error inesperado en el canal %s" + +msgctxt "#60088" +msgid "Enter URL" +msgstr "Tengo una URL" + +msgctxt "#60089" +msgid "Enter the URL [Link to server/download]" +msgstr "Entra aquí y teclea la URL [Enlace a servidor online/descarga]" + +msgctxt "#60090" +msgid "Enter the URL [Direct link to video]." +msgstr "Entra aquí y teclea la URL [Enlace directo a un vídeo]" + +msgctxt "#60091" +msgid "Enter the URL [Search for links in a URL]" +msgstr "Entra aquí y teclea la URL [Búsqueda de enlaces en una url]" + +msgctxt "#60092" +msgid "View Direct URL" +msgstr "Ver enlace directo" + +msgctxt "#60093" +msgid "There is no compatible video in this URL" +msgstr "No hay ningún vídeo compatible en esa URL" + +msgctxt "#60200" +msgid "Download..." +msgstr "Descargando..." + +msgctxt "#60201" +msgid "Download starting..." +msgstr "Iniciando descarga..." + +msgctxt "#60202" +msgid "Remaining time: %s" +msgstr "Tiempo restante: %s" + +msgctxt "#60203" +msgid "Downloader %s/%s" +msgstr "Downloader %s/%s" + +msgctxt "#60204" +msgid "Speed Meter" +msgstr "Speed Meter" + +msgctxt "#60205" +msgid "File Writer" +msgstr "File Writer" + +msgctxt "#60206" +msgid "plugin" +msgstr "plugin" + +msgctxt "#60207" +msgid "Download..." +msgstr "Descargando..." + +msgctxt "#60208" +msgid "You can't download this video" +msgstr "No puedes descargar ese vídeo" + +msgctxt "#60209" +msgid "RTMP downloads are not" +msgstr "Las descargas en RTMP aún no" + +msgctxt "#60210" +msgid "still supported" +msgstr "están soportadas" + +msgctxt "#60211" +msgid "Missing %s" +msgstr "Falta %s" + +msgctxt "#60212" +msgid "Check that rtmpdump is installed" +msgstr "Comprueba que rtmpdump está instalado" + +msgctxt "#60213" +msgid "The RTMP download option is experimental" +msgstr "La opción de descarga RTMP es experimental" + +msgctxt "#60214" +msgid "and the video will be downloaded in the background." +msgstr "y el vídeo se descargará en segundo plano." + +msgctxt "#60215" +msgid "No progress bar will be displayed." +msgstr "No se mostrará ninguna barra de progreso." + +msgctxt "#60216" +msgid "addon" +msgstr "addon" + +msgctxt "#60217" +msgid "Download..." +msgstr "Descargando..." + +msgctxt "#60218" +msgid "%.2fMB/%.2fMB (%d%%) %.2f Kb/s %s missing " +msgstr "%.2fMB/%.2fMB (%d%%) %.2f Kb/s %s falta " + +msgctxt "#60219" +msgid "Copying the file" +msgstr "Copiando archivo" + +msgctxt "#60220" +msgid "Error while deleting the file" +msgstr "Error al eliminar el archivo" + +msgctxt "#60221" +msgid "Error while deleting the directory" +msgstr "Error al eliminar el directorio" + +msgctxt "#60222" +msgid "Error while creating the directory" +msgstr "Error al crear el directorio" + +msgctxt "#60223" +msgid "Enter another name" +msgstr "Introducir otro nombre" + +msgctxt "#60224" +msgid "Complete information" +msgstr "Completar información" + +msgctxt "#60225" +msgid "Search in TheMovieDB.org" +msgstr "Buscar en TheMovieDB.org" + +msgctxt "#60226" +msgid "Search in TheTvDB.org" +msgstr "Buscar en TheTvDB.com" + +msgctxt "#60227" +msgid "Identifier not found for: %s" +msgstr "Identificador no encontrado para: %s" + +msgctxt "#60228" +msgid "No information found for: %s" +msgstr "No se ha encontrado informacion para: %s" + +msgctxt "#60229" +msgid "Enter the name of %s to search" +msgstr "Introduzca el nombre de la %s a buscar" + +msgctxt "#60230" +msgid "Title:" +msgstr "Titulo:" + +msgctxt "#60231" +msgid "Original title" +msgstr "Titulo original" + +msgctxt "#60232" +msgid "Year" +msgstr "Año" + +msgctxt "#60233" +msgid "Identifiers:" +msgstr "Identificadores:" + +msgctxt "#60234" +msgid " The Movie Database ID" +msgstr " The Movie Database ID" + +msgctxt "#60235" +msgid " URL Tmdb" +msgstr " URL Tmdb" + +msgctxt "#60236" +msgid " The TVDB ID" +msgstr " The TVDB ID" + +msgctxt "#60237" +msgid " URL TVDB" +msgstr " URL TVDB" + +msgctxt "#60238" +msgid " IMDb ID" +msgstr " IMDb ID" + +msgctxt "#60239" +msgid " Other ID" +msgstr " Otro ID" + +msgctxt "#60240" +msgid "Images(urls):" +msgstr "Imágenes (urls):" + +msgctxt "#60241" +msgid " Background" +msgstr " Fondo" + +msgctxt "#60242" +msgid " Thumbnail" +msgstr " Miniatura" + +msgctxt "#60243" +msgid "Type of content" +msgstr "Tipo de contenido" + +msgctxt "#60244" +msgid "Movie" +msgstr "Película" + +msgctxt "#60245" +msgid "Series" +msgstr "Serie" + +msgctxt "#60246" +msgid "Full information" +msgstr "Completar información" + +msgctxt "#60247" +msgid "[%s]: Select the correct %s" +msgstr "[%s]: Selecciona la %s correcta" + +msgctxt "#60248" +msgid "Login to this page: %s" +msgstr "Accede a esta página: %s" + +msgctxt "#60249" +msgid "Enter this code and accept: %s" +msgstr "Ingresa este código y acepta: %s" + +msgctxt "#60250" +msgid "Once done, click here!" +msgstr "Una vez hecho, pulsa aquí!" + +msgctxt "#60251" +msgid "Synchronize with Trakt. Do not close this window" +msgstr "Sincronizar con Trakt. No cierres esta ventana" + +msgctxt "#60252" +msgid "1. Enter the following URL: %s" +msgstr "1. Entra en la siguiente url: %s" + +msgctxt "#60253" +msgid "2. Enter this code on the page and accept: %s" +msgstr "2. Ingresa este código en la página y acepta: %s" + +msgctxt "#60254" +msgid "3. Wait until this window closes" +msgstr "3. Espera a que se cierre esta ventana" + +msgctxt "#60255" +msgid "Successfully completed" +msgstr "Éxito" + +msgctxt "#60256" +msgid "Account linked correctly" +msgstr "Cuenta vinculada correctamente" + +msgctxt "#60257" +msgid "Error" +msgstr "Error" + +msgctxt "#60258" +msgid "Problem in the connection process" +msgstr "Fallo en el proceso de vinculación" + +msgctxt "#60259" +msgid "Account linked correctly" +msgstr "Cuenta vinculada con éxito" + +msgctxt "#60260" +msgid "Problem in the connection process" +msgstr "Fallo en el proceso de vinculación" + +msgctxt "#60261" +msgid "Alfa" +msgstr "Alfa" + +msgctxt "#60262" +msgid "You can install the Trakt script below, once installed and configured what you see will be automatically synchronized with your account." +msgstr "Puedes instalar el script de Trakt a continuacíon, una vez instalado y configurado lo que veas se sincronizara con tu cuenta automaticamente." + +msgctxt "#60263" +msgid "Do you want to continue?" +msgstr "¿Deseas continuar?" + +msgctxt "#60264" +msgid "In progress" +msgstr "En emisión" + +msgctxt "#60265" +msgid "Completed" +msgstr "Finalizada" + +msgctxt "#60266" +msgid "Action" +msgstr "Acción" + +msgctxt "#60267" +msgid "Adventure" +msgstr "Aventura" + +msgctxt "#60268" +msgid "Animation" +msgstr "Animación" + +msgctxt "#60269" +msgid "Kids" +msgstr "Niños" + +msgctxt "#60270" +msgid "Comedy" +msgstr "Comedia" + +msgctxt "#60271" +msgid "Crime" +msgstr "Crimen" + +msgctxt "#60272" +msgid "Documentaries" +msgstr "Documental" + +msgctxt "#60273" +msgid "Family" +msgstr "Familiar" + +msgctxt "#60274" +msgid "Fantasy" +msgstr "Fantasía" + +msgctxt "#60275" +msgid "Cooking" +msgstr "Comida" + +msgctxt "#60276" +msgid "Contests" +msgstr "Concurso" + +msgctxt "#60277" +msgid "Home and garden" +msgstr "Hogar y Jardín" + +msgctxt "#60278" +msgid "Mistery" +msgstr "Misterio" + +msgctxt "#60279" +msgid "News" +msgstr "Noticias" + +msgctxt "#60280" +msgid "Romantic" +msgstr "Romántico" + +msgctxt "#60281" +msgid "Science fiction" +msgstr "Ciencia-Ficción" + +msgctxt "#60282" +msgid "Soap Opera" +msgstr "Telenovela" + +msgctxt "#60283" +msgid "Sport" +msgstr "Deporte" + +msgctxt "#60284" +msgid "Talk Show" +msgstr "Programa de Entrevistas" + +msgctxt "#60285" +msgid "Travels" +msgstr "Viaje" + +msgctxt "#60286" +msgid "Pre-child audience: children under 6 years" +msgstr "Público pre-infantil: niños menores de 6 años" + +msgctxt "#60287" +msgid "Child audience: from 7 years old" +msgstr "Público infantil: desde 7 años" + +msgctxt "#60288" +msgid "General audience: without family control" +msgstr "Público general: sin supervisión familiar" + +msgctxt "#60289" +msgid "Parental control" +msgstr "Guía paterna: Supervisión paternal" + +msgctxt "#60290" +msgid "More than 14 years old" +msgstr "Mayores de 14 años" + +msgctxt "#60291" +msgid "More than 17 years old" +msgstr "Mayores de 17 años" + +msgctxt "#60292" +msgid "Searching for TV Series Information" +msgstr "Buscando información de la serie" + +msgctxt "#60293" +msgid "Please wait..." +msgstr "Espere por favor..." + +msgctxt "#60294" +msgid "Searching for TV Series Information" +msgstr "Buscando información de la serie" + +msgctxt "#60295" +msgid "Loading results..." +msgstr "Obteniendo resultados..." + +msgctxt "#60296" +msgid "Searching for TV Series Information" +msgstr "Buscando información de la serie" + +msgctxt "#60297" +msgid "Find %s possible matches" +msgstr "Encontrados %s posibles coincidencias" + +msgctxt "#60298" +msgid "[%s]: Select the correct TV series" +msgstr "[%s]: Selecciona la serie correcta" + +msgctxt "#60299" +msgid "Not found in the language '%s'" +msgstr "No se ha encontrado en idioma '%s'" + +msgctxt "#60300" +msgid "Search in language 'en'" +msgstr "Se busca en idioma 'en'" + +msgctxt "#60301" +msgid "Not found in the language '%s'" +msgstr "No se ha encontrado en idioma '%s'" + +msgctxt "#60302" +msgid "Search in language 'en'" +msgstr "Se busca en idioma 'en'" + +msgctxt "#60303" +msgid "The file already exists" +msgstr "El archivo ya existe" + +msgctxt "#60304" +msgid "The unzipped %s file already exists, or you want to overwrite it.?" +msgstr "El archivo %s a descomprimir ya existe, ¿desea sobrescribirlo?" + +msgctxt "#60305" +msgid "Adult channels" +msgstr "Canales para adultos" + +msgctxt "#60306" +msgid "The fields 'New password' and 'Confirm new password' do not match" +msgstr "Los campos 'Nueva contraseña' y 'Confirmar nueva contraseña' no coinciden." + +msgctxt "#60307" +msgid "Use 'Preferences' to change your password" +msgstr "Entre de nuevo en 'Preferencias' para cambiar la contraseña" + +msgctxt "#60308" +msgid "Adult channels" +msgstr "Canales para adultos" + +msgctxt "#60309" +msgid "The password is not correct." +msgstr "La contraseña no es correcta." + +msgctxt "#60310" +msgid "Changes made in this section will not be saved." +msgstr "Los cambios realizados en esta sección no se guardaran." + +msgctxt "#60311" +msgid "Download..." +msgstr "Descargando..." + +msgctxt "#60312" +msgid "Close this window to start playback" +msgstr "Cierra esta ventana para empezar la reproducción" + +msgctxt "#60313" +msgid "Cancel this window to start playback" +msgstr "Cancela esta ventana para empezar la reproducción" + +msgctxt "#60314" +msgid "Speed: " +msgstr "Velocidad: " + +msgctxt "#60315" +msgid " KB/s " +msgstr " KB/s " + +msgctxt "#60316" +msgid "MB of " +msgstr "MB de " + +msgctxt "#60317" +msgid "MB" +msgstr "MB" + +msgctxt "#60318" +msgid "Remaining time: " +msgstr "Tiempo restante: " + +msgctxt "#60319" +msgid "Cancelled" +msgstr "Cancelado" + +msgctxt "#60320" +msgid "Download in background cancelled" +msgstr "Descarga en segundo plano cancelada" + +msgctxt "#60321" +msgid "Press the button to be used to open the window" +msgstr "Presiona la tecla a usar para abrir la ventana" + +msgctxt "#60322" +msgid "You have %s seconds" +msgstr "Tienes %s segundos" + +msgctxt "#60323" +msgid "Press the button to be used to open the window" +msgstr "Presiona la tecla a usar para abrir la ventana" + +msgctxt "#60324" +msgid "You have %s seconds" +msgstr "Tienes %s segundos" + +msgctxt "#60325" +msgid "Saved key" +msgstr "Tecla guardada" + +msgctxt "#60326" +msgid "Restart Kodi to apply changes" +msgstr "Reinicia Kodi para que se apliquen los cambios" + +msgctxt "#60327" +msgid "Novelties" +msgstr "Novedades" + +msgctxt "#60328" +msgid "Channels" +msgstr "Canales" + +msgctxt "#60329" +msgid "Search" +msgstr "Buscador" + +msgctxt "#60330" +msgid "Favorites" +msgstr "Favoritos" + +msgctxt "#60331" +msgid "Videolibrary" +msgstr "Videoteca" + +msgctxt "#60332" +msgid "Downloads" +msgstr "Descargas" + +msgctxt "#60333" +msgid "Configuration" +msgstr "Configuración" + +msgctxt "#60334" +msgid "Password for adult channels" +msgstr "Contraseña para canales de adultos" + +msgctxt "#60335" +msgid "Watch in" +msgstr "Vedere in" + +msgctxt "#60336" +msgid "Download in" +msgstr "Scaricare in" + +msgctxt "#60337" +msgid "alfa-MCT: No support adf.ly" +msgstr "alfa-MCT: Sin soporte adf.ly" + +msgctxt "#60338" +msgid "The script does not support URL reduction adf.ly." +msgstr "El script no tiene soporte para el acortador de urls adf.ly." + +msgctxt "#60339" +msgid "Nothing to Play" +msgstr "No se puede reproducir" + +msgctxt "#60342" +msgid "Download completed: " +msgstr "Descarga completa: " + +msgctxt "#60343" +msgid "BMC-Kodi has closed the video." +msgstr "XBMC-Kodi Cerró el vídeo." + +msgctxt "#60344" +msgid "Continue with the session?" +msgstr "¿Continuar con la sesión?" + +msgctxt "#60345" +msgid "alfa-MCT: List of videos" +msgstr "alfa-MCT: Lista de vídeos" + +msgctxt "#60346" +msgid "Delete video downloads" +msgstr "Borrar las descargas del video" + +msgctxt "#60347" +msgid "No items to display" +msgstr "No hay elementos que mostrar" + +msgctxt "#60348" +msgid "Information" +msgstr "Información" + +msgctxt "#60349" +msgid "Go to the Main Menu" +msgstr "Ir al Menu Principal" + +msgctxt "#60350" +msgid "[COLOR yellow]Search in other channels[/COLOR]" +msgstr "[COLOR yellow]Buscar en otros canales[/COLOR]" + +msgctxt "#60351" +msgid "Set as homepage" +msgstr "[COLOR 0xffccff00]Definir como pagina de inicio[/COLOR]" + +msgctxt "#60352" +msgid "Add TV Series to Videolibrary" +msgstr "Añadir Serie a Videoteca" + +msgctxt "#60353" +msgid "Add Movie to Videolibrary" +msgstr "Añadir Pelicula a Videoteca" + +msgctxt "#60354" +msgid "Download Movie" +msgstr "Descargar Pelicula" + +msgctxt "#60355" +msgid "Download TV Series" +msgstr "Descargar Serie" + +msgctxt "#60356" +msgid "Download Episode" +msgstr "Descargar Episodio" + +msgctxt "#60357" +msgid "Download Season" +msgstr "Descargar Temporada" + +msgctxt "#60358" +msgid "Open Configuration" +msgstr "Abrir Configuración" + +msgctxt "#60359" +msgid "Search Trailer" +msgstr "Buscar Trailer" + +msgctxt "#60360" +msgid "[COLOR 0xffccff00][/COLOR]" +msgstr "[COLOR 0xffccff00][/COLOR]" + +msgctxt "#60361" +msgid "Super Favourites Menu" +msgstr "Super Favourites Menu" + +msgctxt "#60362" +msgid "You can't watch this video because..." +msgstr "No puedes ver ese vídeo porque..." + +msgctxt "#60363" +msgid "The server on which it is hosted" +msgstr "El servidor donde está alojado no está" + +msgctxt "#60364" +msgid "is not yet supported in Alfa" +msgstr "soportado en Alfa todavía" + +msgctxt "#60365" +msgid "Loading video..." +msgstr "Cargando vídeo..." + +msgctxt "#60366" +msgid "External plugin: %s" +msgstr "Plugin externo: %s" + +msgctxt "#60376" +msgid "Video information" +msgstr "Información del vídeo" + +msgctxt "#60377" +msgid "Title:" +msgstr "Título:" + +msgctxt "#60378" +msgid "Original Title:" +msgstr "Título original:" + +msgctxt "#60379" +msgid "Original language:" +msgstr "Idioma original:" + +msgctxt "#60380" +msgid "Score:" +msgstr "Puntuación:" + +msgctxt "#60381" +msgid "Release:" +msgstr "Lanzamiento:" + +msgctxt "#60382" +msgid "Genres:" +msgstr "Géneros:" + +msgctxt "#60383" +msgid "Series:" +msgstr "Serie:" + +msgctxt "#60384" +msgid "Season title:" +msgstr "Título temporada:" + +msgctxt "#60385" +msgid "Season:" +msgstr "Temporada:" + +msgctxt "#60386" +msgid "Episode:" +msgstr "Episodio:" + +msgctxt "#60387" +msgid "Emission:" +msgstr "Emisión:" + +msgctxt "#60388" +msgid "Summary:" +msgstr "Sinopsis:" + +msgctxt "#60389" +msgid "Videolibrary update...." +msgstr "Actualizando videoteca...." + +msgctxt "#60390" +msgid "AutoPlay Configuration" +msgstr "Configurar AutoPlay" + +msgctxt "#60391" +msgid "AutoPlay" +msgstr "AutoPlay" + +msgctxt "#60392" +msgid "\n\n\nTotal Reset of the addon %s.\n\n[COLOR red]Attention This function completely resets the addon.[/COLOR]" +msgstr "\n\n\nReset totale dell'addon %s.\n\n[COLOR red]Attenzione questa funzione resetta totalmente l'addon.[/COLOR]" + +msgctxt "#60393" +msgid "[COLOR red]Reset %s[/COLOR]" +msgstr "[COLOR red]Reset %s[/COLOR]" + +msgctxt "#60394" +msgid "Reset %s" +msgstr "Reset %s" + +msgctxt "#60395" +msgid "Are you sure you want to reset all settings of %s ?" +msgstr "Sei sicuro di voler resettare tutte le impostazioni di %s ?" + +msgctxt "#60396" +msgid "Cancel" +msgstr "Annulla" + +msgctxt "#60397" +msgid "Confirm" +msgstr "Conferma" + +msgctxt "#60398" +msgid " Settings Reset was successful!" +msgstr "Reset delle impostazioni è avvenuto con successo!" + +msgctxt "#60399" +msgid "AutoPlay allows you to auto play links directly, based on your server settings and preferred qualities. " +msgstr "AutoPlay permite auto reproducir los enlaces directamente, basándose en la configuracion de tus servidores y calidades preferidas. " + +msgctxt "#60400" +msgid "512 Mega" +msgstr "512 Mega" + +msgctxt "#60401" +msgid "1 Gb" +msgstr "1 Gb" + +msgctxt "#60402" +msgid "2 Gb" +msgstr "2 Gb" + +msgctxt "#60403" +msgid "more than 2 Gb" +msgstr "più di 2 Gb" + +msgctxt "#60404" +msgid "Choose cache setting" +msgstr "Scegli settaggio cache" + +msgctxt "#60405" +msgid "\n[COLOR orange]Cache Set for 512 Mega RAM[/COLOR]" +msgstr "\n[COLOR orange]Cache Impostata per 512 Mega di RAM[/COLOR]" + +msgctxt "#60406" +msgid "\n[COLOR orange]Cache Set for 1 Gb RAM[/COLOR]" +msgstr "\n[COLOR orange]Cache Impostata per 1 Gb di RAM[/COLOR]" + +msgctxt "#60407" +msgid "\n[COLOR orange]Cache Set for 2 Gb RAM[/COLOR]" +msgstr "\n[COLOR orange]Cache Impostata per 2 Gb di RAM[/COLOR]" + +msgctxt "#60408" +msgid "\n[COLOR orange]Cache Set higher than 2 Gb of RAM[/COLOR]" +msgstr "\n[COLOR orange]Cache Impostata a superiore di 2 Gb di RAM[/COLOR]" + +msgctxt "#60409" +msgid "plugin" +msgstr "plugin" + +msgctxt "#60410" +msgid "An advancedsettings.xml file has been created" +msgstr "E' stato creato un file advancedsettings.xml" + +msgctxt "#60411" +msgid "with the ideal streaming configuration." +msgstr "con la configurazione ideale per lo streaming." + +msgctxt "#60412" +msgid "Choose channels to include" +msgstr "Elegir canales incluidos" + +msgctxt "#60413" +msgid "[COLOR yellow]New Movie Search...[/COLOR]" +msgstr "[COLOR yellow]Nuova ricerca film...[/COLOR]" + +msgctxt "#60414" +msgid "[COLOR yellow]New search tv series...[/COLOR]" +msgstr "[COLOR yellow]Nuova ricerca serie tv...[/COLOR]" + +msgctxt "#60415" +msgid "[COLOR green]Other settings[/COLOR]" +msgstr "[COLOR green]Altre impostazioni[/COLOR]" + +msgctxt "#60416" +msgid "Delete saved searches" +msgstr "Cancella ricerche salvate" + +msgctxt "#60417" +msgid "[COLOR red]Delete search history[/COLOR]" +msgstr "[COLOR red]Elimina cronologia ricerche[/COLOR]" + +msgctxt "#60418" +msgid "Choose channels to include in your search" +msgstr "Scegli i canali da includere nella ricerca" + +msgctxt "#60419" +msgid "Delete saved searches" +msgstr "Cancella ricerche salvate" + +msgctxt "#60420" +msgid "More Options" +msgstr "Altre opzioni" + +msgctxt "#60421" +msgid "Channels included in the global search " +msgstr "Canali inclusi nella ricerca globale " + +msgctxt "#60422" +msgid "Search " +msgstr "Buscando " + +msgctxt "#60423" +msgid "Search" +msgstr "Ricerca" + +msgctxt "#60424" +msgid "Searches key have been deleted correctly" +msgstr "Búsquedas borradas correctamente" + +msgctxt "#60425" +msgid "Channel search" +msgstr "Cerca canale" + +msgctxt "#60426" +msgid "FILTER: Configure" +msgstr "FILTRO: Configurar" + +msgctxt "#60427" +msgid "FILTER: Adding '%s'" +msgstr "FILTRO: Añadir '%s'" + +msgctxt "#60428" +msgid "FILTER: Delete '%s'" +msgstr "FILTRO: Borrar '%s'" + +msgctxt "#60429" +msgid "[COLOR %s]Filter configuration for TV series...[/COLOR]" +msgstr "[COLOR %s]Configurar filtro para series...[/COLOR]" + +msgctxt "#60430" +msgid "FILTRO: Delete '%s'" +msgstr "FILTRO: Borrar '%s'" + +msgctxt "#60431" +msgid " and quality %s" +msgstr " y calidad %s" + +msgctxt "#60432" +msgid "[COLOR %s]No results in this language '%s'%s, click to show without filter[/COLOR]" +msgstr "[COLOR %s]No hay elementos con idioma '%s'%s, pulsa para mostrar sin filtro[/COLOR]" + +msgctxt "#60433" +msgid " (disabled)" +msgstr " (desactivado)" + +msgctxt "#60434" +msgid "Configure [COLOR %s][%s][/COLOR]%s" +msgstr "Configurar [COLOR %s][%s][/COLOR]%s" + +msgctxt "#60435" +msgid "There are no filters, search for a TV series and click on the context menu 'FILTER: Configure'" +msgstr "No existen filtros, busca una serie y pulsa en menú contextual 'FILTRO: Configurar'" + +msgctxt "#60436" +msgid "Spanish" +msgstr "Español" + +msgctxt "#60437" +msgid "Delete" +msgstr "Borrar" + +msgctxt "#60438" +msgid "¿Enable / disable filter?" +msgstr "¿Activar/Desactivar filtro?" + +msgctxt "#60439" +msgid "Language" +msgstr "Idioma" + +msgctxt "#60440" +msgid "Permitted quality" +msgstr "Calidad permitida" + +msgctxt "#60441" +msgid "Filter links for: [COLOR %s]%s[/COLOR]" +msgstr "Filtrado de enlaces para: [COLOR %s]%s[/COLOR]" + +msgctxt "#60442" +msgid "Are you sure you want to delete the filter?" +msgstr "¿Está seguro que desea eliminar el filtro?" + +msgctxt "#60443" +msgid "Click 'Yes' to remove the filter from [COLOR %s]%s[/COLOR], click 'No' or close the window to do nothing." +msgstr "Pulse 'Si' para eliminar el filtro de [COLOR %s]%s[/COLOR], pulse 'No' o cierre la ventana para no hacer nada." + +msgctxt "#60444" +msgid "FILTER DELETED" +msgstr "FILTRO ELIMINADO" + +msgctxt "#60445" +msgid "Error on saving on disk" +msgstr "Error al guardar en disco" + +msgctxt "#60446" +msgid "FILTER SAVED" +msgstr "FILTRO GUARDADO" + +msgctxt "#60447" +msgid "FAQ:" +msgstr "FAQ:" + +msgctxt "#60448" +msgid " - How do I report an error?" +msgstr " - Come segnalo un errore?" + +msgctxt "#60449" +msgid " - Is it possible to enable/disable channels?" +msgstr " - È Possibile attivare/disattivare i canali?" + +msgctxt "#60450" +msgid " - Is automatic synchronization with Trakt possible?" +msgstr " - È Possibile la sincronizzazione automatica con Trakt?" + +msgctxt "#60451" +msgid " - Is it possible to show all the results together in the global search?" +msgstr " - È Possibile mostrare tutti i risultati uniti nella ricerca globale?" + +msgctxt "#60452" +msgid " - Links take too long to appear." +msgstr " - I link ci mettono troppo ad apparire." + +msgctxt "#60453" +msgid " - The content search is not performed correctly." +msgstr " - La ricerca dei contenuti non viene eseguita correttamente." + +msgctxt "#60454" +msgid " - Some channels do not function properly." +msgstr " - Alcuni canali non funzionano correttamente." + +msgctxt "#60455" +msgid " - The library does not update correctly." +msgstr " - La libreria non viene aggiornata correttamente." + +msgctxt "#60456" +msgid " - Links of interest" +msgstr " - Collegamenti di interesse" + +msgctxt "#60457" +msgid "Alfa" +msgstr "Alfa" + +msgctxt "#60458" +msgid "The disabling can be done in 'Settings>Turn on/off channels'. You can toggle channels on/off one at a time or all at the same time. Want to manage your channels now?" +msgstr "La disabilitazione può essere fatta in 'Impostazioni>Attiva/Disattiva canali'. È Possibile Attivare/Disattivare i canali uno alla volta o tutti allo stesso tempo. Vuoi gestire i canali adesso?" + +msgctxt "#60459" +msgid "Currently it is possible to activate the synchronization (silent) after having marked an episode as 'as watched' (this happens automatically). This option can be enabled in 'Settings>Library Settings'. Do you want access to these settings?" +msgstr "Attualmente è possibile attivare la sincronizzazione (silenziosa) dopo aver segnato come 'come visto' un episodio (ciò avviene automaticamente). Questa opzione può essere attivata in 'Impostazioni>Impostazioni libreria'. Vuoi accedere a queste impostazioni?" + +msgctxt "#60460" +msgid "This can be improved by limiting the maximum number of links or by displaying them in a Pop-Up window. These settings can be found in 'Settings>Library Settings' Do you want to access these settings?" +msgstr "Questo può essere migliorato limitando il numero massimo di collegamenti o visualizzandoli in una finestra Pop-Up. Queste impostazioni possono essere trovate in 'Impostazioni>Impostazioni libreria' Vuoi accedere a queste impostazioni?" + +msgctxt "#60461" +msgid "Alfa - FAQ - %s" +msgstr "Alfa- FAQ - %s" + +msgctxt "#60462" +msgid "You may not have written the library path correctly in 'Settings>Preferences'.\nIl The specified path must be exactly the same as the 'source' entered in 'Archive' of the Kodi library.\nAVANZATO: This path is also found in 'sources.xml'.\nThere can be problems using some Kodi forks and paths with 'special://'. SPMC, for example, has problems with this, and there doesn't seem to be a solution, as it is an external problem to Alfa that has existed for a long time.\nYou can try solving these problems in 'Settings>Library Settings' by changing the 'Search in' setting from 'The folder of each series' to 'All library'." +msgstr "Potresti non aver scritto correttamente il percorso della libreria in 'Impostazioni>Preferenze'.\nIl percorso specificato deve essere esattamente uguale al 'sorgente' inserito in 'Archivio' della libreria di Kodi.\nAVANZATO: Questo percorso si trova anche in 'sources.xml'.\nPotresti riscontrare dei problemi utilizzando alcuni fork di Kodi e percorsi con 'special://'. SPMC, per esempio, ha problemi con questo, e non sembra esserci una soluzione, poichè è un problema esterno ad Orion che esiste da molto tempo.\nPuoi provare a risolvere questi problemi in 'Impostazioni>Impostazioni libreria', modificando l'impostazione 'Esegui ricerca contenuto in' da 'La cartella di ogni serie' in 'Tutta la libreria'." + +msgctxt "#60463" +msgid "The channel site may not work. In case the site works you can report the problem on github." +msgstr "Può darsi che il sito del canale non funzioni. Nel caso il sito funzioni puoi segnalare il problema su github." + +msgctxt "#60464" +msgid "It is possible that you have updated Alfa recently and that the changes have not been fully applied Well, you can try 'Settings>Other Tools', checking the *_data.json files or reattaching everything to the library again" +msgstr "È Possibile che tu abbia aggiornato Orion di recente e che i cambiamenti non siano stati totalmente applicati Bene, puoi provare in 'Impostazioni>Altri strumenti', controllando i files *_data.json o riaggiungendo tutto ancora alla libreria" + +msgctxt "#60465" +msgid "Do you want access to these settings?" +msgstr "Vuoi accedere a queste impostazioni?" + +msgctxt "#60466" +msgid "Yes, the option to display merged or split results by channels can be found in 'Settings>Global Search Settings>Other Settings'. Do you want access to these settings?" +msgstr "Sì, l'opzione per mostrare i risultati uniti o divisi per canali si trova in 'Impostazioni>Impostazioni ricerca globale>Altre impostazioni'. Vuoi accedere a queste impostazioni?" + +msgctxt "#60467" +msgid "To report a problem on'http://alfa-addon.com' you need to:|the version you're using of Alpha.|The version you're using of kodi, mediaserver, etc.|the version and name of the operating system you're using.|The name of the skin (in case you're using Kodi) and whether using the default skin has solved the problem.|Description of the problem and any test cases.To activate the log in detailed mode, go to:|Configuration.|Preferences.|In the General tab - Check the option: Generate detailed log. The detailed log file can be found in the following path: \n\n%s" +msgstr "Para reportar un problema en 'http://alfa-addon.com' es necesario:\n - Versión que usas de Alfa.\n - Versión que usas de kodi, mediaserver, etc.\n - Versión y nombre del sistema operativo que usas.\n - Nombre del skin (en el caso que uses Kodi) y si se te ha resuelto el problema al usar el skin por defecto.\n - Descripción del problema y algún caso de prueba.\n - Agregar el log en modo detallado, una vez hecho esto, zipea el log y lo puedes adjuntar en un post.\n\nPara activar el log en modo detallado, ingresar a:\n - Configuración.\n - Preferencias.\n - En la pestaña General - Marcar la opción: Generar log detallado.\n\nEl archivo de log detallado se encuentra en la siguiente ruta: \n\n%s" + +msgctxt "#60468" +msgid "You can find our Telegram channel at @StreamOnDemandOfficial\nSe you have doubts you can write to us in the Telegram group: https://bit.ly/2I3kRwF" +msgstr "Puoi trovare il nostro canale Telegram in @StreamOnDemandOfficial\nSe hai dubbi puoi scriverci nel gruppo Telegram: https://bit.ly/2I3kRwF" + +msgctxt "#60469" +msgid "Uploading new data" +msgstr "Cargando nuevos datos" + +msgctxt "#60470" +msgid "Buscando en Tmdb......." +msgstr "Buscando en Tmdb......." + +msgctxt "#60471" +msgid "No results, missing information about the year of the video" +msgstr "Sin resultados. Falta información del año del video" + +msgctxt "#60472" +msgid "There is no information on the %s required" +msgstr "No hay info de la %s solicitada" + +msgctxt "#60473" +msgid "No results" +msgstr "Sin resultados" + +msgctxt "#60474" +msgid "There is no information on the %s required" +msgstr "No hay info de la %s solicitada" + +msgctxt "#60475" +msgid "Filmaffinity recording......." +msgstr "Registrando filmaffinity......." + +msgctxt "#60476" +msgid "[COLOR yellow][B]There is no information about this movie...[/B][/COLOR]" +msgstr "[COLOR yellow][B]Esta pelicula no tiene informacion...[/B][/COLOR]" + +msgctxt "#60477" +msgid "Important recommendations......." +msgstr "Indagando recomendaciones......." + +msgctxt "#60478" +msgid "[COLOR aquamarine][B]Completated %s[/B][/COLOR]" +msgstr "[COLOR aquamarine][B]Finalizada %s[/B][/COLOR]" + +msgctxt "#60479" +msgid "[COLOR aquamarine][B]In progress %s[/B][/COLOR]" +msgstr "[COLOR aquamarine][B]En emisión %s[/B][/COLOR]" + +msgctxt "#60480" +msgid "(Seasons: %s)" +msgstr "(Temporadas: %s)" + +msgctxt "#60481" +msgid "Picture collection on FANART.TV" +msgstr "Recopilando imágenes en FANART.TV" + +msgctxt "#60482" +msgid "Tuned Instruments in Vtunes" +msgstr "Afinado instrumentos en Vtunes" + +msgctxt "#60483" +msgid "Picture collection on FANART.TV" +msgstr "Recopilando imágenes en FANART.TV" + +msgctxt "#60484" +msgid "[COLOR red][B]Update Kodi to its latest version[/B][/COLOR]" +msgstr "[COLOR red][B]Actualiza Kodi a su última versión[/B][/COLOR]" + +msgctxt "#60485" +msgid "[COLOR skyblue]for detailed info[/COLOR]" +msgstr "[COLOR skyblue]para mejor info[/COLOR]" + +msgctxt "#60486" +msgid "Uploading new information" +msgstr "Cargando nueva info" + +msgctxt "#60487" +msgid "Search in Tmdb......." +msgstr "Buscando en Tmdb......." + +msgctxt "#60488" +msgid "No information..." +msgstr "Sin información..." + +msgctxt "#60489" +msgid "[COLOR limegreen][B]Production company: [/B][/COLOR]" +msgstr "[COLOR limegreen][B]Productora: [/B][/COLOR]" + +msgctxt "#60490" +msgid "[COLOR limegreen][B]Country: [/B][/COLOR]" +msgstr "[COLOR limegreen][B]País: [/B][/COLOR]" + +msgctxt "#60491" +msgid "[COLOR limegreen][B]Preview: [/B][/COLOR]" +msgstr "[COLOR limegreen][B]Estreno: [/B][/COLOR]" + +msgctxt "#60492" +msgid "[COLOR limegreen][B]Seasons/Episodes: [/B][/COLOR]" +msgstr "[COLOR limegreen][B]Temporadas/Episodios: [/B][/COLOR]" + +msgctxt "#60493" +msgid "[COLOR orange][B]Is there the tv series you're looking for?[/B][/COLOR]" +msgstr "[COLOR orange][B]¿Está la serie que buscas?[/B][/COLOR]" + +msgctxt "#60494" +msgid "[COLOR orange][B]Is there the movie you are looking for?[/B][/COLOR]" +msgstr "[COLOR orange][B]¿Está la película que buscas?[/B][/COLOR]" + +msgctxt "#60495" +msgid "[COLOR tomato][B]Close[/B][/COLOR]" +msgstr "[COLOR tomato][B]Cerrar[/B][/COLOR]" + +msgctxt "#60496" +msgid "Loading results" +msgstr "Cargando resultados" + +msgctxt "#60497" +msgid "Wait........" +msgstr "Espere........" + +msgctxt "#60498" +msgid "[COLOR orange][B]Select...[/B][/COLOR]" +msgstr "[COLOR orange][B]Selecciona...[/B][/COLOR]" + +msgctxt "#60499" +msgid "plugin" +msgstr "plugin" + +msgctxt "#60500" +msgid "Nothing to play" +msgstr "No hay nada para reproducir" + +msgctxt "#60501" +msgid "[COLOR orange][B]Department[/B][/COLOR]" +msgstr "[COLOR orange][B]Reparto[/B][/COLOR]" + +msgctxt "#60502" +msgid "Uploading new data" +msgstr "Cargando nuevos datos" + +msgctxt "#60503" +msgid "Loading data from the %s..." +msgstr "Obteniendo datos del %s..." + +msgctxt "#60504" +msgid "No information" +msgstr "Sin información" + +msgctxt "#60505" +msgid "[COLOR rosybrown]Uploading filmography...[/COLOR]" +msgstr "[COLOR rosybrown]Obteniendo filmografía...[/COLOR]" + +msgctxt "#60506" +msgid "[COLOR plum]Picture collection...[/COLOR]" +msgstr "[COLOR plum]Recopilando imágenes...[/COLOR]" + +msgctxt "#60507" +msgid "[COLOR crimson][B]Error[/B][/COLOR]" +msgstr "[COLOR crimson][B]Error[/B][/COLOR]" + +msgctxt "#60508" +msgid "[COLOR tomato]Video not available[/COLOR]" +msgstr "[COLOR tomato]Vídeo no disponible[/COLOR]" + +msgctxt "#60509" +msgid "Movies" +msgstr "Películas" + +msgctxt "#60510" +msgid "Kids" +msgstr "Para niños" + +msgctxt "#60511" +msgid "TV series Episodes" +msgstr "Episodios de series" + +msgctxt "#60512" +msgid "Anime Episodes" +msgstr "Episodios de anime" + +msgctxt "#60513" +msgid "Documentaries" +msgstr "Documentales" + +msgctxt "#60514" +msgid "Channels included in: %s" +msgstr "Canales incluidos en: %s" + +msgctxt "#60515" +msgid "Simultaneous search deactivated" +msgstr "Búsqueda concurrente desactivada" + +msgctxt "#60516" +msgid "Simultaneous novelty search provides" +msgstr "La búsqueda concurrente de novedades proporciona" + +msgctxt "#60517" +msgid "higher speed and its deactivation is advisable only in case of failure." +msgstr "una mayor velocidad y su desactivación solo es aconsejable en caso de fallo." + +msgctxt "#60518" +msgid "Would you like to activate the simultaneous search now?" +msgstr "¿Desea activar la búsqueda concurrente ahora?" + +msgctxt "#60519" +msgid "Channel search..." +msgstr "Buscando canales..." + +msgctxt "#60520" +msgid "Search in '%s'..." +msgstr "Buscando en '%s'..." + +msgctxt "#60521" +msgid "Completed in %d/%d channels..." +msgstr "Finalizado en %d/%d canales..." + +msgctxt "#60522" +msgid "Results obtained: %s | Time: %2.f seconds" +msgstr "Resultados obtenidos: %s | Tiempo: %2.f segundos" + +msgctxt "#60523" +msgid " (In %s and %s)" +msgstr " (En %s y %s)" + +msgctxt "#60524" +msgid " (In %s)" +msgstr " (En %s)" + +msgctxt "#60525" +msgid "Channels included in:" +msgstr "Canales incluidos en:" + +msgctxt "#60526" +msgid " - Movies " +msgstr " - Películas " + +msgctxt "#60527" +msgid " - Kids" +msgstr " - Para niños" + +msgctxt "#60528" +msgid " - Series Tv Episodes" +msgstr " - Episodios de series" + +msgctxt "#60529" +msgid " - Anime Episodes" +msgstr " - Episodios de anime" + +msgctxt "#60530" +msgid " - Documentaries" +msgstr " - Documentales" + +msgctxt "#60531" +msgid "Other Settings" +msgstr "Otros ajustes" + +msgctxt "#60532" +msgid "Configuration -- News" +msgstr "configuración -- Novedades" + +msgctxt "#60533" +msgid "Channels included in News " +msgstr "Canales incluidos en Novedades " + +msgctxt "#60534" +msgid "Last 2 months" +msgstr "Last 2 months" + +msgctxt "#60535" +msgid "Preferences" +msgstr "Preferencias" + +msgctxt "#60536" +msgid "Special settings" +msgstr "Ajustes especiales" + +msgctxt "#60537" +msgid "Channel settings" +msgstr "Ajustes de Canales" + +msgctxt "#60538" +msgid "Server settings" +msgstr "Ajustes de Servidores" + +msgctxt "#60539" +msgid "Settings for the 'News' section" +msgstr "Ajustes de la sección 'Novedades'" + +msgctxt "#60540" +msgid "Global search settings" +msgstr "Ajustes del buscador global" + +msgctxt "#60541" +msgid "Download settings" +msgstr "Ajustes de descargas" + +msgctxt "#60542" +msgid "Videolibrary settings" +msgstr "Ajustes de la videoteca" + +msgctxt "#60544" +msgid "More Options" +msgstr "Otras herramientas" + +msgctxt "#60545" +msgid "Activate/deactivate channels" +msgstr "Activar/desactivar canales" + +msgctxt "#60546" +msgid "Channel settings" +msgstr "Ajustes por canales" + +msgctxt "#60547" +msgid "Channel Configuration '%s'" +msgstr "Configuración del canal '%s'" + +msgctxt "#60548" +msgid "HChannel Options" +msgstr "Herramientas de canales" + +msgctxt "#60549" +msgid "Check the files * _data.json" +msgstr "Comprobar archivos *_data.json"," + +msgctxt "#60550" +msgid "Servers locked" +msgstr "Sevidores bloqueados" + +msgctxt "#60551" +msgid "Favorite servers" +msgstr "Servidores favoritos" + +msgctxt "#60552" +msgid "Debriders settings" +msgstr "Ajustes de debriders:" + +msgctxt "#60553" +msgid " Server configuration '%s'" +msgstr " Configuración del servidor '%s'" + +msgctxt "#60554" +msgid "Server settings" +msgstr "Ajustes de servidores" + +msgctxt "#60557" +msgid "Saving configuration" +msgstr "Guardando configuración..." + +msgctxt "#60558" +msgid "Please wait." +msgstr "Espere un momento por favor." + +msgctxt "#60559" +msgid "Saving configuration...%s" +msgstr "Guardando configuración...%s" + +msgctxt "#60560" +msgid " - [COLOR red] CORRECTED!![/COLOR]" +msgstr " - [COLOR red] CORREGIDO!![/COLOR]" + +msgctxt "#60561" +msgid "Saving configuration..." +msgstr "Guardando configuración..." + +msgctxt "#60562" +msgid "Please wait" +msgstr "Espere un momento por favor" + +msgctxt "#60563" +msgid "Saving configuration..." +msgstr "Guardando configuración..." + +msgctxt "#60564" +msgid "Channel Options" +msgstr "Herramientas de canales" + +msgctxt "#60565" +msgid " Check the files * _data.json" +msgstr " Comprobar archivos *_data.json" + +msgctxt "#60566" +msgid "Videolibrary options" +msgstr "Herramientas de videoteca" + +msgctxt "#60567" +msgid " Overwrite the entire video library (strm, nfo and json)" +msgstr " Sobreescribir toda la videoteca (strm, nfo y json)" + +msgctxt "#60568" +msgid " Search for new episodes and update the video library" +msgstr " Buscar nuevos episodios y actualizar videoteca" + +msgctxt "#60569" +msgid " - There are no default settings" +msgstr " - No tiene ajustes por defecto" + +msgctxt "#60570" +msgid " | Error Detail: %s" +msgstr " | Detalle del error: %s" + +msgctxt "#60571" +msgid " - [COLOR red] Default settings cannot be loaded![/COLOR]" +msgstr " - [COLOR red] Imposible cargar los ajustes por defecto![/COLOR]" + +msgctxt "#60572" +msgid "Ask" +msgstr "Preguntar" + +msgctxt "#60577" +msgid "Order Servers" +msgstr "Ordenar servidores" + +msgctxt "#60578" +msgid " Server #%s" +msgstr " Servidor #%s" + +msgctxt "#60579" +msgid "Error" +msgstr "Error" + +msgctxt "#60580" +msgid "A saving error occurred" +msgstr "Se ha producido un error al guardar" + +msgctxt "#60581" +msgid "Overwriting the entire video library" +msgstr "Sobrescribir toda la videoteca" + +msgctxt "#60582" +msgid "This may take some time." +msgstr "Esto puede llevar algún tiempo." + +msgctxt "#60583" +msgid "Do you want to continue?" +msgstr "¿Desea continuar?" + +msgctxt "#60584" +msgid "Overwriting the video library...TV SERIES" +msgstr "Sobrescribiendo videoteca....SERIES" + +msgctxt "#60585" +msgid "alfa" +msgstr "alfa" + +msgctxt "#60586" +msgid "Overwriting the video library...MOVIES" +msgstr "Sobrescribiendo videoteca....PELICULAS" + +msgctxt "#60587" +msgid "Video library update...." +msgstr "Actualización videoteca ...." + +msgctxt "#60588" +msgid " - Settings created" +msgstr " - Ajustes creados" + +msgctxt "#60589" +msgid "- - No correction necessary" +msgstr "- - No necesita corrección" + +msgctxt "#60590" +msgid " - An error has occurred" +msgstr " - Ha ocurrido algun error" + +msgctxt "#60591" +msgid "Activate all" +msgstr "Activar todos" + +msgctxt "#60592" +msgid "Deactivate all" +msgstr "Desactivar todos" + +msgctxt "#60593" +msgid "Default Set" +msgstr "Establecer estado por defecto" + +msgctxt "#60594" +msgid "All channels" +msgstr "Todos los canales" + +msgctxt "#60595" +msgid " [COLOR grey](Default disabled)[/COLOR]" +msgstr " [COLOR grey](Desactivado por defecto)[/COLOR]" + +msgctxt "#60596" +msgid "Channels" +msgstr "Canales" + +msgctxt "#60597" +msgid " Server #%s" +msgstr " Servidor #%s" + +msgctxt "#60598" +msgid "Configuration -- Video Library" +msgstr "configuración -- Videoteca" + +msgctxt "#60600" +msgid "Series" +msgstr "Series" + +msgctxt "#60601" +msgid "Video library update" +msgstr "Actualizar la videoteca" + +msgctxt "#60602" +msgid "Never" +msgstr "Nunca" + +msgctxt "#60603" +msgid "When Kodi starts" +msgstr "Al iniciar Kodi" + +msgctxt "#60604" +msgid "Once a day" +msgstr "Una sola vez al día" + +msgctxt "#60605" +msgid "At the start of Kodi and once a day" +msgstr "Al iniciar Kodi y al menos una vez al día" + +msgctxt "#60606" +msgid " Wait before updating at startup of Kodi" +msgstr " Esperar antes de actualizar al iniciar kodi" + +msgctxt "#60607" +msgid "When Kodi starts" +msgstr "Al iniciar Kodi" + +msgctxt "#60609" +msgid "10 sec" +msgstr "10 seg" + +msgctxt "#60610" +msgid "20 sec" +msgstr "20 seg" + +msgctxt "#60611" +msgid "30 sec" +msgstr "30 seg" + +msgctxt "#60612" +msgid "60 sec" +msgstr "60 seg" + +msgctxt "#60613" +msgid " Begin scheduled update from" +msgstr " Iniciar actualización programada a partir de las" + +msgctxt "#60614" +msgid " Search for new episodes in active tv series" +msgstr " Buscar nuevos episodios en las series activas" + +msgctxt "#60615" +msgid "Never" +msgstr "Nunca" + +msgctxt "#60616" +msgid "Always" +msgstr "Siempre" + +msgctxt "#60617" +msgid "According to new episodes" +msgstr "Según su emisión" + +msgctxt "#60618" +msgid " Search for content in" +msgstr " Realizar búsqueda de contenido en" + +msgctxt "#60619" +msgid "The folder of each tv series" +msgstr "La carpeta de cada serie" + +msgctxt "#60620" +msgid "All video library" +msgstr "Toda la videoteca" + +msgctxt "#60621" +msgid "Show links in" +msgstr "Mostrar los enlaces en" + +msgctxt "#60622" +msgid "Conventional window" +msgstr "Ventana convencional" + +msgctxt "#60623" +msgid "Pop-up window" +msgstr "Ventana emergente" + +msgctxt "#60624" +msgid " Maximum number of links to display (recommended for slow devices)" +msgstr " Numero máximo de enlaces a mostrar (recomendable para equipos lentos)" + +msgctxt "#60625" +msgid "All" +msgstr "Todos" + +msgctxt "#60626" +msgid " Sort by whitelist" +msgstr " Ordenar segun el orden de la lista blanca" + +msgctxt "#60627" +msgid " Remove the channel name at the beginning" +msgstr " Quitar el nombre del canal del principio" + +msgctxt "#60628" +msgid " Pop-up window: Replace \"View in\" with \"[V]\" and \"Download in\" with \"[D]\"" +msgstr " Ventana emergente: Reemplazar \"Ver en\" por \"[V]\" y \"Descargar en\" por \"[D]\"" + +msgctxt "#60629" +msgid "Database location" +msgstr "Ubicación de Base de datos" + +msgctxt "#60630" +msgid "Local" +msgstr "Local" + +msgctxt "#60631" +msgid "Remote" +msgstr "Remota" + +msgctxt "#60632" +msgid " Server Name" +msgstr " Nombre Servidor" + +msgctxt "#60633" +msgid " Server port" +msgstr " Puerto Servidor" + +msgctxt "#60634" +msgid "Automatically mark as watched" +msgstr "Marcar automáticamente como visto" + +msgctxt "#60635" +msgid " Video viewing time" +msgstr " Tiempo necesario del video" + +msgctxt "#60636" +msgid "0 seg" +msgstr "0 seg" + +msgctxt "#60637" +msgid "Synchronizing with Trakt" +msgstr "Sincronización con Trakt" + +msgctxt "#60638" +msgid " After mark as watched the episode" +msgstr " Tras marcar como visto el episodio" + +msgctxt "#60639" +msgid " Show notification" +msgstr " Mostrar notificación" + +msgctxt "#60640" +msgid " On adding a TV series to the video library" +msgstr " Al añadir una serie a la videoteca" + +msgctxt "#60641" +msgid " Wait until the tv series is added" +msgstr " Esperar a que se añada la serie a la videoteca" + +msgctxt "#60642" +msgid "Show option \"All Seasons\"." +msgstr "Mostrar la opción \"Todas las temporadas\"" + +msgctxt "#60643" +msgid "Do not combine the seasons of the series"" +msgstr "No apilar temporadas de series"" + +msgctxt "#60644" +msgid "Only if there is one season" +msgstr "Sólo si hay una temporada" + +msgctxt "#60645" +msgid "Show channel selection box" +msgstr "Mostrar cuadro de selección de canales" + +msgctxt "#60646" +msgid "Create directories on your system using" +msgstr "Crear directorios en el sistema usando" + +msgctxt "#60647" +msgid "Localized title" +msgstr "Título localizado" + +msgctxt "#60648" +msgid "Never" +msgstr "Nunca" + +msgctxt "#60649" +msgid "Original title" +msgstr "Título original" + +msgctxt "#60650" +msgid "When you add content, you get information from:" +msgstr "Al añadir contenido, obtener información de:" + +msgctxt "#60651" +msgid " Movies:" +msgstr " Peliculas:" + +msgctxt "#60652" +msgid " TV Series:" +msgstr " Series:" + +msgctxt "#60653" +msgid " If there are no results also search in English" +msgstr " Si no hay resultados buscar también en Inglés" + +msgctxt "#60654" +msgid "Include in blacklist" +msgstr "Incluir en lista negra" + +msgctxt "#60655" +msgid "Include in Favorites List" +msgstr "Incluir en lista de favoritos" + +msgctxt "#60656" +msgid "Simultaneous search (multiprocessing)" +msgstr "Buscar de manera concurrente (multiprocesos)" + +msgctxt "#60657" +msgid "Show Results:" +msgstr "Mostrar resultados:" + +msgctxt "#60658" +msgid "Grouped by content" +msgstr "Agrupados por contenido" + +msgctxt "#60659" +msgid "Grouped by channel" +msgstr "Agrupados por canales" + +msgctxt "#60660" +msgid "Without group" +msgstr "Sin Agrupar" + +msgctxt "#60661" +msgid "News" +msgstr "Novedades" + +msgctxt "#60662" +msgid "code cleaning" +msgstr "limpieza código" + +msgctxt "#60663" +msgid "Add the progress window" +msgstr "Añadir cuadro de progreso" + +msgctxt "#60664" +msgid "Eliminated unnecessary code." +msgstr "Eliminado código innecesario." + +msgctxt "#60665" +msgid "Possibility to include other channels, through the configuration" +msgstr "Posibilidad de incluir otros canales, mediante configuracion" + +msgctxt "#60666" +msgid "Color Profile" +msgstr "Perfil de color" + +msgctxt "#60667" +msgid "Cold" +msgstr "Frio" + +msgctxt "#60668" +msgid "Hot" +msgstr "Calido" + +msgctxt "#60669" +msgid "Lilac" +msgstr "Lila" + +msgctxt "#60670" +msgid "Pastel" +msgstr "Pastel" + +msgctxt "#60671" +msgid "Vivid" +msgstr "Vivos" + +msgctxt "#60672" +msgid "Global Search" +msgstr "Buscador global" + +msgctxt "#60673" +msgid "MultiThread Search" +msgstr "Buscador MultiThread" + +msgctxt "#60674" +msgid "Show Results:" +msgstr "Mostrar resultados:" + +msgctxt "#60675" +msgid "Per channel" +msgstr "Por canales" + +msgctxt "#60676" +msgid "All Together" +msgstr "Todo junto" + +msgctxt "#60677" +msgid "Saved Searches:" +msgstr "Busquedas guardadas:" + +msgctxt "#60678" +msgid "Remember the latest search" +msgstr "Recordar última búsqueda" + +msgctxt "#60679" +msgid "Novelties in %s" +msgstr "Novedades en %s" + +msgctxt "#60680" +msgid "documentaries" +msgstr "documentales" + +msgctxt "#60681" +msgid "movies" +msgstr "peliculas" + +msgctxt "#60682" +msgid "tv series" +msgstr "series" + +msgctxt "#60683" +msgid "anime" +msgstr "anime" + +msgctxt "#70000" +msgid "Options" +msgstr "Opciones" + +msgctxt "#70001" +msgid "OK" +msgstr "OK" + +msgctxt "#70002" +msgid "Cancel" +msgstr "Cancelar" + +msgctxt "#70003" +msgid "Default" +msgstr "Por defecto" + +msgctxt "#70004" +msgid "Loading..." +msgstr "Cargando..." + +msgctxt "#70005" +msgid "Previous" +msgstr "Anterior" + +msgctxt "#70006" +msgid "Next" +msgstr "Siguiente" + +msgctxt "#70007" +msgid "Accept" +msgstr "Aceptar" + +msgctxt "#70008" +msgid "Reload" +msgstr "Recargar" + +msgctxt "#70009" +msgid "Classic Menu" +msgstr "Menu Clasico" + +msgctxt "#70010" +msgid "Where To Search" +msgstr "Donde buscar" + +msgctxt "#70011" +msgid "Search for actor" +msgstr "Buscar por actor" + +msgctxt "#70012" +msgid "Beginning" +msgstr "Inìcio" + +msgctxt "#70013" +msgid "Terror" +msgstr "Terror" + +msgctxt "#70014" +msgid "Castellan" +msgstr "Castellano" + +msgctxt "#70015" +msgid "Torrents" +msgstr "Torrents" + +msgctxt "#70016" +msgid "Active channels" +msgstr "Canales activos" + +msgctxt "#70017" +msgid "TV Series" +msgstr "Series" + +msgctxt "#70018" +msgid "Children" +msgstr "Infantiles" + +msgctxt "#70019" +msgid "Documentary" +msgstr "Documentales" + +msgctxt "#70020" +msgid "[COLOR yellow]Search similar[/COLOR]" +msgstr "[COLOR yellow]Cerca simili[/COLOR]" + +msgctxt "#70021" +msgid "Search in TMDB" +msgstr "Búsqueda en TMDB" + +msgctxt "#70022" +msgid " - Movies" +msgstr " - Películas" + +msgctxt "#70023" +msgid " - TV Shows" +msgstr " - Series" + +msgctxt "#70024" +msgid "Search in Filmaffinity" +msgstr "Búsqueda en Filmaffinity" + +msgctxt "#70025" +msgid "Search in IMDB" +msgstr "Búsqueda en IMDB" + +msgctxt "#70026" +msgid "MyAnimeList" +msgstr "MyAnimeList" + +msgctxt "#70027" +msgid "Search engine settings" +msgstr "Ajustes motores de búsqueda" + +msgctxt "#70028" +msgid "Most Popular" +msgstr "Más Populares" + +msgctxt "#70029" +msgid "Top rated" +msgstr "Más Valoradas" + +msgctxt "#70030" +msgid "On The Bill" +msgstr "En Cartelera" + +msgctxt "#70031" +msgid "Next" +msgstr "En Emisión" + +msgctxt "#70032" +msgid "Genres" +msgstr "Géneros" + +msgctxt "#70033" +msgid "Actors / Actresses by popularity" +msgstr "Actores/Actrices por popularidad" + +msgctxt "#70034" +msgid "Coming Soon" +msgstr "Próximamente" + +msgctxt "#70035" +msgid "Search %s" +msgstr "Buscar %s" + +msgctxt "#70036" +msgid "Search actor/actress" +msgstr "Buscar actor/actriz" + +msgctxt "#70037" +msgid "Search director, writer..." +msgstr "Buscar director, guionista..." + +msgctxt "#70038" +msgid "Custom Filter" +msgstr "Filtro Personalizado" + +msgctxt "#70039" +msgid "Keyword filter" +msgstr "Filtro por palabra clave" + +msgctxt "#70040" +msgid "Top Filmaffinity" +msgstr "Top Filmaffinity" + +msgctxt "#70041" +msgid "Modern TV Shows" +msgstr "Series de actualidad" + +msgctxt "#70042" +msgid "Year" +msgstr "Año" + +msgctxt "#70043" +msgid "Coming Out" +msgstr "Próximos Estrenos" + +msgctxt "#70044" +msgid "Sagas and Collections" +msgstr "Sagas y Colecciones" + +msgctxt "#70045" +msgid "Movies/TV Shows/Documentaries by Themes" +msgstr "Películas/Series/Documentales por Temas"" + +msgctxt "#70046" +msgid "Search Movies/TV Shows" +msgstr "Buscar Películas/Series" + +msgctxt "#70047" +msgid " Search by director" +msgstr " Buscar por director" + +msgctxt "#70048" +msgid " My Account" +msgstr " Mi Cuenta" + +msgctxt "#70049" +msgid " Most Popular" +msgstr " Más Populares" + +msgctxt "#70050" +msgid " Recommended Now" +msgstr " Viéndose Ahora" + +msgctxt "#70051" +msgid " Most Anticipated " +msgstr " Más Esperadas" + +msgctxt "#70052" +msgid " Custom recommendations" +msgstr " Recomendaciones personalizadas" + +msgctxt "#70053" +msgid " Most Viewed" +msgstr " Más Vistas" + +msgctxt "#70054" +msgid "Link your trakt account" +msgstr "Vincula tu cuenta trakt" + +msgctxt "#70055" +msgid "Watchlists" +msgstr "Watchlists" + +msgctxt "#70056" +msgid "Viewed " +msgstr "Vistas" + +msgctxt "#70057" +msgid "My lists" +msgstr "Mis listas" + +msgctxt "#70058" +msgid "Top Series" +msgstr "Top Serie TV" + +msgctxt "#70059" +msgid "Top Movies" +msgstr "Top Películas" + +msgctxt "#70060" +msgid "Most Anticipated" +msgstr "Más Esperados" + +msgctxt "#70061" +msgid "Top Anime" +msgstr "Top Ovas" + +msgctxt "#70062" +msgid "Anime by Seasons" +msgstr "Anime por Temporadas" + +msgctxt "#70063" +msgid "Anime by Genres" +msgstr "Anime por Géneros" + +msgctxt "#70064" +msgid "Search Tv Shows/Movies/Anime" +msgstr "Buscar Series/Películas/Ovas" + +msgctxt "#70065" +msgid ">> Next Page" +msgstr ">> Página siguiente"" + +msgctxt "#70066" +msgid " Search title in spanish: %s" +msgstr " Buscar por su título en español: %s" + +msgctxt "#70067" +msgid "Info Seasons [%s]" +msgstr "Info de temporadas [%s]" + +msgctxt "#70068" +msgid "In my Collection" +msgstr "En mi Colección" + +msgctxt "#70069" +msgid "Search %s in alfa: %s" +msgstr "Buscar %s en alfa: %s" + +msgctxt "#70070" +msgid " Search original title: %s" +msgstr " Buscar por su nombre original: %s" + +msgctxt "#70071" +msgid "Cast" +msgstr "Ver Reparto" + +msgctxt "#70072" +msgid " Most Viewed" +msgstr " Más Vistas" + +msgctxt "#70073" +msgid "Most Anticipated" +msgstr "Más Esperados" + +msgctxt "#70074" +msgid "Viewed" +msgstr "Vistas" + +msgctxt "#70075" +msgid "Most Anticipated" +msgstr " Más Esperadas" + +msgctxt "#70076" +msgid "Top rated" +msgstr "Más Valoradas" + +msgctxt "#70077" +msgid " Most Viewed" +msgstr " Más Vistas" + +msgctxt "#70078" +msgid "Show only links of " +msgstr "Mostrar solo los enlaces de " + +msgctxt "#70079" +msgid "Remove only links of " +msgstr "Eliminar solo los enlaces de " + +msgctxt "#70080" +msgid "Do you want Alfa to auto-configure Kodi's video library?" +msgstr "¿Desea que Alfa auto-configure la videoteca de Kodi?" + +msgctxt "#70081" +msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." +msgstr "Si pulsa 'No' podra hacerlo desde 'Configuración > Preferencia > Rutas'." + +msgctxt "#70082" +msgid "Global Search" +msgstr "Buscador global" + +msgctxt "#70083" +msgid "Show all links" +msgstr "Mostrar todos los enlaces" + +msgctxt "#70084" +msgid "Delete movie" +msgstr "Eliminar película" + +msgctxt "#70085" +msgid "Delete TV Show" +msgstr "Eliminar serie" + +msgctxt "#70086" +msgid "Remove only links of %s" +msgstr "Eliminar solo los enlaces de %s" + +msgctxt "#70087" +msgid "Deleted %s links from canal %s" +msgstr "Eliminados %s enlaces del canal %s" + +msgctxt "#70088" +msgid "Are you sure you want to delete '%s' from videolibrary ?" +msgstr "¿Realmente desea eliminar '%s' de su videoteca?" + +msgctxt "#70089" +msgid "Show only links of %s" +msgstr "Mostrar solo los enlaces de %s " + +msgctxt "#70090" +msgid " Exclude all streams with specific words" +msgstr " Excluir los streams que contienen etiquetas específicas" + +msgctxt "#70091" +msgid " Words" +msgstr " Etiquetas" + +msgctxt "#70092" +msgid "Add to videolibrary" +msgstr "Añadir a la videoteca" + +msgctxt "#70093" +msgid "The Movie Database" +msgstr "The Movie Database" + +msgctxt "#70094" +msgid "Select scraper for movies" +msgstr "Seleccione el scraper para las películas" + +msgctxt "#70095" +msgid "Universal Movie Scraper not present.\nInstall it now?" +msgstr "Universal Movie Scraper\nNo se ha encontrado el Scraper de películas de TheMovieDB.\n¿Desea instalarlo ahora?" + +msgctxt "#70096" +msgid "Universal Movie Scraper" +msgstr "Universal Movie Scraper" + +msgctxt "#70097" +msgid "Universal Movie Scraper not installed." +msgstr "Universal Movie Scraper no instalado." + +msgctxt "#70098" +msgid "The TVDB" +msgstr "The TVDB" + +msgctxt "#70099" +msgid "The TVDB not installed." +msgstr "The TVDB no instalado." + +msgctxt "#70100" +msgid "The Movie Database not present.\nInstall it now?" +msgstr "The Movie Database\nNo se ha encontrado el Scraper de series de TheMovieDB.\n¿Desea instalarlo ahora?" + +msgctxt "#70101" +msgid "Error fixing videolibrarypath in BD" +msgstr "Error al fijar videolibrarypath en BD" + +msgctxt "#70102" +msgid "Videolibrary %s not configured" +msgstr "Videoteca %s no configurada" + +msgctxt "#70103" +msgid "Videolibrary %s configured" +msgstr "Videoteca %s configurada" + +msgctxt "#70104" +msgid "Congratulations, the Kodi video library has been configured correctly." +msgstr "Felicidades la videoteca de Kodi ha sido configurada correctamente." + +msgctxt "#70105" +msgid "Do you want Alfa to automatically configure the Kodi library?You will be asked to set up scrapers for movies and series." +msgstr "¿Desea que Alfa auto-configure la videoteca de Kodi?Se le pedirá que configure los scrapers para las películas y las series." + +msgctxt "#70106" +msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." +msgstr "Si pulsa 'No' podra hacerlo desde 'Configuración > Preferencia > Rutas'." + +msgctxt "#70107" +msgid "Select scraper for Tv Shows" +msgstr "Seleccione el scraper para las series" + +msgctxt "#70108" +msgid "Icons Set" +msgstr "Set de iconos" + +msgctxt "#70109" +msgid "Sync with Trakt.tv (You must have an account)" +msgstr "Sincronizar con Trakt.tv (Debes tener una cuenta)" + +msgctxt "#70110" +msgid "Priority Method" +msgstr "Método prioritario" + +msgctxt "#70111" +msgid "Stop looking when you find an option" +msgstr "Dejar de buscar cuando encuentre una opción" + +msgctxt "#70112" +msgid "Hide payment servers without an account" +msgstr "Ocultar servidores de pago sin cuenta" + +msgctxt "#70113" +msgid "Password (default 0000)" +msgstr "Contraseña (por defecto 0000):" + +msgctxt "#70114" +msgid "Only until Kodi restarts" +msgstr "Solo hasta que se reinicie Kodi" + +msgctxt "#70115" +msgid "Request password to open adult channels" +msgstr "Solicitar contraseña para abrir canales de adultos" + +msgctxt "#70116" +msgid "New password:" +msgstr "Nueva contraseña:" + +msgctxt "#70117" +msgid "Confirm New password:" +msgstr "Confirmar nueva contraseña:" + +msgctxt "#70118" +msgid "Folder name for 'Series'" +msgstr "Nombre de carpeta para 'Series'" + +msgctxt "#70119" +msgid "Folder name for 'Movies'" +msgstr "Nombre de carpeta para 'Peliculas'" + +msgctxt "#70120" +msgid "Autoconfigure XBMC / Kodi library for Alfa content" +msgstr "Autoconfigurar videoteca de XBMC/Kodi para contenido de Alfa" + +msgctxt "#70121" +msgid "Activate Home Page" +msgstr "Activar pagina de inicio" + +msgctxt "#70122" +msgid "Custom (select from a channel)" +msgstr "Personalizado (seleccionar desde un canal)" + +msgctxt "#70123" +msgid "Show Recent" +msgstr "Mostrar Novedades" + +msgctxt "#70124" +msgid "Category" +msgstr "Categoria" + +msgctxt "#70125" +msgid "Movie|Tv Shows|Anime|Children|Documentary|Horror|Castellan|Latin|Torrent" +msgstr "Peliculas|Series|Anime|Infantiles|Documentales|Terror|Castellano|Latino|Torrent" + +msgctxt "#70126" +msgid "Visual Options" +msgstr "Opciones Visuales" + +msgctxt "#70127" +msgid "Anime" +msgstr "Anime" + +msgctxt "#70128" +msgid "Infoplus visual option" +msgstr "Opción visual Infoplus" + +msgctxt "#70129" +msgid "Without animation" +msgstr "Sin animación" + +msgctxt "#70130" +msgid "With animation" +msgstr "Con animación" + +msgctxt "#70131" +msgid "Thumbnail for videos" +msgstr "Thumbnail para videos" + +msgctxt "#70132" +msgid "Poster" +msgstr "Poster" + +msgctxt "#70133" +msgid "Server logo" +msgstr "Logo del servidor" + +msgctxt "#70134" +msgid "Intelligent Titles" +msgstr "Titulos Inteligentes" + +msgctxt "#70135" +msgid "Custom Colours" +msgstr "Colores Personalizados" + +msgctxt "#70136" +msgid "Tv Show" +msgstr "Serie" + +msgctxt "#70137" +msgid "Movie" +msgstr "Pelicula" + +msgctxt "#70138" +msgid "Low Rating" +msgstr "Valoracion Baja" + +msgctxt "#70139" +msgid "Average Rating" +msgstr "Valoracion Media" + +msgctxt "#70140" +msgid "High Rating" +msgstr "Valoracion Alta" + +msgctxt "#70141" +msgid "Quality" +msgstr "Calidad" + +msgctxt "#70142" +msgid "VOSE (Original Subtitled Spanish Version)" +msgstr "VOSE (Versión Original Subtitulado Español)" + +msgctxt "#70143" +msgid "VOS (Original Subtitled Version)" +msgstr "VOS (Versión Original Subtitulado)" + +msgctxt "#70144" +msgid "VO (Original Version)" +msgstr "VO (Versión Original)" + +msgctxt "#70145" +msgid "Servers" +msgstr "Servidores" + +msgctxt "#70146" +msgid "Add to videolibrary" +msgstr "Añadir a Videoteca" + +msgctxt "#70147" +msgid "Videolibrary (Update series)" +msgstr "Videoteca (Actualizar serie)" + +msgctxt "#70148" +msgid "Videolibrary (Do not update series)" +msgstr "Videoteca (No actualizar serie)" + +msgctxt "#70149" +msgid "Others" +msgstr "Otros" + +msgctxt "#70150" +msgid "Movie/series info in contextual menu" +msgstr "Info de películas/series en menú contextual" + +msgctxt "#70151" +msgid "Show Infoplus option:" +msgstr "Mostrar opción Infoplus:" + +msgctxt "#70152" +msgid "Show ExtendedInfo option (External addon required):" +msgstr "Mostrar opción ExtendedInfo (Necesario addon externo):" + +msgctxt "#70153" +msgid "Buttons/Access keys (Changes require Kodi restart)" +msgstr "Botones/Teclas de acceso (Cambios requieren reiniciar Kodi)" + +msgctxt "#70154" +msgid "TheMovieDB (obtains data from movies or series)" +msgstr "TheMovieDB (obtiene datos de las películas o series)" + +msgctxt "#70155" +msgid "Simultaneous searches (may cause instability)" +msgstr "Búsquedas simultáneas (puede causar inestabilidad)" + +msgctxt "#70156" +msgid "Search extended information (actor's data) Increase search time" +msgstr "Buscar información extendida (datos de actores) Aumenta el tiempo de búsqueda" + +msgctxt "#70157" +msgid "Use cache (improves recurring searches)" +msgstr "Usar caché (mejora las búsquedas recurrentes)" + +msgctxt "#70158" +msgid "every 1 day" +msgstr "cada 1 día" + +msgctxt "#70159" +msgid "every 7 days" +msgstr "cada 7 días" + +msgctxt "#70160" +msgid "every 15 days" +msgstr "cada 15 días" + +msgctxt "#70161" +msgid "every 30 days" +msgstr "cada 30 días" + +msgctxt "#70162" +msgid "Renew cache?" +msgstr "¿Renovar caché?" + +msgctxt "#70163" +msgid "Press to 'Clear cache' saved" +msgstr "Pulse para 'Borrar caché' guardada" + +msgctxt "#70164" +msgid "Free First|Premium First|Debriders First" +msgstr "Free primero|Premium primero|Debriders primero" + +msgctxt "#70167" +msgid "Titles Options" +msgstr "Opciones para Titulos" + +msgctxt "#70168" +msgid "General" +msgstr "Generale" + +msgctxt "#70169" +msgid "Servers use" +msgstr "Uso de servidores" + +msgctxt "#70170" +msgid "No" +msgstr "No" + +msgctxt "#70171" +msgid "Torrent" +msgstr "Torrent" + +msgctxt "#70172" +msgid " Plan B (If favourites fail try other links)" +msgstr " Plan B (Si fallan los favoritos prueba otros enlaces)" + +msgctxt "#70173" +msgid "No working links" +msgstr "No hubo enlaces funcionales" + +msgctxt "#70174" +msgid "Server and Quality" +msgstr "Servidor y Calidad" + +msgctxt "#70175" +msgid "Quality and Server" +msgstr "Calidad y Servidor" + +msgctxt "#70176" +msgid "Wait" +msgstr "Espera" + +msgctxt "#70177" +msgid "seconds for the video to start ..." +msgstr "segundos para que comience el vídeo..." + +msgctxt "#70178" +msgid "Trying with: %s" +msgstr "Probando con: %s" + +msgctxt "#70179" +msgid "Getting list of available servers ..." +msgstr "Obteniendo lista de servidores disponibles..." + +msgctxt "#70180" +msgid "Connecting with %s..." +msgstr "Conectando con %s..." + +msgctxt "#70181" +msgid "Available servers: %s" +msgstr "Servidores disponibles: %s" + +msgctxt "#70182" +msgid "Identifying servers ..." +msgstr "Identificando servidores..." + +msgctxt "#70183" +msgid "Getting list of available servers" +msgstr "Obteniendo lista de servidores disponibles" + +msgctxt "#70184" +msgid "Getting list of available servers:" +msgstr "Obteniendo lista de servidores disponibles:" + +msgctxt "#70185" +msgid " chapters of: " +msgstr " capitulos de: " + +msgctxt "#70186" +msgid "Getting episodes..." +msgstr "Obteniendo episodios..." + +msgctxt "#70187" +msgid "connecting with %s..." +msgstr "conectando con %s..." + +msgctxt "#70188" +msgid "Obtaining data from the series" +msgstr "Obteniendo datos de la serie" + +msgctxt "#70189" +msgid "Start the download now?" +msgstr "¿Iniciar la descarga ahora?" + +msgctxt "#70190" +msgid "Add chapters..." +msgstr "Añadiendo capitulos..." + +msgctxt "#70191" +msgid "Obtaining data from the movie" +msgstr "Obteniendo datos de la pelicula" + +msgctxt "#70192" +msgid "Select server" +msgstr "Selecciona el servidor" + +msgctxt "#70193" +msgid "Open torrent with..." +msgstr "Abrir torrent con..." + +msgctxt "#70194" +msgid "alfa-torrent" +msgstr "alfa-torrent" + +msgctxt "#70195" +msgid "Alfa - Torrent" +msgstr "Alfa - Torrent" + +msgctxt "#70196" +msgid "Beginning..." +msgstr "Iniciando..." + +msgctxt "#70197" +msgid "Automatically stopping at: %ss" +msgstr "Deteniendo automaticamente en: %ss" + +msgctxt "#70198" +msgid "Do you want to start playback?" +msgstr "¿Deseas iniciar la reproduccion?" + +msgctxt "#70199" +msgid "Do you want to cancel the process?" +msgstr "¿Deseas cancelar el proceso?" + +msgctxt "#70200" +msgid "Finishing and deleting data" +msgstr "Terminando y eliminando datos" + +msgctxt "#70201" +msgid "Mass Testing Tools" +msgstr "Herramientas de Testeo masivo" + +msgctxt "#70202" +msgid "- Test channels ..." +msgstr "- Testear canales ..." + +msgctxt "#70203" +msgid "- Test servers ..." +msgstr "- Testear servidores ..." + +msgctxt "#70204" +msgid "- Test recent!" +msgstr "- Testear novedades!" + +msgctxt "#70205" +msgid "- Upload tests to web!" +msgstr "- Upload tests to web!" + +msgctxt "#70206" +msgid "Link found in %s" +msgstr "Enlace encontrado en %s" \ No newline at end of file From 693e73da50ef697bd4db59b782620af39dd880e8 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 16 Jun 2018 18:19:09 +0200 Subject: [PATCH 05/66] Add files via upload --- plugin.video.alfa/channels/news.json | 20 ++++---- plugin.video.alfa/channels/news.py | 72 ++++++++++++++-------------- 2 files changed, 46 insertions(+), 46 deletions(-) diff --git a/plugin.video.alfa/channels/news.json b/plugin.video.alfa/channels/news.json index 1e59c761..6c023757 100755 --- a/plugin.video.alfa/channels/news.json +++ b/plugin.video.alfa/channels/news.json @@ -11,7 +11,7 @@ { "id": "multithread", "type": "bool", - "label": "Buscar de manera concurrente (multiprocesos)", + "label": "$ADDON[plugin.video.alfa 60656]", "default": true, "enabled": true, "visible": true @@ -19,14 +19,14 @@ { "id": "result_mode", "type": "list", - "label": "Mostrar resultados:", + "label": "$ADDON[plugin.video.alfa 60657]", "default": 2, "enabled": true, "visible": true, "lvalues": [ - "Agrupados por contenido", - "Agrupados por canales", - "Sin Agrupar" + "$ADDON[plugin.video.alfa 60658]", + "$ADDON[plugin.video.alfa 60659]", + "$ADDON[plugin.video.alfa 60660]" ] }, { @@ -37,11 +37,11 @@ "enabled": true, "visible": true, "lvalues": [ - "Frio", - "Calido", - "Lila", - "Pastel", - "Vivos" + "$ADDON[plugin.video.alfa 60667]", + "$ADDON[plugin.video.alfa 60668]", + "$ADDON[plugin.video.alfa 60669]", + "$ADDON[plugin.video.alfa 60670]", + "$ADDON[plugin.video.alfa 60671]" ] } ] diff --git a/plugin.video.alfa/channels/news.py b/plugin.video.alfa/channels/news.py index 27d198ee..4de9ff08 100644 --- a/plugin.video.alfa/channels/news.py +++ b/plugin.video.alfa/channels/news.py @@ -48,69 +48,69 @@ def mainlist(item): #if list_canales['peliculas']: thumbnail = get_thumb("channels_movie.png") - new_item = Item(channel=item.channel, action="novedades", extra="peliculas", title="Películas", + new_item = Item(channel=item.channel, action="novedades", extra="peliculas", title=config.get_localized_string(30122), thumbnail=thumbnail) set_category_context(new_item) itemlist.append(new_item) thumbnail = get_thumb("channels_movie_4k.png") - new_item = Item(channel=item.channel, action="novedades", extra="4k", title="Películas 4K", thumbnail=thumbnail) + new_item = Item(channel=item.channel, action="novedades", extra="4k", title=config.get_localized_string(70208), thumbnail=thumbnail) set_category_context(new_item) itemlist.append(new_item) #if list_canales['terror']: thumbnail = get_thumb("channels_horror.png") - new_item = Item(channel=item.channel, action="novedades", extra="terror", title="Peliculas de miedo!", + new_item = Item(channel=item.channel, action="novedades", extra="terror", title=config.get_localized_string(70209), thumbnail=thumbnail) set_category_context(new_item) itemlist.append(new_item) #if list_canales['infantiles']: thumbnail = get_thumb("channels_children.png") - new_item = Item(channel=item.channel, action="novedades", extra="infantiles", title="Para niños", + new_item = Item(channel=item.channel, action="novedades", extra="infantiles", title=config.get_localized_string(60510), thumbnail=thumbnail) set_category_context(new_item) itemlist.append(new_item) #if list_canales['series']: thumbnail = get_thumb("channels_tvshow.png") - new_item = Item(channel=item.channel, action="novedades", extra="series", title="Episodios de series", + new_item = Item(channel=item.channel, action="novedades", extra="series", title=config.get_localized_string(60511), thumbnail=thumbnail) set_category_context(new_item) itemlist.append(new_item) #if list_canales['anime']: thumbnail = get_thumb("channels_anime.png") - new_item = Item(channel=item.channel, action="novedades", extra="anime", title="Episodios de anime", + new_item = Item(channel=item.channel, action="novedades", extra="anime", title=config.get_localized_string(60512), thumbnail=thumbnail) set_category_context(new_item) itemlist.append(new_item) # if list_canales['Castellano']: thumbnail = get_thumb("channels_spanish.png") - new_item = Item(channel=item.channel, action="novedades", extra="castellano", title="Castellano", + new_item = Item(channel=item.channel, action="novedades", extra="castellano", title=config.get_localized_string(70014), thumbnail=thumbnail) set_category_context(new_item) itemlist.append(new_item) # if list_canales['Latino']: thumbnail = get_thumb("channels_latino.png") - new_item = Item(channel=item.channel, action="novedades", extra="latino", title="Latino", + new_item = Item(channel=item.channel, action="novedades", extra="latino", title=config.get_localized_string(59976), thumbnail=thumbnail) set_category_context(new_item) itemlist.append(new_item) # if list_canales['Torrent']: thumbnail = get_thumb("channels_torrent.png") - new_item = Item(channel=item.channel, action="novedades", extra="torrent", title="Torrent", thumbnail=thumbnail) + new_item = Item(channel=item.channel, action="novedades", extra="torrent", title=config.get_localized_string(70171), thumbnail=thumbnail) set_category_context(new_item) itemlist.append(new_item) #if list_canales['documentales']: thumbnail = get_thumb("channels_documentary.png") - new_item = Item(channel=item.channel, action="novedades", extra="documentales", title="Documentales", + new_item = Item(channel=item.channel, action="novedades", extra="documentales", title=config.get_localized_string(60513), thumbnail=thumbnail) set_category_context(new_item) itemlist.append(new_item) @@ -119,11 +119,11 @@ def mainlist(item): def set_category_context(item): - item.context = [{"title": "Canales incluidos en: %s" % item.title, + item.context = [{"title": config.get_localized_string(60514) % item.title, "extra": item.extra, "action": "setting_channel", "channel": item.channel}] - item.category = "Novedades en %s" % item.extra + item.category = config.get_localized_string(60679) % item.extra def get_channels_list(): @@ -233,15 +233,15 @@ def novedades(item): logger.info("multithread= " + str(multithread)) if not multithread: - if platformtools.dialog_yesno("Búsqueda concurrente desactivada", - "La búsqueda concurrente de novedades proporciona", - "una mayor velocidad y su desactivación solo es aconsejable en caso de fallo.", - "¿Desea activar la búsqueda concurrente ahora?"): + if platformtools.dialog_yesno(config.get_localized_string(60515), + config.get_localized_string(60516), + config.get_localized_string(60517), + config.get_localized_string(60518)): if config.set_setting("multithread", True, "news"): multithread = True if mode == 'normal': - progreso = platformtools.dialog_progress(item.category, "Buscando canales...") + progreso = platformtools.dialog_progress(item.category, config.get_localized_string(60519)) list_canales, any_active = get_channels_list() @@ -276,13 +276,13 @@ def novedades(item): t.start() threads.append(t) if mode == 'normal': - progreso.update(percentage, "", "Buscando en '%s'..." % channel_title) + progreso.update(percentage, "", config.get_localized_string(60520) % channel_title) # Modo single Thread else: if mode == 'normal': logger.info("Obteniendo novedades de channel_id=" + channel_id) - progreso.update(percentage, "", "Buscando en '%s'..." % channel_title) + progreso.update(percentage, "", config.get_localized_string(60520) % channel_title) get_newest(channel_id, item.extra) # Modo Multi Thread: esperar q todos los hilos terminen @@ -295,8 +295,8 @@ def novedades(item): list_pendent_names = [a.getName() for a in pendent] if mode == 'normal': - mensaje = "Buscando en %s" % (", ".join(list_pendent_names)) - progreso.update(percentage, "Finalizado en %d/%d canales..." % (len(threads) - len(pendent), len(threads)), + mensaje = config.get_localized_string(30994) % (", ".join(list_pendent_names)) + progreso.update(percentage, config.get_localized_string(60521) % (len(threads) - len(pendent), len(threads)), mensaje) logger.debug(mensaje) @@ -307,7 +307,7 @@ def novedades(item): time.sleep(0.5) pendent = [a for a in threads if a.isAlive()] if mode == 'normal': - mensaje = "Resultados obtenidos: %s | Tiempo: %2.f segundos" % (len(list_newest), time.time() - start_time) + mensaje = config.get_localized_string(60522) % (len(list_newest), time.time() - start_time) progreso.update(100, mensaje, " ", " ") logger.info(mensaje) start_time = time.time() @@ -492,9 +492,9 @@ def group_by_content(list_result_canal): if len(canales_no_duplicados) > 1: canales = ', '.join([i for i in canales_no_duplicados[:-1]]) - title += " (En %s y %s)" % (canales, canales_no_duplicados[-1]) + title += config.get_localized_string(70210) % (canales, canales_no_duplicados[-1]) else: - title += " (En %s)" % (', '.join([i for i in canales_no_duplicados])) + title += config.get_localized_string(70211) % (', '.join([i for i in canales_no_duplicados])) new_item = v[0].clone(channel="news", title=title, action="show_channels", sub_list=[i.tourl() for i in v], extra=channels_id_name) @@ -531,47 +531,47 @@ def show_channels(item): def menu_opciones(item): itemlist = list() - itemlist.append(Item(channel=item.channel, title="Canales incluidos en:", + itemlist.append(Item(channel=item.channel, title=config.get_localized_string(60525), thumbnail=get_thumb("setting_0.png"), folder=False)) - itemlist.append(Item(channel=item.channel, action="setting_channel", extra="peliculas", title=" - Películas ", + itemlist.append(Item(channel=item.channel, action="setting_channel", extra="peliculas", title=config.get_localized_string(60526), thumbnail=get_thumb("channels_movie.png"), folder=False)) - itemlist.append(Item(channel=item.channel, action="setting_channel", extra="4K", title=" - Películas 4K ", + itemlist.append(Item(channel=item.channel, action="setting_channel", extra="4K", title=config.get_localized_string(70207), thumbnail=get_thumb("channels_movie.png"), folder=False)) - itemlist.append(Item(channel=item.channel, action="setting_channel", extra="infantiles", title=" - Para niños", + itemlist.append(Item(channel=item.channel, action="setting_channel", extra="infantiles", title=config.get_localized_string(60527), thumbnail=get_thumb("channels_children.png"), folder=False)) itemlist.append(Item(channel=item.channel, action="setting_channel", extra="series", - title=" - Episodios de series", + title=config.get_localized_string(60528), thumbnail=get_thumb("channels_tvshow.png"), folder=False)) itemlist.append(Item(channel=item.channel, action="setting_channel", extra="anime", - title=" - Episodios de anime", + title=config.get_localized_string(60529), thumbnail=get_thumb("channels_anime.png"), folder=False)) itemlist.append( - Item(channel=item.channel, action="setting_channel", extra="castellano", title=" - Castellano", + Item(channel=item.channel, action="setting_channel", extra="castellano", title=config.get_localized_string(70212), thumbnail=get_thumb("channels_documentary.png"), folder=False)) - itemlist.append(Item(channel=item.channel, action="setting_channel", extra="latino", title=" - Latino", + itemlist.append(Item(channel=item.channel, action="setting_channel", extra="latino", title=config.get_localized_string(70213), thumbnail=get_thumb("channels_documentary.png"), folder=False)) - itemlist.append(Item(channel=item.channel, action="setting_channel", extra="Torrent", title=" - Torrent", + itemlist.append(Item(channel=item.channel, action="setting_channel", extra="Torrent", title=config.get_localized_string(70214), thumbnail=get_thumb("channels_documentary.png"), folder=False)) itemlist.append(Item(channel=item.channel, action="setting_channel", extra="documentales", - title=" - Documentales", + title=config.get_localized_string(60530), thumbnail=get_thumb("channels_documentary.png"), folder=False)) - itemlist.append(Item(channel=item.channel, action="settings", title="Otros ajustes", + itemlist.append(Item(channel=item.channel, action="settings", title=config.get_localized_string(60531), thumbnail=get_thumb("setting_0.png"), folder=False)) return itemlist def settings(item): - return platformtools.show_channel_settings(caption="configuración -- Novedades") + return platformtools.show_channel_settings(caption=config.get_localized_string(60532)) def setting_channel(item): From 65e2a8735f25e020240e8f22c3ca244087a187e4 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 16 Jun 2018 18:21:26 +0200 Subject: [PATCH 06/66] Add files via upload --- plugin.video.alfa/channels/videolibrary.json | 129 +++++++++---------- plugin.video.alfa/channels/videolibrary.py | 66 +++++----- 2 files changed, 93 insertions(+), 102 deletions(-) diff --git a/plugin.video.alfa/channels/videolibrary.json b/plugin.video.alfa/channels/videolibrary.json index 909f7563..23115606 100755 --- a/plugin.video.alfa/channels/videolibrary.json +++ b/plugin.video.alfa/channels/videolibrary.json @@ -8,38 +8,38 @@ { "id": "update", "type": "list", - "label": "Actualizar la videoteca", + "label": "$ADDON[plugin.video.alfa 60601]", "default": 1, "visible": true, "lvalues": [ - "Nunca", - "Al iniciar Kodi", - "Una sola vez al día", - "Al iniciar Kodi y al menos una vez al día" + "$ADDON[plugin.video.alfa 60602]", + "$ADDON[plugin.video.alfa 60603]", + "$ADDON[plugin.video.alfa 60604]", + "$ADDON[plugin.video.alfa 60605]" ] }, { "id": "update_wait", "type": "list", - "label": " Esperar antes de actualizar al iniciar kodi", + "label": "$ADDON[plugin.video.alfa 60606]", "default": 0, "visible": true, - "enabled": "eq(-1,Al iniciar Kodi)|eq(-1,Al iniciar Kodi y al menos una vez al día)", + "enabled": "eq(-1,$ADDON[plugin.video.alfa 60603])|eq(-1,$ADDON[plugin.video.alfa 60605])", "lvalues": [ "No", - "10 seg", - "20 seg", - "30 seg", - "60 seg" + "$ADDON[plugin.video.alfa 60609]", + "$ADDON[plugin.video.alfa 60610]", + "$ADDON[plugin.video.alfa 60611]", + "$ADDON[plugin.video.alfa 60612]" ] }, { "id": "everyday_delay", "type": "list", - "label": " Iniciar actualización programada a partir de las", + "label": "$ADDON[plugin.video.alfa 60613]", "default": 1, "visible": true, - "enabled": "eq(-2,Una sola vez al día)|eq(-2,Al iniciar Kodi y al menos una vez al día)", + "enabled": "eq(-2,$ADDON[plugin.video.alfa 60604])|eq(-2,$ADDON[plugin.video.alfa 60605])", "lvalues": [ "00:00", "04:00", @@ -50,37 +50,37 @@ { "id": "updatetvshows_interval", "type": "list", - "label": " Buscar nuevos episodios en las series activas", + "label": "$ADDON[plugin.video.alfa 60614]", "default": 0, "visible": true, - "enabled": "!eq(-3,Nunca)", + "enabled": "!eq(-3,$ADDON[plugin.video.alfa 60615])", "lvalues": [ - "Siempre", - "Según su emisión" + "$ADDON[plugin.video.alfa 60616]", + "$ADDON[plugin.video.alfa 60617]" ] }, { "id": "search_new_content", "type": "list", - "label": " Realizar búsqueda de contenido en", + "label": "[$ADDON[plugin.video.alfa 60618]", "default": 0, - "enabled": "!eq(-4,Nunca)", + "enabled": "!eq(-4,$ADDON[plugin.video.alfa 60615])", "lvalues": [ - "La carpeta de cada serie", - "Toda la videoteca" + "$ADDON[plugin.video.alfa 60619]", + "$ADDON[plugin.video.alfa 60620]" ] }, { "id": "addition", "type": "label", - "label": "Añadir a la videoteca", + "label": "$ADDON[plugin.video.alfa 70092]", "enabled": true, "visible": true }, { "id": "enable_filter", "type": "bool", - "label": " Excluir los streams que contienen etiquetas específicas", + "label": "$ADDON[plugin.video.alfa 70090]", "enabled": true, "visible": true, "default": false @@ -88,31 +88,32 @@ { "id": "filters", "type": "text", - "label": " Etiquetas", + "label": "$ADDON[plugin.video.alfa 70091]", "visible": true, "enabled": "eq(-1,true)" }, + { "id": "window_type", "type": "list", - "label": "Mostrar los enlaces en", - "default": 1, + "label": "$ADDON[plugin.video.alfa 60621]", + "default": 0, "enabled": true, "visible": true, "lvalues": [ - "Ventana convencional", - "Ventana emergente" + "$ADDON[plugin.video.alfa 60622]", + "$ADDON[plugin.video.alfa 60623]" ] }, { "id": "max_links", "type": "list", - "label": " Numero máximo de enlaces a mostrar (recomendable para equipos lentos)", + "label": "$ADDON[plugin.video.alfa 60624]", "default": 0, "enabled": true, "visible": true, "lvalues": [ - "Todos", + "$ADDON[plugin.video.alfa 60625]", "30", "60", "90", @@ -125,7 +126,7 @@ { "id": "white_list_order", "type": "bool", - "label": " Ordenar segun el orden de la lista blanca", + "label": "$ADDON[plugin.video.alfa 60626]", "enabled": true, "visible": true, "default": false @@ -133,7 +134,7 @@ { "id": "quit_channel_name", "type": "bool", - "label": " Quitar el nombre del canal del principio", + "label": "$ADDON[plugin.video.alfa 60627]", "enabled": true, "visible": true, "default": false @@ -141,7 +142,7 @@ { "id": "replace_VD", "type": "bool", - "label": " Ventana emergente: Reemplazar \"Ver en\" por \"[V]\" y \"Descargar en\" por \"[D]\"", + "label": "$ADDON[plugin.video.alfa 60628]", "enabled": true, "visible": true, "default": false @@ -149,33 +150,33 @@ { "id": "db_mode", "type": "list", - "label": "Ubicación de Base de datos", + "label": "$ADDON[plugin.video.alfa 60629]", "default": 0, "enabled": true, "visible": true, "lvalues": [ - "Local", - "Remota" + "$ADDON[plugin.video.alfa 60630]", + "$ADDON[plugin.video.alfa 60631]" ] }, { "id": "xbmc_host", "type": "text", - "label": " Nombre Servidor", + "label": "$ADDON[plugin.video.alfa 60632]", "visible": true, "enabled": "eq(-1,Remota)" }, { "id": "xbmc_puerto", "type": "text", - "label": " Puerto Servidor", + "label": "$ADDON[plugin.video.alfa 60633]", "enabled": "!eq(-1,'')", "visible": true }, { "id": "mark_as_watched", "type": "bool", - "label": "Marcar automáticamente como visto", + "label": "$ADDON[plugin.video.alfa 60634]", "default": true, "enabled": true, "visible": true @@ -183,7 +184,7 @@ { "id": "watched_setting", "type": "list", - "label": " Tiempo necesario del video", + "label": "$ADDON[plugin.video.alfa 60635]", "default": 3, "visible": true, "enabled": "eq(-1,true)", @@ -192,20 +193,20 @@ "30%", "50%", "80%", - "0 seg" + "$ADDON[plugin.video.alfa 60636]" ] }, { "id": "sync_trakt", "type": "label", - "label": "Sincronización con Trakt", + "label": "$ADDON[plugin.video.alfa 60637]", "enabled": true, "visible": true }, { "id": "sync_trakt_watched", "type": "bool", - "label": " Tras marcar como visto el episodio", + "label": "$ADDON[plugin.video.alfa 60638]", "default": false, "visible": true, "enabled": "eq(-3,true)" @@ -213,7 +214,7 @@ { "id": "sync_trakt_notification", "type": "bool", - "label": " Mostrar notificación", + "label": "$ADDON[plugin.video.alfa 60639]", "default": true, "visible": true, "enabled": "eq(-1,true)" @@ -221,7 +222,7 @@ { "id": "sync_trakt_new_tvshow", "type": "bool", - "label": " Al añadir una serie a la videoteca", + "label": "$ADDON[plugin.video.alfa 60640]", "default": false, "enabled": true, "visible": true @@ -229,7 +230,7 @@ { "id": "sync_trakt_new_tvshow_wait", "type": "bool", - "label": " Esperar a que se añada la serie a la videoteca", + "label": "$ADDON[plugin.video.alfa 60641]", "default": true, "visible": true, "enabled": "eq(-1,true)" @@ -237,57 +238,47 @@ { "id": "show_all_seasons", "type": "bool", - "label": "Mostrar la opción \"Todas las temporadas\"", + "label": "$ADDON[plugin.video.alfa 60642]", "default": true }, { "id": "no_pile_on_seasons", "type": "list", - "label": "No apilar temporadas de series", + "label": "$ADDON[plugin.video.alfa 60643]", "default": 1, "lvalues": [ - "Nunca", - "Sólo si hay una temporada", - "Siempre" + "$ADDON[plugin.video.alfa 60648]", + "$ADDON[plugin.video.alfa 60644]", + "$ADDON[plugin.video.alfa 60616]" ] }, { "id": "ask_channel", "type": "bool", - "label": "Mostrar cuadro de selección de canales", + "label": "$ADDON[plugin.video.alfa 60645]", "default": false }, { "id": "original_title_folder", "type": "list", - "label": "Crear directorios en el sistema usando", + "label": "$ADDON[plugin.video.alfa 60646]", "default": 0, "lvalues": [ - "Título localizado", - "Título original" - ] - }, - { - "id": "lowerize_title", - "type": "list", - "label": "Crear directorios con letras en miúsculas", - "default": 0, - "lvalues": [ - "Si", - "No" + "$ADDON[plugin.video.alfa 60647]", + "$ADDON[plugin.video.alfa 60649]" ] }, { "id": "lab_1", "type": "label", - "label": "Al añadir contenido, obtener información de:", + "label": "$ADDON[plugin.video.alfa 60650]", "enabled": true, "visible": true }, { "id": "scraper_movies", "type": "list", - "label": " Peliculas:", + "label": "$ADDON[plugin.video.alfa 60651]", "enabled": false, "default": 0, "lvalues": [ @@ -298,7 +289,7 @@ { "id": "scraper_tvshows", "type": "list", - "label": " Series:", + "label": "$ADDON[plugin.video.alfa 60652]", "default": 0, "lvalues": [ "TheMovieDB.org", @@ -308,7 +299,7 @@ { "id": "tvdb_retry_eng", "type": "bool", - "label": " Si no hay resultados buscar también en Inglés", + "label": "$ADDON[plugin.video.alfa 60653]", "default": true, "enabled": "eq(-1,TheTvDB.com)", "visible": true diff --git a/plugin.video.alfa/channels/videolibrary.py b/plugin.video.alfa/channels/videolibrary.py index 2374362b..303ae4f5 100644 --- a/plugin.video.alfa/channels/videolibrary.py +++ b/plugin.video.alfa/channels/videolibrary.py @@ -15,10 +15,10 @@ def mainlist(item): logger.info() itemlist = list() - itemlist.append(Item(channel=item.channel, action="list_movies", title="Películas", + itemlist.append(Item(channel=item.channel, action="list_movies", title=config.get_localized_string(60509), category="Videoteca de películas", thumbnail=get_thumb("videolibrary_movie.png"))) - itemlist.append(Item(channel=item.channel, action="list_tvshows", title="Series", + itemlist.append(Item(channel=item.channel, action="list_tvshows", title=config.get_localized_string(60600), category="Videoteca de series", thumbnail=get_thumb("videolibrary_tvshow.png"))) @@ -28,7 +28,7 @@ def mainlist(item): def channel_config(item): return platformtools.show_channel_settings(channelpath=os.path.join(config.get_runtime_path(), "channels", item.channel), - caption="configuración -- Videoteca") + caption=config.get_localized_string(60598)) def list_movies(item): @@ -54,10 +54,10 @@ def list_movies(item): visto = new_item.library_playcounts.get(os.path.splitext(f)[0], 0) new_item.infoLabels["playcount"] = visto if visto > 0: - texto_visto = "Marcar película como no vista" + texto_visto = config.get_localized_string(60016) contador = 0 else: - texto_visto = "Marcar película como vista" + texto_visto = config.get_localized_string(60017) contador = 1 # Menu contextual: Eliminar serie/canal @@ -65,10 +65,10 @@ def list_movies(item): if "downloads" in new_item.library_urls: num_canales -= 1 if num_canales > 1: - texto_eliminar = "Eliminar película/canal" + texto_eliminar = config.get_localized_string(60018) multicanal = True else: - texto_eliminar = "Eliminar esta película" + texto_eliminar = config.get_localized_string(60019) multicanal = False new_item.context = [{"title": texto_visto, @@ -107,19 +107,19 @@ def list_tvshows(item): visto = item_tvshow.library_playcounts.get(item_tvshow.contentTitle, 0) item_tvshow.infoLabels["playcount"] = visto if visto > 0: - texto_visto = "Marcar serie como no vista" + texto_visto = config.get_localized_string(60020) contador = 0 else: - texto_visto = "Marcar serie como vista" + texto_visto = config.get_localized_string(60021) contador = 1 # Menu contextual: Buscar automáticamente nuevos episodios o no if item_tvshow.active and int(item_tvshow.active) > 0: - texto_update = "Buscar automáticamente nuevos episodios: Desactivar" + texto_update = config.get_localized_string(60022) value = 0 item_tvshow.text_color = "green" else: - texto_update = "Buscar automáticamente nuevos episodios: Activar" + texto_update = config.get_localized_string(60023) value = 1 item_tvshow.text_color = "0xFFDF7401" @@ -128,10 +128,10 @@ def list_tvshows(item): if "downloads" in item_tvshow.library_urls: num_canales -= 1 if num_canales > 1: - texto_eliminar = "Eliminar serie/canal" + texto_eliminar = config.get_localized_string(60024) multicanal = True else: - texto_eliminar = "Eliminar esta serie" + texto_eliminar = config.get_localized_string(60025) multicanal = False item_tvshow.context = [{"title": texto_visto, @@ -160,7 +160,7 @@ def list_tvshows(item): itemlist = sorted(itemlist, key=lambda it: it.title.lower()) itemlist.append(Item(channel=item.channel, action="update_videolibrary", thumbnail=item.thumbnail, - title="Buscar nuevos episodios y actualizar videoteca", folder=False)) + title=config.get_localized_string(60026), folder=False)) return itemlist @@ -182,7 +182,7 @@ def get_seasons(item): for f in ficheros: if f.endswith('.json'): season = f.split('x')[0] - dict_temp[season] = "Temporada %s" % season + dict_temp[season] = config.get_localized_string(60027) % season if config.get_setting("no_pile_on_seasons", "videolibrary") == 1 and len( dict_temp) == 1: # Sólo si hay una temporada @@ -205,10 +205,10 @@ def get_seasons(item): visto = item_nfo.library_playcounts.get("season %s" % season, 0) new_item.infoLabels["playcount"] = visto if visto > 0: - texto = "Marcar temporada como no vista" + texto = config.get_localized_string(60028) value = 0 else: - texto = "Marcar temporada como vista" + texto = config.get_localized_string(60029) value = 1 new_item.context = [{"title": texto, "action": "mark_season_as_watched", @@ -222,7 +222,7 @@ def get_seasons(item): itemlist = sorted(itemlist, key=lambda it: int(it.contentSeason)) if config.get_setting("show_all_seasons", "videolibrary"): - new_item = item.clone(action="get_episodes", title="*Todas las temporadas") + new_item = item.clone(action="get_episodes", title=config.get_localized_string(60030)) new_item.infoLabels["playcount"] = 0 itemlist.insert(0, new_item) @@ -260,7 +260,7 @@ def get_episodes(item): if epi.contentTitle: title_episodie = epi.contentTitle.strip() else: - title_episodie = "Temporada %s Episodio %s" % \ + title_episodie = config.get_localized_string(60031) % \ (epi.contentSeason, str(epi.contentEpisodeNumber).zfill(2)) epi.contentTitle = "%sx%s" % (epi.contentSeason, str(epi.contentEpisodeNumber).zfill(2)) @@ -273,10 +273,10 @@ def get_episodes(item): visto = item_nfo.library_playcounts.get(season_episode, 0) epi.infoLabels["playcount"] = visto if visto > 0: - texto = "Marcar episodio como no visto" + texto = config.get_localized_string(60032) value = 0 else: - texto = "Marcar episodio como visto" + texto = config.get_localized_string(60033) value = 1 epi.context = [{"title": texto, "action": "mark_content_as_watched", @@ -341,8 +341,8 @@ def findvideos(item): filtro_canal = '' if num_canales > 1 and config.get_setting("ask_channel", "videolibrary"): - opciones = ["Mostrar solo los enlaces de %s" % k.capitalize() for k in list_canales.keys()] - opciones.insert(0, "Mostrar todos los enlaces") + opciones = [config.get_localized_string(70089) % k.capitalize() for k in list_canales.keys()] + opciones.insert(0, config.get_localized_string(70083)) if item_local: opciones.append(item_local.title) @@ -356,7 +356,7 @@ def findvideos(item): platformtools.play_video(item_local) elif index > 0: - filtro_canal = opciones[index].replace("Mostrar solo los enlaces de ", "") + filtro_canal = opciones[index].replace(config.get_localized_string(70078), "") itemlist = [] for nom_canal, json_path in list_canales.items(): @@ -450,7 +450,7 @@ def play(item): v.title = item.contentTitle else: if item.contentType == "episode": - v.title = "Episodio %s" % item.contentEpisodeNumber + v.title = config.get_localized_string(60036) % item.contentEpisodeNumber v.thumbnail = item.thumbnail v.contentThumbnail = item.thumbnail @@ -482,8 +482,8 @@ def update_tvshow(item): logger.info() # logger.debug("item:\n" + item.tostring('\n')) - heading = 'Actualizando serie....' - p_dialog = platformtools.dialog_progress_bg('alfa', heading) + heading = config.get_localized_string(60037) + p_dialog = platformtools.dialog_progress_bg(config.get_localized_string(20000), heading) p_dialog.update(0, heading, item.contentSerieName) import videolibrary_service @@ -619,13 +619,13 @@ def delete(item): # logger.debug(item.tostring('\n')) if item.contentType == 'movie': - heading = "Eliminar película" + heading = config.get_localized_string(70084) else: - heading = "Eliminar serie" + heading = config.get_localized_string(70085) if item.multicanal: # Obtener listado de canales - opciones = ["Eliminar solo los enlaces de %s" % k.capitalize() for k in item.library_urls.keys() if + opciones = [config.get_localized_string(70086) % k.capitalize() for k in item.library_urls.keys() if k != "downloads"] opciones.insert(0, heading) @@ -637,7 +637,7 @@ def delete(item): elif index > 0: # Seleccionado Eliminar canal X - canal = opciones[index].replace("Eliminar solo los enlaces de ", "").lower() + canal = opciones[index].replace(config.get_localized_string(70079), "").lower() num_enlaces = 0 for fd in filetools.listdir(item.path): @@ -651,14 +651,14 @@ def delete(item): del item_nfo.library_urls[canal] filetools.write(item.nfo, head_nfo + item_nfo.tojson()) - msg_txt = "Eliminados %s enlaces del canal %s" % (num_enlaces, canal) + msg_txt = config.get_localized_string(70087) % (num_enlaces, canal) logger.info(msg_txt) platformtools.dialog_notification(heading, msg_txt) platformtools.itemlist_refresh() else: if platformtools.dialog_yesno(heading, - "¿Realmente desea eliminar '%s' de su videoteca?" % item.infoLabels['title']): + config.get_localized_string(70088) % item.infoLabels['title']): delete_all(item) From 3d0620ccd6b876c9c04aaca2539823b362cda821 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 16 Jun 2018 18:56:41 +0200 Subject: [PATCH 07/66] Add files via upload --- plugin.video.alfa/channels/url.py | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/plugin.video.alfa/channels/url.py b/plugin.video.alfa/channels/url.py index db9879dc..caf30409 100755 --- a/plugin.video.alfa/channels/url.py +++ b/plugin.video.alfa/channels/url.py @@ -1,21 +1,17 @@ # -*- coding: utf-8 -*- -from core import scrapertools -from core import servertools +from core import scrapertools, servertools from core.item import Item -from platformcode import logger +from platformcode import config, logger def mainlist(item): logger.info() itemlist = [] - itemlist.append(Item(channel=item.channel, action="search", - title="Entra aquí y teclea la URL [Enlace a servidor online/descarga]")) - itemlist.append( - Item(channel=item.channel, action="search", title="Entra aquí y teclea la URL [Enlace directo a un vídeo]")) - itemlist.append(Item(channel=item.channel, action="search", - title="Entra aquí y teclea la URL [Búsqueda de enlaces en una url]")) + itemlist.append(Item(channel=item.channel, action="search", title=config.get_localized_string(60089))) + itemlist.append(Item(channel=item.channel, action="search", title=config.get_localized_string(60090))) + itemlist.append(Item(channel=item.channel, action="search", title=config.get_localized_string(60091))) return itemlist @@ -35,8 +31,7 @@ def search(item, texto): item.channel = "url" item.action = "play" elif "directo" in item.title: - itemlist.append( - Item(channel=item.channel, action="play", url=texto, server="directo", title="Ver enlace directo")) + itemlist.append(Item(channel=item.channel, action="play", url=texto, server="directo", title=config.get_localized_string(60092))) else: data = scrapertools.downloadpage(texto) itemlist = servertools.find_video_items(data=data) @@ -45,6 +40,6 @@ def search(item, texto): item.action = "play" if len(itemlist) == 0: - itemlist.append(Item(channel=item.channel, action="search", title="No hay ningún vídeo compatible en esa URL")) + itemlist.append(Item(channel=item.channel, action="search", title=config.get_localized_string(60093))) return itemlist From cbd2b2770a6ec1eafb3da2c0362c680eced6ba92 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 16 Jun 2018 18:58:00 +0200 Subject: [PATCH 08/66] Add files via upload --- plugin.video.alfa/core/scraper.py | 45 ++++++++++----------- plugin.video.alfa/core/videolibrarytools.py | 17 ++++---- 2 files changed, 30 insertions(+), 32 deletions(-) diff --git a/plugin.video.alfa/core/scraper.py b/plugin.video.alfa/core/scraper.py index 897270f3..566fa683 100755 --- a/plugin.video.alfa/core/scraper.py +++ b/plugin.video.alfa/core/scraper.py @@ -21,10 +21,10 @@ def find_and_set_infoLabels(item): scraper = None # logger.debug("item:\n" + item.tostring('\n')) - list_opciones_cuadro = ["Introducir otro nombre", "Completar información"] + list_opciones_cuadro = [config.get_localized_string(60223), config.get_localized_string(60224)] # Si se añaden más scrapers hay q declararlos aqui-> "modulo_scraper": "Texto_en_cuadro" - scrapers_disponibles = {'tmdb': "Buscar en TheMovieDB.org", - 'tvdb': "Buscar en TheTvDB.com"} + scrapers_disponibles = {'tmdb': config.get_localized_string(60225), + 'tvdb': config.get_localized_string(60226)} # Obtener el Scraper por defecto de la configuracion segun el tipo de contenido if item.contentType == "movie": @@ -63,10 +63,10 @@ def find_and_set_infoLabels(item): return True elif scraper_result: # Contenido encontrado pero no hay 'code' - msg = "Identificador no encontrado para: %s" % title + msg = config.get_localized_string(60227) % title else: # Contenido no encontrado - msg = "No se ha encontrado informacion para: %s" % title + msg = config.get_localized_string(60228) % title logger.info(msg) # Mostrar cuadro con otras opciones: @@ -80,7 +80,7 @@ def find_and_set_infoLabels(item): elif index == 0: # Pregunta el titulo - title = platformtools.dialog_input(title, "Introduzca el nombre de la %s a buscar" % tipo_contenido) + title = platformtools.dialog_input(title, config.get_localized_string(60229) % tipo_contenido) if title: if item.contentType == "movie": item.contentTitle = title @@ -125,19 +125,19 @@ def cuadro_completar(item): COLOR = ["0xFF8A4B08", "0xFFF7BE81"] # Creamos la lista de campos del infoLabel - controls = [("title", "text", "Titulo:"), - ("originaltitle", "text", "Titulo original"), - ("year", "text", "Año"), - ("identificadores", "label", "Identificadores:"), - ("tmdb_id", "text", " The Movie Database ID"), - ("url_tmdb", "text", " URL Tmdb", "+!eq(-1,'')"), - ("tvdb_id", "text", " The TVDB ID", "+eq(-7,'Serie')"), - ("url_tvdb", "text", " URL TVDB", "+!eq(-1,'')+eq(-8,'Serie')"), - ("imdb_id", "text", " IMDb ID"), - ("otro_id", "text", " Otro ID", "+eq(-1,'')"), - ("urls", "label", "Imágenes (urls):"), - ("fanart", "text", " Fondo"), - ("thumbnail", "text", " Miniatura")] + controls = [("title", "text", config.get_localized_string(60230)), + ("originaltitle", "text", config.get_localized_string(60231)), + ("year", "text", config.get_localized_string(60232)), + ("identificadores", "label", config.get_localized_string(60233)), + ("tmdb_id", "text", config.get_localized_string(60234)), + ("url_tmdb", "text", config.get_localized_string(60235), "+!eq(-1,'')"), + ("tvdb_id", "text", config.get_localized_string(60236), "+eq(-7,'Serie')"), + ("url_tvdb", "text", config.get_localized_string(60237), "+!eq(-1,'')+eq(-8,'Serie')"), + ("imdb_id", "text", config.get_localized_string(60238)), + ("otro_id", "text", config.get_localized_string(60239), "+eq(-1,'')"), + ("urls", "label", config.get_localized_string(60240)), + ("fanart", "text", config.get_localized_string(60241)), + ("thumbnail", "text", config.get_localized_string(60242))] if item.infoLabels["mediatype"] == "movie": mediatype_default = 0 @@ -146,12 +146,12 @@ def cuadro_completar(item): listado_controles = [{'id': "mediatype", 'type': "list", - 'label': "Tipo de contenido", + 'label': config.get_localized_string(60243), 'color': COLOR[1], 'default': mediatype_default, 'enabled': True, 'visible': True, - 'lvalues': ["Película", "Serie"] + 'lvalues': [config.get_localized_string(60244), config.get_localized_string(60245)] }] for i, c in enumerate(controls): @@ -188,7 +188,7 @@ def cuadro_completar(item): 'visible': True}) # logger.debug(dict_default) - if platformtools.show_channel_settings(list_controls=listado_controles, caption="Completar información", item=item, + if platformtools.show_channel_settings(list_controls=listado_controles, caption=config.get_localized_string(60246), item=item, callback="core.scraper.callback_cuadro_completar", custom_button={"visible": False}): return True @@ -263,7 +263,6 @@ def get_nfo(item): def sort_episode_list(episodelist): - episodelist.sort(key=lambda e: e.title, reverse=True) scraper_actual = ['tmdb', 'tvdb'][config.get_setting("scraper_tvshows", "videolibrary")] if scraper_actual == "tmdb": diff --git a/plugin.video.alfa/core/videolibrarytools.py b/plugin.video.alfa/core/videolibrarytools.py index 73f1c832..5b010817 100644 --- a/plugin.video.alfa/core/videolibrarytools.py +++ b/plugin.video.alfa/core/videolibrarytools.py @@ -116,7 +116,7 @@ def save_movie(item): _id = item.infoLabels['code'][0] # progress dialog - p_dialog = platformtools.dialog_progress('alfa', 'Añadiendo película...') + p_dialog = platformtools.dialog_progress(config.get_localized_string(20000), config.get_localized_string(60062)) if config.get_setting("original_title_folder", "videolibrary") == 1 and item.infoLabels['originaltitle']: base_name = item.infoLabels['originaltitle'] @@ -197,7 +197,7 @@ def save_movie(item): # Si llegamos a este punto es por q algo ha fallado logger.error("No se ha podido guardar %s en la videoteca" % item.contentTitle) - p_dialog.update(100, 'Fallo al añadir...', item.contentTitle) + p_dialog.update(100, config.get_localized_string(60063), item.contentTitle) p_dialog.close() return 0, 0, -1 @@ -366,8 +366,8 @@ def save_episodes(path, episodelist, serie, silent=False, overwrite=True): # Silent es para no mostrar progreso (para videolibrary_service) if not silent: # progress dialog - p_dialog = platformtools.dialog_progress('alfa', 'Añadiendo episodios...') - p_dialog.update(0, 'Añadiendo episodio...') + p_dialog = platformtools.dialog_progress(config.get_localized_string(20000), config.get_localized_string(60064)) + p_dialog.update(0, config.get_localized_string(60065)) new_episodelist = [] # Obtenemos el numero de temporada y episodio y descartamos los q no lo sean @@ -592,21 +592,20 @@ def add_tvshow(item, channel=None): insertados, sobreescritos, fallidos, path = save_tvshow(item, itemlist) if not insertados and not sobreescritos and not fallidos: - platformtools.dialog_ok("Videoteca", "ERROR, la serie NO se ha añadido a la videoteca", - "No se ha podido obtener ningun episodio") + platformtools.dialog_ok(config.get_localized_string(30131), config.get_localized_string(60067)) logger.error("La serie %s no se ha podido añadir a la videoteca. No se ha podido obtener ningun episodio" % item.show) elif fallidos == -1: - platformtools.dialog_ok("Videoteca", "ERROR, la serie NO se ha añadido a la videoteca") + platformtools.dialog_ok(config.get_localized_string(30131), config.get_localized_string(60068)) logger.error("La serie %s no se ha podido añadir a la videoteca" % item.show) elif fallidos > 0: - platformtools.dialog_ok("Videoteca", "ERROR, la serie NO se ha añadido completa a la videoteca") + platformtools.dialog_ok(config.get_localized_string(30131), config.get_localized_string(60069)) logger.error("No se han podido añadir %s episodios de la serie %s a la videoteca" % (fallidos, item.show)) else: - platformtools.dialog_ok("Videoteca", "La serie se ha añadido a la videoteca") + platformtools.dialog_ok(config.get_localized_string(30131), config.get_localized_string(60070)) logger.info("Se han añadido %s episodios de la serie %s a la videoteca" % (insertados, item.show)) if config.is_xbmc(): From de9dbae265418febc8356bf9c926280a3ecee7e9 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 16 Jun 2018 18:59:37 +0200 Subject: [PATCH 09/66] Add files via upload --- plugin.video.alfa/platformcode/config.py | 10 +-- plugin.video.alfa/platformcode/launcher.py | 29 ++++---- .../platformcode/platformtools.py | 70 +++++++++---------- plugin.video.alfa/platformcode/unify.py | 3 + .../platformcode/xbmc_videolibrary.py | 58 +++++++-------- 5 files changed, 80 insertions(+), 90 deletions(-) diff --git a/plugin.video.alfa/platformcode/config.py b/plugin.video.alfa/platformcode/config.py index ac49a136..6d3c9b49 100644 --- a/plugin.video.alfa/platformcode/config.py +++ b/plugin.video.alfa/platformcode/config.py @@ -113,13 +113,13 @@ def open_settings(): if settings_post['adult_aux_new_password1'] == settings_post['adult_aux_new_password2']: set_setting('adult_password', settings_post['adult_aux_new_password1']) else: - platformtools.dialog_ok("Canales para adultos", - "Los campos 'Nueva contraseña' y 'Confirmar nueva contraseña' no coinciden." - , "Entre de nuevo en 'Preferencias' para cambiar la contraseña") + platformtools.dialog_ok(config.get_localized_string(60305), + config.get_localized_string(60306), + config.get_localized_string(60307)) else: - platformtools.dialog_ok("Canales para adultos", "La contraseña no es correcta.", - "Los cambios realizados en esta sección no se guardaran.") + platformtools.dialog_ok(config.get_localized_string(60305), config.get_localized_string(60309), + config.get_localized_string(60310)) # Deshacer cambios set_setting("adult_mode", settings_pre.get("adult_mode", 0)) diff --git a/plugin.video.alfa/platformcode/launcher.py b/plugin.video.alfa/platformcode/launcher.py index c775d746..89844318 100644 --- a/plugin.video.alfa/platformcode/launcher.py +++ b/plugin.video.alfa/platformcode/launcher.py @@ -101,7 +101,7 @@ def run(item=None): elif item.action == "script": from core import tmdb if tmdb.drop_bd(): - platformtools.dialog_notification("Alfa", "caché eliminada", time=2000, sound=False) + platformtools.dialog_notification(config.get_localized_string(20000), config.get_localized_string(60011), time=2000, sound=False) # Action in certain channel specified in "action" and "channel" parameters else: @@ -113,7 +113,7 @@ def run(item=None): # Parental control # If it is an adult channel, and user has configured pin, asks for it if channeltools.is_adult(item.channel) and config.get_setting("adult_request_password"): - tecleado = platformtools.dialog_input("", "Contraseña para canales de adultos", True) + tecleado = platformtools.dialog_input("", config.get_localized_string(60334), True) if tecleado is None or tecleado != config.get_setting("adult_password"): return @@ -168,7 +168,7 @@ def run(item=None): # If not, shows user an error message else: - platformtools.dialog_ok("alfa", "No hay nada para reproducir") + platformtools.dialog_ok(config.get_localized_string(20000), config.get_localized_string(60339)) # If player don't have a "play" function, not uses the standard play from platformtools else: @@ -280,10 +280,8 @@ def run(item=None): canal = scrapertools.find_single_match(traceback.format_exc(), patron) platformtools.dialog_ok( - "Error en el canal " + canal, - "La web de la que depende parece no estar disponible, puede volver a intentarlo, " - "si el problema persiste verifique mediante un navegador la web: %s. " - "Si la web funciona correctamente informe el error en: www.alfa-addon.com" %(e)) + config.get_localized_string(70093) + canal, + config.get_localized_string(60013) %(e)) except: import traceback logger.error(traceback.format_exc()) @@ -298,20 +296,17 @@ def run(item=None): log_name = "xbmc.log" else: log_name = "kodi.log" - log_message = "Ruta: " + xbmc.translatePath("special://logpath") + log_name + log_message = config.get_localized_string(50004) + xbmc.translatePath("special://logpath") + log_name except: log_message = "" if canal: platformtools.dialog_ok( - "Error inesperado en el canal " + canal, - "Puede deberse a un fallo de conexión, la web del canal " - "ha cambiado su estructura, o un error interno de alfa.", - "Para saber más detalles, consulta el log.", log_message) + config.get_localized_string(70093) + canal, + config.get_localized_string(60014), log_message) else: platformtools.dialog_ok( - "Se ha producido un error en alfa", - "Comprueba el log para ver mas detalles del error.", + config.get_localized_string(59984), log_message) @@ -327,8 +322,8 @@ def reorder_itemlist(itemlist): modified = 0 not_modified = 0 - to_change = [['Ver en', '[V]'], - ['Descargar en', '[D]']] + to_change = [[config.get_localized_string(60335), '[V]'], + [config.get_localized_string(60336), '[D]']] for item in itemlist: old_title = unicode(item.title, "utf8").lower().encode("utf8") @@ -415,7 +410,7 @@ def play_from_library(item): else: # Ventana emergente from channels import videolibrary - p_dialog = platformtools.dialog_progress_bg('alfa', 'Cargando...') + p_dialog = platformtools.dialog_progress_bg(config.get_localized_string(20000), config.get_localized_string(70004)) p_dialog.update(0, '') itemlist = videolibrary.findvideos(item) diff --git a/plugin.video.alfa/platformcode/platformtools.py b/plugin.video.alfa/platformcode/platformtools.py index bc11e5a9..be0f6185 100644 --- a/plugin.video.alfa/platformcode/platformtools.py +++ b/plugin.video.alfa/platformcode/platformtools.py @@ -118,7 +118,7 @@ def render_items(itemlist, parent_item): # Si no hay ningun item, mostramos un aviso if not len(itemlist): - itemlist.append(Item(title="No hay elementos que mostrar")) + itemlist.append(Item(title=config.get_localized_string(60347))) genre = False if 'nero' in parent_item.title: @@ -437,7 +437,7 @@ def set_context_commands(item, parent_item): if item.action and item.action not in ["add_pelicula_to_library", "add_serie_to_library", "buscartrailer"]: # Mostrar informacion: si el item tiene plot suponemos q es una serie, temporada, capitulo o pelicula if item.infoLabels['plot'] and (num_version_xbmc < 17.0 or item.contentType == 'season'): - context_commands.append(("Información", "XBMC.Action(Info)")) + context_commands.append((config.get_localized_string(60348), "XBMC.Action(Info)")) # ExtendedInfo: Si esta instalado el addon y se cumplen una serie de condiciones if xbmc.getCondVisibility('System.HasAddon(script.extendedinfo)') \ @@ -482,7 +482,7 @@ def set_context_commands(item, parent_item): # Ir al Menu Principal (channel.mainlist) if parent_item.channel not in ["news", "channelselector"] and item.action != "mainlist" \ and parent_item.action != "mainlist": - context_commands.append(("Ir al Menu Principal", "XBMC.Container.Refresh (%s?%s)" % + context_commands.append((config.get_localized_string(60349), "XBMC.Container.Refresh (%s?%s)" % (sys.argv[0], Item(channel=item.channel, action="mainlist").tourl()))) # Añadir a Favoritos @@ -524,7 +524,7 @@ def set_context_commands(item, parent_item): # Definir como Pagina de inicio if config.get_setting('start_page'): if item.action not in ['findvideos', 'play']: - context_commands.insert(0, ("[COLOR 0xffccff00]Definir como pagina de inicio[/COLOR]", + context_commands.insert(0, (config.get_localized_string(60351), "XBMC.RunPlugin(%s?%s)" % ( sys.argv[0], Item(channel='side_menu', action="set_custom_start", @@ -533,19 +533,19 @@ def set_context_commands(item, parent_item): if item.channel != "videolibrary": # Añadir Serie a la videoteca if item.action in ["episodios", "get_episodios"] and item.contentSerieName: - context_commands.append(("Añadir Serie a Videoteca", "XBMC.RunPlugin(%s?%s)" % + context_commands.append((config.get_localized_string(60352), "XBMC.RunPlugin(%s?%s)" % (sys.argv[0], item.clone(action="add_serie_to_library", from_action=item.action).tourl()))) # Añadir Pelicula a videoteca elif item.action in ["detail", "findvideos"] and item.contentType == 'movie' and item.contentTitle: - context_commands.append(("Añadir Pelicula a Videoteca", "XBMC.RunPlugin(%s?%s)" % + context_commands.append((config.get_localized_string(60353), "XBMC.RunPlugin(%s?%s)" % (sys.argv[0], item.clone(action="add_pelicula_to_library", from_action=item.action).tourl()))) if item.channel != "downloads": # Descargar pelicula if item.contentType == "movie" and item.contentTitle: - context_commands.append(("Descargar Pelicula", "XBMC.RunPlugin(%s?%s)" % + context_commands.append((config.get_localized_string(60354), "XBMC.RunPlugin(%s?%s)" % (sys.argv[0], item.clone(channel="downloads", action="save_download", from_channel=item.channel, from_action=item.action) .tourl()))) @@ -553,45 +553,45 @@ def set_context_commands(item, parent_item): elif item.contentSerieName: # Descargar serie if item.contentType == "tvshow": - context_commands.append(("Descargar Serie", "XBMC.RunPlugin(%s?%s)" % + context_commands.append((config.get_localized_string(60355), "XBMC.RunPlugin(%s?%s)" % (sys.argv[0], item.clone(channel="downloads", action="save_download", from_channel=item.channel, from_action=item.action).tourl()))) # Descargar episodio elif item.contentType == "episode": - context_commands.append(("Descargar Episodio", "XBMC.RunPlugin(%s?%s)" % + context_commands.append((config.get_localized_string(60356), "XBMC.RunPlugin(%s?%s)" % (sys.argv[0], item.clone(channel="downloads", action="save_download", from_channel=item.channel, from_action=item.action).tourl()))) # Descargar temporada elif item.contentType == "season": - context_commands.append(("Descargar Temporada", "XBMC.RunPlugin(%s?%s)" % + context_commands.append((config.get_localized_string(60357), "XBMC.RunPlugin(%s?%s)" % (sys.argv[0], item.clone(channel="downloads", action="save_download", from_channel=item.channel, from_action=item.action).tourl()))) # Abrir configuración if parent_item.channel not in ["setting", "news", "search"]: - context_commands.append(("Abrir Configuración", "XBMC.Container.Update(%s?%s)" % + context_commands.append((config.get_localized_string(60358), "XBMC.Container.Update(%s?%s)" % (sys.argv[0], Item(channel="setting", action="mainlist").tourl()))) # Buscar Trailer if item.action == "findvideos" or "buscar_trailer" in context: - context_commands.append(("Buscar Trailer", "XBMC.RunPlugin(%s?%s)" % (sys.argv[0], item.clone( + context_commands.append((config.get_localized_string(60359), "XBMC.RunPlugin(%s?%s)" % (sys.argv[0], item.clone( channel="trailertools", action="buscartrailer", contextual=True).tourl()))) # Añadir SuperFavourites al menu contextual (1.0.53 o superior necesario) sf_file_path = xbmc.translatePath("special://home/addons/plugin.program.super.favourites/LaunchSFMenu.py") check_sf = os.path.exists(sf_file_path) if check_sf and xbmc.getCondVisibility('System.HasAddon("plugin.program.super.favourites")'): - context_commands.append(("Super Favourites Menu", + context_commands.append((config.get_localized_string(60361), "XBMC.RunScript(special://home/addons/plugin.program.super.favourites/LaunchSFMenu.py)")) context_commands = sorted(context_commands, key=lambda comand: comand[0]) # Menu Rapido - context_commands.insert(0, ("[COLOR 0xffccff00][/COLOR]", + context_commands.insert(0, (config.get_localized_string(60360), "XBMC.Container.Update (%s?%s)" % (sys.argv[0], Item(channel='side_menu', action="open_menu", parent=parent_item.tourl()).tourl( @@ -755,7 +755,7 @@ def handle_wait(time_to_wait, title, text): secs += 1 percent = increment * secs secs_left = str((time_to_wait - secs)) - remaining_display = ' Espera ' + secs_left + ' segundos para que comience el vídeo...' + remaining_display = config.get_localized_string(70176) + secs_left + config.get_localized_string(70177) espera.update(percent, ' ' + text, remaining_display) xbmc.sleep(1000) if espera.iscanceled(): @@ -835,13 +835,13 @@ def get_dialogo_opciones(item, default_action, strm, autoplay): if not autoplay: if item.server != "": if "
" in motivo: - dialog_ok("No puedes ver ese vídeo porque...", motivo.split("
")[0], motivo.split("
")[1], + dialog_ok(config.get_localized_string(60362), motivo.split("
")[0], motivo.split("
")[1], item.url) else: - dialog_ok("No puedes ver ese vídeo porque...", motivo, item.url) + dialog_ok(config.get_localized_string(60362), motivo, item.url) else: - dialog_ok("No puedes ver ese vídeo porque...", "El servidor donde está alojado no está", - "soportado en alfa todavía", item.url) + dialog_ok(config.get_localized_string(60362), config.get_localized_string(60363), + config.get_localized_string(60364), item.url) if item.channel == "favorites": # "Quitar de favoritos" @@ -935,7 +935,7 @@ def get_video_seleccionado(item, seleccion, video_urls): # Si hay un tiempo de espera (como en megaupload), lo impone ahora if wait_time > 0: - continuar = handle_wait(wait_time, item.server, "Cargando vídeo...") + continuar = handle_wait(wait_time, item.server, config.get_localized_string(60365)) if not continuar: mediaurl = "" @@ -1016,9 +1016,9 @@ def torrent_client_installed(show_tuple=False): for client in torrent_clients: if xbmc.getCondVisibility('System.HasAddon("%s")' % client["id"]): if show_tuple: - torrent_options.append(["Plugin externo: %s" % client["name"], client["url"]]) + torrent_options.append([config.get_localized_string(60366) % client["name"], client["url"]]) else: - torrent_options.append("Plugin externo: %s" % client["name"]) + torrent_options.append(config.get_localized_string(60366) % client["name"]) return torrent_options @@ -1035,12 +1035,12 @@ def play_torrent(item, xlistitem, mediaurl): if torrent_client and torrent_client - 1 <= len(torrent_options): if torrent_client == 0: - seleccion = dialog_select("Abrir torrent con...", [opcion[0] for opcion in torrent_options]) + seleccion = dialog_select(config.get_localized_string(70193), [opcion[0] for opcion in torrent_options]) else: seleccion = torrent_client - 1 else: if len(torrent_options) > 1: - seleccion = dialog_select("Abrir torrent con...", [opcion[0] for opcion in torrent_options]) + seleccion = dialog_select(config.get_localized_string(70193), [opcion[0] for opcion in torrent_options]) else: seleccion = 0 @@ -1068,10 +1068,10 @@ def play_torrent(item, xlistitem, mediaurl): # Iniciamos el cliente: c = Client(url=mediaurl, is_playing_fnc=xbmc_player.isPlaying, wait_time=None, timeout=10, - temp_path=os.path.join(client_tmp_path, "alfa-torrent"), print_status=debug) + temp_path=os.path.join(client_tmp_path, config.get_localized_string(70194)), print_status=debug) # Mostramos el progreso - progreso = dialog_progress("Alfa - Torrent", "Iniciando...") + progreso = dialog_progress(config.get_localized_string(70195), config.get_localized_string(70196)) # Mientras el progreso no sea cancelado ni el cliente cerrado while not c.closed: @@ -1092,7 +1092,7 @@ def play_torrent(item, xlistitem, mediaurl): (s.progress_file, s.file_size, s.str_state, s._download_rate) txt2 = 'S: %d(%d) P: %d(%d)' % (s.num_seeds, s.num_complete, s.num_peers, s.num_incomplete) try: - txt3 = 'Deteniendo automaticamente en: %ss' % (int(s.timeout)) + txt3 = config.get_localized_string(70197) % (int(s.timeout)) except: txt3 = '' @@ -1102,21 +1102,21 @@ def play_torrent(item, xlistitem, mediaurl): if progreso.iscanceled(): progreso.close() if s.buffer == 100: - if dialog_yesno("Alfa - Torrent", "¿Deseas iniciar la reproduccion?"): + if dialog_yesno(config.get_localized_string(70195), config.get_localized_string(70198)): played = False - progreso = dialog_progress("Alfa - Torrent", "") + progreso = dialog_progress(config.get_localized_string(70195), "") progreso.update(s.buffer, txt, txt2, txt3) else: - progreso = dialog_progress("Alfa - Torrent", "") + progreso = dialog_progress(config.get_localized_string(70195), "") break else: - if dialog_yesno("Alfa - Torrent", "¿Deseas cancelar el proceso?"): - progreso = dialog_progress("Alfa - Torrent", "") + if dialog_yesno(config.get_localized_string(70195), config.get_localized_string(70199)): + progreso = dialog_progress(config.get_localized_string(70195), "") break else: - progreso = dialog_progress("Alfa - Torrent", "") + progreso = dialog_progress(config.get_localized_string(70195), "") progreso.update(s.buffer, txt, txt2, txt3) # Si el buffer se ha llenado y la reproduccion no ha sido iniciada, se inicia @@ -1147,7 +1147,7 @@ def play_torrent(item, xlistitem, mediaurl): time.sleep(1) # Cuando este cerrado, Volvemos a mostrar el dialogo - progreso = dialog_progress("Alfa - Torrent", "") + progreso = dialog_progress(config.get_localized_string(70195), "") progreso.update(s.buffer, txt, txt2, txt3) except: @@ -1155,7 +1155,7 @@ def play_torrent(item, xlistitem, mediaurl): logger.error(traceback.format_exc()) break - progreso.update(100, "Terminando y eliminando datos", " ", " ") + progreso.update(100, config.get_localized_string(70200), " ", " ") # Detenemos el cliente if not c.closed: diff --git a/plugin.video.alfa/platformcode/unify.py b/plugin.video.alfa/platformcode/unify.py index f39e21e9..f50bb870 100644 --- a/plugin.video.alfa/platformcode/unify.py +++ b/plugin.video.alfa/platformcode/unify.py @@ -204,6 +204,7 @@ def set_lang(language): #logger.info() cast =['castellano','espanol','cast','esp','espaol', 'es','zc', 'spa', 'spanish', 'vc'] + ita =['italiano','italian','ita','it'] lat=['latino','lat','la', 'espanol latino', 'espaol latino', 'zl', 'mx', 'co', 'vl'] vose=['subtitulado','subtitulada','sub','sub espanol','vose','espsub','su','subs castellano', 'sub: español', 'vs', 'zs', 'vs', 'english-spanish subs', 'ingles sub espanol'] @@ -222,6 +223,8 @@ def set_lang(language): language = 'cast' elif language in lat: language = 'lat' + elif language in ita: + language = 'ita' elif language in vose: language = 'vose' elif language in vos: diff --git a/plugin.video.alfa/platformcode/xbmc_videolibrary.py b/plugin.video.alfa/platformcode/xbmc_videolibrary.py index 38358fdb..e168689d 100755 --- a/plugin.video.alfa/platformcode/xbmc_videolibrary.py +++ b/plugin.video.alfa/platformcode/xbmc_videolibrary.py @@ -208,8 +208,8 @@ def sync_trakt_kodi(silent=True): logger.info("Sincronizacion con Trakt iniciada") if notificacion: - platformtools.dialog_notification("Alfa", - "Sincronizacion con Trakt iniciada", + platformtools.dialog_notification(config.get_localized_string(20000), + config.get_localized_string(60045), icon=0, time=2000) @@ -440,17 +440,15 @@ def set_content(content_type, silent=False): videolibrarypath = config.get_setting("videolibrarypath") if content_type == 'movie': - scraper = ["The Movie Database", "Universal Movie Scraper"] - seleccion = platformtools.dialog_select("Seleccione el scraper para las películas", scraper) + scraper = [config.get_localized_string(70093), config.get_localized_string(70096)] + seleccion = platformtools.dialog_select(config.get_localized_string(70094), scraper) # Instalar The Movie Database if seleccion == -1 or seleccion == 0: if not xbmc.getCondVisibility('System.HasAddon(metadata.themoviedb.org)'): if not silent: # Preguntar si queremos instalar metadata.themoviedb.org - install = platformtools.dialog_yesno("The Movie Database", - "No se ha encontrado el Scraper de películas de TheMovieDB.", - "¿Desea instalarlo ahora?") + install = platformtools.dialog_yesno(config.get_localized_string(60046)) else: install = True @@ -464,7 +462,7 @@ def set_content(content_type, silent=False): continuar = (install and xbmc.getCondVisibility('System.HasAddon(metadata.themoviedb.org)')) if not continuar: - msg_text = "The Movie Database no instalado." + msg_text = config.get_localized_string(60047) if continuar: xbmc.executebuiltin('xbmc.addon.opensettings(metadata.themoviedb.org)', True) @@ -474,9 +472,7 @@ def set_content(content_type, silent=False): continuar = False if not silent: # Preguntar si queremos instalar metadata.universal - install = platformtools.dialog_yesno("Universal Movie Scraper", - "No se ha encontrado el Scraper de series de TheMovieDB.", - "¿Desea instalarlo ahora?") + install = platformtools.dialog_yesno(config.get_localized_string(70095)) else: install = True @@ -490,22 +486,20 @@ def set_content(content_type, silent=False): continuar = (install and continuar) if not continuar: - msg_text = "Universal Movie Scraper no instalado." + msg_text = config.get_localized_string(70097) if continuar: xbmc.executebuiltin('xbmc.addon.opensettings(metadata.universal)', True) else: # SERIES - scraper = ["The TVDB", "The Movie Database"] - seleccion = platformtools.dialog_select("Seleccione el scraper para las series", scraper) + scraper = [config.get_localized_string(70098), config.get_localized_string(70093)] + seleccion = platformtools.dialog_select(config.get_localized_string(70107), scraper) # Instalar The TVDB if seleccion == -1 or seleccion == 0: if not xbmc.getCondVisibility('System.HasAddon(metadata.tvdb.com)'): if not silent: # Preguntar si queremos instalar metadata.tvdb.com - install = platformtools.dialog_yesno("The TVDB", - "No se ha encontrado el Scraper de series de The TVDB.", - "¿Desea instalarlo ahora?") + install = platformtools.dialog_yesno(config.get_localized_string(60048)) else: install = True @@ -519,7 +513,7 @@ def set_content(content_type, silent=False): continuar = (install and xbmc.getCondVisibility('System.HasAddon(metadata.tvdb.com)')) if not continuar: - msg_text = "The TVDB no instalado." + msg_text = config.get_localized_string(70099) if continuar: xbmc.executebuiltin('xbmc.addon.opensettings(metadata.tvdb.com)', True) @@ -529,9 +523,7 @@ def set_content(content_type, silent=False): continuar = False if not silent: # Preguntar si queremos instalar metadata.tvshows.themoviedb.org - install = platformtools.dialog_yesno("The Movie Database", - "No se ha encontrado el Scraper de series de TheMovieDB.", - "¿Desea instalarlo ahora?") + install = platformtools.dialog_yesno(config.get_localized_string(70100)) else: install = True @@ -546,7 +538,7 @@ def set_content(content_type, silent=False): continuar = (install and continuar) if not continuar: - msg_text = "The Movie Database no instalado." + msg_text = config.get_localized_string(60047) if continuar: xbmc.executebuiltin('xbmc.addon.opensettings(metadata.tvshows.themoviedb.org)', True) @@ -594,7 +586,7 @@ def set_content(content_type, silent=False): idParentPath = idPath idPath += 1 else: - msg_text = "Error al fijar videolibrarypath en BD" + msg_text = config.get_localized_string(70101) if continuar: continuar = False @@ -647,7 +639,7 @@ def set_content(content_type, silent=False): else: if not silent: # Preguntar si queremos configurar themoviedb.org como opcion por defecto - actualizar = platformtools.dialog_yesno("The TVDB", strActualizar) + actualizar = platformtools.dialog_yesno(config.get_localized_string(70098), strActualizar) else: actualizar = True @@ -663,17 +655,17 @@ def set_content(content_type, silent=False): continuar = True if not continuar: - msg_text = "Error al configurar el scraper en la BD." + msg_text = config.get_localized_string(60055) if not continuar: - heading = "Videoteca %s no configurada" % content_type + heading = config.get_localized_string(70102) % content_type elif content_type == 'SERIES' and not xbmc.getCondVisibility( 'System.HasAddon(metadata.tvshows.themoviedb.org)'): - heading = "Videoteca %s configurada" % content_type - msg_text = "Es necesario reiniciar Kodi para que los cambios surtan efecto." + heading = config.get_localized_string(70103) % content_type + msg_text = config.get_localized_string(60058) else: - heading = "Videoteca %s configurada" % content_type - msg_text = "Felicidades la videoteca de Kodi ha sido configurada correctamente." + heading = config.get_localized_string(70103) % content_type + msg_text = config.get_localized_string(70104) platformtools.dialog_notification(heading, msg_text, icon=1, time=3000) logger.info("%s: %s" % (heading, msg_text)) @@ -824,9 +816,9 @@ def ask_set_content(flag, silent=False): add_sources(config.get_setting("downloadpath")) if not silent: - heading = "Alfa Auto-configuración" - linea1 = "¿Desea que Alfa auto-configure la videoteca de Kodi? Se le pedirá que configure los scrapers para las películas y las series." - linea2 = "Si pulsa 'No', podra hacerlo desde 'Configuración > Preferencia > Rutas'." + heading = config.get_localized_string(59971) + linea1 = config.get_localized_string(70105) + linea2 = config.get_localized_string(70106) if platformtools.dialog_yesno(heading, linea1, linea2): do_config() else: From 677da370195d4e83841b3e5c5aef8d9c21dd5d12 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 16 Jun 2018 19:00:14 +0200 Subject: [PATCH 10/66] Add files via upload --- plugin.video.alfa/resources/settings.xml | 138 +++++++++++------------ 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/plugin.video.alfa/resources/settings.xml b/plugin.video.alfa/resources/settings.xml index ab3aa14a..acdac5ed 100644 --- a/plugin.video.alfa/resources/settings.xml +++ b/plugin.video.alfa/resources/settings.xml @@ -1,121 +1,121 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - + + + + + + - - - - + + + + - - - + + + - + - - - + + - - + - - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + - - + + - - - - - - + + + + + + From 9a4773a2f6297861a940eab3689b31c21bea25db Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 16 Jun 2018 19:00:50 +0200 Subject: [PATCH 11/66] Add files via upload --- .../resources/language/Italian/strings.po | 37 ++++++++++++++++++- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/plugin.video.alfa/resources/language/Italian/strings.po b/plugin.video.alfa/resources/language/Italian/strings.po index c3c84d41..5b225250 100644 --- a/plugin.video.alfa/resources/language/Italian/strings.po +++ b/plugin.video.alfa/resources/language/Italian/strings.po @@ -339,7 +339,7 @@ msgstr "Ricerca di %s ..." msgctxt "#30994" msgid "Searching in %s..." -msgstr "Sto cercando in %s ..." +msgstr "Sto cercando in %s" msgctxt "#30995" msgid "%d found so far: %s" @@ -3343,7 +3343,7 @@ msgstr "Cerca informazioni estese (dati sugli attori) Aumenta il tempo di ricerc msgctxt "#70157" msgid "Use cache (improves recurring searches)" -msgstr "Usa cache (mejora le ricerche ricorrenti)" +msgstr "Usa cache (migliora le ricerche ricorrenti)" msgctxt "#70158" msgid "every 1 day" @@ -3541,3 +3541,36 @@ msgctxt "#70206" msgid "Link found in %s" msgstr " %s" +msgctxt "#70207" +msgid " - Movies 4K " +msgstr " - Film 4K " + +msgctxt "#70208" +msgid "Movies 4K" +msgstr "Film 4K" + +msgctxt "#70209" +msgid "Horror movies!" +msgstr "Horror movies!" + +msgctxt "#70210" +msgid " (In %s and %s)" +msgstr " (In %s e %s)" + +msgctxt "#70211" +msgid " (In %s)" +msgstr " (In %s)" + +msgctxt "#70212" +msgid " - Castellan" +msgstr " - Castellano" + +msgctxt "#70213" +msgid " - Latin" +msgstr " - Latino" + +msgctxt "#70214" +msgid " - Torrent" +msgstr " - Torrent" + + From 6c7d5c30effb3f8e35d53c89c945b795640c72f2 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 16 Jun 2018 19:01:29 +0200 Subject: [PATCH 12/66] Add files via upload --- .../resources/language/Spanish/strings.po | 68 ++++++++++++++++++- 1 file changed, 65 insertions(+), 3 deletions(-) diff --git a/plugin.video.alfa/resources/language/Spanish/strings.po b/plugin.video.alfa/resources/language/Spanish/strings.po index 17b7b58c..77fe4fff 100644 --- a/plugin.video.alfa/resources/language/Spanish/strings.po +++ b/plugin.video.alfa/resources/language/Spanish/strings.po @@ -338,8 +338,8 @@ msgid "Looking for %s..." msgstr "Buscando %s..." msgctxt "#30994" -msgid "Searching in %s..." -msgstr "Buscando en %s..." +msgid "Searching in %s" +msgstr "Buscando en %s" msgctxt "#30995" msgid "%d found so far: %s" @@ -3527,4 +3527,66 @@ msgstr "- Upload tests to web!" msgctxt "#70206" msgid "Link found in %s" -msgstr "Enlace encontrado en %s" \ No newline at end of file +msgstr "Enlace encontrado en %s" + +msgctxt "#70207" +msgid " - Movies 4K " +msgstr " - Películas 4K " + +msgctxt "#70208" +msgid "Movies 4K" +msgstr Películas 4K" + +msgctxt "#70209" +msgid "Horror movies" +msgstr Peliculas de miedo!" + +msgctxt "#70210" +msgid " (In %s and %s)" +msgstr " (En %s y %s)" + +msgctxt "#70211" +msgid " (In %s)" +msgstr " (En %s)" + +msgctxt "#70212" +msgid " - Castellan" +msgstr " - Castellano" + +msgctxt "#70213" +msgid " - Latin" +msgstr " - Latino" + +msgctxt "#70214" +msgid " - Torrent" +msgstr " - Torrent" + +msgctxt "#70208" +msgid "Movies 4K" +msgstr Películas 4K + +msgctxt "#70209" +msgid "Horror movies!" +msgstr "Peliculas de miedo! + +msgctxt "#70210" +msgid " (In %s and %s)" +msgstr " (En %s y %s)" + +msgctxt "#70211" +msgid " (In %s)" +msgstr " (En %s)" + +msgctxt "#70212" +msgid " - Castellan" +msgstr " - Castellano" + +msgctxt "#70213" +msgid " - Latin" +msgstr " - Latino" + +msgctxt "#70214" +msgid " - Torrent" +msgstr " - Torrent" + + From b64f377cfaa214157a1aed548c0a35084c7b7386 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 16 Jun 2018 19:02:49 +0200 Subject: [PATCH 13/66] Add files via upload --- .../language/Spanish (Argentina)/strings.po | 68 ++++++++++++++++++- 1 file changed, 65 insertions(+), 3 deletions(-) diff --git a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po index 17b7b58c..77fe4fff 100644 --- a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po @@ -338,8 +338,8 @@ msgid "Looking for %s..." msgstr "Buscando %s..." msgctxt "#30994" -msgid "Searching in %s..." -msgstr "Buscando en %s..." +msgid "Searching in %s" +msgstr "Buscando en %s" msgctxt "#30995" msgid "%d found so far: %s" @@ -3527,4 +3527,66 @@ msgstr "- Upload tests to web!" msgctxt "#70206" msgid "Link found in %s" -msgstr "Enlace encontrado en %s" \ No newline at end of file +msgstr "Enlace encontrado en %s" + +msgctxt "#70207" +msgid " - Movies 4K " +msgstr " - Películas 4K " + +msgctxt "#70208" +msgid "Movies 4K" +msgstr Películas 4K" + +msgctxt "#70209" +msgid "Horror movies" +msgstr Peliculas de miedo!" + +msgctxt "#70210" +msgid " (In %s and %s)" +msgstr " (En %s y %s)" + +msgctxt "#70211" +msgid " (In %s)" +msgstr " (En %s)" + +msgctxt "#70212" +msgid " - Castellan" +msgstr " - Castellano" + +msgctxt "#70213" +msgid " - Latin" +msgstr " - Latino" + +msgctxt "#70214" +msgid " - Torrent" +msgstr " - Torrent" + +msgctxt "#70208" +msgid "Movies 4K" +msgstr Películas 4K + +msgctxt "#70209" +msgid "Horror movies!" +msgstr "Peliculas de miedo! + +msgctxt "#70210" +msgid " (In %s and %s)" +msgstr " (En %s y %s)" + +msgctxt "#70211" +msgid " (In %s)" +msgstr " (En %s)" + +msgctxt "#70212" +msgid " - Castellan" +msgstr " - Castellano" + +msgctxt "#70213" +msgid " - Latin" +msgstr " - Latino" + +msgctxt "#70214" +msgid " - Torrent" +msgstr " - Torrent" + + From d2ff74065357bbbaf8f95eaaee61c1315c02bb3f Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 16 Jun 2018 19:03:22 +0200 Subject: [PATCH 14/66] Add files via upload --- .../language/Spanish (Mexico)/strings.po | 68 ++++++++++++++++++- 1 file changed, 65 insertions(+), 3 deletions(-) diff --git a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po index 17b7b58c..77fe4fff 100644 --- a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po @@ -338,8 +338,8 @@ msgid "Looking for %s..." msgstr "Buscando %s..." msgctxt "#30994" -msgid "Searching in %s..." -msgstr "Buscando en %s..." +msgid "Searching in %s" +msgstr "Buscando en %s" msgctxt "#30995" msgid "%d found so far: %s" @@ -3527,4 +3527,66 @@ msgstr "- Upload tests to web!" msgctxt "#70206" msgid "Link found in %s" -msgstr "Enlace encontrado en %s" \ No newline at end of file +msgstr "Enlace encontrado en %s" + +msgctxt "#70207" +msgid " - Movies 4K " +msgstr " - Películas 4K " + +msgctxt "#70208" +msgid "Movies 4K" +msgstr Películas 4K" + +msgctxt "#70209" +msgid "Horror movies" +msgstr Peliculas de miedo!" + +msgctxt "#70210" +msgid " (In %s and %s)" +msgstr " (En %s y %s)" + +msgctxt "#70211" +msgid " (In %s)" +msgstr " (En %s)" + +msgctxt "#70212" +msgid " - Castellan" +msgstr " - Castellano" + +msgctxt "#70213" +msgid " - Latin" +msgstr " - Latino" + +msgctxt "#70214" +msgid " - Torrent" +msgstr " - Torrent" + +msgctxt "#70208" +msgid "Movies 4K" +msgstr Películas 4K + +msgctxt "#70209" +msgid "Horror movies!" +msgstr "Peliculas de miedo! + +msgctxt "#70210" +msgid " (In %s and %s)" +msgstr " (En %s y %s)" + +msgctxt "#70211" +msgid " (In %s)" +msgstr " (En %s)" + +msgctxt "#70212" +msgid " - Castellan" +msgstr " - Castellano" + +msgctxt "#70213" +msgid " - Latin" +msgstr " - Latino" + +msgctxt "#70214" +msgid " - Torrent" +msgstr " - Torrent" + + From a6aa1e39fd84a1abeaf464d2207d733eb2f300bd Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 16 Jun 2018 19:04:35 +0200 Subject: [PATCH 15/66] Add files via upload --- plugin.video.alfa/videolibrary_service.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/plugin.video.alfa/videolibrary_service.py b/plugin.video.alfa/videolibrary_service.py index 1252fd80..a6c08725 100644 --- a/plugin.video.alfa/videolibrary_service.py +++ b/plugin.video.alfa/videolibrary_service.py @@ -3,14 +3,9 @@ # Service for updating new episodes on library series # ------------------------------------------------------------ -import datetime -import imp -import math -import threading +import datetime, imp, math, threading -from core import channeltools -from core import filetools -from core import videolibrarytools +from core import channeltools, filetools, videolibrarytools from platformcode import config, logger from platformcode import platformtools @@ -28,7 +23,7 @@ def update(path, p_dialog, i, t, serie, overwrite): if channel_enabled: - heading = 'Actualizando videoteca....' + heading = config.get_localized_string(60389) p_dialog.update(int(math.ceil((i + 1) * t)), heading, "%s: %s" % (serie.contentSerieName, serie.channel.capitalize())) try: @@ -81,8 +76,8 @@ def check_for_update(overwrite=True): if config.get_setting("update", "videolibrary") != 0 or overwrite: config.set_setting("updatelibrary_last_check", hoy.strftime('%Y-%m-%d'), "videolibrary") - heading = 'Actualizando videoteca....' - p_dialog = platformtools.dialog_progress_bg('alfa', heading) + heading = config.get_localized_string(60389) + p_dialog = platformtools.dialog_progress_bg(config.get_localized_string(20000), heading) p_dialog.update(0, '') show_list = [] @@ -174,7 +169,7 @@ def check_for_update(overwrite=True): p_dialog.close() else: - logger.info("No actualiza la videoteca, está desactivado en la configuración de alfa") + logger.info("No actualiza la videoteca, está desactivado en la configuración de icarus") except Exception, ex: logger.error("Se ha producido un error al actualizar las series") From bfcac9caa1be34ce13b42f5082af13b5d584c5af Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 16 Jun 2018 19:07:18 +0200 Subject: [PATCH 16/66] Add files via upload --- plugin.video.alfa/videolibrary_service.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin.video.alfa/videolibrary_service.py b/plugin.video.alfa/videolibrary_service.py index a6c08725..478977d9 100644 --- a/plugin.video.alfa/videolibrary_service.py +++ b/plugin.video.alfa/videolibrary_service.py @@ -169,7 +169,7 @@ def check_for_update(overwrite=True): p_dialog.close() else: - logger.info("No actualiza la videoteca, está desactivado en la configuración de icarus") + logger.info("No actualiza la videoteca, está desactivado en la configuración de alfa") except Exception, ex: logger.error("Se ha producido un error al actualizar las series") From 7654c38a91c851ad820389a1fb6104eaaed53641 Mon Sep 17 00:00:00 2001 From: angedam Date: Mon, 18 Jun 2018 18:26:22 +0200 Subject: [PATCH 17/66] fix translation --- plugin.video.alfa/core/downloader.py | 546 -- .../platformcode/platformtools.py | 2 +- .../resources/language/English/strings.po | 6999 ++++++++++++++++- .../resources/language/Italian/strings.po | 4 + 4 files changed, 6960 insertions(+), 591 deletions(-) delete mode 100755 plugin.video.alfa/core/downloader.py diff --git a/plugin.video.alfa/core/downloader.py b/plugin.video.alfa/core/downloader.py deleted file mode 100755 index 2bc37735..00000000 --- a/plugin.video.alfa/core/downloader.py +++ /dev/null @@ -1,546 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -Clase Downloader -Downloader(url, path [, filename, headers, resume]) - - url : string - url para descargar - path : string - Directorio donde se guarda la descarga - filename : [opt] string - Nombre de archivo para guardar - headers : [opt] dict - Headers para usar en la descarga - resume : [opt] bool - continuar una descarga previa en caso de existir, por defecto True - - -metodos: - start_dialog() Inicia la descarga mostrando el progreso - start() Inicia la descarga en segundo plano - stop(erase = False) Detiene la descarga, con erase = True elimina los datos descargados - -""" -import mimetypes -import os -import re -import sys -import threading -import time -import urllib -import urllib2 -import urlparse -from threading import Thread, Lock - -from core import filetools -from platformcode import logger - - -class Downloader: - @property - def state(self): - return self._state - - @property - def connections(self): - return len([c for c in self._download_info["parts"] if - c["status"] in [self.states.downloading, self.states.connecting]]), self._max_connections - - @property - def downloaded(self): - return self.__change_units__(sum([c["current"] - c["start"] for c in self._download_info["parts"]])) - - @property - def average_speed(self): - return self.__change_units__(self._average_speed) - - @property - def speed(self): - return self.__change_units__(self._speed) - - @property - def remaining_time(self): - if self.speed[0] and self._file_size: - t = (self.size[0] - self.downloaded[0]) / self.speed[0] - else: - t = 0 - - return time.strftime("%H:%M:%S", time.gmtime(t)) - - @property - def download_url(self): - return self.url - - @property - def size(self): - return self.__change_units__(self._file_size) - - @property - def progress(self): - if self._file_size: - return float(self.downloaded[0]) * 100 / float(self._file_size) - elif self._state == self.states.completed: - return 100 - else: - return 0 - - @property - def filename(self): - return self._filename - - @property - def fullpath(self): - return os.path.abspath(filetools.join(self._path, self._filename)) - - # Funciones - def start_dialog(self, title="Descargando..."): - from platformcode import platformtools - progreso = platformtools.dialog_progress(title, "Iniciando descarga...") - self.start() - while self.state == self.states.downloading and not progreso.iscanceled(): - time.sleep(0.1) - line1 = "%s" % (self.filename) - line2 = "%.2f%% - %.2f %s de %.2f %s a %.2f %s/s (%d/%d)" % ( - self.progress, self.downloaded[1], self.downloaded[2], self.size[1], self.size[2], - self.speed[1], self.speed[2], self.connections[0], self.connections[1]) - line3 = "Tiempo restante: %s" % (self.remaining_time) - - progreso.update(int(self.progress), line1, line2, line3) - if self.state == self.states.downloading: - self.stop() - progreso.close() - - def start(self): - if self._state == self.states.error: return - conns = [] - for x in range(self._max_connections): - try: - conns.append(self.__open_connection__("0", "")) - except: - self._max_connections = x - self._threads = [ - Thread(target=self.__start_part__, name="Downloader %s/%s" % (x + 1, self._max_connections)) for x - in range(self._max_connections)] - break - del conns - self._start_time = time.time() - 1 - self._state = self.states.downloading - self._speed_thread.start() - self._save_thread.start() - - for t in self._threads: t.start() - - def stop(self, erase=False): - if self._state == self.states.downloading: - # Detenemos la descarga - self._state = self.states.stopped - for t in self._threads: - if t.isAlive(): t.join() - - if self._save_thread.isAlive(): self._save_thread.join() - - if self._seekable: - # Guardamos la info al final del archivo - self.file.seek(0, 2) - offset = self.file.tell() - self.file.write(str(self._download_info)) - self.file.write("%0.16d" % offset) - - self.file.close() - - if erase: os.remove(filetools.join(self._path, self._filename)) - - def __speed_metter__(self): - self._speed = 0 - self._average_speed = 0 - - downloaded = self._start_downloaded - downloaded2 = self._start_downloaded - t = time.time() - t2 = time.time() - time.sleep(1) - - while self.state == self.states.downloading: - self._average_speed = (self.downloaded[0] - self._start_downloaded) / (time.time() - self._start_time) - self._speed = (self.downloaded[0] - self._start_downloaded) / (time.time() - self._start_time) - # self._speed = (self.downloaded[0] - downloaded) / (time.time() -t) - - if time.time() - t > 5: - t = t2 - downloaded = downloaded2 - t2 = time.time() - downloaded2 = self.downloaded[0] - - time.sleep(0.5) - - # Funciones internas - def __init__(self, url, path, filename=None, headers=[], resume=True, max_connections=10, block_size=2 ** 17, - part_size=2 ** 24, max_buffer=10): - # Parametros - self._resume = resume - self._path = path - self._filename = filename - self._max_connections = max_connections - self._block_size = block_size - self._part_size = part_size - self._max_buffer = max_buffer - - try: - import xbmc - self.tmp_path = xbmc.translatePath("special://temp/") - except: - self.tmp_path = os.getenv("TEMP") or os.getenv("TMP") or os.getenv("TMPDIR") - - self.states = type('states', (), - {"stopped": 0, "connecting": 1, "downloading": 2, "completed": 3, "error": 4, "saving": 5}) - - self._state = self.states.stopped - self._download_lock = Lock() - self._headers = { - "User-Agent": "Kodi/15.2 (Windows NT 10.0; WOW64) App_Bitness/32 Version/15.2-Git:20151019-02e7013"} - self._speed = 0 - self._buffer = {} - self._seekable = True - - self._threads = [Thread(target=self.__start_part__, name="Downloader %s/%s" % (x + 1, self._max_connections)) - for x in range(self._max_connections)] - self._speed_thread = Thread(target=self.__speed_metter__, name="Speed Meter") - self._save_thread = Thread(target=self.__save_file__, name="File Writer") - - # Actualizamos los headers - self._headers.update(dict(headers)) - - # Separamos los headers de la url - self.__url_to_headers__(url) - - # Obtenemos la info del servidor - self.__get_download_headers__() - - self._file_size = int(self.response_headers.get("content-length", "0")) - - if not self.response_headers.get("accept-ranges") == "bytes" or self._file_size == 0: - self._max_connections = 1 - self._part_size = 0 - self._resume = False - - # Obtenemos el nombre del archivo - self.__get_download_filename__() - - # Abrimos en modo "a+" para que cree el archivo si no existe, luego en modo "r+b" para poder hacer seek() - self.file = filetools.file_open(filetools.join(self._path, self._filename), "a+") - self.file = filetools.file_open(filetools.join(self._path, self._filename), "r+b") - - if self._file_size >= 2 ** 31 or not self._file_size: - try: - self.file.seek(2 ** 31) - except OverflowError: - self._seekable = False - logger.info("No se puede hacer seek() ni tell() en ficheros mayores de 2GB") - - self.__get_download_info__() - - logger.info("Descarga inicializada: Partes: %s | Ruta: %s | Archivo: %s | Tamaño: %s" % ( - len(self._download_info["parts"]), self._path, self._filename, self._download_info["size"])) - - def __url_to_headers__(self, url): - # Separamos la url de los headers adicionales - self.url = url.split("|")[0] - - # headers adicionales - if "|" in url: - self._headers.update(dict([[header.split("=")[0], urllib.unquote_plus(header.split("=")[1])] for header in - url.split("|")[1].split("&")])) - - def __get_download_headers__(self): - if self.url.startswith("https"): - try: - conn = urllib2.urlopen(urllib2.Request(self.url.replace("https", "http"), headers=self._headers)) - conn.fp._sock.close() - self.url = self.url.replace("https", "http") - except: - pass - - for x in range(3): - try: - if not sys.hexversion > 0x0204FFFF: - conn = urllib2.urlopen(urllib2.Request(self.url, headers=self._headers)) - conn.fp._sock.close() - else: - conn = urllib2.urlopen(urllib2.Request(self.url, headers=self._headers), timeout=5) - - except: - self.response_headers = dict() - self._state = self.states.error - else: - self.response_headers = conn.headers.dict - self._state = self.states.stopped - break - - def __get_download_filename__(self): - # Obtenemos nombre de archivo y extension - if "filename" in self.response_headers.get("content-disposition", - "") and "attachment" in self.response_headers.get( - "content-disposition", ""): - cd_filename, cd_ext = os.path.splitext(urllib.unquote_plus( - re.compile("attachment; filename ?= ?[\"|']?([^\"']+)[\"|']?").match( - self.response_headers.get("content-disposition")).group(1))) - if "filename" in self.response_headers.get("content-disposition", "") and "inline" in self.response_headers.get( - "content-disposition", ""): - cd_filename, cd_ext = os.path.splitext(urllib.unquote_plus( - re.compile("inline; filename ?= ?[\"|']?([^\"']+)[\"|']?").match( - self.response_headers.get("content-disposition")).group(1))) - else: - cd_filename, cd_ext = "", "" - - url_filename, url_ext = os.path.splitext( - urllib.unquote_plus(filetools.basename(urlparse.urlparse(self.url)[2]))) - if self.response_headers.get("content-type", "application/octet-stream") <> "application/octet-stream": - mime_ext = mimetypes.guess_extension(self.response_headers.get("content-type")) - else: - mime_ext = "" - - # Seleccionamos el nombre mas adecuado - if cd_filename: - self.remote_filename = cd_filename - if not self._filename: - self._filename = cd_filename - - elif url_filename: - self.remote_filename = url_filename - if not self._filename: - self._filename = url_filename - - # Seleccionamos la extension mas adecuada - if cd_ext: - if not cd_ext in self._filename: self._filename += cd_ext - if self.remote_filename: self.remote_filename += cd_ext - elif mime_ext: - if not mime_ext in self._filename: self._filename += mime_ext - if self.remote_filename: self.remote_filename += mime_ext - elif url_ext: - if not url_ext in self._filename: self._filename += url_ext - if self.remote_filename: self.remote_filename += url_ext - - def __change_units__(self, value): - import math - units = ["B", "KB", "MB", "GB"] - if value <= 0: - return 0, 0, units[0] - else: - return value, value / 1024.0 ** int(math.log(value, 1024)), units[int(math.log(value, 1024))] - - def __get_download_info__(self): - # Continuamos con una descarga que contiene la info al final del archivo - self._download_info = {} - - try: - if not self._resume: - raise Exception() - self.file.seek(-16, 2) - offset = int(self.file.read()) - self.file.seek(offset) - data = self.file.read()[:-16] - self._download_info = eval(data) - if not self._download_info["size"] == self._file_size: - raise Exception() - self.file.seek(offset) - self.file.truncate() - - if not self._seekable: - for part in self._download_info["parts"]: - if part["start"] >= 2 ** 31 and part["status"] == self.states.completed: - part["status"] == self.states.stopped - part["current"] == part["start"] - - self._start_downloaded = sum([c["current"] - c["start"] for c in self._download_info["parts"]]) - self.pending_parts = set( - [x for x, a in enumerate(self._download_info["parts"]) if not a["status"] == self.states.completed]) - self.completed_parts = set( - [x for x, a in enumerate(self._download_info["parts"]) if a["status"] == self.states.completed]) - self.save_parts = set() - self.download_parts = set() - - # La info no existe o no es correcta, comenzamos de 0 - except: - self._download_info["parts"] = [] - if self._file_size and self._part_size: - for x in range(0, self._file_size, self._part_size): - end = x + self._part_size - 1 - if end >= self._file_size: end = self._file_size - 1 - self._download_info["parts"].append( - {"start": x, "end": end, "current": x, "status": self.states.stopped}) - else: - self._download_info["parts"].append( - {"start": 0, "end": self._file_size - 1, "current": 0, "status": self.states.stopped}) - - self._download_info["size"] = self._file_size - self._start_downloaded = 0 - self.pending_parts = set([x for x in range(len(self._download_info["parts"]))]) - self.completed_parts = set() - self.save_parts = set() - self.download_parts = set() - - self.file.seek(0) - self.file.truncate() - - def __open_connection__(self, start, end): - headers = self._headers.copy() - if not end: end = "" - headers.update({"Range": "bytes=%s-%s" % (start, end)}) - if not sys.hexversion > 0x0204FFFF: - conn = urllib2.urlopen(urllib2.Request(self.url, headers=headers)) - else: - conn = urllib2.urlopen(urllib2.Request(self.url, headers=headers), timeout=5) - return conn - - def __check_consecutive__(self, id): - return id == 0 or (len(self.completed_parts) >= id and sorted(self.completed_parts)[id - 1] == id - 1) - - def __save_file__(self): - logger.info("Thread iniciado: %s" % threading.current_thread().name) - - while self._state == self.states.downloading: - if not self.pending_parts and not self.download_parts and not self.save_parts: # Descarga finalizada - self._state = self.states.completed - self.file.close() - continue - - elif not self.save_parts: - continue - - save_id = min(self.save_parts) - - if not self._seekable and self._download_info["parts"][save_id][ - "start"] >= 2 ** 31 and not self.__check_consecutive__(save_id): - continue - - if self._seekable or self._download_info["parts"][save_id]["start"] < 2 ** 31: - self.file.seek(self._download_info["parts"][save_id]["start"]) - - try: - # file = open(os.path.join(self.tmp_path, self._filename + ".part%s" % save_id), "rb") - # self.file.write(file.read()) - # file.close() - # os.remove(os.path.join(self.tmp_path, self._filename + ".part%s" % save_id)) - for a in self._buffer.pop(save_id): - self.file.write(a) - self.save_parts.remove(save_id) - self.completed_parts.add(save_id) - self._download_info["parts"][save_id]["status"] = self.states.completed - except: - import traceback - logger.error(traceback.format_exc()) - self._state = self.states.error - - if self.save_parts: - for s in self.save_parts: - self._download_info["parts"][s]["status"] = self.states.stopped - self._download_info["parts"][s]["current"] = self._download_info["parts"][s]["start"] - - logger.info("Thread detenido: %s" % threading.current_thread().name) - - def __get_part_id__(self): - self._download_lock.acquire() - if len(self.pending_parts): - id = min(self.pending_parts) - self.pending_parts.remove(id) - self.download_parts.add(id) - self._download_lock.release() - return id - else: - self._download_lock.release() - return None - - def __set_part_connecting__(self, id): - logger.info("ID: %s Estableciendo conexión" % id) - self._download_info["parts"][id]["status"] = self.states.connecting - - def __set_part__error__(self, id): - logger.info("ID: %s Error al descargar" % id) - self._download_info["parts"][id]["status"] = self.states.error - self.pending_parts.add(id) - self.download_parts.remove(id) - - def __set_part__downloading__(self, id): - logger.info("ID: %s Descargando datos..." % id) - self._download_info["parts"][id]["status"] = self.states.downloading - - def __set_part_completed__(self, id): - logger.info("ID: %s ¡Descarga finalizada!" % id) - self._download_info["parts"][id]["status"] = self.states.saving - self.download_parts.remove(id) - self.save_parts.add(id) - while self._state == self.states.downloading and len(self._buffer) > self._max_connections + self._max_buffer: - time.sleep(0.1) - - def __set_part_stopped__(self, id): - if self._download_info["parts"][id]["status"] == self.states.downloading: - self._download_info["parts"][id]["status"] = self.states.stopped - self.download_parts.remove(id) - self.pending_parts.add(id) - - def __open_part_file__(self, id): - file = open(os.path.join(self.tmp_path, self._filename + ".part%s" % id), "a+") - file = open(os.path.join(self.tmp_path, self._filename + ".part%s" % id), "r+b") - file.seek(self._download_info["parts"][id]["current"] - self._download_info["parts"][id]["start"]) - return file - - def __start_part__(self): - logger.info("Thread Iniciado: %s" % threading.current_thread().name) - while self._state == self.states.downloading: - id = self.__get_part_id__() - if id is None: break - - self.__set_part_connecting__(id) - - try: - connection = self.__open_connection__(self._download_info["parts"][id]["current"], - self._download_info["parts"][id]["end"]) - except: - self.__set_part__error__(id) - time.sleep(5) - continue - - self.__set_part__downloading__(id) - # file = self.__open_part_file__(id) - - if not id in self._buffer: - self._buffer[id] = [] - speed = [] - - while self._state == self.states.downloading: - try: - start = time.time() - buffer = connection.read(self._block_size) - speed.append(len(buffer) / ((time.time() - start) or 0.001)) - except: - logger.info("ID: %s Error al descargar los datos" % id) - self._download_info["parts"][id]["status"] = self.states.error - self.pending_parts.add(id) - self.download_parts.remove(id) - break - else: - if len(buffer) and self._download_info["parts"][id]["current"] < self._download_info["parts"][id][ - "end"]: - # file.write(buffer) - self._buffer[id].append(buffer) - self._download_info["parts"][id]["current"] += len(buffer) - if len(speed) > 10: - velocidad_minima = sum(speed) / len(speed) / 3 - velocidad = speed[-1] - vm = self.__change_units__(velocidad_minima) - v = self.__change_units__(velocidad) - - if velocidad_minima > speed[-1] and velocidad_minima > speed[-2] and \ - self._download_info["parts"][id]["current"] < \ - self._download_info["parts"][id]["end"]: - connection.fp._sock.close() - logger.info( - "ID: %s ¡Reiniciando conexión! | Velocidad minima: %.2f %s/s | Velocidad: %.2f %s/s" % \ - (id, vm[1], vm[2], v[1], v[2])) - # file.close() - break - else: - self.__set_part_completed__(id) - connection.fp._sock.close() - # file.close() - break - - self.__set_part_stopped__(id) - logger.info("Thread detenido: %s" % threading.current_thread().name) diff --git a/plugin.video.alfa/platformcode/platformtools.py b/plugin.video.alfa/platformcode/platformtools.py index be0f6185..5ac86e8a 100644 --- a/plugin.video.alfa/platformcode/platformtools.py +++ b/plugin.video.alfa/platformcode/platformtools.py @@ -514,7 +514,7 @@ def set_context_commands(item, parent_item): item.wanted = item.contentSerieName else: item.wanted = item.contentTitle - context_commands.append(("[COLOR yellow]Buscar en otros canales[/COLOR]", + context_commands.append((config.get_localized_string(60350), "XBMC.Container.Update (%s?%s)" % (sys.argv[0], item.clone(channel='search', action="do_search", diff --git a/plugin.video.alfa/resources/language/English/strings.po b/plugin.video.alfa/resources/language/English/strings.po index 574a56a4..82f3ca5f 100644 --- a/plugin.video.alfa/resources/language/English/strings.po +++ b/plugin.video.alfa/resources/language/English/strings.po @@ -6,16 +6,35 @@ msgstr "" "Project-Id-Version: KODI Main\n" "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Kodi Translation Team\n" -"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/kodi-main/language/en_GB/)\n" +"PO-Revision-Date: 2018-03-26 03:02+0200\n" +"Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: en_GB\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.0.4\n" +"Last-Translator: M# Kodi Media Center language file +# strings 30000 thru 30999 reserved for plugins and plugin settings +# +msgid "" +msgstr "" +"Project-Id-Version: KODI Main\n" +"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" +"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2018-03-26 03:02+0200\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.0.4\n" +"Last-Translator: MrTruth\n" +"Last-Translator: Angedam\n" +"Language: en_EN\n" -# empty string with id 30000 +msgctxt "#20000" +msgid "Alfa" +msgstr "" msgctxt "#30001" msgid "Check for updates:" @@ -29,10 +48,6 @@ msgctxt "#30003" msgid "Enable debug logging:" msgstr "" -msgctxt "#30043" -msgid "Force view mode:" -msgstr "" - msgctxt "#30004" msgid "Automatic update channels:" msgstr "" @@ -53,8 +68,6 @@ msgctxt "#30008" msgid "Watch in high quality" msgstr "" -# empty string with id 30009 - msgctxt "#30010" msgid "Channel icons view:" msgstr "" @@ -67,12 +80,6 @@ msgctxt "#30012" msgid "Banner (horizontal)" msgstr "" -msgctxt "#30200" -msgid "Square" -msgstr "" - -# empty string with id 30013 - msgctxt "#30014" msgid "Username:" msgstr "" @@ -81,8 +88,6 @@ msgctxt "#30015" msgid "Password:" msgstr "" -# empty string with id 30016 - msgctxt "#30017" msgid "Download path:" msgstr "" @@ -91,20 +96,16 @@ msgctxt "#30018" msgid "Download list path:" msgstr "" -msgctxt "#30067" -msgid "Videolibrary path:" -msgstr "" - msgctxt "#30019" msgid "Filter channels by language:" msgstr "" -msgctxt "#30044" -msgid "Play mode:" +msgctxt "#30043" +msgid "Force view mode:" msgstr "" -msgctxt "#30068" -msgid "Filter by servers:" +msgctxt "#30044" +msgid "Play mode:" msgstr "" msgctxt "#30050" @@ -131,8 +132,16 @@ msgctxt "#30065" msgid "Unsopported Server" msgstr "" +msgctxt "#30067" +msgid "Videolibrary path:" +msgstr "" + +msgctxt "#30068" +msgid "Filter by servers:" +msgstr "" + msgctxt "#30100" -msgid "Configuration" +msgid "Settings" msgstr "" msgctxt "#30101" @@ -167,14 +176,6 @@ msgctxt "#30112" msgid "Enter title to search" msgstr "" -msgctxt "#30135" -msgid "added to the videolibrary" -msgstr "" - -msgctxt "#30130" -msgid "Recent" -msgstr "" - msgctxt "#30118" msgid "Channels" msgstr "" @@ -203,22 +204,30 @@ msgctxt "#30125" msgid "Documentaries" msgstr "" -msgctxt "#30136" -msgid "Original version" -msgstr "" - msgctxt "#30126" msgid "Adult" msgstr "" -msgctxt "#30137" -msgid "Direct" +msgctxt "#30130" +msgid "Recent" msgstr "" msgctxt "#30131" msgid "Videolibrary" msgstr "" +msgctxt "#30135" +msgid "added to the videolibrary" +msgstr "" + +msgctxt "#30136" +msgid "Original version" +msgstr "" + +msgctxt "#30137" +msgid "Direct" +msgstr "" + msgctxt "#30151" msgid "Watch the video" msgstr "" @@ -251,14 +260,110 @@ msgctxt "#30164" msgid "Delete this file" msgstr "" -msgctxt "#30300" -msgid "Faster context menus" +msgctxt "#30200" +msgid "Square" msgstr "" msgctxt "#30501" msgid "Paths" msgstr "" +msgctxt "#30974" +msgid "Search in Channels" +msgstr "" + +msgctxt "#30975" +msgid "Movie Info" +msgstr "" + +msgctxt "#30976" +msgid "TVShows - Airing Today" +msgstr "" + +msgctxt "#30977" +msgid "Last Episodes - On-Air" +msgstr "" + +msgctxt "#30978" +msgid "New TVShows" +msgstr "" + +msgctxt "#30979" +msgid "Character Info" +msgstr "" + +msgctxt "#30980" +msgid "Search by Title" +msgstr "" + +msgctxt "#30981" +msgid "Search by Person" +msgstr "" + +msgctxt "#30982" +msgid "Search by Company" +msgstr "" + +msgctxt "#30983" +msgid "Now Playing" +msgstr "" + +msgctxt "#30984" +msgid "Popular" +msgstr "" + +msgctxt "#30985" +msgid "Top Rated" +msgstr "" + +msgctxt "#30986" +msgid "Search by Collection" +msgstr "" + +msgctxt "#30987" +msgid "Genre" +msgstr "" + +msgctxt "#30988" +msgid "Search by Year" +msgstr "" + +msgctxt "#30989" +msgid "Search Similar Movies" +msgstr "" + +msgctxt "#30990" +msgid "Search TV show" +msgstr "" + +msgctxt "#30991" +msgid "Library" +msgstr "" + +msgctxt "#30992" +msgid "Next Page" +msgstr "" + +msgctxt "#30993" +msgid "Looking for %s..." +msgstr "" + +msgctxt "#30994" +msgid "Searching in %s..." +msgstr "" + +msgctxt "#30995" +msgid "%d found so far: %s" +msgstr "" + +msgctxt "#30996" +msgid "Most Voted" +msgstr "" + +msgctxt "#30997" +msgid "Academy Awards" +msgstr "" + msgctxt "#30998" msgid "Shortcut" msgstr "" @@ -266,3 +371,6809 @@ msgstr "" msgctxt "#30999" msgid "Add key to open Shortcut" msgstr "" + +msgctxt "#50000" +msgid "Sagas" +msgstr "" + +msgctxt "#50001" +msgid "Today on TV" +msgstr "" + +msgctxt "#50002" +msgid "Latest News" +msgstr "" + +msgctxt "#50003" +msgid "Loading" +msgstr "" + +msgctxt "#50004" +msgid "Path: " +msgstr "" + +msgctxt "#59970" +msgid "Synchronization with Trakt started" +msgstr "" + +msgctxt "#59971" +msgid "Alfa Auto-configuration" +msgstr "" + +msgctxt "#59972" +msgid "Search for: '%s' | Found: %d vídeos | Time: %2.f seconds" +msgstr "" + +msgctxt "#59973" +msgid "Search Cancelled" +msgstr "" + +msgctxt "#59974" +msgid "Choose categories" +msgstr "" + +msgctxt "#59975" +msgid "Subtitles" +msgstr "" + +msgctxt "#59976" +msgid "Latin" +msgstr "" + +msgctxt "#59977" +msgid "4k" +msgstr "" + +msgctxt "#59978" +msgid "horror" +msgstr "" + +msgctxt "#59979" +msgid "kids" +msgstr "" + +msgctxt "#59980" +msgid "Castilian" +msgstr "" + +msgctxt "#59981" +msgid "latin" +msgstr "" + +msgctxt "#59982" +msgid "torrent" +msgstr "" + +msgctxt "#59983" +msgid "" +msgstr "" + +msgctxt "#59984" +msgid "An error has occurred in alfa, \nCheck log for more details." +msgstr "" + +msgctxt "#59985" +msgid "Error in the channel" +msgstr "" + +msgctxt "#59986" +msgid "Error loading the server: %s\n" +msgstr "" + +msgctxt "#59987" +msgid "Start downloading now?" +msgstr "" + +msgctxt "#59988" +msgid "Saving configuration..." +msgstr "" + +msgctxt "#59989" +msgid "Please wait" +msgstr "" + +msgctxt "#59990" +msgid "Channels included in the search" +msgstr "" + +msgctxt "#59991" +msgid "All" +msgstr "" + +msgctxt "#59992" +msgid "None" +msgstr "" + +msgctxt "#59993" +msgid "Configuration -- Search" +msgstr "" + +msgctxt "#59994" +msgid "Choose channels to include in your search" +msgstr "" + +msgctxt "#59995" +msgid "Saved Searches" +msgstr "" + +msgctxt "#59996" +msgid "Delete saved searches" +msgstr "" + +msgctxt "#59997" +msgid "Options" +msgstr "" + +msgctxt "#59998" +msgid "Search by categories (advanced search)" +msgstr "" + +msgctxt "#59999" +msgid "Search for actor/actress" +msgstr "" + +msgctxt "#60000" +msgid "Filtra server (Black List)" +msgstr "" + +msgctxt "#60001" +msgid "Filtra server (Black List)\nNessun collegamento disponibile che soddisfi i requisiti della Black list.\nRiprova modificando il filtro in 'Configurazione Server" +msgstr "" + +msgctxt "#60003" +msgid "Connessione con %s" +msgstr "" + +msgctxt "#60004" +msgid "No connector for the server %s" +msgstr "" + +msgctxt "#60005" +msgid "Connecting with %s" +msgstr "" + +msgctxt "#60006" +msgid "An error has occurred in %s" +msgstr "" + +msgctxt "#60007" +msgid "An error has occurred on %s" +msgstr "" + +msgctxt "#60008" +msgid "Process completed" +msgstr "" + +msgctxt "#60009" +msgid "To watch a vide on %s you need
an account on: %s" +msgstr "" + +msgctxt "#60010" +msgid "All available links belongs to server on your black list.\nDo you want to show these links?" +msgstr "" + +msgctxt "#60011" +msgid "Cache deleted" +msgstr "" + +msgctxt "#60012" +msgid "No video to play" +msgstr "" + +msgctxt "#60013" +msgid "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s.\nIf the web page is working correctly, please report the error on : https://alfa-addon.com/categories/alfa-addon.50/" +msgstr "" + +msgctxt "#60014" +msgid "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of alfa.\nTo have more details, see the log file." +msgstr "" + +msgctxt "#60015" +msgid "Check the log for more details on the error." +msgstr "" + +msgctxt "#60016" +msgid "Segna film come non visto" +msgstr "" + +msgctxt "#60017" +msgid "Mark movie as not watched" +msgstr "" + +msgctxt "#60018" +msgid "Delete movie/channel" +msgstr "" + +msgctxt "#60019" +msgid "Delete this movie" +msgstr "" + +msgctxt "#60020" +msgid "Mark tv series as not watched" +msgstr "" + +msgctxt "#60021" +msgid "Mark tv series as watched" +msgstr "" + +msgctxt "#60022" +msgid "Automatically find new episodes: Disable" +msgstr "" + +msgctxt "#60023" +msgid "Automatically find new episodes: Enable" +msgstr "" + +msgctxt "#60024" +msgid "Delete tv series/channel" +msgstr "" + +msgctxt "#60025" +msgid "Delete tv series" +msgstr "" + +msgctxt "#60026" +msgid "Search for new episodes and update" +msgstr "" + +msgctxt "#60027" +msgid "Season %s" +msgstr "" + +msgctxt "#60028" +msgid "Segna stagione come non vista" +msgstr "" + +msgctxt "#60029" +msgid "Mark season as not watched" +msgstr "" + +msgctxt "#60030" +msgid "*All the seasons" +msgstr "" + +msgctxt "#60031" +msgid "Season %s Episode %s" +msgstr "" + +msgctxt "#60032" +msgid "Mark episode as not watched" +msgstr "" + +msgctxt "#60033" +msgid "Mark episode as watched" +msgstr "" + +msgctxt "#60034" +msgid "Show only link %s" +msgstr "" + +msgctxt "#60035" +msgid "Show all the links" +msgstr "" + +msgctxt "#60036" +msgid "Episode %s" +msgstr "" + +msgctxt "#60037" +msgid "Tv series update ..." +msgstr "" + +msgctxt "#60038" +msgid "An error has occurred on alfa" +msgstr "" + +msgctxt "#60039" +msgid "Error on channel %s" +msgstr "" + +msgctxt "#60040" +msgid "Delete movie" +msgstr "" + +msgctxt "#60041" +msgid "Delete tv series" +msgstr "" + +msgctxt "#60042" +msgid "Delete only the links of %s" +msgstr "" + +msgctxt "#60043" +msgid "Delete %s links of channel %s" +msgstr "" + +msgctxt "#60044" +msgid "Do you want really to delete '%s' from videolibrary?" +msgstr "" + +msgctxt "#60045" +msgid "Sync with Trakt started" +msgstr "" + +msgctxt "#60046" +msgid "TheMovieDB not present.\nInstall it now?" +msgstr "" + +msgctxt "#60047" +msgid "The Movie Database is not installed." +msgstr "" + +msgctxt "#60048" +msgid "The TVDB not present.\nInstall it now?" +msgstr "" + +msgctxt "#60049" +msgid "The TVDB is not installed." +msgstr "" + +msgctxt "#60050" +msgid "TheMovieDB not present.\nInstall it now?" +msgstr "" + +msgctxt "#60051" +msgid "The Movie Database is not installed." +msgstr "" + +msgctxt "#60052" +msgid "Error on setting LibraryPath in BD" +msgstr "" + +msgctxt "#60053" +msgid "Do you want to configure this scraper in italian as default option for the movies ?" +msgstr "" + +msgctxt "#60054" +msgid "Do you want to configure this scraper in italian as default option for the tv series ?" +msgstr "" + +msgctxt "#60055" +msgid "Error of provider configuration in BD." +msgstr "" + +msgctxt "#60056" +msgid "Videolibrary %s not configured" +msgstr "" + +msgctxt "#60057" +msgid "Videolibrary %s configured" +msgstr "" + +msgctxt "#60058" +msgid "You need to restart Kodi for the changes to take effect." +msgstr "" + +msgctxt "#60059" +msgid "Congratulations, Kodi's video library has been configured correctly." +msgstr "" + +msgctxt "#60060" +msgid "Alfa Auto-configuration" +msgstr "" + +msgctxt "#60061" +msgid "Do you want Alfa to auto-configure Kodi's video library?\nIf you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." +msgstr "" + +msgctxt "#60062" +msgid "Adding movies to your video library..." +msgstr "" + +msgctxt "#60063" +msgid "Error in adding movies to your video library..." +msgstr "" + +msgctxt "#60064" +msgid "Adding Episodes to the Video Library..." +msgstr "" + +msgctxt "#60065" +msgid "Added Episode to Video Library..." +msgstr "" + +msgctxt "#60066" +msgid "ERROR, It has NOT been possible to add the video to the video library" +msgstr "" + +msgctxt "#60067" +msgid "ERROR, tv series has NOT been added to videolibrary\nIt has NOT been possible to add no episode" +msgstr "" + +msgctxt "#60068" +msgid "ERROR, tv series has NOT been added to videolibrary" +msgstr "" + +msgctxt "#60069" +msgid "ERRORE, tv series has NOT been added completely to videolibrary" +msgstr "" + +msgctxt "#60070" +msgid "tv series has been added to videolibrary" +msgstr "" + +msgctxt "#60071" +msgid "Autoplay Configuration" +msgstr "" + +msgctxt "#60072" +msgid "It seems that links of %s are not working." +msgstr "" + +msgctxt "#60073" +msgid "Do you want to ignore all the links from this server?" +msgstr "" + +msgctxt "#60074" +msgid "It's not possible to use AutoPlay" +msgstr "" + +msgctxt "#60075" +msgid "No coincidence" +msgstr "" + +msgctxt "#60076" +msgid "New quality/server available in configuration" +msgstr "" + +msgctxt "#60077" +msgid "AutoPlay initialization error" +msgstr "" + +msgctxt "#60078" +msgid "View the log for more information." +msgstr "" + +msgctxt "#60079" +msgid "AutoPlay (Turns AutoPlay On/Off)" +msgstr "" + +msgctxt "#60080" +msgid "AutoPlay Language (Optional)" +msgstr "" + +msgctxt "#60081" +msgid " Favorite servers" +msgstr "" + +msgctxt "#60082" +msgid " \u2665 Favorite server %s" +msgstr "" + +msgctxt "#60083" +msgid " Preferred Qualities" +msgstr "" + +msgctxt "#60084" +msgid " \u2665 Preferred Quality %s" +msgstr "" + +msgctxt "#60085" +msgid " Priority (Indicates the order for AutoPlay)" +msgstr "" + +msgctxt "#60086" +msgid "It has been renamed to:" +msgstr "" + +msgctxt "#60087" +msgid "Unexpected error on channel %s" +msgstr "" + +msgctxt "#60088" +msgid "Enter URL" +msgstr "" + +msgctxt "#60089" +msgid "Enter the URL [Link to server / download]" +msgstr "" + +msgctxt "#60090" +msgid "Enter the URL [Direct link to video]." +msgstr "" + +msgctxt "#60091" +msgid "Enter the URL [Search for links in a URL]" +msgstr "" + +msgctxt "#60092" +msgid "View Direct URL" +msgstr "" + +msgctxt "#60093" +msgid "There is no compatible video in this URL" +msgstr "" + +msgctxt "#60200" +msgid "Download..." +msgstr "" + +msgctxt "#60201" +msgid "Download starting..." +msgstr "" + +msgctxt "#60202" +msgid "Remaining time: %s" +msgstr "" + +msgctxt "#60203" +msgid "Downloader %s/%s" +msgstr "" + +msgctxt "#60204" +msgid "Speed Meter" +msgstr "" + +msgctxt "#60205" +msgid "File Writer" +msgstr "" + +msgctxt "#60206" +msgid "plugin" +msgstr "" + +msgctxt "#60207" +msgid "Download..." +msgstr "" + +msgctxt "#60208" +msgid "You can't download this video" +msgstr "" + +msgctxt "#60209" +msgid "RTMP downloads are not" +msgstr "" + +msgctxt "#60210" +msgid "still supported" +msgstr "" + +msgctxt "#60211" +msgid "Missing %s" +msgstr "" + +msgctxt "#60212" +msgid "Check that rtmpdump is installed" +msgstr "" + +msgctxt "#60213" +msgid "The RTMP download option is experimental" +msgstr "" + +msgctxt "#60214" +msgid "and the video will be downloaded in the background." +msgstr "" + +msgctxt "#60215" +msgid "No progress bar will be displayed." +msgstr "" + +msgctxt "#60216" +msgid "addon" +msgstr "" + +msgctxt "#60217" +msgid "Download..." +msgstr "" + +msgctxt "#60218" +msgid "%.2fMB/%.2fMB (%d%%) %.2f Kb/s %s missing " +msgstr "" + +msgctxt "#60219" +msgid "Copying the file" +msgstr "" + +msgctxt "#60220" +msgid "Error while deleting the file" +msgstr "" + +msgctxt "#60221" +msgid "Error while deleting the directory" +msgstr "" + +msgctxt "#60222" +msgid "Error while creating the directory" +msgstr "" + +msgctxt "#60223" +msgid "Enter another name" +msgstr "" + +msgctxt "#60224" +msgid "Complete information" +msgstr "" + +msgctxt "#60225" +msgid "Search in TheMovieDB.org" +msgstr "" + +msgctxt "#60226" +msgid "Search in TheTvDB.org" +msgstr "" + +msgctxt "#60227" +msgid "Identifier not found for: %s" +msgstr "" + +msgctxt "#60228" +msgid "No information found for: %s" +msgstr "" + +msgctxt "#60229" +msgid "Enter the name of %s to search" +msgstr "" + +msgctxt "#60230" +msgid "Title:" +msgstr "" + +msgctxt "#60231" +msgid "Original title" +msgstr "" + +msgctxt "#60232" +msgid "Year" +msgstr "" + +msgctxt "#60233" +msgid "Identifiers:" +msgstr "" + +msgctxt "#60234" +msgid " The Movie Database ID" +msgstr "" + +msgctxt "#60235" +msgid " URL Tmdb" +msgstr "" + +msgctxt "#60236" +msgid " The TVDB ID" +msgstr "" + +msgctxt "#60237" +msgid " URL TVDB" +msgstr "" + +msgctxt "#60238" +msgid " IMDb ID" +msgstr "" + +msgctxt "#60239" +msgid " Other ID" +msgstr "" + +msgctxt "#60240" +msgid "Images(urls):" +msgstr "" + +msgctxt "#60241" +msgid " Background" +msgstr "" + +msgctxt "#60242" +msgid " Thumbnail" +msgstr "" + +msgctxt "#60243" +msgid "Type of content" +msgstr "" + +msgctxt "#60244" +msgid "Movie" +msgstr "" + +msgctxt "#60245" +msgid "Series" +msgstr "" + +msgctxt "#60246" +msgid "Full information" +msgstr "" + +msgctxt "#60247" +msgid "[%s]: Select the correct %s" +msgstr "" + +msgctxt "#60248" +msgid "Login to this page: %s" +msgstr "" + +msgctxt "#60249" +msgid "Enter this code and accept: %s" +msgstr "" + +msgctxt "#60250" +msgid "Once done, click here!" +msgstr "" + +msgctxt "#60251" +msgid "Synchronize with Trakt. Do not close this window" +msgstr "" + +msgctxt "#60252" +msgid "1. Enter the following URL: %s" +msgstr "" + +msgctxt "#60253" +msgid "2. Enter this code on the page and accept: %s" +msgstr "" + +msgctxt "#60254" +msgid "3. Wait until this window closes" +msgstr "" + +msgctxt "#60255" +msgid "Successfully completed" +msgstr "" + +msgctxt "#60256" +msgid "Account linked correctly" +msgstr "" + +msgctxt "#60257" +msgid "Error" +msgstr "" + +msgctxt "#60258" +msgid "Problem in the connection process" +msgstr "" + +msgctxt "#60259" +msgid "Account linked correctly" +msgstr "" + +msgctxt "#60260" +msgid "Problem in the connection process" +msgstr "" + +msgctxt "#60261" +msgid "Alfa" +msgstr "" + +msgctxt "#60262" +msgid "You can install the Trakt script below, once installed and configured what you see will be automatically synchronized with your account." +msgstr "" + +msgctxt "#60263" +msgid "Do you want to continue?" +msgstr "" + +msgctxt "#60264" +msgid "In progress" +msgstr "" + +msgctxt "#60265" +msgid "Completed" +msgstr "" + +msgctxt "#60266" +msgid "Action" +msgstr "" + +msgctxt "#60267" +msgid "Adventure" +msgstr "" + +msgctxt "#60268" +msgid "Animation" +msgstr "" + +msgctxt "#60269" +msgid "Kids" +msgstr "" + +msgctxt "#60270" +msgid "Comedy" +msgstr "" + +msgctxt "#60271" +msgid "Crime" +msgstr "" + +msgctxt "#60272" +msgid "Documentaries" +msgstr "" + +msgctxt "#60273" +msgid "Family" +msgstr "" + +msgctxt "#60274" +msgid "Fantasy" +msgstr "" + +msgctxt "#60275" +msgid "Cooking" +msgstr "" + +msgctxt "#60276" +msgid "Contests" +msgstr "" + +msgctxt "#60277" +msgid "Home and garden" +msgstr "" + +msgctxt "#60278" +msgid "Mistery" +msgstr "" + +msgctxt "#60279" +msgid "News" +msgstr "" + +msgctxt "#60280" +msgid "Romantic" +msgstr "" + +msgctxt "#60281" +msgid "Science fiction" +msgstr "" + +msgctxt "#60282" +msgid "Soap Opera" +msgstr "" + +msgctxt "#60283" +msgid "Sport" +msgstr "" + +msgctxt "#60284" +msgid "Talk Show" +msgstr "" + +msgctxt "#60285" +msgid "Travels" +msgstr "" + +msgctxt "#60286" +msgid "Pre-child audience: children under 6 years" +msgstr "" + +msgctxt "#60287" +msgid "Child audience: from 7 years old" +msgstr "" + +msgctxt "#60288" +msgid "General audience: without family control" +msgstr "" + +msgctxt "#60289" +msgid "Parental control" +msgstr "" + +msgctxt "#60290" +msgid "More than 14 years old" +msgstr "" + +msgctxt "#60291" +msgid "More than 17 years old" +msgstr "" + +msgctxt "#60292" +msgid "Searching for TV Series Information" +msgstr "" + +msgctxt "#60293" +msgid "Please wait..." +msgstr "" + +msgctxt "#60294" +msgid "Searching for TV Series Information" +msgstr "" + +msgctxt "#60295" +msgid "Loading results..." +msgstr "" + +msgctxt "#60296" +msgid "Searching for TV Series Information" +msgstr "" + +msgctxt "#60297" +msgid "Find %s possible matches" +msgstr "" + +msgctxt "#60298" +msgid "[%s]: Select the correct TV series" +msgstr "" + +msgctxt "#60299" +msgid "Not found in the language '%s'" +msgstr "" + +msgctxt "#60300" +msgid "Search in language 'en'" +msgstr "" + +msgctxt "#60301" +msgid "Not found in the language '%s'" +msgstr "" + +msgctxt "#60302" +msgid "Search in language 'en'" +msgstr "" + +msgctxt "#60303" +msgid "The file already exists" +msgstr "" + +msgctxt "#60304" +msgid "The unzipped %s file already exists, or you want to overwrite it.?" +msgstr "" + +msgctxt "#60305" +msgid "Adult channels" +msgstr "" + +msgctxt "#60306" +msgid "The fields 'New password' and 'Confirm new password' do not match" +msgstr "" + +msgctxt "#60307" +msgid "Use 'Preferences' to change your password" +msgstr "" + +msgctxt "#60308" +msgid "Adult channels" +msgstr "" + +msgctxt "#60309" +msgid "The password is not correct." +msgstr "" + +msgctxt "#60310" +msgid "Changes made in this section will not be saved." +msgstr "" + +msgctxt "#60311" +msgid "Download..." +msgstr "" + +msgctxt "#60312" +msgid "Close this window to start playback" +msgstr "" + +msgctxt "#60313" +msgid "Cancel this window to start playback" +msgstr "" + +msgctxt "#60314" +msgid "Speed: " +msgstr "" + +msgctxt "#60315" +msgid " KB/s " +msgstr "" + +msgctxt "#60316" +msgid "MB of " +msgstr "" + +msgctxt "#60317" +msgid "MB" +msgstr "" + +msgctxt "#60318" +msgid "Remaining time: " +msgstr "" + +msgctxt "#60319" +msgid "Cancelled" +msgstr "" + +msgctxt "#60320" +msgid "Download in background cancelled" +msgstr "" + +msgctxt "#60321" +msgid "Press the button to be used to open the window" +msgstr "" + +msgctxt "#60322" +msgid "You have %s seconds" +msgstr "" + +msgctxt "#60323" +msgid "Press the button to be used to open the window" +msgstr "" + +msgctxt "#60324" +msgid "You have %s seconds" +msgstr "" + +msgctxt "#60325" +msgid "Saved key" +msgstr "" + +msgctxt "#60326" +msgid "Restart Kodi to apply changes" +msgstr "" + +msgctxt "#60327" +msgid "Novelties" +msgstr "" + +msgctxt "#60328" +msgid "Channels" +msgstr "" + +msgctxt "#60329" +msgid "Search" +msgstr "" + +msgctxt "#60330" +msgid "Favorites" +msgstr "" + +msgctxt "#60331" +msgid "Videolibrary" +msgstr "" + +msgctxt "#60332" +msgid "Downloads" +msgstr "" + +msgctxt "#60333" +msgid "Configuration" +msgstr "" + +msgctxt "#60334" +msgid "Password for adult channels" +msgstr "" + +msgctxt "#60335" +msgid "Watch in" +msgstr "" + +msgctxt "#60336" +msgid "Download in" +msgstr "" + +msgctxt "#60337" +msgid "alfa-MCT: No support adf.ly" +msgstr "" + +msgctxt "#60338" +msgid "The script does not support URL reduction adf.ly." +msgstr "" + +msgctxt "#60339" +msgid "Nothing to Play" +msgstr "" + +msgctxt "#60342" +msgid "Download completed: " +msgstr "" + +msgctxt "#60343" +msgid "BMC-Kodi has closed the video." +msgstr "" + +msgctxt "#60344" +msgid "Continue with the session?" +msgstr "" + +msgctxt "#60345" +msgid "alfa-MCT: List of videos" +msgstr "" + +msgctxt "#60346" +msgid "Delete video downloads" +msgstr "" + +msgctxt "#60347" +msgid "No items to display" +msgstr "" + +msgctxt "#60348" +msgid "Information" +msgstr "" + +msgctxt "#60349" +msgid "Go to the Main Menu" +msgstr "" + +msgctxt "#60350" +msgid "[COLOR yellow]Search in other channels[/COLOR]" +msgstr "[COLOR yellow]Search in other channels[/COLOR]" + +msgctxt "#60351" +msgid msgid "[COLOR 0xffccff00]Set as Homepage[/COLOR]" +msgstr "" + +msgctxt "#60352" +msgid "Add TV Series to Videolibrary" +msgstr "" + +msgctxt "#60353" +msgid "Add Movie to Videolibrary" +msgstr "" + +msgctxt "#60354" +msgid "Download Movie" +msgstr "" + +msgctxt "#60355" +msgid "Download TV Series" +msgstr "" + +msgctxt "#60356" +msgid "Download Episode" +msgstr "" + +msgctxt "#60357" +msgid "Download Season" +msgstr "" + +msgctxt "#60358" +msgid "Open Configuration" +msgstr "" + +msgctxt "#60359" +msgid "Search Trailer" +msgstr "" + +msgctxt "#60360" +msgid "[COLOR 0xffccff00][/COLOR]" +msgstr "" + +msgctxt "#60361" +msgid "Super Favourites Menu" +msgstr "" + +msgctxt "#60362" +msgid "You can't watch this video because..." +msgstr "" + +msgctxt "#60363" +msgid "The server on which it is hosted" +msgstr "" + +msgctxt "#60364" +msgid "is not yet supported in Alfa" +msgstr "" + +msgctxt "#60365" +msgid "Loading video..." +msgstr "" + +msgctxt "#60366" +msgid "External plugin: %s" +msgstr "" + +msgctxt "#60376" +msgid "Video information" +msgstr "" + +msgctxt "#60377" +msgid "Title:" +msgstr "" + +msgctxt "#60378" +msgid "Original Title:" +msgstr "" + +msgctxt "#60379" +msgid "Original language:" +msgstr "" + +msgctxt "#60380" +msgid "Score:" +msgstr "" + +msgctxt "#60381" +msgid "Release:" +msgstr "" + +msgctxt "#60382" +msgid "Genres:" +msgstr "" + +msgctxt "#60383" +msgid "Series:" +msgstr "" + +msgctxt "#60384" +msgid "Season title:" +msgstr "" + +msgctxt "#60385" +msgid "Season:" +msgstr "" + +msgctxt "#60386" +msgid "Episode:" +msgstr "" + +msgctxt "#60387" +msgid "Emission:" +msgstr "" + +msgctxt "#60388" +msgid "Summary:" +msgstr "" + +msgctxt "#60389" +msgid "Videolibrary update...." +msgstr "" + +msgctxt "#60390" +msgid "AutoPlay Configuration" +msgstr "" + +msgctxt "#60391" +msgid "AutoPlay" +msgstr "" + +msgctxt "#60392" +msgid "\n\n\nTotal Reset of the addon %s.\n\n[COLOR red]Attention This function completely resets the addon.[/COLOR]" +msgstr "" + +msgctxt "#60393" +msgid "[COLOR red]Reset %s[/COLOR]" +msgstr "" + +msgctxt "#60394" +msgid "Reset %s" +msgstr "" + +msgctxt "#60395" +msgid "Are you sure you want to reset all settings of %s ?" +msgstr "" + +msgctxt "#60396" +msgid "Cancel" +msgstr "" + +msgctxt "#60397" +msgid "Confirm" +msgstr "" + +msgctxt "#60398" +msgid " Settings Reset was successful!" +msgstr "" + +msgctxt "#60399" +msgid "AutoPlay allows you to auto play links directly, based on your server settings and preferred qualities. " +msgstr "" + +msgctxt "#60400" +msgid "512 Mega" +msgstr "" + +msgctxt "#60401" +msgid "1 Gb" +msgstr "" + +msgctxt "#60402" +msgid "2 Gb" +msgstr "" + +msgctxt "#60403" +msgid "more than 2 Gb" +msgstr "" + +msgctxt "#60404" +msgid "Choose cache setting" +msgstr "" + +msgctxt "#60405" +msgid "\n[COLOR orange]Cache Set for 512 Mega RAM[/COLOR]" +msgstr "" + +msgctxt "#60406" +msgid "\n[COLOR orange]Cache Set for 1 Gb RAM[/COLOR]" +msgstr "" + +msgctxt "#60407" +msgid "\n[COLOR orange]Cache Set for 2 Gb RAM[/COLOR]" +msgstr "" + +msgctxt "#60408" +msgid "\n[COLOR orange]Cache Set higher than 2 Gb of RAM[/COLOR]" +msgstr "" + +msgctxt "#60409" +msgid "plugin" +msgstr "" + +msgctxt "#60410" +msgid "An advancedsettings.xml file has been created" +msgstr "" + +msgctxt "#60411" +msgid "with the ideal streaming configuration." +msgstr "" + +msgctxt "#60412" +msgid "Choose channels to include" +msgstr "" + +msgctxt "#60413" +msgid "[COLOR yellow]New Movie Search...[/COLOR]" +msgstr "" + +msgctxt "#60414" +msgid "[COLOR yellow]New search tv series...[/COLOR]" +msgstr "" + +msgctxt "#60415" +msgid "[COLOR green]Other settings[/COLOR]" +msgstr "" + +msgctxt "#60416" +msgid "Delete saved searches" +msgstr "" + +msgctxt "#60417" +msgid "[COLOR red]Delete search history[/COLOR]" +msgstr "" + +msgctxt "#60418" +msgid "Choose channels to include in your search" +msgstr "" + +msgctxt "#60419" +msgid "Delete saved searches" +msgstr "" + +msgctxt "#60420" +msgid "More Options" +msgstr "" + +msgctxt "#60421" +msgid "Channels included in the global search " +msgstr "" + +msgctxt "#60422" +msgid "Search " +msgstr "" + +msgctxt "#60423" +msgid "Search" +msgstr "" + +msgctxt "#60424" +msgid "Searches key have been deleted correctly" +msgstr "" + +msgctxt "#60425" +msgid "Channel search" +msgstr "" + +msgctxt "#60426" +msgid "FILTER: Configure" +msgstr "" + +msgctxt "#60427" +msgid "FILTER: Adding '%s'" +msgstr "" + +msgctxt "#60428" +msgid "FILTER: Delete '%s'" +msgstr "" + +msgctxt "#60429" +msgid "[COLOR %s]Filter configuration for TV series...[/COLOR]" +msgstr "" + +msgctxt "#60430" +msgid "FILTRO: Delete '%s'" +msgstr "" + +msgctxt "#60431" +msgid " and quality %s" +msgstr "" + +msgctxt "#60432" +msgid "[COLOR %s]No results in this language '%s'%s, click to show without filter[/COLOR]" +msgstr "" + +msgctxt "#60433" +msgid " (disabled)" +msgstr "" + +msgctxt "#60434" +msgid "Configure [COLOR %s][%s][/COLOR]%s" +msgstr "" + +msgctxt "#60435" +msgid "There are no filters, search for a TV series and click on the context menu 'FILTER: Configure'" +msgstr "" + +msgctxt "#60436" +msgid "Spanish" +msgstr "" + +msgctxt "#60437" +msgid "Delete" +msgstr "" + +msgctxt "#60438" +msgid "¿Enable / disable filter?" +msgstr "" + +msgctxt "#60439" +msgid "Language" +msgstr "" + +msgctxt "#60440" +msgid "Permitted quality" +msgstr "" + +msgctxt "#60441" +msgid "Filter links for: [COLOR %s]%s[/COLOR]" +msgstr "" + +msgctxt "#60442" +msgid "Are you sure you want to delete the filter?" +msgstr "" + +msgctxt "#60443" +msgid "Click 'Yes' to remove the filter from [COLOR %s]%s[/COLOR], click 'No' or close the window to do nothing." +msgstr "" + +msgctxt "#60444" +msgid "FILTER DELETED" +msgstr "" + +msgctxt "#60445" +msgid "Error on saving on disk" +msgstr "" + +msgctxt "#60446" +msgid "FILTER SAVED" +msgstr "" + +msgctxt "#60447" +msgid "FAQ:" +msgstr "" + +msgctxt "#60448" +msgid " - How do I report an error?" +msgstr "" + +msgctxt "#60449" +msgid " - Is it possible to enable/disable channels?" +msgstr "" + +msgctxt "#60450" +msgid " - Is automatic synchronization with Trakt possible?" +msgstr "" + +msgctxt "#60451" +msgid " - Is it possible to show all the results together in the global search?" +msgstr "" + +msgctxt "#60452" +msgid " - Links take too long to appear." +msgstr "" + +msgctxt "#60453" +msgid " - The content search is not performed correctly." +msgstr "" + +msgctxt "#60454" +msgid " - Some channels do not function properly." +msgstr "" + +msgctxt "#60455" +msgid " - The library does not update correctly." +msgstr "" + +msgctxt "#60456" +msgid " - Links of interest" +msgstr "" + +msgctxt "#60457" +msgid "Alfa" +msgstr "" + +msgctxt "#60458" +msgid "The disabling can be done in 'Settings>Turn on/off channels'. You can toggle channels on/off one at a time or all at the same time. Want to manage your channels now?" +msgstr "" + +msgctxt "#60459" +msgid "Currently it is possible to activate the synchronization (silent) after having marked an episode as 'as watched' (this happens automatically). This option can be enabled in 'Settings>Library Settings'. Do you want access to these settings?" +msgstr "" + +msgctxt "#60460" +msgid "This can be improved by limiting the maximum number of links or by displaying them in a Pop-Up window. These settings can be found in 'Settings>Library Settings' Do you want to access these settings?" +msgstr "" + +msgctxt "#60461" +msgid "Alfa - FAQ - %s" +msgstr "" + +msgctxt "#60462" +msgid "You may not have written the library path correctly in 'Settings>Preferences'.\nIl The specified path must be exactly the same as the 'source' entered in 'Archive' of the Kodi library.\nAVANZATO: This path is also found in 'sources.xml'.\nThere can be problems using some Kodi forks and paths with 'special://'. SPMC, for example, has problems with this, and there doesn't seem to be a solution, as it is an external problem to Alfa that has existed for a long time.\nYou can try solving these problems in 'Settings>Library Settings' by changing the 'Search in' setting from 'The folder of each series' to 'All library'." +msgstr "" + +msgctxt "#60463" +msgid "The channel site may not work. In case the site works you can report the problem on github." +msgstr "" + +msgctxt "#60464" +msgid "It is possible that you have updated Alfa recently and that the changes have not been fully applied Well, you can try 'Settings>Other Tools', checking the *_data.json files or reattaching everything to the library again" +msgstr "" + +msgctxt "#60465" +msgid "Do you want access to these settings?" +msgstr "" + +msgctxt "#60466" +msgid "Yes, the option to display merged or split results by channels can be found in 'Settings>Global Search Settings>Other Settings'. Do you want access to these settings?" +msgstr "" + +msgctxt "#60467" +msgid "To report a problem on'http://alfa-addon.com' you need to:|the version you're using of Alpha.|The version you're using of kodi, mediaserver, etc.|the version and name of the operating system you're using.|The name of the skin (in case you're using Kodi) and whether using the default skin has solved the problem.|Description of the problem and any test cases.To activate the log in detailed mode, go to:|Configuration.|Preferences.|In the General tab - Check the option: Generate detailed log. The detailed log file can be found in the following path: \n\n%s" +msgstr "" + +msgctxt "#60468" +msgid "You can find our Telegram channel at @StreamOnDemandOfficial\nSe you have doubts you can write to us in the Telegram group: https://bit.ly/2I3kRwF" +msgstr "" + +msgctxt "#60469" +msgid "Uploading new data" +msgstr "" + +msgctxt "#60470" +msgid "Buscando en Tmdb......." +msgstr "" + +msgctxt "#60471" +msgid "No results, missing information about the year of the video" +msgstr "" + +msgctxt "#60472" +msgid "There is no information on the %s required" +msgstr "" + +msgctxt "#60473" +msgid "No results" +msgstr "" + +msgctxt "#60474" +msgid "There is no information on the %s required" +msgstr "" + +msgctxt "#60475" +msgid "Filmaffinity recording......." +msgstr "" + +msgctxt "#60476" +msgid "[COLOR yellow][B]There is no information about this movie...[/B][/COLOR]" +msgstr "" + +msgctxt "#60477" +msgid "Important recommendations......." +msgstr "" + +msgctxt "#60478" +msgid "[COLOR aquamarine][B]Completated %s[/B][/COLOR]" +msgstr "" + +msgctxt "#60479" +msgid "[COLOR aquamarine][B]In progress %s[/B][/COLOR]" +msgstr "" + +msgctxt "#60480" +msgid "(Seasons: %s)" +msgstr "" + +msgctxt "#60481" +msgid "Picture collection on FANART.TV" +msgstr "" + +msgctxt "#60482" +msgid "Tuned Instruments in Vtunes" +msgstr "" + +msgctxt "#60483" +msgid "Picture collection on FANART.TV" +msgstr "" + +msgctxt "#60484" +msgid "[COLOR red][B]Update Kodi to its latest version[/B][/COLOR]" +msgstr "" + +msgctxt "#60485" +msgid "[COLOR skyblue]for detailed info[/COLOR]" +msgstr "" + +msgctxt "#60486" +msgid "Uploading new information" +msgstr "" + +msgctxt "#60487" +msgid "Search in Tmdb......." +msgstr "" + +msgctxt "#60488" +msgid "No information..." +msgstr "" + +msgctxt "#60489" +msgid "[COLOR limegreen][B]Production company: [/B][/COLOR]" +msgstr "" + +msgctxt "#60490" +msgid "[COLOR limegreen][B]Country: [/B][/COLOR]" +msgstr "" + +msgctxt "#60491" +msgid "[COLOR limegreen][B]Preview: [/B][/COLOR]" +msgstr "" + +msgctxt "#60492" +msgid "[COLOR limegreen][B]Seasons/Episodes: [/B][/COLOR]" +msgstr "" + +msgctxt "#60493" +msgid "[COLOR orange][B]Is there the tv series you're looking for?[/B][/COLOR]" +msgstr "" + +msgctxt "#60494" +msgid "[COLOR orange][B]Is there the movie you are looking for?[/B][/COLOR]" +msgstr "" + +msgctxt "#60495" +msgid "[COLOR tomato][B]Close[/B][/COLOR]" +msgstr "" + +msgctxt "#60496" +msgid "Loading results" +msgstr "" + +msgctxt "#60497" +msgid "Wait........" +msgstr "" + +msgctxt "#60498" +msgid "[COLOR orange][B]Select...[/B][/COLOR]" +msgstr "" + +msgctxt "#60499" +msgid "plugin" +msgstr "" + +msgctxt "#60500" +msgid "Nothing to play" +msgstr "" + +msgctxt "#60501" +msgid "[COLOR orange][B]Department[/B][/COLOR]" +msgstr "" + +msgctxt "#60502" +msgid "Uploading new data" +msgstr "" + +msgctxt "#60503" +msgid "Loading data from the %s..." +msgstr "" + +msgctxt "#60504" +msgid "No information" +msgstr "" + +msgctxt "#60505" +msgid "[COLOR rosybrown]Uploading filmography...[/COLOR]" +msgstr "" + +msgctxt "#60506" +msgid "[COLOR plum]Picture collection...[/COLOR]" +msgstr "" + +msgctxt "#60507" +msgid "[COLOR crimson][B]Error[/B][/COLOR]" +msgstr "" + +msgctxt "#60508" +msgid "[COLOR tomato]Video not available[/COLOR]" +msgstr "" + +msgctxt "#60509" +msgid "Movies" +msgstr "" + +msgctxt "#60510" +msgid "Kids" +msgstr "" + +msgctxt "#60511" +msgid "TV series Episodes" +msgstr "" + +msgctxt "#60512" +msgid "Anime Episodes" +msgstr "" + +msgctxt "#60513" +msgid "Documentaries" +msgstr "" + +msgctxt "#60514" +msgid "Channels included in: %s" +msgstr "" + +msgctxt "#60515" +msgid "Simultaneous search deactivated" +msgstr "" + +msgctxt "#60516" +msgid "Simultaneous novelty search provides" +msgstr "" + +msgctxt "#60517" +msgid "higher speed and its deactivation is advisable only in case of failure." +msgstr "" + +msgctxt "#60518" +msgid "Would you like to activate the simultaneous search now?" +msgstr "" + +msgctxt "#60519" +msgid "Channel search..." +msgstr "" + +msgctxt "#60520" +msgid "Search in '%s'..." +msgstr "" + +msgctxt "#60521" +msgid "Completed in %d/%d channels..." +msgstr "" + +msgctxt "#60522" +msgid "Results obtained: %s | Time: %2.f seconds" +msgstr "" + +msgctxt "#60523" +msgid " (In %s and %s)" +msgstr "" + +msgctxt "#60524" +msgid " (In %s)" +msgstr "" + +msgctxt "#60525" +msgid "Channels included in:" +msgstr "" + +msgctxt "#60526" +msgid " - Movies " +msgstr "" + +msgctxt "#60527" +msgid " - Kids" +msgstr "" + +msgctxt "#60528" +msgid " - Series Tv Episodes" +msgstr "" + +msgctxt "#60529" +msgid " - Anime Episodes" +msgstr "" + +msgctxt "#60530" +msgid " - Documentaries" +msgstr "" + +msgctxt "#60531" +msgid "Other Settings" +msgstr "" + +msgctxt "#60532" +msgid "Configuration -- News" +msgstr "" + +msgctxt "#60533" +msgid "Channels included in News " +msgstr "" + +msgctxt "#60534" +msgid "Last 2 months" +msgstr "" + +msgctxt "#60535" +msgid "Preferences" +msgstr "" + +msgctxt "#60536" +msgid "Special settings" +msgstr "" + +msgctxt "#60537" +msgid "Channel settings" +msgstr "" + +msgctxt "#60538" +msgid "Server settings" +msgstr "" + +msgctxt "#60539" +msgid "Settings for the 'News' section" +msgstr "" + +msgctxt "#60540" +msgid "Global search settings" +msgstr "" + +msgctxt "#60541" +msgid "Download settings" +msgstr "" + +msgctxt "#60542" +msgid "Videolibrary settings" +msgstr "" + +msgctxt "#60544" +msgid "More Options" +msgstr "" + +msgctxt "#60545" +msgid "Activate/deactivate channels" +msgstr "" + +msgctxt "#60546" +msgid "Channel settings" +msgstr "" + +msgctxt "#60547" +msgid "Channel Configuration '%s'" +msgstr "" + +msgctxt "#60548" +msgid "HChannel Options" +msgstr "" + +msgctxt "#60549" +msgid "Check the files * _data.json" +msgstr "" + +msgctxt "#60550" +msgid "Servers locked" +msgstr "" + +msgctxt "#60551" +msgid "Favorite servers" +msgstr "" + +msgctxt "#60552" +msgid "Debriders settings" +msgstr "" + +msgctxt "#60553" +msgid " Server configuration '%s'" +msgstr "" + +msgctxt "#60554" +msgid "Server settings" +msgstr "" + +msgctxt "#60557" +msgid "Saving configuration" +msgstr "" + +msgctxt "#60558" +msgid "Please wait." +msgstr "" + +msgctxt "#60559" +msgid "Saving configuration...%s" +msgstr "" + +msgctxt "#60560" +msgid " - [COLOR red] CORRECTED!![/COLOR]" +msgstr "" + +msgctxt "#60561" +msgid "Saving configuration..." +msgstr "" + +msgctxt "#60562" +msgid "Please wait" +msgstr "" + +msgctxt "#60563" +msgid "Saving configuration..." +msgstr "" + +msgctxt "#60564" +msgid "Channel Options" +msgstr "" + +msgctxt "#60565" +msgid " Check the files * _data.json" +msgstr "" + +msgctxt "#60566" +msgid "Videolibrary options" +msgstr "" + +msgctxt "#60567" +msgid " Overwrite the entire video library (strm, nfo and json)" +msgstr "" + +msgctxt "#60568" +msgid " Search for new episodes and update the video library" +msgstr "" + +msgctxt "#60569" +msgid " - There are no default settings" +msgstr "" + +msgctxt "#60570" +msgid " | Error Detail: %s" +msgstr "" + +msgctxt "#60571" +msgid " - [COLOR red] Default settings cannot be loaded![/COLOR]" +msgstr "" + +msgctxt "#60572" +msgid "Ask" +msgstr "" + +msgctxt "#60577" +msgid "Order Servers" +msgstr "" + +msgctxt "#60578" +msgid " Server #%s" +msgstr "" + +msgctxt "#60579" +msgid "Error" +msgstr "" + +msgctxt "#60580" +msgid "A saving error occurred" +msgstr "" + +msgctxt "#60581" +msgid "Overwriting the entire video library" +msgstr "" + +msgctxt "#60582" +msgid "This may take some time." +msgstr "" + +msgctxt "#60583" +msgid "Do you want to continue?" +msgstr "" + +msgctxt "#60584" +msgid "Overwriting the video library...TV SERIES" +msgstr "" + +msgctxt "#60585" +msgid "alfa" +msgstr "" + +msgctxt "#60586" +msgid "Overwriting the video library...MOVIES" +msgstr "" + +msgctxt "#60587" +msgid "Video library update...." +msgstr "" + +msgctxt "#60588" +msgid " - Settings created" +msgstr "" + +msgctxt "#60589" +msgid "- - No correction necessary" +msgstr "" + +msgctxt "#60590" +msgid " - An error has occurred" +msgstr "" + +msgctxt "#60591" +msgid "Activate all" +msgstr "" + +msgctxt "#60592" +msgid "Deactivate all" +msgstr "" + +msgctxt "#60593" +msgid "Default Set" +msgstr "" + +msgctxt "#60594" +msgid "All channels" +msgstr "" + +msgctxt "#60595" +msgid " [COLOR grey](Default disabled)[/COLOR]" +msgstr "" + +msgctxt "#60596" +msgid "Channels" +msgstr "" + +msgctxt "#60597" +msgid " Server #%s" +msgstr "" + +msgctxt "#60598" +msgid "Configuration -- Video Library" +msgstr "" + +msgctxt "#60600" +msgid "Series" +msgstr "" + +msgctxt "#60601" +msgid "Video library update" +msgstr "" + +msgctxt "#60602" +msgid "Never" +msgstr "" + +msgctxt "#60603" +msgid "When Kodi starts" +msgstr "" + +msgctxt "#60604" +msgid "Once a day" +msgstr "" + +msgctxt "#60605" +msgid "At the start of Kodi and once a day" +msgstr "" + +msgctxt "#60606" +msgid " Wait before updating at startup of Kodi" +msgstr "" + +msgctxt "#60607" +msgid "When Kodi starts" +msgstr "" + +msgctxt "#60609" +msgid "10 sec" +msgstr "" + +msgctxt "#60610" +msgid "20 sec" +msgstr "" + +msgctxt "#60611" +msgid "30 sec" +msgstr "" + +msgctxt "#60612" +msgid "60 sec" +msgstr "" + +msgctxt "#60613" +msgid " Begin scheduled update from" +msgstr "" + +msgctxt "#60614" +msgid " Search for new episodes in active tv series" +msgstr "" + +msgctxt "#60615" +msgid "Never" +msgstr "" + +msgctxt "#60616" +msgid "Always" +msgstr "" + +msgctxt "#60617" +msgid "According to new episodes" +msgstr "" + +msgctxt "#60618" +msgid " Search for content in" +msgstr "" + +msgctxt "#60619" +msgid "The folder of each tv series" +msgstr "" + +msgctxt "#60620" +msgid "All video library" +msgstr "" + +msgctxt "#60621" +msgid "Show links in" +msgstr "" + +msgctxt "#60622" +msgid "Conventional window" +msgstr "" + +msgctxt "#60623" +msgid "Pop-up window" +msgstr "" + +msgctxt "#60624" +msgid " Maximum number of links to display (recommended for slow devices)" +msgstr "" + +msgctxt "#60625" +msgid "All" +msgstr "" + +msgctxt "#60626" +msgid " Sort by whitelist" +msgstr "" + +msgctxt "#60627" +msgid " Remove the channel name at the beginning" +msgstr "" + +msgctxt "#60628" +msgid " Pop-up window: Replace \"View in\" with \"[V]\" and \"Download in\" with \"[D]\"" +msgstr "" + +msgctxt "#60629" +msgid "Database location" +msgstr "" + +msgctxt "#60630" +msgid "Local" +msgstr "" + +msgctxt "#60631" +msgid "Remote" +msgstr "" + +msgctxt "#60632" +msgid " Server Name" +msgstr "" + +msgctxt "#60633" +msgid " Server port" +msgstr "" + +msgctxt "#60634" +msgid "Automatically mark as watched" +msgstr "" + +msgctxt "#60635" +msgid " Video viewing time" +msgstr "" + +msgctxt "#60636" +msgid "0 seg" +msgstr "" + +msgctxt "#60637" +msgid "Synchronizing with Trakt" +msgstr "" + +msgctxt "#60638" +msgid " After mark as watched the episode" +msgstr "" + +msgctxt "#60639" +msgid " Show notification" +msgstr "" + +msgctxt "#60640" +msgid " On adding a TV series to the video library" +msgstr "" + +msgctxt "#60641" +msgid " Wait until the tv series is added" +msgstr "" + +msgctxt "#60642" +msgid "Show option \"All Seasons\"." +msgstr "" + +msgctxt "#60643" +msgid "Do not combine the seasons of the series"" +msgstr "" + +msgctxt "#60644" +msgid "Only if there is one season" +msgstr "" + +msgctxt "#60645" +msgid "Show channel selection box" +msgstr "" + +msgctxt "#60646" +msgid "Create directories on your system using" +msgstr "" + +msgctxt "#60647" +msgid "Localized title" +msgstr "" + +msgctxt "#60648" +msgid "Never" +msgstr "" + +msgctxt "#60649" +msgid "Original title" +msgstr "" + +msgctxt "#60650" +msgid "When you add content, you get information from:" +msgstr "" + +msgctxt "#60651" +msgid " Movies:" +msgstr "" + +msgctxt "#60652" +msgid " TV Series:" +msgstr "" + +msgctxt "#60653" +msgid " If there are no results also search in English" +msgstr "" + +msgctxt "#60654" +msgid "Include in blacklist" +msgstr "" + +msgctxt "#60655" +msgid "Include in Favorites List" +msgstr "" + +msgctxt "#60656" +msgid "Simultaneous search (multiprocessing)" +msgstr "" + +msgctxt "#60657" +msgid "Show Results:" +msgstr "" + +msgctxt "#60658" +msgid "Grouped by content" +msgstr "" + +msgctxt "#60659" +msgid "Grouped by channel" +msgstr "" + +msgctxt "#60660" +msgid "Without group" +msgstr "" + +msgctxt "#60661" +msgid "News" +msgstr "" + +msgctxt "#60662" +msgid "code cleaning" +msgstr "" + +msgctxt "#60663" +msgid "Add the progress window" +msgstr "" + +msgctxt "#60664" +msgid "Eliminated unnecessary code." +msgstr "" + +msgctxt "#60665" +msgid "Possibility to include other channels, through the configuration" +msgstr "" + +msgctxt "#60666" +msgid "Color Profile" +msgstr "" + +msgctxt "#60667" +msgid "Cold" +msgstr "" + +msgctxt "#60668" +msgid "Hot" +msgstr "" + +msgctxt "#60669" +msgid "Lilac" +msgstr "" + +msgctxt "#60670" +msgid "Pastel" +msgstr "" + +msgctxt "#60671" +msgid "Vivid" +msgstr "" + +msgctxt "#60672" +msgid "Global Search" +msgstr "" + +msgctxt "#60673" +msgid "MultiThread Search" +msgstr "" + +msgctxt "#60674" +msgid "Show Results:" +msgstr "" + +msgctxt "#60675" +msgid "Per channel" +msgstr "" + +msgctxt "#60676" +msgid "All Together" +msgstr "" + +msgctxt "#60677" +msgid "Saved Searches:" +msgstr "" + +msgctxt "#60678" +msgid "Remember the latest search" +msgstr "" + +msgctxt "#60679" +msgid "Novelties in %s" +msgstr "" + +msgctxt "#60680" +msgid "documentaries" +msgstr "" + +msgctxt "#60681" +msgid "movies" +msgstr "" + +msgctxt "#60682" +msgid "tv series" +msgstr "" + +msgctxt "#60683" +msgid "anime" +msgstr "" + +msgctxt "#70000" +msgid "Options" +msgstr "" + +msgctxt "#70001" +msgid "OK" +msgstr "" + +msgctxt "#70002" +msgid "Cancel" +msgstr "" + +msgctxt "#70003" +msgid "Default" +msgstr "" + +msgctxt "#70004" +msgid "Loading..." +msgstr "" + +msgctxt "#70005" +msgid "Previous" +msgstr "" + +msgctxt "#70006" +msgid "Next" +msgstr "" + +msgctxt "#70007" +msgid "Accept" +msgstr "" + +msgctxt "#70008" +msgid "Reload" +msgstr "" + +msgctxt "#70009" +msgid "Classic Menu" +msgstr "" + +msgctxt "#70010" +msgid "Where To Search" +msgstr "" + +msgctxt "#70011" +msgid "Search for actor" +msgstr "" + +msgctxt "#70012" +msgid "Beginning" +msgstr "" + +msgctxt "#70013" +msgid "Terror" +msgstr "" + +msgctxt "#70014" +msgid "Castellan" +msgstr "" + +msgctxt "#70015" +msgid "Torrents" +msgstr "" + +msgctxt "#70016" +msgid "Active channels" +msgstr "" + +msgctxt "#70017" +msgid "TV Series" +msgstr "" + +msgctxt "#70018" +msgid "Children" +msgstr "" + +msgctxt "#70019" +msgid "Documentary" +msgstr "" + + +msgctxt "#70020" +msgid "[COLOR yellow]Search similar[/COLOR]" +msgstr "" + +msgctxt "#70021" +msgid "Search in TMDB" +msgstr "" + +msgctxt "#70022" +msgid " - Movies" +msgstr "" + +msgctxt "#70023" +msgid " - TV Shows" +msgstr "" + +msgctxt "#70024" +msgid "Search in Filmaffinity" +msgstr "" + +msgctxt "#70025" +msgid "Search in IMDB" +msgstr "" + +msgctxt "#70026" +msgid "MyAnimeList" +msgstr "" + +msgctxt "#70027" +msgid "Search engine settings" +msgstr "" + +msgctxt "#70028" +msgid "Most Popular" +msgstr "" + +msgctxt "#70029" +msgid "Top rated" +msgstr "" + +msgctxt "#70030" +msgid "On The Bill" +msgstr "" + +msgctxt "#70031" +msgid "Next" +msgstr "" + +msgctxt "#70032" +msgid "Genres" +msgstr "" + +msgctxt "#70033" +msgid "Actors/Actresses by popularity" +msgstr "" + +msgctxt "#70034" +msgid "Coming Soon" +msgstr "" + +msgctxt "#70035" +msgid "Search %s" +msgstr "" + +msgctxt "#70036" +msgid "Search actor/actress" +msgstr "" + +msgctxt "#70037" +msgid "Search director, writer..." +msgstr "" + +msgctxt "#70038" +msgid "Custom Filter" +msgstr "" + +msgctxt "#70039" +msgid "Keyword filter" +msgstr "" + +msgctxt "#70040" +msgid "Top Filmaffinity" +msgstr "" + +msgctxt "#70041" +msgid "Modern TV Shows" +msgstr "" + +msgctxt "#70042" +msgid "Year" +msgstr "" + +msgctxt "#70043" +msgid "Coming Out" +msgstr "" + +msgctxt "#70044" +msgid "Sagas and Collections" +msgstr "" + +msgctxt "#70045" +msgid "Movies/TV Shows/Documentaries by Themes" +msgstr "" + +msgctxt "#70046" +msgid "Search Movies/TV Shows" +msgstr "" + +msgctxt "#70047" +msgid " Search by director" +msgstr "" + +msgctxt "#70048" +msgid " My Account" +msgstr "" + +msgctxt "#70049" +msgid " Most Popular" +msgstr "" + +msgctxt "#70050" +msgid " Recommended Now" +msgstr "" + +msgctxt "#70051" +msgid " Most Anticipated " +msgstr "" + +msgctxt "#70052" +msgid " Custom recommendations" +msgstr "" + +msgctxt "#70053" +msgid " Most Viewed" +msgstr "" + +msgctxt "#70054" +msgid "Link your trakt account" +msgstr "" + +msgctxt "#70055" +msgid "Watchlists" +msgstr "" + +msgctxt "#70056" +msgid "Viewed" +msgstr "" + +msgctxt "#70057" +msgid "My lists" +msgstr "" + +msgctxt "#70058" +msgid "Top Series" +msgstr "" + +msgctxt "#70059" +msgid "Top Movies" +msgstr "" + +msgctxt "#70060" +msgid "Most Anticipated" +msgstr "" + +msgctxt "#70061" +msgid "Top Anime" +msgstr "" + +msgctxt "#70062" +msgid "Anime by Seasons" +msgstr "" + +msgctxt "#70063" +msgid "Anime by Genres" +msgstr "" + +msgctxt "#70064" +msgid "Search Tv Shows/Movies/Anime" +msgstr "" + +msgctxt "#70065" +msgid ">> Next Page" +msgstr "" + +msgctxt "#70066" +msgid " Search title in spanish: %s" +msgstr "" + +msgctxt "#70067" +msgid "Info Seasons [%s]" +msgstr "" + +msgctxt "#70068" +msgid "In my Collection" +msgstr "" + +msgctxt "#70069" +msgid "Search %s in alfa: %s" +msgstr "" + +msgctxt "#70070" +msgid " Search original title: %s" +msgstr "" + +msgctxt "#70071" +msgid "Cast" +msgstr "" + +msgctxt "#70072" +msgid " Most Viewed" +msgstr "" + +msgctxt "#70073" +msgid "Most Anticipated" +msgstr "" + +msgctxt "#70074" +msgid "Viewed" +msgstr "" + +msgctxt "#70075" +msgid "Most Anticipated" +msgstr "" + +msgctxt "#70076" +msgid "Top rated" +msgstr "" + +msgctxt "#70077" +msgid " Most Viewed" +msgstr "" + +msgctxt "#70078" +msgid "Show only links of " +msgstr "" + +msgctxt "#70079" +msgid "Remove only links of " +msgstr "" + +msgctxt "#70080" +msgid "Do you want Alfa to auto-configure Kodi's video library?" +msgstr "" + +msgctxt "#70081" +msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." +msgstr "" + +msgctxt "#70082" +msgid "Global Search" +msgstr "" + +msgctxt "#70083" +msgid "Show all links" +msgstr "" + +msgctxt "#70084" +msgid "Delete movie" +msgstr "" + +msgctxt "#70085" +msgid "Delete TV Show" +msgstr "" + +msgctxt "#70086" +msgid "Remove only links of %s" +msgstr "" + +msgctxt "#70087" +msgid "Deleted %s links from canal %s" +msgstr "" + +msgctxt "#70088" +msgid "Are you sure you want to delete '%s' from videolibrary ?" +msgstr "" + +msgctxt "#70089" +msgid "Show only links of %s" +msgstr "" + +msgctxt "#70090" +msgid " Exclude all streams with specific words" +msgstr "" + +msgctxt "#70091" +msgid " Words" +msgstr "" + +msgctxt "#70092" +msgid "Add to videolibrary" +msgstr "" + +msgctxt "#70093" +msgid "The Movie Database" +msgstr "" + +msgctxt "#70094" +msgid "Select scraper for movies" +msgstr "" + +msgctxt "#70095" +msgid "Universal Movie Scraper not present.\nInstall it now?" +msgstr "" + +msgctxt "#70096" +msgid "Universal Movie Scraper" +msgstr "" + +msgctxt "#70097" +msgid "Universal Movie Scraper not installed." +msgstr "" + +msgctxt "#70098" +msgid "The TVDB" +msgstr "" + +msgctxt "#70099" +msgid "The TVDB not installed." +msgstr "" + +msgctxt "#70100" +msgid "The Movie Database not present.\nInstall it now?" +msgstr "" + +msgctxt "#70101" +msgid "Error fixing videolibrarypath in BD" +msgstr "" + +msgctxt "#70102" +msgid "Videolibrary %s not configured" +msgstr "" + +msgctxt "#70103" +msgid "Videolibrary %s configured" +msgstr "" + +msgctxt "#70104" +msgid "Congratulations, the Kodi video library has been configured correctly." +msgstr "" + +msgctxt "#70105" +msgid "Do you want Alfa to automatically configure the Kodi library?You will be asked to set up scrapers for movies and series." +msgstr "" + +msgctxt "#70106" +msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." +msgstr "" + +msgctxt "#70107" +msgid "Select scraper for Tv Shows" +msgstr "" + +msgctxt "#70108" +msgid "Icons Set" +msgstr "" + +msgctxt "#70109" +msgid "Sync with Trakt.tv (You must have an account)" +msgstr "" + +msgctxt "#70110" +msgid "Priority Method" +msgstr "" + +msgctxt "#70111" +msgid "Stop looking when you find an option" +msgstr "" + +msgctxt "#70112" +msgid "Hide payment servers without an account" +msgstr "" + +msgctxt "#70113" +msgid "Password (default 0000)" +msgstr "" + +msgctxt "#70114" +msgid "Only until Kodi restarts" +msgstr "" + +msgctxt "#70115" +msgid "Request password to open adult channels" +msgstr "" + +msgctxt "#70116" +msgid "New password:" +msgstr "" + +msgctxt "#70117" +msgid "Confirm New password:" +msgstr "" + +msgctxt "#70118" +msgid "Folder name for 'Series'" +msgstr "" + +msgctxt "#70119" +msgid "Folder name for 'Movies'" +msgstr "" + +msgctxt "#70120" +msgid "Autoconfigure XBMC / Kodi library for Alfa content" +msgstr "" + +msgctxt "#70121" +msgid "Activate Home Page" +msgstr "" + +msgctxt "#70122" +msgid "Custom (select from a channel)" +msgstr "" + +msgctxt "#70123" +msgid "Show Recent" +msgstr "" + +msgctxt "#70124" +msgid "Category" +msgstr "" + +msgctxt "#70125" +msgid "Movie|Tv Shows|Anime|Children|Documentary|Horror|Castellan|Latin|Torrent" +msgstr "" + +msgctxt "#70126" +msgid "Visual Options" +msgstr "" + +msgctxt "#70127" +msgid "Anime" +msgstr "" + +msgctxt "#70128" +msgid "Infoplus visual option" +msgstr "" + +msgctxt "#70129" +msgid "Without animation" +msgstr "" + +msgctxt "#70130" +msgid "With animation" +msgstr "" + +msgctxt "#70131" +msgid "Thumbnail for videos" +msgstr "" + +msgctxt "#70132" +msgid "Poster" +msgstr "" + +msgctxt "#70133" +msgid "Server logo" +msgstr "" + +msgctxt "#70134" +msgid "Intelligent Titles" +msgstr "" + +msgctxt "#70135" +msgid "Custom Colours" +msgstr "" + +msgctxt "#70136" +msgid "Tv Show" +msgstr "" + +msgctxt "#70137" +msgid "Movie" +msgstr "" + +msgctxt "#70138" +msgid "Low Rating" +msgstr "" + +msgctxt "#70139" +msgid "Average Rating" +msgstr "" + +msgctxt "#70140" +msgid "High Rating" +msgstr "" + +msgctxt "#70141" +msgid "Quality" +msgstr "" + +msgctxt "#70142" +msgid "VOSE (Original Subtitled Spanish Version)" +msgstr "" + +msgctxt "#70143" +msgid "VOS (Original Subtitled Version)" +msgstr "" + +msgctxt "#70144" +msgid "VO (Original Version Originale)" +msgstr "" + +msgctxt "#70145" +msgid "Servers" +msgstr "" + +msgctxt "#70146" +msgid "Add to videolibrary" +msgstr "" + +msgctxt "#70147" +msgid "Videolibrary (Update series)" +msgstr "" + +msgctxt "#70148" +msgid "Videolibrary (Do not update series)" +msgstr "" + +msgctxt "#70149" +msgid "Others" +msgstr "" + +msgctxt "#70150" +msgid "Movie/series info in contextual menu" +msgstr "" + +msgctxt "#70151" +msgid "Show Infoplus option:" +msgstr "" + +msgctxt "#70152" +msgid "Show ExtendedInfo option (External addon required):" +msgstr "" + +msgctxt "#70153" +msgid "Buttons/Access keys (Changes require Kodi restart)" +msgstr "" + +msgctxt "#70154" +msgid "TheMovieDB (obtains data from movies or series)" +msgstr "" + +msgctxt "#70155" +msgid "Simultaneous searches (may cause instability)" +msgstr "" + +msgctxt "#70156" +msgid "Search extended information (actor's data) Increase search time" +msgstr "" + +msgctxt "#70157" +msgid "Use cache (improves recurring searches)" +msgstr "" + +msgctxt "#70158" +msgid "every 1 day" +msgstr "" + +msgctxt "#70159" +msgid "every 7 days" +msgstr "" + +msgctxt "#70160" +msgid "every 15 days" +msgstr "" + +msgctxt "#70161" +msgid "every 30 days" +msgstr "" + +msgctxt "#70162" +msgid "Renew cache?" +msgstr "" + +msgctxt "#70163" +msgid "Press to 'Clear cache' saved" +msgstr "" + +msgctxt "#70164" +msgid "Free First" +msgstr "" + +msgctxt "#70165" +msgid "Premium First" +msgstr "" + +msgctxt "#70166" +msgid "Debriders First" +msgstr "" + +msgctxt "#70167" +msgid "Titles Options" +msgstr "" + +msgctxt "#70168" +msgid "General" +msgstr "" + +msgctxt "#70169" +msgid "Servers use" +msgstr "" + +msgctxt "#70170" +msgid "No" +msgstr "" + +msgctxt "#70171" +msgid "Torrent" +msgstr "" + +msgctxt "#70172" +msgid " Plan B (If favourites fail try other links)" +msgstr "" + +msgctxt "#70173" +msgid "No working links" +msgstr "" + +msgctxt "#70174" +msgid "Server and Quality" +msgstr "" + +msgctxt "#70175" +msgid "Quality and Server" +msgstr "" + +msgctxt "#70176" +msgid "Wait" +msgstr "" + +msgctxt "#70177" +msgid "seconds for the video to start ..." +msgstr "" + +msgctxt "#70178" +msgid "Trying with: %s" +msgstr "" + +msgctxt "#70179" +msgid "Getting list of available servers ..." +msgstr "" + +msgctxt "#70180" +msgid "Connecting with %s..." +msgstr "" + +msgctxt "#70181" +msgid "Available servers: %s" +msgstr "" + +msgctxt "#70182" +msgid "Identifying servers ..." +msgstr "" + +msgctxt "#70183" +msgid "Getting list of available servers" +msgstr "" + +msgctxt "#70184" +msgid "Getting list of available servers:" +msgstr "" + +msgctxt "#70185" +msgid " chapters of: " +msgstr "" + +msgctxt "#70186" +msgid "Getting episodes..." +msgstr "" + +msgctxt "#70187" +msgid "connecting with %s..." +msgstr "" + +msgctxt "#70188" +msgid "Obtaining data from the series" +msgstr "" + +msgctxt "#70189" +msgid "Start the download now?" +msgstr "" + +msgctxt "#70190" +msgid "Add chapters..." +msgstr "" + +msgctxt "#70191" +msgid "Obtaining data from the movie" +msgstr "" + +msgctxt "#70192" +msgid "Select server" +msgstr "" + +msgctxt "#70193" +msgid "Open torrent with..." +msgstr "" + +msgctxt "#70194" +msgid "alfa-torrent" +msgstr "" + +msgctxt "#70195" +msgid "Alfa - Torrent" +msgstr "" + +msgctxt "#70196" +msgid "Beginning..." +msgstr "" + +msgctxt "#70197" +msgid "Automatically stopping at: %ss" +msgstr "" + +msgctxt "#70198" +msgid "Do you want to start playback?" +msgstr "" + +msgctxt "#70199" +msgid "Do you want to cancel the process?" +msgstr "" + +msgctxt "#70200" +msgid "Finishing and deleting data" +msgstr "" + +msgctxt "#70201" +msgid "Mass Testing Tools" +msgstr "" + +msgctxt "#70202" +msgid "- Test channels ..." +msgstr "" + +msgctxt "#70203" +msgid "- Test servers ..." +msgstr "" + +msgctxt "#70204" +msgid "- Test recent!" +msgstr "" + +msgctxt "#70205" +msgid "- Upload tests to web!" +msgstr "" + +msgctxt "#70206" +msgid "Link found in %s" +msgstr "" + +msgctxt "#70207" +msgid " - Movies 4K " +msgstr "" + +msgctxt "#70208" +msgid "Movies 4K" +msgstr "" + +msgctxt "#70209" +msgid "Horror movies!" +msgstr "" + +msgctxt "#70210" +msgid " (In %s and %s)" +msgstr "" + +msgctxt "#70211" +msgid " (In %s)" +msgstr "" + +msgctxt "#70212" +msgid " - Castellan" +msgstr "" + +msgctxt "#70213" +msgid " - Latin" +msgstr "" + +msgctxt "#70214" +msgid " - Torrent" +msgstr "" + +rTruth\n" +"Last-Translator: Angedam\n" +"Language: en_EN\n" + +msgctxt "#20000" +msgid "Alfa" +msgstr "Alfa" + +msgctxt "#30001" +msgid "Check for updates:" +msgstr "Check for updates:" + +msgctxt "#30002" +msgid "Enable adult mode:" +msgstr "Enable adult mode:" + +msgctxt "#30003" +msgid "Enable debug logging:" +msgstr "Enable debug logging:" + +msgctxt "#30004" +msgid "Automatic update channels:" +msgstr "Automatic update channels:" + +msgctxt "#30005" +msgid "Default play setting:" +msgstr "Default play setting:" + +msgctxt "#30006" +msgid "Ask" +msgstr "Ask" + +msgctxt "#30007" +msgid "Watch in low quality" +msgstr "Watch in low quality" + +msgctxt "#30008" +msgid "Watch in high quality" +msgstr "Watch in high quality" + +msgctxt "#30010" +msgid "Channel icons view:" +msgstr "Channel icons view:" + +msgctxt "#30011" +msgid "Poster (vertical)" +msgstr "Poster (vertical)" + +msgctxt "#30012" +msgid "Banner (horizontal)" +msgstr "Banner (horizontal)" + +msgctxt "#30014" +msgid "Username:" +msgstr "Username:" + +msgctxt "#30015" +msgid "Password:" +msgstr "Password:" + +msgctxt "#30017" +msgid "Download path:" +msgstr "Download path:" + +msgctxt "#30018" +msgid "Download list path:" +msgstr "Download list path:" + +msgctxt "#30019" +msgid "Filter channels by language:" +msgstr "Filter channels by language:" + +msgctxt "#30043" +msgid "Force view mode:" +msgstr "Force view mode:" + +msgctxt "#30044" +msgid "Play mode:" +msgstr "Play mode:" + +msgctxt "#30050" +msgid "Server connection error" +msgstr "Server connection error" + +msgctxt "#30051" +msgid "Website error message (http code %d)" +msgstr "Website error message (http code %d)" + +msgctxt "#30055" +msgid "Video not available" +msgstr "Video not available" + +msgctxt "#30057" +msgid "The video has been removed from %s" +msgstr "The video has been removed from %s" + +msgctxt "#30058" +msgid "Try another server or channel" +msgstr "Try another server or channel" + +msgctxt "#30065" +msgid "Unsopported Server" +msgstr "Unsopported Server" + +msgctxt "#30067" +msgid "Videolibrary path:" +msgstr "Videolibrary path:" + +msgctxt "#30068" +msgid "Filter by servers:" +msgstr "Filter by servers:" + +msgctxt "#30100" +msgid "Settings" +msgstr "Settings" + +msgctxt "#30101" +msgid "Downloads" +msgstr "Downloads" + +msgctxt "#30102" +msgid "Favorites" +msgstr "Favorites" + +msgctxt "#30103" +msgid "Global search" +msgstr "Global search" + +msgctxt "#30104" +msgid "Help" +msgstr "Help" + +msgctxt "#30105" +msgid "Removed from favorites" +msgstr "Removed from favorites" + +msgctxt "#30108" +msgid "added to favorites" +msgstr "added to favorites" + +msgctxt "#30109" +msgid "added to download list" +msgstr "added to download list" + +msgctxt "#30112" +msgid "Enter title to search" +msgstr "Enter title to search" + +msgctxt "#30118" +msgid "Channels" +msgstr "Channels" + +msgctxt "#30119" +msgid "Choose a Category" +msgstr "Choose a Category" + +msgctxt "#30121" +msgid "All" +msgstr "All" + +msgctxt "#30122" +msgid "Movies" +msgstr "Movies" + +msgctxt "#30123" +msgid "TV Shows" +msgstr "TV Shows" + +msgctxt "#30124" +msgid "Anime" +msgstr "Anime" + +msgctxt "#30125" +msgid "Documentaries" +msgstr "Documentaries" + +msgctxt "#30126" +msgid "Adult" +msgstr "Adult" + +msgctxt "#30130" +msgid "Recent" +msgstr "Recent" + +msgctxt "#30131" +msgid "Videolibrary" +msgstr "Videolibrary" + +msgctxt "#30135" +msgid "added to the videolibrary" +msgstr "added to the videolibrary" + +msgctxt "#30136" +msgid "Original version" +msgstr "Original version" + +msgctxt "#30137" +msgid "Global Search" +msgstr "Global Search" + +msgctxt "#30151" +msgid "Watch the video" +msgstr "Watch the video" + +msgctxt "#30153" +msgid "Download" +msgstr "Download" + +msgctxt "#30154" +msgid "Remove from favorites" +msgstr "Remove from favorites" + +msgctxt "#30155" +msgid "Add to favorites" +msgstr "Add to favorites" + +msgctxt "#30161" +msgid "Add to videolibrary" +msgstr "Add to videolibrary" + +msgctxt "#30162" +msgid "Search for trailer" +msgstr "Search for trailer" + +msgctxt "#30163" +msgid "Choose an option" +msgstr "Choose an option" + +msgctxt "#30164" +msgid "Delete this file" +msgstr "Delete this file" + +msgctxt "#30200" +msgid "Square" +msgstr "Square" + +msgctxt "#30501" +msgid "Paths" +msgstr "Paths" + +msgctxt "#30974" +msgid "Search in Channels" +msgstr "Search in Channels" + +msgctxt "#30975" +msgid "Movie Info" +msgstr "Movie Info" + +msgctxt "#30976" +msgid "TVShows - Airing Today" +msgstr "TVShows - Airing Today" + +msgctxt "#30977" +msgid "Last Episodes - On-Air" +msgstr "Last Episodes - On-Air" + +msgctxt "#30978" +msgid "New TVShows" +msgstr "New TVShows" + +msgctxt "#30979" +msgid "Character Info" +msgstr "Character Info" + +msgctxt "#30980" +msgid "Search by Title" +msgstr "Search by Title" + +msgctxt "#30981" +msgid "Search by Person" +msgstr "Search by Person" + +msgctxt "#30982" +msgid "Search by Company" +msgstr "Search by Company" + +msgctxt "#30983" +msgid "Now Playing" +msgstr "Now Playing" + +msgctxt "#30984" +msgid "Popular" +msgstr "Popular" + +msgctxt "#30985" +msgid "Top Rated" +msgstr "Top Rated" + +msgctxt "#30986" +msgid "Search by Collection" +msgstr "Search by Collection" + +msgctxt "#30987" +msgid "Genre" +msgstr "Genre" + +msgctxt "#30988" +msgid "Search by Year" +msgstr "Search by Year" + +msgctxt "#30989" +msgid "Search Similar Movies" +msgstr "Search Similar Movies" + +msgctxt "#30990" +msgid "Search TV show" +msgstr "Search TV show" + +msgctxt "#30991" +msgid "Library" +msgstr "Library" + +msgctxt "#30992" +msgid "Next Page" +msgstr "Next Page" + +msgctxt "#30993" +msgid "Looking for %s..." +msgstr "Looking for %s..." + +msgctxt "#30994" +msgid "Searching in %s..." +msgstr "Searching in %s..." + +msgctxt "#30995" +msgid "%d found so far: %s" +msgstr "%d found so far: %s" + +msgctxt "#30996" +msgid "Most Voted" +msgstr "Most Voted" + +msgctxt "#30997" +msgid "Academy Awards" +msgstr "Academy Awards" + +msgctxt "#30998" +msgid "Shortcut" +msgstr "Shortcut" + +msgctxt "#30999" +msgid "Add key to open Shortcut" +msgstr "Add key to open Shortcut" + +msgctxt "#50000" +msgid "Sagas" +msgstr "Sagas" + +msgctxt "#50001" +msgid "Today on TV" +msgstr "Today on TV" + +msgctxt "#50002" +msgid "Latest News" +msgstr "Latest News" + +msgctxt "#50003" +msgid "Loading" +msgstr "Loading" + +msgctxt "#50004" +msgid "Path: " +msgstr "Path: " + +msgctxt "#59970" +msgid "Synchronization with Trakt started" +msgstr "Synchronization with Trakt started" + +msgctxt "#59971" +msgid "Alfa Auto-configuration" +msgstr "Alfa Auto-configuration" + +msgctxt "#59972" +msgid "Search for: '%s' | Found: %d vídeos | Time: %2.f seconds" +msgstr "Search for: '%s' | Found: %d vídeos | Time: %2.f seconds" + +msgctxt "#59973" +msgid "Search Cancelled" +msgstr "Search Cancelled" + +msgctxt "#59974" +msgid "Choose categories" +msgstr "Choose categories" + +msgctxt "#59975" +msgid "Subtitles" +msgstr "Subtitles" + +msgctxt "#59976" +msgid "Latin" +msgstr "Latin" + +msgctxt "#59977" +msgid "4k" +msgstr "4k" + +msgctxt "#59978" +msgid "horror" +msgstr "horror" + +msgctxt "#59979" +msgid "kids" +msgstr "kids" + +msgctxt "#59980" +msgid "Castilian" +msgstr "Castilian" + +msgctxt "#59981" +msgid "latin" +msgstr "latin" + +msgctxt "#59982" +msgid "torrent" +msgstr "torrent" + +msgctxt "#59983" +msgid "" +msgstr "" + +msgctxt "#59984" +msgid "An error has occurred in alfa, \nCheck log for more details." +msgstr "An error has occurred in alfa, \nCheck log for more details." + +msgctxt "#59985" +msgid "Error in the channel" +msgstr "Error in the channel" + +msgctxt "#59986" +msgid "Error loading the server: %s\n" +msgstr "Error loading the server: %s\n" + +msgctxt "#59987" +msgid "Start downloading now?" +msgstr "Start downloading now?" + +msgctxt "#59988" +msgid "Saving configuration..." +msgstr "Saving configuration..." + +msgctxt "#59989" +msgid "Please wait" +msgstr "Please wait" + +msgctxt "#59990" +msgid "Channels included in the search" +msgstr "Channels included in the search" + +msgctxt "#59991" +msgid "All" +msgstr "All" + +msgctxt "#59992" +msgid "None" +msgstr "None" + +msgctxt "#59993" +msgid "Configuration -- Search" +msgstr "Configuration -- Search" + +msgctxt "#59994" +msgid "Choose channels to include in your search" +msgstr "Choose channels to include in your search" + +msgctxt "#59995" +msgid "Saved Searches" +msgstr "Saved Searches" + +msgctxt "#59996" +msgid "Delete saved searches" +msgstr "Delete saved searches" + +msgctxt "#59997" +msgid "Options" +msgstr "Options" + +msgctxt "#59998" +msgid "Search by categories (advanced search)" +msgstr "Search by categories (advanced search)" + +msgctxt "#59999" +msgid "Search for actor/actress" +msgstr "Search for actor/actress" + +msgctxt "#60000" +msgid "Filtra server (Black List)" +msgstr "Filtra server (Black List)" + +msgctxt "#60001" +msgid "Filtra server (Black List)\nNessun collegamento disponibile che soddisfi i requisiti della Black list.\nRiprova modificando il filtro in 'Configurazione Server" +msgstr "Filtra server (Black List)\nNessun collegamento disponibile che soddisfi i requisiti della Black list.\nRiprova modificando il filtro in 'Configurazione Server" + +msgctxt "#60003" +msgid "Connessione con %s" +msgstr "Connessione con %s" + +msgctxt "#60004" +msgid "No connector for the server %s" +msgstr "No connector for the server %s" + +msgctxt "#60005" +msgid "Connecting with %s" +msgstr "Connecting with %s" + +msgctxt "#60006" +msgid "An error has occurred in %s" +msgstr "An error has occurred in %s" + +msgctxt "#60007" +msgid "An error has occurred on %s" +msgstr "An error has occurred on %s" + +msgctxt "#60008" +msgid "Process completed" +msgstr "Process completed" + +msgctxt "#60009" +msgid "To watch a vide on %s you need
an account on: %s" +msgstr "To watch a vide on %s you need
an account on: %s" + +msgctxt "#60010" +msgid "All available links belongs to server on your black list.\nDo you want to show these links?" +msgstr "All available links belongs to server on your black list.\nDo you want to show these links?" + +msgctxt "#60011" +msgid "Cache deleted" +msgstr "Cache deleted" + +msgctxt "#60012" +msgid "No video to play" +msgstr "No video to play" + +msgctxt "#60013" +msgid "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s.\nIf the web page is working correctly, please report the error on : https://alfa-addon.com/categories/alfa-addon.50/" +msgstr "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s.\nIf the web page is working correctly, please report the error on : https://alfa-addon.com/categories/alfa-addon.50/" + +msgctxt "#60014" +msgid "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of alfa.\nTo have more details, see the log file." +msgstr "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of alfa.\nTo have more details, see the log file." + +msgctxt "#60015" +msgid "Check the log for more details on the error." +msgstr "Check the log for more details on the error." + +msgctxt "#60016" +msgid "Segna film come non visto" +msgstr "Segna film come non visto" + +msgctxt "#60017" +msgid "Mark movie as not watched" +msgstr "Mark movie as not watched" + +msgctxt "#60018" +msgid "Delete movie/channel" +msgstr "Delete movie/channel" + +msgctxt "#60019" +msgid "Delete this movie" +msgstr "Delete this movie" + +msgctxt "#60020" +msgid "Mark tv series as not watched" +msgstr "Mark tv series as not watched" + +msgctxt "#60021" +msgid "Mark tv series as watched" +msgstr "Mark tv series as watched" + +msgctxt "#60022" +msgid "Automatically find new episodes: Disable" +msgstr "Automatically find new episodes: Disable" + +msgctxt "#60023" +msgid "Automatically find new episodes: Enable" +msgstr "Automatically find new episodes: Enable" + +msgctxt "#60024" +msgid "Delete tv series/channel" +msgstr "Delete tv series/channel" + +msgctxt "#60025" +msgid "Delete tv series" +msgstr "Delete tv series" + +msgctxt "#60026" +msgid "Search for new episodes and update" +msgstr "Search for new episodes and update" + +msgctxt "#60027" +msgid "Season %s" +msgstr "Season %s" + +msgctxt "#60028" +msgid "Segna stagione come non vista" +msgstr "Segna stagione come non vista" + +msgctxt "#60029" +msgid "Mark season as not watched" +msgstr "Mark season as not watched" + +msgctxt "#60030" +msgid "*All the seasons" +msgstr "*All the seasons" + +msgctxt "#60031" +msgid "Season %s Episode %s" +msgstr "Season %s Episode %s" + +msgctxt "#60032" +msgid "Mark episode as not watched" +msgstr "Mark episode as not watched" + +msgctxt "#60033" +msgid "Mark episode as watched" +msgstr "Mark episode as watched" + +msgctxt "#60034" +msgid "Show only link %s" +msgstr "Show only link %s" + +msgctxt "#60035" +msgid "Show all the links" +msgstr "Show all the links" + +msgctxt "#60036" +msgid "Episode %s" +msgstr "Episode %s" + +msgctxt "#60037" +msgid "Tv series update ..." +msgstr "Tv series update ..." + +msgctxt "#60038" +msgid "An error has occurred on alfa" +msgstr "An error has occurred on alfa" + +msgctxt "#60039" +msgid "Error on channel %s" +msgstr "Error on channel %s" + +msgctxt "#60040" +msgid "Delete movie" +msgstr "Delete movie" + +msgctxt "#60041" +msgid "Delete tv series" +msgstr "Delete tv series" + +msgctxt "#60042" +msgid "Delete only the links of %s" +msgstr "Delete only the links of %s" + +msgctxt "#60043" +msgid "Delete %s links of channel %s" +msgstr "Delete %s links of channel %s" + +msgctxt "#60044" +msgid "Do you want really to delete '%s' from videolibrary?" +msgstr "Do you want really to delete '%s' from videolibrary?" + +msgctxt "#60045" +msgid "Sync with Trakt started" +msgstr "Sync with Trakt started" + +msgctxt "#60046" +msgid "TheMovieDB not present.\nInstall it now?" +msgstr "TheMovieDB not present.\nInstall it now?" + +msgctxt "#60047" +msgid "The Movie Database is not installed." +msgstr "The Movie Database is not installed." + +msgctxt "#60048" +msgid "The TVDB not present.\nInstall it now?" +msgstr "The TVDB not present.\nInstall it now?" + +msgctxt "#60049" +msgid "The TVDB is not installed." +msgstr "The TVDB is not installed." + +msgctxt "#60050" +msgid "TheMovieDB not present.\nInstall it now?" +msgstr "TheMovieDB not present.\nInstall it now?" + +msgctxt "#60051" +msgid "The Movie Database is not installed." +msgstr "The Movie Database is not installed." + +msgctxt "#60052" +msgid "Error on setting LibraryPath in BD" +msgstr "Error on setting LibraryPath in BD" + +msgctxt "#60053" +msgid "Do you want to configure this scraper in italian as default option for the movies ?" +msgstr "Do you want to configure this scraper in italian as default option for the movies ?" + +msgctxt "#60054" +msgid "Do you want to configure this scraper in italian as default option for the tv series ?" +msgstr "Do you want to configure this scraper in italian as default option for the tv series ?" + +msgctxt "#60055" +msgid "Error of provider configuration in BD." +msgstr "Error of provider configuration in BD." + +msgctxt "#60056" +msgid "Videolibrary %s not configured" +msgstr "Videolibrary %s not configured" + +msgctxt "#60057" +msgid "Videolibrary %s configured" +msgstr "Videolibrary %s configured" + +msgctxt "#60058" +msgid "You need to restart Kodi for the changes to take effect." +msgstr "You need to restart Kodi for the changes to take effect." + +msgctxt "#60059" +msgid "Congratulations, Kodi's video library has been configured correctly." +msgstr "Congratulations, Kodi's video library has been configured correctly." + +msgctxt "#60060" +msgid "Alfa Auto-configuration" +msgstr "Alfa Auto-configuration" + +msgctxt "#60061" +msgid "Do you want Alfa to auto-configure Kodi's video library?\nIf you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." +msgstr "Do you want Alfa to auto-configure Kodi's video library?\nIf you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." + +msgctxt "#60062" +msgid "Adding movies to your video library..." +msgstr "Adding movies to your video library..." + +msgctxt "#60063" +msgid "Error in adding movies to your video library..." +msgstr "Error in adding movies to your video library..." + +msgctxt "#60064" +msgid "Adding Episodes to the Video Library..." +msgstr "Adding Episodes to the Video Library..." + +msgctxt "#60065" +msgid "Added Episode to Video Library..." +msgstr "Added Episode to Video Library..." + +msgctxt "#60066" +msgid "ERROR, It has NOT been possible to add the video to the video library" +msgstr "ERROR, It has NOT been possible to add the video to the video library" + +msgctxt "#60067" +msgid "ERROR, tv series has NOT been added to videolibrary\nIt has NOT been possible to add no episode" +msgstr "ERROR, tv series has NOT been added to videolibrary\nIt has NOT been possible to add no episode" + +msgctxt "#60068" +msgid "ERROR, tv series has NOT been added to videolibrary" +msgstr "ERROR, tv series has NOT been added to videolibrary" + +msgctxt "#60069" +msgid "ERRORE, tv series has NOT been added completely to videolibrary" +msgstr "ERRORE, tv series has NOT been added completely to videolibrary" + +msgctxt "#60070" +msgid "tv series has been added to videolibrary" +msgstr "tv series has been added to videolibrary" + +msgctxt "#60071" +msgid "Autoplay Configuration" +msgstr "Autoplay Configuration" + +msgctxt "#60072" +msgid "It seems that links of %s are not working." +msgstr "It seems that links of %s are not working." + +msgctxt "#60073" +msgid "Do you want to ignore all the links from this server?" +msgstr "Do you want to ignore all the links from this server?" + +msgctxt "#60074" +msgid "It's not possible to use AutoPlay" +msgstr "It's not possible to use AutoPlay" + +msgctxt "#60075" +msgid "No coincidence" +msgstr "No coincidence" + +msgctxt "#60076" +msgid "New quality/server available in configuration" +msgstr "New quality/server available in configuration" + +msgctxt "#60077" +msgid "AutoPlay initialization error" +msgstr "AutoPlay initialization error" + +msgctxt "#60078" +msgid "View the log for more information." +msgstr "View the log for more information." + +msgctxt "#60079" +msgid "AutoPlay (Turns AutoPlay On/Off)" +msgstr "AutoPlay (Turns AutoPlay On/Off)" + +msgctxt "#60080" +msgid "AutoPlay Language (Optional)" +msgstr "AutoPlay Language (Optional)" + +msgctxt "#60081" +msgid " Favorite servers" +msgstr " Favorite servers" + +msgctxt "#60082" +msgid " \u2665 Favorite server %s" +msgstr " \u2665 Favorite server %s" + +msgctxt "#60083" +msgid " Preferred Qualities" +msgstr " Preferred Qualities" + +msgctxt "#60084" +msgid " \u2665 Preferred Quality %s" +msgstr " \u2665 Preferred Quality %s" + +msgctxt "#60085" +msgid " Priority (Indicates the order for AutoPlay)" +msgstr " Priority (Indicates the order for AutoPlay)" + +msgctxt "#60086" +msgid "It has been renamed to:" +msgstr "It has been renamed to:" + +msgctxt "#60087" +msgid "Unexpected error on channel %s" +msgstr "Unexpected error on channel %s" + +msgctxt "#60088" +msgid "Enter URL" +msgstr "Enter URL" + +msgctxt "#60089" +msgid "Enter the URL [Link to server / download]" +msgstr "Enter the URL [Link to server / download]" + +msgctxt "#60090" +msgid "Enter the URL [Direct link to video]." +msgstr "Enter the URL [Direct link to video]." + +msgctxt "#60091" +msgid "Enter the URL [Search for links in a URL]" +msgstr "Enter the URL [Search for links in a URL]" + +msgctxt "#60092" +msgid "View Direct URL" +msgstr "View Direct URL" + +msgctxt "#60093" +msgid "There is no compatible video in this URL" +msgstr "There is no compatible video in this URL" + +msgctxt "#60200" +msgid "Download..." +msgstr "Download..." + +msgctxt "#60201" +msgid "Download starting..." +msgstr "Download starting..." + +msgctxt "#60202" +msgid "Remaining time: %s" +msgstr "Remaining time: %s" + +msgctxt "#60203" +msgid "Downloader %s/%s" +msgstr "Downloader %s/%s" + +msgctxt "#60204" +msgid "Speed Meter" +msgstr "Speed Meter" + +msgctxt "#60205" +msgid "File Writer" +msgstr "File Writer" + +msgctxt "#60206" +msgid "plugin" +msgstr "plugin" + +msgctxt "#60207" +msgid "Download..." +msgstr "Download..." + +msgctxt "#60208" +msgid "You can't download this video" +msgstr "You can't download this video" + +msgctxt "#60209" +msgid "RTMP downloads are not" +msgstr "RTMP downloads are not" + +msgctxt "#60210" +msgid "still supported" +msgstr "still supported" + +msgctxt "#60211" +msgid "Missing %s" +msgstr "Missing %s" + +msgctxt "#60212" +msgid "Check that rtmpdump is installed" +msgstr "Check that rtmpdump is installed" + +msgctxt "#60213" +msgid "The RTMP download option is experimental" +msgstr "The RTMP download option is experimental" + +msgctxt "#60214" +msgid "and the video will be downloaded in the background." +msgstr "and the video will be downloaded in the background." + +msgctxt "#60215" +msgid "No progress bar will be displayed." +msgstr "No progress bar will be displayed." + +msgctxt "#60216" +msgid "addon" +msgstr "addon" + +msgctxt "#60217" +msgid "Download..." +msgstr "Download..." + +msgctxt "#60218" +msgid "%.2fMB/%.2fMB (%d%%) %.2f Kb/s %s missing " +msgstr "%.2fMB/%.2fMB (%d%%) %.2f Kb/s %s missing " + +msgctxt "#60219" +msgid "Copying the file" +msgstr "Copying the file" + +msgctxt "#60220" +msgid "Error while deleting the file" +msgstr "Error while deleting the file" + +msgctxt "#60221" +msgid "Error while deleting the directory" +msgstr "Error while deleting the directory" + +msgctxt "#60222" +msgid "Error while creating the directory" +msgstr "Error while creating the directory" + +msgctxt "#60223" +msgid "Enter another name" +msgstr "Enter another name" + +msgctxt "#60224" +msgid "Complete information" +msgstr "Complete information" + +msgctxt "#60225" +msgid "Search in TheMovieDB.org" +msgstr "Search in TheMovieDB.org" + +msgctxt "#60226" +msgid "Search in TheTvDB.org" +msgstr "Search in TheTvDB.org" + +msgctxt "#60227" +msgid "Identifier not found for: %s" +msgstr "Identifier not found for: %s" + +msgctxt "#60228" +msgid "No information found for: %s" +msgstr "No information found for: %s" + +msgctxt "#60229" +msgid "Enter the name of %s to search" +msgstr "Enter the name of %s to search" + +msgctxt "#60230" +msgid "Title:" +msgstr "Title:" + +msgctxt "#60231" +msgid "Original title" +msgstr "Original title" + +msgctxt "#60232" +msgid "Year" +msgstr "Year" + +msgctxt "#60233" +msgid "Identifiers:" +msgstr "Identifiers:" + +msgctxt "#60234" +msgid " The Movie Database ID" +msgstr " The Movie Database ID" + +msgctxt "#60235" +msgid " URL Tmdb" +msgstr " URL Tmdb" + +msgctxt "#60236" +msgid " The TVDB ID" +msgstr " The TVDB ID" + +msgctxt "#60237" +msgid " URL TVDB" +msgstr " URL TVDB" + +msgctxt "#60238" +msgid " IMDb ID" +msgstr " IMDb ID" + +msgctxt "#60239" +msgid " Other ID" +msgstr " Other ID" + +msgctxt "#60240" +msgid "Images(urls):" +msgstr "Images(urls):" + +msgctxt "#60241" +msgid " Background" +msgstr " Background" + +msgctxt "#60242" +msgid " Thumbnail" +msgstr " Thumbnail" + +msgctxt "#60243" +msgid "Type of content" +msgstr "Type of content" + +msgctxt "#60244" +msgid "Movie" +msgstr "Movie" + +msgctxt "#60245" +msgid "Series" +msgstr "Series" + +msgctxt "#60246" +msgid "Full information" +msgstr "Full information" + +msgctxt "#60247" +msgid "[%s]: Select the correct %s" +msgstr "[%s]: Select the correct %s" + +msgctxt "#60248" +msgid "Login to this page: %s" +msgstr "Login to this page: %s" + +msgctxt "#60249" +msgid "Enter this code and accept: %s" +msgstr "Enter this code and accept: %s" + +msgctxt "#60250" +msgid "Once done, click here!" +msgstr "Once done, click here!" + +msgctxt "#60251" +msgid "Synchronize with Trakt. Do not close this window" +msgstr "Synchronize with Trakt. Do not close this window" + +msgctxt "#60252" +msgid "1. Enter the following URL: %s" +msgstr "1. Enter the following URL: %s" + +msgctxt "#60253" +msgid "2. Enter this code on the page and accept: %s" +msgstr "2. Enter this code on the page and accept: %s" + +msgctxt "#60254" +msgid "3. Wait until this window closes" +msgstr "3. Wait until this window closes" + +msgctxt "#60255" +msgid "Successfully completed" +msgstr "Successfully completed" + +msgctxt "#60256" +msgid "Account linked correctly" +msgstr "Account linked correctly" + +msgctxt "#60257" +msgid "Error" +msgstr "Error" + +msgctxt "#60258" +msgid "Problem in the connection process" +msgstr "Problem in the connection process" + +msgctxt "#60259" +msgid "Account linked correctly" +msgstr "Account linked correctly" + +msgctxt "#60260" +msgid "Problem in the connection process" +msgstr "Problem in the connection process" + +msgctxt "#60261" +msgid "Alfa" +msgstr "Alfa" + +msgctxt "#60262" +msgid "You can install the Trakt script below, once installed and configured what you see will be automatically synchronized with your account." +msgstr "You can install the Trakt script below, once installed and configured what you see will be automatically synchronized with your account." + +msgctxt "#60263" +msgid "Do you want to continue?" +msgstr "Do you want to continue?" + +msgctxt "#60264" +msgid "In progress" +msgstr "In progress" + +msgctxt "#60265" +msgid "Completed" +msgstr "Completed" + +msgctxt "#60266" +msgid "Action" +msgstr "Action" + +msgctxt "#60267" +msgid "Adventure" +msgstr "Adventure" + +msgctxt "#60268" +msgid "Animation" +msgstr "Animation" + +msgctxt "#60269" +msgid "Kids" +msgstr "Kids" + +msgctxt "#60270" +msgid "Comedy" +msgstr "Comedy" + +msgctxt "#60271" +msgid "Crime" +msgstr "Crime" + +msgctxt "#60272" +msgid "Documentaries" +msgstr "Documentaries" + +msgctxt "#60273" +msgid "Family" +msgstr "Family" + +msgctxt "#60274" +msgid "Fantasy" +msgstr "Fantasy" + +msgctxt "#60275" +msgid "Cooking" +msgstr "Cooking" + +msgctxt "#60276" +msgid "Contests" +msgstr "Contests" + +msgctxt "#60277" +msgid "Home and garden" +msgstr "Home and garden" + +msgctxt "#60278" +msgid "Mistery" +msgstr "Mistery" + +msgctxt "#60279" +msgid "News" +msgstr "News" + +msgctxt "#60280" +msgid "Romantic" +msgstr "Romantic" + +msgctxt "#60281" +msgid "Science fiction" +msgstr "Science fiction" + +msgctxt "#60282" +msgid "Soap Opera" +msgstr "Soap Opera" + +msgctxt "#60283" +msgid "Sport" +msgstr "Sport" + +msgctxt "#60284" +msgid "Talk Show" +msgstr "Talk Show" + +msgctxt "#60285" +msgid "Travels" +msgstr "Travels" + +msgctxt "#60286" +msgid "Pre-child audience: children under 6 years" +msgstr "Pre-child audience: children under 6 years" + +msgctxt "#60287" +msgid "Child audience: from 7 years old" +msgstr "Child audience: from 7 years old" + +msgctxt "#60288" +msgid "General audience: without family control" +msgstr "General audience: without family control" + +msgctxt "#60289" +msgid "Parental control" +msgstr "Parental control" + +msgctxt "#60290" +msgid "More than 14 years old" +msgstr "More than 14 years old" + +msgctxt "#60291" +msgid "More than 17 years old" +msgstr "More than 17 years old" + +msgctxt "#60292" +msgid "Searching for TV Series Information" +msgstr "Searching for TV Series Information" + +msgctxt "#60293" +msgid "Please wait..." +msgstr "Please wait..." + +msgctxt "#60294" +msgid "Searching for TV Series Information" +msgstr "Searching for TV Series Information" + +msgctxt "#60295" +msgid "Loading results..." +msgstr "Loading results..." + +msgctxt "#60296" +msgid "Searching for TV Series Information" +msgstr "Searching for TV Series Information" + +msgctxt "#60297" +msgid "Find %s possible matches" +msgstr "Find %s possible matches" + +msgctxt "#60298" +msgid "[%s]: Select the correct TV series" +msgstr "[%s]: Select the correct TV series" + +msgctxt "#60299" +msgid "Not found in the language '%s'" +msgstr "Not found in the language '%s'" + +msgctxt "#60300" +msgid "Search in language 'en'" +msgstr "Search in language 'en'" + +msgctxt "#60301" +msgid "Not found in the language '%s'" +msgstr "Not found in the language '%s'" + +msgctxt "#60302" +msgid "Search in language 'en'" +msgstr "Search in language 'en'" + +msgctxt "#60303" +msgid "The file already exists" +msgstr "The file already exists" + +msgctxt "#60304" +msgid "The unzipped %s file already exists, or you want to overwrite it.?" +msgstr "The unzipped %s file already exists, or you want to overwrite it.?" + +msgctxt "#60305" +msgid "Adult channels" +msgstr "Adult channels" + +msgctxt "#60306" +msgid "The fields 'New password' and 'Confirm new password' do not match" +msgstr "The fields 'New password' and 'Confirm new password' do not match" + +msgctxt "#60307" +msgid "Use 'Preferences' to change your password" +msgstr "Use 'Preferences' to change your password" + +msgctxt "#60308" +msgid "Adult channels" +msgstr "Adult channels" + +msgctxt "#60309" +msgid "The password is not correct." +msgstr "The password is not correct." + +msgctxt "#60310" +msgid "Changes made in this section will not be saved." +msgstr "Changes made in this section will not be saved." + +msgctxt "#60311" +msgid "Download..." +msgstr "Download..." + +msgctxt "#60312" +msgid "Close this window to start playback" +msgstr "Close this window to start playback" + +msgctxt "#60313" +msgid "Cancel this window to start playback" +msgstr "Cancel this window to start playback" + +msgctxt "#60314" +msgid "Speed: " +msgstr "Speed: " + +msgctxt "#60315" +msgid " KB/s " +msgstr " KB/s " + +msgctxt "#60316" +msgid "MB of " +msgstr "MB of " + +msgctxt "#60317" +msgid "MB" +msgstr "MB" + +msgctxt "#60318" +msgid "Remaining time: " +msgstr "Remaining time: " + +msgctxt "#60319" +msgid "Cancelled" +msgstr "Cancelled" + +msgctxt "#60320" +msgid "Download in background cancelled" +msgstr "Download in background cancelled" + +msgctxt "#60321" +msgid "Press the button to be used to open the window" +msgstr "Press the button to be used to open the window" + +msgctxt "#60322" +msgid "You have %s seconds" +msgstr "You have %s seconds" + +msgctxt "#60323" +msgid "Press the button to be used to open the window" +msgstr "Press the button to be used to open the window" + +msgctxt "#60324" +msgid "You have %s seconds" +msgstr "You have %s seconds" + +msgctxt "#60325" +msgid "Saved key" +msgstr "Saved key" + +msgctxt "#60326" +msgid "Restart Kodi to apply changes" +msgstr "Restart Kodi to apply changes" + +msgctxt "#60327" +msgid "Novelties" +msgstr "Novelties" + +msgctxt "#60328" +msgid "Channels" +msgstr "Channels" + +msgctxt "#60329" +msgid "Search" +msgstr "Search" + +msgctxt "#60330" +msgid "Favorites" +msgstr "Favorites" + +msgctxt "#60331" +msgid "Videolibrary" +msgstr "Videolibrary" + +msgctxt "#60332" +msgid "Downloads" +msgstr "Downloads" + +msgctxt "#60333" +msgid "Configuration" +msgstr "Configuration" + +msgctxt "#60334" +msgid "Password for adult channels" +msgstr "Password for adult channels" + +msgctxt "#60335" +msgid "Watch in" +msgstr "Watch in" + +msgctxt "#60336" +msgid "Download in" +msgstr "Download in" + +msgctxt "#60337" +msgid "alfa-MCT: No support adf.ly" +msgstr "alfa-MCT: No support adf.ly" + +msgctxt "#60338" +msgid "The script does not support URL reduction adf.ly." +msgstr "The script does not support URL reduction adf.ly." + +msgctxt "#60339" +msgid "Nothing to Play" +msgstr "Nothing to Play" + +msgctxt "#60342" +msgid "Download completed: " +msgstr "Download completed: " + +msgctxt "#60343" +msgid "BMC-Kodi has closed the video." +msgstr "BMC-Kodi has closed the video." + +msgctxt "#60344" +msgid "Continue with the session?" +msgstr "Continue with the session?" + +msgctxt "#60345" +msgid "alfa-MCT: List of videos" +msgstr "alfa-MCT: List of videos" + +msgctxt "#60346" +msgid "Delete video downloads" +msgstr "Delete video downloads" + +msgctxt "#60347" +msgid "No items to display" +msgstr "No items to display" + +msgctxt "#60348" +msgid "Information" +msgstr "Information" + +msgctxt "#60349" +msgid "Go to the Main Menu" +msgstr "Go to the Main Menu" + +msgctxt "#60350" +msgid "Search in other channels" +msgstr "Search in other channels" + +msgctxt "#60351" +msgid "Set as homepage" +msgstr "Set as homepage" + +msgctxt "#60352" +msgid "Add TV Series to Videolibrary" +msgstr "Add TV Series to Videolibrary" + +msgctxt "#60353" +msgid "Add Movie to Videolibrary" +msgstr "Add Movie to Videolibrary" + +msgctxt "#60354" +msgid "Download Movie" +msgstr "Download Movie" + +msgctxt "#60355" +msgid "Download TV Series" +msgstr "Download TV Series" + +msgctxt "#60356" +msgid "Download Episode" +msgstr "Download Episode" + +msgctxt "#60357" +msgid "Download Season" +msgstr "Download Season" + +msgctxt "#60358" +msgid "Open Configuration" +msgstr "Open Configuration" + +msgctxt "#60359" +msgid "Search Trailer" +msgstr "Search Trailer" + +msgctxt "#60360" +msgid "" +msgstr "" + +msgctxt "#60361" +msgid "Super Favourites Menu" +msgstr "Super Favourites Menu" + +msgctxt "#60362" +msgid "You can't watch this video because..." +msgstr "You can't watch this video because..." + +msgctxt "#60363" +msgid "The server on which it is hosted" +msgstr "The server on which it is hosted" + +msgctxt "#60364" +msgid "is not yet supported in Alfa" +msgstr "is not yet supported in Alfa" + +msgctxt "#60365" +msgid "Loading video..." +msgstr "Loading video..." + +msgctxt "#60366" +msgid "External plugin: %s" +msgstr "External plugin: %s" + +msgctxt "#60376" +msgid "Video information" +msgstr "Video information" + +msgctxt "#60377" +msgid "Title:" +msgstr "Title:" + +msgctxt "#60378" +msgid "Original Title:" +msgstr "Original Title:" + +msgctxt "#60379" +msgid "Original language:" +msgstr "Original language:" + +msgctxt "#60380" +msgid "Score:" +msgstr "Score:" + +msgctxt "#60381" +msgid "Release:" +msgstr "Release:" + +msgctxt "#60382" +msgid "Genres:" +msgstr "Genres:" + +msgctxt "#60383" +msgid "Series:" +msgstr "Series:" + +msgctxt "#60384" +msgid "Season title:" +msgstr "Season title:" + +msgctxt "#60385" +msgid "Season:" +msgstr "Season:" + +msgctxt "#60386" +msgid "Episode:" +msgstr "Episode:" + +msgctxt "#60387" +msgid "Emission:" +msgstr "Emission:" + +msgctxt "#60388" +msgid "Summary:" +msgstr "Summary:" + +msgctxt "#60389" +msgid "Videolibrary update...." +msgstr "Videolibrary update...." + +msgctxt "#60390" +msgid "AutoPlay Configuration" +msgstr "AutoPlay Configuration" + +msgctxt "#60391" +msgid "AutoPlay" +msgstr "AutoPlay" + +msgctxt "#60392" +msgid "\n\n\nTotal Reset of the addon %s.\n\n[COLOR red]Attention This function completely resets the addon.[/COLOR]" +msgstr "\n\n\nTotal Reset of the addon %s.\n\n[COLOR red]Attention This function completely resets the addon.[/COLOR]" + +msgctxt "#60393" +msgid "[COLOR red]Reset %s[/COLOR]" +msgstr "[COLOR red]Reset %s[/COLOR]" + +msgctxt "#60394" +msgid "Reset %s" +msgstr "Reset %s" + +msgctxt "#60395" +msgid "Are you sure you want to reset all settings of %s ?" +msgstr "Are you sure you want to reset all settings of %s ?" + +msgctxt "#60396" +msgid "Cancel" +msgstr "Cancel" + +msgctxt "#60397" +msgid "Confirm" +msgstr "Confirm" + +msgctxt "#60398" +msgid " Settings Reset was successful!" +msgstr " Settings Reset was successful!" + +msgctxt "#60399" +msgid "AutoPlay allows you to auto play links directly, based on your server settings and preferred qualities. " +msgstr "AutoPlay allows you to auto play links directly, based on your server settings and preferred qualities. " + +msgctxt "#60400" +msgid "512 Mega" +msgstr "512 Mega" + +msgctxt "#60401" +msgid "1 Gb" +msgstr "1 Gb" + +msgctxt "#60402" +msgid "2 Gb" +msgstr "2 Gb" + +msgctxt "#60403" +msgid "more than 2 Gb" +msgstr "more than 2 Gb" + +msgctxt "#60404" +msgid "Choose cache setting" +msgstr "Choose cache setting" + +msgctxt "#60405" +msgid "\n[COLOR orange]Cache Set for 512 Mega RAM[/COLOR]" +msgstr "\n[COLOR orange]Cache Set for 512 Mega RAM[/COLOR]" + +msgctxt "#60406" +msgid "\n[COLOR orange]Cache Set for 1 Gb RAM[/COLOR]" +msgstr "\n[COLOR orange]Cache Set for 1 Gb RAM[/COLOR]" + +msgctxt "#60407" +msgid "\n[COLOR orange]Cache Set for 2 Gb RAM[/COLOR]" +msgstr "\n[COLOR orange]Cache Set for 2 Gb RAM[/COLOR]" + +msgctxt "#60408" +msgid "\n[COLOR orange]Cache Set higher than 2 Gb of RAM[/COLOR]" +msgstr "\n[COLOR orange]Cache Set higher than 2 Gb of RAM[/COLOR]" + +msgctxt "#60409" +msgid "plugin" +msgstr "plugin" + +msgctxt "#60410" +msgid "An advancedsettings.xml file has been created" +msgstr "An advancedsettings.xml file has been created" + +msgctxt "#60411" +msgid "with the ideal streaming configuration." +msgstr "with the ideal streaming configuration." + +msgctxt "#60412" +msgid "Choose channels to include" +msgstr "Choose channels to include" + +msgctxt "#60413" +msgid "[COLOR yellow]New Movie Search...[/COLOR]" +msgstr "[COLOR yellow]New Movie Search...[/COLOR]" + +msgctxt "#60414" +msgid "[COLOR yellow]New search tv series...[/COLOR]" +msgstr "[COLOR yellow]New search tv series...[/COLOR]" + +msgctxt "#60415" +msgid "[COLOR green]Other settings[/COLOR]" +msgstr "[COLOR green]Other settings[/COLOR]" + +msgctxt "#60416" +msgid "Delete saved searches" +msgstr "Delete saved searches" + +msgctxt "#60417" +msgid "[COLOR red]Delete search history[/COLOR]" +msgstr "[COLOR red]Delete search history[/COLOR]" + +msgctxt "#60418" +msgid "Choose channels to include in your search" +msgstr "Choose channels to include in your search" + +msgctxt "#60419" +msgid "Delete saved searches" +msgstr "Delete saved searches" + +msgctxt "#60420" +msgid "More Options" +msgstr "More Options" + +msgctxt "#60421" +msgid "Channels included in the global search " +msgstr "Channels included in the global search " + +msgctxt "#60422" +msgid "Search " +msgstr "Search " + +msgctxt "#60423" +msgid "Search" +msgstr "Search" + +msgctxt "#60424" +msgid "Searches key have been deleted correctly" +msgstr "Searches key have been deleted correctly" + +msgctxt "#60425" +msgid "Channel search" +msgstr "Channel search" + +msgctxt "#60426" +msgid "FILTER: Configure" +msgstr "FILTER: Configure" + +msgctxt "#60427" +msgid "FILTER: Adding '%s'" +msgstr "FILTER: Adding '%s'" + +msgctxt "#60428" +msgid "FILTER: Delete '%s'" +msgstr "FILTER: Delete '%s'" + +msgctxt "#60429" +msgid "[COLOR %s]Filter configuration for TV series...[/COLOR]" +msgstr "[COLOR %s]Filter configuration for TV series...[/COLOR]" + +msgctxt "#60430" +msgid "FILTRO: Delete '%s'" +msgstr "FILTRO: Delete '%s'" + +msgctxt "#60431" +msgid " and quality %s" +msgstr " and quality %s" + +msgctxt "#60432" +msgid "[COLOR %s]No results in this language '%s'%s, click to show without filter[/COLOR]" +msgstr "[COLOR %s]No results in this language '%s'%s, click to show without filter[/COLOR]" + +msgctxt "#60433" +msgid " (disabled)" +msgstr " (disabled)" + +msgctxt "#60434" +msgid "Configure [COLOR %s][%s][/COLOR]%s" +msgstr "Configure [COLOR %s][%s][/COLOR]%s" + +msgctxt "#60435" +msgid "There are no filters, search for a TV series and click on the context menu 'FILTER: Configure'" +msgstr "There are no filters, search for a TV series and click on the context menu 'FILTER: Configure'" + +msgctxt "#60436" +msgid "Spanish" +msgstr "Spanish" + +msgctxt "#60437" +msgid "Delete" +msgstr "Delete" + +msgctxt "#60438" +msgid "¿Enable / disable filter?" +msgstr "¿Enable / disable filter?" + +msgctxt "#60439" +msgid "Language" +msgstr "Language" + +msgctxt "#60440" +msgid "Permitted quality" +msgstr "Permitted quality" + +msgctxt "#60441" +msgid "Filter links for: [COLOR %s]%s[/COLOR]" +msgstr "Filter links for: [COLOR %s]%s[/COLOR]" + +msgctxt "#60442" +msgid "Are you sure you want to delete the filter?" +msgstr "Are you sure you want to delete the filter?" + +msgctxt "#60443" +msgid "Click 'Yes' to remove the filter from [COLOR %s]%s[/COLOR], click 'No' or close the window to do nothing." +msgstr "Click 'Yes' to remove the filter from [COLOR %s]%s[/COLOR], click 'No' or close the window to do nothing." + +msgctxt "#60444" +msgid "FILTER DELETED" +msgstr "FILTER DELETED" + +msgctxt "#60445" +msgid "Error on saving on disk" +msgstr "Error on saving on disk" + +msgctxt "#60446" +msgid "FILTER SAVED" +msgstr "FILTER SAVED" + +msgctxt "#60447" +msgid "FAQ:" +msgstr "FAQ:" + +msgctxt "#60448" +msgid " - How do I report an error?" +msgstr " - How do I report an error?" + +msgctxt "#60449" +msgid " - Is it possible to enable/disable channels?" +msgstr " - Is it possible to enable/disable channels?" + +msgctxt "#60450" +msgid " - Is automatic synchronization with Trakt possible?" +msgstr " - Is automatic synchronization with Trakt possible?" + +msgctxt "#60451" +msgid " - Is it possible to show all the results together in the global search?" +msgstr " - Is it possible to show all the results together in the global search?" + +msgctxt "#60452" +msgid " - Links take too long to appear." +msgstr " - Links take too long to appear." + +msgctxt "#60453" +msgid " - The content search is not performed correctly." +msgstr " - The content search is not performed correctly." + +msgctxt "#60454" +msgid " - Some channels do not function properly." +msgstr " - Some channels do not function properly." + +msgctxt "#60455" +msgid " - The library does not update correctly." +msgstr " - The library does not update correctly." + +msgctxt "#60456" +msgid " - Links of interest" +msgstr " - Links of interest" + +msgctxt "#60457" +msgid "Alfa" +msgstr "Alfa" + +msgctxt "#60458" +msgid "The disabling can be done in 'Settings>Turn on/off channels'. You can toggle channels on/off one at a time or all at the same time. Want to manage your channels now?" +msgstr "The disabling can be done in 'Settings>Turn on/off channels'. You can toggle channels on/off one at a time or all at the same time. Want to manage your channels now?" + +msgctxt "#60459" +msgid "Currently it is possible to activate the synchronization (silent) after having marked an episode as 'as watched' (this happens automatically). This option can be enabled in 'Settings>Library Settings'. Do you want access to these settings?" +msgstr "Currently it is possible to activate the synchronization (silent) after having marked an episode as 'as watched' (this happens automatically). This option can be enabled in 'Settings>Library Settings'. Do you want access to these settings?" + +msgctxt "#60460" +msgid "This can be improved by limiting the maximum number of links or by displaying them in a Pop-Up window. These settings can be found in 'Settings>Library Settings' Do you want to access these settings?" +msgstr "This can be improved by limiting the maximum number of links or by displaying them in a Pop-Up window. These settings can be found in 'Settings>Library Settings' Do you want to access these settings?" + +msgctxt "#60461" +msgid "Alfa - FAQ - %s" +msgstr "Alfa - FAQ - %s" + +msgctxt "#60462" +msgid "You may not have written the library path correctly in 'Settings>Preferences'.\nIl The specified path must be exactly the same as the 'source' entered in 'Archive' of the Kodi library.\nAVANZATO: This path is also found in 'sources.xml'.\nThere can be problems using some Kodi forks and paths with 'special://'. SPMC, for example, has problems with this, and there doesn't seem to be a solution, as it is an external problem to Alfa that has existed for a long time.\nYou can try solving these problems in 'Settings>Library Settings' by changing the 'Search in' setting from 'The folder of each series' to 'All library'." +msgstr "You may not have written the library path correctly in 'Settings>Preferences'.\nIl The specified path must be exactly the same as the 'source' entered in 'Archive' of the Kodi library.\nAVANZATO: This path is also found in 'sources.xml'.\nThere can be problems using some Kodi forks and paths with 'special://'. SPMC, for example, has problems with this, and there doesn't seem to be a solution, as it is an external problem to Alfa that has existed for a long time.\nYou can try solving these problems in 'Settings>Library Settings' by changing the 'Search in' setting from 'The folder of each series' to 'All library'." + +msgctxt "#60463" +msgid "The channel site may not work. In case the site works you can report the problem on github." +msgstr "The channel site may not work. In case the site works you can report the problem on github." + +msgctxt "#60464" +msgid "It is possible that you have updated Alfa recently and that the changes have not been fully applied Well, you can try 'Settings>Other Tools', checking the *_data.json files or reattaching everything to the library again" +msgstr "It is possible that you have updated Alfa recently and that the changes have not been fully applied Well, you can try 'Settings>Other Tools', checking the *_data.json files or reattaching everything to the library again" + +msgctxt "#60465" +msgid "Do you want access to these settings?" +msgstr "Do you want access to these settings?" + +msgctxt "#60466" +msgid "Yes, the option to display merged or split results by channels can be found in 'Settings>Global Search Settings>Other Settings'. Do you want access to these settings?" +msgstr "Yes, the option to display merged or split results by channels can be found in 'Settings>Global Search Settings>Other Settings'. Do you want access to these settings?" + +msgctxt "#60467" +msgid "To report a problem on'http://alfa-addon.com' you need to:|the version you're using of Alpha.|The version you're using of kodi, mediaserver, etc.|the version and name of the operating system you're using.|The name of the skin (in case you're using Kodi) and whether using the default skin has solved the problem.|Description of the problem and any test cases.To activate the log in detailed mode, go to:|Configuration.|Preferences.|In the General tab - Check the option: Generate detailed log. The detailed log file can be found in the following path: \n\n%s" +msgstr "To report a problem on'http://alfa-addon.com' you need to:|the version you're using of Alpha.|The version you're using of kodi, mediaserver, etc.|the version and name of the operating system you're using.|The name of the skin (in case you're using Kodi) and whether using the default skin has solved the problem.|Description of the problem and any test cases.To activate the log in detailed mode, go to:|Configuration.|Preferences.|In the General tab - Check the option: Generate detailed log. The detailed log file can be found in the following path: \n\n%s" + +msgctxt "#60468" +msgid "You can find our Telegram channel at @StreamOnDemandOfficial\nSe you have doubts you can write to us in the Telegram group: https://bit.ly/2I3kRwF" +msgstr "You can find our Telegram channel at @StreamOnDemandOfficial\nSe you have doubts you can write to us in the Telegram group: https://bit.ly/2I3kRwF" + +msgctxt "#60469" +msgid "Uploading new data" +msgstr "Uploading new data" + +msgctxt "#60470" +msgid "Buscando en Tmdb......." +msgstr "Buscando en Tmdb......." + +msgctxt "#60471" +msgid "No results, missing information about the year of the video" +msgstr "No results, missing information about the year of the video" + +msgctxt "#60472" +msgid "There is no information on the %s required" +msgstr "There is no information on the %s required" + +msgctxt "#60473" +msgid "No results" +msgstr "No results" + +msgctxt "#60474" +msgid "There is no information on the %s required" +msgstr "There is no information on the %s required" + +msgctxt "#60475" +msgid "Filmaffinity recording......." +msgstr "Filmaffinity recording......." + +msgctxt "#60476" +msgid "[COLOR yellow][B]There is no information about this movie...[/B][/COLOR]" +msgstr "[COLOR yellow][B]There is no information about this movie...[/B][/COLOR]" + +msgctxt "#60477" +msgid "Important recommendations......." +msgstr "Important recommendations......." + +msgctxt "#60478" +msgid "[COLOR aquamarine][B]Completated %s[/B][/COLOR]" +msgstr "[COLOR aquamarine][B]Completated %s[/B][/COLOR]" + +msgctxt "#60479" +msgid "[COLOR aquamarine][B]In progress %s[/B][/COLOR]" +msgstr "[COLOR aquamarine][B]In progress %s[/B][/COLOR]" + +msgctxt "#60480" +msgid "(Seasons: %s)" +msgstr "(Seasons: %s)" + +msgctxt "#60481" +msgid "Picture collection on FANART.TV" +msgstr "Picture collection on FANART.TV" + +msgctxt "#60482" +msgid "Tuned Instruments in Vtunes" +msgstr "Tuned Instruments in Vtunes" + +msgctxt "#60483" +msgid "Picture collection on FANART.TV" +msgstr "Picture collection on FANART.TV" + +msgctxt "#60484" +msgid "[COLOR red][B]Update Kodi to its latest version[/B][/COLOR]" +msgstr "[COLOR red][B]Update Kodi to its latest version[/B][/COLOR]" + +msgctxt "#60485" +msgid "[COLOR skyblue]for detailed info[/COLOR]" +msgstr "[COLOR skyblue]for detailed info[/COLOR]" + +msgctxt "#60486" +msgid "Uploading new information" +msgstr "Uploading new information" + +msgctxt "#60487" +msgid "Search in Tmdb......." +msgstr "Search in Tmdb......." + +msgctxt "#60488" +msgid "No information..." +msgstr "No information..." + +msgctxt "#60489" +msgid "[COLOR limegreen][B]Production company: [/B][/COLOR]" +msgstr "[COLOR limegreen][B]Production company: [/B][/COLOR]" + +msgctxt "#60490" +msgid "[COLOR limegreen][B]Country: [/B][/COLOR]" +msgstr "[COLOR limegreen][B]Country: [/B][/COLOR]" + +msgctxt "#60491" +msgid "[COLOR limegreen][B]Preview: [/B][/COLOR]" +msgstr "[COLOR limegreen][B]Preview: [/B][/COLOR]" + +msgctxt "#60492" +msgid "[COLOR limegreen][B]Seasons/Episodes: [/B][/COLOR]" +msgstr "[COLOR limegreen][B]Seasons/Episodes: [/B][/COLOR]" + +msgctxt "#60493" +msgid "[COLOR orange][B]Is there the tv series you're looking for?[/B][/COLOR]" +msgstr "[COLOR orange][B]Is there the tv series you're looking for?[/B][/COLOR]" + +msgctxt "#60494" +msgid "[COLOR orange][B]Is there the movie you are looking for?[/B][/COLOR]" +msgstr "[COLOR orange][B]Is there the movie you are looking for?[/B][/COLOR]" + +msgctxt "#60495" +msgid "[COLOR tomato][B]Close[/B][/COLOR]" +msgstr "[COLOR tomato][B]Close[/B][/COLOR]" + +msgctxt "#60496" +msgid "Loading results" +msgstr "Loading results" + +msgctxt "#60497" +msgid "Wait........" +msgstr "Wait........" + +msgctxt "#60498" +msgid "[COLOR orange][B]Select...[/B][/COLOR]" +msgstr "[COLOR orange][B]Select...[/B][/COLOR]" + +msgctxt "#60499" +msgid "plugin" +msgstr "plugin" + +msgctxt "#60500" +msgid "Nothing to play" +msgstr "Nothing to play" + +msgctxt "#60501" +msgid "[COLOR orange][B]Department[/B][/COLOR]" +msgstr "[COLOR orange][B]Department[/B][/COLOR]" + +msgctxt "#60502" +msgid "Uploading new data" +msgstr "Uploading new data" + +msgctxt "#60503" +msgid "Loading data from the %s..." +msgstr "Loading data from the %s..." + +msgctxt "#60504" +msgid "No information" +msgstr "No information" + +msgctxt "#60505" +msgid "[COLOR rosybrown]Uploading filmography...[/COLOR]" +msgstr "[COLOR rosybrown]Uploading filmography...[/COLOR]" + +msgctxt "#60506" +msgid "[COLOR plum]Picture collection...[/COLOR]" +msgstr "[COLOR plum]Picture collection...[/COLOR]" + +msgctxt "#60507" +msgid "[COLOR crimson][B]Error[/B][/COLOR]" +msgstr "[COLOR crimson][B]Error[/B][/COLOR]" + +msgctxt "#60508" +msgid "[COLOR tomato]Video not available[/COLOR]" +msgstr "[COLOR tomato]Video not available[/COLOR]" + +msgctxt "#60509" +msgid "Movies" +msgstr "Movies" + +msgctxt "#60510" +msgid "Kids" +msgstr "Kids" + +msgctxt "#60511" +msgid "TV series Episodes" +msgstr "TV series Episodes" + +msgctxt "#60512" +msgid "Anime Episodes" +msgstr "Anime Episodes" + +msgctxt "#60513" +msgid "Documentaries" +msgstr "Documentaries" + +msgctxt "#60514" +msgid "Channels included in: %s" +msgstr "Channels included in: %s" + +msgctxt "#60515" +msgid "Simultaneous search deactivated" +msgstr "Simultaneous search deactivated" + +msgctxt "#60516" +msgid "Simultaneous novelty search provides" +msgstr "Simultaneous novelty search provides" + +msgctxt "#60517" +msgid "higher speed and its deactivation is advisable only in case of failure." +msgstr "higher speed and its deactivation is advisable only in case of failure." + +msgctxt "#60518" +msgid "Would you like to activate the simultaneous search now?" +msgstr "Would you like to activate the simultaneous search now?" + +msgctxt "#60519" +msgid "Channel search..." +msgstr "Channel search..." + +msgctxt "#60520" +msgid "Search in '%s'..." +msgstr "Search in '%s'..." + +msgctxt "#60521" +msgid "Completed in %d/%d channels..." +msgstr "Completed in %d/%d channels..." + +msgctxt "#60522" +msgid "Results obtained: %s | Time: %2.f seconds" +msgstr "Results obtained: %s | Time: %2.f seconds" + +msgctxt "#60523" +msgid " (In %s and %s)" +msgstr " (In %s and %s)" + +msgctxt "#60524" +msgid " (In %s)" +msgstr " (In %s)" + +msgctxt "#60525" +msgid "Channels included in:" +msgstr "Channels included in:" + +msgctxt "#60526" +msgid " - Movies " +msgstr " - Movies " + +msgctxt "#60527" +msgid " - Kids" +msgstr " - Kids" + +msgctxt "#60528" +msgid " - Series Tv Episodes" +msgstr " - Series Tv Episodes" + +msgctxt "#60529" +msgid " - Anime Episodes" +msgstr " - Anime Episodes" + +msgctxt "#60530" +msgid " - Documentaries" +msgstr " - Documentaries" + +msgctxt "#60531" +msgid "Other Settings" +msgstr "Other Settings" + +msgctxt "#60532" +msgid "Configuration -- News" +msgstr "Configuration -- News" + +msgctxt "#60533" +msgid "Channels included in News " +msgstr "Channels included in News " + +msgctxt "#60534" +msgid "Last 2 months" +msgstr "Last 2 months" + +msgctxt "#60535" +msgid "Preferences" +msgstr "Preferences" + +msgctxt "#60536" +msgid "Special settings" +msgstr "Special settings" + +msgctxt "#60537" +msgid "Channel settings" +msgstr "Channel settings" + +msgctxt "#60538" +msgid "Server settings" +msgstr "Server settings" + +msgctxt "#60539" +msgid "Settings for the 'News' section" +msgstr "Settings for the 'News' section" + +msgctxt "#60540" +msgid "Global search settings" +msgstr "Global search settings" + +msgctxt "#60541" +msgid "Download settings" +msgstr "Download settings" + +msgctxt "#60542" +msgid "Videolibrary settings" +msgstr "Videolibrary settings" + +msgctxt "#60544" +msgid "More Options" +msgstr "More Options" + +msgctxt "#60545" +msgid "Activate/deactivate channels" +msgstr "Activate/deactivate channels" + +msgctxt "#60546" +msgid "Channel settings" +msgstr "Channel settings" + +msgctxt "#60547" +msgid "Channel Configuration '%s'" +msgstr "Channel Configuration '%s'" + +msgctxt "#60548" +msgid "HChannel Options" +msgstr "HChannel Options" + +msgctxt "#60549" +msgid "Check the files * _data.json" +msgstr "Check the files * _data.json" + +msgctxt "#60550" +msgid "Servers locked" +msgstr "Servers locked" + +msgctxt "#60551" +msgid "Favorite servers" +msgstr "Favorite servers" + +msgctxt "#60552" +msgid "Debriders settings" +msgstr "Debriders settings" + +msgctxt "#60553" +msgid " Server configuration '%s'" +msgstr " Server configuration '%s'" + +msgctxt "#60554" +msgid "Server settings" +msgstr "Server settings" + +msgctxt "#60557" +msgid "Saving configuration" +msgstr "Saving configuration" + +msgctxt "#60558" +msgid "Please wait." +msgstr "Please wait." + +msgctxt "#60559" +msgid "Saving configuration...%s" +msgstr "Saving configuration...%s" + +msgctxt "#60560" +msgid " - [COLOR red] CORRECTED!![/COLOR]" +msgstr " - [COLOR red] CORRECTED!![/COLOR]" + +msgctxt "#60561" +msgid "Saving configuration..." +msgstr "Saving configuration..." + +msgctxt "#60562" +msgid "Please wait" +msgstr "Please wait" + +msgctxt "#60563" +msgid "Saving configuration..." +msgstr "Saving configuration..." + +msgctxt "#60564" +msgid "Channel Options" +msgstr "Channel Options" + +msgctxt "#60565" +msgid " Check the files * _data.json" +msgstr " Check the files * _data.json" + +msgctxt "#60566" +msgid "Videolibrary options" +msgstr "Videolibrary options" + +msgctxt "#60567" +msgid " Overwrite the entire video library (strm, nfo and json)" +msgstr " Overwrite the entire video library (strm, nfo and json)" + +msgctxt "#60568" +msgid " Search for new episodes and update the video library" +msgstr " Search for new episodes and update the video library" + +msgctxt "#60569" +msgid " - There are no default settings" +msgstr " - There are no default settings" + +msgctxt "#60570" +msgid " | Error Detail: %s" +msgstr " | Error Detail: %s" + +msgctxt "#60571" +msgid " - [COLOR red] Default settings cannot be loaded![/COLOR]" +msgstr " - [COLOR red] Default settings cannot be loaded![/COLOR]" + +msgctxt "#60572" +msgid "Ask" +msgstr "Ask" + +msgctxt "#60577" +msgid "Order Servers" +msgstr "Order Servers" + +msgctxt "#60578" +msgid " Server #%s" +msgstr " Server #%s" + +msgctxt "#60579" +msgid "Error" +msgstr "Error" + +msgctxt "#60580" +msgid "A saving error occurred" +msgstr "A saving error occurred" + +msgctxt "#60581" +msgid "Overwriting the entire video library" +msgstr "Overwriting the entire video library" + +msgctxt "#60582" +msgid "This may take some time." +msgstr "This may take some time." + +msgctxt "#60583" +msgid "Do you want to continue?" +msgstr "Do you want to continue?" + +msgctxt "#60584" +msgid "Overwriting the video library...TV SERIES" +msgstr "Overwriting the video library...TV SERIES" + +msgctxt "#60585" +msgid "alfa" +msgstr "alfa" + +msgctxt "#60586" +msgid "Overwriting the video library...MOVIES" +msgstr "Overwriting the video library...MOVIES" + +msgctxt "#60587" +msgid "Video library update...." +msgstr "Video library update...." + +msgctxt "#60588" +msgid " - Settings created" +msgstr " - Settings created" + +msgctxt "#60589" +msgid "- - No correction necessary" +msgstr "- - No correction necessary" + +msgctxt "#60590" +msgid " - An error has occurred" +msgstr " - An error has occurred" + +msgctxt "#60591" +msgid "Activate all" +msgstr "Activate all" + +msgctxt "#60592" +msgid "Deactivate all" +msgstr "Deactivate all" + +msgctxt "#60593" +msgid "Default Set" +msgstr "Default Set" + +msgctxt "#60594" +msgid "All channels" +msgstr "All channels" + +msgctxt "#60595" +msgid " [COLOR grey](Default disabled)[/COLOR]" +msgstr " [COLOR grey](Default disabled)[/COLOR]" + +msgctxt "#60596" +msgid "Channels" +msgstr "Channels" + +msgctxt "#60597" +msgid " Server #%s" +msgstr " Server #%s" + +msgctxt "#60598" +msgid "Configuration -- Video Library" +msgstr "Configuration -- Video Library" + +msgctxt "#60600" +msgid "Series" +msgstr "Series" + +msgctxt "#60601" +msgid "Video library update" +msgstr "Video library update" + +msgctxt "#60602" +msgid "Never" +msgstr "Never" + +msgctxt "#60603" +msgid "When Kodi starts" +msgstr "When Kodi starts" + +msgctxt "#60604" +msgid "Once a day" +msgstr "Once a day" + +msgctxt "#60605" +msgid "At the start of Kodi and once a day" +msgstr "At the start of Kodi and once a day" + +msgctxt "#60606" +msgid " Wait before updating at startup of Kodi" +msgstr " Wait before updating at startup of Kodi" + +msgctxt "#60607" +msgid "When Kodi starts" +msgstr "When Kodi starts" + +msgctxt "#60609" +msgid "10 sec" +msgstr "10 sec" + +msgctxt "#60610" +msgid "20 sec" +msgstr "20 sec" + +msgctxt "#60611" +msgid "30 sec" +msgstr "30 sec" + +msgctxt "#60612" +msgid "60 sec" +msgstr "60 sec" + +msgctxt "#60613" +msgid " Begin scheduled update from" +msgstr " Begin scheduled update from" + +msgctxt "#60614" +msgid " Search for new episodes in active tv series" +msgstr " Search for new episodes in active tv series" + +msgctxt "#60615" +msgid "Never" +msgstr "Never" + +msgctxt "#60616" +msgid "Always" +msgstr "Always" + +msgctxt "#60617" +msgid "According to new episodes" +msgstr "According to new episodes" + +msgctxt "#60618" +msgid " Search for content in" +msgstr " Search for content in" + +msgctxt "#60619" +msgid "The folder of each tv series" +msgstr "The folder of each tv series" + +msgctxt "#60620" +msgid "All video library" +msgstr "All video library" + +msgctxt "#60621" +msgid "Show links in" +msgstr "Show links in" + +msgctxt "#60622" +msgid "Conventional window" +msgstr "Conventional window" + +msgctxt "#60623" +msgid "Pop-up window" +msgstr "Pop-up window" + +msgctxt "#60624" +msgid " Maximum number of links to display (recommended for slow devices)" +msgstr " Maximum number of links to display (recommended for slow devices)" + +msgctxt "#60625" +msgid "All" +msgstr "All" + +msgctxt "#60626" +msgid " Sort by whitelist" +msgstr " Sort by whitelist" + +msgctxt "#60627" +msgid " Remove the channel name at the beginning" +msgstr " Remove the channel name at the beginning" + +msgctxt "#60628" +msgid " Pop-up window: Replace \"View in\" with \"[V]\" and \"Download in\" with \"[D]\"" +msgstr " Pop-up window: Replace \"View in\" with \"[V]\" and \"Download in\" with \"[D]\"" + +msgctxt "#60629" +msgid "Database location" +msgstr "Database location" + +msgctxt "#60630" +msgid "Local" +msgstr "Local" + +msgctxt "#60631" +msgid "Remote" +msgstr "Remote" + +msgctxt "#60632" +msgid " Server Name" +msgstr " Server Name" + +msgctxt "#60633" +msgid " Server port" +msgstr " Server port" + +msgctxt "#60634" +msgid "Automatically mark as watched" +msgstr "Automatically mark as watched" + +msgctxt "#60635" +msgid " Video viewing time" +msgstr " Video viewing time" + +msgctxt "#60636" +msgid "0 seg" +msgstr "0 seg" + +msgctxt "#60637" +msgid "Synchronizing with Trakt" +msgstr "Synchronizing with Trakt" + +msgctxt "#60638" +msgid " After mark as watched the episode" +msgstr " After mark as watched the episode" + +msgctxt "#60639" +msgid " Show notification" +msgstr " Show notification" + +msgctxt "#60640" +msgid " On adding a TV series to the video library" +msgstr " On adding a TV series to the video library" + +msgctxt "#60641" +msgid " Wait until the tv series is added" +msgstr " Wait until the tv series is added" + +msgctxt "#60642" +msgid "Show option \"All Seasons\"." +msgstr "Show option \"All Seasons\"." + +msgctxt "#60643" +msgid "Do not combine the seasons of the series"" +msgstr "Do not combine the seasons of the series"" + +msgctxt "#60644" +msgid "Only if there is one season" +msgstr "Only if there is one season" + +msgctxt "#60645" +msgid "Show channel selection box" +msgstr "Show channel selection box" + +msgctxt "#60646" +msgid "Create directories on your system using" +msgstr "Create directories on your system using" + +msgctxt "#60647" +msgid "Localized title" +msgstr "Localized title" + +msgctxt "#60648" +msgid "Never" +msgstr "Never" + +msgctxt "#60649" +msgid "Original title" +msgstr "Original title" + +msgctxt "#60650" +msgid "When you add content, you get information from:" +msgstr "When you add content, you get information from:" + +msgctxt "#60651" +msgid " Movies:" +msgstr " Movies:" + +msgctxt "#60652" +msgid " TV Series:" +msgstr " TV Series:" + +msgctxt "#60653" +msgid " If there are no results also search in English" +msgstr " If there are no results also search in English" + +msgctxt "#60654" +msgid "Include in blacklist" +msgstr "Include in blacklist" + +msgctxt "#60655" +msgid "Include in Favorites List" +msgstr "Include in Favorites List" + +msgctxt "#60656" +msgid "Simultaneous search (multiprocessing)" +msgstr "Simultaneous search (multiprocessing)" + +msgctxt "#60657" +msgid "Show Results:" +msgstr "Show Results:" + +msgctxt "#60658" +msgid "Grouped by content" +msgstr "Grouped by content" + +msgctxt "#60659" +msgid "Grouped by channel" +msgstr "Grouped by channel" + +msgctxt "#60660" +msgid "Without group" +msgstr "Without group" + +msgctxt "#60661" +msgid "News" +msgstr "News" + +msgctxt "#60662" +msgid "code cleaning" +msgstr "code cleaning" + +msgctxt "#60663" +msgid "Add the progress window" +msgstr "Add the progress window" + +msgctxt "#60664" +msgid "Eliminated unnecessary code." +msgstr "Eliminated unnecessary code." + +msgctxt "#60665" +msgid "Possibility to include other channels, through the configuration" +msgstr "Possibility to include other channels, through the configuration" + +msgctxt "#60666" +msgid "Color Profile" +msgstr "Color Profile" + +msgctxt "#60667" +msgid "Cold" +msgstr "Cold" + +msgctxt "#60668" +msgid "Hot" +msgstr "Hot" + +msgctxt "#60669" +msgid "Lilac" +msgstr "Lilac" + +msgctxt "#60670" +msgid "Pastel" +msgstr "Pastel" + +msgctxt "#60671" +msgid "Vivid" +msgstr "Vivid" + +msgctxt "#60672" +msgid "Global Search" +msgstr "Global Search" + +msgctxt "#60673" +msgid "MultiThread Search" +msgstr "MultiThread Search" + +msgctxt "#60674" +msgid "Show Results:" +msgstr "Show Results:" + +msgctxt "#60675" +msgid "Per channel" +msgstr "Per channel" + +msgctxt "#60676" +msgid "All Together" +msgstr "All Together" + +msgctxt "#60677" +msgid "Saved Searches:" +msgstr "Saved Searches:" + +msgctxt "#60678" +msgid "Remember the latest search" +msgstr "Remember the latest search" + +msgctxt "#60679" +msgid "Novelties in %s" +msgstr "Novelties in %s" + +msgctxt "#60680" +msgid "documentaries" +msgstr "documentaries" + +msgctxt "#60681" +msgid "movies" +msgstr "movies" + +msgctxt "#60682" +msgid "tv series" +msgstr "tv series" + +msgctxt "#60683" +msgid "anime" +msgstr "anime" + +msgctxt "#70000" +msgid "Options" +msgstr "Options" + +msgctxt "#70001" +msgid "OK" +msgstr "OK" + +msgctxt "#70002" +msgid "Cancel" +msgstr "Cancel" + +msgctxt "#70003" +msgid "Default" +msgstr "Default" + +msgctxt "#70004" +msgid "Loading..." +msgstr "Loading..." + +msgctxt "#70005" +msgid "Previous" +msgstr "Previous" + +msgctxt "#70006" +msgid "Next" +msgstr "Next" + +msgctxt "#70007" +msgid "Accept" +msgstr "Accept" + +msgctxt "#70008" +msgid "Reload" +msgstr "Reload" + +msgctxt "#70009" +msgid "Classic Menu" +msgstr "Classic Menu" + +msgctxt "#70010" +msgid "Where To Search" +msgstr "Where To Search" + +msgctxt "#70011" +msgid "Search for actor" +msgstr "Search for actor" + +msgctxt "#70012" +msgid "Beginning" +msgstr "Beginning" + +msgctxt "#70013" +msgid "Terror" +msgstr "Terror" + +msgctxt "#70014" +msgid "Castellan" +msgstr "Castellan" + +msgctxt "#70015" +msgid "Torrents" +msgstr "Torrents" + +msgctxt "#70016" +msgid "Active channels" +msgstr "Active channels" + +msgctxt "#70017" +msgid "TV Series" +msgstr "TV Series" + +msgctxt "#70018" +msgid "Children" +msgstr "Children" + +msgctxt "#70019" +msgid "Documentary" +msgstr "Documentary" + +msgctxt "#70020" +msgid "[COLOR yellow]Search similar[/COLOR]" +msgstr "" + +msgctxt "#70021" +msgid "Search in TMDB" +msgstr "" + +msgctxt "#70022" +msgid " - Movies" +msgstr "" + +msgctxt "#70023" +msgid " - TV Shows" +msgstr "" + +msgctxt "#70024" +msgid "Search in Filmaffinity" +msgstr "" + +msgctxt "#70025" +msgid "Search in IMDB" +msgstr "" + +msgctxt "#70026" +msgid "MyAnimeList" +msgstr "" + +msgctxt "#70027" +msgid "Search engine settings" +msgstr "" + +msgctxt "#70028" +msgid "Most Popular" +msgstr "" + +msgctxt "#70029" +msgid "Top rated" +msgstr "" + +msgctxt "#70030" +msgid "On The Bill" +msgstr "" + +msgctxt "#70031" +msgid "Next" +msgstr "" + +msgctxt "#70032" +msgid "Genres" +msgstr "" + +msgctxt "#70033" +msgid "Actors/Actresses by popularity" +msgstr "" + +msgctxt "#70034" +msgid "Coming Soon" +msgstr "" + +msgctxt "#70035" +msgid "Search %s" +msgstr "" + +msgctxt "#70036" +msgid "Search actor/actress" +msgstr "" + +msgctxt "#70037" +msgid "Search director, writer..." +msgstr "" + +msgctxt "#70038" +msgid "Custom Filter" +msgstr "" + +msgctxt "#70039" +msgid "Keyword filter" +msgstr "" + +msgctxt "#70040" +msgid "Top Filmaffinity" +msgstr "" + +msgctxt "#70041" +msgid "Modern TV Shows" +msgstr "" + +msgctxt "#70042" +msgid "Year" +msgstr "" + +msgctxt "#70043" +msgid "Coming Out" +msgstr "" + +msgctxt "#70044" +msgid "Sagas and Collections" +msgstr "" + +msgctxt "#70045" +msgid "Movies/TV Shows/Documentaries by Themes" +msgstr "" + +msgctxt "#70046" +msgid "Search Movies/TV Shows" +msgstr "" + +msgctxt "#70047" +msgid " Search by director" +msgstr "" + +msgctxt "#70048" +msgid " My Account" +msgstr "" + +msgctxt "#70049" +msgid " Most Popular" +msgstr "" + +msgctxt "#70050" +msgid " Recommended Now" +msgstr "" + +msgctxt "#70051" +msgid " Most Anticipated " +msgstr "" + +msgctxt "#70052" +msgid " Custom recommendations" +msgstr "" + +msgctxt "#70053" +msgid " Most Viewed" +msgstr "" + +msgctxt "#70054" +msgid "Link your trakt account" +msgstr "" + +msgctxt "#70055" +msgid "Watchlists" +msgstr "" + +msgctxt "#70056" +msgid "Viewed" +msgstr "" + +msgctxt "#70057" +msgid "My lists" +msgstr "" + +msgctxt "#70058" +msgid "Top Series" +msgstr "" + +msgctxt "#70059" +msgid "Top Movies" +msgstr "" + +msgctxt "#70060" +msgid "Most Anticipated" +msgstr "" + +msgctxt "#70061" +msgid "Top Anime" +msgstr "" + +msgctxt "#70062" +msgid "Anime by Seasons" +msgstr "" + +msgctxt "#70063" +msgid "Anime by Genres" +msgstr "" + +msgctxt "#70064" +msgid "Search Tv Shows/Movies/Anime" +msgstr "" + +msgctxt "#70065" +msgid ">> Next Page" +msgstr "" + +msgctxt "#70066" +msgid " Search title in spanish: %s" +msgstr "" + +msgctxt "#70067" +msgid "Info Seasons [%s]" +msgstr "" + +msgctxt "#70068" +msgid "In my Collection" +msgstr "" + +msgctxt "#70069" +msgid "Search %s in icarus: %s" +msgstr "" + +msgctxt "#70070" +msgid " Search original title: %s" +msgstr "" + +msgctxt "#70071" +msgid "Cast" +msgstr "" + +msgctxt "#70072" +msgid " Most Viewed" +msgstr "" + +msgctxt "#70073" +msgid "Most Anticipated" +msgstr "" + +msgctxt "#70074" +msgid "Viewed" +msgstr "" + +msgctxt "#70075" +msgid "Most Anticipated" +msgstr "" + +msgctxt "#70076" +msgid "Top rated" +msgstr "" + +msgctxt "#70077" +msgid " Most Viewed" +msgstr "" + +msgctxt "#70078" +msgid "Show only links of " +msgstr "" + +msgctxt "#70079" +msgid "Remove only links of " +msgstr "" + +msgctxt "#70080" +msgid "Do you want Icarus to auto-configure Kodi's video library?" +msgstr "" + +msgctxt "#70081" +msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." +msgstr "" + +msgctxt "#70082" +msgid "Global Search" +msgstr "" + +msgctxt "#70083" +msgid "Show all links" +msgstr "" + +msgctxt "#70084" +msgid "Delete movie" +msgstr "" + +msgctxt "#70085" +msgid "Delete TV Show" +msgstr "" + +msgctxt "#70086" +msgid "Remove only links of %s" +msgstr "" + +msgctxt "#70087" +msgid "Deleted %s links from canal %s" +msgstr "" + +msgctxt "#70088" +msgid "Are you sure you want to delete '%s' from videolibrary ?" +msgstr "" + +msgctxt "#70089" +msgid "Show only links of %s" +msgstr "" + +msgctxt "#70090" +msgid " Exclude all streams with specific words" +msgstr "" + +msgctxt "#70091" +msgid " Words" +msgstr "" + +msgctxt "#70092" +msgid "Add to videolibrary" +msgstr "" + +msgctxt "#70093" +msgid "The Movie Database" +msgstr "" + +msgctxt "#70094" +msgid "Select scraper for movies" +msgstr "" + +msgctxt "#70095" +msgid "Universal Movie Scraper not present.\nInstall it now?" +msgstr "" + +msgctxt "#70096" +msgid "Universal Movie Scraper" +msgstr "" + +msgctxt "#70097" +msgid "Universal Movie Scraper not installed." +msgstr "" + +msgctxt "#70098" +msgid "The TVDB" +msgstr "" + +msgctxt "#70099" +msgid "The TVDB not installed." +msgstr "" + +msgctxt "#70100" +msgid "The Movie Database not present.\nInstall it now?" +msgstr "" + +msgctxt "#70101" +msgid "Error fixing videolibrarypath in BD" +msgstr "" + +msgctxt "#70102" +msgid "Videolibrary %s not configured" +msgstr "" + +msgctxt "#70103" +msgid "Videolibrary %s configured" +msgstr "" + +msgctxt "#70104" +msgid "Congratulations, the Kodi video library has been configured correctly." +msgstr "" + +msgctxt "#70105" +msgid "Do you want Icarus to automatically configure the Kodi library?You will be asked to set up scrapers for movies and series." +msgstr "" + +msgctxt "#70106" +msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." +msgstr "" + +msgctxt "#70107" +msgid "Select scraper for Tv Shows" +msgstr "" + +msgctxt "#70108" +msgid "Icons Set" +msgstr "" + +msgctxt "#70109" +msgid "Sync with Trakt.tv (You must have an account)" +msgstr "" + +msgctxt "#70110" +msgid "Priority Method" +msgstr "" + +msgctxt "#70111" +msgid "Stop looking when you find an option" +msgstr "" + +msgctxt "#70112" +msgid "Hide payment servers without an account" +msgstr "" + +msgctxt "#70113" +msgid "Password (default 0000)" +msgstr "" + +msgctxt "#70114" +msgid "Only until Kodi restarts" +msgstr "" + +msgctxt "#70115" +msgid "Request password to open adult channels" +msgstr "" + +msgctxt "#70116" +msgid "New password:" +msgstr "" + +msgctxt "#70117" +msgid "Confirm New password:" +msgstr "" + +msgctxt "#70118" +msgid "Folder name for 'Series'" +msgstr "" + +msgctxt "#70119" +msgid "Folder name for 'Movies'" +msgstr "" + +msgctxt "#70120" +msgid "Autoconfigure XBMC / Kodi library for Icarus content" +msgstr "" + +msgctxt "#70121" +msgid "Activate Home Page" +msgstr "" + +msgctxt "#70122" +msgid "Custom (select from a channel)" +msgstr "" + +msgctxt "#70123" +msgid "Show Recent" +msgstr "" + +msgctxt "#70124" +msgid "Category" +msgstr "" + +msgctxt "#70125" +msgid "Movie|Tv Shows|Anime|Children|Documentary|Horror|Castellan|Latin|Torrent" +msgstr "" + +msgctxt "#70126" +msgid "Visual Options" +msgstr "" + +msgctxt "#70127" +msgid "Anime" +msgstr "" + +msgctxt "#70128" +msgid "Infoplus visual option" +msgstr "" + +msgctxt "#70129" +msgid "Without animation" +msgstr "" + +msgctxt "#70130" +msgid "With animation" +msgstr "" + +msgctxt "#70131" +msgid "Thumbnail for videos" +msgstr "" + +msgctxt "#70132" +msgid "Poster" +msgstr "" + +msgctxt "#70133" +msgid "Server logo" +msgstr "" + +msgctxt "#70134" +msgid "Intelligent Titles" +msgstr "" + +msgctxt "#70135" +msgid "Custom Colours" +msgstr "" + +msgctxt "#70136" +msgid "Tv Show" +msgstr "" + +msgctxt "#70137" +msgid "Movie" +msgstr "" + +msgctxt "#70138" +msgid "Low Rating" +msgstr "" + +msgctxt "#70139" +msgid "Average Rating" +msgstr "" + +msgctxt "#70140" +msgid "High Rating" +msgstr "" + +msgctxt "#70141" +msgid "Quality" +msgstr "" + +msgctxt "#70142" +msgid "VOSE (Original Subtitled Spanish Version)" +msgstr "" + +msgctxt "#70143" +msgid "VOS (Original Subtitled Version)" +msgstr "" + +msgctxt "#70144" +msgid "VO (Original Version Originale)" +msgstr "" + +msgctxt "#70145" +msgid "Servers" +msgstr "" + +msgctxt "#70146" +msgid "Add to videolibrary" +msgstr "" + +msgctxt "#70147" +msgid "Videolibrary (Update series)" +msgstr "" + +msgctxt "#70148" +msgid "Videolibrary (Do not update series)" +msgstr "" + +msgctxt "#70149" +msgid "Others" +msgstr "" + +msgctxt "#70150" +msgid "Movie/series info in contextual menu" +msgstr "" + +msgctxt "#70151" +msgid "Show Infoplus option:" +msgstr "" + +msgctxt "#70152" +msgid "Show ExtendedInfo option (External addon required):" +msgstr "" + +msgctxt "#70153" +msgid "Buttons/Access keys (Changes require Kodi restart)" +msgstr "" + +msgctxt "#70154" +msgid "TheMovieDB (obtains data from movies or series)" +msgstr "" + +msgctxt "#70155" +msgid "Simultaneous searches (may cause instability)" +msgstr "" + +msgctxt "#70156" +msgid "Search extended information (actor's data) Increase search time" +msgstr "" + +msgctxt "#70157" +msgid "Use cache (improves recurring searches)" +msgstr "" + +msgctxt "#70158" +msgid "every 1 day" +msgstr "" + +msgctxt "#70159" +msgid "every 7 days" +msgstr "" + +msgctxt "#70160" +msgid "every 15 days" +msgstr "" + +msgctxt "#70161" +msgid "every 30 days" +msgstr "" + +msgctxt "#70162" +msgid "Renew cache?" +msgstr "" + +msgctxt "#70163" +msgid "Press to 'Clear cache' saved" +msgstr "" + +msgctxt "#70164" +msgid "Free First" +msgstr "" + +msgctxt "#70165" +msgid "Premium First" +msgstr "" + +msgctxt "#70166" +msgid "Debriders First" +msgstr "" + +msgctxt "#70167" +msgid "Titles Options" +msgstr "" + +msgctxt "#70168" +msgid "General" +msgstr "" + +msgctxt "#70169" +msgid "Servers use" +msgstr "" + +msgctxt "#70170" +msgid "No" +msgstr "" + +msgctxt "#70171" +msgid "Torrent" +msgstr "" + +msgctxt "#70172" +msgid " Plan B (If favourites fail try other links)" +msgstr "" + +msgctxt "#70173" +msgid "No working links" +msgstr "" + +msgctxt "#70174" +msgid "Server and Quality" +msgstr "" + +msgctxt "#70175" +msgid "Quality and Server" +msgstr "" + +msgctxt "#70176" +msgid "Wait" +msgstr "" + +msgctxt "#70177" +msgid "seconds for the video to start ..." +msgstr "" + +msgctxt "#70178" +msgid "Trying with: %s" +msgstr "" + +msgctxt "#70179" +msgid "Getting list of available servers ..." +msgstr "" + +msgctxt "#70180" +msgid "Connecting with %s..." +msgstr "" + +msgctxt "#70181" +msgid "Available servers: %s" +msgstr "" + +msgctxt "#70182" +msgid "Identifying servers ..." +msgstr "" + +msgctxt "#70183" +msgid "Getting list of available servers" +msgstr "" + +msgctxt "#70184" +msgid "Getting list of available servers:" +msgstr "" + +msgctxt "#70185" +msgid " chapters of: " +msgstr "" + +msgctxt "#70186" +msgid "Getting episodes..." +msgstr "" + +msgctxt "#70187" +msgid "connecting with %s..." +msgstr "" + +msgctxt "#70188" +msgid "Obtaining data from the series" +msgstr "" + +msgctxt "#70189" +msgid "Start the download now?" +msgstr "" + +msgctxt "#70190" +msgid "Add chapters..." +msgstr "" + +msgctxt "#70191" +msgid "Obtaining data from the movie" +msgstr "" + +msgctxt "#70192" +msgid "Select server" +msgstr "" + +msgctxt "#70193" +msgid "Open torrent with..." +msgstr "" + +msgctxt "#70194" +msgid "alfa-torrent" +msgstr "" + +msgctxt "#70195" +msgid "Alfa - Torrent" +msgstr "" + +msgctxt "#70196" +msgid "Beginning..." +msgstr "" + +msgctxt "#70197" +msgid "Automatically stopping at: %ss" +msgstr "" + +msgctxt "#70198" +msgid "Do you want to start playback?" +msgstr "" + +msgctxt "#70199" +msgid "Do you want to cancel the process?" +msgstr "" + +msgctxt "#70200" +msgid "Finishing and deleting data" +msgstr "" + +msgctxt "#70201" +msgid "Mass Testing Tools" +msgstr "" + +msgctxt "#70202" +msgid "- Test channels ..." +msgstr "" + +msgctxt "#70203" +msgid "- Test servers ..." +msgstr "" + +msgctxt "#70204" +msgid "- Test recent!" +msgstr "" + +msgctxt "#70205" +msgid "- Upload tests to web!" +msgstr "" + +msgctxt "#70206" +msgid "Link found in %s" +msgstr "" + +msgctxt "#70207" +msgid " - Movies 4K " +msgstr "" + +msgctxt "#70208" +msgid "Movies 4K" +msgstr "" + +msgctxt "#70209" +msgid "Horror movies!" +msgstr "" + +msgctxt "#70210" +msgid " (In %s and %s)" +msgstr "" + +msgctxt "#70211" +msgid " (In %s)" +msgstr "" + +msgctxt "#70212" +msgid " - Castellan" +msgstr "" + +msgctxt "#70213" +msgid " - Latin" +msgstr "" + +msgctxt "#70214" +msgid " - Torrent" +msgstr "" + +msgctxt "#70215" +msgid "TEST THIS CHANNEL" +msgstr "" + diff --git a/plugin.video.alfa/resources/language/Italian/strings.po b/plugin.video.alfa/resources/language/Italian/strings.po index 5b225250..44157204 100644 --- a/plugin.video.alfa/resources/language/Italian/strings.po +++ b/plugin.video.alfa/resources/language/Italian/strings.po @@ -3573,4 +3573,8 @@ msgctxt "#70214" msgid " - Torrent" msgstr " - Torrent" +msgctxt "#70215" +msgid "TEST THIS CHANNEL" +msgstr "TESTA QUESTO CANALE" + From 95a44eea1167166db498d9e1705e96ca4da26740 Mon Sep 17 00:00:00 2001 From: angedam Date: Mon, 18 Jun 2018 19:23:04 +0200 Subject: [PATCH 18/66] fix translation --- .../resources/language/English/strings.po | 3591 +---------------- .../resources/language/Italian/strings.po | 70 +- .../language/Spanish (Argentina)/strings.po | 136 +- .../language/Spanish (Mexico)/strings.po | 136 +- .../resources/language/Spanish/strings.po | 136 +- 5 files changed, 214 insertions(+), 3855 deletions(-) diff --git a/plugin.video.alfa/resources/language/English/strings.po b/plugin.video.alfa/resources/language/English/strings.po index 82f3ca5f..bec61536 100644 --- a/plugin.video.alfa/resources/language/English/strings.po +++ b/plugin.video.alfa/resources/language/English/strings.po @@ -13,21 +13,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.0.4\n" -"Last-Translator: M# Kodi Media Center language file -# strings 30000 thru 30999 reserved for plugins and plugin settings -# -msgid "" -msgstr "" -"Project-Id-Version: KODI Main\n" -"Report-Msgid-Bugs-To: http://trac.kodi.tv/\n" -"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" -"PO-Revision-Date: 2018-03-26 03:02+0200\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.0.4\n" "Last-Translator: MrTruth\n" "Last-Translator: Angedam\n" "Language: en_EN\n" @@ -310,6 +295,7 @@ msgstr "" msgctxt "#30984" msgid "Popular" + msgstr "" msgctxt "#30985" @@ -1481,7 +1467,7 @@ msgid "[COLOR yellow]Search in other channels[/COLOR]" msgstr "[COLOR yellow]Search in other channels[/COLOR]" msgctxt "#60351" -msgid msgid "[COLOR 0xffccff00]Set as Homepage[/COLOR]" +msgid "[COLOR 0xffccff00]Set as Homepage[/COLOR]" msgstr "" msgctxt "#60352" @@ -2820,7 +2806,6 @@ msgctxt "#70019" msgid "Documentary" msgstr "" - msgctxt "#70020" msgid "[COLOR yellow]Search similar[/COLOR]" msgstr "" @@ -3601,3578 +3586,6 @@ msgctxt "#70214" msgid " - Torrent" msgstr "" -rTruth\n" -"Last-Translator: Angedam\n" -"Language: en_EN\n" - -msgctxt "#20000" -msgid "Alfa" -msgstr "Alfa" - -msgctxt "#30001" -msgid "Check for updates:" -msgstr "Check for updates:" - -msgctxt "#30002" -msgid "Enable adult mode:" -msgstr "Enable adult mode:" - -msgctxt "#30003" -msgid "Enable debug logging:" -msgstr "Enable debug logging:" - -msgctxt "#30004" -msgid "Automatic update channels:" -msgstr "Automatic update channels:" - -msgctxt "#30005" -msgid "Default play setting:" -msgstr "Default play setting:" - -msgctxt "#30006" -msgid "Ask" -msgstr "Ask" - -msgctxt "#30007" -msgid "Watch in low quality" -msgstr "Watch in low quality" - -msgctxt "#30008" -msgid "Watch in high quality" -msgstr "Watch in high quality" - -msgctxt "#30010" -msgid "Channel icons view:" -msgstr "Channel icons view:" - -msgctxt "#30011" -msgid "Poster (vertical)" -msgstr "Poster (vertical)" - -msgctxt "#30012" -msgid "Banner (horizontal)" -msgstr "Banner (horizontal)" - -msgctxt "#30014" -msgid "Username:" -msgstr "Username:" - -msgctxt "#30015" -msgid "Password:" -msgstr "Password:" - -msgctxt "#30017" -msgid "Download path:" -msgstr "Download path:" - -msgctxt "#30018" -msgid "Download list path:" -msgstr "Download list path:" - -msgctxt "#30019" -msgid "Filter channels by language:" -msgstr "Filter channels by language:" - -msgctxt "#30043" -msgid "Force view mode:" -msgstr "Force view mode:" - -msgctxt "#30044" -msgid "Play mode:" -msgstr "Play mode:" - -msgctxt "#30050" -msgid "Server connection error" -msgstr "Server connection error" - -msgctxt "#30051" -msgid "Website error message (http code %d)" -msgstr "Website error message (http code %d)" - -msgctxt "#30055" -msgid "Video not available" -msgstr "Video not available" - -msgctxt "#30057" -msgid "The video has been removed from %s" -msgstr "The video has been removed from %s" - -msgctxt "#30058" -msgid "Try another server or channel" -msgstr "Try another server or channel" - -msgctxt "#30065" -msgid "Unsopported Server" -msgstr "Unsopported Server" - -msgctxt "#30067" -msgid "Videolibrary path:" -msgstr "Videolibrary path:" - -msgctxt "#30068" -msgid "Filter by servers:" -msgstr "Filter by servers:" - -msgctxt "#30100" -msgid "Settings" -msgstr "Settings" - -msgctxt "#30101" -msgid "Downloads" -msgstr "Downloads" - -msgctxt "#30102" -msgid "Favorites" -msgstr "Favorites" - -msgctxt "#30103" -msgid "Global search" -msgstr "Global search" - -msgctxt "#30104" -msgid "Help" -msgstr "Help" - -msgctxt "#30105" -msgid "Removed from favorites" -msgstr "Removed from favorites" - -msgctxt "#30108" -msgid "added to favorites" -msgstr "added to favorites" - -msgctxt "#30109" -msgid "added to download list" -msgstr "added to download list" - -msgctxt "#30112" -msgid "Enter title to search" -msgstr "Enter title to search" - -msgctxt "#30118" -msgid "Channels" -msgstr "Channels" - -msgctxt "#30119" -msgid "Choose a Category" -msgstr "Choose a Category" - -msgctxt "#30121" -msgid "All" -msgstr "All" - -msgctxt "#30122" -msgid "Movies" -msgstr "Movies" - -msgctxt "#30123" -msgid "TV Shows" -msgstr "TV Shows" - -msgctxt "#30124" -msgid "Anime" -msgstr "Anime" - -msgctxt "#30125" -msgid "Documentaries" -msgstr "Documentaries" - -msgctxt "#30126" -msgid "Adult" -msgstr "Adult" - -msgctxt "#30130" -msgid "Recent" -msgstr "Recent" - -msgctxt "#30131" -msgid "Videolibrary" -msgstr "Videolibrary" - -msgctxt "#30135" -msgid "added to the videolibrary" -msgstr "added to the videolibrary" - -msgctxt "#30136" -msgid "Original version" -msgstr "Original version" - -msgctxt "#30137" -msgid "Global Search" -msgstr "Global Search" - -msgctxt "#30151" -msgid "Watch the video" -msgstr "Watch the video" - -msgctxt "#30153" -msgid "Download" -msgstr "Download" - -msgctxt "#30154" -msgid "Remove from favorites" -msgstr "Remove from favorites" - -msgctxt "#30155" -msgid "Add to favorites" -msgstr "Add to favorites" - -msgctxt "#30161" -msgid "Add to videolibrary" -msgstr "Add to videolibrary" - -msgctxt "#30162" -msgid "Search for trailer" -msgstr "Search for trailer" - -msgctxt "#30163" -msgid "Choose an option" -msgstr "Choose an option" - -msgctxt "#30164" -msgid "Delete this file" -msgstr "Delete this file" - -msgctxt "#30200" -msgid "Square" -msgstr "Square" - -msgctxt "#30501" -msgid "Paths" -msgstr "Paths" - -msgctxt "#30974" -msgid "Search in Channels" -msgstr "Search in Channels" - -msgctxt "#30975" -msgid "Movie Info" -msgstr "Movie Info" - -msgctxt "#30976" -msgid "TVShows - Airing Today" -msgstr "TVShows - Airing Today" - -msgctxt "#30977" -msgid "Last Episodes - On-Air" -msgstr "Last Episodes - On-Air" - -msgctxt "#30978" -msgid "New TVShows" -msgstr "New TVShows" - -msgctxt "#30979" -msgid "Character Info" -msgstr "Character Info" - -msgctxt "#30980" -msgid "Search by Title" -msgstr "Search by Title" - -msgctxt "#30981" -msgid "Search by Person" -msgstr "Search by Person" - -msgctxt "#30982" -msgid "Search by Company" -msgstr "Search by Company" - -msgctxt "#30983" -msgid "Now Playing" -msgstr "Now Playing" - -msgctxt "#30984" -msgid "Popular" -msgstr "Popular" - -msgctxt "#30985" -msgid "Top Rated" -msgstr "Top Rated" - -msgctxt "#30986" -msgid "Search by Collection" -msgstr "Search by Collection" - -msgctxt "#30987" -msgid "Genre" -msgstr "Genre" - -msgctxt "#30988" -msgid "Search by Year" -msgstr "Search by Year" - -msgctxt "#30989" -msgid "Search Similar Movies" -msgstr "Search Similar Movies" - -msgctxt "#30990" -msgid "Search TV show" -msgstr "Search TV show" - -msgctxt "#30991" -msgid "Library" -msgstr "Library" - -msgctxt "#30992" -msgid "Next Page" -msgstr "Next Page" - -msgctxt "#30993" -msgid "Looking for %s..." -msgstr "Looking for %s..." - -msgctxt "#30994" -msgid "Searching in %s..." -msgstr "Searching in %s..." - -msgctxt "#30995" -msgid "%d found so far: %s" -msgstr "%d found so far: %s" - -msgctxt "#30996" -msgid "Most Voted" -msgstr "Most Voted" - -msgctxt "#30997" -msgid "Academy Awards" -msgstr "Academy Awards" - -msgctxt "#30998" -msgid "Shortcut" -msgstr "Shortcut" - -msgctxt "#30999" -msgid "Add key to open Shortcut" -msgstr "Add key to open Shortcut" - -msgctxt "#50000" -msgid "Sagas" -msgstr "Sagas" - -msgctxt "#50001" -msgid "Today on TV" -msgstr "Today on TV" - -msgctxt "#50002" -msgid "Latest News" -msgstr "Latest News" - -msgctxt "#50003" -msgid "Loading" -msgstr "Loading" - -msgctxt "#50004" -msgid "Path: " -msgstr "Path: " - -msgctxt "#59970" -msgid "Synchronization with Trakt started" -msgstr "Synchronization with Trakt started" - -msgctxt "#59971" -msgid "Alfa Auto-configuration" -msgstr "Alfa Auto-configuration" - -msgctxt "#59972" -msgid "Search for: '%s' | Found: %d vídeos | Time: %2.f seconds" -msgstr "Search for: '%s' | Found: %d vídeos | Time: %2.f seconds" - -msgctxt "#59973" -msgid "Search Cancelled" -msgstr "Search Cancelled" - -msgctxt "#59974" -msgid "Choose categories" -msgstr "Choose categories" - -msgctxt "#59975" -msgid "Subtitles" -msgstr "Subtitles" - -msgctxt "#59976" -msgid "Latin" -msgstr "Latin" - -msgctxt "#59977" -msgid "4k" -msgstr "4k" - -msgctxt "#59978" -msgid "horror" -msgstr "horror" - -msgctxt "#59979" -msgid "kids" -msgstr "kids" - -msgctxt "#59980" -msgid "Castilian" -msgstr "Castilian" - -msgctxt "#59981" -msgid "latin" -msgstr "latin" - -msgctxt "#59982" -msgid "torrent" -msgstr "torrent" - -msgctxt "#59983" -msgid "" -msgstr "" - -msgctxt "#59984" -msgid "An error has occurred in alfa, \nCheck log for more details." -msgstr "An error has occurred in alfa, \nCheck log for more details." - -msgctxt "#59985" -msgid "Error in the channel" -msgstr "Error in the channel" - -msgctxt "#59986" -msgid "Error loading the server: %s\n" -msgstr "Error loading the server: %s\n" - -msgctxt "#59987" -msgid "Start downloading now?" -msgstr "Start downloading now?" - -msgctxt "#59988" -msgid "Saving configuration..." -msgstr "Saving configuration..." - -msgctxt "#59989" -msgid "Please wait" -msgstr "Please wait" - -msgctxt "#59990" -msgid "Channels included in the search" -msgstr "Channels included in the search" - -msgctxt "#59991" -msgid "All" -msgstr "All" - -msgctxt "#59992" -msgid "None" -msgstr "None" - -msgctxt "#59993" -msgid "Configuration -- Search" -msgstr "Configuration -- Search" - -msgctxt "#59994" -msgid "Choose channels to include in your search" -msgstr "Choose channels to include in your search" - -msgctxt "#59995" -msgid "Saved Searches" -msgstr "Saved Searches" - -msgctxt "#59996" -msgid "Delete saved searches" -msgstr "Delete saved searches" - -msgctxt "#59997" -msgid "Options" -msgstr "Options" - -msgctxt "#59998" -msgid "Search by categories (advanced search)" -msgstr "Search by categories (advanced search)" - -msgctxt "#59999" -msgid "Search for actor/actress" -msgstr "Search for actor/actress" - -msgctxt "#60000" -msgid "Filtra server (Black List)" -msgstr "Filtra server (Black List)" - -msgctxt "#60001" -msgid "Filtra server (Black List)\nNessun collegamento disponibile che soddisfi i requisiti della Black list.\nRiprova modificando il filtro in 'Configurazione Server" -msgstr "Filtra server (Black List)\nNessun collegamento disponibile che soddisfi i requisiti della Black list.\nRiprova modificando il filtro in 'Configurazione Server" - -msgctxt "#60003" -msgid "Connessione con %s" -msgstr "Connessione con %s" - -msgctxt "#60004" -msgid "No connector for the server %s" -msgstr "No connector for the server %s" - -msgctxt "#60005" -msgid "Connecting with %s" -msgstr "Connecting with %s" - -msgctxt "#60006" -msgid "An error has occurred in %s" -msgstr "An error has occurred in %s" - -msgctxt "#60007" -msgid "An error has occurred on %s" -msgstr "An error has occurred on %s" - -msgctxt "#60008" -msgid "Process completed" -msgstr "Process completed" - -msgctxt "#60009" -msgid "To watch a vide on %s you need
an account on: %s" -msgstr "To watch a vide on %s you need
an account on: %s" - -msgctxt "#60010" -msgid "All available links belongs to server on your black list.\nDo you want to show these links?" -msgstr "All available links belongs to server on your black list.\nDo you want to show these links?" - -msgctxt "#60011" -msgid "Cache deleted" -msgstr "Cache deleted" - -msgctxt "#60012" -msgid "No video to play" -msgstr "No video to play" - -msgctxt "#60013" -msgid "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s.\nIf the web page is working correctly, please report the error on : https://alfa-addon.com/categories/alfa-addon.50/" -msgstr "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s.\nIf the web page is working correctly, please report the error on : https://alfa-addon.com/categories/alfa-addon.50/" - -msgctxt "#60014" -msgid "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of alfa.\nTo have more details, see the log file." -msgstr "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of alfa.\nTo have more details, see the log file." - -msgctxt "#60015" -msgid "Check the log for more details on the error." -msgstr "Check the log for more details on the error." - -msgctxt "#60016" -msgid "Segna film come non visto" -msgstr "Segna film come non visto" - -msgctxt "#60017" -msgid "Mark movie as not watched" -msgstr "Mark movie as not watched" - -msgctxt "#60018" -msgid "Delete movie/channel" -msgstr "Delete movie/channel" - -msgctxt "#60019" -msgid "Delete this movie" -msgstr "Delete this movie" - -msgctxt "#60020" -msgid "Mark tv series as not watched" -msgstr "Mark tv series as not watched" - -msgctxt "#60021" -msgid "Mark tv series as watched" -msgstr "Mark tv series as watched" - -msgctxt "#60022" -msgid "Automatically find new episodes: Disable" -msgstr "Automatically find new episodes: Disable" - -msgctxt "#60023" -msgid "Automatically find new episodes: Enable" -msgstr "Automatically find new episodes: Enable" - -msgctxt "#60024" -msgid "Delete tv series/channel" -msgstr "Delete tv series/channel" - -msgctxt "#60025" -msgid "Delete tv series" -msgstr "Delete tv series" - -msgctxt "#60026" -msgid "Search for new episodes and update" -msgstr "Search for new episodes and update" - -msgctxt "#60027" -msgid "Season %s" -msgstr "Season %s" - -msgctxt "#60028" -msgid "Segna stagione come non vista" -msgstr "Segna stagione come non vista" - -msgctxt "#60029" -msgid "Mark season as not watched" -msgstr "Mark season as not watched" - -msgctxt "#60030" -msgid "*All the seasons" -msgstr "*All the seasons" - -msgctxt "#60031" -msgid "Season %s Episode %s" -msgstr "Season %s Episode %s" - -msgctxt "#60032" -msgid "Mark episode as not watched" -msgstr "Mark episode as not watched" - -msgctxt "#60033" -msgid "Mark episode as watched" -msgstr "Mark episode as watched" - -msgctxt "#60034" -msgid "Show only link %s" -msgstr "Show only link %s" - -msgctxt "#60035" -msgid "Show all the links" -msgstr "Show all the links" - -msgctxt "#60036" -msgid "Episode %s" -msgstr "Episode %s" - -msgctxt "#60037" -msgid "Tv series update ..." -msgstr "Tv series update ..." - -msgctxt "#60038" -msgid "An error has occurred on alfa" -msgstr "An error has occurred on alfa" - -msgctxt "#60039" -msgid "Error on channel %s" -msgstr "Error on channel %s" - -msgctxt "#60040" -msgid "Delete movie" -msgstr "Delete movie" - -msgctxt "#60041" -msgid "Delete tv series" -msgstr "Delete tv series" - -msgctxt "#60042" -msgid "Delete only the links of %s" -msgstr "Delete only the links of %s" - -msgctxt "#60043" -msgid "Delete %s links of channel %s" -msgstr "Delete %s links of channel %s" - -msgctxt "#60044" -msgid "Do you want really to delete '%s' from videolibrary?" -msgstr "Do you want really to delete '%s' from videolibrary?" - -msgctxt "#60045" -msgid "Sync with Trakt started" -msgstr "Sync with Trakt started" - -msgctxt "#60046" -msgid "TheMovieDB not present.\nInstall it now?" -msgstr "TheMovieDB not present.\nInstall it now?" - -msgctxt "#60047" -msgid "The Movie Database is not installed." -msgstr "The Movie Database is not installed." - -msgctxt "#60048" -msgid "The TVDB not present.\nInstall it now?" -msgstr "The TVDB not present.\nInstall it now?" - -msgctxt "#60049" -msgid "The TVDB is not installed." -msgstr "The TVDB is not installed." - -msgctxt "#60050" -msgid "TheMovieDB not present.\nInstall it now?" -msgstr "TheMovieDB not present.\nInstall it now?" - -msgctxt "#60051" -msgid "The Movie Database is not installed." -msgstr "The Movie Database is not installed." - -msgctxt "#60052" -msgid "Error on setting LibraryPath in BD" -msgstr "Error on setting LibraryPath in BD" - -msgctxt "#60053" -msgid "Do you want to configure this scraper in italian as default option for the movies ?" -msgstr "Do you want to configure this scraper in italian as default option for the movies ?" - -msgctxt "#60054" -msgid "Do you want to configure this scraper in italian as default option for the tv series ?" -msgstr "Do you want to configure this scraper in italian as default option for the tv series ?" - -msgctxt "#60055" -msgid "Error of provider configuration in BD." -msgstr "Error of provider configuration in BD." - -msgctxt "#60056" -msgid "Videolibrary %s not configured" -msgstr "Videolibrary %s not configured" - -msgctxt "#60057" -msgid "Videolibrary %s configured" -msgstr "Videolibrary %s configured" - -msgctxt "#60058" -msgid "You need to restart Kodi for the changes to take effect." -msgstr "You need to restart Kodi for the changes to take effect." - -msgctxt "#60059" -msgid "Congratulations, Kodi's video library has been configured correctly." -msgstr "Congratulations, Kodi's video library has been configured correctly." - -msgctxt "#60060" -msgid "Alfa Auto-configuration" -msgstr "Alfa Auto-configuration" - -msgctxt "#60061" -msgid "Do you want Alfa to auto-configure Kodi's video library?\nIf you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." -msgstr "Do you want Alfa to auto-configure Kodi's video library?\nIf you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." - -msgctxt "#60062" -msgid "Adding movies to your video library..." -msgstr "Adding movies to your video library..." - -msgctxt "#60063" -msgid "Error in adding movies to your video library..." -msgstr "Error in adding movies to your video library..." - -msgctxt "#60064" -msgid "Adding Episodes to the Video Library..." -msgstr "Adding Episodes to the Video Library..." - -msgctxt "#60065" -msgid "Added Episode to Video Library..." -msgstr "Added Episode to Video Library..." - -msgctxt "#60066" -msgid "ERROR, It has NOT been possible to add the video to the video library" -msgstr "ERROR, It has NOT been possible to add the video to the video library" - -msgctxt "#60067" -msgid "ERROR, tv series has NOT been added to videolibrary\nIt has NOT been possible to add no episode" -msgstr "ERROR, tv series has NOT been added to videolibrary\nIt has NOT been possible to add no episode" - -msgctxt "#60068" -msgid "ERROR, tv series has NOT been added to videolibrary" -msgstr "ERROR, tv series has NOT been added to videolibrary" - -msgctxt "#60069" -msgid "ERRORE, tv series has NOT been added completely to videolibrary" -msgstr "ERRORE, tv series has NOT been added completely to videolibrary" - -msgctxt "#60070" -msgid "tv series has been added to videolibrary" -msgstr "tv series has been added to videolibrary" - -msgctxt "#60071" -msgid "Autoplay Configuration" -msgstr "Autoplay Configuration" - -msgctxt "#60072" -msgid "It seems that links of %s are not working." -msgstr "It seems that links of %s are not working." - -msgctxt "#60073" -msgid "Do you want to ignore all the links from this server?" -msgstr "Do you want to ignore all the links from this server?" - -msgctxt "#60074" -msgid "It's not possible to use AutoPlay" -msgstr "It's not possible to use AutoPlay" - -msgctxt "#60075" -msgid "No coincidence" -msgstr "No coincidence" - -msgctxt "#60076" -msgid "New quality/server available in configuration" -msgstr "New quality/server available in configuration" - -msgctxt "#60077" -msgid "AutoPlay initialization error" -msgstr "AutoPlay initialization error" - -msgctxt "#60078" -msgid "View the log for more information." -msgstr "View the log for more information." - -msgctxt "#60079" -msgid "AutoPlay (Turns AutoPlay On/Off)" -msgstr "AutoPlay (Turns AutoPlay On/Off)" - -msgctxt "#60080" -msgid "AutoPlay Language (Optional)" -msgstr "AutoPlay Language (Optional)" - -msgctxt "#60081" -msgid " Favorite servers" -msgstr " Favorite servers" - -msgctxt "#60082" -msgid " \u2665 Favorite server %s" -msgstr " \u2665 Favorite server %s" - -msgctxt "#60083" -msgid " Preferred Qualities" -msgstr " Preferred Qualities" - -msgctxt "#60084" -msgid " \u2665 Preferred Quality %s" -msgstr " \u2665 Preferred Quality %s" - -msgctxt "#60085" -msgid " Priority (Indicates the order for AutoPlay)" -msgstr " Priority (Indicates the order for AutoPlay)" - -msgctxt "#60086" -msgid "It has been renamed to:" -msgstr "It has been renamed to:" - -msgctxt "#60087" -msgid "Unexpected error on channel %s" -msgstr "Unexpected error on channel %s" - -msgctxt "#60088" -msgid "Enter URL" -msgstr "Enter URL" - -msgctxt "#60089" -msgid "Enter the URL [Link to server / download]" -msgstr "Enter the URL [Link to server / download]" - -msgctxt "#60090" -msgid "Enter the URL [Direct link to video]." -msgstr "Enter the URL [Direct link to video]." - -msgctxt "#60091" -msgid "Enter the URL [Search for links in a URL]" -msgstr "Enter the URL [Search for links in a URL]" - -msgctxt "#60092" -msgid "View Direct URL" -msgstr "View Direct URL" - -msgctxt "#60093" -msgid "There is no compatible video in this URL" -msgstr "There is no compatible video in this URL" - -msgctxt "#60200" -msgid "Download..." -msgstr "Download..." - -msgctxt "#60201" -msgid "Download starting..." -msgstr "Download starting..." - -msgctxt "#60202" -msgid "Remaining time: %s" -msgstr "Remaining time: %s" - -msgctxt "#60203" -msgid "Downloader %s/%s" -msgstr "Downloader %s/%s" - -msgctxt "#60204" -msgid "Speed Meter" -msgstr "Speed Meter" - -msgctxt "#60205" -msgid "File Writer" -msgstr "File Writer" - -msgctxt "#60206" -msgid "plugin" -msgstr "plugin" - -msgctxt "#60207" -msgid "Download..." -msgstr "Download..." - -msgctxt "#60208" -msgid "You can't download this video" -msgstr "You can't download this video" - -msgctxt "#60209" -msgid "RTMP downloads are not" -msgstr "RTMP downloads are not" - -msgctxt "#60210" -msgid "still supported" -msgstr "still supported" - -msgctxt "#60211" -msgid "Missing %s" -msgstr "Missing %s" - -msgctxt "#60212" -msgid "Check that rtmpdump is installed" -msgstr "Check that rtmpdump is installed" - -msgctxt "#60213" -msgid "The RTMP download option is experimental" -msgstr "The RTMP download option is experimental" - -msgctxt "#60214" -msgid "and the video will be downloaded in the background." -msgstr "and the video will be downloaded in the background." - -msgctxt "#60215" -msgid "No progress bar will be displayed." -msgstr "No progress bar will be displayed." - -msgctxt "#60216" -msgid "addon" -msgstr "addon" - -msgctxt "#60217" -msgid "Download..." -msgstr "Download..." - -msgctxt "#60218" -msgid "%.2fMB/%.2fMB (%d%%) %.2f Kb/s %s missing " -msgstr "%.2fMB/%.2fMB (%d%%) %.2f Kb/s %s missing " - -msgctxt "#60219" -msgid "Copying the file" -msgstr "Copying the file" - -msgctxt "#60220" -msgid "Error while deleting the file" -msgstr "Error while deleting the file" - -msgctxt "#60221" -msgid "Error while deleting the directory" -msgstr "Error while deleting the directory" - -msgctxt "#60222" -msgid "Error while creating the directory" -msgstr "Error while creating the directory" - -msgctxt "#60223" -msgid "Enter another name" -msgstr "Enter another name" - -msgctxt "#60224" -msgid "Complete information" -msgstr "Complete information" - -msgctxt "#60225" -msgid "Search in TheMovieDB.org" -msgstr "Search in TheMovieDB.org" - -msgctxt "#60226" -msgid "Search in TheTvDB.org" -msgstr "Search in TheTvDB.org" - -msgctxt "#60227" -msgid "Identifier not found for: %s" -msgstr "Identifier not found for: %s" - -msgctxt "#60228" -msgid "No information found for: %s" -msgstr "No information found for: %s" - -msgctxt "#60229" -msgid "Enter the name of %s to search" -msgstr "Enter the name of %s to search" - -msgctxt "#60230" -msgid "Title:" -msgstr "Title:" - -msgctxt "#60231" -msgid "Original title" -msgstr "Original title" - -msgctxt "#60232" -msgid "Year" -msgstr "Year" - -msgctxt "#60233" -msgid "Identifiers:" -msgstr "Identifiers:" - -msgctxt "#60234" -msgid " The Movie Database ID" -msgstr " The Movie Database ID" - -msgctxt "#60235" -msgid " URL Tmdb" -msgstr " URL Tmdb" - -msgctxt "#60236" -msgid " The TVDB ID" -msgstr " The TVDB ID" - -msgctxt "#60237" -msgid " URL TVDB" -msgstr " URL TVDB" - -msgctxt "#60238" -msgid " IMDb ID" -msgstr " IMDb ID" - -msgctxt "#60239" -msgid " Other ID" -msgstr " Other ID" - -msgctxt "#60240" -msgid "Images(urls):" -msgstr "Images(urls):" - -msgctxt "#60241" -msgid " Background" -msgstr " Background" - -msgctxt "#60242" -msgid " Thumbnail" -msgstr " Thumbnail" - -msgctxt "#60243" -msgid "Type of content" -msgstr "Type of content" - -msgctxt "#60244" -msgid "Movie" -msgstr "Movie" - -msgctxt "#60245" -msgid "Series" -msgstr "Series" - -msgctxt "#60246" -msgid "Full information" -msgstr "Full information" - -msgctxt "#60247" -msgid "[%s]: Select the correct %s" -msgstr "[%s]: Select the correct %s" - -msgctxt "#60248" -msgid "Login to this page: %s" -msgstr "Login to this page: %s" - -msgctxt "#60249" -msgid "Enter this code and accept: %s" -msgstr "Enter this code and accept: %s" - -msgctxt "#60250" -msgid "Once done, click here!" -msgstr "Once done, click here!" - -msgctxt "#60251" -msgid "Synchronize with Trakt. Do not close this window" -msgstr "Synchronize with Trakt. Do not close this window" - -msgctxt "#60252" -msgid "1. Enter the following URL: %s" -msgstr "1. Enter the following URL: %s" - -msgctxt "#60253" -msgid "2. Enter this code on the page and accept: %s" -msgstr "2. Enter this code on the page and accept: %s" - -msgctxt "#60254" -msgid "3. Wait until this window closes" -msgstr "3. Wait until this window closes" - -msgctxt "#60255" -msgid "Successfully completed" -msgstr "Successfully completed" - -msgctxt "#60256" -msgid "Account linked correctly" -msgstr "Account linked correctly" - -msgctxt "#60257" -msgid "Error" -msgstr "Error" - -msgctxt "#60258" -msgid "Problem in the connection process" -msgstr "Problem in the connection process" - -msgctxt "#60259" -msgid "Account linked correctly" -msgstr "Account linked correctly" - -msgctxt "#60260" -msgid "Problem in the connection process" -msgstr "Problem in the connection process" - -msgctxt "#60261" -msgid "Alfa" -msgstr "Alfa" - -msgctxt "#60262" -msgid "You can install the Trakt script below, once installed and configured what you see will be automatically synchronized with your account." -msgstr "You can install the Trakt script below, once installed and configured what you see will be automatically synchronized with your account." - -msgctxt "#60263" -msgid "Do you want to continue?" -msgstr "Do you want to continue?" - -msgctxt "#60264" -msgid "In progress" -msgstr "In progress" - -msgctxt "#60265" -msgid "Completed" -msgstr "Completed" - -msgctxt "#60266" -msgid "Action" -msgstr "Action" - -msgctxt "#60267" -msgid "Adventure" -msgstr "Adventure" - -msgctxt "#60268" -msgid "Animation" -msgstr "Animation" - -msgctxt "#60269" -msgid "Kids" -msgstr "Kids" - -msgctxt "#60270" -msgid "Comedy" -msgstr "Comedy" - -msgctxt "#60271" -msgid "Crime" -msgstr "Crime" - -msgctxt "#60272" -msgid "Documentaries" -msgstr "Documentaries" - -msgctxt "#60273" -msgid "Family" -msgstr "Family" - -msgctxt "#60274" -msgid "Fantasy" -msgstr "Fantasy" - -msgctxt "#60275" -msgid "Cooking" -msgstr "Cooking" - -msgctxt "#60276" -msgid "Contests" -msgstr "Contests" - -msgctxt "#60277" -msgid "Home and garden" -msgstr "Home and garden" - -msgctxt "#60278" -msgid "Mistery" -msgstr "Mistery" - -msgctxt "#60279" -msgid "News" -msgstr "News" - -msgctxt "#60280" -msgid "Romantic" -msgstr "Romantic" - -msgctxt "#60281" -msgid "Science fiction" -msgstr "Science fiction" - -msgctxt "#60282" -msgid "Soap Opera" -msgstr "Soap Opera" - -msgctxt "#60283" -msgid "Sport" -msgstr "Sport" - -msgctxt "#60284" -msgid "Talk Show" -msgstr "Talk Show" - -msgctxt "#60285" -msgid "Travels" -msgstr "Travels" - -msgctxt "#60286" -msgid "Pre-child audience: children under 6 years" -msgstr "Pre-child audience: children under 6 years" - -msgctxt "#60287" -msgid "Child audience: from 7 years old" -msgstr "Child audience: from 7 years old" - -msgctxt "#60288" -msgid "General audience: without family control" -msgstr "General audience: without family control" - -msgctxt "#60289" -msgid "Parental control" -msgstr "Parental control" - -msgctxt "#60290" -msgid "More than 14 years old" -msgstr "More than 14 years old" - -msgctxt "#60291" -msgid "More than 17 years old" -msgstr "More than 17 years old" - -msgctxt "#60292" -msgid "Searching for TV Series Information" -msgstr "Searching for TV Series Information" - -msgctxt "#60293" -msgid "Please wait..." -msgstr "Please wait..." - -msgctxt "#60294" -msgid "Searching for TV Series Information" -msgstr "Searching for TV Series Information" - -msgctxt "#60295" -msgid "Loading results..." -msgstr "Loading results..." - -msgctxt "#60296" -msgid "Searching for TV Series Information" -msgstr "Searching for TV Series Information" - -msgctxt "#60297" -msgid "Find %s possible matches" -msgstr "Find %s possible matches" - -msgctxt "#60298" -msgid "[%s]: Select the correct TV series" -msgstr "[%s]: Select the correct TV series" - -msgctxt "#60299" -msgid "Not found in the language '%s'" -msgstr "Not found in the language '%s'" - -msgctxt "#60300" -msgid "Search in language 'en'" -msgstr "Search in language 'en'" - -msgctxt "#60301" -msgid "Not found in the language '%s'" -msgstr "Not found in the language '%s'" - -msgctxt "#60302" -msgid "Search in language 'en'" -msgstr "Search in language 'en'" - -msgctxt "#60303" -msgid "The file already exists" -msgstr "The file already exists" - -msgctxt "#60304" -msgid "The unzipped %s file already exists, or you want to overwrite it.?" -msgstr "The unzipped %s file already exists, or you want to overwrite it.?" - -msgctxt "#60305" -msgid "Adult channels" -msgstr "Adult channels" - -msgctxt "#60306" -msgid "The fields 'New password' and 'Confirm new password' do not match" -msgstr "The fields 'New password' and 'Confirm new password' do not match" - -msgctxt "#60307" -msgid "Use 'Preferences' to change your password" -msgstr "Use 'Preferences' to change your password" - -msgctxt "#60308" -msgid "Adult channels" -msgstr "Adult channels" - -msgctxt "#60309" -msgid "The password is not correct." -msgstr "The password is not correct." - -msgctxt "#60310" -msgid "Changes made in this section will not be saved." -msgstr "Changes made in this section will not be saved." - -msgctxt "#60311" -msgid "Download..." -msgstr "Download..." - -msgctxt "#60312" -msgid "Close this window to start playback" -msgstr "Close this window to start playback" - -msgctxt "#60313" -msgid "Cancel this window to start playback" -msgstr "Cancel this window to start playback" - -msgctxt "#60314" -msgid "Speed: " -msgstr "Speed: " - -msgctxt "#60315" -msgid " KB/s " -msgstr " KB/s " - -msgctxt "#60316" -msgid "MB of " -msgstr "MB of " - -msgctxt "#60317" -msgid "MB" -msgstr "MB" - -msgctxt "#60318" -msgid "Remaining time: " -msgstr "Remaining time: " - -msgctxt "#60319" -msgid "Cancelled" -msgstr "Cancelled" - -msgctxt "#60320" -msgid "Download in background cancelled" -msgstr "Download in background cancelled" - -msgctxt "#60321" -msgid "Press the button to be used to open the window" -msgstr "Press the button to be used to open the window" - -msgctxt "#60322" -msgid "You have %s seconds" -msgstr "You have %s seconds" - -msgctxt "#60323" -msgid "Press the button to be used to open the window" -msgstr "Press the button to be used to open the window" - -msgctxt "#60324" -msgid "You have %s seconds" -msgstr "You have %s seconds" - -msgctxt "#60325" -msgid "Saved key" -msgstr "Saved key" - -msgctxt "#60326" -msgid "Restart Kodi to apply changes" -msgstr "Restart Kodi to apply changes" - -msgctxt "#60327" -msgid "Novelties" -msgstr "Novelties" - -msgctxt "#60328" -msgid "Channels" -msgstr "Channels" - -msgctxt "#60329" -msgid "Search" -msgstr "Search" - -msgctxt "#60330" -msgid "Favorites" -msgstr "Favorites" - -msgctxt "#60331" -msgid "Videolibrary" -msgstr "Videolibrary" - -msgctxt "#60332" -msgid "Downloads" -msgstr "Downloads" - -msgctxt "#60333" -msgid "Configuration" -msgstr "Configuration" - -msgctxt "#60334" -msgid "Password for adult channels" -msgstr "Password for adult channels" - -msgctxt "#60335" -msgid "Watch in" -msgstr "Watch in" - -msgctxt "#60336" -msgid "Download in" -msgstr "Download in" - -msgctxt "#60337" -msgid "alfa-MCT: No support adf.ly" -msgstr "alfa-MCT: No support adf.ly" - -msgctxt "#60338" -msgid "The script does not support URL reduction adf.ly." -msgstr "The script does not support URL reduction adf.ly." - -msgctxt "#60339" -msgid "Nothing to Play" -msgstr "Nothing to Play" - -msgctxt "#60342" -msgid "Download completed: " -msgstr "Download completed: " - -msgctxt "#60343" -msgid "BMC-Kodi has closed the video." -msgstr "BMC-Kodi has closed the video." - -msgctxt "#60344" -msgid "Continue with the session?" -msgstr "Continue with the session?" - -msgctxt "#60345" -msgid "alfa-MCT: List of videos" -msgstr "alfa-MCT: List of videos" - -msgctxt "#60346" -msgid "Delete video downloads" -msgstr "Delete video downloads" - -msgctxt "#60347" -msgid "No items to display" -msgstr "No items to display" - -msgctxt "#60348" -msgid "Information" -msgstr "Information" - -msgctxt "#60349" -msgid "Go to the Main Menu" -msgstr "Go to the Main Menu" - -msgctxt "#60350" -msgid "Search in other channels" -msgstr "Search in other channels" - -msgctxt "#60351" -msgid "Set as homepage" -msgstr "Set as homepage" - -msgctxt "#60352" -msgid "Add TV Series to Videolibrary" -msgstr "Add TV Series to Videolibrary" - -msgctxt "#60353" -msgid "Add Movie to Videolibrary" -msgstr "Add Movie to Videolibrary" - -msgctxt "#60354" -msgid "Download Movie" -msgstr "Download Movie" - -msgctxt "#60355" -msgid "Download TV Series" -msgstr "Download TV Series" - -msgctxt "#60356" -msgid "Download Episode" -msgstr "Download Episode" - -msgctxt "#60357" -msgid "Download Season" -msgstr "Download Season" - -msgctxt "#60358" -msgid "Open Configuration" -msgstr "Open Configuration" - -msgctxt "#60359" -msgid "Search Trailer" -msgstr "Search Trailer" - -msgctxt "#60360" -msgid "" -msgstr "" - -msgctxt "#60361" -msgid "Super Favourites Menu" -msgstr "Super Favourites Menu" - -msgctxt "#60362" -msgid "You can't watch this video because..." -msgstr "You can't watch this video because..." - -msgctxt "#60363" -msgid "The server on which it is hosted" -msgstr "The server on which it is hosted" - -msgctxt "#60364" -msgid "is not yet supported in Alfa" -msgstr "is not yet supported in Alfa" - -msgctxt "#60365" -msgid "Loading video..." -msgstr "Loading video..." - -msgctxt "#60366" -msgid "External plugin: %s" -msgstr "External plugin: %s" - -msgctxt "#60376" -msgid "Video information" -msgstr "Video information" - -msgctxt "#60377" -msgid "Title:" -msgstr "Title:" - -msgctxt "#60378" -msgid "Original Title:" -msgstr "Original Title:" - -msgctxt "#60379" -msgid "Original language:" -msgstr "Original language:" - -msgctxt "#60380" -msgid "Score:" -msgstr "Score:" - -msgctxt "#60381" -msgid "Release:" -msgstr "Release:" - -msgctxt "#60382" -msgid "Genres:" -msgstr "Genres:" - -msgctxt "#60383" -msgid "Series:" -msgstr "Series:" - -msgctxt "#60384" -msgid "Season title:" -msgstr "Season title:" - -msgctxt "#60385" -msgid "Season:" -msgstr "Season:" - -msgctxt "#60386" -msgid "Episode:" -msgstr "Episode:" - -msgctxt "#60387" -msgid "Emission:" -msgstr "Emission:" - -msgctxt "#60388" -msgid "Summary:" -msgstr "Summary:" - -msgctxt "#60389" -msgid "Videolibrary update...." -msgstr "Videolibrary update...." - -msgctxt "#60390" -msgid "AutoPlay Configuration" -msgstr "AutoPlay Configuration" - -msgctxt "#60391" -msgid "AutoPlay" -msgstr "AutoPlay" - -msgctxt "#60392" -msgid "\n\n\nTotal Reset of the addon %s.\n\n[COLOR red]Attention This function completely resets the addon.[/COLOR]" -msgstr "\n\n\nTotal Reset of the addon %s.\n\n[COLOR red]Attention This function completely resets the addon.[/COLOR]" - -msgctxt "#60393" -msgid "[COLOR red]Reset %s[/COLOR]" -msgstr "[COLOR red]Reset %s[/COLOR]" - -msgctxt "#60394" -msgid "Reset %s" -msgstr "Reset %s" - -msgctxt "#60395" -msgid "Are you sure you want to reset all settings of %s ?" -msgstr "Are you sure you want to reset all settings of %s ?" - -msgctxt "#60396" -msgid "Cancel" -msgstr "Cancel" - -msgctxt "#60397" -msgid "Confirm" -msgstr "Confirm" - -msgctxt "#60398" -msgid " Settings Reset was successful!" -msgstr " Settings Reset was successful!" - -msgctxt "#60399" -msgid "AutoPlay allows you to auto play links directly, based on your server settings and preferred qualities. " -msgstr "AutoPlay allows you to auto play links directly, based on your server settings and preferred qualities. " - -msgctxt "#60400" -msgid "512 Mega" -msgstr "512 Mega" - -msgctxt "#60401" -msgid "1 Gb" -msgstr "1 Gb" - -msgctxt "#60402" -msgid "2 Gb" -msgstr "2 Gb" - -msgctxt "#60403" -msgid "more than 2 Gb" -msgstr "more than 2 Gb" - -msgctxt "#60404" -msgid "Choose cache setting" -msgstr "Choose cache setting" - -msgctxt "#60405" -msgid "\n[COLOR orange]Cache Set for 512 Mega RAM[/COLOR]" -msgstr "\n[COLOR orange]Cache Set for 512 Mega RAM[/COLOR]" - -msgctxt "#60406" -msgid "\n[COLOR orange]Cache Set for 1 Gb RAM[/COLOR]" -msgstr "\n[COLOR orange]Cache Set for 1 Gb RAM[/COLOR]" - -msgctxt "#60407" -msgid "\n[COLOR orange]Cache Set for 2 Gb RAM[/COLOR]" -msgstr "\n[COLOR orange]Cache Set for 2 Gb RAM[/COLOR]" - -msgctxt "#60408" -msgid "\n[COLOR orange]Cache Set higher than 2 Gb of RAM[/COLOR]" -msgstr "\n[COLOR orange]Cache Set higher than 2 Gb of RAM[/COLOR]" - -msgctxt "#60409" -msgid "plugin" -msgstr "plugin" - -msgctxt "#60410" -msgid "An advancedsettings.xml file has been created" -msgstr "An advancedsettings.xml file has been created" - -msgctxt "#60411" -msgid "with the ideal streaming configuration." -msgstr "with the ideal streaming configuration." - -msgctxt "#60412" -msgid "Choose channels to include" -msgstr "Choose channels to include" - -msgctxt "#60413" -msgid "[COLOR yellow]New Movie Search...[/COLOR]" -msgstr "[COLOR yellow]New Movie Search...[/COLOR]" - -msgctxt "#60414" -msgid "[COLOR yellow]New search tv series...[/COLOR]" -msgstr "[COLOR yellow]New search tv series...[/COLOR]" - -msgctxt "#60415" -msgid "[COLOR green]Other settings[/COLOR]" -msgstr "[COLOR green]Other settings[/COLOR]" - -msgctxt "#60416" -msgid "Delete saved searches" -msgstr "Delete saved searches" - -msgctxt "#60417" -msgid "[COLOR red]Delete search history[/COLOR]" -msgstr "[COLOR red]Delete search history[/COLOR]" - -msgctxt "#60418" -msgid "Choose channels to include in your search" -msgstr "Choose channels to include in your search" - -msgctxt "#60419" -msgid "Delete saved searches" -msgstr "Delete saved searches" - -msgctxt "#60420" -msgid "More Options" -msgstr "More Options" - -msgctxt "#60421" -msgid "Channels included in the global search " -msgstr "Channels included in the global search " - -msgctxt "#60422" -msgid "Search " -msgstr "Search " - -msgctxt "#60423" -msgid "Search" -msgstr "Search" - -msgctxt "#60424" -msgid "Searches key have been deleted correctly" -msgstr "Searches key have been deleted correctly" - -msgctxt "#60425" -msgid "Channel search" -msgstr "Channel search" - -msgctxt "#60426" -msgid "FILTER: Configure" -msgstr "FILTER: Configure" - -msgctxt "#60427" -msgid "FILTER: Adding '%s'" -msgstr "FILTER: Adding '%s'" - -msgctxt "#60428" -msgid "FILTER: Delete '%s'" -msgstr "FILTER: Delete '%s'" - -msgctxt "#60429" -msgid "[COLOR %s]Filter configuration for TV series...[/COLOR]" -msgstr "[COLOR %s]Filter configuration for TV series...[/COLOR]" - -msgctxt "#60430" -msgid "FILTRO: Delete '%s'" -msgstr "FILTRO: Delete '%s'" - -msgctxt "#60431" -msgid " and quality %s" -msgstr " and quality %s" - -msgctxt "#60432" -msgid "[COLOR %s]No results in this language '%s'%s, click to show without filter[/COLOR]" -msgstr "[COLOR %s]No results in this language '%s'%s, click to show without filter[/COLOR]" - -msgctxt "#60433" -msgid " (disabled)" -msgstr " (disabled)" - -msgctxt "#60434" -msgid "Configure [COLOR %s][%s][/COLOR]%s" -msgstr "Configure [COLOR %s][%s][/COLOR]%s" - -msgctxt "#60435" -msgid "There are no filters, search for a TV series and click on the context menu 'FILTER: Configure'" -msgstr "There are no filters, search for a TV series and click on the context menu 'FILTER: Configure'" - -msgctxt "#60436" -msgid "Spanish" -msgstr "Spanish" - -msgctxt "#60437" -msgid "Delete" -msgstr "Delete" - -msgctxt "#60438" -msgid "¿Enable / disable filter?" -msgstr "¿Enable / disable filter?" - -msgctxt "#60439" -msgid "Language" -msgstr "Language" - -msgctxt "#60440" -msgid "Permitted quality" -msgstr "Permitted quality" - -msgctxt "#60441" -msgid "Filter links for: [COLOR %s]%s[/COLOR]" -msgstr "Filter links for: [COLOR %s]%s[/COLOR]" - -msgctxt "#60442" -msgid "Are you sure you want to delete the filter?" -msgstr "Are you sure you want to delete the filter?" - -msgctxt "#60443" -msgid "Click 'Yes' to remove the filter from [COLOR %s]%s[/COLOR], click 'No' or close the window to do nothing." -msgstr "Click 'Yes' to remove the filter from [COLOR %s]%s[/COLOR], click 'No' or close the window to do nothing." - -msgctxt "#60444" -msgid "FILTER DELETED" -msgstr "FILTER DELETED" - -msgctxt "#60445" -msgid "Error on saving on disk" -msgstr "Error on saving on disk" - -msgctxt "#60446" -msgid "FILTER SAVED" -msgstr "FILTER SAVED" - -msgctxt "#60447" -msgid "FAQ:" -msgstr "FAQ:" - -msgctxt "#60448" -msgid " - How do I report an error?" -msgstr " - How do I report an error?" - -msgctxt "#60449" -msgid " - Is it possible to enable/disable channels?" -msgstr " - Is it possible to enable/disable channels?" - -msgctxt "#60450" -msgid " - Is automatic synchronization with Trakt possible?" -msgstr " - Is automatic synchronization with Trakt possible?" - -msgctxt "#60451" -msgid " - Is it possible to show all the results together in the global search?" -msgstr " - Is it possible to show all the results together in the global search?" - -msgctxt "#60452" -msgid " - Links take too long to appear." -msgstr " - Links take too long to appear." - -msgctxt "#60453" -msgid " - The content search is not performed correctly." -msgstr " - The content search is not performed correctly." - -msgctxt "#60454" -msgid " - Some channels do not function properly." -msgstr " - Some channels do not function properly." - -msgctxt "#60455" -msgid " - The library does not update correctly." -msgstr " - The library does not update correctly." - -msgctxt "#60456" -msgid " - Links of interest" -msgstr " - Links of interest" - -msgctxt "#60457" -msgid "Alfa" -msgstr "Alfa" - -msgctxt "#60458" -msgid "The disabling can be done in 'Settings>Turn on/off channels'. You can toggle channels on/off one at a time or all at the same time. Want to manage your channels now?" -msgstr "The disabling can be done in 'Settings>Turn on/off channels'. You can toggle channels on/off one at a time or all at the same time. Want to manage your channels now?" - -msgctxt "#60459" -msgid "Currently it is possible to activate the synchronization (silent) after having marked an episode as 'as watched' (this happens automatically). This option can be enabled in 'Settings>Library Settings'. Do you want access to these settings?" -msgstr "Currently it is possible to activate the synchronization (silent) after having marked an episode as 'as watched' (this happens automatically). This option can be enabled in 'Settings>Library Settings'. Do you want access to these settings?" - -msgctxt "#60460" -msgid "This can be improved by limiting the maximum number of links or by displaying them in a Pop-Up window. These settings can be found in 'Settings>Library Settings' Do you want to access these settings?" -msgstr "This can be improved by limiting the maximum number of links or by displaying them in a Pop-Up window. These settings can be found in 'Settings>Library Settings' Do you want to access these settings?" - -msgctxt "#60461" -msgid "Alfa - FAQ - %s" -msgstr "Alfa - FAQ - %s" - -msgctxt "#60462" -msgid "You may not have written the library path correctly in 'Settings>Preferences'.\nIl The specified path must be exactly the same as the 'source' entered in 'Archive' of the Kodi library.\nAVANZATO: This path is also found in 'sources.xml'.\nThere can be problems using some Kodi forks and paths with 'special://'. SPMC, for example, has problems with this, and there doesn't seem to be a solution, as it is an external problem to Alfa that has existed for a long time.\nYou can try solving these problems in 'Settings>Library Settings' by changing the 'Search in' setting from 'The folder of each series' to 'All library'." -msgstr "You may not have written the library path correctly in 'Settings>Preferences'.\nIl The specified path must be exactly the same as the 'source' entered in 'Archive' of the Kodi library.\nAVANZATO: This path is also found in 'sources.xml'.\nThere can be problems using some Kodi forks and paths with 'special://'. SPMC, for example, has problems with this, and there doesn't seem to be a solution, as it is an external problem to Alfa that has existed for a long time.\nYou can try solving these problems in 'Settings>Library Settings' by changing the 'Search in' setting from 'The folder of each series' to 'All library'." - -msgctxt "#60463" -msgid "The channel site may not work. In case the site works you can report the problem on github." -msgstr "The channel site may not work. In case the site works you can report the problem on github." - -msgctxt "#60464" -msgid "It is possible that you have updated Alfa recently and that the changes have not been fully applied Well, you can try 'Settings>Other Tools', checking the *_data.json files or reattaching everything to the library again" -msgstr "It is possible that you have updated Alfa recently and that the changes have not been fully applied Well, you can try 'Settings>Other Tools', checking the *_data.json files or reattaching everything to the library again" - -msgctxt "#60465" -msgid "Do you want access to these settings?" -msgstr "Do you want access to these settings?" - -msgctxt "#60466" -msgid "Yes, the option to display merged or split results by channels can be found in 'Settings>Global Search Settings>Other Settings'. Do you want access to these settings?" -msgstr "Yes, the option to display merged or split results by channels can be found in 'Settings>Global Search Settings>Other Settings'. Do you want access to these settings?" - -msgctxt "#60467" -msgid "To report a problem on'http://alfa-addon.com' you need to:|the version you're using of Alpha.|The version you're using of kodi, mediaserver, etc.|the version and name of the operating system you're using.|The name of the skin (in case you're using Kodi) and whether using the default skin has solved the problem.|Description of the problem and any test cases.To activate the log in detailed mode, go to:|Configuration.|Preferences.|In the General tab - Check the option: Generate detailed log. The detailed log file can be found in the following path: \n\n%s" -msgstr "To report a problem on'http://alfa-addon.com' you need to:|the version you're using of Alpha.|The version you're using of kodi, mediaserver, etc.|the version and name of the operating system you're using.|The name of the skin (in case you're using Kodi) and whether using the default skin has solved the problem.|Description of the problem and any test cases.To activate the log in detailed mode, go to:|Configuration.|Preferences.|In the General tab - Check the option: Generate detailed log. The detailed log file can be found in the following path: \n\n%s" - -msgctxt "#60468" -msgid "You can find our Telegram channel at @StreamOnDemandOfficial\nSe you have doubts you can write to us in the Telegram group: https://bit.ly/2I3kRwF" -msgstr "You can find our Telegram channel at @StreamOnDemandOfficial\nSe you have doubts you can write to us in the Telegram group: https://bit.ly/2I3kRwF" - -msgctxt "#60469" -msgid "Uploading new data" -msgstr "Uploading new data" - -msgctxt "#60470" -msgid "Buscando en Tmdb......." -msgstr "Buscando en Tmdb......." - -msgctxt "#60471" -msgid "No results, missing information about the year of the video" -msgstr "No results, missing information about the year of the video" - -msgctxt "#60472" -msgid "There is no information on the %s required" -msgstr "There is no information on the %s required" - -msgctxt "#60473" -msgid "No results" -msgstr "No results" - -msgctxt "#60474" -msgid "There is no information on the %s required" -msgstr "There is no information on the %s required" - -msgctxt "#60475" -msgid "Filmaffinity recording......." -msgstr "Filmaffinity recording......." - -msgctxt "#60476" -msgid "[COLOR yellow][B]There is no information about this movie...[/B][/COLOR]" -msgstr "[COLOR yellow][B]There is no information about this movie...[/B][/COLOR]" - -msgctxt "#60477" -msgid "Important recommendations......." -msgstr "Important recommendations......." - -msgctxt "#60478" -msgid "[COLOR aquamarine][B]Completated %s[/B][/COLOR]" -msgstr "[COLOR aquamarine][B]Completated %s[/B][/COLOR]" - -msgctxt "#60479" -msgid "[COLOR aquamarine][B]In progress %s[/B][/COLOR]" -msgstr "[COLOR aquamarine][B]In progress %s[/B][/COLOR]" - -msgctxt "#60480" -msgid "(Seasons: %s)" -msgstr "(Seasons: %s)" - -msgctxt "#60481" -msgid "Picture collection on FANART.TV" -msgstr "Picture collection on FANART.TV" - -msgctxt "#60482" -msgid "Tuned Instruments in Vtunes" -msgstr "Tuned Instruments in Vtunes" - -msgctxt "#60483" -msgid "Picture collection on FANART.TV" -msgstr "Picture collection on FANART.TV" - -msgctxt "#60484" -msgid "[COLOR red][B]Update Kodi to its latest version[/B][/COLOR]" -msgstr "[COLOR red][B]Update Kodi to its latest version[/B][/COLOR]" - -msgctxt "#60485" -msgid "[COLOR skyblue]for detailed info[/COLOR]" -msgstr "[COLOR skyblue]for detailed info[/COLOR]" - -msgctxt "#60486" -msgid "Uploading new information" -msgstr "Uploading new information" - -msgctxt "#60487" -msgid "Search in Tmdb......." -msgstr "Search in Tmdb......." - -msgctxt "#60488" -msgid "No information..." -msgstr "No information..." - -msgctxt "#60489" -msgid "[COLOR limegreen][B]Production company: [/B][/COLOR]" -msgstr "[COLOR limegreen][B]Production company: [/B][/COLOR]" - -msgctxt "#60490" -msgid "[COLOR limegreen][B]Country: [/B][/COLOR]" -msgstr "[COLOR limegreen][B]Country: [/B][/COLOR]" - -msgctxt "#60491" -msgid "[COLOR limegreen][B]Preview: [/B][/COLOR]" -msgstr "[COLOR limegreen][B]Preview: [/B][/COLOR]" - -msgctxt "#60492" -msgid "[COLOR limegreen][B]Seasons/Episodes: [/B][/COLOR]" -msgstr "[COLOR limegreen][B]Seasons/Episodes: [/B][/COLOR]" - -msgctxt "#60493" -msgid "[COLOR orange][B]Is there the tv series you're looking for?[/B][/COLOR]" -msgstr "[COLOR orange][B]Is there the tv series you're looking for?[/B][/COLOR]" - -msgctxt "#60494" -msgid "[COLOR orange][B]Is there the movie you are looking for?[/B][/COLOR]" -msgstr "[COLOR orange][B]Is there the movie you are looking for?[/B][/COLOR]" - -msgctxt "#60495" -msgid "[COLOR tomato][B]Close[/B][/COLOR]" -msgstr "[COLOR tomato][B]Close[/B][/COLOR]" - -msgctxt "#60496" -msgid "Loading results" -msgstr "Loading results" - -msgctxt "#60497" -msgid "Wait........" -msgstr "Wait........" - -msgctxt "#60498" -msgid "[COLOR orange][B]Select...[/B][/COLOR]" -msgstr "[COLOR orange][B]Select...[/B][/COLOR]" - -msgctxt "#60499" -msgid "plugin" -msgstr "plugin" - -msgctxt "#60500" -msgid "Nothing to play" -msgstr "Nothing to play" - -msgctxt "#60501" -msgid "[COLOR orange][B]Department[/B][/COLOR]" -msgstr "[COLOR orange][B]Department[/B][/COLOR]" - -msgctxt "#60502" -msgid "Uploading new data" -msgstr "Uploading new data" - -msgctxt "#60503" -msgid "Loading data from the %s..." -msgstr "Loading data from the %s..." - -msgctxt "#60504" -msgid "No information" -msgstr "No information" - -msgctxt "#60505" -msgid "[COLOR rosybrown]Uploading filmography...[/COLOR]" -msgstr "[COLOR rosybrown]Uploading filmography...[/COLOR]" - -msgctxt "#60506" -msgid "[COLOR plum]Picture collection...[/COLOR]" -msgstr "[COLOR plum]Picture collection...[/COLOR]" - -msgctxt "#60507" -msgid "[COLOR crimson][B]Error[/B][/COLOR]" -msgstr "[COLOR crimson][B]Error[/B][/COLOR]" - -msgctxt "#60508" -msgid "[COLOR tomato]Video not available[/COLOR]" -msgstr "[COLOR tomato]Video not available[/COLOR]" - -msgctxt "#60509" -msgid "Movies" -msgstr "Movies" - -msgctxt "#60510" -msgid "Kids" -msgstr "Kids" - -msgctxt "#60511" -msgid "TV series Episodes" -msgstr "TV series Episodes" - -msgctxt "#60512" -msgid "Anime Episodes" -msgstr "Anime Episodes" - -msgctxt "#60513" -msgid "Documentaries" -msgstr "Documentaries" - -msgctxt "#60514" -msgid "Channels included in: %s" -msgstr "Channels included in: %s" - -msgctxt "#60515" -msgid "Simultaneous search deactivated" -msgstr "Simultaneous search deactivated" - -msgctxt "#60516" -msgid "Simultaneous novelty search provides" -msgstr "Simultaneous novelty search provides" - -msgctxt "#60517" -msgid "higher speed and its deactivation is advisable only in case of failure." -msgstr "higher speed and its deactivation is advisable only in case of failure." - -msgctxt "#60518" -msgid "Would you like to activate the simultaneous search now?" -msgstr "Would you like to activate the simultaneous search now?" - -msgctxt "#60519" -msgid "Channel search..." -msgstr "Channel search..." - -msgctxt "#60520" -msgid "Search in '%s'..." -msgstr "Search in '%s'..." - -msgctxt "#60521" -msgid "Completed in %d/%d channels..." -msgstr "Completed in %d/%d channels..." - -msgctxt "#60522" -msgid "Results obtained: %s | Time: %2.f seconds" -msgstr "Results obtained: %s | Time: %2.f seconds" - -msgctxt "#60523" -msgid " (In %s and %s)" -msgstr " (In %s and %s)" - -msgctxt "#60524" -msgid " (In %s)" -msgstr " (In %s)" - -msgctxt "#60525" -msgid "Channels included in:" -msgstr "Channels included in:" - -msgctxt "#60526" -msgid " - Movies " -msgstr " - Movies " - -msgctxt "#60527" -msgid " - Kids" -msgstr " - Kids" - -msgctxt "#60528" -msgid " - Series Tv Episodes" -msgstr " - Series Tv Episodes" - -msgctxt "#60529" -msgid " - Anime Episodes" -msgstr " - Anime Episodes" - -msgctxt "#60530" -msgid " - Documentaries" -msgstr " - Documentaries" - -msgctxt "#60531" -msgid "Other Settings" -msgstr "Other Settings" - -msgctxt "#60532" -msgid "Configuration -- News" -msgstr "Configuration -- News" - -msgctxt "#60533" -msgid "Channels included in News " -msgstr "Channels included in News " - -msgctxt "#60534" -msgid "Last 2 months" -msgstr "Last 2 months" - -msgctxt "#60535" -msgid "Preferences" -msgstr "Preferences" - -msgctxt "#60536" -msgid "Special settings" -msgstr "Special settings" - -msgctxt "#60537" -msgid "Channel settings" -msgstr "Channel settings" - -msgctxt "#60538" -msgid "Server settings" -msgstr "Server settings" - -msgctxt "#60539" -msgid "Settings for the 'News' section" -msgstr "Settings for the 'News' section" - -msgctxt "#60540" -msgid "Global search settings" -msgstr "Global search settings" - -msgctxt "#60541" -msgid "Download settings" -msgstr "Download settings" - -msgctxt "#60542" -msgid "Videolibrary settings" -msgstr "Videolibrary settings" - -msgctxt "#60544" -msgid "More Options" -msgstr "More Options" - -msgctxt "#60545" -msgid "Activate/deactivate channels" -msgstr "Activate/deactivate channels" - -msgctxt "#60546" -msgid "Channel settings" -msgstr "Channel settings" - -msgctxt "#60547" -msgid "Channel Configuration '%s'" -msgstr "Channel Configuration '%s'" - -msgctxt "#60548" -msgid "HChannel Options" -msgstr "HChannel Options" - -msgctxt "#60549" -msgid "Check the files * _data.json" -msgstr "Check the files * _data.json" - -msgctxt "#60550" -msgid "Servers locked" -msgstr "Servers locked" - -msgctxt "#60551" -msgid "Favorite servers" -msgstr "Favorite servers" - -msgctxt "#60552" -msgid "Debriders settings" -msgstr "Debriders settings" - -msgctxt "#60553" -msgid " Server configuration '%s'" -msgstr " Server configuration '%s'" - -msgctxt "#60554" -msgid "Server settings" -msgstr "Server settings" - -msgctxt "#60557" -msgid "Saving configuration" -msgstr "Saving configuration" - -msgctxt "#60558" -msgid "Please wait." -msgstr "Please wait." - -msgctxt "#60559" -msgid "Saving configuration...%s" -msgstr "Saving configuration...%s" - -msgctxt "#60560" -msgid " - [COLOR red] CORRECTED!![/COLOR]" -msgstr " - [COLOR red] CORRECTED!![/COLOR]" - -msgctxt "#60561" -msgid "Saving configuration..." -msgstr "Saving configuration..." - -msgctxt "#60562" -msgid "Please wait" -msgstr "Please wait" - -msgctxt "#60563" -msgid "Saving configuration..." -msgstr "Saving configuration..." - -msgctxt "#60564" -msgid "Channel Options" -msgstr "Channel Options" - -msgctxt "#60565" -msgid " Check the files * _data.json" -msgstr " Check the files * _data.json" - -msgctxt "#60566" -msgid "Videolibrary options" -msgstr "Videolibrary options" - -msgctxt "#60567" -msgid " Overwrite the entire video library (strm, nfo and json)" -msgstr " Overwrite the entire video library (strm, nfo and json)" - -msgctxt "#60568" -msgid " Search for new episodes and update the video library" -msgstr " Search for new episodes and update the video library" - -msgctxt "#60569" -msgid " - There are no default settings" -msgstr " - There are no default settings" - -msgctxt "#60570" -msgid " | Error Detail: %s" -msgstr " | Error Detail: %s" - -msgctxt "#60571" -msgid " - [COLOR red] Default settings cannot be loaded![/COLOR]" -msgstr " - [COLOR red] Default settings cannot be loaded![/COLOR]" - -msgctxt "#60572" -msgid "Ask" -msgstr "Ask" - -msgctxt "#60577" -msgid "Order Servers" -msgstr "Order Servers" - -msgctxt "#60578" -msgid " Server #%s" -msgstr " Server #%s" - -msgctxt "#60579" -msgid "Error" -msgstr "Error" - -msgctxt "#60580" -msgid "A saving error occurred" -msgstr "A saving error occurred" - -msgctxt "#60581" -msgid "Overwriting the entire video library" -msgstr "Overwriting the entire video library" - -msgctxt "#60582" -msgid "This may take some time." -msgstr "This may take some time." - -msgctxt "#60583" -msgid "Do you want to continue?" -msgstr "Do you want to continue?" - -msgctxt "#60584" -msgid "Overwriting the video library...TV SERIES" -msgstr "Overwriting the video library...TV SERIES" - -msgctxt "#60585" -msgid "alfa" -msgstr "alfa" - -msgctxt "#60586" -msgid "Overwriting the video library...MOVIES" -msgstr "Overwriting the video library...MOVIES" - -msgctxt "#60587" -msgid "Video library update...." -msgstr "Video library update...." - -msgctxt "#60588" -msgid " - Settings created" -msgstr " - Settings created" - -msgctxt "#60589" -msgid "- - No correction necessary" -msgstr "- - No correction necessary" - -msgctxt "#60590" -msgid " - An error has occurred" -msgstr " - An error has occurred" - -msgctxt "#60591" -msgid "Activate all" -msgstr "Activate all" - -msgctxt "#60592" -msgid "Deactivate all" -msgstr "Deactivate all" - -msgctxt "#60593" -msgid "Default Set" -msgstr "Default Set" - -msgctxt "#60594" -msgid "All channels" -msgstr "All channels" - -msgctxt "#60595" -msgid " [COLOR grey](Default disabled)[/COLOR]" -msgstr " [COLOR grey](Default disabled)[/COLOR]" - -msgctxt "#60596" -msgid "Channels" -msgstr "Channels" - -msgctxt "#60597" -msgid " Server #%s" -msgstr " Server #%s" - -msgctxt "#60598" -msgid "Configuration -- Video Library" -msgstr "Configuration -- Video Library" - -msgctxt "#60600" -msgid "Series" -msgstr "Series" - -msgctxt "#60601" -msgid "Video library update" -msgstr "Video library update" - -msgctxt "#60602" -msgid "Never" -msgstr "Never" - -msgctxt "#60603" -msgid "When Kodi starts" -msgstr "When Kodi starts" - -msgctxt "#60604" -msgid "Once a day" -msgstr "Once a day" - -msgctxt "#60605" -msgid "At the start of Kodi and once a day" -msgstr "At the start of Kodi and once a day" - -msgctxt "#60606" -msgid " Wait before updating at startup of Kodi" -msgstr " Wait before updating at startup of Kodi" - -msgctxt "#60607" -msgid "When Kodi starts" -msgstr "When Kodi starts" - -msgctxt "#60609" -msgid "10 sec" -msgstr "10 sec" - -msgctxt "#60610" -msgid "20 sec" -msgstr "20 sec" - -msgctxt "#60611" -msgid "30 sec" -msgstr "30 sec" - -msgctxt "#60612" -msgid "60 sec" -msgstr "60 sec" - -msgctxt "#60613" -msgid " Begin scheduled update from" -msgstr " Begin scheduled update from" - -msgctxt "#60614" -msgid " Search for new episodes in active tv series" -msgstr " Search for new episodes in active tv series" - -msgctxt "#60615" -msgid "Never" -msgstr "Never" - -msgctxt "#60616" -msgid "Always" -msgstr "Always" - -msgctxt "#60617" -msgid "According to new episodes" -msgstr "According to new episodes" - -msgctxt "#60618" -msgid " Search for content in" -msgstr " Search for content in" - -msgctxt "#60619" -msgid "The folder of each tv series" -msgstr "The folder of each tv series" - -msgctxt "#60620" -msgid "All video library" -msgstr "All video library" - -msgctxt "#60621" -msgid "Show links in" -msgstr "Show links in" - -msgctxt "#60622" -msgid "Conventional window" -msgstr "Conventional window" - -msgctxt "#60623" -msgid "Pop-up window" -msgstr "Pop-up window" - -msgctxt "#60624" -msgid " Maximum number of links to display (recommended for slow devices)" -msgstr " Maximum number of links to display (recommended for slow devices)" - -msgctxt "#60625" -msgid "All" -msgstr "All" - -msgctxt "#60626" -msgid " Sort by whitelist" -msgstr " Sort by whitelist" - -msgctxt "#60627" -msgid " Remove the channel name at the beginning" -msgstr " Remove the channel name at the beginning" - -msgctxt "#60628" -msgid " Pop-up window: Replace \"View in\" with \"[V]\" and \"Download in\" with \"[D]\"" -msgstr " Pop-up window: Replace \"View in\" with \"[V]\" and \"Download in\" with \"[D]\"" - -msgctxt "#60629" -msgid "Database location" -msgstr "Database location" - -msgctxt "#60630" -msgid "Local" -msgstr "Local" - -msgctxt "#60631" -msgid "Remote" -msgstr "Remote" - -msgctxt "#60632" -msgid " Server Name" -msgstr " Server Name" - -msgctxt "#60633" -msgid " Server port" -msgstr " Server port" - -msgctxt "#60634" -msgid "Automatically mark as watched" -msgstr "Automatically mark as watched" - -msgctxt "#60635" -msgid " Video viewing time" -msgstr " Video viewing time" - -msgctxt "#60636" -msgid "0 seg" -msgstr "0 seg" - -msgctxt "#60637" -msgid "Synchronizing with Trakt" -msgstr "Synchronizing with Trakt" - -msgctxt "#60638" -msgid " After mark as watched the episode" -msgstr " After mark as watched the episode" - -msgctxt "#60639" -msgid " Show notification" -msgstr " Show notification" - -msgctxt "#60640" -msgid " On adding a TV series to the video library" -msgstr " On adding a TV series to the video library" - -msgctxt "#60641" -msgid " Wait until the tv series is added" -msgstr " Wait until the tv series is added" - -msgctxt "#60642" -msgid "Show option \"All Seasons\"." -msgstr "Show option \"All Seasons\"." - -msgctxt "#60643" -msgid "Do not combine the seasons of the series"" -msgstr "Do not combine the seasons of the series"" - -msgctxt "#60644" -msgid "Only if there is one season" -msgstr "Only if there is one season" - -msgctxt "#60645" -msgid "Show channel selection box" -msgstr "Show channel selection box" - -msgctxt "#60646" -msgid "Create directories on your system using" -msgstr "Create directories on your system using" - -msgctxt "#60647" -msgid "Localized title" -msgstr "Localized title" - -msgctxt "#60648" -msgid "Never" -msgstr "Never" - -msgctxt "#60649" -msgid "Original title" -msgstr "Original title" - -msgctxt "#60650" -msgid "When you add content, you get information from:" -msgstr "When you add content, you get information from:" - -msgctxt "#60651" -msgid " Movies:" -msgstr " Movies:" - -msgctxt "#60652" -msgid " TV Series:" -msgstr " TV Series:" - -msgctxt "#60653" -msgid " If there are no results also search in English" -msgstr " If there are no results also search in English" - -msgctxt "#60654" -msgid "Include in blacklist" -msgstr "Include in blacklist" - -msgctxt "#60655" -msgid "Include in Favorites List" -msgstr "Include in Favorites List" - -msgctxt "#60656" -msgid "Simultaneous search (multiprocessing)" -msgstr "Simultaneous search (multiprocessing)" - -msgctxt "#60657" -msgid "Show Results:" -msgstr "Show Results:" - -msgctxt "#60658" -msgid "Grouped by content" -msgstr "Grouped by content" - -msgctxt "#60659" -msgid "Grouped by channel" -msgstr "Grouped by channel" - -msgctxt "#60660" -msgid "Without group" -msgstr "Without group" - -msgctxt "#60661" -msgid "News" -msgstr "News" - -msgctxt "#60662" -msgid "code cleaning" -msgstr "code cleaning" - -msgctxt "#60663" -msgid "Add the progress window" -msgstr "Add the progress window" - -msgctxt "#60664" -msgid "Eliminated unnecessary code." -msgstr "Eliminated unnecessary code." - -msgctxt "#60665" -msgid "Possibility to include other channels, through the configuration" -msgstr "Possibility to include other channels, through the configuration" - -msgctxt "#60666" -msgid "Color Profile" -msgstr "Color Profile" - -msgctxt "#60667" -msgid "Cold" -msgstr "Cold" - -msgctxt "#60668" -msgid "Hot" -msgstr "Hot" - -msgctxt "#60669" -msgid "Lilac" -msgstr "Lilac" - -msgctxt "#60670" -msgid "Pastel" -msgstr "Pastel" - -msgctxt "#60671" -msgid "Vivid" -msgstr "Vivid" - -msgctxt "#60672" -msgid "Global Search" -msgstr "Global Search" - -msgctxt "#60673" -msgid "MultiThread Search" -msgstr "MultiThread Search" - -msgctxt "#60674" -msgid "Show Results:" -msgstr "Show Results:" - -msgctxt "#60675" -msgid "Per channel" -msgstr "Per channel" - -msgctxt "#60676" -msgid "All Together" -msgstr "All Together" - -msgctxt "#60677" -msgid "Saved Searches:" -msgstr "Saved Searches:" - -msgctxt "#60678" -msgid "Remember the latest search" -msgstr "Remember the latest search" - -msgctxt "#60679" -msgid "Novelties in %s" -msgstr "Novelties in %s" - -msgctxt "#60680" -msgid "documentaries" -msgstr "documentaries" - -msgctxt "#60681" -msgid "movies" -msgstr "movies" - -msgctxt "#60682" -msgid "tv series" -msgstr "tv series" - -msgctxt "#60683" -msgid "anime" -msgstr "anime" - -msgctxt "#70000" -msgid "Options" -msgstr "Options" - -msgctxt "#70001" -msgid "OK" -msgstr "OK" - -msgctxt "#70002" -msgid "Cancel" -msgstr "Cancel" - -msgctxt "#70003" -msgid "Default" -msgstr "Default" - -msgctxt "#70004" -msgid "Loading..." -msgstr "Loading..." - -msgctxt "#70005" -msgid "Previous" -msgstr "Previous" - -msgctxt "#70006" -msgid "Next" -msgstr "Next" - -msgctxt "#70007" -msgid "Accept" -msgstr "Accept" - -msgctxt "#70008" -msgid "Reload" -msgstr "Reload" - -msgctxt "#70009" -msgid "Classic Menu" -msgstr "Classic Menu" - -msgctxt "#70010" -msgid "Where To Search" -msgstr "Where To Search" - -msgctxt "#70011" -msgid "Search for actor" -msgstr "Search for actor" - -msgctxt "#70012" -msgid "Beginning" -msgstr "Beginning" - -msgctxt "#70013" -msgid "Terror" -msgstr "Terror" - -msgctxt "#70014" -msgid "Castellan" -msgstr "Castellan" - -msgctxt "#70015" -msgid "Torrents" -msgstr "Torrents" - -msgctxt "#70016" -msgid "Active channels" -msgstr "Active channels" - -msgctxt "#70017" -msgid "TV Series" -msgstr "TV Series" - -msgctxt "#70018" -msgid "Children" -msgstr "Children" - -msgctxt "#70019" -msgid "Documentary" -msgstr "Documentary" - -msgctxt "#70020" -msgid "[COLOR yellow]Search similar[/COLOR]" -msgstr "" - -msgctxt "#70021" -msgid "Search in TMDB" -msgstr "" - -msgctxt "#70022" -msgid " - Movies" -msgstr "" - -msgctxt "#70023" -msgid " - TV Shows" -msgstr "" - -msgctxt "#70024" -msgid "Search in Filmaffinity" -msgstr "" - -msgctxt "#70025" -msgid "Search in IMDB" -msgstr "" - -msgctxt "#70026" -msgid "MyAnimeList" -msgstr "" - -msgctxt "#70027" -msgid "Search engine settings" -msgstr "" - -msgctxt "#70028" -msgid "Most Popular" -msgstr "" - -msgctxt "#70029" -msgid "Top rated" -msgstr "" - -msgctxt "#70030" -msgid "On The Bill" -msgstr "" - -msgctxt "#70031" -msgid "Next" -msgstr "" - -msgctxt "#70032" -msgid "Genres" -msgstr "" - -msgctxt "#70033" -msgid "Actors/Actresses by popularity" -msgstr "" - -msgctxt "#70034" -msgid "Coming Soon" -msgstr "" - -msgctxt "#70035" -msgid "Search %s" -msgstr "" - -msgctxt "#70036" -msgid "Search actor/actress" -msgstr "" - -msgctxt "#70037" -msgid "Search director, writer..." -msgstr "" - -msgctxt "#70038" -msgid "Custom Filter" -msgstr "" - -msgctxt "#70039" -msgid "Keyword filter" -msgstr "" - -msgctxt "#70040" -msgid "Top Filmaffinity" -msgstr "" - -msgctxt "#70041" -msgid "Modern TV Shows" -msgstr "" - -msgctxt "#70042" -msgid "Year" -msgstr "" - -msgctxt "#70043" -msgid "Coming Out" -msgstr "" - -msgctxt "#70044" -msgid "Sagas and Collections" -msgstr "" - -msgctxt "#70045" -msgid "Movies/TV Shows/Documentaries by Themes" -msgstr "" - -msgctxt "#70046" -msgid "Search Movies/TV Shows" -msgstr "" - -msgctxt "#70047" -msgid " Search by director" -msgstr "" - -msgctxt "#70048" -msgid " My Account" -msgstr "" - -msgctxt "#70049" -msgid " Most Popular" -msgstr "" - -msgctxt "#70050" -msgid " Recommended Now" -msgstr "" - -msgctxt "#70051" -msgid " Most Anticipated " -msgstr "" - -msgctxt "#70052" -msgid " Custom recommendations" -msgstr "" - -msgctxt "#70053" -msgid " Most Viewed" -msgstr "" - -msgctxt "#70054" -msgid "Link your trakt account" -msgstr "" - -msgctxt "#70055" -msgid "Watchlists" -msgstr "" - -msgctxt "#70056" -msgid "Viewed" -msgstr "" - -msgctxt "#70057" -msgid "My lists" -msgstr "" - -msgctxt "#70058" -msgid "Top Series" -msgstr "" - -msgctxt "#70059" -msgid "Top Movies" -msgstr "" - -msgctxt "#70060" -msgid "Most Anticipated" -msgstr "" - -msgctxt "#70061" -msgid "Top Anime" -msgstr "" - -msgctxt "#70062" -msgid "Anime by Seasons" -msgstr "" - -msgctxt "#70063" -msgid "Anime by Genres" -msgstr "" - -msgctxt "#70064" -msgid "Search Tv Shows/Movies/Anime" -msgstr "" - -msgctxt "#70065" -msgid ">> Next Page" -msgstr "" - -msgctxt "#70066" -msgid " Search title in spanish: %s" -msgstr "" - -msgctxt "#70067" -msgid "Info Seasons [%s]" -msgstr "" - -msgctxt "#70068" -msgid "In my Collection" -msgstr "" - -msgctxt "#70069" -msgid "Search %s in icarus: %s" -msgstr "" - -msgctxt "#70070" -msgid " Search original title: %s" -msgstr "" - -msgctxt "#70071" -msgid "Cast" -msgstr "" - -msgctxt "#70072" -msgid " Most Viewed" -msgstr "" - -msgctxt "#70073" -msgid "Most Anticipated" -msgstr "" - -msgctxt "#70074" -msgid "Viewed" -msgstr "" - -msgctxt "#70075" -msgid "Most Anticipated" -msgstr "" - -msgctxt "#70076" -msgid "Top rated" -msgstr "" - -msgctxt "#70077" -msgid " Most Viewed" -msgstr "" - -msgctxt "#70078" -msgid "Show only links of " -msgstr "" - -msgctxt "#70079" -msgid "Remove only links of " -msgstr "" - -msgctxt "#70080" -msgid "Do you want Icarus to auto-configure Kodi's video library?" -msgstr "" - -msgctxt "#70081" -msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." -msgstr "" - -msgctxt "#70082" -msgid "Global Search" -msgstr "" - -msgctxt "#70083" -msgid "Show all links" -msgstr "" - -msgctxt "#70084" -msgid "Delete movie" -msgstr "" - -msgctxt "#70085" -msgid "Delete TV Show" -msgstr "" - -msgctxt "#70086" -msgid "Remove only links of %s" -msgstr "" - -msgctxt "#70087" -msgid "Deleted %s links from canal %s" -msgstr "" - -msgctxt "#70088" -msgid "Are you sure you want to delete '%s' from videolibrary ?" -msgstr "" - -msgctxt "#70089" -msgid "Show only links of %s" -msgstr "" - -msgctxt "#70090" -msgid " Exclude all streams with specific words" -msgstr "" - -msgctxt "#70091" -msgid " Words" -msgstr "" - -msgctxt "#70092" -msgid "Add to videolibrary" -msgstr "" - -msgctxt "#70093" -msgid "The Movie Database" -msgstr "" - -msgctxt "#70094" -msgid "Select scraper for movies" -msgstr "" - -msgctxt "#70095" -msgid "Universal Movie Scraper not present.\nInstall it now?" -msgstr "" - -msgctxt "#70096" -msgid "Universal Movie Scraper" -msgstr "" - -msgctxt "#70097" -msgid "Universal Movie Scraper not installed." -msgstr "" - -msgctxt "#70098" -msgid "The TVDB" -msgstr "" - -msgctxt "#70099" -msgid "The TVDB not installed." -msgstr "" - -msgctxt "#70100" -msgid "The Movie Database not present.\nInstall it now?" -msgstr "" - -msgctxt "#70101" -msgid "Error fixing videolibrarypath in BD" -msgstr "" - -msgctxt "#70102" -msgid "Videolibrary %s not configured" -msgstr "" - -msgctxt "#70103" -msgid "Videolibrary %s configured" -msgstr "" - -msgctxt "#70104" -msgid "Congratulations, the Kodi video library has been configured correctly." -msgstr "" - -msgctxt "#70105" -msgid "Do you want Icarus to automatically configure the Kodi library?You will be asked to set up scrapers for movies and series." -msgstr "" - -msgctxt "#70106" -msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." -msgstr "" - -msgctxt "#70107" -msgid "Select scraper for Tv Shows" -msgstr "" - -msgctxt "#70108" -msgid "Icons Set" -msgstr "" - -msgctxt "#70109" -msgid "Sync with Trakt.tv (You must have an account)" -msgstr "" - -msgctxt "#70110" -msgid "Priority Method" -msgstr "" - -msgctxt "#70111" -msgid "Stop looking when you find an option" -msgstr "" - -msgctxt "#70112" -msgid "Hide payment servers without an account" -msgstr "" - -msgctxt "#70113" -msgid "Password (default 0000)" -msgstr "" - -msgctxt "#70114" -msgid "Only until Kodi restarts" -msgstr "" - -msgctxt "#70115" -msgid "Request password to open adult channels" -msgstr "" - -msgctxt "#70116" -msgid "New password:" -msgstr "" - -msgctxt "#70117" -msgid "Confirm New password:" -msgstr "" - -msgctxt "#70118" -msgid "Folder name for 'Series'" -msgstr "" - -msgctxt "#70119" -msgid "Folder name for 'Movies'" -msgstr "" - -msgctxt "#70120" -msgid "Autoconfigure XBMC / Kodi library for Icarus content" -msgstr "" - -msgctxt "#70121" -msgid "Activate Home Page" -msgstr "" - -msgctxt "#70122" -msgid "Custom (select from a channel)" -msgstr "" - -msgctxt "#70123" -msgid "Show Recent" -msgstr "" - -msgctxt "#70124" -msgid "Category" -msgstr "" - -msgctxt "#70125" -msgid "Movie|Tv Shows|Anime|Children|Documentary|Horror|Castellan|Latin|Torrent" -msgstr "" - -msgctxt "#70126" -msgid "Visual Options" -msgstr "" - -msgctxt "#70127" -msgid "Anime" -msgstr "" - -msgctxt "#70128" -msgid "Infoplus visual option" -msgstr "" - -msgctxt "#70129" -msgid "Without animation" -msgstr "" - -msgctxt "#70130" -msgid "With animation" -msgstr "" - -msgctxt "#70131" -msgid "Thumbnail for videos" -msgstr "" - -msgctxt "#70132" -msgid "Poster" -msgstr "" - -msgctxt "#70133" -msgid "Server logo" -msgstr "" - -msgctxt "#70134" -msgid "Intelligent Titles" -msgstr "" - -msgctxt "#70135" -msgid "Custom Colours" -msgstr "" - -msgctxt "#70136" -msgid "Tv Show" -msgstr "" - -msgctxt "#70137" -msgid "Movie" -msgstr "" - -msgctxt "#70138" -msgid "Low Rating" -msgstr "" - -msgctxt "#70139" -msgid "Average Rating" -msgstr "" - -msgctxt "#70140" -msgid "High Rating" -msgstr "" - -msgctxt "#70141" -msgid "Quality" -msgstr "" - -msgctxt "#70142" -msgid "VOSE (Original Subtitled Spanish Version)" -msgstr "" - -msgctxt "#70143" -msgid "VOS (Original Subtitled Version)" -msgstr "" - -msgctxt "#70144" -msgid "VO (Original Version Originale)" -msgstr "" - -msgctxt "#70145" -msgid "Servers" -msgstr "" - -msgctxt "#70146" -msgid "Add to videolibrary" -msgstr "" - -msgctxt "#70147" -msgid "Videolibrary (Update series)" -msgstr "" - -msgctxt "#70148" -msgid "Videolibrary (Do not update series)" -msgstr "" - -msgctxt "#70149" -msgid "Others" -msgstr "" - -msgctxt "#70150" -msgid "Movie/series info in contextual menu" -msgstr "" - -msgctxt "#70151" -msgid "Show Infoplus option:" -msgstr "" - -msgctxt "#70152" -msgid "Show ExtendedInfo option (External addon required):" -msgstr "" - -msgctxt "#70153" -msgid "Buttons/Access keys (Changes require Kodi restart)" -msgstr "" - -msgctxt "#70154" -msgid "TheMovieDB (obtains data from movies or series)" -msgstr "" - -msgctxt "#70155" -msgid "Simultaneous searches (may cause instability)" -msgstr "" - -msgctxt "#70156" -msgid "Search extended information (actor's data) Increase search time" -msgstr "" - -msgctxt "#70157" -msgid "Use cache (improves recurring searches)" -msgstr "" - -msgctxt "#70158" -msgid "every 1 day" -msgstr "" - -msgctxt "#70159" -msgid "every 7 days" -msgstr "" - -msgctxt "#70160" -msgid "every 15 days" -msgstr "" - -msgctxt "#70161" -msgid "every 30 days" -msgstr "" - -msgctxt "#70162" -msgid "Renew cache?" -msgstr "" - -msgctxt "#70163" -msgid "Press to 'Clear cache' saved" -msgstr "" - -msgctxt "#70164" -msgid "Free First" -msgstr "" - -msgctxt "#70165" -msgid "Premium First" -msgstr "" - -msgctxt "#70166" -msgid "Debriders First" -msgstr "" - -msgctxt "#70167" -msgid "Titles Options" -msgstr "" - -msgctxt "#70168" -msgid "General" -msgstr "" - -msgctxt "#70169" -msgid "Servers use" -msgstr "" - -msgctxt "#70170" -msgid "No" -msgstr "" - -msgctxt "#70171" -msgid "Torrent" -msgstr "" - -msgctxt "#70172" -msgid " Plan B (If favourites fail try other links)" -msgstr "" - -msgctxt "#70173" -msgid "No working links" -msgstr "" - -msgctxt "#70174" -msgid "Server and Quality" -msgstr "" - -msgctxt "#70175" -msgid "Quality and Server" -msgstr "" - -msgctxt "#70176" -msgid "Wait" -msgstr "" - -msgctxt "#70177" -msgid "seconds for the video to start ..." -msgstr "" - -msgctxt "#70178" -msgid "Trying with: %s" -msgstr "" - -msgctxt "#70179" -msgid "Getting list of available servers ..." -msgstr "" - -msgctxt "#70180" -msgid "Connecting with %s..." -msgstr "" - -msgctxt "#70181" -msgid "Available servers: %s" -msgstr "" - -msgctxt "#70182" -msgid "Identifying servers ..." -msgstr "" - -msgctxt "#70183" -msgid "Getting list of available servers" -msgstr "" - -msgctxt "#70184" -msgid "Getting list of available servers:" -msgstr "" - -msgctxt "#70185" -msgid " chapters of: " -msgstr "" - -msgctxt "#70186" -msgid "Getting episodes..." -msgstr "" - -msgctxt "#70187" -msgid "connecting with %s..." -msgstr "" - -msgctxt "#70188" -msgid "Obtaining data from the series" -msgstr "" - -msgctxt "#70189" -msgid "Start the download now?" -msgstr "" - -msgctxt "#70190" -msgid "Add chapters..." -msgstr "" - -msgctxt "#70191" -msgid "Obtaining data from the movie" -msgstr "" - -msgctxt "#70192" -msgid "Select server" -msgstr "" - -msgctxt "#70193" -msgid "Open torrent with..." -msgstr "" - -msgctxt "#70194" -msgid "alfa-torrent" -msgstr "" - -msgctxt "#70195" -msgid "Alfa - Torrent" -msgstr "" - -msgctxt "#70196" -msgid "Beginning..." -msgstr "" - -msgctxt "#70197" -msgid "Automatically stopping at: %ss" -msgstr "" - -msgctxt "#70198" -msgid "Do you want to start playback?" -msgstr "" - -msgctxt "#70199" -msgid "Do you want to cancel the process?" -msgstr "" - -msgctxt "#70200" -msgid "Finishing and deleting data" -msgstr "" - -msgctxt "#70201" -msgid "Mass Testing Tools" -msgstr "" - -msgctxt "#70202" -msgid "- Test channels ..." -msgstr "" - -msgctxt "#70203" -msgid "- Test servers ..." -msgstr "" - -msgctxt "#70204" -msgid "- Test recent!" -msgstr "" - -msgctxt "#70205" -msgid "- Upload tests to web!" -msgstr "" - -msgctxt "#70206" -msgid "Link found in %s" -msgstr "" - -msgctxt "#70207" -msgid " - Movies 4K " -msgstr "" - -msgctxt "#70208" -msgid "Movies 4K" -msgstr "" - -msgctxt "#70209" -msgid "Horror movies!" -msgstr "" - -msgctxt "#70210" -msgid " (In %s and %s)" -msgstr "" - -msgctxt "#70211" -msgid " (In %s)" -msgstr "" - -msgctxt "#70212" -msgid " - Castellan" -msgstr "" - -msgctxt "#70213" -msgid " - Latin" -msgstr "" - -msgctxt "#70214" -msgid " - Torrent" -msgstr "" - msgctxt "#70215" msgid "TEST THIS CHANNEL" msgstr "" diff --git a/plugin.video.alfa/resources/language/Italian/strings.po b/plugin.video.alfa/resources/language/Italian/strings.po index 44157204..d94d0228 100644 --- a/plugin.video.alfa/resources/language/Italian/strings.po +++ b/plugin.video.alfa/resources/language/Italian/strings.po @@ -18,8 +18,8 @@ msgstr "" "Language: it_IT\n" msgctxt "#20000" -msgid "Icarus" -msgstr "Icarus" +msgid "Alfa" +msgstr "Alfa" msgctxt "#30001" msgid "Check for updates:" @@ -339,7 +339,7 @@ msgstr "Ricerca di %s ..." msgctxt "#30994" msgid "Searching in %s..." -msgstr "Sto cercando in %s" +msgstr "Sto cercando in %s ..." msgctxt "#30995" msgid "%d found so far: %s" @@ -386,8 +386,8 @@ msgid "Synchronization with Trakt started" msgstr "Sincronizzazione con Trakt iniziata" msgctxt "#59971" -msgid "Icarus Auto-configuration" -msgstr "Icarus Auto-configurazione" +msgid "Alfa Auto-configuration" +msgstr "Alfa Auto-configurazione" msgctxt "#59972" msgid "Search for: '%s' | Found: %d vídeos | Time: %2.f seconds" @@ -438,8 +438,8 @@ msgid "" msgstr "" msgctxt "#59984" -msgid "An error has occurred in icarus, \nCheck log for more details." -msgstr "Si è verificato un errore in icarus, \nControlla il log per maggiori dettagli." +msgid "An error has occurred in alfa, \nCheck log for more details." +msgstr "Si è verificato un errore in alfa, \nControlla il log per maggiori dettagli." msgctxt "#59985" msgid "Error in the channel" @@ -550,12 +550,12 @@ msgid "No video to play" msgstr "Nessun video da riprodurre" msgctxt "#60013" -msgid "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s.\nIf the web page is working correctly, please report the error on : https://alfa-addon.com/categories/icarus-addon.50/" -msgstr "Questo sito non sembra essere disponibile, riprova più tardi, se il problema persiste verifica mediante un browser: %s.\nSe la pagina web funziona correttamente segnala l'errore su : https://alfa-addon.com/categories/icarus-addon.50/" +msgid "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s.\nIf the web page is working correctly, please report the error on : https://alfa-addon.com/categories/alfa-addon.50/" +msgstr "Questo sito non sembra essere disponibile, riprova più tardi, se il problema persiste verifica mediante un browser: %s.\nSe la pagina web funziona correttamente segnala l'errore su : https://alfa-addon.com/categories/alfa-addon.50/" msgctxt "#60014" -msgid "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of icarus.\nTo have more details, see the log file." -msgstr "Potrebbe essere dovuto a un problema di connessione, la pagina web del canale ha cambiato la sua struttura, oppure un errore interno di icarus.\nPer avere maggiori dettagli, consulta il file di log." +msgid "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of alfa.\nTo have more details, see the log file." +msgstr "Potrebbe essere dovuto a un problema di connessione, la pagina web del canale ha cambiato la sua struttura, oppure un errore interno di alfa.\nPer avere maggiori dettagli, consulta il file di log." msgctxt "#60015" msgid "Check the log for more details on the error." @@ -650,8 +650,8 @@ msgid "Tv series update ..." msgstr "Aggiornamento serie ..." msgctxt "#60038" -msgid "An error has occurred on icarus" -msgstr "Si è verificato un errore su icarus" +msgid "An error has occurred on alfa" +msgstr "Si è verificato un errore su alfa" msgctxt "#60039" msgid "Error on channel %s" @@ -1102,8 +1102,8 @@ msgid "Problem in the connection process" msgstr "Problema nel processo di collegamento" msgctxt "#60261" -msgid "Icarus" -msgstr "Icarus" +msgid "Alfa" +msgstr "Alfa" msgctxt "#60262" msgid "You can install the Trakt script below, once installed and configured what you see will be automatically synchronized with your account." @@ -1406,8 +1406,8 @@ msgid "Download in" msgstr "Scaricare in" msgctxt "#60337" -msgid "icarus-MCT: No support adf.ly" -msgstr "icarus-MCT: Sin soporte adf.ly" +msgid "alfa-MCT: No support adf.ly" +msgstr "alfa-MCT: Sin soporte adf.ly" msgctxt "#60338" msgid "The script does not support URL reduction adf.ly." @@ -1430,8 +1430,8 @@ msgid "Continue with the session?" msgstr "Continuare con la sessione?" msgctxt "#60345" -msgid "icarus-MCT: List of videos" -msgstr "icarus-MCT: Lista di video" +msgid "alfa-MCT: List of videos" +msgstr "alfa-MCT: Lista di video" msgctxt "#60346" msgid "Delete video downloads" @@ -1455,7 +1455,7 @@ msgstr "[COLOR yellow]Cerca negli altri canali[/COLOR]" msgctxt "#60351" msgid "Set as homepage" -msgstr "[COLOR 0xffccff00]Impostare come HomePage[/COLOR]" +msgstr "[COLOR 0xffccff00]Impostare come Homepage[/COLOR]" msgctxt "#60352" msgid "Add TV Series to Videolibrary" @@ -1491,7 +1491,7 @@ msgstr "Cerca Trailer" msgctxt "#60360" msgid "[COLOR 0xffccff00][/COLOR]" -msgstr "[COLOR 0xffccff00][/COLOR]" +msgstr "[COLOR 0xffccff00][/COLOR]" msgctxt "#60361" msgid "Super Favourites Menu" @@ -1506,8 +1506,8 @@ msgid "The server on which it is hosted" msgstr "Il server in cui è ospitato " msgctxt "#60364" -msgid "is not yet supported in Icarus" -msgstr "non è ancora supportato in Icarus" +msgid "is not yet supported in Alfa" +msgstr "non è ancora supportato in Alfa" msgctxt "#60365" msgid "Loading video..." @@ -1842,8 +1842,8 @@ msgid " - Links of interest" msgstr " - Collegamenti di interesse" msgctxt "#60457" -msgid "Icarus" -msgstr "Icarus" +msgid "Alfa" +msgstr "Alfa" msgctxt "#60458" msgid "The disabling can be done in 'Settings>Turn on/off channels'. You can toggle channels on/off one at a time or all at the same time. Want to manage your channels now?" @@ -1858,11 +1858,11 @@ msgid "This can be improved by limiting the maximum number of links or by displa msgstr "Questo può essere migliorato limitando il numero massimo di collegamenti o visualizzandoli in una finestra Pop-Up. Queste impostazioni possono essere trovate in 'Impostazioni>Impostazioni libreria' Vuoi accedere a queste impostazioni?" msgctxt "#60461" -msgid "Icarus - FAQ - %s" -msgstr "Icarus - FAQ - %s" +msgid "Alfa - FAQ - %s" +msgstr "Alfa - FAQ - %s" msgctxt "#60462" -msgid "You may not have written the library path correctly in 'Settings>Preferences'.\nIl The specified path must be exactly the same as the 'source' entered in 'Archive' of the Kodi library.\nAVANZATO: This path is also found in 'sources.xml'.\nThere can be problems using some Kodi forks and paths with 'special://'. SPMC, for example, has problems with this, and there doesn't seem to be a solution, as it is an external problem to Icarus that has existed for a long time.\nYou can try solving these problems in 'Settings>Library Settings' by changing the 'Search in' setting from 'The folder of each series' to 'All library'." +msgid "You may not have written the library path correctly in 'Settings>Preferences'.\nIl The specified path must be exactly the same as the 'source' entered in 'Archive' of the Kodi library.\nAVANZATO: This path is also found in 'sources.xml'.\nThere can be problems using some Kodi forks and paths with 'special://'. SPMC, for example, has problems with this, and there doesn't seem to be a solution, as it is an external problem to Alfa that has existed for a long time.\nYou can try solving these problems in 'Settings>Library Settings' by changing the 'Search in' setting from 'The folder of each series' to 'All library'." msgstr "Potresti non aver scritto correttamente il percorso della libreria in 'Impostazioni>Preferenze'.\nIl percorso specificato deve essere esattamente uguale al 'sorgente' inserito in 'Archivio' della libreria di Kodi.\nAVANZATO: Questo percorso si trova anche in 'sources.xml'.\nPotresti riscontrare dei problemi utilizzando alcuni fork di Kodi e percorsi con 'special://'. SPMC, per esempio, ha problemi con questo, e non sembra esserci una soluzione, poichè è un problema esterno ad Alfa che esiste da molto tempo.\nPuoi provare a risolvere questi problemi in 'Impostazioni>Impostazioni libreria', modificando l'impostazione 'Esegui ricerca contenuto in' da 'La cartella di ogni serie' in 'Tutta la libreria'." msgctxt "#60463" @@ -2327,7 +2327,7 @@ msgstr "Sovrascrittura della videoteca....SERIE TV" msgctxt "#60585" msgid "alfa" -msgstr "icarus" +msgstr "alfa" msgctxt "#60586" msgid "Overwriting the video library...MOVIES" @@ -2990,8 +2990,8 @@ msgid "In my Collection" msgstr "Nella mia Collezione" msgctxt "#70069" -msgid "Search %s in icarus: %s" -msgstr "Cerca %s in icarus: %s" +msgid "Search %s in alfa: %s" +msgstr "Cerca %s in alfa: %s" msgctxt "#70070" msgid " Search original title: %s" @@ -3423,7 +3423,7 @@ msgstr "Attendi" msgctxt "#70177" msgid "seconds for the video to start ..." -msgstr "secondi che inizi il video..." +msgstr "secondi che inizi il vídeo..." msgctxt "#70178" msgid "Trying with: %s" @@ -3539,7 +3539,7 @@ msgstr "- Upload tests su web!" msgctxt "#70206" msgid "Link found in %s" -msgstr " %s" +msgstr "Link su %s" msgctxt "#70207" msgid " - Movies 4K " @@ -3559,11 +3559,11 @@ msgstr " (In %s e %s)" msgctxt "#70211" msgid " (In %s)" -msgstr " (In %s)" +msgstr " (En %s)" msgctxt "#70212" msgid " - Castellan" -msgstr " - Castellano" +msgstr " - Castigliano" msgctxt "#70213" msgid " - Latin" diff --git a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po index 77fe4fff..0d990180 100644 --- a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po @@ -338,8 +338,8 @@ msgid "Looking for %s..." msgstr "Buscando %s..." msgctxt "#30994" -msgid "Searching in %s" -msgstr "Buscando en %s" +msgid "Searching in %s..." +msgstr "Buscando en %s..." msgctxt "#30995" msgid "%d found so far: %s" @@ -563,83 +563,83 @@ msgstr "Comprueba el log para ver mas detalles del error." msgctxt "#60016" msgid "Segna film come non visto" -msgstr "Marcar película como no vista" +msgstr "Segna film come non visto" msgctxt "#60017" msgid "Mark movie as not watched" -msgstr "Marcar película como vista" +msgstr "Segna film come visto" msgctxt "#60018" msgid "Delete movie/channel" -msgstr "Eliminar película/canal" +msgstr "Elimina film/canale" msgctxt "#60019" msgid "Delete this movie" -msgstr "Eliminar esta película" +msgstr "Elimina questo film" msgctxt "#60020" msgid "Mark tv series as not watched" -msgstr "Marcar serie como no vista" +msgstr "Segna serie come non vista" msgctxt "#60021" msgid "Mark tv series as watched" -msgstr "Marcar serie como vista" +msgstr "Segna serie come vista" msgctxt "#60022" msgid "Automatically find new episodes: Disable" -msgstr Buscar automáticamente nuevos episodios: Desactivar" +msgstr "Trova automaticamente nuovi episodi: Disattiva" msgctxt "#60023" msgid "Automatically find new episodes: Enable" -msgstr "Buscar automáticamente nuevos episodios: Activar" +msgstr "Trova automaticamente nuovi episodi: Attiva" msgctxt "#60024" msgid "Delete tv series/channel" -msgstr "Eliminar serie/canal" +msgstr "Elimina serie/canale" msgctxt "#60025" msgid "Delete tv series" -msgstr "Eliminar esta serie" +msgstr "Elimina serie" msgctxt "#60026" msgid "Search for new episodes and update" -msgstr "Buscar nuevos episodios y actualizar videoteca" +msgstr "Cerca nuovi episodi e aggiorna" msgctxt "#60027" msgid "Season %s" -msgstr "Temporada %s" +msgstr "Stagione %s" msgctxt "#60028" msgid "Segna stagione come non vista" -msgstr "Marcar temporada como no vista" +msgstr "Segna stagione come non vista" msgctxt "#60029" msgid "Mark season as not watched" -msgstr "Marcar temporada como vista" +msgstr "Segna stagione come vista" msgctxt "#60030" msgid "*All the seasons" -msgstr "*Todas las temporadas" +msgstr "*Tutte le stagioni" msgctxt "#60031" msgid "Season %s Episode %s" -msgstr "Temporada %s Episodio %s" +msgstr "Stagione %s Episodio %s" msgctxt "#60032" msgid "Mark episode as not watched" -msgstr "Marcar episodio como no visto" +msgstr "Segna episodio come non visto" msgctxt "#60033" msgid "Mark episode as watched" -msgstr "Marcar episodio como visto" +msgstr "Segna episodio come visto" msgctxt "#60034" msgid "Show only link %s" -msgstr "Mostrar solo los enlaces de %s" +msgstr "Mostra solo link %s" msgctxt "#60035" msgid "Show all the links" -msgstr "Mostrar todos los enlaces" +msgstr "Mosta tutti i collegamenti" msgctxt "#60036" msgid "Episode %s" @@ -647,7 +647,7 @@ msgstr "Episodio %s" msgctxt "#60037" msgid "Tv series update ..." -msgstr "Actualizando serie...." +msgstr "Aggiornamento serie ..." msgctxt "#60038" msgid "An error has occurred on alfa" @@ -659,27 +659,27 @@ msgstr "Error en el canal %s" msgctxt "#60040" msgid "Delete movie" -msgstr "Eliminar película" +msgstr "Rimuovere film" msgctxt "#60041" msgid "Delete tv series" -msgstr "Eliminar serie" +msgstr "Rimuovere serie" msgctxt "#60042" msgid "Delete only the links of %s" -msgstr "Eliminar solo los enlaces de %s" +msgstr "Rimuovere solo i link dei %s" msgctxt "#60043" msgid "Delete %s links of channel %s" -msgstr "Eliminados %s enlaces del canal %s" +msgstr "Cancellati %s collegamenti del canale %s" msgctxt "#60044" msgid "Do you want really to delete '%s' from videolibrary?" -msgstr "¿Realmente desea eliminar '%s' de su videoteca?" +msgstr "Vuoi davvero rimuovere '%s' dalla videoteca?" msgctxt "#60045" msgid "Sync with Trakt started" -msgstr "Sincronizacion con Trakt iniciada" +msgstr "Sincronizzazione con Trakt iniziata" msgctxt "#60046" msgid "TheMovieDB not present.\nInstall it now?" @@ -807,7 +807,7 @@ msgstr " Servidores favoritos" msgctxt "#60082" msgid " \u2665 Favorite server %s" -msgstr " \u2665 Servidor Favorito %s +msgstr " \u2665 Servidor Favorito %s" msgctxt "#60083" msgid " Preferred Qualities" @@ -1098,8 +1098,8 @@ msgid "Problem in the connection process" msgstr "Fallo en el proceso de vinculación" msgctxt "#60261" -msgid "Alfa" -msgstr "Alfa" +msgid "Icarus" +msgstr "Icarus" msgctxt "#60262" msgid "You can install the Trakt script below, once installed and configured what you see will be automatically synchronized with your account." @@ -1502,8 +1502,8 @@ msgid "The server on which it is hosted" msgstr "El servidor donde está alojado no está" msgctxt "#60364" -msgid "is not yet supported in Alfa" -msgstr "soportado en Alfa todavía" +msgid "is not yet supported in Icarus" +msgstr "soportado en alfa todavía" msgctxt "#60365" msgid "Loading video..." @@ -1838,8 +1838,8 @@ msgid " - Links of interest" msgstr " - Collegamenti di interesse" msgctxt "#60457" -msgid "Alfa" -msgstr "Alfa" +msgid "Icarus" +msgstr "Icarus" msgctxt "#60458" msgid "The disabling can be done in 'Settings>Turn on/off channels'. You can toggle channels on/off one at a time or all at the same time. Want to manage your channels now?" @@ -1854,11 +1854,11 @@ msgid "This can be improved by limiting the maximum number of links or by displa msgstr "Questo può essere migliorato limitando il numero massimo di collegamenti o visualizzandoli in una finestra Pop-Up. Queste impostazioni possono essere trovate in 'Impostazioni>Impostazioni libreria' Vuoi accedere a queste impostazioni?" msgctxt "#60461" -msgid "Alfa - FAQ - %s" -msgstr "Alfa- FAQ - %s" +msgid "Icarus - FAQ - %s" +msgstr "Icarus- FAQ - %s" msgctxt "#60462" -msgid "You may not have written the library path correctly in 'Settings>Preferences'.\nIl The specified path must be exactly the same as the 'source' entered in 'Archive' of the Kodi library.\nAVANZATO: This path is also found in 'sources.xml'.\nThere can be problems using some Kodi forks and paths with 'special://'. SPMC, for example, has problems with this, and there doesn't seem to be a solution, as it is an external problem to Alfa that has existed for a long time.\nYou can try solving these problems in 'Settings>Library Settings' by changing the 'Search in' setting from 'The folder of each series' to 'All library'." +msgid "You may not have written the library path correctly in 'Settings>Preferences'.\nIl The specified path must be exactly the same as the 'source' entered in 'Archive' of the Kodi library.\nAVANZATO: This path is also found in 'sources.xml'.\nThere can be problems using some Kodi forks and paths with 'special://'. SPMC, for example, has problems with this, and there doesn't seem to be a solution, as it is an external problem to Icarus that has existed for a long time.\nYou can try solving these problems in 'Settings>Library Settings' by changing the 'Search in' setting from 'The folder of each series' to 'All library'." msgstr "Potresti non aver scritto correttamente il percorso della libreria in 'Impostazioni>Preferenze'.\nIl percorso specificato deve essere esattamente uguale al 'sorgente' inserito in 'Archivio' della libreria di Kodi.\nAVANZATO: Questo percorso si trova anche in 'sources.xml'.\nPotresti riscontrare dei problemi utilizzando alcuni fork di Kodi e percorsi con 'special://'. SPMC, per esempio, ha problemi con questo, e non sembra esserci una soluzione, poichè è un problema esterno ad Orion che esiste da molto tempo.\nPuoi provare a risolvere questi problemi in 'Impostazioni>Impostazioni libreria', modificando l'impostazione 'Esegui ricerca contenuto in' da 'La cartella di ogni serie' in 'Tutta la libreria'." msgctxt "#60463" @@ -1866,7 +1866,7 @@ msgid "The channel site may not work. In case the site works you can report the msgstr "Può darsi che il sito del canale non funzioni. Nel caso il sito funzioni puoi segnalare il problema su github." msgctxt "#60464" -msgid "It is possible that you have updated Alfa recently and that the changes have not been fully applied Well, you can try 'Settings>Other Tools', checking the *_data.json files or reattaching everything to the library again" +msgid "It is possible that you have updated Icarus recently and that the changes have not been fully applied Well, you can try 'Settings>Other Tools', checking the *_data.json files or reattaching everything to the library again" msgstr "È Possibile che tu abbia aggiornato Orion di recente e che i cambiamenti non siano stati totalmente applicati Bene, puoi provare in 'Impostazioni>Altri strumenti', controllando i files *_data.json o riaggiungendo tutto ancora alla libreria" msgctxt "#60465" @@ -1879,7 +1879,7 @@ msgstr "Sì, l'opzione per mostrare i risultati uniti o divisi per canali si tro msgctxt "#60467" msgid "To report a problem on'http://alfa-addon.com' you need to:|the version you're using of Alpha.|The version you're using of kodi, mediaserver, etc.|the version and name of the operating system you're using.|The name of the skin (in case you're using Kodi) and whether using the default skin has solved the problem.|Description of the problem and any test cases.To activate the log in detailed mode, go to:|Configuration.|Preferences.|In the General tab - Check the option: Generate detailed log. The detailed log file can be found in the following path: \n\n%s" -msgstr "Para reportar un problema en 'http://alfa-addon.com' es necesario:\n - Versión que usas de Alfa.\n - Versión que usas de kodi, mediaserver, etc.\n - Versión y nombre del sistema operativo que usas.\n - Nombre del skin (en el caso que uses Kodi) y si se te ha resuelto el problema al usar el skin por defecto.\n - Descripción del problema y algún caso de prueba.\n - Agregar el log en modo detallado, una vez hecho esto, zipea el log y lo puedes adjuntar en un post.\n\nPara activar el log en modo detallado, ingresar a:\n - Configuración.\n - Preferencias.\n - En la pestaña General - Marcar la opción: Generar log detallado.\n\nEl archivo de log detallado se encuentra en la siguiente ruta: \n\n%s" +msgstr "Para reportar un problema en 'http://alfa-addon.com' es necesario:\n - Versión que usas de Icarus.\n - Versión que usas de kodi, mediaserver, etc.\n - Versión y nombre del sistema operativo que usas.\n - Nombre del skin (en el caso que uses Kodi) y si se te ha resuelto el problema al usar el skin por defecto.\n - Descripción del problema y algún caso de prueba.\n - Agregar el log en modo detallado, una vez hecho esto, zipea el log y lo puedes adjuntar en un post.\n\nPara activar el log en modo detallado, ingresar a:\n - Configuración.\n - Preferencias.\n - En la pestaña General - Marcar la opción: Generar log detallado.\n\nEl archivo de log detallado se encuentra en la siguiente ruta: \n\n%s" msgctxt "#60468" msgid "You can find our Telegram channel at @StreamOnDemandOfficial\nSe you have doubts you can write to us in the Telegram group: https://bit.ly/2I3kRwF" @@ -3030,8 +3030,8 @@ msgid "Remove only links of " msgstr "Eliminar solo los enlaces de " msgctxt "#70080" -msgid "Do you want Alfa to auto-configure Kodi's video library?" -msgstr "¿Desea que Alfa auto-configure la videoteca de Kodi?" +msgid "Do you want Icarus to auto-configure Kodi's video library?" +msgstr "¿Desea que Icarus auto-configure la videoteca de Kodi?" msgctxt "#70081" msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." @@ -3130,8 +3130,8 @@ msgid "Congratulations, the Kodi video library has been configured correctly." msgstr "Felicidades la videoteca de Kodi ha sido configurada correctamente." msgctxt "#70105" -msgid "Do you want Alfa to automatically configure the Kodi library?You will be asked to set up scrapers for movies and series." -msgstr "¿Desea que Alfa auto-configure la videoteca de Kodi?Se le pedirá que configure los scrapers para las películas y las series." +msgid "Do you want Icarus to automatically configure the Kodi library?You will be asked to set up scrapers for movies and series." +msgstr "¿Desea que Icarus auto-configure la videoteca de Kodi?Se le pedirá que configure los scrapers para las películas y las series." msgctxt "#70106" msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." @@ -3190,8 +3190,8 @@ msgid "Folder name for 'Movies'" msgstr "Nombre de carpeta para 'Peliculas'" msgctxt "#70120" -msgid "Autoconfigure XBMC / Kodi library for Alfa content" -msgstr "Autoconfigurar videoteca de XBMC/Kodi para contenido de Alfa" +msgid "Autoconfigure XBMC / Kodi library for Icarus content" +msgstr "Autoconfigurar videoteca de XBMC/Kodi para contenido de Icarus" msgctxt "#70121" msgid "Activate Home Page" @@ -3535,39 +3535,11 @@ msgstr " - Películas 4K " msgctxt "#70208" msgid "Movies 4K" -msgstr Películas 4K" - -msgctxt "#70209" -msgid "Horror movies" -msgstr Peliculas de miedo!" - -msgctxt "#70210" -msgid " (In %s and %s)" -msgstr " (En %s y %s)" - -msgctxt "#70211" -msgid " (In %s)" -msgstr " (En %s)" - -msgctxt "#70212" -msgid " - Castellan" -msgstr " - Castellano" - -msgctxt "#70213" -msgid " - Latin" -msgstr " - Latino" - -msgctxt "#70214" -msgid " - Torrent" -msgstr " - Torrent" - -msgctxt "#70208" -msgid "Movies 4K" -msgstr Películas 4K +msgstr "Películas 4K" msgctxt "#70209" msgid "Horror movies!" -msgstr "Peliculas de miedo! +msgstr "Peliculas de miedo!" msgctxt "#70210" msgid " (In %s and %s)" @@ -3589,4 +3561,14 @@ msgctxt "#70214" msgid " - Torrent" msgstr " - Torrent" +msgctxt "#70215" +msgid "TEST THIS CHANNEL" +msgstr "TESTEAR ESTE CANAL" + + + + + + + diff --git a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po index 77fe4fff..0d990180 100644 --- a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po @@ -338,8 +338,8 @@ msgid "Looking for %s..." msgstr "Buscando %s..." msgctxt "#30994" -msgid "Searching in %s" -msgstr "Buscando en %s" +msgid "Searching in %s..." +msgstr "Buscando en %s..." msgctxt "#30995" msgid "%d found so far: %s" @@ -563,83 +563,83 @@ msgstr "Comprueba el log para ver mas detalles del error." msgctxt "#60016" msgid "Segna film come non visto" -msgstr "Marcar película como no vista" +msgstr "Segna film come non visto" msgctxt "#60017" msgid "Mark movie as not watched" -msgstr "Marcar película como vista" +msgstr "Segna film come visto" msgctxt "#60018" msgid "Delete movie/channel" -msgstr "Eliminar película/canal" +msgstr "Elimina film/canale" msgctxt "#60019" msgid "Delete this movie" -msgstr "Eliminar esta película" +msgstr "Elimina questo film" msgctxt "#60020" msgid "Mark tv series as not watched" -msgstr "Marcar serie como no vista" +msgstr "Segna serie come non vista" msgctxt "#60021" msgid "Mark tv series as watched" -msgstr "Marcar serie como vista" +msgstr "Segna serie come vista" msgctxt "#60022" msgid "Automatically find new episodes: Disable" -msgstr Buscar automáticamente nuevos episodios: Desactivar" +msgstr "Trova automaticamente nuovi episodi: Disattiva" msgctxt "#60023" msgid "Automatically find new episodes: Enable" -msgstr "Buscar automáticamente nuevos episodios: Activar" +msgstr "Trova automaticamente nuovi episodi: Attiva" msgctxt "#60024" msgid "Delete tv series/channel" -msgstr "Eliminar serie/canal" +msgstr "Elimina serie/canale" msgctxt "#60025" msgid "Delete tv series" -msgstr "Eliminar esta serie" +msgstr "Elimina serie" msgctxt "#60026" msgid "Search for new episodes and update" -msgstr "Buscar nuevos episodios y actualizar videoteca" +msgstr "Cerca nuovi episodi e aggiorna" msgctxt "#60027" msgid "Season %s" -msgstr "Temporada %s" +msgstr "Stagione %s" msgctxt "#60028" msgid "Segna stagione come non vista" -msgstr "Marcar temporada como no vista" +msgstr "Segna stagione come non vista" msgctxt "#60029" msgid "Mark season as not watched" -msgstr "Marcar temporada como vista" +msgstr "Segna stagione come vista" msgctxt "#60030" msgid "*All the seasons" -msgstr "*Todas las temporadas" +msgstr "*Tutte le stagioni" msgctxt "#60031" msgid "Season %s Episode %s" -msgstr "Temporada %s Episodio %s" +msgstr "Stagione %s Episodio %s" msgctxt "#60032" msgid "Mark episode as not watched" -msgstr "Marcar episodio como no visto" +msgstr "Segna episodio come non visto" msgctxt "#60033" msgid "Mark episode as watched" -msgstr "Marcar episodio como visto" +msgstr "Segna episodio come visto" msgctxt "#60034" msgid "Show only link %s" -msgstr "Mostrar solo los enlaces de %s" +msgstr "Mostra solo link %s" msgctxt "#60035" msgid "Show all the links" -msgstr "Mostrar todos los enlaces" +msgstr "Mosta tutti i collegamenti" msgctxt "#60036" msgid "Episode %s" @@ -647,7 +647,7 @@ msgstr "Episodio %s" msgctxt "#60037" msgid "Tv series update ..." -msgstr "Actualizando serie...." +msgstr "Aggiornamento serie ..." msgctxt "#60038" msgid "An error has occurred on alfa" @@ -659,27 +659,27 @@ msgstr "Error en el canal %s" msgctxt "#60040" msgid "Delete movie" -msgstr "Eliminar película" +msgstr "Rimuovere film" msgctxt "#60041" msgid "Delete tv series" -msgstr "Eliminar serie" +msgstr "Rimuovere serie" msgctxt "#60042" msgid "Delete only the links of %s" -msgstr "Eliminar solo los enlaces de %s" +msgstr "Rimuovere solo i link dei %s" msgctxt "#60043" msgid "Delete %s links of channel %s" -msgstr "Eliminados %s enlaces del canal %s" +msgstr "Cancellati %s collegamenti del canale %s" msgctxt "#60044" msgid "Do you want really to delete '%s' from videolibrary?" -msgstr "¿Realmente desea eliminar '%s' de su videoteca?" +msgstr "Vuoi davvero rimuovere '%s' dalla videoteca?" msgctxt "#60045" msgid "Sync with Trakt started" -msgstr "Sincronizacion con Trakt iniciada" +msgstr "Sincronizzazione con Trakt iniziata" msgctxt "#60046" msgid "TheMovieDB not present.\nInstall it now?" @@ -807,7 +807,7 @@ msgstr " Servidores favoritos" msgctxt "#60082" msgid " \u2665 Favorite server %s" -msgstr " \u2665 Servidor Favorito %s +msgstr " \u2665 Servidor Favorito %s" msgctxt "#60083" msgid " Preferred Qualities" @@ -1098,8 +1098,8 @@ msgid "Problem in the connection process" msgstr "Fallo en el proceso de vinculación" msgctxt "#60261" -msgid "Alfa" -msgstr "Alfa" +msgid "Icarus" +msgstr "Icarus" msgctxt "#60262" msgid "You can install the Trakt script below, once installed and configured what you see will be automatically synchronized with your account." @@ -1502,8 +1502,8 @@ msgid "The server on which it is hosted" msgstr "El servidor donde está alojado no está" msgctxt "#60364" -msgid "is not yet supported in Alfa" -msgstr "soportado en Alfa todavía" +msgid "is not yet supported in Icarus" +msgstr "soportado en alfa todavía" msgctxt "#60365" msgid "Loading video..." @@ -1838,8 +1838,8 @@ msgid " - Links of interest" msgstr " - Collegamenti di interesse" msgctxt "#60457" -msgid "Alfa" -msgstr "Alfa" +msgid "Icarus" +msgstr "Icarus" msgctxt "#60458" msgid "The disabling can be done in 'Settings>Turn on/off channels'. You can toggle channels on/off one at a time or all at the same time. Want to manage your channels now?" @@ -1854,11 +1854,11 @@ msgid "This can be improved by limiting the maximum number of links or by displa msgstr "Questo può essere migliorato limitando il numero massimo di collegamenti o visualizzandoli in una finestra Pop-Up. Queste impostazioni possono essere trovate in 'Impostazioni>Impostazioni libreria' Vuoi accedere a queste impostazioni?" msgctxt "#60461" -msgid "Alfa - FAQ - %s" -msgstr "Alfa- FAQ - %s" +msgid "Icarus - FAQ - %s" +msgstr "Icarus- FAQ - %s" msgctxt "#60462" -msgid "You may not have written the library path correctly in 'Settings>Preferences'.\nIl The specified path must be exactly the same as the 'source' entered in 'Archive' of the Kodi library.\nAVANZATO: This path is also found in 'sources.xml'.\nThere can be problems using some Kodi forks and paths with 'special://'. SPMC, for example, has problems with this, and there doesn't seem to be a solution, as it is an external problem to Alfa that has existed for a long time.\nYou can try solving these problems in 'Settings>Library Settings' by changing the 'Search in' setting from 'The folder of each series' to 'All library'." +msgid "You may not have written the library path correctly in 'Settings>Preferences'.\nIl The specified path must be exactly the same as the 'source' entered in 'Archive' of the Kodi library.\nAVANZATO: This path is also found in 'sources.xml'.\nThere can be problems using some Kodi forks and paths with 'special://'. SPMC, for example, has problems with this, and there doesn't seem to be a solution, as it is an external problem to Icarus that has existed for a long time.\nYou can try solving these problems in 'Settings>Library Settings' by changing the 'Search in' setting from 'The folder of each series' to 'All library'." msgstr "Potresti non aver scritto correttamente il percorso della libreria in 'Impostazioni>Preferenze'.\nIl percorso specificato deve essere esattamente uguale al 'sorgente' inserito in 'Archivio' della libreria di Kodi.\nAVANZATO: Questo percorso si trova anche in 'sources.xml'.\nPotresti riscontrare dei problemi utilizzando alcuni fork di Kodi e percorsi con 'special://'. SPMC, per esempio, ha problemi con questo, e non sembra esserci una soluzione, poichè è un problema esterno ad Orion che esiste da molto tempo.\nPuoi provare a risolvere questi problemi in 'Impostazioni>Impostazioni libreria', modificando l'impostazione 'Esegui ricerca contenuto in' da 'La cartella di ogni serie' in 'Tutta la libreria'." msgctxt "#60463" @@ -1866,7 +1866,7 @@ msgid "The channel site may not work. In case the site works you can report the msgstr "Può darsi che il sito del canale non funzioni. Nel caso il sito funzioni puoi segnalare il problema su github." msgctxt "#60464" -msgid "It is possible that you have updated Alfa recently and that the changes have not been fully applied Well, you can try 'Settings>Other Tools', checking the *_data.json files or reattaching everything to the library again" +msgid "It is possible that you have updated Icarus recently and that the changes have not been fully applied Well, you can try 'Settings>Other Tools', checking the *_data.json files or reattaching everything to the library again" msgstr "È Possibile che tu abbia aggiornato Orion di recente e che i cambiamenti non siano stati totalmente applicati Bene, puoi provare in 'Impostazioni>Altri strumenti', controllando i files *_data.json o riaggiungendo tutto ancora alla libreria" msgctxt "#60465" @@ -1879,7 +1879,7 @@ msgstr "Sì, l'opzione per mostrare i risultati uniti o divisi per canali si tro msgctxt "#60467" msgid "To report a problem on'http://alfa-addon.com' you need to:|the version you're using of Alpha.|The version you're using of kodi, mediaserver, etc.|the version and name of the operating system you're using.|The name of the skin (in case you're using Kodi) and whether using the default skin has solved the problem.|Description of the problem and any test cases.To activate the log in detailed mode, go to:|Configuration.|Preferences.|In the General tab - Check the option: Generate detailed log. The detailed log file can be found in the following path: \n\n%s" -msgstr "Para reportar un problema en 'http://alfa-addon.com' es necesario:\n - Versión que usas de Alfa.\n - Versión que usas de kodi, mediaserver, etc.\n - Versión y nombre del sistema operativo que usas.\n - Nombre del skin (en el caso que uses Kodi) y si se te ha resuelto el problema al usar el skin por defecto.\n - Descripción del problema y algún caso de prueba.\n - Agregar el log en modo detallado, una vez hecho esto, zipea el log y lo puedes adjuntar en un post.\n\nPara activar el log en modo detallado, ingresar a:\n - Configuración.\n - Preferencias.\n - En la pestaña General - Marcar la opción: Generar log detallado.\n\nEl archivo de log detallado se encuentra en la siguiente ruta: \n\n%s" +msgstr "Para reportar un problema en 'http://alfa-addon.com' es necesario:\n - Versión que usas de Icarus.\n - Versión que usas de kodi, mediaserver, etc.\n - Versión y nombre del sistema operativo que usas.\n - Nombre del skin (en el caso que uses Kodi) y si se te ha resuelto el problema al usar el skin por defecto.\n - Descripción del problema y algún caso de prueba.\n - Agregar el log en modo detallado, una vez hecho esto, zipea el log y lo puedes adjuntar en un post.\n\nPara activar el log en modo detallado, ingresar a:\n - Configuración.\n - Preferencias.\n - En la pestaña General - Marcar la opción: Generar log detallado.\n\nEl archivo de log detallado se encuentra en la siguiente ruta: \n\n%s" msgctxt "#60468" msgid "You can find our Telegram channel at @StreamOnDemandOfficial\nSe you have doubts you can write to us in the Telegram group: https://bit.ly/2I3kRwF" @@ -3030,8 +3030,8 @@ msgid "Remove only links of " msgstr "Eliminar solo los enlaces de " msgctxt "#70080" -msgid "Do you want Alfa to auto-configure Kodi's video library?" -msgstr "¿Desea que Alfa auto-configure la videoteca de Kodi?" +msgid "Do you want Icarus to auto-configure Kodi's video library?" +msgstr "¿Desea que Icarus auto-configure la videoteca de Kodi?" msgctxt "#70081" msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." @@ -3130,8 +3130,8 @@ msgid "Congratulations, the Kodi video library has been configured correctly." msgstr "Felicidades la videoteca de Kodi ha sido configurada correctamente." msgctxt "#70105" -msgid "Do you want Alfa to automatically configure the Kodi library?You will be asked to set up scrapers for movies and series." -msgstr "¿Desea que Alfa auto-configure la videoteca de Kodi?Se le pedirá que configure los scrapers para las películas y las series." +msgid "Do you want Icarus to automatically configure the Kodi library?You will be asked to set up scrapers for movies and series." +msgstr "¿Desea que Icarus auto-configure la videoteca de Kodi?Se le pedirá que configure los scrapers para las películas y las series." msgctxt "#70106" msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." @@ -3190,8 +3190,8 @@ msgid "Folder name for 'Movies'" msgstr "Nombre de carpeta para 'Peliculas'" msgctxt "#70120" -msgid "Autoconfigure XBMC / Kodi library for Alfa content" -msgstr "Autoconfigurar videoteca de XBMC/Kodi para contenido de Alfa" +msgid "Autoconfigure XBMC / Kodi library for Icarus content" +msgstr "Autoconfigurar videoteca de XBMC/Kodi para contenido de Icarus" msgctxt "#70121" msgid "Activate Home Page" @@ -3535,39 +3535,11 @@ msgstr " - Películas 4K " msgctxt "#70208" msgid "Movies 4K" -msgstr Películas 4K" - -msgctxt "#70209" -msgid "Horror movies" -msgstr Peliculas de miedo!" - -msgctxt "#70210" -msgid " (In %s and %s)" -msgstr " (En %s y %s)" - -msgctxt "#70211" -msgid " (In %s)" -msgstr " (En %s)" - -msgctxt "#70212" -msgid " - Castellan" -msgstr " - Castellano" - -msgctxt "#70213" -msgid " - Latin" -msgstr " - Latino" - -msgctxt "#70214" -msgid " - Torrent" -msgstr " - Torrent" - -msgctxt "#70208" -msgid "Movies 4K" -msgstr Películas 4K +msgstr "Películas 4K" msgctxt "#70209" msgid "Horror movies!" -msgstr "Peliculas de miedo! +msgstr "Peliculas de miedo!" msgctxt "#70210" msgid " (In %s and %s)" @@ -3589,4 +3561,14 @@ msgctxt "#70214" msgid " - Torrent" msgstr " - Torrent" +msgctxt "#70215" +msgid "TEST THIS CHANNEL" +msgstr "TESTEAR ESTE CANAL" + + + + + + + diff --git a/plugin.video.alfa/resources/language/Spanish/strings.po b/plugin.video.alfa/resources/language/Spanish/strings.po index 77fe4fff..0d990180 100644 --- a/plugin.video.alfa/resources/language/Spanish/strings.po +++ b/plugin.video.alfa/resources/language/Spanish/strings.po @@ -338,8 +338,8 @@ msgid "Looking for %s..." msgstr "Buscando %s..." msgctxt "#30994" -msgid "Searching in %s" -msgstr "Buscando en %s" +msgid "Searching in %s..." +msgstr "Buscando en %s..." msgctxt "#30995" msgid "%d found so far: %s" @@ -563,83 +563,83 @@ msgstr "Comprueba el log para ver mas detalles del error." msgctxt "#60016" msgid "Segna film come non visto" -msgstr "Marcar película como no vista" +msgstr "Segna film come non visto" msgctxt "#60017" msgid "Mark movie as not watched" -msgstr "Marcar película como vista" +msgstr "Segna film come visto" msgctxt "#60018" msgid "Delete movie/channel" -msgstr "Eliminar película/canal" +msgstr "Elimina film/canale" msgctxt "#60019" msgid "Delete this movie" -msgstr "Eliminar esta película" +msgstr "Elimina questo film" msgctxt "#60020" msgid "Mark tv series as not watched" -msgstr "Marcar serie como no vista" +msgstr "Segna serie come non vista" msgctxt "#60021" msgid "Mark tv series as watched" -msgstr "Marcar serie como vista" +msgstr "Segna serie come vista" msgctxt "#60022" msgid "Automatically find new episodes: Disable" -msgstr Buscar automáticamente nuevos episodios: Desactivar" +msgstr "Trova automaticamente nuovi episodi: Disattiva" msgctxt "#60023" msgid "Automatically find new episodes: Enable" -msgstr "Buscar automáticamente nuevos episodios: Activar" +msgstr "Trova automaticamente nuovi episodi: Attiva" msgctxt "#60024" msgid "Delete tv series/channel" -msgstr "Eliminar serie/canal" +msgstr "Elimina serie/canale" msgctxt "#60025" msgid "Delete tv series" -msgstr "Eliminar esta serie" +msgstr "Elimina serie" msgctxt "#60026" msgid "Search for new episodes and update" -msgstr "Buscar nuevos episodios y actualizar videoteca" +msgstr "Cerca nuovi episodi e aggiorna" msgctxt "#60027" msgid "Season %s" -msgstr "Temporada %s" +msgstr "Stagione %s" msgctxt "#60028" msgid "Segna stagione come non vista" -msgstr "Marcar temporada como no vista" +msgstr "Segna stagione come non vista" msgctxt "#60029" msgid "Mark season as not watched" -msgstr "Marcar temporada como vista" +msgstr "Segna stagione come vista" msgctxt "#60030" msgid "*All the seasons" -msgstr "*Todas las temporadas" +msgstr "*Tutte le stagioni" msgctxt "#60031" msgid "Season %s Episode %s" -msgstr "Temporada %s Episodio %s" +msgstr "Stagione %s Episodio %s" msgctxt "#60032" msgid "Mark episode as not watched" -msgstr "Marcar episodio como no visto" +msgstr "Segna episodio come non visto" msgctxt "#60033" msgid "Mark episode as watched" -msgstr "Marcar episodio como visto" +msgstr "Segna episodio come visto" msgctxt "#60034" msgid "Show only link %s" -msgstr "Mostrar solo los enlaces de %s" +msgstr "Mostra solo link %s" msgctxt "#60035" msgid "Show all the links" -msgstr "Mostrar todos los enlaces" +msgstr "Mosta tutti i collegamenti" msgctxt "#60036" msgid "Episode %s" @@ -647,7 +647,7 @@ msgstr "Episodio %s" msgctxt "#60037" msgid "Tv series update ..." -msgstr "Actualizando serie...." +msgstr "Aggiornamento serie ..." msgctxt "#60038" msgid "An error has occurred on alfa" @@ -659,27 +659,27 @@ msgstr "Error en el canal %s" msgctxt "#60040" msgid "Delete movie" -msgstr "Eliminar película" +msgstr "Rimuovere film" msgctxt "#60041" msgid "Delete tv series" -msgstr "Eliminar serie" +msgstr "Rimuovere serie" msgctxt "#60042" msgid "Delete only the links of %s" -msgstr "Eliminar solo los enlaces de %s" +msgstr "Rimuovere solo i link dei %s" msgctxt "#60043" msgid "Delete %s links of channel %s" -msgstr "Eliminados %s enlaces del canal %s" +msgstr "Cancellati %s collegamenti del canale %s" msgctxt "#60044" msgid "Do you want really to delete '%s' from videolibrary?" -msgstr "¿Realmente desea eliminar '%s' de su videoteca?" +msgstr "Vuoi davvero rimuovere '%s' dalla videoteca?" msgctxt "#60045" msgid "Sync with Trakt started" -msgstr "Sincronizacion con Trakt iniciada" +msgstr "Sincronizzazione con Trakt iniziata" msgctxt "#60046" msgid "TheMovieDB not present.\nInstall it now?" @@ -807,7 +807,7 @@ msgstr " Servidores favoritos" msgctxt "#60082" msgid " \u2665 Favorite server %s" -msgstr " \u2665 Servidor Favorito %s +msgstr " \u2665 Servidor Favorito %s" msgctxt "#60083" msgid " Preferred Qualities" @@ -1098,8 +1098,8 @@ msgid "Problem in the connection process" msgstr "Fallo en el proceso de vinculación" msgctxt "#60261" -msgid "Alfa" -msgstr "Alfa" +msgid "Icarus" +msgstr "Icarus" msgctxt "#60262" msgid "You can install the Trakt script below, once installed and configured what you see will be automatically synchronized with your account." @@ -1502,8 +1502,8 @@ msgid "The server on which it is hosted" msgstr "El servidor donde está alojado no está" msgctxt "#60364" -msgid "is not yet supported in Alfa" -msgstr "soportado en Alfa todavía" +msgid "is not yet supported in Icarus" +msgstr "soportado en alfa todavía" msgctxt "#60365" msgid "Loading video..." @@ -1838,8 +1838,8 @@ msgid " - Links of interest" msgstr " - Collegamenti di interesse" msgctxt "#60457" -msgid "Alfa" -msgstr "Alfa" +msgid "Icarus" +msgstr "Icarus" msgctxt "#60458" msgid "The disabling can be done in 'Settings>Turn on/off channels'. You can toggle channels on/off one at a time or all at the same time. Want to manage your channels now?" @@ -1854,11 +1854,11 @@ msgid "This can be improved by limiting the maximum number of links or by displa msgstr "Questo può essere migliorato limitando il numero massimo di collegamenti o visualizzandoli in una finestra Pop-Up. Queste impostazioni possono essere trovate in 'Impostazioni>Impostazioni libreria' Vuoi accedere a queste impostazioni?" msgctxt "#60461" -msgid "Alfa - FAQ - %s" -msgstr "Alfa- FAQ - %s" +msgid "Icarus - FAQ - %s" +msgstr "Icarus- FAQ - %s" msgctxt "#60462" -msgid "You may not have written the library path correctly in 'Settings>Preferences'.\nIl The specified path must be exactly the same as the 'source' entered in 'Archive' of the Kodi library.\nAVANZATO: This path is also found in 'sources.xml'.\nThere can be problems using some Kodi forks and paths with 'special://'. SPMC, for example, has problems with this, and there doesn't seem to be a solution, as it is an external problem to Alfa that has existed for a long time.\nYou can try solving these problems in 'Settings>Library Settings' by changing the 'Search in' setting from 'The folder of each series' to 'All library'." +msgid "You may not have written the library path correctly in 'Settings>Preferences'.\nIl The specified path must be exactly the same as the 'source' entered in 'Archive' of the Kodi library.\nAVANZATO: This path is also found in 'sources.xml'.\nThere can be problems using some Kodi forks and paths with 'special://'. SPMC, for example, has problems with this, and there doesn't seem to be a solution, as it is an external problem to Icarus that has existed for a long time.\nYou can try solving these problems in 'Settings>Library Settings' by changing the 'Search in' setting from 'The folder of each series' to 'All library'." msgstr "Potresti non aver scritto correttamente il percorso della libreria in 'Impostazioni>Preferenze'.\nIl percorso specificato deve essere esattamente uguale al 'sorgente' inserito in 'Archivio' della libreria di Kodi.\nAVANZATO: Questo percorso si trova anche in 'sources.xml'.\nPotresti riscontrare dei problemi utilizzando alcuni fork di Kodi e percorsi con 'special://'. SPMC, per esempio, ha problemi con questo, e non sembra esserci una soluzione, poichè è un problema esterno ad Orion che esiste da molto tempo.\nPuoi provare a risolvere questi problemi in 'Impostazioni>Impostazioni libreria', modificando l'impostazione 'Esegui ricerca contenuto in' da 'La cartella di ogni serie' in 'Tutta la libreria'." msgctxt "#60463" @@ -1866,7 +1866,7 @@ msgid "The channel site may not work. In case the site works you can report the msgstr "Può darsi che il sito del canale non funzioni. Nel caso il sito funzioni puoi segnalare il problema su github." msgctxt "#60464" -msgid "It is possible that you have updated Alfa recently and that the changes have not been fully applied Well, you can try 'Settings>Other Tools', checking the *_data.json files or reattaching everything to the library again" +msgid "It is possible that you have updated Icarus recently and that the changes have not been fully applied Well, you can try 'Settings>Other Tools', checking the *_data.json files or reattaching everything to the library again" msgstr "È Possibile che tu abbia aggiornato Orion di recente e che i cambiamenti non siano stati totalmente applicati Bene, puoi provare in 'Impostazioni>Altri strumenti', controllando i files *_data.json o riaggiungendo tutto ancora alla libreria" msgctxt "#60465" @@ -1879,7 +1879,7 @@ msgstr "Sì, l'opzione per mostrare i risultati uniti o divisi per canali si tro msgctxt "#60467" msgid "To report a problem on'http://alfa-addon.com' you need to:|the version you're using of Alpha.|The version you're using of kodi, mediaserver, etc.|the version and name of the operating system you're using.|The name of the skin (in case you're using Kodi) and whether using the default skin has solved the problem.|Description of the problem and any test cases.To activate the log in detailed mode, go to:|Configuration.|Preferences.|In the General tab - Check the option: Generate detailed log. The detailed log file can be found in the following path: \n\n%s" -msgstr "Para reportar un problema en 'http://alfa-addon.com' es necesario:\n - Versión que usas de Alfa.\n - Versión que usas de kodi, mediaserver, etc.\n - Versión y nombre del sistema operativo que usas.\n - Nombre del skin (en el caso que uses Kodi) y si se te ha resuelto el problema al usar el skin por defecto.\n - Descripción del problema y algún caso de prueba.\n - Agregar el log en modo detallado, una vez hecho esto, zipea el log y lo puedes adjuntar en un post.\n\nPara activar el log en modo detallado, ingresar a:\n - Configuración.\n - Preferencias.\n - En la pestaña General - Marcar la opción: Generar log detallado.\n\nEl archivo de log detallado se encuentra en la siguiente ruta: \n\n%s" +msgstr "Para reportar un problema en 'http://alfa-addon.com' es necesario:\n - Versión que usas de Icarus.\n - Versión que usas de kodi, mediaserver, etc.\n - Versión y nombre del sistema operativo que usas.\n - Nombre del skin (en el caso que uses Kodi) y si se te ha resuelto el problema al usar el skin por defecto.\n - Descripción del problema y algún caso de prueba.\n - Agregar el log en modo detallado, una vez hecho esto, zipea el log y lo puedes adjuntar en un post.\n\nPara activar el log en modo detallado, ingresar a:\n - Configuración.\n - Preferencias.\n - En la pestaña General - Marcar la opción: Generar log detallado.\n\nEl archivo de log detallado se encuentra en la siguiente ruta: \n\n%s" msgctxt "#60468" msgid "You can find our Telegram channel at @StreamOnDemandOfficial\nSe you have doubts you can write to us in the Telegram group: https://bit.ly/2I3kRwF" @@ -3030,8 +3030,8 @@ msgid "Remove only links of " msgstr "Eliminar solo los enlaces de " msgctxt "#70080" -msgid "Do you want Alfa to auto-configure Kodi's video library?" -msgstr "¿Desea que Alfa auto-configure la videoteca de Kodi?" +msgid "Do you want Icarus to auto-configure Kodi's video library?" +msgstr "¿Desea que Icarus auto-configure la videoteca de Kodi?" msgctxt "#70081" msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." @@ -3130,8 +3130,8 @@ msgid "Congratulations, the Kodi video library has been configured correctly." msgstr "Felicidades la videoteca de Kodi ha sido configurada correctamente." msgctxt "#70105" -msgid "Do you want Alfa to automatically configure the Kodi library?You will be asked to set up scrapers for movies and series." -msgstr "¿Desea que Alfa auto-configure la videoteca de Kodi?Se le pedirá que configure los scrapers para las películas y las series." +msgid "Do you want Icarus to automatically configure the Kodi library?You will be asked to set up scrapers for movies and series." +msgstr "¿Desea que Icarus auto-configure la videoteca de Kodi?Se le pedirá que configure los scrapers para las películas y las series." msgctxt "#70106" msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." @@ -3190,8 +3190,8 @@ msgid "Folder name for 'Movies'" msgstr "Nombre de carpeta para 'Peliculas'" msgctxt "#70120" -msgid "Autoconfigure XBMC / Kodi library for Alfa content" -msgstr "Autoconfigurar videoteca de XBMC/Kodi para contenido de Alfa" +msgid "Autoconfigure XBMC / Kodi library for Icarus content" +msgstr "Autoconfigurar videoteca de XBMC/Kodi para contenido de Icarus" msgctxt "#70121" msgid "Activate Home Page" @@ -3535,39 +3535,11 @@ msgstr " - Películas 4K " msgctxt "#70208" msgid "Movies 4K" -msgstr Películas 4K" - -msgctxt "#70209" -msgid "Horror movies" -msgstr Peliculas de miedo!" - -msgctxt "#70210" -msgid " (In %s and %s)" -msgstr " (En %s y %s)" - -msgctxt "#70211" -msgid " (In %s)" -msgstr " (En %s)" - -msgctxt "#70212" -msgid " - Castellan" -msgstr " - Castellano" - -msgctxt "#70213" -msgid " - Latin" -msgstr " - Latino" - -msgctxt "#70214" -msgid " - Torrent" -msgstr " - Torrent" - -msgctxt "#70208" -msgid "Movies 4K" -msgstr Películas 4K +msgstr "Películas 4K" msgctxt "#70209" msgid "Horror movies!" -msgstr "Peliculas de miedo! +msgstr "Peliculas de miedo!" msgctxt "#70210" msgid " (In %s and %s)" @@ -3589,4 +3561,14 @@ msgctxt "#70214" msgid " - Torrent" msgstr " - Torrent" +msgctxt "#70215" +msgid "TEST THIS CHANNEL" +msgstr "TESTEAR ESTE CANAL" + + + + + + + From 73e7a73270213ffa88a33d7c81c008e6231fa44d Mon Sep 17 00:00:00 2001 From: angedam Date: Tue, 19 Jun 2018 13:07:11 +0200 Subject: [PATCH 19/66] fix translation --- plugin.video.alfa/core/downloader.py | 546 +++++++++++++++++++++++++++ 1 file changed, 546 insertions(+) create mode 100644 plugin.video.alfa/core/downloader.py diff --git a/plugin.video.alfa/core/downloader.py b/plugin.video.alfa/core/downloader.py new file mode 100644 index 00000000..6efb1554 --- /dev/null +++ b/plugin.video.alfa/core/downloader.py @@ -0,0 +1,546 @@ +# -*- coding: utf-8 -*- + +""" +Clase Downloader +Downloader(url, path [, filename, headers, resume]) + + url : string - url para descargar + path : string - Directorio donde se guarda la descarga + filename : [opt] string - Nombre de archivo para guardar + headers : [opt] dict - Headers para usar en la descarga + resume : [opt] bool - continuar una descarga previa en caso de existir, por defecto True + + +metodos: + start_dialog() Inicia la descarga mostrando el progreso + start() Inicia la descarga en segundo plano + stop(erase = False) Detiene la descarga, con erase = True elimina los datos descargados + +""" +import mimetypes +import os +import re +import sys +import threading +import time +import urllib +import urllib2 +import urlparse +from threading import Thread, Lock + +from core import filetools +from platformcode import logger + + +class Downloader: + @property + def state(self): + return self._state + + @property + def connections(self): + return len([c for c in self._download_info["parts"] if + c["status"] in [self.states.downloading, self.states.connecting]]), self._max_connections + + @property + def downloaded(self): + return self.__change_units__(sum([c["current"] - c["start"] for c in self._download_info["parts"]])) + + @property + def average_speed(self): + return self.__change_units__(self._average_speed) + + @property + def speed(self): + return self.__change_units__(self._speed) + + @property + def remaining_time(self): + if self.speed[0] and self._file_size: + t = (self.size[0] - self.downloaded[0]) / self.speed[0] + else: + t = 0 + + return time.strftime("%H:%M:%S", time.gmtime(t)) + + @property + def download_url(self): + return self.url + + @property + def size(self): + return self.__change_units__(self._file_size) + + @property + def progress(self): + if self._file_size: + return float(self.downloaded[0]) * 100 / float(self._file_size) + elif self._state == self.states.completed: + return 100 + else: + return 0 + + @property + def filename(self): + return self._filename + + @property + def fullpath(self): + return os.path.abspath(filetools.join(self._path, self._filename)) + + # Funciones + def start_dialog(self, title="Descargando..."): + from platformcode import platformtools + progreso = platformtools.dialog_progress(title, "Iniciando descarga...") + self.start() + while self.state == self.states.downloading and not progreso.iscanceled(): + time.sleep(0.1) + line1 = "%s" % (self.filename) + line2 = "%.2f%% - %.2f %s de %.2f %s a %.2f %s/s (%d/%d)" % ( + self.progress, self.downloaded[1], self.downloaded[2], self.size[1], self.size[2], + self.speed[1], self.speed[2], self.connections[0], self.connections[1]) + line3 = "Tiempo restante: %s" % (self.remaining_time) + + progreso.update(int(self.progress), line1, line2, line3) + if self.state == self.states.downloading: + self.stop() + progreso.close() + + def start(self): + if self._state == self.states.error: return + conns = [] + for x in range(self._max_connections): + try: + conns.append(self.__open_connection__("0", "")) + except: + self._max_connections = x + self._threads = [ + Thread(target=self.__start_part__, name="Downloader %s/%s" % (x + 1, self._max_connections)) for x + in range(self._max_connections)] + break + del conns + self._start_time = time.time() - 1 + self._state = self.states.downloading + self._speed_thread.start() + self._save_thread.start() + + for t in self._threads: t.start() + + def stop(self, erase=False): + if self._state == self.states.downloading: + # Detenemos la descarga + self._state = self.states.stopped + for t in self._threads: + if t.isAlive(): t.join() + + if self._save_thread.isAlive(): self._save_thread.join() + + if self._seekable: + # Guardamos la info al final del archivo + self.file.seek(0, 2) + offset = self.file.tell() + self.file.write(str(self._download_info)) + self.file.write("%0.16d" % offset) + + self.file.close() + + if erase: os.remove(filetools.join(self._path, self._filename)) + + def __speed_metter__(self): + self._speed = 0 + self._average_speed = 0 + + downloaded = self._start_downloaded + downloaded2 = self._start_downloaded + t = time.time() + t2 = time.time() + time.sleep(1) + + while self.state == self.states.downloading: + self._average_speed = (self.downloaded[0] - self._start_downloaded) / (time.time() - self._start_time) + self._speed = (self.downloaded[0] - self._start_downloaded) / (time.time() - self._start_time) + # self._speed = (self.downloaded[0] - downloaded) / (time.time() -t) + + if time.time() - t > 5: + t = t2 + downloaded = downloaded2 + t2 = time.time() + downloaded2 = self.downloaded[0] + + time.sleep(0.5) + + # Funciones internas + def __init__(self, url, path, filename=None, headers=[], resume=True, max_connections=10, block_size=2 ** 17, + part_size=2 ** 24, max_buffer=10): + # Parametros + self._resume = resume + self._path = path + self._filename = filename + self._max_connections = max_connections + self._block_size = block_size + self._part_size = part_size + self._max_buffer = max_buffer + + try: + import xbmc + self.tmp_path = xbmc.translatePath("special://temp/") + except: + self.tmp_path = os.getenv("TEMP") or os.getenv("TMP") or os.getenv("TMPDIR") + + self.states = type('states', (), + {"stopped": 0, "connecting": 1, "downloading": 2, "completed": 3, "error": 4, "saving": 5}) + + self._state = self.states.stopped + self._download_lock = Lock() + self._headers = { + "User-Agent": "Kodi/15.2 (Windows NT 10.0; WOW64) App_Bitness/32 Version/15.2-Git:20151019-02e7013"} + self._speed = 0 + self._buffer = {} + self._seekable = True + + self._threads = [Thread(target=self.__start_part__, name="Downloader %s/%s" % (x + 1, self._max_connections)) + for x in range(self._max_connections)] + self._speed_thread = Thread(target=self.__speed_metter__, name="Speed Meter") + self._save_thread = Thread(target=self.__save_file__, name="File Writer") + + # Actualizamos los headers + self._headers.update(dict(headers)) + + # Separamos los headers de la url + self.__url_to_headers__(url) + + # Obtenemos la info del servidor + self.__get_download_headers__() + + self._file_size = int(self.response_headers.get("content-length", "0")) + + if not self.response_headers.get("accept-ranges") == "bytes" or self._file_size == 0: + self._max_connections = 1 + self._part_size = 0 + self._resume = False + + # Obtenemos el nombre del archivo + self.__get_download_filename__() + + # Abrimos en modo "a+" para que cree el archivo si no existe, luego en modo "r+b" para poder hacer seek() + self.file = filetools.file_open(filetools.join(self._path, self._filename), "a+") + self.file = filetools.file_open(filetools.join(self._path, self._filename), "r+b") + + if self._file_size >= 2 ** 31 or not self._file_size: + try: + self.file.seek(2 ** 31) + except OverflowError: + self._seekable = False + logger.info("No se puede hacer seek() ni tell() en ficheros mayores de 2GB") + + self.__get_download_info__() + + logger.info("Descarga inicializada: Partes: %s | Ruta: %s | Archivo: %s | Tamaño: %s" % ( + len(self._download_info["parts"]), self._path, self._filename, self._download_info["size"])) + + def __url_to_headers__(self, url): + # Separamos la url de los headers adicionales + self.url = url.split("|")[0] + + # headers adicionales + if "|" in url: + self._headers.update(dict([[header.split("=")[0], urllib.unquote_plus(header.split("=")[1])] for header in + url.split("|")[1].split("&")])) + + def __get_download_headers__(self): + if self.url.startswith("https"): + try: + conn = urllib2.urlopen(urllib2.Request(self.url.replace("https", "http"), headers=self._headers)) + conn.fp._sock.close() + self.url = self.url.replace("https", "http") + except: + pass + + for x in range(3): + try: + if not sys.hexversion > 0x0204FFFF: + conn = urllib2.urlopen(urllib2.Request(self.url, headers=self._headers)) + conn.fp._sock.close() + else: + conn = urllib2.urlopen(urllib2.Request(self.url, headers=self._headers), timeout=5) + + except: + self.response_headers = dict() + self._state = self.states.error + else: + self.response_headers = conn.headers.dict + self._state = self.states.stopped + break + + def __get_download_filename__(self): + # Obtenemos nombre de archivo y extension + if "filename" in self.response_headers.get("content-disposition", + "") and "attachment" in self.response_headers.get( + "content-disposition", ""): + cd_filename, cd_ext = os.path.splitext(urllib.unquote_plus( + re.compile("attachment; filename ?= ?[\"|']?([^\"']+)[\"|']?").match( + self.response_headers.get("content-disposition")).group(1))) + if "filename" in self.response_headers.get("content-disposition", "") and "inline" in self.response_headers.get( + "content-disposition", ""): + cd_filename, cd_ext = os.path.splitext(urllib.unquote_plus( + re.compile("inline; filename ?= ?[\"|']?([^\"']+)[\"|']?").match( + self.response_headers.get("content-disposition")).group(1))) + else: + cd_filename, cd_ext = "", "" + + url_filename, url_ext = os.path.splitext( + urllib.unquote_plus(filetools.basename(urlparse.urlparse(self.url)[2]))) + if self.response_headers.get("content-type", "application/octet-stream") <> "application/octet-stream": + mime_ext = mimetypes.guess_extension(self.response_headers.get("content-type")) + else: + mime_ext = "" + + # Seleccionamos el nombre mas adecuado + if cd_filename: + self.remote_filename = cd_filename + if not self._filename: + self._filename = cd_filename + + elif url_filename: + self.remote_filename = url_filename + if not self._filename: + self._filename = url_filename + + # Seleccionamos la extension mas adecuada + if cd_ext: + if not cd_ext in self._filename: self._filename += cd_ext + if self.remote_filename: self.remote_filename += cd_ext + elif mime_ext: + if not mime_ext in self._filename: self._filename += mime_ext + if self.remote_filename: self.remote_filename += mime_ext + elif url_ext: + if not url_ext in self._filename: self._filename += url_ext + if self.remote_filename: self.remote_filename += url_ext + + def __change_units__(self, value): + import math + units = ["B", "KB", "MB", "GB"] + if value <= 0: + return 0, 0, units[0] + else: + return value, value / 1024.0 ** int(math.log(value, 1024)), units[int(math.log(value, 1024))] + + def __get_download_info__(self): + # Continuamos con una descarga que contiene la info al final del archivo + self._download_info = {} + + try: + if not self._resume: + raise Exception() + self.file.seek(-16, 2) + offset = int(self.file.read()) + self.file.seek(offset) + data = self.file.read()[:-16] + self._download_info = eval(data) + if not self._download_info["size"] == self._file_size: + raise Exception() + self.file.seek(offset) + self.file.truncate() + + if not self._seekable: + for part in self._download_info["parts"]: + if part["start"] >= 2 ** 31 and part["status"] == self.states.completed: + part["status"] == self.states.stopped + part["current"] == part["start"] + + self._start_downloaded = sum([c["current"] - c["start"] for c in self._download_info["parts"]]) + self.pending_parts = set( + [x for x, a in enumerate(self._download_info["parts"]) if not a["status"] == self.states.completed]) + self.completed_parts = set( + [x for x, a in enumerate(self._download_info["parts"]) if a["status"] == self.states.completed]) + self.save_parts = set() + self.download_parts = set() + + # La info no existe o no es correcta, comenzamos de 0 + except: + self._download_info["parts"] = [] + if self._file_size and self._part_size: + for x in range(0, self._file_size, self._part_size): + end = x + self._part_size - 1 + if end >= self._file_size: end = self._file_size - 1 + self._download_info["parts"].append( + {"start": x, "end": end, "current": x, "status": self.states.stopped}) + else: + self._download_info["parts"].append( + {"start": 0, "end": self._file_size - 1, "current": 0, "status": self.states.stopped}) + + self._download_info["size"] = self._file_size + self._start_downloaded = 0 + self.pending_parts = set([x for x in range(len(self._download_info["parts"]))]) + self.completed_parts = set() + self.save_parts = set() + self.download_parts = set() + + self.file.seek(0) + self.file.truncate() + + def __open_connection__(self, start, end): + headers = self._headers.copy() + if not end: end = "" + headers.update({"Range": "bytes=%s-%s" % (start, end)}) + if not sys.hexversion > 0x0204FFFF: + conn = urllib2.urlopen(urllib2.Request(self.url, headers=headers)) + else: + conn = urllib2.urlopen(urllib2.Request(self.url, headers=headers), timeout=5) + return conn + + def __check_consecutive__(self, id): + return id == 0 or (len(self.completed_parts) >= id and sorted(self.completed_parts)[id - 1] == id - 1) + + def __save_file__(self): + logger.info("Thread iniciado: %s" % threading.current_thread().name) + + while self._state == self.states.downloading: + if not self.pending_parts and not self.download_parts and not self.save_parts: # Descarga finalizada + self._state = self.states.completed + self.file.close() + continue + + elif not self.save_parts: + continue + + save_id = min(self.save_parts) + + if not self._seekable and self._download_info["parts"][save_id][ + "start"] >= 2 ** 31 and not self.__check_consecutive__(save_id): + continue + + if self._seekable or self._download_info["parts"][save_id]["start"] < 2 ** 31: + self.file.seek(self._download_info["parts"][save_id]["start"]) + + try: + # file = open(os.path.join(self.tmp_path, self._filename + ".part%s" % save_id), "rb") + # self.file.write(file.read()) + # file.close() + # os.remove(os.path.join(self.tmp_path, self._filename + ".part%s" % save_id)) + for a in self._buffer.pop(save_id): + self.file.write(a) + self.save_parts.remove(save_id) + self.completed_parts.add(save_id) + self._download_info["parts"][save_id]["status"] = self.states.completed + except: + import traceback + logger.error(traceback.format_exc()) + self._state = self.states.error + + if self.save_parts: + for s in self.save_parts: + self._download_info["parts"][s]["status"] = self.states.stopped + self._download_info["parts"][s]["current"] = self._download_info["parts"][s]["start"] + + logger.info("Thread detenido: %s" % threading.current_thread().name) + + def __get_part_id__(self): + self._download_lock.acquire() + if len(self.pending_parts): + id = min(self.pending_parts) + self.pending_parts.remove(id) + self.download_parts.add(id) + self._download_lock.release() + return id + else: + self._download_lock.release() + return None + + def __set_part_connecting__(self, id): + logger.info("ID: %s Estableciendo conexión" % id) + self._download_info["parts"][id]["status"] = self.states.connecting + + def __set_part__error__(self, id): + logger.info("ID: %s Error al descargar" % id) + self._download_info["parts"][id]["status"] = self.states.error + self.pending_parts.add(id) + self.download_parts.remove(id) + + def __set_part__downloading__(self, id): + logger.info("ID: %s Descargando datos..." % id) + self._download_info["parts"][id]["status"] = self.states.downloading + + def __set_part_completed__(self, id): + logger.info("ID: %s ¡Descarga finalizada!" % id) + self._download_info["parts"][id]["status"] = self.states.saving + self.download_parts.remove(id) + self.save_parts.add(id) + while self._state == self.states.downloading and len(self._buffer) > self._max_connections + self._max_buffer: + time.sleep(0.1) + + def __set_part_stopped__(self, id): + if self._download_info["parts"][id]["status"] == self.states.downloading: + self._download_info["parts"][id]["status"] = self.states.stopped + self.download_parts.remove(id) + self.pending_parts.add(id) + + def __open_part_file__(self, id): + file = open(os.path.join(self.tmp_path, self._filename + ".part%s" % id), "a+") + file = open(os.path.join(self.tmp_path, self._filename + ".part%s" % id), "r+b") + file.seek(self._download_info["parts"][id]["current"] - self._download_info["parts"][id]["start"]) + return file + + def __start_part__(self): + logger.info("Thread Iniciado: %s" % threading.current_thread().name) + while self._state == self.states.downloading: + id = self.__get_part_id__() + if id is None: break + + self.__set_part_connecting__(id) + + try: + connection = self.__open_connection__(self._download_info["parts"][id]["current"], + self._download_info["parts"][id]["end"]) + except: + self.__set_part__error__(id) + time.sleep(5) + continue + + self.__set_part__downloading__(id) + # file = self.__open_part_file__(id) + + if not id in self._buffer: + self._buffer[id] = [] + speed = [] + + while self._state == self.states.downloading: + try: + start = time.time() + buffer = connection.read(self._block_size) + speed.append(len(buffer) / ((time.time() - start) or 0.001)) + except: + logger.info("ID: %s Error al descargar los datos" % id) + self._download_info["parts"][id]["status"] = self.states.error + self.pending_parts.add(id) + self.download_parts.remove(id) + break + else: + if len(buffer) and self._download_info["parts"][id]["current"] < self._download_info["parts"][id][ + "end"]: + # file.write(buffer) + self._buffer[id].append(buffer) + self._download_info["parts"][id]["current"] += len(buffer) + if len(speed) > 10: + velocidad_minima = sum(speed) / len(speed) / 3 + velocidad = speed[-1] + vm = self.__change_units__(velocidad_minima) + v = self.__change_units__(velocidad) + + if velocidad_minima > speed[-1] and velocidad_minima > speed[-2] and \ + self._download_info["parts"][id]["current"] < \ + self._download_info["parts"][id]["end"]: + connection.fp._sock.close() + logger.info( + "ID: %s ¡Reiniciando conexión! | Velocidad minima: %.2f %s/s | Velocidad: %.2f %s/s" % \ + (id, vm[1], vm[2], v[1], v[2])) + # file.close() + break + else: + self.__set_part_completed__(id) + connection.fp._sock.close() + # file.close() + break + + self.__set_part_stopped__(id) + logger.info("Thread detenido: %s" % threading.current_thread().name) From 68b5f77e93ae77183a2540b1acfc9559651f41d9 Mon Sep 17 00:00:00 2001 From: Kevin Date: Thu, 21 Jun 2018 17:25:43 +0200 Subject: [PATCH 20/66] Multilang support --- mediaserver/platformcode/config.py | 3 +-- mediaserver/resources/settings.xml | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mediaserver/platformcode/config.py b/mediaserver/platformcode/config.py index 832bc738..cd810bd2 100644 --- a/mediaserver/platformcode/config.py +++ b/mediaserver/platformcode/config.py @@ -368,9 +368,8 @@ menufilepath = os.path.join(get_runtime_path(), "resources", "settings.xml") configfilepath = os.path.join(get_data_path(), "settings.xml") if not os.path.exists(get_data_path()): os.mkdir(get_data_path()) -# Literales -TRANSLATION_FILE_PATH = os.path.join(get_runtime_path(), "resources", "language", "Spanish", "strings.po") load_settings() +TRANSLATION_FILE_PATH = os.path.join(get_runtime_path(), "resources", "language", settings_dic["mediacenter_language"], "strings.po") # modo adulto: # sistema actual 0: Nunca, 1:Siempre, 2:Solo hasta que se reinicie sesión diff --git a/mediaserver/resources/settings.xml b/mediaserver/resources/settings.xml index 5fe48645..8a7e6746 100644 --- a/mediaserver/resources/settings.xml +++ b/mediaserver/resources/settings.xml @@ -7,7 +7,8 @@ - + + From f63cca2780fc2bb163d9667cd4d1c7a8e902b0b7 Mon Sep 17 00:00:00 2001 From: angedam Date: Fri, 22 Jun 2018 17:04:11 +0200 Subject: [PATCH 21/66] fix translation --- plugin.video.alfa/resources/language/English/strings.po | 8 ++++++++ plugin.video.alfa/resources/language/Italian/strings.po | 6 +++++- .../resources/language/Spanish (Argentina)/strings.po | 6 +++++- .../resources/language/Spanish (Mexico)/strings.po | 6 +++++- plugin.video.alfa/resources/language/Spanish/strings.po | 6 +++++- 5 files changed, 28 insertions(+), 4 deletions(-) diff --git a/plugin.video.alfa/resources/language/English/strings.po b/plugin.video.alfa/resources/language/English/strings.po index bec61536..b9b03abd 100644 --- a/plugin.video.alfa/resources/language/English/strings.po +++ b/plugin.video.alfa/resources/language/English/strings.po @@ -249,6 +249,10 @@ msgctxt "#30200" msgid "Square" msgstr "" +msgctxt "#30300" +msgid "Faster context menus" +msgstr "" + msgctxt "#30501" msgid "Paths" msgstr "" @@ -3590,3 +3594,7 @@ msgctxt "#70215" msgid "TEST THIS CHANNEL" msgstr "" +msgctxt "#70216" +msgid "Back" +msgstr "" + diff --git a/plugin.video.alfa/resources/language/Italian/strings.po b/plugin.video.alfa/resources/language/Italian/strings.po index d94d0228..536722dd 100644 --- a/plugin.video.alfa/resources/language/Italian/strings.po +++ b/plugin.video.alfa/resources/language/Italian/strings.po @@ -3139,7 +3139,7 @@ msgstr "Vuoi che Alfa auto-configuri la videoteca di Kodi?Ti verrà chiesto di i msgctxt "#70106" msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." -msgstr "Si Scegli 'No' potrai farlo in seguito da 'Ipostazioni > Preferenze > Percorsi'." +msgstr "Se Scegli 'No' potrai farlo in seguito da 'Impostazioni > Preferenze > Percorsi'." msgctxt "#70107" msgid "Select scraper for Tv Shows" @@ -3577,4 +3577,8 @@ msgctxt "#70215" msgid "TEST THIS CHANNEL" msgstr "TESTA QUESTO CANALE" +msgctxt "#70216" +msgid "Back" +msgstr "Indietro" + diff --git a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po index 0d990180..9a97e639 100644 --- a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po @@ -83,7 +83,7 @@ msgstr "Directorio de lista descargas:" msgctxt "#30019" msgid "Filter channels by language:" -msgstr "Filter channels by language:" +msgstr "Filtrar canales para idioma:" msgctxt "#30043" msgid "Force view mode:" @@ -3565,6 +3565,10 @@ msgctxt "#70215" msgid "TEST THIS CHANNEL" msgstr "TESTEAR ESTE CANAL" +msgctxt "#70216" +msgid "Back" +msgstr "Atrás" + diff --git a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po index 0d990180..9a97e639 100644 --- a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po @@ -83,7 +83,7 @@ msgstr "Directorio de lista descargas:" msgctxt "#30019" msgid "Filter channels by language:" -msgstr "Filter channels by language:" +msgstr "Filtrar canales para idioma:" msgctxt "#30043" msgid "Force view mode:" @@ -3565,6 +3565,10 @@ msgctxt "#70215" msgid "TEST THIS CHANNEL" msgstr "TESTEAR ESTE CANAL" +msgctxt "#70216" +msgid "Back" +msgstr "Atrás" + diff --git a/plugin.video.alfa/resources/language/Spanish/strings.po b/plugin.video.alfa/resources/language/Spanish/strings.po index 0d990180..9a97e639 100644 --- a/plugin.video.alfa/resources/language/Spanish/strings.po +++ b/plugin.video.alfa/resources/language/Spanish/strings.po @@ -83,7 +83,7 @@ msgstr "Directorio de lista descargas:" msgctxt "#30019" msgid "Filter channels by language:" -msgstr "Filter channels by language:" +msgstr "Filtrar canales para idioma:" msgctxt "#30043" msgid "Force view mode:" @@ -3565,6 +3565,10 @@ msgctxt "#70215" msgid "TEST THIS CHANNEL" msgstr "TESTEAR ESTE CANAL" +msgctxt "#70216" +msgid "Back" +msgstr "Atrás" + From ae523fc94a8764c047b8361dd471738ce9ca8d5e Mon Sep 17 00:00:00 2001 From: angedam Date: Sat, 23 Jun 2018 17:16:54 +0200 Subject: [PATCH 22/66] fix translation --- plugin.video.alfa/channels/downloads.py | 60 +++++++++---------- plugin.video.alfa/core/downloader.py | 6 +- .../resources/language/English/strings.po | 53 ++++++++++++++-- .../resources/language/Italian/strings.po | 50 +++++++++++++++- .../language/Spanish (Argentina)/strings.po | 48 +++++++++++++++ .../language/Spanish (Mexico)/strings.po | 48 +++++++++++++++ .../resources/language/Spanish/strings.po | 48 +++++++++++++++ 7 files changed, 274 insertions(+), 39 deletions(-) diff --git a/plugin.video.alfa/channels/downloads.py b/plugin.video.alfa/channels/downloads.py index 98c2836b..0623ec4a 100755 --- a/plugin.video.alfa/channels/downloads.py +++ b/plugin.video.alfa/channels/downloads.py @@ -89,40 +89,40 @@ def mainlist(item): # Si hay alguno completado if 2 in estados: - itemlist.insert(0, Item(channel=item.channel, action="clean_ready", title="Eliminar descargas completadas", + itemlist.insert(0, Item(channel=item.channel, action="clean_ready", title=config.get_localized_string(70218), contentType=item.contentType, contentChannel=item.contentChannel, contentSerieName=item.contentSerieName, text_color="sandybrown")) # Si hay alguno con error if 3 in estados: - itemlist.insert(0, Item(channel=item.channel, action="restart_error", title="Reiniciar descargas con error", + itemlist.insert(0, Item(channel=item.channel, action="restart_error", title=config.get_localized_string(70219), contentType=item.contentType, contentChannel=item.contentChannel, contentSerieName=item.contentSerieName, text_color="orange")) # Si hay alguno pendiente if 1 in estados or 0 in estados: - itemlist.insert(0, Item(channel=item.channel, action="download_all", title="Descargar todo", + itemlist.insert(0, Item(channel=item.channel, action="download_all", title=config.get_localized_string(70220), contentType=item.contentType, contentChannel=item.contentChannel, contentSerieName=item.contentSerieName, text_color="green")) if len(itemlist): - itemlist.insert(0, Item(channel=item.channel, action="clean_all", title="Eliminar todo", + itemlist.insert(0, Item(channel=item.channel, action="clean_all", title=config.get_localized_string(70221), contentType=item.contentType, contentChannel=item.contentChannel, contentSerieName=item.contentSerieName, text_color="red")) if not item.contentType == "tvshow" and config.get_setting("browser", "downloads") == True: - itemlist.insert(0, Item(channel=item.channel, action="browser", title="Ver archivos descargados", + itemlist.insert(0, Item(channel=item.channel, action="browser", title=config.get_localized_string(70222), url=DOWNLOAD_PATH, text_color="yellow")) if not item.contentType == "tvshow": - itemlist.insert(0, Item(channel=item.channel, action="settings", title="Configuración descargas...", + itemlist.insert(0, Item(channel=item.channel, action="settings", title=config.get_localized_string(70223), text_color="blue")) return itemlist def settings(item): - ret = platformtools.show_channel_settings(caption="configuración -- Descargas") + ret = platformtools.show_channel_settings(caption=config.get_localized_string(70224)) platformtools.itemlist_refresh() return ret @@ -211,7 +211,7 @@ def menu(item): else: servidor = "Auto" # Opciones disponibles para el menu - op = ["Descargar", "Eliminar de la lista", "Reiniciar descarga y eliminar datos", + op = [config.get_localized_string(70225), config.get_localized_string(70226), config.get_localized_string(70227), "Modificar servidor: %s" % (servidor.capitalize())] opciones = [] @@ -237,7 +237,7 @@ def menu(item): opciones.append(op[1]) # Eliminar de la lista # Mostramos el dialogo - seleccion = platformtools.dialog_select("Elige una opción", opciones) + seleccion = platformtools.dialog_select(config.get_localized_string(30163), opciones) # -1 es cancelar if seleccion == -1: return @@ -289,12 +289,12 @@ def move_to_libray(item): if config.get_setting("library_add", "downloads") == True: if filetools.isfile(final_path): if item.contentType == "movie" and item.infoLabels["tmdb_id"]: - library_item = Item(title="Descargado: %s" % item.downloadFilename, channel="downloads", + library_item = Item(title=config.get_localized_string(70228) % item.downloadFilename, channel="downloads", action="findvideos", infoLabels=item.infoLabels, url=final_path) videolibrarytools.save_movie(library_item) elif item.contentType == "episode" and item.infoLabels["tmdb_id"]: - library_item = Item(title="Descargado: %s" % item.downloadFilename, channel="downloads", + library_item = Item(title=config.get_localized_string(70228) % item.downloadFilename, channel="downloads", action="findvideos", infoLabels=item.infoLabels, url=final_path) tvshow = Item(channel="downloads", contentType="tvshow", infoLabels={"tmdb_id": item.infoLabels["tmdb_id"]}) @@ -511,11 +511,11 @@ def download_from_server(item): logger.info(item.tostring()) unsupported_servers = ["torrent"] - progreso = platformtools.dialog_progress("Descargas", "Probando con: %s" % item.server) + progreso = platformtools.dialog_progress(config.get_localized_string(30101), config.get_localized_string(70178) % item.server) channel = __import__('channels.%s' % item.contentChannel, None, None, ["channels.%s" % item.contentChannel]) if hasattr(channel, "play") and not item.play_menu: - progreso.update(50, "Probando con: %s" % item.server, "Conectando con %s..." % item.contentChannel) + progreso.update(50, config.get_localized_string(70178) % item.server, config.get_localized_string(60003) % item.contentChannel) try: itemlist = getattr(channel, "play")(item.clone(channel=item.contentChannel, action=item.contentAction)) except: @@ -578,10 +578,10 @@ def download_from_best_server(item): result = {"downloadStatus": STATUS_CODES.error} - progreso = platformtools.dialog_progress("Descargas", "Obteniendo lista de servidores disponibles...") + progreso = platformtools.dialog_progress(config.get_localized_string(30101), config.get_localized_string(70179)) channel = __import__('channels.%s' % item.contentChannel, None, None, ["channels.%s" % item.contentChannel]) - progreso.update(50, "Obteniendo lista de servidores disponibles:", "Conectando con %s..." % item.contentChannel) + progreso.update(50, config.get_localized_string(70184), config.get_localized_string(70180) % item.contentChannel) if hasattr(channel, item.contentAction): play_items = getattr(channel, item.contentAction)( @@ -591,8 +591,8 @@ def download_from_best_server(item): play_items = filter(lambda x: x.action == "play" and not "trailer" in x.title.lower(), play_items) - progreso.update(100, "Obteniendo lista de servidores disponibles", "Servidores disponibles: %s" % len(play_items), - "Identificando servidores...") + progreso.update(100, config.get_localized_string(70183), config.get_localized_string(70181) % len(play_items), + config.get_localized_string(70182)) if config.get_setting("server_reorder", "downloads") == 1: play_items.sort(key=sort_method) @@ -625,9 +625,9 @@ def select_server(item): logger.info( "contentAction: %s | contentChannel: %s | url: %s" % (item.contentAction, item.contentChannel, item.url)) - progreso = platformtools.dialog_progress("Descargas", "Obteniendo lista de servidores disponibles...") + progreso = platformtools.dialog_progress(config.get_localized_string(30101), config.get_localized_string(70179)) channel = __import__('channels.%s' % item.contentChannel, None, None, ["channels.%s" % item.contentChannel]) - progreso.update(50, "Obteniendo lista de servidores disponibles:", "Conectando con %s..." % item.contentChannel) + progreso.update(50, config.get_localized_string(70184), config.get_localized_string(70180) % item.contentChannel) if hasattr(channel, item.contentAction): play_items = getattr(channel, item.contentAction)( @@ -637,14 +637,14 @@ def select_server(item): play_items = filter(lambda x: x.action == "play" and not "trailer" in x.title.lower(), play_items) - progreso.update(100, "Obteniendo lista de servidores disponibles", "Servidores disponibles: %s" % len(play_items), - "Identificando servidores...") + progreso.update(100, config.get_localized_string(70183), config.get_localized_string(70181) % len(play_items), + config.get_localized_string(70182)) for x, i in enumerate(play_items): if not i.server and hasattr(channel, "play"): play_items[x] = getattr(channel, "play")(i) - seleccion = platformtools.dialog_select("Selecciona el servidor", ["Auto"] + [s.title for s in play_items]) + seleccion = platformtools.dialog_select(config.get_localized_string(70192), ["Auto"] + [s.title for s in play_items]) if seleccion > 1: update_json(item.path, { "downloadServer": {"url": play_items[seleccion - 1].url, "server": play_items[seleccion - 1].server}}) @@ -795,7 +795,7 @@ def save_download_video(item): write_json(item) - if not platformtools.dialog_yesno(config.get_localized_string(30101), "¿Iniciar la descarga ahora?"): + if not platformtools.dialog_yesno(config.get_localized_string(30101), config.get_localized_string(70189)): platformtools.dialog_ok(config.get_localized_string(30101), item.contentTitle, config.get_localized_string(30109)) else: @@ -806,7 +806,7 @@ def save_download_movie(item): logger.info("contentAction: %s | contentChannel: %s | contentTitle: %s" % ( item.contentAction, item.contentChannel, item.contentTitle)) - progreso = platformtools.dialog_progress("Descargas", "Obteniendo datos de la pelicula") + progreso = platformtools.dialog_progress(config.get_localized_string(30101), config.get_localized_string(70191)) set_movie_title(item) @@ -815,7 +815,7 @@ def save_download_movie(item): progreso.close() return save_download_video(item) - progreso.update(0, "Añadiendo pelicula...") + progreso.update(0, config.get_localized_string(60062)) item.downloadFilename = filetools.validate_path("%s [%s]" % (item.contentTitle.strip(), item.contentChannel)) @@ -823,7 +823,7 @@ def save_download_movie(item): progreso.close() - if not platformtools.dialog_yesno(config.get_localized_string(30101), "¿Iniciar la descarga ahora?"): + if not platformtools.dialog_yesno(config.get_localized_string(30101), config.get_localized_string(70189)): platformtools.dialog_ok(config.get_localized_string(30101), item.contentTitle, config.get_localized_string(30109)) else: @@ -834,17 +834,17 @@ def save_download_tvshow(item): logger.info("contentAction: %s | contentChannel: %s | contentType: %s | contentSerieName: %s" % ( item.contentAction, item.contentChannel, item.contentType, item.contentSerieName)) - progreso = platformtools.dialog_progress("Descargas", "Obteniendo datos de la serie") + progreso = platformtools.dialog_progress(config.get_localized_string(30101), config.get_localized_string(70188)) scraper.find_and_set_infoLabels(item) item.downloadFilename = filetools.validate_path("%s [%s]" % (item.contentSerieName, item.contentChannel)) - progreso.update(0, "Obteniendo episodios...", "conectando con %s..." % item.contentChannel) + progreso.update(0, config.get_localized_string(70186), config.get_localized_string(70187) % item.contentChannel) episodes = get_episodes(item) - progreso.update(0, "Añadiendo capitulos...", " ") + progreso.update(0, config.get_localized_string(70190), " ") for x, i in enumerate(episodes): progreso.update(x * 100 / len(episodes), @@ -852,7 +852,7 @@ def save_download_tvshow(item): write_json(i) progreso.close() - if not platformtools.dialog_yesno(config.get_localized_string(30101), "¿Iniciar la descarga ahora?"): + if not platformtools.dialog_yesno(config.get_localized_string(30101), config.get_localized_string(70189)): platformtools.dialog_ok(config.get_localized_string(30101), str(len(episodes)) + " capitulos de: " + item.contentSerieName, config.get_localized_string(30109)) diff --git a/plugin.video.alfa/core/downloader.py b/plugin.video.alfa/core/downloader.py index 6efb1554..243b69ac 100644 --- a/plugin.video.alfa/core/downloader.py +++ b/plugin.video.alfa/core/downloader.py @@ -29,7 +29,7 @@ import urlparse from threading import Thread, Lock from core import filetools -from platformcode import logger +from platformcode import logger, config class Downloader: @@ -89,9 +89,9 @@ class Downloader: return os.path.abspath(filetools.join(self._path, self._filename)) # Funciones - def start_dialog(self, title="Descargando..."): + def start_dialog(self, title=config.get_localized_string(60200)): from platformcode import platformtools - progreso = platformtools.dialog_progress(title, "Iniciando descarga...") + progreso = platformtools.dialog_progress(title, config.get_localized_string(60201)) self.start() while self.state == self.states.downloading and not progreso.iscanceled(): time.sleep(0.1) diff --git a/plugin.video.alfa/resources/language/English/strings.po b/plugin.video.alfa/resources/language/English/strings.po index b9b03abd..0954984c 100644 --- a/plugin.video.alfa/resources/language/English/strings.po +++ b/plugin.video.alfa/resources/language/English/strings.po @@ -299,7 +299,6 @@ msgstr "" msgctxt "#30984" msgid "Popular" - msgstr "" msgctxt "#30985" @@ -3054,10 +3053,6 @@ msgctxt "#70080" msgid "Do you want Alfa to auto-configure Kodi's video library?" msgstr "" -msgctxt "#70081" -msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." -msgstr "" - msgctxt "#70082" msgid "Global Search" msgstr "" @@ -3598,3 +3593,51 @@ msgctxt "#70216" msgid "Back" msgstr "" +msgctxt "#70217" +msgid "downloads" +msgstr "" + +msgctxt "#70218" +msgid "Delete complete downloads" +msgstr "" + +msgctxt "#70219" +msgid "Restart download with error" +msgstr "" + +msgctxt "#70220" +msgid "Download all" +msgstr "" + +msgctxt "#70221" +msgid "Delete all" +msgstr "" + +msgctxt "#70222" +msgid "View downloaded files" +msgstr "" + +msgctxt "#70223" +msgid "Settings downloads..." +msgstr "" + +msgctxt "#70224" +msgid "settings -- Downloads" +msgstr "" + +msgctxt "#70225" +msgid "Download" +msgstr "" + +msgctxt "#70226" +msgid "Remove from the list" +msgstr "" + +msgctxt "#70227" +msgid "Restart download and delete data" +msgstr "" + +msgctxt "#70228" +msgid "Downloaded: %s" +msgstr "" + diff --git a/plugin.video.alfa/resources/language/Italian/strings.po b/plugin.video.alfa/resources/language/Italian/strings.po index 536722dd..561b6b54 100644 --- a/plugin.video.alfa/resources/language/Italian/strings.po +++ b/plugin.video.alfa/resources/language/Italian/strings.po @@ -463,7 +463,7 @@ msgstr "Attendere prego" msgctxt "#59990" msgid "Channels included in the search" -msgstr "Canali inclusi nella ricerca" +msgstr "Sto cercando nei canali:" msgctxt "#59991" msgid "All" @@ -3581,4 +3581,52 @@ msgctxt "#70216" msgid "Back" msgstr "Indietro" +msgctxt "#70217" +msgid "downloads" +msgstr "downloads" + +msgctxt "#70218" +msgid "Delete complete downloads" +msgstr "Elimina i downloads completati" + +msgctxt "#70219" +msgid "Restart download with error" +msgstr "Reinizia i download con errori" + +msgctxt "#70220" +msgid "Download all" +msgstr "Scarica tutti" + +msgctxt "#70221" +msgid "Delete all" +msgstr "Elimina tutto" + +msgctxt "#70222" +msgid "View downloaded files" +msgstr "Vedi i files scaricati" + +msgctxt "#70223" +msgid "Settings downloads..." +msgstr "Configurazione downloads..." + +msgctxt "#70224" +msgid "settings -- Downloads" +msgstr "configurazione -- Download" + +msgctxt "#70225" +msgid "Download" +msgstr "Scarica" + +msgctxt "#70226" +msgid "Remove from the list" +msgstr "Elimina dalla lista" + +msgctxt "#70227" +msgid "Restart download and delete data" +msgstr "Reinizia il download ed elimina dati" + +msgctxt "#70228" +msgid "Downloaded: %s" +msgstr "Scaricato: %s" + diff --git a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po index 9a97e639..99d927de 100644 --- a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po @@ -3569,6 +3569,54 @@ msgctxt "#70216" msgid "Back" msgstr "Atrás" +msgctxt "#70217" +msgid "downloads" +msgstr "descargas" + +msgctxt "#70218" +msgid "Delete complete downloads" +msgstr "Eliminar descargas completadas" + +msgctxt "#70219" +msgid "Restart download with error" +msgstr "Reiniciar descargas con error" + +msgctxt "#70220" +msgid "Download all" +msgstr "Descargar todo" + +msgctxt "#70221" +msgid "Delete all" +msgstr "Eliminar todo" + +msgctxt "#70222" +msgid "View downloaded files" +msgstr "Ver archivos descargados" + +msgctxt "#70223" +msgid "Settings downloads..." +msgstr "Configuración descargas..." + +msgctxt "#70224" +msgid "settings -- Downloads" +msgstr "configuración -- Descargas" + +msgctxt "#70225" +msgid "Download" +msgstr "Descargar" + +msgctxt "#70226" +msgid "Remove from the list" +msgstr "Eliminar de la lista" + +msgctxt "#70227" +msgid "Restart download and delete data" +msgstr "Reiniciar descarga y eliminar datos" + +msgctxt "#70228" +msgid "Downloaded: %s" +msgstr "Descargado: %s" + diff --git a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po index 9a97e639..99d927de 100644 --- a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po @@ -3569,6 +3569,54 @@ msgctxt "#70216" msgid "Back" msgstr "Atrás" +msgctxt "#70217" +msgid "downloads" +msgstr "descargas" + +msgctxt "#70218" +msgid "Delete complete downloads" +msgstr "Eliminar descargas completadas" + +msgctxt "#70219" +msgid "Restart download with error" +msgstr "Reiniciar descargas con error" + +msgctxt "#70220" +msgid "Download all" +msgstr "Descargar todo" + +msgctxt "#70221" +msgid "Delete all" +msgstr "Eliminar todo" + +msgctxt "#70222" +msgid "View downloaded files" +msgstr "Ver archivos descargados" + +msgctxt "#70223" +msgid "Settings downloads..." +msgstr "Configuración descargas..." + +msgctxt "#70224" +msgid "settings -- Downloads" +msgstr "configuración -- Descargas" + +msgctxt "#70225" +msgid "Download" +msgstr "Descargar" + +msgctxt "#70226" +msgid "Remove from the list" +msgstr "Eliminar de la lista" + +msgctxt "#70227" +msgid "Restart download and delete data" +msgstr "Reiniciar descarga y eliminar datos" + +msgctxt "#70228" +msgid "Downloaded: %s" +msgstr "Descargado: %s" + diff --git a/plugin.video.alfa/resources/language/Spanish/strings.po b/plugin.video.alfa/resources/language/Spanish/strings.po index 9a97e639..99d927de 100644 --- a/plugin.video.alfa/resources/language/Spanish/strings.po +++ b/plugin.video.alfa/resources/language/Spanish/strings.po @@ -3569,6 +3569,54 @@ msgctxt "#70216" msgid "Back" msgstr "Atrás" +msgctxt "#70217" +msgid "downloads" +msgstr "descargas" + +msgctxt "#70218" +msgid "Delete complete downloads" +msgstr "Eliminar descargas completadas" + +msgctxt "#70219" +msgid "Restart download with error" +msgstr "Reiniciar descargas con error" + +msgctxt "#70220" +msgid "Download all" +msgstr "Descargar todo" + +msgctxt "#70221" +msgid "Delete all" +msgstr "Eliminar todo" + +msgctxt "#70222" +msgid "View downloaded files" +msgstr "Ver archivos descargados" + +msgctxt "#70223" +msgid "Settings downloads..." +msgstr "Configuración descargas..." + +msgctxt "#70224" +msgid "settings -- Downloads" +msgstr "configuración -- Descargas" + +msgctxt "#70225" +msgid "Download" +msgstr "Descargar" + +msgctxt "#70226" +msgid "Remove from the list" +msgstr "Eliminar de la lista" + +msgctxt "#70227" +msgid "Restart download and delete data" +msgstr "Reiniciar descarga y eliminar datos" + +msgctxt "#70228" +msgid "Downloaded: %s" +msgstr "Descargado: %s" + From 1d10653648d730cda8856e1051cec487079f5111 Mon Sep 17 00:00:00 2001 From: angedam Date: Sun, 24 Jun 2018 17:34:59 +0200 Subject: [PATCH 23/66] fix translation --- plugin.video.alfa/channels/downloads.json | 40 ++++----- plugin.video.alfa/core/downloader.py | 2 +- .../resources/language/English/strings.po | 81 +++++++++++++++++++ .../resources/language/Italian/strings.po | 68 ++++++++++++++++ .../language/Spanish (Argentina)/strings.po | 68 +++++++++++++++- .../language/Spanish (Mexico)/strings.po | 68 +++++++++++++++- .../resources/language/Spanish/strings.po | 68 +++++++++++++++- 7 files changed, 371 insertions(+), 24 deletions(-) diff --git a/plugin.video.alfa/channels/downloads.json b/plugin.video.alfa/channels/downloads.json index c39d5bd0..c87b304b 100755 --- a/plugin.video.alfa/channels/downloads.json +++ b/plugin.video.alfa/channels/downloads.json @@ -10,14 +10,14 @@ "settings": [ { "type": "label", - "label": "Ubicacion de archivos", + "label": "$ADDON[plugin.video.alfa 70229]", "enabled": true, "visible": true }, { "id": "library_add", "type": "bool", - "label": " - Añadir descargas completadas a la videoteca", + "label": "$ADDON[plugin.video.alfa 70230]", "default": true, "enabled": true, "visible": true @@ -25,7 +25,7 @@ { "id": "library_move", "type": "bool", - "label": " - Mover el archivo descargado a la videoteca", + "label": "$ADDON[plugin.video.alfa 70231]", "default": true, "enabled": "eq(-1,true)", "visible": true @@ -33,21 +33,21 @@ { "id": "browser", "type": "bool", - "label": " - Visualizar archivos descargados desde descargas", + "label": "$ADDON[plugin.video.alfa 70232]", "default": false, "enabled": true, "visible": true }, { "type": "label", - "label": "Descarga", + "label": "$ADDON[plugin.video.alfa 70243]", "enabled": true, "visible": true }, { "id": "block_size", "type": "list", - "label": " - Tamaño por bloque", + "label": "$ADDON[plugin.video.alfa 70233]", "lvalues": [ "128 KB", "256 KB", @@ -62,7 +62,7 @@ { "id": "part_size", "type": "list", - "label": " - Tamaño por parte", + "label": "$ADDON[plugin.video.alfa 70234]", "lvalues": [ "1 MB", "2 MB", @@ -78,7 +78,7 @@ { "id": "max_connections", "type": "list", - "label": " - Numero máximo de conexiones simultaneas", + "label": "$ADDON[plugin.video.alfa 70235]", "lvalues": [ "1", "2", @@ -98,7 +98,7 @@ { "id": "max_buffer", "type": "list", - "label": " - Numero máximo de partes en memoria", + "label": "$ADDON[plugin.video.alfa 70236]", "lvalues": [ "0", "2", @@ -118,17 +118,17 @@ }, { "type": "label", - "label": "Elección del servidor", + "label": "$ADDON[plugin.video.alfa 70237]", "enabled": true, "visible": true }, { "id": "server_reorder", "type": "list", - "label": " - Orden de servidores", + "label": "$ADDON[plugin.video.alfa 70238]", "lvalues": [ - "Mantener", - "Reordenar" + "$ADDON[plugin.video.alfa 70244]", + "$ADDON[plugin.video.alfa 70245]" ], "default": 1, "enabled": true, @@ -137,7 +137,7 @@ { "id": "language", "type": "list", - "label": " - Idioma preferido", + "label": "$ADDON[plugin.video.alfa 70246]", "lvalues": [ "Esp, Lat, Sub, Eng, Vose", "Esp, Sub, Lat, Eng, Vose", @@ -145,29 +145,29 @@ "Vose, Eng, Sub, Esp, Lat" ], "default": 0, - "enabled": "eq(-1,'Reordenar')", + "enabled": "eq(-1,$ADDON[plugin.video.alfa 70245])", "visible": true }, { "id": "quality", "type": "list", - "label": " - Calidad preferida", + "label": "$ADDON[plugin.video.alfa 70240]", "lvalues": [ - "La mas alta", + "$ADDON[plugin.video.alfa 70241]", "HD 1080", "HD 720", "SD" ], "default": 0, - "enabled": "eq(-2,'Reordenar')", + "enabled": "eq(-2,$ADDON[plugin.video.alfa 70245])", "visible": true }, { "id": "server_speed", "type": "bool", - "label": " - Elegir los servidores mas rapidos", + "label": "$ADDON[plugin.video.alfa 70242]", "default": true, - "enabled": "eq(-3,'Reordenar')", + "enabled": "eq(-3,$ADDON[plugin.video.alfa 70245])", "visible": true } ] diff --git a/plugin.video.alfa/core/downloader.py b/plugin.video.alfa/core/downloader.py index 243b69ac..f5ccf1ed 100644 --- a/plugin.video.alfa/core/downloader.py +++ b/plugin.video.alfa/core/downloader.py @@ -99,7 +99,7 @@ class Downloader: line2 = "%.2f%% - %.2f %s de %.2f %s a %.2f %s/s (%d/%d)" % ( self.progress, self.downloaded[1], self.downloaded[2], self.size[1], self.size[2], self.speed[1], self.speed[2], self.connections[0], self.connections[1]) - line3 = "Tiempo restante: %s" % (self.remaining_time) + line3 = config.get_localized_string(60202) % (self.remaining_time) progreso.update(int(self.progress), line1, line2, line3) if self.state == self.states.downloading: diff --git a/plugin.video.alfa/resources/language/English/strings.po b/plugin.video.alfa/resources/language/English/strings.po index 0954984c..7a945166 100644 --- a/plugin.video.alfa/resources/language/English/strings.po +++ b/plugin.video.alfa/resources/language/English/strings.po @@ -3641,3 +3641,84 @@ msgctxt "#70228" msgid "Downloaded: %s" msgstr "" + +msgctxt "#70226" +msgid "Remove from the list" +msgstr "" + +msgctxt "#70227" +msgid "Restart download and delete data" +msgstr "" + +msgctxt "#70228" +msgid "Downloaded: %s" +msgstr "" + +msgctxt "#70229" +msgid "File location" +msgstr "" + +msgctxt "#70230" +msgid " - Add completed downloads to the video library " +msgstr "" + +msgctxt "#70231" +msgid " - Move the downloaded file to the video library" +msgstr "" + +msgctxt "#70232" +msgid " - View files downloaded from downloads" +msgstr "" + +msgctxt "#70233" +msgid " - Size per block" +msgstr "" + +msgctxt "#70234" +msgid " - Size by part" +msgstr "" + +msgctxt "#70235" +msgid " - Maximum number of simultaneous connections" +msgstr "" + +msgctxt "#70236" +msgid " - Maximum number of parts in memory" +msgstr "" + +msgctxt "#70237" +msgid "Choice of the server" +msgstr "" + +msgctxt "#70238" +msgid "- Order of servers" +msgstr "" + +msgctxt "#70240" +msgid " - Preferred quality" +msgstr "" + +msgctxt "#70241" +msgid "The highest" +msgstr "" + +msgctxt "#70242" +msgid " - Choose the fastest servers" +msgstr "" + +msgctxt "#70243" +msgid "Download" +msgstr "" + +msgctxt "#70244" +msgid "Keep" +msgstr "" + +msgctxt "#70245" +msgid "Reorder" +msgstr "" + +msgctxt "#70246" +msgid " - Preferred language" +msgstr "" + diff --git a/plugin.video.alfa/resources/language/Italian/strings.po b/plugin.video.alfa/resources/language/Italian/strings.po index 561b6b54..ef2fc49e 100644 --- a/plugin.video.alfa/resources/language/Italian/strings.po +++ b/plugin.video.alfa/resources/language/Italian/strings.po @@ -3629,4 +3629,72 @@ msgctxt "#70228" msgid "Downloaded: %s" msgstr "Scaricato: %s" +msgctxt "#70229" +msgid "File location" +msgstr "Posizione dei files" + +msgctxt "#70230" +msgid " - Add completed downloads to the video library " +msgstr " - Aggiungi download completi alla videoteca" + +msgctxt "#70231" +msgid " - Move the downloaded file to the video library" +msgstr " - Sposta i files scaricati nella videoteca" + +msgctxt "#70232" +msgid " - View files downloaded from downloads" +msgstr " - Visualizzare i files scaricati da Downloads" + +msgctxt "#70233" +msgid " - Size per block" +msgstr " - Dimensione per blocco" + +msgctxt "#70234" +msgid " - Size by part" +msgstr " - Dimensione per parte" + +msgctxt "#70235" +msgid " - Maximum number of simultaneous connections" +msgstr " - Numero massimo di connnessioni simultanee" + +msgctxt "#70236" +msgid " - Maximum number of parts in memory" +msgstr " - Numero massimo di parti in memoria" + +msgctxt "#70237" +msgid "Choice of the server" +msgstr "Scelta del server" + +msgctxt "#70238" +msgid "- Order of servers" +msgstr " - Ordine dei servers" + +msgctxt "#70240" +msgid " - Preferred quality" +msgstr " - Qualità preferita" + +msgctxt "#70241" +msgid "The highest" +msgstr "La più alta" + +msgctxt "#70242" +msgid " - Choose the fastest servers" +msgstr " - Scegli i servers più veloci" + +msgctxt "#70243" +msgid "Download" +msgstr "Download" + +msgctxt "#70244" +msgid "Keep" +msgstr "Mantieni" + +msgctxt "#70245" +msgid "Reorder" +msgstr "Riordina" + +msgctxt "#70246" +msgid " - Preferred language" +msgstr " - Lingua preferita" + diff --git a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po index 99d927de..b33838c5 100644 --- a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po @@ -3617,7 +3617,73 @@ msgctxt "#70228" msgid "Downloaded: %s" msgstr "Descargado: %s" - +msgctxt "#70229" +msgid "File location" +msgstr "Ubicacion de archivos" + +msgctxt "#70230" +msgid " - Add completed downloads to the video library " +msgstr " - Añadir descargas completadas a la videoteca" + +msgctxt "#70231" +msgid " - Move the downloaded file to the video library" +msgstr " - Mover el archivo descargado a la videoteca" + +msgctxt "#70232" +msgid " - View files downloaded from downloads" +msgstr " - Visualizar archivos descargados desde descargas" + +msgctxt "#70233" +msgid " - Size per block" +msgstr " - Tamaño por bloque" + +msgctxt "#70234" +msgid " - Size by part" +msgstr " - Tamaño por parte" + +msgctxt "#70235" +msgid " - Maximum number of simultaneous connections" +msgstr " - Numero máximo de conexiones simultaneas" + +msgctxt "#70236" +msgid " - Maximum number of parts in memory" +msgstr " - Numero máximo de partes en memoria" + +msgctxt "#70237" +msgid "Choice of the server" +msgstr "Elección del servidor" + +msgctxt "#70238" +msgid "- Order of servers" +msgstr " - Orden de servidores" + +msgctxt "#70240" +msgid " - Preferred quality" +msgstr " - Calidad preferida" + +msgctxt "#70241" +msgid "The highest" +msgstr "La mas alta" + +msgctxt "#70242" +msgid " - Choose the fastest servers" +msgstr " - Elegir los servidores mas rapidos" + +msgctxt "#70243" +msgid "Download" +msgstr "Descarga" + +msgctxt "#70244" +msgid "Keep" +msgstr "Mantener" + +msgctxt "#70245" +msgid "Reorder" +msgstr "Reordenar" + +msgctxt "#70246" +msgid " - Preferred language" +msgstr " - Idioma preferido" diff --git a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po index 99d927de..b33838c5 100644 --- a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po @@ -3617,7 +3617,73 @@ msgctxt "#70228" msgid "Downloaded: %s" msgstr "Descargado: %s" - +msgctxt "#70229" +msgid "File location" +msgstr "Ubicacion de archivos" + +msgctxt "#70230" +msgid " - Add completed downloads to the video library " +msgstr " - Añadir descargas completadas a la videoteca" + +msgctxt "#70231" +msgid " - Move the downloaded file to the video library" +msgstr " - Mover el archivo descargado a la videoteca" + +msgctxt "#70232" +msgid " - View files downloaded from downloads" +msgstr " - Visualizar archivos descargados desde descargas" + +msgctxt "#70233" +msgid " - Size per block" +msgstr " - Tamaño por bloque" + +msgctxt "#70234" +msgid " - Size by part" +msgstr " - Tamaño por parte" + +msgctxt "#70235" +msgid " - Maximum number of simultaneous connections" +msgstr " - Numero máximo de conexiones simultaneas" + +msgctxt "#70236" +msgid " - Maximum number of parts in memory" +msgstr " - Numero máximo de partes en memoria" + +msgctxt "#70237" +msgid "Choice of the server" +msgstr "Elección del servidor" + +msgctxt "#70238" +msgid "- Order of servers" +msgstr " - Orden de servidores" + +msgctxt "#70240" +msgid " - Preferred quality" +msgstr " - Calidad preferida" + +msgctxt "#70241" +msgid "The highest" +msgstr "La mas alta" + +msgctxt "#70242" +msgid " - Choose the fastest servers" +msgstr " - Elegir los servidores mas rapidos" + +msgctxt "#70243" +msgid "Download" +msgstr "Descarga" + +msgctxt "#70244" +msgid "Keep" +msgstr "Mantener" + +msgctxt "#70245" +msgid "Reorder" +msgstr "Reordenar" + +msgctxt "#70246" +msgid " - Preferred language" +msgstr " - Idioma preferido" diff --git a/plugin.video.alfa/resources/language/Spanish/strings.po b/plugin.video.alfa/resources/language/Spanish/strings.po index 99d927de..b33838c5 100644 --- a/plugin.video.alfa/resources/language/Spanish/strings.po +++ b/plugin.video.alfa/resources/language/Spanish/strings.po @@ -3617,7 +3617,73 @@ msgctxt "#70228" msgid "Downloaded: %s" msgstr "Descargado: %s" - +msgctxt "#70229" +msgid "File location" +msgstr "Ubicacion de archivos" + +msgctxt "#70230" +msgid " - Add completed downloads to the video library " +msgstr " - Añadir descargas completadas a la videoteca" + +msgctxt "#70231" +msgid " - Move the downloaded file to the video library" +msgstr " - Mover el archivo descargado a la videoteca" + +msgctxt "#70232" +msgid " - View files downloaded from downloads" +msgstr " - Visualizar archivos descargados desde descargas" + +msgctxt "#70233" +msgid " - Size per block" +msgstr " - Tamaño por bloque" + +msgctxt "#70234" +msgid " - Size by part" +msgstr " - Tamaño por parte" + +msgctxt "#70235" +msgid " - Maximum number of simultaneous connections" +msgstr " - Numero máximo de conexiones simultaneas" + +msgctxt "#70236" +msgid " - Maximum number of parts in memory" +msgstr " - Numero máximo de partes en memoria" + +msgctxt "#70237" +msgid "Choice of the server" +msgstr "Elección del servidor" + +msgctxt "#70238" +msgid "- Order of servers" +msgstr " - Orden de servidores" + +msgctxt "#70240" +msgid " - Preferred quality" +msgstr " - Calidad preferida" + +msgctxt "#70241" +msgid "The highest" +msgstr "La mas alta" + +msgctxt "#70242" +msgid " - Choose the fastest servers" +msgstr " - Elegir los servidores mas rapidos" + +msgctxt "#70243" +msgid "Download" +msgstr "Descarga" + +msgctxt "#70244" +msgid "Keep" +msgstr "Mantener" + +msgctxt "#70245" +msgid "Reorder" +msgstr "Reordenar" + +msgctxt "#70246" +msgid " - Preferred language" +msgstr " - Idioma preferido" From 7f2d99238ce6364036383ea6a74c3d2bcea34087 Mon Sep 17 00:00:00 2001 From: Kevin Date: Tue, 26 Jun 2018 23:06:41 +0200 Subject: [PATCH 24/66] Fix Localized Strings in JSON Files (Mediaserver) --- mediaserver/platformcode/controllers/html.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/mediaserver/platformcode/controllers/html.py b/mediaserver/platformcode/controllers/html.py index 573171a1..6268f13f 100644 --- a/mediaserver/platformcode/controllers/html.py +++ b/mediaserver/platformcode/controllers/html.py @@ -696,15 +696,17 @@ class platform(Platformtools): c["value"] = dict_values[c["id"]] # Translation - if c['label'].startswith('@') and unicode(c['label'][1:]).isnumeric(): - c['label'] = str(config.get_localized_string(c['label'][1:])) + string_id = re.findall(r'\$ADDON\[[^\d]+(\d+)]', c['label'], flags=re.DOTALL) + if c['label'].startswith('$') and len(string_id) > 0: + c['label'] = str(config.get_localized_string(string_id[0])) if c["label"].endswith(":"): c["label"] = c["label"][:-1] if c['type'] == 'list': lvalues = [] for li in c['lvalues']: - if li.startswith('@') and unicode(li[1:]).isnumeric(): - lvalues.append(str(config.get_localized_string(li[1:]))) + string_id = re.findall(r'\$ADDON\[[^\d]+(\d+)]', li, flags=re.DOTALL) + if li.startswith('$') and len(string_id) > 0: + lvalues.append(str(config.get_localized_string(string_id[0]))) else: lvalues.append(li) c['lvalues'] = lvalues From 5e5459337cf2348b202ed1fc29ed221f3f6c1d75 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Sat, 30 Jun 2018 08:27:19 -0500 Subject: [PATCH 25/66] config.py: add get_addon_version() --- plugin.video.alfa/platformcode/config.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/plugin.video.alfa/platformcode/config.py b/plugin.video.alfa/platformcode/config.py index ac49a136..ad13942b 100644 --- a/plugin.video.alfa/platformcode/config.py +++ b/plugin.video.alfa/platformcode/config.py @@ -15,6 +15,27 @@ __settings__ = xbmcaddon.Addon(id="plugin.video." + PLUGIN_NAME) __language__ = __settings__.getLocalizedString +def get_addon_version(linea_inicio=0, total_lineas=2): + ''' + Devuelve el número de de versión del addon, obtenido desde el archivo addon.xml + ''' + path = get_runtime_path() + "\\addon.xml" + f = open(path, "rb") + data = [] + for x, line in enumerate(f): + if x < linea_inicio: continue + if len(data) == total_lineas: break + data.append(line) + f.close() + data1 = "".join(data) + # + aux = re.findall(' 0: + version = aux[0] + return version + + def get_platform(full_version=False): """ Devuelve la información la version de xbmc o kodi sobre el que se ejecuta el plugin From ac1b346019718c767fecbd5095ab58c1adeed231 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Sat, 30 Jun 2018 08:41:34 -0500 Subject: [PATCH 26/66] config.py: add get_addon.version() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Método para obtener la versión de alfa --- mediaserver/platformcode/config.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/mediaserver/platformcode/config.py b/mediaserver/platformcode/config.py index 12b0c80b..4caf5486 100644 --- a/mediaserver/platformcode/config.py +++ b/mediaserver/platformcode/config.py @@ -14,6 +14,27 @@ settings_dic = {} adult_setting = {} +def get_addon_version(linea_inicio=0, total_lineas=2): + ''' + Devuelve el número de de versión del addon, obtenido desde el archivo addon.xml + ''' + path = get_runtime_path() + "\\addon.xml" + f = open(path, "rb") + data = [] + for x, line in enumerate(f): + if x < linea_inicio: continue + if len(data) == total_lineas: break + data.append(line) + f.close() + data1 = "".join(data) + # + aux = re.findall(' 0: + version = aux[0] + return version + + def get_platform(full_version=False): # full_version solo es util en xbmc/kodi ret = { From ca83da0350ce716164edbda525790f331947dd16 Mon Sep 17 00:00:00 2001 From: pipcat Date: Mon, 2 Jul 2018 09:32:17 +0200 Subject: [PATCH 27/66] Modificaciones gktools y timeout --- plugin.video.alfa/channels/animeyt.py | 359 +++++++++++++++-- plugin.video.alfa/channels/pelispedia.py | 53 ++- plugin.video.alfa/channels/setting.py | 2 + plugin.video.alfa/core/httptools.py | 6 + plugin.video.alfa/core/servertools.py | 28 +- plugin.video.alfa/lib/gktools.py | 374 +++++++++--------- plugin.video.alfa/lib/rijndael/__init__.py | 23 ++ plugin.video.alfa/lib/rijndael/rijndael.py | 361 +++++++++++++++++ .../lib/rijndael/rijndael_cbc.py | 71 ++++ 9 files changed, 1068 insertions(+), 209 deletions(-) create mode 100644 plugin.video.alfa/lib/rijndael/__init__.py create mode 100644 plugin.video.alfa/lib/rijndael/rijndael.py create mode 100644 plugin.video.alfa/lib/rijndael/rijndael_cbc.py diff --git a/plugin.video.alfa/channels/animeyt.py b/plugin.video.alfa/channels/animeyt.py index c8810dca..85925a62 100644 --- a/plugin.video.alfa/channels/animeyt.py +++ b/plugin.video.alfa/channels/animeyt.py @@ -11,7 +11,7 @@ from core.item import Item from core import tmdb from platformcode import config,logger -import gktools +import gktools, random, time, urllib __modo_grafico__ = config.get_setting('modo_grafico', 'animeyt') @@ -32,6 +32,10 @@ def mainlist(item): itemlist = renumbertools.show_option(item.channel, itemlist) + # ~ prova = 'EIpStovt0/tFerZM4pviHBzddH308TWRR41XnHv9N4tUNih6r+GjCDa/cV1uVUQXEmZd1Hsu2ABzESzBMGiK6XUdRgYZYHImmrIWcn3tfYPCuSWBc2UgwxUtR+WOsov6YiGM5AdgJGFunoN' + # ~ aux = gktools.decode_rijndael(prova, preIV = 'b3512f4972d314da9', key='3e1a854e7d5835ab99d99a29afec8bbb') + # ~ itemlist.append(Item(channel=item.channel, title=aux, action="novedades", url=HOST)) + return itemlist @@ -160,20 +164,24 @@ def findvideos(item): data = httptools.downloadpage(item.url).data data = re.sub(r"\n|\r|\t| |
", "", data) - # ~ patron = 'Player\("(.*?)"' - patron = 'iframe src="([^"]*)"' + from collections import OrderedDict # cambiado dict por OrderedDict para mantener el mismo orden que en la web - matches = scrapertools.find_multiple_matches(data, patron) + matches = scrapertools.find_multiple_matches(data, '
  • ([^<]*)') + d_links = OrderedDict(matches) + + matches = scrapertools.find_multiple_matches(data, 'if \(mirror == (\d*)\).*?iframe src="([^"]*)"') + d_frames = OrderedDict(matches) + + for k in d_links: + if k in d_frames and d_frames[k] != '': + tit = scrapertools.find_single_match(d_frames[k], '/([^\./]*)\.php\?') + if tit == '': + tit = 'mega' if 'mega.nz/' in d_frames[k] else 'dailymotion' if 'dailymotion.com/' in d_frames[k] else'noname' + if tit == 'id' and 'yourupload.com/' in d_frames[k]: tit = 'yourupload' + title = 'Opción %s (%s)' % (d_links[k], tit) + + itemlist.append(item.clone(channel=item.channel, folder=False, title=title, action="play", url=d_frames[k], referer=item.url)) - for url in matches: - title = scrapertools.find_single_match(url, '/([^\.]*)\.php\?') - # ~ title = 'PDT' - # ~ if "cldup" in url: - # ~ title = "Opcion Cldup" - # ~ if "chumi" in url: - # ~ title = "Opcion Chumi" - if title == 'rakuten': # de momento es el único resuelto - itemlist.append(item.clone(channel=item.channel, folder=False, title=title, action="play", url=url, referer=item.url)) if item.extra != "library": if config.get_videolibrary_support() and item.extra: @@ -186,14 +194,321 @@ def play(item): logger.info() itemlist = [] - if 'https://s2.animeyt.tv/rakuten.php?' in item.url: - itemlist = gktools.gk_play(item) + if item.url.startswith('https://www.dailymotion.com/'): + itemlist.append(item.clone(url=item.url, server='dailymotion')) + + elif item.url.startswith('https://mega.nz/'): + itemlist.append(item.clone(url=item.url.replace('embed',''), server='mega')) + + elif item.url.startswith('https://s2.animeyt.tv/rakuten.php?'): + # 1- Descargar + data, ck = gktools.get_data_and_cookie(item) + + # 2- Calcular datos + gsv = scrapertools.find_single_match(data, ' 0 and it.server != '' and it.url != '': - verificacion = check_video_link(it.url, it.server) + verificacion = check_video_link(it.url, it.server, timeout) it.title = verificacion + ', ' + it.title.strip() it.alive = verificacion numero -= 1 return itemlist -def check_video_link(url, server): +def check_video_link(url, server, timeout=3): """ Comprueba si el enlace a un video es valido y devuelve un string de 2 posiciones con la verificacion. :param url, server: Link y servidor @@ -734,17 +740,23 @@ def check_video_link(url, server): return "??" if hasattr(server_module, 'test_video_exists'): + ant_timeout = httptools.HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT + httptools.HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT = timeout # Limitar tiempo de descarga try: video_exists, message = server_module.test_video_exists(page_url=url) if not video_exists: logger.info("[check_video_link] No existe! %s %s %s" % (message, server, url)) - return "NO" + resultado = "NO" else: - logger.info("[check_video_link] comprovacion OK %s %s" % (server, url)) - return "Ok" + logger.info("[check_video_link] comprobacion OK %s %s" % (server, url)) + resultado = "Ok" except: logger.info("[check_video_link] No se puede comprobar ahora! %s %s" % (server, url)) - return "??" + resultado = "??" + + finally: + httptools.HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT = ant_timeout # Restaurar tiempo de descarga + return resultado logger.info("[check_video_link] No hay test_video_exists para servidor: %s" % server) return "??" diff --git a/plugin.video.alfa/lib/gktools.py b/plugin.video.alfa/lib/gktools.py index c71c0909..59585389 100644 --- a/plugin.video.alfa/lib/gktools.py +++ b/plugin.video.alfa/lib/gktools.py @@ -1,145 +1,164 @@ # -*- coding: utf-8 -*- ''' +gktools son un conjunto de funciones para ayudar a resolver enlaces a videos con "protección GK". +Lo de protección gk dudo que exista, le he llamado así pq los primeros ejemplos vistos se eran gkpluginsphp y gkpedia. + Características "GK" : - Utiliza una cookie __cfduid -- Utiliza meta name="google-site-verification" como texto a encriptar -- La clave para encriptar se calcula en los js -- Se calcula un token criptográfico en función del texto y clave +- Calcula un token criptográfico en función de un texto y una clave +- El texto se saca del html (por ejemplo de meta name="google-site-verification", pero puede ser más complejo) +- La clave para encriptar se calcula en js ofuscados que carga el html +- Se llama a otra url con una serie de parámetros, como el token, y de allí se obtienen los videos finales. -A partir de aquí 2 opciones: +Howto: +1- descargar página +2- extraer datos y calcular los necesarios +3- descargar segunda página con el token calculado +4- extraer videos -a) Si la url indica que hay un /embed/ - - se cambia /embed/ por /stream/ y se añade /token - - se descarga la página, dónde se pueden extraer los videos - -b) Sino (enlaces directos) - - se busca un identificador - - si hay una llamada a Play() en el js, el id se saca de allí - - sino el id puede estar en la url - - con el identificador y el token se llama a un php (gkpluginsphp, gkpedia) - - el php devuelve la lista de enlaces a los videos +El paso 2 es con diferencia el más variable y depende mucho de cada web/servidor! +Desofuscando los js se pueden ver los datos propios que necesita cada uno +(el texto a encriptar, la clave a usar, la url dónde hay que llamar y los parámetros) -Notas: -- Creado a partir de lo visto en pelispedia y animeyt, que utilizan este sistema. -- Para otros canales habrá que añadir sus datos en las funciones calcular_* - o hacer que estas funciones puedan extraer lo necesario de los js. +Ver ejemplos en el código de los canales animeyt y pelispedia + +Created for Alfa-addon by Alfa Developers Team 2018 ''' # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -import urlparse +import os, base64, json, hashlib, urlparse from core import httptools from core import scrapertools -# ~ from platformcode import logger +from platformcode import logger +from aadecode import decode as aadecode -def gk_play(item): +# Descarga página y captura la petición de cookie +# ----------------------------------------------- +def get_data_and_cookie(item, ck_name='__cfduid'): - itemlist = [] - - # Descargar para tratar header y data por separado - # ------------------------------------------------ headers = {'Referer': item.referer} resp = httptools.downloadpage(item.url, headers=headers, cookies=False) # ~ with open('gk_play1.html', 'w') as f: f.write(resp.data); f.close() - # Obtener cookie __cfduid - # ----------------------- - for h in resp.headers: - ck = scrapertools.find_single_match(resp.headers[h], '__cfduid=([^;]*)') - if ck: - break - if not ck: return itemlist + ck_value = '' + if ck_name != '': + for h in resp.headers: + ck = scrapertools.find_single_match(resp.headers[h], '%s=([^;]*)' % ck_name) + if ck: + ck_value = ck + break - # Extraer datos y calcular token - # ------------------------------ - gsv = scrapertools.find_single_match(resp.data, 'Vidoza' in data or '|fastplay|' in data: - if '|fastplay|' in data: - packed = scrapertools.find_single_match(data, "") - from lib import jsunpack - data = jsunpack.unpack(packed) - data = data.replace("\\'", "'") - - matches = scrapertools.find_multiple_matches(data, 'file\s*:\s*"([^"]+)"\s*,\s*label\s*:\s*"([^"]+)"') - subtitle = '' - for fil, lbl in matches: - if fil.endswith('.srt') and not fil.endswith('empty.srt'): - subtitle = fil - if not subtitle.startswith('http'): - domi = scrapertools.find_single_match(data, 'aboutlink\s*:\s*"([^"]*)') - subtitle = domi + subtitle - break - - for fil, lbl in matches: - if not fil.endswith('.srt'): - itemlist.append([lbl, fil, 0, subtitle]) + return data +# Descarga json usando una cookie concreta +# ---------------------------------------- +def get_data_json(url, post, ck_value='', referer='', ck_name='__cfduid'): + + headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Cookie': ck_name+'='+ck_value} + if referer != '': headers['referer'] = referer + + data = httptools.downloadpage(url, post=post, headers=headers, cookies=False).data + # ~ with open('gk_play3.html', 'w') as f: f.write(data); f.close() + + return data + + +# Obtiene link de una llamada javascript Play() o de la url +# --------------------------------------------------------- +def get_play_link_id(data, url): + + playparms = scrapertools.find_single_match(data, 'Play\("([^"]*)","([^"]*)","([^"]*)"') + if playparms: + link = playparms[0] + subtitle = '' if playparms[1] == '' or playparms[2] == '' else playparms[2] + playparms[1] + '.srt' else: - playparms = scrapertools.find_single_match(resp.data, 'Play\("([^"]*)","([^"]*)","([^"]*)"') - if playparms: - link = playparms[0] - subtitle = '' if playparms[1] == '' or playparms[2] == '' else playparms[2] + playparms[1] + '.srt' + subtitle = '' + link = scrapertools.find_single_match(data, 'Play\("([^"]*)"') + if not link: + link = scrapertools.find_single_match(url, 'id=([^;]*)') + + return link, subtitle + + +# Extraer enlaces a videos de datos json +# -------------------------------------- +def extraer_enlaces_json(data, referer, subtitle=''): + itemlist = [] + + # Ejemplos: + # {"Animeyt":[{"file":"https:\/\/storage.googleapis.com\/my-project-yt-195318.appspot.com\/slow.mp4","type":"mp4","label":"1080p"}]} + # {"link":[{"link":"http:\/\/video8.narusaku.tv\/static\/720p\/2.1208982.2039540?md5=B64FKYNbFuWvxkGcSbtz2Q&expires=1528839657","label":"720p","type":"mp4"},{"link":"http:\/\/video5.narusaku.tv\/static\/480p\/2.1208982.2039540?md5=yhLG_3VghEUSd5YlCXOTBQ&expires=1528839657","label":"480p","type":"mp4","default":true},{"link":"http:\/\/video3.narusaku.tv\/static\/360p\/2.1208982.2039540?md5=vC0ZJkxRwV1rVBdeF7D4iA&expires=1528839657","label":"360p","type":"mp4"},{"link":"http:\/\/video2.narusaku.tv\/static\/240p\/2.1208982.2039540?md5=b-y_-rgrLMW7hJwFQSD8Tw&expires=1528839657","label":"240p","type":"mp4"}]} + # {"link":"https:\/\/storage.googleapis.com\/cloudflare-caching-pelispedia.appspot.com\/cache\/16050.mp4","type":"mp4"} + # {"Harbinger":[{"Harbinger":"...","type":"...","label":"..."}], ...} + + data = data.replace('"Harbinger"', '"file"') + + # Intentar como json + # ------------------ + try: + json_data = json.loads(data) + enlaces = analizar_enlaces_json(json_data) + for enlace in enlaces: + url = enlace['link'] if 'link' in enlace else enlace['file'] + if not url.startswith('http'): url = aadecode(base64.b64decode(url)) # necesario para "Harbinger" + if not url.startswith('http'): url = decode_rijndael(url) # post-"Harbinger" en algunos casos + tit = '' + if 'type' in enlace: tit += '[%s]' % enlace['type'] + if 'label' in enlace: tit += '[%s]' % enlace['label'] + if tit == '': tit = '.mp4' + + itemlist.append([tit, corregir_url(url, referer), 0, subtitle]) + + # Sino, intentar como texto + # ------------------------- + except: + matches = scrapertools.find_multiple_matches(data, '"link"\s*:\s*"([^"]*)"\s*,\s*"label"\s*:\s*"([^"]*)"\s*,\s*"type"\s*:\s*"([^"]*)"') + if matches: + for url, lbl, typ in matches: + itemlist.append(['[%s][%s]' % (typ, lbl), corregir_url(url, referer), 0, subtitle]) else: - subtitle = '' - link = scrapertools.find_single_match(resp.data, 'Play\("([^"]*)"') - if not link: - link = scrapertools.find_single_match(item.url, 'id=([^;]*)') - - if link: - # ~ logger.info('%s %s %s' % (item.url, link, token)) - url_gk = calcular_url_gk(item.url) - - post = "link=%s&token=%s" % (link, token) - headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Cookie': '__cfduid=' + ck} - - data = httptools.downloadpage(url_gk, post=post, headers=headers, cookies=False).data - # ~ with open('gk_play3.html', 'w') as f: f.write(resp.data); f.close() - - # Extraer enlaces de la respuesta - # ------------------------------- - matches = scrapertools.find_multiple_matches(data, '"link"\s*:\s*"([^"]*)"\s*,\s*"label"\s*:\s*"([^"]*)"\s*,\s*"type"\s*:\s*"([^"]*)"') - if matches: - for url, lbl, typ in matches: - itemlist.append(['[%s][%s]' % (typ, lbl), corregir_url(url, item.referer), 0, subtitle]) - else: - url = scrapertools.find_single_match(data, '"link"\s*:\s*"([^"]*)"') - if url: - itemlist.append(['.mp4', corregir_url(url, item.referer), 0, subtitle]) + url = scrapertools.find_single_match(data, '"link"\s*:\s*"([^"]*)"') + if url: + itemlist.append(['.mp4', corregir_url(url, referer), 0, subtitle]) return itemlist -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Función recursiva que busca videos en un diccionario +# ---------------------------------------------------- +def analizar_enlaces_json(d): + itemlist = [] + found = {} + for k, v in d.iteritems(): + if k in ['file','link','type','label'] and not isinstance(v, list): + found[k] = v + + if isinstance(v, list): + for l in v: + if isinstance(l, dict): itemlist += analizar_enlaces_json(l) + + if 'file' in found or 'link' in found: + itemlist.append(found) + + return itemlist + # Correcciones en las urls finales obtenidas # ------------------------------------------ @@ -149,6 +168,66 @@ def corregir_url(url, referer): return url + +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +# Conversion tipo hexa que hay en el js +# ------------------------------------- +def toHex(txt): + ret = '' + for i in range(len(txt)): + ret += str(hex(ord(txt[i]))).replace('x','')[-2:] + return ret + + +# Subrutinas de encriptación +# -------------------------- + +def md5_dominio(url): # sutorimux/kubechi + h = hashlib.md5(urlparse.urlparse(url).netloc) + return h.hexdigest() + + +def transforma_gsv(gsv, valor): + llista = range(256) + a = 0 + for i in range(256): + a = (a + llista[i] + ord(gsv[i % len(gsv)]) ) % 256 + b = llista[i] + llista[i] = llista[a] + llista[a] = b + + ret = '' + a = 0; b= 0 + for i in range(len(valor)): + a = (a + 1) % 256 + b = (b + llista[a]) % 256 + c = llista[a] + llista[a] = llista[b] + llista[b] = c + ret += chr(ord(valor[i]) ^ llista[(llista[a] + llista[b]) % 256]) + + return base64.b64encode(ret) + + + +# Codificar/Decodificar con Rijndael +# ---------------------------------- + +def encode_rijndael(msg, IV, key): + import rijndael + return rijndael.cbc_encrypt(msg, IV, key) + + +def decode_rijndael(txt, preIV='b3512f4972d314da9', key='3e1a854e7d5835ab99d99a29afec8bbb'): + import rijndael + msg = base64.b64decode(txt[:-15]) + IV = preIV + txt[-15:] + deco = rijndael.cbc_decrypt(msg, IV, key) + return deco.replace(chr(0), '') + + # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -159,6 +238,7 @@ def corregir_url(url, referer): # pwd: Password def generar_token(gsv, pwd): txt = obtener_cripto(pwd, gsv) + # ~ logger.info('Texto pre token %s' % txt) _0x382d28 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' @@ -182,18 +262,17 @@ def generar_token(gsv, pwd): def obtener_cripto(password, plaintext): - import os, base64, json - SALT_LENGTH = 8 - BLOCK_SIZE = 16 - KEY_SIZE = 32 - - salt = os.urandom(SALT_LENGTH) - iv = os.urandom(BLOCK_SIZE) - - paddingLength = 16 - (len(plaintext) % 16) - paddedPlaintext = plaintext+chr(paddingLength)*paddingLength + salt = os.urandom(8) + paddingLength = len(plaintext) % 16 + if paddingLength == 0: + paddedPlaintext = plaintext + else: + dif = 16 - paddingLength + paddedPlaintext = plaintext + chr(dif)*dif + kdf = evpKDF(password, salt) + iv = kdf['iv'] try: # Intentar con librería AES del sistema from Crypto.Cipher import AES @@ -207,7 +286,6 @@ def obtener_cripto(password, plaintext): def evpKDF(passwd, salt, key_size=8, iv_size=4, iterations=1, hash_algorithm="md5"): - import hashlib target_key_size = key_size + iv_size derived_bytes = "" number_of_derived_words = 0 @@ -235,63 +313,3 @@ def evpKDF(passwd, salt, key_size=8, iv_size=4, iterations=1, hash_algorithm="md "key": derived_bytes[0: key_size * 4], "iv": derived_bytes[key_size * 4:] } - - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Valores extraídos de los js para los dominios tratados (pendiente automatizar!) -# Ej: https://pelispedia.video/plugins/gkpluginsphp.js?v=3.3 -# Ej: https://s2.animeyt.tv/rakuten/plugins/rakuten676.js?v=200000000 - -def calcular_sutorimux(url): - dominio = urlparse.urlparse(url).netloc - claves = { - 'pelispedia.video': 'b0a8c83650f18ccc7c87b16e3c460474', - 'load.pelispedia.vip': '4fe554b59d760c9986c903b07af8b7a4', - - 's1.animeyt.tv': '0cdf0d0302091bc22a0afdc3f13c0773', - 's2.animeyt.tv': '079c3ee3ca289af95d819d93b852ed94', - 's3.animeyt.tv': '6c21a435bce9f5926d26db567fee1241', - 's4.animeyt.tv': '38546fb4797f2f7c5b6690a5b4a47e34', - 's10.animeyt.tv': 'be88e4cc014c0ae6f9f2d1f947b3b23b', - 's.animeyt.tv': '49f911abffe682820dc5b54777713974', - 'server.animeyt.tv': '2c60637d7f7aa54225c20aea61a2b468', - 'api.animeyt.tv': '54092dea9fd2e163aaa59ad0c4351866', - } - return '' if dominio not in claves else claves[dominio] - - -def calcular_sufijo(url): - dominio = urlparse.urlparse(url).netloc - claves = { - 'pelispedia.video': '2653', - 'load.pelispedia.vip': '785446346', - - 's1.animeyt.tv': '', - 's2.animeyt.tv': '3497510', - 's3.animeyt.tv': '', - 's4.animeyt.tv': '', - 's10.animeyt.tv': '', - 's.animeyt.tv': '', - 'server.animeyt.tv': '', - 'api.animeyt.tv': '', - } - return '' if dominio not in claves else claves[dominio] - - -def calcular_url_gk(url): - dominio = urlparse.urlparse(url).netloc - claves = { - 'pelispedia.video': 'https://pelispedia.video/plugins/cloupedia.php', # plugins/gkpedia.php - 'load.pelispedia.vip': '', - - 's1.animeyt.tv': '', - 's2.animeyt.tv': 'https://s2.animeyt.tv/rakuten/plugins/gkpluginsphp.php', - 's3.animeyt.tv': '', - 's4.animeyt.tv': '', - 's10.animeyt.tv': '', - 's.animeyt.tv': '', - 'server.animeyt.tv': '', - 'api.animeyt.tv': '', - } - return '' if dominio not in claves else claves[dominio] diff --git a/plugin.video.alfa/lib/rijndael/__init__.py b/plugin.video.alfa/lib/rijndael/__init__.py new file mode 100644 index 00000000..776f8091 --- /dev/null +++ b/plugin.video.alfa/lib/rijndael/__init__.py @@ -0,0 +1,23 @@ +from rijndael import rijndael +from rijndael_cbc import zeropad, cbc + +import base64 + + +def cbc_encrypt(msg, IV, key, size=32): + + r = rijndael(key, size) + pad = zeropad(size) + cri = cbc(pad, r, IV) + encod = cri.encrypt(msg) + + return encod #.encode('hex') + + +def cbc_decrypt(msg, IV, key, size=32): + + r = rijndael(key, size) + pad = zeropad(size) + cri = cbc(pad, r, IV) + + return cri.decrypt(msg) diff --git a/plugin.video.alfa/lib/rijndael/rijndael.py b/plugin.video.alfa/lib/rijndael/rijndael.py new file mode 100644 index 00000000..d185d952 --- /dev/null +++ b/plugin.video.alfa/lib/rijndael/rijndael.py @@ -0,0 +1,361 @@ +""" +A pure python (slow) implementation of rijndael with a decent interface + +To include - + +from rijndael import rijndael + +To do a key setup - + +r = rijndael(key, block_size = 16) + +key must be a string of length 16, 24, or 32 +blocksize must be 16, 24, or 32. Default is 16 + +To use - + +ciphertext = r.encrypt(plaintext) +plaintext = r.decrypt(ciphertext) + +If any strings are of the wrong length a ValueError is thrown +""" + +# ported from the Java reference code by Bram Cohen, April 2001 +# this code is public domain, unless someone makes +# an intellectual property claim against the reference +# code, in which case it can be made public domain by +# deleting all the comments and renaming all the variables + +import copy +import string + +shifts = [[[0, 0], [1, 3], [2, 2], [3, 1]], + [[0, 0], [1, 5], [2, 4], [3, 3]], + [[0, 0], [1, 7], [3, 5], [4, 4]]] + +# [keysize][block_size] +num_rounds = {16: {16: 10, 24: 12, 32: 14}, 24: {16: 12, 24: 12, 32: 14}, 32: {16: 14, 24: 14, 32: 14}} + +A = [[1, 1, 1, 1, 1, 0, 0, 0], + [0, 1, 1, 1, 1, 1, 0, 0], + [0, 0, 1, 1, 1, 1, 1, 0], + [0, 0, 0, 1, 1, 1, 1, 1], + [1, 0, 0, 0, 1, 1, 1, 1], + [1, 1, 0, 0, 0, 1, 1, 1], + [1, 1, 1, 0, 0, 0, 1, 1], + [1, 1, 1, 1, 0, 0, 0, 1]] + +# produce log and alog tables, needed for multiplying in the +# field GF(2^m) (generator = 3) +alog = [1] +for i in range(255): + j = (alog[-1] << 1) ^ alog[-1] + if j & 0x100 != 0: + j ^= 0x11B + alog.append(j) + +log = [0] * 256 +for i in range(1, 255): + log[alog[i]] = i + +# multiply two elements of GF(2^m) +def mul(a, b): + if a == 0 or b == 0: + return 0 + return alog[(log[a & 0xFF] + log[b & 0xFF]) % 255] + +# substitution box based on F^{-1}(x) +box = [[0] * 8 for i in range(256)] +box[1][7] = 1 +for i in range(2, 256): + j = alog[255 - log[i]] + for t in range(8): + box[i][t] = (j >> (7 - t)) & 0x01 + +B = [0, 1, 1, 0, 0, 0, 1, 1] + +# affine transform: box[i] <- B + A*box[i] +cox = [[0] * 8 for i in range(256)] +for i in range(256): + for t in range(8): + cox[i][t] = B[t] + for j in range(8): + cox[i][t] ^= A[t][j] * box[i][j] + +# S-boxes and inverse S-boxes +S = [0] * 256 +Si = [0] * 256 +for i in range(256): + S[i] = cox[i][0] << 7 + for t in range(1, 8): + S[i] ^= cox[i][t] << (7-t) + Si[S[i] & 0xFF] = i + +# T-boxes +G = [[2, 1, 1, 3], + [3, 2, 1, 1], + [1, 3, 2, 1], + [1, 1, 3, 2]] + +AA = [[0] * 8 for i in range(4)] + +for i in range(4): + for j in range(4): + AA[i][j] = G[i][j] + AA[i][i+4] = 1 + +for i in range(4): + pivot = AA[i][i] + if pivot == 0: + t = i + 1 + while AA[t][i] == 0 and t < 4: + t += 1 + assert t != 4, 'G matrix must be invertible' + for j in range(8): + AA[i][j], AA[t][j] = AA[t][j], AA[i][j] + pivot = AA[i][i] + for j in range(8): + if AA[i][j] != 0: + AA[i][j] = alog[(255 + log[AA[i][j] & 0xFF] - log[pivot & 0xFF]) % 255] + for t in range(4): + if i != t: + for j in range(i+1, 8): + AA[t][j] ^= mul(AA[i][j], AA[t][i]) + AA[t][i] = 0 + +iG = [[0] * 4 for i in range(4)] + +for i in range(4): + for j in range(4): + iG[i][j] = AA[i][j + 4] + +def mul4(a, bs): + if a == 0: + return 0 + r = 0 + for b in bs: + r <<= 8 + if b != 0: + r = r | mul(a, b) + return r + +T1 = [] +T2 = [] +T3 = [] +T4 = [] +T5 = [] +T6 = [] +T7 = [] +T8 = [] +U1 = [] +U2 = [] +U3 = [] +U4 = [] + +for t in range(256): + s = S[t] + T1.append(mul4(s, G[0])) + T2.append(mul4(s, G[1])) + T3.append(mul4(s, G[2])) + T4.append(mul4(s, G[3])) + + s = Si[t] + T5.append(mul4(s, iG[0])) + T6.append(mul4(s, iG[1])) + T7.append(mul4(s, iG[2])) + T8.append(mul4(s, iG[3])) + + U1.append(mul4(t, iG[0])) + U2.append(mul4(t, iG[1])) + U3.append(mul4(t, iG[2])) + U4.append(mul4(t, iG[3])) + +# round constants +rcon = [1] +r = 1 +for t in range(1, 30): + r = mul(2, r) + rcon.append(r) + +del A +del AA +del pivot +del B +del G +del box +del log +del alog +del i +del j +del r +del s +del t +del mul +del mul4 +del cox +del iG + +class rijndael: + def __init__(self, key, block_size = 16): + if block_size != 16 and block_size != 24 and block_size != 32: + raise ValueError('Invalid block size: ' + str(block_size)) + if len(key) != 16 and len(key) != 24 and len(key) != 32: + raise ValueError('Invalid key size: ' + str(len(key))) + self.block_size = block_size + + ROUNDS = num_rounds[len(key)][block_size] + BC = block_size // 4 + # encryption round keys + Ke = [[0] * BC for i in range(ROUNDS + 1)] + # decryption round keys + Kd = [[0] * BC for i in range(ROUNDS + 1)] + ROUND_KEY_COUNT = (ROUNDS + 1) * BC + KC = len(key) // 4 + + # copy user material bytes into temporary ints + tk = [] + for i in range(0, KC): + tk.append((ord(key[i * 4]) << 24) | (ord(key[i * 4 + 1]) << 16) | + (ord(key[i * 4 + 2]) << 8) | ord(key[i * 4 + 3])) + + # copy values into round key arrays + t = 0 + j = 0 + while j < KC and t < ROUND_KEY_COUNT: + Ke[t // BC][t % BC] = tk[j] + Kd[ROUNDS - (t // BC)][t % BC] = tk[j] + j += 1 + t += 1 + tt = 0 + rconpointer = 0 + while t < ROUND_KEY_COUNT: + # extrapolate using phi (the round key evolution function) + tt = tk[KC - 1] + tk[0] ^= (S[(tt >> 16) & 0xFF] & 0xFF) << 24 ^ \ + (S[(tt >> 8) & 0xFF] & 0xFF) << 16 ^ \ + (S[ tt & 0xFF] & 0xFF) << 8 ^ \ + (S[(tt >> 24) & 0xFF] & 0xFF) ^ \ + (rcon[rconpointer] & 0xFF) << 24 + rconpointer += 1 + if KC != 8: + for i in range(1, KC): + tk[i] ^= tk[i-1] + else: + for i in range(1, KC // 2): + tk[i] ^= tk[i-1] + tt = tk[KC // 2 - 1] + tk[KC // 2] ^= (S[ tt & 0xFF] & 0xFF) ^ \ + (S[(tt >> 8) & 0xFF] & 0xFF) << 8 ^ \ + (S[(tt >> 16) & 0xFF] & 0xFF) << 16 ^ \ + (S[(tt >> 24) & 0xFF] & 0xFF) << 24 + for i in range(KC // 2 + 1, KC): + tk[i] ^= tk[i-1] + # copy values into round key arrays + j = 0 + while j < KC and t < ROUND_KEY_COUNT: + Ke[t // BC][t % BC] = tk[j] + Kd[ROUNDS - (t // BC)][t % BC] = tk[j] + j += 1 + t += 1 + # inverse MixColumn where needed + for r in range(1, ROUNDS): + for j in range(BC): + tt = Kd[r][j] + Kd[r][j] = U1[(tt >> 24) & 0xFF] ^ \ + U2[(tt >> 16) & 0xFF] ^ \ + U3[(tt >> 8) & 0xFF] ^ \ + U4[ tt & 0xFF] + self.Ke = Ke + self.Kd = Kd + + def encrypt(self, plaintext): + if len(plaintext) != self.block_size: + raise ValueError('wrong block length, expected ' + str(self.block_size) + ' got ' + str(len(plaintext))) + Ke = self.Ke + + BC = self.block_size // 4 + ROUNDS = len(Ke) - 1 + if BC == 4: + SC = 0 + elif BC == 6: + SC = 1 + else: + SC = 2 + s1 = shifts[SC][1][0] + s2 = shifts[SC][2][0] + s3 = shifts[SC][3][0] + a = [0] * BC + # temporary work array + t = [] + # plaintext to ints + key + for i in range(BC): + t.append((ord(plaintext[i * 4 ]) << 24 | + ord(plaintext[i * 4 + 1]) << 16 | + ord(plaintext[i * 4 + 2]) << 8 | + ord(plaintext[i * 4 + 3]) ) ^ Ke[0][i]) + # apply round transforms + for r in range(1, ROUNDS): + for i in range(BC): + a[i] = (T1[(t[ i ] >> 24) & 0xFF] ^ + T2[(t[(i + s1) % BC] >> 16) & 0xFF] ^ + T3[(t[(i + s2) % BC] >> 8) & 0xFF] ^ + T4[ t[(i + s3) % BC] & 0xFF] ) ^ Ke[r][i] + t = copy.copy(a) + # last round is special + result = [] + for i in range(BC): + tt = Ke[ROUNDS][i] + result.append((S[(t[ i ] >> 24) & 0xFF] ^ (tt >> 24)) & 0xFF) + result.append((S[(t[(i + s1) % BC] >> 16) & 0xFF] ^ (tt >> 16)) & 0xFF) + result.append((S[(t[(i + s2) % BC] >> 8) & 0xFF] ^ (tt >> 8)) & 0xFF) + result.append((S[ t[(i + s3) % BC] & 0xFF] ^ tt ) & 0xFF) + return ''.join(map(chr, result)) + + def decrypt(self, ciphertext): + if len(ciphertext) != self.block_size: + raise ValueError('wrong block length, expected ' + str(self.block_size) + ' got ' + str(len(ciphertext))) + Kd = self.Kd + + BC = self.block_size // 4 + ROUNDS = len(Kd) - 1 + if BC == 4: + SC = 0 + elif BC == 6: + SC = 1 + else: + SC = 2 + s1 = shifts[SC][1][1] + s2 = shifts[SC][2][1] + s3 = shifts[SC][3][1] + a = [0] * BC + # temporary work array + t = [0] * BC + # ciphertext to ints + key + for i in range(BC): + t[i] = (ord(ciphertext[i * 4 ]) << 24 | + ord(ciphertext[i * 4 + 1]) << 16 | + ord(ciphertext[i * 4 + 2]) << 8 | + ord(ciphertext[i * 4 + 3]) ) ^ Kd[0][i] + # apply round transforms + for r in range(1, ROUNDS): + for i in range(BC): + a[i] = (T5[(t[ i ] >> 24) & 0xFF] ^ + T6[(t[(i + s1) % BC] >> 16) & 0xFF] ^ + T7[(t[(i + s2) % BC] >> 8) & 0xFF] ^ + T8[ t[(i + s3) % BC] & 0xFF] ) ^ Kd[r][i] + t = copy.copy(a) + # last round is special + result = [] + for i in range(BC): + tt = Kd[ROUNDS][i] + result.append((Si[(t[ i ] >> 24) & 0xFF] ^ (tt >> 24)) & 0xFF) + result.append((Si[(t[(i + s1) % BC] >> 16) & 0xFF] ^ (tt >> 16)) & 0xFF) + result.append((Si[(t[(i + s2) % BC] >> 8) & 0xFF] ^ (tt >> 8)) & 0xFF) + result.append((Si[ t[(i + s3) % BC] & 0xFF] ^ tt ) & 0xFF) + return ''.join(map(chr, result)) + +def encrypt(key, block): + return rijndael(key, len(block)).encrypt(block) + +def decrypt(key, block): + return rijndael(key, len(block)).decrypt(block) \ No newline at end of file diff --git a/plugin.video.alfa/lib/rijndael/rijndael_cbc.py b/plugin.video.alfa/lib/rijndael/rijndael_cbc.py new file mode 100644 index 00000000..ce12c68b --- /dev/null +++ b/plugin.video.alfa/lib/rijndael/rijndael_cbc.py @@ -0,0 +1,71 @@ +# https://stackoverflow.com/questions/8356689/python-equivalent-of-phps-mcrypt-rijndael-256-cbc + +class zeropad: + + def __init__(self, block_size): + assert block_size > 0 and block_size < 256 + self.block_size = block_size + + def pad(self, pt): + ptlen = len(pt) + padsize = self.block_size - ((ptlen + self.block_size - 1) % self.block_size + 1) + return pt + "\0" * padsize + + def unpad(self, ppt): + assert len(ppt) % self.block_size == 0 + offset = len(ppt) + if (offset == 0): + return '' + end = offset - self.block_size + 1 + while (offset > end): + offset -= 1; + if (ppt[offset] != "\0"): + return ppt[:offset + 1] + assert false + +class cbc: + + def __init__(self, padding, cipher, iv): + assert padding.block_size == cipher.block_size; + assert len(iv) == cipher.block_size; + self.padding = padding + self.cipher = cipher + self.iv = iv + + def encrypt(self, pt): + ppt = self.padding.pad(pt) + offset = 0 + ct = '' + v = self.iv + while (offset < len(ppt)): + block = ppt[offset:offset + self.cipher.block_size] + block = self.xorblock(block, v) + block = self.cipher.encrypt(block) + ct += block + offset += self.cipher.block_size + v = block + return ct; + + def decrypt(self, ct): + assert len(ct) % self.cipher.block_size == 0 + ppt = '' + offset = 0 + v = self.iv + while (offset < len(ct)): + block = ct[offset:offset + self.cipher.block_size] + decrypted = self.cipher.decrypt(block) + ppt += self.xorblock(decrypted, v) + offset += self.cipher.block_size + v = block + pt = self.padding.unpad(ppt) + return pt; + + def xorblock(self, b1, b2): + # sorry, not very Pythonesk + i = 0 + r = ''; + while (i < self.cipher.block_size): + r += chr(ord(b1[i]) ^ ord(b2[i])) + i += 1 + return r + From 4d97c85495f951d97fa9f0679b2b06af203b6d03 Mon Sep 17 00:00:00 2001 From: alaquepasa <39385022+alaquepasa@users.noreply.github.com> Date: Mon, 2 Jul 2018 11:41:29 +0200 Subject: [PATCH 28/66] Update URL --- mediaserver/platformcode/template/js/ui.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediaserver/platformcode/template/js/ui.js b/mediaserver/platformcode/template/js/ui.js index 65fa15a7..106f574c 100644 --- a/mediaserver/platformcode/template/js/ui.js +++ b/mediaserver/platformcode/template/js/ui.js @@ -94,7 +94,7 @@ function focus_element(element) { function image_error(thumbnail) { var src = thumbnail.src; if (thumbnail.src.indexOf(domain) == 0) { - thumbnail.src = "https://github.com/alfa-addon/addon/raw/master/plugin.video.alfa/resources/media/general/default/thumb_folder.png"; + thumbnail.src = "https://github.com/alfa-addon/addon/raw/master/plugin.video.alfa/resources/media/themes/default/thumb_folder.png" } else { thumbnail.src = domain + "/proxy/" + encodeURIComponent(btoa(thumbnail.src)); From ba1523f2fc2a405eb9f15ae49aa3acd5c8135d8f Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Mon, 2 Jul 2018 08:35:54 -0500 Subject: [PATCH 29/66] =?UTF-8?q?httptools:=20Agregado=20versi=C3=B3n=20de?= =?UTF-8?q?l=20addon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin.video.alfa/core/httptools.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/plugin.video.alfa/core/httptools.py b/plugin.video.alfa/core/httptools.py index 460f4f37..9829f714 100755 --- a/plugin.video.alfa/core/httptools.py +++ b/plugin.video.alfa/core/httptools.py @@ -18,6 +18,9 @@ from core.cloudflare import Cloudflare from platformcode import config, logger from platformcode.logger import WebErrorException +## Obtiene la versión del addon +__version = config.get_addon_version() + cookies_lock = Lock() cj = cookielib.MozillaCookieJar() @@ -123,7 +126,7 @@ def downloadpage(url, post=None, headers=None, timeout=None, follow_redirects=Tr url = urllib.quote(url, safe="%/:=&?~#+!$,;'@()*[]") logger.info("----------------------------------------------") - logger.info("downloadpage") + logger.info("downloadpage Alfa: %s" %__version) logger.info("----------------------------------------------") logger.info("Timeout: %s" % timeout) logger.info("URL: " + url) @@ -270,3 +273,5 @@ class NoRedirectHandler(urllib2.HTTPRedirectHandler): http_error_301 = http_error_302 http_error_303 = http_error_302 http_error_307 = http_error_302 + + From 3fca1d07fad7dc5aee3f60e2f5f1aecd2f69b503 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Mon, 2 Jul 2018 08:39:52 -0500 Subject: [PATCH 30/66] =?UTF-8?q?html.py:=20Actualizado=20obtenci=C3=B3n?= =?UTF-8?q?=20de=20la=20versi=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mediaserver/platformcode/controllers/html.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/mediaserver/platformcode/controllers/html.py b/mediaserver/platformcode/controllers/html.py index 573171a1..77dfe820 100644 --- a/mediaserver/platformcode/controllers/html.py +++ b/mediaserver/platformcode/controllers/html.py @@ -15,14 +15,9 @@ from platformcode import config from core.item import Item from core.tmdb import Tmdb from platformcode import launcher, logger -from core import filetools -# -data = filetools.read(filetools.join(config.get_runtime_path(), "addon.xml")) -aux = re.findall(' 0: - version = aux[0] +## Obtiene la versión del addon +version = config.get_addon_version() class html(Controller): pattern = re.compile("##") From f4198b61c2e05dbb95ecad5b505854c508163496 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Mon, 2 Jul 2018 08:43:40 -0500 Subject: [PATCH 31/66] alfa.py: Agregado version al show_info --- mediaserver/alfa.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mediaserver/alfa.py b/mediaserver/alfa.py index f90710ee..87b61dc2 100644 --- a/mediaserver/alfa.py +++ b/mediaserver/alfa.py @@ -20,6 +20,7 @@ import WebSocket http_port = config.get_setting("server.port") websocket_port = config.get_setting("websocket.port") myip = config.get_local_ip() +version = config.get_addon_version() def thread_name_wrap(func): @@ -43,7 +44,7 @@ if sys.version_info < (2, 7, 11): def show_info(): os.system('cls' if os.name == 'nt' else 'clear') print ("--------------------------------------------------------------------") - print ("Alfa Iniciado") + print ("Alfa %s Iniciado" %version) print ("La URL para acceder es http://%s:%s" % (myip, http_port)) print ("WebSocket Server iniciado en ws://%s:%s" % (myip, websocket_port)) print ("--------------------------------------------------------------------") From a7dccc0f361be3b808a2c561fbac535ceaaabde8 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Mon, 2 Jul 2018 08:53:06 -0500 Subject: [PATCH 32/66] allcalidad: cambios cosmeticos --- plugin.video.alfa/channels/allcalidad.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugin.video.alfa/channels/allcalidad.py b/plugin.video.alfa/channels/allcalidad.py index 8c607370..7a84ae36 100755 --- a/plugin.video.alfa/channels/allcalidad.py +++ b/plugin.video.alfa/channels/allcalidad.py @@ -147,10 +147,12 @@ def findvideos(item): match = scrapertools.find_multiple_matches(bloque, '(?is)(?:iframe|script) .*?src="([^"]+)') for url in match: titulo = "Ver en: %s" + text_color = "white" if "goo.gl" in url: url = httptools.downloadpage(url, follow_redirects=False, only_headers=True).headers.get("location", "") if "youtube" in url: - titulo = "[COLOR = yellow]Ver trailer: %s[/COLOR]" + titulo = "Ver trailer: %s" + text_color = "yellow" if "ad.js" in url or "script" in url or "jstags.js" in url: continue elif "vimeo" in url: @@ -158,6 +160,7 @@ def findvideos(item): itemlist.append( item.clone(channel = item.channel, action = "play", + text_color = text_color, title = titulo, url = url )) From 4e8d1437742b86b4a1add51a4f1665a4b0a3e4ee Mon Sep 17 00:00:00 2001 From: alaquepasa <39385022+alaquepasa@users.noreply.github.com> Date: Mon, 2 Jul 2018 16:41:37 +0200 Subject: [PATCH 33/66] Usar un handler HTTP que gestiona WebSockets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Con un handler HTTP que también gestione WebSockets podemos gestionar los WebSockets en el mismo puerto HTTP, así no es necesario usar / abrir dos puertos. Para eso he usado el handler creado por SevenW en: https://github.com/SevenW/httpwebsockethandler y que extiende el SimpleHTTPServer. Aunque ha sido ligeralmente modificado: - He creado un wrapper para las peticiones HTTP GET, el antiguo do_GET ahora es do_GET_HTTP - He desactivado una parte de autenticación que tenía (ni he mirado en intentar mantelerlo, aunque si mantenemos el del do_GET_HTTP, pero supongo que también debería protegerse el de las querys WS y seguramente sería muy muy sencillo reactivarle esa funcionaliad y quitarle el comentario) En el server mantenemos el antiguo do_GET pero renombrado a do_GET_HTTP, y se han movido los métodos del WebSocketServer a este handler. He quitado las cosas que configuran un puerto WebSocket ya que ahora es el mismo que HTTP. Había pensado en enviarlo en otra carpetita (mediaserver-alt) o algo así, por si acaso usar lo otro tiene algún setido (como que no se usen ciertas clases por compatibilidad con pythons antiguos), pero bueno, por ahora lo dejo aquí, siempre se puede hacer rollback + crear una nueva carpeta. --- mediaserver/HTTPAndWSServer.py | 150 ++++ mediaserver/WebSocket.py | 89 --- mediaserver/alfa.py | 10 +- mediaserver/lib/HTTPWebSocketsHandler.py | 229 +++++++ mediaserver/lib/WebSocketServer.py | 648 ------------------ .../platformcode/controllers/fileserver.py | 1 - mediaserver/platformcode/controllers/html.py | 5 +- mediaserver/platformcode/template/page.html | 2 +- 8 files changed, 387 insertions(+), 747 deletions(-) create mode 100644 mediaserver/HTTPAndWSServer.py delete mode 100644 mediaserver/WebSocket.py create mode 100644 mediaserver/lib/HTTPWebSocketsHandler.py delete mode 100644 mediaserver/lib/WebSocketServer.py diff --git a/mediaserver/HTTPAndWSServer.py b/mediaserver/HTTPAndWSServer.py new file mode 100644 index 00000000..9703ddf1 --- /dev/null +++ b/mediaserver/HTTPAndWSServer.py @@ -0,0 +1,150 @@ +# -*- coding: utf-8 -*- + +import random +import re +import threading +import time +import traceback +from BaseHTTPServer import HTTPServer +from HTTPWebSocketsHandler import HTTPWebSocketsHandler + +from platformcode import config, logger +from core import jsontools as json + +class MyHTTPServer(HTTPServer): + daemon_threads = True + + def process_request_thread(self, request, client_address): + try: + self.finish_request(request, client_address) + self.shutdown_request(request) + except: + self.handle_error(request, client_address) + self.shutdown_request(request) + + def process_request(self, request, client_address): + ID = "%032x" % (random.getrandbits(128)) + t = threading.Thread(target=self.process_request_thread, + args=(request, client_address), name=ID) + t.daemon = self.daemon_threads + t.start() + + def handle_error(self, request, client_address): + import traceback + if not "socket.py" in traceback.format_exc(): + logger.error(traceback.format_exc()) + + +class Handler(HTTPWebSocketsHandler): + def log_message(self, format, *args): + # sys.stderr.write("%s - - [%s] %s\n" %(self.client_address[0], self.log_date_time_string(), format%args)) + pass + + def sendMessage(self, message): + self.send_message(message) + + def do_GET_HTTP(self): + from platformcode import platformtools + from platformcode import controllers + # Control de accesos + Usuario = "user" + Password = "password" + ControlAcceso = False + import base64 + # Comprueba la clave + if ControlAcceso and self.headers.getheader('Authorization') <> "Basic " + base64.b64encode( + Usuario + ":" + Password): + self.send_response(401) + self.send_header('WWW-Authenticate', + 'Basic realm=\"Introduce el nombre de usuario y clave para acceder a alfa\"') + self.send_header('Content-type', 'text/html; charset=utf-8') + self.end_headers() + self.wfile.write('¡Los datos introducidos no son correctos!') + return + + data = re.compile('/data/([^/]+)/([^/]+)/([^/]+)', re.DOTALL).findall(self.path) + if data: + data = data[0] + if data[0] in platformtools.requests: + c = platformtools.requests[data[0]] + response = {"id": data[1], "result": data[2]} + print response + c.handler = self + c.set_data(response) + while data[0] in platformtools.requests and not self.wfile.closed: + time.sleep(1) + else: + if self.path == "": self.path = "/" + + # Busca el controller para la url + controller = controllers.find_controller(self.path) + if controller: + try: + c = controller(self) + c.run(self.path) + except: + if not "socket.py" in traceback.format_exc(): + logger.error(traceback.format_exc()) + finally: + c.__del__() + del c + return + + def on_ws_message(self, message): + try: + if message: + json_message = json.load(message) + + if "request" in json_message: + t = threading.Thread(target=run, args=[self.controller, json_message["request"].encode("utf8")], name=self.ID) + t.setDaemon(True) + t.start() + + elif "data" in json_message: + if type(json_message["data"]["result"]) == unicode: + json_message["data"]["result"] = json_message["data"]["result"].encode("utf8") + + self.controller.data = json_message["data"] + + except: + logger.error(traceback.format_exc()) + show_error_message(traceback.format_exc()) + + def on_ws_connected(self): + try: + self.ID = "%032x" % (random.getrandbits(128)) + from platformcode.controllers.html import html + self.controller = html(self, self.ID) + self.server.fnc_info() + except: + logger.error(traceback.format_exc()) + + def on_ws_closed(self): + self.controller.__del__() + del self.controller + self.server.fnc_info() + + def address_string(self): + # Disable reverse name lookups + return self.client_address[:2][0] + + +PORT = config.get_setting("server.port") +server = MyHTTPServer(('', int(PORT)), Handler) + +def run(controller, path): + try: + controller.run(path) + except: + logger.error(traceback.format_exc()) + show_error_message(traceback.format_exc()) + + +def start(fnc_info): + server.fnc_info = fnc_info + threading.Thread(target=server.serve_forever).start() + + +def stop(): + server.socket.close() + server.shutdown() diff --git a/mediaserver/WebSocket.py b/mediaserver/WebSocket.py deleted file mode 100644 index 083f692d..00000000 --- a/mediaserver/WebSocket.py +++ /dev/null @@ -1,89 +0,0 @@ -# -*- coding: utf-8 -*- -# ------------------------------------------------------------ -# HTTPServer -# ------------------------------------------------------------ -import os -import random -import traceback -from threading import Thread - -import WebSocketServer - -from core import jsontools as json -from platformcode import config, platformtools, logger - - -class HandleWebSocket(WebSocketServer.WebSocket): - def handleMessage(self): - try: - if self.data: - json_message = json.load(str(self.data)) - - if "request" in json_message: - t = Thread(target=run, args=[self.controller, json_message["request"].encode("utf8")], name=self.ID) - t.setDaemon(True) - t.start() - - elif "data" in json_message: - if type(json_message["data"]["result"]) == unicode: - json_message["data"]["result"] = json_message["data"]["result"].encode("utf8") - - self.controller.data = json_message["data"] - - except: - logger.error(traceback.format_exc()) - show_error_message(traceback.format_exc()) - - def handleConnected(self): - try: - self.ID = "%032x" % (random.getrandbits(128)) - from platformcode.controllers.html import html - self.controller = html(self, self.ID) - self.server.fnc_info() - except: - logger.error(traceback.format_exc()) - self.close() - - def handleClose(self): - self.controller.__del__() - del self.controller - self.server.fnc_info() - - -port = config.get_setting("websocket.port") -server = WebSocketServer.SimpleWebSocketServer("", int(port), HandleWebSocket) - - -def start(fnc_info): - server.fnc_info = fnc_info - Thread(target=server.serveforever).start() - - -def stop(): - server.close() - - -def run(controller, path): - try: - controller.run(path) - except: - logger.error(traceback.format_exc()) - show_error_message(traceback.format_exc()) - - -def show_error_message(err_info): - from core import scrapertools - patron = 'File "' + os.path.join(config.get_runtime_path(), "channels", "").replace("\\", "\\\\") + '([^.]+)\.py"' - canal = scrapertools.find_single_match(err_info, patron) - if canal: - platformtools.dialog_ok( - "Se ha producido un error en el canal " + canal, - "Esto puede ser devido a varias razones: \n \ - - El servidor no está disponible, o no esta respondiendo.\n \ - - Cambios en el diseño de la web.\n \ - - Etc...\n \ - Comprueba el log para ver mas detalles del error.") - else: - platformtools.dialog_ok( - "Se ha producido un error en Alfa", - "Comprueba el log para ver mas detalles del error.") diff --git a/mediaserver/alfa.py b/mediaserver/alfa.py index f90710ee..8a6392c9 100644 --- a/mediaserver/alfa.py +++ b/mediaserver/alfa.py @@ -14,8 +14,7 @@ from platformcode import config sys.path.append(os.path.join(config.get_runtime_path(), 'lib')) from platformcode import platformtools, logger -import HTTPServer -import WebSocket +import HTTPAndWSServer http_port = config.get_setting("server.port") websocket_port = config.get_setting("websocket.port") @@ -67,8 +66,7 @@ def start(): logger.info("server init...") config.verify_directories_created() try: - HTTPServer.start(show_info) - WebSocket.start(show_info) + HTTPAndWSServer.start(show_info) # Da por levantado el servicio logger.info("--------------------------------------------------------------------") @@ -91,9 +89,7 @@ def start(): except KeyboardInterrupt: print 'Deteniendo el servidor HTTP...' - HTTPServer.stop() - print 'Deteniendo el servidor WebSocket...' - WebSocket.stop() + HTTPAndWSServer.stop() print 'Alfa Detenido' flag = False diff --git a/mediaserver/lib/HTTPWebSocketsHandler.py b/mediaserver/lib/HTTPWebSocketsHandler.py new file mode 100644 index 00000000..3e89b503 --- /dev/null +++ b/mediaserver/lib/HTTPWebSocketsHandler.py @@ -0,0 +1,229 @@ +''' +The MIT License (MIT) + +Copyright (C) 2014, 2015 Seven Watt + + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +''' + +# HTTPWebSocketHandler from SevenW: https://github.com/SevenW/httpwebsockethandler + +from SimpleHTTPServer import SimpleHTTPRequestHandler +import struct +from base64 import b64encode +from hashlib import sha1 +from mimetools import Message +from StringIO import StringIO +import errno, socket #for socket exceptions +import threading + +class WebSocketError(Exception): + pass + +class HTTPWebSocketsHandler(SimpleHTTPRequestHandler): + _ws_GUID = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11' + _opcode_continu = 0x0 + _opcode_text = 0x1 + _opcode_binary = 0x2 + _opcode_close = 0x8 + _opcode_ping = 0x9 + _opcode_pong = 0xa + + mutex = threading.Lock() + + def on_ws_message(self, message): + """Override this handler to process incoming websocket messages.""" + pass + + def on_ws_connected(self): + """Override this handler.""" + pass + + def on_ws_closed(self): + """Override this handler.""" + pass + + def do_GET_HTTP(self): + """Override this handler.""" + SimpleHTTPRequestHandler.do_GET(self) + pass + + def send_message(self, message): + self._send_message(self._opcode_text, message) + + def setup(self): + SimpleHTTPRequestHandler.setup(self) + self.connected = False + + # def finish(self): + # #needed when wfile is used, or when self.close_connection is not used + # # + # #catch errors in SimpleHTTPRequestHandler.finish() after socket disappeared + # #due to loss of network connection + # try: + # SimpleHTTPRequestHandler.finish(self) + # except (socket.error, TypeError) as err: + # self.log_message("finish(): Exception: in SimpleHTTPRequestHandler.finish(): %s" % str(err.args)) + + # def handle(self): + # #needed when wfile is used, or when self.close_connection is not used + # # + # #catch errors in SimpleHTTPRequestHandler.handle() after socket disappeared + # #due to loss of network connection + # try: + # SimpleHTTPRequestHandler.handle(self) + # except (socket.error, TypeError) as err: + # self.log_message("handle(): Exception: in SimpleHTTPRequestHandler.handle(): %s" % str(err.args)) + + def checkAuthentication(self): + auth = self.headers.get('Authorization') + if auth != "Basic %s" % self.server.auth: + self.send_response(401) + self.send_header("WWW-Authenticate", 'Basic realm="Plugwise"') + self.end_headers(); + return False + return True + + def do_GET(self): + # if self.server.auth and not self.checkAuthentication(): + # return + if self.headers.get("Upgrade", None) == "websocket": + self._handshake() + #This handler is in websocket mode now. + #do_GET only returns after client close or socket error. + self._read_messages() + else: + self.do_GET_HTTP() + + def _read_messages(self): + while self.connected == True: + try: + self._read_next_message() + except (socket.error, WebSocketError), e: + #websocket content error, time-out or disconnect. + self.log_message("RCV: Close connection: Socket Error %s" % str(e.args)) + self._ws_close() + except Exception as err: + #unexpected error in websocket connection. + self.log_error("RCV: Exception: in _read_messages: %s" % str(err.args)) + self._ws_close() + + def _read_next_message(self): + #self.rfile.read(n) is blocking. + #it returns however immediately when the socket is closed. + try: + self.opcode = ord(self.rfile.read(1)) & 0x0F + length = ord(self.rfile.read(1)) & 0x7F + if length == 126: + length = struct.unpack(">H", self.rfile.read(2))[0] + elif length == 127: + length = struct.unpack(">Q", self.rfile.read(8))[0] + masks = [ord(byte) for byte in self.rfile.read(4)] + decoded = "" + for char in self.rfile.read(length): + decoded += chr(ord(char) ^ masks[len(decoded) % 4]) + self._on_message(decoded) + except (struct.error, TypeError) as e: + #catch exceptions from ord() and struct.unpack() + if self.connected: + raise WebSocketError("Websocket read aborted while listening") + else: + #the socket was closed while waiting for input + self.log_error("RCV: _read_next_message aborted after closed connection") + pass + + def _send_message(self, opcode, message): + try: + #use of self.wfile.write gives socket exception after socket is closed. Avoid. + self.request.send(chr(0x80 + opcode)) + length = len(message) + if length <= 125: + self.request.send(chr(length)) + elif length >= 126 and length <= 65535: + self.request.send(chr(126)) + self.request.send(struct.pack(">H", length)) + else: + self.request.send(chr(127)) + self.request.send(struct.pack(">Q", length)) + if length > 0: + self.request.send(message) + except socket.error, e: + #websocket content error, time-out or disconnect. + self.log_message("SND: Close connection: Socket Error %s" % str(e.args)) + self._ws_close() + except Exception as err: + #unexpected error in websocket connection. + self.log_error("SND: Exception: in _send_message: %s" % str(err.args)) + self._ws_close() + + def _handshake(self): + headers=self.headers + if headers.get("Upgrade", None) != "websocket": + return + key = headers['Sec-WebSocket-Key'] + digest = b64encode(sha1(key + self._ws_GUID).hexdigest().decode('hex')) + self.send_response(101, 'Switching Protocols') + self.send_header('Upgrade', 'websocket') + self.send_header('Connection', 'Upgrade') + self.send_header('Sec-WebSocket-Accept', str(digest)) + self.end_headers() + self.connected = True + #self.close_connection = 0 + self.on_ws_connected() + + def _ws_close(self): + #avoid closing a single socket two time for send and receive. + self.mutex.acquire() + try: + if self.connected: + self.connected = False + #Terminate BaseHTTPRequestHandler.handle() loop: + self.close_connection = 1 + #send close and ignore exceptions. An error may already have occurred. + try: + self._send_close() + except: + pass + self.on_ws_closed() + else: + self.log_message("_ws_close websocket in closed state. Ignore.") + pass + finally: + self.mutex.release() + + def _on_message(self, message): + #self.log_message("_on_message: opcode: %02X msg: %s" % (self.opcode, message)) + + # close + if self.opcode == self._opcode_close: + self.connected = False + #Terminate BaseHTTPRequestHandler.handle() loop: + self.close_connection = 1 + try: + self._send_close() + except: + pass + self.on_ws_closed() + # ping + elif self.opcode == self._opcode_ping: + _send_message(self._opcode_pong, message) + # pong + elif self.opcode == self._opcode_pong: + pass + # data + elif (self.opcode == self._opcode_continu or + self.opcode == self._opcode_text or + self.opcode == self._opcode_binary): + self.on_ws_message(message) + + def _send_close(self): + #Dedicated _send_close allows for catch all exception handling + msg = bytearray() + msg.append(0x80 + self._opcode_close) + msg.append(0x00) + self.request.send(msg) diff --git a/mediaserver/lib/WebSocketServer.py b/mediaserver/lib/WebSocketServer.py deleted file mode 100644 index ff20570c..00000000 --- a/mediaserver/lib/WebSocketServer.py +++ /dev/null @@ -1,648 +0,0 @@ -''' -The MIT License (MIT) - -Copyright (c) 2013 Dave P. - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -''' - -import SocketServer -import hashlib -import base64 -import socket -import struct -import ssl -import time -import sys -import errno -import logging -from BaseHTTPServer import BaseHTTPRequestHandler -from StringIO import StringIO -from select import select - - -class HTTPRequest(BaseHTTPRequestHandler): - def __init__(self, request_text): - self.rfile = StringIO(request_text) - self.raw_requestline = self.rfile.readline() - self.error_code = self.error_message = None - self.parse_request() - - -class WebSocket(object): - - handshakeStr = ( - "HTTP/1.1 101 Switching Protocols\r\n" - "Upgrade: WebSocket\r\n" - "Connection: Upgrade\r\n" - "Sec-WebSocket-Accept: %(acceptstr)s\r\n\r\n" - ) - - hixiehandshakedStr = ( - "HTTP/1.1 101 WebSocket Protocol Handshake\r\n" - "Upgrade: WebSocket\r\n" - "Connection: Upgrade\r\n" - "Sec-WebSocket-Origin: %(origin)s\r\n" - "Sec-WebSocket-Location: %(type)s://%(host)s%(location)s\r\n\r\n" - ) - - hixie75handshakedStr = ( - "HTTP/1.1 101 Web Socket Protocol Handshake\r\n" - "Upgrade: WebSocket\r\n" - "Connection: Upgrade\r\n" - "WebSocket-Origin: %(origin)s\r\n" - "WebSocket-Location: %(type)s://%(host)s%(location)s\r\n\r\n" - ) - GUIDStr = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11' - - STREAM = 0x0 - TEXT = 0x1 - BINARY = 0x2 - CLOSE = 0x8 - PING = 0x9 - PONG = 0xA - - HEADERB1 = 1 - HEADERB2 = 3 - LENGTHSHORT = 4 - LENGTHLONG = 5 - MASK = 6 - PAYLOAD = 7 - - def __init__(self, server, sock, address): - self.server = server - self.client = sock - self.address = address - - self.handshaked = False - self.headerbuffer = '' - self.readdraftkey = False - self.draftkey = '' - self.headertoread = 2048 - self.hixie76 = False - - self.fin = 0 - self.data = None - self.opcode = 0 - self.hasmask = 0 - self.maskarray = None - self.length = 0 - self.lengtharray = None - self.index = 0 - self.request = None - self.usingssl = False - - self.state = self.HEADERB1 - - # restrict the size of header and payload for security reasons - self.maxheader = 65536 - self.maxpayload = 4194304 - - def close(self): - self.client.close() - self.state = self.HEADERB1 - self.hasmask = False - self.handshaked = False - self.readdraftkey = False - self.hixie76 = False - self.headertoread = 2048 - self.headerbuffer = '' - self.data = '' - - - def handleMessage(self): - pass - - def handleConnected(self): - pass - - def handleClose(self): - pass - - def handlePacket(self): - # close - if self.opcode == self.CLOSE: - self.sendClose() - raise Exception("received client close") - # ping - elif self.opcode == self.PING: - pass - - # pong - elif self.opcode == self.PONG: - pass - - # data - elif self.opcode == self.STREAM or self.opcode == self.TEXT or self.opcode == self.BINARY: - self.handleMessage() - - - def handleData(self): - - # do the HTTP header and handshake - if self.handshaked is False: - - data = self.client.recv(self.headertoread) - - if data: - # accumulate - self.headerbuffer += data - - if len(self.headerbuffer) >= self.maxheader: - raise Exception('header exceeded allowable size') - - # we need to read the entire 8 bytes of after the HTTP header, ensure we do - if self.readdraftkey is True: - self.draftkey += self.headerbuffer - read = self.headertoread - len(self.headerbuffer) - - if read != 0: - self.headertoread = read - else: - # complete hixie76 handshake - self.handshake_hixie76() - - # indicates end of HTTP header - elif '\r\n\r\n' in self.headerbuffer: - self.request = HTTPRequest(self.headerbuffer) - # hixie handshake - if self.request.headers.has_key('Sec-WebSocket-Key1'.lower()) and self.request.headers.has_key('Sec-WebSocket-Key2'.lower()): - # check if we have the key in our buffer - index = self.headerbuffer.find('\r\n\r\n') + 4 - # determine how much of the 8 byte key we have - read = len(self.headerbuffer) - index - # do we have all the 8 bytes we need? - if read < 8: - self.headertoread = 8 - read - self.readdraftkey = True - if read > 0: - self.draftkey += self.headerbuffer[index:index+read] - - else: - # get the key - self.draftkey += self.headerbuffer[index:index+8] - # complete hixie handshake - self.handshake_hixie76() - - # handshake rfc 6455 - elif self.request.headers.has_key('Sec-WebSocket-Key'.lower()): - key = self.request.headers['Sec-WebSocket-Key'.lower()] - hStr = self.handshakeStr % { 'acceptstr' : base64.b64encode(hashlib.sha1(key + self.GUIDStr).digest()) } - self.sendBuffer(hStr) - self.handshaked = True - self.headerbuffer = '' - - try: - self.handleConnected() - except: - pass - # hixie 75 - else: - self.handshake_hixie75() - #raise Exception('Sec-WebSocket-Key does not exist') - - # remote connection has been closed - else: - raise Exception("remote socket closed") - - # else do normal data - else: - data = self.client.recv(2048) - if data: - for val in data: - if self.hixie76 is False: - self.parseMessage(ord(val)) - else: - self.parseMessage_hixie76(ord(val)) - else: - raise Exception("remote socket closed") - - - def handshake_hixie75(self): - typestr = 'ws' - if self.usingssl is True: - typestr = 'wss' - - response = self.hixie75handshakedStr % { 'type' : typestr, 'origin' : self.request.headers['Origin'.lower()], 'host' : self.request.headers['Host'.lower()], 'location' : self.request.path } - - self.sendBuffer(response) - - - self.handshaked = True - self.headerbuffer = '' - self.hixie76 = True - - try: - self.handleConnected() - except: - pass - - def handshake_hixie76(self): - - k1 = self.request.headers['Sec-WebSocket-Key1'.lower()] - k2 = self.request.headers['Sec-WebSocket-Key2'.lower()] - - spaces1 = k1.count(" ") - spaces2 = k2.count(" ") - num1 = int("".join([c for c in k1 if c.isdigit()])) / spaces1 - num2 = int("".join([c for c in k2 if c.isdigit()])) / spaces2 - - key = '' - key += struct.pack('>I', num1) - key += struct.pack('>I', num2) - key += self.draftkey - - typestr = 'ws' - if self.usingssl is True: - typestr = 'wss' - - response = self.hixiehandshakedStr % { 'type' : typestr, 'origin' : self.request.headers['Origin'.lower()], 'host' : self.request.headers['Host'.lower()], 'location' : self.request.path } - - self.sendBuffer(response) - self.sendBuffer(hashlib.md5(key).digest()) - - self.handshaked = True - self.hixie76 = True - self.headerbuffer = '' - - try: - self.handleConnected() - except: - pass - - - def sendClose(self): - - msg = bytearray() - if self.hixie76 is False: - msg.append(0x88) - msg.append(0x00) - self.sendBuffer(msg) - else: - pass - - def sendBuffer(self, buff): - size = len(buff) - tosend = size - index = 0 - - while tosend > 0: - try: - # i should be able to send a bytearray - sent = self.client.send(str(buff[index:size])) - if sent == 0: - raise RuntimeError("socket connection broken") - - index += sent - tosend -= sent - - except socket.error as e: - # if we have full buffers then wait for them to drain and try again - if e.errno == errno.EAGAIN: - time.sleep(0.001) - else: - raise e - - - #if s is a string then websocket TEXT is sent else BINARY - def sendMessage(self, s): - - if self.hixie76 is False: - - header = bytearray() - isString = isinstance(s, str) - - if isString is True: - header.append(0x81) - else: - header.append(0x82) - - b2 = 0 - length = len(s) - - if length <= 125: - b2 |= length - header.append(b2) - - elif length >= 126 and length <= 65535: - b2 |= 126 - header.append(b2) - header.extend(struct.pack("!H", length)) - - else: - b2 |= 127 - header.append(b2) - header.extend(struct.pack("!Q", length)) - - if length > 0: - self.sendBuffer(header + s) - else: - self.sendBuffer(header) - header = None - - else: - msg = bytearray() - msg.append(0) - if len(s) > 0: - msg.extend(str(s).encode("UTF8")) - msg.append(0xFF) - - self.sendBuffer(msg) - msg = None - - - def parseMessage_hixie76(self, byte): - - if self.state == self.HEADERB1: - if byte == 0: - self.state = self.PAYLOAD - self.data = bytearray() - - elif self.state == self.PAYLOAD: - if byte == 0xFF: - self.opcode = 1 - self.length = len(self.data) - try: - self.handlePacket() - finally: - self.data = None - self.state = self.HEADERB1 - else : - self.data.append(byte) - # if length exceeds allowable size then we except and remove the connection - if len(self.data) >= self.maxpayload: - raise Exception('payload exceeded allowable size') - - - def parseMessage(self, byte): - # read in the header - if self.state == self.HEADERB1: - # fin - self.fin = (byte & 0x80) - # get opcode - self.opcode = (byte & 0x0F) - - self.state = self.HEADERB2 - - elif self.state == self.HEADERB2: - mask = byte & 0x80 - length = byte & 0x7F - - if mask == 128: - self.hasmask = True - else: - self.hasmask = False - - if length <= 125: - self.length = length - - # if we have a mask we must read it - if self.hasmask is True: - self.maskarray = bytearray() - self.state = self.MASK - else: - # if there is no mask and no payload we are done - if self.length <= 0: - try: - self.handlePacket() - finally: - self.state = self.HEADERB1 - self.data = None - - # we have no mask and some payload - else: - self.index = 0 - self.data = bytearray() - self.state = self.PAYLOAD - - elif length == 126: - self.lengtharray = bytearray() - self.state = self.LENGTHSHORT - - elif length == 127: - self.lengtharray = bytearray() - self.state = self.LENGTHLONG - - - elif self.state == self.LENGTHSHORT: - self.lengtharray.append(byte) - - if len(self.lengtharray) > 2: - raise Exception('short length exceeded allowable size') - - if len(self.lengtharray) == 2: - self.length = struct.unpack_from('!H', str(self.lengtharray))[0] - - if self.hasmask is True: - self.maskarray = bytearray() - self.state = self.MASK - else: - # if there is no mask and no payload we are done - if self.length <= 0: - try: - self.handlePacket() - finally: - self.state = self.HEADERB1 - self.data = None - - # we have no mask and some payload - else: - self.index = 0 - self.data = bytearray() - self.state = self.PAYLOAD - - elif self.state == self.LENGTHLONG: - - self.lengtharray.append(byte) - - if len(self.lengtharray) > 8: - raise Exception('long length exceeded allowable size') - - if len(self.lengtharray) == 8: - self.length = struct.unpack_from('!Q', str(self.lengtharray))[0] - - if self.hasmask is True: - self.maskarray = bytearray() - self.state = self.MASK - else: - # if there is no mask and no payload we are done - if self.length <= 0: - try: - self.handlePacket() - finally: - self.state = self.HEADERB1 - self.data = None - - # we have no mask and some payload - else: - self.index = 0 - self.data = bytearray() - self.state = self.PAYLOAD - - # MASK STATE - elif self.state == self.MASK: - self.maskarray.append(byte) - - if len(self.maskarray) > 4: - raise Exception('mask exceeded allowable size') - - if len(self.maskarray) == 4: - # if there is no mask and no payload we are done - if self.length <= 0: - try: - self.handlePacket() - finally: - self.state = self.HEADERB1 - self.data = None - - # we have no mask and some payload - else: - self.index = 0 - self.data = bytearray() - self.state = self.PAYLOAD - - # PAYLOAD STATE - elif self.state == self.PAYLOAD: - if self.hasmask is True: - self.data.append( byte ^ self.maskarray[self.index % 4] ) - else: - self.data.append( byte ) - - # if length exceeds allowable size then we except and remove the connection - if len(self.data) >= self.maxpayload: - raise Exception('payload exceeded allowable size') - - # check if we have processed length bytes; if so we are done - if (self.index+1) == self.length: - try: - self.handlePacket() - finally: - self.state = self.HEADERB1 - self.data = None - else: - self.index += 1 - - -class SimpleWebSocketServer(object): - def __init__(self, host, port, websocketclass): - self.websocketclass = websocketclass - self.serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - self.serversocket.bind((host, port)) - self.serversocket.listen(5) - self.connections = {} - self.listeners = [self.serversocket] - - - def decorateSocket(self, sock): - return sock - - def constructWebSocket(self, sock, address): - return self.websocketclass(self, sock, address) - - def close(self): - self.serversocket.close() - - for conn in self.connections.itervalues(): - try: - conn.handleClose() - except: - pass - - conn.close() - - - def serveforever(self): - while True: - try: - rList, wList, xList = select(self.listeners, [], self.listeners, 1) - - for ready in rList: - if ready == self.serversocket: - try: - sock, address = self.serversocket.accept() - newsock = self.decorateSocket(sock) - newsock.setblocking(0) - fileno = newsock.fileno() - self.listeners.append(fileno) - self.connections[fileno] = self.constructWebSocket(newsock, address) - - except Exception as n: - - #logging.debug(str(address) + ' ' + str(n)) - - if sock is not None: - sock.close() - else: - client = self.connections[ready] - - try: - client.handleData() - - except Exception as n: - - #logging.debug(str(client.address) + ' ' + str(n)) - - try: - client.handleClose() - except: - pass - - client.close() - - del self.connections[ready] - self.listeners.remove(ready) - - for failed in xList: - if failed == self.serversocket: - self.close() - raise Exception("server socket failed") - else: - client = self.connections[failed] - - try: - client.handleClose() - except: - pass - - client.close() - - del self.connections[failed] - self.listeners.remove(failed) - except: - break - -class SimpleSSLWebSocketServer(SimpleWebSocketServer): - - def __init__(self, host, port, websocketclass, certfile, keyfile, version = ssl.PROTOCOL_TLSv1): - - SimpleWebSocketServer.__init__(self, host, port, websocketclass) - - self.cerfile = certfile - self.keyfile = keyfile - self.version = version - - def close(self): - super(SimpleSSLWebSocketServer, self).close() - - def decorateSocket(self, sock): - sslsock = ssl.wrap_socket(sock, - server_side=True, - certfile=self.cerfile, - keyfile=self.keyfile, - ssl_version=self.version) - return sslsock - - def constructWebSocket(self, sock, address): - ws = self.websocketclass(self, sock, address) - ws.usingssl = True - return ws - - def serveforever(self): - super(SimpleSSLWebSocketServer, self).serveforever() - - diff --git a/mediaserver/platformcode/controllers/fileserver.py b/mediaserver/platformcode/controllers/fileserver.py index 11ac6df1..41b7dbb0 100644 --- a/mediaserver/platformcode/controllers/fileserver.py +++ b/mediaserver/platformcode/controllers/fileserver.py @@ -20,7 +20,6 @@ class fileserver(Controller): self.handler.send_header('Content-type', 'text/html') self.handler.end_headers() respuesta = f.read() - respuesta = respuesta.replace("{$WSPORT}", str(config.get_setting("websocket.port"))) self.handler.wfile.write(respuesta) f.close() diff --git a/mediaserver/platformcode/controllers/html.py b/mediaserver/platformcode/controllers/html.py index 573171a1..bac18322 100644 --- a/mediaserver/platformcode/controllers/html.py +++ b/mediaserver/platformcode/controllers/html.py @@ -33,7 +33,10 @@ class html(Controller): self.platformtools = platform(self) self.data = {} if self.handler: - self.client_ip = handler.client.getpeername()[0] + if hasattr(handler, "client"): + self.client_ip = handler.client.getpeername()[0] + else: + self.client_ip = handler.client_address[0] self.send_message({"action": "connect", "data": {"version": "Alfa %s" % version, "date": "--/--/----"}}) diff --git a/mediaserver/platformcode/template/page.html b/mediaserver/platformcode/template/page.html index 50fe256a..72c53cee 100644 --- a/mediaserver/platformcode/template/page.html +++ b/mediaserver/platformcode/template/page.html @@ -30,7 +30,7 @@ From ef81d4f320783265e625116ac290acc421b80dc1 Mon Sep 17 00:00:00 2001 From: alaquepasa <39385022+alaquepasa@users.noreply.github.com> Date: Mon, 2 Jul 2018 17:01:06 +0200 Subject: [PATCH 34/66] Borrar referencia de WebSocket server / port --- mediaserver/alfa.py | 3 --- mediaserver/resources/settings.xml | 1 - 2 files changed, 4 deletions(-) diff --git a/mediaserver/alfa.py b/mediaserver/alfa.py index 8a6392c9..a7962200 100644 --- a/mediaserver/alfa.py +++ b/mediaserver/alfa.py @@ -17,7 +17,6 @@ from platformcode import platformtools, logger import HTTPAndWSServer http_port = config.get_setting("server.port") -websocket_port = config.get_setting("websocket.port") myip = config.get_local_ip() @@ -44,7 +43,6 @@ def show_info(): print ("--------------------------------------------------------------------") print ("Alfa Iniciado") print ("La URL para acceder es http://%s:%s" % (myip, http_port)) - print ("WebSocket Server iniciado en ws://%s:%s" % (myip, websocket_port)) print ("--------------------------------------------------------------------") print ("Runtime Path : " + config.get_runtime_path()) print ("Data Path : " + config.get_data_path()) @@ -72,7 +70,6 @@ def start(): logger.info("--------------------------------------------------------------------") logger.info("Alfa Iniciado") logger.info("La URL para acceder es http://%s:%s" % (myip, http_port)) - logger.info("WebSocket Server iniciado en ws://%s:%s" % (myip, websocket_port)) logger.info("--------------------------------------------------------------------") logger.info("Runtime Path : " + config.get_runtime_path()) logger.info("Data Path : " + config.get_data_path()) diff --git a/mediaserver/resources/settings.xml b/mediaserver/resources/settings.xml index 5fe48645..31e666ef 100644 --- a/mediaserver/resources/settings.xml +++ b/mediaserver/resources/settings.xml @@ -3,7 +3,6 @@ - From cf5c6e540ba6e228d53386b1cafcd196977085f1 Mon Sep 17 00:00:00 2001 From: alaquepasa <39385022+alaquepasa@users.noreply.github.com> Date: Mon, 2 Jul 2018 20:07:11 +0200 Subject: [PATCH 35/66] Delete HTTPServer.py --- mediaserver/HTTPServer.py | 106 -------------------------------------- 1 file changed, 106 deletions(-) delete mode 100644 mediaserver/HTTPServer.py diff --git a/mediaserver/HTTPServer.py b/mediaserver/HTTPServer.py deleted file mode 100644 index 92cf680e..00000000 --- a/mediaserver/HTTPServer.py +++ /dev/null @@ -1,106 +0,0 @@ -# -*- coding: utf-8 -*- - -import random -import re -import threading -import time -import traceback -from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer - -from platformcode import config, logger - - -class MyHTTPServer(HTTPServer): - daemon_threads = True - - def process_request_thread(self, request, client_address): - try: - - self.finish_request(request, client_address) - self.shutdown_request(request) - except: - self.handle_error(request, client_address) - self.shutdown_request(request) - - def process_request(self, request, client_address): - ID = "%032x" % (random.getrandbits(128)) - t = threading.Thread(target=self.process_request_thread, - args=(request, client_address), name=ID) - t.daemon = self.daemon_threads - t.start() - - def handle_error(self, request, client_address): - import traceback - if not "socket.py" in traceback.format_exc(): - logger.error(traceback.format_exc()) - - -class Handler(BaseHTTPRequestHandler): - def log_message(self, format, *args): - # sys.stderr.write("%s - - [%s] %s\n" %(self.client_address[0], self.log_date_time_string(), format%args)) - pass - - def do_GET(self): - from platformcode import platformtools - from platformcode import controllers - # Control de accesos - Usuario = "user" - Password = "password" - ControlAcceso = False - import base64 - # Comprueba la clave - if ControlAcceso and self.headers.getheader('Authorization') <> "Basic " + base64.b64encode( - Usuario + ":" + Password): - self.send_response(401) - self.send_header('WWW-Authenticate', - 'Basic realm=\"Introduce el nombre de usuario y clave para acceder a alfa\"') - self.send_header('Content-type', 'text/html; charset=utf-8') - self.end_headers() - self.wfile.write('¡Los datos introducidos no son correctos!') - return - - data = re.compile('/data/([^/]+)/([^/]+)/([^/]+)', re.DOTALL).findall(self.path) - if data: - data = data[0] - if data[0] in platformtools.requests: - c = platformtools.requests[data[0]] - response = {"id": data[1], "result": data[2]} - print response - c.handler = self - c.set_data(response) - while data[0] in platformtools.requests and not self.wfile.closed: - time.sleep(1) - else: - if self.path == "": self.path = "/" - - # Busca el controller para la url - controller = controllers.find_controller(self.path) - if controller: - try: - c = controller(self) - c.run(self.path) - except: - if not "socket.py" in traceback.format_exc(): - logger.error(traceback.format_exc()) - finally: - c.__del__() - del c - return - - def address_string(self): - # Disable reverse name lookups - return self.client_address[:2][0] - - -PORT = config.get_setting("server.port") -server = MyHTTPServer(('', int(PORT)), Handler) - - -def start(fnc_info): - server.fnc_info = fnc_info - threading.Thread(target=server.serve_forever).start() - - -def stop(): - server.socket.close() - server.shutdown() From 7c25db464402d72c7c156da127f2be0f35b5f6d3 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Tue, 3 Jul 2018 08:55:49 -0500 Subject: [PATCH 36/66] url: tengourl cambios cosmeticos --- plugin.video.alfa/channels/url.json | 4 ++-- plugin.video.alfa/channels/url.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plugin.video.alfa/channels/url.json b/plugin.video.alfa/channels/url.json index 9c22b22b..2ae39f42 100755 --- a/plugin.video.alfa/channels/url.json +++ b/plugin.video.alfa/channels/url.json @@ -3,6 +3,6 @@ "name": "Tengo una URL", "active": false, "adult": false, - "thumbnail": "url.png", - "banner": "url.png" + "thumbnail": "tengourl.png", + "banner": "tengourl.png" } \ No newline at end of file diff --git a/plugin.video.alfa/channels/url.py b/plugin.video.alfa/channels/url.py index db9879dc..6e0e61e9 100755 --- a/plugin.video.alfa/channels/url.py +++ b/plugin.video.alfa/channels/url.py @@ -24,7 +24,7 @@ def mainlist(item): def search(item, texto): logger.info("texto=" + texto) - if not texto.startswith("http://"): + if not texto.startswith("http"): texto = "http://" + texto itemlist = [] @@ -38,7 +38,7 @@ def search(item, texto): itemlist.append( Item(channel=item.channel, action="play", url=texto, server="directo", title="Ver enlace directo")) else: - data = scrapertools.downloadpage(texto) + data = httptools.downloadpage(texto).data itemlist = servertools.find_video_items(data=data) for item in itemlist: item.channel = "url" From a1cb798faa4f3c15b79918213e0fa0abbf1cdea7 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Tue, 3 Jul 2018 09:02:16 -0500 Subject: [PATCH 37/66] Add files via upload --- plugin.video.alfa/channels/url.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plugin.video.alfa/channels/url.py b/plugin.video.alfa/channels/url.py index 6e0e61e9..44ab2769 100755 --- a/plugin.video.alfa/channels/url.py +++ b/plugin.video.alfa/channels/url.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- +from core import httptools from core import scrapertools from core import servertools from core.item import Item From 708548e7f3a37cd3a821e7c0a717700c98c922bd Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Tue, 3 Jul 2018 09:33:34 -0500 Subject: [PATCH 38/66] poseidonhd: fix --- plugin.video.alfa/channels/poseidonhd.py | 32 +++++++++++++++--------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/plugin.video.alfa/channels/poseidonhd.py b/plugin.video.alfa/channels/poseidonhd.py index ded2a793..b9e9dbf0 100644 --- a/plugin.video.alfa/channels/poseidonhd.py +++ b/plugin.video.alfa/channels/poseidonhd.py @@ -256,24 +256,30 @@ def findvideos(item): for url in urls: final_url = httptools.downloadpage('https:'+url).data - if 'vip' in url: + + if language == 'VOSE': + sub = scrapertools.find_single_match(url, 'sub=(.*?)&') + subs = 'https:%s' % sub + + if 'index' in url: file_id = scrapertools.find_single_match(url, 'file=(.*?)&') - if language=='VOSE': - sub = scrapertools.find_single_match(url, 'sub=(.*?)&') - subs = 'https:%s' % sub - post = {'link':file_id} + post = {'link': file_id} post = urllib.urlencode(post) - hidden_url = 'https://streamango.poseidonhd.com/repro//plugins/gkpluginsphp.php' + hidden_url = 'https://streamango.poseidonhd.com/repro/plugins/gkpluginsphp.php' data_url = httptools.downloadpage(hidden_url, post=post).data dict_vip_url = jsontools.load(data_url) url = dict_vip_url['link'] else: - url = 'https:%s' % url - new_url = url.replace('embed','stream') - url = httptools.downloadpage(new_url, follow_redirects=False).headers.get('location') - #title = '%s [%s]' % (item.title, language) - itemlist.append(item.clone(title='[%s] [%s]', url=url, action='play', subtitle=subs, - language=language, quality=quality, infoLabels = item.infoLabels)) + file_id = scrapertools.find_single_match(url, 'url=(.*?)&') + post = {'url': file_id} + post = urllib.urlencode(post) + hidden_url = 'https://streamango.poseidonhd.com/repro/r.php' + data_url = httptools.downloadpage(hidden_url, post=post, follow_redirects=False) + url = data_url.headers['location'] + + itemlist.append(item.clone(title = '[%s] [%s]', url=url, action='play', subtitle=subs, + language=language, quality=quality, infoLabels=item.infoLabels)) + itemlist = servertools.get_servers_itemlist(itemlist, lambda x: x.title % (x.server.capitalize(), x.language)) # Requerido para Filtrar enlaces @@ -289,6 +295,8 @@ def findvideos(item): autoplay.start(itemlist, item) + itemlist = sorted(itemlist, key=lambda it: it.language) + if item.contentType != 'episode': if config.get_videolibrary_support() and len(itemlist) > 0 and item.extra != 'findvideos': itemlist.append( From 89744269900bbb88397bdb3dcdbb98f58b0a7466 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Tue, 3 Jul 2018 09:55:59 -0500 Subject: [PATCH 39/66] html: fix erorr thumbs --- mediaserver/platformcode/controllers/html.py | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/mediaserver/platformcode/controllers/html.py b/mediaserver/platformcode/controllers/html.py index 77dfe820..f44554a2 100644 --- a/mediaserver/platformcode/controllers/html.py +++ b/mediaserver/platformcode/controllers/html.py @@ -105,7 +105,7 @@ class platform(Platformtools): thumbnail=channelselector.get_thumb("back.png", "banner_"))) else: itemlist.insert(0, Item(title="Atrás", action="go_back", - thumbnail=channelselector.get_thumb("back.png"))) + thumbnail=channelselector.get_thumb("back.png", "banner_"))) JsonData = {} JsonData["action"] = "EndItems" @@ -119,17 +119,9 @@ class platform(Platformtools): # Recorremos el itemlist for item in itemlist: - if not item.thumbnail and item.action == "search": item.thumbnail = channelselector.get_thumb("search.png") - if not item.thumbnail and item.folder == True: item.thumbnail = channelselector.get_thumb("folder.png", "banner") - if not item.thumbnail and item.folder == False: item.thumbnail = channelselector.get_thumb("nofolder.png") - if "http://media.xxxxx/" in item.thumbnail and not item.thumbnail.startswith( - "http://media.xxxxxxxx/thumb_"): - - if parent_item.viewmode in ["banner", "channel"]: - item.thumbnail = channelselector.get_thumbnail_path("banner") + os.path.basename(item.thumbnail) - else: - item.thumbnail = channelselector.get_thumbnail_path() + os.path.basename(item.thumbnail) - + if not item.thumbnail and item.action == "search": item.thumbnail = channelselector.get_thumb("search.png", "banner_") + #if not item.thumbnail and item.folder == True: item.thumbnail = channelselector.get_thumb("folder.png", "banner_") + if not item.thumbnail and item.folder == False: item.thumbnail = channelselector.get_thumb("nofolder.png", "banner_") # Estas imagenes no estan en banner, asi que si queremos banner, para que no se vean mal las quitamos elif parent_item.viewmode in ["banner", "channel"] and item.thumbnail.startswith( "http://media.xxxxx/thumb_"): From f31a46f5d7762191a62d2edeba302c63e8ff426e Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Tue, 3 Jul 2018 09:57:30 -0500 Subject: [PATCH 40/66] alfa.py: agregado version a alfa.log --- mediaserver/alfa.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediaserver/alfa.py b/mediaserver/alfa.py index 87b61dc2..119c192b 100644 --- a/mediaserver/alfa.py +++ b/mediaserver/alfa.py @@ -73,7 +73,7 @@ def start(): # Da por levantado el servicio logger.info("--------------------------------------------------------------------") - logger.info("Alfa Iniciado") + logger.info("Alfa %s Iniciado" %version) logger.info("La URL para acceder es http://%s:%s" % (myip, http_port)) logger.info("WebSocket Server iniciado en ws://%s:%s" % (myip, websocket_port)) logger.info("--------------------------------------------------------------------") From ba66e4106b3d4704ee469aad7cb5e4077d41e224 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Tue, 3 Jul 2018 10:12:07 -0500 Subject: [PATCH 41/66] tvvip: fix --- plugin.video.alfa/channels/tvvip.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugin.video.alfa/channels/tvvip.py b/plugin.video.alfa/channels/tvvip.py index 4487b3bc..4b47bd66 100644 --- a/plugin.video.alfa/channels/tvvip.py +++ b/plugin.video.alfa/channels/tvvip.py @@ -612,8 +612,9 @@ def play(item): uri_request = host + "/video-prod/s/uri?uri=%s&_=%s" % (uri, int(time.time())) data = httptools.downloadpage(uri_request).data data = jsontools.load(data) - url = item.url.replace(".tv-vip.com/transcoder/", ".tv-vip.info/c/transcoder/") + "?tt=" + str(data['tt']) + \ + url = item.url.replace(".tv-vip.com/transcoder/", ".tv-vip.in/c/transcoder/") + "?tt=" + str(data['tt']) + \ "&mm=" + data['mm'] + "&bb=" + data['bb'] + url += "|User-Agent=Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Mobile Safari/537.36" itemlist.append(item.clone(action="play", server="directo", url=url, folder=False)) return itemlist From 1cb13c09b0b5806f691eb2ccb2e4ca987c503b30 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Tue, 3 Jul 2018 10:13:51 -0500 Subject: [PATCH 42/66] help: fix mediaserver --- plugin.video.alfa/channels/help.py | 80 +++++++++++++++--------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/plugin.video.alfa/channels/help.py b/plugin.video.alfa/channels/help.py index 2454c9c6..6bd24cb3 100644 --- a/plugin.video.alfa/channels/help.py +++ b/plugin.video.alfa/channels/help.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- import os -import xbmc from core.item import Item from platformcode import config, logger, platformtools @@ -41,50 +40,50 @@ def mainlist(item): logger.info() itemlist = [] + itemlist.append(Item(channel=item.channel, action="", title="FAQ:", + thumbnail=get_thumb("help.png"), + folder=False)) if config.is_xbmc(): - itemlist.append(Item(channel=item.channel, action="", title="FAQ:", - thumbnail=get_thumb("help.png"), - folder=False)) itemlist.append(Item(channel=item.channel, action="faq", title=" - ¿Cómo reportar un error?", thumbnail=get_thumb("help.png"), folder=False, extra="report_error")) - itemlist.append(Item(channel=item.channel, action="faq", - title=" - ¿Se pueden activar/desactivar los canales?", - thumbnail=get_thumb("help.png"), - folder=False, extra="onoff_canales")) - itemlist.append(Item(channel=item.channel, action="faq", - title=" - ¿Es posible la sincronización automática con Trakt?", - thumbnail=get_thumb("help.png"), - folder=False, extra="trakt_sync")) - itemlist.append(Item(channel=item.channel, action="faq", - title=" - ¿Es posible mostrar todos los resultados juntos en el buscador global?", - thumbnail=get_thumb("help.png"), - folder=False, extra="buscador_juntos")) - itemlist.append(Item(channel=item.channel, action="faq", - title=" - Los enlaces tardan en aparecer.", - thumbnail=get_thumb("help.png"), - folder=False, extra="tiempo_enlaces")) - itemlist.append(Item(channel=item.channel, action="faq", - title=" - La búsqueda de contenido no se hace correctamente.", - thumbnail=get_thumb("help.png"), - folder=False, extra="prob_busquedacont")) - itemlist.append(Item(channel=item.channel, action="faq", - title=" - Algún canal no funciona correctamente.", - thumbnail=get_thumb("help.png"), - folder=False, extra="canal_fallo")) - itemlist.append(Item(channel=item.channel, action="faq", - title=" - Los enlaces Torrent no funcionan.", - thumbnail=get_thumb("help.png"), - folder=False, extra="prob_torrent")) - itemlist.append(Item(channel=item.channel, action="faq", - title=" - No se actualiza correctamente la videoteca.", - thumbnail=get_thumb("help.png"), - folder=True, extra="prob_bib")) - itemlist.append(Item(channel=item.channel, action="faq", - title=" - Enlaces de interés", - thumbnail=get_thumb("help.png"), - folder=False, extra="")) + itemlist.append(Item(channel=item.channel, action="faq", + title=" - ¿Se pueden activar/desactivar los canales?", + thumbnail=get_thumb("help.png"), + folder=False, extra="onoff_canales")) + itemlist.append(Item(channel=item.channel, action="faq", + title=" - ¿Es posible la sincronización automática con Trakt?", + thumbnail=get_thumb("help.png"), + folder=False, extra="trakt_sync")) + itemlist.append(Item(channel=item.channel, action="faq", + title=" - ¿Es posible mostrar todos los resultados juntos en el buscador global?", + thumbnail=get_thumb("help.png"), + folder=False, extra="buscador_juntos")) + itemlist.append(Item(channel=item.channel, action="faq", + title=" - Los enlaces tardan en aparecer.", + thumbnail=get_thumb("help.png"), + folder=False, extra="tiempo_enlaces")) + itemlist.append(Item(channel=item.channel, action="faq", + title=" - La búsqueda de contenido no se hace correctamente.", + thumbnail=get_thumb("help.png"), + folder=False, extra="prob_busquedacont")) + itemlist.append(Item(channel=item.channel, action="faq", + title=" - Algún canal no funciona correctamente.", + thumbnail=get_thumb("help.png"), + folder=False, extra="canal_fallo")) + itemlist.append(Item(channel=item.channel, action="faq", + title=" - Los enlaces Torrent no funcionan.", + thumbnail=get_thumb("help.png"), + folder=False, extra="prob_torrent")) + itemlist.append(Item(channel=item.channel, action="faq", + title=" - No se actualiza correctamente la videoteca.", + thumbnail=get_thumb("help.png"), + folder=True, extra="prob_bib")) + itemlist.append(Item(channel=item.channel, action="faq", + title=" - Enlaces de interés", + thumbnail=get_thumb("help.png"), + folder=False, extra="")) return itemlist @@ -192,6 +191,7 @@ def faq(item): search.settings("") elif item.extra == "report_error": + import xbmc if config.get_platform(True)['num_version'] < 14: log_name = "xbmc.log" else: From 5f5849b52ec70e51cb553452f5aaafb215d2e843 Mon Sep 17 00:00:00 2001 From: angedam Date: Tue, 3 Jul 2018 17:46:06 +0200 Subject: [PATCH 43/66] added translation with italian support --- plugin.video.alfa/channels/downloads.json | 40 +++---- plugin.video.alfa/channels/news.json | 20 ++-- plugin.video.alfa/channels/search.json | 108 ++++++++--------- plugin.video.alfa/channels/videolibrary.json | 116 +++++++++---------- 4 files changed, 143 insertions(+), 141 deletions(-) diff --git a/plugin.video.alfa/channels/downloads.json b/plugin.video.alfa/channels/downloads.json index c87b304b..1412a6d9 100755 --- a/plugin.video.alfa/channels/downloads.json +++ b/plugin.video.alfa/channels/downloads.json @@ -10,14 +10,14 @@ "settings": [ { "type": "label", - "label": "$ADDON[plugin.video.alfa 70229]", + "label": "@70229", "enabled": true, "visible": true }, { "id": "library_add", "type": "bool", - "label": "$ADDON[plugin.video.alfa 70230]", + "label": "@70230", "default": true, "enabled": true, "visible": true @@ -25,7 +25,7 @@ { "id": "library_move", "type": "bool", - "label": "$ADDON[plugin.video.alfa 70231]", + "label": "@70231", "default": true, "enabled": "eq(-1,true)", "visible": true @@ -33,21 +33,21 @@ { "id": "browser", "type": "bool", - "label": "$ADDON[plugin.video.alfa 70232]", + "label": "@70232", "default": false, "enabled": true, "visible": true }, { "type": "label", - "label": "$ADDON[plugin.video.alfa 70243]", + "label": "@70243", "enabled": true, "visible": true }, { "id": "block_size", "type": "list", - "label": "$ADDON[plugin.video.alfa 70233]", + "label": "@70233", "lvalues": [ "128 KB", "256 KB", @@ -62,7 +62,7 @@ { "id": "part_size", "type": "list", - "label": "$ADDON[plugin.video.alfa 70234]", + "label": "@70234", "lvalues": [ "1 MB", "2 MB", @@ -78,7 +78,7 @@ { "id": "max_connections", "type": "list", - "label": "$ADDON[plugin.video.alfa 70235]", + "label": "@70235", "lvalues": [ "1", "2", @@ -98,7 +98,7 @@ { "id": "max_buffer", "type": "list", - "label": "$ADDON[plugin.video.alfa 70236]", + "label": "@70236", "lvalues": [ "0", "2", @@ -118,17 +118,17 @@ }, { "type": "label", - "label": "$ADDON[plugin.video.alfa 70237]", + "label": "@70237", "enabled": true, "visible": true }, { "id": "server_reorder", "type": "list", - "label": "$ADDON[plugin.video.alfa 70238]", + "label": "@70238", "lvalues": [ - "$ADDON[plugin.video.alfa 70244]", - "$ADDON[plugin.video.alfa 70245]" + "@70244", + "@70245" ], "default": 1, "enabled": true, @@ -137,7 +137,7 @@ { "id": "language", "type": "list", - "label": "$ADDON[plugin.video.alfa 70246]", + "label": "@70246", "lvalues": [ "Esp, Lat, Sub, Eng, Vose", "Esp, Sub, Lat, Eng, Vose", @@ -145,29 +145,29 @@ "Vose, Eng, Sub, Esp, Lat" ], "default": 0, - "enabled": "eq(-1,$ADDON[plugin.video.alfa 70245])", + "enabled": "eq(-1,@70245])", "visible": true }, { "id": "quality", "type": "list", - "label": "$ADDON[plugin.video.alfa 70240]", + "label": "@70240", "lvalues": [ - "$ADDON[plugin.video.alfa 70241]", + "@70241", "HD 1080", "HD 720", "SD" ], "default": 0, - "enabled": "eq(-2,$ADDON[plugin.video.alfa 70245])", + "enabled": "eq(-2,@70245])", "visible": true }, { "id": "server_speed", "type": "bool", - "label": "$ADDON[plugin.video.alfa 70242]", + "label": "@70242", "default": true, - "enabled": "eq(-3,$ADDON[plugin.video.alfa 70245])", + "enabled": "eq(-3,@70245])", "visible": true } ] diff --git a/plugin.video.alfa/channels/news.json b/plugin.video.alfa/channels/news.json index 6c023757..29aed60d 100755 --- a/plugin.video.alfa/channels/news.json +++ b/plugin.video.alfa/channels/news.json @@ -11,7 +11,7 @@ { "id": "multithread", "type": "bool", - "label": "$ADDON[plugin.video.alfa 60656]", + "label": "@60656", "default": true, "enabled": true, "visible": true @@ -19,14 +19,14 @@ { "id": "result_mode", "type": "list", - "label": "$ADDON[plugin.video.alfa 60657]", + "label": "@60657", "default": 2, "enabled": true, "visible": true, "lvalues": [ - "$ADDON[plugin.video.alfa 60658]", - "$ADDON[plugin.video.alfa 60659]", - "$ADDON[plugin.video.alfa 60660]" + "@60658", + "@60659", + "@60660" ] }, { @@ -37,11 +37,11 @@ "enabled": true, "visible": true, "lvalues": [ - "$ADDON[plugin.video.alfa 60667]", - "$ADDON[plugin.video.alfa 60668]", - "$ADDON[plugin.video.alfa 60669]", - "$ADDON[plugin.video.alfa 60670]", - "$ADDON[plugin.video.alfa 60671]" + "@60667", + "@60668", + "@60669", + "@60670", + "@60671" ] } ] diff --git a/plugin.video.alfa/channels/search.json b/plugin.video.alfa/channels/search.json index 00fae81a..5dd6c6fe 100755 --- a/plugin.video.alfa/channels/search.json +++ b/plugin.video.alfa/channels/search.json @@ -1,54 +1,56 @@ -{ - "id": "search", - "name": "Buscador global", - "active": false, - "adult": false, - "language": ["*"], - "categories": [ - "movie" - ], - "settings": [ - { - "id": "multithread", - "type": "bool", - "label": "Buscador MultiThread", - "default": true, - "enabled": true, - "visible": true - }, - { - "id": "result_mode", - "type": "list", - "label": "Mostrar resultados:", - "default": 0, - "enabled": true, - "visible": true, - "lvalues": [ - "Por canales", - "Todo junto" - ] - }, - { - "id": "saved_searches_limit", - "type": "list", - "label": "Busquedas guardadas:", - "default": 0, - "enabled": true, - "visible": true, - "lvalues": [ - "10", - "20", - "30", - "40" - ] - }, - { - "id": "last_search", - "type": "bool", - "label": "Recordar última búsqueda", - "default": true, - "enabled": true, - "visible": true - } - ] +{ + "id": "search", + "name": "@60672", + "active": false, + "adult": false, + "language": [ + "it" + ], + "categories": [ + "movie" + ], + "settings": [ + { + "id": "multithread", + "type": "bool", + "label": "@60673", + "default": true, + "enabled": true, + "visible": true + }, + { + "id": "result_mode", + "type": "list", + "label": "@60674", + "default": 0, + "enabled": true, + "visible": true, + "lvalues": [ + "@60675", + "@60676" + ] + }, + { + "id": "saved_searches_limit", + "type": "list", + "label": "@60677", + "default": 0, + "enabled": true, + "visible": true, + "lvalues": [ + "10", + "20", + "30", + "40" + ] + }, + { + "id": "last_search", + "type": "bool", + "label": "@60678", + "default": true, + "enabled": true, + "visible": true + } + ] } \ No newline at end of file diff --git a/plugin.video.alfa/channels/videolibrary.json b/plugin.video.alfa/channels/videolibrary.json index 23115606..2f1c55c5 100755 --- a/plugin.video.alfa/channels/videolibrary.json +++ b/plugin.video.alfa/channels/videolibrary.json @@ -8,38 +8,38 @@ { "id": "update", "type": "list", - "label": "$ADDON[plugin.video.alfa 60601]", + "label": "@60601", "default": 1, "visible": true, "lvalues": [ - "$ADDON[plugin.video.alfa 60602]", - "$ADDON[plugin.video.alfa 60603]", - "$ADDON[plugin.video.alfa 60604]", - "$ADDON[plugin.video.alfa 60605]" + "@60602", + "@60603", + "@60604", + "@60605" ] }, { "id": "update_wait", "type": "list", - "label": "$ADDON[plugin.video.alfa 60606]", + "label": "@60606", "default": 0, "visible": true, - "enabled": "eq(-1,$ADDON[plugin.video.alfa 60603])|eq(-1,$ADDON[plugin.video.alfa 60605])", + "enabled": "eq(-1,@60603])|eq(-1,@60605])", "lvalues": [ "No", - "$ADDON[plugin.video.alfa 60609]", - "$ADDON[plugin.video.alfa 60610]", - "$ADDON[plugin.video.alfa 60611]", - "$ADDON[plugin.video.alfa 60612]" + "@60609", + "@60610", + "@60611", + "@60612" ] }, { "id": "everyday_delay", "type": "list", - "label": "$ADDON[plugin.video.alfa 60613]", + "label": "@60613", "default": 1, "visible": true, - "enabled": "eq(-2,$ADDON[plugin.video.alfa 60604])|eq(-2,$ADDON[plugin.video.alfa 60605])", + "enabled": "eq(-2,@60604])|eq(-2,@60605])", "lvalues": [ "00:00", "04:00", @@ -50,37 +50,37 @@ { "id": "updatetvshows_interval", "type": "list", - "label": "$ADDON[plugin.video.alfa 60614]", + "label": "@60614", "default": 0, "visible": true, - "enabled": "!eq(-3,$ADDON[plugin.video.alfa 60615])", + "enabled": "!eq(-3,@60615])", "lvalues": [ - "$ADDON[plugin.video.alfa 60616]", - "$ADDON[plugin.video.alfa 60617]" + "@60616", + "@60617" ] }, { "id": "search_new_content", "type": "list", - "label": "[$ADDON[plugin.video.alfa 60618]", + "label": "[@60618", "default": 0, - "enabled": "!eq(-4,$ADDON[plugin.video.alfa 60615])", + "enabled": "!eq(-4,@60615])", "lvalues": [ - "$ADDON[plugin.video.alfa 60619]", - "$ADDON[plugin.video.alfa 60620]" + "@60619", + "@60620" ] }, { "id": "addition", "type": "label", - "label": "$ADDON[plugin.video.alfa 70092]", + "label": "@70092", "enabled": true, "visible": true }, { "id": "enable_filter", "type": "bool", - "label": "$ADDON[plugin.video.alfa 70090]", + "label": "@70090", "enabled": true, "visible": true, "default": false @@ -88,7 +88,7 @@ { "id": "filters", "type": "text", - "label": "$ADDON[plugin.video.alfa 70091]", + "label": "@70091", "visible": true, "enabled": "eq(-1,true)" }, @@ -96,24 +96,24 @@ { "id": "window_type", "type": "list", - "label": "$ADDON[plugin.video.alfa 60621]", + "label": "@60621", "default": 0, "enabled": true, "visible": true, "lvalues": [ - "$ADDON[plugin.video.alfa 60622]", - "$ADDON[plugin.video.alfa 60623]" + "@60622", + "@60623" ] }, { "id": "max_links", "type": "list", - "label": "$ADDON[plugin.video.alfa 60624]", + "label": "@60624", "default": 0, "enabled": true, "visible": true, "lvalues": [ - "$ADDON[plugin.video.alfa 60625]", + "@60625", "30", "60", "90", @@ -126,7 +126,7 @@ { "id": "white_list_order", "type": "bool", - "label": "$ADDON[plugin.video.alfa 60626]", + "label": "@60626", "enabled": true, "visible": true, "default": false @@ -134,7 +134,7 @@ { "id": "quit_channel_name", "type": "bool", - "label": "$ADDON[plugin.video.alfa 60627]", + "label": "@60627", "enabled": true, "visible": true, "default": false @@ -142,7 +142,7 @@ { "id": "replace_VD", "type": "bool", - "label": "$ADDON[plugin.video.alfa 60628]", + "label": "@60628", "enabled": true, "visible": true, "default": false @@ -150,33 +150,33 @@ { "id": "db_mode", "type": "list", - "label": "$ADDON[plugin.video.alfa 60629]", + "label": "@60629", "default": 0, "enabled": true, "visible": true, "lvalues": [ - "$ADDON[plugin.video.alfa 60630]", - "$ADDON[plugin.video.alfa 60631]" + "@60630", + "@60631" ] }, { "id": "xbmc_host", "type": "text", - "label": "$ADDON[plugin.video.alfa 60632]", + "label": "@60632", "visible": true, "enabled": "eq(-1,Remota)" }, { "id": "xbmc_puerto", "type": "text", - "label": "$ADDON[plugin.video.alfa 60633]", + "label": "@60633", "enabled": "!eq(-1,'')", "visible": true }, { "id": "mark_as_watched", "type": "bool", - "label": "$ADDON[plugin.video.alfa 60634]", + "label": "@60634", "default": true, "enabled": true, "visible": true @@ -184,7 +184,7 @@ { "id": "watched_setting", "type": "list", - "label": "$ADDON[plugin.video.alfa 60635]", + "label": "@60635", "default": 3, "visible": true, "enabled": "eq(-1,true)", @@ -193,20 +193,20 @@ "30%", "50%", "80%", - "$ADDON[plugin.video.alfa 60636]" + "@60636" ] }, { "id": "sync_trakt", "type": "label", - "label": "$ADDON[plugin.video.alfa 60637]", + "label": "@60637", "enabled": true, "visible": true }, { "id": "sync_trakt_watched", "type": "bool", - "label": "$ADDON[plugin.video.alfa 60638]", + "label": "@60638", "default": false, "visible": true, "enabled": "eq(-3,true)" @@ -214,7 +214,7 @@ { "id": "sync_trakt_notification", "type": "bool", - "label": "$ADDON[plugin.video.alfa 60639]", + "label": "@60639", "default": true, "visible": true, "enabled": "eq(-1,true)" @@ -222,7 +222,7 @@ { "id": "sync_trakt_new_tvshow", "type": "bool", - "label": "$ADDON[plugin.video.alfa 60640]", + "label": "@60640", "default": false, "enabled": true, "visible": true @@ -230,7 +230,7 @@ { "id": "sync_trakt_new_tvshow_wait", "type": "bool", - "label": "$ADDON[plugin.video.alfa 60641]", + "label": "@60641", "default": true, "visible": true, "enabled": "eq(-1,true)" @@ -238,47 +238,47 @@ { "id": "show_all_seasons", "type": "bool", - "label": "$ADDON[plugin.video.alfa 60642]", + "label": "@60642", "default": true }, { "id": "no_pile_on_seasons", "type": "list", - "label": "$ADDON[plugin.video.alfa 60643]", + "label": "@60643", "default": 1, "lvalues": [ - "$ADDON[plugin.video.alfa 60648]", - "$ADDON[plugin.video.alfa 60644]", - "$ADDON[plugin.video.alfa 60616]" + "@60648", + "@60644", + "@60616" ] }, { "id": "ask_channel", "type": "bool", - "label": "$ADDON[plugin.video.alfa 60645]", + "label": "@60645", "default": false }, { "id": "original_title_folder", "type": "list", - "label": "$ADDON[plugin.video.alfa 60646]", + "label": "@60646", "default": 0, "lvalues": [ - "$ADDON[plugin.video.alfa 60647]", - "$ADDON[plugin.video.alfa 60649]" + "@60647", + "@60649" ] }, { "id": "lab_1", "type": "label", - "label": "$ADDON[plugin.video.alfa 60650]", + "label": "@60650", "enabled": true, "visible": true }, { "id": "scraper_movies", "type": "list", - "label": "$ADDON[plugin.video.alfa 60651]", + "label": "@60651", "enabled": false, "default": 0, "lvalues": [ @@ -289,7 +289,7 @@ { "id": "scraper_tvshows", "type": "list", - "label": "$ADDON[plugin.video.alfa 60652]", + "label": "@60652", "default": 0, "lvalues": [ "TheMovieDB.org", @@ -299,7 +299,7 @@ { "id": "tvdb_retry_eng", "type": "bool", - "label": "$ADDON[plugin.video.alfa 60653]", + "label": "@60653", "default": true, "enabled": "eq(-1,TheTvDB.com)", "visible": true From ff6f4ea33956effe07074560c04264b12b761fcc Mon Sep 17 00:00:00 2001 From: angedam Date: Tue, 3 Jul 2018 18:55:28 +0200 Subject: [PATCH 44/66] added translation with italian support --- plugin.video.alfa/channels/videolibrary.json | 2 +- plugin.video.alfa/resources/language/English/strings.po | 4 ++++ plugin.video.alfa/resources/language/Italian/strings.po | 5 +++++ .../resources/language/Spanish (Argentina)/strings.po | 4 ++++ .../resources/language/Spanish (Mexico)/strings.po | 4 ++++ plugin.video.alfa/resources/language/Spanish/strings.po | 4 ++++ 6 files changed, 22 insertions(+), 1 deletion(-) diff --git a/plugin.video.alfa/channels/videolibrary.json b/plugin.video.alfa/channels/videolibrary.json index 2f1c55c5..49121664 100755 --- a/plugin.video.alfa/channels/videolibrary.json +++ b/plugin.video.alfa/channels/videolibrary.json @@ -62,7 +62,7 @@ { "id": "search_new_content", "type": "list", - "label": "[@60618", + "label": "@60618", "default": 0, "enabled": "!eq(-4,@60615])", "lvalues": [ diff --git a/plugin.video.alfa/resources/language/English/strings.po b/plugin.video.alfa/resources/language/English/strings.po index 5f63a991..51b12a13 100644 --- a/plugin.video.alfa/resources/language/English/strings.po +++ b/plugin.video.alfa/resources/language/English/strings.po @@ -3828,3 +3828,7 @@ msgstr "" msgctxt "#70276" msgid "Search by title" msgstr "" + +msgctxt "#70277" +msgid "MediaServer Language (Restart Required)" +msgstr "" diff --git a/plugin.video.alfa/resources/language/Italian/strings.po b/plugin.video.alfa/resources/language/Italian/strings.po index dc1aeb18..a89dfd0a 100644 --- a/plugin.video.alfa/resources/language/Italian/strings.po +++ b/plugin.video.alfa/resources/language/Italian/strings.po @@ -3816,4 +3816,9 @@ msgctxt "#70276" msgid "Search by title" msgstr "Cerca per titolo" +msgctxt "#70277" +msgid "MediaServer Language (Restart Required)" +msgstr "mediaServer Lingua (Riavvio Richiesto)" + + diff --git a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po index 08e85991..c8e8e630 100644 --- a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po @@ -3805,4 +3805,8 @@ msgctxt "#70276" msgid "Search by title" msgstr "Buscar por titulo" +msgctxt "#70277" +msgid "MediaServer Language (Restart Required)" +msgstr "Idioma MediaServer (Reinicio Requerido)" + diff --git a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po index 08e85991..c8e8e630 100644 --- a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po @@ -3805,4 +3805,8 @@ msgctxt "#70276" msgid "Search by title" msgstr "Buscar por titulo" +msgctxt "#70277" +msgid "MediaServer Language (Restart Required)" +msgstr "Idioma MediaServer (Reinicio Requerido)" + diff --git a/plugin.video.alfa/resources/language/Spanish/strings.po b/plugin.video.alfa/resources/language/Spanish/strings.po index 08e85991..c8e8e630 100644 --- a/plugin.video.alfa/resources/language/Spanish/strings.po +++ b/plugin.video.alfa/resources/language/Spanish/strings.po @@ -3805,4 +3805,8 @@ msgctxt "#70276" msgid "Search by title" msgstr "Buscar por titulo" +msgctxt "#70277" +msgid "MediaServer Language (Restart Required)" +msgstr "Idioma MediaServer (Reinicio Requerido)" + From b2df8be1667ad652ea7098a7cf516ec0e7ea356c Mon Sep 17 00:00:00 2001 From: Kevin Date: Tue, 3 Jul 2018 19:13:45 +0200 Subject: [PATCH 45/66] Small Fix --- mediaserver/platformcode/config.py | 20 +------------------- mediaserver/resources/settings.xml | 2 +- 2 files changed, 2 insertions(+), 20 deletions(-) diff --git a/mediaserver/platformcode/config.py b/mediaserver/platformcode/config.py index 4589f1dd..655eafdb 100644 --- a/mediaserver/platformcode/config.py +++ b/mediaserver/platformcode/config.py @@ -310,23 +310,6 @@ def verify_directories_created(): logger.debug("Creating %s: %s" % (path, saved_path)) filetools.mkdir(saved_path) - config_paths = [["folder_movies", "CINE"], - ["folder_tvshows", "SERIES"]] - - for path, default in config_paths: - saved_path = get_setting(path) - - if not saved_path: - saved_path = default - set_setting(path, saved_path) - - content_path = filetools.join(get_videolibrary_path(), saved_path) - if not filetools.exists(content_path): - logger.debug("Creating %s: %s" % (path, content_path)) - - # si se crea el directorio - filetools.mkdir(content_path) - def get_local_ip(): import socket @@ -386,8 +369,7 @@ configfilepath = os.path.join(get_data_path(), "settings.xml") if not os.path.exists(get_data_path()): os.mkdir(get_data_path()) load_settings() -TRANSLATION_FILE_PATH = os.path.join(get_runtime_path(), "resources", "language", settings_dic["mediacenter_language"], "strings.po") - +TRANSLATION_FILE_PATH = os.path.join(get_runtime_path(), "resources", "language", settings_dic["mediaserver_language"], "strings.po") # modo adulto: # sistema actual 0: Nunca, 1:Siempre, 2:Solo hasta que se reinicie sesión diff --git a/mediaserver/resources/settings.xml b/mediaserver/resources/settings.xml index 8a7e6746..8e01cccf 100644 --- a/mediaserver/resources/settings.xml +++ b/mediaserver/resources/settings.xml @@ -7,7 +7,7 @@ - + From c9dc403e2ce499fb805f242caae7f8b780f1b7f8 Mon Sep 17 00:00:00 2001 From: Kevin Date: Tue, 3 Jul 2018 20:45:00 +0200 Subject: [PATCH 46/66] Fix missing part --- mediaserver/platformcode/config.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/mediaserver/platformcode/config.py b/mediaserver/platformcode/config.py index 655eafdb..a37a0c41 100644 --- a/mediaserver/platformcode/config.py +++ b/mediaserver/platformcode/config.py @@ -310,6 +310,23 @@ def verify_directories_created(): logger.debug("Creating %s: %s" % (path, saved_path)) filetools.mkdir(saved_path) + config_paths = [["folder_movies", "CINE"], + ["folder_tvshows", "SERIES"]] + + for path, default in config_paths: + saved_path = get_setting(path) + + if not saved_path: + saved_path = default + set_setting(path, saved_path) + + content_path = filetools.join(get_videolibrary_path(), saved_path) + if not filetools.exists(content_path): + logger.debug("Creating %s: %s" % (path, content_path)) + + # si se crea el directorio + filetools.mkdir(content_path) + def get_local_ip(): import socket From 0efdf788eb762ce915d5a7c9414cb0df19283d2a Mon Sep 17 00:00:00 2001 From: pipcat Date: Tue, 3 Jul 2018 20:59:10 +0200 Subject: [PATCH 47/66] Timeout general configurable --- plugin.video.alfa/core/httptools.py | 3 ++- plugin.video.alfa/resources/settings.xml | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/plugin.video.alfa/core/httptools.py b/plugin.video.alfa/core/httptools.py index 350bcf04..eee42e57 100755 --- a/plugin.video.alfa/core/httptools.py +++ b/plugin.video.alfa/core/httptools.py @@ -32,7 +32,8 @@ default_headers["Accept-Charset"] = "UTF-8" default_headers["Accept-Encoding"] = "gzip" # Tiempo máximo de espera para downloadpage, si no se especifica nada -HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT = None +HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT = config.get_setting('httptools_timeout', default=15) +if HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT == 0: HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT = None def get_url_headers(url): diff --git a/plugin.video.alfa/resources/settings.xml b/plugin.video.alfa/resources/settings.xml index ab3aa14a..58052e5e 100644 --- a/plugin.video.alfa/resources/settings.xml +++ b/plugin.video.alfa/resources/settings.xml @@ -117,6 +117,9 @@ - + + + + From fa5cb4baa1867f2c67b00e0f108ed0d7f54be68b Mon Sep 17 00:00:00 2001 From: Kevin Date: Tue, 26 Jun 2018 23:06:41 +0200 Subject: [PATCH 48/66] Revert "Fix Localized Strings in JSON Files (Mediaserver)" This reverts commit 7f2d99238ce6364036383ea6a74c3d2bcea34087. --- mediaserver/platformcode/controllers/html.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/mediaserver/platformcode/controllers/html.py b/mediaserver/platformcode/controllers/html.py index 6268f13f..573171a1 100644 --- a/mediaserver/platformcode/controllers/html.py +++ b/mediaserver/platformcode/controllers/html.py @@ -696,17 +696,15 @@ class platform(Platformtools): c["value"] = dict_values[c["id"]] # Translation - string_id = re.findall(r'\$ADDON\[[^\d]+(\d+)]', c['label'], flags=re.DOTALL) - if c['label'].startswith('$') and len(string_id) > 0: - c['label'] = str(config.get_localized_string(string_id[0])) + if c['label'].startswith('@') and unicode(c['label'][1:]).isnumeric(): + c['label'] = str(config.get_localized_string(c['label'][1:])) if c["label"].endswith(":"): c["label"] = c["label"][:-1] if c['type'] == 'list': lvalues = [] for li in c['lvalues']: - string_id = re.findall(r'\$ADDON\[[^\d]+(\d+)]', li, flags=re.DOTALL) - if li.startswith('$') and len(string_id) > 0: - lvalues.append(str(config.get_localized_string(string_id[0]))) + if li.startswith('@') and unicode(li[1:]).isnumeric(): + lvalues.append(str(config.get_localized_string(li[1:]))) else: lvalues.append(li) c['lvalues'] = lvalues From 1a76c7cd7973f54b624df621f613df017aa44e3d Mon Sep 17 00:00:00 2001 From: Kingbox <37674310+lopezvg@users.noreply.github.com> Date: Wed, 4 Jul 2018 14:32:29 +0200 Subject: [PATCH 49/66] Newpct1: nuevo canal virtual con Alta Disponibilidad MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Este nuevo canal virtual sustituye a los clones de Newpct1 actuales. Añade funciones de Alta Disponibilidad, cambiando automáticamente a otra web clone si está inaccesible la web en uso. --- plugin.video.alfa/channels/newpct1.json | 565 +++++++ plugin.video.alfa/channels/newpct1.py | 1610 ++++++++++++++++++++ plugin.video.alfa/channels/videolibrary.py | 12 +- plugin.video.alfa/lib/generictools.py | 208 ++- plugin.video.alfa/videolibrary_service.py | 12 +- 5 files changed, 2342 insertions(+), 65 deletions(-) create mode 100644 plugin.video.alfa/channels/newpct1.json create mode 100644 plugin.video.alfa/channels/newpct1.py diff --git a/plugin.video.alfa/channels/newpct1.json b/plugin.video.alfa/channels/newpct1.json new file mode 100644 index 00000000..a121e330 --- /dev/null +++ b/plugin.video.alfa/channels/newpct1.json @@ -0,0 +1,565 @@ +{ + "id": "newpct1", + "name": "Newpct1", + "active": true, + "adult": false, + "language": ["*"], + "thumbnail": "newpct1.png", + "banner": "newpct1.png", + "categories": [ + "movie", + "tvshow", + "anime", + "torrent", + "latino", + "documentary", + "vos", + "direct" + ], + "settings": [ + { + "id": "include_in_global_search", + "type": "bool", + "label": "Incluir en busqueda global", + "default": true, + "enabled": true, + "visible": true + }, + { + "id": "modo_grafico", + "type": "bool", + "label": "Buscar información extra (TMDB)", + "default": true, + "enabled": true, + "visible": true + }, + { + "id": "clonenewpct1_channel_default", + "type": "list", + "label": "Clone de NewPct1 por defecto", + "default": 0, + "enabled": true, + "visible": true, + "lvalues": [ + "Torrentrapid", + "Torrentlocura", + "Tumejortorrent", + "Tvsinpagar", + "Descargas2020", + "Mispelisyseries" + ] + }, + { + "id": "clonenewpct1_channels_list", + "type": "text", + "label": "Lista de clones de NewPct1 y orden de uso", + "default": "('1', 'torrentrapid', 'http://torrentrapid.com/', 'movie, tvshow, season, episode', ''), ('1', 'torrentlocura', 'http://torrentlocura.com/', 'movie, tvshow, season, episode', ''), ('1', 'tumejortorrent', 'http://tumejortorrent.com/', 'movie, tvshow, season, episode', ''), ('1', 'tvsinpagar', 'http://www.tvsinpagar.com/', 'tvshow, season, episode', ''), ('1', 'descargas2020', 'http://descargas2020.com/', 'movie, tvshow, season, episode', ''), ('1', 'mispelisyseries', 'http://mispelisyseries.com/', 'movie', 'search')", + "enabled": true, + "visible": false + }, + { + "id": "seleccionar_ult_temporadda_activa", + "type": "bool", + "label": "Seleccionar para Videoteca si estará activa solo la última Temporada", + "default": true, + "enabled": true, + "visible": true + }, + { + "id": "clonenewpct1_ver_enlaces_veronline", + "type": "list", + "label": "Mostrar enlaces Ver Online", + "default": 1, + "enabled": true, + "visible": true, + "lvalues": [ + "No", + "Todos", + "1", + "5", + "10", + "20" + ] + }, + { + "id": "clonenewpct1_verificar_enlaces_veronline", + "type": "list", + "label": "Verificar enlaces Ver Online", + "default": 1, + "enabled": true, + "visible": "!eq(-1,'No')", + "lvalues": [ + "No", + "Todos", + "1", + "5", + "10", + "20" + ] + }, + { + "id": "clonenewpct1_verificar_enlaces_veronline_validos", + "type": "bool", + "label": "¿Contar sólo enlaces 'verificados' en Ver Online?", + "default": true, + "enabled": true, + "visible": "!eq(-1,'No') + !eq(-2,'No')" + }, + { + "id": "clonenewpct1_excluir1_enlaces_veronline", + "type": "list", + "label": "Excluir Servidores para Ver Online", + "default": 9, + "max_excl": 5, + "enabled": true, + "visible": "!eq(-3,'No')", + "lvalues": [ + "No", + "Bankupload", + "Clipwatching", + "Flashx", + "Katfile", + "Mega", + "Mexashare", + "Movshare", + "Mowvideo", + "Openload", + "Powvideo", + "Rapidgator", + "Streamango", + "Streamcloud", + "Streame", + "Streaminto", + "Streamplay", + "Thevideo", + "Turbobit", + "Uploadedto", + "Uptobox", + "Userscloud", + "Vidabc", + "Vidspot" + ] + }, + { + "id": "clonenewpct1_excluir2_enlaces_veronline", + "type": "list", + "label": "Excluir Servidores para Ver Online", + "default": 12, + "enabled": true, + "visible": "!eq(-1,'No')", + "lvalues": [ + "No", + "Bankupload", + "Clipwatching", + "Flashx", + "Katfile", + "Mega", + "Mexashare", + "Movshare", + "Mowvideo", + "Openload", + "Powvideo", + "Rapidgator", + "Streamango", + "Streamcloud", + "Streame", + "Streaminto", + "Streamplay", + "Thevideo", + "Turbobit", + "Uploadedto", + "Uptobox", + "Userscloud", + "Vidabc", + "Vidspot" + ] + }, + { + "id": "clonenewpct1_excluir3_enlaces_veronline", + "type": "list", + "label": "Excluir Servidores para Ver Online", + "default": 20, + "enabled": true, + "visible": "!eq(-1,'No')", + "lvalues": [ + "No", + "Bankupload", + "Clipwatching", + "Flashx", + "Katfile", + "Mega", + "Mexashare", + "Movshare", + "Mowvideo", + "Openload", + "Powvideo", + "Rapidgator", + "Streamango", + "Streamcloud", + "Streame", + "Streaminto", + "Streamplay", + "Thevideo", + "Turbobit", + "Uploadedto", + "Uptobox", + "Userscloud", + "Vidabc", + "Vidspot" + ] + }, + { + "id": "clonenewpct1_excluir4_enlaces_veronline", + "type": "list", + "label": "Excluir Servidores para Ver Online", + "default": 0, + "enabled": true, + "visible": "!eq(-1,'No')", + "lvalues": [ + "No", + "Bankupload", + "Clipwatching", + "Flashx", + "Katfile", + "Mega", + "Mexashare", + "Movshare", + "Mowvideo", + "Openload", + "Powvideo", + "Rapidgator", + "Streamango", + "Streamcloud", + "Streame", + "Streaminto", + "Streamplay", + "Thevideo", + "Turbobit", + "Uploadedto", + "Uptobox", + "Userscloud", + "Vidabc", + "Vidspot" + ] + }, + { + "id": "clonenewpct1_excluir5_enlaces_veronline", + "type": "list", + "label": "Excluir Servidores para Ver Online", + "default": 0, + "enabled": true, + "visible": "!eq(-1,'No')", + "lvalues": [ + "No", + "Bankupload", + "Clipwatching", + "Flashx", + "Katfile", + "Mega", + "Mexashare", + "Movshare", + "Mowvideo", + "Openload", + "Powvideo", + "Rapidgator", + "Streamango", + "Streamcloud", + "Streame", + "Streaminto", + "Streamplay", + "Thevideo", + "Turbobit", + "Uploadedto", + "Uptobox", + "Userscloud", + "Vidabc", + "Vidspot" + ] + }, + { + "id": "clonenewpct1_ver_enlaces_descargas", + "type": "list", + "label": "Mostrar enlaces Descargas", + "default": 0, + "enabled": true, + "visible": true, + "lvalues": [ + "No", + "Todos", + "1", + "5", + "10", + "20", + "30", + "50", + "100" + ] + }, + { + "id": "clonenewpct1_verificar_enlaces_descargas", + "type": "list", + "label": "Verificar enlaces Descargas", + "default": 1, + "enabled": true, + "visible": "!eq(-1,'No')", + "lvalues": [ + "No", + "Todos", + "1", + "5", + "10", + "20", + "30", + "50", + "100" + ] + }, + { + "id": "clonenewpct1_verificar_enlaces_descargas_validos", + "type": "bool", + "label": "¿Contar sólo enlaces 'verificados' en Descargar?", + "default": true, + "enabled": true, + "visible": "!eq(-1,'No') + !eq(-2,'No')" + }, + { + "id": "clonenewpct1_excluir1_enlaces_descargas", + "type": "list", + "label": "Excluir Servidores para Ver Descargas", + "default": 0, + "enabled": true, + "visible": "!eq(-3,'No')", + "lvalues": [ + "No", + "Bankupload", + "Clipwatching", + "Flashx", + "Katfile", + "Mega", + "Mexashare", + "Movshare", + "Mowvideo", + "Openload", + "Powvideo", + "Rapidgator", + "Streamango", + "Streamcloud", + "Streame", + "Streaminto", + "Streamplay", + "Thevideo", + "Turbobit", + "Uploadedto", + "Uptobox", + "Userscloud", + "Vidabc", + "Vidspot" + ] + }, + { + "id": "clonenewpct1_excluir2_enlaces_descargas", + "type": "list", + "label": "Excluir Servidores para Ver Descargas", + "default": 0, + "enabled": true, + "visible": "!eq(-1,'No')", + "lvalues": [ + "No", + "Bankupload", + "Clipwatching", + "Flashx", + "Katfile", + "Mega", + "Mexashare", + "Movshare", + "Mowvideo", + "Openload", + "Powvideo", + "Rapidgator", + "Streamango", + "Streamcloud", + "Streame", + "Streaminto", + "Streamplay", + "Thevideo", + "Turbobit", + "Uploadedto", + "Uptobox", + "Userscloud", + "Vidabc", + "Vidspot" + ] + }, + { + "id": "clonenewpct1_excluir3_enlaces_descargas", + "type": "list", + "label": "Excluir Servidores para Descargas", + "default": 0, + "enabled": true, + "visible": "!eq(-1,'No')", + "lvalues": [ + "No", + "Bankupload", + "Clipwatching", + "Flashx", + "Katfile", + "Mega", + "Mexashare", + "Movshare", + "Mowvideo", + "Openload", + "Powvideo", + "Rapidgator", + "Streamango", + "Streamcloud", + "Streame", + "Streaminto", + "Streamplay", + "Thevideo", + "Turbobit", + "Uploadedto", + "Uptobox", + "Userscloud", + "Vidabc", + "Vidspot" + ] + }, + { + "id": "clonenewpct1_excluir4_enlaces_descargas", + "type": "list", + "label": "Excluir Servidores para Descargas", + "default": 0, + "enabled": true, + "visible": "!eq(-1,'No')", + "lvalues": [ + "No", + "Bankupload", + "Clipwatching", + "Flashx", + "Katfile", + "Mega", + "Mexashare", + "Movshare", + "Mowvideo", + "Openload", + "Powvideo", + "Rapidgator", + "Streamango", + "Streamcloud", + "Streame", + "Streaminto", + "Streamplay", + "Thevideo", + "Turbobit", + "Uploadedto", + "Uptobox", + "Userscloud", + "Vidabc", + "Vidspot" + ] + }, + { + "id": "clonenewpct1_excluir5_enlaces_descargas", + "type": "list", + "label": "Excluir Servidores para Descargas", + "default": 0, + "enabled": true, + "visible": "!eq(-1,'No')", + "lvalues": [ + "No", + "Bankupload", + "Clipwatching", + "Flashx", + "Katfile", + "Mega", + "Mexashare", + "Movshare", + "Mowvideo", + "Openload", + "Powvideo", + "Rapidgator", + "Streamango", + "Streamcloud", + "Streame", + "Streaminto", + "Streamplay", + "Thevideo", + "Turbobit", + "Uploadedto", + "Uptobox", + "Userscloud", + "Vidabc", + "Vidspot" + ] + }, + { + "id": "include_in_newest_peliculas", + "type": "bool", + "label": "Incluir en Novedades - Peliculas", + "default": true, + "enabled": true, + "visible": false + }, + { + "id": "include_in_newest_series", + "type": "bool", + "label": "Incluir en Novedades - Episodios de series", + "default": true, + "enabled": true, + "visible": false + }, + { + "id": "include_in_newest_anime", + "type": "bool", + "label": "Incluir en Novedades - Anime", + "default": true, + "enabled": true, + "visible": false + }, + { + "id": "include_in_newest_documentales", + "type": "bool", + "label": "Incluir en Novedades - Documentales", + "default": true, + "enabled": true, + "visible": false + }, + { + "id": "include_in_newest_latino", + "type": "bool", + "label": "Incluir en Novedades - Documentales", + "default": true, + "enabled": true, + "visible": false + }, + { + "id": "include_in_newest_4k", + "type": "bool", + "label": "Incluir en Novedades - 4K", + "default": true, + "enabled": true, + "visible": false + }, + { + "id": "clonenewpct1_timeout_downloadpage", + "type": "list", + "label": "Timeout (segs.) en descarga de páginas o verificación de servidores", + "default": 5, + "enabled": true, + "visible": true, + "lvalues": [ + "None", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10" + ] + } + ] +} \ No newline at end of file diff --git a/plugin.video.alfa/channels/newpct1.py b/plugin.video.alfa/channels/newpct1.py new file mode 100644 index 00000000..8edb752c --- /dev/null +++ b/plugin.video.alfa/channels/newpct1.py @@ -0,0 +1,1610 @@ +# -*- coding: utf-8 -*- + +import re +import sys +import urllib +import urlparse +import datetime +import ast + +from channelselector import get_thumb +from core import httptools +from core import scrapertools +from core import servertools +from core.item import Item +from platformcode import config, logger +from core import tmdb +from lib import generictools + +channel_py = 'newpct1' + +#Código para permitir usar un único canal para todas las webs clones de NewPct1 +clone_list = config.get_setting('clonenewpct1_channels_list', channel_py) #Carga lista de clones +clone_list = ast.literal_eval(clone_list) #la convierte en array +host_index = 0 +host_index = config.get_setting('clonenewpct1_channel_default', channel_py) #Clone por defecto +i = 0 +for active_clone, channel_clone, host_clone, contentType_clone, info_clone in clone_list: + if i == host_index: + channel_clone_name = channel_clone #Nombre del Canal elegido + host = host_clone #URL del Canal elegido + break + i += 1 +item = Item() +if item.channel != channel_py: + item.channel = channel_py + +#Carga de opciones del canal +__modo_grafico__ = config.get_setting('modo_grafico', channel_py) #TMDB? +modo_ultima_temp = config.get_setting('seleccionar_ult_temporadda_activa', channel_py) #Actualización sólo últ. Temporada? +timeout = config.get_setting('clonenewpct1_timeout_downloadpage', channel_py) #Timeout downloadpage +if timeout == 0: timeout = None + + +def mainlist(item): + logger.info() + + itemlist = [] + + if not item.channel_host: + item.channel_host = host + if item.category.lower() == channel_py: + item.category = channel_clone_name.capitalize() + + thumb_pelis = get_thumb("channels_movie.png") + thumb_pelis_hd = get_thumb("channels_movie_hd.png") + thumb_series = get_thumb("channels_tvshow.png") + thumb_series_hd = get_thumb("channels_tvshow_hd.png") + thumb_series_az = get_thumb("channels_tvshow_az.png") + thumb_docus = get_thumb("channels_documentary.png") + thumb_buscar = get_thumb("search.png") + thumb_settings = get_thumb("setting_0.png") + + itemlist.append(Item(channel=item.channel, action="submenu", title="Películas", url=item.channel_host, + extra="peliculas", thumbnail=thumb_pelis, category=item.category)) + + itemlist.append(Item(channel=item.channel, action="submenu", title="Series", url=item.channel_host, extra="series", + thumbnail=thumb_series, category=item.category)) + + itemlist.append(Item(channel=item.channel, action="submenu", title="Documentales", url=item.channel_host, extra="varios", + thumbnail=thumb_docus, category=item.category)) + itemlist.append( + Item(channel=item.channel, action="search", title="Buscar", url=item.channel_host + "buscar", thumbnail=thumb_buscar, category=item.category)) + + itemlist.append( + Item(channel=item.channel, action="", title="[COLOR yellow]Configuración de Servidores:[/COLOR]", url="", thumbnail=thumb_settings, category=item.category)) + itemlist.append( + Item(channel=item.channel, action="settingCanal", title="Servidores para Ver Online y Descargas", url="", thumbnail=thumb_settings, category=item.category)) + + return itemlist + + +def settingCanal(item): + from platformcode import platformtools + return platformtools.show_channel_settings() + + +def submenu(item): + logger.info() + itemlist = [] + + data = '' + try: + data = re.sub(r"\n|\r|\t|\s{2}|()", "", httptools.downloadpage(item.url, timeout=timeout).data) + except: + pass + + patron = '
  • <\/i>.*Inicio<\/a><\/li>(.+)<\/ul>\s?<\/nav>' + #Verificamos si se ha cargado una página, y si además tiene la estructura correcta + if not data or not scrapertools.find_single_match(data, patron): + logger.error("ERROR 01: SUBMENU: La Web no responde o ha cambiado de URL: " + item.url + data) + #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú + item, data = generictools.fail_over_newpct1(item, patron) + + if not data: #Si no ha logrado encontrar nada, salimos + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: SUBMENU: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + elif item.channel_alt: #Si ha habido fail-over, lo comento + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR] [ALT ] en uso')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel_alt.capitalize() + '[/COLOR] inaccesible')) + + if item.url_alt: del item.url_alt + del item.channel_alt + + data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") + data = data.replace("'", '"').replace('/series"', '/series/"') #Compatibilidad con mispelisy.series.com + if "pelisyseries.com" in item.channel_host and item.extra == "varios": #compatibilidad con mispelisy.series.com + data = '
  • Documentales
  • ' + else: + data = scrapertools.get_match(data, patron) #Seleccionamos el trozo que nos interesa + if not data: + logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + + patron = '
  • ([^>]+)<\/a><\/li>' + matches = re.compile(patron, re.DOTALL).findall(data) + + if not matches: + logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + + for scrapedurl, scrapedtitle in matches: + title = scrapedtitle.strip() + + #Preguntamos por las entradas que no corresponden al "extra" + if item.extra in scrapedtitle.lower() or (item.extra == "peliculas" and ("cine" in scrapedurl or "anime" in scrapedurl)) or (item.extra == "varios" and ("documentales" in scrapedurl or "varios" in scrapedurl)): + itemlist.append(item.clone(action="listado", title=title, url=scrapedurl)) + itemlist.append(item.clone(action="alfabeto", title=title + " [A-Z]", url=scrapedurl)) + + if item.extra == "peliculas": + itemlist.append(item.clone(action="listado", title="Películas 4K", url=item.channel_host + "peliculas-hd/4kultrahd/")) + itemlist.append(item.clone(action="alfabeto", title="Películas 4K" + " [A-Z]", url=item.channel_host + "peliculas-hd/4kultrahd/")) + + return itemlist + + +def alfabeto(item): + logger.info() + itemlist = [] + + data = '' + data = re.sub(r"\n|\r|\t|\s{2}|()", "", httptools.downloadpage(item.url, timeout=timeout).data) + data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") + + patron = '
      (.*?)
    ' + if not data or not scrapertools.find_single_match(data, patron): + logger.error("ERROR 01: ALFABETO: La Web no responde o ha cambiado de URL: " + item.url + data) + #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú + item, data = generictools.fail_over_newpct1(item, patron) + + if not data: #Si no ha logrado encontrar nada, salimos + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: ALFABETO: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + elif item.channel_alt: #Si ha habido fail-over, lo comento + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR] [ALT ] en uso')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel_alt.capitalize() + '[/COLOR] inaccesible')) + + if item.url_alt: del item.url_alt + del item.channel_alt + + data = scrapertools.get_match(data, patron) + + patron = ']+>([^>]+)' + + matches = re.compile(patron, re.DOTALL).findall(data) + if not matches: + logger.error("ERROR 02: ALFABETO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: ALFABETO: Ha cambiado la estructura de la Web. Reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + + for scrapedurl, scrapedtitle in matches: + title = scrapedtitle.upper() + + itemlist.append(item.clone(action="listado", title=title, url=scrapedurl)) + + return itemlist + + +def listado(item): + logger.info() + itemlist = [] + clase = "pelilist" # etiqueta para localizar zona de listado de contenidos + url_next_page ='' # Controlde paginación + cnt_tot = 30 # Poner el num. máximo de items por página + + if item.totalItems: + del item.totalItems + + data = '' + try: + data = re.sub(r"\n|\r|\t|\s{2}|()", "", httptools.downloadpage(item.url, timeout=timeout).data) + except: + pass + + patron = '
      (.*?)
    ' #seleccionamos el bloque que nos interesa + if not data or (not scrapertools.find_single_match(data, patron) and not '

    ( 0 ) Resultados encontrados ' in data): + logger.error("ERROR 01: LISTADO: La Web no responde o ha cambiado de URL: " + item.url + " / DATA: " + data) + #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú + item, data = generictools.fail_over_newpct1(item, patron) + + if not data: #Si no ha logrado encontrar nada, salimos + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: LISTADO: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + + #Establecemos los valores básicos en función del tipo de contenido + if item.extra == "peliculas": + item.action = "findvideos" + item.contentType = "movie" + pag = True #Sí hay paginación + elif item.extra == "series" and not "/miniseries" in item.url: + item.action = "episodios" + item.contentType = "tvshow" + pag = True + elif item.extra == "varios" or "/miniseries" in item.url: + item.action = "findvideos" + item.contentType = "movie" + pag = True + + #Selecciona el tramo de la página con el listado de contenidos + patron = '
      (.*?)
    ' + if data: + fichas = scrapertools.get_match(data, patron) + if not fichas and not '

    ( 0 ) Resultados encontrados ' in data: #error + logger.error("ERROR 02: LISTADO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + elif '

    ( 0 ) Resultados encontrados ' in data: #no hay vídeos + return itemlist + else: + return itemlist + page_extra = clase + + #Scrapea los datos de cada vídeo. Título alternativo se mantiene, aunque no se usa de momento + patron = ' cnt_pag + cnt_tot: + url_next_page = item.url + matches = matches[cnt_pag:cnt_pag+cnt_tot] + next_page = '' + if matches_cnt <= cnt_pag + (cnt_tot * 2): + if pag: + next_page = 'b' + modo = 'continue' + else: + matches = matches[cnt_pag:cnt_pag+cnt_tot] + next_page = 'a' + patron_next_page = 'Next<\/a>' + matches_next_page = re.compile(patron_next_page, re.DOTALL).findall(data) + modo = 'continue' + if len(matches_next_page) > 0: + url_next_page = urlparse.urljoin(item.url, matches_next_page[0]) + modo = 'next' + + # Avanzamos el contador de líneas en una página + if item.next_page: + del item.next_page + if modo == 'next': + cnt_pag = 0 + else: + cnt_pag += cnt_tot + + #Tratamos todos los contenidos, creardo una variable local de Item + for scrapedurl, scrapedtitle, scrapedthumbnail, title_alt, calidad in matches: + item_local = item.clone() + if item_local.tipo: + del item_local.tipo + if item_local.totalItems: + del item_local.totalItems + if item_local.post_num: + del item_local.post_num + if item_local.category: + del item_local.category + + item_local.title = '' + item_local.context = "['buscar_trailer']" + + # Limpiamos títulos, Sacamos datos de calidad, audio y lenguaje + title = re.sub('\r\n', '', scrapedtitle).decode('iso-8859-1').encode('utf8').strip() + title_alt = re.sub('\r\n', '', title_alt).decode('iso-8859-1').encode('utf8').strip() + title = title.replace("á", "a").replace("é", "e").replace("í", "i").replace("ó", "o").replace("ú", "u").replace("ü", "u").replace("�", "ñ").replace("ñ", "ñ").replace(".", " ") + title_alt = title_alt.replace("á", "a").replace("é", "e").replace("í", "i").replace("ó", "o").replace("ú", "u").replace("ü", "u").replace("�", "ñ").replace("ñ", "ñ") + + item_local.quality = calidad + title_subs = [] + + #Determinamos y marcamos idiomas distintos del castellano + item_local.language = [] + if "[vos" in title.lower() or "v.o.s" in title.lower() or "vo" in title.lower() or ".com/pelicula/" in scrapedurl or ".com/series-vo" in scrapedurl or "-vo/" in scrapedurl or "vos" in calidad.lower() or "vose" in calidad.lower() or "v.o.s" in calidad.lower() or "sub" in calidad.lower() or ".com/peliculas-vo" in item.url: + item_local.language += ["VOS"] + title = title.replace(" [Subs. integrados]", "").replace(" [subs. Integrados]", "").replace(" [VOSE", "").replace(" [VOS", "").replace(" (V.O.S.E)", "").replace(" VO", "").replace("Subtitulos", "") + if "latino" in title.lower() or "argentina" in title.lower() or "-latino/" in scrapedurl or "latino" in calidad.lower() or "argentina" in calidad.lower(): + item_local.language += ["LAT"] + + #Guardamos info de 3D en calidad y limpiamos + if "3d" in title.lower(): + if not "3d" in item_local.quality.lower(): + item_local.quality = item_local.quality + " 3D" + calidad3D = scrapertools.find_single_match(title, r'\s(3[d|D]\s\w+)') + if calidad3D: + item_local.quality = item_local.quality.replace("3D", calidad3D) + title = re.sub(r'\s3[d|D]\s\w+', '', title) + title = re.sub(r'\s3[d|D]', '', title) + title_alt = re.sub(r'\s3[d|D]\s\w+', '', title_alt) + title_alt = re.sub(r'\s3[d|D]', '', title_alt) + if "imax" in title.lower(): + item_local.quality = item_local.quality + " IMAX" + title = title.replace(" IMAX", "").replace(" imax", "") + title_alt = title_alt.replace(" IMAX", "").replace(" imax", "") + if "2d" in title.lower(): + title = title.replace("(2D)", "").replace("(2d)", "").replace("2D", "").replace("2d", "") + title_subs += ["[2D]"] + + #Extraemos info adicional del título y la guardamos para después de TMDB + if "temp" in title.lower() or "cap" in title.lower(): #Eliminamos Temporada, solo nos interesa la serie completa + title = re.sub(r' - [t|T]emp\w+ \d+ Comp\w+\d+[x|X]\d+', ' Completa', title) + title = re.sub(r' - [t|T]emp\w+ \d+x\d+', '', title) + title = re.sub(r' - [t|T]emp\w+ \d+', '', title) + title = re.sub(r' - [t|T]emp\w+.*?\d+', '', title) + title = re.sub(r' [t|T]emp.*?\d+x\d+', '', title) + title = re.sub(r' [t|T]emp.*?\d+', '', title) + title = re.sub(r' [c|C]ap.*?\d+', '', title) + if "audio" in title.lower(): #Reservamos info de audio para después de TMDB + title_subs += ['[%s]' % scrapertools.find_single_match(title, r'(\[[a|A]udio.*?\])')] + title = re.sub(r'\[[a|A]udio.*?\]', '', title) + if "[dual" in title.lower() or "multileng" in title.lower() or "multileng" in item_local.quality.lower() or (("espa" in title.lower() or "spani" in title.lower()) and "VOS" in item_local.language): + item_local.language[0:0] = ["DUAL"] + title = re.sub(r'\[[D|d]ual.*?\]', '', title) + title = re.sub(r'\[[M|m]ultileng.*?\]', '', title) + item_local.quality = re.sub(r'\[[M|m]ultileng.*?\]', '', item_local.quality) + if "duolog" in title.lower(): + title_subs += ["[Saga]"] + title = title.replace(" Duologia", "").replace(" duologia", "").replace(" Duolog", "").replace(" duolog", "") + if "trilog" in title.lower(): + title_subs += ["[Saga]"] + title = title.replace(" Trilogia", "").replace(" trilogia", "").replace(" Trilog", "").replace(" trilog", "") + if "extendida" in title.lower(): + title_subs += ["[V. Extendida]"] + title = title.replace(" Version Extendida", "").replace(" (Version Extendida)", "").replace(" V. Extendida", "").replace(" VExtendida", "").replace(" V Extendida", "") + if "saga" in title.lower(): + title = title.replace(" Saga Completa", "").replace(" saga sompleta", "").replace(" Saga", "").replace(" saga", "") + title_subs += ["[Saga]"] + if "colecc" in title.lower() or "completa" in title.lower(): + title = title.replace(" Coleccion", "").replace(" coleccion", "").replace(" Colecci", "").replace(" colecci", "").replace(" Completa", "").replace(" completa", "").replace(" COMPLETA", "") + if scrapertools.find_single_match(title, r'(- [m|M].*?serie ?\w+)'): + title = re.sub(r'- [m|M].*?serie ?\w+', '', title) + title_subs += ["[Miniserie]"] + + #Limpiamos restos en título + title = title.replace("Castellano", "").replace("castellano", "").replace("inglés", "").replace("ingles", "").replace("Inglés", "").replace("Ingles", "").replace("Ingl", "").replace("Engl", "").replace("Calidad", "").replace("de la Serie", "") + title_alt = title_alt.replace("Castellano", "").replace("castellano", "").replace("inglés", "").replace("ingles", "").replace("Inglés", "").replace("Ingles", "").replace("Ingl", "").replace("Engl", "").replace("Calidad", "").replace("de la Serie", "") + + #Limpiamos cabeceras y colas del título + title = re.sub(r'Descargar\s\w+\-\w+', '', title) + title = re.sub(r'\(COMPLE.*?\)', '', title) + title = re.sub(r'\(\d{4}\)$', '', title) + title = re.sub(r'\d{4}$', '', title) + title = re.sub(r' \d+x\d+', '', title) + title = re.sub(r' x\d+', '', title) + + title = title.replace("Ver online ", "").replace("Descarga Serie HD ", "").replace("Descargar Serie HD ", "").replace("Descarga Serie ", "").replace("Descargar Serie ", "").replace("Ver en linea ", "").replace("Ver en linea", "").replace("HD ", "").replace("(Proper)", "").replace("RatDVD", "").replace("DVDRiP", "").replace("DVDRIP", "").replace("DVDRip", "").replace("DVDR", "").replace("DVD9", "").replace("DVD", "").replace("DVBRIP", "").replace("DVB", "").replace("LINE", "").replace("- ES ", "").replace("ES ", "").replace("COMPLETA", "").replace("(", "-").replace(")", "-").replace(".", " ").strip() + + title = title.replace("Descargar torrent ", "").replace("Descarga Gratis ", "").replace("Descargar Estreno ", "").replace("Descargar Estrenos ", "").replace("Pelicula en latino ", "").replace("Descargar Pelicula ", "").replace("Descargar Peliculas ", "").replace("Descargar peliculas ", "").replace("Descargar Todas ", "").replace("Descargar Otras ", "").replace("Descargar ", "").replace("Descarga ", "").replace("Bajar ", "").replace("HDRIP ", "").replace("HDRiP ", "").replace("HDRip ", "").replace("RIP ", "").replace("Rip", "").replace("RiP", "").replace("XviD", "").replace("AC3 5.1", "").replace("AC3", "").replace("1080p ", "").replace("720p ", "").replace("DVD-Screener ", "").replace("TS-Screener ", "").replace("Screener ", "").replace("BdRemux ", "").replace("BR ", "").replace("4KULTRA", "").replace("FULLBluRay", "").replace("FullBluRay", "").replace("BluRay", "").replace("Bonus Disc", "").replace("de Cine ", "").replace("TeleCine ", "").replace("latino", "").replace("Latino", "").replace("argentina", "").replace("Argentina", "").strip() + + if title.endswith("torrent gratis"): title = title[:-15] + if title.endswith("gratis"): title = title[:-7] + if title.endswith("torrent"): title = title[:-8] + if title.endswith("en HD"): title = title[:-6] + if title.endswith(" -"): title = title[:-2] + if "en espa" in title: title = title[:-11] + + item_local.quality = item_local.quality.replace("gratis ", "") + if "HDR" in title: + title = title.replace(" HDR", "") + if not "HDR" in item_local.quality: + item_local.quality += " HDR" + + title = title.strip() + title_alt = title_alt.strip() + item_local.quality = item_local.quality.strip() + + if not title: #Usamos solo el title_alt en caso de que no exista el título original + title = title_alt + if not title: + title = "SIN TITULO" + + #Limpieza final del título y guardado en las variables según su tipo de contenido + title = scrapertools.remove_htmltags(title) + item_local.title = title + if item_local.contentType == "movie": + item_local.contentTitle = title + else: + item_local.contentSerieName = title + + #Guardamos el resto de variables del vídeo + item_local.url = scrapedurl + item_local.thumbnail = scrapedthumbnail + item_local.contentThumbnail = scrapedthumbnail + + #Guardamos el año que puede venir en la url, por si luego no hay resultados desde TMDB + year = '' + if item_local.contentType == "movie": + year = scrapertools.find_single_match(scrapedurl, r'(\d{4})') + if year >= "1900" and year <= "2040" and year != "2020": + title_subs += [year] + item_local.infoLabels['year'] = '-' + + #Guarda la variable temporal que almacena la info adicional del título a ser restaurada después de TMDB + item_local.title_subs = title_subs + + #Agrega el item local a la lista itemlist + itemlist.append(item_local.clone()) + + #Pasamos a TMDB la lista completa Itemlist + tmdb.set_infoLabels(itemlist, __modo_grafico__) + + #Llamamos al método para el maquillaje de los títulos obtenidos desde TMDB + item, itemlist = generictools.post_tmdb_listado(item, itemlist) + + if len(itemlist) == 0: + itemlist.append(Item(channel=item.channel, action="mainlist", title="No se ha podido cargar el listado")) + else: + if url_next_page: + itemlist.append( + Item(channel=item.channel, action="listado", title="[COLOR gold][B]Pagina siguiente >> [/B][/COLOR]" + str(post_num) + " de " + str(total_pag), url=url_next_page, next_page=next_page, cnt_pag=cnt_pag, post_num=post_num, pag=pag, modo=modo, extra=item.extra)) + + #logger.debug(url_next_page + " / " + next_page + " / " + str(matches_cnt) + " / " + str(cnt_pag)+ " / " + str(total_pag) + " / " + str(pag) + " / " + modo + " / " + item.extra) + + return itemlist + +def listado_busqueda(item): + logger.info() + + #Renombramos el canal al nombre de clone elegido. Actualizados URL + host = scrapertools.find_single_match(item.url, '(http.?\:\/\/(?:www.)?\w+\.\w+\/)') + #item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/') + if item.category and item.category != "newest": + item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() + + itemlist = [] + cnt_tot = 40 # Poner el num. máximo de items por página. Dejamos que la web lo controle + cnt_title = 0 # Contador de líneas insertadas en Itemlist + cnt_pag = 0 # Contador de líneas leídas de Matches + timeout_search = 5 # Timeout un poco más largo para las búsquedas + if timeout > 5: + timeout_search = timeout # Timeout un poco más largo para las búsquedas + data = '' + + if item.cnt_pag: + cnt_pag = item.cnt_pag # Se guarda en la lista de páginas anteriores en Item + del item.cnt_pag + if item.totalItems: + del item.totalItems + if item.text_bold: + del item.text_bold + if item.text_color: + del item.text_color + + #Sistema de paginado para evitar páginas vacías o semi-vacías en casos de búsquedas con series con muchos episodios + title_lista = [] # Guarda la lista de series que ya están en Itemlist, para no duplicar lineas + if item.title_lista: # Si viene de una pasada anterior, la lista ya estará guardada + title_lista = item.title_lista # Se usa la lista de páginas anteriores en Item + title_lista_alt = [] + for url in title_lista: + title_lista_alt += [url] #hacemos una copia no vinculada de title_lista + matches = [] + cnt_next = 0 + total_pag = 1 + post_num = 1 + + #Máximo num. de líneas permitidas por TMDB. Máx de 5 páginas por Itemlist para no degradar el rendimiento + while cnt_title <= cnt_tot and cnt_next < 5: + + try: + data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, post=item.post, timeout=timeout_search).data) + except: + pass + + cnt_next += 1 + pattern = '
      (.*?)
    ' % item.pattern #seleccionamos el bloque que nos interesa + if not data or (not scrapertools.find_single_match(data, pattern) and not '

    ( 0 ) Resultados encontrados ' in data): + logger.error("ERROR 01: LISTADO_BUSQUEDA: La Web no responde o ha cambiado de URL: " + item.url + item.post + " / DATA: " + data) + #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú + item, data = generictools.fail_over_newpct1(item, pattern) + + if not data: #Si no ha logrado encontrar nada, salimos + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: LISTADO_BUSQUEDA:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + elif item.channel_alt: #Si ha habido fail-over, lo comento + host = host.replace(item.channel_alt, item.channel) + + #Obtiene la dirección de la próxima página, si la hay + try: + post_actual = item.post #Guardamos el post actual por si hay overflow de Itemlist y hay que hechar marcha atrás + get, post, total_pag = scrapertools.find_single_match(data, '' - if "pelisyseries.com" in host_alt and item.extra == "varios": #compatibilidad con mispelisy.series.com - data = ' Documentales' + data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") + data = data.replace("'", '"').replace('/series"', '/series/"') #Compatibilidad con mispelisy.series.com + if "pelisyseries.com" in item.channel_host and item.extra == "varios": #compatibilidad con mispelisy.series.com + data = '
  • Documentales
  • ' else: - if data: - data = scrapertools.get_match(data, patron) - if not data: - logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) - return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos - else: - return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + data = scrapertools.get_match(data, patron) #Seleccionamos el trozo que nos interesa + if not data: + logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos - patron = '<.*?href="([^"]+)".*?>([^>]+)' + patron = '
  • ([^>]+)<\/a><\/li>' matches = re.compile(patron, re.DOTALL).findall(data) + if not matches: logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos for scrapedurl, scrapedtitle in matches: title = scrapedtitle.strip() - url = scrapedurl - itemlist.append(Item(channel=item.channel, action="listado", title=title, url=url, extra=item.extra)) - itemlist.append( - Item(channel=item.channel, action="alfabeto", title=title + " [A-Z]", url=url, extra=item.extra)) + #Preguntamos por las entradas que no corresponden al "extra" + if item.extra in scrapedtitle.lower() or (item.extra == "peliculas" and ("cine" in scrapedurl or "anime" in scrapedurl)) or (item.extra == "varios" and ("documentales" in scrapedurl or "varios" in scrapedurl)): + itemlist.append(item.clone(action="listado", title=title, url=scrapedurl)) + itemlist.append(item.clone(action="alfabeto", title=title + " [A-Z]", url=scrapedurl)) if item.extra == "peliculas": - itemlist.append(Item(channel=item.channel, action="listado", title="Películas 4K", url=host_alt + "peliculas-hd/4kultrahd/", extra=item.extra)) - itemlist.append( - Item(channel=item.channel, action="alfabeto", title="Películas 4K" + " [A-Z]", url=host_alt + "peliculas-hd/4kultrahd/", extra=item.extra)) + itemlist.append(item.clone(action="listado", title="Películas 4K", url=item.channel_host + "peliculas-hd/4kultrahd/")) + itemlist.append(item.clone(action="alfabeto", title="Películas 4K" + " [A-Z]", url=item.channel_host + "peliculas-hd/4kultrahd/")) return itemlist @@ -155,28 +160,41 @@ def alfabeto(item): logger.info() itemlist = [] - data = re.sub(r"\n|\r|\t|\s{2}|()", "", httptools.downloadpage(item.url).data) + data = '' + data = re.sub(r"\n|\r|\t|\s{2}|()", "", httptools.downloadpage(item.url, timeout=timeout).data) data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") patron = '
      (.*?)
    ' - if data: - data = scrapertools.get_match(data, patron) - else: - return itemlist + if not data or not scrapertools.find_single_match(data, patron): + logger.error("ERROR 01: ALFABETO: La Web no responde o ha cambiado de URL: " + item.url + data) + #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú + item, data = generictools.fail_over_newpct1(item, patron) + + if not data: #Si no ha logrado encontrar nada, salimos + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: ALFABETO: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + elif item.channel_alt: #Si ha habido fail-over, lo comento + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR] [ALT ] en uso')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel_alt.capitalize() + '[/COLOR] inaccesible')) + + if item.url_alt: del item.url_alt + del item.channel_alt + + data = scrapertools.get_match(data, patron) patron = ']+>([^>]+)' matches = re.compile(patron, re.DOTALL).findall(data) if not matches: - logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) + logger.error("ERROR 02: ALFABETO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: ALFABETO: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos for scrapedurl, scrapedtitle in matches: title = scrapedtitle.upper() - url = scrapedurl - itemlist.append(Item(channel=item.channel, action="listado", title=title, url=url, extra=item.extra)) + itemlist.append(item.clone(action="listado", title=title, url=scrapedurl)) return itemlist @@ -191,11 +209,21 @@ def listado(item): if item.totalItems: del item.totalItems + data = '' try: - data = re.sub(r"\n|\r|\t|\s{2}|()", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2}|()", "", httptools.downloadpage(item.url, timeout=timeout).data) except: + pass + + patron = '
      (.*?)
    ' #seleccionamos el bloque que nos interesa + if not data or (not scrapertools.find_single_match(data, patron) and not '

    ( 0 ) Resultados encontrados ' in data): logger.error("ERROR 01: LISTADO: La Web no responde o ha cambiado de URL: " + item.url + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: LISTADO:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú + item, data = generictools.fail_over_newpct1(item, patron) + + if not data: #Si no ha logrado encontrar nada, salimos + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: LISTADO: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #Establecemos los valores básicos en función del tipo de contenido @@ -218,7 +246,7 @@ def listado(item): fichas = scrapertools.get_match(data, patron) if not fichas and not '

    ( 0 ) Resultados encontrados ' in data: #error logger.error("ERROR 02: LISTADO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos elif '

    ( 0 ) Resultados encontrados ' in data: #no hay vídeos return itemlist @@ -235,7 +263,7 @@ def listado(item): matches = re.compile(patron, re.DOTALL).findall(fichas) if not matches: #error logger.error("ERROR 02: LISTADO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + fichas) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #logger.debug("MATCHES: " + str(len(matches))) @@ -460,13 +488,21 @@ def listado(item): def listado_busqueda(item): logger.info() - - host = 'http://%s/' % scrapertools.find_single_match(item.url, '(\w+\.com)\/') + + #Renombramos el canal al nombre de clone elegido. Actualizados URL + host = scrapertools.find_single_match(item.url, '(http.?\:\/\/(?:www.)?\w+\.\w+\/)') + #item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/') + if item.category and item.category != "newest": + item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() itemlist = [] cnt_tot = 40 # Poner el num. máximo de items por página. Dejamos que la web lo controle cnt_title = 0 # Contador de líneas insertadas en Itemlist cnt_pag = 0 # Contador de líneas leídas de Matches + timeout_search = 5 # Timeout un poco más largo para las búsquedas + if timeout > 5: + timeout_search = timeout # Timeout un poco más largo para las búsquedas + data = '' if item.cnt_pag: cnt_pag = item.cnt_pag # Se guarda en la lista de páginas anteriores en Item @@ -493,21 +529,21 @@ def listado_busqueda(item): #Máximo num. de líneas permitidas por TMDB. Máx de 5 páginas por Itemlist para no degradar el rendimiento while cnt_title <= cnt_tot and cnt_next < 5: - pattern = '
      (.*?)
    ' % item.pattern #seleccionamos el bloque que nos interesa try: - data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, post=item.post).data) + data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, post=item.post, timeout=timeout_search).data) except: pass - cnt_next += 1 - if not data or not scrapertools.find_single_match(data, pattern): + cnt_next += 1 + pattern = '
      (.*?)
    ' % item.pattern #seleccionamos el bloque que nos interesa + if not data or (not scrapertools.find_single_match(data, pattern) and not '

    ( 0 ) Resultados encontrados ' in data): logger.error("ERROR 01: LISTADO_BUSQUEDA: La Web no responde o ha cambiado de URL: " + item.url + item.post + " / DATA: " + data) #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú item, data = generictools.fail_over_newpct1(item, pattern) if not data: #Si no ha logrado encontrar nada, salimos itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: LISTADO_BUSQUEDA:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: LISTADO_BUSQUEDA:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos elif item.channel_alt: #Si ha habido fail-over, lo comento host = host.replace(item.channel_alt, item.channel) @@ -531,7 +567,6 @@ def listado_busqueda(item): pattern = '
      (.*?)
    ' % item.pattern #seleccionamos el bloque que nos interesa data_alt = data data = scrapertools.get_match(data, pattern) - #pattern = ']*>(?P.*?)?<\/h2>' pattern = '<li[^>]*><a href="(?P<scrapedurl>[^"]+).*?' #url pattern += 'title="(?P<scrapedtitle>[^"]+).*?' #título pattern += '<img.*?src="(?P<scrapedthumbnail>[^"]+)?".*?' #thumb @@ -541,7 +576,8 @@ def listado_busqueda(item): matches_alt = re.compile(pattern, re.DOTALL).findall(data) if not matches_alt and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data_alt: #error logger.error("ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / DATA: " + data_alt) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web. Reportar el error con el log')) + item, itemlist = generictools.post_tmdb_listado(item, itemlist) #Pintamos los datos de fail-over, si los hay return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #Ahora se hace una simulación para saber cuantas líneas podemos albergar en este Itemlist. @@ -830,14 +866,14 @@ def listado_busqueda(item): url_tvshow = host + calidad_mps + real_title_mps + "/" #... otras no. A probar... #Leemos la página, a ver si es una página de episodios - data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_id).data) + data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_id, timeout=timeout).data) data_serie = unicode(data_serie, "iso-8859-1", errors="replace").encode("utf-8") data_serie = data_serie.replace("chapters", "buscar-list") pattern = '<ul class="%s">(.*?)</ul>' % "buscar-list" #Patrón de lista de episodios if not scrapertools.find_single_match(data_serie, pattern) and serieid: #no es válida la página, #intentarlo con la otra url - data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_tvshow).data) + data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_tvshow, timeout=timeout).data) data_serie = unicode(data_serie, "iso-8859-1", errors="replace").encode("utf-8") data_serie = data_serie.replace("chapters", "buscar-list") @@ -876,9 +912,10 @@ def findvideos(item): from core import channeltools logger.info() - #Renombramos el canal al nombre de clone elegido - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() + #Renombramos el canal al nombre de clone elegido. Actualizados URL + host = scrapertools.find_single_match(item.url, '(http.?\:\/\/(?:www.)?\w+\.\w+\/)') + #item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/') + item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() itemlist = [] @@ -987,8 +1024,9 @@ def findvideos(item): excluir_enlaces_descargas = [] #Lista vacía de servidores excluidos en Descargar # Descarga la página + data = '' try: - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) except: pass @@ -1001,7 +1039,7 @@ def findvideos(item): item, data = generictools.fail_over_newpct1(item, patron) if not data: #Si no ha logrado encontrar nada, salimos itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: FINDVIDEOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: FINDVIDEOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") @@ -1029,7 +1067,7 @@ def findvideos(item): item_local.url = scrapertools.find_single_match(data, patron) if not item_local.url: #error logger.error("ERROR 02: FINDVIDEOS: El archivo Torrent no existe o ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: FINDVIDEOS: El archivo Torrent no existe o ha cambiado la estructura de la Web. Verificar en la Web y reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: FINDVIDEOS: El archivo Torrent no existe o ha cambiado la estructura de la Web. Verificar en la Web y reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos item_local.url = item_local.url.replace(" ", "%20") #sustituimos espacios por %20, por si acaso #logger.debug("Patron: " + patron + " url: " + item_local.url) @@ -1054,6 +1092,8 @@ def findvideos(item): #logger.debug(item_local) # VER vídeos, descargar vídeos un link, o múltiples links + data = scrapertools.find_single_match(data, '<div id="tab1" class="tab_content"(.*?<\/ul>(?:<div.*?>)?<\/div><\/div><\/div>)') #Seleccionar el bloque para evitar duplicados + host_dom = host.replace("https://", "").replace("http://", "").replace("www.", "") data = data.replace("http://tumejorserie.com/descargar/url_encript.php?link=", "(") data = re.sub(r'javascript:;" onClick="popup\("http:\/\/(?:www.)?' + host_dom + '\w{1,9}\/library\/include\/ajax\/get_modallinks.php\?links=', "", data) @@ -1066,7 +1106,7 @@ def findvideos(item): enlaces_ver = re.compile(patron, re.DOTALL).findall(data) enlaces_descargar = enlaces_ver #logger.debug(enlaces_ver) - + #Recorre todos los links de VER, si está permitido cnt_enl_ver = 1 cnt_enl_verif = 1 @@ -1100,7 +1140,7 @@ def findvideos(item): if verificar_enlaces_veronline != 0: #Se quiere verificar si el link está activo? if cnt_enl_verif <= verificar_enlaces_veronline or verificar_enlaces_veronline == -1: #contador? #Llama a la subfunción de check_list_links(itemlist) para cada link de servidor - item_local.alive = servertools.check_video_link(enlace, servidor) #activo el link ? + item_local.alive = servertools.check_video_link(enlace, servidor, timeout=timeout) #activo el link ? if verificar_enlaces_veronline_validos: #Los links tienen que ser válidos para contarlos? if item_local.alive == "Ok": #Sí cnt_enl_verif += 1 #Movemos los contadores @@ -1190,7 +1230,7 @@ def findvideos(item): if verificar_enlaces_descargas != 0: #Se quiere verificar si el link está activo? if cnt_enl_verif <= verificar_enlaces_descargas or verificar_enlaces_descargas == -1: #contador? #Llama a la subfunción de check_list_links(itemlist) para primer link de servidor - item_local.alive = servertools.check_video_link(enlace, servidor) #activo el link ? + item_local.alive = servertools.check_video_link(enlace, servidor, timeout=timeout) #activo el link ? if verificar_enlaces_descargas_validos: #Los links tienen que ser válidos para contarlos? if item_local.alive == "Ok": #Sí cnt_enl_verif += 1 #Movemos los contadores @@ -1232,9 +1272,10 @@ def findvideos(item): def episodios(item): logger.info() - #Renombramos el canal al nombre de clone elegido - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() + #Renombramos el canal al nombre de clone elegido. Actualizados URL + host = scrapertools.find_single_match(item.url, '(http.?\:\/\/(?:www.)?\w+\.\w+\/)') + #item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/') + item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() itemlist = [] @@ -1255,7 +1296,7 @@ def episodios(item): data = '' try: - data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, timeout=timeout).data) patron = '<ul class="%s">(.*?)</ul>' % "buscar-list" # item.pattern data_alt = '' if data: data_alt = scrapertools.get_match(data, patron) @@ -1276,7 +1317,7 @@ def episodios(item): if not data: #No se ha encontrado ningún canal activo para este vídeo itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: EPISODIOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: EPISODIOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) return itemlist #Busca y pre-carga todas las páginas de episodios que componen las serie, para obtener la url de cada página @@ -1312,7 +1353,7 @@ def episodios(item): break try: if not data: - data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(page).data) + data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(page, timeout=timeout).data) data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") data = data.replace("chapters", "buscar-list") #Compatibilidad con mispelisy.series.com pattern = '<ul class="%s">(.*?)</ul>' % "buscar-list" # item.pattern @@ -1321,7 +1362,7 @@ def episodios(item): raise except: logger.error("ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / " + str(list_pages) + " / DATA: " + str(data)) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos if "pelisyseries.com" in item.url: @@ -1331,7 +1372,7 @@ def episodios(item): matches = re.compile(pattern, re.DOTALL).findall(data) if not matches: #error logger.error("ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #logger.debug("patron: " + pattern) @@ -1399,7 +1440,7 @@ def episodios(item): match = [m.groupdict() for m in r.finditer(info)][0] if not match: #error logger.error("ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / DATA: " + info) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos if match['season'] is None: match['season'] = season #Si no se encuentran valores, pero poner lo básico @@ -1449,8 +1490,6 @@ def episodios(item): if item_local.active: del item_local.active - if item_local.category: - del item_local.category if item_local.infoLabels['title']: del item_local.infoLabels['title'] item_local.context = "['buscar_trailer']" @@ -1467,6 +1506,8 @@ def episodios(item): del item_local.update_last if item_local.update_next: del item_local.update_next + if item_local.channel_host: + del item_local.channel_host itemlist.append(item_local.clone()) @@ -1501,9 +1542,6 @@ def actualizar_titulos(item): def search(item, texto): logger.info("search:" + texto) # texto = texto.replace(" ", "+") - - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() try: item.post = "q=%s" % texto diff --git a/plugin.video.alfa/channels/mispelisyseries.py b/plugin.video.alfa/channels/mispelisyseries.py index 0d207a6f..8811b706 100644 --- a/plugin.video.alfa/channels/mispelisyseries.py +++ b/plugin.video.alfa/channels/mispelisyseries.py @@ -12,40 +12,53 @@ from core import httptools from core import scrapertools from core import servertools from core.item import Item -from platformcode import config, logger +from platformcode import config, logger, platformtools from core import tmdb from lib import generictools -host = 'http://mispelisyseries.com/' +channel_py = 'newpct1' #Código para permitir usar un único canal para todas las webs clones de NewPct1 -clone_list = config.get_setting('clonenewpct1_channels_list', "torrentrapid") #Carga lista de clones -clone_list = ast.literal_eval(clone_list) #la convierte a lista de tuplas +clone_list = config.get_setting('clonenewpct1_channels_list', channel_py) #Carga lista de clones +clone_list = ast.literal_eval(clone_list) #la convierte en array host_index = 0 -host_index = config.get_setting('clonenewpct1_channel_default', "torrentrapid") #Clone por defecto +host_index = config.get_setting('clonenewpct1_channel_default', channel_py) #Clone por defecto i = 0 for active_clone, channel_clone, host_clone, contentType_clone, info_clone in clone_list: if i == host_index: - #channel_clone_name = channel_clone #ACTIVAR CUANDO SE PASE A NEWPCT1 - #host = 'http://%s/' % host_clone #ACTIVAR CUANDO SE PASE A NEWPCT1 - i += 1 + channel_clone_name = channel_clone #Nombre del Canal elegido + host = host_clone #URL del Canal elegido + break + i += 1 +item = Item() +item.channel_host = host +if item.channel != channel_py: + item.channel = channel_py +item.category = channel_clone_name.capitalize() #Carga de opciones del canal -item = Item() -if not item.channel: - item.channel = scrapertools.find_single_match(host, r'(\w+)\.com\/') -channel_clone_name = scrapertools.find_single_match(host, r'(\w+)\.com\/') #QUITAR CUANDO SE PASE A NEWPCT1 -__modo_grafico__ = config.get_setting('modo_grafico', item.channel) -modo_ultima_temp = config.get_setting('seleccionar_ult_temporadda_activa', item.channel) +__modo_grafico__ = config.get_setting('modo_grafico', channel_py) #TMDB? +modo_ultima_temp = config.get_setting('seleccionar_ult_temporadda_activa', channel_py) #Actualización sólo últ. Temporada? +timeout = config.get_setting('clonenewpct1_timeout_downloadpage', channel_py) #Timeout downloadpage +if timeout == 0: timeout = None + +platformtools.dialog_ok("NewPct1, ¡¡¡he vuelto como canal VIRTUAL!!!", "Hemos centralizado la gestión de los clones de NewPct1 en el canal virtual NewPct1. Los clones desaparecerán en breve.", "Para más información lee el tutorial: https://alfa-addon.com /threads/newpct1-implantando-alta-disponibilidad.1200/") + +#Vayamos a la siguiente acción en el canal Newpct1 +from platformcode import launcher +channel_clone_name = "mispelisyseries" #Nombre del Canal elegido +host = "http://mispelisyseries.com/" +item.category = channel_clone_name.capitalize() +item.action = "mainlist" +item.channel_host = host +launcher.run(item) def mainlist(item): logger.info() + if item.channel != channel_py: + return - #Renombramos el canal al nombre de clone elegido - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() - itemlist = [] thumb_pelis = get_thumb("channels_movie.png") @@ -58,20 +71,20 @@ def mainlist(item): thumb_settings = get_thumb("setting_0.png") itemlist.append(Item(channel=item.channel, action="submenu", title="Películas", url=host, - extra="peliculas", thumbnail=thumb_pelis )) + extra="peliculas", thumbnail=thumb_pelis, category=item.category)) itemlist.append(Item(channel=item.channel, action="submenu", title="Series", url=host, extra="series", - thumbnail=thumb_series)) + thumbnail=thumb_series, category=item.category)) itemlist.append(Item(channel=item.channel, action="submenu", title="Documentales", url=host, extra="varios", - thumbnail=thumb_docus)) + thumbnail=thumb_docus, category=item.category)) itemlist.append( - Item(channel=item.channel, action="search", title="Buscar", url=host + "buscar", thumbnail=thumb_buscar)) + Item(channel=item.channel, action="search", title="Buscar", url=host + "buscar", thumbnail=thumb_buscar, category=item.category)) itemlist.append( - Item(channel=item.channel, action="", title="[COLOR yellow]Configuración de Servidores:[/COLOR]", url="", thumbnail=thumb_settings)) + Item(channel=item.channel, action="", title="[COLOR yellow]Configuración de Servidores:[/COLOR]", url="", thumbnail=thumb_settings, category=item.category)) itemlist.append( - Item(channel=item.channel, action="settingCanal", title="Servidores para Ver Online y Descargas", url="", thumbnail=thumb_settings)) + Item(channel=item.channel, action="settingCanal", title="Servidores para Ver Online y Descargas", url="", thumbnail=thumb_settings, category=item.category)) return itemlist @@ -85,68 +98,60 @@ def submenu(item): logger.info() itemlist = [] + data = '' try: - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) except: pass - host_alt = host - host_dom = host.replace("https://", "").replace("http://", "").replace("www.", "") - patron = '<li><a href="http://(?:www.)?' + host_dom + item.extra + '/">.*?<ul.*?>(.*?)</ul>' + patron = '<li><a\s?class="[^"]+"\s?href="http:[^"]+"><i\s?class=.*><\/i>.*Inicio<\/a><\/li>(.+)<\/ul>\s?<\/nav>' #Verificamos si se ha cargado una página, y si además tiene la estructura correcta if not data or not scrapertools.find_single_match(data, patron): - logger.error("ERROR 01: SUBMENU: La Web no responde o ha cambiado de URL: " + item.url) + logger.error("ERROR 01: SUBMENU: La Web no responde o ha cambiado de URL: " + item.url + data) #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú item, data = generictools.fail_over_newpct1(item, patron) if not data: #Si no ha logrado encontrar nada, salimos - itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: SUBMENU: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos elif item.channel_alt: #Si ha habido fail-over, lo comento - itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR] [ALT ] en uso')) - itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel_alt.capitalize() + '[/COLOR] caído')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR] [ALT ] en uso')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel_alt.capitalize() + '[/COLOR] inaccesible')) - host_alt = host.replace(item.channel_alt, item.channel) - del item.channel_alt if item.url_alt: del item.url_alt + del item.channel_alt - #data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") - #data = data.replace("'", '"').replace('/series"', '/series/"') #Compatibilidad con mispelisy.series.com - - host_dom = host_alt.replace("https://", "").replace("http://", "").replace("www.", "") - patron = '<li><a href="http://(?:www.)?' + host_dom + item.extra + '/">.*?<ul.*?>(.*?)</ul>' - if "pelisyseries.com" in host_alt and item.extra == "varios": #compatibilidad con mispelisy.series.com - data = '<a href="' + host_alt + 'varios/" title="Documentales"><i class="icon-rocket"></i> Documentales</a>' + data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") + data = data.replace("'", '"').replace('/series"', '/series/"') #Compatibilidad con mispelisy.series.com + if "pelisyseries.com" in item.channel_host and item.extra == "varios": #compatibilidad con mispelisy.series.com + data = '<li><a href="' + item.channel_host + 'varios/" title="Documentales">Documentales</a></li>' else: - if data: - data = scrapertools.get_match(data, patron) - if not data: - logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) - return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos - else: - return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + data = scrapertools.get_match(data, patron) #Seleccionamos el trozo que nos interesa + if not data: + logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos - patron = '<.*?href="([^"]+)".*?>([^>]+)</a>' + patron = '<li><a.*?href="([^"]+)"\s?.itle="[^"]+"\s?>([^>]+)<\/a><\/li>' matches = re.compile(patron, re.DOTALL).findall(data) + if not matches: logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos for scrapedurl, scrapedtitle in matches: title = scrapedtitle.strip() - url = scrapedurl - itemlist.append(Item(channel=item.channel, action="listado", title=title, url=url, extra=item.extra)) - itemlist.append( - Item(channel=item.channel, action="alfabeto", title=title + " [A-Z]", url=url, extra=item.extra)) + #Preguntamos por las entradas que no corresponden al "extra" + if item.extra in scrapedtitle.lower() or (item.extra == "peliculas" and ("cine" in scrapedurl or "anime" in scrapedurl)) or (item.extra == "varios" and ("documentales" in scrapedurl or "varios" in scrapedurl)): + itemlist.append(item.clone(action="listado", title=title, url=scrapedurl)) + itemlist.append(item.clone(action="alfabeto", title=title + " [A-Z]", url=scrapedurl)) if item.extra == "peliculas": - itemlist.append(Item(channel=item.channel, action="listado", title="Películas 4K", url=host_alt + "peliculas-hd/4kultrahd/", extra=item.extra)) - itemlist.append( - Item(channel=item.channel, action="alfabeto", title="Películas 4K" + " [A-Z]", url=host_alt + "peliculas-hd/4kultrahd/", extra=item.extra)) + itemlist.append(item.clone(action="listado", title="Películas 4K", url=item.channel_host + "peliculas-hd/4kultrahd/")) + itemlist.append(item.clone(action="alfabeto", title="Películas 4K" + " [A-Z]", url=item.channel_host + "peliculas-hd/4kultrahd/")) return itemlist @@ -155,28 +160,41 @@ def alfabeto(item): logger.info() itemlist = [] - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = '' + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") patron = '<ul class="alfabeto">(.*?)</ul>' - if data: - data = scrapertools.get_match(data, patron) - else: - return itemlist + if not data or not scrapertools.find_single_match(data, patron): + logger.error("ERROR 01: ALFABETO: La Web no responde o ha cambiado de URL: " + item.url + data) + #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú + item, data = generictools.fail_over_newpct1(item, patron) + + if not data: #Si no ha logrado encontrar nada, salimos + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: ALFABETO: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + elif item.channel_alt: #Si ha habido fail-over, lo comento + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR] [ALT ] en uso')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel_alt.capitalize() + '[/COLOR] inaccesible')) + + if item.url_alt: del item.url_alt + del item.channel_alt + + data = scrapertools.get_match(data, patron) patron = '<a href="([^"]+)"[^>]+>([^>]+)</a>' matches = re.compile(patron, re.DOTALL).findall(data) if not matches: - logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) + logger.error("ERROR 02: ALFABETO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: ALFABETO: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos for scrapedurl, scrapedtitle in matches: title = scrapedtitle.upper() - url = scrapedurl - itemlist.append(Item(channel=item.channel, action="listado", title=title, url=url, extra=item.extra)) + itemlist.append(item.clone(action="listado", title=title, url=scrapedurl)) return itemlist @@ -191,11 +209,21 @@ def listado(item): if item.totalItems: del item.totalItems + data = '' try: - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) except: + pass + + patron = '<ul class="' + clase + '">(.*?)</ul>' #seleccionamos el bloque que nos interesa + if not data or (not scrapertools.find_single_match(data, patron) and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data): logger.error("ERROR 01: LISTADO: La Web no responde o ha cambiado de URL: " + item.url + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: LISTADO:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú + item, data = generictools.fail_over_newpct1(item, patron) + + if not data: #Si no ha logrado encontrar nada, salimos + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: LISTADO: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #Establecemos los valores básicos en función del tipo de contenido @@ -218,7 +246,7 @@ def listado(item): fichas = scrapertools.get_match(data, patron) if not fichas and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data: #error logger.error("ERROR 02: LISTADO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos elif '<h3><strong>( 0 ) Resultados encontrados </strong>' in data: #no hay vídeos return itemlist @@ -235,7 +263,7 @@ def listado(item): matches = re.compile(patron, re.DOTALL).findall(fichas) if not matches: #error logger.error("ERROR 02: LISTADO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + fichas) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #logger.debug("MATCHES: " + str(len(matches))) @@ -460,13 +488,21 @@ def listado(item): def listado_busqueda(item): logger.info() - - host = 'http://%s/' % scrapertools.find_single_match(item.url, '(\w+\.com)\/') + + #Renombramos el canal al nombre de clone elegido. Actualizados URL + host = scrapertools.find_single_match(item.url, '(http.?\:\/\/(?:www.)?\w+\.\w+\/)') + #item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/') + if item.category and item.category != "newest": + item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() itemlist = [] cnt_tot = 40 # Poner el num. máximo de items por página. Dejamos que la web lo controle cnt_title = 0 # Contador de líneas insertadas en Itemlist cnt_pag = 0 # Contador de líneas leídas de Matches + timeout_search = 5 # Timeout un poco más largo para las búsquedas + if timeout > 5: + timeout_search = timeout # Timeout un poco más largo para las búsquedas + data = '' if item.cnt_pag: cnt_pag = item.cnt_pag # Se guarda en la lista de páginas anteriores en Item @@ -493,21 +529,21 @@ def listado_busqueda(item): #Máximo num. de líneas permitidas por TMDB. Máx de 5 páginas por Itemlist para no degradar el rendimiento while cnt_title <= cnt_tot and cnt_next < 5: - pattern = '<ul class="%s">(.*?)</ul>' % item.pattern #seleccionamos el bloque que nos interesa try: - data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, post=item.post).data) + data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, post=item.post, timeout=timeout_search).data) except: pass - cnt_next += 1 - if not data or not scrapertools.find_single_match(data, pattern): + cnt_next += 1 + pattern = '<ul class="%s">(.*?)</ul>' % item.pattern #seleccionamos el bloque que nos interesa + if not data or (not scrapertools.find_single_match(data, pattern) and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data): logger.error("ERROR 01: LISTADO_BUSQUEDA: La Web no responde o ha cambiado de URL: " + item.url + item.post + " / DATA: " + data) #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú item, data = generictools.fail_over_newpct1(item, pattern) if not data: #Si no ha logrado encontrar nada, salimos itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: LISTADO_BUSQUEDA:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: LISTADO_BUSQUEDA:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos elif item.channel_alt: #Si ha habido fail-over, lo comento host = host.replace(item.channel_alt, item.channel) @@ -531,7 +567,6 @@ def listado_busqueda(item): pattern = '<ul class="%s">(.*?)</ul>' % item.pattern #seleccionamos el bloque que nos interesa data_alt = data data = scrapertools.get_match(data, pattern) - #pattern = '<li[^>]*><a href="(?P<url>[^"]+).*?<img.*?src="(?P<thumb>[^"]+)?".*?<h2.*?>(?P<title>.*?)?<\/h2>' pattern = '<li[^>]*><a href="(?P<scrapedurl>[^"]+).*?' #url pattern += 'title="(?P<scrapedtitle>[^"]+).*?' #título pattern += '<img.*?src="(?P<scrapedthumbnail>[^"]+)?".*?' #thumb @@ -541,7 +576,8 @@ def listado_busqueda(item): matches_alt = re.compile(pattern, re.DOTALL).findall(data) if not matches_alt and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data_alt: #error logger.error("ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / DATA: " + data_alt) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web. Reportar el error con el log')) + item, itemlist = generictools.post_tmdb_listado(item, itemlist) #Pintamos los datos de fail-over, si los hay return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #Ahora se hace una simulación para saber cuantas líneas podemos albergar en este Itemlist. @@ -830,14 +866,14 @@ def listado_busqueda(item): url_tvshow = host + calidad_mps + real_title_mps + "/" #... otras no. A probar... #Leemos la página, a ver si es una página de episodios - data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_id).data) + data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_id, timeout=timeout).data) data_serie = unicode(data_serie, "iso-8859-1", errors="replace").encode("utf-8") data_serie = data_serie.replace("chapters", "buscar-list") pattern = '<ul class="%s">(.*?)</ul>' % "buscar-list" #Patrón de lista de episodios if not scrapertools.find_single_match(data_serie, pattern) and serieid: #no es válida la página, #intentarlo con la otra url - data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_tvshow).data) + data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_tvshow, timeout=timeout).data) data_serie = unicode(data_serie, "iso-8859-1", errors="replace").encode("utf-8") data_serie = data_serie.replace("chapters", "buscar-list") @@ -876,9 +912,10 @@ def findvideos(item): from core import channeltools logger.info() - #Renombramos el canal al nombre de clone elegido - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() + #Renombramos el canal al nombre de clone elegido. Actualizados URL + host = scrapertools.find_single_match(item.url, '(http.?\:\/\/(?:www.)?\w+\.\w+\/)') + #item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/') + item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() itemlist = [] @@ -987,8 +1024,9 @@ def findvideos(item): excluir_enlaces_descargas = [] #Lista vacía de servidores excluidos en Descargar # Descarga la página + data = '' try: - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) except: pass @@ -1001,7 +1039,7 @@ def findvideos(item): item, data = generictools.fail_over_newpct1(item, patron) if not data: #Si no ha logrado encontrar nada, salimos itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: FINDVIDEOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: FINDVIDEOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") @@ -1029,7 +1067,7 @@ def findvideos(item): item_local.url = scrapertools.find_single_match(data, patron) if not item_local.url: #error logger.error("ERROR 02: FINDVIDEOS: El archivo Torrent no existe o ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: FINDVIDEOS: El archivo Torrent no existe o ha cambiado la estructura de la Web. Verificar en la Web y reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: FINDVIDEOS: El archivo Torrent no existe o ha cambiado la estructura de la Web. Verificar en la Web y reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos item_local.url = item_local.url.replace(" ", "%20") #sustituimos espacios por %20, por si acaso #logger.debug("Patron: " + patron + " url: " + item_local.url) @@ -1054,6 +1092,8 @@ def findvideos(item): #logger.debug(item_local) # VER vídeos, descargar vídeos un link, o múltiples links + data = scrapertools.find_single_match(data, '<div id="tab1" class="tab_content"(.*?<\/ul>(?:<div.*?>)?<\/div><\/div><\/div>)') #Seleccionar el bloque para evitar duplicados + host_dom = host.replace("https://", "").replace("http://", "").replace("www.", "") data = data.replace("http://tumejorserie.com/descargar/url_encript.php?link=", "(") data = re.sub(r'javascript:;" onClick="popup\("http:\/\/(?:www.)?' + host_dom + '\w{1,9}\/library\/include\/ajax\/get_modallinks.php\?links=', "", data) @@ -1066,7 +1106,7 @@ def findvideos(item): enlaces_ver = re.compile(patron, re.DOTALL).findall(data) enlaces_descargar = enlaces_ver #logger.debug(enlaces_ver) - + #Recorre todos los links de VER, si está permitido cnt_enl_ver = 1 cnt_enl_verif = 1 @@ -1100,7 +1140,7 @@ def findvideos(item): if verificar_enlaces_veronline != 0: #Se quiere verificar si el link está activo? if cnt_enl_verif <= verificar_enlaces_veronline or verificar_enlaces_veronline == -1: #contador? #Llama a la subfunción de check_list_links(itemlist) para cada link de servidor - item_local.alive = servertools.check_video_link(enlace, servidor) #activo el link ? + item_local.alive = servertools.check_video_link(enlace, servidor, timeout=timeout) #activo el link ? if verificar_enlaces_veronline_validos: #Los links tienen que ser válidos para contarlos? if item_local.alive == "Ok": #Sí cnt_enl_verif += 1 #Movemos los contadores @@ -1190,7 +1230,7 @@ def findvideos(item): if verificar_enlaces_descargas != 0: #Se quiere verificar si el link está activo? if cnt_enl_verif <= verificar_enlaces_descargas or verificar_enlaces_descargas == -1: #contador? #Llama a la subfunción de check_list_links(itemlist) para primer link de servidor - item_local.alive = servertools.check_video_link(enlace, servidor) #activo el link ? + item_local.alive = servertools.check_video_link(enlace, servidor, timeout=timeout) #activo el link ? if verificar_enlaces_descargas_validos: #Los links tienen que ser válidos para contarlos? if item_local.alive == "Ok": #Sí cnt_enl_verif += 1 #Movemos los contadores @@ -1232,9 +1272,10 @@ def findvideos(item): def episodios(item): logger.info() - #Renombramos el canal al nombre de clone elegido - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() + #Renombramos el canal al nombre de clone elegido. Actualizados URL + host = scrapertools.find_single_match(item.url, '(http.?\:\/\/(?:www.)?\w+\.\w+\/)') + #item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/') + item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() itemlist = [] @@ -1255,7 +1296,7 @@ def episodios(item): data = '' try: - data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, timeout=timeout).data) patron = '<ul class="%s">(.*?)</ul>' % "buscar-list" # item.pattern data_alt = '' if data: data_alt = scrapertools.get_match(data, patron) @@ -1276,7 +1317,7 @@ def episodios(item): if not data: #No se ha encontrado ningún canal activo para este vídeo itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: EPISODIOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: EPISODIOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) return itemlist #Busca y pre-carga todas las páginas de episodios que componen las serie, para obtener la url de cada página @@ -1312,7 +1353,7 @@ def episodios(item): break try: if not data: - data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(page).data) + data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(page, timeout=timeout).data) data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") data = data.replace("chapters", "buscar-list") #Compatibilidad con mispelisy.series.com pattern = '<ul class="%s">(.*?)</ul>' % "buscar-list" # item.pattern @@ -1321,7 +1362,7 @@ def episodios(item): raise except: logger.error("ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / " + str(list_pages) + " / DATA: " + str(data)) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos if "pelisyseries.com" in item.url: @@ -1331,7 +1372,7 @@ def episodios(item): matches = re.compile(pattern, re.DOTALL).findall(data) if not matches: #error logger.error("ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #logger.debug("patron: " + pattern) @@ -1399,7 +1440,7 @@ def episodios(item): match = [m.groupdict() for m in r.finditer(info)][0] if not match: #error logger.error("ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / DATA: " + info) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos if match['season'] is None: match['season'] = season #Si no se encuentran valores, pero poner lo básico @@ -1449,8 +1490,6 @@ def episodios(item): if item_local.active: del item_local.active - if item_local.category: - del item_local.category if item_local.infoLabels['title']: del item_local.infoLabels['title'] item_local.context = "['buscar_trailer']" @@ -1467,6 +1506,8 @@ def episodios(item): del item_local.update_last if item_local.update_next: del item_local.update_next + if item_local.channel_host: + del item_local.channel_host itemlist.append(item_local.clone()) @@ -1501,9 +1542,6 @@ def actualizar_titulos(item): def search(item, texto): logger.info("search:" + texto) # texto = texto.replace(" ", "+") - - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() try: item.post = "q=%s" % texto diff --git a/plugin.video.alfa/channels/torrentlocura.py b/plugin.video.alfa/channels/torrentlocura.py index 5bfd66a9..04d3c7c7 100755 --- a/plugin.video.alfa/channels/torrentlocura.py +++ b/plugin.video.alfa/channels/torrentlocura.py @@ -12,40 +12,53 @@ from core import httptools from core import scrapertools from core import servertools from core.item import Item -from platformcode import config, logger +from platformcode import config, logger, platformtools from core import tmdb from lib import generictools -host = 'http://torrentlocura.com/' +channel_py = 'newpct1' #Código para permitir usar un único canal para todas las webs clones de NewPct1 -clone_list = config.get_setting('clonenewpct1_channels_list', "torrentrapid") #Carga lista de clones -clone_list = ast.literal_eval(clone_list) #la convierte a lista de tuplas +clone_list = config.get_setting('clonenewpct1_channels_list', channel_py) #Carga lista de clones +clone_list = ast.literal_eval(clone_list) #la convierte en array host_index = 0 -host_index = config.get_setting('clonenewpct1_channel_default', "torrentrapid") #Clone por defecto +host_index = config.get_setting('clonenewpct1_channel_default', channel_py) #Clone por defecto i = 0 for active_clone, channel_clone, host_clone, contentType_clone, info_clone in clone_list: if i == host_index: - #channel_clone_name = channel_clone #ACTIVAR CUANDO SE PASE A NEWPCT1 - #host = 'http://%s/' % host_clone #ACTIVAR CUANDO SE PASE A NEWPCT1 - i += 1 + channel_clone_name = channel_clone #Nombre del Canal elegido + host = host_clone #URL del Canal elegido + break + i += 1 +item = Item() +item.channel_host = host +if item.channel != channel_py: + item.channel = channel_py +item.category = channel_clone_name.capitalize() #Carga de opciones del canal -item = Item() -if not item.channel: - item.channel = scrapertools.find_single_match(host, r'(\w+)\.com\/') -channel_clone_name = scrapertools.find_single_match(host, r'(\w+)\.com\/') #QUITAR CUANDO SE PASE A NEWPCT1 -__modo_grafico__ = config.get_setting('modo_grafico', item.channel) -modo_ultima_temp = config.get_setting('seleccionar_ult_temporadda_activa', item.channel) +__modo_grafico__ = config.get_setting('modo_grafico', channel_py) #TMDB? +modo_ultima_temp = config.get_setting('seleccionar_ult_temporadda_activa', channel_py) #Actualización sólo últ. Temporada? +timeout = config.get_setting('clonenewpct1_timeout_downloadpage', channel_py) #Timeout downloadpage +if timeout == 0: timeout = None + +platformtools.dialog_ok("NewPct1, ¡¡¡he vuelto como canal VIRTUAL!!!", "Hemos centralizado la gestión de los clones de NewPct1 en el canal virtual NewPct1. Los clones desaparecerán en breve.", "Para más información lee el tutorial: https://alfa-addon.com /threads/newpct1-implantando-alta-disponibilidad.1200/") + +#Vayamos a la siguiente acción en el canal Newpct1 +from platformcode import launcher +channel_clone_name = "torrentlocura" #Nombre del Canal elegido +host = "http://torrentlocura.com/" +item.category = channel_clone_name.capitalize() +item.action = "mainlist" +item.channel_host = host +launcher.run(item) def mainlist(item): logger.info() + if item.channel != channel_py: + return - #Renombramos el canal al nombre de clone elegido - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() - itemlist = [] thumb_pelis = get_thumb("channels_movie.png") @@ -58,20 +71,20 @@ def mainlist(item): thumb_settings = get_thumb("setting_0.png") itemlist.append(Item(channel=item.channel, action="submenu", title="Películas", url=host, - extra="peliculas", thumbnail=thumb_pelis )) + extra="peliculas", thumbnail=thumb_pelis, category=item.category)) itemlist.append(Item(channel=item.channel, action="submenu", title="Series", url=host, extra="series", - thumbnail=thumb_series)) + thumbnail=thumb_series, category=item.category)) itemlist.append(Item(channel=item.channel, action="submenu", title="Documentales", url=host, extra="varios", - thumbnail=thumb_docus)) + thumbnail=thumb_docus, category=item.category)) itemlist.append( - Item(channel=item.channel, action="search", title="Buscar", url=host + "buscar", thumbnail=thumb_buscar)) + Item(channel=item.channel, action="search", title="Buscar", url=host + "buscar", thumbnail=thumb_buscar, category=item.category)) itemlist.append( - Item(channel=item.channel, action="", title="[COLOR yellow]Configuración de Servidores:[/COLOR]", url="", thumbnail=thumb_settings)) + Item(channel=item.channel, action="", title="[COLOR yellow]Configuración de Servidores:[/COLOR]", url="", thumbnail=thumb_settings, category=item.category)) itemlist.append( - Item(channel=item.channel, action="settingCanal", title="Servidores para Ver Online y Descargas", url="", thumbnail=thumb_settings)) + Item(channel=item.channel, action="settingCanal", title="Servidores para Ver Online y Descargas", url="", thumbnail=thumb_settings, category=item.category)) return itemlist @@ -85,68 +98,60 @@ def submenu(item): logger.info() itemlist = [] + data = '' try: - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) except: pass - host_alt = host - host_dom = host.replace("https://", "").replace("http://", "").replace("www.", "") - patron = '<li><a href="http://(?:www.)?' + host_dom + item.extra + '/">.*?<ul.*?>(.*?)</ul>' + patron = '<li><a\s?class="[^"]+"\s?href="http:[^"]+"><i\s?class=.*><\/i>.*Inicio<\/a><\/li>(.+)<\/ul>\s?<\/nav>' #Verificamos si se ha cargado una página, y si además tiene la estructura correcta if not data or not scrapertools.find_single_match(data, patron): - logger.error("ERROR 01: SUBMENU: La Web no responde o ha cambiado de URL: " + item.url) + logger.error("ERROR 01: SUBMENU: La Web no responde o ha cambiado de URL: " + item.url + data) #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú item, data = generictools.fail_over_newpct1(item, patron) if not data: #Si no ha logrado encontrar nada, salimos - itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: SUBMENU: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos elif item.channel_alt: #Si ha habido fail-over, lo comento - itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR] [ALT ] en uso')) - itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel_alt.capitalize() + '[/COLOR] caído')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR] [ALT ] en uso')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel_alt.capitalize() + '[/COLOR] inaccesible')) - host_alt = host.replace(item.channel_alt, item.channel) - del item.channel_alt if item.url_alt: del item.url_alt + del item.channel_alt - #data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") - #data = data.replace("'", '"').replace('/series"', '/series/"') #Compatibilidad con mispelisy.series.com - - host_dom = host_alt.replace("https://", "").replace("http://", "").replace("www.", "") - patron = '<li><a href="http://(?:www.)?' + host_dom + item.extra + '/">.*?<ul.*?>(.*?)</ul>' - if "pelisyseries.com" in host_alt and item.extra == "varios": #compatibilidad con mispelisy.series.com - data = '<a href="' + host_alt + 'varios/" title="Documentales"><i class="icon-rocket"></i> Documentales</a>' + data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") + data = data.replace("'", '"').replace('/series"', '/series/"') #Compatibilidad con mispelisy.series.com + if "pelisyseries.com" in item.channel_host and item.extra == "varios": #compatibilidad con mispelisy.series.com + data = '<li><a href="' + item.channel_host + 'varios/" title="Documentales">Documentales</a></li>' else: - if data: - data = scrapertools.get_match(data, patron) - if not data: - logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) - return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos - else: - return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + data = scrapertools.get_match(data, patron) #Seleccionamos el trozo que nos interesa + if not data: + logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos - patron = '<.*?href="([^"]+)".*?>([^>]+)</a>' + patron = '<li><a.*?href="([^"]+)"\s?.itle="[^"]+"\s?>([^>]+)<\/a><\/li>' matches = re.compile(patron, re.DOTALL).findall(data) + if not matches: logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos for scrapedurl, scrapedtitle in matches: title = scrapedtitle.strip() - url = scrapedurl - itemlist.append(Item(channel=item.channel, action="listado", title=title, url=url, extra=item.extra)) - itemlist.append( - Item(channel=item.channel, action="alfabeto", title=title + " [A-Z]", url=url, extra=item.extra)) + #Preguntamos por las entradas que no corresponden al "extra" + if item.extra in scrapedtitle.lower() or (item.extra == "peliculas" and ("cine" in scrapedurl or "anime" in scrapedurl)) or (item.extra == "varios" and ("documentales" in scrapedurl or "varios" in scrapedurl)): + itemlist.append(item.clone(action="listado", title=title, url=scrapedurl)) + itemlist.append(item.clone(action="alfabeto", title=title + " [A-Z]", url=scrapedurl)) if item.extra == "peliculas": - itemlist.append(Item(channel=item.channel, action="listado", title="Películas 4K", url=host_alt + "peliculas-hd/4kultrahd/", extra=item.extra)) - itemlist.append( - Item(channel=item.channel, action="alfabeto", title="Películas 4K" + " [A-Z]", url=host_alt + "peliculas-hd/4kultrahd/", extra=item.extra)) + itemlist.append(item.clone(action="listado", title="Películas 4K", url=item.channel_host + "peliculas-hd/4kultrahd/")) + itemlist.append(item.clone(action="alfabeto", title="Películas 4K" + " [A-Z]", url=item.channel_host + "peliculas-hd/4kultrahd/")) return itemlist @@ -155,28 +160,41 @@ def alfabeto(item): logger.info() itemlist = [] - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = '' + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") patron = '<ul class="alfabeto">(.*?)</ul>' - if data: - data = scrapertools.get_match(data, patron) - else: - return itemlist + if not data or not scrapertools.find_single_match(data, patron): + logger.error("ERROR 01: ALFABETO: La Web no responde o ha cambiado de URL: " + item.url + data) + #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú + item, data = generictools.fail_over_newpct1(item, patron) + + if not data: #Si no ha logrado encontrar nada, salimos + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: ALFABETO: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + elif item.channel_alt: #Si ha habido fail-over, lo comento + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR] [ALT ] en uso')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel_alt.capitalize() + '[/COLOR] inaccesible')) + + if item.url_alt: del item.url_alt + del item.channel_alt + + data = scrapertools.get_match(data, patron) patron = '<a href="([^"]+)"[^>]+>([^>]+)</a>' matches = re.compile(patron, re.DOTALL).findall(data) if not matches: - logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) + logger.error("ERROR 02: ALFABETO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: ALFABETO: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos for scrapedurl, scrapedtitle in matches: title = scrapedtitle.upper() - url = scrapedurl - itemlist.append(Item(channel=item.channel, action="listado", title=title, url=url, extra=item.extra)) + itemlist.append(item.clone(action="listado", title=title, url=scrapedurl)) return itemlist @@ -191,11 +209,21 @@ def listado(item): if item.totalItems: del item.totalItems + data = '' try: - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) except: + pass + + patron = '<ul class="' + clase + '">(.*?)</ul>' #seleccionamos el bloque que nos interesa + if not data or (not scrapertools.find_single_match(data, patron) and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data): logger.error("ERROR 01: LISTADO: La Web no responde o ha cambiado de URL: " + item.url + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: LISTADO:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú + item, data = generictools.fail_over_newpct1(item, patron) + + if not data: #Si no ha logrado encontrar nada, salimos + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: LISTADO: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #Establecemos los valores básicos en función del tipo de contenido @@ -218,7 +246,7 @@ def listado(item): fichas = scrapertools.get_match(data, patron) if not fichas and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data: #error logger.error("ERROR 02: LISTADO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos elif '<h3><strong>( 0 ) Resultados encontrados </strong>' in data: #no hay vídeos return itemlist @@ -235,7 +263,7 @@ def listado(item): matches = re.compile(patron, re.DOTALL).findall(fichas) if not matches: #error logger.error("ERROR 02: LISTADO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + fichas) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #logger.debug("MATCHES: " + str(len(matches))) @@ -460,13 +488,21 @@ def listado(item): def listado_busqueda(item): logger.info() - - host = 'http://%s/' % scrapertools.find_single_match(item.url, '(\w+\.com)\/') + + #Renombramos el canal al nombre de clone elegido. Actualizados URL + host = scrapertools.find_single_match(item.url, '(http.?\:\/\/(?:www.)?\w+\.\w+\/)') + #item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/') + if item.category and item.category != "newest": + item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() itemlist = [] cnt_tot = 40 # Poner el num. máximo de items por página. Dejamos que la web lo controle cnt_title = 0 # Contador de líneas insertadas en Itemlist cnt_pag = 0 # Contador de líneas leídas de Matches + timeout_search = 5 # Timeout un poco más largo para las búsquedas + if timeout > 5: + timeout_search = timeout # Timeout un poco más largo para las búsquedas + data = '' if item.cnt_pag: cnt_pag = item.cnt_pag # Se guarda en la lista de páginas anteriores en Item @@ -493,21 +529,21 @@ def listado_busqueda(item): #Máximo num. de líneas permitidas por TMDB. Máx de 5 páginas por Itemlist para no degradar el rendimiento while cnt_title <= cnt_tot and cnt_next < 5: - pattern = '<ul class="%s">(.*?)</ul>' % item.pattern #seleccionamos el bloque que nos interesa try: - data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, post=item.post).data) + data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, post=item.post, timeout=timeout_search).data) except: pass - cnt_next += 1 - if not data or not scrapertools.find_single_match(data, pattern): + cnt_next += 1 + pattern = '<ul class="%s">(.*?)</ul>' % item.pattern #seleccionamos el bloque que nos interesa + if not data or (not scrapertools.find_single_match(data, pattern) and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data): logger.error("ERROR 01: LISTADO_BUSQUEDA: La Web no responde o ha cambiado de URL: " + item.url + item.post + " / DATA: " + data) #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú item, data = generictools.fail_over_newpct1(item, pattern) if not data: #Si no ha logrado encontrar nada, salimos itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: LISTADO_BUSQUEDA:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: LISTADO_BUSQUEDA:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos elif item.channel_alt: #Si ha habido fail-over, lo comento host = host.replace(item.channel_alt, item.channel) @@ -531,7 +567,6 @@ def listado_busqueda(item): pattern = '<ul class="%s">(.*?)</ul>' % item.pattern #seleccionamos el bloque que nos interesa data_alt = data data = scrapertools.get_match(data, pattern) - #pattern = '<li[^>]*><a href="(?P<url>[^"]+).*?<img.*?src="(?P<thumb>[^"]+)?".*?<h2.*?>(?P<title>.*?)?<\/h2>' pattern = '<li[^>]*><a href="(?P<scrapedurl>[^"]+).*?' #url pattern += 'title="(?P<scrapedtitle>[^"]+).*?' #título pattern += '<img.*?src="(?P<scrapedthumbnail>[^"]+)?".*?' #thumb @@ -541,7 +576,8 @@ def listado_busqueda(item): matches_alt = re.compile(pattern, re.DOTALL).findall(data) if not matches_alt and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data_alt: #error logger.error("ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / DATA: " + data_alt) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web. Reportar el error con el log')) + item, itemlist = generictools.post_tmdb_listado(item, itemlist) #Pintamos los datos de fail-over, si los hay return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #Ahora se hace una simulación para saber cuantas líneas podemos albergar en este Itemlist. @@ -830,14 +866,14 @@ def listado_busqueda(item): url_tvshow = host + calidad_mps + real_title_mps + "/" #... otras no. A probar... #Leemos la página, a ver si es una página de episodios - data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_id).data) + data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_id, timeout=timeout).data) data_serie = unicode(data_serie, "iso-8859-1", errors="replace").encode("utf-8") data_serie = data_serie.replace("chapters", "buscar-list") pattern = '<ul class="%s">(.*?)</ul>' % "buscar-list" #Patrón de lista de episodios if not scrapertools.find_single_match(data_serie, pattern) and serieid: #no es válida la página, #intentarlo con la otra url - data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_tvshow).data) + data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_tvshow, timeout=timeout).data) data_serie = unicode(data_serie, "iso-8859-1", errors="replace").encode("utf-8") data_serie = data_serie.replace("chapters", "buscar-list") @@ -876,9 +912,10 @@ def findvideos(item): from core import channeltools logger.info() - #Renombramos el canal al nombre de clone elegido - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() + #Renombramos el canal al nombre de clone elegido. Actualizados URL + host = scrapertools.find_single_match(item.url, '(http.?\:\/\/(?:www.)?\w+\.\w+\/)') + #item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/') + item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() itemlist = [] @@ -987,8 +1024,9 @@ def findvideos(item): excluir_enlaces_descargas = [] #Lista vacía de servidores excluidos en Descargar # Descarga la página + data = '' try: - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) except: pass @@ -1001,7 +1039,7 @@ def findvideos(item): item, data = generictools.fail_over_newpct1(item, patron) if not data: #Si no ha logrado encontrar nada, salimos itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: FINDVIDEOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: FINDVIDEOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") @@ -1029,7 +1067,7 @@ def findvideos(item): item_local.url = scrapertools.find_single_match(data, patron) if not item_local.url: #error logger.error("ERROR 02: FINDVIDEOS: El archivo Torrent no existe o ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: FINDVIDEOS: El archivo Torrent no existe o ha cambiado la estructura de la Web. Verificar en la Web y reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: FINDVIDEOS: El archivo Torrent no existe o ha cambiado la estructura de la Web. Verificar en la Web y reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos item_local.url = item_local.url.replace(" ", "%20") #sustituimos espacios por %20, por si acaso #logger.debug("Patron: " + patron + " url: " + item_local.url) @@ -1054,6 +1092,8 @@ def findvideos(item): #logger.debug(item_local) # VER vídeos, descargar vídeos un link, o múltiples links + data = scrapertools.find_single_match(data, '<div id="tab1" class="tab_content"(.*?<\/ul>(?:<div.*?>)?<\/div><\/div><\/div>)') #Seleccionar el bloque para evitar duplicados + host_dom = host.replace("https://", "").replace("http://", "").replace("www.", "") data = data.replace("http://tumejorserie.com/descargar/url_encript.php?link=", "(") data = re.sub(r'javascript:;" onClick="popup\("http:\/\/(?:www.)?' + host_dom + '\w{1,9}\/library\/include\/ajax\/get_modallinks.php\?links=', "", data) @@ -1066,7 +1106,7 @@ def findvideos(item): enlaces_ver = re.compile(patron, re.DOTALL).findall(data) enlaces_descargar = enlaces_ver #logger.debug(enlaces_ver) - + #Recorre todos los links de VER, si está permitido cnt_enl_ver = 1 cnt_enl_verif = 1 @@ -1100,7 +1140,7 @@ def findvideos(item): if verificar_enlaces_veronline != 0: #Se quiere verificar si el link está activo? if cnt_enl_verif <= verificar_enlaces_veronline or verificar_enlaces_veronline == -1: #contador? #Llama a la subfunción de check_list_links(itemlist) para cada link de servidor - item_local.alive = servertools.check_video_link(enlace, servidor) #activo el link ? + item_local.alive = servertools.check_video_link(enlace, servidor, timeout=timeout) #activo el link ? if verificar_enlaces_veronline_validos: #Los links tienen que ser válidos para contarlos? if item_local.alive == "Ok": #Sí cnt_enl_verif += 1 #Movemos los contadores @@ -1190,7 +1230,7 @@ def findvideos(item): if verificar_enlaces_descargas != 0: #Se quiere verificar si el link está activo? if cnt_enl_verif <= verificar_enlaces_descargas or verificar_enlaces_descargas == -1: #contador? #Llama a la subfunción de check_list_links(itemlist) para primer link de servidor - item_local.alive = servertools.check_video_link(enlace, servidor) #activo el link ? + item_local.alive = servertools.check_video_link(enlace, servidor, timeout=timeout) #activo el link ? if verificar_enlaces_descargas_validos: #Los links tienen que ser válidos para contarlos? if item_local.alive == "Ok": #Sí cnt_enl_verif += 1 #Movemos los contadores @@ -1232,9 +1272,10 @@ def findvideos(item): def episodios(item): logger.info() - #Renombramos el canal al nombre de clone elegido - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() + #Renombramos el canal al nombre de clone elegido. Actualizados URL + host = scrapertools.find_single_match(item.url, '(http.?\:\/\/(?:www.)?\w+\.\w+\/)') + #item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/') + item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() itemlist = [] @@ -1255,7 +1296,7 @@ def episodios(item): data = '' try: - data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, timeout=timeout).data) patron = '<ul class="%s">(.*?)</ul>' % "buscar-list" # item.pattern data_alt = '' if data: data_alt = scrapertools.get_match(data, patron) @@ -1276,7 +1317,7 @@ def episodios(item): if not data: #No se ha encontrado ningún canal activo para este vídeo itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: EPISODIOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: EPISODIOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) return itemlist #Busca y pre-carga todas las páginas de episodios que componen las serie, para obtener la url de cada página @@ -1312,7 +1353,7 @@ def episodios(item): break try: if not data: - data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(page).data) + data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(page, timeout=timeout).data) data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") data = data.replace("chapters", "buscar-list") #Compatibilidad con mispelisy.series.com pattern = '<ul class="%s">(.*?)</ul>' % "buscar-list" # item.pattern @@ -1321,7 +1362,7 @@ def episodios(item): raise except: logger.error("ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / " + str(list_pages) + " / DATA: " + str(data)) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos if "pelisyseries.com" in item.url: @@ -1331,7 +1372,7 @@ def episodios(item): matches = re.compile(pattern, re.DOTALL).findall(data) if not matches: #error logger.error("ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #logger.debug("patron: " + pattern) @@ -1399,7 +1440,7 @@ def episodios(item): match = [m.groupdict() for m in r.finditer(info)][0] if not match: #error logger.error("ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / DATA: " + info) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos if match['season'] is None: match['season'] = season #Si no se encuentran valores, pero poner lo básico @@ -1449,8 +1490,6 @@ def episodios(item): if item_local.active: del item_local.active - if item_local.category: - del item_local.category if item_local.infoLabels['title']: del item_local.infoLabels['title'] item_local.context = "['buscar_trailer']" @@ -1467,6 +1506,8 @@ def episodios(item): del item_local.update_last if item_local.update_next: del item_local.update_next + if item_local.channel_host: + del item_local.channel_host itemlist.append(item_local.clone()) @@ -1501,9 +1542,6 @@ def actualizar_titulos(item): def search(item, texto): logger.info("search:" + texto) # texto = texto.replace(" ", "+") - - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() try: item.post = "q=%s" % texto diff --git a/plugin.video.alfa/channels/torrentrapid.json b/plugin.video.alfa/channels/torrentrapid.json index f9106274..323d6468 100644 --- a/plugin.video.alfa/channels/torrentrapid.json +++ b/plugin.video.alfa/channels/torrentrapid.json @@ -53,7 +53,7 @@ "id": "clonenewpct1_channels_list", "type": "text", "label": "Lista de clones de NewPct1 y orden de uso", - "default": "('1', 'torrentrapid', 'torrentrapid.com', 'movie, tvshow, season, episode', ''), ('1', 'torrentlocura', 'torrentlocura.com', 'movie, tvshow, season, episode', ''), ('1', 'tumejortorrent', 'tumejortorrent.com', 'movie, tvshow, season, episode', ''), ('1', 'tvsinpagar', 'www.tvsinpagar.com', 'tvshow, season, episode', ''), ('1', 'descargas2020', 'descargas2020.com', 'movie, tvshow, season, episode', ''), ('1', 'mispelisyseries', 'mispelisyseries.com', 'movie, tvshow, season, episode', '')", + "default": "('1', 'torrentrapid', 'http://torrentrapid.com/', 'movie, tvshow, season, episode', ''), ('1', 'torrentlocura', 'http://torrentlocura.com/', 'movie, tvshow, season, episode', ''), ('1', 'tumejortorrent', 'http://tumejortorrent.com/', 'movie, tvshow, season, episode', ''), ('1', 'tvsinpagar', 'http://www.tvsinpagar.com/', 'tvshow, season, episode', ''), ('1', 'descargas2020', 'http://descargas2020.com/', 'movie, tvshow, season, episode', ''), ('1', 'mispelisyseries', 'http://mispelisyseries.com/', 'movie', 'search')", "enabled": true, "visible": false }, @@ -539,6 +539,27 @@ "default": true, "enabled": true, "visible": false + }, + { + "id": "clonenewpct1_timeout_downloadpage", + "type": "list", + "label": "Timeout (segs.) en descarga de páginas o verificación de servidores", + "default": 5, + "enabled": true, + "visible": true, + "lvalues": [ + "None", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10" + ] } ] } \ No newline at end of file diff --git a/plugin.video.alfa/channels/torrentrapid.py b/plugin.video.alfa/channels/torrentrapid.py index 292d7faa..ac2d77c4 100644 --- a/plugin.video.alfa/channels/torrentrapid.py +++ b/plugin.video.alfa/channels/torrentrapid.py @@ -12,40 +12,53 @@ from core import httptools from core import scrapertools from core import servertools from core.item import Item -from platformcode import config, logger +from platformcode import config, logger, platformtools from core import tmdb from lib import generictools -host = 'http://torrentrapid.com/' +channel_py = 'newpct1' #Código para permitir usar un único canal para todas las webs clones de NewPct1 -clone_list = config.get_setting('clonenewpct1_channels_list', "torrentrapid") #Carga lista de clones -clone_list = ast.literal_eval(clone_list) #la convierte a lista de tuplas +clone_list = config.get_setting('clonenewpct1_channels_list', channel_py) #Carga lista de clones +clone_list = ast.literal_eval(clone_list) #la convierte en array host_index = 0 -host_index = config.get_setting('clonenewpct1_channel_default', "torrentrapid") #Clone por defecto +host_index = config.get_setting('clonenewpct1_channel_default', channel_py) #Clone por defecto i = 0 for active_clone, channel_clone, host_clone, contentType_clone, info_clone in clone_list: if i == host_index: - #channel_clone_name = channel_clone #ACTIVAR CUANDO SE PASE A NEWPCT1 - #host = 'http://%s/' % host_clone #ACTIVAR CUANDO SE PASE A NEWPCT1 - i += 1 + channel_clone_name = channel_clone #Nombre del Canal elegido + host = host_clone #URL del Canal elegido + break + i += 1 +item = Item() +item.channel_host = host +if item.channel != channel_py: + item.channel = channel_py +item.category = channel_clone_name.capitalize() #Carga de opciones del canal -item = Item() -if not item.channel: - item.channel = scrapertools.find_single_match(host, r'(\w+)\.com\/') -channel_clone_name = scrapertools.find_single_match(host, r'(\w+)\.com\/') #QUITAR CUANDO SE PASE A NEWPCT1 -__modo_grafico__ = config.get_setting('modo_grafico', item.channel) -modo_ultima_temp = config.get_setting('seleccionar_ult_temporadda_activa', item.channel) +__modo_grafico__ = config.get_setting('modo_grafico', channel_py) #TMDB? +modo_ultima_temp = config.get_setting('seleccionar_ult_temporadda_activa', channel_py) #Actualización sólo últ. Temporada? +timeout = config.get_setting('clonenewpct1_timeout_downloadpage', channel_py) #Timeout downloadpage +if timeout == 0: timeout = None + +platformtools.dialog_ok("NewPct1, ¡¡¡he vuelto como canal VIRTUAL!!!", "Hemos centralizado la gestión de los clones de NewPct1 en el canal virtual NewPct1. Los clones desaparecerán en breve.", "Para más información lee el tutorial: https://alfa-addon.com /threads/newpct1-implantando-alta-disponibilidad.1200/") + +#Vayamos a la siguiente acción en el canal Newpct1 +from platformcode import launcher +channel_clone_name = "torrentrapid" #Nombre del Canal elegido +host = "http://torrentrapid.com/" +item.category = channel_clone_name.capitalize() +item.action = "mainlist" +item.channel_host = host +launcher.run(item) def mainlist(item): logger.info() + if item.channel != channel_py: + return - #Renombramos el canal al nombre de clone elegido - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() - itemlist = [] thumb_pelis = get_thumb("channels_movie.png") @@ -58,20 +71,20 @@ def mainlist(item): thumb_settings = get_thumb("setting_0.png") itemlist.append(Item(channel=item.channel, action="submenu", title="Películas", url=host, - extra="peliculas", thumbnail=thumb_pelis )) + extra="peliculas", thumbnail=thumb_pelis, category=item.category)) itemlist.append(Item(channel=item.channel, action="submenu", title="Series", url=host, extra="series", - thumbnail=thumb_series)) + thumbnail=thumb_series, category=item.category)) itemlist.append(Item(channel=item.channel, action="submenu", title="Documentales", url=host, extra="varios", - thumbnail=thumb_docus)) + thumbnail=thumb_docus, category=item.category)) itemlist.append( - Item(channel=item.channel, action="search", title="Buscar", url=host + "buscar", thumbnail=thumb_buscar)) + Item(channel=item.channel, action="search", title="Buscar", url=host + "buscar", thumbnail=thumb_buscar, category=item.category)) itemlist.append( - Item(channel=item.channel, action="", title="[COLOR yellow]Configuración de Servidores:[/COLOR]", url="", thumbnail=thumb_settings)) + Item(channel=item.channel, action="", title="[COLOR yellow]Configuración de Servidores:[/COLOR]", url="", thumbnail=thumb_settings, category=item.category)) itemlist.append( - Item(channel=item.channel, action="settingCanal", title="Servidores para Ver Online y Descargas", url="", thumbnail=thumb_settings)) + Item(channel=item.channel, action="settingCanal", title="Servidores para Ver Online y Descargas", url="", thumbnail=thumb_settings, category=item.category)) return itemlist @@ -85,68 +98,60 @@ def submenu(item): logger.info() itemlist = [] + data = '' try: - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) except: pass - host_alt = host - host_dom = host.replace("https://", "").replace("http://", "").replace("www.", "") - patron = '<li><a href="http://(?:www.)?' + host_dom + item.extra + '/">.*?<ul.*?>(.*?)</ul>' + patron = '<li><a\s?class="[^"]+"\s?href="http:[^"]+"><i\s?class=.*><\/i>.*Inicio<\/a><\/li>(.+)<\/ul>\s?<\/nav>' #Verificamos si se ha cargado una página, y si además tiene la estructura correcta if not data or not scrapertools.find_single_match(data, patron): - logger.error("ERROR 01: SUBMENU: La Web no responde o ha cambiado de URL: " + item.url) + logger.error("ERROR 01: SUBMENU: La Web no responde o ha cambiado de URL: " + item.url + data) #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú item, data = generictools.fail_over_newpct1(item, patron) if not data: #Si no ha logrado encontrar nada, salimos - itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: SUBMENU: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos elif item.channel_alt: #Si ha habido fail-over, lo comento - itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR] [ALT ] en uso')) - itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel_alt.capitalize() + '[/COLOR] caído')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR] [ALT ] en uso')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel_alt.capitalize() + '[/COLOR] inaccesible')) - host_alt = host.replace(item.channel_alt, item.channel) - del item.channel_alt if item.url_alt: del item.url_alt + del item.channel_alt - #data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") - #data = data.replace("'", '"').replace('/series"', '/series/"') #Compatibilidad con mispelisy.series.com - - host_dom = host_alt.replace("https://", "").replace("http://", "").replace("www.", "") - patron = '<li><a href="http://(?:www.)?' + host_dom + item.extra + '/">.*?<ul.*?>(.*?)</ul>' - if "pelisyseries.com" in host_alt and item.extra == "varios": #compatibilidad con mispelisy.series.com - data = '<a href="' + host_alt + 'varios/" title="Documentales"><i class="icon-rocket"></i> Documentales</a>' + data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") + data = data.replace("'", '"').replace('/series"', '/series/"') #Compatibilidad con mispelisy.series.com + if "pelisyseries.com" in item.channel_host and item.extra == "varios": #compatibilidad con mispelisy.series.com + data = '<li><a href="' + item.channel_host + 'varios/" title="Documentales">Documentales</a></li>' else: - if data: - data = scrapertools.get_match(data, patron) - if not data: - logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) - return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos - else: - return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + data = scrapertools.get_match(data, patron) #Seleccionamos el trozo que nos interesa + if not data: + logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos - patron = '<.*?href="([^"]+)".*?>([^>]+)</a>' + patron = '<li><a.*?href="([^"]+)"\s?.itle="[^"]+"\s?>([^>]+)<\/a><\/li>' matches = re.compile(patron, re.DOTALL).findall(data) + if not matches: logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos for scrapedurl, scrapedtitle in matches: title = scrapedtitle.strip() - url = scrapedurl - itemlist.append(Item(channel=item.channel, action="listado", title=title, url=url, extra=item.extra)) - itemlist.append( - Item(channel=item.channel, action="alfabeto", title=title + " [A-Z]", url=url, extra=item.extra)) + #Preguntamos por las entradas que no corresponden al "extra" + if item.extra in scrapedtitle.lower() or (item.extra == "peliculas" and ("cine" in scrapedurl or "anime" in scrapedurl)) or (item.extra == "varios" and ("documentales" in scrapedurl or "varios" in scrapedurl)): + itemlist.append(item.clone(action="listado", title=title, url=scrapedurl)) + itemlist.append(item.clone(action="alfabeto", title=title + " [A-Z]", url=scrapedurl)) if item.extra == "peliculas": - itemlist.append(Item(channel=item.channel, action="listado", title="Películas 4K", url=host_alt + "peliculas-hd/4kultrahd/", extra=item.extra)) - itemlist.append( - Item(channel=item.channel, action="alfabeto", title="Películas 4K" + " [A-Z]", url=host_alt + "peliculas-hd/4kultrahd/", extra=item.extra)) + itemlist.append(item.clone(action="listado", title="Películas 4K", url=item.channel_host + "peliculas-hd/4kultrahd/")) + itemlist.append(item.clone(action="alfabeto", title="Películas 4K" + " [A-Z]", url=item.channel_host + "peliculas-hd/4kultrahd/")) return itemlist @@ -155,28 +160,41 @@ def alfabeto(item): logger.info() itemlist = [] - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = '' + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") patron = '<ul class="alfabeto">(.*?)</ul>' - if data: - data = scrapertools.get_match(data, patron) - else: - return itemlist + if not data or not scrapertools.find_single_match(data, patron): + logger.error("ERROR 01: ALFABETO: La Web no responde o ha cambiado de URL: " + item.url + data) + #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú + item, data = generictools.fail_over_newpct1(item, patron) + + if not data: #Si no ha logrado encontrar nada, salimos + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: ALFABETO: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + elif item.channel_alt: #Si ha habido fail-over, lo comento + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR] [ALT ] en uso')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel_alt.capitalize() + '[/COLOR] inaccesible')) + + if item.url_alt: del item.url_alt + del item.channel_alt + + data = scrapertools.get_match(data, patron) patron = '<a href="([^"]+)"[^>]+>([^>]+)</a>' matches = re.compile(patron, re.DOTALL).findall(data) if not matches: - logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) + logger.error("ERROR 02: ALFABETO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: ALFABETO: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos for scrapedurl, scrapedtitle in matches: title = scrapedtitle.upper() - url = scrapedurl - itemlist.append(Item(channel=item.channel, action="listado", title=title, url=url, extra=item.extra)) + itemlist.append(item.clone(action="listado", title=title, url=scrapedurl)) return itemlist @@ -191,11 +209,21 @@ def listado(item): if item.totalItems: del item.totalItems + data = '' try: - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) except: + pass + + patron = '<ul class="' + clase + '">(.*?)</ul>' #seleccionamos el bloque que nos interesa + if not data or (not scrapertools.find_single_match(data, patron) and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data): logger.error("ERROR 01: LISTADO: La Web no responde o ha cambiado de URL: " + item.url + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: LISTADO:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú + item, data = generictools.fail_over_newpct1(item, patron) + + if not data: #Si no ha logrado encontrar nada, salimos + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: LISTADO: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #Establecemos los valores básicos en función del tipo de contenido @@ -218,7 +246,7 @@ def listado(item): fichas = scrapertools.get_match(data, patron) if not fichas and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data: #error logger.error("ERROR 02: LISTADO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos elif '<h3><strong>( 0 ) Resultados encontrados </strong>' in data: #no hay vídeos return itemlist @@ -235,7 +263,7 @@ def listado(item): matches = re.compile(patron, re.DOTALL).findall(fichas) if not matches: #error logger.error("ERROR 02: LISTADO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + fichas) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #logger.debug("MATCHES: " + str(len(matches))) @@ -460,13 +488,21 @@ def listado(item): def listado_busqueda(item): logger.info() - - host = 'http://%s/' % scrapertools.find_single_match(item.url, '(\w+\.com)\/') + + #Renombramos el canal al nombre de clone elegido. Actualizados URL + host = scrapertools.find_single_match(item.url, '(http.?\:\/\/(?:www.)?\w+\.\w+\/)') + #item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/') + if item.category and item.category != "newest": + item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() itemlist = [] cnt_tot = 40 # Poner el num. máximo de items por página. Dejamos que la web lo controle cnt_title = 0 # Contador de líneas insertadas en Itemlist cnt_pag = 0 # Contador de líneas leídas de Matches + timeout_search = 5 # Timeout un poco más largo para las búsquedas + if timeout > 5: + timeout_search = timeout # Timeout un poco más largo para las búsquedas + data = '' if item.cnt_pag: cnt_pag = item.cnt_pag # Se guarda en la lista de páginas anteriores en Item @@ -493,21 +529,21 @@ def listado_busqueda(item): #Máximo num. de líneas permitidas por TMDB. Máx de 5 páginas por Itemlist para no degradar el rendimiento while cnt_title <= cnt_tot and cnt_next < 5: - pattern = '<ul class="%s">(.*?)</ul>' % item.pattern #seleccionamos el bloque que nos interesa try: - data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, post=item.post).data) + data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, post=item.post, timeout=timeout_search).data) except: pass - cnt_next += 1 - if not data or not scrapertools.find_single_match(data, pattern): + cnt_next += 1 + pattern = '<ul class="%s">(.*?)</ul>' % item.pattern #seleccionamos el bloque que nos interesa + if not data or (not scrapertools.find_single_match(data, pattern) and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data): logger.error("ERROR 01: LISTADO_BUSQUEDA: La Web no responde o ha cambiado de URL: " + item.url + item.post + " / DATA: " + data) #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú item, data = generictools.fail_over_newpct1(item, pattern) if not data: #Si no ha logrado encontrar nada, salimos itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: LISTADO_BUSQUEDA:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: LISTADO_BUSQUEDA:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos elif item.channel_alt: #Si ha habido fail-over, lo comento host = host.replace(item.channel_alt, item.channel) @@ -531,7 +567,6 @@ def listado_busqueda(item): pattern = '<ul class="%s">(.*?)</ul>' % item.pattern #seleccionamos el bloque que nos interesa data_alt = data data = scrapertools.get_match(data, pattern) - #pattern = '<li[^>]*><a href="(?P<url>[^"]+).*?<img.*?src="(?P<thumb>[^"]+)?".*?<h2.*?>(?P<title>.*?)?<\/h2>' pattern = '<li[^>]*><a href="(?P<scrapedurl>[^"]+).*?' #url pattern += 'title="(?P<scrapedtitle>[^"]+).*?' #título pattern += '<img.*?src="(?P<scrapedthumbnail>[^"]+)?".*?' #thumb @@ -541,7 +576,8 @@ def listado_busqueda(item): matches_alt = re.compile(pattern, re.DOTALL).findall(data) if not matches_alt and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data_alt: #error logger.error("ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / DATA: " + data_alt) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web. Reportar el error con el log')) + item, itemlist = generictools.post_tmdb_listado(item, itemlist) #Pintamos los datos de fail-over, si los hay return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #Ahora se hace una simulación para saber cuantas líneas podemos albergar en este Itemlist. @@ -830,14 +866,14 @@ def listado_busqueda(item): url_tvshow = host + calidad_mps + real_title_mps + "/" #... otras no. A probar... #Leemos la página, a ver si es una página de episodios - data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_id).data) + data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_id, timeout=timeout).data) data_serie = unicode(data_serie, "iso-8859-1", errors="replace").encode("utf-8") data_serie = data_serie.replace("chapters", "buscar-list") pattern = '<ul class="%s">(.*?)</ul>' % "buscar-list" #Patrón de lista de episodios if not scrapertools.find_single_match(data_serie, pattern) and serieid: #no es válida la página, #intentarlo con la otra url - data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_tvshow).data) + data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_tvshow, timeout=timeout).data) data_serie = unicode(data_serie, "iso-8859-1", errors="replace").encode("utf-8") data_serie = data_serie.replace("chapters", "buscar-list") @@ -876,9 +912,10 @@ def findvideos(item): from core import channeltools logger.info() - #Renombramos el canal al nombre de clone elegido - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() + #Renombramos el canal al nombre de clone elegido. Actualizados URL + host = scrapertools.find_single_match(item.url, '(http.?\:\/\/(?:www.)?\w+\.\w+\/)') + #item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/') + item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() itemlist = [] @@ -987,8 +1024,9 @@ def findvideos(item): excluir_enlaces_descargas = [] #Lista vacía de servidores excluidos en Descargar # Descarga la página + data = '' try: - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) except: pass @@ -1001,7 +1039,7 @@ def findvideos(item): item, data = generictools.fail_over_newpct1(item, patron) if not data: #Si no ha logrado encontrar nada, salimos itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: FINDVIDEOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: FINDVIDEOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") @@ -1029,7 +1067,7 @@ def findvideos(item): item_local.url = scrapertools.find_single_match(data, patron) if not item_local.url: #error logger.error("ERROR 02: FINDVIDEOS: El archivo Torrent no existe o ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: FINDVIDEOS: El archivo Torrent no existe o ha cambiado la estructura de la Web. Verificar en la Web y reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: FINDVIDEOS: El archivo Torrent no existe o ha cambiado la estructura de la Web. Verificar en la Web y reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos item_local.url = item_local.url.replace(" ", "%20") #sustituimos espacios por %20, por si acaso #logger.debug("Patron: " + patron + " url: " + item_local.url) @@ -1054,6 +1092,8 @@ def findvideos(item): #logger.debug(item_local) # VER vídeos, descargar vídeos un link, o múltiples links + data = scrapertools.find_single_match(data, '<div id="tab1" class="tab_content"(.*?<\/ul>(?:<div.*?>)?<\/div><\/div><\/div>)') #Seleccionar el bloque para evitar duplicados + host_dom = host.replace("https://", "").replace("http://", "").replace("www.", "") data = data.replace("http://tumejorserie.com/descargar/url_encript.php?link=", "(") data = re.sub(r'javascript:;" onClick="popup\("http:\/\/(?:www.)?' + host_dom + '\w{1,9}\/library\/include\/ajax\/get_modallinks.php\?links=', "", data) @@ -1066,7 +1106,7 @@ def findvideos(item): enlaces_ver = re.compile(patron, re.DOTALL).findall(data) enlaces_descargar = enlaces_ver #logger.debug(enlaces_ver) - + #Recorre todos los links de VER, si está permitido cnt_enl_ver = 1 cnt_enl_verif = 1 @@ -1100,7 +1140,7 @@ def findvideos(item): if verificar_enlaces_veronline != 0: #Se quiere verificar si el link está activo? if cnt_enl_verif <= verificar_enlaces_veronline or verificar_enlaces_veronline == -1: #contador? #Llama a la subfunción de check_list_links(itemlist) para cada link de servidor - item_local.alive = servertools.check_video_link(enlace, servidor) #activo el link ? + item_local.alive = servertools.check_video_link(enlace, servidor, timeout=timeout) #activo el link ? if verificar_enlaces_veronline_validos: #Los links tienen que ser válidos para contarlos? if item_local.alive == "Ok": #Sí cnt_enl_verif += 1 #Movemos los contadores @@ -1190,7 +1230,7 @@ def findvideos(item): if verificar_enlaces_descargas != 0: #Se quiere verificar si el link está activo? if cnt_enl_verif <= verificar_enlaces_descargas or verificar_enlaces_descargas == -1: #contador? #Llama a la subfunción de check_list_links(itemlist) para primer link de servidor - item_local.alive = servertools.check_video_link(enlace, servidor) #activo el link ? + item_local.alive = servertools.check_video_link(enlace, servidor, timeout=timeout) #activo el link ? if verificar_enlaces_descargas_validos: #Los links tienen que ser válidos para contarlos? if item_local.alive == "Ok": #Sí cnt_enl_verif += 1 #Movemos los contadores @@ -1232,9 +1272,10 @@ def findvideos(item): def episodios(item): logger.info() - #Renombramos el canal al nombre de clone elegido - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() + #Renombramos el canal al nombre de clone elegido. Actualizados URL + host = scrapertools.find_single_match(item.url, '(http.?\:\/\/(?:www.)?\w+\.\w+\/)') + #item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/') + item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() itemlist = [] @@ -1255,7 +1296,7 @@ def episodios(item): data = '' try: - data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, timeout=timeout).data) patron = '<ul class="%s">(.*?)</ul>' % "buscar-list" # item.pattern data_alt = '' if data: data_alt = scrapertools.get_match(data, patron) @@ -1276,7 +1317,7 @@ def episodios(item): if not data: #No se ha encontrado ningún canal activo para este vídeo itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: EPISODIOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: EPISODIOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) return itemlist #Busca y pre-carga todas las páginas de episodios que componen las serie, para obtener la url de cada página @@ -1312,7 +1353,7 @@ def episodios(item): break try: if not data: - data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(page).data) + data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(page, timeout=timeout).data) data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") data = data.replace("chapters", "buscar-list") #Compatibilidad con mispelisy.series.com pattern = '<ul class="%s">(.*?)</ul>' % "buscar-list" # item.pattern @@ -1321,7 +1362,7 @@ def episodios(item): raise except: logger.error("ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / " + str(list_pages) + " / DATA: " + str(data)) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos if "pelisyseries.com" in item.url: @@ -1331,7 +1372,7 @@ def episodios(item): matches = re.compile(pattern, re.DOTALL).findall(data) if not matches: #error logger.error("ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #logger.debug("patron: " + pattern) @@ -1399,7 +1440,7 @@ def episodios(item): match = [m.groupdict() for m in r.finditer(info)][0] if not match: #error logger.error("ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / DATA: " + info) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos if match['season'] is None: match['season'] = season #Si no se encuentran valores, pero poner lo básico @@ -1449,8 +1490,6 @@ def episodios(item): if item_local.active: del item_local.active - if item_local.category: - del item_local.category if item_local.infoLabels['title']: del item_local.infoLabels['title'] item_local.context = "['buscar_trailer']" @@ -1467,6 +1506,8 @@ def episodios(item): del item_local.update_last if item_local.update_next: del item_local.update_next + if item_local.channel_host: + del item_local.channel_host itemlist.append(item_local.clone()) @@ -1501,9 +1542,6 @@ def actualizar_titulos(item): def search(item, texto): logger.info("search:" + texto) # texto = texto.replace(" ", "+") - - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() try: item.post = "q=%s" % texto diff --git a/plugin.video.alfa/channels/tumejortorrent.py b/plugin.video.alfa/channels/tumejortorrent.py index 105b8cda..a49c07bc 100644 --- a/plugin.video.alfa/channels/tumejortorrent.py +++ b/plugin.video.alfa/channels/tumejortorrent.py @@ -12,40 +12,53 @@ from core import httptools from core import scrapertools from core import servertools from core.item import Item -from platformcode import config, logger +from platformcode import config, logger, platformtools from core import tmdb from lib import generictools -host = 'http://tumejortorrent.com/' +channel_py = 'newpct1' #Código para permitir usar un único canal para todas las webs clones de NewPct1 -clone_list = config.get_setting('clonenewpct1_channels_list', "torrentrapid") #Carga lista de clones -clone_list = ast.literal_eval(clone_list) #la convierte a lista de tuplas +clone_list = config.get_setting('clonenewpct1_channels_list', channel_py) #Carga lista de clones +clone_list = ast.literal_eval(clone_list) #la convierte en array host_index = 0 -host_index = config.get_setting('clonenewpct1_channel_default', "torrentrapid") #Clone por defecto +host_index = config.get_setting('clonenewpct1_channel_default', channel_py) #Clone por defecto i = 0 for active_clone, channel_clone, host_clone, contentType_clone, info_clone in clone_list: if i == host_index: - #channel_clone_name = channel_clone #ACTIVAR CUANDO SE PASE A NEWPCT1 - #host = 'http://%s/' % host_clone #ACTIVAR CUANDO SE PASE A NEWPCT1 - i += 1 + channel_clone_name = channel_clone #Nombre del Canal elegido + host = host_clone #URL del Canal elegido + break + i += 1 +item = Item() +item.channel_host = host +if item.channel != channel_py: + item.channel = channel_py +item.category = channel_clone_name.capitalize() #Carga de opciones del canal -item = Item() -if not item.channel: - item.channel = scrapertools.find_single_match(host, r'(\w+)\.com\/') -channel_clone_name = scrapertools.find_single_match(host, r'(\w+)\.com\/') #QUITAR CUANDO SE PASE A NEWPCT1 -__modo_grafico__ = config.get_setting('modo_grafico', item.channel) -modo_ultima_temp = config.get_setting('seleccionar_ult_temporadda_activa', item.channel) +__modo_grafico__ = config.get_setting('modo_grafico', channel_py) #TMDB? +modo_ultima_temp = config.get_setting('seleccionar_ult_temporadda_activa', channel_py) #Actualización sólo últ. Temporada? +timeout = config.get_setting('clonenewpct1_timeout_downloadpage', channel_py) #Timeout downloadpage +if timeout == 0: timeout = None + +platformtools.dialog_ok("NewPct1, ¡¡¡he vuelto como canal VIRTUAL!!!", "Hemos centralizado la gestión de los clones de NewPct1 en el canal virtual NewPct1. Los clones desaparecerán en breve.", "Para más información lee el tutorial: https://alfa-addon.com /threads/newpct1-implantando-alta-disponibilidad.1200/") + +#Vayamos a la siguiente acción en el canal Newpct1 +from platformcode import launcher +channel_clone_name = "tumejortorrent" #Nombre del Canal elegido +host = "http://tumejortorrent.com/" +item.category = channel_clone_name.capitalize() +item.action = "mainlist" +item.channel_host = host +launcher.run(item) def mainlist(item): logger.info() + if item.channel != channel_py: + return - #Renombramos el canal al nombre de clone elegido - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() - itemlist = [] thumb_pelis = get_thumb("channels_movie.png") @@ -58,20 +71,20 @@ def mainlist(item): thumb_settings = get_thumb("setting_0.png") itemlist.append(Item(channel=item.channel, action="submenu", title="Películas", url=host, - extra="peliculas", thumbnail=thumb_pelis )) + extra="peliculas", thumbnail=thumb_pelis, category=item.category)) itemlist.append(Item(channel=item.channel, action="submenu", title="Series", url=host, extra="series", - thumbnail=thumb_series)) + thumbnail=thumb_series, category=item.category)) itemlist.append(Item(channel=item.channel, action="submenu", title="Documentales", url=host, extra="varios", - thumbnail=thumb_docus)) + thumbnail=thumb_docus, category=item.category)) itemlist.append( - Item(channel=item.channel, action="search", title="Buscar", url=host + "buscar", thumbnail=thumb_buscar)) + Item(channel=item.channel, action="search", title="Buscar", url=host + "buscar", thumbnail=thumb_buscar, category=item.category)) itemlist.append( - Item(channel=item.channel, action="", title="[COLOR yellow]Configuración de Servidores:[/COLOR]", url="", thumbnail=thumb_settings)) + Item(channel=item.channel, action="", title="[COLOR yellow]Configuración de Servidores:[/COLOR]", url="", thumbnail=thumb_settings, category=item.category)) itemlist.append( - Item(channel=item.channel, action="settingCanal", title="Servidores para Ver Online y Descargas", url="", thumbnail=thumb_settings)) + Item(channel=item.channel, action="settingCanal", title="Servidores para Ver Online y Descargas", url="", thumbnail=thumb_settings, category=item.category)) return itemlist @@ -85,68 +98,60 @@ def submenu(item): logger.info() itemlist = [] + data = '' try: - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) except: pass - host_alt = host - host_dom = host.replace("https://", "").replace("http://", "").replace("www.", "") - patron = '<li><a href="http://(?:www.)?' + host_dom + item.extra + '/">.*?<ul.*?>(.*?)</ul>' + patron = '<li><a\s?class="[^"]+"\s?href="http:[^"]+"><i\s?class=.*><\/i>.*Inicio<\/a><\/li>(.+)<\/ul>\s?<\/nav>' #Verificamos si se ha cargado una página, y si además tiene la estructura correcta if not data or not scrapertools.find_single_match(data, patron): - logger.error("ERROR 01: SUBMENU: La Web no responde o ha cambiado de URL: " + item.url) + logger.error("ERROR 01: SUBMENU: La Web no responde o ha cambiado de URL: " + item.url + data) #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú item, data = generictools.fail_over_newpct1(item, patron) if not data: #Si no ha logrado encontrar nada, salimos - itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: SUBMENU: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos elif item.channel_alt: #Si ha habido fail-over, lo comento - itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR] [ALT ] en uso')) - itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel_alt.capitalize() + '[/COLOR] caído')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR] [ALT ] en uso')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel_alt.capitalize() + '[/COLOR] inaccesible')) - host_alt = host.replace(item.channel_alt, item.channel) - del item.channel_alt if item.url_alt: del item.url_alt + del item.channel_alt - #data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") - #data = data.replace("'", '"').replace('/series"', '/series/"') #Compatibilidad con mispelisy.series.com - - host_dom = host_alt.replace("https://", "").replace("http://", "").replace("www.", "") - patron = '<li><a href="http://(?:www.)?' + host_dom + item.extra + '/">.*?<ul.*?>(.*?)</ul>' - if "pelisyseries.com" in host_alt and item.extra == "varios": #compatibilidad con mispelisy.series.com - data = '<a href="' + host_alt + 'varios/" title="Documentales"><i class="icon-rocket"></i> Documentales</a>' + data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") + data = data.replace("'", '"').replace('/series"', '/series/"') #Compatibilidad con mispelisy.series.com + if "pelisyseries.com" in item.channel_host and item.extra == "varios": #compatibilidad con mispelisy.series.com + data = '<li><a href="' + item.channel_host + 'varios/" title="Documentales">Documentales</a></li>' else: - if data: - data = scrapertools.get_match(data, patron) - if not data: - logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) - return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos - else: - return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + data = scrapertools.get_match(data, patron) #Seleccionamos el trozo que nos interesa + if not data: + logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos - patron = '<.*?href="([^"]+)".*?>([^>]+)</a>' + patron = '<li><a.*?href="([^"]+)"\s?.itle="[^"]+"\s?>([^>]+)<\/a><\/li>' matches = re.compile(patron, re.DOTALL).findall(data) + if not matches: logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos for scrapedurl, scrapedtitle in matches: title = scrapedtitle.strip() - url = scrapedurl - itemlist.append(Item(channel=item.channel, action="listado", title=title, url=url, extra=item.extra)) - itemlist.append( - Item(channel=item.channel, action="alfabeto", title=title + " [A-Z]", url=url, extra=item.extra)) + #Preguntamos por las entradas que no corresponden al "extra" + if item.extra in scrapedtitle.lower() or (item.extra == "peliculas" and ("cine" in scrapedurl or "anime" in scrapedurl)) or (item.extra == "varios" and ("documentales" in scrapedurl or "varios" in scrapedurl)): + itemlist.append(item.clone(action="listado", title=title, url=scrapedurl)) + itemlist.append(item.clone(action="alfabeto", title=title + " [A-Z]", url=scrapedurl)) if item.extra == "peliculas": - itemlist.append(Item(channel=item.channel, action="listado", title="Películas 4K", url=host_alt + "peliculas-hd/4kultrahd/", extra=item.extra)) - itemlist.append( - Item(channel=item.channel, action="alfabeto", title="Películas 4K" + " [A-Z]", url=host_alt + "peliculas-hd/4kultrahd/", extra=item.extra)) + itemlist.append(item.clone(action="listado", title="Películas 4K", url=item.channel_host + "peliculas-hd/4kultrahd/")) + itemlist.append(item.clone(action="alfabeto", title="Películas 4K" + " [A-Z]", url=item.channel_host + "peliculas-hd/4kultrahd/")) return itemlist @@ -155,28 +160,41 @@ def alfabeto(item): logger.info() itemlist = [] - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = '' + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") patron = '<ul class="alfabeto">(.*?)</ul>' - if data: - data = scrapertools.get_match(data, patron) - else: - return itemlist + if not data or not scrapertools.find_single_match(data, patron): + logger.error("ERROR 01: ALFABETO: La Web no responde o ha cambiado de URL: " + item.url + data) + #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú + item, data = generictools.fail_over_newpct1(item, patron) + + if not data: #Si no ha logrado encontrar nada, salimos + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: ALFABETO: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + elif item.channel_alt: #Si ha habido fail-over, lo comento + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR] [ALT ] en uso')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel_alt.capitalize() + '[/COLOR] inaccesible')) + + if item.url_alt: del item.url_alt + del item.channel_alt + + data = scrapertools.get_match(data, patron) patron = '<a href="([^"]+)"[^>]+>([^>]+)</a>' matches = re.compile(patron, re.DOTALL).findall(data) if not matches: - logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) + logger.error("ERROR 02: ALFABETO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: ALFABETO: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos for scrapedurl, scrapedtitle in matches: title = scrapedtitle.upper() - url = scrapedurl - itemlist.append(Item(channel=item.channel, action="listado", title=title, url=url, extra=item.extra)) + itemlist.append(item.clone(action="listado", title=title, url=scrapedurl)) return itemlist @@ -191,11 +209,21 @@ def listado(item): if item.totalItems: del item.totalItems + data = '' try: - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) except: + pass + + patron = '<ul class="' + clase + '">(.*?)</ul>' #seleccionamos el bloque que nos interesa + if not data or (not scrapertools.find_single_match(data, patron) and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data): logger.error("ERROR 01: LISTADO: La Web no responde o ha cambiado de URL: " + item.url + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: LISTADO:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú + item, data = generictools.fail_over_newpct1(item, patron) + + if not data: #Si no ha logrado encontrar nada, salimos + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: LISTADO: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #Establecemos los valores básicos en función del tipo de contenido @@ -218,7 +246,7 @@ def listado(item): fichas = scrapertools.get_match(data, patron) if not fichas and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data: #error logger.error("ERROR 02: LISTADO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos elif '<h3><strong>( 0 ) Resultados encontrados </strong>' in data: #no hay vídeos return itemlist @@ -235,7 +263,7 @@ def listado(item): matches = re.compile(patron, re.DOTALL).findall(fichas) if not matches: #error logger.error("ERROR 02: LISTADO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + fichas) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #logger.debug("MATCHES: " + str(len(matches))) @@ -460,13 +488,21 @@ def listado(item): def listado_busqueda(item): logger.info() - - host = 'http://%s/' % scrapertools.find_single_match(item.url, '(\w+\.com)\/') + + #Renombramos el canal al nombre de clone elegido. Actualizados URL + host = scrapertools.find_single_match(item.url, '(http.?\:\/\/(?:www.)?\w+\.\w+\/)') + #item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/') + if item.category and item.category != "newest": + item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() itemlist = [] cnt_tot = 40 # Poner el num. máximo de items por página. Dejamos que la web lo controle cnt_title = 0 # Contador de líneas insertadas en Itemlist cnt_pag = 0 # Contador de líneas leídas de Matches + timeout_search = 5 # Timeout un poco más largo para las búsquedas + if timeout > 5: + timeout_search = timeout # Timeout un poco más largo para las búsquedas + data = '' if item.cnt_pag: cnt_pag = item.cnt_pag # Se guarda en la lista de páginas anteriores en Item @@ -493,21 +529,21 @@ def listado_busqueda(item): #Máximo num. de líneas permitidas por TMDB. Máx de 5 páginas por Itemlist para no degradar el rendimiento while cnt_title <= cnt_tot and cnt_next < 5: - pattern = '<ul class="%s">(.*?)</ul>' % item.pattern #seleccionamos el bloque que nos interesa try: - data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, post=item.post).data) + data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, post=item.post, timeout=timeout_search).data) except: pass - cnt_next += 1 - if not data or not scrapertools.find_single_match(data, pattern): + cnt_next += 1 + pattern = '<ul class="%s">(.*?)</ul>' % item.pattern #seleccionamos el bloque que nos interesa + if not data or (not scrapertools.find_single_match(data, pattern) and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data): logger.error("ERROR 01: LISTADO_BUSQUEDA: La Web no responde o ha cambiado de URL: " + item.url + item.post + " / DATA: " + data) #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú item, data = generictools.fail_over_newpct1(item, pattern) if not data: #Si no ha logrado encontrar nada, salimos itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: LISTADO_BUSQUEDA:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: LISTADO_BUSQUEDA:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos elif item.channel_alt: #Si ha habido fail-over, lo comento host = host.replace(item.channel_alt, item.channel) @@ -531,7 +567,6 @@ def listado_busqueda(item): pattern = '<ul class="%s">(.*?)</ul>' % item.pattern #seleccionamos el bloque que nos interesa data_alt = data data = scrapertools.get_match(data, pattern) - #pattern = '<li[^>]*><a href="(?P<url>[^"]+).*?<img.*?src="(?P<thumb>[^"]+)?".*?<h2.*?>(?P<title>.*?)?<\/h2>' pattern = '<li[^>]*><a href="(?P<scrapedurl>[^"]+).*?' #url pattern += 'title="(?P<scrapedtitle>[^"]+).*?' #título pattern += '<img.*?src="(?P<scrapedthumbnail>[^"]+)?".*?' #thumb @@ -541,7 +576,8 @@ def listado_busqueda(item): matches_alt = re.compile(pattern, re.DOTALL).findall(data) if not matches_alt and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data_alt: #error logger.error("ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / DATA: " + data_alt) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web. Reportar el error con el log')) + item, itemlist = generictools.post_tmdb_listado(item, itemlist) #Pintamos los datos de fail-over, si los hay return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #Ahora se hace una simulación para saber cuantas líneas podemos albergar en este Itemlist. @@ -830,14 +866,14 @@ def listado_busqueda(item): url_tvshow = host + calidad_mps + real_title_mps + "/" #... otras no. A probar... #Leemos la página, a ver si es una página de episodios - data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_id).data) + data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_id, timeout=timeout).data) data_serie = unicode(data_serie, "iso-8859-1", errors="replace").encode("utf-8") data_serie = data_serie.replace("chapters", "buscar-list") pattern = '<ul class="%s">(.*?)</ul>' % "buscar-list" #Patrón de lista de episodios if not scrapertools.find_single_match(data_serie, pattern) and serieid: #no es válida la página, #intentarlo con la otra url - data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_tvshow).data) + data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_tvshow, timeout=timeout).data) data_serie = unicode(data_serie, "iso-8859-1", errors="replace").encode("utf-8") data_serie = data_serie.replace("chapters", "buscar-list") @@ -876,9 +912,10 @@ def findvideos(item): from core import channeltools logger.info() - #Renombramos el canal al nombre de clone elegido - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() + #Renombramos el canal al nombre de clone elegido. Actualizados URL + host = scrapertools.find_single_match(item.url, '(http.?\:\/\/(?:www.)?\w+\.\w+\/)') + #item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/') + item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() itemlist = [] @@ -987,8 +1024,9 @@ def findvideos(item): excluir_enlaces_descargas = [] #Lista vacía de servidores excluidos en Descargar # Descarga la página + data = '' try: - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) except: pass @@ -1001,7 +1039,7 @@ def findvideos(item): item, data = generictools.fail_over_newpct1(item, patron) if not data: #Si no ha logrado encontrar nada, salimos itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: FINDVIDEOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: FINDVIDEOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") @@ -1029,7 +1067,7 @@ def findvideos(item): item_local.url = scrapertools.find_single_match(data, patron) if not item_local.url: #error logger.error("ERROR 02: FINDVIDEOS: El archivo Torrent no existe o ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: FINDVIDEOS: El archivo Torrent no existe o ha cambiado la estructura de la Web. Verificar en la Web y reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: FINDVIDEOS: El archivo Torrent no existe o ha cambiado la estructura de la Web. Verificar en la Web y reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos item_local.url = item_local.url.replace(" ", "%20") #sustituimos espacios por %20, por si acaso #logger.debug("Patron: " + patron + " url: " + item_local.url) @@ -1054,6 +1092,8 @@ def findvideos(item): #logger.debug(item_local) # VER vídeos, descargar vídeos un link, o múltiples links + data = scrapertools.find_single_match(data, '<div id="tab1" class="tab_content"(.*?<\/ul>(?:<div.*?>)?<\/div><\/div><\/div>)') #Seleccionar el bloque para evitar duplicados + host_dom = host.replace("https://", "").replace("http://", "").replace("www.", "") data = data.replace("http://tumejorserie.com/descargar/url_encript.php?link=", "(") data = re.sub(r'javascript:;" onClick="popup\("http:\/\/(?:www.)?' + host_dom + '\w{1,9}\/library\/include\/ajax\/get_modallinks.php\?links=', "", data) @@ -1066,7 +1106,7 @@ def findvideos(item): enlaces_ver = re.compile(patron, re.DOTALL).findall(data) enlaces_descargar = enlaces_ver #logger.debug(enlaces_ver) - + #Recorre todos los links de VER, si está permitido cnt_enl_ver = 1 cnt_enl_verif = 1 @@ -1100,7 +1140,7 @@ def findvideos(item): if verificar_enlaces_veronline != 0: #Se quiere verificar si el link está activo? if cnt_enl_verif <= verificar_enlaces_veronline or verificar_enlaces_veronline == -1: #contador? #Llama a la subfunción de check_list_links(itemlist) para cada link de servidor - item_local.alive = servertools.check_video_link(enlace, servidor) #activo el link ? + item_local.alive = servertools.check_video_link(enlace, servidor, timeout=timeout) #activo el link ? if verificar_enlaces_veronline_validos: #Los links tienen que ser válidos para contarlos? if item_local.alive == "Ok": #Sí cnt_enl_verif += 1 #Movemos los contadores @@ -1190,7 +1230,7 @@ def findvideos(item): if verificar_enlaces_descargas != 0: #Se quiere verificar si el link está activo? if cnt_enl_verif <= verificar_enlaces_descargas or verificar_enlaces_descargas == -1: #contador? #Llama a la subfunción de check_list_links(itemlist) para primer link de servidor - item_local.alive = servertools.check_video_link(enlace, servidor) #activo el link ? + item_local.alive = servertools.check_video_link(enlace, servidor, timeout=timeout) #activo el link ? if verificar_enlaces_descargas_validos: #Los links tienen que ser válidos para contarlos? if item_local.alive == "Ok": #Sí cnt_enl_verif += 1 #Movemos los contadores @@ -1232,9 +1272,10 @@ def findvideos(item): def episodios(item): logger.info() - #Renombramos el canal al nombre de clone elegido - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() + #Renombramos el canal al nombre de clone elegido. Actualizados URL + host = scrapertools.find_single_match(item.url, '(http.?\:\/\/(?:www.)?\w+\.\w+\/)') + #item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/') + item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() itemlist = [] @@ -1255,7 +1296,7 @@ def episodios(item): data = '' try: - data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, timeout=timeout).data) patron = '<ul class="%s">(.*?)</ul>' % "buscar-list" # item.pattern data_alt = '' if data: data_alt = scrapertools.get_match(data, patron) @@ -1276,7 +1317,7 @@ def episodios(item): if not data: #No se ha encontrado ningún canal activo para este vídeo itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: EPISODIOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: EPISODIOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) return itemlist #Busca y pre-carga todas las páginas de episodios que componen las serie, para obtener la url de cada página @@ -1312,7 +1353,7 @@ def episodios(item): break try: if not data: - data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(page).data) + data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(page, timeout=timeout).data) data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") data = data.replace("chapters", "buscar-list") #Compatibilidad con mispelisy.series.com pattern = '<ul class="%s">(.*?)</ul>' % "buscar-list" # item.pattern @@ -1321,7 +1362,7 @@ def episodios(item): raise except: logger.error("ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / " + str(list_pages) + " / DATA: " + str(data)) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos if "pelisyseries.com" in item.url: @@ -1331,7 +1372,7 @@ def episodios(item): matches = re.compile(pattern, re.DOTALL).findall(data) if not matches: #error logger.error("ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #logger.debug("patron: " + pattern) @@ -1399,7 +1440,7 @@ def episodios(item): match = [m.groupdict() for m in r.finditer(info)][0] if not match: #error logger.error("ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / DATA: " + info) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos if match['season'] is None: match['season'] = season #Si no se encuentran valores, pero poner lo básico @@ -1449,8 +1490,6 @@ def episodios(item): if item_local.active: del item_local.active - if item_local.category: - del item_local.category if item_local.infoLabels['title']: del item_local.infoLabels['title'] item_local.context = "['buscar_trailer']" @@ -1467,6 +1506,8 @@ def episodios(item): del item_local.update_last if item_local.update_next: del item_local.update_next + if item_local.channel_host: + del item_local.channel_host itemlist.append(item_local.clone()) @@ -1501,9 +1542,6 @@ def actualizar_titulos(item): def search(item, texto): logger.info("search:" + texto) # texto = texto.replace(" ", "+") - - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() try: item.post = "q=%s" % texto diff --git a/plugin.video.alfa/channels/tvsinpagar.py b/plugin.video.alfa/channels/tvsinpagar.py index 8a0ef203..60f73eb5 100644 --- a/plugin.video.alfa/channels/tvsinpagar.py +++ b/plugin.video.alfa/channels/tvsinpagar.py @@ -12,40 +12,53 @@ from core import httptools from core import scrapertools from core import servertools from core.item import Item -from platformcode import config, logger +from platformcode import config, logger, platformtools from core import tmdb from lib import generictools -host = 'http://www.tvsinpagar.com/' +channel_py = 'newpct1' #Código para permitir usar un único canal para todas las webs clones de NewPct1 -clone_list = config.get_setting('clonenewpct1_channels_list', "torrentrapid") #Carga lista de clones -clone_list = ast.literal_eval(clone_list) #la convierte a lista de tuplas +clone_list = config.get_setting('clonenewpct1_channels_list', channel_py) #Carga lista de clones +clone_list = ast.literal_eval(clone_list) #la convierte en array host_index = 0 -host_index = config.get_setting('clonenewpct1_channel_default', "torrentrapid") #Clone por defecto +host_index = config.get_setting('clonenewpct1_channel_default', channel_py) #Clone por defecto i = 0 for active_clone, channel_clone, host_clone, contentType_clone, info_clone in clone_list: if i == host_index: - #channel_clone_name = channel_clone #ACTIVAR CUANDO SE PASE A NEWPCT1 - #host = 'http://%s/' % host_clone #ACTIVAR CUANDO SE PASE A NEWPCT1 - i += 1 + channel_clone_name = channel_clone #Nombre del Canal elegido + host = host_clone #URL del Canal elegido + break + i += 1 +item = Item() +item.channel_host = host +if item.channel != channel_py: + item.channel = channel_py +item.category = channel_clone_name.capitalize() #Carga de opciones del canal -item = Item() -if not item.channel: - item.channel = scrapertools.find_single_match(host, r'(\w+)\.com\/') -channel_clone_name = scrapertools.find_single_match(host, r'(\w+)\.com\/') #QUITAR CUANDO SE PASE A NEWPCT1 -__modo_grafico__ = config.get_setting('modo_grafico', item.channel) -modo_ultima_temp = config.get_setting('seleccionar_ult_temporadda_activa', item.channel) +__modo_grafico__ = config.get_setting('modo_grafico', channel_py) #TMDB? +modo_ultima_temp = config.get_setting('seleccionar_ult_temporadda_activa', channel_py) #Actualización sólo últ. Temporada? +timeout = config.get_setting('clonenewpct1_timeout_downloadpage', channel_py) #Timeout downloadpage +if timeout == 0: timeout = None + +platformtools.dialog_ok("NewPct1, ¡¡¡he vuelto como canal VIRTUAL!!!", "Hemos centralizado la gestión de los clones de NewPct1 en el canal virtual NewPct1. Los clones desaparecerán en breve.", "Para más información lee el tutorial: https://alfa-addon.com /threads/newpct1-implantando-alta-disponibilidad.1200/") + +#Vayamos a la siguiente acción en el canal Newpct1 +from platformcode import launcher +channel_clone_name = "tvsinpagar" #Nombre del Canal elegido +host = "http://www.tvsinpagar.com/" +item.category = channel_clone_name.capitalize() +item.action = "mainlist" +item.channel_host = host +launcher.run(item) def mainlist(item): logger.info() + if item.channel != channel_py: + return - #Renombramos el canal al nombre de clone elegido - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() - itemlist = [] thumb_pelis = get_thumb("channels_movie.png") @@ -58,20 +71,20 @@ def mainlist(item): thumb_settings = get_thumb("setting_0.png") itemlist.append(Item(channel=item.channel, action="submenu", title="Películas", url=host, - extra="peliculas", thumbnail=thumb_pelis )) + extra="peliculas", thumbnail=thumb_pelis, category=item.category)) itemlist.append(Item(channel=item.channel, action="submenu", title="Series", url=host, extra="series", - thumbnail=thumb_series)) + thumbnail=thumb_series, category=item.category)) itemlist.append(Item(channel=item.channel, action="submenu", title="Documentales", url=host, extra="varios", - thumbnail=thumb_docus)) + thumbnail=thumb_docus, category=item.category)) itemlist.append( - Item(channel=item.channel, action="search", title="Buscar", url=host + "buscar", thumbnail=thumb_buscar)) + Item(channel=item.channel, action="search", title="Buscar", url=host + "buscar", thumbnail=thumb_buscar, category=item.category)) itemlist.append( - Item(channel=item.channel, action="", title="[COLOR yellow]Configuración de Servidores:[/COLOR]", url="", thumbnail=thumb_settings)) + Item(channel=item.channel, action="", title="[COLOR yellow]Configuración de Servidores:[/COLOR]", url="", thumbnail=thumb_settings, category=item.category)) itemlist.append( - Item(channel=item.channel, action="settingCanal", title="Servidores para Ver Online y Descargas", url="", thumbnail=thumb_settings)) + Item(channel=item.channel, action="settingCanal", title="Servidores para Ver Online y Descargas", url="", thumbnail=thumb_settings, category=item.category)) return itemlist @@ -85,68 +98,60 @@ def submenu(item): logger.info() itemlist = [] + data = '' try: - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) except: pass - host_alt = host - host_dom = host.replace("https://", "").replace("http://", "").replace("www.", "") - patron = '<li><a href="http://(?:www.)?' + host_dom + item.extra + '/">.*?<ul.*?>(.*?)</ul>' + patron = '<li><a\s?class="[^"]+"\s?href="http:[^"]+"><i\s?class=.*><\/i>.*Inicio<\/a><\/li>(.+)<\/ul>\s?<\/nav>' #Verificamos si se ha cargado una página, y si además tiene la estructura correcta if not data or not scrapertools.find_single_match(data, patron): - logger.error("ERROR 01: SUBMENU: La Web no responde o ha cambiado de URL: " + item.url) + logger.error("ERROR 01: SUBMENU: La Web no responde o ha cambiado de URL: " + item.url + data) #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú item, data = generictools.fail_over_newpct1(item, patron) if not data: #Si no ha logrado encontrar nada, salimos - itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: SUBMENU: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos elif item.channel_alt: #Si ha habido fail-over, lo comento - itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR] [ALT ] en uso')) - itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel_alt.capitalize() + '[/COLOR] caído')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR] [ALT ] en uso')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel_alt.capitalize() + '[/COLOR] inaccesible')) - host_alt = host.replace(item.channel_alt, item.channel) - del item.channel_alt if item.url_alt: del item.url_alt + del item.channel_alt - #data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") - #data = data.replace("'", '"').replace('/series"', '/series/"') #Compatibilidad con mispelisy.series.com - - host_dom = host_alt.replace("https://", "").replace("http://", "").replace("www.", "") - patron = '<li><a href="http://(?:www.)?' + host_dom + item.extra + '/">.*?<ul.*?>(.*?)</ul>' - if "pelisyseries.com" in host_alt and item.extra == "varios": #compatibilidad con mispelisy.series.com - data = '<a href="' + host_alt + 'varios/" title="Documentales"><i class="icon-rocket"></i> Documentales</a>' + data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") + data = data.replace("'", '"').replace('/series"', '/series/"') #Compatibilidad con mispelisy.series.com + if "pelisyseries.com" in item.channel_host and item.extra == "varios": #compatibilidad con mispelisy.series.com + data = '<li><a href="' + item.channel_host + 'varios/" title="Documentales">Documentales</a></li>' else: - if data: - data = scrapertools.get_match(data, patron) - if not data: - logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) - return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos - else: - return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + data = scrapertools.get_match(data, patron) #Seleccionamos el trozo que nos interesa + if not data: + logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos - patron = '<.*?href="([^"]+)".*?>([^>]+)</a>' + patron = '<li><a.*?href="([^"]+)"\s?.itle="[^"]+"\s?>([^>]+)<\/a><\/li>' matches = re.compile(patron, re.DOTALL).findall(data) + if not matches: logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos for scrapedurl, scrapedtitle in matches: title = scrapedtitle.strip() - url = scrapedurl - itemlist.append(Item(channel=item.channel, action="listado", title=title, url=url, extra=item.extra)) - itemlist.append( - Item(channel=item.channel, action="alfabeto", title=title + " [A-Z]", url=url, extra=item.extra)) + #Preguntamos por las entradas que no corresponden al "extra" + if item.extra in scrapedtitle.lower() or (item.extra == "peliculas" and ("cine" in scrapedurl or "anime" in scrapedurl)) or (item.extra == "varios" and ("documentales" in scrapedurl or "varios" in scrapedurl)): + itemlist.append(item.clone(action="listado", title=title, url=scrapedurl)) + itemlist.append(item.clone(action="alfabeto", title=title + " [A-Z]", url=scrapedurl)) if item.extra == "peliculas": - itemlist.append(Item(channel=item.channel, action="listado", title="Películas 4K", url=host_alt + "peliculas-hd/4kultrahd/", extra=item.extra)) - itemlist.append( - Item(channel=item.channel, action="alfabeto", title="Películas 4K" + " [A-Z]", url=host_alt + "peliculas-hd/4kultrahd/", extra=item.extra)) + itemlist.append(item.clone(action="listado", title="Películas 4K", url=item.channel_host + "peliculas-hd/4kultrahd/")) + itemlist.append(item.clone(action="alfabeto", title="Películas 4K" + " [A-Z]", url=item.channel_host + "peliculas-hd/4kultrahd/")) return itemlist @@ -155,28 +160,41 @@ def alfabeto(item): logger.info() itemlist = [] - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = '' + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") patron = '<ul class="alfabeto">(.*?)</ul>' - if data: - data = scrapertools.get_match(data, patron) - else: - return itemlist + if not data or not scrapertools.find_single_match(data, patron): + logger.error("ERROR 01: ALFABETO: La Web no responde o ha cambiado de URL: " + item.url + data) + #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú + item, data = generictools.fail_over_newpct1(item, patron) + + if not data: #Si no ha logrado encontrar nada, salimos + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: ALFABETO: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + elif item.channel_alt: #Si ha habido fail-over, lo comento + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR] [ALT ] en uso')) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel_alt.capitalize() + '[/COLOR] inaccesible')) + + if item.url_alt: del item.url_alt + del item.channel_alt + + data = scrapertools.get_match(data, patron) patron = '<a href="([^"]+)"[^>]+>([^>]+)</a>' matches = re.compile(patron, re.DOTALL).findall(data) if not matches: - logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) + logger.error("ERROR 02: ALFABETO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: ALFABETO: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos for scrapedurl, scrapedtitle in matches: title = scrapedtitle.upper() - url = scrapedurl - itemlist.append(Item(channel=item.channel, action="listado", title=title, url=url, extra=item.extra)) + itemlist.append(item.clone(action="listado", title=title, url=scrapedurl)) return itemlist @@ -191,11 +209,21 @@ def listado(item): if item.totalItems: del item.totalItems + data = '' try: - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) except: + pass + + patron = '<ul class="' + clase + '">(.*?)</ul>' #seleccionamos el bloque que nos interesa + if not data or (not scrapertools.find_single_match(data, patron) and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data): logger.error("ERROR 01: LISTADO: La Web no responde o ha cambiado de URL: " + item.url + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: LISTADO:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú + item, data = generictools.fail_over_newpct1(item, patron) + + if not data: #Si no ha logrado encontrar nada, salimos + itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: LISTADO: La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #Establecemos los valores básicos en función del tipo de contenido @@ -218,7 +246,7 @@ def listado(item): fichas = scrapertools.get_match(data, patron) if not fichas and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data: #error logger.error("ERROR 02: LISTADO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos elif '<h3><strong>( 0 ) Resultados encontrados </strong>' in data: #no hay vídeos return itemlist @@ -235,7 +263,7 @@ def listado(item): matches = re.compile(patron, re.DOTALL).findall(fichas) if not matches: #error logger.error("ERROR 02: LISTADO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + fichas) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #logger.debug("MATCHES: " + str(len(matches))) @@ -460,13 +488,21 @@ def listado(item): def listado_busqueda(item): logger.info() - - host = 'http://%s/' % scrapertools.find_single_match(item.url, '(\w+\.com)\/') + + #Renombramos el canal al nombre de clone elegido. Actualizados URL + host = scrapertools.find_single_match(item.url, '(http.?\:\/\/(?:www.)?\w+\.\w+\/)') + #item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/') + if item.category and item.category != "newest": + item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() itemlist = [] cnt_tot = 40 # Poner el num. máximo de items por página. Dejamos que la web lo controle cnt_title = 0 # Contador de líneas insertadas en Itemlist cnt_pag = 0 # Contador de líneas leídas de Matches + timeout_search = 5 # Timeout un poco más largo para las búsquedas + if timeout > 5: + timeout_search = timeout # Timeout un poco más largo para las búsquedas + data = '' if item.cnt_pag: cnt_pag = item.cnt_pag # Se guarda en la lista de páginas anteriores en Item @@ -493,21 +529,21 @@ def listado_busqueda(item): #Máximo num. de líneas permitidas por TMDB. Máx de 5 páginas por Itemlist para no degradar el rendimiento while cnt_title <= cnt_tot and cnt_next < 5: - pattern = '<ul class="%s">(.*?)</ul>' % item.pattern #seleccionamos el bloque que nos interesa try: - data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, post=item.post).data) + data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, post=item.post, timeout=timeout_search).data) except: pass - cnt_next += 1 - if not data or not scrapertools.find_single_match(data, pattern): + cnt_next += 1 + pattern = '<ul class="%s">(.*?)</ul>' % item.pattern #seleccionamos el bloque que nos interesa + if not data or (not scrapertools.find_single_match(data, pattern) and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data): logger.error("ERROR 01: LISTADO_BUSQUEDA: La Web no responde o ha cambiado de URL: " + item.url + item.post + " / DATA: " + data) #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú item, data = generictools.fail_over_newpct1(item, pattern) if not data: #Si no ha logrado encontrar nada, salimos itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: LISTADO_BUSQUEDA:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: LISTADO_BUSQUEDA:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos elif item.channel_alt: #Si ha habido fail-over, lo comento host = host.replace(item.channel_alt, item.channel) @@ -531,7 +567,6 @@ def listado_busqueda(item): pattern = '<ul class="%s">(.*?)</ul>' % item.pattern #seleccionamos el bloque que nos interesa data_alt = data data = scrapertools.get_match(data, pattern) - #pattern = '<li[^>]*><a href="(?P<url>[^"]+).*?<img.*?src="(?P<thumb>[^"]+)?".*?<h2.*?>(?P<title>.*?)?<\/h2>' pattern = '<li[^>]*><a href="(?P<scrapedurl>[^"]+).*?' #url pattern += 'title="(?P<scrapedtitle>[^"]+).*?' #título pattern += '<img.*?src="(?P<scrapedthumbnail>[^"]+)?".*?' #thumb @@ -541,7 +576,8 @@ def listado_busqueda(item): matches_alt = re.compile(pattern, re.DOTALL).findall(data) if not matches_alt and not '<h3><strong>( 0 ) Resultados encontrados </strong>' in data_alt: #error logger.error("ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / DATA: " + data_alt) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web. Reportar el error con el log')) + item, itemlist = generictools.post_tmdb_listado(item, itemlist) #Pintamos los datos de fail-over, si los hay return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #Ahora se hace una simulación para saber cuantas líneas podemos albergar en este Itemlist. @@ -830,14 +866,14 @@ def listado_busqueda(item): url_tvshow = host + calidad_mps + real_title_mps + "/" #... otras no. A probar... #Leemos la página, a ver si es una página de episodios - data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_id).data) + data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_id, timeout=timeout).data) data_serie = unicode(data_serie, "iso-8859-1", errors="replace").encode("utf-8") data_serie = data_serie.replace("chapters", "buscar-list") pattern = '<ul class="%s">(.*?)</ul>' % "buscar-list" #Patrón de lista de episodios if not scrapertools.find_single_match(data_serie, pattern) and serieid: #no es válida la página, #intentarlo con la otra url - data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_tvshow).data) + data_serie = data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_tvshow, timeout=timeout).data) data_serie = unicode(data_serie, "iso-8859-1", errors="replace").encode("utf-8") data_serie = data_serie.replace("chapters", "buscar-list") @@ -876,9 +912,10 @@ def findvideos(item): from core import channeltools logger.info() - #Renombramos el canal al nombre de clone elegido - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() + #Renombramos el canal al nombre de clone elegido. Actualizados URL + host = scrapertools.find_single_match(item.url, '(http.?\:\/\/(?:www.)?\w+\.\w+\/)') + #item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/') + item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() itemlist = [] @@ -987,8 +1024,9 @@ def findvideos(item): excluir_enlaces_descargas = [] #Lista vacía de servidores excluidos en Descargar # Descarga la página + data = '' try: - data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url, timeout=timeout).data) except: pass @@ -1001,7 +1039,7 @@ def findvideos(item): item, data = generictools.fail_over_newpct1(item, patron) if not data: #Si no ha logrado encontrar nada, salimos itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: FINDVIDEOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: FINDVIDEOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") @@ -1029,7 +1067,7 @@ def findvideos(item): item_local.url = scrapertools.find_single_match(data, patron) if not item_local.url: #error logger.error("ERROR 02: FINDVIDEOS: El archivo Torrent no existe o ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: FINDVIDEOS: El archivo Torrent no existe o ha cambiado la estructura de la Web. Verificar en la Web y reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: FINDVIDEOS: El archivo Torrent no existe o ha cambiado la estructura de la Web. Verificar en la Web y reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos item_local.url = item_local.url.replace(" ", "%20") #sustituimos espacios por %20, por si acaso #logger.debug("Patron: " + patron + " url: " + item_local.url) @@ -1054,6 +1092,8 @@ def findvideos(item): #logger.debug(item_local) # VER vídeos, descargar vídeos un link, o múltiples links + data = scrapertools.find_single_match(data, '<div id="tab1" class="tab_content"(.*?<\/ul>(?:<div.*?>)?<\/div><\/div><\/div>)') #Seleccionar el bloque para evitar duplicados + host_dom = host.replace("https://", "").replace("http://", "").replace("www.", "") data = data.replace("http://tumejorserie.com/descargar/url_encript.php?link=", "(") data = re.sub(r'javascript:;" onClick="popup\("http:\/\/(?:www.)?' + host_dom + '\w{1,9}\/library\/include\/ajax\/get_modallinks.php\?links=', "", data) @@ -1066,7 +1106,7 @@ def findvideos(item): enlaces_ver = re.compile(patron, re.DOTALL).findall(data) enlaces_descargar = enlaces_ver #logger.debug(enlaces_ver) - + #Recorre todos los links de VER, si está permitido cnt_enl_ver = 1 cnt_enl_verif = 1 @@ -1100,7 +1140,7 @@ def findvideos(item): if verificar_enlaces_veronline != 0: #Se quiere verificar si el link está activo? if cnt_enl_verif <= verificar_enlaces_veronline or verificar_enlaces_veronline == -1: #contador? #Llama a la subfunción de check_list_links(itemlist) para cada link de servidor - item_local.alive = servertools.check_video_link(enlace, servidor) #activo el link ? + item_local.alive = servertools.check_video_link(enlace, servidor, timeout=timeout) #activo el link ? if verificar_enlaces_veronline_validos: #Los links tienen que ser válidos para contarlos? if item_local.alive == "Ok": #Sí cnt_enl_verif += 1 #Movemos los contadores @@ -1190,7 +1230,7 @@ def findvideos(item): if verificar_enlaces_descargas != 0: #Se quiere verificar si el link está activo? if cnt_enl_verif <= verificar_enlaces_descargas or verificar_enlaces_descargas == -1: #contador? #Llama a la subfunción de check_list_links(itemlist) para primer link de servidor - item_local.alive = servertools.check_video_link(enlace, servidor) #activo el link ? + item_local.alive = servertools.check_video_link(enlace, servidor, timeout=timeout) #activo el link ? if verificar_enlaces_descargas_validos: #Los links tienen que ser válidos para contarlos? if item_local.alive == "Ok": #Sí cnt_enl_verif += 1 #Movemos los contadores @@ -1232,9 +1272,10 @@ def findvideos(item): def episodios(item): logger.info() - #Renombramos el canal al nombre de clone elegido - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() + #Renombramos el canal al nombre de clone elegido. Actualizados URL + host = scrapertools.find_single_match(item.url, '(http.?\:\/\/(?:www.)?\w+\.\w+\/)') + #item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/') + item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() itemlist = [] @@ -1255,7 +1296,7 @@ def episodios(item): data = '' try: - data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url).data) + data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, timeout=timeout).data) patron = '<ul class="%s">(.*?)</ul>' % "buscar-list" # item.pattern data_alt = '' if data: data_alt = scrapertools.get_match(data, patron) @@ -1276,7 +1317,7 @@ def episodios(item): if not data: #No se ha encontrado ningún canal activo para este vídeo itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel.capitalize() + '[/COLOR]: Ningún canal NewPct1 activo')) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: EPISODIOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: EPISODIOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) return itemlist #Busca y pre-carga todas las páginas de episodios que componen las serie, para obtener la url de cada página @@ -1312,7 +1353,7 @@ def episodios(item): break try: if not data: - data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(page).data) + data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(page, timeout=timeout).data) data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") data = data.replace("chapters", "buscar-list") #Compatibilidad con mispelisy.series.com pattern = '<ul class="%s">(.*?)</ul>' % "buscar-list" # item.pattern @@ -1321,7 +1362,7 @@ def episodios(item): raise except: logger.error("ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / " + str(list_pages) + " / DATA: " + str(data)) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos if "pelisyseries.com" in item.url: @@ -1331,7 +1372,7 @@ def episodios(item): matches = re.compile(pattern, re.DOTALL).findall(data) if not matches: #error logger.error("ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos #logger.debug("patron: " + pattern) @@ -1399,7 +1440,7 @@ def episodios(item): match = [m.groupdict() for m in r.finditer(info)][0] if not match: #error logger.error("ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web " + " / PATRON: " + pattern + " / DATA: " + info) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos if match['season'] is None: match['season'] = season #Si no se encuentran valores, pero poner lo básico @@ -1449,8 +1490,6 @@ def episodios(item): if item_local.active: del item_local.active - if item_local.category: - del item_local.category if item_local.infoLabels['title']: del item_local.infoLabels['title'] item_local.context = "['buscar_trailer']" @@ -1467,6 +1506,8 @@ def episodios(item): del item_local.update_last if item_local.update_next: del item_local.update_next + if item_local.channel_host: + del item_local.channel_host itemlist.append(item_local.clone()) @@ -1501,9 +1542,6 @@ def actualizar_titulos(item): def search(item, texto): logger.info("search:" + texto) # texto = texto.replace(" ", "+") - - item.channel = channel_clone_name - if item.category: item.category = channel_clone_name.capitalize() try: item.post = "q=%s" % texto From dcc4b3d1d40c3e0df473bc29e284401b50c29c99 Mon Sep 17 00:00:00 2001 From: Kingbox <37674310+lopezvg@users.noreply.github.com> Date: Wed, 4 Jul 2018 14:41:27 +0200 Subject: [PATCH 51/66] GranTorrent y MejorTorrent: mejoras internas --- plugin.video.alfa/channels/grantorrent.py | 2 ++ plugin.video.alfa/channels/mejortorrent.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/plugin.video.alfa/channels/grantorrent.py b/plugin.video.alfa/channels/grantorrent.py index e4e4de76..597ad7b4 100644 --- a/plugin.video.alfa/channels/grantorrent.py +++ b/plugin.video.alfa/channels/grantorrent.py @@ -680,6 +680,8 @@ def episodios(item): del item_local.update_last if item_local.update_next: del item_local.update_next + if item_local.channel_host: + del item_local.channel_host #Verificamos el idioma por si encontramos algo if not item_local.language: diff --git a/plugin.video.alfa/channels/mejortorrent.py b/plugin.video.alfa/channels/mejortorrent.py index 50c29870..6f270d65 100755 --- a/plugin.video.alfa/channels/mejortorrent.py +++ b/plugin.video.alfa/channels/mejortorrent.py @@ -828,6 +828,21 @@ def episodios(item): item_local.action = "findvideos" item_local.contentType = "episode" item_local.extra = "episodios" + if item_local.library_playcounts: + del item_local.library_playcounts + if item_local.library_urls: + del item_local.library_urls + if item_local.path: + del item_local.path + if item_local.update_last: + del item_local.update_last + if item_local.update_next: + del item_local.update_next + if item_local.channel_host: + del item_local.channel_host + + item_local.title = '' + item_local.context = "['buscar_trailer']" item_local.url = urlparse.urljoin(host, scrapedurl) From 05f18490e5e7e7d08d270cdac298be415a30b8b5 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Wed, 4 Jul 2018 08:57:24 -0500 Subject: [PATCH 52/66] mp4upload: fix --- plugin.video.alfa/servers/mp4upload.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugin.video.alfa/servers/mp4upload.py b/plugin.video.alfa/servers/mp4upload.py index 2efbcf56..83134cb1 100644 --- a/plugin.video.alfa/servers/mp4upload.py +++ b/plugin.video.alfa/servers/mp4upload.py @@ -18,6 +18,8 @@ def get_video_url(page_url, premium=False, user="", password="", video_password= data = data.replace("\\'", "'") media_url = scrapertools.find_single_match(data, '{type:"video/mp4",src:"([^"]+)"}') + if not media_url: + media_url = scrapertools.find_single_match(data, '"file":"([^"]+)') logger.info("media_url=" + media_url) video_urls = list() From 8f406aee767d38324f752efb2e959dd3962b02c2 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Wed, 4 Jul 2018 09:08:39 -0500 Subject: [PATCH 53/66] animeflv: fix --- plugin.video.alfa/channels/animeflv.py | 166 +++---------------------- 1 file changed, 19 insertions(+), 147 deletions(-) diff --git a/plugin.video.alfa/channels/animeflv.py b/plugin.video.alfa/channels/animeflv.py index 84b4fd07..14787bcc 100644 --- a/plugin.video.alfa/channels/animeflv.py +++ b/plugin.video.alfa/channels/animeflv.py @@ -1,9 +1,7 @@ # -*- coding: utf-8 -*- import re -import time import urlparse -import urllib from channels import renumbertools from core import httptools @@ -18,13 +16,10 @@ HOST = "https://animeflv.net/" def mainlist(item): logger.info() - itemlist = list() - itemlist.append(Item(channel=item.channel, action="novedades_episodios", title="Últimos episodios", url=HOST)) itemlist.append(Item(channel=item.channel, action="novedades_anime", title="Últimos animes", url=HOST)) itemlist.append(Item(channel=item.channel, action="listado", title="Animes", url=HOST + "browse?order=title")) - itemlist.append(Item(channel=item.channel, title="Buscar por:")) itemlist.append(Item(channel=item.channel, action="search", title=" Título")) itemlist.append(Item(channel=item.channel, action="search_section", title=" Género", url=HOST + "browse", @@ -35,9 +30,7 @@ def mainlist(item): extra="year")) itemlist.append(Item(channel=item.channel, action="search_section", title=" Estado", url=HOST + "browse", extra="status")) - itemlist = renumbertools.show_option(item.channel, itemlist) - return itemlist @@ -48,36 +41,29 @@ def search(item, texto): texto = texto.replace(" ", "+") post = "value=%s" % texto data = httptools.downloadpage(item.url, post=post).data - try: dict_data = jsontools.load(data) - for e in dict_data: if e["id"] != e["last_id"]: _id = e["last_id"] else: _id = e["id"] - url = "%sanime/%s/%s" % (HOST, _id, e["slug"]) title = e["title"] thumbnail = "%suploads/animes/covers/%s.jpg" % (HOST, e["id"]) new_item = item.clone(action="episodios", title=title, url=url, thumbnail=thumbnail) - if e["type"] != "movie": new_item.show = title new_item.context = renumbertools.context(item) else: new_item.contentType = "movie" new_item.contentTitle = title - itemlist.append(new_item) - except: import sys for line in sys.exc_info(): logger.error("%s" % line) return [] - return itemlist @@ -88,39 +74,30 @@ def search_section(item): data = re.sub(r"\n|\r|\t|\s{2}|-\s", "", data) patron = 'id="%s_select"[^>]+>(.*?)</select>' % item.extra data = scrapertools.find_single_match(data, patron) - matches = re.compile('<option value="([^"]+)">(.*?)</option>', re.DOTALL).findall(data) - for _id, title in matches: url = "%s?%s=%s&order=title" % (item.url, item.extra, _id) itemlist.append(Item(channel=item.channel, action="listado", title=title, url=url, context=renumbertools.context(item))) - return itemlist def newest(categoria): itemlist = [] - if categoria == 'anime': itemlist = novedades_episodios(Item(url=HOST)) - return itemlist def novedades_episodios(item): logger.info() - data = httptools.downloadpage(item.url).data data = re.sub(r"\n|\r|\t|\s{2}|-\s", "", data) data = scrapertools.find_single_match(data, '<h2>Últimos episodios</h2>.+?<ul class="ListEpisodios[^>]+>(.*?)</ul>') - matches = re.compile('<a href="([^"]+)"[^>]+>.+?<img src="([^"]+)".+?"Capi">(.*?)</span>' '<strong class="Title">(.*?)</strong>', re.DOTALL).findall(data) itemlist = [] - for url, thumbnail, str_episode, show in matches: - try: episode = int(str_episode.replace("Episodio ", "")) except ValueError: @@ -135,28 +112,21 @@ def novedades_episodios(item): new_item = Item(channel=item.channel, action="findvideos", title=title, url=url, show=show, thumbnail=thumbnail, fulltitle=title) - itemlist.append(new_item) - return itemlist def novedades_anime(item): logger.info() - data = httptools.downloadpage(item.url).data data = re.sub(r"\n|\r|\t|\s{2}|-\s", "", data) data = scrapertools.find_single_match(data, '<ul class="ListAnimes[^>]+>(.*?)</ul>') - matches = re.compile('href="([^"]+)".+?<img src="([^"]+)".+?<span class=.+?>(.*?)</span>.+?<h3.+?>(.*?)</h3>.+?' '(?:</p><p>(.*?)</p>.+?)?</article></li>', re.DOTALL).findall(data) itemlist = [] - for url, thumbnail, _type, title, plot in matches: - url = urlparse.urljoin(HOST, url) thumbnail = urlparse.urljoin(HOST, thumbnail) - new_item = Item(channel=item.channel, action="episodios", title=title, url=url, thumbnail=thumbnail, fulltitle=title, plot=plot) if _type != "Película": @@ -165,173 +135,75 @@ def novedades_anime(item): else: new_item.contentType = "movie" new_item.contentTitle = title - itemlist.append(new_item) - return itemlist def listado(item): logger.info() - data = httptools.downloadpage(item.url).data data = re.sub(r"\n|\r|\t|\s{2}|-\s", "", data) url_pagination = scrapertools.find_single_match(data, '<li class="active">.*?</li><li><a href="([^"]+)">') - data = scrapertools.find_multiple_matches(data, '<ul class="ListAnimes[^>]+>(.*?)</ul>') data = "".join(data) - matches = re.compile('<a href="([^"]+)">.+?<img src="([^"]+)".+?<span class=.+?>(.*?)</span>.+?<h3.*?>(.*?)</h3>' '.*?</p><p>(.*?)</p>', re.DOTALL).findall(data) - itemlist = [] - for url, thumbnail, _type, title, plot in matches: - url = urlparse.urljoin(HOST, url) thumbnail = urlparse.urljoin(HOST, thumbnail) - new_item = Item(channel=item.channel, action="episodios", title=title, url=url, thumbnail=thumbnail, fulltitle=title, plot=plot) - if _type == "Anime": new_item.show = title new_item.context = renumbertools.context(item) else: new_item.contentType = "movie" new_item.contentTitle = title - itemlist.append(new_item) - if url_pagination: url = urlparse.urljoin(HOST, url_pagination) title = ">> Pagina Siguiente" - itemlist.append(Item(channel=item.channel, action="listado", title=title, url=url)) - return itemlist def episodios(item): logger.info() itemlist = [] - data = httptools.downloadpage(item.url).data data = re.sub(r"\n|\r|\t|\s{2}|-\s", "", data) - - # fix para renumbertools - item.show = scrapertools.find_single_match(data, '<h1 class="Title">(.*?)</h1>') - - if item.plot == "": - item.plot = scrapertools.find_single_match(data, 'Description[^>]+><p>(.*?)</p>') - - matches = re.compile('href="([^"]+)"><figure><img class="[^"]+" data-original="([^"]+)".+?</h3>' - '\s*<p>(.*?)</p>', re.DOTALL).findall(data) - - if matches: - for url, thumb, title in matches: - title = title.strip() - url = urlparse.urljoin(item.url, url) - # thumbnail = item.thumbnail - - try: - episode = int(scrapertools.find_single_match(title, "^.+?\s(\d+)$")) - except ValueError: - season = 1 - episode = 1 - else: - season, episode = renumbertools.numbered_for_tratk(item.channel, item.show, 1, episode) - - title = "%sx%s : %s" % (season, str(episode).zfill(2), item.title) - - itemlist.append(item.clone(action="findvideos", title=title, url=url, thumbnail=thumb, fulltitle=title, - fanart=item.thumbnail, contentType="episode")) - else: - # no hay thumbnail - matches = re.compile('<a href="(/ver/[^"]+)"[^>]+>(.*?)<', re.DOTALL).findall(data) - - for url, title in matches: - title = title.strip() - url = urlparse.urljoin(item.url, url) - thumb = item.thumbnail - - try: - episode = int(scrapertools.find_single_match(title, "^.+?\s(\d+)$")) - except ValueError: - season = 1 - episode = 1 - else: - season, episode = renumbertools.numbered_for_tratk(item.channel, item.show, 1, episode) - - title = "%sx%s : %s" % (season, str(episode).zfill(2), item.title) - - itemlist.append(item.clone(action="findvideos", title=title, url=url, thumbnail=thumb, fulltitle=title, - fanart=item.thumbnail, contentType="episode")) - + info = eval(scrapertools.find_single_match(data, 'anime_info = (.*?);')) + episodes = eval(scrapertools.find_single_match(data, 'var episodes = (.*?);')) + for episode in episodes: + url = '%s/ver/%s/%s-%s' % (HOST, episode[1], info[2], episode[0]) + title = '1x%s Episodio %s' % (episode[0], episode[0]) + itemlist.append(item.clone(title=title, url=url, action='findvideos', show=info[1])) + itemlist = itemlist[::-1] if config.get_videolibrary_support() and len(itemlist) > 0: itemlist.append(Item(channel=item.channel, title="Añadir esta serie a la videoteca", action="add_serie_to_library", extra="episodios")) - return itemlist def findvideos(item): logger.info() - itemlist = [] - data = re.sub(r"\n|\r|\t|\s{2}|-\s", "", httptools.downloadpage(item.url).data) - list_videos = scrapertools.find_multiple_matches(data, 'video\[\d\]\s=\s\'<iframe.+?src="([^"]+)"') - download_list = scrapertools.find_multiple_matches(data, 'href="http://ouo.io/s/y0d65LCP\?s=([^"]+)"') - for i in download_list: - list_videos.append(urllib.unquote_plus(i)) - aux_url = [] - cldup = False - for e in list_videos: - url_api = "https://s3.animeflv.com/check.php?server=%s&v=%s" - # izanagi, yourupload, hyperion - if e.startswith("https://s3.animeflv.com/embed"): - server, v = scrapertools.find_single_match(e, 'server=([^&]+)&v=(.*?)$') - data = httptools.downloadpage(url_api % (server, v)).data.replace("\\", "") - - if '{"error": "Por favor intenta de nuevo en unos segundos", "sleep": 3}' in data: - time.sleep(3) - data = httptools.downloadpage(url_api % (server, v)).data.replace("\\", "") - - if server != "hyperion": - url = scrapertools.find_single_match(data, '"file":"([^"]+)"') - if url: - itemlist.append(item.clone(title="Enlace encontrado en %s" % server, url=url, action="play")) - - else: - # pattern = '"direct":"([^"]+)"' - # url = scrapertools.find_single_match(data, pattern) - # itemlist.append(item.clone(title="Enlace encontrado en %s" % server, url=url, action="play")) - - pattern = '"label":([^,]+),"type":"video/mp4","file":"([^"]+)"' - matches = scrapertools.find_multiple_matches(data, pattern) - - video_urls = [] - for label, url in matches: - video_urls.append([label, "mp4", url]) - if video_urls: - video_urls.sort(key=lambda u: int(u[0])) - itemlist.append(item.clone(title="Enlace encontrado en %s" % server, action="play", - video_urls=video_urls)) - + download_list = scrapertools.find_multiple_matches(data, 'video\[\d+\] = \'<iframe .*?src="(.*?)"') + for url in download_list: + data = httptools.downloadpage(url).data + if 'izanagi' in url: + new_url = url.replace('embed', 'check') + new_data = httptools.downloadpage(new_url).data + url = scrapertools.find_single_match(new_data, '"file":"(.*?)"') else: - if e.startswith("https://cldup.com") and not cldup: - itemlist.append(item.clone(title="Enlace encontrado en Cldup", action="play", url=e)) - cldup = True - aux_url.append(e) - - itemlist.extend(servertools.find_video_items(data=",".join(aux_url))) - for videoitem in itemlist: - videoitem.fulltitle = item.fulltitle - videoitem.channel = item.channel - videoitem.thumbnail = item.thumbnail - + url = scrapertools.find_single_match(data, 'var redir = "(.*?)"') + if url != '': + url = url.replace("\\","") + itemlist.append(item.clone(title='%s', url=url, action='play')) + itemlist = servertools.get_servers_itemlist(itemlist, lambda i: i.title % i.server) return itemlist From 97ff5124bba4842f55ed04e04b17ac11776116d6 Mon Sep 17 00:00:00 2001 From: pipcat <pip@pipcat.com> Date: Wed, 4 Jul 2018 16:40:46 +0200 Subject: [PATCH 54/66] Quitado texto de debug --- plugin.video.alfa/channels/animeyt.py | 4 ---- plugin.video.alfa/channels/pelispedia.py | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/plugin.video.alfa/channels/animeyt.py b/plugin.video.alfa/channels/animeyt.py index 85925a62..40e78e1a 100644 --- a/plugin.video.alfa/channels/animeyt.py +++ b/plugin.video.alfa/channels/animeyt.py @@ -32,10 +32,6 @@ def mainlist(item): itemlist = renumbertools.show_option(item.channel, itemlist) - # ~ prova = 'EIpStovt0/tFerZM4pviHBzddH308TWRR41XnHv9N4tUNih6r+GjCDa/cV1uVUQXEmZd1Hsu2ABzESzBMGiK6XUdRgYZYHImmrIWcn3tfYPCuSWBc2UgwxUtR+WOsov6YiGM5AdgJGFunoN' - # ~ aux = gktools.decode_rijndael(prova, preIV = 'b3512f4972d314da9', key='3e1a854e7d5835ab99d99a29afec8bbb') - # ~ itemlist.append(Item(channel=item.channel, title=aux, action="novedades", url=HOST)) - return itemlist diff --git a/plugin.video.alfa/channels/pelispedia.py b/plugin.video.alfa/channels/pelispedia.py index 98cafb6d..4c7b65b8 100644 --- a/plugin.video.alfa/channels/pelispedia.py +++ b/plugin.video.alfa/channels/pelispedia.py @@ -556,7 +556,7 @@ def play(item): url = item.url.replace('/embed/', '/stream/') + '/' + token # 3- Descargar página - data = gktools.get_data_with_cookie(url, item.url, ck) + data = gktools.get_data_with_cookie(url, ck, item.url) # 4- Extraer enlaces url = scrapertools.find_single_match(data, '<meta (?:name|property)="og:url" content="([^"]+)"') From 72a69458a971a75a95e2f277016651fcb90e1b0f Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Wed, 4 Jul 2018 10:04:16 -0500 Subject: [PATCH 55/66] tvvip: fix videoteca --- plugin.video.alfa/channels/tvvip.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/plugin.video.alfa/channels/tvvip.py b/plugin.video.alfa/channels/tvvip.py index 4b47bd66..b23f092d 100644 --- a/plugin.video.alfa/channels/tvvip.py +++ b/plugin.video.alfa/channels/tvvip.py @@ -3,7 +3,6 @@ import os import re import sys -import unicodedata import urllib import time @@ -15,10 +14,10 @@ from core import servertools from core import tmdb from core.item import Item from platformcode import config, logger -from platformcode import platformtools host = "http://tv-vip.com" + def mainlist(item): logger.info() item.viewmode = "movie" @@ -511,13 +510,13 @@ def series_library(item): # Funcion unicamente para añadir/actualizar series a la libreria lista_episodios = [] show = item.show.strip() - data_serie = anti_cloudflare(item.url, host=host, headers=headers) + data_serie = httptools.downloadpage(item.url).data data_serie = jsontools.load(data_serie) # Para series que en la web se listan divididas por temporadas if data_serie["sortedPlaylistChilds"]: for season_name in data_serie["sortedPlaylistChilds"]: url_season = host + "/json/playlist/%s/index.json" % season_name['id'] - data = anti_cloudflare(url_season, host=host, headers=headers) + data = httptools.downloadpage(url_season).data data = jsontools.load(data) if data["sortedRepoChilds"]: for child in data["sortedRepoChilds"]: @@ -623,7 +622,7 @@ def listas(item): logger.info() # Para añadir listas a la videoteca en carpeta CINE itemlist = [] - data = anti_cloudflare(item.url, host=host, headers=headers) + data = httptools.downloadpage(item.url).data data = jsontools.load(data) head = header_string + get_cookie_value() for child in data["sortedRepoChilds"]: From fd81998d3b6f755a508a79fd5502d0fa3e0d096a Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Wed, 4 Jul 2018 10:05:03 -0500 Subject: [PATCH 56/66] descargasmix: desactivado, web no funciona --- plugin.video.alfa/channels/descargasmix.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin.video.alfa/channels/descargasmix.json b/plugin.video.alfa/channels/descargasmix.json index 1955280c..a7635136 100644 --- a/plugin.video.alfa/channels/descargasmix.json +++ b/plugin.video.alfa/channels/descargasmix.json @@ -2,7 +2,7 @@ "id": "descargasmix", "name": "DescargasMIX", "language": ["cast", "lat"], - "active": true, + "active": false, "adult": false, "thumbnail": "descargasmix.png", "banner": "descargasmix.png", @@ -77,4 +77,4 @@ "visible": true } ] -} \ No newline at end of file +} From f82e9120a1ddbb9d0ee9586b9436663d34cd8dd2 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Wed, 4 Jul 2018 10:06:18 -0500 Subject: [PATCH 57/66] guaridavalencianista: contenido no es para Alfa --- plugin.video.alfa/channels/guaridavalencianista.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin.video.alfa/channels/guaridavalencianista.json b/plugin.video.alfa/channels/guaridavalencianista.json index e712f441..30e2e9d2 100755 --- a/plugin.video.alfa/channels/guaridavalencianista.json +++ b/plugin.video.alfa/channels/guaridavalencianista.json @@ -1,7 +1,7 @@ { "id": "guaridavalencianista", "name": "La Guarida valencianista", - "active": true, + "active": false, "adult": false, "language": ["cast"], "thumbnail": "guaridavalencianista.png", @@ -9,4 +9,4 @@ "categories": [ "documentary" ] -} \ No newline at end of file +} From d1c2778dd137726ad68d37eb8cb13ef4aa7652cf Mon Sep 17 00:00:00 2001 From: Kingbox <37674310+lopezvg@users.noreply.github.com> Date: Wed, 4 Jul 2018 18:25:16 +0200 Subject: [PATCH 58/66] MejorTorrent: mejora interna --- plugin.video.alfa/channels/mejortorrent.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin.video.alfa/channels/mejortorrent.py b/plugin.video.alfa/channels/mejortorrent.py index 6f270d65..8fc53494 100755 --- a/plugin.video.alfa/channels/mejortorrent.py +++ b/plugin.video.alfa/channels/mejortorrent.py @@ -495,7 +495,7 @@ def listado_busqueda(item): matches += re.compile(patron, re.DOTALL).findall(data) matches_cnt = len(matches) - if not matches and not 'Se han encontrado <b>0</b> resultados.' in data: #error + if not matches and not 'Se han encontrado <b>0</b> resultados.' and not "href='/juego-descargar-torrent" in data: #error logger.error("ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos From edb8b2a149485a99e2c8a6206eebb3a2576eca7c Mon Sep 17 00:00:00 2001 From: pipcat <pip@pipcat.com> Date: Wed, 4 Jul 2018 19:32:59 +0200 Subject: [PATCH 59/66] Correccion en buscador --- plugin.video.alfa/channels/peliculasdk.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin.video.alfa/channels/peliculasdk.py b/plugin.video.alfa/channels/peliculasdk.py index dd5fcb50..689123b5 100644 --- a/plugin.video.alfa/channels/peliculasdk.py +++ b/plugin.video.alfa/channels/peliculasdk.py @@ -124,8 +124,8 @@ def buscador(item): titulo = '%s [%s][%s]' % (scrapedtitle, ','.join([a[:3] for a in audios]), calidad) - # Parece que las pelis de adultos se mezclan en la búsqueda y lo único que las diferencia es que no tienen Calidad - if calidades or __adult_mode__ != 0: + # Parece que las pelis de adultos se mezclan en la búsqueda y lo único que las diferencia es que no tienen Calidad y Audios + if (calidad and audios) or __adult_mode__ != 0: itemlist.append(Item(channel=item.channel, action="findvideos", url=scrapedurl, title=titulo, contentTitle=scrapedtitle, From 023aae84959a56bacc91c482d2af6aedf9938467 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Wed, 4 Jul 2018 12:42:15 -0500 Subject: [PATCH 60/66] areadocumental: fix --- plugin.video.alfa/channels/areadocumental.py | 61 +++++++++++++++----- 1 file changed, 48 insertions(+), 13 deletions(-) diff --git a/plugin.video.alfa/channels/areadocumental.py b/plugin.video.alfa/channels/areadocumental.py index b360e078..f43600d2 100644 --- a/plugin.video.alfa/channels/areadocumental.py +++ b/plugin.video.alfa/channels/areadocumental.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- import urllib +import re from core import httptools from core import scrapertools @@ -25,7 +26,7 @@ def mainlist(item): itemlist.append(item.clone(title="Novedades", action="entradas", url= host + "/resultados-reciente.php?buscar=&genero=", fanart="http://i.imgur.com/Q7fsFI6.png")) - itemlist.append(item.clone(title="Destacados", action="entradas", + itemlist.append(item.clone(title="Destacados", action="destacados", url= host + "/resultados-destacados.php?buscar=&genero=", fanart="http://i.imgur.com/Q7fsFI6.png")) itemlist.append(item.clone(title="Categorías", action="cat", url= host + "/index.php", @@ -37,6 +38,12 @@ def mainlist(item): return itemlist +def get_source(url): + logger.info() + data = httptools.downloadpage(url).data + data = re.sub(r'\n|\r|\t| |<br>|\s{2,}|"|\(|\)', "", data) + return data + def configuracion(item): from platformcode import platformtools @@ -95,22 +102,19 @@ def indice(item): def cat(item): logger.info() itemlist = [] - data = httptools.downloadpage(item.url).data - bloque = scrapertools.find_single_match(data, '<ul class="menu">(.*?)</nav>') - matches = scrapertools.find_multiple_matches(bloque, "<li>.*?<a href='([^']+)'.*?>(.*?)</a>") - for scrapedurl, scrapedtitle in matches: - scrapedurl = host + "/" + scrapedurl - if not "span" in scrapedtitle: - scrapedtitle = "[COLOR gold] **" + scrapedtitle + "**[/COLOR]" - itemlist.append(item.clone(action="entradas", title=scrapedtitle, url=scrapedurl)) - else: - scrapedtitle = scrapertools.htmlclean(scrapedtitle) - itemlist.append(item.clone(action="entradas", title=scrapedtitle, url=scrapedurl)) + data = get_source(item.url) + bloques = scrapertools.find_multiple_matches(data, '</li><li class=dropdown>.*?</ul>') + for bloque in bloques: + matches = scrapertools.find_multiple_matches(bloque, "<li><a href=(.*?)>(.*?)<") + for scrapedurl, scrapedtitle in matches: + scrapedurl = host + "/" + scrapedurl + if not "TODO" in scrapedtitle: + itemlist.append(item.clone(action="entradas", title=scrapedtitle, url=scrapedurl)) return itemlist -def entradas(item): +def destacados(item): logger.info() itemlist = [] item.text_color = color2 @@ -161,6 +165,37 @@ def entradas(item): return itemlist + +def entradas(item): + logger.info() + itemlist = [] + item.text_color = color2 + + data = get_source(item.url) + + patron = 'class=imagen.*?href=(.*?)><img.*?src=(.*?) alt=.*?title=(.*?)/>.*?</h2>(\d{4}) (.*?)<.*?space>(.*?)<' + matches = scrapertools.find_multiple_matches(data, patron) + for scrapedurl, scrapedthumbnail, scrapedtitle, year, genero, scrapedplot in matches: + infolab = {'plot': scrapedplot, 'genre': genero} + scrapedurl = host + "/" + scrapedurl + scrapedthumbnail = host +'/'+ scrapedthumbnail + title = scrapedtitle + if not year.isspace() and year != "": + infolab['year'] = int(year) + + itemlist.append(item.clone(action="findvideos", title=title, fulltitle=title, + url=scrapedurl, thumbnail=scrapedthumbnail, infoLabels=infolab, contentTitle = + title)) + + next_page = scrapertools.find_single_match(data, '<a class=last>.*?</a></li><li><a href=(.*?)>.*?</a>') + next_page = scrapertools.htmlclean(next_page) + if next_page: + itemlist.append(item.clone(action="entradas", title=">> Página Siguiente", url=host + next_page, + text_color=color3)) + + return itemlist + + def findvideos(item): logger.info() itemlist = [] From 96ffc3d7bb64ed39329ceda7a16605c71b56a7cf Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Wed, 4 Jul 2018 14:05:04 -0500 Subject: [PATCH 61/66] cuenvana3: nuevo server --- plugin.video.alfa/channels/cuevana3.json | 69 ++++++++ plugin.video.alfa/channels/cuevana3.py | 200 +++++++++++++++++++++++ 2 files changed, 269 insertions(+) create mode 100644 plugin.video.alfa/channels/cuevana3.json create mode 100644 plugin.video.alfa/channels/cuevana3.py diff --git a/plugin.video.alfa/channels/cuevana3.json b/plugin.video.alfa/channels/cuevana3.json new file mode 100644 index 00000000..9734b502 --- /dev/null +++ b/plugin.video.alfa/channels/cuevana3.json @@ -0,0 +1,69 @@ +{ + "id": "cuevana3", + "name": "Cuevana 3", + "active": true, + "adult": false, + "language": ["lat", "cast"], + "thumbnail": "http://www.cuevana3.com/wp-content/uploads/2017/08/logo-v10.png", + "banner": "", + "version": 1, + "categories": [ + "movies" + ], + "settings": [ + { + "id": "include_in_global_search", + "type": "bool", + "label": "Incluir en busqueda global", + "default": false, + "enabled": false, + "visible": false + }, + { + "id": "filter_languages", + "type": "list", + "label": "Mostrar enlaces en idioma...", + "default": 0, + "enabled": true, + "visible": true, + "lvalues": [ + "No filtrar", + "LAT", + "CAST", + "VOSE" + ] + }, + { + "id": "include_in_newest_peliculas", + "type": "bool", + "label": "Incluir en Novedades - Peliculas", + "default": true, + "enabled": true, + "visible": true + }, + { + "id": "include_in_newest_infantiles", + "type": "bool", + "label": "Incluir en Novedades - Infantiles", + "default": true, + "enabled": true, + "visible": true + }, + { + "id": "include_in_newest_terror", + "type": "bool", + "label": "Incluir en Novedades - Terror", + "default": true, + "enabled": true, + "visible": true + }, + { + "id": "include_in_newest_documentales", + "type": "bool", + "label": "Incluir en Novedades - Documentales", + "default": true, + "enabled": true, + "visible": true + } + ] +} diff --git a/plugin.video.alfa/channels/cuevana3.py b/plugin.video.alfa/channels/cuevana3.py new file mode 100644 index 00000000..8265426b --- /dev/null +++ b/plugin.video.alfa/channels/cuevana3.py @@ -0,0 +1,200 @@ +# -*- coding: utf-8 -*- +# -*- Channel Cuevana 3 -*- +# -*- Created for Alfa-addon -*- +# -*- By the Alfa Develop Group -*- + +import re +import urllib +from channelselector import get_thumb +from core import httptools +from core import scrapertools +from core import servertools +from core import tmdb +from core.item import Item +from platformcode import config, logger +from channels import autoplay +from channels import filtertools + + +host = 'http://www.cuevana3.com/' + +IDIOMAS = {'Latino': 'LAT', 'Español': 'CAST', 'Subtitulado':'VOSE'} +list_language = IDIOMAS.values() +list_quality = [] +list_servers = ['fastplay', 'rapidvideo', 'streamplay', 'flashx', 'streamito', 'streamango', 'vidoza'] + + +def mainlist(item): + logger.info() + + autoplay.init(item.channel, list_servers, list_quality) + + itemlist = list() + itemlist.append(item.clone(title="Ultimas", action="list_all", url=host, thumbnail=get_thumb('last', auto=True))) + itemlist.append(item.clone(title="Generos", action="section", section='genre', + thumbnail=get_thumb('genres', auto=True))) + itemlist.append(item.clone(title="Castellano", action="list_all", url= host+'?s=Español', + thumbnail=get_thumb('audio', auto=True))) + itemlist.append(item.clone(title="Latino", action="list_all", url=host + '?s=Latino', + thumbnail=get_thumb('audio', auto=True))) + itemlist.append(item.clone(title="VOSE", action="list_all", url=host + '?s=Subtitulado', + thumbnail=get_thumb('audio', auto=True))) + itemlist.append(item.clone(title="Alfabetico", action="section", section='alpha', + thumbnail=get_thumb('alphabet', auto=True))) + itemlist.append(item.clone(title="Buscar", action="search", url=host+'?s=', + thumbnail=get_thumb('search', auto=True))) + + autoplay.show_option(item.channel, itemlist) + + return itemlist + + +def get_source(url): + logger.info() + data = httptools.downloadpage(url).data + data = re.sub(r'"|\n|\r|\t| |<br>|\s{2,}', "", data) + return data + + +def list_all(item): + logger.info() + itemlist = [] + + try: + data = get_source(item.url) + if item.section == 'alpha': + patron = '<span class=Num>\d+.*?<a href=(.*?) class.*?' + patron += 'src=(.*?) class.*?<strong>(.*?)</strong>.*?<td>(\d{4})</td>' + else: + patron = '<article id=post-.*?<a href=(.*?)>.*?src=(.*?) alt=.*?' + patron += '<h2 class=Title>(.*?)<\/h2>.*?<span class=Year>(.*?)<\/span>' + data = get_source(item.url) + matches = re.compile(patron, re.DOTALL).findall(data) + + for scrapedurl, scrapedthumbnail, scrapedtitle, year in matches: + + url = scrapedurl + if "|" in scrapedtitle: + scrapedtitle= scrapedtitle.split("|") + contentTitle = scrapedtitle[0].strip() + else: + contentTitle = scrapedtitle + + contentTitle = re.sub('\(.*?\)','', contentTitle) + + title = '%s [%s]'%(contentTitle, year) + thumbnail = 'http:'+scrapedthumbnail + itemlist.append(item.clone(action='findvideos', + title=title, + url=url, + thumbnail=thumbnail, + contentTitle=contentTitle, + infoLabels={'year':year} + )) + tmdb.set_infoLabels_itemlist(itemlist, True) + + # Paginación + + url_next_page = scrapertools.find_single_match(data,'<a class=next.*?href=(.*?)>') + if url_next_page: + itemlist.append(item.clone(title="Siguiente >>", url=url_next_page, action='list_all', section=item.section)) + except: + pass + return itemlist + +def section(item): + logger.info() + itemlist = [] + + data = get_source(host) + + action = 'list_all' + if item.section == 'quality': + patron = 'menu-item-object-category.*?menu-item-\d+><a href=(.*?)>(.*?)<\/a>' + elif item.section == 'genre': + patron = 'category menu-item-\d+><a href=(http:.*?)>(.*?)</a>' + elif item.section == 'year': + patron = 'custom menu-item-15\d+><a href=(.*?\?s.*?)>(\d{4})<\/a><\/li>' + elif item.section == 'alpha': + patron = '<li><a href=(.*?letter.*?)>(.*?)</a>' + action = 'list_all' + matches = re.compile(patron, re.DOTALL).findall(data) + + for data_one, data_two in matches: + + url = data_one + title = data_two + if title != 'Ver más': + new_item = Item(channel=item.channel, title= title, url=url, action=action, section=item.section) + itemlist.append(new_item) + + return itemlist + + +def findvideos(item): + logger.info() + + itemlist = [] + data = get_source(item.url) + patron = 'domain=(.*?) class=.*?><span>.*?</span>.*?<span>\d+ - (.*?) - (.*?)</span>' + matches = re.compile(patron, re.DOTALL).findall(data) + for url, language, quality in matches: + if url != '' and 'youtube' not in url: + itemlist.append(item.clone(title='%s', url=url, language=IDIOMAS[language], quality=quality, action='play')) + + itemlist = servertools.get_servers_itemlist(itemlist, lambda i: i.title % '%s [%s] [%s]'%(i.server.capitalize(), + i.language, i.quality)) + tmdb.set_infoLabels_itemlist(itemlist, True) + try: + itemlist.append(trailer) + except: + pass + + # Requerido para FilterTools + itemlist = filtertools.get_links(itemlist, item, list_language) + + # Requerido para AutoPlay + + autoplay.start(itemlist, item) + + if config.get_videolibrary_support() and len(itemlist) > 0 and item.extra != 'findvideos': + itemlist.append( + Item(channel=item.channel, title='[COLOR yellow]Añadir esta pelicula a la videoteca[/COLOR]', url=item.url, + action="add_pelicula_to_library", extra="findvideos", contentTitle=item.contentTitle)) + + + return itemlist + + +def search(item, texto): + logger.info() + texto = texto.replace(" ", "+") + item.url = item.url + texto + + if texto != '': + return list_all(item) + else: + return [] + + +def newest(categoria): + logger.info() + itemlist = [] + item = Item() + try: + if categoria == 'infantiles': + item.url = host+'/category/animacion' + elif categoria == 'terror': + item.url = host+'/category/terror' + elif categoria == 'documentales': + item.url = host+'/category/documental' + itemlist = list_all(item) + if itemlist[-1].title == 'Siguiente >>': + itemlist.pop() + except: + import sys + for line in sys.exc_info(): + logger.error("{0}".format(line)) + return [] + + return itemlist From 9b1f39d5dbe8cc1746fc511abb1cdfe113208e71 Mon Sep 17 00:00:00 2001 From: Alfa <30527549+alfa-addon@users.noreply.github.com> Date: Wed, 4 Jul 2018 14:40:36 -0500 Subject: [PATCH 62/66] settings test tools --- plugin.video.alfa/channels/setting.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/plugin.video.alfa/channels/setting.py b/plugin.video.alfa/channels/setting.py index 1593ac7c..e067bd4f 100644 --- a/plugin.video.alfa/channels/setting.py +++ b/plugin.video.alfa/channels/setting.py @@ -293,6 +293,22 @@ def submenu_tools(item): logger.info() itemlist = list() + #Herramientas de testeo masivo + test_path = os.path.join(config.get_runtime_path(), "channels/test.py") + + if filetools.exists(test_path): + itemlist.append(Item(channel=CHANNELNAME, title="Herramientas de Testeo masivo", action="", folder=False, + thumbnail=get_thumb("channels.png"))) + itemlist.append(Item(title='- Testear canales ...', channel="test", action="channel_test_selected")) + itemlist.append(Item(title='- Testear servidores ...', channel="test", action="server_test_selected")) + itemlist.append(Item(title='- Testear todos los canales!', channel="test", action="channel_test_all")) + itemlist.append(Item(title='- Testear todos los servidores!', channel="test", action="server_test_all")) + itemlist.append(Item(title='- Testear novedades!', channel="test", action="news_test_all")) + itemlist.append(Item(title='- Upload tests to web!', channel="test", action="web_update_tests")) + itemlist.append( + Item(channel=CHANNELNAME, action="", title="", folder=False, thumbnail=get_thumb("setting_0.png"))) + + itemlist.append(Item(channel=CHANNELNAME, title=config.get_localized_string(60564), action="", folder=False, thumbnail=get_thumb("channels.png"))) itemlist.append(Item(channel=CHANNELNAME, title=config.get_localized_string(60565), action="conf_tools", From 9ddb1ee5b6ec5824cf729d13fbb47106fce15afe Mon Sep 17 00:00:00 2001 From: Alfa <30527549+alfa-addon@users.noreply.github.com> Date: Wed, 4 Jul 2018 14:47:49 -0500 Subject: [PATCH 63/66] v2.5.22 --- plugin.video.alfa/addon.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/plugin.video.alfa/addon.xml b/plugin.video.alfa/addon.xml index f9207650..be9b6ef4 100755 --- a/plugin.video.alfa/addon.xml +++ b/plugin.video.alfa/addon.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<addon id="plugin.video.alfa" name="Alfa" version="2.5.21" provider-name="Alfa Addon"> +<addon id="plugin.video.alfa" name="Alfa" version="2.5.22" provider-name="Alfa Addon"> <requires> <import addon="xbmc.python" version="2.1.0"/> <import addon="script.module.libtorrent" optional="true"/> @@ -22,14 +22,14 @@ » grantorrent » descargas2020 » torrentlocura » torrentrapid » tumejortorrent » tvsinpagar - » mispelisyseries » playview - » clipwatching » cloudvideo - » filevideo » upvid - » vidzella » vivo - » watchvideo » vshare + » mispelisyseries » mejortorrent + » allcalidad » poseidonhd + » tvvip » animeflv + » areadocumental » cuevana3 + » newpct1 » peliculasdk + » animeyt » pelispedia ¤ arreglos internos y actualizado la versión mediaserver - - ¤ Agradecimientos a @alaquepasa y @Pixo506 por colaborar con ésta versión. + ¤ Agradecimientos al equipo ISOD y @alaquepasa por colaborar con ésta versión. </news> <description lang="es">Navega con Kodi por páginas web para ver sus videos de manera fácil.</description> From e0c60d524cede41b56cf4fc7f8f7233fde38abbb Mon Sep 17 00:00:00 2001 From: alaquepasa <39385022+alaquepasa@users.noreply.github.com> Date: Wed, 4 Jul 2018 22:32:20 +0200 Subject: [PATCH 64/66] Update config.py --- mediaserver/platformcode/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediaserver/platformcode/config.py b/mediaserver/platformcode/config.py index 16625238..e8b82980 100644 --- a/mediaserver/platformcode/config.py +++ b/mediaserver/platformcode/config.py @@ -18,7 +18,7 @@ def get_addon_version(linea_inicio=0, total_lineas=2): ''' Devuelve el número de de versión del addon, obtenido desde el archivo addon.xml ''' - path = get_runtime_path() + "\\addon.xml" + path = os.path.join(get_runtime_path(), "addon.xml") f = open(path, "rb") data = [] for x, line in enumerate(f): From d69bf51152747e0c0f061fcf1094224035f94e28 Mon Sep 17 00:00:00 2001 From: Alfa <30527549+alfa-addon@users.noreply.github.com> Date: Wed, 4 Jul 2018 16:03:27 -0500 Subject: [PATCH 65/66] Update config.py --- plugin.video.alfa/platformcode/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin.video.alfa/platformcode/config.py b/plugin.video.alfa/platformcode/config.py index 2ba77099..7d22bb0c 100644 --- a/plugin.video.alfa/platformcode/config.py +++ b/plugin.video.alfa/platformcode/config.py @@ -19,7 +19,7 @@ def get_addon_version(linea_inicio=0, total_lineas=2): ''' Devuelve el número de de versión del addon, obtenido desde el archivo addon.xml ''' - path = get_runtime_path() + "\\addon.xml" + path = os.path.join(get_runtime_path(), "addon.xml") f = open(path, "rb") data = [] for x, line in enumerate(f): From 3f27e1f22733890dd5d9af6c222f20d2a13a01fe Mon Sep 17 00:00:00 2001 From: Alfa <30527549+alfa-addon@users.noreply.github.com> Date: Wed, 4 Jul 2018 16:15:10 -0500 Subject: [PATCH 66/66] v2.5.23 --- plugin.video.alfa/addon.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin.video.alfa/addon.xml b/plugin.video.alfa/addon.xml index be9b6ef4..4aaa61e3 100755 --- a/plugin.video.alfa/addon.xml +++ b/plugin.video.alfa/addon.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<addon id="plugin.video.alfa" name="Alfa" version="2.5.22" provider-name="Alfa Addon"> +<addon id="plugin.video.alfa" name="Alfa" version="2.5.23" provider-name="Alfa Addon"> <requires> <import addon="xbmc.python" version="2.1.0"/> <import addon="script.module.libtorrent" optional="true"/>