X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=blobdiff_plain;f=src%2Fclient.c;h=d205befab6fdc41f27425c9fff9209d8ae572b5c;hb=a76aa7a25380bb9947d8dfed2aca94832f47d564;hp=0ae364138febd121880e99894dbb927197e700c8;hpb=7a464badf789151889130191602d5dea5ba1d243;p=pazpar2-moved-to-github.git diff --git a/src/client.c b/src/client.c index 0ae3641..d205bef 100644 --- a/src/client.c +++ b/src/client.c @@ -121,6 +121,7 @@ struct client { YAZ_MUTEX mutex; int ref_count; char *id; + facet_limits_t facet_limits; }; struct suggestions { @@ -184,6 +185,8 @@ void client_set_state(struct client *cl, enum client_state st) client_get_id(cl), no_active); if (no_active == 0) { session_alert_watch(cl->session, SESSION_WATCH_SHOW); + session_alert_watch(cl->session, SESSION_WATCH_BYTARGET); + session_alert_watch(cl->session, SESSION_WATCH_TERMLIST); session_alert_watch(cl->session, SESSION_WATCH_SHOW_PREF); } } @@ -554,6 +557,8 @@ void client_got_records(struct client *cl) { client_unlock(cl); session_alert_watch(se, SESSION_WATCH_SHOW); + session_alert_watch(se, SESSION_WATCH_BYTARGET); + session_alert_watch(se, SESSION_WATCH_TERMLIST); session_alert_watch(se, SESSION_WATCH_RECORD); client_lock(cl); } @@ -827,6 +832,7 @@ struct client *client_create(const char *id) pazpar2_mutex_create(&cl->mutex, "client"); cl->preferred = 0; cl->ref_count = 1; + cl->facet_limits = 0; assert(id); cl->id = xstrdup(id); client_use(1); @@ -865,6 +871,7 @@ int client_destroy(struct client *c) c->cqlquery = 0; xfree(c->id); assert(!c->connection); + facet_limits_destroy(c->facet_limits); if (c->resultset) { @@ -988,6 +995,33 @@ static char *make_solrquery(struct client *cl) return r; } +const char *client_get_facet_limit_local(struct client *cl, + struct session_database *sdb, + int *l, + NMEM nmem, int *num, char ***values) +{ + const char *name = 0; + const char *value = 0; + for (; (name = facet_limits_get(cl->facet_limits, *l, &value)); (*l)++) + { + struct setting *s = 0; + + for (s = sdb->settings[PZ_LIMITMAP]; s; s = s->next) + { + const char *p = strchr(s->name + 3, ':'); + if (p && !strcmp(p + 1, name) && s->value && + !strncmp(s->value, "local:", 6)) + { + nmem_strsplit_escape2(nmem, "|", value, values, + num, 1, '\\', 1); + (*l)++; + return name; + } + } + } + return 0; +} + static int apply_limit(struct session_database *sdb, facet_limits_t facet_limits, WRBUF w_pqf, WRBUF w_ccl) @@ -1112,6 +1146,9 @@ int client_parse_query(struct client *cl, const char *query, if (apply_limit(sdb, facet_limits, w_pqf, w_ccl)) return -2; + facet_limits_destroy(cl->facet_limits); + cl->facet_limits = facet_limits_dup(facet_limits); + yaz_log(YLOG_LOG, "CCL query: %s", wrbuf_cstr(w_ccl)); cn = ccl_find_str(ccl_map, wrbuf_cstr(w_ccl), &cerror, &cpos); ccl_qual_rm(&ccl_map); @@ -1239,7 +1276,7 @@ const char * client_get_suggestions_xml(struct client *cl, WRBUF wrbuf) struct suggestions *suggestions = cl->suggestions; if (!suggestions) { - yaz_log(YLOG_DEBUG, "No suggestions found"); + //yaz_log(YLOG_DEBUG, "No suggestions found"); return ""; } if (suggestions->passthrough) {