Skip to content

Commit f838285

Browse files
committed
feat: Send a frontend update when an upload or delete of trace has finished and handle the frontend update of the trace object
1 parent c767af0 commit f838285

File tree

6 files changed

+90
-12
lines changed

6 files changed

+90
-12
lines changed

src/common/common_types.nim

+5
Original file line numberDiff line numberDiff line change
@@ -1349,6 +1349,11 @@ type
13491349
trace*: Trace
13501350
programName*: langstring
13511351

1352+
UploadedTraceData* = object
1353+
downloadKey*: langstring
1354+
controlId*: langstring
1355+
expireTime*: langstring
1356+
13521357
DeleteTraceArg* = object
13531358
traceId*: int
13541359
controlId*: langstring

src/ct/codetracer.nim

+11-4
Original file line numberDiff line numberDiff line change
@@ -796,11 +796,18 @@ proc uploadTrace(trace: Trace) =
796796
let jsonMessage = parseJson(output)
797797
let downloadKey = trace.program & "//" & jsonMessage["DownloadId"].getStr("") & "//" & aesKey
798798

799-
updateField(trace.id, "remoteShareDownloadId", downloadKey, false)
800-
updateField(trace.id, "remoteShareControlId", jsonMessage["ControlId"].getStr(""), false)
801-
updateField(trace.id, "remoteShareExpireTime", jsonMessage["Expires"].getInt(), false)
799+
if jsonMessage["DownloadId"].getStr("") notin @["", "Errored"]:
802800

803-
echo downloadKey
801+
updateField(trace.id, "remoteShareDownloadId", downloadKey, false)
802+
updateField(trace.id, "remoteShareControlId", jsonMessage["ControlId"].getStr(""), false)
803+
updateField(trace.id, "remoteShareExpireTime", jsonMessage["Expires"].getInt(), false)
804+
805+
echo downloadKey
806+
echo jsonMessage["ControlId"].getStr("")
807+
echo jsonMessage["Expires"].getInt()
808+
809+
else:
810+
echo downloadKey
804811

805812
removeFile(outputZip & ".enc")
806813

src/frontend/index.nim

+35
Original file line numberDiff line numberDiff line change
@@ -811,6 +811,33 @@ proc onUploadTraceFile(sender: js, response: UploadTraceArg) {.async.} =
811811
]
812812
)
813813

814+
if res.isOk:
815+
let splitData = res.v.split("\n")
816+
if splitData.len() == 4:
817+
let uploadData = UploadedTraceData(
818+
downloadKey: splitData[0],
819+
controlId: splitData[1],
820+
expireTime: splitData[2]
821+
)
822+
mainWindow.webContents.send(
823+
"CODETRACER::uploaded-trace-received",
824+
js{
825+
"argId": j(response.trace.program & ":" & $response.trace.id),
826+
"value": uploadData
827+
}
828+
)
829+
else:
830+
let uploadData = UploadedTraceData(
831+
downloadKey: splitData[0],
832+
)
833+
mainWindow.webContents.send(
834+
"CODETRACER::uploaded-trace-received",
835+
js{
836+
"argId": j(response.trace.program & ":" & $response.trace.id),
837+
"value": uploadData
838+
}
839+
)
840+
814841
proc onDownloadTraceFile(sender: js, response: jsobject(downloadKey = seq[cstring])) {.async.} =
815842
let res = await readProcessOutput(
816843
codetracerExe.cstring,
@@ -832,6 +859,14 @@ proc onDeleteOnlineTraceFile(sender: js, response: DeleteTraceArg) {.async.} =
832859
]
833860
)
834861

