Beispiel #1
0
        /// <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));
        }
Beispiel #2
0
        /// <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());
 }