Merge branch 'markus' into kay.one
This commit is contained in:
commit
711d729e72
|
@ -12,23 +12,13 @@ namespace NzbDrone.Core.Repository.Quality
|
||||||
public class QualityProfile
|
public class QualityProfile
|
||||||
{
|
{
|
||||||
public virtual int QualityProfileId { get; set; }
|
public virtual int QualityProfileId { get; set; }
|
||||||
|
|
||||||
[Required(ErrorMessage = "A Name is Required")]
|
|
||||||
[DisplayName("Name")]
|
|
||||||
[DisplayFormat(ConvertEmptyStringToNull = false)]
|
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
[Ignore]
|
[Ignore]
|
||||||
[DisplayName("Allowed Qualities")]
|
|
||||||
public List<QualityTypes> Allowed { get; set; }
|
public List<QualityTypes> Allowed { get; set; }
|
||||||
|
|
||||||
[Ignore]
|
[Ignore]
|
||||||
[DisplayName("Allowed Qualities String")]
|
|
||||||
[DisplayFormat(ConvertEmptyStringToNull = false)]
|
|
||||||
public string AllowedString { get; set; }
|
public string AllowedString { get; set; }
|
||||||
|
|
||||||
[DisplayName("Cut-off")]
|
|
||||||
[Required(ErrorMessage = "Valid Cut-off is Required")]
|
|
||||||
public QualityTypes Cutoff { get; set; }
|
public QualityTypes Cutoff { get; set; }
|
||||||
|
|
||||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||||
|
|
|
@ -120,29 +120,14 @@ namespace NzbDrone.Web.Controllers
|
||||||
|
|
||||||
public ActionResult Quality()
|
public ActionResult Quality()
|
||||||
{
|
{
|
||||||
var qualityTypes = new List<QualityTypes>();
|
|
||||||
|
|
||||||
foreach (QualityTypes qual in Enum.GetValues(typeof(QualityTypes)))
|
|
||||||
{
|
|
||||||
qualityTypes.Add(qual);
|
|
||||||
}
|
|
||||||
|
|
||||||
ViewData["Qualities"] = qualityTypes;
|
|
||||||
|
|
||||||
var profiles = _qualityProvider.All().ToList();
|
var profiles = _qualityProvider.All().ToList();
|
||||||
|
|
||||||
foreach (var qualityProfile in profiles)
|
|
||||||
{
|
|
||||||
qualityProfile.AllowedString = string.Join(",", qualityProfile.Allowed);
|
|
||||||
}
|
|
||||||
|
|
||||||
var defaultQualityQualityProfileId = Convert.ToInt32(_configProvider.DefaultQualityProfile);
|
var defaultQualityQualityProfileId = Convert.ToInt32(_configProvider.DefaultQualityProfile);
|
||||||
var qualityProfileSelectList = new SelectList(profiles, "QualityProfileId", "Name");
|
var qualityProfileSelectList = new SelectList(profiles, "QualityProfileId", "Name");
|
||||||
var qualityTypesFromDb = _qualityTypeProvider.All();
|
var qualityTypesFromDb = _qualityTypeProvider.All();
|
||||||
|
|
||||||
var model = new QualityModel
|
var model = new QualityModel
|
||||||
{
|
{
|
||||||
Profiles = profiles,
|
|
||||||
DefaultQualityProfileId = defaultQualityQualityProfileId,
|
DefaultQualityProfileId = defaultQualityQualityProfileId,
|
||||||
QualityProfileSelectList = qualityProfileSelectList,
|
QualityProfileSelectList = qualityProfileSelectList,
|
||||||
SdtvMaxSize = qualityTypesFromDb.Single(q => q.QualityTypeId == 1).MaxSize,
|
SdtvMaxSize = qualityTypesFromDb.Single(q => q.QualityTypeId == 1).MaxSize,
|
||||||
|
@ -153,6 +138,8 @@ namespace NzbDrone.Web.Controllers
|
||||||
Bluray1080pMaxSize = qualityTypesFromDb.Single(q => q.QualityTypeId == 7).MaxSize
|
Bluray1080pMaxSize = qualityTypesFromDb.Single(q => q.QualityTypeId == 7).MaxSize
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ViewData["Profiles"] = profiles;
|
||||||
|
|
||||||
return View(model);
|
return View(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -197,9 +184,9 @@ namespace NzbDrone.Web.Controllers
|
||||||
return View(model);
|
return View(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActionResult EpisodeSorting()
|
public ActionResult Naming()
|
||||||
{
|
{
|
||||||
var model = new EpisodeSortingModel();
|
var model = new EpisodeNamingModel();
|
||||||
|
|
||||||
model.SeriesName = _configProvider.SortingIncludeSeriesName;
|
model.SeriesName = _configProvider.SortingIncludeSeriesName;
|
||||||
model.EpisodeName = _configProvider.SortingIncludeEpisodeTitle;
|
model.EpisodeName = _configProvider.SortingIncludeEpisodeTitle;
|
||||||
|
@ -239,17 +226,8 @@ namespace NzbDrone.Web.Controllers
|
||||||
return View(model);
|
return View(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ViewResult AddProfile()
|
public PartialViewResult AddProfile()
|
||||||
{
|
{
|
||||||
var qualityTypes = new List<QualityTypes>();
|
|
||||||
|
|
||||||
foreach (QualityTypes qual in Enum.GetValues(typeof(QualityTypes)))
|
|
||||||
{
|
|
||||||
qualityTypes.Add(qual);
|
|
||||||
}
|
|
||||||
|
|
||||||
ViewData["Qualities"] = qualityTypes;
|
|
||||||
|
|
||||||
var qualityProfile = new QualityProfile
|
var qualityProfile = new QualityProfile
|
||||||
{
|
{
|
||||||
Name = "New Profile",
|
Name = "New Profile",
|
||||||
|
@ -257,28 +235,25 @@ namespace NzbDrone.Web.Controllers
|
||||||
Cutoff = QualityTypes.Unknown
|
Cutoff = QualityTypes.Unknown
|
||||||
};
|
};
|
||||||
|
|
||||||
var id = _qualityProvider.Add(qualityProfile);
|
qualityProfile.QualityProfileId = _qualityProvider.Add(qualityProfile);
|
||||||
qualityProfile.QualityProfileId = id;
|
|
||||||
qualityProfile.AllowedString = "Unknown";
|
|
||||||
|
|
||||||
ViewData["ProfileId"] = id;
|
return GetQualityProfileView(qualityProfile);
|
||||||
|
|
||||||
return View("QualityProfileItem", qualityProfile);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActionResult GetQualityProfileView(QualityProfile profile)
|
public PartialViewResult GetQualityProfileView(QualityProfile profile)
|
||||||
{
|
{
|
||||||
var qualityTypes = new List<QualityTypes>();
|
var model = new QualityProfileModel();
|
||||||
|
model.QualityProfileId = profile.QualityProfileId;
|
||||||
|
model.Name = profile.Name;
|
||||||
|
model.Allowed = profile.Allowed;
|
||||||
|
model.Sdtv = profile.Allowed.Contains(QualityTypes.SDTV);
|
||||||
|
model.Dvd = profile.Allowed.Contains(QualityTypes.DVD);
|
||||||
|
model.Hdtv = profile.Allowed.Contains(QualityTypes.HDTV);
|
||||||
|
model.Webdl = profile.Allowed.Contains(QualityTypes.WEBDL);
|
||||||
|
model.Bluray720p = profile.Allowed.Contains(QualityTypes.Bluray720p);
|
||||||
|
model.Bluray1080p = profile.Allowed.Contains(QualityTypes.Bluray1080p);
|
||||||
|
|
||||||
foreach (QualityTypes qual in Enum.GetValues(typeof(QualityTypes)))
|
return PartialView("QualityProfileItem", model);
|
||||||
{
|
|
||||||
qualityTypes.Add(qual);
|
|
||||||
}
|
|
||||||
|
|
||||||
ViewData["Qualities"] = qualityTypes;
|
|
||||||
ViewData["ProfileId"] = profile.QualityProfileId;
|
|
||||||
|
|
||||||
return PartialView("QualityProfileItem", profile);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public JsonResult DeleteQualityProfile(int profileId)
|
public JsonResult DeleteQualityProfile(int profileId)
|
||||||
|
@ -451,25 +426,38 @@ namespace NzbDrone.Web.Controllers
|
||||||
if (data.Profiles == null)
|
if (data.Profiles == null)
|
||||||
return GetSuccessResult();
|
return GetSuccessResult();
|
||||||
|
|
||||||
foreach (var profile in data.Profiles)
|
foreach (var profileModel in data.Profiles)
|
||||||
{
|
{
|
||||||
Logger.Debug(String.Format("Updating Profile: {0}", profile));
|
Logger.Debug(String.Format("Updating Profile: {0}", profileModel));
|
||||||
|
|
||||||
|
var profile = new QualityProfile();
|
||||||
|
profile.QualityProfileId = profileModel.QualityProfileId;
|
||||||
|
profile.Name = profileModel.Name;
|
||||||
|
profile.Cutoff = profileModel.Cutoff;
|
||||||
|
|
||||||
profile.Allowed = new List<QualityTypes>();
|
profile.Allowed = new List<QualityTypes>();
|
||||||
|
|
||||||
//Remove the extra comma from the end
|
if (profileModel.Sdtv)
|
||||||
profile.AllowedString = profile.AllowedString.Trim(',');
|
profile.Allowed.Add(QualityTypes.SDTV);
|
||||||
|
|
||||||
foreach (var quality in profile.AllowedString.Split(','))
|
if (profileModel.Dvd)
|
||||||
{
|
profile.Allowed.Add(QualityTypes.DVD);
|
||||||
var qType = (QualityTypes)Enum.Parse(typeof(QualityTypes), quality);
|
|
||||||
profile.Allowed.Add(qType);
|
|
||||||
}
|
|
||||||
|
|
||||||
//If the Cutoff value selected is not in the allowed list then use the last allowed value, this should be validated on submit
|
if (profileModel.Hdtv)
|
||||||
|
profile.Allowed.Add(QualityTypes.HDTV);
|
||||||
|
|
||||||
|
if (profileModel.Webdl)
|
||||||
|
profile.Allowed.Add(QualityTypes.WEBDL);
|
||||||
|
|
||||||
|
if (profileModel.Bluray720p)
|
||||||
|
profile.Allowed.Add(QualityTypes.Bluray720p);
|
||||||
|
|
||||||
|
if (profileModel.Bluray1080p)
|
||||||
|
profile.Allowed.Add(QualityTypes.Bluray1080p);
|
||||||
|
|
||||||
|
//If the Cutoff value selected is not in the allowed list then return an error
|
||||||
if (!profile.Allowed.Contains(profile.Cutoff))
|
if (!profile.Allowed.Contains(profile.Cutoff))
|
||||||
return GetInvalidModelResult();
|
return GetInvalidModelResult();
|
||||||
//profile.Cutoff = profile.Allowed.Last();
|
|
||||||
|
|
||||||
_qualityProvider.Update(profile);
|
_qualityProvider.Update(profile);
|
||||||
}
|
}
|
||||||
|
@ -559,7 +547,7 @@ namespace NzbDrone.Web.Controllers
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public JsonResult SaveEpisodeSorting(EpisodeSortingModel data)
|
public JsonResult SaveNaming(EpisodeNamingModel data)
|
||||||
{
|
{
|
||||||
if (ModelState.IsValid)
|
if (ModelState.IsValid)
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,7 +4,7 @@ using System.Web.Mvc;
|
||||||
|
|
||||||
namespace NzbDrone.Web.Models
|
namespace NzbDrone.Web.Models
|
||||||
{
|
{
|
||||||
public class EpisodeSortingModel
|
public class EpisodeNamingModel
|
||||||
{
|
{
|
||||||
[DisplayName("Series Name")]
|
[DisplayName("Series Name")]
|
||||||
[Description("Should filenames contain the series name when renamed?")]
|
[Description("Should filenames contain the series name when renamed?")]
|
|
@ -7,7 +7,7 @@ namespace NzbDrone.Web.Models
|
||||||
{
|
{
|
||||||
public class QualityModel
|
public class QualityModel
|
||||||
{
|
{
|
||||||
public List<QualityProfile> Profiles { get; set; }
|
public List<QualityProfileModel> Profiles { get; set; }
|
||||||
|
|
||||||
[DisplayName("Default Quality Profile")]
|
[DisplayName("Default Quality Profile")]
|
||||||
[Description("The default quality to use when adding series to NzbDrone")]
|
[Description("The default quality to use when adding series to NzbDrone")]
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Web.Mvc;
|
||||||
|
using NzbDrone.Core.Repository.Quality;
|
||||||
|
using PetaPoco;
|
||||||
|
|
||||||
|
namespace NzbDrone.Web.Models
|
||||||
|
{
|
||||||
|
public class QualityProfileModel
|
||||||
|
{
|
||||||
|
public int QualityProfileId { get; set; }
|
||||||
|
|
||||||
|
[Required(ErrorMessage = "A Name is Required")]
|
||||||
|
[DisplayName("Name")]
|
||||||
|
[DisplayFormat(ConvertEmptyStringToNull = false)]
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
[DisplayName("Cut-off")]
|
||||||
|
[Required(ErrorMessage = "Valid Cut-off is Required")]
|
||||||
|
public QualityTypes Cutoff { get; set; }
|
||||||
|
|
||||||
|
[DisplayName("Allowed Qualities")]
|
||||||
|
public List<QualityTypes> Allowed { get; set; }
|
||||||
|
|
||||||
|
//Quality Booleans
|
||||||
|
[DisplayName("SDTV")]
|
||||||
|
public bool Sdtv { get; set; }
|
||||||
|
|
||||||
|
[DisplayName("DVD")]
|
||||||
|
public bool Dvd { get; set; }
|
||||||
|
|
||||||
|
[DisplayName("HDTV")]
|
||||||
|
public bool Hdtv { get; set; }
|
||||||
|
|
||||||
|
[DisplayName("WEBDL")]
|
||||||
|
public bool Webdl { get; set; }
|
||||||
|
|
||||||
|
[DisplayName("Bluray720p")]
|
||||||
|
public bool Bluray720p { get; set; }
|
||||||
|
|
||||||
|
[DisplayName("Bluray1080p")]
|
||||||
|
public bool Bluray1080p { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -221,7 +221,8 @@
|
||||||
<Compile Include="Helpers\DescriptionExtension.cs" />
|
<Compile Include="Helpers\DescriptionExtension.cs" />
|
||||||
<Compile Include="Helpers\HtmlPrefixScopeExtensions.cs" />
|
<Compile Include="Helpers\HtmlPrefixScopeExtensions.cs" />
|
||||||
<Compile Include="Helpers\IsCurrentActionHelper.cs" />
|
<Compile Include="Helpers\IsCurrentActionHelper.cs" />
|
||||||
<Compile Include="Models\CodeFile1.cs" />
|
<Compile Include="Models\QualityProfileModel.cs" />
|
||||||
|
<Compile Include="Models\FooterModel.cs" />
|
||||||
<Compile Include="Models\ExistingSeriesModel.cs" />
|
<Compile Include="Models\ExistingSeriesModel.cs" />
|
||||||
<Compile Include="Models\AddNewSeriesModel.cs" />
|
<Compile Include="Models\AddNewSeriesModel.cs" />
|
||||||
<Compile Include="Models\JobQueueItemModel.cs" />
|
<Compile Include="Models\JobQueueItemModel.cs" />
|
||||||
|
@ -231,7 +232,7 @@
|
||||||
<Compile Include="Models\QualityTypeModel.cs" />
|
<Compile Include="Models\QualityTypeModel.cs" />
|
||||||
<Compile Include="Models\RootDirModel.cs" />
|
<Compile Include="Models\RootDirModel.cs" />
|
||||||
<Compile Include="Models\SabnzbdSettingsModel.cs" />
|
<Compile Include="Models\SabnzbdSettingsModel.cs" />
|
||||||
<Compile Include="Models\EpisodeSortingModel.cs" />
|
<Compile Include="Models\EpisodeNamingModel.cs" />
|
||||||
<Compile Include="Models\HistoryModel.cs" />
|
<Compile Include="Models\HistoryModel.cs" />
|
||||||
<Compile Include="Models\IndexerSettingsModel.cs" />
|
<Compile Include="Models\IndexerSettingsModel.cs" />
|
||||||
<Compile Include="Models\MappingModel.cs" />
|
<Compile Include="Models\MappingModel.cs" />
|
||||||
|
@ -408,7 +409,7 @@
|
||||||
<Content Include="Views\Settings\Indexers.cshtml" />
|
<Content Include="Views\Settings\Indexers.cshtml" />
|
||||||
<Content Include="Views\System\Jobs.cshtml" />
|
<Content Include="Views\System\Jobs.cshtml" />
|
||||||
<Content Include="Views\Settings\Sabnzbd.cshtml" />
|
<Content Include="Views\Settings\Sabnzbd.cshtml" />
|
||||||
<Content Include="Views\Settings\EpisodeSorting.cshtml" />
|
<Content Include="Views\Settings\Naming.cshtml" />
|
||||||
<Content Include="Views\Settings\Notifications.cshtml" />
|
<Content Include="Views\Settings\Notifications.cshtml" />
|
||||||
<Content Include="Views\Settings\Quality.cshtml" />
|
<Content Include="Views\Settings\Quality.cshtml" />
|
||||||
<Content Include="Views\AddSeries\RootDir.cshtml" />
|
<Content Include="Views\AddSeries\RootDir.cshtml" />
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
@using NzbDrone.Web.Helpers
|
@using NzbDrone.Web.Helpers
|
||||||
@model NzbDrone.Web.Models.EpisodeSortingModel
|
@model NzbDrone.Web.Models.EpisodeNamingModel
|
||||||
|
|
||||||
@section HeaderContent{
|
@section HeaderContent{
|
||||||
<link rel="stylesheet" type="text/css" href="../../Content/Settings.css" />
|
<link rel="stylesheet" type="text/css" href="../../Content/Settings.css" />
|
||||||
|
@ -7,10 +7,15 @@
|
||||||
<style>
|
<style>
|
||||||
#examples
|
#examples
|
||||||
{
|
{
|
||||||
margin-top: 25px;
|
margin-top: 5px;
|
||||||
margin-bottom: 15px;
|
margin-bottom: 20px;
|
||||||
padding-left: 20px;
|
padding-left: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.settingsContainer
|
||||||
|
{
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,8 +29,9 @@
|
||||||
|
|
||||||
@section MainContent{
|
@section MainContent{
|
||||||
<div id="stylized">
|
<div id="stylized">
|
||||||
@using (Html.BeginForm("SaveEpisodeSorting", "Settings", FormMethod.Post, new { id = "form", name = "form", @class = "settingsForm" }))
|
@using (Html.BeginForm("SaveNaming", "Settings", FormMethod.Post, new { id = "form", name = "form", @class = "settingsForm" }))
|
||||||
{
|
{
|
||||||
|
<div class="settingsContainer">
|
||||||
@Html.ValidationSummary(true, "Unable to save your settings. Please correct the errors and try again.")
|
@Html.ValidationSummary(true, "Unable to save your settings. Please correct the errors and try again.")
|
||||||
<label class="labelClass">@Html.LabelFor(m => m.SeriesName)
|
<label class="labelClass">@Html.LabelFor(m => m.SeriesName)
|
||||||
<span class="small">@Html.DescriptionFor(m => m.SeriesName)</span>
|
<span class="small">@Html.DescriptionFor(m => m.SeriesName)</span>
|
||||||
|
@ -71,10 +77,10 @@
|
||||||
<span class="small">@Html.DescriptionFor(m => m.MultiEpisodeStyle)</span>
|
<span class="small">@Html.DescriptionFor(m => m.MultiEpisodeStyle)</span>
|
||||||
</label>
|
</label>
|
||||||
@Html.DropDownListFor(m => m.MultiEpisodeStyle, Model.MultiEpisodeStyles, new { @class = "inputClass selectClass" })
|
@Html.DropDownListFor(m => m.MultiEpisodeStyle, Model.MultiEpisodeStyles, new { @class = "inputClass selectClass" })
|
||||||
|
</div>
|
||||||
<div id ="examples">
|
<div id ="examples">
|
||||||
<div id="singleEpisodeExample"></div>
|
<div id="singleEpisodeExample"><b>Single Episode Example: </b><span class="result"></span></div>
|
||||||
<div id="multiEpisodeExample"></div>
|
<div id="multiEpisodeExample"><b>Multi-Episode Example: </b><span class="result"></span></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button type="submit" id="save_button" disabled="disabled">Save</button>
|
<button type="submit" id="save_button" disabled="disabled">Save</button>
|
||||||
|
@ -129,9 +135,9 @@
|
||||||
if ($('#ReplaceSpaces').attr('checked'))
|
if ($('#ReplaceSpaces').attr('checked'))
|
||||||
result = result.replace(/\s/g, '.');
|
result = result.replace(/\s/g, '.');
|
||||||
|
|
||||||
result = '<b>Single Episode Example: </b>' + result;
|
//result = '<b>Single Episode Example: </b>' + result;
|
||||||
|
|
||||||
$('#singleEpisodeExample').html(result);
|
$('#singleEpisodeExample').children('.result').text(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
function createMultiEpisodeExample() {
|
function createMultiEpisodeExample() {
|
||||||
|
@ -194,9 +200,9 @@
|
||||||
if ($('#ReplaceSpaces').attr('checked'))
|
if ($('#ReplaceSpaces').attr('checked'))
|
||||||
result = result.replace(/\s/g, '.');
|
result = result.replace(/\s/g, '.');
|
||||||
|
|
||||||
result = '<b>Multi-Episode Example: </b>' + result;
|
//result = '<b>Multi-Episode Example: </b>' + result;
|
||||||
|
|
||||||
$('#multiEpisodeExample').html(result);
|
$('#multiEpisodeExample').children('.result').text(result);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
}
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
@using NzbDrone.Web.Helpers;
|
@using NzbDrone.Core.Repository.Quality
|
||||||
|
@using NzbDrone.Web.Helpers;
|
||||||
@model NzbDrone.Web.Models.QualityModel
|
@model NzbDrone.Web.Models.QualityModel
|
||||||
@section HeaderContent{
|
@section HeaderContent{
|
||||||
<link rel="stylesheet" type="text/css" href="../../Content/Settings.css" />
|
<link rel="stylesheet" type="text/css" href="../../Content/Settings.css" />
|
||||||
|
@ -73,7 +74,7 @@ Settings > Quality
|
||||||
Add New Profile</a>
|
Add New Profile</a>
|
||||||
</div>
|
</div>
|
||||||
<div id="profiles">
|
<div id="profiles">
|
||||||
@foreach (var item in Model.Profiles)
|
@foreach (var item in (List<QualityProfile>)ViewData["Profiles"])
|
||||||
{
|
{
|
||||||
Html.RenderAction("GetQualityProfileView", item);
|
Html.RenderAction("GetQualityProfileView", item);
|
||||||
}
|
}
|
||||||
|
@ -91,6 +92,12 @@ Settings > Quality
|
||||||
type="text/javascript"></script>
|
type="text/javascript"></script>
|
||||||
<script src="../../Scripts/NzbDrone/settingsForm.js" type="text/javascript"></script>
|
<script src="../../Scripts/NzbDrone/settingsForm.js" type="text/javascript"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
var deleteQualityProfileUrl = '@Url.Action("DeleteQualityProfile", "Settings")';
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
setupSliders();
|
||||||
|
});
|
||||||
|
|
||||||
$("#addItem").live('click', function () {
|
$("#addItem").live('click', function () {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: this.href,
|
url: this.href,
|
||||||
|
@ -103,8 +110,6 @@ Settings > Quality
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
var deleteQualityProfileUrl = '@Url.Action("DeleteQualityProfile", "Settings")';
|
|
||||||
|
|
||||||
function deleteProfile(id) {
|
function deleteProfile(id) {
|
||||||
sendToServer(id);
|
sendToServer(id);
|
||||||
}
|
}
|
||||||
|
@ -165,34 +170,26 @@ Settings > Quality
|
||||||
}).keyup();
|
}).keyup();
|
||||||
|
|
||||||
$('.quality-selectee').live('click', function () {
|
$('.quality-selectee').live('click', function () {
|
||||||
var profileId = getProfileId(this);
|
var id = $(this).attr('id');
|
||||||
var cleanId = getCleanId(this);
|
var cleanId = getCleanId(this);
|
||||||
var cutoff = '#' + cleanId + '_Cutoff';
|
var cutoff = '#' + cleanId + '_Cutoff';
|
||||||
var allowedString = '#' + cleanId + '_AllowedString';
|
var name = jQuery('[for="' + id + '"]').children('.ui-button-text').text();
|
||||||
|
|
||||||
|
//Remove 'Unknown'
|
||||||
$(cutoff + ' option').each(function () { if ($(this).text().indexOf('Unknown') > -1) $(cutoff + ' option').remove(':contains("' + $(this).text() + '")'); });
|
$(cutoff + ' option').each(function () { if ($(this).text().indexOf('Unknown') > -1) $(cutoff + ' option').remove(':contains("' + $(this).text() + '")'); });
|
||||||
|
|
||||||
if ($(this).hasClass('quality-selected')) {
|
//Add option to cutoff SelectList
|
||||||
$(this).removeClass('quality-selected');
|
if ($(this).attr('checked')) {
|
||||||
var toRemove = this.firstChild.data;
|
$('<option>' + name + '</option>').appendTo(cutoff);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Remove option from cutoff SelectList
|
||||||
|
else {
|
||||||
$(cutoff + ' option').each(function () {
|
$(cutoff + ' option').each(function () {
|
||||||
if ($(this).text().indexOf(toRemove) > -1)
|
if ($(this).text().indexOf(name) > -1)
|
||||||
$(cutoff + ' option').remove(':contains("' + $(this).text() + '")');
|
$(cutoff + ' option').remove(':contains("' + $(this).text() + '")');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
|
||||||
$(this).addClass('quality-selected');
|
|
||||||
$('<option>' + this.firstChild.data + '</option>').appendTo(cutoff);
|
|
||||||
}
|
|
||||||
|
|
||||||
var result = "";
|
|
||||||
$("#selectable_" + profileId + " .quality-selected").each(function () {
|
|
||||||
result += this.firstChild.data + ",";
|
|
||||||
});
|
|
||||||
|
|
||||||
$(allowedString).empty().val(result);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
var sliderOptions = {
|
var sliderOptions = {
|
||||||
|
@ -212,10 +209,6 @@ Settings > Quality
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$(document).ready(function () {
|
|
||||||
setupSliders();
|
|
||||||
});
|
|
||||||
|
|
||||||
function setupSliders() {
|
function setupSliders() {
|
||||||
$(".slider").each(function() {
|
$(".slider").each(function() {
|
||||||
var localOptions = sliderOptions;
|
var localOptions = sliderOptions;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
@model NzbDrone.Core.Repository.Quality.QualityProfile
|
@model NzbDrone.Web.Models.QualityProfileModel
|
||||||
@using System.Collections
|
@using System.Collections
|
||||||
@using NzbDrone.Core.Repository.Quality
|
@using NzbDrone.Core.Repository.Quality
|
||||||
@using NzbDrone.Web.Helpers
|
@using NzbDrone.Web.Helpers
|
||||||
|
@ -25,29 +25,37 @@
|
||||||
@Html.LabelFor(x => x.Cutoff)
|
@Html.LabelFor(x => x.Cutoff)
|
||||||
@Html.DropDownListFor(m => m.Cutoff, new SelectList(Model.Allowed, Model.Cutoff))
|
@Html.DropDownListFor(m => m.Cutoff, new SelectList(Model.Allowed, Model.Cutoff))
|
||||||
</div>
|
</div>
|
||||||
<div id = "selectable_@(Model.QualityProfileId)" class="qualitySelector">
|
<div class="qualitySelector">
|
||||||
@{ var qualitiesList = (List<QualityTypes>) ViewData["Qualities"]; }
|
@Html.CheckBoxFor(m => m.Sdtv, new { @class = "quality-selectee sdtv-selector" })
|
||||||
@for (int i = 0; i < qualitiesList.Count(); i++)
|
@Html.LabelFor(m => m.Sdtv)
|
||||||
{
|
|
||||||
if (qualitiesList[i].ToString() == "Unknown")
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Model.Allowed != null)
|
@Html.CheckBoxFor(m => m.Dvd, new { @class = "quality-selectee dvd-selector" })
|
||||||
{
|
@Html.LabelFor(m => m.Dvd)
|
||||||
if (Model.Allowed.Contains(qualitiesList[i]))
|
|
||||||
{
|
|
||||||
<div class="quality-selectee quality-selected">@qualitiesList[i].ToString()</div>
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
<div class="quality-selectee">@qualitiesList[i].ToString()</div>
|
@Html.CheckBoxFor(m => m.Hdtv, new { @class = "quality-selectee hdtv-selector" })
|
||||||
}
|
@Html.LabelFor(m => m.Hdtv)
|
||||||
|
|
||||||
|
@Html.CheckBoxFor(m => m.Webdl, new { @class = "quality-selectee webdl-selector" })
|
||||||
|
@Html.LabelFor(m => m.Webdl)
|
||||||
|
|
||||||
|
@Html.CheckBoxFor(m => m.Bluray720p, new { @class = "quality-selectee bluray720p-selector" })
|
||||||
|
@Html.LabelFor(m => m.Bluray720p)
|
||||||
|
|
||||||
|
@Html.CheckBoxFor(m => m.Bluray1080p, new { @class = "quality-selectee bluray1080p-selector" })
|
||||||
|
@Html.LabelFor(m => m.Bluray1080p)
|
||||||
</div>
|
</div>
|
||||||
@Html.HiddenFor(x => x.QualityProfileId, new {@class = "qualityProfileId"})
|
@Html.HiddenFor(x => x.QualityProfileId, new {@class = "qualityProfileId"})
|
||||||
@Html.HiddenFor(m => m.AllowedString)
|
|
||||||
@Html.Hidden("cleanId", idClean, new {@class = "cleanId"})
|
@Html.Hidden("cleanId", idClean, new {@class = "cleanId"})
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$('.sdtv-selector').button();
|
||||||
|
$('.dvd-selector').button();
|
||||||
|
$('.hdtv-selector').button();
|
||||||
|
$('.webdl-selector').button();
|
||||||
|
$('.bluray720p-selector').button();
|
||||||
|
$('.bluray1080p-selector').button();
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -1,6 +1,6 @@
|
||||||
<ul class="sub-menu">
|
<ul class="sub-menu">
|
||||||
<li>@Html.ActionLink("Quality", "Quality", "Settings")</li>
|
<li>@Html.ActionLink("Quality", "Quality", "Settings")</li>
|
||||||
<li>@Html.ActionLink("Naming", "EpisodeSorting", "Settings")</li>
|
<li>@Html.ActionLink("Naming", "Naming", "Settings")</li>
|
||||||
<li>@Html.ActionLink("Notifications", "Notifications", "Settings")</li>
|
<li>@Html.ActionLink("Notifications", "Notifications", "Settings")</li>
|
||||||
<li>@Html.ActionLink("Indexers", "Indexers", "Settings")</li>
|
<li>@Html.ActionLink("Indexers", "Indexers", "Settings")</li>
|
||||||
<li>@Html.ActionLink("SABnzbd", "Sabnzbd", "Settings")</li>
|
<li>@Html.ActionLink("SABnzbd", "Sabnzbd", "Settings")</li>
|
||||||
|
|
|
@ -1,30 +1,12 @@
|
||||||
@{ Layout = null; }
|
<script>
|
||||||
|
$(function () {
|
||||||
|
// $(".quality-selectee").each(function() {
|
||||||
|
// $(this).button();
|
||||||
|
// });
|
||||||
|
$('#test').button();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
<style type="text/css">
|
<input type="checkbox" id="test" class="quality-selectee" /><label for="shuffle">SDTV</label>
|
||||||
@*Specific to each slider*@
|
<input type="checkbox" class="quality-selectee" /><label for="shuffle">DVD</label>
|
||||||
#seriesSearchSlider {
|
<input type="checkbox" class="quality-selectee" /><label for="shuffle">HDTV</label>
|
||||||
right: 150px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sliderContent .localSeriesLookup {
|
|
||||||
width: 94%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sliderContent {
|
|
||||||
height: 53px;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|
||||||
|
|
||||||
<div id="seriesSearchSlider" class="top-slider">
|
|
||||||
<div class="sliderContent">
|
|
||||||
Local Series Search
|
|
||||||
<input class="localSeriesLookup" type="text" />
|
|
||||||
</div>
|
|
||||||
<div class="openCloseWrapper">
|
|
||||||
<div class="sliderButtonContainer">
|
|
||||||
Search<div class="sliderImage sliderClosed"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
Loading…
Reference in New Issue