0
0
mirror of https://github.com/sp-tarkov/launcher.git synced 2025-02-12 16:50:43 -05:00

Merge pull request 'fix/game-settings-path' (!17) from waffle.lord/Launcher:fix/game-settings-path into master

Reviewed-on: SPT-AKI/Launcher#17
This commit is contained in:
IsWaffle 2023-08-23 00:10:19 +00:00
commit a4fe377a9f
13 changed files with 148 additions and 108 deletions

View File

@ -123,9 +123,11 @@ namespace Aki.Launcher.Helpers
englishLocale.default_language = "Default Language";
englishLocale.game_path = "Game Path";
englishLocale.clear_game_settings = "Clear Game Settings";
englishLocale.clear_game_settings_warning = "You are about to remove your old game settings files. They will be backed up to:\n{0}\n\nAre you sure?";
englishLocale.clear_game_settings_succeeded = "Game settings cleared.";
englishLocale.clear_game_settings_failed = "An issue occurred while clearing game settings.";
englishLocale.reset_game_settings = "Reset Game Settings";
englishLocale.reset_game_settings_succeeded = "Game settings reset";
englishLocale.reset_game_settings_failed = "Failed to reset game settings";
englishLocale.remove_registry_keys = "Remove Registry Keys";
englishLocale.remove_registry_keys_succeeded = "Registry keys removed.";
englishLocale.remove_registry_keys_failed = "An issue occurred while removing registry keys.";
@ -738,22 +740,6 @@ namespace Aki.Launcher.Helpers
}
#endregion
#region clear_game_settings_warning
private string _clear_game_settings_warning;
public string clear_game_settings_warning
{
get => _clear_game_settings_warning;
set
{
if (_clear_game_settings_warning != value)
{
_clear_game_settings_warning = value;
RaisePropertyChanged(nameof(clear_game_settings_warning));
}
}
}
#endregion
#region clear_game_settings_succeeded
private string _clear_game_settings_succeeded;
public string clear_game_settings_succeeded
@ -786,6 +772,54 @@ namespace Aki.Launcher.Helpers
}
#endregion
#region reset_game_settings
private string _reset_game_settings;
public string reset_game_settings
{
get => _reset_game_settings;
set
{
if (_reset_game_settings != value)
{
_reset_game_settings = value;
RaisePropertyChanged(nameof(reset_game_settings));
}
}
}
#endregion
#region reset_game_settings_failed
private string _reset_game_settings_failed;
public string reset_game_settings_failed
{
get => _reset_game_settings_failed;
set
{
if (_reset_game_settings_failed != value)
{
_reset_game_settings_failed = value;
RaisePropertyChanged(nameof(reset_game_settings_failed));
}
}
}
#endregion
#region reset_game_settings_succeeded
private string _reset_game_settings_succeeded;
public string reset_game_settings_succeeded
{
get => _reset_game_settings_succeeded;
set
{
if (_reset_game_settings_succeeded != value)
{
_reset_game_settings_succeeded = value;
RaisePropertyChanged(nameof(reset_game_settings_succeeded));
}
}
}
#endregion
#region remove_registry_keys
private string _remove_registry_keys;
public string remove_registry_keys

View File

@ -32,7 +32,6 @@
"default_language": "默认语言",
"game_path": "游戏路径",
"clear_game_settings": "恢复默认游戏设置",
"clear_game_settings_warning": "您将要删除旧的游戏设置文件。它们将备份到:\n{0}\n\n您确定吗",
"clear_game_settings_succeeded": "游戏设置已恢复默认",
"clear_game_settings_failed": "游戏设置恢复失败",
"remove_registry_keys": "移除注册表",
@ -83,5 +82,8 @@
"description": "描述",
"server_mods": "Server Mods",
"profile_mods": "Profile Mods",
"author": "Author"
"author": "Author",
"reset_game_settings": "Reset Game Settings",
"reset_game_settings_failed": "Failed to reset game settings",
"reset_game_settings_succeeded": "Game settings reset"
}

View File

