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

This commit is contained in:
Philip Müller 2021-05-26 09:42:58 +02:00
commit dbdf5fabe7
40 changed files with 5200 additions and 331 deletions

20
.github/actions/notify-push/action.yml vendored Normal file
View File

@ -0,0 +1,20 @@
name: 'Notify on Push'
description: 'Notify Matrix room'
inputs:
room:
description: 'Matrix Room ID'
required: true
token:
description: 'Matrix Token'
required: true
message:
description: 'Message to send'
required: true
runs:
using: "composite"
steps:
- shell: bash
run: |
curl -s -XPOST -d "$( echo "${{ inputs.message }}" | jq -Rsc '{"msgtype": "m.text", "body":@text}' )" "https://matrix.org/_matrix/client/r0/rooms/%21${{ inputs.room }}/send/m.room.message?access_token=${{ inputs.token }}" > /dev/null

View File

@ -9,18 +9,16 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: "notify: new" - name: "notify: new"
uses: rectalogic/notify-irc@v1
if: github.event.issue.state == 'open' if: github.event.issue.state == 'open'
uses: ./.github/actions/notify-push
with: with:
server: chat.freenode.net token: ${{ secrets.MATRIX_TOKEN }}
nickname: cala-issues room: ${{ secrets.MATRIX_ROOM }}
channel: "#calamares"
message: "OPENED ${{ github.event.issue.html_url }} by ${{ github.actor }} ${{ github.event.issue.title }}" message: "OPENED ${{ github.event.issue.html_url }} by ${{ github.actor }} ${{ github.event.issue.title }}"
- name: "notify: closed" - name: "notify: closed"
uses: rectalogic/notify-irc@v1
if: github.event.issue.state != 'open' if: github.event.issue.state != 'open'
uses: ./.github/actions/notify-push
with: with:
server: chat.freenode.net token: ${{ secrets.MATRIX_TOKEN }}
nickname: cala-issues room: ${{ secrets.MATRIX_ROOM }}
channel: "#calamares"
message: "CLOSED ${{ github.event.issue.html_url }} by ${{ github.actor }} ${{ github.event.issue.title }}" message: "CLOSED ${{ github.event.issue.html_url }} by ${{ github.actor }} ${{ github.event.issue.title }}"

View File

@ -24,7 +24,7 @@ jobs:
- name: "prepare env" - name: "prepare env"
run: | run: |
apt-get update apt-get update
apt-get -y install git-core apt-get -y install git-core jq
apt-get -y install \ apt-get -y install \
build-essential \ build-essential \
cmake \ cmake \
@ -83,18 +83,16 @@ jobs:
working-directory: ${{ env.BUILDDIR }} working-directory: ${{ env.BUILDDIR }}
run: make install VERBOSE=1 run: make install VERBOSE=1
- name: "notify: ok" - name: "notify: ok"
uses: rectalogic/notify-irc@v1
if: ${{ success() && github.repository == 'calamares/calamares' }} if: ${{ success() && github.repository == 'calamares/calamares' }}
uses: ./.github/actions/notify-push
with: with:
server: chat.freenode.net token: ${{ secrets.MATRIX_TOKEN }}
nickname: cala-ci room: ${{ secrets.MATRIX_ROOM }}
channel: "#calamares"
message: "OK ${{ github.workflow }} in ${{ github.repository }} ${{ steps.pre_build.outputs.message }}" message: "OK ${{ github.workflow }} in ${{ github.repository }} ${{ steps.pre_build.outputs.message }}"
- name: "notify: fail" - name: "notify: fail"
uses: rectalogic/notify-irc@v1
if: ${{ failure() && github.repository == 'calamares/calamares' }} if: ${{ failure() && github.repository == 'calamares/calamares' }}
uses: ./.github/actions/notify-push
with: with:
server: chat.freenode.net token: ${{ secrets.MATRIX_TOKEN }}
nickname: cala-ci room: ${{ secrets.MATRIX_ROOM }}
channel: "#calamares"
message: "FAIL ${{ github.workflow }} in ${{ github.repository }} ${{ steps.pre_build.outputs.message }}" message: "FAIL ${{ github.workflow }} in ${{ github.repository }} ${{ steps.pre_build.outputs.message }}"

View File

@ -24,7 +24,7 @@ jobs:
- name: "prepare env" - name: "prepare env"
run: | run: |
sudo apt-get update sudo apt-get update
sudo apt-get -y install git-core sudo apt-get -y install git-core jq
sudo apt-get -y install \ sudo apt-get -y install \
build-essential \ build-essential \
cmake \ cmake \
@ -82,18 +82,16 @@ jobs:
if-no-files-found: error if-no-files-found: error
retention-days: 3 retention-days: 3
- name: "notify: ok" - name: "notify: ok"
uses: rectalogic/notify-irc@v1
if: ${{ success() && github.repository == 'calamares/calamares' }} if: ${{ success() && github.repository == 'calamares/calamares' }}
uses: ./.github/actions/notify-push
with: with:
server: chat.freenode.net token: ${{ secrets.MATRIX_TOKEN }}
nickname: cala-ci room: ${{ secrets.MATRIX_ROOM }}
channel: "#calamares"
message: "OK ${{ github.workflow }} in ${{ github.repository }} ${{ steps.pre_build.outputs.message }}" message: "OK ${{ github.workflow }} in ${{ github.repository }} ${{ steps.pre_build.outputs.message }}"
- name: "notify: fail" - name: "notify: fail"
uses: rectalogic/notify-irc@v1
if: ${{ failure() && github.repository == 'calamares/calamares' }} if: ${{ failure() && github.repository == 'calamares/calamares' }}
uses: ./.github/actions/notify-push
with: with:
server: chat.freenode.net token: ${{ secrets.MATRIX_TOKEN }}
nickname: cala-ci room: ${{ secrets.MATRIX_ROOM }}
channel: "#calamares"
message: "FAIL ${{ github.workflow }} in ${{ github.repository }} ${{ steps.pre_build.outputs.message }}" message: "FAIL ${{ github.workflow }} in ${{ github.repository }} ${{ steps.pre_build.outputs.message }}"

View File

@ -24,7 +24,7 @@ jobs:
- name: "prepare env" - name: "prepare env"
run: | run: |
zypper --non-interactive up zypper --non-interactive up
zypper --non-interactive in git-core zypper --non-interactive in git-core jq
# From deploycala.py # From deploycala.py
zypper --non-interactive in \ zypper --non-interactive in \
"autoconf" \ "autoconf" \
@ -81,18 +81,16 @@ jobs:
working-directory: ${{ env.BUILDDIR }} working-directory: ${{ env.BUILDDIR }}
run: make install VERBOSE=1 run: make install VERBOSE=1
- name: "notify: ok" - name: "notify: ok"
uses: rectalogic/notify-irc@v1
if: ${{ success() && github.repository == 'calamares/calamares' }} if: ${{ success() && github.repository == 'calamares/calamares' }}
uses: ./.github/actions/notify-push
with: with:
server: chat.freenode.net token: ${{ secrets.MATRIX_TOKEN }}
nickname: cala-ci room: ${{ secrets.MATRIX_ROOM }}
channel: "#calamares"
message: "OK ${{ github.workflow }} in ${{ github.repository }} ${{ steps.pre_build.outputs.message }}" message: "OK ${{ github.workflow }} in ${{ github.repository }} ${{ steps.pre_build.outputs.message }}"
- name: "notify: fail" - name: "notify: fail"
uses: rectalogic/notify-irc@v1
if: ${{ failure() && github.repository == 'calamares/calamares' }} if: ${{ failure() && github.repository == 'calamares/calamares' }}
uses: ./.github/actions/notify-push
with: with:
server: chat.freenode.net token: ${{ secrets.MATRIX_TOKEN }}
nickname: cala-ci room: ${{ secrets.MATRIX_ROOM }}
channel: "#calamares"
message: "FAIL ${{ github.workflow }} in ${{ github.repository }} ${{ steps.pre_build.outputs.message }}" message: "FAIL ${{ github.workflow }} in ${{ github.repository }} ${{ steps.pre_build.outputs.message }}"

View File

@ -30,7 +30,7 @@ jobs:
- name: "prepare env" - name: "prepare env"
run: | run: |
sudo apt-get update sudo apt-get update
sudo apt-get -y install git-core sudo apt-get -y install git-core jq
sudo apt-get -y install \ sudo apt-get -y install \
build-essential \ build-essential \
cmake \ cmake \
@ -78,18 +78,21 @@ jobs:
working-directory: ${{ env.BUILDDIR }} working-directory: ${{ env.BUILDDIR }}
run: make install VERBOSE=1 run: make install VERBOSE=1
- name: "notify: ok" - name: "notify: ok"
uses: rectalogic/notify-irc@v1
if: ${{ success() && github.repository == 'calamares/calamares' }} if: ${{ success() && github.repository == 'calamares/calamares' }}
uses: ./.github/actions/notify-push
with: with:
server: chat.freenode.net token: ${{ secrets.MATRIX_TOKEN }}
nickname: cala-ci room: ${{ secrets.MATRIX_ROOM }}
channel: "#calamares" message: |
message: "OK ${{ github.workflow }} in ${{ github.repository }} ${{ github.actor }} on ${{ github.event.ref }}\n.. ${{ steps.pre_build.outputs.message }}" OK ${{ github.workflow }} in ${{ github.repository }} by ${{ github.actor }} on ${{ github.event.ref }}
.. ${{ steps.pre_build.outputs.message }}
- name: "notify: fail" - name: "notify: fail"
uses: rectalogic/notify-irc@v1
if: ${{ failure() && github.repository == 'calamares/calamares' }} if: ${{ failure() && github.repository == 'calamares/calamares' }}
uses: ./.github/actions/notify-push
with: with:
server: chat.freenode.net token: ${{ secrets.MATRIX_TOKEN }}
nickname: cala-ci room: ${{ secrets.MATRIX_ROOM }}
channel: "#calamares" message: |
message: "FAIL ${{ github.workflow }} in ${{ github.repository }} ${{ github.actor }} on ${{ github.event.ref }}\n.. ${{ steps.pre_build.outputs.message }}\n.. DIFF ${{ github.event.compare }}" FAIL ${{ github.workflow }} in ${{ github.repository }} by ${{ github.actor }} on ${{ github.event.ref }}
.. ${{ steps.pre_build.outputs.message }}
.. ${{ github.event.compare }}

