diff options
author | default <nobody@localhost> | 2022-12-03 18:41:44 +0100 |
---|---|---|
committer | default <nobody@localhost> | 2022-12-03 18:41:44 +0100 |
commit | 67a81a7bf9c65b1d7ec5cb5ac255169222be24ac (patch) | |
tree | 1dac593df32695b98a69389003843903142c1610 | |
parent | f205d206883b62bcee0d34f633654e0c24057a86 (diff) |
Upgrade timeline/ to private/.
-rw-r--r-- | data.c | 2 | ||||
-rw-r--r-- | upgrade.c | 58 |
2 files changed, 59 insertions, 1 deletions
@@ -15,7 +15,7 @@ #include <sys/file.h> #include <fcntl.h> -double db_layout = 2.6; +double db_layout = 2.7; int db_upgrade(d_char **error); @@ -230,6 +230,64 @@ int db_upgrade(d_char **error) nf = 2.6; } + else + if (f < 2.7) { + /* upgrade timeline/ to private/ */ + 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/timeline/" "*.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); + + { + char *p, *v; + + object_user_cache_add(&snac, id, "private"); + + 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/timeline", snac.basedir); + rmdir(od); + + user_free(&snac); + } + } + + nf = 2.7; + } if (f < nf) { f = nf; |