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) { /** **/