summaryrefslogtreecommitdiff
path: root/ui/qt5/runner/executepage.hh
blob: 57d38da7016b03b31c9e65ee2e07ef05ce4541b6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*
 * executepage.hh - Defintion of the UI.Perform page
 * horizon-run-qt5, the Qt 5 executor user interface for
 * Project Horizon
 *
 * Copyright (c) 2019 Adélie Linux and contributors.  All rights reserved.
 * This code is licensed under the AGPL 3.0 license, as noted in the
 * LICENSE-code file in the root directory of this repository.
 *
 * SPDX-License-Identifier: AGPL-3.0-only
 */

#ifndef EXECUTEPAGE_HH
#define EXECUTEPAGE_HH

#include "../horizonwizardpage.hh"

#include <QFile>
#include <QLabel>
#include <QProcess>
#include <QTimer>

class ExecutePage : public HorizonWizardPage {
public:
    enum Phase {
        Prepare,
        Validate,
        Disk,
        PreMeta,
        Net,
        Pkg,
        PostMeta
    };

    ExecutePage(QWidget *parent = nullptr);
    int nextId() const;
    Phase currentPhase() { return this->current; }

private:
    QLabel *prepareStatus;
    QLabel *prepare;
    QLabel *validateStatus;
    QLabel *validate;
    QLabel *diskStatus;
    QLabel *disk;
    QLabel *preMetaStatus;
    QLabel *preMeta;
    QLabel *netStatus;
    QLabel *net;
    QLabel *pkgStatus;
    QLabel *pkg;
    QLabel *postMetaStatus;
    QLabel *postMeta;

    QFont normalFont, boldFont;
    QProcess *executor;
    QTimer *finishTimer;
    QFile log;

    Phase current;
    bool failed;

    Phase stepToPhase(QString step);
    void labelsForPhase(Phase phase, QLabel **icon, QLabel **text);
    void markRunning(Phase phase);
    void markFinished(Phase phase);
    void markFailed(Phase phase);

    void executorReady();
    void executorOutReady();
    void executorFinished(int code, QProcess::ExitStatus status);
};

#endif  /* !EXECUTEPAGE_HH */