Alcune migliorie alla videoteca

This commit is contained in:
Alhaziel01
2021-05-20 20:23:21 +02:00
parent b773164dad
commit b0d3dd2fa7
10 changed files with 435 additions and 544 deletions
+1 -1
View File
@@ -1205,7 +1205,7 @@ def server(item, data='', itemlist=[], headers='', AutoPlay=True, CheckLinks=Tru
# logger.debug(videoitem)
if videoitem.video_urls or srv_param.get('active', False):
# dbg()
item.title = typo(item.contentTitle.strip(), 'bold') if item.contentType == 'movie' and item.contentTitle or (config.get_localized_string(30161) in item.title) else item.title
item.title = typo(item.contentTitle.strip(), 'bold') if item.contentType == 'movie' and item.contentTitle or (config.get_localized_string(30161) in item.fulltitle) else item.fulltitle
quality = videoitem.quality if videoitem.quality else item.quality if item.quality else ''
videoitem.contentLanguage = videoitem.contentLanguage if videoitem.contentLanguage else item.contentLanguage
+9 -9
View File
@@ -960,13 +960,13 @@ class Tmdb(object):
result = result["tv_results"][0]
else:
result = result['tv_episode_results'][0]
Mpaaurl = '{}/{}/{}/{}?api_key={}'.format(host, self.search_type, result['id'], 'release_dates' if self.search_type == 'movie' else 'content_ratings', api)
Mpaas = self.get_json(Mpaaurl).get('results',[])
for m in Mpaas:
if m.get('iso_3166_1','').lower() == 'us':
result['mpaa'] = m.get('rating', m.get('release_dates', [{}])[0].get('certification'))
break
if result.get('id'):
Mpaaurl = '{}/{}/{}/{}?api_key={}'.format(host, self.search_type, result['id'], 'release_dates' if self.search_type == 'movie' else 'content_ratings', api)
Mpaas = self.get_json(Mpaaurl).get('results',[])
for m in Mpaas:
if m.get('iso_3166_1','').lower() == 'us':
result['mpaa'] = m.get('rating', m.get('release_dates', [{}])[0].get('certification'))
break
self.results = [result]
self.total_results = 1
@@ -1691,8 +1691,8 @@ class Tmdb(object):
ret_infoLabels['studio'] = ", ".join(i['name'] for i in v)
elif k == 'credits_cast' or k == 'season_cast' or k == 'episode_guest_stars':
dic_aux = dict((name, [character, thumb, order]) for (name, character, thumb, order) in l_castandrole)
l_castandrole.extend([(p['name'], p.get('character', '') or p.get('character_name', ''), 'https://image.tmdb.org/t/p/original' + p.get('profile_path', '') if p.get('profile_path', '') else '', p.get('order')) \
dic_aux = dict((name, [character, thumb, order, id]) for (name, character, thumb, order, id) in l_castandrole)
l_castandrole.extend([(p['name'], p.get('character', '') or p.get('character_name', ''), 'https://image.tmdb.org/t/p/original' + p.get('profile_path', '') if p.get('profile_path', '') else '', p.get('order'), p.get('credit_id')) \
for p in v if 'name' in p and p['name'] not in list(dic_aux.keys())])
elif k == 'videos':
+141 -57
View File
@@ -193,18 +193,39 @@ def save_movie(item, silent=False):
if not head_nfo:
head_nfo = scraper.get_nfo(item)
# get extra info from fanart tv
# support.dbg()
extra_info = get_fanart_tv(item)
if not item.infoLabels.get('posters'): item.infoLabels['posters'] = []
item.infoLabels['posters'] += extra_info['poster']
if not item.infoLabels.get('fanarts'): item.infoLabels['fanarts'] = []
item.infoLabels['fanarts'] += extra_info['fanart']
if not item.infoLabels.get('clearlogos'): item.infoLabels['clearlogos'] = []
item.infoLabels['clearlogos'] += extra_info['clearlogo']
if not item.infoLabels.get('cleararts'): item.infoLabels['cleararts'] = []
item.infoLabels['cleararts'] += extra_info['clearart']
if not item.infoLabels.get('landscapes'): item.infoLabels['landscapes'] = []
item.infoLabels['landscapes'] += extra_info['landscape']
if not item.infoLabels.get('banners'): item.infoLabels['banners'] = []
item.infoLabels['banners'] += extra_info['banner']
# Make or update Videolibrary Movie Item
movie_item.channel = "videolibrary"
movie_item.action = 'findvideos'
movie_item.infoLabels = item.infoLabels
movie_item.infoLabels['playcount'] = 0
if not movie_item.head_nfo: movie_item.head_nfo = head_nfo
if not movie_item.title: movie_item.title = item.contentTitle
if not movie_item.videolibrary_id: movie_item.videolibrary_id = _id
if not movie_item.strm_path: movie_item.strm_path = strm_path
if not movie_item.nfo_path: movie_item.nfo_path = nfo_path
if not movie_item.base_name: movie_item.base_name = base_name
if not movie_item.fanart: movie_item.fanart = item.infoLabels['fanart']
if not movie_item.thumbnail: movie_item.thumbnail = item.infoLabels['thumbnail']
if not movie_item.fanart: movie_item.fanart = item.infoLabels['fanart']
if not movie_item.landscape: movie_item.landscape = item.infoLabels['landscapes'][0] if item.infoLabels['landscapes'] else item.infoLabels['fanart']
if not movie_item.banner and item.infoLabels['banners']: movie_item.clearart = item.infoLabels['banners'][0]
if not movie_item.clearart and item.infoLabels['cleararts']: movie_item.clearart = item.infoLabels['cleararts'][0]
if not movie_item.clearlogo and item.infoLabels['clearlogos']: movie_item.clearlogo = item.infoLabels['clearlogos'][0]
if not movie_item.playtime: movie_item.playtime = 0,
if not movie_item.playcounts: movie_item.playcounts = 0,
if not movie_item.prefered_lang: movie_item.prefered_lang = ''
@@ -266,8 +287,8 @@ def save_movie(item, silent=False):
p_dialog.update(100, item.contentTitle)
p_dialog.close()
# Update Kodi Library
from platformcode.dbconverter import add_video
add_video(movie_item)
# from platformcode.dbconverter import add_video
# add_video(movie_item)
# if config.is_xbmc() and config.get_setting("videolibrary_kodi") and not silent and inserted:
# from platformcode.xbmc_videolibrary import update
# update(MOVIES_PATH)
@@ -334,7 +355,7 @@ def save_tvshow(item, episodelist, silent=False):
@rtype path: str
@return: serial directory
"""
logger.debug()
inserted = 0
overwritten = 0
failed = 0
@@ -394,35 +415,42 @@ def save_tvshow(item, episodelist, silent=False):
head_nfo = scraper.get_nfo(item)
if not head_nfo: return 0, 0, -1, ''
extra_info = get_fanart_tv(item)
if not item.infoLabels.get('posters'): item.infoLabels['posters'] = []
item.infoLabels['posters'] += extra_info['poster'].get('all',[])
if not item.infoLabels.get('fanarts'): item.infoLabels['fanarts'] = []
item.infoLabels['fanarts'] += extra_info['fanart']
if not item.infoLabels.get('clearlogos'): item.infoLabels['clearlogos'] = []
item.infoLabels['clearlogos'] += extra_info['clearlogo']
if not item.infoLabels.get('cleararts'): item.infoLabels['cleararts'] = []
item.infoLabels['cleararts'] += extra_info['clearart']
if not item.infoLabels.get('landscapes'): item.infoLabels['landscapes'] = []
item.infoLabels['landscapes'] += extra_info['landscape'].get('all',[])
if not item.infoLabels.get('banners'): item.infoLabels['banners'] = []
item.infoLabels['banners'] += extra_info['banner'].get('all',[])
item.infoLabels['mediatype'] = 'tvshow'
item.contentType = 'tvshow'
item.infoLabels['title'] = item.contentSerieName
tvshow_item.infoLabels = item.infoLabels
if not tvshow_item.infoLabels.get('playcount'): tvshow_item.infoLabels['playcount'] = 0
tvshow_item.channel = 'videolibrary'
tvshow_item.action = 'get_seasons'
tvshow_item.nfo_path = nfo_path
if not tvshow_item.head_nfo:
tvshow_item.head_nfo = head_nfo
if not tvshow_item.title:
tvshow_item.title = item.contentSerieName
if not tvshow_item.videolibrary_id:
tvshow_item.videolibrary_id = _id
if not tvshow_item.fanart:
tvshow_item.fanart = item.infoLabels['fanart']
if not tvshow_item.thumbnail:
tvshow_item.thumbnail = item.infoLabels['thumbnail']
if not tvshow_item.base_name:
tvshow_item.base_name = base_name
if tvshow_item.active == '':
tvshow_item.active = True
if not tvshow_item.playcounts:
tvshow_item.playcounts = 0,
if not tvshow_item.prefered_lang:
tvshow_item.prefered_lang = ''
if not tvshow_item.lang_list:
tvshow_item.lang_list = []
if not tvshow_item.head_nfo: tvshow_item.head_nfo = head_nfo
if not tvshow_item.title: tvshow_item.title = item.contentSerieName
if not tvshow_item.videolibrary_id: tvshow_item.videolibrary_id = _id
if not tvshow_item.thumbnail: tvshow_item.thumbnail = item.infoLabels['thumbnail']
if not tvshow_item.fanart: tvshow_item.fanart = item.infoLabels['fanart']
if not tvshow_item.landscape: tvshow_item.landscape = item.infoLabels['landscapes'][0] if item.infoLabels['landscapes'] else item.infoLabels['fanart']
if not tvshow_item.banner and item.infoLabels['banners']: tvshow_item.clearart = item.infoLabels['banners'][0]
if not tvshow_item.clearart and item.infoLabels['cleararts']: tvshow_item.clearart = item.infoLabels['cleararts'][0]
if not tvshow_item.clearlogo and item.infoLabels['clearlogos']: tvshow_item.clearlogo = item.infoLabels['clearlogos'][0]
if not tvshow_item.base_name: tvshow_item.base_name = base_name
if tvshow_item.active == '': tvshow_item.active = True
if not tvshow_item.prefered_lang: tvshow_item.prefered_lang = ''
if not tvshow_item.lang_list: tvshow_item.lang_list = []
remove_host(item)
item.renumber = add_renumber_options(item)
@@ -448,16 +476,19 @@ def save_tvshow(item, episodelist, silent=False):
return 0, 0, -1, path
# Save the episodes
inserted, overwritten, failed = save_episodes(tvshow_item, episodelist, silent=silent)
logger.debug()
inserted, overwritten, failed = save_episodes(tvshow_item, episodelist, extra_info, item.host, silent=silent)
videolibrarydb.close()
if config.is_xbmc() and config.get_setting("videolibrary_kodi") and not silent and inserted:
from platformcode.xbmc_videolibrary import update
update(TVSHOWS_PATH, tvshow_item.basename)
# if config.is_xbmc() and config.get_setting("videolibrary_kodi") and not silent and inserted:
# # from platformcode.dbconverter import add_video
# # add_video(tvshow_item)
# from platformcode.xbmc_videolibrary import update
# update(TVSHOWS_PATH, tvshow_item.basename)
return inserted, overwritten, failed, path
def save_episodes(item, episodelist, silent=False, overwrite=True):
def save_episodes(item, episodelist, extra_info, host, silent=False, overwrite=True):
"""
saves in the indicated path all the chapters included in the episodelist
@type Item: str
@@ -477,7 +508,8 @@ def save_episodes(item, episodelist, silent=False, overwrite=True):
@rtype failed: int
@return: the number of failed episodes
"""
def save_episode(item, seasons, episodes, e, inserted, overwritten, failed):
# support.dbg()
def save_episode(item, seasons, current_seasons, episodes, e, inserted, overwritten, failed):
season_episode = scrapertools.get_season_and_episode(e.title)
@@ -491,8 +523,9 @@ def save_episodes(item, episodelist, silent=False, overwrite=True):
e.contentSeason = int(season_episode.split('x')[0])
e.contentEpisodeNumber = int(season_episode.split('x')[1])
tmdb.set_infoLabels_item(e)
playcount = db['viewed'].get(e.infoLabels['tmdb_id'], {}).get('{}x{}'.format(e.contentSeason, e.contentEpisodeNumber), 0)
if not e.infoLabels.get('playcount'): e.infoLabels['playcount'] = 0
head_nfo = scraper.get_nfo(e)
episode_item = Item(action='findvideos',
@@ -511,32 +544,39 @@ def save_episodes(item, episodelist, silent=False, overwrite=True):
episode = episodes.get(season_episode, {})
try:
# e.infoLabels['episode'] = ''
if e.contentSeason not in seasons:
# season_item = Item(infoLabels = e.infoLabels)
if e.contentSeason not in current_seasons:
tmdb_info = tmdb.Tmdb(id_Tmdb = e.infoLabels['tmdb_id'], search_type='tv')
seasoninfo = tmdb.get_season_dic(tmdb_info.get_season(e.contentSeason))
infoLabels = {}
if seasoninfo.get('season_posters'): infoLabels['posters'] = seasoninfo.get('season_posters')
if seasoninfo.get('season_fanarts'): infoLabels['fanarts'] = seasoninfo.get('season_fanarts')
if seasoninfo.get('season_posters'): infoLabels['posters'] = seasoninfo.get('season_posters') + extra_info['poster'].get(str(e.contentSeason), [])
if seasoninfo.get('season_fanarts'): infoLabels['fanarts'] = seasoninfo.get('season_fanarts') + extra_info['fanart'].get(str(e.contentSeason), [])
if seasoninfo.get('season_trailer'): infoLabels['trailer'] = seasoninfo.get('season_trailer')
infoLabels['landscapes'] = extra_info['landscape'].get(str(e.contentSeason), [])
infoLabels['banners'] = extra_info['banner'].get(str(e.contentSeason), [])
infoLabels['clearlogos'] = item.infoLabels.get('clearlogos', [])
infoLabels['cleararts'] = item.infoLabels.get('cleararts', [])
if e.contentSeason in seasons: infoLabels['playcount'] = seasons[e.contentSeason].infoLabels.get('playcount', 0)
season_item = Item(action="get_episodes",
channel='videolibrary',
title=seasoninfo.get('season_title'),
thumbnail = seasoninfo.get('season_poster') if seasoninfo.get('season_poster') else item.thumbnail,
fanart = item.fanart,
plot = seasoninfo.get('season_plot') if seasoninfo.get('season_plot') else item.infoLabels.get('plot'),
contentType = 'season',
infoLabels = infoLabels,
contentSeason = e.contentSeason,
videolibrary_id = item.videolibrary_id,
playcount=0)
channel='videolibrary',
title=seasoninfo.get('season_title'),
thumbnail = seasoninfo.get('season_poster') if seasoninfo.get('season_poster') else item.thumbnail,
fanart = item.fanart,
plot = seasoninfo.get('season_plot') if seasoninfo.get('season_plot') else item.infoLabels.get('plot'),
contentType = 'season',
infoLabels = infoLabels,
contentSeason = e.contentSeason,
videolibrary_id = item.videolibrary_id,
playcount=0)
logger.debug(season_item)
if infoLabels['clearlogos']: season_item.clearlogo = infoLabels['clearlogos'][0]
if infoLabels['cleararts']: season_item.clearart = infoLabels['cleararts'][0]
if infoLabels['landscapes']: season_item.landscape = infoLabels['landscapes'][0]
if infoLabels['banners']: season_item.banner = infoLabels['banners'][0]
seasons[e.contentSeason] = season_item
current_seasons.append(e.contentSeason)
if not episode:
inserted += 1
@@ -545,7 +585,9 @@ def save_episodes(item, episodelist, silent=False, overwrite=True):
# else:
epchannels = episode.get('channels',{})
remove_host(e)
if e.url.startswith(host):
remove_host(e)
e.contentTitle = e.infoLabels['title']
e.infoLabels = {}
@@ -588,6 +630,7 @@ def save_episodes(item, episodelist, silent=False, overwrite=True):
inserted = 0
overwritten = 0
failed = 0
current_seasons = []
seasons = videolibrarydb['season'].get(item.videolibrary_id, {})
episodes = videolibrarydb['episode'].get(item.videolibrary_id, {})
videolibrarydb.close()
@@ -595,15 +638,17 @@ def save_episodes(item, episodelist, silent=False, overwrite=True):
try: t = float(100) / len(episodelist)
except: t = 0
# support.dbg()
# for i, e in enumerate(episodelist):
# item, seasons, episodes, e, inserted, overwritten, failed = save_episode(item, seasons, episodes, e, inserted, overwritten, failed)
# item, seasons, episodes, e, inserted, overwritten, failed = save_episode(item, seasons, current_seasons, episodes, e, inserted, overwritten, failed)
# if not e.contentLanguage: e.contentLanguage = item.contentLanguage if item.contentLanguage else 'ITA'
# if not e.contentLanguage in item.lang_list: item.lang_list.append(e.contentLanguage)
# if not silent:
# p_dialog.update(int(math.ceil((i + 1) * t)), e.title)
i = 0
with futures.ThreadPoolExecutor() as executor:
itlist = [executor.submit(save_episode, item, seasons, episodes, e, inserted, overwritten, failed) for e in episodelist]
itlist = [executor.submit(save_episode, item, seasons, current_seasons, episodes, e, inserted, overwritten, failed) for e in episodelist]
for res in futures.as_completed(itlist):
if res.result():
item, seasons, episodes, e, inserted, overwritten, failed = res.result()
@@ -627,7 +672,8 @@ def save_episodes(item, episodelist, silent=False, overwrite=True):
videolibrarydb['season'][item.videolibrary_id] = seasons
videolibrarydb.close()
p_dialog.close()
if not silent:
p_dialog.close()
return inserted, overwritten, failed
@@ -819,6 +865,7 @@ def add_tvshow(item, channel=None):
# Get the episode list
it = item.clone()
itemlist = getattr(channel, it.action)(it)
item.host = channel.host
if itemlist and not scrapertools.find_single_match(itemlist[0].title, r'[Ss]?(\d+)(?:x|_|\s+)[Ee]?[Pp]?(\d+)'):
from platformcode.autorenumber import start, check
if not check(item):
@@ -875,10 +922,9 @@ def add_tvshow(item, channel=None):
def remove_host(item):
if PY3:
import urllib.parse as urlparse # It is very slow in PY2. In PY3 it is native
else:
import urlparse # We use the native of PY2 which is faster
if PY3: import urllib.parse as urlparse # It is very slow in PY2. In PY3 it is native
else: import urlparse # We use the native of PY2 which is faster
parsed_url = urlparse.urlparse(item.url)
item.url = urlparse.urlunparse(('', '', parsed_url.path, parsed_url.params, parsed_url.query, parsed_url.fragment))
@@ -903,3 +949,41 @@ def get_local_files(item):
included_files['{}x{}'.format(s,e.zfill(2))] = f
if included_files:
return included_files, 1
def get_fanart_tv(item):
def set_dict(l):
d = {}
for k in l:
o = d.get(k['season'], [])
o.append(k['url'])
d[k['season']] = o
return d
# support.dbg()
ret = {}
_id = item.infoLabels.get('tvdb_id', item.infoLabels.get('tmdb_id'))
if _id:
_type = item.contentType.replace('show','').replace('movie','movies')
host = 'http://webservice.fanart.tv/v3/{}/{}?api_key=cab16e262d72fea6a6843d679aa10300'
url = host.format(_type, _id)
res = httptools.downloadpage(url).json
if _type == 'tv':
ret['clearlogo'] = [k.get('url') for k in res.get('hdtvlogo', [])]
ret['clearart'] = [k.get('url') for k in res.get('hdclearart', [])]
ret['fanart'] = set_dict(res.get('showbackground', []))
ret['poster'] = set_dict(res.get('seasonposter', []))
ret['poster']['all'] = [k.get('url') for k in res.get('tvposter', [])]
ret['landscape'] = set_dict(res.get('seasonthumb', []))
ret['landscape']['all'] = [k.get('url') for k in res.get('tvthumb', [])]
ret['banner'] = set_dict(res.get('seasonbanner', []))
ret['banner']['all'] = [k.get('url') for k in res.get('tvbanner', [])]
elif _type == 'movies':
ret['clearlogo'] = [k.get('url') for k in res.get('hdmovielogo', [])]
ret['poster'] = [k.get('url') for k in res.get('movieposter', [])]
ret['fanart'] = [k.get('url') for k in res.get('moviebackground', [])]
ret['clearart'] = [k.get('url') for k in res.get('hdmovieclearart', [])]
ret['landscape'] = [k.get('url') for k in res.get('moviethumb', [])]
ret['banner'] = [k.get('url') for k in res.get('moviebanner', [])]
return ret