diff --git a/app/assets/stylesheets/bg_process.scss b/app/assets/stylesheets/bg_process.scss index f8de886d..28ae89b8 100644 --- a/app/assets/stylesheets/bg_process.scss +++ b/app/assets/stylesheets/bg_process.scss @@ -1,3 +1,10 @@ +.bg-processes { + position: fixed; + right: 0; + bottom: 0; + z-index: 4; +} + .bg-process { --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85); --bs-toast-border-color: var(--bs-border-color-translucent); @@ -18,17 +25,13 @@ background-color: $dark-black; border-radius: var(--bs-toast-border-radius); border: var(--bs-toast-border-width) solid var(--bs-toast-border-color); - bottom: 0; box-shadow: var(--bs-toast-box-shadow); color: var(--bs-toast-color); font-size: var(--bs-toast-font-size); margin: 2em; max-width: 100%; pointer-events: auto; - position: fixed; - right: 0; width: var(--bs-toast-max-width); - z-index: 4; .header { display: flex; diff --git a/app/controllers/movies_controller.rb b/app/controllers/movies_controller.rb index a7ab79d4..3efa5a35 100644 --- a/app/controllers/movies_controller.rb +++ b/app/controllers/movies_controller.rb @@ -3,7 +3,7 @@ class MoviesController < ApplicationController def show @movie = movie - @disks = CreateDisksService.call + @disks = FindExistingDisksService.call || CreateDisksService.call end def create diff --git a/app/services/find_existing_disks_service.rb b/app/services/find_existing_disks_service.rb new file mode 100644 index 00000000..8861b971 --- /dev/null +++ b/app/services/find_existing_disks_service.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class FindExistingDisksService + MOUNT_LINE = %r{\A(?[a-zA-Z/0-9]+)\son\s(/Volumes/|)(?[a-zA-Z/0-9]+)} + class << self + delegate :call, to: :new + end + + # example line: + # /dev/disk4 on /Volumes/PLANET51 (udf, local, nodev, nosuid, read-only, noowners) + def call + mounts = `mount` + disks = [] + mounts.each_line do |line| + next unless line.start_with?('/dev/') + + match = line.match(MOUNT_LINE) + rdisk_name = match[:disk_name].gsub('/dev/', '/dev/r') + disks << Disk.find_by(name: match[:name], disk_name: [match[:disk_name], rdisk_name]) + end + disks.compact + end +end diff --git a/app/views/layouts/application.erb b/app/views/layouts/application.erb index 2deda389..5c538afc 100644 --- a/app/views/layouts/application.erb +++ b/app/views/layouts/application.erb @@ -6,25 +6,33 @@ <%= render 'layouts/head' %> - <%= render ProcessComponent.new worker: ScanPlexWorker do |c| %> - <%= c.with_body do %> - <% if ScanPlexWorker.job.pending? %> - <%= - render( - ProgressBarComponent.new( - model: Movie, - completed: (ScanPlexWorker.job.worker.completed.zero? ? 20 : ScanPlexWorker.job.worker.completed), - status: :success, - message: 'scanning plex for movies', - show_percentage: false +
+ <%= render ProcessComponent.new worker: ScanPlexWorker do |c| %> + <%= c.with_body do %> + <% if ScanPlexWorker.job.pending? %> + <%= + render( + ProgressBarComponent.new( + model: Movie, + completed: (ScanPlexWorker.job.worker.completed.zero? ? 20 : ScanPlexWorker.job.worker.completed), + status: :success, + message: 'scanning plex for movies', + show_percentage: false + ) ) - ) - %> - <% else %> - Done! you have a total of <%= pluralize(Video.count, 'video') %> on plex. + %> + <% else %> + Done! you have a total of <%= pluralize(Video.count, 'video') %> on plex. + <% end %> <% end %> <% end %> - <% end %> + + <%= render ProcessComponent.new worker: LoadDiskWorker do |c| %> + <%= c.with_body do %> + Loading the disk info + <% end %> + <% end %> +
<%= render ToastComponent.new do |c| %> diff --git a/app/workers/load_disk_worker.rb b/app/workers/load_disk_worker.rb index f82f934d..0fd08991 100644 --- a/app/workers/load_disk_worker.rb +++ b/app/workers/load_disk_worker.rb @@ -2,6 +2,19 @@ class LoadDiskWorker < ApplicationWorker def perform - CreateDisksService.call + cable_ready[DiskTitleChannel.channel_name].morph \ + selector: "##{component.dom_id}", + html: render(component, layout: false) + cable_ready.broadcast + end + + def component + component = ProcessComponent.new(worker: ScanPlexWorker) + component.with_body { disks.map(&:name).join(', ') } + component + end + + def disks + @disks ||= FindExistingDisksService.call || CreateDisksService.call end end