Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -35,7 +35,7 @@ def run(item):
|
||||
if item.action == "mainlist":
|
||||
# Parental control
|
||||
if channeltools.is_adult(item.channel) and config.get_setting("adult_request_password"):
|
||||
tecleado = platformtools.dialog_input("", "Contraseña para canales de adultos", True)
|
||||
tecleado = platformtools.dialog_input("", config.get_localized_string(60334), True)
|
||||
if tecleado is None or tecleado != config.get_setting("adult_password"):
|
||||
platformtools.render_items(None, item)
|
||||
return
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<addon id="plugin.video.alfa" name="Alfa" version="2.5.29" provider-name="Alfa Addon">
|
||||
<addon id="plugin.video.alfa" name="Alfa" version="2.6" provider-name="Alfa Addon">
|
||||
<requires>
|
||||
<import addon="xbmc.python" version="2.1.0"/>
|
||||
<import addon="script.module.libtorrent" optional="true"/>
|
||||
@@ -10,7 +10,7 @@
|
||||
<extension point="xbmc.addon.metadata">
|
||||
<summary lang="es">Navega con Kodi por páginas web.</summary>
|
||||
<assets>
|
||||
<icon>icon.png</icon>
|
||||
<icon>logo-cumple.png</icon>
|
||||
<fanart>fanart.jpg</fanart>
|
||||
<screenshot>resources/media/themes/ss/1.jpg</screenshot>
|
||||
<screenshot>resources/media/themes/ss/2.jpg</screenshot>
|
||||
@@ -19,13 +19,10 @@
|
||||
</assets>
|
||||
<news>[B]Estos son los cambios para esta versión:[/B]
|
||||
[COLOR green][B]Canales agregados y arreglos[/B][/COLOR]
|
||||
¤ doomtv ¤ locopelis
|
||||
¤ veseriesonline ¤ hdfull
|
||||
¤ flashx ¤ powvideo
|
||||
¤ vidoza ¤ alltorrent
|
||||
¤ elitetorrent ¤ grantorrent
|
||||
¤ mejortorrent ¤ newpct1
|
||||
¤ poseidonhd
|
||||
¤ goovie ¤ retroseriestv
|
||||
¤ pelisr ¤ planetadocumental
|
||||
¤ mejortorrent ¤ alltorrent
|
||||
¤ veseriesonline ¤ seriesblanco
|
||||
|
||||
¤ arreglos internos
|
||||
|
||||
|
||||
79
plugin.video.alfa/channels/goovie.json
Normal file
79
plugin.video.alfa/channels/goovie.json
Normal file
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"id": "goovie",
|
||||
"name": "Goovie",
|
||||
"active": true,
|
||||
"adult": false,
|
||||
"language": ["cast", "lat"],
|
||||
"thumbnail": "https://s15.postimg.cc/n9wp4nnzv/goovie.png",
|
||||
"banner": "",
|
||||
"categories": [
|
||||
"movie",
|
||||
"tvshow"
|
||||
],
|
||||
"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",
|
||||
"VO"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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" ]
|
||||
}
|
||||
]
|
||||
}
|
||||
329
plugin.video.alfa/channels/goovie.py
Normal file
329
plugin.video.alfa/channels/goovie.py
Normal file
@@ -0,0 +1,329 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# -*- Channel Goovie -*-
|
||||
# -*- Created for Alfa-addon -*-
|
||||
# -*- By the Alfa Develop Group -*-
|
||||
|
||||
import re
|
||||
import urllib
|
||||
from channelselector import get_thumb
|
||||
from core import httptools
|
||||
from core import jsontools
|
||||
from core import scrapertools
|
||||
from core import servertools
|
||||
from core import tmdb
|
||||
from core.item import Item
|
||||
from channels import filtertools
|
||||
from channels import autoplay
|
||||
from platformcode import config, logger
|
||||
|
||||
|
||||
IDIOMAS = {'1':'Cast', '2':'Lat', '3':'VOSE', '4':'VO'}
|
||||
list_language = IDIOMAS.values()
|
||||
|
||||
CALIDADES = {'1':'1080','2':'720','3':'480','4':'360'}
|
||||
|
||||
list_quality = ['1080', '720', '480', '360']
|
||||
|
||||
list_servers = [
|
||||
'powvideo'
|
||||
]
|
||||
|
||||
__comprueba_enlaces__ = config.get_setting('comprueba_enlaces', 'goovie')
|
||||
__comprueba_enlaces_num__ = config.get_setting('comprueba_enlaces_num', 'goovie')
|
||||
|
||||
host = 'https://goovie.co/'
|
||||
|
||||
def mainlist(item):
|
||||
logger.info()
|
||||
|
||||
autoplay.init(item.channel, list_servers, list_quality)
|
||||
|
||||
itemlist = []
|
||||
|
||||
itemlist.append(Item(channel=item.channel, title='Peliculas', action='sub_menu', type='peliculas',
|
||||
thumbnail= get_thumb('movies', auto=True)))
|
||||
itemlist.append(Item(channel=item.channel, title='Series', action='sub_menu', type='series',
|
||||
thumbnail= get_thumb('tvshows', auto=True)))
|
||||
itemlist.append(
|
||||
item.clone(title="Buscar", action="search", url=host + 'search?go=', thumbnail=get_thumb("search", auto=True),
|
||||
extra='movie'))
|
||||
|
||||
autoplay.show_option(item.channel, itemlist)
|
||||
|
||||
return itemlist
|
||||
|
||||
def sub_menu(item):
|
||||
logger.info()
|
||||
|
||||
itemlist=[]
|
||||
|
||||
itemlist.append(Item(channel=item.channel, title='Todas', url=host + item.type, action='list_all',
|
||||
thumbnail=get_thumb('all', auto=True), type=item.type))
|
||||
itemlist.append(Item(channel=item.channel, title='Genero', action='section',
|
||||
thumbnail=get_thumb('genres', auto=True), type=item.type))
|
||||
itemlist.append(Item(channel=item.channel, title='Por Año', action='section',
|
||||
thumbnail=get_thumb('year', auto=True), type=item.type))
|
||||
|
||||
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=[]
|
||||
data = get_source(host+item.type)
|
||||
|
||||
if 'Genero' in item.title:
|
||||
data = scrapertools.find_single_match(data, 'genero.*?</ul>')
|
||||
elif 'Año' in item.title:
|
||||
data = scrapertools.find_single_match(data, 'año.*?</ul>')
|
||||
patron = '<a href=(.*?) >(.*?)</a>'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedurl, scrapedtitle in matches:
|
||||
title = scrapedtitle
|
||||
itemlist.append(Item(channel=item.channel, url=scrapedurl, title=title, action='list_all',
|
||||
type=item.type))
|
||||
return itemlist
|
||||
|
||||
|
||||
def list_all(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
|
||||
data = get_source(item.url)
|
||||
#logger.debug(data)
|
||||
#return
|
||||
if item.type == 'peliculas':
|
||||
patron = '<article class=Items>.*?<img src=(.*?) />.*?<a href=(.*?)><h2>(.*?)</h2>.*?'
|
||||
patron += "<p>(.*?)</p><span>(\d{4}) /.*?</span>.*?'(\d+)'"
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedthumbnail, scrapedurl, scrapedtitle, scrapedplot, year, video_id in matches:
|
||||
|
||||
title = '%s [%s]' % (scrapedtitle, year)
|
||||
contentTitle = scrapedtitle
|
||||
thumbnail = scrapedthumbnail
|
||||
url = scrapedurl
|
||||
|
||||
itemlist.append(item.clone(action='findvideos',
|
||||
title=title,
|
||||
url=url,
|
||||
thumbnail=thumbnail,
|
||||
contentTitle=contentTitle,
|
||||
video_id=video_id,
|
||||
infoLabels={'year':year}))
|
||||
|
||||
elif item.type == 'series':
|
||||
patron = '<article class=GoItemEp>.*?<a href=(.*?)>.*?<img src=(.*?) />.*?'
|
||||
patron +='<h2>(.*?)</h2><p>(.*?)</p><span>(\d{4}) /'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedurl, scrapedthumbnail, scrapedtitle, scrapedplot, year in matches:
|
||||
title = scrapedtitle
|
||||
contentSerieName = scrapedtitle
|
||||
thumbnail = scrapedthumbnail
|
||||
url = scrapedurl
|
||||
|
||||
itemlist.append(item.clone(action='seasons',
|
||||
title=title,
|
||||
url=url,
|
||||
thumbnail=thumbnail,
|
||||
plot=scrapedplot,
|
||||
contentSerieName=contentSerieName,
|
||||
infoLabels={'year':year}))
|
||||
|
||||
tmdb.set_infoLabels(itemlist, seekTmdb=True)
|
||||
# Paginación
|
||||
|
||||
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='<div class=season 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)
|
||||
logger.debug(data)
|
||||
patron= "ViewEpisode\('(\d+)', this\)><div class=num>%s - (\d+)</div>" % item.infoLabels['season']
|
||||
patron += ".*?src=(.*?) />.*?namep>(.*?)<span>"
|
||||
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
infoLabels = item.infoLabels
|
||||
|
||||
for video_id, scrapedepisode, scrapedthumbnail, scrapedtitle in matches:
|
||||
|
||||
infoLabels['episode'] = scrapedepisode
|
||||
title = '%sx%s - %s' % (infoLabels['season'], infoLabels['episode'], scrapedtitle)
|
||||
|
||||
itemlist.append(Item(channel=item.channel, title= title, url=item.url, thumbnail=scrapedthumbnail,
|
||||
action='findvideos', video_id=video_id, infoLabels=infoLabels))
|
||||
|
||||
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def findvideos(item):
|
||||
logger.info()
|
||||
from lib import jsunpack
|
||||
itemlist = []
|
||||
headers = {'referer':item.url}
|
||||
if item.video_id == '':
|
||||
find_id = get_source(item.url)
|
||||
#logger.debug(find_id)
|
||||
#return
|
||||
item.video_id = scrapertools.find_single_match(find_id, 'var centerClick = (\d+);')
|
||||
url = 'https://goovie.co/api/links/%s' % item.video_id
|
||||
data = httptools.downloadpage(url, headers=headers).data
|
||||
video_list = jsontools.load(data)
|
||||
for video_info in video_list:
|
||||
logger.debug(video_info)
|
||||
url = video_info['visor']
|
||||
plot = 'idioma: %s calidad: %s' % (video_info['idioma'], video_info['calidad'])
|
||||
data = httptools.downloadpage(url, headers=headers, follow_redirects=False).data
|
||||
data = re.sub(r'"|\n|\r|\t| |<br>|\s{2,}', "", data)
|
||||
packed = scrapertools.find_single_match(data, '(eval\(.*?);var')
|
||||
unpacked = jsunpack.unpack(packed)
|
||||
logger.debug('unpacked %s' % unpacked)
|
||||
server = scrapertools.find_single_match(unpacked, "src:.'(http://\D+)/")
|
||||
id = scrapertools.find_single_match(unpacked, "src:.'http://\D+/.*?description:.'(.*?).'")
|
||||
if server == '':
|
||||
if 'powvideo' in unpacked:
|
||||
id = scrapertools.find_single_match(unpacked ,",description:.'(.*?).'")
|
||||
server= 'https://powvideo.net'
|
||||
url = '%s/%s' % (server, id)
|
||||
if server != '' and id != '':
|
||||
language = IDIOMAS[video_info['idioma']]
|
||||
quality = CALIDADES[video_info['calidad']]
|
||||
title = ' [%s] [%s]' % (language, quality)
|
||||
itemlist.append(Item(channel=item.channel, title='%s'+title, url=url, action='play', language=language,
|
||||
quality=quality))
|
||||
|
||||
itmelist = servertools.get_servers_itemlist(itemlist, lambda i: i.title % i.server.capitalize())
|
||||
return sorted(itemlist, key=lambda i: i.language)
|
||||
|
||||
|
||||
def search(item, texto):
|
||||
logger.info()
|
||||
texto = texto.replace(" ", "+")
|
||||
item.url = item.url + texto
|
||||
item.type = 'peliculas'
|
||||
if texto != '':
|
||||
return search_results(item)
|
||||
else:
|
||||
return []
|
||||
|
||||
def search_results(item):
|
||||
logger.info()
|
||||
|
||||
itemlist=[]
|
||||
|
||||
data=get_source(item.url)
|
||||
logger.debug(data)
|
||||
patron = '<article class=Items>.*?href=(.*?)>.*?typeContent>(.*?)<.*?'
|
||||
patron += '<img src=(.*?) />.*?<h2>(.*?)</h2><p>(.*?)</p><span>(\d{4})<'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedurl, content_type ,scrapedthumb, scrapedtitle, scrapedplot, year in matches:
|
||||
|
||||
title = scrapedtitle
|
||||
url = scrapedurl
|
||||
thumbnail = scrapedthumb
|
||||
plot = scrapedplot
|
||||
if content_type != 'Serie':
|
||||
action = 'findvideos'
|
||||
else:
|
||||
action = 'seasons'
|
||||
|
||||
new_item=Item(channel=item.channel, title=title, url=url, thumbnail=thumbnail, plot=plot,
|
||||
action=action, type=content_type, 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 + 'peliculas'
|
||||
elif categoria == 'infantiles':
|
||||
item.url = host + 'peliculas/generos/animación'
|
||||
elif categoria == 'terror':
|
||||
item.url = host + 'peliculas/generos/terror'
|
||||
item.type='peliculas'
|
||||
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
|
||||
79
plugin.video.alfa/channels/pelisr.json
Normal file
79
plugin.video.alfa/channels/pelisr.json
Normal file
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"id": "pelisr",
|
||||
"name": "PelisR",
|
||||
"active": true,
|
||||
"adult": false,
|
||||
"language": ["lat", "cast", "vose"],
|
||||
"thumbnail": "https://s22.postimg.cc/gcp2jqbs1/pelisr.png",
|
||||
"banner": "",
|
||||
"categories": [
|
||||
"movie",
|
||||
"tvshow",
|
||||
"direct"
|
||||
],
|
||||
"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" ]
|
||||
}
|
||||
]
|
||||
}
|
||||
366
plugin.video.alfa/channels/pelisr.py
Normal file
366
plugin.video.alfa/channels/pelisr.py
Normal file
@@ -0,0 +1,366 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# -*- Channel PoseidonHD -*-
|
||||
# -*- 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 = ['360P', '480P', '720P', '1080P']
|
||||
|
||||
list_servers = [
|
||||
'directo',
|
||||
'openload',
|
||||
'rapidvideo'
|
||||
]
|
||||
|
||||
__comprueba_enlaces__ = config.get_setting('comprueba_enlaces', 'poseidonhd')
|
||||
__comprueba_enlaces_num__ = config.get_setting('comprueba_enlaces_num', 'poseidonhd')
|
||||
|
||||
host = 'https://pelisr.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 = []
|
||||
logger.debug(lang_data)
|
||||
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)
|
||||
logger.debug(data)
|
||||
#return
|
||||
|
||||
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)
|
||||
logger.debug(data)
|
||||
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()
|
||||
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:
|
||||
lang = 'en'
|
||||
title = '%s'
|
||||
|
||||
if 'embed' in scrapedurl:
|
||||
enc_data = get_source(scrapedurl)
|
||||
dec_data = generictools.dejuice(enc_data)
|
||||
url, quality = scrapertools.find_single_match(dec_data, '"file":"(.*?)","label":"(.*?)"')
|
||||
|
||||
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}
|
||||
data = httptools.downloadpage(new_url, headers=headers, follow_redirects=False)
|
||||
url = data.headers['location']
|
||||
|
||||
itemlist.append(
|
||||
Item(channel=item.channel, url=url, 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())
|
||||
|
||||
# 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
|
||||
22
plugin.video.alfa/channels/planetadocumental.json
Normal file
22
plugin.video.alfa/channels/planetadocumental.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"id": "planetadocumental",
|
||||
"name": "Planeta documental",
|
||||
"language": ["*"],
|
||||
"active": true,
|
||||
"adult": false,
|
||||
"thumbnail": "https://s8.postimg.cc/r6njedwdt/planeta_documental1.png",
|
||||
"banner": "https://s8.postimg.cc/6za3m36m9/planeta_documental2.png",
|
||||
"categories": [
|
||||
"documentary"
|
||||
],
|
||||
"settings": [
|
||||
{
|
||||
"id": "include_in_global_search",
|
||||
"type": "bool",
|
||||
"label": "Incluir en busqueda global",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
}
|
||||
]
|
||||
}
|
||||
142
plugin.video.alfa/channels/planetadocumental.py
Normal file
142
plugin.video.alfa/channels/planetadocumental.py
Normal file
@@ -0,0 +1,142 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# -*- Channel Planeta Documental -*-
|
||||
# -*- Created for Alfa-addon -*-
|
||||
# -*- By the Alfa Develop Group -*-
|
||||
|
||||
from core import httptools
|
||||
from core import jsontools
|
||||
from core import scrapertools
|
||||
from core import servertools
|
||||
from core import tmdb
|
||||
from core.item import Item
|
||||
from channelselector import get_thumb
|
||||
from platformcode import config, logger
|
||||
from channels import autoplay
|
||||
from channels import filtertools
|
||||
|
||||
|
||||
IDIOMAS = {"Latino": "LAT"}
|
||||
list_language = IDIOMAS.values()
|
||||
|
||||
list_quality = []
|
||||
|
||||
list_servers = ['gvideo']
|
||||
|
||||
host = "https://www.planetadocumental.com"
|
||||
|
||||
def mainlist(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
autoplay.init(item.channel, list_servers, list_quality)
|
||||
itemlist.append(item.clone(title="Últimos documentales", action="lista",
|
||||
url= host,
|
||||
thumbnail=get_thumb('lastest', auto=True)))
|
||||
itemlist.append(item.clone(title="Por genero", action="generos",
|
||||
url= host, thumbnail=get_thumb('genres', auto=True)))
|
||||
itemlist.append(item.clone(title="", action=""))
|
||||
itemlist.append(item.clone(title="Buscar...", action="search", thumbnail=get_thumb('search', auto=True)))
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
|
||||
def generos(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
data = httptools.downloadpage(item.url).data
|
||||
bloque = scrapertools.find_single_match(data, 'sub-menu elementor-nav-menu--dropdown(.*?)</ul')
|
||||
patron = 'href="([^"]+).*?'
|
||||
patron += '>([^<]+)'
|
||||
matches = scrapertools.find_multiple_matches(bloque, patron)
|
||||
for scrapedurl, scrapedtitle in matches:
|
||||
itemlist.append(item.clone(
|
||||
action = "sub_list",
|
||||
title = scrapedtitle,
|
||||
url = scrapedurl,
|
||||
))
|
||||
return itemlist
|
||||
|
||||
|
||||
def findvideos(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
data = httptools.downloadpage(item.url).data
|
||||
url = scrapertools.find_single_match(data, 'Ver Online.*?iframe src="([^"]+)')
|
||||
if "/gd/" in url:
|
||||
data = httptools.downloadpage(url).data
|
||||
data = data.replace("file:",'"file":')
|
||||
url = scrapertools.find_single_match(data, 'source.*?file":\s*"([^"]+)')
|
||||
itemlist.append(item.clone(
|
||||
action = "play",
|
||||
server = "directo",
|
||||
title = "Ver video " + item.title,
|
||||
url = url
|
||||
))
|
||||
else:
|
||||
if url:
|
||||
itemlist.append(item.clone(
|
||||
action = "play",
|
||||
title = "Ver video " + item.title,
|
||||
url = url
|
||||
))
|
||||
itemlist = servertools.get_servers_itemlist(itemlist)
|
||||
|
||||
# Requerido para FilterTools
|
||||
|
||||
itemlist = filtertools.get_links(itemlist, item, list_language)
|
||||
|
||||
# Requerido para AutoPlay
|
||||
|
||||
autoplay.start(itemlist, item)
|
||||
return itemlist
|
||||
|
||||
|
||||
def lista(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
data = httptools.downloadpage(item.url).data
|
||||
patron = 'post__thumbnail__link.*?src="([^"]+).*?'
|
||||
patron += 'href="([^"]+).*?'
|
||||
patron += '>([^<]+).*?'
|
||||
matches = scrapertools.find_multiple_matches(data, patron)
|
||||
for scrapedthumbnail, scrapedurl, scrapedtitle in matches:
|
||||
itemlist.append(item.clone(action = "findvideos",
|
||||
contentTitle = scrapedtitle.strip(),
|
||||
title = scrapedtitle.strip(),
|
||||
url = scrapedurl,
|
||||
thumbnail = scrapedthumbnail
|
||||
))
|
||||
return itemlist
|
||||
|
||||
|
||||
def search(item, texto):
|
||||
logger.info()
|
||||
if texto != "":
|
||||
texto = texto.replace(" ", "+")
|
||||
item.url = host + "/?s=" + texto
|
||||
item.extra = "busqueda"
|
||||
try:
|
||||
return sub_list(item)
|
||||
except:
|
||||
import sys
|
||||
for line in sys.exc_info():
|
||||
logger.error("%s" % line)
|
||||
return []
|
||||
|
||||
|
||||
def sub_list(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
data = httptools.downloadpage(item.url).data
|
||||
patron = 'post-thumb-img-content post-thumb.*?src="([^"]+).*?'
|
||||
patron += 'href="([^"]+).*?'
|
||||
patron += '>([^<]+).*?'
|
||||
matches = scrapertools.find_multiple_matches(data, patron)
|
||||
for scrapedthumbnail, scrapedurl, scrapedtitle in matches:
|
||||
itemlist.append(item.clone(action = "findvideos",
|
||||
contentTitle = scrapedtitle,
|
||||
title = scrapedtitle.strip(),
|
||||
url = scrapedurl,
|
||||
thumbnail = scrapedthumbnail
|
||||
))
|
||||
return itemlist
|
||||
22
plugin.video.alfa/channels/retroseriestv.json
Normal file
22
plugin.video.alfa/channels/retroseriestv.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"id": "retroseriestv",
|
||||
"name": "RetroSeriesTV",
|
||||
"active": true,
|
||||
"adult": false,
|
||||
"language": ["lat", "cast"],
|
||||
"thumbnail": "https://retroseriestv.com/wp-content/uploads/2017/04/Logo3-5.png",
|
||||
"banner": "",
|
||||
"categories": [
|
||||
"tvshow"
|
||||
],
|
||||
"settings": [
|
||||
{
|
||||
"id": "include_in_global_search",
|
||||
"type": "bool",
|
||||
"label": "Incluir en busqueda global",
|
||||
"default": false,
|
||||
"enabled": false,
|
||||
"visible": false
|
||||
}
|
||||
]
|
||||
}
|
||||
213
plugin.video.alfa/channels/retroseriestv.py
Normal file
213
plugin.video.alfa/channels/retroseriestv.py
Normal file
@@ -0,0 +1,213 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# -*- Channel RetroSeriesTV -*-
|
||||
# -*- Created for Alfa-addon -*-
|
||||
# -*- By the Alfa Develop Group -*-
|
||||
|
||||
import re
|
||||
import urllib
|
||||
from channelselector import get_thumb
|
||||
from core import httptools
|
||||
from core import scrapertools
|
||||
from core import servertools
|
||||
from core import tmdb
|
||||
from core.item import Item
|
||||
from platformcode import config, logger
|
||||
from channels import autoplay
|
||||
from channels import filtertools
|
||||
|
||||
|
||||
host = 'https://retroseriestv.com/'
|
||||
|
||||
# IDIOMAS = {'la': 'LAT', 'es': 'Cast'}
|
||||
# list_language = IDIOMAS.values()
|
||||
# list_quality = []
|
||||
# list_servers = ['openload']
|
||||
|
||||
|
||||
def mainlist(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = list()
|
||||
itemlist.append(item.clone(title="Todas", action="list_all", url=host + 'seriestv/', thumbnail=get_thumb('all',
|
||||
auto=True)))
|
||||
|
||||
itemlist.append(item.clone(title="Generos", action="section", url=host, thumbnail=get_thumb('genres', auto=True),
|
||||
section='genres'))
|
||||
|
||||
itemlist.append(item.clone(title="Por Año", action="section", url=host, thumbnail=get_thumb('year', auto=True),
|
||||
section='year'))
|
||||
|
||||
itemlist.append(item.clone(title="Alfabetico", action="section", url=host, thumbnail=get_thumb('alphabet', auto=True),
|
||||
section='abc'))
|
||||
|
||||
itemlist.append(item.clone(title="Buscar", action="search", url=host+'?s=',
|
||||
thumbnail=get_thumb('search', auto=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 list_all(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
|
||||
data = get_source(item.url)
|
||||
patron = '<article id=post-.*?<a href=(.*?)><img src=(.*?) alt=(.*?)><.*?<span>(.*?)<'
|
||||
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedurl, scrapedthumbnail, scrapedtitle, year in matches:
|
||||
|
||||
url = scrapedurl
|
||||
contentSerieName = scrapedtitle
|
||||
thumbnail = scrapedthumbnail
|
||||
itemlist.append(item.clone(action='seasons',
|
||||
title=contentSerieName,
|
||||
url=url,
|
||||
thumbnail=thumbnail,
|
||||
contentSerieName=contentSerieName,
|
||||
infoLabels={'year':year}
|
||||
))
|
||||
tmdb.set_infoLabels_itemlist(itemlist, True)
|
||||
|
||||
# Paginación
|
||||
|
||||
url_next_page = scrapertools.find_single_match(data,'rel=next.*?href=(.*?) ')
|
||||
if url_next_page:
|
||||
itemlist.append(item.clone(title="Siguiente >>", url=url_next_page, action='list_all'))
|
||||
return itemlist
|
||||
|
||||
def section(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
|
||||
data = get_source(item.url)
|
||||
data = scrapertools.find_single_match(data, '<ul class=%s(.*?)</ul>' % item.section)
|
||||
patron = '<a href=(.*?)>(.*?)</a>'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedurl, scrapedtitle in matches:
|
||||
url = scrapedurl.strip()
|
||||
itemlist.append(Item(channel=item.channel, title=scrapedtitle, url=url, action='list_all'))
|
||||
|
||||
return itemlist
|
||||
|
||||
def seasons(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
data = get_source(item.url)
|
||||
patron = '<span class=title>Temporada(\d+) <'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedtitle in matches:
|
||||
infoLabels = item.infoLabels
|
||||
infoLabels['season'] = scrapedtitle
|
||||
title = 'Temporada %s' % scrapedtitle
|
||||
itemlist.append(Item(channel=item.channel, title=title, url=item.url, action='episodesxseason',
|
||||
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,
|
||||
extra1='library'))
|
||||
|
||||
return itemlist
|
||||
|
||||
def episodios(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
templist = seasons(item)
|
||||
for tempitem in templist:
|
||||
itemlist += episodesxseason(tempitem)
|
||||
return itemlist
|
||||
|
||||
def episodesxseason(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
|
||||
data = get_source(item.url)
|
||||
infoLabels = item.infoLabels
|
||||
season = infoLabels['season']
|
||||
patron = '<img src=([^>]+)></a></div><div class=numerando>%s - (\d+)</div>' % season
|
||||
patron += '<div class=episodiotitle><a href=(.*?)>(.*?)</a><'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedthumbnail, scrapedepi, scrapedurl, scrapedtitle in matches:
|
||||
|
||||
title = '%sx%s - %s' % (season, scrapedepi, scrapedtitle)
|
||||
infoLabels['episode'] = scrapedepi
|
||||
if scrapedepi > 0:
|
||||
itemlist.append(Item(channel=item.channel, title=title, url=scrapedurl, 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=([^ ]+) class=play-box-iframe .*?src=(.*?) frameborder=0.*?'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for option, scrapedurl in matches:
|
||||
#language = scrapertools.find_single_match(data, '#%s.*?dt_flag><img src=.*?flags/(.*?).png' % option)
|
||||
#title = '%s [%s]'
|
||||
language = ''
|
||||
title = '%s'
|
||||
SerieName = item.contentSerieName
|
||||
itemlist.append(Item(channel=item.channel, title=title, contentSerieName=SerieName, url=scrapedurl,
|
||||
action='play', language=language, infoLabels=item.infoLabels))
|
||||
|
||||
#itemlist = servertools.get_servers_itemlist(itemlist, lambda i: i.title % (i.server.capitalize(), i.language))
|
||||
itemlist = servertools.get_servers_itemlist(itemlist, lambda i: i.title % i.server.capitalize())
|
||||
return itemlist
|
||||
|
||||
def search_results(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
|
||||
data = get_source(item.url)
|
||||
patron = '<article.*?<a href=(.*?)><img src=(.*?) alt=(.*?)><.*?year>(.*?)<.*?<p>(.*?)</p>'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedurl, scrapedthumbnail, scrapedtitle, year, scrapedplot in matches:
|
||||
|
||||
url = scrapedurl
|
||||
contentSerieName = scrapedtitle.replace(' /','')
|
||||
thumbnail = scrapedthumbnail
|
||||
itemlist.append(item.clone(action='seasons',
|
||||
title=contentSerieName,
|
||||
url=url,
|
||||
thumbnail=thumbnail,
|
||||
plot=scrapedplot,
|
||||
contentSerieName=contentSerieName,
|
||||
infoLabels={'year':year}
|
||||
))
|
||||
tmdb.set_infoLabels_itemlist(itemlist, True)
|
||||
|
||||
return itemlist
|
||||
|
||||
def search(item, texto):
|
||||
logger.info()
|
||||
texto = texto.replace(" ", "+")
|
||||
item.url = item.url + texto
|
||||
|
||||
if texto != '':
|
||||
return search_results(item)
|
||||
else:
|
||||
return []
|
||||
@@ -8,15 +8,79 @@ from threading import Thread
|
||||
|
||||
from channelselector import get_thumb
|
||||
from core import channeltools
|
||||
from core import scrapertools
|
||||
from core.item import Item
|
||||
from platformcode import config, logger
|
||||
from platformcode import platformtools
|
||||
from core import tmdb
|
||||
|
||||
link_list = []
|
||||
max_links = 30
|
||||
|
||||
|
||||
def mainlist(item):
|
||||
logger.info()
|
||||
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,
|
||||
thumbnail=get_thumb("search.png")))
|
||||
|
||||
itemlist.append(Item(channel=item.channel, action='genres_menu', title='Películas por Generos', type='movie',
|
||||
thumbnail=get_thumb("genres.png")))
|
||||
|
||||
itemlist.append (Item(channel=item.channel, action='discover_list', title='Películas mas populares',
|
||||
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',
|
||||
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,
|
||||
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',
|
||||
thumbnail=get_thumb("genres.png")))
|
||||
|
||||
itemlist.append(
|
||||
Item(channel=item.channel, action='discover_list', title='Series mas populares', 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,
|
||||
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,
|
||||
search_type='list', list_type='tv/top_rated', thumbnail=get_thumb("top_rated.png")))
|
||||
|
||||
|
||||
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def genres_menu(item):
|
||||
|
||||
itemlist = []
|
||||
|
||||
genres = tmdb.get_genres(item.type)
|
||||
|
||||
logger.debug(genres)
|
||||
logger.debug(genres[item.type])
|
||||
|
||||
for key, value in genres[item.type].items():
|
||||
itemlist.append(item.clone(title=value, action='discover_list', search_type='discover',
|
||||
list_type=key, page='1'))
|
||||
return sorted(itemlist, key=lambda it: it.title)
|
||||
|
||||
def sub_menu(item):
|
||||
logger.info()
|
||||
item.channel = "search"
|
||||
|
||||
itemlist = list()
|
||||
context = [{"title": config.get_localized_string(70273),
|
||||
"action": "setting_channel",
|
||||
@@ -436,7 +500,7 @@ def do_search(item, categories=None):
|
||||
title = channel
|
||||
|
||||
# resultados agrupados por canales
|
||||
if item.contextual == True:
|
||||
if item.contextual == True or item.action == 'search_tmdb':
|
||||
result_mode = 1
|
||||
if result_mode == 0:
|
||||
if len(search_results[channel]) > 1:
|
||||
@@ -517,3 +581,90 @@ def get_saved_searches():
|
||||
saved_searches_list = list(current_saved_searches_list)
|
||||
|
||||
return saved_searches_list
|
||||
|
||||
|
||||
def discover_list(item):
|
||||
from platformcode import unify
|
||||
itemlist = []
|
||||
|
||||
result = tmdb.discovery(item)
|
||||
|
||||
tvshow = False
|
||||
|
||||
logger.debug(item)
|
||||
|
||||
for elem in result:
|
||||
elem['tmdb_id']=elem['id']
|
||||
if 'title' in elem:
|
||||
title = unify.normalize(elem['title']).capitalize()
|
||||
elem['year'] = scrapertools.find_single_match(elem['release_date'], '(\d{4})-\d+-\d+')
|
||||
else:
|
||||
title = unify.normalize(elem['name']).capitalize()
|
||||
tvshow = True
|
||||
|
||||
new_item = Item(channel='search', title=title, infoLabels=elem, action='search_tmdb', extra=title,
|
||||
category='Resultados', context ='')
|
||||
|
||||
if tvshow:
|
||||
new_item.contentSerieName = title
|
||||
else:
|
||||
new_item.contentTitle = title
|
||||
|
||||
itemlist.append(new_item)
|
||||
|
||||
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
|
||||
|
||||
if item.page != '' and len(itemlist)>0:
|
||||
next_page = str(int(item.page)+1)
|
||||
#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',
|
||||
search_type=item.search_type, list_type=item.list_type, type=item.type, page=next_page))
|
||||
|
||||
return itemlist
|
||||
|
||||
def search_tmdb(item):
|
||||
logger.debug(item)
|
||||
|
||||
itemlist = []
|
||||
threads = []
|
||||
logger.debug(item)
|
||||
wanted = item.contentTitle
|
||||
|
||||
search = do_search(item)
|
||||
|
||||
if item.contentSerieName == '':
|
||||
results = exact_results(search, wanted)
|
||||
for result in results:
|
||||
logger.debug(result)
|
||||
t = Thread(target=get_links, args=[result])
|
||||
t.start()
|
||||
threads.append(t)
|
||||
|
||||
for thread in threads:
|
||||
thread.join()
|
||||
|
||||
# try:
|
||||
# get_links(result)
|
||||
# except:
|
||||
# pass
|
||||
|
||||
for link in link_list:
|
||||
if link.action == 'play' and not 'trailer' in link.title.lower() and len(itemlist) < max_links:
|
||||
itemlist.append(link)
|
||||
|
||||
return sorted(itemlist, key=lambda it: it.server)
|
||||
else:
|
||||
for item in search:
|
||||
if item.contentSerieName != '' and item.contentSerieName == wanted:
|
||||
logger.debug(item)
|
||||
itemlist.append(item)
|
||||
return itemlist
|
||||
|
||||
def get_links (item):
|
||||
logger.info()
|
||||
results =[]
|
||||
channel = __import__('channels.%s' % item.from_channel, None, None, ["channels.%s" % item.from_channel])
|
||||
if len(link_list) <= max_links:
|
||||
link_list.extend(getattr(channel, item.from_action)(item))
|
||||
|
||||
49
plugin.video.alfa/channels/seriesblanco.json
Executable file → Normal file
49
plugin.video.alfa/channels/seriesblanco.json
Executable file → Normal file
@@ -1,31 +1,22 @@
|
||||
{
|
||||
"id": "seriesblanco",
|
||||
"name": "Seriesblanco",
|
||||
"active": false,
|
||||
"name": "SeriesBlanco",
|
||||
"active": true,
|
||||
"adult": false,
|
||||
"language": ["cast", "lat"],
|
||||
"thumbnail": "seriesblanco.png",
|
||||
"banner": "seriesblanco.png",
|
||||
"thumbnail": "https://s22.postimg.cc/nucz720sx/image.png",
|
||||
"banner": "",
|
||||
"categories": [
|
||||
"tvshow",
|
||||
"vos"
|
||||
"tvshow"
|
||||
],
|
||||
"settings": [
|
||||
{
|
||||
"id": "include_in_global_search",
|
||||
"type": "bool",
|
||||
"label": "Incluir en busqueda global",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"id": "include_in_newest_series",
|
||||
"type": "bool",
|
||||
"label": "Incluir en Novedades - Episodios de series",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
"default": false,
|
||||
"enabled": false,
|
||||
"visible": false
|
||||
},
|
||||
{
|
||||
"id": "filter_languages",
|
||||
@@ -36,26 +27,10 @@
|
||||
"visible": true,
|
||||
"lvalues": [
|
||||
"No filtrar",
|
||||
"Español",
|
||||
"Inglés",
|
||||
"Latino",
|
||||
"VO",
|
||||
"VOS",
|
||||
"VOSI",
|
||||
"OVOS"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "filterlinks",
|
||||
"type": "list",
|
||||
"label": "Mostrar enlaces de tipo...",
|
||||
"default": 2,
|
||||
"enabled": true,
|
||||
"visible": true,
|
||||
"lvalues": [
|
||||
"Solo Descarga",
|
||||
"Solo Online",
|
||||
"No filtrar"
|
||||
"Cast",
|
||||
"Lat",
|
||||
"VOSE",
|
||||
"VO"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,369 +1,353 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# -*- Channel SeriesBlanco -*-
|
||||
# -*- Created for Alfa-addon -*-
|
||||
# -*- By the Alfa Develop Group -*-
|
||||
|
||||
import re
|
||||
import urlparse
|
||||
|
||||
from channels import autoplay
|
||||
from channels import filtertools
|
||||
from channelselector import get_thumb
|
||||
from core import httptools
|
||||
from core import scrapertoolsV2
|
||||
from core import scrapertools
|
||||
from core import servertools
|
||||
from core import tmdb
|
||||
from core.item import Item
|
||||
from platformcode import config, logger
|
||||
from core import tmdb
|
||||
from channels import autoplay
|
||||
from channelselector import get_thumb
|
||||
|
||||
host = 'http://seriesblanco.xyz/'
|
||||
|
||||
HOST = "https://seriesblanco.com/"
|
||||
IDIOMAS = {'es': 'Español', 'en': 'Inglés', 'la': 'Latino', 'vo': 'VO', 'vos': 'VOS', 'vosi': 'VOSI', 'otro': 'OVOS'}
|
||||
list_idiomas = IDIOMAS.values()
|
||||
list_language = ['default']
|
||||
CALIDADES = ['SD', 'HDiTunes', 'Micro-HD-720p', 'Micro-HD-1080p', '1080p', '720p']
|
||||
list_quality = CALIDADES
|
||||
|
||||
list_servers = ['powvideo',
|
||||
'streamcloud',
|
||||
'openload',
|
||||
'flashx',
|
||||
'streamplay',
|
||||
'nowvideo',
|
||||
'gamovideo',
|
||||
'kingvid',
|
||||
'vidabc',
|
||||
'streamixcloud'
|
||||
]
|
||||
IDIOMAS = {'es': 'Cast', 'la': 'Lat', 'vos': 'VOSE', 'vo': 'VO'}
|
||||
list_language = IDIOMAS.values()
|
||||
list_quality = ['SD', 'Micro-HD-720p', '720p', 'HDitunes', 'Micro-HD-1080p' ]
|
||||
list_servers = ['powvideo','yourupload', 'openload', 'gamovideo', 'flashx', 'clipwatching', 'streamango', 'streamcloud']
|
||||
|
||||
|
||||
def mainlist(item):
|
||||
logger.info()
|
||||
|
||||
thumb_series = get_thumb("channels_tvshow.png")
|
||||
thumb_series_az = get_thumb("channels_tvshow_az.png")
|
||||
thumb_buscar = get_thumb("search.png")
|
||||
|
||||
itemlist = list()
|
||||
|
||||
autoplay.init(item.channel, list_servers, list_quality)
|
||||
itemlist.append(Item(channel=item.channel, title="Listado alfabético", action="series_listado_alfabetico",
|
||||
thumbnail=thumb_series_az))
|
||||
itemlist.append(Item(channel=item.channel, title="Todas las series", action="series",
|
||||
url=urlparse.urljoin(HOST, "listado/"), thumbnail=thumb_series))
|
||||
itemlist.append(
|
||||
Item(channel=item.channel, title="Capítulos estrenados recientemente", action="home_section",
|
||||
extra="Series Online : Capítulos estrenados recientemente",
|
||||
url=HOST, thumbnail=thumb_series))
|
||||
itemlist.append(Item(channel=item.channel, title="Series más vistas", action="series", extra="Series Más vistas",
|
||||
url=urlparse.urljoin(HOST, "listado-visto/"), thumbnail=thumb_series))
|
||||
itemlist.append(Item(channel=item.channel, title="Últimas fichas creadas", action="series",
|
||||
url=urlparse.urljoin(HOST, "fichas_creadas/"), thumbnail=thumb_series))
|
||||
itemlist.append(Item(channel=item.channel, title="Series por género", action="generos",
|
||||
url=HOST, thumbnail=thumb_series))
|
||||
itemlist.append(
|
||||
Item(channel=item.channel, title="Buscar...", action="search", url=urlparse.urljoin(HOST, "finder.php"),
|
||||
thumbnail=thumb_buscar))
|
||||
|
||||
itemlist = filtertools.show_option(itemlist, item.channel, list_idiomas, CALIDADES)
|
||||
itemlist = []
|
||||
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
title="Nuevos Capitulos",
|
||||
action="new_episodes",
|
||||
thumbnail=get_thumb('new_episodes', auto=True),
|
||||
url=host))
|
||||
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
title="Todas",
|
||||
action="list_all",
|
||||
thumbnail=get_thumb('all', auto=True),
|
||||
url=host + 'listado/',
|
||||
))
|
||||
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
title="Generos",
|
||||
action="section",
|
||||
thumbnail=get_thumb('genres', auto=True),
|
||||
url=host,
|
||||
))
|
||||
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
title="A - Z",
|
||||
action="section",
|
||||
thumbnail=get_thumb('alphabet', auto=True),
|
||||
url=host+'listado/', ))
|
||||
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
title="Buscar",
|
||||
action="search",
|
||||
thumbnail=get_thumb('search', auto=True)))
|
||||
|
||||
itemlist = filtertools.show_option(itemlist, item.channel, list_language, list_quality)
|
||||
autoplay.show_option(item.channel, itemlist)
|
||||
|
||||
return itemlist
|
||||
|
||||
def get_source(url):
|
||||
logger.info()
|
||||
data = httptools.downloadpage(url).data
|
||||
data = re.sub(r'"|\n|\r|\t| |<br>|\s{2,}', "", data)
|
||||
return data
|
||||
|
||||
def home_section(item):
|
||||
logger.info("section = %s" % item.extra)
|
||||
def list_all(item):
|
||||
logger.info()
|
||||
|
||||
pattern = "['\"]panel-title['\"]>[^/]*%s(.*?)(?:panel-title|\Z)" % item.extra
|
||||
# logger.debug("pattern = %s" % pattern)
|
||||
|
||||
data = httptools.downloadpage(item.url).data
|
||||
result = re.search(pattern, data, re.MULTILINE | re.DOTALL)
|
||||
|
||||
if result:
|
||||
# logger.debug("found section: {0}".format(result.group(1)))
|
||||
item.extra = 1
|
||||
return extract_series_from_data(item, result.group(1))
|
||||
|
||||
logger.debug("No match")
|
||||
return []
|
||||
|
||||
|
||||
def extract_series_from_data(item, data):
|
||||
itemlist = []
|
||||
episode_pattern = re.compile('/capitulo-([0-9]+)/')
|
||||
shows = re.findall("<a.+?href=['\"](?P<url>/serie[^'\"]+)[^<]*<img[^>]*src=['\"](?P<img>http[^'\"]+).*?"
|
||||
"(?:alt|title)=['\"](?P<name>[^'\"]+)", data)
|
||||
for url, img, name in shows:
|
||||
try:
|
||||
name.decode('utf-8')
|
||||
except UnicodeError:
|
||||
name = unicode(name, "iso-8859-1", errors="replace").encode("utf-8")
|
||||
data = get_source(item.url)
|
||||
contentSerieName = ''
|
||||
|
||||
name = name.strip()
|
||||
# logger.debug("Show found: %s -> %s (%s)" % (name, url, img))
|
||||
if not episode_pattern.search(url):
|
||||
action = "episodios"
|
||||
else:
|
||||
action = "findvideos"
|
||||
patron = "<div style='float.*?<a href='(.*?)'>.*?src='(.*?)' title='(.*?)'"
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
context = filtertools.context(item, list_idiomas, CALIDADES)
|
||||
context2 = autoplay.context
|
||||
context.extend(context2)
|
||||
|
||||
itemlist.append(item.clone(title=name, url=urlparse.urljoin(HOST, url),
|
||||
action=action, show=name, contentSerieName=name,
|
||||
thumbnail=img,
|
||||
context=context))
|
||||
for scrapedurl, scrapedthumbnail, scrapedtitle in matches:
|
||||
|
||||
more_pages = re.search('pagina=([0-9]+)">>>', data)
|
||||
if more_pages:
|
||||
# logger.debug("Adding next page item")
|
||||
itemlist.append(item.clone(title="Siguiente >>", extra=item.extra + 1))
|
||||
url = host + scrapedurl
|
||||
thumbnail = scrapedthumbnail
|
||||
title = scrapertools.decodeHtmlentities(scrapedtitle)
|
||||
|
||||
if item.extra > 1:
|
||||
# logger.debug("Adding previous page item")
|
||||
itemlist.append(item.clone(title="<< Anterior", extra=item.extra - 1))
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
action='seasons',
|
||||
title=title,
|
||||
url=url,
|
||||
thumbnail=thumbnail,
|
||||
contentSerieName=scrapedtitle,
|
||||
context=filtertools.context(item, list_language, list_quality),
|
||||
))
|
||||
|
||||
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
|
||||
|
||||
# #Paginacion
|
||||
|
||||
if itemlist != []:
|
||||
base_page = scrapertools.find_single_match(item.url,'(.*?)?')
|
||||
next_page = scrapertools.find_single_match(data, '</span><a href=?pagina=2>>></a>')
|
||||
if next_page != '':
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
action="lista",
|
||||
title='Siguiente >>>',
|
||||
url=base_page+next_page,
|
||||
thumbnail='https://s16.postimg.cc/9okdu7hhx/siguiente.png',
|
||||
))
|
||||
return itemlist
|
||||
|
||||
|
||||
def series(item):
|
||||
def section(item):
|
||||
logger.info()
|
||||
if not hasattr(item, 'extra') or not isinstance(item.extra, int):
|
||||
item.extra = 1
|
||||
|
||||
if '?' in item.url:
|
||||
merger = '&'
|
||||
else:
|
||||
merger = '?'
|
||||
|
||||
page_url = "%s%spagina=%s" % (item.url, merger, item.extra)
|
||||
logger.info("url = %s" % page_url)
|
||||
|
||||
data = scrapertoolsV2.decodeHtmlentities(httptools.downloadpage(page_url).data)
|
||||
return extract_series_from_data(item, data)
|
||||
|
||||
|
||||
def series_listado_alfabetico(item):
|
||||
logger.info()
|
||||
|
||||
return [item.clone(action="series", title=letra, url=urlparse.urljoin(HOST, "listado-%s/" % letra))
|
||||
for letra in "ABCDEFGHIJKLMNOPQRSTUVWXYZ"]
|
||||
|
||||
|
||||
def generos(item):
|
||||
logger.info()
|
||||
data = httptools.downloadpage(item.url).data
|
||||
|
||||
result = re.findall("href=['\"](?P<url>/listado/[^'\"]+)['\"][^/]+/i>\s*(?P<genero>[^<]+)", data)
|
||||
return [item.clone(action="series", title=genero, url=urlparse.urljoin(item.url, url)) for url, genero in result]
|
||||
|
||||
|
||||
def newest(categoria):
|
||||
logger.info("categoria: %s" % categoria)
|
||||
itemlist = []
|
||||
try:
|
||||
if categoria == 'series':
|
||||
itemlist = home_section(Item(extra=CAPITULOS_DE_ESTRENO_STR, url=HOST))
|
||||
|
||||
# Se captura la excepción, para no interrumpir al canal novedades si un canal falla
|
||||
except:
|
||||
import sys
|
||||
for line in sys.exc_info():
|
||||
logger.error("%s" % line)
|
||||
return []
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def search(item, texto):
|
||||
logger.info("%s" % texto)
|
||||
texto = texto.replace(" ", "+")
|
||||
|
||||
itemlist = []
|
||||
data = get_source(item.url)
|
||||
if item.title == 'Generos':
|
||||
patron = '<li><a href=([^ ]+)><i class=fa fa-bookmark-o></i> (.*?)</a></li>'
|
||||
elif item.title == 'A - Z':
|
||||
patron = "<a dir='ltr' href=(.*?) class='label label-primary'>(.*?)</a>"
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
try:
|
||||
post = "query=%s" % texto
|
||||
data = httptools.downloadpage(item.url, post=post).data
|
||||
data = re.sub(r"\n|\r|\t|\s{2}", "", data)
|
||||
shows = re.findall("<a href=['\"](?P<url>/serie[^'\"]+)['\"].*?<img src=['\"](?P<img>[^'\"]+)['\"].*?"
|
||||
"id=['\"]q2[1\"] name=['\"]q2['\"] value=['\"](?P<title>.*?)['\"]", data)
|
||||
|
||||
for url, img, title in shows:
|
||||
title = title.strip()
|
||||
itemlist.append(item.clone(title=title, url=urlparse.urljoin(HOST, url), action="episodios", show=title,
|
||||
thumbnail=img, context=filtertools.context(item, list_idiomas, CALIDADES),
|
||||
contentSerieName=title))
|
||||
|
||||
# Se captura la excepción, para no interrumpir al buscador global si un canal falla
|
||||
except:
|
||||
import sys
|
||||
for line in sys.exc_info():
|
||||
logger.error("%s" % line)
|
||||
for scrapedurl, scrapedtitle in matches:
|
||||
|
||||
if item.title == 'Generos':
|
||||
url = host + scrapedurl
|
||||
else:
|
||||
url = scrapedurl
|
||||
title = scrapedtitle
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
action='list_all',
|
||||
title=title,
|
||||
url=url
|
||||
))
|
||||
return itemlist
|
||||
|
||||
def seasons(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
data = get_source(item.url)
|
||||
patron = '<span itemprop=seasonNumber class=fa fa-arrow-down>.*?Temporada (\d+) '
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
infoLabels=item.infoLabels
|
||||
for scrapedseason in matches:
|
||||
url = item.url
|
||||
title = 'Temporada %s' % scrapedseason
|
||||
contentSeasonNumber = scrapedseason
|
||||
infoLabels['season'] = contentSeasonNumber
|
||||
thumbnail = item.thumbnail
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
action="episodesxseason",
|
||||
title=title,
|
||||
url=url,
|
||||
thumbnail=thumbnail,
|
||||
contentSeasonNumber=contentSeasonNumber,
|
||||
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("%s - %s" % (item.title, item.url))
|
||||
|
||||
logger.info()
|
||||
itemlist = []
|
||||
templist = seasons(item)
|
||||
for tempitem in templist:
|
||||
itemlist += episodesxseason(tempitem)
|
||||
return itemlist
|
||||
|
||||
# Descarga la página
|
||||
data = httptools.downloadpage(item.url).data
|
||||
def episodesxseason(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
data = get_source(item.url)
|
||||
|
||||
fanart = scrapertoolsV2.find_single_match(data, "background-image[^'\"]+['\"]([^'\"]+)")
|
||||
plot = scrapertoolsV2.find_single_match(data, "id=['\"]profile2['\"]>\s*(.*?)\s*</div>")
|
||||
|
||||
# logger.debug("fanart: %s" % fanart)
|
||||
# logger.debug("plot: %s" % plot)
|
||||
|
||||
episodes = re.findall("<tr.*?href=['\"](?P<url>[^'\"]+).+?>(?P<title>.+?)</a>.*?<td>(?P<flags>.*?)</td>", data,
|
||||
re.MULTILINE | re.DOTALL)
|
||||
for url, title, flags in episodes:
|
||||
title = re.sub("<span[^>]+>", "", title).replace("</span>", "")
|
||||
idiomas = " ".join(["[%s]" % IDIOMAS.get(language, "OVOS") for language in
|
||||
re.findall("banderas/([^\.]+)", flags, re.MULTILINE)])
|
||||
filter_lang = idiomas.replace("[", "").replace("]", "").split(" ")
|
||||
display_title = "%s - %s %s" % (item.show, title, idiomas)
|
||||
|
||||
season_episode = scrapertoolsV2.get_season_and_episode(title).split('x')
|
||||
item.infoLabels['season']= season_episode[0]
|
||||
item.infoLabels['episode'] = season_episode[1]
|
||||
# logger.debug("Episode found %s: %s" % (display_title, urlparse.urljoin(HOST, url)))
|
||||
itemlist.append(item.clone(title=display_title, url=urlparse.urljoin(HOST, url),
|
||||
action="findvideos", plot=plot, fanart=fanart, language=filter_lang))
|
||||
season = item.contentSeasonNumber
|
||||
season_data = scrapertools.find_single_match(data, '<div id=collapse%s.*?panel-primary' % season)
|
||||
patron = "<td><a href='([^ ]+)'.*?itemprop='episodeNumber'>%s+x(\d+)</span> - (.*?) </a>.*?(/banderas.*?)</td>" % season
|
||||
matches = re.compile(patron, re.DOTALL).findall(season_data)
|
||||
infoLabels = item.infoLabels
|
||||
for scrapedurl, scraped_episode, scrapedtitle, lang_data in matches:
|
||||
url = host + scrapedurl
|
||||
title = '%sx%s - %s' % (season, scraped_episode, scrapedtitle.strip())
|
||||
infoLabels['episode'] = scraped_episode
|
||||
thumbnail = item.thumbnail
|
||||
title, language = add_language(title, lang_data)
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
action="findvideos",
|
||||
title=title,
|
||||
url=url,
|
||||
thumbnail=thumbnail,
|
||||
language=language,
|
||||
infoLabels=infoLabels
|
||||
))
|
||||
|
||||
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
|
||||
itemlist = filtertools.get_links(itemlist, item, list_idiomas, CALIDADES)
|
||||
|
||||
|
||||
if config.get_videolibrary_support() and len(itemlist) > 0:
|
||||
itemlist.append(
|
||||
item.clone(title="Añadir esta serie a la videoteca", action="add_serie_to_library", extra="episodios"))
|
||||
itemlist = filtertools.get_links(itemlist, item, list_language)
|
||||
|
||||
return itemlist
|
||||
|
||||
def new_episodes(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
|
||||
def parse_videos(item, type_str, data):
|
||||
video_patterns_str = [
|
||||
'<tr.+?<span>(?P<date>.+?)</span>.*?banderas/(?P<language>[^\.]+).+?href="(?P<link>[^"]+).+?servidores/'
|
||||
'(?P<server>[^\.]+).*?</td>.*?<td>.*?<span>(?P<uploader>.+?)</span>.*?<span>(?P<quality>.*?)</span>',
|
||||
'<tr.+?banderas/(?P<language>[^\.]+).+?<td[^>]*>(?P<date>.+?)</td>.+?href=[\'"](?P<link>[^\'"]+)'
|
||||
'.+?servidores/(?P<server>[^\.]+).*?</td>.*?<td[^>]*>.*?<a[^>]+>(?P<uploader>.+?)</a>.*?</td>.*?<td[^>]*>'
|
||||
'(?P<quality>.*?)</td>.*?</tr>'
|
||||
]
|
||||
data = get_source(item.url)
|
||||
|
||||
for v_pat_str in video_patterns_str:
|
||||
v_patt_iter = re.compile(v_pat_str, re.MULTILINE | re.DOTALL).finditer(data)
|
||||
patron = "padding-left:15px'><a href=(.*?) >.*?src='(.*?)' title=.*? alt='(.*?) (\d+x\d+)'.*?"
|
||||
patron += "<span class='strong'>.*?</span>(.*?)</button></a></div>"
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
itemlist = []
|
||||
|
||||
for vMatch in v_patt_iter:
|
||||
v_fields = vMatch.groupdict()
|
||||
quality = v_fields.get("quality")
|
||||
|
||||
# FIX para veces que añaden el idioma en los comentarios
|
||||
regex = re.compile('sub-inglés-?', re.I)
|
||||
quality = regex.sub("", quality)
|
||||
# quality = re.sub(r"sub-inglés-?", "", quality, flags=re.IGNORECASE)
|
||||
|
||||
if not quality:
|
||||
quality = "SD"
|
||||
|
||||
# FIX para los guiones en la calidad y no tener que añadir otra opción en la lista de calidades
|
||||
if quality.startswith("MicroHD"):
|
||||
regex = re.compile('microhd', re.I)
|
||||
quality = regex.sub("Micro-HD-", quality)
|
||||
# quality = re.sub(r"microhd", "Micro-HD-", quality, flags=re.IGNORECASE)
|
||||
server = v_fields.get("server")
|
||||
title = "%s en %s [%s] [%s] (%s: %s)" % (type_str, v_fields.get("server"),
|
||||
IDIOMAS.get(v_fields.get("language"), "OVOS"), quality,
|
||||
v_fields.get("uploader"), v_fields.get("date"))
|
||||
itemlist.append(
|
||||
item.clone(title=title, fulltitle=item.title, url=urlparse.urljoin(HOST, v_fields.get("link")),
|
||||
action="play", language=IDIOMAS.get(v_fields.get("language"), "OVOS"),
|
||||
quality=quality, server= server))
|
||||
|
||||
if len(itemlist) > 0:
|
||||
return itemlist
|
||||
|
||||
return []
|
||||
for scrapedurl, scrapedthumbnail, scrapedtitle, scrapedinfo, lang_data in matches:
|
||||
|
||||
|
||||
def extract_videos_section(data):
|
||||
return re.findall("panel-title[^>]*>\s*([VvDd].+?)</div>[^<]*</div>[^<]*</div>", data, re.MULTILINE | re.DOTALL)
|
||||
url = host+scrapedurl
|
||||
thumbnail = scrapedthumbnail
|
||||
scrapedinfo = scrapedinfo.split('x')
|
||||
season = scrapedinfo[0]
|
||||
episode = scrapedinfo[1]
|
||||
title = '%s - %sx%s' % (scrapedtitle, season, episode )
|
||||
title, language = add_language(title, lang_data)
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
action='seasons',
|
||||
title=title,
|
||||
url=url,
|
||||
thumbnail=thumbnail,
|
||||
language=language,
|
||||
))
|
||||
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
|
||||
|
||||
return itemlist
|
||||
|
||||
def add_language(title, string):
|
||||
logger.info()
|
||||
languages = scrapertools.find_multiple_matches(string, '/banderas/(.*?).png')
|
||||
language = []
|
||||
for lang in languages:
|
||||
|
||||
if 'jap' in lang or lang not in IDIOMAS:
|
||||
lang = 'vos'
|
||||
|
||||
if len(languages) == 1:
|
||||
language = IDIOMAS[lang]
|
||||
if not config.get_setting('unify'):
|
||||
title = '%s [%s]' % (title, language)
|
||||
else:
|
||||
language.append(IDIOMAS[lang])
|
||||
if not config.get_setting('unify'):
|
||||
title = '%s [%s]' % (title, IDIOMAS[lang])
|
||||
|
||||
return title, language
|
||||
|
||||
|
||||
def findvideos(item):
|
||||
logger.info("%s = %s" % (item.show, item.url))
|
||||
logger.info()
|
||||
|
||||
# Descarga la página
|
||||
data = httptools.downloadpage(item.url).data
|
||||
# logger.info(data)
|
||||
itemlist = []
|
||||
|
||||
online = extract_videos_section(data)
|
||||
try:
|
||||
filtro_enlaces = config.get_setting("filterlinks", item.channel)
|
||||
except:
|
||||
filtro_enlaces = 2
|
||||
data = get_source(item.url)
|
||||
|
||||
list_links = []
|
||||
patron = "<a href=([^ ]+) target=_blank><img src='/servidores/(.*?).(?:png|jpg)'.*?sno.*?"
|
||||
patron += "<span>(.*?)<.*?(/banderas.*?)td"
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
if filtro_enlaces != 0:
|
||||
list_links.extend(parse_videos(item, "Ver", online[-2]))
|
||||
|
||||
if filtro_enlaces != 1:
|
||||
list_links.extend(parse_videos(item, "Descargar", online[-1]))
|
||||
list_links = filtertools.get_links(list_links, item, list_idiomas, CALIDADES)
|
||||
for scrapedurl, server, quality, lang_data in matches:
|
||||
|
||||
for i in range(len(list_links)):
|
||||
a=list_links[i].title
|
||||
b=a[a.find("en") + 2:]
|
||||
c=b.split('[')
|
||||
d=c[0].rstrip( )
|
||||
d=d.lstrip( )
|
||||
list_links[i].server=d.replace("streamix", "streamixcloud")
|
||||
list_links[i].server=d.replace("uploaded", "uploadedto")
|
||||
title = server.capitalize()
|
||||
if quality == '':
|
||||
quality = 'SD'
|
||||
title = '%s [%s]' % (title, quality)
|
||||
title, language = add_language(title, lang_data)
|
||||
thumbnail = item.thumbnail
|
||||
|
||||
list_links = servertools.get_servers_itemlist(list_links)
|
||||
autoplay.start(list_links, item)
|
||||
enlace_id, serie_id, se, ep = scrapertools.find_single_match(scrapedurl,'enlace(\d+)/(\d+)/(\d+)/(\d+)/')
|
||||
|
||||
return list_links
|
||||
url = host + 'ajax/load_enlace.php?serie=%s&temp=%s&cap=%s&id=%s' % (serie_id, se, ep, enlace_id)
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
title=title,
|
||||
url=url,
|
||||
action="play",
|
||||
thumbnail=thumbnail,
|
||||
server=server,
|
||||
quality=quality,
|
||||
language=language,
|
||||
infoLabels=item.infoLabels
|
||||
))
|
||||
# Requerido para FilterTools
|
||||
|
||||
itemlist = filtertools.get_links(itemlist, item, list_language)
|
||||
|
||||
# Requerido para AutoPlay
|
||||
|
||||
autoplay.start(itemlist, item)
|
||||
|
||||
return sorted(itemlist, key=lambda it: it.language)
|
||||
|
||||
|
||||
def play(item):
|
||||
logger.info("%s - %s = %s" % (item.show, item.title, item.url))
|
||||
if item.url.startswith(HOST):
|
||||
data = httptools.downloadpage(item.url).data
|
||||
|
||||
ajax_link = re.findall("loadEnlace\((\d+),(\d+),(\d+),(\d+)\)", data)
|
||||
ajax_data = ""
|
||||
for serie, temp, cap, linkID in ajax_link:
|
||||
# logger.debug(
|
||||
# "Ajax link request: Serie = %s - Temp = %s - Cap = %s - Link = %s" % (serie, temp, cap, linkID))
|
||||
ajax_data += httptools.downloadpage(
|
||||
HOST + '/ajax/load_enlace.php?serie=' + serie + '&temp=' + temp + '&cap=' + cap + '&id=' + linkID).data
|
||||
|
||||
if ajax_data:
|
||||
data = ajax_data
|
||||
|
||||
patron = "window.location.href\s*=\s*[\"']([^\"']+)'"
|
||||
url = scrapertoolsV2.find_single_match(data, patron)
|
||||
|
||||
else:
|
||||
url = item.url
|
||||
|
||||
itemlist = servertools.find_video_items(item=item,data=url)
|
||||
|
||||
titulo = scrapertoolsV2.find_single_match(item.fulltitle, "^(.*?)\s\[.+?$")
|
||||
if titulo:
|
||||
titulo += " [%s]" % item.language
|
||||
|
||||
logger.info()
|
||||
itemlist = []
|
||||
data = httptools.downloadpage(item.url, follow_redirects=False).data
|
||||
itemlist = servertools.find_video_items(data=data)
|
||||
for videoitem in itemlist:
|
||||
if titulo:
|
||||
videoitem.title = titulo
|
||||
else:
|
||||
videoitem.title = item.title
|
||||
videoitem.channel = item.channel
|
||||
videoitem.infoLabels = item.infoLabels
|
||||
|
||||
|
||||
return itemlist
|
||||
|
||||
def search_results(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
|
||||
data = httptools.downloadpage(host + 'finder.php', post=item.post).data
|
||||
data = re.sub(r'"|\n|\r|\t| |<br>|\s{2,}', "", data)
|
||||
patron = "<a href='(.*?)'>.*?src=(.*?) style.*?value=(.*?)>"
|
||||
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedurl, scrapedthumb, scrapedtitle in matches:
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
title=scrapedtitle,
|
||||
url=host+scrapedurl,
|
||||
action="seasons",
|
||||
thumbnail=scrapedthumb,
|
||||
contentSerieName=scrapedtitle,
|
||||
context=filtertools.context(item, list_language, list_quality)
|
||||
))
|
||||
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
|
||||
|
||||
return itemlist
|
||||
|
||||
def search(item, texto):
|
||||
logger.info()
|
||||
import urllib
|
||||
if texto != '':
|
||||
post = {'query':texto}
|
||||
post = urllib.urlencode(post)
|
||||
item.post = post
|
||||
|
||||
return search_results(item)
|
||||
|
||||
@@ -183,50 +183,56 @@ def findvideos(item):
|
||||
|
||||
# listado de opciones links_url
|
||||
|
||||
data = get_source(links_url)
|
||||
patron = 'content ><h2>(.*?)</h2>.*?class=video.*?src=(.*?) scrolling'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
try:
|
||||
data = get_source(links_url)
|
||||
patron = 'content ><h2>(.*?)</h2>.*?class=video.*?src=(.*?) scrolling'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for lang_data, scrapedurl in matches:
|
||||
if 'Latino' in lang_data:
|
||||
language = 'Lat'
|
||||
elif 'Español' in lang_data:
|
||||
language = 'Cast'
|
||||
else:
|
||||
language = 'VOSE'
|
||||
hidden_url = scrapedurl.replace('/i/', '/r/')
|
||||
data = get_source(hidden_url)
|
||||
url = scrapertools.find_single_match(data, ':url content=(.*?)>')
|
||||
title = '%s '+ '[%s]' % language
|
||||
if url != '':
|
||||
itemlist.append(Item(channel=item.channel, title=title, url=url, action='play', language=language,
|
||||
infoLabels=item.infoLabels))
|
||||
for lang_data, scrapedurl in matches:
|
||||
if 'Latino' in lang_data:
|
||||
language = 'Lat'
|
||||
elif 'Español' in lang_data:
|
||||
language = 'Cast'
|
||||
else:
|
||||
language = 'VOSE'
|
||||
hidden_url = scrapedurl.replace('/i/', '/r/')
|
||||
data = get_source(hidden_url)
|
||||
url = scrapertools.find_single_match(data, ':url content=(.*?)>')
|
||||
title = '%s '+ '[%s]' % language
|
||||
if url != '':
|
||||
itemlist.append(Item(channel=item.channel, title=title, url=url, action='play', language=language,
|
||||
infoLabels=item.infoLabels))
|
||||
except:
|
||||
pass
|
||||
|
||||
# listado de enlaces online_url
|
||||
data = get_source(online_url)
|
||||
patron = '<i class=lang-(.*?)>.*?href=(.*?) '
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
scrapertools.printMatches(matches)
|
||||
for lang_data, scrapedurl in matches:
|
||||
if 'lat' in lang_data:
|
||||
language = 'Lat'
|
||||
elif 'spa' in lang_data:
|
||||
language = 'Cast'
|
||||
elif 'eng' in lang_data:
|
||||
language = 'VOSE'
|
||||
else:
|
||||
language = 'VO'
|
||||
video_id = scrapertools.find_single_match(scrapedurl, 'index.php/(\d+)/')
|
||||
new_url = '%s%s%s%s' % (host, 'ext/index-include.php?id=', video_id, '&tipo=1')
|
||||
data = get_source(new_url)
|
||||
video_url = scrapertools.find_single_match(data, '<div class=container><a href=(.*?)>')
|
||||
video_url = video_url.replace('enlace.php', 'r')
|
||||
data = httptools.downloadpage(video_url, follow_redirects=False)
|
||||
url = data.headers['location']
|
||||
title = '%s '+ '[%s]' % language
|
||||
if url != '':
|
||||
itemlist.append(Item(channel=item.channel, title=title, url=url, action='play', language=language,
|
||||
infoLabels=item.infoLabels))
|
||||
try:
|
||||
data = get_source(online_url)
|
||||
patron = '<i class=lang-(.*?)>.*?href=(.*?) '
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
scrapertools.printMatches(matches)
|
||||
for lang_data, scrapedurl in matches:
|
||||
if 'lat' in lang_data:
|
||||
language = 'Lat'
|
||||
elif 'spa' in lang_data:
|
||||
language = 'Cast'
|
||||
elif 'eng' in lang_data:
|
||||
language = 'VOSE'
|
||||
else:
|
||||
language = 'VO'
|
||||
video_id = scrapertools.find_single_match(scrapedurl, 'index.php/(\d+)/')
|
||||
new_url = '%s%s%s%s' % (host, 'ext/index-include.php?id=', video_id, '&tipo=1')
|
||||
data = get_source(new_url)
|
||||
video_url = scrapertools.find_single_match(data, '<div class=container><a href=(.*?)>')
|
||||
video_url = video_url.replace('enlace.php', 'r')
|
||||
data = httptools.downloadpage(video_url, follow_redirects=False)
|
||||
url = data.headers['location']
|
||||
title = '%s '+ '[%s]' % language
|
||||
if url != '':
|
||||
itemlist.append(Item(channel=item.channel, title=title, url=url, action='play', language=language,
|
||||
infoLabels=item.infoLabels))
|
||||
except:
|
||||
pass
|
||||
|
||||
itemlist = servertools.get_servers_itemlist(itemlist, lambda i: i.title % i.server.capitalize())
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ def getmainlist(view="thumb_"):
|
||||
itemlist.append(Item(title=config.get_localized_string(30130), channel="news", action="mainlist",
|
||||
thumbnail=get_thumb("news.png", view),
|
||||
category=config.get_localized_string(30119), viewmode="thumbnails",
|
||||
context=[{"title": "Configurar Novedades", "channel": "news", "action": "menu_opciones",
|
||||
context=[{"title": config.get_localized_string(70285), "channel": "news", "action": "menu_opciones",
|
||||
"goto": True}]))
|
||||
|
||||
itemlist.append(Item(title=config.get_localized_string(30118), channel="channelselector", action="getchanneltypes",
|
||||
@@ -27,7 +27,7 @@ def getmainlist(view="thumb_"):
|
||||
itemlist.append(Item(title=config.get_localized_string(30103), channel="search", action="mainlist",
|
||||
thumbnail=get_thumb("search.png", view),
|
||||
category=config.get_localized_string(30119), viewmode="list",
|
||||
context=[{"title": "Configurar Buscador", "channel": "search", "action": "opciones",
|
||||
context=[{"title": config.get_localized_string(70286), "channel": "search", "action": "opciones",
|
||||
"goto": True}]))
|
||||
|
||||
itemlist.append(Item(title=config.get_localized_string(30102), channel="favorites", action="mainlist",
|
||||
@@ -38,12 +38,12 @@ def getmainlist(view="thumb_"):
|
||||
itemlist.append(Item(title=config.get_localized_string(30131), channel="videolibrary", action="mainlist",
|
||||
thumbnail=get_thumb("videolibrary.png", view),
|
||||
category=config.get_localized_string(30119), viewmode="thumbnails",
|
||||
context=[{"title": "Configurar Videoteca", "channel": "videolibrary",
|
||||
context=[{"title": config.get_localized_string(70287), "channel": "videolibrary",
|
||||
"action": "channel_config"}]))
|
||||
|
||||
itemlist.append(Item(title=config.get_localized_string(30101), channel="downloads", action="mainlist",
|
||||
thumbnail=get_thumb("downloads.png", view), viewmode="list",
|
||||
context=[{"title": "Configurar Descargas", "channel": "setting", "config": "downloads",
|
||||
context=[{"title": config.get_localized_string(70288), "channel": "setting", "config": "downloads",
|
||||
"action": "channel_config"}]))
|
||||
|
||||
thumb_setting = "setting_%s.png" % 0 # config.get_setting("plugin_updates_available")
|
||||
@@ -52,7 +52,7 @@ def getmainlist(view="thumb_"):
|
||||
thumbnail=get_thumb(thumb_setting, view),
|
||||
category=config.get_localized_string(30100), viewmode="list"))
|
||||
|
||||
itemlist.append(Item(title=config.get_localized_string(30104), channel="help", action="mainlist",
|
||||
itemlist.append(Item(title=config.get_localized_string(30104) + " (" + config.get_localized_string(20000) +" " + config.get_addon_version() + ")", channel="help", action="mainlist",
|
||||
thumbnail=get_thumb("help.png", view),
|
||||
category=config.get_localized_string(30104), viewmode="list"))
|
||||
return itemlist
|
||||
@@ -196,6 +196,22 @@ def filterchannels(category, view="thumb_"):
|
||||
|
||||
channelslist.insert(0, Item(title=config.get_localized_string(60088), action="mainlist", channel="url",
|
||||
thumbnail=channel_parameters["thumbnail"], type="generic", viewmode="list"))
|
||||
if category in ['movie', 'tvshow']:
|
||||
titles = ['Mas Populares', 'Mejor Valoradas', 'Ahora en cines', 'En Emision', 'Por Genero']
|
||||
ids = ['popular', 'top_rated', 'now_playing', 'on_the_air']
|
||||
for x in range(0,3):
|
||||
if x == 2 and category != 'movie':
|
||||
title=titles[x+1]
|
||||
id = ids[x+1]
|
||||
else:
|
||||
title=titles[x]
|
||||
id = ids[x]
|
||||
channelslist.insert(x,
|
||||
Item(channel='search', action='discover_list', title=title, search_type='list',
|
||||
list_type='%s/%s' % (category.replace('show',''), id), thumbnail=get_thumb(id+".png")))
|
||||
|
||||
channelslist.insert(3, Item(channel='search', action='genres_menu', title='Generos',
|
||||
type=category.replace('show',''), thumbnail=get_thumb("genres.png")))
|
||||
|
||||
return channelslist
|
||||
|
||||
|
||||
89
plugin.video.alfa/core/tmdb.py
Executable file → Normal file
89
plugin.video.alfa/core/tmdb.py
Executable file → Normal file
@@ -536,6 +536,32 @@ def completar_codigos(item):
|
||||
item.infoLabels['url_scraper'].append(url_scraper)
|
||||
|
||||
|
||||
def discovery(item):
|
||||
from core.item import Item
|
||||
from platformcode import unify
|
||||
|
||||
if item.search_type == 'discover':
|
||||
listado = Tmdb(discover={'url':'discover/%s' % item.type, 'with_genres':item.list_type, 'language':'es',
|
||||
'page':item.page})
|
||||
|
||||
elif item.search_type == 'list':
|
||||
if item.page == '':
|
||||
item.page = '1'
|
||||
listado = Tmdb(list={'url': item.list_type, 'language':'es', 'page':item.page})
|
||||
|
||||
logger.debug(listado.get_list_resultados())
|
||||
result = listado.get_list_resultados()
|
||||
|
||||
return result
|
||||
|
||||
def get_genres(type):
|
||||
lang = 'es'
|
||||
genres = Tmdb(tipo=type)
|
||||
|
||||
return genres.dic_generos[lang]
|
||||
|
||||
|
||||
|
||||
# Clase auxiliar
|
||||
class ResultDictDefault(dict):
|
||||
# Python 2.4
|
||||
@@ -762,6 +788,7 @@ class Tmdb(object):
|
||||
self.busqueda_year = kwargs.get('year', '')
|
||||
self.busqueda_filtro = kwargs.get('filtro', {})
|
||||
self.discover = kwargs.get('discover', {})
|
||||
self.list = kwargs.get('list', {})
|
||||
|
||||
# Reellenar diccionario de generos si es necesario
|
||||
if (self.busqueda_tipo == 'movie' or self.busqueda_tipo == "tv") and \
|
||||
@@ -793,6 +820,9 @@ class Tmdb(object):
|
||||
elif self.discover:
|
||||
self.__discover()
|
||||
|
||||
elif self.list:
|
||||
self.__list()
|
||||
|
||||
else:
|
||||
logger.debug("Creado objeto vacio")
|
||||
|
||||
@@ -947,6 +977,65 @@ class Tmdb(object):
|
||||
logger.error(msg)
|
||||
return 0
|
||||
|
||||
def __list(self, index_results=0):
|
||||
self.result = ResultDictDefault()
|
||||
results = []
|
||||
total_results = 0
|
||||
total_pages = 0
|
||||
|
||||
# Ejemplo self.discover: {'url': 'movie/', 'with_cast': '1'}
|
||||
# url: Método de la api a ejecutar
|
||||
# resto de claves: Parámetros de la búsqueda concatenados a la url
|
||||
type_search = self.list.get('url', '')
|
||||
if type_search:
|
||||
params = []
|
||||
for key, value in self.list.items():
|
||||
if key != "url":
|
||||
params.append("&"+key + "=" + str(value))
|
||||
# http://api.themoviedb.org/3/movie/popolar?api_key=a1ab8b8669da03637a4b98fa39c39228&&language=es
|
||||
url = ('http://api.themoviedb.org/3/%s?api_key=a1ab8b8669da03637a4b98fa39c39228%s'
|
||||
% (type_search, ''.join(params)))
|
||||
|
||||
logger.info("[Tmdb.py] Buscando %s:\n%s" % (type_search, url))
|
||||
resultado = self.get_json(url)
|
||||
|
||||
total_results = resultado.get("total_results", -1)
|
||||
total_pages = resultado.get("total_pages", 1)
|
||||
|
||||
if total_results > 0:
|
||||
results = resultado["results"]
|
||||
if self.busqueda_filtro and results:
|
||||
# TODO documentar esta parte
|
||||
for key, value in dict(self.busqueda_filtro).items():
|
||||
for r in results[:]:
|
||||
if key not in r or r[key] != value:
|
||||
results.remove(r)
|
||||
total_results -= 1
|
||||
elif total_results == -1:
|
||||
results = resultado
|
||||
|
||||
if index_results >= len(results):
|
||||
logger.error(
|
||||
"La busqueda de '%s' no dio %s resultados" % (type_search, index_results))
|
||||
return 0
|
||||
|
||||
# Retornamos el numero de resultados de esta pagina
|
||||
if results:
|
||||
self.results = results
|
||||
self.total_results = total_results
|
||||
self.total_pages = total_pages
|
||||
if total_results > 0:
|
||||
self.result = ResultDictDefault(self.results[index_results])
|
||||
else:
|
||||
self.result = results
|
||||
return len(self.results)
|
||||
else:
|
||||
# No hay resultados de la busqueda
|
||||
logger.error("La busqueda de '%s' no dio resultados" % type_search)
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
def __discover(self, index_results=0):
|
||||
self.result = ResultDictDefault()
|
||||
results = []
|
||||
|
||||
BIN
plugin.video.alfa/logo-cumple.png
Normal file
BIN
plugin.video.alfa/logo-cumple.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 75 KiB |
@@ -218,9 +218,9 @@ def render_items(itemlist, parent_item):
|
||||
context_commands = set_context_commands(item, parent_item)
|
||||
|
||||
# Añadimos el item
|
||||
if config.get_platform(True)['num_version'] >= 17.0:
|
||||
if config.get_platform(True)['num_version'] >= 17.0 and parent_item.list_type == '':
|
||||
listitem.addContextMenuItems(context_commands)
|
||||
else:
|
||||
elif parent_item.list_type == '':
|
||||
listitem.addContextMenuItems(context_commands, replaceItems=True)
|
||||
|
||||
if not item.totalItems:
|
||||
@@ -239,7 +239,18 @@ def render_items(itemlist, parent_item):
|
||||
xbmcplugin.setContent(int(sys.argv[1]), "movies")
|
||||
|
||||
# Fijamos el "breadcrumb"
|
||||
xbmcplugin.setPluginCategory(handle=int(sys.argv[1]), category=parent_item.category.capitalize())
|
||||
if parent_item.list_type == '':
|
||||
breadcrumb = parent_item.category.capitalize()
|
||||
else:
|
||||
if 'similar' in parent_item.list_type:
|
||||
if parent_item.contentTitle != '':
|
||||
breadcrumb = 'Similares (%s)' % parent_item.contentTitle
|
||||
else:
|
||||
breadcrumb = 'Similares (%s)' % parent_item.contentSerieName
|
||||
else:
|
||||
breadcrumb = 'Busqueda'
|
||||
|
||||
xbmcplugin.setPluginCategory(handle=int(sys.argv[1]), category=breadcrumb)
|
||||
|
||||
# No ordenar items
|
||||
xbmcplugin.addSortMethod(handle=int(sys.argv[1]), sortMethod=xbmcplugin.SORT_METHOD_NONE)
|
||||
@@ -424,7 +435,6 @@ def set_context_commands(item, parent_item):
|
||||
else:
|
||||
context_commands.append(
|
||||
(command["title"], "XBMC.RunPlugin(%s?%s)" % (sys.argv[0], item.clone(**command).tourl())))
|
||||
|
||||
# Opciones segun criterios, solo si el item no es un tag (etiqueta), ni es "Añadir a la videoteca", etc...
|
||||
if item.action and item.action not in ["add_pelicula_to_library", "add_serie_to_library", "buscartrailer"]:
|
||||
# Mostrar informacion: si el item tiene plot suponemos q es una serie, temporada, capitulo o pelicula
|
||||
@@ -460,7 +470,8 @@ def set_context_commands(item, parent_item):
|
||||
elif item.contentType == "movie" and (item.infoLabels['tmdb_id'] or item.infoLabels['imdb_id'] or
|
||||
item.contentTitle):
|
||||
param = "id =%s,imdb_id=%s,name=%s" \
|
||||
% (item.infoLabels['tmdb_id'], item.infoLabels['imdb_id'], item.contentTitle)
|
||||
% (item.infoLabels['tmdb_id'], item.infoLabels['imdb_id'], item.contentTitle)
|
||||
|
||||
context_commands.append(("ExtendedInfo",
|
||||
"XBMC.RunScript(script.extendedinfo,info=extendedinfo,%s)" % param))
|
||||
|
||||
@@ -513,6 +524,14 @@ def set_context_commands(item, parent_item):
|
||||
from_channel=item.channel,
|
||||
|
||||
contextual=True).tourl())))
|
||||
if item.contentType == 'tvshow':
|
||||
mediatype = 'tv'
|
||||
else:
|
||||
mediatype = item.contentType
|
||||
context_commands.append(("[COLOR yellow]Buscar Similares[/COLOR]", "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())))
|
||||
|
||||
# Definir como Pagina de inicio
|
||||
if config.get_setting('start_page'):
|
||||
if item.action not in ['findvideos', 'play']:
|
||||
|
||||
@@ -140,6 +140,12 @@ def remove_format(string):
|
||||
#logger.debug('sale de remove: %s' % string)
|
||||
return string
|
||||
|
||||
def normalize(string):
|
||||
string = string.decode('utf-8')
|
||||
normal = ''.join((c for c in unicodedata.normalize('NFD', unicode(string)) if unicodedata.category(c) != 'Mn'))
|
||||
return normal
|
||||
|
||||
|
||||
def simplify(string):
|
||||
|
||||
#logger.info()
|
||||
@@ -148,9 +154,12 @@ def simplify(string):
|
||||
string = string.replace('-',' ').replace('_',' ')
|
||||
string = re.sub(r'\d+','', string)
|
||||
string = string.strip()
|
||||
string = string.decode('utf-8')
|
||||
notilde = ''.join((c for c in unicodedata.normalize('NFD', unicode(string)) if unicodedata.category(c) != 'Mn'))
|
||||
string = notilde.decode()
|
||||
|
||||
notilde = normalize(string)
|
||||
try:
|
||||
string = notilde.decode()
|
||||
except:
|
||||
pass
|
||||
string = string.lower()
|
||||
#logger.debug('sale de simplify: %s' % string)
|
||||
|
||||
@@ -413,6 +422,14 @@ def title_format(item):
|
||||
if lang:
|
||||
item.title = add_languages(item.title, simple_language)
|
||||
|
||||
# Para las busquedas por canal
|
||||
if item.from_channel != '':
|
||||
from core import channeltools
|
||||
channel_parameters = channeltools.get_channel_parameters(item.from_channel)
|
||||
logger.debug(channel_parameters)
|
||||
item.title = '%s [%s]' % (item.title, channel_parameters['title'])
|
||||
|
||||
|
||||
# Formato para actualizaciones de series en la videoteca sobreescribe los colores anteriores
|
||||
|
||||
if item.channel=='videolibrary' and item.context!='':
|
||||
|
||||
@@ -3836,3 +3836,35 @@ msgstr ""
|
||||
msgctxt "#70283"
|
||||
msgid "movie"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70284"
|
||||
msgid "%.2f%% of %.1fMB %s | %.1f kB/s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70285"
|
||||
msgid "Configure News"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70286"
|
||||
msgid "Configure Search"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70287"
|
||||
msgid "Configure VideoLibrary"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70288"
|
||||
msgid "Configure Downloads"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70289"
|
||||
msgid "Alfa\nCorrected an error in the adult section, the password has been reset to "
|
||||
msgstr " "
|
||||
|
||||
msgctxt "#70290"
|
||||
msgid "default, you will have to change it again if you want.\ n Type 's', if you have understood it: "
|
||||
msgstr " "
|
||||
|
||||
msgctxt "#70291"
|
||||
msgid "Error, during conversion"
|
||||
msgstr ""
|
||||
@@ -3820,3 +3820,35 @@ msgstr "Ricerca in %s"
|
||||
msgctxt "#70283"
|
||||
msgid "movie"
|
||||
msgstr "film"
|
||||
|
||||
msgctxt "#70284"
|
||||
msgid "%.2f%% of %.1fMB %s | %.1f kB/s"
|
||||
msgstr "%.2f%% di %.1fMB %s | %.1f kB/s"
|
||||
|
||||
msgctxt "#70285"
|
||||
msgid "Configure News"
|
||||
msgstr "Configura Novità"
|
||||
|
||||
msgctxt "#70286"
|
||||
msgid "Configure Search"
|
||||
msgstr "Configura Ricerca"
|
||||
|
||||
msgctxt "#70287"
|
||||
msgid "Configure VideoLibrary"
|
||||
msgstr "Configura Videoteca"
|
||||
|
||||
msgctxt "#70288"
|
||||
msgid "Configure Downloads"
|
||||
msgstr "Configura Downloads"
|
||||
|
||||
msgctxt "#70289"
|
||||
msgid "Alfa\nCorrected an error in the adult section, the password has been reset to "
|
||||
msgstr "Alfa\nCorretto un errore nella sezione adulti, la password è sta resettata a quella di "
|
||||
|
||||
msgctxt "#70290"
|
||||
msgid "default, you will have to change it again if you want.\ n Type 's', if you have understood it: "
|
||||
msgstr "default, puoi cambiarla di nuovo se vuoi.\n Scrivi 's', se hai capito: "
|
||||
|
||||
msgctxt "#70291"
|
||||
msgid "Error, during conversion"
|
||||
msgstr "Errore, in conversione"
|
||||
|
||||
@@ -3820,3 +3820,41 @@ msgstr "Buscando en %s"
|
||||
msgctxt "#70283"
|
||||
msgid "movie"
|
||||
msgstr "pelicula"
|
||||
|
||||
msgctxt "#70284"
|
||||
msgid "%.2f%% of %.1fMB %s | %.1f kB/s"
|
||||
msgstr "%.2f%% de %.1fMB %s | %.1f kB/s"
|
||||
|
||||
msgctxt "#70285"
|
||||
msgid "Configure News"
|
||||
msgstr "Configurar Novedades"
|
||||
|
||||
msgctxt "#70286"
|
||||
msgid "Configure Search"
|
||||
msgstr "Configurar Buscador"
|
||||
|
||||
msgctxt "#70286"
|
||||
msgid "Configure Search"
|
||||
msgstr "Configurar Buscador"
|
||||
|
||||
msgctxt "#70287"
|
||||
msgid "Configure VideoLibrary"
|
||||
msgstr "Configurar Videoteca"
|
||||
|
||||
msgctxt "#70288"
|
||||
msgid "Configure Downloads"
|
||||
msgstr "Configurar Descargas"
|
||||
|
||||
msgctxt "#70289"
|
||||
msgid "Alfa\nCorrected an error in the adult section, the password has been reset to "
|
||||
msgstr "Alfa\nCorregido un error en la seccion adultos, se ha reseteado la contrasena a por "
|
||||
|
||||
msgctxt "#70290"
|
||||
msgid "default, you will have to change it again if you want.\ n Type 's', if you have understood it: "
|
||||
msgstr "defecto, tendra que cambiarla de nuevo si lo desea.\n Escriba 's', si lo ha entendido: "
|
||||
|
||||
msgctxt "#70291"
|
||||
msgid "Error, during conversion"
|
||||
msgstr "Error, en conversión"
|
||||
|
||||
|
||||
|
||||
@@ -3820,3 +3820,41 @@ msgstr "Buscando en %s"
|
||||
msgctxt "#70283"
|
||||
msgid "movie"
|
||||
msgstr "pelicula"
|
||||
|
||||
msgctxt "#70284"
|
||||
msgid "%.2f%% of %.1fMB %s | %.1f kB/s"
|
||||
msgstr "%.2f%% de %.1fMB %s | %.1f kB/s"
|
||||
|
||||
msgctxt "#70285"
|
||||
msgid "Configure News"
|
||||
msgstr "Configurar Novedades"
|
||||
|
||||
msgctxt "#70286"
|
||||
msgid "Configure Search"
|
||||
msgstr "Configurar Buscador"
|
||||
|
||||
msgctxt "#70286"
|
||||
msgid "Configure Search"
|
||||
msgstr "Configurar Buscador"
|
||||
|
||||
msgctxt "#70287"
|
||||
msgid "Configure VideoLibrary"
|
||||
msgstr "Configurar Videoteca"
|
||||
|
||||
msgctxt "#70288"
|
||||
msgid "Configure Downloads"
|
||||
msgstr "Configurar Descargas"
|
||||
|
||||
msgctxt "#70289"
|
||||
msgid "Alfa\nCorrected an error in the adult section, the password has been reset to "
|
||||
msgstr "Alfa\nCorregido un error en la seccion adultos, se ha reseteado la contrasena a por "
|
||||
|
||||
msgctxt "#70290"
|
||||
msgid "default, you will have to change it again if you want.\ n Type 's', if you have understood it: "
|
||||
msgstr "defecto, tendra que cambiarla de nuevo si lo desea.\n Escriba 's', si lo ha entendido: "
|
||||
|
||||
msgctxt "#70291"
|
||||
msgid "Error, during conversion"
|
||||
msgstr "Error, en conversión"
|
||||
|
||||
|
||||
|
||||
@@ -3820,3 +3820,41 @@ msgstr "Buscando en %s"
|
||||
msgctxt "#70283"
|
||||
msgid "movie"
|
||||
msgstr "pelicula"
|
||||
|
||||
msgctxt "#70284"
|
||||
msgid "%.2f%% of %.1fMB %s | %.1f kB/s"
|
||||
msgstr "%.2f%% de %.1fMB %s | %.1f kB/s"
|
||||
|
||||
msgctxt "#70285"
|
||||
msgid "Configure News"
|
||||
msgstr "Configurar Novedades"
|
||||
|
||||
msgctxt "#70286"
|
||||
msgid "Configure Search"
|
||||
msgstr "Configurar Buscador"
|
||||
|
||||
msgctxt "#70286"
|
||||
msgid "Configure Search"
|
||||
msgstr "Configurar Buscador"
|
||||
|
||||
msgctxt "#70287"
|
||||
msgid "Configure VideoLibrary"
|
||||
msgstr "Configurar Videoteca"
|
||||
|
||||
msgctxt "#70288"
|
||||
msgid "Configure Downloads"
|
||||
msgstr "Configurar Descargas"
|
||||
|
||||
msgctxt "#70289"
|
||||
msgid "Alfa\nCorrected an error in the adult section, the password has been reset to "
|
||||
msgstr "Alfa\nCorregido un error en la seccion adultos, se ha reseteado la contrasena a por "
|
||||
|
||||
msgctxt "#70290"
|
||||
msgid "default, you will have to change it again if you want.\ n Type 's', if you have understood it: "
|
||||
msgstr "defecto, tendra que cambiarla de nuevo si lo desea.\n Escriba 's', si lo ha entendido: "
|
||||
|
||||
msgctxt "#70291"
|
||||
msgid "Error, during conversion"
|
||||
msgstr "Error, en conversión"
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 47 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 38 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 33 KiB |
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -28,7 +28,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -29,7 +29,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -37,7 +37,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -29,7 +29,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -28,7 +28,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -29,7 +29,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -29,7 +29,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -49,7 +49,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -29,7 +29,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -29,7 +29,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -29,7 +29,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -28,7 +28,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -39,7 +39,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -29,7 +29,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -33,7 +33,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -37,7 +37,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -28,7 +28,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -29,7 +29,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -29,7 +29,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -40,7 +40,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -29,7 +29,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -27,7 +27,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -40,7 +40,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -29,7 +29,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -28,7 +28,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -30,7 +30,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -34,7 +34,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -28,7 +28,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -29,7 +29,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -28,7 +28,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -39,7 +39,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -25,7 +25,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
"default": false,
|
||||
"enabled": true,
|
||||
"id": "black_list",
|
||||
"label": "Incluir en lista negra",
|
||||
"label": "@60654",
|
||||
"type": "bool",
|
||||
"visible": true
|
||||
},
|
||||
@@ -41,7 +41,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"id": "favorites_servers_list",
|
||||
"label": "Incluir en lista de favoritos",
|
||||
"label": "@60655",
|
||||
"lvalues": [
|
||||
"No",
|
||||
"1",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user