[SCM] ktp-contact-list packaging branch, master, updated. debian/15.12.1-2-1070-g6c56f91
Maximiliano Curia
maxy at moszumanska.debian.org
Sat May 28 00:05:45 UTC 2016
Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-contact-list.git;a=commitdiff;h=88d52e7
The following commit has been merged in the master branch:
commit 88d52e7c83f26adc63812527c43b2df41773b7a6
Author: David Edmundson <kde at davidedmundson.co.uk>
Date: Thu Mar 31 19:40:39 2011 +0100
Added a mechanism to add new contacts.
This consists of a new dialog for selecting accounts and typing screen name, and
code in the mainwidget for using this to perform the actual adding.
---
CMakeLists.txt | 2 ++
add-contact-dialog.cpp | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++
add-contact-dialog.h | 28 +++++++++++++++++
add-contact-dialog.ui | 48 +++++++++++++++++++++++++++++
main-widget.cpp | 27 +++++++++++++++-
main-widget.h | 5 ++-
6 files changed, 191 insertions(+), 2 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7581f10..4d737cf 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -33,11 +33,13 @@ set (contactlist_SRCS
filter-bar.cpp
main.cpp
main-widget.cpp
+ add-contact-dialog.cpp
)
kde4_add_ui_files (contactlist_SRCS
main-widget.ui
+ add-contact-dialog.ui
)
kde4_add_executable (telepathy-kde-contactlist
diff --git a/add-contact-dialog.cpp b/add-contact-dialog.cpp
new file mode 100644
index 0000000..81a42ec
--- /dev/null
+++ b/add-contact-dialog.cpp
@@ -0,0 +1,83 @@
+#include "add-contact-dialog.h"
+#include "ui_add-contact-dialog.h"
+
+#include "accounts-model.h"
+#include "accounts-model-item.h"
+
+#include <QObject>
+#include <QSortFilterProxyModel>
+#include <QDebug>
+
+
+#include <TelepathyQt4/Account>
+#include <TelepathyQt4/Connection>
+#include <TelepathyQt4/ContactManager>
+
+/** A filter which only lists connections which accept adding contacts*/
+class SubscribableAccountsModel : public QSortFilterProxyModel
+{
+public:
+ SubscribableAccountsModel(QObject *parent);
+ virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
+};
+
+SubscribableAccountsModel::SubscribableAccountsModel(QObject *parent)
+ : QSortFilterProxyModel(parent)
+{
+}
+
+bool SubscribableAccountsModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
+{
+ AccountsModelItem* item = sourceModel()->index(source_row, 0, source_parent).data(AccountsModel::ItemRole).value<AccountsModelItem*>());
+
+ if (item) {
+ Tp::AccountPtr account = item->account();
+
+ //if there's no connection we can't add contacts as we have no contactmanager
+ if (! account->isOnline()) {
+ return false;
+ }
+
+ //only show items which can add a contact (i.e hide accounts like IRC which are online but there's no point listing)
+ if (! account->connection()->contactManager()->canRequestPresenceSubscription()){
+ return false;
+ }
+ }
+ return true;
+}
+
+
+AddContactDialog::AddContactDialog(AccountsModel *accountModel, QWidget *parent) :
+ KDialog(parent),
+ ui(new Ui::AddContactDialog)
+{
+ QWidget *widget = new QWidget(this);
+ ui->setupUi(widget);
+ setMainWidget(widget);
+
+ SubscribableAccountsModel *filteredModel = new SubscribableAccountsModel(this);
+ filteredModel->setSourceModel(accountModel);
+ ui->accountCombo->setModel(filteredModel);
+}
+
+AddContactDialog::~AddContactDialog()
+{
+ delete ui;
+}
+
+Tp::AccountPtr AddContactDialog::account() const
+{
+ QVariant itemData = ui->accountCombo->itemData(ui->accountCombo->currentIndex(),AccountsModel::ItemRole);
+ AccountsModelItem* item = itemData.value<AccountsModelItem*>());
+ if (item) {
+ return item->account();
+ }
+ else {
+ return Tp::AccountPtr();
+ }
+}
+
+const QString AddContactDialog::screenName() const
+{
+ return ui->screenNameLineEdit->text();
+}
diff --git a/add-contact-dialog.h b/add-contact-dialog.h
new file mode 100644
index 0000000..0df1073
--- /dev/null
+++ b/add-contact-dialog.h
@@ -0,0 +1,28 @@
+#ifndef ADDCONTACTDIALOG_H
+#define ADDCONTACTDIALOG_H
+
+#include <KDialog>
+
+#include <TelepathyQt4/Types>
+
+namespace Ui {
+ class AddContactDialog;
+}
+
+class AccountsModel;
+
+class AddContactDialog : public KDialog
+{
+ Q_OBJECT
+
+public:
+ explicit AddContactDialog(AccountsModel* accountModel, QWidget *parent = 0);
+ ~AddContactDialog();
+ Tp::AccountPtr account() const;
+ const QString screenName() const;
+
+private:
+ Ui::AddContactDialog *ui;
+};
+
+#endif // ADDCONTACTDIALOG_H
diff --git a/add-contact-dialog.ui b/add-contact-dialog.ui
new file mode 100644
index 0000000..5d16b73
--- /dev/null
+++ b/add-contact-dialog.ui
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>AddContactDialog</class>
+ <widget class="QWidget" name="AddContactDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>300</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QFormLayout" name="formLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Account:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="accountCombo"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Screen Name:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="KLineEdit" name="screenNameLineEdit"/>
+ </item>
+ </layout>
+ </widget>
+ <customwidgets>
+ <customwidget>
+ <class>KLineEdit</class>
+ <extends>QLineEdit</extends>
+ <header>klineedit.h</header>
+ </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/main-widget.cpp b/main-widget.cpp
index e8d9258..ebcf46e 100644
--- a/main-widget.cpp
+++ b/main-widget.cpp
@@ -32,6 +32,7 @@
#include <TelepathyQt4/PendingReady>
#include <TelepathyQt4/PendingChannelRequest>
+#include <TelepathyQt4/PendingContacts>
#include <TelepathyQt4/ClientRegistrar>
#include <TelepathyQt4/Constants>
#include <TelepathyQt4/ContactManager>
@@ -49,6 +50,7 @@
#include "account-filter-model.h"
#include "contact-delegate.h"
#include "contact-model-item.h"
+#include "add-contact-dialog.h"
#define PREFERRED_TEXTCHAT_HANDLER "org.freedesktop.Telepathy.Client.KDE.TextUi"
@@ -159,7 +161,7 @@ MainWidget::MainWidget(QWidget *parent)
m_contactsListView->viewport(), SLOT(repaint())); //update(QModelIndex)
connect(m_actionAdd_contact, SIGNAL(triggered(bool)),
- this, SLOT(onAddContactRequest(bool)));
+ this, SLOT(onAddContactRequest()));
connect(m_actionGroup_contacts, SIGNAL(triggered(bool)),
this, SLOT(onGroupContacts(bool)));
@@ -451,6 +453,29 @@ void MainWidget::toggleSearchWidget(bool show)
}
}
+void MainWidget::onAddContactRequest() {
+ AddContactDialog dialog(m_model, this);
+ if (dialog.exec() == QDialog::Accepted) {
+ Tp::AccountPtr account = dialog.account();
+ QStringList identifiers = QStringList() << dialog.screenName();
+ Tp::PendingContacts* pendingContacts = account->connection()->contactManager()->contactsForIdentifiers(identifiers);
+ connect(pendingContacts, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onAddContactRequestFoundContacts(Tp::PendingOperation*)));
+ }
+}
+
+void MainWidget::onAddContactRequestFoundContacts(Tp::PendingOperation *operation) {
+ Tp::PendingContacts *pendingContacts = qobject_cast<Tp::PendingContacts*>(operation);
+
+ if (! pendingContacts->isError()) {
+ //request subscription
+ pendingContacts->manager()->requestPresenceSubscription(pendingContacts->contacts());
+ }
+ else {
+ kDebug() << pendingContacts->errorName();
+ kDebug() << pendingContacts->errorMessage();
+ }
+}
+
void MainWidget::onCustomContextMenuRequested(const QPoint &)
{
QModelIndex index = m_contactsListView->currentIndex();
diff --git a/main-widget.h b/main-widget.h
index daa6559..6c45763 100644
--- a/main-widget.h
+++ b/main-widget.h
@@ -78,6 +78,9 @@ public Q_SLOTS:
void toggleSearchWidget(bool show);
void setCustomPresenceMessage(const QString &message);
void showSettingsKCM();
+ void onAddContactRequest();
+ void onAddContactRequestFoundContacts(Tp::PendingOperation *operation);
+
// void startAudioChannel();
// void startVideoChannel();
@@ -103,4 +106,4 @@ private:
};
-#endif // Header guard
\ No newline at end of file
+#endif // Header guard
--
ktp-contact-list packaging
More information about the pkg-kde-commits
mailing list