View File

@ -11,6 +11,7 @@ website will have to do for older versions.
This release contains contributions from (alphabetically by first name): This release contains contributions from (alphabetically by first name):
- Anubhav Choudhary (SoK success!) - Anubhav Choudhary (SoK success!)
- Emmanuel Arias (new contributor! welcome!)
- Erik Dubois - Erik Dubois
- Jerrod Frost (new contributor! welcome!) - Jerrod Frost (new contributor! welcome!)
- Joe Kamprad - Joe Kamprad

View File

@ -34,8 +34,10 @@ Regular Calamares development chit-chat happens on old-school IRC
in Europe, but feel free to idle. **DO NOT** ask-and-leave. Keep in Europe, but feel free to idle. **DO NOT** ask-and-leave. Keep
that chat window open because it can easily take a few hours for that chat window open because it can easily take a few hours for
someone to notice a message. someone to notice a message.
The Matrix room is relatively new.
[![Visit our IRC channel](https://kiwiirc.com/buttons/webchat.freenode.net/calamares.png)](https://webchat.freenode.net/?channel=#calamares?nick=guest) * [![Chat on IRC](https://img.shields.io/badge/IRC-Freenode%20%23calamares-green)](https://webchat.freenode.net/?randomnick=1&channels=%23calamares)
* [![Join us on Matrix](https://img.shields.io/badge/Matrix-%23calamares:kde.org-blue)](https://webchat.kde.org/#/room/%23calamares:kde.org)
## General Guidelines ## General Guidelines

View File

@ -12,8 +12,8 @@
[![GitHub license](https://img.shields.io/github/license/calamares/calamares.svg)](https://github.com/calamares/calamares/blob/calamares/LICENSE) [![GitHub license](https://img.shields.io/github/license/calamares/calamares.svg)](https://github.com/calamares/calamares/blob/calamares/LICENSE)
| [Report a Bug](https://github.com/calamares/calamares/issues/new) | [Translate](https://www.transifex.com/projects/p/calamares/) | [Contribute](CONTRIBUTING.md) | [Freenode (IRC): #calamares](https://webchat.freenode.net/?channel=#calamares?nick=guest) | [Wiki](https://github.com/calamares/calamares/wiki) | | [Report a Bug](https://github.com/calamares/calamares/issues/new) | [Translate](https://www.transifex.com/projects/p/calamares/) | [Contribute](CONTRIBUTING.md) | [IRC: Freenode #calamares](https://webchat.freenode.net/?channel=#calamares?nick=guest) | [Matrix: #calamares:kde.org](https://webchat.kde.org/#/room/%23calamares:kde.org) | [Wiki](https://github.com/calamares/calamares/wiki) |
|:--:|:--:|:--:|:--:|:--:| |:--:|:--:|:--:|:--:|:--:|:--:|
> Calamares is a distribution-independent system installer, with an advanced partitioning > Calamares is a distribution-independent system installer, with an advanced partitioning
@ -29,7 +29,7 @@ a "ready to use" application: distributions apply a huge amount of customisation
and configuration to Calamares, and the target audience for this repository and configuration to Calamares, and the target audience for this repository
is those distributions, and the people who make those Linux distro's. is those distributions, and the people who make those Linux distro's.
Calamares has some [generic user documentation](https://github.com/calamares/calamares/wiki/Use-Guide) Calamares has some [generic user documentation](https://calamares.io/docs/users-guide/)
for end-users, but most of what we have is for distro developers. for end-users, but most of what we have is for distro developers.
## Getting Calamares ## Getting Calamares
@ -47,7 +47,7 @@ The dependencies are explained in [CONTRIBUTING.md](CONTRIBUTING.md).
Calamares welcomes PRs. New issues are welcome, too. Calamares welcomes PRs. New issues are welcome, too.
There are both the Calamares **core** repository (this one), There are both the Calamares **core** repository (this one),
and an *extensions** repository ([Calamares extensions](https://github.com/calamares/calamares-extensions). and an **extensions** repository ([Calamares extensions](https://github.com/calamares/calamares-extensions)).
Contributions to code, modules, documentation, the wiki and the website are all welcome. Contributions to code, modules, documentation, the wiki and the website are all welcome.
There is more information in the [CONTRIBUTING.md](CONTRIBUTING.md) file. There is more information in the [CONTRIBUTING.md](CONTRIBUTING.md) file.
@ -59,6 +59,7 @@ problems or a new feature to discuss.
Regular Calamares development chit-chat happens on old-school IRC Regular Calamares development chit-chat happens on old-school IRC
(no registration required). Responsiveness is best during the day (no registration required). Responsiveness is best during the day
in Europe, but feel free to idle. in Europe, but feel free to idle. The Matrix room is relatively new.
[![Visit our IRC channel](https://kiwiirc.com/buttons/webchat.freenode.net/calamares.png)](https://webchat.freenode.net/?channel=#calamares?nick=guest|) * [![Chat on IRC](https://img.shields.io/badge/IRC-Freenode%20%23calamares-green)](https://webchat.freenode.net/?randomnick=1&channels=%23calamares)
* [![Join us on Matrix](https://img.shields.io/badge/Matrix-%23calamares:kde.org-blue)](https://webchat.kde.org/#/room/%23calamares:kde.org)

View File

@ -22,7 +22,7 @@ export LANG LC_ALL LC_NUMERIC
AS=$( which astyle ) AS=$( which astyle )
CF_VERSIONS="clang-format-7 clang-format-8 clang-format70 clang-format80 clang-format90 clang-format-9.0.1 clang-format" CF_VERSIONS="clang-format-8 clang-format80 clang-format90 clang-format-9.0.1 clang-format"
for _cf in $CF_VERSIONS for _cf in $CF_VERSIONS
do do
# Not an error if this particular clang-format isn't found # Not an error if this particular clang-format isn't found

52
ci/notify.sh Executable file
View File

@ -0,0 +1,52 @@
#! /bin/sh
#
# SPDX-FileCopyrightText: 2021 Adriaan de Groot <groot@kde.org>
# SPDX-License-Identifier: BSD-2-Clause
#
###
#
# Sends a notification to wherever the notifications need to be sent.
#
# Called with the following environment (for tokens / secrets):
# MATRIX_ROOM
# MATRIX_TOKEN
#
# Called with the following arguments (in order):
# - "OK" or "FAIL"
# - github.workflow
# - github.repository
# - github.actor
# - github.event.ref
# - commit-message-summary (produced in the workflow)
# - github.event.compare
#
test -z "$MATRIX_ROOM" && { echo "! No secrets" ; exit 1 ; }
test -z "$MATRIX_TOKEN" && { echo "! No secrets" ; exit 1 ; }
STATUS="$1"
WORKFLOW="$2"
REPOSITORY="$3"
ACTOR="$4"
EVENT="$5"
SUMMARY="$6"
COMPARE="$7"
test "x$STATUS" = "xOK" -o "x$STATUS" = "xFAIL" || { echo "! Invalid status" ; exit 1 ; }
test -z "$WORKFLOW" && { echo "! No event data" ; exit 1 ; }
test -z "$REPOSITORY" && { echo "! No event data" ; exit 1 ; }
test -z "$ACTOR" && { echo "! No event data" ; exit 1 ; }
test -z "$EVENT" && { echo "! No event data" ; exit 1 ; }
# It's ok for summary or the compare URL to be empty
url="https://matrix.org/_matrix/client/r0/rooms/%21${MATRIX_ROOM}/send/m.room.message?access_token=${MATRIX_TOKEN}"
message_data=$(
{
echo "${STATUS} ${WORKFLOW} in ${REPOSITORY} ${ACTOR} on ${EVENT}"
test -n "$SUMMARY" && echo ".. ${SUMMARY}"
test -n "$COMPARE" && echo ".. DIFF ${COMPARE}"
} | jq -Rs '{"msgtype": "m.text", "body":@text}' )
curl -s -XPOST -d "$message_data" "$url" > /dev/null

View File

@ -6,7 +6,7 @@
<message> <message>
<location filename="../src/modules/partition/jobs/AutoMountManagementJob.cpp" line="22"/> <location filename="../src/modules/partition/jobs/AutoMountManagementJob.cpp" line="22"/>
<source>Manage auto-mount settings</source> <source>Manage auto-mount settings</source>
<translation type="unfinished"/> <translation>Manage auto-mount settings</translation>
</message> </message>
</context> </context>
<context> <context>

File diff suppressed because it is too large Load Diff

View File

@ -6,7 +6,7 @@
<message> <message>
<location filename="../src/modules/partition/jobs/AutoMountManagementJob.cpp" line="22"/> <location filename="../src/modules/partition/jobs/AutoMountManagementJob.cpp" line="22"/>
<source>Manage auto-mount settings</source> <source>Manage auto-mount settings</source>
<translation type="unfinished"/> <translation>ניהול הגדרות העיגון האוטומטי</translation>
</message> </message>
</context> </context>
<context> <context>
@ -412,17 +412,17 @@ Link copied to clipboard</source>
<message> <message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="395"/> <location filename="../src/libcalamaresui/ViewManager.cpp" line="395"/>
<source>The installation is complete. Close the installer.</source> <source>The installation is complete. Close the installer.</source>
<translation>תהליך ההתקנה הושלם. נא לסגור את תכנית ההתקנה.</translation> <translation>ההתקנה הושלמה. נא לסגור את אשף ההתקנה.</translation>
</message> </message>
<message> <message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="397"/> <location filename="../src/libcalamaresui/ViewManager.cpp" line="397"/>
<source>Cancel setup without changing the system.</source> <source>Cancel setup without changing the system.</source>
<translation>ביטול ההתקנה ללא שינוי המערכת.</translation> <translation>ביטול ההתקנה ללא ביצוע שינוי במערכת.</translation>
</message> </message>
<message> <message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="398"/> <location filename="../src/libcalamaresui/ViewManager.cpp" line="398"/>
<source>Cancel installation without changing the system.</source> <source>Cancel installation without changing the system.</source>
<translation>ביטול התקנה ללא ביצוע שינוי במערכת.</translation> <translation>ביטול ההתקנה ללא ביצוע שינוי במערכת.</translation>
</message> </message>
<message> <message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="408"/> <location filename="../src/libcalamaresui/ViewManager.cpp" line="408"/>
@ -458,14 +458,14 @@ Link copied to clipboard</source>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="512"/> <location filename="../src/libcalamaresui/ViewManager.cpp" line="512"/>
<source>Do you really want to cancel the current setup process? <source>Do you really want to cancel the current setup process?
The setup program will quit and all changes will be lost.</source> The setup program will quit and all changes will be lost.</source>
<translation>לבטל את תהליך ההתקנה הנוכחי? <translation>האם לבטל את תהליך ההתקנה הנוכחי?
תכנית ההתקנה תצא וכל השינויים יאבדו.</translation> אשף ההתקנה ייסגר וכל השינויים יאבדו.</translation>
</message> </message>
<message> <message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="514"/> <location filename="../src/libcalamaresui/ViewManager.cpp" line="514"/>
<source>Do you really want to cancel the current install process? <source>Do you really want to cancel the current install process?
The installer will quit and all changes will be lost.</source> The installer will quit and all changes will be lost.</source>
<translation>האם אכן ברצונך לבטל את תהליך ההתקנה? <translation>האם לבטל את תהליך ההתקנה הנוכחי?
אשף ההתקנה ייסגר וכל השינויים יאבדו.</translation> אשף ההתקנה ייסגר וכל השינויים יאבדו.</translation>
</message> </message>
</context> </context>
@ -893,7 +893,7 @@ The installer will quit and all changes will be lost.</source>
<message> <message>
<location filename="../src/modules/finished/Config.cpp" line="148"/> <location filename="../src/modules/finished/Config.cpp" line="148"/>
<source>The installation of %1 did not complete successfully.</source> <source>The installation of %1 did not complete successfully.</source>
<translation type="unfinished"/> <translation>ההתקנה של %1 לא הסתיימה בהצלחה.</translation>
</message> </message>
<message> <message>
<location filename="../src/modules/finished/Config.cpp" line="152"/> <location filename="../src/modules/finished/Config.cpp" line="152"/>
@ -2683,7 +2683,7 @@ The installer will quit and all changes will be lost.</source>
<message> <message>
<location filename="../src/modules/partition/gui/PartitionPage.cpp" line="219"/> <location filename="../src/modules/partition/gui/PartitionPage.cpp" line="219"/>
<source>Are you sure you want to create a new partition table on %1?</source> <source>Are you sure you want to create a new partition table on %1?</source>
<translation>ליצור טבלת מחיצות חדשה על %1?</translation> <translation>האם ליצור טבלת מחיצות חדשה על %1?</translation>
</message> </message>
<message> <message>
<location filename="../src/modules/partition/gui/PartitionPage.cpp" line="254"/> <location filename="../src/modules/partition/gui/PartitionPage.cpp" line="254"/>
@ -4012,7 +4012,7 @@ Output:
<message> <message>
<location filename="../src/modules/finishedq/finishedq.qml" line="36"/> <location filename="../src/modules/finishedq/finishedq.qml" line="36"/>
<source>Installation Completed</source> <source>Installation Completed</source>
<translation type="unfinished"/> <translation>ההתקנה הושלמה</translation>
</message> </message>
<message> <message>
<location filename="../src/modules/finishedq/finishedq.qml" line="43"/> <location filename="../src/modules/finishedq/finishedq.qml" line="43"/>
@ -4023,12 +4023,12 @@ Output:
<message> <message>
<location filename="../src/modules/finishedq/finishedq.qml" line="65"/> <location filename="../src/modules/finishedq/finishedq.qml" line="65"/>
<source>Close Installer</source> <source>Close Installer</source>
<translation type="unfinished"/> <translation>סגירת אשף ההתקנה</translation>
</message> </message>
<message> <message>
<location filename="../src/modules/finishedq/finishedq.qml" line="71"/> <location filename="../src/modules/finishedq/finishedq.qml" line="71"/>
<source>Restart System</source> <source>Restart System</source>
<translation type="unfinished"/> <translation>הפעלת המערכת מחדש</translation>
</message> </message>
<message> <message>
<location filename="../src/modules/finishedq/finishedq.qml" line="89"/> <location filename="../src/modules/finishedq/finishedq.qml" line="89"/>

View File

@ -6,7 +6,7 @@
<message> <message>
<location filename="../src/modules/partition/jobs/AutoMountManagementJob.cpp" line="22"/> <location filename="../src/modules/partition/jobs/AutoMountManagementJob.cpp" line="22"/>
<source>Manage auto-mount settings</source> <source>Manage auto-mount settings</source>
<translation type="unfinished"/> <translation>Zarządzaj ustawieniami auto-montowania</translation>
</message> </message>
</context> </context>
<context> <context>
@ -109,22 +109,22 @@
<message> <message>
<location filename="../src/calamares/DebugWindow.ui" line="115"/> <location filename="../src/calamares/DebugWindow.ui" line="115"/>
<source>Reloads the stylesheet from the branding directory.</source> <source>Reloads the stylesheet from the branding directory.</source>
<translation type="unfinished"/> <translation>Ponownie ładuje arkusz stylów z katalogu brandingu. </translation>
</message> </message>
<message> <message>
<location filename="../src/calamares/DebugWindow.ui" line="141"/> <location filename="../src/calamares/DebugWindow.ui" line="141"/>
<source>Uploads the session log to the configured pastebin.</source> <source>Uploads the session log to the configured pastebin.</source>
<translation type="unfinished"/> <translation>Przesyła dziennik sesji do skonfigurowanego pliku na pastebin.</translation>
</message> </message>
<message> <message>
<location filename="../src/calamares/DebugWindow.ui" line="144"/> <location filename="../src/calamares/DebugWindow.ui" line="144"/>
<source>Send Session Log</source> <source>Send Session Log</source>
<translation type="unfinished"/> <translation>Wyślij dziennik sesji</translation>
</message> </message>
<message> <message>
<location filename="../src/calamares/DebugWindow.ui" line="118"/> <location filename="../src/calamares/DebugWindow.ui" line="118"/>
<source>Reload Stylesheet</source> <source>Reload Stylesheet</source>
<translation type="unfinished"/> <translation>Przeładowuje Arkusz Stylów</translation>
</message> </message>
<message> <message>
<location filename="../src/calamares/DebugWindow.ui" line="128"/> <location filename="../src/calamares/DebugWindow.ui" line="128"/>
@ -4253,32 +4253,33 @@ i nie uruchomi się</translation>
<location filename="../src/modules/welcomeq/welcomeq.qml" line="35"/> <location filename="../src/modules/welcomeq/welcomeq.qml" line="35"/>
<source>&lt;h3&gt;Welcome to the %1 &lt;quote&gt;%2&lt;/quote&gt; installer&lt;/h3&gt; <source>&lt;h3&gt;Welcome to the %1 &lt;quote&gt;%2&lt;/quote&gt; installer&lt;/h3&gt;
&lt;p&gt;This program will ask you some questions and set up %1 on your computer.&lt;/p&gt;</source> &lt;p&gt;This program will ask you some questions and set up %1 on your computer.&lt;/p&gt;</source>
<translation type="unfinished"/> <translation>&lt;h3&gt;Witaj w instalatorze %1&lt;quote&gt;%2&lt;/quote&gt;&lt;/h3&gt;
&lt;p&gt;Ten program zapyta cię o kilka rzeczy i ustawi %1 na twoim komputerze.&lt;/p&gt; </translation>
</message> </message>
<message> <message>
<location filename="../src/modules/welcomeq/welcomeq.qml" line="66"/> <location filename="../src/modules/welcomeq/welcomeq.qml" line="66"/>
<source>About</source> <source>About</source>
<translation type="unfinished"/> <translation>O nas</translation>
</message> </message>
<message> <message>
<location filename="../src/modules/welcomeq/welcomeq.qml" line="80"/> <location filename="../src/modules/welcomeq/welcomeq.qml" line="80"/>
<source>Support</source> <source>Support</source>
<translation type="unfinished"/> <translation>Wsparcie</translation>
</message> </message>
<message> <message>
<location filename="../src/modules/welcomeq/welcomeq.qml" line="91"/> <location filename="../src/modules/welcomeq/welcomeq.qml" line="91"/>
<source>Known issues</source> <source>Known issues</source>
<translation type="unfinished"/> <translation>Znane problemy</translation>
</message> </message>
<message> <message>
<location filename="../src/modules/welcomeq/welcomeq.qml" line="102"/> <location filename="../src/modules/welcomeq/welcomeq.qml" line="102"/>
<source>Release notes</source> <source>Release notes</source>
<translation type="unfinished"/> <translation>Informacje o wydaniu</translation>
</message> </message>
<message> <message>
<location filename="../src/modules/welcomeq/welcomeq.qml" line="114"/> <location filename="../src/modules/welcomeq/welcomeq.qml" line="114"/>
<source>Donate</source> <source>Donate</source>
<translation type="unfinished"/> <translation>Dotacje</translation>
</message> </message>
</context> </context>
</TS> </TS>

4279
lang/calamares_ru_RU.ts Normal file

File diff suppressed because it is too large Load Diff

View File

@ -312,18 +312,18 @@
<location filename="../src/libcalamaresui/ViewManager.cpp" line="178"/> <location filename="../src/libcalamaresui/ViewManager.cpp" line="178"/>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="518"/> <location filename="../src/libcalamaresui/ViewManager.cpp" line="518"/>
<source>&amp;Yes</source> <source>&amp;Yes</source>
<translation>no</translation> <translation>Án&amp;o</translation>
</message> </message>
<message> <message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="179"/> <location filename="../src/libcalamaresui/ViewManager.cpp" line="179"/>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="519"/> <location filename="../src/libcalamaresui/ViewManager.cpp" line="519"/>
<source>&amp;No</source> <source>&amp;No</source>
<translation>_Nie</translation> <translation>&amp;Nie</translation>
</message> </message>
<message> <message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="185"/> <location filename="../src/libcalamaresui/ViewManager.cpp" line="185"/>
<source>&amp;Close</source> <source>&amp;Close</source>
<translation>_Zavrieť</translation> <translation>&amp;Zavrieť</translation>
</message> </message>
<message> <message>
<location filename="../src/libcalamaresui/utils/Paste.cpp" line="160"/> <location filename="../src/libcalamaresui/utils/Paste.cpp" line="160"/>
@ -402,7 +402,7 @@ Link copied to clipboard</source>
<message> <message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="392"/> <location filename="../src/libcalamaresui/ViewManager.cpp" line="392"/>
<source>&amp;Install</source> <source>&amp;Install</source>
<translation>_Inštalovať</translation> <translation>&amp;Inštalovať</translation>
</message> </message>
<message> <message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="394"/> <location filename="../src/libcalamaresui/ViewManager.cpp" line="394"/>
@ -437,7 +437,7 @@ Link copied to clipboard</source>
<message> <message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="419"/> <location filename="../src/libcalamaresui/ViewManager.cpp" line="419"/>
<source>&amp;Done</source> <source>&amp;Done</source>
<translation>_Dokončiť</translation> <translation>&amp;Dokončiť</translation>
</message> </message>
<message> <message>
<location filename="../src/libcalamaresui/ViewManager.cpp" line="438"/> <location filename="../src/libcalamaresui/ViewManager.cpp" line="438"/>

View File

@ -3847,7 +3847,7 @@ Installationen kan inte fortsätta.&lt;/p&gt;</translation>
<message> <message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="140"/> <location filename="../src/modules/welcome/WelcomePage.ui" line="140"/>
<source>&amp;About</source> <source>&amp;About</source>
<translation>Om, &amp;A</translation> <translation>&amp;Om</translation>
</message> </message>
<message> <message>
<location filename="../src/modules/welcome/WelcomePage.ui" line="150"/> <location filename="../src/modules/welcome/WelcomePage.ui" line="150"/>

View File

@ -6,7 +6,7 @@
<message> <message>
<location filename="../src/modules/partition/jobs/AutoMountManagementJob.cpp" line="22"/> <location filename="../src/modules/partition/jobs/AutoMountManagementJob.cpp" line="22"/>
<source>Manage auto-mount settings</source> <source>Manage auto-mount settings</source>
<translation type="unfinished"/> <translation> </translation>
</message> </message>
</context> </context>
<context> <context>
@ -120,7 +120,7 @@
<message> <message>
<location filename="../src/calamares/DebugWindow.ui" line="144"/> <location filename="../src/calamares/DebugWindow.ui" line="144"/>
<source>Send Session Log</source> <source>Send Session Log</source>
<translation type="unfinished"/> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/calamares/DebugWindow.ui" line="118"/> <location filename="../src/calamares/DebugWindow.ui" line="118"/>
@ -1403,7 +1403,7 @@ The installer will quit and all changes will be lost.</source>
<message> <message>
<location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="262"/> <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="262"/>
<source>Set up %3 partition &lt;strong&gt;%1&lt;/strong&gt; with mount point &lt;strong&gt;%2&lt;/strong&gt;%4.</source> <source>Set up %3 partition &lt;strong&gt;%1&lt;/strong&gt; with mount point &lt;strong&gt;%2&lt;/strong&gt;%4.</source>
<translation type="unfinished"/> <translation>%3 </translation>
</message> </message>
<message> <message>
<location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="243"/> <location filename="../src/modules/partition/jobs/FillGlobalStorageJob.cpp" line="243"/>
@ -3985,29 +3985,31 @@ Output:
<message> <message>
<location filename="../src/modules/finishedq/finishedq.qml" line="36"/> <location filename="../src/modules/finishedq/finishedq.qml" line="36"/>
<source>Installation Completed</source> <source>Installation Completed</source>
<translation type="unfinished"/> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/modules/finishedq/finishedq.qml" line="43"/> <location filename="../src/modules/finishedq/finishedq.qml" line="43"/>
<source>%1 has been installed on your computer.&lt;br/&gt; <source>%1 has been installed on your computer.&lt;br/&gt;
You may now restart into your new system, or continue using the Live environment.</source> You may now restart into your new system, or continue using the Live environment.</source>
<translation type="unfinished"/> <translation>%1 &lt;br/&gt;
使 Live </translation>
</message> </message>
<message> <message>
<location filename="../src/modules/finishedq/finishedq.qml" line="65"/> <location filename="../src/modules/finishedq/finishedq.qml" line="65"/>
<source>Close Installer</source> <source>Close Installer</source>
<translation type="unfinished"/> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/modules/finishedq/finishedq.qml" line="71"/> <location filename="../src/modules/finishedq/finishedq.qml" line="71"/>
<source>Restart System</source> <source>Restart System</source>
<translation type="unfinished"/> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/modules/finishedq/finishedq.qml" line="89"/> <location filename="../src/modules/finishedq/finishedq.qml" line="89"/>
<source>&lt;p&gt;A full log of the install is available as installation.log in the home directory of the Live user.&lt;br/&gt; <source>&lt;p&gt;A full log of the install is available as installation.log in the home directory of the Live user.&lt;br/&gt;
This log is copied to /var/log/installation.log of the target system.&lt;/p&gt;</source> This log is copied to /var/log/installation.log of the target system.&lt;/p&gt;</source>
<translation type="unfinished"/> <translation>
/var/log/installation.log</translation>
</message> </message>
</context> </context>
<context> <context>

View File

@ -13,6 +13,7 @@
# Seboss666 <sebastien_verdet@seboss666.info>, 2019 # Seboss666 <sebastien_verdet@seboss666.info>, 2019
# Florian B <florianb3522@gmail.com>, 2019 # Florian B <florianb3522@gmail.com>, 2019
# Arnaud Ferraris <arnaud.ferraris@gmail.com>, 2019 # Arnaud Ferraris <arnaud.ferraris@gmail.com>, 2019
# roxfr <roxfr@outlook.fr>, 2021
# #
#, fuzzy #, fuzzy
msgid "" msgid ""
@ -21,7 +22,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-03-19 14:27+0100\n" "POT-Creation-Date: 2021-03-19 14:27+0100\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n"
"Last-Translator: Arnaud Ferraris <arnaud.ferraris@gmail.com>, 2019\n" "Last-Translator: roxfr <roxfr@outlook.fr>, 2021\n"
"Language-Team: French (https://www.transifex.com/calamares/teams/20061/fr/)\n" "Language-Team: French (https://www.transifex.com/calamares/teams/20061/fr/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@ -112,11 +113,11 @@ msgstr "rsync a échoué avec le code d'erreur {}."
#: src/modules/unpackfs/main.py:300 #: src/modules/unpackfs/main.py:300
msgid "Unpacking image {}/{}, file {}/{}" msgid "Unpacking image {}/{}, file {}/{}"
msgstr "" msgstr "Décompression de l'image {}/{}, fichier {}/{}"
#: src/modules/unpackfs/main.py:315 #: src/modules/unpackfs/main.py:315
msgid "Starting to unpack {}" msgid "Starting to unpack {}"
msgstr "" msgstr "Commencer à décompresser {}"
#: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464
msgid "Failed to unpack image \"{}\"" msgid "Failed to unpack image \"{}\""
@ -146,6 +147,8 @@ msgstr "Mauvaise configuration unsquash"
#: src/modules/unpackfs/main.py:455 #: src/modules/unpackfs/main.py:455
msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel"
msgstr "" msgstr ""
"Le système de fichiers pour \"{}\" ({}) n'est pas pris en charge par votre "
"noyau actuel"
#: src/modules/unpackfs/main.py:459 #: src/modules/unpackfs/main.py:459
msgid "The source filesystem \"{}\" does not exist" msgid "The source filesystem \"{}\" does not exist"
@ -214,6 +217,8 @@ msgid ""
"The displaymanagers list is empty or undefined in both globalstorage and " "The displaymanagers list is empty or undefined in both globalstorage and "
"displaymanager.conf." "displaymanager.conf."
msgstr "" msgstr ""
"La liste des gestionnaires d'affichage est vide ou indéfinie à la fois dans "
"globalstorage et displaymanager.conf."
#: src/modules/displaymanager/main.py:977 #: src/modules/displaymanager/main.py:977
msgid "Display manager configuration was incomplete" msgid "Display manager configuration was incomplete"
@ -330,11 +335,11 @@ msgstr "Configuration de l'horloge matériel."
#: src/modules/mkinitfs/main.py:27 #: src/modules/mkinitfs/main.py:27
msgid "Creating initramfs with mkinitfs." msgid "Creating initramfs with mkinitfs."
msgstr "" msgstr "Création d'initramfs avec mkinitfs."
#: src/modules/mkinitfs/main.py:49 #: src/modules/mkinitfs/main.py:49
msgid "Failed to run mkinitfs on the target" msgid "Failed to run mkinitfs on the target"
msgstr "" msgstr "Échec de l'exécution de mkinitfs sur la cible"
#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50
msgid "The exit code was {}" msgid "The exit code was {}"
@ -362,12 +367,12 @@ msgstr "Écriture du fstab."
#: src/modules/dummypython/main.py:35 #: src/modules/dummypython/main.py:35
msgid "Dummy python job." msgid "Dummy python job."
msgstr "Tâche factice python" msgstr "Tâche factice de python"
#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93
#: src/modules/dummypython/main.py:94 #: src/modules/dummypython/main.py:94
msgid "Dummy python step {}" msgid "Dummy python step {}"
msgstr "Étape factice python {}" msgstr "Étape factice de python {}"
#: src/modules/localecfg/main.py:30 #: src/modules/localecfg/main.py:30
msgid "Configuring locales." msgid "Configuring locales."
@ -375,4 +380,4 @@ msgstr "Configuration des locales."
#: src/modules/networkcfg/main.py:28 #: src/modules/networkcfg/main.py:28
msgid "Saving network configuration." msgid "Saving network configuration."
msgstr "Sauvegarde des configuration réseau." msgstr "Sauvegarde de la configuration du réseau en cours."

View File

@ -5,7 +5,7 @@
# #
# Translators: # Translators:
# Eli Shleifer <eligator@gmail.com>, 2017 # Eli Shleifer <eligator@gmail.com>, 2017
# Omer I.S. <omeritzicschwartz@gmail.com>, 2020 # Omeritzics Games <omeritzicschwartz@gmail.com>, 2020
# Yaron Shahrabani <sh.yaron@gmail.com>, 2020 # Yaron Shahrabani <sh.yaron@gmail.com>, 2020
# #
#, fuzzy #, fuzzy

View File

@ -7,6 +7,7 @@
# Pierfrancesco Passerini <p.passerini@gmail.com>, 2019 # Pierfrancesco Passerini <p.passerini@gmail.com>, 2019
# Pietro F. Fontana, 2020 # Pietro F. Fontana, 2020
# Saverio <saverio.brancaccio@gmail.com>, 2020 # Saverio <saverio.brancaccio@gmail.com>, 2020
# Giuseppe Pignataro <rogepix@gmail.com>, 2021
# #
#, fuzzy #, fuzzy
msgid "" msgid ""
@ -15,7 +16,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-03-19 14:27+0100\n" "POT-Creation-Date: 2021-03-19 14:27+0100\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n"
"Last-Translator: Saverio <saverio.brancaccio@gmail.com>, 2020\n" "Last-Translator: Giuseppe Pignataro <rogepix@gmail.com>, 2021\n"
"Language-Team: Italian (Italy) (https://www.transifex.com/calamares/teams/20061/it_IT/)\n" "Language-Team: Italian (Italy) (https://www.transifex.com/calamares/teams/20061/it_IT/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@ -209,6 +210,8 @@ msgid ""
"The displaymanagers list is empty or undefined in both globalstorage and " "The displaymanagers list is empty or undefined in both globalstorage and "
"displaymanager.conf." "displaymanager.conf."
msgstr "" msgstr ""
"L'elenco dei display manager è vuota o non definita sia in globalstorage che"
" in displaymanager.conf."
#: src/modules/displaymanager/main.py:977 #: src/modules/displaymanager/main.py:977
msgid "Display manager configuration was incomplete" msgid "Display manager configuration was incomplete"
@ -321,11 +324,11 @@ msgstr "Impostazione del clock hardware."
#: src/modules/mkinitfs/main.py:27 #: src/modules/mkinitfs/main.py:27
msgid "Creating initramfs with mkinitfs." msgid "Creating initramfs with mkinitfs."
msgstr "" msgstr "Sto creando initramfs con mkinitfs."
#: src/modules/mkinitfs/main.py:49 #: src/modules/mkinitfs/main.py:49
msgid "Failed to run mkinitfs on the target" msgid "Failed to run mkinitfs on the target"
msgstr "" msgstr "Impossibile eseguire mkinitfs sulla destinazione"
#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50
msgid "The exit code was {}" msgid "The exit code was {}"

View File

@ -5,7 +5,7 @@
# #
# Translators: # Translators:
# Ji-Hyeon Gim <potatogim@potatogim.net>, 2018 # Ji-Hyeon Gim <potatogim@potatogim.net>, 2018
# Bruce Lee <daemul72@gmail.com>, 2020 # Jung Hee Lee <daemul72@gmail.com>, 2020
# #
#, fuzzy #, fuzzy
msgid "" msgid ""
@ -14,7 +14,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-03-19 14:27+0100\n" "POT-Creation-Date: 2021-03-19 14:27+0100\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n"
"Last-Translator: Bruce Lee <daemul72@gmail.com>, 2020\n" "Last-Translator: Jung Hee Lee <daemul72@gmail.com>, 2020\n"
"Language-Team: Korean (https://www.transifex.com/calamares/teams/20061/ko/)\n" "Language-Team: Korean (https://www.transifex.com/calamares/teams/20061/ko/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"

View File

@ -5,7 +5,7 @@
# #
# Translators: # Translators:
# André Marcelo Alvarenga <alvarenga@kde.org>, 2020 # André Marcelo Alvarenga <alvarenga@kde.org>, 2020
# Guilherme, 2020 # Guilherme Marçal Silva, 2020
# #
#, fuzzy #, fuzzy
msgid "" msgid ""
@ -14,7 +14,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-03-19 14:27+0100\n" "POT-Creation-Date: 2021-03-19 14:27+0100\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n"
"Last-Translator: Guilherme, 2020\n" "Last-Translator: Guilherme Marçal Silva, 2020\n"
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/calamares/teams/20061/pt_BR/)\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/calamares/teams/20061/pt_BR/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"

View File

@ -0,0 +1,351 @@
# 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: 2021-03-19 14:27+0100\n"
"PO-Revision-Date: 2017-08-09 10:34+0000\n"
"Language-Team: Russian (Russia) (https://www.transifex.com/calamares/teams/20061/ru_RU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru_RU\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
#: src/modules/grubcfg/main.py:28
msgid "Configure GRUB."
msgstr ""
#: src/modules/mount/main.py:30
msgid "Mounting partitions."
msgstr ""
#: src/modules/mount/main.py:125 src/modules/initcpiocfg/main.py:198
#: src/modules/initcpiocfg/main.py:202
#: src/modules/luksopenswaphookcfg/main.py:86
#: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164
#: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89
#: src/modules/openrcdmcryptcfg/main.py:72
#: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355
#: src/modules/fstab/main.py:361 src/modules/localecfg/main.py:135
#: src/modules/networkcfg/main.py:39
msgid "Configuration Error"
msgstr ""
#: src/modules/mount/main.py:126 src/modules/initcpiocfg/main.py:199
#: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165
#: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73
#: src/modules/fstab/main.py:356
msgid "No partitions are defined for <pre>{!s}</pre> to use."
msgstr ""
#: src/modules/services-systemd/main.py:26
msgid "Configure systemd services"
msgstr ""
#: src/modules/services-systemd/main.py:59
#: src/modules/services-openrc/main.py:93
msgid "Cannot modify service"
msgstr ""
#: src/modules/services-systemd/main.py:60
msgid ""
"<code>systemctl {arg!s}</code> call in chroot returned error code {num!s}."
msgstr ""
#: src/modules/services-systemd/main.py:63
#: src/modules/services-systemd/main.py:67
msgid "Cannot enable systemd service <code>{name!s}</code>."
msgstr ""
#: src/modules/services-systemd/main.py:65
msgid "Cannot enable systemd target <code>{name!s}</code>."
msgstr ""
#: src/modules/services-systemd/main.py:69
msgid "Cannot disable systemd target <code>{name!s}</code>."
msgstr ""
#: src/modules/services-systemd/main.py:71
msgid "Cannot mask systemd unit <code>{name!s}</code>."
msgstr ""
#: src/modules/services-systemd/main.py:73
msgid ""
"Unknown systemd commands <code>{command!s}</code> and "
"<code>{suffix!s}</code> for unit {name!s}."
msgstr ""
#: src/modules/umount/main.py:31
msgid "Unmount file systems."
msgstr ""
#: src/modules/unpackfs/main.py:35
msgid "Filling up filesystems."
msgstr ""
#: src/modules/unpackfs/main.py:255
msgid "rsync failed with error code {}."
msgstr ""
#: src/modules/unpackfs/main.py:300
msgid "Unpacking image {}/{}, file {}/{}"
msgstr ""
#: src/modules/unpackfs/main.py:315
msgid "Starting to unpack {}"
msgstr ""
#: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464
msgid "Failed to unpack image \"{}\""
msgstr ""
#: src/modules/unpackfs/main.py:431
msgid "No mount point for root partition"
msgstr ""
#: src/modules/unpackfs/main.py:432
msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing"
msgstr ""
#: src/modules/unpackfs/main.py:437
msgid "Bad mount point for root partition"
msgstr ""
#: src/modules/unpackfs/main.py:438
msgid "rootMountPoint is \"{}\", which does not exist, doing nothing"
msgstr ""
#: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458
#: src/modules/unpackfs/main.py:478
msgid "Bad unsquash configuration"
msgstr ""
#: src/modules/unpackfs/main.py:455
msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel"
msgstr ""
#: src/modules/unpackfs/main.py:459
msgid "The source filesystem \"{}\" does not exist"
msgstr ""
#: src/modules/unpackfs/main.py:465
msgid ""
"Failed to find unsquashfs, make sure you have the squashfs-tools package "
"installed"
msgstr ""
#: src/modules/unpackfs/main.py:479
msgid "The destination \"{}\" in the target system is not a directory"
msgstr ""
#: src/modules/displaymanager/main.py:514
msgid "Cannot write KDM configuration file"
msgstr ""
#: src/modules/displaymanager/main.py:515
msgid "KDM config file {!s} does not exist"
msgstr ""
#: src/modules/displaymanager/main.py:576
msgid "Cannot write LXDM configuration file"
msgstr ""
#: src/modules/displaymanager/main.py:577
msgid "LXDM config file {!s} does not exist"
msgstr ""
#: src/modules/displaymanager/main.py:660
msgid "Cannot write LightDM configuration file"
msgstr ""
#: src/modules/displaymanager/main.py:661
msgid "LightDM config file {!s} does not exist"
msgstr ""
#: src/modules/displaymanager/main.py:735
msgid "Cannot configure LightDM"
msgstr ""
#: src/modules/displaymanager/main.py:736
msgid "No LightDM greeter installed."
msgstr ""
#: src/modules/displaymanager/main.py:767
msgid "Cannot write SLIM configuration file"
msgstr ""
#: src/modules/displaymanager/main.py:768
msgid "SLIM config file {!s} does not exist"
msgstr ""
#: src/modules/displaymanager/main.py:894
msgid "No display managers selected for the displaymanager module."
msgstr ""
#: src/modules/displaymanager/main.py:895
msgid ""
"The displaymanagers list is empty or undefined in both globalstorage and "
"displaymanager.conf."
msgstr ""
#: src/modules/displaymanager/main.py:977
msgid "Display manager configuration was incomplete"
msgstr ""
#: src/modules/initcpiocfg/main.py:28
msgid "Configuring mkinitcpio."
msgstr ""
#: src/modules/initcpiocfg/main.py:203
#: src/modules/luksopenswaphookcfg/main.py:91
#: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77
#: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136
#: src/modules/networkcfg/main.py:40
msgid "No root mount point is given for <pre>{!s}</pre> to use."
msgstr ""
#: src/modules/luksopenswaphookcfg/main.py:26
msgid "Configuring encrypted swap."
msgstr ""
#: src/modules/rawfs/main.py:26
msgid "Installing data."
msgstr ""
#: src/modules/services-openrc/main.py:29
msgid "Configure OpenRC services"
msgstr ""
#: src/modules/services-openrc/main.py:57
msgid "Cannot add service {name!s} to run-level {level!s}."
msgstr ""
#: src/modules/services-openrc/main.py:59
msgid "Cannot remove service {name!s} from run-level {level!s}."
msgstr ""
#: src/modules/services-openrc/main.py:61
msgid ""
"Unknown service-action <code>{arg!s}</code> for service {name!s} in run-"
"level {level!s}."
msgstr ""
#: src/modules/services-openrc/main.py:94
msgid ""
"<code>rc-update {arg!s}</code> call in chroot returned error code {num!s}."
msgstr ""
#: src/modules/services-openrc/main.py:101
msgid "Target runlevel does not exist"
msgstr ""
#: src/modules/services-openrc/main.py:102
msgid ""
"The path for runlevel {level!s} is <code>{path!s}</code>, which does not "
"exist."
msgstr ""
#: src/modules/services-openrc/main.py:110
msgid "Target service does not exist"
msgstr ""
#: src/modules/services-openrc/main.py:111
msgid ""
"The path for service {name!s} is <code>{path!s}</code>, which does not "
"exist."
msgstr ""
#: src/modules/plymouthcfg/main.py:27
msgid "Configure Plymouth theme"
msgstr ""
#: src/modules/packages/main.py:50 src/modules/packages/main.py:59
#: src/modules/packages/main.py:69
msgid "Install packages."
msgstr ""
#: src/modules/packages/main.py:57
#, python-format
msgid "Processing packages (%(count)d / %(total)d)"
msgstr ""
#: src/modules/packages/main.py:62
#, python-format
msgid "Installing one package."
msgid_plural "Installing %(num)d packages."
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
#: src/modules/packages/main.py:65
#, python-format
msgid "Removing one package."
msgid_plural "Removing %(num)d packages."
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
#: src/modules/bootloader/main.py:43
msgid "Install bootloader."
msgstr ""
#: src/modules/hwclock/main.py:26
msgid "Setting hardware clock."
msgstr ""
#: src/modules/mkinitfs/main.py:27
msgid "Creating initramfs with mkinitfs."
msgstr ""
#: src/modules/mkinitfs/main.py:49
msgid "Failed to run mkinitfs on the target"
msgstr ""
#: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50
msgid "The exit code was {}"
msgstr ""
#: src/modules/dracut/main.py:27
msgid "Creating initramfs with dracut."
msgstr ""
#: src/modules/dracut/main.py:49
msgid "Failed to run dracut on the target"
msgstr ""
#: src/modules/initramfscfg/main.py:32
msgid "Configuring initramfs."
msgstr ""
#: src/modules/openrcdmcryptcfg/main.py:26
msgid "Configuring OpenRC dmcrypt service."
msgstr ""
#: src/modules/fstab/main.py:29
msgid "Writing fstab."
msgstr ""
#: src/modules/dummypython/main.py:35
msgid "Dummy python job."
msgstr ""
#: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93
#: src/modules/dummypython/main.py:94
msgid "Dummy python step {}"
msgstr ""
#: src/modules/localecfg/main.py:30
msgid "Configuring locales."
msgstr ""
#: src/modules/networkcfg/main.py:28
msgid "Saving network configuration."
msgstr ""

View File

@ -35,7 +35,8 @@ public:
NoError = 0, NoError = 0,
GenericError = -1, GenericError = -1,
PythonUncaughtException = 1, PythonUncaughtException = 1,
InvalidConfiguration = 2 InvalidConfiguration = 2,
MissingRequirements = 3,
}; };
// Can't copy, but you can keep a temporary // Can't copy, but you can keep a temporary

View File

@ -474,6 +474,14 @@ def run():
libcalamares.utils.warning( "EFI system, but nothing mounted on {!s}".format(efi_system_partition) ) libcalamares.utils.warning( "EFI system, but nothing mounted on {!s}".format(efi_system_partition) )
return None return None
prepare_bootloader(fw_type) try:
prepare_bootloader(fw_type)
except subprocess.CalledProcessError as e:
libcalamares.utils.warning(str(e))
libcalamares.utils.debug("stdout:" + str(e.stdout))
libcalamares.utils.debug("stderr:" + str(e.stderr))
return (_("Bootloader installation error"),
_("The bootloader could not be installed. The installation command <pre>{!s}</pre> returned error code {!s}.")
.format(e.cmd, e.returncode))
return None return None

View File

@ -197,6 +197,8 @@ desktop_environments = [
DesktopEnvironment('/usr/bin/icewm-session', 'icewm-session'), DesktopEnvironment('/usr/bin/icewm-session', 'icewm-session'),
DesktopEnvironment('/usr/bin/fvwm3', 'fvwm3'), DesktopEnvironment('/usr/bin/fvwm3', 'fvwm3'),
DesktopEnvironment('/usr/bin/sway', 'sway'), DesktopEnvironment('/usr/bin/sway', 'sway'),
DesktopEnvironment('/usr/bin/ukui-session', 'ukui'),
DesktopEnvironment('/usr/bin/cutefish-session', 'cutefish-xsession'),
] ]

View File

@ -372,15 +372,23 @@ def run():
root_btrfs = (root_partitions[0] == "btrfs") if root_partitions else False root_btrfs = (root_partitions[0] == "btrfs") if root_partitions else False
if root_btrfs: if root_btrfs:
partitions.append( dict(fs="swap", mountPoint=None, claimed=True, device="/swap/swapfile", uuid=None) ) partitions.append( dict(fs="swap", mountPoint=None, claimed=True, device="/swap/swapfile", uuid=None) )
else: else:
partitions.append( dict(fs="swap", mountPoint=None, claimed=True, device="/swapfile", uuid=None) ) partitions.append( dict(fs="swap", mountPoint=None, claimed=True, device="/swapfile", uuid=None) )
else: else:
swap_choice = None swap_choice = None
libcalamares.job.setprogress(0.1) libcalamares.job.setprogress(0.1)
mount_options = conf["mountOptions"] mount_options = conf.get("mountOptions", {})
ssd_extra_mount_options = conf.get("ssdExtraMountOptions", {}) ssd_extra_mount_options = conf.get("ssdExtraMountOptions", {})
crypttab_options = conf.get("crypttabOptions", "luks") crypttab_options = conf.get("crypttabOptions", "luks")
# We rely on mount_options having a default; if there wasn't one,
# bail out with a meaningful error.
if not mount_options:
return (_("Configuration Error"),
_("No <pre>{!s}</pre> configuration is given for <pre>{!s}</pre> to use.")
.format("mountOptions", "fstab"))
generator = FstabGenerator(partitions, generator = FstabGenerator(partitions,
root_mount_point, root_mount_point,
mount_options, mount_options,

View File

@ -59,7 +59,7 @@ def run():
continue continue
try: try:
shutil.copy(source_network, target_network) shutil.copy(source_network, target_network, follow_symlinks=False)
except FileNotFoundError: except FileNotFoundError:
libcalamares.utils.debug( libcalamares.utils.debug(
"Can't copy network configuration files in " "Can't copy network configuration files in "
@ -80,7 +80,7 @@ def run():
) )
try: try:
shutil.copy(source_resolv, target_resolv) shutil.copy(source_resolv, target_resolv, follow_symlinks=False)
except Exception as err: except Exception as err:
libcalamares.utils.debug( libcalamares.utils.debug(
"Can't copy resolv.conf from {}: {}".format(source_resolv, err) "Can't copy resolv.conf from {}: {}".format(source_resolv, err)

View File

@ -579,11 +579,27 @@ def run():
update_db = libcalamares.job.configuration.get("update_db", False) update_db = libcalamares.job.configuration.get("update_db", False)
if update_db and libcalamares.globalstorage.value("hasInternet"): if update_db and libcalamares.globalstorage.value("hasInternet"):
pkgman.update_db() try:
pkgman.update_db()
except subprocess.CalledProcessError as e:
libcalamares.utils.warning(str(e))
libcalamares.utils.debug("stdout:" + str(e.stdout))
libcalamares.utils.debug("stderr:" + str(e.stderr))
return (_("Package Manager error"),
_("The package manager could not prepare updates. The command <pre>{!s}</pre> returned error code {!s}.")
.format(e.cmd, e.returncode))
update_system = libcalamares.job.configuration.get("update_system", False) update_system = libcalamares.job.configuration.get("update_system", False)
if update_system and libcalamares.globalstorage.value("hasInternet"): if update_system and libcalamares.globalstorage.value("hasInternet"):
pkgman.update_system() try:
pkgman.update_system()
except subprocess.CalledProcessError as e:
libcalamares.utils.warning(str(e))
libcalamares.utils.debug("stdout:" + str(e.stdout))
libcalamares.utils.debug("stderr:" + str(e.stderr))
return (_("Package Manager error"),
_("The package manager could not update the system. The command <pre>{!s}</pre> returned error code {!s}.")
.format(e.cmd, e.returncode))
operations = libcalamares.job.configuration.get("operations", []) operations = libcalamares.job.configuration.get("operations", [])
if libcalamares.globalstorage.contains("packageOperations"): if libcalamares.globalstorage.contains("packageOperations"):
@ -603,11 +619,18 @@ def run():
for entry in operations: for entry in operations:
group_packages = 0 group_packages = 0
libcalamares.utils.debug(pretty_name()) libcalamares.utils.debug(pretty_name())
run_operations(pkgman, entry) try:
run_operations(pkgman, entry)
except subprocess.CalledProcessError as e:
libcalamares.utils.warning(str(e))
libcalamares.utils.debug("stdout:" + str(e.stdout))
libcalamares.utils.debug("stderr:" + str(e.stderr))
return (_("Package Manager error"),
_("The package manager could make changes to the installed system. The command <pre>{!s}</pre> returned error code {!s}.")
.format(e.cmd, e.returncode))
mode_packages = None mode_packages = None
libcalamares.job.setprogress(1.0) libcalamares.job.setprogress(1.0)
libcalamares.utils.debug(pretty_name())
return None return None

View File

@ -18,6 +18,7 @@
// KPMcore // KPMcore
#include <kpmcore/core/device.h> #include <kpmcore/core/device.h>
#include <kpmcore/core/partition.h>
#include <QComboBox> #include <QComboBox>
@ -148,28 +149,39 @@ BootLoaderModel::data( const QModelIndex& index, int role ) const
return QStandardItemModel::data( index, role ); return QStandardItemModel::data( index, role );
} }
namespace Calamares std::pair< int, Device* >
BootLoaderModel::findBootLoader( const QString& path ) const
{ {
int int r = 0;
findBootloader( const QAbstractItemModel* model, const QString& path ) for ( Device* d : m_devices )
{
for ( int i = 0; i < model->rowCount(); ++i )
{ {
const auto index = model->index( i, 0, QModelIndex() ); if ( d && d->deviceNode() == path )
if ( !index.isValid() )
{ {
continue; return std::make_pair( r, d );
}
QVariant var = model->data( index, BootLoaderModel::BootLoaderPathRole );
if ( var.isValid() && var.toString() == path )
{
return i;
} }
r++;
} }
return -1; Partition* partition = KPMHelpers::findPartitionByMountPoint( m_devices, path );
if ( partition )
{
const QString partition_device_path = partition->deviceNode();
r = 0;
for ( Device* d : m_devices )
{
if ( d && d->deviceNode() == partition_device_path )
{
return std::make_pair( r, d );
}
r++;
}
}
return std::make_pair( -1, nullptr );
} }
namespace Calamares
{
void void
restoreSelectedBootLoader( QComboBox& combo, const QString& path ) restoreSelectedBootLoader( QComboBox& combo, const QString& path )
{ {
@ -180,12 +192,16 @@ restoreSelectedBootLoader( QComboBox& combo, const QString& path )
return; return;
} }
int r = -1;
if ( path.isEmpty() ) if ( path.isEmpty() )
{ {
cDebug() << "No path to restore, choosing default";
combo.setCurrentIndex( 0 ); combo.setCurrentIndex( 0 );
return;
} }
else if ( ( r = findBootloader( model, path ) ) >= 0 )
const BootLoaderModel* bmodel = qobject_cast< const BootLoaderModel* >( model );
int r = bmodel ? bmodel->findBootLoader( path ).first : -1;
if ( r >= 0 )
{ {
combo.setCurrentIndex( r ); combo.setCurrentIndex( r );
} }

View File

@ -26,6 +26,8 @@ class BootLoaderModel : public QStandardItemModel
{ {
Q_OBJECT Q_OBJECT
public: public:
using DeviceList = QList< Device* >;
enum enum
{ {
BootLoaderPathRole = Qt::UserRole + 1, BootLoaderPathRole = Qt::UserRole + 1,
@ -39,13 +41,19 @@ public:
* Init the model with the list of devices. Does *not* take ownership of the * Init the model with the list of devices. Does *not* take ownership of the
* devices. * devices.
*/ */
void init( const QList< Device* >& devices ); void init( const DeviceList& devices );
void update(); void update();
QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const override; QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const override;
using DeviceList = QList< Device* >; /** @brief Looks up a boot-loader by device-name @p path (e.g. /dev/sda)
*
* Returns a row number (index) in the model and a Device*: if there **is** a
* device for the given @p path, index will be in range of the model and
* Device* non-null. Returns (-1, nullptr) otherwise.
*/
std::pair< int, Device* > findBootLoader( const QString& path ) const;
private: private:
DeviceList m_devices; DeviceList m_devices;
@ -57,13 +65,6 @@ private:
namespace Calamares namespace Calamares
{ {
/** @brief Returns the row number of boot-loader @p path (e.g. /dev/sda)
*
* Assuming the @p model is a BootLoaderModel, will return a row number
* in the model. Returns -1 otherwise.
*/
int findBootloader( const QAbstractItemModel* model, const QString& path );
/** @brief Tries to set @p path as selected item in @p combo /** @brief Tries to set @p path as selected item in @p combo
* *
* Matches a boot-loader install path (e.g. /dev/sda) with a model * Matches a boot-loader install path (e.g. /dev/sda) with a model

View File

@ -340,7 +340,7 @@ PartitionCoreModule::deviceModel() const
return m_deviceModel; return m_deviceModel;
} }
QAbstractItemModel* BootLoaderModel*
PartitionCoreModule::bootLoaderModel() const PartitionCoreModule::bootLoaderModel() const
{ {
return m_bootLoaderModel; return m_bootLoaderModel;

View File

@ -122,7 +122,7 @@ public:
* The single BootLoaderModel instance belongs to the PCM. * The single BootLoaderModel instance belongs to the PCM.
* @return the BootLoaderModel. * @return the BootLoaderModel.
*/ */
QAbstractItemModel* bootLoaderModel() const; BootLoaderModel* bootLoaderModel() const;
void createPartitionTable( Device* device, PartitionTable::TableType type ); void createPartitionTable( Device* device, PartitionTable::TableType type );

View File

@ -13,6 +13,7 @@
#include "gui/PartitionViewStep.h" #include "gui/PartitionViewStep.h"
#include "core/BootLoaderModel.h"
#include "core/Config.h" #include "core/Config.h"
#include "core/DeviceModel.h" #include "core/DeviceModel.h"
#include "core/KPMHelpers.h" #include "core/KPMHelpers.h"
@ -36,6 +37,7 @@
#include "utils/NamedEnum.h" #include "utils/NamedEnum.h"
#include "utils/QtCompat.h" #include "utils/QtCompat.h"
#include "utils/Retranslator.h" #include "utils/Retranslator.h"
#include "utils/Units.h"
#include "utils/Variant.h" #include "utils/Variant.h"
#include "widgets/WaitingWidget.h" #include "widgets/WaitingWidget.h"
@ -395,6 +397,44 @@ PartitionViewStep::onActivate()
} }
} }
static bool
shouldWarnForGPTOnBIOS( const PartitionCoreModule* core )
{
if ( PartUtils::isEfiSystem() )
{
return false;
}
auto [ r, device ] = core->bootLoaderModel()->findBootLoader( core->bootLoaderInstallPath() );
if ( device )
{
auto* table = device->partitionTable();
cDebug() << "Found device for bootloader" << device->deviceNode();
if ( table && table->type() == PartitionTable::TableType::gpt )
{
// So this is a BIOS system, and the bootloader will be installed on a GPT system
for ( const auto& partition : qAsConst( table->children() ) )
{
using CalamaresUtils::Units::operator""_MiB;
if ( ( partition->activeFlags() & PartitionTable::Flag::BiosGrub )
&& ( partition->fileSystem().type() == FileSystem::Unformatted )
&& ( partition->capacity() >= 8_MiB ) )
{
cDebug() << Logger::SubEntry << "Partition" << partition->devicePath()
<< partition->partitionPath()
<< "is a suitable bios_grub partition";
return false;
}
}
}
cDebug() << Logger::SubEntry << "No suitable partition for bios_grub found";
}
else
{
cDebug() << "Found no device for" << core->bootLoaderInstallPath();
}
return true;
}
void void
PartitionViewStep::onLeave() PartitionViewStep::onLeave()
@ -462,24 +502,25 @@ PartitionViewStep::onLeave()
{ {
cDebug() << "device: BIOS"; cDebug() << "device: BIOS";
// TODO: this *always* warns, which might be annoying, so it'd be
// best to find a way to detect that bios_grub partition.
QString message = tr( "Option to use GPT on BIOS" ); if ( shouldWarnForGPTOnBIOS( m_core ) )
QString description = tr( "A GPT partition table is the best option for all " {
"systems. This installer supports such a setup for " QString message = tr( "Option to use GPT on BIOS" );
"BIOS systems too." QString description = tr( "A GPT partition table is the best option for all "
"<br/><br/>" "systems. This installer supports such a setup for "
"To configure a GPT partition table on BIOS, " "BIOS systems too."
"(if not done so already) go back " "<br/><br/>"
"and set the partition table to GPT, next create a 8 MB " "To configure a GPT partition table on BIOS, "
"unformatted partition with the " "(if not done so already) go back "
"<strong>bios_grub</strong> flag enabled.<br/><br/>" "and set the partition table to GPT, next create a 8 MB "
"An unformatted 8 MB partition is necessary " "unformatted partition with the "
"to start %1 on a BIOS system with GPT." ) "<strong>bios_grub</strong> flag enabled.<br/><br/>"
.arg( branding->shortProductName() ); "An unformatted 8 MB partition is necessary "
"to start %1 on a BIOS system with GPT." )
.arg( branding->shortProductName() );
QMessageBox::information( m_manualPartitionPage, message, description ); QMessageBox::information( m_manualPartitionPage, message, description );
}
} }
Partition* root_p = m_core->findPartitionByMountPoint( "/" ); Partition* root_p = m_core->findPartitionByMountPoint( "/" );
@ -593,7 +634,7 @@ PartitionViewStep::setConfigurationMap( const QVariantMap& configurationMap )
// because it could take a while. Then when it's done, we can set up the widgets // because it could take a while. Then when it's done, we can set up the widgets
// and remove the spinner. // and remove the spinner.
m_future = new QFutureWatcher< void >(); m_future = new QFutureWatcher< void >();
connect( m_future, &QFutureWatcher< void >::finished, this, [this] { connect( m_future, &QFutureWatcher< void >::finished, this, [ this ] {
continueLoading(); continueLoading();
this->m_future->deleteLater(); this->m_future->deleteLater();
this->m_future = nullptr; this->m_future = nullptr;

View File

@ -44,6 +44,7 @@ SummaryPage::SummaryPage( const SummaryViewStep* thisViewStep, QWidget* parent )
layout->setContentsMargins( 0, 0, 0, 0 ); layout->setContentsMargins( 0, 0, 0, 0 );
QLabel* headerLabel = new QLabel( this ); QLabel* headerLabel = new QLabel( this );
headerLabel->setObjectName( "summaryTitle" );
CALAMARES_RETRANSLATE( if ( Calamares::Settings::instance()->isSetupMode() ) CALAMARES_RETRANSLATE( if ( Calamares::Settings::instance()->isSetupMode() )
headerLabel->setText( tr( "This is an overview of what will happen once you start " headerLabel->setText( tr( "This is an overview of what will happen once you start "
"the setup procedure." ) ); "the setup procedure." ) );
@ -169,6 +170,7 @@ QLabel*
SummaryPage::createTitleLabel( const QString& text ) const SummaryPage::createTitleLabel( const QString& text ) const
{ {
QLabel* label = new QLabel( text ); QLabel* label = new QLabel( text );
label->setObjectName( "summaryItemTitle" );
QFont fnt = font(); QFont fnt = font();
fnt.setWeight( QFont::Light ); fnt.setWeight( QFont::Light );
fnt.setPointSize( CalamaresUtils::defaultFontSize() * 2 ); fnt.setPointSize( CalamaresUtils::defaultFontSize() * 2 );
@ -182,6 +184,7 @@ QLabel*
SummaryPage::createBodyLabel( const QString& text ) const SummaryPage::createBodyLabel( const QString& text ) const
{ {
QLabel* label = new QLabel; QLabel* label = new QLabel;
label->setObjectName( "summaryItemBody" );
label->setMargin( CalamaresUtils::defaultFontHeight() / 2 ); label->setMargin( CalamaresUtils::defaultFontHeight() / 2 );
QPalette pal( palette() ); QPalette pal( palette() );
pal.setColor( WindowBackground, palette().window().color().lighter( 108 ) ); pal.setColor( WindowBackground, palette().window().color().lighter( 108 ) );

View File

@ -64,6 +64,7 @@ CheckerContainer::requirementsComplete( bool ok )
m_waitingWidget = nullptr; // Don't delete in destructor m_waitingWidget = nullptr; // Don't delete in destructor
m_checkerWidget = new ResultsListWidget( m_model, this ); m_checkerWidget = new ResultsListWidget( m_model, this );
m_checkerWidget->setObjectName( "requirementsChecker" );
layout()->addWidget( m_checkerWidget ); layout()->addWidget( m_checkerWidget );
m_verdict = ok; m_verdict = ok;

View File

@ -29,11 +29,14 @@ ResultWidget::ResultWidget( bool satisfied, bool required, QWidget* parent )
setLayout( mainLayout ); setLayout( mainLayout );
m_iconLabel = new QLabel( this ); m_iconLabel = new QLabel( this );
mainLayout->addWidget( m_iconLabel );
m_iconLabel->setFixedSize( CalamaresUtils::defaultIconSize() ); m_iconLabel->setFixedSize( CalamaresUtils::defaultIconSize() );
m_iconLabel->setObjectName( "resultIcon" );
mainLayout->addWidget( m_iconLabel );
m_textLabel = new QLabel( this ); m_textLabel = new QLabel( this );
mainLayout->addWidget( m_textLabel );
m_textLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); m_textLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred );
m_textLabel->setObjectName( "resultText" );
mainLayout->addWidget( m_textLabel );
if ( satisfied ) if ( satisfied )
{ {

View File

@ -52,9 +52,12 @@ createResultWidgets( QLayout* layout,
continue; continue;
} }
const QString checkName = model.data( index, Calamares::RequirementsModel::Name ).toString();
const bool is_satisfied = model.data( index, Calamares::RequirementsModel::Satisfied ).toBool(); const bool is_satisfied = model.data( index, Calamares::RequirementsModel::Satisfied ).toBool();
const bool is_mandatory = model.data( index, Calamares::RequirementsModel::Mandatory ).toBool(); const bool is_mandatory = model.data( index, Calamares::RequirementsModel::Mandatory ).toBool();
ResultWidget* ciw = new ResultWidget( is_satisfied, is_mandatory ); ResultWidget* ciw = new ResultWidget( is_satisfied, is_mandatory );
ciw->setObjectName( checkName );
layout->addWidget( ciw ); layout->addWidget( ciw );
ciw->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); ciw->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred );
@ -105,6 +108,7 @@ ResultsListDialog::ResultsListDialog( const Calamares::RequirementsModel& model,
auto* entriesLayout = new QVBoxLayout; auto* entriesLayout = new QVBoxLayout;
m_title = new QLabel( this ); m_title = new QLabel( this );
m_title->setObjectName( "resultDialogTitle" );
createResultWidgets( createResultWidgets(
entriesLayout, m_resultWidgets, model, []( const Calamares::RequirementsModel& m, QModelIndex i ) { entriesLayout, m_resultWidgets, model, []( const Calamares::RequirementsModel& m, QModelIndex i ) {
@ -112,6 +116,7 @@ ResultsListDialog::ResultsListDialog( const Calamares::RequirementsModel& model,
} ); } );
QDialogButtonBox* buttonBox = new QDialogButtonBox( QDialogButtonBox::Close, Qt::Horizontal, this ); QDialogButtonBox* buttonBox = new QDialogButtonBox( QDialogButtonBox::Close, Qt::Horizontal, this );
buttonBox->setObjectName( "resultDialogButtons" );
mainLayout->addWidget( m_title ); mainLayout->addWidget( m_title );
mainLayout->addLayout( entriesLayout ); mainLayout->addLayout( entriesLayout );
@ -168,6 +173,7 @@ ResultsListWidget::ResultsListWidget( const Calamares::RequirementsModel& model,
m_explanation->setWordWrap( true ); m_explanation->setWordWrap( true );
m_explanation->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); m_explanation->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred );
m_explanation->setOpenExternalLinks( false ); m_explanation->setOpenExternalLinks( false );
m_explanation->setObjectName( "resultsExplanation" );
connect( m_explanation, &QLabel::linkActivated, this, &ResultsListWidget::linkClicked ); connect( m_explanation, &QLabel::linkActivated, this, &ResultsListWidget::linkClicked );
entriesLayout->addWidget( m_explanation ); entriesLayout->addWidget( m_explanation );
@ -208,9 +214,10 @@ ResultsListWidget::ResultsListWidget( const Calamares::RequirementsModel& model,
} }
imageLabel->setContentsMargins( 4, CalamaresUtils::defaultFontHeight() * 3 / 4, 4, 4 ); imageLabel->setContentsMargins( 4, CalamaresUtils::defaultFontHeight() * 3 / 4, 4, 4 );
mainLayout->addWidget( imageLabel );
imageLabel->setAlignment( Qt::AlignCenter ); imageLabel->setAlignment( Qt::AlignCenter );
imageLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); imageLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
imageLabel->setObjectName( "welcomeLogo" );
mainLayout->addWidget( imageLabel );
} }
} }
m_explanation->setAlignment( Qt::AlignCenter ); m_explanation->setAlignment( Qt::AlignCenter );