commit 67a81a7

default  ·  2022-12-03 17:41:44 +0000 UTC
parent f205d20
Upgrade timeline/ to private/.
2 files changed,  +59, -1
M data.c
M data.c
+1, -1
1@@ -15,7 +15,7 @@
2 #include <sys/file.h>
3 #include <fcntl.h>
4 
5-double db_layout = 2.6;
6+double db_layout = 2.7;
7 
8 
9 int db_upgrade(d_char **error);
+58, -0
 1@@ -230,6 +230,64 @@ int db_upgrade(d_char **error)
 2 
 3             nf = 2.6;
 4         }
 5+        else
 6+        if (f < 2.7) {
 7+            /* upgrade timeline/ to private/ */
 8+            xs *users = user_list();
 9+            char *p, *v;
10+
11+            p = users;
12+            while (xs_list_iter(&p, &v)) {
13+                snac snac;
14+
15+                if (user_open(&snac, v)) {
16+                    xs *spec = xs_fmt("%s/timeline/" "*.json", snac.basedir);
17+                    xs *dir  = xs_glob(spec, 0, 0);
18+                    char *p, *v;
19+
20+                    p = dir;
21+                    while (xs_list_iter(&p, &v)) {
22+                        FILE *f;
23+
24+                        if ((f = fopen(v, "r")) != NULL) {
25+                            xs *s = xs_readall(f);
26+                            xs *o = xs_json_loads(s);
27+                            fclose(f);
28+
29+                            xs *meta = xs_dup(xs_dict_get(o, "_snac"));
30+                            o = xs_dict_del(o, "_snac");
31+
32+                            char *id = xs_dict_get(o, "id");
33+
34+                            /* store object */
35+                            object_add_ow(id, o);
36+
37+                            {
38+                                char *p, *v;
39+
40+                                object_user_cache_add(&snac, id, "private");
41+
42+                                p = xs_dict_get(meta, "announced_by");
43+                                while (xs_list_iter(&p, &v))
44+                                    object_admire(id, v, 0);
45+                                p = xs_dict_get(meta, "liked_by");
46+                                while (xs_list_iter(&p, &v))
47+                                    object_admire(id, v, 1);
48+                            }
49+
50+                            unlink(v);
51+                        }
52+                    }
53+
54+                    xs *od = xs_fmt("%s/timeline", snac.basedir);
55+                    rmdir(od);
56+
57+                    user_free(&snac);
58+                }
59+            }
60+
61+            nf = 2.7;
62+        }
63 
64         if (f < nf) {
65             f          = nf;