Mercurial > libervia-web
annotate libervia/web/pages/chat/page_meta.py @ 1627:61449c5ddd70
browser (chat): Show all one2one message when profile own JID is used:
When profile own JID is used, we want to show all one2one message, and not only message
from the user themselve.
This behaviour can be seen as an "inbox" of the user.
rel 459
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 08 Jun 2025 17:27:44 +0200 |
parents | fdb5689fb826 |
children |
rev | line source |
---|---|
1216 | 1 #!/usr/bin/env python3 |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 |
1518
eb00d593801d
refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
3 from libervia.backend.core.i18n import _ |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
4 from twisted.internet import defer |
1518
eb00d593801d
refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
5 from libervia.backend.core.log import getLogger |
eb00d593801d
refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
6 from libervia.backend.tools.common import data_objects |
eb00d593801d
refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
7 from libervia.backend.tools.common import data_format |
1536 | 8 from libervia.frontends.tools import jid |
1518
eb00d593801d
refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
9 from libervia.web.server.constants import Const as C |
eb00d593801d
refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
10 from libervia.web.server import session_iface |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 |
1241
921e9f2a97af
pages (chat): renamed `extra` argument to `extra_s` as it is now serialised
Goffi <goffi@goffi.org>
parents:
1232
diff
changeset
|
12 |
921e9f2a97af
pages (chat): renamed `extra` argument to `extra_s` as it is now serialised
Goffi <goffi@goffi.org>
parents:
1232
diff
changeset
|
13 log = getLogger(__name__) |
921e9f2a97af
pages (chat): renamed `extra` argument to `extra_s` as it is now serialised
Goffi <goffi@goffi.org>
parents:
1232
diff
changeset
|
14 |
1216 | 15 name = "chat" |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 access = C.PAGES_ACCESS_PROFILE |
1216 | 17 template = "chat/chat.html" |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 dynamic = True |
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 |
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
20 |
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
21 def parse_url(self, request): |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
22 rdata = self.get_r_data(request) |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
23 |
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
24 try: |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
25 target_jid_s = self.next_path(request) |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
26 except IndexError: |
1623
fdb5689fb826
browser (chat): Update following template change + some cleaning:
Goffi <goffi@goffi.org>
parents:
1619
diff
changeset
|
27 target_jid_s = self.get_jid(request).userhost() |
1619 | 28 # # not chat jid, we redirect to jid selection page |
29 # self.page_redirect("chat_select", request) | |
30 # return | |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
31 |
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
32 try: |
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
33 target_jid = jid.JID(target_jid_s) |
1536 | 34 if not target_jid.local: |
1216 | 35 raise ValueError(_("invalid jid for chat (no local part)")) |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
36 except Exception as e: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
37 log.warning( |
1536 | 38 _("bad chat jid entered: {jid} ({msg})").format(jid=target_jid_s, msg=e) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
39 ) |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
40 self.page_error(request, C.HTTP_BAD_REQUEST) |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
41 else: |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
42 rdata["target"] = target_jid |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
43 |
1000
4cc4d49e1d0f
pages (chat): moved rendering preparation in prepare_render, and redirect to page_select if no jid is specified.
Goffi <goffi@goffi.org>
parents:
996
diff
changeset
|
44 |
1536 | 45 async def prepare_render(self, request): |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
46 # Â FIXME: bug on room filtering (currently display messages from all rooms) |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
47 session = self.host.get_session_data(request, session_iface.IWebSession) |
1000
4cc4d49e1d0f
pages (chat): moved rendering preparation in prepare_render, and redirect to page_select if no jid is specified.
Goffi <goffi@goffi.org>
parents:
996
diff
changeset
|
48 template_data = request.template_data |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
49 rdata = self.get_r_data(request) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
50 target_jid = rdata["target"] |
1000
4cc4d49e1d0f
pages (chat): moved rendering preparation in prepare_render, and redirect to page_select if no jid is specified.
Goffi <goffi@goffi.org>
parents:
996
diff
changeset
|
51 profile = session.profile |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
52 profile_jid = session.jid |
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
53 |
1619 | 54 bookmarks = data_format.deserialise( |
55 await self.host.bridge_call( "bookmarks_list", "", profile) | |
56 ) | |
57 | |
1536 | 58 disco = await self.host.bridge_call( |
59 "disco_infos", target_jid.domain, "", True, profile | |
60 ) | |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
61 if "conference" in [i[0] for i in disco[1]]: |
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
62 chat_type = C.CHAT_GROUP |
1536 | 63 join_ret = await self.host.bridge_call( |
64 "muc_join", target_jid.bare, "", "", profile | |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
65 ) |
1232
4ccc5bb65be2
pages (chat): handle room statuses following backend change
Goffi <goffi@goffi.org>
parents:
1216
diff
changeset
|
66 (already_joined, |
4ccc5bb65be2
pages (chat): handle room statuses following backend change
Goffi <goffi@goffi.org>
parents:
1216
diff
changeset
|
67 room_jid_s, |
4ccc5bb65be2
pages (chat): handle room statuses following backend change
Goffi <goffi@goffi.org>
parents:
1216
diff
changeset
|
68 occupants, |
4ccc5bb65be2
pages (chat): handle room statuses following backend change
Goffi <goffi@goffi.org>
parents:
1216
diff
changeset
|
69 user_nick, |
4ccc5bb65be2
pages (chat): handle room statuses following backend change
Goffi <goffi@goffi.org>
parents:
1216
diff
changeset
|
70 room_subject, |
4ccc5bb65be2
pages (chat): handle room statuses following backend change
Goffi <goffi@goffi.org>
parents:
1216
diff
changeset
|
71 room_statuses, |
4ccc5bb65be2
pages (chat): handle room statuses following backend change
Goffi <goffi@goffi.org>
parents:
1216
diff
changeset
|
72 __) = join_ret |
1216 | 73 template_data["subject"] = room_subject |
1232
4ccc5bb65be2
pages (chat): handle room statuses following backend change
Goffi <goffi@goffi.org>
parents:
1216
diff
changeset
|
74 template_data["room_statuses"] = room_statuses |
1595
7941444c1671
pages: set `own_local_jid` to avoid confusion with `own_jid`:
Goffi <goffi@goffi.org>
parents:
1543
diff
changeset
|
75 own_local_jid = jid.JID(room_jid_s) |
7941444c1671
pages: set `own_local_jid` to avoid confusion with `own_jid`:
Goffi <goffi@goffi.org>
parents:
1543
diff
changeset
|
76 own_local_jid = own_local_jid.change_resource(user_nick) |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
77 else: |
1536 | 78 room_subject = None |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
79 chat_type = C.CHAT_ONE2ONE |
1595
7941444c1671
pages: set `own_local_jid` to avoid confusion with `own_jid`:
Goffi <goffi@goffi.org>
parents:
1543
diff
changeset
|
80 own_local_jid = profile_jid |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
81 rdata["chat_type"] = chat_type |
1595
7941444c1671
pages: set `own_local_jid` to avoid confusion with `own_jid`:
Goffi <goffi@goffi.org>
parents:
1543
diff
changeset
|
82 template_data["own_local_jid"] = own_local_jid |
1627
61449c5ddd70
browser (chat): Show all one2one message when profile own JID is used:
Goffi <goffi@goffi.org>
parents:
1623
diff
changeset
|
83 filters = {} |
61449c5ddd70
browser (chat): Show all one2one message when profile own JID is used:
Goffi <goffi@goffi.org>
parents:
1623
diff
changeset
|
84 from_jid_s = profile_jid.userhost() |
61449c5ddd70
browser (chat): Show all one2one message when profile own JID is used:
Goffi <goffi@goffi.org>
parents:
1623
diff
changeset
|
85 to_jid_s = target_jid.bare |
61449c5ddd70
browser (chat): Show all one2one message when profile own JID is used:
Goffi <goffi@goffi.org>
parents:
1623
diff
changeset
|
86 if from_jid_s == to_jid_s: |
61449c5ddd70
browser (chat): Show all one2one message when profile own JID is used:
Goffi <goffi@goffi.org>
parents:
1623
diff
changeset
|
87 # If we are checking messages from user's profile, we show all one2one messages. |
61449c5ddd70
browser (chat): Show all one2one message when profile own JID is used:
Goffi <goffi@goffi.org>
parents:
1623
diff
changeset
|
88 to_jid_s = "" |
61449c5ddd70
browser (chat): Show all one2one message when profile own JID is used:
Goffi <goffi@goffi.org>
parents:
1623
diff
changeset
|
89 filters = {"not_types": C.CHAT_GROUP} |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
90 |
1536 | 91 history = await self.host.bridge_call( |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
92 "history_get", |
1627
61449c5ddd70
browser (chat): Show all one2one message when profile own JID is used:
Goffi <goffi@goffi.org>
parents:
1623
diff
changeset
|
93 from_jid_s, |
61449c5ddd70
browser (chat): Show all one2one message when profile own JID is used:
Goffi <goffi@goffi.org>
parents:
1623
diff
changeset
|
94 to_jid_s, |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
95 20, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
96 True, |
1627
61449c5ddd70
browser (chat): Show all one2one message when profile own JID is used:
Goffi <goffi@goffi.org>
parents:
1623
diff
changeset
|
97 filters, |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
98 profile, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
99 ) |
1536 | 100 |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
101 authors = {m[2] for m in history} |
1266
6b7f9c3558cc
server, pages: better identities handling:
Goffi <goffi@goffi.org>
parents:
1243
diff
changeset
|
102 identities = session.identities |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
103 for author in authors: |
1536 | 104 id_raw = await self.host.bridge_call( |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
105 "identity_get", author, [], True, profile) |
1243
8aff742d0dd0
pages: updated `identityGet` call, following backend changes
Goffi <goffi@goffi.org>
parents:
1241
diff
changeset
|
106 identities[author] = data_format.deserialise(id_raw) |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
107 |
1216 | 108 template_data["messages"] = data_objects.Messages(history) |
1266
6b7f9c3558cc
server, pages: better identities handling:
Goffi <goffi@goffi.org>
parents:
1243
diff
changeset
|
109 rdata['identities'] = identities |
1216 | 110 template_data["target_jid"] = target_jid |
111 template_data["chat_type"] = chat_type | |
1619 | 112 template_data["bookmarks"] = bookmarks |
113 template_data["chat_url"] = self.url | |
1536 | 114 self.expose_to_scripts( |
115 request, | |
116 room_subject=room_subject, | |
1595
7941444c1671
pages: set `own_local_jid` to avoid confusion with `own_jid`:
Goffi <goffi@goffi.org>
parents:
1543
diff
changeset
|
117 own_local_jid=str(own_local_jid), |
1536 | 118 target_jid=target_jid, |
119 chat_type=chat_type, | |
1619 | 120 chat_url=self.url |
1536 | 121 ) |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
122 |
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
123 |
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
124 def on_data(self, request, data): |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
125 session = self.host.get_session_data(request, session_iface.IWebSession) |
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
126 rdata = self.get_r_data(request) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
127 target = rdata["target"] |
1216 | 128 data_type = data.get("type", "") |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
129 if data_type == "msg": |
1216 | 130 message = data["body"] |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
131 mess_type = ( |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
132 C.MESS_TYPE_GROUPCHAT |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
133 if rdata["chat_type"] == C.CHAT_GROUP |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
134 else C.MESS_TYPE_CHAT |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
135 ) |
1216 | 136 log.debug("message received: {}".format(message)) |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
137 self.host.bridge_call( |
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
138 "message_send", |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
139 target.full(), |
1216 | 140 {"": message}, |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
141 {}, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
142 mess_type, |
1429 | 143 "", |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
144 session.profile, |
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1091
diff
changeset
|
145 ) |
996
d821c112e656
pages (chat): implementation of chat page using new dynamic pages, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
146 else: |
1216 | 147 log.warning("unknown message type: {type}".format(type=data_type)) |