diff options
| -rw-r--r-- | data.c | 2 | ||||
| -rw-r--r-- | upgrade.c | 58 |
2 files changed, 59 insertions, 1 deletions
| @@ -15,7 +15,7 @@ | |||
| 15 | #include <sys/file.h> | 15 | #include <sys/file.h> |
| 16 | #include <fcntl.h> | 16 | #include <fcntl.h> |
| 17 | 17 | ||
| 18 | double db_layout = 2.6; | 18 | double db_layout = 2.7; |
| 19 | 19 | ||
| 20 | 20 | ||
| 21 | int db_upgrade(d_char **error); | 21 | int db_upgrade(d_char **error); |
| @@ -230,6 +230,64 @@ int db_upgrade(d_char **error) | |||
| 230 | 230 | ||
| 231 | nf = 2.6; | 231 | nf = 2.6; |
| 232 | } | 232 | } |
| 233 | else | ||
| 234 | if (f < 2.7) { | ||
| 235 | /* upgrade timeline/ to private/ */ | ||
| 236 | xs *users = user_list(); | ||
| 237 | char *p, *v; | ||
| 238 | |||
| 239 | p = users; | ||
| 240 | while (xs_list_iter(&p, &v)) { | ||
| 241 | snac snac; | ||
| 242 | |||
| 243 | if (user_open(&snac, v)) { | ||
| 244 | xs *spec = xs_fmt("%s/timeline/" "*.json", snac.basedir); | ||
| 245 | xs *dir = xs_glob(spec, 0, 0); | ||
| 246 | char *p, *v; | ||
| 247 | |||
| 248 | p = dir; | ||
| 249 | while (xs_list_iter(&p, &v)) { | ||
| 250 | FILE *f; | ||
| 251 | |||
| 252 | if ((f = fopen(v, "r")) != NULL) { | ||
| 253 | xs *s = xs_readall(f); | ||
| 254 | xs *o = xs_json_loads(s); | ||
| 255 | fclose(f); | ||
| 256 | |||
| 257 | xs *meta = xs_dup(xs_dict_get(o, "_snac")); | ||
| 258 | o = xs_dict_del(o, "_snac"); | ||
| 259 | |||
| 260 | char *id = xs_dict_get(o, "id"); | ||
| 261 | |||
| 262 | /* store object */ | ||
| 263 | object_add_ow(id, o); | ||
| 264 | |||
| 265 | { | ||
| 266 | char *p, *v; | ||
| 267 | |||
| 268 | object_user_cache_add(&snac, id, "private"); | ||
| 269 | |||
| 270 | p = xs_dict_get(meta, "announced_by"); | ||
| 271 | while (xs_list_iter(&p, &v)) | ||
| 272 | object_admire(id, v, 0); | ||
| 273 | p = xs_dict_get(meta, "liked_by"); | ||
| 274 | while (xs_list_iter(&p, &v)) | ||
| 275 | object_admire(id, v, 1); | ||
| 276 | } | ||
| 277 | |||
| 278 | unlink(v); | ||
| 279 | } | ||
| 280 | } | ||
| 281 | |||
| 282 | xs *od = xs_fmt("%s/timeline", snac.basedir); | ||
| 283 | rmdir(od); | ||
| 284 | |||
| 285 | user_free(&snac); | ||
| 286 | } | ||
| 287 | } | ||
| 288 | |||
| 289 | nf = 2.7; | ||
| 290 | } | ||
| 233 | 291 | ||
| 234 | if (f < nf) { | 292 | if (f < nf) { |
| 235 | f = nf; | 293 | f = nf; |