Browse Source

Merge branch 'Ultimaker:main' into main

goofoo3d 1 year ago
parent
commit
bae1a873a5

+ 30 - 33
.github/ISSUE_TEMPLATE/bugreport.yaml

@@ -5,17 +5,17 @@ body:
 - type: markdown
 - type: markdown
   attributes:
   attributes:
     value: |
     value: |
-      **Thank you for using Cura and wanting to report a bug.**
+      **Thank you for using Cura and wanting to report a bug. 🙏**
       
       
-      Before filing, please check if the issue already exists (either open or closed) by using the search bar on the issues page. 
+      Before filing, [please check if the issue already exists](https://github.com/Ultimaker/Cura/issues?q=is%3Aissue) by using the search bar on the issues page. 
       If it does, comment there. Even if it's closed, we can reopen it based on your comment. 
       If it does, comment there. Even if it's closed, we can reopen it based on your comment. 
       
       
-      Also, please note the application version in the title of the issue "For example (5.3.1) Cannot connect to 3rd-party printer". Please do not write things like **Request** or **BUG** in the title, this is what labels are for.
+      Please include the cura version in the title of the issue. For example, *"[5.4.0] Support Brim is missing in this model"*. 
 - type: input
 - type: input
   attributes:
   attributes:
-    label: Application Version
+    label: Cura Version
     description: The version of Cura this issue occurs with.
     description: The version of Cura this issue occurs with.
-    placeholder: 5.3.0
+    placeholder: 5.4.0
   validations:
   validations:
     required: true
     required: true
 - type: input
 - type: input
@@ -28,14 +28,14 @@ body:
 - type: input
 - type: input
   attributes:
   attributes:
     label: Printer
     label: Printer
-    description: Which printer was selected in Cura?
-    placeholder: Ultimaker S7    
+    description: Which printer was selected in Cura? It also helps to mention if you made any firmware modifications to your printer. 
+    placeholder: Ultimaker S7 / Creality CR-10 with Klipper     
   validations:
   validations:
     required: true
     required: true
 - type: textarea
 - type: textarea
   attributes:
   attributes:
     label: Reproduction steps
     label: Reproduction steps
-    description: Tell us what you did!
+    description: Share what you did, so we can reproduce it
     placeholder: |
     placeholder: |
       1. Something you did
       1. Something you did
       2. Something you did next
       2. Something you did next
@@ -44,42 +44,39 @@ body:
 - type: textarea
 - type: textarea
   attributes:
   attributes:
     label: Actual results
     label: Actual results
-    description: What happens after the above steps have been followed.
+    description: What happens after the above steps have been followed?
   validations:
   validations:
     required: true
     required: true
 - type: textarea
 - type: textarea
   attributes:
   attributes:
     label: Expected results
     label: Expected results
-    description: What should happen after the above steps have been followed.
+    description: What should happen after the above steps have been followed?
   validations:
   validations:
     required: true
     required: true
 - type: markdown
 - type: markdown
   attributes:
   attributes:
     value: |
     value: |
-      Please be sure to add the following files:
-        * To save a project file go to File -> Save project. 
-          Please make sure to .zip your project file. 
-          For big files, you may need to use [WeTransfer](https://wetransfer.com/) or similar file-sharing sites. 
-          G-code files are not project files!
-          Before you share, please think to yourself. Is this a model that can be shared?
-        * **Screenshots** of showing the problem, perhaps before/after images.
-        * A **log file** for crashes and similar issues.
-          You can find your log file here:
-          Windows: `%APPDATA%\cura\<Cura version>\cura.log` or usually `C:\Users\\<your username>\AppData\Roaming\cura\<Cura version>\cura.log`
-          MacOS: `$USER/Library/Application Support/cura/<Cura version>/cura.log`
-          Ubuntu/Linux: `$USER/.local/share/cura/<Cura version>/cura.log` 
-          
-          If the Cura user interface still starts, you can also reach this directory from the application menu in Help -> Show settings folder 
-- type: checkboxes
-  attributes:
-    label: Checklist of files to include
-    options:
-      - label: Log file
-      - label: Project file
+      ### Please add the following files when they are related to...
+        * 🔵 **The quality of your print**   
+          Please add **a Project File**. It contains the printer and settings we need for troubleshooting.    
+          To save a project file go to File -> Save project. 
+          Please make sure to .zip your project file. For big files, you may need to use [WeTransfer](https://wetransfer.com/) or similar file-sharing sites. 
+          G-code files are not project files! Before you share, please think to yourself. Is this a model that can be shared?
+          ![Alt Text](https://user-images.githubusercontent.com/40423138/240616958-5a9751f2-bd34-4808-9752-6fde2e27516e.gif)
+       * 🔵 **Using and interacting with Cura** 
+           Please add **screenshots** showing the issue. 
+           Before and after, and arrows can help here. 
+       * 🔵 **Unexpected crashes and behavior**
+           Please add **a log file** with information on what your Cura is doing.  
+           You can find your log file here:
+           Windows: `%APPDATA%\cura\<Cura version>\cura.log`
+           MacOS: `$USER/Library/Application Support/cura/<Cura version>/cura.log`
+           Ubuntu/Linux: `$USER/.local/share/cura/<Cura version>/cura.log` 
+           If the Cura user interface still starts, you can also reach this directory from the application menu in Help -> Show settings folder 
+
 - type: textarea
 - type: textarea
   attributes:
   attributes:
-    label: Additional information & file uploads  
-    description: You can add these files and additional information that is relevant to the issue in the comments below.
+    label: Add your .zip and screenshots here ⬇️ 
+    description: You can add the zip file and additional information that is relevant to the issue in the comments below.
   validations:
   validations:
     required: true
     required: true
-

+ 8 - 14
.github/workflows/conan-recipe-version.yml

@@ -77,7 +77,7 @@ jobs:
             -   name: Setup Python and pip
             -   name: Setup Python and pip
                 uses: actions/setup-python@v4
                 uses: actions/setup-python@v4
                 with:
                 with:
-                    python-version: "3.10.x"
+                    python-version: "3.11.x"
                     cache: 'pip'
                     cache: 'pip'
                     cache-dependency-path: .github/workflows/requirements-conan-package.txt
                     cache-dependency-path: .github/workflows/requirements-conan-package.txt
 
 
@@ -146,25 +146,21 @@ jobs:
                         
                         
                         if latest_branch_tag:
                         if latest_branch_tag:
                             # %% Get the actual version
                             # %% Get the actual version
-                            no_commits = 0
-                            for commit in repo.iter_commits("HEAD"):
-                                if commit == latest_branch_tag.commit:
-                                    break
-                                no_commits += 1
+                            sha_commit = repo.commit().hexsha[:6]
                             latest_branch_version_prerelease = latest_branch_version.pre
                             latest_branch_version_prerelease = latest_branch_version.pre
                             if latest_branch_version.pre and not "." in str(latest_branch_version.pre):
                             if latest_branch_version.pre and not "." in str(latest_branch_version.pre):
                                 # The prerealese did not contain a version number, default it to 1
                                 # The prerealese did not contain a version number, default it to 1
                                 latest_branch_version_prerelease = f"{latest_branch_version.pre}.1"
                                 latest_branch_version_prerelease = f"{latest_branch_version.pre}.1"
                             if event_name == "pull_request":
                             if event_name == "pull_request":
-                                actual_version = f"{latest_branch_version.major}.{latest_branch_version.minor}.{latest_branch_version.patch}-{str(latest_branch_version_prerelease).lower()}+{buildmetadata}pr_{issue_number}_{no_commits}"
-                                channel_metadata = f"{channel}_{no_commits}"
+                                actual_version = f"{latest_branch_version.major}.{latest_branch_version.minor}.{latest_branch_version.patch}-{str(latest_branch_version_prerelease).lower()}+{buildmetadata}pr_{issue_number}_{sha_commit}"
+                                channel_metadata = f"{channel}_{sha_commit}"
                             else:
                             else:
                                 if channel in ("stable", "_", ""):
                                 if channel in ("stable", "_", ""):
-                                    channel_metadata = f"{no_commits}"
+                                    channel_metadata = f"{sha_commit}"
                                 else:
                                 else:
-                                    channel_metadata = f"{channel}_{no_commits}"
+                                    channel_metadata = f"{channel}_{sha_commit}"
                             if is_release_branch:
                             if is_release_branch:
-                                if latest_branch_version.pre == "" and branch_version > latest_branch_version:
+                                if (latest_branch_version.pre == "" or latest_branch_version.pre is None) and branch_version > latest_branch_version:
                                     actual_version = f"{branch_version.major}.{branch_version.minor}.0-beta.1+{buildmetadata}{channel_metadata}"
                                     actual_version = f"{branch_version.major}.{branch_version.minor}.0-beta.1+{buildmetadata}{channel_metadata}"
                                 elif latest_branch_version.pre == "":
                                 elif latest_branch_version.pre == "":
                                     # An actual full release has been created, we are working on patch
                                     # An actual full release has been created, we are working on patch
@@ -178,18 +174,16 @@ jobs:
                                     actual_version = f"{latest_branch_version.major}.{latest_branch_version.minor}.{latest_branch_version.patch}-{str(latest_branch_version.pre).split('.')[0]}.{bump_up_release_tag}+{buildmetadata}{channel_metadata}"
                                     actual_version = f"{latest_branch_version.major}.{latest_branch_version.minor}.{latest_branch_version.patch}-{str(latest_branch_version.pre).split('.')[0]}.{bump_up_release_tag}+{buildmetadata}{channel_metadata}"
                             else:
                             else:
                                 max_branches_version = Version("0.0.0")
                                 max_branches_version = Version("0.0.0")
-                                branches_no_commits = no_commits
                                 for branch in repo.references:
                                 for branch in repo.references:
                                     try:
                                     try:
                                         if "remotes/origin" in branch.abspath:
                                         if "remotes/origin" in branch.abspath:
                                             b_version = Version(branch.name.split("/")[-1])
                                             b_version = Version(branch.name.split("/")[-1])
                                             if b_version <  Version("6.0.0") and b_version > max_branches_version:
                                             if b_version <  Version("6.0.0") and b_version > max_branches_version:
                                                 max_branches_version = b_version
                                                 max_branches_version = b_version
-                                                branches_no_commits = repo.commit().count() - branch.commit.count()
                                     except:
                                     except:
                                         pass
                                         pass
                                 if max_branches_version > latest_branch_version:
                                 if max_branches_version > latest_branch_version:
-                                    actual_version = f"{max_branches_version.major}.{int(str(max_branches_version.minor)) + 1}.0-alpha+{buildmetadata}{channel}_{branches_no_commits}"
+                                    actual_version = f"{max_branches_version.major}.{int(str(max_branches_version.minor)) + 1}.0-alpha+{buildmetadata}{channel}_{sha_commit}"
                                 else:
                                 else:
                                     actual_version = f"{latest_branch_version.major}.{int(str(latest_branch_version.minor)) + 1}.0-alpha+{buildmetadata}{channel_metadata}"
                                     actual_version = f"{latest_branch_version.major}.{int(str(latest_branch_version.minor)) + 1}.0-alpha+{buildmetadata}{channel_metadata}"
 
 

+ 19 - 1
.github/workflows/cura-installer.yml

@@ -295,10 +295,28 @@ jobs:
                     
                     
                     with open(summary_env, "w") as f:
                     with open(summary_env, "w") as f:
                         f.write(content)
                         f.write(content)
-                        f.writelines("# ${{ steps.filename.outputs.FULL_INSTALLER_FILENAME }} uses:\n")
+                        f.writelines("# ${{ steps.filename.outputs.FULL_INSTALLER_FILENAME }}\n")
+                        f.writelines("## Conan packages:\n")
                         for dep in sorted_deps:
                         for dep in sorted_deps:
                             f.writelines(f"`{dep}`\n")
                             f.writelines(f"`{dep}`\n")
 
 
+            -   name: Summarize the used Python modules
+                shell: python
+                run: |
+                    import os
+                    import pkg_resources
+                    summary_env = os.environ["GITHUB_STEP_SUMMARY"]
+                    content = ""
+                    if os.path.exists(summary_env):
+                        with open(summary_env, "r") as f:
+                            content = f.read()
+                    
+                    with open(summary_env, "w") as f:
+                        f.write(content)
+                        f.writelines("## Python modules:\n")
+                        for package in pkg_resources.working_set:
+                            f.writelines(f"`{package.key}/{package.version}`\n")
+
             -   name: Archive the artifacts (bash)
             -   name: Archive the artifacts (bash)
                 if: ${{ !inputs.installer && runner.os != 'Windows' }}
                 if: ${{ !inputs.installer && runner.os != 'Windows' }}
                 run: tar -zcf "./${{ steps.filename.outputs.INSTALLER_FILENAME }}.tar.gz" "./UltiMaker-Cura/"
                 run: tar -zcf "./${{ steps.filename.outputs.INSTALLER_FILENAME }}.tar.gz" "./UltiMaker-Cura/"

+ 5 - 5
.github/workflows/stale.yml

@@ -17,20 +17,20 @@ jobs:
           exempt-issue-labels: 'Status: Triage,Developer Environment :computer:,Status: On Backlog,PR: Community Contribution :crown:,PR: Printer Definitions :factory:,PR: Translations :books:'
           exempt-issue-labels: 'Status: Triage,Developer Environment :computer:,Status: On Backlog,PR: Community Contribution :crown:,PR: Printer Definitions :factory:,PR: Translations :books:'
           stale-issue-label: 'Status: Stale :hourglass:'
           stale-issue-label: 'Status: Stale :hourglass:'
           labels-to-add-when-unstale: 'Status: Triage'
           labels-to-add-when-unstale: 'Status: Triage'
-          only-labels: "Type: Bug,Status: Deferred"
+          only-labels: "Type: New Feature,Status: Deferred"
           stale-issue-message: |
           stale-issue-message: |
            Hi 👋, 
            Hi 👋, 
            We are cleaning our list of issues to improve our focus. 
            We are cleaning our list of issues to improve our focus. 
-           This bug seems to be older than a year, which is at least three major Cura releases ago. 
+           This feature request seems to be older than a year, which is at least three major Cura releases ago. 
            It also received the label Deferred indicating that we did not have time to work on it back then and haven't found time to work on it since. 
            It also received the label Deferred indicating that we did not have time to work on it back then and haven't found time to work on it since. 
            
            
-           If this is still a problem for you in the current version of Cura, can you please leave a comment? 
+           If this is still something that you think can improve how you and others use Cura, can you please leave a comment? 
            We will have a fresh set of eyes to look at it. 
            We will have a fresh set of eyes to look at it. 
 
 
-           If it is not a problem anymore, you don't have to do anything, and this issue will be automatically closed in 14 days.
+           If it has been resolved or don't need it to be improved anymore, you don't have to do anything, and this issue will be automatically closed in 14 days.
           close-issue-message: |
           close-issue-message: |
            This issue was closed because it has been inactive for 14 days since being marked as stale. 
            This issue was closed because it has been inactive for 14 days since being marked as stale. 
-           If you encounter this issue and still experience this to be a problem, you are welcome to make a fresh new issue with an updated description and screenshots.
+           If you encounter this issue and still have a need for this, you are welcome to make a fresh new issue with an updated description.
 permissions:
 permissions:
   contents: write # only for delete-branch option
   contents: write # only for delete-branch option
   issues: write
   issues: write

+ 8 - 1
.github/workflows/update-translation.yml

@@ -17,6 +17,13 @@ on:
             - 'conandata.yml'
             - 'conandata.yml'
             - 'GitVersion.yml'
             - 'GitVersion.yml'
             - '*.jinja'
             - '*.jinja'
+        branches:
+          - '[1-9].[0-9]'
+          - '[1-9].[0-9][0-9]'
+        tags:
+          - '[1-9].[0-9].[0-9]*'
+          - '[1-9].[0-9].[0-9]'
+          - '[1-9].[0-9][0-9].[0-9]*'
 
 
 jobs:
 jobs:
     update-translations:
     update-translations:
@@ -37,7 +44,7 @@ jobs:
             -   name: Setup Python and pip
             -   name: Setup Python and pip
                 uses: actions/setup-python@v4
                 uses: actions/setup-python@v4
                 with:
                 with:
-                    python-version: 3.11.x
+                    python-version: 3.10.x
                     cache: pip
                     cache: pip
                     cache-dependency-path: .github/workflows/requirements-conan-package.txt
                     cache-dependency-path: .github/workflows/requirements-conan-package.txt
 
 

+ 13 - 5
contributing.md → CONTRIBUTING.md

@@ -1,6 +1,6 @@
 Submitting bug reports
 Submitting bug reports
 ----------------------
 ----------------------
-Please submit bug reports for all of Cura and CuraEngine to the [Cura repository](https://github.com/Ultimaker/Cura/issues). There will be a template there to fill in. Depending on the type of issue, we will usually ask for the [Cura log](Logging Issues) or a project file.
+Please submit bug reports for all of Cura and CuraEngine to the [Cura repository](https://github.com/Ultimaker/Cura/issues). There will be a template there to fill in. Depending on the type of issue, we will usually ask for the [Cura log](https://github.com/Ultimaker/Cura/wiki/Reporting#cura-log) or a project file.
 
 
 If a bug report would contain private information, such as a proprietary 3D model, you may also e-mail us. Ask for contact information in the issue.
 If a bug report would contain private information, such as a proprietary 3D model, you may also e-mail us. Ask for contact information in the issue.
 
 
@@ -8,14 +8,22 @@ Bugs related to supporting certain types of printers can usually not be solved b
 
 
 Requesting features
 Requesting features
 -------------------
 -------------------
-The issue template in the Cura repository does not apply to feature requests. You can ignore it.
-
 When requesting a feature, please describe clearly what you need and why you think this is valuable to users or what problem it solves.
 When requesting a feature, please describe clearly what you need and why you think this is valuable to users or what problem it solves.
 
 
 Making pull requests
 Making pull requests
 --------------------
 --------------------
-If you want to propose a change to Cura's source code, please create a pull request in the appropriate repository (being [Cura](https://github.com/Ultimaker/Cura), [Uranium](https://github.com/Ultimaker/Uranium), [CuraEngine](https://github.com/Ultimaker/CuraEngine), [fdm_materials](https://github.com/Ultimaker/fdm_materials), [libArcus](https://github.com/Ultimaker/libArcus), [cura-build](https://github.com/Ultimaker/cura-build), [cura-build-environment](https://github.com/Ultimaker/cura-build-environment), [libSavitar](https://github.com/Ultimaker/libSavitar), [libCharon](https://github.com/Ultimaker/libCharon) or [cura-binary-data](https://github.com/Ultimaker/cura-binary-data)) and if your change requires changes on multiple of these repositories, please link them together so that we know to merge them together.
+If you want to propose a change to Cura's source code, please create a pull request in the appropriate repository. Since Cura has multiple repositories that influence it, we've listed the most important ones below:
+* [Cura](https://github.com/Ultimaker/Cura)
+* [Uranium](https://github.com/Ultimaker/Uranium)
+* [CuraEngine](https://github.com/Ultimaker/CuraEngine)
+* [fdm_materials](https://github.com/Ultimaker/fdm_materials)
+* [libArcus](https://github.com/Ultimaker/libArcus)
+* [libSavitar](https://github.com/Ultimaker/libSavitar)
+* [libCharon](https://github.com/Ultimaker/libCharon)
+* [cura-binary-data](https://github.com/Ultimaker/cura-binary-data)) 
+
+If your change requires changes on multiple of these repositories, please link them together so that we know to merge & review them together.
 
 
 The style guide for code contributions to Cura and other Ultimaker projects can be found [here](https://github.com/Ultimaker/Meta/blob/master/general/generic_code_conventions.md).
 The style guide for code contributions to Cura and other Ultimaker projects can be found [here](https://github.com/Ultimaker/Meta/blob/master/general/generic_code_conventions.md).
 
 
-Some of these repositories will have automated tests running when you create a pull request, indicated by green check marks or red crosses in the Github web page. If you see a red cross, that means that a test has failed. If the test doesn't fail on the Master branch but does fail on your branch, that indicates that you've probably made a mistake and you need to do that. Click on the cross for more details, or run the test locally by running `cmake . && ctest --verbose`.
+Some of these repositories will have automated tests running when you create a pull request, indicated by green check marks or red crosses in the Github web page. If you see a red cross, that means that a test has failed. If the test doesn't fail on the Main branch but does fail on your branch, that indicates that you've probably made a mistake and you need to do that. Click on the cross for more details, or run the test locally by running `cmake . && ctest --verbose`.

+ 2 - 2
conanfile.py

@@ -49,7 +49,7 @@ class CuraConan(ConanFile):
 
 
     def set_version(self):
     def set_version(self):
         if not self.version:
         if not self.version:
-            self.version = "5.4.0-alpha"
+            self.version = "5.5.0-alpha"
 
 
     @property
     @property
     def _pycharm_targets(self):
     def _pycharm_targets(self):
@@ -270,7 +270,7 @@ class CuraConan(ConanFile):
 
 
     def requirements(self):
     def requirements(self):
         self.requires("pyarcus/5.2.2")
         self.requires("pyarcus/5.2.2")
-        self.requires("curaengine/latest@ultimaker/testing")
+        self.requires("curaengine/(latest)@ultimaker/testing")
         self.requires("pysavitar/5.2.2")
         self.requires("pysavitar/5.2.2")
         self.requires("pynest2d/5.2.2")
         self.requires("pynest2d/5.2.2")
         self.requires("uranium/(latest)@ultimaker/testing")
         self.requires("uranium/(latest)@ultimaker/testing")

+ 1 - 1
cura/ApplicationMetadata.py

@@ -14,7 +14,7 @@ DEFAULT_CURA_LATEST_URL = "https://software.ultimaker.com/latest.json"
 # Each release has a fixed SDK version coupled with it. It doesn't make sense to make it configurable because, for
 # Each release has a fixed SDK version coupled with it. It doesn't make sense to make it configurable because, for
 # example Cura 3.2 with SDK version 6.1 will not work. So the SDK version is hard-coded here and left out of the
 # example Cura 3.2 with SDK version 6.1 will not work. So the SDK version is hard-coded here and left out of the
 # CuraVersion.py.in template.
 # CuraVersion.py.in template.
-CuraSDKVersion = "8.3.0"
+CuraSDKVersion = "8.4.0"
 
 
 try:
 try:
     from cura.CuraVersion import CuraLatestURL
     from cura.CuraVersion import CuraLatestURL

+ 16 - 1
cura/CuraApplication.py

@@ -1,10 +1,11 @@
-# Copyright (c) 2022 Ultimaker B.V.
+# Copyright (c) 2023 UltiMaker
 # Cura is released under the terms of the LGPLv3 or higher.
 # Cura is released under the terms of the LGPLv3 or higher.
 import enum
 import enum
 import os
 import os
 import sys
 import sys
 import tempfile
 import tempfile
 import time
 import time
+import platform
 from typing import cast, TYPE_CHECKING, Optional, Callable, List, Any, Dict
 from typing import cast, TYPE_CHECKING, Optional, Callable, List, Any, Dict
 
 
 import numpy
 import numpy
@@ -147,6 +148,7 @@ class CuraApplication(QtApplication):
         DefinitionChangesContainer = Resources.UserType + 10
         DefinitionChangesContainer = Resources.UserType + 10
         SettingVisibilityPreset = Resources.UserType + 11
         SettingVisibilityPreset = Resources.UserType + 11
         IntentInstanceContainer = Resources.UserType + 12
         IntentInstanceContainer = Resources.UserType + 12
+        ImageFiles = Resources.UserType + 13
 
 
     pyqtEnum(ResourceTypes)
     pyqtEnum(ResourceTypes)
 
 
@@ -407,6 +409,7 @@ class CuraApplication(QtApplication):
 
 
         SettingFunction.registerOperator("extruderValue", self._cura_formula_functions.getValueInExtruder)
         SettingFunction.registerOperator("extruderValue", self._cura_formula_functions.getValueInExtruder)
         SettingFunction.registerOperator("extruderValues", self._cura_formula_functions.getValuesInAllExtruders)
         SettingFunction.registerOperator("extruderValues", self._cura_formula_functions.getValuesInAllExtruders)
+        SettingFunction.registerOperator("anyExtruderNrWithOrDefault", self._cura_formula_functions.getAnyExtruderPositionWithOrDefault)
         SettingFunction.registerOperator("resolveOrValue", self._cura_formula_functions.getResolveOrValue)
         SettingFunction.registerOperator("resolveOrValue", self._cura_formula_functions.getResolveOrValue)
         SettingFunction.registerOperator("defaultExtruderPosition", self._cura_formula_functions.getDefaultExtruderPosition)
         SettingFunction.registerOperator("defaultExtruderPosition", self._cura_formula_functions.getDefaultExtruderPosition)
         SettingFunction.registerOperator("valueFromContainer", self._cura_formula_functions.getValueFromContainerAtIndex)
         SettingFunction.registerOperator("valueFromContainer", self._cura_formula_functions.getValueFromContainerAtIndex)
@@ -425,6 +428,7 @@ class CuraApplication(QtApplication):
         Resources.addStorageType(self.ResourceTypes.DefinitionChangesContainer, "definition_changes")
         Resources.addStorageType(self.ResourceTypes.DefinitionChangesContainer, "definition_changes")
         Resources.addStorageType(self.ResourceTypes.SettingVisibilityPreset, "setting_visibility")
         Resources.addStorageType(self.ResourceTypes.SettingVisibilityPreset, "setting_visibility")
         Resources.addStorageType(self.ResourceTypes.IntentInstanceContainer, "intent")
         Resources.addStorageType(self.ResourceTypes.IntentInstanceContainer, "intent")
+        Resources.addStorageType(self.ResourceTypes.ImageFiles, "images")
 
 
         self._container_registry.addResourceType(self.ResourceTypes.QualityInstanceContainer, "quality")
         self._container_registry.addResourceType(self.ResourceTypes.QualityInstanceContainer, "quality")
         self._container_registry.addResourceType(self.ResourceTypes.QualityChangesInstanceContainer, "quality_changes")
         self._container_registry.addResourceType(self.ResourceTypes.QualityChangesInstanceContainer, "quality_changes")
@@ -435,6 +439,7 @@ class CuraApplication(QtApplication):
         self._container_registry.addResourceType(self.ResourceTypes.MachineStack, "machine")
         self._container_registry.addResourceType(self.ResourceTypes.MachineStack, "machine")
         self._container_registry.addResourceType(self.ResourceTypes.DefinitionChangesContainer, "definition_changes")
         self._container_registry.addResourceType(self.ResourceTypes.DefinitionChangesContainer, "definition_changes")
         self._container_registry.addResourceType(self.ResourceTypes.IntentInstanceContainer, "intent")
         self._container_registry.addResourceType(self.ResourceTypes.IntentInstanceContainer, "intent")
+        self._container_registry.addResourceType(self.ResourceTypes.ImageFiles, "images")
 
 
         Resources.addType(self.ResourceTypes.QmlFiles, "qml")
         Resources.addType(self.ResourceTypes.QmlFiles, "qml")
         Resources.addType(self.ResourceTypes.Firmware, "firmware")
         Resources.addType(self.ResourceTypes.Firmware, "firmware")
@@ -824,6 +829,8 @@ class CuraApplication(QtApplication):
     def run(self):
     def run(self):
         super().run()
         super().run()
 
 
+        self._log_hardware_info()
+
         if len(ApplicationMetadata.DEPENDENCY_INFO) > 0:
         if len(ApplicationMetadata.DEPENDENCY_INFO) > 0:
             Logger.debug("Using Conan managed dependencies: " + ", ".join(
             Logger.debug("Using Conan managed dependencies: " + ", ".join(
                 [dep["recipe"]["id"] for dep in ApplicationMetadata.DEPENDENCY_INFO["installed"] if dep["recipe"]["version"] != "latest"]))
                 [dep["recipe"]["id"] for dep in ApplicationMetadata.DEPENDENCY_INFO["installed"] if dep["recipe"]["version"] != "latest"]))
@@ -897,6 +904,14 @@ class CuraApplication(QtApplication):
 
 
         self.exec()
         self.exec()
 
 
+    def _log_hardware_info(self):
+        hardware_info = platform.uname()
+        Logger.info(f"System: {hardware_info.system}")
+        Logger.info(f"Release: {hardware_info.release}")
+        Logger.info(f"Version: {hardware_info.version}")
+        Logger.info(f"Processor name: {hardware_info.processor}")
+        Logger.info(f"CPU Cores: {os.cpu_count()}")
+
     def __setUpSingleInstanceServer(self):
     def __setUpSingleInstanceServer(self):
         if self._use_single_instance:
         if self._use_single_instance:
             self._single_instance.startServer()
             self._single_instance.startServer()

+ 4 - 2
cura/CuraPackageManager.py

@@ -1,4 +1,4 @@
-# Copyright (c) 2018 Ultimaker B.V.
+# Copyright (c) 2023 UltiMaker
 # Cura is released under the terms of the LGPLv3 or higher.
 # Cura is released under the terms of the LGPLv3 or higher.
 import glob
 import glob
 import os
 import os
@@ -55,7 +55,9 @@ class CuraPackageManager(PackageManager):
     def initialize(self) -> None:
     def initialize(self) -> None:
         self._installation_dirs_dict["materials"] = Resources.getStoragePath(CuraApplication.ResourceTypes.MaterialInstanceContainer)
         self._installation_dirs_dict["materials"] = Resources.getStoragePath(CuraApplication.ResourceTypes.MaterialInstanceContainer)
         self._installation_dirs_dict["qualities"] = Resources.getStoragePath(CuraApplication.ResourceTypes.QualityInstanceContainer)
         self._installation_dirs_dict["qualities"] = Resources.getStoragePath(CuraApplication.ResourceTypes.QualityInstanceContainer)
-        self._installation_dirs_dict["variants"] = Resources.getStoragePath(CuraApplication.ResourceTypes.VariantInstanceContainer)
+        self._installation_dirs_dict["variants"] = Resources.getStoragePath(
+            CuraApplication.ResourceTypes.VariantInstanceContainer)
+        self._installation_dirs_dict["images"] = Resources.getStoragePath(CuraApplication.ResourceTypes.ImageFiles)
 
 
         # Due to a bug in Cura 5.1.0 we needed to change the directory structure of the curapackage on the server side (See SD-3871).
         # Due to a bug in Cura 5.1.0 we needed to change the directory structure of the curapackage on the server side (See SD-3871).
         # Although the material intent profiles will be installed in the `intent` folder, the curapackage from the server side will
         # Although the material intent profiles will be installed in the `intent` folder, the curapackage from the server side will

Some files were not shown because too many files changed in this diff