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:
@@ -32,6 +32,7 @@ import bpy as _bpy
|
|||||||
|
|
||||||
|
|
||||||
error_duplicates = False
|
error_duplicates = False
|
||||||
|
error_encoding = False
|
||||||
|
|
||||||
|
|
||||||
def paths():
|
def paths():
|
||||||
@@ -51,14 +52,18 @@ def paths():
|
|||||||
|
|
||||||
def modules(module_cache):
|
def modules(module_cache):
|
||||||
global error_duplicates
|
global error_duplicates
|
||||||
|
global error_encoding
|
||||||
import os
|
import os
|
||||||
|
|
||||||
error_duplicates = False
|
error_duplicates = False
|
||||||
|
error_encoding = False
|
||||||
|
|
||||||
path_list = paths()
|
path_list = paths()
|
||||||
|
|
||||||
# fake module importing
|
# fake module importing
|
||||||
def fake_module(mod_name, mod_path, speedy=True):
|
def fake_module(mod_name, mod_path, speedy=True):
|
||||||
|
global error_encoding
|
||||||
|
|
||||||
if _bpy.app.debug:
|
if _bpy.app.debug:
|
||||||
print("fake_module", mod_path, mod_name)
|
print("fake_module", mod_path, mod_name)
|
||||||
import ast
|
import ast
|
||||||
@@ -69,12 +74,28 @@ def modules(module_cache):
|
|||||||
line_iter = iter(file_mod)
|
line_iter = iter(file_mod)
|
||||||
l = ""
|
l = ""
|
||||||
while not l.startswith("bl_info"):
|
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:
|
if len(l) == 0:
|
||||||
break
|
break
|
||||||
while l.rstrip():
|
while l.rstrip():
|
||||||
lines.append(l)
|
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)
|
data = "".join(lines)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
@@ -949,6 +949,12 @@ class USERPREF_PT_addons(bpy.types.Panel):
|
|||||||
"(see console for details)",
|
"(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
|
filter = context.window_manager.addon_filter
|
||||||
search = context.window_manager.addon_search.lower()
|
search = context.window_manager.addon_search.lower()
|
||||||
support = context.window_manager.addon_support
|
support = context.window_manager.addon_support
|
||||||
|
Reference in New Issue
Block a user