예제 #1
0
        protected override void InitTvCore()
        {
            _tvServiceThread = new TvServiceThread(Environment.GetCommandLineArgs()[0]);
            if (!InitializeGentle())
            {
                DeInit();
                return;
            }

            FixupServer();

            Start();
            if (!_tvServiceThread.InitializedEvent.WaitOne(MAX_WAIT_MS))
            {
                ServiceRegistration.Get <ILogger>().Error("SlimTvService: Failed to start TV service thread within {0} seconds.", MAX_WAIT_MS / 1000);
            }

            InitializeTVE();
            // Handle events from TvEngine
            if (!RegisterEvents())
            {
                ServiceRegistration.Get <ILogger>().Error("SlimTvService: Failed to register events. This happens only if startup failed. Stopping plugin now.");
                DeInit();
                return;
            }

            _ = CleanUpRecordingsAsync();
        }
예제 #2
0
        private void InitAsync(object sender, ElapsedEventArgs args)
        {
            ISQLDatabase database;

            lock (_timer)
            {
                database = ServiceRegistration.Get <ISQLDatabase>(false);
                if (database == null)
                {
                    return;
                }
                _timer.Close();
                _timer.Dispose();
            }

            using (var transaction = database.BeginTransaction())
                if (transaction.Connection.GetCloneFactory(TVDB_NAME, out _dbProviderFactory, out _cloneConnection))
                {
                    EntityFrameworkHelper.AssureKnownFactory(_dbProviderFactory);
                    // Register our factory to create new cloned connections
                    ObjectContextManager.SetDbConnectionCreator(ClonedConnectionFactory);
                }

            IntegrationProviderHelper.Register(@"Plugins\SlimTv.Service", @"Plugins\SlimTv.Service\castle.config");
            _tvServiceThread = new TvServiceThread(Environment.GetCommandLineArgs()[0]);
            _tvServiceThread.Start();
        }
예제 #3
0
 public bool DeInit()
 {
     if (_tvServiceThread != null)
     {
         _tvServiceThread.Stop(MAX_WAIT_MS);
         _tvServiceThread = null;
     }
     return(true);
 }
예제 #4
0
        public bool DeInit()
        {
#if TVE3
            Stop(MAX_WAIT_MS);
#else
            if (_tvServiceThread != null)
            {
                _tvServiceThread.Stop(MAX_WAIT_MS);
                _tvServiceThread = null;
            }
#endif
            return(true);
        }
예제 #5
0
 public void Stop(int maxWaitMsecs)
 {
     if (_serviceThread != null && _serviceThread.IsAlive)
     {
         bool joined = _serviceThread.Join(maxWaitMsecs);
         if (!joined)
         {
             _serviceThread.Abort();
             _serviceThread.Join();
         }
         _tvServiceThread = null;
     }
 }
예제 #6
0
 public override bool DeInit()
 {
     if (_serviceThread != null && _serviceThread.IsAlive)
     {
         bool joined = _serviceThread.Join(MAX_WAIT_MS);
         if (!joined)
         {
             _serviceThread.Abort();
             _serviceThread.Join();
         }
         _tvServiceThread = null;
     }
     return(true);
 }
예제 #7
0
        public override bool DeInit()
        {
            var thread = _serviceThread;

            _tvServiceThread = null;
            if (thread != null && thread.IsAlive)
            {
                try
                {
                    bool joined = thread.Join(MAX_WAIT_MS);
                    if (!joined)
                    {
                        thread.Abort();
                        thread.Join();
                    }
                }
                catch (Exception ex)
                {
                    ServiceRegistration.Get <ILogger>().Error("Failed to deinit TVEngine", ex);
                }
            }
            return(true);
        }
