added settings view to mvc project
This commit is contained in:
parent
941d516e42
commit
d7bae9135c
|
@ -9,6 +9,7 @@ namespace NzbDrone.Core.Controllers
|
||||||
{
|
{
|
||||||
public class DbConfigController : IConfigController
|
public class DbConfigController : IConfigController
|
||||||
{
|
{
|
||||||
|
private const string _seriesroots = "SeriesRoots";
|
||||||
private readonly IDiskController _diskController;
|
private readonly IDiskController _diskController;
|
||||||
private readonly ILog _logger;
|
private readonly ILog _logger;
|
||||||
private readonly IRepository _sonicRepo;
|
private readonly IRepository _sonicRepo;
|
||||||
|
@ -21,20 +22,27 @@ namespace NzbDrone.Core.Controllers
|
||||||
_sonicRepo = dataRepository;
|
_sonicRepo = dataRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IConfigController Members
|
|
||||||
|
|
||||||
public List<String> GetTvRoots()
|
|
||||||
{
|
|
||||||
return (GetValue("tvRoot").Trim(';').Split(';').Where(path => _diskController.Exists(path))).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
private string GetValue(string key)
|
private string GetValue(string key)
|
||||||
{
|
{
|
||||||
return GetValue(key, String.Empty, false);
|
return GetValue(key, String.Empty, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String SeriesRoot
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return GetValue(_seriesroots);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetValue(_seriesroots, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private string GetValue(string key, object defaultValue, bool makePermanent)
|
private string GetValue(string key, object defaultValue, bool makePermanent)
|
||||||
{
|
{
|
||||||
string value;
|
string value;
|
||||||
|
|
|
@ -1,65 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Configuration;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using log4net;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.Controllers
|
|
||||||
{
|
|
||||||
public class FileConfigController : IConfigController
|
|
||||||
{
|
|
||||||
private readonly Configuration _config = ConfigurationManager.OpenExeConfiguration(Path.Combine(Main.AppPath, @"NzbDrone.exe"));
|
|
||||||
private readonly IDiskController _diskController;
|
|
||||||
private readonly ILog _logger;
|
|
||||||
|
|
||||||
public FileConfigController(ILog logger, IDiskController diskController)
|
|
||||||
{
|
|
||||||
_logger = logger;
|
|
||||||
_diskController = diskController;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region IConfigController Members
|
|
||||||
|
|
||||||
public List<String> GetTvRoots()
|
|
||||||
{
|
|
||||||
return (GetValue("tvRoot").Trim(';').Split(';').Where(path => _diskController.Exists(path))).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
private string GetValue(string key)
|
|
||||||
{
|
|
||||||
return GetValue(key, String.Empty, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private string GetValue(string key, object defaultValue, bool makePermanent)
|
|
||||||
{
|
|
||||||
string value;
|
|
||||||
|
|
||||||
if (_config.AppSettings.Settings[key] != null)
|
|
||||||
{
|
|
||||||
value = _config.AppSettings.Settings[key].Value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_logger.WarnFormat("Unable to find config key '{0}' defaultValue:'{1}'", key, defaultValue);
|
|
||||||
if (makePermanent)
|
|
||||||
{
|
|
||||||
SetValue(key, defaultValue.ToString());
|
|
||||||
}
|
|
||||||
value = defaultValue.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SetValue(string key, object value)
|
|
||||||
{
|
|
||||||
_logger.DebugFormat("Writing Setting to file. Key:'{0}' Value:'{1}'", key, value);
|
|
||||||
_config.AppSettings.Settings.Remove(key);
|
|
||||||
_config.AppSettings.Settings.Add(key, value.ToString());
|
|
||||||
_config.Save();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,9 +1,15 @@
|
||||||
using System.Collections.Generic;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Controllers
|
namespace NzbDrone.Core.Controllers
|
||||||
{
|
{
|
||||||
public interface IConfigController
|
public interface IConfigController
|
||||||
{
|
{
|
||||||
List<string> GetTvRoots();
|
String SeriesRoot
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
|
||||||
|
set;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -34,9 +34,8 @@ namespace NzbDrone.Core.Controllers
|
||||||
|
|
||||||
public void SyncSeriesWithDisk()
|
public void SyncSeriesWithDisk()
|
||||||
{
|
{
|
||||||
foreach (string root in _config.GetTvRoots())
|
|
||||||
{
|
foreach (string seriesFolder in _diskController.GetDirectories(_config.SeriesRoot))
|
||||||
foreach (string seriesFolder in _diskController.GetDirectories(root))
|
|
||||||
{
|
{
|
||||||
var dirInfo = new DirectoryInfo(seriesFolder);
|
var dirInfo = new DirectoryInfo(seriesFolder);
|
||||||
if (!_sonioRepo.Exists<Series>(s => s.Path == _diskController.CleanPath(dirInfo.FullName)))
|
if (!_sonioRepo.Exists<Series>(s => s.Path == _diskController.CleanPath(dirInfo.FullName)))
|
||||||
|
@ -45,7 +44,7 @@ namespace NzbDrone.Core.Controllers
|
||||||
AddShow(seriesFolder);
|
AddShow(seriesFolder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
@ -140,7 +140,6 @@
|
||||||
<Compile Include="Repository\Series.cs" />
|
<Compile Include="Repository\Series.cs" />
|
||||||
<Compile Include="Main.cs" />
|
<Compile Include="Main.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="Controllers\FileConfigController.cs" />
|
|
||||||
<Compile Include="Controllers\DiskController.cs" />
|
<Compile Include="Controllers\DiskController.cs" />
|
||||||
<Compile Include="Controllers\IConfigController.cs" />
|
<Compile Include="Controllers\IConfigController.cs" />
|
||||||
<Compile Include="Controllers\IDiskController.cs" />
|
<Compile Include="Controllers\IDiskController.cs" />
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -3,6 +3,8 @@ using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
|
using NzbDrone.Core.Controllers;
|
||||||
|
using NzbDrone.Web.Models;
|
||||||
|
|
||||||
namespace NzbDrone.Web.Controllers
|
namespace NzbDrone.Web.Controllers
|
||||||
{
|
{
|
||||||
|
@ -10,10 +12,27 @@ namespace NzbDrone.Web.Controllers
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// GET: /Settings/
|
// GET: /Settings/
|
||||||
|
private IConfigController _configController;
|
||||||
|
|
||||||
|
public SettingsController(IConfigController configController)
|
||||||
|
{
|
||||||
|
_configController = configController;
|
||||||
|
}
|
||||||
|
|
||||||
public ActionResult Index()
|
public ActionResult Index()
|
||||||
{
|
{
|
||||||
return View();
|
return View(new SettingsModel() { RootPath = _configController.SeriesRoot });
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public ActionResult Save(SettingsModel model)
|
||||||
|
{
|
||||||
|
if (ModelState.IsValid)
|
||||||
|
{
|
||||||
|
_configController.SeriesRoot = model.RootPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
return RedirectToAction("index");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,65 +11,13 @@ using System.Web.Security;
|
||||||
namespace NzbDrone.Web.Models
|
namespace NzbDrone.Web.Models
|
||||||
{
|
{
|
||||||
|
|
||||||
#region Models
|
public class SettingsModel
|
||||||
[PropertiesMustMatch("NewPassword", "ConfirmPassword", ErrorMessage = "The new password and confirmation password do not match.")]
|
|
||||||
public class ChangePasswordModel1
|
|
||||||
{
|
{
|
||||||
[Required]
|
public String RootPath
|
||||||
[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 LogOnModel1
|
|
||||||
{
|
{
|
||||||
[Required]
|
get;
|
||||||
[DisplayName("User name")]
|
set;
|
||||||
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 RegisterModel1
|
|
||||||
{
|
|
||||||
[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
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,6 +82,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="Global.asax" />
|
<Content Include="Global.asax" />
|
||||||
<Content Include="Views\Series\index.aspx" />
|
<Content Include="Views\Series\index.aspx" />
|
||||||
|
<Content Include="Views\Settings\Index.aspx" />
|
||||||
<Content Include="Web.config">
|
<Content Include="Web.config">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Content>
|
</Content>
|
||||||
|
@ -117,7 +118,6 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Folder Include="App_Data\" />
|
<Folder Include="App_Data\" />
|
||||||
<Folder Include="Views\Settings\" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\NzbDrone.Core\NzbDrone.Core.csproj">
|
<ProjectReference Include="..\NzbDrone.Core\NzbDrone.Core.csproj">
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<NzbDrone.Web.Models.SettingsModel>" %>
|
||||||
|
<%@ Import Namespace="NzbDrone.Web.Controllers" %>
|
||||||
|
|
||||||
|
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
|
||||||
|
Index
|
||||||
|
</asp:Content>
|
||||||
|
<asp:Content ID="General" ContentPlaceHolderID="MainContent" runat="server">
|
||||||
|
<h2>
|
||||||
|
Settings</h2>
|
||||||
|
<% using (Html.BeginForm())
|
||||||
|
{ %>
|
||||||
|
<div>
|
||||||
|
<fieldset>
|
||||||
|
<legend>General</legend>
|
||||||
|
<div class="editor-label">
|
||||||
|
<%: Html.LabelFor(m => m.RootPath) %>
|
||||||
|
</div>
|
||||||
|
<div class="editor-field">
|
||||||
|
<%: Html.TextBoxFor(m => m.RootPath) %>
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
<input type="submit" value="Save" />
|
||||||
|
</p>
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
<% } %>
|
||||||
|
</asp:Content>
|
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
<ul id="menu">
|
<ul id="menu">
|
||||||
<li><%: Html.ActionLink("Home", "Index", "Home")%></li>
|
<li><%: Html.ActionLink("Home", "Index", "Home")%></li>
|
||||||
<li><%: Html.ActionLink("About", "About", "Home")%></li>
|
<li><%: Html.ActionLink("Settings", "Index", "Settings")%></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue