From f0202a2fe0da0a1aa05009b875dffe47bfa3df8d Mon Sep 17 00:00:00 2001 From: MarcoPolo-PasTonMolo Date: Sun, 3 Jul 2022 21:23:07 +0300 Subject: On new chatwin fetch mam according to guidelines. Taken from here: https://github.com/modernxmpp/modernxmpp/commit/cd3e871e55c2cff45dffd05d6e50380b99845849 --- src/xmpp/iq.c | 61 ++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 19 deletions(-) (limited to 'src/xmpp/iq.c') diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c index 8d40a86f..9918354e 100644 --- a/src/xmpp/iq.c +++ b/src/xmpp/iq.c @@ -2582,24 +2582,43 @@ iq_mam_request(ProfChatWin* win) return; } + ProfMessage* last_msg = log_database_get_limits_info(win->barejid, TRUE); + char* lastid = NULL; + char* firstid = NULL; + char* startdate = NULL; + char* enddate = NULL; + gboolean should_add_rsm_handler = TRUE; + + // If last message found + if (last_msg->timestamp) { + lastid = last_msg->stanzaid; + startdate = g_date_time_format(last_msg->timestamp, "%FT%T.%f%:z"); + + } else { + GDateTime* now = g_date_time_new_now_utc(); + enddate = g_date_time_format(now, "%FT%T.%f%:z"); + g_date_time_unref(now); + // To get last page we need to set before to empty string + firstid = ""; + should_add_rsm_handler = FALSE; + } + xmpp_ctx_t* const ctx = connection_get_ctx(); - GDateTime* now = g_date_time_new_now_utc(); - GDateTime* timestamp = g_date_time_add_days(now, -7); - g_date_time_unref(now); - gchar* datestr = g_date_time_format(timestamp, "%FT%TZ"); - xmpp_stanza_t* iq = stanza_create_mam_iq(ctx, win->barejid, datestr, NULL); + xmpp_stanza_t* iq = stanza_create_mam_iq(ctx, win->barejid, startdate, enddate, firstid, lastid); - MamRsmUserdata* data = malloc(sizeof(MamRsmUserdata)); - if (data) { - data->datestr = strdup(datestr); - data->barejid = strdup(win->barejid); + if (should_add_rsm_handler) { + MamRsmUserdata* data = malloc(sizeof(MamRsmUserdata)); + if (data) { + data->start_datestr = startdate; + data->end_datestr = enddate; + data->barejid = strdup(win->barejid); - iq_id_handler_add(xmpp_stanza_get_id(iq), _mam_rsm_id_handler, NULL, data); + iq_id_handler_add(xmpp_stanza_get_id(iq), _mam_rsm_id_handler, NULL, data); + } } - g_free(datestr); - g_date_time_unref(timestamp); + message_free(last_msg); iq_send_stanza(iq); xmpp_stanza_release(iq); @@ -2619,24 +2638,28 @@ _mam_rsm_id_handler(xmpp_stanza_t* const stanza, void* const userdata) } else if (g_strcmp0(type, "result") == 0) { xmpp_stanza_t* fin = xmpp_stanza_get_child_by_name_and_ns(stanza, STANZA_NAME_FIN, STANZA_NS_MAM2); if (fin) { + gboolean is_complete = g_strcmp0(xmpp_stanza_get_attribute(fin, "complete"), "true") == 0; + + if (is_complete) { + return 0; + } + xmpp_stanza_t* set = xmpp_stanza_get_child_by_name_and_ns(fin, STANZA_TYPE_SET, STANZA_NS_RSM); if (set) { char* lastid = NULL; xmpp_stanza_t* last = xmpp_stanza_get_child_by_name(set, STANZA_NAME_LAST); - if (last) { - lastid = xmpp_stanza_get_text(last); - } + lastid = xmpp_stanza_get_text(last); // 4.3.2. send same stanza with set,max stanza xmpp_ctx_t* const ctx = connection_get_ctx(); MamRsmUserdata* data = (MamRsmUserdata*)userdata; - xmpp_stanza_t* iq = stanza_create_mam_iq(ctx, data->barejid, data->datestr, lastid); - free(data->barejid); - free(data->datestr); - free(data); + + xmpp_stanza_t* iq = stanza_create_mam_iq(ctx, data->barejid, data->start_datestr, data->end_datestr, NULL, lastid); free(lastid); + iq_id_handler_add(xmpp_stanza_get_id(iq), _mam_rsm_id_handler, NULL, data); + iq_send_stanza(iq); xmpp_stanza_release(iq); } -- cgit 1.4.1-2-gfad0
24dd1af4 ^



a6836d5d ^











24dd1af4 ^

58000a23 ^

a6836d5d ^











f186e887 ^



a6836d5d ^

f186e887 ^


a6836d5d ^




















57c2dff1 ^
a6836d5d ^





57c2dff1 ^
a6836d5d ^



57c2dff1 ^
a6836d5d ^



57c2dff1 ^
a6836d5d ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136