예제 #8
0
    protected override void InitTvCore()
    {
      _tvServiceThread = new TvServiceThread(Environment.GetCommandLineArgs()[0]);
      _tvServiceThread.Start();
      if (!_tvServiceThread.InitializedEvent.WaitOne(MAX_WAIT_MS))
      {
        ServiceRegistration.Get<ILogger>().Error("SlimTvService: Failed to start TV service thread within {0} seconds.", MAX_WAIT_MS / 1000);
      }

      // Handle events from TvEngine
      if (!RegisterEvents())
      {
        ServiceRegistration.Get<ILogger>().Error("SlimTvService: Failed to register events. This happens only if startup failed. Stopping plugin now.");
        DeInit();
      }
    }
예제 #9
0
 public override bool DeInit()
 {
   if (_tvServiceThread != null)
   {
     _tvServiceThread.Stop(MAX_WAIT_MS);
     _tvServiceThread = null;
   }
   return true;
 }
예제 #10
0
    private void InitAsync(object sender, ElapsedEventArgs args)
    {
      ISQLDatabase database;
      lock (_timer)
      {
        database = ServiceRegistration.Get<ISQLDatabase>(false);
        if (database == null)
          return;
        _timer.Close();
        _timer.Dispose();
      }

      using (var transaction = database.BeginTransaction())
        if (transaction.Connection.GetCloneFactory(TVDB_NAME, out _dbProviderFactory, out _cloneConnection))
        {
          EntityFrameworkHelper.AssureKnownFactory(_dbProviderFactory);
          // Register our factory to create new cloned connections
          ObjectContextManager.SetDbConnectionCreator(ClonedConnectionFactory);
        }

      IntegrationProviderHelper.Register(@"Plugins\SlimTv.Service", @"Plugins\SlimTv.Service\castle.config");
      _tvServiceThread = new TvServiceThread(Environment.GetCommandLineArgs()[0]);
      _tvServiceThread.Start();
    }
예제 #11
0
        private void InitAsync(object sender, ElapsedEventArgs args)
        {
            ISQLDatabase database;

            lock (_timer)
            {
                database = ServiceRegistration.Get <ISQLDatabase>(false);
                if (database == null)
                {
                    return;
                }
                _timer.Close();
                _timer.Dispose();
            }

            using (var transaction = database.BeginTransaction())
            {
                // Prepare TV database if required.
                PrepareTvDatabase(transaction);

#if !TVE3
                if (transaction.Connection.GetCloneFactory(TVDB_NAME, out _dbProviderFactory, out _cloneConnection))
                {
                    EntityFrameworkHelper.AssureKnownFactory(_dbProviderFactory);
                    // Register our factory to create new cloned connections
                    ObjectContextManager.SetDbConnectionCreator(ClonedConnectionFactory);
                }
#endif
            }

            // TODO: Get this from project config somehow
#if TVE3
            string servicename = "SlimTv.Service3";
#else
            string servicename = "SlimTv.Service35";
#endif

            IntegrationProviderHelper.Register(@"Plugins\" + servicename, "Plugins\\" + servicename + "\\castle.config");
            var pm = GlobalServiceProvider.Instance.Get <IIntegrationProvider>().PathManager;

            // Needs to be done after the IntegrationProvider is registered, so the TVCORE folder is defined.
            PrepareProgramData();

            _tvServiceThread = new TvServiceThread(Environment.GetCommandLineArgs()[0]);
#if TVE3
            InitializeGentle();
            Start();
#else
            _tvServiceThread.Start();
#endif
            if (!_tvServiceThread.InitializedEvent.WaitOne(MAX_WAIT_MS))
            {
                ServiceRegistration.Get <ILogger>().Error("SlimTvService: Failed to start TV service thread within {0} seconds.", MAX_WAIT_MS / 1000);
            }

#if TVE3
            InitializeTVE();
#endif
            // Handle events from TvEngine
            if (!RegisterEvents())
            {
                ServiceRegistration.Get <ILogger>().Error("SlimTvService: Failed to register events. This happens only if startup failed. Stopping plugin now.");
                DeInit();
            }
        }