Added callback that removes images files when a screenshot gets destroyed

This commit is contained in:
Christoph Haas 2014-12-07 22:32:13 +01:00
parent 8b9b40fdee
commit dc17ff1e3e
2 changed files with 30 additions and 2 deletions

View file

@ -5,7 +5,10 @@ class Package < ActiveRecord::Base
# TODO: Make search weighted on users' rating
pg_search_scope :general_search, :against => [:name, :description, :long_description]
has_many :screenshots, :inverse_of=>:package
# I am using "destroy_all" here so that when a package gets destroys the
# callbacks for all dependent screenshots are executed - thus removing the
# screenshot files from disk.
has_many :screenshots, :inverse_of=>:package, :dependent => :destroy
default_scope {
order('name ASC')

View file

@ -19,7 +19,8 @@ class Screenshot < ActiveRecord::Base
basepath = "/screenshots/unapproved/"
end
File.join(basepath, self.package.name[0], self.package.name, "#{self.id}_#{size}.png")
#File.join(basepath, self.package.name[0], self.package.name, "#{self.id}_#{size}.png")
Rails.config.images_path.join(self.package.name[0], self.package.name, "#{self.id}_#{size}.png")
end
# Return caption for full-screen screenshots.
@ -32,4 +33,28 @@ class Screenshot < ActiveRecord::Base
self.package.description
end
end
def image_file(size)
# Screenshot files are at e.g.
# .../public/screenshots/f/firefox/5871654_large.png
Rails.configuration.images_path.join(self.package.name[0], self.package.name, "#{self.id}_#{size}.png")
end
# Delete all image files related to this screenshot
def delete_all_images
Rails.configuration.image_sizes.each do |size,dimensions|
image_file = self.image_file(size)
Rails.logger.info "(before_destroy) Deleting screenshot image '#{image_file}' from disk"
if File.exist?(image_file)
File.delete(image_file)
else
Rails.logger.error "(before_destroy) File '#{image_file}' not found - could not delete it"
end
end
end
# Callback to delete image files from disk when a screenshot record gets destroyed
before_destroy do |screenshot|
screenshot.delete_all_images
end
end