count parameter for cgi query and config options
authorChristian Thaeter <ct@pipapo.org>
Tue, 15 Jan 2008 09:42:10 +0000 (10:42 +0100)
committerChristian Thaeter <ct@pipapo.org>
Tue, 15 Jan 2008 09:42:10 +0000 (10:42 +0100)
setting the 'count' will be used to limits items listed on one page

src/options.c
src/options.h
src/query.c
src/query.h
src/webgit.c
src/webgit.h

index 3fcc1a2..41f93b4 100644 (file)
@@ -63,6 +63,13 @@ conf_conf_opt (struct webgit_query* query, char* arg)
   return 0;
 }
 
+static int
+conf_count_opt (struct webgit_query* query, char* arg)
+{
+  query->count_def = atoi (arg);
+  return 0;
+}
+
 int
 webgit_commandline_dispatch (int argc, char**argv, struct webgit_query* query)
 {
index a40511d..4688cc4 100644 (file)
@@ -30,7 +30,8 @@
  CONF_OPT(query, "Set the QUERY_STRING [diag]")         \
  CONF_OPT(method, "Set REQUEST_METHOD [diag]")          \
  CONF_OPT(conf, "Set config file, may be empty")        \
- CONF_OPT(repo, "Add a repository")
+ CONF_OPT(repo, "Add a repository")                     \
+ CONF_OPT(count, "Set default for 'items per page'")
 
 // CONF_OPT(conffile) CONF_OPT(include)
 
index 67289d5..13dcfee 100644 (file)
@@ -37,11 +37,14 @@ webgit_query_init (struct webgit_query* q)
   q->deref_to_tree = 0;
   q->content_type = cwa_strndup ("text/html", SIZE_MAX);
 
+  q->count_def = 100;
+
   q->repo = NULL;
   q->action = NULL;
   q->object = NULL;
   q->head = NULL;
   q->path = NULL;
+  q->count = -1;
 
   llist_init (&q->repos);
 }
@@ -170,6 +173,20 @@ webgit_path_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
 }
 
 
+static void
+webgit_count_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
+{
+  (void) self;
+  struct webgit_query* q = (struct webgit_query*) u_dat;
+
+  /* TODO validate that v is a probably legal reference (alnum() || one of '_/.') */
+  if (webgit_validate_string (v, v_sz))
+    {
+      q->count = atoi (v);
+    }
+}
+
+
 void
 webgit_param_dispatch (const Cgi self,
                       const char* name,
index a3808f9..df603be 100644 (file)
 /*
   parameters for cgit requests
 */
-#define WEBGIT_PARAMS                                            \
- WEBGIT_PARAM(repo, "Repository to be queried")                  \
- WEBGIT_PARAM(action, "Action to be performed")                  \
- WEBGIT_PARAM(ref, "Selected ref (branch, tag, ..) for query")   \
- WEBGIT_PARAM(path, "Path and filename for the queried object")  \
- WEBGIT_PARAM(object, "Object to perform on")
-
+#define WEBGIT_PARAMS                                           \
+ WEBGIT_PARAM(repo, "Repository to be queried")                 \
+ WEBGIT_PARAM(action, "Action to be performed")                 \
+ WEBGIT_PARAM(ref, "Selected ref (branch, tag, ..) for query")  \
+ WEBGIT_PARAM(path, "Path and filename for the queried object") \
+ WEBGIT_PARAM(object, "Object to perform on")                   \
+ WEBGIT_PARAM(count, "How many things to display")
 
 
 void
index 43795b8..7bbac62 100644 (file)
@@ -172,6 +172,9 @@ main (int argc, char**argv)
 
   cgi_run_query (query.request, webgit_param_dispatch, &query);
 
+  if (query.count < 0)
+    query.count = query.count_def;
+
   /* TODO: if no object given but repo+path+ref are given then compute object */
 
   /* default action is to show the main page with the list of repos */
index 2d72e8b..1d9b43d 100644 (file)
@@ -48,6 +48,7 @@ struct webgit_query
   char* object;
   char* head;
   char* path;
+  int count;
 
   /* list of repositories */
   llist repos;