]> code.citadel.org Git - citadel.git/blobdiff - webcit/blogview_renderer.c
We need EUID indexing for Blog rooms.
[citadel.git] / webcit / blogview_renderer.c
index 8190cb8c8ddca9a1b7b6f2c16d85bfad989a058f..f8ba6cd2706e938bae293bde1d069d027e561835 100644 (file)
@@ -1,7 +1,7 @@
 /* 
  * Blog view renderer module for WebCit
  *
- * Copyright (c) 1996-2010 by the citadel.org team
+ * Copyright (c) 1996-2011 by the citadel.org team
  *
  * This program is open source software.  You can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
  */
 struct blogpost {
        int top_level_id;
-       long *msgs;             /* Array of msgnums for messages we are displaying */
-       int num_msgs;           /* Number of msgnums stored in 'msgs' */
-       int alloc_msgs;         /* Currently allocated size of array */
+       long *msgs;                     /* Array of msgnums for messages we are displaying */
+       int num_msgs;                   /* Number of msgnums stored in 'msgs' */
+       int alloc_msgs;                 /* Currently allocated size of array */
+       char euid[BLOG_EUIDBUF_SIZE];   /* please do not change this to a StrBuf */
 };
 
 
@@ -53,8 +54,10 @@ void blogpost_render_and_destroy(struct blogpost *bp) {
 
                if (p == 0) {
                        /* Show the number of comments */
-                       wc_printf("<a href=\"readfwd?p=%d?go=", bp->top_level_id);
-                       urlescputs(ChrPtr(WC->CurRoom.name));
+                       wc_printf("<a href=\"readfwd");
+                       wc_printf("?p=%d", bp->top_level_id);
+                       wc_printf("?euid=");    urlescputs(bp->euid);   /* FIXME not really */
+                       wc_printf("?go=");      urlescputs(ChrPtr(WC->CurRoom.name));
                        wc_printf("#comments\">");
                        wc_printf(_("%d comments"), bp->num_msgs - 1);
                        wc_printf("</a>");
@@ -87,7 +90,7 @@ void blogpost_render_and_destroy(struct blogpost *bp) {
 struct bltr {
        int id;
        int refs;
-       StrBuf *euid;
+       char euid[BLOG_EUIDBUF_SIZE];   /* please do not change this to a StrBuf */
 };
 
 
@@ -124,7 +127,7 @@ struct bltr blogview_learn_thread_references(long msgnum)
        StrBuf *Buf;
        StrBuf *r;
        int len;
-       struct bltr bltr = { 0, 0, NULL };
+       struct bltr bltr = { 0, 0, "" } ;
        Buf = NewStrBuf();
        r = NewStrBuf();
        serv_printf("MSG0 %ld|1", msgnum);              /* top level citadel headers only */
@@ -145,7 +148,7 @@ struct bltr blogview_learn_thread_references(long msgnum)
                        }
                        else if (!strncasecmp(ChrPtr(Buf), "exti=", 5)) {
                                StrBufCutLeft(Buf, 5);          /* trim the field name */
-                               bltr.euid = NewStrBufDup(Buf);
+                               safestrncpy(bltr.euid, ChrPtr(Buf), sizeof(bltr.euid));
                        }
                }
        }
@@ -170,9 +173,8 @@ int blogview_LoadMsgFromServer(SharedMessageStatus *Stat,
 
        b = blogview_learn_thread_references(Msg->msgnum);
 
-       if (b.euid != NULL) {
-               syslog(LOG_DEBUG, "\033[7m%s\033[0m", ChrPtr(b.euid));
-               FreeStrBuf(&b.euid);
+       if (!IsEmptyStr(b.euid)) {
+               syslog(LOG_DEBUG, "\033[7m%s\033[0m", b.euid);
        }
 
        /* FIXME an optimization here -- one we ought to perform -- is to exit this
@@ -186,6 +188,7 @@ int blogview_LoadMsgFromServer(SharedMessageStatus *Stat,
                if (!bp) return(200);
                memset(bp, 0, sizeof (struct blogpost));
                bp->top_level_id = b.id;
+               strcpy(bp->euid, b.euid);
                Put(BLOG, (const char *)&b.id, sizeof(b.id), bp,
                                        (DeleteHashDataFunc)blogpost_render_and_destroy);
        }