feat(dashcam): mobile layout fix + optional hw-encode conversion on import

- yaris.css: on mobile (<576px) hide file/size/date/upload cols, show
  filename inside thumb cell, icon-only buttons, dash-actions-td nowrap
- local-videos.js: filename in thumb cell for mobile; Converting badge with
  spinner; auto-refresh every 10s while any file is converting
- app_video.py: CONVERT_SETTING, is_convert_enabled(), queue_convert(),
  _convert_bg() — h264_v4l2m2m + aac faststart, deletes original on success
- app_dash.py: call queue_convert() after each successful copy on import
- app_settings.py: expose video_convert_enabled in get/save settings
- settings.html: toggle for 'Convert imported videos for web playback'

Co-authored-by: Copilot <[email protected]>
This commit is contained in:
Mathieu Moran
2026-08-10 00:30:59 -04:00
co-authored by Copilot
parent dd2f95b9c1
commit 01704d5429
7 changed files with 130 additions and 18 deletions
+19 -8
View File
@@ -269,18 +269,29 @@ body {
/* ── Dashcam / video ─────────────────────────────────────────────────────── */
/* Hide less-important columns on mobile to keep the table usable */
/* On mobile: hide file/size/date/upload columns — only thumb+name and actions remain */
@media (max-width: 575.98px) {
.dash-col-size,
.dash-col-date,
.dash-col-upload { display: none; }
}
@media (max-width: 767.98px) {
.dash-col-file { max-width: 8rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
}
/* Icon-only action buttons on mobile */
@media (max-width: 575.98px) {
.dash-col-upload,
.dash-col-file { display: none; }
/* Show filename inside the thumbnail cell instead */
.dash-thumb-name { display: block !important; }
/* Shrink thumbnail on mobile */
.local-video-thumbnail { width: 5rem; }
/* Icon-only action buttons */
.btn-icon-mobile .btn-label { display: none; }
/* Keep actions cell from overflowing */
.dash-actions-td { width: 1%; white-space: nowrap; }
}
@media (min-width: 576px) {
.dash-thumb-name { display: none; }
.dash-col-file { max-width: 12rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
}