Skip to content

Commit 2afd8de

Browse files
committed
order objects in the treeview alphabetically
1 parent 56aeca8 commit 2afd8de

File tree

4 files changed

+30
-6
lines changed

4 files changed

+30
-6
lines changed

AvaGui/Models/ObjectEditorModel.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
using OpenLoco.ObjectEditor;
1818
using System.Collections.ObjectModel;
1919
using ReactiveUI;
20+
using System.Reflection;
2021

2122
namespace AvaGui.Models
2223
{
@@ -147,9 +148,21 @@ public bool TryLoadObject(string filename, out UiLocoFile? uiLocoFile)
147148
return false;
148149
}
149150

150-
(var fileInfo, var locoObject) = SawyerStreamReader.LoadFullObjectFromFile(filename, logger: Logger);
151+
DatFileInfo? fileInfo;
152+
ILocoObject? locoObject;
151153

152-
if (locoObject == null)
154+
try
155+
{
156+
(fileInfo, locoObject) = SawyerStreamReader.LoadFullObjectFromFile(filename, logger: Logger);
157+
}
158+
catch (Exception ex)
159+
{
160+
Logger?.Error($"Unable to load {filename}", ex);
161+
uiLocoFile = null;
162+
return false;
163+
}
164+
165+
if (locoObject == null || fileInfo == null)
153166
{
154167
Logger?.Error($"Unable to load {filename}. FileInfo={fileInfo}");
155168
uiLocoFile = null;

AvaGui/ViewModels/FolderTreeViewModel.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,10 @@ IEnumerable<FileSystemItemBase> LoadObjDirectoryCore(string directory, bool useE
104104
.GroupBy(o => o.Value.VehicleType)
105105
.OrderBy(vg => vg.Key.ToString()))
106106
{
107-
var vehicleSubNodes = new ObservableCollection<FileSystemItemBase>(vg.Select(o => new FileSystemItem(o.Key, o.Value.Name.Trim(), o.Value.SourceGame)));
107+
var vehicleSubNodes = new ObservableCollection<FileSystemItemBase>(
108+
vg
109+
.Select(o => new FileSystemItem(o.Key, o.Value.Name.Trim(), o.Value.SourceGame))
110+
.OrderBy(o => o.Name));
108111

109112
if (vg.Key == null)
110113
{
@@ -122,7 +125,9 @@ IEnumerable<FileSystemItemBase> LoadObjDirectoryCore(string directory, bool useE
122125
else
123126
{
124127
subNodes = new ObservableCollection<FileSystemItemBase>(
125-
objGroup.Select(o => new FileSystemItem(o.Key, o.Value.Name.Trim(), o.Value.SourceGame)));
128+
objGroup
129+
.Select(o => new FileSystemItem(o.Key, o.Value.Name.Trim(), o.Value.SourceGame))
130+
.OrderBy(o => o.Name));
126131
}
127132

128133
groups.Add(new FileSystemItemGroup(

AvaGui/ViewModels/MainWindowViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ public async Task SelectNewFolder()
186186
}
187187

188188
var dirPath = dir.Path.LocalPath;
189-
if (Directory.Exists(dirPath) && Directory.EnumerateFiles(dirPath).Any() && !Model.Settings.ObjDataDirectories.Contains(dirPath))
189+
if (Directory.Exists(dirPath) && !Model.Settings.ObjDataDirectories.Contains(dirPath))
190190
{
191191
await Model.LoadObjDirectoryAsync(dirPath, null, false);
192192
var menuItem = new MenuItemModel(

Core/DatFileParsing/SawyerStreamReader.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public static byte[] LoadBytesFromFile(string filename, ILogger? logger = null)
6464
public static (S5Header s5Header, ObjectHeader objHeader, byte[] decodedData) LoadAndDecodeFromFile(string filename, ILogger? logger = null)
6565
=> LoadAndDecodeFromStream(LoadBytesFromFile(filename), logger);
6666

67-
public static (S5Header s5Header, ObjectHeader objHeader, byte[] decodedData) LoadAndDecodeFromStream(ReadOnlySpan<byte> fullData, ILogger? logger = null)
67+
static (S5Header s5Header, ObjectHeader objHeader, byte[] decodedData) LoadAndDecodeFromStream(ReadOnlySpan<byte> fullData, ILogger? logger = null)
6868
{
6969
var s5Header = S5Header.Read(fullData[0..S5Header.StructLength]);
7070
var remainingData = fullData[S5Header.StructLength..];
@@ -103,6 +103,12 @@ public static (DatFileInfo DatFileInfo, ILocoObject? LocoObject) LoadFullObjectF
103103
{
104104
logger?.Info($"Full-loading \"{filename}\" with loadExtra={loadExtra}");
105105

106+
if (data.Length < (S5Header.StructLength + ObjectHeader.StructLength))
107+
{
108+
logger?.Error($"{filename} didn't have enough data");
109+
return new(new DatFileInfo(S5Header.NullHeader, ObjectHeader.NullHeader), null);
110+
}
111+
106112
var (s5Header, objectHeader, decodedData) = LoadAndDecodeFromStream(data, logger);
107113

108114
if (decodedData.Length == 0)

0 commit comments

Comments
 (0)