Skip to content

Commit 7ab955a

Browse files
ozgesolidkeyclaude
andcommitted
Improve video-log sync UX clarity (v0.7.1)
- Add help icon (ⓘ) with tooltip explaining the sync workflow - Rename "Set from line" to "🔗 Sync line ↔ video time" with primary styling so the main action is obvious - Better status messages with icons and color coding: - Success: ✓ green confirmation showing the line/time pairing - Errors: ⚠ amber warnings explaining what to do - Reorder elements so the primary button is prominent - Add local sidecar/agent state files to .gitignore Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent f71b626 commit 7ab955a

File tree

5 files changed

+50
-11
lines changed

5 files changed

+50
-11
lines changed

.gitignore

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,12 @@ test-data/
1717
# IDE
1818
.idea/
1919
.vscode/
20+
21+
# Local LOGAN sidecar / agent state
22+
.logan/
23+
nohup.out
24+
firebase-service-account.json
25+
scripts/__pycache__/
26+
scripts/*.pyc
27+
scripts/logan-agent.py
28+
scripts/poll_chat.py

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "logan",
3-
"version": "0.7.0",
3+
"version": "0.7.1",
44
"description": "AI-powered log file viewer and analyzer — handles 14M+ lines with virtual scrolling, MCP agent integration, live serial/logcat/SSH connections, pattern correlation, diff view, and built-in terminal",
55
"keywords": [
66
"log-analyzer",

src/renderer/index.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -442,11 +442,11 @@ <h2>LOGAN</h2>
442442
</div>
443443
</div>
444444
<div class="video-sync-bar">
445-
<label class="video-sync-label">Sync:</label>
446-
<input type="text" id="video-sync-input" class="video-sync-input" placeholder="Log timestamp at video start" title="Enter the log timestamp that corresponds to video start (0:00)">
447-
<button id="btn-video-sync-from-line" class="video-sync-btn" title="Sync selected line to current video time">Set from line</button>
448-
<span id="video-file-name" class="video-file-name"></span>
445+
<span class="video-sync-help" title="How to sync video and logs:&#10;1. Pause the video at a moment you can identify in the logs&#10;2. Click that line in the log viewer&#10;3. Click the 'Sync to video time' button below&#10;4. Now clicking any log line jumps the video to that moment">&#9432;</span>
446+
<button id="btn-video-sync-from-line" class="video-sync-btn primary" title="Pair the currently selected log line with the current video time">&#128279; Sync line ↔ video time</button>
447+
<input type="text" id="video-sync-input" class="video-sync-input" placeholder="or paste timestamp here" title="Enter the log timestamp that corresponds to video start (0:00)">
449448
<span id="video-sync-status" class="video-sync-status"></span>
449+
<span id="video-file-name" class="video-file-name"></span>
450450
</div>
451451
</div>
452452
</div>

src/renderer/renderer.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7307,22 +7307,25 @@ function tryParseTimestamp(text: string): number | null {
73077307

73087308
function setVideoSyncFromCurrentLine(): void {
73097309
if (state.selectedLine === null) {
7310-
elements.videoSyncStatus.textContent = 'No line selected';
7311-
setTimeout(() => { elements.videoSyncStatus.textContent = ''; }, 3000);
7310+
elements.videoSyncStatus.textContent = '⚠ Click a log line first, then click this button';
7311+
elements.videoSyncStatus.style.color = '#ffb840';
7312+
setTimeout(() => { elements.videoSyncStatus.textContent = ''; elements.videoSyncStatus.style.color = ''; }, 5000);
73127313
return;
73137314
}
73147315
window.api.getLineTimestamp(state.selectedLine).then((result) => {
73157316
if (result.epochMs === null) {
7316-
elements.videoSyncStatus.textContent = 'No timestamp found';
7317-
setTimeout(() => { elements.videoSyncStatus.textContent = ''; }, 3000);
7317+
elements.videoSyncStatus.textContent = '⚠ No timestamp found in selected line';
7318+
elements.videoSyncStatus.style.color = '#ffb840';
7319+
setTimeout(() => { elements.videoSyncStatus.textContent = ''; elements.videoSyncStatus.style.color = ''; }, 5000);
73187320
return;
73197321
}
73207322
const currentVideoTimeMs = (elements.videoElement.currentTime || 0) * 1000;
73217323
state.videoSyncOffsetMs = result.epochMs - currentVideoTimeMs;
73227324
elements.videoSyncInput.value = result.timestampStr || '';
73237325
const videoTimeStr = formatVideoTime(elements.videoElement.currentTime || 0);
7324-
elements.videoSyncStatus.textContent = 'Sync set: line ' + (state.selectedLine! + 1) + ' → ' + videoTimeStr;
7325-
setTimeout(() => { elements.videoSyncStatus.textContent = ''; }, 3000);
7326+
elements.videoSyncStatus.textContent = '✓ Synced (line ' + (state.selectedLine! + 1) + ' = ' + videoTimeStr + '). Click any line to seek.';
7327+
elements.videoSyncStatus.style.color = '#4caf50';
7328+
setTimeout(() => { elements.videoSyncStatus.textContent = ''; elements.videoSyncStatus.style.color = ''; }, 6000);
73267329
saveVideoState();
73277330
});
73287331
}

src/renderer/styles.css

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5675,6 +5675,33 @@ kbd {
56755675
color: #fff;
56765676
}
56775677

5678+
.video-sync-btn.primary {
5679+
background: var(--accent-color, #007acc);
5680+
color: #fff;
5681+
border-color: var(--accent-color, #007acc);
5682+
}
5683+
.video-sync-btn.primary:hover {
5684+
opacity: 0.9;
5685+
background: var(--accent-color, #007acc);
5686+
}
5687+
5688+
.video-sync-help {
5689+
display: inline-flex;
5690+
align-items: center;
5691+
justify-content: center;
5692+
width: 18px;
5693+
height: 18px;
5694+
border-radius: 50%;
5695+
background: rgba(255, 255, 255, 0.08);
5696+
color: var(--text-secondary);
5697+
font-size: 12px;
5698+
cursor: help;
5699+
}
5700+
.video-sync-help:hover {
5701+
background: rgba(255, 255, 255, 0.16);
5702+
color: var(--text-primary);
5703+
}
5704+
56785705
.video-sync-status {
56795706
font-size: 11px;
56805707
color: #888;

0 commit comments

Comments
 (0)