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)); } }
/// <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); }
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; }