More notificationUI changes, start notification updates

This commit is contained in:
Mark McDowall 2013-05-20 23:16:19 -07:00
parent c5376319fe
commit 63f2ba7f77
16 changed files with 188 additions and 78 deletions

View File

@ -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;
}
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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

View File

@ -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>

View File

@ -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'
});
});

View File

@ -0,0 +1,67 @@
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</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>

View File

@ -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);
}
};
}
});
});

View File

@ -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>

View File

@ -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);
}
});
});

View File

@ -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);
}