[Enhancement] Custom media lifecycle scripts (#219)
* Namespaced notification modules under lifecycle * Added a JSON encoder for all the main model types * Added startup task to create user script file * Hook up user script event to media download * Hooked up media deletion user script * Added jq to docker deps * Updated README
This commit is contained in:
@@ -10,8 +10,10 @@ defmodule Pinchflat.Media do
|
||||
alias Pinchflat.Sources.Source
|
||||
alias Pinchflat.Media.MediaItem
|
||||
alias Pinchflat.Media.MediaQuery
|
||||
alias Pinchflat.Metadata.MediaMetadata
|
||||
alias Pinchflat.Utils.FilesystemUtils
|
||||
alias Pinchflat.Metadata.MediaMetadata
|
||||
|
||||
alias Pinchflat.Lifecycle.UserScripts.CommandRunner, as: UserScriptRunner
|
||||
|
||||
@doc """
|
||||
Returns the list of media_items.
|
||||
@@ -180,6 +182,7 @@ defmodule Pinchflat.Media do
|
||||
|
||||
if delete_files do
|
||||
{:ok, _} = do_delete_media_files(media_item)
|
||||
:ok = run_user_script(:media_deleted, media_item)
|
||||
end
|
||||
|
||||
# Should delete these no matter what
|
||||
@@ -202,6 +205,7 @@ defmodule Pinchflat.Media do
|
||||
|
||||
Tasks.delete_tasks_for(media_item)
|
||||
{:ok, _} = do_delete_media_files(media_item)
|
||||
:ok = run_user_script(:media_deleted, media_item)
|
||||
|
||||
update_media_item(media_item, Map.merge(filepath_attrs, addl_attrs))
|
||||
end
|
||||
@@ -237,4 +241,10 @@ defmodule Pinchflat.Media do
|
||||
|> Enum.filter(&is_binary/1)
|
||||
|> Enum.each(&FilesystemUtils.delete_file_and_remove_empty_directories/1)
|
||||
end
|
||||
|
||||
defp run_user_script(event, media_item) do
|
||||
runner = Application.get_env(:pinchflat, :user_script_runner, UserScriptRunner)
|
||||
|
||||
runner.run(event, media_item)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -7,6 +7,8 @@ defmodule Pinchflat.Media.MediaItem do
|
||||
import Ecto.Changeset
|
||||
import Pinchflat.Utils.ChangesetUtils
|
||||
|
||||
alias __MODULE__
|
||||
alias Pinchflat.Repo
|
||||
alias Pinchflat.Tasks.Task
|
||||
alias Pinchflat.Sources.Source
|
||||
alias Pinchflat.Metadata.MediaMetadata
|
||||
@@ -116,4 +118,18 @@ defmodule Pinchflat.Media.MediaItem do
|
||||
end)
|
||||
|> Enum.into(%{})
|
||||
end
|
||||
|
||||
@doc false
|
||||
def json_exluded_fields do
|
||||
~w(__meta__ __struct__ metadata tasks media_items_search_index)a
|
||||
end
|
||||
|
||||
defimpl Jason.Encoder, for: MediaItem do
|
||||
def encode(value, opts) do
|
||||
value
|
||||
|> Repo.preload(:source)
|
||||
|> Map.drop(MediaItem.json_exluded_fields())
|
||||
|> Jason.Encode.map(opts)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user