diff options
Diffstat (limited to 'upgrade.c')
-rw-r--r-- | upgrade.c | 131 |
1 files changed, 131 insertions, 0 deletions
@@ -40,6 +40,137 @@ int db_upgrade(d_char **error) nf = 2.1; } + else + if (f < 2.2) { + 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/actors/" "*.json", snac.basedir); + xs *list = xs_glob(spec, 0, 0); + char *g, *fn; + + g = list; + while (xs_list_iter(&g, &fn)) { + xs *l = xs_split(fn, "/"); + char *b = xs_list_get(l, -1); + xs *dir = xs_fmt("%s/object/%c%c", srv_basedir, b[0], b[1]); + xs *nfn = xs_fmt("%s/%s", dir, b); + + mkdir(dir, 0755); + rename(fn, nfn); + } + + xs *odir = xs_fmt("%s/actors", snac.basedir); + rmdir(odir); + + user_free(&snac); + } + } + + nf = 2.2; + } + else + if (f < 2.3) { + xs *users = user_list(); + char *p, *v; + + p = users; + while (xs_list_iter(&p, &v)) { + snac snac; + + if (user_open(&snac, v)) { + char *p, *v; + xs *dir = xs_fmt("%s/hidden", snac.basedir); + + /* create the hidden directory */ + mkdir(dir, 0755); + + /* rename all muted files incorrectly named .json */ + xs *spec = xs_fmt("%s/muted/" "*.json", snac.basedir); + xs *fns = xs_glob(spec, 0, 0); + + p = fns; + while (xs_list_iter(&p, &v)) { + xs *nfn = xs_replace(v, ".json", ""); + rename(v, nfn); + } + + user_free(&snac); + } + } + + nf = 2.3; + } + else + if (f < 2.4) { + xs *users = user_list(); + char *p, *v; + + p = users; + while (xs_list_iter(&p, &v)) { + snac snac; + + if (user_open(&snac, v)) { + xs *dir = xs_fmt("%s/public", snac.basedir); + mkdir(dir, 0755); + + dir = xs_replace_i(dir, "public", "private"); + mkdir(dir, 0755); + + user_free(&snac); + } + } + + nf = 2.4; + } + else + if (f < 2.5) { + /* upgrade followers */ + 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/followers/" "*.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); + + char *type = xs_dict_get(o, "type"); + + if (!xs_is_null(type) && strcmp(type, "Follow") == 0) { + unlink(v); + + char *actor = xs_dict_get(o, "actor"); + + if (!xs_is_null(actor)) + follower_add(&snac, actor); + } + } + } + + user_free(&snac); + } + } + + nf = 2.5; + } if (f < nf) { f = nf; |