diff --git a/hyrax/app/controllers/download_all_controller.rb b/hyrax/app/controllers/download_all_controller.rb index 8abe6dd9c1651ac6323b4aecd4d998944cbe6729..6844e5e717065621b6ee3cbc092ce64d4c6c240a 100644 --- a/hyrax/app/controllers/download_all_controller.rb +++ b/hyrax/app/controllers/download_all_controller.rb @@ -33,7 +33,7 @@ class DownloadAllController < Hyrax::DownloadsController redirect_to format: :zip else # async job redirects to show - build_shell_file unless has_shell_file? + build_shell_file flash[:alert] = I18n.t('hyrax.notifications.preparing_download.message') redirect_to main_app.polymorphic_path(work) end @@ -79,7 +79,8 @@ class DownloadAllController < Hyrax::DownloadsController def build_shell_file shell_file = shell_file_path cleanup_path(shell_file) if File.exist?(shell_file) - Hyrax::DownloadS3BucketJob.perform_later(current_user.id, work.id) + + Hyrax::DownloadS3BucketJob.perform_later(current_user.id, work.id.to_s) end def build_zip_file(list_of_objects: nil) diff --git a/hyrax/app/forms/dataset_form.rb b/hyrax/app/forms/dataset_form.rb index 29f201cd60e57f2bb3a6ab4ba65943d49e3af434..8666143ff0163b1119f0c5d6b4cfd65316dbd16a 100644 --- a/hyrax/app/forms/dataset_form.rb +++ b/hyrax/app/forms/dataset_form.rb @@ -28,7 +28,11 @@ class DatasetForm < Hyrax::Forms::PcdmObjectForm(Dataset) end def tabs - %w[required description references funding dataset_thumbnail files relationships] + if self.persisted? && self.member_ids.any? + %w[required description references funding dataset_thumbnail files relationships] + else + %w[required description references funding files relationships] + end end def description_tab_terms diff --git a/hyrax/app/helpers/hyrax/listeners/lifecycle_listener_helper.rb b/hyrax/app/helpers/hyrax/listeners/lifecycle_listener_helper.rb index 795bda0c42c3d5c5d7447917454a090528006589..02d3c30c99d2f7d4bd9ac30293a98ff67e5b718d 100644 --- a/hyrax/app/helpers/hyrax/listeners/lifecycle_listener_helper.rb +++ b/hyrax/app/helpers/hyrax/listeners/lifecycle_listener_helper.rb @@ -42,6 +42,15 @@ module Hyrax object end + def after_file_metadata_updated_callbacks(file_set) + parent_work = file_set.parent_work + parent_work.set_format_and_size + parent_work = save_object!(parent_work) + Hyrax.index_adapter.save(resource: parent_work) + + after_save_callbacks(parent_work) + end + def after_destroy_callbacks(object) case object.class.name when 'Crc1280Experiment', 'Dataset' diff --git a/hyrax/app/jobs/hyrax/download_s3_bucket_job.rb b/hyrax/app/jobs/hyrax/download_s3_bucket_job.rb new file mode 100644 index 0000000000000000000000000000000000000000..ee0864f039e4628788f4dda515f27da36f86bf57 --- /dev/null +++ b/hyrax/app/jobs/hyrax/download_s3_bucket_job.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +module Hyrax + class DownloadS3BucketJob < ApplicationJob + include Rails.application.routes.url_helpers + include DownloadHelper + def perform(current_user_id, work_id) + @work ||= Hyrax.query_service.find_by(id: work_id) + current_user = ::User.find_by(id: current_user_id) + + unless has_shell_file? + s3 = S3StorageService.new + s3.init_client + s3.prepare_shell_file(work_id, shell_file_path) + end + + if @work.is_a?(Crc1280Experiment) + path = hyrax_crc1280_experiment_path(work_id) + else + path = hyrax_dataset_path(work_id) + end + + subject = I18n.t('hyrax.notifications.download_ready.subject') + message = I18n.t('hyrax.notifications.download_ready.message', + link: (ActionController::Base.helpers.link_to work_id, path), + download_link: (ActionController::Base.helpers.link_to :here, download_all_path(work_id, format: :sh)), + user: current_user.user_key) + + Hyrax::MessengerService.deliver(current_user, current_user, message, subject) + end + + def work + @work + end + end +end diff --git a/hyrax/app/listeners/hyrax_listener.rb b/hyrax/app/listeners/hyrax_listener.rb index d2dc4169396cdf68188728314b5c79a86832a9a5..f2c7a661bbcb0d2c015dd4affb292b91f2e9abd4 100644 --- a/hyrax/app/listeners/hyrax_listener.rb +++ b/hyrax/app/listeners/hyrax_listener.rb @@ -41,8 +41,18 @@ class HyraxListener # def on_file_downloaded # end - # def on_file_metadata_updated - # end + 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) + after_file_metadata_updated_callbacks(file_set) + 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 # def on_file_metadata_deleted # end diff --git a/hyrax/app/models/concerns/external_services.rb b/hyrax/app/models/concerns/external_services.rb index f0b6687a1359fb5d4474cc4caeed9f3ba8021779..1152fe93043913f372466e5e2992a39cb91005d5 100644 --- a/hyrax/app/models/concerns/external_services.rb +++ b/hyrax/app/models/concerns/external_services.rb @@ -33,7 +33,7 @@ module ExternalServices s3 = S3StorageService.new s3.init_client _list_of_objects, size = s3.list_all_objects - size + [_list_of_objects.count, size] end