From 1180a186c022320a67391619b98a462c32149948 Mon Sep 17 00:00:00 2001 From: Gyan Gupta <gyan@cottagelabs.com> Date: Wed, 19 Mar 2025 14:04:09 +0530 Subject: [PATCH] fixes for download sh file and dataset form thumbnail tab issue --- .../controllers/download_all_controller.rb | 5 +-- hyrax/app/forms/dataset_form.rb | 6 +++- .../listeners/lifecycle_listener_helper.rb | 9 +++++ .../app/jobs/hyrax/download_s3_bucket_job.rb | 36 +++++++++++++++++++ hyrax/app/listeners/hyrax_listener.rb | 14 ++++++-- .../app/models/concerns/external_services.rb | 2 +- 6 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 hyrax/app/jobs/hyrax/download_s3_bucket_job.rb diff --git a/hyrax/app/controllers/download_all_controller.rb b/hyrax/app/controllers/download_all_controller.rb index 8abe6dd9..6844e5e7 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 29f201cd..8666143f 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 795bda0c..02d3c30c 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 00000000..ee0864f0 --- /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 d2dc4169..f2c7a661 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 f0b6687a..1152fe93 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 -- GitLab