diff options
author | Pullusb <bernou.samuel@gmail.com> | 2022-02-13 18:48:43 +0300 |
---|---|---|
committer | Pullusb <bernou.samuel@gmail.com> | 2022-02-13 18:48:43 +0300 |
commit | 90fbd177c9850e21bae2238faba791815be566f0 (patch) | |
tree | a3f5bbca09c44f2f30aa4c862109fa313a26649c /greasepencil_tools/import_brush_pack.py | |
parent | b0502cd83ca389c8deb3f7458fcd13efa080982f (diff) |
GPencil Tools: update brush pack url
Changed brush pack donwload to a blender official url. Comply with add-on key requirements (T95442)
Also disable registers in background mode to avoid keymap error.
Diffstat (limited to 'greasepencil_tools/import_brush_pack.py')
-rw-r--r-- | greasepencil_tools/import_brush_pack.py | 85 |
1 files changed, 15 insertions, 70 deletions
diff --git a/greasepencil_tools/import_brush_pack.py b/greasepencil_tools/import_brush_pack.py index 2b960af6..8ee54003 100644 --- a/greasepencil_tools/import_brush_pack.py +++ b/greasepencil_tools/import_brush_pack.py @@ -1,7 +1,6 @@ # SPDX-License-Identifier: GPL-2.0-or-later import bpy -import re import ssl import urllib.request import urllib.parse @@ -26,23 +25,6 @@ def simple_dl_url(url, dest, fallback_url=None): print('\nDownload page for manual install:', fallback_url) return e -def download_url(url, dest): - '''download passed url to dest file (include filename)''' - import shutil - import time - ssl._create_default_https_context = ssl._create_unverified_context - start_time = time.time() - - try: - with urllib.request.urlopen(url) as response, open(dest, 'wb') as out_file: - shutil.copyfileobj(response, out_file) - except Exception as e: - print('Error trying to download\n', e) - return e - - print(f"Download time {time.time() - start_time:.2f}s",) - - def get_brushes(blend_fp): cur_brushes = [b.name for b in bpy.data.brushes] with bpy.data.libraries.load(str(blend_fp), link=False) as (data_from, data_to): @@ -92,13 +74,9 @@ class GP_OT_install_brush_pack(bpy.types.Operator): self._append_brushes(Path(self.temp) / blendname) def execute(self, context): - import tempfile - import json - import hashlib import os - ## get temp dir temp = tempfile.gettempdir() if not temp: self.report({'ERROR'}, 'no os temporary directory found to download brush pack (using python tempfile.gettempdir())') @@ -106,71 +84,40 @@ class GP_OT_install_brush_pack(bpy.types.Operator): self.temp = Path(temp) - ## download link from gitlab - # brush pack project https://gitlab.com/pepe-school-land/gp-brush-pack - repo_url = r'https://gitlab.com/api/v4/projects/21994857' - tree_url = f'{repo_url}/repository/tree' + dl_url = 'http://download.blender.org/demo/bundles/bundles-3.0/grease-pencil-brush-pack.zip' ## need to create an SSl context or linux fail and raise unverified ssl ssl._create_default_https_context = ssl._create_unverified_context + file_size = None + try: - with urllib.request.urlopen(tree_url) as response: - html = response.read() + with urllib.request.urlopen(dl_url) as response: + file_size = int(response.getheader('Content-Length')) except: ## try loading from tempdir - packs = [f for f in os.listdir(self.temp) if 'GP_brush_pack' in f and f.endswith('.blend')] + packs = [f for f in os.listdir(self.temp) if 'gp_brush_pack' in f.lower() and f.endswith('.blend')] if packs: packs.sort() self._append_brushes(Path(self.temp) / packs[-1]) self.report({'WARNING'}, 'Brushes loaded from temp directory (No download)') - # print('Could not reach web url : Brushes were loaded from temp directory file (No download)') return {"FINISHED"} - self.report({'ERROR'}, f'Check your internet connexion, Impossible to connect to url: {tree_url}') + self.report({'ERROR'}, f'Check your internet connexion, Impossible to connect to url: {dl_url}') return {"CANCELLED"} - if not html: - self.report({'ERROR'}, f'No response read from: {tree_url}') + if file_size is None: + self.report({'ERROR'}, f'No response read from: {dl_url}') return {"CANCELLED"} - tree_dic = json.loads(html) - zips = [fi for fi in tree_dic if fi['type'] == 'blob' and fi['name'].endswith('.zip')] - - if not zips: - print(f'no zip file found in {tree_url}') - return {"CANCELLED"} - - ## sort by name to get last - zips.sort(key=lambda x: x['name']) - last_zip = zips[-1] - zipname = last_zip['name'] - id_num = last_zip['id'] - - - ## url by filename - # filepath_encode = urllib.parse.quote(zipname, safe='')# need safe to convert possible '/' - # dl_url = f'{repo_url}/repository/files/{filepath_encode}/raw?ref=master' - - ## url by blobs - dl_url = f"{repo_url}/repository/blobs/{id_num}/raw" - - self.brushzip = self.temp / zipname - + self.brushzip = self.temp / Path(dl_url).name ### Load existing files instead of redownloading if exists and up to date (same hash) if self.brushzip.exists(): - ### Test the hash against online git hash (check for update) - BLOCK_SIZE = 524288# 512 Kb buf size - file_hash = hashlib.sha1() - file_hash.update(("blob %u\0" % os.path.getsize(self.brushzip)).encode('utf-8')) - with open(self.brushzip, 'rb') as f: - fb = f.read(BLOCK_SIZE) - while len(fb) > 0: - file_hash.update(fb) - fb = f.read(BLOCK_SIZE) - - if file_hash.hexdigest() == id_num: # same git SHA1 + + ### compare using file size with size from url header + disk_size = self.brushzip.stat().st_size + if disk_size == file_size: ## is up to date, install print(f'{self.brushzip} is up do date, appending brushes') self._install_from_zip() @@ -178,11 +125,9 @@ class GP_OT_install_brush_pack(bpy.types.Operator): ## Download, unzip, use blend print(f'Downloading brushpack in {self.brushzip}') - ## https://cloud.blender.org/p/gallery/5f235cc297f8815e74ffb90b - fallback_url='https://gitlab.com/pepe-school-land/gp-brush-pack/-/blob/master/Official_GP_brush_pack_v01.zip' + fallback_url='https://cloud.blender.org/p/gallery/5f235cc297f8815e74ffb90b' err = simple_dl_url(dl_url, str(self.brushzip), fallback_url) - # err = download_url(dl_url, str(self.brushzip), fallback_url) if err: self.report({'ERROR'}, 'Could not download brush pack. Check your internet connection. (see console for detail)') |