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); } } }
private static int getStarNumber(SelectFolder folder, bool Uid = false) { // See RFC seq-number. if (Uid) { return(folder.Stat.LastestMsgId); } else { return(folder.Stat.Exists); } }
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); }
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); }