/*
- * $Id: http_command.c,v 1.19 2007-01-12 23:07:54 adam Exp $
+ * $Id: http_command.c,v 1.23 2007-01-17 14:21:29 quinn Exp $
*/
#include <stdio.h>
}
// This implements functionality somewhat similar to 'bytarget', but in a termlist form
-static void targets_termlist(WRBUF wrbuf, struct session *se)
+static void targets_termlist(WRBUF wrbuf, struct session *se, int num)
{
struct hitsbytarget *ht;
int count, i;
if (!(ht = hitsbytarget(se, &count)))
return;
qsort(ht, count, sizeof(struct hitsbytarget), cmp_ht);
- for (i = 0; i < count && i < 15; i++)
+ for (i = 0; i < count && i < num; i++)
{
wrbuf_puts(wrbuf, "\n<term>\n");
wrbuf_printf(wrbuf, "<name>%s</name>\n", ht[i].id);
int len;
int i;
char *name = http_argbyname(rq, "name");
+ char *nums = http_argbyname(rq, "num");
+ int num = 15;
int status;
if (!s)
name = "subject";
if (strlen(name) > 255)
return;
+ if (nums)
+ num = atoi(nums);
wrbuf_rewind(c->wrbuf);
wrbuf_printf(c->wrbuf, "\n<list name=\"%s\">\n", tname);
if (!strcmp(tname, "xtargets"))
- targets_termlist(c->wrbuf, s->psession);
+ targets_termlist(c->wrbuf, s->psession, num);
else
{
p = termlist(s->psession, tname, &len);
if (p)
- for (i = 0; i < len; i++)
+ for (i = 0; i < len && i < num; i++)
{
wrbuf_puts(c->wrbuf, "\n<term>");
wrbuf_printf(c->wrbuf, "<name>%s</name>", p[i]->term);
wrbuf_puts(w, md->data.text);
break;
case Metadata_type_year:
- wrbuf_printf(w, "%d", md->data.year.year1);
- if (md->data.year.year1 != md->data.year.year2)
- wrbuf_printf(w, "-%d", md->data.year.year2);
+ wrbuf_printf(w, "%d", md->data.number.min);
+ if (md->data.number.min != md->data.number.max)
+ wrbuf_printf(w, "-%d", md->data.number.max);
break;
default:
wrbuf_puts(w, "[can't represent]");
struct http_response *rs = c->response;
struct http_session *s = locate_session(rq, rs);
struct record_cluster **rl;
- NMEM nmem_show;
+ struct reclist_sortparms *sp;
char *start = http_argbyname(rq, "start");
char *num = http_argbyname(rq, "num");
+ char *sort = http_argbyname(rq, "sort");
int startn = 0;
int numn = 20;
int total;
startn = atoi(start);
if (num)
numn = atoi(num);
+ if (!sort)
+ sort = "relevance";
+ if (!(sp = reclist_parse_sortparms(c->nmem, sort)))
+ {
+ error(rs, "500", "Bad sort parameters", 0);
+ return;
+ }
- nmem_show = nmem_create();
- rl = show(s->psession, startn, &numn, &total, &total_hits, nmem_show);
+ rl = show(s->psession, sp, startn, &numn, &total, &total_hits, c->nmem);
wrbuf_rewind(c->wrbuf);
wrbuf_puts(c->wrbuf, "<show>\n<status>OK</status>\n");
wrbuf_puts(c->wrbuf, "</show>\n");
rs->payload = nmem_strdup(c->nmem, wrbuf_buf(c->wrbuf));
http_send_response(c);
- nmem_destroy(nmem_show);
}
static void show_records_ready(void *data)
static void cmd_info(struct http_channel *c)
{
- char yaz_version_str[8];
- struct http_request *rq = c->request;
+ char yaz_version_str[20];
struct http_response *rs = c->response;
wrbuf_rewind(c->wrbuf);
- wrbuf_puts(c->wrbuf, "<stat>\n");
+ wrbuf_puts(c->wrbuf, "<info>\n");
wrbuf_printf(c->wrbuf, " <version>\n");
wrbuf_printf(c->wrbuf, " <pazpar2>%s</pazpar2>\n", VERSION);
YAZ_VERSION, yaz_version_str);
wrbuf_printf(c->wrbuf, " </version>\n");
- wrbuf_puts(c->wrbuf, "</stat>");
+ wrbuf_puts(c->wrbuf, "</info>");
rs->payload = nmem_strdup(c->nmem, wrbuf_buf(c->wrbuf));
http_send_response(c);
}