From 9cebd2e909793e12f7b9e5125d4fba671b5b660d Mon Sep 17 00:00:00 2001 From: Ken D'Ambrosio Date: Thu, 14 May 2026 04:14:31 +0000 Subject: Add per-photo delete checkbox to admin edit form Checking Delete and saving permanently removes the file and its thumbnail; a JS confirm dialog gates the submit. Deleted files are stripped from params before save_edits so they don't linger in album.json. Co-Authored-By: Claude Sonnet 4.6 --- app.rb | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'app.rb') diff --git a/app.rb b/app.rb index 0678c67..af18d44 100644 --- a/app.rb +++ b/app.rb @@ -160,7 +160,7 @@ helpers do cover = data['cover'] return cover if cover && cover != '__random__' && File.exist?(File.join(dir, cover)) candidates = cover_candidates(dir) - cover == '__random__' ? candidates.sample : candidates.first + candidates.sample end def cover_candidates(dir) @@ -413,6 +413,17 @@ post '/admin/edit/*' do rel = params[:splat].first.chomp('/') dir = resolve_dir(rel) + # Handle file deletions before save so save_edits doesn't re-add them + to_delete = (params['file_delete'] || {}).select { |_, v| v == '1' }.keys + to_delete.each do |name| + full = File.join(dir, name) + thumb = File.join(CACHE_ROOT, rel.empty? ? "#{name}.th.jpg" : "#{rel}/#{name}.th.jpg") + File.unlink(full) if File.exist?(full) + File.unlink(thumb) if File.exist?(thumb) + params['file_visible']&.delete(name) + params['file_caption']&.delete(name) + end + unless rel.empty? new_name = params['folder_name'].to_s.strip new_name = '' if new_name.include?('/') || new_name.include?("\x00") || -- cgit v1.2.3