From 13a9d5b2e1626bb0bf58abce92c7d1cd72b048ce Mon Sep 17 00:00:00 2001 From: Fabio Date: Fri, 10 Jan 2020 19:50:48 +0100 Subject: [PATCH 1/2] Specifica versione massima Kodi 18 (#165) Specifica versione massima Kodi 18 --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9b2d921b..16e630af 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # Kodi On Demand ### Un fork italiano di [Alfa](https://github.com/alfa-addon) Ognuno è libero (anzi, invitato!) a collaborare, per farlo è possibile utilizzare i pull request. +KOD funziona con Kodi fino alla versione 18 (Python 2). KOD, come Alfa, è sotto licenza GPL v3, pertanto siete liberi di utilizzare parte del codice, a patto di rispettare i termini di suddetta licenza, che si possono riassumere in: From 5d1fd6eaffa91b5429917d73da756772b90b57bb Mon Sep 17 00:00:00 2001 From: Alhaziel Date: Fri, 10 Jan 2020 19:51:53 +0100 Subject: [PATCH 2/2] Ulteriore fix Ep Successivo --- platformcode/launcher.py | 11 ++- platformcode/platformtools.py | 17 ++-- specials/nextep.py | 172 ++++++++++++++++++---------------- specials/videolibrary.py | 1 + 4 files changed, 108 insertions(+), 93 deletions(-) diff --git a/platformcode/launcher.py b/platformcode/launcher.py index 9900f786..4612c013 100644 --- a/platformcode/launcher.py +++ b/platformcode/launcher.py @@ -469,13 +469,16 @@ def play_from_library(item): xbmc.executebuiltin("Container.Update(" + sys.argv[0] + "?" + item.tourl() + ")") else: + # Ventana emergente + item.play_from = 'window' from specials import videolibrary p_dialog = platformtools.dialog_progress_bg(config.get_localized_string(20000), config.get_localized_string(70004)) p_dialog.update(0, '') itemlist = videolibrary.findvideos(item) + while platformtools.is_playing(): # Ventana convencional sleep(5) @@ -518,17 +521,21 @@ def play_from_library(item): else: cabecera = config.get_localized_string(30163) - if (not config.get_setting('autoplay') and not config.get_setting('hide_servers')) or item.no_window: + SHOW = True + if config.get_setting('autoplay') and config.get_setting('hide_servers'): + SHOW = False + + if SHOW: seleccion = platformtools.dialog_select(cabecera, opciones) if seleccion == -1: return else: item = videolibrary.play(itemlist[seleccion])[0] - item.play_from = 'window' platformtools.play_video(item) from specials import autoplay if (platformtools.is_playing() and item.action) or item.server == 'torrent' or autoplay.is_active(item.contentChannel): break + diff --git a/platformcode/platformtools.py b/platformcode/platformtools.py index b3ff8dac..bb355b0f 100644 --- a/platformcode/platformtools.py +++ b/platformcode/platformtools.py @@ -12,7 +12,7 @@ import os import sys import urllib -import config +# import config import xbmc import xbmcaddon import xbmcgui @@ -22,7 +22,7 @@ from channelselector import get_thumb from core import channeltools from core import trakt_tools, scrapertools from core.item import Item -from platformcode import logger, keymaptools +from platformcode import logger, keymaptools, config from platformcode import unify addon = xbmcaddon.Addon('plugin.video.kod') @@ -683,8 +683,8 @@ def is_playing(): def play_video(item, strm=False, force_direct=False, autoplay=False): logger.info() - if item.play_from == 'window': - force_direct=True + # if item.play_from == 'window': + # force_direct=True # logger.debug(item.tostring('\n')) logger.debug('item play: %s'%item) xbmc_player = XBMCPlayer() @@ -756,9 +756,6 @@ def play_video(item, strm=False, force_direct=False, autoplay=False): # Reproduce xbmc_player.play(playlist, xlistitem) - if not item.launcher and (strm or item.strm_path) and config.get_setting('next_ep') > 0 and item.contentType != 'movie': - from specials.nextep import afther_stop - afther_stop(item) else: set_player(item, xlistitem, mediaurl, view, strm) @@ -1080,7 +1077,7 @@ def get_video_seleccionado(item, seleccion, video_urls): def set_player(item, xlistitem, mediaurl, view, strm): logger.info() - logger.debug("item:\n" + item.tostring('\n')) + # logger.debug("item:\n" + item.tostring('\n')) # Movido del conector "torrent" aqui if item.server == "torrent": @@ -1102,7 +1099,7 @@ def set_player(item, xlistitem, mediaurl, view, strm): download_and_play.download_and_play(mediaurl, "download_and_play.mp4", config.get_setting("downloadpath")) return - elif config.get_setting("player_mode") == 0 or\ + elif config.get_setting("player_mode") == 0 or item.play_from == 'window' or\ (config.get_setting("player_mode") == 3 and mediaurl.startswith("rtmp")): # Añadimos el listitem a una lista de reproducción (playlist) playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO) @@ -1141,7 +1138,7 @@ def set_player(item, xlistitem, mediaurl, view, strm): from platformcode import xbmc_videolibrary xbmc_videolibrary.mark_auto_as_watched(item) - if not item.launcher and (strm or item.strm_path) and config.get_setting('next_ep') > 0 and item.contentType != 'movie': + if (strm or item.strm_path) and config.get_setting('next_ep') > 0 and item.contentType != 'movie' and item.play_from != 'window': from specials.nextep import afther_stop afther_stop(item) diff --git a/specials/nextep.py b/specials/nextep.py index 27cd03ec..e59ae683 100644 --- a/specials/nextep.py +++ b/specials/nextep.py @@ -4,107 +4,117 @@ from platformcode import config, platformtools, logger from time import time, sleep from core import scrapertools from core import jsontools, filetools - -normal_window = True if config.get_setting("window_type", "videolibrary") == 0 else False - +import threading def afther_stop(item): - logger.info() - condition = config.get_setting('next_ep') - # from core.support import dbg; dbg() - - if condition == 1: # Hide servers afther stop video - while not platformtools.is_playing(): - pass - while platformtools.is_playing(): - pass - sleep(0.5) - xbmc.executebuiltin('Action(Back)') - - elif condition == 2: # Bring servers afther stop video - from platformcode.launcher import play_from_library - # Check if next episode exist - current_filename = os.path.basename(item.strm_path) - base_path = os.path.basename(os.path.normpath(os.path.dirname(item.strm_path))) - logger.info('PATH:' + base_path) - path = filetools.join(config.get_videolibrary_path(), config.get_setting("folder_tvshows"),base_path) - logger.info('PATH:' + path) - fileList = [] - for file in os.listdir(path): - if file.endswith('.strm'): - fileList.append(file) + logger.info('AS ITEM\n'+str(item)) + def next_ep(item): + logger.info() + condition = config.get_setting('next_ep') # from core.support import dbg; dbg() - nextIndex = fileList.index(current_filename) + 1 - if nextIndex == 0 or nextIndex == len(fileList): - next_file = None - else: - next_file = fileList[nextIndex] - # start next episode window afther x time - if next_file: - play_next = False - time_limit = time() + 30 - time_steps = [20,30,40,50,60] - TimeFromEnd = time_steps[config.get_setting('next_ep_seconds')] - logger.info('TEMPO: '+str(TimeFromEnd)) - while not platformtools.is_playing() and time() < time_limit: + if condition == 1: # Hide servers afther stop video + while not platformtools.is_playing(): + pass + while platformtools.is_playing(): + pass + sleep(0.5) + xbmc.executebuiltin('Action(Back)') + + elif condition == 2: # Bring servers afther stop video + from platformcode.launcher import play_from_library + # Check if next episode exist + current_filename = os.path.basename(item.strm_path) + base_path = os.path.basename(os.path.normpath(os.path.dirname(item.strm_path))) + logger.info('PATH:' + base_path) + path = filetools.join(config.get_videolibrary_path(), config.get_setting("folder_tvshows"),base_path) + logger.info('PATH:' + path) + fileList = [] + for file in os.listdir(path): + if file.endswith('.strm'): + fileList.append(file) + # from core.support import dbg; dbg() + nextIndex = fileList.index(current_filename) + 1 + if nextIndex == 0 or nextIndex == len(fileList): + next_file = None + else: + next_file = fileList[nextIndex] + + # start next episode window afther x time + if next_file: + play_next = False + time_limit = time() + 30 + time_steps = [20,30,40,50,60] + TimeFromEnd = time_steps[config.get_setting('next_ep_seconds')] + logger.info('TEMPO: '+str(TimeFromEnd)) + while not platformtools.is_playing() and time() < time_limit: + sleep(1) + sleep(1) - sleep(1) + while platformtools.is_playing() and play_next == False: + try: + Total = xbmc.Player().getTotalTime() + Actual = xbmc.Player().getTime() + Difference = Total - Actual + if Total > TimeFromEnd >= Difference: + play_next = True + except: + break - while platformtools.is_playing() and play_next == False: - try: - Total = xbmc.Player().getTotalTime() - Actual = xbmc.Player().getTime() - Difference = Total - Actual - if Total > TimeFromEnd >= Difference: - play_next = True - except: - break - - # from core.support import dbg; dbg() - if play_next: - play_next = False - season_ep = next_file.split('.')[0] - season = season_ep.split('x')[0] - episode = season_ep.split('x')[1] - next_ep = '%sx%s' % (season, episode) - item.contentSeason = item.infoLabels['season'] = season - item.contentEpisodeNumber = item.infoLabels['episode'] = episode - item.contentTitle = item.infoLabels['title'] = next_ep - item.strm_path = filetools.join(base_path, next_file) # from core.support import dbg; dbg() + if play_next: + from core.item import Item + play_next = False + season_ep = next_file.split('.')[0] + season = season_ep.split('x')[0] + episode = season_ep.split('x')[1] + next_ep = '%sx%s' % (season, episode) + item = Item( + action= 'play_from_library', + channel= 'videolibrary', + contentEpisodeNumber= episode, + contentSeason= season, + contentTitle= next_ep, + contentType= 'tvshow', + infoLabels= {'episode': episode, 'mediatype': 'tvshow', 'season': season, 'title': next_ep}, + strm_path= filetools.join(base_path, next_file)) + + # item.contentSeason = item.infoLabels['season'] = season + # item.contentEpisodeNumber = item.infoLabels['episode'] = episode + # item.contentTitle = item.infoLabels['title'] = next_ep + # item.strm_path = filetools.join(base_path, next_file) + # logger.info('ITEM SUBMITTED:\n'+str(item)) - global ITEM - ITEM = item - nextDialog = NextDialog('NextDialog.xml', config.get_runtime_path()) - nextDialog.show() - while platformtools.is_playing() and not nextDialog.is_still_watching(): - xbmc.sleep(100) - pass + global ITEM + ITEM = item + nextDialog = NextDialog('NextDialog.xml', config.get_runtime_path()) + nextDialog.show() + while platformtools.is_playing() and not nextDialog.is_still_watching(): + xbmc.sleep(100) + pass - nextDialog.close() - logger.info('CONTINUA: ' +str(nextDialog.stillwatching)) + nextDialog.close() + logger.info('CONTINUA: ' +str(nextDialog.stillwatching)) - if nextDialog.stillwatching or nextDialog.continuewatching: - xbmc.Player().stop() - if normal_window: + if nextDialog.stillwatching or nextDialog.continuewatching: + xbmc.Player().stop() sleep(1) logger.info('BACK STILL') xbmc.executebuiltin('Action(Back)') + sleep(0.5) + return play_from_library(item) else: - item.no_window = True - sleep(0.5) - play_from_library(item) - else: - if normal_window: sleep(1) logger.info('BACK NOT STILL') xbmc.executebuiltin('Action(Back)') - else: - item.no_window = True + else: + return None + + thread = threading.Thread(target = next_ep, args = [item]) + thread.start() import xbmcgui diff --git a/specials/videolibrary.py b/specials/videolibrary.py index 55793688..e6f9b937 100644 --- a/specials/videolibrary.py +++ b/specials/videolibrary.py @@ -558,6 +558,7 @@ def findvideos(item): server.channel = "videolibrary" server.nfo = item.nfo server.strm_path = item.strm_path + server.play_from = item.play_from #### Compatibilidad con Kodi 18: evita que se quede la ruedecedita dando vueltas en enlaces Directos if server.action == 'play':