diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index c87e8f699c..92e59eb19f 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -144,7 +144,10 @@ class CuraContainerRegistry(ContainerRegistry): return { "status": "ok", "message": catalog.i18nc("@info:status", "Successfully imported profile {0}", profile.getName()) } else: for profile in profile_or_list: - self._configureProfile(profile, name_seed) + if profile.getId() != "": + ContainerRegistry.getInstance().addContainer(profile) + else: + self._configureProfile(profile, name_seed) if len(profile_or_list) == 1: return {"status": "ok", "message": catalog.i18nc("@info:status", "Successfully imported profile {0}", profile_or_list[0].getName())} @@ -158,7 +161,7 @@ class CuraContainerRegistry(ContainerRegistry): def _configureProfile(self, profile, name_seed): profile.setReadOnly(False) - new_name = self.createUniqueName("quality", "", name_seed, catalog.i18nc("@label", "Custom profile")) + new_name = self.createUniqueName("quality_changes", "", name_seed, catalog.i18nc("@label", "Custom profile")) profile.setName(new_name) profile._id = new_name diff --git a/plugins/CuraProfileReader/CuraProfileReader.py b/plugins/CuraProfileReader/CuraProfileReader.py index 261e68a26b..8007a8e696 100644 --- a/plugins/CuraProfileReader/CuraProfileReader.py +++ b/plugins/CuraProfileReader/CuraProfileReader.py @@ -4,9 +4,11 @@ import os.path from UM.Logger import Logger -from UM.Settings.InstanceContainer import InstanceContainer #The new profile to make. +from UM.Settings.InstanceContainer import InstanceContainer # The new profile to make. from cura.ProfileReader import ProfileReader +import zipfile + ## A plugin that reads profile data from Cura profile files. # # It reads a profile from a .curaprofile file, and returns it as a profile @@ -24,19 +26,19 @@ class CuraProfileReader(ProfileReader): # not be read or didn't contain a valid profile, \code None \endcode is # returned. def read(self, file_name): - # Create an empty profile. - profile = InstanceContainer(os.path.basename(os.path.splitext(file_name)[0])) - profile.addMetaDataEntry("type", "quality") - try: - with open(file_name) as f: # Open file for reading. + archive = zipfile.ZipFile(file_name, "r") + results = [] + for profile_id in archive.namelist(): + # Create an empty profile. + profile = InstanceContainer(profile_id) + profile.addMetaDataEntry("type", "quality_changes") + serialized = "" + with archive.open(profile_id) as f: serialized = f.read() - except IOError as e: - Logger.log("e", "Unable to open file %s for reading: %s", file_name, str(e)) - return None - - try: - profile.deserialize(serialized) - except Exception as e: # Parsing error. This is not a (valid) Cura profile then. - Logger.log("e", "Error while trying to parse profile: %s", str(e)) - return None - return profile \ No newline at end of file + try: + profile.deserialize(serialized.decode("utf-8") ) + except Exception as e: # Parsing error. This is not a (valid) Cura profile then. + Logger.log("e", "Error while trying to parse profile: %s", str(e)) + continue + results.append(profile) + return results \ No newline at end of file diff --git a/resources/qml/Preferences/ProfilesPage.qml b/resources/qml/Preferences/ProfilesPage.qml index 569cc9f7f0..53d83b9111 100644 --- a/resources/qml/Preferences/ProfilesPage.qml +++ b/resources/qml/Preferences/ProfilesPage.qml @@ -108,7 +108,6 @@ UM.ManagementPage text: catalog.i18nc("@action:button", "Import"); iconName: "document-import"; onClicked: importDialog.open(); - enabled: false }, Button {