private void SetTreeFromFolder(string folder, bool setFocus = false, string searchText = null)
        {
            if (Window == null)
            {
                return;
            }

            Window.SetStatusIcon(FontAwesome.WPF.FontAwesomeIcon.Spinner, Colors.Orange, true);
            Window.ShowStatus($"Retrieving files for folder {folder}...");

            Dispatcher.InvokeAsync(() =>
            {
                // just get the top level folder first
                ActivePathItem = null;
                WindowUtilities.DoEvents();

                var items      = FolderStructure.GetFilesAndFolders(folder, nonRecursive: true, ignoredFolders: ".git");
                ActivePathItem = items;

                WindowUtilities.DoEvents();
                Window.ShowStatus();

                if (TreeFolderBrowser.HasItems)
                {
                    SetTreeViewSelectionByIndex(0);
                }

                if (setFocus)
                {
                    TreeFolderBrowser.Focus();
                }

                AttachFileWatcher(folder);
            }, DispatcherPriority.ApplicationIdle);
        }
        private void TreeFolderBrowser_Expanded(object sender, RoutedEventArgs e)
        {
            var tvi = e.OriginalSource as TreeViewItem;

            if (tvi == null)
            {
                return;
            }

            tvi.IsSelected = true;

            var selected = TreeFolderBrowser.SelectedItem as PathItem;

            if (selected == null || selected.IsFile || selected.FullPath == "..")
            {
                return;
            }

            if (selected.Files != null && selected.Files.Count == 1 && selected.Files[0] == PathItem.Empty)
            {
                var subfolder = FolderStructure.GetFilesAndFolders(selected.FullPath, nonRecursive: true, parentPathItem: selected);
            }
        }