private static async Task <IEnumerable <MailMessageModel> > SyncChallengesAsync(ImapMailbox mailbox, long uid) { var criteria = string.Format("{0}:* HEADER \"{1}\" \"{2}\"", uid, ParanoiaHeaderKeys.Type, MailType.Challenge); var uids = await mailbox.SearchAsync(criteria); if (!uids.Any()) { return(new MailMessageModel[0]); } var envelopes = (await mailbox.FetchEnvelopesAsync(uids)).ToArray(); if (envelopes.Length == 0) { return(new MailMessageModel[0]); } if (envelopes.Length == 1 && envelopes.First().Uid == uid) { return(new MailMessageModel[0]); } var now = DateTime.Now; foreach (var envelope in envelopes.Where(x => x.InternalDate.HasValue && now.Subtract(x.InternalDate.Value) < TimeSpan.FromHours(1))) { try { await ProcessChallengeAsync(envelope, mailbox); } catch (Exception ex) { Logger.Error(ex); } } var messages = new List <MailMessageModel>(); foreach (var envelope in envelopes) { try { var message = envelope.ToMailMessage(MailType.Challenge); messages.Add(message); } catch (Exception ex) { Logger.Error(ex); } } return(messages); }
private async Task <IEnumerable <MailMessageModel> > SyncNonChallengesAsync(ImapMailbox mailbox, long uid) { var criteria = string.Format("{0}:* NOT HEADER \"{1}\" \"{2}\"", uid, ParanoiaHeaderKeys.Type, MailType.Challenge); var uids = await mailbox.SearchAsync(criteria); if (!uids.Any()) { return(new MailMessageModel[0]); } FetchedEnvelopeCount = 0; TotalEnvelopeCount = uids.Count; mailbox.EnvelopeFetched += OnEnvelopeFetched; var envelopes = (await mailbox.FetchEnvelopesAsync(uids)).ToArray(); if (envelopes.Length == 0) { return(new MailMessageModel[0]); } mailbox.EnvelopeFetched -= OnEnvelopeFetched; if (envelopes.Length == 1 && envelopes.First().Uid == uid) { return(new MailMessageModel[0]); } var messages = new List <MailMessageModel>(); foreach (var envelope in envelopes) { try { var message = envelope.ToMailMessage(MailType.Message); messages.Add(message); } catch (Exception ex) { Logger.Error(ex); } } return(messages); }