diff --git a/NzbDrone.Core.Test/SeriesProviderTest.cs b/NzbDrone.Core.Test/SeriesProviderTest.cs index 6fe849e35f..1ffde78bf5 100644 --- a/NzbDrone.Core.Test/SeriesProviderTest.cs +++ b/NzbDrone.Core.Test/SeriesProviderTest.cs @@ -83,7 +83,7 @@ public void get_unmapped() var unmappedFolder = seriesController.GetUnmappedFolders(); //Assert - Assert.AreElementsEqualIgnoringOrder(MockLib.StandardSeries, unmappedFolder); + Assert.AreElementsEqualIgnoringOrder(MockLib.StandardSeries, unmappedFolder.Values); } diff --git a/NzbDrone.Core/Providers/ISeriesProvider.cs b/NzbDrone.Core/Providers/ISeriesProvider.cs index c7568e33aa..d625a0bcc8 100644 --- a/NzbDrone.Core/Providers/ISeriesProvider.cs +++ b/NzbDrone.Core/Providers/ISeriesProvider.cs @@ -21,7 +21,7 @@ public interface ISeriesProvider TvdbSeries MapPathToSeries(string path); void AddSeries(string path, TvdbSeries series); - List GetUnmappedFolders(); + Dictionary GetUnmappedFolders(); Series FindSeries(string cleanTitle); bool QualityWanted(int seriesId, QualityTypes quality); } diff --git a/NzbDrone.Core/Providers/SeriesProvider.cs b/NzbDrone.Core/Providers/SeriesProvider.cs index 361d0723b5..9c9c57cd19 100644 --- a/NzbDrone.Core/Providers/SeriesProvider.cs +++ b/NzbDrone.Core/Providers/SeriesProvider.cs @@ -58,19 +58,19 @@ public bool QualityWanted(int seriesId, QualityTypes quality) return _sonioRepo.Exists(s => s.SeriesId == seriesId && (QualityTypes)s.Quality == quality); } - public List GetUnmappedFolders() + public Dictionary GetUnmappedFolders() { Logger.Debug("Generating list of unmapped folders"); if (String.IsNullOrEmpty(_config.SeriesRoot)) throw new InvalidOperationException("TV Series folder is not configured yet."); - var results = new List(); + var results = new Dictionary(); foreach (string seriesFolder in _diskProvider.GetDirectories(_config.SeriesRoot)) { var cleanPath = Parser.NormalizePath(new DirectoryInfo(seriesFolder).FullName); if (!_sonioRepo.Exists(s => s.Path == cleanPath)) { - results.Add(cleanPath); + results.Add(Guid.NewGuid(), cleanPath); } } diff --git a/NzbDrone.Core/Providers/SyncProvider.cs b/NzbDrone.Core/Providers/SyncProvider.cs index 99e518a2ee..d41831a3d2 100644 --- a/NzbDrone.Core/Providers/SyncProvider.cs +++ b/NzbDrone.Core/Providers/SyncProvider.cs @@ -63,7 +63,7 @@ public void SyncUnmappedFolders() var unmappedFolders = _seriesProvider.GetUnmappedFolders(); _seriesSyncNotification.ProgressMax = unmappedFolders.Count; - foreach (string seriesFolder in unmappedFolders) + foreach (string seriesFolder in unmappedFolders.Values) { try { diff --git a/NzbDrone.Web/Controllers/SeriesController.cs b/NzbDrone.Web/Controllers/SeriesController.cs index 54f6b81f63..23c0b17133 100644 --- a/NzbDrone.Web/Controllers/SeriesController.cs +++ b/NzbDrone.Web/Controllers/SeriesController.cs @@ -51,7 +51,7 @@ public ActionResult RssSync() public ActionResult UnMapped() { - return View(_seriesProvider.GetUnmappedFolders()); + return View(_seriesProvider.GetUnmappedFolders().Select(c => new MappingModel() { Id = 1, Path = c.Value }).ToList()); } @@ -156,6 +156,14 @@ private IEnumerable GetData(GridCommand command) // // GET: /Series/Details/5 + [AcceptVerbs(HttpVerbs.Post)] + [GridAction] + public ActionResult _SaveAjaxEditing(string id) + { + return RedirectToAction("UnMapped"); + } + + public ActionResult Details(int seriesId) { return View(_seriesProvider.GetSeries(seriesId)); diff --git a/NzbDrone.Web/NzbDrone.Web.csproj b/NzbDrone.Web/NzbDrone.Web.csproj index c4264af8de..9edf18717f 100644 --- a/NzbDrone.Web/NzbDrone.Web.csproj +++ b/NzbDrone.Web/NzbDrone.Web.csproj @@ -84,6 +84,7 @@ + diff --git a/NzbDrone.Web/Views/Series/Unmapped.aspx b/NzbDrone.Web/Views/Series/Unmapped.aspx index 08d3143cbc..8255d74703 100644 --- a/NzbDrone.Web/Views/Series/Unmapped.aspx +++ b/NzbDrone.Web/Views/Series/Unmapped.aspx @@ -1,4 +1,4 @@ -<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage>" %> +<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage>" %> <%@ Import Namespace="Telerik.Web.Mvc.UI" %> @@ -10,13 +10,19 @@

Please Re-sync your folders. If the problem persists try renaming your folders to something more similar to the name of series they contain.

- <% - - - Html.Telerik().Grid(Model) - .Name("Grid") - .Columns(columns => columns.Bound(o => o).Title("Folder")) - .Sortable(sort => sort.OrderBy(order => order.Add(o => o).Ascending()).Enabled(false)) - .Render(); + <%= Html.Telerik().Grid(Model) + .Name("Grid") + .DataKeys(dataKeys => dataKeys.Add(c => c.Id)) + .DataBinding(dataBinding => dataBinding + //Server binding + .Ajax() + .Select("UnMapped", "Series") + .Update("Update", "Home") + ) + .Columns(columns => + { + columns.Bound(c => c.Path); + columns.Command(commands => commands.Edit()); + }) %>