diff options
Diffstat (limited to 'app.rb')
| -rw-r--r-- | app.rb | 37 |
1 files changed, 37 insertions, 0 deletions
@@ -702,6 +702,43 @@ def save_edits(rel, dir) atomic_write(File.join(dir, 'album.json'), JSON.pretty_generate(data)) end +post '/admin/rotate/' do + require_admin! + rotate_file('', MEDIA_ROOT) +end + +post '/admin/rotate/*' do + require_admin! + rel = params[:splat].first.chomp('/') + rotate_file(rel, resolve_dir(rel)) +end + +def rotate_file(rel, dir) + name = File.basename(params[:file].to_s) + full = File.join(dir, name) + halt 404 unless File.file?(full) + halt 400 unless IMAGE_EXTS.include?(File.extname(name).downcase.delete_prefix('.')) + + degrees = params[:dir] == 'left' ? -90 : 90 + img = MiniMagick::Image.open(full) + img.combine_options do |c| + c.auto_orient + c.rotate degrees + end + img.write(full) + + data = load_album(dir) + data['files'] ||= {} + meta = (data['files'][name] ||= {}) + meta['width'], meta['height'] = meta['height'], meta['width'] if meta['width'] && meta['height'] + atomic_write(File.join(dir, 'album.json'), JSON.pretty_generate(data)) + + thumb = thumb_cache_path(rel.empty? ? name : "#{rel}/#{name}") + File.unlink(thumb) if File.exist?(thumb) + + redirect "/admin/edit/#{rel}" +end + # ── Background update ───────────────────────────────────────────────────────── post '/admin/update' do |
