diff options
author | David A Roberts <d@vidr.cc> | 2016-04-12 20:31:20 +1000 |
---|---|---|
committer | David A Roberts <d@vidr.cc> | 2016-04-12 20:31:20 +1000 |
commit | da90b601b06512e23ac66d0b301e1eafaf2b7bc2 (patch) | |
tree | e9c6ef5f5da2430c259f00077b83d275adc1fb29 /events/roommessageevent.cpp | |
parent | 0f6cb38896443cf104aa470eb1822bd2e49143f1 (diff) | |
parent | 00a73167ca455370868f1f82257420f0cb399a15 (diff) | |
download | libquotient-da90b601b06512e23ac66d0b301e1eafaf2b7bc2.tar.gz libquotient-da90b601b06512e23ac66d0b301e1eafaf2b7bc2.zip |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'events/roommessageevent.cpp')
-rw-r--r-- | events/roommessageevent.cpp | 111 |
1 files changed, 100 insertions, 11 deletions
diff --git a/events/roommessageevent.cpp b/events/roommessageevent.cpp index ea03986b..99d17e5c 100644 --- a/events/roommessageevent.cpp +++ b/events/roommessageevent.cpp @@ -30,16 +30,16 @@ class RoomMessageEvent::Private Private() {} QString userId; - QString body; - QString msgtype; + MessageEventType msgtype; QDateTime hsob_ts; + MessageEventContent* content; }; RoomMessageEvent::RoomMessageEvent() : Event(EventType::RoomMessage) , d(new Private) { - + d->content = 0; } RoomMessageEvent::~RoomMessageEvent() @@ -52,14 +52,14 @@ QString RoomMessageEvent::userId() const return d->userId; } -QString RoomMessageEvent::msgtype() const +MessageEventType RoomMessageEvent::msgtype() const { return d->msgtype; } QString RoomMessageEvent::body() const { - return d->body; + return d->content->body; } QDateTime RoomMessageEvent::hsob_ts() const @@ -67,6 +67,11 @@ QDateTime RoomMessageEvent::hsob_ts() const return d->hsob_ts; } +MessageEventContent* RoomMessageEvent::content() const +{ + return d->content; +} + RoomMessageEvent* RoomMessageEvent::fromJson(const QJsonObject& obj) { RoomMessageEvent* e = new RoomMessageEvent(); @@ -80,15 +85,99 @@ RoomMessageEvent* RoomMessageEvent::fromJson(const QJsonObject& obj) if( obj.contains("content") ) { QJsonObject content = obj.value("content").toObject(); - if( content.contains("msgtype") ) + QString msgtype = content.value("msgtype").toString(); + + if( msgtype == "m.text" ) { - e->d->msgtype = content.value("msgtype").toString(); - } else { - qDebug() << "RoomMessageEvent: msgtype not found"; + e->d->msgtype = MessageEventType::Text; + e->d->content = new MessageEventContent(); + } + else if( msgtype == "m.emote" ) + { + e->d->msgtype = MessageEventType::Emote; + e->d->content = new MessageEventContent(); + } + else if( msgtype == "m.notice" ) + { + e->d->msgtype = MessageEventType::Notice; + e->d->content = new MessageEventContent(); + } + else if( msgtype == "m.image" ) + { + e->d->msgtype = MessageEventType::Image; + ImageEventContent* c = new ImageEventContent; + c->url = QUrl(content.value("url").toString()); + QJsonObject info = content.value("info").toObject(); + c->height = info.value("h").toInt(); + c->width = info.value("w").toInt(); + c->size = info.value("size").toInt(); + c->mimetype = info.value("mimetype").toString(); + e->d->content = c; } + else if( msgtype == "m.file" ) + { + e->d->msgtype = MessageEventType::File; + FileEventContent* c = new FileEventContent; + c->filename = content.value("filename").toString(); + c->url = QUrl(content.value("url").toString()); + QJsonObject info = content.value("info").toObject(); + c->size = info.value("size").toInt(); + c->mimetype = info.value("mimetype").toString(); + e->d->content = c; + } + else if( msgtype == "m.location" ) + { + e->d->msgtype = MessageEventType::Location; + LocationEventContent* c = new LocationEventContent; + c->geoUri = content.value("geo_uri").toString(); + c->thumbnailUrl = QUrl(content.value("thumbnail_url").toString()); + QJsonObject info = content.value("thumbnail_info").toObject(); + c->thumbnailHeight = info.value("h").toInt(); + c->thumbnailWidth = info.value("w").toInt(); + c->thumbnailSize = info.value("size").toInt(); + c->thumbnailMimetype = info.value("mimetype").toString(); + e->d->content = c; + } + else if( msgtype == "m.video" ) + { + e->d->msgtype = MessageEventType::Video; + VideoEventContent* c = new VideoEventContent; + c->url = QUrl(content.value("url").toString()); + QJsonObject info = content.value("info").toObject(); + c->height = info.value("h").toInt(); + c->width = info.value("w").toInt(); + c->duration = info.value("duration").toInt(); + c->size = info.value("size").toInt(); + c->thumbnailUrl = QUrl(info.value("thumnail_url").toString()); + QJsonObject thumbnailInfo = content.value("thumbnail_info").toObject(); + c->thumbnailHeight = thumbnailInfo.value("h").toInt(); + c->thumbnailWidth = thumbnailInfo.value("w").toInt(); + c->thumbnailSize = thumbnailInfo.value("size").toInt(); + c->thumbnailMimetype = thumbnailInfo.value("mimetype").toString(); + e->d->content = c; + } + else if( msgtype == "m.audio" ) + { + e->d->msgtype = MessageEventType::Audio; + AudioEventContent* c = new AudioEventContent; + c->url = QUrl(content.value("url").toString()); + QJsonObject info = content.value("info").toObject(); + c->duration = info.value("duration").toInt(); + c->mimetype = info.value("mimetype").toString(); + c->size = info.value("size").toInt(); + e->d->content = c; + } + else + { + qDebug() << "RoomMessageEvent: unknown msgtype: " << msgtype; + qDebug() << obj; + e->d->msgtype = MessageEventType::Unkown; + e->d->content = new MessageEventContent; + } + if( content.contains("body") ) { - e->d->body = content.value("body").toString(); + e->d->content->body = content.value("body").toString(); } else { qDebug() << "RoomMessageEvent: body not found"; } @@ -98,4 +187,4 @@ RoomMessageEvent* RoomMessageEvent::fromJson(const QJsonObject& obj) // } } return e; -}
\ No newline at end of file +} |