private async Task RebuildSubFolderList(FolderReadingDialog dialog)
        {
            foreach (var item in this.NavigationPane.MenuItems)
            {
                if (item is NavigationViewItem nv)
                {
                    if (nv.Content is FolderListItem fd)
                    {
                        fd.Release();
                    }
                }
            }

            this.NavigationPane.MenuItems.Clear();

            if (this.thumbnailPages != null)
            {
                foreach (var page in this.thumbnailPages)
                {
                    page.Release();
                }
            }

            this.thumbnailPages = new List <ThumbnailPage>();

            var count = MediaManager.FolderEntries.Length;

            dialog.IsIndeterminate = false;
            dialog.Maximum         = count;

            var trees = FolderListItem.BuildTreeString(MediaManager.FolderEntries);

            for (int i = 0; i < count; i++)
            {
                var folder = MediaManager.FolderEntries[i];

                dialog.Value = i;

                var item = new FolderListItem {
                    FolderEntry = folder, TreeText = trees[i]
                };
                var navigationitem = new NavigationViewItem()
                {
                    Content = item
                };

                this.NavigationPane.MenuItems.Add(navigationitem);

                var cover = await MediaManager.FindFolderThumbnailEntry(folder);

                if (cover != null)
                {
                    _ = this.UpdateFolderThumbnail(cover, item);
                }
            }

            dialog.Value = count;

            this.NavigationPane.SelectedItem = this.NavigationPane.MenuItems[0];
        }
        private async Task <Exception> ChangeMediaProvider(AbstractMediaProvider provider)
        {
            if (this.NavigationPane.SelectedItem is NavigationViewItem selectedItem)
            {
                if (selectedItem.Content is FolderListItem item)
                {
                    var page = this.thumbnailPages.Find((p) => p.Entry == item.FolderEntry);
                    if (page != null)
                    {
                        page.CancellationToken.Cancel();
                    }
                }
            }

            FolderReadingDialog dialog = new FolderReadingDialog();

            _ = dialog.ShowAsync(ContentDialogPlacement.Popup);

            Exception error;

            error = await MediaManager.ChangeProvider(provider);

            if (error != null)
            {
                dialog.Hide();
                return(error);
            }

            await this.RebuildSubFolderList(dialog);

            GC.Collect();
            this.ThumbnailBorder.Opacity = 0;

            this.HideImageControl();
            this.IsEnabled = true;
            dialog.Hide();
            return(null);
        }