[SCM] ktp-contact-runner packaging branch, master, updated. debian/15.12.1-2-244-g38a1f58

Maximiliano Curia maxy at moszumanska.debian.org
Sat May 28 17:50:26 UTC 2016


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

The following commit has been merged in the master branch:
commit dc502a40bec543bbec341667bea703ab1a53562e
Author: Dan Vrátil <dan at progdan.cz>
Date:   Sun Apr 1 17:51:22 2012 +0200

    Bug #297052 - KTP Runner crashes on Qt 4.8.1
    
    Resolved by removing the proxy model. The items in source model are now matched manually.
    
    REVIEW: 104458
---
 src/contactrunner.cpp | 95 ++++++++++++++++++++++++++++++++++-----------------
 src/contactrunner.h   | 10 +++---
 2 files changed, 69 insertions(+), 36 deletions(-)

diff --git a/src/contactrunner.cpp b/src/contactrunner.cpp
index e16e134..5b4f19e 100644
--- a/src/contactrunner.cpp
+++ b/src/contactrunner.cpp
@@ -36,6 +36,7 @@
 #include <TelepathyQt/ContactCapabilities>
 
 #include <KTp/Models/accounts-model-item.h>
+#include <KTp/Models/accounts-filter-model.h>
 #include <KTp/Models/contact-model-item.h>
 #include <KTp/presence.h>
 
@@ -45,8 +46,7 @@ Q_DECLARE_METATYPE(QModelIndex);
 
 ContactRunner::ContactRunner(QObject *parent, const QVariantList &args):
     Plasma::AbstractRunner(parent, args),
-    m_accountsModel(0),
-    m_proxyModel(0)
+    m_accountsModel(0)
 {
     Q_UNUSED(args);
 
@@ -106,13 +106,6 @@ void ContactRunner::accountManagerReady(Tp::PendingOperation *operation)
 
     m_accountsModel = new AccountsModel(this);
     m_accountsModel->setAccountManager(m_accountManager);
-
-    m_proxyModel = new AccountsFilterModel(this);
-    m_proxyModel->setSourceModel(m_accountsModel);
-    m_proxyModel->setSortMode(AccountsFilterModel::DoNotSort);
-    m_proxyModel->setFilterKeyColumn(0);
-    m_proxyModel->setDisplayNameFilterMatchFlags(Qt::MatchContains | Qt::MatchRecursive);
-    m_proxyModel->setPresenceTypeFilterFlags(AccountsFilterModel::ShowAll);
 }
 
 QList< QAction* > ContactRunner::actionsForMatch(const Plasma::QueryMatch &match)
@@ -165,57 +158,60 @@ void ContactRunner::match(Plasma::RunnerContext &context)
         return;
     }
 
