diff options
author | Max Weller <maximilian.weller@stud.tu-darmstadt.de> | 2017-08-05 12:56:32 +0200 |
---|---|---|
committer | fiaxh <fiaxh@users.noreply.github.com> | 2017-08-05 12:56:32 +0200 |
commit | 4aee95703d5619f7d55373d2f0bb130781266656 (patch) | |
tree | 7f946073c7a6e4b059ee329cb148df097677a7bf | |
parent | ea174ab632ced082eb0f1c51cea1bc9dc5c7c89e (diff) | |
download | dino-4aee95703d5619f7d55373d2f0bb130781266656.tar.gz dino-4aee95703d5619f7d55373d2f0bb130781266656.zip |
request history since last known messages (#110)
request history since last known messages
when rejoining a room at startup
-rw-r--r-- | libdino/src/service/muc_manager.vala | 10 | ||||
-rw-r--r-- | xmpp-vala/src/module/xep/0045_muc/module.vala | 7 |
2 files changed, 15 insertions, 2 deletions
diff --git a/libdino/src/service/muc_manager.vala b/libdino/src/service/muc_manager.vala index 7761373f..779783cc 100644 --- a/libdino/src/service/muc_manager.vala +++ b/libdino/src/service/muc_manager.vala @@ -35,7 +35,15 @@ public class MucManager : StreamInteractionModule, Object { if (stream == null) return; string nick_ = nick ?? account.bare_jid.localpart ?? account.bare_jid.domainpart; set_autojoin(stream, jid, nick_, password); - stream.get_module(Xep.Muc.Module.IDENTITY).enter(stream, jid.bare_jid.to_string(), nick_, password); + + string history_since = null; + Conversation? conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation(jid, account); + if (conversation != null) { + Entities.Message? last_message = stream_interactor.get_module(MessageStorage.IDENTITY).get_last_message(conversation); + if (last_message != null) history_since = last_message.time.to_string(); + } + + stream.get_module(Xep.Muc.Module.IDENTITY).enter(stream, jid.bare_jid.to_string(), nick_, password, history_since); } public void part(Account account, Jid jid) { diff --git a/xmpp-vala/src/module/xep/0045_muc/module.vala b/xmpp-vala/src/module/xep/0045_muc/module.vala index 951ec7d1..a40f18d8 100644 --- a/xmpp-vala/src/module/xep/0045_muc/module.vala +++ b/xmpp-vala/src/module/xep/0045_muc/module.vala @@ -69,13 +69,18 @@ public class Module : XmppStreamModule { public signal void self_removed_from_room(XmppStream stream, string jid, StatusCode code); public signal void removed_from_room(XmppStream stream, string jid, StatusCode? code); - public void enter(XmppStream stream, string bare_jid, string nick, string? password) { + public void enter(XmppStream stream, string bare_jid, string nick, string? password, string? history_since) { Presence.Stanza presence = new Presence.Stanza(); presence.to = bare_jid + "/" + nick; StanzaNode x_node = new StanzaNode.build("x", NS_URI).add_self_xmlns(); if (password != null) { x_node.put_node(new StanzaNode.build("password", NS_URI).put_node(new StanzaNode.text(password))); } + if (history_since != null) { + StanzaNode history_node = new StanzaNode.build("history", NS_URI); + history_node.set_attribute("since", history_since); + x_node.put_node(history_node); + } presence.stanza.put_node(x_node); stream.get_flag(Flag.IDENTITY).start_muc_enter(bare_jid, presence.id); |