diff options
| -rw-r--r-- | data.c | 17 | ||||
| -rw-r--r-- | upgrade.c | 22 | ||||
| -rw-r--r-- | utils.c | 3 |
3 files changed, 39 insertions, 3 deletions
| @@ -14,7 +14,7 @@ | |||
| 14 | #include <sys/file.h> | 14 | #include <sys/file.h> |
| 15 | #include <fcntl.h> | 15 | #include <fcntl.h> |
| 16 | 16 | ||
| 17 | double db_layout = 2.3; | 17 | double db_layout = 2.4; |
| 18 | 18 | ||
| 19 | 19 | ||
| 20 | int db_upgrade(d_char **error); | 20 | int db_upgrade(d_char **error); |
| @@ -901,12 +901,25 @@ void timeline_object_add(snac *snac, const char *id, char *msg) | |||
| 901 | { | 901 | { |
| 902 | object_add(id, msg); | 902 | object_add(id, msg); |
| 903 | 903 | ||
| 904 | /* add to the private index */ | ||
| 904 | xs *idx = xs_fmt("%s/private.idx", snac->basedir); | 905 | xs *idx = xs_fmt("%s/private.idx", snac->basedir); |
| 905 | index_add(idx, id); | 906 | index_add(idx, id); |
| 906 | 907 | ||
| 908 | /* build the name for the linked copy in the private cache */ | ||
| 909 | xs *ofn = _object_fn(id); | ||
| 910 | xs *l = xs_split(ofn, "/"); | ||
| 911 | xs *cfn = xs_fmt("%s/private/%s", snac->basedir, xs_list_get(l, -1)); | ||
| 912 | |||
| 913 | link(ofn, cfn); | ||
| 914 | |||
| 907 | if (xs_startswith(id, snac->actor)) { | 915 | if (xs_startswith(id, snac->actor)) { |
| 908 | idx = xs_replace_i(idx, "private.", "public."); | 916 | /* add to the public index */ |
| 917 | idx = xs_replace_i(idx, "private", "public"); | ||
| 909 | index_add(idx, id); | 918 | index_add(idx, id); |
| 919 | |||
| 920 | /* add to the public cache */ | ||
| 921 | cfn = xs_replace_i(cfn, "private", "public"); | ||
| 922 | link(ofn, cfn); | ||
| 910 | } | 923 | } |
| 911 | } | 924 | } |
| 912 | 925 | ||
| @@ -106,6 +106,28 @@ int db_upgrade(d_char **error) | |||
| 106 | 106 | ||
| 107 | nf = 2.3; | 107 | nf = 2.3; |
| 108 | } | 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 | } | ||
| 109 | 131 | ||
| 110 | if (f < nf) { | 132 | if (f < nf) { |
| 111 | f = nf; | 133 | f = nf; |
| @@ -238,7 +238,8 @@ int adduser(char *uid) | |||
| 238 | 238 | ||
| 239 | const char *dirs[] = { | 239 | const char *dirs[] = { |
| 240 | "followers", "following", "local", "muted", "hidden", | 240 | "followers", "following", "local", "muted", "hidden", |
| 241 | "queue", "static", "timeline", "history", NULL }; | 241 | "public", "private", "queue", "history", |
| 242 | "static", "timeline", NULL }; | ||
| 242 | int n; | 243 | int n; |
| 243 | 244 | ||
| 244 | for (n = 0; dirs[n]; n++) { | 245 | for (n = 0; dirs[n]; n++) { |