mirror of
https://github.com/Sonarr/Sonarr.git
synced 2024-12-12 11:15:43 +02:00
Renamed Download settings to Sabnzbd settings.
Moved Download Propers to Quality settings. Cleaned up Quality UI and enhanced it with some jQuery goodness. Mmmmm jQuery.
This commit is contained in:
parent
58b19b6f10
commit
8e214029c9
@ -162,7 +162,7 @@ public virtual String SabPassword
|
|||||||
|
|
||||||
public virtual String SabTvCategory
|
public virtual String SabTvCategory
|
||||||
{
|
{
|
||||||
get { return GetValue("SabTvCategory"); }
|
get { return GetValue("SabTvCategory", "TV", false); }
|
||||||
|
|
||||||
set { SetValue("SabTvCategory", value); }
|
set { SetValue("SabTvCategory", value); }
|
||||||
}
|
}
|
||||||
|
@ -100,15 +100,12 @@ public ActionResult Indexers()
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActionResult Downloads()
|
public ActionResult Sabnzbd()
|
||||||
{
|
{
|
||||||
ViewData["viewName"] = "Downloads";
|
ViewData["viewName"] = "Sabnzbd";
|
||||||
|
|
||||||
var model = new DownloadSettingsModel
|
var model = new SabnzbdSettingsModel
|
||||||
{
|
{
|
||||||
SyncFrequency = _configProvider.SyncFrequency,
|
|
||||||
DownloadPropers = _configProvider.DownloadPropers,
|
|
||||||
Retention = _configProvider.Retention,
|
|
||||||
SabHost = _configProvider.SabHost,
|
SabHost = _configProvider.SabHost,
|
||||||
SabPort =_configProvider.SabPort,
|
SabPort =_configProvider.SabPort,
|
||||||
SabApiKey = _configProvider.SabApiKey,
|
SabApiKey = _configProvider.SabApiKey,
|
||||||
@ -116,8 +113,6 @@ public ActionResult Downloads()
|
|||||||
SabPassword = _configProvider.SabPassword,
|
SabPassword = _configProvider.SabPassword,
|
||||||
SabTvCategory = _configProvider.SabTvCategory,
|
SabTvCategory = _configProvider.SabTvCategory,
|
||||||
SabTvPriority = _configProvider.SabTvPriority,
|
SabTvPriority = _configProvider.SabTvPriority,
|
||||||
UseBlackHole = _configProvider.UseBlackhole,
|
|
||||||
BlackholeDirectory = _configProvider.BlackholeDirectory
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return View("Index", model);
|
return View("Index", model);
|
||||||
@ -139,8 +134,8 @@ public ActionResult Quality()
|
|||||||
var userProfiles = _qualityProvider.GetAllProfiles().Where(q => q.UserProfile).ToList();
|
var userProfiles = _qualityProvider.GetAllProfiles().Where(q => q.UserProfile).ToList();
|
||||||
var profiles = _qualityProvider.GetAllProfiles().ToList();
|
var profiles = _qualityProvider.GetAllProfiles().ToList();
|
||||||
|
|
||||||
var defaultQualityQualityProfileId =
|
var defaultQualityQualityProfileId = Convert.ToInt32(_configProvider.DefaultQualityProfile);
|
||||||
Convert.ToInt32(_configProvider.DefaultQualityProfile);
|
var downloadPropers = _configProvider.DownloadPropers;
|
||||||
|
|
||||||
var selectList = new SelectList(profiles, "QualityProfileId", "Name");
|
var selectList = new SelectList(profiles, "QualityProfileId", "Name");
|
||||||
|
|
||||||
@ -149,6 +144,7 @@ public ActionResult Quality()
|
|||||||
Profiles = profiles,
|
Profiles = profiles,
|
||||||
UserProfiles = userProfiles,
|
UserProfiles = userProfiles,
|
||||||
DefaultQualityProfileId = defaultQualityQualityProfileId,
|
DefaultQualityProfileId = defaultQualityQualityProfileId,
|
||||||
|
DownloadPropers = downloadPropers,
|
||||||
SelectList = selectList
|
SelectList = selectList
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -426,7 +422,7 @@ public ActionResult SaveIndexers(IndexerSettingsModel data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public ActionResult SaveDownloads(DownloadSettingsModel data)
|
public ActionResult SaveSabnzbd(SabnzbdSettingsModel data)
|
||||||
{
|
{
|
||||||
var basicNotification = new BasicNotification();
|
var basicNotification = new BasicNotification();
|
||||||
basicNotification.Type = BasicNotificationType.Info;
|
basicNotification.Type = BasicNotificationType.Info;
|
||||||
@ -434,9 +430,6 @@ public ActionResult SaveDownloads(DownloadSettingsModel data)
|
|||||||
|
|
||||||
if (ModelState.IsValid)
|
if (ModelState.IsValid)
|
||||||
{
|
{
|
||||||
_configProvider.SyncFrequency = data.SyncFrequency;
|
|
||||||
_configProvider.DownloadPropers = data.DownloadPropers;
|
|
||||||
_configProvider.Retention = data.Retention;
|
|
||||||
_configProvider.SabHost = data.SabHost;
|
_configProvider.SabHost = data.SabHost;
|
||||||
_configProvider.SabPort = data.SabPort;
|
_configProvider.SabPort = data.SabPort;
|
||||||
_configProvider.SabApiKey = data.SabApiKey;
|
_configProvider.SabApiKey = data.SabApiKey;
|
||||||
@ -444,8 +437,6 @@ public ActionResult SaveDownloads(DownloadSettingsModel data)
|
|||||||
_configProvider.SabTvCategory = data.SabTvCategory;
|
_configProvider.SabTvCategory = data.SabTvCategory;
|
||||||
_configProvider.SabUsername = data.SabUsername;
|
_configProvider.SabUsername = data.SabUsername;
|
||||||
_configProvider.SabTvPriority = data.SabTvPriority;
|
_configProvider.SabTvPriority = data.SabTvPriority;
|
||||||
_configProvider.UseBlackhole = data.UseBlackHole;
|
|
||||||
_configProvider.BlackholeDirectory = data.BlackholeDirectory;
|
|
||||||
|
|
||||||
basicNotification.Title = SETTINGS_SAVED;
|
basicNotification.Title = SETTINGS_SAVED;
|
||||||
_notificationProvider.Register(basicNotification);
|
_notificationProvider.Register(basicNotification);
|
||||||
@ -466,7 +457,8 @@ public ActionResult SaveQuality(QualityModel data)
|
|||||||
|
|
||||||
if (ModelState.IsValid)
|
if (ModelState.IsValid)
|
||||||
{
|
{
|
||||||
_configProvider.SetValue("DefaultQualityProfile", data.DefaultQualityProfileId.ToString());
|
_configProvider.DefaultQualityProfile = data.DefaultQualityProfileId;
|
||||||
|
_configProvider.DownloadPropers = data.DownloadPropers;
|
||||||
|
|
||||||
//Saves only the Default Quality, skips User Profiles since none exist
|
//Saves only the Default Quality, skips User Profiles since none exist
|
||||||
if (data.UserProfiles == null)
|
if (data.UserProfiles == null)
|
||||||
|
@ -11,8 +11,13 @@ public class QualityModel
|
|||||||
public List<QualityProfile> UserProfiles { get; set; }
|
public List<QualityProfile> UserProfiles { get; set; }
|
||||||
|
|
||||||
[DisplayName("Default Quality Profile")]
|
[DisplayName("Default Quality Profile")]
|
||||||
|
[Description("The default quality to use when adding series to NzbDrone")]
|
||||||
public int DefaultQualityProfileId { get; set; }
|
public int DefaultQualityProfileId { get; set; }
|
||||||
|
|
||||||
|
[DisplayName("Download Propers")]
|
||||||
|
[Description("Should NzbDrone download proper releases (to replace non-proper files)?")]
|
||||||
|
public bool DownloadPropers { get; set; }
|
||||||
|
|
||||||
public SelectList SelectList { get; set; }
|
public SelectList SelectList { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -6,28 +6,11 @@
|
|||||||
|
|
||||||
namespace NzbDrone.Web.Models
|
namespace NzbDrone.Web.Models
|
||||||
{
|
{
|
||||||
public class DownloadSettingsModel
|
public class SabnzbdSettingsModel
|
||||||
{
|
{
|
||||||
public SelectList PrioritySelectList =
|
public SelectList PrioritySelectList =
|
||||||
new SelectList(new[] {"Default", "Paused", "Low", "Normal", "High", "Top"});
|
new SelectList(new[] {"Default", "Paused", "Low", "Normal", "High", "Top"});
|
||||||
|
|
||||||
[Required]
|
|
||||||
[Range(15, 120, ErrorMessage = "Must be between 15 and 120 minutes")]
|
|
||||||
[DataType(DataType.Text)]
|
|
||||||
[DisplayName("Sync Frequency")]
|
|
||||||
[Description("Specifies how often NzbDrone should check RSS Feeds (Minutes)")]
|
|
||||||
public int SyncFrequency { get; set; }
|
|
||||||
|
|
||||||
[DisplayName("Download Propers")]
|
|
||||||
[Description("Should NzbDrone download proper releases (to replace non-proper files)?")]
|
|
||||||
public bool DownloadPropers { get; set; }
|
|
||||||
|
|
||||||
[Required(ErrorMessage = "Please enter a valid number")]
|
|
||||||
[DataType(DataType.Text)]
|
|
||||||
[DisplayName("Retention")]
|
|
||||||
[Description("Your newsgroup provider retention (Days)")]
|
|
||||||
public int Retention { get; set; }
|
|
||||||
|
|
||||||
[Required(ErrorMessage = "Please enter a valid host")]
|
[Required(ErrorMessage = "Please enter a valid host")]
|
||||||
[DataType(DataType.Text)]
|
[DataType(DataType.Text)]
|
||||||
[DisplayName("SABnzbd Host")]
|
[DisplayName("SABnzbd Host")]
|
||||||
@ -68,15 +51,5 @@ public class DownloadSettingsModel
|
|||||||
[DisplayName("SABnzbd Priority")]
|
[DisplayName("SABnzbd Priority")]
|
||||||
[Description("Priority to use when sending NZBs to SABnzbd")]
|
[Description("Priority to use when sending NZBs to SABnzbd")]
|
||||||
public SabnzbdPriorityType SabTvPriority { get; set; }
|
public SabnzbdPriorityType SabTvPriority { get; set; }
|
||||||
|
|
||||||
[DisplayName("Use Blackhole")]
|
|
||||||
[Description("Whether to use the blackhole directory instead of sending NZB to SABnzbd")]
|
|
||||||
public bool UseBlackHole { get; set; }
|
|
||||||
|
|
||||||
[DataType(DataType.Text)]
|
|
||||||
[DisplayFormat(ConvertEmptyStringToNull = false)]
|
|
||||||
[DisplayName("Blackhole Directory")]
|
|
||||||
[Description("Path to the blackhole directory")]
|
|
||||||
public String BlackholeDirectory { get; set; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -234,7 +234,7 @@
|
|||||||
<Compile Include="Models\AddExistingManualModel.cs" />
|
<Compile Include="Models\AddExistingManualModel.cs" />
|
||||||
<Compile Include="Models\AddExistingSeriesModel.cs" />
|
<Compile Include="Models\AddExistingSeriesModel.cs" />
|
||||||
<Compile Include="Models\AddNewSeriesModel.cs" />
|
<Compile Include="Models\AddNewSeriesModel.cs" />
|
||||||
<Compile Include="Models\DownloadSettingsModel.cs" />
|
<Compile Include="Models\SabnzbdSettingsModel.cs" />
|
||||||
<Compile Include="Models\EpisodeSortingModel.cs" />
|
<Compile Include="Models\EpisodeSortingModel.cs" />
|
||||||
<Compile Include="Models\HistoryModel.cs" />
|
<Compile Include="Models\HistoryModel.cs" />
|
||||||
<Compile Include="Models\IndexerSettingsModel.cs" />
|
<Compile Include="Models\IndexerSettingsModel.cs" />
|
||||||
@ -677,7 +677,7 @@
|
|||||||
<Content Include="Views\Web.config" />
|
<Content Include="Views\Web.config" />
|
||||||
<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\Downloads.cshtml" />
|
<Content Include="Views\Settings\Sabnzbd.cshtml" />
|
||||||
<Content Include="Views\Settings\EpisodeSorting.cshtml" />
|
<Content Include="Views\Settings\EpisodeSorting.cshtml" />
|
||||||
<Content Include="Views\Settings\General.cshtml" />
|
<Content Include="Views\Settings\General.cshtml" />
|
||||||
<Content Include="Views\Settings\Notifications.cshtml" />
|
<Content Include="Views\Settings\Notifications.cshtml" />
|
||||||
|
@ -1,241 +0,0 @@
|
|||||||
@using NzbDrone.Web.Helpers;
|
|
||||||
@model NzbDrone.Web.Models.DownloadSettingsModel
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
$(document).ready(function () {
|
|
||||||
selectDownloadOptionAtStart(); //Load either SAB or Blackhole div
|
|
||||||
var options = {
|
|
||||||
target: '#result',
|
|
||||||
beforeSubmit: showRequest,
|
|
||||||
success: showResponse,
|
|
||||||
type: 'post',
|
|
||||||
resetForm: false
|
|
||||||
};
|
|
||||||
$('#form').ajaxForm(options);
|
|
||||||
$('#save_button').attr('disabled', '');
|
|
||||||
});
|
|
||||||
|
|
||||||
function selectDownloadOptionAtStart() {
|
|
||||||
var checked = $('UseBlackHole').val();
|
|
||||||
var $radios = $('input[name="UseBlackhole"]');
|
|
||||||
$radios.filter('[value=' + checked + ']').attr('checked', true);
|
|
||||||
selectDownloadOption();
|
|
||||||
}
|
|
||||||
|
|
||||||
function selectDownloadOption() {
|
|
||||||
var selected = $("input[name='UseBlackhole']:checked").val();
|
|
||||||
|
|
||||||
if (selected == "True") {
|
|
||||||
$('#UseBlackHole').attr('checked', true);
|
|
||||||
document.getElementById('blackhole').style.display = 'block';
|
|
||||||
document.getElementById('sab').style.display = 'none';
|
|
||||||
}
|
|
||||||
|
|
||||||
else {
|
|
||||||
$('#UseBlackHole').attr('checked', false);
|
|
||||||
document.getElementById('sab').style.display = 'block';
|
|
||||||
document.getElementById('blackhole').style.display = 'none';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function showRequest(formData, jqForm, options) {
|
|
||||||
$("#result").empty().html('Saving...');
|
|
||||||
$("#form :input").attr("disabled", true);
|
|
||||||
}
|
|
||||||
|
|
||||||
function showResponse(responseText, statusText, xhr, $form) {
|
|
||||||
$("#result").empty().html(responseText);
|
|
||||||
$("#form :input").attr("disabled", false);
|
|
||||||
}
|
|
||||||
|
|
||||||
$(".blackhole_radio").live("change", function () {
|
|
||||||
selectDownloadOption(); //Load either SAB or Blackhole div
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
@using (Html.BeginForm("SaveDownloads", "Settings", FormMethod.Post, new { id = "form", name = "form" }))
|
|
||||||
{
|
|
||||||
<fieldset>
|
|
||||||
<legend>Download Settings</legend>
|
|
||||||
|
|
||||||
<fieldset class="sub-field">
|
|
||||||
<legend>Usenet Variables</legend>
|
|
||||||
|
|
||||||
<div class="config-section">
|
|
||||||
<div class="config-group">
|
|
||||||
<div class="config-title">@Html.LabelFor(m => m.SyncFrequency)</div>
|
|
||||||
<div class="config-value">@Html.TextBoxFor(m => m.SyncFrequency)</div>
|
|
||||||
</div>
|
|
||||||
<div class="config-group2">
|
|
||||||
<div class="config-validation">@Html.ValidationMessageFor(m => m.SyncFrequency)</div>
|
|
||||||
<div class="config-description">@Html.DescriptionFor(m => m.SyncFrequency)</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="config-section">
|
|
||||||
<div class="config-group">
|
|
||||||
<div class="config-title">@Html.LabelFor(m => m.DownloadPropers)</div>
|
|
||||||
<div class="config-value">@Html.CheckBoxFor(m => m.DownloadPropers, new { @class = "config-checkbox" })</div>
|
|
||||||
</div>
|
|
||||||
<div class="config-group2">
|
|
||||||
<div class="config-validation">@Html.ValidationMessageFor(m => m.DownloadPropers)</div>
|
|
||||||
<div class="config-description">@Html.DescriptionFor(m => m.DownloadPropers)</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="config-section">
|
|
||||||
<div class="config-group">
|
|
||||||
<div class="config-title">@Html.LabelFor(m => m.Retention)</div>
|
|
||||||
<div class="config-value">@Html.TextBoxFor(m => m.Retention)</div>
|
|
||||||
</div>
|
|
||||||
<div class="config-group2">
|
|
||||||
<div class="config-validation">@Html.ValidationMessageFor(m => m.Retention)</div>
|
|
||||||
<div class="config-description">@Html.DescriptionFor(m => m.Retention)</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</fieldset>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<div>
|
|
||||||
<b>@Html.LabelFor(m => m.UseBlackHole)</b>
|
|
||||||
@Html.CheckBoxFor(m => m.UseBlackHole, new { style="display:none" })
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
@Html.RadioButton("UseBlackhole", true, new { @class="blackhole_radio" })Blackhole
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
@Html.RadioButton("UseBlackhole", false, new { @class="blackhole_radio" })SABnzbd
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="sab" style="display:none">
|
|
||||||
<fieldset class="sub-field">
|
|
||||||
<legend>SABnzbd</legend>
|
|
||||||
|
|
||||||
<button type="button" onclick="autoConfigureSab()">Auto-Configure</button>
|
|
||||||
|
|
||||||
<div class="config-section">
|
|
||||||
<div class="config-group">
|
|
||||||
<div class="config-title">@Html.LabelFor(m => m.SabHost)</div>
|
|
||||||
<div class="config-value">@Html.TextBoxFor(m => m.SabHost)</div>
|
|
||||||
</div>
|
|
||||||
<div class="config-group2">
|
|
||||||
<div class="config-validation">@Html.ValidationMessageFor(m => m.SabHost)</div>
|
|
||||||
<div class="config-description">@Html.DescriptionFor(m => m.SabHost)</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="config-section">
|
|
||||||
<div class="config-group">
|
|
||||||
<div class="config-title">@Html.LabelFor(m => m.SabPort)</div>
|
|
||||||
<div class="config-value">@Html.TextBoxFor(m => m.SabPort)</div>
|
|
||||||
</div>
|
|
||||||
<div class="config-group2">
|
|
||||||
<div class="config-validation">@Html.ValidationMessageFor(m => m.SabPort)</div>
|
|
||||||
<div class="config-description">@Html.DescriptionFor(m => m.SabPort)</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="config-section">
|
|
||||||
<div class="config-group">
|
|
||||||
<div class="config-title">@Html.LabelFor(m => m.SabApiKey)</div>
|
|
||||||
<div class="config-value">@Html.TextBoxFor(m => m.SabApiKey)</div>
|
|
||||||
</div>
|
|
||||||
<div class="config-group2">
|
|
||||||
<div class="config-validation">@Html.ValidationMessageFor(m => m.SabApiKey)</div>
|
|
||||||
<div class="config-description">@Html.DescriptionFor(m => m.SabApiKey)</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="config-section">
|
|
||||||
<div class="config-group">
|
|
||||||
<div class="config-title">@Html.LabelFor(m => m.SabUsername)</div>
|
|
||||||
<div class="config-value">@Html.TextBoxFor(m => m.SabUsername)</div>
|
|
||||||
</div>
|
|
||||||
<div class="config-group2">
|
|
||||||
<div class="config-validation">@Html.ValidationMessageFor(m => m.SabUsername)</div>
|
|
||||||
<div class="config-description">@Html.DescriptionFor(m => m.SabUsername)</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="config-section">
|
|
||||||
<div class="config-group">
|
|
||||||
<div class="config-title">@Html.LabelFor(m => m.SabPassword)</div>
|
|
||||||
<div class="config-value">@Html.TextBoxFor(m => m.SabPassword)</div>
|
|
||||||
</div>
|
|
||||||
<div class="config-group2">
|
|
||||||
<div class="config-validation">@Html.ValidationMessageFor(m => m.SabPassword)</div>
|
|
||||||
<div class="config-description">@Html.DescriptionFor(m => m.SabPassword)</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="config-section">
|
|
||||||
<div class="config-group">
|
|
||||||
<div class="config-title">@Html.LabelFor(m => m.SabTvCategory)</div>
|
|
||||||
<div class="config-value">@Html.TextBoxFor(m => m.SabTvCategory)</div>
|
|
||||||
</div>
|
|
||||||
<div class="config-group2">
|
|
||||||
<div class="config-validation">@Html.ValidationMessageFor(m => m.SabTvCategory)</div>
|
|
||||||
<div class="config-description">@Html.DescriptionFor(m => m.SabTvCategory)</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="config-section">
|
|
||||||
<div class="config-group">
|
|
||||||
<div class="config-title">@Html.LabelFor(m => m.SabTvPriority)</div>
|
|
||||||
<div class="config-value">@Html.DropDownListFor(m => m.SabTvPriority, Model.PrioritySelectList)</div>
|
|
||||||
</div>
|
|
||||||
<div class="config-group2">
|
|
||||||
<div class="config-validation">@Html.ValidationMessageFor(m => m.SabTvPriority)</div>
|
|
||||||
<div class="config-description">@Html.DescriptionFor(m => m.SabTvPriority)</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="blackhole" style="display:none">
|
|
||||||
<fieldset class="sub-field">
|
|
||||||
<legend>Blackhole</legend>
|
|
||||||
<div class="config-section">
|
|
||||||
<div class="config-group">
|
|
||||||
<div class="config-title">@Html.LabelFor(m => m.BlackholeDirectory)</div>
|
|
||||||
<div class="config-value">@Html.TextBoxFor(m => m.BlackholeDirectory)</div>
|
|
||||||
</div>
|
|
||||||
<div class="config-group2">
|
|
||||||
<div class="config-validation">@Html.ValidationMessageFor(m => m.BlackholeDirectory)</div>
|
|
||||||
<div class="config-description">@Html.DescriptionFor(m => m.BlackholeDirectory)</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</fieldset>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<input type="submit" id="save_button" value="Save" disabled="disabled" />
|
|
||||||
|
|
||||||
|
|
||||||
</fieldset>
|
|
||||||
}
|
|
||||||
<div id="result" class="hiddenResult"></div>
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
var autoConfigureSabUrl = '@Url.Action("AutoConfigureSab", "Settings")';
|
|
||||||
|
|
||||||
function autoConfigureSab() {
|
|
||||||
$.ajax({
|
|
||||||
type: "GET",
|
|
||||||
url: autoConfigureSabUrl,
|
|
||||||
//data: jQuery.param({ username: $('#SabUsername').val(), password: $('#SabPassword').val() }),
|
|
||||||
error: function (req, status, error) {
|
|
||||||
alert("Sorry! We could not autoconfigure SABnzbd for you");
|
|
||||||
},
|
|
||||||
success: autoConfigureSuccess
|
|
||||||
});
|
|
||||||
|
|
||||||
function autoConfigureSuccess(data) {
|
|
||||||
$('#SabHost').val(data.Host);
|
|
||||||
$('#SabPort').val(data.Port);
|
|
||||||
$('#SabApiKey').val(data.ApiKey);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
@ -1,4 +1,5 @@
|
|||||||
@model NzbDrone.Web.Models.QualityModel
|
@using NzbDrone.Web.Helpers;
|
||||||
|
@model NzbDrone.Web.Models.QualityModel
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
@ -22,6 +23,23 @@
|
|||||||
$("#result").empty().html(responseText);
|
$("#result").empty().html(responseText);
|
||||||
$("#form :input").attr("disabled", false);
|
$("#form :input").attr("disabled", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function addOption(text, value) {
|
||||||
|
var myCombo = $('#DefaultQualityProfileId');
|
||||||
|
|
||||||
|
var exists = $("#DefaultQualityProfileId option[value='" + value + "']");
|
||||||
|
|
||||||
|
if (exists.length == 0)
|
||||||
|
myCombo.append($('\<option\> \</option\>').val(value).html(text));
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeOption(value) {
|
||||||
|
$("#DefaultQualityProfileId option[value='" + value + "']").remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
function renameOption(text, value) {
|
||||||
|
$("#DefaultQualityProfileId option[value='" + value + "']").html(text);
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@using (Html.BeginForm("SaveQuality", "Settings", FormMethod.Post, new {id = "form", name = "form"}))
|
@using (Html.BeginForm("SaveQuality", "Settings", FormMethod.Post, new {id = "form", name = "form"}))
|
||||||
@ -30,16 +48,29 @@
|
|||||||
<legend>Quality</legend>
|
<legend>Quality</legend>
|
||||||
|
|
||||||
<div class="rightSide" style="float: right; width: 65%;">
|
<div class="rightSide" style="float: right; width: 65%;">
|
||||||
<div id="defaultQualityDiv" style="float: left; margin: 30px;">
|
<div class="config-section">
|
||||||
|
<div class="config-group">
|
||||||
<div class="config-group" style="width: 250px; margin-bottom: 5px; margin-left: 5px;">
|
<div class="config-title">@Html.LabelFor(m => m.DownloadPropers)</div>
|
||||||
|
<div class="config-value">@Html.CheckBoxFor(m => m.DownloadPropers)</div>
|
||||||
|
</div>
|
||||||
|
<div class="config-group2">
|
||||||
|
<div class="config-validation">@Html.ValidationMessageFor(m => m.DownloadPropers)</div>
|
||||||
|
<div class="config-description">@Html.DescriptionFor(m => m.DownloadPropers)</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="config-section">
|
||||||
|
<div class="config-group">
|
||||||
<div class="config-title">@Html.LabelFor(m => m.DefaultQualityProfileId)</div>
|
<div class="config-title">@Html.LabelFor(m => m.DefaultQualityProfileId)</div>
|
||||||
<div class="config-value">@Html.DropDownListFor(m => m.DefaultQualityProfileId, Model.SelectList)</div>
|
<div class="config-value">@Html.DropDownListFor(m => m.DefaultQualityProfileId, Model.SelectList)</div>
|
||||||
|
</div>
|
||||||
|
<div class="config-group2">
|
||||||
<div class="config-validation">@Html.ValidationMessageFor(m => m.DefaultQualityProfileId)</div>
|
<div class="config-validation">@Html.ValidationMessageFor(m => m.DefaultQualityProfileId)</div>
|
||||||
|
<div class="config-description">@Html.DescriptionFor(m => m.DefaultQualityProfileId)</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="leftSide" style="width:35%;">
|
<div id="leftSide" style="width:35%;">
|
||||||
<div style="padding-top: 10px;">
|
<div style="padding-top: 10px;">
|
||||||
<div style="padding-left: 7px; margin-bottom: 5px;">
|
<div style="padding-left: 7px; margin-bottom: 5px;">
|
||||||
@ -71,7 +102,10 @@
|
|||||||
$.ajax({
|
$.ajax({
|
||||||
url: this.href,
|
url: this.href,
|
||||||
cache: false,
|
cache: false,
|
||||||
success: function (html) { $("#user-profiles").prepend(html); }
|
success: function (html) {
|
||||||
|
$("#user-profiles").prepend(html);
|
||||||
|
|
||||||
|
}
|
||||||
});
|
});
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
@ -81,6 +115,7 @@
|
|||||||
function deleteProfile(id) {
|
function deleteProfile(id) {
|
||||||
sendToServer(id);
|
sendToServer(id);
|
||||||
$("#div_" + id).remove();
|
$("#div_" + id).remove();
|
||||||
|
removeOption(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
function sendToServer(id) {
|
function sendToServer(id) {
|
||||||
|
137
NzbDrone.Web/Views/Settings/Sabnzbd.cshtml
Normal file
137
NzbDrone.Web/Views/Settings/Sabnzbd.cshtml
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
@using NzbDrone.Web.Helpers;
|
||||||
|
@model NzbDrone.Web.Models.SabnzbdSettingsModel
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function () {
|
||||||
|
var options = {
|
||||||
|
target: '#result',
|
||||||
|
beforeSubmit: showRequest,
|
||||||
|
success: showResponse,
|
||||||
|
type: 'post',
|
||||||
|
resetForm: false
|
||||||
|
};
|
||||||
|
$('#form').ajaxForm(options);
|
||||||
|
$('#save_button').attr('disabled', '');
|
||||||
|
});
|
||||||
|
|
||||||
|
function showRequest(formData, jqForm, options) {
|
||||||
|
$("#result").empty().html('Saving...');
|
||||||
|
$("#form :input").attr("disabled", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
function showResponse(responseText, statusText, xhr, $form) {
|
||||||
|
$("#result").empty().html(responseText);
|
||||||
|
$("#form :input").attr("disabled", false);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
@using (Html.BeginForm("SaveSabnzbd", "Settings", FormMethod.Post, new { id = "form", name = "form" }))
|
||||||
|
{
|
||||||
|
<fieldset>
|
||||||
|
<legend>SABnzbd</legend>
|
||||||
|
|
||||||
|
<button type="button" onclick="autoConfigureSab()">Auto-Configure</button>
|
||||||
|
|
||||||
|
<div class="config-section">
|
||||||
|
<div class="config-group">
|
||||||
|
<div class="config-title">@Html.LabelFor(m => m.SabHost)</div>
|
||||||
|
<div class="config-value">@Html.TextBoxFor(m => m.SabHost)</div>
|
||||||
|
</div>
|
||||||
|
<div class="config-group2">
|
||||||
|
<div class="config-validation">@Html.ValidationMessageFor(m => m.SabHost)</div>
|
||||||
|
<div class="config-description">@Html.DescriptionFor(m => m.SabHost)</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="config-section">
|
||||||
|
<div class="config-group">
|
||||||
|
<div class="config-title">@Html.LabelFor(m => m.SabPort)</div>
|
||||||
|
<div class="config-value">@Html.TextBoxFor(m => m.SabPort)</div>
|
||||||
|
</div>
|
||||||
|
<div class="config-group2">
|
||||||
|
<div class="config-validation">@Html.ValidationMessageFor(m => m.SabPort)</div>
|
||||||
|
<div class="config-description">@Html.DescriptionFor(m => m.SabPort)</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="config-section">
|
||||||
|
<div class="config-group">
|
||||||
|
<div class="config-title">@Html.LabelFor(m => m.SabApiKey)</div>
|
||||||
|
<div class="config-value">@Html.TextBoxFor(m => m.SabApiKey)</div>
|
||||||
|
</div>
|
||||||
|
<div class="config-group2">
|
||||||
|
<div class="config-validation">@Html.ValidationMessageFor(m => m.SabApiKey)</div>
|
||||||
|
<div class="config-description">@Html.DescriptionFor(m => m.SabApiKey)</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="config-section">
|
||||||
|
<div class="config-group">
|
||||||
|
<div class="config-title">@Html.LabelFor(m => m.SabUsername)</div>
|
||||||
|
<div class="config-value">@Html.TextBoxFor(m => m.SabUsername)</div>
|
||||||
|
</div>
|
||||||
|
<div class="config-group2">
|
||||||
|
<div class="config-validation">@Html.ValidationMessageFor(m => m.SabUsername)</div>
|
||||||
|
<div class="config-description">@Html.DescriptionFor(m => m.SabUsername)</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="config-section">
|
||||||
|
<div class="config-group">
|
||||||
|
<div class="config-title">@Html.LabelFor(m => m.SabPassword)</div>
|
||||||
|
<div class="config-value">@Html.TextBoxFor(m => m.SabPassword)</div>
|
||||||
|
</div>
|
||||||
|
<div class="config-group2">
|
||||||
|
<div class="config-validation">@Html.ValidationMessageFor(m => m.SabPassword)</div>
|
||||||
|
<div class="config-description">@Html.DescriptionFor(m => m.SabPassword)</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="config-section">
|
||||||
|
<div class="config-group">
|
||||||
|
<div class="config-title">@Html.LabelFor(m => m.SabTvCategory)</div>
|
||||||
|
<div class="config-value">@Html.TextBoxFor(m => m.SabTvCategory)</div>
|
||||||
|
</div>
|
||||||
|
<div class="config-group2">
|
||||||
|
<div class="config-validation">@Html.ValidationMessageFor(m => m.SabTvCategory)</div>
|
||||||
|
<div class="config-description">@Html.DescriptionFor(m => m.SabTvCategory)</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="config-section">
|
||||||
|
<div class="config-group">
|
||||||
|
<div class="config-title">@Html.LabelFor(m => m.SabTvPriority)</div>
|
||||||
|
<div class="config-value">@Html.DropDownListFor(m => m.SabTvPriority, Model.PrioritySelectList)</div>
|
||||||
|
</div>
|
||||||
|
<div class="config-group2">
|
||||||
|
<div class="config-validation">@Html.ValidationMessageFor(m => m.SabTvPriority)</div>
|
||||||
|
<div class="config-description">@Html.DescriptionFor(m => m.SabTvPriority)</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input type="submit" id="save_button" value="Save" disabled="disabled" />
|
||||||
|
</fieldset>
|
||||||
|
}
|
||||||
|
<div id="result" class="hiddenResult"></div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
var autoConfigureSabUrl = '@Url.Action("AutoConfigureSab", "Settings")';
|
||||||
|
|
||||||
|
function autoConfigureSab() {
|
||||||
|
$.ajax({
|
||||||
|
type: "GET",
|
||||||
|
url: autoConfigureSabUrl,
|
||||||
|
//data: jQuery.param({ username: $('#SabUsername').val(), password: $('#SabPassword').val() }),
|
||||||
|
error: function (req, status, error) {
|
||||||
|
alert("Sorry! We could not autoconfigure SABnzbd for you");
|
||||||
|
},
|
||||||
|
success: autoConfigureSuccess
|
||||||
|
});
|
||||||
|
|
||||||
|
function autoConfigureSuccess(data) {
|
||||||
|
$('#SabHost').val(data.Host);
|
||||||
|
$('#SabPort').val(data.Port);
|
||||||
|
$('#SabApiKey').val(data.ApiKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
@ -2,7 +2,7 @@
|
|||||||
{
|
{
|
||||||
items.Add().Text("General").Action("General", "Settings");
|
items.Add().Text("General").Action("General", "Settings");
|
||||||
items.Add().Text("Indexers").Action("Indexers", "Settings");
|
items.Add().Text("Indexers").Action("Indexers", "Settings");
|
||||||
items.Add().Text("Downloads").Action("Downloads", "Settings");
|
items.Add().Text("SABnzbd").Action("Sabnzbd", "Settings");
|
||||||
items.Add().Text("Quality").Action("Quality", "Settings");
|
items.Add().Text("Quality").Action("Quality", "Settings");
|
||||||
items.Add().Text("Episode Sorting").Action("EpisodeSorting",
|
items.Add().Text("Episode Sorting").Action("EpisodeSorting",
|
||||||
"Settings");
|
"Settings");
|
||||||
|
@ -6,9 +6,14 @@
|
|||||||
Layout = null;
|
Layout = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function () {
|
||||||
|
addOption('@Model.Name', '@ViewData["ProfileId"]');
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
@using (Html.BeginCollectionItem("UserProfiles"))
|
@using (Html.BeginCollectionItem("UserProfiles"))
|
||||||
{
|
{
|
||||||
|
|
||||||
var idClean = ViewData.TemplateInfo.HtmlFieldPrefix.Replace('[', '_').Replace(']', '_');
|
var idClean = ViewData.TemplateInfo.HtmlFieldPrefix.Replace('[', '_').Replace(']', '_');
|
||||||
var ugly = ViewData.TemplateInfo.HtmlFieldPrefix;
|
var ugly = ViewData.TemplateInfo.HtmlFieldPrefix;
|
||||||
|
|
||||||
@ -61,17 +66,17 @@
|
|||||||
|
|
||||||
<div class="userProfileSectionEditor" id="div_@(ViewData["ProfileId"])">
|
<div class="userProfileSectionEditor" id="div_@(ViewData["ProfileId"])">
|
||||||
|
|
||||||
<fieldset style="width:285px; margin:5px; margin-top: 0px; border-color:#CCCCCD">
|
<fieldset style="width:285px; max-width:285px; margin:5px; margin-top: 0px; border-color:#CCCCCD">
|
||||||
<div id="tester"></div>
|
<div id="tester"></div>
|
||||||
|
|
||||||
<div id="qualityHeader" style="padding-bottom: 5px; margin: 0px;">
|
<div id="qualityHeader" style="padding-bottom: 5px; margin: 0px;">
|
||||||
<h2 style="display:inline; padding-right: 4px; margin-left: 4px;" id="@title">@{Html.DisplayTextFor(m => m.Name);}</h2>
|
<h2 style="display:inline; padding-right: 4px; margin-left: 4px;" id="@title">@{Html.DisplayTextFor(m => m.Name);}</h2>
|
||||||
<a href="#" id="@Model.QualityProfileId" class="deleteRow" onclick="deleteProfile('@ViewData["ProfileId"]')"><img src="../../Content/Images/X.png" alt="Delete" /></a>
|
<a href="#" id="@Model.QualityProfileId" class="deleteRow" onclick="deleteProfile('@ViewData["ProfileId"]')" style="float:right; padding-top:15px;"><img src="../../Content/Images/X.png" alt="Delete"/></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="config-group" style="width: 250px; margin-bottom: 5px; margin-left: 5px;">
|
<div class="config-group" style="width: 270px; margin-bottom: 5px; margin-left: 5px;">
|
||||||
<div class="config-title">@Html.LabelFor(x => x.Name)</div>
|
<div class="config-title">@Html.LabelFor(x => x.Name)</div>
|
||||||
<div class="config-value">@Html.TextBoxFor(x => x.Name)</div>
|
<div class="config-value">@Html.TextBoxFor(x => x.Name, new { maxlength = 16})</div>
|
||||||
<div class="config-validation">@Html.ValidationMessageFor(x => x.Name)</div>
|
<div class="config-validation">@Html.ValidationMessageFor(x => x.Name)</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -137,6 +142,7 @@
|
|||||||
$("#@nameBox").keyup(function () {
|
$("#@nameBox").keyup(function () {
|
||||||
var value = $(this).val();
|
var value = $(this).val();
|
||||||
$("#@title").text(value);
|
$("#@title").text(value);
|
||||||
|
renameOption(value, '@ViewData["ProfileId"]');
|
||||||
}).keyup();
|
}).keyup();
|
||||||
</script>
|
</script>
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user