mirror of
https://github.com/bloxstraplabs/bloxstrap.git
synced 2025-04-18 00:21:33 -07:00
91 lines
2.8 KiB
C#
91 lines
2.8 KiB
C#
using System.Windows.Input;
|
|
using CommunityToolkit.Mvvm.Input;
|
|
using ICSharpCode.SharpZipLib.Zip;
|
|
using Microsoft.Win32;
|
|
|
|
namespace Bloxstrap.UI.ViewModels.Settings
|
|
{
|
|
public class BloxstrapViewModel : NotifyPropertyChangedViewModel
|
|
{
|
|
public bool UpdateCheckingEnabled
|
|
{
|
|
get => App.Settings.Prop.CheckForUpdates;
|
|
set => App.Settings.Prop.CheckForUpdates = value;
|
|
}
|
|
|
|
public bool AnalyticsEnabled
|
|
{
|
|
get => App.Settings.Prop.EnableAnalytics;
|
|
set => App.Settings.Prop.EnableAnalytics = value;
|
|
}
|
|
|
|
public bool ShouldExportConfig { get; set; } = true;
|
|
|
|
public bool ShouldExportLogs { get; set; } = true;
|
|
|
|
public ICommand ExportDataCommand => new RelayCommand(ExportData);
|
|
|
|
private void ExportData()
|
|
{
|
|
string timestamp = DateTime.UtcNow.ToString("yyyyMMdd'T'HHmmss'Z'");
|
|
|
|
var dialog = new SaveFileDialog
|
|
{
|
|
FileName = $"Bloxstrap-export-{timestamp}.zip",
|
|
Filter = $"{Strings.FileTypes_ZipArchive}|*.zip"
|
|
};
|
|
|
|
if (dialog.ShowDialog() != true)
|
|
return;
|
|
|
|
using var memStream = new MemoryStream();
|
|
using var zipStream = new ZipOutputStream(memStream);
|
|
|
|
if (ShouldExportConfig)
|
|
{
|
|
var files = new List<string>()
|
|
{
|
|
App.Settings.FileLocation,
|
|
App.State.FileLocation,
|
|
App.FastFlags.FileLocation
|
|
};
|
|
|
|
AddFilesToZipStream(zipStream, files, "Config/");
|
|
}
|
|
|
|
if (ShouldExportLogs && Directory.Exists(Paths.Logs))
|
|
{
|
|
var files = Directory.GetFiles(Paths.Logs)
|
|
.Where(x => !x.Equals(App.Logger.FileLocation, StringComparison.OrdinalIgnoreCase));
|
|
|
|
AddFilesToZipStream(zipStream, files, "Logs/");
|
|
}
|
|
|
|
zipStream.CloseEntry();
|
|
memStream.Position = 0;
|
|
|
|
using var outputStream = File.OpenWrite(dialog.FileName);
|
|
memStream.CopyTo(outputStream);
|
|
|
|
Process.Start("explorer.exe", $"/select,\"{dialog.FileName}\"");
|
|
}
|
|
|
|
private void AddFilesToZipStream(ZipOutputStream zipStream, IEnumerable<string> files, string directory)
|
|
{
|
|
foreach (string file in files)
|
|
{
|
|
if (!File.Exists(file))
|
|
continue;
|
|
|
|
var entry = new ZipEntry(directory + Path.GetFileName(file));
|
|
entry.DateTime = DateTime.Now;
|
|
|
|
zipStream.PutNextEntry(entry);
|
|
|
|
using var fileStream = File.OpenRead(file);
|
|
fileStream.CopyTo(zipStream);
|
|
}
|
|
}
|
|
}
|
|
}
|