ctdlload: import visits
authorArt Cancro <ajc@citadel.org>
Mon, 17 Jul 2023 19:44:25 +0000 (10:44 -0900)
committerArt Cancro <ajc@citadel.org>
Mon, 17 Jul 2023 19:44:25 +0000 (10:44 -0900)
citadel/utils/ctdlload.c

index 979419d101b1c7de66df9524be2ec69880dc2a95..b948d5a3f763bc891bdeabfb61ae5f7e8bd8cb3f 100644 (file)
@@ -388,6 +388,54 @@ int convert_msglist(char *line, DBT *out_key, DBT *out_data) {
 }
 
 
+// Convert a "visit" record to a record on disk.
+int convert_visit(char *line, DBT *out_key, DBT *out_data) {
+       char *token;
+       struct visit *v = malloc(sizeof(struct visit));
+
+       memset(v, 0, sizeof(struct visit));
+       char *p = line;
+
+       for (int i=0; (token = strsep(&p, "|")); ++i) {
+               switch(i) {
+                       case 1:
+                               v->v_roomnum = atol(token);
+                               break;
+                       case 2:
+                               v->v_roomgen = atol(token);
+                               break;
+                       case 3:
+                               v->v_usernum = atol(token);
+                               break;
+                       case 4:
+                               v->v_lastseen = atoi(token);
+                               break;
+                       case 5:
+                               v->v_flags = atoi(token);
+                               break;
+                       case 6:
+                               strncpy(v->v_seen, token, sizeof(v->v_seen));
+                               break;
+                       case 7:
+                               strncpy(v->v_answered, token, sizeof(v->v_answered));
+                               break;
+                       case 8:
+                               v->v_view = atoi(token);
+                               break;
+               }
+       }
+
+       // The key is the same as the first three data members (3 x long)
+       out_key->size = sizeof(long) * 3;
+       out_key->data = reallok(NULL, out_key->size);
+       memcpy(out_key->data, v, out_key->size);
+
+       out_data->size = sizeof(struct visit);
+       out_data->data = v;
+       return(1);
+}
+
+
 #if 0
 // Convert a "foo" record to a record on disk.
 int convert_foo(char *line, DBT *out_key, DBT *out_data) {
@@ -496,7 +544,7 @@ void ingest_one(char *line, DB_ENV *dst_dbenv) {
        else if (!strcasecmp(record_type, "room"))              row_was_good = convert_room(line, &out_key, &out_data);
        else if (!strcasecmp(record_type, "floor"))             row_was_good = convert_floor(line, &out_key, &out_data);
        else if (!strcasecmp(record_type, "msglist"))           row_was_good = convert_msglist(line, &out_key, &out_data);
-       else if (!strcasecmp(record_type, "visit"))             row_was_good = convert_foo(line, &out_key, &out_data);
+       else if (!strcasecmp(record_type, "visit"))             row_was_good = convert_visit(line, &out_key, &out_data);
        else if (!strcasecmp(record_type, "dir"))               row_was_good = convert_foo(line, &out_key, &out_data);
        else if (!strcasecmp(record_type, "use"))               row_was_good = convert_foo(line, &out_key, &out_data);
        else if (!strcasecmp(record_type, "bigmsg"))            row_was_good = convert_foo(line, &out_key, &out_data);