public static async Task<(UniqueId, IMailFolder?)> FindIdByMessageIdHeader(this IMailFolder folder, string? messageIdHeaderValue, bool recursive, bool skipParent, bool onlyImmediateChildren = false)
        {
            if (messageIdHeaderValue == null)
            {
                return (UniqueId.Invalid, null);
            }

            await folder.OpenAsync(FolderAccess.ReadOnly);
            if (!skipParent)
            {
                var hit = (await folder.SearchAsync(SearchQuery.HeaderContains("Message-ID", messageIdHeaderValue))).FirstOrDefault(); // sometimes there are more than one if the companion got terminated; ignore this, think later about handling this
                if (hit.IsValid)
                    return (hit, folder);
            }

            var subfolders = await folder.GetSubfoldersAsync(false);
            foreach (var subFolder in subfolders)
            {
                var hit2 = await subFolder.FindIdByMessageIdHeader(messageIdHeaderValue, recursive && onlyImmediateChildren, false, onlyImmediateChildren);
                if (hit2.Item1.IsValid)
                {
                    return hit2;
                }
            }

            return (UniqueId.Invalid, null);
        }
Exemplo n.º 2
0
        async void LoadChildFolders(IMailFolder folder, ImapClient pClient)
        {
            Client = pClient;
            var children = await folder.GetSubfoldersAsync();

            LoadChildFolders(folder, children, Client);
        }
Exemplo n.º 3
0
 public async Task <IEnumerable <IMailFolder> > GetSubFolders(IMailFolder parentFolder)
 {
     return(await PolicyWrapper.WrapRetryOnNotConnected(async() =>
     {
         return await parentFolder.GetSubfoldersAsync().ConfigureAwait(false);
     },
                                                        EnsureConnected).ConfigureAwait(false));
 }
Exemplo n.º 4
0
        async Task LoadSubfoldersAsync(IMailFolder folder)
        {
            var subfolders = await folder.GetSubfoldersAsync();

            var sorted = new List <IMailFolder> (subfolders);

            sorted.Sort(new FolderComparer());

            await LoadSubfoldersAsync(folder, sorted);
        }
        // Recursive function to load all folders and their subfolders
        async Task LoadChildFolders (Section foldersSection, IMailFolder folder)
        {
            if (!folder.IsNamespace) {    
                foldersSection.Add (new StyledStringElement (folder.FullName, () =>
                    OpenFolder (folder)));
            }

            var subfolders = await folder.GetSubfoldersAsync ();

            foreach (var sf in subfolders)
                await LoadChildFolders (foldersSection, sf);
        }
Exemplo n.º 6
0
        // Recursive function to load all folders and their subfolders
        async Task LoadChildFolders(List <IMailFolder> folders, IMailFolder imapFolder)
        {
            if (!string.IsNullOrWhiteSpace(imapFolder.FullName))
            {
                folders.Add(imapFolder);
            }

            var subfolders = await imapFolder.GetSubfoldersAsync();

            foreach (var sf in subfolders)
            {
                await LoadChildFolders(folders, sf);
            }
        }
Exemplo n.º 7
0
        // Recursive function to load all folders and their subfolders
        async Task LoadChildFolders(List <IMailFolder> folders, IMailFolder folder)
        {
            if (!folder.IsNamespace)
            {
                folders.Add(folder);
            }

            var subfolders = await folder.GetSubfoldersAsync();

            foreach (var sf in subfolders)
            {
                await LoadChildFolders(folders, sf);
            }
        }
Exemplo n.º 8
0
        // Recursive function to load all folders and their subfolders
        async Task LoadChildFolders (Section foldersSection, IMailFolder folder)
        {
            if (!folder.IsNamespace) {    
                foldersSection.Add (new StyledStringElement (folder.FullName, () =>
                    OpenFolder (folder)));
            }

			if (folder.Attributes.HasFlag (FolderAttributes.HasNoChildren))
				return;

            var subfolders = await folder.GetSubfoldersAsync ();

            foreach (var sf in subfolders)
                await LoadChildFolders (foldersSection, sf);
        }
Exemplo n.º 9
0
        protected virtual async IAsyncEnumerable <IMailFolder> GetFolderRecursivelyAsync(IMailFolder mailFolder)
        {
            foreach (var subFolder in await mailFolder.GetSubfoldersAsync(false, CancellationToken.None))
            {
                if ((await subFolder.GetSubfoldersAsync(false, CancellationToken.None)).Any())
                {
                    await foreach (var folder in GetFolderRecursivelyAsync(subFolder))
                    {
                        yield return(folder);
                    }
                }

                yield return(subFolder);
            }
        }
