@@ -2,11 +2,13 @@ defmodule Reencodarr.Services do
22 @ moduledoc """
33 This module is responsible for communicating with external services.
44 """
5+ require Logger
56 alias Reencodarr.DbWriter
67 alias Reencodarr.Repo
78 alias Reencodarr.Services.Config
89 alias Reencodarr.Services.Radarr
910 alias Reencodarr.Services.Sonarr
11+ alias Reencodarr.Services.WebhookSync
1012
1113 @ doc """
1214 Returns the list of configs.
@@ -80,14 +82,21 @@ defmodule Reencodarr.Services do
8082
8183 """
8284 def create_config ( attrs \\ % { } ) do
83- DbWriter . run (
84- fn ->
85- % Config { }
86- |> Config . changeset ( attrs )
87- |> Repo . insert ( )
88- end ,
89- label: :service_config_create
90- )
85+ case DbWriter . run (
86+ fn ->
87+ % Config { }
88+ |> Config . changeset ( attrs )
89+ |> Repo . insert ( )
90+ end ,
91+ label: :service_config_create
92+ ) do
93+ { :ok , config } = result ->
94+ maybe_reconcile_managed_webhook ( config )
95+ result
96+
97+ error ->
98+ error
99+ end
91100 end
92101
93102 @ doc """
@@ -103,14 +112,21 @@ defmodule Reencodarr.Services do
103112
104113 """
105114 def update_config ( % Config { } = config , attrs ) do
106- DbWriter . run (
107- fn ->
108- config
109- |> Config . changeset ( attrs )
110- |> Repo . update ( )
111- end ,
112- label: :service_config_update
113- )
115+ case DbWriter . run (
116+ fn ->
117+ config
118+ |> Config . changeset ( attrs )
119+ |> Repo . update ( )
120+ end ,
121+ label: :service_config_update
122+ ) do
123+ { :ok , updated_config } = result ->
124+ maybe_reconcile_managed_webhook ( updated_config )
125+ result
126+
127+ error ->
128+ error
129+ end
114130 end
115131
116132 @ doc """
@@ -157,4 +173,28 @@ defmodule Reencodarr.Services do
157173
158174 @ doc "Fetches all movie files for a given movie."
159175 def get_movie_files ( movie_id ) , do: Radarr . get_movie_files ( movie_id )
176+
177+ defp maybe_reconcile_managed_webhook ( % Config { service_type: service_type } )
178+ when service_type in [ :sonarr , :radarr ] do
179+ if Application . get_env ( :reencodarr , :auto_reconcile_managed_webhooks , true ) do
180+ case WebhookSync . reconcile_for_service ( service_type ) do
181+ :ok ->
182+ :ok
183+
184+ :skipped ->
185+ :ok
186+
187+ { :error , reason } ->
188+ Logger . warning (
189+ "Services: failed to reconcile #{ service_type } webhook after config change: #{ inspect ( reason ) } "
190+ )
191+
192+ :ok
193+ end
194+ else
195+ :ok
196+ end
197+ end
198+
199+ defp maybe_reconcile_managed_webhook ( _config ) , do: :ok
160200end
0 commit comments