commit 1763e33

default  ·  2023-08-06 16:40:50 +0000 UTC
parent 66e34b3
Added support for limiting followed users.
2 files changed,  +50, -1
M data.c
M snac.h
M data.c
+44, -0
 1@@ -1500,6 +1500,50 @@ int actor_get(snac *snac1, const char *actor, xs_dict **data)
 2 }
 3 
 4 
 5+/** user limiting (announce blocks) **/
 6+
 7+int limited(snac *user, const char *id, int cmd)
 8+/* announce messages from a followed (0: check, 1: limit; 2: unlimit) */
 9+{
10+    int ret = 0;
11+    xs *fn = xs_fmt("%s/limited/", user->basedir);
12+    mkdirx(fn);
13+
14+    xs *md5 = xs_md5_hex(id, strlen(id));
15+    fn = xs_str_cat(fn, md5);
16+
17+    switch (cmd) {
18+    case 0: /** check **/
19+        ret = !!(mtime(fn) > 0.0);
20+        break;
21+
22+    case 1: /** limit **/
23+        if (mtime(fn) > 0.0)
24+            ret = -1;
25+        else {
26+            FILE *f;
27+
28+            if ((f = fopen(fn, "w")) != NULL) {
29+                fprintf(f, "%s\n", id);
30+                fclose(f);
31+            }
32+            else
33+                ret = -2;
34+        }
35+        break;
36+
37+    case 2: /** unlimit **/
38+        if (mtime(fn) > 0.0)
39+            ret = unlink(fn);
40+        else
41+            ret = -1;
42+        break;
43+    }
44+
45+    return ret;
46+}
47+
48+
49 /** static data **/
50 
51 xs_str *_static_fn(snac *snac, const char *id)
M snac.h
+6, -1
 1@@ -1,7 +1,7 @@
 2 /* snac - A simple, minimalistic ActivityPub instance */
 3 /* copyright (c) 2022 - 2023 grunfink et al. / MIT license */
 4 
 5-#define VERSION "2.39"
 6+#define VERSION "2.40-dev"
 7 
 8 #define USER_AGENT "snac/" VERSION
 9 
10@@ -132,6 +132,11 @@ int unpin(snac *user, const char *id);
11 int is_pinned(snac *user, const char *id);
12 xs_list *pinned_list(snac *user);
13 
14+int limited(snac *user, const char *id, int cmd);
15+#define is_limited(user, id) limited((user), (id), 0)
16+#define limit(user, id) limited((user), (id), 1)
17+#define unlimit(user, id) limited((user), (id), 2)
18+
19 void hide(snac *snac, const char *id);
20 int is_hidden(snac *snac, const char *id);
21