From 6c3e9b4922aa95aa28e3c9b620b52786e1721538 Mon Sep 17 00:00:00 2001 From: mac12m99 Date: Thu, 8 Aug 2019 12:09:45 +0200 Subject: [PATCH] fix e migliorie all'updater --- channelselector.py | 2 +- platformcode/config.py | 35 ++++++++++++++++++++++------------- platformcode/launcher.py | 3 +-- platformcode/updater.py | 29 ++++++++++++++++++++++------- specials/setting.py | 7 +++---- videolibrary_service.py | 5 +---- 6 files changed, 50 insertions(+), 31 deletions(-) diff --git a/channelselector.py b/channelselector.py index 7cee396a..36dd50b8 100644 --- a/channelselector.py +++ b/channelselector.py @@ -68,7 +68,7 @@ def getmainlist(view="thumb_"): thumbnail=get_thumb(thumb_setting, view), category=config.get_localized_string(30100), viewmode="list")) - itemlist.append(Item(title=config.get_localized_string(30104) + " (" + config.get_localized_string(20000) +" " + config.get_addon_version(with_fix=False) + ")", channel="help", action="mainlist", + itemlist.append(Item(title=config.get_localized_string(30104) + " (v" + config.get_addon_version(with_fix=True) + ")", channel="help", action="mainlist", thumbnail=get_thumb("help.png", view), category=config.get_localized_string(30104), viewmode="list")) return itemlist diff --git a/platformcode/config.py b/platformcode/config.py index 0cb811c5..a4da4250 100644 --- a/platformcode/config.py +++ b/platformcode/config.py @@ -17,26 +17,35 @@ __language__ = __settings__.getLocalizedString def get_addon_core(): return __settings__ + def get_addon_version(with_fix=True): ''' - Devuelve el número de versión del addon, y opcionalmente número de fix si lo hay + Trova la versione dell'addon, senza usare le funzioni di kodi perchè non si aggiornano fino al riavvio ''' + info = open(os.path.join(get_runtime_path(), 'addon.xml')).read() + ver = re.search('plugin.video.kod.*?version="([^"]+)"', info).group(1) + if with_fix: - return __settings__.getAddonInfo('version') + get_addon_version_fix() + return ver + " " + get_addon_version_fix() else: - return __settings__.getAddonInfo('version') + return ver + def get_addon_version_fix(): - try: - last_fix_json = os.path.join(get_runtime_path(), 'last_fix.json') # información de la versión fixeada del usuario - if os.path.exists(last_fix_json): - with open(last_fix_json, 'r') as f: data=f.read(); f.close() - fix = re.findall('"fix_version"\s*:\s*(\d+)', data) - if fix: - return '.fix%s' % fix[0] - except: - pass - return '' + if not dev_mode(): + try: + sha = open(os.path.join(get_runtime_path(), 'last_commit.txt')).readline() + return sha[:7] + except: + return '??' + else: + return 'DEV' + + +def dev_mode(): + r = os.path.isdir(get_runtime_path() + '/.git') + return r + def get_platform(full_version=False): """ diff --git a/platformcode/launcher.py b/platformcode/launcher.py index e59a7162..6cb0b68f 100644 --- a/platformcode/launcher.py +++ b/platformcode/launcher.py @@ -64,8 +64,7 @@ def run(item=None): else: item = Item(channel="channelselector", action="getmainlist", viewmode="movie") if not config.get_setting('show_once'): - if not os.path.isdir(config.get_runtime_path() + '/.git'): - logger.info("DEV MODE OFF") + if not config.dev_mode(): from platformcode import updater updater.calcCurrHash() from platformcode import xbmc_videolibrary diff --git a/platformcode/updater.py b/platformcode/updater.py index eab27da1..03b99060 100644 --- a/platformcode/updater.py +++ b/platformcode/updater.py @@ -3,7 +3,6 @@ import hashlib import io import os import shutil -import zipfile from core import httptools, filetools, downloadtools from core.ziptools import ziptools @@ -20,7 +19,7 @@ _hdr_pat = re.compile("^@@ -(\d+),?(\d+)? \+(\d+),?(\d+)? @@.*") branch = 'stable' user = 'kodiondemand' repo = 'addon' -addonDir = xbmc.translatePath("special://home/addons/") + "plugin.video.kod/" +addonDir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + '/' maxPage = 5 # le api restituiscono 30 commit per volta, quindi se si è rimasti troppo indietro c'è bisogno di andare avanti con le pagine trackingFile = "last_commit.txt" @@ -73,7 +72,10 @@ def check_addon_init(): for c in reversed(commits[:pos]): commit = httptools.downloadpage(c['url']).data commitJson = json.loads(commit) - logger.info('aggiornando a' + commitJson['sha']) + # evitiamo di applicare i merge commit + if 'Merge' in commitJson['commit']['message']: + continue + logger.info('aggiornando a ' + commitJson['sha']) alreadyApplied = True for file in commitJson['files']: @@ -86,9 +88,13 @@ def check_addon_init(): text = "" try: localFile = open(addonDir + file["filename"], 'r+') - for line in localFile: - text += line + text = localFile.read() except IOError: # nuovo file + # crea le cartelle se non esistono + dirname = os.path.dirname(addonDir + file["filename"]) + if not os.path.exists(dirname): + os.makedirs(dirname) + localFile = open(addonDir + file["filename"], 'w') patched = apply_patch(text, (file['patch']+'\n').encode('utf-8')) @@ -101,13 +107,22 @@ def check_addon_init(): alreadyApplied = False else: # nel caso ci siano stati problemi logger.info('lo sha non corrisponde, scarico il file') + try: + filetools.remove(addonDir + file["filename"]) + except: + pass downloadtools.downloadfile(file['raw_url'], addonDir + file['filename'], - silent=True, continuar=True) + silent=True, continuar=True, resumir=False) else: # è un file NON testuale, lo devo scaricare # se non è già applicato if not (filetools.isfile(addonDir + file['filename']) and getSha( filetools.read(addonDir + file['filename']) == file['sha'])): - downloadtools.downloadfile(file['raw_url'], addonDir + file['filename'], silent=True, continuar=True) + try: + filetools.remove(addonDir + file["filename"]) + except: + pass + downloadtools.downloadfile(file['raw_url'], addonDir + file['filename'], silent=True, + continuar=True, resumir=False) alreadyApplied = False elif file['status'] == 'removed': try: diff --git a/specials/setting.py b/specials/setting.py index ba3cb11b..eca3acd3 100644 --- a/specials/setting.py +++ b/specials/setting.py @@ -342,12 +342,11 @@ def submenu_tools(item): def check_quickfixes(item): logger.info() - if not os.path.isfile(config.get_runtime_path() + '/.dev'): - logger.info("DEV MODE OFF") + if not config.dev_mode(): from platformcode import updater - return updater.check_addon_updates(verbose=True) + return updater.check_addon_init() else: - logger.info("DEV MODE ON") + return False def update_quasar(item): diff --git a/videolibrary_service.py b/videolibrary_service.py index 24c0ced2..113715f4 100644 --- a/videolibrary_service.py +++ b/videolibrary_service.py @@ -355,13 +355,10 @@ if __name__ == "__main__": # Verificar quick-fixes al abrirse Kodi, y dejarlo corriendo como Thread - if not os.path.isdir(config.get_runtime_path() + '/.git'): - logger.info("DEV MODE OFF") + if not config.dev_mode(): from platformcode import updater updater.check_addon_init() # get_channel_json() -> disabilitato, lo si fa con l'updater - else: - logger.info("DEV MODE ON") # Copia Custom code a las carpetas de Alfa desde la zona de Userdata from platformcode import custom_code