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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
|
/*
* SPDX-FileCopyrightText: 2012 Jonathan Thomas <echidnaman@kubuntu.org>
*
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
#pragma once
// Qt includes
#include <QObject>
// Own includes
#include "AddonList.h"
#include "discovercommon_export.h"
class AbstractResource;
/**
* \class Transaction Transaction.h "Transaction.h"
*
* \brief This is the base class of all transactions.
*
* When there are transactions running inside Discover, the backends should
* provide the corresponding Transaction objects with proper information.
*/
class DISCOVERCOMMON_EXPORT Transaction : public QObject
{
Q_OBJECT
Q_PROPERTY(QString name READ name CONSTANT)
Q_PROPERTY(QVariant icon READ icon CONSTANT)
Q_PROPERTY(AbstractResource *resource READ resource CONSTANT)
Q_PROPERTY(Role role READ role CONSTANT)
Q_PROPERTY(Status status READ status NOTIFY statusChanged)
Q_PROPERTY(bool isCancellable READ isCancellable NOTIFY cancellableChanged)
Q_PROPERTY(int progress READ progress NOTIFY progressChanged)
Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged)
Q_PROPERTY(quint64 downloadSpeed READ downloadSpeed WRITE setDownloadSpeed NOTIFY downloadSpeedChanged)
Q_PROPERTY(QString downloadSpeedString READ downloadSpeedString NOTIFY downloadSpeedChanged)
Q_PROPERTY(QString remainingTimeString READ remainingTimeString NOTIFY remainingTimeChanged)
Q_PROPERTY(uint remainingTime READ remainingTime NOTIFY remainingTimeChanged)
public:
enum Status {
/// Not queued, newly created
SetupStatus = 0,
/// Queued, but not yet run
QueuedStatus,
/// Transaction is in the downloading phase
DownloadingStatus,
/// Transaction is doing an installation/removal
CommittingStatus,
/// Transaction is done
DoneStatus,
/// Transaction is done, but there was an error during transaction
DoneWithErrorStatus,
/// Transaction was cancelled
CancelledStatus,
};
Q_ENUM(Status)
enum Role {
/// The transaction is going to install a resource
InstallRole = 0,
/// The transaction is going to remove a resource
RemoveRole,
/// The transaction is going to change the addons of a resource
ChangeAddonsRole,
};
Q_ENUM(Role)
Transaction(QObject *parent, AbstractResource *resource, Transaction::Role role, const AddonList &addons = {});
~Transaction() override;
/**
* @returns the AbstractResource which this transaction works with
*/
AbstractResource *resource() const;
/**
* @returns the role which this transaction executes
*/
Role role() const;
/**
* @returns the current status
*/
Status status() const;
/**
* @returns the addons which this transaction works on
*/
AddonList addons() const;
/**
* @returns true when the transaction can be canceled
*/
bool isCancellable() const;
/**
* @returns a percentage of how much the transaction is already done
*/
int progress() const;
/**
* Sets the status of the transaction
* @param status the new status
*/
void setStatus(Status status);
/**
* Sets whether the transaction can be canceled or not
* @param isCancellable should be true if the transaction can be canceled
*/
void setCancellable(bool isCancellable);
/**
* Sets the progress of the transaction
* @param progress this should be a percentage of how much of the transaction is already done
*/
void setProgress(int progress);
/**
* Cancels the transaction
*/
Q_SCRIPTABLE virtual void cancel() = 0;
/**
* @returns if the transaction is either downloading or committing
*/
bool isActive() const;
Q_SCRIPTABLE virtual void proceed()
{
}
/** @returns a name that identifies the transaction */
virtual QString name() const;
/** @returns an icon that describes the transaction */
virtual QVariant icon() const;
bool isVisible() const;
void setVisible(bool v);
quint64 downloadSpeed() const
{
return m_downloadSpeed;
}
void setDownloadSpeed(quint64 downloadSpeed);
uint remainingTime() const
{
return m_remainingTime;
}
void setRemainingTime(uint seconds);
QString downloadSpeedString() const;
QString remainingTimeString() const;
private:
AbstractResource *const m_resource;
const Role m_role;
Status m_status;
const AddonList m_addons;
bool m_isCancellable;
int m_progress;
bool m_visible = true;
quint64 m_downloadSpeed = 0;
uint m_remainingTime = 0;
Q_SIGNALS:
/**
* This gets emitted when the status of the transaction changed
*/
void statusChanged(Transaction::Status status);
/**
* This gets emitted when the ability to cancel the transaction or not changed
*/
void cancellableChanged(bool cancellable);
/**
* This gets emitted when the transaction changed the percentage of how much of it is already done
*/
void progressChanged(int progress);
/**
* Provides a message to be shown to the user
*
* The user gets to acknowledge and proceed or cancel the transaction.
*
* @sa proceed(), cancel()
*/
void proceedRequest(const QString &title, const QString &description);
void passiveMessage(const QString &message);
/**
* A fatal error was found on distro packaging. Provide a @p message to show
* in a modal dialog that should lead the user towards reporting the problem..
*/
void distroErrorMessage(const QString &message);
void visibleChanged(bool visible);
void downloadSpeedChanged(quint64 downloadSpeed);
void remainingTimeChanged(uint remainingTime);
void webflowStarted(const QUrl &url, int id);
void webflowDone(int id);
};
|