* Added function for updating a media item's filepaths on-disk * Added placeholder action to source page * Turned the file sync into a job and properly hooked it up to the controller
38 lines
858 B
Elixir
38 lines
858 B
Elixir
defmodule Pinchflat.Media.FileSyncingWorker do
|
|
@moduledoc false
|
|
|
|
use Oban.Worker,
|
|
queue: :local_data,
|
|
tags: ["sources", "local_data"]
|
|
|
|
alias __MODULE__
|
|
alias Pinchflat.Repo
|
|
alias Pinchflat.Tasks
|
|
alias Pinchflat.Sources
|
|
alias Pinchflat.Media.FileSyncing
|
|
|
|
@doc """
|
|
Starts the source file syncing worker.
|
|
|
|
Returns {:ok, %Task{}} | {:error, %Ecto.Changeset{}}
|
|
"""
|
|
def kickoff_with_task(source, opts \\ []) do
|
|
%{id: source.id}
|
|
|> FileSyncingWorker.new(opts)
|
|
|> Tasks.create_job_with_task(source)
|
|
end
|
|
|
|
@doc """
|
|
Deletes a profile and optionally deletes its files
|
|
|
|
Returns :ok
|
|
"""
|
|
@impl Oban.Worker
|
|
def perform(%Oban.Job{args: %{"id" => source_id}}) do
|
|
source = Repo.preload(Sources.get_source!(source_id), :media_items)
|
|
|
|
FileSyncing.sync_file_presence_on_disk(source.media_items)
|
|
|
|
:ok
|
|
end
|
|
end
|