Merge branch 'master' of https://github.com/calamares/calamares into development

This commit is contained in:
Philip Müller 2018-06-16 08:14:07 +02:00
commit 5f78d49777
121 changed files with 3805 additions and 551 deletions

View File

@ -49,7 +49,7 @@ option( WITH_KF5Crash "Enable crash reporting with KCrash." ON )
set( CALAMARES_ORGANIZATION_NAME "Calamares" )
set( CALAMARES_ORGANIZATION_DOMAIN "github.com/calamares" )
set( CALAMARES_APPLICATION_NAME "Calamares" )
set( CALAMARES_DESCRIPTION_SUMMARY
set( CALAMARES_DESCRIPTION_SUMMARY
"The distribution-independent installer framework" )
set( CALAMARES_VERSION_MAJOR 3 )
@ -86,17 +86,17 @@ set( _tx_complete da pt_PT ro tr_TR zh_TW zh_CN pt_BR fr hr ca lt id cs_CZ )
set( _tx_good sq es pl ja sk it_IT hu ru he de nl bg uk )
set( _tx_ok ast is ar sv el es_MX gl en_GB th fi_FI hi eu sr nb
sl sr@latin mr es_PR kk kn et be )
set( _tx_bad uz lo ur gu fr_CH fa eo )
set( _tx_bad uz lo ur gu fr_CH fa eo ko )
### Required versions
#
# See DEPENDENCIES section below.
set( QT_VERSION 5.6.0 )
set( QT_VERSION 5.7.0 )
set( YAMLCPP_VERSION 0.5.1 )
set( ECM_VERSION 5.18 )
set( PYTHONLIBS_VERSION 3.3 )
set( BOOSTPYTHON_VERSION 1.54.0 )
set( BOOSTPYTHON_VERSION 1.55.0 )
### CMAKE SETUP

View File

@ -38,6 +38,7 @@
# RESOURCES resource-file
# [NO_INSTALL]
# [SHARED_LIB]
# [EMERGENCY]
# )
include( CMakeParseArguments )
@ -47,7 +48,7 @@ include( CMakeColors )
function( calamares_add_plugin )
# parse arguments ( name needs to be saved before passing ARGN into the macro )
set( NAME ${ARGV0} )
set( options NO_INSTALL SHARED_LIB )
set( options NO_INSTALL SHARED_LIB EMERGENCY )
set( oneValueArgs NAME TYPE EXPORT_MACRO RESOURCES )
set( multiValueArgs SOURCES UI LINK_LIBRARIES LINK_PRIVATE_LIBRARIES COMPILE_DEFINITIONS )
cmake_parse_arguments( PLUGIN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
@ -71,7 +72,7 @@ function( calamares_add_plugin )
# message( " ${Green}NO_INSTALL:${ColorReset} ${PLUGIN_NO_INSTALL}" )
message( " ${Green}PLUGIN_DESTINATION:${ColorReset} ${PLUGIN_DESTINATION}" )
if( PLUGIN_CONFIG_FILES )
if ( INSTALL_CONFIG )
if ( INSTALL_CONFIG AND NOT PLUGIN_NO_INSTALL )
message( " ${Green}CONFIGURATION_FILES:${ColorReset} ${PLUGIN_CONFIG_FILES} => ${PLUGIN_DATA_DESTINATION}" )
else()
message( " ${Green}CONFIGURATION_FILES:${ColorReset} ${PLUGIN_CONFIG_FILES} => [Skipping installation]" )
@ -92,7 +93,7 @@ function( calamares_add_plugin )
set( target_type "SHARED" )
endif()
list( APPEND calamares_add_library_args
set( calamares_add_library_args
"${target}"
"EXPORT_MACRO" "${PLUGIN_EXPORT_MACRO}"
"TARGET_TYPE" "${target_type}"
@ -115,9 +116,14 @@ function( calamares_add_plugin )
list( APPEND calamares_add_library_args "COMPILE_DEFINITIONS" ${PLUGIN_COMPILE_DEFINITIONS} )
endif()
list( APPEND calamares_add_library_args "NO_VERSION" )
if ( PLUGIN_NO_INSTALL )
list( APPEND calamares_add_library_args "NO_INSTALL" )
endif()
list( APPEND calamares_add_library_args "INSTALL_BINDIR" "${PLUGIN_DESTINATION}" )
list( APPEND calamares_add_library_args
"NO_VERSION"
"INSTALL_BINDIR" "${PLUGIN_DESTINATION}"
)
if( PLUGIN_RESOURCES )
list( APPEND calamares_add_library_args "RESOURCES" "${PLUGIN_RESOURCES}" )
@ -132,16 +138,21 @@ function( calamares_add_plugin )
set( _type ${PLUGIN_TYPE} )
file( WRITE ${_file} "# AUTO-GENERATED metadata file\n# Syntax is YAML 1.2\n---\n" )
file( APPEND ${_file} "type: \"${_type}\"\nname: \"${PLUGIN_NAME}\"\ninterface: \"qtplugin\"\nload: \"lib${target}.so\"\n" )
if ( PLUGIN_EMERGENCY )
file( APPEND ${_file} "emergency: true\n" )
endif()
endif()
install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_DESC_FILE}
DESTINATION ${PLUGIN_DESTINATION} )
if ( NOT PLUGIN_NO_INSTALL )
install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_DESC_FILE}
DESTINATION ${PLUGIN_DESTINATION} )
if ( INSTALL_CONFIG )
foreach( PLUGIN_CONFIG_FILE ${PLUGIN_CONFIG_FILES} )
configure_file( ${PLUGIN_CONFIG_FILE} ${PLUGIN_CONFIG_FILE} COPYONLY )
install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_CONFIG_FILE}
DESTINATION ${PLUGIN_DATA_DESTINATION} )
endforeach()
if ( INSTALL_CONFIG )
foreach( PLUGIN_CONFIG_FILE ${PLUGIN_CONFIG_FILES} )
configure_file( ${PLUGIN_CONFIG_FILE} ${PLUGIN_CONFIG_FILE} COPYONLY )
install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_CONFIG_FILE}
DESTINATION ${PLUGIN_DATA_DESTINATION} )
endforeach()
endif()
endif()
endfunction()

View File

@ -22,6 +22,40 @@
include( CMakeParseArguments )
if( NOT _rcc_version_support_checked )
set( _rcc_version_support_checked TRUE )
# Extract the executable name
get_property( _rcc_executable
TARGET ${Qt5Core_RCC_EXECUTABLE}
PROPERTY IMPORTED_LOCATION
)
if( NOT _rcc_executable )
# Weird, probably now uses Qt5::rcc which is wrong too
set( _rcc_executable ${Qt5Core_RCC_EXECUTABLE} )
endif()
# Try an empty RCC file with explicit format-version
execute_process(
COMMAND echo "<RCC version='1.0'></RCC>"
COMMAND ${Qt5Core_RCC_EXECUTABLE} --format-version 1 --list -
RESULT_VARIABLE _rcc_version_rv
ERROR_VARIABLE _rcc_version_dump
)
if ( _rcc_version_rv EQUAL 0 )
# Supported: force to the reproducible version
set( _rcc_version_support --format-version 1 )
else()
# Older Qt versions (5.7, 5.8) don't support setting the
# rcc format-version, so won't be reproducible if they
# default to version 2.
set( _rcc_version_support "" )
endif()
unset( _rcc_version_rv )
unset( _rcc_version_dump )
endif()
# Internal macro for adding the C++ / Qt translations to the
# build and install tree. Should be called only once, from
# src/calamares/CMakeLists.txt.
@ -61,7 +95,7 @@ macro(add_calamares_translations language)
add_custom_command(
OUTPUT ${trans_outfile}
COMMAND "${Qt5Core_RCC_EXECUTABLE}"
ARGS ${rcc_options} --format-version 1 -name ${trans_file} -o ${trans_outfile} ${trans_infile}
ARGS ${rcc_options} ${_rcc_version_support} -name ${trans_file} -o ${trans_outfile} ${trans_infile}
MAIN_DEPENDENCY ${trans_infile}
DEPENDS ${QM_FILES}
)

View File

