diff --git a/gui/src/components/chat_messages_received.vue b/gui/src/components/chat_messages_received.vue index f2346b2a..67fde948 100644 --- a/gui/src/components/chat_messages_received.vue +++ b/gui/src/components/chat_messages_received.vue @@ -43,7 +43,7 @@ - diff --git a/gui/src/components/chat_messages_sent.vue b/gui/src/components/chat_messages_sent.vue index 2e678dee..539baa9c 100644 --- a/gui/src/components/chat_messages_sent.vue +++ b/gui/src/components/chat_messages_sent.vue @@ -29,7 +29,7 @@ - diff --git a/gui/src/components/main_modals.vue b/gui/src/components/main_modals.vue index 983dbe94..f42f141d 100644 --- a/gui/src/components/main_modals.vue +++ b/gui/src/components/main_modals.vue @@ -11,14 +11,14 @@ const chat = useChatStore(pinia); import { settingsStore as settings, onChange } from "../store/settingsStore.js"; import { sendModemTestFrame } from "../js/api"; import main_startup_check from "./main_startup_check.vue"; -import { newMessage } from '../js/messagesHandler.ts' +import { newMessage, deleteCallsignFromDB } from '../js/messagesHandler.ts' function newChat(){ newMessage(chat.newChatCallsign, chat.newChatMessage) } function deleteChat() { - return + deleteCallsignFromDB(chat.selectedCallsign); } import { diff --git a/gui/src/js/api.js b/gui/src/js/api.js index 3c3257c9..e6ed7bb1 100644 --- a/gui/src/js/api.js +++ b/gui/src/js/api.js @@ -46,6 +46,27 @@ export async function apiPost(endpoint, payload = {}) { } } +export async function apiDelete(endpoint, payload = {}) { + try { + const response = await fetch(buildURL(settings.local, endpoint), { + method: "DELETE", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(payload), + }); + + if (!response.ok) { + throw new Error(`REST response not ok: ${response.statusText}`); + } + + const data = await response.json(); + return data; + } catch (error) { + console.error("Error deleting from REST:", error); + } +} + export async function getVersion() { let data = await apiGet("/version").then((res) => { return res; @@ -55,30 +76,30 @@ export async function getVersion() { } export async function getConfig() { - return apiGet("/config"); + return await apiGet("/config"); } -export function setConfig(config) { - return apiPost("/config", config); +export async function setConfig(config) { + return await apiPost("/config", config); } -export function getAudioDevices() { - return apiGet("/devices/audio"); +export async function getAudioDevices() { + return await apiGet("/devices/audio"); } -export function getSerialDevices() { - return apiGet("/devices/serial"); +export async function getSerialDevices() { + return await apiGet("/devices/serial"); } -export function setModemBeacon(enabled = false) { - return apiPost("/modem/beacon", { enabled: enabled }); +export async function setModemBeacon(enabled = false) { + return await apiPost("/modem/beacon", { enabled: enabled }); } -export function sendModemCQ() { - return apiPost("/modem/cqcqcq"); +export async function sendModemCQ() { + return await apiPost("/modem/cqcqcq"); } -export function sendModemPing(dxcall) { +export async function sendModemPing(dxcall) { if ( validateCallsignWithSSID(dxcall) === false && validateCallsignWithoutSSID(dxcall) === true @@ -88,11 +109,11 @@ export function sendModemPing(dxcall) { } dxcall = String(dxcall).toUpperCase().trim(); if (validateCallsignWithSSID(dxcall)) - return apiPost("/modem/ping_ping", { dxcall: dxcall }); + return await apiPost("/modem/ping_ping", { dxcall: dxcall }); } -export function sendModemARQRaw(mycall, dxcall, data, uuid) { - return apiPost("/modem/send_arq_raw", { +export async function sendModemARQRaw(mycall, dxcall, data, uuid) { + return await apiPost("/modem/send_arq_raw", { mycallsign: mycall, dxcall: dxcall, data: data, @@ -100,35 +121,35 @@ export function sendModemARQRaw(mycall, dxcall, data, uuid) { }); } -export function stopTransmission() { - return apiPost("/modem/stop_transmission"); +export async function stopTransmission() { + return await apiPost("/modem/stop_transmission"); } -export function sendModemTestFrame() { - return apiPost("/modem/send_test_frame"); +export async function sendModemTestFrame() { + return await apiPost("/modem/send_test_frame"); } -export function startModem() { - return apiPost("/modem/start"); +export async function startModem() { + return await apiPost("/modem/start"); } -export function stopModem() { - return apiPost("/modem/stop"); +export async function stopModem() { + return await apiPost("/modem/stop"); } -export function getModemState() { - return apiGet("/modem/state"); +export async function getModemState() { + return await apiGet("/modem/state"); } -export function setRadioParameters(frequency, mode, rf_level) { - return apiPost("/radio", { +export async function setRadioParameters(frequency, mode, rf_level) { + return await apiPost("/radio", { radio_frequency: frequency, radio_mode: mode, radio_rf_level: rf_level, }); } -export function getRadioStatus() { - return apiGet("/radio"); +export async function getRadioStatus() { + return await apiGet("/radio"); } export async function getFreedataMessages(){ @@ -141,4 +162,8 @@ export async function sendFreedataMessage(dxcall, body) { dxcall: dxcall, body: body, }); +} + +export async function deleteFreedataMessage(id) { + return await apiDelete(`/freedata/messages/${id}`); } \ No newline at end of file diff --git a/gui/src/js/messagesHandler.ts b/gui/src/js/messagesHandler.ts index db1f69f7..20d0d636 100644 --- a/gui/src/js/messagesHandler.ts +++ b/gui/src/js/messagesHandler.ts @@ -6,7 +6,7 @@ setActivePinia(pinia); import { useChatStore } from "../store/chatStore.js"; const chatStore = useChatStore(pinia); -import { sendFreedataMessage } from "./api" +import { sendFreedataMessage, deleteFreedataMessage } from "./api" interface Message { id: string; @@ -71,8 +71,15 @@ export function repeatMessageTransmission(id){ return } +export function deleteCallsignFromDB(callsign){ + for (var message of chatStore.sorted_chat_list[callsign]) { + deleteFreedataMessage(message["id"]); + } + +} + export function deleteMessageFromDB(id){ - return + deleteFreedataMessage(id); } export function requestMessageInfo(id){ diff --git a/modem/message_system_db_manager.py b/modem/message_system_db_manager.py index b69dd1b7..9c923d21 100644 --- a/modem/message_system_db_manager.py +++ b/modem/message_system_db_manager.py @@ -166,6 +166,7 @@ class DatabaseManager: session.delete(message) session.commit() self.log(f"Deleted: {message_id}") + self.event_manager.freedata_message_db_change() return {'status': 'success', 'message': f'Message {message_id} deleted'} else: return {'status': 'failure', 'message': 'Message not found'} @@ -188,6 +189,7 @@ class DatabaseManager: message.body = update_data['body'] session.commit() self.log(f"Updated: {message_id}") + self.event_manager.freedata_message_db_change() return {'status': 'success', 'message': f'Message {message_id} updated'} else: return {'status': 'failure', 'message': 'Message not found'}