-
/*
* 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);