mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
[CodeFactor] Apply fixes
This commit is contained in:
parent
08c2b7809a
commit
ba6f07407c
17 changed files with 187 additions and 197 deletions
|
@ -3,8 +3,6 @@ import chat_navbar from "./chat_navbar.vue";
|
|||
import chat_conversations from "./chat_conversations.vue";
|
||||
import chat_messages from "./chat_messages.vue";
|
||||
import chat_new_message from "./chat_new_message.vue";
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
|
|
@ -6,13 +6,8 @@ setActivePinia(pinia);
|
|||
import { useChatStore } from "../store/chatStore.js";
|
||||
import { getBeaconDataByCallsign } from "../js/api.js";
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
const chat = useChatStore(pinia);
|
||||
|
||||
|
||||
function chatSelected(callsign) {
|
||||
chat.selectedCallsign = callsign.toUpperCase();
|
||||
// scroll message container to bottom
|
||||
|
@ -22,28 +17,23 @@ function chatSelected(callsign) {
|
|||
messageBody.scrollTop = messageBody.scrollHeight - messageBody.clientHeight;
|
||||
}
|
||||
|
||||
processBeaconData(callsign);
|
||||
|
||||
processBeaconData(callsign);
|
||||
}
|
||||
|
||||
async function processBeaconData(callsign){
|
||||
async function processBeaconData(callsign) {
|
||||
// fetch beacon data when selecting a callsign
|
||||
let beacons = await getBeaconDataByCallsign(callsign);
|
||||
chat.beaconLabelArray = beacons.map(entry => entry.timestamp);
|
||||
chat.beaconDataArray = beacons.map(entry => entry.snr);
|
||||
let beacons = await getBeaconDataByCallsign(callsign);
|
||||
chat.beaconLabelArray = beacons.map((entry) => entry.timestamp);
|
||||
chat.beaconDataArray = beacons.map((entry) => entry.snr);
|
||||
}
|
||||
|
||||
|
||||
function getDateTime(timestamp) {
|
||||
|
||||
let date = new Date(timestamp);
|
||||
let hours = date.getHours().toString().padStart(2, '0');
|
||||
let minutes = date.getMinutes().toString().padStart(2, '0');
|
||||
let seconds = date.getSeconds().toString().padStart(2, '0');
|
||||
return `${hours}:${minutes}`;
|
||||
let date = new Date(timestamp);
|
||||
let hours = date.getHours().toString().padStart(2, "0");
|
||||
let minutes = date.getMinutes().toString().padStart(2, "0");
|
||||
let seconds = date.getSeconds().toString().padStart(2, "0");
|
||||
return `${hours}:${minutes}`;
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
<template>
|
||||
<div
|
||||
|
@ -51,8 +41,10 @@ function getDateTime(timestamp) {
|
|||
id="chat-list-tab"
|
||||
role="chat-tablist"
|
||||
>
|
||||
|
||||
<template v-for="(details, callsign, key) in chat.callsign_list" :key="callsign">
|
||||
<template
|
||||
v-for="(details, callsign, key) in chat.callsign_list"
|
||||
:key="callsign"
|
||||
>
|
||||
<a
|
||||
class="list-group-item list-group-item-action list-group-item-secondary rounded-2 border-0 mb-2"
|
||||
:class="{ active: key == 0 }"
|
||||
|
@ -63,16 +55,14 @@ function getDateTime(timestamp) {
|
|||
aria-controls="list-{{callsign}}-messages"
|
||||
@click="chatSelected(callsign)"
|
||||
>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-9 text-truncate">
|
||||
<strong>{{ callsign }}</strong>
|
||||
<br>
|
||||
<small> {{details.body}} </small>
|
||||
|
||||
<br />
|
||||
<small> {{ details.body }} </small>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<small> {{getDateTime(details.timestamp)}} </small>
|
||||
<small> {{ getDateTime(details.timestamp) }} </small>
|
||||
<button
|
||||
class="btn btn-sm btn-outline-secondary ms-2 border-0"
|
||||
data-bs-target="#deleteChatModal"
|
||||
|
|
|
@ -16,16 +16,19 @@ var prevChatMessageDay = "";
|
|||
|
||||
function getDateTime(timestampRaw) {
|
||||
let date = new Date(timestampRaw);
|
||||
let year = date.getFullYear();
|
||||
let month = (date.getMonth() + 1).toString().padStart(2, '0'); // Months are zero-indexed
|
||||
let day = date.getDate().toString().padStart(2, '0');
|
||||
return `${year}-${month}-${day}`;
|
||||
let year = date.getFullYear();
|
||||
let month = (date.getMonth() + 1).toString().padStart(2, "0"); // Months are zero-indexed
|
||||
let day = date.getDate().toString().padStart(2, "0");
|
||||
return `${year}-${month}-${day}`;
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="tab-content" id="nav-tabContent-chat-messages">
|
||||
<template v-for="(details, callsign, key) in chat.callsign_list" :key="callsign">
|
||||
<template
|
||||
v-for="(details, callsign, key) in chat.callsign_list"
|
||||
:key="callsign"
|
||||
>
|
||||
<div
|
||||
class="tab-pane fade show"
|
||||
:class="{ active: key == 0 }"
|
||||
|
@ -33,25 +36,17 @@ function getDateTime(timestampRaw) {
|
|||
role="tabpanel"
|
||||
:aria-labelledby="`list-chat-list-${callsign}`"
|
||||
>
|
||||
|
||||
|
||||
<template
|
||||
v-for="item in chat.sorted_chat_list[callsign]"
|
||||
>
|
||||
|
||||
<template v-for="item in chat.sorted_chat_list[callsign]">
|
||||
<div v-if="prevChatMessageDay !== getDateTime(item.timestamp)">
|
||||
<div class="separator my-2">
|
||||
{{ (prevChatMessageDay = getDateTime(item.timestamp)) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div v-if="item.direction === 'transmit'">
|
||||
<sent-message :message="item" />
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div v-else-if="item.direction === 'receive'">
|
||||
<received-message :message="item" />
|
||||
</div>
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<template>
|
||||
|
||||
<div class="row justify-content-start mb-2">
|
||||
<div :class="messageWidthClass">
|
||||
<div class="card bg-light border-0 text-dark">
|
||||
|
@ -25,7 +24,7 @@
|
|||
<!-- Delete button outside of the card -->
|
||||
<div class="col-auto">
|
||||
<button
|
||||
disabled
|
||||
disabled
|
||||
class="btn btn-outline-secondary border-0 me-1"
|
||||
@click="showMessageInfo"
|
||||
data-bs-target="#messageInfoModal"
|
||||
|
@ -35,7 +34,7 @@
|
|||
</button>
|
||||
|
||||
<button
|
||||
disabled
|
||||
disabled
|
||||
v-if="getFileContent['filesize'] !== 0"
|
||||
class="btn btn-outline-secondary border-0 me-1"
|
||||
@click="downloadAttachment"
|
||||
|
@ -99,9 +98,8 @@ export default {
|
|||
},
|
||||
computed: {
|
||||
getFileContent() {
|
||||
|
||||
if(this.message.attachments.length <= 0){
|
||||
return { filename: '', filesize: 0, filetype: '' };
|
||||
if (this.message.attachments.length <= 0) {
|
||||
return { filename: "", filesize: 0, filetype: "" };
|
||||
}
|
||||
|
||||
try {
|
||||
|
@ -129,12 +127,11 @@ export default {
|
|||
},
|
||||
|
||||
getDateTime() {
|
||||
|
||||
let date = new Date(this.message.timestamp);
|
||||
let hours = date.getHours().toString().padStart(2, '0');
|
||||
let minutes = date.getMinutes().toString().padStart(2, '0');
|
||||
let seconds = date.getSeconds().toString().padStart(2, '0');
|
||||
return `${hours}:${minutes}:${seconds}`;
|
||||
let date = new Date(this.message.timestamp);
|
||||
let hours = date.getHours().toString().padStart(2, "0");
|
||||
let minutes = date.getMinutes().toString().padStart(2, "0");
|
||||
let seconds = date.getSeconds().toString().padStart(2, "0");
|
||||
return `${hours}:${minutes}:${seconds}`;
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
</button>
|
||||
|
||||
<button
|
||||
disabled
|
||||
disabled
|
||||
class="btn btn-outline-secondary border-0 me-1"
|
||||
@click="repeatMessage"
|
||||
>
|
||||
|
@ -20,7 +20,7 @@
|
|||
</button>
|
||||
|
||||
<button
|
||||
disabled
|
||||
disabled
|
||||
class="btn btn-outline-secondary border-0 me-1"
|
||||
@click="showMessageInfo"
|
||||
data-bs-target="#messageInfoModal"
|
||||
|
@ -50,7 +50,9 @@
|
|||
</div>
|
||||
|
||||
<div class="card-footer p-0 bg-secondary border-top-0">
|
||||
<p class="text p-0 m-0 me-1 text-end">{{message.status}} | {{ getDateTime }}</p>
|
||||
<p class="text p-0 m-0 me-1 text-end">
|
||||
{{ message.status }} | {{ getDateTime }}
|
||||
</p>
|
||||
<!-- Display formatted timestamp in card-footer -->
|
||||
</div>
|
||||
|
||||
|
@ -142,9 +144,8 @@ export default {
|
|||
},
|
||||
computed: {
|
||||
getFileContent() {
|
||||
|
||||
if(this.message.attachments.length <= 0){
|
||||
return { filename: '', filesize: 0, filetype: '' };
|
||||
if (this.message.attachments.length <= 0) {
|
||||
return { filename: "", filesize: 0, filetype: "" };
|
||||
}
|
||||
|
||||
var filename = Object.keys(this.message._attachments)[0];
|
||||
|
@ -175,12 +176,11 @@ export default {
|
|||
},
|
||||
|
||||
getDateTime() {
|
||||
|
||||
let date = new Date(this.message.timestamp);
|
||||
let hours = date.getHours().toString().padStart(2, '0');
|
||||
let minutes = date.getMinutes().toString().padStart(2, '0');
|
||||
let seconds = date.getSeconds().toString().padStart(2, '0');
|
||||
return `${hours}:${minutes}:${seconds}`;
|
||||
let date = new Date(this.message.timestamp);
|
||||
let hours = date.getHours().toString().padStart(2, "0");
|
||||
let minutes = date.getMinutes().toString().padStart(2, "0");
|
||||
let seconds = date.getSeconds().toString().padStart(2, "0");
|
||||
return `${hours}:${minutes}:${seconds}`;
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
|
@ -112,7 +112,6 @@ function newChat() {
|
|||
//updateAllChat(false);
|
||||
this.newChatCall.value = "";
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
@ -121,14 +120,12 @@ function newChat() {
|
|||
<div class="row w-100">
|
||||
<div class="col-3 p-0">
|
||||
<button
|
||||
class="btn btn-outline-primary w-100"
|
||||
data-bs-target="#newChatModal"
|
||||
data-bs-toggle="modal"
|
||||
>
|
||||
<i class="bi bi-pencil-square"> Start a new chat</i>
|
||||
</button>
|
||||
|
||||
|
||||
class="btn btn-outline-primary w-100"
|
||||
data-bs-target="#newChatModal"
|
||||
data-bs-toggle="modal"
|
||||
>
|
||||
<i class="bi bi-pencil-square"> Start a new chat</i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-5 ms-2 p-0">
|
||||
<!-- right side of chat nav bar-->
|
||||
|
|
|
@ -20,9 +20,7 @@ import infoScreen from "./infoScreen.vue";
|
|||
import main_modem_healthcheck from "./main_modem_healthcheck.vue";
|
||||
import Dynamic_components from "./dynamic_components.vue";
|
||||
|
||||
import { getFreedataMessages } from "../js/api"
|
||||
|
||||
|
||||
import { getFreedataMessages } from "../js/api";
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
|
|
@ -28,12 +28,12 @@ function getDateTime(timestampRaw) {
|
|||
}
|
||||
|
||||
function getMaidenheadDistance(dxGrid) {
|
||||
if(typeof(dxGrid) != "undefined"){
|
||||
try {
|
||||
return parseInt(distance(settings.remote.STATION.mygrid, dxGrid));
|
||||
} catch (e) {
|
||||
console.warn(e);
|
||||
}
|
||||
if (typeof dxGrid != "undefined") {
|
||||
try {
|
||||
return parseInt(distance(settings.remote.STATION.mygrid, dxGrid));
|
||||
} catch (e) {
|
||||
console.warn(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -50,7 +50,7 @@ const state = useStateStore(pinia);
|
|||
>
|
||||
<i class="bi bi-cpu" style="font-size: 0.8rem"></i>
|
||||
</button>
|
||||
<!--
|
||||
<!--
|
||||
<button
|
||||
class="btn btn-sm btn-secondary me-1"
|
||||
id="arq_session"
|
||||
|
@ -70,7 +70,7 @@ const state = useStateStore(pinia);
|
|||
<i class="bi bi-arrow-left-right" style="font-size: 0.8rem"></i>
|
||||
</button>
|
||||
-->
|
||||
<!--
|
||||
<!--
|
||||
<button
|
||||
class="btn btn-sm btn-secondary me-1"
|
||||
id="arq_state"
|
||||
|
@ -103,7 +103,7 @@ const state = useStateStore(pinia);
|
|||
<i class="bi bi-usb-symbol" style="font-size: 0.8rem"></i>
|
||||
</button>
|
||||
-->
|
||||
<!--
|
||||
<!--
|
||||
<button
|
||||
class="btn btn-sm btn-secondary disabled me-3"
|
||||
type="button"
|
||||
|
|
|
@ -11,19 +11,18 @@ 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, deleteCallsignFromDB } from '../js/messagesHandler.ts'
|
||||
import { newMessage, deleteCallsignFromDB } from "../js/messagesHandler.ts";
|
||||
|
||||
function newChat(){
|
||||
let newCallsign = chat.newChatCallsign.toUpperCase()
|
||||
newMessage(newCallsign, chat.newChatMessage)
|
||||
|
||||
chat.newChatCallsign = '';
|
||||
chat.newChatMessage = '';
|
||||
function newChat() {
|
||||
let newCallsign = chat.newChatCallsign.toUpperCase();
|
||||
newMessage(newCallsign, chat.newChatMessage);
|
||||
|
||||
chat.newChatCallsign = "";
|
||||
chat.newChatMessage = "";
|
||||
}
|
||||
|
||||
function deleteChat() {
|
||||
deleteCallsignFromDB(chat.selectedCallsign);
|
||||
deleteCallsignFromDB(chat.selectedCallsign);
|
||||
}
|
||||
|
||||
import {
|
||||
|
@ -314,7 +313,7 @@ const transmissionSpeedChartDataMessageInfo = computed(() => ({
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
<div
|
||||
class="modal fade"
|
||||
ref="modalEle"
|
||||
id="newChatModal"
|
||||
|
@ -335,28 +334,40 @@ const transmissionSpeedChartDataMessageInfo = computed(() => ({
|
|||
></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="alert alert-info" role="alert">
|
||||
1. Enter destination callsign
|
||||
<br />
|
||||
2. Enter a first message
|
||||
<br />
|
||||
3. Pressing "START NEW CHAT"
|
||||
</div>
|
||||
|
||||
<div class="alert alert-info" role="alert">
|
||||
1. Enter destination callsign
|
||||
<br>
|
||||
2. Enter a first message
|
||||
<br>
|
||||
3. Pressing "START NEW CHAT"
|
||||
</div>
|
||||
|
||||
<div class="form-floating mb-3">
|
||||
<input type="text" class="form-control" id="floatingInputDestination" placeholder="dxcallsign / destination" maxlength="9"
|
||||
style="text-transform: uppercase" @keypress.enter="newChat()" v-model="chat.newChatCallsign">
|
||||
<label for="floatingInputDestination">dxcallsign / destination</label>
|
||||
</div>
|
||||
|
||||
<div class="form-floating">
|
||||
<textarea class="form-control" placeholder="Your first message" id="floatingTextareaNewChatMessage" style="height: 100px" v-model="chat.newChatMessage"></textarea>
|
||||
<label for="floatingTextareaNewChatMessage">First message</label>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-floating mb-3">
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
id="floatingInputDestination"
|
||||
placeholder="dxcallsign / destination"
|
||||
maxlength="9"
|
||||
style="text-transform: uppercase"
|
||||
@keypress.enter="newChat()"
|
||||
v-model="chat.newChatCallsign"
|
||||
/>
|
||||
<label for="floatingInputDestination"
|
||||
>dxcallsign / destination</label
|
||||
>
|
||||
</div>
|
||||
|
||||
<div class="form-floating">
|
||||
<textarea
|
||||
class="form-control"
|
||||
placeholder="Your first message"
|
||||
id="floatingTextareaNewChatMessage"
|
||||
style="height: 100px"
|
||||
v-model="chat.newChatMessage"
|
||||
></textarea>
|
||||
<label for="floatingTextareaNewChatMessage">First message</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button
|
||||
|
@ -367,22 +378,21 @@ const transmissionSpeedChartDataMessageInfo = computed(() => ({
|
|||
Close
|
||||
</button>
|
||||
<button
|
||||
class="btn btn-sm btn-outline-success"
|
||||
id="createNewChatButton"
|
||||
type="button"
|
||||
data-bs-dismiss="modal"
|
||||
title="Start a new chat (enter dx call sign first)"
|
||||
@click="newChat()"
|
||||
>
|
||||
START NEW CHAT
|
||||
<i class="bi bi-pencil-square" style="font-size: 1.2rem"></i>
|
||||
</button>
|
||||
class="btn btn-sm btn-outline-success"
|
||||
id="createNewChatButton"
|
||||
type="button"
|
||||
data-bs-dismiss="modal"
|
||||
title="Start a new chat (enter dx call sign first)"
|
||||
@click="newChat()"
|
||||
>
|
||||
START NEW CHAT
|
||||
<i class="bi bi-pencil-square" style="font-size: 1.2rem"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- HELP MODALS AUDIO -->
|
||||
<div
|
||||
class="modal fade"
|
||||
|
|
|
@ -34,7 +34,6 @@ onMounted(() => {
|
|||
new Modal("#modemCheck", {}).show();
|
||||
});
|
||||
|
||||
|
||||
function getModemStateLocal() {
|
||||
// Returns active/inactive if modem is running for modem status label
|
||||
if (state.is_modem_running == true) return "Active";
|
||||
|
@ -165,7 +164,9 @@ function testHamlib() {
|
|||
<div id="modemStatusCollapse" class="accordion-collapse collapse">
|
||||
<div class="accordion-body">
|
||||
<div class="input-group input-group-sm mb-1">
|
||||
<label class="input-group-text w-50">Manual modem restart</label>
|
||||
<label class="input-group-text w-50"
|
||||
>Manual modem restart</label
|
||||
>
|
||||
<label class="input-group-text">
|
||||
<button
|
||||
type="button"
|
||||
|
@ -199,7 +200,6 @@ function testHamlib() {
|
|||
<i class="bi bi-stop-fill"></i>
|
||||
</button>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
<!-- Audio Input Device -->
|
||||
<div class="input-group input-group-sm mb-1">
|
||||
|
|
|
@ -9,10 +9,9 @@ import {
|
|||
validateCallsignWithoutSSID,
|
||||
} from "../js/freedata";
|
||||
function validateCall() {
|
||||
|
||||
//ensure callsign is uppercase:
|
||||
let call = settings.remote.STATION.mycall
|
||||
settings.remote.STATION.mycall = call.toUpperCase()
|
||||
//ensure callsign is uppercase:
|
||||
let call = settings.remote.STATION.mycall;
|
||||
settings.remote.STATION.mycall = call.toUpperCase();
|
||||
|
||||
if (validateCallsignWithoutSSID(settings.remote.STATION.mycall))
|
||||
//Send new callsign to modem if valid
|
||||
|
|
|
@ -4,9 +4,7 @@ import {
|
|||
validateCallsignWithoutSSID,
|
||||
} from "./freedata";
|
||||
|
||||
import {
|
||||
processFreedataMessages
|
||||
} from "./messagesHandler"
|
||||
import { processFreedataMessages } from "./messagesHandler";
|
||||
|
||||
function buildURL(params, endpoint) {
|
||||
const url = "http://" + params.host + ":" + params.port + endpoint;
|
||||
|
@ -152,9 +150,9 @@ export async function getRadioStatus() {
|
|||
return await apiGet("/radio");
|
||||
}
|
||||
|
||||
export async function getFreedataMessages(){
|
||||
let res = await apiGet("/freedata/messages")
|
||||
processFreedataMessages(res)
|
||||
export async function getFreedataMessages() {
|
||||
let res = await apiGet("/freedata/messages");
|
||||
processFreedataMessages(res);
|
||||
}
|
||||
|
||||
export async function sendFreedataMessage(destination, body) {
|
||||
|
@ -168,6 +166,6 @@ export async function deleteFreedataMessage(id) {
|
|||
return await apiDelete(`/freedata/messages/${id}`);
|
||||
}
|
||||
|
||||
export async function getBeaconDataByCallsign(callsign){
|
||||
return await apiGet(`/freedata/beacons/${callsign}`);
|
||||
export async function getBeaconDataByCallsign(callsign) {
|
||||
return await apiGet(`/freedata/beacons/${callsign}`);
|
||||
}
|
|
@ -8,8 +8,14 @@ import {
|
|||
} from "./chatHandler";
|
||||
*/
|
||||
import { displayToast } from "./popupHandler";
|
||||
import { getFreedataMessages, getConfig, getAudioDevices, getSerialDevices, getModemState } from "./api"
|
||||
import { processFreedataMessages } from "./messagesHandler.ts"
|
||||
import {
|
||||
getFreedataMessages,
|
||||
getConfig,
|
||||
getAudioDevices,
|
||||
getSerialDevices,
|
||||
getModemState,
|
||||
} from "./api";
|
||||
import { processFreedataMessages } from "./messagesHandler.ts";
|
||||
|
||||
// ----------------- init pinia stores -------------
|
||||
import { setActivePinia } from "pinia";
|
||||
|
@ -64,11 +70,11 @@ export function eventDispatcher(data) {
|
|||
return;
|
||||
}
|
||||
|
||||
switch (data["message-db"]) {
|
||||
switch (data["message-db"]) {
|
||||
case "changed":
|
||||
console.log("fetching new messages...")
|
||||
var messages = getFreedataMessages()
|
||||
processFreedataMessages(messages)
|
||||
console.log("fetching new messages...");
|
||||
var messages = getFreedataMessages();
|
||||
processFreedataMessages(messages);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -299,4 +305,3 @@ function build_HSL() {
|
|||
}
|
||||
stateStore.heard_stations.sort((a, b) => b.timestamp - a.timestamp); // b - a for reverse sort
|
||||
}
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ export function sortByPropertyDesc(property) {
|
|||
*/
|
||||
export function validateCallsignWithSSID(callsign: string) {
|
||||
var patt = new RegExp("^[A-Z]+[0-9][A-Z]*-(1[0-5]|[0-9])$");
|
||||
callsign = callsign
|
||||
callsign = callsign;
|
||||
if (
|
||||
callsign === undefined ||
|
||||
callsign === "" ||
|
||||
|
|
|
@ -6,7 +6,7 @@ setActivePinia(pinia);
|
|||
import { useChatStore } from "../store/chatStore.js";
|
||||
const chatStore = useChatStore(pinia);
|
||||
|
||||
import { sendFreedataMessage, deleteFreedataMessage } from "./api"
|
||||
import { sendFreedataMessage, deleteFreedataMessage } from "./api";
|
||||
|
||||
interface Message {
|
||||
id: string;
|
||||
|
@ -20,36 +20,48 @@ interface Message {
|
|||
statistics: any;
|
||||
}
|
||||
|
||||
|
||||
export async function processFreedataMessages(data){
|
||||
if(typeof(data) != "undefined"){
|
||||
let jsondata = await JSON.parse(data);
|
||||
chatStore.callsign_list = createCallsignListFromAPI(jsondata)
|
||||
chatStore.sorted_chat_list = createSortedMessagesList(jsondata)
|
||||
}
|
||||
export async function processFreedataMessages(data) {
|
||||
if (typeof data != "undefined") {
|
||||
let jsondata = await JSON.parse(data);
|
||||
chatStore.callsign_list = createCallsignListFromAPI(jsondata);
|
||||
chatStore.sorted_chat_list = createSortedMessagesList(jsondata);
|
||||
}
|
||||
}
|
||||
|
||||
function createCallsignListFromAPI(data: { total_messages: number, messages: Message[] }): {[key: string]: {timestamp: string, body: string}} {
|
||||
const callsignList: {[key: string]: {timestamp: string, body: string}} = {};
|
||||
function createCallsignListFromAPI(data: {
|
||||
total_messages: number;
|
||||
messages: Message[];
|
||||
}): { [key: string]: { timestamp: string; body: string } } {
|
||||
const callsignList: { [key: string]: { timestamp: string; body: string } } =
|
||||
{};
|
||||
|
||||
data.messages.forEach(message => {
|
||||
let callsign = message.direction === 'receive' ? message.origin : message.destination;
|
||||
data.messages.forEach((message) => {
|
||||
let callsign =
|
||||
message.direction === "receive" ? message.origin : message.destination;
|
||||
|
||||
if (!callsignList[callsign] || callsignList[callsign].timestamp < message.timestamp) {
|
||||
callsignList[callsign] = { timestamp: message.timestamp, body: message.body };
|
||||
if (
|
||||
!callsignList[callsign] ||
|
||||
callsignList[callsign].timestamp < message.timestamp
|
||||
) {
|
||||
callsignList[callsign] = {
|
||||
timestamp: message.timestamp,
|
||||
body: message.body,
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
return callsignList;
|
||||
}
|
||||
|
||||
function createSortedMessagesList(data: {
|
||||
total_messages: number;
|
||||
messages: Message[];
|
||||
}): { [key: string]: Message[] } {
|
||||
const callsignMessages: { [key: string]: Message[] } = {};
|
||||
|
||||
|
||||
function createSortedMessagesList(data: { total_messages: number, messages: Message[] }): {[key: string]: Message[]} {
|
||||
const callsignMessages: {[key: string]: Message[]} = {};
|
||||
|
||||
data.messages.forEach(message => {
|
||||
let callsign = message.direction === 'receive' ? message.origin : message.destination;
|
||||
data.messages.forEach((message) => {
|
||||
let callsign =
|
||||
message.direction === "receive" ? message.origin : message.destination;
|
||||
|
||||
if (!callsignMessages[callsign]) {
|
||||
callsignMessages[callsign] = [];
|
||||
|
@ -61,34 +73,29 @@ function createSortedMessagesList(data: { total_messages: number, messages: Mess
|
|||
return callsignMessages;
|
||||
}
|
||||
|
||||
|
||||
|
||||
export function newMessage(dxcall, body){
|
||||
sendFreedataMessage(dxcall, body)
|
||||
export function newMessage(dxcall, body) {
|
||||
sendFreedataMessage(dxcall, body);
|
||||
}
|
||||
|
||||
|
||||
/* ------ TEMPORARY DUMMY FUNCTIONS --- */
|
||||
export function repeatMessageTransmission(id){
|
||||
return
|
||||
export function repeatMessageTransmission(id) {
|
||||
return;
|
||||
}
|
||||
|
||||
export function deleteCallsignFromDB(callsign){
|
||||
for (var message of chatStore.sorted_chat_list[callsign]) {
|
||||
deleteFreedataMessage(message["id"]);
|
||||
}
|
||||
|
||||
export function deleteCallsignFromDB(callsign) {
|
||||
for (var message of chatStore.sorted_chat_list[callsign]) {
|
||||
deleteFreedataMessage(message["id"]);
|
||||
}
|
||||
}
|
||||
|
||||
export function deleteMessageFromDB(id){
|
||||
deleteFreedataMessage(id);
|
||||
export function deleteMessageFromDB(id) {
|
||||
deleteFreedataMessage(id);
|
||||
}
|
||||
|
||||
export function requestMessageInfo(id){
|
||||
return
|
||||
export function requestMessageInfo(id) {
|
||||
return;
|
||||
}
|
||||
|
||||
export function getMessageAttachment(id){
|
||||
return
|
||||
export function getMessageAttachment(id) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -2,15 +2,12 @@ import { defineStore } from "pinia";
|
|||
import { ref } from "vue";
|
||||
|
||||
export const useChatStore = defineStore("chatStore", () => {
|
||||
|
||||
var callsign_list = ref();
|
||||
var sorted_chat_list = ref();
|
||||
var newChatCallsign = ref();
|
||||
var newChatMessage = ref();
|
||||
|
||||
|
||||
|
||||
/* ------------------------------------------------ */
|
||||
/* ------------------------------------------------ */
|
||||
|
||||
var chat_filter = ref([
|
||||
{ type: "newchat" },
|
||||
|
@ -56,7 +53,6 @@ export const useChatStore = defineStore("chatStore", () => {
|
|||
var inputFileType = ref("-");
|
||||
var inputFileSize = ref("-");
|
||||
|
||||
|
||||
var sorted_beacon_list = ref({});
|
||||
var unsorted_beacon_list = ref({});
|
||||
|
||||
|
|
Loading…
Reference in a new issue