diff options
| author | 2023-05-15 13:04:30 +0200 | |
|---|---|---|
| committer | 2023-05-15 13:04:30 +0200 | |
| commit | e6eb1adc65cd9fcd315fa8d2e630717b216e9a93 (patch) | |
| tree | 331eed4e489507fc2994b36ad087977331a299a9 | |
| parent | Updated RELEASE_NOTES. (diff) | |
| download | snac2-e6eb1adc65cd9fcd315fa8d2e630717b216e9a93.tar.gz snac2-e6eb1adc65cd9fcd315fa8d2e630717b216e9a93.tar.xz snac2-e6eb1adc65cd9fcd315fa8d2e630717b216e9a93.zip | |
Also find local users in /api/v1/search.
| -rw-r--r-- | data.c | 2 | ||||
| -rw-r--r-- | mastoapi.c | 28 | ||||
| -rw-r--r-- | snac.h | 2 |
3 files changed, 29 insertions, 3 deletions
| @@ -224,7 +224,7 @@ int user_open(snac *snac, const char *uid) | |||
| 224 | } | 224 | } |
| 225 | 225 | ||
| 226 | 226 | ||
| 227 | d_char *user_list(void) | 227 | xs_list *user_list(void) |
| 228 | /* returns the list of user ids */ | 228 | /* returns the list of user ids */ |
| 229 | { | 229 | { |
| 230 | xs *spec = xs_fmt("%s/user/" "*", srv_basedir); | 230 | xs *spec = xs_fmt("%s/user/" "*", srv_basedir); |
| @@ -974,15 +974,41 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path, | |||
| 974 | out = xs_list_new(); | 974 | out = xs_list_new(); |
| 975 | xs *wing = following_list(&snac1); | 975 | xs *wing = following_list(&snac1); |
| 976 | xs *wers = follower_list(&snac1); | 976 | xs *wers = follower_list(&snac1); |
| 977 | xs *ulst = user_list(); | ||
| 977 | xs_list *p; | 978 | xs_list *p; |
| 979 | xs_str *v; | ||
| 978 | xs_set seen; | 980 | xs_set seen; |
| 979 | 981 | ||
| 980 | xs_set_init(&seen); | 982 | xs_set_init(&seen); |
| 981 | 983 | ||
| 984 | /* local users */ | ||
| 985 | p = ulst; | ||
| 986 | while (xs_list_iter(&p, &v)) { | ||
| 987 | snac user; | ||
| 988 | |||
| 989 | if (strcmp(v, xs_dict_get(snac1.config, "uid")) == 0) | ||
| 990 | continue; | ||
| 991 | |||
| 992 | if (user_open(&user, v)) { | ||
| 993 | xs *v2 = xs_tolower_i(xs_dup(v)); | ||
| 994 | |||
| 995 | if (xs_startswith(v2, q)) { | ||
| 996 | xs *actor = msg_actor(&user); | ||
| 997 | xs *acct = mastoapi_account(actor); | ||
| 998 | |||
| 999 | out = xs_list_append(out, acct); | ||
| 1000 | } | ||
| 1001 | |||
| 1002 | xs_set_add(&seen, user.actor); | ||
| 1003 | |||
| 1004 | user_free(&user); | ||
| 1005 | } | ||
| 1006 | } | ||
| 1007 | |||
| 1008 | /* user relations */ | ||
| 982 | xs_list *lsts[] = { wing, wers, NULL }; | 1009 | xs_list *lsts[] = { wing, wers, NULL }; |
| 983 | int n; | 1010 | int n; |
| 984 | for (n = 0; (p = lsts[n]) != NULL; n++) { | 1011 | for (n = 0; (p = lsts[n]) != NULL; n++) { |
| 985 | xs_str *v; | ||
| 986 | 1012 | ||
| 987 | while (xs_list_iter(&p, &v)) { | 1013 | while (xs_list_iter(&p, &v)) { |
| 988 | /* already seen? skip */ | 1014 | /* already seen? skip */ |
| @@ -43,7 +43,7 @@ typedef struct _snac { | |||
| 43 | 43 | ||
| 44 | int user_open(snac *snac, const char *uid); | 44 | int user_open(snac *snac, const char *uid); |
| 45 | void user_free(snac *snac); | 45 | void user_free(snac *snac); |
| 46 | d_char *user_list(void); | 46 | xs_list *user_list(void); |
| 47 | int user_open_by_md5(snac *snac, const char *md5); | 47 | int user_open_by_md5(snac *snac, const char *md5); |
| 48 | 48 | ||
| 49 | void snac_debug(snac *snac, int level, d_char *str); | 49 | void snac_debug(snac *snac, int level, d_char *str); |