AddExisting clears check/hides rows once submitted. Bi-winning

AddNew, currently unable to submit. Bi-polar
pull/2/head
Mark McDowall 14 years ago
parent c3425f493f
commit 5a8842e3db

@ -12,5 +12,6 @@ namespace NzbDrone.Core.Providers
void Add(RootDir rootDir);
void Remove(int rootDirId);
void Update(RootDir rootDir);
RootDir GetRootDir(int rootDirId);
}
}

@ -38,6 +38,11 @@ namespace NzbDrone.Core.Providers
_sonioRepo.Update(rootDir);
}
public RootDir GetRootDir(int rootDirId)
{
return _sonioRepo.Single<RootDir>(rootDirId);
}
#endregion
}
}

@ -27,6 +27,7 @@ namespace NzbDrone.Web.Controllers
private readonly IMediaFileProvider _mediaFileProvider;
private readonly IRenameProvider _renameProvider;
private readonly IRootDirProvider _rootDirProvider;
private readonly ITvDbProvider _tvDbProvider;
//
// GET: /Series/
@ -34,7 +35,8 @@ namespace NzbDrone.Web.Controllers
public SeriesController(ISyncProvider syncProvider, ISeriesProvider seriesProvider,
IEpisodeProvider episodeProvider, IRssSyncProvider rssSyncProvider,
IQualityProvider qualityProvider, IMediaFileProvider mediaFileProvider,
IRenameProvider renameProvider, IRootDirProvider rootDirProvider)
IRenameProvider renameProvider, IRootDirProvider rootDirProvider,
ITvDbProvider tvDbProvider)
{
_seriesProvider = seriesProvider;
_episodeProvider = episodeProvider;
@ -44,6 +46,7 @@ namespace NzbDrone.Web.Controllers
_mediaFileProvider = mediaFileProvider;
_renameProvider = renameProvider;
_rootDirProvider = rootDirProvider;
_tvDbProvider = tvDbProvider;
}
public ActionResult Index()
@ -62,6 +65,11 @@ namespace NzbDrone.Web.Controllers
return View();
}
public ActionResult AddNew()
{
return View();
}
public ActionResult RssSync()
{
_rssSyncProvider.Begin();
@ -140,7 +148,6 @@ namespace NzbDrone.Web.Controllers
public ActionResult SyncSelectedSeries(List<String> checkedRecords)
{
var unmappedList = new List<SeriesMappingModel>();
foreach (var checkedRecord in checkedRecords)
@ -156,8 +163,34 @@ namespace NzbDrone.Web.Controllers
unmappedList.Add(new SeriesMappingModel{Path = path, TvDbId = tvDbId});
}
_syncProvider.BeginSyncUnmappedFolders(unmappedList);
return Content("Sync Started for Selected Series");
if(_syncProvider.BeginSyncUnmappedFolders(unmappedList))
return Content("Sync Started for Selected Series");
return Content("Sync already in progress, please wait for it to complete before retrying.");
}
public ActionResult SearchForSeries(string seriesName)
{
var model = new List<SeriesSearchResultModel>();
//Get Results from TvDb and convert them to something we can use.
foreach (var tvdbSearchResult in _tvDbProvider.SearchSeries(seriesName))
{
model.Add(new SeriesSearchResultModel
{
TvDbId = tvdbSearchResult.Id,
TvDbName = tvdbSearchResult.SeriesName,
FirstAired = tvdbSearchResult.FirstAired
});
}
ViewData["RootDirs"] = _rootDirProvider.GetAll();
ViewData["DirSep"] = Path.DirectorySeparatorChar;
//model.Add(new SeriesSearchResultModel{ TvDbId = 12345, TvDbName = "30 Rock", FirstAired = DateTime.Today });
//model.Add(new SeriesSearchResultModel { TvDbId = 65432, TvDbName = "The Office (US)", FirstAired = DateTime.Today.AddDays(-100) });
return PartialView("SeriesSearchResults", model);
}
private IEnumerable<Episode> GetData(GridCommand command)
@ -221,9 +254,6 @@ namespace NzbDrone.Web.Controllers
return data;*/
}
//
// GET: /Series/Details/5
[AcceptVerbs(HttpVerbs.Post)]
[GridAction]
public ActionResult _SaveAjaxEditing(string id)

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace NzbDrone.Web.Models
{
public class SeriesSearchResultModel
{
public int TvDbId { get; set; }
public string TvDbName { get; set; }
public DateTime FirstAired { get; set; }
}
}

@ -99,6 +99,7 @@
<Compile Include="Models\EpisodeModel.cs" />
<Compile Include="Models\NotificationSettingsModel.cs" />
<Compile Include="Models\QualityModel.cs" />
<Compile Include="Models\SeriesSearchResultModel.cs" />
<Compile Include="Models\SettingsModels.cs" />
<Compile Include="Models\TestModel.cs" />
<Compile Include="Ninject.Web.Mvc\ControllerMissingBindingResolver.cs" />
@ -282,6 +283,7 @@
<Content Include="Views\Series\Edit.aspx" />
<Content Include="Views\Series\EpisodeDetail.ascx" />
<Content Include="Views\Series\index.aspx" />
<Content Include="Views\Series\SeriesSearchResults.ascx" />
<Content Include="Views\Series\SubMenu.ascx" />
<Content Include="Views\Series\Unmapped.aspx" />
<Content Include="Views\Series\Add.aspx" />

@ -10,13 +10,8 @@
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
//Add New
//Add Existing
//Ask user for existing TV Root Folder...
//Get list of unmapped folders and allow the user to check off the ones they want to add...
//
<%: Html.ActionLink("Add New Series", "AddNew", "Series") %>
<br />
<%: Html.ActionLink("Add Existing Series", "AddExisting", "Series") %>
</asp:Content>

