summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data.c2
-rw-r--r--upgrade.c58
2 files changed, 59 insertions, 1 deletions
diff --git a/data.c b/data.c
index f3a1ce8..90d568f 100644
--- a/data.c
+++ b/data.c
@@ -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);
diff --git a/upgrade.c b/upgrade.c
index dbf878b..4eb211e 100644
--- a/upgrade.c
+++ b/upgrade.c
@@ -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;