From 7d6465dabb837c787a75f471e25d906ebade926a Mon Sep 17 00:00:00 2001 From: Brandt Lareau Date: Wed, 9 Oct 2024 18:37:04 -0700 Subject: [PATCH 1/2] Trying to fix the progress bar for uploades --- .../upload_process_component.html.erb | 25 ++++++++++--------- app/components/upload_process_component.rb | 9 ++++--- app/listeners/upload_progress_listener.rb | 9 +++---- app/services/ftp/upload_mkv_service.rb | 4 ++- current_version.txt | 2 +- 5 files changed, 27 insertions(+), 22 deletions(-) diff --git a/app/components/upload_process_component.html.erb b/app/components/upload_process_component.html.erb index 34b6a864..981a6f33 100644 --- a/app/components/upload_process_component.html.erb +++ b/app/components/upload_process_component.html.erb @@ -7,28 +7,29 @@ <% end %> <%= c.with_body do %> <% if uploadable_video_blobs.any? || uploaded_recently_video_blobs.any? %> - <% uploaded_recently_video_blobs.each do |blob| %> + <% blobs = uploadable_video_blobs.map { [_1, find_job_by_video_blob(_1)] } %> + <% blobs.sort_by { _2.present? ? 1 : 2 }.each do |blob, video_blob_job| %> <%= render( ProgressBarComponent.new( - show_percentage: false, - status: :success, - completed: 100, - message: "Uploaded #{blob.title}" + show_percentage: video_blob_job.present?, + status: :info, + completed: percentage(video_blob_job&.completed, blob.byte_size), + message: video_blob_job ? "Uploading #{blob.title}" : "Pending upload #{blob.title} ##{blob.id}", + eta: (eta(video_blob_job, blob) if video_blob_job) ) ) %> <% end %> - <% uploadable_video_blobs.each do |blob| %> + + <% uploaded_recently_video_blobs.each do |blob| %> <%= - video_blob_job = find_job_by_video_blob(blob) render( ProgressBarComponent.new( - show_percentage: video_blob_job.present?, - status: :info, - completed: percentage(video_blob_job&.completed, blob.byte_size), - message: video_blob_job ? "Uploading #{blob.title}" : "Pending upload #{blob.title}", - eta: (eta(video_blob_job, blob) if video_blob_job) + show_percentage: false, + status: :success, + completed: 100, + message: "Uploaded #{blob.title}" ) ) %> diff --git a/app/components/upload_process_component.rb b/app/components/upload_process_component.rb index e2fe463f..69b085bb 100644 --- a/app/components/upload_process_component.rb +++ b/app/components/upload_process_component.rb @@ -18,8 +18,7 @@ def dom_id end def uploadable_video_blobs - @uploadable_video_blobs ||= VideoBlob.uploadable - .order(updated_at: :desc) + @uploadable_video_blobs ||= VideoBlob.uploadable.order(updated_at: :desc) end def percentage(completed, total) @@ -47,7 +46,11 @@ def ftp_host def find_job_by_video_blob(blob) return if blob.nil? || !job_active? - job if job.metadata['video_blob_id'].to_i == blob.id + jobs.find { _1.metadata['video_blob_id'].to_i == blob.id } + end + + def jobs + Job.active.where(name: 'UploadWorker') end def eta(job, blob) diff --git a/app/listeners/upload_progress_listener.rb b/app/listeners/upload_progress_listener.rb index e0ff0101..0462d289 100644 --- a/app/listeners/upload_progress_listener.rb +++ b/app/listeners/upload_progress_listener.rb @@ -12,9 +12,8 @@ class UploadProgressListener attr_reader :completed - def upload_progress(chunk_size: nil) - job.completed ||= 0 - job.completed += chunk_size + def upload_progress(total_uploaded:) + job.completed = total_uploaded return if next_update.future? job.save! @@ -27,14 +26,14 @@ def upload_ready end def upload_started - job.metadata['completed'] = 0 + job.completed = 0 job.metadata['video_blob_id'] = video_blob.id job.save! update_component end def upload_finished - job.metadata['completed'] = video_blob.byte_size + job.completed = video_blob.byte_size job.save! video_blob.update!(uploadable: false, uploaded_on: Time.current) update_component diff --git a/app/services/ftp/upload_mkv_service.rb b/app/services/ftp/upload_mkv_service.rb index 4d2ce8be..26f0cfca 100644 --- a/app/services/ftp/upload_mkv_service.rb +++ b/app/services/ftp/upload_mkv_service.rb @@ -42,8 +42,10 @@ def ftp_create_directory def ftp_upload_file broadcast(:upload_started) + total_uploaded = 0 ftp.putbinaryfile(file, video_blob.plex_path) do |chunk| - broadcast(:upload_progress, chunk_size: chunk.size) + total_uploaded += chunk.size + broadcast(:upload_progress, total_uploaded:) end end diff --git a/current_version.txt b/current_version.txt index 6ae910b3..cce56663 100644 --- a/current_version.txt +++ b/current_version.txt @@ -1 +1 @@ -v5.4.0 +v5.4.1 From f6fa7bbba9830e04ab79f087fc927fd97c3281f8 Mon Sep 17 00:00:00 2001 From: Brandt Lareau Date: Wed, 9 Oct 2024 18:39:43 -0700 Subject: [PATCH 2/2] Fixed specs --- spec/listeners/upload_progress_listener_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/listeners/upload_progress_listener_spec.rb b/spec/listeners/upload_progress_listener_spec.rb index c89d420e..e5d6b418 100644 --- a/spec/listeners/upload_progress_listener_spec.rb +++ b/spec/listeners/upload_progress_listener_spec.rb @@ -6,7 +6,7 @@ subject(:listener) { described_class.new(**args) } describe '#upload_progress' do - subject(:upload_progress) { listener.upload_progress(chunk_size: 10) } + subject(:upload_progress) { listener.upload_progress(total_uploaded: 10) } let(:video_blob) { build_stubbed(:video_blob) } let(:job) { build(:job) }