From 995a2278c88ec0248fdddcea564daca94ec3e992 Mon Sep 17 00:00:00 2001 From: Elshiekh Ahmed Date: Mon, 6 Apr 2026 15:03:01 -0700 Subject: [PATCH 1/2] Small UI change to add details for MSIXVC2 Preview to Landing Page Card (and compact mode) --- .../Resources/Strings/MainPage.Designer.cs | 27 ++++++++++++++++--- .../Resources/Strings/MainPage.resx | 7 +++++ src/PackageUploader.UI/View/MainPageView.xaml | 20 ++++++++++++-- 3 files changed, 48 insertions(+), 6 deletions(-) diff --git a/src/PackageUploader.UI/Resources/Strings/MainPage.Designer.cs b/src/PackageUploader.UI/Resources/Strings/MainPage.Designer.cs index d27f2b25..4a0ab522 100644 --- a/src/PackageUploader.UI/Resources/Strings/MainPage.Designer.cs +++ b/src/PackageUploader.UI/Resources/Strings/MainPage.Designer.cs @@ -19,7 +19,7 @@ namespace PackageUploader.UI.Resources.Strings { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] public class MainPage { @@ -177,6 +177,15 @@ public static string MakePackageNotFoundErrorMsg { } } + /// + /// Looks up a localized string similar to MSIXVC2 upload requires makepkg2 tools, available as a preview in the April 2026 GDK. Install the April 2026 GDK to get started.. + /// + public static string MakePkg2NotFoundErrorMsg { + get { + return ResourceManager.GetString("MakePkg2NotFoundErrorMsg", resourceCulture); + } + } + /// /// Looks up a localized string similar to Maximize. /// @@ -204,6 +213,16 @@ public static string Msixvc2BodyText { } } + /// + /// Looks up a localized string similar to Point to your loose file directory containing a MicrosoftGame.config for your PC game. Your files will be packaged and uploaded using the MSIXVC2 format — no pre-built package required. + ///Learn more: https://aka.ms/MSIXVC2. + /// + public static string Msixvc2BodyTextWithLink { + get { + return ResourceManager.GetString("Msixvc2BodyTextWithLink", resourceCulture); + } + } + /// /// Looks up a localized string similar to Get started. /// @@ -214,11 +233,11 @@ public static string Msixvc2ButtonText { } /// - /// Looks up a localized string similar to MSIXVC2 upload requires makepkg2 tools, available as a preview in the April 2026 GDK. Install the April 2026 GDK to get started.. + /// Looks up a localized string similar to MSIXVC2 Preview. /// - public static string MakePkg2NotFoundErrorMsg { + public static string Msixvc2SubtitleText { get { - return ResourceManager.GetString("MakePkg2NotFoundErrorMsg", resourceCulture); + return ResourceManager.GetString("Msixvc2SubtitleText", resourceCulture); } } diff --git a/src/PackageUploader.UI/Resources/Strings/MainPage.resx b/src/PackageUploader.UI/Resources/Strings/MainPage.resx index 99a083b6..fd6e9d53 100644 --- a/src/PackageUploader.UI/Resources/Strings/MainPage.resx +++ b/src/PackageUploader.UI/Resources/Strings/MainPage.resx @@ -206,6 +206,13 @@ Get started + + MSIXVC2 Preview + + + Point to your loose file directory containing a MicrosoftGame.config for your PC game. Your files will be packaged and uploaded using the MSIXVC2 format — no pre-built package required. +Learn more: https://aka.ms/MSIXVC2 + MSIXVC2 upload requires makepkg2 tools, available as a preview in the April 2026 GDK. Install the April 2026 GDK to get started. diff --git a/src/PackageUploader.UI/View/MainPageView.xaml b/src/PackageUploader.UI/View/MainPageView.xaml index 4c622a02..66aec8b6 100644 --- a/src/PackageUploader.UI/View/MainPageView.xaml +++ b/src/PackageUploader.UI/View/MainPageView.xaml @@ -240,13 +240,29 @@ Margin="6,0,0,0" VerticalAlignment="Center" Visibility="{Binding IsCompactMode, Converter={StaticResource BooleanToVisibilityConverter}}" - ToolTip="{x:Static strings:MainPage.Msixvc2BodyText}"> + ToolTip="{x:Static strings:MainPage.Msixvc2BodyTextWithLink}"> + + + + + + + + ToolTip="{x:Static strings:MainPage.Msixvc2BodyTextWithLink}"> From f399be0c5a60fec97e61020b16c99c242251ecc3 Mon Sep 17 00:00:00 2001 From: Elshiekh Ahmed Date: Mon, 6 Apr 2026 15:22:38 -0700 Subject: [PATCH 2/2] Branch refreshing on back out & back in to MSIXVC2 Upload page --- .../View/Msixvc2UploadView.xaml.cs | 6 ++- .../ViewModel/Msixvc2UploadViewModel.cs | 48 +++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/src/PackageUploader.UI/View/Msixvc2UploadView.xaml.cs b/src/PackageUploader.UI/View/Msixvc2UploadView.xaml.cs index 6b42358f..eaeee59e 100644 --- a/src/PackageUploader.UI/View/Msixvc2UploadView.xaml.cs +++ b/src/PackageUploader.UI/View/Msixvc2UploadView.xaml.cs @@ -17,7 +17,11 @@ public Msixvc2UploadView(Msixvc2UploadViewModel viewModel) _viewModel = viewModel; // Register drag drop event handlers after control is initialized - this.Loaded += (s, e) => RegisterDragDropHandlers(); + this.Loaded += (s, e) => + { + RegisterDragDropHandlers(); + _viewModel.RefreshBranchesAsync(); + }; } private void RegisterDragDropHandlers() diff --git a/src/PackageUploader.UI/ViewModel/Msixvc2UploadViewModel.cs b/src/PackageUploader.UI/ViewModel/Msixvc2UploadViewModel.cs index 9d15c81f..fd693459 100644 --- a/src/PackageUploader.UI/ViewModel/Msixvc2UploadViewModel.cs +++ b/src/PackageUploader.UI/ViewModel/Msixvc2UploadViewModel.cs @@ -374,6 +374,54 @@ private async void GetProductInfoAsync() } } + public async void RefreshBranchesAsync() + { + if (_gameProduct == null || string.IsNullOrEmpty(BigId) || BigId == "None") + { + return; + } + + string previousSelection = BranchOrFlightDisplayName; + + IsLoadingBranchesAndFlights = true; + BranchOrFlightErrorMessage = string.Empty; + + try + { + _branchesAndFlights = await _uploaderService.GetPackageBranchesAsync(_gameProduct, CancellationToken.None); + + List displayNames = []; + foreach (var branch in _branchesAndFlights) + { + if (branch.BranchType == GamePackageBranchType.Branch) + displayNames.Add("Branch: " + branch.Name); + else if (branch.BranchType == GamePackageBranchType.Flight) + displayNames.Add("Flight: " + branch.Name); + } + BranchAndFlightNames = [.. displayNames]; + + if (!string.IsNullOrEmpty(previousSelection) && displayNames.Contains(previousSelection)) + { + BranchOrFlightDisplayName = previousSelection; + } + else + { + string mainBranch = displayNames.FirstOrDefault(n => n.Equals("Branch: Main", StringComparison.OrdinalIgnoreCase), string.Empty); + BranchOrFlightDisplayName = !string.IsNullOrEmpty(mainBranch) ? mainBranch : BranchAndFlightNames.FirstOrDefault(string.Empty); + } + OnPropertyChanged(nameof(BranchOrFlightDisplayName)); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error refreshing branches for BigId {BigId}.", BigId); + BranchOrFlightErrorMessage = $"Error refreshing branches: {ex.Message}"; + } + finally + { + IsLoadingBranchesAndFlights = false; + } + } + private async void UpdateMarketGroups() { if (_branchesAndFlights == null)