commit 3559a0f
default
·
2023-06-28 18:26:59 +0000 UTC
parent 1568472
New pinning in data storage.
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