From 2a5a83c767abca2e6ff74aa5602677911a2b88ef Mon Sep 17 00:00:00 2001 From: Alhaziel01 Date: Sat, 4 Sep 2021 20:08:30 +0200 Subject: [PATCH] =?UTF-8?q?Modifiche=20e=20Fix=20a=20segna=20come=20gi?= =?UTF-8?q?=C3=A0=20visto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- channels/streamingcommunity.py | 36 ++++++--------- core/servertools.py | 15 +----- core/support.py | 9 ++-- core/videolibrarytools.py | 22 ++++----- platformcode/dbconverter.py | 13 ++++-- platformcode/launcher.py | 7 +-- platformcode/platformtools.py | 52 ++++++++++----------- platformcode/xbmc_videolibrary.py | 44 +++++++++--------- specials/videolibrary.py | 77 +++++++++++++++++++++++++------ 9 files changed, 148 insertions(+), 127 deletions(-) diff --git a/channels/streamingcommunity.py b/channels/streamingcommunity.py index 1598a383..6e193154 100644 --- a/channels/streamingcommunity.py +++ b/channels/streamingcommunity.py @@ -52,7 +52,7 @@ def genres(item): args = support.match(data, patronBlock=r'genre-options-json="([^\]]+)\]', patron=r'name"\s*:\s*"([^"]+)').matches for arg in args: itemlist.append(item.clone(title=support.typo(arg, 'bold'), args=arg, action='peliculas')) - support.thumb(itemlist, mode='genre') + support.thumb(itemlist, genre=True) return itemlist @@ -129,7 +129,7 @@ def peliculas(item): itemlist.append(makeItem(i, it, item)) else: recordlist.append(it) - + itemlist.sort(key=lambda item: item.n) if recordlist: itemlist.append(item.clone(title=support.typo(support.config.get_localized_string(30992), 'color kod bold'), thumbnail=support.thumb(), page=page, records=recordlist)) @@ -143,10 +143,7 @@ def makeItem(n, it, item): title, lang = support.match(info['name'], patron=r'([^\[|$]+)(?:\[([^\]]+)\])?').match if not lang: lang = 'ITA' - itm = item.clone(title=support.typo(title,'bold') + support.typo(lang,'_ [] color kod bold')) - itm.contentType = info['type'].replace('tv', 'tvshow') - itm.language = lang - itm.year = info['release_date'].split('-')[0] + itm = item.clone(title=title, contentType = info['type'].replace('tv', 'tvshow'), contentLanguage = lang, year = info['release_date'].split('-')[0]) if itm.contentType == 'movie': @@ -176,18 +173,15 @@ def episodios(item): for episodes in js: for it in episodes['episodes']: itemlist.append( - support.Item(channel=item.channel, - title=it['name'], - episode = it['number'], - season=episodes['number'], + item.clone( + contentEpisodeNumber = it['number'], + contentSeason=episodes['number'], thumbnail=it['images'][0]['original_url'] if 'images' in it and 'original_url' in it['images'][0] else item.thumbnail, fanart=item.fanart, plot=it['plot'], action='findvideos', contentType='episode', - contentSeason = int(episodes['number']), - contentEpisodeNumber = int(it['number']), - contentSerieName=item.fulltitle, + contentTitle=support.cleantitle(it['name']), url=host + '/watch/' + str(episodes['title_id']), episodeid= '?e=' + str(it['id']))) @@ -215,16 +209,16 @@ def findvideos(item): return s token = calculateToken() - def videourls(res): - newurl = '{}/{}{}'.format(url, res, token) - if requests.head(newurl, headers=headers).status_code == 200: - video_urls.append({'type':'m3u8', 'res':res, 'url':newurl}) - with futures.ThreadPoolExecutor() as executor: - for res in ['480p', '720p', '1080p']: - executor.submit(videourls, res) + # def videourls(res): + # newurl = '{}/{}{}'.format(url, res, token) + # if requests.head(newurl, headers=headers).status_code == 200: + # video_urls.append({'type':'m3u8', 'res':res, 'url':newurl}) + + # with futures.ThreadPoolExecutor() as executor: + # for res in ['480p', '720p', '1080p']: + # executor.submit(videourls, res) if not video_urls: video_urls = [{'type':'m3u8', 'url':url + token}] - else: video_urls.sort(key=lambda url: int(support.match(url[0], patron=r'(\d+)p').match)) itemlist = [item.clone(title = channeltools.get_channel_parameters(item.channel)['title'], server='directo', video_urls=video_urls, thumbnail=channeltools.get_channel_parameters(item.channel)["thumbnail"], forcethumb=True)] return support.server(item, itemlist=itemlist) \ No newline at end of file diff --git a/core/servertools.py b/core/servertools.py index 8c05ed7c..c049f060 100644 --- a/core/servertools.py +++ b/core/servertools.py @@ -683,17 +683,7 @@ def sort_servers(servers_list): return [] blacklisted_servers = config.get_setting("black_list", server='servers', default=[]) - favorite_servers = config.get_setting('favorites_servers_list', server='servers', default=[]) - favorite_servers = [s for s in favorite_servers if s not in blacklisted_servers] - - if isinstance(servers_list[0], str): - servers_list = sorted(servers_list, key=lambda x: favorite_servers.index(x) if x in favorite_servers else 999) - return servers_list - - favorite_quality = ['4k', '2160p', '2160', '4k2160p', '4k2160', '4k 2160p', '4k 2160', '2k', - 'fullhd', 'fullhd 1080', 'fullhd 1080p', 'full hd', 'full hd 1080', 'full hd 1080p', 'hd1080', 'hd1080p', 'hd 1080', 'hd 1080p', '1080', '1080p', - 'hd', 'hd720', 'hd720p', 'hd 720', 'hd 720p', '720', '720p', 'hdtv', - 'sd', '480p', '480', '360p', '360', '240p', '240'] + favorite_servers = [s for s in config.get_setting('favorites_servers_list', server='servers', default=[]) if s not in blacklisted_servers] sorted_list = [] inverted = False @@ -721,9 +711,8 @@ def sort_servers(servers_list): continue element["index_server"] = index(favorite_servers, item.server.lower()) - element["index_quality"] = index(favorite_quality, item.quality.lower()) + element["index_quality"] = platformtools.calcResolution(item.quality) element['index_language'] = 0 if item.contentLanguage == 'ITA' else 1 - element['videoitem'] = item sorted_list.append(element) diff --git a/core/support.py b/core/support.py index fe2269c9..26adacd9 100755 --- a/core/support.py +++ b/core/support.py @@ -597,7 +597,7 @@ def scrape(func): if anime and inspect.stack()[1][3] not in ['find_episodes']: from platformcode import autorenumber if function == 'episodios': autorenumber.start(itemlist, item) - else: autorenumber.start(itemlist) + else: autorenumber.start(itemlist, item) if action != 'play' and 'patronMenu' not in args and 'patronGenreMenu' not in args and not disabletmdb and inspect.stack()[1][3] not in ['add_tvshow'] and function not in ['episodios', 'mainlist'] or (function in ['episodios'] and config.get_setting('episode_info')): # and function != 'episodios' and item.contentType in ['movie', 'tvshow', 'episode', 'undefined'] tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) @@ -1139,12 +1139,10 @@ def videolibrary(itemlist, item, typography='', function_level=1, function=''): logger.debug() if item.contentType == 'movie': - action = 'add_movie_to_library' - extra = 'findvideos' + action = 'add_to_library' contentType = 'movie' else: - action = 'add_serie_to_library' - extra = 'episodios' + action = 'add_to_library' contentType = 'tvshow' function = function if function else inspect.stack()[function_level][3] @@ -1176,7 +1174,6 @@ def videolibrary(itemlist, item, typography='', function_level=1, function=''): url=item.url, action=action, from_action=item.action, - extra=extra, path=item.path, thumbnail=thumb('add_to_videolibrary') )) diff --git a/core/videolibrarytools.py b/core/videolibrarytools.py index a50694bc..ce0361de 100644 --- a/core/videolibrarytools.py +++ b/core/videolibrarytools.py @@ -687,11 +687,16 @@ def add_to_videolibrary(item, channel): def add_to_videolibrary(item, channel): - itemlist = getattr(channel, item.from_action)(item) - if itemlist and itemlist[0].contentType == 'episode': - return add_tvshow(item, channel, itemlist) - else: + if item.contentType == 'movie': return add_movie(item) + elif item.contentType == 'tvshow': + return add_tvshow(item) + else: + itemlist = getattr(channel, item.from_action)(item) + if itemlist and itemlist[0].contentType == 'episode': + return add_tvshow(item, channel, itemlist) + else: + return add_movie(item) def add_movie(item): @@ -769,11 +774,6 @@ def add_tvshow(item, channel=None, itemlist=[]): itemlist = [item.clone()] else: - # This mark is because the item has something else apart in the "extra" attribute - # item.action = item.extra if item.extra else item.action - if isinstance(item.extra, str) and "###" in item.extra: - item.action = item.extra.split("###")[0] - item.extra = item.extra.split("###")[1] if item.from_action: item.__dict__["action"] = item.__dict__.pop("from_action") @@ -811,7 +811,7 @@ def add_tvshow(item, channel=None, itemlist=[]): if not check(item, itemlist): action = item.action item.setrenumber = True - start(item) + start(itemlist, item) item.setrenumber = False item.action = action if not item.exit: @@ -820,8 +820,6 @@ def add_tvshow(item, channel=None, itemlist=[]): else: itemlist = getattr(channel, item.action)(item) - global magnet_caching - magnet_caching = False inserted, overwritten, failed, path = save_tvshow(item, itemlist) diff --git a/platformcode/dbconverter.py b/platformcode/dbconverter.py index 08c3065f..a6d3bb22 100644 --- a/platformcode/dbconverter.py +++ b/platformcode/dbconverter.py @@ -289,9 +289,9 @@ class addMovie(object): def set_files(self): self.idFile = get_id('idFile', 'files') - if self.item.playcount: + if self.info.get('playcount', None): sql = 'INSERT OR IGNORE INTO files (idFile, idPath, strFilename, playCount, lastPlayed, dateAdded) VALUES ( ?, ?, ?, ?, ?, ?)' - params = (self.idFile, self.idPath, self.strFilename, self.item.playcount, self.item.lastplayed, date) + params = (self.idFile, self.idPath, self.strFilename, self.info.get('playcount', None), self.item.lastplayed, date) else: sql = 'INSERT OR IGNORE INTO files (idFile, idPath, strFilename, dateAdded) VALUES ( ?, ?, ?, ?)' params = (self.idFile, self.idPath, self.strFilename, date) @@ -331,7 +331,7 @@ class addMovie(object): writer_link_params = [] directors = self.info.get('director', '').split(', ') directors_image = self.info.get('director_image', []) - if not directors_image: writers_image = ['' for d in directors] + if not directors_image: directors_image = ['' for d in directors] writers = self.info.get('writer', '').split(', ') writers_image = self.info.get('writer_image', []) if not writers_image: writers_image = ['' for w in writers] @@ -590,13 +590,16 @@ class addTvShow(object): files = {r[1].replace('.strm',''):r[0] for r in records} self.idFiles = {} idFile = get_id('idFile', 'files') + # support.dbg() for episode in self.idEpisodes.keys(): if episode in files.keys(): self.idFiles[episode] = files[episode] + sql = 'update files set playCount= {} where idFile= {}'.format(self.episodes[episode]['item'].infoLabels.get('playcount', None), files[episode]) + self.sql_actions.append([sql, '']) else: - if self.item.playcount: + if self.episodes[episode]['item'].infoLabels.get('playcount', None): sql = 'INSERT INTO files (idFile, idPath, strFilename, playCount, lastPlayed, dateAdded) VALUES ( ?, ?, ?, ?, ?, ?)' - params = (idFile, self.idPath, episode + '.strm', self.item.playcount, self.item.lastplayed, date) + params = (idFile, self.idPath, episode + '.strm', self.episodes[episode]['item'].infoLabels.get('playcount', None), self.item.lastplayed, date) else: sql = 'INSERT INTO files (idFile, idPath, strFilename, dateAdded) VALUES ( ?, ?, ?, ?)' params = (idFile, self.idPath, episode + '.strm', date) diff --git a/platformcode/launcher.py b/platformcode/launcher.py index 21337183..563c7a49 100644 --- a/platformcode/launcher.py +++ b/platformcode/launcher.py @@ -260,13 +260,8 @@ def run(item=None): elif item.action == "add_serie_to_library": from core import videolibrarytools videolibrarytools.add_tvshow(item, channel) - - # Special action for adding a serie to the library - elif item.action == "add_to_library": - from core import videolibrarytools - videolibrarytools.add_to_videolibrary(item, channel) - # Special action for adding a undefined to the library + # Special action for adding a serie to the library elif item.action == "add_to_library": from core import videolibrarytools videolibrarytools.add_to_videolibrary(item, channel) diff --git a/platformcode/platformtools.py b/platformcode/platformtools.py index b6a373fb..773f84ec 100644 --- a/platformcode/platformtools.py +++ b/platformcode/platformtools.py @@ -293,26 +293,28 @@ def dialog_busy(state): else: xbmc.executebuiltin('Dialog.Close(busydialognocancel)') -def itemlist_refresh(offset=0): - try: - _id = xbmcgui.getCurrentWindowId() - win = xbmcgui.Window(_id) - cid = win.getFocusId() - ctl = win.getControl(cid) - pos = Item().fromurl(xbmc.getInfoLabel('ListItem.FileNameAndPath')).itemlistPosition + offset - logger.debug('ID:', _id, 'POSITION:', pos) +def itemlist_refresh(offset=0, disable=False): + if disable: xbmc.executebuiltin("Container.Refresh") - # xbmc.executebuiltin('ReloadSkin()') + else: + try: + _id = xbmcgui.getCurrentWindowId() + win = xbmcgui.Window(_id) + cid = win.getFocusId() + ctl = win.getControl(cid) + pos = Item().fromurl(xbmc.getInfoLabel('ListItem.FileNameAndPath')).itemlistPosition + offset + logger.debug('ID:', _id, 'POSITION:', pos) + xbmc.executebuiltin("Container.Refresh") + # xbmc.executebuiltin('ReloadSkin()') - while xbmcgui.getCurrentWindowDialogId() != 10138: - pass - while xbmcgui.getCurrentWindowDialogId() == 10138: - pass + while xbmcgui.getCurrentWindowDialogId() != 10138: + pass + while xbmcgui.getCurrentWindowDialogId() == 10138: + pass - ctl.selectItem(pos) - except: - xbmc.executebuiltin("Container.Refresh") - # xbmc.executebuiltin('ReloadSkin()') + ctl.selectItem(pos) + except: + xbmc.executebuiltin("Container.Refresh") def itemlist_update(item, replace=False): @@ -427,7 +429,7 @@ def render_items(itemlist, parent_item): # r_list = [set_item(i, item, parent_item) for i, item in enumerate(itemlist)] r_list = [] - position = 0 + position = None with futures.ThreadPoolExecutor() as executor: searchList = [executor.submit(set_item, i, item, parent_item) for i, item in enumerate(itemlist)] @@ -438,7 +440,7 @@ def render_items(itemlist, parent_item): for item, item_url, listitem in r_list: - if not position and not item.infoLabels.get('playcount', 0): + if position == None and not item.infoLabels.get('playcount', 0) and item.channel != 'downloads': position = item.itemlistPosition dirItems.append(('%s?%s' % (sys.argv[0], item_url), listitem, item.folder, len(r_list))) xbmcplugin.addDirectoryItems(_handle, dirItems) @@ -466,8 +468,7 @@ def render_items(itemlist, parent_item): logger.debug('END render_items') - if parent_item.channel == 'videolibrary' and parent_item.action in ['get_episodes', 'get_season']: - + if parent_item.channel == 'videolibrary' and parent_item.action in ['get_episodes', 'get_seasons'] and position: while xbmcgui.getCurrentWindowDialogId() == 10138: logger.debug('WINDOW ID', xbmcgui.getCurrentWindowDialogId()) xbmc.sleep(100) @@ -475,7 +476,7 @@ def render_items(itemlist, parent_item): win = xbmcgui.Window(10025) cid = win.getFocusId() ctl = win.getControl(cid) - pos = position + (1 if xbmc.getInfoLabel('Container(10138).HasParent') else 0) + pos = position + (1 if xbmc.getInfoLabel('Container(10138).HasParent') else 0) ctl.selectItem(pos) @@ -711,12 +712,7 @@ def set_context_commands(item, item_url, parent_item, **kwargs): if item.channel != "videolibrary" and item.videolibrary != False and not item.disable_videolibrary: # 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={}&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={}&contentChannel=videolibrary'.format(item.action)))) - elif item.action in ['check'] and item.contentTitle or item.contentSerieName: + if 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={}&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') and not item.disable_videolibrary: diff --git a/platformcode/xbmc_videolibrary.py b/platformcode/xbmc_videolibrary.py index 630c963e..886092fe 100644 --- a/platformcode/xbmc_videolibrary.py +++ b/platformcode/xbmc_videolibrary.py @@ -260,33 +260,33 @@ def mark_content_as_watched_on_kodi(item, value=1): @param value: > 0 for seen, 0 for not seen """ logger.debug() - # from core.support import dbg;dbg() - conn = sqlite3.connect(get_file_db()) - view = 'episode' if item.contentType != 'movie' else 'movie' - path = '%{}%'.format(item.strm_path.split('\\')[0].split('/')[0] if item.strm_path else item.base_name) + if item.contentType == 'movie': + conn = sqlite3.connect(get_file_db()) + path = '%{}%'.format(item.strm_path.split('\\')[0].split('/')[0] if item.strm_path else item.base_name) + sql = 'select idMovie from movie_view where strPath like "{}"'.format(path) - request_season = '' - request_episode = '' - if item.contentType in ['season', 'episode'] and item.contentSeason: request_season = ' and c12= {}'.format(item.contentSeason) - if item.contentType in ['episode'] and item.contentEpisodeNumber: request_episode = ' and strFileName= "{}"'.format(item.strm_path.split('\\')[-1].split('/')[-1]) - sql = 'select idFile from {}_view where strPath like "{}"{}{}'.format(view, path, request_episode, request_season) + n, r = execute_sql_kodi(sql) + if r: + payload = {"jsonrpc": "2.0", "method": "VideoLibrary.SetMovieDetails", "params": {"movieid": r[0][0], "playcount": value}, "id": 1} + data = get_data(payload) - n, r = execute_sql_kodi(sql, conn=conn) - if r: - sql = 'update files set playCount= {} where idFile= {}' - sql_actions = [sql.format(value, i[0]) for i in r] + else: + nun_records, records = execute_sql_kodi('SELECT idShow FROM tvshow_view WHERE uniqueid_value LIKE "{}"'.format(item.videolibrary_id)) + # delete TV show + if records: + tvshowid = records[0][0] - cursor = conn.cursor() - for sql in sql_actions: - if type(sql) == list: - cursor.executemany(sql) - else: - cursor.execute(sql) - conn.commit() - conn.close() + nun_records, records = execute_sql_kodi('SELECT idFile FROM episode WHERE idShow={}'.format(tvshowid)) + sql = 'DELETE FROM files WHERE idFile IN (?)' + params = [record[0] for record in records] + sql = 'DELETE FROM files WHERE idFile IN {}'.format(tuple(params)) + execute_sql_kodi(sql) - # platformtools.itemlist_refresh() + payload = {"jsonrpc": "2.0", "method": "VideoLibrary.RemoveTVShow", "id": 1, "params": {"tvshowid": tvshowid}} + data = get_data(payload) + + from platformcode.dbconverter import add_video;add_video(item) def set_watched_on_kod(data): diff --git a/specials/videolibrary.py b/specials/videolibrary.py index 9b36122f..836ad55d 100644 --- a/specials/videolibrary.py +++ b/specials/videolibrary.py @@ -331,7 +331,7 @@ def get_episodes(item): def findvideos(item): - from core import autoplay + from core import autoplay, servertools from platformcode import platformtools logger.debug() if config.get_setting('next_ep') == 3 and item.contentType != 'movie': @@ -413,10 +413,9 @@ def findvideos(item): if config.get_setting('autoplay'): itemlist = autoplay.start(itemlist, item) else: - itemlist.sort(key=lambda it: (videolibrarytools.quality_order.index(it.quality.lower()) if it.quality and it.quality.lower() in videolibrarytools.quality_order else 999, it.server)) + servertools.sort_servers(itemlist) if config.get_setting('checklinks') and not config.get_setting('autoplay'): - from core import servertools itemlist = servertools.check_list_links(itemlist, config.get_setting('checklinks_number')) if item.window: @@ -643,7 +642,7 @@ def mark_content_as_watched(item): self.seasons = videolibrarydb['season'][self.item.videolibrary_id] self.episodes = videolibrarydb['episode'][self.item.videolibrary_id] - getattr(self, 'mark_' + self.item.contentType)() + getattr(self, 'mark_' + (self.item.mark if self.item.mark else self.item.contentType))() videolibrarydb.close() if config.is_xbmc() and not self.item.not_update: @@ -653,13 +652,51 @@ def mark_content_as_watched(item): xbmc_videolibrary.mark_content_as_watched_on_kodi(movie, self.playcount) else: it = None - if item.contentType == 'movie': it = self.movie - elif item.contentType == 'episode': it = self.episodes['{:d}x{:02d}'.format(self.s, self.e)]['item'] - elif item.contentType == 'tvshow': it = self.tvshow['item'] - elif item.contentType == 'season': it = self.seasons[self.s] + if self.item.contentType == 'movie': it = self.movie['item'] + elif self.item.contentType == 'episode': it = self.episodes['{:d}x{:02d}'.format(self.s, self.e)]['item'] + else: it = self.tvshow['item'] + # elif self.item.contentType == 'season': it = self.seasons[self.s] if it: xbmc_videolibrary.mark_content_as_watched_on_kodi(it, self.playcount) - platformtools.itemlist_refresh() + platformtools.itemlist_refresh(1, True if item.contentType in ['season', 'episode'] else False) + + def mark_previous(self): + if self.item.contentType == 'episode': + current_episode = current_playcount = self.episodes['{:d}x{:02d}'.format(self.s, self.e)]['item'] + seasons = [s for s in self.seasons.keys()] + seasons.sort() + for it in self.episodes.values(): + if (it['item'].contentSeason == current_episode.contentSeason and it['item'].contentEpisodeNumber < current_episode.contentEpisodeNumber) or it['item'].contentSeason < current_episode.contentSeason: + it['item'].infoLabels['playcount'] = 1 + videolibrarydb['episode'][self.item.videolibrary_id] = self.episodes + for s in range(seasons[0], self.item.contentSeason + 1): + self.s = s + self.check_playcount('episode') + elif self.item.contentType == 'season': + seasons = [s for s in self.seasons.keys()] + seasons.sort() + for s in range(seasons[0], self.s): + self.s = s + self.mark_season() + + def mark_following(self): + if self.item.contentType == 'episode': + current_episode = current_playcount = self.episodes['{:d}x{:02d}'.format(self.s, self.e)]['item'] + seasons = [s for s in self.seasons.keys()] + seasons.sort() + for it in self.episodes.values(): + if (it['item'].contentSeason == current_episode.contentSeason and it['item'].contentEpisodeNumber > current_episode.contentEpisodeNumber) or it['item'].contentSeason > current_episode.contentSeason: + it['item'].infoLabels['playcount'] = 0 + videolibrarydb['episode'][self.item.videolibrary_id] = self.episodes + for s in range(self.item.contentSeason, seasons[-1] + 1): + self.s = s + self.check_playcount('episode') + elif self.item.contentType == 'season': + seasons = [s for s in self.seasons.keys()] + seasons.sort() + for s in range(self.s + 1, seasons[-1] + 1): + self.s = s + self.mark_season() def mark_episode(self): current_playcount = self.episodes['{:d}x{:02d}'.format(self.s, self.e)]['item'].infoLabels['playcount'] @@ -683,7 +720,7 @@ def mark_content_as_watched(item): self.seasons[self.s].infoLabels['playcount'] = 0 videolibrarydb['season'][self.item.videolibrary_id] = self.seasons - self.mark_all('episodes') + self.mark_all('season_episodes') if current_playcount == 0 or self.playcount == 0: self.check_playcount('season') @@ -729,7 +766,10 @@ def mark_content_as_watched(item): if len(watched) == len(episodes): season_playcount = self.playcount self.tvshow['item'].infoLabels['playcount'] = tv_playcount - self.seasons[self.s].infoLabels['playcount'] = season_playcount + try: + self.seasons[self.s].infoLabels['playcount'] = season_playcount + except: + logger.debug('No Season') videolibrarydb['season'][self.item.videolibrary_id] = self.seasons else: watched = [s for s in self.seasons.values() if s.infoLabels['playcount'] > 0] @@ -739,8 +779,11 @@ def mark_content_as_watched(item): videolibrarydb['tvshow'][self.item.videolibrary_id] = self.tvshow def mark_all(self, _type): - episodes = [e for e in self.episodes.values() if e['item'].contentSeason == self.s] - if _type == 'episodes': + if _type == 'season_episodes': + episodes = [e for e in self.episodes.values() if e['item'].contentSeason == self.s] + for e in episodes: + e['item'].infoLabels['playcount'] = self.playcount + elif _type == 'episodes': for n, ep in self.episodes.items(): self.episodes[n]['item'].infoLabels['playcount'] = self.playcount # self.check_playcount('season') @@ -842,6 +885,7 @@ class subcontext(object): return config.get_localized_string(self.titledict[self.item.contentType][_type]) def makecontext(self): + # support.dbg() # set watched # if not self.item.set: watched = self.item.infoLabels.get('playcount', 0) @@ -852,7 +896,11 @@ class subcontext(object): title = self.title('watched') value = 1 self.context.append(title) + self.context.append('Segna precedenti come visti') + self.context.append('Segna successivi come non visti') self.commands.append(self.item.clone(action='mark_content_as_watched', playcount=value)) + self.commands.append(self.item.clone(action='mark_content_as_watched', playcount=value, mark='previous')) + self.commands.append(self.item.clone(action='mark_content_as_watched', playcount=value, mark='following')) if self.item.contentType in ['movie', 'tvshow', 'list']: # delete @@ -1058,7 +1106,8 @@ def delete(item): if config.is_xbmc() and config.get_setting('videolibrary_kodi'): from platformcode import xbmc_videolibrary xbmc_videolibrary.clean_by_id(item) - platformtools.itemlist_refresh(-1) + else: + platformtools.itemlist_refresh(-1) # delete channel from video item if select and select > 0: