...
@@ -825,6 +830,7 @@
Select Your Language
// Apply new-message class to the newest items (at the start after reverse)
const isNew = index < newCount;
itemDiv.className = isNew ? 'translation-item new-message' : 'translation-item';
+ if (item.speaker) itemDiv.dataset.speaker = item.speaker;
const timeDiv = document.createElement('div');
timeDiv.className = 'time';
@@ -835,6 +841,15 @@
Select Your Language
hour12: false
});
+ // Speaker name line (prominent, colored)
+ if (item.speaker) {
+ const speakerDiv = document.createElement('div');
+ speakerDiv.className = 'speaker';
+ speakerDiv.style.cssText = 'font-weight:600; color:#8b5cf6; font-size:13px; margin-bottom:2px;';
+ speakerDiv.textContent = item.speaker;
+ itemDiv.appendChild(speakerDiv);
+ }
+
const textDiv = document.createElement('div');
textDiv.className = 'text';
textDiv.textContent = item.text;
@@ -896,6 +911,7 @@
Select Your Language
newSegments.forEach(segment => {
displayedTranslations.push({
text: segment.text,
+ speaker: segment.speaker || null,
timestamp: Date.now()
});
});
@@ -1046,6 +1062,30 @@
Select Your Language
document.getElementById('connectionStatus').textContent = 'Disconnected';
});
+ // Retroactively rename SPEAKER_XX labels to real names for already-displayed segments.
+ socket.on('rename_speaker', (data) => {
+ if (!data || !data.speaker_id || !data.name) return;
+ let dirty = false;
+ displayedTranslations.forEach(item => {
+ if (item.speaker === data.speaker_id) { item.speaker = data.name; dirty = true; }
+ });
+ if (dirty) renderTranslations(0);
+ });
+
+ // Live "who is currently speaking" banner.
+ socket.on('active_speakers', (data) => {
+ const banner = document.getElementById('activeSpeakerBanner');
+ const text = document.getElementById('activeSpeakerText');
+ if (!banner || !text) return;
+ const names = (data && data.speakers) || [];
+ if (names.length === 0) {
+ banner.style.display = 'none';
+ } else {
+ banner.style.display = 'block';
+ text.textContent = `Speaking: ${names.join(', ')}`;
+ }
+ });
+
socket.io.on('reconnect_attempt', (attemptNumber) => {
reconnectAttempts = attemptNumber;
document.getElementById('connectionDot').className = 'status-dot reconnecting';