[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:41 UTC 2016


Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-contact-list.git;a=commitdiff;h=001a274

The following commit has been merged in the master branch:
commit 001a274600708c17b183cb433a273275d20750d3
Author: Keith Rusler <xzekecomax at gmail.com>
Date:   Mon Mar 21 11:58:46 2011 +0100

    Add contact context menu by Keith Rusler <comawhite>
---
 accounts-model.cpp |  11 ++++
 accounts-model.h   |   2 +
 main-widget.cpp    | 185 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 main-widget.h      |  10 +++
 4 files changed, 206 insertions(+), 2 deletions(-)

diff --git a/accounts-model.cpp b/accounts-model.cpp
index 266828a..366c46f 100644
--- a/accounts-model.cpp
+++ b/accounts-model.cpp
@@ -234,6 +234,17 @@ Tp::AccountPtr AccountsModel::accountForIndex(const QModelIndex &index) const
     }
 }
 
+Tp::ContactPtr AccountsModel::contactForIndex(const QModelIndex& index) const
+{
+    TreeNode *contactNode = mPriv->node(index);
+    ContactModelItem *item = qobject_cast<ContactModelItem *>(contactNode);
+    if (item) {
+        return item->contact();
+    } else {
+        return Tp::ContactPtr();
+    }
+}
+
 Tp::AccountPtr AccountsModel::accountForContactIndex(const QModelIndex& index) const
 {
     TreeNode *contactNode = mPriv->node(index);
diff --git a/accounts-model.h b/accounts-model.h
index 319d537..42cc2b2 100644
--- a/accounts-model.h
+++ b/accounts-model.h
@@ -94,6 +94,8 @@ public:
     virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
     virtual QVariant data(const QModelIndex &index, int role) const;
     Tp::AccountPtr accountForIndex(const QModelIndex &index) const;
+    Tp::ContactPtr contactForIndex(const QModelIndex &index) const;
+
     Tp::AccountPtr accountForContactIndex(const QModelIndex &index) const;
 
     virtual Qt::ItemFlags flags(const QModelIndex &index) const;
diff --git a/main-widget.cpp b/main-widget.cpp
index 1b64258..e4ac02f 100644
--- a/main-widget.cpp
+++ b/main-widget.cpp
@@ -34,9 +34,11 @@
 #include <TelepathyQt4/PendingChannelRequest>
 #include <TelepathyQt4/ClientRegistrar>
 #include <TelepathyQt4/Constants>
+#include <TelepathyQt4/ContactManager>
 
 #include <KDebug>
 #include <KUser>
+#include <KMenu>
 
 #include "main-widget.h"
 #include "ui_main-widget.h"
@@ -431,11 +433,190 @@ void MainWidget::toggleSearchWidget(bool show)
     }
 }
 
-void MainWidget::onCustomContextMenuRequested(const QPoint& point)
+void MainWidget::onCustomContextMenuRequested(const QPoint &)
 {
-    Q_UNUSED(point);
+    QModelIndex index = m_contactsListView->currentIndex();
+    Tp::ContactPtr contact = m_model->contactForIndex(m_modelFilter->mapToSource(index));
+    if (contact.isNull()) {
+        kDebug() << "Contact is nulled";
+        return;
+    }
+
+    Tp::AccountPtr account = m_model->accountForContactIndex(m_modelFilter->mapToSource(index));
+    if (account.isNull()) {
+        kDebug() << "Account is nulled";
+        return;
+    }
+
+    QScopedPointer<KMenu> menu(new KMenu);
+    menu->addTitle(contact->alias());
+    QAction* action = menu->addAction(i18n("Start Chat..."));
+    action->setIcon(KIcon("mail-message-new"));
+    connect(action, SIGNAL(triggered(bool)),
+            SLOT(slotStartTextChat()));
+
+    Tp::ConnectionPtr accountConnection = account->connection();
+    if (accountConnection.isNull()) {
+        kDebug() << "Account connection is nulled.";
+        return;
+    }
+
+    if (accountConnection->capabilities().streamedMediaAudioCalls()) {
+        action = menu->addAction(i18n("Start Audio Call..."));
+        action->setIcon(KIcon("voicecall"));
+        action->setDisabled(true);
+    }
+
+    if (accountConnection->capabilities().streamedMediaVideoCalls()) {
+        action = menu->addAction(i18n("Start Video Call..."));
+        action->setIcon(KIcon("webcamsend"));
+        action->setDisabled(true);
+    }
+
+    if (accountConnection->capabilities().fileTransfers()) {
+        action = menu->addAction(i18n("Send File..."));
+        action->setDisabled(true);
+    }
+    menu->addSeparator();
+
+    if (accountConnection->actualFeatures().contains(Tp::Connection::FeatureRosterGroups)) {
+        QMenu* groupAddMenu = menu->addMenu(i18n("Move to Group"));
+
+        QStringList currentGroups = contact->groups();
+        QStringList allGroups = accountConnection->contactManager()->allKnownGroups();
+        foreach (const QString &group, currentGroups) {
+            allGroups.removeAll(group);
+        }
+
+        groupAddMenu->addAction(i18n("Create New Group..."));
+        groupAddMenu->addSeparator();
+
+        foreach (const QString &group, allGroups) {
+            connect(groupAddMenu->addAction(group), SIGNAL(triggered(bool)),
+                    SLOT(slotAddContactToGroupTriggered()));
+        }
+    } else {
+        kDebug() << "Unable to support Groups";
+    }
+
+    //menu->addSeparator();
+
+    // TODO Remove when Telepathy actually supports blocking.
+    /*if (contact->isBlocked()) {
+     *        action = menu->addAction(i18n("Unlock User"));
+     *        connect(action, SIGNAL(triggered(bool)),
+     *                SLOT(slotUnblockContactTriggered()));
+} else {
+    action = menu->addAction(i18n("Block User"));
+    connect(action, SIGNAL(triggered(bool)),
+    SLOT(slotBlockContactTriggered()));
+}*/
+
+    menu->exec(QCursor::pos());
+}
+
+void MainWidget::slotAddContactToGroupFinished(Tp::PendingOperation* operation)
+{
+    if (operation->isError()) {
+        kDebug() << operation->errorName();
+        kDebug() << operation->errorMessage();
+    }
+}
+
+void MainWidget::slotAddContactToGroupTriggered()
+{
+    QModelIndex index = m_contactsListView->currentIndex();
+    Tp::ContactPtr contact = m_model->contactForIndex(m_modelFilter->mapToSource(index));
+    if (contact.isNull()) {
+        kDebug() << "Contact is nulled";
+        return;
+    }
+
+    QAction *action = qobject_cast<QAction*>(sender());
+    if (!action) {
+        kDebug() << "Invalid action";
+        return;
+    }
+
+    const QStringList currentGroups = contact->groups();
+
+    Tp::PendingOperation* operation = contact->addToGroup(action->text().remove('&'));
+    connect(operation, SIGNAL(finished(Tp::PendingOperation*)),
+            SLOT(slotAddContactToGroupFinished(Tp::PendingOperation*)));
+
+    if (operation) {
+        foreach (const QString &group, currentGroups) {
+            Tp::PendingOperation* operation = contact->removeFromGroup(group);
+            connect(operation, SIGNAL(finished(Tp::PendingOperation*)),
+                    SLOT(slotRemoveContactFromGroupFinished(Tp::PendingOperation*)));
+        }
+    }
 }
 
