diff options
| author | 2022-09-20 11:16:24 +0200 | |
|---|---|---|
| committer | 2022-09-20 11:16:24 +0200 | |
| commit | f6b34ce539e3db3803333038abaff90a2bcab71f (patch) | |
| tree | bde2980dfb4cf71a9b2caa1e2894168eaadc9b8c /data.c | |
| parent | More timeline work. (diff) | |
| download | snac2-f6b34ce539e3db3803333038abaff90a2bcab71f.tar.gz snac2-f6b34ce539e3db3803333038abaff90a2bcab71f.tar.xz snac2-f6b34ce539e3db3803333038abaff90a2bcab71f.zip | |
More timeline work.
Diffstat (limited to 'data.c')
| -rw-r--r-- | data.c | 49 |
1 files changed, 49 insertions, 0 deletions
| @@ -377,3 +377,52 @@ d_char *timeline_list(snac *snac) | |||
| 377 | 377 | ||
| 378 | return list; | 378 | return list; |
| 379 | } | 379 | } |
| 380 | |||
| 381 | |||
| 382 | void timeline_add(snac *snac, char *id, char *msg, char *parent) | ||
| 383 | /* adds a message to the timeline */ | ||
| 384 | { | ||
| 385 | xs *pfn = _timeline_find_fn(snac, id); | ||
| 386 | FILE *f; | ||
| 387 | |||
| 388 | if (pfn != NULL) { | ||
| 389 | snac_log(snac, xs_fmt("timeline_add refusing rewrite %s %s", id, pfn)); | ||
| 390 | return; | ||
| 391 | } | ||
| 392 | |||
| 393 | /* build the new filename */ | ||
| 394 | xs *ntid = tid(); | ||
| 395 | xs *md5 = xs_md5_hex(id, strlen(id)); | ||
| 396 | xs *fn = xs_fmt("%s/timeline/%s-%s.json", snac->basedir, ntid, md5); | ||
| 397 | xs *md; | ||
| 398 | |||
| 399 | /* add metadata */ | ||
| 400 | md = xs_json_loads("{" | ||
| 401 | "\"children\": []," | ||
| 402 | "\"liked_by\": []," | ||
| 403 | "\"announced_by\": []," | ||
| 404 | "\"parent\": null" | ||
| 405 | "}"); | ||
| 406 | |||
| 407 | if (parent != NULL) | ||
| 408 | md = xs_dict_set(md, "parent", parent); | ||
| 409 | |||
| 410 | msg = xs_dict_set(msg, "_snac", md); | ||
| 411 | |||
| 412 | if ((f = fopen(fn, "w")) != NULL) { | ||
| 413 | xs *j = xs_json_dumps_pp(msg, 4); | ||
| 414 | |||
| 415 | fwrite(j, strlen(j), 1, f); | ||
| 416 | fclose(f); | ||
| 417 | |||
| 418 | snac_debug(snac, 1, xs_fmt("timeline_add %s %s", id, fn)); | ||
| 419 | } | ||
| 420 | |||
| 421 | /* generated by this user? link to local timeline */ | ||
| 422 | if (xs_startswith(id, snac->actor)) { | ||
| 423 | xs *lfn = xs_replace(fn, "/timeline/", "/local/"); | ||
| 424 | link(fn, lfn); | ||
| 425 | |||
| 426 | snac_debug(snac, 1, xs_fmt("timeline_add (local) %s %s", id, lfn)); | ||
| 427 | } | ||
| 428 | } | ||