File indexing completed on 2024-04-14 15:48:55

0001 /***************************************************************************
0002  *   Copyright (C) 2008-2011 by Daniel Nicoletti                           *
0003  *   dantti12@gmail.com                                                    *
0004  *                                                                         *
0005  *   This program is free software; you can redistribute it and/or modify  *
0006  *   it under the terms of the GNU General Public License as published by  *
0007  *   the Free Software Foundation; either version 2 of the License, or     *
0008  *   (at your option) any later version.                                   *
0009  *                                                                         *
0010  *   This program is distributed in the hope that it will be useful,       *
0011  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
0012  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
0013  *   GNU General Public License for more details.                          *
0014  *                                                                         *
0015  *   You should have received a copy of the GNU General Public License     *
0016  *   along with this program; see the file COPYING. If not, write to       *
0017  *   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,  *
0018  *   Boston, MA 02110-1301, USA.                                           *
0019  ***************************************************************************/
0020 
0021 #ifndef PK_TRANSACTION_H
0022 #define PK_TRANSACTION_H
0023 
0024 #include <QObject>
0025 //#include <kdemacros.h>
0026 #include <QDialog>
0027 
0028 #include <Transaction>
0029 
0030 using namespace PackageKit;
0031 
0032 class PackageModel;
0033 class PkTransactionPrivate;
0034 class PkTransactionProgressModel;
0035 class Q_DECL_EXPORT PkTransaction : public QObject
0036 {
0037     Q_OBJECT
0038     Q_ENUMS(ExitStatus)
0039 public:
0040     typedef enum {
0041         Success,
0042         Failed,
0043         Cancelled
0044     } ExitStatus;
0045     explicit PkTransaction(QObject *parent = nullptr);
0046     ~PkTransaction() override;
0047 
0048     void setupTransaction(Transaction *transaction);
0049 
0050     Q_INVOKABLE void installPackages(const QStringList &packages);
0051     Q_INVOKABLE void installFiles(const QStringList &files);
0052     Q_INVOKABLE void removePackages(const QStringList &packages);
0053     Q_INVOKABLE void updatePackages(const QStringList &packages, bool downloadOnly = false);
0054     Q_INVOKABLE void refreshCache(bool force);
0055 
0056 
0057     QString title() const;
0058     Transaction::Role cachedRole() const;
0059     Transaction::TransactionFlags flags() const;
0060     Q_INVOKABLE PkTransactionProgressModel* progressModel() const;
0061     Q_INVOKABLE void enableJobWatcher(bool enable);
0062 
0063     PkTransaction::ExitStatus exitStatus() const;
0064     bool isFinished() const;
0065 
0066     PackageModel* simulateModel() const;
0067 
0068     Q_PROPERTY(uint percentage READ percentage NOTIFY percentageChanged)
0069     uint percentage() const;
0070 
0071     Q_PROPERTY(uint remainingTime READ remainingTime NOTIFY remainingTimeChanged)
0072     uint remainingTime() const;
0073 
0074     Q_PROPERTY(uint speed READ speed NOTIFY speedChanged)
0075     uint speed() const;
0076 
0077     Q_PROPERTY(qulonglong downloadSizeRemaining READ downloadSizeRemaining NOTIFY downloadSizeRemainingChanged)
0078     qulonglong downloadSizeRemaining() const;
0079 
0080     Q_PROPERTY(PackageKit::Transaction::Status status READ status NOTIFY statusChanged)
0081     Transaction::Status status() const;
0082 
0083     Q_PROPERTY(PackageKit::Transaction::Role role READ role NOTIFY roleChanged)
0084     Transaction::Role role() const;
0085 
0086     Q_PROPERTY(bool allowCancel READ allowCancel NOTIFY allowCancelChanged)
0087     bool allowCancel() const;
0088 
0089     Q_PROPERTY(PackageKit::Transaction::TransactionFlags transactionFlags READ transactionFlags NOTIFY transactionFlagsChanged)
0090     Transaction::TransactionFlags transactionFlags() const;
0091 
0092 public Q_SLOTS:
0093     void getUpdateDetail(const QString &packageID);
0094     void getUpdates();
0095     void cancel();
0096     void setTrusted(bool trusted);
0097     /**
0098      * When mediaChangeRequired(), eulaRequired() or repoSignatureRequired()
0099      * and the action is performed this method should be called
0100      */
0101     void requeueTransaction();
0102 
0103 Q_SIGNALS:
0104     void package(PackageKit::Transaction::Info info, const QString &packageID, const QString &summary);
0105     void updateDetail(const QString &packageID,
0106                       const QStringList &updates,
0107                       const QStringList &obsoletes,
0108                       const QStringList &vendorUrls,
0109                       const QStringList &bugzillaUrls,
0110                       const QStringList &cveUrls,
0111                       PackageKit::Transaction::Restart restart,
0112                       const QString &updateText,
0113                       const QString &changelog,
0114                       PackageKit::Transaction::UpdateState state,
0115                       const QDateTime &issued,
0116                       const QDateTime &updated);
0117     void errorCode(PackageKit::Transaction::Error error, const QString &details);
0118     void finished(PkTransaction::ExitStatus status);
0119     void titleChanged(const QString &title);
0120     void sorry(const QString &title, const QString &text, const QString &details);
0121     void errorMessage(const QString &title, const QString &text, const QString &details);
0122     void dialog(QDialog *widget);
0123 
0124     void allowCancelChanged();
0125     void isCallerActiveChanged();
0126     void downloadSizeRemainingChanged();
0127     void elapsedTimeChanged();
0128     void lastPackageChanged();
0129     void percentageChanged();
0130     void remainingTimeChanged();
0131     void roleChanged();
0132     void speedChanged();
0133     void statusChanged();
0134     void transactionFlagsChanged();
0135     void uidChanged();
0136 
0137 private Q_SLOTS:
0138     void installPackages();
0139     void installFiles();
0140     void removePackages();
0141     void updatePackages();
0142 
0143     void slotChanged();
0144     void slotFinished(PackageKit::Transaction::Exit status);
0145     void slotErrorCode(PackageKit::Transaction::Error error, const QString &details);
0146     void slotEulaRequired(const QString &eulaID, const QString &packageID, const QString &vendor, const QString &licenseAgreement);
0147     void slotMediaChangeRequired(PackageKit::Transaction::MediaType type, const QString &id, const QString &text);
0148     void slotRepoSignature(const QString &packageID,
0149                            const QString &repoName,
0150                            const QString &keyUrl,
0151                            const QString &keyUserid,
0152                            const QString &keyId,
0153                            const QString &keyFingerprint,
0154                            const QString &keyTimestamp,
0155                            PackageKit::Transaction::SigType type);
0156 
0157     void setExitStatus(int status = PkTransaction::Success);
0158     void reject();
0159 
0160 private:
0161     void showDialog(QDialog *dialog);
0162     void showError(const QString &title, const QString &description, const QString &details = QString());
0163     void showSorry(const QString &title, const QString &description, const QString &details = QString());
0164 
0165     PkTransactionPrivate *d;
0166 };
0167 
0168 #endif