X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fautocompletion%2Fserv_autocompletion.c;fp=citadel%2Fmodules%2Fautocompletion%2Fserv_autocompletion.c;h=0000000000000000000000000000000000000000;hb=f6fcf350671e3661f8f22696eb35133014ab6a14;hp=0e39b643507e71106d62734f29b6709d478a572a;hpb=2e4e67a1f7f65568abace99d13a71024ad06ebde;p=citadel.git diff --git a/citadel/modules/autocompletion/serv_autocompletion.c b/citadel/modules/autocompletion/serv_autocompletion.c deleted file mode 100644 index 0e39b6435..000000000 --- a/citadel/modules/autocompletion/serv_autocompletion.c +++ /dev/null @@ -1,227 +0,0 @@ -/* - * Autocompletion of email recipients, etc. - * - * Copyright (c) 1987-2020 by the citadel.org team - * - * This program is open source software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - - -#include "ctdl_module.h" -#include "serv_autocompletion.h" -#include "config.h" - - -/* - * Convert a structured name into a friendly name. Caller must free the - * returned pointer. - */ -char *n_to_fn(char *value) { - char *nnn = NULL; - int i; - - nnn = malloc(strlen(value) + 10); - strcpy(nnn, ""); - extract_token(&nnn[strlen(nnn)] , value, 3, ';', 999); - strcat(nnn, " "); - extract_token(&nnn[strlen(nnn)] , value, 1, ';', 999); - strcat(nnn, " "); - extract_token(&nnn[strlen(nnn)] , value, 2, ';', 999); - strcat(nnn, " "); - extract_token(&nnn[strlen(nnn)] , value, 0, ';', 999); - strcat(nnn, " "); - extract_token(&nnn[strlen(nnn)] , value, 4, ';', 999); - strcat(nnn, " "); - for (i=0; icm_fields[eMesageText]); - CM_Free(msg); - - /* - * Try to match from a friendly name (the "fn" field). If there is - * a match, return the entry in the form of: - * Display Name - */ - value = vcard_get_prop(v, "fn", 0, 0, 0); - if (value != NULL) if (bmstrcasestr(value, search_string)) { - value2 = vcard_get_prop(v, "email", 1, 0, 0); - if (value2 == NULL) value2 = ""; - cprintf("%s <%s>\n", value, value2); - vcard_free(v); - return; - } - - /* - * Try to match from a structured name (the "n" field). If there is - * a match, return the entry in the form of: - * Display Name - */ - value = vcard_get_prop(v, "n", 0, 0, 0); - if (value != NULL) if (bmstrcasestr(value, search_string)) { - - value2 = vcard_get_prop(v, "email", 1, 0, 0); - if (value2 == NULL) value2 = ""; - nnn = n_to_fn(value); - cprintf("%s <%s>\n", nnn, value2); - free(nnn); - vcard_free(v); - return; - } - - /* - * Try a partial match on all listed email addresses. - */ - i = 0; - while (value = vcard_get_prop(v, "email", 1, i++, 0), value != NULL) { - if (bmstrcasestr(value, search_string)) { - if (vcard_get_prop(v, "fn", 0, 0, 0)) { - cprintf("%s <%s>\n", vcard_get_prop(v, "fn", 0, 0, 0), value); - } - else if (vcard_get_prop(v, "n", 0, 0, 0)) { - nnn = n_to_fn(vcard_get_prop(v, "n", 0, 0, 0)); - cprintf("%s <%s>\n", nnn, value); - free(nnn); - - } - else { - cprintf("%s\n", value); - } - vcard_free(v); - return; - } - } - - vcard_free(v); -} - - - -/* - * Attempt to autocomplete an address based on a partial... - */ -void cmd_auto(char *argbuf) { - char hold_rm[ROOMNAMELEN]; - char search_string[256]; - long *msglist = NULL; - int num_msgs = 0; - long *fts_msgs = NULL; - int fts_num_msgs = 0; - struct cdbdata *cdbfr; - int r = 0; - int i = 0; - int j = 0; - int search_match = 0; - char *rooms_to_try[] = { USERCONTACTSROOM, ADDRESS_BOOK_ROOM }; - - if (CtdlAccessCheck(ac_logged_in)) return; - extract_token(search_string, argbuf, 0, '|', sizeof search_string); - if (IsEmptyStr(search_string)) { - cprintf("%d You supplied an empty partial.\n", - ERROR + ILLEGAL_VALUE); - return; - } - - strcpy(hold_rm, CC->room.QRname); /* save current room */ - cprintf("%d try these:\n", LISTING_FOLLOWS); - - /* - * Gather up message pointers in rooms containing vCards - */ - for (r=0; r < (sizeof(rooms_to_try) / sizeof(char *)); ++r) { - if (CtdlGetRoom(&CC->room, rooms_to_try[r]) == 0) { - cdbfr = cdb_fetch(CDB_MSGLISTS, &CC->room.QRnumber, sizeof(long)); - if (cdbfr != NULL) { - msglist = realloc(msglist, (num_msgs * sizeof(long)) + cdbfr->len + 1); - memcpy(&msglist[num_msgs], cdbfr->ptr, cdbfr->len); - num_msgs += (cdbfr->len / sizeof(long)); - cdb_free(cdbfr); - } - } - } - - /* - * Search-reduce the results if we have the full text index available - */ - if (CtdlGetConfigInt("c_enable_fulltext")) { - CtdlModuleDoSearch(&fts_num_msgs, &fts_msgs, search_string, "fulltext"); - if (fts_msgs) { - for (i=0; i 0) for (i=0; iroom.QRname, hold_rm)) { - CtdlGetRoom(&CC->room, hold_rm); /* return to saved room */ - } - - if (msglist) { - free(msglist); - } - -} - - -CTDL_MODULE_INIT(autocompletion) -{ - if (!threading) - { - CtdlRegisterProtoHook(cmd_auto, "AUTO", "Do recipient autocompletion"); - } - /* return our module name for the log */ - return "autocompletion"; -}