Merge branch 'stable' of https://github.com/kodiondemand/addon into stable
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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
|
|
||||||
|
|||||||
Reference in New Issue
Block a user