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 +19 -10
- app/services/session_store.py +19 -0
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 |
-
|
| 1007 |
-
|
| 1008 |
-
|
| 1009 |
-
|
| 1010 |
-
|
| 1011 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1012 |
</div>
|
| 1013 |
-
|
| 1014 |
-
|
| 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 =>
|
|
|
|
|
|
|
|
|
|
| 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
|