Modifiche ad Alpha

This commit is contained in:
Alhaziel01
2021-08-24 17:38:44 +02:00
parent 2764c48805
commit dfeec60fe3
27 changed files with 1945 additions and 67 deletions

View File

@@ -28,7 +28,9 @@ MANUALMODE = 'manual'
GROUP = 'info'
# helper Functions
def check(item):
def check(item, itemlist=None):
if itemlist and itemlist[0].contentSeason:
return True
logger.debug()
dict_series = load(item)
title = item.fulltitle.rstrip()

View File

@@ -0,0 +1,165 @@
# -*- coding: utf-8 -*-
import xbmc, sys, xbmcgui, os, xbmcvfs, traceback
from platformcode import config, logger
librerias = xbmc.translatePath(os.path.join(config.get_runtime_path(), 'lib'))
sys.path.insert(0, librerias)
from core.item import Item
from lib.sambatools import libsmb as samba
from core import scrapertools, support
path = ''
mediatype = ''
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.debug()
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.debug("DB file: %s" % file_db)
conn = None
try:
import sqlite3
conn = sqlite3.connect(file_db)
cursor = conn.cursor()
logger.debug("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.debug("Query executed. Records: %s" % len(records))
except:
logger.error("Error executing sql query")
if conn:
conn.close()
else:
logger.debug("Database not found")
return records
def get_id():
global mediatype
mediatype = xbmc.getInfoLabel('ListItem.DBTYPE')
if mediatype == 'tvshow':
dbid = xbmc.getInfoLabel('ListItem.DBID')
elif mediatype in ('season', 'episode'):
dbid = xbmc.getInfoLabel('ListItem.TvShowDBID')
else:
dbid = ''
return dbid
def check_condition():
# support.dbg()
global path
path = search_paths(get_id())
return path
def get_menu_items():
logger.debug('get menu item')
if check_condition():
items = [(config.get_localized_string(70269), update)]
from core.videolibrarytools import read_nfo
nfo = path + 'tvshow.nfo'
item = read_nfo(nfo)[1]
if item:
item.nfo = nfo
item_url = item.tourl()
# Context menu: Automatically search for new episodes or not
if item.active and int(item.active) > 0:
update_text = config.get_localized_string(60022)
value = 0
else:
update_text = config.get_localized_string(60023)
value = 1
items.append((update_text, lambda: xbmc.executebuiltin("RunPlugin(plugin://plugin.video.kod/?{}&title={}&action=mark_tvshow_as_updatable&channel=videolibrary&active={})".format(item_url, update_text, str(value)))))
if item.local_episodes_path == "":
items.append((config.get_localized_string(80048), lambda: xbmc.executebuiltin("RunPlugin(plugin://plugin.video.kod/?{}&action=add_local_episodes&channel=videolibrary&path={})".format(item_url, path))))
else:
items.append((config.get_localized_string(80049), lambda: xbmc.executebuiltin("RunPlugin(plugin://plugin.video.kod/?{}&action=remove_local_episodes&channel=videolibrary&path={})".format(item_url, path))))
return items
else:
return []
def update():
dbid = get_id()
path = search_paths(dbid)
if path:
item = Item(action="update_tvshow", channel="videolibrary", path=path)
# Why? I think it is not necessary, just commented
# item.tourl()
xbmc.executebuiltin("RunPlugin(plugin://plugin.video.kod/?" + item.tourl() + ")")

View File

@@ -453,7 +453,9 @@ class addTvShow(object):
self.info = self.item.infoLabels
self.seasons = videolibrarydb['season'][self.item.videolibrary_id]
self.episodes = videolibrarydb['episode'][self.item.videolibrary_id]
self.imdb_id, self.tmdb_id, self.tvdb_id = self.info['code']
self.imdb_id = self.info.get('imdb_id', '')
self.tmdb_id = self.info.get('tmdb_id', '')
self.tvdb_id = self.info.get('tvdb_id', '')
self.exist, self.idShow = self.get_idShow()
self.idSeasons = self.get_idSeasons()
self.idEpisodes = self.get_idEpisodes()

View File

@@ -351,8 +351,6 @@ def render_items(itemlist, parent_item):
if item.category == "":
item.category = parent_item.category
if not item.title:
item.title = item.contentTitle
# If there is no action or it is findvideos / play, folder = False because no listing will be returned
if item.action in ['play', '']:
item.folder = False
@@ -366,7 +364,9 @@ def render_items(itemlist, parent_item):
title = item.title
episode = ''
if (parent_item.channel not in ['videolibrary'] or item.server) and title[:1] not in ['[', '']:
if title[:1] not in ['[', '']:
if item.contentSerieName: title = item.contentSerieName
elif item.contentTitle: title = item.contentTitle
if type(item.contentSeason) == int and type(item.contentEpisodeNumber) == int and not item.onlyep:
episode = '{}x{:02d}'.format(item.contentSeason, item.contentEpisodeNumber)
elif type(item.contentEpisodeNumber) == int:
@@ -416,15 +416,15 @@ def render_items(itemlist, parent_item):
context_commands = def_context_commands
listitem.addContextMenuItems(context_commands)
return item, item_url, listitem
# from core.support import dbg;dbg()
r_list = [set_item(i, item, parent_item) for i, item in enumerate(itemlist)]
# r_list = []
# r_list = [set_item(i, item, parent_item) for i, item in enumerate(itemlist)]
r_list = []
with futures.ThreadPoolExecutor() as executor:
searchList = [executor.submit(set_item, i, item, parent_item) for i, item in enumerate(itemlist)]
for res in futures.as_completed(searchList):
r_list.append(res.result())
r_list.sort(key=lambda it: it[0].itemlistPosition)
# with futures.ThreadPoolExecutor() as executor:
# searchList = [executor.submit(set_item, i, item, parent_item) for i, item in enumerate(itemlist)]
# for res in futures.as_completed(searchList):
# r_list.append(res.result())
# r_list.sort(key=lambda it: it[0].itemlistPosition)
for item, item_url, listitem in r_list:
dirItems.append(('%s?%s' % (sys.argv[0], item_url), listitem, item.folder, len(r_list)))
@@ -685,12 +685,12 @@ def set_context_commands(item, item_url, parent_item, **kwargs):
if item.channel != "videolibrary" and item.videolibrary != False:
# Add Series to the video library
if item.action in ["episodios", "get_episodios", "get_seasons"] and item.contentSerieName:
context_commands.append((config.get_localized_string(60352), "RunPlugin(%s?%s&%s)" % (sys.argv[0], item_url, 'action=add_serie_to_library&from_action=' + item.action)))
context_commands.append((config.get_localized_string(60352), "RunPlugin(%s?%s&%s)" % (sys.argv[0], item_url, 'action=add_serie_to_library&from_action={}&contentChannel=videolibrary'.format(item.action))))
# Add Movie to Video Library
elif item.action in ["detail", "findvideos"] and item.contentType == 'movie' and item.contentTitle:
context_commands.append((config.get_localized_string(60353), "RunPlugin(%s?%s&%s)" % (sys.argv[0], item_url, 'action=add_movie_to_library&from_action=' + item.action)))
context_commands.append((config.get_localized_string(60353), "RunPlugin(%s?%s&%s)" % (sys.argv[0], item_url, 'action=add_movie_to_library&from_action={}&contentChannel=videolibrary'.format(item.action))))
elif item.action in ['check'] and item.contentTitle or item.contentSerieName:
context_commands.append((config.get_localized_string(30161), "RunPlugin(%s?%s&%s)" % (sys.argv[0], item_url, 'action=add_to_library&from_action=' + item.action)))
context_commands.append((config.get_localized_string(30161), "RunPlugin(%s?%s&%s)" % (sys.argv[0], item_url, 'action=add_to_library&from_action={}&contentChannel=videolibrary'.format(item.action))))
if not item.local and item.channel not in ["downloads", "filmontv", "search"] and item.server != 'torrent' and parent_item.action != 'mainlist' and config.get_setting('downloadenabled'):
# Download movie
@@ -1794,10 +1794,10 @@ def get_played_time(item):
result = None
try:
if item.contentType == 'movie':
result = db['viewed'].get(ID)
elif S and E:
if S and E:
result = db['viewed'].get(ID, {}).get(str(S)+'x'+str(E))
else:
result = db['viewed'].get(ID)
if result:
played_time = result