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() {
// Safety: ensure connection is shut down on page/navigation leave
this.opened = false;
if (this.pendingRoomCreateTimer) {
clearTimeout(this.pendingRoomCreateTimer);
this.pendingRoomCreateTimer = null;
}
this.disconnectChatSocket();
try { window.removeEventListener('online', this.onOnline); } catch (_) { }
try { document.removeEventListener('click', this.onGlobalClick); } catch (_) { }
@@ -314,6 +318,9 @@ export default {
roomCreateRights: [],
roomCreateTypes: [],
ownRooms: [],
pendingRoomCreateName: '',
pendingRoomCreateAttempts: 0,
pendingRoomCreateTimer: null,
// Palette state
paletteWidth: 420,
paletteHeight: 220,
@@ -387,6 +394,52 @@ export default {
resetRoomCreateForm() {
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() {
return this.buildRoomCreateCommand();
},
@@ -428,6 +481,7 @@ export default {
try {
const rooms = await fetchOwnRooms();
this.ownRooms = Array.isArray(rooms) ? rooms : [];
this.tryConfirmRoomCreateSuccess();
} catch (e) {
console.error('Failed loading own rooms', e);
this.ownRooms = [];
@@ -529,7 +583,11 @@ export default {
if (this.debug) console.log('[Chat WS >>]', payload);
this.sendWithToken(payload);
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.scheduleRoomCreateConfirmationCheck();
},
selectTargetUser(name) {
if (this.selectedTargetUser === name) {
@@ -567,6 +625,7 @@ export default {
onDialogClose() {
// Mark as closed first so any async close events won't schedule reconnect
this.opened = false;
this.clearPendingRoomCreateTracking();
console.log('[Chat WS] dialog close — closing websocket');
this.disconnectChatSocket();
// Remove network event listeners

View File

@@ -85,7 +85,9 @@
"noConnection": "Keine Verbindung zum Chat-Server.",
"invalidForm": "Bitte Eingaben im Raum-Formular korrigieren.",
"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": {
"title": "Meine erstellten Räume",

View File

@@ -85,7 +85,9 @@
"noConnection": "No connection to chat server.",
"invalidForm": "Please correct the room form inputs.",
"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": {
"title": "My created rooms",

View File

@@ -84,7 +84,9 @@
"noConnection": "Sin conexión con el servidor de chat.",
"invalidForm": "Corrige los datos del formulario 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": {
"title": "Mis salas creadas",