@ -15,11 +15,12 @@
Main:
* Compiler with C++11 support: GCC >= 4.9.0 or Clang >= 3.5.1
* CMake >= 3.2
* Qt >= 5.6
* Qt >= 5.7
* yaml-cpp >= 0.5.1
* Python >= 3.3
* Boost.Python >= 1.55.0
* extra-cmake-modules (recommended; required for some modules)
* Python >= 3.3 (required for some modules)
* Boost.Python >= 1.55.0 (recommended, or PythonQt; one is required for some modules)
* PythonQt (recommended, or Boost.Python; one is required for some modules)
* extra-cmake-modules >= 5.18 (recommended; required for some modules)
Modules:
* welcome:
@ -38,6 +39,6 @@ Modules:
### Building
See [wiki](https://github.com/calamares/calamares/wiki) for up to date
[building](https://github.com/calamares/calamares/wiki/Developer's-Guide)
and [deployment](https://github.com/calamares/calamares/wiki/Deployer's-Guide)
[building](https://github.com/calamares/calamares/wiki/Develop-Guide)
and [deployment](https://github.com/calamares/calamares/wiki/Deploy-Guide)
instructions.

View File

@ -47,9 +47,9 @@ GenericName[es]=Instalador del Sistema
Comment[es]=Calamares Instalador del Sistema
Name[es]=Instalar Sistema
Icon[et]=calamares
GenericName[et]=Süsteemi installija
Comment[et]=Calamares Süsteemi installija
Name[et]=Installi süsteem
GenericName[et]=Süsteemipaigaldaja
Comment[et]=Calamares süsteemipaigaldaja
Name[et]=Paigalda süsteem
Name[eu]=Sistema instalatu
Name[es_PR]=Instalar el sistema
Icon[fr]=calamares
@ -156,6 +156,9 @@ Icon[eo]=calamares
GenericName[eo]=Sistema Instalilo
Comment[eo]=Calamares Sistema Instalilo
Name[eo]=Instali Sistemo
Icon[es_MX]=calamares
GenericName[es_MX]=Instalador del sistema
Comment[es_MX]=Calamares - Instalador del sistema
Name[es_MX]=Instalar el Sistema
Icon[pt_PT]=calamares
GenericName[pt_PT]=Instalador de Sistema

File diff suppressed because it is too large Load Diff

View File

@ -9,12 +9,12 @@
<message>
<location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="79"/>
<source>This system was started with an &lt;strong&gt;EFI&lt;/strong&gt; boot environment.&lt;br&gt;&lt;br&gt;To configure startup from an EFI environment, this installer must deploy a boot loader application, like &lt;strong&gt;GRUB&lt;/strong&gt; or &lt;strong&gt;systemd-boot&lt;/strong&gt; on an &lt;strong&gt;EFI System Partition&lt;/strong&gt;. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own.</source>
<translation>See süsteem käivitati &lt;strong&gt;EFI&lt;/strong&gt; käivituskeskkonnas.&lt;br&gt;&lt;br&gt;Et seadistada käivitust EFI keskkonnast, peab see installija paigaldama käivituslaaduri rakenduse, näiteks &lt;strong&gt;GRUB&lt;/strong&gt; või &lt;strong&gt;systemd-boot&lt;/strong&gt; sinu &lt;strong&gt;EFI süsteemipartitsioonile&lt;/strong&gt;. See on automaatne, välja arvatud juhul, kui valid käsitsi partitsioneerimise, sel juhul pead sa selle valima või ise looma.</translation>
<translation>See süsteem käivitati &lt;strong&gt;EFI&lt;/strong&gt; käivituskeskkonnas.&lt;br&gt;&lt;br&gt;Et seadistada käivitust EFI keskkonnast, peab see paigaldaja paigaldama käivituslaaduri rakenduse, näiteks &lt;strong&gt;GRUB&lt;/strong&gt; või &lt;strong&gt;systemd-boot&lt;/strong&gt; sinu &lt;strong&gt;EFI süsteemipartitsioonile&lt;/strong&gt;. See on automaatne, välja arvatud juhul, kui valid käsitsi partitsioneerimise, sel juhul pead sa selle valima või ise looma.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/BootInfoWidget.cpp" line="91"/>
<source>This system was started with a &lt;strong&gt;BIOS&lt;/strong&gt; boot environment.&lt;br&gt;&lt;br&gt;To configure startup from a BIOS environment, this installer must install a boot loader, like &lt;strong&gt;GRUB&lt;/strong&gt;, either at the beginning of a partition or on the &lt;strong&gt;Master Boot Record&lt;/strong&gt; near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own.</source>
<translation>See süsteem käivitati &lt;strong&gt;BIOS&lt;/strong&gt; käivituskeskkonnas.&lt;br&gt;&lt;br&gt;Et seadistada käivitust BIOS keskkonnast, peab see installija paigaldama käivituslaaduri, näiteks &lt;strong&gt;GRUB&lt;/strong&gt;, kas mõne partitsiooni algusse või &lt;strong&gt;Master Boot Record&lt;/strong&gt;&apos;i paritsioonitabeli alguse lähedale (eelistatud). See on automaatne, välja arvatud juhul, kui valid käsitsi partitsioneerimise, sel juhul pead sa selle ise seadistama.</translation>
<translation>See süsteem käivitati &lt;strong&gt;BIOS&lt;/strong&gt; käivituskeskkonnas.&lt;br&gt;&lt;br&gt;Et seadistada käivitust BIOS keskkonnast, peab see paigaldaja paigaldama käivituslaaduri, näiteks &lt;strong&gt;GRUB&lt;/strong&gt;, kas mõne partitsiooni algusse või &lt;strong&gt;Master Boot Record&lt;/strong&gt;&apos;i paritsioonitabeli alguse lähedale (eelistatud). See on automaatne, välja arvatud juhul, kui valid käsitsi partitsioneerimise, sel juhul pead sa selle ise seadistama.</translation>
</message>
</context>
<context>
@ -37,7 +37,7 @@
<message>
<location filename="../src/modules/partition/core/BootLoaderModel.cpp" line="111"/>
<source>Do not install a boot loader</source>
<translation>Ära installi käivituslaadurit</translation>
<translation>Ära paigalda käivituslaadurit</translation>
</message>
<message>
<location filename="../src/modules/partition/core/BootLoaderModel.cpp" line="125"/>
@ -99,7 +99,7 @@
<message>
<location filename="../src/libcalamaresui/ExecutionViewStep.cpp" line="78"/>
<source>Install</source>
<translation>Installi</translation>
<translation>Paigalda</translation>
</message>
</context>
<context>
@ -179,24 +179,24 @@
<location filename="../src/libcalamaresui/ViewManager.cpp" line="76"/>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="267"/>
<source>Cancel installation without changing the system.</source>
<translation>Tühista installimine ilma süsteemi muutmata.</translation>
<translation>Tühista paigaldamine ilma süsteemi muutmata.</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="255"/>
<source>&amp;Install</source>
<translation>&amp;Installi</translation>
<translation>&amp;Paigalda</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="303"/>
<source>Cancel installation?</source>
<translation>Tühista installimine?</translation>
<translation>Tühista paigaldamine?</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="304"/>
<source>Do you really want to cancel the current install process?
The installer will quit and all changes will be lost.</source>
<translation>Kas sa tõesti soovid tühistada praeguse installiprotsessi?
Installija sulgub ja kõik muutused kaovad.</translation>
<translation>Kas sa tõesti soovid tühistada praeguse paigaldusprotsessi?
Paigaldaja sulgub ning kõik muutused kaovad.</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="309"/>
@ -221,12 +221,12 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="216"/>
<source>The %1 installer is about to make changes to your disk in order to install %2.&lt;br/&gt;&lt;strong&gt;You will not be able to undo these changes.&lt;/strong&gt;</source>
<translation>%1 installija on tegemas muudatusi sinu kettale, et installida %2.&lt;br/&gt;&lt;strong&gt;Sa ei saa neid muudatusi tagasi võtta.&lt;/strong&gt;</translation>
<translation>%1 paigaldaja on tegemas muudatusi sinu kettale, et paigaldada %2.&lt;br/&gt;&lt;strong&gt;Sa ei saa neid muudatusi tagasi võtta.&lt;/strong&gt;</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="221"/>
<source>&amp;Install now</source>
<translation>&amp;Installi kohe</translation>
<translation>&amp;Paigalda kohe</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="222"/>
@ -241,7 +241,7 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="262"/>
<source>The installation is complete. Close the installer.</source>
<translation>Installimine on lõpetatud. Sulge installija.</translation>
<translation>Paigaldamine on lõpetatud. Sulge paigaldaja.</translation>
</message>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="159"/>
@ -251,7 +251,7 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="160"/>
<source>Installation Failed</source>
<translation>Installimine ebaõnnestus</translation>
<translation>Paigaldamine ebaõnnestus</translation>
</message>
</context>
<context>
@ -282,7 +282,7 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/calamares/CalamaresWindow.cpp" line="44"/>
<source>%1 Installer</source>
<translation>%1 installija</translation>
<translation>%1 paigaldaja</translation>
</message>
<message>
<location filename="../src/calamares/CalamaresWindow.cpp" line="111"/>
@ -295,12 +295,12 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/welcome/checker/CheckerWidget.cpp" line="96"/>
<source>This computer does not satisfy the minimum requirements for installing %1.&lt;br/&gt;Installation cannot continue. &lt;a href=&quot;#details&quot;&gt;Details...&lt;/a&gt;</source>
<translation>See arvuti ei rahulda %1 installimiseks vajalikke minimaaltingimusi.&lt;br/&gt;Installimine ei saa jätkuda. &lt;a href=&quot;#details&quot;&gt;Detailid...&lt;/a&gt;</translation>
<translation>See arvuti ei rahulda %1 paigldamiseks vajalikke minimaaltingimusi.&lt;br/&gt;Paigaldamine ei saa jätkuda. &lt;a href=&quot;#details&quot;&gt;Detailid...&lt;/a&gt;</translation>
</message>
<message>
<location filename="../src/modules/welcome/checker/CheckerWidget.cpp" line="113"/>
<source>This computer does not satisfy some of the recommended requirements for installing %1.&lt;br/&gt;Installation can continue, but some features might be disabled.</source>
<translation>See arvuti ei rahulda mõnda %1 installimiseks soovitatud tingimust.&lt;br/&gt;Installimine võib jätkuda, ent mõned funktsioonid võivad olla keelatud.</translation>
<translation>See arvuti ei rahulda mõnda %1 paigaldamiseks soovitatud tingimust.&lt;br/&gt;Paigaldamine võib jätkuda, ent mõned funktsioonid võivad olla keelatud.</translation>
</message>
<message>
<location filename="../src/modules/welcome/checker/CheckerWidget.cpp" line="151"/>
@ -371,7 +371,7 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1040"/>
<source>&lt;strong&gt;Select a partition to install on&lt;/strong&gt;</source>
<translation>&lt;strong&gt;Vali partitsioon, kuhu installida&lt;/strong&gt;</translation>
<translation>&lt;strong&gt;Vali partitsioon, kuhu paigaldada&lt;/strong&gt;</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1096"/>
@ -412,7 +412,7 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1260"/>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1284"/>
<source>&lt;strong&gt;Install alongside&lt;/strong&gt;&lt;br/&gt;The installer will shrink a partition to make room for %1.</source>
<translation>&lt;strong&gt;Installi kõrvale&lt;/strong&gt;&lt;br/&gt;Installija vähendab partitsiooni, et teha ruumi operatsioonisüsteemile %1.</translation>
<translation>&lt;strong&gt;Paigalda kõrvale&lt;/strong&gt;&lt;br/&gt;Paigaldaja vähendab partitsiooni, et teha ruumi operatsioonisüsteemile %1.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/ChoicePage.cpp" line="1213"/>
@ -599,7 +599,7 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/partition/jobs/CreatePartitionJob.cpp" line="79"/>
<source>The installer failed to create partition on disk &apos;%1&apos;.</source>
<translation>Installija ei suutnud luua partitsiooni kettale &quot;%1&quot;.</translation>
<translation>Paigaldaja ei suutnud luua partitsiooni kettale &quot;%1&quot;.</translation>
</message>
</context>
<context>
@ -650,7 +650,7 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/partition/jobs/CreatePartitionTableJob.cpp" line="72"/>
<source>The installer failed to create a partition table on %1.</source>
<translation>Installija ei suutnud luua partitsioonitabelit kettale %1.</translation>
<translation>Paigaldaja ei suutnud luua partitsioonitabelit kettale %1.</translation>
</message>
</context>
<context>
@ -711,7 +711,7 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/partition/jobs/DeletePartitionJob.cpp" line="68"/>
<source>The installer failed to delete partition %1.</source>
<translation>Installija ei suutnud kustutada partitsiooni %1.</translation>
<translation>Paigaldaja ei suutnud kustutada partitsiooni %1.</translation>
</message>
</context>
<context>
@ -719,7 +719,7 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="150"/>
<source>The type of &lt;strong&gt;partition table&lt;/strong&gt; on the selected storage device.&lt;br&gt;&lt;br&gt;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.&lt;br&gt;This installer will keep the current partition table unless you explicitly choose otherwise.&lt;br&gt;If unsure, on modern systems GPT is preferred.</source>
<translation>&lt;strong&gt;Partitsioonitabeli&lt;/strong&gt; tüüp valitud mäluseadmel.&lt;br&gt;&lt;br&gt;Ainuke viis partitsioonitabelit muuta on see kustutada ja nullist taasluua, mis hävitab kõik andmed mäluseadmel.&lt;br&gt;See installija säilitab praeguse partitsioonitabeli, v.a juhul kui sa ise valid vastupidist.&lt;br&gt;Kui pole kindel, eelista modernsetel süsteemidel GPT-d.</translation>
<translation>&lt;strong&gt;Partitsioonitabeli&lt;/strong&gt; tüüp valitud mäluseadmel.&lt;br&gt;&lt;br&gt;Ainuke viis partitsioonitabelit muuta on see kustutada ja nullist taasluua, mis hävitab kõik andmed mäluseadmel.&lt;br&gt;See paigaldaja säilitab praeguse partitsioonitabeli, v.a juhul kui sa ise valid vastupidist.&lt;br&gt;Kui pole kindel, eelista modernsetel süsteemidel GPT-d.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="107"/>
@ -734,7 +734,7 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="121"/>
<source>This installer &lt;strong&gt;cannot detect a partition table&lt;/strong&gt; on the selected storage device.&lt;br&gt;&lt;br&gt;The device either has no partition table, or the partition table is corrupted or of an unknown type.&lt;br&gt;This installer can create a new partition table for you, either automatically, or through the manual partitioning page.</source>
<translation>See installija &lt;strong&gt;ei suuda tuvastada partitsioonitabelit&lt;/strong&gt;valitud mäluseadmel.&lt;br&gt;&lt;br&gt;Seadmel kas pole partitsioonitabelit, see on korrumpeerunud või on tundmatut tüüpi.&lt;br&gt;See installija võib sulle luua uue partitsioonitabeli, kas automaatselt või läbi käsitsi partitsioneerimise lehe. </translation>
<translation>See paigaldaja &lt;strong&gt;ei suuda tuvastada partitsioonitabelit&lt;/strong&gt;valitud mäluseadmel.&lt;br&gt;&lt;br&gt;Seadmel kas pole partitsioonitabelit, see on korrumpeerunud või on tundmatut tüüpi.&lt;br&gt;See paigaldaja võib sulle luua uue partitsioonitabeli, kas automaatselt või läbi käsitsi partitsioneerimise lehe. </translation>
</message>
<message>
<location filename="../src/modules/partition/gui/DeviceInfoWidget.cpp" line="131"/>
@ -877,7 +877,7 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="147"/>
<source>Install %1 on &lt;strong&gt;new&lt;/strong&gt; %2 system partition.</source>
<translation>Installi %1 &lt;strong&gt;uude&lt;/strong&gt; %2 süsteemipartitsiooni.</translation>
<translation>Paigalda %1 &lt;strong&gt;uude&lt;/strong&gt; %2 süsteemipartitsiooni.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="151"/>
@ -887,7 +887,7 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="159"/>
<source>Install %2 on %3 system partition &lt;strong&gt;%1&lt;/strong&gt;.</source>
<translation>Installi %2 %3 süsteemipartitsioonile &lt;strong&gt;%1&lt;/strong&gt;.</translation>
<translation>Paigalda %2 %3 süsteemipartitsioonile &lt;strong&gt;%1&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="164"/>
@ -897,7 +897,7 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="176"/>
<source>Install boot loader on &lt;strong&gt;%1&lt;/strong&gt;.</source>
<translation>Installi käivituslaadur kohta &lt;strong&gt;%1&lt;/strong&gt;.</translation>
<translation>Paigalda käivituslaadur kohta &lt;strong&gt;%1&lt;/strong&gt;.</translation>
</message>
<message>
<location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="186"/>
@ -915,7 +915,7 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/finished/FinishedPage.ui" line="95"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;When this box is checked, your system will restart immediately when you click on &lt;span style=&quot; font-style:italic;&quot;&gt;Done&lt;/span&gt; or close the installer.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Kui see märkeruut on täidetud, taaskäivitab su süsteem automaatselt, kui vajutad &lt;span style=&quot; font-style:italic;&quot;&gt;Valmis&lt;/span&gt; või sulged installija.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Kui see märkeruut on täidetud, taaskäivitab su süsteem automaatselt, kui vajutad &lt;span style=&quot; font-style:italic;&quot;&gt;Valmis&lt;/span&gt; või sulged paigaldaja.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../src/modules/finished/FinishedPage.ui" line="98"/>
@ -925,12 +925,12 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/finished/FinishedPage.cpp" line="51"/>
<source>&lt;h1&gt;All done.&lt;/h1&gt;&lt;br/&gt;%1 has been installed on your computer.&lt;br/&gt;You may now restart into your new system, or continue using the %2 Live environment.</source>
<translation>&lt;h1&gt;Kõik on valmis.&lt;/h1&gt;&lt;br/&gt;%1 on installitud sinu arvutisse.&lt;br/&gt;Sa võid nüüd taaskäivitada oma uude süsteemi või jätkata %2 live-keskkonna kasutamist.</translation>
<translation>&lt;h1&gt;Kõik on valmis.&lt;/h1&gt;&lt;br/&gt;%1 on paigaldatud sinu arvutisse.&lt;br/&gt;Sa võid nüüd taaskäivitada oma uude süsteemi või jätkata %2 live-keskkonna kasutamist.</translation>
</message>
<message>
<location filename="../src/modules/finished/FinishedPage.cpp" line="109"/>
<source>&lt;h1&gt;Installation Failed&lt;/h1&gt;&lt;br/&gt;%1 has not been installed on your computer.&lt;br/&gt;The error message was: %2.</source>
<translation>&lt;h1&gt;Installimine ebaõnnestus&lt;/h1&gt;&lt;br/&gt;%1 ei installitud sinu arvutisse.&lt;br/&gt;Veateade oli: %2.</translation>
<translation>&lt;h1&gt;Paigaldamine ebaõnnestus&lt;/h1&gt;&lt;br/&gt;%1 ei paigaldatud sinu arvutisse.&lt;br/&gt;Veateade oli: %2.</translation>
</message>
</context>
<context>
@ -943,12 +943,12 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/finished/FinishedViewStep.cpp" line="124"/>
<source>Installation Complete</source>
<translation>Installimine lõpetatud</translation>
<translation>Paigaldus valmis</translation>
</message>
<message>
<location filename="../src/modules/finished/FinishedViewStep.cpp" line="125"/>
<source>The installation of %1 is complete.</source>
<translation>%1 installimine on lõpetatud.</translation>
<translation>%1 paigaldus on valmis.</translation>
</message>
</context>
<context>
@ -971,7 +971,7 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/partition/jobs/FormatPartitionJob.cpp" line="77"/>
<source>The installer failed to format partition %1 on disk &apos;%2&apos;.</source>
<translation>Installija ei suutnud vormindada partitsiooni %1 kettal &quot;%2&quot;.</translation>
<translation>Paigaldaja ei suutnud vormindada partitsiooni %1 kettal &quot;%2&quot;.</translation>
</message>
</context>
<context>
@ -979,12 +979,12 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/interactiveterminal/InteractiveTerminalPage.cpp" line="53"/>
<source>Konsole not installed</source>
<translation>Konsole pole installitud</translation>
<translation>Konsole pole paigaldatud</translation>
</message>
<message>
<location filename="../src/modules/interactiveterminal/InteractiveTerminalPage.cpp" line="54"/>
<source>Please install KDE Konsole and try again!</source>
<translation>Palun installi KDE Konsole ja proovi uuesti!</translation>
<translation>Palun paigalda KDE Konsole ja proovi uuesti!</translation>
</message>
<message>
<location filename="../src/modules/interactiveterminal/InteractiveTerminalPage.cpp" line="116"/>
@ -1059,7 +1059,7 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/license/LicensePage.cpp" line="115"/>
<source>&lt;h1&gt;License Agreement&lt;/h1&gt;This setup procedure will install proprietary software that is subject to licensing terms.</source>
<translation>&lt;h1&gt;Litsensileping&lt;/h1&gt;See seadistusprotseduur installib omandiõigusega tarkvara, mis vastab litsensitingimustele.</translation>
<translation>&lt;h1&gt;Litsensileping&lt;/h1&gt;See seadistusprotseduur paigaldab omandiõigusega tarkvara, mis vastab litsensitingimustele.</translation>
</message>
<message>
<location filename="../src/modules/license/LicensePage.cpp" line="118"/>
@ -1069,12 +1069,12 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/license/LicensePage.cpp" line="124"/>
<source>&lt;h1&gt;License Agreement&lt;/h1&gt;This setup procedure can install proprietary software that is subject to licensing terms in order to provide additional features and enhance the user experience.</source>
<translation>&lt;h1&gt;Litsensileping&lt;/h1&gt;See seadistusprotseduur võib installida omandiõigusega tarkvara, mis vastab litsensitingimustele, et pakkuda lisafunktsioone ja täiendada kasutajakogemust.</translation>
<translation>&lt;h1&gt;Litsensileping&lt;/h1&gt;See seadistusprotseduur võib paigaldada omandiõigusega tarkvara, mis vastab litsensitingimustele, et pakkuda lisafunktsioone ja täiendada kasutajakogemust.</translation>
</message>
<message>
<location filename="../src/modules/license/LicensePage.cpp" line="129"/>
<source>Please review the End User License Agreements (EULAs) above.&lt;br/&gt;If you do not agree with the terms, proprietary software will not be installed, and open source alternatives will be used instead.</source>
<translation>Palun loe läbi allolevad lõppkasutaja litsensilepingud (EULAd).&lt;br/&gt;Kui sa tingimustega ei nõustu, ei installita omandiõigusega tarkvara ning selle asemel kasutatakse avatud lähtekoodiga alternatiive.</translation>
<translation>Palun loe läbi allolevad lõppkasutaja litsensilepingud (EULAd).&lt;br/&gt;Kui sa tingimustega ei nõustu, ei paigaldata omandiõigusega tarkvara ning selle asemel kasutatakse avatud lähtekoodiga alternatiive.</translation>
</message>
<message>
<location filename="../src/modules/license/LicensePage.cpp" line="159"/>
@ -1190,12 +1190,12 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/netinstall/NetInstallPage.cpp" line="86"/>
<source>Network Installation. (Disabled: Unable to fetch package lists, check your network connection)</source>
<translation>Võrguinstall. (Keelatud: paketinimistute saamine ebaõnnestus, kontrolli oma võrguühendust)</translation>
<translation>Võrgupaigaldus. (Keelatud: paketinimistute saamine ebaõnnestus, kontrolli oma võrguühendust)</translation>
</message>
<message>
<location filename="../src/modules/netinstall/NetInstallPage.cpp" line="96"/>
<source>Network Installation. (Disabled: Received invalid groups data)</source>
<translation>Võrguinstall. (Keelatud: vastu võetud sobimatud grupiandmed)</translation>
<translation>Võrgupaigaldus. (Keelatud: vastu võetud sobimatud grupiandmed)</translation>
</message>
</context>
<context>
@ -1494,7 +1494,7 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/users/page_usersetup.ui" line="200"/>
<source>&lt;small&gt;If more than one person will use this computer, you can set up multiple accounts after installation.&lt;/small&gt;</source>
<translation>&lt;small&gt;Kui rohkem kui üks inimene kasutab seda arvutit, saad sa määrata mitu kontot peale installi.&lt;/small&gt;</translation>
<translation>&lt;small&gt;Kui rohkem kui üks inimene kasutab seda arvutit, saad sa pärast paigaldust määrata mitu kontot.&lt;/small&gt;</translation>
</message>
<message>
<location filename="../src/modules/users/page_usersetup.ui" line="335"/>
@ -1655,7 +1655,7 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.ui" line="148"/>
<source>Install boot &amp;loader on:</source>
<translation>Installi käivituslaadur kohta:</translation>
<translation>Paigalda käivituslaadur kohta:</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionPage.cpp" line="169"/>
@ -1688,12 +1688,12 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="158"/>
<source>Install %1 &lt;strong&gt;alongside&lt;/strong&gt; another operating system.</source>
<translation>Installi %1 praeguse operatsioonisüsteemi &lt;strong&gt;kõrvale&lt;/strong&gt;</translation>
<translation>Paigalda %1 praeguse operatsioonisüsteemi &lt;strong&gt;kõrvale&lt;/strong&gt;</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="162"/>
<source>&lt;strong&gt;Erase&lt;/strong&gt; disk and install %1.</source>
<translation>&lt;strong&gt;Tühjenda&lt;/strong&gt; ketas ja installi %1.</translation>
<translation>&lt;strong&gt;Tühjenda&lt;/strong&gt; ketas ja paigalda %1.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="166"/>
@ -1708,12 +1708,12 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="184"/>
<source>Install %1 &lt;strong&gt;alongside&lt;/strong&gt; another operating system on disk &lt;strong&gt;%2&lt;/strong&gt; (%3).</source>
<translation>Installi %1 teise operatsioonisüsteemi &lt;strong&gt;kõrvale&lt;/strong&gt; kettal &lt;strong&gt;%2&lt;/strong&gt; (%3).</translation>
<translation>Paigalda %1 teise operatsioonisüsteemi &lt;strong&gt;kõrvale&lt;/strong&gt; kettal &lt;strong&gt;%2&lt;/strong&gt; (%3).</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="190"/>
<source>&lt;strong&gt;Erase&lt;/strong&gt; disk &lt;strong&gt;%2&lt;/strong&gt; (%3) and install %1.</source>
<translation>&lt;strong&gt;Tühjenda&lt;/strong&gt; ketas &lt;strong&gt;%2&lt;/strong&gt; (%3) ja installi %1.</translation>
<translation>&lt;strong&gt;Tühjenda&lt;/strong&gt; ketas &lt;strong&gt;%2&lt;/strong&gt; (%3) ja paigalda %1.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/PartitionViewStep.cpp" line="196"/>
@ -1800,7 +1800,7 @@ Installija sulgub ja kõik muutused kaovad.</translation>
<message>
<location filename="../src/modules/plasmalnf/PlasmaLnfPage.cpp" line="67"/>
<source>Please choose a look-and-feel for the KDE Plasma Desktop. You can also skip this step and configure the look-and-feel once the system is installed. Clicking on a look-and-feel selection will give you a live preview of that look-and-feel.</source>
<translation>Palun vali KDE Plasma Desktop&apos;ile välimus-ja-tunnetus. Sa võid selle sammu ka vahele jätta ja seadistada välimust-ja-tunnetust siis, kui süsteem on installitud. Välimuse-ja-tunnetuse valikule klõpsates näed selle reaalajas eelvaadet.</translation>
<translation>Palun vali KDE Plasma töölauale välimus-ja-tunnetus. Sa võid selle sammu ka vahele jätta ja seadistada välimust-ja-tunnetust siis, kui süsteem on paigaldatud. Välimuse-ja-tunnetuse valikule klõpsates näed selle reaalajas eelvaadet.</translation>
</message>
</context>
<context>
@ -1947,7 +1947,7 @@ Väljund:
<message>
<location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="134"/>
<source>Select where to install %1.&lt;br/&gt;&lt;font color=&quot;red&quot;&gt;Warning: &lt;/font&gt;this will delete all files on the selected partition.</source>
<translation>Vali, kuhu soovid %1 installida.&lt;br/&gt;&lt;font color=&quot;red&quot;&gt;Hoiatus: &lt;/font&gt;see kustutab valitud partitsioonilt kõik failid.</translation>
<translation>Vali, kuhu soovid %1 paigaldada.&lt;br/&gt;&lt;font color=&quot;red&quot;&gt;Hoiatus: &lt;/font&gt;see kustutab valitud partitsioonilt kõik failid.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="160"/>
@ -1957,17 +1957,17 @@ Väljund:
<message>
<location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="168"/>
<source>%1 cannot be installed on empty space. Please select an existing partition.</source>
<translation>%1 ei saa installida tühjale kohale. Palun vali olemasolev partitsioon.</translation>
<translation>%1 ei saa paigldada tühjale kohale. Palun vali olemasolev partitsioon.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="178"/>
<source>%1 cannot be installed on an extended partition. Please select an existing primary or logical partition.</source>
<translation>%1 ei saa installida laiendatud partitsioonile. Palun vali olemasolev põhiline või loogiline partitsioon.</translation>
<translation>%1 ei saa paigaldada laiendatud partitsioonile. Palun vali olemasolev põhiline või loogiline partitsioon.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="188"/>
<source>%1 cannot be installed on this partition.</source>
<translation>%1 ei saa installida sellele partitsioonidel.</translation>
<translation>%1 ei saa sellele partitsioonile paigaldada.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="194"/>
@ -1999,7 +1999,7 @@ Väljund:
<location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="278"/>
<location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="302"/>
<source>&lt;strong&gt;%3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;%1 will be installed on %2.&lt;br/&gt;&lt;font color=&quot;red&quot;&gt;Warning: &lt;/font&gt;all data on partition %2 will be lost.</source>
<translation>&lt;strong&gt;%3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;%1 installitakse partitsioonile %2.&lt;br/&gt;&lt;font color=&quot;red&quot;&gt;Hoiatus: &lt;/font&gt;kõik andmed partitsioonil %2 kaovad.</translation>
<translation>&lt;strong&gt;%3&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;%1 paigaldatakse partitsioonile %2.&lt;br/&gt;&lt;font color=&quot;red&quot;&gt;Hoiatus: &lt;/font&gt;kõik andmed partitsioonil %2 kaovad.</translation>
</message>
<message>
<location filename="../src/modules/partition/gui/ReplaceWidget.cpp" line="270"/>
@ -2062,12 +2062,12 @@ Väljund:
<message>
<location filename="../src/modules/welcome/checker/RequirementsChecker.cpp" line="155"/>
<source>The installer is not running with administrator rights.</source>
<translation>Installija ei tööta administraatoriõigustega.</translation>
<translation>Paigaldaja pole käivitatud administraatoriõigustega.</translation>
</message>
<message>
<location filename="../src/modules/welcome/checker/RequirementsChecker.cpp" line="163"/>
<source>The screen is too small to display the installer.</source>
<translation>Ekraan on liiga väike installija kuvamiseks.</translation>
<translation>Ekraan on paigaldaja kuvamiseks liiga väike.</translation>
</message>
</context>
<context>
@ -2090,7 +2090,7 @@ Väljund:
<message>
<location filename="../src/modules/partition/jobs/ResizePartitionJob.cpp" line="85"/>
<source>The installer failed to resize partition %1 on disk &apos;%2&apos;.</source>
<translation>Installijal ebaõnnestus partitsiooni %1 suuruse muutmine kettal &quot;%2&quot;.</translation>
<translation>Paigaldajal ebaõnnestus partitsiooni %1 suuruse muutmine kettal &quot;%2&quot;.</translation>
</message>
</context>
<context>
@ -2246,7 +2246,7 @@ Väljund:
<message>
<location filename="../src/modules/partition/jobs/SetPartitionFlagsJob.cpp" line="140"/>
<source>The installer failed to set flags on partition %1.</source>
<translation>Installija ei suutnud silte määrata partitsioonile %1.</translation>
<translation>Paigaldaja ei suutnud partitsioonile %1 silte määrata.</translation>
</message>
</context>
<context>
@ -2352,7 +2352,7 @@ Väljund:
<message>
<location filename="../src/modules/summary/SummaryPage.cpp" line="49"/>
<source>This is an overview of what will happen once you start the install procedure.</source>
<translation>See on ülevaade sellest mis juhtub, kui alustad installiprotseduuri.</translation>
<translation>See on ülevaade sellest mis juhtub, kui alustad paigaldusprotseduuri.</translation>
</message>
</context>
<context>
@ -2368,17 +2368,17 @@ Väljund:
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="43"/>
<source>Installation feedback</source>
<translation>Installimise tagasiside</translation>
<translation>Paigalduse tagasiside</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="53"/>
<source>Sending installation feedback.</source>
<translation>Saadan installimise tagasisidet.</translation>
<translation>Saadan paigalduse tagasisidet.</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="88"/>
<source>Internal error in install-tracking.</source>
<translation>Installi jälitamisel esines sisemine viga.</translation>
<translation>Paigaldate jälitamisel esines sisemine viga.</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingJobs.cpp" line="89"/>
@ -2430,7 +2430,7 @@ Väljund:
<message>
<location filename="../src/modules/tracking/page_trackingstep.ui" line="72"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;By selecting this, you will send &lt;span style=&quot; font-weight:600;&quot;&gt;no information at all&lt;/span&gt; about your installation.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Seda valides &lt;span style=&quot; font-weight:600;&quot;&gt;ei saada sa üldse&lt;/span&gt; teavet oma installi kohta.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Seda valides &lt;span style=&quot; font-weight:600;&quot;&gt;ei saada sa üldse&lt;/span&gt; teavet oma paigalduse kohta.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../src/modules/tracking/page_trackingstep.ui" line="123"/>
@ -2454,22 +2454,22 @@ Väljund:
<message>
<location filename="../src/modules/tracking/TrackingPage.cpp" line="44"/>
<source>Install tracking helps %1 to see how many users they have, what hardware they install %1 to and (with the last two options below), get continuous information about preferred applications. To see what will be sent, please click the help icon next to each area.</source>
<translation>Installijälitamine aitab %1-l näha, mitu kasutajat neil on, mis riistvarale nad %1 installivad ja (märkides kaks alumist valikut) saada pidevat teavet eelistatud rakenduste kohta. Et näha, mis infot saadetakse, palun klõpsa abiikooni iga ala kõrval.</translation>
<translation>Paigalduse jälitamine aitab %1-l näha, mitu kasutajat neil on, mis riistvarale nad %1 paigaldavad ja (märkides kaks alumist valikut) saada pidevat teavet eelistatud rakenduste kohta. Et näha, mis infot saadetakse, palun klõpsa abiikooni iga ala kõrval.</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingPage.cpp" line="45"/>
<source>By selecting this you will send information about your installation and hardware. This information will &lt;b&gt;only be sent once&lt;/b&gt; after the installation finishes.</source>
<translation>Seda valides saadad sa teavet oma installi ja riistvara kohta. See teave &lt;b&gt;saadetakse ainult korra&lt;/b&gt;peale installi lõppu.</translation>
<translation>Seda valides saadad sa teavet oma paigalduse ja riistvara kohta. See teave &lt;b&gt;saadetakse ainult korra&lt;/b&gt;peale paigalduse lõppu.</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingPage.cpp" line="46"/>
<source>By selecting this you will &lt;b&gt;periodically&lt;/b&gt; send information about your installation, hardware and applications, to %1.</source>
<translation>Seda valides saadad sa %1-le &lt;b&gt;perioodiliselt&lt;/b&gt; infot oma installi, riistvara ja rakenduste kohta.</translation>
<translation>Seda valides saadad sa %1-le &lt;b&gt;perioodiliselt&lt;/b&gt; infot oma paigalduse, riistvara ja rakenduste kohta.</translation>
</message>
<message>
<location filename="../src/modules/tracking/TrackingPage.cpp" line="47"/>
<source>By selecting this you will &lt;b&gt;regularly&lt;/b&gt; send information about your installation, hardware, applications and usage patterns, to %1.</source>
<translation>Seda valides saadad sa %1-le &lt;b&gt;regulaarselt&lt;/b&gt; infot oma installi, riistvara, rakenduste ja kasutusharjumuste kohta.</translation>
<translation>Seda valides saadad sa %1-le &lt;b&gt;regulaarselt&lt;/b&gt; infot oma paigalduse, riistvara, rakenduste ja kasutusharjumuste kohta.</translation>
</message>
</context>
<context>
@ -2557,17 +2557,17 @@ Väljund:
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="60"/>
<source>&lt;h1&gt;Welcome to the %1 installer.&lt;/h1&gt;</source>
<translation>&lt;h1&gt;Tere tulemast %1 installijasse.&lt;/h1&gt;</translation>
<translation>&lt;h1&gt;Tere tulemast %1 paigaldajasse.&lt;/h1&gt;</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="60"/>
<source>&lt;h1&gt;Welcome to the Calamares installer for %1.&lt;/h1&gt;</source>
<translation>&lt;h1&gt;Tere tulemast Calamares&apos;i installijasse %1 jaoks.&lt;/h1&gt;</translation>
<translation>&lt;h1&gt;Tere tulemast Calamares&apos;i paigaldajasse %1 jaoks.&lt;/h1&gt;</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="73"/>
<source>About %1 installer</source>
<translation>Teave %1 installija kohta</translation>
<translation>Teave %1 paigaldaja kohta</translation>
</message>
<message>
<location filename="../src/modules/welcome/WelcomePage.cpp" line="75"/>

2587
lang/calamares_ko.ts Normal file

File diff suppressed because it is too large Load Diff

View File

@ -10,6 +10,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-05-28 04:57-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: guillermo pacheco <guillopacheco@gmail.com>, 2018\n"
"Language-Team: Spanish (Mexico) (https://www.transifex.com/calamares/teams/20061/es_MX/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -19,39 +20,39 @@ msgstr ""
#: src/modules/umount/main.py:40
msgid "Unmount file systems."
msgstr ""
msgstr "Desmontar sistemas de archivo."
#: src/modules/dummypython/main.py:44
msgid "Dummy python job."
msgstr ""
msgstr "Trabajo python ficticio."
#: src/modules/dummypython/main.py:97
msgid "Dummy python step {}"
msgstr ""
msgstr "Paso python ficticio {}"
#: src/modules/machineid/main.py:35
msgid "Generate machine-id."
msgstr ""
msgstr "Generar identificación de la maquina."
#: src/modules/packages/main.py:61
#, python-format
msgid "Processing packages (%(count)d / %(total)d)"
msgstr ""
msgstr "Procesando paquetes (%(count)d/%(total)d)"
#: src/modules/packages/main.py:63 src/modules/packages/main.py:73
msgid "Install packages."
msgstr ""
msgstr "Instalar paquetes."
#: src/modules/packages/main.py:66
#, python-format
msgid "Installing one package."
msgid_plural "Installing %(num)d packages."
msgstr[0] ""
msgstr[1] ""
msgstr[0] "Instalando un paquete."
msgstr[1] "Instalando%(num)d paquetes."
#: src/modules/packages/main.py:69
#, python-format
msgid "Removing one package."
msgid_plural "Removing %(num)d packages."
msgstr[0] ""
msgstr[1] ""
msgstr[0] "Removiendo un paquete."
msgstr[1] "Removiendo %(num)dpaquetes."

Binary file not shown.

View File

@ -41,18 +41,18 @@ msgstr "Pakkide töötlemine (%(count)d / %(total)d)"
#: src/modules/packages/main.py:63 src/modules/packages/main.py:73
msgid "Install packages."
msgstr "Installi pakid."
msgstr "Paigalda paketid."
#: src/modules/packages/main.py:66
#, python-format
msgid "Installing one package."
msgid_plural "Installing %(num)d packages."
msgstr[0] "Installin ühe paki."
msgstr[1] "Installin %(num)d pakki."
msgstr[0] "Paigaldan ühe paketi."
msgstr[1] "Paigaldan %(num)d paketti."
#: src/modules/packages/main.py:69
#, python-format
msgid "Removing one package."
msgid_plural "Removing %(num)d packages."
msgstr[0] "Eemaldan ühe paki."
msgstr[1] "Eemaldan %(num)d pakki."
msgstr[0] "Eemaldan ühe paketi."
msgstr[1] "Eemaldan %(num)d paketti."

Binary file not shown.

View File

@ -0,0 +1,55 @@
# SOME DESCRIPTIVE TITLE.
# 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: 2018-05-28 04:57-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Language-Team: Korean (https://www.transifex.com/calamares/teams/20061/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ko\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: src/modules/umount/main.py:40
msgid "Unmount file systems."
msgstr ""
#: src/modules/dummypython/main.py:44
msgid "Dummy python job."
msgstr ""
#: src/modules/dummypython/main.py:97
msgid "Dummy python step {}"
msgstr ""
#: src/modules/machineid/main.py:35
msgid "Generate machine-id."
msgstr ""
#: src/modules/packages/main.py:61
#, python-format
msgid "Processing packages (%(count)d / %(total)d)"
msgstr ""
#: src/modules/packages/main.py:63 src/modules/packages/main.py:73
msgid "Install packages."
msgstr ""
#: src/modules/packages/main.py:66
#, python-format
msgid "Installing one package."
msgid_plural "Installing %(num)d packages."
msgstr[0] ""
#: src/modules/packages/main.py:69
#, python-format
msgid "Removing one package."
msgid_plural "Removing %(num)d packages."
msgstr[0] ""

View File

@ -24,9 +24,11 @@ so that it can be run directly from the build directory for testing purposes:
Since the slideshow can be **any** QML, it is limited only by your designers
imagination and your QML experience. For straightforward presentations,
see the documentation below. There are more examples in the *calamares-branding*
see the documentation below. There are more examples in the [calamares-branding][1]
repository.
[1] https://github.com/calamares/calamares-branding
## Translations
QML files in a branding component can be translated. Translations should

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2015, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -30,7 +31,7 @@ Presentation
repeat: true
onTriggered: presentation.goToNextSlide()
}
Slide {
Image {

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -49,10 +50,10 @@ CalamaresApplication::CalamaresApplication( int& argc, char* argv[] )
// <org>/<app>/, so we end up with ~/.cache/Calamares/calamares/
// which is excessively squidly.
//
// setOrganizationName( QLatin1String( CALAMARES_ORGANIZATION_NAME ) );
setOrganizationDomain( QLatin1String( CALAMARES_ORGANIZATION_DOMAIN ) );
setApplicationName( QLatin1String( CALAMARES_APPLICATION_NAME ) );
setApplicationVersion( QLatin1String( CALAMARES_VERSION ) );
// setOrganizationName( QStringLiteral( CALAMARES_ORGANIZATION_NAME ) );
setOrganizationDomain( QStringLiteral( CALAMARES_ORGANIZATION_DOMAIN ) );
setApplicationName( QStringLiteral( CALAMARES_APPLICATION_NAME ) );
setApplicationVersion( QStringLiteral( CALAMARES_VERSION ) );
cDebug() << "Calamares version:" << CALAMARES_VERSION;
@ -335,6 +336,8 @@ CalamaresApplication::initView()
connect( m_moduleManager, &Calamares::ModuleManager::modulesLoaded,
this, &CalamaresApplication::initViewSteps );
connect( m_moduleManager, &Calamares::ModuleManager::modulesFailed,
this, &CalamaresApplication::initFailed );
m_moduleManager->loadModules();
@ -356,6 +359,12 @@ CalamaresApplication::initViewSteps()
cDebug() << "STARTUP: Window now visible and ProgressTreeView populated";
}
void
CalamaresApplication::initFailed(const QStringList& l)
{
cError() << "STARTUP: failed modules are" << l;
m_mainwindow->show();
}
void
CalamaresApplication::initJobQueue()

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -70,6 +71,7 @@ public:
private slots:
void initView();
void initViewSteps();
void initFailed( const QStringList& l );
private:
void initQmlPath();

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -66,8 +66,15 @@ public:
virtual QString prettyDescription() const;
virtual QString prettyStatusMessage() const;
virtual JobResult exec() = 0;
bool isEmergency() const { return m_emergency; }
void setEmergency( bool e ) { m_emergency = e; }
signals:
void progress( qreal percent );
private:
bool m_emergency = false;
};
} // namespace Calamares

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -50,22 +51,36 @@ public:
void run() override
{
bool anyFailed = false;
QString message;
QString details;
m_jobIndex = 0;
for( auto job : m_jobs )
{
if ( anyFailed && !job->isEmergency() )
{
cDebug() << "Skipping non-emergency job" << job->prettyName();
continue;
}
emitProgress();
cDebug() << "Starting job" << job->prettyName();
cDebug() << "Starting" << ( anyFailed ? "EMERGENCY JOB" : "job" ) << job->prettyName();
connect( job.data(), &Job::progress, this, &JobThread::emitProgress );
JobResult result = job->exec();
if ( !result )
if ( !anyFailed && !result )
{
emitFailed( result.message(), result.details() );
emitFinished();
return;
anyFailed = true;
message = result.message();
details = result.details();
}
++m_jobIndex;
if ( !anyFailed )
++m_jobIndex;
}
emitProgress();
if ( anyFailed )
emitFailed( message, details );
else
emitProgress();
emitFinished();
}

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2016, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2016, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2016, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -30,6 +30,32 @@
#include <yaml-cpp/yaml.h>
/** Helper function to grab a QString out of the config, and to warn if not present. */
static QString
requireString( const YAML::Node& config, const char* key )
{
if ( config[ key ] )
return QString::fromStdString( config[ key ].as< std::string >() );
else
{
cWarning() << "Required settings.conf key" << key << "is missing.";
return QString();
}
}
/** Helper function to grab a bool out of the config, and to warn if not present. */
static bool
requireBool( const YAML::Node& config, const char* key, bool d )
{
if ( config[ key ] )
return config[ key ].as< bool >();
else
{
cWarning() << "Required settings.conf key" << key << "is missing.";
return d;
}
}
namespace Calamares
{
@ -41,7 +67,6 @@ Settings::instance()
return s_instance;
}
Settings::Settings( const QString& settingsFilePath,
bool debugMode,
QObject* parent )
@ -148,11 +173,9 @@ Settings::Settings( const QString& settingsFilePath,
}
}
m_brandingComponentName = QString::fromStdString( config[ "branding" ]
.as< std::string >() );
m_promptInstall = config[ "prompt-install" ].as< bool >();
m_doChroot = config[ "dont-chroot" ] ? !config[ "dont-chroot" ].as< bool >() : true;
m_brandingComponentName = requireString( config, "branding" );
m_promptInstall = requireBool( config, "prompt-install", false );
m_doChroot = requireBool( config, "dont-chroot", true );
}
catch ( YAML::Exception& e )
{
@ -175,7 +198,7 @@ Settings::modulesSearchPaths() const
}
QList<QMap<QString, QString> >
Settings::InstanceDescriptionList
Settings::customModuleInstances() const
{
return m_customModuleInstances;

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -43,7 +43,9 @@ public:
QStringList modulesSearchPaths() const;
QList< QMap< QString, QString > > customModuleInstances() const;
using InstanceDescription = QMap< QString, QString >;
using InstanceDescriptionList = QList< InstanceDescription >;
InstanceDescriptionList customModuleInstances() const;
QList< QPair< ModuleAction, QStringList > > modulesSequence() const;
@ -60,7 +62,7 @@ private:
QStringList m_modulesSearchPaths;
QList< QMap< QString, QString > > m_customModuleInstances;
InstanceDescriptionList m_customModuleInstances;
QList< QPair< ModuleAction, QStringList > > m_modulesSequence;
QString m_brandingComponentName;

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2013-2016, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Originally from Tomahawk, portions:
* Copyright 2010-2011, Christian Muehlhaeuser <muesli@tomahawk-player.org>
@ -33,11 +34,9 @@
#include <QStandardPaths>
#include <QTranslator>
// stdc++
#include <iostream>
using namespace std;
using std::cerr;
namespace CalamaresUtils
{

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2013-2016, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Originally from Tomahawk, portions:
* Copyright 2010-2011, Christian Muehlhaeuser <muesli@tomahawk-player.org>

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2015, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Based on KPluginFactory from KCoreAddons, KDE project
* Copyright 2007, Matthias Kretz <kretz@kde.org>

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2015, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Based on KPluginFactory from KCoreAddons, KDE project
* Copyright 2007, Matthias Kretz <kretz@kde.org>
@ -111,7 +111,7 @@ namespace Calamares
* T(QObject *parent, const QVariantList &args)
* \endcode
*
* You should typically use CALAMARES_PLUGIN_FACTORY_DEFINITION() in your plugin code to
* You should typically use CALAMARES_PLUGIN_FACTORY_DEFINITION() in your plugin code to
* create the factory. The pattern is
*
* \code

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -15,6 +15,7 @@ set( calamaresui_SOURCES
utils/qjsonitem.cpp
viewpages/AbstractPage.cpp
viewpages/BlankViewStep.cpp
viewpages/ViewStep.cpp
widgets/ClickableLabel.cpp

View File

@ -21,6 +21,7 @@
#include <ExecutionViewStep.h>
#include "Branding.h"
#include "Job.h"
#include "JobQueue.h"
#include "modulesystem/Module.h"
#include "modulesystem/ModuleManager.h"
@ -142,7 +143,15 @@ ExecutionViewStep::onActivate()
Calamares::Module* module = Calamares::ModuleManager::instance()
->moduleInstance( instanceKey );
if ( module )
queue->enqueue( module->jobs() );
{
auto jl = module->jobs();
if ( module->isEmergency() )
{
for( auto& j : jl )
j->setEmergency( true );
}
queue->enqueue( jl );
}
}
queue->start();

View File

@ -20,6 +20,7 @@
#include "ViewManager.h"
#include "utils/Logger.h"
#include "viewpages/BlankViewStep.h"
#include "viewpages/ViewStep.h"
#include "ExecutionViewStep.h"
#include "JobQueue.h"
@ -172,6 +173,27 @@ ViewManager::onInstallationFailed( const QString& message, const QString& detail
}
void
ViewManager::onInitFailed( const QStringList& modules)
{
QString title( tr( "Calamares Initialization Failed" ) );
QString description( tr( "%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." ) );
QString detailString;
if ( modules.count() > 0 )
{
description.append( tr( "<br/>The following modules could not be loaded:" ) );
QStringList details;
details << QLatin1Literal("<ul>");
for( const auto& m : modules )
details << QLatin1Literal("<li>") << m << QLatin1Literal("</li>");
details << QLatin1Literal("</ul>");
detailString = details.join( QString() );
}
insertViewStep( 0, new BlankViewStep( title, description.arg( *Calamares::Branding::ShortProductName ), detailString ) );
}
ViewStepList
ViewManager::viewSteps() const
{

View File

@ -117,6 +117,12 @@ public slots:
*/
void onInstallationFailed( const QString& message, const QString& details );
/** @brief Replaces the stack with a view step stating that initialization failed.
*
* @param modules a list of failed modules.
*/
void onInitFailed( const QStringList& modules );
signals:
void currentStepChanged();
void enlarge( QSize enlarge ) const; // See ViewStep::enlarge()

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -52,6 +52,8 @@ name: "foo" #the module name. must be unique and same as the parent di
interface: "qtplugin" #can be: qtplugin, python, process, ...
*/
static const char EMERGENCY[] = "emergency";
namespace Calamares
{
@ -64,7 +66,7 @@ Module::fromDescriptor( const QVariantMap& moduleDescriptor,
const QString& configFileName,
const QString& moduleDirectory )
{
Module* m = nullptr;
std::unique_ptr<Module> m;
QString typeString = moduleDescriptor.value( "type" ).toString();
QString intfString = moduleDescriptor.value( "interface" ).toString();
@ -79,12 +81,12 @@ Module::fromDescriptor( const QVariantMap& moduleDescriptor,
{
if ( intfString == "qtplugin" )
{
m = new ViewModule();
m.reset( new ViewModule() );
}
else if ( intfString == "pythonqt" )
{
#ifdef WITH_PYTHONQT
m = new PythonQtViewModule();
m.reset( new PythonQtViewModule() );
#else
cError() << "PythonQt view modules are not supported in this version of Calamares.";
#endif
@ -96,16 +98,16 @@ Module::fromDescriptor( const QVariantMap& moduleDescriptor,
{
if ( intfString == "qtplugin" )
{
m = new CppJobModule();
m.reset( new CppJobModule() );
}
else if ( intfString == "process" )
{
m = new ProcessJobModule();
m.reset( new ProcessJobModule() );
}
else if ( intfString == "python" )
{
#ifdef WITH_PYTHON
m = new PythonJobModule();
m.reset( new PythonJobModule() );
#else
cError() << "Python modules are not supported in this version of Calamares.";
#endif
@ -130,7 +132,6 @@ Module::fromDescriptor( const QVariantMap& moduleDescriptor,
else
{
cError() << "Bad module directory" << moduleDirectory << "for" << instanceId;
delete m;
return nullptr;
}
@ -144,10 +145,9 @@ Module::fromDescriptor( const QVariantMap& moduleDescriptor,
catch ( YAML::Exception& e )
{
cError() << "YAML parser error " << e.what();
delete m;
return nullptr;
}
return m;
return m.release();
}
@ -200,6 +200,9 @@ Module::loadConfigurationFile( const QString& configFileName ) //throws YAML::Ex
}
m_configurationMap = CalamaresUtils::yamlMapToVariant( doc ).toMap();
m_emergency = m_maybe_emergency
&& m_configurationMap.contains( EMERGENCY )
&& m_configurationMap[ EMERGENCY ].toBool();
return;
}
else
@ -276,13 +279,6 @@ Module::interfaceString() const
}
bool
Module::isLoaded() const
{
return m_loaded;
}
QVariantMap
Module::configurationMap()
{
@ -299,6 +295,11 @@ void
Module::initFrom( const QVariantMap& moduleDescriptor )
{
m_name = moduleDescriptor.value( "name" ).toString();
if ( moduleDescriptor.contains( EMERGENCY ) )
{
m_maybe_emergency = moduleDescriptor[ EMERGENCY ].toBool();
}
}
} //ns

View File

@ -147,7 +147,7 @@ public:
* @brief isLoaded reports on the loaded status of a module.
* @return true if the module's loading phase has finished, otherwise false.
*/
virtual bool isLoaded() const;
bool isLoaded() const { return m_loaded; }
/**
* @brief loadSelf initialized the module.
@ -155,6 +155,17 @@ public:
*/
virtual void loadSelf() = 0;
/**
* @brief Is this an emergency module?
*
* An emergency module is run even if an error occurs
* which would terminate Calamares earlier in the same
* *exec* block. Emergency modules in later exec blocks
* are not run (in the common case where there is only
* one exec block, this doesn't really matter).
*/
bool isEmergency() const { return m_emergency; }
/**
* @brief jobs returns any jobs exposed by this module.
* @return a list of jobs (can be empty).
@ -171,11 +182,15 @@ public:
protected:
explicit Module();
virtual void initFrom( const QVariantMap& moduleDescriptor );
bool m_loaded;
QVariantMap m_configurationMap;
bool m_loaded = false;
bool m_emergency = false; // Based on module and local config
bool m_maybe_emergency = false; // Based on the module.desc
private:
void loadConfigurationFile( const QString& configFileName ); //throws YAML::Exception
QString m_name;
QStringList m_requiredModules;
QString m_directory;

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -154,12 +155,33 @@ ModuleManager::moduleInstance( const QString& instanceKey )
}
/**
* @brief Search a list of instance descriptions for one matching @p module and @p id
*
* @return -1 on failure, otherwise index of the instance that matches.
*/
static int findCustomInstance( const Settings::InstanceDescriptionList& customInstances,
const QString& module,
const QString& id )
{
for ( int i = 0; i < customInstances.count(); ++i )
{
const auto& thisInstance = customInstances[ i ];
if ( thisInstance.value( "module" ) == module &&
thisInstance.value( "id" ) == id )
return i;
}
return -1;
}
void
ModuleManager::loadModules()
{
QTimer::singleShot( 0, this, [ this ]()
{
QList< QMap< QString, QString > > customInstances =
QStringList failedModules;
Settings::InstanceDescriptionList customInstances =
Settings::instance()->customModuleInstances();
const auto modulesSequence = Settings::instance()->modulesSequence();
@ -177,10 +199,9 @@ ModuleManager::loadModules()
if ( moduleEntrySplit.length() < 1 ||
moduleEntrySplit.length() > 2 )
{
cError() << "Wrong module entry format for module" << moduleEntry << '.';
cError() << "Calamares will now quit.";
qApp->exit( 1 );
return;
cError() << "Wrong module entry format for module" << moduleEntry;
failedModules.append( moduleEntry );
continue;
}
moduleName = moduleEntrySplit.first();
instanceId = moduleEntrySplit.last();
@ -191,37 +212,21 @@ ModuleManager::loadModules()
{
cError() << "Module" << moduleName << "not found in module search paths."
<< Logger::DebugList( m_paths );
cError() << "Calamares will now quit.";
qApp->exit( 1 );
return;
failedModules.append( moduleName );
continue;
}
auto findCustomInstance =
[ customInstances ]( const QString& module,
const QString& id) -> int
{
for ( int i = 0; i < customInstances.count(); ++i )
{
auto thisInstance = customInstances[ i ];
if ( thisInstance.value( "module" ) == module &&
thisInstance.value( "id" ) == id )
return i;
}
return -1;
};
if ( moduleName != instanceId ) //means this is a custom instance
{
if ( findCustomInstance( moduleName, instanceId ) > -1 )
if ( int found = findCustomInstance( customInstances, moduleName, instanceId ) > -1 )
{
configFileName = customInstances[ findCustomInstance( moduleName, instanceId ) ].value( "config" );
configFileName = customInstances[ found ].value( "config" );
}
else //ought to be a custom instance, but cannot find instance entry
{
cError() << "Custom instance" << moduleEntry << "not found in custom instances section.";
cError() << "Calamares will now quit.";
qApp->exit( 1 );
return;
failedModules.append( moduleEntry );
continue;
}
}
@ -241,10 +246,9 @@ ModuleManager::loadModules()
m_loadedModulesByInstanceKey.value( instanceKey, nullptr );
if ( thisModule && !thisModule->isLoaded() )
{
cError() << "Module" << instanceKey << "exists but not loaded."
<< "\nCalamares will now quit.";
qApp->exit( 1 );
return;
cError() << "Module" << instanceKey << "exists but not loaded.";
failedModules.append( instanceKey );
continue;
}
if ( thisModule && thisModule->isLoaded() )
@ -260,8 +264,8 @@ ModuleManager::loadModules()
m_moduleDirectoriesByModuleName.value( moduleName ) );
if ( !thisModule )
{
cWarning() << "Module" << instanceKey << "cannot be created from descriptor.";
Q_ASSERT( thisModule );
cError() << "Module" << instanceKey << "cannot be created from descriptor" << configFileName;
failedModules.append( instanceKey );
continue;
}
// If it's a ViewModule, it also appends the ViewStep to the ViewManager.
@ -269,8 +273,8 @@ ModuleManager::loadModules()
m_loadedModulesByInstanceKey.insert( instanceKey, thisModule );
if ( !thisModule->isLoaded() )
{
cWarning() << "Module" << moduleName << "loading FAILED";
Q_ASSERT( thisModule->isLoaded() );
cError() << "Module" << instanceKey << "loading FAILED.";
failedModules.append( instanceKey );
continue;
}
}
@ -292,7 +296,13 @@ ModuleManager::loadModules()
}
}
}
emit modulesLoaded();
if ( !failedModules.isEmpty() )
{
ViewManager::instance()->onInitFailed( failedModules );
emit modulesFailed( failedModules );
}
else
emit modulesLoaded();
} );
}

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -82,7 +83,8 @@ public:
signals:
void initDone();
void modulesLoaded();
void modulesLoaded(); /// All of the modules were loaded successfully
void modulesFailed( QStringList ); /// .. or not
private slots:
void doInit();

View File

@ -1,6 +1,8 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2016, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
* Copyright 2018, Raul Rodrigo Segura <raurodse@gmail.com>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -95,6 +97,9 @@ PythonQtViewModule::loadSelf()
s_utils = new ::Utils( Calamares::JobQueue::instance()->globalStorage() );
cala.addObject( "utils", s_utils );
// Append configuration object, in module PythonQt.calamares
cala.addVariable("configuration", m_configurationMap);
// Basic stdout/stderr handling
QObject::connect( PythonQt::self(), &PythonQt::pythonStdOut,
[]( const QString& message )

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -52,27 +52,32 @@ ViewModule::loadSelf()
PluginFactory* pf = qobject_cast< PluginFactory* >( m_loader->instance() );
if ( !pf )
{
cDebug() << Q_FUNC_INFO << "No factory:" << m_loader->errorString();
cWarning() << Q_FUNC_INFO << "No factory:" << m_loader->errorString();
return;
}
m_viewStep = pf->create< Calamares::ViewStep >();
if ( !m_viewStep )
{
cDebug() << Q_FUNC_INFO << "create() failed" << m_loader->errorString();
cWarning() << Q_FUNC_INFO << "create() failed" << m_loader->errorString();
return;
}
// cDebug() << "ViewModule loading self for instance" << instanceKey()
// << "\nViewModule at address" << this
// << "\nCalamares::PluginFactory at address" << pf
// << "\nViewStep at address" << m_viewStep;
}
// TODO: allow internal view steps to be created here; they would
// have to be linked into the main application somehow.
// If any method created the view step, use it now.
if ( m_viewStep )
{
m_viewStep->setModuleInstanceKey( instanceKey() );
m_viewStep->setConfigurationMap( m_configurationMap );
ViewManager::instance()->addViewStep( m_viewStep );
m_loaded = true;
cDebug() << "ViewModule" << instanceKey() << "loading complete.";
}
else
cWarning() << Q_FUNC_INFO << "No view step was created";
}

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -226,10 +226,20 @@ defaultFont()
}
QFont
largeFont()
{
QFont f;
f.setPointSize( defaultFontSize() + 4 );
return f;
}
void
setDefaultFontSize( int points )
{
s_defaultFontSize = points;
s_defaultFontHeight = 0; // Recalculate on next call to defaultFontHeight()
}

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -115,6 +115,7 @@ UIDLLEXPORT void setDefaultFontSize( int points );
UIDLLEXPORT int defaultFontSize(); // in points
UIDLLEXPORT int defaultFontHeight(); // in pixels, DPI-specific
UIDLLEXPORT QFont defaultFont();
UIDLLEXPORT QFont largeFont();
UIDLLEXPORT QSize defaultIconSize();
/**

View File

@ -0,0 +1,118 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Calamares is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Calamares. If not, see <http://www.gnu.org/licenses/>.
*/
#include "BlankViewStep.h"
#include "utils/CalamaresUtilsGui.h"
#include <QLabel>
#include <QVBoxLayout>
#include <QWidget>
namespace Calamares
{
BlankViewStep::BlankViewStep( const QString& title, const QString& description, const QString& details, QObject* parent)
: Calamares::ViewStep( parent )
, m_widget( new QWidget() )
{
QBoxLayout* layout = new QVBoxLayout();
constexpr int const marginWidth = 10;
constexpr int const spacingHeight = 10;
auto* label = new QLabel( title );
label->setAlignment( Qt::AlignHCenter );
label->setFont( CalamaresUtils::largeFont() );
layout->addWidget( label );
label = new QLabel( description );
label->setWordWrap( true );
label->setMargin( marginWidth );
layout->addSpacing( spacingHeight );
layout->addWidget( label );
if ( !details.isEmpty() )
{
label = new QLabel( details );
label->setMargin( marginWidth );
layout->addSpacing( spacingHeight );
layout->addWidget( label );
}
layout->addStretch( 1 ); // Push the rest to the top
m_widget->setLayout( layout );
}
BlankViewStep::~BlankViewStep()
{
}
QString
BlankViewStep::prettyName() const
{
return tr( "Blank Page" );
}
void
BlankViewStep::back()
{
}
void
BlankViewStep::next()
{
}
bool
BlankViewStep::isBackEnabled() const
{
return false;
}
bool
BlankViewStep::isNextEnabled() const
{
return false;
}
bool
BlankViewStep::isAtBeginning() const
{
return true;
}
bool
BlankViewStep::isAtEnd() const
{
return false;
}
QWidget*
BlankViewStep::widget()
{
return m_widget;
}
Calamares::JobList
BlankViewStep::jobs() const
{
return JobList();
}
} // namespace

View File

@ -0,0 +1,65 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Calamares is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Calamares. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef BLANKVIEWSTEP_H
#define BLANKVIEWSTEP_H
#include <QObject>
#include <utils/PluginFactory.h>
#include <viewpages/ViewStep.h>
class QWidget;
namespace Calamares
{
/** @brief A "blank" view step, used for error and status reporting
*
* This view step never allows navigation (forward or back); it's a trap.
* It displays a title and explanation, and optional details.
*/
class BlankViewStep : public Calamares::ViewStep
{
Q_OBJECT
public:
explicit BlankViewStep( const QString& title, const QString& description, const QString& details = QString(), QObject* parent = nullptr );
virtual ~BlankViewStep() override;
QString prettyName() const override;
QWidget* widget() override;
void next() override;
void back() override;
bool isNextEnabled() const override;
bool isBackEnabled() const override;
bool isAtBeginning() const override;
bool isAtEnd() const override;
Calamares::JobList jobs() const override;
private:
QWidget* m_widget;
};
} // namespace
#endif // BLANKVIEWSTEP_H

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2016, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -6,7 +6,7 @@ set( LIST_SKIPPED_MODULES "" )
if( BUILD_TESTING )
add_executable( test_conf test_conf.cpp )
target_link_libraries( test_conf ${YAMLCPP_LIBRARY} )
target_link_libraries( test_conf ${YAMLCPP_LIBRARY} Qt5::Core )
target_include_directories( test_conf PUBLIC ${YAMLCPP_INCLUDE_DIR} )
endif()

View File

@ -43,15 +43,21 @@ module's name, type, interface and possibly other properties. The name
of the module as defined in `module.desc` must be the same as the name
of the module's directory.
Module descriptors must have the following keys:
Module descriptors **must** have the following keys:
- *name* (an identifier; must be the same as the directory name)
- *type* ("job" or "view")
- *interface* (see below for the different interfaces; generally we
refer to the kinds of modules by their interface)
Module descriptors **may** have the following keys:
- *required* **unimplemented** (a list of modules which are required for this module
to operate properly)
- *emergency* (a boolean value, set to true to mark the module
as an emergency module)
## Module-specific configuration
A Calamares module *may* read a module configuration file,
A Calamares module **may** read a module configuration file,
named `<modulename>.conf`. If such a file is present in the
module's directory, it is shipped as a *default* configuration file.
The module configuration file, if it exists, is a YAML 1.2 document
@ -125,3 +131,23 @@ while the module type must be "job" or "jobmodule".
The key *command* should have a string as value, which is passed to the
shell -- remember to quote it properly.
## Emergency Modules
Only C++ modules and job modules may be emergency modules. If, during an
*exec* step in the sequence, a module fails, installation as a whole fails
and the install is aborted. If there are emergency modules in the **same**
exec block, those will be executed before the installation is aborted.
Non-emergency modules are not executed.
If an emergency-module fails while processing emergency-modules for
another failed module, that failure is ignored and emergency-module
processing continues.
Use the EMERGENCY keyword in the CMake description of a C++ module
to generate a suitable `module.desc`.
A module that is marked as an emergency module in its module.desc
must **also** set the *emergency* key to *true* in its configuration file.
If it does not, the module is not considered to be an emergency module
after all (this is so that you can have modules that have several
instances, only some of which are actually needed for emergencies.

View File

@ -1,6 +1,9 @@
# Bootloader configuration. The bootloader is installed to allow
# the system to start (and pick one of the installed operating
# systems to run).
---
# Define which bootloader you want to use for EFI installations
# Possible options are 'grub' and 'systemd-boot'.
# Possible options are 'grub', 'sb-shim' and 'systemd-boot'.
efiBootLoader: "grub"
# systemd-boot configuration files settings, set kernel and initramfs file names
@ -17,9 +20,13 @@ fallbackKernelLine: ", with _manjaro_kernel_ (fallback initramfs)"
# GRUB 2 binary names and boot directory
# Some distributions (e.g. Fedora) use grub2-* (resp. /boot/grub2/) names.
# These names are also used when using sb-shim, since that needs some
# GRUB functionality (notably grub-probe) to work.
#
grubInstall: "grub-install"
grubMkconfig: "grub-mkconfig"
grubCfg: "/boot/grub/grub.cfg"
grubProbe: "/usr/sbin/grub2-probe"
# Optionally set the bootloader ID to use for EFI. This is passed to
# grub-install --bootloader-id.
@ -29,8 +36,8 @@ grubCfg: "/boot/grub/grub.cfg"
#
# The ID is also used as a directory name within the EFI environment,
# and the bootloader is copied from /boot/efi/EFI/<dirname>/ . When
# setting the option here, take care to use only valid directory
# names since no sanitizing is done.
# setting the option here, keep in mind that the name is sanitized
# (problematic characters, see above, are replaced).
#
# efiBootloaderId: "dirname"

View File

@ -167,6 +167,30 @@ def create_loader(loader_path):
loader_file.write(line)
def efi_label():
if "efiBootloaderId" in libcalamares.job.configuration:
efi_bootloader_id = libcalamares.job.configuration[
"efiBootloaderId"]
else:
branding = libcalamares.globalstorage.value("branding")
efi_bootloader_id = branding["bootloaderEntryName"]
file_name_sanitizer = str.maketrans(" /", "_-")
return efi_bootloader_id.translate(file_name_sanitizer)
def efi_word_size():
# get bitness of the underlying UEFI
try:
sysfile = open("/sys/firmware/efi/fw_platform_size", "r")
efi_bitness = sysfile.read(2)
except Exception:
# if the kernel is older than 4.0, the UEFI bitness likely isn't
# exposed to the userspace so we assume a 64 bit UEFI here
efi_bitness = "64"
return efi_bitness
def install_systemd_boot(efi_directory):
"""
Installs systemd-boot as bootloader for EFI setups.
@ -218,22 +242,8 @@ def install_grub(efi_directory, fw_type):
if not os.path.isdir(install_efi_directory):
os.makedirs(install_efi_directory)
if "efiBootloaderId" in libcalamares.job.configuration:
efi_bootloader_id = libcalamares.job.configuration[
"efiBootloaderId"]
else:
branding = libcalamares.globalstorage.value("branding")
distribution = branding["bootloaderEntryName"]
file_name_sanitizer = str.maketrans(" /", "_-")
efi_bootloader_id = distribution.translate(file_name_sanitizer)
# get bitness of the underlying UEFI
try:
sysfile = open("/sys/firmware/efi/fw_platform_size", "r")
efi_bitness = sysfile.read(2)
except Exception:
# if the kernel is older than 4.0, the UEFI bitness likely isn't
# exposed to the userspace so we assume a 64 bit UEFI here
efi_bitness = "64"
efi_bootloader_id = efi_label()
efi_bitness = efi_word_size()
if efi_bitness == "32":
efi_target = "i386-efi"
@ -299,6 +309,57 @@ def install_grub(efi_directory, fw_type):
"-o", libcalamares.job.configuration["grubCfg"]])
def install_secureboot(efi_directory):
"""
Installs the secureboot shim in the system by calling efibootmgr.
"""
efi_bootloader_id = efi_label()
install_path = libcalamares.globalstorage.value("rootMountPoint")
install_efi_directory = install_path + efi_directory
if efi_word_size() == "64":
install_efi_bin = "shim64.efi"
else:
install_efi_bin = "shim.efi"
# Copied, roughly, from openSUSE's install script,
# and pythonified. *disk* is something like /dev/sda,
# while *drive* may return "(disk/dev/sda,gpt1)" ..
# we're interested in the numbers in the second part
# of that tuple.
efi_drive = subprocess.check_output([
libcalamares.job.configuration["grubProbe"],
"-t", "drive", "--device-map=", install_efi_directory])
efi_disk = subprocess.check_output([
libcalamares.job.configuration["grubProbe"],
"-t", "disk", "--device-map=", install_efi_directory])
efi_drive_partition = efi_drive.replace("(","").replace(")","").split(",")[1]
# Get the first run of digits from the partition
efi_partititon_number = None
c = 0
start = None
while c < len(efi_drive_partition):
if efi_drive_partition[c].isdigit() and start is None:
start = c
if not efi_drive_partition[c].isdigit() and start is not None:
efi_drive_number = efi_drive_partition[start:c]
break
c += 1
if efi_partititon_number is None:
raise ValueError("No partition number found for %s" % install_efi_directory)
subprocess.call([
"/usr/sbin/efibootmgr",
"-c",
"-w",
"-L", efi_bootloader_id,
"-d", efi_disk,
"-p", efi_partititon_number,
"-l", install_efi_directory + "/" + install_efi_bin])
def vfat_correct_case(parent, name):
for candidate in os.listdir(parent):
if name.lower() == candidate.lower():
@ -320,8 +381,14 @@ def prepare_bootloader(fw_type):
if efi_boot_loader == "systemd-boot" and fw_type == "efi":
install_systemd_boot(efi_directory)
else:
elif efi_boot_loader == "sb-shim" and fw_type == "efi":
install_secureboot(efi_directory)
elif efi_boot_loader == "grub" or fw_type != "efi":
install_grub(efi_directory, fw_type)
else:
libcalamares.utils.debug( "WARNING: the combination of "
"boot-loader '{!s}' and firmware '{!s}' "
"is not supported.".format(efi_boot_loader, fw_type) )
def run():

View File

@ -66,7 +66,7 @@ struct ContextualProcessBinding
void append( const QString& value, CalamaresUtils::CommandList* commands )
{
checks.append( ValueCheck( value, commands ) );
if ( value == '*' )
if ( value == QString( "*" ) )
wildcard = commands;
}

View File

@ -1,6 +1,6 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -17,7 +17,10 @@
#
# As a special case, the value-check "*" matches any value, but **only**
# if no other value-check matches. Use it as an *else* form for value-
# checks. Take care to put the asterisk in quotes.
# checks. Take care to put the asterisk in quotes. The value-check "*"
# **also** matches a literal asterisk as value; a confusing corner case
# is checking for an asterisk **and** having a wildcard match with
# different commands. This is currently not possible.
#
# Global configuration variables are not checked in a deterministic
# order, so do not rely on commands from one variable-check to

View File

@ -2,6 +2,7 @@
*
* Copyright 2014, Teo Mrnjavac <teo@kde.org> (original dummypython code)
* Copyright 2016, Kevin Kofler <kevin.kofler@chello.at>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -8,8 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-09-04 08:16-0400\n"
"POT-Creation-Date: 2018-05-28 04:57-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: guillermo pacheco <guillopacheco@gmail.com>, 2018\n"
"Language-Team: Spanish (Mexico) (https://www.transifex.com/calamares/teams/20061/es_MX/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -19,24 +20,24 @@ msgstr ""
#: src/modules/dummypythonqt/main.py:84
msgid "Click me!"
msgstr ""
msgstr "¡Haz clic en mí!"
#: src/modules/dummypythonqt/main.py:94
msgid "A new QLabel."
msgstr ""
msgstr "Una nueva QLabel."
#: src/modules/dummypythonqt/main.py:97
msgid "Dummy PythonQt ViewStep"
msgstr ""
msgstr "Vision del PythonQt ficticio"
#: src/modules/dummypythonqt/main.py:183
msgid "The Dummy PythonQt Job"
msgstr ""
msgstr "Trabajo del PythonQt ficticio"
#: src/modules/dummypythonqt/main.py:186
msgid "This is the Dummy PythonQt Job. The dummy job says: {}"
msgstr ""
msgstr "Este es el Trabajo PythonQt ficticio. El trabajo ficticio dice: {}"
#: src/modules/dummypythonqt/main.py:190
msgid "A status message for Dummy PythonQt Job."
msgstr ""
msgstr "Un mensaje de estado para el trabajo PythonQt ficticio."

View File

@ -0,0 +1,42 @@
# SOME DESCRIPTIVE TITLE.
# 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: 2018-05-28 04:57-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Language-Team: Korean (https://www.transifex.com/calamares/teams/20061/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ko\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: src/modules/dummypythonqt/main.py:84
msgid "Click me!"
msgstr ""
#: src/modules/dummypythonqt/main.py:94
msgid "A new QLabel."
msgstr ""
#: src/modules/dummypythonqt/main.py:97
msgid "Dummy PythonQt ViewStep"
msgstr ""
#: src/modules/dummypythonqt/main.py:183
msgid "The Dummy PythonQt Job"
msgstr ""
#: src/modules/dummypythonqt/main.py:186
msgid "This is the Dummy PythonQt Job. The dummy job says: {}"
msgstr ""
#: src/modules/dummypythonqt/main.py:190
msgid "A status message for Dummy PythonQt Job."
msgstr ""

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -7,7 +7,7 @@
# Copyright 2015-2017, Teo Mrnjavac <teo@kde.org>
# Copyright 2017, Alf Gaida <agaida@siduction.org>
# Copyright 2017, Adriaan de Groot <groot@kde.org>
# Copyright 2017, Gabriel Craciunescu <crazy@frugalware.org>
# Copyright 2017-2018, Gabriel Craciunescu <crazy@frugalware.org>
#
# Calamares is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -44,16 +44,21 @@ def modify_grub_default(partitions, root_mount_point, distributor):
dracut_bin = libcalamares.utils.target_env_call(
["sh", "-c", "which dracut"]
)
have_dracut = dracut_bin == 0 # Shell exit value 0 means success
plymouth_bin = libcalamares.utils.target_env_call(
["sh", "-c", "which plymouth"]
)
# Shell exit value 0 means success
have_plymouth = plymouth_bin == 0
have_dracut = dracut_bin == 0
use_splash = ""
swap_uuid = ""
swap_outer_uuid = ""
swap_outer_mappername = None
if libcalamares.globalstorage.contains("hasPlymouth"):
if libcalamares.globalstorage.value("hasPlymouth"):
use_splash = "splash"
if have_plymouth:
use_splash = "splash"
cryptdevice_params = []

View File

@ -6,7 +6,7 @@
# Copyright 2014 - 2015, Philip Müller <philm@manjaro.org>
# Copyright 2014, Teo Mrnjavac <teo@kde.org>
# Copyright 2017, Alf Gaida <agaida@siduction.org>
# Copyright 2017, Gabriel Craciunescu <crazy@frugalware.org>
# Copyright 2017-2018, Gabriel Craciunescu <crazy@frugalware.org>
#
# Calamares is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2016, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Portions from the Manjaro Installation Framework
* by Roland Singer <roland@manjaro.org>
@ -95,8 +95,7 @@ KeyboardPage::KeyboardPage( QWidget* parent )
QString model = m_models.value( text, "pc105" );
// Set Xorg keyboard model
QProcess::execute( QLatin1Literal( "setxkbmap" ),
QStringList() << "-model" << model );
QProcess::execute( "setxkbmap", QStringList{ "-model", model } );
} );
CALAMARES_RETRANSLATE( ui->retranslateUi( this ); )
@ -356,11 +355,15 @@ KeyboardPage::onActivate()
lang.replace( '-', '_' ); // Normalize separators
}
if ( !lang.isEmpty() && specialCaseMap.contains( lang.toStdString() ) )
if ( !lang.isEmpty() )
{
QLatin1String newLang( specialCaseMap.value( lang.toStdString() ).c_str() );
cDebug() << " .. special case language" << lang << '>' << newLang;
lang = newLang;
std::string lang_s = lang.toStdString();
if ( specialCaseMap.contains( lang_s ) )
{
QString newLang = QString::fromStdString( specialCaseMap.value( lang_s ) );
cDebug() << " .. special case language" << lang << "becomes" << newLang;
lang = newLang;
}
}
if ( !lang.isEmpty() )
{
@ -478,9 +481,8 @@ KeyboardPage::onListVariantCurrentItemChanged( QListWidgetItem* current, QListWi
connect( &m_setxkbmapTimer, &QTimer::timeout,
this, [=]
{
QProcess::execute( QLatin1Literal( "setxkbmap" ),
xkbmap_args( QStringList(), layout, variant ) );
cDebug() << "xkbmap selection changed to: " << layout << "-" << variant;
QProcess::execute( "setxkbmap", xkbmap_args( QStringList(), layout, variant ) );
cDebug() << "xkbmap selection changed to: " << layout << '-' << variant;
m_setxkbmapTimer.disconnect( this );
} );
m_setxkbmapTimer.start( QApplication::keyboardInputInterval() );

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Portions from the Manjaro Installation Framework
* by Roland Singer <roland@manjaro.org>

View File

@ -3,6 +3,7 @@
* Copyright 2015, Anke Boersma <demm@kaosx.us>
* Copyright 2015, Alexandre Arnt <qtgzmanager@gmail.com>
* Copyright 2015, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -57,7 +58,7 @@ LicensePage::LicensePage(QWidget *parent)
CalamaresUtils::defaultFontHeight() * 3,
CalamaresUtils::defaultFontHeight(),
CalamaresUtils::defaultFontHeight() );
ui->acceptFrame->setFrameStyle( QFrame::NoFrame | QFrame::Plain );
ui->acceptFrame->setStyleSheet( "#acceptFrame { border: 1px solid red;"
"background-color: #fff6f6;"

View File

@ -3,6 +3,7 @@
* Copyright 2015, Anke Boersma <demm@kaosx.us>
* Copyright 2015, Alexandre Arnt <qtgzmanager@gmail.com>
* Copyright 2015, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -28,7 +28,7 @@
#include <yaml-cpp/yaml.h>
GeoIPJSON::GeoIPJSON(const QString& attribute)
: GeoIP( attribute.isEmpty() ? QLatin1String( "time_zone" ) : attribute )
: GeoIP( attribute.isEmpty() ? QStringLiteral( "time_zone" ) : attribute )
{
}

View File

@ -23,6 +23,10 @@
#include "GeoIPXML.h"
#endif
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QtTest/QtTest>
QTEST_GUILESS_MAIN( GeoIPTests )
@ -49,15 +53,15 @@ GeoIPTests::testJSON()
GeoIPJSON handler;
auto tz = handler.processReply( json_data_attribute );
QCOMPARE( tz.first, QLatin1String( "Europe" ) );
QCOMPARE( tz.second, QLatin1String( "Amsterdam" ) );
QCOMPARE( tz.first, QStringLiteral( "Europe" ) );
QCOMPARE( tz.second, QStringLiteral( "Amsterdam" ) );
// JSON is quite tolerant
tz = handler.processReply( "time_zone: \"Europe/Brussels\"" );
QCOMPARE( tz.second, QLatin1String( "Brussels" ) );
QCOMPARE( tz.second, QStringLiteral( "Brussels" ) );
tz = handler.processReply( "time_zone: America/New_York\n" );
QCOMPARE( tz.first, QLatin1String( "America" ) );
QCOMPARE( tz.first, QStringLiteral( "America" ) );
}
void GeoIPTests::testJSONalt()
@ -68,8 +72,8 @@ void GeoIPTests::testJSONalt()
QCOMPARE( tz.first, QString() ); // Not found
tz = handler.processReply( "tarifa: 12\nzona_de_hora: Europe/Madrid" );
QCOMPARE( tz.first, QLatin1String( "Europe" ) );
QCOMPARE( tz.second, QLatin1String( "Madrid" ) );
QCOMPARE( tz.first, QStringLiteral( "Europe" ) );
QCOMPARE( tz.second, QStringLiteral( "Madrid" ) );
}
void
@ -118,8 +122,8 @@ GeoIPTests::testXML()
GeoIPXML handler;
auto tz = handler.processReply( xml_data_ubiquity );
QCOMPARE( tz.first, QLatin1String( "Europe" ) );
QCOMPARE( tz.second, QLatin1String( "Amsterdam" ) );
QCOMPARE( tz.first, QStringLiteral( "Europe" ) );
QCOMPARE( tz.second, QStringLiteral( "Amsterdam" ) );
#endif
}
@ -133,8 +137,8 @@ GeoIPTests::testXML2()
GeoIPXML handler;
auto tz = handler.processReply( data );
QCOMPARE( tz.first, QLatin1String( "America" ) );
QCOMPARE( tz.second, QLatin1String( "North_Dakota/Beulah" ) ); // Without space
QCOMPARE( tz.first, QStringLiteral( "America" ) );
QCOMPARE( tz.second, QStringLiteral( "North_Dakota/Beulah" ) ); // Without space
#endif
}
@ -145,8 +149,8 @@ void GeoIPTests::testXMLalt()
GeoIPXML handler( "ZT" );
auto tz = handler.processReply( "<A><B/><C><ZT>Moon/Dark_side</ZT></C></A>" );
QCOMPARE( tz.first, QLatin1String( "Moon" ) );
QCOMPARE( tz.second, QLatin1String( "Dark_side" ) );
QCOMPARE( tz.first, QStringLiteral( "Moon" ) );
QCOMPARE( tz.second, QStringLiteral( "Dark_side" ) );
#endif
}
@ -168,26 +172,26 @@ GeoIPTests::testXMLbad()
void GeoIPTests::testSplitTZ()
{
auto tz = GeoIP::splitTZString( QLatin1String("Moon/Dark_side") );
QCOMPARE( tz.first, QLatin1String("Moon") );
QCOMPARE( tz.second, QLatin1String("Dark_side") );
auto tz = GeoIP::splitTZString( QStringLiteral("Moon/Dark_side") );
QCOMPARE( tz.first, QStringLiteral("Moon") );
QCOMPARE( tz.second, QStringLiteral("Dark_side") );
// Some providers return weirdly escaped data
tz = GeoIP::splitTZString( QLatin1String("America\\/NewYork") );
QCOMPARE( tz.first, QLatin1String("America") );
QCOMPARE( tz.second, QLatin1String("NewYork") ); // That's not actually the zone name
tz = GeoIP::splitTZString( QStringLiteral("America\\/NewYork") );
QCOMPARE( tz.first, QStringLiteral("America") );
QCOMPARE( tz.second, QStringLiteral("NewYork") ); // That's not actually the zone name
// Check that bogus data fails
tz = GeoIP::splitTZString( QString() );
QCOMPARE( tz.first, QString() );
tz = GeoIP::splitTZString( QLatin1String("America.NewYork") );
tz = GeoIP::splitTZString( QStringLiteral("America.NewYork") );
QCOMPARE( tz.first, QString() );
// Check that three-level is split properly and space is replaced
tz = GeoIP::splitTZString( QLatin1String("America/North Dakota/Beulah") );
QCOMPARE( tz.first, QLatin1String("America") );
QCOMPARE( tz.second, QLatin1String("North_Dakota/Beulah") );
tz = GeoIP::splitTZString( QStringLiteral("America/North Dakota/Beulah") );
QCOMPARE( tz.first, QStringLiteral("America") );
QCOMPARE( tz.second, QStringLiteral("North_Dakota/Beulah") );
}
@ -217,7 +221,7 @@ synchronous_get( const char* urlstring )
void GeoIPTests::testGet()
{
if ( !QProcessEnvironment::systemEnvironment().contains( QLatin1String("TEST_HTTP_GET") ) )
if ( !QProcessEnvironment::systemEnvironment().contains( QStringLiteral("TEST_HTTP_GET") ) )
{
qDebug() << "Skipping HTTP GET tests";
return;
@ -228,8 +232,8 @@ void GeoIPTests::testGet()
auto default_tz = default_handler.processReply( synchronous_get( "https://geoip.kde.org/v1/calamares" ) );
// This is bogus, because the test isn't always run by me
// QCOMPARE( default_tz.first, QLatin1String("Europe") );
// QCOMPARE( default_tz.second, QLatin1String("Amsterdam") );
// QCOMPARE( default_tz.first, QStringLiteral("Europe") );
// QCOMPARE( default_tz.second, QStringLiteral("Amsterdam") );
QVERIFY( !default_tz.first.isEmpty() );
QVERIFY( !default_tz.second.isEmpty() );
@ -238,12 +242,12 @@ void GeoIPTests::testGet()
// services don't agree on the location of where the test is run.
CHECK_GET( JSON, QString(), "https://geoip.kde.org/v1/calamares" ) // Check it's consistent
CHECK_GET( JSON, QString(), "http://freegeoip.net/json/" ) // Original FreeGeoIP service
CHECK_GET( JSON, QLatin1String("timezone"), "https://ipapi.co/json" ) // Different JSON
CHECK_GET( JSON, QLatin1String("timezone"), "http://ip-api.com/json" )
CHECK_GET( JSON, QStringLiteral("timezone"), "https://ipapi.co/json" ) // Different JSON
CHECK_GET( JSON, QStringLiteral("timezone"), "http://ip-api.com/json" )
CHECK_GET( JSON, QLatin1String("location.time_zone"), "http://geoip.nekudo.com/api/" ) // 2-level JSON
CHECK_GET( JSON, QStringLiteral("location.time_zone"), "http://geoip.nekudo.com/api/" ) // 2-level JSON
CHECK_GET( JSON, QLatin1String("Location.TimeZone"), "https://geoip.kde.org/debug" ) // 2-level JSON
CHECK_GET( JSON, QStringLiteral("Location.TimeZone"), "https://geoip.kde.org/debug" ) // 2-level JSON
#ifdef HAVE_XML
CHECK_GET( XML, QString(), "http://geoip.ubuntu.com/lookup" ) // Ubiquity's XML format

View File

@ -24,7 +24,7 @@
#include <QtXml/QDomDocument>
GeoIPXML::GeoIPXML( const QString& element )
: GeoIP( element.isEmpty() ? QLatin1String( "TimeZone" ) : element )
: GeoIP( element.isEmpty() ? QStringLiteral( "TimeZone" ) : element )
{
}

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2016, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2016, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2016, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -498,7 +498,7 @@ LocalePage::updateGlobalStorage()
#ifndef DEBUG_TIMEZONES
if ( Calamares::Settings::instance()->doChroot() )
{
QProcess ::execute( "timedatectl", // depends on systemd
QProcess::execute( "timedatectl", // depends on systemd
{ "set-timezone",
location.region + '/' + location.zone } );
}

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2016, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -38,10 +38,10 @@ int main(int argc, char** argv)
}
GeoIP* handler = nullptr;
if ( QLatin1String( "json" ) == argv[1] )
if ( QStringLiteral( "json" ) == argv[1] )
handler = new GeoIPJSON;
#ifdef HAVE_XML
else if ( QLatin1String( "xml" ) == argv[1] )
else if ( QStringLiteral( "xml" ) == argv[1] )
handler = new GeoIPXML;
#endif

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Originally from the Manjaro Installation Framework
* by Roland Singer <roland@manjaro.org>

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Originally from the Manjaro Installation Framework
* by Roland Singer <roland@manjaro.org>

View File

@ -6,6 +6,7 @@
# Copyright 2014, Anke Boersma <demm@kaosx.us>
# Copyright 2015, Philip Müller <philm@manjaro.org>
# Copyright 2016, Teo Mrnjavac <teo@kde.org>
# Copyright 2018, AlmAck <gluca86@gmail.com>
#
# Calamares is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by

View File

@ -2,7 +2,7 @@
* Copyright 2016, Luca Giambonini <almack@chakraos.org>
* Copyright 2016, Lisa Vitolo <shainer@chakraos.org>
* Copyright 2017, Kyle Robbertze <krobbertze@gmail.com>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
* Copyright 2017, Gabriel Craciunescu <crazy@frugalware.org>
*
* Calamares is free software: you can redistribute it and/or modify

View File

@ -2,7 +2,7 @@
* Copyright 2016, Luca Giambonini <almack@chakraos.org>
* Copyright 2016, Lisa Vitolo <shainer@chakraos.org>
* Copyright 2017, Kyle Robbertze <krobbertze@gmail.com>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -2,7 +2,7 @@
* Copyright 2016, Luca Giambonini <almack@chakraos.org>
* Copyright 2016, Lisa Vitolo <shainer@chakraos.org>
* Copyright 2017, Kyle Robbertze <krobbertze@gmail.com>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright (c) 2017, Kyle Robbertze <kyle@aims.ac.za>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -2,6 +2,7 @@
*
* Copyright 2014, Aurélien Gâteau <agateau@kde.org>
* Copyright 2015-2016, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -344,23 +344,29 @@ isEfiSystem()
bool
isEfiBootable( const Partition* candidate )
{
cDebug() << "Check EFI bootable" << candidate->partitionPath() << candidate->devicePath();
cDebug() << " .. flags" << candidate->activeFlags();
auto flags = PartitionInfo::flags( candidate );
/* If bit 17 is set, old-style Esp flag, it's OK */
if ( flags.testFlag( PartitionTable::FlagEsp ) )
return true;
/* Otherwise, if it's a GPT table, Boot (bit 0) is the same as Esp */
const PartitionNode* root = candidate;
while ( root && !root->isRoot() )
{
root = root->parent();
cDebug() << " .. moved towards root" << (void *)root;
}
// Strange case: no root found, no partition table node?
if ( !root )
return false;
const PartitionTable* table = dynamic_cast<const PartitionTable*>( root );
cDebug() << " .. partition table" << (void *)table << "type" << ( table ? table->type() : PartitionTable::TableType::unknownTableType );
return table && ( table->type() == PartitionTable::TableType::gpt ) &&
flags.testFlag( PartitionTable::FlagBoot );
}

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2015-2016, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2017, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -2,7 +2,8 @@
*
* Copyright 2014, Aurélien Gâteau <agateau@kde.org>
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
* Copyright 2018, Caio Carvalho <caiojcarvalho@gmail.com>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014, Aurélien Gâteau <agateau@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014, Aurélien Gâteau <agateau@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014, Aurélien Gâteau <agateau@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2017, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014-2016, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -2,6 +2,9 @@
*
* Copyright 2014, Aurélien Gâteau <agateau@kde.org>
* Copyright 2016, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
* Copyright 2018, Andrius Štikonas <andrius@stikonas.eu>
* Copyright 2018, Caio Carvalho <caiojcarvalho@gmail.com>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -2,6 +2,7 @@
*
* Copyright 2014, Aurélien Gâteau <agateau@kde.org>
* Copyright 2016, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -2,6 +2,7 @@
*
* Copyright 2014, Aurélien Gâteau <agateau@kde.org>
* Copyright 2016, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Flags handling originally from KDE Partition Manager,
* Copyright 2008-2009, Volker Lanz <vl@fidra.de>

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014, Aurélien Gâteau <agateau@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -2,6 +2,8 @@
*
* Copyright 2014, Aurélien Gâteau <agateau@kde.org>
* Copyright 2015-2016, Teo Mrnjavac <teo@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
* Copyright 2018, Andrius Štikonas <andrius@stikonas.eu>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2014, Aurélien Gâteau <agateau@kde.org>
* Copyright 2018, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

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