Skip to content

Commit 94e1067

Browse files
committed
use separate cache folder for online objects so keep user downloads folder clean
1 parent 782a535 commit 94e1067

6 files changed

Lines changed: 36 additions & 30 deletions

File tree

Gui/EditorSettings.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public HashSet<string> ObjDataDirectories
4242

4343
public string ObjectIndicesFolder { get; set; } = string.Empty;
4444
public string DownloadFolder { get; set; } = string.Empty;
45+
public string CacheFolder { get; set; } = string.Empty;
4546

4647
public string LocomotionSteamObjDataFolder { get; set; } = string.Empty;
4748
public string LocomotionGoGObjDataFolder { get; set; } = string.Empty;
@@ -120,19 +121,25 @@ public bool Validate(ILogger logger)
120121

121122
if (!Directory.Exists(ObjDataDirectory))
122123
{
123-
logger.Warning($"Invalid settings file: Directory \"{ObjDataDirectory}\" does not exist");
124+
logger.Warning($"Invalid settings file: ObjData folder \"{ObjDataDirectory}\" does not exist");
124125
return false;
125126
}
126127

127-
if (!Directory.Exists(DownloadFolder))
128+
if (!string.IsNullOrEmpty(CacheFolder) && !Directory.Exists(CacheFolder))
128129
{
129-
logger.Warning($"Invalid settings file: Directory \"{DownloadFolder}\" does not exist");
130+
logger.Warning($"Invalid settings file: Cache folder \"{CacheFolder}\" does not exist");
130131
return false;
131132
}
132133

133-
if (!Directory.Exists(ObjectIndicesFolder))
134+
if (!string.IsNullOrEmpty(DownloadFolder) && !Directory.Exists(DownloadFolder))
134135
{
135-
logger.Warning($"Invalid settings file: Directory \"{ObjectIndicesFolder}\" does not exist");
136+
logger.Warning($"Invalid settings file: Download folder \"{DownloadFolder}\" does not exist");
137+
return false;
138+
}
139+
140+
if (!string.IsNullOrEmpty(ObjectIndicesFolder) && !Directory.Exists(ObjectIndicesFolder))
141+
{
142+
logger.Warning($"Invalid settings file: Object index folder \"{ObjectIndicesFolder}\" does not exist");
136143
return false;
137144
}
138145

Gui/Models/ObjectEditorModel.cs

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,9 @@ public ObjectEditorModel()
7373
// settings must be loaded or else the rest of the app cannot start
7474
ArgumentNullException.ThrowIfNull(Settings);
7575

76-
InitialiseObjectIndiciesDirectory();
77-
InitialiseDownloadDirectory();
76+
Settings.ObjectIndicesFolder = InitialiseDirectory(Settings.ObjectIndicesFolder, "objectIndices");
77+
Settings.CacheFolder = InitialiseDirectory(Settings.CacheFolder, "cache");
78+
Settings.DownloadFolder = InitialiseDirectory(Settings.DownloadFolder, "downloads");
7879

7980
ObjectServiceClient = new(Settings, Logger);
8081
}
@@ -134,32 +135,20 @@ void LoadSettings()
134135
}
135136
}
136137

137-
void InitialiseObjectIndiciesDirectory()
138+
string InitialiseDirectory(string folder, string defaultName)
138139
{
139-
if (string.IsNullOrEmpty(Settings.ObjectIndicesFolder))
140+
if (string.IsNullOrEmpty(folder))
140141
{
141-
Settings.ObjectIndicesFolder = Path.Combine(ProgramDataPath, "objectIndices");
142+
folder = Path.Combine(ProgramDataPath, defaultName);
142143
}
143144

144-
if (!Directory.Exists(Settings.ObjectIndicesFolder))
145+
if (!Directory.Exists(folder))
145146
{
146-
Logger.Info($"Object indices folder doesn't exist; creating now at \"{Settings.ObjectIndicesFolder}\"");
147-
_ = Directory.CreateDirectory(Settings.ObjectIndicesFolder);
147+
Logger.Info($"\"{defaultName}\" folder doesn't exist; creating now at \"{folder}\"");
148+
_ = Directory.CreateDirectory(folder);
148149
}
149-
}
150150

151-
void InitialiseDownloadDirectory()
152-
{
153-
if (string.IsNullOrEmpty(Settings.DownloadFolder))
154-
{
155-
Settings.DownloadFolder = Path.Combine(ProgramDataPath, "downloads");
156-
}
157-
158-
if (!Directory.Exists(Settings.DownloadFolder))
159-
{
160-
Logger.Info($"Download folder doesn't exist; creating now at \"{Settings.DownloadFolder}\"");
161-
_ = Directory.CreateDirectory(Settings.DownloadFolder);
162-
}
151+
return folder;
163152
}
164153

