[SCM] ktp-text-ui packaging branch, master, updated. debian/15.12.1-1-1918-gdf4b0ec
Maximiliano Curia
maxy at moszumanska.debian.org
Sat May 28 00:24:44 UTC 2016
Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-text-ui.git;a=commitdiff;h=11c4d7d
The following commit has been merged in the master branch:
commit 11c4d7d12905a50b93d11a300ecf6313b24c7c3b
Author: Marcin Ziemiński <zieminn at gmail.com>
Date: Sat Aug 2 00:17:57 2014 +0200
Fixed acking otr-event messages. Added icon notifications about OTR status change.
---
lib/channel-adapter.cpp | 65 +++++++++++++++++++++++++++++++++++++++++++------
lib/chat-widget.cpp | 15 +++++++++---
2 files changed, 69 insertions(+), 11 deletions(-)
diff --git a/lib/channel-adapter.cpp b/lib/channel-adapter.cpp
index c2f5d32..75a0c79 100644
--- a/lib/channel-adapter.cpp
+++ b/lib/channel-adapter.cpp
@@ -29,17 +29,41 @@
typedef QSharedPointer<Tp::Client::ChannelProxyInterfaceOTRInterface> OTRProxyPtr;
- uint getId(const Tp::MessagePartList &message) {
- return message.first()[QLatin1String("pending-message-id")].variant().toUInt(NULL);
+namespace
+{
+ int getId(const Tp::ReceivedMessage &recvMes)
+ {
+ return recvMes.header()[QLatin1String("pending-message-id")].variant().toUInt(NULL);
}
+}
class OTRMessage : public Tp::ReceivedMessage
{
public:
+ OTRMessage(const Tp::ReceivedMessage &recMes)
+ : Tp::ReceivedMessage(recMes)
+ {
+ }
+
OTRMessage(const Tp::MessagePartList &message, const Tp::TextChannelPtr channel)
: Tp::ReceivedMessage(message, channel)
{
}
+
+ bool hasId() const
+ {
+ return header().contains(QLatin1String("pending-message-id"));
+ }
+
+ int getId() const
+ {
+ return ::getId(*this);
+ }
+
+ void setId(int id)
+ {
+ header()[QLatin1String("pending-message-id")] = QDBusVariant(id);
+ }
};
struct ChannelAdapter::Private
@@ -59,6 +83,7 @@ struct ChannelAdapter::Private
QString remoteFp;
QMap<uint, OTRMessage> messages;
+ QMap<uint, OTRMessage> otrEvents;
};
ChannelAdapter::ChannelAdapter(const Tp::TextChannelPtr &textChannel, ChatWidget *parent)
@@ -229,7 +254,21 @@ void ChannelAdapter::acknowledge(const QList<Tp::ReceivedMessage> &messages)
kDebug();
if(isOTRsuppored()) {
- d->otrProxy->AcknowledgePendingMessages(Tp::Utils::getPendingMessagesIDs(messages));
+ QList<Tp::ReceivedMessage> toAck;
+ QList<Tp::ReceivedMessage> eventsToRemove;
+
+ Q_FOREACH(const Tp::ReceivedMessage &mes, messages) {
+ if(Tp::Utils::isOtrEvent(mes)) {
+ d->otrEvents.remove(getId(mes));
+ eventsToRemove << mes;
+ } else {
+ toAck << mes;
+ }
+ }
+ d->otrProxy->AcknowledgePendingMessages(Tp::Utils::getPendingMessagesIDs(toAck));
+ Q_FOREACH(const Tp::ReceivedMessage &mes, eventsToRemove) {
+ Q_EMIT pendingMessageRemoved(mes);
+ }
} else {
d->textChannel->acknowledge(messages);
}
@@ -284,6 +323,9 @@ QList<Tp::ReceivedMessage> ChannelAdapter::messageQueue() const
Q_FOREACH(const Tp::ReceivedMessage &m, d->messages) {
messages << m;
}
+ Q_FOREACH(const Tp::ReceivedMessage &m, d->otrEvents) {
+ messages << m;
+ }
return messages;
} else {
return d->textChannel->messageQueue();
@@ -293,13 +335,22 @@ QList<Tp::ReceivedMessage> ChannelAdapter::messageQueue() const
void ChannelAdapter::onMessageReceived(const Tp::MessagePartList &message)
{
kDebug();
- const uint id = getId(message);
OTRMessage recvMes(message, d->textChannel);
- if(!d->messages.contains(id)) {
- d->messages.insert(id, recvMes);
+ if(recvMes.hasId()) {
+ const int id = recvMes.getId();
+ if(!d->messages.contains(id)) {
+ d->messages.insert(id, recvMes);
+ Q_EMIT messageReceived(recvMes);
+ } else {
+ kWarning() << "Message already in the queue. Id: " << id;
+ }
+ } else if (Tp::Utils::isOtrEvent(recvMes)) {
+ const int id = d->otrEvents.size();
+ recvMes.setId(d->otrEvents.size());
+ d->otrEvents.insert(id, recvMes);
Q_EMIT messageReceived(recvMes);
} else {
- kWarning() << "Message already in the queue. Id: " << id;
+ kWarning() << "Message has not id and is not an OTR event either";
}
}
diff --git a/lib/chat-widget.cpp b/lib/chat-widget.cpp
index 8bb6d20..a6b1d03 100644
--- a/lib/chat-widget.cpp
+++ b/lib/chat-widget.cpp
@@ -85,7 +85,8 @@ public:
shareImageMenuAction(0),
messageWidgetSwitchOnlineAction(0),
logsLoaded(false),
- exchangedMessagesCount(0)
+ exchangedMessagesCount(0),
+ newOTRstatus(false)
{
}
/** Stores whether the channel is ready with all contacts upgraded*/
@@ -112,6 +113,7 @@ public:
QTimer *pausedStateTimer;
bool logsLoaded;
uint exchangedMessagesCount;
+ bool newOTRstatus;
QList< Tp::OutgoingFileTransferChannelPtr > tmpFileTransfers;
@@ -621,7 +623,7 @@ void ChatWidget::onHistoryFetched(const QList<KTp::Message> &messages)
int ChatWidget::unreadMessageCount() const
{
- return d->channel.messageQueue().size();
+ return d->channel.messageQueue().size() + (d->newOTRstatus ? 1 : 0);
}
void ChatWidget::acknowledgeMessages()
@@ -632,6 +634,10 @@ void ChatWidget::acknowledgeMessages()
//acknowledge everything in the message queue.
d->channel.acknowledge(d->channel.messageQueue());
}
+ if(d->newOTRstatus) {
+ d->newOTRstatus = false;
+ Q_EMIT unreadMessagesChanged();
+ }
}
void ChatWidget::updateSendMessageShortcuts(const KShortcut &shortcuts)
@@ -697,7 +703,7 @@ void ChatWidget::authenticateBuddy()
if(result.isError()) {
kWarning() << "Could not set fingerprint trusted because of: " << result.error().name()
<< " -> " << result.error().message();
- KMessageBox::error(this, i18n("%1", result.error().message()));
+ KMessageBox::error(this, i18n(result.error().message().toLocal8Bit()));
}
}
@@ -711,6 +717,7 @@ void ChatWidget::setupOTR()
void ChatWidget::onOTRTrustLevelChanged(Tp::OTRTrustLevel trustLevel, Tp::OTRTrustLevel previous)
{
+ d->newOTRstatus = true;
switch(trustLevel) {
case Tp::OTRTrustLevelUnverified:
if(previous == Tp::OTRTrustLevelPrivate) {
@@ -735,8 +742,8 @@ void ChatWidget::onOTRTrustLevelChanged(Tp::OTRTrustLevel trustLevel, Tp::OTRTru
default: break;
}
+ Q_EMIT unreadMessagesChanged();
Q_EMIT otrStatusChanged(OtrStatus(trustLevel));
-
}
void ChatWidget::onOTRsessionRefreshed()
--
ktp-text-ui packaging
More information about the pkg-kde-commits
mailing list