diff options
| author | Ken D'Ambrosio <ken@jots.org> | 2026-06-18 21:57:44 +0000 |
|---|---|---|
| committer | Ken D'Ambrosio <ken@jots.org> | 2026-06-18 21:57:44 +0000 |
| commit | 462e0081cc9062beb29530e84d15edf2003802db (patch) | |
| tree | 04fb50e8471e1905d661d40fc8a2df6705b4ddb3 | |
| parent | 547b51c0ec6be8786eea625423d24f0ae1a884c0 (diff) | |
Fix transcoded video playback in lightbox and slideshow
The HEVC-to-H.264 transcode kept the original file as a hidden
(non-admin) entry with transcoded_to set, but the lightbox <video>
element and the slideshow always pointed at the original file's URL.
Opening a transcoded video (e.g. via a direct ?photo= link) tried to
play the unsupported original codec instead of the browser-compatible
copy.
- album.erb/album.js: lightbox video now plays the transcoded file
when present, while the "Download Original" link still serves the
true original.
- all_media_entries: slideshow skips transcoded originals entirely
since it has no separate download path.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
| -rw-r--r-- | app.rb | 2 | ||||
| -rw-r--r-- | public/js/album.js | 2 | ||||
| -rw-r--r-- | views/album.erb | 6 |
3 files changed, 6 insertions, 4 deletions
@@ -531,7 +531,7 @@ def all_media_entries(top_dirs: nil) rel = dir.delete_prefix(MEDIA_ROOT).delete_prefix('/') data = load_album(dir) next [] if data['visible'] == false && !admin? - album_files(dir, data).select { |e| %i[image video].include?(e[:type]) }.map do |e| + album_files(dir, data).select { |e| %i[image video].include?(e[:type]) && !e[:transcoded_to] }.map do |e| e.merge(file_rel: rel.empty? ? e[:name] : "#{rel}/#{e[:name]}") end end diff --git a/public/js/album.js b/public/js/album.js index 3fca29b..17de0b6 100644 --- a/public/js/album.js +++ b/public/js/album.js @@ -68,7 +68,7 @@ function renderLightbox() { img.src = e.src; img.alt = e.title; img.classList.remove('hidden'); } else if (e.type === 'video') { - vid.src = e.src; + vid.src = e.play_src || e.src; vid.classList.remove('hidden'); vid.play().catch(() => {}); } else if (e.type === 'audio') { diff --git a/views/album.erb b/views/album.erb index 4f261c4..934980b 100644 --- a/views/album.erb +++ b/views/album.erb @@ -108,7 +108,9 @@ <script> const ENTRIES = <%= @entries.map { |e| file_rel = @rel.empty? ? e[:name] : "#{@rel}/#{e[:name]}" - e.merge(src: "/media/#{file_rel}") + play_name = e[:transcoded_to] || e[:name] + play_rel = @rel.empty? ? play_name : "#{@rel}/#{play_name}" + e.merge(src: "/media/#{file_rel}", play_src: "/media/#{play_rel}") }.to_json %>; </script> -<script src="/js/album.js?v=6"></script> +<script src="/js/album.js?v=7"></script> |
