mirror of
https://github.com/Radarr/Radarr.git
synced 2024-11-04 10:02:40 +01:00
Removed AccountModel.
Download Settings updated to use Descriptions.
This commit is contained in:
parent
ff0e0597b4
commit
72d3f5cef2
87
NzbDrone.6.0.ReSharper
Normal file
87
NzbDrone.6.0.ReSharper
Normal file
@ -0,0 +1,87 @@
|
||||
<Configuration>
|
||||
<CodeStyleSettings>
|
||||
<ExternalPath IsNull="False">
|
||||
</ExternalPath>
|
||||
<Sharing>SOLUTION</Sharing>
|
||||
<CSS>
|
||||
<FormatSettings />
|
||||
<Naming2 />
|
||||
</CSS>
|
||||
<CSharp>
|
||||
<FormatSettings>
|
||||
<MODIFIERS_ORDER IsNull="False">
|
||||
<Item>public</Item>
|
||||
<Item>protected</Item>
|
||||
<Item>internal</Item>
|
||||
<Item>private</Item>
|
||||
<Item>new</Item>
|
||||
<Item>abstract</Item>
|
||||
<Item>virtual</Item>
|
||||
<Item>override</Item>
|
||||
<Item>sealed</Item>
|
||||
<Item>static</Item>
|
||||
<Item>readonly</Item>
|
||||
<Item>extern</Item>
|
||||
<Item>unsafe</Item>
|
||||
<Item>volatile</Item>
|
||||
</MODIFIERS_ORDER>
|
||||
</FormatSettings>
|
||||
<UsingsSettings />
|
||||
<Naming2>
|
||||
<EventHandlerPatternLong>$object$_On$event$</EventHandlerPatternLong>
|
||||
<EventHandlerPatternShort>$event$Handler</EventHandlerPatternShort>
|
||||
</Naming2>
|
||||
</CSharp>
|
||||
<JavaScript>
|
||||
<FormatSettings />
|
||||
<Naming2>
|
||||
<UserRule Name="JS_LOCAL_VARIABLE" Inspect="True" Prefix="" Suffix="" Style="aaBb" />
|
||||
<UserRule Name="JS_FUNCTION" Inspect="True" Prefix="" Suffix="" Style="aaBb" />
|
||||
<UserRule Name="JS_PARAMETER" Inspect="True" Prefix="" Suffix="" Style="aaBb" />
|
||||
<UserRule Name="JS_LABEL" Inspect="True" Prefix="" Suffix="" Style="aaBb" />
|
||||
<UserRule Name="JS_GLOBAL_VARIABLE" Inspect="True" Prefix="" Suffix="" Style="AaBb" />
|
||||
<UserRule Name="JS_OBJECT_PROPERTY_OF_FUNCTION" Inspect="True" Prefix="" Suffix="" Style="aaBb" />
|
||||
<UserRule Name="JS_CONSTRUCTOR" Inspect="True" Prefix="" Suffix="" Style="AaBb" />
|
||||
</Naming2>
|
||||
</JavaScript>
|
||||
<VB>
|
||||
<FormatSettings />
|
||||
<ImportsSettings />
|
||||
<Naming2>
|
||||
<EventHandlerPatternLong>$object$_On$event$</EventHandlerPatternLong>
|
||||
<EventHandlerPatternShort>$event$Handler</EventHandlerPatternShort>
|
||||
</Naming2>
|
||||
</VB>
|
||||
<Web>
|
||||
<Naming2 />
|
||||
</Web>
|
||||
<XML>
|
||||
<FormatSettings />
|
||||
</XML>
|
||||
<Xaml>
|
||||
<Naming2 />
|
||||
</Xaml>
|
||||
<GenerateMemberBody />
|
||||
<Naming2>
|
||||
<EventHandlerPatternLong>$object$_On$event$</EventHandlerPatternLong>
|
||||
<EventHandlerPatternShort>$event$Handler</EventHandlerPatternShort>
|
||||
<PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="PrivateStaticReadonly" />
|
||||
<PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="TypesAndNamespaces" />
|
||||
<PredefinedRule Inspect="True" Prefix="I" Suffix="" Style="AaBb" ElementKind="Interfaces" />
|
||||
<PredefinedRule Inspect="True" Prefix="T" Suffix="" Style="AaBb" ElementKind="TypeParameters" />
|
||||
<PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="MethodPropertyEvent" />
|
||||
<PredefinedRule Inspect="True" Prefix="" Suffix="" Style="aaBb" ElementKind="Locals" />
|
||||
<PredefinedRule Inspect="True" Prefix="" Suffix="" Style="aaBb" ElementKind="LocalConstants" />
|
||||
<PredefinedRule Inspect="True" Prefix="" Suffix="" Style="aaBb" ElementKind="Parameters" />
|
||||
<PredefinedRule Inspect="True" Prefix="_" Suffix="" Style="aaBb" ElementKind="PublicFields" />
|
||||
<PredefinedRule Inspect="True" Prefix="_" Suffix="" Style="aaBb" ElementKind="PrivateInstanceFields" />
|
||||
<PredefinedRule Inspect="True" Prefix="_" Suffix="" Style="aaBb" ElementKind="PrivateStaticFields" />
|
||||
<PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="Constants" />
|
||||
<PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="PrivateConstants" />
|
||||
<PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="StaticReadonly" />
|
||||
<PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="EnumMember" />
|
||||
<PredefinedRule Inspect="True" Prefix="" Suffix="" Style="AaBb" ElementKind="Other" />
|
||||
<Abbreviation Text="IIS" />
|
||||
</Naming2>
|
||||
</CodeStyleSettings>
|
||||
</Configuration>
|
@ -190,9 +190,9 @@ hr
|
||||
/* Config Pages */
|
||||
.config-section
|
||||
{
|
||||
width: 550px;
|
||||
width: 650px;
|
||||
height: 45px;
|
||||
display: block;
|
||||
padding-bottom: 25px;
|
||||
}
|
||||
|
||||
.config-group
|
||||
@ -200,6 +200,15 @@ hr
|
||||
width: 300px;
|
||||
display: block;
|
||||
float: left;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
.config-group2
|
||||
{
|
||||
width: 300px;
|
||||
display: block;
|
||||
float: right;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
.config-title
|
||||
@ -217,7 +226,11 @@ hr
|
||||
.config-validation
|
||||
{
|
||||
color: Red;
|
||||
float: right;
|
||||
}
|
||||
|
||||
.config-description
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
.sub-field
|
||||
@ -227,7 +240,15 @@ hr
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.config-value
|
||||
{
|
||||
float: right;
|
||||
}
|
||||
|
||||
.config-checkbox
|
||||
{
|
||||
margin-right: 135px;
|
||||
}
|
||||
|
||||
button, input[type="button"], input[type="submit"], input[type="reset"]
|
||||
{
|
||||
|
@ -1,299 +0,0 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Globalization;
|
||||
using System.Web.Security;
|
||||
|
||||
namespace NzbDrone.Web.Models
|
||||
{
|
||||
|
||||
#region Models
|
||||
|
||||
[PropertiesMustMatch("NewPassword", "ConfirmPassword",
|
||||
ErrorMessage = "The new password and confirmation password do not match.")]
|
||||
public class ChangePasswordModel
|
||||
{
|
||||
[Required]
|
||||
[DataType(DataType.Password)]
|
||||
[DisplayName("Current password")]
|
||||
public string OldPassword { get; set; }
|
||||
|
||||
[Required]
|
||||
[ValidatePasswordLength]
|
||||
[DataType(DataType.Password)]
|
||||
[DisplayName("New password")]
|
||||
public string NewPassword { get; set; }
|
||||
|
||||
[Required]
|
||||
[DataType(DataType.Password)]
|
||||
[DisplayName("Confirm new password")]
|
||||
public string ConfirmPassword { get; set; }
|
||||
}
|
||||
|
||||
public class LogOnModel
|
||||
{
|
||||
[Required]
|
||||
[DisplayName("User name")]
|
||||
public string UserName { get; set; }
|
||||
|
||||
[Required]
|
||||
[DataType(DataType.Password)]
|
||||
[DisplayName("Password")]
|
||||
public string Password { get; set; }
|
||||
|
||||
[DisplayName("Remember me?")]
|
||||
public bool RememberMe { get; set; }
|
||||
}
|
||||
|
||||
[PropertiesMustMatch("Password", "ConfirmPassword",
|
||||
ErrorMessage = "The password and confirmation password do not match.")]
|
||||
public class RegisterModel
|
||||
{
|
||||
[Required]
|
||||
[DisplayName("User name")]
|
||||
public string UserName { get; set; }
|
||||
|
||||
[Required]
|
||||
[DataType(DataType.EmailAddress)]
|
||||
[DisplayName("Email address")]
|
||||
public string Email { get; set; }
|
||||
|
||||
[Required]
|
||||
[ValidatePasswordLength]
|
||||
[DataType(DataType.Password)]
|
||||
[DisplayName("Password")]
|
||||
public string Password { get; set; }
|
||||
|
||||
[Required]
|
||||
[DataType(DataType.Password)]
|
||||
[DisplayName("Confirm password")]
|
||||
public string ConfirmPassword { get; set; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Services
|
||||
|
||||
// The FormsAuthentication type is sealed and contains static members, so it is difficult to
|
||||
// unit test code that calls its members. The interface and helper class below demonstrate
|
||||
// how to create an abstract wrapper around such a type in order to make the AccountController
|
||||
// code unit testable.
|
||||
|
||||
public interface IMembershipService
|
||||
{
|
||||
int MinPasswordLength { get; }
|
||||
|
||||
bool ValidateUser(string userName, string password);
|
||||
MembershipCreateStatus CreateUser(string userName, string password, string email);
|
||||
bool ChangePassword(string userName, string oldPassword, string newPassword);
|
||||
}
|
||||
|
||||
public class AccountMembershipService : IMembershipService
|
||||
{
|
||||
private readonly MembershipProvider _provider;
|
||||
|
||||
public AccountMembershipService()
|
||||
: this(null)
|
||||
{
|
||||
}
|
||||
|
||||
public AccountMembershipService(MembershipProvider provider)
|
||||
{
|
||||
_provider = provider ?? Membership.Provider;
|
||||
}
|
||||
|
||||
#region IMembershipService Members
|
||||
|
||||
public int MinPasswordLength
|
||||
{
|
||||
get { return _provider.MinRequiredPasswordLength; }
|
||||
}
|
||||
|
||||
public bool ValidateUser(string userName, string password)
|
||||
{
|
||||
if (String.IsNullOrEmpty(userName))
|
||||
throw new ArgumentException("Value cannot be null or empty.", "userName");
|
||||
if (String.IsNullOrEmpty(password))
|
||||
throw new ArgumentException("Value cannot be null or empty.", "password");
|
||||
|
||||
return _provider.ValidateUser(userName, password);
|
||||
}
|
||||
|
||||
public MembershipCreateStatus CreateUser(string userName, string password, string email)
|
||||
{
|
||||
if (String.IsNullOrEmpty(userName))
|
||||
throw new ArgumentException("Value cannot be null or empty.", "userName");
|
||||
if (String.IsNullOrEmpty(password))
|
||||
throw new ArgumentException("Value cannot be null or empty.", "password");
|
||||
if (String.IsNullOrEmpty(email)) throw new ArgumentException("Value cannot be null or empty.", "email");
|
||||
|
||||
MembershipCreateStatus status;
|
||||
_provider.CreateUser(userName, password, email, null, null, true, null, out status);
|
||||
return status;
|
||||
}
|
||||
|
||||
public bool ChangePassword(string userName, string oldPassword, string newPassword)
|
||||
{
|
||||
if (String.IsNullOrEmpty(userName))
|
||||
throw new ArgumentException("Value cannot be null or empty.", "userName");
|
||||
if (String.IsNullOrEmpty(oldPassword))
|
||||
throw new ArgumentException("Value cannot be null or empty.", "oldPassword");
|
||||
if (String.IsNullOrEmpty(newPassword))
|
||||
throw new ArgumentException("Value cannot be null or empty.", "newPassword");
|
||||
|
||||
// The underlying ChangePassword() will throw an exception rather
|
||||
// than return false in certain failure scenarios.
|
||||
try
|
||||
{
|
||||
MembershipUser currentUser = _provider.GetUser(userName, true /* userIsOnline */);
|
||||
return currentUser.ChangePassword(oldPassword, newPassword);
|
||||
}
|
||||
catch (ArgumentException)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
catch (MembershipPasswordException)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
public interface IFormsAuthenticationService
|
||||
{
|
||||
void SignIn(string userName, bool createPersistentCookie);
|
||||
void SignOut();
|
||||
}
|
||||
|
||||
public class FormsAuthenticationService : IFormsAuthenticationService
|
||||
{
|
||||
#region IFormsAuthenticationService Members
|
||||
|
||||
public void SignIn(string userName, bool createPersistentCookie)
|
||||
{
|
||||
if (String.IsNullOrEmpty(userName))
|
||||
throw new ArgumentException("Value cannot be null or empty.", "userName");
|
||||
|
||||
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
|
||||
}
|
||||
|
||||
public void SignOut()
|
||||
{
|
||||
FormsAuthentication.SignOut();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Validation
|
||||
|
||||
public static class AccountValidation
|
||||
{
|
||||
public static string ErrorCodeToString(MembershipCreateStatus createStatus)
|
||||
{
|
||||
// See http://go.microsoft.com/fwlink/?LinkID=177550 for
|
||||
// a full list of status codes.
|
||||
switch (createStatus)
|
||||
{
|
||||
case MembershipCreateStatus.DuplicateUserName:
|
||||
return "Username already exists. Please enter a different user name.";
|
||||
|
||||
case MembershipCreateStatus.DuplicateEmail:
|
||||
return "A username for that e-mail address already exists. Please enter a different e-mail address.";
|
||||
|
||||
case MembershipCreateStatus.InvalidPassword:
|
||||
return "The password provided is invalid. Please enter a valid password value.";
|
||||
|
||||
case MembershipCreateStatus.InvalidEmail:
|
||||
return "The e-mail address provided is invalid. Please check the value and try again.";
|
||||
|
||||
case MembershipCreateStatus.InvalidAnswer:
|
||||
return "The password retrieval answer provided is invalid. Please check the value and try again.";
|
||||
|
||||
case MembershipCreateStatus.InvalidQuestion:
|
||||
return "The password retrieval question provided is invalid. Please check the value and try again.";
|
||||
|
||||
case MembershipCreateStatus.InvalidUserName:
|
||||
return "The user name provided is invalid. Please check the value and try again.";
|
||||
|
||||
case MembershipCreateStatus.ProviderError:
|
||||
return
|
||||
"The authentication provider returned an error. Please verify your entry and try again. If the problem persists, please contact your system administrator.";
|
||||
|
||||
case MembershipCreateStatus.UserRejected:
|
||||
return
|
||||
"The user creation request has been canceled. Please verify your entry and try again. If the problem persists, please contact your system administrator.";
|
||||
|
||||
default:
|
||||
return
|
||||
"An unknown error occurred. Please verify your entry and try again. If the problem persists, please contact your system administrator.";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
|
||||
public sealed class PropertiesMustMatchAttribute : ValidationAttribute
|
||||
{
|
||||
private const string _defaultErrorMessage = "'{0}' and '{1}' do not match.";
|
||||
private readonly object _typeId = new object();
|
||||
|
||||
public PropertiesMustMatchAttribute(string originalProperty, string confirmProperty)
|
||||
: base(_defaultErrorMessage)
|
||||
{
|
||||
OriginalProperty = originalProperty;
|
||||
ConfirmProperty = confirmProperty;
|
||||
}
|
||||
|
||||
public string ConfirmProperty { get; private set; }
|
||||
public string OriginalProperty { get; private set; }
|
||||
|
||||
public override object TypeId
|
||||
{
|
||||
get { return _typeId; }
|
||||
}
|
||||
|
||||
public override string FormatErrorMessage(string name)
|
||||
{
|
||||
return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString,
|
||||
OriginalProperty, ConfirmProperty);
|
||||
}
|
||||
|
||||
public override bool IsValid(object value)
|
||||
{
|
||||
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(value);
|
||||
object originalValue = properties.Find(OriginalProperty, true /* ignoreCase */).GetValue(value);
|
||||
object confirmValue = properties.Find(ConfirmProperty, true /* ignoreCase */).GetValue(value);
|
||||
return Equals(originalValue, confirmValue);
|
||||
}
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
|
||||
public sealed class ValidatePasswordLengthAttribute : ValidationAttribute
|
||||
{
|
||||
private const string _defaultErrorMessage = "'{0}' must be at least {1} characters long.";
|
||||
private readonly int _minCharacters = Membership.Provider.MinRequiredPasswordLength;
|
||||
|
||||
public ValidatePasswordLengthAttribute()
|
||||
: base(_defaultErrorMessage)
|
||||
{
|
||||
}
|
||||
|
||||
public override string FormatErrorMessage(string name)
|
||||
{
|
||||
return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString,
|
||||
name, _minCharacters);
|
||||
}
|
||||
|
||||
public override bool IsValid(object value)
|
||||
{
|
||||
string valueAsString = value as string;
|
||||
return (valueAsString != null && valueAsString.Length >= _minCharacters);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
@ -15,56 +15,68 @@ public class DownloadSettingsModel
|
||||
[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")]
|
||||
[DataType(DataType.Text)]
|
||||
[DisplayName("SABnzbd Host")]
|
||||
[Description("Hostname or IP Address running SABnzbd")]
|
||||
public String SabHost { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "Please enter a valid port")]
|
||||
[DataType(DataType.Text)]
|
||||
[DisplayName("SABnzbd Port")]
|
||||
[Description("Port for SABnzbd web interface")]
|
||||
public int SabPort { get; set; }
|
||||
|
||||
[DataType(DataType.Text)]
|
||||
[DisplayName("SABnzbd API Key")]
|
||||
[Description("API Key for SABNzbd, Found in Config: General")]
|
||||
[DisplayFormat(ConvertEmptyStringToNull = false)]
|
||||
public String SabApiKey { get; set; }
|
||||
|
||||
[DataType(DataType.Text)]
|
||||
[DisplayName("SABnzbd Username")]
|
||||
[Description("Username for SABnzbd WebUI (Not Required when using APIKey)")]
|
||||
[DisplayFormat(ConvertEmptyStringToNull = false)]
|
||||
public String SabUsername { get; set; }
|
||||
|
||||
[DataType(DataType.Text)]
|
||||
[DisplayName("SABnzbd Password")]
|
||||
[Description("Password for SABnzbd WebUI (Not required when using APIKey)")]
|
||||
[DisplayFormat(ConvertEmptyStringToNull = false)]
|
||||
public String SabPassword { get; set; }
|
||||
|
||||
[DataType(DataType.Text)]
|
||||
[DisplayFormat(ConvertEmptyStringToNull = false)]
|
||||
[DisplayName("SABnzbd TV Category")]
|
||||
[Description("Category to use when sending NZBs to SABnzbd")]
|
||||
public String SabTvCategory { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "Please select a valid priority")]
|
||||
[DisplayName("SABnzbd Priority")]
|
||||
[Description("Priority to use when sending NZBs to SABnzbd")]
|
||||
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; }
|
||||
}
|
||||
}
|
@ -227,7 +227,6 @@
|
||||
<Compile Include="Helpers\DescriptionExtension.cs" />
|
||||
<Compile Include="Helpers\HtmlPrefixScopeExtensions.cs" />
|
||||
<Compile Include="Helpers\IsCurrentActionHelper.cs" />
|
||||
<Compile Include="Models\AccountModels.cs" />
|
||||
<Compile Include="Models\AddExistingManualModel.cs" />
|
||||
<Compile Include="Models\AddExistingSeriesModel.cs" />
|
||||
<Compile Include="Models\AddNewSeriesModel.cs" />
|
||||
|
@ -1,4 +1,5 @@
|
||||
@model NzbDrone.Web.Models.DownloadSettingsModel
|
||||
@using NzbDrone.Web.Helpers;
|
||||
@model NzbDrone.Web.Models.DownloadSettingsModel
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function () {
|
||||
@ -54,7 +55,6 @@
|
||||
|
||||
@using (Html.BeginForm("SaveDownloads", "Settings", FormMethod.Post, new { id = "form", name = "form" }))
|
||||
{
|
||||
|
||||
<fieldset>
|
||||
<legend>Download Settings</legend>
|
||||
|
||||
@ -66,16 +66,21 @@
|
||||
<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)</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">
|
||||
@ -83,8 +88,12 @@
|
||||
<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>
|
||||
@ -104,14 +113,17 @@
|
||||
<fieldset class="sub-field">
|
||||
<legend>SABnzbd</legend>
|
||||
|
||||
<button type="button" onclick="autoConfigureSab()">Auto-Configure</button>
|
||||
@*<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">
|
||||
@ -119,7 +131,10 @@
|
||||
<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">
|
||||
@ -127,7 +142,10 @@
|
||||
<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">
|
||||
@ -135,7 +153,10 @@
|
||||
<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">
|
||||
@ -143,15 +164,21 @@
|
||||
<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 class="config-value">@Html.TextBoxFor(m => m.SabTvPriority)</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 class="config-validation">@Html.ValidationMessageFor(m => m.SabTvCategory)</div>
|
||||
</div>
|
||||
|
||||
<div class="config-section">
|
||||
@ -159,7 +186,10 @@
|
||||
<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>
|
||||
@ -172,7 +202,10 @@
|
||||
<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>
|
||||
|
Loading…
Reference in New Issue
Block a user