From fc0822f93a2b8896bf7f572e8a65f0a2363821b6 Mon Sep 17 00:00:00 2001 From: Alhaziel01 Date: Thu, 1 Jul 2021 12:59:55 +0200 Subject: [PATCH] Fix Sincronizzazione Libreria --- core/tmdb.py | 2 +- platformcode/dbconverter.py | 128 +++++++++++++++++++++++++----------- 2 files changed, 89 insertions(+), 41 deletions(-) diff --git a/core/tmdb.py b/core/tmdb.py index e1ea6962..0dacde84 100644 --- a/core/tmdb.py +++ b/core/tmdb.py @@ -1491,7 +1491,7 @@ class Tmdb(object): imdb_id = externalIds.get('imdb_id') tvdb_id = externalIds.get('tvdb_id') posters = [] - for image in episode['images']['stills']: + for image in episode.get('images',{}).get('stills',{}): posters.append('https://image.tmdb.org/t/p/original' + image['file_path']) ret_dic["episode_title"] = episodeTitle diff --git a/platformcode/dbconverter.py b/platformcode/dbconverter.py index 4e965987..e66a45b9 100644 --- a/platformcode/dbconverter.py +++ b/platformcode/dbconverter.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -import xbmc, os, math +import xbmc from core import filetools, support from core.videolibrarydb import videolibrarydb from platformcode import config, logger, platformtools @@ -26,7 +26,7 @@ def add_video(item): def get_path(item): - logger.debug(item) + logger.debug() p = item.strm_path if item.strm_path else item.nfo_path path = filetools.join(config.get_videolibrary_config_path(), config.get_setting("folder_{}s".format(item.contentType)), p.split('\\')[0].split('/')[0]) parent = filetools.join(config.get_videolibrary_config_path(), config.get_setting("folder_{}s".format(item.contentType))) @@ -37,11 +37,13 @@ def get_path(item): else: return process_path(path), process_path(parent) + def process_path(path): if '\\' in path: path += '\\' else: path += '/' return path + def get_id(column, table): sql = 'SELECT MAX({}) FROM {}'.format(column, table) nun_records, records = execute_sql_kodi(sql, conn=conn) @@ -49,9 +51,11 @@ def get_id(column, table): else: _id = 1 return _id + def get_images(item): pstring = '{}' + sstring = '{}' fstring = '{}' posters = '' @@ -64,19 +68,33 @@ def get_images(item): videolanscapes = item.infoLabels.get('lanscapes',[]) videobanners = item.infoLabels.get('banners',[]) videodiscs = item.infoLabels.get('discs',[]) + if item.contentType == 'season': + for p in videoposters: + if p: posters += sstring.format('poster', item.contentSeason, p) + for p in videoclearlogos: + if p: posters += sstring.format('clearlogo', item.contentSeason, p) + for p in videocleararts: + if p: posters += sstring.format('clearart', item.contentSeason, p) + for p in videolanscapes: + if p: posters += sstring.format('lanscape', item.contentSeason, p) + for p in videobanners: + if p: posters += sstring.format('banner', item.contentSeason, p) + for p in videodiscs: + if p: posters += sstring.format('disc', item.contentSeason, p) + else: + for p in videoposters: + if p: posters += pstring.format('poster', p.replace('original', 'w500'), p) + for p in videoclearlogos: + if p: posters += pstring.format('clearlogo', '', p) + for p in videocleararts: + if p: posters += pstring.format('clearart', '', p) + for p in videolanscapes: + if p: posters += pstring.format('lanscape', '', p) + for p in videobanners: + if p: posters += pstring.format('banner', '', p) + for p in videodiscs: + if p: posters += pstring.format('disc', '', p) - for p in videoposters: - if p: posters += pstring.format('poster', p.replace('original', 'w500'), p) - for p in videoclearlogos: - if p: posters += pstring.format('clearlogo', '', p) - for p in videocleararts: - if p: posters += pstring.format('clearart', '', p) - for p in videolanscapes: - if p: posters += pstring.format('lanscape', '', p) - for p in videobanners: - if p: posters += pstring.format('banner', '', p) - for p in videodiscs: - if p: posters += pstring.format('disc', '', p) if item.infoLabels['setid']: collection = videolibrarydb['collection'].get(item.infoLabels['setid'], {}) @@ -105,15 +123,28 @@ def get_images(item): - - fanarts += '' - for f in videofanarts: - if f: fanarts += fstring.format(f.replace('original', 'w780'), f) - fanarts += '' + if item.contentType != 'season': + fanarts += '' + for f in videofanarts: + if f: fanarts += fstring.format(f.replace('original', 'w780'), f) + fanarts += '' return posters, fanarts +def execute_sql(sql_actions): + cursor = conn.cursor() + for sql, params in sql_actions: + try: + if type(params) == list: + cursor.executemany(sql, params) + else: + cursor.execute(sql, params) + except: + logger.error('Unable to run SQL\nSQL:', sql,'\nPARAMS:', params) + conn.commit() + + class addMovie(object): def __init__(self, *args, **kwargs): self.art = [] @@ -139,13 +170,7 @@ class addMovie(object): self.set_movie() self.set_art() - cursor = conn.cursor() - for sql, params in self.sql_actions: - if type(params) == list: - cursor.executemany(sql, params) - else: - cursor.execute(sql, params) - conn.commit() + execute_sql(self.sql_actions) # need if no movie in kodi library if self.VideoId == 1: @@ -374,8 +399,13 @@ class addMovie(object): sql = 'INSERT OR IGNORE INTO art (art_id, media_id, media_type, type, url) VALUES (?, ?, ?, ?, ?)' self.sql_actions.append([sql, params]) + class addTvShow(object): def __init__(self, *args, **kwargs): + self.art = [] + self.sql_actions = [] + self.posters = '' + self.fanarts = '' self.item = kwargs.get('item', None) self.info = self.item.infoLabels self.seasons = videolibrarydb['season'][self.item.videolibrary_id] @@ -385,8 +415,6 @@ class addTvShow(object): self.idSeasons = self.get_idSeasons() self.idEpisodes = self.get_idEpisodes() self.strPath, self.parentPath = get_path(self.item) - self.art = [] - self.sql_actions = [] logger.debug('Add {}: {} to Kodi Library'.format(self.item.contentType, self.item.title)) self.set_path() @@ -403,13 +431,7 @@ class addTvShow(object): self.set_episodes() self.set_art() - cursor = conn.cursor() - for sql, params in self.sql_actions: - if type(params) == list: - cursor.executemany(sql, params) - else: - cursor.execute(sql, params) - conn.commit() + execute_sql(self.sql_actions) # need if no movie in kodi library if self.idShow == 1: @@ -441,14 +463,33 @@ class addTvShow(object): for season in self.seasons.keys(): if season.contentSeason not in seasons: r[season] = maxId - + self.get_season_images(season, maxId) maxId += 1 else: for season in self.seasons: r[season] = maxId + self.get_season_images(season, maxId) maxId += 1 return r + def get_season_images(self, season, _id): + item = self.seasons[season] + posters, fanarts = get_images(item) + self.posters += posters + + if item.thumbnail: + self.art.append({'media_id':_id, 'media_type': 'season', 'type':'poster', 'url':item.thumbnail}) + if item.fanart: + self.art.append({'media_id':_id, 'media_type': 'season', 'type':'fanart', 'url':item.fanart}) + if item.landscape: + self.art.append({'media_id':_id, 'media_type': 'season', 'type':'landscape', 'url':item.landscape}) + if item.banner: + self.art.append({'media_id':_id, 'media_type': 'season', 'type':'banner', 'url':item.banner}) + if item.clearlogo: + self.art.append({'media_id':_id, 'media_type': 'season', 'type':'clearlogo', 'url':item.clearlogo}) + if item.clearart: + self.art.append({'media_id':_id, 'media_type': 'season', 'type':'clearart', 'url':item.clearart}) + def get_idEpisodes(self): sql = 'select idEpisode, c12, c13 from episode_view where idShow = {}'.format(self.idShow) n, records = execute_sql_kodi(sql) @@ -485,10 +526,14 @@ class addTvShow(object): else: self.idPath = get_id('idPath', 'path') - sql = 'INSERT OR IGNORE INTO path (idPath, strPath, dateAdded, idParentPath, noUpdate) VALUES ( ?, ?, ?, ?, ?)' + sql = 'INSERT OR IGNORE INTO path (idPath, strPath, dateAdded, idParentPath, noUpdate) VALUES (?, ?, ?, ?, ?)' params = (self.idPath, self.strPath, date, self.idParentPath, 1) self.sql_actions.append([sql, params]) + sql = 'INSERT OR IGNORE INTO tvshowlinkpath (idShow, idPath) VALUES (?, ?)' + params = (self.idShow, self.idPath) + self.sql_actions.append([sql, params]) + def set_files(self): files = {} sql = 'select idFile, strFilename from files where idPath={}'.format(self.idPath) @@ -695,9 +740,12 @@ class addTvShow(object): sql = 'INSERT OR IGNORE INTO {}_link ({}_id, media_id, media_type) VALUES (?, ?, ?)'.format(info_name, info_name) params = [(execute_sql_kodi('select {}_id from {} where name = "{}" limit 1'.format(info_name, info_name, info))[1][0][0], self.idShow, self.item.contentType) for info in info_list] + self.sql_actions.append([sql, params]) def set_tvshow(self): posters, fanarts = get_images(self.item) + self.posters += posters + self.fanarts += fanarts sql = 'INSERT OR IGNORE INTO tvshow (idShow, c00, c01, c02, c04, c05, c06, c08, c09, c11, c12, c13, c14, c16)' sql += 'VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' params = (self.idShow, # idShow @@ -706,10 +754,10 @@ class addTvShow(object): self.info.get('status'), # c02 self.rating_id, # c04 self.info.get('premiered'), # c05 - posters, # c06 + self.posters, # c06 self.info.get('genre','').replace(',', ' /') if self.info.get('genre') else None, # c08 self.info.get('originaltitle'), # c09 - fanarts, # c11 + self.fanarts, # c11 self.uniqueID, #c12 self.info.get('mpaa'), # c13 self.info.get('studio'), # c14 @@ -770,7 +818,7 @@ class addTvShow(object): _id = get_id('art_id', 'art') art_urls = [[u[0], u[1], u[2]] for u in execute_sql_kodi('select media_id, media_type, type from art', conn=conn)[1]] for art in self.art: - if [art ['media_id'], art['media_type'], art['type']] not in art_urls: + if [art['media_id'], art['media_type'], art['type']] not in art_urls: params.append((_id, art['media_id'], art['media_type'], art['type'], art['url'])) _id += 1 if params: