Merge branch 'stable' of https://github.com/kodiondemand/addon into stable

This commit is contained in:
Alhaziel
2019-07-13 18:40:08 +02:00
2 changed files with 21 additions and 92 deletions

View File

@@ -3,6 +3,7 @@
# Zip Tools # Zip Tools
# -------------------------------------------------------------------------------- # --------------------------------------------------------------------------------
import io
import os import os
import zipfile import zipfile
@@ -17,6 +18,7 @@ class ziptools:
if not dir.endswith(':') and not os.path.exists(dir): if not dir.endswith(':') and not os.path.exists(dir):
os.mkdir(dir) os.mkdir(dir)
file = io.FileIO(file)
zf = zipfile.ZipFile(file) zf = zipfile.ZipFile(file)
if not folder_to_extract: if not folder_to_extract:
self._createstructure(file, dir) self._createstructure(file, dir)

View File

@@ -1,11 +1,13 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import hashlib import hashlib
import io
import os import os
import shutil import shutil
import zipfile import zipfile
from core import httptools, filetools, downloadtools from core import httptools, filetools, downloadtools
from platformcode import logger, platformtools, config from core.ziptools import ziptools
from platformcode import logger, platformtools
import json import json
import xbmc import xbmc
import re import re
@@ -62,7 +64,7 @@ def check_addon_init():
else: else:
# evitiamo che dia errore perchè il file è già in uso # evitiamo che dia errore perchè il file è già in uso
localCommitFile.close() localCommitFile.close()
updateFromZip() calcCurrHash()
return True return True
if pos > 0: if pos > 0:
@@ -207,7 +209,8 @@ def getSha(fileText):
def updateFromZip(): def updateFromZip():
platformtools.dialog_notification('Kodi on Demand', 'Aggiornamento in corso...') dp = platformtools.dialog_progress_bg('Kodi on Demand', 'Aggiornamento in corso...')
dp.update(0)
remotefilename = 'https://github.com/' + user + "/" + repo + "/archive/" + branch + ".zip" remotefilename = 'https://github.com/' + user + "/" + repo + "/archive/" + branch + ".zip"
localfilename = xbmc.translatePath("special://home/addons/") + "plugin.video.kod.update.zip" localfilename = xbmc.translatePath("special://home/addons/") + "plugin.video.kod.update.zip"
@@ -215,7 +218,7 @@ def updateFromZip():
logger.info("localfilename=%s" % localfilename) logger.info("localfilename=%s" % localfilename)
import urllib import urllib
urllib.urlretrieve(remotefilename, localfilename) urllib.urlretrieve(remotefilename, localfilename, lambda nb, bs, fs, url=remotefilename: _pbhook(nb, bs, fs, url, dp))
# Lo descomprime # Lo descomprime
logger.info("decompressione...") logger.info("decompressione...")
@@ -231,23 +234,23 @@ def updateFromZip():
logger.info(e) logger.info(e)
return False return False
dp.update(95)
# puliamo tutto # puliamo tutto
shutil.rmtree(addonDir) shutil.rmtree(addonDir)
filetools.rename(destpathname + "addon-" + branch, addonDir) filetools.rename(destpathname + "addon-" + branch, addonDir)
# Borra el zip descargado logger.info("Cancellando il file zip...")
logger.info("kodiondemand.core.updater borra fichero...")
os.remove(localfilename) os.remove(localfilename)
# os.remove(temp_dir)
platformtools.dialog_notification('Kodi on Demand', 'Aggiornamento completato!')
dp.update(100)
return hash return hash
# https://stackoverflow.com/questions/3083235/unzipping-file-results-in-badzipfile-file-is-not-a-zip-file # https://stackoverflow.com/questions/3083235/unzipping-file-results-in-badzipfile-file-is-not-a-zip-file
def fixZipGetHash(zipFile): def fixZipGetHash(zipFile):
f = open(zipFile, 'r+b') f = io.FileIO(zipFile, 'r+b')
data = f.read() data = f.read()
pos = data.find(b'\x50\x4b\x05\x06') # End of central directory signature pos = data.find(b'\x50\x4b\x05\x06') # End of central directory signature
hash = '' hash = ''
@@ -265,86 +268,10 @@ def fixZipGetHash(zipFile):
return str(hash) return str(hash)
class ziptools: def _pbhook(numblocks, blocksize, filesize, url, dp):
def extract(self, file, dir, folder_to_extract="", overwrite_question=False, backup=False): try:
logger.info("file=%s" % file) percent = min((numblocks*blocksize*90)/filesize, 100)
logger.info("dir=%s" % dir) dp.update(percent)
except:
if not dir.endswith(':') and not os.path.exists(dir): percent = 90
os.mkdir(dir) dp.update(percent)
zf = zipfile.ZipFile(file)
if not folder_to_extract:
self._createstructure(file, dir)
num_files = len(zf.namelist())
for nameo in zf.namelist():
name = nameo.replace(':', '_').replace('<', '_').replace('>', '_').replace('|', '_').replace('"', '_').replace('?', '_').replace('*', '_')
logger.info("name=%s" % nameo)
if not name.endswith('/'):
logger.info("no es un directorio")
try:
(path, filename) = os.path.split(os.path.join(dir, name))
logger.info("path=%s" % path)
logger.info("name=%s" % name)
if folder_to_extract:
if path != os.path.join(dir, folder_to_extract):
break
else:
os.makedirs(path)
except:
pass
if folder_to_extract:
outfilename = os.path.join(dir, filename)
else:
outfilename = os.path.join(dir, name)
logger.info("outfilename=%s" % outfilename)
try:
if os.path.exists(outfilename) and overwrite_question:
from platformcode import platformtools
dyesno = platformtools.dialog_yesno("El archivo ya existe",
"El archivo %s a descomprimir ya existe" \
", ¿desea sobrescribirlo?" \
% os.path.basename(outfilename))
if not dyesno:
break
if backup:
import time
import shutil
hora_folder = "Copia seguridad [%s]" % time.strftime("%d-%m_%H-%M", time.localtime())
backup = os.path.join(config.get_data_path(), 'backups', hora_folder, folder_to_extract)
if not os.path.exists(backup):
os.makedirs(backup)
shutil.copy2(outfilename, os.path.join(backup, os.path.basename(outfilename)))
outfile = open(outfilename, 'wb')
outfile.write(zf.read(nameo))
except:
logger.error("Error en fichero " + nameo)
def _createstructure(self, file, dir):
self._makedirs(self._listdirs(file), dir)
def create_necessary_paths(filename):
try:
(path, name) = os.path.split(filename)
os.makedirs(path)
except:
pass
def _makedirs(self, directories, basedir):
for dir in directories:
curdir = os.path.join(basedir, dir)
if not os.path.exists(curdir):
os.mkdir(curdir)
def _listdirs(self, file):
zf = zipfile.ZipFile(file)
dirs = []
for name in zf.namelist():
if name.endswith('/'):
dirs.append(name)
dirs.sort()
return dirs