예제 #1
0
        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);
        }
예제 #2
0
        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);
        }