Browse Source

New function enqueue().

default 2 years ago
parent
commit
5d843a488e
4 changed files with 40 additions and 5 deletions
  1. 36 1
      data.c
  2. 1 1
      main.c
  3. 2 2
      snac.c
  4. 1 1
      snac.h

+ 36 - 1
data.c

@@ -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));
+    }
+}

+ 1 - 1
main.c

@@ -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/");
 

+ 2 - 2
snac.c

@@ -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);
 }
 
 

+ 1 - 1
snac.h

@@ -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)