use viewspecific to transport params through the blogview_renderer
authorWilfried Goesgens <dothebart@citadel.org>
Sat, 3 Jan 2015 20:31:14 +0000 (21:31 +0100)
committerWilfried Goesgens <dothebart@citadel.org>
Sat, 3 Jan 2015 20:31:14 +0000 (21:31 +0100)
webcit/blogview_renderer.c
webcit/marchlist.c

index fa2c64752db2dd0d83ba3c4f217c147055788df0..2e9d35e32a6280877567429711d02b25ed430ef6 100644 (file)
 #include "dav.h"
 
 
+typedef struct __BLOG {
+       HashList *BLOG;
+       long p;
+       int gotonext;
+} BLOG;
+
+
 /*
  * Generate a permalink for a post
  * (Call with NULL arguments to make this function wcprintf() the permalink
@@ -102,8 +109,13 @@ int blogview_GetParamsGetServerCall(SharedMessageStatus *Stat,
                                    char *filter,
                                    long flen)
 {
-       HashList *BLOG = NewHash(1, NULL);
-       *ViewSpecific = BLOG;
+       BLOG *BL = (BLOG*) malloc(sizeof(BLOG)); 
+       BL->BLOG = NewHash(1, NULL);
+       
+       /* are we looking for a specific post? */
+       BL->p = lbstr("p");
+       BL->gotonext = havebstr("gotonext");
+       *ViewSpecific = BL;
 
        Stat->startmsg = (-1);                                  /* not used here */
        Stat->sortit = 1;                                       /* not used here */
@@ -112,7 +124,8 @@ int blogview_GetParamsGetServerCall(SharedMessageStatus *Stat,
        
        /* perform a "read all" call to fetch the message list -- we'll cut it down later */
        rlid[2].cmd(cmd, len);
-       
+       if (BL->gotonext)
+               Stat->load_seen = 1;
        return 200;
 }
 
@@ -162,18 +175,16 @@ int blogview_LoadMsgFromServer(SharedMessageStatus *Stat,
                              int is_new, 
                              int i)
 {
-       HashList *BLOG = (HashList *) *ViewSpecific;
+       BLOG *BL = (BLOG*) *ViewSpecific;
        struct bltr b;
        struct blogpost *bp = NULL;
-       int p = 0;
 
        b = blogview_learn_thread_references(Msg->msgnum);
 
        /* Stop processing if the viewer is only interested in a single post and
         * that message ID is neither the id nor the refs.
         */
-       p = atoi(BSTR("p"));    /* are we looking for a specific post? */
-       if ((p != 0) && (p != b.id) && (p != b.refs)) {
+       if ((BL->p != 0) && (BL->p != b.id) && (BL->p != b.refs)) {
                return 200;
        }
 
@@ -185,10 +196,10 @@ int blogview_LoadMsgFromServer(SharedMessageStatus *Stat,
                if (!bp) return(200);
                memset(bp, 0, sizeof (struct blogpost));
                bp->top_level_id = b.id;
-               Put(BLOG, (const char *)&b.id, sizeof(b.id), bp, (DeleteHashDataFunc)blogpost_destroy);
+               Put(BL->BLOG, (const char *)&b.id, sizeof(b.id), bp, (DeleteHashDataFunc)blogpost_destroy);
        }
        else {
-               GetHash(BLOG, (const char *)&b.refs , sizeof(b.refs), (void *)&bp);
+               GetHash(BL->BLOG, (const char *)&b.refs , sizeof(b.refs), (void *)&bp);
        }
 
        /*
@@ -238,7 +249,7 @@ static int blogview_sortfunc(const void *a, const void *b) {
  */
 int blogview_render(SharedMessageStatus *Stat, void **ViewSpecific, long oper)
 {
-       HashList *BLOG = (HashList *) *ViewSpecific;
+       BLOG *BL = (BLOG*) *ViewSpecific;
        HashPos *it;
        const char *Key;
        void *Data;
@@ -259,8 +270,8 @@ int blogview_render(SharedMessageStatus *Stat, void **ViewSpecific, long oper)
        if (maxp < 1) maxp = 5;         /* default; move somewhere else? */
 
        /* Iterate through the hash list and copy the data pointers into an array */
-       it = GetNewHashPos(BLOG, 0);
-       while (GetNextHashPos(BLOG, it, &len, &Key, &Data)) {
+       it = GetNewHashPos(BL->BLOG, 0);
+       while (GetNextHashPos(BL->BLOG, it, &len, &Key, &Data)) {
                if (num_blogposts >= num_blogposts_alloc) {
                        if (num_blogposts_alloc == 0) {
                                num_blogposts_alloc = 100;
@@ -324,10 +335,10 @@ int blogview_render(SharedMessageStatus *Stat, void **ViewSpecific, long oper)
 
 int blogview_Cleanup(void **ViewSpecific)
 {
-       HashList *BLOG = (HashList *) *ViewSpecific;
-
-       DeleteHash(&BLOG);
+       BLOG *BL = (BLOG*) *ViewSpecific;
 
+       DeleteHash(&BL->BLOG);
+       free(BL);
        wDumpContent(1);
        return 0;
 }
index 2124697d43d9cee088cae2c2b2aaab5bfbbe46a7..7031d264309cf01101e3d923d89b12e74b537b35 100644 (file)
@@ -169,6 +169,7 @@ void gotonext(void)
        }
        if (WC->march != NULL) {
                next_room = NewStrBufPlain(pop_march(-1), -1);/*TODO: migrate march to strbuf */
+               putlbstr("gotonext", 1);
        } else {
                next_room = NewStrBufPlain(HKEY("_BASEROOM_"));
        }