summaryrefslogtreecommitdiff
path: root/upgrade.c
diff options
context:
space:
mode:
Diffstat (limited to 'upgrade.c')
-rw-r--r--upgrade.c131
1 files changed, 131 insertions, 0 deletions
diff --git a/upgrade.c b/upgrade.c
index e4c75bb..e2983e4 100644
--- a/upgrade.c
+++ b/upgrade.c
@@ -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;