Test buttons for XBMC

New: Added buttons to test XBMC configuration
pull/19/head
Mark McDowall 12 years ago
parent d070401f20
commit cacd86b4ef

@ -31,6 +31,11 @@ namespace NzbDrone.Core.Providers
_eventClientProvider = eventClientProvider; _eventClientProvider = eventClientProvider;
} }
public XbmcProvider()
{
}
public virtual void Notify(string header, string message) public virtual void Notify(string header, string message)
{ {
//Always use EventServer, until Json has real support for it //Always use EventServer, until Json has real support for it
@ -41,11 +46,6 @@ namespace NzbDrone.Core.Providers
} }
} }
public XbmcProvider()
{
}
public virtual void Update(Series series) public virtual void Update(Series series)
{ {
//Use Json for Eden/Nightly or depricated HTTP for 10.x (Dharma) to get the proper path //Use Json for Eden/Nightly or depricated HTTP for 10.x (Dharma) to get the proper path
@ -376,6 +376,26 @@ namespace NzbDrone.Core.Providers
return false; return false;
} }
public virtual void TestNotification(string hosts)
{
foreach (var host in hosts.Split(','))
{
Logger.Trace("Sending Test Notifcation to XBMC Host: {0}", host);
_eventClientProvider.SendNotification("Test Notification", "Success! Notifications are setup correctly", IconType.Jpeg, "NzbDrone.jpg", GetHostWithoutPort(host));
}
}
public virtual void TestJsonApi(string hosts, string username, string password)
{
foreach (var host in hosts.Split(','))
{
Logger.Trace("Sending Test Notifcation to XBMC Host: {0}", host);
var version = GetJsonVersion(host, username, password);
if (version == 0)
throw new Exception("Failed to get JSON version in test");
}
}
private string GetHostWithoutPort(string address) private string GetHostWithoutPort(string address)
{ {
return address.Split(':')[0]; return address.Split(':')[0];

@ -18,11 +18,13 @@ namespace NzbDrone.Web.Controllers
private readonly GrowlProvider _growlProvider; private readonly GrowlProvider _growlProvider;
private readonly SeasonProvider _seasonProvider; private readonly SeasonProvider _seasonProvider;
private readonly ProwlProvider _prowlProvider; private readonly ProwlProvider _prowlProvider;
private readonly XbmcProvider _xbmcProvider;
public CommandController(JobProvider jobProvider, SabProvider sabProvider, public CommandController(JobProvider jobProvider, SabProvider sabProvider,
SmtpProvider smtpProvider, TwitterProvider twitterProvider, SmtpProvider smtpProvider, TwitterProvider twitterProvider,
EpisodeProvider episodeProvider, GrowlProvider growlProvider, EpisodeProvider episodeProvider, GrowlProvider growlProvider,
SeasonProvider seasonProvider, ProwlProvider prowlProvider) SeasonProvider seasonProvider, ProwlProvider prowlProvider,
XbmcProvider xbmcProvider)
{ {
_jobProvider = jobProvider; _jobProvider = jobProvider;
_sabProvider = sabProvider; _sabProvider = sabProvider;
@ -32,6 +34,7 @@ namespace NzbDrone.Web.Controllers
_growlProvider = growlProvider; _growlProvider = growlProvider;
_seasonProvider = seasonProvider; _seasonProvider = seasonProvider;
_prowlProvider = prowlProvider; _prowlProvider = prowlProvider;
_xbmcProvider = xbmcProvider;
} }
public JsonResult RssSync() public JsonResult RssSync()
@ -164,5 +167,33 @@ namespace NzbDrone.Web.Controllers
return JsonNotificationResult.Info("Success!", "SABnzbd settings have been verified successfully! Version: " + version); return JsonNotificationResult.Info("Success!", "SABnzbd settings have been verified successfully! Version: " + version);
} }
public JsonResult TestXbmcNotification(string hosts)
{
try
{
_xbmcProvider.TestNotification(hosts);
return JsonNotificationResult.Info("Success!", "Test Notification Sent Successfully");
}
catch(Exception)
{
}
return JsonNotificationResult.Oops("Failed to send test notification, please review your settings.");
}
public JsonResult TestXbmcJsonApi(string hosts, string username, string password)
{
try
{
_xbmcProvider.TestJsonApi(hosts, username, password);
return JsonNotificationResult.Info("Success!", "Successfully tested JSON API");
}
catch (Exception)
{
}
return JsonNotificationResult.Oops("Failed to test JSON API, please review your settings.");
}
} }
} }

@ -9,7 +9,8 @@ $('#MultiEpisodeStyle').live('change', function () { createExamples(); });
var testProwlUrl = '../Command/TestProwl'; var testProwlUrl = '../Command/TestProwl';
var testSabUrl = '../Command/TestSabnzbd'; var testSabUrl = '../Command/TestSabnzbd';
var testEmailUrl = '../Command/TestEmail'; var testEmailUrl = '../Command/TestEmail';
var testXbmcNotificationUrl = '../Command/TestXbmcNotification';
var testXbmcJsonApiUrl = '../Command/TestXbmcJsonApi';
function createExamples() { function createExamples() {
createSingleEpisodeExample(); createSingleEpisodeExample();
@ -200,10 +201,7 @@ function testSmtpSettings() {
password: password, password: password,
fromAddress: fromAddress, fromAddress: fromAddress,
toAddresses: toAddresses toAddresses: toAddresses
}), })
error: function (req, status, error) {
alert("Sorry! We could send a test email at this time. " + error);
}
}); });
return false; return false;
@ -222,11 +220,34 @@ function registerGrowl() {
data: jQuery.param({ data: jQuery.param({
host: host, host: host,
password: password password: password
}), })
error: function (req, status, error) {
alert("Sorry! We could send a test email at this time. " + error);
}
}); });
return false; return false;
} }
//XBMC
$(document).on('click', '#xbmc-test-notification', function() {
var hosts = $('#XbmcHosts').val();
$.ajax({
url: testXbmcNotificationUrl,
data: jQuery.param({ hosts: hosts })
});
});
$(document).on('click', '#xbmc-test-jsonapi', function () {
var hosts = $('#XbmcHosts').val();
var username = $('#XbmcUsername').val();
var password = $('#XbmcPassword').val();
$.ajax({
url: testXbmcJsonApiUrl,
data: jQuery.param({
hosts: hosts,
username: username,
password: password
})
});
});

@ -51,4 +51,14 @@
<span class="small">@Html.DescriptionFor(m => m.XbmcPassword)</span> <span class="small">@Html.DescriptionFor(m => m.XbmcPassword)</span>
</label> </label>
@Html.TextBoxFor(m => m.XbmcPassword, new { @class = "inputClass", type = "password" }) @Html.TextBoxFor(m => m.XbmcPassword, new { @class = "inputClass", type = "password" })
<label class="labelClass">Test Notification
<span class="small">Sends a test notification to your XBMC client(s)</span>
</label>
<input type="button" id="xbmc-test-notification" value="Test Notification" class="inputClass"/>
<label class="labelClass">Test JSON-API
<span class="small">Test that library updates will work</span>
</label>
<input type="button" id="xbmc-test-jsonapi" value="Test JSON-API" class="inputClass"/>
</div> </div>
Loading…
Cancel
Save