Merge remote-tracking branch 'origin/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.7.3" provider-name="Alfa Addon">
|
||||
<addon id="plugin.video.alfa" name="Alfa" version="2.7.4" provider-name="Alfa Addon">
|
||||
<requires>
|
||||
<import addon="xbmc.python" version="2.1.0"/>
|
||||
<import addon="script.module.libtorrent" optional="true"/>
|
||||
@@ -19,17 +19,17 @@
|
||||
</assets>
|
||||
<news>[B]Estos son los cambios para esta versión:[/B]
|
||||
[COLOR green][B]Canales agregados y arreglos[/B][/COLOR]
|
||||
¤ allcalidad ¤ cinecalidad
|
||||
¤ repelis ¤ cumlouder
|
||||
¤ porntrex ¤ crunchyroll
|
||||
¤ pedropolis ¤ pepecine
|
||||
¤ repelis ¤ thevid
|
||||
¤ vevio ¤ danimados
|
||||
¤ sipeliculas ¤ cinecalidad
|
||||
¤ locopelis ¤ pelisipad
|
||||
¤ divxtotal ¤ elitetorrent
|
||||
¤ estrenosgo ¤ grantorrent
|
||||
¤ mejortorrent1 ¤ newpct1
|
||||
¤ danimados ¤ fanpelis
|
||||
¤ repelis
|
||||
¤ tvvip ¤ zonatorrent
|
||||
¤ maxipelis24 ¤ wikiseries
|
||||
¤ arreglos internos
|
||||
¤ Agradecimientos a @angedam, @chivmalev, @alaquepasa por colaborar en ésta versión
|
||||
¤ Agradecimientos a @angedam y @chivmalev por colaborar en ésta versión
|
||||
|
||||
</news>
|
||||
<description lang="es">Navega con Kodi por páginas web para ver sus videos de manera fácil.</description>
|
||||
|
||||
@@ -161,6 +161,7 @@ def findvideos(item):
|
||||
itemlist.extend(servertools.find_video_items(data=data))
|
||||
|
||||
for videoitem in itemlist:
|
||||
videoitem.channel = item.channel
|
||||
videoitem.title = '[%s]' % videoitem.server.capitalize()
|
||||
|
||||
return itemlist
|
||||
|
||||
@@ -324,7 +324,7 @@ def findvideos(item):
|
||||
url = server_url[server_id] + video_id + '.html'
|
||||
elif server_id == 'BitTorrent':
|
||||
import urllib
|
||||
base_url = '%sprotect/v.php' % host
|
||||
base_url = '%s/protect/v.php' % host
|
||||
post = {'i':video_id, 'title':item.title}
|
||||
post = urllib.urlencode(post)
|
||||
headers = {'Referer':item.url}
|
||||
|
||||
@@ -519,17 +519,35 @@ def findvideos(item):
|
||||
item, itemlist = generictools.post_tmdb_findvideos(item, itemlist)
|
||||
|
||||
#Ahora tratamos los enlaces .torrent
|
||||
for scrapedurl in matches: #leemos los torrents con la diferentes calidades
|
||||
for scrapedurl in matches: #leemos los torrents con la diferentes calidades
|
||||
#Generamos una copia de Item para trabajar sobre ella
|
||||
item_local = item.clone()
|
||||
|
||||
#Buscamos si ya tiene tamaño, si no, los buscamos en el archivo .torrent
|
||||
size = scrapertools.find_single_match(item_local.quality, '\s\[(\d+,?\d*?\s\w\s?[b|B])\]')
|
||||
if not size:
|
||||
size = generictools.get_torrent_size(item_local.url) #Buscamos el tamaño en el .torrent
|
||||
if size:
|
||||
item_local.title = re.sub(r'\s\[\d+,?\d*?\s\w[b|B]\]', '', item_local.title) #Quitamos size de título, si lo traía
|
||||
item_local.title = '%s [%s]' % (item_local.title, size) #Agregamos size al final del título
|
||||
size = size.replace('GB', 'G B').replace('Gb', 'G b').replace('MB', 'M B').replace('Mb', 'M b')
|
||||
item_local.quality = re.sub(r'\s\[\d+,?\d*?\s\w\s?[b|B]\]', '', item_local.quality) #Quitamos size de calidad, si lo traía
|
||||
item_local.quality = '%s [%s]' % (item_local.quality, size) #Agregamos size al final de la calidad
|
||||
|
||||
#Ahora pintamos el link del Torrent
|
||||
item_local.url = scrapedurl
|
||||
if host not in item_local.url and host.replace('https', 'http') not in item_local.url :
|
||||
item_local.url = host + item_local.url
|
||||
item_local.title = '[COLOR yellow][?][/COLOR] [COLOR yellow][Torrent][/COLOR] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR]' % (item_local.quality, str(item_local.language)) #Preparamos título de Torrent
|
||||
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\[?\]?\]\[\/COLOR\]', '', item_local.title) #Quitamos etiquetas vacías
|
||||
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\/COLOR\]', '', item_local.title) #Quitamos colores vacíos
|
||||
item_local.title = '[COLOR yellow][?][/COLOR] [COLOR yellow][Torrent][/COLOR] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR]' % (item_local.quality, str(item_local.language))
|
||||
|
||||
#Preparamos título y calidad, quitamos etiquetas vacías
|
||||
item_local.title = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.title)
|
||||
item_local.title = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.title)
|
||||
item_local.title = item_local.title.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
|
||||
item_local.quality = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.quality)
|
||||
item_local.quality = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.quality)
|
||||
item_local.quality = item_local.quality.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
|
||||
|
||||
item_local.alive = "??" #Calidad del link sin verificar
|
||||
item_local.action = "play" #Visualizar vídeo
|
||||
item_local.server = "torrent" #Seridor Torrent
|
||||
|
||||
@@ -171,8 +171,11 @@ def listado(item):
|
||||
|
||||
#Limpiamos el título de la basura innecesaria
|
||||
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 = 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", "").replace("temporada", "").replace("Temporada", "").replace("capitulo", "").replace("Capitulo", "")
|
||||
|
||||
title = re.sub(r'(?:\d+)?x.?\s?\d+', '', title)
|
||||
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
|
||||
@@ -190,16 +193,17 @@ def listado(item):
|
||||
item_local.contentType = "episode"
|
||||
item_local.extra = "series"
|
||||
epi_mult = scrapertools.find_single_match(item_local.url, r'cap.*?-\d+-al-(\d+)')
|
||||
item_local.contentSeason = scrapertools.find_single_match(item_local.url, r'temp.*?-(\d+)')
|
||||
item_local.contentSeason = scrapertools.find_single_match(item_local.url, r'temporada-(\d+)')
|
||||
item_local.contentEpisodeNumber = scrapertools.find_single_match(item_local.url, r'cap.*?-(\d+)')
|
||||
if not item_local.contentSeason:
|
||||
item_local.contentSeason = scrapertools.find_single_match(item_local.url, r'-(\d+)[x|X]\d+')
|
||||
if not item_local.contentEpisodeNumber:
|
||||
item_local.contentEpisodeNumber = scrapertools.find_single_match(item_local.url, r'-\d+[x|X](\d+)')
|
||||
if item_local.contentSeason < 1:
|
||||
item_local.contentSeason = 1
|
||||
if not item_local.contentSeason or item_local.contentSeason < 1:
|
||||
item_local.contentSeason = 0
|
||||
if item_local.contentEpisodeNumber < 1:
|
||||
item_local.contentEpisodeNumber = 1
|
||||
|
||||
item_local.contentSerieName = title
|
||||
if epi_mult:
|
||||
title = "%sx%s al %s -" % (item_local.contentSeason, str(item_local.contentEpisodeNumber).zfill(2), str(epi_mult).zfill(2)) #Creamos un título con el rango de episodios
|
||||
@@ -269,11 +273,11 @@ def findvideos(item):
|
||||
#data = unicode(data, "utf-8", errors="replace")
|
||||
|
||||
#Añadimos el tamaño para todos
|
||||
size = scrapertools.find_single_match(item.quality, '\s\[(\d+,?\d*?\s\w[b|B]s)\]')
|
||||
size = scrapertools.find_single_match(item.quality, '\s\[(\d+,?\d*?\s\w\s?[b|B]s)\]')
|
||||
if size:
|
||||
item.title = re.sub('\s\[\d+,?\d*?\s\w[b|B]s\]', '', item.title) #Quitamos size de título, si lo traía
|
||||
item.title = '%s [%s]' % (item.title, size) #Agregamos size al final del título
|
||||
item.quality = re.sub('\s\[\d+,?\d*?\s\w[b|B]s\]', '', item.quality) #Quitamos size de calidad, si lo traía
|
||||
item.quality = re.sub('\s\[\d+,?\d*?\s\w\s?[b|B]s\]', '', item.quality) #Quitamos size de calidad, si lo traía
|
||||
|
||||
patron_t = '<div class="enlace_descarga".*?<a href="(.*?\.torrent)"'
|
||||
link_torrent = scrapertools.find_single_match(data, patron_t)
|
||||
@@ -299,9 +303,11 @@ def findvideos(item):
|
||||
#Llamamos al método para crear el título general del vídeo, con toda la información obtenida de TMDB
|
||||
item, itemlist = generictools.post_tmdb_findvideos(item, itemlist)
|
||||
|
||||
if not size:
|
||||
size = generictools.get_torrent_size(link_torrent) #Buscamos el tamaño en el .torrent
|
||||
if size:
|
||||
item.quality = '%s [%s]' % (item.quality, size) #Agregamos size al final de calidad
|
||||
item.quality = item.quality.replace("G", "G ").replace("M", "M ") #Se evita la palabra reservada en Unify
|
||||
item.quality = item.quality.replace("GB", "G B").replace("MB", "M B") #Se evita la palabra reservada en Unify
|
||||
|
||||
#Generamos una copia de Item para trabajar sobre ella
|
||||
item_local = item.clone()
|
||||
@@ -313,8 +319,15 @@ def findvideos(item):
|
||||
item_local.quality += "[Torrent]"
|
||||
item_local.url = link_torrent
|
||||
item_local.title = '[COLOR yellow][?][/COLOR] [COLOR yellow][Torrent][/COLOR] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR]' % (item_local.quality, str(item_local.language)) #Preparamos título de Torrent
|
||||
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\[?\]?\]\[\/COLOR\]', '', item_local.title) #Quitamos etiquetas vacías
|
||||
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\/COLOR\]', '', item_local.title) #Quitamos colores vacíos
|
||||
|
||||
#Preparamos título y calidad, quitamos etiquetas vacías
|
||||
item_local.title = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.title)
|
||||
item_local.title = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.title)
|
||||
item_local.title = item_local.title.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
|
||||
item_local.quality = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.quality)
|
||||
item_local.quality = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.quality)
|
||||
item_local.quality = item_local.quality.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
|
||||
|
||||
item_local.alive = "??" #Calidad del link sin verificar
|
||||
item_local.action = "play" #Visualizar vídeo
|
||||
item_local.server = "torrent" #Seridor Torrent
|
||||
|
||||
@@ -682,7 +682,7 @@ def findvideos(item):
|
||||
#Ahora tratamos los enlaces .torrent
|
||||
itemlist_alt = [] #Usamos una lista intermedia para poder ordenar los episodios
|
||||
if matches_torrent:
|
||||
for scrapedurl, scrapedquality, scrapedlang in matches_torrent: #leemos los torrents con la diferentes calidades
|
||||
for scrapedurl, scrapedquality, scrapedlang in matches_torrent: #leemos los torrents con la diferentes calidades
|
||||
#Generamos una copia de Item para trabajar sobre ella
|
||||
item_local = item.clone()
|
||||
|
||||
@@ -756,9 +756,19 @@ def findvideos(item):
|
||||
|
||||
#Ahora pintamos el link del Torrent
|
||||
item_local.url = host + scrapedtorrent
|
||||
item_local.title = '[COLOR yellow][?][/COLOR] [COLOR yellow][Torrent][/COLOR] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR]' % (quality, str(item_local.language)) #Preparamos título de Torrent
|
||||
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\[?\]?\]\[\/COLOR\]', '', item_local.title) #Quitamos etiquetas vacías
|
||||
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\/COLOR\]', '', item_local.title) #Quitamos colores vacíos
|
||||
size = generictools.get_torrent_size(item_local.url) #Buscamos el tamaño en el .torrent
|
||||
if size:
|
||||
quality += ' [%s]' % size
|
||||
item_local.title = '[COLOR yellow][?][/COLOR] [COLOR yellow][Torrent][/COLOR] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR]' % (quality, str(item_local.language))
|
||||
|
||||
#Preparamos título y calidad, quitamos etiquetas vacías
|
||||
item_local.title = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.title)
|
||||
item_local.title = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.title)
|
||||
item_local.title = item_local.title.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
|
||||
quality = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', quality)
|
||||
quality = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', quality)
|
||||
quality = quality.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
|
||||
|
||||
item_local.alive = "??" #Calidad del link sin verificar
|
||||
item_local.action = "play" #Visualizar vídeo
|
||||
item_local.server = "torrent" #Seridor Torrent
|
||||
@@ -896,8 +906,15 @@ def findvideos(item):
|
||||
|
||||
#Ahora pintamos el link Directo
|
||||
item_local.url = enlace
|
||||
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\[?\]?\]\[\/COLOR\]', '', item_local.title) #Quitamos etiquetas vacías
|
||||
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\/COLOR\]', '', item_local.title) #Quitamos colores vacíos
|
||||
|
||||
#Preparamos título y calidad, quitamos etiquetas vacías
|
||||
item_local.title = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.title)
|
||||
item_local.title = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.title)
|
||||
item_local.title = item_local.title.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
|
||||
quality = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', quality)
|
||||
quality = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', quality)
|
||||
quality = quality.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
|
||||
|
||||
item_local.action = "play" #Visualizar vídeo
|
||||
item_local.server = servidor #Seridor Directo
|
||||
|
||||
|
||||
@@ -474,14 +474,17 @@ def findvideos(item):
|
||||
#Añadimos la duración, que estará en item.quility
|
||||
if scrapertools.find_single_match(item.quality, '(\[\d+:\d+)') and not scrapertools.find_single_match(item_local.quality, '(\[\d+:\d+)'):
|
||||
item_local.quality = '%s [/COLOR][COLOR white][%s h]' % (item_local.quality, scrapertools.find_single_match(item.quality, '(\d+:\d+)'))
|
||||
|
||||
#if size and item_local.contentType != "episode":
|
||||
if not size:
|
||||
size = generictools.get_torrent_size(scrapedurl) #Buscamos el tamaño en el .torrent
|
||||
if size:
|
||||
size = size.replace(".", ",").replace("B,", " B").replace("b,", " b")
|
||||
if '[/COLOR][COLOR white]' in item_local.quality:
|
||||
item_local.quality = '%s [%s]' % (item_local.quality, size)
|
||||
else:
|
||||
item_local.quality = '%s [/COLOR][COLOR white][%s]' % (item_local.quality, size)
|
||||
if item_local.action == 'show_result': #Viene de una búsqueda global
|
||||
if item_local.action == 'show_result': #Viene de una búsqueda global
|
||||
channel = item_local.channel.capitalize()
|
||||
if item_local.from_channel:
|
||||
channel = item_local.from_channel.capitalize()
|
||||
@@ -491,8 +494,15 @@ def findvideos(item):
|
||||
if scrapedurl:
|
||||
item_local.url = scrapedurl
|
||||
item_local.title = '[COLOR yellow][?][/COLOR] [COLOR yellow][Torrent][/COLOR] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR]' % (item_local.quality, str(item_local.language)) #Preparamos título de Torrent
|
||||
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\[?\]?\]\[\/COLOR\]', '', item_local.title).strip() #Quitamos etiquetas vacías
|
||||
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\/COLOR\]', '', item_local.title).strip() #Quitamos colores vacíos
|
||||
|
||||
#Preparamos título y calidad, quitamos etiquetas vacías
|
||||
item_local.title = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.title)
|
||||
item_local.title = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.title)
|
||||
item_local.title = item_local.title.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
|
||||
item_local.quality = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.quality)
|
||||
item_local.quality = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.quality)
|
||||
item_local.quality = item_local.quality.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
|
||||
|
||||
item_local.alive = "??" #Calidad del link sin verificar
|
||||
item_local.action = "play" #Visualizar vídeo
|
||||
item_local.server = "torrent" #Seridor Torrent
|
||||
|
||||
2
plugin.video.alfa/channels/locopelis.py
Executable file → Normal file
2
plugin.video.alfa/channels/locopelis.py
Executable file → Normal file
@@ -355,7 +355,7 @@ def findvideos(item):
|
||||
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')
|
||||
new_url = '%s%s' % (host.replace('.com','.tv'), 'playeropstream/api.php')
|
||||
post = {'h': video_id}
|
||||
post = urllib.urlencode(post)
|
||||
data = httptools.downloadpage(new_url, post=post).data
|
||||
|
||||
12
plugin.video.alfa/channels/maxipelis24.json
Normal file
12
plugin.video.alfa/channels/maxipelis24.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"id": "maxipelis24",
|
||||
"name": "Maxipelis24",
|
||||
"active": true,
|
||||
"adult": false,
|
||||
"language": ["lat"],
|
||||
"thumbnail": "maxipelis24.png",
|
||||
"banner": "",
|
||||
"categories": [
|
||||
"movie"
|
||||
]
|
||||
}
|
||||
125
plugin.video.alfa/channels/maxipelis24.py
Normal file
125
plugin.video.alfa/channels/maxipelis24.py
Normal file
@@ -0,0 +1,125 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import re
|
||||
import urlparse
|
||||
import urllib
|
||||
|
||||
from core import servertools
|
||||
from core import httptools
|
||||
from core import scrapertools
|
||||
from core.item import Item
|
||||
from platformcode import config, logger
|
||||
from channelselector import get_thumb
|
||||
|
||||
host="http://maxipelis24.com"
|
||||
|
||||
|
||||
def mainlist(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
|
||||
itemlist.append(Item(channel=item.channel, title="peliculas", action="movies", url=host, thumbnail=get_thumb('movies', auto=True)))
|
||||
itemlist.append(Item(channel=item.channel, action="category", title="Año de Estreno", url=host, cat='year', thumbnail=get_thumb('year', auto=True)))
|
||||
itemlist.append(Item(channel=item.channel, action="category", title="Géneros", url=host, cat='genre', thumbnail=get_thumb('genres', auto=True)))
|
||||
itemlist.append(Item(channel=item.channel, action="category", title="Calidad", url=host, cat='quality', thumbnail=get_thumb("quality", auto=True)))
|
||||
itemlist.append(Item(channel=item.channel, title="Buscar", action="search", url=host+"?s=", thumbnail=get_thumb("search", auto=True)))
|
||||
|
||||
return itemlist
|
||||
|
||||
def search(item, texto):
|
||||
logger.info()
|
||||
texto = texto.replace(" ", "+")
|
||||
item.url = host + "?s=" + texto
|
||||
if texto != '':
|
||||
return movies(item)
|
||||
|
||||
def category(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
data = httptools.downloadpage(item.url).data
|
||||
data = re.sub(r"\n|\r|\t|\s{2}| ","", data)
|
||||
|
||||
if item.cat == 'genre':
|
||||
data = scrapertools.find_single_match(data, '<h3>Géneros.*?</div>')
|
||||
patron = '<a href="([^"]+)">([^<]+)<'
|
||||
elif item.cat == 'year':
|
||||
data = scrapertools.find_single_match(data, '<h3>Año de estreno.*?</div>')
|
||||
patron = 'li><a href="([^"]+)">([^<]+).*?<'
|
||||
elif item.cat == 'quality':
|
||||
data = scrapertools.find_single_match(data, '<h3>Calidad.*?</div>')
|
||||
patron = 'li><a href="([^"]+)">([^<]+)<'
|
||||
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
for scrapedurl , scrapedtitle in matches:
|
||||
itemlist.append(Item(channel=item.channel, action='movies', title=scrapedtitle, url=scrapedurl, type='cat', first=0))
|
||||
return itemlist
|
||||
|
||||
def movies(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
|
||||
data = httptools.downloadpage(item.url).data
|
||||
data = re.sub(r"\n|\r|\t|\s{2}| ","", data)
|
||||
|
||||
patron = '<div id="mt.+?href="([^"]+)".+?'
|
||||
patron += '<img src="([^"]+)" alt="([^"]+)".+?'
|
||||
patron += '<span class="imdb">.*?>([^<]+)<.*?'
|
||||
patron += '<span class="ttx">([^<]+).*?'
|
||||
patron += 'class="year">([^<]+).+?class="calidad2">([^<]+)<'
|
||||
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
for scrapedurl, img, scrapedtitle, ranking, resto, year, quality in matches:
|
||||
plot = scrapertools.htmlclean(resto).strip()
|
||||
title = '%s [COLOR yellow](%s)[/COLOR] [COLOR red][%s][/COLOR]'% (scrapedtitle, ranking, quality)
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
title=title,
|
||||
url=scrapedurl,
|
||||
action="findvideos",
|
||||
plot=plot,
|
||||
thumbnail=img,
|
||||
contentTitle = scrapedtitle,
|
||||
contentType = "movie",
|
||||
quality=quality))
|
||||
|
||||
#Paginacion
|
||||
next_page = '<div class="pag_.*?href="([^"]+)">Siguiente<'
|
||||
matches = re.compile(next_page, re.DOTALL).findall(data)
|
||||
if matches:
|
||||
url = urlparse.urljoin(item.url, matches[0])
|
||||
itemlist.append(Item(channel=item.channel, action = "movies", title = "Página siguiente >>",url = url))
|
||||
|
||||
return itemlist
|
||||
|
||||
def findvideos(item):
|
||||
logger.info()
|
||||
itemlist=[]
|
||||
|
||||
data = httptools.downloadpage(item.url).data
|
||||
|
||||
data = scrapertools.get_match(data, '<div id="contenedor">(.*?)</div></div></div>')
|
||||
|
||||
# Busca los enlaces a los videos
|
||||
listavideos = servertools.findvideos(data)
|
||||
|
||||
for video in listavideos:
|
||||
videotitle = scrapertools.unescape(video[0])
|
||||
url = video[1]
|
||||
server = video[2]
|
||||
|
||||
itemlist.append(Item(channel=item.channel, action="play", server=server, title=videotitle, url=url,
|
||||
thumbnail=item.thumbnail, plot=item.plot, fulltitle=item.title, folder=False))
|
||||
|
||||
# Opción "Añadir esta película a la biblioteca de KODI"
|
||||
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,
|
||||
thumbnail=item.thumbnail
|
||||
))
|
||||
|
||||
return itemlist
|
||||
@@ -845,18 +845,21 @@ def findvideos(item):
|
||||
|
||||
# Poner la calidad, si es necesario
|
||||
if not item_local.quality:
|
||||
item_local.quality = ''
|
||||
if scrapertools.find_single_match(data, '<b>Formato:<\/b>&\w+;\s?([^<]+)<br>'):
|
||||
item_local.quality = scrapertools.find_single_match(data, '<b>Formato:<\/b>&\w+;\s?([^<]+)<br>')
|
||||
elif "hdtv" in item_local.url.lower() or "720p" in item_local.url.lower() or "1080p" in item_local.url.lower() or "4k" in item_local.url.lower():
|
||||
item_local.quality = scrapertools.find_single_match(item_local.url, '.*?_([H|7|1|4].*?)\.torrent')
|
||||
item_local.quality = item_local.quality.replace("_", " ")
|
||||
|
||||
|
||||
# Extrae el tamaño del vídeo
|
||||
if scrapertools.find_single_match(data, '<b>Tama.*?:<\/b>&\w+;\s?([^<]+B)<?'):
|
||||
size = scrapertools.find_single_match(data, '<b>Tama.*?:<\/b>&\w+;\s?([^<]+B)<?')
|
||||
else:
|
||||
size = scrapertools.find_single_match(item_local.url, '(\d{1,3},\d{1,2}?\w+)\.torrent')
|
||||
size = size.upper().replace(".", ",").replace("G", " G ").replace("M", " M ") #sustituimos . por , porque Unify lo borra
|
||||
if not size:
|
||||
size = generictools.get_torrent_size(item_local.url) #Buscamos el tamaño en el .torrent
|
||||
if size:
|
||||
item_local.title = re.sub('\s\[\d+,?\d*?\s\w[b|B]\]', '', item_local.title) #Quitamos size de título, si lo traía
|
||||
item_local.title = '%s [%s]' % (item_local.title, size) #Agregamos size al final del título
|
||||
@@ -866,8 +869,15 @@ def findvideos(item):
|
||||
#Ahora pintamos el link del Torrent, si lo hay
|
||||
if item_local.url: # Hay Torrent ?
|
||||
item_local.title = '[COLOR yellow][?][/COLOR] [COLOR yellow][Torrent][/COLOR] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR]' % (item_local.quality, str(item_local.language)) #Preparamos título de Torrent
|
||||
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\[?\]?\]\[\/COLOR\]', '', item_local.title) #Quitamos etiquetas vacías
|
||||
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\/COLOR\]', '', item_local.title) #Quitamos colores vacíos
|
||||
|
||||
#Preparamos título y calidad, quitamos etiquetas vacías
|
||||
item_local.title = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.title)
|
||||
item_local.title = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.title)
|
||||
item_local.title = item_local.title.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
|
||||
item_local.quality = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.quality)
|
||||
item_local.quality = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.quality)
|
||||
item_local.quality = item_local.quality.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
|
||||
|
||||
item_local.alive = "??" #Calidad del link sin verificar
|
||||
item_local.action = "play" #Visualizar vídeo
|
||||
item_local.server = "torrent" #Seridor Torrent
|
||||
|
||||
@@ -1368,12 +1368,14 @@ def findvideos(item):
|
||||
size = scrapertools.find_single_match(data, '<div class="fichas-box"><div class="entry-right"><div style="[^"]+"><span class="[^"]+"><strong>Size:<\/strong>?\s(\d+?\.?\d*?\s\w[b|B])<\/span>')
|
||||
size = size.replace(".", ",") #sustituimos . por , porque Unify lo borra
|
||||
if not size:
|
||||
size = scrapertools.find_single_match(item.quality, '\s\[(\d+,?\d*?\s\w[b|B])\]')
|
||||
size = scrapertools.find_single_match(item.quality, '\s\[(\d+,?\d*?\s\w\s?[b|B])\]')
|
||||
if not size:
|
||||
size = generictools.get_torrent_size(item.url) #Buscamos el tamaño en el .torrent
|
||||
if size:
|
||||
item.title = re.sub(r'\s\[\d+,?\d*?\s\w[b|B]\]', '', item.title) #Quitamos size de título, si lo traía
|
||||
item.title = '%s [%s]' % (item.title, size) #Agregamos size al final del título
|
||||
size = size.replace('GB', 'G B').replace('Gb', 'G b').replace('MB', 'M B').replace('Mb', 'M b')
|
||||
item.quality = re.sub(r'\s\[\d+,?\d*?\s\w[b|B]\]', '', item.quality) #Quitamos size de calidad, si lo traía
|
||||
item.quality = re.sub(r'\s\[\d+,?\d*?\s\w\s?[b|B]\]', '', item.quality) #Quitamos size de calidad, si lo traía
|
||||
|
||||
#Llamamos al método para crear el título general del vídeo, con toda la información obtenida de TMDB
|
||||
item, itemlist = generictools.post_tmdb_findvideos(item, itemlist)
|
||||
@@ -1399,8 +1401,15 @@ def findvideos(item):
|
||||
else:
|
||||
quality = item_local.quality
|
||||
item_local.title = '[COLOR yellow][?][/COLOR] [COLOR yellow][Torrent][/COLOR] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR]' % (quality, str(item_local.language)) #Preparamos título de Torrent
|
||||
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\[?\]?\]\[\/COLOR\]', '', item_local.title).strip() #Quitamos etiquetas vacías
|
||||
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\/COLOR\]', '', item_local.title).strip() #Quitamos colores vacíos
|
||||
|
||||
#Preparamos título y calidad, quitamos etiquetas vacías
|
||||
item_local.title = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.title)
|
||||
item_local.title = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.title)
|
||||
item_local.title = item_local.title.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
|
||||
quality = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', quality)
|
||||
quality = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', quality)
|
||||
quality = quality.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
|
||||
|
||||
item_local.alive = "??" #Calidad del link sin verificar
|
||||
item_local.action = "play" #Visualizar vídeo
|
||||
item_local.server = "torrent" #Servidor
|
||||
@@ -1485,9 +1494,15 @@ def findvideos(item):
|
||||
item_local.action = "play"
|
||||
item_local.server = servidor
|
||||
item_local.url = enlace
|
||||
item_local.title = item_local.title.replace("[]", "").strip()
|
||||
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\[?\]?\]\[\/COLOR\]', '', item_local.title).strip()
|
||||
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\/COLOR\]', '', item_local.title).strip()
|
||||
|
||||
#Preparamos título y calidad, quitamos etiquetas vacías
|
||||
item_local.title = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.title)
|
||||
item_local.title = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.title)
|
||||
item_local.title = item_local.title.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
|
||||
item_local.quality = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.quality)
|
||||
item_local.quality = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.quality)
|
||||
item_local.quality = item_local.quality.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
|
||||
|
||||
itemlist.append(item_local.clone())
|
||||
|
||||
except:
|
||||
@@ -1582,9 +1597,16 @@ def findvideos(item):
|
||||
item_local.action = "play"
|
||||
item_local.server = servidor
|
||||
item_local.url = enlace
|
||||
item_local.title = parte_title.replace("[]", "").strip()
|
||||
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\[?\]?\]\[\/COLOR\]', '', item_local.title).strip()
|
||||
item_local.title = re.sub(r'\[COLOR \w+\]-\[\/COLOR\]', '', item_local.title).strip()
|
||||
item_local.title = parte_title.strip()
|
||||
|
||||
#Preparamos título y calidad, quitamos etiquetas vacías
|
||||
item_local.title = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.title)
|
||||
item_local.title = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.title)
|
||||
item_local.title = item_local.title.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
|
||||
item_local.quality = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.quality)
|
||||
item_local.quality = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.quality)
|
||||
item_local.quality = item_local.quality.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
|
||||
|
||||
itemlist.append(item_local.clone())
|
||||
|
||||
except:
|
||||
|
||||
@@ -89,6 +89,7 @@ def search(item, texto):
|
||||
logger.info()
|
||||
texto = texto.replace(" ", "+")
|
||||
item.url = host + "/search/%s" % texto
|
||||
if item.contentType == '': item.contentType = 'movie'
|
||||
try:
|
||||
return scraper(item)
|
||||
# Se captura la excepción, para no interrumpir al buscador global si un canal falla
|
||||
|
||||
2
plugin.video.alfa/channels/pelisipad.py
Executable file → Normal file
2
plugin.video.alfa/channels/pelisipad.py
Executable file → Normal file
@@ -519,6 +519,7 @@ def findvideos(item):
|
||||
if item.video_urls:
|
||||
import random
|
||||
import base64
|
||||
|
||||
item.video_urls.sort(key=lambda it: (it[1], random.random()), reverse=True)
|
||||
i = 0
|
||||
actual_quality = ""
|
||||
@@ -534,6 +535,7 @@ def findvideos(item):
|
||||
title += " [COLOR green]Mirror %s[/COLOR] - %s" % (str(i + 1), item.fulltitle)
|
||||
url = vid % "%s" % base64.b64decode("dHQ9MTQ4MDE5MDQ1MSZtbT1NRzZkclhFand6QmVzbmxSMHNZYXhBJmJiPUUwb1dVVVgx"
|
||||
"WTBCQTdhWENpeU9paUE=")
|
||||
url += '|User-Agent=%s' % httptools.get_user_agent
|
||||
itemlist.append(item.clone(title=title, action="play", url=url, video_urls=""))
|
||||
i += 1
|
||||
|
||||
|
||||
@@ -356,7 +356,7 @@ def get_links_by_language(item, data):
|
||||
patron = 'data-source=(.*?)data.*?srt=(.*?)data-iframe.*?Opci.*?<.*?hidden>[^\(]\((.*?)\)'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
if language in IDIOMAS:
|
||||
language == IDIOMAS[language]
|
||||
language = IDIOMAS[language]
|
||||
|
||||
for url, sub, quality in matches:
|
||||
if 'http' not in url:
|
||||
@@ -403,7 +403,7 @@ def findvideos(item):
|
||||
i.quality) )
|
||||
# Requerido para FilterTools
|
||||
|
||||
itemlist = filtertools.get_links(video_list, item, list_language)
|
||||
video_list = filtertools.get_links(video_list, item, list_language)
|
||||
|
||||
# Requerido para AutoPlay
|
||||
|
||||
|
||||
@@ -143,6 +143,85 @@ def settings(item):
|
||||
|
||||
|
||||
def setting_channel(item):
|
||||
if config.get_platform(True)['num_version'] >= 17.0: # A partir de Kodi 16 se puede usar multiselect, y de 17 con preselect
|
||||
return setting_channel_new(item)
|
||||
else:
|
||||
return setting_channel_old(item)
|
||||
|
||||
def setting_channel_new(item):
|
||||
import channelselector, xbmcgui
|
||||
from core import channeltools
|
||||
|
||||
# Cargar lista de opciones (canales activos del usuario y que permitan búsqueda global)
|
||||
# ------------------------
|
||||
lista = []; ids = []; lista_lang = []
|
||||
channels_list = channelselector.filterchannels('all')
|
||||
for channel in channels_list:
|
||||
channel_parameters = channeltools.get_channel_parameters(channel.channel)
|
||||
|
||||
# No incluir si en la configuracion del canal no existe "include_in_global_search"
|
||||
if not channel_parameters['include_in_global_search']:
|
||||
continue
|
||||
|
||||
lbl = '%s' % channel_parameters['language']
|
||||
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)
|
||||
lista_lang.append(channel_parameters['language'])
|
||||
|
||||
# Diálogo para pre-seleccionar
|
||||
# ----------------------------
|
||||
preselecciones_std = ['Modificar selección actual', 'Modificar partiendo de Todos', 'Modificar partiendo de Ninguno', 'Modificar partiendo de Castellano', 'Modificar partiendo de Latino']
|
||||
if item.action == 'setting_channel':
|
||||
# Configuración de los canales incluídos en la búsqueda
|
||||
preselecciones = preselecciones_std
|
||||
presel_values = [1, 2, 3, 4, 5]
|
||||
else:
|
||||
# Llamada desde "buscar en otros canales" (se puede saltar la selección e ir directo a la búsqueda)
|
||||
preselecciones = ['Buscar con la selección actual'] + preselecciones_std
|
||||
presel_values = [0, 1, 2, 3, 4, 5]
|
||||
|
||||
ret = platformtools.dialog_select(config.get_localized_string(59994), preselecciones)
|
||||
if ret == -1: return False # pedido cancel
|
||||
if presel_values[ret] == 0: return True # continuar sin modificar
|
||||
elif presel_values[ret] == 3: preselect = []
|
||||
elif presel_values[ret] == 2: preselect = range(len(ids))
|
||||
elif presel_values[ret] in [4, 5]:
|
||||
busca = 'cast' if presel_values[ret] == 4 else 'lat'
|
||||
preselect = []
|
||||
for i, lg in enumerate(lista_lang):
|
||||
if busca in lg or '*' in lg:
|
||||
preselect.append(i)
|
||||
else:
|
||||
preselect = []
|
||||
for i, canal in enumerate(ids):
|
||||
channel_status = config.get_setting('include_in_global_search', canal)
|
||||
if channel_status:
|
||||
preselect.append(i)
|
||||
|
||||
# Diálogo para seleccionar
|
||||
# ------------------------
|
||||
ret = xbmcgui.Dialog().multiselect(config.get_localized_string(59994), lista, preselect=preselect, useDetails=True)
|
||||
if ret == None: return False # pedido cancel
|
||||
seleccionados = [ids[i] for i in ret]
|
||||
|
||||
# Guardar cambios en canales para la búsqueda
|
||||
# -------------------------------------------
|
||||
for canal in ids:
|
||||
channel_status = config.get_setting('include_in_global_search', canal)
|
||||
if channel_status is None: channel_status = True
|
||||
|
||||
if channel_status and canal not in seleccionados:
|
||||
config.set_setting('include_in_global_search', False, canal)
|
||||
elif not channel_status and canal in seleccionados:
|
||||
config.set_setting('include_in_global_search', True, canal)
|
||||
|
||||
return True
|
||||
|
||||
def setting_channel_old(item):
|
||||
channels_path = os.path.join(config.get_runtime_path(), "channels", '*.json')
|
||||
channel_language = config.get_setting("channel_language", default="all")
|
||||
|
||||
@@ -204,6 +283,7 @@ def save_settings(item, dict_values):
|
||||
config.set_setting("include_in_global_search", dict_values[v], v)
|
||||
|
||||
progreso.close()
|
||||
return True
|
||||
|
||||
|
||||
def cb_custom_button(item, dict_values):
|
||||
@@ -354,8 +434,8 @@ def do_search(item, categories=None):
|
||||
categories = ["Películas"]
|
||||
setting_item = Item(channel=item.channel, title=config.get_localized_string(59994), folder=False,
|
||||
thumbnail=get_thumb("search.png"))
|
||||
setting_channel(setting_item)
|
||||
|
||||
if not setting_channel(setting_item):
|
||||
return False
|
||||
|
||||
if categories is None:
|
||||
categories = []
|
||||
@@ -474,8 +554,8 @@ def do_search(item, categories=None):
|
||||
# es compatible tanto con versiones antiguas de python como nuevas
|
||||
if multithread:
|
||||
pendent = [a for a in threads if a.isAlive()]
|
||||
t = float(100) / len(pendent)
|
||||
while pendent:
|
||||
if len(pendent) > 0: t = float(100) / len(pendent)
|
||||
while len(pendent) > 0:
|
||||
index = (len(threads) - len(pendent)) + 1
|
||||
percentage = int(math.ceil(index * t))
|
||||
|
||||
|
||||
@@ -620,7 +620,7 @@ def play(item):
|
||||
data['a']['tt']) + \
|
||||
"&mm=" + data['a']['mm'] + "&bb=" + data['a']['bb']
|
||||
|
||||
url += "|User-Agent=Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Mobile Safari/537.36"
|
||||
url += "|User-Agent=%s" % httptools.get_user_agent
|
||||
|
||||
itemlist.append(item.clone(action="play", server="directo", url=url, folder=False))
|
||||
|
||||
|
||||
14
plugin.video.alfa/channels/ultrapeliculashd.json
Executable file → Normal file
14
plugin.video.alfa/channels/ultrapeliculashd.json
Executable file → Normal file
@@ -19,6 +19,20 @@
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "filter_languages",
|
||||
"type": "list",
|
||||
"label": "Mostrar enlaces en idioma...",
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"visible": true,
|
||||
"lvalues": [
|
||||
"No filtrar",
|
||||
"LAT",
|
||||
"CAST",
|
||||
"VOSE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "include_in_newest_latino",
|
||||
"type": "bool",
|
||||
|
||||
@@ -8,6 +8,7 @@ from core import servertools
|
||||
from core import jsontools
|
||||
from core import tmdb
|
||||
from core.item import Item
|
||||
from channels import filtertools, autoplay
|
||||
from platformcode import config, logger
|
||||
|
||||
host = 'http://www.ultrapeliculashd.com'
|
||||
@@ -63,39 +64,51 @@ tcalidad = {'1080P': 'https://s21.postimg.cc/4h1s0t1wn/hd1080.png',
|
||||
'720P': 'https://s12.postimg.cc/lthu7v4q5/hd720.png', "HD": "https://s27.postimg.cc/m2dhhkrur/image.png"}
|
||||
|
||||
|
||||
IDIOMAS = {'Latino': 'LAT', 'Español': 'CAST', 'SUB':'VOSE'}
|
||||
list_language = IDIOMAS.values()
|
||||
list_quality = ['default', '1080p']
|
||||
list_servers = ['openload','directo']
|
||||
|
||||
__comprueba_enlaces__ = config.get_setting('comprueba_enlaces', 'ultrapeliculashd')
|
||||
__comprueba_enlaces_num__ = config.get_setting('comprueba_enlaces_num', 'ultrapeliculashd')
|
||||
|
||||
def mainlist(item):
|
||||
logger.info()
|
||||
|
||||
autoplay.init(item.channel, list_servers, list_quality)
|
||||
|
||||
itemlist = []
|
||||
|
||||
itemlist.append(item.clone(title="Todas",
|
||||
action="lista",
|
||||
thumbnail='https://s18.postimg.cc/fwvaeo6qh/todas.png',
|
||||
fanart='https://s18.postimg.cc/fwvaeo6qh/todas.png',
|
||||
url=host + '/movies/'
|
||||
))
|
||||
itemlist.append(Item(channel=item.channel, title="Todas",
|
||||
action="lista",
|
||||
thumbnail='https://s18.postimg.cc/fwvaeo6qh/todas.png',
|
||||
fanart='https://s18.postimg.cc/fwvaeo6qh/todas.png',
|
||||
url=host + '/movies/'
|
||||
))
|
||||
|
||||
itemlist.append(item.clone(title="Generos",
|
||||
action="generos",
|
||||
url=host,
|
||||
thumbnail='https://s3.postimg.cc/5s9jg2wtf/generos.png',
|
||||
fanart='https://s3.postimg.cc/5s9jg2wtf/generos.png'
|
||||
))
|
||||
itemlist.append(Item(channel=item.channel, title="Generos",
|
||||
action="generos",
|
||||
url=host,
|
||||
thumbnail='https://s3.postimg.cc/5s9jg2wtf/generos.png',
|
||||
fanart='https://s3.postimg.cc/5s9jg2wtf/generos.png'
|
||||
))
|
||||
|
||||
itemlist.append(item.clone(title="Alfabetico",
|
||||
action="seccion",
|
||||
url=host,
|
||||
thumbnail='https://s17.postimg.cc/fwi1y99en/a-z.png',
|
||||
fanart='https://s17.postimg.cc/fwi1y99en/a-z.png',
|
||||
extra='alfabetico'
|
||||
))
|
||||
itemlist.append(Item(channel=item.channel, title="Alfabetico",
|
||||
action="seccion",
|
||||
url=host,
|
||||
thumbnail='https://s17.postimg.cc/fwi1y99en/a-z.png',
|
||||
fanart='https://s17.postimg.cc/fwi1y99en/a-z.png',
|
||||
extra='alfabetico'
|
||||
))
|
||||
|
||||
itemlist.append(item.clone(title="Buscar",
|
||||
action="search",
|
||||
url=host + '/?s=',
|
||||
thumbnail='https://s30.postimg.cc/pei7txpa9/buscar.png',
|
||||
fanart='https://s30.postimg.cc/pei7txpa9/buscar.png'
|
||||
))
|
||||
itemlist.append(Item(channel=item.channel, title="Buscar",
|
||||
action="search",
|
||||
url=host + '/?s=',
|
||||
thumbnail='https://s30.postimg.cc/pei7txpa9/buscar.png',
|
||||
fanart='https://s30.postimg.cc/pei7txpa9/buscar.png'
|
||||
))
|
||||
|
||||
autoplay.show_option(item.channel, itemlist)
|
||||
|
||||
return itemlist
|
||||
|
||||
@@ -160,13 +173,13 @@ def generos(item):
|
||||
title = scrapedtitle
|
||||
url = scrapedurl
|
||||
if scrapedtitle not in ['PRÓXIMAMENTE', 'EN CINE']:
|
||||
itemlist.append(item.clone(action="lista",
|
||||
title=title,
|
||||
fulltitle=item.title,
|
||||
url=url,
|
||||
thumbnail=thumbnail,
|
||||
fanart=fanart
|
||||
))
|
||||
itemlist.append(Item(channel=item.channel, action="lista",
|
||||
title=title,
|
||||
fulltitle=item.title,
|
||||
url=url,
|
||||
thumbnail=thumbnail,
|
||||
fanart=fanart
|
||||
))
|
||||
return itemlist
|
||||
|
||||
|
||||
@@ -209,15 +222,33 @@ def alpha(item):
|
||||
|
||||
|
||||
def findvideos(item):
|
||||
from lib import jsunpack
|
||||
logger.info()
|
||||
itemlist = []
|
||||
data = httptools.downloadpage(item.url).data
|
||||
data = re.sub(r'"|\n|\r|\t| |<br>|\s{2,}', "", data)
|
||||
patron = '<iframe.*?rptss src=(.*?) (?:width.*?|frameborder.*?) allowfullscreen><\/iframe>'
|
||||
patron = '<div id=(option.*?) class=play.*?<iframe.*?'
|
||||
patron += 'rptss src=(.*?) (?:width.*?|frameborder.*?) allowfullscreen><\/iframe>'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for video_url in matches:
|
||||
if 'stream' in video_url and 'streamango' not in video_url:
|
||||
for option, video_url in matches:
|
||||
language = scrapertools.find_single_match(data, '#%s>.*?-->(.*?)(?:\s|<)' % option)
|
||||
if 'sub' in language.lower():
|
||||
language = 'SUB'
|
||||
language = IDIOMAS[language]
|
||||
if 'ultrapeliculashd' in video_url:
|
||||
new_data = httptools.downloadpage(video_url).data
|
||||
new_data = re.sub(r'"|\n|\r|\t| |<br>|\s{2,}', "", new_data)
|
||||
if 'drive' not in video_url:
|
||||
quality= '1080p'
|
||||
packed = scrapertools.find_single_match(new_data, '<script>(eval\(.*?)eval')
|
||||
unpacked = jsunpack.unpack(packed)
|
||||
url = scrapertools.find_single_match(unpacked, 'file:(http.?:.*?)\}')
|
||||
else:
|
||||
quality= '1080p'
|
||||
url = scrapertools.find_single_match(new_data, '</div><iframe src=([^\s]+) webkitallowfullscreen')
|
||||
|
||||
elif 'stream' in video_url and 'streamango' not in video_url:
|
||||
data = httptools.downloadpage('https:'+video_url).data
|
||||
if not 'iframe' in video_url:
|
||||
new_url=scrapertools.find_single_match(data, 'iframe src="(.*?)"')
|
||||
@@ -233,26 +264,42 @@ def findvideos(item):
|
||||
url = url.replace('download', 'preview')+headers_string
|
||||
|
||||
sub = scrapertools.find_single_match(new_data, 'file:.*?"(.*?srt)"')
|
||||
new_item = (Item(title=item.title, url=url, quality=quality, subtitle=sub, server='directo'))
|
||||
new_item = (Item(title=item.title, url=url, quality=quality, subtitle=sub, server='directo',
|
||||
language = language))
|
||||
itemlist.append(new_item)
|
||||
|
||||
else:
|
||||
itemlist.extend(servertools.find_video_items(data=video_url))
|
||||
url = video_url
|
||||
quality = 'default'
|
||||
|
||||
for videoitem in itemlist:
|
||||
videoitem.channel = item.channel
|
||||
videoitem.action = 'play'
|
||||
videoitem.thumbnail = item.thumbnail
|
||||
videoitem.infoLabels = item.infoLabels
|
||||
videoitem.title = item.contentTitle + ' (' + videoitem.server + ')'
|
||||
if 'youtube' in videoitem.url:
|
||||
videoitem.title = '[COLOR orange]Trailer en Youtube[/COLOR]'
|
||||
if not config.get_setting("unify"):
|
||||
title = ' [%s] [%s]' % (quality, language)
|
||||
else:
|
||||
title = ''
|
||||
|
||||
itemlist = servertools.get_servers_itemlist(itemlist)
|
||||
new_item = (Item(channel=item.channel, title='%s'+title, url=url, action='play', quality=quality,
|
||||
language=language, infoLabels=item.infoLabels))
|
||||
itemlist.append(new_item)
|
||||
|
||||
|
||||
itemlist = servertools.get_servers_itemlist(itemlist, lambda i: i.title % i.server.capitalize())
|
||||
|
||||
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)
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
||||
@@ -221,7 +221,7 @@ def findvideos(item):
|
||||
language = ''
|
||||
if 'latino' in link.lower():
|
||||
language='Latino'
|
||||
elif 'español' in link.lower():
|
||||
elif 'espaÑol' in link.lower():
|
||||
language = 'Español'
|
||||
elif 'subtitulado' in link.lower():
|
||||
language = 'VOSE'
|
||||
|
||||
@@ -5,28 +5,59 @@
|
||||
"adult": false,
|
||||
"language": ["cast", "lat"],
|
||||
"banner": "",
|
||||
"thumbnail": "https://zonatorrent.org/wp-content/uploads/2017/04/zonatorrent-New-Logo.png",
|
||||
"thumbnail": "zonatorrent.png",
|
||||
"version": 1,
|
||||
"categories": [
|
||||
"torrent",
|
||||
"movie"
|
||||
"torrent",
|
||||
"movie",
|
||||
"tvshow",
|
||||
"vos"
|
||||
],
|
||||
"settings": [
|
||||
{
|
||||
"id": "include_in_global_search",
|
||||
"type": "bool",
|
||||
"label": "Incluir en busqueda global",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "modo_grafico",
|
||||
"type": "bool",
|
||||
"label": "Buscar información extra",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
{
|
||||
"id": "include_in_global_search",
|
||||
"type": "bool",
|
||||
"label": "Incluir en busqueda global",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "modo_grafico",
|
||||
"type": "bool",
|
||||
"label": "Buscar información extra",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "timeout_downloadpage",
|
||||
"type": "list",
|
||||
"label": "Timeout (segs.) en descarga de páginas o verificación de servidores",
|
||||
"default": 5,
|
||||
"enabled": true,
|
||||
"visible": true,
|
||||
"lvalues": [
|
||||
"None",
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"5",
|
||||
"6",
|
||||
"7",
|
||||
"8",
|
||||
"9",
|
||||
"10"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "seleccionar_ult_temporadda_activa",
|
||||
"type": "bool",
|
||||
"label": "Seleccionar para Videoteca si estará activa solo la última Temporada",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "include_in_newest_peliculas",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -24,9 +24,9 @@ def getmainlist(view="thumb_"):
|
||||
thumbnail=get_thumb("channels.png", view), view=view,
|
||||
category=config.get_localized_string(30119), viewmode="thumbnails"))
|
||||
|
||||
itemlist.append(Item(title='Mis enlaces', channel="alfavorites", action="mainlist",
|
||||
thumbnail=get_thumb("favorites.png", view), view=view,
|
||||
category='Mis enlaces', viewmode="thumbnails"))
|
||||
itemlist.append(Item(title=config.get_localized_string(70527), channel="alfavorites", action="mainlist",
|
||||
thumbnail=get_thumb("mylink.png", view), view=view,
|
||||
category=config.get_localized_string(70527), viewmode="thumbnails"))
|
||||
|
||||
itemlist.append(Item(title=config.get_localized_string(30103), channel="search", action="mainlist",
|
||||
thumbnail=get_thumb("search.png", view),
|
||||
@@ -197,7 +197,7 @@ def filterchannels(category, view="thumb_"):
|
||||
thumbnail=channel_parameters["thumbnail"], type="generic", viewmode="list"))
|
||||
|
||||
if category in ['movie', 'tvshow']:
|
||||
titles = [config.get_localized_string(70028), config.get_localized_string(30985), config.get_localized_string(70527), config.get_localized_string(60264), config.get_localized_string(70528)]
|
||||
titles = [config.get_localized_string(70028), config.get_localized_string(30985), config.get_localized_string(70559), config.get_localized_string(60264), config.get_localized_string(70560)]
|
||||
ids = ['popular', 'top_rated', 'now_playing', 'on_the_air']
|
||||
for x in range(0,3):
|
||||
if x == 2 and category != 'movie':
|
||||
@@ -267,4 +267,4 @@ def set_channel_info(parameters):
|
||||
content = config.get_localized_category(cat)
|
||||
|
||||
info = '[COLOR yellow]Tipo de contenido:[/COLOR] %s\n\n[COLOR yellow]Idiomas:[/COLOR] %s' % (content, language)
|
||||
return info
|
||||
return info
|
||||
|
||||
3
plugin.video.alfa/core/httptools.py
Executable file → Normal file
3
plugin.video.alfa/core/httptools.py
Executable file → Normal file
@@ -56,6 +56,9 @@ default_headers["Accept-Encoding"] = "gzip"
|
||||
HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT = config.get_setting('httptools_timeout', default=15)
|
||||
if HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT == 0: HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT = None
|
||||
|
||||
def get_user_agent():
|
||||
# Devuelve el user agent global para ser utilizado cuando es necesario para la url.
|
||||
return default_headers["User-Agent"]
|
||||
|
||||
def get_url_headers(url):
|
||||
domain_cookies = cj._cookies.get("." + urlparse.urlparse(url)[1], {}).get("/", {})
|
||||
|
||||
@@ -319,7 +319,7 @@ def set_infoLabels_item(item, seekTmdb=True, idioma_busqueda='es', lock=None):
|
||||
|
||||
__leer_datos(otmdb_global)
|
||||
|
||||
if lock:
|
||||
if lock and lock.locked():
|
||||
lock.release()
|
||||
|
||||
if item.infoLabels['episode']:
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
# ------------------------------------------------------------
|
||||
|
||||
import re
|
||||
import os
|
||||
import sys
|
||||
import urllib
|
||||
import urlparse
|
||||
@@ -236,8 +237,7 @@ def post_tmdb_listado(item, itemlist):
|
||||
del item.channel_alt
|
||||
if item.url_alt:
|
||||
del item.url_alt
|
||||
if item.extra2:
|
||||
del item.extra2
|
||||
|
||||
#Ajustamos el nombre de la categoría
|
||||
if not item.category_new:
|
||||
item.category_new = ''
|
||||
@@ -389,8 +389,8 @@ def post_tmdb_listado(item, itemlist):
|
||||
if item_local.infoLabels['episodio_titulo']:
|
||||
item_local.infoLabels['episodio_titulo'] = item_local.infoLabels['episodio_titulo'].replace(" []", "").strip()
|
||||
title = title.replace("--", "").replace(" []", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
|
||||
title = re.sub(r'\s\[COLOR \w+\]\[\[?\]?\]\[\/COLOR\]', '', title).strip()
|
||||
title = re.sub(r'\s\[COLOR \w+\]\[\/COLOR\]', '', title).strip()
|
||||
title = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', title).strip()
|
||||
title = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', title).strip()
|
||||
|
||||
if item.category_new == "newest": #Viene de Novedades. Marcamos el título con el nombre del canal
|
||||
title += ' -%s-' % scrapertools.find_single_match(item_local.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize()
|
||||
@@ -766,6 +766,7 @@ def post_tmdb_episodios(item, itemlist):
|
||||
#Si no está el título del episodio, pero sí está en "title", lo rescatamos
|
||||
if not item_local.infoLabels['episodio_titulo'] and item_local.infoLabels['title'].lower() != item_local.infoLabels['tvshowtitle'].lower():
|
||||
item_local.infoLabels['episodio_titulo'] = item_local.infoLabels['title']
|
||||
item_local.infoLabels['episodio_titulo'] = item_local.infoLabels['episodio_titulo'].replace('GB', 'G B').replace('MB', 'M B')
|
||||
|
||||
#Preparamos el título para que sea compatible con Añadir Serie a Videoteca
|
||||
if "Temporada" in item_local.title: #Compatibilizamos "Temporada" con Unify
|
||||
@@ -792,8 +793,8 @@ def post_tmdb_episodios(item, itemlist):
|
||||
item_local.infoLabels['episodio_titulo'] = item_local.infoLabels['episodio_titulo'].replace(" []", "").strip()
|
||||
item_local.infoLabels['title'] = item_local.infoLabels['title'].replace(" []", "").strip()
|
||||
item_local.title = item_local.title.replace(" []", "").strip()
|
||||
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\[?\]?\]\[\/COLOR\]', '', item_local.title).strip()
|
||||
item_local.title = re.sub(r'\s\[COLOR \w+\]-\[\/COLOR\]', '', item_local.title).strip()
|
||||
item_local.title = re.sub(r'\s?\[COLOR \w+\]\[\[?-?\s?\]?\]\[\/COLOR\]', '', item_local.title).strip()
|
||||
item_local.title = re.sub(r'\s?\[COLOR \w+\]-?\s?\[\/COLOR\]', '', item_local.title).strip()
|
||||
|
||||
#Si la información de num. total de episodios de TMDB no es correcta, tratamos de calcularla
|
||||
if num_episodios < item_local.contentEpisodeNumber:
|
||||
@@ -1054,8 +1055,8 @@ def post_tmdb_findvideos(item, itemlist):
|
||||
title_gen = item.title
|
||||
|
||||
#Limpiamos etiquetas vacías
|
||||
title_gen = re.sub(r'\s\[COLOR \w+\]\[\[?\]?\]\[\/COLOR\]', '', title_gen).strip() #Quitamos etiquetas vacías
|
||||
title_gen = re.sub(r'\s\[COLOR \w+\]\[\/COLOR\]', '', title_gen).strip() #Quitamos colores vacíos
|
||||
title_gen = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', title_gen).strip() #Quitamos etiquetas vacías
|
||||
title_gen = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', title_gen).strip() #Quitamos colores vacíos
|
||||
title_gen = title_gen.replace(" []", "").strip() #Quitamos etiquetas vacías
|
||||
title_videoteca = title_gen #Salvamos el título para Videoteca
|
||||
|
||||
@@ -1103,7 +1104,131 @@ def post_tmdb_findvideos(item, itemlist):
|
||||
|
||||
return (item, itemlist)
|
||||
|
||||
|
||||
def get_torrent_size(url):
|
||||
logger.info()
|
||||
|
||||
"""
|
||||
|
||||
Módulo extraido del antiguo canal ZenTorrent
|
||||
|
||||
Calcula el tamaño de los archivos que contienen un .torrent. Descarga el archivo .torrent en una carpeta,
|
||||
lo lee y descodifica. Si contiene múltiples archivos, suma el tamaño de todos ellos
|
||||
|
||||
Llamada: generictools.get_torrent_size(url)
|
||||
Entrada: url: url del archivo .torrent
|
||||
Salida: size: str con el tamaño y tipo de medida ( MB, GB, etc)
|
||||
|
||||
"""
|
||||
|
||||
def convert_size(size):
|
||||
import math
|
||||
if (size == 0):
|
||||
return '0B'
|
||||
size_name = ("B", "KB", "M B", "G B", "TB", "PB", "EB", "ZB", "YB")
|
||||
i = int(math.floor(math.log(size, 1024)))
|
||||
p = math.pow(1024, i)
|
||||
s = round(size / p, 2)
|
||||
return '%s %s' % (s, size_name[i])
|
||||
|
||||
def decode(text):
|
||||
try:
|
||||
src = tokenize(text)
|
||||
data = decode_item(src.next, src.next())
|
||||
for token in src: # look for more tokens
|
||||
raise SyntaxError("trailing junk")
|
||||
except (AttributeError, ValueError, StopIteration):
|
||||
try:
|
||||
data = data
|
||||
except:
|
||||
data = src
|
||||
|
||||
return data
|
||||
|
||||
def tokenize(text, match=re.compile("([idel])|(\d+):|(-?\d+)").match):
|
||||
i = 0
|
||||
while i < len(text):
|
||||
m = match(text, i)
|
||||
s = m.group(m.lastindex)
|
||||
i = m.end()
|
||||
if m.lastindex == 2:
|
||||
yield "s"
|
||||
yield text[i:i + int(s)]
|
||||
i = i + int(s)
|
||||
else:
|
||||
yield s
|
||||
|
||||
def decode_item(next, token):
|
||||
if token == "i":
|
||||
# integer: "i" value "e"
|
||||
data = int(next())
|
||||
if next() != "e":
|
||||
raise ValueError
|
||||
elif token == "s":
|
||||
# string: "s" value (virtual tokens)
|
||||
data = next()
|
||||
elif token == "l" or token == "d":
|
||||
# container: "l" (or "d") values "e"
|
||||
data = []
|
||||
tok = next()
|
||||
while tok != "e":
|
||||
data.append(decode_item(next, tok))
|
||||
tok = next()
|
||||
if token == "d":
|
||||
data = dict(zip(data[0::2], data[1::2]))
|
||||
else:
|
||||
raise ValueError
|
||||
return data
|
||||
|
||||
|
||||
#Móludo principal
|
||||
size = ""
|
||||
try:
|
||||
torrents_path = config.get_videolibrary_path() + '/torrents' #path para dejar el .torrent
|
||||
|
||||
if not os.path.exists(torrents_path):
|
||||
os.mkdir(torrents_path) #si no está la carpeta la creamos
|
||||
|
||||
urllib.URLopener.version = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 SE 2.X MetaSr 1.0'
|
||||
urllib.urlretrieve(url, torrents_path + "/generictools.torrent") #desacargamos el .torrent a la carpeta
|
||||
torrent_file = open(torrents_path + "/generictools.torrent", "rb").read() #leemos el .torrent
|
||||
|
||||
if "used CloudFlare" in torrent_file: #Si tiene CloudFlare, usamos este proceso
|
||||
try:
|
||||
urllib.urlretrieve("http://anonymouse.org/cgi-bin/anon-www.cgi/" + url.strip(),
|
||||
torrents_path + "/generictools.torrent")
|
||||
torrent_file = open(torrents_path + "/generictools.torrent", "rb").read()
|
||||
except:
|
||||
torrent_file = ""
|
||||
|
||||
torrent = decode(torrent_file) #decodificamos el .torrent
|
||||
|
||||
#si sólo tiene un archivo, tomamos la longitud y la convertimos a una unidad legible, si no dará error
|
||||
try:
|
||||
sizet = torrent["info"]['length']
|
||||
size = convert_size(sizet)
|
||||
except:
|
||||
pass
|
||||
|
||||
#si tiene múltiples archivos sumamos la longitud de todos
|
||||
if not size:
|
||||
check_video = scrapertools.find_multiple_matches(str(torrent["info"]["files"]), "'length': (\d+)}")
|
||||
sizet = sum([int(i) for i in check_video])
|
||||
size = convert_size(sizet)
|
||||
|
||||
except:
|
||||
logger.error('ERROR al buscar el tamaño de un .Torrent: ' + url)
|
||||
|
||||
try:
|
||||
os.remove(torrents_path + "/generictools.torrent") #borramos el .torrent
|
||||
except:
|
||||
pass
|
||||
|
||||
#logger.debug(url + ' / ' + size)
|
||||
|
||||
return size
|
||||
|
||||
|
||||
def get_field_from_kodi_DB(item, from_fields='*', files='file'):
|
||||
logger.info()
|
||||
"""
|
||||
|
||||
@@ -516,7 +516,7 @@ def set_context_commands(item, parent_item):
|
||||
from_action=item.action).tourl())))
|
||||
# Añadir a Alfavoritos (Mis enlaces)
|
||||
if item.channel not in ["favorites", "videolibrary", "help", ""] and parent_item.channel != "favorites":
|
||||
context_commands.append(('[COLOR blue]Guardar enlace[/COLOR]', "XBMC.RunPlugin(%s?%s)" %
|
||||
context_commands.append(('[COLOR blue]%s[/COLOR]' % config.get_localized_string(70557), "XBMC.RunPlugin(%s?%s)" %
|
||||
(sys.argv[0], item.clone(channel="alfavorites", action="addFavourite",
|
||||
from_channel=item.channel,
|
||||
from_action=item.action).tourl())))
|
||||
@@ -538,7 +538,7 @@ def set_context_commands(item, parent_item):
|
||||
mediatype = 'tv'
|
||||
else:
|
||||
mediatype = item.contentType
|
||||
context_commands.append(("[COLOR yellow]Buscar Similares[/COLOR]", "XBMC.Container.Update (%s?%s)" % (
|
||||
context_commands.append(("[COLOR yellow]%s[/COLOR]" % config.get_localized_string(70561), "XBMC.Container.Update (%s?%s)" % (
|
||||
sys.argv[0], item.clone(channel='search', action='discover_list', search_type='list', page='1',
|
||||
list_type='%s/%s/similar' % (mediatype,item.infoLabels['tmdb_id'])).tourl())))
|
||||
|
||||
@@ -1044,6 +1044,8 @@ def torrent_client_installed(show_tuple=False):
|
||||
|
||||
def play_torrent(item, xlistitem, mediaurl):
|
||||
logger.info()
|
||||
import time
|
||||
|
||||
# Opciones disponibles para Reproducir torrents
|
||||
torrent_options = list()
|
||||
torrent_options.append(["Cliente interno (necesario libtorrent)"])
|
||||
@@ -1066,28 +1068,32 @@ def play_torrent(item, xlistitem, mediaurl):
|
||||
|
||||
# Plugins externos
|
||||
if seleccion > 1:
|
||||
|
||||
#### Compatibilidad con Kodi 18: evita cuelgues/cancelaciones cuando el .torrent se lanza desde pantalla convencional
|
||||
if xbmc.getCondVisibility('Window.IsMedia'):
|
||||
xbmcplugin.setResolvedUrl(int(sys.argv[1]), False, xlistitem) #Preparamos el entorno para evutar error Kod1 18
|
||||
time.sleep(1) #Dejamos que se ejecute
|
||||
|
||||
mediaurl = urllib.quote_plus(item.url)
|
||||
if ("quasar" in torrent_options[seleccion][1] or "elementum" in torrent_options[seleccion][1]) and item.infoLabels['tmdb_id']: #Llamada con más parámetros para completar el título
|
||||
if item.contentType == 'episode' and "elementum" not in torrent_options[seleccion][1]:
|
||||
mediaurl += "&episode=%s&library=&season=%s&show=%s&tmdb=%s&type=episode" % (item.infoLabels['episode'], item.infoLabels['season'], item.infoLabels['tmdb_id'], item.infoLabels['tmdb_id'])
|
||||
elif item.contentType == 'movie':
|
||||
mediaurl += "&library=&tmdb=%s&type=movie" % (item.infoLabels['tmdb_id'])
|
||||
xbmc.executebuiltin("PlayMedia(" + torrent_options[seleccion][1] % mediaurl + ")")
|
||||
|
||||
if "quasar" in torrent_options[seleccion][1] or "elementum" in torrent_options[seleccion][1]: #Seleccionamos que clientes torrent soportamos
|
||||
if item.strm_path: #Sólo si es de Videoteca
|
||||
import time
|
||||
time_limit = time.time() + 150 #Marcamos el timepo máx. de buffering
|
||||
while not is_playing() and time.time() < time_limit: #Esperamos mientra buffera
|
||||
time.sleep(5) #Repetimos cada intervalo
|
||||
#logger.debug(str(time_limit))
|
||||
|
||||
if is_playing(): #Ha terminado de bufferar o ha cancelado
|
||||
from platformcode import xbmc_videolibrary
|
||||
xbmc_videolibrary.mark_auto_as_watched(item) #Marcamos como visto al terminar
|
||||
#logger.debug("Llamado el marcado")
|
||||
#else:
|
||||
#logger.debug("Video cancelado o timeout")
|
||||
xbmc.executebuiltin("PlayMedia(" + torrent_options[seleccion][1] % mediaurl + ")")
|
||||
|
||||
#Seleccionamos que clientes torrent soportamos para el marcado de vídeos vistos
|
||||
if "quasar" in torrent_options[seleccion][1] or "elementum" in torrent_options[seleccion][1]:
|
||||
time_limit = time.time() + 150 #Marcamos el timepo máx. de buffering
|
||||
while not is_playing() and time.time() < time_limit: #Esperamos mientra buffera
|
||||
time.sleep(5) #Repetimos cada intervalo
|
||||
#logger.debug(str(time_limit))
|
||||
|
||||
if item.strm_path and is_playing(): #Sólo si es de Videoteca
|
||||
from platformcode import xbmc_videolibrary
|
||||
xbmc_videolibrary.mark_auto_as_watched(item) #Marcamos como visto al terminar
|
||||
#logger.debug("Llamado el marcado")
|
||||
|
||||
if seleccion == 1:
|
||||
from platformcode import mct
|
||||
|
||||
@@ -1734,7 +1734,7 @@ msgid "[COLOR %s]Filter configuration for TV series...[/COLOR]"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#60430"
|
||||
msgid "FILTRO: Delete '%s'"
|
||||
msgid "FILTER: Delete '%s'"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#60431"
|
||||
@@ -4804,14 +4804,142 @@ msgid "Verification of counters of videos seen / not seen (uncheck to verify)"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70527"
|
||||
msgid "Now in Theatres "
|
||||
msgid "My links"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70528"
|
||||
msgid "Movies by Genre"
|
||||
msgid "Default folder"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70529"
|
||||
msgid "tv show"
|
||||
msgid "Repeated link"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70530"
|
||||
msgid "You already have this link in the folder"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70531"
|
||||
msgid "Saved link"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70532"
|
||||
msgid "Folder: %s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70533"
|
||||
msgid "Rename folder"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70534"
|
||||
msgid "Delete folder"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70535"
|
||||
msgid "Move up all"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70536"
|
||||
msgid "Move up"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70537"
|
||||
msgid "Move down"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70538"
|
||||
msgid "Move down all"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70539"
|
||||
msgid "* Create different folders to store your favorite links within Icarus. [CR]"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70540"
|
||||
msgid "* To add links to folders, access the context menu from any point in Icarus.[CR]"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70541"
|
||||
msgid "* The links can be channels, sections within the channels, searches, and even movies and series although for the latter it is preferable to use the video library."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70542"
|
||||
msgid "Create new folder ..."
|
||||
msgstr "Creaa nuova cartella ..."
|
||||
|
||||
msgctxt "#70543"
|
||||
msgid "Move to another folder"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70544"
|
||||
msgid "Change title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70545"
|
||||
msgid "Change color"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70546"
|
||||
msgid "Save link in:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70547"
|
||||
msgid "Change thumbnail"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70548"
|
||||
msgid "Delete link"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70549"
|
||||
msgid "Select folder"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70550"
|
||||
msgid "Create new folder"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70551"
|
||||
msgid "Folder name"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70552"
|
||||
msgid "Delete the folder and links it contains?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70553"
|
||||
msgid "Change link title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70554"
|
||||
msgid "Select thumbnail:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70555"
|
||||
msgid "Move link to:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70556"
|
||||
msgid "%d links in folder"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70557"
|
||||
msgid "Save link"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70558"
|
||||
msgid "Select color:"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70559"
|
||||
msgid "Now in Theatres "
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70560"
|
||||
msgid "Movies by Genre"
|
||||
msgstr "
|
||||
|
||||
msgctxt "#70561"
|
||||
msgid "Search Similar
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -4792,14 +4792,143 @@ msgid "Verification of counters of videos seen / not seen (uncheck to verify)"
|
||||
msgstr "Verifica dei contatori di video visti/non visti (deselezionare per verificare)"
|
||||
|
||||
msgctxt "#70527"
|
||||
msgid "My links"
|
||||
msgstr "I Miei Link"
|
||||
|
||||
msgctxt "#70528"
|
||||
msgid "Default folder"
|
||||
msgstr "Cartella di Default"
|
||||
|
||||
msgctxt "#70529"
|
||||
msgid "Repeated link"
|
||||
msgstr "Link ripetuto"
|
||||
|
||||
msgctxt "#70530"
|
||||
msgid "You already have this link in the folder"
|
||||
msgstr "C'è già un link nella cartella"
|
||||
|
||||
msgctxt "#70531"
|
||||
msgid "Saved link"
|
||||
msgstr "Link salvato"
|
||||
|
||||
msgctxt "#70532"
|
||||
msgid "Folder: %s"
|
||||
msgstr "Cartella: %s"
|
||||
|
||||
msgctxt "#70533"
|
||||
msgid "Rename folder"
|
||||
msgstr "Cambia nome alla cartella"
|
||||
|
||||
msgctxt "#70534"
|
||||
msgid "Delete folder"
|
||||
msgstr "Elimina la cartella"
|
||||
|
||||
msgctxt "#70535"
|
||||
msgid "Move up all"
|
||||
msgstr "Sposta tutto in alto"
|
||||
|
||||
msgctxt "#70536"
|
||||
msgid "Move up"
|
||||
msgstr "Sposta in su"
|
||||
|
||||
msgctxt "#70537"
|
||||
msgid "Move down"
|
||||
msgstr "Sposta in giù"
|
||||
|
||||
msgctxt "#70538"
|
||||
msgid "Move down all"
|
||||
msgstr "Sposta tutto in basso"
|
||||
|
||||
msgctxt "#70539"
|
||||
msgid "* Create different folders to store your favorite links within Icarus. [CR]"
|
||||
msgstr "* Crea diverse cartelle per memorizzare i tuoi collegamenti preferiti all'interno di Icarus."
|
||||
|
||||
msgctxt "#70540"
|
||||
msgid "* To add links to folders, access the context menu from any point in Icarus.[CR]"
|
||||
msgstr "* Per aggiungere collegamenti alle cartelle accedi al menu contestuale da qualsiasi punto di Icarus."
|
||||
|
||||
msgctxt "#70541"
|
||||
msgid "* The links can be channels, sections within the channels, searches, and even movies and series although for the latter it is preferable to use the video library."
|
||||
msgstr "* I collegamenti possono essere canali, sezioni all'interno dei canali, ricerche e persino film e serie, sebbene per quest'ultimo sia preferibile utilizzare la videoteca."
|
||||
|
||||
msgctxt "#70542"
|
||||
msgid "Create new folder ..."
|
||||
msgstr "Crea nuova cartella ..."
|
||||
|
||||
msgctxt "#70543"
|
||||
msgid "Move to another folder"
|
||||
msgstr "Sposta in altra cartella"
|
||||
|
||||
msgctxt "#70544"
|
||||
msgid "Change title"
|
||||
msgstr "Cambia titolo"
|
||||
|
||||
msgctxt "#70545"
|
||||
msgid "Change color"
|
||||
msgstr "Cambia colore"
|
||||
|
||||
msgctxt "#70546"
|
||||
msgid "Save link in:"
|
||||
msgstr "Salva link in:"
|
||||
|
||||
msgctxt "#70547"
|
||||
msgid "Change thumbnail"
|
||||
msgstr "Cambia thumbnail"
|
||||
|
||||
msgctxt "#70548"
|
||||
msgid "Delete link"
|
||||
msgstr "Elimina link"
|
||||
|
||||
msgctxt "#70549"
|
||||
msgid "Select folder"
|
||||
msgstr "Seleziona cartella"
|
||||
|
||||
msgctxt "#70550"
|
||||
msgid "Create new folder"
|
||||
msgstr "Crea nuova cartella"
|
||||
|
||||
msgctxt "#70551"
|
||||
msgid "Folder name"
|
||||
msgstr "Nome della cartella"
|
||||
|
||||
msgctxt "#70552"
|
||||
msgid "Delete the folder and links it contains?"
|
||||
msgstr "Eliminare la cartella con tutti i link?"
|
||||
|
||||
msgctxt "#70553"
|
||||
msgid "Change link title"
|
||||
msgstr "Cambia titolo del link"
|
||||
|
||||
msgctxt "#70554"
|
||||
msgid "Select thumbnail:"
|
||||
msgstr "Seleziona thumbnail:"
|
||||
|
||||
msgctxt "#70555"
|
||||
msgid "Move link to:"
|
||||
msgstr "Sposta link in:"
|
||||
|
||||
msgctxt "#70556"
|
||||
msgid "%d links in folder"
|
||||
msgstr "%d link nella cartella"
|
||||
|
||||
msgctxt "#70557"
|
||||
msgid "Save link"
|
||||
msgstr "Salva link"
|
||||
|
||||
msgctxt "#70558"
|
||||
msgid "Select color:"
|
||||
msgstr "Seleziona colore:"
|
||||
|
||||
msgctxt "#70559"
|
||||
msgid "Now in Theatres "
|
||||
msgstr "Oggi in Sala"
|
||||
|
||||
msgctxt "#70528"
|
||||
msgctxt "#70560"
|
||||
msgid "Movies by Genre"
|
||||
msgstr "Per genere"
|
||||
|
||||
msgctxt "#70529"
|
||||
msgid "tv show"
|
||||
msgstr "serie"
|
||||
msgctxt "#70561"
|
||||
msgid "Search Similar
|
||||
msgstr "Cerca Simili"
|
||||
|
||||
|
||||
|
||||
@@ -1734,7 +1734,7 @@ msgid "[COLOR %s]Filter configuration for TV series...[/COLOR]"
|
||||
msgstr "[COLOR %s]Configurar filtro para series...[/COLOR]"
|
||||
|
||||
msgctxt "#60430"
|
||||
msgid "FILTRO: Delete '%s'"
|
||||
msgid "FILTER: Delete '%s'"
|
||||
msgstr "FILTRO: Borrar '%s'"
|
||||
|
||||
msgctxt "#60431"
|
||||
@@ -4792,13 +4792,150 @@ msgid "Verification of counters of videos seen / not seen (uncheck to verify)"
|
||||
msgstr "Verificación de los contadores de vídeos vistos/no vistos (desmarcar para verificar)"
|
||||
|
||||
msgctxt "#70527"
|
||||
msgid "My links"
|
||||
msgstr "Mis enlaces"
|
||||
|
||||
msgctxt "#70528"
|
||||
msgid "Default folder"
|
||||
msgstr "Carpeta por defecto"
|
||||
|
||||
msgctxt "#70529"
|
||||
msgid "Repeated link"
|
||||
msgstr "Enlace repetido"
|
||||
|
||||
msgctxt "#70530"
|
||||
msgid "You already have this link in the folder"
|
||||
msgstr "Ya tienes este enlace en la carpeta"
|
||||
|
||||
msgctxt "#70531"
|
||||
msgid "Saved link"
|
||||
msgstr "Guardado enlace"
|
||||
|
||||
msgctxt "#70532"
|
||||
msgid "Folder: %s"
|
||||
msgstr "Carpeta: %s"
|
||||
|
||||
msgctxt "#70533"
|
||||
msgid "Rename folder"
|
||||
msgstr "Cambiar nombre de la carpeta"
|
||||
|
||||
msgctxt "#70534"
|
||||
msgid "Delete folder"
|
||||
msgstr "Eliminar la carpeta"
|
||||
|
||||
msgctxt "#70535"
|
||||
msgid "Move up all"
|
||||
msgstr "Mover arriba del todo"
|
||||
|
||||
msgctxt "#70536"
|
||||
msgid "Move up"
|
||||
msgstr "Mover hacia arriba"
|
||||
|
||||
msgctxt "#70537"
|
||||
msgid "Move down"
|
||||
msgstr "Mover hacia abajo"
|
||||
|
||||
msgctxt "#70538"
|
||||
msgid "Move down all"
|
||||
msgstr "Mover abajo del todo"
|
||||
|
||||
msgctxt "#70539"
|
||||
msgid "* Create different folders to store your favorite links within Icarus. [CR]"
|
||||
msgstr "* Crea diferentes carpetas para guardar tus enlaces favoritos dentro de Icarus.[CR]]"
|
||||
|
||||
msgctxt "#70540"
|
||||
msgid "* To add links to folders, access the context menu from any point in Icarus.[CR]"
|
||||
msgstr "* Para añadir enlaces a las carpetas accede al menú contextual desde cualquier punto de Icarus.[CR]"
|
||||
|
||||
msgctxt "#70541"
|
||||
msgid "* The links can be channels, sections within the channels, searches, and even movies and series although for the latter it is preferable to use the video library."
|
||||
msgstr "* Los enlaces pueden ser canales, secciones dentro de los canales, búsquedas, e incluso películas y series aunque para esto último es preferible utilizar la videoteca."
|
||||
|
||||
msgctxt "#70542"
|
||||
msgid "Create new folder ..."
|
||||
msgstr "Crear nueva carpeta ..."
|
||||
|
||||
msgctxt "#70543"
|
||||
msgid "Move to another folder"
|
||||
msgstr "Mover a otra carpeta"
|
||||
|
||||
msgctxt "#70544"
|
||||
msgid "Change title"
|
||||
msgstr "Cambiar título"
|
||||
|
||||
msgctxt "#70545"
|
||||
msgid "Change color"
|
||||
msgstr "Cambiar color"
|
||||
|
||||
msgctxt "#70546"
|
||||
msgid "Save link in:"
|
||||
msgstr "Guardar enlace en:"
|
||||
|
||||
msgctxt "#70547"
|
||||
msgid "Change thumbnail"
|
||||
msgstr "Cambiar thumbnail"
|
||||
|
||||
msgctxt "#70548"
|
||||
msgid "Delete link"
|
||||
msgstr "Eliminar enlace"
|
||||
|
||||
msgctxt "#70549"
|
||||
msgid "Select folder"
|
||||
msgstr "Seleccionar carpeta"
|
||||
|
||||
msgctxt "#70550"
|
||||
msgid "Create new folder"
|
||||
msgstr "Crear nueva carpeta"
|
||||
|
||||
msgctxt "#70551"
|
||||
msgid "Folder name"
|
||||
msgstr "Nombre de la carpeta"
|
||||
|
||||
msgctxt "#70552"
|
||||
msgid "Delete the folder and links it contains?"
|
||||
msgstr "¿Borrar la carpeta y los enlaces que contiene?"
|
||||
|
||||
msgctxt "#70553"
|
||||
msgid "Change link title"
|
||||
msgstr "Cambiar título del enlace"
|
||||
|
||||
msgctxt "#70554"
|
||||
msgid "Select thumbnail:"
|
||||
msgstr "Seleccionar thumbnail:"
|
||||
|
||||
msgctxt "#70555"
|
||||
msgid "Move link to:"
|
||||
msgstr "Mover enlace a:"
|
||||
|
||||
msgctxt "#70556"
|
||||
msgid "%d links in folder"
|
||||
msgstr "%d enlaces en la carpeta"
|
||||
|
||||
msgctxt "#70557"
|
||||
msgid "Save link"
|
||||
msgstr "Guardar enlace"
|
||||
|
||||
msgctxt "#70558"
|
||||
msgid "Select color:"
|
||||
msgstr "Seleccionar color:"
|
||||
|
||||
msgctxt "#70559"
|
||||
msgid "Now in Theatres "
|
||||
msgstr "Ahora en cines"
|
||||
|
||||
msgctxt "#70528"
|
||||
msgctxt "#70560"
|
||||
msgid "Movies by Genre"
|
||||
msgstr "Por generos"
|
||||
|
||||
msgctxt "#70529"
|
||||
msgid "tv show"
|
||||
msgstr "serie"
|
||||
msgctxt "#70561"
|
||||
msgid "Search Similar
|
||||
msgstr "Buscar Similares"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1734,7 +1734,7 @@ msgid "[COLOR %s]Filter configuration for TV series...[/COLOR]"
|
||||
msgstr "[COLOR %s]Configurar filtro para series...[/COLOR]"
|
||||
|
||||
msgctxt "#60430"
|
||||
msgid "FILTRO: Delete '%s'"
|
||||
msgid "FILTER: Delete '%s'"
|
||||
msgstr "FILTRO: Borrar '%s'"
|
||||
|
||||
msgctxt "#60431"
|
||||
@@ -4792,13 +4792,150 @@ msgid "Verification of counters of videos seen / not seen (uncheck to verify)"
|
||||
msgstr "Verificación de los contadores de vídeos vistos/no vistos (desmarcar para verificar)"
|
||||
|
||||
msgctxt "#70527"
|
||||
msgid "My links"
|
||||
msgstr "Mis enlaces"
|
||||
|
||||
msgctxt "#70528"
|
||||
msgid "Default folder"
|
||||
msgstr "Carpeta por defecto"
|
||||
|
||||
msgctxt "#70529"
|
||||
msgid "Repeated link"
|
||||
msgstr "Enlace repetido"
|
||||
|
||||
msgctxt "#70530"
|
||||
msgid "You already have this link in the folder"
|
||||
msgstr "Ya tienes este enlace en la carpeta"
|
||||
|
||||
msgctxt "#70531"
|
||||
msgid "Saved link"
|
||||
msgstr "Guardado enlace"
|
||||
|
||||
msgctxt "#70532"
|
||||
msgid "Folder: %s"
|
||||
msgstr "Carpeta: %s"
|
||||
|
||||
msgctxt "#70533"
|
||||
msgid "Rename folder"
|
||||
msgstr "Cambiar nombre de la carpeta"
|
||||
|
||||
msgctxt "#70534"
|
||||
msgid "Delete folder"
|
||||
msgstr "Eliminar la carpeta"
|
||||
|
||||
msgctxt "#70535"
|
||||
msgid "Move up all"
|
||||
msgstr "Mover arriba del todo"
|
||||
|
||||
msgctxt "#70536"
|
||||
msgid "Move up"
|
||||
msgstr "Mover hacia arriba"
|
||||
|
||||
msgctxt "#70537"
|
||||
msgid "Move down"
|
||||
msgstr "Mover hacia abajo"
|
||||
|
||||
msgctxt "#70538"
|
||||
msgid "Move down all"
|
||||
msgstr "Mover abajo del todo"
|
||||
|
||||
msgctxt "#70539"
|
||||
msgid "* Create different folders to store your favorite links within Icarus. [CR]"
|
||||
msgstr "* Crea diferentes carpetas para guardar tus enlaces favoritos dentro de Icarus.[CR]]"
|
||||
|
||||
msgctxt "#70540"
|
||||
msgid "* To add links to folders, access the context menu from any point in Icarus.[CR]"
|
||||
msgstr "* Para añadir enlaces a las carpetas accede al menú contextual desde cualquier punto de Icarus.[CR]"
|
||||
|
||||
msgctxt "#70541"
|
||||
msgid "* The links can be channels, sections within the channels, searches, and even movies and series although for the latter it is preferable to use the video library."
|
||||
msgstr "* Los enlaces pueden ser canales, secciones dentro de los canales, búsquedas, e incluso películas y series aunque para esto último es preferible utilizar la videoteca."
|
||||
|
||||
msgctxt "#70542"
|
||||
msgid "Create new folder ..."
|
||||
msgstr "Crear nueva carpeta ..."
|
||||
|
||||
msgctxt "#70543"
|
||||
msgid "Move to another folder"
|
||||
msgstr "Mover a otra carpeta"
|
||||
|
||||
msgctxt "#70544"
|
||||
msgid "Change title"
|
||||
msgstr "Cambiar título"
|
||||
|
||||
msgctxt "#70545"
|
||||
msgid "Change color"
|
||||
msgstr "Cambiar color"
|
||||
|
||||
msgctxt "#70546"
|
||||
msgid "Save link in:"
|
||||
msgstr "Guardar enlace en:"
|
||||
|
||||
msgctxt "#70547"
|
||||
msgid "Change thumbnail"
|
||||
msgstr "Cambiar thumbnail"
|
||||
|
||||
msgctxt "#70548"
|
||||
msgid "Delete link"
|
||||
msgstr "Eliminar enlace"
|
||||
|
||||
msgctxt "#70549"
|
||||
msgid "Select folder"
|
||||
msgstr "Seleccionar carpeta"
|
||||
|
||||
msgctxt "#70550"
|
||||
msgid "Create new folder"
|
||||
msgstr "Crear nueva carpeta"
|
||||
|
||||
msgctxt "#70551"
|
||||
msgid "Folder name"
|
||||
msgstr "Nombre de la carpeta"
|
||||
|
||||
msgctxt "#70552"
|
||||
msgid "Delete the folder and links it contains?"
|
||||
msgstr "¿Borrar la carpeta y los enlaces que contiene?"
|
||||
|
||||
msgctxt "#70553"
|
||||
msgid "Change link title"
|
||||
msgstr "Cambiar título del enlace"
|
||||
|
||||
msgctxt "#70554"
|
||||
msgid "Select thumbnail:"
|
||||
msgstr "Seleccionar thumbnail:"
|
||||
|
||||
msgctxt "#70555"
|
||||
msgid "Move link to:"
|
||||
msgstr "Mover enlace a:"
|
||||
|
||||
msgctxt "#70556"
|
||||
msgid "%d links in folder"
|
||||
msgstr "%d enlaces en la carpeta"
|
||||
|
||||
msgctxt "#70557"
|
||||
msgid "Save link"
|
||||
msgstr "Guardar enlace"
|
||||
|
||||
msgctxt "#70558"
|
||||
msgid "Select color:"
|
||||
msgstr "Seleccionar color:"
|
||||
|
||||
msgctxt "#70559"
|
||||
msgid "Now in Theatres "
|
||||
msgstr "Ahora en cines"
|
||||
|
||||
msgctxt "#70528"
|
||||
msgctxt "#70560"
|
||||
msgid "Movies by Genre"
|
||||
msgstr "Por generos"
|
||||
|
||||
msgctxt "#70529"
|
||||
msgid "tv show"
|
||||
msgstr "serie"
|
||||
msgctxt "#70561"
|
||||
msgid "Search Similar
|
||||
msgstr "Buscar Similares"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1734,7 +1734,7 @@ msgid "[COLOR %s]Filter configuration for TV series...[/COLOR]"
|
||||
msgstr "[COLOR %s]Configurar filtro para series...[/COLOR]"
|
||||
|
||||
msgctxt "#60430"
|
||||
msgid "FILTRO: Delete '%s'"
|
||||
msgid "FILTER: Delete '%s'"
|
||||
msgstr "FILTRO: Borrar '%s'"
|
||||
|
||||
msgctxt "#60431"
|
||||
@@ -4792,13 +4792,150 @@ msgid "Verification of counters of videos seen / not seen (uncheck to verify)"
|
||||
msgstr "Verificación de los contadores de vídeos vistos/no vistos (desmarcar para verificar)"
|
||||
|
||||
msgctxt "#70527"
|
||||
msgid "My links"
|
||||
msgstr "Mis enlaces"
|
||||
|
||||
msgctxt "#70528"
|
||||
msgid "Default folder"
|
||||
msgstr "Carpeta por defecto"
|
||||
|
||||
msgctxt "#70529"
|
||||
msgid "Repeated link"
|
||||
msgstr "Enlace repetido"
|
||||
|
||||
msgctxt "#70530"
|
||||
msgid "You already have this link in the folder"
|
||||
msgstr "Ya tienes este enlace en la carpeta"
|
||||
|
||||
msgctxt "#70531"
|
||||
msgid "Saved link"
|
||||
msgstr "Guardado enlace"
|
||||
|
||||
msgctxt "#70532"
|
||||
msgid "Folder: %s"
|
||||
msgstr "Carpeta: %s"
|
||||
|
||||
msgctxt "#70533"
|
||||
msgid "Rename folder"
|
||||
msgstr "Cambiar nombre de la carpeta"
|
||||
|
||||
msgctxt "#70534"
|
||||
msgid "Delete folder"
|
||||
msgstr "Eliminar la carpeta"
|
||||
|
||||
msgctxt "#70535"
|
||||
msgid "Move up all"
|
||||
msgstr "Mover arriba del todo"
|
||||
|
||||
msgctxt "#70536"
|
||||
msgid "Move up"
|
||||
msgstr "Mover hacia arriba"
|
||||
|
||||
msgctxt "#70537"
|
||||
msgid "Move down"
|
||||
msgstr "Mover hacia abajo"
|
||||
|
||||
msgctxt "#70538"
|
||||
msgid "Move down all"
|
||||
msgstr "Mover abajo del todo"
|
||||
|
||||
msgctxt "#70539"
|
||||
msgid "* Create different folders to store your favorite links within Icarus. [CR]"
|
||||
msgstr "* Crea diferentes carpetas para guardar tus enlaces favoritos dentro de Icarus.[CR]]"
|
||||
|
||||
msgctxt "#70540"
|
||||
msgid "* To add links to folders, access the context menu from any point in Icarus.[CR]"
|
||||
msgstr "* Para añadir enlaces a las carpetas accede al menú contextual desde cualquier punto de Icarus.[CR]"
|
||||
|
||||
msgctxt "#70541"
|
||||
msgid "* The links can be channels, sections within the channels, searches, and even movies and series although for the latter it is preferable to use the video library."
|
||||
msgstr "* Los enlaces pueden ser canales, secciones dentro de los canales, búsquedas, e incluso películas y series aunque para esto último es preferible utilizar la videoteca."
|
||||
|
||||
msgctxt "#70542"
|
||||
msgid "Create new folder ..."
|
||||
msgstr "Crear nueva carpeta ..."
|
||||
|
||||
msgctxt "#70543"
|
||||
msgid "Move to another folder"
|
||||
msgstr "Mover a otra carpeta"
|
||||
|
||||
msgctxt "#70544"
|
||||
msgid "Change title"
|
||||
msgstr "Cambiar título"
|
||||
|
||||
msgctxt "#70545"
|
||||
msgid "Change color"
|
||||
msgstr "Cambiar color"
|
||||
|
||||
msgctxt "#70546"
|
||||
msgid "Save link in:"
|
||||
msgstr "Guardar enlace en:"
|
||||
|
||||
msgctxt "#70547"
|
||||
msgid "Change thumbnail"
|
||||
msgstr "Cambiar thumbnail"
|
||||
|
||||
msgctxt "#70548"
|
||||
msgid "Delete link"
|
||||
msgstr "Eliminar enlace"
|
||||
|
||||
msgctxt "#70549"
|
||||
msgid "Select folder"
|
||||
msgstr "Seleccionar carpeta"
|
||||
|
||||
msgctxt "#70550"
|
||||
msgid "Create new folder"
|
||||
msgstr "Crear nueva carpeta"
|
||||
|
||||
msgctxt "#70551"
|
||||
msgid "Folder name"
|
||||
msgstr "Nombre de la carpeta"
|
||||
|
||||
msgctxt "#70552"
|
||||
msgid "Delete the folder and links it contains?"
|
||||
msgstr "¿Borrar la carpeta y los enlaces que contiene?"
|
||||
|
||||
msgctxt "#70553"
|
||||
msgid "Change link title"
|
||||
msgstr "Cambiar título del enlace"
|
||||
|
||||
msgctxt "#70554"
|
||||
msgid "Select thumbnail:"
|
||||
msgstr "Seleccionar thumbnail:"
|
||||
|
||||
msgctxt "#70555"
|
||||
msgid "Move link to:"
|
||||
msgstr "Mover enlace a:"
|
||||
|
||||
msgctxt "#70556"
|
||||
msgid "%d links in folder"
|
||||
msgstr "%d enlaces en la carpeta"
|
||||
|
||||
msgctxt "#70557"
|
||||
msgid "Save link"
|
||||
msgstr "Guardar enlace"
|
||||
|
||||
msgctxt "#70558"
|
||||
msgid "Select color:"
|
||||
msgstr "Seleccionar color:"
|
||||
|
||||
msgctxt "#70559"
|
||||
msgid "Now in Theatres "
|
||||
msgstr "Ahora en cines"
|
||||
|
||||
msgctxt "#70528"
|
||||
msgctxt "#70560"
|
||||
msgid "Movies by Genre"
|
||||
msgstr "Por generos"
|
||||
|
||||
msgctxt "#70529"
|
||||
msgid "tv show"
|
||||
msgstr "serie"
|
||||
msgctxt "#70561"
|
||||
msgid "Search Similar
|
||||
msgstr "Buscar Similares"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
BIN
plugin.video.alfa/resources/media/channels/thumb/maxipelis24.png
Normal file
BIN
plugin.video.alfa/resources/media/channels/thumb/maxipelis24.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
BIN
plugin.video.alfa/resources/media/channels/thumb/zonatorrent.png
Normal file
BIN
plugin.video.alfa/resources/media/channels/thumb/zonatorrent.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 35 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 36 KiB |
Reference in New Issue
Block a user