]> code.citadel.org Git - citadel.git/commitdiff
* "folder list" view (not finished)
authorArt Cancro <ajc@citadel.org>
Wed, 1 May 2002 22:03:07 +0000 (22:03 +0000)
committerArt Cancro <ajc@citadel.org>
Wed, 1 May 2002 22:03:07 +0000 (22:03 +0000)
webcit/ChangeLog
webcit/mainmenu.c
webcit/messages.c
webcit/roomops.c
webcit/webcit.c
webcit/webcit.h

index 88f6548e883935e4464fdd3cf05a05ee2577efa0..31a2895c75a1d36b0b41f30cfa91af75f89ceb87 100644 (file)
@@ -1,4 +1,7 @@
 $Log$
+Revision 323.25  2002/05/01 22:03:07  ajc
+* "folder list" view (not finished)
+
 Revision 323.24  2002/05/01 03:23:31  ajc
 * Added a drop-down box to change a user's view of a room.
 
@@ -788,4 +791,3 @@ Sun Dec  6 19:50:55 EST 1998 Art Cancro <ajc@uncnsrd.mt-kisco.ny.us>
 
 1998-12-03 Nathan Bryant <bryant@cs.usm.maine.edu>
        * webserver.c: warning fix
-
index 052bd7fc44c0ba0c371975706c35a420a654bfb9..3626b569266d98678908248ec2f50b6fb884ccb0 100644 (file)
@@ -151,6 +151,9 @@ void display_main_menu(void)
        wprintf("<LI><A HREF=\"/zapped_list\">");
        wprintf("List all forgotten rooms</A>\n");
 
+       wprintf("<LI><A HREF=\"/folders\">");
+       wprintf("folders</A>\n");
+
        wprintf("</UL>\n");
 
        wprintf("</TD><TD>");
index 2b4382fe3c06a887ff25e58f17c62d3e8b5dc1b0..e33d7c6c206f3fdb79edb62fee39e0e5b391dc89 100644 (file)
@@ -421,12 +421,12 @@ void summarize_message(long msgnum) {
        memset(&summ, 0, sizeof(summ));
        strcpy(summ.subj, "(no subject)");
 
-       sprintf(buf, "MSG0 %ld", msgnum);
+       sprintf(buf, "MSG0 %ld|1", msgnum);     /* ask for headers only */
        serv_puts(buf);
        serv_gets(buf);
        if (buf[0] != '1') return;
 
-       while (serv_gets(buf), strncasecmp(buf, "text", 4)) {
+       while (serv_gets(buf), strcmp(buf, "000")) {
                if (!strncasecmp(buf, "from=", 5)) {
                        strcpy(summ.from, &buf[5]);
                }
@@ -474,8 +474,6 @@ void summarize_message(long msgnum) {
                "><FONT SIZE=-1>Del</FONT></A>"
                " </TD>\n", msgnum);
 
-       /* flush the msg */
-       while (serv_gets(buf), strcmp(buf, "000"));
        return;
 }
 
index 97e95e809be30cbc1d5db4b23456fb39ad5e671f..e08433f1b23f2b89fec7591b7c98720ea6c0a94b 100644 (file)
@@ -1606,3 +1606,81 @@ void change_view(void) {
        serv_gets(buf);
        smart_goto(WC->wc_roomname);
 }
+
+
+/*
+ * Show the room list in "folders" format
+ */
+void folders(void) {
+       char buf[SIZ];
+
+       struct folder {
+               char name[SIZ];
+               char room[SIZ];
+               int hasnewmsgs;
+               int is_mailbox;
+       };
+
+       struct folder *fold = NULL;
+       struct folder ftmp;
+       int max_folders = 0;
+       int alloc_folders = 0;
+       int i, j;
+       int p;
+       int flags;
+
+       load_floorlist();
+
+       output_headers(1);
+       wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=000077><TR><TD>");
+       wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
+       wprintf("<B>Folder list</B>\n");
+       wprintf("</TD></TR></TABLE><BR>\n");
+
+       for (p = 0; p < 2; ++p) {
+               if (p == 0) serv_puts("LKRN");
+               else if (p == 1) serv_puts("LKRO");
+               else serv_puts("NOOP");
+               serv_gets(buf);
+               if (buf[0]=='1') while(serv_gets(buf), strcmp(buf, "000")) {
+                       ++max_folders;
+                       if (max_folders > alloc_folders) {
+                               alloc_folders = max_folders + 100;
+                               fold = realloc(fold,
+                                       max_folders * sizeof(struct folder));
+                       }
+                       extract(fold[max_folders-1].name, buf, 0);
+                       extract(fold[max_folders-1].room, buf, 0);
+                       if (p == 0) fold[max_folders-1].hasnewmsgs = 1;
+                       flags = extract_int(buf, 1);
+                       if (flags & QR_MAILBOX) {
+                               fold[max_folders-1].is_mailbox = 1;
+                       }
+               }
+       }
+
+       /* Bubble-sort the folder list */
+       for (i=0; i<max_folders; ++i) {
+               for (j=0; j<max_folders-i-1; ++j) {
+                       if (strcasecmp(fold[j].name, fold[j+1].name) > 0) {
+                               memcpy(&ftmp, &fold[j], sizeof(struct folder));
+                               memcpy(&fold[j], &fold[j+1],
+                                                       sizeof(struct folder));
+                               memcpy(&fold[j+1], &ftmp,
+                                                       sizeof(struct folder));
+                       }
+               }
+       }
+
+       /* Output */
+       for (i=0; i<max_folders; ++i) {
+               if (fold[i].hasnewmsgs) wprintf("<B>");
+               escputs(fold[i].name);
+               if (fold[i].hasnewmsgs) wprintf("</B>");
+               wprintf("<BR>\n");
+       }
+
+       free(fold);
+
+       wDumpContent(1);
+}
index be758504cefa5a8ec6c543585f57d99b1feca58d..36bf6e217b0904e703f9bb3ed9a6faf23748b043 100644 (file)
@@ -1045,6 +1045,8 @@ void session_loop(struct httprequest *req)
                create_user();
        } else if (!strcasecmp(action, "changeview")) {
                change_view();
+       } else if (!strcasecmp(action, "folders")) {
+               folders();
        } else if (!strcasecmp(action, "diagnostics")) {
                output_headers(1);
 
index 37ce21b0987fa62db66b54afad81cfd96368081a..bfa74fab9004092cdf0957fba2ab4ab5594cf77e 100644 (file)
@@ -298,3 +298,4 @@ void display_edituser(char *who);
 void create_user(void);
 void edituser(void);
 void change_view(void);
+void folders(void);