diff --git a/FModel/App.xaml.cs b/FModel/App.xaml.cs index c66b1fc3..8dd208f5 100644 --- a/FModel/App.xaml.cs +++ b/FModel/App.xaml.cs @@ -43,14 +43,40 @@ namespace FModel UserSettings.Default = new UserSettings(); } + var createMe = false; if (!Directory.Exists(UserSettings.Default.OutputDirectory)) + { UserSettings.Default.OutputDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Output"); + } + if (!Directory.Exists(UserSettings.Default.RawDataDirectory)) + { + createMe = true; + UserSettings.Default.RawDataDirectory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports"); + } + if (!Directory.Exists(UserSettings.Default.PropertiesDirectory)) + { + createMe = true; + UserSettings.Default.PropertiesDirectory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports"); + } + if (!Directory.Exists(UserSettings.Default.TextureDirectory)) + { + createMe = true; + UserSettings.Default.TextureDirectory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports"); + } + if (!Directory.Exists(UserSettings.Default.AudioDirectory)) + { + createMe = true; + UserSettings.Default.AudioDirectory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports"); + } if (!Directory.Exists(UserSettings.Default.ModelDirectory)) + { + createMe = true; UserSettings.Default.ModelDirectory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports"); + } Directory.CreateDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "FModel")); Directory.CreateDirectory(Path.Combine(UserSettings.Default.OutputDirectory, "Backups")); - Directory.CreateDirectory(Path.Combine(UserSettings.Default.OutputDirectory, "Exports")); + if (createMe) Directory.CreateDirectory(Path.Combine(UserSettings.Default.OutputDirectory, "Exports")); Directory.CreateDirectory(Path.Combine(UserSettings.Default.OutputDirectory, "Logs")); Directory.CreateDirectory(Path.Combine(UserSettings.Default.OutputDirectory, ".data")); diff --git a/FModel/Settings/UserSettings.cs b/FModel/Settings/UserSettings.cs index 698f2568..28041f15 100644 --- a/FModel/Settings/UserSettings.cs +++ b/FModel/Settings/UserSettings.cs @@ -52,6 +52,34 @@ namespace FModel.Settings set => SetProperty(ref _outputDirectory, value); } + private string _rawDataDirectory; + public string RawDataDirectory + { + get => _rawDataDirectory; + set => SetProperty(ref _rawDataDirectory, value); + } + + private string _propertiesDirectory; + public string PropertiesDirectory + { + get => _propertiesDirectory; + set => SetProperty(ref _propertiesDirectory, value); + } + + private string _textureDirectory; + public string TextureDirectory + { + get => _textureDirectory; + set => SetProperty(ref _textureDirectory, value); + } + + private string _audioDirectory; + public string AudioDirectory + { + get => _audioDirectory; + set => SetProperty(ref _audioDirectory, value); + } + private string _modelDirectory; public string ModelDirectory { diff --git a/FModel/ViewModels/AudioPlayerViewModel.cs b/FModel/ViewModels/AudioPlayerViewModel.cs index 7b7d8b71..5d096225 100644 --- a/FModel/ViewModels/AudioPlayerViewModel.cs +++ b/FModel/ViewModels/AudioPlayerViewModel.cs @@ -307,7 +307,7 @@ namespace FModel.ViewModels { Title = "Save Audio", FileName = fileToSave.FileName, - InitialDirectory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports") + InitialDirectory = UserSettings.Default.AudioDirectory }; if (!(bool) saveFileDialog.ShowDialog()) return; path = saveFileDialog.FileName; diff --git a/FModel/ViewModels/CUE4ParseViewModel.cs b/FModel/ViewModels/CUE4ParseViewModel.cs index 82b581f3..2fb70140 100644 --- a/FModel/ViewModels/CUE4ParseViewModel.cs +++ b/FModel/ViewModels/CUE4ParseViewModel.cs @@ -729,9 +729,8 @@ namespace FModel.ViewModels private void SaveAndPlaySound(string fullPath, string ext, byte[] data) { - var userDir = Path.Combine(UserSettings.Default.OutputDirectory, "Exports"); if (fullPath.StartsWith("/")) fullPath = fullPath[1..]; - var savedAudioPath = Path.Combine(userDir, + var savedAudioPath = Path.Combine(UserSettings.Default.AudioDirectory, UserSettings.Default.KeepDirectoryStructure ? fullPath : fullPath.SubstringAfterLast('/')).Replace('\\', '/') + $".{ext.ToLower()}"; if (!UserSettings.Default.IsAutoOpenSounds) @@ -776,13 +775,11 @@ namespace FModel.ViewModels public void ExportData(string fullPath) { var fileName = fullPath.SubstringAfterLast('/'); - var directory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports"); - if (Provider.TrySavePackage(fullPath, out var assets)) { foreach (var kvp in assets) { - var path = Path.Combine(directory, UserSettings.Default.KeepDirectoryStructure ? kvp.Key : kvp.Key.SubstringAfterLast('/')).Replace('\\', '/'); + var path = Path.Combine(UserSettings.Default.RawDataDirectory, UserSettings.Default.KeepDirectoryStructure ? kvp.Key : kvp.Key.SubstringAfterLast('/')).Replace('\\', '/'); Directory.CreateDirectory(path.SubstringBeforeLast('/')); File.WriteAllBytes(path, kvp.Value); } diff --git a/FModel/ViewModels/SettingsViewModel.cs b/FModel/ViewModels/SettingsViewModel.cs index 8fe1a5d9..984b0b2c 100644 --- a/FModel/ViewModels/SettingsViewModel.cs +++ b/FModel/ViewModels/SettingsViewModel.cs @@ -133,6 +133,10 @@ namespace FModel.ViewModels private readonly FGame _game; private Game _gamePreset; private string _outputSnapshot; + private string _rawDataSnapshot; + private string _propertiesSnapshot; + private string _textureSnapshot; + private string _audioSnapshot; private string _modelSnapshot; private string _gameSnapshot; private EUpdateMode _updateModeSnapshot; @@ -155,6 +159,10 @@ namespace FModel.ViewModels public void Initialize() { _outputSnapshot = UserSettings.Default.OutputDirectory; + _rawDataSnapshot = UserSettings.Default.RawDataDirectory; + _propertiesSnapshot = UserSettings.Default.PropertiesDirectory; + _textureSnapshot = UserSettings.Default.TextureDirectory; + _audioSnapshot = UserSettings.Default.AudioDirectory; _modelSnapshot = UserSettings.Default.ModelDirectory; _gameSnapshot = UserSettings.Default.GameDirectory; _updateModeSnapshot = UserSettings.Default.UpdateMode; @@ -252,6 +260,10 @@ namespace FModel.ViewModels if (_ueGameSnapshot != SelectedUeGame || // combobox _customVersionsSnapshot != SelectedCustomVersions || _optionsSnapshot != SelectedOptions || _outputSnapshot != UserSettings.Default.OutputDirectory || // textbox + _rawDataSnapshot != UserSettings.Default.RawDataDirectory || // textbox + _propertiesSnapshot != UserSettings.Default.PropertiesDirectory || // textbox + _textureSnapshot != UserSettings.Default.TextureDirectory || // textbox + _audioSnapshot != UserSettings.Default.AudioDirectory || // textbox _modelSnapshot != UserSettings.Default.ModelDirectory || // textbox _gameSnapshot != UserSettings.Default.GameDirectory) // textbox ret = SettingsOut.Restart; diff --git a/FModel/ViewModels/TabControlViewModel.cs b/FModel/ViewModels/TabControlViewModel.cs index 1f0f2ab8..26570a3a 100644 --- a/FModel/ViewModels/TabControlViewModel.cs +++ b/FModel/ViewModels/TabControlViewModel.cs @@ -266,7 +266,7 @@ namespace FModel.ViewModels { if (image == null) return; var fileName = $"{image.ExportName}.png"; - var directory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports", + var directory = Path.Combine(UserSettings.Default.TextureDirectory, UserSettings.Default.KeepDirectoryStructure ? Directory : "", fileName!).Replace('\\', '/'); if (!autoSave) @@ -275,7 +275,7 @@ namespace FModel.ViewModels { Title = "Save Texture", FileName = fileName, - InitialDirectory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports"), + InitialDirectory = UserSettings.Default.TextureDirectory, Filter = "PNG Files (*.png)|*.png|All Files (*.*)|*.*" }; var result = saveFileDialog.ShowDialog(); @@ -298,7 +298,7 @@ namespace FModel.ViewModels public void SaveProperty(bool autoSave) { var fileName = Path.ChangeExtension(Header, ".json"); - var directory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports", + var directory = Path.Combine(UserSettings.Default.PropertiesDirectory, UserSettings.Default.KeepDirectoryStructure ? Directory : "", fileName).Replace('\\', '/'); if (!autoSave) @@ -307,7 +307,7 @@ namespace FModel.ViewModels { Title = "Save Property", FileName = fileName, - InitialDirectory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports"), + InitialDirectory = UserSettings.Default.PropertiesDirectory, Filter = "JSON Files (*.json)|*.json|INI Files (*.ini)|*.ini|XML Files (*.xml)|*.xml|All Files (*.*)|*.*" }; var result = saveFileDialog.ShowDialog(); diff --git a/FModel/Views/AudioPlayer.xaml.cs b/FModel/Views/AudioPlayer.xaml.cs index 290c0b07..c510408d 100644 --- a/FModel/Views/AudioPlayer.xaml.cs +++ b/FModel/Views/AudioPlayer.xaml.cs @@ -59,7 +59,7 @@ namespace FModel.Views var openFileDialog = new OpenFileDialog { Title = "Select an audio file", - InitialDirectory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports"), + InitialDirectory = UserSettings.Default.AudioDirectory, Filter = "OGG Files (*.ogg)|*.ogg|WAV Files (*.wav)|*.wav|WEM Files (*.wem)|*.wem|ADPCM Files (*.adpcm)|*.adpcm|All Files (*.*)|*.*", Multiselect = true }; diff --git a/FModel/Views/MapViewer.xaml.cs b/FModel/Views/MapViewer.xaml.cs index de81a677..d679f099 100644 --- a/FModel/Views/MapViewer.xaml.cs +++ b/FModel/Views/MapViewer.xaml.cs @@ -30,7 +30,7 @@ namespace FModel.Views private void OnClick(object sender, RoutedEventArgs e) { if (_applicationView.MapViewer.MapImage == null) return; - var path = Path.Combine(UserSettings.Default.OutputDirectory, "Exports", "MiniMap.png"); + var path = Path.Combine(UserSettings.Default.TextureDirectory, "MiniMap.png"); var saveFileDialog = new SaveFileDialog { diff --git a/FModel/Views/SettingsView.xaml b/FModel/Views/SettingsView.xaml index c9ef4b2d..2b33ae47 100644 --- a/FModel/Views/SettingsView.xaml +++ b/FModel/Views/SettingsView.xaml @@ -39,6 +39,7 @@ + @@ -46,18 +47,53 @@ + + - - + +