/
SceneMappingProvider.cs
103 lines (81 loc) · 3.17 KB
/
SceneMappingProvider.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
using System;
using System.Collections.Generic;
using System.IO;
using NLog;
using Newtonsoft.Json;
using NzbDrone.Common;
using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Repository;
using PetaPoco;
namespace NzbDrone.Core.Providers
{
public class SceneMappingProvider
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
private readonly IDatabase _database;
private readonly HttpProvider _httpProvider;
private readonly ConfigProvider _configProvider;
public SceneMappingProvider(IDatabase database, HttpProvider httpProvider, ConfigProvider configProvider)
{
_database = database;
_httpProvider = httpProvider;
_configProvider = configProvider;
}
public SceneMappingProvider()
{
}
public virtual bool UpdateMappings()
{
try
{
var mappingsJson = _httpProvider.DownloadString(_configProvider.ServiceRootUrl + "/SceneMapping/Active");
var mappings = JsonConvert.DeserializeObject<List<SceneMapping>>(mappingsJson);
Logger.Debug("Deleting all existing Scene Mappings.");
_database.Delete<SceneMapping>(String.Empty);
Logger.Debug("Adding Scene Mappings");
_database.InsertMany(mappings);
}
catch (Exception ex)
{
Logger.InfoException("Failed to Update Scene Mappings:", ex);
return false;
}
return true;
}
public virtual string GetSceneName(int seriesId)
{
UpdateIfEmpty();
var item = _database.FirstOrDefault<SceneMapping>("WHERE SeriesId = @0", seriesId);
if (item == null)
return null;
return item.SceneName;
}
public virtual Nullable<Int32> GetSeriesId(string cleanName)
{
UpdateIfEmpty();
var item = _database.SingleOrDefault<SceneMapping>("WHERE CleanTitle = @0", cleanName);
if (item == null)
return null;
return item.SeriesId;
}
public void UpdateIfEmpty()
{
var count = _database.ExecuteScalar<int>("SELECT COUNT(*) FROM SceneMappings");
if (count == 0)
UpdateMappings();
}
public virtual bool SubmitMapping(int id, string postTitle)
{
Logger.Trace("Parsing example post");
var episodeParseResult = Parser.ParseTitle(postTitle);
var cleanTitle = episodeParseResult.CleanTitle;
var title = episodeParseResult.SeriesTitle.Replace('.', ' ');
Logger.Trace("Example post parsed. CleanTitle: {0}, Title: {1}", cleanTitle, title);
var newMapping = String.Format("/SceneMapping/AddPending?cleanTitle={0}&id={1}&title={2}", cleanTitle, id, title);
var response = _httpProvider.DownloadString(_configProvider.ServiceRootUrl + newMapping);
if (JsonConvert.DeserializeObject<String>(response).Equals("Ok"))
return true;
return false;
}
}
}