QualityProfiles edit via backbone

pull/4/head
Mark McDowall 12 years ago
parent bc424709af
commit 79902194df

@ -22,8 +22,13 @@ namespace NzbDrone.Api
//Mapper.CreateMap<QualityProfile, QualityProfileModel>() //Mapper.CreateMap<QualityProfile, QualityProfileModel>()
// .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.QualityProfileId)); // .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.QualityProfileId));
//Mapper.CreateMap<QualityProfileModel, QualityProfile>() Mapper.CreateMap<QualityProfileModel, QualityProfile>()
// .ForMember(dest => dest.QualityProfileId, opt => opt.MapFrom(src => src.Id)); .ForMember(dest => dest.QualityProfileId, opt => opt.MapFrom(src => src.Id))
.ForMember(dest => dest.Allowed, opt => opt.ResolveUsing<QualitiesToAllowedResolver>().FromMember(src => src.Qualities));
Mapper.CreateMap<QualityProfile, QualityProfileModel>()
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.QualityProfileId))
.ForMember(dest => dest.Qualities, opt => opt.ResolveUsing<AllowedToQualitiesResolver>().FromMember(src => src.Allowed));
Mapper.CreateMap<QualityTypes, QualityProfileType>() Mapper.CreateMap<QualityTypes, QualityProfileType>()
.ForMember(dest => dest.Allowed, opt => opt.Ignore()); .ForMember(dest => dest.Allowed, opt => opt.Ignore());

@ -104,6 +104,8 @@
<Compile Include="QualityProfiles\QualityProfileModel.cs" /> <Compile Include="QualityProfiles\QualityProfileModel.cs" />
<Compile Include="QualityProfiles\QualityProfileService.cs" /> <Compile Include="QualityProfiles\QualityProfileService.cs" />
<Compile Include="QualityProfiles\QualityProfileType.cs" /> <Compile Include="QualityProfiles\QualityProfileType.cs" />
<Compile Include="Resolvers\AllowedToQualitiesResolver.cs" />
<Compile Include="Resolvers\QualitiesToAllowedResolver.cs" />
<Compile Include="Resolvers\QualityTypesToIntResolver.cs" /> <Compile Include="Resolvers\QualityTypesToIntResolver.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

@ -29,28 +29,27 @@ namespace NzbDrone.Api.QualityProfiles
if (request.Id == 0) if (request.Id == 0)
{ {
var profiles = _qualityProvider.All(); var profiles = _qualityProvider.All();
var models = new List<QualityProfileModel>(); return Mapper.Map<List<QualityProfile>, List<QualityProfileModel>>(profiles);
profiles.ForEach(p => models.Add(ToModel(p)));
return models;
} }
var profile = _qualityProvider.Get(request.Id); var profile = _qualityProvider.Get(request.Id);
return ToModel(profile); return Mapper.Map<QualityProfile, QualityProfileModel>(profile);
} }
public override object OnPost(QualityProfileModel data) public override object OnPost(QualityProfileModel data)
{ {
//Create
var profile = Mapper.Map<QualityProfileModel, QualityProfile>(data); var profile = Mapper.Map<QualityProfileModel, QualityProfile>(data);
_qualityProvider.Update(profile); _qualityProvider.Add(profile);
return data; return data;
} }
public override object OnPut(QualityProfileModel data) public override object OnPut(QualityProfileModel data)
{ {
//Update
var profile = Mapper.Map<QualityProfileModel, QualityProfile>(data); var profile = Mapper.Map<QualityProfileModel, QualityProfile>(data);
data.Id = _qualityProvider.Add(profile); _qualityProvider.Update(profile);
return data; return data;
} }
@ -61,21 +60,5 @@ namespace NzbDrone.Api.QualityProfiles
return "ok"; return "ok";
} }
public QualityProfileModel ToModel(QualityProfile profile)
{
var model = new QualityProfileModel();
model.Id = profile.QualityProfileId;
model.Name = profile.Name;
model.Cutoff = (int)profile.Cutoff;
model.Qualities = Mapper.Map<List<QualityTypes>, List<QualityProfileType>>(QualityTypes.All());
model.Qualities.ForEach(quality =>
{
quality.Allowed = profile.Allowed.SingleOrDefault(q => q.Id == quality.Id) != null;
});
return model;
}
} }
} }

