[MOD] Separate the unlink in another function

This commit is contained in:
LDA 2024-09-26 11:11:39 +02:00
commit e7ba1fa48d
3 changed files with 48 additions and 15 deletions

39
src/Parsee/Chats.c Normal file
View file

@ -0,0 +1,39 @@
#include <Parsee.h>
#include <Cytoplasm/Memory.h>
#include <Cytoplasm/Json.h>
void
ParseeUnlinkRoom(ParseeData *data, char *chat_id)
{
char *muc, *room;
DbRef *ref;
if (!data || !chat_id)
{
return;
}
muc = ParseeGetMUCID(data, chat_id);
room = ParseeGetRoomID(data, chat_id);
if (!muc || !room)
{
Free(muc);
Free(room);
return;
}
ref = DbLock(data->db, 1, "chats");
JsonValueFree(HashMapDelete(
GrabObject(DbJson(ref), 1, "rooms"),
room
));
JsonValueFree(HashMapDelete(
GrabObject(DbJson(ref), 1, "mucs"),
muc
));
DbUnlock(data->db, ref);
DbDelete(data->db, 2, "chats", chat_id);
Free(muc);
Free(room);
}

View file

@ -216,20 +216,8 @@ PresenceStanza(ParseeData *args, XMLElement *stanza, XMPPThread *thr)
(IsStatus(301) || IsStatus(307))) (IsStatus(301) || IsStatus(307)))
{ {
char *chat_id = ParseeGetFromRoomID(args, room); char *chat_id = ParseeGetFromRoomID(args, room);
char *muc = ParseeTrimJID(oid);
DbRef *ref;
ref = DbLock(args->db, 1, "chats"); ParseeUnlinkRoom(args, chat_id);
JsonValueFree(HashMapDelete(
GrabObject(DbJson(ref), 1, "rooms"),
room
));
JsonValueFree(HashMapDelete(
GrabObject(DbJson(ref), 1, "mucs"),
muc
));
DbUnlock(args->db, ref);
DbDelete(args->db, 2, "chats", chat_id);
Free(ASSend( Free(ASSend(
args->config, room, parsee, args->config, room, parsee,
@ -238,7 +226,6 @@ PresenceStanza(ParseeData *args, XMLElement *stanza, XMPPThread *thr)
)); ));
ASLeave(args->config, room, parsee); ASLeave(args->config, room, parsee);
Free(chat_id); Free(chat_id);
Free(muc);
} }

View file

@ -344,7 +344,8 @@ extern bool ParseeManageBan(ParseeData *, char *user, char *room);
extern bool ParseeVerifyDMStanza(ParseeData *data, char *room_id, char *id); extern bool ParseeVerifyDMStanza(ParseeData *data, char *room_id, char *id);
/** Checks if a Matrix/XMPP user is considered as "administrator" by Parsee. /** Checks if a Matrix/XMPP user is considered as "administrator" by
* Parsee.
* ---------------------- * ----------------------
* Returns: (whenever the user is an admin) * Returns: (whenever the user is an admin)
* Modifies: NOTHING */ * Modifies: NOTHING */
@ -411,4 +412,10 @@ extern char * ParseeHMAC(char *key, uint8_t *msg, size_t msglen);
* Returns: NOTHING */ * Returns: NOTHING */
extern void ParseeBroadcastStanza(ParseeData *data, char *from, XMLElement *s); extern void ParseeBroadcastStanza(ParseeData *data, char *from, XMLElement *s);
/** Destroys the mapping between a MUC and a room from a chat ID.
* ----------------
* Modifies: the DB's room mappings
* Returns: NOTHING */
extern void ParseeUnlinkRoom(ParseeData *data, char *chat_id);
#endif #endif