165154
public bool TryLoadObject(FileSystemItem filesystemItem, out LocoUIObjectModel? uiLocoFile)
@@ -260,7 +249,7 @@ bool TryLoadOnlineFile(FileSystemItem filesystemItem, out LocoUIObjectModel? loc
260249

261250
var filename = Path.GetInvalidFileNameChars().Aggregate(datObject.DatName, (current, c) => current.Replace(c, '_'));
262251
filename = $"{filename}-{datObject.ObjectId}.dat";
263-
var pathname = Path.Combine(Settings.DownloadFolder, filename);
252+
var pathname = Path.Combine(Settings.CacheFolder, filename);
264253
if (!File.Exists(pathname))
265254
{
266255
File.WriteAllBytes(pathname, datFile);

Gui/PlatformSpecific.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ static void FolderOpenInDesktopCore(string directory, string? filename = null)
2929
{
3030
if (!Directory.Exists(directory))
3131
{
32-
throw new ArgumentException("The specified folder does not exist. Folder=\"{directory}\"", nameof(directory));
32+
throw new ArgumentException($"The specified folder does not exist. Folder=\"{directory}\"", nameof(directory));
3333
}
3434

3535
// Platform-specific command construction

Gui/ViewModels/EditorSettingsWindowViewModel.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,14 @@ public string OpenLocoObjDataFolder
7676
set => Model.OpenLocoObjDataFolder = value;
7777
}
7878

79-
[PathBrowsable(PathBrowsableType.Directory), Category(UserObjectFolderCategory), DisplayName("Downloads"), Description("The folder to store downloaded objects.")]
79+
[PathBrowsable(PathBrowsableType.Directory), Category(UserObjectFolderCategory), DisplayName("Cache"), Description("The folder to store cached downloaded objects.")]
80+
public string CacheFolder
81+
{
82+
get => Model.CacheFolder;
83+
set => Model.CacheFolder = value;
84+
}
85+
86+
[PathBrowsable(PathBrowsableType.Directory), Category(UserObjectFolderCategory), DisplayName("Downloads"), Description("The folder to store user-downloaded objects.")]
8087
public string DownloadFolder
8188
{
8289
get => Model.DownloadFolder;

Gui/ViewModels/MainWindowViewModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public class MainWindowViewModel : ViewModelBase
3636

3737
public ObservableCollection<MenuItemViewModel> ObjDataItems { get; init; } = [];
3838

39+
public ReactiveCommand<Unit, Unit> OpenCacheFolder { get; }
3940
public ReactiveCommand<Unit, Unit> OpenDownloadFolder { get; }
4041
public ReactiveCommand<Unit, Unit> OpenSettingsFolder { get; }
4142
public ReactiveCommand<Unit, Task> OpenSingleObject { get; }
@@ -118,6 +119,7 @@ public MainWindowViewModel()
118119
PopulateObjDataMenu();
119120

120121
OpenSingleObject = ReactiveCommand.Create(LoadSingleObject);
122+
OpenCacheFolder = ReactiveCommand.Create(() => PlatformSpecific.FolderOpenInDesktop(Model.Settings.CacheFolder, Model.Logger));
121123
OpenDownloadFolder = ReactiveCommand.Create(() => PlatformSpecific.FolderOpenInDesktop(Model.Settings.DownloadFolder, Model.Logger));
122124
OpenSettingsFolder = ReactiveCommand.Create(() => PlatformSpecific.FolderOpenInDesktop(ObjectEditorModel.ProgramDataPath, Model.Logger));
123125
OpenG1 = ReactiveCommand.Create(LoadG1);

Gui/Views/MainWindow.axaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,8 @@
191191
<MenuItem Header="_Settings">
192192
<MenuItem Command="{Binding EditSettingsCommand}" Header="Edit settings"/>
193193
<MenuItem Command="{Binding OpenSettingsFolder}" Header="Open settings folder"/>
194-
<MenuItem Command="{Binding OpenDownloadFolder}" Header="Open downloads folder"/>
194+
<MenuItem Command="{Binding OpenDownloadFolder}" Header="Open user downloads folder"/>
195+
<MenuItem Command="{Binding OpenCacheFolder}" Header="Open cached objects folder"/>
195196
<MenuItem Command="{Binding ShowLogsCommand}" Header="Show logs"/>
196197
</MenuItem>
197198
</Menu>

0 commit comments

Comments
 (0)