1414using MediaBrowser . Common . Net ;
1515using System . Net . Http ;
1616using MediaBrowser . Controller . Notifications ;
17- using MediaBrowser . Controller . Entities ;
1817using System . Threading ;
18+ using MediaBrowser . Controller . Entities ;
1919
2020namespace Emby . Webhooks
2121{
2222
23- public class Webhooks : IServerEntryPoint , INotificationService
23+ public class Webhooks : IServerEntryPoint
2424 {
2525 private readonly ISessionManager _sessionManager ;
2626 private readonly IUserDataManager _userDataManager ;
2727 private readonly ILogger _logger ;
2828 private readonly IJsonSerializer _jsonSerializer ;
29+ private readonly ILibraryManager _libraryManager ;
2930
3031 private List < PauseControl > pauseControl = new List < PauseControl > ( ) ;
3132 public class PauseControl
@@ -52,10 +53,10 @@ public string Name
5253 get { return "Webhooks" ; }
5354 }
5455
55- public Webhooks ( ISessionManager sessionManager , IJsonSerializer jsonSerializer , IHttpClient httpClient , ILogManager logManager , IUserDataManager userDataManager )
56+ public Webhooks ( ISessionManager sessionManager , IJsonSerializer jsonSerializer , IHttpClient httpClient , ILogManager logManager , IUserDataManager userDataManager , ILibraryManager libraryManager )
5657 {
5758 _logger = logManager . GetLogger ( Plugin . Instance . Name ) ;
58-
59+ _libraryManager = libraryManager ;
5960 _sessionManager = sessionManager ;
6061 _userDataManager = userDataManager ;
6162 _jsonSerializer = jsonSerializer ;
@@ -69,65 +70,66 @@ public void Dispose()
6970 _sessionManager . PlaybackStart -= PlaybackStart ;
7071 _sessionManager . PlaybackStopped -= PlaybackStopped ;
7172 _sessionManager . PlaybackProgress -= PlaybackProgress ;
73+
74+ _libraryManager . ItemAdded -= ItemAdded ;
7275 }
7376
74-
7577 public void Run ( )
7678 {
7779 _sessionManager . PlaybackStart += PlaybackStart ;
7880 _sessionManager . PlaybackStopped += PlaybackStopped ;
7981 _sessionManager . PlaybackProgress += PlaybackProgress ;
82+
83+ _libraryManager . ItemAdded += ItemAdded ;
8084 }
8185
86+ private void ItemAdded ( object sender , ItemChangeEventArgs e ) {
87+ var iType = _libraryManager . GetContentType ( e . Item ) ;
88+
89+ var hooks = hooksByType ( iType ) . Where ( i => i . onItemAdded ) ;
90+
91+ if ( hooks . Count ( ) > 0 )
92+ {
93+ var jsonString = buildJson ( e . Item , "media.added" ) ;
94+ SendHooks ( hooks , jsonString ) ;
95+ }
96+ }
8297 private void PlaybackProgress ( object sender , PlaybackProgressEventArgs e )
8398 {
84- if ( e . IsPaused & getPauseControl ( e . DeviceId ) . wasPaused == false ) {
99+ var iType = _libraryManager . GetContentType ( e . Item ) ;
100+
101+ if ( e . IsPaused & getPauseControl ( e . DeviceId ) . wasPaused == false )
102+ {
85103 //Paused Event
86104 getPauseControl ( e . DeviceId ) . wasPaused = true ;
87105
88- var hooks = Plugin . Instance . Configuration . Hooks . Where
89- ( i => i . onPause & (
90- ( i . withMovies & e . MediaInfo . Type == "Movie" )
91- || ( i . withEpisodes & e . MediaInfo . Type == "Episode" )
92- || ( i . withSongs & e . MediaInfo . Type == "Song" )
93- )
94- ) ;
95-
106+ var hooks = hooksByType ( iType ) . Where ( i => i . onPause ) ;
96107
97108 var jsonString = buildJson ( e , "media.pause" ) ;
98109
99110 SendHooks ( hooks , jsonString ) ;
100- } else if ( e . IsPaused == false & getPauseControl ( e . DeviceId ) . wasPaused )
111+ }
112+ else if ( e . IsPaused == false & getPauseControl ( e . DeviceId ) . wasPaused )
101113 {
102114 getPauseControl ( e . DeviceId ) . wasPaused = false ;
103115
104- var hooks = Plugin . Instance . Configuration . Hooks . Where
105- ( i => i . onResume & (
106- ( i . withMovies & e . MediaInfo . Type == "Movie" )
107- || ( i . withEpisodes & e . MediaInfo . Type == "Episode" )
108- || ( i . withSongs & e . MediaInfo . Type == "Song" )
109- )
110- ) ;
116+ var hooks = hooksByType ( iType ) . Where ( i => i . onResume ) ;
111117 var jsonString = buildJson ( e , "media.resume" ) ;
112118
113119 SendHooks ( hooks , jsonString ) ;
114120 }
115121
116122 }
117-
118123 private void PlaybackStart ( object sender , PlaybackProgressEventArgs e )
119124 {
120125 getPauseControl ( e . DeviceId ) . wasPaused = false ;
121126
122- var jsonString = buildJson ( e , "media.play" ) ;
127+ var iType = _libraryManager . GetContentType ( e . Item ) ;
128+
123129 //get all configured hooks for onPlay
124- var hooks = Plugin . Instance . Configuration . Hooks . Where
125- ( i => i . onPlay & (
126- ( i . withMovies & e . MediaInfo . Type == "Movie" )
127- || ( i . withEpisodes & e . MediaInfo . Type == "Episode" )
128- || ( i . withSongs & e . MediaInfo . Type == "Song" )
129- )
130- ) ;
130+ var hooks = hooksByType ( iType ) . Where ( i => i . onPlay ) ;
131+
132+ var jsonString = buildJson ( e , "media.play" ) ;
131133
132134 SendHooks ( hooks , jsonString ) ;
133135 }
@@ -142,7 +144,7 @@ private void PlaybackStopped(object sender, PlaybackProgressEventArgs e)
142144 ( i => i . onStop & (
143145 ( i . withMovies & e . MediaInfo . Type == "Movie" )
144146 || ( i . withEpisodes & e . MediaInfo . Type == "Episode" )
145- || ( i . withSongs & e . MediaInfo . Type == "Song " )
147+ || ( i . withSongs & e . MediaInfo . Type == "Audio " )
146148 )
147149 ) ;
148150 if ( hooks . Count ( ) > 0 )
@@ -151,19 +153,28 @@ private void PlaybackStopped(object sender, PlaybackProgressEventArgs e)
151153 var jsonString = buildJson ( e , "media.stop" ) ;
152154 SendHooks ( hooks , jsonString ) ;
153155 }
154- }
156+ }
155157
158+ public IEnumerable < PluginConfiguration . Hook > hooksByType ( string type )
159+ {
160+ return Plugin . Instance . Configuration . Hooks . Where ( h =>
161+ ( h . withMovies && type == "movies" ) ||
162+ ( h . withEpisodes && type == "tvshows" ) ||
163+ ( h . withSongs && type == "music" )
164+ ) ;
165+ }
166+
156167 public void SendHooks ( IEnumerable < PluginConfiguration . Hook > hooks , string jsonString )
157168 {
158169 foreach ( var h in hooks )
159170 {
160171 //send payload
161- SendHooks ( h , jsonString ) ;
172+ SendHook ( h , jsonString ) ;
162173
163174 }
164175 }
165-
166- public async Task < bool > SendHooks ( PluginConfiguration . Hook h , string jsonString )
176+
177+ public async Task < bool > SendHook ( PluginConfiguration . Hook h , string jsonString )
167178 {
168179 _logger . Debug ( "Sending paylod to {0}" , h . URL ) ;
169180 _logger . Debug ( jsonString ) ;
@@ -177,12 +188,30 @@ public async Task<bool> SendHooks (PluginConfiguration.Hook h, string jsonString
177188 }
178189 return true ;
179190 }
180-
191+
192+ public string buildJson ( BaseItem i , string trigger )
193+ {
194+
195+ envelope j = new envelope ( )
196+ {
197+ @event = trigger ,
198+
199+ Metadata = new Metadata ( )
200+ {
201+ type = _libraryManager . GetContentType ( i ) ,
202+ title = i . Name ,
203+ grandparentTitle = i . Parent . Parent . Name ,
204+ parentTitle = i . Parent . Name ,
205+ guid = i . Id . ToString ( )
206+ }
207+ } ;
208+ return _jsonSerializer . SerializeToString ( j ) ;
209+ }
181210
182211 public string buildJson ( PlaybackProgressEventArgs e , string trigger )
183212 {
184213 envelope j = new envelope ( ) {
185- _event = trigger ,
214+ @event = trigger ,
186215
187216 Account = new Account ( ) { } ,
188217 Player = new Player ( ) {
@@ -191,51 +220,15 @@ public string buildJson (PlaybackProgressEventArgs e, string trigger)
191220 } ,
192221 Metadata = new Metadata ( )
193222 {
194- type = e . MediaInfo . Type ,
195- title = e . MediaInfo . Name ,
223+ type = _libraryManager . GetContentType ( e . Item ) ,
224+ title = e . Item . Name ,
196225 grandparentTitle = e . Item . Parent . Parent . Name ,
197226 parentTitle = e . Item . Parent . Name ,
198227 guid = e . Item . Id . ToString ( )
199228 }
200229 } ;
201230
202231 return _jsonSerializer . SerializeToString ( j ) ;
203-
204- /*
205- MemoryStream stream1 = new MemoryStream();
206- DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(envelope));
207- ser.WriteObject(stream1, j);
208-
209- stream1.Position = 0;
210- StreamReader sr = new StreamReader(stream1);
211-
212-
213- return (sr.ReadToEnd());
214- */
215- }
216-
217- public Task SendNotification ( UserNotification request , CancellationToken cancellationToken )
218- {
219- return SendNotifcationHook ( request ) ;
220- }
221-
222- public async Task < bool > SendNotifcationHook ( UserNotification request )
223- {
224- var hooks = Plugin . Instance . Configuration . Hooks . Where ( i => i . withNotifications ) ;
225- var json = _jsonSerializer . SerializeToString ( request ) ;
226- _logger . Debug ( json ) ;
227-
228- foreach ( var h in hooks )
229- {
230- await SendHooks ( h , json ) ;
231- }
232- return true ;
233- }
234-
235- public bool IsEnabledForUser ( User user )
236- {
237-
238- return user . Policy . IsAdministrator ;
239232 }
240233 }
241234}
0 commit comments