Skip to content

Commit

Permalink
fix(mail(web)): don't try to fetch headers if mailbox is empty
Browse files Browse the repository at this point in the history
  • Loading branch information
cgx committed Jun 4, 2021
1 parent e08be0d commit 9cf67d0
Showing 1 changed file with 94 additions and 87 deletions.
181 changes: 94 additions & 87 deletions UI/MailerUI/UIxMailListActions.m
Expand Up @@ -228,10 +228,11 @@ - (NSString *) messageSubject
if (![subject length])
subject = @"";

// NSLog(@"*** subject = |%@|", subject);
return subject;
}

- (BOOL) showToAddress
- (BOOL) showToAddress
{
SOGoMailFolder *co;

Expand Down Expand Up @@ -794,105 +795,111 @@ - (NSArray *) getHeadersForUIDs: (NSArray *) uids
NSArray *to, *from;
NSDictionary *msgs;
NSString *msgDate;

headers = [NSMutableArray arrayWithCapacity: [uids count]];
addressFormatter = [context mailEnvelopeAddressFormatter];

// Fetch headers
msgs = (NSDictionary *)[mailFolder fetchUIDs: uids
parts: [self fetchKeys]];
int count;

msgsList = [[msgs objectForKey: @"fetch"] objectEnumerator];
[self setMessage: [msgsList nextObject]];
count = [uids count];
headers = [NSMutableArray arrayWithCapacity: count];

msg = [NSMutableArray arrayWithObjects: @"To", @"hasAttachment", @"isFlagged", @"Subject", @"From", @"isRead", @"Priority", @"RelativeDate", @"Size", @"Flags", @"uid", @"isAnswered", @"isForwarded", nil];
[headers addObject: msg];
while (message)
if (count > 0)
{
// We must check for "umimportant" untagged responses.
//
// It's generally caused by IMAP server processes sending untagged IMAP responses to SOGo in differnent IMAP
// connections (SOGo might use 2-3 per user). Say you ask your messages:
//
// 127.000.000.001.40725-127.000.000.001.00143: 59 uid fetch 62 (UID FLAGS ENVELOPE RFC822.SIZE BODYSTRUCTURE BODY.PEEK[HEADER.FIELDS (X-PRIORITY)])
// 127.000.000.001.00143-127.000.000.001.40725: * 62 FETCH (UID 62 FLAGS (\Seen) RFC822.SIZE 854 ENVELOPE .... (
// * 61 FETCH (FLAGS (\Deleted \Seen))
// * 62 FETCH (FLAGS (\Deleted \Seen))
// * 63 FETCH (FLAGS (\Deleted \Seen))
// 59 OK Fetch completed.
//
// We must ignore the * 61 .. * 63 untagged responses.
//
if (![message objectForKey: @"uid"])
{
[self setMessage: [msgsList nextObject]];
continue;
}
addressFormatter = [context mailEnvelopeAddressFormatter];

msg = [NSMutableArray arrayWithCapacity: 12];
// Fetch headers
msgs = (NSDictionary *)[mailFolder fetchUIDs: uids
parts: [self fetchKeys]];

// Columns data
msgsList = [[msgs objectForKey: @"fetch"] objectEnumerator];
[self setMessage: [msgsList nextObject]];

// To
to = [[message objectForKey: @"envelope"] to];
if ([to count] > 0)
[msg addObject: [addressFormatter dictionariesForArray: to]];
else
[msg addObject: @""];
msg = [NSMutableArray arrayWithObjects: @"To", @"hasAttachment", @"isFlagged", @"Subject", @"From", @"isRead", @"Priority", @"RelativeDate", @"Size", @"Flags", @"uid", @"isAnswered", @"isForwarded", nil];
[headers addObject: msg];
while (message)
{
// We must check for "umimportant" untagged responses.
//
// It's generally caused by IMAP server processes sending untagged IMAP responses to SOGo in differnent IMAP
// connections (SOGo might use 2-3 per user). Say you ask your messages:
//
// 127.000.000.001.40725-127.000.000.001.00143: 59 uid fetch 62 (UID FLAGS ENVELOPE RFC822.SIZE BODYSTRUCTURE BODY.PEEK[HEADER.FIELDS (X-PRIORITY)])
// 127.000.000.001.00143-127.000.000.001.40725: * 62 FETCH (UID 62 FLAGS (\Seen) RFC822.SIZE 854 ENVELOPE .... (
// * 61 FETCH (FLAGS (\Deleted \Seen))
// * 62 FETCH (FLAGS (\Deleted \Seen))
// * 63 FETCH (FLAGS (\Deleted \Seen))
// 59 OK Fetch completed.
//
// We must ignore the * 61 .. * 63 untagged responses.
//
if (![message objectForKey: @"uid"])
{
[self setMessage: [msgsList nextObject]];
continue;
}

msg = [NSMutableArray arrayWithCapacity: 12];

// Columns data

// hasAttachment
[msg addObject: [NSNumber numberWithBool: [self hasMessageAttachment]]];
// To
to = [[message objectForKey: @"envelope"] to];
if ([to count] > 0)
[msg addObject: [addressFormatter dictionariesForArray: to]];
else
[msg addObject: @""];

// isFlagged
[msg addObject: [NSNumber numberWithBool: [self isMessageFlagged]]];
// hasAttachment
[msg addObject: [NSNumber numberWithBool: [self hasMessageAttachment]]];

// Subject
[msg addObject: [self messageSubject]];
// isFlagged
[msg addObject: [NSNumber numberWithBool: [self isMessageFlagged]]];

// Subject
[msg addObject: [self messageSubject]];

// From
from = [[message objectForKey: @"envelope"] from];
if ([from count] > 0)
[msg addObject: [addressFormatter dictionariesForArray: from]];
else
[msg addObject: @""];
// From
from = [[message objectForKey: @"envelope"] from];
if ([from count] > 0)
[msg addObject: [addressFormatter dictionariesForArray: from]];
else
[msg addObject: @""];

// isRead
[msg addObject: [NSNumber numberWithBool: [self isMessageRead]]];
// isRead
[msg addObject: [NSNumber numberWithBool: [self isMessageRead]]];

// Priority
[msg addObject: [self messagePriority]];

// Relative Date
msgDate = [self messageDate];
if (msgDate == nil)
msgDate = @"";
[msg addObject: msgDate];

// Size
[msg addObject: [[self sizeFormatter] stringForObjectValue: [message objectForKey: @"size"]]];

// Mail labels / tags
tags = [NSMutableArray arrayWithArray: [message objectForKey: @"flags"]];
[tags removeObject: @"answered"];
[tags removeObject: @"deleted"];
[tags removeObject: @"draft"];
[tags removeObject: @"flagged"];
[tags removeObject: @"recent"];
[tags removeObject: @"seen"];
[tags removeObject: @"$forwarded"];
[msg addObject: tags];

// UID
[msg addObject: [message objectForKey: @"uid"]];
[headers addObject: msg];

// isAnswered
[msg addObject: [NSNumber numberWithBool: [self isMessageAnswered]]];

// isForwarded
[msg addObject: [NSNumber numberWithBool: [self isMessageForwarded]]];
// Priority
[msg addObject: [self messagePriority]];

// Relative Date
msgDate = [self messageDate];
if (msgDate == nil)
msgDate = @"";
[msg addObject: msgDate];

// Size
[msg addObject: [[self sizeFormatter] stringForObjectValue: [message objectForKey: @"size"]]];

// Mail labels / tags
tags = [NSMutableArray arrayWithArray: [message objectForKey: @"flags"]];
[tags removeObject: @"answered"];
[tags removeObject: @"deleted"];
[tags removeObject: @"draft"];
[tags removeObject: @"flagged"];
[tags removeObject: @"recent"];
[tags removeObject: @"seen"];
[tags removeObject: @"$forwarded"];
[msg addObject: tags];

// UID
[msg addObject: [message objectForKey: @"uid"]];
[headers addObject: msg];

// isAnswered
[msg addObject: [NSNumber numberWithBool: [self isMessageAnswered]]];

// isForwarded
[msg addObject: [NSNumber numberWithBool: [self isMessageForwarded]]];

[self setMessage: [msgsList nextObject]];
[self setMessage: [msgsList nextObject]];
}
}

return headers;
Expand Down

0 comments on commit 9cf67d0

Please sign in to comment.