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.
This commit is contained in:
Samuel Bernou 2022-02-13 16:48:43 +01:00
parent b0502cd83c
commit 90fbd177c9
2 changed files with 19 additions and 71 deletions

View File

@ -1,11 +1,10 @@
# SPDX-License-Identifier: GPL-2.0-or-later
bl_info = {
"name": "Grease Pencil Tools",
"description": "Extra tools for Grease Pencil",
"author": "Samuel Bernou, Antonio Vazquez, Daniel Martinez Lara, Matias Mendiola",
"version": (1, 5, 4),
"version": (1, 5, 5),
"blender": (2, 91, 0),
"location": "Sidebar > Grease Pencil > Grease Pencil Tools",
"warning": "",
@ -26,6 +25,8 @@ from . import (prefs,
)
def register():
if bpy.app.background:
return
prefs.register()
timeline_scrub.register()
box_deform.register()
@ -38,6 +39,8 @@ def register():
prefs.update_panel(prefs.get_addon_prefs(), bpy.context)
def unregister():
if bpy.app.background:
return
ui_panels.unregister()
import_brush_pack.unregister()
rotate_canvas.unregister()

View File

@ -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)')