diff --git a/.clang-format b/.clang-format index 2cd8d678acdceb15b68eae0cb08da590304f072a..0965e5724a3b3d141bcd3578a3ca05a6ad304316 100644 --- a/.clang-format +++ b/.clang-format @@ -28,8 +28,9 @@ PointerAlignment: Left ReflowComments: "false" SortIncludes: "true" SpaceAfterCStyleCast: "false" +SpaceInEmptyBlock: "false" SpacesBeforeTrailingComments: "2" SpacesInAngles: "true" SpacesInParentheses: "true" SpacesInSquareBrackets: "true" -Standard: Cpp11 +Standard: c++17 diff --git a/.clang-format.base b/.clang-format.base deleted file mode 100644 index 2cd8d678acdceb15b68eae0cb08da590304f072a..0000000000000000000000000000000000000000 --- a/.clang-format.base +++ /dev/null @@ -1,35 +0,0 @@ -# SPDX-FileCopyrightText: no -# SPDX-License-Identifier: CC0-1.0 ---- -BasedOnStyle: WebKit - -AlignAfterOpenBracket: Align -AlignEscapedNewlines: DontAlign -AllowAllParametersOfDeclarationOnNextLine: "false" -AllowShortFunctionsOnASingleLine: Inline -AllowShortIfStatementsOnASingleLine: "false" -AllowShortLambdasOnASingleLine: All -AllowShortLoopsOnASingleLine: "false" -AlwaysBreakAfterReturnType: TopLevelDefinitions -AlwaysBreakTemplateDeclarations: Yes -BinPackArguments: "false" -BinPackParameters: "false" -BreakBeforeBraces: Allman -BreakBeforeTernaryOperators: "true" -BreakConstructorInitializers: BeforeComma -ColumnLimit: 120 -Cpp11BracedListStyle: "false" -FixNamespaceComments: "true" -IncludeBlocks: Preserve -IndentWidth: "4" -MaxEmptyLinesToKeep: "2" -NamespaceIndentation: None -PointerAlignment: Left -ReflowComments: "false" -SortIncludes: "true" -SpaceAfterCStyleCast: "false" -SpacesBeforeTrailingComments: "2" -SpacesInAngles: "true" -SpacesInParentheses: "true" -SpacesInSquareBrackets: "true" -Standard: Cpp11 diff --git a/CHANGES-3.2 b/CHANGES-3.2 index cf02ff29d3a8ad1a8445244c69a0731d45c28cc7..01da2a00e51b28fbe0abc441c6858cfc0d91852e 100644 --- a/CHANGES-3.2 +++ b/CHANGES-3.2 @@ -7,7 +7,7 @@ contributors are listed. Note that Calamares does not have a historical changelog -- this log starts with version 3.2.0. The release notes on the website will have to do for older versions. -# 3.2.51 (unreleased) # +# 3.2.52 (unreleased) # This release contains contributions from (alphabetically by first name): - No external contributors yet @@ -16,6 +16,35 @@ This release contains contributions from (alphabetically by first name): - No core changes yet ## Modules ## + - No module changes yet + + +# 3.2.51 (2022-02-01) # + +This release contains contributions from (alphabetically by first name): + - Evan James + +**WARNING** The *umount* module has been rewritten in C++. Check your +configuration if you previously used the copy-a-log functionality. + +## Core ## + - Evan has made a start on documenting which Global Storage keys there + are and how they tie modules together. This can be found in the + `src/modules/README.md` documentation. + +## Modules ## + - *bootloader* can now be configured to try to generate a unique + suffix for the bootloader-id. #1820 + - *grubcfg* now has a configurable default for kernel parameters, + which allows distributions to change the value from `quiet`. + The default, if nothing is set, remains `quiet`. Use an explicitly- + empty list to specify no-arguments-at-all. + - *packagechooser* can now export its choices for use by the *netinstall* + module. This makes it possible to use *packagechooser* for large-scale + choices, followed by *netinstall* for fine-grained control. (Thanks Evan) + - When the *partition* module has a conflicting configuration for the + swap choices, it prints a warning and uses the configured choice, rather + than always using "suspend". #1881 - The *umount* module has been re-written in C++. The copy-a-log-file functionality has been removed. Use the *preservefiles* module for that. diff --git a/CMakeLists.txt b/CMakeLists.txt index aec04f315713bf66f841a36833ffeb903a05f61a..dd46148d8a445c16acf11609266ce891f3114756 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,7 +41,7 @@ # TODO:3.3: Require CMake 3.12 cmake_minimum_required( VERSION 3.3 FATAL_ERROR ) project( CALAMARES - VERSION 3.2.51 + VERSION 3.2.52 LANGUAGES C CXX ) diff --git a/ci/calamaresstyle b/ci/calamaresstyle index ffcfe09026942cf2b1cd967509fb97f026292995..f5bcd2bb9beaf519c0689891b3d8eb6465ac15ac 100755 --- a/ci/calamaresstyle +++ b/ci/calamaresstyle @@ -19,12 +19,12 @@ BASEDIR=$(dirname $0) TOPDIR=$( cd $BASEDIR/.. && pwd -P ) test -d "$BASEDIR" || { echo "! Could not determine base for $0" ; exit 1 ; } test -d "$TOPDIR" || { echo "! Cound not determine top-level source dir" ; exit 1 ; } -test -f "$TOPDIR/.clang-format.base" || { echo "! No .clang-format support files in $TOPDIR" ; exit 1 ; } +test -f "$TOPDIR/.clang-format" || { echo "! No .clang-format support files in $TOPDIR" ; exit 1 ; } AS=$( which astyle ) # Allow specifying CF_VERSIONS outside already -CF_VERSIONS="$CF_VERSIONS clang-format-8 clang-format80 clang-format90 clang-format-9.0.1 clang-format" +CF_VERSIONS="$CF_VERSIONS clang-format13 clang-format12 clang-format" for _cf in $CF_VERSIONS do # Not an error if this particular clang-format isn't found @@ -40,31 +40,19 @@ test -x "$CF" || { echo "! $CF is not executable."; exit 1 ; } ### CLANG-FORMAT-WRANGLING # # Version 7 and earlier doesn't understand all the options we would like -# Version 8 is ok -# Version 9 is ok -# Later versions change some defaults so need extra wrangling. -# .. there are extra files that are appended to the settings, per -# .. clang-format version. +# Version 12 handles lambdas nicely, so use that. +# Version 13 is also ok. format_version=`"$CF" --version | tr -dc '[^.0-9]' | cut -d . -f 1` case "$format_version" in - [0-7] ) - echo "! Clang-format version 8+ required" - exit 1 - ;; - [89] ) + 12|13 ) : ;; * ) - echo "! Clang-format version '$format_version' unsupported." + echo "! Clang-format version '$format_version' unsupported, version 12 required." exit 1 ;; esac -_fmt="$TOPDIR/.clang-format" -cp "$_fmt.base" "$_fmt" -for f in "$extra_settings" ; do - test -f "$_fmt.$f" && cat "$_fmt.$f" >> "$_fmt" -done ### FILE PROCESSING @@ -98,8 +86,3 @@ if test "x$any_dirs" = "xyes" ; then else style_some "$@" fi - -### CLANG-FORMAT-WRANGLING -# -# Restore the original .clang-format -cp "$_fmt.base" "$_fmt" diff --git a/lang/calamares_en.ts b/lang/calamares_en.ts index 544fd4e71eeabb1c62e3a89c44b750c7bee7f3f3..f92210abdfdd46b601e00b7d1c3200c993c7fc11 100644 --- a/lang/calamares_en.ts +++ b/lang/calamares_en.ts @@ -171,7 +171,7 @@ <context> <name>Calamares::JobThread</name> <message> - <location filename="../src/libcalamares/JobQueue.cpp" line="201"/> + <location filename="../src/libcalamares/JobQueue.cpp" line="202"/> <source>Done</source> <translation>Done</translation> </message> @@ -187,17 +187,17 @@ <context> <name>Calamares::ProcessJob</name> <message> - <location filename="../src/libcalamares/ProcessJob.cpp" line="43"/> + <location filename="../src/libcalamares/ProcessJob.cpp" line="42"/> <source>Run command '%1' in target system.</source> <translation>Run command '%1' in target system.</translation> </message> <message> - <location filename="../src/libcalamares/ProcessJob.cpp" line="43"/> + <location filename="../src/libcalamares/ProcessJob.cpp" line="42"/> <source> Run command '%1'.</source> <translation> Run command '%1'.</translation> </message> <message> - <location filename="../src/libcalamares/ProcessJob.cpp" line="50"/> + <location filename="../src/libcalamares/ProcessJob.cpp" line="49"/> <source>Running command %1 %2</source> <translation>Running command %1 %2</translation> </message> @@ -205,32 +205,32 @@ <context> <name>Calamares::PythonJob</name> <message> - <location filename="../src/libcalamares/PythonJob.cpp" line="194"/> + <location filename="../src/libcalamares/PythonJob.cpp" line="233"/> <source>Running %1 operation.</source> <translation>Running %1 operation.</translation> </message> <message> - <location filename="../src/libcalamares/PythonJob.cpp" line="223"/> + <location filename="../src/libcalamares/PythonJob.cpp" line="262"/> <source>Bad working directory path</source> <translation>Bad working directory path</translation> </message> <message> - <location filename="../src/libcalamares/PythonJob.cpp" line="224"/> + <location filename="../src/libcalamares/PythonJob.cpp" line="263"/> <source>Working directory %1 for python job %2 is not readable.</source> <translation>Working directory %1 for python job %2 is not readable.</translation> </message> <message> - <location filename="../src/libcalamares/PythonJob.cpp" line="230"/> + <location filename="../src/libcalamares/PythonJob.cpp" line="269"/> <source>Bad main script file</source> <translation>Bad main script file</translation> </message> <message> - <location filename="../src/libcalamares/PythonJob.cpp" line="231"/> + <location filename="../src/libcalamares/PythonJob.cpp" line="270"/> <source>Main script file %1 for python job %2 is not readable.</source> <translation>Main script file %1 for python job %2 is not readable.</translation> </message> <message> - <location filename="../src/libcalamares/PythonJob.cpp" line="304"/> + <location filename="../src/libcalamares/PythonJob.cpp" line="343"/> <source>Boost.Python error in job "%1".</source> <translation>Boost.Python error in job "%1".</translation> </message> @@ -285,52 +285,47 @@ <context> <name>Calamares::ViewManager</name> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="162"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="160"/> <source>Setup Failed</source> <translation>Setup Failed</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="162"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="160"/> <source>Installation Failed</source> <translation>Installation Failed</translation> </message> <message> <location filename="../src/libcalamaresui/ViewManager.cpp" line="163"/> - <source>Would you like to paste the install log to the web?</source> - <translation>Would you like to paste the install log to the web?</translation> - </message> - <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="179"/> <source>Error</source> <translation>Error</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="88"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="90"/> <source>&Yes</source> <translation>&Yes</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="89"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="91"/> <source>&No</source> <translation>&No</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="90"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="92"/> <source>&Close</source> <translation>&Close</translation> </message> <message> - <location filename="../src/libcalamaresui/utils/Paste.cpp" line="183"/> + <location filename="../src/libcalamaresui/utils/Paste.cpp" line="184"/> <source>Install Log Paste URL</source> <translation>Install Log Paste URL</translation> </message> <message> - <location filename="../src/libcalamaresui/utils/Paste.cpp" line="165"/> + <location filename="../src/libcalamaresui/utils/Paste.cpp" line="166"/> <source>The upload was unsuccessful. No web-paste was done.</source> <translation>The upload was unsuccessful. No web-paste was done.</translation> </message> <message> - <location filename="../src/libcalamaresui/utils/Paste.cpp" line="177"/> + <location filename="../src/libcalamaresui/utils/Paste.cpp" line="178"/> <source>Install log posted to %1 @@ -343,124 +338,124 @@ Link copied to clipboard</source> Link copied to clipboard</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="211"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="189"/> <source>Calamares Initialization Failed</source> <translation>Calamares Initialization Failed</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="212"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="190"/> <source>%1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution.</source> <translation>%1 can not be installed. Calamares was unable to load all of the configured modules. This is a problem with the way Calamares is being used by the distribution.</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="218"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="196"/> <source><br/>The following modules could not be loaded:</source> <translation><br/>The following modules could not be loaded:</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="332"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="310"/> <source>Continue with setup?</source> <translation>Continue with setup?</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="332"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="310"/> <source>Continue with installation?</source> <translation>Continue with installation?</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="334"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="312"/> <source>The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong></source> <translation>The %1 setup program is about to make changes to your disk in order to set up %2.<br/><strong>You will not be able to undo these changes.</strong></translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="337"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="315"/> <source>The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong></source> <translation>The %1 installer is about to make changes to your disk in order to install %2.<br/><strong>You will not be able to undo these changes.</strong></translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="340"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="318"/> <source>&Set up now</source> <translation>&Set up now</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="340"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="318"/> <source>&Install now</source> <translation>&Install now</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="348"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="326"/> <source>Go &back</source> <translation>Go &back</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="398"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="376"/> <source>&Set up</source> <translation>&Set up</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="398"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="376"/> <source>&Install</source> <translation>&Install</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="400"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="378"/> <source>Setup is complete. Close the setup program.</source> <translation>Setup is complete. Close the setup program.</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="401"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="379"/> <source>The installation is complete. Close the installer.</source> <translation>The installation is complete. Close the installer.</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="403"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="381"/> <source>Cancel setup without changing the system.</source> <translation>Cancel setup without changing the system.</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="404"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="382"/> <source>Cancel installation without changing the system.</source> <translation>Cancel installation without changing the system.</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="414"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="392"/> <source>&Next</source> <translation>&Next</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="419"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="397"/> <source>&Back</source> <translation>&Back</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="425"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="403"/> <source>&Done</source> <translation>&Done</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="444"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="422"/> <source>&Cancel</source> <translation>&Cancel</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="517"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="495"/> <source>Cancel setup?</source> <translation>Cancel setup?</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="517"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="495"/> <source>Cancel installation?</source> <translation>Cancel installation?</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="518"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="496"/> <source>Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost.</source> <translation>Do you really want to cancel the current setup process? The setup program will quit and all changes will be lost.</translation> </message> <message> - <location filename="../src/libcalamaresui/ViewManager.cpp" line="520"/> + <location filename="../src/libcalamaresui/ViewManager.cpp" line="498"/> <source>Do you really want to cancel the current install process? The installer will quit and all changes will be lost.</source> <translation>Do you really want to cancel the current install process? @@ -470,22 +465,22 @@ The installer will quit and all changes will be lost.</translation> <context> <name>CalamaresPython::Helper</name> <message> - <location filename="../src/libcalamares/PythonHelper.cpp" line="294"/> + <location filename="../src/libcalamares/PythonHelper.cpp" line="302"/> <source>Unknown exception type</source> <translation>Unknown exception type</translation> </message> <message> - <location filename="../src/libcalamares/PythonHelper.cpp" line="312"/> + <location filename="../src/libcalamares/PythonHelper.cpp" line="320"/> <source>unparseable Python error</source> <translation>unparseable Python error</translation> </message> <message> - <location filename="../src/libcalamares/PythonHelper.cpp" line="356"/> + <location filename="../src/libcalamares/PythonHelper.cpp" line="364"/> <source>unparseable Python traceback</source> <translation>unparseable Python traceback</translation> </message> <message> - <location filename="../src/libcalamares/PythonHelper.cpp" line="363"/> + <location filename="../src/libcalamares/PythonHelper.cpp" line="371"/> <source>Unfetchable Python error.</source> <translation>Unfetchable Python error.</translation> </message> @@ -537,149 +532,149 @@ The installer will quit and all changes will be lost.</translation> <translation>Form</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="139"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="137"/> <source>Select storage de&vice:</source> <translation>Select storage de&vice:</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="140"/> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="996"/> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1042"/> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1133"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="138"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1014"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1062"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1159"/> <source>Current:</source> <translation>Current:</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="141"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="139"/> <source>After:</source> <translation>After:</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1671"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1723"/> <source><strong>Manual partitioning</strong><br/>You can create or resize partitions yourself.</source> <translation><strong>Manual partitioning</strong><br/>You can create or resize partitions yourself.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="861"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="879"/> <source>Reuse %1 as home partition for %2.</source> <translation>Reuse %1 as home partition for %2.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="997"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1015"/> <source><strong>Select a partition to shrink, then drag the bottom bar to resize</strong></source> <translation><strong>Select a partition to shrink, then drag the bottom bar to resize</strong></translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1014"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1033"/> <source>%1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4.</source> <translation>%1 will be shrunk to %2MiB and a new %3MiB partition will be created for %4.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1071"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1091"/> <source>Boot loader location:</source> <translation>Boot loader location:</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1124"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1150"/> <source><strong>Select a partition to install on</strong></source> <translation><strong>Select a partition to install on</strong></translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1183"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1209"/> <source>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1.</source> <translation>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1191"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1217"/> <source>The EFI system partition at %1 will be used for starting %2.</source> <translation>The EFI system partition at %1 will be used for starting %2.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1199"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1225"/> <source>EFI system partition:</source> <translation>EFI system partition:</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1334"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1385"/> <source>This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.</source> <translation>This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1339"/> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1376"/> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1398"/> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1423"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1390"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1427"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1449"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1474"/> <source><strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device.</source> <translation><strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1343"/> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1372"/> <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1394"/> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1419"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1423"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1445"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1470"/> <source><strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1.</source> <translation><strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1347"/> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1381"/> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1402"/> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1427"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1398"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1432"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1453"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1478"/> <source><strong>Replace a partition</strong><br/>Replaces a partition with %1.</source> <translation><strong>Replace a partition</strong><br/>Replaces a partition with %1.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1366"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1417"/> <source>This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.</source> <translation>This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1389"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1440"/> <source>This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.</source> <translation>This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1414"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1465"/> <source>This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.</source> <translation>This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1486"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1537"/> <source>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></source> <translation>This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/></translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1509"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1560"/> <source>This storage device has one of its partitions <strong>mounted</strong>.</source> <translation>This storage device has one of its partitions <strong>mounted</strong>.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1514"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1565"/> <source>This storage device is a part of an <strong>inactive RAID</strong> device.</source> <translation>This storage device is a part of an <strong>inactive RAID</strong> device.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1641"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1692"/> <source>No Swap</source> <translation>No Swap</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1649"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1701"/> <source>Reuse Swap</source> <translation>Reuse Swap</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1652"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1704"/> <source>Swap (no Hibernate)</source> <translation>Swap (no Hibernate)</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1655"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1707"/> <source>Swap (with Hibernate)</source> <translation>Swap (with Hibernate)</translation> </message> <message> - <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1658"/> + <location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1710"/> <source>Swap to file</source> <translation>Swap to file</translation> </message> @@ -687,42 +682,42 @@ The installer will quit and all changes will be lost.</translation> <context> <name>ClearMountsJob</name> <message> - <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="259"/> + <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="272"/> <source>Successfully unmounted %1.</source> <translation>Successfully unmounted %1.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="266"/> + <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="279"/> <source>Successfully disabled swap %1.</source> <translation>Successfully disabled swap %1.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="292"/> + <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="305"/> <source>Successfully cleared swap %1.</source> <translation>Successfully cleared swap %1.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="306"/> + <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="319"/> <source>Successfully closed mapper device %1.</source> <translation>Successfully closed mapper device %1.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="319"/> + <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="332"/> <source>Successfully disabled volume group %1.</source> <translation>Successfully disabled volume group %1.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="358"/> + <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="371"/> <source>Clear mounts for partitioning operations on %1</source> <translation>Clear mounts for partitioning operations on %1</translation> </message> <message> - <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="364"/> + <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="377"/> <source>Clearing mounts for partitioning operations on %1.</source> <translation>Clearing mounts for partitioning operations on %1.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="383"/> + <location filename="../src/modules/partition/jobs/ClearMountsJob.cpp" line="396"/> <source>Cleared all mounts for %1</source> <translation>Cleared all mounts for %1</translation> </message> @@ -730,22 +725,17 @@ The installer will quit and all changes will be lost.</translation> <context> <name>ClearTempMountsJob</name> <message> - <location filename="../src/modules/partition/jobs/ClearTempMountsJob.cpp" line="32"/> + <location filename="../src/modules/partition/jobs/ClearTempMountsJob.cpp" line="33"/> <source>Clear all temporary mounts.</source> <translation>Clear all temporary mounts.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/ClearTempMountsJob.cpp" line="39"/> + <location filename="../src/modules/partition/jobs/ClearTempMountsJob.cpp" line="40"/> <source>Clearing all temporary mounts.</source> <translation>Clearing all temporary mounts.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/ClearTempMountsJob.cpp" line="52"/> - <source>Cannot get list of temporary mounts.</source> - <translation>Cannot get list of temporary mounts.</translation> - </message> - <message> - <location filename="../src/modules/partition/jobs/ClearTempMountsJob.cpp" line="97"/> + <location filename="../src/modules/partition/jobs/ClearTempMountsJob.cpp" line="70"/> <source>Cleared all temporary mounts.</source> <translation>Cleared all temporary mounts.</translation> </message> @@ -782,17 +772,17 @@ The installer will quit and all changes will be lost.</translation> <translation>Set keyboard layout to %1/%2.</translation> </message> <message> - <location filename="../src/modules/locale/Config.cpp" line="342"/> + <location filename="../src/modules/locale/Config.cpp" line="353"/> <source>Set timezone to %1/%2.</source> <translation>Set timezone to %1/%2.</translation> </message> <message> - <location filename="../src/modules/locale/Config.cpp" line="380"/> + <location filename="../src/modules/locale/Config.cpp" line="391"/> <source>The system language will be set to %1.</source> <translation>The system language will be set to %1.</translation> </message> <message> - <location filename="../src/modules/locale/Config.cpp" line="387"/> + <location filename="../src/modules/locale/Config.cpp" line="398"/> <source>The numbers and dates locale will be set to %1.</source> <translation>The numbers and dates locale will be set to %1.</translation> </message> @@ -962,22 +952,22 @@ The installer will quit and all changes will be lost.</translation> <translation>The installation of %1 is complete.</translation> </message> <message> - <location filename="../src/modules/packagechooser/Config.cpp" line="86"/> + <location filename="../src/modules/packagechooser/Config.cpp" line="111"/> <source>Package Selection</source> <translation>Package Selection</translation> </message> <message> - <location filename="../src/modules/packagechooser/Config.cpp" line="88"/> + <location filename="../src/modules/packagechooser/Config.cpp" line="113"/> <source>Please pick a product from the list. The selected product will be installed.</source> <translation>Please pick a product from the list. The selected product will be installed.</translation> </message> <message> - <location filename="../src/modules/packagechooser/Config.cpp" line="177"/> + <location filename="../src/modules/packagechooser/Config.cpp" line="243"/> <source>Install option: <strong>%1</strong></source> <translation>Install option: <strong>%1</strong></translation> </message> <message> - <location filename="../src/modules/packagechooser/Config.cpp" line="177"/> + <location filename="../src/modules/packagechooser/Config.cpp" line="243"/> <source>None</source> <translation>None</translation> </message> @@ -1029,8 +1019,8 @@ The installer will quit and all changes will be lost.</translation> </message> <message> <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="71"/> - <source>&Primary</source> - <translation>&Primary</translation> + <source>Primar&y</source> + <translation type="unfinished"/> </message> <message> <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="81"/> @@ -1053,86 +1043,91 @@ The installer will quit and all changes will be lost.</translation> <translation>&Mount Point:</translation> </message> <message> - <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="192"/> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="191"/> <source>Flags:</source> <translation>Flags:</translation> </message> <message> - <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="231"/> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="224"/> <source>Label for the filesystem</source> <translation>Label for the filesystem</translation> </message> <message> - <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="241"/> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.ui" line="234"/> <source>FS Label:</source> <translation>FS Label:</translation> </message> <message> - <location filename="../src/modules/partition/gui/CreatePartitionDialog.cpp" line="65"/> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.cpp" line="66"/> <source>En&crypt</source> <translation>En&crypt</translation> </message> <message> - <location filename="../src/modules/partition/gui/CreatePartitionDialog.cpp" line="191"/> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.cpp" line="194"/> <source>Logical</source> <translation>Logical</translation> </message> <message> - <location filename="../src/modules/partition/gui/CreatePartitionDialog.cpp" line="196"/> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.cpp" line="199"/> <source>Primary</source> <translation>Primary</translation> </message> <message> - <location filename="../src/modules/partition/gui/CreatePartitionDialog.cpp" line="215"/> + <location filename="../src/modules/partition/gui/CreatePartitionDialog.cpp" line="218"/> <source>GPT</source> <translation>GPT</translation> </message> <message> - <location filename="../src/modules/partition/gui/CreatePartitionDialog.cpp" line="301"/> + <location filename="../src/modules/partition/gui/PartitionDialogHelpers.cpp" line="91"/> <source>Mountpoint already in use. Please select another one.</source> <translation>Mountpoint already in use. Please select another one.</translation> </message> + <message> + <location filename="../src/modules/partition/gui/PartitionDialogHelpers.cpp" line="96"/> + <source>Mountpoint must start with a <tt>/</tt>.</source> + <translation type="unfinished"/> + </message> </context> <context> <name>CreatePartitionJob</name> <message> - <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="113"/> + <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="187"/> <source>Create new %1MiB partition on %3 (%2) with entries %4.</source> <translation>Create new %1MiB partition on %3 (%2) with entries %4.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="121"/> + <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="195"/> <source>Create new %1MiB partition on %3 (%2).</source> <translation>Create new %1MiB partition on %3 (%2).</translation> </message> <message> - <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="128"/> + <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="202"/> <source>Create new %2MiB partition on %4 (%3) with file system %1.</source> <translation>Create new %2MiB partition on %4 (%3) with file system %1.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="145"/> + <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="219"/> <source>Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>.</source> <translation>Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2) with entries <em>%4</em>.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="154"/> + <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="228"/> <source>Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2).</source> <translation>Create new <strong>%1MiB</strong> partition on <strong>%3</strong> (%2).</translation> </message> <message> - <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="161"/> + <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="235"/> <source>Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>.</source> <translation>Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <strong>%1</strong>.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="186"/> - <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="189"/> + <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="260"/> + <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="263"/> <source>Creating new %1 partition on %2.</source> <translation>Creating new %1 partition on %2.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="201"/> + <location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="280"/> <source>The installer failed to create partition on disk '%1'.</source> <translation>The installer failed to create partition on disk '%1'.</translation> </message> @@ -1168,22 +1163,22 @@ The installer will quit and all changes will be lost.</translation> <context> <name>CreatePartitionTableJob</name> <message> - <location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="39"/> + <location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="41"/> <source>Create new %1 partition table on %2.</source> <translation>Create new %1 partition table on %2.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="47"/> + <location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="49"/> <source>Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3).</source> <translation>Create new <strong>%1</strong> partition table on <strong>%2</strong> (%3).</translation> </message> <message> - <location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="57"/> + <location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="59"/> <source>Creating new %1 partition table on %2.</source> <translation>Creating new %1 partition table on %2.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="67"/> + <location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="88"/> <source>The installer failed to create a partition table on %1.</source> <translation>The installer failed to create a partition table on %1.</translation> </message> @@ -1191,33 +1186,33 @@ The installer will quit and all changes will be lost.</translation> <context> <name>CreateUserJob</name> <message> - <location filename="../src/modules/users/CreateUserJob.cpp" line="36"/> + <location filename="../src/modules/users/CreateUserJob.cpp" line="35"/> <source>Create user %1</source> <translation>Create user %1</translation> </message> <message> - <location filename="../src/modules/users/CreateUserJob.cpp" line="43"/> + <location filename="../src/modules/users/CreateUserJob.cpp" line="42"/> <source>Create user <strong>%1</strong>.</source> <translation>Create user <strong>%1</strong>.</translation> </message> <message> - <location filename="../src/modules/users/CreateUserJob.cpp" line="126"/> + <location filename="../src/modules/users/CreateUserJob.cpp" line="125"/> <source>Preserving home directory</source> <translation>Preserving home directory</translation> </message> <message> - <location filename="../src/modules/users/CreateUserJob.cpp" line="50"/> - <location filename="../src/modules/users/CreateUserJob.cpp" line="143"/> + <location filename="../src/modules/users/CreateUserJob.cpp" line="49"/> + <location filename="../src/modules/users/CreateUserJob.cpp" line="142"/> <source>Creating user %1</source> <translation>Creating user %1</translation> </message> <message> - <location filename="../src/modules/users/CreateUserJob.cpp" line="151"/> + <location filename="../src/modules/users/CreateUserJob.cpp" line="150"/> <source>Configuring user %1</source> <translation>Configuring user %1</translation> </message> <message> - <location filename="../src/modules/users/CreateUserJob.cpp" line="159"/> + <location filename="../src/modules/users/CreateUserJob.cpp" line="158"/> <source>Setting file permissions</source> <translation>Setting file permissions</translation> </message> @@ -1233,22 +1228,22 @@ The installer will quit and all changes will be lost.</translation> <context> <name>CreateVolumeGroupJob</name> <message> - <location filename="../src/modules/partition/jobs/CreateVolumeGroupJob.cpp" line="31"/> + <location filename="../src/modules/partition/jobs/CreateVolumeGroupJob.cpp" line="32"/> <source>Create new volume group named %1.</source> <translation>Create new volume group named %1.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/CreateVolumeGroupJob.cpp" line="37"/> + <location filename="../src/modules/partition/jobs/CreateVolumeGroupJob.cpp" line="38"/> <source>Create new volume group named <strong>%1</strong>.</source> <translation>Create new volume group named <strong>%1</strong>.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/CreateVolumeGroupJob.cpp" line="43"/> + <location filename="../src/modules/partition/jobs/CreateVolumeGroupJob.cpp" line="44"/> <source>Creating new volume group named %1.</source> <translation>Creating new volume group named %1.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/CreateVolumeGroupJob.cpp" line="55"/> + <location filename="../src/modules/partition/jobs/CreateVolumeGroupJob.cpp" line="51"/> <source>The installer failed to create a volume group named '%1'.</source> <translation>The installer failed to create a volume group named '%1'.</translation> </message> @@ -1256,18 +1251,18 @@ The installer will quit and all changes will be lost.</translation> <context> <name>DeactivateVolumeGroupJob</name> <message> - <location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="24"/> - <location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="36"/> + <location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="26"/> + <location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="38"/> <source>Deactivate volume group named %1.</source> <translation>Deactivate volume group named %1.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="30"/> + <location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="32"/> <source>Deactivate volume group named <strong>%1</strong>.</source> <translation>Deactivate volume group named <strong>%1</strong>.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="48"/> + <location filename="../src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp" line="46"/> <source>The installer failed to deactivate a volume group named %1.</source> <translation>The installer failed to deactivate a volume group named %1.</translation> </message> @@ -1275,22 +1270,22 @@ The installer will quit and all changes will be lost.</translation> <context> <name>DeletePartitionJob</name> <message> - <location filename="../src/modules/partition/jobs/DeletePartitionJob.cpp" line="71"/> + <location filename="../src/modules/partition/jobs/DeletePartitionJob.cpp" line="73"/> <source>Delete partition %1.</source> <translation>Delete partition %1.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/DeletePartitionJob.cpp" line="78"/> + <location filename="../src/modules/partition/jobs/DeletePartitionJob.cpp" line="80"/> <source>Delete partition <strong>%1</strong>.</source> <translation>Delete partition <strong>%1</strong>.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/DeletePartitionJob.cpp" line="85"/> + <location filename="../src/modules/partition/jobs/DeletePartitionJob.cpp" line="87"/> <source>Deleting partition %1.</source> <translation>Deleting partition %1.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/DeletePartitionJob.cpp" line="103"/> + <location filename="../src/modules/partition/jobs/DeletePartitionJob.cpp" line="102"/> <source>The installer failed to delete partition %1.</source> <translation>The installer failed to delete partition %1.</translation> </message> @@ -1298,32 +1293,32 @@ The installer will quit and all changes will be lost.</translation> <context> <name>DeviceInfoWidget</name> <message> - <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="97"/> + <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="143"/> <source>This device has a <strong>%1</strong> partition table.</source> <translation>This device has a <strong>%1</strong> partition table.</translation> </message> <message> - <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="104"/> + <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="97"/> <source>This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem.</source> <translation>This is a <strong>loop</strong> device.<br><br>It is a pseudo-device with no partition table that makes a file accessible as a block device. This kind of setup usually only contains a single filesystem.</translation> </message> <message> - <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="111"/> + <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="108"/> <source>This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page.</source> <translation>This installer <strong>cannot detect a partition table</strong> on the selected storage device.<br><br>The device either has no partition table, or the partition table is corrupted or of an unknown type.<br>This installer can create a new partition table for you, either automatically, or through the manual partitioning page.</translation> </message> <message> - <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="121"/> + <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="91"/> <source><br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment.</source> <translation><br><br>This is the recommended partition table type for modern systems which start from an <strong>EFI</strong> boot environment.</translation> </message> <message> - <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="127"/> + <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="80"/> <source><br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions.</source> <translation><br><br>This partition table type is only advisable on older systems which start from a <strong>BIOS</strong> boot environment. GPT is recommended in most other cases.<br><br><strong>Warning:</strong> the MBR partition table is an obsolete MS-DOS era standard.<br>Only 4 <em>primary</em> partitions may be created, and of those 4, one can be an <em>extended</em> partition, which may in turn contain many <em>logical</em> partitions.</translation> </message> <message> - <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="140"/> + <location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="151"/> <source>The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred.</source> <translation>The type of <strong>partition table</strong> on the selected storage device.<br><br>The only way to change the partition table type is to erase and recreate the partition table from scratch, which destroys all data on the storage device.<br>This installer will keep the current partition table unless you explicitly choose otherwise.<br>If unsure, on modern systems GPT is preferred.</translation> </message> @@ -1331,13 +1326,13 @@ The installer will quit and all changes will be lost.</translation> <context> <name>DeviceModel</name> <message> - <location filename="../src/modules/partition/core/DeviceModel.cpp" line="84"/> + <location filename="../src/modules/partition/core/DeviceModel.cpp" line="82"/> <source>%1 - %2 (%3)</source> <extracomment>device[name] - size[number] (device-node[name])</extracomment> <translation>%1 - %2 (%3)</translation> </message> <message> - <location filename="../src/modules/partition/core/DeviceModel.cpp" line="95"/> + <location filename="../src/modules/partition/core/DeviceModel.cpp" line="93"/> <source>%1 - (%2)</source> <extracomment>device[name] - (device-node[name])</extracomment> <translation>%1 - (%2)</translation> @@ -1364,7 +1359,7 @@ The installer will quit and all changes will be lost.</translation> <context> <name>DummyCppJob</name> <message> - <location filename="../src/modules/dummycpp/DummyCppJob.cpp" line="37"/> + <location filename="../src/modules/dummycpp/DummyCppJob.cpp" line="36"/> <source>Dummy C++ Job</source> <translation>Dummy C++ Job</translation> </message> @@ -1378,8 +1373,8 @@ The installer will quit and all changes will be lost.</translation> </message> <message> <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="54"/> - <source>Content:</source> - <translation>Content:</translation> + <source>Con&tent:</source> + <translation type="unfinished"/> </message> <message> <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="64"/> @@ -1402,40 +1397,35 @@ The installer will quit and all changes will be lost.</translation> <translation>&Mount Point:</translation> </message> <message> - <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="123"/> + <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="129"/> <source>Si&ze:</source> <translation>Si&ze:</translation> </message> <message> - <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="133"/> + <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="139"/> <source> MiB</source> <translation> MiB</translation> </message> <message> - <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="140"/> + <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="146"/> <source>Fi&le System:</source> <translation>Fi&le System:</translation> </message> <message> - <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="153"/> + <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="159"/> <source>Flags:</source> <translation>Flags:</translation> </message> <message> - <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="186"/> + <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="179"/> <source>Label for the filesystem</source> <translation>Label for the filesystem</translation> </message> <message> - <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="196"/> + <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.ui" line="189"/> <source>FS Label:</source> <translation>FS Label:</translation> </message> - <message> - <location filename="../src/modules/partition/gui/EditExistingPartitionDialog.cpp" line="291"/> - <source>Mountpoint already in use. Please select another one.</source> - <translation>Mountpoint already in use. Please select another one.</translation> - </message> </context> <context> <name>EncryptWidget</name> @@ -1450,76 +1440,94 @@ The installer will quit and all changes will be lost.</translation> <translation>En&crypt system</translation> </message> <message> - <location filename="../src/modules/partition/gui/EncryptWidget.ui" line="46"/> + <location filename="../src/modules/partition/gui/EncryptWidget.ui" line="43"/> + <source>Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../src/modules/partition/gui/EncryptWidget.ui" line="59"/> <source>Passphrase</source> <translation>Passphrase</translation> </message> <message> - <location filename="../src/modules/partition/gui/EncryptWidget.ui" line="56"/> + <location filename="../src/modules/partition/gui/EncryptWidget.ui" line="69"/> <source>Confirm passphrase</source> <translation>Confirm passphrase</translation> </message> <message> - <location filename="../src/modules/partition/gui/EncryptWidget.cpp" line="104"/> - <location filename="../src/modules/partition/gui/EncryptWidget.cpp" line="114"/> + <location filename="../src/modules/partition/gui/EncryptWidget.cpp" line="134"/> + <location filename="../src/modules/partition/gui/EncryptWidget.cpp" line="144"/> <source>Please enter the same passphrase in both boxes.</source> <translation>Please enter the same passphrase in both boxes.</translation> </message> </context> + <context> + <name>ErrorDialog</name> + <message> + <location filename="../src/libcalamaresui/widgets/ErrorDialog.ui" line="36"/> + <source>Details:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../src/libcalamaresui/widgets/ErrorDialog.ui" line="52"/> + <source>Would you like to paste the install log to the web?</source> + <translation type="unfinished">Would you like to paste the install log to the web?</translation> + </message> + </context> <context> <name>FillGlobalStorageJob</name> <message> - <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="167"/> + <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="172"/> <source>Set partition information</source> <translation>Set partition information</translation> </message> <message> - <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="196"/> + <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="201"/> <source>Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em></source> <translation>Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em></translation> </message> <message> - <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="204"/> + <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="209"/> <source>Install %1 on <strong>new</strong> %2 system partition.</source> <translation>Install %1 on <strong>new</strong> %2 system partition.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="213"/> + <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="218"/> <source>Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>.</source> <translation>Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong> and features <em>%3</em>.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="221"/> + <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="226"/> <source>Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3.</source> <translation>Set up <strong>new</strong> %2 partition with mount point <strong>%1</strong>%3.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="235"/> + <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="240"/> <source>Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>.</source> <translation>Install %2 on %3 system partition <strong>%1</strong> with features <em>%4</em>.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="254"/> + <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="259"/> <source>Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>.</source> <translation>Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong> and features <em>%4</em>.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="263"/> + <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="268"/> <source>Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4.</source> <translation>Set up %3 partition <strong>%1</strong> with mount point <strong>%2</strong>%4.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="244"/> + <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="249"/> <source>Install %2 on %3 system partition <strong>%1</strong>.</source> <translation>Install %2 on %3 system partition <strong>%1</strong>.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="278"/> + <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="283"/> <source>Install boot loader on <strong>%1</strong>.</source> <translation>Install boot loader on <strong>%1</strong>.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="287"/> + <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="292"/> <source>Setting up mount points.</source> <translation>Setting up mount points.</translation> </message> @@ -1586,22 +1594,22 @@ The installer will quit and all changes will be lost.</translation> <context> <name>FormatPartitionJob</name> <message> - <location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="36"/> + <location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="39"/> <source>Format partition %1 (file system: %2, size: %3 MiB) on %4.</source> <translation>Format partition %1 (file system: %2, size: %3 MiB) on %4.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="47"/> + <location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="50"/> <source>Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>.</source> <translation>Format <strong>%3MiB</strong> partition <strong>%1</strong> with file system <strong>%2</strong>.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="58"/> + <location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="61"/> <source>Formatting partition %1 with file system %2.</source> <translation>Formatting partition %1 with file system %2.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="72"/> + <location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="73"/> <source>The installer failed to format partition %1 on disk '%2'.</source> <translation>The installer failed to format partition %1 on disk '%2'.</translation> </message> @@ -1716,7 +1724,7 @@ The installer will quit and all changes will be lost.</translation> <context> <name>InitcpioJob</name> <message> - <location filename="../src/modules/initcpio/InitcpioJob.cpp" line="31"/> + <location filename="../src/modules/initcpio/InitcpioJob.cpp" line="32"/> <source>Creating initramfs with mkinitcpio.</source> <translation>Creating initramfs with mkinitcpio.</translation> </message> @@ -1732,17 +1740,17 @@ The installer will quit and all changes will be lost.</translation> <context> <name>InteractiveTerminalPage</name> <message> - <location filename="../src/modules/interactiveterminal/InteractiveTerminalPage.cpp" line="45"/> + <location filename="../src/modules/interactiveterminal/InteractiveTerminalPage.cpp" line="46"/> <source>Konsole not installed</source> <translation>Konsole not installed</translation> </message> <message> - <location filename="../src/modules/interactiveterminal/InteractiveTerminalPage.cpp" line="45"/> + <location filename="../src/modules/interactiveterminal/InteractiveTerminalPage.cpp" line="47"/> <source>Please install KDE Konsole and try again!</source> <translation>Please install KDE Konsole and try again!</translation> </message> <message> - <location filename="../src/modules/interactiveterminal/InteractiveTerminalPage.cpp" line="106"/> + <location filename="../src/modules/interactiveterminal/InteractiveTerminalPage.cpp" line="118"/> <source>Executing script: &nbsp;<code>%1</code></source> <translation>Executing script: &nbsp;<code>%1</code></translation> </message> @@ -1794,6 +1802,29 @@ The installer will quit and all changes will be lost.</translation> <translation>&OK</translation> </message> </context> + <context> + <name>LOSHJob</name> + <message> + <location filename="../src/modules/luksopenswaphookcfg/LOSHJob.cpp" line="36"/> + <source>Configuring encrypted swap.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../src/modules/luksopenswaphookcfg/LOSHJob.cpp" line="88"/> + <source>No target system available.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../src/modules/luksopenswaphookcfg/LOSHJob.cpp" line="96"/> + <source>No rootMountPoint is set.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../src/modules/luksopenswaphookcfg/LOSHJob.cpp" line="101"/> + <source>No configFilePath is set.</source> + <translation type="unfinished"/> + </message> + </context> <context> <name>LicensePage</name> <message> @@ -2513,12 +2544,12 @@ The installer will quit and all changes will be lost.</translation> <context> <name>PackageModel</name> <message> - <location filename="../src/modules/netinstall/PackageModel.cpp" line="168"/> + <location filename="../src/modules/netinstall/PackageModel.cpp" line="205"/> <source>Name</source> <translation>Name</translation> </message> <message> - <location filename="../src/modules/netinstall/PackageModel.cpp" line="168"/> + <location filename="../src/modules/netinstall/PackageModel.cpp" line="205"/> <source>Description</source> <translation>Description</translation> </message> @@ -2641,42 +2672,42 @@ The installer will quit and all changes will be lost.</translation> <context> <name>PartitionLabelsView</name> <message> - <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="190"/> + <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="189"/> <source>Root</source> <translation>Root</translation> </message> <message> - <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="194"/> + <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="193"/> <source>Home</source> <translation>Home</translation> </message> <message> - <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="198"/> + <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="197"/> <source>Boot</source> <translation>Boot</translation> </message> <message> - <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="203"/> + <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="202"/> <source>EFI system</source> <translation>EFI system</translation> </message> <message> - <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="207"/> + <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="206"/> <source>Swap</source> <translation>Swap</translation> </message> <message> - <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="211"/> + <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="210"/> <source>New partition for %1</source> <translation>New partition for %1</translation> </message> <message> - <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="215"/> + <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="214"/> <source>New partition</source> <translation>New partition</translation> </message> <message> - <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="239"/> + <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="238"/> <source>%1 %2</source> <extracomment>size[number] filesystem[name]</extracomment> <translation>%1 %2</translation> @@ -2685,39 +2716,39 @@ The installer will quit and all changes will be lost.</translation> <context> <name>PartitionModel</name> <message> - <location filename="../src/modules/partition/core/PartitionModel.cpp" line="159"/> - <location filename="../src/modules/partition/core/PartitionModel.cpp" line="203"/> + <location filename="../src/modules/partition/core/PartitionModel.cpp" line="157"/> + <location filename="../src/modules/partition/core/PartitionModel.cpp" line="201"/> <source>Free Space</source> <translation>Free Space</translation> </message> <message> - <location filename="../src/modules/partition/core/PartitionModel.cpp" line="163"/> - <location filename="../src/modules/partition/core/PartitionModel.cpp" line="207"/> + <location filename="../src/modules/partition/core/PartitionModel.cpp" line="161"/> + <location filename="../src/modules/partition/core/PartitionModel.cpp" line="205"/> <source>New partition</source> <translation>New partition</translation> </message> <message> - <location filename="../src/modules/partition/core/PartitionModel.cpp" line="300"/> + <location filename="../src/modules/partition/core/PartitionModel.cpp" line="298"/> <source>Name</source> <translation>Name</translation> </message> <message> - <location filename="../src/modules/partition/core/PartitionModel.cpp" line="302"/> + <location filename="../src/modules/partition/core/PartitionModel.cpp" line="300"/> <source>File System</source> <translation>File System</translation> </message> <message> - <location filename="../src/modules/partition/core/PartitionModel.cpp" line="304"/> + <location filename="../src/modules/partition/core/PartitionModel.cpp" line="302"/> <source>File System Label</source> <translation>File System Label</translation> </message> <message> - <location filename="../src/modules/partition/core/PartitionModel.cpp" line="306"/> + <location filename="../src/modules/partition/core/PartitionModel.cpp" line="304"/> <source>Mount Point</source> <translation>Mount Point</translation> </message> <message> - <location filename="../src/modules/partition/core/PartitionModel.cpp" line="308"/> + <location filename="../src/modules/partition/core/PartitionModel.cpp" line="306"/> <source>Size</source> <translation>Size</translation> </message> @@ -2813,82 +2844,82 @@ The installer will quit and all changes will be lost.</translation> <translation>Partitions</translation> </message> <message> - <location filename="../src/modules/partition/PartitionViewStep.cpp" line="303"/> + <location filename="../src/modules/partition/PartitionViewStep.cpp" line="297"/> <source>Current:</source> <translation>Current:</translation> </message> <message> - <location filename="../src/modules/partition/PartitionViewStep.cpp" line="321"/> + <location filename="../src/modules/partition/PartitionViewStep.cpp" line="315"/> <source>After:</source> <translation>After:</translation> </message> <message> - <location filename="../src/modules/partition/PartitionViewStep.cpp" line="530"/> + <location filename="../src/modules/partition/PartitionViewStep.cpp" line="524"/> <source>No EFI system partition configured</source> <translation>No EFI system partition configured</translation> </message> <message> - <location filename="../src/modules/partition/PartitionViewStep.cpp" line="534"/> + <location filename="../src/modules/partition/PartitionViewStep.cpp" line="528"/> <source>EFI system partition configured incorrectly</source> <translation>EFI system partition configured incorrectly</translation> </message> <message> - <location filename="../src/modules/partition/PartitionViewStep.cpp" line="539"/> + <location filename="../src/modules/partition/PartitionViewStep.cpp" line="533"/> <source>An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem.</source> <translation>An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a suitable filesystem.</translation> </message> <message> - <location filename="../src/modules/partition/PartitionViewStep.cpp" line="550"/> + <location filename="../src/modules/partition/PartitionViewStep.cpp" line="544"/> <source>The filesystem must be mounted on <strong>%1</strong>.</source> <translation>The filesystem must be mounted on <strong>%1</strong>.</translation> </message> <message> - <location filename="../src/modules/partition/PartitionViewStep.cpp" line="556"/> + <location filename="../src/modules/partition/PartitionViewStep.cpp" line="550"/> <source>The filesystem must have type FAT32.</source> <translation>The filesystem must have type FAT32.</translation> </message> <message> - <location filename="../src/modules/partition/PartitionViewStep.cpp" line="564"/> + <location filename="../src/modules/partition/PartitionViewStep.cpp" line="558"/> <source>The filesystem must be at least %1 MiB in size.</source> <translation>The filesystem must be at least %1 MiB in size.</translation> </message> <message> - <location filename="../src/modules/partition/PartitionViewStep.cpp" line="570"/> + <location filename="../src/modules/partition/PartitionViewStep.cpp" line="564"/> <source>The filesystem must have flag <strong>%1</strong> set.</source> <translation>The filesystem must have flag <strong>%1</strong> set.</translation> </message> <message> - <location filename="../src/modules/partition/PartitionViewStep.cpp" line="576"/> + <location filename="../src/modules/partition/PartitionViewStep.cpp" line="570"/> <source>You can continue without setting up an EFI system partition but your system may fail to start.</source> <translation>You can continue without setting up an EFI system partition but your system may fail to start.</translation> </message> <message> - <location filename="../src/modules/partition/PartitionViewStep.cpp" line="593"/> + <location filename="../src/modules/partition/PartitionViewStep.cpp" line="587"/> <source>Option to use GPT on BIOS</source> <translation>Option to use GPT on BIOS</translation> </message> <message> - <location filename="../src/modules/partition/PartitionViewStep.cpp" line="594"/> + <location filename="../src/modules/partition/PartitionViewStep.cpp" line="588"/> <source>A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>bios_grub</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT.</source> <translation>A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>bios_grub</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT.</translation> </message> <message> - <location filename="../src/modules/partition/PartitionViewStep.cpp" line="626"/> + <location filename="../src/modules/partition/PartitionViewStep.cpp" line="620"/> <source>Boot partition not encrypted</source> <translation>Boot partition not encrypted</translation> </message> <message> - <location filename="../src/modules/partition/PartitionViewStep.cpp" line="627"/> + <location filename="../src/modules/partition/PartitionViewStep.cpp" line="621"/> <source>A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window.</source> <translation>A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window.</translation> </message> <message> - <location filename="../src/modules/partition/PartitionViewStep.cpp" line="714"/> + <location filename="../src/modules/partition/PartitionViewStep.cpp" line="712"/> <source>has at least one disk device available.</source> <translation>has at least one disk device available.</translation> </message> <message> - <location filename="../src/modules/partition/PartitionViewStep.cpp" line="715"/> + <location filename="../src/modules/partition/PartitionViewStep.cpp" line="713"/> <source>There are no partitions to install on.</source> <translation>There are no partitions to install on.</translation> </message> @@ -2936,17 +2967,17 @@ The installer will quit and all changes will be lost.</translation> <context> <name>PreserveFiles</name> <message> - <location filename="../src/modules/preservefiles/PreserveFiles.cpp" line="79"/> + <location filename="../src/modules/preservefiles/PreserveFiles.cpp" line="53"/> <source>Saving files for later ...</source> <translation>Saving files for later ...</translation> </message> <message> - <location filename="../src/modules/preservefiles/PreserveFiles.cpp" line="118"/> + <location filename="../src/modules/preservefiles/PreserveFiles.cpp" line="61"/> <source>No files configured to save for later.</source> <translation>No files configured to save for later.</translation> </message> <message> - <location filename="../src/modules/preservefiles/PreserveFiles.cpp" line="172"/> + <location filename="../src/modules/preservefiles/PreserveFiles.cpp" line="85"/> <source>Not all of the configured files could be preserved.</source> <translation>Not all of the configured files could be preserved.</translation> </message> @@ -2954,14 +2985,14 @@ The installer will quit and all changes will be lost.</translation> <context> <name>ProcessResult</name> <message> - <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="425"/> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="309"/> <source> There was no output from the command.</source> <translation> There was no output from the command.</translation> </message> <message> - <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="426"/> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="310"/> <source> Output: </source> @@ -2970,52 +3001,52 @@ Output: </translation> </message> <message> - <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="430"/> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="314"/> <source>External command crashed.</source> <translation>External command crashed.</translation> </message> <message> - <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="431"/> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="315"/> <source>Command <i>%1</i> crashed.</source> <translation>Command <i>%1</i> crashed.</translation> </message> <message> - <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="436"/> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="320"/> <source>External command failed to start.</source> <translation>External command failed to start.</translation> </message> <message> - <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="437"/> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="321"/> <source>Command <i>%1</i> failed to start.</source> <translation>Command <i>%1</i> failed to start.</translation> </message> <message> - <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="441"/> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="325"/> <source>Internal error when starting command.</source> <translation>Internal error when starting command.</translation> </message> <message> - <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="442"/> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="326"/> <source>Bad parameters for process job call.</source> <translation>Bad parameters for process job call.</translation> </message> <message> - <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="446"/> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="330"/> <source>External command failed to finish.</source> <translation>External command failed to finish.</translation> </message> <message> - <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="447"/> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="331"/> <source>Command <i>%1</i> failed to finish in %2 seconds.</source> <translation>Command <i>%1</i> failed to finish in %2 seconds.</translation> </message> <message> - <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="454"/> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="338"/> <source>External command finished with errors.</source> <translation>External command finished with errors.</translation> </message> <message> - <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="455"/> + <location filename="../src/libcalamares/utils/CalamaresUtilsSystem.cpp" line="339"/> <source>Command <i>%1</i> finished with exit code %2.</source> <translation>Command <i>%1</i> finished with exit code %2.</translation> </message> @@ -3028,22 +3059,22 @@ Output: <translation>%1 (%2)</translation> </message> <message> - <location filename="../src/libcalamares/partition/FileSystem.cpp" line="28"/> + <location filename="../src/libcalamares/partition/FileSystem.cpp" line="33"/> <source>unknown</source> <translation>unknown</translation> </message> <message> - <location filename="../src/libcalamares/partition/FileSystem.cpp" line="30"/> + <location filename="../src/libcalamares/partition/FileSystem.cpp" line="35"/> <source>extended</source> <translation>extended</translation> </message> <message> - <location filename="../src/libcalamares/partition/FileSystem.cpp" line="32"/> + <location filename="../src/libcalamares/partition/FileSystem.cpp" line="37"/> <source>unformatted</source> <translation>unformatted</translation> </message> <message> - <location filename="../src/libcalamares/partition/FileSystem.cpp" line="34"/> + <location filename="../src/libcalamares/partition/FileSystem.cpp" line="39"/> <source>swap</source> <translation>swap</translation> </message> @@ -3078,12 +3109,12 @@ Output: <translation>Could not create new random file <pre>%1</pre>.</translation> </message> <message> - <location filename="../src/modules/packagechooser/PackageModel.cpp" line="63"/> + <location filename="../src/modules/packagechooser/PackageModel.cpp" line="74"/> <source>No product</source> <translation>No product</translation> </message> <message> - <location filename="../src/modules/packagechooser/PackageModel.cpp" line="71"/> + <location filename="../src/modules/packagechooser/PackageModel.cpp" line="82"/> <source>No description provided.</source> <translation>No description provided.</translation> </message> @@ -3093,7 +3124,7 @@ Output: <translation>(no mount point)</translation> </message> <message> - <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="41"/> + <location filename="../src/modules/partition/gui/PartitionLabelsView.cpp" line="40"/> <source>Unpartitioned space or unknown partition table</source> <translation>Unpartitioned space or unknown partition table</translation> </message> @@ -3119,18 +3150,18 @@ Output: <context> <name>RemoveVolumeGroupJob</name> <message> - <location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="24"/> - <location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="36"/> + <location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="26"/> + <location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="38"/> <source>Remove Volume Group named %1.</source> <translation>Remove Volume Group named %1.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="30"/> + <location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="32"/> <source>Remove Volume Group named <strong>%1</strong>.</source> <translation>Remove Volume Group named <strong>%1</strong>.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="48"/> + <location filename="../src/modules/partition/jobs/RemoveVolumeGroupJob.cpp" line="46"/> <source>The installer failed to remove a volume group named '%1'.</source> <translation>The installer failed to remove a volume group named '%1'.</translation> </message> @@ -3143,69 +3174,69 @@ Output: <translation>Form</translation> </message> <message> - <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="127"/> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="128"/> <source>Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition.</source> <translation>Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="149"/> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="150"/> <source>The selected item does not appear to be a valid partition.</source> <translation>The selected item does not appear to be a valid partition.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="157"/> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="158"/> <source>%1 cannot be installed on empty space. Please select an existing partition.</source> <translation>%1 cannot be installed on empty space. Please select an existing partition.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="167"/> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="168"/> <source>%1 cannot be installed on an extended partition. Please select an existing primary or logical partition.</source> <translation>%1 cannot be installed on an extended partition. Please select an existing primary or logical partition.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="177"/> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="178"/> <source>%1 cannot be installed on this partition.</source> <translation>%1 cannot be installed on this partition.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="183"/> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="184"/> <source>Data partition (%1)</source> <translation>Data partition (%1)</translation> </message> <message> - <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="203"/> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="204"/> <source>Unknown system partition (%1)</source> <translation>Unknown system partition (%1)</translation> </message> <message> - <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="207"/> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="208"/> <source>%1 system partition (%2)</source> <translation>%1 system partition (%2)</translation> </message> <message> - <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="218"/> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="220"/> <source><strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB.</source> <translation><strong>%4</strong><br/><br/>The partition %1 is too small for %2. Please select a partition with capacity at least %3 GiB.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="240"/> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="242"/> <source><strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1.</source> <translation><strong>%2</strong><br/><br/>An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="251"/> - <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="267"/> - <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="292"/> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="253"/> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="269"/> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="294"/> <source><strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost.</source> <translation><strong>%3</strong><br/><br/>%1 will be installed on %2.<br/><font color="red">Warning: </font>all data on partition %2 will be lost.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="259"/> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="261"/> <source>The EFI system partition at %1 will be used for starting %2.</source> <translation>The EFI system partition at %1 will be used for starting %2.</translation> </message> <message> - <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="275"/> + <location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="277"/> <source>EFI system partition:</source> <translation>EFI system partition:</translation> </message> @@ -3230,68 +3261,68 @@ Output: <context> <name>ResizeFSJob</name> <message> - <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="46"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="45"/> <source>Resize Filesystem Job</source> <translation>Resize Filesystem Job</translation> </message> <message> - <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="169"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="168"/> <source>Invalid configuration</source> <translation>Invalid configuration</translation> </message> <message> - <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="170"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="169"/> <source>The file-system resize job has an invalid configuration and will not run.</source> <translation>The file-system resize job has an invalid configuration and will not run.</translation> </message> <message> - <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="175"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="174"/> <source>KPMCore not Available</source> <translation>KPMCore not Available</translation> </message> <message> - <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="176"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="175"/> <source>Calamares cannot start KPMCore for the file-system resize job.</source> <translation>Calamares cannot start KPMCore for the file-system resize job.</translation> </message> <message> - <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="184"/> - <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="193"/> - <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="204"/> - <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="213"/> - <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="231"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="183"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="192"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="203"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="212"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="230"/> <source>Resize Failed</source> <translation>Resize Failed</translation> </message> <message> - <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="186"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="185"/> <source>The filesystem %1 could not be found in this system, and cannot be resized.</source> <translation>The filesystem %1 could not be found in this system, and cannot be resized.</translation> </message> <message> - <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="187"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="186"/> <source>The device %1 could not be found in this system, and cannot be resized.</source> <translation>The device %1 could not be found in this system, and cannot be resized.</translation> </message> <message> - <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="195"/> - <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="206"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="194"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="205"/> <source>The filesystem %1 cannot be resized.</source> <translation>The filesystem %1 cannot be resized.</translation> </message> <message> - <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="196"/> - <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="207"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="195"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="206"/> <source>The device %1 cannot be resized.</source> <translation>The device %1 cannot be resized.</translation> </message> <message> - <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="214"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="213"/> <source>The filesystem %1 must be resized, but cannot.</source> <translation>The filesystem %1 must be resized, but cannot.</translation> </message> <message> - <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="215"/> + <location filename="../src/modules/fsresizer/ResizeFSJob.cpp" line="214"/> <source>The device %1 must be resized, but cannot</source> <translation>The device %1 must be resized, but cannot</translation> </message> @@ -3299,17 +3330,17 @@ Output: <context> <name>ResizePartitionJob</name> <message> - <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="40"/> + <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="41"/> <source>Resize partition %1.</source> <translation>Resize partition %1.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="47"/> + <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="48"/> <source>Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>.</source> <translation>Resize <strong>%2MiB</strong> partition <strong>%1</strong> to <strong>%3MiB</strong>.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="58"/> + <location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="59"/> <source>Resizing %2MiB partition %1 to %3MiB.</source> <translation>Resizing %2MiB partition %1 to %3MiB.</translation> </message> @@ -3330,18 +3361,18 @@ Output: <context> <name>ResizeVolumeGroupJob</name> <message> - <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="27"/> - <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="45"/> + <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="28"/> + <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="46"/> <source>Resize volume group named %1 from %2 to %3.</source> <translation>Resize volume group named %1 from %2 to %3.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="36"/> + <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="37"/> <source>Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>.</source> <translation>Resize volume group named <strong>%1</strong> from <strong>%2</strong> to <strong>%3</strong>.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="60"/> + <location filename="../src/modules/partition/jobs/ResizeVolumeGroupJob.cpp" line="57"/> <source>The installer failed to resize a volume group named '%1'.</source> <translation>The installer failed to resize a volume group named '%1'.</translation> </message> @@ -3362,12 +3393,12 @@ Output: <context> <name>ScanningDialog</name> <message> - <location filename="../src/modules/partition/gui/ScanningDialog.cpp" line="64"/> + <location filename="../src/modules/partition/gui/ScanningDialog.cpp" line="68"/> <source>Scanning storage devices...</source> <translation>Scanning storage devices...</translation> </message> <message> - <location filename="../src/modules/partition/gui/ScanningDialog.cpp" line="64"/> + <location filename="../src/modules/partition/gui/ScanningDialog.cpp" line="68"/> <source>Partitioning</source> <translation>Partitioning</translation> </message> @@ -3435,82 +3466,82 @@ Output: <context> <name>SetPartFlagsJob</name> <message> - <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="43"/> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="45"/> <source>Set flags on partition %1.</source> <translation>Set flags on partition %1.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="49"/> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="51"/> <source>Set flags on %1MiB %2 partition.</source> <translation>Set flags on %1MiB %2 partition.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="53"/> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="55"/> <source>Set flags on new partition.</source> <translation>Set flags on new partition.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="65"/> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="67"/> <source>Clear flags on partition <strong>%1</strong>.</source> <translation>Clear flags on partition <strong>%1</strong>.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="71"/> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="73"/> <source>Clear flags on %1MiB <strong>%2</strong> partition.</source> <translation>Clear flags on %1MiB <strong>%2</strong> partition.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="75"/> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="77"/> <source>Clear flags on new partition.</source> <translation>Clear flags on new partition.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="80"/> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="82"/> <source>Flag partition <strong>%1</strong> as <strong>%2</strong>.</source> <translation>Flag partition <strong>%1</strong> as <strong>%2</strong>.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="89"/> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="91"/> <source>Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>.</source> <translation>Flag %1MiB <strong>%2</strong> partition as <strong>%3</strong>.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="96"/> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="98"/> <source>Flag new partition as <strong>%1</strong>.</source> <translation>Flag new partition as <strong>%1</strong>.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="108"/> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="110"/> <source>Clearing flags on partition <strong>%1</strong>.</source> <translation>Clearing flags on partition <strong>%1</strong>.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="114"/> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="116"/> <source>Clearing flags on %1MiB <strong>%2</strong> partition.</source> <translation>Clearing flags on %1MiB <strong>%2</strong> partition.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="119"/> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="121"/> <source>Clearing flags on new partition.</source> <translation>Clearing flags on new partition.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="124"/> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="126"/> <source>Setting flags <strong>%2</strong> on partition <strong>%1</strong>.</source> <translation>Setting flags <strong>%2</strong> on partition <strong>%1</strong>.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="133"/> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="135"/> <source>Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition.</source> <translation>Setting flags <strong>%3</strong> on %1MiB <strong>%2</strong> partition.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="140"/> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="142"/> <source>Setting flags <strong>%1</strong> on new partition.</source> <translation>Setting flags <strong>%1</strong> on new partition.</translation> </message> <message> - <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="157"/> + <location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="156"/> <source>The installer failed to set flags on partition %1.</source> <translation>The installer failed to set flags on partition %1.</translation> </message> @@ -3636,7 +3667,7 @@ Output: <context> <name>ShellProcessJob</name> <message> - <location filename="../src/modules/shellprocess/ShellProcessJob.cpp" line="41"/> + <location filename="../src/modules/shellprocess/ShellProcessJob.cpp" line="40"/> <source>Shell Processes Job</source> <translation>Shell Processes Job</translation> </message> @@ -3653,27 +3684,27 @@ Output: <context> <name>StandardButtons</name> <message> - <location filename="../src/libcalamaresui/widgets/TranslationFix.cpp" line="28"/> + <location filename="../src/libcalamaresui/widgets/TranslationFix.cpp" line="23"/> <source>&OK</source> <translation>&OK</translation> </message> <message> - <location filename="../src/libcalamaresui/widgets/TranslationFix.cpp" line="29"/> + <location filename="../src/libcalamaresui/widgets/TranslationFix.cpp" line="24"/> <source>&Yes</source> <translation>&Yes</translation> </message> <message> - <location filename="../src/libcalamaresui/widgets/TranslationFix.cpp" line="30"/> + <location filename="../src/libcalamaresui/widgets/TranslationFix.cpp" line="25"/> <source>&No</source> <translation>&No</translation> </message> <message> - <location filename="../src/libcalamaresui/widgets/TranslationFix.cpp" line="31"/> + <location filename="../src/libcalamaresui/widgets/TranslationFix.cpp" line="26"/> <source>&Cancel</source> <translation>&Cancel</translation> </message> <message> - <location filename="../src/libcalamaresui/widgets/TranslationFix.cpp" line="32"/> + <location filename="../src/libcalamaresui/widgets/TranslationFix.cpp" line="27"/> <source>&Close</source> <translation>&Close</translation> </message> @@ -3681,12 +3712,12 @@ Output: <context> <name>TrackingInstallJob</name> <message> - <location filename="../src/modules/tracking/TrackingJobs.cpp" line="102"/> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="101"/> <source>Installation feedback</source> <translation>Installation feedback</translation> </message> <message> - <location filename="../src/modules/tracking/TrackingJobs.cpp" line="108"/> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="107"/> <source>Sending installation feedback.</source> <translation>Sending installation feedback.</translation> </message> @@ -3704,28 +3735,28 @@ Output: <context> <name>TrackingKUserFeedbackJob</name> <message> - <location filename="../src/modules/tracking/TrackingJobs.cpp" line="187"/> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="193"/> <source>KDE user feedback</source> <translation>KDE user feedback</translation> </message> <message> - <location filename="../src/modules/tracking/TrackingJobs.cpp" line="193"/> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="199"/> <source>Configuring KDE user feedback.</source> <translation>Configuring KDE user feedback.</translation> </message> <message> - <location filename="../src/modules/tracking/TrackingJobs.cpp" line="215"/> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="221"/> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="229"/> <source>Error in KDE user feedback configuration.</source> <translation>Error in KDE user feedback configuration.</translation> </message> <message> - <location filename="../src/modules/tracking/TrackingJobs.cpp" line="216"/> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="222"/> <source>Could not configure KDE user feedback correctly, script error %1.</source> <translation>Could not configure KDE user feedback correctly, script error %1.</translation> </message> <message> - <location filename="../src/modules/tracking/TrackingJobs.cpp" line="222"/> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="230"/> <source>Could not configure KDE user feedback correctly, Calamares error %1.</source> <translation>Could not configure KDE user feedback correctly, Calamares error %1.</translation> </message> @@ -3744,17 +3775,17 @@ Output: </message> <message> <location filename="../src/modules/tracking/TrackingJobs.cpp" line="165"/> - <location filename="../src/modules/tracking/TrackingJobs.cpp" line="171"/> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="174"/> <source>Error in machine feedback configuration.</source> <translation>Error in machine feedback configuration.</translation> </message> <message> - <location filename="../src/modules/tracking/TrackingJobs.cpp" line="166"/> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="167"/> <source>Could not configure machine feedback correctly, script error %1.</source> <translation>Could not configure machine feedback correctly, script error %1.</translation> </message> <message> - <location filename="../src/modules/tracking/TrackingJobs.cpp" line="172"/> + <location filename="../src/modules/tracking/TrackingJobs.cpp" line="176"/> <source>Could not configure machine feedback correctly, Calamares error %1.</source> <translation>Could not configure machine feedback correctly, Calamares error %1.</translation> </message> @@ -3810,6 +3841,24 @@ Output: <translation>Feedback</translation> </message> </context> + <context> + <name>UmountJob</name> + <message> + <location filename="../src/modules/umount/UmountJob.cpp" line="39"/> + <source>Unmount file systems.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../src/modules/umount/UmountJob.cpp" line="122"/> + <source>No target system available.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../src/modules/umount/UmountJob.cpp" line="130"/> + <source>No rootMountPoint is set.</source> + <translation type="unfinished"/> + </message> + </context> <context> <name>UsersPage</name> <message> @@ -4022,6 +4071,50 @@ Output: <translation>Welcome</translation> </message> </context> + <context> + <name>ZfsJob</name> + <message> + <location filename="../src/modules/zfs/ZfsJob.cpp" line="101"/> + <source>Create ZFS pools and datasets</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../src/modules/zfs/ZfsJob.cpp" line="162"/> + <source>Failed to create zpool on </source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../src/modules/zfs/ZfsJob.cpp" line="180"/> + <source>Configuration Error</source> + <translation type="unfinished">Configuration Error</translation> + </message> + <message> + <location filename="../src/modules/zfs/ZfsJob.cpp" line="181"/> + <source>No partitions are available for Zfs.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../src/modules/zfs/ZfsJob.cpp" line="192"/> + <source>Internal data missing</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../src/modules/zfs/ZfsJob.cpp" line="192"/> + <location filename="../src/modules/zfs/ZfsJob.cpp" line="257"/> + <source>Failed to create zpool</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../src/modules/zfs/ZfsJob.cpp" line="329"/> + <source>Failed to create dataset</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../src/modules/zfs/ZfsJob.cpp" line="330"/> + <source>The output was: </source> + <translation type="unfinished"/> + </message> + </context> <context> <name>about</name> <message> @@ -4097,6 +4190,30 @@ Output: This log is copied to /var/log/installation.log of the target system.</p></translation> </message> </context> + <context> + <name>finishedq@mobile</name> + <message> + <location filename="../src/modules/finishedq/finishedq@mobile.qml" line="36"/> + <source>Installation Completed</source> + <translation type="unfinished">Installation Completed</translation> + </message> + <message> + <location filename="../src/modules/finishedq/finishedq@mobile.qml" line="43"/> + <source>%1 has been installed on your computer.<br/> + You may now restart your device.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../src/modules/finishedq/finishedq@mobile.qml" line="65"/> + <source>Close</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../src/modules/finishedq/finishedq@mobile.qml" line="71"/> + <source>Restart</source> + <translation type="unfinished"/> + </message> + </context> <context> <name>i18n</name> <message> diff --git a/lang/python.pot b/lang/python.pot index 63372044ecf842d4ed31f3f56d589b82bb8a14f3..86647241b637bdebcfd15f6946511ec59acc5542 100644 --- a/lang/python.pot +++ b/lang/python.pot @@ -2,409 +2,403 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-02 15:45+0100\n" +"POT-Creation-Date: 2022-02-01 17:27+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -"Language: \n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." -msgstr "Configuring initramfs." +msgstr "" #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 -#: src/modules/fstab/main.py:355 src/modules/fstab/main.py:361 -#: src/modules/fstab/main.py:388 src/modules/networkcfg/main.py:105 -#: src/modules/initcpiocfg/main.py:227 src/modules/initcpiocfg/main.py:231 -#: src/modules/localecfg/main.py:135 src/modules/mount/main.py:144 +#: src/modules/fstab/main.py:360 src/modules/fstab/main.py:366 +#: src/modules/fstab/main.py:393 src/modules/networkcfg/main.py:105 +#: src/modules/initcpiocfg/main.py:235 src/modules/initcpiocfg/main.py:239 +#: src/modules/localecfg/main.py:135 src/modules/mount/main.py:229 #: src/modules/rawfs/main.py:164 src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 -#: src/modules/luksopenswaphookcfg/main.py:86 -#: src/modules/luksopenswaphookcfg/main.py:90 msgid "Configuration Error" -msgstr "Configuration Error" +msgstr "" -#: src/modules/initramfscfg/main.py:86 src/modules/fstab/main.py:356 -#: src/modules/initcpiocfg/main.py:228 src/modules/mount/main.py:145 +#: src/modules/initramfscfg/main.py:86 src/modules/fstab/main.py:361 +#: src/modules/initcpiocfg/main.py:236 src/modules/mount/main.py:230 #: src/modules/rawfs/main.py:165 src/modules/openrcdmcryptcfg/main.py:73 -#: src/modules/luksopenswaphookcfg/main.py:87 msgid "No partitions are defined for <pre>{!s}</pre> to use." -msgstr "No partitions are defined for <pre>{!s}</pre> to use." +msgstr "" -#: src/modules/initramfscfg/main.py:90 src/modules/fstab/main.py:362 -#: src/modules/networkcfg/main.py:106 src/modules/initcpiocfg/main.py:232 +#: src/modules/initramfscfg/main.py:90 src/modules/fstab/main.py:367 +#: src/modules/networkcfg/main.py:106 src/modules/initcpiocfg/main.py:240 #: src/modules/localecfg/main.py:136 src/modules/openrcdmcryptcfg/main.py:77 -#: src/modules/luksopenswaphookcfg/main.py:91 msgid "No root mount point is given for <pre>{!s}</pre> to use." -msgstr "No root mount point is given for <pre>{!s}</pre> to use." +msgstr "" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." -msgstr "Configure GRUB." +msgstr "" #: src/modules/bootloader/main.py:43 msgid "Install bootloader." -msgstr "Install bootloader." +msgstr "" + +#: src/modules/bootloader/main.py:612 +msgid "Failed to install grub, no partitions defined in global storage" +msgstr "" -#: src/modules/bootloader/main.py:508 +#: src/modules/bootloader/main.py:780 msgid "Bootloader installation error" -msgstr "Bootloader installation error" +msgstr "" -#: src/modules/bootloader/main.py:509 +#: src/modules/bootloader/main.py:781 msgid "" -"The bootloader could not be installed. The installation command " -"<pre>{!s}</pre> returned error code {!s}." +"The bootloader could not be installed. The installation command <pre>{!s}</" +"pre> returned error code {!s}." msgstr "" -"The bootloader could not be installed. The installation command " -"<pre>{!s}</pre> returned error code {!s}." #: src/modules/fstab/main.py:29 msgid "Writing fstab." -msgstr "Writing fstab." +msgstr "" -#: src/modules/fstab/main.py:389 +#: src/modules/fstab/main.py:394 msgid "No <pre>{!s}</pre> configuration is given for <pre>{!s}</pre> to use." -msgstr "No <pre>{!s}</pre> configuration is given for <pre>{!s}</pre> to use." +msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." -msgstr "Creating initramfs with dracut." +msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" -msgstr "Failed to run dracut on the target" +msgstr "" #: src/modules/dracut/main.py:50 src/modules/mkinitfs/main.py:50 msgid "The exit code was {}" -msgstr "The exit code was {}" +msgstr "" -#: src/modules/displaymanager/main.py:526 +#: src/modules/displaymanager/main.py:524 msgid "Cannot write KDM configuration file" -msgstr "Cannot write KDM configuration file" +msgstr "" -#: src/modules/displaymanager/main.py:527 +#: src/modules/displaymanager/main.py:525 msgid "KDM config file {!s} does not exist" -msgstr "KDM config file {!s} does not exist" +msgstr "" -#: src/modules/displaymanager/main.py:588 +#: src/modules/displaymanager/main.py:586 msgid "Cannot write LXDM configuration file" -msgstr "Cannot write LXDM configuration file" +msgstr "" -#: src/modules/displaymanager/main.py:589 +#: src/modules/displaymanager/main.py:587 msgid "LXDM config file {!s} does not exist" -msgstr "LXDM config file {!s} does not exist" +msgstr "" -#: src/modules/displaymanager/main.py:672 +#: src/modules/displaymanager/main.py:670 msgid "Cannot write LightDM configuration file" -msgstr "Cannot write LightDM configuration file" +msgstr "" -#: src/modules/displaymanager/main.py:673 +#: src/modules/displaymanager/main.py:671 msgid "LightDM config file {!s} does not exist" -msgstr "LightDM config file {!s} does not exist" +msgstr "" -#: src/modules/displaymanager/main.py:747 +#: src/modules/displaymanager/main.py:745 msgid "Cannot configure LightDM" -msgstr "Cannot configure LightDM" +msgstr "" -#: src/modules/displaymanager/main.py:748 +#: src/modules/displaymanager/main.py:746 msgid "No LightDM greeter installed." -msgstr "No LightDM greeter installed." +msgstr "" -#: src/modules/displaymanager/main.py:779 +#: src/modules/displaymanager/main.py:777 msgid "Cannot write SLIM configuration file" -msgstr "Cannot write SLIM configuration file" +msgstr "" -#: src/modules/displaymanager/main.py:780 +#: src/modules/displaymanager/main.py:778 msgid "SLIM config file {!s} does not exist" -msgstr "SLIM config file {!s} does not exist" +msgstr "" -#: src/modules/displaymanager/main.py:906 +#: src/modules/displaymanager/main.py:991 msgid "No display managers selected for the displaymanager module." -msgstr "No display managers selected for the displaymanager module." +msgstr "" -#: src/modules/displaymanager/main.py:907 +#: src/modules/displaymanager/main.py:992 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"The displaymanagers list is empty or undefined in both globalstorage and " -"displaymanager.conf." -#: src/modules/displaymanager/main.py:989 +#: src/modules/displaymanager/main.py:1074 msgid "Display manager configuration was incomplete" -msgstr "Display manager configuration was incomplete" +msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" -msgstr "Configure OpenRC services" +msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." -msgstr "Cannot add service {name!s} to run-level {level!s}." +msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." -msgstr "Cannot remove service {name!s} from run-level {level!s}." +msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action <code>{arg!s}</code> for service {name!s} in run-" "level {level!s}." msgstr "" -"Unknown service-action <code>{arg!s}</code> for service {name!s} in run-" -"level {level!s}." #: src/modules/services-openrc/main.py:93 #: src/modules/services-systemd/main.py:59 msgid "Cannot modify service" -msgstr "Cannot modify service" +msgstr "" #: src/modules/services-openrc/main.py:94 msgid "" "<code>rc-update {arg!s}</code> call in chroot returned error code {num!s}." msgstr "" -"<code>rc-update {arg!s}</code> call in chroot returned error code {num!s}." #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" -msgstr "Target runlevel does not exist" +msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is <code>{path!s}</code>, which does not " "exist." msgstr "" -"The path for runlevel {level!s} is <code>{path!s}</code>, which does not " -"exist." #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" -msgstr "Target service does not exist" +msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" -"The path for service {name!s} is <code>{path!s}</code>, which does not " -"exist." +"The path for service {name!s} is <code>{path!s}</code>, which does not exist." msgstr "" -"The path for service {name!s} is <code>{path!s}</code>, which does not " -"exist." #: src/modules/networkcfg/main.py:29 msgid "Saving network configuration." -msgstr "Saving network configuration." +msgstr "" -#: src/modules/packages/main.py:50 src/modules/packages/main.py:59 -#: src/modules/packages/main.py:69 +#: src/modules/packages/main.py:54 src/modules/packages/main.py:65 +#: src/modules/packages/main.py:75 msgid "Install packages." -msgstr "Install packages." +msgstr "" -#: src/modules/packages/main.py:57 +#: src/modules/packages/main.py:63 #, python-format msgid "Processing packages (%(count)d / %(total)d)" -msgstr "Processing packages (%(count)d / %(total)d)" +msgstr "" -#: src/modules/packages/main.py:62 +#: src/modules/packages/main.py:68 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." -msgstr[0] "Installing one package." -msgstr[1] "Installing %(num)d packages." +msgstr[0] "" +msgstr[1] "" -#: src/modules/packages/main.py:65 +#: src/modules/packages/main.py:71 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." -msgstr[0] "Removing one package." -msgstr[1] "Removing %(num)d packages." +msgstr[0] "" +msgstr[1] "" -#: src/modules/packages/main.py:638 src/modules/packages/main.py:650 -#: src/modules/packages/main.py:678 +#: src/modules/packages/main.py:725 src/modules/packages/main.py:737 +#: src/modules/packages/main.py:765 msgid "Package Manager error" -msgstr "Package Manager error" +msgstr "" -#: src/modules/packages/main.py:639 +#: src/modules/packages/main.py:726 msgid "" "The package manager could not prepare updates. The command <pre>{!s}</pre> " "returned error code {!s}." msgstr "" -"The package manager could not prepare updates. The command <pre>{!s}</pre> " -"returned error code {!s}." -#: src/modules/packages/main.py:651 +#: src/modules/packages/main.py:738 msgid "" -"The package manager could not update the system. The command <pre>{!s}</pre>" -" returned error code {!s}." +"The package manager could not update the system. The command <pre>{!s}</pre> " +"returned error code {!s}." msgstr "" -"The package manager could not update the system. The command <pre>{!s}</pre>" -" returned error code {!s}." -#: src/modules/packages/main.py:679 +#: src/modules/packages/main.py:766 msgid "" "The package manager could not make changes to the installed system. The " "command <pre>{!s}</pre> returned error code {!s}." msgstr "" -"The package manager could not make changes to the installed system. The " -"command <pre>{!s}</pre> returned error code {!s}." #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" -msgstr "Configure Plymouth theme" +msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." -msgstr "Configuring mkinitcpio." +msgstr "" #: src/modules/localecfg/main.py:30 msgid "Configuring locales." -msgstr "Configuring locales." +msgstr "" -#: src/modules/mount/main.py:30 +#: src/modules/mount/main.py:42 msgid "Mounting partitions." -msgstr "Mounting partitions." +msgstr "" + +#: src/modules/mount/main.py:88 src/modules/mount/main.py:124 +msgid "Internal error mounting zfs datasets" +msgstr "" + +#: src/modules/mount/main.py:100 +msgid "Failed to import zpool" +msgstr "" + +#: src/modules/mount/main.py:116 +msgid "Failed to unlock zpool" +msgstr "" + +#: src/modules/mount/main.py:133 src/modules/mount/main.py:138 +msgid "Failed to set zfs mountpoint" +msgstr "" + +#: src/modules/mount/main.py:253 +msgid "zfs mounting error" +msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." -msgstr "Installing data." +msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." -msgstr "Dummy python job." +msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" -msgstr "Dummy python step {}" +msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." -msgstr "Setting hardware clock." - -#: src/modules/umount/main.py:31 -msgid "Unmount file systems." -msgstr "Unmount file systems." +msgstr "" #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." -msgstr "Configuring OpenRC dmcrypt service." +msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" -msgstr "Configure systemd services" +msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "<code>systemctl {arg!s}</code> call in chroot returned error code {num!s}." msgstr "" -"<code>systemctl {arg!s}</code> call in chroot returned error code {num!s}." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:69 msgid "Cannot enable systemd service <code>{name!s}</code>." -msgstr "Cannot enable systemd service <code>{name!s}</code>." +msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target <code>{name!s}</code>." -msgstr "Cannot enable systemd target <code>{name!s}</code>." +msgstr "" #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd timer <code>{name!s}</code>." -msgstr "Cannot enable systemd timer <code>{name!s}</code>." +msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot disable systemd target <code>{name!s}</code>." -msgstr "Cannot disable systemd target <code>{name!s}</code>." +msgstr "" #: src/modules/services-systemd/main.py:73 msgid "Cannot mask systemd unit <code>{name!s}</code>." -msgstr "Cannot mask systemd unit <code>{name!s}</code>." +msgstr "" #: src/modules/services-systemd/main.py:75 msgid "" -"Unknown systemd commands <code>{command!s}</code> and " -"<code>{suffix!s}</code> for unit {name!s}." +"Unknown systemd commands <code>{command!s}</code> and <code>{suffix!s}</" +"code> for unit {name!s}." msgstr "" -"Unknown systemd commands <code>{command!s}</code> and " -"<code>{suffix!s}</code> for unit {name!s}." #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." -msgstr "Creating initramfs with mkinitfs." +msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" -msgstr "Failed to run mkinitfs on the target" +msgstr "" #: src/modules/unpackfs/main.py:34 msgid "Filling up filesystems." -msgstr "Filling up filesystems." +msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." -msgstr "rsync failed with error code {}." +msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "Unpacking image {}/{}, file {}/{}" +msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "Starting to unpack {}" +msgstr "" -#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:467 msgid "Failed to unpack image \"{}\"" -msgstr "Failed to unpack image \"{}\"" +msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" -msgstr "No mount point for root partition" +msgstr "" #: src/modules/unpackfs/main.py:431 -msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +msgid "globalstorage does not contain a \"rootMountPoint\" key." +msgstr "" -#: src/modules/unpackfs/main.py:436 +#: src/modules/unpackfs/main.py:434 msgid "Bad mount point for root partition" -msgstr "Bad mount point for root partition" +msgstr "" + +#: src/modules/unpackfs/main.py:435 +msgid "rootMountPoint is \"{}\", which does not exist." +msgstr "" -#: src/modules/unpackfs/main.py:437 -msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "rootMountPoint is \"{}\", which does not exist, doing nothing" +#: src/modules/unpackfs/main.py:439 src/modules/unpackfs/main.py:455 +#: src/modules/unpackfs/main.py:459 src/modules/unpackfs/main.py:465 +#: src/modules/unpackfs/main.py:480 +msgid "Bad unpackfs configuration" +msgstr "" -#: src/modules/unpackfs/main.py:453 src/modules/unpackfs/main.py:457 -#: src/modules/unpackfs/main.py:463 src/modules/unpackfs/main.py:478 -msgid "Bad unsquash configuration" -msgstr "Bad unsquash configuration" +#: src/modules/unpackfs/main.py:440 +msgid "There is no configuration information." +msgstr "" -#: src/modules/unpackfs/main.py:454 +#: src/modules/unpackfs/main.py:456 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" -msgstr "The filesystem for \"{}\" ({}) is not supported by your current kernel" +msgstr "" -#: src/modules/unpackfs/main.py:458 +#: src/modules/unpackfs/main.py:460 msgid "The source filesystem \"{}\" does not exist" -msgstr "The source filesystem \"{}\" does not exist" +msgstr "" -#: src/modules/unpackfs/main.py:464 +#: src/modules/unpackfs/main.py:466 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed." msgstr "" -"Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed." -#: src/modules/unpackfs/main.py:479 +#: src/modules/unpackfs/main.py:481 msgid "The destination \"{}\" in the target system is not a directory" -msgstr "The destination \"{}\" in the target system is not a directory" - -#: src/modules/luksopenswaphookcfg/main.py:26 -msgid "Configuring encrypted swap." -msgstr "Configuring encrypted swap." +msgstr "" diff --git a/src/calamares/testmain.cpp b/src/calamares/testmain.cpp index 9d018903154cc2316601f8facc8b2fdf148328fe..ecbf77888360ea79bbecd1db612238047909072c 100644 --- a/src/calamares/testmain.cpp +++ b/src/calamares/testmain.cpp @@ -485,7 +485,7 @@ main( int argc, char* argv[] ) return 1; } - cDebug() << Logger::SubEntry << " .. got" << m->name() << m->typeString() << m->interfaceString(); + cDebug() << Logger::SubEntry << "got" << m->name() << m->typeString() << m->interfaceString(); if ( m->type() == Calamares::Module::Type::View ) { // If we forgot the --ui, any ViewModule will core dump as it @@ -535,7 +535,7 @@ main( int argc, char* argv[] ) using TR = Logger::DebugRow< const char*, const QString >; - cDebug() << "Module metadata" << TR( "name", m->name() ) << TR( "type", m->typeString() ) + cDebug() << Logger::SubEntry << "Module metadata" << TR( "name", m->name() ) << TR( "type", m->typeString() ) << TR( "interface", m->interfaceString() ); Calamares::JobList jobList = m->jobs(); @@ -543,6 +543,8 @@ main( int argc, char* argv[] ) unsigned int count = 1; for ( const auto& p : jobList ) { + // This doesn't get a SubEntry because the jobs may log a bunch of + // things; print the function-header to make clear that we're back in main. cDebug() << "Job #" << count << "name" << p->prettyName(); Calamares::JobResult r = p->exec(); if ( !r ) diff --git a/src/libcalamares/JobQueue.cpp b/src/libcalamares/JobQueue.cpp index 039a28e2646d046e79071dd97d01c2d5f4c271d0..d7078c6d25b11e8009ab946f454aae3596591da8 100644 --- a/src/libcalamares/JobQueue.cpp +++ b/src/libcalamares/JobQueue.cpp @@ -122,8 +122,9 @@ public: } else { - cDebug() << o << "Starting" << ( failureEncountered ? "EMERGENCY JOB" : "job" ) << jobitem.job->prettyName() - << '(' << ( m_jobIndex + 1 ) << '/' << m_runningJobs->count() << ')'; + cDebug() << o << "Starting" << ( failureEncountered ? "EMERGENCY JOB" : "job" ) + << jobitem.job->prettyName() << '(' << ( m_jobIndex + 1 ) << '/' << m_runningJobs->count() + << ')'; o.refresh(); // So next time it shows the function header again emitProgress( 0.0 ); // 0% for *this job* connect( jobitem.job.data(), &Job::progress, this, &JobThread::emitProgress ); diff --git a/src/libcalamares/utils/Logger.cpp b/src/libcalamares/utils/Logger.cpp index d35d6891b634ca532a06fac4c34c8644dd1f4ac5..adb0826875f02fa346c9c6a6f2dab40782dd7480 100644 --- a/src/libcalamares/utils/Logger.cpp +++ b/src/libcalamares/utils/Logger.cpp @@ -259,21 +259,22 @@ operator<<( QDebug& s, const RedactedCommand& l ) * Identical strings with the same context will be hashed the same, * so that they can be logged and still recognized as the-same. */ -static uint insertRedactedName( const QString& context, const QString& s ) +static uint +insertRedactedName( const QString& context, const QString& s ) { static uint salt = QRandomGenerator::global()->generate(); // Just once - uint val = qHash(context, salt); - return qHash(s, val); + uint val = qHash( context, salt ); + return qHash( s, val ); } RedactedName::RedactedName( const QString& context, const QString& s ) - : m_id( insertRedactedName(context, s) ), - m_context(context) + : m_id( insertRedactedName( context, s ) ) + , m_context( context ) { } -RedactedName::RedactedName(const char *context, const QString& s ) +RedactedName::RedactedName( const char* context, const QString& s ) : RedactedName( QString::fromLatin1( context ), s ) { } diff --git a/src/libcalamares/utils/Logger.h b/src/libcalamares/utils/Logger.h index 0d7d5c870c4e810d220b7d4e5e2fe94be1467e3c..f4079388d5224b1cdd13aca4ad0f30bed0390b8a 100644 --- a/src/libcalamares/utils/Logger.h +++ b/src/libcalamares/utils/Logger.h @@ -71,8 +71,11 @@ private: inline CDebug& operator<<( CDebug&& s, const FuncSuppressor& f ) { - s.m_funcinfo = nullptr; - s << f.m_s; + if ( s.m_funcinfo ) + { + s.m_funcinfo = nullptr; + s.m_msg = QString( f.m_s ); + } return s; } @@ -244,7 +247,8 @@ private: const QString m_context; }; -inline QDebug& operator<<( QDebug& s, const RedactedName& n ) +inline QDebug& +operator<<( QDebug& s, const RedactedName& n ) { return s << NoQuote << QString( n ) << Quote; } diff --git a/src/libcalamares/utils/Retranslator.h b/src/libcalamares/utils/Retranslator.h index efe12ef8ac9a4ca9da80d42b0897b8b07e4ea0a9..8bb044983f4efb6d17ca1f739eae0a133642dbce 100644 --- a/src/libcalamares/utils/Retranslator.h +++ b/src/libcalamares/utils/Retranslator.h @@ -29,7 +29,8 @@ namespace CalamaresUtils * @param locale the new locale (names as defined by Calamares). * @param brandingTranslationsPrefix the branding path prefix, from Calamares::Branding. */ -DLLEXPORT void installTranslator( const CalamaresUtils::Locale::Translation::Id& locale, const QString& brandingTranslationsPrefix ); +DLLEXPORT void installTranslator( const CalamaresUtils::Locale::Translation::Id& locale, + const QString& brandingTranslationsPrefix ); /** @brief Initializes the translations with the current system settings */ @@ -56,7 +57,8 @@ DLLEXPORT CalamaresUtils::Locale::Translation::Id translatorLocaleName(); * * @returns @c true on success */ -DLLEXPORT bool loadTranslator( const CalamaresUtils::Locale::Translation::Id& locale, const QString& prefix, QTranslator* translator ); +DLLEXPORT bool +loadTranslator( const CalamaresUtils::Locale::Translation::Id& locale, const QString& prefix, QTranslator* translator ); /** @brief Set @p allow to true to load translations from current dir. * @@ -88,7 +90,7 @@ public: static Retranslator* instance(); /// @brief Helper function for attaching lambdas - static void attach( QObject* o, std::function< void( void ) > f); + static void attach( QObject* o, std::function< void( void ) > f ); signals: void languageChanged(); @@ -138,8 +140,11 @@ private: #define CALAMARES_RETRANSLATE_SLOT( slotfunc ) \ do \ { \ - connect( CalamaresUtils::Retranslator::instance(), &CalamaresUtils::Retranslator::languageChanged, this, slotfunc ); \ - (this->*slotfunc)(); \ + connect( CalamaresUtils::Retranslator::instance(), \ + &CalamaresUtils::Retranslator::languageChanged, \ + this, \ + slotfunc ); \ + ( this->*slotfunc )(); \ } while ( false ) #endif diff --git a/src/modules/README.md b/src/modules/README.md index 97a8556a1c1e3f6368446d462ad35b159fcbce49..62d92c2604531e7140b6baff7384655dad7f6dd4 100644 --- a/src/modules/README.md +++ b/src/modules/README.md @@ -179,6 +179,26 @@ it is possible to take the whole installation-process into account for determining the relative weights there. +## Global storage keys +Some modules place values in global storage so that they can be referenced later by other modules or even other parts of the same module. The following table represents a partial list of the values available as well as where they originate from and which module consume them. + +Key|Source|Consumers|Description +---|---|---|--- +btrfsSubvolumes|mount|fstab|List of maps containing the mountpoint and btrtfs subvolume +btrfsRootSubvolume|mount|bootloader, luksopenswaphook|String containing the subvolume mounted at root +efiSystemPartition|partition|bootloader, fstab|String containing the path to the ESP relative to the installed system +extraMounts|mount|unpackfs|List of maps holding metadata for the temporary mountpoints used by the installer +hostname|users||A string containing the hostname of the new system +netinstallAdd|packagechooser|netinstall|Data to add to netinstall tree. Same format as netinstall.yaml +netinstallSelect|packagechooser|netinstall|List of group names to select in the netinstall tree +partitions|partition, rawfs|numerous modules|List of maps of metadata about each partition +rootMountPoint|mount|numerous modules|A string with the absolute path to the root mountpoint +username|users|networkcfg, plasmainf, preservefiles|A string containing the username of the new user +zfsDatasets|zfs|bootloader, grubcfg, mount|List of maps of zfs datasets including the name and mount information +zfsInfo|partition|mount, zfs|List of encrypted zfs partitions and the encription info +zfsPoolInfo|zfs|mount, umount|List of maps of zfs pool info including the name and mountpoint + + ## C++ modules > Type: viewmodule, jobmodule diff --git a/src/modules/bootloader/main.py b/src/modules/bootloader/main.py index 81e271a710b4d986ae655dcfcad46600e4132206..c7bc741dea3f24fd0bb792adeecac7832d8cddd6 100644 --- a/src/modules/bootloader/main.py +++ b/src/modules/bootloader/main.py @@ -427,7 +427,7 @@ def efi_label(efi_directory): used within @p efi_directory. """ if "efiBootloaderId" in libcalamares.job.configuration: - efi_bootloader_id = change_efi_suffix( efi_directory, calamares.job.configuration["efiBootloaderId"] ) + efi_bootloader_id = change_efi_suffix( efi_directory, libcalamares.job.configuration["efiBootloaderId"] ) else: branding = libcalamares.globalstorage.value("branding") efi_bootloader_id = branding["bootloaderEntryName"] @@ -563,6 +563,7 @@ def run_grub_install(fw_type, partitions, efi_directory): check_target_env_call(["sh", "-c", "echo ZPOOL_VDEV_NAME_PATH=1 >> /etc/environment"]) if fw_type == "efi": + assert efi_directory is not None efi_bootloader_id = efi_label(efi_directory) efi_target, efi_grub_file, efi_boot_file = get_grub_efi_parameters() @@ -577,6 +578,7 @@ def run_grub_install(fw_type, partitions, efi_directory): "--bootloader-id=" + efi_bootloader_id, "--force"]) else: + assert efi_directory is None if libcalamares.globalstorage.value("bootLoader") is None: return @@ -653,7 +655,7 @@ def install_grub(efi_directory, fw_type): shutil.copy2(efi_file_source, efi_file_target) else: libcalamares.utils.debug("Bootloader: grub (bios)") - run_grub_install(fw_type, partitions) + run_grub_install(fw_type, partitions, None) run_grub_mkconfig(partitions, libcalamares.job.configuration["grubCfg"]) diff --git a/src/modules/fstab/test2.yaml b/src/modules/fstab/test2.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0e91bf649114b69d281e9d40739e010ae3fe596f --- /dev/null +++ b/src/modules/fstab/test2.yaml @@ -0,0 +1,25 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# This test shows how btrfs root would work +rootMountPoint: /tmp/mount +partitions: + - device: /dev/sda1 + fs: btrfs + mountPoint: / + uuid: 2a00f1d5-1217-49a7-bedd-b55c85764732 + - device: /dev/sda2 + fs: swap + uuid: 59406569-446f-4730-a874-9f6b4b44fee3 + mountPoint: + - device: /dev/sdb1 + fs: btrfs + mountPoint: /home + uuid: 59406569-abcd-1234-a874-9f6b4b44fee3 +btrfsSubvolumes: + - mountPoint: / + subvolume: "@ROOT" + - mountPoint: /var + subvolume: "@var" + - mountPoint: /usr/local + subvolume: "@local" diff --git a/src/modules/grubcfg/grubcfg.conf b/src/modules/grubcfg/grubcfg.conf index 33c2a72ab681bb8a297f78600bed029554d63b92..afc5e89b89d574a9a25e1690504d5a8d1dfddcec 100644 --- a/src/modules/grubcfg/grubcfg.conf +++ b/src/modules/grubcfg/grubcfg.conf @@ -29,8 +29,16 @@ prefer_grub_d: false # kept, not updated to the *bootloaderEntryName* from the branding file. # Use this if the GRUB_DISTRIBUTOR setting in the file is "smart" in # some way (e.g. uses shell-command substitution). +# +# TODO:3.3:snake-case this key keepDistributor: false +# The default kernel params that should always be applied. +# This is an array of strings. If it is unset, the default is +# `["quiet"]`. To avoid the default, explicitly set this key +# to an empty list, `[]`. +kernel_params: [ "quiet" ] + # Default entries to write to /etc/default/grub if it does not exist yet or if # we are overwriting it. # diff --git a/src/modules/grubcfg/grubcfg.schema.yaml b/src/modules/grubcfg/grubcfg.schema.yaml index f1bf2cc03c4a0620afc3bdd5d0a4a2b2e80d3e99..35d63c0634d72eff81c6882e6eba30cec47a9cfd 100644 --- a/src/modules/grubcfg/grubcfg.schema.yaml +++ b/src/modules/grubcfg/grubcfg.schema.yaml @@ -7,8 +7,10 @@ additionalProperties: false type: object properties: overwrite: { type: boolean, default: false } + # TODO:3.3:snake-case this key keepDistributor: { type: boolean, default: false } prefer_grub_d: { type: boolean, default: false } + kernel_params: { type: array, items: { type: string } } defaults: type: object additionalProperties: true # Other fields are acceptable diff --git a/src/modules/grubcfg/main.py b/src/modules/grubcfg/main.py index 521293bf91b3a0d616351d17f93280bdb320db74..45018642cec4d68b9b477fba8667d5112a96b9b1 100644 --- a/src/modules/grubcfg/main.py +++ b/src/modules/grubcfg/main.py @@ -174,7 +174,7 @@ def modify_grub_default(partitions, root_mount_point, distributor): if partition["fs"] == "zfs" and partition["mountPoint"] == "/": zfs_root_path = get_zfs_root() - kernel_params = ["quiet"] + kernel_params = libcalamares.job.configuration.get("kernel_params", ["quiet"]) # Currently, grub doesn't detect this properly so it must be set manually if zfs_root_path: diff --git a/src/modules/netinstall/NetInstallPage.cpp b/src/modules/netinstall/NetInstallPage.cpp index a1a86294ef4f1cfe05ae913046a3939d58737b71..f7a2f66fc0cbe9e50b81757ec7f22f478a4a07df 100644 --- a/src/modules/netinstall/NetInstallPage.cpp +++ b/src/modules/netinstall/NetInstallPage.cpp @@ -15,6 +15,7 @@ #include "PackageModel.h" #include "ui_page_netinst.h" +#include "GlobalStorage.h" #include "JobQueue.h" #include "network/Manager.h" @@ -62,4 +63,19 @@ void NetInstallPage::onActivate() { ui->groupswidget->setFocus(); + + // The netinstallSelect global storage value can be used to make additional items selected by default + Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); + const QStringList selectNames = gs->value( "netinstallSelect" ).toStringList(); + if ( !selectNames.isEmpty() ) + { + m_config->model()->setSelections( selectNames ); + } + + // If NetInstallAdd is found in global storage, add those items to the tree + const QVariantList groups = gs->value( "netinstallAdd" ).toList(); + if ( !groups.isEmpty() ) + { + m_config->model()->appendModelData( groups ); + } } diff --git a/src/modules/netinstall/PackageModel.cpp b/src/modules/netinstall/PackageModel.cpp index d4887b6c25d0b58c76a060554620b2c2bb9b3ba5..256a77afdf78c925f3d71daf5c5ca1d09536e085 100644 --- a/src/modules/netinstall/PackageModel.cpp +++ b/src/modules/netinstall/PackageModel.cpp @@ -14,6 +14,43 @@ #include "utils/Variant.h" #include "utils/Yaml.h" +/// Recursive helper for setSelections() +static void +setSelections( const QStringList& selectNames, PackageTreeItem* item ) +{ + for ( int i = 0; i < item->childCount(); i++ ) + { + auto* child = item->child( i ); + setSelections( selectNames, child ); + } + if ( item->isGroup() && selectNames.contains( item->name() ) ) + { + item->setSelected( Qt::CheckState::Checked ); + } +} + +/** @brief Collects all the "source" values from @p groupList + * + * Iterates over @p groupList and returns all nonempty "source" + * values from the maps. + * + */ +static QStringList +collectSources( const QVariantList& groupList ) +{ + QStringList sources; + for ( const QVariant& group : groupList ) + { + QVariantMap groupMap = group.toMap(); + if ( !groupMap[ "source" ].toString().isEmpty() ) + { + sources.append( groupMap[ "source" ].toString() ); + } + } + + return sources; +} + PackageModel::PackageModel( QObject* parent ) : QAbstractItemModel( parent ) { @@ -170,6 +207,15 @@ PackageModel::headerData( int section, Qt::Orientation orientation, int role ) c return QVariant(); } +void +PackageModel::setSelections( const QStringList& selectNames ) +{ + if ( m_rootItem ) + { + ::setSelections( selectNames, m_rootItem ); + } +} + PackageTreeItem::List PackageModel::getPackages() const { @@ -303,9 +349,43 @@ PackageModel::setupModelData( const QVariantList& groupList, PackageTreeItem* pa void PackageModel::setupModelData( const QVariantList& l ) { - emit beginResetModel(); + Q_EMIT beginResetModel(); delete m_rootItem; m_rootItem = new PackageTreeItem(); setupModelData( l, m_rootItem ); - emit endResetModel(); + Q_EMIT endResetModel(); +} + +void +PackageModel::appendModelData( const QVariantList& groupList ) +{ + if ( m_rootItem ) + { + Q_EMIT beginResetModel(); + + const QStringList sources = collectSources( groupList ); + + if ( !sources.isEmpty() ) + { + // Prune any existing data from the same source + QList< int > removeList; + for ( int i = 0; i < m_rootItem->childCount(); i++ ) + { + PackageTreeItem* child = m_rootItem->child( i ); + if ( sources.contains( child->source() ) ) + { + removeList.insert( 0, i ); + } + } + for ( const int& item : qAsConst( removeList ) ) + { + m_rootItem->removeChild( item ); + } + } + + // Add the new data to the model + setupModelData( groupList, m_rootItem ); + + Q_EMIT endResetModel(); + } } diff --git a/src/modules/netinstall/PackageModel.h b/src/modules/netinstall/PackageModel.h index 998f42c38c277c5eb1406d7b2bedeeab446e1b30..e97359a46371a978c4b7e3004f50ef51e0f3c2b9 100644 --- a/src/modules/netinstall/PackageModel.h +++ b/src/modules/netinstall/PackageModel.h @@ -54,9 +54,33 @@ public: int rowCount( const QModelIndex& parent = QModelIndex() ) const override; int columnCount( const QModelIndex& parent = QModelIndex() ) const override; + /** @brief Sets the checked flag on matching groups in the tree + * + * Recursively traverses the tree pointed to by m_rootItem and + * checks if a group name matches any of the items in @p selectNames. + * If a match is found, set check the box for that group and it's children. + * + * Individual packages will not be matched. + * + */ + void setSelections( const QStringList& selectNames ); + PackageTreeItem::List getPackages() const; PackageTreeItem::List getItemPackages( PackageTreeItem* item ) const; + /** @brief Appends groups to the tree + * + * Uses the data from @p groupList to add elements to the + * existing tree that m_rootItem points to. If m_rootItem + * is not valid, it does nothing + * + * Before adding anything to the model, it ensures that there + * is no existing data from the same source. If there is, that + * data is pruned first + * + */ + void appendModelData( const QVariantList& groupList ); + private: friend class ItemTests; diff --git a/src/modules/netinstall/PackageTreeItem.cpp b/src/modules/netinstall/PackageTreeItem.cpp index b30cdf91516486221fa4b51e614071f11e460405..5841606c4072788cb124ab5f0fba1f18b113e9c9 100644 --- a/src/modules/netinstall/PackageTreeItem.cpp +++ b/src/modules/netinstall/PackageTreeItem.cpp @@ -70,6 +70,7 @@ PackageTreeItem::PackageTreeItem( const QVariantMap& groupData, GroupTag&& paren , m_description( CalamaresUtils::getString( groupData, "description" ) ) , m_preScript( CalamaresUtils::getString( groupData, "pre-install" ) ) , m_postScript( CalamaresUtils::getString( groupData, "post-install" ) ) + , m_source( CalamaresUtils::getString( groupData, "source" ) ) , m_isGroup( true ) , m_isCritical( parentCriticality( groupData, parent.parent ) ) , m_isHidden( CalamaresUtils::getBool( groupData, "hidden", false ) ) @@ -248,6 +249,19 @@ PackageTreeItem::setChildrenSelected( Qt::CheckState isSelected ) } } +void +PackageTreeItem::removeChild( int row ) +{ + if ( 0 <= row && row < m_childItems.count() ) + { + m_childItems.removeAt( row ); + } + else + { + cWarning() << "Attempt to remove invalid child in removeChild() at row " << row; + } +} + int PackageTreeItem::type() const { diff --git a/src/modules/netinstall/PackageTreeItem.h b/src/modules/netinstall/PackageTreeItem.h index c04b9a21d39ec178db85eee549c64913f3330ae9..2a0fca83ecd49748d9fada3ca6763d9565560123 100644 --- a/src/modules/netinstall/PackageTreeItem.h +++ b/src/modules/netinstall/PackageTreeItem.h @@ -56,6 +56,7 @@ public: QString description() const { return m_description; } QString preScript() const { return m_preScript; } QString postScript() const { return m_postScript; } + QString source() const { return m_source; } /** @brief Is this item a group-item? * @@ -124,6 +125,8 @@ public: void setSelected( Qt::CheckState isSelected ); void setChildrenSelected( Qt::CheckState isSelected ); + void removeChild( int row ); + /** @brief Update selectedness based on the children's states * * This only makes sense for groups, which might have packages @@ -157,6 +160,7 @@ private: QString m_description; QString m_preScript; QString m_postScript; + QString m_source; bool m_isGroup = false; bool m_isCritical = false; bool m_isHidden = false; diff --git a/src/modules/netinstall/Tests.cpp b/src/modules/netinstall/Tests.cpp index df5d5ad60941c1f47002e9d04486c3556cc3528d..6b1db020c132daa1b2f57eec20a3fb7615e21e5c 100644 --- a/src/modules/netinstall/Tests.cpp +++ b/src/modules/netinstall/Tests.cpp @@ -410,7 +410,7 @@ ItemTests::testUrlFallback() QEventLoop loop; connect( &c, &Config::statusReady, &loop, &QEventLoop::quit ); QSignalSpy spy( &c, &Config::statusReady ); - QTimer::singleShot( std::chrono::seconds(1), &loop, &QEventLoop::quit ); + QTimer::singleShot( std::chrono::seconds( 1 ), &loop, &QEventLoop::quit ); loop.exec(); // Check it didn't time out diff --git a/src/modules/packagechooser/Config.cpp b/src/modules/packagechooser/Config.cpp index 5c0db5d91f6474b8b3d0874209f69e7551e9b88e..491fe5c250bdf7ba4561f32fc430f078d9e45ab7 100644 --- a/src/modules/packagechooser/Config.cpp +++ b/src/modules/packagechooser/Config.cpp @@ -27,6 +27,29 @@ #include "utils/Logger.h" #include "utils/Variant.h" +/** @brief This removes any values from @p groups that match @p source + * + * This is used to remove duplicates from the netinstallAdd structure + * It iterates over @p groups and for each map in the list, if the + * "source" element matches @p source, it is removed from the returned + * list. + */ +static QVariantList +pruneNetinstallAdd( const QString& source, const QVariant& groups ) +{ + QVariantList newGroupList; + const QVariantList groupList = groups.toList(); + for ( const QVariant& group : groupList ) + { + QVariantMap groupMap = group.toMap(); + if ( groupMap.value( "source", "" ).toString() != source ) + { + newGroupList.append( groupMap ); + } + } + return newGroupList; +} + const NamedEnumTable< PackageChooserMode >& packageChooserModeNames() { @@ -55,6 +78,8 @@ PackageChooserMethodNames() { "custom", PackageChooserMethod::Legacy }, { "contextualprocess", PackageChooserMethod::Legacy }, { "packages", PackageChooserMethod::Packages }, + { "netinstall-add", PackageChooserMethod::NetAdd }, + { "netinstall-select", PackageChooserMethod::NetSelect }, }; return names; } @@ -121,6 +146,47 @@ Config::updateGlobalStorage( const QStringList& selected ) const CalamaresUtils::Packages::setGSPackageAdditions( Calamares::JobQueue::instance()->globalStorage(), m_defaultId, packageNames ); } + else if ( m_method == PackageChooserMethod::NetAdd ) + { + QVariantList netinstallDataList = m_model->getNetinstallDataForNames( selected ); + if ( netinstallDataList.isEmpty() ) + { + cWarning() << "No netinstall information found for " << selected; + } + else + { + // If an earlier packagechooser instance added this data to global storage, combine them + auto* gs = Calamares::JobQueue::instance()->globalStorage(); + if ( gs->contains( "netinstallAdd" ) ) + { + netinstallDataList + += pruneNetinstallAdd( QStringLiteral( "packageChooser" ), gs->value( "netinstallAdd" ) ); + } + gs->insert( "netinstallAdd", netinstallDataList ); + } + } + else if ( m_method == PackageChooserMethod::NetSelect ) + { + cDebug() << m_defaultId << "groups to select in netinstall" << selected; + QStringList newSelected = selected; + auto* gs = Calamares::JobQueue::instance()->globalStorage(); + + // If an earlier packagechooser instance added this data to global storage, combine them + if ( gs->contains( "netinstallSelect" ) ) + { + auto selectedOrig = gs->value( "netinstallSelect" ); + if ( selectedOrig.canConvert( QVariant::StringList ) ) + { + newSelected += selectedOrig.toStringList(); + } + else + { + cWarning() << "Invalid NetinstallSelect data in global storage. Earlier selections purged"; + } + gs->remove( "netinstallSelect" ); + } + gs->insert( "netinstallSelect", newSelected ); + } else { cWarning() << "Unknown packagechooser method" << smash( m_method ); diff --git a/src/modules/packagechooser/Config.h b/src/modules/packagechooser/Config.h index 32f1e8b572b78306e6c83f5b0743947e6368fe12..b04b1c30bdea056f677573c44da377d4ccaacae1 100644 --- a/src/modules/packagechooser/Config.h +++ b/src/modules/packagechooser/Config.h @@ -33,6 +33,8 @@ enum class PackageChooserMethod { Legacy, // use contextualprocess or other custom Packages, // use the packages module + NetAdd, // adds packages to the netinstall module + NetSelect, // makes selections in the netinstall module }; const NamedEnumTable< PackageChooserMethod >& PackageChooserMethodNames(); diff --git a/src/modules/packagechooser/PackageModel.cpp b/src/modules/packagechooser/PackageModel.cpp index 8a0b13e515142a425fa5f0a5c35a2e895e8d019a..f1d1184ad25f908ba7bd1471c908b6af7139ac7a 100644 --- a/src/modules/packagechooser/PackageModel.cpp +++ b/src/modules/packagechooser/PackageModel.cpp @@ -15,6 +15,16 @@ #include <QFileInfo> +/** @brief A wrapper for CalamaresUtils::getSubMap that excludes the success param + */ +static QVariantMap +getSubMap( const QVariantMap& map, const QString& key ) +{ + bool success; + + return CalamaresUtils::getSubMap( map, key, success ); +} + static QPixmap loadScreenshot( const QString& path ) { @@ -51,12 +61,13 @@ PackageItem::PackageItem( const QString& a_id, { } -PackageItem::PackageItem::PackageItem( const QVariantMap& item_map ) +PackageItem::PackageItem( const QVariantMap& item_map ) : id( CalamaresUtils::getString( item_map, "id" ) ) , name( CalamaresUtils::Locale::TranslatedString( item_map, "name" ) ) , description( CalamaresUtils::Locale::TranslatedString( item_map, "description" ) ) , screenshot( loadScreenshot( CalamaresUtils::getString( item_map, "screenshot" ) ) ) , packageNames( CalamaresUtils::getStringList( item_map, "packages" ) ) + , netinstallData( getSubMap( item_map, "netinstall" ) ) { if ( name.isEmpty() && id.isEmpty() ) { @@ -125,6 +136,25 @@ PackageListModel::getInstallPackagesForNames( const QStringList& ids ) const return l; } +QVariantList +PackageListModel::getNetinstallDataForNames( const QStringList& ids ) const +{ + QVariantList l; + for ( auto& p : m_packages ) + { + if ( ids.contains( p.id ) ) + { + if ( !p.netinstallData.isEmpty() ) + { + QVariantMap newData = p.netinstallData; + newData[ "source" ] = QStringLiteral( "packageChooser" ); + l.append( newData ); + } + } + } + return l; +} + int PackageListModel::rowCount( const QModelIndex& index ) const { diff --git a/src/modules/packagechooser/PackageModel.h b/src/modules/packagechooser/PackageModel.h index 71003197de71bdecd00018709208ee6b1b43dab4..18682a12176aed9217a4b3d125285a264496e7b9 100644 --- a/src/modules/packagechooser/PackageModel.h +++ b/src/modules/packagechooser/PackageModel.h @@ -26,6 +26,7 @@ struct PackageItem CalamaresUtils::Locale::TranslatedString description; QPixmap screenshot; QStringList packageNames; + QVariantMap netinstallData; /// @brief Create blank PackageItem PackageItem(); @@ -111,6 +112,14 @@ public: */ QStringList getInstallPackagesForNames( const QStringList& ids ) const; + /** @brief Does a name lookup (based on id) and returns the netinstall data + * + * If there is a package with an id in @p ids, returns their netinstall data + * + * returns a list of netinstall data or an emply list if none is found + */ + QVariantList getNetinstallDataForNames( const QStringList& ids ) const; + enum Roles : int { NameRole = Qt::DisplayRole, diff --git a/src/modules/packagechooser/packagechooser.conf b/src/modules/packagechooser/packagechooser.conf index 6461376bf947907ec2e16544f64b1af318f8ff2f..1fa5187aea3ab1e0eb9808cb5f8d5dbecd69f0dd 100644 --- a/src/modules/packagechooser/packagechooser.conf +++ b/src/modules/packagechooser/packagechooser.conf @@ -33,6 +33,15 @@ mode: required # in the `exec` section. These package settings will then be handed # off to whatever package manager is configured there. # +# - "netinstall-select" +# When this is set, the id(s) selected are passed to the netinstall module. +# Any id that matches a group name in that module is set to checked +# +# - "netinstall-add" +# With this method, the packagechooser module is used to add groups to the +# netinstall module. For this to hav=e any effect. You must set netinstall, +# which is described below. +# # There is no need to put this module in the `exec` section. There # are no jobs that this module provides. You should put **other** # modules, either *contextualprocess* or *packages* or some custom @@ -101,13 +110,19 @@ labels: # an additional attempt is made to load the image from the **branding** # directory. # -# The following field is **optional** for an item: +# The following fields are **optional** for an item: # # - *packages* : # List of package names for the product. If using the *method* # "packages", consider this item mandatory (because otherwise # selecting the item would install no packages). # +# - *netinstall* : +# The data in this field should follow the format of a group +# from the netinstall module documented in +# src/modules/netinstall/netinstall.conf. This is only used +# when method is set to "netinstall-add" +# # # AppData Items # # # For data provided by AppData XML: the item has an *appdata* diff --git a/src/modules/partition/Config.cpp b/src/modules/partition/Config.cpp index 155622570a0abf5be4e82d7bcf1b56e3390d2e03..550e17460cce0d34759f592e3e056f58ce0a13a6 100644 --- a/src/modules/partition/Config.cpp +++ b/src/modules/partition/Config.cpp @@ -345,6 +345,11 @@ Config::setConfigurationMap( const QVariantMap& configurationMap ) if ( !m_swapChoices.contains( m_initialSwapChoice ) ) { cWarning() << "Configuration for *initialSwapChoice* is not one of the *userSwapChoices*"; + if ( nameFound ) + { + cWarning() << Logger::SubEntry << "Choice" << swapChoiceNames().find( m_initialSwapChoice ) << "added."; + m_swapChoices.insert( m_initialSwapChoice ); + } m_initialSwapChoice = pickOne( m_swapChoices ); } setSwapChoice( m_initialSwapChoice ); diff --git a/src/modules/partition/PartitionViewStep.cpp b/src/modules/partition/PartitionViewStep.cpp index 18f10d629a511e7fc9aa9ada93c91cbc294185e2..5e8bf2ef06fb9c913e7f45b76095e4368e1d9090 100644 --- a/src/modules/partition/PartitionViewStep.cpp +++ b/src/modules/partition/PartitionViewStep.cpp @@ -675,11 +675,15 @@ PartitionViewStep::setConfigurationMap( const QVariantMap& configurationMap ) // because it could take a while. Then when it's done, we can set up the widgets // and remove the spinner. m_future = new QFutureWatcher< void >(); - connect( m_future, &QFutureWatcher< void >::finished, this, [this] { - continueLoading(); - this->m_future->deleteLater(); - this->m_future = nullptr; - } ); + connect( m_future, + &QFutureWatcher< void >::finished, + this, + [ this ] + { + continueLoading(); + this->m_future->deleteLater(); + this->m_future = nullptr; + } ); QFuture< void > future = QtConcurrent::run( this, &PartitionViewStep::initPartitionCoreModule ); m_future->setFuture( future ); diff --git a/src/modules/partition/core/DeviceModel.cpp b/src/modules/partition/core/DeviceModel.cpp index 25bdbff6c7dbb299e01b79f3fa2c78fa08ffd2ff..6959ac9c22c449c47f4803e06a80e53040323a54 100644 --- a/src/modules/partition/core/DeviceModel.cpp +++ b/src/modules/partition/core/DeviceModel.cpp @@ -28,9 +28,9 @@ static void sortDevices( DeviceModel::DeviceList& l ) { - std::sort( l.begin(), l.end(), []( const Device* dev1, const Device* dev2 ) { - return dev1->deviceNode() < dev2->deviceNode(); - } ); + std::sort( l.begin(), + l.end(), + []( const Device* dev1, const Device* dev2 ) { return dev1->deviceNode() < dev2->deviceNode(); } ); } DeviceModel::DeviceModel( QObject* parent ) diff --git a/src/modules/partition/core/PartitionCoreModule.cpp b/src/modules/partition/core/PartitionCoreModule.cpp index 16e5a7ea17eb337e0e2e783b4cceda4cdd4a1d28..989327ef0412341cace123fb911dd36cc6d6e3fa 100644 --- a/src/modules/partition/core/PartitionCoreModule.cpp +++ b/src/modules/partition/core/PartitionCoreModule.cpp @@ -262,11 +262,9 @@ PartitionCoreModule::doInit() // Gives ownership of the Device* to the DeviceInfo object auto deviceInfo = new DeviceInfo( device ); m_deviceInfos << deviceInfo; - cDebug() << Logger::SubEntry - << device->deviceNode() - << device->capacity() - << Logger::RedactedName( "DevName", device->name() ) - << Logger::RedactedName( "DevNamePretty", device->prettyName() ); + cDebug() << Logger::SubEntry << device->deviceNode() << device->capacity() + << Logger::RedactedName( "DevName", device->name() ) + << Logger::RedactedName( "DevNamePretty", device->prettyName() ); } else { @@ -685,9 +683,8 @@ PartitionCoreModule::lvmPVs() const bool PartitionCoreModule::hasVGwithThisName( const QString& name ) const { - auto condition = [name]( DeviceInfo* d ) { - return dynamic_cast< LvmDevice* >( d->device.data() ) && d->device.data()->name() == name; - }; + auto condition = [ name ]( DeviceInfo* d ) + { return dynamic_cast< LvmDevice* >( d->device.data() ) && d->device.data()->name() == name; }; return std::find_if( m_deviceInfos.begin(), m_deviceInfos.end(), condition ) != m_deviceInfos.end(); } @@ -695,7 +692,8 @@ PartitionCoreModule::hasVGwithThisName( const QString& name ) const bool PartitionCoreModule::isInVG( const Partition* partition ) const { - auto condition = [partition]( DeviceInfo* d ) { + auto condition = [ partition ]( DeviceInfo* d ) + { LvmDevice* vg = dynamic_cast< LvmDevice* >( d->device.data() ); return vg && vg->physicalVolumes().contains( partition ); }; @@ -964,9 +962,9 @@ PartitionCoreModule::layoutApply( Device* dev, const QString boot = QStringLiteral( "/boot" ); const QString root = QStringLiteral( "/" ); const auto is_boot - = [&]( Partition* p ) -> bool { return PartitionInfo::mountPoint( p ) == boot || p->mountPoint() == boot; }; + = [ & ]( Partition* p ) -> bool { return PartitionInfo::mountPoint( p ) == boot || p->mountPoint() == boot; }; const auto is_root - = [&]( Partition* p ) -> bool { return PartitionInfo::mountPoint( p ) == root || p->mountPoint() == root; }; + = [ & ]( Partition* p ) -> bool { return PartitionInfo::mountPoint( p ) == root || p->mountPoint() == root; }; const bool separate_boot_partition = std::find_if( partList.constBegin(), partList.constEnd(), is_boot ) != partList.constEnd(); @@ -1089,10 +1087,14 @@ void PartitionCoreModule::asyncRevertDevice( Device* dev, std::function< void() > callback ) { QFutureWatcher< void >* watcher = new QFutureWatcher< void >(); - connect( watcher, &QFutureWatcher< void >::finished, this, [watcher, callback] { - callback(); - watcher->deleteLater(); - } ); + connect( watcher, + &QFutureWatcher< void >::finished, + this, + [ watcher, callback ] + { + callback(); + watcher->deleteLater(); + } ); QFuture< void > future = QtConcurrent::run( this, &PartitionCoreModule::revertDevice, dev, true ); watcher->setFuture( future ); diff --git a/src/modules/partition/core/PartitionLayout.cpp b/src/modules/partition/core/PartitionLayout.cpp index 3813207efed99bdf57c40c403ca62f5ae11b047b..765d9fffa7888f4e8ec66f9a3bc73280b82a67a7 100644 --- a/src/modules/partition/core/PartitionLayout.cpp +++ b/src/modules/partition/core/PartitionLayout.cpp @@ -283,7 +283,7 @@ PartitionLayout::createPartitions( Device* dev, } } - auto correctFS = [d = m_defaultFsType]( FileSystem::Type t ) { return t == FileSystem::Type::Unknown ? d : t; }; + auto correctFS = [ d = m_defaultFsType ]( FileSystem::Type t ) { return t == FileSystem::Type::Unknown ? d : t; }; // Create the partitions. currentSector = firstSector; diff --git a/src/modules/partition/core/SizeUtils.h b/src/modules/partition/core/SizeUtils.h index d474656c969893eb5a9b365b7af47f7d2d5c9177..155cbd92397b1c74dd57752720e97f512a3c450a 100644 --- a/src/modules/partition/core/SizeUtils.h +++ b/src/modules/partition/core/SizeUtils.h @@ -19,7 +19,8 @@ * to bother with one-byte accuracy (and anyway, a double has at least 50 bits * at which point we're printing giga (or gibi) bytes). */ -static inline QString formatByteSize( qint64 sizeValue ) +static inline QString +formatByteSize( qint64 sizeValue ) { return Capacity::formatByteSize( static_cast< double >( sizeValue ) ); } diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp index 9226eb3b633ecf15e1e109a5349a5e39bd060001..588c1b6437e919e8d5a1433b828f90a07a610dd0 100644 --- a/src/modules/partition/gui/ChoicePage.cpp +++ b/src/modules/partition/gui/ChoicePage.cpp @@ -176,10 +176,14 @@ ChoicePage::init( PartitionCoreModule* core ) // We need to do this because a PCM revert invalidates the deviceModel. - connect( core, &PartitionCoreModule::reverted, this, [=] { - setModelToComboBox( m_drivesCombo, core->deviceModel() ); - m_drivesCombo->setCurrentIndex( m_lastSelectedDeviceIndex ); - } ); + connect( core, + &PartitionCoreModule::reverted, + this, + [ = ] + { + setModelToComboBox( m_drivesCombo, core->deviceModel() ); + m_drivesCombo->setCurrentIndex( m_lastSelectedDeviceIndex ); + } ); setModelToComboBox( m_drivesCombo, core->deviceModel() ); connect( m_drivesCombo, qOverload< int >( &QComboBox::currentIndexChanged ), this, &ChoicePage::applyDeviceChoice ); @@ -303,26 +307,30 @@ ChoicePage::setupChoices() #else auto buttonSignal = &QButtonGroup::idToggled; #endif - connect( m_grp, buttonSignal, this, [this]( int id, bool checked ) { - if ( checked ) // An action was picked. - { - m_config->setInstallChoice( id ); - updateNextEnabled(); - - Q_EMIT actionChosen(); - } - else // An action was unpicked, either on its own or because of another selection. - { - if ( m_grp->checkedButton() == nullptr ) // If no other action is chosen, we must - { - // set m_choice to NoChoice and reset previews. - m_config->setInstallChoice( InstallChoice::NoChoice ); - updateNextEnabled(); - - Q_EMIT actionChosen(); - } - } - } ); + connect( m_grp, + buttonSignal, + this, + [ this ]( int id, bool checked ) + { + if ( checked ) // An action was picked. + { + m_config->setInstallChoice( id ); + updateNextEnabled(); + + Q_EMIT actionChosen(); + } + else // An action was unpicked, either on its own or because of another selection. + { + if ( m_grp->checkedButton() == nullptr ) // If no other action is chosen, we must + { + // set m_choice to NoChoice and reset previews. + m_config->setInstallChoice( InstallChoice::NoChoice ); + updateNextEnabled(); + + Q_EMIT actionChosen(); + } + } + } ); m_rightLayout->setStretchFactor( m_itemsLayout, 1 ); m_rightLayout->setStretchFactor( m_previewBeforeFrame, 0 ); @@ -401,11 +409,13 @@ ChoicePage::applyDeviceChoice() if ( m_core->isDirty() ) { ScanningDialog::run( - QtConcurrent::run( [=] { - QMutexLocker locker( &m_coreMutex ); - m_core->revertAllDevices(); - } ), - [this] { continueApplyDeviceChoice(); }, + QtConcurrent::run( + [ = ] + { + QMutexLocker locker( &m_coreMutex ); + m_core->revertAllDevices(); + } ), + [ this ] { continueApplyDeviceChoice(); }, this ); } else @@ -493,11 +503,14 @@ ChoicePage::applyActionChoice( InstallChoice choice ) if ( m_core->isDirty() ) { ScanningDialog::run( - QtConcurrent::run( [=] { - QMutexLocker locker( &m_coreMutex ); - m_core->revertDevice( selectedDevice() ); - } ), - [=] { + QtConcurrent::run( + [ = ] + { + QMutexLocker locker( &m_coreMutex ); + m_core->revertDevice( selectedDevice() ); + } ), + [ = ] + { PartitionActions::doAutopartition( m_core, selectedDevice(), options ); Q_EMIT deviceChosen(); }, @@ -514,10 +527,12 @@ ChoicePage::applyActionChoice( InstallChoice choice ) if ( m_core->isDirty() ) { ScanningDialog::run( - QtConcurrent::run( [=] { - QMutexLocker locker( &m_coreMutex ); - m_core->revertDevice( selectedDevice() ); - } ), + QtConcurrent::run( + [ = ] + { + QMutexLocker locker( &m_coreMutex ); + m_core->revertDevice( selectedDevice() ); + } ), [] {}, this ); } @@ -532,11 +547,14 @@ ChoicePage::applyActionChoice( InstallChoice choice ) if ( m_core->isDirty() ) { ScanningDialog::run( - QtConcurrent::run( [=] { - QMutexLocker locker( &m_coreMutex ); - m_core->revertDevice( selectedDevice() ); - } ), - [this] { + QtConcurrent::run( + [ = ] + { + QMutexLocker locker( &m_coreMutex ); + m_core->revertDevice( selectedDevice() ); + } ), + [ this ] + { // We need to reupdate after reverting because the splitter widget is // not a true view. updateActionChoicePreview( m_config->installChoice() ); @@ -772,7 +790,8 @@ ChoicePage::doReplaceSelectedPartition( const QModelIndex& current ) ScanningDialog::run( QtConcurrent::run( - [this, current, homePartitionPath]( bool doReuseHomePartition ) { + [ this, current, homePartitionPath ]( bool doReuseHomePartition ) + { QMutexLocker locker( &m_coreMutex ); if ( m_core->isDirty() ) @@ -853,7 +872,8 @@ ChoicePage::doReplaceSelectedPartition( const QModelIndex& current ) } }, m_reuseHomeCheckBox->isChecked() ), - [this, homePartitionPath] { + [ this, homePartitionPath ] + { m_reuseHomeCheckBox->setVisible( !homePartitionPath->isEmpty() ); if ( !homePartitionPath->isEmpty() ) m_reuseHomeCheckBox->setText( tr( "Reuse %1 as home partition for %2." ) @@ -1006,7 +1026,8 @@ ChoicePage::updateActionChoicePreview( InstallChoice choice ) connect( m_afterPartitionSplitterWidget, &PartitionSplitterWidget::partitionResized, this, - [this, sizeLabel]( const QString& path, qint64 size, qint64 sizeNext ) { + [ this, sizeLabel ]( const QString& path, qint64 size, qint64 sizeNext ) + { Q_UNUSED( path ) sizeLabel->setText( tr( "%1 will be shrunk to %2MiB and a new " @@ -1020,7 +1041,8 @@ ChoicePage::updateActionChoicePreview( InstallChoice choice ) m_previewAfterFrame->show(); m_previewAfterLabel->show(); - SelectionFilter filter = []( const QModelIndex& index ) { + SelectionFilter filter = []( const QModelIndex& index ) + { return PartUtils::canBeResized( static_cast< Partition* >( index.data( PartitionModel::PartitionPtrRole ).value< void* >() ), Logger::Once() ); @@ -1069,17 +1091,22 @@ ChoicePage::updateActionChoicePreview( InstallChoice choice ) eraseBootloaderLabel->setText( tr( "Boot loader location:" ) ); m_bootloaderComboBox = createBootloaderComboBox( eraseWidget ); - connect( m_core->bootLoaderModel(), &QAbstractItemModel::modelReset, [this]() { - if ( !m_bootloaderComboBox.isNull() ) - { - Calamares::restoreSelectedBootLoader( *m_bootloaderComboBox, m_core->bootLoaderInstallPath() ); - } - } ); + connect( m_core->bootLoaderModel(), + &QAbstractItemModel::modelReset, + [ this ]() + { + if ( !m_bootloaderComboBox.isNull() ) + { + Calamares::restoreSelectedBootLoader( *m_bootloaderComboBox, + m_core->bootLoaderInstallPath() ); + } + } ); connect( m_core, &PartitionCoreModule::deviceReverted, this, - [this]( Device* dev ) { + [ this ]( Device* dev ) + { Q_UNUSED( dev ) if ( !m_bootloaderComboBox.isNull() ) { @@ -1110,7 +1137,8 @@ ChoicePage::updateActionChoicePreview( InstallChoice choice ) } else { - SelectionFilter filter = []( const QModelIndex& index ) { + SelectionFilter filter = []( const QModelIndex& index ) + { return PartUtils::canBeReplaced( static_cast< Partition* >( index.data( PartitionModel::PartitionPtrRole ).value< void* >() ), Logger::Once() ); @@ -1217,18 +1245,22 @@ ChoicePage::createBootloaderComboBox( QWidget* parent ) comboForBootloader->setModel( m_core->bootLoaderModel() ); // When the chosen bootloader device changes, we update the choice in the PCM - connect( comboForBootloader, QOverload< int >::of( &QComboBox::currentIndexChanged ), this, [this]( int newIndex ) { - QComboBox* bootloaderCombo = qobject_cast< QComboBox* >( sender() ); - if ( bootloaderCombo ) - { - QVariant var = bootloaderCombo->itemData( newIndex, BootLoaderModel::BootLoaderPathRole ); - if ( !var.isValid() ) - { - return; - } - m_core->setBootLoaderInstallPath( var.toString() ); - } - } ); + connect( comboForBootloader, + QOverload< int >::of( &QComboBox::currentIndexChanged ), + this, + [ this ]( int newIndex ) + { + QComboBox* bootloaderCombo = qobject_cast< QComboBox* >( sender() ); + if ( bootloaderCombo ) + { + QVariant var = bootloaderCombo->itemData( newIndex, BootLoaderModel::BootLoaderPathRole ); + if ( !var.isValid() ) + { + return; + } + m_core->setBootLoaderInstallPath( var.toString() ); + } + } ); return comboForBootloader; } diff --git a/src/modules/partition/gui/CreatePartitionDialog.cpp b/src/modules/partition/gui/CreatePartitionDialog.cpp index 6bde9a1484dc5590d0ef2b87d07024bff19ac655..c5b17c69e0c27cdb34ad6f2cb93babfdd2334234 100644 --- a/src/modules/partition/gui/CreatePartitionDialog.cpp +++ b/src/modules/partition/gui/CreatePartitionDialog.cpp @@ -325,16 +325,10 @@ CreatePartitionDialog::updateMountPointUi() void CreatePartitionDialog::checkMountPointSelection() { - if ( m_usedMountPoints.contains( selectedMountPoint( m_ui->mountPointComboBox ) ) ) - { - m_ui->labelMountPoint->setText( tr( "Mountpoint already in use. Please select another one." ) ); - m_ui->buttonBox->button( QDialogButtonBox::Ok )->setEnabled( false ); - } - else - { - m_ui->labelMountPoint->setText( QString() ); - m_ui->buttonBox->button( QDialogButtonBox::Ok )->setEnabled( true ); - } + validateMountPoint( selectedMountPoint( m_ui->mountPointComboBox ), + m_usedMountPoints, + m_ui->mountPointExplanation, + m_ui->buttonBox->button( QDialogButtonBox::Ok ) ); } void diff --git a/src/modules/partition/gui/CreatePartitionDialog.ui b/src/modules/partition/gui/CreatePartitionDialog.ui index dad932101d0c9b78dc75fa9ca816a794a163fb4a..0ee715fe05dc0a3d495f6252bd18f26f87dc6aa3 100644 --- a/src/modules/partition/gui/CreatePartitionDialog.ui +++ b/src/modules/partition/gui/CreatePartitionDialog.ui @@ -68,7 +68,7 @@ SPDX-License-Identifier: GPL-3.0-or-later <item> <widget class="QRadioButton" name="primaryRadioButton"> <property name="text"> - <string>&Primary</string> + <string>Primar&y</string> </property> <property name="checked"> <bool>true</bool> @@ -171,6 +171,12 @@ SPDX-License-Identifier: GPL-3.0-or-later </item> <item row="8" column="1"> <widget class="QComboBox" name="mountPointComboBox"> + <property name="sizePolicy"> + <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="editable"> <bool>true</bool> </property> @@ -179,21 +185,14 @@ SPDX-License-Identifier: GPL-3.0-or-later </property> </widget> </item> - <item row="10" column="1"> - <widget class="QLabel" name="labelMountPoint"> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="11" column="0"> + <item row="12" column="0"> <widget class="QLabel" name="label_3"> <property name="text"> <string>Flags:</string> </property> </widget> </item> - <item row="11" column="1"> + <item row="12" column="1"> <widget class="QListWidget" name="m_listFlags"> <property name="alternatingRowColors"> <bool>true</bool> @@ -206,7 +205,7 @@ SPDX-License-Identifier: GPL-3.0-or-later </property> </widget> </item> - <item row="12" column="0"> + <item row="13" column="0"> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> @@ -219,14 +218,8 @@ SPDX-License-Identifier: GPL-3.0-or-later </property> </spacer> </item> - <item row="9" column="1"> + <item row="10" column="1"> <widget class="QLineEdit" name="filesystemLabelEdit"> - <property name="maximumSize"> - <size> - <width>150</width> - <height>16777215</height> - </size> - </property> <property name="toolTip"> <string>Label for the filesystem</string> </property> @@ -235,13 +228,20 @@ SPDX-License-Identifier: GPL-3.0-or-later </property> </widget> </item> - <item row="9" column="0"> + <item row="10" column="0"> <widget class="QLabel" name="label_4"> <property name="text"> <string>FS Label:</string> </property> </widget> </item> + <item row="9" column="1"> + <widget class="QLabel" name="mountPointExplanation"> + <property name="text"> + <string/> + </property> + </widget> + </item> </layout> </item> <item> diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.cpp b/src/modules/partition/gui/EditExistingPartitionDialog.cpp index a3052b3b7b37f10d08e9ed665ae16ff2034fec3c..0bc35cabe861bbaba5ca0540def6006c2b41387e 100644 --- a/src/modules/partition/gui/EditExistingPartitionDialog.cpp +++ b/src/modules/partition/gui/EditExistingPartitionDialog.cpp @@ -69,22 +69,25 @@ EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device, replacePartResizerWidget(); - connect( m_ui->formatRadioButton, &QAbstractButton::toggled, [this]( bool doFormat ) { - replacePartResizerWidget(); + connect( m_ui->formatRadioButton, + &QAbstractButton::toggled, + [ this ]( bool doFormat ) + { + replacePartResizerWidget(); - m_ui->fileSystemLabel->setEnabled( doFormat ); - m_ui->fileSystemComboBox->setEnabled( doFormat ); + m_ui->fileSystemLabel->setEnabled( doFormat ); + m_ui->fileSystemComboBox->setEnabled( doFormat ); - if ( !doFormat ) - { - m_ui->fileSystemComboBox->setCurrentText( userVisibleFS( m_partition->fileSystem() ) ); - } + if ( !doFormat ) + { + m_ui->fileSystemComboBox->setCurrentText( userVisibleFS( m_partition->fileSystem() ) ); + } - updateMountPointPicker(); - } ); + updateMountPointPicker(); + } ); connect( - m_ui->fileSystemComboBox, &QComboBox::currentTextChanged, [this]( QString ) { updateMountPointPicker(); } ); + m_ui->fileSystemComboBox, &QComboBox::currentTextChanged, [ this ]( QString ) { updateMountPointPicker(); } ); // File system QStringList fsNames; @@ -295,14 +298,8 @@ EditExistingPartitionDialog::updateMountPointPicker() void EditExistingPartitionDialog::checkMountPointSelection() { - if ( m_usedMountPoints.contains( selectedMountPoint( m_ui->mountPointComboBox ) ) ) - { - m_ui->labelMountPoint->setText( tr( "Mountpoint already in use. Please select another one." ) ); - m_ui->buttonBox->button( QDialogButtonBox::Ok )->setEnabled( false ); - } - else - { - m_ui->labelMountPoint->setText( QString() ); - m_ui->buttonBox->button( QDialogButtonBox::Ok )->setEnabled( true ); - } + validateMountPoint( selectedMountPoint( m_ui->mountPointComboBox ), + m_usedMountPoints, + m_ui->mountPointExplanation, + m_ui->buttonBox->button( QDialogButtonBox::Ok ) ); } diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.ui b/src/modules/partition/gui/EditExistingPartitionDialog.ui index 7599bc77202b8b01f433a6252da47f601ae3b270..4a9982656532266d9ef959d70353a1e8663aba1c 100644 --- a/src/modules/partition/gui/EditExistingPartitionDialog.ui +++ b/src/modules/partition/gui/EditExistingPartitionDialog.ui @@ -51,7 +51,7 @@ SPDX-License-Identifier: GPL-3.0-or-later <item row="2" column="0"> <widget class="QLabel" name="label_3"> <property name="text"> - <string>Content:</string> + <string>Con&tent:</string> </property> <property name="buddy"> <cstring>keepRadioButton</cstring> @@ -109,6 +109,12 @@ SPDX-License-Identifier: GPL-3.0-or-later </item> <item row="6" column="1"> <widget class="QComboBox" name="mountPointComboBox"> + <property name="sizePolicy"> + <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="editable"> <bool>true</bool> </property> @@ -147,14 +153,14 @@ SPDX-License-Identifier: GPL-3.0-or-later <item row="5" column="1"> <widget class="QComboBox" name="fileSystemComboBox"/> </item> - <item row="9" column="0"> + <item row="10" column="0"> <widget class="QLabel" name="label_4"> <property name="text"> <string>Flags:</string> </property> </widget> </item> - <item row="9" column="1"> + <item row="10" column="1"> <widget class="QListWidget" name="m_listFlags"> <property name="alternatingRowColors"> <bool>true</bool> @@ -168,20 +174,7 @@ SPDX-License-Identifier: GPL-3.0-or-later </widget> </item> <item row="8" column="1"> - <widget class="QLabel" name="labelMountPoint"> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="7" column="1"> <widget class="QLineEdit" name="fileSystemLabelEdit"> - <property name="maximumSize"> - <size> - <width>150</width> - <height>16777215</height> - </size> - </property> <property name="toolTip"> <string>Label for the filesystem</string> </property> @@ -190,13 +183,20 @@ SPDX-License-Identifier: GPL-3.0-or-later </property> </widget> </item> - <item row="7" column="0"> + <item row="8" column="0"> <widget class="QLabel" name="fileSystemLabelLabel"> <property name="text"> <string>FS Label:</string> </property> </widget> </item> + <item row="7" column="1"> + <widget class="QLabel" name="mountPointExplanation"> + <property name="text"> + <string/> + </property> + </widget> + </item> </layout> </item> <item> diff --git a/src/modules/partition/gui/EncryptWidget.cpp b/src/modules/partition/gui/EncryptWidget.cpp index ee50e7d6642b8a695a19b77b56012cd9b219bbdc..fe76230509b4cb5952634280391afc4111954150 100644 --- a/src/modules/partition/gui/EncryptWidget.cpp +++ b/src/modules/partition/gui/EncryptWidget.cpp @@ -13,9 +13,27 @@ #include "ui_EncryptWidget.h" +#include "Branding.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Retranslator.h" +/** @brief Does this system support whole-disk encryption? + * + * Returns @c true if the system is likely to support encryption + * with sufficient performance to be usable. A machine that can't + * doe hardware-assisted AES is **probably** too slow, so we could + * warn the user that ticking the "encrypt system" box is a bad + * idea. + * + * Since we don't have an oracle that can answer that question, + * just pretend every system can do it. + */ +static inline bool +systemSupportsEncryptionAcceptably() +{ + return true; +} + EncryptWidget::EncryptWidget( QWidget* parent ) : QWidget( parent ) , m_ui( new Ui::EncryptWidget ) @@ -27,6 +45,18 @@ EncryptWidget::EncryptWidget( QWidget* parent ) m_ui->m_passphraseLineEdit->hide(); m_ui->m_confirmLineEdit->hide(); m_ui->m_iconLabel->hide(); + // TODO: this deserves better rendering, an icon or something, but that will + // depend on having a non-bogus implementation of systemSupportsEncryptionAcceptably + if ( systemSupportsEncryptionAcceptably() ) + { + m_ui->m_encryptionUnsupportedLabel->hide(); + } + else + { + // This is really ugly, but the character is unicode "unlocked" + m_ui->m_encryptionUnsupportedLabel->setText( QStringLiteral( "🔓" ) ); + m_ui->m_encryptionUnsupportedLabel->show(); + } connect( m_ui->m_encryptCheckBox, &QCheckBox::stateChanged, this, &EncryptWidget::onCheckBoxStateChanged ); connect( m_ui->m_passphraseLineEdit, &QLineEdit::textEdited, this, &EncryptWidget::onPassphraseEdited ); diff --git a/src/modules/partition/gui/EncryptWidget.ui b/src/modules/partition/gui/EncryptWidget.ui index 212300291f4fe1a4e80198a60b03cd5b2fd34d26..a629163d39b2f9c1c2107cfa304f85b511549c3b 100644 --- a/src/modules/partition/gui/EncryptWidget.ui +++ b/src/modules/partition/gui/EncryptWidget.ui @@ -37,6 +37,19 @@ SPDX-License-Identifier: GPL-3.0-or-later </property> </widget> </item> + <item> + <widget class="QLabel" name="m_encryptionUnsupportedLabel"> + <property name="toolTip"> + <string>Your system does not seem to support encryption well enough to encrypt the entire system. You may enable encryption, but performance may suffer.</string> + </property> + <property name="text"> + <string notr="true">🔓</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> <item> <widget class="QLineEdit" name="m_passphraseLineEdit"> <property name="echoMode"> @@ -57,6 +70,19 @@ SPDX-License-Identifier: GPL-3.0-or-later </property> </widget> </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> <item> <widget class="QLabel" name="m_iconLabel"> <property name="text"> diff --git a/src/modules/partition/gui/PartitionBarsView.cpp b/src/modules/partition/gui/PartitionBarsView.cpp index 81f518acc69e1969dc5a1415f6192a387d950456..305184b13c25becf523a9f7481d6097fb78ff3b5 100644 --- a/src/modules/partition/gui/PartitionBarsView.cpp +++ b/src/modules/partition/gui/PartitionBarsView.cpp @@ -54,9 +54,10 @@ PartitionBarsView::PartitionBarsView( QWidget* parent ) setSelectionMode( QAbstractItemView::SingleSelection ); // Debug - connect( this, &PartitionBarsView::clicked, this, [=]( const QModelIndex& index ) { - cDebug() << "Clicked row" << index.row(); - } ); + connect( this, + &PartitionBarsView::clicked, + this, + [ = ]( const QModelIndex& index ) { cDebug() << "Clicked row" << index.row(); } ); setMouseTracking( true ); } @@ -399,7 +400,7 @@ void PartitionBarsView::setSelectionModel( QItemSelectionModel* selectionModel ) { QAbstractItemView::setSelectionModel( selectionModel ); - connect( selectionModel, &QItemSelectionModel::selectionChanged, this, [=] { viewport()->repaint(); } ); + connect( selectionModel, &QItemSelectionModel::selectionChanged, this, [ = ] { viewport()->repaint(); } ); } @@ -410,7 +411,8 @@ PartitionBarsView::setSelectionFilter( std::function< bool( const QModelIndex& ) } -QModelIndex PartitionBarsView::moveCursor( CursorAction, Qt::KeyboardModifiers ) +QModelIndex +PartitionBarsView::moveCursor( CursorAction, Qt::KeyboardModifiers ) { return QModelIndex(); } diff --git a/src/modules/partition/gui/PartitionDialogHelpers.cpp b/src/modules/partition/gui/PartitionDialogHelpers.cpp index 65e88f8984c83e5c5ae3537dcb51fe2c1186a778..1ba110338ea49288d990f70561cec0e98eae41e0 100644 --- a/src/modules/partition/gui/PartitionDialogHelpers.cpp +++ b/src/modules/partition/gui/PartitionDialogHelpers.cpp @@ -12,13 +12,17 @@ #include "PartitionDialogHelpers.h" #include "core/PartUtils.h" +#include "gui/CreatePartitionDialog.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/Logger.h" #include <QComboBox> +#include <QLabel> +#include <QLineEdit> #include <QListWidget> +#include <QPushButton> QStringList standardMountPoints() @@ -37,7 +41,7 @@ void standardMountPoints( QComboBox& combo ) { combo.clear(); - combo.addItem( QObject::tr( "(no mount point)" ) ); + combo.lineEdit()->setPlaceholderText( QObject::tr( "(no mount point)" ) ); combo.addItems( standardMountPoints() ); } @@ -51,10 +55,6 @@ standardMountPoints( QComboBox& combo, const QString& selected ) QString selectedMountPoint( QComboBox& combo ) { - if ( combo.currentIndex() == 0 ) - { - return QString(); - } return combo.currentText(); } @@ -63,7 +63,7 @@ setSelectedMountPoint( QComboBox& combo, const QString& selected ) { if ( selected.isEmpty() ) { - combo.setCurrentIndex( 0 ); // (no mount point) + combo.setCurrentIndex( -1 ); // (no mount point) } else { @@ -80,6 +80,34 @@ setSelectedMountPoint( QComboBox& combo, const QString& selected ) } } +bool +validateMountPoint( const QString& mountPoint, const QStringList& inUse, QLabel* label, QPushButton* button ) +{ + QString msg; + bool ok = true; + + if ( inUse.contains( mountPoint ) ) + { + msg = CreatePartitionDialog::tr( "Mountpoint already in use. Please select another one." ); + ok = false; + } + else if ( !mountPoint.isEmpty() && !mountPoint.startsWith( '/' ) ) + { + msg = CreatePartitionDialog::tr( "Mountpoint must start with a <tt>/</tt>." ); + ok = false; + } + + if ( label ) + { + label->setText( msg ); + } + if ( button ) + { + button->setEnabled( ok ); + } + return ok; +} + PartitionTable::Flags flagsFromList( const QListWidget& list ) diff --git a/src/modules/partition/gui/PartitionDialogHelpers.h b/src/modules/partition/gui/PartitionDialogHelpers.h index 7761004b53c7ed7daae26b7525502d2fc1619b4c..eea0998c4bde4b0f561cd30333c1c0116635fb25 100644 --- a/src/modules/partition/gui/PartitionDialogHelpers.h +++ b/src/modules/partition/gui/PartitionDialogHelpers.h @@ -16,7 +16,9 @@ #include <QStringList> +class QPushButton; class QComboBox; +class QLabel; class QListWidget; /** @@ -58,6 +60,16 @@ setSelectedMountPoint( QComboBox* combo, const QString& selected ) setSelectedMountPoint( *combo, selected ); } +/** @brief Validate a @p mountPoint and adjust the UI + * + * If @p mountPoint is valid -- unused and starts with a /, for instance -- + * then the button is enabled, label is cleared, and returns @c true. + * + * If it is not valid, returns @c false and sets the UI + * to explain why. + */ +bool validateMountPoint( const QString& mountPoint, const QStringList& inUse, QLabel* label, QPushButton* button ); + /** * Get the flags that have been checked in the list widget. */ diff --git a/src/modules/partition/gui/PartitionLabelsView.cpp b/src/modules/partition/gui/PartitionLabelsView.cpp index e73d7f4af3b54af2046096520ca0800f6836fe5b..e3a50c576907c4c26daedb6c1d620b6a8301768e 100644 --- a/src/modules/partition/gui/PartitionLabelsView.cpp +++ b/src/modules/partition/gui/PartitionLabelsView.cpp @@ -519,7 +519,7 @@ void PartitionLabelsView::setSelectionModel( QItemSelectionModel* selectionModel ) { QAbstractItemView::setSelectionModel( selectionModel ); - connect( selectionModel, &QItemSelectionModel::selectionChanged, this, [=] { viewport()->repaint(); } ); + connect( selectionModel, &QItemSelectionModel::selectionChanged, this, [ = ] { viewport()->repaint(); } ); } diff --git a/src/modules/partition/gui/PartitionPage.cpp b/src/modules/partition/gui/PartitionPage.cpp index 9d7a2f0d75dffd87acd5ae3bb3317839a2a6bd82..0b3cf2478a902249bbf2e7d23d35887331653c92 100644 --- a/src/modules/partition/gui/PartitionPage.cpp +++ b/src/modules/partition/gui/PartitionPage.cpp @@ -451,15 +451,18 @@ void PartitionPage::onRevertClicked() { ScanningDialog::run( - QtConcurrent::run( [this] { - QMutexLocker locker( &m_revertMutex ); - - int oldIndex = m_ui->deviceComboBox->currentIndex(); - m_core->revertAllDevices(); - m_ui->deviceComboBox->setCurrentIndex( ( oldIndex < 0 ) ? 0 : oldIndex ); - updateFromCurrentDevice(); - } ), - [this] { + QtConcurrent::run( + [ this ] + { + QMutexLocker locker( &m_revertMutex ); + + int oldIndex = m_ui->deviceComboBox->currentIndex(); + m_core->revertAllDevices(); + m_ui->deviceComboBox->setCurrentIndex( ( oldIndex < 0 ) ? 0 : oldIndex ); + updateFromCurrentDevice(); + } ), + [ this ] + { m_lastSelectedBootLoaderIndex = -1; if ( m_ui->bootLoaderComboBox->currentIndex() < 0 ) { @@ -606,7 +609,8 @@ PartitionPage::updateFromCurrentDevice() m_ui->partitionBarsView->selectionModel(), &QItemSelectionModel::currentChanged, this, - [=] { + [ = ] + { QModelIndex selectedIndex = m_ui->partitionBarsView->selectionModel()->currentIndex(); selectedIndex = selectedIndex.sibling( selectedIndex.row(), 0 ); m_ui->partitionBarsView->setCurrentIndex( selectedIndex ); @@ -625,7 +629,7 @@ PartitionPage::updateFromCurrentDevice() // model changes connect( m_ui->partitionTreeView->selectionModel(), &QItemSelectionModel::currentChanged, - [this]( const QModelIndex&, const QModelIndex& ) { updateButtons(); } ); + [ this ]( const QModelIndex&, const QModelIndex& ) { updateButtons(); } ); connect( model, &QAbstractItemModel::modelReset, this, &PartitionPage::onPartitionModelReset ); } diff --git a/src/modules/partition/gui/PartitionSplitterWidget.cpp b/src/modules/partition/gui/PartitionSplitterWidget.cpp index 0cafe7814f5a35718f2be53d6609be6abf9d2851..e52afaa74809fa190caa471a25f5c804941889a2 100644 --- a/src/modules/partition/gui/PartitionSplitterWidget.cpp +++ b/src/modules/partition/gui/PartitionSplitterWidget.cpp @@ -159,14 +159,16 @@ PartitionSplitterWidget::setSplitPartition( const QString& path, qint64 minSize, m_itemToResizePath.clear(); } - PartitionSplitterItem itemToResize = _findItem( m_items, [path]( PartitionSplitterItem& item ) -> bool { - if ( path == item.itemPath ) - { - item.status = PartitionSplitterItem::Resizing; - return true; - } - return false; - } ); + PartitionSplitterItem itemToResize = _findItem( m_items, + [ path ]( PartitionSplitterItem& item ) -> bool + { + if ( path == item.itemPath ) + { + item.status = PartitionSplitterItem::Resizing; + return true; + } + return false; + } ); if ( itemToResize.isNull() ) { @@ -184,14 +186,16 @@ PartitionSplitterWidget::setSplitPartition( const QString& path, qint64 minSize, qint64 newSize = m_itemToResize.size - preferredSize; m_itemToResize.size = preferredSize; - int opCount = _eachItem( m_items, [preferredSize]( PartitionSplitterItem& item ) -> bool { - if ( item.status == PartitionSplitterItem::Resizing ) - { - item.size = preferredSize; - return true; - } - return false; - } ); + int opCount = _eachItem( m_items, + [ preferredSize ]( PartitionSplitterItem& item ) -> bool + { + if ( item.status == PartitionSplitterItem::Resizing ) + { + item.size = preferredSize; + return true; + } + return false; + } ); cDebug() << "each splitter item opcount:" << opCount; m_itemMinSize = minSize; m_itemMaxSize = maxSize; @@ -358,19 +362,21 @@ PartitionSplitterWidget::mouseMoveEvent( QMouseEvent* event ) m_itemToResize.size = qRound64( span * percent ); m_itemToResizeNext.size -= m_itemToResize.size - oldsize; - _eachItem( m_items, [this]( PartitionSplitterItem& item ) -> bool { - if ( item.status == PartitionSplitterItem::Resizing ) - { - item.size = m_itemToResize.size; - return true; - } - else if ( item.status == PartitionSplitterItem::ResizingNext ) - { - item.size = m_itemToResizeNext.size; - return true; - } - return false; - } ); + _eachItem( m_items, + [ this ]( PartitionSplitterItem& item ) -> bool + { + if ( item.status == PartitionSplitterItem::Resizing ) + { + item.size = m_itemToResize.size; + return true; + } + else if ( item.status == PartitionSplitterItem::ResizingNext ) + { + item.size = m_itemToResizeNext.size; + return true; + } + return false; + } ); repaint(); diff --git a/src/modules/partition/gui/ReplaceWidget.cpp b/src/modules/partition/gui/ReplaceWidget.cpp index 2e5675a11b60ba92fa1b1eda65ef81fc23f35aaf..76f9ff96349a90aeef137743799d5b94b0a6690f 100644 --- a/src/modules/partition/gui/ReplaceWidget.cpp +++ b/src/modules/partition/gui/ReplaceWidget.cpp @@ -46,9 +46,10 @@ ReplaceWidget::ReplaceWidget( PartitionCoreModule* core, QComboBox* devicesCombo m_ui->bootStatusLabel->clear(); updateFromCurrentDevice( devicesComboBox ); - connect( devicesComboBox, &QComboBox::currentTextChanged, this, [=]( const QString& /* text */ ) { - updateFromCurrentDevice( devicesComboBox ); - } ); + connect( devicesComboBox, + &QComboBox::currentTextChanged, + this, + [ = ]( const QString& /* text */ ) { updateFromCurrentDevice( devicesComboBox ); } ); CALAMARES_RETRANSLATE( onPartitionSelected(); ); } diff --git a/src/modules/partition/gui/ScanningDialog.cpp b/src/modules/partition/gui/ScanningDialog.cpp index 4dffa922b562edd05729ad606a548d4189effd25..56133e21f9d7e3675eb335f74915ad2c0bf0a21c 100644 --- a/src/modules/partition/gui/ScanningDialog.cpp +++ b/src/modules/partition/gui/ScanningDialog.cpp @@ -47,12 +47,16 @@ ScanningDialog::run( const QFuture< void >& future, theDialog->show(); QFutureWatcher< void >* watcher = new QFutureWatcher< void >(); - connect( watcher, &QFutureWatcher< void >::finished, theDialog, [watcher, theDialog, callback] { - watcher->deleteLater(); - theDialog->hide(); - theDialog->deleteLater(); - callback(); - } ); + connect( watcher, + &QFutureWatcher< void >::finished, + theDialog, + [ watcher, theDialog, callback ] + { + watcher->deleteLater(); + theDialog->hide(); + theDialog->deleteLater(); + callback(); + } ); watcher->setFuture( future ); } diff --git a/src/modules/partition/gui/VolumeGroupBaseDialog.cpp b/src/modules/partition/gui/VolumeGroupBaseDialog.cpp index 48b44f68d8a664aede4a5027fae5980eb51d4aef..818a60483f07358ae77e98282c22530e31bfefed 100644 --- a/src/modules/partition/gui/VolumeGroupBaseDialog.cpp +++ b/src/modules/partition/gui/VolumeGroupBaseDialog.cpp @@ -45,17 +45,25 @@ VolumeGroupBaseDialog::VolumeGroupBaseDialog( QString& vgName, QVector< const Pa updateOkButton(); updateTotalSize(); - connect( ui->pvList, &QListWidget::itemChanged, this, [&]( QListWidgetItem* ) { - updateTotalSize(); - updateOkButton(); - } ); - - connect( ui->peSize, qOverload< int >( &QSpinBox::valueChanged ), this, [&]( int ) { - updateTotalSectors(); - updateOkButton(); - } ); - - connect( ui->vgName, &QLineEdit::textChanged, this, [&]( const QString& ) { updateOkButton(); } ); + connect( ui->pvList, + &QListWidget::itemChanged, + this, + [ & ]( QListWidgetItem* ) + { + updateTotalSize(); + updateOkButton(); + } ); + + connect( ui->peSize, + qOverload< int >( &QSpinBox::valueChanged ), + this, + [ & ]( int ) + { + updateTotalSectors(); + updateOkButton(); + } ); + + connect( ui->vgName, &QLineEdit::textChanged, this, [ & ]( const QString& ) { updateOkButton(); } ); } VolumeGroupBaseDialog::~VolumeGroupBaseDialog() diff --git a/src/modules/partition/jobs/AutoMountManagementJob.cpp b/src/modules/partition/jobs/AutoMountManagementJob.cpp index e276447db3f0f400124222dbccd2659b8c93b37f..29b19793302b0fe57dfb7918aa1a6b209c28cf1e 100644 --- a/src/modules/partition/jobs/AutoMountManagementJob.cpp +++ b/src/modules/partition/jobs/AutoMountManagementJob.cpp @@ -26,7 +26,9 @@ Calamares::JobResult AutoMountManagementJob::exec() { cVerbose() << "this" << Logger::Pointer( this ) << "value" << Logger::Pointer( m_stored ) - << ( m_stored ? "restore" : m_disable ? "disable" : "enable" ); + << ( m_stored ? "restore" + : m_disable ? "disable" + : "enable" ); if ( m_stored ) { CalamaresUtils::Partition::automountRestore( m_stored ); diff --git a/src/modules/partition/jobs/ClearMountsJob.cpp b/src/modules/partition/jobs/ClearMountsJob.cpp index 2f5a8bd36197ece4ff957717c9a529ea81939d7e..3d7b9d0de10a0398373c1ad75f05fd118f6f1898 100644 --- a/src/modules/partition/jobs/ClearMountsJob.cpp +++ b/src/modules/partition/jobs/ClearMountsJob.cpp @@ -157,9 +157,11 @@ getLVMVolumes() QStringList lvscanLines = QString::fromLocal8Bit( process.readAllStandardOutput() ).split( '\n' ); // Get the second column (`value(1)`) sinec that is the device name, // remove quoting. - std::transform( lvscanLines.begin(), lvscanLines.end(), lvscanLines.begin(), []( const QString& lvscanLine ) { - return lvscanLine.simplified().split( ' ' ).value( 1 ).replace( '\'', "" ); - } ); + std::transform( lvscanLines.begin(), + lvscanLines.end(), + lvscanLines.begin(), + []( const QString& lvscanLine ) + { return lvscanLine.simplified().split( ' ' ).value( 1 ).replace( '\'', "" ); } ); return lvscanLines; } else diff --git a/src/modules/partition/tests/AutoMountTests.cpp b/src/modules/partition/tests/AutoMountTests.cpp index 45a7b4f127ffeb0918daa78fc8c4ec754fb56589..103fe6f828f030ae2356721fb3e17009c239b7d8 100644 --- a/src/modules/partition/tests/AutoMountTests.cpp +++ b/src/modules/partition/tests/AutoMountTests.cpp @@ -69,8 +69,8 @@ AutoMountJobTests::testRunQueue() QVERIFY( !q.isRunning() ); QEventLoop loop; - QTimer::singleShot( std::chrono::milliseconds( 100 ), [&q]() { q.start(); } ); - QTimer::singleShot( std::chrono::milliseconds( 5000 ), [&loop]() { loop.quit(); } ); + QTimer::singleShot( std::chrono::milliseconds( 100 ), [ &q ]() { q.start(); } ); + QTimer::singleShot( std::chrono::milliseconds( 5000 ), [ &loop ]() { loop.quit(); } ); connect( &q, &Calamares::JobQueue::finished, &loop, &QEventLoop::quit ); loop.exec(); diff --git a/src/modules/partition/tests/ClearMountsJobTests.cpp b/src/modules/partition/tests/ClearMountsJobTests.cpp index 3af400fde9bd85e4ef769933b7cbadca9f4f2a86..17565e756cea9825353da11d31907c3c4fbdaddf 100644 --- a/src/modules/partition/tests/ClearMountsJobTests.cpp +++ b/src/modules/partition/tests/ClearMountsJobTests.cpp @@ -32,10 +32,10 @@ getPartitionsForDevice_other( const QString& deviceName ) { QProcess process; process.setProgram( "sh" ); - process.setArguments( - { "-c", - QString( "echo $(awk '{print \"/dev/\"$4}' /proc/partitions | sed -e '/name/d' -e '/^$/d' -e '/[1-9]/!d' | grep %1)" ) - .arg( deviceName ) } ); + process.setArguments( { "-c", + QString( "echo $(awk '{print \"/dev/\"$4}' /proc/partitions | sed -e '/name/d' -e '/^$/d' " + "-e '/[1-9]/!d' | grep %1)" ) + .arg( deviceName ) } ); process.start(); process.waitForFinished();