[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