@ -32,7 +32,6 @@
"default_language": "預設語言",
"game_path": "遊戲路徑",
"clear_game_settings": "重置遊戲設定",
"clear_game_settings_warning": "You are about to remove your old game settings files. They will be backed up to:\n{0}\n\nAre you sure?",
"clear_game_settings_succeeded": "遊戲設定已重置",
"clear_game_settings_failed": "遊戲設定重置過程中發生錯誤",
"remove_registry_keys": "移除登錄檔機碼",
@ -83,5 +82,8 @@
"description": "Description",
"server_mods": "Server Mods",
"profile_mods": "Profile Mods",
"author": "Author"
"author": "Author",
"reset_game_settings": "Reset Game Settings",
"reset_game_settings_failed": "Failed to reset game settings",
"reset_game_settings_succeeded": "Game settings reset"
}

View File

@ -32,7 +32,6 @@
"default_language": "Default Language",
"game_path": "SPT Game Path",
"clear_game_settings": "Clear Game Settings",
"clear_game_settings_warning": "You are about to remove your old game settings files. They will be backed up to:\n{0}\n\nAre you sure?",
"clear_game_settings_succeeded": "Game settings cleared.",
"clear_game_settings_failed": "An issue occurred while clearing game settings.",
"remove_registry_keys": "Remove Registry Keys",
@ -83,5 +82,8 @@
"description": "Description",
"server_mods": "Server Mods",
"profile_mods": "Profile Mods",
"author": "Author"
"author": "Author",
"reset_game_settings": "Reset Game Settings",
"reset_game_settings_failed": "Failed to reset game settings",
"reset_game_settings_succeeded": "Game settings reset"
}

View File

@ -32,7 +32,6 @@
"default_language": "Langue par défaut",
"game_path": "Répertoire du jeu",
"clear_game_settings": "Réinitialiser les paramètres du jeu",
"clear_game_settings_warning": "You are about to remove your old game settings files. They will be backed up to:\n{0}\n\nAre you sure?",
"clear_game_settings_succeeded": "Paramètres du jeu réinitialisés.",
"clear_game_settings_failed": "Un problème est survenu pendant la réinitialisation des paramètres de jeu.",
"remove_registry_keys": "Réinitialiser les clés du registre",
@ -83,5 +82,8 @@
"description": "Description",
"server_mods": "Server Mods",
"profile_mods": "Profile Mods",
"author": "Author"
"author": "Author",
"reset_game_settings": "Reset Game Settings",
"reset_game_settings_failed": "Failed to reset game settings",
"reset_game_settings_succeeded": "Game settings reset"
}

View File

@ -32,7 +32,6 @@
"default_language": "Standardsprache",
"game_path": "Spielpfad",
"clear_game_settings": "Spieleinstellungen zurücksetzen",
"clear_game_settings_warning": "You are about to remove your old game settings files. They will be backed up to:\n{0}\n\nAre you sure?",
"clear_game_settings_succeeded": "Spieleinstellungen zurückgesetzt",
"clear_game_settings_failed": "Die Spieleinstellungen konnten aufgrund eines Fehlers nicht zurückgesetzt werden.",
"remove_registry_keys": "Registry-Schlüssel entfernen?",
@ -83,5 +82,8 @@
"description": "Description",
"server_mods": "Server Mods",
"profile_mods": "Profile Mods",
"author": "Author"
"author": "Author",
"reset_game_settings": "Reset Game Settings",
"reset_game_settings_failed": "Failed to reset game settings",
"reset_game_settings_succeeded": "Game settings reset"
}

View File

@ -32,7 +32,6 @@
"default_language": "Linguaggio predefinito",
"game_path": "Cartella di installazione di SPT",
"clear_game_settings": "Resetta impostazioni di gioco",
"clear_game_settings_warning": "Stai per cancellare i file delle impostazioni di gioco. Saranno backuppate in:\n{0}\n\nConfermi?",
"clear_game_settings_succeeded": "Impostazioni di gioco resettate.",
"clear_game_settings_failed": "E' sorto un problema nel resettare le impostazioni di gioco.",
"remove_registry_keys": "Rimuovi chiavi di registro",
@ -83,5 +82,8 @@
"description": "Descrizione",
"server_mods": "Server Mods",
"profile_mods": "Profile Mods",
"author": "Author"
"author": "Author",
"reset_game_settings": "Reset Game Settings",
"reset_game_settings_failed": "Failed to reset game settings",
"reset_game_settings_succeeded": "Game settings reset"
}

