commit 60ddd6e
default
·
2025-03-13 11:51:40 +0000 UTC
parent a8ff652
Improved Undo+Follow logic (contributed by rozenglass).
1 files changed,
+21,
-14
+21,
-14
1@@ -2180,25 +2180,32 @@ int process_input_message(snac *snac, const xs_dict *msg, const xs_dict *req)
2 if (strcmp(type, "Undo") == 0) { /** **/
3 const char *id = xs_dict_get(object, "object");
4
5- if (xs_type(object) != XSTYPE_DICT)
6+ if (xs_type(object) != XSTYPE_DICT) {
7+ snac_debug(snac, 1, xs_fmt("undo: overriding utype %s | %s | %s",
8+ utype, id, actor));
9 utype = "Follow";
10+ }
11
12 if (strcmp(utype, "Follow") == 0) { /** **/
13- if (id && strcmp(id, snac->actor) != 0)
14+ if (!id) {
15+ snac_log(snac, xs_fmt("no id (msg.object.object) when "
16+ "handling follow: %s", actor));
17+ return 1;
18+ }
19+ if (strcmp(id, snac->actor) != 0)
20 snac_debug(snac, 1, xs_fmt("Undo + Follow from %s not for us (%s)", actor, id));
21- else {
22- if (valid_status(follower_del(snac, actor))) {
23- snac_log(snac, xs_fmt("no longer following us %s", actor));
24- do_notify = 1;
25- }
26- else
27- if (pending_check(snac, actor)) {
28- pending_del(snac, actor);
29- snac_log(snac, xs_fmt("cancelled pending follow from %s", actor));
30- }
31- else
32- snac_log(snac, xs_fmt("error deleting follower %s", actor));
33+ else
34+ if (valid_status(follower_del(snac, actor))) {
35+ snac_log(snac, xs_fmt("no longer following us %s", actor));
36+ do_notify = 1;
37 }
38+ else
39+ if (pending_check(snac, actor)) {
40+ pending_del(snac, actor);
41+ snac_log(snac, xs_fmt("cancelled pending follow from %s", actor));
42+ }
43+ else
44+ snac_log(snac, xs_fmt("error deleting follower %s", actor));
45 }
46 else
47 if (strcmp(utype, "Like") == 0 || strcmp(utype, "EmojiReact") == 0) { /** **/