Allow pointers to be set, read, unread or at msg no

This commit is contained in:
Andrew Pamment 2018-02-03 11:44:36 +10:00
parent 027c047b42
commit 3ec7305cbe
5 changed files with 95 additions and 22 deletions

View File

@ -34,3 +34,11 @@ NEWSTRING: "\e[%d;1H\e[1;30;40m[\e[1;34;44m%4d\e[1;30;40m]\e[1;32m*\e[1;37m%s\e[
LINE 261 NEW LINE 261 NEW
OLDSTRING: (NONE) OLDSTRING: (NONE)
NEWSTRING: "\e[%d;1H\e[1;30;40m[\e[1;34m%4d\e[1;30;40m]\e[1;32m*\e[1;37m%s\e[K" NEWSTRING: "\e[%d;1H\e[1;30;40m[\e[1;34m%4d\e[1;30;40m]\e[1;32m*\e[1;37m%s\e[K"
LINE 230 MODIFIED
OLDSTRING: "\r\n\e[1;37mAre you sure you want to reset all messages in %s to unread? \e[0m"
NEWSTRING: "\r\n\r\n\e[1;37mReset pointers to All (\e[1;33mR\e[1;37m)ead, All (\e[1;33mU\e[1;37m)nread? or Msg #: "
LINE 231 MODIFIED
OLDSTRING: "\r\n\e[1;37mAre you sure you want to reset \e[1;31mall messages \e[1;37min all bases to unread? \e[0m"
NEWSTRING: "\r\n\r\n\e[1;37mReset \e[1;31mALL\e[1;37m pointers in \e[1;31mALL \e[1;37mareas to (\e[1;33mR\e[1;37m)ead, (\e[1;33mU\e[1;37m)nread? \e[0m"

View File

