Sha256: 7659898fcf71510867ba4809745989458d2f71d9c79bf675b31fd20c6732031e

Contents?: true

Size: 1.32 KB

Versions: 24

Compression:

Stored size: 1.32 KB

Contents

# frozen_string_literal: true

require 'tempfile'

module Maglev
  # Used to create a screenshot of a section from the Maglev admin UI.
  class PersistSectionScreenshot
    include Injectable

    dependency :fetch_theme
    dependency :fetch_section_screenshot_path

    argument :section_id
    argument :base64_image

    def call
      return false if base64_image.blank?

      image_data = Base64.decode64(
        base64_image['data:image/png;base64,'.length..]
      )

      persist_file(image_data)

      section.screenshot_timestamp = Time.now.to_i

      true
    end

    private

    def persist_file(image_data)
      tmp_file = Tempfile.new(File.basename(screenshots_dir), binmode: true)
      tmp_file.write(image_data)
      tmp_file.close

      # PNG -> JPG to lower the size of the image
      ::ActiveStorage::Variation.new(format: 'jpg', saver: { quality: 90 }).transform(tmp_file) do |output|
        FileUtils.mkdir_p(screenshots_dir)
        File.open(screenshot_filepath, 'wb') do |f|
          f.write(output.read)
        end
      end
    end

    def section
      @section ||= fetch_theme.call.sections.find(section_id)
    end

    def screenshot_filepath
      fetch_section_screenshot_path.call(section: section, absolute: true)
    end

    def screenshots_dir
      File.dirname(screenshot_filepath)
    end
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
maglevcms-1.7.3 app/services/maglev/persist_section_screenshot.rb
maglevcms-1.7.2 app/services/maglev/persist_section_screenshot.rb
maglevcms-1.7.1 app/services/maglev/persist_section_screenshot.rb
maglevcms-1.7.0 app/services/maglev/persist_section_screenshot.rb
maglevcms-1.6.1 app/services/maglev/persist_section_screenshot.rb
maglevcms-1.6.0 app/services/maglev/persist_section_screenshot.rb
maglevcms-1.5.1 app/services/maglev/persist_section_screenshot.rb
maglevcms-1.4.0 app/services/maglev/persist_section_screenshot.rb
maglevcms-1.3.0 app/services/maglev/persist_section_screenshot.rb
maglevcms-1.2.2 app/services/maglev/persist_section_screenshot.rb
maglevcms-1.2.1 app/services/maglev/persist_section_screenshot.rb
maglevcms-1.2.0 app/services/maglev/persist_section_screenshot.rb
maglevcms-1.1.7 app/services/maglev/persist_section_screenshot.rb
maglevcms-1.1.6 app/services/maglev/persist_section_screenshot.rb
maglevcms-1.1.5 app/services/maglev/persist_section_screenshot.rb
maglevcms-1.1.4 app/services/maglev/persist_section_screenshot.rb
maglevcms-1.1.3 app/services/maglev/persist_section_screenshot.rb
maglevcms-1.1.2 app/services/maglev/persist_section_screenshot.rb
maglevcms-1.1.1 app/services/maglev/persist_section_screenshot.rb
maglevcms-1.1.0 app/services/maglev/persist_section_screenshot.rb