- CineCalidad: Corrección por cambio de estructura - InkaPelis: Corrección por cambio de estructura - InkaSerie: Corrección por cambio de estructura - SeriesMetro: Corrección por cambio de estructura
300 lines
9.0 KiB
Python
300 lines
9.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
# -*- Channel Community -*-
|
|
# -*- Created for Alfa-addon -*-
|
|
# -*- By the Alfa Develop Group -*-
|
|
|
|
import re
|
|
import urllib
|
|
import os
|
|
|
|
from core import httptools
|
|
from core import scrapertools
|
|
from core import servertools
|
|
from core import jsontools
|
|
from channelselector import get_thumb
|
|
from core import tmdb
|
|
from core.item import Item
|
|
from platformcode import logger, config, platformtools
|
|
from channels import autoplay
|
|
from channels import filtertools
|
|
|
|
list_data = {}
|
|
|
|
list_language = ['LAT', 'CAST', 'VO', 'VOSE']
|
|
list_servers = ['directo']
|
|
list_quality = ['SD', '720', '1080', '4k']
|
|
|
|
def mainlist(item):
|
|
logger.info()
|
|
|
|
path = os.path.join(config.get_data_path(), 'community_channels.json')
|
|
if not os.path.exists(path):
|
|
with open(path, "w") as file:
|
|
file.write('{"channels":{}}')
|
|
file.close()
|
|
autoplay.init(item.channel, list_servers, list_quality)
|
|
|
|
return show_channels(item)
|
|
|
|
|
|
def show_channels(item):
|
|
logger.info()
|
|
itemlist = []
|
|
|
|
context = [{"title": "Eliminar este canal",
|
|
"action": "remove_channel",
|
|
"channel": "community"}]
|
|
|
|
|
|
path = os.path.join(config.get_data_path(), 'community_channels.json')
|
|
file = open(path, "r")
|
|
json = jsontools.load(file.read())
|
|
|
|
itemlist.append(Item(channel=item.channel, title='Agregar un canal', action='add_channel', thumbnail=get_thumb('add.png')))
|
|
|
|
for key, channel in json['channels'].items():
|
|
|
|
if 'poster' in channel:
|
|
poster = channel['poster']
|
|
else:
|
|
poster = ''
|
|
|
|
itemlist.append(Item(channel=item.channel, title=channel['channel_name'], url=channel['path'],
|
|
thumbnail=poster, action='show_menu', channel_id = key, context=context))
|
|
return itemlist
|
|
|
|
def load_json(item):
|
|
logger.info()
|
|
|
|
if item.url.startswith('http'):
|
|
json_file = httptools.downloadpage(item.url).data
|
|
else:
|
|
json_file = open(item.url, "r").read()
|
|
|
|
json_data = jsontools.load(json_file)
|
|
|
|
return json_data
|
|
|
|
def show_menu(item):
|
|
global list_data
|
|
logger.info()
|
|
itemlist = []
|
|
|
|
json_data = load_json(item)
|
|
|
|
if "menu" in json_data:
|
|
for option in json_data['menu']:
|
|
itemlist.append(Item(channel=item.channel, title=option['title'], action='show_menu', url=option['link']))
|
|
autoplay.show_option(item.channel, itemlist)
|
|
return itemlist
|
|
|
|
if "movies_list" in json_data:
|
|
item.media_type='movies_list'
|
|
|
|
elif "tvshows_list" in json_data:
|
|
item.media_type = 'tvshows_list'
|
|
|
|
elif "episodes_list" in json_data:
|
|
item.media_type = 'episodes_list'
|
|
|
|
return list_all(item)
|
|
|
|
|
|
return itemlist
|
|
|
|
def list_all(item):
|
|
logger.info()
|
|
|
|
itemlist = []
|
|
media_type = item.media_type
|
|
json_data = load_json(item)
|
|
for media in json_data[media_type]:
|
|
|
|
quality, language, plot, poster = set_extra_values(media)
|
|
|
|
title = media['title']
|
|
title = set_title(title, language, quality)
|
|
|
|
new_item = Item(channel=item.channel, title=title, quality=quality,
|
|
language=language, plot=plot, thumbnail=poster)
|
|
|
|
|
|
if 'movies_list' in json_data:
|
|
new_item.url = media
|
|
new_item.contentTitle = media['title']
|
|
new_item.action = 'findvideos'
|
|
if 'year' in media:
|
|
new_item.infoLabels['year'] = media['year']
|
|
else:
|
|
new_item.url = media['seasons_list']
|
|
new_item.contentSerieName = media['title']
|
|
new_item.action = 'seasons'
|
|
|
|
itemlist.append(new_item)
|
|
|
|
tmdb.set_infoLabels(itemlist, seekTmdb=True)
|
|
return itemlist
|
|
|
|
def seasons(item):
|
|
logger.info()
|
|
itemlist = []
|
|
infoLabels = item.infoLabels
|
|
list_seasons = item.url
|
|
for season in list_seasons:
|
|
infoLabels['season'] = season['season']
|
|
title = 'Temporada %s' % season['season']
|
|
itemlist.append(Item(channel=item.channel, title=title, url=season['link'], action='episodesxseason',
|
|
contentSeasonNumber=season['season'], infoLabels=infoLabels))
|
|
|
|
tmdb.set_infoLabels(itemlist, seekTmdb=True)
|
|
itemlist = sorted(itemlist, key=lambda i: i.title)
|
|
|
|
return itemlist
|
|
|
|
|
|
def episodesxseason(item):
|
|
logger.info()
|
|
|
|
itemlist = []
|
|
json_data = load_json(item)
|
|
infoLabels = item.infoLabels
|
|
|
|
season_number = infoLabels['season']
|
|
for episode in json_data['episodes_list']:
|
|
episode_number = episode['number']
|
|
infoLabels['season'] = season_number
|
|
infoLabels['episode'] = episode_number
|
|
|
|
title = '%sx%s - Episodio %s' % (season_number, episode_number, episode_number)
|
|
|
|
itemlist.append(Item(channel=item.channel, title=title, url=episode, action='findvideos',
|
|
contentEpisodeNumber=episode_number, infoLabels=infoLabels))
|
|
|
|
tmdb.set_infoLabels(itemlist, seekTmdb=True)
|
|
return itemlist
|
|
|
|
|
|
def findvideos(item):
|
|
logger.info()
|
|
itemlist = []
|
|
|
|
for url in item.url['links']:
|
|
quality, language, plot, poster = set_extra_values(url)
|
|
title = ''
|
|
title = set_title(title, language, quality)
|
|
|
|
itemlist.append(Item(channel=item.channel, title='%s'+title, url=url['url'], action='play', quality=quality,
|
|
language=language, infoLabels = item.infoLabels))
|
|
|
|
itemlist = servertools.get_servers_itemlist(itemlist, lambda i: i.title % i.server.capitalize())
|
|
|
|
# Requerido para FilterTools
|
|
itemlist = filtertools.get_links(itemlist, item, list_language)
|
|
|
|
# Requerido para AutoPlay
|
|
|
|
autoplay.start(itemlist, item)
|
|
|
|
return itemlist
|
|
|
|
def add_channel(item):
|
|
logger.info()
|
|
import xbmc
|
|
import xbmcgui
|
|
channel_to_add = {}
|
|
json_file = ''
|
|
result = platformtools.dialog_select('Agregar un canal', ['Desde archivo local', 'Desde URL'])
|
|
if result == -1:
|
|
return
|
|
if result==0:
|
|
file_path = xbmcgui.Dialog().browseSingle(1, 'Alfa - (Comunidad)', 'files')
|
|
try:
|
|
channel_to_add['path'] = file_path
|
|
json_file = jsontools.load(open(file_path, "r").read())
|
|
channel_to_add['channel_name'] = json_file['channel_name']
|
|
except:
|
|
pass
|
|
|
|
elif result==1:
|
|
url = platformtools.dialog_input("", 'Ingresa la URL del canal', False)
|
|
try:
|
|
channel_to_add['path'] = url
|
|
json_file = jsontools.load(httptools.downloadpage(url).data)
|
|
except:
|
|
pass
|
|
|
|
if len(json_file) == 0:
|
|
return
|
|
if "episodes_list" in json_file:
|
|
platformtools.dialog_ok('Alfa', 'No es posible agregar este tipo de canal')
|
|
return
|
|
channel_to_add['channel_name'] = json_file['channel_name']
|
|
path = os.path.join(config.get_data_path(), 'community_channels.json')
|
|
|
|
community_json = open(path, "r")
|
|
community_json = jsontools.load(community_json.read())
|
|
id = len(community_json['channels']) + 1
|
|
community_json['channels'][id]=(channel_to_add)
|
|
|
|
with open(path, "w") as file:
|
|
file.write(jsontools.dump(community_json))
|
|
file.close()
|
|
|
|
platformtools.dialog_notification('Alfa', '%s se ha agregado' % json_file['channel_name'])
|
|
return
|
|
|
|
def remove_channel(item):
|
|
logger.info()
|
|
import xbmc
|
|
import xbmcgui
|
|
path = os.path.join(config.get_data_path(), 'community_channels.json')
|
|
|
|
community_json = open(path, "r")
|
|
community_json = jsontools.load(community_json.read())
|
|
|
|
id = item.channel_id
|
|
to_delete = community_json['channels'][id]['channel_name']
|
|
del community_json['channels'][id]
|
|
with open(path, "w") as file:
|
|
file.write(jsontools.dump(community_json))
|
|
file.close()
|
|
|
|
platformtools.dialog_notification('Alfa', '%s ha sido eliminado' % to_delete)
|
|
platformtools.itemlist_refresh()
|
|
return
|
|
|
|
|
|
def set_extra_values(dict):
|
|
logger.info()
|
|
quality = ''
|
|
language = ''
|
|
plot = ''
|
|
poster = ''
|
|
|
|
if 'quality' in dict and dict['quality'] != '':
|
|
quality = dict['quality'].upper()
|
|
if 'language' in dict and dict['language'] != '':
|
|
language = dict['language'].upper()
|
|
if 'plot' in dict and dict['plot'] != '':
|
|
plot = dict['plot']
|
|
if 'poster' in dict and dict['poster'] != '':
|
|
poster = dict['poster']
|
|
|
|
return quality, language, plot, poster
|
|
|
|
def set_title(title, language, quality):
|
|
logger.info()
|
|
|
|
if not config.get_setting('unify'):
|
|
if quality != '':
|
|
title += ' [%s]' % quality
|
|
if language != '':
|
|
if not isinstance(language, list):
|
|
title += ' [%s]' % language.upper()
|
|
else:
|
|
title += ' '
|
|
for lang in language:
|
|
title += '[%s]' % lang.upper()
|
|
|
|
return title.capitalize()
|