Skip to content

Commit c7b7719

Browse files
committed
Simplify opening bundle from string
1 parent e0948db commit c7b7719

5 files changed

Lines changed: 54 additions & 64 deletions

File tree

src/UniGetUI/MainWindow.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ public void ProcessCommandLineParameters()
404404
{
405405
// Handle potential JSON files
406406
Logger.ImportantInfo("Begin attempt to open the package bundle " + param);
407-
NavigationPage.LoadBundleFile(param);
407+
NavigationPage.LoadBundleFromFile(param);
408408
}
409409
else if (param.EndsWith("UniGetUI.exe") || param.EndsWith("UniGetUI.dll"))
410410
{

src/UniGetUI/Pages/MainView.xaml.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public sealed partial class MainView : UserControl
4545
private DiscoverSoftwarePage DiscoverPage;
4646
private SoftwareUpdatesPage UpdatesPage;
4747
private InstalledPackagesPage InstalledPage;
48-
public PackageBundlesPage BundlesPage;
48+
private PackageBundlesPage BundlesPage;
4949
private SettingsBasePage? SettingsPage;
5050
private SettingsBasePage? ManagersPage;
5151
private UniGetUILogPage? UniGetUILogPage;
@@ -466,12 +466,18 @@ private void MoreNavBtn_Tapped(object sender, Microsoft.UI.Xaml.Input.TappedRout
466466
MoreNavButtonMenu.ShowAt(sender as FrameworkElement);
467467
}
468468

469-
internal void LoadBundleFile(string param)
469+
internal void LoadBundleFromFile(string param)
470470
{
471471
NavigateTo(PageType.Bundles);
472472
BundlesPage?.OpenFromFile(param);
473473
}
474474

475+
internal void LoadBundleFromString(string payload, BundleFormatType format, string source)
476+
{
477+
NavigateTo(PageType.Bundles);
478+
BundlesPage?.OpenFromString(payload, format, source);
479+
}
480+
475481
private void ClearAllFinished_OnClick(object sender, RoutedEventArgs e)
476482
{
477483
foreach (var widget in MainApp.Operations._operationList.ToArray())

src/UniGetUI/Pages/SettingsPages/GeneralPages/Backup.xaml.cs

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
using System.Threading.Tasks;
1414
using UniGetUI.PackageEngine.PackageClasses;
1515
using UniGetUI.Interface;
16+
using UniGetUI.PackageEngine.Enums;
1617

1718
// To learn more about WinUI, the WinUI project structure,
1819
// and more about our project templates, see: http://aka.ms/winui-project-info.
@@ -111,7 +112,7 @@ private async void RestoreSettingsFromGitHubButton_Click(object sender, EventArg
111112
}
112113

113114
DialogHelper.ShowLoadingDialog(CoreTools.Translate("Restoring settings from GitHub Gist..."));
114-
var settingsContent = await _backupService.RestoreFileAsync("unigetui.settings.json");
115+
var settingsContent = await _backupService.RetrieveFileAsync("unigetui.settings.json");
115116
if (settingsContent != null)
116117
{
117118
await Task.Run(() => Settings.ImportFromString_JSON(settingsContent));
@@ -138,27 +139,13 @@ private async void RestoreSettingsFromGitHubButton_Click(object sender, EventArg
138139
private async void RestorePackagesFromGitHubButton_Click(object sender, EventArgs e)
139140
{
140141
RestorePackagesFromGitHubButton.IsEnabled = false;
141-
DialogHelper.ShowLoadingDialog(CoreTools.Translate("Loading package bundle from GitHub Gist..."));
142-
var packagesContent = await _backupService.RestoreFileAsync("unigetui.packages.ubundle");
142+
var packagesContent = await _backupService.RetrieveFileAsync("unigetui.packages.ubundle");
143143
if (packagesContent != null)
144144
{
145-
var page = MainApp.Instance.MainWindow.NavigationPage.BundlesPage;
146-
if (page != null)
147-
{
148-
if (await page.AskForNewBundle() == false)
149-
{
150-
DialogHelper.HideLoadingDialog();
151-
UpdateBackupToGitHubButtonStatus();
152-
return;
153-
}
154-
await page.AddFromBundle(packagesContent, UniGetUI.PackageEngine.Enums.BundleFormatType.UBUNDLE);
155-
MainApp.Instance.MainWindow.NavigationPage.NavigateTo(PageType.Bundles);
156-
}
157-
158-
DialogHelper.HideLoadingDialog();
145+
MainApp.Instance.MainWindow.NavigationPage.LoadBundleFromString(packagesContent, BundleFormatType.UBUNDLE, "GitHub Gist");
159146
Logger.Info("Successfully loaded package bundle from GitHub Gist.");
160147
DialogHelper.ShowDismissableBalloon(
161-
CoreTools.Translate("Bundle loaded"),
148+
CoreTools.Translate("Backup retrieved successfully!"),
162149
CoreTools.Translate("The package bundle has been loaded into the Package Bundles page."));
163150
}
164151
else

src/UniGetUI/Pages/SoftwarePages/PackageBundlesPage.cs

Lines changed: 39 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -266,11 +266,7 @@ public override void GenerateToolBar()
266266
};
267267

268268
HelpButton.Click += (_, _) => { MainApp.Instance.MainWindow.NavigationPage.ShowHelp(); };
269-
270-
NewBundle.Click += (s, e) =>
271-
{
272-
_ = AskForNewBundle();
273-
};
269+
NewBundle.Click += async (s, e) => await AskForNewBundle();
274270

275271
RemoveSelected.Click += (_, _) =>
276272
{
@@ -282,16 +278,8 @@ public override void GenerateToolBar()
282278
InstallSkipHash.Click += async (_, _) => await ImportAndInstallPackage(FilteredPackages.GetCheckedPackages(), skiphash: true);
283279
InstallInteractive.Click += async (_, _) => await ImportAndInstallPackage(FilteredPackages.GetCheckedPackages(), interactive: true);
284280
InstallAsAdmin.Click += async (_, _) => await ImportAndInstallPackage(FilteredPackages.GetCheckedPackages(), elevated: true);
285-
286-
OpenBundle.Click += async (_, _) =>
287-
{
288-
await OpenFromFile();
289-
};
290-
291-
SaveBundle.Click += async (_, _) =>
292-
{
293-
await SaveFile();
294-
};
281+
OpenBundle.Click += async (_, _) => await AskOpenFromFile();
282+
SaveBundle.Click += async (_, _) => await SaveFile();
295283

296284
SharePackage.Click += (_, _) =>
297285
{
@@ -449,25 +437,32 @@ private void MenuRemoveFromList_Invoked(object sender, RoutedEventArgs args)
449437
Loader.Remove(package);
450438
}
451439

452-
public async Task OpenFromFile(string? file = null)
440+
public async Task OpenFromString(string payload, BundleFormatType format, string source)
453441
{
454-
try
455-
{
456-
if (await AskForNewBundle() == false)
457-
return;
442+
if (await AskForNewBundle() is false)
443+
return;
458444

459-
if (file is null)
460-
{
461-
// Select file
462-
FileOpenPicker picker = new(MainApp.Instance.MainWindow.GetWindowHandle());
463-
file = picker.Show(["*.ubundle", "*.json", "*.yaml", "*.xml"]);
464-
if (file == String.Empty)
465-
return;
466-
}
445+
DialogHelper.ShowLoadingDialog(CoreTools.Translate("Loading packages, please wait..."));
467446

468-
DialogHelper.ShowLoadingDialog(CoreTools.Translate("Loading packages, please wait..."));
447+
double open_version = await AddFromBundle(payload, format);
448+
TelemetryHandler.ImportBundle(format);
449+
HasUnsavedChanges = false;
450+
451+
DialogHelper.HideLoadingDialog();
452+
if ((int)(open_version*10) != (int)(SerializableBundle.ExpectedVersion*10))
453+
{ // Check only up to first decimal digit, prevent floating point precision error.
454+
Logger.Warn($"The loaded bundle \"{source}\" is based on schema version {open_version}, " +
455+
$"while this UniGetUI build expects version {SerializableBundle.ExpectedVersion}." +
456+
$"\nThis should not be a problem if packages show up, but be careful");
457+
}
469458

470-
// Read file
459+
}
460+
461+
public async Task OpenFromFile(string file)
462+
{
463+
try
464+
{
465+
DialogHelper.ShowLoadingDialog(CoreTools.Translate("Loading packages, please wait..."));
471466
BundleFormatType formatType;
472467
string EXT = file.Split('.')[^1].ToLower();
473468
if (EXT == "yaml")
@@ -482,19 +477,8 @@ public async Task OpenFromFile(string? file = null)
482477
formatType = BundleFormatType.UBUNDLE;
483478

484479
string fileContent = await File.ReadAllTextAsync(file);
485-
486-
double open_version = await AddFromBundle(fileContent, formatType);
487-
TelemetryHandler.ImportBundle(formatType);
488-
HasUnsavedChanges = false;
489-
490480
DialogHelper.HideLoadingDialog();
491-
492-
if ((int)(open_version*10) != (int)(SerializableBundle.ExpectedVersion*10))
493-
{ // Check only up to first decimal digit, prevent floating point precision error.
494-
Logger.Warn($"The loaded bundle \"{file}\" is based on schema version {open_version}, " +
495-
$"while this UniGetUI build expects version {SerializableBundle.ExpectedVersion}." +
496-
$"\nThis should not be a problem if packages show up, but be careful");
497-
}
481+
await OpenFromString(fileContent, formatType, file);
498482
}
499483
catch (Exception ex)
500484
{
@@ -515,6 +499,19 @@ public async Task OpenFromFile(string? file = null)
515499
}
516500
}
517501

502+
public async Task AskOpenFromFile()
503+
{
504+
if (await AskForNewBundle() is false)
505+
return;
506+
507+
FileOpenPicker picker = new(MainApp.Instance.MainWindow.GetWindowHandle());
508+
string file = picker.Show(["*.ubundle", "*.json", "*.yaml", "*.xml"]);
509+
if (file == String.Empty)
510+
return;
511+
512+
await OpenFromFile(file);
513+
}
514+
518515
public async Task SaveFile()
519516
{
520517
try

src/UniGetUI/Services/GitHubBackupService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public async Task<bool> BackupAsync(Dictionary<string, string> filesToBackup)
103103
}
104104
}
105105

106-
public async Task<string?> RestoreFileAsync(string fileName)
106+
public async Task<string?> RetrieveFileAsync(string fileName)
107107
{
108108
var client = await GetAuthenticatedClientAsync();
109109
if (client == null) return null;

0 commit comments

Comments
 (0)