Report IMAP seen transitions during fetch
Debian Trixie package bundle / packages (push) Successful in 22m23s
Debian Trixie package bundle / packages (push) Successful in 22m23s
This commit is contained in:
+19
-19
@@ -1666,7 +1666,8 @@ FetchFlagResponderBodyHeaderFields(void *param1, void *param2, void *param3)
|
||||
return(STATUS_ABORT);
|
||||
}
|
||||
|
||||
if (ConnWrite(session->client.conn, " {0}\r\n", sizeof(" {0}\r\n") - 1) != -1) {
|
||||
if (ConnWrite(session->client.conn, " {2}\r\n\r\n",
|
||||
sizeof(" {2}\r\n\r\n") - 1) != -1) {
|
||||
MemFree(resultHeader);
|
||||
return(STATUS_CONTINUE);
|
||||
}
|
||||
@@ -3308,26 +3309,21 @@ __inline static long
|
||||
SetMessageSeenFlag(ImapSession *session, FetchStruct *FetchRequest)
|
||||
{
|
||||
long ccode;
|
||||
unsigned long oldFlags;
|
||||
unsigned long newFlags;
|
||||
char *ptr;
|
||||
|
||||
|
||||
if (NMAPSendCommandF(session->store.conn, "FLAG %" PRIx64 " +%lu\r\n", FetchRequest->message->guid, (unsigned long)STORE_MSG_FLAG_SEEN) != -1) {
|
||||
ccode = NMAPReadResponse(session->store.conn, session->store.response, sizeof(session->store.response), TRUE);
|
||||
if (ccode == 1000) {
|
||||
if (!(FetchRequest->flags & F_FLAGS)) {
|
||||
/* This fetch request does allow flags responses, but we have to wait for later to send them to the client */
|
||||
ptr = strchr(session->store.response, ' ');
|
||||
if (ptr) {
|
||||
newFlags = atol(ptr + 1);
|
||||
RememberFlags(session->folder.selected.events.flags, FetchRequest->message->guid, newFlags);
|
||||
}
|
||||
}
|
||||
return(STATUS_CONTINUE);
|
||||
}
|
||||
return(CheckForNMAPCommError(ccode));
|
||||
oldFlags = FetchRequest->message->flags;
|
||||
newFlags = oldFlags;
|
||||
ccode = StoreMessageFlag(session->store.conn,
|
||||
FetchRequest->message->guid, "+",
|
||||
STORE_MSG_FLAG_SEEN, &newFlags);
|
||||
if (ccode == STATUS_CONTINUE) {
|
||||
FetchRequest->message->flags = newFlags;
|
||||
if (!(FetchRequest->flags & F_FLAGS) && newFlags != oldFlags)
|
||||
RememberFlags(session->folder.selected.events.flags,
|
||||
FetchRequest->message->guid, newFlags);
|
||||
}
|
||||
return(STATUS_NMAP_COMM_ERROR);
|
||||
return ccode;
|
||||
}
|
||||
|
||||
__inline static long
|
||||
@@ -3490,8 +3486,12 @@ SendResponseForMessage(ImapSession *session, FetchStruct *FetchRequest)
|
||||
if (FetchRequest->flags & (F_BINARY | F_BINARY_SIZE))
|
||||
ccode = PrepareBinaryResults(session, FetchRequest);
|
||||
if (ccode == STATUS_CONTINUE &&
|
||||
(ccode = SetSeenFlag(session, FetchRequest)) == STATUS_CONTINUE)
|
||||
(ccode = SetSeenFlag(session, FetchRequest)) == STATUS_CONTINUE) {
|
||||
ccode = SendResponseForFetchFlags(session, FetchRequest);
|
||||
if (ccode == STATUS_CONTINUE &&
|
||||
!(FetchRequest->flags & F_FLAGS))
|
||||
ccode = EventsSend(session, STORE_EVENT_FLAG);
|
||||
}
|
||||
}
|
||||
BinaryResultsFree(FetchRequest);
|
||||
MessageDetailsFree(&(FetchRequest->messageDetail));
|
||||
|
||||
Reference in New Issue
Block a user