using System; using System.Collections.Generic; using System.Linq; using NzbDrone.Api.ClientSchema; using NzbDrone.Api.Mapping; using NzbDrone.Api.REST; using NzbDrone.Core.Notifications; using Omu.ValueInjecter; namespace NzbDrone.Api.Notifications { public class NotificationModule : NzbDroneRestModule { private readonly INotificationService _notificationService; public NotificationModule(INotificationService notificationService) { _notificationService = notificationService; GetResourceAll = GetAll; GetResourceById = GetNotification; CreateResource = Create; UpdateResource = Update; DeleteResource = DeleteNotification; } private NotificationResource GetNotification(int id) { return _notificationService.Get(id).InjectTo(); } private List GetAll() { var notifications = _notificationService.All(); var result = new List(notifications.Count); foreach (var notification in notifications) { var notificationResource = new NotificationResource(); notificationResource.InjectFrom(notification); notificationResource.Fields = SchemaBuilder.GenerateSchema(notification.Settings); notificationResource.TestCommand = String.Format("test{0}", notification.Implementation.ToLowerInvariant()); result.Add(notificationResource); } return result; } private int Create(NotificationResource notificationResource) { var notification = ConvertToNotification(notificationResource); return _notificationService.Create(notification).Id; } private void Update(NotificationResource notificationResource) { var notification = ConvertToNotification(notificationResource); notification.Id = notificationResource.Id; _notificationService.Update(notification); } private void DeleteNotification(int id) { _notificationService.Delete(id); } private Notification ConvertToNotification(NotificationResource notificationResource) { var notification = _notificationService.Schema() .SingleOrDefault(i => i.Implementation.Equals(notificationResource.Implementation, StringComparison.InvariantCultureIgnoreCase)); if (notification == null) { throw new BadRequestException("Invalid Notification Implementation"); } notification.InjectFrom(notificationResource); notification.Settings = SchemaDeserializer.DeserializeSchema(notification.Settings, notificationResource.Fields); return notification; } } }