示例#1
0
        public static async Task <Exception> GetResponseException(HttpResponseMessage response,
                                                                  IUpdateController updateController)
        {
            var result = await response.Content.ReadAsStringAsync();

            RestError[] errors;
            try
            {
                errors = JsonConvert.DeserializeObject <RestError[]>(result, updateController.JsonSerializerSettings);
            }
            catch (Exception)
            {
                throw new HttpRequestException(result);
            }

            if (errors == null)
            {
                throw new HttpRequestException($"Invalid response (status code: {response.StatusCode}): {result}");
            }

            var error = errors[0];

            switch (error.Type)
            {
            case ErrorTypes.ValidationError:
                return(new ArgumentException(error.Message));

            default:
                return(new UpdateSystemRequestException(error));
            }
        }
示例#2
0
        /// <summary>
        ///     Update the Windows Forms applications using a dialog
        /// </summary>
        /// <param name="updateController">The update controller</param>
        /// <param name="owner">The owner window the dialogs should use</param>
        /// <param name="showSearchDialog">
        ///     Set to true if the search process should also by visualised by a window - else only a
        ///     window is opened if an update was found.
        /// </param>
        public static async Task UpdateInteractively(this IUpdateController updateController, IWin32Window owner,
                                                     bool showSearchDialog = true)
        {
            var task = updateController.SearchForNewUpdatePackagesAsync();

            if (showSearchDialog)
            {
                var progressForm = new SearchUpdatesForm();
                var _            = task.ContinueWith(t => progressForm.Close(),
                                                     TaskScheduler.FromCurrentSynchronizationContext());
                progressForm.ShowDialog(owner);
            }

            var searchResult = await task;

            if (!searchResult.IsUpdateAvailable)
            {
                return; //no new updates available
            }
            if (searchResult.IsUpdateEnforced)
            {
                (await searchResult.GetDownloader().DownloadAsync(CancellationToken.None)).Patch();
                return;
            }

            var updatesAvailableForm = new UpdatesAvailableForm(updateController, searchResult);

            updatesAvailableForm.ShowDialog(owner);
        }
示例#3
0
        private void Bind()
        {
            _uiComponentFacade    = new UIComponentFacade();
            _levelFacade          = new LevelFacade(_uiComponentFacade);
            _inputController      = new InputController();
            _visualElementsFacade = new VisualElementsFacade();
            _inputFacade          = new InputFacade(_inputController);

            _mainEngineController = new MainEngineController(_levelFacade, _visualElementsFacade, _inputController, _inputFacade, _uiComponentFacade);

            var objUpdateController = new GameObject("UpdateController");

            _updateController = objUpdateController.AddComponent <UpdateController>();
            _updateController.AddComponent(UpdatablesName.MainEngineController, _mainEngineController);
            _updateController.AddComponent(UpdatablesName.InputController, _inputController);
        }
        internal void Initialize(IUpdateController updateController)
        {
            _updateController = updateController;

            if (UpdatePackages?.Count > 0)
            {
                IsUpdateAvailable = true;
                TargetPackage     = UpdatePackages.Last();
                IsUpdateEnforced  = UpdatePackages.Any(x => x.IsEnforced) || Rollback;

                foreach (var updatePackageInfo in UpdatePackages)
                {
                    updatePackageInfo.ReleaseDate = updatePackageInfo.ReleaseDate.ToLocalTime();
                }
            }
        }
 /// <summary>
 ///     Initialize a new instance of <see cref="UpdateDownloader" />
 /// </summary>
 /// <param name="downloadable">The information needed to download the required files</param>
 public UpdateDownloader(IDownloadable downloadable)
 {
     _downloadable     = downloadable;
     _updateController = downloadable.UpdateController;
 }
        public UpdatesAvailableForm(IUpdateController updateController, UpdatePackageSearchResult updatePackageSearchResult)
        {
            _updatePackageSearchResult = updatePackageSearchResult;
            InitializeComponent();

            tableLayoutPanel1.RowStyles[2].Height = 0;

            Text = Properties.Resources.UpdatesAvailableForm_Title;
            installButton.Text            = Properties.Resources.UpdatesAvailableForm_InstallUpdates;
            cancelButton.Text             = Properties.Resources.UpdatesAvailableForm_Cancel;
            newUpdatesAvailableLabel.Text = updatePackageSearchResult.UpdatePackages.Count > 1
                ? string.Format(Properties.Resources.UpdatesAvailableForm_NewUpdatesAvailable,
                                updatePackageSearchResult.UpdatePackages.Count)
                : Properties.Resources.UpdatesAvailableForm_NewUpdateAvailable;

            newUpdatesDescriptionLabel.Text = string.Format(
                Properties.Resources.UpdatesAvailableForm_NewUpdateCanBeDownloaded,
                updateController.VersionProvider.GetVersion().ToString(false),
                updatePackageSearchResult.TargetPackage.Version.ToString(false));

            //aggregate changelogs
            //produce something like this for every changelog:

            /*
             * # Update 1.0.1
             * Release date: Saturday, 1 July 2017
             * ___
             * <changelog> / _The changelog is empty_
             */
            var changelogs = updatePackageSearchResult.UpdatePackages.Aggregate(new StringBuilder(),
                                                                                (builder, info) => builder.Append("# ").Append(Properties.Resources.UpdatesAvailableForm_Update)
                                                                                .Append(" ").AppendLine(info.Version.ToString())
                                                                                .Append(Properties.Resources.UpdatesAvailableForm_ReleaseDate).Append(": ")
                                                                                .AppendLine(info.ReleaseDate.ToString("D", CultureInfo.CurrentUICulture)).AppendLine("___").AppendLine(
                                                                                    string.IsNullOrWhiteSpace(info.Changelog.Content)
                            ? "_" + Properties.Resources.UpdatesAvailableForm_ChangelogIsEmpty + "_"
                            : info.Changelog.Content)).ToString();

            var htmlPanel = new HtmlPanel
            {
                IsSelectionEnabled   = false,
                IsContextMenuEnabled = false,
                Dock           = DockStyle.Fill,
                BaseStylesheet = MarkdownHtmlStylesheet
            };

            try
            {
                htmlPanel.Text = CommonMarkConverter.Convert(changelogs, CommonMarkSettings.Default);
                tableLayoutPanel1.Controls.Add(htmlPanel, 0, 1);
            }
            catch (CommonMarkException)
            {
                //strength of markdown, being nicely readable without formatting
                tableLayoutPanel1.Controls.Add(new RichTextBox
                {
                    ReadOnly    = true,
                    Text        = changelogs,
                    Dock        = DockStyle.Fill,
                    BorderStyle = BorderStyle.FixedSingle
                }, 0, 1);
            }
        }
 internal UpdatePackageFilebase(List <SignedFileInformation> files, IUpdateController updateController, SemVersion version)
 {
     Instructions      = new UpdateInstructions(files);
     _updateController = updateController;
     Version           = version;
 }