mirror of https://github.com/Sonarr/Sonarr
More notificationUI changes, start notification updates
This commit is contained in:
parent
c5376319fe
commit
63f2ba7f77
|
@ -1,5 +1,7 @@
|
|||
using System.Collections.Generic;
|
||||
using NzbDrone.Api.ClientSchema;
|
||||
using NzbDrone.Common.Reflection;
|
||||
using NzbDrone.Core.Annotations;
|
||||
using NzbDrone.Core.Notifications;
|
||||
using Omu.ValueInjecter;
|
||||
|
||||
|
@ -12,7 +14,9 @@ namespace NzbDrone.Api.Notifications
|
|||
public NotificationModule(INotificationService notificationService)
|
||||
{
|
||||
_notificationService = notificationService;
|
||||
|
||||
GetResourceAll = GetAll;
|
||||
UpdateResource = Update;
|
||||
}
|
||||
|
||||
private List<NotificationResource> GetAll()
|
||||
|
@ -23,14 +27,42 @@ namespace NzbDrone.Api.Notifications
|
|||
|
||||
foreach (var notification in notifications)
|
||||
{
|
||||
var indexerResource = new NotificationResource();
|
||||
indexerResource.InjectFrom(notification);
|
||||
indexerResource.Fields = SchemaBuilder.GenerateSchema(notification.Settings);
|
||||
var notificationResource = new NotificationResource();
|
||||
notificationResource.InjectFrom(notification);
|
||||
notificationResource.Fields = SchemaBuilder.GenerateSchema(notification.Settings);
|
||||
|
||||
result.Add(indexerResource);
|
||||
result.Add(notificationResource);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private NotificationResource Update(NotificationResource notificationResource)
|
||||
{
|
||||
//Todo: Convert Resource back to Settings
|
||||
|
||||
var notification = _notificationService.Get(notificationResource.Id);
|
||||
|
||||
notification.OnGrab = notificationResource.OnGrab;
|
||||
notification.OnDownload = notificationResource.OnDownload;
|
||||
|
||||
var properties = notification.Settings.GetType().GetSimpleProperties();
|
||||
|
||||
foreach (var propertyInfo in properties)
|
||||
{
|
||||
var fieldAttribute = propertyInfo.GetAttribute<FieldDefinitionAttribute>(false);
|
||||
|
||||
if (fieldAttribute != null)
|
||||
{
|
||||
//Find coresponding field
|
||||
|
||||
var field = notificationResource.Fields.Find(f => f.Name == propertyInfo.Name);
|
||||
|
||||
propertyInfo.SetValue(notification.Settings, field.Value, null);
|
||||
}
|
||||
}
|
||||
|
||||
return notificationResource;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -11,5 +11,6 @@ namespace NzbDrone.Api.Notifications
|
|||
public Boolean OnGrab { get; set; }
|
||||
public Boolean OnDownload { get; set; }
|
||||
public List<Field> Fields { get; set; }
|
||||
public String Implementation { get; set; }
|
||||
}
|
||||
}
|
|
@ -13,5 +13,6 @@ namespace NzbDrone.Core.Notifications
|
|||
public bool OnDownload { get; set; }
|
||||
public INotifcationSettings Settings { get; set; }
|
||||
public INotification Instance { get; set; }
|
||||
public string Implementation { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NLog;
|
||||
using Newtonsoft.Json;
|
||||
using NzbDrone.Common;
|
||||
using NzbDrone.Common.Composition;
|
||||
using NzbDrone.Common.Messaging;
|
||||
|
@ -13,6 +14,7 @@ namespace NzbDrone.Core.Notifications
|
|||
public interface INotificationService
|
||||
{
|
||||
List<Notification> All();
|
||||
Notification Get(int id);
|
||||
}
|
||||
|
||||
public class NotificationService
|
||||
|
@ -42,6 +44,11 @@ namespace NzbDrone.Core.Notifications
|
|||
return _notificationRepository.All().Select(ToNotification).ToList();
|
||||
}
|
||||
|
||||
public Notification Get(int id)
|
||||
{
|
||||
return ToNotification(_notificationRepository.Get(id));
|
||||
}
|
||||
|
||||
private Notification ToNotification(NotificationDefinition definition)
|
||||
{
|
||||
var notification = new Notification();
|
||||
|
@ -50,6 +57,7 @@ namespace NzbDrone.Core.Notifications
|
|||
notification.OnDownload = definition.OnDownload;
|
||||
notification.Instance = GetInstance(definition);
|
||||
notification.Name = definition.Name;
|
||||
notification.Implementation = definition.Implementation;
|
||||
notification.Settings = ((dynamic)notification.Instance).ImportSettingsFromJson(definition.Settings);
|
||||
|
||||
return notification;
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 769 B |
Binary file not shown.
After Width: | Height: | Size: 606 B |
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
Binary file not shown.
After Width: | Height: | Size: 494 B |
Binary file not shown.
After Width: | Height: | Size: 718 B |
|
@ -1,5 +1,12 @@
|
|||
<div class="row">
|
||||
<div class="span12">
|
||||
<div id="x-notifications" class="form-horizontal"></div>
|
||||
</div>
|
||||
</div>
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Type</th>
|
||||
<th>Name</th>
|
||||
<th>On Grab</th>
|
||||
<th>On Download</th>
|
||||
<th>Controls</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody></tbody>
|
||||
</table>
|
|
@ -2,7 +2,7 @@
|
|||
define(['app', 'Settings/Notifications/ItemView'], function () {
|
||||
NzbDrone.Settings.Notifications.CollectionView = Backbone.Marionette.CompositeView.extend({
|
||||
itemView : NzbDrone.Settings.Notifications.ItemView,
|
||||
itemViewContainer : '#x-notifications',
|
||||
itemViewContainer : 'tbody',
|
||||
template : 'Settings/Notifications/CollectionTemplate'
|
||||
});
|
||||
});
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h3>Edit</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-horizontal">
|
||||
<div class="control-group">
|
||||
<label class="control-label">Name</label>
|
||||
|
||||
<div class="controls">
|
||||
<input type="text" name="name"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label">On Grab</label>
|
||||
|
||||
<div class="controls">
|
||||
<label class="checkbox toggle well">
|
||||
<input type="checkbox" name="onGrab"/>
|
||||
<p>
|
||||
<span>On</span>
|
||||
<span>Off</span>
|
||||
</p>
|
||||
|
||||
<div class="btn btn-primary slide-button"></div>
|
||||
</label>
|
||||
|
||||
<span class="help-inline-checkbox">
|
||||
<i class="icon-question-sign" title="Do you want to get notifications when episodes are grabbed?"></i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label">On Download</label>
|
||||
|
||||
<div class="controls">
|
||||
<label class="checkbox toggle well">
|
||||
<input type="checkbox" name="onDownload"/>
|
||||
<p>
|
||||
<span>On</span>
|
||||
<span>Off</span>
|
||||
</p>
|
||||
|
||||
<div class="btn btn-primary slide-button"></div>
|
||||
</label>
|
||||
|
||||
<span class="help-inline-checkbox">
|
||||
<i class="icon-question-sign" title="Do you want to get notifications when episodes are downloaded?"></i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#each fields}}
|
||||
{{debug}}
|
||||
{{order}}
|
||||
{{value}}
|
||||
{{formField}}
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-danger pull-left x-remove">delete</button>
|
||||
<button class="btn" data-dismiss="modal">cancel</button>
|
||||
<button class="btn btn-primary x-save">save</button>
|
||||
</div>
|
|
@ -0,0 +1,36 @@
|
|||
"use strict";
|
||||
|
||||
define([
|
||||
'app',
|
||||
'Settings/Notifications/Model'
|
||||
|
||||
], function () {
|
||||
|
||||
NzbDrone.Settings.Notifications.EditView = Backbone.Marionette.ItemView.extend({
|
||||
template : 'Settings/Notifications/EditTemplate',
|
||||
|
||||
events: {
|
||||
'click .x-save': 'save'
|
||||
},
|
||||
|
||||
save: function () {
|
||||
this.model.save();
|
||||
|
||||
// window.alert('saving');
|
||||
// this.model.save(undefined, this.syncNotification("Notification Settings Saved", "Couldn't Save Notification Settings"));
|
||||
},
|
||||
|
||||
|
||||
syncNotification: function (success, error) {
|
||||
return {
|
||||
success: function () {
|
||||
window.alert(success);
|
||||
},
|
||||
|
||||
error: function () {
|
||||
window.alert(error);
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
||||
});
|
|
@ -1,47 +1,9 @@
|
|||
<fieldset>
|
||||
<legend>{{name}}</legend>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label">On Grab</label>
|
||||
|
||||
<div class="controls">
|
||||
<label class="checkbox toggle well">
|
||||
<input type="checkbox" name="onGrab"/>
|
||||
<p>
|
||||
<span>On</span>
|
||||
<span>Off</span>
|
||||
</p>
|
||||
|
||||
<div class="btn btn-primary slide-button"></div>
|
||||
</label>
|
||||
|
||||
<span class="help-inline-checkbox">
|
||||
<i class="icon-question-sign" title="Do you want to get notifications when episodes are grabbed?"></i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label">On Download</label>
|
||||
|
||||
<div class="controls">
|
||||
<label class="checkbox toggle well">
|
||||
<input type="checkbox" name="onDownload"/>
|
||||
<p>
|
||||
<span>On</span>
|
||||
<span>Off</span>
|
||||
</p>
|
||||
|
||||
<div class="btn btn-primary slide-button"></div>
|
||||
</label>
|
||||
|
||||
<span class="help-inline-checkbox">
|
||||
<i class="icon-question-sign" title="Do you want to get notifications when episodes are downloaded?"></i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#each fields}}
|
||||
{{formField}}
|
||||
{{/each}}
|
||||
</fieldset>
|
||||
<td><img src="/content/images/notifications/{{implementation}}.png" alt="{{implementation}}"/></td>
|
||||
<td name="name"></td>
|
||||
<td name="onGrab"></td>
|
||||
<td name="onDownload"></td>
|
||||
<td name="cutoffName"></td>
|
||||
<td>
|
||||
<i class="icon-cog x-edit" title="Edit"></i>
|
||||
| Delete
|
||||
</td>
|
|
@ -2,32 +2,28 @@
|
|||
|
||||
define([
|
||||
'app',
|
||||
'Settings/Notifications/Collection'
|
||||
'Settings/Notifications/Collection',
|
||||
'Settings/Notifications/EditView'
|
||||
|
||||
], function () {
|
||||
|
||||
NzbDrone.Settings.Notifications.ItemView = Backbone.Marionette.ItemView.extend({
|
||||
template : 'Settings/Notifications/ItemTemplate',
|
||||
initialize: function () {
|
||||
NzbDrone.vent.on(NzbDrone.Commands.SaveSettings, this.saveSettings, this);
|
||||
tagName: 'tr',
|
||||
|
||||
events: {
|
||||
'click .x-edit' : 'edit',
|
||||
'click .x-remove': 'remove'
|
||||
},
|
||||
|
||||
saveSettings: function () {
|
||||
|
||||
//this.model.save(undefined, this.syncNotification("Naming Settings Saved", "Couldn't Save Naming Settings"));
|
||||
edit: function () {
|
||||
var view = new NzbDrone.Settings.Notifications.EditView({ model: this.model});
|
||||
NzbDrone.modalRegion.show(view);
|
||||
},
|
||||
|
||||
|
||||
syncNotification: function (success, error) {
|
||||
return {
|
||||
success: function () {
|
||||
window.alert(success);
|
||||
},
|
||||
|
||||
error: function () {
|
||||
window.alert(error);
|
||||
}
|
||||
};
|
||||
remove: function () {
|
||||
var view = new NzbDrone.Settings.Notifications.DeleteView({ model: this.model});
|
||||
NzbDrone.modalRegion.show(view);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
@ -16,16 +16,16 @@ define([
|
|||
},
|
||||
|
||||
events: {
|
||||
'click .x-edit' : 'editSeries',
|
||||
'click .x-remove': 'removeSeries'
|
||||
'click .x-edit' : 'edit',
|
||||
'click .x-remove': 'remove'
|
||||
},
|
||||
|
||||
editSeries: function () {
|
||||
edit: function () {
|
||||
var view = new NzbDrone.Settings.Quality.Profile.EditQualityProfileView({ model: this.model});
|
||||
NzbDrone.modalRegion.show(view);
|
||||
},
|
||||
|
||||
removeSeries: function () {
|
||||
remove: function () {
|
||||
var view = new NzbDrone.Series.Delete.DeleteSeriesView({ model: this.model });
|
||||
NzbDrone.modalRegion.show(view);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue