X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Fsession.c;h=eac40a0932c65d18ee08d65b71688d116fb8dd2d;hb=83875957712d17f110b1b7055fa26fcfb9c135e7;hp=a3862c12f838b80b4755b4c3f7fec13ef7ef7449;hpb=fb19bc317370b4f4b508088b034b4c2d19257042;p=pazpar2-moved-to-github.git diff --git a/src/session.c b/src/session.c index a3862c1..eac40a0 100644 --- a/src/session.c +++ b/src/session.c @@ -1,5 +1,5 @@ /* This file is part of Pazpar2. - Copyright (C) 2006-2013 Index Data + Copyright (C) Index Data Pazpar2 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -905,36 +905,38 @@ static struct session_database *find_session_database(struct session *se, } // Apply a session override to a database -void session_apply_setting(struct session *se, char *dbname, char *setting, +void session_apply_setting(struct session *se, char *dbname, char *name, char *value) { struct session_database *sdb = find_session_database(se, dbname); struct conf_service *service = se->service; - struct setting *new = nmem_malloc(se->session_nmem, sizeof(*new)); - int offset = settings_create_offset(service, setting); + struct setting *s; + int offset = settings_create_offset(service, name); expand_settings_array(&sdb->settings, &sdb->num_settings, offset, se->session_nmem); - new->precedence = 0; - new->target = dbname; - new->name = setting; - new->value = value; - new->next = sdb->settings[offset]; - sdb->settings[offset] = new; - - se->settings_modified = 1; // Force later recompute of settings-driven data structures // (happens when a search starts and client connections are prepared) - switch (offset) - { - case PZ_XSLT: - if (sdb->map) + if (offset == PZ_XSLT) + sdb->map = 0; + + se->settings_modified = 1; + for (s = sdb->settings[offset]; s; s = s->next) + if (!strcmp(s->name, name) && + dbname && s->target && !strcmp(dbname, s->target)) { - sdb->map = 0; + s->value = value; + return; } - break; - } + s = nmem_malloc(se->session_nmem, sizeof(*s)); + s->precedence = 0; + s->target = dbname; + s->name = name; + s->value = value; + s->next = sdb->settings[offset]; + sdb->settings[offset] = s; + } void session_destroy(struct session *se) @@ -1459,8 +1461,11 @@ static struct record_metadata *record_metadata_init( { case Metadata_type_generic: case Metadata_type_skiparticle: - rec_md->data.text.disp = - normalize7bit_generic(nmem_strdup(nmem, value), " ,/.:(["); + if (strstr(value, "://")) /* looks like a URL */ + rec_md->data.text.disp = nmem_strdup(nmem, value); + else + rec_md->data.text.disp = + normalize7bit_generic(nmem_strdup(nmem, value), " ,/.:(["); rec_md->data.text.sort = 0; rec_md->data.text.snippet = 0; break;