diff options
| author | 2025-02-17 20:54:36 +0100 | |
|---|---|---|
| committer | 2025-02-17 20:54:36 +0100 | |
| commit | 7eb2556f26baf8ff79fcb7388712d8b714efc4f6 (patch) | |
| tree | 0d11017b6431c514bd6afd16138a06851cd2f09e /data.c | |
| parent | Merge tag '2.72' into curl-smtp (diff) | |
| parent | Merge pull request 'doc/snac8: elaborate regex blocking' (#305) from Menelmac... (diff) | |
| download | penes-snac2-7eb2556f26baf8ff79fcb7388712d8b714efc4f6.tar.gz penes-snac2-7eb2556f26baf8ff79fcb7388712d8b714efc4f6.tar.xz penes-snac2-7eb2556f26baf8ff79fcb7388712d8b714efc4f6.zip | |
Merge remote-tracking branch 'upstream/master' into curl-smtp
Diffstat (limited to 'data.c')
| -rw-r--r-- | data.c | 45 |
1 files changed, 45 insertions, 0 deletions
| @@ -13,6 +13,7 @@ | |||
| 13 | #include "xs_match.h" | 13 | #include "xs_match.h" |
| 14 | #include "xs_unicode.h" | 14 | #include "xs_unicode.h" |
| 15 | #include "xs_random.h" | 15 | #include "xs_random.h" |
| 16 | #include "xs_po.h" | ||
| 16 | 17 | ||
| 17 | #include "snac.h" | 18 | #include "snac.h" |
| 18 | 19 | ||
| @@ -98,6 +99,9 @@ int srv_open(const char *basedir, int auto_upgrade) | |||
| 98 | if (error != NULL) | 99 | if (error != NULL) |
| 99 | srv_log(error); | 100 | srv_log(error); |
| 100 | 101 | ||
| 102 | if (!ret) | ||
| 103 | return ret; | ||
| 104 | |||
| 101 | /* create the queue/ subdir, just in case */ | 105 | /* create the queue/ subdir, just in case */ |
| 102 | xs *qdir = xs_fmt("%s/queue", srv_basedir); | 106 | xs *qdir = xs_fmt("%s/queue", srv_basedir); |
| 103 | mkdirx(qdir); | 107 | mkdirx(qdir); |
| @@ -148,6 +152,29 @@ int srv_open(const char *basedir, int auto_upgrade) | |||
| 148 | mkdirx(expdir); | 152 | mkdirx(expdir); |
| 149 | } | 153 | } |
| 150 | 154 | ||
| 155 | /* languages */ | ||
| 156 | srv_langs = xs_dict_new(); | ||
| 157 | srv_langs = xs_dict_set(srv_langs, "en", xs_stock(XSTYPE_NULL)); | ||
| 158 | |||
| 159 | xs *l_dir = xs_fmt("%s/lang/", srv_basedir); | ||
| 160 | mkdirx(l_dir); | ||
| 161 | |||
| 162 | l_dir = xs_str_cat(l_dir, "*.po"); | ||
| 163 | xs *pos = xs_glob(l_dir, 0, 0); | ||
| 164 | const char *po; | ||
| 165 | |||
| 166 | xs_list_foreach(pos, po) { | ||
| 167 | xs *d = xs_po_to_dict(po); | ||
| 168 | |||
| 169 | if (xs_is_dict(d)) { | ||
| 170 | xs *l = xs_split(po, "/"); | ||
| 171 | xs *id = xs_dup(xs_list_get(l, -1)); | ||
| 172 | id = xs_replace_i(id, ".po", ""); | ||
| 173 | |||
| 174 | srv_langs = xs_dict_set(srv_langs, id, d); | ||
| 175 | } | ||
| 176 | } | ||
| 177 | |||
| 151 | return ret; | 178 | return ret; |
| 152 | } | 179 | } |
| 153 | 180 | ||
| @@ -4064,3 +4091,21 @@ void badlogin_inc(const char *user, const char *addr) | |||
| 4064 | pthread_mutex_unlock(&data_mutex); | 4091 | pthread_mutex_unlock(&data_mutex); |
| 4065 | } | 4092 | } |
| 4066 | } | 4093 | } |
| 4094 | |||
| 4095 | |||
| 4096 | /** language strings **/ | ||
| 4097 | |||
| 4098 | const char *lang_str(const char *str, const snac *user) | ||
| 4099 | /* returns a translated string */ | ||
| 4100 | { | ||
| 4101 | const char *n_str = str; | ||
| 4102 | |||
| 4103 | if (user && xs_is_dict(user->lang) && xs_is_string(str)) { | ||
| 4104 | n_str = xs_dict_get(user->lang, str); | ||
| 4105 | |||
| 4106 | if (xs_is_null(n_str) || *n_str == '\0') | ||
| 4107 | n_str = str; | ||
| 4108 | } | ||
| 4109 | |||
| 4110 | return n_str; | ||
| 4111 | } | ||