[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:
Kieran authored and GitHub committed 2024-05-02 08:43:37 -07:00
1 parent 8051107d32
commit 112c6a4f14
47 files changed
+498 -70

No files matched your search

+11 -1
View File
@@ -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