void LoadFile(string filePath)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(MainModel));
            StreamReader  reader     = new StreamReader(filePath);

            mainModel = (MainModel)serializer.Deserialize(reader);
            reader.Close();

            Data.TreeData.Clear();

            foreach (var parentSet in mainModel.RepoSetModels)
            {
                RepoSet repoSet = new RepoSet()
                {
                    Name = parentSet.Name
                };
                foreach (var repoPath in parentSet.RepoPaths)
                {
                    AddRepo(repoSet, repoPath);
                }
                Data.TreeData.Add(repoSet);
            }
            Properties.Settings.Default.LastFileUsed = filePath;
            Properties.Settings.Default.Save();
        }
        private void MainTree_Drop(object sender, DragEventArgs e)
        {
            //find the target folder - the top node of the tree
            TreeViewItem hitTarget;            // = dea.OriginalSource;

            TreeViewItem treeViewItem;

            if (e.OriginalSource is System.Windows.Documents.Run)
            {
                hitTarget = VisualUpwardSearch(((System.Windows.Documents.Run)e.OriginalSource).Parent as DependencyObject);
            }
            else
            {
                hitTarget = VisualUpwardSearch(e.OriginalSource as DependencyObject);
            }

            if (hitTarget == null)
            {
                //you must have dropped it in the main "grid" of the tree
                //lets ASSume the "selected" folder, or maybe the top folder?
                hitTarget = MainTree.SelectedItem as TreeViewItem;
            }

            if (hitTarget != null)
            {
                if (hitTarget.DataContext is RepoData)
                {
                    hitTarget = VisualUpwardSearch(VisualTreeHelper.GetParent(hitTarget as DependencyObject));
                }

                if (hitTarget.DataContext is RepoSet)
                {
                    RepoSet repoSet = (RepoSet)hitTarget.DataContext;

                    string[] names = (string[])e.Data.GetData(DataFormats.FileDrop);
                    foreach (var name in names)
                    {
                        if (Directory.Exists(name))
                        {
                            AddRepo(repoSet, name);
                        }
                        else
                        {
                            Debug.WriteLine($"File name {name} NOT handled");
                        }
                    }
                }

                e.Handled = true;
                Debug.WriteLine("TEST");
                return;
            }
            else
            {
                Debug.WriteLine("NOOOOOOOOOOOOOOOOOOOOOOO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                return;
            }
        }
        private void AddRepo(RepoSet repoSet, string path)
        {
            try
            {
                using (var repo = new Repository(path))
                {
                    string remoteSource = "<none>";
                    if (repo.Network.Remotes.Any())
                    {
                        remoteSource = repo.Network.Remotes.First().Url.ToString();
                    }
                    string repoName;
                    if (path.EndsWith(".git", StringComparison.OrdinalIgnoreCase))
                    {
                        repoName = Path.GetFileName(Path.GetDirectoryName(path));
                    }
                    else
                    {
                        repoName = Path.GetFileName(path.TrimEnd('\\'));
                    }

                    var newRepo = new RepoData()
                    {
                        RepoName = repoName, CurrentBranch = repo.Head.FriendlyName, LocalPath = path, RepoOrigin = remoteSource, AheadBy = repo.Head.TrackingDetails.AheadBy, BehindBy = repo.Head.TrackingDetails.BehindBy
                    };
                    repoSet.Members.Add(newRepo);
                }
            }
            catch (RepositoryNotFoundException exc)
            {
                Debug.WriteLine($"Path not a GIT repo: {path}");
            }
            catch (Exception exc)
            {
                Debug.WriteLine(exc);
            }
        }