View File

@ -32,7 +32,6 @@
"default_language": "デフォルト言語",
"game_path": "SPTゲームパス",
"clear_game_settings": "ゲーム設定をクリア",
"clear_game_settings_warning": "古いゲーム設定ファイルを削除しようとしています。 次の場所にバックアップされます:\n{0}\n\nよろしいですか?",
"clear_game_settings_succeeded": "ゲーム設定をクリアしました。",
"clear_game_settings_failed": "ゲーム設定のクリア中に問題が発生しました。",
"remove_registry_keys": "レジストリキーを削除する",
@ -83,5 +82,8 @@
"description": "Description",
"server_mods": "Server Mods",
"profile_mods": "Profile Mods",
"author": "Author"
"author": "Author",
"reset_game_settings": "Reset Game Settings",
"reset_game_settings_failed": "Failed to reset game settings",
"reset_game_settings_succeeded": "Game settings reset"
}

View File

@ -32,7 +32,6 @@
"default_language": "기본 언어",
"game_path": "SPT 게임 경로",
"clear_game_settings": "게임 설정 초기화",
"clear_game_settings_warning": "기존 게임의 설정 파일을 초기화 합니다. 기존 파일들은\n{0}\n\n위치에 백업됩니다. 초기화하시겠습니까?",
"clear_game_settings_succeeded": "게임 설정이 초기화되었습니다.",
"clear_game_settings_failed": "게임 설정을 초기화하는 도중에 문제가 발생하였습니다.",
"remove_registry_keys": "레지스트리 키 삭제",
@ -83,5 +82,8 @@
"description": "Description",
"server_mods": "Server Mods",
"profile_mods": "Profile Mods",
"author": "Author"
"author": "Author",
"reset_game_settings": "Reset Game Settings",
"reset_game_settings_failed": "Failed to reset game settings",
"reset_game_settings_succeeded": "Game settings reset"
}

View File

@ -32,7 +32,6 @@
"default_language": "Язык по-уолчанию",
"game_path": "Путь к игре",
"clear_game_settings": "Очистить настройки игры",
"clear_game_settings_warning": "Вы собираетесь удалить старые файлы настроек игры. Их копия будет расположена здесь:\n{0}\n\n Продолжить?",
"clear_game_settings_succeeded": "Настройки игры очищены",
"clear_game_settings_failed": "Неизвестная проблема при очистке настроек игры",
"remove_registry_keys": "Очистить реестр",
@ -83,5 +82,8 @@
"description": "Description",
"server_mods": "Server Mods",
"profile_mods": "Profile Mods",
"author": "Author"
"author": "Author",
"reset_game_settings": "Reset Game Settings",
"reset_game_settings_failed": "Failed to reset game settings",
"reset_game_settings_succeeded": "Game settings reset"
}

View File

@ -32,7 +32,6 @@
"default_language": "Idioma",
"game_path": "Ruta para SPT",
"clear_game_settings": "Limpiar ajustes del juego",
"clear_game_settings_warning": "Estás a punto de borrar tus antiguos ajustes del juego. Ellos estarán respaldados en:\n{0}\n\n¿Estás seguro?",
"clear_game_settings_succeeded": "Ajustes limpiados.",
"clear_game_settings_failed": "Ha habido un problema mientras se limpiaban los ajustes del juego.",
"remove_registry_keys": "Eliminar claves de registro",
@ -83,5 +82,8 @@
"description": "Descripción",
"server_mods": "Server Mods",
"profile_mods": "Profile Mods",
"author": "Author"
"author": "Author",
"reset_game_settings": "Reset Game Settings",
"reset_game_settings_failed": "Failed to reset game settings",
"reset_game_settings_succeeded": "Game settings reset"
}

View File

