+
/*
* Blog view renderer module for WebCit
*
int num_msgs; /* Number of msgnums stored in 'msgs' */
int alloc_msgs; /* Currently allocated size of array */
int unread_oments;
-}blogpost;
+} blogpost;
/*
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; i < num_msgs; ++i) {
Msg = GetMessagePtrAt(i, WCC->summ);
if (Msg != NULL) {
ReadOneMessageSummary(Msg, FoundCharset, Buf);
* (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);
/*
* 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 */
/* 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; i < bp->num_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);
/*
* Destructor for "blogpost"
*/
-void blogpost_destroy(blogpost *bp) {
+void blogpost_destroy(blogpost * bp) {
if (bp->alloc_msgs > 0) {
free(bp->msgs);
}
/*
* 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");
}
-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.
/*
* 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
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) {
* 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);
}
* 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;
/* 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 */
}
}
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;
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;
/* 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) {
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);
}
-void
-InitModule_BLOGVIEWRENDERERS
-(void)
-{
- const char* browseListFields[] = {
+void InitModule_BLOGVIEWRENDERERS(void) {
+ const char *browseListFields[] = {
"msgn",
"nvto",
"wefw",
};
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);