This commit is contained in:
parent
6c7b94adce
commit
528813d4a0
6 changed files with 33 additions and 4 deletions
26
TODO.md
Normal file
26
TODO.md
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
# Clio TODO
|
||||||
|
|
||||||
|
## Audio Player Issues
|
||||||
|
- [ ] Short audio files show wrong duration (e.g., shows 1 second instead of 13 seconds)
|
||||||
|
- Progress bar doesn't move for these
|
||||||
|
- Can't seek
|
||||||
|
- Need to investigate why audioDuration isn't being set correctly for short files
|
||||||
|
|
||||||
|
- [ ] Hard to click on audio controls for small recordings
|
||||||
|
- Add proper prev/next buttons for navigation
|
||||||
|
- Make clickable area larger
|
||||||
|
|
||||||
|
## URL Routing Issue
|
||||||
|
- [ ] URL shows `#/detail` instead of `#/recording/{id}`
|
||||||
|
- Loses recording info on refresh
|
||||||
|
- Need to debug why buildHash isn't being called or URL isn't updating
|
||||||
|
|
||||||
|
## Security (Completed)
|
||||||
|
- [x] Add API key authentication to all endpoints
|
||||||
|
- [x] UI prompts for API key and stores in localStorage
|
||||||
|
- [x] Audio fetched via authenticated blob URL
|
||||||
|
|
||||||
|
## Deployment
|
||||||
|
- [x] Forgejo workflow for UI deployment
|
||||||
|
- [x] Forgejo workflow for API deployment (needs sudo permission for restart)
|
||||||
|
- [ ] Add sudoers rule for gitea-runner to restart phone-recorder
|
||||||
4
another_todo.txt
Normal file
4
another_todo.txt
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
add echo service for testing
|
||||||
|
add a food diary
|
||||||
|
google drive plugin
|
||||||
|
|
@ -101,7 +101,7 @@ function Dashboard({ data, setView, setSelectedDay, setSelectedRecording }) {
|
||||||
<div style={{ fontSize: 11, color: 'var(--text3)', textTransform: 'uppercase', letterSpacing: '0.08em', fontFamily: 'var(--font-mono)', marginBottom: 14 }}>Recent Recordings</div>
|
<div style={{ fontSize: 11, color: 'var(--text3)', textTransform: 'uppercase', letterSpacing: '0.08em', fontFamily: 'var(--font-mono)', marginBottom: 14 }}>Recent Recordings</div>
|
||||||
<div style={{ display: 'flex', flexDirection: 'column', gap: 2 }}>
|
<div style={{ display: 'flex', flexDirection: 'column', gap: 2 }}>
|
||||||
{recent.map(r => (
|
{recent.map(r => (
|
||||||
<RecordingRow key={r.id} recording={r} onClick={() => { setSelectedRecording(r); setView('detail'); }} />
|
<RecordingRow key={r.id} recording={r} onClick={() => setSelectedRecording(r)} />
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -159,7 +159,7 @@ function DayView({ data, selectedDay, setSelectedDay, setSelectedRecording, setV
|
||||||
{dayRecs.length === 0 ? (
|
{dayRecs.length === 0 ? (
|
||||||
<div style={{ color: 'var(--text3)', fontFamily: 'var(--font-mono)', fontSize: 12, marginTop: 20 }}>No recordings this day.</div>
|
<div style={{ color: 'var(--text3)', fontFamily: 'var(--font-mono)', fontSize: 12, marginTop: 20 }}>No recordings this day.</div>
|
||||||
) : (
|
) : (
|
||||||
<DayTimeline recordings={dayRecs} onSelect={r => { setSelectedRecording(r); setView('detail'); }} />
|
<DayTimeline recordings={dayRecs} onSelect={r => setSelectedRecording(r)} />
|
||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,6 @@ function HighlightsView({ data, highlights, setSelectedRecording, setView }) {
|
||||||
if (rec) {
|
if (rec) {
|
||||||
// Pass the highlight's startSeconds to seek to that position
|
// Pass the highlight's startSeconds to seek to that position
|
||||||
setSelectedRecording(rec, highlight.startSeconds);
|
setSelectedRecording(rec, highlight.startSeconds);
|
||||||
setView('detail');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -129,7 +129,7 @@ function SearchView({ data, setSelectedRecording, setView }) {
|
||||||
query={query}
|
query={query}
|
||||||
highlightText={highlightText}
|
highlightText={highlightText}
|
||||||
formatTime={formatTime}
|
formatTime={formatTime}
|
||||||
onOpen={(seekTime) => { setSelectedRecording(recording, seekTime); setView('detail'); }}
|
onOpen={(seekTime) => setSelectedRecording(recording, seekTime)}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue