Sha256: 14c0931f704de899743b6e2aa02ea8909eade1f8083e6642bf59f86f7ba28123

Contents?: true

Size: 1.95 KB

Versions: 3

Compression:

Stored size: 1.95 KB

Contents

# frozen_string_literal: true

module Hyrax
  module Listeners
    ##
    # Listens for events related to {Hyrax::FileMetadata}
    class FileMetadataListener
      ##
      # Called when 'file.characterized' event is published;
      # allows post-characterization handling, like derivatives generation.
      #
      # @param [Dry::Events::Event] event
      # @return [void]
      def on_file_characterized(event)
        file_set = event[:file_set]

        case file_set
        when ActiveFedora::Base # ActiveFedora
          CreateDerivativesJob
            .perform_later(file_set, event[:file_id], event[:path_hint])
        else
          ValkyrieCreateDerivativesJob
            .perform_later(file_set.id.to_s, event[:file_id])
        end
      end

      ##
      # Called when 'file.metadata.updated' event is published; reindexes a
      # {Hyrax::FileSet} when a file claiming to be its `pcdm_use:OriginalFile`
      #
      # @param [Dry::Events::Event] event
      # @return [void]
      def on_file_metadata_updated(event)
        return unless event[:metadata].original_file?

        file_set = Hyrax.query_service.find_by(id: event[:metadata].file_set_id)
        Hyrax.index_adapter.save(resource: file_set)
      rescue Valkyrie::Persistence::ObjectNotFoundError => err
        Hyrax.logger.warn "tried to index file with id #{event[:metadata].id} " \
                          "in response to an event of type #{event.id} but " \
                          "encountered an error #{err.message}. should this " \
                          "object be in a FileSet #{event[:metadata]}"
      end

      ##
      # Called when 'file.uploaded' event is published
      # @param [Dry::Events::Event] event
      # @return [void]
      def on_file_uploaded(event)
        # Run characterization for original file only
        return unless event[:metadata]&.original_file?

        ValkyrieCharacterizationJob.perform_later(event[:metadata].id.to_s)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
hyrax-5.0.0 app/services/hyrax/listeners/file_metadata_listener.rb
hyrax-5.0.0.rc3 app/services/hyrax/listeners/file_metadata_listener.rb
hyrax-5.0.0.rc2 app/services/hyrax/listeners/file_metadata_listener.rb