Compare commits

...

6 Commits

4 changed files with 13 additions and 42 deletions
+1 -1
View File
@@ -1 +1 @@
0.1.1.7
0.1.1.10
+3 -3
View File
@@ -8,7 +8,7 @@ server {
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(self), geolocation=(self), microphone=(self)" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://plausible.elpatron.me; connect-src 'self' https://plausible.elpatron.me; img-src 'self' data: blob: https://*.tile.openstreetmap.org; style-src 'self' 'unsafe-inline'; font-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self';" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://plausible.elpatron.me; connect-src 'self' https://plausible.elpatron.me; img-src 'self' data: blob: https://*.tile.openstreetmap.org; media-src 'self' blob: data:; style-src 'self' 'unsafe-inline'; font-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self';" always;
# Service worker and app shell must revalidate so PWA updates are detected
location ~* ^/(sw\.js|workbox-.*\.js|manifest\.webmanifest|version\.json)$ {
@@ -18,7 +18,7 @@ server {
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(self), geolocation=(self), microphone=(self)" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://plausible.elpatron.me; connect-src 'self' https://plausible.elpatron.me; img-src 'self' data: blob: https://*.tile.openstreetmap.org; style-src 'self' 'unsafe-inline'; font-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self';" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://plausible.elpatron.me; connect-src 'self' https://plausible.elpatron.me; img-src 'self' data: blob: https://*.tile.openstreetmap.org; media-src 'self' blob: data:; style-src 'self' 'unsafe-inline'; font-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self';" always;
}
location = /index.html {
@@ -28,7 +28,7 @@ server {
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(self), geolocation=(self), microphone=(self)" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://plausible.elpatron.me; connect-src 'self' https://plausible.elpatron.me; img-src 'self' data: blob: https://*.tile.openstreetmap.org; style-src 'self' 'unsafe-inline'; font-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self';" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://plausible.elpatron.me; connect-src 'self' https://plausible.elpatron.me; img-src 'self' data: blob: https://*.tile.openstreetmap.org; media-src 'self' blob: data:; style-src 'self' 'unsafe-inline'; font-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self';" always;
}
location / {
+4 -37
View File
@@ -43,11 +43,8 @@ export default function LiveVoiceCapture({
const [previewMime, setPreviewMime] = useState('audio/webm')
const [previewDurationSec, setPreviewDurationSec] = useState(0)
const [saving, setSaving] = useState(false)
const [logs, setLogs] = useState<string[]>([])
const log = useCallback((msg: string) => {
console.log(`[VoiceDebug] ${msg}`)
setLogs((prev) => [...prev, `${new Date().toLocaleTimeString()}: ${msg}`])
}, [])
const previewAudioRef = useRef<HTMLAudioElement | null>(null)
@@ -86,6 +83,9 @@ export default function LiveVoiceCapture({
el.addEventListener('loadedmetadata', handleLoadedMetadata)
}
log('Calling el.load() to force loading of the media resource...')
el.load()
return () => {
el.removeEventListener('loadedmetadata', handleLoadedMetadata)
}
@@ -372,40 +372,7 @@ export default function LiveVoiceCapture({
</>
)}
{/* Debug Logs Panel */}
<div style={{
marginTop: '20px',
padding: '10px',
background: 'rgba(0,0,0,0.6)',
border: '1px solid rgba(255,255,255,0.15)',
borderRadius: '8px',
maxHeight: '180px',
overflowY: 'auto',
textAlign: 'left',
fontSize: '11px',
fontFamily: 'monospace',
color: '#4ade80',
width: '100%',
boxSizing: 'border-box'
}}>
<div style={{ fontWeight: 'bold', marginBottom: '4px', borderBottom: '1px solid rgba(255,255,255,0.2)', paddingBottom: '2px', display: 'flex', justifyContent: 'space-between' }}>
<span>Debug Console Logs:</span>
<button
type="button"
onClick={() => setLogs([])}
style={{ background: 'none', border: 'none', color: '#fda4af', cursor: 'pointer', fontSize: '10px', padding: '0 4px', textDecoration: 'underline' }}
>
Clear
</button>
</div>
{logs.length === 0 ? (
<span style={{ color: '#94a3b8' }}>No logs yet. Start recording to debug.</span>
) : (
logs.map((l, i) => (
<div key={i} style={{ wordBreak: 'break-all', marginBottom: '2px' }}>{l}</div>
))
)}
</div>
</div>
</div>
)
+5 -1
View File
@@ -53,6 +53,10 @@ export default function VoiceMemoPlayer({
el.addEventListener('loadedmetadata', handleLoadedMetadata)
}
if (src) {
el.load()
}
return () => {
el.removeEventListener('loadedmetadata', handleLoadedMetadata)
}
@@ -103,7 +107,7 @@ export default function VoiceMemoPlayer({
return (
<div className="voice-memo-player-shell">
<audio ref={audioRef} className={playerClass} controls preload="none" src={src} />
<audio ref={audioRef} className={playerClass} controls preload="metadata" src={src} />
</div>
)
}