Added callback that removes images files when a screenshot gets destroyed
This commit is contained in:
parent
8b9b40fdee
commit
dc17ff1e3e
2 changed files with 30 additions and 2 deletions
|
|
@ -5,7 +5,10 @@ class Package < ActiveRecord::Base
|
||||||
# TODO: Make search weighted on users' rating
|
# TODO: Make search weighted on users' rating
|
||||||
pg_search_scope :general_search, :against => [:name, :description, :long_description]
|
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 {
|
default_scope {
|
||||||
order('name ASC')
|
order('name ASC')
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,8 @@ class Screenshot < ActiveRecord::Base
|
||||||
basepath = "/screenshots/unapproved/"
|
basepath = "/screenshots/unapproved/"
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
# Return caption for full-screen screenshots.
|
# Return caption for full-screen screenshots.
|
||||||
|
|
@ -32,4 +33,28 @@ class Screenshot < ActiveRecord::Base
|
||||||
self.package.description
|
self.package.description
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue