|
|
|
@using NzbDrone.Web.Helpers
|
|
|
|
@model NzbDrone.Web.Models.IndexerSettingsModel
|
|
|
|
|
|
|
|
@{
|
|
|
|
Layout = "_SettingsLayout.cshtml";
|
|
|
|
}
|
|
|
|
|
|
|
|
<style>
|
|
|
|
.indexerStatusContainer {
|
|
|
|
margin-left: 14px;
|
|
|
|
}
|
|
|
|
</style>
|
|
|
|
|
|
|
|
<div class="indexerStatusContainer">
|
|
|
|
@Html.CheckBox("nzbMatrixStatus", @Model.NzbMatrixEnabled, new { @class = "indexerStatusButton" })
|
|
|
|
<label for="nzbMatrixStatus">NZBMatrix</label>
|
|
|
|
|
|
|
|
@Html.CheckBox("nzbsRusStatus", @Model.NzbsRUsEnabled, new { @class = "indexerStatusButton" })
|
|
|
|
<label for="nzbsRusStatus">NZBsRus</label>
|
|
|
|
|
|
|
|
@Html.CheckBox("newzbinStatus", @Model.NewzbinEnabled, new { @class = "indexerStatusButton" })
|
|
|
|
<label for="newzbinStatus">Newzbin</label>
|
|
|
|
|
|
|
|
@Html.CheckBox("newznabStatus", @Model.NewznabEnabled, new { @class = "indexerStatusButton" })
|
|
|
|
<label for="newznabStatus">Newznab</label>
|
|
|
|
|
|
|
|
@Html.CheckBox("womblesStatus", @Model.WomblesEnabled, new { @class = "indexerStatusButton" })
|
|
|
|
<label for="womblesStatus">Womble's Index</label>
|
|
|
|
|
|
|
|
@Html.CheckBox("fileSharingTalkStatus", @Model.FileSharingTalkEnabled, new { @class = "indexerStatusButton" })
|
|
|
|
<label for="fileSharingTalkStatus">File Sharing Talk</label>
|
|
|
|
|
|
|
|
@Html.CheckBox("nzbIndexStatus", @Model.NzbIndexEnabled, new { @class = "indexerStatusButton" })
|
|
|
|
<label for="nzbIndexStatus">NzbIndex</label>
|
|
|
|
|
|
|
|
@Html.CheckBox("nzbClubStatus", @Model.NzbClubEnabled, new { @class = "indexerStatusButton" })
|
|
|
|
<label for="nzbClubStatus">Nzb Club</label>
|
|
|
|
</div>
|
|
|
|
<div id="stylized">
|
|
|
|
@using (Html.BeginForm("SaveIndexers", "Settings", FormMethod.Post, new { id = "IndexersForm", name = "IndexersForm", @class = "settingsForm" }))
|
|
|
|
{
|
|
|
|
<div class="jquery-accordion jquery-accordion-collapse-all">
|
|
|
|
<h3><a href="#">NZBMatrix</a></h3>
|
|
|
|
<div class="indexerPanel">
|
|
|
|
<label class="labelClass">
|
|
|
|
Enable <span class="small">@Html.DescriptionFor(m => m.NzbMatrixEnabled)</span>
|
|
|
|
</label>
|
|
|
|
@Html.CheckBoxFor(m => m.NzbMatrixEnabled, new { @class = "inputClass checkClass enabledCheck" })
|
|
|
|
<label class="labelClass">@Html.LabelFor(m => m.NzbMatrixUsername)
|
|
|
|
<span class="small">@Html.DescriptionFor(m => m.NzbMatrixUsername)</span>
|
|
|
|
<span class="small">@Html.ValidationMessageFor(m => m.NzbMatrixUsername)</span>
|
|
|
|
</label>
|
|
|
|
@Html.TextBoxFor(m => m.NzbMatrixUsername, new { @class = "inputClass" })
|
|
|
|
<label class="labelClass">@Html.LabelFor(m => m.NzbMatrixApiKey)
|
|
|
|
<span class="small">@Html.DescriptionFor(m => m.NzbMatrixApiKey)</span>
|
|
|
|
<span class="small">@Html.ValidationMessageFor(m => m.NzbMatrixApiKey)</span>
|
|
|
|
</label>
|
|
|
|
@Html.TextBoxFor(m => m.NzbMatrixApiKey, new { @class = "inputClass" })
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<h3><a href="#">NZBsRus</a></h3>
|
|
|
|
<div class="indexerPanel">
|
|
|
|
<div class="warningBox">NZBsRus does not support backlog searching</div>
|
|
|
|
<label class="labelClass">
|
|
|
|
Enable <span class="small">@Html.DescriptionFor(m => m.NzbsRUsEnabled)</span>
|
|
|
|
</label>
|
|
|
|
@Html.CheckBoxFor(m => m.NzbsRUsEnabled, new { @class = "inputClass checkClass enabledCheck" })
|
|
|
|
<label class="labelClass">@Html.LabelFor(m => m.NzbsrusUId)
|
|
|
|
<span class="small">@Html.DescriptionFor(m => m.NzbsrusUId)</span>
|
|
|
|
<span class="small">@Html.ValidationMessageFor(m => m.NzbsrusUId)</span>
|
|
|
|
</label>
|
|
|
|
@Html.TextBoxFor(m => m.NzbsrusUId, new { @class = "inputClass" })
|
|
|
|
<label class="labelClass">@Html.LabelFor(m => m.NzbsrusHash)
|
|
|
|
<span class="small">@Html.DescriptionFor(m => m.NzbsrusHash)</span>
|
|
|
|
<span class="small">@Html.ValidationMessageFor(m => m.NzbsrusHash)</span>
|
|
|
|
</label>
|
|
|
|
@Html.TextBoxFor(m => m.NzbsrusHash, new { @class = "inputClass" })
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<h3><a href="#">Newzbin</a></h3>
|
|
|
|
<div class="indexerPanel">
|
|
|
|
<label class="labelClass">
|
|
|
|
Enable <span class="small">@Html.DescriptionFor(m => m.NewzbinEnabled)</span>
|
|
|
|
</label>
|
|
|
|
@Html.CheckBoxFor(m => m.NewzbinEnabled, new { @class = "inputClass checkClass enabledCheck" })
|
|
|
|
<label class="labelClass">@Html.LabelFor(m => m.NewzbinUsername)
|
|
|
|
<span class="small">@Html.DescriptionFor(m => m.NewzbinUsername)</span>
|
|
|
|
<span class="small">@Html.ValidationMessageFor(m => m.NewzbinUsername)</span>
|
|
|
|
</label>
|
|
|
|
@Html.TextBoxFor(m => m.NewzbinUsername, new { @class = "inputClass" })
|
|
|
|
<label class="labelClass">@Html.LabelFor(m => m.NewzbinPassword)
|
|
|
|
<span class="small">@Html.DescriptionFor(m => m.NewzbinPassword)</span>
|
|
|
|
<span class="small">@Html.ValidationMessageFor(m => m.NewzbinPassword)</span>
|
|
|
|
</label>
|
|
|
|
@Html.TextBoxFor(m => m.NewzbinPassword, new { @class = "inputClass", type = "password" })
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<h3><a href="#">Newznab</a></h3>
|
|
|
|
<div class="indexerPanel">
|
|
|
|
<label class="labelClass">
|
|
|
|
Enable <span class="small">@Html.DescriptionFor(m => m.NewznabEnabled)</span>
|
|
|
|
</label>
|
|
|
|
@Html.CheckBoxFor(m => m.NewznabEnabled, new { @class = "inputClass checkClass enabledCheck" })
|
|
|
|
<br />
|
|
|
|
<br />
|
|
|
|
<p>
|
|
|
|
</p>
|
|
|
|
<a id="addNewznab" href="@Url.Action("AddNewznabProvider", "Settings")">
|
|
|
|
<img src="../../Content/Images/Plus.png" alt="Add Newznab Provider" width="20px"
|
|
|
|
height="20px" />
|
|
|
|
Add Newznab Provider</a>
|
|
|
|
<div id="newznabProviders">
|
|
|
|
@foreach (var provider in Model.NewznabDefinitions)
|
|
|
|
{
|
|
|
|
Html.RenderAction("GetNewznabProviderView", provider);
|
|
|
|
}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<h3><a href="#">Womble's Index</a></h3>
|
|
|
|
<div class="indexerPanel">
|
|
|
|
<div class="warningBox">Womble's Index does not support backlog searching</div>
|
|
|
|
<label class="labelClass">
|
|
|
|
Enable <span class="small">@Html.DescriptionFor(m => m.WomblesEnabled)</span>
|
|
|
|
</label>
|
|
|
|
@Html.CheckBoxFor(m => m.WomblesEnabled, new { @class = "inputClass checkClass enabledCheck" })
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<h3><a href="#">File Sharing Talk</a></h3>
|
|
|
|
<div class="indexerPanel">
|
|
|
|
<div class="warningBox">File Sharing Talk does not support backlog searching</div>
|
|
|
|
<label class="labelClass">
|
|
|
|
Enable <span class="small">@Html.DescriptionFor(m => m.FileSharingTalkEnabled)</span>
|
|
|
|
</label>
|
|
|
|
@Html.CheckBoxFor(m => m.FileSharingTalkEnabled, new { @class = "inputClass checkClass enabledCheck" })
|
|
|
|
<label class="labelClass">@Html.LabelFor(m => m.FileSharingTalkUid)
|
|
|
|
<span class="small">@Html.DescriptionFor(m => m.FileSharingTalkUid)</span>
|
|
|
|
<span class="small">@Html.ValidationMessageFor(m => m.FileSharingTalkUid)</span>
|
|
|
|
</label>
|
|
|
|
@Html.TextBoxFor(m => m.FileSharingTalkUid, new { @class = "inputClass" })
|
|
|
|
<label class="labelClass">@Html.LabelFor(m => m.FileSharingTalkSecret)
|
|
|
|
<span class="small">@Html.DescriptionFor(m => m.FileSharingTalkSecret)</span>
|
|
|
|
<span class="small">@Html.ValidationMessageFor(m => m.FileSharingTalkSecret)</span>
|
|
|
|
</label>
|
|
|
|
@Html.TextBoxFor(m => m.FileSharingTalkSecret, new { @class = "inputClass" })
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<h3><a href="#">NzbIndex</a></h3>
|
|
|
|
<div class="indexerPanel">
|
|
|
|
<label class="labelClass">
|
|
|
|
Enable <span class="small">@Html.DescriptionFor(m => m.NzbIndexEnabled)</span>
|
|
|
|
</label>
|
|
|
|
@Html.CheckBoxFor(m => m.NzbIndexEnabled, new { @class = "inputClass checkClass enabledCheck" })
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<h3><a href="#">NzbClub</a></h3>
|
|
|
|
<div class="indexerPanel">
|
|
|
|
<label class="labelClass">
|
|
|
|
Enable <span class="small">@Html.DescriptionFor(m => m.NzbClubEnabled)</span>
|
|
|
|
</label>
|
|
|
|
@Html.CheckBoxFor(m => m.NzbClubEnabled, new { @class = "inputClass checkClass enabledCheck" })
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="indexer-global-settings">
|
|
|
|
@Html.ValidationSummary(true, "Unable to save your settings. Please correct the errors and try again.")
|
|
|
|
<label class="labelClass">@Html.LabelFor(m => m.Retention)
|
|
|
|
<span class="small">@Html.DescriptionFor(m => m.Retention)</span>
|
|
|
|
<span class="small">@Html.ValidationMessageFor(m => m.Retention)</span>
|
|
|
|
</label>
|
|
|
|
@Html.TextBoxFor(m => m.Retention, new { @class = "inputClass" })
|
|
|
|
|
|
|
|
<label class="labelClass">@Html.LabelFor(m => m.RssSyncInterval)
|
|
|
|
<span class="small">@Html.DescriptionFor(m => m.RssSyncInterval)</span>
|
|
|
|
<span class="small">@Html.ValidationMessageFor(m => m.RssSyncInterval)</span>
|
|
|
|
</label>
|
|
|
|
@Html.TextBoxFor(m => m.RssSyncInterval, new { @class = "inputClass" })
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<button type="submit" class="save_button" disabled="disabled">Save</button>
|
|
|
|
}
|
|
|
|
</div>
|
|
|
|
|
|
|
|
@section Scripts
|
|
|
|
{
|
|
|
|
<script type="text/javascript">
|
|
|
|
$(document).ready(function () {
|
|
|
|
//Allow unobstrusive validation of the AJAX loaded form
|
|
|
|
$.validator.unobtrusive.parse("#IndexersForm");
|
|
|
|
|
|
|
|
//Make the buttons
|
|
|
|
$('.indexerStatusButton').button();
|
|
|
|
|
|
|
|
//Validator Settings
|
|
|
|
var settings = $.data($('#IndexersForm')[0], 'validator').settings;
|
|
|
|
settings.ignore = [];
|
|
|
|
settings.focusInvalid = false;
|
|
|
|
settings.onfocusout = function (element) { $(element).valid(); };
|
|
|
|
|
|
|
|
var oldHighlight = settings.highlight;
|
|
|
|
var oldUnhighlight = settings.unhighlight;
|
|
|
|
|
|
|
|
settings.highlight = function (element, errorClass, validClass) {
|
|
|
|
oldHighlight(element, errorClass, validClass);
|
|
|
|
$(element).parents('div.ui-accordion-content').prev('h3.ui-accordion-header').addClass('validation-error');
|
|
|
|
};
|
|
|
|
settings.unhighlight = function (element, errorClass, validClass) {
|
|
|
|
oldUnhighlight(element, errorClass, validClass);
|
|
|
|
|
|
|
|
var container = $(element).parents('div.ui-accordion-content');
|
|
|
|
if ($(container).children('.' + errorClass).length == 0)
|
|
|
|
$(container).prev('h3.ui-accordion-header').removeClass('validation-error');
|
|
|
|
};
|
|
|
|
});
|
|
|
|
|
|
|
|
$(document).on('change', '.enabledCheck', function () {
|
|
|
|
var id = $(this).prop('id');
|
|
|
|
var checked = $(this).prop('checked');
|
|
|
|
|
|
|
|
if (id == 'NzbMatrixEnabled')
|
|
|
|
$('#nzbMatrixStatus').prop('checked', checked);
|
|
|
|
|
|
|
|
if (id == 'NzbsRUsEnabled')
|
|
|
|
$('#nzbsRusStatus').prop('checked', checked);
|
|
|
|
|
|
|
|
if (id == 'NewzbinEnabled')
|
|
|
|
$('#newzbinStatus').prop('checked', checked);
|
|
|
|
|
|
|
|
if (id == 'NewznabEnabled')
|
|
|
|
$('#newznabStatus').prop('checked', checked);
|
|
|
|
|
|
|
|
if (id == 'WomblesEnabled')
|
|
|
|
$('#womblesStatus').prop('checked', checked);
|
|
|
|
|
|
|
|
if (id == 'FileSharingTalkEnabled')
|
|
|
|
$('#fileSharingTalkStatus').prop('checked', checked);
|
|
|
|
|
|
|
|
if (id == 'NzbIndexEnabled')
|
|
|
|
$('#nzbIndexStatus').prop('checked', checked);
|
|
|
|
|
|
|
|
if (id == 'NzbClubEnabled')
|
|
|
|
$('#nzbClubStatus').prop('checked', checked);
|
|
|
|
|
|
|
|
$('.indexerStatusButton').button("refresh");
|
|
|
|
reValidate();
|
|
|
|
});
|
|
|
|
|
|
|
|
$(document).on('change', '.indexerStatusButton', function () {
|
|
|
|
var id = $(this).prop('id');
|
|
|
|
var checked = $(this).prop('checked');
|
|
|
|
|
|
|
|
if (id == 'nzbMatrixStatus')
|
|
|
|
$('#NzbMatrixEnabled').prop('checked', checked);
|
|
|
|
|
|
|
|
if (id == 'nzbsRusStatus')
|
|
|
|
$('#NzbsRUsEnabled').prop('checked', checked);
|
|
|
|
|
|
|
|
if (id == 'newzbinStatus')
|
|
|
|
$('#NewzbinEnabled').prop('checked', checked);
|
|
|
|
|
|
|
|
if (id == 'newznabStatus')
|
|
|
|
$('#NewznabEnabled').prop('checked', checked);
|
|
|
|
|
|
|
|
if (id == 'womblesStatus')
|
|
|
|
$('#WomblesEnabled').prop('checked', checked);
|
|
|
|
|
|
|
|
if (id == 'fileSharingTalkStatus')
|
|
|
|
$('#FileSharingTalkEnabled').prop('checked', checked);
|
|
|
|
|
|
|
|
if (id == 'nzbIndexStatus')
|
|
|
|
$('#NzbIndexEnabled').prop('checked', checked);
|
|
|
|
|
|
|
|
if (id == 'nzbClubStatus')
|
|
|
|
$('#NzbClubEnabled').prop('checked', checked);
|
|
|
|
|
|
|
|
reValidate();
|
|
|
|
});
|
|
|
|
|
|
|
|
function reValidate() {
|
|
|
|
$("#IndexersForm").validate().form();
|
|
|
|
|
|
|
|
var container = $('div.ui-accordion-content');
|
|
|
|
if ($(container).children('.input-validation-error').length == 0)
|
|
|
|
$(container).prev('h3.ui-accordion-header').removeClass('validation-error');
|
|
|
|
}
|
|
|
|
|
|
|
|
//Newznab
|
|
|
|
$("#addNewznab").on('click', function (event) {
|
|
|
|
$.ajax({
|
|
|
|
url: this.href,
|
|
|
|
cache: false,
|
|
|
|
success: function (html) {
|
|
|
|
$("#newznabProviders").append(html);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
event.preventDefault();
|
|
|
|
//event.stopPropagation();
|
|
|
|
});
|
|
|
|
|
|
|
|
var deleteNewznabProviderUrl = '@Url.Action("DeleteNewznabProvider", "Settings")';
|
|
|
|
|
|
|
|
function deleteProvider(id) {
|
|
|
|
$.ajax({
|
|
|
|
type: "POST",
|
|
|
|
url: deleteNewznabProviderUrl,
|
|
|
|
data: jQuery.param({ providerId: id }),
|
|
|
|
error: function (req, status, error) {
|
|
|
|
alert("Sorry! We could not delete your Provider at this time. " + error);
|
|
|
|
},
|
|
|
|
success: function (data, textStatus, jqXHR) {
|
|
|
|
$("#provider_" + id).remove();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function getProviderId(obj) {
|
|
|
|
var parentProviderSection = $(obj).parents('.providerSection');
|
|
|
|
return parentProviderSection.children('.newznabProviderId').val();
|
|
|
|
}
|
|
|
|
|
|
|
|
$(".providerName_textbox").on('keyup', function () {
|
|
|
|
var value = $(this).val();
|
|
|
|
var profileId = getProviderId(this);
|
|
|
|
$("#title_" + profileId).text(value);
|
|
|
|
}).keyup();
|
|
|
|
</script>
|
|
|
|
}
|