-    if (!m_accountsModel || !m_proxyModel || !m_accountManager->isReady()) {
+    if (!m_accountsModel || !m_accountManager->isReady()) {
         return;
     }
 
     QAction *defaultAction;
-    QString contactName;
+    QString contactQuery;
+    AccountsFilterModel::CapabilityFilterFlag filterFlag;
     if (term.startsWith("chat ", Qt::CaseInsensitive)) {
         defaultAction = action("start-text-chat");
-        m_proxyModel->setCapabilityFilterFlags(AccountsFilterModel::FilterByTextChatCapability);
-        contactName = term.mid(5).trimmed();
+        filterFlag = AccountsFilterModel::FilterByTextChatCapability;
+        contactQuery = term.mid(5).trimmed();
     } else if (term.startsWith("audiocall ", Qt::CaseInsensitive)) {
         defaultAction = action("start-audio-call");
-        m_proxyModel->setCapabilityFilterFlags(AccountsFilterModel::FilterByAudioCallCapability);
-        contactName = term.mid(10).trimmed();
+        filterFlag = AccountsFilterModel::FilterByAudioCallCapability;
+        contactQuery = term.mid(10).trimmed();
     } else if (term.startsWith("videocall ", Qt::CaseInsensitive)) {
         defaultAction = action("start-video-call");
-        m_proxyModel->setCapabilityFilterFlags(AccountsFilterModel::FilterByVideoCallCapability);
-        contactName = term.mid(10).trimmed();
+        filterFlag = AccountsFilterModel::FilterByVideoCallCapability;
+        contactQuery = term.mid(10).trimmed();
     } else if (term.startsWith("sendfile ", Qt::CaseInsensitive)) {
         defaultAction = action("start-file-transfer");
-        m_proxyModel->setCapabilityFilterFlags(AccountsFilterModel::FilterByFileTransferCapability);
-        contactName = term.mid(9).trimmed();
+        filterFlag = AccountsFilterModel::FilterByFileTransferCapability;
+        contactQuery = term.mid(9).trimmed();
     } else if (term.startsWith("sharedesktop ", Qt::CaseInsensitive)) {
         defaultAction = action("start-desktop-sharing");
-        m_proxyModel->setCapabilityFilterFlags(AccountsFilterModel::FilterByDesktopSharingCapability);
-        contactName = term.mid(13).trimmed();
+        filterFlag = AccountsFilterModel::FilterByDesktopSharingCapability;
+        contactQuery = term.mid(13).trimmed();
     } else {
         defaultAction = action("start-text-chat");
-        m_proxyModel->clearCapabilityFilterFlags();
-        contactName = term;
+        filterFlag = AccountsFilterModel::DoNotFilterByCapability;
+        contactQuery = term;
     }
 
-    m_proxyModel->setDisplayNameFilterString(contactName);
-
-    int accountsCnt = m_proxyModel->rowCount();
-    kDebug() << "Matching result in" << accountsCnt << "accounts";
+    int accountsCnt = m_accountsModel->rowCount();
     for (int i = 0; (i < accountsCnt) && context.isValid(); i++) {
 
-        QModelIndex accountIndex = m_proxyModel->index(i, 0);
-
-        int contactsCount = m_proxyModel->rowCount(accountIndex);
-        kDebug() << "Matching results in" << accountIndex.data(AccountsModel::DisplayNameRole).toString() << ":" << contactsCount;
+        QModelIndex accountIndex = m_accountsModel->index(i, 0);
 
+        int contactsCount = m_accountsModel->rowCount(accountIndex);
         for (int j = 0; (j < contactsCount) && context.isValid(); j++) {
 
             Plasma::QueryMatch match(this);
             qreal relevance = 0.1;
 
-            QModelIndex contactIndex = m_proxyModel->index(j, 0, accountIndex);
+            QModelIndex contactIndex = m_accountsModel->index(j, 0, accountIndex);
+
+            if (!hasCapability(contactIndex, filterFlag)) {
+                continue;
+            }
 
             QString name = contactIndex.data(AccountsModel::AliasRole).toString();
+            if (!name.contains(contactQuery, Qt::CaseInsensitive)) {
+                continue;
+            }
 
             match.setText(name.append(" (%1)").arg(accountIndex.data(AccountsModel::DisplayNameRole).toString()));
             match.setId(accountIndex.data(AccountsModel::IdRole).toString() + "," +
@@ -356,4 +352,39 @@ void ContactRunner::run(const Plasma::RunnerContext &context, const Plasma::Quer
     }
 }
 
+bool ContactRunner::hasCapability(const QModelIndex &contact, AccountsFilterModel::CapabilityFilterFlag capability) const
+{
+    if (capability == AccountsFilterModel::DoNotFilterByCapability) {
+        return true;
+    }
+
+    if ((capability == AccountsFilterModel::FilterByTextChatCapability) &&
+        contact.data(AccountsModel::TextChatCapabilityRole).toBool()) {
+        return true;
+    }
+
+    if ((capability == AccountsFilterModel::FilterByAudioCallCapability) &&
+        contact.data(AccountsModel::AudioCallCapabilityRole).toBool()) {
+        return true;
+    }
+
+    if ((capability == AccountsFilterModel::FilterByVideoCallCapability) &&
+        contact.data(AccountsModel::VideoCallCapabilityRole).toBool()) {
+        return true;
+    }
+
+    if ((capability == AccountsFilterModel::FilterByFileTransferCapability) &&
+        contact.data(AccountsModel::FileTransferCapabilityRole).toBool()) {
+        return true;
+    }
+
+    if ((capability == AccountsFilterModel::FilterByDesktopSharingCapability) &&
+        contact.data(AccountsModel::DesktopSharingCapabilityRole).toBool()) {
+        return true;
+    }
+
+    return false;
+}
+
+
 #include "contactrunner.moc"
diff --git a/src/contactrunner.h b/src/contactrunner.h
index 8a9a183..2ca62b0 100644
--- a/src/contactrunner.h
+++ b/src/contactrunner.h
@@ -18,13 +18,15 @@
 #ifndef KTPCONTACTRUNNER_H
 #define KTPCONTACTRUNNER_H
 
+#include <QtCore/QModelIndex>
+
 #include <Plasma/AbstractRunner>
 #include <KIcon>
 
 #include <KTp/Models/accounts-model.h>
-#include <KTp/Models/accounts-filter-model.h>
 #include <KTp/Models/groups-model.h>
-#include <KTp/Models/flat-model-proxy.h>
+#include <KTp/Models/accounts-filter-model.h>
+
 #include <TelepathyQt/AccountManager>
 
 class QAction;
@@ -51,9 +53,9 @@ class ContactRunner : public Plasma::AbstractRunner
     void accountManagerReady(Tp::PendingOperation *operation);
 
   private:
+    bool hasCapability(const QModelIndex &contact, AccountsFilterModel::CapabilityFilterFlag capability) const;
+
     AccountsModel *m_accountsModel;
-    FlatModelProxy *m_flatModelProxy;
-    AccountsFilterModel *m_proxyModel;
     Tp::AccountManagerPtr m_accountManager;
 };
 

-- 
ktp-contact-runner packaging



More information about the pkg-kde-commits mailing list