X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fblogview_renderer.c;h=5cec69676e69439aa4428ab1b35ee50b30e9cfc4;hb=HEAD;hp=d49788e57b5fc306d2816c9131edde813ca94f0a;hpb=c6aec42f213ec284e34648f3d69bcf927dccddb1;p=citadel.git diff --git a/webcit/blogview_renderer.c b/webcit/blogview_renderer.c index d49788e57..2e80f7a89 100644 --- a/webcit/blogview_renderer.c +++ b/webcit/blogview_renderer.c @@ -1,4 +1,3 @@ - /* * Blog view renderer module for WebCit * @@ -14,7 +13,7 @@ */ #include "webcit.h" -#include "webserver.h" + #include "dav.h" CtxType CTX_BLOGPOST = CTX_NONE; @@ -39,7 +38,7 @@ typedef struct _blogpost { int num_msgs; /* Number of msgnums stored in 'msgs' */ int alloc_msgs; /* Currently allocated size of array */ int unread_oments; -} blogpost; +}blogpost; /* @@ -58,17 +57,16 @@ void sitemap_do_blog(void) { memset(&Stat, 0, sizeof Stat); memset(&oneBP, 0, sizeof(blogpost)); - memset(&SubTP, 0, sizeof(WCTemplputParams)); + memset(&SubTP, 0, sizeof(WCTemplputParams)); StackContext(NULL, &SubTP, &oneBP, CTX_BLOGPOST, 0, NULL); Stat.maxload = INT_MAX; Stat.lowest_found = (-1); Stat.highest_found = (-1); num_msgs = load_msg_ptrs("MSGS ALL", NULL, NULL, &Stat, NULL, NULL, NULL, NULL, 0); - if (num_msgs < 1) - return; + if (num_msgs < 1) return; - for (i = 0; i < num_msgs; ++i) { + for (i=0; isumm); if (Msg != NULL) { ReadOneMessageSummary(Msg, FoundCharset, Buf); @@ -91,21 +89,21 @@ void sitemap_do_blog(void) { * (Call with NULL arguments to make this function wcprintf() the permalink * instead of writing it to the template) */ -void tmplput_blog_toplevel_id(StrBuf * Target, WCTemplputParams * TP) { - blogpost *bp = (blogpost *) CTX(CTX_BLOGPOST); +void tmplput_blog_toplevel_id(StrBuf *Target, WCTemplputParams *TP) { + blogpost *bp = (blogpost*) CTX(CTX_BLOGPOST); char buf[SIZ]; snprintf(buf, SIZ, "%d", bp->top_level_id); StrBufAppendTemplateStr(Target, TP, buf, 0); } -void tmplput_blog_comment_count(StrBuf * Target, WCTemplputParams * TP) { - blogpost *bp = (blogpost *) CTX(CTX_BLOGPOST); +void tmplput_blog_comment_count(StrBuf *Target, WCTemplputParams *TP) { + blogpost *bp = (blogpost*) CTX(CTX_BLOGPOST); char buf[SIZ]; - snprintf(buf, SIZ, "%d", bp->num_msgs - 1); + snprintf(buf, SIZ, "%d", bp->num_msgs -1); StrBufAppendTemplateStr(Target, TP, buf, 0); } -void tmplput_blog_comment_unread_count(StrBuf * Target, WCTemplputParams * TP) { - blogpost *bp = (blogpost *) CTX(CTX_BLOGPOST); +void tmplput_blog_comment_unread_count(StrBuf *Target, WCTemplputParams *TP) { + blogpost *bp = (blogpost*) CTX(CTX_BLOGPOST); char buf[SIZ]; snprintf(buf, SIZ, "%d", bp->unread_oments); StrBufAppendTemplateStr(Target, TP, buf, 0); @@ -116,13 +114,14 @@ void tmplput_blog_comment_unread_count(StrBuf * Target, WCTemplputParams * TP) { /* * Render a single blog post and (optionally) its comments */ -void blogpost_render(blogpost * bp, int with_comments, WCTemplputParams * TP) { +void blogpost_render(blogpost *bp, int with_comments, WCTemplputParams *TP) +{ wcsession *WCC = WC; WCTemplputParams SubTP; const StrBuf *Mime; int i; - memset(&SubTP, 0, sizeof(WCTemplputParams)); + memset(&SubTP, 0, sizeof(WCTemplputParams)); StackContext(TP, &SubTP, bp, CTX_BLOGPOST, 0, NULL); /* Always show the top level post, unless we somehow ended up with an empty list */ @@ -134,7 +133,7 @@ void blogpost_render(blogpost * bp, int with_comments, WCTemplputParams * TP) { /* Show any existing comments, then offer the comment box */ DoTemplate(HKEY("view_blog_show_commentlink"), WCC->WBuf, &SubTP); - for (i = 1; i < bp->num_msgs; ++i) { + for (i=1; inum_msgs; ++i) { read_message(WC->WBuf, HKEY("view_blog_comment"), bp->msgs[i], NULL, &Mime, &SubTP); } DoTemplate(HKEY("view_blog_comment_box"), WCC->WBuf, &SubTP); @@ -151,7 +150,7 @@ void blogpost_render(blogpost * bp, int with_comments, WCTemplputParams * TP) { /* * Destructor for "blogpost" */ -void blogpost_destroy(blogpost * bp) { +void blogpost_destroy(blogpost *bp) { if (bp->alloc_msgs > 0) { free(bp->msgs); } @@ -162,30 +161,34 @@ void blogpost_destroy(blogpost * bp) { /* * Entry point for message read operations. */ -int blogview_GetParamsGetServerCall(SharedMessageStatus * Stat, - void **ViewSpecific, long oper, char *cmd, long len, char *filter, long flen) { - BLOG *BL = (BLOG *) malloc(sizeof(BLOG)); +int blogview_GetParamsGetServerCall(SharedMessageStatus *Stat, + void **ViewSpecific, + long oper, + char *cmd, + long len, + char *filter, + long flen) +{ + BLOG *BL = (BLOG*) malloc(sizeof(BLOG)); BL->BLOGPOSTS = NewHash(1, lFlathash); - + /* are we looking for a specific post? */ BL->p = lbstr("p"); BL->gotonext = havebstr("gotonext"); BL->Charset = NewStrBuf(); BL->Buf = NewStrBuf(); BL->FilterTag = sbstr("FilterTag"); - BL->firstp = lbstr("firstp"); /* start reading at... */ - BL->maxp = lbstr("maxp"); /* max posts to show... */ - if (BL->maxp < 1) - BL->maxp = 5; /* default; move somewhere else? */ + BL->firstp = lbstr("firstp"); /* start reading at... */ + BL->maxp = lbstr("maxp"); /* max posts to show... */ + if (BL->maxp < 1) BL->maxp = 5; /* default; move somewhere else? */ putlbstr("maxp", BL->maxp); *ViewSpecific = BL; - Stat->startmsg = (-1); /* not used here */ - Stat->sortit = 1; /* not used here */ - Stat->num_displayed = DEFAULT_MAXMSGS; /* not used here */ - if (Stat->maxmsgs == 0) - Stat->maxmsgs = DEFAULT_MAXMSGS; - + Stat->startmsg = (-1); /* not used here */ + Stat->sortit = 1; /* not used here */ + Stat->num_displayed = DEFAULT_MAXMSGS; /* not used here */ + if (Stat->maxmsgs == 0) Stat->maxmsgs = DEFAULT_MAXMSGS; + /* perform a "read all" call to fetch the message list -- we'll cut it down later */ snprintf(cmd, len, "MSGS ALL||2|8\n"); @@ -195,45 +198,54 @@ int blogview_GetParamsGetServerCall(SharedMessageStatus * Stat, } -int blogview_IdentifyBlogposts(StrBuf * Line, - const char **pos, message_summary * Msg, StrBuf * ConversionBuffer, void **ViewSpecific) { - BLOG *BL = (BLOG *) * ViewSpecific; +int blogview_IdentifyBlogposts (StrBuf *Line, + const char **pos, + message_summary *Msg, + StrBuf *ConversionBuffer, + void **ViewSpecific) +{ + BLOG *BL = (BLOG*) *ViewSpecific; blogpost *bp = NULL; /* Stop processing if the viewer is only interested in a single post and * that message ID is neither the id nor the refs. */ - if ((BL->p != 0) && (BL->p != Msg->reply_inreplyto_hash) && (BL->p != Msg->reply_references_hash)) { + if ((BL->p != 0) && + (BL->p != Msg->reply_inreplyto_hash) && + (BL->p != Msg->reply_references_hash)) { return 0; } - if ((Msg->reply_references_hash == 0) && - (BL->FilterTag != NULL) && (strstr(ChrPtr(Msg->EnvTo), ChrPtr(BL->FilterTag)) == NULL)) { + if ((Msg->reply_references_hash == 0) && + (BL->FilterTag != NULL) && + (strstr(ChrPtr(Msg->EnvTo) , ChrPtr(BL->FilterTag)) == NULL)) { /* filtering for tags, blogpost doesn't fit. */ return 0; } - + /* * build up a hashtable of the blogposts. */ if (Msg->reply_references_hash == 0) { bp = malloc(sizeof(blogpost)); - if (bp == NULL) - return 0; + if (bp == NULL) return 0; - memset(bp, 0, sizeof(blogpost)); + memset(bp, 0, sizeof (blogpost)); - bp->top_level_id = Msg->reply_inreplyto_hash; + bp->top_level_id = Msg->reply_inreplyto_hash; bp->alloc_msgs = 1000; bp->msgs = malloc(bp->alloc_msgs * sizeof(long)); - memset(bp->msgs, 0, (bp->alloc_msgs * sizeof(long))); + memset(bp->msgs, 0, (bp->alloc_msgs * sizeof(long)) ); /* the first one is the blogpost itself, all subequent are comments. */ bp->msgs[0] = Msg->msgnum; bp->num_msgs = 1; - Put(BL->BLOGPOSTS, LKEY(Msg->reply_inreplyto_hash), bp, (DeleteHashDataFunc) blogpost_destroy); + Put(BL->BLOGPOSTS, + LKEY(Msg->reply_inreplyto_hash), + bp, + (DeleteHashDataFunc)blogpost_destroy); } /* * Comments will be handled on the next iteration. @@ -246,15 +258,22 @@ int blogview_IdentifyBlogposts(StrBuf * Line, /* * This function is called for every message in the list. */ -int blogview_LoadMsgFromServer(SharedMessageStatus * Stat, void **ViewSpecific, message_summary * Msg, int is_new, int i) { +int blogview_LoadMsgFromServer(SharedMessageStatus *Stat, + void **ViewSpecific, + message_summary* Msg, + int is_new, + int i) +{ blogpost *bp = NULL; - BLOG *BL = (BLOG *) * ViewSpecific; + BLOG *BL = (BLOG*) *ViewSpecific; if (Msg->reply_references_hash != 0) { /* * this is a comment. try to assign it to a blogpost. */ - GetHash(BL->BLOGPOSTS, LKEY(Msg->reply_references_hash), (void *) &bp); + GetHash(BL->BLOGPOSTS, + LKEY(Msg->reply_references_hash), + (void *)&bp); /* * Now we have a 'blogpost' to which we can add the comment. It's either the @@ -265,7 +284,8 @@ int blogview_LoadMsgFromServer(SharedMessageStatus * Stat, void **ViewSpecific, if (bp->num_msgs >= bp->alloc_msgs) { bp->alloc_msgs *= 2; bp->msgs = realloc(bp->msgs, (bp->alloc_msgs * sizeof(long))); - memset(&bp->msgs[bp->num_msgs], 0, ((bp->alloc_msgs - bp->num_msgs) * sizeof(long))); + memset(&bp->msgs[bp->num_msgs], 0, + ((bp->alloc_msgs - bp->num_msgs) * sizeof(long)) ); } bp->msgs[bp->num_msgs++] = Msg->msgnum; if ((Msg->Flags & MSGFLAG_READ) != 0) { @@ -288,15 +308,13 @@ int blogview_LoadMsgFromServer(SharedMessageStatus * Stat, void **ViewSpecific, * Sort a list of 'struct blogpost' pointers by newest-to-oldest msgnum. * With big thanks to whoever wrote http://www.c.happycodings.com/Sorting_Searching/code14.html */ -static int blogview_sortfunc(const void *a, const void *b) { +static int blogview_sortfunc(const void *a, const void *b) { blogpost const *one = GetSearchPayload(a); blogpost const *two = GetSearchPayload(b); - if (one->msgs[0] > two->msgs[0]) - return (-1); - if (one->msgs[0] < two->msgs[0]) - return (+1); - return (0); + if ( one->msgs[0] > two->msgs[0] ) return(-1); + if ( one->msgs[0] < two->msgs[0] ) return(+1); + return(0); } @@ -304,9 +322,10 @@ static int blogview_sortfunc(const void *a, const void *b) { * All blogpost entries are now in the hash list. * Sort them, select the desired range, and render what we want to see. */ -int blogview_render(SharedMessageStatus * Stat, void **ViewSpecific, long oper) { +int blogview_render(SharedMessageStatus *Stat, void **ViewSpecific, long oper) +{ wcsession *WCC = WC; - BLOG *BL = (BLOG *) * ViewSpecific; + BLOG *BL = (BLOG*) *ViewSpecific; HashPos *it; const char *Key; blogpost *thisBlogpost; @@ -327,8 +346,8 @@ int blogview_render(SharedMessageStatus * Stat, void **ViewSpecific, long oper) /* Nothing to do... */ return 0; } - memset(&SubTP, 0, sizeof(WCTemplputParams)); - memset(&StopSubTP, 0, sizeof(WCTemplputParams)); + memset(&SubTP, 0, sizeof(WCTemplputParams)); + memset(&StopSubTP, 0, sizeof(WCTemplputParams)); memset(&oneBP, 0, sizeof(blogpost)); /* Comments are shown if we are only viewing a single blog post */ @@ -351,7 +370,7 @@ int blogview_render(SharedMessageStatus * Stat, void **ViewSpecific, long oper) } } if (unread_count == 1) { - blogpost_render(unread_bp, 1, NULL); /// TODO other than null? + blogpost_render(unread_bp, 1, NULL);/// TODO other than null? DeleteHashPos(&it); return 0; @@ -375,13 +394,13 @@ int blogview_render(SharedMessageStatus * Stat, void **ViewSpecific, long oper) firstPOffset = count; break; } - count++; + count ++; } } - if ((num_blogposts > BL->maxp) || (firstPOffset != 0)) { + if ((num_blogposts > BL->maxp) || (firstPOffset != 0)){ PrevNext = NewStrBuf(); - if (firstPOffset > 0) { + if (firstPOffset > 0) { const char *k; long len; long posPrev = 0; @@ -416,7 +435,7 @@ int blogview_render(SharedMessageStatus * Stat, void **ViewSpecific, long oper) /* allow the user to select a starting point in the list */ if (totalCount < firstPOffset) { /* skip all till we found the first valid: */ - totalCount++; + totalCount ++; continue; } if (count >= BL->maxp) { @@ -426,19 +445,20 @@ int blogview_render(SharedMessageStatus * Stat, void **ViewSpecific, long oper) StackContext(NULL, &SubTP, thisBlogpost, CTX_BLOGPOST, 0, NULL); blogpost_render(thisBlogpost, with_comments, &SubTP); UnStackContext(&SubTP); - count++; - totalCount++; + count ++; + totalCount ++; } StrBufAppendBuf(WCC->WBuf, PrevNext, 0); FreeStrBuf(&PrevNext); DeleteHashPos(&it); - return (0); + return(0); } -int blogview_Cleanup(void **ViewSpecific) { - BLOG *BL = (BLOG *) * ViewSpecific; +int blogview_Cleanup(void **ViewSpecific) +{ + BLOG *BL = (BLOG*) *ViewSpecific; FreeStrBuf(&BL->Buf); FreeStrBuf(&BL->Charset); @@ -449,8 +469,11 @@ int blogview_Cleanup(void **ViewSpecific) { } -void InitModule_BLOGVIEWRENDERERS(void) { - const char *browseListFields[] = { +void +InitModule_BLOGVIEWRENDERERS +(void) +{ + const char* browseListFields[] = { "msgn", "nvto", "wefw", @@ -458,12 +481,17 @@ void InitModule_BLOGVIEWRENDERERS(void) { }; RegisterCTX(CTX_BLOGPOST); - RegisterReadLoopHandlerset(VIEW_BLOG, - blogview_GetParamsGetServerCall, - NULL, - NULL, - blogview_IdentifyBlogposts, - blogview_LoadMsgFromServer, blogview_render, blogview_Cleanup, browseListFields); + RegisterReadLoopHandlerset( + VIEW_BLOG, + blogview_GetParamsGetServerCall, + NULL, + NULL, + blogview_IdentifyBlogposts, + blogview_LoadMsgFromServer, + blogview_render, + blogview_Cleanup, + browseListFields + ); RegisterNamespace("BLOG:TOPLEVEL:MSGID", 0, 0, tmplput_blog_toplevel_id, NULL, CTX_BLOGPOST); RegisterNamespace("BLOG:COMMENTS:COUNT", 0, 0, tmplput_blog_comment_count, NULL, CTX_BLOGPOST);