2011-04-01 06:36:34 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Web.Mvc;
|
2011-05-28 07:16:16 +00:00
|
|
|
|
using System.Linq;
|
2011-05-31 06:13:46 +00:00
|
|
|
|
using NLog;
|
2011-05-28 07:16:16 +00:00
|
|
|
|
using NzbDrone.Core.Helpers;
|
2011-04-01 06:36:34 +00:00
|
|
|
|
using NzbDrone.Core.Providers;
|
2011-04-04 03:50:12 +00:00
|
|
|
|
using NzbDrone.Core.Providers.Core;
|
2011-04-20 07:44:13 +00:00
|
|
|
|
using NzbDrone.Core.Providers.Jobs;
|
2011-05-31 06:13:46 +00:00
|
|
|
|
using NzbDrone.Core.Repository;
|
2011-04-01 06:36:34 +00:00
|
|
|
|
using NzbDrone.Web.Models;
|
|
|
|
|
|
|
|
|
|
namespace NzbDrone.Web.Controllers
|
|
|
|
|
{
|
|
|
|
|
public class AddSeriesController : Controller
|
|
|
|
|
{
|
2011-05-31 06:13:46 +00:00
|
|
|
|
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
2011-04-10 01:34:36 +00:00
|
|
|
|
private readonly ConfigProvider _configProvider;
|
2011-04-08 04:11:45 +00:00
|
|
|
|
private readonly QualityProvider _qualityProvider;
|
2011-04-10 02:44:01 +00:00
|
|
|
|
private readonly RootDirProvider _rootFolderProvider;
|
2011-04-08 23:55:23 +00:00
|
|
|
|
private readonly SeriesProvider _seriesProvider;
|
2011-04-20 07:44:13 +00:00
|
|
|
|
private readonly JobProvider _jobProvider;
|
2011-04-10 02:44:01 +00:00
|
|
|
|
private readonly TvDbProvider _tvDbProvider;
|
2011-05-28 07:16:16 +00:00
|
|
|
|
private readonly DiskProvider _diskProvider;
|
2011-04-01 06:36:34 +00:00
|
|
|
|
|
2011-06-14 01:23:04 +00:00
|
|
|
|
public AddSeriesController(RootDirProvider rootFolderProvider,
|
2011-04-10 02:44:01 +00:00
|
|
|
|
ConfigProvider configProvider,
|
|
|
|
|
QualityProvider qualityProvider, TvDbProvider tvDbProvider,
|
2011-05-28 07:16:16 +00:00
|
|
|
|
SeriesProvider seriesProvider, JobProvider jobProvider,
|
|
|
|
|
DiskProvider diskProvider)
|
2011-04-01 06:36:34 +00:00
|
|
|
|
{
|
2011-06-14 01:23:04 +00:00
|
|
|
|
|
2011-04-01 06:36:34 +00:00
|
|
|
|
_rootFolderProvider = rootFolderProvider;
|
|
|
|
|
_configProvider = configProvider;
|
|
|
|
|
_qualityProvider = qualityProvider;
|
|
|
|
|
_tvDbProvider = tvDbProvider;
|
|
|
|
|
_seriesProvider = seriesProvider;
|
2011-04-20 07:44:13 +00:00
|
|
|
|
_jobProvider = jobProvider;
|
2011-05-28 07:16:16 +00:00
|
|
|
|
_diskProvider = diskProvider;
|
2011-04-01 06:36:34 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[HttpPost]
|
|
|
|
|
public JsonResult ScanNewSeries()
|
|
|
|
|
{
|
2011-05-21 00:23:49 +00:00
|
|
|
|
_jobProvider.QueueJob(typeof(ImportNewSeriesJob));
|
2011-04-01 06:36:34 +00:00
|
|
|
|
return new JsonResult();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ActionResult AddNew()
|
|
|
|
|
{
|
2011-07-08 03:27:11 +00:00
|
|
|
|
ViewData["RootDirs"] = _rootFolderProvider.GetAll().Select(c => c.Path).OrderBy(e => e).ToList();
|
2011-04-01 06:36:34 +00:00
|
|
|
|
|
2011-05-28 07:16:16 +00:00
|
|
|
|
var defaultQuality = _configProvider.DefaultQualityProfile;
|
2011-07-08 05:41:08 +00:00
|
|
|
|
var qualityProfiles = _qualityProvider.All();
|
2011-04-01 06:36:34 +00:00
|
|
|
|
|
2011-07-08 03:27:11 +00:00
|
|
|
|
ViewData["qualityList"] = qualityProfiles;
|
|
|
|
|
|
2011-05-28 07:16:16 +00:00
|
|
|
|
ViewData["quality"] = new SelectList(
|
|
|
|
|
qualityProfiles,
|
|
|
|
|
"QualityProfileId",
|
|
|
|
|
"Name",
|
|
|
|
|
defaultQuality);
|
2011-04-01 06:36:34 +00:00
|
|
|
|
|
2011-05-28 07:16:16 +00:00
|
|
|
|
return View();
|
2011-04-01 06:36:34 +00:00
|
|
|
|
}
|
|
|
|
|
|
2011-05-31 20:50:19 +00:00
|
|
|
|
public ActionResult Index()
|
2011-04-01 06:36:34 +00:00
|
|
|
|
{
|
2011-07-27 22:59:48 +00:00
|
|
|
|
return View();
|
2011-05-31 20:50:19 +00:00
|
|
|
|
}
|
|
|
|
|
|
2011-06-30 06:15:06 +00:00
|
|
|
|
|
2011-07-27 22:59:48 +00:00
|
|
|
|
public ActionResult ExistingSeries()
|
2011-05-31 20:50:19 +00:00
|
|
|
|
{
|
2011-07-27 22:59:48 +00:00
|
|
|
|
var result = new ExistingSeriesModel();
|
2011-05-31 20:50:19 +00:00
|
|
|
|
|
|
|
|
|
var unmappedList = new List<String>();
|
|
|
|
|
|
2011-07-27 22:59:48 +00:00
|
|
|
|
foreach (var folder in _rootFolderProvider.GetAll())
|
2011-04-01 06:36:34 +00:00
|
|
|
|
{
|
2011-05-20 03:47:07 +00:00
|
|
|
|
unmappedList.AddRange(_rootFolderProvider.GetUnmappedFolders(folder.Path));
|
2011-04-01 06:36:34 +00:00
|
|
|
|
}
|
|
|
|
|
|
2011-07-27 22:59:48 +00:00
|
|
|
|
result.ExistingSeries = new List<Tuple<string, string>>();
|
2011-04-01 06:36:34 +00:00
|
|
|
|
|
2011-07-27 22:59:48 +00:00
|
|
|
|
foreach (var folder in unmappedList)
|
|
|
|
|
{
|
|
|
|
|
var foldername = new DirectoryInfo(folder).Name;
|
|
|
|
|
var tvdbResult = _tvDbProvider.SearchSeries(foldername).FirstOrDefault();
|
2011-04-01 06:36:34 +00:00
|
|
|
|
|
2011-07-27 22:59:48 +00:00
|
|
|
|
var title = String.Empty;
|
|
|
|
|
if (tvdbResult != null)
|
|
|
|
|
{
|
|
|
|
|
title = tvdbResult.SeriesName;
|
|
|
|
|
}
|
2011-04-04 01:31:27 +00:00
|
|
|
|
|
2011-07-27 22:59:48 +00:00
|
|
|
|
result.ExistingSeries.Add(new Tuple<string, string>(folder, title));
|
|
|
|
|
}
|
2011-04-05 02:48:46 +00:00
|
|
|
|
|
2011-07-27 22:59:48 +00:00
|
|
|
|
var defaultQuality = Convert.ToInt32(_configProvider.DefaultQualityProfile);
|
|
|
|
|
result.Quality = new SelectList(_qualityProvider.All(), "QualityProfileId", "Name", defaultQuality);
|
2011-04-04 01:31:27 +00:00
|
|
|
|
|
2011-07-27 22:59:48 +00:00
|
|
|
|
return View(result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[HttpPost]
|
|
|
|
|
public JsonResult AddNewSeries(string path, string seriesName, int qualityProfileId)
|
|
|
|
|
{
|
|
|
|
|
path = Path.Combine(path, MediaFileProvider.CleanFilename(seriesName));
|
|
|
|
|
return AddExistingSeries(path, seriesName, qualityProfileId);
|
2011-04-01 06:36:34 +00:00
|
|
|
|
}
|
|
|
|
|
|
2011-05-28 07:16:16 +00:00
|
|
|
|
[HttpPost]
|
2011-07-27 22:59:48 +00:00
|
|
|
|
public JsonResult AddExistingSeries(string path, string seriesName, int qualityProfileId)
|
2011-05-28 07:16:16 +00:00
|
|
|
|
{
|
2011-05-31 06:13:46 +00:00
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//Create the folder for the new series and then Add it
|
|
|
|
|
_diskProvider.CreateDirectory(path);
|
2011-05-28 07:16:16 +00:00
|
|
|
|
|
2011-07-27 22:59:48 +00:00
|
|
|
|
var series = _tvDbProvider.SearchSeries(seriesName).Where(s => s.SeriesName == seriesName).Single();
|
|
|
|
|
|
|
|
|
|
_seriesProvider.AddSeries(path, series.Id, qualityProfileId);
|
2011-05-31 06:13:46 +00:00
|
|
|
|
ScanNewSeries();
|
2011-06-14 01:23:04 +00:00
|
|
|
|
return new JsonResult { Data = "ok" };
|
2011-05-31 06:13:46 +00:00
|
|
|
|
}
|
|
|
|
|
|
2011-06-19 20:43:47 +00:00
|
|
|
|
catch (Exception)
|
2011-05-31 06:13:46 +00:00
|
|
|
|
{
|
|
|
|
|
return new JsonResult { Data = "failed" };
|
|
|
|
|
}
|
2011-05-28 07:16:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
2011-04-01 06:36:34 +00:00
|
|
|
|
public JsonResult AddSeries(string path, int seriesId, int qualityProfileId)
|
|
|
|
|
{
|
|
|
|
|
//Get TVDB Series Name
|
|
|
|
|
//Create new folder for series
|
|
|
|
|
//Add the new series to the Database
|
|
|
|
|
|
2011-04-10 02:44:01 +00:00
|
|
|
|
_seriesProvider.AddSeries(
|
2011-04-25 02:30:40 +00:00
|
|
|
|
path.Replace('|', Path.DirectorySeparatorChar).Replace('^', Path.VolumeSeparatorChar).Replace('`', '\''), seriesId,
|
2011-04-10 02:44:01 +00:00
|
|
|
|
qualityProfileId);
|
2011-04-01 06:36:34 +00:00
|
|
|
|
ScanNewSeries();
|
2011-04-20 07:44:13 +00:00
|
|
|
|
return new JsonResult { Data = "ok" };
|
2011-04-01 06:36:34 +00:00
|
|
|
|
}
|
|
|
|
|
|
2011-05-31 06:13:46 +00:00
|
|
|
|
|
2011-06-09 01:45:06 +00:00
|
|
|
|
//Root Directory
|
2011-05-31 06:13:46 +00:00
|
|
|
|
[HttpPost]
|
2011-06-30 06:15:06 +00:00
|
|
|
|
public JsonResult SaveRootDir(string path)
|
2011-05-31 06:13:46 +00:00
|
|
|
|
{
|
2011-06-16 02:32:55 +00:00
|
|
|
|
if (String.IsNullOrWhiteSpace(path))
|
|
|
|
|
return new JsonResult { Data = "failed" };
|
|
|
|
|
|
2011-05-31 06:13:46 +00:00
|
|
|
|
try
|
|
|
|
|
{
|
2011-06-30 06:15:06 +00:00
|
|
|
|
_rootFolderProvider.Add(new RootDir { Path = path });
|
2011-06-16 02:32:55 +00:00
|
|
|
|
|
2011-05-31 06:13:46 +00:00
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
Logger.Debug("Failed to save Root Dir");
|
|
|
|
|
Logger.DebugException(ex.Message, ex);
|
|
|
|
|
|
|
|
|
|
return new JsonResult { Data = "failed" };
|
|
|
|
|
}
|
|
|
|
|
|
2011-06-30 06:15:06 +00:00
|
|
|
|
return new JsonResult { };
|
2011-05-31 06:13:46 +00:00
|
|
|
|
}
|
|
|
|
|
|
2011-07-27 22:59:48 +00:00
|
|
|
|
[HttpGet]
|
|
|
|
|
public JsonResult LookupSeries(string q)
|
2011-05-31 06:13:46 +00:00
|
|
|
|
{
|
2011-06-16 02:32:55 +00:00
|
|
|
|
|
2011-07-27 22:59:48 +00:00
|
|
|
|
var dataVal = _tvDbProvider.SearchSeries(q);
|
2011-05-31 06:13:46 +00:00
|
|
|
|
|
2011-07-27 22:59:48 +00:00
|
|
|
|
return Json(dataVal.Select(c => new KeyValuePair<int, string>(c.Id, c.SeriesName)), JsonRequestBehavior.AllowGet);
|
2011-05-31 06:13:46 +00:00
|
|
|
|
}
|
|
|
|
|
|
2011-07-01 07:23:07 +00:00
|
|
|
|
public ActionResult RootList()
|
2011-06-30 06:15:06 +00:00
|
|
|
|
{
|
2011-07-01 07:52:44 +00:00
|
|
|
|
IEnumerable<String> rootDir = _rootFolderProvider.GetAll().Select(c => c.Path).OrderBy(e => e);
|
2011-07-01 07:23:07 +00:00
|
|
|
|
return PartialView("RootList", rootDir);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ActionResult RootDir()
|
|
|
|
|
{
|
|
|
|
|
return PartialView("RootDir");
|
2011-06-30 06:15:06 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public JsonResult DeleteRootDir(string path)
|
2011-05-31 06:13:46 +00:00
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
2011-06-30 06:15:06 +00:00
|
|
|
|
var id = _rootFolderProvider.GetAll().Where(c => c.Path == path).First().Id;
|
|
|
|
|
_rootFolderProvider.Remove(id);
|
2011-05-31 06:13:46 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
catch (Exception)
|
|
|
|
|
{
|
|
|
|
|
return new JsonResult { Data = "failed" };
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return new JsonResult { Data = "ok" };
|
|
|
|
|
}
|
2011-04-01 06:36:34 +00:00
|
|
|
|
}
|
2011-04-10 02:44:01 +00:00
|
|
|
|
}
|