Screenshots will be accepted now even if the same image (determined by its image_fingerprint) exists on other packages. However the upload will be rejected if the very same screenshot exists on the same package.
67 lines
2.2 KiB
Ruby
67 lines
2.2 KiB
Ruby
class Screenshot < ActiveRecord::Base
|
|
belongs_to :package, :inverse_of=>:screenshots
|
|
|
|
default_scope {
|
|
order('uploaddatetime DESC')
|
|
}
|
|
|
|
has_attached_file :image,
|
|
styles: { :large => '800x600>', :thumb => '160x120>' },
|
|
default_url: '/images/dummy/no-screenshots-available.svg',
|
|
path: ':rails_root/public/screenshots/:id_partition/:style.png',
|
|
url: '/screenshots/:id_partition/:style.png'
|
|
validates_attachment_content_type :image, :content_type => 'image/png'
|
|
validates_with AttachmentSizeValidator, :attributes => :image, :less_than => 5.megabytes
|
|
validate :validate_image_is_unique
|
|
|
|
# Validator that checks if the image has already been uploaded.
|
|
# A generic uniqueness validator does not work because it would attribute
|
|
# the error to the :image_fingerprint field and not the actual :image field.
|
|
# Currently this check makes sure that the same screenshot is not uploaded
|
|
# twice for the same package. However it allows the screenshot to be uploaded
|
|
# for two different packages. Restricting that further may happen later.
|
|
def validate_image_is_unique
|
|
# Look for images with the same checksum / image_fingerprint
|
|
if Screenshot.find_by(image_fingerprint: image_fingerprint, package_id: self.package.id)
|
|
errors.add(:image, "has already been uploaded for this package")
|
|
end
|
|
end
|
|
|
|
# Return caption for full-screen screenshots.
|
|
# Takes the description of a screenshot if available.
|
|
# Otherwise it falls back to the general description of its package.
|
|
def caption
|
|
if self.description != ''
|
|
self.description
|
|
else
|
|
self.package.description
|
|
end
|
|
end
|
|
|
|
def uploader
|
|
# TODO: Implement the ownership of images
|
|
'Anonymous'
|
|
end
|
|
|
|
# Return Debshots 1.x path to allow migration of images into Paperclip filesystem schema
|
|
def image_url(size)
|
|
"live/screenshots/approved/#{self.package.name[0]}/#{self.package.name}/#{self.id}_#{size}.png"
|
|
end
|
|
|
|
|
|
def status
|
|
text = 'This image '
|
|
|
|
if self.approved
|
|
text << 'is public'
|
|
else
|
|
text << 'has to be moderated before being publicly visible'
|
|
end
|
|
|
|
if self.markedfordelete
|
|
text << ' (and was requested to be removed)'
|
|
end
|
|
|
|
return text
|
|
end
|
|
end
|