diff options
author | Kitsune Ral <Kitsune-Ral@users.sf.net> | 2017-03-08 13:16:37 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-08 13:16:37 +0900 |
commit | ba5ca3c88a20926f2be06872f530d9da12d5a062 (patch) | |
tree | 1d8b69e433dacf51427b4e3dcab9545374c85116 /events | |
parent | 2cc1fc52baa28c4896080069a985c200517ad7cd (diff) | |
parent | 81b6d940218a212a37e3c600c66fbe9a7476f433 (diff) | |
download | libquotient-ba5ca3c88a20926f2be06872f530d9da12d5a062.tar.gz libquotient-ba5ca3c88a20926f2be06872f530d9da12d5a062.zip |
Merge pull request #53 from Fxrh/kitsune-fix-adding-events
Fix adding events to the timeline
Diffstat (limited to 'events')
-rw-r--r-- | events/event.cpp | 24 | ||||
-rw-r--r-- | events/event.h | 48 | ||||
-rw-r--r-- | events/roommessageevent.cpp | 1 | ||||
-rw-r--r-- | events/unknownevent.cpp | 2 |
4 files changed, 14 insertions, 61 deletions
diff --git a/events/event.cpp b/events/event.cpp index 43604b23..8ad56f1b 100644 --- a/events/event.cpp +++ b/events/event.cpp @@ -23,7 +23,7 @@ #include <QtCore/QDateTime> #include <QtCore/QDebug> -#include "../logging_util.h" +#include "util.h" #include "roommessageevent.h" #include "roomnameevent.h" #include "roomaliasesevent.h" @@ -114,31 +114,31 @@ Event* Event::fromJson(const QJsonObject& obj) bool Event::parseJson(const QJsonObject& obj) { d->originalJson = QString::fromUtf8(QJsonDocument(obj).toJson()); + d->id = obj.value("event_id").toString(); + d->roomId = obj.value("room_id").toString(); + d->senderId = obj.value("sender").toString(); bool correct = (d->type != EventType::Unknown); - if ( d->type != EventType::Unknown && - d->type != EventType::Typing && + if ( d->type != EventType::Typing && d->type != EventType::Receipt ) { - if( obj.contains("event_id") ) + if (d->id.isEmpty()) { - d->id = obj.value("event_id").toString(); - } else { correct = false; - qDebug() << "Event: can't find event_id"; + qDebug() << "Event: can't find event_id; event dump follows"; qDebug() << formatJson << obj; } if( obj.contains("origin_server_ts") ) { - d->timestamp = QDateTime::fromMSecsSinceEpoch( + d->timestamp = QDateTime::fromMSecsSinceEpoch( static_cast<qint64>(obj.value("origin_server_ts").toDouble()), Qt::UTC ); - } else { + } + else if (d->type != EventType::Unknown) + { correct = false; - qDebug() << "Event: can't find ts"; + qDebug() << "Event: can't find ts; event dump follows"; qDebug() << formatJson << obj; } } - d->roomId = obj.value("room_id").toString(); - d->senderId = obj.value("sender").toString(); return correct; } diff --git a/events/event.h b/events/event.h index 12b0ebd5..f60dfb64 100644 --- a/events/event.h +++ b/events/event.h @@ -60,52 +60,4 @@ namespace QMatrixClient using Events = QVector<Event*>; Events eventsFromJson(const QJsonArray& json); - - /** - * @brief Lookup a value by a key in a varargs list - * - * The below overloaded function template takes the value of its first - * argument (selector) as a key and searches for it in the key-value map - * passed in a varargs list (every next pair of arguments forms a key-value - * pair). If a match is found, the respective value is returned; otherwise, - * the last value (fallback) is returned. - * - * All options should be of the same type or implicitly castable to the - * type of the first option. Note that pointers to methods of different - * classes are of different object types, in particular. - * - * Below is an example of usage to select a parser depending on contents of - * a JSON object: - * {@code - * auto parser = lookup(obj.value["type"].toString(), - * "type1", fn1, - * "type2", fn2, - * fallbackFn); - * parser(obj); - * } - * - * The implementation is based on tail recursion; every recursion step - * removes 2 arguments (match and option). There's no selector value for the - * fallback option (the last one); therefore, the total number of lookup() - * arguments should be even: selector + n key-value pairs + fallback - * - * @note Beware of calling lookup() with a <code>const char*</code> selector - * (the first parameter) - most likely it won't do what you expect because - * of shallow comparison. - */ - template <typename ValueT, typename SelectorT, typename KeyT, typename... Ts> - ValueT lookup(SelectorT selector, KeyT key, ValueT value, Ts... remainingMapping) - { - if( selector == key ) - return value; - - // Drop the failed key-value pair and recurse with 2 arguments less. - return lookup(selector, remainingMapping...); - } - - template <typename SelectorT, typename ValueT> - ValueT lookup(SelectorT/*unused*/, ValueT fallback) - { - return fallback; - } } diff --git a/events/roommessageevent.cpp b/events/roommessageevent.cpp index bb28d682..34315363 100644 --- a/events/roommessageevent.cpp +++ b/events/roommessageevent.cpp @@ -17,6 +17,7 @@ */ #include "roommessageevent.h" +#include "util.h" #include <QtCore/QMimeDatabase> #include <QtCore/QDebug> diff --git a/events/unknownevent.cpp b/events/unknownevent.cpp index 90551409..70dcfcbb 100644 --- a/events/unknownevent.cpp +++ b/events/unknownevent.cpp @@ -21,7 +21,7 @@ #include <QtCore/QJsonDocument> #include <QtCore/QDebug> -#include "../logging_util.h" +#include "util.h" using namespace QMatrixClient; |