Exemple #1
0
 public static void CorrectRange(List <Range> range, SelectFolder Folder, bool IsUid = true)
 {
     // correct *, before = int.max;
     foreach (var item in range)
     {
         if (item.UpBound == int.MaxValue)
         {
             item.UpBound = getStarNumber(Folder, IsUid);
         }
     }
 }
Exemple #2
0
 private static int getStarNumber(SelectFolder folder, bool Uid = false)
 {
     // See   RFC seq-number.
     if (Uid)
     {
         return(folder.Stat.LastestMsgId);
     }
     else
     {
         return(folder.Stat.Exists);
     }
 }
Exemple #3
0
        public static List <Commands.FetchCommand.FetchMessage> GetMessagesByUid(MailDb mailDb, SelectFolder Folder, List <Range> ranges)
        {
            CorrectRange(ranges, Folder, true);

            var messages = new List <Commands.FetchCommand.FetchMessage>();

            foreach (var item in ranges)
            {
                var messagesInRange = mailDb.Messages.ByUidRange(Folder.Folder, item.LowBound, item.UpBound);
                foreach (var message in messagesInRange)
                {
                    messages.Add(new Commands.FetchCommand.FetchMessage
                    {
                        MailDb  = mailDb,
                        Message = message,
                        SeqNo   = mailDb.Messages.GetSeqNo(Folder.Folder, Folder.Stat.LastestMsgId, Folder.Stat.Exists, message.Id)
                    });
                }
            }

            return(messages);
        }
Exemple #4
0
        public static List <Commands.FetchCommand.FetchMessage> GetMessagesBySeqNo(MailDb mailDb, SelectFolder Folder, List <Range> ranges)
        {
            CorrectRange(ranges, Folder, false);

            var messages = new List <Commands.FetchCommand.FetchMessage>();

            foreach (var item in ranges)
            {
                var dbMessages = mailDb.Messages.GetBySeqNos(Folder.Folder, Folder.Stat.LastestMsgId, Folder.Stat.Exists, item.LowBound, item.UpBound);
                var seqNo      = item.LowBound;
                messages.AddRange(dbMessages.Select(o => new Commands.FetchCommand.FetchMessage
                {
                    MailDb  = mailDb,
                    Message = o,
                    SeqNo   = seqNo++
                }));
            }

            return(messages);
        }