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

View file

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

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

View file

@ -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}`;
},
},
};

View file

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

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

View file

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

View file

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

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

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;
@ -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}`);
}

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

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"){
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;
}

View file

@ -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({});