private void EPGThreadFunction() { // ShouldRun still returns true until LastRun is updated, // shutdown is disallowed until then TvBusinessLayer layer = new TvBusinessLayer(); EPGWakeupConfig config = new EPGWakeupConfig((layer.GetSetting("EPGWakeupConfig", String.Empty).Value)); Log.Info("PowerScheduler: EPG schedule {0}:{1} is due: {2}:{3}", config.Hour, config.Minutes, DateTime.Now.Hour, DateTime.Now.Minute); // start external command RunExternalCommand("epg"); // try a forced start of EPG grabber if not already started if (!_controller.EpgGrabberEnabled) { _controller.EpgGrabberEnabled = true; } // Fire the EPGScheduleDue event for EPG grabber plugins if (_epgScheduleDue != null) { lock (_epgScheduleDue) { if (_epgScheduleDue != null) { _epgScheduleDue(); } } } // sleep 10 Seconds to give the grabbers time to kick off their threads, // so that they disallow shutdown // without this sleep the PS could be tempted to standby (wakeup/standby race condition) Thread.Sleep(10000); // Update last schedule run status config.LastRun = DateTime.Now; Setting s = layer.GetSetting("EPGWakeupConfig", String.Empty); s.Value = config.SerializeAsString(); s.Persist(); _epgThreadRunning = false; }
private void _scheduleTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { TvBusinessLayer layer = new TvBusinessLayer(); bool scheduleEnabled = Convert.ToBoolean(layer.GetSetting("webepgScheduleEnabled", "true").Value); if (scheduleEnabled) { Setting configSetting = layer.GetSetting("webepgSchedule", String.Empty); EPGWakeupConfig config = new EPGWakeupConfig(configSetting.Value); if (ShouldRunNow()) { Log.Info("WebEPGImporter: WebEPG schedule {0}:{1} is due: {2}:{3}", config.Hour, config.Minutes, DateTime.Now.Hour, DateTime.Now.Minute); StartImport(null); config.LastRun = DateTime.Now; configSetting.Value = config.SerializeAsString(); configSetting.Persist(); } } }
private void OnPowerSchedulerEvent(PowerSchedulerEventArgs args) { switch (args.EventType) { case PowerSchedulerEventType.Started: case PowerSchedulerEventType.Elapsed: IPowerScheduler ps = GlobalServiceProvider.Instance.Get <IPowerScheduler>(); if (ps == null) { return; } PowerSetting setting; bool enabled; using (Settings reader = new MPSettings()) { EPGWakeupConfig config = new EPGWakeupConfig(reader.GetValueAsString("psclientplugin", "RebootConfig", String.Empty)); if (args.EventType == PowerSchedulerEventType.Started) { // Get time of last reboot if (config.LastRun == DateTime.MinValue) { config.LastRun = DateTime.Now; } else { config.LastRun = DateTime.Now.AddMilliseconds(-Environment.TickCount); } // Save last reboot status reader.SetValue("psclientplugin", "RebootConfig", config.SerializeAsString()); Log.Debug("RebootHandler: Set time of last reboot: {0}", config.LastRun); } // Check if system should wakeup for reboot setting = ps.Settings.GetSetting("RebootWakeup"); enabled = reader.GetValueAsBool("psclientplugin", "RebootWakeup", false); if (setting.Get <bool>() != enabled) { setting.Set <bool>(enabled); if (enabled) { if (ps.IsRegistered(this as IWakeupHandler)) { ps.Unregister(this as IWakeupHandler); } ps.Register(this as IWakeupHandler); } else { ps.Unregister(this as IWakeupHandler); } Log.Debug("RebootHandler: Wakeup system for reboot: {0}", enabled ? "enabled" : "disabled"); } // Check if a reboot time is set setting = ps.Settings.GetSetting("RebootConfig"); if (!config.Equals(setting.Get <EPGWakeupConfig>())) { setting.Set <EPGWakeupConfig>(config); Log.Debug("RebootHandler: Reboot system at {0:00}:{1:00}", config.Hour, config.Minutes); if (config.Days != null) { String days = ""; foreach (EPGGrabDays day in config.Days) { if (days == "") { days = day.ToString(); } else { days = days + ", " + day.ToString(); } } Log.Debug("RebootHandler: Reboot system on: {0}", days); } } if (args.EventType == PowerSchedulerEventType.Elapsed) { // Check if reboot is due if (ShouldRunNow()) { // See if system is idle bool unattended, disAllowShutdown; String disAllowShutdownHandler, nextWakeupHandler; DateTime nextWakeupTime; // Reboot only if all other handlers allow standby ps.GetCurrentState(false, out unattended, out disAllowShutdown, out disAllowShutdownHandler, out nextWakeupTime, out nextWakeupHandler); if (!disAllowShutdown) { // Kick off reboot thread Log.Debug("RebootHandler: Reboot is due - reboot now"); Thread workerThread = new Thread(new ThreadStart(RebootThread)); workerThread.Name = "RebootHandler"; workerThread.IsBackground = true; workerThread.Priority = ThreadPriority.Lowest; workerThread.Start(); } else { Log.Debug("RebootHandler: Reboot is due - reboot when standby is allowed"); } } } break; } } }
public override void SaveSettings() { base.SaveSettings(); _configFile.Info.GrabDays = (int)nMaxGrab.Value; _configFile.Channels = new List <ChannelMap>(); _configFile.RadioChannels = new List <ChannelMap>(); foreach (ChannelMap channel in TvMappings.ChannelMapping.Values) { _configFile.Channels.Add(channel); } foreach (ChannelMap channel in RadioMappings.ChannelMapping.Values) { _configFile.RadioChannels.Add(channel); } Log.Info("WebEPG Config: Button: Save"); string confFile = _configFileDir + "\\WebEPG.xml"; FileInfo config = new FileInfo(confFile); if (config.Exists) { File.Delete(confFile.Replace(".xml", ".bak")); File.Move(confFile, confFile.Replace(".xml", ".bak")); } XmlSerializer s = new XmlSerializer(typeof(WebepgConfigFile)); TextWriter w = new StreamWriter(confFile); s.Serialize(w, _configFile); w.Close(); TvBusinessLayer layer = new TvBusinessLayer(); Setting setting = layer.GetSetting("webepgDestination", "db"); switch (DestinationComboBox.SelectedIndex) { case 0: setting.Value = "db"; break; case 1: setting.Value = "defxmltv"; break; case 2: setting.Value = "xmltv"; break; } setting.Persist(); setting = layer.GetSetting("webepgDestinationFolder"); setting.Value = textBoxFolder.Text; setting.Persist(); setting = layer.GetSetting("webepgDeleteBeforeImport", "true"); setting.Value = checkBoxDeleteBeforeImport.Checked ? "true" : "false"; setting.Persist(); setting = layer.GetSetting("webepgScheduleEnabled", "true"); setting.Value = ScheduleGrabCheckBox.Checked ? "true" : "false"; setting.Persist(); setting = layer.GetSetting("webepgSchedule", String.Empty); EPGWakeupConfig cfg = new EPGWakeupConfig(setting.Value); EPGWakeupConfig newcfg = new EPGWakeupConfig(); newcfg.Hour = cfg.Hour; newcfg.Minutes = cfg.Minutes; // newcfg.Days = cfg.Days; newcfg.LastRun = cfg.LastRun; string[] time = grabTimeTextBox.Text.Split(System.Globalization.DateTimeFormatInfo.CurrentInfo.TimeSeparator[0]); newcfg.Hour = Convert.ToInt32(time[0]); newcfg.Minutes = Convert.ToInt32(time[1]); CheckDay(newcfg, EPGGrabDays.Monday, MondayCheckBox.Checked); CheckDay(newcfg, EPGGrabDays.Tuesday, TuesdayCheckBox.Checked); CheckDay(newcfg, EPGGrabDays.Wednesday, WednesdayCheckBox.Checked); CheckDay(newcfg, EPGGrabDays.Thursday, ThursdayCheckBox.Checked); CheckDay(newcfg, EPGGrabDays.Friday, FridayCheckBox.Checked); CheckDay(newcfg, EPGGrabDays.Saturday, SaturdayCheckBox.Checked); CheckDay(newcfg, EPGGrabDays.Sunday, SundayCheckBox.Checked); if (!cfg.Equals(newcfg)) { setting.Value = newcfg.SerializeAsString(); setting.Persist(); } }
private void OnPowerSchedulerEvent(PowerSchedulerEventArgs args) { switch (args.EventType) { case PowerSchedulerEventType.Started: case PowerSchedulerEventType.Elapsed: IPowerScheduler ps = GlobalServiceProvider.Instance.Get<IPowerScheduler>(); if (ps == null) return; TvBusinessLayer layer = new TvBusinessLayer(); PowerSetting setting; bool enabled; EPGWakeupConfig config = new EPGWakeupConfig((layer.GetSetting("PowerSchedulerRebootConfig", String.Empty).Value)); if (args.EventType == PowerSchedulerEventType.Started) { // Get time of last reboot if (config.LastRun == DateTime.MinValue) config.LastRun = DateTime.Now; else config.LastRun = DateTime.Now.AddMilliseconds(-Environment.TickCount); // Save last reboot status Setting s = layer.GetSetting("PowerSchedulerRebootConfig", String.Empty); s.Value = config.SerializeAsString(); s.Persist(); Log.Debug("RebootHandler: Set time of last reboot: {0}", config.LastRun); } // Check if system should wakeup for reboot setting = ps.Settings.GetSetting("RebootWakeup"); enabled = Convert.ToBoolean(layer.GetSetting("PowerSchedulerRebootWakeup", "false").Value); if (setting.Get<bool>() != enabled) { setting.Set<bool>(enabled); if (enabled) { if (ps.IsRegistered(this as IWakeupHandler)) ps.Unregister(this as IWakeupHandler); ps.Register(this as IWakeupHandler); } else { ps.Unregister(this as IWakeupHandler); } Log.Debug("RebootHandler: Wakeup system for reboot: {0}", enabled ? "enabled" : "disabled"); } // Check if a reboot time is set setting = ps.Settings.GetSetting("RebootConfig"); if (!config.Equals(setting.Get<EPGWakeupConfig>())) { setting.Set<EPGWakeupConfig>(config); Log.Debug("RebootHandler: Reboot system at {0:00}:{1:00}", config.Hour, config.Minutes); if (config.Days != null) { String days = ""; foreach (EPGGrabDays day in config.Days) { if (days == "") days = day.ToString(); else days = days + ", " + day.ToString(); } Log.Debug("RebootHandler: Reboot system on: {0}", days); } } if (args.EventType == PowerSchedulerEventType.Elapsed) { // Check if reboot is due if (ShouldRunNow()) { // See if system is idle bool unattended, disAllowShutdown; String disAllowShutdownHandler, nextWakeupHandler; DateTime nextWakeupTime; // Reboot only if all other handlers allow standby ps.GetCurrentState(false, out unattended, out disAllowShutdown, out disAllowShutdownHandler, out nextWakeupTime, out nextWakeupHandler); if (!disAllowShutdown) { // Kick off reboot thread Log.Debug("RebootHandler: Reboot is due - reboot now"); Thread workerThread = new Thread(new ThreadStart(RebootThread)); workerThread.Name = "RebootHandler"; workerThread.IsBackground = true; workerThread.Priority = ThreadPriority.Lowest; workerThread.Start(); } else Log.Debug("RebootHandler: Reboot is due - reboot when standby is allowed"); } } break; } }
private void EPGThreadFunction() { // ShouldRun still returns true until LastRun is updated, // shutdown is disallowed until then TvBusinessLayer layer = new TvBusinessLayer(); EPGWakeupConfig config = new EPGWakeupConfig((layer.GetSetting("PowerSchedulerEPGWakeupConfig", String.Empty).Value)); Log.Debug("EpgGrabbingHandler: EPG schedule {0:00}:{1:00} is due", config.Hour, config.Minutes); // start external command RunExternalCommand("epg"); // try a forced start of EPG grabber if not already started if (!_controller.EpgGrabberEnabled) _controller.EpgGrabberEnabled = true; // Fire the EPGScheduleDue event for EPG grabber plugins if (_epgScheduleDue != null) { lock (_epgScheduleDue) { if (_epgScheduleDue != null) _epgScheduleDue(); } } // sleep 10 Seconds to give the grabbers time to kick off their threads, // so that they disallow shutdown // without this sleep the PS could be tempted to standby (wakeup/standby race condition) Thread.Sleep(10000); // Update last schedule run status config.LastRun = DateTime.Now; Setting s = layer.GetSetting("PowerSchedulerEPGWakeupConfig", String.Empty); s.Value = config.SerializeAsString(); s.Persist(); _epgThreadRunning = false; }