+/* Spit out the new summary view. This is basically a static page, so clients can cache the layout, all the dirty work is javascript :) */
+void new_summary_view(void) {
+ begin_burst();
+ DoTemplate(HKEY("msg_listview"),NULL,&NoCtx);
+ DoTemplate(HKEY("trailing"),NULL,&NoCtx);
+ end_burst();
+}
+
+
+int mailview_GetParamsGetServerCall(SharedMessageStatus *Stat,
+ void **ViewSpecific,
+ long oper,
+ char *cmd,
+ long len)
+{
+ if (!WC->is_ajax) {
+ new_summary_view();
+ return 200;
+ } else {
+ Stat->defaultsortorder = 2;
+ Stat->sortit = 1;
+ Stat->load_seen = 1;
+ /* Generally using maxmsgs|startmsg is not required
+ in mailbox view, but we have a 'safemode' for clients
+ (*cough* Exploder) that simply can't handle too many */
+ if (havebstr("maxmsgs")) Stat->maxmsgs = ibstr("maxmsgs");
+ else Stat->maxmsgs = 9999999;
+ if (havebstr("startmsg")) Stat->startmsg = lbstr("startmsg");
+ snprintf(cmd, len, "MSGS %s|%s||1",
+ (oper == do_search) ? "SEARCH" : "ALL",
+ (oper == do_search) ? bstr("query") : ""
+ );
+ }
+ return 200;
+}
+
+int mailview_RenderView_or_Tail(SharedMessageStatus *Stat,
+ void **ViewSpecific,
+ long oper)
+{
+ WCTemplputParams SubTP;
+
+ DoTemplate(HKEY("mailsummary_json"),NULL, &SubTP);
+ return 0;
+}
+
+int mailview_Cleanup(void **ViewSpecific)
+{
+ /* Note: wDumpContent() will output one additional </div> tag. */
+ /* We ought to move this out into template */
+ if (WC->is_ajax)
+ end_burst();
+ else
+ wDumpContent(1);
+ return 0;
+}
+
+
+
+typedef struct _bbsview_stuct {
+ StrBuf *BBViewToolBar;
+ StrBuf *MessageDropdown;
+ long *displayed_msgs;
+ int a;
+}bbsview_struct;
+
+int bbsview_GetParamsGetServerCall(SharedMessageStatus *Stat,
+ void **ViewSpecific,
+ long oper,
+ char *cmd,
+ long len)
+{
+ bbsview_struct *VS;
+
+ VS = (bbsview_struct*) malloc(sizeof(bbsview_struct));
+ memset(VS, 0, sizeof(bbsview_struct));
+ *ViewSpecific = (void*)VS;
+ Stat->defaultsortorder = 1;
+ Stat->startmsg = -1;
+ Stat->sortit = 1;
+
+ rlid[oper].cmd(cmd, len);
+
+ if (havebstr("maxmsgs"))
+ Stat->maxmsgs = ibstr("maxmsgs");
+ if (Stat->maxmsgs == 0) Stat->maxmsgs = DEFAULT_MAXMSGS;
+
+ if (havebstr("startmsg")) {
+ Stat->startmsg = lbstr("startmsg");
+ }
+ if (lbstr("SortOrder") == 2) {
+ Stat->reverse = 1;
+ Stat->num_displayed = -DEFAULT_MAXMSGS;
+ }
+ else {
+ Stat->reverse = 0;
+ Stat->num_displayed = DEFAULT_MAXMSGS;
+ }
+
+ return 200;
+}
+
+int bbsview_PrintViewHeader(SharedMessageStatus *Stat, void **ViewSpecific)
+{
+ bbsview_struct *VS;
+ WCTemplputParams SubTP;
+
+ VS = (bbsview_struct*)*ViewSpecific;
+
+ VS->BBViewToolBar = NewStrBufPlain(NULL, SIZ);
+ VS->MessageDropdown = NewStrBufPlain(NULL, SIZ);
+
+ /*** startmsg->maxmsgs = **/DrawMessageDropdown(VS->MessageDropdown,
+ Stat->maxmsgs,
+ Stat->startmsg,
+ Stat->num_displayed,
+ Stat->lowest_found-1);
+ if (Stat->num_displayed < 0) {
+ Stat->startmsg += Stat->maxmsgs;
+ if (Stat->num_displayed != Stat->maxmsgs)
+ Stat->maxmsgs = abs(Stat->maxmsgs) + 1;
+ else
+ Stat->maxmsgs = abs(Stat->maxmsgs);
+
+ }
+ memset(&SubTP, 0, sizeof(WCTemplputParams));
+ SubTP.Filter.ContextType = CTX_STRBUF;
+ SubTP.Context = VS->MessageDropdown;
+ DoTemplate(HKEY("msg_listselector_top"), VS->BBViewToolBar, &SubTP);
+ StrBufAppendBuf(WC->WBuf, VS->BBViewToolBar, 0);
+ FlushStrBuf(VS->BBViewToolBar);
+ return 200;
+}
+
+int bbsview_LoadMsgFromServer(SharedMessageStatus *Stat,
+ void **ViewSpecific,
+ message_summary* Msg,
+ int is_new,
+ int i)
+{
+ bbsview_struct *VS;
+
+ VS = (bbsview_struct*)*ViewSpecific;
+ if (VS->displayed_msgs == NULL) {
+ VS->displayed_msgs = malloc(sizeof(long) *
+ ((Stat->maxmsgs < Stat->nummsgs) ?
+ Stat->maxmsgs + 1 :
+ Stat->nummsgs + 1));
+ }
+ if ((i >= Stat->startmsg) && (i < Stat->startmsg + Stat->maxmsgs)) {
+ VS->displayed_msgs[Stat->num_displayed] = Msg->msgnum;
+ Stat->num_displayed++;
+ }
+ return 200;
+}