/// <summary> /// Downloads every message in every folder in the system. Used for building the local cache /// </summary> /// <param name="progCallback"></param> /// <param name="completedCallback"></param> public void DownloadEntireAccount(AccountDownloadProgressCallback progCallback, AccountDownloadCompleteCallback completedCallback) { int messagesCompleted = 0; IFolder[] folderList = GetAllFolders(); TimeSpan ts = new TimeSpan(); int totalMessages = GetMessageCount(); ManualResetEvent mre = new ManualResetEvent(false); foreach (IFolder folder in folderList) { foreach (IMessage msg in folder.Messages) { FullMessageRequest fmr = new FullMessageRequest(_client, msg); fmr.MessageComplete += delegate(IMessage m, TimeSpan totalTime) { progCallback(++messagesCompleted, totalMessages, m.Folder); StoreMessage(m); ts.Add(totalTime); if (messagesCompleted >= totalMessages) mre.Set(); }; fmr.MessageProgress += delegate(IMessage m, long receieved, long total) { Console.CursorLeft = 0; Console.Write("{0}/{1}k downloaded", receieved / 1024, total / 1024); }; fmr.MessageProgress += delegate(IMessage m, long bytesReceived, long totalBytes) { }; fmr.Start(); } } mre.WaitOne(); completedCallback(folderList.Length, messagesCompleted, ts.Ticks); }
private void messageListBox_SelectedIndexChanged(object sender, EventArgs e) { int uid = Int32.Parse(messageListBox.SelectedItem.ToString()); UpdateLabel("Getting header for message id "+uid); IMessage msg = client.MailboxManager.GetMessageByUID(uid, folder.ID); FullMessageRequest fmr = new FullMessageRequest(client, msg); fmr.MessageComplete += new FullMessageCompleteCallback(fmr_MessageComplete); fmr.MessageProgress += new FullMessageProgressCallback(fmr_MessageProgress); fmr.Start(); //IMAPRequestManager.SubmitRequest(new MessageHeaderRequest(msg, MessageHeaderComplete), false); //IMAPRequestManager.SubmitRequest(new MessageStructureRequest(msg, MessageStructureComplete), false); //client.RequestManager.SubmitBatchRequest( // new SimpleBatchRequest(new IRequest[] // { // new MessageHeaderRequest(msg, MessageHeaderComplete), // new MessageStructureRequest(msg, MessageStructureComplete) // }), false); }