summaryrefslogtreecommitdiffstats
path: root/app.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app.rb')
-rw-r--r--app.rb15
1 files changed, 12 insertions, 3 deletions
diff --git a/app.rb b/app.rb
index e23ae38..9b636fe 100644
--- a/app.rb
+++ b/app.rb
@@ -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]) }