From d35622d82961a43fd83a80c60ce6527e1dfb95a9 Mon Sep 17 00:00:00 2001 From: John Smith Date: Sun, 23 Dec 2018 19:49:47 +0700 Subject: experimental: XEP-0333 chat read markers for both sides of conversation --- extensions/message_reader.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ extensions/typing_reader.py | 23 ----------------------- 2 files changed, 44 insertions(+), 23 deletions(-) create mode 100644 extensions/message_reader.py delete mode 100644 extensions/typing_reader.py (limited to 'extensions') diff --git a/extensions/message_reader.py b/extensions/message_reader.py new file mode 100644 index 0000000..7d86f36 --- /dev/null +++ b/extensions/message_reader.py @@ -0,0 +1,44 @@ +# coding: utf-8 +# This file is a part of VK4XMPP transport +# © simpleApps, 2014 (16.12.14 14:54PM GMT) — 2015. + +GLOBAL_USER_SETTINGS["typingreader"] = {"label": "Mark my messages as read when I compose message", "value": 0} +GLOBAL_USER_SETTINGS["read_on_displayed"] = {"label": "Mark my messages as read", "value": 0} + +def typingreader_watch(msg): + jidFrom = msg.getFrom() + source = jidFrom.getStripped() + destination = msg.getTo().getStripped() + if msg.getType() == "chat" and source in Users: + user = Users[source] + uid = vk2xmpp(destination) + if uid in user.lastMsgByUser: + lastMsgID = user.lastMsgByUser[uid] + if lastMsgID > user.lastMarkedMessage: + if user.settings.typingreader and msg.getTag("composing", namespace=xmpp.NS_CHATSTATES): + typingreader_markasread(user, lastMsgID) + if user.settings.read_on_displayed and (msg.getTag("displayed", namespace=xmpp.NS_CHAT_MARKERS) + or msg.getTag("active", xmpp.NS_CHATSTATES)): + typingreader_markasread(user, lastMsgID) + + +def typingreader_markasread(user, mid): + user.vk.method("messages.markAsRead", {"message_ids": mid}) + # try to ensure that we don't skip further messages unmarked (doesn't work properly though) + if user.lastMarkedMessage < mid: + user.lastMarkedMessage = user.lastMsgID + + +def typingreader_add(msg, destination, source): + if destination in Users: + user = Users[destination] + if user.settings.read_on_displayed: + msg.setTag("markable", namespace=xmpp.NS_CHAT_MARKERS) + + +def typingreader_init(user): + user.lastMarkedMessage = 0 + + +registerHandler("msg02", typingreader_watch) +registerHandler("evt07", typingreader_init) diff --git a/extensions/typing_reader.py b/extensions/typing_reader.py deleted file mode 100644 index 7dafff0..0000000 --- a/extensions/typing_reader.py +++ /dev/null @@ -1,23 +0,0 @@ -# coding: utf-8 -# This file is a part of VK4XMPP transport -# © simpleApps, 2014 (16.12.14 14:54PM GMT) — 2015. - -GLOBAL_USER_SETTINGS["typingreader"] = {"label": "Mark my messages as read when I compose message", "value": 0} - -def typingreader_watch(msg): - jidFrom = msg.getFrom() - source = jidFrom.getStripped() - if msg.getType() == "chat" and source in Users: - user = Users[source] - if user.settings.typingreader: - if (user.lastMsgID > user.lastMarkedMessage) and msg.getTag("composing"): - user.vk.method("messages.markAsRead", {"message_ids": str(user.lastMsgID)}) - user.lastMarkedMessage = user.lastMsgID - - -def typingreader_init(user): - user.lastMarkedMessage = 0 - - -registerHandler("msg02", typingreader_watch) -registerHandler("evt07", typingreader_init) -- cgit v1.2.3