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)
40 40
41 nf = 2.1; 41 nf = 2.1;
42 } 42 }
43 else
44 if (f < 2.2) {
45 xs *users = user_list();
46 char *p, *v;
47
48 p = users;
49 while (xs_list_iter(&p, &v)) {
50 snac snac;
51
52 if (user_open(&snac, v)) {
53 xs *spec = xs_fmt("%s/actors/" "*.json", snac.basedir);
54 xs *list = xs_glob(spec, 0, 0);
55 char *g, *fn;
56
57 g = list;
58 while (xs_list_iter(&g, &fn)) {
59 xs *l = xs_split(fn, "/");
60 char *b = xs_list_get(l, -1);
61 xs *dir = xs_fmt("%s/object/%c%c", srv_basedir, b[0], b[1]);
62 xs *nfn = xs_fmt("%s/%s", dir, b);
63
64 mkdir(dir, 0755);
65 rename(fn, nfn);
66 }
67
68 xs *odir = xs_fmt("%s/actors", snac.basedir);
69 rmdir(odir);
70
71 user_free(&snac);
72 }
73 }
74
75 nf = 2.2;
76 }
77 else
78 if (f < 2.3) {
79 xs *users = user_list();
80 char *p, *v;
81
82 p = users;
83 while (xs_list_iter(&p, &v)) {
84 snac snac;
85
86 if (user_open(&snac, v)) {
87 char *p, *v;
88 xs *dir = xs_fmt("%s/hidden", snac.basedir);
89
90 /* create the hidden directory */
91 mkdir(dir, 0755);
92
93 /* rename all muted files incorrectly named .json */
94 xs *spec = xs_fmt("%s/muted/" "*.json", snac.basedir);
95 xs *fns = xs_glob(spec, 0, 0);
96
97 p = fns;
98 while (xs_list_iter(&p, &v)) {
99 xs *nfn = xs_replace(v, ".json", "");
100 rename(v, nfn);
101 }
102
103 user_free(&snac);
104 }
105 }
106
107 nf = 2.3;
108 }
109 else
110 if (f < 2.4) {
111 xs *users = user_list();
112 char *p, *v;
113
114 p = users;
115 while (xs_list_iter(&p, &v)) {
116 snac snac;
117
118 if (user_open(&snac, v)) {
119 xs *dir = xs_fmt("%s/public", snac.basedir);
120 mkdir(dir, 0755);
121
122 dir = xs_replace_i(dir, "public", "private");
123 mkdir(dir, 0755);
124
125 user_free(&snac);
126 }
127 }
128
129 nf = 2.4;
130 }
131 else
132 if (f < 2.5) {
133 /* upgrade followers */
134 xs *users = user_list();
135 char *p, *v;
136
137 p = users;
138 while (xs_list_iter(&p, &v)) {
139 snac snac;
140
141 if (user_open(&snac, v)) {
142 xs *spec = xs_fmt("%s/followers/" "*.json", snac.basedir);
143 xs *dir = xs_glob(spec, 0, 0);
144 char *p, *v;
145
146 p = dir;
147 while (xs_list_iter(&p, &v)) {
148 FILE *f;
149
150 if ((f = fopen(v, "r")) != NULL) {
151 xs *s = xs_readall(f);
152 xs *o = xs_json_loads(s);
153 fclose(f);
154
155 char *type = xs_dict_get(o, "type");
156
157 if (!xs_is_null(type) && strcmp(type, "Follow") == 0) {
158 unlink(v);
159
160 char *actor = xs_dict_get(o, "actor");
161
162 if (!xs_is_null(actor))
163 follower_add(&snac, actor);
164 }
165 }
166 }
167
168 user_free(&snac);
169 }
170 }
171
172 nf = 2.5;
173 }
43 174
44 if (f < nf) { 175 if (f < nf) {
45 f = nf; 176 f = nf;