diff options
| author | Ken D'Ambrosio <ken@jots.org> | 2026-05-11 05:43:28 +0000 |
|---|---|---|
| committer | Ken D'Ambrosio <ken@jots.org> | 2026-05-11 05:43:28 +0000 |
| commit | 35a72d21075c9d2331ee4388fe34fe6efd5b65fc (patch) | |
| tree | a7d00b185f1f77c658cbc05ca663a381bfbcc7db /app.rb | |
| parent | 9f586a8db100c586b33f425f7699355bca43f8b4 (diff) | |
Limit slideshow to filtered albums when search filter is active
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'app.rb')
| -rw-r--r-- | app.rb | 15 |
1 files changed, 12 insertions, 3 deletions
@@ -250,8 +250,16 @@ get '/slideshow/*' do slideshow_view(params[:splat].first.chomp('/')) end -def all_media_entries - dirs = [MEDIA_ROOT] + Dir.glob("#{MEDIA_ROOT}/**/*/").sort +def all_media_entries(top_dirs: nil) + dirs = if top_dirs + top_dirs.flat_map do |name| + full = File.expand_path(name, MEDIA_ROOT) + next [] unless full.start_with?("#{MEDIA_ROOT}/") && File.directory?(full) + [full] + Dir.glob("#{full}/**/*/").sort + end + else + [MEDIA_ROOT] + Dir.glob("#{MEDIA_ROOT}/**/*/").sort + end dirs.flat_map do |dir| rel = dir.delete_prefix(MEDIA_ROOT).delete_prefix('/') data = load_album(dir) @@ -271,7 +279,8 @@ def slideshow_view(rel) @rel = rel @title = data['title'] || (rel.empty? ? 'Albums' : File.basename(dir)) @entries = if rel.empty? - all_media_entries + top_dirs = params[:dirs]&.split(',')&.map(&:strip)&.reject(&:empty?) + all_media_entries(top_dirs: top_dirs&.any? ? top_dirs : nil) else album_files(dir, data) .select { |e| %i[image video].include?(e[:type]) } |
