New function enqueue().

This commit is contained in:
default 2022-09-20 12:00:13 +02:00
parent 065773c703
commit 5d843a488e
4 changed files with 40 additions and 5 deletions

37
data.c
View file

@ -391,7 +391,7 @@ void timeline_add(snac *snac, char *id, char *msg, char *parent)
}
/* build the new filename */
xs *ntid = tid();
xs *ntid = tid(0);
xs *md5 = xs_md5_hex(id, strlen(id));
xs *fn = xs_fmt("%s/timeline/%s-%s.json", snac->basedir, ntid, md5);
xs *md;
@ -519,3 +519,38 @@ int is_muted(snac *snac, char *actor)
return !!(mtime(fn) != 0.0);
}
void enqueue(snac *snac, char *actor, char *msg, int retries)
/* enqueues a message for an actor */
{
if (strcmp(actor, snac->actor) == 0) {
snac_debug(snac, 1, xs_str_new("enqueue refused to myself"));
return;
}
int qrt = xs_number_get(xs_dict_get(srv_config, "query_retry_minutes"));
xs *ntid = tid(retries * 60 * qrt);
xs *fn = xs_fmt("%s/queue/%s.json", snac->basedir, ntid);
xs *tfn = xs_str_cat(fn, ".tmp");
FILE *f;
if ((f = fopen(tfn, "w")) != NULL) {
xs *qmsg = xs_dict_new();
xs *rn = xs_number_new(retries);
xs *j;
qmsg = xs_dict_append(qmsg, "actor", actor);
qmsg = xs_dict_append(qmsg, "object", msg);
qmsg = xs_dict_append(qmsg, "retries", rn);
j = xs_json_dumps_pp(qmsg, 4);
fwrite(j, strlen(j), 1, f);
fclose(f);
rename(tfn, fn);
snac_debug(snac, 2, xs_fmt("enqueue %s %s %d", actor, fn, retries));
}
}

2
main.c
View file

@ -9,7 +9,7 @@ int main(int argc, char *argv[])
{
snac snac;
printf("%s\n", tid());
printf("%s\n", tid(0));
srv_open("/home/angel/lib/snac/comam.es/");

4
snac.c
View file

@ -42,7 +42,7 @@ d_char *xs_time(char *fmt, int local)
}
d_char *tid(void)
d_char *tid(int offset)
/* returns a time-based Id */
{
struct timeval tv;
@ -50,7 +50,7 @@ d_char *tid(void)
gettimeofday(&tv, &tz);
return xs_fmt("%10d.%06d", tv.tv_sec, tv.tv_usec);
return xs_fmt("%10d.%06d", tv.tv_sec + offset, tv.tv_usec);
}

2
snac.h
View file

@ -11,7 +11,7 @@ d_char *xs_time(char *fmt, int local);
#define xs_local_time(fmt) xs_time(fmt, 1)
#define xs_utc_time(fmt) xs_time(fmt, 0)
d_char *tid(void);
d_char *tid(int offset);
void srv_debug(int level, d_char *str);
#define srv_log(str) srv_debug(0, str)