Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mrDoctorWho/vk4xmpp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Smith <mrdoctorwho@helldev.net>2018-12-23 15:49:47 +0300
committerJohn Smith <mrdoctorwho@helldev.net>2018-12-23 15:49:47 +0300
commitd35622d82961a43fd83a80c60ce6527e1dfb95a9 (patch)
tree230c80720fff913dfe427eb926632aad6bbb1c2d /extensions
parent77dd22617542c2a2dede53a11a6deaf87417d26f (diff)
experimental: XEP-0333 chat read markers for both sides of conversation
Diffstat (limited to 'extensions')
-rw-r--r--extensions/message_reader.py44
-rw-r--r--extensions/typing_reader.py23
2 files changed, 44 insertions, 23 deletions
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)