diff --git a/fe/src/components/macros/MacroOverview.vue b/fe/src/components/macros/MacroOverview.vue
index 7f3b3d8..f24fa03 100644
--- a/fe/src/components/macros/MacroOverview.vue
+++ b/fe/src/components/macros/MacroOverview.vue
@@ -4,7 +4,12 @@
-
+
{{ macro.name }}
@@ -20,17 +25,17 @@
import { IconKeyboard } from '@tabler/icons-vue'
import ButtonComp from '../base/ButtonComp.vue'
import { onMounted, reactive } from 'vue'
-import axios from 'axios'
-import { appUrl, isLocal } from '@/services/ApiService'
-import { AuthCall } from '@/services/EncryptService'
-import { GetMacroList, RunMacro } from '@/services/MacroService'
+import { GetMacroList } from '@/services/MacroService'
import LoadComp from '../base/LoadComp.vue'
+import { useMacroRecorderStore } from '@/stores/macrorecorder'
const macros = reactive({
loading: true,
list: [],
})
+const macroRecorder = useMacroRecorderStore()
+
onMounted(() => {
loadMacroList()
})
diff --git a/fe/src/components/macros/parts/RecorderFooter.vue b/fe/src/components/macros/parts/RecorderFooter.vue
index fa90274..ebc42a3 100644
--- a/fe/src/components/macros/parts/RecorderFooter.vue
+++ b/fe/src/components/macros/parts/RecorderFooter.vue
@@ -49,8 +49,10 @@ onMounted(() => {
})
})
-const toggleSave = () => {
- if (!macroRecorder.save()) errorDialog.value.toggleDialog(true)
+const toggleSave = async () => {
+ const saveResp = await macroRecorder.save()
+
+ if (!saveResp) errorDialog.value.toggleDialog(true)
else window.location.reload()
}
diff --git a/fe/src/components/macros/parts/RecorderHeader.vue b/fe/src/components/macros/parts/RecorderHeader.vue
index 2ab19c6..e8f6381 100644
--- a/fe/src/components/macros/parts/RecorderHeader.vue
+++ b/fe/src/components/macros/parts/RecorderHeader.vue
@@ -7,6 +7,7 @@
id="macro-name"
type="text"
@input.prevent="changeName($event.target.value)"
+ v-model="macroName"
placeholder="New macro"
/>
@@ -62,10 +63,12 @@ import FixedDelayMenu from '../components/FixedDelayMenu.vue'
import { useMacroRecorderStore } from '@/stores/macrorecorder'
import EditDialogs from './EditDialogs.vue'
-import { computed, onMounted, onUpdated, ref } from 'vue'
+import { computed, ref } from 'vue'
const macroRecorder = useMacroRecorderStore()
+const macroName = computed(() => macroRecorder.macroName)
+
const nameSet = ref(false)
function changeName(name) {
diff --git a/fe/src/services/MacroRecordService.js b/fe/src/services/MacroRecordService.js
index 5ab7a37..12feedd 100644
--- a/fe/src/services/MacroRecordService.js
+++ b/fe/src/services/MacroRecordService.js
@@ -125,3 +125,47 @@ export const invalidMacro = (steps) => {
return { down: downKeys, up: upKeys }
}
+
+export const translateJSON = (json) => {
+ const steps = []
+
+ json.forEach((step) => {
+ if (step.type === 'delay') steps.push(step)
+ if (step.type === 'key') steps.push(codeToStep(step.code, step.direction))
+ })
+
+ return steps
+}
+
+export const codeToStep = (code, direction) => {
+ let key = ''
+ let location = 0
+ let codeStr = code
+
+ if (code.includes('Left')) {
+ key = code.replace('Left', '')
+ location = 1
+ }
+ if (code.includes('Right')) {
+ key = code.replace('Right', '')
+ location = 2
+ }
+ if (code.includes('Numpad')) {
+ key = code.replace('Numpad', '')
+ location = 3
+ }
+
+ if (code.includes('Media')) codeStr = ''
+
+ if (key === '') key = code
+
+ const stepObj = {
+ type: 'key',
+ code: codeStr,
+ key: key,
+ location: location,
+ direction: direction,
+ }
+
+ return { ...stepObj, keyObj: filterKey(stepObj) }
+}
diff --git a/fe/src/stores/macrorecorder.js b/fe/src/stores/macrorecorder.js
index c9be868..2409088 100644
--- a/fe/src/stores/macrorecorder.js
+++ b/fe/src/stores/macrorecorder.js
@@ -1,7 +1,7 @@
import { ref } from 'vue'
import { defineStore } from 'pinia'
-import { filterKey, isRepeat, invalidMacro } from '../services/MacroRecordService'
+import { filterKey, isRepeat, invalidMacro, translateJSON } from '../services/MacroRecordService'
import axios from 'axios'
import { appUrl } from '@/services/ApiService'
@@ -48,6 +48,8 @@ export const useMacroRecorderStore = defineStore('macrorecorder', () => {
// Setters - Actions
const recordStep = (e, direction = false, key = false) => {
+ if ((e.ctrlKey, e.shiftKey, e.altKey, e.metaKey)) e.preventDefault()
+
const lastStep = steps.value[steps.value.length - 1]
let stepVal = {}
@@ -72,6 +74,8 @@ export const useMacroRecorderStore = defineStore('macrorecorder', () => {
if (key !== false) steps.value[key] = stepVal
else steps.value.push(stepVal)
+
+ console.log(steps.value)
}
const recordDelay = () => {
@@ -171,18 +175,36 @@ export const useMacroRecorderStore = defineStore('macrorecorder', () => {
if (state.value.edit) resetEdit()
}
- const save = () => {
+ const save = async () => {
state.value.validationErrors = invalidMacro(steps.value)
if (state.value.validationErrors) return false
- axios.post(appUrl() + '/macro/record', { name: macroName.value, steps: steps.value })
+ const resp = await axios.post(appUrl() + '/macro/record', {
+ name: macroName.value,
+ steps: steps.value,
+ })
- return true
+ return resp.status == 200
+ }
+
+ const open = async (macroFileName, name) => {
+ console.log(name)
+
+ const openResp = await axios.post(appUrl() + '/macro/open', {
+ macro: macroFileName,
+ })
+
+ if (openResp.data) steps.value = translateJSON(openResp.data)
+
+ // console.log(macroName)
+
+ macroName.value = name
}
return {
state,
+ macroName,
steps,
delay,
getEditKey,
@@ -198,5 +220,6 @@ export const useMacroRecorderStore = defineStore('macrorecorder', () => {
resetEdit,
reset,
save,
+ open,
}
})