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