1
1
mirror of https://github.com/profanity-im/profanity.git synced 2025-01-03 14:57:42 -05:00

MAM: Request more pages via RSM

Send another request with same jid and last id we got.
This commit is contained in:
Michael Vetter 2021-01-28 14:41:19 +01:00
parent 6e1e01dbb8
commit d3303517f7

View File

@ -108,6 +108,12 @@ typedef struct command_config_data_t
char* command; char* command;
} CommandConfigData; } CommandConfigData;
typedef struct mam_rsm_userdata
{
char* barejid;
char* datestr;
} MamRsmUserdata;
static int _iq_handler(xmpp_conn_t* const conn, xmpp_stanza_t* const stanza, void* const userdata); static int _iq_handler(xmpp_conn_t* const conn, xmpp_stanza_t* const stanza, void* const userdata);
static void _error_handler(xmpp_stanza_t* const stanza); static void _error_handler(xmpp_stanza_t* const stanza);
@ -2557,7 +2563,11 @@ iq_mam_request(ProfChatWin* win)
gchar* datestr = g_date_time_format(timestamp, "%FT%TZ"); 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, datestr, NULL);
iq_id_handler_add(xmpp_stanza_get_id(iq), _mam_rsm_id_handler, NULL, g_strdup(datestr)); MamRsmUserdata* data = malloc(sizeof(MamRsmUserdata));
data->datestr = strdup(datestr);
data->barejid = strdup(win->barejid);
iq_id_handler_add(xmpp_stanza_get_id(iq), _mam_rsm_id_handler, NULL, data);
g_free(datestr); g_free(datestr);
g_date_time_unref(timestamp); g_date_time_unref(timestamp);
@ -2585,15 +2595,21 @@ _mam_rsm_id_handler(xmpp_stanza_t* const stanza, void* const userdata)
if (fin) { if (fin) {
xmpp_stanza_t* set = xmpp_stanza_get_child_by_name_and_ns(fin, STANZA_TYPE_SET, STANZA_NS_RSM); xmpp_stanza_t* set = xmpp_stanza_get_child_by_name_and_ns(fin, STANZA_TYPE_SET, STANZA_NS_RSM);
if (set) { if (set) {
char *lastid = NULL;
xmpp_stanza_t* last = xmpp_stanza_get_child_by_name(set, STANZA_NAME_LAST); xmpp_stanza_t* last = xmpp_stanza_get_child_by_name(set, STANZA_NAME_LAST);
char* lastid = xmpp_stanza_get_text(last); if (last) {
lastid = lastid; lastid = xmpp_stanza_get_text(last);
}
// 4.3.2. send same stanza with set,max stanza // 4.3.2. send same stanza with set,max stanza
xmpp_ctx_t* const ctx = connection_get_ctx(); xmpp_ctx_t* const ctx = connection_get_ctx();
gchar *datestr = (gchar*)userdata;
//TODO give barejid or get from stanza MamRsmUserdata* data = (MamRsmUserdata*)userdata;
xmpp_stanza_t* iq = stanza_create_mam_iq(ctx, NULL, datestr, lastid); xmpp_stanza_t* iq = stanza_create_mam_iq(ctx, data->barejid, data->datestr, lastid);
free(data->barejid);
free(data->datestr);
free(data);
free(lastid);
iq_send_stanza(iq); iq_send_stanza(iq);
xmpp_stanza_release(iq); xmpp_stanza_release(iq);