/// <summary> /// When folder removed and created again, its messages UIs counter clears, and starts from 0. /// Due to imap protocol realization, search method with "UId N:*" query allways returns last message index in folder. /// Theafore, when last message index UId is less then <see cref="CurrentMessageUidInFolder"/> value, /// we assume that folder was recreated. /// </summary> /// <param name="messageIndexCollection"><see cref="MessageIndexCollection"/> instance.</param> /// <returns><c>True</c> if folder was recreated in mailbox, <c>false</c> otherwise.</returns> private bool IsFolderWasRecreated(MessageIndexCollection messageIndexCollection) { List <long> messageIndexList = messageIndexCollection.Cast <long>().ToList(); messageIndexList.Sort(); return(messageIndexList.Count > 0 && messageIndexList.First() < long.Parse(CurrentMessageUidInFolder)); }
/// <summary> /// Loads not synchronized messages indexes form selected folder. /// Selected folder must be specified in <paramref name="client"/>, using <see cref="ImapClient.SelectFolderForSyncronization"/> method. /// Due to imap protocol realization, search method with "UId N:*" query allways returns last message index in folder. /// Message index with <see cref="CurrentMessageUidInFolder"/> UId will be skipped. /// If current folder was removed and created again in mailbox, synchronization strategy will use new folder query string. /// </summary> /// <param name="client"><see cref="Imap"/> instance.</param> /// <returns><see cref="MessageIndexCollection"/> instance.</returns> private MessageIndexCollection GetNotSyncedMessageIndexes(Imap client) { MessageIndexCollection messageIndexCollection = GetUnsyncMsgIndexCollection(client); if (IsFolderWasRecreated(messageIndexCollection)) { CurrentMessageUidInFolder = "0"; messageIndexCollection = GetUnsyncMsgIndexCollection(client); } List <long> messageIndexList = messageIndexCollection.Cast <long>().ToList(); messageIndexList.Sort(); if (messageIndexList.Count > 0 && messageIndexList.First().ToString() == CurrentMessageUidInFolder) { messageIndexCollection.RemoveAt(0); } return(messageIndexCollection); }
/// <summary> /// Gets list mailbox indexes from <paramref name="msgIndexes"/>. /// </summary> /// <param name="msgIndexes"><see cref="MessageIndexCollection"/> instance.</param> /// <returns>List mailbox indexes.</returns> protected virtual List <long> GetMsgIndexesList(MessageIndexCollection msgIndexes) { return(msgIndexes.Cast <long>().ToList()); }