From a8cb8556131472cc6a284441af743afb1d2d0cc6 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 22 Mar 2020 15:25:57 +1100 Subject: [PATCH] Add button and operator to uninstall add-on --- src/ifcblenderexport/blenderbim/__init__.py | 7 ++-- src/ifcblenderexport/blenderbim/operator.py | 38 +++++++++++++++++++++ src/ifcblenderexport/blenderbim/ui.py | 9 +++++ 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/src/ifcblenderexport/blenderbim/__init__.py b/src/ifcblenderexport/blenderbim/__init__.py index 489467db29..212e8da63e 100644 --- a/src/ifcblenderexport/blenderbim/__init__.py +++ b/src/ifcblenderexport/blenderbim/__init__.py @@ -6,8 +6,7 @@ bl_info = { "blender": (2, 80, 0), "version": (0, 0, 999999), "location": "File > Export, File > Import, Scene / Object / Material / Mesh Properties", - "tracker_url": "https://sourceforge.net/p/ifcopenshell/" - "_list/tickets?source=navbar", + "tracker_url": "https://github.com/IfcOpenShell/IfcOpenShell/issues", "category": "Import-Export" } @@ -103,6 +102,7 @@ if bpy is not None: operator.ExecuteIfcDiff, operator.AssignContext, operator.SetViewPreset1, + operator.Uninstall, prop.BcfTopic, prop.Subcontext, prop.BIMProperties, @@ -137,6 +137,7 @@ if bpy is not None: ui.BIM_PT_object, ui.BIM_PT_camera, ui.BIM_UL_topics, + ui.BIM_ADDON_preferences, ) def menu_func_export(self, context): @@ -183,7 +184,7 @@ if bpy is not None: del(bpy.types.Collection.BIMObjectProperties) del(bpy.types.Material.BIMMaterialProperties) del(bpy.types.Mesh.BIMMeshProperties) - del(bpy.types.Mesh.BIMCameraProperties) + del(bpy.types.Camera.BIMCameraProperties) if __name__ == "__main__": register() diff --git a/src/ifcblenderexport/blenderbim/operator.py b/src/ifcblenderexport/blenderbim/operator.py index 7cc7157fc8..9f0a337cc0 100644 --- a/src/ifcblenderexport/blenderbim/operator.py +++ b/src/ifcblenderexport/blenderbim/operator.py @@ -1314,3 +1314,41 @@ class SetViewPreset1(bpy.types.Operator): bpy.context.scene.display.shading.curvature_valley_factor = 1 bpy.context.scene.view_settings.view_transform = 'Standard' return {'FINISHED'} + + +class Uninstall(bpy.types.Operator): + bl_idname = 'bim.uninstall' + bl_label = 'Uninstall BlenderBIM' + + def execute(self, context): + import shutil + import glob + + cwd = os.path.dirname(os.path.realpath(__file__)) + addon_dir = os.path.join(cwd, '..') + files = ['ifcdiff.py', 'ordered_set.py', 'pyparsing.py', 'six.py'] + directories = ['OCC', 'bcfplugin', 'dateutil', 'deepdiff', + 'elementpath', 'ifcopenshell', 'jsonpickle', 'lib', 'pystache', + 'pytz', 'svgwrite', 'xmlschema'] + + for f in files: + path = os.path.join(addon_dir, f) + if os.path.isfile(path): + os.remove(path) + + lib_dir = os.path.join(cwd, '..', 'lib') + lib_files = glob.glob(os.path.join(lib_dir, '..', '..', '..', 'lib*.so*')) + + for lib_file in lib_files: + try: + os.remove(lib_file) + except: + print('Error while deleting file: ', lib_file) + shutil.rmtree(os.path.join(lib_dir, '..', '..', '..', 'oce-0.17'), ignore_errors=True) + + for directory in directories: + path = os.path.join(addon_dir, directory) + shutil.rmtree(path, ignore_errors=True) + + bpy.ops.preferences.addon_remove(module='blenderbim') + return {'FINISHED'} diff --git a/src/ifcblenderexport/blenderbim/ui.py b/src/ifcblenderexport/blenderbim/ui.py index 6a6c6e3618..fcc267646b 100644 --- a/src/ifcblenderexport/blenderbim/ui.py +++ b/src/ifcblenderexport/blenderbim/ui.py @@ -733,3 +733,12 @@ class BIM_UL_topics(bpy.types.UIList): layout.prop(item, 'name', text='', emboss=False) else: layout.label(text="", translate=False) + + +class BIM_ADDON_preferences(bpy.types.AddonPreferences): + bl_idname = __package__ + + def draw(self, context): + layout = self.layout + row = layout.row() + row.operator('bim.uninstall')