@ -227,8 +227,8 @@ File exists!\r\n
\e[1;30m[\e[1;37m%3d\e[1;30m] [%s\e[1;30m] \e[1;37m%s\e[0m\r\n \e[1;30m[\e[1;37m%3d\e[1;30m] [%s\e[1;30m] \e[1;37m%s\e[0m\r\n
\e[1;32mSUB\e[0m \e[1;32mSUB\e[0m
\e[1;31mUNSUB\e[0m \e[1;31mUNSUB\e[0m
\r\n\e[1;37mAre you sure you want to reset all messages in %s to unread? \e[0m \r\n\r\n\e[1;37mReset pointers to All (\e[1;33mR\e[1;37m)ead, All (\e[1;33mU\e[1;37m)nread? or Msg #:
\r\n\e[1;37mAre you sure you want to reset \e[1;31mall messages \e[1;37min all bases to unread? \e[0m \r\n\r\n\e[1;37mReset \e[1;31mALL\e[1;37m pointers in \e[1;31mALL \e[1;37mareas to (\e[1;33mR\e[1;37m)ead, (\e[1;33mU\e[1;37m)nread? \e[0m
\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\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\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[1;32mN\e[1;37m)ew Files Only: \e[0m \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[1;32mN\e[1;37m)ew Files Only: \e[0m

View File

@ -298,8 +298,8 @@ extern void next_mail_area(struct user_record *user);
extern void prev_mail_area(struct user_record *user); extern void prev_mail_area(struct user_record *user);
extern void post_message(struct user_record *user); extern void post_message(struct user_record *user);
extern void msg_conf_sub_bases(); extern void msg_conf_sub_bases();
extern void msgbase_reset_pointers(int conference, int msgarea); extern void msgbase_reset_pointers(int conference, int msgarea, int readm, int msgno);
extern void msgbase_reset_all_pointers(); extern void msgbase_reset_all_pointers(int readm);
extern void full_mail_scan(struct user_record *user); extern void full_mail_scan(struct user_record *user);
extern int 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 int new_messages(struct user_record *user, int conference, int area); extern int new_messages(struct user_record *user, int conference, int area);

View File

@ -3231,30 +3231,76 @@ void msg_conf_sub_bases() {
} while (!done); } while (!done);
} }
void msgbase_reset_pointers(int conference, int msgarea) { void msgbase_reset_pointers(int conference, int msgarea, int readm, int msgno) {
s_JamBase *jb; s_JamBase *jb;
s_JamBaseHeader jbh; s_JamBaseHeader jbh;
s_JamLastRead jlr; s_JamLastRead jlr;
s_JamMsgHeader jmh;
int max_msg;
int active_msgs;
int i, j, k;
jb = open_jam_base(conf.mail_conferences[conference]->mail_areas[msgarea]->path); jb = open_jam_base(conf.mail_conferences[conference]->mail_areas[msgarea]->path);
if (!jb) { if (!jb) {
dolog("Unable to open message base"); dolog("Unable to open message base");
return; return;
} }
if (JAM_ReadMBHeader(jb, &jbh) != 0) {
JAM_CloseMB(jb);
return;
}
j = 0;
if (msgno == -1 && readm) {
k = jbh.ActiveMsgs;
} else if (msgno == -1 && !readm) {
k = 0;
} else {
if (msgno > jbh.ActiveMsgs) {
k = jbh.ActiveMsgs;
} else {
k = msgno;
}
}
for (i=0;j<k;i++) {
memset(&jmh, 0, sizeof(s_JamMsgHeader));
if (JAM_ReadMsgHeader(jb, i, &jmh, NULL) != 0) {
dolog("Failed to read msg header: Erro %d", JAM_Errno(jb));
return;
}
if (jmh.Attribute & JAM_MSG_DELETED) {
continue;
}
j++;
}
max_msg = i;
if (JAM_ReadLastRead(jb, gUser->id, &jlr) != JAM_NO_USER) { if (JAM_ReadLastRead(jb, gUser->id, &jlr) != JAM_NO_USER) {
jlr.LastReadMsg = 0; jlr.LastReadMsg = max_msg;
jlr.HighReadMsg = 0; jlr.HighReadMsg = max_msg;
JAM_WriteLastRead(jb, gUser->id, &jlr);
} else {
jlr.LastReadMsg = max_msg;
jlr.HighReadMsg = max_msg;
jlr.UserCRC = JAM_Crc32(gUser->loginname, strlen(gUser->loginname));
jlr.UserID = gUser->id;
JAM_WriteLastRead(jb, gUser->id, &jlr); JAM_WriteLastRead(jb, gUser->id, &jlr);
} }
JAM_CloseMB(jb); JAM_CloseMB(jb);
} }
void msgbase_reset_all_pointers() { void msgbase_reset_all_pointers(int readm) {
int i, j; int i, j;
for (i=0;i<conf.mail_conference_count;i++) { for (i=0;i<conf.mail_conference_count;i++) {
for (j=0;j<conf.mail_conferences[i]->mail_area_count;j++) { for (j=0;j<conf.mail_conferences[i]->mail_area_count;j++) {
msgbase_reset_pointers(i, j); msgbase_reset_pointers(i, j, readm, -1);
} }
} }
} }

View File

@ -77,6 +77,7 @@ int menu_system(char *menufile) {
char *ansi_file; char *ansi_file;
int i; int i;
int j; int j;
int k;
struct stat s; struct stat s;
char *lRet; char *lRet;
lua_State *L; lua_State *L;
@ -500,18 +501,36 @@ int menu_system(char *menufile) {
msg_conf_sub_bases(); msg_conf_sub_bases();
break; break;
case MENU_RESETPOINTERS: case MENU_RESETPOINTERS:
s_printf(get_string(229), conf.mail_conferences[gUser->cur_mail_conf]->mail_areas[gUser->cur_mail_area]->name); s_printf(get_string(229));
confirm = s_getc(); s_readstring(buffer, 10);
if (confirm == 'y' || confirm == 'Y') { if (tolower(buffer[0]) == 'r') {
msgbase_reset_pointers(gUser->cur_mail_conf, gUser->cur_mail_area); k = -1;
j = 1;
} else if (tolower(buffer[0]) == 'u') {
k = -1;
j = 0;
} else if (buffer[0] < '0' || buffer[0] > '9') {
s_printf(get_string(39));
break;
} else {
k = atoi(buffer) - 1;
} }
msgbase_reset_pointers(gUser->cur_mail_conf, gUser->cur_mail_area, j, k);
break; break;
case MENU_RESETALLPOINTERS: case MENU_RESETALLPOINTERS:
s_printf(get_string(230)); s_printf(get_string(230));
confirm = s_getc(); confirm = s_getc();
if (confirm == 'y' || confirm == 'Y') { if (confirm == 'r' || confirm == 'R') {
msgbase_reset_all_pointers(); j = 1;
} else if (confirm == 'u' || confirm == 'U') {
j = 0;
} else {
s_printf(get_string(39));
break;
} }
msgbase_reset_all_pointers(j);
break; break;
case MENU_FILESCAN: case MENU_FILESCAN:
file_scan(); file_scan();