cleaned up scene mapping code.

This commit is contained in:
kay.one 2013-03-31 19:43:58 -07:00
commit 48880e4964
25 changed files with 222 additions and 319 deletions

View file

@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using NLog;
using Newtonsoft.Json;
using NzbDrone.Common;
using NzbDrone.Core.Configuration;
namespace NzbDrone.Core.DataAugmentation.DailySeries
{
public interface IDailySeriesDataProxy
{
IEnumerable<int> GetDailySeriesIds();
}
public class DailySeriesDataProxy : IDailySeriesDataProxy
{
private readonly HttpProvider _httpProvider;
private readonly IConfigService _configService;
private readonly Logger _logger;
public DailySeriesDataProxy(HttpProvider httpProvider, IConfigService configService, Logger logger)
{
_httpProvider = httpProvider;
_configService = configService;
_logger = logger;
}
public IEnumerable<int> GetDailySeriesIds()
{
try
{
var dailySeriesIds = _httpProvider.DownloadString(_configService.ServiceRootUrl + "/DailySeries/AllIds");
var seriesIds = JsonConvert.DeserializeObject<List<int>>(dailySeriesIds);
return seriesIds;
}
catch (Exception ex)
{
_logger.WarnException("Failed to get Daily Series", ex);
return new List<int>();
}
}
}
}

View file

@ -0,0 +1,31 @@
using NzbDrone.Core.Tv;
namespace NzbDrone.Core.DataAugmentation.DailySeries
{
public class DailySeriesService
{
private readonly IDailySeriesDataProxy _proxy;
private readonly ISeriesService _seriesService;
public DailySeriesService(IDailySeriesDataProxy proxy, ISeriesService seriesService)
{
_proxy = proxy;
_seriesService = seriesService;
}
public virtual void UpdateDailySeries()
{
var dailySeries = _proxy.GetDailySeriesIds();
foreach (var tvdbId in dailySeries)
{
var series = _seriesService.FindByTvdbId(tvdbId);
if (series != null)
{
_seriesService.SetSeriesType(series.Id, SeriesTypes.Daily);
}
}
}
}
}

View file

@ -0,0 +1,17 @@
using Newtonsoft.Json;
using NzbDrone.Core.Datastore;
namespace NzbDrone.Core.DataAugmentation.Scene
{
public class SceneMapping : ModelBase
{
public string CleanTitle { get; set; }
[JsonProperty("Title")]
public string SceneName { get; set; }
[JsonProperty("Id")]
public int TvdbId { get; set; }
public int SeasonNumber { get; set; }
}
}

View file

@ -0,0 +1,88 @@
using System;
using System.Linq;
using NLog;
using NzbDrone.Core.Lifecycle;
namespace NzbDrone.Core.DataAugmentation.Scene
{
public interface ISceneMappingService
{
void UpdateMappings();
string GetSceneName(int tvdbId, int seasonNumber = -1);
Nullable<int> GetTvDbId(string cleanName);
string GetCleanName(int tvdbId);
}
public class SceneMappingService : IInitializable, ISceneMappingService
{
private readonly ISceneMappingRepository _repository;
private readonly ISceneMappingProxy _sceneMappingProxy;
private readonly Logger _logger;
public SceneMappingService(ISceneMappingRepository repository, ISceneMappingProxy sceneMappingProxy, Logger logger)
{
_repository = repository;
_sceneMappingProxy = sceneMappingProxy;
_logger = logger;
}
public void UpdateMappings()
{
try
{
var mappings = _sceneMappingProxy.Fetch();
if (mappings.Any())
{
_repository.Purge();
_repository.InsertMany(mappings);
}
else
{
_logger.Warn("Received empty list of mapping. will not update.");
}
}
catch (Exception ex)
{
_logger.ErrorException("Failed to Update Scene Mappings:", ex);
}
}
public virtual string GetSceneName(int tvdbId, int seasonNumber = -1)
{
var mapping = _repository.FindByTvdbId(tvdbId);
if (mapping == null) return null;
return mapping.SceneName;
}
public virtual Nullable<Int32> GetTvDbId(string cleanName)
{
var mapping = _repository.FindByCleanTitle(cleanName);
if (mapping == null)
return null;
return mapping.TvdbId;
}
public virtual string GetCleanName(int tvdbId)
{
var mapping = _repository.FindByTvdbId(tvdbId);
if (mapping == null) return null;
return mapping.CleanTitle;
}
public void Init()
{
if (!_repository.HasItems())
{
UpdateMappings();
}
}
}
}

View file

@ -0,0 +1,30 @@
using System.Collections.Generic;
using Newtonsoft.Json;
using NzbDrone.Common;
using NzbDrone.Core.Configuration;
namespace NzbDrone.Core.DataAugmentation.Scene
{
public interface ISceneMappingProxy
{
List<SceneMapping> Fetch();
}
public class SceneMappingProxy : ISceneMappingProxy
{
private readonly HttpProvider _httpProvider;
private readonly IConfigService _configService;
public SceneMappingProxy(HttpProvider httpProvider, IConfigService configService)
{
_httpProvider = httpProvider;
_configService = configService;
}
public List<SceneMapping> Fetch()
{
var mappingsJson = _httpProvider.DownloadString(_configService.ServiceRootUrl + "/SceneMapping/Active");
return JsonConvert.DeserializeObject<List<SceneMapping>>(mappingsJson);
}
}
}

View file

@ -0,0 +1,30 @@
using System.Linq;
using NzbDrone.Core.Datastore;
namespace NzbDrone.Core.DataAugmentation.Scene
{
public interface ISceneMappingRepository : IBasicRepository<SceneMapping>
{
SceneMapping FindByTvdbId(int tvdbId);
SceneMapping FindByCleanTitle(string cleanTitle);
}
public class SceneMappingRepository : BasicRepository<SceneMapping>, ISceneMappingRepository
{
public SceneMappingRepository(IDatabase database)
: base(database)
{
}
public SceneMapping FindByTvdbId(int tvdbId)
{
return Query.SingleOrDefault(c => c.TvdbId == tvdbId);
}
public SceneMapping FindByCleanTitle(string cleanTitle)
{
return Query.SingleOrDefault(c => c.CleanTitle == cleanTitle);
}
}
}