Merge pull request #386 from thedoctor66/master

added localized strings
This commit is contained in:
Alfa
2018-08-08 08:28:25 -05:00
committed by GitHub
13 changed files with 2791 additions and 228 deletions
+12 -12
View File
@@ -37,9 +37,9 @@ ACTION_MOVE_UP = 3
set_animation = False set_animation = False
xinfoplus_set = config.get_setting("infoplus_set") xinfoplus_set = config.get_setting("infoplus_set")
if xinfoplus_set == "Sin animación": if xinfoplus_set == config.get_localized_string(70129):
set_animation = False set_animation = False
if xinfoplus_set == "Con animación": if xinfoplus_set == config.get_localized_string(70130):
set_animation = True set_animation = True
def start(item, recomendaciones=[], from_window=False): def start(item, recomendaciones=[], from_window=False):
@@ -400,7 +400,7 @@ class main(xbmcgui.WindowDialog):
self.plot.autoScroll(11000, 6000, 30000) self.plot.autoScroll(11000, 6000, 30000)
except: except:
xbmc.executebuiltin( xbmc.executebuiltin(
'Notification([COLOR red][B]Actualiza Kodi a su última versión[/B][/COLOR], [COLOR skyblue]para mejor info[/COLOR],8000, "http://i.imgur.com/mHgwcn3.png")') config.get_localized_string(70500))
self.plot.setText(dhe(self.infoLabels.get("plot", ""))) self.plot.setText(dhe(self.infoLabels.get("plot", "")))
xbmc.sleep(200) xbmc.sleep(200)
@@ -842,7 +842,7 @@ class related(xbmcgui.WindowDialog):
self.info_peli.autoScroll(7000, 6000, 30000) self.info_peli.autoScroll(7000, 6000, 30000)
except: except:
xbmc.executebuiltin( xbmc.executebuiltin(
'Notification([COLOR red][B]Actualiza Kodi a su última versión[/B][/COLOR], [COLOR skyblue]para mejor info[/COLOR],8000, "http://i.imgur.com/mHgwcn3.png")') config.get_localized_string(70500))
self.info_peli.setText(self.info) self.info_peli.setText(self.info)
if set_animation: if set_animation:
self.info_peli.setAnimations( self.info_peli.setAnimations(
@@ -859,9 +859,9 @@ class related(xbmcgui.WindowDialog):
('WindowClose', 'effect=zoom end=0% time=1000 condition=true',)]) ('WindowClose', 'effect=zoom end=0% time=1000 condition=true',)])
if self.infoLabels.get("status") == "Ended" and self.item.contentType != "movie": if self.infoLabels.get("status") == "Ended" and self.item.contentType != "movie":
status = "[COLOR aquamarine][B]Finalizada %s[/B][/COLOR]" status = config.get_localized_string(70515)
elif self.infoLabels.get("status") and self.item.contentType != "movie": elif self.infoLabels.get("status") and self.item.contentType != "movie":
status = "[COLOR aquamarine][B]En emisión %s[/B][/COLOR]" status = config.get_localized_string(70516)
else: else:
status = "[COLOR aquamarine][B]%s[/B][/COLOR]" status = "[COLOR aquamarine][B]%s[/B][/COLOR]"
@@ -891,7 +891,7 @@ class related(xbmcgui.WindowDialog):
self.gt_peli = xbmcgui.ControlTextBox(210, 385, 1100, 60, self.fonts["12"]) self.gt_peli = xbmcgui.ControlTextBox(210, 385, 1100, 60, self.fonts["12"])
self.addControl(self.gt_peli) self.addControl(self.gt_peli)
self.gt_peli.setText("[COLOR limegreen][B]Género: [/B][/COLOR]") self.gt_peli.setText("[COLOR limegreen][B]%s[/B][/COLOR]" % config.get_localized_string(70499))
if set_animation: if set_animation:
self.gt_peli.setAnimations( self.gt_peli.setAnimations(
[('conditional', 'effect=slide start=0,-7000 delay=5750 time=700 condition=true tween=circle easing=in',), [('conditional', 'effect=slide start=0,-7000 delay=5750 time=700 condition=true tween=circle easing=in',),
@@ -907,7 +907,7 @@ class related(xbmcgui.WindowDialog):
self.pt_peli = xbmcgui.ControlTextBox(210, 410, 307, 60, self.fonts["12"]) self.pt_peli = xbmcgui.ControlTextBox(210, 410, 307, 60, self.fonts["12"])
self.addControl(self.pt_peli) self.addControl(self.pt_peli)
self.pt_peli.setText("[COLOR limegreen][B]Productora: [/B][/COLOR]") self.pt_peli.setText("[COLOR limegreen][B]%s[/B][/COLOR]" % config.get_localized_string(70498))
if set_animation: if set_animation:
self.pt_peli.setAnimations( self.pt_peli.setAnimations(
[('conditional', 'effect=slide start=0,-7000 delay=5700 time=700 condition=true tween=circle easing=in',), [('conditional', 'effect=slide start=0,-7000 delay=5700 time=700 condition=true tween=circle easing=in',),
@@ -1238,7 +1238,7 @@ class Busqueda(xbmcgui.WindowXMLDialog):
else: else:
self.getControl(1).setLabel(config.get_localized_string(60494)) self.getControl(1).setLabel(config.get_localized_string(60494))
self.getControl(5).setLabel("[COLOR tomato][B]Cerrar[/B][/COLOR]") self.getControl(5).setLabel(config.get_localized_string(60495))
self.control_list.reset() self.control_list.reset()
items = [] items = []
for item_l in self.lista: for item_l in self.lista:
@@ -1577,7 +1577,7 @@ class ActorInfo(xbmcgui.WindowDialog):
self.info_actor.autoScroll(7000, 6000, 30000) self.info_actor.autoScroll(7000, 6000, 30000)
except: except:
xbmc.executebuiltin( xbmc.executebuiltin(
'Notification([COLOR red][B]Actualiza Kodi a su última versión[/B][/COLOR], [COLOR skyblue]para mejor info[/COLOR],8000, "http://i.imgur.com/mHgwcn3.png")') config.get_localized_string(70500))
self.info_actor.setText( self.info_actor.setText(
"[COLOR coral][B]%s[/B][/COLOR]" % actor_tmdb.result.get("biography", config.get_localized_string(60504))) "[COLOR coral][B]%s[/B][/COLOR]" % actor_tmdb.result.get("biography", config.get_localized_string(60504)))
@@ -1601,7 +1601,7 @@ class ActorInfo(xbmcgui.WindowDialog):
else: else:
self.titulos.append([entradas["id"], entradas.get("title", entradas.get("original_title", "")), thumb]) self.titulos.append([entradas["id"], entradas.get("title", entradas.get("original_title", "")), thumb])
self.dialog.update(40, '[COLOR rosybrown]Obteniendo filmografía...[/COLOR]') self.dialog.update(40, config.get_localized_string(60505))
self.mas_pelis = 8 self.mas_pelis = 8
self.idps = [] self.idps = []
self.botones = [] self.botones = []
@@ -1673,7 +1673,7 @@ class ActorInfo(xbmcgui.WindowDialog):
self.botones.append(self.btn_right) self.botones.append(self.btn_right)
xbmc.sleep(200) xbmc.sleep(200)
self.dialog.update(80, '[COLOR plum]Recopilando imágenes...[/COLOR]') self.dialog.update(80, config.get_localized_string(60506))
self.images = [] self.images = []
for images in actor_tmdb.result.get("images", {}).get("profiles", []): for images in actor_tmdb.result.get("images", {}).get("profiles", []):
imagen = "https://image.tmdb.org/t/p/original" + images["file_path"] imagen = "https://image.tmdb.org/t/p/original" + images["file_path"]
+25 -25
View File
@@ -46,7 +46,7 @@ def buscartrailer(item, trailers=[]):
item.contentTitle = item.contentTitle.strip() item.contentTitle = item.contentTitle.strip()
elif keyboard: elif keyboard:
fulltitle = re.sub('\[\/*(B|I|COLOR)\s*[^\]]*\]', '', item.fulltitle.strip()) fulltitle = re.sub('\[\/*(B|I|COLOR)\s*[^\]]*\]', '', item.fulltitle.strip())
item.contentTitle = platformtools.dialog_input(default=fulltitle, heading="Introduce el título a buscar") item.contentTitle = platformtools.dialog_input(default=fulltitle, heading=config.get_localized_string(70505))
if item.contentTitle is None: if item.contentTitle is None:
item.contentTitle = fulltitle item.contentTitle = fulltitle
else: else:
@@ -86,21 +86,21 @@ def buscartrailer(item, trailers=[]):
title = "[COLOR green]%s[/COLOR]" title = "[COLOR green]%s[/COLOR]"
else: else:
title = "%s" title = "%s"
itemlist.append(item.clone(title=title % "Búsqueda en Youtube", action="youtube_search", itemlist.append(item.clone(title=title % config.get_localized_string(70507), action="youtube_search",
text_color="green")) text_color="green"))
itemlist.append(item.clone(title=title % "Búsqueda en Filmaffinity", itemlist.append(item.clone(title=title % config.get_localized_string(70024),
action="filmaffinity_search", text_color="green")) action="filmaffinity_search", text_color="green"))
# Si se trata de una serie, no se incluye la opción de buscar en Abandomoviez # Si se trata de una serie, no se incluye la opción de buscar en Abandomoviez
if not item.show and not item.infoLabels['tvshowtitle']: if not item.show and not item.infoLabels['tvshowtitle']:
itemlist.append(item.clone(title=title % "Búsqueda en Abandomoviez", itemlist.append(item.clone(title=title % config.get_localized_string(70508),
action="abandomoviez_search", text_color="green")) action="abandomoviez_search", text_color="green"))
itemlist.append(item.clone(title=title % "Búsqueda en Jayhap (Youtube, Vimeo & Dailymotion)", itemlist.append(item.clone(title=title % config.get_localized_string(70509),
action="jayhap_search", text_color="green")) action="jayhap_search", text_color="green"))
if item.contextual: if item.contextual:
global window_select, result global window_select, result
select = Select("DialogSelect.xml", config.get_runtime_path(), item=item, itemlist=itemlist, select = Select("DialogSelect.xml", config.get_runtime_path(), item=item, itemlist=itemlist,
caption="Buscando: " + item.contentTitle) caption=config.get_localized_string(70506) + item.contentTitle)
window_select.append(select) window_select.append(select)
select.doModal() select.doModal()
@@ -177,11 +177,11 @@ def youtube_search(item):
'Siguiente') 'Siguiente')
if next_page != "": if next_page != "":
next_page = urlparse.urljoin("https://www.youtube.com", next_page) next_page = urlparse.urljoin("https://www.youtube.com", next_page)
itemlist.append(item.clone(title=">> Siguiente", action="youtube_search", extra="youtube", page=next_page, itemlist.append(item.clone(title=config.get_localized_string(70502), action="youtube_search", extra="youtube", page=next_page,
thumbnail="", text_color="")) thumbnail="", text_color=""))
if not itemlist: if not itemlist:
itemlist.append(item.clone(title="La búsqueda no ha dado resultados (%s)" % titulo, itemlist.append(item.clone(title=config.get_localized_string(70501) % titulo,
action="", thumbnail="", text_color="")) action="", thumbnail="", text_color=""))
if keyboard: if keyboard:
@@ -189,7 +189,7 @@ def youtube_search(item):
title = "[COLOR green]%s[/COLOR]" title = "[COLOR green]%s[/COLOR]"
else: else:
title = "%s" title = "%s"
itemlist.append(item.clone(title=title % "Búsqueda Manual en Youtube", action="manual_search", itemlist.append(item.clone(title=title % config.get_localized_string(70510), action="manual_search",
text_color="green", thumbnail="", extra="youtube")) text_color="green", thumbnail="", extra="youtube"))
return itemlist return itemlist
@@ -232,11 +232,11 @@ def abandomoviez_search(item):
next_page = scrapertools.find_single_match(data, '<a href="([^"]+)">Siguiente') next_page = scrapertools.find_single_match(data, '<a href="([^"]+)">Siguiente')
if next_page != "": if next_page != "":
next_page = urlparse.urljoin("http://www.abandomoviez.net/%s" % item.prefix, next_page) next_page = urlparse.urljoin("http://www.abandomoviez.net/%s" % item.prefix, next_page)
itemlist.append(item.clone(title=">> Siguiente", action="abandomoviez_search", page=next_page, thumbnail="", itemlist.append(item.clone(title=config.get_localized_string(70502), action="abandomoviez_search", page=next_page, thumbnail="",
text_color="")) text_color=""))
if not itemlist: if not itemlist:
itemlist.append(item.clone(title="La búsqueda no ha dado resultados", action="", thumbnail="", itemlist.append(item.clone(title=config.get_localized_string(70501), action="", thumbnail="",
text_color="")) text_color=""))
if keyboard: if keyboard:
@@ -244,7 +244,7 @@ def abandomoviez_search(item):
title = "[COLOR green]%s[/COLOR]" title = "[COLOR green]%s[/COLOR]"
else: else:
title = "%s" title = "%s"
itemlist.append(item.clone(title=title % "Búsqueda Manual en Abandomoviez", itemlist.append(item.clone(title=title % config.get_localized_string(70511),
action="manual_search", thumbnail="", text_color="green", extra="abandomoviez")) action="manual_search", thumbnail="", text_color="green", extra="abandomoviez"))
return itemlist return itemlist
@@ -256,13 +256,13 @@ def search_links_abando(item):
data = scrapertools.downloadpage(item.url) data = scrapertools.downloadpage(item.url)
itemlist = [] itemlist = []
if "Lo sentimos, no tenemos trailer" in data: if "Lo sentimos, no tenemos trailer" in data:
itemlist.append(item.clone(title="No hay ningún vídeo disponible", action="", text_color="")) itemlist.append(item.clone(title=config.get_localized_string(70503), action="", text_color=""))
else: else:
if item.contextual: if item.contextual:
progreso = platformtools.dialog_progress("Buscando en abandomoviez", "Cargando trailers...") progreso = platformtools.dialog_progress(config.get_localized_string(70512), config.get_localized_string(70504))
progreso.update(10) progreso.update(10)
i = 0 i = 0
message = "Cargando trailers..." message = config.get_localized_string(70504)
patron = '<div class="col-md-3 col-xs-6"><a href="([^"]+)".*?' \ patron = '<div class="col-md-3 col-xs-6"><a href="([^"]+)".*?' \
'Images/(\d+).gif.*?</div><small>(.*?)</small>' 'Images/(\d+).gif.*?</div><small>(.*?)</small>'
matches = scrapertools.find_multiple_matches(data, patron) matches = scrapertools.find_multiple_matches(data, patron)
@@ -304,7 +304,7 @@ def search_links_abando(item):
title = "[COLOR green]%s[/COLOR]" title = "[COLOR green]%s[/COLOR]"
else: else:
title = "%s" title = "%s"
itemlist.append(item.clone(title=title % "Búsqueda Manual en Abandomoviez", itemlist.append(item.clone(title=title % config.get_localized_string(70511),
action="manual_search", thumbnail="", text_color="green", extra="abandomoviez")) action="manual_search", thumbnail="", text_color="green", extra="abandomoviez"))
return itemlist return itemlist
@@ -349,11 +349,11 @@ def filmaffinity_search(item):
next_page = scrapertools.find_single_match(data, '<a href="([^"]+)">&gt;&gt;</a>') next_page = scrapertools.find_single_match(data, '<a href="([^"]+)">&gt;&gt;</a>')
if next_page != "": if next_page != "":
next_page = urlparse.urljoin("http://www.filmaffinity.com/es/", next_page) next_page = urlparse.urljoin("http://www.filmaffinity.com/es/", next_page)
itemlist.append(item.clone(title=">> Siguiente", page=next_page, action="filmaffinity_search", thumbnail="", itemlist.append(item.clone(title=config.get_localized_string(70502), page=next_page, action="filmaffinity_search", thumbnail="",
text_color="")) text_color=""))
if not itemlist: if not itemlist:
itemlist.append(item.clone(title="La búsqueda no ha dado resultados (%s)" % item.contentTitle, itemlist.append(item.clone(title=config.get_localized_string(70501) % item.contentTitle,
action="", thumbnail="", text_color="")) action="", thumbnail="", text_color=""))
if keyboard: if keyboard:
@@ -361,7 +361,7 @@ def filmaffinity_search(item):
title = "[COLOR green]%s[/COLOR]" title = "[COLOR green]%s[/COLOR]"
else: else:
title = "%s" title = "%s"
itemlist.append(item.clone(title=title % "Búsqueda Manual en Filmaffinity", itemlist.append(item.clone(title=title % config.get_localized_string(70513),
action="manual_search", text_color="green", thumbnail="", extra="filmaffinity")) action="manual_search", text_color="green", thumbnail="", extra="filmaffinity"))
return itemlist return itemlist
@@ -373,7 +373,7 @@ def search_links_filmaff(item):
itemlist = [] itemlist = []
data = scrapertools.downloadpage(item.url) data = scrapertools.downloadpage(item.url)
if not '<a class="lnkvvid"' in data: if not '<a class="lnkvvid"' in data:
itemlist.append(item.clone(title="No hay ningún vídeo disponible", action="", text_color="")) itemlist.append(item.clone(title=config.get_localized_string(70503), action="", text_color=""))
else: else:
patron = '<a class="lnkvvid".*?<b>(.*?)</b>.*?iframe.*?src="([^"]+)"' patron = '<a class="lnkvvid".*?<b>(.*?)</b>.*?iframe.*?src="([^"]+)"'
matches = scrapertools.find_multiple_matches(data, patron) matches = scrapertools.find_multiple_matches(data, patron)
@@ -402,7 +402,7 @@ def search_links_filmaff(item):
title = "[COLOR green]%s[/COLOR]" title = "[COLOR green]%s[/COLOR]"
else: else:
title = "%s" title = "%s"
itemlist.append(item.clone(title=title % "Búsqueda Manual en Filmaffinity", itemlist.append(item.clone(title=title % config.get_localized_string(70513),
action="manual_search", thumbnail="", text_color="green", extra="filmaffinity")) action="manual_search", thumbnail="", text_color="green", extra="filmaffinity"))
return itemlist return itemlist
@@ -437,14 +437,14 @@ def jayhap_search(item):
text_color="white")) text_color="white"))
if not itemlist: if not itemlist:
itemlist.append(item.clone(title="La búsqueda no ha dado resultados (%s)" % item.contentTitle, itemlist.append(item.clone(title=config.get_localized_string(70501) % item.contentTitle,
action="", thumbnail="", text_color="")) action="", thumbnail="", text_color=""))
else: else:
tokens = data['tokens'] tokens = data['tokens']
tokens['yt_token'] = tokens.pop('youtube') tokens['yt_token'] = tokens.pop('youtube')
tokens['vm_token'] = tokens.pop('vimeo') tokens['vm_token'] = tokens.pop('vimeo')
tokens['dm_token'] = tokens.pop('dailymotion') tokens['dm_token'] = tokens.pop('dailymotion')
itemlist.append(item.clone(title=">> Siguiente", page=tokens, action="jayhap_search", extra="jayhap", itemlist.append(item.clone(title=config.get_localized_string(70502), page=tokens, action="jayhap_search", extra="jayhap",
thumbnail="", text_color="")) thumbnail="", text_color=""))
if keyboard: if keyboard:
@@ -452,7 +452,7 @@ def jayhap_search(item):
title = "[COLOR green]%s[/COLOR]" title = "[COLOR green]%s[/COLOR]"
else: else:
title = "%s" title = "%s"
itemlist.append(item.clone(title=title % "Búsqueda Manual en Jayhap", action="manual_search", itemlist.append(item.clone(title=title % config.get_localized_string(70514), action="manual_search",
text_color="green", thumbnail="", extra="jayhap")) text_color="green", thumbnail="", extra="jayhap"))
return itemlist return itemlist
@@ -485,7 +485,7 @@ try:
except: except:
pass pass
self.getControl(1).setLabel("[COLOR orange]" + self.caption + "[/COLOR]") self.getControl(1).setLabel("[COLOR orange]" + self.caption + "[/COLOR]")
self.getControl(5).setLabel("[COLOR tomato][B]Cerrar[/B][/COLOR]") self.getControl(5).setLabel(config.get_localized_string(60495))
self.items = [] self.items = []
for item in self.itemlist: for item in self.itemlist:
item_l = xbmcgui.ListItem(item.title) item_l = xbmcgui.ListItem(item.title)
+52 -52
View File
@@ -14,56 +14,56 @@
{ {
"id": "tmdb", "id": "tmdb",
"type": "list", "type": "list",
"label": "Idioma de búsqueda en TMDB", "label": "@70418",
"default": 7, "default": 3,
"enabled": true, "enabled": true,
"visible": true, "visible": true,
"lvalues": [ "lvalues": [
"Alemán", "@70419",
"Francés", "@70420",
"Portugués", "@70421",
"Italiano", "@70422",
"Español Latino", "@70423",
"Catalán", "@70424",
"Inglés", "@70425",
"Castellano" "@70014"
] ]
}, },
{ {
"id": "tmdb_alternativo", "id": "tmdb_alternativo",
"type": "list", "type": "list",
"label": "Idioma alternativo para TMDB (No sinopsis idioma principal)", "label": "@70426",
"default": 6, "default": 6,
"enabled": true, "enabled": true,
"visible": true, "visible": true,
"lvalues": [ "lvalues": [
"Alemán", "@70419",
"Francés", "@70420",
"Portugués", "@70421",
"Italiano", "@70422",
"Español Latino", "@70423",
"Catalán", "@70424",
"Inglés", "@70425",
"Castellano" "@70014"
] ]
}, },
{ {
"id": "imdb", "id": "imdb",
"type": "list", "type": "list",
"label": "Idioma de los títulos en IMDB", "label": "@70427",
"color": "0xFFE0F04B", "color": "0xFFE0F04B",
"default": 7, "default": 3,
"enabled": true, "enabled": true,
"visible": true, "visible": true,
"lvalues": [ "lvalues": [
"Alemán", "@70419",
"Francés", "@70420",
"Portugués", "@70421",
"Italiano", "@70422",
"Español Latino", "@70423",
"Catalán", "@70424",
"Inglés", "@70425",
"Castellano" "@70014"
] ]
}, },
{ {
@@ -76,24 +76,24 @@
{ {
"id": "filmaff", "id": "filmaff",
"type": "list", "type": "list",
"label": "Sitio Web Filmaffinity", "label": "@70428",
"color": "0xFF25AA48", "color": "0xFF25AA48",
"default": 5, "default": 5,
"enabled": true, "enabled": true,
"visible": true, "visible": true,
"lvalues": [ "lvalues": [
"Colombia", "@70429",
"Chile", "@70430",
"Argentina", "@70431",
"México", "@70432",
"US/UK", "@70433",
"España" "@70434"
] ]
}, },
{ {
"id": "usuariofa", "id": "usuariofa",
"type": "text", "type": "text",
"label": "Usuario Filmaffinity (Opcional)", "label": "@70435",
"color": "0xFFd50b0b", "color": "0xFFd50b0b",
"default": "", "default": "",
"enabled": true, "enabled": true,
@@ -102,7 +102,7 @@
{ {
"id": "passfa", "id": "passfa",
"type": "text", "type": "text",
"label": "Contraseña Filmaffinity", "label": "@70436",
"color": "0xFFd50b0b", "color": "0xFFd50b0b",
"default": "", "default": "",
"enabled": "!eq(-1,'')", "enabled": "!eq(-1,'')",
@@ -112,17 +112,17 @@
{ {
"id": "orderfa", "id": "orderfa",
"type": "list", "type": "list",
"label": "Ordenar listas personales de Filmaffinity por:", "label": "@70437",
"color": "0xFF25AA48", "color": "0xFF25AA48",
"default": 0, "default": 0,
"enabled": "!eq(-1,'')", "enabled": "!eq(-1,'')",
"visible": true, "visible": true,
"lvalues": [ "lvalues": [
"Posición", "@70438",
"Título", "@60230",
"Año", "@70042",
"Voto", "@70439",
"Nota media" "@70440"
] ]
}, },
{ {
@@ -135,7 +135,7 @@
{ {
"id": "usuariomal", "id": "usuariomal",
"type": "text", "type": "text",
"label": "Usuario MyAnimeList (Opcional)", "label": "@70441",
"color": "0xFF25AA48", "color": "0xFF25AA48",
"default": "", "default": "",
"enabled": true, "enabled": true,
@@ -144,7 +144,7 @@
{ {
"id": "passmal", "id": "passmal",
"type": "text", "type": "text",
"label": "Contraseña MyAnimeList", "label": "@70442",
"color": "0xFF25AA48", "color": "0xFF25AA48",
"default": "", "default": "",
"enabled": "!eq(-1,'')", "enabled": "!eq(-1,'')",
@@ -154,7 +154,7 @@
{ {
"id": "adult_mal", "id": "adult_mal",
"type": "bool", "type": "bool",
"label": "Mostrar Hentais en MyAnimeList", "label": "@70443",
"color": "0xFFd50b0b", "color": "0xFFd50b0b",
"default": false, "default": false,
"enabled": true, "enabled": true,
@@ -163,15 +163,15 @@
{ {
"id": "perfil", "id": "perfil",
"type": "list", "type": "list",
"label": "Perfil de color", "label": "@60666",
"default": 2, "default": 2,
"enabled": true, "enabled": true,
"visible": true, "visible": true,
"lvalues": [ "lvalues": [
"Perfil 3", "@70444",
"Perfil 2", "@70445",
"Perfil 1", "@70446",
"Ninguno" "@59992"
] ]
} }
] ]
+71 -74
View File
@@ -61,7 +61,7 @@ def mainlist(item):
url='&title_type=tv_series,tv_special,mini_series', url='&title_type=tv_series,tv_special,mini_series',
thumbnail=images_predef + "0/TV%20Series.png")) thumbnail=images_predef + "0/TV%20Series.png"))
itemlist.append( itemlist.append(
item.clone(title="Trakt.tv", action="trakt", text_color=color2, thumbnail="http://i.imgur.com/5sQjjuk.png")) item.clone(title=config.get_localized_string(70415), action="trakt", text_color=color2, thumbnail="http://i.imgur.com/5sQjjuk.png"))
itemlist.append( itemlist.append(
item.clone(title=config.get_localized_string(70026), action="mal", text_color=color2, thumbnail="http://i.imgur.com/RhsYWmd.png")) item.clone(title=config.get_localized_string(70026), action="mal", text_color=color2, thumbnail="http://i.imgur.com/RhsYWmd.png"))
itemlist.append(item.clone(title="", action="")) itemlist.append(item.clone(title="", action=""))
@@ -255,7 +255,7 @@ def trakt(item):
page = "?page=1&limit=20&extended=full" page = "?page=1&limit=20&extended=full"
if not item.extra: if not item.extra:
item.extra = "movie" item.extra = "movie"
itemlist.append(item.clone(title=config.get_localized_string(70137), action="", text_color=color2)) itemlist.append(item.clone(title="[COLOR yellow][B]%s[/B][/COLOR]" % config.get_localized_string(70416), action=""))
itemlist.append(item.clone(title=config.get_localized_string(70049), action="acciones_trakt", url="movies/popular%s" % page)) itemlist.append(item.clone(title=config.get_localized_string(70049), action="acciones_trakt", url="movies/popular%s" % page))
itemlist.append( itemlist.append(
item.clone(title=config.get_localized_string(70050), action="acciones_trakt", url="movies/trending%s" % page)) item.clone(title=config.get_localized_string(70050), action="acciones_trakt", url="movies/trending%s" % page))
@@ -265,7 +265,7 @@ def trakt(item):
if token_auth: if token_auth:
itemlist.append(item.clone(title=config.get_localized_string(70052), action="acciones_trakt", itemlist.append(item.clone(title=config.get_localized_string(70052), action="acciones_trakt",
url="recommendations/movies?limit=100&extended=full", pagina=0)) url="recommendations/movies?limit=100&extended=full", pagina=0))
itemlist.append(item.clone(title=config.get_localized_string(30123), action="", text_color=color2)) itemlist.append(item.clone(title="[COLOR yellow][B]%s[/B][/COLOR]" % config.get_localized_string(70417), action="",))
item.extra = "show" item.extra = "show"
itemlist.append(item.clone(title=config.get_localized_string(70049), action="acciones_trakt", url="shows/popular%s" % page)) itemlist.append(item.clone(title=config.get_localized_string(70049), action="acciones_trakt", url="shows/popular%s" % page))
itemlist.append(item.clone(title=config.get_localized_string(70050), action="acciones_trakt", url="shows/trending%s" % page)) itemlist.append(item.clone(title=config.get_localized_string(70050), action="acciones_trakt", url="shows/trending%s" % page))
@@ -275,7 +275,7 @@ def trakt(item):
if token_auth: if token_auth:
itemlist.append(item.clone(title=config.get_localized_string(70052), action="acciones_trakt", itemlist.append(item.clone(title=config.get_localized_string(70052), action="acciones_trakt",
url="recommendations/shows?limit=100&extended=full", pagina=0)) url="recommendations/shows?limit=100&extended=full", pagina=0))
itemlist.append(item.clone(title=config.get_localized_string(70048), text_color=color2, extra="cuenta")) itemlist.append(item.clone(title="[COLOR red][B]%s[/B][/COLOR]" % config.get_localized_string(70048), extra="cuenta"))
else: else:
item.extra = "movie" item.extra = "movie"
# Se comprueba si existe un token guardado y sino se ejecuta el proceso de autentificación # Se comprueba si existe un token guardado y sino se ejecuta el proceso de autentificación
@@ -450,7 +450,7 @@ def listado_tmdb(item):
else: else:
# Si es una búsqueda de personas se incluye en el título y fanart una película por la que es conocido # Si es una búsqueda de personas se incluye en el título y fanart una película por la que es conocido
known_for = ob_tmdb.results[i].get("known_for") known_for = ob_tmdb.results[i].get("known_for")
type = item.search['type'] type=item.type
if known_for: if known_for:
from random import randint from random import randint
random = randint(0, len(known_for) - 1) random = randint(0, len(known_for) - 1)
@@ -783,7 +783,7 @@ def filtro(item):
dict_values = None dict_values = None
list_controls.append({'id': 'years', 'label': 'Año', 'enabled': True, 'color': '0xFFCC2EFA', list_controls.append({'id': 'years', 'label': config.get_localized_string(60232), 'enabled': True, 'color': '0xFFCC2EFA',
'type': 'list', 'default': -1, 'visible': True}) 'type': 'list', 'default': -1, 'visible': True})
list_controls[0]['lvalues'] = [] list_controls[0]['lvalues'] = []
valores['years'] = [] valores['years'] = []
@@ -791,7 +791,7 @@ def filtro(item):
for i in range(1900, year + 1): for i in range(1900, year + 1):
list_controls[0]['lvalues'].append(str(i)) list_controls[0]['lvalues'].append(str(i))
valores['years'].append(str(i)) valores['years'].append(str(i))
list_controls[0]['lvalues'].append('Cualquiera') list_controls[0]['lvalues'].append(config.get_localized_string(70450))
valores['years'].append('') valores['years'].append('')
if "Personalizado" in item.title: if "Personalizado" in item.title:
@@ -805,7 +805,7 @@ def filtro(item):
lista = jsontools.load(httptools.downloadpage(url, cookies=False).data)["genres"] lista = jsontools.load(httptools.downloadpage(url, cookies=False).data)["genres"]
if lista: if lista:
list_controls.append({'id': 'labelgenre', 'enabled': True, 'type': 'label', 'default': None, list_controls.append({'id': 'labelgenre', 'enabled': True, 'type': 'label', 'default': None,
'label': 'Selecciona uno, ninguno o más de un género', 'label': config.get_localized_string(70451),
'visible': True, 'color': '0xFFC52020'}) 'visible': True, 'color': '0xFFC52020'})
for l in lista: for l in lista:
list_controls.append({'id': 'genre' + str(l["id"]), 'label': l["name"], 'enabled': True, list_controls.append({'id': 'genre' + str(l["id"]), 'label': l["name"], 'enabled': True,
@@ -813,11 +813,11 @@ def filtro(item):
except: except:
pass pass
list_controls.append({'id': 'orden', 'label': 'Ordenar por', 'enabled': True, 'color': '0xFF25AA48', list_controls.append({'id': 'orden', 'label': config.get_localized_string(70455), 'enabled': True, 'color': '0xFF25AA48',
'type': 'list', 'default': -1, 'visible': True}) 'type': 'list', 'default': -1, 'visible': True})
orden = ['Popularidad Desc', 'Popularidad Asc', 'Año Desc', 'Año Asc', 'Valoración Desc', 'Valoración Asc'] orden = [config.get_localized_string(70456), config.get_localized_string(70457), config.get_localized_string(70458), config.get_localized_string(70459), config.get_localized_string(70460), config.get_localized_string(70461)]
if item.extra == "movie": if item.extra == "movie":
orden.extend(['Título [A-Z]', 'Título [Z-A]']) orden.extend([config.get_localized_string(70462), config.get_localized_string(70463)])
orden_tmdb = ['popularity.desc', 'popularity.asc', 'release_date.desc', 'release_date.asc', orden_tmdb = ['popularity.desc', 'popularity.asc', 'release_date.desc', 'release_date.asc',
'vote_average.desc', 'vote_average.asc', 'original_title.asc', 'original_title.desc'] 'vote_average.desc', 'vote_average.asc', 'original_title.asc', 'original_title.desc']
valores['orden'] = [] valores['orden'] = []
@@ -828,10 +828,10 @@ def filtro(item):
list_controls.append({'id': 'espacio', 'label': '', 'enabled': False, list_controls.append({'id': 'espacio', 'label': '', 'enabled': False,
'type': 'label', 'default': None, 'visible': True}) 'type': 'label', 'default': None, 'visible': True})
list_controls.append({'id': 'save', 'label': 'Establecer como filtro por defecto', 'enabled': True, list_controls.append({'id': 'save', 'label': config.get_localized_string(70464), 'enabled': True,
'type': 'bool', 'default': False, 'visible': True}) 'type': 'bool', 'default': False, 'visible': True})
else: else:
list_controls.append({'id': 'keyword', 'label': 'Palabra Clave', 'enabled': True, list_controls.append({'id': 'keyword', 'label': config.get_localized_string(70465), 'enabled': True,
'type': 'text', 'default': '', 'visible': True}) 'type': 'text', 'default': '', 'visible': True})
item.valores = valores item.valores = valores
@@ -1005,12 +1005,12 @@ def filtro_imdb(item):
if valores_guardados: if valores_guardados:
dict_values = valores_guardados dict_values = valores_guardados
list_controls.append({'id': 'title', 'label': 'Título', 'enabled': True, list_controls.append({'id': 'title', 'label': config.get_localized_string(60320), 'enabled': True,
'type': 'text', 'default': '', 'visible': True}) 'type': 'text', 'default': '', 'visible': True})
list_controls.append({'id': 'yearsdesde', 'label': 'Año desde:', 'enabled': True, 'color': '0xFFCC2EFA', list_controls.append({'id': 'yearsdesde', 'label': config.get_localized_string(70452), 'enabled': True, 'color': '0xFFCC2EFA',
'type': 'list', 'default': -1, 'visible': True}) 'type': 'list', 'default': -1, 'visible': True})
list_controls.append({'id': 'yearshasta', 'label': 'Año hasta:', 'enabled': True, 'color': '0xFF2ECCFA', list_controls.append({'id': 'yearshasta', 'label': config.get_localized_string(70453), 'enabled': True, 'color': '0xFF2ECCFA',
'type': 'list', 'default': -1, 'visible': True}) 'type': 'list', 'default': -1, 'visible': True})
list_controls[1]['lvalues'] = [] list_controls[1]['lvalues'] = []
list_controls[2]['lvalues'] = [] list_controls[2]['lvalues'] = []
@@ -1020,23 +1020,23 @@ def filtro_imdb(item):
list_controls[1]['lvalues'].append(str(i)) list_controls[1]['lvalues'].append(str(i))
list_controls[2]['lvalues'].append(str(i)) list_controls[2]['lvalues'].append(str(i))
valores['years'].append(str(i)) valores['years'].append(str(i))
list_controls[1]['lvalues'].append('Cualquiera') list_controls[1]['lvalues'].append(config.get_localized_string(70450))
list_controls[2]['lvalues'].append('Cualquiera') list_controls[2]['lvalues'].append(config.get_localized_string(70450))
valores['years'].append('') valores['years'].append('')
try: try:
generos_spa = {'Action': 'Acción', 'Adventure': 'Aventura', 'Animation': 'Animación', 'Biography': 'Biografía', generos_spa = {'Action': config.get_localized_string(70394), 'Adventure': config.get_localized_string(60267), 'Animation': config.get_localized_string(60268), 'Biography': config.get_localized_string(70403),
'Comedy': 'Comedia', 'Crime': 'Crimen', 'Documentary': 'Documental', 'Family': 'Familia', 'Comedy': config.get_localized_string(60270), 'Crime': config.get_localized_string(60271), 'Documentary': config.get_localized_string(70396), 'Family': config.get_localized_string(70399),
'Fantasy': 'Fantástico', 'Film-Noir': 'Cine Negro', 'Game-Show': 'Concursos', 'Fantasy': config.get_localized_string(60274), 'Film-Noir': config.get_localized_string(70400), 'Game-Show': config.get_localized_string(70401),
'History': 'Historia', 'Horror': 'Terror', 'Music': 'Música', 'Mistery': 'Intriga', 'History': config.get_localized_string(70405), 'Horror': config.get_localized_string(70013), 'Music': config.get_localized_string(70404), 'Mistery': config.get_localized_string(70402),
'News': 'Noticias', 'Reality-TV': 'Reality', 'Sci-Fi': 'Ciencia Ficción', 'Sport': 'Deportes', 'News': config.get_localized_string(60279), 'Reality-TV': config.get_localized_string(70406), 'Sci-Fi': config.get_localized_string(70397), 'Sport': config.get_localized_string(70395),
'Talk-Show': 'Entrevistas', 'War': 'Cine Bélico'} 'Talk-Show': config.get_localized_string(70398), 'War': config.get_localized_string(70407)}
data = httptools.downloadpage("http://www.imdb.com/search/title", cookies=False).data data = httptools.downloadpage("http://www.imdb.com/search/title", cookies=False).data
bloque = scrapertools.find_single_match(data, '<h3>Genres</h3>(.*?)</table>') bloque = scrapertools.find_single_match(data, '<h3>Genres</h3>(.*?)</table>')
matches = scrapertools.find_multiple_matches(bloque, ' value="([^"]+)"\s*>\s*<label.*?>([^<]+)<') matches = scrapertools.find_multiple_matches(bloque, ' value="([^"]+)"\s*>\s*<label.*?>([^<]+)<')
if matches: if matches:
list_controls.append({'id': 'labelgenre', 'enabled': True, 'type': 'label', 'visible': True, list_controls.append({'id': 'labelgenre', 'enabled': True, 'type': 'label', 'visible': True,
'label': 'Selecciona uno, ninguno o más de un género', 'color': '0xFFC52020'}) 'label': config.get_localized_string(70451), 'color': '0xFFC52020'})
lista = [] lista = []
for valor, titulo in matches: for valor, titulo in matches:
titulo = generos_spa.get(titulo, titulo) titulo = generos_spa.get(titulo, titulo)
@@ -1054,10 +1054,10 @@ def filtro_imdb(item):
bloque = scrapertools.find_single_match(data, '<h3>Countries</h3>(.*?)Less-Common') bloque = scrapertools.find_single_match(data, '<h3>Countries</h3>(.*?)Less-Common')
matches = scrapertools.find_multiple_matches(bloque, ' value="([^"]+)"\s*>([^<]+)<') matches = scrapertools.find_multiple_matches(bloque, ' value="([^"]+)"\s*>([^<]+)<')
if matches: if matches:
list_controls.append({'id': 'pais', 'label': 'País', 'enabled': True, 'color': '0xFFFF8000', list_controls.append({'id': 'pais', 'label': config.get_localized_string(70466), 'enabled': True, 'color': '0xFFFF8000',
'type': 'list', 'default': -1, 'visible': True}) 'type': 'list', 'default': -1, 'visible': True})
list_controls[-1]['lvalues'] = [] list_controls[-1]['lvalues'] = []
list_controls[-1]['lvalues'].append('Cualquiera') list_controls[-1]['lvalues'].append(config.get_localized_string(70450))
valores['pais'] = [] valores['pais'] = []
valores['pais'].append('') valores['pais'].append('')
for valor, titulo in matches: for valor, titulo in matches:
@@ -1067,13 +1067,10 @@ def filtro_imdb(item):
except: except:
pass pass
list_controls.append({'id': 'votos', 'label': 'Número mínimo de votos', 'enabled': True, list_controls.append({'id': 'orden', 'label': config.get_localized_string(70455), 'enabled': True, 'color': '0xFF25AA48',
'type': 'text', 'default': '10000', 'visible': True, 'color': '0xFFF4FA58'})
list_controls.append({'id': 'orden', 'label': 'Ordenar por', 'enabled': True, 'color': '0xFF25AA48',
'type': 'list', 'default': -1, 'visible': True}) 'type': 'list', 'default': -1, 'visible': True})
orden = ['Popularidad Desc', 'Popularidad Asc', 'Año Desc', 'Año Asc', 'Valoración Desc', 'Valoración Asc', orden = [config.get_localized_string(70456), config.get_localized_string(70457), config.get_localized_string(70458), config.get_localized_string(70459), config.get_localized_string(70460), config.get_localized_string(70461),
'Título [A-Z]', 'Título [Z-A]'] config.get_localized_string(70462, config.get_localized_string(70463)]
orden_imdb = ['moviemeter,asc', 'moviemeter,desc', 'year,desc', 'year,asc', orden_imdb = ['moviemeter,asc', 'moviemeter,desc', 'year,desc', 'year,asc',
'user_rating,desc', 'user_rating,asc', 'alpha,asc', 'alpha,desc'] 'user_rating,desc', 'user_rating,asc', 'alpha,asc', 'alpha,desc']
@@ -1083,7 +1080,7 @@ def filtro_imdb(item):
list_controls[-1]['lvalues'].insert(0, tipo_orden) list_controls[-1]['lvalues'].insert(0, tipo_orden)
valores['orden'].insert(0, orden_imdb[i]) valores['orden'].insert(0, orden_imdb[i])
list_controls.append({'id': 'save', 'label': 'Establecer como filtro por defecto', 'enabled': True, list_controls.append({'id': 'save', 'label': config.get_localized_string(70464), 'enabled': True,
'type': 'bool', 'default': False, 'visible': True}) 'type': 'bool', 'default': False, 'visible': True})
item.valores = valores item.valores = valores
@@ -1130,12 +1127,12 @@ def indices_imdb(item):
itemlist = [] itemlist = []
from datetime import datetime from datetime import datetime
if config.get_localized_string(70032) in item.title: if config.get_localized_string(70032) in item.title:
generos_spa = {'Action': 'Accion', 'Adventure': 'Aventura', 'Animation': 'Animacion', 'Biography': 'Biografía', generos_spa = {'Action': config.get_localized_string(70394), 'Adventure': config.get_localized_string(60267), 'Animation': config.get_localized_string(60268), 'Biography': config.get_localized_string(70403), 'Thriller': config.get_localized_string(70410),
'Comedy': 'Comedia', 'Crime': 'Crimen', 'Documentary': 'Documental', 'Family': 'Familia', 'Comedy': config.get_localized_string(60270), 'Crime': config.get_localized_string(60271), 'Documentary': config.get_localized_string(70396), 'Family': config.get_localized_string(70399), 'Romance': config.get_localized_string(70409),
'Fantasy': 'Fantasia', 'Film-Noir': 'Cine Negro', 'Game-Show': 'Concursos', 'Fantasy': config.get_localized_string(60274), 'Film-Noir': config.get_localized_string(70400), 'Game-Show': config.get_localized_string(70401), 'Drama': config.get_localized_string(70412), 'Western': config.get_localized_string(70411),
'History': 'Historia', 'Horror': 'Terror', 'Music': 'Música', 'Mistery': 'Intriga', 'History': config.get_localized_string(70405), 'Horror': config.get_localized_string(70013), 'Music': config.get_localized_string(70404), 'Musical': config.get_localized_string(70408),'Mystery': config.get_localized_string(70402),
'News': 'Noticias', 'Reality-TV': 'Reality', 'Sci-Fi': 'Ciencia Ficcion', 'Sport': 'Deportes', 'News': config.get_localized_string(60279), 'Reality-TV': config.get_localized_string(70406), 'Sci-Fi': config.get_localized_string(70397), 'Sport': config.get_localized_string(70395),
'Talk-Show': 'Entrevistas', 'War': 'Cine Bélico'} 'Talk-Show': config.get_localized_string(70398), 'War': config.get_localized_string(70407)}
data = httptools.downloadpage("http://www.imdb.com/search/title", cookies=False).data data = httptools.downloadpage("http://www.imdb.com/search/title", cookies=False).data
bloque = scrapertools.find_single_match(data, '<h3>Genres</h3>(.*?)</table>') bloque = scrapertools.find_single_match(data, '<h3>Genres</h3>(.*?)</table>')
matches = scrapertools.find_multiple_matches(bloque, ' value="([^"]+)"\s*>\s*<label.*?>([^<]+)<') matches = scrapertools.find_multiple_matches(bloque, ' value="([^"]+)"\s*>\s*<label.*?>([^<]+)<')
@@ -1616,9 +1613,9 @@ def filtro_fa(item):
if valores_guardados: if valores_guardados:
dict_values = valores_guardados dict_values = valores_guardados
list_controls.append({'id': 'yearsdesde', 'label': 'Año desde:', 'enabled': True, list_controls.append({'id': 'yearsdesde', 'label': config.get_localized_string(70452), 'enabled': True,
'type': 'list', 'default': -1, 'visible': True}) 'type': 'list', 'default': -1, 'visible': True})
list_controls.append({'id': 'yearshasta', 'label': 'Año hasta:', 'enabled': True, list_controls.append({'id': 'yearshasta', 'label': config.get_localized_string(70453), 'enabled': True,
'type': 'list', 'default': -1, 'visible': True}) 'type': 'list', 'default': -1, 'visible': True})
list_controls[0]['lvalues'] = [] list_controls[0]['lvalues'] = []
list_controls[1]['lvalues'] = [] list_controls[1]['lvalues'] = []
@@ -1628,8 +1625,8 @@ def filtro_fa(item):
list_controls[0]['lvalues'].append(str(i)) list_controls[0]['lvalues'].append(str(i))
list_controls[1]['lvalues'].append(str(i)) list_controls[1]['lvalues'].append(str(i))
valores['years'].append(str(i)) valores['years'].append(str(i))
list_controls[0]['lvalues'].append('Cualquiera') list_controls[0]['lvalues'].append(config.get_localized_string(70450))
list_controls[1]['lvalues'].append('Cualquiera') list_controls[1]['lvalues'].append(config.get_localized_string(70450))
valores['years'].append('') valores['years'].append('')
data = httptools.downloadpage("http://m.filmaffinity.com/%s/topgen.php" % langf).data data = httptools.downloadpage("http://m.filmaffinity.com/%s/topgen.php" % langf).data
@@ -1640,7 +1637,7 @@ def filtro_fa(item):
bloque = scrapertools.find_single_match(data, 'name="genre">.*?</option>(.*?)</select>') bloque = scrapertools.find_single_match(data, 'name="genre">.*?</option>(.*?)</select>')
matches = scrapertools.find_multiple_matches(bloque, '<option value="([^"]+)">([^<]+)</option>') matches = scrapertools.find_multiple_matches(bloque, '<option value="([^"]+)">([^<]+)</option>')
if matches: if matches:
list_controls.append({'id': 'genero', 'label': 'Selecciona un género', 'enabled': True, list_controls.append({'id': 'genero', 'label': config.get_localized_string(70467), 'enabled': True,
'type': 'list', 'default': -1, 'visible': True}) 'type': 'list', 'default': -1, 'visible': True})
list_controls[2]['lvalues'] = [] list_controls[2]['lvalues'] = []
list_controls[2]['lvalues'].append("Todos") list_controls[2]['lvalues'].append("Todos")
@@ -1659,7 +1656,7 @@ def filtro_fa(item):
bloque = scrapertools.find_single_match(data, 'name="country">.*?</option>(.*?)</select>') bloque = scrapertools.find_single_match(data, 'name="country">.*?</option>(.*?)</select>')
matches = scrapertools.find_multiple_matches(bloque, '<option value="([^"]+)"\s*>([^<]+)</option>') matches = scrapertools.find_multiple_matches(bloque, '<option value="([^"]+)"\s*>([^<]+)</option>')
if matches: if matches:
list_controls.append({'id': 'pais', 'label': 'País', 'enabled': True, list_controls.append({'id': 'pais', 'label': config.get_localized_string(70466), 'enabled': True,
'type': 'list', 'default': -1, 'visible': True}) 'type': 'list', 'default': -1, 'visible': True})
list_controls[-1]['lvalues'] = [] list_controls[-1]['lvalues'] = []
list_controls[-1]['lvalues'].append('Todos') list_controls[-1]['lvalues'].append('Todos')
@@ -1673,7 +1670,7 @@ def filtro_fa(item):
list_controls.append({'id': 'espacio', 'label': '', 'enabled': False, list_controls.append({'id': 'espacio', 'label': '', 'enabled': False,
'type': 'label', 'default': None, 'visible': True}) 'type': 'label', 'default': None, 'visible': True})
list_controls.append({'id': 'save', 'label': 'Establecer como filtro por defecto', 'enabled': True, list_controls.append({'id': 'save', 'label': config.get_localized_string(70464), 'enabled': True,
'type': 'bool', 'default': False, 'visible': True}) 'type': 'bool', 'default': False, 'visible': True})
item.valores = valores item.valores = valores
@@ -1863,7 +1860,7 @@ def votar_fa(item):
dict_values = None dict_values = None
if item.voto: if item.voto:
dict_values = {'voto': item.voto} dict_values = {'voto': item.voto}
list_controls.append({'id': 'voto', 'label': 'Indica tu voto:', 'enabled': True, list_controls.append({'id': 'voto', 'label': config.get_localized_string(70468), 'enabled': True,
'type': 'list', 'default': 0, 'visible': True}) 'type': 'list', 'default': 0, 'visible': True})
list_controls[0]['lvalues'] = ['No vista'] list_controls[0]['lvalues'] = ['No vista']
valores['voto'] = ["-1"] valores['voto'] = ["-1"]
@@ -2184,9 +2181,9 @@ def acciones_trakt(item):
elif data and not item.url.endswith("lists"): elif data and not item.url.endswith("lists"):
data = jsontools.load(data) data = jsontools.load(data)
if data and "page=1" in item.url and item.order: if data and "page=1" in item.url and item.order:
valores = {'rank': 'Por defecto', 'added': 'Añadido', 'title': 'Título', 'released': 'Estreno', valores = {'rank': config.get_localized_string(70003), 'added': config.get_localized_string(70469), 'title': config.get_localized_string(60320), 'released': config.get_localized_string(70470),
'runtime': 'Duración', 'popularity': 'Popularidad', 'percentage': 'Valoración', 'runtime': config.get_localized_string(70471), 'popularity': config.get_localized_string(70472), 'percentage': config.get_localized_string(70473),
'votes': 'Votos', 'asc': 'ascendente', 'desc': 'descendente'} 'votes': config.get_localized_string(70474), 'asc': config.get_localized_string(70475), 'desc': config.get_localized_string(70476)}
orden = valores[item.order] + " " + valores[item.how] orden = valores[item.order] + " " + valores[item.how]
itemlist.append(item.clone(title=config.get_localized_string(70349) % orden, action="order_list", itemlist.append(item.clone(title=config.get_localized_string(70349) % orden, action="order_list",
text_color=color4)) text_color=color4))
@@ -2267,13 +2264,13 @@ def order_list(item):
dict_values = {'orderby': valores1.index(item.order), 'orderhow': valores2.index(item.how)} dict_values = {'orderby': valores1.index(item.order), 'orderhow': valores2.index(item.how)}
list_controls.append({'id': 'orderby', 'label': 'Ordenar por:', 'enabled': True, list_controls.append({'id': 'orderby', 'label': config.get_localized_string(70455), 'enabled': True,
'type': 'list', 'default': 0, 'visible': True}) 'type': 'list', 'default': 0, 'visible': True})
list_controls.append({'id': 'orderhow', 'label': 'De forma:', 'enabled': True, list_controls.append({'id': 'orderhow', 'label': 'De forma:', 'enabled': True,
'type': 'list', 'default': 0, 'visible': True}) 'type': 'list', 'default': 0, 'visible': True})
list_controls[0]['lvalues'] = ['Por defecto', 'Añadido', 'Título', 'Estreno', 'Duración', 'Popularidad', list_controls[0]['lvalues'] = [config.get_localized_string(70003), config.get_localized_string(70469), config.get_localized_string(60230), config.get_localized_string(70470), config.get_localized_string(70471), config.get_localized_string(70472),
'Valoración', 'Votos'] config.get_localized_string(70473), config.get_localized_string(70474)]
list_controls[1]['lvalues'] = ['Ascendente', 'Descendente'] list_controls[1]['lvalues'] = [config.get_localized_string(70477), config.get_localized_string(70478)]
return platformtools.show_channel_settings(list_controls=list_controls, dict_values=dict_values, return platformtools.show_channel_settings(list_controls=list_controls, dict_values=dict_values,
caption=config.get_localized_string(70320), item=item, callback='order_trakt') caption=config.get_localized_string(70320), item=item, callback='order_trakt')
@@ -2494,8 +2491,8 @@ def detalles_mal(item):
itemlist.append( itemlist.append(
item.clone(title=config.get_localized_string(70321) % score, action="menu_mal", contentTitle=title_mal)) item.clone(title=config.get_localized_string(70321) % score, action="menu_mal", contentTitle=title_mal))
elif item.login and config.is_xbmc(): elif item.login and config.is_xbmc():
status = {'1': 'Viendo Actualmente', '2': 'Completados', '3': 'En pausa', '4': 'Descartados', status = {'1': config.get_localized_string(70479), '2': config.get_localized_string(70480), '3': config.get_localized_string(70384), '4': config.get_localized_string(70385),
'6': 'Previstos para ver'} '6': config.get_localized_string(70481)}
estado = scrapertools.find_single_match(data, 'myinfo_updateInfo".*?option selected="selected" value="(\d+)"') estado = scrapertools.find_single_match(data, 'myinfo_updateInfo".*?option selected="selected" value="(\d+)"')
try: try:
estado = status[estado] estado = status[estado]
@@ -2995,7 +2992,7 @@ def info_anidb(item, itemlist, url):
if abrev != title: if abrev != title:
title += " [%s]" % abrev title += " [%s]" % abrev
estado = estado.replace("complete", config.get_localized_string(70378)).replace("finished", config.get_localized_string(70379)) \ estado = estado.replace("complete", config.get_localized_string(70378)).replace("finished", config.get_localized_string(70379)) \
.replace("stalled", "Pausa").replace("dropped", "Abandonada") .replace("stalled", config.get_localized_string(70380)).replace("dropped", config.get_localized_string(70381))
title += " [COLOR %s](%s)[/COLOR] %s/%s [%s]" % (color6, estado, epis, epi_total, source) title += " [COLOR %s](%s)[/COLOR] %s/%s [%s]" % (color6, estado, epis, epi_total, source)
itemlist.append(Item(channel=item.channel, title=title, infoLabels=infoLabels, action="", itemlist.append(Item(channel=item.channel, title=title, infoLabels=infoLabels, action="",
thumbnail=thumbnail, text_color=color4)) thumbnail=thumbnail, text_color=color4))
@@ -3012,22 +3009,22 @@ def filtro_mal(item):
if valores_guardados: if valores_guardados:
dict_values = valores_guardados dict_values = valores_guardados
list_controls.append({'id': 'keyword', 'label': 'Palabra Clave', 'enabled': True, list_controls.append({'id': 'keyword', 'label': config.get_localized_string(70465), 'enabled': True,
'type': 'text', 'default': '', 'visible': True}) 'type': 'text', 'default': '', 'visible': True})
list_controls.append({'id': 'tipo', 'label': 'Tipo', 'enabled': True, list_controls.append({'id': 'tipo', 'label': config.get_localized_string(70482), 'enabled': True,
'type': 'list', 'default': -1, 'visible': True}) 'type': 'list', 'default': -1, 'visible': True})
list_controls[1]['lvalues'] = ['Especial', 'OVA', 'Película', 'Serie', 'Cualquiera'] list_controls[1]['lvalues'] = [config.get_localized_string(70483), config.get_localized_string(70484), config.get_localized_string(60244), config.get_localized_string(70136), config.get_localized_string(70450)]
valores["tipo"] = ['4', '2', '3', '1', '0'] valores["tipo"] = ['4', '2', '3', '1', '0']
list_controls.append({'id': 'valoracion', 'label': 'Valoración', 'enabled': True, list_controls.append({'id': 'valoracion', 'label': config.get_localized_string(70473), 'enabled': True,
'type': 'list', 'default': -1, 'visible': True}) 'type': 'list', 'default': -1, 'visible': True})
list_controls[2]['lvalues'] = ['(1) Grotesca', '(2) Horrible', '(3) Muy mala', '(4) Mala', list_controls[2]['lvalues'] = [config.get_localized_string(70486), config.get_localized_string(70487), config.get_localized_string(70488), config.get_localized_string(70489),
'(5) Regular', '(6) Pasable', '(7) Buena', '(8) Muy buena', config.get_localized_string(70490), config.get_localized_string(70491), config.get_localized_string(70492), config.get_localized_string(70493),
'(9) Genial', '(10) Obra maestra', 'Cualquiera'] config.get_localized_string(70494), config.get_localized_string(70495), config.get_localized_string(70450)]
valores["valoracion"] = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '0'] valores["valoracion"] = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '0']
list_controls.append({'id': 'estado', 'label': 'Estado', 'enabled': True, list_controls.append({'id': 'estado', 'label': config.get_localized_string(70485), 'enabled': True,
'type': 'list', 'default': -1, 'visible': True}) 'type': 'list', 'default': -1, 'visible': True})
list_controls[3]['lvalues'] = ['Por estrenar', 'En emisión', 'Terminada', 'Cualquiera'] list_controls[3]['lvalues'] = ['Por estrenar', config.get_localized_string(60264), config.get_localized_string(70379), config.get_localized_string(70450)]
valores["estado"] = ['3', '1', '2', '0'] valores["estado"] = ['3', '1', '2', '0']
try: try:
@@ -3037,7 +3034,7 @@ def filtro_mal(item):
generos = scrapertools.find_multiple_matches(data, patron) generos = scrapertools.find_multiple_matches(data, patron)
if generos: if generos:
list_controls.append({'id': 'labelgenre', 'enabled': True, 'type': 'label', 'default': None, list_controls.append({'id': 'labelgenre', 'enabled': True, 'type': 'label', 'default': None,
'label': 'Selecciona uno, ninguno o más de un género', 'label': config.get_localized_string(70451),
'visible': True, 'color': '0xFFC52020'}) 'visible': True, 'color': '0xFFC52020'})
for value, genre in generos: for value, genre in generos:
list_controls.append({'id': 'genre' + value, 'label': genre, 'enabled': True, list_controls.append({'id': 'genre' + value, 'label': genre, 'enabled': True,
@@ -3047,7 +3044,7 @@ def filtro_mal(item):
list_controls.append({'id': 'espacio', 'label': '', 'enabled': False, list_controls.append({'id': 'espacio', 'label': '', 'enabled': False,
'type': 'label', 'default': None, 'visible': True}) 'type': 'label', 'default': None, 'visible': True})
list_controls.append({'id': 'save', 'label': 'Establecer como filtro por defecto', 'enabled': True, list_controls.append({'id': 'save', 'label': config.get_localized_string(70464), 'enabled': True,
'type': 'bool', 'default': False, 'visible': True}) 'type': 'bool', 'default': False, 'visible': True})
item.valores = valores item.valores = valores
@@ -3231,8 +3228,8 @@ def menu_mal(item):
data = httptools.downloadpage(item.url).data data = httptools.downloadpage(item.url).data
try: try:
status = {'1': 'Viendo Actualmente', '2': 'Completados', '3': 'En pausa', '4': 'Descartados', status = {'1': config.get_localized_string(70479), '2': config.get_localized_string(70480), '3': config.get_localized_string(70384), '4': config.get_localized_string(70385),
'6': 'Previstos para ver'} '6': config.get_localized_string(70481)}
button, estado = scrapertools.find_single_match(data, button, estado = scrapertools.find_single_match(data,
'myinfo_updateInfo"(.*?)>.*?option selected="selected" value="(\d+)"') 'myinfo_updateInfo"(.*?)>.*?option selected="selected" value="(\d+)"')
if "disabled" in button: if "disabled" in button:
@@ -3249,9 +3246,9 @@ def menu_mal(item):
if "lista" in title_estado: if "lista" in title_estado:
item.lista = True item.lista = True
itemlist.append(item.clone(title=config.get_localized_string(70390) % (item.contentTitle, title_estado), action="")) itemlist.append(item.clone(title="Anime: %s%s" % (item.contentTitle, title_estado), action=""))
status = {'1': 'Viendo Actualmente', '2': 'Completados', '3': 'En pausa', '4': 'Descartados', status = {'1': config.get_localized_string(70479), '2': config.get_localized_string(70480), '3': config.get_localized_string(70384), '4': config.get_localized_string(70385),
'6': 'Previstos para ver'} '6': config.get_localized_string(70481)}
for key, value in status.items(): for key, value in status.items():
if not value in title_estado: if not value in title_estado:
itemlist.append( itemlist.append(
+1 -1
View File
@@ -1350,7 +1350,7 @@ class Tmdb(object):
if "status_code" in self.temporada[numtemporada]: if "status_code" in self.temporada[numtemporada]:
#Se ha producido un error #Se ha producido un error
msg = "La busqueda de " + buscando + " no dio resultados." msg = config.get_localized_string(70496) + buscando + config.get_localized_string(70497)
msg += "\nError de tmdb: %s %s" % ( msg += "\nError de tmdb: %s %s" % (
self.temporada[numtemporada]["status_code"], self.temporada[numtemporada]["status_message"]) self.temporada[numtemporada]["status_code"], self.temporada[numtemporada]["status_message"])
logger.debug(msg) logger.debug(msg)
+4 -4
View File
@@ -71,11 +71,11 @@ def token_trakt(item):
data = jsontools.load(data) data = jsontools.load(data)
else: else:
import time import time
dialog_auth = platformtools.dialog_progress("Sincronizar con Trakt. No cierres esta ventana", dialog_auth = platformtools.dialog_progress(config.get_localized_string(60251),
"1. Entra en la siguiente url: %s" % item.verify_url, config.get_localized_string(60252) % item.verify_url,
"2. Ingresa este código en la página y acepta: %s" config.get_localized_string(60253)
% item.user_code, % item.user_code,
"3. Espera a que se cierre esta ventana") config.get_localized_string(60254))
# Generalmente cada 5 segundos se intenta comprobar si el usuario ha introducido el código # Generalmente cada 5 segundos se intenta comprobar si el usuario ha introducido el código
while True: while True:
+99 -34
View File
@@ -12,11 +12,10 @@ import re
import time import time
import urllib import urllib
from base64 import b64decode from base64 import b64decode
from platformcode import logger
import xbmc
from core import httptools from core import httptools
from platformcode import config
def find_in_text(regex, text, flags=re.IGNORECASE | re.DOTALL): def find_in_text(regex, text, flags=re.IGNORECASE | re.DOTALL):
@@ -28,24 +27,30 @@ def find_in_text(regex, text, flags=re.IGNORECASE | re.DOTALL):
class UnshortenIt(object): class UnshortenIt(object):
_adfly_regex = r'adf\.ly|q\.gs|j\.gs|u\.bb|ay\.gy|threadsphere\.bid|restorecosm\.bid|clearload\.bid' _adfly_regex = r'adf\.ly|j\.gs|q\.gs|u\.bb|ay\.gy|atominik\.com|tinyium\.com|microify\.com|threadsphere\.bid|clearload\.bid'
_linkbucks_regex = r'linkbucks\.com|any\.gs|cash4links\.co|cash4files\.co|dyo\.gs|filesonthe\.net|goneviral\.com|megaline\.co|miniurls\.co|qqc\.co|seriousdeals\.net|theseblogs\.com|theseforums\.com|tinylinks\.co|tubeviral\.com|ultrafiles\.net|urlbeat\.net|whackyvidz\.com|yyv\.co' _linkbucks_regex = r'linkbucks\.com|any\.gs|cash4links\.co|cash4files\.co|dyo\.gs|filesonthe\.net|goneviral\.com|megaline\.co|miniurls\.co|qqc\.co|seriousdeals\.net|theseblogs\.com|theseforums\.com|tinylinks\.co|tubeviral\.com|ultrafiles\.net|urlbeat\.net|whackyvidz\.com|yyv\.co'
_adfocus_regex = r'adfoc\.us' _adfocus_regex = r'adfoc\.us'
_lnxlu_regex = r'lnx\.lu' _lnxlu_regex = r'lnx\.lu'
_shst_regex = r'sh\.st|gestyy\.com' _shst_regex = r'sh\.st|festyy\.com|ceesty\.com'
_hrefli_regex = r'href\.li' _hrefli_regex = r'href\.li'
_anonymz_regex = r'anonymz\.com' _anonymz_regex = r'anonymz\.com'
_shrink_service_regex = r'shrink-service\.it' _shrink_service_regex = r'shrink-service\.it'
_rapidcrypt_regex = r'rapidcrypt\.net' _rapidcrypt_regex = r'rapidcrypt\.net'
_maxretries = 5 _maxretries = 5
_this_dir, _this_filename = os.path.split(__file__) _this_dir, _this_filename = os.path.split(__file__)
_timeout = 10 _timeout = 10
def unshorten(self, uri, type=None): def unshorten(self, uri, type=None):
domain = urlsplit(uri).netloc domain = urlsplit(uri).netloc
if not domain: if not domain:
return uri, "No domain found in URI!" return uri, "No domain found in URI!"
had_google_outbound, uri = self._clear_google_outbound_proxy(uri) had_google_outbound, uri = self._clear_google_outbound_proxy(uri)
if re.search(self._adfly_regex, domain, if re.search(self._adfly_regex, domain,
re.IGNORECASE) or type == 'adfly': re.IGNORECASE) or type == 'adfly':
return self._unshorten_adfly(uri) return self._unshorten_adfly(uri)
@@ -68,15 +73,15 @@ class UnshortenIt(object):
return self._unshorten_anonymz(uri) return self._unshorten_anonymz(uri)
if re.search(self._rapidcrypt_regex, domain, re.IGNORECASE): if re.search(self._rapidcrypt_regex, domain, re.IGNORECASE):
return self._unshorten_rapidcrypt(uri) return self._unshorten_rapidcrypt(uri)
return uri, 200 return uri, 200
def unwrap_30x(self, uri, timeout=10): def unwrap_30x(self, uri, timeout=10):
domain = urlsplit(uri).netloc domain = urlsplit(uri).netloc
self._timeout = timeout self._timeout = timeout
loop_counter = 0
try: try:
if loop_counter > 5:
raise ValueError("Infinitely looping redirect from URL: '%s'" %
(uri,))
# headers stop t.co from working so omit headers if this is a t.co link # headers stop t.co from working so omit headers if this is a t.co link
if domain == 't.co': if domain == 't.co':
r = httptools.downloadpage(uri, timeout=self._timeout) r = httptools.downloadpage(uri, timeout=self._timeout)
@@ -86,29 +91,28 @@ class UnshortenIt(object):
r = httptools.downloadpage(uri, timeout=self._timeout) r = httptools.downloadpage(uri, timeout=self._timeout)
uri = re.findall(r'.*url\=(.*?)\"\.*', r.data)[0] uri = re.findall(r'.*url\=(.*?)\"\.*', r.data)[0]
return uri, r.code return uri, r.code
else:
while True: retries = 0
while True:
r = httptools.downloadpage(
uri,
timeout=self._timeout,
follow_redirects=False)
if not r.sucess:
return uri, -1
if 'location' in r.headers and retries < self._maxretries:
r = httptools.downloadpage( r = httptools.downloadpage(
uri, r.headers['location'],
timeout=self._timeout, follow_redirects=False)
follow_redirects=False, uri = r.url
only_headers=True) retries += 1
if not r.success: else:
return uri, -1 return r.url, r.code
retries = 0
if 'location' in r.headers and retries < self._maxretries:
r = httptools.downloadpage(
r.headers['location'],
follow_redirects=False,
only_headers=True)
uri = r.url
loop_counter += 1
retries = retries + 1
else:
return r.url, r.code
except Exception as e: except Exception as e:
return uri, str(e) return uri, str(e)
def _clear_google_outbound_proxy(self, url): def _clear_google_outbound_proxy(self, url):
''' '''
So google proxies all their outbound links through a redirect so they can detect outbound links. So google proxies all their outbound links through a redirect so they can detect outbound links.
@@ -117,13 +121,16 @@ class UnshortenIt(object):
This is useful for doing things like parsing google search results, or if you're scraping google This is useful for doing things like parsing google search results, or if you're scraping google
docs, where google inserts hit-counters on all outbound links. docs, where google inserts hit-counters on all outbound links.
''' '''
# This is kind of hacky, because we need to check both the netloc AND # This is kind of hacky, because we need to check both the netloc AND
# part of the path. We could use urllib.parse.urlsplit, but it's # part of the path. We could use urllib.parse.urlsplit, but it's
# easier and just as effective to use string checks. # easier and just as effective to use string checks.
if url.startswith("http://www.google.com/url?") or \ if url.startswith("http://www.google.com/url?") or \
url.startswith("https://www.google.com/url?"): url.startswith("https://www.google.com/url?"):
qs = urlparse(url).query qs = urlparse(url).query
query = parse_qs(qs) query = parse_qs(qs)
if "q" in query: # Google doc outbound links (maybe blogspot, too) if "q" in query: # Google doc outbound links (maybe blogspot, too)
return True, query["q"].pop() return True, query["q"].pop()
elif "url" in query: # Outbound links from google searches elif "url" in query: # Outbound links from google searches
@@ -132,10 +139,11 @@ class UnshortenIt(object):
raise ValueError( raise ValueError(
"Google outbound proxy URL without a target url ('%s')?" % "Google outbound proxy URL without a target url ('%s')?" %
url) url)
return False, url return False, url
def _unshorten_adfly(self, uri): def _unshorten_adfly(self, uri):
logger.info()
try: try:
r = httptools.downloadpage( r = httptools.downloadpage(
uri, timeout=self._timeout, cookies=False) uri, timeout=self._timeout, cookies=False)
@@ -144,11 +152,14 @@ class UnshortenIt(object):
if len(ysmm) > 0: if len(ysmm) > 0:
ysmm = re.sub(r'var ysmm \= \'|\'\;', '', ysmm[0]) ysmm = re.sub(r'var ysmm \= \'|\'\;', '', ysmm[0])
left = '' left = ''
right = '' right = ''
for c in [ysmm[i:i + 2] for i in range(0, len(ysmm), 2)]: for c in [ysmm[i:i + 2] for i in range(0, len(ysmm), 2)]:
left += c[0] left += c[0]
right = c[1] + right right = c[1] + right
# Additional digit arithmetic # Additional digit arithmetic
encoded_uri = list(left + right) encoded_uri = list(left + right)
numbers = ((i, n) for i, n in enumerate(encoded_uri) if str.isdigit(n)) numbers = ((i, n) for i, n in enumerate(encoded_uri) if str.isdigit(n))
@@ -156,9 +167,12 @@ class UnshortenIt(object):
xor = int(first[1]) ^ int(second[1]) xor = int(first[1]) ^ int(second[1])
if xor < 10: if xor < 10:
encoded_uri[first[0]] = str(xor) encoded_uri[first[0]] = str(xor)
decoded_uri = b64decode("".join(encoded_uri).encode())[16:-16].decode() decoded_uri = b64decode("".join(encoded_uri).encode())[16:-16].decode()
if re.search(r'go\.php\?u\=', decoded_uri): if re.search(r'go\.php\?u\=', decoded_uri):
decoded_uri = b64decode(re.sub(r'(.*?)u=', '', decoded_uri)).decode() decoded_uri = b64decode(re.sub(r'(.*?)u=', '', decoded_uri)).decode()
return decoded_uri, r.code return decoded_uri, r.code
else: else:
return uri, 'No ysmm variable found' return uri, 'No ysmm variable found'
@@ -170,15 +184,25 @@ class UnshortenIt(object):
''' '''
(Attempt) to decode linkbucks content. HEAVILY based on the OSS jDownloader codebase. (Attempt) to decode linkbucks content. HEAVILY based on the OSS jDownloader codebase.
This has necessidated a license change. This has necessidated a license change.
''' '''
if config.is_xbmc():
import xbmc
r = httptools.downloadpage(uri, timeout=self._timeout) r = httptools.downloadpage(uri, timeout=self._timeout)
firstGet = time.time() firstGet = time.time()
baseloc = r.url baseloc = r.url
if "/notfound/" in r.url or \ if "/notfound/" in r.url or \
"(>Link Not Found<|>The link may have been deleted by the owner|To access the content, you must complete a quick survey\.)" in r.data: "(>Link Not Found<|>The link may have been deleted by the owner|To access the content, you must complete a quick survey\.)" in r.data:
return uri, 'Error: Link not found or requires a survey!' return uri, 'Error: Link not found or requires a survey!'
link = None link = None
content = r.data content = r.data
regexes = [ regexes = [
r"<div id=\"lb_header\">.*?/a>.*?<a.*?href=\"(.*?)\".*?class=\"lb", r"<div id=\"lb_header\">.*?/a>.*?<a.*?href=\"(.*?)\".*?class=\"lb",
r"AdBriteInit\(\"(.*?)\"\)", r"AdBriteInit\(\"(.*?)\"\)",
@@ -187,49 +211,69 @@ class UnshortenIt(object):
r"src=\"http://static\.linkbucks\.com/tmpl/mint/img/lb\.gif\" /></a>.*?<a href=\"(.*?)\"", r"src=\"http://static\.linkbucks\.com/tmpl/mint/img/lb\.gif\" /></a>.*?<a href=\"(.*?)\"",
r"id=\"content\" src=\"([^\"]*)", r"id=\"content\" src=\"([^\"]*)",
] ]
for regex in regexes: for regex in regexes:
if self.inValidate(link): if self.inValidate(link):
link = find_in_text(regex, content) link = find_in_text(regex, content)
if self.inValidate(link): if self.inValidate(link):
match = find_in_text(r"noresize=\"[0-9+]\" src=\"(http.*?)\"", content) match = find_in_text(r"noresize=\"[0-9+]\" src=\"(http.*?)\"", content)
if match: if match:
link = find_in_text(r"\"frame2\" frameborder.*?src=\"(.*?)\"", content) link = find_in_text(r"\"frame2\" frameborder.*?src=\"(.*?)\"", content)
if self.inValidate(link): if self.inValidate(link):
scripts = re.findall("(<script type=\"text/javascript\">[^<]+</script>)", content) scripts = re.findall("(<script type=\"text/javascript\">[^<]+</script>)", content)
if not scripts: if not scripts:
return uri, "No script bodies found?" return uri, "No script bodies found?"
js = False js = False
for script in scripts: for script in scripts:
# cleanup # cleanup
script = re.sub(r"[\r\n\s]+\/\/\s*[^\r\n]+", "", script) script = re.sub(r"[\r\n\s]+\/\/\s*[^\r\n]+", "", script)
if re.search(r"\s*var\s*f\s*=\s*window\['init'\s*\+\s*'Lb'\s*\+\s*'js'\s*\+\s*''\];[\r\n\s]+", script): if re.search(r"\s*var\s*f\s*=\s*window\['init'\s*\+\s*'Lb'\s*\+\s*'js'\s*\+\s*''\];[\r\n\s]+", script):
js = script js = script
if not js: if not js:
return uri, "Could not find correct script?" return uri, "Could not find correct script?"
token = find_in_text(r"Token\s*:\s*'([a-f0-9]{40})'", js) token = find_in_text(r"Token\s*:\s*'([a-f0-9]{40})'", js)
if not token: if not token:
token = find_in_text(r"\?t=([a-f0-9]{40})", js) token = find_in_text(r"\?t=([a-f0-9]{40})", js)
assert token assert token
authKeyMatchStr = r"A(?:'\s*\+\s*')?u(?:'\s*\+\s*')?t(?:'\s*\+\s*')?h(?:'\s*\+\s*')?K(?:'\s*\+\s*')?e(?:'\s*\+\s*')?y" authKeyMatchStr = r"A(?:'\s*\+\s*')?u(?:'\s*\+\s*')?t(?:'\s*\+\s*')?h(?:'\s*\+\s*')?K(?:'\s*\+\s*')?e(?:'\s*\+\s*')?y"
l1 = find_in_text(r"\s*params\['" + authKeyMatchStr + r"'\]\s*=\s*(\d+?);", js) l1 = find_in_text(r"\s*params\['" + authKeyMatchStr + r"'\]\s*=\s*(\d+?);", js)
l2 = find_in_text( l2 = find_in_text(
r"\s*params\['" + authKeyMatchStr + r"'\]\s*=\s?params\['" + authKeyMatchStr + r"'\]\s*\+\s*(\d+?);", r"\s*params\['" + authKeyMatchStr + r"'\]\s*=\s?params\['" + authKeyMatchStr + r"'\]\s*\+\s*(\d+?);",
js) js)
if any([not l1, not l2, not token]): if any([not l1, not l2, not token]):
return uri, "Missing required tokens?" return uri, "Missing required tokens?"
authkey = int(l1) + int(l2) authkey = int(l1) + int(l2)
p1_url = urljoin(baseloc, "/director/?t={tok}".format(tok=token)) p1_url = urljoin(baseloc, "/director/?t={tok}".format(tok=token))
r2 = httptools.downloadpage(p1_url, timeout=self._timeout) r2 = httptools.downloadpage(p1_url, timeout=self._timeout)
p1_url = urljoin(baseloc, "/scripts/jquery.js?r={tok}&{key}".format(tok=token, key=l1)) p1_url = urljoin(baseloc, "/scripts/jquery.js?r={tok}&{key}".format(tok=token, key=l1))
r2_1 = httptools.downloadpage(p1_url, timeout=self._timeout) r2 = httptools.downloadpage(p1_url, timeout=self._timeout)
time_left = 5.033 - (time.time() - firstGet) time_left = 5.033 - (time.time() - firstGet)
xbmc.sleep(max(time_left, 0) * 1000) if config.is_xbmc():
xbmc.sleep(max(time_left, 0) * 1000)
else:
time.sleep(5 * 1000)
p3_url = urljoin(baseloc, "/intermission/loadTargetUrl?t={tok}&aK={key}&a_b=false".format(tok=token, p3_url = urljoin(baseloc, "/intermission/loadTargetUrl?t={tok}&aK={key}&a_b=false".format(tok=token,
key=str(authkey))) key=str(authkey)))
r3 = httptools.downloadpage(p3_url, timeout=self._timeout) r3 = httptools.downloadpage(p3_url, timeout=self._timeout)
resp_json = json.loads(r3.data) resp_json = json.loads(r3.data)
if "Url" in resp_json: if "Url" in resp_json:
return resp_json['Url'], r3.code return resp_json['Url'], r3.code
return "Wat", "wat" return "Wat", "wat"
def inValidate(self, s): def inValidate(self, s):
@@ -237,23 +281,30 @@ class UnshortenIt(object):
# (s == null || s != null && (s.matches("[\r\n\t ]+") || s.equals("") || s.equalsIgnoreCase("about:blank"))) # (s == null || s != null && (s.matches("[\r\n\t ]+") || s.equals("") || s.equalsIgnoreCase("about:blank")))
if not s: if not s:
return True return True
if re.search("[\r\n\t ]+", s) or s.lower() == "about:blank": if re.search("[\r\n\t ]+", s) or s.lower() == "about:blank":
return True return True
else: else:
return False return False
def _unshorten_adfocus(self, uri): def _unshorten_adfocus(self, uri):
orig_uri = uri orig_uri = uri
try: try:
r = httptools.downloadpage(uri, timeout=self._timeout) r = httptools.downloadpage(uri, timeout=self._timeout)
html = r.data html = r.data
adlink = re.findall("click_url =.*;", html) adlink = re.findall("click_url =.*;", html)
if len(adlink) > 0: if len(adlink) > 0:
uri = re.sub('^click_url = "|"\;$', '', adlink[0]) uri = re.sub('^click_url = "|"\;$', '', adlink[0])
if re.search(r'http(s|)\://adfoc\.us/serve/skip/\?id\=', uri): if re.search(r'http(s|)\://adfoc\.us/serve/skip/\?id\=', uri):
http_header = dict() http_header = dict()
http_header["Host"] = "adfoc.us" http_header["Host"] = "adfoc.us"
http_header["Referer"] = orig_uri http_header["Referer"] = orig_uri
r = httptools.downloadpage(uri, headers=http_header, timeout=self._timeout) r = httptools.downloadpage(uri, headers=http_header, timeout=self._timeout)
uri = r.url uri = r.url
return uri, r.code return uri, r.code
else: else:
@@ -283,16 +334,23 @@ class UnshortenIt(object):
try: try:
r = httptools.downloadpage(uri, timeout=self._timeout) r = httptools.downloadpage(uri, timeout=self._timeout)
html = r.data html = r.data
session_id = re.findall(r'sessionId\:(.*?)\"\,', html) session_id = re.findall(r'sessionId\:(.*?)\"\,', html)
if len(session_id) > 0: if len(session_id) > 0:
session_id = re.sub(r'\s\"', '', session_id[0]) session_id = re.sub(r'\s\"', '', session_id[0])
http_header = dict() http_header = dict()
http_header["Content-Type"] = "application/x-www-form-urlencoded" http_header["Content-Type"] = "application/x-www-form-urlencoded"
http_header["Host"] = "sh.st" http_header["Host"] = "sh.st"
http_header["Referer"] = uri http_header["Referer"] = uri
http_header["Origin"] = "http://sh.st" http_header["Origin"] = "http://sh.st"
http_header["X-Requested-With"] = "XMLHttpRequest" http_header["X-Requested-With"] = "XMLHttpRequest"
xbmc.sleep(5 * 1000)
if config.is_xbmc():
xbmc.sleep(5 * 1000)
else:
time.sleep(5 * 1000)
payload = {'adSessionId': session_id, 'callback': 'c'} payload = {'adSessionId': session_id, 'callback': 'c'}
r = httptools.downloadpage( r = httptools.downloadpage(
'http://sh.st/shortest-url/end-adsession?' + 'http://sh.st/shortest-url/end-adsession?' +
@@ -300,6 +358,7 @@ class UnshortenIt(object):
headers=http_header, headers=http_header,
timeout=self._timeout) timeout=self._timeout)
response = r.data[6:-2].decode('utf-8') response = r.data[6:-2].decode('utf-8')
if r.code == 200: if r.code == 200:
resp_uri = json.loads(response)['destinationUrl'] resp_uri = json.loads(response)['destinationUrl']
if resp_uri is not None: if resp_uri is not None:
@@ -325,8 +384,7 @@ class UnshortenIt(object):
r = httptools.downloadpage( r = httptools.downloadpage(
extracted_uri, extracted_uri,
timeout=self._timeout, timeout=self._timeout,
follow_redirects=False, follow_redirects=False)
only_headers=True)
return r.url, r.code return r.url, r.code
except Exception as e: except Exception as e:
return uri, str(e) return uri, str(e)
@@ -339,9 +397,12 @@ class UnshortenIt(object):
try: try:
r = httptools.downloadpage(uri, timeout=self._timeout, cookies=False) r = httptools.downloadpage(uri, timeout=self._timeout, cookies=False)
html = r.data html = r.data
uri = re.findall(r"<input type='hidden' name='\d+' id='\d+' value='([^']+)'>", html)[0] uri = re.findall(r"<input type='hidden' name='\d+' id='\d+' value='([^']+)'>", html)[0]
from core import scrapertools from core import scrapertools
uri = scrapertools.decodeHtmlentities(uri) uri = scrapertools.decodeHtmlentities(uri)
uri = uri.replace("&sol;", "/") \ uri = uri.replace("&sol;", "/") \
.replace("&colon;", ":") \ .replace("&colon;", ":") \
.replace("&period;", ".") \ .replace("&period;", ".") \
@@ -349,6 +410,7 @@ class UnshortenIt(object):
.replace("&num;", "#") \ .replace("&num;", "#") \
.replace("&quest;", "?") \ .replace("&quest;", "?") \
.replace("&lowbar;", "_") .replace("&lowbar;", "_")
return uri, r.code return uri, r.code
except Exception as e: except Exception as e:
@@ -358,7 +420,9 @@ class UnshortenIt(object):
try: try:
r = httptools.downloadpage(uri, timeout=self._timeout, cookies=False) r = httptools.downloadpage(uri, timeout=self._timeout, cookies=False)
html = r.data html = r.data
uri = re.findall(r'<a class="button" href="([^"]+)">Click to continue</a>', html)[0]
uri = re.findall(r'<a class="push_button blue" href=([^>]+)>', html)[0]
return uri, r.code return uri, r.code
except Exception as e: except Exception as e:
@@ -379,6 +443,7 @@ def unshorten_only(uri, type=None, timeout=10):
def unshorten(uri, type=None, timeout=10): def unshorten(uri, type=None, timeout=10):
unshortener = UnshortenIt() unshortener = UnshortenIt()
uri, status = unshortener.unwrap_30x(uri, timeout=timeout)
uri, status = unshortener.unshorten(uri, type=type) uri, status = unshortener.unshorten(uri, type=type)
if status == 200: if status == 200:
uri, status = unshortener.unwrap_30x(uri, timeout=timeout) uri, status = unshortener.unwrap_30x(uri, timeout=timeout)
@@ -1894,7 +1894,7 @@ msgid "Uploading new data"
msgstr "" msgstr ""
msgctxt "#60470" msgctxt "#60470"
msgid "Buscando en Tmdb......." msgid "Searching in Tmdb......."
msgstr "" msgstr ""
msgctxt "#60471" msgctxt "#60471"
@@ -2766,7 +2766,7 @@ msgid "Beginning"
msgstr "" msgstr ""
msgctxt "#70013" msgctxt "#70013"
msgid "Terror" msgid "Horror"
msgstr "" msgstr ""
msgctxt "#70014" msgctxt "#70014"
@@ -3862,8 +3862,8 @@ msgid "Alfa\nCorrected an error in the adult section, the password has been rese
msgstr " " msgstr " "
msgctxt "#70290" msgctxt "#70290"
msgid "default, you will have to change it again if you want.\ n Type 's', if you have understood it: " msgid "default, you will have to change it again if you want.\nType 's', if you have understood it: "
msgstr " " msgstr ""
msgctxt "#70291" msgctxt "#70291"
msgid "Error, during conversion" msgid "Error, during conversion"
@@ -4277,4 +4277,501 @@ msgstr ""
msgctxt "#70392" msgctxt "#70392"
msgid "Rate with a [COLOR %s]%s[/ COLOR]" msgid "Rate with a [COLOR %s]%s[/ COLOR]"
msgstr "" msgstr ""
msgctxt "#70393"
msgid "[%s]: Select the correct %s "
msgstr ""
msgctxt "#70394"
msgid "Action"
msgstr ""
msgctxt "#70395"
msgid "Sport"
msgstr ""
msgctxt "#70396"
msgid "Documentary"
msgstr ""
msgctxt "#70397"
msgid "Science fiction"
msgstr ""
msgctxt "#70398"
msgid "Talk Show"
msgstr ""
msgctxt "#70399"
msgid "Family"
msgstr ""
msgctxt "#70400"
msgid "Film-Noir"
msgstr ""
msgctxt "#70401"
msgid "Game-Show"
msgstr ""
msgctxt "#70402"
msgid "Mystery"
msgstr ""
msgctxt "#70403"
msgid "Biography"
msgstr ""
msgctxt "#70404"
msgid "Music"
msgstr ""
msgctxt "#70405"
msgid "History"
msgstr ""
msgctxt "#70406"
msgid "Reality-TV"
msgstr ""
msgctxt "#70407"
msgid "War"
msgstr ""
msgctxt "#70408"
msgid "Musical"
msgstr ""
msgctxt "#70409"
msgid "Romance"
msgstr ""
msgctxt "#70410"
msgid "Thriller"
msgstr "Thriller"
msgctxt "#70411"
msgid "Western"
msgstr ""
msgctxt "#70412"
msgid "Drama"
msgstr ""
msgctxt "#70413"
msgid "2. Enter this code on the page and click Allow: %s"
msgstr ""
msgctxt "#70414"
msgid "Authentication. Do not close this window!!"
msgstr ""
msgctxt "#70415"
msgid "Trakt.tv"
msgstr ""
msgctxt "#70416"
msgid "=== Movies ==="
msgstr ""
msgctxt "#70417"
msgid "=== TV Shows ==="
msgstr ""
msgctxt "#70418"
msgid "Search language in TMDB"
msgstr ""
msgctxt "#70419"
msgid "German"
msgstr ""
msgctxt "#70420"
msgid "French"
msgstr ""
msgctxt "#70421"
msgid "Portuguese"
msgstr ""
msgctxt "#70422"
msgid "Italian"
msgstr ""
msgctxt "#70423"
msgid "Spanish Latin"
msgstr ""
msgctxt "#70424"
msgid "Catalan"
msgstr ""
msgctxt "#70425"
msgid "English"
msgstr ""
msgctxt "#70426"
msgid "Alternative language for TMDB (No main language synopsis)"
msgstr ""
msgctxt "#70427"
msgid "Language of titles in IMDB"
msgstr ""
msgctxt "#70428"
msgid "Filmaffinity website"
msgstr ""
msgctxt "#70429"
msgid "Colombia"
msgstr ""
msgctxt "#70430"
msgid "Chile"
msgstr ""
msgctxt "#70431"
msgid "Argentina"
msgstr ""
msgctxt "#70432"
msgid "Mexico"
msgstr ""
msgctxt "#70433"
msgid "US/UK"
msgstr ""
msgctxt "#70434"
msgid "Spain"
msgstr ""
msgctxt "#70435"
msgid "User Filmaaffinity (Optional)"
msgstr ""
msgctxt "#70436"
msgid "Password Filmaffinity"
msgstr ""
msgctxt "#70437"
msgid "Order personal lists of Filmaffinity by:"
msgstr ""
msgctxt "#70438"
msgid "Position"
msgstr ""
msgctxt "#70439"
msgid "Vote"
msgstr ""
msgctxt "#70440"
msgid "Average grade"
msgstr ""
msgctxt "#70441"
msgid "User MyAnimeList (Optional)"
msgstr ""
msgctxt "#70442"
msgid "Password MyAnimeList"
msgstr ""
msgctxt "#70443"
msgid "Show Hentai in MyAnimeList"
msgstr ""
msgctxt "#70444"
msgid "Profile 3"
msgstr ""
msgctxt "#70445"
msgid "Profile 2"
msgstr ""
msgctxt "#70446"
msgid "Profile 1"
msgstr ""
msgctxt "#70447"
msgid "[%s] The file has been deleted"
msgstr ""
msgctxt "#70448"
msgid "[%s] The file is still in process"
msgstr ""
msgctxt "#70449"
msgid ""
msgstr ""
msgctxt "#70450"
msgid "Anyone"
msgstr ""
msgctxt "#70451"
msgid "Select one, none or more than one gender"
msgstr "S"
msgctxt "#70452"
msgid "Year from"
msgstr ""
msgctxt "#70453"
msgid "Year until"
msgstr ""
msgctxt "#70454"
msgid "Minimum number of votes"
msgstr ""
msgctxt "#70455"
msgid "Order by"
msgstr ""
msgctxt "#70456"
msgid "Popularity Desc"
msgstr ""
msgctxt "#70457"
msgid "Popularity Asc"
msgstr ""
msgctxt "#70458"
msgid "Year Desc"
msgstr ""
msgctxt "#70459"
msgid "Year Asc"
msgstr ""
msgctxt "#70460"
msgid "Desc Rating"
msgstr ""
msgctxt "#70461"
msgid "Asc Rating"
msgstr ""
msgctxt "#70462"
msgid "Title [A-Z]"
msgstr ""
msgctxt "#70463"
msgid "Title [Z-A]"
msgstr ""
msgctxt "#70464"
msgid "Set as default filter"
msgstr ""
msgctxt "#70465"
msgid "Key word"
msgstr ""
msgctxt "#70466"
msgid "Country"
msgstr ""
msgctxt "#70467"
msgid "Select a genre"
msgstr ""
msgctxt "#70468"
msgid "Indicate your vote"
msgstr ""
msgctxt "#70469"
msgid "Added"
msgstr ""
msgctxt "#70470"
msgid "Premiere"
msgstr ""
msgctxt "#70471"
msgid "Duration"
msgstr ""
msgctxt "#70472"
msgid "Popularity"
msgstr ""
msgctxt "#70473"
msgid "Rating"
msgstr ""
msgctxt "#70474"
msgid "Votes"
msgstr ""
msgctxt "#70475"
msgid "upward"
msgstr ""
msgctxt "#70476"
msgid "falling"
msgstr ""
msgctxt "#70477"
msgid "Upward"
msgstr ""
msgctxt "#70478"
msgid "Falling"
msgstr ""
msgctxt "#70479"
msgid "Currently watching"
msgstr ""
msgctxt "#70480"
msgid "Completed"
msgstr ""
msgctxt "#70481"
msgid "Anticipated to see"
msgstr ""
msgctxt "#70482"
msgid "Kind"
msgstr ""
msgctxt "#70483"
msgid "Special"
msgstr ""
msgctxt "#70484"
msgid "OVA"
msgstr ""
msgctxt "#70485"
msgid "Status"
msgstr ""
msgctxt "#70486"
msgid "(1) Grotesque"
msgstr ""
msgctxt "#70487"
msgid "(2) Horrible"
msgstr ""
msgctxt "#70488"
msgid "(3) Very bad"
msgstr ""
msgctxt "#70489"
msgid "(4) Bad"
msgstr ""
msgctxt "#70490"
msgid "(5) Regular"
msgstr ""
msgctxt "#70491"
msgid "(6) Pasable"
msgstr ""
msgctxt "#70492"
msgid "(7) Good"
msgstr ""
msgctxt "#70493"
msgid "(8) Very good"
msgstr ""
msgctxt "#70494"
msgid "(9) Genial"
msgstr ""
msgctxt "#70495"
msgid "(10) Masterpiece"
msgstr ""
msgctxt "#70496"
msgid "The search for "
msgstr ""
msgctxt "#70497"
msgid " did not match."
msgstr ""
msgctxt "#70498"
msgid "Producer: "
msgstr ""
msgctxt "#70499"
msgid "Genre: "
msgstr ""
msgctxt "#70500"
msgid "Notification([COLOR red][B]Update Kodi to its latest version[/B][/COLOR], [COLOR skyblue]for best info[/COLOR],8000, "http://i.imgur.com/mHgwcn3.png")"
msgstr ""
msgctxt "#70501"
msgid "Search did not match (%s)"
msgstr ""
msgctxt "#70502"
msgid ">> Next"
msgstr ""
msgctxt "#70503"
msgid "There is no available video"
msgstr ""
msgctxt "#70504"
msgid "Loading trailers..."
msgstr ""
msgctxt "#70505"
msgid "Enter the title to search"
msgstr ""
msgctxt "#70506"
msgid "Searching: "
msgstr ""
msgctxt "#70507"
msgid "Search in Youtube"
msgstr ""
msgctxt "#70508"
msgid "Search in Abandomoviez"
msgstr ""
msgctxt "#70509"
msgid "Search in Jayhap (Youtube, Vimeo & Dailymotion)"
msgstr ""
msgctxt "#70510"
msgid "Manual Search in Youtube"
msgstr ""
msgctxt "#70511"
msgid "Manual Search in Abandomoviez"
msgstr ""
msgctxt "#70512"
msgid "Searching in abandomoviez"
msgstr ""
msgctxt "#70513"
msgid "Manual Searching in Filmaffinity"
msgstr ""
msgctxt "#70514"
msgid "Manual Search in Jayhap"
msgstr ""
msgctxt "#70515"
msgid "[COLOR aquamarine][B]Completed %s[/B][/COLOR]"
msgstr ""
msgctxt "#70516"
msgid "[COLOR aquamarine][B]In progress %s[/B][/COLOR]"
msgstr ""
@@ -2754,7 +2754,7 @@ msgid "Beginnin"
msgstr "Inizio" msgstr "Inizio"
msgctxt "#70013" msgctxt "#70013"
msgid "Terror" msgid "Horror"
msgstr "Orrore" msgstr "Orrore"
msgctxt "#70014" msgctxt "#70014"
@@ -3846,8 +3846,8 @@ msgid "Alfa\nCorrected an error in the adult section, the password has been rese
msgstr "Alfa\nCorretto un errore nella sezione adulti, la password è sta resettata a quella di " msgstr "Alfa\nCorretto un errore nella sezione adulti, la password è sta resettata a quella di "
msgctxt "#70290" msgctxt "#70290"
msgid "default, you will have to change it again if you want.\ n Type 's', if you have understood it: " msgid "default, you will have to change it again if you want.\nType 's', if you have understood it: "
msgstr "default, puoi cambiarla di nuovo se vuoi.\n Scrivi 's', se hai capito: " msgstr "default, puoi cambiarla di nuovo se vuoi.\nScrivi 's', se hai capito: "
msgctxt "#70291" msgctxt "#70291"
msgid "Error, during conversion" msgid "Error, during conversion"
@@ -3997,7 +3997,7 @@ msgstr "[FA] Aggiungi o rimuovi da un elenco utenti"
msgctxt "#70327" msgctxt "#70327"
msgid "It's part of: %s" msgid "It's part of: %s"
msgstr "E'parte di: %s" msgstr "Fa parte di: %s"
msgctxt "#70328" msgctxt "#70328"
msgid "%ss similarar" msgid "%ss similarar"
@@ -4261,4 +4261,505 @@ msgstr "Aggiungi alla lista %s"
msgctxt "#70392" msgctxt "#70392"
msgid "Rate with a [COLOR %s]%s[/ COLOR]" msgid "Rate with a [COLOR %s]%s[/ COLOR]"
msgstr "Dai un punteggio con un [COLOR %s]%s[/COLOR]" msgstr "Dai un punteggio con un [COLOR %s]%s[/COLOR]"
msgctxt "#70393"
msgid "[%s]: Select the correct %s "
msgstr "[%s]: Seleziona la %s corretta"
msgctxt "#70394"
msgid "Action"
msgstr "Azione"
msgctxt "#70395"
msgid "Sport"
msgstr "Sport"
msgctxt "#70396"
msgid "Documentary"
msgstr "Documentari"
msgctxt "#70397"
msgid "Science fiction"
msgstr "Fantascienza"
msgctxt "#70398"
msgid "Talk Show"
msgstr "Talk Show"
msgctxt "#70399"
msgid "Family"
msgstr "Famiglia"
msgctxt "#70400"
msgid "Film-Noir"
msgstr "Film Noir"
msgctxt "#70401"
msgid "Game-Show"
msgstr "Game Show"
msgctxt "#70402"
msgid "Mystery"
msgstr "Mistero"
msgctxt "#70403"
msgid "Biography"
msgstr "Biografía"
msgctxt "#70404"
msgid "Music"
msgstr "Musica"
msgctxt "#70405"
msgid "History"
msgstr "Storico"
msgctxt "#70406"
msgid "Reality-TV"
msgstr "Reality Show"
msgctxt "#70407"
msgid "War"
msgstr "Guerra"
msgctxt "#70408"
msgid "Musical"
msgstr "Musical"
msgctxt "#70409"
msgid "Romance"
msgstr "Romantico"
msgctxt "#70410"
msgid "Thriller"
msgstr "Thriller"
msgctxt "#70411"
msgid "Western"
msgstr "Western"
msgctxt "#70412"
msgid "Drama"
msgstr "Drammatico"
msgctxt "#70413"
msgid ""
msgstr ""
msgctxt "#70413"
msgid "2. Enter this code on the page and click Allow: %s"
msgstr "2. Inserisci questo codice nella pagina e premi Allow: %s"
msgctxt "#70414"
msgid "Authentication. Do not close this window!!"
msgstr "Autenticazione. Non chiudere questa finestra!!"
msgctxt "#70415"
msgid "Trakt.tv"
msgstr "Trakt.tv"
msgctxt "#70416"
msgid "=== Movies ==="
msgstr "=== Film ==="
msgctxt "#70417"
msgid "=== TV Shows ==="
msgstr "=== Serie TV ==="
msgctxt "#70418"
msgid "Search language in TMDB"
msgstr "Ligua di ricerca in TMDB"
msgctxt "#70419"
msgid "German"
msgstr "Tedesco"
msgctxt "#70420"
msgid "French"
msgstr "Francese"
msgctxt "#70421"
msgid "Portuguese"
msgstr "Portoghese"
msgctxt "#70422"
msgid "Italian"
msgstr "Italiano"
msgctxt "#70423"
msgid "Spanish Latin"
msgstr "Spagnolo Latino"
msgctxt "#70424"
msgid "Catalan"
msgstr "Catalano"
msgctxt "#70425"
msgid "English"
msgstr "Inglese"
msgctxt "#70426"
msgid "Alternative language for TMDB (No main language synopsis)"
msgstr "Linguaggio alternativo per TMDB (sinossi senza lingua principale)"
msgctxt "#70427"
msgid "Language of titles in IMDB"
msgstr "Lingua per i titoli in IMDB"
msgctxt "#70428"
msgid "Filmaffinity website"
msgstr "Sitio Web Filmaffinity"
msgctxt "#70429"
msgid "Colombia"
msgstr "Colombia"
msgctxt "#70430"
msgid "Chile"
msgstr "Cile"
msgctxt "#70431"
msgid "Argentina"
msgstr "Argentina"
msgctxt "#70432"
msgid "Mexico"
msgstr "Messico"
msgctxt "#70433"
msgid "US/UK"
msgstr "US/UK"
msgctxt "#70434"
msgid "Spain"
msgstr "Spagna"
msgctxt "#70435"
msgid "User Filmaaffinity (Optional)"
msgstr "Username Filmaffinity (Opzionale)"
msgctxt "#70436"
msgid "Password Filmaffinity"
msgstr "Password Filmaffinity"
msgctxt "#70437"
msgid "Order personal lists of Filmaffinity by:"
msgstr "Ordina liste personali di Filmaffinity per:"
msgctxt "#70438"
msgid "Position"
msgstr "Posizione"
msgctxt "#70439"
msgid "Vote"
msgstr "Voto"
msgctxt "#70440"
msgid "Average grade"
msgstr "Valutazione media"
msgctxt "#70441"
msgid "User MyAnimeList (Optional)"
msgstr "Username MyAnimeList (Opzionale)"
msgctxt "#70442"
msgid "Password MyAnimeList"
msgstr "Password MyAnimeList"
msgctxt "#70443"
msgid "Show Hentai in MyAnimeList"
msgstr "Mostra Hentai in MyAnimeList"
msgctxt "#70444"
msgid "Profile 3"
msgstr "Perofilo 3"
msgctxt "#70445"
msgid "Profile 2"
msgstr "Profilo 2"
msgctxt "#70446"
msgid "Profile 1"
msgstr "Profilo 1"
msgctxt "#70447"
msgid "[%s] The file has been deleted"
msgstr "[%s] Il file è stato cancellato"
msgctxt "#70448"
msgid "[%s] The file is still in process"
msgstr "[%s] Il file è ancora in elaborazione"
msgctxt "#70449"
msgid "[%s] The file does not exist or has been deleted"
msgstr "[%s] Il file non esiste oppure è stato cancellato"
msgctxt "#70450"
msgid "Anyone"
msgstr "Qualsiasi"
msgctxt "#70451"
msgid "Select one, none or more than one gender"
msgstr "Seleziona uno, nessuno o più di un genere"
msgctxt "#70452"
msgid "Year from"
msgstr "Anno da:"
msgctxt "#70453"
msgid "Year until"
msgstr "Anno fino a:"
msgctxt "#70454"
msgid "Minimum number of votes"
msgstr "Numero minimo di voti"
msgctxt "#70455"
msgid "Order by"
msgstr "Ordina per"
msgctxt "#70456"
msgid "Popularity Desc"
msgstr "Popolarità Desc"
msgctxt "#70457"
msgid "Popularity Asc"
msgstr "Popolarità Asc"
msgctxt "#70458"
msgid "Year Desc"
msgstr "Anno Desc"
msgctxt "#70459"
msgid "Year Asc"
msgstr "Anno Asc"
msgctxt "#70460"
msgid "Desc Rating"
msgstr "Rating Desc"
msgctxt "#70461"
msgid "Asc Rating"
msgstr "Rating Asc"
msgctxt "#70462"
msgid "Title [A-Z]"
msgstr "Titolo [A-Z]"
msgctxt "#70463"
msgid "Title [Z-A]"
msgstr "Titolo[Z-A]"
msgctxt "#70464"
msgid "Set as default filter"
msgstr "Impostare come filtro di default"
msgctxt "#70465"
msgid "Key word"
msgstr "Parola Chiave"
msgctxt "#70466"
msgid "Country"
msgstr "Nazione"
msgctxt "#70467"
msgid "Select a genre"
msgstr "Seleziona un genere"
msgctxt "#70468"
msgid "Indicate your vote"
msgstr "Indica il tuo voto:"
msgctxt "#70469"
msgid "Added"
msgstr "Aggiunto"
msgctxt "#70470"
msgid "Premiere"
msgstr "Premiere"
msgctxt "#70471"
msgid "Duration"
msgstr "Durata"
msgctxt "#70472"
msgid "Popularity"
msgstr "Popolarità"
msgctxt "#70473"
msgid "Rating"
msgstr "Rating"
msgctxt "#70474"
msgid "Votes"
msgstr "Voti"
msgctxt "#70475"
msgid "upward"
msgstr "ascendente"
msgctxt "#70476"
msgid "falling"
msgstr "discendente"
msgctxt "#70477"
msgid "Upward"
msgstr "Ascendente"
msgctxt "#70478"
msgid "Falling"
msgstr "Discendente"
msgctxt "#70479"
msgid "Currently watching"
msgstr "In visione attualmente"
msgctxt "#70480"
msgid "Completed"
msgstr "Completati"
msgctxt "#70481"
msgid "Anticipated to see"
msgstr "Da vedersi"
msgctxt "#70482"
msgid "Kind"
msgstr "Tipo"
msgctxt "#70483"
msgid "Special"
msgstr "Special"
msgctxt "#70484"
msgid "OVA"
msgstr "OVA"
msgctxt "#70485"
msgid "Status"
msgstr "Stato"
msgctxt "#70486"
msgid "(1) Grotesque"
msgstr "(1) Grottesco"
msgctxt "#70487"
msgid "(2) Horrible"
msgstr "(2) orribile"
msgctxt "#70488"
msgid "(3) Very bad"
msgstr "(3) Bruttissimo"
msgctxt "#70489"
msgid "(4) Bad"
msgstr "(4) Brutto"
msgctxt "#70490"
msgid "(5) Regular"
msgstr "(5) Regulare"
msgctxt "#70491"
msgid "(6) Pasable"
msgstr "(6) Passabile"
msgctxt "#70492"
msgid "(7) Good"
msgstr "(7) Buono"
msgctxt "#70493"
msgid "(8) Very good"
msgstr "(8) Ottimo"
msgctxt "#70494"
msgid "(9) Genial"
msgstr "(9) Geniale"
msgctxt "#70495"
msgid "(10) Masterpiece"
msgstr "(10) Capolavoro"
msgctxt "#70496"
msgid "The search for "
msgstr "La ricerca di "
msgctxt "#70497"
msgid " did not match."
msgstr " non ha dato risultati."
msgctxt "#70498"
msgid "Producer: "
msgstr "Produzione: "
msgctxt "#70499"
msgid "Genre: "
msgstr "Genere: "
msgctxt "#70500"
msgid "Notification([COLOR red][B]Update Kodi to its latest version[/B][/COLOR], [COLOR skyblue]for best info[/COLOR],8000, "http://i.imgur.com/mHgwcn3.png")"
msgstr "Notifica([COLOR red][B]Aggiorna Kodi alla sua ultima versione[/B][/COLOR], [COLOR skyblue]per migliori info[/COLOR],8000, "http://i.imgur.com/mHgwcn3.png")"
msgctxt "#70501"
msgid "Search did not match (%s)"
msgstr "La ricerca non ha dato risultati (%s)"
msgctxt "#70502"
msgid ">> Next"
msgstr ">> Successivo"
msgctxt "#70503"
msgid "There is no available video"
msgstr "Nessun video disponibile"
msgctxt "#70504"
msgid "Loading trailers..."
msgstr "Caricamento trailers..."
msgctxt "#70505"
msgid "Enter the title to search"
msgstr "Inserisci il titolo da cercare"
msgctxt "#70506"
msgid "Searching: "
msgstr "Ricerca: "
msgctxt "#70507"
msgid "Search in Youtube"
msgstr "Ricerca in Youtube"
msgctxt "#70508"
msgid "Search in Abandomoviez"
msgstr "Ricerca inAbandomoviez"
msgctxt "#70509"
msgid "Search in Jayhap (Youtube, Vimeo & Dailymotion)"
msgstr "Ricerca in Jayhap (Youtube, Vimeo & Dailymotion)"
msgctxt "#70510"
msgid "Manual Search in Youtube"
msgstr "Ricerca Manuale in Youtube"
msgctxt "#70511"
msgid "Manual Search in Abandomoviez"
msgstr "Ricerca Manuale in Abandomoviez"
msgctxt "#70512"
msgid "Searching in abandomoviez"
msgstr "Ricerca in abandomoviez"
msgctxt "#70513"
msgid "Manual Searching in Filmaffinity"
msgstr "Ricerca Manuale in Filmaffinity"
msgctxt "#70514"
msgid "Manual Search in Jayhap"
msgstr "Ricerca Manuale in Jayhap"
msgctxt "#70515"
msgid "[COLOR aquamarine][B]Completed %s[/B][/COLOR]"
msgstr "[COLOR aquamarine][B]Completata %s[/B][/COLOR]"
msgctxt "#70516"
msgid "[COLOR aquamarine][B]In progress %s[/B][/COLOR]"
msgstr "[COLOR aquamarine][B]In Corso %s[/B][/COLOR]"
@@ -2766,7 +2766,7 @@ msgid "Beginning"
msgstr "Inìcio" msgstr "Inìcio"
msgctxt "#70013" msgctxt "#70013"
msgid "Terror" msgid "Horror"
msgstr "Terror" msgstr "Terror"
msgctxt "#70014" msgctxt "#70014"
@@ -3255,7 +3255,7 @@ msgstr "Colores Personalizados"
msgctxt "#70137" msgctxt "#70137"
msgid "Movies" msgid "Movies"
msgstr "Peliculas" msgstr "Películas"
msgctxt "#70138" msgctxt "#70138"
msgid "Low Rating" msgid "Low Rating"
@@ -3850,7 +3850,7 @@ msgid "Alfa\nCorrected an error in the adult section, the password has been rese
msgstr "Alfa\nCorregido un error en la seccion adultos, se ha reseteado la contrasena a por " msgstr "Alfa\nCorregido un error en la seccion adultos, se ha reseteado la contrasena a por "
msgctxt "#70290" msgctxt "#70290"
msgid "default, you will have to change it again if you want.\ n Type 's', if you have understood it: " msgid "default, you will have to change it again if you want.\n Type 's', if you have understood it: "
msgstr "defecto, tendra que cambiarla de nuevo si lo desea.\n Escriba 's', si lo ha entendido: " msgstr "defecto, tendra que cambiarla de nuevo si lo desea.\n Escriba 's', si lo ha entendido: "
msgctxt "#70291" msgctxt "#70291"
@@ -3964,7 +3964,7 @@ msgid "Listen to BSO - List of songs"
msgstr "Escuchar BSO - Lista de canciones" msgstr "Escuchar BSO - Lista de canciones"
msgctxt "#70318" msgctxt "#70318"
msgid "Manage yor trakt account" msgid "Manage your trakt account"
msgstr "Gestionar con tu cuenta Trakt" msgstr "Gestionar con tu cuenta Trakt"
msgctxt "#70319" msgctxt "#70319"
@@ -4266,3 +4266,504 @@ msgstr "Añadir a lista %s"
msgctxt "#70392" msgctxt "#70392"
msgid "Rate with a [COLOR %s]%s[/ COLOR]" msgid "Rate with a [COLOR %s]%s[/ COLOR]"
msgstr "Puntuar con un [COLOR %s]%s[/COLOR]" msgstr "Puntuar con un [COLOR %s]%s[/COLOR]"
msgctxt "#70393"
msgid "[%s]: Select the correct %s "
msgstr "[%s]: Selecciona la %s correcta"
msgctxt "#70394"
msgid "Action"
msgstr "Accion"
msgctxt "#70395"
msgid "Sport"
msgstr "Deportes"
msgctxt "#70396"
msgid "Documentary"
msgstr "Documental"
msgctxt "#70397"
msgid "Science fiction"
msgstr "Ciencia Ficción"
msgctxt "#70398"
msgid "Talk Show"
msgstr "Entrevistas"
msgctxt "#70399"
msgid "Family"
msgstr "Familia"
msgctxt "#70400"
msgid "Film-Noir"
msgstr "Cine Negro"
msgctxt "#70401"
msgid "Game-Show"
msgstr "Concursos"
msgctxt "#70402"
msgid "Mystery"
msgstr "Intriga"
msgctxt "#70403"
msgid "Biography"
msgstr "Biografía"
msgctxt "#70404"
msgid "Music"
msgstr "Música"
msgctxt "#70405"
msgid "History"
msgstr "Historia"
msgctxt "#70406"
msgid "Reality-TV"
msgstr "Reality"
msgctxt "#70407"
msgid "War"
msgstr "Cine Bélico"
msgctxt "#70408"
msgid "Musical"
msgstr "Musical"
msgctxt "#70409"
msgid "Romance"
msgstr "Romance"
msgctxt "#70410"
msgid "Thriller"
msgstr "Thriller"
msgctxt "#70411"
msgid "Western"
msgstr "Western"
msgctxt "#70412"
msgid "Drama"
msgstr "Drama"
msgctxt "#70413"
msgid "2. Enter this code on the page and click Allow: %s"
msgstr "2. Ingresa este código en la página y presiona Allow: %s"
msgctxt "#70414"
msgid "Authentication. Do not close this window!!"
msgstr "Autentificación. No cierres esta ventana!!"
msgctxt "#70415"
msgid "Trakt.tv"
msgstr "Trakt.tv"
msgctxt "#70416"
msgid "=== Movies ==="
msgstr "=== Peliculas ==="
msgctxt "#70417"
msgid "=== TV Shows ==="
msgstr "=== Series ==="
msgctxt "#70418"
msgid "Search language in TMDB"
msgstr "Idioma de búsqueda en TMDB"
msgctxt "#70419"
msgid "German"
msgstr "Alemán"
msgctxt "#70420"
msgid "French"
msgstr "Francés"
msgctxt "#70421"
msgid "Portuguese"
msgstr "Portugués"
msgctxt "#70422"
msgid "Italian"
msgstr "Italiano"
msgctxt "#70423"
msgid "Spanish Latin"
msgstr "Español Latino"
msgctxt "#70424"
msgid "Catalan"
msgstr "Catalán"
msgctxt "#70425"
msgid "English"
msgstr "Inglés"
msgctxt "#70426"
msgid "Alternative language for TMDB (No main language synopsis)"
msgstr "Idioma alternativo para TMDB (No sinopsis idioma principal)"
msgctxt "#70427"
msgid "Language of titles in IMDB"
msgstr "Idioma de los títulos en IMDB"
msgctxt "#70428"
msgid "Filmaffinity website"
msgstr "Sitio Web Filmaffinity"
msgctxt "#70429"
msgid "Colombia"
msgstr "Colombia"
msgctxt "#70430"
msgid "Chile"
msgstr "Chile"
msgctxt "#70431"
msgid "Argentina"
msgstr "Argentina"
msgctxt "#70432"
msgid "Mexico"
msgstr "México"
msgctxt "#70433"
msgid "US/UK"
msgstr "US/UK"
msgctxt "#70434"
msgid "Spain"
msgstr "España"
msgctxt "#70435"
msgid "User Filmaaffinity (Optional)"
msgstr "Usuario Filmaffinity (Opcional)"
msgctxt "#70436"
msgid "Password Filmaffinity"
msgstr "Contraseña Filmaffinity"
msgctxt "#70437"
msgid "Order personal lists of Filmaffinity by:"
msgstr "Ordenar listas personales de Filmaffinity por:"
msgctxt "#70438"
msgid "Position"
msgstr "Posición"
msgctxt "#70439"
msgid "Vote"
msgstr "Voto"
msgctxt "#70440"
msgid "Average grade"
msgstr "Nota media"
msgctxt "#70441"
msgid "User MyAnimeList (Optional)"
msgstr "Usuario MyAnimeList (Opcional)"
msgctxt "#70442"
msgid "Password MyAnimeList"
msgstr "Contraseña MyAnimeList"
msgctxt "#70443"
msgid "Show Hentai in MyAnimeList"
msgstr "Mostrar Hentais en MyAnimeList"
msgctxt "#70444"
msgid "Profile 3"
msgstr "Perfil 3"
msgctxt "#70445"
msgid "Profile 2"
msgstr "Perfil 2"
msgctxt "#70446"
msgid "Profile 1"
msgstr "Perfil 1"
msgctxt "#70447"
msgid "[%s] The file has been deleted"
msgstr "[%s] El fichero ha sido borrado"
msgctxt "#70448"
msgid "[%s] The file is still in process"
msgstr "[%s] El fichero está en proceso todavía"
msgctxt "#70449"
msgid "[%s] The file does not exist or has been deleted"
msgstr "[%s] El archivo no existe o ha sido borrado"
msgctxt "#70450"
msgid "Anyone"
msgstr "Cualquiera"
msgctxt "#70451"
msgid "Select one, none or more than one gender"
msgstr "Selecciona uno, ninguno o más de un género"
msgctxt "#70452"
msgid "Year from"
msgstr "Año desde:"
msgctxt "#70453"
msgid "Year until"
msgstr "Año hasta:"
msgctxt "#70454"
msgid "Minimum number of votes"
msgstr "Número mínimo de votos"
msgctxt "#70455"
msgid "Order by"
msgstr "Ordenar por"
msgctxt "#70456"
msgid "Popularity Desc"
msgstr "Popularidad Desc"
msgctxt "#70457"
msgid "Popularity Asc"
msgstr "Popularidad Asc"
msgctxt "#70458"
msgid "Year Desc"
msgstr "Año Desc"
msgctxt "#70459"
msgid "Year Asc"
msgstr "Año Asc"
msgctxt "#70460"
msgid "Desc Rating"
msgstr "Valoración Desc"
msgctxt "#70461"
msgid "Asc Rating"
msgstr "Valoración Asc"
msgctxt "#70462"
msgid "Title [A-Z]"
msgstr "Título [A-Z]"
msgctxt "#70463"
msgid "Title [Z-A]"
msgstr "Título [Z-A]"
msgctxt "#70464"
msgid "Set as default filter"
msgstr "Establecer como filtro por defecto"
msgctxt "#70465"
msgid "Key word"
msgstr "Palabra Clave"
msgctxt "#70466"
msgid "Country"
msgstr "País"
msgctxt "#70467"
msgid "Select a genre"
msgstr "Selecciona un género"
msgctxt "#70468"
msgid "Indicate your vote"
msgstr "Indica tu voto:"
msgctxt "#70469"
msgid "Added"
msgstr "Añadido"
msgctxt "#70470"
msgid "Premiere"
msgstr "Estreno"
msgctxt "#70471"
msgid "Duration"
msgstr "Duración"
msgctxt "#70472"
msgid "Popularity"
msgstr "Popularidad"
msgctxt "#70473"
msgid "Rating"
msgstr "Valoración"
msgctxt "#70474"
msgid "Votes"
msgstr "Votos"
msgctxt "#70475"
msgid "upward"
msgstr "ascendente"
msgctxt "#70476"
msgid "falling"
msgstr "descendente"
msgctxt "#70477"
msgid "Upward"
msgstr "Ascendente"
msgctxt "#70478"
msgid "Falling"
msgstr "Descendente"
msgctxt "#70479"
msgid "Currently watching"
msgstr "Viendo Actualmente"
msgctxt "#70480"
msgid "Completed"
msgstr "Completados"
msgctxt "#70481"
msgid "Anticipated to see"
msgstr "Previstos para ver"
msgctxt "#70482"
msgid "Kind"
msgstr "Tipo"
msgctxt "#70483"
msgid "Special"
msgstr "Especial"
msgctxt "#70484"
msgid "OVA"
msgstr "OVA"
msgctxt "#70485"
msgid "Status"
msgstr "Estado"
msgctxt "#70486"
msgid "(1) Grotesque"
msgstr "(1) Grotesca"
msgctxt "#70487"
msgid "(2) Horrible"
msgstr "(2) Horrible"
msgctxt "#70488"
msgid "(3) Very bad"
msgstr "(3) Muy mala"
msgctxt "#70489"
msgid "(4) Bad"
msgstr "(4) Mala"
msgctxt "#70490"
msgid "(5) Regular"
msgstr "(5) Regular"
msgctxt "#70491"
msgid "(6) Pasable"
msgstr "(6) Pasable"
msgctxt "#70492"
msgid "(7) Good"
msgstr "(7) Buena"
msgctxt "#70493"
msgid "(8) Very good"
msgstr "(8) Muy buena"
msgctxt "#70494"
msgid "(9) Genial"
msgstr "(9) Genial"
msgctxt "#70495"
msgid "(10) Masterpiece"
msgstr "(10) Obra maestra"
msgctxt "#70496"
msgid "The search for "
msgstr "La busqueda de "
msgctxt "#70497"
msgid " did not match."
msgstr " no dio resultados."
msgctxt "#70497"
msgid " did not match."
msgstr " no dio resultados."
msgctxt "#70498"
msgid "Producer: "
msgstr "Productora: "
msgctxt "#70499"
msgid "Genre: "
msgstr "Género: "
msgctxt "#70500"
msgid "Notification([COLOR red][B]Update Kodi to its latest version[/B][/COLOR], [COLOR skyblue]for best info[/COLOR],8000, "http://i.imgur.com/mHgwcn3.png")"
msgstr "Notification([COLOR red][B]Actualiza Kodi a su última versión[/B][/COLOR], [COLOR skyblue]para mejor info[/COLOR],8000, "http://i.imgur.com/mHgwcn3.png")"
msgctxt "#70501"
msgid "Search did not match (%s)"
msgstr "La búsqueda no ha dado resultados (%s)"
msgctxt "#70502"
msgid ">> Next"
msgstr ">> Siguiente"
msgctxt "#70503"
msgid "There is no available video"
msgstr "No hay ningún vídeo disponible"
msgctxt "#70504"
msgid "Loading trailers..."
msgstr "Cargando trailers..."
msgctxt "#70505"
msgid "Enter the title to search"
msgstr "Introduce el título a buscar"
msgctxt "#70506"
msgid "Searching: "
msgstr "Buscando: "
msgctxt "#70507"
msgid "Search in Youtube"
msgstr "Búsqueda en Youtube"
msgctxt "#70508"
msgid "Search in Abandomoviez"
msgstr "Búsqueda en Abandomoviez"
msgctxt "#70509"
msgid "Search in Jayhap (Youtube, Vimeo & Dailymotion)"
msgstr "Búsqueda en Jayhap (Youtube, Vimeo & Dailymotion)"
msgctxt "#70510"
msgid "Manual Search in Youtube"
msgstr "Búsqueda Manual en Youtube"
msgctxt "#70511"
msgid "Manual Search in Abandomoviez"
msgstr "Búsqueda Manual en Abandomoviez"
msgctxt "#70512"
msgid "Searching in abandomoviez"
msgstr "Buscando en abandomoviez"
msgctxt "#70513"
msgid "Manual Searching in Filmaffinity"
msgstr "Búsqueda Manual en Filmaffinity"
msgctxt "#70514"
msgid "Manual Search in Jayhap"
msgstr "Búsqueda Manual en Jayhap"
msgctxt "#70515"
msgid "[COLOR aquamarine][B]Completed %s[/B][/COLOR]"
msgstr "[COLOR aquamarine][B]Finalizada %s[/B][/COLOR]"
msgctxt "#70516"
msgid "[COLOR aquamarine][B]In progress %s[/B][/COLOR]"
msgstr "[COLOR aquamarine][B]En emisión %s[/B][/COLOR]"
@@ -2766,7 +2766,7 @@ msgid "Beginning"
msgstr "Inìcio" msgstr "Inìcio"
msgctxt "#70013" msgctxt "#70013"
msgid "Terror" msgid "Horror"
msgstr "Terror" msgstr "Terror"
msgctxt "#70014" msgctxt "#70014"
@@ -3255,7 +3255,7 @@ msgstr "Colores Personalizados"
msgctxt "#70137" msgctxt "#70137"
msgid "Movies" msgid "Movies"
msgstr "Peliculas" msgstr "Películas"
msgctxt "#70138" msgctxt "#70138"
msgid "Low Rating" msgid "Low Rating"
@@ -3850,7 +3850,7 @@ msgid "Alfa\nCorrected an error in the adult section, the password has been rese
msgstr "Alfa\nCorregido un error en la seccion adultos, se ha reseteado la contrasena a por " msgstr "Alfa\nCorregido un error en la seccion adultos, se ha reseteado la contrasena a por "
msgctxt "#70290" msgctxt "#70290"
msgid "default, you will have to change it again if you want.\ n Type 's', if you have understood it: " msgid "default, you will have to change it again if you want.\n Type 's', if you have understood it: "
msgstr "defecto, tendra que cambiarla de nuevo si lo desea.\n Escriba 's', si lo ha entendido: " msgstr "defecto, tendra que cambiarla de nuevo si lo desea.\n Escriba 's', si lo ha entendido: "
msgctxt "#70291" msgctxt "#70291"
@@ -3964,7 +3964,7 @@ msgid "Listen to BSO - List of songs"
msgstr "Escuchar BSO - Lista de canciones" msgstr "Escuchar BSO - Lista de canciones"
msgctxt "#70318" msgctxt "#70318"
msgid "Manage yor trakt account" msgid "Manage your trakt account"
msgstr "Gestionar con tu cuenta Trakt" msgstr "Gestionar con tu cuenta Trakt"
msgctxt "#70319" msgctxt "#70319"
@@ -4266,3 +4266,504 @@ msgstr "Añadir a lista %s"
msgctxt "#70392" msgctxt "#70392"
msgid "Rate with a [COLOR %s]%s[/ COLOR]" msgid "Rate with a [COLOR %s]%s[/ COLOR]"
msgstr "Puntuar con un [COLOR %s]%s[/COLOR]" msgstr "Puntuar con un [COLOR %s]%s[/COLOR]"
msgctxt "#70393"
msgid "[%s]: Select the correct %s "
msgstr "[%s]: Selecciona la %s correcta"
msgctxt "#70394"
msgid "Action"
msgstr "Accion"
msgctxt "#70395"
msgid "Sport"
msgstr "Deportes"
msgctxt "#70396"
msgid "Documentary"
msgstr "Documental"
msgctxt "#70397"
msgid "Science fiction"
msgstr "Ciencia Ficción"
msgctxt "#70398"
msgid "Talk Show"
msgstr "Entrevistas"
msgctxt "#70399"
msgid "Family"
msgstr "Familia"
msgctxt "#70400"
msgid "Film-Noir"
msgstr "Cine Negro"
msgctxt "#70401"
msgid "Game-Show"
msgstr "Concursos"
msgctxt "#70402"
msgid "Mystery"
msgstr "Intriga"
msgctxt "#70403"
msgid "Biography"
msgstr "Biografía"
msgctxt "#70404"
msgid "Music"
msgstr "Música"
msgctxt "#70405"
msgid "History"
msgstr "Historia"
msgctxt "#70406"
msgid "Reality-TV"
msgstr "Reality"
msgctxt "#70407"
msgid "War"
msgstr "Cine Bélico"
msgctxt "#70408"
msgid "Musical"
msgstr "Musical"
msgctxt "#70409"
msgid "Romance"
msgstr "Romance"
msgctxt "#70410"
msgid "Thriller"
msgstr "Thriller"
msgctxt "#70411"
msgid "Western"
msgstr "Western"
msgctxt "#70412"
msgid "Drama"
msgstr "Drama"
msgctxt "#70413"
msgid "2. Enter this code on the page and click Allow: %s"
msgstr "2. Ingresa este código en la página y presiona Allow: %s"
msgctxt "#70414"
msgid "Authentication. Do not close this window!!"
msgstr "Autentificación. No cierres esta ventana!!"
msgctxt "#70415"
msgid "Trakt.tv"
msgstr "Trakt.tv"
msgctxt "#70416"
msgid "=== Movies ==="
msgstr "=== Peliculas ==="
msgctxt "#70417"
msgid "=== TV Shows ==="
msgstr "=== Series ==="
msgctxt "#70418"
msgid "Search language in TMDB"
msgstr "Idioma de búsqueda en TMDB"
msgctxt "#70419"
msgid "German"
msgstr "Alemán"
msgctxt "#70420"
msgid "French"
msgstr "Francés"
msgctxt "#70421"
msgid "Portuguese"
msgstr "Portugués"
msgctxt "#70422"
msgid "Italian"
msgstr "Italiano"
msgctxt "#70423"
msgid "Spanish Latin"
msgstr "Español Latino"
msgctxt "#70424"
msgid "Catalan"
msgstr "Catalán"
msgctxt "#70425"
msgid "English"
msgstr "Inglés"
msgctxt "#70426"
msgid "Alternative language for TMDB (No main language synopsis)"
msgstr "Idioma alternativo para TMDB (No sinopsis idioma principal)"
msgctxt "#70427"
msgid "Language of titles in IMDB"
msgstr "Idioma de los títulos en IMDB"
msgctxt "#70428"
msgid "Filmaffinity website"
msgstr "Sitio Web Filmaffinity"
msgctxt "#70429"
msgid "Colombia"
msgstr "Colombia"
msgctxt "#70430"
msgid "Chile"
msgstr "Chile"
msgctxt "#70431"
msgid "Argentina"
msgstr "Argentina"
msgctxt "#70432"
msgid "Mexico"
msgstr "México"
msgctxt "#70433"
msgid "US/UK"
msgstr "US/UK"
msgctxt "#70434"
msgid "Spain"
msgstr "España"
msgctxt "#70435"
msgid "User Filmaaffinity (Optional)"
msgstr "Usuario Filmaffinity (Opcional)"
msgctxt "#70436"
msgid "Password Filmaffinity"
msgstr "Contraseña Filmaffinity"
msgctxt "#70437"
msgid "Order personal lists of Filmaffinity by:"
msgstr "Ordenar listas personales de Filmaffinity por:"
msgctxt "#70438"
msgid "Position"
msgstr "Posición"
msgctxt "#70439"
msgid "Vote"
msgstr "Voto"
msgctxt "#70440"
msgid "Average grade"
msgstr "Nota media"
msgctxt "#70441"
msgid "User MyAnimeList (Optional)"
msgstr "Usuario MyAnimeList (Opcional)"
msgctxt "#70442"
msgid "Password MyAnimeList"
msgstr "Contraseña MyAnimeList"
msgctxt "#70443"
msgid "Show Hentai in MyAnimeList"
msgstr "Mostrar Hentais en MyAnimeList"
msgctxt "#70444"
msgid "Profile 3"
msgstr "Perfil 3"
msgctxt "#70445"
msgid "Profile 2"
msgstr "Perfil 2"
msgctxt "#70446"
msgid "Profile 1"
msgstr "Perfil 1"
msgctxt "#70447"
msgid "[%s] The file has been deleted"
msgstr "[%s] El fichero ha sido borrado"
msgctxt "#70448"
msgid "[%s] The file is still in process"
msgstr "[%s] El fichero está en proceso todavía"
msgctxt "#70449"
msgid "[%s] The file does not exist or has been deleted"
msgstr "[%s] El archivo no existe o ha sido borrado"
msgctxt "#70450"
msgid "Anyone"
msgstr "Cualquiera"
msgctxt "#70451"
msgid "Select one, none or more than one gender"
msgstr "Selecciona uno, ninguno o más de un género"
msgctxt "#70452"
msgid "Year from"
msgstr "Año desde:"
msgctxt "#70453"
msgid "Year until"
msgstr "Año hasta:"
msgctxt "#70454"
msgid "Minimum number of votes"
msgstr "Número mínimo de votos"
msgctxt "#70455"
msgid "Order by"
msgstr "Ordenar por"
msgctxt "#70456"
msgid "Popularity Desc"
msgstr "Popularidad Desc"
msgctxt "#70457"
msgid "Popularity Asc"
msgstr "Popularidad Asc"
msgctxt "#70458"
msgid "Year Desc"
msgstr "Año Desc"
msgctxt "#70459"
msgid "Year Asc"
msgstr "Año Asc"
msgctxt "#70460"
msgid "Desc Rating"
msgstr "Valoración Desc"
msgctxt "#70461"
msgid "Asc Rating"
msgstr "Valoración Asc"
msgctxt "#70462"
msgid "Title [A-Z]"
msgstr "Título [A-Z]"
msgctxt "#70463"
msgid "Title [Z-A]"
msgstr "Título [Z-A]"
msgctxt "#70464"
msgid "Set as default filter"
msgstr "Establecer como filtro por defecto"
msgctxt "#70465"
msgid "Key word"
msgstr "Palabra Clave"
msgctxt "#70466"
msgid "Country"
msgstr "País"
msgctxt "#70467"
msgid "Select a genre"
msgstr "Selecciona un género"
msgctxt "#70468"
msgid "Indicate your vote"
msgstr "Indica tu voto:"
msgctxt "#70469"
msgid "Added"
msgstr "Añadido"
msgctxt "#70470"
msgid "Premiere"
msgstr "Estreno"
msgctxt "#70471"
msgid "Duration"
msgstr "Duración"
msgctxt "#70472"
msgid "Popularity"
msgstr "Popularidad"
msgctxt "#70473"
msgid "Rating"
msgstr "Valoración"
msgctxt "#70474"
msgid "Votes"
msgstr "Votos"
msgctxt "#70475"
msgid "upward"
msgstr "ascendente"
msgctxt "#70476"
msgid "falling"
msgstr "descendente"
msgctxt "#70477"
msgid "Upward"
msgstr "Ascendente"
msgctxt "#70478"
msgid "Falling"
msgstr "Descendente"
msgctxt "#70479"
msgid "Currently watching"
msgstr "Viendo Actualmente"
msgctxt "#70480"
msgid "Completed"
msgstr "Completados"
msgctxt "#70481"
msgid "Anticipated to see"
msgstr "Previstos para ver"
msgctxt "#70482"
msgid "Kind"
msgstr "Tipo"
msgctxt "#70483"
msgid "Special"
msgstr "Especial"
msgctxt "#70484"
msgid "OVA"
msgstr "OVA"
msgctxt "#70485"
msgid "Status"
msgstr "Estado"
msgctxt "#70486"
msgid "(1) Grotesque"
msgstr "(1) Grotesca"
msgctxt "#70487"
msgid "(2) Horrible"
msgstr "(2) Horrible"
msgctxt "#70488"
msgid "(3) Very bad"
msgstr "(3) Muy mala"
msgctxt "#70489"
msgid "(4) Bad"
msgstr "(4) Mala"
msgctxt "#70490"
msgid "(5) Regular"
msgstr "(5) Regular"
msgctxt "#70491"
msgid "(6) Pasable"
msgstr "(6) Pasable"
msgctxt "#70492"
msgid "(7) Good"
msgstr "(7) Buena"
msgctxt "#70493"
msgid "(8) Very good"
msgstr "(8) Muy buena"
msgctxt "#70494"
msgid "(9) Genial"
msgstr "(9) Genial"
msgctxt "#70495"
msgid "(10) Masterpiece"
msgstr "(10) Obra maestra"
msgctxt "#70496"
msgid "The search for "
msgstr "La busqueda de "
msgctxt "#70497"
msgid " did not match."
msgstr " no dio resultados."
msgctxt "#70497"
msgid " did not match."
msgstr " no dio resultados."
msgctxt "#70498"
msgid "Producer: "
msgstr "Productora: "
msgctxt "#70499"
msgid "Genre: "
msgstr "Género: "
msgctxt "#70500"
msgid "Notification([COLOR red][B]Update Kodi to its latest version[/B][/COLOR], [COLOR skyblue]for best info[/COLOR],8000, "http://i.imgur.com/mHgwcn3.png")"
msgstr "Notification([COLOR red][B]Actualiza Kodi a su última versión[/B][/COLOR], [COLOR skyblue]para mejor info[/COLOR],8000, "http://i.imgur.com/mHgwcn3.png")"
msgctxt "#70501"
msgid "Search did not match (%s)"
msgstr "La búsqueda no ha dado resultados (%s)"
msgctxt "#70502"
msgid ">> Next"
msgstr ">> Siguiente"
msgctxt "#70503"
msgid "There is no available video"
msgstr "No hay ningún vídeo disponible"
msgctxt "#70504"
msgid "Loading trailers..."
msgstr "Cargando trailers..."
msgctxt "#70505"
msgid "Enter the title to search"
msgstr "Introduce el título a buscar"
msgctxt "#70506"
msgid "Searching: "
msgstr "Buscando: "
msgctxt "#70507"
msgid "Search in Youtube"
msgstr "Búsqueda en Youtube"
msgctxt "#70508"
msgid "Search in Abandomoviez"
msgstr "Búsqueda en Abandomoviez"
msgctxt "#70509"
msgid "Search in Jayhap (Youtube, Vimeo & Dailymotion)"
msgstr "Búsqueda en Jayhap (Youtube, Vimeo & Dailymotion)"
msgctxt "#70510"
msgid "Manual Search in Youtube"
msgstr "Búsqueda Manual en Youtube"
msgctxt "#70511"
msgid "Manual Search in Abandomoviez"
msgstr "Búsqueda Manual en Abandomoviez"
msgctxt "#70512"
msgid "Searching in abandomoviez"
msgstr "Buscando en abandomoviez"
msgctxt "#70513"
msgid "Manual Searching in Filmaffinity"
msgstr "Búsqueda Manual en Filmaffinity"
msgctxt "#70514"
msgid "Manual Search in Jayhap"
msgstr "Búsqueda Manual en Jayhap"
msgctxt "#70515"
msgid "[COLOR aquamarine][B]Completed %s[/B][/COLOR]"
msgstr "[COLOR aquamarine][B]Finalizada %s[/B][/COLOR]"
msgctxt "#70516"
msgid "[COLOR aquamarine][B]In progress %s[/B][/COLOR]"
msgstr "[COLOR aquamarine][B]En emisión %s[/B][/COLOR]"
@@ -2766,7 +2766,7 @@ msgid "Beginning"
msgstr "Inìcio" msgstr "Inìcio"
msgctxt "#70013" msgctxt "#70013"
msgid "Terror" msgid "Horror"
msgstr "Terror" msgstr "Terror"
msgctxt "#70014" msgctxt "#70014"
@@ -3255,7 +3255,7 @@ msgstr "Colores Personalizados"
msgctxt "#70137" msgctxt "#70137"
msgid "Movies" msgid "Movies"
msgstr "Peliculas" msgstr "Películas"
msgctxt "#70138" msgctxt "#70138"
msgid "Low Rating" msgid "Low Rating"
@@ -3850,7 +3850,7 @@ msgid "Alfa\nCorrected an error in the adult section, the password has been rese
msgstr "Alfa\nCorregido un error en la seccion adultos, se ha reseteado la contrasena a por " msgstr "Alfa\nCorregido un error en la seccion adultos, se ha reseteado la contrasena a por "
msgctxt "#70290" msgctxt "#70290"
msgid "default, you will have to change it again if you want.\ n Type 's', if you have understood it: " msgid "default, you will have to change it again if you want.\n Type 's', if you have understood it: "
msgstr "defecto, tendra que cambiarla de nuevo si lo desea.\n Escriba 's', si lo ha entendido: " msgstr "defecto, tendra que cambiarla de nuevo si lo desea.\n Escriba 's', si lo ha entendido: "
msgctxt "#70291" msgctxt "#70291"
@@ -3964,7 +3964,7 @@ msgid "Listen to BSO - List of songs"
msgstr "Escuchar BSO - Lista de canciones" msgstr "Escuchar BSO - Lista de canciones"
msgctxt "#70318" msgctxt "#70318"
msgid "Manage yor trakt account" msgid "Manage your trakt account"
msgstr "Gestionar con tu cuenta Trakt" msgstr "Gestionar con tu cuenta Trakt"
msgctxt "#70319" msgctxt "#70319"
@@ -4266,3 +4266,504 @@ msgstr "Añadir a lista %s"
msgctxt "#70392" msgctxt "#70392"
msgid "Rate with a [COLOR %s]%s[/ COLOR]" msgid "Rate with a [COLOR %s]%s[/ COLOR]"
msgstr "Puntuar con un [COLOR %s]%s[/COLOR]" msgstr "Puntuar con un [COLOR %s]%s[/COLOR]"
msgctxt "#70393"
msgid "[%s]: Select the correct %s "
msgstr "[%s]: Selecciona la %s correcta"
msgctxt "#70394"
msgid "Action"
msgstr "Accion"
msgctxt "#70395"
msgid "Sport"
msgstr "Deportes"
msgctxt "#70396"
msgid "Documentary"
msgstr "Documental"
msgctxt "#70397"
msgid "Science fiction"
msgstr "Ciencia Ficción"
msgctxt "#70398"
msgid "Talk Show"
msgstr "Entrevistas"
msgctxt "#70399"
msgid "Family"
msgstr "Familia"
msgctxt "#70400"
msgid "Film-Noir"
msgstr "Cine Negro"
msgctxt "#70401"
msgid "Game-Show"
msgstr "Concursos"
msgctxt "#70402"
msgid "Mystery"
msgstr "Intriga"
msgctxt "#70403"
msgid "Biography"
msgstr "Biografía"
msgctxt "#70404"
msgid "Music"
msgstr "Música"
msgctxt "#70405"
msgid "History"
msgstr "Historia"
msgctxt "#70406"
msgid "Reality-TV"
msgstr "Reality"
msgctxt "#70407"
msgid "War"
msgstr "Cine Bélico"
msgctxt "#70408"
msgid "Musical"
msgstr "Musical"
msgctxt "#70409"
msgid "Romance"
msgstr "Romance"
msgctxt "#70410"
msgid "Thriller"
msgstr "Thriller"
msgctxt "#70411"
msgid "Western"
msgstr "Western"
msgctxt "#70412"
msgid "Drama"
msgstr "Drama"
msgctxt "#70413"
msgid "2. Enter this code on the page and click Allow: %s"
msgstr "2. Ingresa este código en la página y presiona Allow: %s"
msgctxt "#70414"
msgid "Authentication. Do not close this window!!"
msgstr "Autentificación. No cierres esta ventana!!"
msgctxt "#70415"
msgid "Trakt.tv"
msgstr "Trakt.tv"
msgctxt "#70416"
msgid "=== Movies ==="
msgstr "=== Peliculas ==="
msgctxt "#70417"
msgid "=== TV Shows ==="
msgstr "=== Series ==="
msgctxt "#70418"
msgid "Search language in TMDB"
msgstr "Idioma de búsqueda en TMDB"
msgctxt "#70419"
msgid "German"
msgstr "Alemán"
msgctxt "#70420"
msgid "French"
msgstr "Francés"
msgctxt "#70421"
msgid "Portuguese"
msgstr "Portugués"
msgctxt "#70422"
msgid "Italian"
msgstr "Italiano"
msgctxt "#70423"
msgid "Spanish Latin"
msgstr "Español Latino"
msgctxt "#70424"
msgid "Catalan"
msgstr "Catalán"
msgctxt "#70425"
msgid "English"
msgstr "Inglés"
msgctxt "#70426"
msgid "Alternative language for TMDB (No main language synopsis)"
msgstr "Idioma alternativo para TMDB (No sinopsis idioma principal)"
msgctxt "#70427"
msgid "Language of titles in IMDB"
msgstr "Idioma de los títulos en IMDB"
msgctxt "#70428"
msgid "Filmaffinity website"
msgstr "Sitio Web Filmaffinity"
msgctxt "#70429"
msgid "Colombia"
msgstr "Colombia"
msgctxt "#70430"
msgid "Chile"
msgstr "Chile"
msgctxt "#70431"
msgid "Argentina"
msgstr "Argentina"
msgctxt "#70432"
msgid "Mexico"
msgstr "México"
msgctxt "#70433"
msgid "US/UK"
msgstr "US/UK"
msgctxt "#70434"
msgid "Spain"
msgstr "España"
msgctxt "#70435"
msgid "User Filmaaffinity (Optional)"
msgstr "Usuario Filmaffinity (Opcional)"
msgctxt "#70436"
msgid "Password Filmaffinity"
msgstr "Contraseña Filmaffinity"
msgctxt "#70437"
msgid "Order personal lists of Filmaffinity by:"
msgstr "Ordenar listas personales de Filmaffinity por:"
msgctxt "#70438"
msgid "Position"
msgstr "Posición"
msgctxt "#70439"
msgid "Vote"
msgstr "Voto"
msgctxt "#70440"
msgid "Average grade"
msgstr "Nota media"
msgctxt "#70441"
msgid "User MyAnimeList (Optional)"
msgstr "Usuario MyAnimeList (Opcional)"
msgctxt "#70442"
msgid "Password MyAnimeList"
msgstr "Contraseña MyAnimeList"
msgctxt "#70443"
msgid "Show Hentai in MyAnimeList"
msgstr "Mostrar Hentais en MyAnimeList"
msgctxt "#70444"
msgid "Profile 3"
msgstr "Perfil 3"
msgctxt "#70445"
msgid "Profile 2"
msgstr "Perfil 2"
msgctxt "#70446"
msgid "Profile 1"
msgstr "Perfil 1"
msgctxt "#70447"
msgid "[%s] The file has been deleted"
msgstr "[%s] El fichero ha sido borrado"
msgctxt "#70448"
msgid "[%s] The file is still in process"
msgstr "[%s] El fichero está en proceso todavía"
msgctxt "#70449"
msgid "[%s] The file does not exist or has been deleted"
msgstr "[%s] El archivo no existe o ha sido borrado"
msgctxt "#70450"
msgid "Anyone"
msgstr "Cualquiera"
msgctxt "#70451"
msgid "Select one, none or more than one gender"
msgstr "Selecciona uno, ninguno o más de un género"
msgctxt "#70452"
msgid "Year from"
msgstr "Año desde:"
msgctxt "#70453"
msgid "Year until"
msgstr "Año hasta:"
msgctxt "#70454"
msgid "Minimum number of votes"
msgstr "Número mínimo de votos"
msgctxt "#70455"
msgid "Order by"
msgstr "Ordenar por"
msgctxt "#70456"
msgid "Popularity Desc"
msgstr "Popularidad Desc"
msgctxt "#70457"
msgid "Popularity Asc"
msgstr "Popularidad Asc"
msgctxt "#70458"
msgid "Year Desc"
msgstr "Año Desc"
msgctxt "#70459"
msgid "Year Asc"
msgstr "Año Asc"
msgctxt "#70460"
msgid "Desc Rating"
msgstr "Valoración Desc"
msgctxt "#70461"
msgid "Asc Rating"
msgstr "Valoración Asc"
msgctxt "#70462"
msgid "Title [A-Z]"
msgstr "Título [A-Z]"
msgctxt "#70463"
msgid "Title [Z-A]"
msgstr "Título [Z-A]"
msgctxt "#70464"
msgid "Set as default filter"
msgstr "Establecer como filtro por defecto"
msgctxt "#70465"
msgid "Key word"
msgstr "Palabra Clave"
msgctxt "#70466"
msgid "Country"
msgstr "País"
msgctxt "#70467"
msgid "Select a genre"
msgstr "Selecciona un género"
msgctxt "#70468"
msgid "Indicate your vote"
msgstr "Indica tu voto:"
msgctxt "#70469"
msgid "Added"
msgstr "Añadido"
msgctxt "#70470"
msgid "Premiere"
msgstr "Estreno"
msgctxt "#70471"
msgid "Duration"
msgstr "Duración"
msgctxt "#70472"
msgid "Popularity"
msgstr "Popularidad"
msgctxt "#70473"
msgid "Rating"
msgstr "Valoración"
msgctxt "#70474"
msgid "Votes"
msgstr "Votos"
msgctxt "#70475"
msgid "upward"
msgstr "ascendente"
msgctxt "#70476"
msgid "falling"
msgstr "descendente"
msgctxt "#70477"
msgid "Upward"
msgstr "Ascendente"
msgctxt "#70478"
msgid "Falling"
msgstr "Descendente"
msgctxt "#70479"
msgid "Currently watching"
msgstr "Viendo Actualmente"
msgctxt "#70480"
msgid "Completed"
msgstr "Completados"
msgctxt "#70481"
msgid "Anticipated to see"
msgstr "Previstos para ver"
msgctxt "#70482"
msgid "Kind"
msgstr "Tipo"
msgctxt "#70483"
msgid "Special"
msgstr "Especial"
msgctxt "#70484"
msgid "OVA"
msgstr "OVA"
msgctxt "#70485"
msgid "Status"
msgstr "Estado"
msgctxt "#70486"
msgid "(1) Grotesque"
msgstr "(1) Grotesca"
msgctxt "#70487"
msgid "(2) Horrible"
msgstr "(2) Horrible"
msgctxt "#70488"
msgid "(3) Very bad"
msgstr "(3) Muy mala"
msgctxt "#70489"
msgid "(4) Bad"
msgstr "(4) Mala"
msgctxt "#70490"
msgid "(5) Regular"
msgstr "(5) Regular"
msgctxt "#70491"
msgid "(6) Pasable"
msgstr "(6) Pasable"
msgctxt "#70492"
msgid "(7) Good"
msgstr "(7) Buena"
msgctxt "#70493"
msgid "(8) Very good"
msgstr "(8) Muy buena"
msgctxt "#70494"
msgid "(9) Genial"
msgstr "(9) Genial"
msgctxt "#70495"
msgid "(10) Masterpiece"
msgstr "(10) Obra maestra"
msgctxt "#70496"
msgid "The search for "
msgstr "La busqueda de "
msgctxt "#70497"
msgid " did not match."
msgstr " no dio resultados."
msgctxt "#70497"
msgid " did not match."
msgstr " no dio resultados."
msgctxt "#70498"
msgid "Producer: "
msgstr "Productora: "
msgctxt "#70499"
msgid "Genre: "
msgstr "Género: "
msgctxt "#70500"
msgid "Notification([COLOR red][B]Update Kodi to its latest version[/B][/COLOR], [COLOR skyblue]for best info[/COLOR],8000, "http://i.imgur.com/mHgwcn3.png")"
msgstr "Notification([COLOR red][B]Actualiza Kodi a su última versión[/B][/COLOR], [COLOR skyblue]para mejor info[/COLOR],8000, "http://i.imgur.com/mHgwcn3.png")"
msgctxt "#70501"
msgid "Search did not match (%s)"
msgstr "La búsqueda no ha dado resultados (%s)"
msgctxt "#70502"
msgid ">> Next"
msgstr ">> Siguiente"
msgctxt "#70503"
msgid "There is no available video"
msgstr "No hay ningún vídeo disponible"
msgctxt "#70504"
msgid "Loading trailers..."
msgstr "Cargando trailers..."
msgctxt "#70505"
msgid "Enter the title to search"
msgstr "Introduce el título a buscar"
msgctxt "#70506"
msgid "Searching: "
msgstr "Buscando: "
msgctxt "#70507"
msgid "Search in Youtube"
msgstr "Búsqueda en Youtube"
msgctxt "#70508"
msgid "Search in Abandomoviez"
msgstr "Búsqueda en Abandomoviez"
msgctxt "#70509"
msgid "Search in Jayhap (Youtube, Vimeo & Dailymotion)"
msgstr "Búsqueda en Jayhap (Youtube, Vimeo & Dailymotion)"
msgctxt "#70510"
msgid "Manual Search in Youtube"
msgstr "Búsqueda Manual en Youtube"
msgctxt "#70511"
msgid "Manual Search in Abandomoviez"
msgstr "Búsqueda Manual en Abandomoviez"
msgctxt "#70512"
msgid "Searching in abandomoviez"
msgstr "Buscando en abandomoviez"
msgctxt "#70513"
msgid "Manual Searching in Filmaffinity"
msgstr "Búsqueda Manual en Filmaffinity"
msgctxt "#70514"
msgid "Manual Search in Jayhap"
msgstr "Búsqueda Manual en Jayhap"
msgctxt "#70515"
msgid "[COLOR aquamarine][B]Completed %s[/B][/COLOR]"
msgstr "[COLOR aquamarine][B]Finalizada %s[/B][/COLOR]"
msgctxt "#70516"
msgid "[COLOR aquamarine][B]In progress %s[/B][/COLOR]"
msgstr "[COLOR aquamarine][B]En emisión %s[/B][/COLOR]"
@@ -94,10 +94,10 @@ def authentication():
device_code = data["device_code"] device_code = data["device_code"]
intervalo = data["interval"] intervalo = data["interval"]
dialog_auth = platformtools.dialog_progress("Autentificación. No cierres esta ventana!!", dialog_auth = platformtools.dialog_progress(config.get_localized_string(70414),
"1. Entra en la siguiente url: %s" % verify_url, config.get_localized_string(60252) % verify_url,
"2. Ingresa este código en la página y presiona Allow: %s" % user_code, config.get_localized_string(70413) % user_code,
"3. Espera a que se cierre esta ventana") config.get_localized_string(60254))
# Generalmente cada 5 segundos se intenta comprobar si el usuario ha introducido el código # Generalmente cada 5 segundos se intenta comprobar si el usuario ha introducido el código
while True: while True: