Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -58,7 +58,6 @@ def learning(item):
|
||||
itemlist =[]
|
||||
json = current_session.get(item.url).json()['contents']
|
||||
for key in json:
|
||||
support.log(key['name'])
|
||||
itemlist.append(support.Item(channel = item.channel, title = support.typo(key['name'],'bold'), fulltitle = key['name'], show = key['name'],
|
||||
url = key['contents'], thumbnail = item.thumbnail, action = 'peliculas', args = item.args))
|
||||
return itemlist
|
||||
@@ -117,7 +116,6 @@ def replay(item):
|
||||
support.log()
|
||||
itemlist = []
|
||||
json = current_session.get(item.url).json()[item.fulltitle][0]['palinsesto'][0]['programmi']
|
||||
# support.log(json)
|
||||
for key in json:
|
||||
support.log('KEY=',key)
|
||||
if key and key['pathID']: itemlist.append(support.Item(channel = item.channel, thumbnail = getUrl(key['images']['landscape']), fanart = getUrl(key['images']['landscape']), url = getUrl(key['pathID']),
|
||||
@@ -165,13 +163,13 @@ def dirette(item):
|
||||
onAir = current_session.get(onair).json()['on_air']
|
||||
for i, key in enumerate(json):
|
||||
itemlist.append(support.Item(channel = item.channel, title = support.typo(key['channel'], 'bold'), fulltitle = key['channel'], show = key['channel'],
|
||||
thumbnail = key['transparent-icon'].replace("[RESOLUTION]", "256x-"), fanart = getUrl(onAir[i]['currentItem']['image']), url = key['video']['contentUrl'],
|
||||
thumbnail = key['transparent-icon'].replace("[RESOLUTION]", "256x-"),forcethumb=True , fanart = getUrl(onAir[i]['currentItem']['image']), url = key['video']['contentUrl'],
|
||||
plot = support.typo(onAir[i]['currentItem']['name'],'bold')+ '\n\n' + onAir[i]['currentItem']['description'], action = 'play'))
|
||||
return itemlist
|
||||
|
||||
|
||||
def peliculas(item):
|
||||
support.log(item.url)
|
||||
support.log()
|
||||
itemlist = []
|
||||
keys = []
|
||||
key_list = []
|
||||
@@ -235,7 +233,7 @@ def select(item):
|
||||
|
||||
|
||||
def episodios(item):
|
||||
support.log(len(item.url))
|
||||
support.log()
|
||||
itemlist = []
|
||||
if type(item.url) in [list, dict] and len(item.url) > 1 and ('name' in item.url[0] and 'stagione' not in item.url[0]['name'].lower()):
|
||||
for key in item.url:
|
||||
|
||||
@@ -165,8 +165,8 @@ def episodios(item):
|
||||
episodes.append(episode['episodes'])
|
||||
for episode in episodes:
|
||||
for key in episode:
|
||||
if 'stagione' in key['title'].encode('utf8').lower():
|
||||
match = support.match(key['title'].encode('utf8'), patron=r'[Ss]tagione\s*(\d+) - [Ee]pisodio\s*(\d+)').match
|
||||
if 'stagione' in encode(key['title']).lower():
|
||||
match = support.match(encode(key['title']), patron=r'[Ss]tagione\s*(\d+) - [Ee]pisodio\s*(\d+)').match
|
||||
title = match[0]+'x'+match[1] + ' - ' + item.fulltitle
|
||||
make_item = True
|
||||
elif int(key['season_id']) == int(season_id):
|
||||
@@ -228,10 +228,10 @@ def make_itemlist(itemlist, item, data):
|
||||
search = item.search if item.search else ''
|
||||
infoLabels = {}
|
||||
for key in data['data']:
|
||||
if search.lower() in key['title'].encode('utf8').lower():
|
||||
if search.lower() in encode(key['title']).lower():
|
||||
infoLabels['year'] = key['date_published']
|
||||
infoLabels['title'] = infoLabels['tvshowtitle'] = key['title']
|
||||
title = key['title'].encode('utf8')
|
||||
title = encode(key['title'])
|
||||
itemlist.append(
|
||||
Item(
|
||||
channel = item.channel,
|
||||
@@ -245,4 +245,10 @@ def make_itemlist(itemlist, item, data):
|
||||
contentTitle= title if item.contentType == 'movie' else '',
|
||||
infoLabels=infoLabels
|
||||
))
|
||||
return itemlist
|
||||
return itemlist
|
||||
|
||||
def encode(text):
|
||||
if sys.version_info[0] >= 3:
|
||||
return text
|
||||
else:
|
||||
return text.encode('utf8')
|
||||
@@ -120,7 +120,7 @@ def unescape(text):
|
||||
pass
|
||||
return text # leave as is
|
||||
|
||||
return re.sub("&#?\w+;", fixup, text)
|
||||
return re.sub("&#?\w+;", str(fixup), str(text))
|
||||
|
||||
# Convierte los codigos html "ñ" y lo reemplaza por "ñ" caracter unicode utf-8
|
||||
|
||||
|
||||
@@ -28,9 +28,9 @@ VIDEOLIBRARY_PATH = config.get_videolibrary_path()
|
||||
MOVIES_PATH = filetools.join(VIDEOLIBRARY_PATH, FOLDER_MOVIES)
|
||||
TVSHOWS_PATH = filetools.join(VIDEOLIBRARY_PATH, FOLDER_TVSHOWS)
|
||||
|
||||
"""if not FOLDER_MOVIES or not FOLDER_TVSHOWS or not VIDEOLIBRARY_PATH \
|
||||
if not FOLDER_MOVIES or not FOLDER_TVSHOWS or not VIDEOLIBRARY_PATH \
|
||||
or not filetools.exists(MOVIES_PATH) or not filetools.exists(TVSHOWS_PATH):
|
||||
config.verify_directories_created()"""
|
||||
config.verify_directories_created()
|
||||
|
||||
addon_name = "plugin://plugin.video.%s/" % config.PLUGIN_NAME
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ def start():
|
||||
if not config.dev_mode():
|
||||
from platformcode import updater
|
||||
updater.showSavedChangelog()
|
||||
|
||||
|
||||
def run(item=None):
|
||||
logger.info()
|
||||
if not item:
|
||||
|
||||
@@ -181,7 +181,7 @@ def render_items(itemlist, parent_item):
|
||||
item.folder = False
|
||||
if item.fanart == "":
|
||||
item.fanart = parent_item.fanart
|
||||
if item.action == 'play' and thumb_type == 1:
|
||||
if item.action == 'play' and thumb_type == 1 and not item.forcethumb:
|
||||
item.thumbnail = "https://github.com/kodiondemand/media/raw/master/resources/servers/" + item.server.lower() + '.png'
|
||||
|
||||
# if cloudflare, cookies are needed to display images taken from site
|
||||
|
||||
@@ -1035,113 +1035,123 @@ def execute_sql_kodi(sql):
|
||||
|
||||
|
||||
def check_sources(new_movies_path='', new_tvshows_path=''):
|
||||
def format_path(path):
|
||||
if path.startswith("special://") or '://' in path: sep = '/'
|
||||
else: sep = os.sep
|
||||
if not path.endswith(sep): path += sep
|
||||
return path
|
||||
|
||||
logger.info()
|
||||
|
||||
try:
|
||||
SOURCES_PATH = xbmc.translatePath("special://userdata/sources.xml")
|
||||
if filetools.isfile(SOURCES_PATH):
|
||||
xmldoc = minidom.parse(SOURCES_PATH)
|
||||
new_movies_path = format_path(new_movies_path)
|
||||
new_tvshows_path = format_path(new_tvshows_path)
|
||||
|
||||
# collect nodes
|
||||
# nodes = xmldoc.getElementsByTagName("video")
|
||||
video_node = xmldoc.childNodes[0].getElementsByTagName("video")[0]
|
||||
paths_node = video_node.getElementsByTagName("path")
|
||||
SOURCES_PATH = xbmc.translatePath("special://userdata/sources.xml")
|
||||
if filetools.isfile(SOURCES_PATH):
|
||||
xmldoc = minidom.parse(SOURCES_PATH)
|
||||
|
||||
video_node = xmldoc.childNodes[0].getElementsByTagName("video")[0]
|
||||
paths_node = video_node.getElementsByTagName("path")
|
||||
list_path = [p.firstChild.data for p in paths_node]
|
||||
|
||||
return new_movies_path in list_path, new_tvshows_path in list_path
|
||||
else:
|
||||
xmldoc = minidom.Document()
|
||||
source_nodes = xmldoc.createElement("sources")
|
||||
|
||||
for type in ['programs', 'video', 'music', 'picture', 'files']:
|
||||
nodo_type = xmldoc.createElement(type)
|
||||
element_default = xmldoc.createElement("default")
|
||||
element_default.setAttribute("pathversion", "1")
|
||||
nodo_type.appendChild(element_default)
|
||||
source_nodes.appendChild(nodo_type)
|
||||
xmldoc.appendChild(source_nodes)
|
||||
|
||||
return False, False
|
||||
|
||||
# check paths
|
||||
list_path = [p.firstChild.data for p in paths_node]
|
||||
if new_movies_path in list_path or new_tvshows_path in list_path:
|
||||
return True
|
||||
return False
|
||||
except:
|
||||
return True
|
||||
|
||||
|
||||
def update_sources(new='', old=''):
|
||||
logger.info()
|
||||
if new == old: return True
|
||||
if new == old: return
|
||||
|
||||
try:
|
||||
SOURCES_PATH = xbmc.translatePath("special://userdata/sources.xml")
|
||||
if filetools.isfile(SOURCES_PATH):
|
||||
xmldoc = minidom.parse(SOURCES_PATH)
|
||||
SOURCES_PATH = xbmc.translatePath("special://userdata/sources.xml")
|
||||
if filetools.isfile(SOURCES_PATH):
|
||||
xmldoc = minidom.parse(SOURCES_PATH)
|
||||
else:
|
||||
xmldoc = minidom.Document()
|
||||
source_nodes = xmldoc.createElement("sources")
|
||||
|
||||
for type in ['programs', 'video', 'music', 'picture', 'files']:
|
||||
nodo_type = xmldoc.createElement(type)
|
||||
element_default = xmldoc.createElement("default")
|
||||
element_default.setAttribute("pathversion", "1")
|
||||
nodo_type.appendChild(element_default)
|
||||
source_nodes.appendChild(nodo_type)
|
||||
xmldoc.appendChild(source_nodes)
|
||||
|
||||
# collect nodes
|
||||
# nodes = xmldoc.getElementsByTagName("video")
|
||||
video_node = xmldoc.childNodes[0].getElementsByTagName("video")[0]
|
||||
paths_node = video_node.getElementsByTagName("path")
|
||||
|
||||
if old:
|
||||
# delete old path
|
||||
for node in paths_node:
|
||||
if node.firstChild.data == old:
|
||||
parent = node.parentNode
|
||||
remove = parent.parentNode
|
||||
remove.removeChild(parent)
|
||||
|
||||
# write changes
|
||||
if sys.version_info[0] >= 3: #PY3
|
||||
filetools.write(SOURCES_PATH, '\n'.join([x for x in xmldoc.toprettyxml().encode("utf-8").splitlines() if x.strip()]))
|
||||
else:
|
||||
xmldoc = minidom.Document()
|
||||
source_nodes = xmldoc.createElement("sources")
|
||||
filetools.write(SOURCES_PATH, b'\n'.join([x for x in xmldoc.toprettyxml().encode("utf-8").splitlines() if x.strip()]), vfs=False)
|
||||
logger.debug("The path %s has been removed from sources.xml" % old)
|
||||
|
||||
for type in ['programs', 'video', 'music', 'picture', 'files']:
|
||||
nodo_type = xmldoc.createElement(type)
|
||||
element_default = xmldoc.createElement("default")
|
||||
element_default.setAttribute("pathversion", "1")
|
||||
nodo_type.appendChild(element_default)
|
||||
source_nodes.appendChild(nodo_type)
|
||||
xmldoc.appendChild(source_nodes)
|
||||
if new:
|
||||
# create new path
|
||||
list_path = [p.firstChild.data for p in paths_node]
|
||||
if new in list_path:
|
||||
logger.info("The path %s already exists in sources.xml" % new)
|
||||
return
|
||||
logger.info("The path %s does not exist in sources.xml" % new)
|
||||
|
||||
# collect nodes
|
||||
# nodes = xmldoc.getElementsByTagName("video")
|
||||
video_node = xmldoc.childNodes[0].getElementsByTagName("video")[0]
|
||||
paths_node = video_node.getElementsByTagName("path")
|
||||
# if the path does not exist we create one
|
||||
source_node = xmldoc.createElement("source")
|
||||
|
||||
if old:
|
||||
# delete old path
|
||||
for node in paths_node:
|
||||
if node.firstChild.data == old:
|
||||
parent = node.parentNode
|
||||
remove = parent.parentNode
|
||||
remove.removeChild(parent)
|
||||
# <name> Node
|
||||
name_node = xmldoc.createElement("name")
|
||||
sep = os.sep
|
||||
if new.startswith("special://") or scrapertools.find_single_match(new, r'(^\w+:\/\/)'):
|
||||
sep = "/"
|
||||
name = new
|
||||
if new.endswith(sep):
|
||||
name = new[:-1]
|
||||
name_node.appendChild(xmldoc.createTextNode(name.rsplit(sep)[-1]))
|
||||
source_node.appendChild(name_node)
|
||||
|
||||
# write changes
|
||||
if sys.version_info[0] >= 3: #PY3
|
||||
filetools.write(SOURCES_PATH, '\n'.join([x for x in xmldoc.toprettyxml().encode("utf-8").splitlines() if x.strip()]))
|
||||
else:
|
||||
filetools.write(SOURCES_PATH, b'\n'.join([x for x in xmldoc.toprettyxml().encode("utf-8").splitlines() if x.strip()]), vfs=False)
|
||||
logger.debug("The path %s has been removed from sources.xml" % old)
|
||||
# <path> Node
|
||||
path_node = xmldoc.createElement("path")
|
||||
path_node.setAttribute("pathversion", "1")
|
||||
path_node.appendChild(xmldoc.createTextNode(new))
|
||||
source_node.appendChild(path_node)
|
||||
|
||||
if new:
|
||||
# create new path
|
||||
list_path = [p.firstChild.data for p in paths_node]
|
||||
if new in list_path:
|
||||
logger.info("The path %s already exists in sources.xml" % new)
|
||||
return True
|
||||
logger.info("The path %s does not exist in sources.xml" % new)
|
||||
# <allowsharing> Node
|
||||
allowsharing_node = xmldoc.createElement("allowsharing")
|
||||
allowsharing_node.appendChild(xmldoc.createTextNode('true'))
|
||||
source_node.appendChild(allowsharing_node)
|
||||
|
||||
# if the path does not exist we create one
|
||||
source_node = xmldoc.createElement("source")
|
||||
# Añadimos <source> a <video>
|
||||
video_node.appendChild(source_node)
|
||||
|
||||
# <name> Node
|
||||
name_node = xmldoc.createElement("name")
|
||||
sep = os.sep
|
||||
if new.startswith("special://") or scrapertools.find_single_match(new, r'(^\w+:\/\/)'):
|
||||
sep = "/"
|
||||
name = new
|
||||
if new.endswith(sep):
|
||||
name = new[:-1]
|
||||
name_node.appendChild(xmldoc.createTextNode(name.rsplit(sep)[-1]))
|
||||
source_node.appendChild(name_node)
|
||||
|
||||
# <path> Node
|
||||
path_node = xmldoc.createElement("path")
|
||||
path_node.setAttribute("pathversion", "1")
|
||||
path_node.appendChild(xmldoc.createTextNode(new))
|
||||
source_node.appendChild(path_node)
|
||||
|
||||
# <allowsharing> Node
|
||||
allowsharing_node = xmldoc.createElement("allowsharing")
|
||||
allowsharing_node.appendChild(xmldoc.createTextNode('true'))
|
||||
source_node.appendChild(allowsharing_node)
|
||||
|
||||
# Añadimos <source> a <video>
|
||||
video_node.appendChild(source_node)
|
||||
|
||||
# write changes
|
||||
if sys.version_info[0] >= 3: #PY3
|
||||
filetools.write(SOURCES_PATH, '\n'.join([x for x in xmldoc.toprettyxml().encode("utf-8").splitlines() if x.strip()]))
|
||||
else:
|
||||
filetools.write(SOURCES_PATH, b'\n'.join([x for x in xmldoc.toprettyxml().encode("utf-8").splitlines() if x.strip()]), vfs=False)
|
||||
logger.debug("The path %s has been added to sources.xml" % new)
|
||||
return True
|
||||
except:
|
||||
logger.debug("An error occurred. The path %s has not been added/updated to sources.xml" % old)
|
||||
return False
|
||||
# write changes
|
||||
if sys.version_info[0] >= 3: #PY3
|
||||
filetools.write(SOURCES_PATH, '\n'.join([x for x in xmldoc.toprettyxml().splitlines() if x.strip()]))
|
||||
else:
|
||||
filetools.write(SOURCES_PATH, '\n'.join([x for x in xmldoc.toprettyxml().splitlines() if x.strip()]), vfs=False)
|
||||
logger.debug("The path %s has been added to sources.xml" % new)
|
||||
|
||||
|
||||
def ask_set_content(silent=False):
|
||||
@@ -1149,9 +1159,7 @@ def ask_set_content(silent=False):
|
||||
logger.debug("videolibrary_kodi %s" % config.get_setting("videolibrary_kodi"))
|
||||
|
||||
def do_config(custom=False):
|
||||
if set_content("movie", True, custom) and set_content("tvshow", True, custom) and \
|
||||
update_sources(config.get_setting("videolibrarypath")) and \
|
||||
update_sources(config.get_setting("downloadpath")):
|
||||
if set_content("movie", True, custom) and set_content("tvshow", True, custom):
|
||||
platformtools.dialog_ok(config.get_localized_string(80026), config.get_localized_string(70104))
|
||||
config.set_setting("videolibrary_kodi", True)
|
||||
update()
|
||||
@@ -1164,6 +1172,7 @@ def ask_set_content(silent=False):
|
||||
if not platformtools.dialog_yesno(config.get_localized_string(80026), config.get_localized_string(80016), "", "", config.get_localized_string(80017), config.get_localized_string(80018)):
|
||||
path = platformtools.dialog_browse(3, config.get_localized_string(80019), config.get_setting("videolibrarypath"))
|
||||
if path != "":
|
||||
update_sources(path, config.get_setting("videolibrarypath"))
|
||||
config.set_setting("videolibrarypath", path)
|
||||
folder = platformtools.dialog_input(config.get_setting("folder_movies"), config.get_localized_string(80020))
|
||||
if folder != "":
|
||||
|
||||
@@ -5924,7 +5924,7 @@ msgid "Logging"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70789"
|
||||
msgid "* Change by opening the settings from the main menu of KoD"
|
||||
msgid "* Change by opening the settings from the KoD main menu"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -6154,7 +6154,7 @@ msgid "Folder name for TV shows"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#80022"
|
||||
msgid "You can configure the Kodi video library later from the Settings menu inside KoD"
|
||||
msgid "You can configure the Kodi video library later from the settings menu inside KoD"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#80023"
|
||||
@@ -6162,7 +6162,7 @@ msgid "You will be asked to choose and configure the information providers for m
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#80024"
|
||||
msgid "An error has occurred during the configuration of the Kodi video library. Please check the log and try again from the Settings menu inside KoD"
|
||||
msgid "An error has occurred during the configuration of the Kodi video library. Please check the log and try again from the settings menu inside KoD"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#80025"
|
||||
@@ -6178,5 +6178,13 @@ msgid "You will be asked to configure The Movie Database for movies and The TVDB
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#80028"
|
||||
msgid "The path and/or the folders you selected are already used by the Kodi library. Please select other ones"
|
||||
msgid "The selected folders are already used by the Kodi library. Please change them"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#80029"
|
||||
msgid "The selected folders are already used by the Kodi library. Please change them from the settings menu inside KoD"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#80030"
|
||||
msgid "The default path and folders will be used. You will be asked to choose and configure the information providers for movies and TV shows"
|
||||
msgstr ""
|
||||
@@ -5924,7 +5924,7 @@ msgid "Logging"
|
||||
msgstr "Logging"
|
||||
|
||||
msgctxt "#70789"
|
||||
msgid "* Change by opening the settings from the main menu of KoD"
|
||||
msgid "* Change by opening the settings from the KoD main menu"
|
||||
msgstr "* Cambia aprendo le impostazioni dal menu principale di KoD"
|
||||
|
||||
|
||||
@@ -6178,5 +6178,13 @@ msgid "You will be asked to configure The Movie Database for movies and The TVDB
|
||||
msgstr "Ti verrà chiesto di configurare The Movie Database per i film e The TVDB per le serie TV"
|
||||
|
||||
msgctxt "#80028"
|
||||
msgid "The path and/or the folders you selected are already used by the Kodi library. Please select other ones"
|
||||
msgstr "Il percorso e/o le cartelle selezionate sono già utilizzati dalla libreria di Kodi. Si prega di selezionarne altri"
|
||||
msgid "The selected folders are already used by the Kodi library. Please change them"
|
||||
msgstr "Le cartelle selezionate sono già utilizzate dalla libreria di Kodi. Si prega di cambiarle"
|
||||
|
||||
msgctxt "#80029"
|
||||
msgid "The selected folders are already used by the Kodi library. Please change them"
|
||||
msgstr "Le cartelle selezionate sono già utilizzate dalla libreria di Kodi. Si prega di cambiarle dal menu impostazioni all'interno di KoD"
|
||||
|
||||
msgctxt "#80030"
|
||||
msgid "The default path and folders will be used. You will be asked to choose and configure the information providers for movies and TV shows"
|
||||
msgstr "Verranno utilizzati il percorso e le cartelle predefiniti. Ti verrà chiesto di scegliere e configurare i provider delle informazioni per film e serie TV"
|
||||
@@ -705,10 +705,16 @@ def move_videolibrary(current_path, new_path, current_movies_folder, new_movies_
|
||||
new_tvshows_path = os.path.join(new_path, new_tvshows_folder)
|
||||
|
||||
from platformcode import xbmc_videolibrary
|
||||
if xbmc_videolibrary.check_sources(new_movies_path+'\\', new_tvshows_path+'\\'):
|
||||
movies_path, tvshows_path = xbmc_videolibrary.check_sources(new_movies_path, new_tvshows_path)
|
||||
if movies_path or tvshows_path:
|
||||
if not movies_path:
|
||||
filetools.rmdir(new_movies_path)
|
||||
if not tvshows_path:
|
||||
filetools.rmdir(new_tvshows_path)
|
||||
config.set_setting("videolibrarypath", current_path)
|
||||
config.set_setting("folder_movies", current_movies_folder)
|
||||
config.set_setting("folder_tvshows", current_tvshows_folder)
|
||||
xbmc_videolibrary.update_sources(current_path, new_path)
|
||||
progress.update(100)
|
||||
xbmc.sleep(1000)
|
||||
progress.close()
|
||||
|
||||
Reference in New Issue
Block a user