6
6
persistent
7
7
@after-enter =" submitJob"
8
8
>
9
- <v-card
9
+ <v-card
10
10
max-width =" 400"
11
11
title =" Compiling..."
12
12
>
15
15
<div class =" d-flex justify-center" >
16
16
<v-progress-circular :size =" 64" :width =" 6" class =" ma-6" indeterminate />
17
17
</div >
18
- <!-- <p v-if=jobID class="text-md-center">JobID: {{ jobID }}</p> -->
19
18
</template >
19
+
20
20
<template #actions >
21
21
<v-btn class =" ms-auto" text =" Abort" @click =" abort" />
22
+ <a class =" d-none" ref =" download" :download =" firmwareName" :href =" firmwareURL" />
22
23
</template >
23
24
</v-card >
24
25
</v-dialog >
25
26
</template >
26
27
27
28
<script lang="ts" setup>
28
- import { ref } from ' vue'
29
+ import { ref , computed , useTemplateRef } from ' vue'
29
30
import { useFetch , useIntervalFn } from ' @vueuse/core'
30
31
import { useKeymapState } from ' @/composables/useKeymapState'
31
- import { saveAs } from ' file-saver' ;
32
32
33
- const { keymap } = useKeymapState ()
33
+ const { keymap } = useKeymapState ();
34
34
35
35
const dialog = ref (false );
36
- const jobID = ref (' ' )
36
+ const downloadBtn = useTemplateRef (' download' );
37
+
38
+ const jobID = ref (' ' );
39
+ const firmwareName = ref (' ' );
40
+
41
+ const firmwareURL = computed (() => {
42
+ return ` https://api.qmk.fm/v1/compile/${jobID .value }/download ` ;
43
+ })
37
44
38
45
const { pause, resume } = useIntervalFn (async () => {
39
- const { data } = await useFetch (` https://api.qmk.fm/v1/compile/${jobID .value } ` ).get ().json ()
46
+ const { data } = await useFetch (` https://api.qmk.fm/v1/compile/${jobID .value } ` ).get ().json ();
40
47
41
48
if (data .value .status === ' finished' ) {
42
- abort () ;
49
+ firmwareName . value = data . value . result . firmware_filename ;
43
50
44
- saveAs (` https://api.qmk.fm/v1/compile/${jobID .value }/download ` , data .value .result .firmware_filename );
51
+ setTimeout (() => {
52
+ download ();
53
+ });
45
54
}
46
55
}, 2500 , {immediate: false })
47
56
48
57
const submitJob = async () => {
49
- const { data } = await useFetch (' https://api.qmk.fm/v1/compile' ).post (keymap .value ).json ()
58
+ const { data } = await useFetch (' https://api.qmk.fm/v1/compile' ).post (keymap .value ).json ();
50
59
51
60
if (! data .value .enqueued ) {
52
- console .log (" error?" )
61
+ console .log (" error?" );
53
62
return ;
54
63
}
55
64
@@ -62,4 +71,10 @@ const abort = () => {
62
71
dialog .value = false ;
63
72
}
64
73
74
+ const download = () => {
75
+ abort ();
76
+
77
+ downloadBtn .value ?.click ();
78
+ }
79
+
65
80
</script >
0 commit comments