plasma-workspace/libnotificationmanager/job.h

243 lines
7.4 KiB
C++

/*
* Copyright 2019 Kai Uwe Broulik <kde@privat.broulik.de>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3, or any
* later version accepted by the membership of KDE e.V. (or its
* successor approved by the membership of KDE e.V.), which shall
* act as a proxy defined in Section 6 of version 3 of the license.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <QDateTime>
#include <QString>
#include <QUrl>
#include "notifications.h"
#include "notificationmanager_export.h"
namespace NotificationManager
{
class JobPrivate;
class NOTIFICATIONMANAGER_EXPORT Job : public QObject
{
Q_OBJECT
/**
* The job infoMessage, e.g. "Copying".
*/
Q_PROPERTY(QString summary READ summary NOTIFY summaryChanged)
/**
* User-friendly compact description text of the job,
* for example "42 of 1337 files to "~/some/folder", or
* "SomeFile.txt to Downloads".
*/
Q_PROPERTY(QString text READ text NOTIFY textChanged)
/**
* The desktop entry of the application owning the job, e.g. "org.kde.dolphin".
*/
Q_PROPERTY(QString desktopEntry READ desktopEntry CONSTANT)
/**
* The user-visible name of the application owning the job, e.g. "Dolphin".
*/
Q_PROPERTY(QString applicationName READ applicationName CONSTANT)
/**
* The icon name of the application owning the job, e.g. "system-file-manager".
*/
Q_PROPERTY(QString applicationIconName READ applicationIconName CONSTANT)
/**
* The state the job is currently in.
*/
Q_PROPERTY(Notifications::JobState state READ state NOTIFY stateChanged)
/**
* The total percentage (0-100) of job completion.
*/
Q_PROPERTY(int percentage READ percentage NOTIFY percentageChanged)
/**
* The error code of the job failure.
*/
Q_PROPERTY(int error READ error NOTIFY errorChanged)
/**
* Whether the job can be suspended.
*
* @sa Notifications::suspendJob
* @sa Notifications::resumeJob
*/
Q_PROPERTY(bool suspendable READ suspendable CONSTANT)
/**
* Whether the job can be aborted.
*
* @sa Notifications::killJob
*/
Q_PROPERTY(bool killable READ killable CONSTANT)
/**
* The destination URL of a job.
*/
Q_PROPERTY(QUrl destUrl READ destUrl NOTIFY destUrlChanged)
/**
* Current transfer rate in Byte/s
*/
Q_PROPERTY(qulonglong speed READ speed NOTIFY speedChanged)
Q_PROPERTY(qulonglong processedBytes READ processedBytes NOTIFY processedBytesChanged)
Q_PROPERTY(qulonglong processedFiles READ processedFiles NOTIFY processedFilesChanged)
Q_PROPERTY(qulonglong processedDirectories READ processedDirectories NOTIFY processedDirectoriesChanged)
Q_PROPERTY(qulonglong totalBytes READ totalBytes NOTIFY totalBytesChanged)
Q_PROPERTY(qulonglong totalFiles READ totalFiles NOTIFY totalFilesChanged)
Q_PROPERTY(qulonglong totalDirectories READ totalDirectories NOTIFY totalDirectoriesChanged)
Q_PROPERTY(QString descriptionLabel1 READ descriptionLabel1 NOTIFY descriptionLabel1Changed)
Q_PROPERTY(QString descriptionValue1 READ descriptionValue1 NOTIFY descriptionValue1Changed)
Q_PROPERTY(QString descriptionLabel2 READ descriptionLabel2 NOTIFY descriptionLabel2Changed)
Q_PROPERTY(QString descriptionValue2 READ descriptionValue2 NOTIFY descriptionValue2Changed)
/**
* Whether there are any details available for this job.
*
* This is true as soon as any of the following are available:
* - processed amount (of any unit)
* - total amount (of any unit)
* - description label or value (of any row)
* - speed
*/
Q_PROPERTY(bool hasDetails READ hasDetails NOTIFY hasDetailsChanged)
/**
* This tries to generate a valid URL for a file that's being processed by converting descriptionValue2
* (which is assumed to be the Destination) and if that isn't valid, descriptionValue1 to a URL.
*/
Q_PROPERTY(QUrl descriptionUrl READ descriptionUrl NOTIFY descriptionUrlChanged)
public:
explicit Job(uint id, QObject *parent = nullptr);
~Job() override;
uint id() const;
QDateTime created() const;
QDateTime updated() const;
void resetUpdated();
QString summary() const;
QString text() const;
QString desktopEntry() const;
// TODO remove and let only constructor do it?
void setDesktopEntry(const QString &desktopEntry);
QString applicationName() const;
// TODO remove and let only constructor do it?
void setApplicationName(const QString &applicationName);
QString applicationIconName() const;
// TODO remove and let only constructor do it?
void setApplicationIconName(const QString &applicationIconName);
Notifications::JobState state() const;
void setState(Notifications::JobState jobState);
int percentage() const;
int error() const;
void setError(int error);
QString errorText() const;
void setErrorText(const QString &errorText);
bool suspendable() const;
// TODO remove and let only constructor do it?
void setSuspendable(bool suspendable);
bool killable() const;
// TODO remove and let only constructor do it?
void setKillable(bool killable);
QUrl destUrl() const;
qulonglong speed() const;
qulonglong processedBytes() const;
qulonglong processedFiles() const;
qulonglong processedDirectories() const;
qulonglong totalBytes() const;
qulonglong totalFiles() const;
qulonglong totalDirectories() const;
QString descriptionLabel1() const;
QString descriptionValue1() const;
QString descriptionLabel2() const;
QString descriptionValue2() const;
bool hasDetails() const;
QUrl descriptionUrl() const;
bool expired() const;
void setExpired(bool expired);
bool dismissed() const;
void setDismissed(bool dismissed);
Q_INVOKABLE void suspend();
Q_INVOKABLE void resume();
Q_INVOKABLE void kill();
signals:
void updatedChanged();
void summaryChanged();
void textChanged();
void stateChanged(Notifications::JobState jobState);
void percentageChanged(int percentage);
void errorChanged(int error);
void errorTextChanged(const QString &errorText);
void destUrlChanged();
void speedChanged();
void processedBytesChanged();
void processedFilesChanged();
void processedDirectoriesChanged();
void processedAmountChanged();
void totalBytesChanged();
void totalFilesChanged();
void totalDirectoriesChanged();
void totalAmountChanged();
void descriptionLabel1Changed();
void descriptionValue1Changed();
void descriptionLabel2Changed();
void descriptionValue2Changed();
void descriptionUrlChanged();
void hasDetailsChanged();
void expiredChanged();
void dismissedChanged();
private:
JobPrivate *d;
friend class JobsModel;
friend class JobsModelPrivate;
};
} // namespace NotificationManager