Skip to content
Snippets Groups Projects
Commit 1786fca2 authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Allow search by author forward/backward for netmail messages

Fixes issue #484
parent d647587c
No related branches found
No related tags found
No related merge requests found
Pipeline #8849 passed
...@@ -588,9 +588,22 @@ int sbbs_t::readmail(uint usernumber, int which, int lm_mode) ...@@ -588,9 +588,22 @@ int sbbs_t::readmail(uint usernumber, int which, int lm_mode)
break; break;
case ')': case ')':
case '}': /* Search Author forward */ case '}': /* Search Author forward */
for (u = smb.curmsg + 1; u < smb.msgs; u++) for (u = smb.curmsg + 1; u < smb.msgs; u++) {
if (msg.idx.from == 0) {
smbmsg_t piece{};
piece.idx.offset = mail[u].offset;
if (loadmsg(&piece, mail[u].number) < 0)
continue;
smb_unlockmsghdr(&smb, &piece);
bool match = stricmp(piece.from, msg.from) == 0;
smb_freemsgmem(&piece);
if (match)
break;
continue;
}
if (mail[u].from == msg.idx.from) if (mail[u].from == msg.idx.from)
break; break;
}
if (u < smb.msgs) if (u < smb.msgs)
smb.curmsg = u; smb.curmsg = u;
else { else {
...@@ -611,20 +624,32 @@ int sbbs_t::readmail(uint usernumber, int which, int lm_mode) ...@@ -611,20 +624,32 @@ int sbbs_t::readmail(uint usernumber, int which, int lm_mode)
break; break;
case '(': case '(':
case '{': /* Search Author backward */ case '{': /* Search Author backward */
{
uint n = smb.curmsg;
if (smb.curmsg > 0) { if (smb.curmsg > 0) {
for (u = smb.curmsg - 1;; u--) { for (u = smb.curmsg - 1; n == smb.curmsg && (int)u >= 0; u--) {
if (mail[u].from == msg.idx.from) { if (msg.idx.from == 0) {
smbmsg_t piece{};
piece.idx.offset = mail[u].offset;
if (loadmsg(&piece, mail[u].number) < 0)
continue;
smb_unlockmsghdr(&smb, &piece);
bool match = stricmp(piece.from, msg.from) == 0;
smb_freemsgmem(&piece);
if (match)
smb.curmsg = u; smb.curmsg = u;
break;
} }
if (u == 0) { else if (mail[u].from == msg.idx.from) {
domsg = 0; smb.curmsg = u;
bputs(text[NoMessagesFound]);
break;
} }
} }
} }
if (n == smb.curmsg) {
domsg = 0;
bputs(text[NoMessagesFound]);
}
break; break;
}
case ']': /* Search To User forward */ case ']': /* Search To User forward */
for (u = smb.curmsg + 1; u < smb.msgs; u++) for (u = smb.curmsg + 1; u < smb.msgs; u++)
if (mail[u].to == msg.idx.to) if (mail[u].to == msg.idx.to)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment