[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [ktp-common-internals/mklapetek/SpaceBar] KTp/Declarative: [declarative] Move the PersonData to the 
From:       Martin Klapetek <mklapetek () kde ! org>
Date:       2016-03-16 0:16:18
Message-ID: E1afz8M-0005bD-I7 () scm ! kde ! org
[Download RAW message or body]

Git commit 3358f7dadf150eb550758018699ff14ba1b1ee96 by Martin Klapetek.
Committed on 15/03/2016 at 22:46.
Pushed by mklapetek into branch 'mklapetek/SpaceBar'.

[declarative] Move the PersonData to the Conversation

Which stops creating it in every data() call. However this makes for
quite a bad API of Conversation, so a refactor is coming up.

M  +31   -0    KTp/Declarative/conversation.cpp
M  +6    -0    KTp/Declarative/conversation.h
M  +15   -17   KTp/Declarative/mainlogmodel.cpp

http://commits.kde.org/telepathy-common-internals/3358f7dadf150eb550758018699ff14ba1b1ee96


diff --git a/KTp/Declarative/conversation.cpp b/KTp/Declarative/conversation.cpp
index 4773171..73b10d1 100644
--- a/KTp/Declarative/conversation.cpp
+++ b/KTp/Declarative/conversation.cpp
@@ -39,6 +39,9 @@ class Conversation::ConversationPrivate
           valid = false;
           isGroupChat = false;
           contactAlias = QString();
+
+          // Construct empty/invalid PersonData
+          personData = new KPeople::PersonData(QString());
       }
 
     MessagesModel *messages;
@@ -46,9 +49,11 @@ class Conversation::ConversationPrivate
     //and not handling it.
     bool delegated;
     bool valid;
+    QString contactId;
     QString contactAlias;
     Tp::AccountPtr account;
     QTimer *pausedStateTimer;
+    KPeople::PersonData *personData;
     // May be null for group chats.
     KTp::ContactPtr targetContact;
     bool isGroupChat;
@@ -102,6 +107,9 @@ void Conversation::setTextChannel(const Tp::TextChannelPtr \
&channel)  } else {
             d->isGroupChat = false;
             d->targetContact = \
KTp::ContactPtr::qObjectCast(channel->targetContact()); +            if \
(!d->personData->isValid()) { +                d->personData = new \
KPeople::PersonData(QStringLiteral("ktp://") + d->account->objectPath() + \
QStringLiteral("?") + d->targetContact->id()); +            }
 
             connect(d->targetContact.constData(), SIGNAL(aliasChanged(QString)), \
                SIGNAL(titleChanged()));
             connect(d->targetContact.constData(), \
SIGNAL(presenceChanged(Tp::Presence)), SIGNAL(presenceIconChanged())); @@ -112,6 \
+120,7 @@ void Conversation::setTextChannel(const Tp::TextChannelPtr &channel)  \
Q_EMIT titleChanged();  Q_EMIT presenceIconChanged();
         Q_EMIT validityChanged(d->valid);
+        Q_EMIT personDataChanged();
     }
 }
 
@@ -124,9 +133,18 @@ void Conversation::setContactData(const QString &contactId, \
const QString &conta  
     qDebug() << "Setting contact data";
     d->contactAlias = contactAlias;
+    d->contactId = contactId;
     d->messages->setContactData(contactId, contactAlias);
 
     Q_EMIT titleChanged();
+
+    // If no PersonData yet and a non-null account is set,
+    // create new PersonData
+    if (!d->personData->isValid() && !d->account.isNull()) {
+        d->personData = new KPeople::PersonData(QStringLiteral("ktp://") + \
d->account->objectPath() + QStringLiteral("?") + d->targetContact->id()); +
+        Q_EMIT personDataChanged();
+    }
 }
 
 Tp::TextChannelPtr Conversation::textChannel() const
@@ -206,6 +224,14 @@ void Conversation::setAccount(const Tp::AccountPtr &account)
 {
     d->messages->setAccount(account);
     d->account = account;
+
+    // If no PersonData yet and a non-null account is set,
+    // create new PersonData
+    if (!d->personData->isValid() && !d->account.isNull()) {
+        d->personData = new KPeople::PersonData(QStringLiteral("ktp://") + \
d->account->objectPath() + QStringLiteral("?") + d->contactId); +
+        Q_EMIT personDataChanged();
+    }
 }
 
 bool Conversation::isValid()
