| author | Stephen Paul Weber
<singpolyma@singpolyma.net> 2025-11-11 15:45:23 UTC |
| committer | Stephen Paul Weber
<singpolyma@singpolyma.net> 2025-11-11 15:54:32 UTC |
| parent | 0748232e8c2532c14bc74805cf22aae610386273 |
| borogove/MessageSync.hx | +22 | -0 |
diff --git a/borogove/MessageSync.hx b/borogove/MessageSync.hx index d1f2830..8655fc3 100644 --- a/borogove/MessageSync.hx +++ b/borogove/MessageSync.hx @@ -9,6 +9,7 @@ import borogove.queries.MAMQuery; import thenshim.Promise; import thenshim.PromiseTools; +using StringTools; #if !NO_OMEMO import borogove.OMEMO; @@ -68,6 +69,8 @@ class MessageSync { } } var query = new MAMQuery(filter, serviceJID); + var previousMessageTime = ""; + var counterSameTime = 0; final eventToken = stream.on("message", function (event) { progress++; var message:Stanza = event.stanza; @@ -84,6 +87,25 @@ class MessageSync { return EventHandled; } var timestamp = result.findText("{urn:xmpp:forward:0}forwarded/{urn:xmpp:delay}delay@stamp"); + if (timestamp == null) { + trace("MAM result with no timestamp", result); + } else { + // If no subseconds, fix them to at least sort right + timestamp = ~/([0-9][0-9]:[0-9][0-9]:[0-9][0-9])(\.[0-9][0-9][0-9])?/.map(timestamp, (ereg) -> { + if (ereg.matched(2) == null || ereg.matched(2) == ".000") { + if (ereg.matched(1) == previousMessageTime) { + counterSameTime++; + } else { + previousMessageTime = ereg.matched(1); + counterSameTime = 1; + } + + return ereg.matched(1) + "." + Std.string(counterSameTime).lpad("0", 3); + } + + return ereg.matched(0); + }); + } final jmiChildren = originalMessage.allTags(null, "urn:xmpp:jingle-message:0"); if (jmiChildren.length > 0) {