40
42
static const int stateCount = 7;
42
KpkTransaction::KpkTransaction( Transaction *trans, bool modal, QWidget *parent )
43
: KDialog(parent), m_trans(trans), m_handlyingGpgOrEula(false), d(new KpkTransactionPrivate)
44
KpkTransaction::KpkTransaction(Transaction *trans, Behaviors flags, QWidget *parent)
47
m_handlingGpgOrEula(false),
49
d(new KpkTransactionPrivate)
45
51
d->ui.setupUi( mainWidget() );
48
// Set Cancel and custom buoton hide
49
setButtons( KDialog::Cancel | KDialog::User1 | KDialog::Details );
50
setButtonText( KDialog::User1, i18n("Hide") );
51
setButtonToolTip( KDialog::User1, i18n("Allows you to hide the window but keeps running transaction task") );
52
setEscapeButton( KDialog::User1 );
53
// Set Cancel and custom button hide
54
setButtons(KDialog::Cancel | KDialog::User1 | KDialog::Details);
55
setButtonText(KDialog::User1, i18n("Hide"));
56
setButtonToolTip(KDialog::User1, i18n("Allows you to hide the window but keeps running transaction task"));
57
setEscapeButton(KDialog::User1);
53
58
enableButtonCancel(false);
54
59
setDetailsWidget(d->ui.detailGroup);
55
60
setDetailsWidgetVisible(false);
56
61
setTransaction(m_trans);
57
62
enableButton(KDialog::Details, false);
64
if (m_flags & Modal) {
65
setWindowModality(Qt::WindowModal);
66
enableButton(KDialog::User1, false);
69
d->ui.currentL->setText(KpkStrings::status(Transaction::Setup));
60
72
KpkTransaction::~KpkTransaction()
69
setWindowIcon( KpkIcons::actionIcon( m_trans->role().action ) );
70
// Sets all the status of the current transaction
71
setCaption( KpkStrings::action( m_trans->role().action ) );
73
enableButtonCancel( m_trans->allowCancel() );
75
d->ui.currentL->setText( KpkStrings::status( m_trans->status() ) );
81
setWindowIcon(KpkIcons::actionIcon(m_trans->role().action));
82
// Sets the kind of transaction
83
setCaption(KpkStrings::action(m_trans->role().action));
84
// check to see if we can cancel
85
enableButtonCancel(m_trans->allowCancel());
86
// sets the current status
87
d->ui.currentL->setText(KpkStrings::status(m_trans->status()));
77
89
progressChanged(m_trans->progress());
78
90
currPackage(m_trans->lastPackage());
79
91
statusChanged(m_trans->status());
81
connect( m_trans, SIGNAL( package(PackageKit::Package *) ),
82
this, SLOT( currPackage(PackageKit::Package *) ) );
83
connect( m_trans, SIGNAL( finished(PackageKit::Transaction::ExitStatus, uint) ),
84
this, SLOT( finished(PackageKit::Transaction::ExitStatus, uint) ) );
85
connect( m_trans, SIGNAL( allowCancelChanged(bool) ),
86
this, SLOT( enableButtonCancel(bool) ) );
87
connect( m_trans, SIGNAL( errorCode(PackageKit::Client::ErrorType, const QString&) ),
88
this, SLOT( errorCode(PackageKit::Client::ErrorType, const QString&) ) );
89
connect( m_trans, SIGNAL( progressChanged(PackageKit::Transaction::ProgressInfo) ),
90
this, SLOT( progressChanged(PackageKit::Transaction::ProgressInfo) ) );
91
connect( m_trans, SIGNAL( statusChanged(PackageKit::Transaction::Status) ),
92
this, SLOT( statusChanged(PackageKit::Transaction::Status) ) );
93
connect( m_trans, SIGNAL( eulaRequired(PackageKit::Client::EulaInfo) ),
94
this, SLOT( eulaRequired(PackageKit::Client::EulaInfo) ) );
95
connect( m_trans, SIGNAL( repoSignatureRequired(PackageKit::Client::SignatureInfo) ),
96
this, SLOT( repoSignatureRequired(PackageKit::Client::SignatureInfo) ) );
93
connect(m_trans, SIGNAL(package(PackageKit::Package *)),
94
this, SLOT(currPackage(PackageKit::Package *)));
95
connect(m_trans, SIGNAL(finished(PackageKit::Transaction::ExitStatus, uint)),
96
this, SLOT(finished(PackageKit::Transaction::ExitStatus, uint)));
97
connect(m_trans, SIGNAL(allowCancelChanged(bool)),
98
this, SLOT(enableButtonCancel(bool)));
99
connect(m_trans, SIGNAL(errorCode(PackageKit::Client::ErrorType, const QString &)),
100
this, SLOT(errorCode(PackageKit::Client::ErrorType, const QString &)));
101
connect(m_trans, SIGNAL(progressChanged(PackageKit::Transaction::ProgressInfo)),
102
this, SLOT(progressChanged(PackageKit::Transaction::ProgressInfo)));
103
connect(m_trans, SIGNAL(statusChanged(PackageKit::Transaction::Status)),
104
this, SLOT(statusChanged(PackageKit::Transaction::Status)));
105
connect(m_trans, SIGNAL(eulaRequired(PackageKit::Client::EulaInfo)),
106
this, SLOT(eulaRequired(PackageKit::Client::EulaInfo)));
107
connect(m_trans, SIGNAL(repoSignatureRequired(PackageKit::Client::SignatureInfo)),
108
this, SLOT(repoSignatureRequired(PackageKit::Client::SignatureInfo)));
99
111
void KpkTransaction::progressChanged(PackageKit::Transaction::ProgressInfo info)
101
if (info.percentage) {
113
if (info.percentage && info.percentage <= 100) {
102
114
d->ui.progressBar->setMaximum(100);
103
115
d->ui.progressBar->setValue(info.percentage);
116
} else if (d->ui.progressBar->maximum() != 0) {
105
117
d->ui.progressBar->setMaximum(0);
106
118
d->ui.progressBar->reset();
108
if (info.subpercentage) {
121
if (info.subpercentage && info.subpercentage <= 100) {
109
122
d->ui.subprogressBar->setMaximum(100);
110
123
d->ui.subprogressBar->setValue(info.subpercentage);
124
// Check if we didn't already set the maximum as this
125
// causes a weird behavior when we keep reseting
126
} else if (d->ui.subprogressBar->maximum() != 0) {
112
127
d->ui.subprogressBar->setMaximum(0);
113
128
d->ui.subprogressBar->reset();
115
if (info.remaining) {
116
d->ui.timeL->setText(i18n("%1 remaining").arg(KGlobal::locale()->formatDuration(info.remaining*1000)));
118
d->ui.timeL->setText("");
131
d->ui.progressBar->setRemaining(info.remaining);
122
134
void KpkTransaction::currPackage(Package *p)
141
153
case KDialog::Cancel :
142
kDebug() << "KDialog::Cancel";
154
kDebug() << "KDialog::Cancel";
143
155
m_trans->cancel();
156
m_flags |= CloseOnFinish;
145
158
case KDialog::User1 :
146
kDebug() << "KDialog::User1";
147
emit kTransactionFinished(Success);
148
// If you call Close it will
149
// come back to hunt you with Cancel
150
KDialog::slotButtonClicked(KDialog::Yes);
159
kDebug() << "KDialog::User1";
160
emit kTransactionFinished(Success);
161
// If you call Close it will
162
// come back to hunt you with Cancel
163
done(KDialog::User1);
152
case KDialog::Close :
153
kDebug() << "KDialog::Close";
154
emit kTransactionFinished(Cancelled);
155
KDialog::slotButtonClicked(KDialog::Close);
165
case KDialog::Close :
166
kDebug() << "KDialog::Close";
167
emit kTransactionFinished(Cancelled);
168
done(KDialog::Close);
158
171
KDialog::slotButtonClicked(button);
162
175
void KpkTransaction::statusChanged(PackageKit::Transaction::Status status)
164
d->ui.currentL->setText( KpkStrings::status(status) );
177
d->ui.currentL->setText(KpkStrings::status(status));
167
180
void KpkTransaction::errorCode(PackageKit::Client::ErrorType error, const QString &details)
169
kDebug() << "errorCode: " << error;
183
kDebug() << "errorCode: " << error << details;
184
if (error == Client::MissingGpgSignature) {
185
kDebug() << "Missing GPG!";
186
m_handlingGpgOrEula = true;
187
int ret = KMessageBox::warningYesNo(this,
189
i18n("<br />Installing unsigned packages can compromise your system, "
190
"as it is impossible to verify if the software came from a trusted "
191
"source. Are you sure you want to continue installation?"),
192
i18n("Installing unsigned software"));
193
if (ret == KMessageBox::Yes) {
194
emit kTransactionFinished(ReQueue);
195
kDebug() << "Asking for a re-queue";
197
emit kTransactionFinished(Cancelled);
198
if (m_flags & CloseOnFinish)
199
done(QDialog::Rejected);
170
204
// check to see if we are already handlying these errors
171
if ( error == Client::GpgFailure || error == Client::NoLicenseAgreement )
172
if (m_handlyingGpgOrEula)
205
if (error == Client::GpgFailure || error == Client::NoLicenseAgreement) {
206
if (m_handlingGpgOrEula) {
175
211
// this will be for files signature as seen in gpk
176
212
// if ( error == Client::BadGpgSignature || error Client::MissingGpgSignature)
178
214
// ignoring these as gpk does
179
if ( error == Client::TransactionCancelled || error == Client::ProcessKill )
182
KMessageBox::detailedSorry( this, KpkStrings::errorMessage(error), details, KpkStrings::error(error), KMessageBox::Notify );
215
if (error == Client::TransactionCancelled || error == Client::ProcessKill) {
219
KMessageBox::detailedSorry(this,
220
KpkStrings::errorMessage(error),
222
KpkStrings::error(error),
223
KMessageBox::Notify);
225
// when we receive an error we are done
226
if (m_flags & CloseOnFinish) {
227
done(QDialog::Rejected);
185
231
void KpkTransaction::eulaRequired(PackageKit::Client::EulaInfo info)
187
233
kDebug() << "eula by: " << info.vendorName;
188
if (m_handlyingGpgOrEula) {
189
// if its true means that we alread passed here
190
m_handlyingGpgOrEula = false;
235
if (m_handlingGpgOrEula) {
236
// if its true means that we alread passed here
237
m_handlingGpgOrEula = false;
240
m_handlingGpgOrEula = true;
194
m_handlyingGpgOrEula = true;
196
243
KpkLicenseAgreement *frm = new KpkLicenseAgreement(info, true, this);
197
if (frm->exec() == KDialog::Yes && Client::instance()->acceptEula(info) )
198
m_handlyingGpgOrEula = false;
244
if (frm->exec() == KDialog::Yes && Client::instance()->acceptEula(info)) {
245
m_handlingGpgOrEula = false;
199
248
// Well try again, if fail will show the erroCode
200
249
emit kTransactionFinished(ReQueue);
203
252
void KpkTransaction::repoSignatureRequired(PackageKit::Client::SignatureInfo info)
205
254
kDebug() << "signature by: " << info.keyId;
206
if (m_handlyingGpgOrEula) {
207
// if its true means that we alread passed here
208
m_handlyingGpgOrEula = false;
255
if (m_handlingGpgOrEula) {
256
// if its true means that we alread passed here
257
m_handlingGpgOrEula = false;
260
m_handlingGpgOrEula = true;
212
m_handlyingGpgOrEula = true;
214
263
KpkRepoSig *frm = new KpkRepoSig(info, true, this);
215
264
if (frm->exec() == KDialog::Yes &&
216
Client::instance()->installSignature(info.type, info.keyId, info.package) )
217
m_handlyingGpgOrEula = false;
265
Client::instance()->installSignature(info.type, info.keyId, info.package)) {
266
m_handlingGpgOrEula = false;
268
kDebug() << "Requeue!";
218
269
emit kTransactionFinished(ReQueue);
221
void KpkTransaction::finished(PackageKit::Transaction::ExitStatus status, uint /*runtime*/)
272
void KpkTransaction::finished(PackageKit::Transaction::ExitStatus status, uint runtime)
224
276
case Transaction::Success :
225
kDebug() << "finished succes: " << status;
226
emit kTransactionFinished(Success);
227
KDialog::slotButtonClicked(KDialog::Close);
229
case Transaction::Cancelled :
230
kDebug() << "finished cancelled: " << status;
231
emit kTransactionFinished(Cancelled);
232
KDialog::slotButtonClicked(KDialog::Close);
234
case Transaction::Failed :
235
kDebug() << "finished failed: " << status;
236
emit kTransactionFinished(Failed);
237
KDialog::slotButtonClicked(KDialog::Close);
239
case Transaction::KeyRequired :
240
case Transaction::EulaRequired :
241
kDebug() << "finished KeyRequired or EulaRequired: " << status;
277
d->ui.progressBar->setMaximum(100);
278
d->ui.progressBar->setValue(100);
279
emit kTransactionFinished(Success);
280
if (m_flags & CloseOnFinish) {
281
done(QDialog::Accepted);
284
case Transaction::Cancelled :
285
d->ui.progressBar->setMaximum(100);
286
d->ui.progressBar->setValue(100);
287
emit kTransactionFinished(Cancelled);
288
if (m_flags & CloseOnFinish) {
289
done(QDialog::Rejected);
292
case Transaction::Failed :
293
kDebug() << "Failed.";
294
if (!m_handlingGpgOrEula) {
295
d->ui.progressBar->setMaximum(0);
296
d->ui.progressBar->reset();
297
kDebug() << "Yep, we failed.";
298
emit kTransactionFinished(Failed);
301
case Transaction::KeyRequired :
302
case Transaction::EulaRequired :
303
kDebug() << "finished KeyRequired or EulaRequired: " << status;
304
d->ui.currentL->setText(KpkStrings::status(Transaction::Setup));
305
if (!m_handlingGpgOrEula) {
306
emit kTransactionFinished(Failed);
310
d->ui.progressBar->setMaximum(100);
311
d->ui.progressBar->setValue(100);
244
312
kDebug() << "finished default" << status;
245
KDialog::slotButtonClicked(KDialog::Close);
313
KDialog::slotButtonClicked(KDialog::Close);