diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-08-07 08:55:58 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-08-07 08:55:58 +0400 |
commit | 38280ba38ed48d45e782e989a32b33510432d172 (patch) | |
tree | 878876ff555a04c0f3b0c289ec33883cad96b755 | |
parent | 117ec4a91ac996480611788998645bd6de40d706 (diff) |
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.
-rw-r--r-- | release/scripts/modules/addon_utils.py | 25 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/space_userpref.py | 6 |
2 files changed, 29 insertions, 2 deletions
diff --git a/release/scripts/modules/addon_utils.py b/release/scripts/modules/addon_utils.py index 22936f4c209..0c5ef69e805 100644 --- a/release/scripts/modules/addon_utils.py +++ b/release/scripts/modules/addon_utils.py @@ -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: diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py index e27bd8ef07a..e6fd8dcb949 100644 --- a/release/scripts/startup/bl_ui/space_userpref.py +++ b/release/scripts/startup/bl_ui/space_userpref.py @@ -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 |