Browse Source

Merge pull request #9930 from Ultimaker/CURA-8269_exclude_plugins_from_backup

Exclude plugins from backup
Remco Burema 3 years ago
parent
commit
992a35ae96
2 changed files with 22 additions and 6 deletions
  1. 9 6
      cura/Backups/Backup.py
  2. 13 0
      cura/Backups/BackupsManager.py

+ 9 - 6
cura/Backups/Backup.py

@@ -14,6 +14,7 @@ from UM.Logger import Logger
 from UM.Message import Message
 from UM.Platform import Platform
 from UM.Resources import Resources
+from UM.Version import Version
 
 if TYPE_CHECKING:
     from cura.CuraApplication import CuraApplication
@@ -28,6 +29,8 @@ class Backup:
     IGNORED_FILES = [r"cura\.log", r"plugins\.json", r"cache", r"__pycache__", r"\.qmlc", r"\.pyc"]
     """These files should be ignored when making a backup."""
 
+    IGNORED_FOLDERS = [r"plugins"]
+
     SECRETS_SETTINGS = ["general/ultimaker_auth_data"]
     """Secret preferences that need to obfuscated when making a backup of Cura"""
 
@@ -74,8 +77,9 @@ class Backup:
         machine_count = max(len([s for s in files if "machine_instances/" in s]) - 1, 0)  # If people delete their profiles but not their preferences, it can still make a backup, and report -1 profiles. Server crashes on this.
         material_count = max(len([s for s in files if "materials/" in s]) - 1, 0)
         profile_count = max(len([s for s in files if "quality_changes/" in s]) - 1, 0)
-        plugin_count = len([s for s in files if "plugin.json" in s])
-
+        # We don't store plugins anymore, since if you can make backups, you have an account (and the plugins are
+        # on the marketplace anyway)
+        plugin_count = 0
         # Store the archive and metadata so the BackupManager can fetch them when needed.
         self.zip_file = buffer.getvalue()
         self.meta_data = {
@@ -94,8 +98,7 @@ class Backup:
         :param root_path: The root directory to archive recursively.
         :return: The archive as bytes.
         """
-
-        ignore_string = re.compile("|".join(self.IGNORED_FILES))
+        ignore_string = re.compile("|".join(self.IGNORED_FILES + self.IGNORED_FOLDERS))
         try:
             archive = ZipFile(buffer, "w", ZIP_DEFLATED)
             for root, folders, files in os.walk(root_path):
@@ -132,8 +135,8 @@ class Backup:
                                    "Tried to restore a Cura backup without having proper data or meta data."))
             return False
 
-        current_version = self._application.getVersion()
-        version_to_restore = self.meta_data.get("cura_release", "master")
+        current_version = Version(self._application.getVersion())
+        version_to_restore = Version(self.meta_data.get("cura_release", "master"))
 
         if current_version < version_to_restore:
             # Cannot restore version newer than current because settings might have changed.

+ 13 - 0
cura/Backups/BackupsManager.py

@@ -4,6 +4,7 @@
 from typing import Dict, Optional, Tuple, TYPE_CHECKING
 
 from UM.Logger import Logger
+from UM.Version import Version
 from cura.Backups.Backup import Backup
 
 if TYPE_CHECKING:
@@ -52,6 +53,18 @@ class BackupsManager:
 
         backup = Backup(self._application, zip_file = zip_file, meta_data = meta_data)
         restored = backup.restore()
+
+        package_manager = self._application.getPackageManager()
+
+        # If the backup was made with Cura 4.10 (or higher), we no longer store plugins.
+        # Since the restored backup doesn't have those plugins anymore, we should remove it from the list
+        # of installed plugins.
+        if Version(meta_data.get("cura_release")) >= Version("4.10.0"):
+            for package_id in package_manager.getAllInstalledPackageIDs():
+                package_data = package_manager.getInstalledPackageInfo(package_id)
+                if package_data.get("package_type") == "plugin" and not package_data.get("is_bundled"):
+                    package_manager.removePackage(package_id)
+
         if restored:
             # At this point, Cura will need to restart for the changes to take effect.
             # We don't want to store the data at this point as that would override the just-restored backup.