public void OpenButtonPressed(object sender, RoutedEventArgs args)
        {
            if (MainWindow.GetInstance().VersionController != null)
            {
                if (MessageBox.Show("Any unsaved changes will be lost.", "Are you sure?", MessageBoxButton.YesNo) == MessageBoxResult.No)
                {
                    return;
                }
            }

            OpenFileDialog openFileDialog = new OpenFileDialog();

            openFileDialog.Filter           = "ChangeLog Json File (changelog.json)|changelog.json";
            openFileDialog.InitialDirectory = Environment.SpecialFolder.Personal.ToString();
            if (openFileDialog.ShowDialog() == true)
            {
                if (!string.IsNullOrEmpty(openFileDialog.FileName))
                {
                    if (Path.GetFileName(openFileDialog.FileName) == "changelog.json" && File.Exists(openFileDialog.FileName))
                    {
                        string            dir        = Path.GetDirectoryName(openFileDialog.FileName);
                        VersionController controller = new VersionController("0", new FileSystemProvider(dir));
                        ChangeLog         changeLog  = controller.GetChangeLog().Result;
                        if (changeLog != null)
                        {
                            MainWindow.GetInstance().VersionController = controller;
                            ContentArea.GetInstance().OpenPage(ContentArea.PageType.ChangeLog);
                            return;
                        }
                    }
                }

                MessageBox.Show("The selected file was not a valid 'changelog.json' file.", "Open ChangeLog Failed", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Beispiel #2
0
        public async Task PostSerializeReload(VersionController versionController)
        {
            ChangeLog changeLog = await versionController.GetChangeLog();

            if (EmptyPage.Visibility == Visibility.Visible)
            {
                return;
            }

            if (ChangeLogPage.Visibility == Visibility.Visible)
            {
                OpenPage(PageType.ChangeLog);
                return;
            }

            if (VersionPage.Visibility == Visibility.Visible)
            {
                VersionRef oldRef = VersionPage.GetRef();
                foreach (VersionRef versionRef in changeLog.Versions)
                {
                    if (versionRef.VersionName == oldRef.VersionName)
                    {
                        OpenPage(PageType.Version, versionRef);
                        return;
                    }
                }

                OpenPage(PageType.ChangeLog);
                return;
            }

            if (ChangePage.Visibility == Visibility.Visible)
            {
                VersionRef oldVersionRef = VersionPage.GetRef();
                ChangeRef  oldChangeRef  = ChangePage.GetChangeRef();
                foreach (VersionRef versionRef in changeLog.Versions)
                {
                    if (versionRef.VersionName == oldVersionRef.VersionName)
                    {
                        Version version = await versionRef.GetVersion();

                        foreach (ChangeRef changeRef in version.Changes)
                        {
                            if (changeRef.Guid == oldChangeRef.Guid)
                            {
                                OpenPage(PageType.Change, versionRef, changeRef);
                                return;
                            }
                        }

                        OpenPage(PageType.Version, versionRef);
                        return;
                    }
                }

                OpenPage(PageType.ChangeLog);
                return;
            }
        }
        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);
        }
        private static async Task <int> MainAsync(string[] args)
        {
            string currentVersion = "1.0.0";
            string baseUrl        = "https://start-menu-manager.jam-es.com/versions";

            // Create instance of VersionController by passing in this version of the application, and the URL of the directory containing changelog file:
            VersionController versionController = new VersionController(currentVersion, baseUrl);

            Console.WriteLine($"This Version: {currentVersion}");

            // Check this is the latest version
            bool isLatestVersion = await versionController.IsLatestVersion();

            Console.WriteLine($"Is Latest Version: {isLatestVersion}");

            // If not latest, you can check this version is still meant to function correctly
            bool isFunctioningVersion = await versionController.IsFunctioningVersion();

            Console.WriteLine($"Is Version Functioning: {isFunctioningVersion}");

            // The ChangeLog object contains a list of all versions that have been released
            // We can list version properties like this:
            ChangeLog changeLog = await versionController.GetChangeLog();

            Console.WriteLine();
            Console.WriteLine("All Versions:");
            foreach (VersionRef versionRef in changeLog.Versions)
            {
                Version version = await versionRef.GetVersion();

                Console.WriteLine($"Version Name: {version.VersionName}");
                Console.WriteLine($"Version Description: {version.Description}");
                Console.WriteLine($"Version Download Link: {version.DownloadLink}");
                Console.WriteLine($"Version Release Date: {version.ReleaseDate}");

                // You can get all changes in a version with version.Changes
            }

            // Get individual versions with:
            VersionRef firstAppVersionRef = await versionController.GetFirstVersionRef();

            Version latestAppVersionRef = await versionController.GetLatestVersion();

            VersionRef specificVersionRef = await versionController.GetVersionRef("1.0.0b4");

            Console.WriteLine();
            Console.WriteLine($"First Version: {firstAppVersionRef.VersionName}");
            Console.WriteLine($"Latest Version: {latestAppVersionRef.VersionName}");
            Console.WriteLine($"Found Version 1.0.0b4: {specificVersionRef != null}");

            // Convert references to Version objects to get all the properties
            Version firstVersion = await firstAppVersionRef.GetVersion();

            Console.WriteLine($"First Version Description: {firstVersion.Description}");

            // ChangeLog, Version and Change objects can all have additional data stored within them (set in the WPF app)
            // You can access this data by deserializing the AdditionalData property (it is a JObject)
            // For example, to retrieve additional data from a version
            ExtraVersionData extraData = firstVersion.AdditionalData.ToObject <ExtraVersionData>();

            // ^ The version files with the given URI don't actually use additional data so this is null

            // You could use this to order lists of versions or changes using Linq:

            /*
             *  List<Task<Version>> getVersionTasks = changeLog.Versions.Select(async v => await v.GetVersion()).ToList();
             *  IEnumerable<Version> versions = await Task.WhenAll(getVersionTasks);
             *  versions.OrderBy(v => v.AdditionalData.ToObject<ExtraVersionData>().Importance);
             *  // It is gerenally a good idea to surround this in try{}catch{} in case ToObject throws an error
             */

            Console.ReadKey();

            return(0);
        }