merge
This commit is contained in:
commit
e2ca58cb3e
5 changed files with 32 additions and 23 deletions
|
@ -375,7 +375,8 @@ static char *itab[] = {
|
||||||
"idx",
|
"idx",
|
||||||
"stale",
|
"stale",
|
||||||
"header",
|
"header",
|
||||||
"body"
|
"body",
|
||||||
|
"new",
|
||||||
};
|
};
|
||||||
|
|
||||||
char*
|
char*
|
||||||
|
|
|
@ -6,6 +6,7 @@ enum {
|
||||||
Cidxstale = 1<<1,
|
Cidxstale = 1<<1,
|
||||||
Cheader = 1<<2,
|
Cheader = 1<<2,
|
||||||
Cbody = 1<<3,
|
Cbody = 1<<3,
|
||||||
|
Cnew = 1<<4,
|
||||||
|
|
||||||
/* encodings */
|
/* encodings */
|
||||||
Enone= 0,
|
Enone= 0,
|
||||||
|
@ -65,8 +66,8 @@ struct Idx {
|
||||||
char *idxaux; /* mailbox specific */
|
char *idxaux; /* mailbox specific */
|
||||||
|
|
||||||
char *type; /* mime info */
|
char *type; /* mime info */
|
||||||
char disposition;
|
|
||||||
char *filename;
|
char *filename;
|
||||||
|
char disposition;
|
||||||
|
|
||||||
int nparts;
|
int nparts;
|
||||||
};
|
};
|
||||||
|
@ -117,9 +118,9 @@ struct Message {
|
||||||
|
|
||||||
/* mime info */
|
/* mime info */
|
||||||
char *charset;
|
char *charset;
|
||||||
char encoding;
|
|
||||||
char *boundary;
|
char *boundary;
|
||||||
char converted;
|
char converted;
|
||||||
|
char encoding;
|
||||||
char decoded;
|
char decoded;
|
||||||
char mimeflag;
|
char mimeflag;
|
||||||
|
|
||||||
|
@ -208,7 +209,7 @@ void putcache(Mailbox*, Message*); /* asymmetricial */
|
||||||
long cachefree(Mailbox*, Message*, int);
|
long cachefree(Mailbox*, Message*, int);
|
||||||
|
|
||||||
Message* gettopmsg(Mailbox*, Message*);
|
Message* gettopmsg(Mailbox*, Message*);
|
||||||
char* syncmbox(Mailbox*);
|
char* syncmbox(Mailbox*, int);
|
||||||
void* emalloc(ulong);
|
void* emalloc(ulong);
|
||||||
void* erealloc(void*, ulong);
|
void* erealloc(void*, ulong);
|
||||||
Message* newmessage(Message*);
|
Message* newmessage(Message*);
|
||||||
|
|
|
@ -1008,7 +1008,7 @@ readmboxdir(Fid *f, uchar *buf, long off, int cnt, int blen)
|
||||||
Message *msg;
|
Message *msg;
|
||||||
|
|
||||||
if(off == 0)
|
if(off == 0)
|
||||||
syncmbox(f->mb);
|
syncmbox(f->mb, 1);
|
||||||
|
|
||||||
n = 0;
|
n = 0;
|
||||||
if(f->mb->ctl){
|
if(f->mb->ctl){
|
||||||
|
@ -1343,7 +1343,7 @@ rstat(Fid *f)
|
||||||
Dir d;
|
Dir d;
|
||||||
|
|
||||||
if(FILE(f->qid.path) == Qmbox)
|
if(FILE(f->qid.path) == Qmbox)
|
||||||
syncmbox(f->mb);
|
syncmbox(f->mb, 1);
|
||||||
mkstat(&d, f->mb, f->m, FILE(f->qid.path));
|
mkstat(&d, f->mb, f->m, FILE(f->qid.path));
|
||||||
rhdr.nstat = convD2M(&d, mbuf, messagesize - IOHDRSZ);
|
rhdr.nstat = convD2M(&d, mbuf, messagesize - IOHDRSZ);
|
||||||
rhdr.stat = mbuf;
|
rhdr.stat = mbuf;
|
||||||
|
@ -1465,7 +1465,7 @@ reader(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(mb != nil) {
|
if(mb != nil) {
|
||||||
syncmbox(mb);
|
syncmbox(mb, 1);
|
||||||
qunlock(&synclock);
|
qunlock(&synclock);
|
||||||
} else {
|
} else {
|
||||||
qunlock(&synclock);
|
qunlock(&synclock);
|
||||||
|
|
|
@ -383,7 +383,6 @@ dead:
|
||||||
m->cstate |= Cidx;
|
m->cstate |= Cidx;
|
||||||
idprint("→%.2ux\n", m->cstate);
|
idprint("→%.2ux\n", m->cstate);
|
||||||
free(s);
|
free(s);
|
||||||
// s = 0;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
m = newmessage(parent);
|
m = newmessage(parent);
|
||||||
|
@ -412,7 +411,7 @@ dead:
|
||||||
m->nparts = strtoul(f[21], 0, 0);
|
m->nparts = strtoul(f[21], 0, 0);
|
||||||
|
|
||||||
m->cstate &= ~Cidxstale;
|
m->cstate &= ~Cidxstale;
|
||||||
m->cstate |= Cidx;
|
m->cstate |= Cidx|Cnew;
|
||||||
m->str = s;
|
m->str = s;
|
||||||
s = 0;
|
s = 0;
|
||||||
|
|
||||||
|
|
|
@ -62,7 +62,7 @@ static void mailplumb(Mailbox*, Message*);
|
||||||
* do we want to plumb flag changes?
|
* do we want to plumb flag changes?
|
||||||
*/
|
*/
|
||||||
char*
|
char*
|
||||||
syncmbox(Mailbox *mb)
|
syncmbox(Mailbox *mb, int doplumb)
|
||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
int n, d, y, a;
|
int n, d, y, a;
|
||||||
|
@ -83,13 +83,20 @@ syncmbox(Mailbox *mb)
|
||||||
y = 0;
|
y = 0;
|
||||||
for(m = mb->root->part; m; m = next){
|
for(m = mb->root->part; m; m = next){
|
||||||
next = m->next;
|
next = m->next;
|
||||||
if((m->cstate & Cidx) == 0 && m->deleted == 0){
|
if(m->deleted == 0){
|
||||||
cachehash(mb, m);
|
if((m->cstate & Cidx) == 0){
|
||||||
if(insurecache(mb, m) == 0){
|
cachehash(mb, m);
|
||||||
mailplumb(mb, m);
|
m->cstate |= Cnew;
|
||||||
msgdecref(mb, m);
|
n++;
|
||||||
|
} else if(!doplumb)
|
||||||
|
m->cstate &= ~Cnew;
|
||||||
|
if(m->cstate & Cnew){
|
||||||
|
if(insurecache(mb, m) == 0){
|
||||||
|
mailplumb(mb, m);
|
||||||
|
msgdecref(mb, m);
|
||||||
|
}
|
||||||
|
m->cstate &= ~Cnew;
|
||||||
}
|
}
|
||||||
n++;
|
|
||||||
}
|
}
|
||||||
if(m->cstate & Cidxstale)
|
if(m->cstate & Cidxstale)
|
||||||
y++;
|
y++;
|
||||||
|
@ -98,7 +105,8 @@ syncmbox(Mailbox *mb)
|
||||||
if(mb->delete && m->inmbox && m->deleted & Deleted)
|
if(mb->delete && m->inmbox && m->deleted & Deleted)
|
||||||
mb->delete(mb, m);
|
mb->delete(mb, m);
|
||||||
if(!m->inmbox){
|
if(!m->inmbox){
|
||||||
mailplumb(mb, m);
|
if(doplumb)
|
||||||
|
mailplumb(mb, m);
|
||||||
delmessage(mb, m);
|
delmessage(mb, m);
|
||||||
d++;
|
d++;
|
||||||
}
|
}
|
||||||
|
@ -253,7 +261,7 @@ newmbox(char *path, char *name, int flags, Mailbox **r)
|
||||||
if(r)
|
if(r)
|
||||||
*r = mb;
|
*r = mb;
|
||||||
|
|
||||||
return syncmbox(mb);
|
return syncmbox(mb, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* close the named mailbox */
|
/* close the named mailbox */
|
||||||
|
@ -279,7 +287,7 @@ syncallmboxes(void)
|
||||||
Mailbox *m;
|
Mailbox *m;
|
||||||
|
|
||||||
for(m = mbl; m != nil; m = m->next)
|
for(m = mbl; m != nil; m = m->next)
|
||||||
if(err = syncmbox(m))
|
if(err = syncmbox(m, 0))
|
||||||
eprint("syncmbox: %s\n", err);
|
eprint("syncmbox: %s\n", err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1070,7 +1078,7 @@ delmessages(int ac, char **av)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(needwrite)
|
if(needwrite)
|
||||||
syncmbox(mb);
|
syncmbox(mb, 1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1100,7 +1108,7 @@ flagmessages(int argc, char **argv)
|
||||||
needwrite = 1;
|
needwrite = 1;
|
||||||
}
|
}
|
||||||
if(needwrite)
|
if(needwrite)
|
||||||
syncmbox(mb);
|
syncmbox(mb, 1);
|
||||||
return rerr;
|
return rerr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1117,7 +1125,7 @@ msgdecref(Mailbox *mb, Message *m)
|
||||||
m->refs--;
|
m->refs--;
|
||||||
if(m->refs == 0){
|
if(m->refs == 0){
|
||||||
if(m->deleted)
|
if(m->deleted)
|
||||||
syncmbox(mb);
|
syncmbox(mb, 1);
|
||||||
else
|
else
|
||||||
putcache(mb, m);
|
putcache(mb, m);
|
||||||
}
|
}
|
||||||
|
@ -1149,7 +1157,7 @@ mboxdecref(Mailbox *mb)
|
||||||
assert(mb->refs > 0);
|
assert(mb->refs > 0);
|
||||||
mb->refs--;
|
mb->refs--;
|
||||||
if(mb->refs == 0){
|
if(mb->refs == 0){
|
||||||
syncmbox(mb);
|
syncmbox(mb, 1);
|
||||||
delmessage(mb, mb->root);
|
delmessage(mb, mb->root);
|
||||||
if(mb->ctl)
|
if(mb->ctl)
|
||||||
hfree(PATH(mb->id, Qmbox), "ctl");
|
hfree(PATH(mb->id, Qmbox), "ctl");
|
||||||
|
|
Loading…
Reference in a new issue