@ -74,79 +74,59 @@ namespace Aki.Launcher.ViewModels
}
}
public async Task ClearGameSettingsCommand()
public async Task ResetGameSettingsCommand()
{
string EFTSettingsFolder = Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Battlestate Games", "Escape from Tarkov", "Settings");
string SPTSettingsFolder = Path.Join(LauncherSettingsProvider.Instance.GamePath, "user", "sptsettings");
bool BackupAndRemove(string backupFolderPath, FileInfo file)
if (!Directory.Exists(EFTSettingsFolder))
{
try
{
file.Refresh();
//if for some reason the file no longer exists /shrug
if (!file.Exists)
{
return false;
}
//create backup dir and copy file
Directory.CreateDirectory(backupFolderPath);
string newFilePath = Path.Combine(backupFolderPath, $"{file.Name}_{DateTime.Now.ToString("MM-dd-yyyy_hh-mm-ss-tt")}.bak");
File.Copy(file.FullName, newFilePath);
//copy check
if (!File.Exists(newFilePath))
{
return false;
}
//delete old file
file.Delete();
}
catch (Exception ex)
{
LogManager.Instance.Exception(ex);
}
//delete check
if (file.Exists)
{
return false;
}
return true;
LogManager.Instance.Warning($"EFT settings folder not found, can't reset :: Path: {EFTSettingsFolder}");
SendNotification("", LocalizationProvider.Instance.reset_game_settings_failed, Avalonia.Controls.Notifications.NotificationType.Error);
return;
}
string EFTSettingsFolder = Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Escape from Tarkov");
string backupFolderPath = Path.Combine(EFTSettingsFolder, "Backups");
if (Directory.Exists(EFTSettingsFolder))
try
{
FileInfo local_ini = new FileInfo(Path.Combine(EFTSettingsFolder, "local.ini"));
FileInfo shared_ini = new FileInfo(Path.Combine(EFTSettingsFolder, "shared.ini"));
Directory.CreateDirectory(SPTSettingsFolder);
string Message = string.Format(LocalizationProvider.Instance.clear_game_settings_warning, backupFolderPath);
ConfirmationDialogViewModel confirmDelete = new ConfirmationDialogViewModel(null, Message, LocalizationProvider.Instance.clear_game_settings, LocalizationProvider.Instance.cancel);
var confirmation = await ShowDialog(confirmDelete);
if (confirmation is bool proceed && !proceed)
foreach (string dirPath in Directory.GetDirectories(EFTSettingsFolder, "*", SearchOption.AllDirectories))
{
return;
Directory.CreateDirectory(dirPath.Replace(EFTSettingsFolder, SPTSettingsFolder));
}
bool localSucceeded = BackupAndRemove(backupFolderPath, local_ini);
bool sharedSucceeded = BackupAndRemove(backupFolderPath, shared_ini);
//if one fails, I'm considering it bad. Send failed notification.
if (!localSucceeded || !sharedSucceeded)
//Copy all the files & Replaces any files with the same name
foreach (string newPath in Directory.GetFiles(EFTSettingsFolder, "*.*", SearchOption.AllDirectories))
{
SendNotification("", LocalizationProvider.Instance.clear_game_settings_failed, Avalonia.Controls.Notifications.NotificationType.Error);
return;
File.Copy(newPath, newPath.Replace(EFTSettingsFolder, SPTSettingsFolder), true);
}
}
catch (Exception ex)
{
LogManager.Instance.Exception(ex);
SendNotification("", LocalizationProvider.Instance.reset_game_settings_failed, Avalonia.Controls.Notifications.NotificationType.Error);
return;
}
SendNotification("", LocalizationProvider.Instance.reset_game_settings_succeeded, Avalonia.Controls.Notifications.NotificationType.Success);
}
public async Task ClearGameSettingsCommand()
{
var SPTSettingsDir = new DirectoryInfo(Path.Join(LauncherSettingsProvider.Instance.GamePath, "user", "sptsettings"));
try
{
SPTSettingsDir.Delete(true);
Directory.CreateDirectory(SPTSettingsDir.FullName);
}
catch(Exception ex)
{
LogManager.Instance.Exception(ex);
SendNotification("", LocalizationProvider.Instance.clear_game_settings_failed, Avalonia.Controls.Notifications.NotificationType.Error);
return;
}
SendNotification("", LocalizationProvider.Instance.clear_game_settings_succeeded, Avalonia.Controls.Notifications.NotificationType.Success);
}

