commit 7286216

default  ·  2024-09-06 07:54:27 +0000 UTC
parent 97c4af0
Some new draft functions.
3 files changed,  +40, -4
M data.c
M html.c
M snac.h
M data.c
+30, -0
 1@@ -1658,6 +1658,36 @@ xs_list *pinned_list(snac *user)
 2 }
 3 
 4 
 5+/** drafts **/
 6+
 7+int is_draft(snac *user, const char *id)
 8+/* returns true if this note is a draft */
 9+{
10+    return object_user_cache_in(user, id, "draft");
11+}
12+
13+
14+void draft_del(snac *user, const char *id)
15+/* delete a message from the draft cache */
16+{
17+    object_user_cache_del(user, id, "draft");
18+}
19+
20+
21+void draft_add(snac *user, const char *id, const xs_dict *msg)
22+/* store the message as a draft */
23+{
24+    /* delete from the index, in case it was already there */
25+    draft_del(user, id);
26+
27+    /* overwrite object */
28+    object_add_ow(id, msg);
29+
30+    /* [re]add to the index */
31+    object_user_cache_add(user, id, "draft");
32+}
33+
34+
35 /** hiding **/
36 
37 xs_str *_hidden_fn(snac *snac, const char *id)
M html.c
+6, -4
 1@@ -3105,10 +3105,6 @@ int html_post_handler(const xs_dict *req, const char *q_path,
 2 
 3     p_vars = xs_dict_get(req, "p_vars");
 4 
 5-#if 0
 6-    xs_json_dump(p_vars, 4, stdout);
 7-#endif
 8-
 9     if (p_path && strcmp(p_path, "admin/note") == 0) { /** **/
10         /* post note */
11         const xs_str *content      = xs_dict_get(p_vars, "content");
12@@ -3121,6 +3117,7 @@ int html_post_handler(const xs_dict *req, const char *q_path,
13         const xs_str *edit_id      = xs_dict_get(p_vars, "edit_id");
14         const xs_str *alt_text     = xs_dict_get(p_vars, "alt_text");
15         int priv             = !xs_is_null(xs_dict_get(p_vars, "mentioned_only"));
16+        int is_draft         = !xs_is_null(xs_dict_get(p_vars, "is_draft"));
17         xs *attach_list      = xs_list_new();
18 
19         /* default alt text */
20@@ -3199,6 +3196,11 @@ int html_post_handler(const xs_dict *req, const char *q_path,
21                 msg = xs_dict_set(msg, "summary",   xs_is_null(summary) ? "..." : summary);
22             }
23 
24+            if (is_draft) {
25+                /* don't send; just store for later */
26+                draft_add(&snac, xs_dict_get(msg, "id"), msg);
27+            }
28+            else
29             if (xs_is_null(edit_id)) {
30                 /* new message */
31                 c_msg = msg_create(&snac, msg);
M snac.h
+4, -0
 1@@ -178,6 +178,10 @@ int is_pinned(snac *user, const char *id);
 2 int is_pinned_by_md5(snac *user, const char *md5);
 3 xs_list *pinned_list(snac *user);
 4 
 5+int is_draft(snac *user, const char *id);
 6+void draft_del(snac *user, const char *id);
 7+void draft_add(snac *user, const char *id, const xs_dict *msg);
 8+
 9 int limited(snac *user, const char *id, int cmd);
10 #define is_limited(user, id) limited((user), (id), 0)
11 #define limit(user, id) limited((user), (id), 1)