demarches-normaliennes/app/jobs/titre_identite_watermark_job.rb

29 lines
1,021 B
Ruby
Raw Normal View History

2020-11-17 16:34:24 +01:00
class TitreIdentiteWatermarkJob < ApplicationJob
class FileNotScannedYetError < StandardError
end
# If by the time the job runs the blob has been deleted, ignore the error
discard_on ActiveRecord::RecordNotFound
# If the file is deleted during the scan, ignore the error
discard_on ActiveStorage::FileNotFoundError
# If the file is not analyzed or scanned for viruses yet, retry later
# (to avoid modifying the file while it is being scanned).
retry_on FileNotScannedYetError, wait: :exponentially_longer, attempts: 10
2020-11-17 16:34:24 +01:00
def perform(blob)
return if blob.watermark_done?
raise FileNotScannedYetError if blob.virus_scanner.pending?
2020-11-17 16:34:24 +01:00
blob.open do |file|
Tempfile.create(["watermarked", File.extname(file)]) do |output|
processed = WatermarkService.new.process(file, output)
return if processed.blank?
blob.upload(processed) # also update checksum & byte_size accordingly
blob.watermarked_at = Time.current
blob.save!
end
2020-11-17 16:34:24 +01:00
end
end
end