Martechsol commited on
Commit
3944045
·
1 Parent(s): d58c972

Fix admin panel showing 'default name': update user_name in-place on rename, improve session list display

Browse files
app/admin/templates/admin.html CHANGED
@@ -1002,16 +1002,22 @@
1002
  $('session-list').innerHTML = '<div class="no-sessions">No sessions yet.</div>';
1003
  return;
1004
  }
1005
- $('session-list').innerHTML = sessions.map(s => `
1006
- <div class="session-item${s.session_id === _activeId ? ' active' : ''}"
1007
- data-id="${s.session_id}">
1008
- <div class="session-item-id" title="${s.user_name || s.session_id}">${s.user_name || shortId(s.session_id)}</div>
1009
- <div class="session-item-meta">
1010
- <span class="session-item-time">${fmtDate(s.last_active)}</span>
1011
- <span class="session-item-count">${s.message_count || 0} msg${s.message_count !== 1 ? 's' : ''}</span>
 
 
 
 
 
 
1012
  </div>
1013
- </div>
1014
- `).join('');
1015
  document.querySelectorAll('.session-item').forEach(el => {
1016
  el.addEventListener('click', () => openSession(el.dataset.id));
1017
  });
@@ -1019,7 +1025,10 @@
1019
 
1020
  $('search-inp').addEventListener('input', e => {
1021
  const q = e.target.value.toLowerCase();
1022
- const filtered = _allSessions.filter(s => s.session_id.toLowerCase().includes(q));
 
 
 
1023
  renderSidebar(filtered);
1024
  });
1025
 
 
1002
  $('session-list').innerHTML = '<div class="no-sessions">No sessions yet.</div>';
1003
  return;
1004
  }
1005
+ $('session-list').innerHTML = sessions.map(s => {
1006
+ const isDefault = !s.user_name || s.user_name === 'default name' || s.user_name === 'default_name';
1007
+ const displayName = isDefault
1008
+ ? (s.session_id || '').replace(/_/g, ' ').trim() || shortId(s.session_id)
1009
+ : s.user_name;
1010
+ return `
1011
+ <div class="session-item${s.session_id === _activeId ? ' active' : ''}"
1012
+ data-id="${s.session_id}">
1013
+ <div class="session-item-id" title="${displayName}">${displayName}</div>
1014
+ <div class="session-item-meta">
1015
+ <span class="session-item-time">${fmtDate(s.last_active)}</span>
1016
+ <span class="session-item-count">${s.message_count || 0} msg${s.message_count !== 1 ? 's' : ''}</span>
1017
+ </div>
1018
  </div>
1019
+ `;
1020
+ }).join('');
1021
  document.querySelectorAll('.session-item').forEach(el => {
1022
  el.addEventListener('click', () => openSession(el.dataset.id));
1023
  });
 
1025
 
1026
  $('search-inp').addEventListener('input', e => {
1027
  const q = e.target.value.toLowerCase();
1028
+ const filtered = _allSessions.filter(s =>
1029
+ s.session_id.toLowerCase().includes(q) ||
1030
+ (s.user_name || '').toLowerCase().includes(q)
1031
+ );
1032
  renderSidebar(filtered);
1033
  });
1034
 
app/services/session_store.py CHANGED
@@ -237,6 +237,25 @@ async def rename_session(old_id: str, new_name: str) -> str:
237
  counter += 1
238
 
239
  if new_id == old_id:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
240
  return old_id
241
 
242
  # Lock both IDs to prevent race conditions during move
 
237
  counter += 1
238
 
239
  if new_id == old_id:
240
+ # Same filename — still update user_name in the JSON if it has changed.
241
+ # Without this, sessions whose file is already correctly named keep
242
+ # user_name = "default name" forever (the early return skips the update).
243
+ update_lock = await _get_lock(old_id)
244
+ async with update_lock:
245
+ try:
246
+ if old_path.exists():
247
+ data = await asyncio.to_thread(_read_json, old_path)
248
+ if data.get("user_name") != new_name:
249
+ data["user_name"] = new_name
250
+ await asyncio.to_thread(_write_json, old_path, data)
251
+ logger.info(
252
+ "session_store: updated user_name in-place for %s → '%s'",
253
+ old_id, new_name
254
+ )
255
+ except Exception as exc:
256
+ logger.error(
257
+ "session_store: failed to update user_name for %s: %s", old_id, exc
258
+ )
259
  return old_id
260
 
261
  # Lock both IDs to prevent race conditions during move