[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