Exemplo n.º 10
0
        // Recursive function to load all folders and their subfolders
        async Task LoadChildFolders(Section foldersSection, IMailFolder folder)
        {
            if (!folder.IsNamespace)
            {
                foldersSection.Add(new StyledStringElement(folder.FullName, () =>
                                                           OpenFolder(folder)));
            }

            var subfolders = await folder.GetSubfoldersAsync();

            foreach (var sf in subfolders)
            {
                await LoadChildFolders(foldersSection, sf);
            }
        }
Exemplo n.º 11
0
        // Recursive function to load all folders and their subfolders
        async Task LoadChildFolders(Section foldersSection, IMailFolder imapFolder)
        {
            if (!string.IsNullOrWhiteSpace(imapFolder.FullName))
            {
                foldersSection.Add(new StyledStringElement(imapFolder.FullName, () =>
                                                           OpenFolder(imapFolder)));
            }

            var subfolders = await imapFolder.GetSubfoldersAsync();

            foreach (var sf in subfolders)
            {
                await LoadChildFolders(foldersSection, sf);
            }
        }
Exemplo n.º 12
0
        // Recursive function to load all folders and their subfolders
        async Task LoadChildFolders(List <IMailFolder> folders, IMailFolder folder)
        {
            if (!folder.IsNamespace)
            {
                folders.Add(folder);
            }

            if (folder.Attributes.HasFlag(FolderAttributes.HasNoChildren))
            {
                return;
            }

            var subfolders = await folder.GetSubfoldersAsync();

            foreach (var sf in subfolders)
            {
                await LoadChildFolders(folders, sf);
            }
        }
Exemplo n.º 13
0
        private async Task LoadFromFolderAsync(IMailBox mailBox, IMailFolder parentFolder)
        {
            var folders = await parentFolder.GetSubfoldersAsync();

            using (var folderEnumerator = folders.GetEnumerator())
            {
                while (folderEnumerator.MoveNext())
                {
                    if (MustBeOpen(folderEnumerator.Current))
                    {
                        var folder = folderEnumerator.Current;
                        await folder.OpenAsync(FolderAccess.ReadOnly);

                        if (folder.Count > 0)
                        {
                            for (var i = folder.Count - 1; i > 0; i--)
                            {
                                var message = await folder.GetMessageAsync(i);

                                // только такая проверка т.к. в POP3 без вариантов
                                if (await MustBeSavedAsync(mailBox, message))
                                {
                                    await SaveMessageAsync(mailBox, message);

                                    continue;
                                }
                                //если письмо сохранять не нужно то сразу выходим
                                break;
                            }
                        }
                        if ((folderEnumerator.Current.Attributes & FolderAttributes.HasChildren) != 0)
                        {
                            await LoadFromFolderAsync(mailBox, folderEnumerator.Current);
                        }
                    }
                }
            }
        }
Exemplo n.º 14
0
        public async Task <long> ReadSubFolders()
        {
            Stopwatch stopWhatch = new Stopwatch();

            stopWhatch.Start();

            var serverFolders = await serverFolder.GetSubfoldersAsync();

            foreach (var folder in serverFolders)
            {
                if (Nodes.Count(x => x.Name == folder.Name) == 0)
                {
                    var newFolder = new MailFolder(folder);
                    Nodes.Add(newFolder);

                    await newFolder.ReadFolder();

                    await newFolder.ReadSubFolders();
                }
            }

            stopWhatch.Stop();
            return(stopWhatch.ElapsedMilliseconds);
        }
Exemplo n.º 15
0
        private Task <List <string> > GetFolderNamesAsync(ImapClient client, IMailFolder folder, IProgress <string> progress)
        {
            return(Task.Run(async() =>
            {
                progress.Report($"Getting folder names.");

                List <string> folderNames = new List <string>();
                folderNames.Add(folder.FullName);

                var subfolders = await folder.GetSubfoldersAsync(StatusItems.None);
                foreach (var subfolder in subfolders)
                {
                    //progress.Report($"Folder name: {subfolder.FullName}");
                    if (!folderNames.Contains(subfolder.FullName))
                    {
                        folderNames.Add(subfolder.FullName);
                    }
                }

                progress.Report($"Finished getting folder names.");

                return folderNames;
            }));
        }
Exemplo n.º 16
0
        async void LoadChildFolders(IMailFolder folder)
        {
            var children = await folder.GetSubfoldersAsync();

            LoadChildFolders(folder, children);
        }
Exemplo n.º 17
0
        async Task LoadChildFoldersAsync(IMailFolder folder)
        {
            var children = await folder.GetSubfoldersAsync();

            await LoadChildFoldersAsync(folder, children);
        }
Exemplo n.º 18
0
		async void LoadChildFolders (IMailFolder folder)
		{
			var children = await folder.GetSubfoldersAsync ();

			LoadChildFolders (folder, children);
		}