diff options
Diffstat (limited to 'upgrade.c')
| -rw-r--r-- | upgrade.c | 131 |
1 files changed, 131 insertions, 0 deletions
| @@ -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; |