[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [apper] /: Initial support for showing the untrusted packages that are to be installed
From: Daniel Nicoletti <dantti12 () gmail ! com>
Date: 2012-11-30 21:27:21
Message-ID: 20121130212721.3A585A6091 () git ! kde ! org
[Download RAW message or body]
Git commit c66a77d2283e8b4d08ad5e9cba0fa67a67d07c58 by Daniel Nicoletti.
Committed on 30/11/2012 at 22:26.
Pushed by dantti into branch 'master'.
Initial support for showing the untrusted packages that are to be installed
M +21 -12 ApperKCM/ApperKCM.cpp
M +4 -1 libapper/PackageModel.cpp
M +23 -13 libapper/PkTransaction.cpp
M +3 -0 libapper/PkTransaction.h
M +2 -1 libapper/PkTransactionWidget.cpp
M +67 -13 libapper/Requirements.cpp
M +10 -0 libapper/Requirements.h
http://commits.kde.org/apper/c66a77d2283e8b4d08ad5e9cba0fa67a67d07c58
diff --git a/ApperKCM/ApperKCM.cpp b/ApperKCM/ApperKCM.cpp
index e763fc8..b794773 100644
--- a/ApperKCM/ApperKCM.cpp
+++ b/ApperKCM/ApperKCM.cpp
@@ -193,8 +193,7 @@ ApperKCM::ApperKCM(QWidget *parent, const QVariantList &args) :
changesView->setItemDelegate(changesDelegate);
// Connect this signal to keep track of changes
- connect(m_browseModel, SIGNAL(changed(bool)), this, SIGNAL(changed(bool)));
- connect(m_browseModel, SIGNAL(changed(bool)), changesPB, \
SLOT(setEnabled(bool))); + connect(m_browseModel, SIGNAL(changed(bool)), this, \
SLOT(checkChanged()));
// packageUnchecked from changes model
connect(m_changesModel, SIGNAL(packageUnchecked(QString)),
@@ -305,9 +304,19 @@ void ApperKCM::setCurrentActionCancel(bool cancel)
void ApperKCM::checkChanged()
{
- bool value = m_browseModel->hasChanges();
- changesPB->setEnabled(value);
- emit changed(value);
+ bool hasChanges = false;
+ if (stackedWidget->currentWidget() == pageHome ||
+ stackedWidget->currentWidget() == pageChanges ||
+ stackedWidget->currentWidget() == pageBrowse) {
+ hasChanges = m_browseModel->hasChanges();
+ changesPB->setEnabled(hasChanges);
+ } else if (stackedWidget->currentWidget() == m_updaterPage) {
+ hasChanges = m_updaterPage->hasChanges();
+ } else if (stackedWidget->currentWidget() == m_settingsPage) {
+ hasChanges = m_settingsPage->hasChanges();
+ }
+
+ emit changed(hasChanges);
}
void ApperKCM::errorCode(PackageKit::Transaction::Error error, const QString \
&details) @@ -462,15 +471,16 @@ void ApperKCM::setPage(const QString &page)
if (m_settingsPage == 0) {
m_settingsPage = new Settings(m_roles, this);
+ connect(m_settingsPage, SIGNAL(changed(bool)),
+ this, SLOT(checkChanged()));
stackedWidget->addWidget(m_settingsPage);
- m_settingsPage->load();
connect(generalSettingsPB, SIGNAL(toggled(bool)),
m_settingsPage, SLOT(showGeneralSettings()));
- connect(repoSettingsPB, SIGNAL(toggled(bool)),
+ connect(repoSettingsPB, SIGNAL(toggled(bool)),
m_settingsPage, SLOT(showRepoSettings()));
}
- connect(m_settingsPage, SIGNAL(changed(bool)), this, \
SIGNAL(changed(bool))); + checkChanged();
setButtons(KCModule::Default | KCModule::Apply);
emit changed(true); // THIS IS DUMB setButtons only take effect after \
changed goes true emit changed(false);
@@ -492,14 +502,15 @@ void ApperKCM::setPage(const QString &page)
this, SLOT(refreshCache()));
connect(m_updaterPage, SIGNAL(downloadSize(QString)),
downloadL, SLOT(setText(QString)));
+ connect(m_updaterPage, SIGNAL(changed(bool)),
+ this, SLOT(checkChanged()));
stackedWidget->addWidget(m_updaterPage);
checkUpdatesPB->setIcon(KIcon("view-refresh"));
connect(checkUpdatesPB, SIGNAL(clicked(bool)),
this, SLOT(refreshCache()));
}
- connect(m_updaterPage, SIGNAL(changed(bool)), this, \
SIGNAL(changed(bool)));
- emit changed(false);
+ checkChanged();
stackedWidget->setCurrentWidget(m_updaterPage);
m_updaterPage->load();
stackedWidgetBar->setCurrentIndex(BAR_UPDATE);
@@ -548,7 +559,6 @@ void ApperKCM::on_backTB_clicked()
return;
}
stackedWidgetBar->setCurrentIndex(BAR_SEARCH);
- disconnect(m_updaterPage, SIGNAL(changed(bool)), this, \
SIGNAL(changed(bool))); checkChanged();
} else if (stackedWidget->currentWidget() == m_settingsPage) {
if (!canChangePage()) {
@@ -557,7 +567,6 @@ void ApperKCM::on_backTB_clicked()
setButtons(Apply);
emit changed(true); // THIS IS DUMB setButtons only take effect after \
changed goes true stackedWidgetBar->setCurrentIndex(BAR_SEARCH);
- disconnect(m_settingsPage, SIGNAL(changed(bool)), this, \
SIGNAL(changed(bool))); checkChanged();
}
diff --git a/libapper/PackageModel.cpp b/libapper/PackageModel.cpp
index 017e39a..1609e4c 100644
--- a/libapper/PackageModel.cpp
+++ b/libapper/PackageModel.cpp
@@ -85,6 +85,7 @@ void PackageModel::addSelectedPackagesFromModel(PackageModel \
*model)
void PackageModel::addPackage(Transaction::Info info, const QString &packageID, \
const QString &summary, bool selected) {
+ kDebug() << packageID;
switch(info) {
case Transaction::InfoBlocked:
case Transaction::InfoFinished:
@@ -409,7 +410,9 @@ void PackageModel::removePackage(const QString &packageID)
{
int i = 0;
while (i < m_packages.size()) {
- if (m_packages[i].packageID == packageID) {
+ InternalPackage iPackage = m_packages[i];
+ if (iPackage.packageID == packageID &&
+ iPackage.info != Transaction::InfoUntrusted) {
beginRemoveRows(QModelIndex(), i, i);
m_packages.remove(i);
endRemoveRows();
diff --git a/libapper/PkTransaction.cpp b/libapper/PkTransaction.cpp
index c62209b..11b8f7a 100644
--- a/libapper/PkTransaction.cpp
+++ b/libapper/PkTransaction.cpp
@@ -259,6 +259,11 @@ void PkTransaction::updatePackages()
void PkTransaction::requeueTransaction()
{
Requirements *requires = qobject_cast<Requirements *>(sender());
+ if (requires && !requires->trusted()) {
+ // Set only trusted to false, to do as the user asked
+ // TODO test without this to check the fallback mode
+ d->flags ^= Transaction::TransactionFlagOnlyTrusted;
+ }
// Delete the simulate model
if (d->simulateModel) {
@@ -309,7 +314,7 @@ static bool untrustedIsNeed(Transaction::Error error)
void PkTransaction::errorCode(Transaction::Error error, const QString &details)
{
-// kDebug() << "errorCode: " << error << details;
+ kDebug() << "errorCode: " << error << details;
d->error = error;
// obvious message, don't tell the user
if (m_handlingActionRequired ||
@@ -540,6 +545,17 @@ void PkTransaction::transactionFinished(Transaction::Exit \
status) setExitStatus(Success);
}
break;
+ case Transaction::ExitNeedUntrusted:
+ case Transaction::ExitKeyRequired :
+ case Transaction::ExitEulaRequired :
+ case Transaction::ExitMediaChangeRequired :
+ kDebug() << "finished KeyRequired or EulaRequired: " << status;
+// ui->currentL->setText(PkStrings::status(Transaction::StatusSetup));
+ if (!m_handlingActionRequired) {
+ kDebug() << "Not Handling Required Action";
+ setExitStatus(Failed);
+ }
+ break;
case Transaction::ExitCancelled :
// ui->progressBar->setMaximum(100);
// ui->progressBar->setValue(100);
@@ -556,17 +572,6 @@ void PkTransaction::transactionFinished(Transaction::Exit \
status) setExitStatus(Failed);
}
break;
- case Transaction::ExitKeyRequired :
- case Transaction::ExitEulaRequired :
- case Transaction::ExitMediaChangeRequired :
- case Transaction::ExitNeedUntrusted :
- kDebug() << "finished KeyRequired or EulaRequired: " << status;
-// ui->currentL->setText(PkStrings::status(Transaction::StatusSetup));
- if (!m_handlingActionRequired) {
- kDebug() << "Not Handling Required Action";
- setExitStatus(Failed);
- }
- break;
default :
// ui->progressBar->setMaximum(100);
// ui->progressBar->setValue(100);
@@ -585,7 +590,12 @@ bool PkTransaction::isFinished() const
{
kDebug() << status() << role();
return status() == Transaction::StatusFinished;
-// return d->finished;
+ // return d->finished;
+}
+
+PackageModel *PkTransaction::simulateModel() const
+{
+ return d->simulateModel;
}
void PkTransaction::setExitStatus(PkTransaction::ExitStatus status)
diff --git a/libapper/PkTransaction.h b/libapper/PkTransaction.h
index 38c5be9..c1a17c3 100644
--- a/libapper/PkTransaction.h
+++ b/libapper/PkTransaction.h
@@ -29,6 +29,7 @@
using namespace PackageKit;
+class PackageModel;
class PkTransactionPrivate;
class PkTransactionProgressModel;
class KDE_EXPORT PkTransaction : public Transaction
@@ -57,6 +58,8 @@ public:
PkTransaction::ExitStatus exitStatus() const;
bool isFinished() const;
+ PackageModel* simulateModel() const;
+
signals:
void finished(PkTransaction::ExitStatus status);
void titleChanged(const QString &title);
diff --git a/libapper/PkTransactionWidget.cpp b/libapper/PkTransactionWidget.cpp
index 3163a89..c870462 100644
--- a/libapper/PkTransactionWidget.cpp
+++ b/libapper/PkTransactionWidget.cpp
@@ -50,6 +50,7 @@
#include "PkTransaction.h"
#include "TransactionDelegate.h"
#include "PkTransactionProgressModel.h"
+#include "PackageModel.h"
class PkTransactionWidgetPrivate
{
@@ -267,7 +268,7 @@ static bool untrustedIsNeed(Transaction::Error error)
void PkTransactionWidget::errorCode(Transaction::Error error, const QString \
&details) {
-// kDebug() << "errorCode: " << error << details;
+ kDebug() << "errorCode: " << error << details;
// d->error = error;
// obvious message, don't tell the user
if (m_handlingActionRequired ||
diff --git a/libapper/Requirements.cpp b/libapper/Requirements.cpp
index fdfc038..0a0e3fa 100644
--- a/libapper/Requirements.cpp
+++ b/libapper/Requirements.cpp
@@ -32,6 +32,7 @@ Requirements::Requirements(PackageModel *model, QWidget *parent) :
KDialog(parent),
m_embed(false),
m_shouldShow(true),
+ m_untrustedButton(0),
ui(new Ui::Requirements)
{
ui->setupUi(mainWidget());
@@ -40,6 +41,13 @@ Requirements::Requirements(PackageModel *model, QWidget *parent) :
ApplicationSortFilterModel *proxy = new ApplicationSortFilterModel(this);
proxy->setSourceModel(model);
ui->packageView->setModel(proxy);
+ ui->packageView->header()->setResizeMode(PackageModel::NameCol, \
QHeaderView::ResizeToContents); + \
ui->packageView->header()->hideSection(PackageModel::ActionCol); + \
ui->packageView->header()->hideSection(PackageModel::ArchCol); + \
ui->packageView->header()->hideSection(PackageModel::CurrentVersionCol); + \
ui->packageView->header()->hideSection(PackageModel::OriginCol); + \
ui->packageView->header()->hideSection(PackageModel::SizeCol); +
m_hideAutoConfirm = false;
setCaption(i18n("Additional changes"));
@@ -47,11 +55,11 @@ Requirements::Requirements(PackageModel *model, QWidget *parent) \
: setButtons(KDialog::Ok | KDialog::Cancel);
setButtonText(KDialog::Ok, i18n("Continue"));
// restore size
- setMinimumSize(QSize(450,300));
- setInitialSize(QSize(450,300));
+ setMinimumSize(QSize(600,480));
+ setInitialSize(QSize(600,600));
KConfig config("apper");
KConfigGroup requirementsDialog(&config, "requirementsDialog");
- restoreDialogSize(requirementsDialog);
+// restoreDialogSize(requirementsDialog);
QButtonGroup *group = new QButtonGroup(this);
connect(group, SIGNAL(buttonClicked(int)), this, SLOT(actionClicked(int)));
@@ -126,17 +134,23 @@ Requirements::Requirements(PackageModel *model, QWidget \
*parent) : ui->verticalLayout->insertWidget(count++, button);
}
- QList<QAbstractButton *> buttons = group->buttons();
- if (!buttons.isEmpty()) {
- QAbstractButton *button = group->buttons().first();
- button->click();
+ if (int c = model->countInfo(Transaction::InfoUntrusted)) {
+ m_untrustedButton = new QToolButton(this);
+ m_untrustedButton->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
+ m_untrustedButton->setCheckable(true);
+ m_untrustedButton->setAutoRaise(true);
+ m_untrustedButton->setIconSize(QSize(32, 32));
+ m_untrustedButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+ m_untrustedButton->setText(i18np("1 untrusted package", "%1 untrusted \
packages", c)); + m_untrustedButton->setIcon(KIcon("security-low"));
+ m_untrustedButton->setVisible(false);
+ ui->verticalLayout->insertWidget(count++, m_untrustedButton);
+ }
- ui->packageView->header()->setResizeMode(PackageModel::NameCol, \
QHeaderView::ResizeToContents);
- ui->packageView->header()->hideSection(PackageModel::ActionCol);
- ui->packageView->header()->hideSection(PackageModel::ArchCol);
- ui->packageView->header()->hideSection(PackageModel::CurrentVersionCol);
- ui->packageView->header()->hideSection(PackageModel::OriginCol);
- ui->packageView->header()->hideSection(PackageModel::SizeCol);
+ m_buttons = group->buttons();
+ if (!m_buttons.isEmpty()) {
+ QAbstractButton *button = m_buttons.first();
+ button->click();
if (m_hideAutoConfirm) {
ui->confirmCB->setVisible(false);
@@ -145,6 +159,8 @@ Requirements::Requirements(PackageModel *model, QWidget *parent) \
: // dialog, but only if the user previusly set so
ui->confirmCB->setChecked(requirementsDialog.readEntry("autoConfirm", \
false)); }
+ } else if (m_untrustedButton) {
+ showUntrustedButton();
} else {
// set this as false so the dialog is not shown
m_shouldShow = false;
@@ -171,11 +187,28 @@ void Requirements::setEmbedded(bool embedded)
ui->label->setVisible(!embedded);
}
+bool Requirements::trusted() const
+{
+ // There are untrusted packages if the button was created...
+ return !m_untrustedButton;
+}
+
bool Requirements::shouldShow() const
{
return (m_shouldShow && !ui->confirmCB->isChecked());
}
+void Requirements::slotButtonClicked(int button)
+{
+ if (button == KDialog::Ok &&
+ m_untrustedButton &&
+ !m_untrustedButton->isVisible()) {
+ showUntrustedButton();
+ } else {
+ KDialog::slotButtonClicked(button);
+ }
+}
+
void Requirements::on_confirmCB_Toggled(bool checked)
{
KConfig config("apper");
@@ -194,4 +227,25 @@ void Requirements::actionClicked(int type)
proxy->filterByInfo(static_cast<Transaction::Info>(type));
}
+void Requirements::showUntrustedButton()
+{
+ // Clear the other buttons
+ foreach (QAbstractButton *button, m_buttons) {
+ delete button;
+ }
+
+ // Hide the auto confirm button since we will be showing this dialog anyway
+ ui->confirmCB->setVisible(false);
+
+ ui->label->setText(i18n("You are about to install unsigned packages that can \
compromise your system, " + "as it is impossible to verify \
if the software came from a trusted source.")); + QButtonGroup *group = new \
QButtonGroup(this); + m_untrustedButton->setVisible(true);
+ group->addButton(m_untrustedButton);
+
+ ApplicationSortFilterModel *proxy;
+ proxy = qobject_cast<ApplicationSortFilterModel*>(ui->packageView->model());
+ proxy->filterByInfo(Transaction::InfoUntrusted);
+}
+
#include "Requirements.moc"
diff --git a/libapper/Requirements.h b/libapper/Requirements.h
index 507cdad..ef731db 100644
--- a/libapper/Requirements.h
+++ b/libapper/Requirements.h
@@ -23,6 +23,8 @@
#include <KDialog>
+#include <QToolButton>
+
namespace Ui {
class Requirements;
}
@@ -38,18 +40,26 @@ public:
bool embedded() const;
void setEmbedded(bool embedded);
+ bool trusted() const;
public slots:
bool shouldShow() const;
+protected slots:
+ virtual void slotButtonClicked(int button);
+
private slots:
void on_confirmCB_Toggled(bool checked);
void actionClicked(int type);
private:
+ void showUntrustedButton();
+
bool m_embed;
bool m_shouldShow;
bool m_hideAutoConfirm;
+ QToolButton *m_untrustedButton;
+ QList<QAbstractButton *> m_buttons;
Ui::Requirements *ui;
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic