Enhance room creation tracking in MultiChatDialog: Implement logic to confirm room creation success, manage pending room creation attempts, and clear tracking on dialog close. Update i18n files with new localized messages for room creation status.

This commit is contained in:
Torsten Schulz (local)
2026-03-04 23:28:54 +01:00
parent 190cf626f9
commit a117bad342
4 changed files with 68 additions and 3 deletions

View File

@@ -267,6 +267,10 @@ export default {
beforeUnmount() { beforeUnmount() {
// Safety: ensure connection is shut down on page/navigation leave // Safety: ensure connection is shut down on page/navigation leave
this.opened = false; this.opened = false;
if (this.pendingRoomCreateTimer) {
clearTimeout(this.pendingRoomCreateTimer);
this.pendingRoomCreateTimer = null;
}
this.disconnectChatSocket(); this.disconnectChatSocket();
try { window.removeEventListener('online', this.onOnline); } catch (_) { } try { window.removeEventListener('online', this.onOnline); } catch (_) { }
try { document.removeEventListener('click', this.onGlobalClick); } catch (_) { } try { document.removeEventListener('click', this.onGlobalClick); } catch (_) { }
@@ -314,6 +318,9 @@ export default {
roomCreateRights: [], roomCreateRights: [],
roomCreateTypes: [], roomCreateTypes: [],
ownRooms: [], ownRooms: [],
pendingRoomCreateName: '',
pendingRoomCreateAttempts: 0,
pendingRoomCreateTimer: null,
// Palette state // Palette state
paletteWidth: 420, paletteWidth: 420,
paletteHeight: 220, paletteHeight: 220,
@@ -387,6 +394,52 @@ export default {
resetRoomCreateForm() { resetRoomCreateForm() {
this.roomCreateForm = this.getDefaultRoomCreateForm(); this.roomCreateForm = this.getDefaultRoomCreateForm();
}, },
clearPendingRoomCreateTracking() {
if (this.pendingRoomCreateTimer) {
clearTimeout(this.pendingRoomCreateTimer);
this.pendingRoomCreateTimer = null;
}
this.pendingRoomCreateName = '';
this.pendingRoomCreateAttempts = 0;
},
roomNamesEqual(a, b) {
return (a || '').trim().toLowerCase() === (b || '').trim().toLowerCase();
},
tryConfirmRoomCreateSuccess() {
if (!this.pendingRoomCreateName) return false;
const created = this.ownRooms.find((r) => this.roomNamesEqual(r.title, this.pendingRoomCreateName));
if (!created) return false;
this.messages.push({
id: Date.now(),
user: 'System',
text: this.$t('chat.multichat.createRoom.messages.created', { room: created.title || this.pendingRoomCreateName })
});
this.clearPendingRoomCreateTracking();
return true;
},
scheduleRoomCreateConfirmationCheck() {
if (!this.pendingRoomCreateName) return;
if (this.pendingRoomCreateAttempts >= 6) {
this.messages.push({
id: Date.now(),
user: 'System',
text: this.$t('chat.multichat.createRoom.messages.createNotConfirmed', { room: this.pendingRoomCreateName })
});
this.clearPendingRoomCreateTracking();
return;
}
if (this.pendingRoomCreateTimer) {
clearTimeout(this.pendingRoomCreateTimer);
this.pendingRoomCreateTimer = null;
}
this.pendingRoomCreateTimer = setTimeout(async () => {
this.pendingRoomCreateAttempts += 1;
await this.loadOwnRooms();
if (!this.tryConfirmRoomCreateSuccess()) {
this.scheduleRoomCreateConfirmationCheck();
}
}, 1200);
},
buildRoomCreateCommandPreview() { buildRoomCreateCommandPreview() {
return this.buildRoomCreateCommand(); return this.buildRoomCreateCommand();
}, },
@@ -428,6 +481,7 @@ export default {
try { try {
const rooms = await fetchOwnRooms(); const rooms = await fetchOwnRooms();
this.ownRooms = Array.isArray(rooms) ? rooms : []; this.ownRooms = Array.isArray(rooms) ? rooms : [];
this.tryConfirmRoomCreateSuccess();
} catch (e) { } catch (e) {
console.error('Failed loading own rooms', e); console.error('Failed loading own rooms', e);
this.ownRooms = []; this.ownRooms = [];
@@ -529,7 +583,11 @@ export default {
if (this.debug) console.log('[Chat WS >>]', payload); if (this.debug) console.log('[Chat WS >>]', payload);
this.sendWithToken(payload); this.sendWithToken(payload);
this.messages.push({ id: Date.now(), user: 'System', text: this.$t('chat.multichat.createRoom.messages.sent', { command }) }); this.messages.push({ id: Date.now(), user: 'System', text: this.$t('chat.multichat.createRoom.messages.sent', { command }) });
this.clearPendingRoomCreateTracking();
this.pendingRoomCreateName = (this.roomCreateForm.roomName || '').trim();
this.pendingRoomCreateAttempts = 0;
this.requestRoomRefreshAfterCreate(); this.requestRoomRefreshAfterCreate();
this.scheduleRoomCreateConfirmationCheck();
}, },
selectTargetUser(name) { selectTargetUser(name) {
if (this.selectedTargetUser === name) { if (this.selectedTargetUser === name) {
@@ -567,6 +625,7 @@ export default {
onDialogClose() { onDialogClose() {
// Mark as closed first so any async close events won't schedule reconnect // Mark as closed first so any async close events won't schedule reconnect
this.opened = false; this.opened = false;
this.clearPendingRoomCreateTracking();
console.log('[Chat WS] dialog close — closing websocket'); console.log('[Chat WS] dialog close — closing websocket');
this.disconnectChatSocket(); this.disconnectChatSocket();
// Remove network event listeners // Remove network event listeners

View File

@@ -85,7 +85,9 @@
"noConnection": "Keine Verbindung zum Chat-Server.", "noConnection": "Keine Verbindung zum Chat-Server.",
"invalidForm": "Bitte Eingaben im Raum-Formular korrigieren.", "invalidForm": "Bitte Eingaben im Raum-Formular korrigieren.",
"roomNameMissing": "Bitte einen Raumnamen angeben.", "roomNameMissing": "Bitte einen Raumnamen angeben.",
"sent": "Raum-Erstellung gesendet: {command}" "sent": "Raum-Erstellung gesendet: {command}",
"created": "Raum \"{room}\" wurde erfolgreich erstellt.",
"createNotConfirmed": "Raum \"{room}\" wurde noch nicht bestätigt. Bitte Raumliste prüfen."
}, },
"ownedRooms": { "ownedRooms": {
"title": "Meine erstellten Räume", "title": "Meine erstellten Räume",

View File

@@ -85,7 +85,9 @@
"noConnection": "No connection to chat server.", "noConnection": "No connection to chat server.",
"invalidForm": "Please correct the room form inputs.", "invalidForm": "Please correct the room form inputs.",
"roomNameMissing": "Please enter a room name.", "roomNameMissing": "Please enter a room name.",
"sent": "Room creation sent: {command}" "sent": "Room creation sent: {command}",
"created": "Room \"{room}\" was created successfully.",
"createNotConfirmed": "Room \"{room}\" is not confirmed yet. Please check room list."
}, },
"ownedRooms": { "ownedRooms": {
"title": "My created rooms", "title": "My created rooms",

View File

@@ -84,7 +84,9 @@
"noConnection": "Sin conexión con el servidor de chat.", "noConnection": "Sin conexión con el servidor de chat.",
"invalidForm": "Corrige los datos del formulario de sala.", "invalidForm": "Corrige los datos del formulario de sala.",
"roomNameMissing": "Introduce un nombre de sala.", "roomNameMissing": "Introduce un nombre de sala.",
"sent": "Creación de sala enviada: {command}" "sent": "Creación de sala enviada: {command}",
"created": "La sala \"{room}\" se ha creado correctamente.",
"createNotConfirmed": "La sala \"{room}\" aún no está confirmada. Revisa la lista de salas."
}, },
"ownedRooms": { "ownedRooms": {
"title": "Mis salas creadas", "title": "Mis salas creadas",