/* * Copyright 2019 Kai Uwe Broulik * * 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 . */ #pragma once #include #include #include #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