mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 14:59:14 +02:00
Housekeeping: data formatting
This commit is contained in:
parent
0c3fbbbeb9
commit
ae56632c64
2 changed files with 82 additions and 54 deletions
|
@ -12,6 +12,10 @@
|
||||||
(() => {
|
(() => {
|
||||||
("use strict");
|
("use strict");
|
||||||
|
|
||||||
|
Script.include([
|
||||||
|
"./formatting.js"
|
||||||
|
])
|
||||||
|
|
||||||
var appIsVisible = false;
|
var appIsVisible = false;
|
||||||
var settings = {
|
var settings = {
|
||||||
external_window: false,
|
external_window: false,
|
||||||
|
@ -94,22 +98,16 @@
|
||||||
// Is the message a chat message?
|
// Is the message a chat message?
|
||||||
channel = channel.toLowerCase();
|
channel = channel.toLowerCase();
|
||||||
if (channel !== "chat") return;
|
if (channel !== "chat") return;
|
||||||
message = JSON.parse(message);
|
|
||||||
|
if ((message = formatting.toJSON(message)) == null) return; // Make sure we are working with a JSON object we expect, otherwise kill
|
||||||
// Get the message data
|
message = formatting.addTimeAndDateStringToPacket(message);
|
||||||
const currentTimestamp = _getTimestamp();
|
|
||||||
const timeArray = _formatTimestamp(currentTimestamp);
|
|
||||||
|
|
||||||
if (!message.channel) message.channel = "domain"; // We don't know where to put this message. Assume it is a domain wide message.
|
if (!message.channel) message.channel = "domain"; // We don't know where to put this message. Assume it is a domain wide message.
|
||||||
message.channel = message.channel.toLowerCase(); // Only recognize channel names as lower case.
|
message.channel = message.channel.toLowerCase(); // Only recognize channel names as lower case.
|
||||||
|
|
||||||
if (!channels.includes(message.channel)) return; // Check the channel. If the channel is not one we have, do nothing.
|
if (!channels.includes(message.channel)) return; // Check the channel. If the channel is not one we have, do nothing.
|
||||||
if (message.channel == "local" && isTooFar(message.position)) return; // If message is local, and if player is too far away from location, do nothing.
|
if (message.channel == "local" && isTooFar(message.position)) return; // If message is local, and if player is too far away from location, do nothing.
|
||||||
|
|
||||||
// Format the timestamp
|
|
||||||
message.timeString = timeArray[0];
|
|
||||||
message.dateString = timeArray[1];
|
|
||||||
|
|
||||||
let formattedMessagePacket = { ...message };
|
let formattedMessagePacket = { ...message };
|
||||||
formattedMessagePacket.message = await _parseMessage(message.message)
|
formattedMessagePacket.message = await _parseMessage(message.message)
|
||||||
|
|
||||||
|
@ -117,24 +115,16 @@
|
||||||
_notificationCoreMessage(message.displayName, message.message) // Show a new message on screen.
|
_notificationCoreMessage(message.displayName, message.message) // Show a new message on screen.
|
||||||
|
|
||||||
// Create a new variable based on the message that will be saved.
|
// Create a new variable based on the message that will be saved.
|
||||||
let savedMessage = message;
|
let trimmedPacket = formatting.trimPacketToSave(message);
|
||||||
|
messageHistory.push(trimmedPacket);
|
||||||
|
|
||||||
// Remove unnecessary data.
|
|
||||||
delete savedMessage.position;
|
|
||||||
delete savedMessage.timeString;
|
|
||||||
delete savedMessage.dateString;
|
|
||||||
delete savedMessage.action;
|
|
||||||
|
|
||||||
savedMessage.timestamp = currentTimestamp;
|
|
||||||
|
|
||||||
messageHistory.push(savedMessage);
|
|
||||||
while (messageHistory.length > settings.maximum_messages) {
|
while (messageHistory.length > settings.maximum_messages) {
|
||||||
messageHistory.shift();
|
messageHistory.shift();
|
||||||
}
|
}
|
||||||
Settings.setValue("ArmoredChat-Messages", messageHistory);
|
Settings.setValue("ArmoredChat-Messages", messageHistory);
|
||||||
|
|
||||||
// Check to see if the message is close enough to the user
|
|
||||||
function isTooFar(messagePosition) {
|
function isTooFar(messagePosition) {
|
||||||
|
// Check to see if the message is close enough to the user
|
||||||
return Vec3.distance(MyAvatar.position, messagePosition) > maxLocalDistance;
|
return Vec3.distance(MyAvatar.position, messagePosition) > maxLocalDistance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -219,10 +209,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// Format the packet
|
// Format the packet
|
||||||
let message = {};
|
let message = addTimeAndDateStringToPacket({});
|
||||||
const timeArray = _formatTimestamp(_getTimestamp());
|
|
||||||
message.timeString = timeArray[0];
|
|
||||||
message.dateString = timeArray[1];
|
|
||||||
message.message = `${displayName} ${type}`;
|
message.message = `${displayName} ${type}`;
|
||||||
|
|
||||||
// Show new message on screen
|
// Show new message on screen
|
||||||
|
@ -243,43 +230,20 @@
|
||||||
if (messageHistory) {
|
if (messageHistory) {
|
||||||
// Load message history
|
// Load message history
|
||||||
for (message of messageHistory) {
|
for (message of messageHistory) {
|
||||||
const timeArray = _formatTimestamp(_getTimestamp());
|
messagePacket = { ...message }; // Create new variable
|
||||||
messagePacket = { ...message };
|
messagePacket = formatting.addTimeAndDateStringToPacket(messagePacket); // Add timestamp
|
||||||
messagePacket.timeString = timeArray[0];
|
messagePacket.message = await _parseMessage(messagePacket.message); // Parse the message for the UI
|
||||||
messagePacket.dateString = timeArray[1];
|
|
||||||
|
|
||||||
let formattedMessagePacket = {...messagePacket};
|
_emitEvent({ type: "show_message", ...messagePacket }); // Send message to UI
|
||||||
formattedMessagePacket.message = await _parseMessage(messagePacket.message);
|
|
||||||
|
|
||||||
_emitEvent({ type: "show_message", ...formattedMessagePacket });
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send current settings to the app
|
_emitEvent({ type: "initial_settings", settings: settings }); // Send current settings to the app
|
||||||
_emitEvent({ type: "initial_settings", settings: settings });
|
|
||||||
}
|
}
|
||||||
function _saveSettings() {
|
function _saveSettings() {
|
||||||
console.log("Saving config");
|
console.log("Saving config");
|
||||||
Settings.setValue("ArmoredChat-Config", settings);
|
Settings.setValue("ArmoredChat-Config", settings);
|
||||||
}
|
}
|
||||||
function _getTimestamp(){
|
|
||||||
return Date.now();
|
|
||||||
}
|
|
||||||
function _formatTimestamp(timestamp){
|
|
||||||
let timeArray = [];
|
|
||||||
|
|
||||||
timeArray.push(new Date().toLocaleTimeString(undefined, {
|
|
||||||
hour12: false,
|
|
||||||
}));
|
|
||||||
|
|
||||||
timeArray.push(new Date(timestamp).toLocaleDateString(undefined, {
|
|
||||||
year: "numeric",
|
|
||||||
month: "long",
|
|
||||||
day: "numeric",
|
|
||||||
}));
|
|
||||||
|
|
||||||
return timeArray;
|
|
||||||
}
|
|
||||||
function _notificationCoreMessage(displayName, message){
|
function _notificationCoreMessage(displayName, message){
|
||||||
Messages.sendLocalMessage(
|
Messages.sendLocalMessage(
|
||||||
"Floof-Notif",
|
"Floof-Notif",
|
||||||
|
|
64
scripts/system/domainChat/formatting.js
Normal file
64
scripts/system/domainChat/formatting.js
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
//
|
||||||
|
// formatting.js
|
||||||
|
//
|
||||||
|
// Created by Armored Dragon, 2024.
|
||||||
|
// Copyright 2024 Overte e.V.
|
||||||
|
//
|
||||||
|
// This just does some basic formatting and minor housekeeping for the domainChat.js application
|
||||||
|
//
|
||||||
|
// Distributed under the Apache License, Version 2.0.
|
||||||
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
|
||||||
|
const formatting = {
|
||||||
|
toJSON: function(data) {
|
||||||
|
if (typeof data == "object") return data; // Already JSON
|
||||||
|
|
||||||
|
try {
|
||||||
|
const parsedData = JSON.parse(data);
|
||||||
|
return parsedData;
|
||||||
|
} catch (e) {
|
||||||
|
console.log('Failed to convert data to JSON.')
|
||||||
|
return null; // Could not convert to json, some error;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
addTimeAndDateStringToPacket: function(packet) {
|
||||||
|
// Gets the current time and adds it to a given packet
|
||||||
|
const timeArray = formatting.helpers._timestampArray(packet.timestamp);
|
||||||
|
packet.timeString = timeArray[0];
|
||||||
|
packet.dateString = timeArray[1];
|
||||||
|
return packet;
|
||||||
|
},
|
||||||
|
trimPacketToSave: function(packet) {
|
||||||
|
// Takes a packet, and returns a packet containing only what is needed to save.
|
||||||
|
let newPacket = {
|
||||||
|
channel: packet.channel || "",
|
||||||
|
displayName: packet.displayName || "",
|
||||||
|
message: packet.message || "",
|
||||||
|
timestamp: packet.timestamp || formatting.helpers.getTimestamp(),
|
||||||
|
};
|
||||||
|
return newPacket;
|
||||||
|
},
|
||||||
|
|
||||||
|
helpers: {
|
||||||
|
// Small functions that are used often in the other functions.
|
||||||
|
_timestampArray: function(timestamp) {
|
||||||
|
const currentDate = timestamp || formatting.helpers.getTimestamp();
|
||||||
|
let timeArray = [];
|
||||||
|
|
||||||
|
timeArray.push(new Date(currentDate).toLocaleTimeString(undefined, {
|
||||||
|
hour12: false,
|
||||||
|
}));
|
||||||
|
|
||||||
|
timeArray.push(new Date(currentDate).toLocaleDateString(undefined, {
|
||||||
|
year: "numeric",
|
||||||
|
month: "long",
|
||||||
|
day: "numeric",
|
||||||
|
}));
|
||||||
|
|
||||||
|
return timeArray;
|
||||||
|
},
|
||||||
|
getTimestamp: function(){
|
||||||
|
return Date.now();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue