From c58bd65f8536caa3487b28b448b647bb57f93313 Mon Sep 17 00:00:00 2001 From: Raul Victor Trombin Date: Fri, 20 Dec 2024 16:06:31 -0300 Subject: [PATCH] test --- ping-viewer-next-frontend/bun.lockb | Bin 181739 -> 190793 bytes ping-viewer-next-frontend/package.json | 18 +- ping-viewer-next-frontend/src/App.vue | 1100 ++++++++++++++--- .../src/components/ConnectionManager.vue | 345 ++++++ .../src/components/utils/ServerConnection.vue | 215 ++-- .../src/components/utils/VisualSettings.vue | 530 +++++--- .../src/components/views/ReplayView.vue | 56 +- .../src/components/widgets/DataPlayer.vue | 90 +- .../components/widgets/FloatingControls.vue | 142 ++- .../widgets/sonar1d/Ping1DLoader.vue | 11 + .../widgets/sonar1d/Ping1DSettings.vue | 31 +- .../widgets/sonar360/Ping360Loader.vue | 43 +- .../widgets/sonar360/Ping360Settings.vue | 43 +- 13 files changed, 1956 insertions(+), 668 deletions(-) create mode 100644 ping-viewer-next-frontend/src/components/ConnectionManager.vue diff --git a/ping-viewer-next-frontend/bun.lockb b/ping-viewer-next-frontend/bun.lockb index 7afa9c457aa1f40b5d255e131098ab60d07ae597..7c5491fd65730a45ca0259dba140614020620f7f 100755 GIT binary patch delta 35693 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 delta 31520 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%0DJ!fa1Qt$psN^KD}gNl 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 diff --git a/ping-viewer-next-frontend/package.json b/ping-viewer-next-frontend/package.json index 9e005eb1..ffb6b4a9 100644 --- a/ping-viewer-next-frontend/package.json +++ b/ping-viewer-next-frontend/package.json @@ -12,11 +12,11 @@ "core-js": "^3.39.0", "roboto-fontface": "^0.10.0", "vue": "3.5.8", - "vuetify": "^3.7.4" + "vuetify": "^3.7.6" }, "devDependencies": { "@biomejs/biome": "1.9.2", - "@vitejs/plugin-vue": "^5.1.5", + "@vitejs/plugin-vue": "^5.2.1", "autoprefixer": "^10.4.20", "eslint": "^8.57.1", "eslint-config-standard": "^17.1.0", @@ -25,18 +25,18 @@ "eslint-plugin-n": "^16.6.2", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.6.0", - "eslint-plugin-vue": "^9.31.0", - "pinia": "^2.2.6", + "eslint-plugin-vue": "^9.32.0", + "pinia": "^2.3.0", "postcss": "^8.4.49", "sass": "1.77.6", - "tailwindcss": "^3.4.14", + "tailwindcss": "^3.4.17", "unplugin-auto-import": "^0.17.8", - "unplugin-fonts": "^1.1.1", - "unplugin-vue-components": "^0.27.4", - "unplugin-vue-router": "^0.10.8", + "unplugin-fonts": "^1.3.1", + "unplugin-vue-components": "^0.27.5", + "unplugin-vue-router": "^0.10.9", "vite": "^5.4.11", "vite-plugin-vue-layouts": "^0.11.0", "vite-plugin-vuetify": "^2.0.4", - "vue-router": "^4.4.5" + "vue-router": "^4.5.0" } } diff --git a/ping-viewer-next-frontend/src/App.vue b/ping-viewer-next-frontend/src/App.vue index 1eb1676c..7644dd33 100644 --- a/ping-viewer-next-frontend/src/App.vue +++ b/ping-viewer-next-frontend/src/App.vue @@ -1,163 +1,411 @@ +const showRecordingsMenu = ref(false); + +const formatRecordingDate = (timestamp) => { + return new Date(timestamp).toLocaleString(); +}; + +const formatRecordingDetails = (recording) => { + if (!recording.settings) return ''; + + const details = []; + if (recording.deviceType === 'Ping360') { + if (recording.settings.startAngle !== undefined) { + details.push(`${recording.settings.startAngle}° - ${recording.settings.endAngle}°`); + } + if (recording.settings.currentRange) { + details.push(`${recording.settings.currentRange}m range`); + } + } else { + if (recording.settings.maxDepth) { + details.push(`${recording.settings.maxDepth}m depth`); + } + } + return details.join(' | '); +}; + +const deleteRecording = (recording) => { + const index = recordings.value.findIndex((r) => r.id === recording.id); + if (index !== -1) { + recordings.value.splice(index, 1); + // Also remove from localStorage if you're storing them there + saveRecordingsToStorage(); + } +}; + +const clearRecordings = () => { + recordings.value = []; + saveRecordingsToStorage(); +}; + +const saveRecordingsToStorage = () => { + try { + localStorage.setItem('sonar-recordings', JSON.stringify(recordings.value)); + } catch (error) { + console.error('Error saving recordings to storage:', error); + } +}; + +// Add these watchers to handle menu state +watch(isSpeedDialOpen, (newValue) => { + if (newValue) { + showRecordingsMenu.value = false; + } +}); + +watch(isMenuOpen, (newValue) => { + if (newValue) { + showRecordingsMenu.value = false; + } +}); + +watch(showRecordingsMenu, (newValue) => { + if (newValue) { + isSpeedDialOpen.value = false; + isMenuOpen.value = false; + } +}); + + + \ No newline at end of file diff --git a/ping-viewer-next-frontend/src/components/ConnectionManager.vue b/ping-viewer-next-frontend/src/components/ConnectionManager.vue new file mode 100644 index 00000000..e7ddebad --- /dev/null +++ b/ping-viewer-next-frontend/src/components/ConnectionManager.vue @@ -0,0 +1,345 @@ + + + + + \ No newline at end of file diff --git a/ping-viewer-next-frontend/src/components/utils/ServerConnection.vue b/ping-viewer-next-frontend/src/components/utils/ServerConnection.vue index 7f080f24..74234e2b 100644 --- a/ping-viewer-next-frontend/src/components/utils/ServerConnection.vue +++ b/ping-viewer-next-frontend/src/components/utils/ServerConnection.vue @@ -1,94 +1,88 @@ - - \ No newline at end of file + + + \ No newline at end of file diff --git a/ping-viewer-next-frontend/src/components/utils/VisualSettings.vue b/ping-viewer-next-frontend/src/components/utils/VisualSettings.vue index cf551ad0..3b90bfdf 100644 --- a/ping-viewer-next-frontend/src/components/utils/VisualSettings.vue +++ b/ping-viewer-next-frontend/src/components/utils/VisualSettings.vue @@ -1,180 +1,223 @@ - \ No newline at end of file diff --git a/ping-viewer-next-frontend/src/components/views/ReplayView.vue b/ping-viewer-next-frontend/src/components/views/ReplayView.vue index ae5bf116..2554e6d8 100644 --- a/ping-viewer-next-frontend/src/components/views/ReplayView.vue +++ b/ping-viewer-next-frontend/src/components/views/ReplayView.vue @@ -1,33 +1,24 @@ - - \ No newline at end of file + +defineExpose({ + updateCurrentDeviceData, + onDataLoaded, +}); + + + \ No newline at end of file diff --git a/ping-viewer-next-frontend/src/components/widgets/DataPlayer.vue b/ping-viewer-next-frontend/src/components/widgets/DataPlayer.vue index e46bfae9..c1f278bf 100644 --- a/ping-viewer-next-frontend/src/components/widgets/DataPlayer.vue +++ b/ping-viewer-next-frontend/src/components/widgets/DataPlayer.vue @@ -1,58 +1,42 @@ - - \ No newline at end of file +} + \ No newline at end of file diff --git a/ping-viewer-next-frontend/src/components/widgets/sonar1d/Ping1DLoader.vue b/ping-viewer-next-frontend/src/components/widgets/sonar1d/Ping1DLoader.vue index 14607444..44713ebf 100644 --- a/ping-viewer-next-frontend/src/components/widgets/sonar1d/Ping1DLoader.vue +++ b/ping-viewer-next-frontend/src/components/widgets/sonar1d/Ping1DLoader.vue @@ -17,10 +17,16 @@ > {{ isFreeze ? 'mdi-play' : 'mdi-pause' }} + + mdi-cog + + + { } }; +const openSettings = async () => { + isSettingsOpen.value = true; +}; + onMounted(() => { connectWebSocket(); }); diff --git a/ping-viewer-next-frontend/src/components/widgets/sonar1d/Ping1DSettings.vue b/ping-viewer-next-frontend/src/components/widgets/sonar1d/Ping1DSettings.vue index 9e25e6db..5a75542e 100644 --- a/ping-viewer-next-frontend/src/components/widgets/sonar1d/Ping1DSettings.vue +++ b/ping-viewer-next-frontend/src/components/widgets/sonar1d/Ping1DSettings.vue @@ -1,13 +1,6 @@ diff --git a/ping-viewer-next-frontend/src/components/widgets/sonar360/Ping360Loader.vue b/ping-viewer-next-frontend/src/components/widgets/sonar360/Ping360Loader.vue index f317e152..b0f1b2a6 100644 --- a/ping-viewer-next-frontend/src/components/widgets/sonar360/Ping360Loader.vue +++ b/ping-viewer-next-frontend/src/components/widgets/sonar360/Ping360Loader.vue @@ -18,14 +18,21 @@ > {{ isFreeze ? 'mdi-play' : 'mdi-pause' }} + + mdi-cog + + + + { + if (!socket.value || socket.value.readyState !== WebSocket.OPEN) { + console.error('WebSocket is not connected'); + return; + } + + const configRequest = { + command: 'ModifyDevice', + module: 'DeviceManager', + payload: { + uuid: props.device.id, // Using the device id from props + modify: 'GetPing360Config', + }, + }; + + socket.value.send(JSON.stringify(configRequest)); + if (props.debug) { + console.debug('Sent GetPing360Config request:', configRequest); + } +}; + const connectWebSocket = () => { if (socket.value) return; @@ -198,6 +227,7 @@ const connectWebSocket = () => { socket.value.onopen = () => { connectionStatus.value = 'Connected'; + sendGetConfigRequest(); }; socket.value.onmessage = (event) => { @@ -207,9 +237,11 @@ const connectWebSocket = () => { console.debug('Ping360 data:', parsedData); } - if (parsedData.DeviceConfig?.ConfigAcknowledge?.modify?.SetPing360Config) { - const config = parsedData.DeviceConfig.ConfigAcknowledge.modify.SetPing360Config; + const config = + parsedData.DeviceConfig?.ConfigAcknowledge?.modify?.SetPing360Config || + parsedData.DeviceConfig?.Ping360Config; + if (config) { const SAMPLE_PERIOD_TICK_DURATION = 25e-9; currentRange.value = Math.round( (config.sample_period * SAMPLE_PERIOD_TICK_DURATION * config.number_of_samples * 1500) / 2 @@ -284,6 +316,10 @@ const handleRangeChange = (newRange) => { currentRange.value = newRange; }; +const openSettings = async () => { + isSettingsOpen.value = true; +}; + watch( () => props.websocketUrl, (newUrl, oldUrl) => { @@ -301,9 +337,6 @@ watch(yawAngle, (newYaw) => { }); onMounted(async () => { - if (props.showControls && settingsRef.value?.fetchCurrentSettings) { - await settingsRef.value.fetchCurrentSettings(); - } connectWebSocket(); }); diff --git a/ping-viewer-next-frontend/src/components/widgets/sonar360/Ping360Settings.vue b/ping-viewer-next-frontend/src/components/widgets/sonar360/Ping360Settings.vue index 471cdc68..fd8afbf8 100644 --- a/ping-viewer-next-frontend/src/components/widgets/sonar360/Ping360Settings.vue +++ b/ping-viewer-next-frontend/src/components/widgets/sonar360/Ping360Settings.vue @@ -1,10 +1,4 @@