commit 3559a0f

default  ·  2023-06-28 18:26:59 +0000 UTC
parent 1568472
New pinning in data storage.
2 files changed,  +55, -0
M data.c
M snac.h
M data.c
+50, -0
 1@@ -1347,6 +1347,56 @@ int is_muted(snac *snac, const char *actor)
 2 }
 3 
 4 
 5+/** pinning **/
 6+
 7+xs_str *_pinned_fn(snac *user, const char *id)
 8+{
 9+    xs *md5 = xs_md5_hex(id, strlen(id));
10+    return xs_fmt("%s/pinned/%s", user->basedir, md5);
11+}
12+
13+
14+int is_pinned(snac *user, const char *id)
15+/* returns true if this note is pinned */
16+{
17+    xs *fn = _pinned_fn(user, id);
18+    return !!(mtime(fn) != 0.0);
19+}
20+
21+
22+int pin(snac *user, const char *id)
23+/* pins a message */
24+{
25+    int ret = 0;
26+
27+    if (xs_startswith(id, user->actor)) {
28+        /* create the subfolder, if it does not exist */
29+        xs *fn = xs_fmt("%s/pinned/", user->basedir);
30+        mkdirx(fn);
31+
32+        object_user_cache_add(user, id, "pinned");
33+
34+        ret = 1;
35+    }
36+
37+    return ret;
38+}
39+
40+
41+void unpin(snac *user, const char *id)
42+/* unpin a message */
43+{
44+    object_user_cache_del(user, id, "pinned");
45+}
46+
47+
48+xs_list *pinned_list(snac *user)
49+/* return the lists of pinned posts */
50+{
51+    return object_user_cache_list(user, "pinned", XS_ALL);
52+}
53+
54+
55 xs_str *_hidden_fn(snac *snac, const char *id)
56 {
57     xs *md5 = xs_md5_hex(id, strlen(id));
M snac.h
+5, -0
 1@@ -126,6 +126,11 @@ void mute(snac *snac, const char *actor);
 2 void unmute(snac *snac, const char *actor);
 3 int is_muted(snac *snac, const char *actor);
 4 
 5+int pin(snac *user, const char *id);
 6+void unpin(snac *user, const char *id);
 7+int is_pinned(snac *user, const char *id);
 8+xs_list *pinned_list(snac *user);
 9+
10 void hide(snac *snac, const char *id);
11 int is_hidden(snac *snac, const char *id);
12