1
+ using Microsoft . AspNetCore . Mvc ;
1
2
using Microsoft . EntityFrameworkCore ;
2
3
using Microsoft . Extensions . Options ;
3
4
using OpenLoco . Dat . Data ;
@@ -37,7 +38,7 @@ await db.Objects
37
38
x . VehicleType ) ) . ToListAsync ( ) ) ;
38
39
39
40
// eg: https://localhost:7230/objects/getdat?objectName=114&checksum=123$returnObjBytes=false
40
- public async Task < IResult > GetDat ( string objectName , uint checksum , bool ? returnObjBytes , LocoDb db )
41
+ public async Task < IResult > GetDat ( string objectName , uint checksum , bool ? returnObjBytes , LocoDb db , [ FromServices ] ILogger < Server > logger )
41
42
{
42
43
var eObj = await db . Objects
43
44
. Where ( x => x . OriginalName == objectName && x . OriginalChecksum == checksum )
@@ -47,11 +48,11 @@ public async Task<IResult> GetDat(string objectName, uint checksum, bool? return
47
48
48
49
return eObj == null || eObj . Object == null
49
50
? Results . NotFound ( )
50
- : Results . Ok ( await PrepareLocoObject ( eObj , settings . ObjectRootFolder , returnObjBytes ?? false ) ) ;
51
+ : Results . Ok ( await PrepareLocoObject ( eObj , settings . ObjectRootFolder , returnObjBytes ?? false , logger ) ) ;
51
52
}
52
53
53
54
// eg: https://localhost:7230/objects/getobject?uniqueObjectId=246263256&returnObjBytes=false
54
- public async Task < IResult > GetObject ( int uniqueObjectId , bool ? returnObjBytes , LocoDb db )
55
+ public async Task < IResult > GetObject ( int uniqueObjectId , bool ? returnObjBytes , LocoDb db , [ FromServices ] ILogger < Server > logger )
55
56
{
56
57
Console . WriteLine ( $ "Object [{ uniqueObjectId } ] requested") ;
57
58
var eObj = await db . Objects
@@ -62,7 +63,7 @@ public async Task<IResult> GetObject(int uniqueObjectId, bool? returnObjBytes, L
62
63
63
64
return eObj == null || eObj . Object == null
64
65
? Results . NotFound ( )
65
- : Results . Ok ( await PrepareLocoObject ( eObj , settings . ObjectRootFolder , returnObjBytes ?? false ) ) ;
66
+ : Results . Ok ( await PrepareLocoObject ( eObj , settings . ObjectRootFolder , returnObjBytes ?? false , logger ) ) ;
66
67
}
67
68
68
69
// eg: https://localhost:7230/objects/originaldatfile?objectName=114&checksum=123
@@ -104,11 +105,12 @@ public async Task<IResult> GetObjectFile(int uniqueObjectId, LocoDb db)
104
105
: Results . NotFound ( ) ;
105
106
}
106
107
107
- internal static async Task < DtoLocoObject > PrepareLocoObject ( ExpandedTblLocoObject eObj , string objectRootFolder , bool returnObjBytes )
108
+ internal static async Task < DtoLocoObject > PrepareLocoObject ( ExpandedTblLocoObject eObj , string objectRootFolder , bool returnObjBytes , ILogger < Server > logger )
108
109
{
109
110
var obj = eObj ! . Object ;
110
111
111
- var pathOnDisk = Path . Combine ( objectRootFolder , obj . PathOnDisk ) ;
112
+ var pathOnDisk = Path . Combine ( objectRootFolder , obj . PathOnDisk . Replace ( '\\ ' , '/' ) ) ; // handle windows paths by replacing path separator
113
+ logger . LogInformation ( "Loading file from {0}" , pathOnDisk ) ;
112
114
var bytes = returnObjBytes && ! obj . IsVanilla && File . Exists ( pathOnDisk ) ? Convert . ToBase64String ( await File . ReadAllBytesAsync ( pathOnDisk ) ) : null ;
113
115
114
116
return new DtoLocoObject (
@@ -181,17 +183,17 @@ public async Task<IResult> UploadDat(DtoUploadDat request, LocoDb db)
181
183
return Results . Accepted ( $ "Object already exists in the database. OriginalName={ s5Header . Name } OriginalChecksum={ s5Header . Checksum } UploadDate={ existingObject ! . UploadDate } ") ;
182
184
}
183
185
184
- const string SettingsPath = "Q:\\ Games\\ Locomotion\\ Server\\ CustomObjects" ;
185
186
const string UploadFolder = "UploadedObjects" ;
186
187
var uuid = Guid . NewGuid ( ) ;
187
- var saveFileName = Path . Combine ( SettingsPath , UploadFolder , $ "{ uuid } .dat") ;
188
+ var saveFileName = Path . Combine ( settings . ObjectRootFolder , UploadFolder , $ "{ uuid } .dat") ;
188
189
File . WriteAllBytes ( saveFileName , datFileBytes ) ;
189
190
190
191
Console . WriteLine ( $ "File accepted OriginalName={ s5Header . Name } OriginalChecksum={ s5Header . Checksum } PathOnDisk={ saveFileName } ") ;
191
192
192
193
var locoTbl = new TblLocoObject ( )
193
194
{
194
195
Name = $ "{ s5Header . Name } _{ s5Header . Checksum } ", // same as DB seeder name
196
+ PathOnDisk = Path . Combine ( UploadFolder , $ "{ uuid } .dat") ,
195
197
OriginalName = s5Header . Name ,
196
198
OriginalChecksum = s5Header . Checksum ,
197
199
IsVanilla = false , // not possible to upload vanilla objects
0 commit comments