[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