862+
mainWindow.webContents.send(
863+
"CODETRACER::deleted-online-trace-received",
864+
js{
865+
"argId": j($response.traceId & ":" & response.controlId),
866+
"value": res.isOk
867+
}
868+
)
869+
835870
proc onSendBugReportAndLogs(sender: js, response: BugReportArg) {.async.} =
836871
let process = await runProcess(
837872
codetracerExe.cstring,

src/frontend/renderer.nim

+6
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,12 @@ proc onContextStartHistory*(sender: js, response: jsobject(inState=bool, express
488488
proc onLoadParsedExprsReceived*(sender: js, response: jsobject(argId=cstring, value=JsAssoc[cstring, seq[FlowExpression]])) =
489489
jsAsFunction[proc(response: JsAssoc[cstring, seq[FlowExpression]]): void](data.network.futures["load-parsed-exprs"][response.argId])(response.value)
490490

491+
proc onUploadedTraceReceived*(sender: js, response: jsobject(argId=cstring, value=UploadedTraceData)) =
492+
jsAsFunction[proc(response: UploadedTraceData): void](data.network.futures["upload-trace-file"][response.argId])(response.value)
493+
494+
proc onDeletedOnlineTraceReceived*(sender: js, response: jsobject(argId=cstring, value=bool)) =
495+
jsAsFunction[proc(response: bool): void](data.network.futures["delete-online-trace-file"][response.argId])(response.value)
496+
491497
# TODO: make some kind of dsl?
492498
# locals
493499
proc onLoadLocalsReceived*(sender: js, response: jsobject(argId=cstring, value=JsAssoc[cstring, Value])) =

src/frontend/ui/welcome_screen.nim

+30-8
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,41 @@ import
55

66
const PROGRAM_NAME_LIMIT = 45
77

8-
proc uploadTrace(self: WelcomeScreenComponent, trace: Trace) =
9-
self.data.ipc.send "CODETRACER::upload-trace-file",
8+
proc uploadTrace(self: WelcomeScreenComponent, trace: Trace) {.async.} =
9+
var uploadedData = await self.data.asyncSend(
10+
"upload-trace-file",
1011
UploadTraceArg(
1112
trace: trace,
1213
programName: trace.program
13-
)
14+
),
15+
&"{trace.program}:{trace.id}", UploadedTraceData
16+
)
17+
18+
if uploadedData.downloadKey != "Errored":
19+
trace.downloadKey = uploadedData.downloadKey
20+
trace.controlId = uploadedData.controlId
21+
trace.onlineExpireTime = ($uploadedData.expireTime).parseInt()
22+
else:
23+
trace.downloadKey = uploadedData.downloadKey
24+
25+
self.data.redraw()
1426

15-
proc deleteUploadedTrace(self: WelcomeScreenComponent, trace: Trace) =
16-
self.data.ipc.send "CODETRACER::delete-online-trace-file",
27+
proc deleteUploadedTrace(self: WelcomeScreenComponent, trace: Trace) {.async.} =
28+
var deleted = await self.data.asyncSend(
29+
"delete-online-trace-file",
1730
DeleteTraceArg(
1831
traceId: trace.id,
1932
controlId: trace.controlId
20-
)
33+
),
34+
&"{trace.id}:{trace.controlId}", bool
35+
)
36+
37+
if deleted:
38+
trace.controlId = ""
39+
trace.downloadKey = ""
40+
trace.onlineExpireTime = -1
41+
42+
self.data.redraw()
2143

2244
proc recentProjectView(self: WelcomeScreenComponent, trace: Trace): VNode =
2345
buildHtml(
@@ -48,15 +70,15 @@ proc recentProjectView(self: WelcomeScreenComponent, trace: Trace): VNode =
4870
span(
4971
onclick = proc(ev: Event, tg: VNode) =
5072
ev.stopPropagation()
51-
self.uploadTrace(trace)
73+
discard self.uploadTrace(trace)
5274
):
5375
text "upload"
5476
if trace.controlId != "":
5577
tdiv(class = "recent-trace-buttons", id = "delete-button"):
5678
span(
5779
onclick = proc(ev: Event, tg: VNode) =
5880
ev.stopPropagation()
59-
self.deleteUploadedTrace(trace)
81+
discard self.deleteUploadedTrace(trace)
6082
):
6183
text "delete"
6284
# tdiv(class = "recent-trace-info"):

src/frontend/ui_js.nim

+3
Original file line numberDiff line numberDiff line change
@@ -1090,6 +1090,9 @@ proc configureIPC(data: Data) =
10901090

10911091
"follow-history"
10921092

1093+
"uploaded-trace-received"
1094+
"deleted-online-trace-received"
1095+
10931096
duration("configureIPCRun")
10941097

10951098
proc zoomInEditors*(data: Data) =

0 commit comments

Comments
 (0)