Stability changes
Some checks failed
test / run-tests-client (push) Successful in 18s
test / run-tests-backend (push) Failing after 14s

This commit is contained in:
BinarySandia04 2024-10-21 19:36:34 +02:00
parent 2a12f70c91
commit 140700251d
15 changed files with 75 additions and 74 deletions

View File

@ -17,6 +17,8 @@ router.post('/create', (req, res) => {
name, name,
system system
} = req.body; } = req.body;
console.log(name)
console.log(system)
if(!(name && system)){ if(!(name && system)){
res.json({ res.json({

View File

@ -151,7 +151,7 @@ class BackendModule {
// scope => ['campaign'] // scope => ['campaign']
// coses que es necessiten verificar a tots els models // coses que es necessiten verificar a tots els models
// i s'agafa de req.query // i s'agafa de req.query
createModelRoutes(model, scope = []){ createModelRoutes(model, scope = ['campaign']){
this.router.get(`/${model.name}/list`, (req, res) => { this.router.get(`/${model.name}/list`, (req, res) => {
let query = {} let query = {}
scope.forEach(k => query[k] = req.query[k]); scope.forEach(k => query[k] = req.query[k]);
@ -183,7 +183,7 @@ class BackendModule {
scope.forEach(k => query[k] = req.query[k]); scope.forEach(k => query[k] = req.query[k]);
query['_id'] = req.query.id; query['_id'] = req.query.id;
model.findOneAndUpdate(query, req.body.data).then(data => { model.findOneAndUpdate(query, req.body.data).then(data => {
if(req.query.fireUpdate) this.socket.emit(query['campaign'], `update-${model.name}-all`); this.socket.emit(query['campaign'], `update-${model.name}-all`);
this.socket.emit(query['campaign'], `update-${model.name}`, req.query.id); this.socket.emit(query['campaign'], `update-${model.name}`, req.query.id);
res.json({status: 'ok'}); res.json({status: 'ok'});
}) })
@ -194,7 +194,7 @@ class BackendModule {
scope.forEach(k => query[k] = req.query[k]); scope.forEach(k => query[k] = req.query[k]);
query['_id'] = req.query.id; query['_id'] = req.query.id;
model.deleteOne(query).then(data => { model.deleteOne(query).then(data => {
if(req.query.fireUpdate) this.socket.emit(query['campaign'], `update-${model.name}-all`); this.socket.emit(query['campaign'], `update-${model.name}-all`);
this.socket.emit(query['campaign'], `update-${model.name}`, req.query.id); this.socket.emit(query['campaign'], `update-${model.name}`, req.query.id);
res.json({status: 'ok'}); res.json({status: 'ok'});
}); });

View File

@ -2,12 +2,12 @@ import './assets/main.css'
import './assets/prism.css' import './assets/prism.css'
import { createApp, defineComponent, reactive } from 'vue' import { createApp, defineComponent, reactive } from 'vue'
import { createI18n } from 'vue-i18n' import i18n from '@/services/i18n'
import App from './App.vue' import App from './App.vue'
import router from './router' import router from './router'
import mitt from 'mitt'; import mitt from 'mitt';
import { GetUser, GetUserSetting, LogoutUser } from './services/User'
const emitter = mitt(); const emitter = mitt();
const app = createApp(App); const app = createApp(App);
@ -24,31 +24,6 @@ app.config.globalProperties.rollWindows = {
console.clear(); console.clear();
console.log("%cLoaded!!!", "color: #22ff22; font-size: 24px"); console.log("%cLoaded!!!", "color: #22ff22; font-size: 24px");
// Determinem el locale
let locale = 'en-US';
let supportedLocales = ['en-US', 'es-ES', 'ca'];
let navLocale = window.navigator.language;
if(supportedLocales.includes(navLocale)) locale = navLocale;
try {
if(GetUser()) locale = await GetUserSetting('lang');
} catch(ex) {
LogoutUser();
}
const i18n = createI18n({
legacy: false,
locale,
fallbackLocale: 'en-US',
messages: {
'en-US': (await import(`./locales/en-US.json`)).default,
'es-ES': (await import(`./locales/es-ES.json`)).default,
'ca': (await import(`./locales/ca.json`)).default,
}
});
app.use(router) app.use(router)
app.use(i18n); app.use(i18n);

View File

@ -8,8 +8,9 @@ import * as _Tooltip from "@/services/Tooltip"
import * as _Windows from "@/services/Windows" import * as _Windows from "@/services/Windows"
import Server from '@/services/Server'; import Server from '@/services/Server';
import { socket } from '@/services/Socket'; import { socket } from '@/services/Socket';
const { t } = useI18n() import i18n from '@/services/i18n'
const { t } = i18n.global
/** /**
* Class for managing the client api * Class for managing the client api
* @hideconstructor * @hideconstructor
@ -175,7 +176,8 @@ class ClientModule {
this.#_previewData = data; this.#_previewData = data;
} }
set onInit(init){ this.#_init = (campaign) => { set onInit(init){
this.#_init = (campaign) => {
this.#_campaign = campaign; this.#_campaign = campaign;
this.#_router._setParam("campaign", campaign._id); this.#_router._setParam("campaign", campaign._id);
init(); init();

View File

@ -12,7 +12,7 @@ function LaunchGame(){
function ExitGame(){ function ExitGame(){
inGameRef.value = false; inGameRef.value = false;
GetCampaignModule().exit(); if(GetCampaignModule().exit) GetCampaignModule().exit();
} }
export { export {

View File

@ -0,0 +1,30 @@
import { createI18n } from 'vue-i18n'
import { GetUser, GetUserSetting, LogoutUser } from '@/services/User'
// Determinem el locale
let locale = 'en-US';
let supportedLocales = ['en-US', 'es-ES', 'ca'];
let navLocale = window.navigator.language;
if(supportedLocales.includes(navLocale)) locale = navLocale;
try {
if(GetUser()) locale = await GetUserSetting('lang');
} catch(ex) {
LogoutUser();
}
const i18n = createI18n({
legacy: false,
locale,
fallbackLocale: 'en-US',
messages: {
'en-US': (await import(`../locales/en-US.json`)).default,
'es-ES': (await import(`../locales/es-ES.json`)).default,
'ca': (await import(`../locales/ca.json`)).default,
}
});
export default i18n;

View File

@ -14,9 +14,10 @@ let windowId = props.windowId;
function DisplaySystemSelector(){ function DisplaySystemSelector(){
CreateChildWindow(windowId, 'system_selector', {'done': (data) => { CreateChildWindow(windowId, 'system_selector', {'done': (data) => {
let module = GetModule(data.selected); let module = GetModule(data.selected);
console.log(module);
selectedSystem.value = data.selected; selectedSystem.value = data.selected;
selectedImage.value.src = `modules/${module.id}/icon.png`; selectedImage.value.src = `plugins/${module.id}/icon.png`;
systemTitle.value = module.title; systemTitle.value = module.previewData.title;
ClearWindow('system-selector'); ClearWindow('system-selector');
}}); }});
} }

View File

@ -26,23 +26,13 @@ onMounted(() => {
SetupHandle(id, handle); SetupHandle(id, handle);
SetSize(id, {width: 350, height: 240}); SetSize(id, {width: 350, height: 240});
ResetPosition(id, "center"); ResetPosition(id, "center");
GetEmitter().on('select', (system_id) => Select(system_id))
console.log(system);
}); });
function Select(system_id){
system = system_id;
try {
systemSelector.value.selectedSystem = system_id;
} catch {}
}
function NewCampaign(){ function NewCampaign(){
Server().post('/campaign/create', { Server().post('/campaign/create', {
name: campaignName.value, name: campaignName.value,
system system: systemSelector.value.selectedSystem
}).then((response) => { }).then((response) => {
if(response.data.status == "error"){ if(response.data.status == "error"){
errorMessage.value = response.data.msg; errorMessage.value = response.data.msg;

View File

@ -10,10 +10,14 @@ function Main(api){
let itemModel = Api.createModel("item", { let itemModel = Api.createModel("item", {
name: { type: "String", required: true, default: "New item"}, name: { type: "String", required: true, default: "New item"},
description: { type: "String", default: "New description" },
type: { type: "String", required: true, default: "Item" }, type: { type: "String", required: true, default: "Item" },
info: { type: "Object" }, // For preview only icon: { type: "String" },
data: { type: "Object" }, // Advanced item rarity: { type: "String", default: "" },
book: { type: "ObjectId", ref: "Book"} quantity: { type: "Number", default: "1" },
weight: { type: "Number", default: "0" },
price: { type: "Number", default: "0" },
data: { type: "Object" }, // Advanced properties depending on item type
}); });
let entityDataModel = Api.createModel('entitydata', { let entityDataModel = Api.createModel('entitydata', {

View File

@ -58,7 +58,7 @@ function Main(Api){
}); });
dndModule.socket.on('update-concepts', () => { dndModule.socket.on('update-item-all', () => {
FetchConcepts(); FetchConcepts();
}); });

View File

@ -75,18 +75,18 @@ function ElementContext(element){
} }
function ElementTooltip(element){ function ElementTooltip(element){
let descHtml = GetKey(element, 'info.description'); let descHtml = GetKey(element, 'description');
if(descHtml) descHtml = marked.parse(descHtml); if(descHtml) descHtml = marked.parse(descHtml);
else descHtml = ''; else descHtml = '';
return `<div class='document item'> return `<div class='document item'>
<h2>${element.name}</h2> <h2>${element.name}</h2>
<img src='${GetKey(element, "info.icon")}'></img> <img src='${GetKey(element, "icon")}'></img>
<div class='document'>${descHtml}</div> <div class='document'>${descHtml}</div>
</div>`; </div>`;
} }
function ElementIcon(element){ function ElementIcon(element){
return GetKey(element, "info.icon") ? GetKey(element, "info.icon") : 'icons/game-icons/ffffff/lorc/crossed-swords.svg' return GetKey(element, "icon") ? GetKey(element, "icon") : 'icons/game-icons/ffffff/lorc/crossed-swords.svg'
} }
</script> </script>

View File

@ -75,18 +75,13 @@ let oldInfo;
function Upload(){ function Upload(){
let params = {id: concept.value._id}; let params = {id: concept.value._id};
if(oldInfo != concept.value.info){
params['fireUpdate'] = true;
oldInfo = structuredClone(concept.value.info);
}
dndModule.router.put('/item/update', params, {data: concept.value}).then(response => { dndModule.router.put('/item/update', params, {data: concept.value}).then(response => {
// console.log(response); // console.log(response);
}); });
} }
function SetParam(param, value){ function SetParam(param, value){
SetKey(concept.value, `info.${param}`, value); SetKey(concept.value, `${param}`, value);
Upload(); Upload();
} }
@ -106,14 +101,14 @@ function InitValues(){
let rarities = GenRarities(); let rarities = GenRarities();
let weapon_types = GenTypes(["", "Melee", "Ranged", "Martial Melee", "Martial Ranged", "Natural", "Improvised", "Siege Weapon"]); let weapon_types = GenTypes(["", "Melee", "Ranged", "Martial Melee", "Martial Ranged", "Natural", "Improvised", "Siege Weapon"]);
icon_selector.value.icon = GetKey(concept.value, "info.icon"); icon_selector.value.icon = GetKey(concept.value, "icon");
rarity.value.innerHTML = `<span class='important ${GetKey(concept.value, "info.rarity") ? GetKey(concept.value, "info.rarity").replace(/\s+/g, '-').toLowerCase() : ""}'>${GetKey(concept.value, "info.rarity")}</span>`; rarity.value.innerHTML = `<span class='important ${GetKey(concept.value, "rarity") ? GetKey(concept.value, "rarity").replace(/\s+/g, '-').toLowerCase() : ""}'>${GetKey(concept.value, "rarity")}</span>`;
weaponType.value.innerHTML = `<span class='important'>${GetKey(concept.value, "info.weapon_type")}</span>`; weaponType.value.innerHTML = `<span class='important'>${GetKey(concept.value, "info.weapon_type")}</span>`;
description.value.text = GetKey(concept.value, "info.description"); description.value.text = GetKey(concept.value, "description");
properties.value.selected = GetKey(concept.value, "info.properties"); properties.value.selected = GetKey(concept.value, "info.properties");
quantity.value.Set(GetKey(concept.value, "info.quantity")); quantity.value.Set(GetKey(concept.value, "quantity"));
weight.value.Set(GetKey(concept.value, "info.weight")); weight.value.Set(GetKey(concept.value, "weight"));
price.value.Set(GetKey(concept.value, "info.price")); price.value.Set(GetKey(concept.value, "price"));
item_type_name.value = GetKey(concept.value, "type"); item_type_name.value = GetKey(concept.value, "type");
item_name.value.innerHTML = GetKey(concept.value, "name"); item_name.value.innerHTML = GetKey(concept.value, "name");

View File

@ -2,15 +2,15 @@
"id": "weapon/test_weapon", "id": "weapon/test_weapon",
"value": { "value": {
"name": "Test datagen weapon", "name": "Test datagen weapon",
"type": "Weapon", "description": "Test test test",
"data": {},
"info": {
"icon": "icons/weapons/ammunition/shot-round-blue.webp", "icon": "icons/weapons/ammunition/shot-round-blue.webp",
"weapon_type": "Natural", "type": "Weapon",
"rarity": "Rare", "rarity": "Rare",
"quantity": "1", "quantity": "1",
"weight": "10", "weight": "10",
"price": "10", "price": "10",
"data": {
"weapon_type": "Natural",
"properties": [ "properties": [
"Finesse" "Finesse"
] ]

View File

@ -2,5 +2,6 @@
"package": "dnd-5e", "package": "dnd-5e",
"id": "dnd-5e-base", "id": "dnd-5e-base",
"name": "info.name", "name": "info.name",
"desc": "info.description" "desc": "info.description",
"dependencies": []
} }

View File

@ -22,5 +22,6 @@
"desc": "module.desc", "desc": "module.desc",
"icon": "icon.png" "icon": "icon.png"
} }
] ],
"dependencies": []
} }