summaryrefslogtreecommitdiff
path: root/data.c
diff options
context:
space:
mode:
Diffstat (limited to 'data.c')
-rw-r--r--data.c73
1 files changed, 69 insertions, 4 deletions
diff --git a/data.c b/data.c
index ce040dd..6661472 100644
--- a/data.c
+++ b/data.c
@@ -1929,6 +1929,70 @@ xs_list *draft_list(snac *user)
1929} 1929}
1930 1930
1931 1931
1932/** scheduled posts **/
1933
1934int is_scheduled(snac *user, const char *id)
1935/* returns true if this note is scheduled for future sending */
1936{
1937 return object_user_cache_in(user, id, "sched");
1938}
1939
1940
1941void schedule_del(snac *user, const char *id)
1942/* deletes an scheduled post */
1943{
1944 object_user_cache_del(user, id, "sched");
1945}
1946
1947
1948void schedule_add(snac *user, const char *id, const xs_dict *msg)
1949/* schedules this post for later */
1950{
1951 /* delete from the index, in case it was already there */
1952 schedule_del(user, id);
1953
1954 /* overwrite object */
1955 object_add_ow(id, msg);
1956
1957 /* [re]add to the index */
1958 object_user_cache_add(user, id, "sched");
1959}
1960
1961
1962xs_list *scheduled_list(snac *user)
1963/* return the list of scheduled posts */
1964{
1965 return object_user_cache_list(user, "sched", XS_ALL, 1);
1966}
1967
1968
1969void scheduled_process(snac *user)
1970/* processes the scheduled list, sending those ready to be sent */
1971{
1972 xs *posts = scheduled_list(user);
1973 const char *md5;
1974 xs *right_now = xs_str_utctime(0, ISO_DATE_SPEC);
1975
1976 xs_list_foreach(posts, md5) {
1977 xs *msg = NULL;
1978
1979 if (valid_status(object_get_by_md5(md5, &msg))) {
1980 if (strcmp(xs_dict_get(msg, "published"), right_now) < 0) {
1981 /* due date! */
1982 const char *id = xs_dict_get(msg, "id");
1983
1984 timeline_add(user, id, msg);
1985
1986 xs *c_msg = msg_create(user, msg);
1987 enqueue_message(user, c_msg);
1988
1989 schedule_del(user, id);
1990 }
1991 }
1992 }
1993}
1994
1995
1932/** hiding **/ 1996/** hiding **/
1933 1997
1934xs_str *_hidden_fn(snac *snac, const char *id) 1998xs_str *_hidden_fn(snac *snac, const char *id)
@@ -2619,10 +2683,9 @@ xs_list *inbox_list(void)
2619 xs_list *ibl = xs_list_new(); 2683 xs_list *ibl = xs_list_new();
2620 xs *spec = xs_fmt("%s/inbox/" "*", srv_basedir); 2684 xs *spec = xs_fmt("%s/inbox/" "*", srv_basedir);
2621 xs *files = xs_glob(spec, 0, 0); 2685 xs *files = xs_glob(spec, 0, 0);
2622 xs_list *p = files;
2623 const xs_val *v; 2686 const xs_val *v;
2624 2687
2625 while (xs_list_iter(&p, &v)) { 2688 xs_list_foreach(files, v) {
2626 FILE *f; 2689 FILE *f;
2627 2690
2628 if ((f = fopen(v, "r")) != NULL) { 2691 if ((f = fopen(v, "r")) != NULL) {
@@ -2630,7 +2693,9 @@ xs_list *inbox_list(void)
2630 2693
2631 if (line && *line) { 2694 if (line && *line) {
2632 line = xs_strip_i(line); 2695 line = xs_strip_i(line);
2633 ibl = xs_list_append(ibl, line); 2696
2697 if (!is_instance_blocked(line))
2698 ibl = xs_list_append(ibl, line);
2634 } 2699 }
2635 2700
2636 fclose(f); 2701 fclose(f);
@@ -3696,7 +3761,7 @@ void purge_user(snac *snac)
3696 _purge_user_subdir(snac, "public", pub_days); 3761 _purge_user_subdir(snac, "public", pub_days);
3697 3762
3698 const char *idxs[] = { "followers.idx", "private.idx", "public.idx", 3763 const char *idxs[] = { "followers.idx", "private.idx", "public.idx",
3699 "pinned.idx", "bookmark.idx", "draft.idx", NULL }; 3764 "pinned.idx", "bookmark.idx", "draft.idx", "sched.idx", NULL };
3700 3765
3701 for (n = 0; idxs[n]; n++) { 3766 for (n = 0; idxs[n]; n++) {
3702 xs *idx = xs_fmt("%s/%s", snac->basedir, idxs[n]); 3767 xs *idx = xs_fmt("%s/%s", snac->basedir, idxs[n]);