summaryrefslogtreecommitdiffstats
path: root/app.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app.rb')
-rw-r--r--app.rb22
1 files changed, 20 insertions, 2 deletions
diff --git a/app.rb b/app.rb
index 8667471..dde6125 100644
--- a/app.rb
+++ b/app.rb
@@ -250,6 +250,18 @@ get '/slideshow/*' do
slideshow_view(params[:splat].first.chomp('/'))
end
+def all_media_entries
+ dirs = [MEDIA_ROOT] + Dir.glob("#{MEDIA_ROOT}/**/*/").sort
+ dirs.flat_map do |dir|
+ 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|
+ e.merge(file_rel: rel.empty? ? e[:name] : "#{rel}/#{e[:name]}")
+ end
+ end
+end
+
def slideshow_view(rel)
dir = resolve_dir(rel)
halt 404 unless File.directory?(dir)
@@ -258,8 +270,14 @@ def slideshow_view(rel)
@rel = rel
@title = data['title'] || (rel.empty? ? 'Albums' : File.basename(dir))
- @entries = album_files(dir, data).select { |e| %i[image video].include?(e[:type]) }
- erb :slideshow
+ @entries = if rel.empty?
+ all_media_entries
+ else
+ album_files(dir, data)
+ .select { |e| %i[image video].include?(e[:type]) }
+ .map { |e| e.merge(file_rel: "#{rel}/#{e[:name]}") }
+ end
+ erb :slideshow, layout: false
end
# ── Admin routes ───────────────────────────────────────────────────────────────