Skip to content

Commit 4111d70

Browse files
author
ac2pic
committedFeb 11, 2024
Add cleanup command
1 parent b0a211a commit 4111d70

File tree

4 files changed

+45
-128
lines changed

4 files changed

+45
-128
lines changed
 

‎src/commands.nim

+35
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ type SaveListEntry = object
3636
uid: Uid
3737
gid: Gid
3838

39+
type DeleteEntry = object
40+
path: string
41+
error: string
3942

4043
template respondWithOk(client: untyped) =
4144
await client.send($$ServerResponse(ResponseType: srOk) & "\r\L")
@@ -300,12 +303,42 @@ proc listSaveFiles(cmd: ClientRequest, client: AsyncSocket, mountId: string) {.a
300303
# Should not do a srOk response since that's redundant
301304
exitnow(-1)
302305

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+
303334
type RequestHandler = proc (cmd: ClientRequest, client: AsyncSocket, mountId: string) {.async.}
335+
304336
var cmds : array[ClientRequestType, RequestHandler]
305337
cmds[rtDumpSave] = dumpSave
306338
cmds[rtUpdateSave] = updateSave
307339
cmds[rtListSaveFiles] = listSaveFiles
308340
cmds[rtResignSave] = resignSave
341+
309342
var slot: uint
310343
var slotTotal: uint32
311344

@@ -346,6 +379,8 @@ proc handleCmd*(client: AsyncSocket, cmd: ClientRequest) {.async.} =
346379
respondWithKeySet(client, getMaxKeySet())
347380
elif cmd.RequestType == rtInvalid:
348381
respondWithError(client, "E:INVALID_CMD")
382+
elif cmd.RequestType == rtClean:
383+
await cleanup(cmd, client)
349384
else:
350385
await handleForkCmds(client, cmd)
351386

‎src/old_main.nim

-128
This file was deleted.

‎src/requests.nim

+7
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ type ClientRequestType* = enum
77
rtDumpSave,
88
rtUpdateSave,
99
rtResignSave,
10+
rtClean,
1011
rtInvalid
1112

1213

@@ -32,6 +33,10 @@ type ResignClientRequest* = object
3233
accountId*: uint64
3334
saveName*: string
3435

36+
type CleanClientRequest* = object
37+
saveName*: string
38+
folder*: string
39+
3540
type ClientRequest* = object
3641
case RequestType*: ClientRequestType
3742
of rtKeySet, rtInvalid:
@@ -46,6 +51,8 @@ type ClientRequest* = object
4651
dump*: DumpClientRequest
4752
of rtResignSave:
4853
resign*: ResignClientRequest
54+
of rtClean:
55+
clean*: CleanClientRequest
4956

5057
proc parseRequest*(data: string): ClientRequest =
5158
try:

‎test.sh

+3
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,6 @@ nc 10.0.0.5 1234 << EOF
1818
{"RequestType": "rtKeySet"}
1919
EOF
2020

21+
nc 10.0.0.5 1234 << EOF
22+
{"RequestType": "rtClean", "clean": {"saveName": "data0001", "folder": "/data/dump"}}
23+
EOF

0 commit comments

Comments
 (0)