fix [#28172] Cannot restore Add-ons tab in user preferences after a failed attempt...
authorCampbell Barton <ideasman42@gmail.com>
Sun, 7 Aug 2011 04:55:58 +0000 (04:55 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Sun, 7 Aug 2011 04:55:58 +0000 (04:55 +0000)
non utf8 addons would make the addon UI vanish, now give a message in the console and UI.

release/scripts/modules/addon_utils.py
release/scripts/startup/bl_ui/space_userpref.py

index 22936f4c209677ae370a0804c27d830180a7b09b..0c5ef69e8057deb3809a10b7ac5903c4271e547a 100644 (file)
@@ -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:
index e27bd8ef07aa3d4f96d8d3cdbc774b53e7a749eb..e6fd8dcb9498bb7a21f613e757c0d65407934e00 100644 (file)
@@ -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