- Aggiorna Episodi da menu Contestuale (libreria)
- Selezione automatica path delle serie locali se presenti in libreria
This commit is contained in:
@@ -6,6 +6,14 @@
|
|||||||
<import addon="metadata.tvdb.com"/>
|
<import addon="metadata.tvdb.com"/>
|
||||||
<import addon="script.module.web-pdb" />
|
<import addon="script.module.web-pdb" />
|
||||||
</requires>
|
</requires>
|
||||||
|
<extension point="kodi.context.item">
|
||||||
|
<menu id="kodi.core.main">
|
||||||
|
<item library="updatetvshow.py">
|
||||||
|
<label>70269</label>
|
||||||
|
<visible>String.IsEqual(ListItem.dbtype,tvshow)</visible>
|
||||||
|
</item>
|
||||||
|
</menu>
|
||||||
|
</extension>
|
||||||
<extension point="xbmc.python.pluginsource" library="default.py">
|
<extension point="xbmc.python.pluginsource" library="default.py">
|
||||||
<provides>video</provides>
|
<provides>video</provides>
|
||||||
</extension>
|
</extension>
|
||||||
|
|||||||
@@ -578,10 +578,11 @@ def save_episodes(path, episodelist, serie, silent=False, overwrite=True):
|
|||||||
update = False
|
update = False
|
||||||
nfo_path = filetools.join(path, "tvshow.nfo")
|
nfo_path = filetools.join(path, "tvshow.nfo")
|
||||||
head_nfo, item_nfo = read_nfo(nfo_path)
|
head_nfo, item_nfo = read_nfo(nfo_path)
|
||||||
|
|
||||||
if item_nfo.update_last:
|
if item_nfo.update_last:
|
||||||
local_episodes_path = item_nfo.local_episodes_path
|
local_episodes_path = item_nfo.local_episodes_path
|
||||||
elif config.get_setting("local_episodes", "videolibrary"):
|
elif config.get_setting("local_episodes", "videolibrary"):
|
||||||
done, local_episodes_path = config_local_episodes_path(path, serie.show)
|
done, local_episodes_path = config_local_episodes_path(path, serie)
|
||||||
if done < 0:
|
if done < 0:
|
||||||
logger.info("An issue has occurred while configuring local episodes, going out without creating strm")
|
logger.info("An issue has occurred while configuring local episodes, going out without creating strm")
|
||||||
return 0, 0, done
|
return 0, 0, done
|
||||||
@@ -884,10 +885,12 @@ def save_episodes(path, episodelist, serie, silent=False, overwrite=True):
|
|||||||
return insertados, sobreescritos, fallidos
|
return insertados, sobreescritos, fallidos
|
||||||
|
|
||||||
|
|
||||||
def config_local_episodes_path(path, title, silent=False):
|
def config_local_episodes_path(path, item, silent=False):
|
||||||
logger.info()
|
logger.info(item)
|
||||||
|
from platformcode.xbmc_videolibrary import search_local_path
|
||||||
local_episodes_path = ''
|
local_episodes_path=search_local_path(item)
|
||||||
|
if not local_episodes_path:
|
||||||
|
title = item.contentSerieName if item.contentSerieName else item.show
|
||||||
if not silent:
|
if not silent:
|
||||||
silent = platformtools.dialog_yesno(config.get_localized_string(30131), config.get_localized_string(80044) % title)
|
silent = platformtools.dialog_yesno(config.get_localized_string(30131), config.get_localized_string(80044) % title)
|
||||||
if silent:
|
if silent:
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ def dialog_notification(heading, message, icon=3, time=5000, sound=True):
|
|||||||
dialog_ok(heading, message)
|
dialog_ok(heading, message)
|
||||||
|
|
||||||
|
|
||||||
def dialog_yesno(heading, line1, line2="", line3="", nolabel="No", yeslabel="Si", autoclose=0, customlabel=None):
|
def dialog_yesno(heading, line1, line2="", line3="", nolabel=config.get_localized_string(70170), yeslabel=config.get_localized_string(30022), autoclose=0, customlabel=None):
|
||||||
# customlabel only on kodi 19
|
# customlabel only on kodi 19
|
||||||
dialog = xbmcgui.Dialog()
|
dialog = xbmcgui.Dialog()
|
||||||
if config.get_platform() == 'kodi-matrix':
|
if config.get_platform() == 'kodi-matrix':
|
||||||
|
|||||||
@@ -525,6 +525,21 @@ def search_library_path():
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def search_local_path(item):
|
||||||
|
ids = [item.infoLabels['imdb_id'], item.infoLabels['tmdb_id'], item.infoLabels['tvdb_id']]
|
||||||
|
for Id in ids:
|
||||||
|
nun_ids, ids = execute_sql_kodi('SELECT idShow FROM tvshow_view WHERE uniqueid_value LIKE "%s"' % Id)
|
||||||
|
if nun_ids >= 1:
|
||||||
|
nun_records, records = execute_sql_kodi('SELECT idPath FROM tvshowlinkpath WHERE idShow LIKE "%s"' % ids[0][0])
|
||||||
|
if nun_records >= 1:
|
||||||
|
for record in records:
|
||||||
|
num_path, path_records = execute_sql_kodi('SELECT strPath FROM path WHERE idPath LIKE "%s"' % record[0])
|
||||||
|
for path in path_records:
|
||||||
|
if config.get_setting('videolibrarypath') not in path[0]:
|
||||||
|
return path[0]
|
||||||
|
return ''
|
||||||
|
|
||||||
|
|
||||||
def set_content(content_type, silent=False, custom=False):
|
def set_content(content_type, silent=False, custom=False):
|
||||||
"""
|
"""
|
||||||
Procedure to auto-configure the kodi video library with the default values
|
Procedure to auto-configure the kodi video library with the default values
|
||||||
|
|||||||
@@ -6029,15 +6029,15 @@ msgstr ""
|
|||||||
|
|
||||||
msgctxt "#70807"
|
msgctxt "#70807"
|
||||||
msgid "Elementum does not support network folder downloads, do you want to change the download location?"
|
msgid "Elementum does not support network folder downloads, do you want to change the download location?"
|
||||||
msgstr "Elementum non supporta i download su cartella di rete, vuoi cambiare il percorso di download?"
|
msgstr ""
|
||||||
|
|
||||||
msgctxt "#70808"
|
msgctxt "#70808"
|
||||||
msgid "In order to view this content you need to install [B]Widevine CDM[/B]. Do you want to install it?"
|
msgid "In order to view this content you need to install [B]Widevine CDM[/B]. Do you want to install it?"
|
||||||
msgstr "Per poter visionare questo contenuto devi installare [B]Widevine CDM[/B]. Vuoi installarlo?"
|
msgstr ""
|
||||||
|
|
||||||
msgctxt "#70809"
|
msgctxt "#70809"
|
||||||
msgid "An update of [B]Widevine CDM[/B] is available. Do you want to install it?"
|
msgid "An update of [B]Widevine CDM[/B] is available. Do you want to install it?"
|
||||||
msgstr "È disponibile un aggiornamento di [B]Widevine CDM[/B]. Vuoi installarlo?"
|
msgstr ""
|
||||||
|
|
||||||
msgctxt "#70810"
|
msgctxt "#70810"
|
||||||
msgid "Update available"
|
msgid "Update available"
|
||||||
@@ -6045,27 +6045,31 @@ msgstr "Aggiornamento disponibile"
|
|||||||
|
|
||||||
msgctxt "#70811"
|
msgctxt "#70811"
|
||||||
msgid "Extracting Widevine CDM"
|
msgid "Extracting Widevine CDM"
|
||||||
msgstr "Estrazione di Widevine CDM"
|
msgstr ""
|
||||||
|
|
||||||
msgctxt "#70812"
|
msgctxt "#70812"
|
||||||
msgid "Preparing downloaded image..."
|
msgid "Preparing downloaded image..."
|
||||||
msgstr "Preparazione dell'immagine scaricata..."
|
msgstr ""
|
||||||
|
|
||||||
msgctxt "#70813"
|
msgctxt "#70813"
|
||||||
msgid "Identifying wanted partition..."
|
msgid "Identifying wanted partition..."
|
||||||
msgstr "Identificazione della partizione desiderata..."
|
msgstr ""
|
||||||
|
|
||||||
msgctxt "#70814"
|
msgctxt "#70814"
|
||||||
msgid "Scanning the filesystem for the Widevine CDM..."
|
msgid "Scanning the filesystem for the Widevine CDM..."
|
||||||
msgstr "Scansione del filesystem per Widevine CDM..."
|
msgstr "."
|
||||||
|
|
||||||
msgctxt "#70815"
|
msgctxt "#70815"
|
||||||
msgid "Widevine CDM found, analyzing..."
|
msgid "Widevine CDM found, analyzing..."
|
||||||
msgstr "Widevine CDM trovato, analisi..."
|
msgstr "W"
|
||||||
|
|
||||||
msgctxt "#70816"
|
msgctxt "#70816"
|
||||||
msgid "Extracting Widevine CDM from image..."
|
msgid "Extracting Widevine CDM from image..."
|
||||||
msgstr "Estrazione di Widevine CDM dall'immagine..."
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#70817"
|
||||||
|
msgid "La Serie "%s" non è gestita da KoD, Vuoi cercarla?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
# DNS start [ settings and declaration ]
|
# DNS start [ settings and declaration ]
|
||||||
msgctxt "#707401"
|
msgctxt "#707401"
|
||||||
|
|||||||
@@ -6067,6 +6067,10 @@ msgctxt "#70816"
|
|||||||
msgid "Extracting Widevine CDM from image..."
|
msgid "Extracting Widevine CDM from image..."
|
||||||
msgstr "Estrazione di Widevine CDM dall'immagine..."
|
msgstr "Estrazione di Widevine CDM dall'immagine..."
|
||||||
|
|
||||||
|
msgctxt "#70817"
|
||||||
|
msgid "La Serie "%s" non è gestita da KoD, Vuoi cercarla?"
|
||||||
|
msgstr "La Serie "%s" non è gestita da KoD, Vuoi cercarla?"
|
||||||
|
|
||||||
# DNS start [ settings and declaration ]
|
# DNS start [ settings and declaration ]
|
||||||
msgctxt "#707401"
|
msgctxt "#707401"
|
||||||
msgid "Enable DNS check alert"
|
msgid "Enable DNS check alert"
|
||||||
|
|||||||
+5
-3
@@ -21,10 +21,12 @@ from servers import torrent
|
|||||||
def update(path, p_dialog, i, t, serie, overwrite):
|
def update(path, p_dialog, i, t, serie, overwrite):
|
||||||
logger.info("Updating " + path)
|
logger.info("Updating " + path)
|
||||||
insertados_total = 0
|
insertados_total = 0
|
||||||
|
nfo_file = xbmc.translatePath(filetools.join(path, 'tvshow.nfo'))
|
||||||
|
|
||||||
head_nfo, it = videolibrarytools.read_nfo(path + '/tvshow.nfo')
|
head_nfo, it = videolibrarytools.read_nfo(nfo_file)
|
||||||
# videolibrarytools.check_renumber_options(it)
|
|
||||||
videolibrarytools.update_renumber_options(it, head_nfo, path)
|
videolibrarytools.update_renumber_options(it, head_nfo, path)
|
||||||
|
|
||||||
|
if not serie.library_url: serie = it
|
||||||
category = serie.category
|
category = serie.category
|
||||||
|
|
||||||
# logger.debug("%s: %s" %(serie.contentSerieName,str(list_canales) ))
|
# logger.debug("%s: %s" %(serie.contentSerieName,str(list_canales) ))
|
||||||
@@ -34,7 +36,7 @@ def update(path, p_dialog, i, t, serie, overwrite):
|
|||||||
|
|
||||||
###### Redirección al canal NewPct1.py si es un clone, o a otro canal y url si ha intervención judicial
|
###### Redirección al canal NewPct1.py si es un clone, o a otro canal y url si ha intervención judicial
|
||||||
try:
|
try:
|
||||||
head_nfo, it = videolibrarytools.read_nfo(path + '/tvshow.nfo') #Refresca el .nfo para recoger actualizaciones
|
head_nfo, it = videolibrarytools.read_nfo(nfo_file) #Refresca el .nfo para recoger actualizaciones
|
||||||
if it.emergency_urls:
|
if it.emergency_urls:
|
||||||
serie.emergency_urls = it.emergency_urls
|
serie.emergency_urls = it.emergency_urls
|
||||||
serie.category = category
|
serie.category = category
|
||||||
|
|||||||
@@ -727,7 +727,7 @@ def update_tvshow(item):
|
|||||||
def add_local_episodes(item):
|
def add_local_episodes(item):
|
||||||
logger.info()
|
logger.info()
|
||||||
|
|
||||||
done, local_episodes_path = videolibrarytools.config_local_episodes_path(item.path, item.contentSerieName, silent=True)
|
done, local_episodes_path = videolibrarytools.config_local_episodes_path(item.path, item, silent=True)
|
||||||
if done < 0:
|
if done < 0:
|
||||||
logger.info("An issue has occurred while configuring local episodes")
|
logger.info("An issue has occurred while configuring local episodes")
|
||||||
elif local_episodes_path:
|
elif local_episodes_path:
|
||||||
|
|||||||
+111
@@ -0,0 +1,111 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import xbmc, sys, base64, json, xbmcgui, os, xbmcvfs, traceback
|
||||||
|
from platformcode import config, logger
|
||||||
|
from lib.sambatools import libsmb as samba
|
||||||
|
from core import scrapertools
|
||||||
|
|
||||||
|
|
||||||
|
def exists(path, silent=False, vfs=True):
|
||||||
|
path = xbmc.translatePath(path)
|
||||||
|
try:
|
||||||
|
if vfs:
|
||||||
|
result = bool(xbmcvfs.exists(path))
|
||||||
|
if not result and not path.endswith('/') and not path.endswith('\\'):
|
||||||
|
result = bool(xbmcvfs.exists(join(path, ' ').rstrip()))
|
||||||
|
return result
|
||||||
|
elif path.lower().startswith("smb://"):
|
||||||
|
return samba.exists(path)
|
||||||
|
else:
|
||||||
|
return os.path.exists(path)
|
||||||
|
except:
|
||||||
|
logger.error("ERROR when checking the path: %s" % path)
|
||||||
|
if not silent:
|
||||||
|
logger.error(traceback.format_exc())
|
||||||
|
return False
|
||||||
|
|
||||||
|
def join(*paths):
|
||||||
|
list_path = []
|
||||||
|
if paths[0].startswith("/"):
|
||||||
|
list_path.append("")
|
||||||
|
for path in paths:
|
||||||
|
if path:
|
||||||
|
list_path += path.replace("\\", "/").strip("/").split("/")
|
||||||
|
|
||||||
|
if scrapertools.find_single_match(paths[0], r'(^\w+:\/\/)'):
|
||||||
|
return str("/".join(list_path))
|
||||||
|
else:
|
||||||
|
return str(os.sep.join(list_path))
|
||||||
|
|
||||||
|
|
||||||
|
def search_paths(Id):
|
||||||
|
records = execute_sql('SELECT idPath FROM tvshowlinkpath WHERE idShow LIKE "%s"' % Id)
|
||||||
|
if len(records) >= 1:
|
||||||
|
for record in records:
|
||||||
|
path_records = execute_sql('SELECT strPath FROM path WHERE idPath LIKE "%s"' % record[0])
|
||||||
|
for path in path_records:
|
||||||
|
if config.get_setting('videolibrarypath') in path[0] and exists(join(path[0], 'tvshow.nfo')):
|
||||||
|
return path[0]
|
||||||
|
return ''
|
||||||
|
|
||||||
|
|
||||||
|
def execute_sql(sql):
|
||||||
|
logger.info()
|
||||||
|
file_db = ""
|
||||||
|
records = None
|
||||||
|
|
||||||
|
# We look for the archive of the video database according to the version of kodi
|
||||||
|
video_db = config.get_platform(True)['video_db']
|
||||||
|
if video_db:
|
||||||
|
file_db = os.path.join(xbmc.translatePath("special://userdata/Database"), video_db)
|
||||||
|
|
||||||
|
# alternative method to locate the database
|
||||||
|
if not file_db or not os.path.exists(file_db):
|
||||||
|
file_db = ""
|
||||||
|
for f in os.path.listdir(xbmc.translatePath("special://userdata/Database")):
|
||||||
|
path_f = os.path.join(xbmc.translatePath("special://userdata/Database"), f)
|
||||||
|
|
||||||
|
if os.path.pathoos.pathols.isfile(path_f) and f.lower().startswith('myvideos') and f.lower().endswith('.db'):
|
||||||
|
file_db = path_f
|
||||||
|
break
|
||||||
|
|
||||||
|
if file_db:
|
||||||
|
logger.info("DB file: %s" % file_db)
|
||||||
|
conn = None
|
||||||
|
try:
|
||||||
|
import sqlite3
|
||||||
|
conn = sqlite3.connect(file_db)
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
logger.info("Running sql: %s" % sql)
|
||||||
|
cursor.execute(sql)
|
||||||
|
conn.commit()
|
||||||
|
|
||||||
|
records = cursor.fetchall()
|
||||||
|
if sql.lower().startswith("select"):
|
||||||
|
if len(records) == 1 and records[0][0] is None:
|
||||||
|
records = []
|
||||||
|
|
||||||
|
conn.close()
|
||||||
|
logger.info("Query executed. Records: %s" % nun_records)
|
||||||
|
|
||||||
|
except:
|
||||||
|
logger.error("Error executing sql query")
|
||||||
|
if conn:
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
else:
|
||||||
|
logger.debug("Database not found")
|
||||||
|
|
||||||
|
return records
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
path = search_paths(sys.listitem.getVideoInfoTag().getDbId())
|
||||||
|
if path:
|
||||||
|
item = {"action": "update_tvshow", "channel": "videolibrary", 'path':path}
|
||||||
|
xbmc.executebuiltin("RunPlugin(plugin://plugin.video.kod/?" + base64.b64encode(json.dumps(item).encode()) + ")")
|
||||||
|
else:
|
||||||
|
dialog = xbmcgui.Dialog()
|
||||||
|
title = sys.listitem.getVideoInfoTag().getTitle()
|
||||||
|
if dialog.yesno(title, config.get_localized_string(70817) % title, nolabel=config.get_localized_string(70170), yeslabel=config.get_localized_string(30022)):
|
||||||
|
item = {"action": "new_search", "channel": "search", "mode":"tvshow", "search_text": sys.listitem.getVideoInfoTag().getTitle()}
|
||||||
|
xbmc.executebuiltin("ActivateWindow(10025,plugin://plugin.video.kod/?" + base64.b64encode(json.dumps(item).encode()) + ")")
|
||||||
Reference in New Issue
Block a user