@ -1,9 +1,12 @@
using System ;
using System.Collections.Generic ;
using System.IO ;
using System.Linq ;
using System.Net ;
using System.Text ;
using System.Xml.Linq ;
using NLog ;
using NzbDrone.Core.Helpers ;
namespace NzbDrone.Core.Providers
{
@ -26,27 +29,54 @@ namespace NzbDrone.Core.Providers
{
//Get time in seconds and convert to ms
var time = Convert . ToInt32 ( _configProvider . GetValue ( "XbmcDisplayTime" , "3" , true ) ) * 1000 ;
var command = String . Format ( "ExecBuiltIn(Notification({0},{1},{2}))" , header , message , time ) ;
foreach ( var host in _configProvider . GetValue ( "XbmcHosts" , "localhost:80" , true ) . Split ( ',' ) )
if ( Convert . ToBoolean ( _configProvider . GetValue ( "XbmcNotificationImage" , false , true ) ) )
{
Logger . Trace ( "Sending Notifcation to XBMC Host: {0}" , host ) ;
//Todo: Get the actual port that NzbDrone is running on...
var serverInfo = String . Format ( "http://{0}:{1}" , ServerHelper . GetServerHostname ( ) , "8989" ) ;
var imageUrl = String . Format ( "{0}/Content/XbmcNotification.png" , serverInfo ) ;
command = String . Format ( "ExecBuiltIn(Notification({0},{1},{2}, {3}))" , header , message , time , imageUrl ) ;
}
throw new NotImplementedException ( ) ;
foreach ( var host in _configProvider . GetValue ( "XbmcHosts" , "localhost:80" , true ) . Split ( ',' ) )
{
Logger . Trace ( "Sending Notifcation to XBMC Host: {0}" , host ) ;
SendCommand ( host , command ) ;
}
}
public void Update ( int seriesId )
{
throw new NotImplementedException ( ) ;
foreach ( var host in _configProvider . GetValue ( "XbmcHosts" , "localhost:80" , true ) . Split ( ',' ) )
{
Logger . Trace ( "Sending Update DB Request to XBMC Host: {0}" , host ) ;
var xbmcSeriesPath = GetXbmcSeriesPath ( host , seriesId ) ;
//If the path is not found & the user wants to update the entire library, do it now.
if ( String . IsNullOrEmpty ( xbmcSeriesPath ) & & Convert . ToBoolean ( _configProvider . GetValue ( "XbmcFullUpdate" , false , true ) ) )
{
//Update the entire library
Logger . Trace ( "Series [{0}] doesn't exist on XBMC host: {1}, Updating Entire Library" , seriesId , host ) ;
SendCommand ( host , "ExecBuiltIn(UpdateLibrary(video))" ) ;
return ;
}
var command = String . Format ( "ExecBuiltIn(UpdateLibrary(video,{0}))" , xbmcSeriesPath ) ;
SendCommand ( host , command ) ;
}
}
public void Clean ( )
{
throw new NotImplementedException ( ) ;
foreach ( var host in _configProvider . GetValue ( "XbmcHosts" , "localhost:80" , true ) . Split ( ',' ) )
{
Logger . Trace ( "Sending DB Clean Request to XBMC Host: {0}" , host ) ;
var command = String . Format ( "ExecBuiltIn(CleanLibrary(database) )" ) ;
SendCommand ( host , command ) ;
}
}
# endregion
@ -75,5 +105,34 @@ namespace NzbDrone.Core.Providers
return string . Empty ;
}
private string GetXbmcSeriesPath ( string host , int seriesId )
{
var query = String . Format ( "select path.strPath from path, tvshow, tvshowlinkpath where tvshow.c12 = {0} and tvshowlinkpath.idShow = tvshow.idShow and tvshowlinkpath.idPath = path.idPath" , seriesId ) ;
var command = String . Format ( "QueryVideoDatabase({0})" , query ) ;
var setResponseCommand = "SetResponseFormat(webheader;false;webfooter;false;header;<xml>;footer;</xml>;opentag;<tag>;closetag;</tag>;closefinaltag;false)" ;
var resetResponseCommand = "SetResponseFormat()" ;
SendCommand ( host , setResponseCommand ) ;
var response = SendCommand ( host , command ) ;
SendCommand ( host , resetResponseCommand ) ;
if ( String . IsNullOrEmpty ( response ) )
return String . Empty ;
var xDoc = XDocument . Load ( new StringReader ( response ) ) ;
var xml = ( from x in xDoc . Descendants ( "xml" ) select x ) . FirstOrDefault ( ) ;
if ( xml = = null )
return String . Empty ;
var field = xml . Descendants ( "field" ) . FirstOrDefault ( ) ;
if ( field = = null )
return String . Empty ;
return field . Value ;
}
}
}