@ -4,7 +4,7 @@
<%@ Import Namespace="NzbDrone.Web.Models" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Add Existing Series
Add Existing
</asp:Content>
<asp:Content ID="Menu" ContentPlaceHolderID="ActionMenu" runat="server">
<%
@ -33,10 +33,6 @@
</script>
//Get AJAX listing of unmapped directories
//When getting unmapped, also do a quick lookup on TVDB to see which series we would map this to... Don't do the mapping though...
//ITvDbProvider.GetSeries(string title);
<%
Html.Telerik().Grid<AddExistingSeriesModel>().Name("Unmapped_Series_Folders")
.TableHtmlAttributes(new { id = "UnmappedSeriesGrid" })
@ -85,7 +81,6 @@
else {
$('#mastercheckbox').attr('checked', false);
}
});
//Sync for selected series
@ -100,15 +95,14 @@
$("#result").load('<%=Url.Action("SyncSelectedSeries", "Series") %>', {
checkedRecords: $checkedRecords.map(function () { return jQuery.param({ path: this.name, tvdbid: this.value }) })
}
//this.window.location = '<%= Url.Action("Index", "Series") %>';
);
var grid = $('#UnmappedSeriesGrid').data('tGrid');
});
//Hide the series that we just tried to sync up (uncheck them too, otherwise they will be re-sync'd if we sync again)
$checkedRecords.each(function () {
var id = "#row_" + this.value;
$(this).attr("checked", false);
$(id).hide();
});
}
</script>
</asp:Content>

@ -12,13 +12,12 @@
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
//Add a new series
<%= Html.Label("Enter a Series Name") %>
<%= Html.TextBox("new_series_name", new { id="new_series_id" }) %>
<%= Html.TextBox("new_series_name", String.Empty, new { id="new_series_id" }) %>
//Browse Button??
//Auto-Complete?
<p>
<button class="t.button" onclick="searchSeries ()">Search</button>
</p>
//Search Button - Perform AJAX search for this Series on TVDB
@ -28,5 +27,28 @@
Add, ask user to choose where to save the show in (used when sorting) then add the show... Possibly ask user to choose Quality Profile
<div id="result"></div>
<script type="text/javascript" language="javascript">
function searchSeries() {
var seriesSearch = $('#new_series_id');
// if ($seriesSearch.length < 1) {
// alert("Enter a valid name to search for");
// return;
// }
//Setup a function to handle the results... Or return a partial...
$("#result").load('<%=Url.Action("SearchForSeries", "Series") %>', {
seriesName: seriesSearch.val()
}
//this.window.location = '<%= Url.Action("Index", "Series") %>';
);
}
</script>
</asp:Content>

@ -0,0 +1,68 @@
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<NzbDrone.Web.Models.SeriesSearchResultModel>>" %>
<%@ Import Namespace="NzbDrone.Core.Repository" %>
<div id="searchResults">
<fieldset>
<legend>Search Results</legend>
<% foreach (var result in Model)
{ %>
<%: Html.RadioButton("selectedSeries", result.TvDbId, new { @class="searchRadio examplePart", name = result.TvDbName }) %>
<%: Html.Label(result.TvDbName) %> (<%: Html.Label(result.FirstAired.ToString()) %>)
<br />
<% } %>
</fieldset>
</div>
<div id="RootDirectories" style="display:none">
<fieldset>
<legend>Root TV Folders</legend>
<% foreach (var dir in (List<RootDir>)ViewData["RootDirs"])
{ %>
<%: Html.RadioButton("selectedRootDir", dir.RootDirId, dir.Default, new { @class="dirList examplePart", name = dir.Path }) %>
<%: Html.Label(dir.Path) %>
<% if (dir.Default) { %>* <% } %>
<br />
<% } %>
</fieldset>
<div id="example"></div>
<button class="t.button" onclick="addSeries ()">Add New Series</button>
</div>
<div id="tester"></div>
<script type="text/javascript">
$(".searchRadio").live("change", function () {
var checked = $(this).attr('checked');
if (checked) {
$('#tester').text(this.value);
document.getElementById('RootDirectories').style.display = 'inline';
}
});
function addSeries() {
//Get the selected tvdbid + selected root folder
//jquery bit below doesn't want to work...
var checkedSeries = $('input:radio[name=selectedSeries]:checked').val();
//$('input:radio[name=selectedSeries]:checked').val();
$('#tester').text(checkedSeries.value);
//$('#tester').text("Hello_jhasdajsd");
}
// $(".examplePart").live("change", function() {
// var dir = $('.selectedRootDir:checked');
// var show = $('.selectedSeries:checked');
// var sep = "\\";
// var str = "Example: " + dir.name + sep + show.name;
// $('#example').text(str);
//
// });
</script>

@ -4,9 +4,8 @@
<% Html.Telerik().Menu().Name("telerikGrid").Items(items =>
{
items.Add().Text("View Unmapped Folders").Action("Unmapped", "Series");
items.Add().Text("Add Series").Action("Add", "Series");
items.Add().Text("Start RSS Sync").Action("RssSync", "Series");
items.Add().Text("Rename All").Action("RenameAll", "Series");
items.Add().Text("Add Series").Action("Add", "Series");
}).Render();
%>

@ -30,6 +30,9 @@
<fieldset>
<legend>General</legend>
//Browse Button??
//Auto-Complete?
<div style="padding-top: 10px;">
<div style="padding-left: 7px; margin-bottom: 5px;">
<a id="addItem" style="text-decoration:none;" href="<%: Url.Action("AddRootDir", "Settings") %>">

Loading…
Cancel
Save