diff options
Diffstat (limited to 'mbbsd')
-rw-r--r-- | mbbsd/mail.c | 3 | ||||
-rw-r--r-- | mbbsd/read.c | 37 |
2 files changed, 28 insertions, 12 deletions
diff --git a/mbbsd/mail.c b/mbbsd/mail.c index 5e9be2fe..e0195689 100644 --- a/mbbsd/mail.c +++ b/mbbsd/mail.c @@ -316,12 +316,13 @@ do_send(const char *userid, const char *title) sethomepath(genbuf, userid); stampfile(genbuf, &mhdr); strlcpy(mhdr.owner, cuser.userid, sizeof(mhdr.owner)); - strncpy(mhdr.title, save_title, TTLEN); if (vedit(genbuf, YEA, NULL) == -1) { unlink(genbuf); clear(); return -2; } + /* why not make title here? */ + strncpy(mhdr.title, save_title, TTLEN); clear(); sethomefile(fpath, userid, FN_OVERRIDES); i = belong(fpath, cuser.userid); diff --git a/mbbsd/read.c b/mbbsd/read.c index 6f10aa25..ca62d426 100644 --- a/mbbsd/read.c +++ b/mbbsd/read.c @@ -394,7 +394,7 @@ select_read(const keeploc_t * locmem, int sr_mode) char keyword[TTLEN + 1] = ""; char genbuf[MAXPATHLEN], *p = strstr(currdirect, "SR."); static int _mode = 0; - int len, fd, fr, i, count=0, reference = 0; + int len, fd, fr, i, count=0, reference = 0, n_recommend = 0; fileheader_t *fh = &headers[locmem->crs_ln - locmem->top_ln]; STATINC(STAT_SELECTREAD); @@ -416,14 +416,22 @@ select_read(const keeploc_t * locmem, int sr_mode) "%s:%s\n", currboard, keyword); #endif } - else if(sr_mode & RS_NOKEYWORD) + else if(sr_mode & RS_KEYWORD_EXCLUDE) { if(!(currmode & MODE_SELECT) || !getdata(b_lines, 0, "增加條件 排除標題:", keyword, TTLEN, DOECHO)) return READ_REDRAW; } - else + else if (sr_mode & RS_RECOMMEND) + { + if(currstat != RMAIL && ( + !getdata(b_lines, 0, + (currmode & MODE_SELECT) ? "增加條件 推文數:":"最低推數:", + keyword, 7, LCECHO) || (n_recommend = atoi(keyword)) <= 0 )) + return READ_REDRAW; + } + else { if(p && _mode & sr_mode & (RS_TITLE | RS_NEWPOST | RS_MARK)) return DONOTHING; @@ -458,24 +466,27 @@ select_read(const keeploc_t * locmem, int sr_mode) len /= sizeof(fileheader_t); for( i = 0 ; i < len ; ++i ){ reference++; - if( sr_mode & RS_MARK && + if( (sr_mode & RS_MARK) && !(fhs[i].filemode & FILE_MARKED) ) continue; - else if(sr_mode & RS_NEWPOST && + else if((sr_mode & RS_NEWPOST) && !strncmp(fhs[i].title, "Re:", 3)) continue; - else if(sr_mode & RS_AUTHOR && + else if((sr_mode & RS_AUTHOR) && !strcasestr(fhs[i].owner, keyword)) continue; - else if(sr_mode & RS_KEYWORD && + else if((sr_mode & RS_KEYWORD) && !strcasestr(fhs[i].title, keyword)) continue; - else if(sr_mode & RS_NOKEYWORD && + else if(sr_mode & RS_KEYWORD_EXCLUDE && strcasestr(fhs[i].title, keyword)) continue; - else if(sr_mode & RS_TITLE && + else if((sr_mode & RS_TITLE) && strcmp(subject(fhs[i].title), keyword)) continue; + else if ((sr_mode & RS_RECOMMEND) && + fhs[i].recommend < n_recommend ) + continue; ++count; if(p == NULL) { @@ -555,7 +566,11 @@ i_read_key(const onekey_t * rcmdlist, keeploc_t * locmem, case Ctrl('H'): mode = select_read(locmem, RS_NEWPOST); break; - + + case 'Z': + mode = select_read(locmem, RS_RECOMMEND); + break; + case 'a': case 'A': mode = select_read(locmem, RS_AUTHOR); @@ -575,7 +590,7 @@ i_read_key(const onekey_t * rcmdlist, keeploc_t * locmem, break; case '!': - mode = select_read(locmem, RS_NOKEYWORD); + mode = select_read(locmem, RS_KEYWORD_EXCLUDE); break; case '=': |