@@ -306,3 +332,8 @@ bool Conversation::hasUnreadMessages() const
 
     return false;
 }
+
+KPeople::PersonData* Conversation::personData() const
+{
+    return d->personData;
+}
diff --git a/KTp/Declarative/conversation.h b/KTp/Declarative/conversation.h
index 86f8796..7ba27ac 100644
--- a/KTp/Declarative/conversation.h
+++ b/KTp/Declarative/conversation.h
@@ -25,6 +25,8 @@
 #include <TelepathyQt/Account>
 #include <TelepathyQt/TextChannel>
 
+#include <KPeople/PersonData>
+
 #include "messages-model.h"
 
 class MessagesModel;
@@ -39,6 +41,7 @@ class Conversation : public QObject
     Q_PROPERTY(QIcon avatar READ avatar NOTIFY avatarChanged)
     Q_PROPERTY(Tp::Account *account READ accountObject CONSTANT)
     Q_PROPERTY(KTp::ContactPtr targetContact READ targetContact CONSTANT)
+    Q_PROPERTY(KPeople::PersonData *personData READ personData NOTIFY \
                personDataChanged)
     Q_PROPERTY(bool hasUnreadMessages READ hasUnreadMessages NOTIFY \
unreadMessagesChanged)  
 public:
@@ -66,6 +69,8 @@ public:
     Tp::AccountPtr account() const;
     Tp::Account* accountObject() const;
 
+    KPeople::PersonData* personData() const;
+
     void setAccount(const Tp::AccountPtr &account);
     bool isValid();
 
@@ -79,6 +84,7 @@ Q_SIGNALS:
     void conversationCloseRequested();
     void unreadMessagesChanged();
     void lastMessageChanged();
+    void personDataChanged();
 
 public Q_SLOTS:
     void delegateToProperClient();
diff --git a/KTp/Declarative/mainlogmodel.cpp b/KTp/Declarative/mainlogmodel.cpp
index f14e99e..6362119 100644
--- a/KTp/Declarative/mainlogmodel.cpp
+++ b/KTp/Declarative/mainlogmodel.cpp
@@ -103,30 +103,16 @@ QVariant MainLogModel::data(const QModelIndex &index, int role) \
const  const int row = index.row();
 
     switch (role) {
-        case MainLogModel::ContactDisplayNameRole:
         case MainLogModel::ContactIdRole:
-        case MainLogModel::PersonUriRole:
-        {
-            const QString contactId = m_logItems.at(row).targetContact;
-            if (role == MainLogModel::ContactIdRole) {
-                return contactId;
-            }
-
-            // TODO: Cache this or something
-            const KPeople::PersonData person(QStringLiteral("ktp://") + \
                m_logItems.at(row).accountObjectPath.mid(35) + QStringLiteral("?") + \
                contactId);
-
-            if (role == MainLogModel::PersonUriRole) {
-                return person.personUri();
-            } else if (role == MainLogModel::ContactDisplayNameRole) {
-                return person.name();
-            }
-        }
+            return m_logItems.at(row).targetContact;
         case MainLogModel::AccountIdRole:
             return m_logItems.at(row).accountObjectPath.mid(35);
         case MainLogModel::LastMessageDateRole:
         case MainLogModel::LastMessageTextRole:
         case MainLogModel::ConversationRole:
         case MainLogModel::HasUnreadMessagesRole:
+        case MainLogModel::ContactDisplayNameRole:
+        case MainLogModel::PersonUriRole:
         {
             Conversation *conversation = m_logItems.at(row).conversation;
             if (conversation == 0) {
@@ -147,6 +133,18 @@ QVariant MainLogModel::data(const QModelIndex &index, int role) \
const  return QVariant::fromValue(conversation);
             }
 
+            if (!conversation->personData()->isValid()) {
+                if (role == MainLogModel::PersonUriRole || role == \
MainLogModel::ContactDisplayNameRole) { +                    return QVariant();
+                }
+            } else {
+                if (role == MainLogModel::PersonUriRole) {
+                    return conversation->personData()->personUri();
+                } else if (role == MainLogModel::ContactDisplayNameRole) {
+                    return conversation->personData()->name();
+                }
+            }
+
             if (!conversation->isValid()) {
                 if (role == MainLogModel::HasUnreadMessagesRole) {
                     return false;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic