Skip to content

Commit

Permalink
Implement import/Export settings, reset WingetUI (fix #1423)
Browse files Browse the repository at this point in the history
  • Loading branch information
marticliment committed Mar 1, 2024
1 parent 953d5d5 commit 1c2de3b
Showing 1 changed file with 46 additions and 21 deletions.
67 changes: 46 additions & 21 deletions src/wingetui/Interface/Pages/SettingsPage.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using ModernWindow.Interface.Widgets;
using ModernWindow.PackageEngine.Classes;
using ModernWindow.Structures;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
Expand Down Expand Up @@ -309,47 +310,71 @@ public int GetHwnd()

private void OpenWelcomeWizard(object sender, Interface.Widgets.ButtonCardEventArgs e)
{
// TODO: Implement
}

private async void ImportSettings(object sender, Interface.Widgets.ButtonCardEventArgs e)
private void ImportSettings(object sender, Interface.Widgets.ButtonCardEventArgs e)
{
FileOpenPicker openPicker = new();
var picker = new Pickers.FileOpenPicker(Tools.App.MainWindow.GetWindowHandle());
var file = picker.Show(new List<string> { "*.json" });

openPicker.ViewMode = PickerViewMode.List;
openPicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
WinRT.Interop.InitializeWithWindow.Initialize(openPicker, (IntPtr)GetHwnd());

openPicker.FileTypeFilter.Add(".conf");

StorageFile file = await openPicker.PickSingleFileAsync();
if (file != null)
if (file != string.Empty)
{
// TODO: Import Settings
ResetWingetUI(sender, e);
var settings = JsonConvert.DeserializeObject<Dictionary<string, string>>(File.ReadAllText(file));
foreach(var entry in settings)
Tools.SetSettingsValue(entry.Key, entry.Value);

GeneralSettingsExpander.ShowRestartRequiredBanner();
}
}

private async void ExportSettings(object sender, Interface.Widgets.ButtonCardEventArgs e)
{
try
{
var picker = new Pickers.FileSavePicker(Tools.App.MainWindow.GetWindowHandle());
var file = picker.Show(new List<string> { "*.json" }, "WingetUI Settings.json");

if (file != String.Empty)
{
Tools.App.MainWindow.ShowLoadingDialog(Tools.Translate("Please wait..."));

var IgnoredSettings = new string[] { "OperationHistory", "CurrentSessionToken", "OldWindowGeometry" };

Dictionary<string, string> settings = new();
foreach (var path in Directory.EnumerateFiles(CoreData.WingetUIDataDirectory))
{
if (Path.GetFileName(path).Contains('.') || IgnoredSettings.Contains(Path.GetFileName(path)))
continue;
settings.Add(Path.GetFileName(path), await File.ReadAllTextAsync(path));
}

FileSavePicker savePicker = new();
savePicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
WinRT.Interop.InitializeWithWindow.Initialize(savePicker, (IntPtr)GetHwnd());
savePicker.FileTypeChoices.Add(Tools.Translate("WingetUI Settings File"), new List<string>() { ".conf" });
savePicker.SuggestedFileName = Tools.Translate("Exported Settings");
await File.WriteAllTextAsync(file, JsonConvert.SerializeObject(settings));

StorageFile file = await savePicker.PickSaveFileAsync();
if (file != null)
Tools.App.MainWindow.HideLoadingDialog();
}
}
catch (Exception ex)
{
// TODO: Export settings
Tools.App.MainWindow.HideLoadingDialog();
AppTools.Log(ex);
}

}

private void ResetWingetUI(object sender, Interface.Widgets.ButtonCardEventArgs e)
{
// TODO: Reset Settings
try
{
foreach (var path in Directory.EnumerateFiles(CoreData.WingetUIDataDirectory))
{
File.Delete(path);
}
}
catch (Exception ex)
{
AppTools.Log(ex);
}
GeneralSettingsExpander.ShowRestartRequiredBanner();
}

Expand Down

0 comments on commit 1c2de3b

Please sign in to comment.