@@ -36,6 +36,9 @@ type SaveListEntry = object
36
36
uid: Uid
37
37
gid: Gid
38
38
39
+ type DeleteEntry = object
40
+ path: string
41
+ error: string
39
42
40
43
template respondWithOk (client: untyped ) =
41
44
await client.send ($$ ServerResponse (ResponseType : srOk) & " \r\L " )
@@ -300,12 +303,42 @@ proc listSaveFiles(cmd: ClientRequest, client: AsyncSocket, mountId: string) {.a
300
303
# Should not do a srOk response since that's redundant
301
304
exitnow (- 1 )
302
305
306
+ proc cleanup (cmd: ClientRequest , client: AsyncSocket ) {.async .} =
307
+ # Delete the save before deleting the folder
308
+ let saveName = cmd.clean.saveName
309
+ var failed: seq [DeleteEntry ] = @ []
310
+ if saveName.len > 0 :
311
+ let saveImagePath = joinPath (SAVE_DIRECTORY , saveName)
312
+ try :
313
+ removeFile (saveImagePath)
314
+ except OSError as e:
315
+ failed.add DeleteEntry (path: saveImagePath, error: e.msg)
316
+ discard
317
+
318
+ let saveKeyPath = joinPath (SAVE_DIRECTORY , saveName & " .bin" )
319
+ try :
320
+ removeFile (saveKeyPath)
321
+ except OSError as e:
322
+ failed.add DeleteEntry (path: saveKeyPath, error: e.msg)
323
+ discard
324
+
325
+ let folder = cmd.clean.folder
326
+ if folder.len > 0 :
327
+ try :
328
+ removeDir (folder)
329
+ except OSError as e:
330
+ failed.add DeleteEntry (path: folder, error: e.msg)
331
+ discard
332
+ respondWithJson (client, % failed)
333
+
303
334
type RequestHandler = proc (cmd: ClientRequest , client: AsyncSocket , mountId: string ) {.async .}
335
+
304
336
var cmds : array [ClientRequestType , RequestHandler ]
305
337
cmds[rtDumpSave] = dumpSave
306
338
cmds[rtUpdateSave] = updateSave
307
339
cmds[rtListSaveFiles] = listSaveFiles
308
340
cmds[rtResignSave] = resignSave
341
+
309
342
var slot: uint
310
343
var slotTotal: uint32
311
344
@@ -346,6 +379,8 @@ proc handleCmd*(client: AsyncSocket, cmd: ClientRequest) {.async.} =
346
379
respondWithKeySet (client, getMaxKeySet ())
347
380
elif cmd.RequestType == rtInvalid:
348
381
respondWithError (client, " E:INVALID_CMD" )
382
+ elif cmd.RequestType == rtClean:
383
+ await cleanup (cmd, client)
349
384
else :
350
385
await handleForkCmds (client, cmd)
351
386
0 commit comments