commit 01a6266

default  ·  2022-11-23 15:13:51 +0000 UTC
parent 2a5f105
actor_get() and actor_add() now use the object database.
2 files changed,  +23, -49
M data.c
M snac.h
M data.c
+21, -47
  1@@ -243,6 +243,8 @@ int object_get(const char *id, d_char **obj, const char *type)
  2     else
  3         *obj = NULL;
  4 
  5+    srv_debug(2, xs_fmt("object_get %s %d", id, status));
  6+
  7     return status;
  8 }
  9 
 10@@ -265,6 +267,8 @@ int object_add(const char *id, d_char *obj)
 11     else
 12         status = 500;
 13 
 14+    srv_debug(2, xs_fmt("object_add %s %d", id, status));
 15+
 16     return status;
 17 }
 18 
 19@@ -938,57 +942,43 @@ d_char *_actor_fn(snac *snac, char *actor)
 20 }
 21 
 22 
 23-int actor_add(snac *snac, char *actor, char *msg)
 24+int actor_add(snac *snac, const char *actor, d_char *msg)
 25 /* adds an actor */
 26 {
 27-    int ret = 201; /* created */
 28-    xs *fn = _actor_fn(snac, actor);
 29-    FILE *f;
 30-
 31-    if ((f = fopen(fn, "w")) != NULL) {
 32-        xs *j = xs_json_dumps_pp(msg, 4);
 33-
 34-        fwrite(j, 1, strlen(j), f);
 35-        fclose(f);
 36-    }
 37-    else
 38-        ret = 500;
 39-
 40-    snac_debug(snac, 2, xs_fmt("actor_add %s %s", actor, fn));
 41-
 42-//    object_add(actor, msg);
 43-
 44-    return ret;
 45+    return object_add(actor, msg);
 46 }
 47 
 48 
 49-int actor_get(snac *snac, char *actor, d_char **data)
 50+int actor_get(snac *snac, const char *actor, d_char **data)
 51 /* returns an already downloaded actor */
 52 {
 53-    xs *fn = _actor_fn(snac, actor);
 54-    double t;
 55-    double max_time;
 56-    int status;
 57-    FILE *f;
 58+    int status = 200;
 59+    char *d;
 60 
 61     if (strcmp(actor, snac->actor) == 0) {
 62+        /* this actor */
 63         if (data)
 64             *data = msg_actor(snac);
 65 
 66-        return 200;
 67+        return status;
 68     }
 69 
 70-    t = mtime(fn);
 71+    /* read the object */
 72+    if (!valid_status(status = object_get(actor, &d, "Person")))
 73+        return status;
 74 
 75-    /* no mtime? there is nothing here */
 76-    if (t == 0.0)
 77-        return 404;
 78+    if (data)
 79+        *data = d;
 80+
 81+    xs *fn = _object_fn_by_id(actor);
 82+    double max_time;
 83 
 84     /* maximum time for the actor data to be considered stale */
 85     max_time = 3600.0 * 36.0;
 86 
 87-    if (t + max_time < (double) time(NULL)) {
 88+    if (mtime(fn) + max_time < (double) time(NULL)) {
 89         /* actor data exists but also stinks */
 90+        FILE *f;
 91 
 92         if ((f = fopen(fn, "a")) != NULL) {
 93             /* write a blank at the end to 'touch' the file */
 94@@ -998,22 +988,6 @@ int actor_get(snac *snac, char *actor, d_char **data)
 95 
 96         status = 205; /* "205: Reset Content" "110: Response Is Stale" */
 97     }
 98-    else {
 99-        /* it's still valid */
100-        status = 200;
101-    }
102-
103-    if (data) {
104-        if ((f = fopen(fn, "r")) != NULL) {
105-            xs *j = xs_readall(f);
106-
107-            fclose(f);
108-
109-            *data = xs_json_loads(j);
110-        }
111-        else
112-            status = 500;
113-    }
114 
115     return status;
116 }
M snac.h
+2, -2
 1@@ -80,8 +80,8 @@ void mute(snac *snac, char *actor);
 2 void unmute(snac *snac, char *actor);
 3 int is_muted(snac *snac, char *actor);
 4 
 5-int actor_add(snac *snac, char *actor, char *msg);
 6-int actor_get(snac *snac, char *actor, d_char **data);
 7+int actor_add(snac *snac, const char *actor, d_char *msg);
 8+int actor_get(snac *snac, const char *actor, d_char **data);
 9 
10 int static_get(snac *snac, const char *id, d_char **data, int *size);
11 void static_put(snac *snac, const char *id, const char *data, int size);