[SCM] ktp-common-internals packaging branch, master, updated. debian/15.12.1-2-1839-gf0635e9
Maximiliano Curia
maxy at moszumanska.debian.org
Mon May 9 09:05:17 UTC 2016
Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-common-internals.git;a=commitdiff;h=4d2909e
The following commit has been merged in the master branch:
commit 4d2909e524b307111d23f6ec81def06480f574c6
Author: George Kiagiadakis <kiagiadakis.george at gmail.com>
Date: Wed Jul 11 16:22:15 2012 +0300
AddContactDialog: Move the contact creation logic from the presence applet & CL inside the dialog
---
KTp/Widgets/add-contact-dialog.cpp | 99 ++++++++++++++++++++++++++++++++++----
KTp/Widgets/add-contact-dialog.h | 19 ++++++--
2 files changed, 105 insertions(+), 13 deletions(-)
diff --git a/KTp/Widgets/add-contact-dialog.cpp b/KTp/Widgets/add-contact-dialog.cpp
index f93d1e7..d0c576b 100644
--- a/KTp/Widgets/add-contact-dialog.cpp
+++ b/KTp/Widgets/add-contact-dialog.cpp
@@ -26,16 +26,21 @@
#include <QObject>
#include <QSortFilterProxyModel>
-#include <QDebug>
+#include <QCloseEvent>
+
+#include <KMessageBox>
+#include <KPushButton>
+#include <KDebug>
#include <TelepathyQt/Account>
#include <TelepathyQt/Connection>
#include <TelepathyQt/ContactManager>
+#include <TelepathyQt/PendingContacts>
namespace KTp {
/** A filter which only lists connections which accept adding contacts*/
-class SubscribableAccountsModel : public QSortFilterProxyModel
+class KTP_NO_EXPORT SubscribableAccountsModel : public QSortFilterProxyModel
{
public:
SubscribableAccountsModel(QObject *parent);
@@ -68,33 +73,46 @@ bool SubscribableAccountsModel::filterAcceptsRow(int source_row, const QModelInd
}
+struct KTP_NO_EXPORT AddContactDialog::Private
+{
+ Private() :
+ ui(new Ui::AddContactDialog),
+ acceptInProgress(false)
+ {}
+
+ Ui::AddContactDialog *ui;
+ bool acceptInProgress;
+};
+
AddContactDialog::AddContactDialog(AccountsModel *accountModel, QWidget *parent) :
KDialog(parent),
- ui(new Ui::AddContactDialog)
+ d(new Private)
{
QWidget *widget = new QWidget(this);
- ui->setupUi(widget);
+ d->ui->setupUi(widget);
setMainWidget(widget);
SubscribableAccountsModel *filteredModel = new SubscribableAccountsModel(this);
filteredModel->setSourceModel(accountModel);
for (int i = 0; i < filteredModel->rowCount(); ++i) {
- ui->accountCombo->addItem(KIcon(filteredModel->data(filteredModel->index(i, 0), AccountsModel::IconRole).toString()),
+ //TODO accountCombo->setModel()
+ d->ui->accountCombo->addItem(KIcon(filteredModel->data(filteredModel->index(i, 0), AccountsModel::IconRole).toString()),
filteredModel->data(filteredModel->index(i, 0)).toString(),
filteredModel->data(filteredModel->index(i, 0), AccountsModel::ItemRole));
}
- ui->screenNameLineEdit->setFocus();
+ d->ui->screenNameLineEdit->setFocus();
}
AddContactDialog::~AddContactDialog()
{
- delete ui;
+ delete d->ui;
+ delete d;
}
Tp::AccountPtr AddContactDialog::account() const
{
- QVariant itemData = ui->accountCombo->itemData(ui->accountCombo->currentIndex(),AccountsModel::ItemRole);
+ QVariant itemData = d->ui->accountCombo->itemData(d->ui->accountCombo->currentIndex(),AccountsModel::ItemRole);
AccountsModelItem* item = itemData.value<AccountsModelItem*>();
if (item) {
return item->account();
@@ -105,7 +123,70 @@ Tp::AccountPtr AddContactDialog::account() const
const QString AddContactDialog::screenName() const
{
- return ui->screenNameLineEdit->text();
+ return d->ui->screenNameLineEdit->text();
+}
+
+void AddContactDialog::accept()
+{
+ Tp::AccountPtr acc = account();
+ if (acc.isNull()) {
+ KMessageBox::error(this,
+ i18n("Seems like you forgot to select an account. Also do not forget to connect it first."),
+ i18n("No Account Selected"));
+ } else if (acc->connection().isNull()) {
+ KMessageBox::error(this,
+ i18n("The requested account has disconnected and so the contact could not be added. Sorry."),
+ i18n("Connection Error"));
+ } else {
+ QStringList identifiers = QStringList() << d->ui->screenNameLineEdit->text();
+ Tp::PendingContacts *pendingContacts = acc->connection()->contactManager()->contactsForIdentifiers(identifiers);
+ connect(pendingContacts, SIGNAL(finished(Tp::PendingOperation*)),
+ this, SLOT(_k_onContactsForIdentifiersFinished(Tp::PendingOperation*)));
+ setInProgress(true);
+ }
+}
+
+void AddContactDialog::closeEvent(QCloseEvent *e)
+{
+ // ignore close event if we are in the middle of an operation
+ if (!d->acceptInProgress) {
+ KDialog::closeEvent(e);
+ }
+}
+
+void AddContactDialog::_k_onContactsForIdentifiersFinished(Tp::PendingOperation *op)
+{
+ if (op->isError()) {
+ kDebug() << "Failed to retrieve a contact for the given identifier"
+ << op->errorName() << op->errorMessage();
+ KMessageBox::error(this, i18n("Failed to construct a contact with the given name"));
+ setInProgress(false);
+ } else {
+ Tp::PendingContacts *pc = qobject_cast<Tp::PendingContacts*>(op);
+ connect(pc->manager()->requestPresenceSubscription(pc->contacts()),
+ SIGNAL(finished(Tp::PendingOperation*)),
+ SLOT(_k_onRequestPresenceSubscriptionFinished(Tp::PendingOperation*)));
+ }
+}
+
+void AddContactDialog::_k_onRequestPresenceSubscriptionFinished(Tp::PendingOperation *op)
+{
+ if (op->isError()) {
+ kDebug() << "Failed to request presence subscription"
+ << op->errorName() << op->errorMessage();
+ KMessageBox::error(this, i18n("Failed to request presence subscription from the requested contact"));
+ setInProgress(false);
+ } else {
+ QDialog::accept();
+ }
+}
+
+void AddContactDialog::setInProgress(bool inProgress)
+{
+ d->acceptInProgress = inProgress;
+ mainWidget()->setEnabled(!inProgress);
+ button(KDialog::Ok)->setEnabled(!inProgress);
+ button(KDialog::Cancel)->setEnabled(!inProgress);
}
} //namespace KTp
diff --git a/KTp/Widgets/add-contact-dialog.h b/KTp/Widgets/add-contact-dialog.h
index cc65aa3..5afdccd 100644
--- a/KTp/Widgets/add-contact-dialog.h
+++ b/KTp/Widgets/add-contact-dialog.h
@@ -27,10 +27,9 @@
#include <KTp/ktp-export.h>
-namespace Ui {
- class AddContactDialog;
+namespace Tp {
+ class PendingOperation;
}
-
class AccountsModel;
namespace KTp
@@ -45,8 +44,20 @@ public:
Tp::AccountPtr account() const;
const QString screenName() const;
+ virtual void accept();
+
+protected:
+ virtual void closeEvent(QCloseEvent *e);
+
+private Q_SLOTS:
+ KTP_NO_EXPORT void _k_onContactsForIdentifiersFinished(Tp::PendingOperation *op);
+ KTP_NO_EXPORT void _k_onRequestPresenceSubscriptionFinished(Tp::PendingOperation *op);
+
private:
- Ui::AddContactDialog *ui;
+ KTP_NO_EXPORT void setInProgress(bool inProgress);
+
+ struct Private;
+ Private * const d;
};
}
--
ktp-common-internals packaging
More information about the pkg-kde-commits
mailing list