fix handling of 'seen' flag wrt placeholders
while we don't want to propagate seeing _from_ the placeholder, we do want to propagate it _to_ it, and consequently also un-seeing from it.
This commit is contained in:
parent
cb687f1bee
commit
882c9825cd
|
@ -1113,35 +1113,49 @@ test("noop + expunge near side", \@x01, \@X0A, \@O0A);
|
||||||
my @x20 = (
|
my @x20 = (
|
||||||
0, 0, 0,
|
0, 0, 0,
|
||||||
A, "*", "", "",
|
A, "*", "", "",
|
||||||
B, "*FP*", "", "",
|
B, "*FPS*", "", "",
|
||||||
C, "", "", "*F*",
|
C, "", "", "*FS*",
|
||||||
);
|
);
|
||||||
|
|
||||||
my @O21 = ("MaxSize 1k\n", "MaxSize 1k\n", "Expunge Near");
|
my @O21 = ("MaxSize 1k\n", "MaxSize 1k\n", "Expunge Near");
|
||||||
my @X21 = (
|
my @X21 = (
|
||||||
C, 0, B,
|
C, 0, B,
|
||||||
C, "*?", "*<", "",
|
C, "*S?", "*<S", "",
|
||||||
A, "", "*", "*",
|
A, "", "*", "*",
|
||||||
B, "", "*>P", "*P?",
|
B, "", "*>PS", "*PS?",
|
||||||
);
|
);
|
||||||
test("max size", \@x20, \@X21, \@O21);
|
test("max size", \@x20, \@X21, \@O21);
|
||||||
|
|
||||||
my @x22 = (
|
my @x22 = (
|
||||||
E, 0, V,
|
L, 0, V,
|
||||||
A, "*", "", "",
|
A, "*", "", "",
|
||||||
B, "*PR*", "", "",
|
B, "*PR*", "", "",
|
||||||
V, "*FPR*", "", "",
|
V, "*FPR*", "", "",
|
||||||
C, "*FPR?", "*<DP", "*DP*",
|
C, "*FPR?", "*<DP", "*DP*",
|
||||||
W, "*FPR?", "*<DP", "*DFP*",
|
W, "*FPR?", "*<DP", "*DFP*",
|
||||||
|
M, "*FS?", "*<", "**",
|
||||||
|
N, "*FS?", "*<S", "**",
|
||||||
|
O, "*FS?", "*<S", "*S*",
|
||||||
|
P, "*FS?", "*<", "*S*",
|
||||||
|
Q, "*F?", "*<S", "*S*",
|
||||||
|
R, "*F?", "*<", "*S*",
|
||||||
|
S, "*F?", "*<S", "**",
|
||||||
D, "*PR?", "*<DP", "*DFP*",
|
D, "*PR?", "*<DP", "*DFP*",
|
||||||
E, "*PR*", "*>DP", "*DP?",
|
E, "*PR*", "*>DP", "*DP?",
|
||||||
|
F, "*S*", "*>", "*?",
|
||||||
|
G, "*S*", "*>S", "*?",
|
||||||
|
H, "*S*", "*>S", "*S?",
|
||||||
|
I, "*S*", "*>", "*S?",
|
||||||
|
J, "**", "*>S", "*S?",
|
||||||
|
K, "**", "*>", "*S?",
|
||||||
|
L, "**", "*>S", "*?",
|
||||||
A, "", "*", "*",
|
A, "", "*", "*",
|
||||||
B, "", "*>DP", "*DFP?",
|
B, "", "*>DP", "*DFP?",
|
||||||
V, "", "*>DP", "*DFP?",
|
V, "", "*>DP", "*DFP?",
|
||||||
);
|
);
|
||||||
|
|
||||||
my @X22 = (
|
my @X22 = (
|
||||||
W, 0, V,
|
S, 0, V,
|
||||||
B, "", ">->D+R", "^PR*",
|
B, "", ">->D+R", "^PR*",
|
||||||
B, "", "", "&1/",
|
B, "", "", "&1/",
|
||||||
V, "", ">->D+FR", "^FPR*",
|
V, "", ">->D+FR", "^FPR*",
|
||||||
|
@ -1150,8 +1164,27 @@ my @X22 = (
|
||||||
C, "&1+T", "^", "&",
|
C, "&1+T", "^", "&",
|
||||||
W, "^FPR*", "<-<D+FR", "-D+R",
|
W, "^FPR*", "<-<D+FR", "-D+R",
|
||||||
W, "&1+T", "^", "&",
|
W, "&1+T", "^", "&",
|
||||||
|
M, "^*", "<-<", "",
|
||||||
|
M, "&1+T", "^", "&",
|
||||||
|
N, "^*", "<-<S", "",
|
||||||
|
N, "&1+T", "^", "&",
|
||||||
|
O, "^S*", "<-<", "",
|
||||||
|
O, "&1+T", "^", "&",
|
||||||
|
P, "^S*", "<-<+S", "",
|
||||||
|
P, "&1+T", "^", "&",
|
||||||
|
Q, "^*", "<-<S", "-S",
|
||||||
|
Q, "&1+T", "^", "&",
|
||||||
|
R, "^S*", "<-<+S", "",
|
||||||
|
R, "&1+T", "^", "&",
|
||||||
|
S, "^*", "<-<S", "",
|
||||||
|
S, "&1+T", "^", "&",
|
||||||
D, "", "-D+R", "-D+R",
|
D, "", "-D+R", "-D+R",
|
||||||
E, "", "-D+R", "-D+R",
|
E, "", "-D+R", "-D+R",
|
||||||
|
F, "", "+S", "+S",
|
||||||
|
G, "-S", "-S", "",
|
||||||
|
I, "", "+S", "",
|
||||||
|
J, "", "-S", "-S",
|
||||||
|
L, "", "-S", "",
|
||||||
);
|
);
|
||||||
test("max size + flagging", \@x22, \@X22, \@O21);
|
test("max size + flagging", \@x22, \@X22, \@O21);
|
||||||
|
|
||||||
|
@ -1308,8 +1341,8 @@ test("maxuid topping", \@x60, \@X61, \@O61);
|
||||||
|
|
||||||
my @x90 = (
|
my @x90 = (
|
||||||
C, 0, C,
|
C, 0, C,
|
||||||
A, "*DRT*", "*>D", "*DFP?",
|
A, "*DRT*", "*>DS", "*DFPS?",
|
||||||
B, "*DR*", "*>D", "*DFPT?",
|
B, "*DR*", "*>DS", "*DFPST?",
|
||||||
C, "*", "*", "*",
|
C, "*", "*", "*",
|
||||||
D, "*T", "", "",
|
D, "*T", "", "",
|
||||||
);
|
);
|
||||||
|
|
|
@ -1054,7 +1054,7 @@ box_loaded( int sts, message_t *msgs, int total_msgs, int recent_msgs, void *aux
|
||||||
if ((svars->chan->ops[t] & OP_RENEW) && (srec->status & S_DUMMY(t)) && srec->uid[t^1] && srec->msg[t]) {
|
if ((svars->chan->ops[t] & OP_RENEW) && (srec->status & S_DUMMY(t)) && srec->uid[t^1] && srec->msg[t]) {
|
||||||
sflags = srec->msg[t]->flags;
|
sflags = srec->msg[t]->flags;
|
||||||
if (sflags & F_FLAGGED) {
|
if (sflags & F_FLAGGED) {
|
||||||
sflags &= ~(F_SEEN | F_FLAGGED); // As below.
|
sflags &= ~(F_SEEN | F_FLAGGED) | (srec->flags & F_SEEN); // As below.
|
||||||
// We save away the dummy's flags, because after an
|
// We save away the dummy's flags, because after an
|
||||||
// interruption it may be already gone.
|
// interruption it may be already gone.
|
||||||
srec->pflags = sflags;
|
srec->pflags = sflags;
|
||||||
|
@ -1136,9 +1136,10 @@ box_loaded( int sts, message_t *msgs, int total_msgs, int recent_msgs, void *aux
|
||||||
}
|
}
|
||||||
if (srec->status & S_DUMMY(t^1)) {
|
if (srec->status & S_DUMMY(t^1)) {
|
||||||
// From placeholders, don't propagate:
|
// From placeholders, don't propagate:
|
||||||
// - Seen, because the real contents were obviously not seen yet
|
// - Seen, because the real contents were obviously not seen yet.
|
||||||
|
// However, we do propagate un-seeing.
|
||||||
// - Flagged, because it's just a request to upgrade
|
// - Flagged, because it's just a request to upgrade
|
||||||
sflags &= ~(F_SEEN|F_FLAGGED);
|
sflags &= ~(F_SEEN | F_FLAGGED) | (srec->flags & F_SEEN);
|
||||||
} else if (srec->status & S_DUMMY(t)) {
|
} else if (srec->status & S_DUMMY(t)) {
|
||||||
// Don't propagate Flagged to placeholders, as that would be
|
// Don't propagate Flagged to placeholders, as that would be
|
||||||
// misunderstood as a request to upgrade next time around. We
|
// misunderstood as a request to upgrade next time around. We
|
||||||
|
|
Loading…
Reference in New Issue
Block a user