File indexing completed on 2024-12-01 11:21:50
0001 /*************************************************************************** 0002 * Copyright (C) 2009-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 SESSION_TASK_H 0022 #define SESSION_TASK_H 0023 0024 #include <Transaction> 0025 #include <PkTransaction.h> 0026 0027 #include <QDBusMessage> 0028 #include <QDialog> 0029 0030 namespace Ui { 0031 class SessionTask; 0032 } 0033 0034 class PackageModel; 0035 class ReviewChanges; 0036 class PkTransactionWidget; 0037 class SessionTask : public QDialog 0038 { 0039 Q_OBJECT 0040 Q_ENUMS(Errors) 0041 public: 0042 SessionTask(uint xid, const QString &interaction, const QDBusMessage &message, QWidget *parent = nullptr); 0043 ~SessionTask() override; 0044 0045 typedef enum{ 0046 Failed, 0047 InternalError, 0048 NoPackagesFound, 0049 Forbidden, 0050 Cancelled 0051 } DBusError; 0052 0053 enum Interaction { 0054 ConfirmSearch = 0x001, 0055 ConfirmDeps = 0x002, 0056 ConfirmInstall = 0x004, 0057 Progress = 0x010, 0058 Finished = 0x020, 0059 Warning = 0x040, 0060 Unknown = 0x100 0061 }; 0062 Q_DECLARE_FLAGS(Interactions, Interaction) 0063 0064 typedef struct { 0065 Transaction::Info info; 0066 QString packageID; 0067 QString summary; 0068 } IPackage; 0069 0070 bool showConfirmSearch() const; 0071 bool showConfirmDeps() const; 0072 bool showConfirmInstall() const; 0073 bool showProgress() const; 0074 bool showFinished() const; 0075 bool showWarning() const; 0076 0077 Interactions interactions() const; 0078 uint timeout() const; 0079 0080 QWidget* mainWidget(); 0081 uint parentWId() const; 0082 0083 void slotContinueClicked(); 0084 void slotCancelClicked(); 0085 0086 Q_SIGNALS: 0087 void continueClicked(); 0088 void cancelClicked(); 0089 0090 public Q_SLOTS: 0091 void enableButtonOk(bool enable); 0092 void setMainWidget(QWidget *widget); 0093 0094 protected: 0095 // Virtual methods to easy subclasses 0096 virtual void search(); 0097 virtual void commit(); 0098 virtual void notFound(); 0099 virtual void searchFailed(); 0100 virtual void searchSuccess(); 0101 virtual void commitFailed(); 0102 virtual void commitSuccess(QWidget *widget = nullptr); 0103 0104 void showCloseButton(); 0105 bool foundPackages() const; 0106 int foundPackagesSize() const; 0107 PackageModel* model() const; 0108 void setTransaction(Transaction::Role role, PkTransaction *transaction = nullptr); 0109 void finishTaskOk(); 0110 void sendErrorFinished(DBusError error, const QString &msg); 0111 bool sendMessageFinished(const QDBusMessage &message); 0112 QString parentTitle; 0113 0114 protected Q_SLOTS: 0115 void setTitle(const QString &title); 0116 void setInfo(const QString &title, const QString &text, const QString &details = QString()); 0117 void setError(const QString &title, const QString &text, const QString &details = QString()); 0118 void setFinish(const QString &title, const QString &text, QWidget *widget = nullptr); 0119 virtual void addPackage(PackageKit::Transaction::Info info, const QString &packageID, const QString &summary); 0120 virtual void searchFinished(PkTransaction::ExitStatus status); 0121 virtual void commitFinished(PkTransaction::ExitStatus status); 0122 0123 private Q_SLOTS: 0124 void updatePallete(); 0125 void setDialog(QDialog *dialog); 0126 0127 private: 0128 void removePackages(); 0129 void parseInteraction(const QString &interaction); 0130 uint getPidSystem(); 0131 uint getPidSession(); 0132 QString getCmdLine(uint pid); 0133 bool pathIsTrusted(const QString &exec); 0134 void setExec(const QString &exec); 0135 0136 uint m_xid; 0137 uint m_pid; 0138 QDBusMessage m_message; 0139 Interactions m_interactions; 0140 uint m_timeout; 0141 PackageModel *m_model; 0142 QStringList m_removePackages; 0143 ReviewChanges *m_reviewChanges = nullptr; 0144 PkTransactionWidget *m_pkTransaction = nullptr; 0145 Ui::SessionTask *ui; 0146 }; 0147 0148 Q_DECLARE_OPERATORS_FOR_FLAGS(SessionTask::Interactions) 0149 0150 #endif