📄 email_database.cxx
字号:
int add_numchr2db(Number * chr, int db_id)
{
if (db_add_record(db_id, chr, MAXCHRNUM) == 0) {
printf("add record(numchr) to database error!\n");
return -1;
}
return 0;
}
int add_oldmail2db(RCV * oldmail, int db_id)
{
if (db_add_record(db_id, oldmail, MAXRCVMAIL) == 0) {
printf("add record(oldmail) to database error!\n");
return -1;
}
return 0;
}
int add_newmail2db(NEW * newmail, int db_id)
{
if (db_add_record(db_id, newmail, MAXNEWMAIL) == 0) {
printf("add record(newmail) to database error!\n");
return -1;
}
return 0;
}
int number_manage(int number, int del, int db_id)
{
char *buf = NULL;
char temp[80];
int i, db_num, tmp, current;
if (number == -1 || del == DELRECORD) {
if (del == DELRECORD) {
if ((db_num = db_get_record_number(db_id)) == -1) {
printf("get record number error!\n");
return -1;
}
else if (db_num == 0) {
printf("there are no record!\n");
return 0;
}
buf = (char *) malloc(MAXCHRNUM);
sort_setnum_database(db_id);
for (i = 0, current = 0; i < db_num; i++) {
if ((tmp =
db_search_key(db_id, &i, buf, sizeof(int))) == 0) {
printf
("return %d, mean that can not search the record!\n",
tmp);
return -1;
}
if (!strcmp(USERNAME, ((Number *) buf)->user))
current++;
if (current == number) {
db_change_current_pos(db_id, i);
if ((tmp = db_delete_current_record(db_id)) >= 0) {
printf("tmp=%d,delete succeed!\n", tmp);
user_account--;
} else if (tmp == -1)
printf("There is no record remained.\n");
else if (tmp == -2) {
printf("Delete current record error!\n");
return -1;
}
break;
}
}
Mnb_browser->remove(number);
Mnb_browser->redraw();
if ((i + 1) != db_num) {
for (;;) {
((Number *) buf)->chr_num--;
db_modify_current(db_id, buf, MAXCHRNUM);
if (db_get_next(db_id, buf) == -1) {
printf("search db over!\n");
break;
}
}
}
free(buf);
goto doit;
}
if ((db_num = db_get_record_number(db_id)) == -1) {
printf("get record number error!\n");
return -1;
} else if (db_num == 0) {
printf("The setnum db is empty!\n");
return 0;
}
buf = (char *) malloc(MAXCHRNUM);
for (i = 0, current = 0; i < db_num; i++) {
memset(buf, '\0', MAXCHRNUM);
sort_setnum_database(db_id);
if ((tmp = db_search_key(db_id, &i, buf, sizeof(int))) == 0) {
printf
("Return %d, mean that can not search record %d!\n",
tmp, i);
return -1;
}
if (!strcmp(USERNAME, ((Number *) buf)->user)) {
current++;
sprintf(temp, "%s\t%s\t", ((Number *) buf)->user,
((Number *) buf)->maddr);
Mnb_browser->insert(current, temp);
Mnb_browser->redraw();
}
}
free(buf);
} else {
if (db_get_record_number(db_id) == 0) {
printf("db is empty!\n");
return 0;
}
buf = (char *) malloc(MAXCHRNUM);
if (sort_setnum_database(db_id) == -1) {
printf("Sort db %d error!\n", db_id);
return -1;
};
db_num = get_the_datanum(db_id);
if (db_num == 0)
return 0;
for (i = 0, current = 0; i < db_num; i++) {
tmp = db_search_key(db_id, &i, buf, sizeof(int));
if (tmp == 0) {
printf
("Return %d , mean that can not search record %d!\n",
tmp, i);
return -1;
}
if (!strcmp(USERNAME, ((Number *) buf)->user))
current++;
if (current == number) {
strcpy(numset.user, ((Number *) buf)->user);
strcpy(numset.maddr, ((Number *) buf)->maddr);
strcpy(numset.pop3, ((Number *) buf)->pop3);
strcpy(numset.smtp, ((Number *) buf)->smtp);
strcpy(numset.mnum, ((Number *) buf)->mnum);
strcpy(numset.passwd, ((Number *) buf)->passwd);
strcpy(numset.pop3port, ((Number *) buf)->pop3port);
strcpy(numset.smtpport, ((Number *) buf)->smtpport);
numset.ifrempass = ((Number *) buf)->ifrempass;
numset.ifemptyserver = ((Number *) buf)->ifemptyserver;
free(buf);
return 1;
}
}
free(buf);
}
doit:
return 0;
}
int delete_mail(int new_id, int old_id, int dbnumber, int type)
{
int i,j, tmp, db_num, logdb_num, current, flag = 0;
char *buf = NULL;
struct loginfo *logbuf = NULL;
switch (type) {
case OLD_MAIL_READ:
if ((db_num = db_get_record_number(old_id)) == -1) {
printf("get record number error!\n");
return -1;
} else if (db_num == 0) {
printf("there are no record!\n");
return 0;
}
buf = (char *) malloc(MAXRCVMAIL);
sort_oldmail_database(old_id);
printf("mail number = %d\n", db_num);
for (i = 0, current = 0; i < db_num; i++) {
if ((tmp = db_search_key(old_id, &i, buf, sizeof(int))) == 0) {
printf
("return %d, mean that can not search the record %d!\n",
tmp, i);
return -1;
}
if (!strcmp(USERNAME, ((RCV *) buf)->user))
current++;
printf("current = %d dbnumber = %d\n", current, dbnumber);
if (current == dbnumber) {
db_change_current_pos(old_id, i);
if ((tmp = db_delete_current_record(old_id)) >= 0) {
printf("tmp=%d,delete succeed!\n", tmp);
} else if (tmp == -1)
printf("There is no record remained.\n");
else if (tmp == -2) {
printf("Delete current record error!\n");
return -1;
}
user_oldmail--;
break;
}
}
Rm_browser->remove(dbnumber);
Rm_browser->redraw();
// operate on change log database
logdb_num = db_get_record_number(changelog_id);
printf("logdb number: %d\n", logdb_num);
logbuf = (struct loginfo *) malloc(MAXCHLOG);
sort_changelog_database(changelog_id);
for (j = 0; j < logdb_num; j++) {
db_change_current_pos(changelog_id, j);
db_get_current_pos(changelog_id, logbuf);
printf("buf->order: %d; buf->mailid: %d; buf->opid: %d\n",
logbuf->order, logbuf->mailid, logbuf->opid);
if (logbuf->mailid == ((RCV *) buf)->mailid) {
flag = 1;
break;
}
}
if (flag)
del_chlog(changelog_id, j);
else {
logbuf->order = logdb_num;
logbuf->mailid = ((RCV *) buf)->mailid;
logbuf->opid = 2;
strncpy(logbuf->user, USERNAME, 20);
add_changelog2db(logbuf, changelog_id);
}
printf("modify chlog_db succeed.\n");
free(logbuf);
if ((i + 1) != db_num) {
db_get_current_pos(old_id, buf);
for (;;) {
((RCV *) buf)->mail_line--;
db_modify_current(old_id, buf, MAXRCVMAIL);
if (db_get_next(old_id, buf) == -1) {
printf("search db over!\n");
break;
}
}
}
printf("delete mails successfully. \n");
break;
case NEW_MAIL_READ:
if ((db_num = db_get_record_number(new_id)) == -1) {
printf("get record number error!\n");
return -1;
}
else if (db_num == 0) {
printf("there are no record!\n");
return 0;
}
buf = (char *) malloc(MAXNEWMAIL);
sort_newmail_database(new_id);
printf("mail number = %d\n", db_num);
for (i = 0, current = 0; i < db_num; i++) {
if ((tmp = db_search_key(new_id, &i, buf, sizeof(int))) == 0) {
printf
("return %d, mean that can not search the record!\n",
tmp);
return -1;
}
if (!strcmp(USERNAME, ((NEW *) buf)->user))
current++;
printf("current = %d dbnumber = %d\n", current, dbnumber);
if (current == dbnumber) {
db_change_current_pos(new_id, i);
if ((tmp = db_delete_current_record(new_id)) >= 0) {
printf("tmp=%d,delete succeed!\n", tmp);
user_newmail--;
} else if (tmp == -1)
printf("There is no record remained.\n");
else if (tmp == -2) {
printf("Delete current record error!\n");
return -1;
}
break;
}
}
Sm_browser->remove(dbnumber);
Sm_browser->redraw();
// operate on change log database
logdb_num = db_get_record_number(changelog_id);
logbuf = (struct loginfo *) malloc(MAXCHLOG);
sort_changelog_database(changelog_id);
for (j = 0; j < logdb_num; j++) {
db_change_current_pos(changelog_id, j);
db_get_current_pos(changelog_id, logbuf);
if (logbuf->mailid == ((NEW *) buf)->mailid) {
flag = 1;
break;
}
}
if (flag)
del_chlog(changelog_id, j);
else {
logbuf->order = logdb_num;
logbuf->mailid = ((NEW *) buf)->mailid;
logbuf->opid = 2;
strncpy(logbuf->user, USERNAME, 20);
add_changelog2db(logbuf, changelog_id);
}
printf("modify chlog_db succeed.\n");
free(logbuf);
if ((i + 1) != db_num) {
db_get_current_pos(new_id, buf);
for (;;) {
((NEW *) buf)->mail_line--;
db_modify_current(new_id, buf, MAXNEWMAIL);
if (db_get_next(new_id, buf) == -1) {
printf("search db over!\n");
break;
}
}
}
printf("delete mails successfully. \n");
break;
default:
break;
}
free(buf);
return 0;
}
int ifreceive(char *messageid)
{
int i, db_num, flag;
char *buf;
db_num = user_oldmail;
buf = (char *) malloc(MAXRCVMAIL);
for (i = 1; i <= db_num; i++) {
read_fromdatabase(buf, i, RECEIVE, newmail_id, oldmail_id);
printf("old messageid %d : %s\n", i,
((struct new_rvmail *) buf)->messageid);
if (((struct new_rvmail *) buf)->messageid == NULL
|| messageid == NULL) {
free(buf);
return 0;
}
flag =
strncmp(messageid, ((struct new_rvmail *) buf)->messageid,
128);
if (!flag) {
free(buf);
return 1;
}
}
free(buf);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -