summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data.c13
-rw-r--r--mastoapi.c13
-rw-r--r--snac.h1
3 files changed, 27 insertions, 0 deletions
diff --git a/data.c b/data.c
index 9f2e462..4e5696e 100644
--- a/data.c
+++ b/data.c
@@ -1595,6 +1595,19 @@ xs_list *notify_list(snac *snac, int new_only)
}
+void notify_clear(snac *snac)
+/* clears all notifications */
+{
+ xs *spec = xs_fmt("%s/notify/" "*", snac->basedir);
+ xs *lst = xs_glob(spec, 0, 0);
+ xs_list *p = lst;
+ xs_str *v;
+
+ while (xs_list_iter(&p, &v))
+ unlink(v);
+}
+
+
/** the queue **/
static xs_dict *_enqueue_put(const char *fn, xs_dict *msg)
diff --git a/mastoapi.c b/mastoapi.c
index f9141d0..d07d012 100644
--- a/mastoapi.c
+++ b/mastoapi.c
@@ -1290,6 +1290,19 @@ int mastoapi_post_handler(const xs_dict *req, const char *q_path,
else
status = 401;
}
+ else
+ if (strcmp(cmd, "/notifications/clear") == 0) {
+ if (logged_in) {
+ notify_clear(&snac);
+ timeline_touch(&snac);
+
+ *body = xs_dup("{}");
+ *ctype = "application/json";
+ status = 200;
+ }
+ else
+ status = 401;
+ }
/* user cleanup */
if (logged_in)
diff --git a/snac.h b/snac.h
index 17bd361..d65b5ac 100644
--- a/snac.h
+++ b/snac.h
@@ -143,6 +143,7 @@ void notify_add(snac *snac, const char *type, const char *utype,
const char *actor, const char *objid);
xs_dict *notify_get(snac *snac, const char *id);
xs_list *notify_list(snac *snac, int new_only);
+void notify_clear(snac *snac);
void inbox_add(const char *inbox);
void inbox_add_by_actor(const xs_dict *actor);