@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AutoMapper;
using NzbDrone.Api.QualityProfiles;
using NzbDrone.Core.Repository.Quality;
namespace NzbDrone.Api.Resolvers
{
public class AllowedToQualitiesResolver : ValueResolver<List<QualityTypes>, List<QualityProfileType>>
{
protected override List<QualityProfileType> ResolveCore(List<QualityTypes> source)
{
var qualities = Mapper.Map<List<QualityTypes>, List<QualityProfileType>>(QualityTypes.All());
qualities.ForEach(quality =>
{
quality.Allowed = source.SingleOrDefault(q => q.Id == quality.Id) != null;
});
return qualities;
}
}
}

@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AutoMapper;
using NzbDrone.Api.QualityProfiles;
using NzbDrone.Core.Repository.Quality;
namespace NzbDrone.Api.Resolvers
{
public class QualitiesToAllowedResolver : ValueResolver<List<QualityProfileType>, List<QualityTypes>>
{
protected override List<QualityTypes> ResolveCore(List<QualityProfileType> source)
{
var ids = source.Where(s => s.Allowed).Select(s => s.Id).ToList();
var qualityTypes = new List<QualityTypes>();
ids.ForEach(id =>
{
qualityTypes.Add(QualityTypes.FindById(id));
});
return qualityTypes;
}
}
}

@ -3,14 +3,57 @@
className: "quality-profile", className: "quality-profile",
template: "#QualityProfileTemplate", template: "#QualityProfileTemplate",
events: { events: {
'click .quality-selectee': 'toggleAllowed' 'click .quality-selectee': 'toggleAllowed',
'change .cutoff': 'changeCutoff',
'change .name': 'changeName'
}, },
toggleAllowed: function (e) { toggleAllowed: function (e) {
//Add to cutoff //Add to cutoff
//Update model //Update model
var target = $(e.target);
var checked = $(e.target).attr('checked') != undefined; var checked = $(target).attr('checked') != undefined;
this.model.set({ }); var id = this.model.get("Id");
var qualities = _.clone(this.model.get("Qualities"));
_.each(qualities, function (qualityType) {
var qualityId = parseInt($(target).attr('data-quality-id'));
if (qualityType.Id == qualityId) {
qualityType.Allowed = checked;
//Todo: Add/Remove from cutoff
//Find cutoff dropdown
var cutoff = ('select#' + id);
if (checked) {
$('<option>' + qualityType.Name + '</option>').val(qualityId).appendTo(cutoff);
}
else {
$(cutoff).find('option[value="' + qualityId + '"]').remove();
}
}
});
this.model.set({ "Qualities": qualities });
this.model.save();
},
changeCutoff: function(e) {
//Todo: save change
var cutoff = $(e.target).val();
this.model.set({ "Cutoff": cutoff });
this.model.save();
},
changeName: function(e) {
var name = $(e.target).val();
//Todo: update default quality dropdown
$('#DefaultQualityProfileId option[value="' + this.model.get("Id") + '"]').html(name);
this.model.set({ "Name": name });
this.model.save();
} }
}); });

@ -120,8 +120,22 @@
@*@Html.IncludeScript("backbone/bootstrapper.js")*@ @*@Html.IncludeScript("backbone/bootstrapper.js")*@
<script id="QualityProfileTemplate" type="text/template"> <script id="QualityProfileTemplate" type="text/template">
<%= Name %> <div>
<%= Cutoff %> <strong>Name</strong>
<input type="text" value="<%= Name %>" class="name" />
</div>
<div>
<strong>Cutoff</strong>
<select id="<%= Id %>" class="cutoff">
<% _.each(Qualities, function(quality) { %>
<% if (quality.Allowed === true) { %>
<option value="<%= quality.Id %>" <%= quality.Id === Cutoff ? 'selected="selected"' : '' %>><%= quality.Name %></option>
<% } %>
<% }); %>
</select>
</div>
<% _.each(Qualities, function(quality) { %> <% _.each(Qualities, function(quality) { %>
<input id="<%= Id %>_<%= quality.Id %>" <input id="<%= Id %>_<%= quality.Id %>"
class="quality-selectee" class="quality-selectee"

Loading…
Cancel
Save