diff --git a/NzbDrone.Core/Repository/Quality/QualityProfile.cs b/NzbDrone.Core/Repository/Quality/QualityProfile.cs index c3a08de56..280604ab3 100644 --- a/NzbDrone.Core/Repository/Quality/QualityProfile.cs +++ b/NzbDrone.Core/Repository/Quality/QualityProfile.cs @@ -13,6 +13,7 @@ namespace NzbDrone.Core.Repository.Quality [Required (ErrorMessage = "A Name is Required")] [DisplayName("Name")] + [DisplayFormat(ConvertEmptyStringToNull = false)] public string Name { get; set; } public bool UserProfile { get; set; } //Allows us to tell the difference between default and user profiles @@ -22,6 +23,7 @@ namespace NzbDrone.Core.Repository.Quality [SubSonicIgnore] [DisplayName("Allowed Qualities String")] + [DisplayFormat(ConvertEmptyStringToNull = false)] public string AllowedString { get; set; } [DisplayName("Cutoff")] diff --git a/NzbDrone.Web/Controllers/SettingsController.cs b/NzbDrone.Web/Controllers/SettingsController.cs index d5a30a658..5ee4ae780 100644 --- a/NzbDrone.Web/Controllers/SettingsController.cs +++ b/NzbDrone.Web/Controllers/SettingsController.cs @@ -19,6 +19,8 @@ namespace NzbDrone.Web.Controllers private IIndexerProvider _indexerProvider; private IQualityProvider _qualityProvider; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); + private string _settingsSaved = "Settings Saved."; + private string _settingsFailed = "Error Saving Settings, please fix any errors"; public SettingsController(IConfigProvider configProvider, IIndexerProvider indexerProvider, IQualityProvider qualityProvider) { @@ -146,60 +148,22 @@ namespace NzbDrone.Web.Controllers return new QualityModel {DefaultProfileId = defaultQualityProfileId, SelectList = selectList}; } - [HttpPost] - public ActionResult Index(SettingsModel data) - { - try - { - _configProvider.SeriesRoot = data.TvFolder; - } - catch (Exception) - { - Logger.Error("Error saving settings."); - - if (Request.IsAjaxRequest()) - return Content("Error saving settings."); - - return Content("Error saving settings."); - } - - - if (Request.IsAjaxRequest()) - return Content("Settings Saved."); - - return Content("Settings Saved."); - } - [HttpPost] public ActionResult SaveGeneral(SettingsModel data) { - try - { - if (data.TvFolder != null) - _configProvider.SeriesRoot = data.TvFolder; - - //if (data.Quality != null) - // _configProvider.SetValue("Quality", data.Quality); - } - catch (Exception e) + if (ModelState.IsValid) { - Logger.ErrorException(e.Message, e); - if (Request.IsAjaxRequest()) - return Content("Error Saving Settings, please fix any errors"); - - return Content("Error Saving Settings, please fix any errors"); + _configProvider.SeriesRoot = data.TvFolder; + return Content(_settingsSaved); } - if (Request.IsAjaxRequest()) - return Content("Settings Saved."); - - return Content("Settings Saved."); + return Content(_settingsFailed); } [HttpPost] public ActionResult SaveIndexers(IndexerSettingsModel data) { - try + if (ModelState.IsValid) { //Todo: Only allow indexers to be enabled if user information has been provided foreach (var indexer in data.Indexers) @@ -208,38 +172,17 @@ namespace NzbDrone.Web.Controllers _indexerProvider.Update(indexer); } - if (data.NzbMatrixUsername != null) - _configProvider.SetValue("NzbMatrixUsername", data.NzbMatrixUsername); - - if (data.NzbMatrixApiKey != null) - _configProvider.SetValue("NzbMatrixApiKey", data.NzbMatrixApiKey); - - if (data.NzbsOrgUId != null) - _configProvider.SetValue("NzbsOrgUId", data.NzbsOrgUId); - - if (data.NzbsOrgHash != null) - _configProvider.SetValue("NzbsOrgHash", data.NzbsOrgHash); - - if (data.NzbsrusUId != null) - _configProvider.SetValue("NzbsrusUId", data.NzbsrusUId); - - if (data.NzbsrusHash != null) - _configProvider.SetValue("NzbsrusHash", data.NzbsrusHash); + _configProvider.SetValue("NzbMatrixUsername", data.NzbMatrixUsername); + _configProvider.SetValue("NzbMatrixApiKey", data.NzbMatrixApiKey); + _configProvider.SetValue("NzbsOrgUId", data.NzbsOrgUId); + _configProvider.SetValue("NzbsOrgHash", data.NzbsOrgHash); + _configProvider.SetValue("NzbsrusUId", data.NzbsrusUId); + _configProvider.SetValue("NzbsrusHash", data.NzbsrusHash); + return Content(_settingsSaved); } - catch (Exception e) - { - Logger.ErrorException(e.Message, e); - if (Request.IsAjaxRequest()) - return Content("Error Saving Settings, please fix any errors"); - - return Content("Error Saving Settings, please fix any errors"); - } - - if (Request.IsAjaxRequest()) - return Content("Settings Saved."); - return Content("Settings Saved."); + return Content(_settingsFailed); } [HttpPost] @@ -247,118 +190,67 @@ namespace NzbDrone.Web.Controllers { if (ModelState.IsValid) { - try - { - if (data.SyncFrequency > 15) - _configProvider.SetValue("SyncFrequency", data.SyncFrequency.ToString()); - + _configProvider.SetValue("SyncFrequency", data.SyncFrequency.ToString()); _configProvider.SetValue("DownloadPropers", data.DownloadPropers.ToString()); - - if (data.Retention > 0) - _configProvider.SetValue("Retention", data.Retention.ToString()); - - if (data.SabHost != null) - _configProvider.SetValue("SabHost", data.SabHost); - - if (data.SabPort > 0) - _configProvider.SetValue("SabPort", data.SabPort.ToString()); - - if (data.SabApiKey != null) - _configProvider.SetValue("SabApiKey", data.SabApiKey); - - if (data.SabUsername != null) - _configProvider.SetValue("SabUsername", data.SabUsername); - - if (data.SabPassword != null) - _configProvider.SetValue("SabPassword", data.SabPassword); - - if (data.SabCategory != null) - _configProvider.SetValue("SabCategory", data.SabCategory); - + _configProvider.SetValue("Retention", data.Retention.ToString()); + _configProvider.SetValue("SabHost", data.SabHost); + _configProvider.SetValue("SabPort", data.SabPort.ToString()); + _configProvider.SetValue("SabApiKey", data.SabApiKey); + _configProvider.SetValue("SabUsername", data.SabUsername); + _configProvider.SetValue("SabPassword", data.SabPassword); + _configProvider.SetValue("SabCategory", data.SabCategory); _configProvider.SetValue("SabPriority", data.SabPriority.ToString()); - if (Request.IsAjaxRequest()) - return Content("Settings Saved."); - - return Content("Settings Saved."); - } - - catch (Exception e) - { - Logger.ErrorException(e.Message, e); - if (Request.IsAjaxRequest()) - return Content("Error Saving Settings, please fix any errors"); - - return Content("Error Saving Settings, please fix any errors"); - } + return Content(_settingsSaved); } - if (Request.IsAjaxRequest()) - return Content("Error Saving Settings, please fix any errors"); - - return Content("Error Saving Settings, please fix any errors"); + return Content(_settingsFailed); } [HttpPost] public ActionResult SaveQuality(QualityModel data) { - try + if (ModelState.IsValid) { - if (ModelState.IsValid) + _configProvider.SetValue("DefaultQualityProfile", data.DefaultProfileId.ToString()); + + //Saves only the Default Quality, skips User Profiles since none exist + if (data.UserProfiles == null) + return Content(_settingsSaved); + + foreach (var dbProfile in _qualityProvider.GetAllProfiles().Where(q => q.UserProfile)) { - _configProvider.SetValue("DefaultQualityProfile", data.DefaultProfileId.ToString()); + if (!data.UserProfiles.Exists(p => p.ProfileId == dbProfile.ProfileId)) + _qualityProvider.Delete(dbProfile.ProfileId); + } - foreach (var dbProfile in _qualityProvider.GetAllProfiles().Where(q => q.UserProfile)) - { - if (!data.UserProfiles.Exists(p => p.ProfileId == dbProfile.ProfileId)) - _qualityProvider.Delete(dbProfile.ProfileId); - } + foreach (var profile in data.UserProfiles) + { + Logger.Debug(String.Format("Updating User Profile: {0}", profile)); - foreach (var profile in data.UserProfiles) + profile.Allowed = new List(); + foreach (var quality in profile.AllowedString.Split(',')) { - Logger.Debug(String.Format("Updating User Profile: {0}", profile)); + var qType = (QualityTypes)Enum.Parse(typeof(QualityTypes), quality); + profile.Allowed.Add(qType); + } - profile.Allowed = new List(); - foreach (var quality in profile.AllowedString.Split(',')) - { - 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 (!profile.Allowed.Contains(profile.Cutoff)) + return Content("Error Saving Settings, please fix any errors"); + //profile.Cutoff = profile.Allowed.Last(); - //If the Cutoff value selected is not in the allowed list then use the last allowed value, this should be validated on submit - if (!profile.Allowed.Contains(profile.Cutoff)) - throw new InvalidOperationException("Invalid Cutoff Value"); - //profile.Cutoff = profile.Allowed.Last(); + if (profile.ProfileId > 0) + _qualityProvider.Update(profile); - if (profile.ProfileId > 0) - _qualityProvider.Update(profile); + else + _qualityProvider.Add(profile); - else - _qualityProvider.Add(profile); - } + return Content(_settingsSaved); } } - catch (Exception e) - { - Logger.ErrorException(e.Message, e); - - if (Request.IsAjaxRequest()) - return Content("Error Saving Settings, please fix any errors"); - - return Content("Error Saving Settings, please fix any errors"); - } - - if (Request.IsAjaxRequest()) - return Content("Settings Saved."); - - return Content("Settings Saved."); - } - - [HttpPost] - public ActionResult SortedList(List items) - { - return Content("Settings Saved."); + return Content(_settingsFailed); } } } diff --git a/NzbDrone.Web/Models/DownloadSettingsModel.cs b/NzbDrone.Web/Models/DownloadSettingsModel.cs index 157efe434..c17a7f1d5 100644 --- a/NzbDrone.Web/Models/DownloadSettingsModel.cs +++ b/NzbDrone.Web/Models/DownloadSettingsModel.cs @@ -57,6 +57,7 @@ namespace NzbDrone.Web.Models [DataType(DataType.Text)] [DisplayName("SABnzbd API Key")] + [DisplayFormat(ConvertEmptyStringToNull = false)] public String SabApiKey { get; @@ -65,6 +66,7 @@ namespace NzbDrone.Web.Models [DataType(DataType.Text)] [DisplayName("SABnzbd Username")] + [DisplayFormat(ConvertEmptyStringToNull = false)] public String SabUsername { get; @@ -73,6 +75,7 @@ namespace NzbDrone.Web.Models [DataType(DataType.Text)] [DisplayName("SABnzbd Password")] + [DisplayFormat(ConvertEmptyStringToNull = false)] public String SabPassword { get; @@ -80,6 +83,7 @@ namespace NzbDrone.Web.Models } [DataType(DataType.Text)] + [DisplayFormat(ConvertEmptyStringToNull = false)] [DisplayName("SABnzbd Category")] public String SabCategory { @@ -88,7 +92,6 @@ namespace NzbDrone.Web.Models } [Required(ErrorMessage = "Please select a valid priority")] - [DataType(DataType.Text)] [DisplayName("SABnzbd Priority")] public SabnzbdPriorityType SabPriority { diff --git a/NzbDrone.Web/Models/IndexerSettingsModel.cs b/NzbDrone.Web/Models/IndexerSettingsModel.cs index 6db99f55a..487fb8d05 100644 --- a/NzbDrone.Web/Models/IndexerSettingsModel.cs +++ b/NzbDrone.Web/Models/IndexerSettingsModel.cs @@ -12,6 +12,7 @@ namespace NzbDrone.Web.Models { [DataType(DataType.Text)] [DisplayName("NZBMatrix Username")] + [DisplayFormat(ConvertEmptyStringToNull = false)] public String NzbMatrixUsername { get; @@ -20,6 +21,7 @@ namespace NzbDrone.Web.Models [DataType(DataType.Text)] [DisplayName("NZBMatrix API Key")] + [DisplayFormat(ConvertEmptyStringToNull = false)] public String NzbMatrixApiKey { get; @@ -28,6 +30,7 @@ namespace NzbDrone.Web.Models [DataType(DataType.Text)] [DisplayName("NZBs.Org UID")] + [DisplayFormat(ConvertEmptyStringToNull = false)] public String NzbsOrgUId { get; @@ -36,6 +39,7 @@ namespace NzbDrone.Web.Models [DataType(DataType.Text)] [DisplayName("NZBs.Org Hash")] + [DisplayFormat(ConvertEmptyStringToNull = false)] public String NzbsOrgHash { get; @@ -44,6 +48,7 @@ namespace NzbDrone.Web.Models [DataType(DataType.Text)] [DisplayName("NZBsRus UID")] + [DisplayFormat(ConvertEmptyStringToNull = false)] public String NzbsrusUId { get; @@ -52,6 +57,7 @@ namespace NzbDrone.Web.Models [DataType(DataType.Text)] [DisplayName("NZBsRus Hash")] + [DisplayFormat(ConvertEmptyStringToNull = false)] public String NzbsrusHash { get; diff --git a/NzbDrone.Web/Models/SettingsModels.cs b/NzbDrone.Web/Models/SettingsModels.cs index 5dcaabe42..b773ecfc2 100644 --- a/NzbDrone.Web/Models/SettingsModels.cs +++ b/NzbDrone.Web/Models/SettingsModels.cs @@ -11,8 +11,8 @@ namespace NzbDrone.Web.Models public class SettingsModel { - #region General Settings [DataType(DataType.Text)] + [Required(ErrorMessage = "Please enter a valid TV path")] [DisplayName("TV Folder")] public String TvFolder { @@ -27,159 +27,5 @@ namespace NzbDrone.Web.Models get; set; } - - #endregion - - //#region Indexer Settings - - //[DataType(DataType.Text)] - //[DisplayName("NZBMatrix Username")] - //public String NzbMatrixUsername - //{ - // get; - // set; - //} - - //[DataType(DataType.Text)] - //[DisplayName("NZBMatrix API Key")] - //public String NzbMatrixApiKey - //{ - // get; - // set; - //} - - //[DataType(DataType.Text)] - //[DisplayName("NZBs.Org UID")] - //public String NzbsOrgUId - //{ - // get; - // set; - //} - - //[DataType(DataType.Text)] - //[DisplayName("NZBs.Org Hash")] - //public String NzbsOrgHash - //{ - // get; - // set; - //} - - //[DataType(DataType.Text)] - //[DisplayName("NZBsRus UID")] - //public String NzbsrusUId - //{ - // get; - // set; - //} - - //[DataType(DataType.Text)] - //[DisplayName("NZBsRus Hash")] - //public String NzbsrusHash - //{ - // get; - // set; - //} - - //public List Indexers - //{ - // get; - // set; - //} - //#endregion - - //#region Download Settings - - ////Sync Frequency - ////Download Propers? - ////Retention - ////SAB Host/IP - ////SAB Port - ////SAB APIKey - ////SAB Username - ////SAB Password - ////SAB Category - ////SAB Priority - - //[DataType(DataType.Text)] - //[DisplayName("Sync Frequency")] - //public int SyncFrequency - //{ - // get; - // set; - //} - - //[DisplayName("Download Propers")] - //public bool DownloadPropers - //{ - // get; - // set; - //} - - //[DataType(DataType.Text)] - //[DisplayName("Retention")] - //public int Retention - //{ - // get; - // set; - //} - - //[DataType(DataType.Text)] - //[DisplayName("SABnzbd Host")] - //public String SabHost - //{ - // get; - // set; - //} - - //[DataType(DataType.Text)] - //[DisplayName("SABnzbd Port")] - //public int SabPort - //{ - // get; - // set; - //} - - //[DataType(DataType.Text)] - //[DisplayName("SABnzbd API Key")] - //public String SabApiKey - //{ - // get; - // set; - //} - - //[DataType(DataType.Text)] - //[DisplayName("SABnzbd Username")] - //public String SabUsername - //{ - // get; - // set; - //} - - //[DataType(DataType.Text)] - //[DisplayName("SABnzbd Password")] - //public String SabPassword - //{ - // get; - // set; - //} - - //[DataType(DataType.Text)] - //[DisplayName("SABnzbd Category")] - //public String SabCategory - //{ - // get; - // set; - //} - - //[DataType(DataType.Text)] - //[DisplayName("SABnzbd Priority")] - //public SabnzbdPriorityType SabPriority - //{ - // get; - // set; - //} - - //#endregion } - } diff --git a/NzbDrone.Web/Views/Settings/Index.aspx b/NzbDrone.Web/Views/Settings/Index.aspx index b28d9c51f..a7e8d1997 100644 --- a/NzbDrone.Web/Views/Settings/Index.aspx +++ b/NzbDrone.Web/Views/Settings/Index.aspx @@ -10,5 +10,7 @@ + + <% Html.RenderPartial(ViewData["viewName"].ToString()); %>