Differences From:
File
src/url.c
part of check-in
[d65d619d94]
- Update conditions when to look for proxy URL in environment.
by
altufaltu on
2008-10-25 17:19:13.
[view]
To:
File
src/url.c
part of check-in
[c9cd128c2c]
- Add submenu entries on timeline pages for selecting options such as "tickets only" and "200 entries
per page" and so forth.
by
drh on
2008-11-02 18:22:30.
[view]
@@ -173,5 +173,77 @@
url_parse(zProxy);
g.urlPath = zOriginalUrl;
g.urlHostname = zOriginalHost;
}
+}
+
+#if INTERFACE
+/*
+** An instance of this object is used to build a URL with query parameters.
+*/
+struct HQuery {
+ Blob url; /* The URL */
+ const char *zBase; /* The base URL */
+ int nParam; /* Number of parameters. Max 10 */
+ const char *azName[10]; /* Parameter names */
+ const char *azValue[10]; /* Parameter values */
+};
+#endif
+
+/*
+** Initialize the URL object.
+*/
+void url_initialize(HQuery *p, const char *zBase){
+ blob_zero(&p->url);
+ p->zBase = zBase;
+ p->nParam = 0;
+}
+
+/*
+** Add a fixed parameter to an HQuery.
+*/
+void url_add_parameter(HQuery *p, const char *zName, const char *zValue){
+ assert( p->nParam < count(p->azName) );
+ assert( p->nParam < count(p->azValue) );
+ p->azName[p->nParam] = zName;
+ p->azValue[p->nParam] = zValue;
+ p->nParam++;
+}
+
+/*
+** Render the URL with a parameter override.
+*/
+char *url_render(
+ HQuery *p, /* Base URL */
+ const char *zName1, /* First override */
+ const char *zValue1, /* First override value */
+ const char *zName2, /* Second override */
+ const char *zValue2 /* Second override value */
+){
+ const char *zSep = "?";
+ int i;
+
+ blob_reset(&p->url);
+ blob_appendf(&p->url, "%s/%s", g.zBaseURL, p->zBase);
+ for(i=0; i<p->nParam; i++){
+ const char *z = p->azValue[i];
+ if( zName1 && strcmp(zName1,p->azName[i])==0 ){
+ zName1 = 0;
+ z = zValue1;
+ if( z==0 ) continue;
+ }
+ if( zName2 && strcmp(zName2,p->azName[i])==0 ){
+ zName2 = 0;
+ z = zValue2;
+ if( z==0 ) continue;
+ }
+ blob_appendf(&p->url, "%s%s=%T", zSep, p->azName[i], z);
+ zSep = "&";
+ }
+ if( zName1 && zValue1 ){
+ blob_appendf(&p->url, "%s%s=%T", zSep, zName1, zValue1);
+ }
+ if( zName2 && zValue2 ){
+ blob_appendf(&p->url, "%s%s=%T", zSep, zName2, zValue2);
+ }
+ return blob_str(&p->url);
}