From 1ae8c26054e0096d1945f6846c09ab5a8c440650 Mon Sep 17 00:00:00 2001 From: Andrew Pamment Date: Fri, 13 Oct 2017 13:03:06 +1000 Subject: [PATCH] Improve new message scan --- magicka.strings | 4 ++- src/bbs.h | 2 +- src/mail_menu.c | 66 +++++++++++++++++++++++++++++++++---------------- 3 files changed, 49 insertions(+), 23 deletions(-) diff --git a/magicka.strings b/magicka.strings index c33da2d..fc6a0ff 100644 --- a/magicka.strings +++ b/magicka.strings @@ -184,7 +184,8 @@ Login Name: \r\n-------------------------------------\r\n Is this Correct? (Y/N) \e[1;37mPress any key to continue...\e[0m -\e[24;1H\e[1;32mUp / Down \e[1;37mto Scroll, \e[1;32mLeft / Right \e[1;37mChange Message, \e[1;32mR \e[1;37mreply, \e[1;32mQ \e[1;37mquit\e[K\e[0m + +\e[24;1H\e[1;32m / \e[1;37mto Scroll, \e[1;32m /  \e[1;37mChange Message, \e[1;32mR \e[1;37mReply, \e[1;32mQ \e[1;37mQuit\e[K\e[0m \e[23;1H\e[1;30m-------------------------------------------------------------------------------\e[0m\r\n \e[1;30m[\e[1;34;44m%4d\e[1;30;40m]\e[1;32m*\e[1;37m%-25.25s \e[1;32m%-15.15s \e[1;33m%-15.15s \e[1;35m%02d:%02d %02d-%02d-%02d\e[K\e[0m\r\n \e[1;30m[\e[1;34;44m%4d\e[1;30;40m] \e[1;37m%-25.25s \e[1;32m%-15.15s \e[1;33m%-15.15s \e[1;35m%02d:%02d %02d-%02d-%02d\e[K\e[0m\r\n @@ -232,3 +233,4 @@ File exists!\r\n \r\n\r\n\e[1;30m[\e[1;34m%3d\e[1;30m] \e[1;33m%3ddloads \e[1;36m%4d%c \e[1;37m%-56s\r\n \e[1;31mNEW \e[0;32m \r\nScan for new files? (Y/N) : \r\n\e[1;37mOrder by (\e[1;32mF\e[1;37m)ilename, (\e[1;32mU\e[1;37m)pload Date, (\e[1;32mP\e[1;37m)opularity : \e[0m +\e[24;1H\e[1;32m / \e[1;37mto Scroll, \e[1;32m /  \e[1;37mChange Message, \e[1;32mR \e[1;37mReply, \e[1;32mJ \e[1;37m Next Area \e[1;32mQ \e[1;37mQuit\e[K\e[0m diff --git a/src/bbs.h b/src/bbs.h index b652540..8db87e0 100644 --- a/src/bbs.h +++ b/src/bbs.h @@ -284,7 +284,7 @@ extern void msg_conf_sub_bases(); extern void msgbase_reset_pointers(int conference, int msgarea); extern void msgbase_reset_all_pointers(); extern void full_mail_scan(struct user_record *user); -extern void read_new_msgs(struct user_record *user, struct msg_headers *msghs); +extern int read_new_msgs(struct user_record *user, struct msg_headers *msghs); extern void rundoor(struct user_record *user, char *cmd, int stdio, char *codepage); extern void runexternal(struct user_record *user, char *cmd, int stdio, char **argv, char *cwd, int raw, char *codepage); diff --git a/src/mail_menu.c b/src/mail_menu.c index 79a516a..3c220d0 100644 --- a/src/mail_menu.c +++ b/src/mail_menu.c @@ -1417,7 +1417,7 @@ void unmangle_ansi(char *body, int len, char **body_out, int *body_len) { -void read_message(struct user_record *user, struct msg_headers *msghs, int mailno) { +int read_message(struct user_record *user, struct msg_headers *msghs, int mailno, int newscan) { s_JamBase *jb; s_JamMsgHeader jmh; s_JamSubPacket* jsp; @@ -1454,10 +1454,10 @@ void read_message(struct user_record *user, struct msg_headers *msghs, int mailn jb = open_jam_base(conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->path); if (!jb) { dolog("Error opening JAM base.. %s", conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->path); - return; + return 0; } - while (!doquit) { + while (doquit == 0) { if (JAM_ReadLastRead(jb, user->id, &jlr) == JAM_NO_USER) { jlr.UserCRC = JAM_Crc32(user->loginname, strlen(user->loginname)); @@ -1489,7 +1489,9 @@ void read_message(struct user_record *user, struct msg_headers *msghs, int mailn body = (char *)malloc(msghs->msgs[mailno]->msg_h->TxtLen); JAM_ReadMsgText(jb, msghs->msgs[mailno]->msg_h->TxtOffset, msghs->msgs[mailno]->msg_h->TxtLen, (char *)body); - JAM_WriteLastRead(jb, user->id, &jlr); + if (!newscan) { + JAM_WriteLastRead(jb, user->id, &jlr); + } z2 = msghs->msgs[mailno]->msg_h->TxtLen; @@ -1565,8 +1567,11 @@ void read_message(struct user_record *user, struct msg_headers *msghs, int mailn break; } } - - s_printf(get_string(187)); + if (newscan) { + s_printf(get_string(235)); + } else { + s_printf(get_string(187)); + } s_printf(get_string(186)); c = s_getc(); @@ -1574,6 +1579,8 @@ void read_message(struct user_record *user, struct msg_headers *msghs, int mailn should_break = 1; } else if (tolower(c) == 'q') { should_break = 1; + } else if (tolower(c) == 'j' && newscan == 1) { + should_break = 1; } else if (c == '\e') { c = s_getc(); if (c == 91) { @@ -1666,7 +1673,7 @@ void read_message(struct user_record *user, struct msg_headers *msghs, int mailn free(msg_lines[i]); } free(msg_lines); - return; + return 0; } JAM_ClearMsgHeader( &jmh ); @@ -1830,7 +1837,7 @@ void read_message(struct user_record *user, struct msg_headers *msghs, int mailn free(msg_lines[i]); } free(msg_lines); - return; + return 0; } } if (JAM_AddMessage(jb, &jmh, jsp, (char *)replybody, strlen(replybody))) { @@ -1872,7 +1879,9 @@ void read_message(struct user_record *user, struct msg_headers *msghs, int mailn if (subject != NULL) { free(subject); } - + } else if (tolower(c) == 'j' && newscan == 1) { + free(body); + doquit = 2; } else if (tolower(c) == 'q') { free(body); doquit = 1; @@ -1897,22 +1906,29 @@ void read_message(struct user_record *user, struct msg_headers *msghs, int mailn free(msg_lines); msg_line_count = 0; } + + if (doquit == 2) { + return 1; + } + + return 0; } -void read_new_msgs(struct user_record *user, struct msg_headers *msghs) { +int read_new_msgs(struct user_record *user, struct msg_headers *msghs) { s_JamBase *jb; s_JamLastRead jlr; int all_unread; int i; int k; char buffer[7]; - + int res; + // list mail in message base if (msghs != NULL && msghs->msg_count > 0) { jb = open_jam_base(conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->path); if (!jb) { dolog("Error opening JAM base.. %s", conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->path); - return; + return 0; } else { all_unread = 0; if (JAM_ReadLastRead(jb, user->id, &jlr) == JAM_NO_USER) { @@ -1936,10 +1952,11 @@ void read_new_msgs(struct user_record *user, struct msg_headers *msghs) { } if (i > 0 && i <= msghs->msg_count) { - read_message(user, msghs, i - 1); + return read_message(user, msghs, i - 1, 1); } } - } + } + return 0; } void read_mail(struct user_record *user) { @@ -1990,7 +2007,7 @@ void read_mail(struct user_record *user) { } if (i > 0 && i <= msghs->msg_count) { - read_message(user, msghs, i - 1); + read_message(user, msghs, i - 1, 0); } } } @@ -2474,7 +2491,7 @@ void list_messages(struct user_record *user) { } } else if (c == 13) { redraw = 1; - read_message(user, msghs, i - 1); + read_message(user, msghs, i - 1, 0); free_message_headers(msghs); msghs = read_message_headers(user->cur_mail_conf, user->cur_mail_area, user); jb = open_jam_base(conf.mail_conferences[user->cur_mail_conf]->mail_areas[user->cur_mail_area]->path); @@ -2633,7 +2650,7 @@ void do_mail_scan(struct user_record *user, int oldscan) { int lines = 0; int orig_conf; int orig_area; - + int res = 0; s_printf(get_string(139)); c = s_getc(); @@ -2693,7 +2710,7 @@ void do_mail_scan(struct user_record *user, int oldscan) { user->cur_mail_conf = i; user->cur_mail_area = j; - read_new_msgs(user, msghs); + res = read_new_msgs(user, msghs); user->cur_mail_conf = orig_conf; user->cur_mail_area = orig_area; @@ -2720,7 +2737,7 @@ void do_mail_scan(struct user_record *user, int oldscan) { user->cur_mail_conf = i; user->cur_mail_area = j; - read_new_msgs(user, msghs); + res = read_new_msgs(user, msghs); user->cur_mail_conf = orig_conf; user->cur_mail_area = orig_area; @@ -2751,7 +2768,7 @@ void do_mail_scan(struct user_record *user, int oldscan) { user->cur_mail_conf = i; user->cur_mail_area = j; - read_new_msgs(user, msghs); + res = read_new_msgs(user, msghs); user->cur_mail_conf = orig_conf; user->cur_mail_area = orig_area; @@ -2779,7 +2796,7 @@ void do_mail_scan(struct user_record *user, int oldscan) { user->cur_mail_conf = i; user->cur_mail_area = j; - read_new_msgs(user, msghs); + res = read_new_msgs(user, msghs); user->cur_mail_conf = orig_conf; user->cur_mail_area = orig_area; @@ -2794,8 +2811,15 @@ void do_mail_scan(struct user_record *user, int oldscan) { } } JAM_CloseMB(jb); + if (res) { + break; + } } + if (res) { + break; + } } + s_printf(get_string(6)); s_getc(); }