+void MainWidget::slotBlockContactFinished(Tp::PendingOperation *operation)
+{
+    if (operation->isError()) {
+        kDebug() << operation->errorName();
+        kDebug() << operation->errorMessage();
+    }
+}
+
+void MainWidget::slotBlockContactTriggered()
+{
+    QModelIndex index = m_contactsListView->currentIndex();
+    Tp::ContactPtr contact = m_model->contactForIndex(m_modelFilter->mapToSource(index));
+    if (contact.isNull()) {
+        kDebug() << "Contact is nulled";
+        return;
+    }
+
+    Tp::PendingOperation *operation = contact->block(true);
+    connect(operation, SIGNAL(finished(Tp::PendingOperation*)),
+            SLOT(slotBlockContactFinished(Tp::PendingOperation*)));
+}
+
+void MainWidget::slotRemoveContactFromGroupFinished(Tp::PendingOperation *operation)
+{
+    if (operation->isError()) {
+        kDebug() << operation->errorName();
+        kDebug() << operation->errorMessage();
+    }
+}
+
+void MainWidget::slotStartTextChat()
+{
+    QModelIndex index = m_contactsListView->currentIndex();
+    if (!index.isValid()) {
+        kDebug() << "Invalid index provided.";
+        return;
+    }
+
+    startTextChannel(index);
+}
+
+void MainWidget::slotUnblockContactFinished(Tp::PendingOperation* operation)
+{
+    if (operation->isError()) {
+        kDebug() << operation->errorName();
+        kDebug() << operation->errorMessage();
+    }
+}
+
+void MainWidget::slotUnblockContactTriggered()
+{
+    QModelIndex index = m_contactsListView->currentIndex();
+    Tp::ContactPtr contact = m_model->contactForIndex(m_modelFilter->mapToSource(index));
+    if (contact.isNull()) {
+        kDebug() << "Contact is nulled";
+        return;
+    }
+
+    Tp::PendingOperation *operation = contact->block(false);
+    connect(operation, SIGNAL(finished(Tp::PendingOperation*)),
+            SLOT(slotUnblockContactFinished(Tp::PendingOperation*)));
+}
+
+
 void MainWidget::setCustomPresenceMessage(const QString& message)
 {
     for (int i = 0; i < m_accountButtonsLayout->count() - 1; i++) {
diff --git a/main-widget.h b/main-widget.h
index bedc340..695de4c 100644
--- a/main-widget.h
+++ b/main-widget.h
@@ -82,6 +82,16 @@ public Q_SLOTS:
 
     void onCustomContextMenuRequested(const QPoint &point);
 
+private Q_SLOTS:
+    void slotAddContactToGroupFinished(Tp::PendingOperation *operation);
+    void slotAddContactToGroupTriggered();
+    void slotBlockContactFinished(Tp::PendingOperation *operation);
+    void slotBlockContactTriggered();
+    void slotRemoveContactFromGroupFinished(Tp::PendingOperation *operation);
+    void slotStartTextChat();
+    void slotUnblockContactFinished(Tp::PendingOperation *operation);
+    void slotUnblockContactTriggered();
+
 private:
     AccountsModel          *m_model;
     AccountFilterModel     *m_modelFilter;

-- 
ktp-contact-list packaging



More information about the pkg-kde-commits mailing list