0
0
mirror of https://github.com/sp-tarkov/launcher.git synced 2025-02-13 09:10:44 -05:00
launcher/project/SPT.Launcher/ViewModels/SettingsViewModel.cs

173 lines
6.7 KiB
C#
Raw Normal View History

2024-05-21 20:15:19 +01:00
using SPT.Launcher.Controllers;
using SPT.Launcher.Helpers;
using SPT.Launcher.Models;
using SPT.Launcher.Models.Launcher;
using SPT.Launcher.ViewModels.Dialogs;
2023-03-03 19:25:33 +00:00
using Avalonia;
using Avalonia.Controls;
using ReactiveUI;
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Threading.Tasks;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Controls.Notifications;
using Avalonia.Platform.Storage;
2023-03-03 19:25:33 +00:00
2024-05-21 20:15:19 +01:00
namespace SPT.Launcher.ViewModels
2023-03-03 19:25:33 +00:00
{
public class SettingsViewModel : ViewModelBase
{
public LocaleCollection Locales { get; set; } = new LocaleCollection();
private GameStarter gameStarter = new GameStarter(new GameStarterFrontend());
public SettingsViewModel(IScreen Host) : base(Host)
{
if(Application.Current?.ApplicationLifetime is Avalonia.Controls.ApplicationLifetimes.IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.MainWindow.Closing += MainWindow_Closing;
}
}
private void MainWindow_Closing(object? sender, System.ComponentModel.CancelEventArgs e)
{
LauncherSettingsProvider.Instance.SaveSettings();
}
public void GoBackCommand()
{
if (Application.Current?.ApplicationLifetime is Avalonia.Controls.ApplicationLifetimes.IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.MainWindow.Closing -= MainWindow_Closing;
}
LauncherSettingsProvider.Instance.AllowSettings = true;
if (!LauncherSettingsProvider.Instance.SaveSettings())
{
SendNotification("", LocalizationProvider.Instance.failed_to_save_settings, NotificationType.Error);
}
2023-03-03 19:25:33 +00:00
NavigateBack();
}
public void CleanTempFilesCommand()
{
bool filesCleared = gameStarter.CleanTempFiles();
if (filesCleared)
{
SendNotification("", LocalizationProvider.Instance.clean_temp_files_succeeded, NotificationType.Success);
2023-03-03 19:25:33 +00:00
}
else
{
SendNotification("", LocalizationProvider.Instance.clean_temp_files_failed, NotificationType.Error);
2023-03-03 19:25:33 +00:00
}
}
public void RemoveRegistryKeysCommand()
{
bool regKeysRemoved = gameStarter.RemoveRegistryKeys();
if (regKeysRemoved)
{
SendNotification("", LocalizationProvider.Instance.remove_registry_keys_succeeded, Avalonia.Controls.Notifications.NotificationType.Success);
}
else
{
SendNotification("", LocalizationProvider.Instance.remove_registry_keys_failed, Avalonia.Controls.Notifications.NotificationType.Error);
}
}
2023-08-22 19:42:14 -04:00
public async Task ResetGameSettingsCommand()
{
2023-08-22 20:06:12 -04:00
string EFTSettingsFolder = Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Battlestate Games", "Escape from Tarkov", "Settings");
2023-08-22 19:42:14 -04:00
string SPTSettingsFolder = Path.Join(LauncherSettingsProvider.Instance.GamePath, "user", "sptsettings");
if (!Directory.Exists(EFTSettingsFolder))
{
LogManager.Instance.Warning($"EFT settings folder not found, can't reset :: Path: {EFTSettingsFolder}");
2023-08-23 18:24:56 -04:00
SendNotification("", LocalizationProvider.Instance.load_live_settings_failed, Avalonia.Controls.Notifications.NotificationType.Error);
2023-08-22 19:42:14 -04:00
return;
}
try
{
Directory.CreateDirectory(SPTSettingsFolder);
foreach (string dirPath in Directory.GetDirectories(EFTSettingsFolder, "*", SearchOption.AllDirectories))
{
Directory.CreateDirectory(dirPath.Replace(EFTSettingsFolder, SPTSettingsFolder));
}
//Copy all the files & Replaces any files with the same name
foreach (string newPath in Directory.GetFiles(EFTSettingsFolder, "*.*", SearchOption.AllDirectories))
{
File.Copy(newPath, newPath.Replace(EFTSettingsFolder, SPTSettingsFolder), true);
}
}
catch (Exception ex)
{
LogManager.Instance.Exception(ex);
2023-08-23 18:24:56 -04:00
SendNotification("", LocalizationProvider.Instance.load_live_settings_failed, Avalonia.Controls.Notifications.NotificationType.Error);
2023-08-22 19:42:14 -04:00
return;
}
2023-08-23 18:24:56 -04:00
SendNotification("", LocalizationProvider.Instance.load_live_settings_succeeded, Avalonia.Controls.Notifications.NotificationType.Success);
2023-08-22 19:42:14 -04:00
}
2023-03-03 19:25:33 +00:00
public async Task ClearGameSettingsCommand()
{
2023-08-22 18:54:54 -04:00
var SPTSettingsDir = new DirectoryInfo(Path.Join(LauncherSettingsProvider.Instance.GamePath, "user", "sptsettings"));
2023-03-03 19:25:33 +00:00
2023-08-22 18:54:54 -04:00
try
2023-03-03 19:25:33 +00:00
{
2023-08-22 18:54:54 -04:00
SPTSettingsDir.Delete(true);
2023-03-03 19:25:33 +00:00
2023-08-22 18:54:54 -04:00
Directory.CreateDirectory(SPTSettingsDir.FullName);
}
catch(Exception ex)
2023-03-03 19:25:33 +00:00
{
2023-08-22 18:54:54 -04:00
LogManager.Instance.Exception(ex);
2023-08-22 19:42:14 -04:00
SendNotification("", LocalizationProvider.Instance.clear_game_settings_failed, Avalonia.Controls.Notifications.NotificationType.Error);
2023-08-22 18:54:54 -04:00
return;
2023-03-03 19:25:33 +00:00
}
SendNotification("", LocalizationProvider.Instance.clear_game_settings_succeeded, Avalonia.Controls.Notifications.NotificationType.Success);
}
public void OpenGameFolderCommand()
{
Process.Start(new ProcessStartInfo
{
FileName = Path.EndsInDirectorySeparator(LauncherSettingsProvider.Instance.GamePath) ? LauncherSettingsProvider.Instance.GamePath : LauncherSettingsProvider.Instance.GamePath + Path.DirectorySeparatorChar,
UseShellExecute = true,
Verb = "open"
});
}
public async Task SelectGameFolderCommand()
{
if (Application.Current.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
2023-03-03 19:25:33 +00:00
{
var startPath = await desktop.MainWindow.StorageProvider.TryGetFolderFromPathAsync(Assembly.GetExecutingAssembly().Location);
var dir = await desktop.MainWindow.StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions()
{
Title = "Select your SPT folder",
SuggestedStartLocation = startPath
});
2023-03-03 19:25:33 +00:00
if (dir == null || dir.Count == 0)
2023-03-03 19:25:33 +00:00
{
return;
2023-03-03 19:25:33 +00:00
}
LauncherSettingsProvider.Instance.GamePath = dir[0].Path.LocalPath;
2023-03-03 19:25:33 +00:00
}
}
}
}