using System ;
using System.Linq ;
using DeskMetrics ;
using NLog ;
using Ninject ;
using NzbDrone.Common ;
using NzbDrone.Core.Providers.Core ;
namespace NzbDrone.Core.Providers
{
public class AnalyticsProvider
{
private static readonly Logger logger = LogManager . GetCurrentClassLogger ( ) ;
private readonly IDeskMetricsClient _deskMetricsClient ;
private readonly ConfigProvider _configProvider ;
public const string DESKMETRICS_TEST_ID = "4ea8d347a14ad71442000002" ;
public const string DESKMETRICS_PRODUCTION_ID = "4f20b01ea14ad729b2000000" ;
[Inject]
public AnalyticsProvider ( IDeskMetricsClient deskMetricsClient , ConfigProvider configProvider )
{
_deskMetricsClient = deskMetricsClient ;
_configProvider = configProvider ;
}
public AnalyticsProvider ( )
{
}
public virtual void Checkpoint ( )
{
try
{
//Don't report anything unless working from master branch.
if ( ! IsOnMasterBranch ( ) )
return ;
if ( EnvironmentProvider . RegisterNewInstall )
{
_deskMetricsClient . RegisterInstall ( ) ;
EnvironmentProvider . RegisterNewInstall = false ;
}
if ( _deskMetricsClient . Started )
{
_deskMetricsClient . Stop ( ) ;
}
_deskMetricsClient . Start ( ) ;
}
catch ( Exception e )
{
if ( ! EnvironmentProvider . IsProduction )
throw ;
logger . WarnException ( "Error while sending analytics data." , e ) ;
}
}
private bool IsOnMasterBranch ( )
{
var defaultUpdateUrl = UpdateProvider . DEFAULT_UPDATE_URL . Trim ( ) . Trim ( '/' ) ;
var currentUpdateUrl = _configProvider . UpdateUrl . Trim ( ) . Trim ( '/' ) ;
return String . Equals ( defaultUpdateUrl , currentUpdateUrl , StringComparison . InvariantCultureIgnoreCase ) ;
}
}
}