diff options
author | default <nobody@localhost> | 2022-12-03 17:58:49 +0100 |
---|---|---|
committer | default <nobody@localhost> | 2022-12-03 17:58:49 +0100 |
commit | d00026ac063e960728c5147634ff3591828efced (patch) | |
tree | 0456668b56eb64bfdbd2c513a479cc02b247a9d2 /upgrade.c | |
parent | af6d31ff83bfe1eb6f4d37c5623e35f149e9aee5 (diff) |
Upgraded local/ to public/.
Diffstat (limited to 'upgrade.c')
-rw-r--r-- | upgrade.c | 59 |
1 files changed, 59 insertions, 0 deletions
@@ -171,6 +171,65 @@ int db_upgrade(d_char **error) nf = 2.5; } + else + if (f < 2.6) { + /* upgrade local/ to public/ */ + xs *users = user_list(); + char *p, *v; + + p = users; + while (xs_list_iter(&p, &v)) { + snac snac; + + if (user_open(&snac, v)) { + xs *spec = xs_fmt("%s/local/" "*.json", snac.basedir); + xs *dir = xs_glob(spec, 0, 0); + char *p, *v; + + p = dir; + while (xs_list_iter(&p, &v)) { + FILE *f; + + if ((f = fopen(v, "r")) != NULL) { + xs *s = xs_readall(f); + xs *o = xs_json_loads(s); + fclose(f); + + xs *meta = xs_dup(xs_dict_get(o, "_snac")); + o = xs_dict_del(o, "_snac"); + + char *id = xs_dict_get(o, "id"); + + /* store object */ + object_add_ow(id, o); + + /* if it's from us, add to public */ + if (xs_startswith(id, snac.actor)) { + char *p, *v; + + object_user_cache_add(&snac, id, "public"); + + p = xs_dict_get(meta, "announced_by"); + while (xs_list_iter(&p, &v)) + object_admire(id, v, 0); + p = xs_dict_get(meta, "liked_by"); + while (xs_list_iter(&p, &v)) + object_admire(id, v, 1); + } + + unlink(v); + } + } + + xs *od = xs_fmt("%s/local", snac.basedir); + rmdir(od); + + user_free(&snac); + } + } + + nf = 2.6; + } if (f < nf) { f = nf; |