View File

@ -8,33 +8,39 @@
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Aki.Launcher.Views.SettingsView">
<Grid RowDefinitions="10,AUTO,AUTO,AUTO,*,10" ColumnDefinitions="10,2*,2*,10">
<Grid RowDefinitions="10,AUTO,AUTO,AUTO,*,10" ColumnDefinitions="10,2*,2*,AUTO,10">
<!-- Backdrop -->
<Rectangle Fill="{StaticResource AKI_Background_Dark}"
Grid.RowSpan="6" Grid.ColumnSpan="4"
Grid.RowSpan="6" Grid.ColumnSpan="5"
Opacity=".7"
/>
<StackPanel Spacing="10" Grid.Row="1" Grid.Column="1" Orientation="Horizontal">
<WrapPanel Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" Orientation="Horizontal">
<Button Content="{Binding Source={x:Static helpers:LocalizationProvider.Instance}, Path=remove_registry_keys}"
Command="{Binding RemoveRegistryKeysCommand}"
Classes="borderedlink"
Margin="0 0 10 5"
/>
<Button Content="{Binding Source={x:Static helpers:LocalizationProvider.Instance}, Path=clear_game_settings}"
Command="{Binding ClearGameSettingsCommand}"
Classes="borderedlink"
Margin="0 0 10 5"
/>
<Button Content="{Binding Source={x:Static helpers:LocalizationProvider.Instance}, Path=clean_temp_files}"
Command="{Binding CleanTempFilesCommand}"
Classes="borderedlink"
Margin="0 0 10 5"
/>
</StackPanel>
<Button Content="{Binding Source={x:Static helpers:LocalizationProvider.Instance}, Path=reset_game_settings}"
Command="{Binding ResetGameSettingsCommand}"
Classes="borderedlink"
Margin="0 0 10 5"
/>
</WrapPanel>
<!-- Go Back -->
<Button Content="&#x279C;" FontSize="25"
Grid.Row="1" Grid.ColumnSpan="3"
HorizontalAlignment="Right"
VerticalAlignment="Top"
Grid.Row="1" Grid.Column="3"
Command="{Binding GoBackCommand}"
Classes="link"
/>
@ -64,9 +70,9 @@
/>
</StackPanel>
<StackPanel Orientation="Horizontal" Spacing="3" Grid.Row="3" Grid.Column="2" Margin="0 20 0 0">
<WrapPanel Orientation="Horizontal" Grid.Row="3" Grid.Column="2" Grid.ColumnSpan="2" Margin="0 30 0 0">
<!-- Select Folder -->
<Button x:Name="sfb" Command="{Binding SelectGameFolderCommand}">
<Button x:Name="sfb" Command="{Binding SelectGameFolderCommand}" Margin="0 0 10 5">
<StackPanel Orientation="Horizontal" Spacing="5">
<Path Data="{StaticResource FolderWithPlus}" Fill="{Binding ElementName=sfb, Path=Foreground}"
/>
@ -75,7 +81,7 @@
</Button>
<!-- Open Folder -->
<Button x:Name="ofb" Command="{Binding OpenGameFolderCommand}">
<Button x:Name="ofb" Command="{Binding OpenGameFolderCommand}" Margin="0 0 10 5">
<StackPanel Orientation="Horizontal" Spacing="5">
<!-- This geometry data isn't centered and I'm far too lazy to fix it, so I'm just adding a margin (waffle.lazy) -->
<Path Data="{StaticResource OpenFolder}" Fill="{Binding ElementName=ofb, Path=Foreground}"
@ -84,7 +90,7 @@
<Label Content="{Binding Source={x:Static helpers:LocalizationProvider.Instance}, Path=open_folder}"/>
</StackPanel>
</Button>
</StackPanel>
</WrapPanel>
<!-- Server URL -->
<StackPanel Grid.Row="4" Grid.Column="1">