Merge remote-tracking branch 'alfa-addon/master'
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<addon id="plugin.video.alfa" name="Alfa" version="2.6" provider-name="Alfa Addon">
|
||||
<addon id="plugin.video.alfa" name="Alfa" version="2.6.1" provider-name="Alfa Addon">
|
||||
<requires>
|
||||
<import addon="xbmc.python" version="2.1.0"/>
|
||||
<import addon="script.module.libtorrent" optional="true"/>
|
||||
@@ -19,10 +19,11 @@
|
||||
</assets>
|
||||
<news>[B]Estos son los cambios para esta versión:[/B]
|
||||
[COLOR green][B]Canales agregados y arreglos[/B][/COLOR]
|
||||
¤ goovie ¤ retroseriestv
|
||||
¤ pelisr ¤ planetadocumental
|
||||
¤ mejortorrent ¤ alltorrent
|
||||
¤ veseriesonline ¤ seriesblanco
|
||||
¤ dospelis ¤ goodpelis
|
||||
¤ pelisr ¤ sonpelis
|
||||
¤ jawcloud ¤ estream
|
||||
¤ pelisplusco ¤ hdfull
|
||||
¤ cinemahd
|
||||
|
||||
¤ arreglos internos
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"id": "alltorrent",
|
||||
"name": "Alltorrent",
|
||||
"active": true,
|
||||
"active": false,
|
||||
"adult": false,
|
||||
"language": ["cast"],
|
||||
"thumbnail": "altorrent.png",
|
||||
|
||||
@@ -126,6 +126,7 @@ def listado(item):
|
||||
title = title.replace("Dual", "").replace("dual", "").replace("Subtitulada", "").replace("subtitulada", "").replace("Subt", "").replace("subt", "").replace("Sub", "").replace("sub", "").replace("(Proper)", "").replace("(proper)", "").replace("Proper", "").replace("proper", "").replace("#", "").replace("(Latino)", "").replace("Latino", "")
|
||||
title = title.replace("- HDRip", "").replace("(HDRip)", "").replace("- Hdrip", "").replace("(microHD)", "").replace("(DVDRip)", "").replace("(HDRip)", "").replace("(BR-LINE)", "").replace("(HDTS-SCREENER)", "").replace("(BDRip)", "").replace("(BR-Screener)", "").replace("(DVDScreener)", "").replace("TS-Screener", "").replace(" TS", "").replace(" Ts", "")
|
||||
title = re.sub(r'\??\s?\d*?\&.*', '', title).title().strip()
|
||||
item_local.from_title = title #Guardamos esta etiqueta para posible desambiguación de título
|
||||
|
||||
item_local.contentType = "movie"
|
||||
item_local.contentTitle = title
|
||||
@@ -139,8 +140,8 @@ def listado(item):
|
||||
|
||||
itemlist.append(item_local.clone()) #Pintar pantalla
|
||||
|
||||
if not item.category: #Si este campo no existe es que viene de la primera pasada de una búsqueda global
|
||||
return itemlist #Retornamos sin pasar por la fase de maquillaje para ahorra tiempo
|
||||
#if not item.category: #Si este campo no existe es que viene de la primera pasada de una búsqueda global
|
||||
# return itemlist #Retornamos sin pasar por la fase de maquillaje para ahorra tiempo
|
||||
|
||||
#Pasamos a TMDB la lista completa Itemlist
|
||||
tmdb.set_infoLabels(itemlist, True)
|
||||
@@ -264,7 +265,16 @@ def findvideos(item):
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def actualizar_titulos(item):
|
||||
logger.info()
|
||||
|
||||
item = generictools.update_title(item) #Llamamos al método que actualiza el título con tmdb.find_and_set_infoLabels
|
||||
|
||||
#Volvemos a la siguiente acción en el canal
|
||||
return item
|
||||
|
||||
|
||||
def search(item, texto):
|
||||
logger.info()
|
||||
texto = texto.replace(" ", "+")
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
"thumbnail": "https://s21.postimg.cc/b43i3ljav/animeshd.png",
|
||||
"banner": "https://s4.postimg.cc/lulxulmql/animeshd-banner.png",
|
||||
"categories": [
|
||||
"anime"
|
||||
"anime",
|
||||
"vos"
|
||||
],
|
||||
"settings": [
|
||||
{
|
||||
|
||||
@@ -3,10 +3,11 @@
|
||||
"name": "AnimeYT",
|
||||
"active": true,
|
||||
"adult": false,
|
||||
"language": "es",
|
||||
"language": "cast, lat",
|
||||
"thumbnail": "http://i.imgur.com/dHpupFk.png",
|
||||
"categories": [
|
||||
"anime"
|
||||
"anime",
|
||||
"vos"
|
||||
],
|
||||
"settings": [
|
||||
{
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
"thumbnail": "cinehindi.png",
|
||||
"banner": "http://i.imgur.com/cau9TVe.png",
|
||||
"categories": [
|
||||
"movie"
|
||||
"movie",
|
||||
"vos"
|
||||
]
|
||||
}
|
||||
@@ -59,18 +59,22 @@ def list_all(item):
|
||||
itemlist = []
|
||||
|
||||
data = get_source(item.url)
|
||||
full_data = data
|
||||
data = scrapertools.find_single_match(data, '<ul class=MovieList NoLmtxt.*?</ul>')
|
||||
if item.section == 'alpha':
|
||||
patron = '<span class=Num>\d+.*?<a href=(.*?) class.*?<img src=(.*?) alt=.*?<strong>(.*?)</strong>.*?'
|
||||
patron += '<td>(\d{4})</td>'
|
||||
matches = re.compile(patron, re.DOTALL).findall(full_data)
|
||||
else:
|
||||
patron = '<article id=post-.*?<a href=(.*?)>.*?<img src=(.*?) alt=.*?'
|
||||
patron += '<h3 class=Title>(.*?)<\/h3>.*?<span class=Year>(.*?)<\/span>'
|
||||
data = get_source(item.url)
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
patron += '<h3 class=Title>(.*?)<\/h3>(?:</a>|<span class=Year>(.*?)<\/span>)'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedurl, scrapedthumbnail, scrapedtitle, year in matches:
|
||||
|
||||
url = scrapedurl
|
||||
if year == '':
|
||||
year = '-'
|
||||
if "|" in scrapedtitle:
|
||||
scrapedtitle= scrapedtitle.split("|")
|
||||
contentTitle = scrapedtitle[0].strip()
|
||||
@@ -92,7 +96,7 @@ def list_all(item):
|
||||
|
||||
# Paginación
|
||||
|
||||
url_next_page = scrapertools.find_single_match(data,'<a class=next.*?href=(.*?)>')
|
||||
url_next_page = scrapertools.find_single_match(full_data,'<a class=next.*?href=(.*?)>')
|
||||
if url_next_page:
|
||||
itemlist.append(item.clone(title="Siguiente >>", url=url_next_page, action='list_all'))
|
||||
return itemlist
|
||||
@@ -102,14 +106,13 @@ def section(item):
|
||||
itemlist = []
|
||||
|
||||
data = get_source(host)
|
||||
|
||||
action = 'list_all'
|
||||
if item.section == 'quality':
|
||||
patron = 'menu-item-object-category.*?menu-item-\d+><a href=(.*?)>(.*?)<\/a>'
|
||||
patron = 'menu-item-object-category.*?menu-item-\d+ menu-category-list><a href=(.*?)>(.*?)<\/a>'
|
||||
elif item.section == 'genre':
|
||||
patron = '<a href=(http:.*?) class=Button STPb>(.*?)</a>'
|
||||
patron = '<a href=([^ ]+) class=Button STPb>(.*?)</a>'
|
||||
elif item.section == 'year':
|
||||
patron = 'custom menu-item-15\d+><a href=(.*?\?s.*?)>(\d{4})<\/a><\/li>'
|
||||
patron = '<li><a href=([^>]+)>(\d{4})<\/a><\/li>'
|
||||
elif item.section == 'alpha':
|
||||
patron = '<li><a href=(.*?letters.*?)>(.*?)</a>'
|
||||
action = 'list_all'
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
"thumbnail": "https://s14.postimg.cc/ibh4znkox/doramasmp4.png",
|
||||
"banner": "",
|
||||
"categories": [
|
||||
"tvshow"
|
||||
"tvshow",
|
||||
"vos"
|
||||
],
|
||||
"settings": [
|
||||
{
|
||||
|
||||
79
plugin.video.alfa/channels/dospelis.json
Normal file
79
plugin.video.alfa/channels/dospelis.json
Normal file
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"id": "dospelis",
|
||||
"name": "DosPelis",
|
||||
"active": true,
|
||||
"adult": false,
|
||||
"language": ["lat", "cast", "vose"],
|
||||
"thumbnail": "https://www.dospelis.com/wp-content/uploads/2018/07/dospelislogo.png",
|
||||
"banner": "",
|
||||
"categories": [
|
||||
"movie",
|
||||
"tvshow",
|
||||
"vos"
|
||||
],
|
||||
"settings": [
|
||||
{
|
||||
"id": "include_in_global_search",
|
||||
"type": "bool",
|
||||
"label": "Incluir en busqueda global",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "filter_languages",
|
||||
"type": "list",
|
||||
"label": "Mostrar enlaces en idioma...",
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"visible": true,
|
||||
"lvalues": [
|
||||
"No filtrar",
|
||||
"Latino",
|
||||
"Castellano",
|
||||
"VOSE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "include_in_newest_peliculas",
|
||||
"type": "bool",
|
||||
"label": "Incluir en Novedades - Peliculas",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "include_in_newest_infantiles",
|
||||
"type": "bool",
|
||||
"label": "Incluir en Novedades - Infantiles",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "include_in_newest_terror",
|
||||
"type": "bool",
|
||||
"label": "Incluir en Novedades - terror",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "comprueba_enlaces",
|
||||
"type": "bool",
|
||||
"label": "Verificar si los enlaces existen",
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "comprueba_enlaces_num",
|
||||
"type": "list",
|
||||
"label": "Número de enlaces a verificar",
|
||||
"default": 1,
|
||||
"enabled": true,
|
||||
"visible": "eq(-1,true)",
|
||||
"lvalues": [ "5", "10", "15", "20" ]
|
||||
}
|
||||
]
|
||||
}
|
||||
345
plugin.video.alfa/channels/dospelis.py
Normal file
345
plugin.video.alfa/channels/dospelis.py
Normal file
@@ -0,0 +1,345 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# -*- Channel DosPelis -*-
|
||||
# -*- Created for Alfa-addon -*-
|
||||
# -*- By the Alfa Develop Group -*-
|
||||
|
||||
import re
|
||||
import urllib
|
||||
import base64
|
||||
|
||||
from channelselector import get_thumb
|
||||
from core import httptools
|
||||
from core import jsontools
|
||||
from core import scrapertools
|
||||
from core import servertools
|
||||
from core import tmdb
|
||||
from lib import jsunpack
|
||||
from core.item import Item
|
||||
from channels import filtertools
|
||||
from channels import autoplay
|
||||
from platformcode import config, logger
|
||||
|
||||
|
||||
IDIOMAS = {'mx': 'Latino', 'dk':'Latino', 'es': 'Castellano', 'en': 'VOSE', 'gb':'VOSE'}
|
||||
list_language = IDIOMAS.values()
|
||||
|
||||
list_quality = []
|
||||
|
||||
list_servers = [
|
||||
'directo',
|
||||
'openload',
|
||||
]
|
||||
|
||||
__comprueba_enlaces__ = config.get_setting('comprueba_enlaces', 'dospelis')
|
||||
__comprueba_enlaces_num__ = config.get_setting('comprueba_enlaces_num', 'dospelis')
|
||||
|
||||
host = 'https://dospelis.com/'
|
||||
|
||||
def mainlist(item):
|
||||
logger.info()
|
||||
|
||||
autoplay.init(item.channel, list_servers, list_quality)
|
||||
|
||||
itemlist = []
|
||||
|
||||
itemlist.append(Item(channel=item.channel, title='Peliculas', action='menu_movies',
|
||||
thumbnail= get_thumb('movies', auto=True)))
|
||||
itemlist.append(Item(channel=item.channel, title='Series', url=host+'tvshows', action='list_all', type='tvshows',
|
||||
thumbnail= get_thumb('tvshows', auto=True)))
|
||||
itemlist.append(
|
||||
item.clone(title="Buscar", action="search", url=host + '?s=', thumbnail=get_thumb("search", auto=True),
|
||||
extra='movie'))
|
||||
|
||||
autoplay.show_option(item.channel, itemlist)
|
||||
|
||||
return itemlist
|
||||
|
||||
def menu_movies(item):
|
||||
logger.info()
|
||||
|
||||
itemlist=[]
|
||||
|
||||
itemlist.append(Item(channel=item.channel, title='Todas', url=host + 'movies', action='list_all',
|
||||
thumbnail=get_thumb('all', auto=True), type='movies'))
|
||||
itemlist.append(Item(channel=item.channel, title='Genero', action='section',
|
||||
thumbnail=get_thumb('genres', auto=True), type='movies'))
|
||||
itemlist.append(Item(channel=item.channel, title='Por Año', action='section',
|
||||
thumbnail=get_thumb('year', auto=True), type='movies'))
|
||||
|
||||
return itemlist
|
||||
|
||||
def get_source(url):
|
||||
logger.info()
|
||||
data = httptools.downloadpage(url).data
|
||||
data = re.sub(r'"|\n|\r|\t| |<br>|\s{2,}', "", data)
|
||||
return data
|
||||
|
||||
|
||||
def get_language(lang_data):
|
||||
logger.info()
|
||||
language = []
|
||||
lang_list = scrapertools.find_multiple_matches(lang_data, '/flags/(.*?).png\)')
|
||||
for lang in lang_list:
|
||||
if lang == 'en':
|
||||
lang = 'vose'
|
||||
if lang not in language:
|
||||
language.append(lang)
|
||||
return language
|
||||
|
||||
def section(item):
|
||||
logger.info()
|
||||
itemlist=[]
|
||||
duplicados=[]
|
||||
data = get_source(host+'/'+item.type)
|
||||
if 'Genero' in item.title:
|
||||
patron = '<li class=cat-item cat-item-\d+><a href=(.*?) >(.*?)/i>'
|
||||
elif 'Año' in item.title:
|
||||
patron = '<li><a href=(.*?release.*?)>(.*?)</a>'
|
||||
elif 'Calidad' in item.title:
|
||||
patron = 'menu-item-object-dtquality menu-item-\d+><a href=(.*?)>(.*?)</a>'
|
||||
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedurl, scrapedtitle in matches:
|
||||
title = scrapedtitle
|
||||
plot=''
|
||||
if 'Genero' in item.title:
|
||||
quantity = scrapertools.find_single_match(scrapedtitle,'</a> <i>(.*?)<')
|
||||
title = scrapertools.find_single_match(scrapedtitle,'(.*?)</')
|
||||
title = title
|
||||
plot = '%s elementos' % quantity.replace('.','')
|
||||
else:
|
||||
title = scrapedtitle
|
||||
if title not in duplicados:
|
||||
itemlist.append(Item(channel=item.channel, url=scrapedurl, title=title, plot=plot, action='list_all',
|
||||
type=item.type))
|
||||
duplicados.append(title)
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def list_all(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
|
||||
data = get_source(item.url)
|
||||
|
||||
if item.type == 'movies':
|
||||
patron = '<article id=post-\d+ class=item movies><div class=poster><img src=(.*?) alt=(.*?)>.*?quality>(.*?)'
|
||||
patron += '</span><\/div><a href=(.*?)>.*?<\/h3><span>(.*?)<\/span><\/div>.*?flags(.*?)metadata'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedthumbnail, scrapedtitle, quality, scrapedurl, year, lang_data in matches:
|
||||
|
||||
|
||||
title = '%s [%s] [%s]' % (scrapedtitle, year, quality)
|
||||
contentTitle = scrapedtitle
|
||||
thumbnail = scrapedthumbnail
|
||||
url = scrapedurl
|
||||
language = get_language(lang_data)
|
||||
|
||||
itemlist.append(item.clone(action='findvideos',
|
||||
title=title,
|
||||
url=url,
|
||||
thumbnail=thumbnail,
|
||||
contentTitle=contentTitle,
|
||||
language=language,
|
||||
quality=quality,
|
||||
infoLabels={'year':year}))
|
||||
|
||||
elif item.type == 'tvshows':
|
||||
patron = '<article id=post-\d+ class=item tvshows><div class=poster><img src=(.*?) alt=(.*?)>.*?'
|
||||
patron += '<a href=(.*?)>.*?<\/h3><span>(.*?)<\/span><\/div>'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedthumbnail, scrapedtitle, scrapedurl, year in matches:
|
||||
title = scrapedtitle
|
||||
contentSerieName = scrapedtitle
|
||||
thumbnail = scrapedthumbnail
|
||||
url = scrapedurl
|
||||
|
||||
itemlist.append(item.clone(action='seasons',
|
||||
title=title,
|
||||
url=url,
|
||||
thumbnail=thumbnail,
|
||||
contentSerieName=contentSerieName,
|
||||
infoLabels={'year':year}))
|
||||
|
||||
tmdb.set_infoLabels(itemlist, seekTmdb=True)
|
||||
# Paginación
|
||||
|
||||
#url_next_page = scrapertools.find_single_match(data,"<a class='arrow_pag' href=([^>]+)><i id='nextpagination'")
|
||||
url_next_page = scrapertools.find_single_match(data,"<link rel=next href=([^ ]+) />")
|
||||
if url_next_page:
|
||||
itemlist.append(item.clone(title="Siguiente >>", url=url_next_page, action='list_all'))
|
||||
|
||||
return itemlist
|
||||
|
||||
def seasons(item):
|
||||
logger.info()
|
||||
|
||||
itemlist=[]
|
||||
|
||||
data=get_source(item.url)
|
||||
patron='Temporada \d+'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
infoLabels = item.infoLabels
|
||||
for season in matches:
|
||||
season = season.lower().replace('temporada','')
|
||||
infoLabels['season']=season
|
||||
title = 'Temporada %s' % season
|
||||
itemlist.append(Item(channel=item.channel, title=title, url=item.url, action='episodesxseasons',
|
||||
infoLabels=infoLabels))
|
||||
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
|
||||
|
||||
if config.get_videolibrary_support() and len(itemlist) > 0:
|
||||
itemlist.append(
|
||||
Item(channel=item.channel, title='[COLOR yellow]Añadir esta serie a la videoteca[/COLOR]', url=item.url,
|
||||
action="add_serie_to_library", extra="episodios", contentSerieName=item.contentSerieName))
|
||||
|
||||
return itemlist
|
||||
|
||||
def episodios(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
templist = seasons(item)
|
||||
for tempitem in templist:
|
||||
itemlist += episodesxseasons(tempitem)
|
||||
|
||||
return itemlist
|
||||
|
||||
def episodesxseasons(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
|
||||
data=get_source(item.url)
|
||||
patron='class=numerando>%s - (\d+)</div><div class=episodiotitle><a href=(.*?)>(.*?)<' % item.infoLabels['season']
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
infoLabels = item.infoLabels
|
||||
|
||||
for scrapedepisode, scrapedurl, scrapedtitle in matches:
|
||||
|
||||
infoLabels['episode'] = scrapedepisode
|
||||
url = scrapedurl
|
||||
title = '%sx%s - %s' % (infoLabels['season'], infoLabels['episode'], scrapedtitle)
|
||||
|
||||
itemlist.append(Item(channel=item.channel, title= title, url=url, action='findvideos', infoLabels=infoLabels))
|
||||
|
||||
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def findvideos(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
data = get_source(item.url)
|
||||
patron = 'id=option-(\d+).*?rptss src=(.*?) frameborder'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
lang=''
|
||||
for option, scrapedurl in matches:
|
||||
lang = scrapertools.find_single_match(data, 'href=#option-%s>.*?/flags/(.*?).png' % option)
|
||||
quality = ''
|
||||
if lang not in IDIOMAS:
|
||||
lang = 'en'
|
||||
title = '%s %s'
|
||||
|
||||
itemlist.append(
|
||||
Item(channel=item.channel, url=scrapedurl, title=title, action='play', quality=quality, language=IDIOMAS[lang],
|
||||
infoLabels=item.infoLabels))
|
||||
|
||||
itemlist = servertools.get_servers_itemlist(itemlist, lambda x: x.title % (x.server.capitalize(), x.language))
|
||||
|
||||
# Requerido para Filtrar enlaces
|
||||
|
||||
if __comprueba_enlaces__:
|
||||
itemlist = servertools.check_list_links(itemlist, __comprueba_enlaces_num__)
|
||||
|
||||
# Requerido para FilterTools
|
||||
|
||||
itemlist = filtertools.get_links(itemlist, item, list_language)
|
||||
|
||||
# Requerido para AutoPlay
|
||||
|
||||
autoplay.start(itemlist, item)
|
||||
|
||||
itemlist = sorted(itemlist, key=lambda it: it.language)
|
||||
|
||||
if item.contentType != 'episode':
|
||||
if config.get_videolibrary_support() and len(itemlist) > 0 and item.extra != 'findvideos':
|
||||
itemlist.append(
|
||||
Item(channel=item.channel, title='[COLOR yellow]Añadir esta pelicula a la videoteca[/COLOR]', url=item.url,
|
||||
action="add_pelicula_to_library", extra="findvideos", contentTitle=item.contentTitle))
|
||||
|
||||
return itemlist
|
||||
|
||||
def search(item, texto):
|
||||
logger.info()
|
||||
texto = texto.replace(" ", "+")
|
||||
item.url = item.url + texto
|
||||
|
||||
if texto != '':
|
||||
return search_results(item)
|
||||
else:
|
||||
return []
|
||||
|
||||
def search_results(item):
|
||||
logger.info()
|
||||
|
||||
itemlist=[]
|
||||
|
||||
data=get_source(item.url)
|
||||
patron = '<article>.*?<a href=(.*?)><img src=(.*?) alt=(.*?) />.*?meta.*?year>(.*?)<(.*?)<p>(.*?)</p>'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedurl, scrapedthumb, scrapedtitle, year, lang_data, scrapedplot in matches:
|
||||
|
||||
title = scrapedtitle
|
||||
url = scrapedurl
|
||||
thumbnail = scrapedthumb
|
||||
plot = scrapedplot
|
||||
language = get_language(lang_data)
|
||||
if language:
|
||||
action = 'findvideos'
|
||||
else:
|
||||
action = 'seasons'
|
||||
|
||||
new_item=Item(channel=item.channel, title=title, url=url, thumbnail=thumbnail, plot=plot,
|
||||
action=action,
|
||||
language=language, infoLabels={'year':year})
|
||||
if new_item.action == 'findvideos':
|
||||
new_item.contentTitle = new_item.title
|
||||
else:
|
||||
new_item.contentSerieName = new_item.title
|
||||
|
||||
itemlist.append(new_item)
|
||||
|
||||
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
|
||||
|
||||
return itemlist
|
||||
|
||||
def newest(categoria):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
item = Item()
|
||||
try:
|
||||
if categoria in ['peliculas']:
|
||||
item.url = host + 'movies/'
|
||||
elif categoria == 'infantiles':
|
||||
item.url = host + 'genre/animacion/'
|
||||
elif categoria == 'terror':
|
||||
item.url = host + 'genre/terror/'
|
||||
item.type='movies'
|
||||
itemlist = list_all(item)
|
||||
if itemlist[-1].title == 'Siguiente >>':
|
||||
itemlist.pop()
|
||||
except:
|
||||
import sys
|
||||
for line in sys.exc_info():
|
||||
logger.error("{0}".format(line))
|
||||
return []
|
||||
|
||||
return itemlist
|
||||
@@ -173,6 +173,7 @@ def listado(item):
|
||||
title = title.replace("Dual", "").replace("dual", "").replace("Subtitulada", "").replace("subtitulada", "").replace("Subt", "").replace("subt", "").replace("Sub", "").replace("sub", "").replace("(Proper)", "").replace("(proper)", "").replace("Proper", "").replace("proper", "").replace("#", "").replace("(Latino)", "").replace("Latino", "")
|
||||
title = title.replace("- HDRip", "").replace("(HDRip)", "").replace("- Hdrip", "").replace("(microHD)", "").replace("(DVDRip)", "").replace("(HDRip)", "").replace("(BR-LINE)", "").replace("(HDTS-SCREENER)", "").replace("(BDRip)", "").replace("(BR-Screener)", "").replace("(DVDScreener)", "").replace("TS-Screener", "").replace(" TS", "").replace(" Ts", "")
|
||||
title = re.sub(r'\??\s?\d*?\&.*', '', title).title().strip()
|
||||
item_local.from_title = title #Guardamos esta etiqueta para posible desambiguación de título
|
||||
|
||||
if item_local.extra == "peliculas": #preparamos Item para películas
|
||||
if "/serie" in scrapedurl or "/serie" in item.url:
|
||||
@@ -215,8 +216,8 @@ def listado(item):
|
||||
|
||||
itemlist.append(item_local.clone()) #Pintar pantalla
|
||||
|
||||
if not item.category: #Si este campo no existe es que viene de la primera pasada de una búsqueda global
|
||||
return itemlist #Retornamos sin pasar por la fase de maquillaje para ahorra tiempo
|
||||
#if not item.category: #Si este campo no existe es que viene de la primera pasada de una búsqueda global
|
||||
# return itemlist #Retornamos sin pasar por la fase de maquillaje para ahorra tiempo
|
||||
|
||||
#Pasamos a TMDB la lista completa Itemlist
|
||||
tmdb.set_infoLabels(itemlist, True)
|
||||
@@ -339,6 +340,15 @@ def findvideos(item):
|
||||
return itemlist
|
||||
|
||||
|
||||
def actualizar_titulos(item):
|
||||
logger.info()
|
||||
|
||||
item = generictools.update_title(item) #Llamamos al método que actualiza el título con tmdb.find_and_set_infoLabels
|
||||
|
||||
#Volvemos a la siguiente acción en el canal
|
||||
return item
|
||||
|
||||
|
||||
def search(item, texto):
|
||||
logger.info("search:" + texto)
|
||||
# texto = texto.replace(" ", "+")
|
||||
|
||||
54
plugin.video.alfa/channels/goodpelis.json
Normal file
54
plugin.video.alfa/channels/goodpelis.json
Normal file
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"id": "goodpelis",
|
||||
"name": "GoodPelis",
|
||||
"active": true,
|
||||
"adult": false,
|
||||
"language": ["lat"],
|
||||
"thumbnail": "http://goodpelis.net/wp-content/uploads/2017/11/Logo-GP.png",
|
||||
"banner": "",
|
||||
"categories": [
|
||||
"movie"
|
||||
],
|
||||
"settings": [
|
||||
{
|
||||
"id": "include_in_global_search",
|
||||
"type": "bool",
|
||||
"label": "Incluir en busqueda global",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "include_in_newest_latino",
|
||||
"type": "bool",
|
||||
"label": "Incluir en Novedades - Latino",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "include_in_newest_peliculas",
|
||||
"type": "bool",
|
||||
"label": "Incluir en Novedades - Peliculas",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "include_in_newest_infantiles",
|
||||
"type": "bool",
|
||||
"label": "Incluir en Novedades - Infantiles",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "include_in_newest_terror",
|
||||
"type": "bool",
|
||||
"label": "Incluir en Novedades - Terror",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
}
|
||||
]
|
||||
}
|
||||
354
plugin.video.alfa/channels/goodpelis.py
Normal file
354
plugin.video.alfa/channels/goodpelis.py
Normal file
@@ -0,0 +1,354 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# -*- Channel GoodPelis -*-
|
||||
# -*- Created for Alfa-addon -*-
|
||||
# -*- By the Alfa Develop Group -*-
|
||||
|
||||
import re
|
||||
|
||||
from core import httptools
|
||||
from core import scrapertools
|
||||
from core import servertools
|
||||
from core import tmdb
|
||||
from core.item import Item
|
||||
from platformcode import config, logger
|
||||
from channelselector import get_thumb
|
||||
|
||||
host = 'https://goodpelis.net/'
|
||||
|
||||
|
||||
def mainlist(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
|
||||
itemlist.append(item.clone(title="Peliculas",
|
||||
action="menu_peliculas",
|
||||
thumbnail=get_thumb('movies', auto=True),
|
||||
))
|
||||
|
||||
# itemlist.append(item.clone(title="Series",
|
||||
# action="menu_series",
|
||||
# thumbnail=get_thumb('tvshows', auto=True),
|
||||
# ))
|
||||
|
||||
itemlist.append(item.clone(title="Buscar", action="search",
|
||||
thumbnail=get_thumb('search', auto=True),
|
||||
url=host + '?s='
|
||||
))
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def menu_peliculas(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
|
||||
itemlist.append(item.clone(title="Todas",
|
||||
action="list_all",
|
||||
thumbnail=get_thumb('all', auto=True),
|
||||
url=host + 'page/1/?s'
|
||||
))
|
||||
|
||||
itemlist.append(item.clone(title="Generos",
|
||||
action="seccion",
|
||||
url=host + 'page/1/?s',
|
||||
thumbnail=get_thumb('genres', auto=True),
|
||||
seccion='generos-pelicula'
|
||||
))
|
||||
|
||||
itemlist.append(item.clone(title="Por Año",
|
||||
action="seccion",
|
||||
url=host + 'page/1/?s',
|
||||
thumbnail=get_thumb('year', auto=True),
|
||||
seccion='fecha-estreno'
|
||||
))
|
||||
|
||||
itemlist.append(item.clone(title="Calidad",
|
||||
action="seccion",
|
||||
url=host + 'page/1/?s',
|
||||
thumbnail=get_thumb('quality', auto=True),
|
||||
seccion='calidad'
|
||||
))
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def menu_series(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
|
||||
itemlist.append(item.clone(title="Todas",
|
||||
action="list_all", thumbnail=get_thumb('all', auto=True),
|
||||
url=host + 'series/page/1/',
|
||||
))
|
||||
|
||||
itemlist.append(item.clone(title="Generos",
|
||||
action="seccion",
|
||||
url=host + 'series/page/1/',
|
||||
thumbnail=get_thumb('genres', auto=True),
|
||||
seccion='generos-serie'
|
||||
))
|
||||
|
||||
itemlist.append(item.clone(title="Por Año",
|
||||
action="seccion",
|
||||
url=host + 'series/page/1/',
|
||||
thumbnail=get_thumb('year', auto=True),
|
||||
seccion='series-lanzamiento'
|
||||
))
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def list_all(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
data = get_source(item.url)
|
||||
patron = 'class=item.*?<a href=(.*?)><div class=image.*?<img src=(.*?) alt=(.*?) (?:\(\d{4}|width).*?'
|
||||
patron += 'fixyear><h2>.*?<\/h2>.*?<span class=year>(.*?)<\/span><\/div>(.*?)<\/div>'
|
||||
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedurl, scrapedthumbnail, scrapedtitle, scrapedyear, scrapedquality in matches:
|
||||
url = scrapedurl
|
||||
action = 'findvideos'
|
||||
thumbnail = scrapedthumbnail
|
||||
plot = ''
|
||||
contentSerieName = ''
|
||||
contentTitle = scrapedtitle
|
||||
title = contentTitle
|
||||
quality = 'Full HD'
|
||||
if scrapedquality != '':
|
||||
quality = scrapertools.find_single_match(scrapedquality, 'calidad2>(.*?)<')
|
||||
title = contentTitle + ' (%s)' % quality
|
||||
|
||||
year = scrapedyear
|
||||
|
||||
if 'series' in item.url or 'series' in url:
|
||||
action = 'seasons'
|
||||
contentSerieName = contentTitle
|
||||
quality = ''
|
||||
new_item = Item(channel=item.channel,
|
||||
action=action,
|
||||
title=title,
|
||||
url=url,
|
||||
thumbnail=thumbnail,
|
||||
plot=plot,
|
||||
quality=quality,
|
||||
infoLabels={'year': year}
|
||||
)
|
||||
if 'series' not in item.url:
|
||||
new_item.contentTitle = contentTitle
|
||||
else:
|
||||
new_item.contentSerieName = contentSerieName
|
||||
if 'temporada' not in url:
|
||||
itemlist.append(new_item)
|
||||
|
||||
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
|
||||
# Paginacion
|
||||
|
||||
if itemlist != []:
|
||||
next_page = scrapertools.find_single_match(data,
|
||||
'<div class=pag_b><a href=(.*?)>Siguiente</a>')
|
||||
if next_page != '':
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
action="list_all",
|
||||
title='Siguiente >>>',
|
||||
url=next_page,
|
||||
))
|
||||
return itemlist
|
||||
|
||||
|
||||
def seccion(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
data = get_source(item.url)
|
||||
if item.seccion == 'generos-pelicula':
|
||||
patron = '<li class=cat-item cat-item-.*?><a href=(.*?)>(.*?<\/a> <span>.*?)<\/span><\/li>'
|
||||
elif item.seccion == 'generos-serie':
|
||||
patron = '<li class=cat-item cat-item-.*?><a href=(.*?\/series-genero\/.*?)>(.*?<\/a> <span>.*?)<\/span><\/li>'
|
||||
elif item.seccion in ['fecha-estreno', 'series-lanzamiento']:
|
||||
patron = '<li><a href=%sfecha-estreno(.*?)>(.*?)<\/a>' % host
|
||||
elif item.seccion == 'calidad':
|
||||
patron = '<li><a href=%scalidad(.*?)>(.*?)<\/a>' % host
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
for scrapedurl, scrapedtitle in matches:
|
||||
thumbnail = ''
|
||||
if 'generos' in item.seccion:
|
||||
cantidad = scrapertools.find_single_match(scrapedtitle, '<span>(\d+)')
|
||||
title = scrapertools.find_single_match(scrapedtitle, '(.*?)<')
|
||||
url = scrapedurl
|
||||
title = scrapertools.decodeHtmlentities(title)
|
||||
title = title + ' (%s)' % cantidad
|
||||
elif item.seccion in ['series-lanzamiento', 'fecha-estreno', 'calidad']:
|
||||
title = scrapedtitle
|
||||
url = '%s%s%s' % (host, item.seccion, scrapedurl)
|
||||
|
||||
itemlist.append(item.clone(action='list_all',
|
||||
title=title,
|
||||
url=url,
|
||||
thumbnail=thumbnail
|
||||
))
|
||||
return itemlist
|
||||
|
||||
|
||||
def seasons(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
|
||||
data = get_source(item.url)
|
||||
patron = '<span class=title>.*?- Temporada (.*?)<\/span>'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for temporada in matches:
|
||||
title = 'Temporada %s' % temporada
|
||||
contentSeasonNumber = temporada
|
||||
item.infoLabels['season'] = contentSeasonNumber
|
||||
itemlist.append(item.clone(action='episodiosxtemp',
|
||||
title=title,
|
||||
contentSeasonNumber=contentSeasonNumber
|
||||
))
|
||||
|
||||
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
|
||||
|
||||
if config.get_videolibrary_support() and len(itemlist) > 0:
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
title='[COLOR yellow]Añadir esta serie a la videoteca[/COLOR]',
|
||||
url=item.url,
|
||||
action="add_serie_to_library",
|
||||
extra="episodios",
|
||||
contentSerieName=item.contentSerieName,
|
||||
contentSeasonNumber=contentSeasonNumber
|
||||
))
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def episodios(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
data = get_source(item.url)
|
||||
|
||||
patron = '<li><div class=numerando>(\d+).*?x.*?(\d+)<\/div>.*?<a href=(.*?)> (.*?)<\/a>.*?<\/i>'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedtemp, scrapedep, scrapedurl, scrapedtitle in matches:
|
||||
temporada = scrapedtemp
|
||||
title = temporada + 'x%s %s' % (scrapedep, scrapedtitle)
|
||||
url = scrapedurl
|
||||
contentEpisodeNumber = scrapedep
|
||||
item.infoLabels['episode'] = contentEpisodeNumber
|
||||
itemlist.append(item.clone(action='findvideos',
|
||||
title=title,
|
||||
url=url,
|
||||
contentEpisodeNumber=contentEpisodeNumber,
|
||||
))
|
||||
return itemlist
|
||||
|
||||
|
||||
def episodiosxtemp(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
data = get_source(item.url)
|
||||
temporada = item.contentSeasonNumber
|
||||
patron = '<li><div class=numerando>%s.*?x.*?(\d+)<\/div>.*?<a href=(.*?)> (.*?)<\/a>.*?<\/i>' % temporada
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedep, scrapedurl, scrapedtitle in matches:
|
||||
title = temporada + 'x%s %s' % (scrapedep, scrapedtitle)
|
||||
url = scrapedurl
|
||||
contentEpisodeNumber = scrapedep
|
||||
item.infoLabels['episode'] = contentEpisodeNumber
|
||||
itemlist.append(item.clone(action='findvideos',
|
||||
title=title,
|
||||
url=url,
|
||||
contentEpisodeNumber=contentEpisodeNumber,
|
||||
))
|
||||
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
|
||||
return itemlist
|
||||
|
||||
|
||||
def findvideos(item):
|
||||
logger.info()
|
||||
url_list = []
|
||||
itemlist = []
|
||||
duplicados = []
|
||||
data = get_source(item.url)
|
||||
src = data
|
||||
patron = '<(?:iframe|IFRAME).*?(?:src|SRC)=(.*?) (?:scrolling|frameborder|FRAMEBORDER)'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for url in matches:
|
||||
lang = 'LAT'
|
||||
quality = item.quality
|
||||
title = '[%s] [%s]'
|
||||
if url != '':
|
||||
itemlist.append(item.clone(title=title, url=url, action='play', language=lang))
|
||||
|
||||
itemlist = servertools.get_servers_itemlist(itemlist, lambda i: i.title % (i.server, i.language))
|
||||
|
||||
if item.infoLabels['mediatype'] == 'movie':
|
||||
if config.get_videolibrary_support() and len(itemlist) > 0 and item.extra != 'findvideos':
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
title='[COLOR yellow]Añadir esta pelicula a la videoteca[/COLOR]',
|
||||
url=item.url,
|
||||
action="add_pelicula_to_library",
|
||||
extra="findvideos",
|
||||
contentTitle=item.contentTitle
|
||||
))
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def search(item, texto):
|
||||
logger.info()
|
||||
texto = texto.replace(" ", "+")
|
||||
item.url = item.url + texto
|
||||
try:
|
||||
if texto != '':
|
||||
return list_all(item)
|
||||
else:
|
||||
return []
|
||||
except:
|
||||
import sys
|
||||
for line in sys.exc_info():
|
||||
logger.error("%s" % line)
|
||||
return []
|
||||
|
||||
|
||||
def newest(categoria):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
item = Item()
|
||||
try:
|
||||
if categoria in ['peliculas', 'latino']:
|
||||
item.url = host + 'page/1/?s'
|
||||
|
||||
elif categoria == 'infantiles':
|
||||
item.url = host + 'category/animacion/'
|
||||
|
||||
elif categoria == 'terror':
|
||||
item.url = host + 'category/terror/'
|
||||
|
||||
itemlist = list_all(item)
|
||||
if itemlist[-1].title == 'Siguiente >>>':
|
||||
itemlist.pop()
|
||||
except:
|
||||
import sys
|
||||
for line in sys.exc_info():
|
||||
logger.error("{0}".format(line))
|
||||
return []
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def get_source(url):
|
||||
logger.info()
|
||||
data = httptools.downloadpage(url).data
|
||||
data = re.sub(r'"|\n|\r|\t| |<br>|\s{2,}', "", data)
|
||||
return data
|
||||
@@ -333,13 +333,14 @@ def listado(item):
|
||||
item_local.contentSerieName = title.strip()
|
||||
|
||||
item_local.title = title.strip() #Salvamos el título
|
||||
item_local.from_title = title.strip() #Guardamos esta etiqueta para posible desambiguación de título
|
||||
item_local.infoLabels['year'] = "-" #Reseteamos el año para que TMDB nos lo de
|
||||
|
||||
#Agrega el item local a la lista itemlist
|
||||
itemlist.append(item_local.clone())
|
||||
|
||||
if not item.category and result_mode == 0: #Si este campo no existe, viene de la primera pasada de una búsqueda global
|
||||
return itemlist #Retornamos sin pasar por la fase de maquillaje para ahorrar tiempo
|
||||
#if not item.category and result_mode == 0: #Si este campo no existe, viene de la primera pasada de una búsqueda global
|
||||
# return itemlist #Retornamos sin pasar por la fase de maquillaje para ahorrar tiempo
|
||||
|
||||
#Pasamos a TMDB la lista completa Itemlist
|
||||
tmdb.set_infoLabels(itemlist, __modo_grafico__)
|
||||
@@ -813,14 +814,11 @@ def episodios(item):
|
||||
|
||||
def actualizar_titulos(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
|
||||
from platformcode import launcher
|
||||
|
||||
item = generictools.update_title(item) #Llamamos al método que actualiza el título con tmdb.find_and_set_infoLabels
|
||||
|
||||
#Volvemos a la siguiente acción en el canal
|
||||
return launcher.run(item)
|
||||
return item
|
||||
|
||||
|
||||
def search(item, texto):
|
||||
|
||||
@@ -517,10 +517,10 @@ def findvideos(item):
|
||||
url=url_targets, thumbnail=item.thumbnail, show=item.show, folder=False))
|
||||
title_label = " ( [COLOR green][B]Tráiler[/B][/COLOR] )"
|
||||
it1.append(
|
||||
item.clone(channel="trailertools", action="buscartrailer", title=title_label, contentTitle=item.show, url=item.url,
|
||||
Item(channel="trailertools", action="buscartrailer", title=title_label, contentTitle=item.show, url=item.url,
|
||||
thumbnail=item.thumbnail, show=item.show))
|
||||
it1.append(Item(channel=item.channel, action="set_status", title=title, fulltitle=title, url=url_targets,
|
||||
thumbnail=item.thumbnail, show=item.show, folder=True))
|
||||
thumbnail=item.thumbnail, show=item.show, language=item.language, folder=True))
|
||||
data_js = httptools.downloadpage("%s/templates/hdfull/js/jquery.hdfull.view.min.js" % host).data
|
||||
key = scrapertools.find_single_match(data_js, 'JSON.parse\(atob.*?substrings\((.*?)\)')
|
||||
data_js = httptools.downloadpage("%s/js/providers.js" % host).data
|
||||
@@ -566,8 +566,8 @@ def findvideos(item):
|
||||
if account:
|
||||
url += "###" + id + ";" + type
|
||||
it2.append(
|
||||
item.clone(channel=item.channel, action="play", title=title, url=url, thumbnail=thumbnail,
|
||||
plot=plot, fanart=fanart, show=item.show, folder=True, infoLabels=infolabels,
|
||||
Item(channel=item.channel, action="play", title=title, url=url, thumbnail=thumbnail,
|
||||
plot=plot, fanart=fanart, show=item.show, folder=True, infoLabels=infolabels, language=idioma,
|
||||
contentTitle=item.contentTitle, contentType=item.contentType, tipo=option, tipo1=option1, idioma=idioma))
|
||||
it2 = servertools.get_servers_itemlist(it2, lambda i: i.title % i.server.capitalize())
|
||||
it2.sort(key=lambda it: (it.tipo1, it.idioma, it.server))
|
||||
|
||||
@@ -340,7 +340,15 @@ def listado(item):
|
||||
item_local.url = url
|
||||
item_local.contentType = "season"
|
||||
else:
|
||||
real_title, item_local.contentSeason, item_local.quality = scrapertools.find_single_match(scrapedurl, patron_title_se)
|
||||
try:
|
||||
real_title, item_local.contentSeason, item_local.quality = scrapertools.find_single_match(scrapedurl, patron_title_se)
|
||||
except:
|
||||
real_title = ''
|
||||
item_local.action = "findvideos"
|
||||
item_local.contentType = "episode"
|
||||
item_local.contentSeason = 1
|
||||
item_local.contentEpisodeNumber = 1
|
||||
item_local.quality = ''
|
||||
|
||||
item_local.contentSerieName = real_title.replace("-", " ").capitalize()
|
||||
if not item_local.contentSeason:
|
||||
@@ -448,6 +456,7 @@ def listado(item):
|
||||
elif item_local.contentType != "episode":
|
||||
item_local.title = title
|
||||
item_local.title = item_local.contentSerieName
|
||||
item_local.from_title = title #Guardamos esta etiqueta para posible desambiguación de título
|
||||
|
||||
if "saga" in item_local.contentTitle.lower() or "saga" in item_local.contentSerieName.lower():
|
||||
item_local.contentTitle = item_local.contentTitle.replace("Saga ", "").replace("Saga", "")
|
||||
@@ -681,6 +690,7 @@ def listado_busqueda(item):
|
||||
title = title.replace("4k-hdr", "").replace("4K-HDR", "").replace("hdr", "").replace("HDR", "").replace("4k", "").replace("4K", "")
|
||||
title = title.replace("(", "").replace(")", "").replace("[", "").replace("]", "").strip()
|
||||
item_local.title = title
|
||||
item_local.from_title = title #Guardamos esta etiqueta para posible desambiguación de título
|
||||
|
||||
if "Peliculas" in scrapedtype or "Variados" in scrapedtype:
|
||||
item_local.action = "findvideos"
|
||||
@@ -711,8 +721,8 @@ def listado_busqueda(item):
|
||||
|
||||
#logger.debug(item_local)
|
||||
|
||||
if not category: #Si este campo no existe es que viene de la primera pasada de una búsqueda global
|
||||
return itemlist #Retornamos sin pasar por la fase de maquillaje para ahorra tiempo
|
||||
#if not category: #Si este campo no existe es que viene de la primera pasada de una búsqueda global
|
||||
# return itemlist #Retornamos sin pasar por la fase de maquillaje para ahorra tiempo
|
||||
|
||||
#Llamamos a TMDB para que complete InfoLabels desde itemlist. Mejor desde itemlist porque envía las queries en paralelo
|
||||
tmdb.set_infoLabels(itemlist, __modo_grafico__)
|
||||
@@ -966,14 +976,11 @@ def episodios(item):
|
||||
|
||||
def actualizar_titulos(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
|
||||
from platformcode import launcher
|
||||
|
||||
item = generictools.update_title(item) #Llamamos al método que actualiza el título con tmdb.find_and_set_infoLabels
|
||||
|
||||
#Volvemos a la siguiente acción en el canal
|
||||
return launcher.run(item)
|
||||
return item
|
||||
|
||||
|
||||
def search(item, texto):
|
||||
|
||||
@@ -476,7 +476,9 @@ def listado(item):
|
||||
|
||||
# Limpiamos títulos, Sacamos datos de calidad, audio y lenguaje
|
||||
title = re.sub('\r\n', '', scrapedtitle).decode('iso-8859-1').encode('utf8').strip()
|
||||
#title = re.sub('\r\n', '', scrapedtitle).decode('utf-8').encode('utf-8').strip()
|
||||
title_alt = re.sub('\r\n', '', scrapedtitle_alt).decode('iso-8859-1').encode('utf8').strip()
|
||||
#title_alt = re.sub('\r\n', '', scrapedtitle_alt).decode('utf-8').encode('utf-8').strip()
|
||||
title = title.replace("á", "a").replace("é", "e").replace("í", "i").replace("ó", "o").replace("ú", "u").replace("ü", "u").replace("�", "ñ").replace("ñ", "ñ").replace(".", " ")
|
||||
title_alt = title_alt.replace("á", "a").replace("é", "e").replace("í", "i").replace("ó", "o").replace("ú", "u").replace("ü", "u").replace("�", "ñ").replace("ñ", "ñ")
|
||||
|
||||
@@ -485,7 +487,7 @@ def listado(item):
|
||||
|
||||
#Determinamos y marcamos idiomas distintos del castellano
|
||||
item_local.language = []
|
||||
if "[vos" in title.lower() or "v.o.s" in title.lower() or "vo" in title.lower() or ".com/pelicula/" in scrapedurl or ".com/series-vo" in scrapedurl or "-vo/" in scrapedurl or "vos" in calidad.lower() or "vose" in calidad.lower() or "v.o.s" in calidad.lower() or "sub" in calidad.lower() or ".com/peliculas-vo" in item.url:
|
||||
if "[vos" in title.lower() or "v.o.s" in title.lower() or "vo" in title.lower() or "subs" in title.lower() or ".com/pelicula/" in scrapedurl or ".com/series-vo" in scrapedurl or "-vo/" in scrapedurl or "vos" in calidad.lower() or "vose" in calidad.lower() or "v.o.s" in calidad.lower() or "sub" in calidad.lower() or ".com/peliculas-vo" in item.url:
|
||||
item_local.language += ["VOS"]
|
||||
title = title.replace(" [Subs. integrados]", "").replace(" [subs. Integrados]", "").replace(" [VOSE", "").replace(" [VOS", "").replace(" (V.O.S.E)", "").replace(" VO", "").replace("Subtitulos", "")
|
||||
if "latino" in title.lower() or "argentina" in title.lower() or "-latino/" in scrapedurl or "latino" in calidad.lower() or "argentina" in calidad.lower():
|
||||
@@ -557,9 +559,9 @@ def listado(item):
|
||||
title = re.sub(r' \d+x\d+', '', title)
|
||||
title = re.sub(r' x\d+', '', title)
|
||||
|
||||
title = title.replace("Ver online ", "").replace("Descarga Serie HD ", "").replace("Descargar Serie HD ", "").replace("Descarga Serie ", "").replace("Descargar Serie ", "").replace("Ver en linea ", "").replace("Ver en linea", "").replace("HD ", "").replace("(Proper)", "").replace("RatDVD", "").replace("DVDRiP", "").replace("DVDRIP", "").replace("DVDRip", "").replace("DVDR", "").replace("DVD9", "").replace("DVD", "").replace("DVBRIP", "").replace("DVB", "").replace("LINE", "").replace("- ES ", "").replace("ES ", "").replace("COMPLETA", "").replace("(", "-").replace(")", "-").replace(".", " ").strip()
|
||||
title = title.replace("Ver online ", "").replace("Descarga Serie HD ", "").replace("Descargar Serie HD ", "").replace("Descarga Serie ", "").replace("Descargar Serie ", "").replace("Ver en linea ", "").replace("Ver en linea", "").replace("en Full HD", "").replace("en hd ", "").replace("en HD ", "").replace("HD ", "").replace("(Proper)", "").replace("RatDVD", "").replace("DVDRiP", "").replace("DVDRIP", "").replace("DVDRip", "").replace("DVDR", "").replace("DVD9", "").replace("DVD", "").replace("DVBRIP", "").replace("DVB", "").replace("LINE", "").replace("calidad", " ").replace("- ES ", "").replace("ES ", "").replace("COMPLETA", "").replace("(", "-").replace(")", "-").replace(".", " ").strip()
|
||||
|
||||
title = title.replace("Descargar torrent ", "").replace("Descarga Gratis ", "").replace("Descargar Estreno ", "").replace("Descargar Estrenos ", "").replace("Pelicula en latino ", "").replace("Descargar Pelicula ", "").replace("Descargar Peliculas ", "").replace("Descargar peliculas ", "").replace("Descargar Todas ", "").replace("Descargar Otras ", "").replace("Descargar ", "").replace("Descarga ", "").replace("Bajar ", "").replace("HDRIP ", "").replace("HDRiP ", "").replace("HDRip ", "").replace("RIP ", "").replace("Rip", "").replace("RiP", "").replace("XviD", "").replace("AC3 5.1", "").replace("AC3", "").replace("1080p ", "").replace("720p ", "").replace("DVD-Screener ", "").replace("TS-Screener ", "").replace("Screener ", "").replace("BdRemux ", "").replace("BR ", "").replace("4KULTRA", "").replace("FULLBluRay", "").replace("FullBluRay", "").replace("BluRay", "").replace("Bonus Disc", "").replace("de Cine ", "").replace("TeleCine ", "").replace("latino", "").replace("Latino", "").replace("argentina", "").replace("Argentina", "").strip()
|
||||
title = title.replace("Descargar torrent ", "").replace("Descarga Gratis", "").replace("Descarga gratis", "").replace("Descargar Gratis", "").replace("Descargar gratis", "").replace("en gratis", "").replace("gratis gratis", "").replace("Gratisgratis", "").replace("Descargar Estreno ", "").replace("Descargar Estrenos ", "").replace("Pelicula en latino ", "").replace("Descargar Pelicula ", "").replace("Descargar pelicula ", "").replace("Descargar Peliculas ", "").replace("Descargar peliculas ", "").replace("Descargar Todas ", "").replace("Descargar Otras ", "").replace("Descargar ", "").replace("Descarga ", "").replace("Descargar ", "").replace("Decargar ", "").replace("Bajar ", "").replace("HDRIP ", "").replace("HDRiP ", "").replace("HDRip ", "").replace("RIP ", "").replace("Rip", "").replace("RiP", "").replace("XviD", "").replace("AC3 5.1", "").replace("AC3", "").replace("1080p ", "").replace("720p ", "").replace("DVD-Screener ", "").replace("TS-Screener ", "").replace("Screener ", "").replace("BdRemux ", "").replace("BR ", "").replace("4KULTRA", "").replace("FULLBluRay", "").replace("FullBluRay", "").replace("en BluRay", "").replace("BluRay en", "").replace("Bluray en", "").replace("BluRay", "").replace("Bonus Disc", "").replace("de Cine ", "").replace("TeleCine ", "").replace("latino", "").replace("Latino", "").replace("argentina", "").replace("Argentina", "").replace("++Sub", "").replace("+-+Sub", "").strip()
|
||||
|
||||
if title.endswith("torrent gratis"): title = title[:-15]
|
||||
if title.endswith("gratis"): title = title[:-7]
|
||||
@@ -586,6 +588,7 @@ def listado(item):
|
||||
#Limpieza final del título y guardado en las variables según su tipo de contenido
|
||||
title = scrapertools.remove_htmltags(title)
|
||||
item_local.title = title
|
||||
item_local.from_title = title #Guardamos esta etiqueta para posible desambiguación de título
|
||||
if item_local.contentType == "movie":
|
||||
item_local.contentTitle = title
|
||||
else:
|
||||
@@ -609,6 +612,8 @@ def listado(item):
|
||||
|
||||
#Agrega el item local a la lista itemlist
|
||||
itemlist.append(item_local.clone())
|
||||
|
||||
#logger.debug(item_local)
|
||||
|
||||
#Pasamos a TMDB la lista completa Itemlist
|
||||
tmdb.set_infoLabels(itemlist, __modo_grafico__)
|
||||
@@ -920,13 +925,14 @@ def listado_busqueda(item):
|
||||
|
||||
# Limpiamos títulos, Sacamos datos de calidad, audio y lenguaje
|
||||
title = re.sub('\r\n', '', scrapedtitle).decode('iso-8859-1').encode('utf8').strip()
|
||||
#title = re.sub('\r\n', '', scrapedtitle).decode('utf-8').encode('utf-8').strip()
|
||||
title = title.replace("á", "a").replace("é", "e").replace("í", "i").replace("ó", "o").replace("ú", "u").replace("ü", "u").replace("�", "ñ").replace("ñ", "ñ")
|
||||
|
||||
item_local.quality = scrapertools.htmlclean(calidad)
|
||||
|
||||
#Determinamos y marcamos idiomas distintos del castellano
|
||||
item_local.language = []
|
||||
if "[vos" in title.lower() or "v.o.s" in title.lower() or "vo" in title.lower() or ".com/pelicula/" in url or ".com/series-vo" in url or "-vo/" in url or "vos" in calidad.lower() or "vose" in calidad.lower() or "v.o.s" in calidad.lower() or "sub" in calidad.lower() or ".com/peliculas-vo" in item.url:
|
||||
if "[vos" in title.lower() or "v.o.s" in title.lower() or "vo" in title.lower() or "subs" in title.lower() or ".com/pelicula/" in url or ".com/series-vo" in url or "-vo/" in url or "vos" in calidad.lower() or "vose" in calidad.lower() or "v.o.s" in calidad.lower() or "sub" in calidad.lower() or ".com/peliculas-vo" in item.url:
|
||||
item_local.language += ["VOS"]
|
||||
title = title.replace(" [Subs. integrados]", "").replace(" [subs. Integrados]", "").replace(" [VOSE", "").replace(" [VOS", "").replace(" (V.O.S.E)", "").replace(" VO", "").replace("Subtitulos", "")
|
||||
if "latino" in title.lower() or "argentina" in title.lower() or "-latino/" in url or "latino" in calidad.lower() or "argentina" in calidad.lower():
|
||||
@@ -986,7 +992,7 @@ def listado_busqueda(item):
|
||||
title_subs += ["[Miniserie]"]
|
||||
|
||||
#Limpiamos restos en título
|
||||
title = title.replace("Castellano", "").replace("castellano", "").replace("inglés", "").replace("ingles", "").replace("Inglés", "").replace("Ingles", "").replace("Ing", "").replace("Eng", "").replace("Calidad", "").replace("de la Serie", "")
|
||||
title = title.replace("Castellano", "").replace("castellano", "").replace("inglés", "").replace("ingles", "").replace("Inglés", "").replace("Ingles", "").replace("Ingl", "").replace("Engl", "").replace("Calidad", "").replace("de la Serie", "")
|
||||
|
||||
#Limpiamos cabeceras y colas del título
|
||||
title = re.sub(r'Descargar\s\w+\-\w+', '', title)
|
||||
@@ -996,9 +1002,9 @@ def listado_busqueda(item):
|
||||
title = re.sub(r' \d+x\d+', '', title)
|
||||
title = re.sub(r' x\d+', '', title)
|
||||
|
||||
title = title.replace("Ver online ", "").replace("Descarga Serie HD ", "").replace("Descargar Serie HD ", "").replace("Descarga Serie ", "").replace("Descargar Serie ", "").replace("Ver en linea ", "").replace("Ver en linea", "").replace("HD ", "").replace("(Proper)", "").replace("RatDVD", "").replace("DVDRiP", "").replace("DVDRIP", "").replace("DVDRip", "").replace("DVDR", "").replace("DVD9", "").replace("DVD", "").replace("DVBRIP", "").replace("DVB", "").replace("LINE", "").replace("- ES ", "").replace("ES ", "").replace("COMPLETA", "").replace("(", "-").replace(")", "-").replace(".", " ").strip()
|
||||
title = title.replace("Ver online ", "").replace("Descarga Serie HD ", "").replace("Descargar Serie HD ", "").replace("Descarga Serie ", "").replace("Descargar Serie ", "").replace("Ver en linea ", "").replace("Ver en linea", "").replace("en Full HD", "").replace("en hd ", "").replace("en HD ", "").replace("HD ", "").replace("(Proper)", "").replace("RatDVD", "").replace("DVDRiP", "").replace("DVDRIP", "").replace("DVDRip", "").replace("DVDR", "").replace("DVD9", "").replace("DVD", "").replace("DVBRIP", "").replace("DVB", "").replace("LINE", "").replace("calidad", " ").replace("- ES ", "").replace("ES ", "").replace("COMPLETA", "").replace("(", "-").replace(")", "-").replace(".", " ").strip()
|
||||
|
||||
title = title.replace("Descargar torrent ", "").replace("Descarga Gratis ", "").replace("Descargar Estreno ", "").replace("Descargar Estrenos ", "").replace("Pelicula en latino ", "").replace("Descargar Pelicula ", "").replace("Descargar Peliculas ", "").replace("Descargar peliculas ", "").replace("Descargar Todas ", "").replace("Descargar Otras ", "").replace("Descargar ", "").replace("Descarga ", "").replace("Bajar ", "").replace("HDRIP ", "").replace("HDRiP ", "").replace("HDRip ", "").replace("RIP ", "").replace("Rip", "").replace("RiP", "").replace("XviD", "").replace("AC3 5.1", "").replace("AC3", "").replace("1080p ", "").replace("720p ", "").replace("DVD-Screener ", "").replace("TS-Screener ", "").replace("Screener ", "").replace("BdRemux ", "").replace("BR ", "").replace("4KULTRA", "").replace("FULLBluRay", "").replace("FullBluRay", "").replace("BluRay", "").replace("Bonus Disc", "").replace("de Cine ", "").replace("TeleCine ", "").replace("latino", "").replace("Latino", "").replace("argentina", "").replace("Argentina", "").strip()
|
||||
title = title.replace("Descargar torrent ", "").replace("Descarga Gratis", "").replace("Descarga gratis", "").replace("Descargar Gratis", "").replace("Descargar gratis", "").replace("en gratis", "").replace("gratis gratis", "").replace("Gratisgratis", "").replace("Descargar Estreno ", "").replace("Descargar Estrenos ", "").replace("Pelicula en latino ", "").replace("Descargar Pelicula ", "").replace("Descargar pelicula ", "").replace("Descargar Peliculas ", "").replace("Descargar peliculas ", "").replace("Descargar Todas ", "").replace("Descargar Otras ", "").replace("Descargar ", "").replace("Descarga ", "").replace("Descargar ", "").replace("Decargar ", "").replace("Bajar ", "").replace("HDRIP ", "").replace("HDRiP ", "").replace("HDRip ", "").replace("RIP ", "").replace("Rip", "").replace("RiP", "").replace("XviD", "").replace("AC3 5.1", "").replace("AC3", "").replace("1080p ", "").replace("720p ", "").replace("DVD-Screener ", "").replace("TS-Screener ", "").replace("Screener ", "").replace("BdRemux ", "").replace("BR ", "").replace("4KULTRA", "").replace("FULLBluRay", "").replace("FullBluRay", "").replace("en BluRay", "").replace("BluRay en", "").replace("Bluray en", "").replace("BluRay", "").replace("Bonus Disc", "").replace("de Cine ", "").replace("TeleCine ", "").replace("latino", "").replace("Latino", "").replace("argentina", "").replace("Argentina", "").replace("++Sub", "").replace("+-+Sub", "").strip()
|
||||
|
||||
if "pelisyseries.com" in host and item_local.contentType == "tvshow":
|
||||
titulo = ''
|
||||
@@ -1045,6 +1051,7 @@ def listado_busqueda(item):
|
||||
|
||||
#Limpieza final del título y guardado en las variables según su tipo de contenido
|
||||
item_local.title = title
|
||||
item_local.from_title = title #Guardamos esta etiqueta para posible desambiguación de título
|
||||
if item_local.contentType == "movie":
|
||||
item_local.contentTitle = title
|
||||
size = scrapedsize.replace(".", ",")
|
||||
@@ -1126,8 +1133,8 @@ def listado_busqueda(item):
|
||||
#Agrega el item local a la lista itemlist
|
||||
itemlist.append(item_local.clone())
|
||||
|
||||
if not item.category_new: #Si este campo no existe es que viene de la primera pasada de una búsqueda global
|
||||
return itemlist #Retornamos sin pasar por la fase de maquillaje para ahorra tiempo
|
||||
#if not item.category_new: #Si este campo no existe es que viene de la primera pasada de una búsqueda global
|
||||
# return itemlist #Retornamos sin pasar por la fase de maquillaje para ahorra tiempo
|
||||
|
||||
#Pasamos a TMDB la lista completa Itemlist
|
||||
tmdb.set_infoLabels(itemlist, __modo_grafico__)
|
||||
@@ -1791,14 +1798,11 @@ def episodios(item):
|
||||
|
||||
def actualizar_titulos(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
|
||||
from platformcode import launcher
|
||||
|
||||
item = generictools.update_title(item) #Llamamos al método que actualiza el título con tmdb.find_and_set_infoLabels
|
||||
|
||||
#Volvemos a la siguiente acción en el canal
|
||||
return launcher.run(item)
|
||||
return item
|
||||
|
||||
|
||||
def search(item, texto):
|
||||
|
||||
@@ -85,7 +85,8 @@ def search(item, texto):
|
||||
def sub_search(item):
|
||||
logger.info()
|
||||
itemlist =[]
|
||||
data = httptools.downloadpage(item.url, add_referer=True).data
|
||||
headers = {'Referer':host, 'X-Requested-With': 'XMLHttpRequest'}
|
||||
data = httptools.downloadpage(item.url, headers=headers).data
|
||||
dict_data = jsontools.load(data)
|
||||
list =dict_data["data"] [item.type]
|
||||
if item.type == "m":
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# -*- Channel PoseidonHD -*-
|
||||
# -*- Channel PelisR -*-
|
||||
# -*- Created for Alfa-addon -*-
|
||||
# -*- By the Alfa Develop Group -*-
|
||||
|
||||
@@ -31,8 +31,8 @@ list_servers = [
|
||||
'rapidvideo'
|
||||
]
|
||||
|
||||
__comprueba_enlaces__ = config.get_setting('comprueba_enlaces', 'poseidonhd')
|
||||
__comprueba_enlaces_num__ = config.get_setting('comprueba_enlaces_num', 'poseidonhd')
|
||||
__comprueba_enlaces__ = config.get_setting('comprueba_enlaces', 'pelisr')
|
||||
__comprueba_enlaces_num__ = config.get_setting('comprueba_enlaces_num', 'pelisr')
|
||||
|
||||
host = 'https://pelisr.com/'
|
||||
|
||||
@@ -79,7 +79,6 @@ def get_source(url):
|
||||
def get_language(lang_data):
|
||||
logger.info()
|
||||
language = []
|
||||
logger.debug(lang_data)
|
||||
lang_list = scrapertools.find_multiple_matches(lang_data, '/flags/(.*?).png\)')
|
||||
for lang in lang_list:
|
||||
if lang == 'en':
|
||||
@@ -125,8 +124,6 @@ def list_all(item):
|
||||
itemlist = []
|
||||
|
||||
data = get_source(item.url)
|
||||
logger.debug(data)
|
||||
#return
|
||||
|
||||
if item.type == 'movies':
|
||||
patron = '<article id=post-\d+ class=item movies><div class=poster><img src=(.*?) alt=(.*?)>.*?quality>(.*?)'
|
||||
@@ -185,7 +182,6 @@ def seasons(item):
|
||||
itemlist=[]
|
||||
|
||||
data=get_source(item.url)
|
||||
logger.debug(data)
|
||||
patron='Temporada \d+'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
@@ -243,11 +239,9 @@ def findvideos(item):
|
||||
from lib import generictools
|
||||
itemlist = []
|
||||
data = get_source(item.url)
|
||||
logger.debug(data)
|
||||
patron = 'id=option-(\d+).*?rptss src=(.*?) frameborder'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
for option, scrapedurl in matches:
|
||||
logger.debug(scrapedurl)
|
||||
lang = scrapertools.find_single_match(data, 'href=#option-%s>.*?/flags/(.*?).png' % option)
|
||||
quality = ''
|
||||
if lang not in IDIOMAS:
|
||||
@@ -261,7 +255,6 @@ def findvideos(item):
|
||||
|
||||
elif 'wd=' in scrapedurl:
|
||||
new_id = scrapertools.find_single_match(scrapedurl, 'wd=(.*?)&')
|
||||
logger.debug('new_id %s' % new_id)
|
||||
new_id = new_id[::-1]
|
||||
new_url = 'https://pelisr.com/encri/?wr=%s' % new_id
|
||||
headers = {'Referer': scrapedurl}
|
||||
|
||||
@@ -2,10 +2,13 @@
|
||||
|
||||
import re
|
||||
import urlparse
|
||||
import urllib
|
||||
|
||||
from core import httptools
|
||||
from core import scrapertools
|
||||
from core import servertools
|
||||
from core import tmdb
|
||||
from core import jsontools
|
||||
from core.item import Item
|
||||
from platformcode import config, logger
|
||||
|
||||
@@ -316,40 +319,33 @@ def lasmas(item):
|
||||
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
|
||||
return itemlist
|
||||
|
||||
def get_source(url):
|
||||
logger.info()
|
||||
data = httptools.downloadpage(url).data
|
||||
data = re.sub(r'"|\n|\r|\t| |<br>|\s{2,}', "", data)
|
||||
return data
|
||||
|
||||
def get_link(data):
|
||||
new_url = scrapertools.find_single_match(data, '(?:IFRAME|iframe) src=(.*?) scrolling')
|
||||
return new_url
|
||||
|
||||
def findvideos(item):
|
||||
logger.info()
|
||||
host = 'https://www.locopelis.tv/'
|
||||
itemlist = []
|
||||
data = httptools.downloadpage(item.url).data
|
||||
|
||||
anterior = scrapertools.find_single_match(data, '<a class="left" href="([^"]+)" title="Cap.tulo Anterior"></a>')
|
||||
siguiente = scrapertools.find_single_match(data, '<a class="right" href="([^"]+)" title="Cap.tulo Siguiente"></a>')
|
||||
titulo = scrapertools.find_single_match(data,
|
||||
'<h1 class="tithd bold fs18px lnht30px ico_b pdtop10px">([^<]+)</h1> ')
|
||||
existe = scrapertools.find_single_match(data, '<center>La pel.cula que quieres ver no existe.</center>')
|
||||
|
||||
from core import servertools
|
||||
itemlist.extend(servertools.find_video_items(data=data))
|
||||
for videoitem in itemlist:
|
||||
if 'youtube' in videoitem.url:
|
||||
itemlist.remove(videoitem)
|
||||
for videoitem in itemlist:
|
||||
videoitem.channel = item.channel
|
||||
videoitem.action = "play"
|
||||
videoitem.folder = False
|
||||
videoitem.fanart = item.fanart
|
||||
videoitem.title = titulo + " " + videoitem.server
|
||||
if item.extra2 != 'todos':
|
||||
data = httptools.downloadpage(anterior).data
|
||||
existe = scrapertools.find_single_match(data, '<center>La pel.cula que quieres ver no existe.</center>')
|
||||
if not existe:
|
||||
itemlist.append(Item(channel=item.channel, action="findvideos", title='Capitulo Anterior', url=anterior,
|
||||
thumbnail='https://s1.postimg.cc/dbq8gvldb/anterior.png', folder=True))
|
||||
|
||||
data = httptools.downloadpage(siguiente).data
|
||||
existe = scrapertools.find_single_match(data, '<center>La pel.cula que quieres ver no existe.</center>')
|
||||
if not existe:
|
||||
itemlist.append(Item(channel=item.channel, action="findvideos", title='Capitulo Siguiente', url=siguiente,
|
||||
thumbnail='https://s16.postimg.cc/9okdu7hhx/siguiente.png', folder=True))
|
||||
new_url = get_link(get_source(item.url))
|
||||
new_url = get_link(get_source(new_url))
|
||||
video_id = scrapertools.find_single_match(new_url, 'http.*?h=(\w+)')
|
||||
new_url = '%s%s' % (host, 'playeropstream/api.php')
|
||||
post = {'h': video_id}
|
||||
post = urllib.urlencode(post)
|
||||
data = httptools.downloadpage(new_url, post=post).data
|
||||
json_data = jsontools.load(data)
|
||||
url = json_data['url']
|
||||
server = servertools.get_server_from_url(url)
|
||||
title = '%s' % server
|
||||
itemlist.append(Item(channel=item.channel, title=title, url=url, action='play',
|
||||
server=server, infoLabels=item.infoLabels))
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
@@ -23,38 +23,38 @@ def mainlist(item):
|
||||
item.channel = "search"
|
||||
|
||||
itemlist = []
|
||||
context = [{"title": "Elegir canales incluidos", "action": "setting_channel", "channel": item.channel}]
|
||||
itemlist.append(Item(channel=item.channel, action="sub_menu", title="Buscar en canales", context=context,
|
||||
context = [{"title": config.get_localized_string(60412), "action": "setting_channel", "channel": item.channel}]
|
||||
itemlist.append(Item(channel=item.channel, action="sub_menu", title=config.get_localized_string(70305), context=context,
|
||||
thumbnail=get_thumb("search.png")))
|
||||
|
||||
itemlist.append(Item(channel=item.channel, action='genres_menu', title='Películas por Generos', type='movie',
|
||||
itemlist.append(Item(channel=item.channel, action='genres_menu', title=config.get_localized_string(70306), type='movie',
|
||||
thumbnail=get_thumb("genres.png")))
|
||||
|
||||
itemlist.append (Item(channel=item.channel, action='discover_list', title='Películas mas populares',
|
||||
itemlist.append (Item(channel=item.channel, action='discover_list', title=config.get_localized_string(70307),
|
||||
context=context, search_type='list', list_type='movie/popular',
|
||||
thumbnail=get_thumb("popular.png")))
|
||||
|
||||
itemlist.append(Item(channel=item.channel, action='discover_list', title='Películas mejor valoradas',
|
||||
itemlist.append(Item(channel=item.channel, action='discover_list', title=config.get_localized_string(70308),
|
||||
context=context, search_type='list', list_type='movie/top_rated',
|
||||
thumbnail=get_thumb("top_rated.png")))
|
||||
|
||||
itemlist.append(
|
||||
Item(channel=item.channel, action='discover_list', title='Películas Ahora en cines', context=context,
|
||||
Item(channel=item.channel, action='discover_list', title=config.get_localized_string(70309), context=context,
|
||||
search_type='list', list_type='movie/now_playing',
|
||||
thumbnail=get_thumb("now_playing.png")))
|
||||
|
||||
itemlist.append(Item(channel=item.channel, action='genres_menu', title='Series por Generos', type='tv',
|
||||
itemlist.append(Item(channel=item.channel, action='genres_menu', title=config.get_localized_string(70310), type='tv',
|
||||
thumbnail=get_thumb("genres.png")))
|
||||
|
||||
itemlist.append(
|
||||
Item(channel=item.channel, action='discover_list', title='Series mas populares', context=context,
|
||||
Item(channel=item.channel, action='discover_list', title=config.get_localized_string(70311), context=context,
|
||||
search_type='list',list_type='tv/popular', thumbnail=get_thumb("popular.png")))
|
||||
|
||||
itemlist.append(Item(channel=item.channel, action='discover_list', title='Series en emisión', context=context,
|
||||
itemlist.append(Item(channel=item.channel, action='discover_list', title=config.get_localized_string(70312), context=context,
|
||||
search_type='list', list_type='tv/on_the_air', thumbnail=get_thumb("on_the_air.png")))
|
||||
|
||||
|
||||
itemlist.append(Item(channel=item.channel, action='discover_list', title='Series mejor valoradas', context=context,
|
||||
itemlist.append(Item(channel=item.channel, action='discover_list', title=config.get_localized_string(70313), context=context,
|
||||
search_type='list', list_type='tv/top_rated', thumbnail=get_thumb("top_rated.png")))
|
||||
|
||||
|
||||
@@ -619,7 +619,7 @@ def discover_list(item):
|
||||
#if not 'similar' in item.list_type:
|
||||
# itemlist.append(item.clone(title='Pagina Siguente', page=next_page))
|
||||
#else:
|
||||
itemlist.append(Item(channel=item.channel, action='discover_list', title='Pagina Siguente',
|
||||
itemlist.append(Item(channel=item.channel, action='discover_list', title=config.get_localized_string(70065),
|
||||
search_type=item.search_type, list_type=item.list_type, type=item.type, page=next_page))
|
||||
|
||||
return itemlist
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
"thumbnail": "https://s22.postimg.cc/nucz720sx/image.png",
|
||||
"banner": "",
|
||||
"categories": [
|
||||
"tvshow"
|
||||
"tvshow",
|
||||
"vos"
|
||||
],
|
||||
"settings": [
|
||||
{
|
||||
|
||||
@@ -296,16 +296,8 @@ def submenu_tools(item):
|
||||
#Herramientas de testeo masivo
|
||||
import os
|
||||
test_path = os.path.join(config.get_runtime_path(), "channels/test.py")
|
||||
|
||||
if filetools.exists(test_path):
|
||||
itemlist.append(Item(channel=CHANNELNAME, title="Herramientas de Testeo masivo", action="", folder=False,
|
||||
thumbnail=get_thumb("channels.png")))
|
||||
itemlist.append(Item(title='- Testear canales ...', channel="test", action="channel_test_selected"))
|
||||
itemlist.append(Item(title='- Testear servidores ...', channel="test", action="server_test_selected"))
|
||||
itemlist.append(Item(title='- Testear todos los canales!', channel="test", action="channel_test_all"))
|
||||
itemlist.append(Item(title='- Testear todos los servidores!', channel="test", action="server_test_all"))
|
||||
itemlist.append(Item(title='- Testear novedades!', channel="test", action="news_test_all"))
|
||||
itemlist.append(Item(title='- Upload tests to web!', channel="test", action="web_update_tests"))
|
||||
itemlist.append(Item(title='Testear canales y servidores ...', channel="test", action="mainlist"))
|
||||
itemlist.append(
|
||||
Item(channel=CHANNELNAME, action="", title="", folder=False, thumbnail=get_thumb("setting_0.png")))
|
||||
|
||||
@@ -335,6 +327,9 @@ def conf_tools(item):
|
||||
|
||||
# Activar o desactivar canales
|
||||
if item.extra == "channels_onoff":
|
||||
if config.get_platform(True)['num_version'] >= 17.0: # A partir de Kodi 16 se puede usar multiselect, y de 17 con preselect
|
||||
return channels_onoff(item)
|
||||
|
||||
import channelselector
|
||||
from core import channeltools
|
||||
|
||||
@@ -537,6 +532,60 @@ def conf_tools(item):
|
||||
return itemlist
|
||||
|
||||
|
||||
def channels_onoff(item):
|
||||
import channelselector, xbmcgui
|
||||
from core import channeltools
|
||||
|
||||
# Cargar lista de opciones
|
||||
# ------------------------
|
||||
lista = []; ids = []
|
||||
channels_list = channelselector.filterchannels('allchannelstatus')
|
||||
for channel in channels_list:
|
||||
channel_parameters = channeltools.get_channel_parameters(channel.channel)
|
||||
lbl = '%s' % channel_parameters['language']
|
||||
# ~ lbl += ' %s' % [config.get_localized_category(categ) for categ in channel_parameters['categories']]
|
||||
lbl += ' %s' % ', '.join(config.get_localized_category(categ) for categ in channel_parameters['categories'])
|
||||
|
||||
it = xbmcgui.ListItem(channel.title, lbl)
|
||||
it.setArt({ 'thumb': channel.thumbnail, 'fanart': channel.fanart })
|
||||
lista.append(it)
|
||||
ids.append(channel.channel)
|
||||
|
||||
# Diálogo para pre-seleccionar
|
||||
# ----------------------------
|
||||
preselecciones = ['Pre-seleccionar activados actualmente', 'Pre-seleccionar todos', 'No pre-seleccionar ninguno']
|
||||
ret = platformtools.dialog_select(config.get_localized_string(60545), preselecciones)
|
||||
if ret == -1: return False # pedido cancel
|
||||
if ret == 2: preselect = []
|
||||
elif ret == 1: preselect = range(len(ids))
|
||||
else:
|
||||
preselect = []
|
||||
for i, canal in enumerate(ids):
|
||||
channel_status = config.get_setting('enabled', canal)
|
||||
if channel_status is None: channel_status = True
|
||||
if channel_status:
|
||||
preselect.append(i)
|
||||
|
||||
# Diálogo para seleccionar
|
||||
# ------------------------
|
||||
ret = xbmcgui.Dialog().multiselect(config.get_localized_string(60545), lista, preselect=preselect, useDetails=True)
|
||||
if ret == None: return False # pedido cancel
|
||||
seleccionados = [ids[i] for i in ret]
|
||||
|
||||
# Guardar cambios en canales activados
|
||||
# ------------------------------------
|
||||
for canal in ids:
|
||||
channel_status = config.get_setting('enabled', canal)
|
||||
if channel_status is None: channel_status = True
|
||||
|
||||
if channel_status and canal not in seleccionados:
|
||||
config.set_setting('enabled', False, canal)
|
||||
elif not channel_status and canal in seleccionados:
|
||||
config.set_setting('enabled', True, canal)
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def channel_status(item, dict_values):
|
||||
try:
|
||||
for k in dict_values:
|
||||
|
||||
54
plugin.video.alfa/channels/sonpelishd.json
Normal file
54
plugin.video.alfa/channels/sonpelishd.json
Normal file
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"id": "sonpelishd",
|
||||
"name": "SonPelisHD",
|
||||
"active": true,
|
||||
"adult": false,
|
||||
"language": ["lat"],
|
||||
"thumbnail": "https://sonpelishd.com/wp-content/uploads/2017/02/logo-web-sphd-4.png",
|
||||
"banner": "",
|
||||
"categories": [
|
||||
"movie"
|
||||
],
|
||||
"settings": [
|
||||
{
|
||||
"id": "include_in_global_search",
|
||||
"type": "bool",
|
||||
"label": "Incluir en busqueda global",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "include_in_newest_latino",
|
||||
"type": "bool",
|
||||
"label": "Incluir en Novedades - Latino",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "include_in_newest_peliculas",
|
||||
"type": "bool",
|
||||
"label": "Incluir en Novedades - Peliculas",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "include_in_newest_infantiles",
|
||||
"type": "bool",
|
||||
"label": "Incluir en Novedades - Infantiles",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "include_in_newest_terror",
|
||||
"type": "bool",
|
||||
"label": "Incluir en Novedades - Terror",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
}
|
||||
]
|
||||
}
|
||||
353
plugin.video.alfa/channels/sonpelishd.py
Normal file
353
plugin.video.alfa/channels/sonpelishd.py
Normal file
@@ -0,0 +1,353 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# -*- Channel SonPelisHD -*-
|
||||
# -*- Created for Alfa-addon -*-
|
||||
# -*- By the Alfa Develop Group -*-
|
||||
|
||||
import re
|
||||
|
||||
from core import httptools
|
||||
from core import scrapertools
|
||||
from core import servertools
|
||||
from core import tmdb
|
||||
from core.item import Item
|
||||
from platformcode import config, logger
|
||||
from channelselector import get_thumb
|
||||
|
||||
host = 'https://sonpelishd.com/'
|
||||
|
||||
|
||||
def mainlist(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
|
||||
itemlist.append(item.clone(title="Peliculas",
|
||||
action="menu_peliculas",
|
||||
thumbnail=get_thumb('movies', auto=True),
|
||||
))
|
||||
|
||||
# itemlist.append(item.clone(title="Series",
|
||||
# action="menu_series",
|
||||
# thumbnail=get_thumb('tvshows', auto=True),
|
||||
# ))
|
||||
|
||||
itemlist.append(item.clone(title="Buscar", action="search",
|
||||
thumbnail=get_thumb('search', auto=True),
|
||||
url=host + '?s='
|
||||
))
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def menu_peliculas(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
|
||||
itemlist.append(item.clone(title="Todas",
|
||||
action="list_all",
|
||||
thumbnail=get_thumb('all', auto=True),
|
||||
url=host + 'page/1/?s'
|
||||
))
|
||||
|
||||
itemlist.append(item.clone(title="Generos",
|
||||
action="seccion",
|
||||
url=host + 'page/1/?s',
|
||||
thumbnail=get_thumb('genres', auto=True),
|
||||
seccion='generos-pelicula'
|
||||
))
|
||||
|
||||
itemlist.append(item.clone(title="Por Año",
|
||||
action="seccion",
|
||||
url=host + 'page/1/?s',
|
||||
thumbnail=get_thumb('year', auto=True),
|
||||
seccion='fecha-estreno'
|
||||
))
|
||||
|
||||
itemlist.append(item.clone(title="Calidad",
|
||||
action="seccion",
|
||||
url=host + 'page/1/?s',
|
||||
thumbnail=get_thumb('quality', auto=True),
|
||||
seccion='calidad'
|
||||
))
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def menu_series(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
|
||||
itemlist.append(item.clone(title="Todas",
|
||||
action="list_all", thumbnail=get_thumb('all', auto=True),
|
||||
url=host + 'series/page/1/',
|
||||
))
|
||||
|
||||
itemlist.append(item.clone(title="Generos",
|
||||
action="seccion",
|
||||
url=host + 'series/page/1/',
|
||||
thumbnail=get_thumb('genres', auto=True),
|
||||
seccion='generos-serie'
|
||||
))
|
||||
|
||||
itemlist.append(item.clone(title="Por Año",
|
||||
action="seccion",
|
||||
url=host + 'series/page/1/',
|
||||
thumbnail=get_thumb('year', auto=True),
|
||||
seccion='series-lanzamiento'
|
||||
))
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def list_all(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
data = get_source(item.url)
|
||||
patron = 'class=item.*?<a href=(.*?)><div class=image.*?<img src=(.*?) alt=(.*?) (?:\(\d{4}|width).*?'
|
||||
patron += 'fixyear><h2>.*?<\/h2>.*?<span class=year>(.*?)<\/span><\/div>(.*?)<\/div>'
|
||||
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedurl, scrapedthumbnail, scrapedtitle, scrapedyear, scrapedquality in matches:
|
||||
url = scrapedurl
|
||||
action = 'findvideos'
|
||||
thumbnail = scrapedthumbnail
|
||||
plot = ''
|
||||
contentSerieName = ''
|
||||
contentTitle = scrapedtitle
|
||||
title = contentTitle
|
||||
quality = 'Full HD'
|
||||
if scrapedquality != '':
|
||||
quality = scrapertools.find_single_match(scrapedquality, 'calidad2>(.*?)<')
|
||||
title = contentTitle + ' (%s)' % quality
|
||||
|
||||
year = scrapedyear
|
||||
|
||||
if 'series' in item.url or 'series' in url:
|
||||
action = 'seasons'
|
||||
contentSerieName = contentTitle
|
||||
quality = ''
|
||||
new_item = Item(channel=item.channel,
|
||||
action=action,
|
||||
title=title,
|
||||
url=url,
|
||||
thumbnail=thumbnail,
|
||||
plot=plot,
|
||||
quality=quality,
|
||||
infoLabels={'year': year}
|
||||
)
|
||||
if 'series' not in item.url:
|
||||
new_item.contentTitle = contentTitle
|
||||
else:
|
||||
new_item.contentSerieName = contentSerieName
|
||||
itemlist.append(new_item)
|
||||
|
||||
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
|
||||
# Paginacion
|
||||
|
||||
if itemlist != []:
|
||||
next_page = scrapertools.find_single_match(data,
|
||||
'<div class=pag_b><a href=(.*?)>Siguiente</a>')
|
||||
if next_page != '':
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
action="list_all",
|
||||
title='Siguiente >>>',
|
||||
url=next_page,
|
||||
))
|
||||
return itemlist
|
||||
|
||||
|
||||
def seccion(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
data = get_source(item.url)
|
||||
if item.seccion == 'generos-pelicula':
|
||||
patron = '<li class=cat-item cat-item-.*?><a href=(.*?)>(.*?<\/a> <span>.*?)<\/span><\/li>'
|
||||
elif item.seccion == 'generos-serie':
|
||||
patron = '<li class=cat-item cat-item-.*?><a href=(.*?\/series-genero\/.*?)>(.*?<\/a> <span>.*?)<\/span><\/li>'
|
||||
elif item.seccion in ['fecha-estreno', 'series-lanzamiento']:
|
||||
patron = '<li><a href=https://sonpelishd.com/fecha-estreno(.*?)>(.*?)<\/a>'
|
||||
elif item.seccion == 'calidad':
|
||||
patron = '<li><a href=https://sonpelishd.com/calidad(.*?)>(.*?)<\/a>'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
for scrapedurl, scrapedtitle in matches:
|
||||
thumbnail = ''
|
||||
if 'generos' in item.seccion:
|
||||
cantidad = re.sub(r'.*?<\/a> <span>', '', scrapedtitle)
|
||||
title = re.sub(r'<\/a> <span>|\d|\.', '', scrapedtitle)
|
||||
url = scrapedurl
|
||||
title = scrapertools.decodeHtmlentities(title)
|
||||
title = title + ' (%s)' % cantidad
|
||||
elif item.seccion in ['series-lanzamiento', 'fecha-estreno', 'calidad']:
|
||||
title = scrapedtitle
|
||||
url = 'https://sonpelishd.com/%s%s' % (item.seccion, scrapedurl)
|
||||
|
||||
itemlist.append(item.clone(action='list_all',
|
||||
title=title,
|
||||
url=url,
|
||||
thumbnail=thumbnail
|
||||
))
|
||||
return itemlist
|
||||
|
||||
|
||||
def seasons(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
|
||||
data = get_source(item.url)
|
||||
patron = '<span class=title>.*?- Temporada (.*?)<\/span>'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for temporada in matches:
|
||||
title = 'Temporada %s' % temporada
|
||||
contentSeasonNumber = temporada
|
||||
item.infoLabels['season'] = contentSeasonNumber
|
||||
itemlist.append(item.clone(action='episodiosxtemp',
|
||||
title=title,
|
||||
contentSeasonNumber=contentSeasonNumber
|
||||
))
|
||||
|
||||
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
|
||||
|
||||
if config.get_videolibrary_support() and len(itemlist) > 0:
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
title='[COLOR yellow]Añadir esta serie a la videoteca[/COLOR]',
|
||||
url=item.url,
|
||||
action="add_serie_to_library",
|
||||
extra="episodios",
|
||||
contentSerieName=item.contentSerieName,
|
||||
contentSeasonNumber=contentSeasonNumber
|
||||
))
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def episodios(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
data = get_source(item.url)
|
||||
|
||||
patron = '<li><div class=numerando>(\d+).*?x.*?(\d+)<\/div>.*?<a href=(.*?)> (.*?)<\/a>.*?<\/i>'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedtemp, scrapedep, scrapedurl, scrapedtitle in matches:
|
||||
temporada = scrapedtemp
|
||||
title = temporada + 'x%s %s' % (scrapedep, scrapedtitle)
|
||||
url = scrapedurl
|
||||
contentEpisodeNumber = scrapedep
|
||||
item.infoLabels['episode'] = contentEpisodeNumber
|
||||
itemlist.append(item.clone(action='findvideos',
|
||||
title=title,
|
||||
url=url,
|
||||
contentEpisodeNumber=contentEpisodeNumber,
|
||||
))
|
||||
return itemlist
|
||||
|
||||
|
||||
def episodiosxtemp(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
data = get_source(item.url)
|
||||
temporada = item.contentSeasonNumber
|
||||
patron = '<li><div class=numerando>%s.*?x.*?(\d+)<\/div>.*?<a href=(.*?)> (.*?)<\/a>.*?<\/i>' % temporada
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedep, scrapedurl, scrapedtitle in matches:
|
||||
title = temporada + 'x%s %s' % (scrapedep, scrapedtitle)
|
||||
url = scrapedurl
|
||||
contentEpisodeNumber = scrapedep
|
||||
item.infoLabels['episode'] = contentEpisodeNumber
|
||||
itemlist.append(item.clone(action='findvideos',
|
||||
title=title,
|
||||
url=url,
|
||||
contentEpisodeNumber=contentEpisodeNumber,
|
||||
))
|
||||
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
|
||||
return itemlist
|
||||
|
||||
|
||||
def findvideos(item):
|
||||
logger.info()
|
||||
url_list = []
|
||||
itemlist = []
|
||||
duplicados = []
|
||||
data = get_source(item.url)
|
||||
src = data
|
||||
patron = '<iframe src=(.*?) scrolling'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for url in matches:
|
||||
lang = 'LAT'
|
||||
quality = item.quality
|
||||
title = '[%s] [%s]'
|
||||
if url != '':
|
||||
itemlist.append(item.clone(title=title, url=url, action='play', language=lang))
|
||||
|
||||
itemlist = servertools.get_servers_itemlist(itemlist, lambda i: i.title % (i.server, i.language))
|
||||
|
||||
if item.infoLabels['mediatype'] == 'movie':
|
||||
if config.get_videolibrary_support() and len(itemlist) > 0 and item.extra != 'findvideos':
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
title='[COLOR yellow]Añadir esta pelicula a la videoteca[/COLOR]',
|
||||
url=item.url,
|
||||
action="add_pelicula_to_library",
|
||||
extra="findvideos",
|
||||
contentTitle=item.contentTitle
|
||||
))
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def search(item, texto):
|
||||
logger.info()
|
||||
texto = texto.replace(" ", "+")
|
||||
item.url = item.url + texto
|
||||
try:
|
||||
if texto != '':
|
||||
return list_all(item)
|
||||
else:
|
||||
return []
|
||||
except:
|
||||
import sys
|
||||
for line in sys.exc_info():
|
||||
logger.error("%s" % line)
|
||||
return []
|
||||
|
||||
|
||||
def newest(categoria):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
item = Item()
|
||||
try:
|
||||
if categoria in ['peliculas', 'latino']:
|
||||
item.url = host + 'page/1/?s'
|
||||
|
||||
elif categoria == 'infantiles':
|
||||
item.url = host + 'category/animacion/'
|
||||
|
||||
elif categoria == 'terror':
|
||||
item.url = host + 'category/terror/'
|
||||
|
||||
itemlist = list_all(item)
|
||||
if itemlist[-1].title == 'Siguiente >>>':
|
||||
itemlist.pop()
|
||||
except:
|
||||
import sys
|
||||
for line in sys.exc_info():
|
||||
logger.error("{0}".format(line))
|
||||
return []
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def get_source(url):
|
||||
logger.info()
|
||||
data = httptools.downloadpage(url).data
|
||||
data = re.sub(r'"|\n|\r|\t| |<br>|\s{2,}', "", data)
|
||||
return data
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"id": "zentorrents",
|
||||
"name": "Zentorrent",
|
||||
"active": true,
|
||||
"active": false,
|
||||
"adult": false,
|
||||
"language": ["cast"],
|
||||
"banner": "zentorrents.png",
|
||||
|
||||
@@ -63,11 +63,6 @@ def getchanneltypes(view="thumb_"):
|
||||
|
||||
# Lista de categorias
|
||||
channel_types = ["movie", "tvshow", "anime", "documentary", "vos", "direct", "torrent"]
|
||||
dict_types_lang = {'movie': config.get_localized_string(30122), 'tvshow': config.get_localized_string(30123),
|
||||
'anime': config.get_localized_string(30124), 'documentary': config.get_localized_string(30125),
|
||||
'vos': config.get_localized_string(30136), 'adult': config.get_localized_string(30126),
|
||||
'direct': config.get_localized_string(30137)}
|
||||
|
||||
if config.get_setting("adult_mode") != 0:
|
||||
channel_types.append("adult")
|
||||
|
||||
@@ -83,7 +78,7 @@ def getchanneltypes(view="thumb_"):
|
||||
|
||||
for channel_type in channel_types:
|
||||
logger.info("channel_type=%s" % channel_type)
|
||||
title = dict_types_lang.get(channel_type, channel_type)
|
||||
title = config.get_localized_category(channel_type)
|
||||
itemlist.append(Item(title=title, channel="channelselector", action="filterchannels", category=title,
|
||||
channel_type=channel_type, viewmode="thumbnails",
|
||||
thumbnail=get_thumb("channels_%s.png" % channel_type, view)))
|
||||
|
||||
@@ -1541,8 +1541,15 @@ class Tmdb(object):
|
||||
else:
|
||||
ret_infoLabels['plot'] = self.get_sinopsis()
|
||||
|
||||
elif k == 'runtime':
|
||||
elif k == 'runtime': #Duration for movies
|
||||
ret_infoLabels['duration'] = int(v) * 60
|
||||
|
||||
elif k == 'episode_run_time': #Duration for episodes
|
||||
try:
|
||||
for v_alt in v: #It comes as a list (?!)
|
||||
ret_infoLabels['duration'] = int(v_alt) * 60
|
||||
except:
|
||||
pass
|
||||
|
||||
elif k == 'release_date':
|
||||
ret_infoLabels['year'] = int(v[:4])
|
||||
|
||||
@@ -73,7 +73,7 @@ def find_and_set_infoLabels(item):
|
||||
|
||||
p_dialog = None
|
||||
if not item.contentSeason:
|
||||
p_dialog = platformtools.dialog_progress_bg("Buscando información de la serie", "Espere por favor...")
|
||||
p_dialog = platformtools.dialog_progress_bg(config.get_localized_string(60296), config.get_localized_string(60293))
|
||||
|
||||
global otvdb_global
|
||||
tvdb_result = None
|
||||
@@ -95,17 +95,17 @@ def find_and_set_infoLabels(item):
|
||||
otvdb_global = Tvdb(tvdb_id=item.infoLabels['tvdb_id'])
|
||||
|
||||
if not item.contentSeason:
|
||||
p_dialog.update(50, "Buscando información de la serie", "Obteniendo resultados...")
|
||||
p_dialog.update(50, config.get_localized_string(60296), config.get_localized_string(60295))
|
||||
results, info_load = otvdb_global.get_list_results()
|
||||
logger.debug("results es %s" % results)
|
||||
|
||||
if not item.contentSeason:
|
||||
p_dialog.update(100, "Buscando información de la serie", "Encontrados %s posibles coincidencias" % len(results))
|
||||
p_dialog.update(100, config.get_localized_string(60296), config.get_localized_string(60297) % len(results))
|
||||
p_dialog.close()
|
||||
|
||||
if len(results) > 1:
|
||||
tvdb_result = platformtools.show_video_info(results, item=item, scraper=Tvdb,
|
||||
caption="[%s]: Selecciona la serie correcta" % title)
|
||||
caption=config.get_localized_string(60298) % title)
|
||||
elif len(results) > 0:
|
||||
tvdb_result = results[0]
|
||||
|
||||
@@ -344,8 +344,8 @@ class Tvdb:
|
||||
self.__get_by_id(kwargs.get('tvdb_id', ''))
|
||||
if not self.list_results and config.get_setting("tvdb_retry_eng", "videolibrary"):
|
||||
from platformcode import platformtools
|
||||
platformtools.dialog_notification("No se ha encontrado en idioma '%s'" % DEFAULT_LANG,
|
||||
"Se busca en idioma 'en'", sound=False)
|
||||
platformtools.dialog_notification(config.get_localized_string(60299) % DEFAULT_LANG,
|
||||
config.get_localized_string(60302), sound=False)
|
||||
self.__get_by_id(kwargs.get('tvdb_id', ''), "en")
|
||||
self.lang = "en"
|
||||
|
||||
@@ -354,8 +354,8 @@ class Tvdb:
|
||||
self.__search(kwargs.get('search', ''), kwargs.get('imdb_id', ''), kwargs.get('zap2it_id', ''))
|
||||
if not self.list_results and config.get_setting("tvdb_retry_eng", "videolibrary"):
|
||||
from platformcode import platformtools
|
||||
platformtools.dialog_notification("No se ha encontrado en idioma '%s'" % DEFAULT_LANG,
|
||||
"Se busca en idioma 'en'")
|
||||
platformtools.dialog_notification(config.get_localized_string(60299) % DEFAULT_LANG,
|
||||
config.get_localized_string(60302))
|
||||
self.__search(kwargs.get('search', ''), kwargs.get('imdb_id', ''), kwargs.get('zap2it_id', ''), "en")
|
||||
self.lang = "en"
|
||||
|
||||
@@ -365,7 +365,7 @@ class Tvdb:
|
||||
buscando = kwargs.get('tvdb_id', '')
|
||||
else:
|
||||
buscando = kwargs.get('search', '')
|
||||
msg = "La busqueda de %s no dio resultados." % buscando
|
||||
msg = config.get_localized_string(70266) % buscando
|
||||
logger.debug(msg)
|
||||
|
||||
@classmethod
|
||||
|
||||
@@ -545,9 +545,9 @@ def add_movie(item):
|
||||
#Si se cancela la segunda pantalla, la variable "scraper_return" estará en False. El usuario no quiere seguir
|
||||
|
||||
from lib import generictools
|
||||
generictools.update_title(item) #Llamamos al método que actualiza el título con tmdb.find_and_set_infoLabels
|
||||
if item.tmdb_stat:
|
||||
del item.tmdb_stat #Limpiamos el status para que no se grabe en la Videoteca
|
||||
item = generictools.update_title(item) #Llamamos al método que actualiza el título con tmdb.find_and_set_infoLabels
|
||||
#if item.tmdb_stat:
|
||||
# del item.tmdb_stat #Limpiamos el status para que no se grabe en la Videoteca
|
||||
|
||||
new_item = item.clone(action="findvideos")
|
||||
insertados, sobreescritos, fallidos = save_movie(new_item)
|
||||
@@ -613,9 +613,9 @@ def add_tvshow(item, channel=None):
|
||||
#Si se cancela la segunda pantalla, la variable "scraper_return" estará en False. El usuario no quiere seguir
|
||||
|
||||
from lib import generictools
|
||||
generictools.update_title(item) #Llamamos al método que actualiza el título con tmdb.find_and_set_infoLabels
|
||||
if item.tmdb_stat:
|
||||
del item.tmdb_stat #Limpiamos el status para que no se grabe en la Videoteca
|
||||
item = generictools.update_title(item) #Llamamos al método que actualiza el título con tmdb.find_and_set_infoLabels
|
||||
#if item.tmdb_stat:
|
||||
# del item.tmdb_stat #Limpiamos el status para que no se grabe en la Videoteca
|
||||
|
||||
# Obtiene el listado de episodios
|
||||
itemlist = getattr(channel, item.action)(item)
|
||||
|
||||
@@ -20,7 +20,7 @@ from core import servertools
|
||||
from core import channeltools
|
||||
from core import filetools
|
||||
from core.item import Item
|
||||
from platformcode import config, logger
|
||||
from platformcode import config, logger, platformtools
|
||||
from core import tmdb
|
||||
|
||||
channel_py = "newpct1"
|
||||
@@ -69,25 +69,42 @@ def update_title(item):
|
||||
if item.from_action:
|
||||
item.action = item.from_action
|
||||
del item.from_action
|
||||
if item.from_title:
|
||||
item.title = item.from_title
|
||||
del item.from_title
|
||||
elif item.contentType != "movie":
|
||||
item.add_videolibrary = True #Estamos Añadiendo a la Videoteca. Indicador para control de uso de los Canales
|
||||
if item.contentType == "movie":
|
||||
if item.channel == channel_py: #Si es una peli de NewPct1, ponemos el nombre del clone
|
||||
item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/')
|
||||
if item.channel_host: #Borramos ya el indicador para que no se guarde en la Videoteca
|
||||
del item.channel_host
|
||||
if item.contentTitle:
|
||||
item.contentTitle = re.sub(r' -%s-' % item.category, '', item.contentTitle)
|
||||
item.title = re.sub(r' -%s-' % item.category, '', item.title)
|
||||
if item.from_update:
|
||||
if item.from_title_tmdb: #Si se salvó el título del contenido devuelto por TMDB, se restaura.
|
||||
item.title = item.from_title_tmdb
|
||||
else:
|
||||
item.add_videolibrary = True #Estamos Añadiendo a la Videoteca. Indicador para control de uso de los Canales
|
||||
if item.add_videolibrary:
|
||||
if item.contentType == "movie":
|
||||
if item.from_title_tmdb: #Si se salvó el título del contenido devuelto por TMDB, se restaura.
|
||||
item.title = item.from_title_tmdb
|
||||
del item.add_videolibrary
|
||||
if item.channel_host: #Borramos ya el indicador para que no se guarde en la Videoteca
|
||||
del item.channel_host
|
||||
if item.contentTitle:
|
||||
item.contentTitle = re.sub(r' -%s-' % item.category, '', item.contentTitle)
|
||||
item.title = re.sub(r' -%s-' % item.category, '', item.title)
|
||||
if item.contentType == 'movie':
|
||||
from_title_tmdb = item.contentTitle
|
||||
else:
|
||||
from_title_tmdb = item.contentSerieName
|
||||
|
||||
#Sólo ejecutamos este código si no se ha hecho antes en el Canal. Por ejemplo, si se ha llamado desde Episodios,
|
||||
#Sólo ejecutamos este código si no se ha hecho antes en el Canal. Por ejemplo, si se ha llamado desde Episodios o Findvideos,
|
||||
#ya no se ejecutará al Añadia a Videoteca, aunque desde el canal se podrá llamar tantas veces como se quiera,
|
||||
#o hasta que encuentre un título no ambiguo
|
||||
if not item.tmdb_stat:
|
||||
if item.tmdb_stat:
|
||||
if item.from_title_tmdb: del item.from_title_tmdb
|
||||
if item.from_title: del item.from_title
|
||||
item.from_update = True
|
||||
del item.from_update
|
||||
if item.contentType == "movie":
|
||||
if item.channel == channel_py: #Si es una peli de NewPct1, ponemos el nombre del clone
|
||||
item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/')
|
||||
else:
|
||||
new_item = item.clone() #Salvamos el Item inicial para restaurarlo si el usuario cancela
|
||||
if item.contentType == "movie":
|
||||
if item.channel == channel_py: #Si es una peli de NewPct1, ponemos el nombre del clone
|
||||
item.channel = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/')
|
||||
#Borramos los IDs y el año para forzar a TMDB que nos pregunte
|
||||
if item.infoLabels['tmdb_id'] or item.infoLabels['tmdb_id'] == None: item.infoLabels['tmdb_id'] = ''
|
||||
if item.infoLabels['tvdb_id'] or item.infoLabels['tvdb_id'] == None: item.infoLabels['tvdb_id'] = ''
|
||||
@@ -95,6 +112,16 @@ def update_title(item):
|
||||
if item.infoLabels['season']: del item.infoLabels['season'] #Funciona mal con num. de Temporada. Luego lo restauramos
|
||||
item.infoLabels['year'] = '-'
|
||||
|
||||
if item.from_title:
|
||||
if item.from_title_tmdb:
|
||||
if scrapertools.find_single_match(item.from_title_tmdb, '^(?:\[COLOR \w+\])?(.*?)(?:\[)'):
|
||||
from_title_tmdb = scrapertools.find_single_match(item.from_title_tmdb, '^(?:\[COLOR \w+\])?(.*?)(?:\[)').strip()
|
||||
item.title = item.title.replace(from_title_tmdb, item.from_title)
|
||||
item.infoLabels['title'] = item.from_title
|
||||
|
||||
if item.from_title_tmdb: del item.from_title_tmdb
|
||||
if not item.from_update and item.from_title: del item.from_title
|
||||
|
||||
if item.contentSerieName: #Copiamos el título para que sirva de referencia en menú "Completar Información"
|
||||
item.infoLabels['originaltitle'] = item.contentSerieName
|
||||
item.contentTitle = item.contentSerieName
|
||||
@@ -109,57 +136,67 @@ def update_title(item):
|
||||
#Si el usuario ha cambiado los datos en "Completar Información" hay que ver el título definitivo en TMDB
|
||||
if not item.infoLabels['tmdb_id']:
|
||||
if item.contentSerieName:
|
||||
item.contentSerieName = item.contentTitle #Se pone título nuevo
|
||||
item.infoLabels['noscrap_id'] = '' #Se resetea, por si acaso
|
||||
item.infoLabels['year'] = '-' #Se resetea, por si acaso
|
||||
scraper_return = scraper.find_and_set_infoLabels(item) #Se intenta de nuevo
|
||||
item.contentSerieName = item.contentTitle #Se pone título nuevo
|
||||
item.infoLabels['noscrap_id'] = '' #Se resetea, por si acaso
|
||||
item.infoLabels['year'] = '-' #Se resetea, por si acaso
|
||||
scraper_return = scraper.find_and_set_infoLabels(item) #Se intenta de nuevo
|
||||
|
||||
#Parece que el usuario ha cancelado de nuevo. Restituimos los datos a la situación inicial
|
||||
if not scraper_return or not item.infoLabels['tmdb_id']:
|
||||
item = new_item.clone()
|
||||
else:
|
||||
item.tmdb_stat = True #Marcamos Item como procesado correctamente por TMDB (pasada 2)
|
||||
item.tmdb_stat = True #Marcamos Item como procesado correctamente por TMDB (pasada 2)
|
||||
else:
|
||||
item.tmdb_stat = True #Marcamos Item como procesado correctamente por TMDB (pasada 1)
|
||||
item.tmdb_stat = True #Marcamos Item como procesado correctamente por TMDB (pasada 1)
|
||||
|
||||
#Si el usuario ha seleccionado una opción distinta o cambiado algo, ajustamos los títulos
|
||||
if item.contentType != 'movie' or item.from_update:
|
||||
item.channel = new_item.channel #Restuaramos el nombre del canal, por si lo habíamos cambiado
|
||||
if item.tmdb_stat == True:
|
||||
if new_item.contentSerieName: #Si es serie...
|
||||
if config.get_setting("filter_languages", item.channel) >= 0:
|
||||
item.title_from_channel = new_item.contentSerieName #Guardo el título incial para Filtertools
|
||||
item.contentSerieName = new_item.contentSerieName #Guardo el título incial para Filtertools
|
||||
else:
|
||||
item.title = item.title.replace(new_item.contentSerieName, item.contentTitle)
|
||||
item.title = item.title.replace(new_item.contentSerieName, item.contentTitle).replace(from_title_tmdb, item.contentTitle)
|
||||
item.contentSerieName = item.contentTitle
|
||||
if new_item.contentSeason: item.contentSeason = new_item.contentSeason #Restauramos Temporada
|
||||
if item.infoLabels['title']: del item.infoLabels['title'] #Borramos título de peli (es serie)
|
||||
else: #Si es película...
|
||||
item.title = item.title.replace(new_item.contentTitle, item.contentTitle)
|
||||
if new_item.infoLabels['year']: #Actualizamos el Año en el título
|
||||
else: #Si es película...
|
||||
item.title = item.title.replace(new_item.contentTitle, item.contentTitle).replace(from_title_tmdb, item.contentTitle)
|
||||
if new_item.infoLabels['year']: #Actualizamos el Año en el título
|
||||
item.title = item.title.replace(str(new_item.infoLabels['year']), str(item.infoLabels['year']))
|
||||
if new_item.infoLabels['rating']: #Actualizamos en Rating en el título
|
||||
rating_old = ''
|
||||
if new_item.infoLabels['rating'] and new_item.infoLabels['rating'] != '0.0':
|
||||
rating_old = float(new_item.infoLabels['rating'])
|
||||
rating_old = round(rating_old, 1)
|
||||
rating_new = ''
|
||||
if item.infoLabels['rating'] and item.infoLabels['rating'] != '0.0':
|
||||
rating_new = float(item.infoLabels['rating'])
|
||||
rating_new = round(rating_new, 1)
|
||||
item.title = item.title.replace("[" + str(rating_old) + "]", "[" + str(rating_new) + "]")
|
||||
if item.wanted: #Actualizamos Wanted, si existe
|
||||
if new_item.infoLabels['rating']: #Actualizamos en Rating en el título
|
||||
try:
|
||||
rating_old = ''
|
||||
if new_item.infoLabels['rating'] and new_item.infoLabels['rating'] != '0.0':
|
||||
rating_old = float(new_item.infoLabels['rating'])
|
||||
rating_old = round(rating_old, 1)
|
||||
rating_new = ''
|
||||
if item.infoLabels['rating'] and item.infoLabels['rating'] != '0.0':
|
||||
rating_new = float(item.infoLabels['rating'])
|
||||
rating_new = round(rating_new, 1)
|
||||
item.title = item.title.replace("[" + str(rating_old) + "]", "[" + str(rating_new) + "]")
|
||||
except:
|
||||
pass
|
||||
if item.wanted: #Actualizamos Wanted, si existe
|
||||
item.wanted = item.contentTitle
|
||||
if new_item.contentSeason: #Restauramos el núm. de Temporada después de TMDB
|
||||
if new_item.contentSeason: #Restauramos el núm. de Temporada después de TMDB
|
||||
item.contentSeason = new_item.contentSeason
|
||||
|
||||
if item.from_update:
|
||||
item.from_update = True
|
||||
del item.from_update
|
||||
platformtools.itemlist_update(item)
|
||||
|
||||
#Para evitar el "efecto memoria" de TMDB, se le llama con un título ficticio para que resetee los buffers
|
||||
if item.contentSerieName:
|
||||
new_item.infoLabels['tmdb_id'] = '289' #una serie no ambigua
|
||||
new_item.infoLabels['tmdb_id'] = '289' #una serie no ambigua
|
||||
else:
|
||||
new_item.infoLabels['tmdb_id'] = '111' #una peli no ambigua
|
||||
new_item.infoLabels['tmdb_id'] = '111' #una peli no ambigua
|
||||
new_item.infoLabels['year'] = '-'
|
||||
if new_item.contentSeason:
|
||||
del new_item.infoLabels['season'] #Funciona mal con num. de Temporada
|
||||
del new_item.infoLabels['season'] #Funciona mal con num. de Temporada
|
||||
scraper_return = scraper.find_and_set_infoLabels(new_item)
|
||||
|
||||
#logger.debug(item)
|
||||
@@ -241,10 +278,16 @@ def post_tmdb_listado(item, itemlist):
|
||||
item_local.title_subs = []
|
||||
del item_local.title_subs
|
||||
|
||||
if item_local.from_title:
|
||||
if item_local.contentType == 'movie':
|
||||
item_local.contentTitle = item_local.from_title
|
||||
else:
|
||||
item_local.contentSerieName = item_local.from_title
|
||||
|
||||
#Preparamos el Rating del vídeo
|
||||
rating = ''
|
||||
try:
|
||||
if item_local.infoLabels['rating'] and item_local.infoLabels['rating'] != '0.0':
|
||||
if item_local.infoLabels['rating'] and item_local.infoLabels['rating'] != 0.0:
|
||||
rating = float(item_local.infoLabels['rating'])
|
||||
rating = round(rating, 1)
|
||||
except:
|
||||
@@ -502,7 +545,7 @@ def post_tmdb_episodios(item, itemlist):
|
||||
#Preparamos el Rating del vídeo
|
||||
rating = ''
|
||||
try:
|
||||
if item_local.infoLabels['rating'] and item_local.infoLabels['rating'] != '0.0':
|
||||
if item_local.infoLabels['rating'] and item_local.infoLabels['rating'] != 0.0:
|
||||
rating = float(item_local.infoLabels['rating'])
|
||||
rating = round(rating, 1)
|
||||
except:
|
||||
@@ -572,7 +615,7 @@ def post_tmdb_episodios(item, itemlist):
|
||||
logger.error("ERROR 07: EPISODIOS: Num de Temporada fuera de rango " + " / TEMPORADA: " + str(item_local.contentSeason) + " / " + str(item_local.contentEpisodeNumber) + " / MAX_TEMPORADAS: " + str(num_temporada_max) + " / LISTA_TEMPORADAS: " + str(num_episodios_lista))
|
||||
|
||||
#Permitimos la actualización de los títulos, bien para uso inmediato, o para añadir a la videoteca
|
||||
itemlist.append(item.clone(title="** [COLOR yelow]Actualizar Títulos - vista previa videoteca[/COLOR] **", action="actualizar_titulos", tmdb_stat=False, from_action=item.action, from_title=item.title))
|
||||
itemlist.append(item.clone(title="** [COLOR yelow]Actualizar Títulos - vista previa videoteca[/COLOR] **", action="actualizar_titulos", tmdb_stat=False, from_action=item.action, from_title_tmdb=item.title, from_update=True))
|
||||
|
||||
#Borro num. Temporada si no viene de menú de Añadir a Videoteca y no está actualizando la Videoteca
|
||||
if not item.library_playcounts: #si no está actualizando la Videoteca
|
||||
@@ -716,7 +759,7 @@ def post_tmdb_findvideos(item, itemlist):
|
||||
|
||||
rating = '' #Ponemos el rating
|
||||
try:
|
||||
if item.infoLabels['rating'] and item.infoLabels['rating'] != '0.0':
|
||||
if item.infoLabels['rating'] and item.infoLabels['rating'] != 0.0:
|
||||
rating = float(item.infoLabels['rating'])
|
||||
rating = round(rating, 1)
|
||||
except:
|
||||
@@ -733,15 +776,18 @@ def post_tmdb_findvideos(item, itemlist):
|
||||
elif item.contentChannel == 'videolibrary': #No hay, viene de la Videoteca? buscamos en la DB
|
||||
#Leo de la BD de Kodi la duración de la película o episodio. En "from_fields" se pueden poner las columnas que se quiera
|
||||
nun_records = 0
|
||||
if item.contentType == 'movie':
|
||||
nun_records, records = get_field_from_kodi_DB(item, from_fields='c11') #Leo de la BD de Kodi la duración de la película
|
||||
else:
|
||||
nun_records, records = get_field_from_kodi_DB(item, from_fields='c09') #Leo de la BD de Kodi la duración del episodio
|
||||
try:
|
||||
if item.contentType == 'movie':
|
||||
nun_records, records = get_field_from_kodi_DB(item, from_fields='c11') #Leo de la BD de Kodi la duración de la película
|
||||
else:
|
||||
nun_records, records = get_field_from_kodi_DB(item, from_fields='c09') #Leo de la BD de Kodi la duración del episodio
|
||||
except:
|
||||
pass
|
||||
if nun_records > 0: #Hay registros?
|
||||
#Es un array, busco el campo del registro: añadir en el FOR un fieldX por nueva columna
|
||||
for strFileName, field1 in records:
|
||||
tiempo = field1
|
||||
|
||||
|
||||
try: #calculamos el timepo en hh:mm
|
||||
tiempo_final = int(tiempo) #lo convierto a int, pero puede se null
|
||||
if tiempo_final > 0: #Si el tiempo está a 0, pasamos
|
||||
@@ -749,7 +795,8 @@ def post_tmdb_findvideos(item, itemlist):
|
||||
tiempo_final = tiempo_final / 60 #Lo transformo a minutos
|
||||
horas = tiempo_final / 60 #Lo transformo a horas
|
||||
resto = tiempo_final - (horas * 60) #guardo el resto de minutos de la hora
|
||||
item.quality += ' [%s:%s]' % (str(horas).zfill(2), str(resto).zfill(2)) #Lo agrego a Calidad del Servidor
|
||||
if not scrapertools.find_single_match(item.quality, '(\[\d+:\d+\])'): #si ya tiene la duración, pasamos
|
||||
item.quality += ' [%s:%s]' % (str(horas).zfill(2), str(resto).zfill(2)) #Lo agrego a Calidad del Servidor
|
||||
except:
|
||||
pass
|
||||
|
||||
@@ -768,7 +815,7 @@ def post_tmdb_findvideos(item, itemlist):
|
||||
title = '%s al %s - ' % (title, scrapertools.find_single_match(item.title, 'al (\d+)'))
|
||||
else:
|
||||
title = '%s %s' % (title, item.infoLabels['episodio_titulo']) #Título Episodio
|
||||
title_gen = '%s, %s [COLOR yellow][%s][/COLOR] [%s] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR] [%s]' % (title, item.contentSerieName, item.infoLabels['year'], rating, item.quality, str(item.language), scrapertools.find_single_match(item.title, '\s\[(\d+,?\d*?\s\w[b|B])\]')) #Rating, Calidad, Idioma, Tamaño
|
||||
title_gen = '%s, %s [COLOR yellow][%s][/COLOR] [%s] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR] [%s]' % (title, item.contentSerieName, item.infoLabels['year'], rating, item.quality, str(item.language), scrapertools.find_single_match(item.title, '\s\[(\d+,?\d*?\s\w[b|B])\]')) #Rating, Calidad, Idioma, Tamaño
|
||||
if item.infoLabels['status'] and item.infoLabels['status'].lower() == "ended":
|
||||
title_gen = '[TERM.] %s' % title_gen #Marca cuando la Serie está terminada y no va a haber más producción
|
||||
item.title = title_gen
|
||||
@@ -803,8 +850,11 @@ def post_tmdb_findvideos(item, itemlist):
|
||||
itemlist.append(item.clone(action="", server = "", title=title_gen)) #Título con todos los datos del vídeo
|
||||
|
||||
#agregamos la opción de Añadir a Videoteca para péliculas (no series)
|
||||
if item.contentType == 'movie' and item.contentChannel != "videolibrary":
|
||||
itemlist.append(item.clone(title="**-[COLOR yellow] Añadir a la videoteca [/COLOR]-**", action="add_pelicula_to_library", extra="películas", from_title=title_videoteca))
|
||||
if item.contentType == 'movie' and item.contentChannel != "videolibrary":
|
||||
#Permitimos la actualización de los títulos, bien para uso inmediato, o para añadir a la videoteca
|
||||
itemlist.append(item.clone(title="** [COLOR yelow]Actualizar Títulos - vista previa videoteca[/COLOR] **", action="actualizar_titulos", extra="películas", tmdb_stat=False, from_action=item.action, from_title_tmdb=item.title, from_update=True))
|
||||
|
||||
itemlist.append(item.clone(title="**-[COLOR yellow] Añadir a la videoteca [/COLOR]-**", action="add_pelicula_to_library", extra="películas", from_action=item.action, from_title_tmdb=item.title))
|
||||
|
||||
#Añadimos la opción de ver trailers
|
||||
if item.contentChannel != "videolibrary":
|
||||
@@ -833,11 +883,16 @@ def get_field_from_kodi_DB(item, from_fields='*', files='file'):
|
||||
FOLDER_MOVIES = config.get_setting("folder_movies")
|
||||
FOLDER_TVSHOWS = config.get_setting("folder_tvshows")
|
||||
VIDEOLIBRARY_PATH = config.get_videolibrary_config_path()
|
||||
VIDEOLIBRARY_REAL_PATH = config.get_videolibrary_path()
|
||||
|
||||
if item.contentType == 'movie': #Agrego la carpeta correspondiente al path de la Videoteca
|
||||
path = filetools.join(VIDEOLIBRARY_PATH, FOLDER_MOVIES)
|
||||
path = filetools.join(VIDEOLIBRARY_REAL_PATH, FOLDER_MOVIES)
|
||||
path2 = filetools.join(VIDEOLIBRARY_PATH, FOLDER_MOVIES)
|
||||
folder = FOLDER_MOVIES
|
||||
else:
|
||||
path = filetools.join(VIDEOLIBRARY_PATH, FOLDER_TVSHOWS)
|
||||
path = filetools.join(VIDEOLIBRARY_REAL_PATH, FOLDER_TVSHOWS)
|
||||
path2 = filetools.join(VIDEOLIBRARY_PATH, FOLDER_TVSHOWS)
|
||||
folder = FOLDER_TVSHOWS
|
||||
|
||||
raiz, carpetas, ficheros = filetools.walk(path).next() #listo las series o películas en la Videoteca
|
||||
carpetas = [filetools.join(path, f) for f in carpetas] #agrego la carpeta del contenido al path
|
||||
@@ -845,10 +900,11 @@ def get_field_from_kodi_DB(item, from_fields='*', files='file'):
|
||||
if item.contentType == 'movie' and (item.contentTitle.lower() in carpeta or item.contentTitle in carpeta): #Películas?
|
||||
path = carpeta #Almacenamos la carpeta en el path
|
||||
break
|
||||
elif item.contentType in ['tvshow', 'season', 'episode'] and (item.contentSerieName.lower() in carpeta or item.contentSerieName in carpeta): #Series?
|
||||
elif item.contentType in ['tvshow', 'season', 'episode'] and (item.contentSerieName.lower() in carpeta or item.contentSerieName in carpeta): #Series?
|
||||
path = carpeta #Almacenamos la carpeta en el path
|
||||
break
|
||||
|
||||
path2 += '/%s/' % scrapertools.find_single_match(path, '%s.(.*?\s\[.*?\])' % folder) #Agregamos la carpeta de la Serie o Películas, formato Android
|
||||
file_search = '%' #Por defecto busca todos los archivos de la carpeta
|
||||
if files == 'file': #Si se ha pedido son un archivo (defecto), se busca
|
||||
if item.contentType == 'episode': #Si es episodio, se pone el nombre, si no de deja %
|
||||
@@ -865,7 +921,7 @@ def get_field_from_kodi_DB(item, from_fields='*', files='file'):
|
||||
else:
|
||||
contentType = "movie_view" #Marco la tabla de BBDD de Kodi Video
|
||||
path1 = path.replace("\\\\", "\\") #para la SQL solo necesito la carpeta
|
||||
path2 = path.replace("\\", "/") #Formato no Windows
|
||||
path2 = path2.replace("\\", "/") #Formato no Windows
|
||||
|
||||
#Ejecutmos la sentencia SQL
|
||||
if not from_fields:
|
||||
@@ -1105,7 +1161,8 @@ def web_intervenida(item, data, desactivar=True):
|
||||
#Guardamos los cambios hechos en el .json
|
||||
try:
|
||||
if item.channel != channel_py:
|
||||
disabled = config.set_setting('enabled', False, item.channel)
|
||||
disabled = config.set_setting('enabled', False, item.channel) #Desactivamos el canal
|
||||
disabled = config.set_setting('include_in_global_search', False, item.channel) #Lo sacamos de las búquedas globales
|
||||
channel_path = filetools.join(config.get_runtime_path(), "channels", item.channel + ".json")
|
||||
with open(channel_path, 'w') as outfile: #Grabamos el .json actualizado
|
||||
json.dump(json_data, outfile, sort_keys = True, indent = 2, ensure_ascii = False)
|
||||
|
||||
@@ -299,6 +299,14 @@ def get_localized_string(code):
|
||||
|
||||
return dev
|
||||
|
||||
def get_localized_category(categ):
|
||||
categories = {'movie': get_localized_string(30122), 'tvshow': get_localized_string(30123),
|
||||
'anime': get_localized_string(30124), 'documentary': get_localized_string(30125),
|
||||
'vos': get_localized_string(30136), 'adult': get_localized_string(30126),
|
||||
'direct': get_localized_string(30137), 'torrent': get_localized_string(70015)}
|
||||
return categories[categ] if categ in categories else categ
|
||||
|
||||
|
||||
|
||||
def get_videolibrary_config_path():
|
||||
value = get_setting("videolibrarypath")
|
||||
|
||||
@@ -59,6 +59,10 @@ def dialog_select(heading, _list):
|
||||
return xbmcgui.Dialog().select(heading, _list)
|
||||
|
||||
|
||||
def dialog_multiselect(heading, _list, autoclose=0, preselect=[], useDetails=False):
|
||||
return xbmcgui.Dialog().multiselect(heading, _list, autoclose=autoclose, preselect=preselect, useDetails=useDetails)
|
||||
|
||||
|
||||
def dialog_progress(heading, line1, line2=" ", line3=" "):
|
||||
dialog = xbmcgui.DialogProgress()
|
||||
dialog.create(heading, line1, line2, line3)
|
||||
@@ -496,19 +500,6 @@ def set_context_commands(item, parent_item):
|
||||
(sys.argv[0], item.clone(channel="favorites", action="addFavourite",
|
||||
from_channel=item.channel,
|
||||
from_action=item.action).tourl())))
|
||||
#Herramientas de desarrollador
|
||||
from core import filetools
|
||||
|
||||
test_path = os.path.join(config.get_runtime_path(), "channels/test.py")
|
||||
|
||||
if parent_item.action == 'filterchannels' and item.action == 'mainlist' and filetools.exists(test_path):
|
||||
|
||||
channel_parameters = channeltools.get_channel_parameters(item.channel)
|
||||
context_commands.append(("TESTEAR ESTE CANAL",
|
||||
"XBMC.RunPlugin(%s?%s)" %
|
||||
(sys.argv[0],
|
||||
Item(channel='test', action='channel_test',
|
||||
config=channel_parameters['channel']).tourl())))
|
||||
|
||||
# Buscar en otros canales
|
||||
if item.contentType in ['movie', 'tvshow'] and item.channel != 'search':
|
||||
@@ -522,7 +513,6 @@ def set_context_commands(item, parent_item):
|
||||
item.clone(channel='search',
|
||||
action="do_search",
|
||||
from_channel=item.channel,
|
||||
|
||||
contextual=True).tourl())))
|
||||
if item.contentType == 'tvshow':
|
||||
mediatype = 'tv'
|
||||
@@ -606,7 +596,6 @@ def set_context_commands(item, parent_item):
|
||||
"XBMC.Container.Update (%s?%s)" % (sys.argv[0], Item(channel='side_menu',
|
||||
action="open_menu",
|
||||
parent=parent_item.tourl()).tourl(
|
||||
|
||||
))))
|
||||
return context_commands
|
||||
|
||||
|
||||
@@ -3867,4 +3867,414 @@ msgstr " "
|
||||
|
||||
msgctxt "#70291"
|
||||
msgid "Error, during conversion"
|
||||
msgstr ""
|
||||
|
||||
# Servers ----
|
||||
msgctxt "#70292"
|
||||
msgid "[%s] File no longer exist on this server."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70293"
|
||||
msgid "[%s] The file is processing or has been deleted."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70294"
|
||||
msgid "[%s] Link Not valid."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70295"
|
||||
msgid "[%s] Premium account needed."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70296"
|
||||
msgid "[%s] Internal server error."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70297"
|
||||
msgid "[%s] File is awaiting for moderation."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70298"
|
||||
msgid "[%s] The number of allowed reproductions has been exceeded."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70299"
|
||||
msgid "[%s] You do not have permission to access this file."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70300"
|
||||
msgid "[%s] Too many connections to the server, try later."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70301"
|
||||
msgid "[%s] File deleted for infringement."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70302"
|
||||
msgid "[%s] This server only works from Kodi 17."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70303"
|
||||
msgid "[%s] This server does not work with your version of Plex, try to update it."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70304"
|
||||
msgid "[%s] This server requires updating python to version 2.7.9 or higher."
|
||||
msgstr ""
|
||||
# ============
|
||||
|
||||
msgctxt "#70305"
|
||||
msgid "Search in channels"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70306"
|
||||
msgid "Movies by Genre"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70307"
|
||||
msgid "Most popular Movies"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70308"
|
||||
msgid "Top rated Movies"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70309"
|
||||
msgid "Movies Now in Theatres "
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70310"
|
||||
msgid "Series by Genre"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70311"
|
||||
msgid "Series most polupar"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70312"
|
||||
msgid "Series in progress"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70313"
|
||||
msgid "Top rated Series"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70314"
|
||||
msgid "Actors/Actresses"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70315"
|
||||
msgid "Recommendations"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70316"
|
||||
msgid "List of Images"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70317"
|
||||
msgid "Listen to BSO - List of songs"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70318"
|
||||
msgid "Manage yor trakt account"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70319"
|
||||
msgid "Filming equipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70320"
|
||||
msgid "Filter search"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70321"
|
||||
msgid "[MAL] Add to your lists/%s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70322"
|
||||
msgid "[MAL] in your list of [COLOR %s]%s[/COLOR] Do you want to change?/%s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70323"
|
||||
msgid "[Trakt] Manage your account"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70324"
|
||||
msgid "[FA] My vote: %s ---> Change?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70325"
|
||||
msgid "[FA] Vote %s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70326"
|
||||
msgid "[FA] Add or remove from a user list"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70327"
|
||||
msgid "It's part of: %s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70328"
|
||||
msgid "%ss similarar"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70329"
|
||||
msgid "User and/or passwords not configured"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70330"
|
||||
msgid "Error in the user and/or password. Check your credentials"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70331"
|
||||
msgid "Error during login. Check your credentials
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70332"
|
||||
msgid "My votes"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70333"
|
||||
msgid "Add new list"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70334"
|
||||
msgid "Action completed successfully"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70335"
|
||||
msgid "Error, something has failed during the process"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70336"
|
||||
msgid "Vote %s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70337"
|
||||
msgid "Vote completed successfully"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70338"
|
||||
msgid "List created correctly"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70339"
|
||||
msgid "Fanart.tv website not available. Retry"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70340"
|
||||
msgid "No images available"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70341"
|
||||
msgid "[Trakt] Mark %s as not seen"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70342"
|
||||
msgid "[Trakt] Mark %s as seen"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70343"
|
||||
msgid "[Trakt] Remove %s from your watchlist"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70344"
|
||||
msgid "Add to %s your watchlist""
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70345"
|
||||
msgid "[Trakt] Remove %s from your collection"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70346"
|
||||
msgid "[Trakt] Add %s to your collection
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70347"
|
||||
msgid "Action performed correctly"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70348"
|
||||
msgid "An error occurred in process"
|
||||
msgstr "Hubo error en el proceso"
|
||||
|
||||
msgctxt "#70349"
|
||||
msgid "List sorted by %s. Change order?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70350"
|
||||
msgid "Search in alfa: %s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70351"
|
||||
msgid " Search alternative title: %s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70352"
|
||||
msgid " Search title in english: %s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70353"
|
||||
msgid "Vídeos (Episodes, Trailers...)"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70354"
|
||||
msgid "Characters/Staff"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70355"
|
||||
msgid "Prequel: %s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70356"
|
||||
msgid "Sequel: %s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70357"
|
||||
msgid "Alternative version: %s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70358"
|
||||
msgid "Recommendations TMDB"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70359"
|
||||
msgid "Recommendations MyAnimeList"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70360"
|
||||
msgid " [COLOR %s][Without subs in castellan][/COLOR]"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70361"
|
||||
msgid ">> More Episodes"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70362"
|
||||
msgid "Episodes"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70363"
|
||||
msgid "Trailers/Promotions"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70364"
|
||||
msgid "Winter"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70365"
|
||||
msgid "Spring"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70366"
|
||||
msgid "Summer"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70367"
|
||||
msgid "Fall"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70368"
|
||||
msgid "(New)"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70369"
|
||||
msgid "(Continuation)"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70370"
|
||||
msgid "Characters/Benders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70371"
|
||||
msgid "Principal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70372"
|
||||
msgid "Secondary"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70373"
|
||||
msgid "Animes where it appears:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70374"
|
||||
msgid "Give voice to/in:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70375"
|
||||
msgid "Staff in animes:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70376"
|
||||
msgid "Info in AniDB [COLOR %s]%s[/COLOR]"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70377"
|
||||
msgid " - [COLOR %s]Fansubs in spanish:[/COLOR]"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70378"
|
||||
msgid "Complete"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70379"
|
||||
msgid "Finished"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70380"
|
||||
msgid "Stalled"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70381"
|
||||
msgid "Dropped"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70381"
|
||||
msgid "Myanimelist username and/or password blank"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70382"
|
||||
msgid "Currently watching"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70383"
|
||||
msgid "Completed"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70384"
|
||||
msgid "Pause"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70385"
|
||||
msgid "Descarted"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70386"
|
||||
msgid "See later"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70387"
|
||||
msgid "E = In emission | F = Completed | P = Coming soon"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70388"
|
||||
msgid ". Available actions:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70389"
|
||||
msgid ". In your list [COLOR %s]%s[/COLOR]"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70390"
|
||||
msgid "Anime: %s%s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70391"
|
||||
msgid "Add to list %s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70392"
|
||||
msgid "Rate with a [COLOR %s]%s[/ COLOR]"
|
||||
msgstr ""
|
||||
@@ -2535,10 +2535,10 @@ msgstr " Attendere finchè la serie sia aggiunta"
|
||||
|
||||
msgctxt "#60642"
|
||||
msgid "Show option \"All Seasons\"."
|
||||
msgstr "Mostra l'opzione \"Tutte le stagioni\""
|
||||
msgstr "Mostra l'opzione \'Tutte le stagioni\'"
|
||||
|
||||
msgctxt "#60643"
|
||||
msgid "Do not combine the seasons of the series""
|
||||
msgid "Do not combine the seasons of the series"
|
||||
msgstr "Non unire le stagioni delle serie"
|
||||
|
||||
msgctxt "#60644"
|
||||
@@ -2967,7 +2967,7 @@ msgstr ">> Pagina successiva"
|
||||
|
||||
msgctxt "#70066"
|
||||
msgid " Search title in spanish: %s"
|
||||
msgstr "Cerca il suo titolo in italiano: %s""
|
||||
msgstr "Cerca il suo titolo in italiano: %s"
|
||||
|
||||
msgctxt "#70067"
|
||||
msgid "Info Seasons [%s]"
|
||||
@@ -3852,3 +3852,413 @@ msgstr "default, puoi cambiarla di nuovo se vuoi.\n Scrivi 's', se hai capito: "
|
||||
msgctxt "#70291"
|
||||
msgid "Error, during conversion"
|
||||
msgstr "Errore, in conversione"
|
||||
|
||||
# Servers ----
|
||||
msgctxt "#70292"
|
||||
msgid "[%s] File no longer exist on this server."
|
||||
msgstr "[%s] Il file non è più presente nel server."
|
||||
|
||||
msgctxt "#70293"
|
||||
msgid "[%s] The file is processing or has been deleted."
|
||||
msgstr "[%s] Il file video è ancora in elaborazione o è stato rimosso."
|
||||
|
||||
msgctxt "#70294"
|
||||
msgid "[%s] Link Not valid."
|
||||
msgstr "[%s] URL Non valido."
|
||||
|
||||
msgctxt "#70295"
|
||||
msgid "[%s] Premium account needed."
|
||||
msgstr "[%s] É Necessario un account premium."
|
||||
|
||||
msgctxt "#70296"
|
||||
msgid "[%s] Internal server error."
|
||||
msgstr "[%s] Errore server interno."
|
||||
|
||||
msgctxt "#70297"
|
||||
msgid "[%s] File is awaiting for moderation."
|
||||
msgstr "[%s] Il File è in attesa di moderazione."
|
||||
|
||||
msgctxt "#70298"
|
||||
msgid "[%s] The number of allowed reproductions has been exceeded."
|
||||
msgstr "[%s] Il numero di riproduzioni concesse è stato superato."
|
||||
|
||||
msgctxt "#70299"
|
||||
msgid "[%s] You do not have permission to access this file."
|
||||
msgstr "[%s] Non hai il permesso per accedere a questo file."
|
||||
|
||||
msgctxt "#70300"
|
||||
msgid "[%s] Too many connections to the server, try later."
|
||||
msgstr "[%s] Troppe connessioni al server, riprova più tardi."
|
||||
|
||||
msgctxt "#70301"
|
||||
msgid "[%s] File deleted for infringement."
|
||||
msgstr "[%s] File rimosso per infrazione."
|
||||
|
||||
msgctxt "#70302"
|
||||
msgid "[%s] This server only works from Kodi 17."
|
||||
msgstr "[%s] Questo server funziona solo a partire da Kodi 17."
|
||||
|
||||
msgctxt "#70303"
|
||||
msgid "[%s] This server does not work with your version of Plex, try to update it."
|
||||
msgstr "[%s] Questo server non funziona con la tua versione di Plex, prova ad aggiornare Plex."
|
||||
|
||||
msgctxt "#70304"
|
||||
msgid "[%s] This server requires updating python to version 2.7.9 or higher."
|
||||
msgstr "[%s] Questo server richiede la versione 2.7.9 (O Maggiore) di Python."
|
||||
# ============
|
||||
|
||||
msgctxt "#70305"
|
||||
msgid "Search in channels"
|
||||
msgstr "Cerca nei canali"
|
||||
|
||||
msgctxt "#70306"
|
||||
msgid "Movies by Genre"
|
||||
msgstr "Film per Genere"
|
||||
|
||||
msgctxt "#70307"
|
||||
msgid "Most popular Movies"
|
||||
msgstr "Film più popolari"
|
||||
|
||||
msgctxt "#70308"
|
||||
msgid "Top rated Movies"
|
||||
msgstr "Film più valutati"
|
||||
|
||||
msgctxt "#70309"
|
||||
msgid "Movies Now in Theatres "
|
||||
msgstr "Film ora in sala"
|
||||
|
||||
msgctxt "#70310"
|
||||
msgid "Series by Genre"
|
||||
msgstr "Serie per Genere"
|
||||
|
||||
msgctxt "#70311"
|
||||
msgid "Series most polupar"
|
||||
msgstr "Serie più popolari"
|
||||
|
||||
msgctxt "#70312"
|
||||
msgid "Series in progress"
|
||||
msgstr "Serie in uscita"
|
||||
|
||||
msgctxt "#70313"
|
||||
msgid "Top rated Series"
|
||||
msgstr "Serie Più valutate"
|
||||
|
||||
msgctxt "#70314"
|
||||
msgid "Actors/Actresses"
|
||||
msgstr "Attori/Attrici"
|
||||
|
||||
msgctxt "#70315"
|
||||
msgid "Recommendations"
|
||||
msgstr "Raccomandati"
|
||||
|
||||
msgctxt "#70316"
|
||||
msgid "List of Images"
|
||||
msgstr "Galleria di Immagini"
|
||||
|
||||
msgctxt "#70317"
|
||||
msgid "Listen to BSO - List of songs"
|
||||
msgstr "Ascolta BSO - Lista di canzoni"
|
||||
|
||||
msgctxt "#70318"
|
||||
msgid "Manage yor trakt account"
|
||||
msgstr "Gestisci il tuo account Trakt"
|
||||
|
||||
msgctxt "#70319"
|
||||
msgid "Filming equipment"
|
||||
msgstr "Filming crew"
|
||||
|
||||
msgctxt "#70320"
|
||||
msgid "Filter search"
|
||||
msgstr "Filtra la ricerca"
|
||||
|
||||
msgctxt "#70321"
|
||||
msgid "[MAL] Add to your lists/%s"
|
||||
msgstr "[MAL] Aggiungi alle tue liste/%s"
|
||||
|
||||
msgctxt "#70322"
|
||||
msgid "[MAL] in your list of [COLOR %s]%s[/COLOR] Do you want to change?/%s"
|
||||
msgstr "[MAL] Nella tua lista di [COLOR %s]%s[/COLOR]. Vuoi cambiare?/%s"
|
||||
|
||||
msgctxt "#70323"
|
||||
msgid "[Trakt] Manage your account"
|
||||
msgstr "[Trakt] Gestisci il tuo account"
|
||||
|
||||
msgctxt "#70324"
|
||||
msgid "[FA] My vote: %s ---> Change?"
|
||||
msgstr "[FA] il Mio voto: %s ---> Cambiare?"
|
||||
|
||||
msgctxt "#70325"
|
||||
msgid "[FA] Vote %s"
|
||||
msgstr "[FA] Vota %s"
|
||||
|
||||
msgctxt "#70326"
|
||||
msgid "[FA] Add or remove from a user list"
|
||||
msgstr "[FA] Aggiungi o rimuovi da un elenco utenti"
|
||||
|
||||
msgctxt "#70327"
|
||||
msgid "It's part of: %s"
|
||||
msgstr "E'parte di: %s"
|
||||
|
||||
msgctxt "#70328"
|
||||
msgid "%ss similarar"
|
||||
msgstr "%s simili"
|
||||
|
||||
msgctxt "#70329"
|
||||
msgid "User and/or passwords not configured"
|
||||
msgstr "Utente e/o password non configurati"
|
||||
|
||||
msgctxt "#70330"
|
||||
msgid "Error in the user and/or password. Check your credentials"
|
||||
msgstr "Errore in username e/o password. Controlla le tue credenziali"
|
||||
|
||||
msgctxt "#70331"
|
||||
msgid "Error during login. Check your credentials
|
||||
msgstr "Errore durante il login. Controlla le tue credenziali"
|
||||
|
||||
msgctxt "#70332"
|
||||
msgid "My votes"
|
||||
msgstr "I miei voti
|
||||
|
||||
msgctxt "#70333"
|
||||
msgid "Add new list"
|
||||
msgstr "Aggiungi una nuova lista"
|
||||
|
||||
msgctxt "#70334"
|
||||
msgid "Action completed successfully"
|
||||
msgstr "Azione completata con successo"
|
||||
|
||||
msgctxt "#70335"
|
||||
msgid "Error, something has failed during the process"
|
||||
msgstr "Errore, qualcosa è fallito durante il processo"
|
||||
|
||||
msgctxt "#70336"
|
||||
msgid "Vote %s"
|
||||
msgstr "Vota %s"
|
||||
|
||||
msgctxt "#70337"
|
||||
msgid "Vote completed successfully"
|
||||
msgstr "Voto inviato correttamente"
|
||||
|
||||
msgctxt "#70338"
|
||||
msgid "List created correctly"
|
||||
msgstr "Lista creata correttamente"
|
||||
|
||||
msgctxt "#70339"
|
||||
msgid "Fanart.tv website not available. Retry"
|
||||
msgstr "Sito Web di Fanart.tv non disponibile. Riprova"
|
||||
|
||||
msgctxt "#70340"
|
||||
msgid "No images available"
|
||||
msgstr "Non sono disponibili immagini"
|
||||
|
||||
msgctxt "#70341"
|
||||
msgid "[Trakt] Mark %s as not seen"
|
||||
msgstr "[Trakt] Segna %s come non vista"
|
||||
|
||||
msgctxt "#70342"
|
||||
msgid "[Trakt] Mark %s as seen"
|
||||
msgstr "[Trakt] Segna %s come vista"
|
||||
|
||||
msgctxt "#70343"
|
||||
msgid "[Trakt] Remove %s from your watchlist"
|
||||
msgstr "[Trakt] Rimuovi %s dalla tua watchlist"
|
||||
|
||||
msgctxt "#70344"
|
||||
msgid "Add to %s your watchlist""
|
||||
msgstr "[Trakt] Aggiungi %s alla tua watchlist"
|
||||
|
||||
msgctxt "#70345"
|
||||
msgid "[Trakt] Remove %s from your collection"
|
||||
msgstr "[Trakt] Rimuovi %s dalla tua collezione"
|
||||
|
||||
msgctxt "#70346"
|
||||
msgid "[Trakt] Add %s to your collection
|
||||
msgstr "[Trakt] Aggiungi %s alla tua collezione"
|
||||
|
||||
msgctxt "#70347"
|
||||
msgid "Action performed correctly"
|
||||
msgstr "Azione completata correttamente"
|
||||
|
||||
msgctxt "#70348"
|
||||
msgid "An error occurred in process"
|
||||
msgstr "Si è verificato un errore nel processo"
|
||||
|
||||
msgctxt "#70349"
|
||||
msgid "List sorted by %s. Change order?"
|
||||
msgstr "Lista ordinata per %s. Cambiare ordine?"
|
||||
|
||||
msgctxt "#70350"
|
||||
msgid "Search in alfa: %s"
|
||||
msgstr "Cerca in alfa: %s"
|
||||
|
||||
msgctxt "#70351"
|
||||
msgid " Search alternative title: %s"
|
||||
msgstr " Cerca titolo alternativo: %s"
|
||||
|
||||
msgctxt "#70352"
|
||||
msgid " Search title in english: %s"
|
||||
msgstr " Cerca titolo in inglese: %s"
|
||||
|
||||
msgctxt "#70353"
|
||||
msgid "Vídeos (Episodes, Trailers...)"
|
||||
msgstr "Vídeo (Episodi, Trailers...)"
|
||||
|
||||
msgctxt "#70354"
|
||||
msgid "Characters/Staff"
|
||||
msgstr "Personaggi/Staff"
|
||||
|
||||
msgctxt "#70355"
|
||||
msgid "Prequel: %s"
|
||||
msgstr "Prequel: %s"
|
||||
|
||||
msgctxt "#70356"
|
||||
msgid "Sequel: %s"
|
||||
msgstr "Sequel: %s"
|
||||
|
||||
msgctxt "#70357"
|
||||
msgid "Alternative version: %s"
|
||||
msgstr "Versione alternativa: %s"
|
||||
|
||||
msgctxt "#70358"
|
||||
msgid "Recommendations TMDB"
|
||||
msgstr "Raccomandazioni TMDB"
|
||||
|
||||
msgctxt "#70359"
|
||||
msgid "Recommendations MyAnimeList"
|
||||
msgstr "Raccomandazioni MyAnimeList"
|
||||
|
||||
msgctxt "#70360"
|
||||
msgid " [COLOR %s][Without subs in castellan][/COLOR]"
|
||||
msgstr " [COLOR %s][Senza subs in castigliano][/COLOR]"
|
||||
|
||||
msgctxt "#70361"
|
||||
msgid ">> More Episodes"
|
||||
msgstr ">> Altri Episodi"
|
||||
|
||||
msgctxt "#70362"
|
||||
msgid "Episodes"
|
||||
msgstr "Episodi"
|
||||
|
||||
msgctxt "#70363"
|
||||
msgid "Trailers/Promotions"
|
||||
msgstr "Trailers/Promozionali"
|
||||
|
||||
msgctxt "#70364"
|
||||
msgid "Winter"
|
||||
msgstr "Inverno"
|
||||
|
||||
msgctxt "#70365"
|
||||
msgid "Spring"
|
||||
msgstr "Primavera"
|
||||
|
||||
msgctxt "#70366"
|
||||
msgid "Summer"
|
||||
msgstr "Estate"
|
||||
|
||||
msgctxt "#70367"
|
||||
msgid "Fall"
|
||||
msgstr "Autunno"
|
||||
|
||||
msgctxt "#70368"
|
||||
msgid "(New)"
|
||||
msgstr "(Nuovi)"
|
||||
|
||||
msgctxt "#70369"
|
||||
msgid "(Continuation)"
|
||||
msgstr "(Continuazione)"
|
||||
|
||||
msgctxt "#70370"
|
||||
msgid "Characters/Benders"
|
||||
msgstr "Personaggi/Doppiatori"
|
||||
|
||||
msgctxt "#70371"
|
||||
msgid "Principal"
|
||||
msgstr "Principale"
|
||||
|
||||
msgctxt "#70372"
|
||||
msgid "Secondary"
|
||||
msgstr "Secondario"
|
||||
|
||||
msgctxt "#70373"
|
||||
msgid "Animes where it appears:"
|
||||
msgstr "Anime dove appare:"
|
||||
|
||||
msgctxt "#70374"
|
||||
msgid "Give voice to/in:"
|
||||
msgstr "Dai voce a/in:"
|
||||
|
||||
msgctxt "#70375"
|
||||
msgid "Staff in animes:"
|
||||
msgstr "Staff in anime:"
|
||||
|
||||
msgctxt "#70376"
|
||||
msgid "Info in AniDB [COLOR %s]%s[/COLOR]"
|
||||
msgstr "Info in AniDB [COLOR %s]%s[/COLOR]"
|
||||
|
||||
msgctxt "#70377"
|
||||
msgid " - [COLOR %s]Fansubs in spanish:[/COLOR]"
|
||||
msgstr " - [COLOR %s]Fansubs in spagnolo:[/COLOR]"
|
||||
|
||||
msgctxt "#70378"
|
||||
msgid "Complete"
|
||||
msgstr "Completa"
|
||||
|
||||
msgctxt "#70379"
|
||||
msgid "Finished"
|
||||
msgstr "Terminada"
|
||||
|
||||
msgctxt "#70380"
|
||||
msgid "Stalled"
|
||||
msgstr "In Pausa"
|
||||
|
||||
msgctxt "#70381"
|
||||
msgid "Dropped"
|
||||
msgstr "Abbandonata"
|
||||
|
||||
msgctxt "#70381"
|
||||
msgid "Myanimelist username and/or password blank"
|
||||
msgstr "Username e/o password di Myanimelist vuoti"
|
||||
|
||||
msgctxt "#70382"
|
||||
msgid "Currently watching"
|
||||
msgstr "In visione attualmente"
|
||||
|
||||
msgctxt "#70383"
|
||||
msgid "Completed"
|
||||
msgstr "Completati"
|
||||
|
||||
msgctxt "#70384"
|
||||
msgid "Pause"
|
||||
msgstr "in pausa"
|
||||
|
||||
msgctxt "#70385"
|
||||
msgid "Descarted"
|
||||
msgstr "Scartati"
|
||||
|
||||
msgctxt "#70386"
|
||||
msgid "See later"
|
||||
msgstr "Vedi dopo"
|
||||
|
||||
msgctxt "#70387"
|
||||
msgid "E = In emission | F = Completed | P = Coming soon"
|
||||
msgstr "E=In uscita | F=Completato | P=Prossimamente"
|
||||
|
||||
msgctxt "#70388"
|
||||
msgid ". Available actions:"
|
||||
msgstr ". Azioni disponibili:"
|
||||
|
||||
msgctxt "#70389"
|
||||
msgid ". In your list [COLOR %s]%s[/COLOR]"
|
||||
msgstr ". Nella tua lista [COLOR %s]%s[/COLOR]"
|
||||
|
||||
msgctxt "#70390"
|
||||
msgid "Anime: %s%s"
|
||||
msgstr "Anime: %s%s"
|
||||
|
||||
msgctxt "#70391"
|
||||
msgid "Add to list %s"
|
||||
msgstr "Aggiungi alla lista %s"
|
||||
|
||||
msgctxt "#70392"
|
||||
msgid "Rate with a [COLOR %s]%s[/ COLOR]"
|
||||
msgstr "Dai un punteggio con un [COLOR %s]%s[/COLOR]"
|
||||
@@ -303,7 +303,7 @@ msgstr "Populares"
|
||||
|
||||
msgctxt "#30985"
|
||||
msgid "Top Rated"
|
||||
msgstr "Top Rated"
|
||||
msgstr "Mejor valoradas"
|
||||
|
||||
msgctxt "#30986"
|
||||
msgid "Search by Collection"
|
||||
@@ -503,7 +503,7 @@ msgstr "Filtrar servidores (Lista Negra)"
|
||||
|
||||
msgctxt "#60001"
|
||||
msgid "Filter server (Black List)\nNo connection available that meets the requirements of the Black list.\nTry again by changing the filter in 'Server Configuration"
|
||||
msgstr "Filtrar servidores (Lista Negra)\nNo hay enlaces disponibles que cumplan los requisitos de su Lista Negra.\nPruebe de nuevo modificando el fíltro en 'Configuracíon Servidores""
|
||||
msgstr "Filtrar servidores (Lista Negra)\nNo hay enlaces disponibles que cumplan los requisitos de su Lista Negra.\nPruebe de nuevo modificando el fíltro en 'Configuracíon Servidores"
|
||||
|
||||
msgctxt "#60003"
|
||||
msgid "Connecting with %s"
|
||||
@@ -2207,7 +2207,7 @@ msgstr "Herramientas de canales"
|
||||
|
||||
msgctxt "#60549"
|
||||
msgid "Check the files * _data.json"
|
||||
msgstr "Comprobar archivos *_data.json","
|
||||
msgstr "Comprobar archivos *_data.json"
|
||||
|
||||
msgctxt "#60550"
|
||||
msgid "Servers locked"
|
||||
@@ -2550,8 +2550,8 @@ msgid "Show option \"All Seasons\"."
|
||||
msgstr "Mostrar la opción \"Todas las temporadas\""
|
||||
|
||||
msgctxt "#60643"
|
||||
msgid "Do not combine the seasons of the series""
|
||||
msgstr "No apilar temporadas de series""
|
||||
msgid "Do not combine the seasons of the series"
|
||||
msgstr "No apilar temporadas de series"
|
||||
|
||||
msgctxt "#60644"
|
||||
msgid "Only if there is one season"
|
||||
@@ -2858,12 +2858,12 @@ msgid "Search %s"
|
||||
msgstr "Buscar %s"
|
||||
|
||||
msgctxt "#70036"
|
||||
msgid "Search actor/actress"
|
||||
msgstr "Buscar actor/actriz"
|
||||
msgid " Search actor/actress"
|
||||
msgstr " Buscar actor/actriz"
|
||||
|
||||
msgctxt "#70037"
|
||||
msgid "Search director, writer..."
|
||||
msgstr "Buscar director, guionista..."
|
||||
msgid " Search director, writer..."
|
||||
msgstr " Buscar director, guionista..."
|
||||
|
||||
msgctxt "#70038"
|
||||
msgid "Custom Filter"
|
||||
@@ -2895,7 +2895,7 @@ msgstr "Sagas y Colecciones"
|
||||
|
||||
msgctxt "#70045"
|
||||
msgid "Movies/TV Shows/Documentaries by Themes"
|
||||
msgstr "Películas/Series/Documentales por Temas""
|
||||
msgstr "Películas/Series/Documentales por Temas"
|
||||
|
||||
msgctxt "#70046"
|
||||
msgid "Search Movies/TV Shows"
|
||||
@@ -2975,7 +2975,7 @@ msgstr "Buscar Series/Películas/Ovas"
|
||||
|
||||
msgctxt "#70065"
|
||||
msgid ">> Next Page"
|
||||
msgstr ">> Página siguiente""
|
||||
msgstr ">> Página siguiente"
|
||||
|
||||
msgctxt "#70066"
|
||||
msgid " Search title in spanish: %s"
|
||||
@@ -3857,4 +3857,412 @@ msgctxt "#70291"
|
||||
msgid "Error, during conversion"
|
||||
msgstr "Error, en conversión"
|
||||
|
||||
# Servers ----
|
||||
msgctxt "#70292"
|
||||
msgid "[%s] File no longer exist on this server."
|
||||
msgstr "[%s] El archivo ya no está presente en el servidor."
|
||||
|
||||
msgctxt "#70293"
|
||||
msgid "[%s] The file is processing or has been deleted."
|
||||
msgstr "[%s] El archivo de video todavía se está procesando o se ha eliminado."
|
||||
|
||||
msgctxt "#70294"
|
||||
msgid "[%s] Link Not valid."
|
||||
msgstr "[%s] Enlace no válido."
|
||||
|
||||
msgctxt "#70295"
|
||||
msgid "[%s] Premium account needed."
|
||||
msgstr "[%s] Debes tener una cuenta premium."
|
||||
|
||||
msgctxt "#70296"
|
||||
msgid "[%s] Internal server error."
|
||||
msgstr "[%s] Error interno del servidor."
|
||||
|
||||
msgctxt "#70297"
|
||||
msgid "[%s] File is awaiting for moderation."
|
||||
msgstr "[%s] El video está esperando por moderación."
|
||||
|
||||
msgctxt "#70298"
|
||||
msgid "[%s] The number of allowed reproductions has been exceeded."
|
||||
msgstr "[%s] Se ha excedido el número de reproducciones permitidas."
|
||||
|
||||
msgctxt "#70299"
|
||||
msgid "[%s] You do not have permission to access this file."
|
||||
msgstr "[%s] No tienes permiso para acceder a este video."
|
||||
|
||||
msgctxt "#70300"
|
||||
msgid "[%s] Too many connections to the server, try later."
|
||||
msgstr "[%s] Demasiadas conexiones al servidor, inténtelo después."
|
||||
|
||||
msgctxt "#70301"
|
||||
msgid "[%s] File deleted for infringement."
|
||||
msgstr "[%s] Archivo eliminado por infracción."
|
||||
|
||||
msgctxt "#70302"
|
||||
msgid "[%s] This server only works from Kodi 17."
|
||||
msgstr "[%s] Este conector solo funciona a partir de Kodi 17."
|
||||
|
||||
msgctxt "#70303"
|
||||
msgid "[%s] This server does not work with your version of Plex, try to update it."
|
||||
msgstr "[%s] Este conector no funciona con tu versión de Plex, intenta actualizarla."
|
||||
|
||||
msgctxt "#70304"
|
||||
msgid "[%s] This server requires updating python to version 2.7.9 or higher."
|
||||
msgstr "[%s] Este conector requiere actualizar python a la versión 2.7.9 o superior."
|
||||
# ============
|
||||
|
||||
msgctxt "#70305"
|
||||
msgid "Search in channels"
|
||||
msgstr "Buscar en canales"
|
||||
|
||||
msgctxt "#70306"
|
||||
msgid "Movies by Genre"
|
||||
msgstr "Películas por Generos"
|
||||
|
||||
msgctxt "#70307"
|
||||
msgid "Most popular Movies"
|
||||
msgstr "Películas mas populares"
|
||||
|
||||
msgctxt "#70308"
|
||||
msgid "Top rated Movies"
|
||||
msgstr "Películas mejor valoradas"
|
||||
|
||||
msgctxt "#70309"
|
||||
msgid "Movies Now in Theatres "
|
||||
msgstr "Películas Ahora en cines"
|
||||
|
||||
msgctxt "#70310"
|
||||
msgid "Series by Genre"
|
||||
msgstr "Series por Generos"
|
||||
|
||||
msgctxt "#70311"
|
||||
msgid "Series most polupar"
|
||||
msgstr "Series mas populares"
|
||||
|
||||
msgctxt "#70312"
|
||||
msgid "Series in progress"
|
||||
msgstr "Series en emisión"
|
||||
|
||||
msgctxt "#70313"
|
||||
msgid "Top rated Series"
|
||||
msgstr "Series mejor valoradas"
|
||||
|
||||
msgctxt "#70314"
|
||||
msgid "Actors/Actresses"
|
||||
msgstr "Actores/Actrices"
|
||||
|
||||
msgctxt "#70315"
|
||||
msgid "Recommendations"
|
||||
msgstr "Recomendaciones"
|
||||
|
||||
msgctxt "#70316"
|
||||
msgid "List of Images"
|
||||
msgstr "Lista de Imágenes"
|
||||
|
||||
msgctxt "#70317"
|
||||
msgid "Listen to BSO - List of songs"
|
||||
msgstr "Escuchar BSO - Lista de canciones"
|
||||
|
||||
msgctxt "#70318"
|
||||
msgid "Manage yor trakt account"
|
||||
msgstr "Gestionar con tu cuenta Trakt"
|
||||
|
||||
msgctxt "#70319"
|
||||
msgid "Filming equipment"
|
||||
msgstr "Equipo de rodaje"
|
||||
|
||||
msgctxt "#70320"
|
||||
msgid "Filter search"
|
||||
msgstr "Filtra la búsqueda"
|
||||
|
||||
msgctxt "#70321"
|
||||
msgid "[MAL] Add to your lists/%s"
|
||||
msgstr "[MAL] Añadir a tus listas/%s"
|
||||
|
||||
msgctxt "#70322"
|
||||
msgid "[MAL] in your list of [COLOR %s]%s[/COLOR] Do you want to change?/%s"
|
||||
msgstr "[MAL] En tu lista de [COLOR %s]%s[/COLOR]. ¿Cambiar?/%s"
|
||||
|
||||
msgctxt "#70323"
|
||||
msgid "[Trakt] Manage your account"
|
||||
msgstr "[Trakt] Gestionar con tu cuenta"
|
||||
|
||||
msgctxt "#70324"
|
||||
msgid "[FA] My vote: %s ---> Change?"
|
||||
msgstr "[FA] Mi voto: %s ---> ¿Cambiar?"
|
||||
|
||||
msgctxt "#70325"
|
||||
msgid "[FA] Vote %s"
|
||||
msgstr "[FA] Votar %s"
|
||||
|
||||
msgctxt "#70326"
|
||||
msgid "[FA] Add or remove from a user list"
|
||||
msgstr "[FA] Añadir o quitar de una lista de usuario"
|
||||
|
||||
msgctxt "#70327"
|
||||
msgid "It's part of: %s"
|
||||
msgstr "Es parte de: %s"
|
||||
|
||||
msgctxt "#70328"
|
||||
msgid "%ss similarar"
|
||||
msgstr "%ss similares"
|
||||
|
||||
msgctxt "#70329"
|
||||
msgid "User and/or passwords not configured"
|
||||
msgstr "Usuario y/o contraseñas no configurados"
|
||||
|
||||
msgctxt "#70330"
|
||||
msgid "Error in the user and/or password. Check your credentials"
|
||||
msgstr "Error en el usuario y/o contraseña. Comprueba tus credenciales"
|
||||
|
||||
msgctxt "#70331"
|
||||
msgid "Error during login. Check your credentials
|
||||
msgstr "Error durante el login. Comprueba tus credenciales"
|
||||
|
||||
msgctxt "#70332"
|
||||
msgid "My votes"
|
||||
msgstr "Mis votaciones"
|
||||
|
||||
msgctxt "#70333"
|
||||
msgid "Add new list"
|
||||
msgstr "Añadir una nueva lista"
|
||||
|
||||
msgctxt "#70334"
|
||||
msgid "Action completed successfully"
|
||||
msgstr "Acción completada con éxito"
|
||||
|
||||
msgctxt "#70335"
|
||||
msgid "Error, something has failed during the process"
|
||||
msgstr "Error, algo ha fallado durante el proceso"
|
||||
|
||||
msgctxt "#70336"
|
||||
msgid "Vote %s"
|
||||
msgstr "Votar %s"
|
||||
|
||||
msgctxt "#70337"
|
||||
msgid "Vote completed successfully"
|
||||
msgstr "Voto contabilizado con éxito"
|
||||
|
||||
msgctxt "#70338"
|
||||
msgid "List created correctly"
|
||||
msgstr "Lista creada correctamente"
|
||||
|
||||
msgctxt "#70339"
|
||||
msgid "Fanart.tv website not available. Retry"
|
||||
msgstr "Web de Fanart.tv no disponible. Vuelve a intentarlo"
|
||||
|
||||
msgctxt "#70340"
|
||||
msgid "No images available"
|
||||
msgstr "No hay imágenes disponibles"
|
||||
|
||||
msgctxt "#70341"
|
||||
msgid "[Trakt] Mark %s as not seen"
|
||||
msgstr "[Trakt] Marcar %s como no vista"
|
||||
|
||||
msgctxt "#70342"
|
||||
msgid "[Trakt] Mark %s as seen"
|
||||
msgstr "[Trakt] Marcar %s como vista"
|
||||
|
||||
msgctxt "#70343"
|
||||
msgid "[Trakt] Remove %s from your watchlist"
|
||||
msgstr "[Trakt] Eliminar %s de tu watchlist"
|
||||
|
||||
msgctxt "#70344"
|
||||
msgid "Add to %s your watchlist""
|
||||
msgstr "[Trakt] Añadir %s a tu watchlist"
|
||||
|
||||
msgctxt "#70345"
|
||||
msgid "[Trakt] Remove %s from your collection"
|
||||
msgstr "[Trakt] Eliminar %s de tu colección"
|
||||
|
||||
msgctxt "#70346"
|
||||
msgid "[Trakt] Add %s to your collection
|
||||
msgstr "[Trakt] Añadir %s a tu colección"
|
||||
|
||||
msgctxt "#70347"
|
||||
msgid "Action performed correctly"
|
||||
msgstr "Acción realizada correctamente"
|
||||
|
||||
msgctxt "#70348"
|
||||
msgid "An error occurred in process"
|
||||
msgstr "Hubo error en el proceso"
|
||||
|
||||
msgctxt "#70349"
|
||||
msgid "List sorted by %s. Change order?"
|
||||
msgstr "Lista ordenada por %s. ¿Cambiar orden?"
|
||||
|
||||
msgctxt "#70350"
|
||||
msgid "Search in alfa: %s"
|
||||
msgstr "Buscar en alfa: %s"
|
||||
|
||||
msgctxt "#70351"
|
||||
msgid " Search alternative title: %s"
|
||||
msgstr " Buscar por título alternativo: %s"
|
||||
|
||||
msgctxt "#70352"
|
||||
msgid " Search title in english: %s"
|
||||
msgstr " Buscar por su título en inglés: %s"
|
||||
|
||||
msgctxt "#70353"
|
||||
msgid "Vídeos (Episodes, Trailers...)"
|
||||
msgstr "Vídeos (Episodios, Trailers...)"
|
||||
|
||||
msgctxt "#70354"
|
||||
msgid "Characters/Staff"
|
||||
msgstr "Personajes/Staff"
|
||||
|
||||
msgctxt "#70355"
|
||||
msgid "Prequel: %s"
|
||||
msgstr "Precuela: %s"
|
||||
|
||||
msgctxt "#70356"
|
||||
msgid "Sequel: %s"
|
||||
msgstr "Secuela: %s"
|
||||
|
||||
msgctxt "#70357"
|
||||
msgid "Alternative version: %s"
|
||||
msgstr "Versión alternativa: %s"
|
||||
|
||||
msgctxt "#70358"
|
||||
msgid "Recommendations TMDB"
|
||||
msgstr "Recomendaciones TMDB"
|
||||
|
||||
msgctxt "#70359"
|
||||
msgid "Recommendations MyAnimeList"
|
||||
msgstr "Recomendaciones MyAnimeList"
|
||||
|
||||
msgctxt "#70360"
|
||||
msgid " [COLOR %s][Without subs in castellan][/COLOR]"
|
||||
msgstr " [COLOR %s][Sin subs en castellano][/COLOR]"
|
||||
|
||||
msgctxt "#70361"
|
||||
msgid ">> More Episodes"
|
||||
msgstr ">> Más Episodios"
|
||||
|
||||
msgctxt "#70362"
|
||||
msgid "Episodes"
|
||||
msgstr "Episodios"
|
||||
|
||||
msgctxt "#70363"
|
||||
msgid "Trailers/Promotions"
|
||||
msgstr "Tráilers/Promocionales"
|
||||
|
||||
msgctxt "#70364"
|
||||
msgid "Winter"
|
||||
msgstr "Invierno"
|
||||
|
||||
msgctxt "#70365"
|
||||
msgid "Spring"
|
||||
msgstr "Primavera"
|
||||
|
||||
msgctxt "#70366"
|
||||
msgid "Summer"
|
||||
msgstr "Verano"
|
||||
|
||||
msgctxt "#70367"
|
||||
msgid "Fall"
|
||||
msgstr "Otoño"
|
||||
|
||||
msgctxt "#70368"
|
||||
msgid "(New)"
|
||||
msgstr "(Nuevos)"
|
||||
|
||||
msgctxt "#70369"
|
||||
msgid "(Continuation)"
|
||||
msgstr "(Continuación)"
|
||||
|
||||
msgctxt "#70370"
|
||||
msgid "Characters/Benders"
|
||||
msgstr "Personajes/Dobladores"
|
||||
|
||||
msgctxt "#70371"
|
||||
msgid "Principal"
|
||||
msgstr "Principal"
|
||||
|
||||
msgctxt "#70372"
|
||||
msgid "Secondary"
|
||||
msgstr "Secundario"
|
||||
|
||||
msgctxt "#70373"
|
||||
msgid "Animes where it appears:"
|
||||
msgstr "Animes donde aparece:"
|
||||
|
||||
msgctxt "#70374"
|
||||
msgid "Give voice to/in:"
|
||||
msgstr "Da voz a/en:"
|
||||
|
||||
msgctxt "#70375"
|
||||
msgid "Staff in animes:"
|
||||
msgstr "Staff en animes:"
|
||||
|
||||
msgctxt "#70376"
|
||||
msgid "Info in AniDB [COLOR %s]%s[/COLOR]"
|
||||
msgstr "Info en AniDB [COLOR %s]%s[/COLOR]"
|
||||
|
||||
msgctxt "#70377"
|
||||
msgid " - [COLOR %s]Fansubs in spanish:[/COLOR]"
|
||||
msgstr " - [COLOR %s]Fansubs en español:[/COLOR]"
|
||||
|
||||
msgctxt "#70378"
|
||||
msgid "Complete"
|
||||
msgstr "Completa"
|
||||
|
||||
msgctxt "#70379"
|
||||
msgid "Finished"
|
||||
msgstr "Terminada"
|
||||
|
||||
msgctxt "#70380"
|
||||
msgid "Stalled"
|
||||
msgstr "Pausa"
|
||||
|
||||
msgctxt "#70381"
|
||||
msgid "Dropped"
|
||||
msgstr "Abandonada"
|
||||
|
||||
msgctxt "#70381"
|
||||
msgid "Myanimelist username and/or password blank"
|
||||
msgstr "Usuario y/o contraseña de Myanimelist en blanco"
|
||||
|
||||
msgctxt "#70382"
|
||||
msgid "Currently watching"
|
||||
msgstr "Viendo actualmente"
|
||||
|
||||
msgctxt "#70383"
|
||||
msgid "Completed"
|
||||
msgstr "Completados"
|
||||
|
||||
msgctxt "#70384"
|
||||
msgid "Pause"
|
||||
msgstr "En pausa"
|
||||
|
||||
msgctxt "#70385"
|
||||
msgid "Descarted"
|
||||
msgstr "Descartados"
|
||||
|
||||
msgctxt "#70386"
|
||||
msgid "See later"
|
||||
msgstr "Ver más adelante"
|
||||
|
||||
msgctxt "#70387"
|
||||
msgid "E = In emission | F = Completed | P = Coming soon"
|
||||
msgstr "E=En emisión | F=Finalizado | P=Próximamente"
|
||||
|
||||
msgctxt "#70388"
|
||||
msgid ". Available actions:"
|
||||
msgstr ". Acciones disponibles:"
|
||||
|
||||
msgctxt "#70389"
|
||||
msgid ". In your list [COLOR %s]%s[/COLOR]"
|
||||
msgstr ". En tu lista [COLOR %s]%s[/COLOR]"
|
||||
|
||||
msgctxt "#70390"
|
||||
msgid "Anime: %s%s"
|
||||
msgstr "Anime: %s%s"
|
||||
|
||||
msgctxt "#70391"
|
||||
msgid "Add to list %s"
|
||||
msgstr "Añadir a lista %s"
|
||||
|
||||
msgctxt "#70392"
|
||||
msgid "Rate with a [COLOR %s]%s[/ COLOR]"
|
||||
msgstr "Puntuar con un [COLOR %s]%s[/COLOR]"
|
||||
|
||||
@@ -303,7 +303,7 @@ msgstr "Populares"
|
||||
|
||||
msgctxt "#30985"
|
||||
msgid "Top Rated"
|
||||
msgstr "Top Rated"
|
||||
msgstr "Mejor valoradas"
|
||||
|
||||
msgctxt "#30986"
|
||||
msgid "Search by Collection"
|
||||
@@ -503,7 +503,7 @@ msgstr "Filtrar servidores (Lista Negra)"
|
||||
|
||||
msgctxt "#60001"
|
||||
msgid "Filter server (Black List)\nNo connection available that meets the requirements of the Black list.\nTry again by changing the filter in 'Server Configuration"
|
||||
msgstr "Filtrar servidores (Lista Negra)\nNo hay enlaces disponibles que cumplan los requisitos de su Lista Negra.\nPruebe de nuevo modificando el fíltro en 'Configuracíon Servidores""
|
||||
msgstr "Filtrar servidores (Lista Negra)\nNo hay enlaces disponibles que cumplan los requisitos de su Lista Negra.\nPruebe de nuevo modificando el fíltro en 'Configuracíon Servidores"
|
||||
|
||||
msgctxt "#60003"
|
||||
msgid "Connecting with %s"
|
||||
@@ -2207,7 +2207,7 @@ msgstr "Herramientas de canales"
|
||||
|
||||
msgctxt "#60549"
|
||||
msgid "Check the files * _data.json"
|
||||
msgstr "Comprobar archivos *_data.json","
|
||||
msgstr "Comprobar archivos *_data.json"
|
||||
|
||||
msgctxt "#60550"
|
||||
msgid "Servers locked"
|
||||
@@ -2550,8 +2550,8 @@ msgid "Show option \"All Seasons\"."
|
||||
msgstr "Mostrar la opción \"Todas las temporadas\""
|
||||
|
||||
msgctxt "#60643"
|
||||
msgid "Do not combine the seasons of the series""
|
||||
msgstr "No apilar temporadas de series""
|
||||
msgid "Do not combine the seasons of the series"
|
||||
msgstr "No apilar temporadas de series"
|
||||
|
||||
msgctxt "#60644"
|
||||
msgid "Only if there is one season"
|
||||
@@ -2858,12 +2858,12 @@ msgid "Search %s"
|
||||
msgstr "Buscar %s"
|
||||
|
||||
msgctxt "#70036"
|
||||
msgid "Search actor/actress"
|
||||
msgstr "Buscar actor/actriz"
|
||||
msgid " Search actor/actress"
|
||||
msgstr " Buscar actor/actriz"
|
||||
|
||||
msgctxt "#70037"
|
||||
msgid "Search director, writer..."
|
||||
msgstr "Buscar director, guionista..."
|
||||
msgid " Search director, writer..."
|
||||
msgstr " Buscar director, guionista..."
|
||||
|
||||
msgctxt "#70038"
|
||||
msgid "Custom Filter"
|
||||
@@ -2895,7 +2895,7 @@ msgstr "Sagas y Colecciones"
|
||||
|
||||
msgctxt "#70045"
|
||||
msgid "Movies/TV Shows/Documentaries by Themes"
|
||||
msgstr "Películas/Series/Documentales por Temas""
|
||||
msgstr "Películas/Series/Documentales por Temas"
|
||||
|
||||
msgctxt "#70046"
|
||||
msgid "Search Movies/TV Shows"
|
||||
@@ -2975,7 +2975,7 @@ msgstr "Buscar Series/Películas/Ovas"
|
||||
|
||||
msgctxt "#70065"
|
||||
msgid ">> Next Page"
|
||||
msgstr ">> Página siguiente""
|
||||
msgstr ">> Página siguiente"
|
||||
|
||||
msgctxt "#70066"
|
||||
msgid " Search title in spanish: %s"
|
||||
@@ -3857,4 +3857,412 @@ msgctxt "#70291"
|
||||
msgid "Error, during conversion"
|
||||
msgstr "Error, en conversión"
|
||||
|
||||
# Servers ----
|
||||
msgctxt "#70292"
|
||||
msgid "[%s] File no longer exist on this server."
|
||||
msgstr "[%s] El archivo ya no está presente en el servidor."
|
||||
|
||||
msgctxt "#70293"
|
||||
msgid "[%s] The file is processing or has been deleted."
|
||||
msgstr "[%s] El archivo de video todavía se está procesando o se ha eliminado."
|
||||
|
||||
msgctxt "#70294"
|
||||
msgid "[%s] Link Not valid."
|
||||
msgstr "[%s] Enlace no válido."
|
||||
|
||||
msgctxt "#70295"
|
||||
msgid "[%s] Premium account needed."
|
||||
msgstr "[%s] Debes tener una cuenta premium."
|
||||
|
||||
msgctxt "#70296"
|
||||
msgid "[%s] Internal server error."
|
||||
msgstr "[%s] Error interno del servidor."
|
||||
|
||||
msgctxt "#70297"
|
||||
msgid "[%s] File is awaiting for moderation."
|
||||
msgstr "[%s] El video está esperando por moderación."
|
||||
|
||||
msgctxt "#70298"
|
||||
msgid "[%s] The number of allowed reproductions has been exceeded."
|
||||
msgstr "[%s] Se ha excedido el número de reproducciones permitidas."
|
||||
|
||||
msgctxt "#70299"
|
||||
msgid "[%s] You do not have permission to access this file."
|
||||
msgstr "[%s] No tienes permiso para acceder a este video."
|
||||
|
||||
msgctxt "#70300"
|
||||
msgid "[%s] Too many connections to the server, try later."
|
||||
msgstr "[%s] Demasiadas conexiones al servidor, inténtelo después."
|
||||
|
||||
msgctxt "#70301"
|
||||
msgid "[%s] File deleted for infringement."
|
||||
msgstr "[%s] Archivo eliminado por infracción."
|
||||
|
||||
msgctxt "#70302"
|
||||
msgid "[%s] This server only works from Kodi 17."
|
||||
msgstr "[%s] Este conector solo funciona a partir de Kodi 17."
|
||||
|
||||
msgctxt "#70303"
|
||||
msgid "[%s] This server does not work with your version of Plex, try to update it."
|
||||
msgstr "[%s] Este conector no funciona con tu versión de Plex, intenta actualizarla."
|
||||
|
||||
msgctxt "#70304"
|
||||
msgid "[%s] This server requires updating python to version 2.7.9 or higher."
|
||||
msgstr "[%s] Este conector requiere actualizar python a la versión 2.7.9 o superior."
|
||||
# ============
|
||||
|
||||
msgctxt "#70305"
|
||||
msgid "Search in channels"
|
||||
msgstr "Buscar en canales"
|
||||
|
||||
msgctxt "#70306"
|
||||
msgid "Movies by Genre"
|
||||
msgstr "Películas por Generos"
|
||||
|
||||
msgctxt "#70307"
|
||||
msgid "Most popular Movies"
|
||||
msgstr "Películas mas populares"
|
||||
|
||||
msgctxt "#70308"
|
||||
msgid "Top rated Movies"
|
||||
msgstr "Películas mejor valoradas"
|
||||
|
||||
msgctxt "#70309"
|
||||
msgid "Movies Now in Theatres "
|
||||
msgstr "Películas Ahora en cines"
|
||||
|
||||
msgctxt "#70310"
|
||||
msgid "Series by Genre"
|
||||
msgstr "Series por Generos"
|
||||
|
||||
msgctxt "#70311"
|
||||
msgid "Series most polupar"
|
||||
msgstr "Series mas populares"
|
||||
|
||||
msgctxt "#70312"
|
||||
msgid "Series in progress"
|
||||
msgstr "Series en emisión"
|
||||
|
||||
msgctxt "#70313"
|
||||
msgid "Top rated Series"
|
||||
msgstr "Series mejor valoradas"
|
||||
|
||||
msgctxt "#70314"
|
||||
msgid "Actors/Actresses"
|
||||
msgstr "Actores/Actrices"
|
||||
|
||||
msgctxt "#70315"
|
||||
msgid "Recommendations"
|
||||
msgstr "Recomendaciones"
|
||||
|
||||
msgctxt "#70316"
|
||||
msgid "List of Images"
|
||||
msgstr "Lista de Imágenes"
|
||||
|
||||
msgctxt "#70317"
|
||||
msgid "Listen to BSO - List of songs"
|
||||
msgstr "Escuchar BSO - Lista de canciones"
|
||||
|
||||
msgctxt "#70318"
|
||||
msgid "Manage yor trakt account"
|
||||
msgstr "Gestionar con tu cuenta Trakt"
|
||||
|
||||
msgctxt "#70319"
|
||||
msgid "Filming equipment"
|
||||
msgstr "Equipo de rodaje"
|
||||
|
||||
msgctxt "#70320"
|
||||
msgid "Filter search"
|
||||
msgstr "Filtra la búsqueda"
|
||||
|
||||
msgctxt "#70321"
|
||||
msgid "[MAL] Add to your lists/%s"
|
||||
msgstr "[MAL] Añadir a tus listas/%s"
|
||||
|
||||
msgctxt "#70322"
|
||||
msgid "[MAL] in your list of [COLOR %s]%s[/COLOR] Do you want to change?/%s"
|
||||
msgstr "[MAL] En tu lista de [COLOR %s]%s[/COLOR]. ¿Cambiar?/%s"
|
||||
|
||||
msgctxt "#70323"
|
||||
msgid "[Trakt] Manage your account"
|
||||
msgstr "[Trakt] Gestionar con tu cuenta"
|
||||
|
||||
msgctxt "#70324"
|
||||
msgid "[FA] My vote: %s ---> Change?"
|
||||
msgstr "[FA] Mi voto: %s ---> ¿Cambiar?"
|
||||
|
||||
msgctxt "#70325"
|
||||
msgid "[FA] Vote %s"
|
||||
msgstr "[FA] Votar %s"
|
||||
|
||||
msgctxt "#70326"
|
||||
msgid "[FA] Add or remove from a user list"
|
||||
msgstr "[FA] Añadir o quitar de una lista de usuario"
|
||||
|
||||
msgctxt "#70327"
|
||||
msgid "It's part of: %s"
|
||||
msgstr "Es parte de: %s"
|
||||
|
||||
msgctxt "#70328"
|
||||
msgid "%ss similarar"
|
||||
msgstr "%ss similares"
|
||||
|
||||
msgctxt "#70329"
|
||||
msgid "User and/or passwords not configured"
|
||||
msgstr "Usuario y/o contraseñas no configurados"
|
||||
|
||||
msgctxt "#70330"
|
||||
msgid "Error in the user and/or password. Check your credentials"
|
||||
msgstr "Error en el usuario y/o contraseña. Comprueba tus credenciales"
|
||||
|
||||
msgctxt "#70331"
|
||||
msgid "Error during login. Check your credentials
|
||||
msgstr "Error durante el login. Comprueba tus credenciales"
|
||||
|
||||
msgctxt "#70332"
|
||||
msgid "My votes"
|
||||
msgstr "Mis votaciones"
|
||||
|
||||
msgctxt "#70333"
|
||||
msgid "Add new list"
|
||||
msgstr "Añadir una nueva lista"
|
||||
|
||||
msgctxt "#70334"
|
||||
msgid "Action completed successfully"
|
||||
msgstr "Acción completada con éxito"
|
||||
|
||||
msgctxt "#70335"
|
||||
msgid "Error, something has failed during the process"
|
||||
msgstr "Error, algo ha fallado durante el proceso"
|
||||
|
||||
msgctxt "#70336"
|
||||
msgid "Vote %s"
|
||||
msgstr "Votar %s"
|
||||
|
||||
msgctxt "#70337"
|
||||
msgid "Vote completed successfully"
|
||||
msgstr "Voto contabilizado con éxito"
|
||||
|
||||
msgctxt "#70338"
|
||||
msgid "List created correctly"
|
||||
msgstr "Lista creada correctamente"
|
||||
|
||||
msgctxt "#70339"
|
||||
msgid "Fanart.tv website not available. Retry"
|
||||
msgstr "Web de Fanart.tv no disponible. Vuelve a intentarlo"
|
||||
|
||||
msgctxt "#70340"
|
||||
msgid "No images available"
|
||||
msgstr "No hay imágenes disponibles"
|
||||
|
||||
msgctxt "#70341"
|
||||
msgid "[Trakt] Mark %s as not seen"
|
||||
msgstr "[Trakt] Marcar %s como no vista"
|
||||
|
||||
msgctxt "#70342"
|
||||
msgid "[Trakt] Mark %s as seen"
|
||||
msgstr "[Trakt] Marcar %s como vista"
|
||||
|
||||
msgctxt "#70343"
|
||||
msgid "[Trakt] Remove %s from your watchlist"
|
||||
msgstr "[Trakt] Eliminar %s de tu watchlist"
|
||||
|
||||
msgctxt "#70344"
|
||||
msgid "Add to %s your watchlist""
|
||||
msgstr "[Trakt] Añadir %s a tu watchlist"
|
||||
|
||||
msgctxt "#70345"
|
||||
msgid "[Trakt] Remove %s from your collection"
|
||||
msgstr "[Trakt] Eliminar %s de tu colección"
|
||||
|
||||
msgctxt "#70346"
|
||||
msgid "[Trakt] Add %s to your collection
|
||||
msgstr "[Trakt] Añadir %s a tu colección"
|
||||
|
||||
msgctxt "#70347"
|
||||
msgid "Action performed correctly"
|
||||
msgstr "Acción realizada correctamente"
|
||||
|
||||
msgctxt "#70348"
|
||||
msgid "An error occurred in process"
|
||||
msgstr "Hubo error en el proceso"
|
||||
|
||||
msgctxt "#70349"
|
||||
msgid "List sorted by %s. Change order?"
|
||||
msgstr "Lista ordenada por %s. ¿Cambiar orden?"
|
||||
|
||||
msgctxt "#70350"
|
||||
msgid "Search in alfa: %s"
|
||||
msgstr "Buscar en alfa: %s"
|
||||
|
||||
msgctxt "#70351"
|
||||
msgid " Search alternative title: %s"
|
||||
msgstr " Buscar por título alternativo: %s"
|
||||
|
||||
msgctxt "#70352"
|
||||
msgid " Search title in english: %s"
|
||||
msgstr " Buscar por su título en inglés: %s"
|
||||
|
||||
msgctxt "#70353"
|
||||
msgid "Vídeos (Episodes, Trailers...)"
|
||||
msgstr "Vídeos (Episodios, Trailers...)"
|
||||
|
||||
msgctxt "#70354"
|
||||
msgid "Characters/Staff"
|
||||
msgstr "Personajes/Staff"
|
||||
|
||||
msgctxt "#70355"
|
||||
msgid "Prequel: %s"
|
||||
msgstr "Precuela: %s"
|
||||
|
||||
msgctxt "#70356"
|
||||
msgid "Sequel: %s"
|
||||
msgstr "Secuela: %s"
|
||||
|
||||
msgctxt "#70357"
|
||||
msgid "Alternative version: %s"
|
||||
msgstr "Versión alternativa: %s"
|
||||
|
||||
msgctxt "#70358"
|
||||
msgid "Recommendations TMDB"
|
||||
msgstr "Recomendaciones TMDB"
|
||||
|
||||
msgctxt "#70359"
|
||||
msgid "Recommendations MyAnimeList"
|
||||
msgstr "Recomendaciones MyAnimeList"
|
||||
|
||||
msgctxt "#70360"
|
||||
msgid " [COLOR %s][Without subs in castellan][/COLOR]"
|
||||
msgstr " [COLOR %s][Sin subs en castellano][/COLOR]"
|
||||
|
||||
msgctxt "#70361"
|
||||
msgid ">> More Episodes"
|
||||
msgstr ">> Más Episodios"
|
||||
|
||||
msgctxt "#70362"
|
||||
msgid "Episodes"
|
||||
msgstr "Episodios"
|
||||
|
||||
msgctxt "#70363"
|
||||
msgid "Trailers/Promotions"
|
||||
msgstr "Tráilers/Promocionales"
|
||||
|
||||
msgctxt "#70364"
|
||||
msgid "Winter"
|
||||
msgstr "Invierno"
|
||||
|
||||
msgctxt "#70365"
|
||||
msgid "Spring"
|
||||
msgstr "Primavera"
|
||||
|
||||
msgctxt "#70366"
|
||||
msgid "Summer"
|
||||
msgstr "Verano"
|
||||
|
||||
msgctxt "#70367"
|
||||
msgid "Fall"
|
||||
msgstr "Otoño"
|
||||
|
||||
msgctxt "#70368"
|
||||
msgid "(New)"
|
||||
msgstr "(Nuevos)"
|
||||
|
||||
msgctxt "#70369"
|
||||
msgid "(Continuation)"
|
||||
msgstr "(Continuación)"
|
||||
|
||||
msgctxt "#70370"
|
||||
msgid "Characters/Benders"
|
||||
msgstr "Personajes/Dobladores"
|
||||
|
||||
msgctxt "#70371"
|
||||
msgid "Principal"
|
||||
msgstr "Principal"
|
||||
|
||||
msgctxt "#70372"
|
||||
msgid "Secondary"
|
||||
msgstr "Secundario"
|
||||
|
||||
msgctxt "#70373"
|
||||
msgid "Animes where it appears:"
|
||||
msgstr "Animes donde aparece:"
|
||||
|
||||
msgctxt "#70374"
|
||||
msgid "Give voice to/in:"
|
||||
msgstr "Da voz a/en:"
|
||||
|
||||
msgctxt "#70375"
|
||||
msgid "Staff in animes:"
|
||||
msgstr "Staff en animes:"
|
||||
|
||||
msgctxt "#70376"
|
||||
msgid "Info in AniDB [COLOR %s]%s[/COLOR]"
|
||||
msgstr "Info en AniDB [COLOR %s]%s[/COLOR]"
|
||||
|
||||
msgctxt "#70377"
|
||||
msgid " - [COLOR %s]Fansubs in spanish:[/COLOR]"
|
||||
msgstr " - [COLOR %s]Fansubs en español:[/COLOR]"
|
||||
|
||||
msgctxt "#70378"
|
||||
msgid "Complete"
|
||||
msgstr "Completa"
|
||||
|
||||
msgctxt "#70379"
|
||||
msgid "Finished"
|
||||
msgstr "Terminada"
|
||||
|
||||
msgctxt "#70380"
|
||||
msgid "Stalled"
|
||||
msgstr "Pausa"
|
||||
|
||||
msgctxt "#70381"
|
||||
msgid "Dropped"
|
||||
msgstr "Abandonada"
|
||||
|
||||
msgctxt "#70381"
|
||||
msgid "Myanimelist username and/or password blank"
|
||||
msgstr "Usuario y/o contraseña de Myanimelist en blanco"
|
||||
|
||||
msgctxt "#70382"
|
||||
msgid "Currently watching"
|
||||
msgstr "Viendo actualmente"
|
||||
|
||||
msgctxt "#70383"
|
||||
msgid "Completed"
|
||||
msgstr "Completados"
|
||||
|
||||
msgctxt "#70384"
|
||||
msgid "Pause"
|
||||
msgstr "En pausa"
|
||||
|
||||
msgctxt "#70385"
|
||||
msgid "Descarted"
|
||||
msgstr "Descartados"
|
||||
|
||||
msgctxt "#70386"
|
||||
msgid "See later"
|
||||
msgstr "Ver más adelante"
|
||||
|
||||
msgctxt "#70387"
|
||||
msgid "E = In emission | F = Completed | P = Coming soon"
|
||||
msgstr "E=En emisión | F=Finalizado | P=Próximamente"
|
||||
|
||||
msgctxt "#70388"
|
||||
msgid ". Available actions:"
|
||||
msgstr ". Acciones disponibles:"
|
||||
|
||||
msgctxt "#70389"
|
||||
msgid ". In your list [COLOR %s]%s[/COLOR]"
|
||||
msgstr ". En tu lista [COLOR %s]%s[/COLOR]"
|
||||
|
||||
msgctxt "#70390"
|
||||
msgid "Anime: %s%s"
|
||||
msgstr "Anime: %s%s"
|
||||
|
||||
msgctxt "#70391"
|
||||
msgid "Add to list %s"
|
||||
msgstr "Añadir a lista %s"
|
||||
|
||||
msgctxt "#70392"
|
||||
msgid "Rate with a [COLOR %s]%s[/ COLOR]"
|
||||
msgstr "Puntuar con un [COLOR %s]%s[/COLOR]"
|
||||
|
||||
@@ -303,7 +303,7 @@ msgstr "Populares"
|
||||
|
||||
msgctxt "#30985"
|
||||
msgid "Top Rated"
|
||||
msgstr "Top Rated"
|
||||
msgstr "Mejor valoradas"
|
||||
|
||||
msgctxt "#30986"
|
||||
msgid "Search by Collection"
|
||||
@@ -503,7 +503,7 @@ msgstr "Filtrar servidores (Lista Negra)"
|
||||
|
||||
msgctxt "#60001"
|
||||
msgid "Filter server (Black List)\nNo connection available that meets the requirements of the Black list.\nTry again by changing the filter in 'Server Configuration"
|
||||
msgstr "Filtrar servidores (Lista Negra)\nNo hay enlaces disponibles que cumplan los requisitos de su Lista Negra.\nPruebe de nuevo modificando el fíltro en 'Configuracíon Servidores""
|
||||
msgstr "Filtrar servidores (Lista Negra)\nNo hay enlaces disponibles que cumplan los requisitos de su Lista Negra.\nPruebe de nuevo modificando el fíltro en 'Configuracíon Servidores"
|
||||
|
||||
msgctxt "#60003"
|
||||
msgid "Connecting with %s"
|
||||
@@ -2207,7 +2207,7 @@ msgstr "Herramientas de canales"
|
||||
|
||||
msgctxt "#60549"
|
||||
msgid "Check the files * _data.json"
|
||||
msgstr "Comprobar archivos *_data.json","
|
||||
msgstr "Comprobar archivos *_data.json"
|
||||
|
||||
msgctxt "#60550"
|
||||
msgid "Servers locked"
|
||||
@@ -2550,8 +2550,8 @@ msgid "Show option \"All Seasons\"."
|
||||
msgstr "Mostrar la opción \"Todas las temporadas\""
|
||||
|
||||
msgctxt "#60643"
|
||||
msgid "Do not combine the seasons of the series""
|
||||
msgstr "No apilar temporadas de series""
|
||||
msgid "Do not combine the seasons of the series"
|
||||
msgstr "No apilar temporadas de series"
|
||||
|
||||
msgctxt "#60644"
|
||||
msgid "Only if there is one season"
|
||||
@@ -2858,12 +2858,12 @@ msgid "Search %s"
|
||||
msgstr "Buscar %s"
|
||||
|
||||
msgctxt "#70036"
|
||||
msgid "Search actor/actress"
|
||||
msgstr "Buscar actor/actriz"
|
||||
msgid " Search actor/actress"
|
||||
msgstr " Buscar actor/actriz"
|
||||
|
||||
msgctxt "#70037"
|
||||
msgid "Search director, writer..."
|
||||
msgstr "Buscar director, guionista..."
|
||||
msgid " Search director, writer..."
|
||||
msgstr " Buscar director, guionista..."
|
||||
|
||||
msgctxt "#70038"
|
||||
msgid "Custom Filter"
|
||||
@@ -2895,7 +2895,7 @@ msgstr "Sagas y Colecciones"
|
||||
|
||||
msgctxt "#70045"
|
||||
msgid "Movies/TV Shows/Documentaries by Themes"
|
||||
msgstr "Películas/Series/Documentales por Temas""
|
||||
msgstr "Películas/Series/Documentales por Temas"
|
||||
|
||||
msgctxt "#70046"
|
||||
msgid "Search Movies/TV Shows"
|
||||
@@ -2975,7 +2975,7 @@ msgstr "Buscar Series/Películas/Ovas"
|
||||
|
||||
msgctxt "#70065"
|
||||
msgid ">> Next Page"
|
||||
msgstr ">> Página siguiente""
|
||||
msgstr ">> Página siguiente"
|
||||
|
||||
msgctxt "#70066"
|
||||
msgid " Search title in spanish: %s"
|
||||
@@ -3857,4 +3857,412 @@ msgctxt "#70291"
|
||||
msgid "Error, during conversion"
|
||||
msgstr "Error, en conversión"
|
||||
|
||||
# Servers ----
|
||||
msgctxt "#70292"
|
||||
msgid "[%s] File no longer exist on this server."
|
||||
msgstr "[%s] El archivo ya no está presente en el servidor."
|
||||
|
||||
msgctxt "#70293"
|
||||
msgid "[%s] The file is processing or has been deleted."
|
||||
msgstr "[%s] El archivo de video todavía se está procesando o se ha eliminado."
|
||||
|
||||
msgctxt "#70294"
|
||||
msgid "[%s] Link Not valid."
|
||||
msgstr "[%s] Enlace no válido."
|
||||
|
||||
msgctxt "#70295"
|
||||
msgid "[%s] Premium account needed."
|
||||
msgstr "[%s] Debes tener una cuenta premium."
|
||||
|
||||
msgctxt "#70296"
|
||||
msgid "[%s] Internal server error."
|
||||
msgstr "[%s] Error interno del servidor."
|
||||
|
||||
msgctxt "#70297"
|
||||
msgid "[%s] File is awaiting for moderation."
|
||||
msgstr "[%s] El video está esperando por moderación."
|
||||
|
||||
msgctxt "#70298"
|
||||
msgid "[%s] The number of allowed reproductions has been exceeded."
|
||||
msgstr "[%s] Se ha excedido el número de reproducciones permitidas."
|
||||
|
||||
msgctxt "#70299"
|
||||
msgid "[%s] You do not have permission to access this file."
|
||||
msgstr "[%s] No tienes permiso para acceder a este video."
|
||||
|
||||
msgctxt "#70300"
|
||||
msgid "[%s] Too many connections to the server, try later."
|
||||
msgstr "[%s] Demasiadas conexiones al servidor, inténtelo después."
|
||||
|
||||
msgctxt "#70301"
|
||||
msgid "[%s] File deleted for infringement."
|
||||
msgstr "[%s] Archivo eliminado por infracción."
|
||||
|
||||
msgctxt "#70302"
|
||||
msgid "[%s] This server only works from Kodi 17."
|
||||
msgstr "[%s] Este conector solo funciona a partir de Kodi 17."
|
||||
|
||||
msgctxt "#70303"
|
||||
msgid "[%s] This server does not work with your version of Plex, try to update it."
|
||||
msgstr "[%s] Este conector no funciona con tu versión de Plex, intenta actualizarla."
|
||||
|
||||
msgctxt "#70304"
|
||||
msgid "[%s] This server requires updating python to version 2.7.9 or higher."
|
||||
msgstr "[%s] Este conector requiere actualizar python a la versión 2.7.9 o superior."
|
||||
# ============
|
||||
|
||||
msgctxt "#70305"
|
||||
msgid "Search in channels"
|
||||
msgstr "Buscar en canales"
|
||||
|
||||
msgctxt "#70306"
|
||||
msgid "Movies by Genre"
|
||||
msgstr "Películas por Generos"
|
||||
|
||||
msgctxt "#70307"
|
||||
msgid "Most popular Movies"
|
||||
msgstr "Películas mas populares"
|
||||
|
||||
msgctxt "#70308"
|
||||
msgid "Top rated Movies"
|
||||
msgstr "Películas mejor valoradas"
|
||||
|
||||
msgctxt "#70309"
|
||||
msgid "Movies Now in Theatres "
|
||||
msgstr "Películas Ahora en cines"
|
||||
|
||||
msgctxt "#70310"
|
||||
msgid "Series by Genre"
|
||||
msgstr "Series por Generos"
|
||||
|
||||
msgctxt "#70311"
|
||||
msgid "Series most polupar"
|
||||
msgstr "Series mas populares"
|
||||
|
||||
msgctxt "#70312"
|
||||
msgid "Series in progress"
|
||||
msgstr "Series en emisión"
|
||||
|
||||
msgctxt "#70313"
|
||||
msgid "Top rated Series"
|
||||
msgstr "Series mejor valoradas"
|
||||
|
||||
msgctxt "#70314"
|
||||
msgid "Actors/Actresses"
|
||||
msgstr "Actores/Actrices"
|
||||
|
||||
msgctxt "#70315"
|
||||
msgid "Recommendations"
|
||||
msgstr "Recomendaciones"
|
||||
|
||||
msgctxt "#70316"
|
||||
msgid "List of Images"
|
||||
msgstr "Lista de Imágenes"
|
||||
|
||||
msgctxt "#70317"
|
||||
msgid "Listen to BSO - List of songs"
|
||||
msgstr "Escuchar BSO - Lista de canciones"
|
||||
|
||||
msgctxt "#70318"
|
||||
msgid "Manage yor trakt account"
|
||||
msgstr "Gestionar con tu cuenta Trakt"
|
||||
|
||||
msgctxt "#70319"
|
||||
msgid "Filming equipment"
|
||||
msgstr "Equipo de rodaje"
|
||||
|
||||
msgctxt "#70320"
|
||||
msgid "Filter search"
|
||||
msgstr "Filtra la búsqueda"
|
||||
|
||||
msgctxt "#70321"
|
||||
msgid "[MAL] Add to your lists/%s"
|
||||
msgstr "[MAL] Añadir a tus listas/%s"
|
||||
|
||||
msgctxt "#70322"
|
||||
msgid "[MAL] in your list of [COLOR %s]%s[/COLOR] Do you want to change?/%s"
|
||||
msgstr "[MAL] En tu lista de [COLOR %s]%s[/COLOR]. ¿Cambiar?/%s"
|
||||
|
||||
msgctxt "#70323"
|
||||
msgid "[Trakt] Manage your account"
|
||||
msgstr "[Trakt] Gestionar con tu cuenta"
|
||||
|
||||
msgctxt "#70324"
|
||||
msgid "[FA] My vote: %s ---> Change?"
|
||||
msgstr "[FA] Mi voto: %s ---> ¿Cambiar?"
|
||||
|
||||
msgctxt "#70325"
|
||||
msgid "[FA] Vote %s"
|
||||
msgstr "[FA] Votar %s"
|
||||
|
||||
msgctxt "#70326"
|
||||
msgid "[FA] Add or remove from a user list"
|
||||
msgstr "[FA] Añadir o quitar de una lista de usuario"
|
||||
|
||||
msgctxt "#70327"
|
||||
msgid "It's part of: %s"
|
||||
msgstr "Es parte de: %s"
|
||||
|
||||
msgctxt "#70328"
|
||||
msgid "%ss similarar"
|
||||
msgstr "%ss similares"
|
||||
|
||||
msgctxt "#70329"
|
||||
msgid "User and/or passwords not configured"
|
||||
msgstr "Usuario y/o contraseñas no configurados"
|
||||
|
||||
msgctxt "#70330"
|
||||
msgid "Error in the user and/or password. Check your credentials"
|
||||
msgstr "Error en el usuario y/o contraseña. Comprueba tus credenciales"
|
||||
|
||||
msgctxt "#70331"
|
||||
msgid "Error during login. Check your credentials
|
||||
msgstr "Error durante el login. Comprueba tus credenciales"
|
||||
|
||||
msgctxt "#70332"
|
||||
msgid "My votes"
|
||||
msgstr "Mis votaciones"
|
||||
|
||||
msgctxt "#70333"
|
||||
msgid "Add new list"
|
||||
msgstr "Añadir una nueva lista"
|
||||
|
||||
msgctxt "#70334"
|
||||
msgid "Action completed successfully"
|
||||
msgstr "Acción completada con éxito"
|
||||
|
||||
msgctxt "#70335"
|
||||
msgid "Error, something has failed during the process"
|
||||
msgstr "Error, algo ha fallado durante el proceso"
|
||||
|
||||
msgctxt "#70336"
|
||||
msgid "Vote %s"
|
||||
msgstr "Votar %s"
|
||||
|
||||
msgctxt "#70337"
|
||||
msgid "Vote completed successfully"
|
||||
msgstr "Voto contabilizado con éxito"
|
||||
|
||||
msgctxt "#70338"
|
||||
msgid "List created correctly"
|
||||
msgstr "Lista creada correctamente"
|
||||
|
||||
msgctxt "#70339"
|
||||
msgid "Fanart.tv website not available. Retry"
|
||||
msgstr "Web de Fanart.tv no disponible. Vuelve a intentarlo"
|
||||
|
||||
msgctxt "#70340"
|
||||
msgid "No images available"
|
||||
msgstr "No hay imágenes disponibles"
|
||||
|
||||
msgctxt "#70341"
|
||||
msgid "[Trakt] Mark %s as not seen"
|
||||
msgstr "[Trakt] Marcar %s como no vista"
|
||||
|
||||
msgctxt "#70342"
|
||||
msgid "[Trakt] Mark %s as seen"
|
||||
msgstr "[Trakt] Marcar %s como vista"
|
||||
|
||||
msgctxt "#70343"
|
||||
msgid "[Trakt] Remove %s from your watchlist"
|
||||
msgstr "[Trakt] Eliminar %s de tu watchlist"
|
||||
|
||||
msgctxt "#70344"
|
||||
msgid "Add to %s your watchlist""
|
||||
msgstr "[Trakt] Añadir %s a tu watchlist"
|
||||
|
||||
msgctxt "#70345"
|
||||
msgid "[Trakt] Remove %s from your collection"
|
||||
msgstr "[Trakt] Eliminar %s de tu colección"
|
||||
|
||||
msgctxt "#70346"
|
||||
msgid "[Trakt] Add %s to your collection
|
||||
msgstr "[Trakt] Añadir %s a tu colección"
|
||||
|
||||
msgctxt "#70347"
|
||||
msgid "Action performed correctly"
|
||||
msgstr "Acción realizada correctamente"
|
||||
|
||||
msgctxt "#70348"
|
||||
msgid "An error occurred in process"
|
||||
msgstr "Hubo error en el proceso"
|
||||
|
||||
msgctxt "#70349"
|
||||
msgid "List sorted by %s. Change order?"
|
||||
msgstr "Lista ordenada por %s. ¿Cambiar orden?"
|
||||
|
||||
msgctxt "#70350"
|
||||
msgid "Search in alfa: %s"
|
||||
msgstr "Buscar en alfa: %s"
|
||||
|
||||
msgctxt "#70351"
|
||||
msgid " Search alternative title: %s"
|
||||
msgstr " Buscar por título alternativo: %s"
|
||||
|
||||
msgctxt "#70352"
|
||||
msgid " Search title in english: %s"
|
||||
msgstr " Buscar por su título en inglés: %s"
|
||||
|
||||
msgctxt "#70353"
|
||||
msgid "Vídeos (Episodes, Trailers...)"
|
||||
msgstr "Vídeos (Episodios, Trailers...)"
|
||||
|
||||
msgctxt "#70354"
|
||||
msgid "Characters/Staff"
|
||||
msgstr "Personajes/Staff"
|
||||
|
||||
msgctxt "#70355"
|
||||
msgid "Prequel: %s"
|
||||
msgstr "Precuela: %s"
|
||||
|
||||
msgctxt "#70356"
|
||||
msgid "Sequel: %s"
|
||||
msgstr "Secuela: %s"
|
||||
|
||||
msgctxt "#70357"
|
||||
msgid "Alternative version: %s"
|
||||
msgstr "Versión alternativa: %s"
|
||||
|
||||
msgctxt "#70358"
|
||||
msgid "Recommendations TMDB"
|
||||
msgstr "Recomendaciones TMDB"
|
||||
|
||||
msgctxt "#70359"
|
||||
msgid "Recommendations MyAnimeList"
|
||||
msgstr "Recomendaciones MyAnimeList"
|
||||
|
||||
msgctxt "#70360"
|
||||
msgid " [COLOR %s][Without subs in castellan][/COLOR]"
|
||||
msgstr " [COLOR %s][Sin subs en castellano][/COLOR]"
|
||||
|
||||
msgctxt "#70361"
|
||||
msgid ">> More Episodes"
|
||||
msgstr ">> Más Episodios"
|
||||
|
||||
msgctxt "#70362"
|
||||
msgid "Episodes"
|
||||
msgstr "Episodios"
|
||||
|
||||
msgctxt "#70363"
|
||||
msgid "Trailers/Promotions"
|
||||
msgstr "Tráilers/Promocionales"
|
||||
|
||||
msgctxt "#70364"
|
||||
msgid "Winter"
|
||||
msgstr "Invierno"
|
||||
|
||||
msgctxt "#70365"
|
||||
msgid "Spring"
|
||||
msgstr "Primavera"
|
||||
|
||||
msgctxt "#70366"
|
||||
msgid "Summer"
|
||||
msgstr "Verano"
|
||||
|
||||
msgctxt "#70367"
|
||||
msgid "Fall"
|
||||
msgstr "Otoño"
|
||||
|
||||
msgctxt "#70368"
|
||||
msgid "(New)"
|
||||
msgstr "(Nuevos)"
|
||||
|
||||
msgctxt "#70369"
|
||||
msgid "(Continuation)"
|
||||
msgstr "(Continuación)"
|
||||
|
||||
msgctxt "#70370"
|
||||
msgid "Characters/Benders"
|
||||
msgstr "Personajes/Dobladores"
|
||||
|
||||
msgctxt "#70371"
|
||||
msgid "Principal"
|
||||
msgstr "Principal"
|
||||
|
||||
msgctxt "#70372"
|
||||
msgid "Secondary"
|
||||
msgstr "Secundario"
|
||||
|
||||
msgctxt "#70373"
|
||||
msgid "Animes where it appears:"
|
||||
msgstr "Animes donde aparece:"
|
||||
|
||||
msgctxt "#70374"
|
||||
msgid "Give voice to/in:"
|
||||
msgstr "Da voz a/en:"
|
||||
|
||||
msgctxt "#70375"
|
||||
msgid "Staff in animes:"
|
||||
msgstr "Staff en animes:"
|
||||
|
||||
msgctxt "#70376"
|
||||
msgid "Info in AniDB [COLOR %s]%s[/COLOR]"
|
||||
msgstr "Info en AniDB [COLOR %s]%s[/COLOR]"
|
||||
|
||||
msgctxt "#70377"
|
||||
msgid " - [COLOR %s]Fansubs in spanish:[/COLOR]"
|
||||
msgstr " - [COLOR %s]Fansubs en español:[/COLOR]"
|
||||
|
||||
msgctxt "#70378"
|
||||
msgid "Complete"
|
||||
msgstr "Completa"
|
||||
|
||||
msgctxt "#70379"
|
||||
msgid "Finished"
|
||||
msgstr "Terminada"
|
||||
|
||||
msgctxt "#70380"
|
||||
msgid "Stalled"
|
||||
msgstr "Pausa"
|
||||
|
||||
msgctxt "#70381"
|
||||
msgid "Dropped"
|
||||
msgstr "Abandonada"
|
||||
|
||||
msgctxt "#70381"
|
||||
msgid "Myanimelist username and/or password blank"
|
||||
msgstr "Usuario y/o contraseña de Myanimelist en blanco"
|
||||
|
||||
msgctxt "#70382"
|
||||
msgid "Currently watching"
|
||||
msgstr "Viendo actualmente"
|
||||
|
||||
msgctxt "#70383"
|
||||
msgid "Completed"
|
||||
msgstr "Completados"
|
||||
|
||||
msgctxt "#70384"
|
||||
msgid "Pause"
|
||||
msgstr "En pausa"
|
||||
|
||||
msgctxt "#70385"
|
||||
msgid "Descarted"
|
||||
msgstr "Descartados"
|
||||
|
||||
msgctxt "#70386"
|
||||
msgid "See later"
|
||||
msgstr "Ver más adelante"
|
||||
|
||||
msgctxt "#70387"
|
||||
msgid "E = In emission | F = Completed | P = Coming soon"
|
||||
msgstr "E=En emisión | F=Finalizado | P=Próximamente"
|
||||
|
||||
msgctxt "#70388"
|
||||
msgid ". Available actions:"
|
||||
msgstr ". Acciones disponibles:"
|
||||
|
||||
msgctxt "#70389"
|
||||
msgid ". In your list [COLOR %s]%s[/COLOR]"
|
||||
msgstr ". En tu lista [COLOR %s]%s[/COLOR]"
|
||||
|
||||
msgctxt "#70390"
|
||||
msgid "Anime: %s%s"
|
||||
msgstr "Anime: %s%s"
|
||||
|
||||
msgctxt "#70391"
|
||||
msgid "Add to list %s"
|
||||
msgstr "Añadir a lista %s"
|
||||
|
||||
msgctxt "#70392"
|
||||
msgid "Rate with a [COLOR %s]%s[/ COLOR]"
|
||||
msgstr "Puntuar con un [COLOR %s]%s[/COLOR]"
|
||||
|
||||
@@ -6,6 +6,10 @@
|
||||
{
|
||||
"pattern": "https://estream.to/embed-([a-z0-9]+).html",
|
||||
"url": "https://estream.to/\\1.html"
|
||||
},
|
||||
{
|
||||
"pattern": "https://estream.xyz/embed-([a-z0-9]+).html",
|
||||
"url": "https://estream.to/\\1.html"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
42
plugin.video.alfa/servers/jawcloud.json
Normal file
42
plugin.video.alfa/servers/jawcloud.json
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"active": true,
|
||||
"find_videos": {
|
||||
"ignore_urls": [],
|
||||
"patterns": [
|
||||
{
|
||||
"pattern": "(jawcloud.co/embed-([A-z0-9]+))",
|
||||
"url": "https://\\1.html"
|
||||
}
|
||||
]
|
||||
},
|
||||
"free": true,
|
||||
"id": "jawcloud",
|
||||
"name": "jawcloud",
|
||||
"settings": [
|
||||
{
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"5"
|
||||
],
|
||||
"type": "list",
|
||||
"visible": false
|
||||
}
|
||||
],
|
||||
"thumbnail": "https://s8.postimg.cc/b64mzlgxh/jawcloud1.png"
|
||||
}
|
||||
20
plugin.video.alfa/servers/jawcloud.py
Normal file
20
plugin.video.alfa/servers/jawcloud.py
Normal file
@@ -0,0 +1,20 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from core import httptools
|
||||
from core import scrapertools
|
||||
from platformcode import logger
|
||||
|
||||
|
||||
def test_video_exists(page_url):
|
||||
logger.info("(page_url='%s')" % page_url)
|
||||
return True, ""
|
||||
|
||||
|
||||
def get_video_url(page_url, user="", password="", video_password=""):
|
||||
logger.info("(page_url='%s')" % page_url)
|
||||
data = httptools.downloadpage(page_url).data
|
||||
video_urls = []
|
||||
videourl = scrapertools.find_single_match(data, 'source src="([^"]+)')
|
||||
video_urls.append([".MP4 [jawcloud]", videourl])
|
||||
|
||||
return video_urls
|
||||
Reference in New Issue
Block a user