[CodeFactor] Apply fixes

This commit is contained in:
codefactor-io 2024-02-03 12:55:30 +00:00
parent 08c2b7809a
commit ba6f07407c
No known key found for this signature in database
GPG key ID: B66B2D63282C190F
17 changed files with 187 additions and 197 deletions

View file

@ -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>

View file

@ -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
@ -23,27 +18,22 @@ function chatSelected(callsign) {
}
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);
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');
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,13 +55,11 @@ function getDateTime(timestamp) {
aria-controls="list-{{callsign}}-messages"
@click="chatSelected(callsign)"
>
<div class="row">
<div class="col-9 text-truncate">
<strong>{{ callsign }}</strong>
<br>
<br />
<small> {{ details.body }} </small>
</div>
<div class="col-3">
<small> {{ getDateTime(details.timestamp) }} </small>

View file

@ -17,15 +17,18 @@ 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');
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>

View file

@ -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">
@ -99,9 +98,8 @@ export default {
},
computed: {
getFileContent() {
if (this.message.attachments.length <= 0) {
return { filename: '', filesize: 0, filetype: '' };
return { filename: "", filesize: 0, filetype: "" };
}
try {
@ -129,11 +127,10 @@ 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');
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}`;
},
},

View file

@ -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: '' };
return { filename: "", filesize: 0, filetype: "" };
}
var filename = Object.keys(this.message._attachments)[0];
@ -175,11 +176,10 @@ 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');
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}`;
},
},

View file

@ -112,7 +112,6 @@ function newChat() {
//updateAllChat(false);
this.newChatCall.value = "";
}
</script>
<template>
@ -127,8 +126,6 @@ function newChat() {
>
<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-->

View file

@ -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>

View file

@ -28,7 +28,7 @@ function getDateTime(timestampRaw) {
}
function getMaidenheadDistance(dxGrid) {
if(typeof(dxGrid) != "undefined"){
if (typeof dxGrid != "undefined") {
try {
return parseInt(distance(settings.remote.STATION.mygrid, dxGrid));
} catch (e) {

View file

@ -11,15 +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, 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 = '';
let newCallsign = chat.newChatCallsign.toUpperCase();
newMessage(newCallsign, chat.newChatMessage);
chat.newChatCallsign = "";
chat.newChatMessage = "";
}
function deleteChat() {
@ -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>
<br />
2. Enter a first message
<br>
<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>
<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>
<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
@ -382,7 +393,6 @@ const transmissionSpeedChartDataMessageInfo = computed(() => ({
</div>
</div>
<!-- HELP MODALS AUDIO -->
<div
class="modal fade"

View file

@ -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">

View file

@ -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()
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

View file

@ -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;
@ -153,8 +151,8 @@ export async function getRadioStatus() {
}
export async function getFreedataMessages() {
let res = await apiGet("/freedata/messages")
processFreedataMessages(res)
let res = await apiGet("/freedata/messages");
processFreedataMessages(res);
}
export async function sendFreedataMessage(destination, body) {

View file

@ -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";
@ -66,9 +72,9 @@ export function eventDispatcher(data) {
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
}

View file

@ -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 === "" ||

View file

@ -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"){
if (typeof data != "undefined") {
let jsondata = await JSON.parse(data);
chatStore.callsign_list = createCallsignListFromAPI(jsondata)
chatStore.sorted_chat_list = createSortedMessagesList(jsondata)
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[]} {
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,23 +73,19 @@ function createSortedMessagesList(data: { total_messages: number, messages: Mess
return callsignMessages;
}
export function newMessage(dxcall, body) {
sendFreedataMessage(dxcall, body)
sendFreedataMessage(dxcall, body);
}
/* ------ TEMPORARY DUMMY FUNCTIONS --- */
export function repeatMessageTransmission(id) {
return
return;
}
export function deleteCallsignFromDB(callsign) {
for (var message of chatStore.sorted_chat_list[callsign]) {
deleteFreedataMessage(message["id"]);
}
}
export function deleteMessageFromDB(id) {
@ -85,10 +93,9 @@ export function deleteMessageFromDB(id){
}
export function requestMessageInfo(id) {
return
return;
}
export function getMessageAttachment(id) {
return
return;
}

View file

@ -2,14 +2,11 @@ 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([
@ -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({});