forked from bartvdbraak/blender
fix [#28172] Cannot restore Add-ons tab in user preferences after a failed attempt to install an add-on.
non utf8 addons would make the addon UI vanish, now give a message in the console and UI.
This commit is contained in:
parent
117ec4a91a
commit
38280ba38e
@ -32,6 +32,7 @@ import bpy as _bpy
|
||||
|
||||
|
||||
error_duplicates = False
|
||||
error_encoding = False
|
||||
|
||||
|
||||
def paths():
|
||||
@ -51,14 +52,18 @@ def paths():
|
||||
|
||||
def modules(module_cache):
|
||||
global error_duplicates
|
||||
global error_encoding
|
||||
import os
|
||||
|
||||
error_duplicates = False
|
||||
error_encoding = False
|
||||
|
||||
path_list = paths()
|
||||
|
||||
# fake module importing
|
||||
def fake_module(mod_name, mod_path, speedy=True):
|
||||
global error_encoding
|
||||
|
||||
if _bpy.app.debug:
|
||||
print("fake_module", mod_path, mod_name)
|
||||
import ast
|
||||
@ -69,12 +74,28 @@ def modules(module_cache):
|
||||
line_iter = iter(file_mod)
|
||||
l = ""
|
||||
while not l.startswith("bl_info"):
|
||||
l = line_iter.readline()
|
||||
try:
|
||||
l = line_iter.readline()
|
||||
except UnicodeDecodeError as e:
|
||||
if not error_encoding:
|
||||
error_encoding = True
|
||||
print("Error reading file as UTF-8:", mod_path, e)
|
||||
file_mod.close()
|
||||
return None
|
||||
|
||||
if len(l) == 0:
|
||||
break
|
||||
while l.rstrip():
|
||||
lines.append(l)
|
||||
l = line_iter.readline()
|
||||
try:
|
||||
l = line_iter.readline()
|
||||
except UnicodeDecodeError as e:
|
||||
if not error_encoding:
|
||||
error_encoding = True
|
||||
print("Error reading file as UTF-8:", mod_path, e)
|
||||
file_mod.close()
|
||||
return None
|
||||
|
||||
data = "".join(lines)
|
||||
|
||||
else:
|
||||
|
@ -949,6 +949,12 @@ class USERPREF_PT_addons(bpy.types.Panel):
|
||||
"(see console for details)",
|
||||
)
|
||||
|
||||
if addon_utils.error_encoding:
|
||||
self.draw_error(col,
|
||||
"One or more addons do not have UTF-8 encoding\n"
|
||||
"(see console for details)",
|
||||
)
|
||||
|
||||
filter = context.window_manager.addon_filter
|
||||
search = context.window_manager.addon_search.lower()
|
||||
support = context.window_manager.addon_support
|
||||
|
Loading…
Reference in New Issue
Block a user