public void Duplicate(VersionControl control)
        {
            int index = VersionParent.Children.IndexOf(control);

            if (index == -1)
            {
                return;
            }

            VersionController versionController = MainWindow.GetInstance().VersionController;
            ChangeLog         changeLog         = versionController.GetChangeLog().Result;
            VersionRef        oldVersionRef     = changeLog.Versions[index];
            string            duplicateName     = GetDuplicateName(oldVersionRef.VersionName);
            VersionRef        newVersionRef     = new VersionRef(versionController, oldVersionRef.RelativeFilePath, duplicateName);

            changeLog.Versions.Insert(index + 1, newVersionRef);
            VersionControl newControl = new VersionControl(newVersionRef);

            VersionParent.Children.Insert(index + 1, newControl);

            Version oldVersion = oldVersionRef.GetVersion(false).Result;
            Version version    = new Version(versionController, duplicateName, oldVersion.Description, oldVersion.DownloadLink, oldVersion.ReleaseDate, new System.Collections.Generic.List <ChangeRef>());

            if (oldVersion.AdditionalData != null)
            {
                version.AdditionalData = (JObject)oldVersion.AdditionalData.DeepClone();
            }

            foreach (ChangeRef oldChangeRef in oldVersion.Changes)
            {
                string    guid          = Guid.NewGuid().ToString();
                string    newChangePath = Path.Combine(version.VersionName, "changes", $"{guid}.json");
                ChangeRef newChangeRef  = new ChangeRef(versionController, guid, newChangePath);
                Change    oldChange     = oldChangeRef.GetChange(false).Result;
                Change    newChange     = new Change(versionController, guid, newChangePath, oldChange.Title, oldChange.Description, newVersionRef);
                if (oldChange.ReleaseVersion != null)
                {
                    newChange.ReleaseVersion = new VersionRef(versionController, newVersionRef.RelativeFilePath, newVersionRef.VersionName);
                }

                if (oldChange.AdditionalData != null)
                {
                    newChange.AdditionalData = (JObject)oldChange.AdditionalData.DeepClone();
                }

                version.Changes.Add(newChangeRef);
                versionController.CacheChange(newChange);
            }

            versionController.CacheVersion(version);
        }
        public void CreateVersionPressed(object sender, RoutedEventArgs args)
        {
            VersionController versionController = MainWindow.GetInstance().VersionController;
            string            newVersionName    = GetNewVersionName();
            VersionRef        versionRef        = new VersionRef(versionController, Path.Combine(newVersionName, "version.json"), newVersionName);
            VersionControl    newControl        = new VersionControl(versionRef);

            VersionParent.Children.Insert(0, newControl);
            ChangeLog changeLog = versionController.GetChangeLog().Result;

            changeLog.Versions.Insert(0, versionRef);

            Version version = new Version(versionController, newVersionName, string.Empty, string.Empty, DateTime.Now, new System.Collections.Generic.List <ChangeRef>());

            versionController.CacheVersion(version);

            ContentArea.GetInstance().OpenPage(ContentArea.PageType.Version, versionRef);
        }