public override void LoadSettings() { var layer = new TvBusinessLayer(); numEpgGrabber.Value = ValueSanityCheck( Convert.ToDecimal(layer.GetSetting(UserFactory.EPG_TAGNAME, UserFactory.EPG_PRIORITY.ToString()).Value), 1, 100); numDefaultUser.Value = ValueSanityCheck( Convert.ToDecimal(layer.GetSetting(UserFactory.USER_TAGNAME, UserFactory.USER_PRIORITY.ToString()).Value), 1, 100); numScheduler.Value = ValueSanityCheck( Convert.ToDecimal(layer.GetSetting(UserFactory.SCHEDULER_TAGNAME, UserFactory.SCHEDULER_PRIORITY.ToString()).Value), 1, 100); Setting setting = layer.GetSetting(UserFactory.CUSTOM_TAGNAME, ""); gridUserPriorities.Rows.Clear(); string[] users = setting.Value.Split(';'); foreach (string user in users) { string[] shareItem = user.Split(','); if ((shareItem.Length.Equals(2)) && ((shareItem[0].Trim().Length > 0) || (shareItem[1].Trim().Length > 0))) { gridUserPriorities.Rows.Add(shareItem); } } }
private void linkLabelLanguageAll_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { mpListView2.BeginUpdate(); try { for (int i = 0; i < mpListView2.Items.Count; ++i) { mpListView2.Items[i].Checked = true; } TvLibrary.Epg.Languages languages = new TvLibrary.Epg.Languages(); List <String> codes = languages.GetLanguageCodes(); TvBusinessLayer layer = new TvBusinessLayer(); Setting setting = layer.GetSetting("epgLanguages"); setting.Value = ""; foreach (string code in codes) { setting.Value += code; setting.Value += ","; } //Log.WriteFile("tvsetup:epggrabber:all: epglang={0}", setting.Value); setting.Persist(); } finally { mpListView2.EndUpdate(); } }
public override void OnSectionDeActivated() { TvBusinessLayer layer = new TvBusinessLayer(); Setting setting = layer.GetSetting("SrvBlasterType"); setting.Value = comboBoxType.SelectedIndex.ToString(); setting.Persist(); setting = layer.GetSetting("SrvBlasterSpeed"); setting.Value = comboBoxSpeed.SelectedIndex.ToString(); setting.Persist(); setting = layer.GetSetting("SrvBlaster1Card"); setting.Value = comboBoxBlaster1.SelectedIndex.ToString(); setting.Persist(); setting = layer.GetSetting("SrvBlaster2Card"); setting.Value = comboBoxBlaster2.SelectedIndex.ToString(); setting.Persist(); setting = layer.GetSetting("SrvBlasterLog"); setting.Value = Convert.ToString(checkBoxExtLog.Checked); setting.Persist(); setting = layer.GetSetting("SrvBlasterSendSelect"); setting.Value = Convert.ToString(checkSendSelect.Checked); setting.Persist(); base.OnSectionDeActivated(); }
public override void OnSectionActivated() { _needRestart = false; _ignoreEvents = true; TvBusinessLayer layer = new TvBusinessLayer(); base.OnSectionActivated(); listView1.Items.Clear(); ListViewGroup listGroup = listView1.Groups["listViewGroupAvailable"]; foreach (ITvServerPlugin plugin in _loader.Plugins) { ListViewItem item = listView1.Items.Add(""); item.Group = listGroup; item.SubItems.Add(plugin.Name); item.SubItems.Add(plugin.Author); item.SubItems.Add(plugin.Version); Setting setting = layer.GetSetting(String.Format("plugin{0}", plugin.Name), "false"); item.Checked = setting.Value == "true"; item.Tag = setting; } listGroup = listView1.Groups["listViewGroupIncompatible"]; foreach (Type plugin in _loader.IncompatiblePlugins) { ListViewItem item = listView1.Items.Add(""); item.Group = listGroup; item.SubItems.Add(plugin.Name); item.SubItems.Add("Unknown"); item.SubItems.Add(plugin.Assembly.GetName().Version.ToString()); item.Checked = false; } listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); _ignoreEvents = false; }
private void NetworkMonitorHandler_OnPowerSchedulerEvent(PowerSchedulerEventArgs args) { IPowerScheduler ps = GlobalServiceProvider.Instance.Get <IPowerScheduler>(); if (ps == null) { return; } TvBusinessLayer layer = new TvBusinessLayer(); PowerSetting setting; bool enabled; switch (args.EventType) { case PowerSchedulerEventType.Elapsed: // Check if standby should be prevented setting = ps.Settings.GetSetting("NetworkMonitorEnabled"); enabled = Convert.ToBoolean(layer.GetSetting("PowerSchedulerNetworkMonitorEnabled", "false").Value); if (setting.Get <bool>() != enabled) // Setting changed { setting.Set <bool>(enabled); if (enabled) // Start { Log.Debug("NetworkMonitorHandler: Network monitor started"); StartNetworkMonitor(); } else // Stop { Log.Debug("NetworkMonitorHandler: Network monitor stopped"); StopNetworkMonitor(); } } // Get minimum transferrate considered as network activity if (enabled) { setting = ps.Settings.GetSetting("NetworkMonitorIdleLimit"); _idleLimit = Int32.Parse(layer.GetSetting("PowerSchedulerNetworkMonitorIdleLimit", "2").Value); if (setting.Get <Int32>() != _idleLimit) { setting.Set <Int32>(_idleLimit); Log.Debug("NetworkMonitorHandler: Idle limit in KB/s: {0}", _idleLimit); } // Check if away mode should be used setting = ps.Settings.GetSetting("NetworkMonitorAwayMode"); _useAwayMode = Convert.ToBoolean(layer.GetSetting("PowerSchedulerNetworkMonitorAwayMode", "false").Value); if (setting.Get <bool>() != _useAwayMode) { setting.Set <bool>(_useAwayMode); Log.Debug("NetworkMonitorHandler: Use away mode: {0}", _useAwayMode); } } break; } }
private void LoadLanguages() { _loaded = true; mpListView2.BeginUpdate(); try { mpListView2.Items.Clear(); List <KeyValuePair <String, String> > languages = TvLibrary.Epg.Languages.Instance.GetLanguagePairs(); TvBusinessLayer layer = new TvBusinessLayer(); Setting setting = layer.GetSetting(languagesSettingsKey); foreach (KeyValuePair <String, String> language in languages) { ListViewItem item = new ListViewItem(new string[] { language.Value, language.Key }); mpListView2.Items.Add(item); item.Tag = language.Key; item.Checked = setting.Value.IndexOf((string)item.Tag) >= 0; } mpListView2.Sort(); } finally { mpListView2.EndUpdate(); } }
public override void SaveSettings() { if (false == _loaded) { return; } TvBusinessLayer layer = new TvBusinessLayer(); Setting setting = layer.GetSetting(languagesSettingsKey); HashSet <string> selectedLanguages = new HashSet <string>(); for (int i = 0; i < mpListView2.Items.Count; ++i) { if (mpListView2.Items[i].Checked) { string code = (string)mpListView2.Items[i].Tag; if (!selectedLanguages.Contains(code)) { selectedLanguages.Add(code); } } } StringBuilder sb = new StringBuilder(); sb.Append(','); foreach (string lang in selectedLanguages) { sb.Append(lang); sb.Append(','); } setting.Value = sb.ToString(); setting.Persist(); base.SaveSettings(); }
public override void SaveSettings() { TvBusinessLayer layer = new TvBusinessLayer(); layer.SaveMpGenres(_mpGenres); base.SaveSettings(); }
private void SpawnImportThread() { try { TvBusinessLayer layer = new TvBusinessLayer(); if (layer.GetSetting("TvMovieEnabled", "false").Value != "true") { return; } } catch (Exception ex1) { Log.Error("TVMovie: Error checking enabled status - {0},{1}", ex1.Message, ex1.StackTrace); } if (!_isImporting) { try { Thread importThread = new Thread(new ThreadStart(ImportThread)); importThread.Name = "TV Movie importer"; importThread.IsBackground = true; importThread.Priority = ThreadPriority.Lowest; importThread.Start(); } catch (Exception ex2) { Log.Error("TVMovie: Error spawing import thread - {0},{1}", ex2.Message, ex2.StackTrace); } } }
public static void SetNewChannel(int idChannel) { if (!IsEnabled()) { return; } if (preRecordInterval == -1) { TvBusinessLayer layer = new TvBusinessLayer(); preRecordInterval = Decimal.Parse(layer.GetSetting("preRecordInterval", "5").Value); } Log.Debug("TvTimeShiftPositionWatcher: SetNewChannel(" + idChannel.ToString() + ")"); idChannelToWatch = idChannel; if (idChannel == -1) { snapshotBuferPosition = -1; snapshotBufferFile = ""; _timer.Enabled = false; Log.Debug("TvTimeShiftPositionBuffer: Timer stopped because recording on this channel started or tv stopped."); } else { StartTimer(); } }
/// <summary> /// checks if a received EPGChannel should be filtered from the resultlist /// </summary> /// <value></value> protected override bool FilterOutEPGChannel(EpgChannel epgChannel) { TvBusinessLayer layer = new TvBusinessLayer(); if (layer.GetSetting("generalGrapOnlyForSameTransponder", "no").Value == "yes") { DVBBaseChannel chan = epgChannel.Channel as DVBBaseChannel; Channel dbchannel = layer.GetChannelByTuningDetail(chan.NetworkId, chan.TransportId, chan.ServiceId); DVBTChannel dvbtchannel = new DVBTChannel(); if (dbchannel == null) { return(false); } foreach (TuningDetail detail in dbchannel.ReferringTuningDetail()) { if (detail.ChannelType == 4) { dvbtchannel.Frequency = detail.Frequency; dvbtchannel.BandWidth = detail.Bandwidth; } } return(this.CurrentChannel.IsDifferentTransponder(dvbtchannel)); } else { return(false); } }
public override void OnSectionActivated() { TvBusinessLayer layer = new TvBusinessLayer(); analyzeMode.SelectedIndex = Convert.ToInt32(layer.GetSetting("CMAnalyzeMode", "0").Value); debug.Checked = layer.GetSetting("CMDebugMode", "false").Value == "true"; }
/// <summary> /// Run an external command with parameter "action" /// </summary> /// <param name="action">standby, wakeup, epg, reboot</param> public void RunExternalCommand(String action) { TvBusinessLayer layer = new TvBusinessLayer(); String cmd = layer.GetSetting("PowerSchedulerRebootCommand", String.Empty).Value; if (cmd.Equals(String.Empty)) { return; } using (Process p = new Process()) { ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = cmd; psi.UseShellExecute = true; psi.WindowStyle = ProcessWindowStyle.Minimized; psi.Arguments = action; psi.ErrorDialog = false; psi.Verb = "runas"; p.StartInfo = psi; Log.Debug("RebootHandler: Starting external command: {0} {1}", p.StartInfo.FileName, p.StartInfo.Arguments); try { p.Start(); p.WaitForExit(); } catch (Exception ex) { Log.Error("RebootHandler: Exception in RunExternalCommand: {0}", ex.Message); Log.Info("RebootHandler: Exception in RunExternalCommand: {0}", ex.Message); } Log.Debug("RebootHandler: External command finished"); } }
protected CardAllocationBase(TvBusinessLayer businessLayer, TVController controller) { _businessLayer = businessLayer; _controller = controller; //_tuningChannelMapping = new Dictionary<int, IList<IChannel>>(); //_channelMapping = new Dictionary<int, bool>(); }
private static void LoadChannelGroups() { if (!TVHome.Connected) { return; } Settings xmlreader = new MPSettings(); string currentchannelName = xmlreader.GetValueAsString("myradio", "channel", String.Empty); TvBusinessLayer layer = new TvBusinessLayer(); IList <Channel> channels = layer.GetChannelsByName(currentchannelName); if (channels != null && channels.Count > 0) { _currentChannel = channels[0]; } if (AllRadioGroups.Count == 0) { IList <RadioChannelGroup> allGroups = RadioChannelGroup.ListAll(); foreach (RadioChannelGroup group in allGroups) { if (hideAllChannelsGroup && group.GroupName.Equals(TvConstants.RadioGroupNames.AllChannels) && allGroups.Count > 1) { continue; } AllRadioGroups.Add(group); } } }
private void RetrieveRemoteTvGuideOnStartUp() { TvBusinessLayer layer = new TvBusinessLayer(); if (_remoteFileDownloadInProgress) { return; } bool downloadGuideOnWakeUp = (layer.GetSetting("xmlTvRemoteSchedulerDownloadOnWakeUpEnabled", "false").Value == "true"); if (downloadGuideOnWakeUp) { Setting setting = layer.GetSetting("xmlTvRemoteScheduleLastTransfer", ""); DateTime lastTransfer = DateTime.MinValue; DateTime.TryParse(setting.Value, out lastTransfer); //lastTime = DateTime.Parse(layer.GetSetting("xmlTvLastUpdate", "").Value); TimeSpan ts = DateTime.Now - lastTransfer; if (ts.TotalMinutes > 1440) //1440 mins = 1 day. - we only want to update once per day. { string folder = layer.GetSetting("xmlTv", DefaultOutputFolder).Value; string URL = layer.GetSetting("xmlTvRemoteURL", "").Value; Log.Debug("downloadGuideOnWakeUp"); RetrieveRemoteFile(folder, URL); } } }
private List <Channel> GetChannelListByGroup() { int idGroup = TVHome.Navigator.CurrentGroup.IdGroup; if (_tvGroupChannelListCache == null) { _tvGroupChannelListCache = new Dictionary <int, List <Channel> >(); } List <Channel> channels = null; if (_tvGroupChannelListCache.TryGetValue(idGroup, out channels)) //already in cache ? then return it. { Log.Debug("TvMiniGuide: GetChannelListByGroup returning cached version of channels."); return(channels); } else //not in cache, fetch it and update cache, then return. { TvBusinessLayer layer = new TvBusinessLayer(); List <Channel> tvChannelList = layer.GetTVGuideChannelsForGroup(idGroup); if (tvChannelList != null) { Log.Debug("TvMiniGuide: GetChannelListByGroup caching channels from DB."); _tvGroupChannelListCache.Add(idGroup, tvChannelList); return(tvChannelList); } } return(new List <Channel>()); }
/// <summary> /// checks if a received EPGChannel should be filtered from the resultlist /// </summary> /// <value></value> protected override bool FilterOutEPGChannel(EpgChannel epgChannel) { TvBusinessLayer layer = new TvBusinessLayer(); if (layer.GetSetting("generalGrapOnlyForSameTransponder", "no").Value == "yes") { DVBBaseChannel chan = epgChannel.Channel as DVBBaseChannel; Channel dbchannel = layer.GetChannelByTuningDetail(chan.NetworkId, chan.TransportId, chan.ServiceId); DVBSChannel dvbschannel = new DVBSChannel(); if (dbchannel == null) { return(false); } foreach (TuningDetail detail in dbchannel.ReferringTuningDetail()) { if (detail.ChannelType == 3) { dvbschannel.Frequency = detail.Frequency; dvbschannel.Polarisation = (Polarisation)detail.Polarisation; dvbschannel.ModulationType = (ModulationType)detail.Modulation; dvbschannel.SatelliteIndex = detail.SatIndex; dvbschannel.InnerFecRate = (BinaryConvolutionCodeRate)detail.InnerFecRate; dvbschannel.Pilot = (Pilot)detail.Pilot; dvbschannel.Rolloff = (RollOff)detail.RollOff; dvbschannel.DisEqc = (DisEqcType)detail.Diseqc; } } return(this.CurrentChannel.IsDifferentTransponder(dvbschannel)); } else { return(false); } }
public void TestNoTuningDetailsChannel() { Dictionary <int, ITvCardHandler> cards = new Dictionary <int, ITvCardHandler>(); List <IChannel> tuningDetails = new List <IChannel>(); IUser user = Fakes.FakeUser(); TvBusinessLayer businessLayer = Fakes.FakeTvBusinessLayer();; TVController controller = Fakes.FakeTVController(); DVBCardMocks dvbCardMocks = GetCardMockByCardType(CardType.DvbC, tuningDetails, user); ITvCardHandler cardHandler1 = dvbCardMocks.GetMockedCardHandler(); cards.Add(dvbCardMocks.CardId, cardHandler1); ChannelMap channelMap; Channel channel = ChannelMocks.GetChannel(out channelMap); Isolate.WhenCalled(() => businessLayer.GetTuningChannelsByDbChannel(channel)).WillReturn(tuningDetails); TVControllerMocks.CardPresent(cardHandler1.DataBaseCard.IdCard, controller); SetupChannelMapping(cardHandler1, channelMap, businessLayer, channel); AdvancedCardAllocation allocation = new AdvancedCardAllocation(businessLayer, controller); TvResult result; List <CardDetail> availCards = allocation.GetFreeCardsForChannel(cards, channel, ref user, out result); Assert.AreEqual(0, availCards.Count, "The number of cards returned is not as expected"); }
public override void OnSectionActivated() { TvBusinessLayer layer = new TvBusinessLayer(); debug.Checked = layer.GetSetting("PTVGDebugMode", "false").Value == "true"; base.OnSectionActivated(); }
/// <summary> /// Parses the keyword table /// and updates the PersonalTVGuideMap /// </summary> private void UpdateThread() { _isUpdating = true; if (_debugMode) { Log.Info("PersonalTVGuide: UpdateThread - Start: " + DateTime.Now.ToLongTimeString()); } ClearPersonalTVGuideMap(); IList <Keyword> list = Keyword.ListAll(); foreach (Keyword key in list) { if (_stopService) { Log.Info("PersonalTVGuide: Stop Update loop"); break; } UpdateKeyword(key); } TvBusinessLayer cmLayer = new TvBusinessLayer(); Setting setting = cmLayer.GetSetting("PTVGLastUpdateTime", DateTime.Now.ToString()); setting.Value = DateTime.Now.ToString(); setting.Persist(); if (_debugMode) { Log.Info("PersonalTVGuide: UpdateThread - Stop : " + DateTime.Now.ToLongTimeString()); } _isUpdating = false; }
/// <summary> /// Saves control status /// </summary> private void PersistState() { TvBusinessLayer layer = new TvBusinessLayer(); Setting setting = layer.GetSetting("dvbc" + _cardNumber + "Country", "0"); setting.Value = mpComboBoxCountry.SelectedIndex.ToString(); setting.Persist(); setting = layer.GetSetting("dvbc" + _cardNumber + "Region", "0"); setting.Value = mpComboBoxRegion.SelectedIndex.ToString(); setting.Persist(); setting = layer.GetSetting("dvbc" + _cardNumber + "Freq", "306000"); setting.Value = textBoxFreq.Text; setting.Persist(); setting = layer.GetSetting("dvbc" + _cardNumber + "Symbolrate", "6900"); setting.Value = textBoxSymbolRate.Text; setting.Persist(); setting = layer.GetSetting("dvbc" + _cardNumber + "Modulation", "3"); setting.Value = mpComboBoxMod.SelectedIndex.ToString(); setting.Persist(); setting = layer.GetSetting("dvbc" + _cardNumber + "creategroups", "false"); setting.Value = checkBoxCreateGroups.Checked ? "true" : "false"; setting.Persist(); setting = layer.GetSetting("dvbc" + _cardNumber + "createsignalgroup", "false"); setting.Value = checkBoxCreateSignalGroup.Checked ? "true" : "false"; setting.Persist(); }
public void SetParameters() { if (!IsLocal) { return; } if (_card == null) { return; } ScanParameters settings = new ScanParameters(); TvBusinessLayer layer = new TvBusinessLayer(); settings.TimeOutTune = Int32.Parse(layer.GetSetting("timeoutTune", "2").Value); settings.TimeOutPAT = Int32.Parse(layer.GetSetting("timeoutPAT", "5").Value); settings.TimeOutCAT = Int32.Parse(layer.GetSetting("timeoutCAT", "5").Value); settings.TimeOutPMT = Int32.Parse(layer.GetSetting("timeoutPMT", "10").Value); settings.TimeOutSDT = Int32.Parse(layer.GetSetting("timeoutSDT", "20").Value); settings.TimeOutAnalog = Int32.Parse(layer.GetSetting("timeoutAnalog", "20").Value); settings.UseDefaultLnbFrequencies = (layer.GetSetting("lnbDefault", "true").Value == "true"); settings.LnbLowFrequency = Int32.Parse(layer.GetSetting("LnbLowFrequency", "0").Value); settings.LnbHighFrequency = Int32.Parse(layer.GetSetting("LnbHighFrequency", "0").Value); settings.LnbSwitchFrequency = Int32.Parse(layer.GetSetting("LnbSwitchFrequency", "0").Value); settings.MinimumFiles = Int32.Parse(layer.GetSetting("timeshiftMinFiles", "6").Value); settings.MaximumFiles = Int32.Parse(layer.GetSetting("timeshiftMaxFiles", "20").Value); settings.MaximumFileSize = UInt32.Parse(layer.GetSetting("timeshiftMaxFileSize", "256").Value); settings.MaximumFileSize *= 1000; settings.MaximumFileSize *= 1000; _card.Parameters = settings; }
/// <summary> /// Reads previous settings and assign them to controls /// </summary> private void SetDefaults() { TvBusinessLayer layer = new TvBusinessLayer(); int index = Math.Max(Int32.Parse(layer.GetSetting("dvbc" + _cardNumber + "Country", "0").Value), 0); // limit to >= 0 if (index < mpComboBoxCountry.Items.Count) { mpComboBoxCountry.SelectedIndex = index; } index = Math.Max(Int32.Parse(layer.GetSetting("dvbc" + _cardNumber + "Region", "0").Value), 0); // limit to >= 0 if (index < mpComboBoxRegion.Items.Count) { mpComboBoxRegion.SelectedIndex = index; } textBoxFreq.Text = layer.GetSetting("dvbc" + _cardNumber + "Freq", "306000").Value; textBoxSymbolRate.Text = layer.GetSetting("dvbc" + _cardNumber + "Symbolrate", "6900").Value; index = Math.Max(Int32.Parse(layer.GetSetting("dvbc" + _cardNumber + "Modulation", "3").Value), 0); // limit to >= 0 if (index < mpComboBoxMod.Items.Count) { mpComboBoxMod.SelectedIndex = index; } checkBoxCreateGroups.Checked = (layer.GetSetting("dvbc" + _cardNumber + "creategroups", "false").Value == "true"); checkBoxCreateSignalGroup.Checked = (layer.GetSetting("dvbc" + _cardNumber + "createsignalgroup", "false").Value == "true"); }
private void mpButtonScanTv_Click(object sender, EventArgs e) { if (_isScanning == false) { TvBusinessLayer layer = new TvBusinessLayer(); Card card = layer.GetCardByDevicePath(RemoteControl.Instance.CardDevice(_cardNumber)); if (card.Enabled == false) { MessageBox.Show(this, "Tuner is disabled. Please enable the tuner before scanning."); return; } else if (!RemoteControl.Instance.CardPresent(card.IdCard)) { MessageBox.Show(this, "Tuner is not found. Please make sure the tuner is present before scanning."); return; } // Check if the card is locked for scanning. IUser user; if (RemoteControl.Instance.IsCardInUse(_cardNumber, out user)) { MessageBox.Show(this, "Tuner is locked. Scanning is not possible at the moment. Perhaps you are using another part of a hybrid card?"); return; } Thread scanThread = new Thread(new ThreadStart(DoScan)); scanThread.Name = "DVB-IP scan thread"; scanThread.Start(); } else { _stopScanning = true; } }
public override void SaveSettings() { var layer = new TvBusinessLayer(); Setting s = layer.GetSetting("PriorityEPG", UserFactory.EPG_PRIORITY.ToString()); s.Value = numEpgGrabber.Value.ToString(); s.Persist(); s = layer.GetSetting("PriorityUser", UserFactory.USER_PRIORITY.ToString()); s.Value = numDefaultUser.Value.ToString(); s.Persist(); s = layer.GetSetting("PriorityScheduler", UserFactory.SCHEDULER_PRIORITY.ToString()); s.Value = numScheduler.Value.ToString(); s.Persist(); Setting setting = layer.GetSetting("PrioritiesCustom", ""); var shares = new StringBuilder(); foreach (DataGridViewRow row in gridUserPriorities.Rows) { shares.AppendFormat("{0},{1};", row.Cells[0].Value, row.Cells[1].Value); } setting.Value = shares.ToString(); setting.Persist(); }
/// <summary> /// Grabs the epg. /// </summary> public void GrabEpg() { _tvController.OnTvServerEvent += _eventHandler; TvBusinessLayer layer = new TvBusinessLayer(); Setting s = layer.GetSetting("timeoutEPG", "10"); if (Int32.TryParse(s.Value, out _epgTimeOut) == false) { _epgTimeOut = 10; } _currentTransponder = TransponderList.Instance.CurrentTransponder; Channel channel = _currentTransponder.CurrentChannel; Log.Epg("EpgCard: grab epg on card: #{0} transponder: #{1} ch:{2} ", _card.IdCard, TransponderList.Instance.CurrentIndex, channel.DisplayName); _state = EpgState.Idle; _isRunning = true; _user = UserFactory.CreateEpgUser(); if (GrabEpgForChannel(channel, _currentTransponder.Tuning, _card)) { Log.Epg("EpgCard: card: {0} starting to grab {1}", _user.CardId, _currentTransponder.Tuning.ToString()); _currentTransponder.InUse = true; //succeeded, then wait for epg to be received _state = EpgState.Grabbing; _grabStartTime = DateTime.Now; _epgTimer.Enabled = true; return; } Log.Epg("EpgCard: unable to grab epg transponder: {0} ch: {1} started on {2}", TransponderList.Instance.CurrentIndex, channel.DisplayName, _user.CardId); Log.Epg("{0}", _currentTransponder.Tuning.ToString()); }
/// <summary> /// checks if a received EPGChannel should be filtered from the resultlist /// </summary> /// <value></value> protected override bool FilterOutEPGChannel(EpgChannel epgChannel) { TvBusinessLayer layer = new TvBusinessLayer(); if (layer.GetSetting("generalGrapOnlyForSameTransponder", "no").Value == "yes") { DVBBaseChannel chan = epgChannel.Channel as DVBBaseChannel; Channel dbchannel = layer.GetChannelByTuningDetail(chan.NetworkId, chan.TransportId, chan.ServiceId); ATSCChannel atscchannel = new ATSCChannel(); if (dbchannel == null) { return(false); } foreach (TuningDetail detail in dbchannel.ReferringTuningDetail()) { if (detail.ChannelType == 1) { atscchannel.MajorChannel = detail.MajorChannel; atscchannel.MinorChannel = detail.MinorChannel; atscchannel.PhysicalChannel = detail.ChannelNumber; } } return(this.CurrentChannel.IsDifferentTransponder(atscchannel)); } else { return(false); } }
private static void PersistPortalChannel(PortalChannel pChannel) { TvBusinessLayer layer = new TvBusinessLayer(); Channel dbPortalChannel = layer.GetChannelByTuningDetail(pChannel.NetworkId, pChannel.TransportId, pChannel.ServiceId); if (dbPortalChannel == null) { Log.Info("Portal channel with networkId={0}, transportId={1}, serviceId={2} not found", pChannel.NetworkId, pChannel.TransportId, pChannel.ServiceId); return; } Gentle.Framework.Broker.Execute("delete from ChannelLinkageMap WHERE idPortalChannel=" + dbPortalChannel.IdChannel); foreach (LinkedChannel lChannel in pChannel.LinkedChannels) { Channel dbLinkedChannnel = layer.GetChannelByTuningDetail(lChannel.NetworkId, lChannel.TransportId, lChannel.ServiceId); if (dbLinkedChannnel == null) { Log.Info("Linked channel with name={0}, networkId={1}, transportId={2}, serviceId={3} not found", lChannel.Name, lChannel.NetworkId, lChannel.TransportId, lChannel.ServiceId); continue; } dbLinkedChannnel.DisplayName = lChannel.Name; dbLinkedChannnel.Persist(); ChannelLinkageMap map = new ChannelLinkageMap(dbPortalChannel.IdChannel, dbLinkedChannnel.IdChannel, lChannel.Name); map.Persist(); } }
public override void OnSectionActivated() { Log.Info("TV3BlasterPlugin: Configuration activated"); TV3BlasterPlugin.InConfiguration = true; TvBusinessLayer layer = new TvBusinessLayer(); TV3BlasterPlugin.ServerHost = layer.GetSetting("TV3BlasterPlugin_ServerHost", "localhost").Value; IPAddress serverIP = Network.GetIPFromName(TV3BlasterPlugin.ServerHost); IPEndPoint endPoint = new IPEndPoint(serverIP, Server.DefaultPort); if (!TV3BlasterPlugin.StartClient(endPoint)) { MessageBox.Show(this, "Failed to start local comms. IR functions temporarily disabled.", "TV3 Blaster Plugin - Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } TV3BlasterPlugin.LoadExternalConfigs(); RefreshIRList(); RefreshMacroList(); TV3BlasterPlugin.HandleMessage += ReceivedMessage; base.OnSectionActivated(); }
public bool UnLockTvWishList() { TvBusinessLayer layer = new TvBusinessLayer(); Setting setting; Log.Debug("UnLockTvWishList: Trying to unlock Tvwishes"); try { //tell pluginversion setting = layer.GetSetting("TvWishList_LockingPluginname", "NONE"); string owner=setting.Value; if (owner == _LockingPluginname) { setting.Value = "NONE"; _LockingPluginname = "NONE"; setting.Persist(); //create old timestamp setting = layer.GetSetting("TvWishList_TimeStampLock", "1999-12-31 11:59:00"); setting.Value = "1999-12-31 11:59:00"; setting.Persist(); //set BUSY = false setting = layer.GetSetting("TvWishList_BUSY", "false"); setting.Value = "false"; setting.Persist(); Log.Debug("TvWishList has been sucessfully unlocked by "+owner, (int)LogSetting.DEBUG); return true; } else { Log.Debug("TvWishList could not be unlocked - owner is " + setting.Value, (int)LogSetting.ERROR); return false; } } catch (Exception exc) { Log.Debug("TvWishList could not be unlocked - exception: "+exc.Message, (int)LogSetting.ERROR); return false; } }
public bool LockTvWishList(string pluginName) { bool BUSY = false; TvBusinessLayer layer = new TvBusinessLayer(); Setting setting; Log.Debug("LockTvWishList: Trying to lock Tvwishes by " + pluginName); for (int i = 0; i < 5; i++) //5 retries { setting = layer.GetSetting("TvWishList_BUSY", "false"); try { BUSY = Convert.ToBoolean(setting.Value); } catch { BUSY = true; Log.Debug("Could not convert TvWishList_BUSY - setting BUSY to true", (int)LogSetting.ERROR); } if (BUSY == false) break; Thread.Sleep(1000); //retry every second } if (BUSY == true) { Log.Debug("BUSY=true - other process is running", (int)LogSetting.DEBUG); setting = layer.GetSetting("TvWishList_TimeStampLock", "1999-12-31 11:59:00"); DateTime lockTime = DateTime.ParseExact(setting.Value, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); DateTime checkTime = lockTime.AddHours(1.0); //ignore existing lock after 1 hour Log.Debug("lockTime=" + lockTime.ToString()); Log.Debug("checkTime=" + checkTime.ToString()); Log.Debug("DateTime.Now=" + DateTime.Now.ToString()); setting = layer.GetSetting("TvWishList_LockingPluginname", "Not Defined"); Log.Debug("TvWishList_LockingPluginname=" + setting.Value); if ((setting.Value.Contains(pluginName))&&(setting.Value.Contains(Environment.MachineName)) ) { Log.Error("Locking data because plugin and host are the same - data were locked by " + setting.Value); } else if (DateTime.Now < checkTime) {// data are locked return return false; } else //data lock is too old - ignore { Log.Error("Locking data because timestamp is expired - data were locked by " + setting.Value); } } //set BUSY = true setting = layer.GetSetting("TvWishList_BUSY", "true"); setting.Value = "true"; setting.Persist(); //tell plugin setting = layer.GetSetting("TvWishList_LockingPluginname", "Not Defined"); setting.Value = Environment.MachineName + ":" + pluginName + ":" + DateTime.Now.ToString() + " by version " + TvWishVersion(); _LockingPluginname = setting.Value; Log.Debug("TvWishList has been locked by " + _LockingPluginname, (int)LogSetting.DEBUG); setting.Persist(); //tell timestamp setting = layer.GetSetting("TvWishList_TimeStampLock", "1999-12-31 11:59:00"); setting.Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); setting.Persist(); return true; }
public string loadlongsettings(string name) { //splits long setting strings in multiple parts TvBusinessLayer layer = new TvBusinessLayer(); Setting setting; // tell TvWishCreator setting = layer.GetSetting("TvWishList_TvWishDataCreator", "0.0.0.0"); _DataLoadedBy = setting.Value; //LogDebug("Longsetting TvWishList_ListView", (int)LogSetting.DEBUG); string stringdata = layer.GetSetting(name, "").Value; //LogDebug("listviewdata TvWishList_ListView=" + listviewdata, (int)LogSetting.DEBUG); int count = 1; string partial = layer.GetSetting(name + "_" + count.ToString("D3"), "").Value; //LogDebug("partial " + "TvWishList_ListView_" + count.ToString("D3") + "=" + partial, (int)LogSetting.DEBUG); while (partial != "") { stringdata += partial; count++; partial = layer.GetSetting(name + "_" + count.ToString("D3"), "").Value; //LogDebug("partial " + name + "_" + count.ToString("D3") + "=" + partial, (int)LogSetting.DEBUG); } //LogDebug("Merged" + "TvWishList_ListView Length =" + listviewdata.Length.ToString(), (int)LogSetting.DEBUG); //LogDebug("Merged" + "TvWishList_ListView =" + listviewdata, (int)LogSetting.DEBUG); return stringdata; }
public void Start(IController controller) #endif { try { Log.Info("TvWishList started"); SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(SystemEvents_PowerModeChanged); SystemEvents.SessionEnded += new SessionEndedEventHandler(SystemEvents_SessionEnded); events = GlobalServiceProvider.Instance.Get<ITvServerEvent>(); events.OnTvServerEvent += new TvServerEventHandler(events_OnTvServerEvent); TvBusinessLayer layer = new TvBusinessLayer(); Setting setting = null; //set BUSY = false setting = layer.GetSetting("TvWishList_BUSY", "false"); setting.Value = "false"; setting.Persist(); setting = layer.GetSetting("TvWishList_Debug", "false"); Log.Info("setting DEBUG MODE = " + setting.Value); DEBUG = false; Boolean.TryParse(setting.Value, out DEBUG); Log.DebugValue = DEBUG; Log.Info("DEBUG MODE = " + DEBUG.ToString()); //unlock pluginversion setting = layer.GetSetting("TvWishList_LockingPluginname", "NONE"); setting.Value = "NONE"; setting.Persist(); //write Tv version setting = layer.GetSetting("TvWishList_TvServerVersion", "0.0.0.0"); setting.Value = Version; setting.Persist(); Log.Debug("TvVersion = "+Version); //is host name stored in database for TvWishListMP? setting = layer.GetSetting("TvWishList_MachineName", "NONE"); Log.Debug("TvServer Machine Name="+setting.Value); if (setting.Value != System.Environment.MachineName.ToString()) { setting.Value = System.Environment.MachineName.ToString(); setting.Persist(); Log.Debug("Overwriting TvServer Machine Name To " + setting.Value); } //save pipename for Tvserver2 setting = layer.GetSetting("TvWishList_PipeName", "NONE"); Log.Debug("TvWishList_PipeName=" + setting.Value); #if (MPTV2) setting.Value = "MP2TvWishListPipe"; #else setting.Value = "TvWishListPipe"; #endif setting.Persist(); TV_USER_FOLDER = layer.GetSetting("TvWishList_TV_USER_FOLDER", "NOT_FOUND").Value; if ((File.Exists(TV_USER_FOLDER + @"\TvService.exe") == true) || (Directory.Exists(TV_USER_FOLDER) == false)) { //autodetect paths InstallPaths instpaths = new InstallPaths(); //define new instance for folder detection #if (MPTV2) //Native MP2 Tv server instpaths.GetInstallPathsMP2(); TV_USER_FOLDER = instpaths.TV2_USER_FOLDER; #else instpaths.GetInstallPaths(); TV_USER_FOLDER = instpaths.TV_USER_FOLDER; #endif Logdebug("TV server user folder detected at " + TV_USER_FOLDER); if ((File.Exists(TV_USER_FOLDER + @"\TvService.exe") == true) || (Directory.Exists(TV_USER_FOLDER) == false)) { Log.Error(@" TV server user folder does not exist - using C:\MediaPortal\TvWishList"); Logdebug(@" TV server user folder does not exist - using C:\MediaPortal\TvWishList"); TV_USER_FOLDER = @"C:\MediaPortal"; if (Directory.Exists(TV_USER_FOLDER) == false) Directory.CreateDirectory(TV_USER_FOLDER + @"\TvWishList"); } else {//store found TV_USER_FOLDER setting = layer.GetSetting("TvWishList_TV_USER_FOLDER", "NOT_FOUND"); setting.Value = TV_USER_FOLDER; setting.Persist(); } } _RecordingFlagTime = DateTime.Now.AddHours(1.0); //add 1 hour to give time for setup _NextEpgTime = DateTime.Now.AddHours(1.0); //add 1 hour to give time for setup setting = layer.GetSetting("TvWishList_NextEpgDate", _NextEpgTime.ToString("yyyy-MM-dd_HH:mm", System.Globalization.CultureInfo.InvariantCulture)); try { _NextEpgTime = DateTime.ParseExact(setting.Value, "yyyy-MM-dd_HH:mm", System.Globalization.CultureInfo.InvariantCulture); } catch (Exception exc) { Log.Error("NextEpgDate reading failed with exception: " + exc.Message); } Log.Debug("Start(IController controller): _NextEpgTime=" + _NextEpgTime.ToString()); /* // lock next time for receive mail for upcoming startups if Tvserver is being restarted after each standby setting = layer.GetSetting("TvWishList_SetEpgTime", "false"); setting.Value = "false"; setting.Persist();*/ epgwatchclass = new EpgParser(); if (epgwatchclass == null) { Log.Error("EpgParser could not be initiated - aborting operation"); return; } else { epgwatchclass.newlabelmessage += new setuplabelmessage(SendServerPipeMessage); Logdebug("EpgParser initiated"); } //start pollingthread runpolling = true; System.Threading.Thread th = new System.Threading.Thread(startpolling); th.IsBackground = true; th.Start(); Logdebug("Polling thread starting"); /* // activate filewatcher for active command try { filewatcherstartepg = TV_USER_FOLDER + @"\TvWishList\StartEPGsearch.txt"; if (File.Exists(filewatcherstartepg) == true) { File.Delete(filewatcherstartepg); } filewatcherfinishedepg = TV_USER_FOLDER + @"\TvWishList\FinishedEPGsearch.txt"; if (File.Exists(filewatcherfinishedepg) == true) { File.Delete(filewatcherfinishedepg); } FileInfo myfileinfo = new FileInfo(filewatcherstartepg); StartEPGsearch.Path = myfileinfo.DirectoryName; StartEPGsearch.Created += new FileSystemEventHandler(StartEPGsearchFilewatcher); StartEPGsearch.Filter = myfileinfo.Name; StartEPGsearch.EnableRaisingEvents = true; Logdebug("file watcher StartEPGsearch enabled"); } catch (Exception ex) { Log.Error("Error in starting StartEPGsearch File watcher: Exception message was " + ex.Message); return; }*/ // activate filewatcher for setupTvStarted try { filewatcherSetupTvStarted = TV_USER_FOLDER + @"\TvWishList\SetupTvStarted.txt"; if (File.Exists(filewatcherSetupTvStarted) == true) { File.Delete(filewatcherSetupTvStarted); } FileInfo myfileinfo = new FileInfo(filewatcherSetupTvStarted); SetupTvStarted.Path = myfileinfo.DirectoryName; SetupTvStarted.Created += new FileSystemEventHandler(SetupTvStartedFilewatcher); SetupTvStarted.Filter = myfileinfo.Name; SetupTvStarted.EnableRaisingEvents = true; Logdebug("file watcher SetupTvStarted enabled"); } catch (Exception ex) { Log.Error("Error in starting SetupTvStarted File watcher: Exception message was " + ex.Message); return; } // activate filewatcher for NextEpgCheck try { filewatcherNextEpgCheck = TV_USER_FOLDER + @"\TvWishList\NextEpgCheck.txt"; if (File.Exists(filewatcherNextEpgCheck) == true) { File.Delete(filewatcherNextEpgCheck); } FileInfo myfileinfo = new FileInfo(filewatcherNextEpgCheck); NextEpgCheck.Path = myfileinfo.DirectoryName; NextEpgCheck.Created += new FileSystemEventHandler(NextEpgCheckFilewatcher); NextEpgCheck.Filter = myfileinfo.Name; NextEpgCheck.EnableRaisingEvents = true; Logdebug("file watcher NextEpgCheck enabled"); } catch (Exception ex) { Log.Error("Error in starting NextEpgCheck File watcher: Exception message was " + ex.Message); return; } //startpipeserver and listen for commands StartServer(); } catch (Exception ex) { Log.Debug("Error in starting TvWishList: Exception message was " + ex.Message); return; } Log.Debug("TvWishList start completed"); }
private void SystemEvents_SessionEnded(object sender, SessionEndedEventArgs e) { try { Logdebug("SystemEvents_SessionEnded =" + e.Reason.ToString()); if (receivethread != null) { try { TvBusinessLayer layer = new TvBusinessLayer(); Setting setting = null; setting = layer.GetSetting("TvWishList_NextEpgDate", DateTime.Now.ToString("yyyy-MM-dd_HH:mm", System.Globalization.CultureInfo.InvariantCulture)); setting.Value = _PreviousEpgTime.ToString("yyyy-MM-dd_HH:mm", System.Globalization.CultureInfo.InvariantCulture); Logdebug("TvWishList_NextEpgDate=" + setting.Value); setting.Persist(); } catch (Exception exc) { Logdebug("Error in writing old epg time"); Log.Error("Error in writing old epg time"); Log.Debug(exc.Message); Log.Error(exc.Message); } Logdebug("Aborting receive thread because of shutdown or logoff event"); Log.Error("Aborting receive thread because of shutdown or logoff event"); receivethread.Abort(); //resetting next epg date _NextEpgTime = _PreviousEpgTime; Logdebug("TVSERVER TvWishList: Setting NextEpgTime =" + _NextEpgTime.ToString()); } } catch (Exception exc) { Log.Debug("SystemEvents_SessionEnded failed with exception message:"); Log.Error("SystemEvents_SessionEnded failed with exception message:"); Log.Debug(exc.Message); Log.Error(exc.Message); } }
public void epgwatch() { try { Logdebug("Epg watching started"); //get new updated value for next epg check TvBusinessLayer layer = new TvBusinessLayer(); Setting setting = null; // get DEBUG setting = layer.GetSetting("TvWishList_Debug", "false"); DEBUG = false; Boolean.TryParse(setting.Value, out DEBUG); Log.DebugValue = DEBUG; _NextEpgTime = NextEpgTime(); Log.Debug("epgwatch(): _NextEpgTime=" + _NextEpgTime.ToString()); //////////////////////////////////////////////// //start epgprocessing here if (epgwatchclass == null) { Log.Error("EpgParser could not be initiated - aborting operation"); return; } else { try { epgwatchclass.SearchEPG(false); //Email & Record } catch (Exception exc) { Log.Error("Parsing EPG data failed with exception message:"); Log.Error(exc.Message); // Reset BUSY Flag after exception //set BUSY = false setting = layer.GetSetting("TvWishList_BUSY", "false"); setting.Value = "false"; setting.Persist(); } } } catch (Exception exc) { Log.Error("epgwatch failed with exception message:"); Log.Error(exc.Message); } }
//------------------------------------------------------------------------------------------------------------- // gets the recording time of a schedule //------------------------------------------------------------------------------------------------------------- public List<Schedule> GetRecordingTimes(Schedule rec, int days) { TvBusinessLayer layer = new TvBusinessLayer(); List<Schedule> recordings = new List<Schedule>(); DateTime dtDay = DateTime.Now; if (rec.ScheduleType == (int)ScheduleRecordingType.Once) { recordings.Add(rec); return recordings; } if (rec.ScheduleType == (int)ScheduleRecordingType.Daily) { for (int i = 0; i < days; ++i) { Schedule recNew = rec.Clone(); recNew.ScheduleType = (int)ScheduleRecordingType.Once; recNew.StartTime = new DateTime(dtDay.Year, dtDay.Month, dtDay.Day, rec.StartTime.Hour, rec.StartTime.Minute, 0); if (rec.EndTime.Day > rec.StartTime.Day) { dtDay = dtDay.AddDays(1); } recNew.EndTime = new DateTime(dtDay.Year, dtDay.Month, dtDay.Day, rec.EndTime.Hour, rec.EndTime.Minute, 0); if (rec.EndTime.Day > rec.StartTime.Day) { dtDay = dtDay.AddDays(-1); } recNew.Series = true; if (recNew.StartTime >= DateTime.Now) { if (rec.IsSerieIsCanceled(recNew.StartTime)) { recNew.Canceled = recNew.StartTime; } recordings.Add(recNew); } dtDay = dtDay.AddDays(1); } return recordings; } if (rec.ScheduleType == (int)ScheduleRecordingType.WorkingDays) { #if (TV100 || TV101 || TV12) for (int i = 0; i < days; ++i) { if (dtDay.DayOfWeek != DayOfWeek.Saturday && dtDay.DayOfWeek != DayOfWeek.Sunday) #elif(TV11) WeekEndTool weekEndTool = Setting.GetWeekEndTool(); for (int i = 0; i < days; ++i) { if (weekEndTool.IsWorkingDay(dtDay.DayOfWeek)) #endif { Schedule recNew = rec.Clone(); recNew.ScheduleType = (int)ScheduleRecordingType.Once; recNew.StartTime = new DateTime(dtDay.Year, dtDay.Month, dtDay.Day, rec.StartTime.Hour, rec.StartTime.Minute, 0); if (rec.EndTime.Day > rec.StartTime.Day) { dtDay = dtDay.AddDays(1); } recNew.EndTime = new DateTime(dtDay.Year, dtDay.Month, dtDay.Day, rec.EndTime.Hour, rec.EndTime.Minute, 0); if (rec.EndTime.Day > rec.StartTime.Day) { dtDay = dtDay.AddDays(-1); } recNew.Series = true; if (rec.IsSerieIsCanceled(recNew.StartTime)) { recNew.Canceled = recNew.StartTime; } if (recNew.StartTime >= DateTime.Now) { recordings.Add(recNew); } } dtDay = dtDay.AddDays(1); } return recordings; } if (rec.ScheduleType == (int)ScheduleRecordingType.Weekends) { #if(TV100) IList progList = layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName,rec.ReferencedChannel()); foreach (Program prog in progList) { if ((rec.IsRecordingProgram(prog, false)) && (prog.StartTime.DayOfWeek == DayOfWeek.Saturday || prog.StartTime.DayOfWeek == DayOfWeek.Sunday)) #elif(TV101 || TV12) IList<Program> progList = layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName,rec.ReferencedChannel()); foreach (Program prog in progList) { if ((rec.IsRecordingProgram(prog, false)) && (prog.StartTime.DayOfWeek == DayOfWeek.Saturday || prog.StartTime.DayOfWeek == DayOfWeek.Sunday)) #elif(TV11) IList<Program> progList = layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName, rec.ReferencedChannel()); WeekEndTool weekEndTool = Setting.GetWeekEndTool(); foreach (Program prog in progList) { if ((rec.IsRecordingProgram(prog, false)) && (weekEndTool.IsWeekend(prog.StartTime.DayOfWeek))) #endif { Schedule recNew = rec.Clone(); recNew.ScheduleType = (int)ScheduleRecordingType.Once; recNew.StartTime = prog.StartTime; recNew.EndTime = prog.EndTime; recNew.Series = true; if (rec.IsSerieIsCanceled(recNew.StartTime)) { recNew.Canceled = recNew.StartTime; } recordings.Add(recNew); } } return recordings; } if (rec.ScheduleType == (int)ScheduleRecordingType.Weekly) { for (int i = 0; i < days; ++i) { if ((dtDay.DayOfWeek == rec.StartTime.DayOfWeek) && (dtDay.Date >= rec.StartTime.Date)) { Schedule recNew = rec.Clone(); recNew.ScheduleType = (int)ScheduleRecordingType.Once; recNew.StartTime = new DateTime(dtDay.Year, dtDay.Month, dtDay.Day, rec.StartTime.Hour, rec.StartTime.Minute, 0); if (rec.EndTime.Day > rec.StartTime.Day) { dtDay = dtDay.AddDays(1); } recNew.EndTime = new DateTime(dtDay.Year, dtDay.Month, dtDay.Day, rec.EndTime.Hour, rec.EndTime.Minute, 0); if (rec.EndTime.Day > rec.StartTime.Day) { dtDay = dtDay.AddDays(-1); } recNew.Series = true; if (rec.IsSerieIsCanceled(recNew.StartTime)) { recNew.Canceled = recNew.StartTime; } if (recNew.StartTime >= DateTime.Now) { recordings.Add(recNew); } } dtDay = dtDay.AddDays(1); } return recordings; } #if(TV100) IList programs = rec.ScheduleType == (int)ScheduleRecordingType.EveryTimeOnThisChannel ? layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName, rec.ReferencedChannel()) : layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName, null); #elif(TV101 || TV11 || TV12) IList<Program> programs = rec.ScheduleType == (int)ScheduleRecordingType.EveryTimeOnThisChannel ? layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName, rec.ReferencedChannel()) : layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName, null); #endif foreach (Program prog in programs) { if (rec.IsRecordingProgram(prog, false)) { Schedule recNew = rec.Clone(); recNew.ScheduleType = (int)ScheduleRecordingType.Once; recNew.IdChannel = prog.IdChannel; recNew.StartTime = prog.StartTime; recNew.EndTime = prog.EndTime; recNew.Series = true; if (rec.IsSerieIsCanceled(recNew.StartTime)) { recNew.Canceled = recNew.StartTime; } recordings.Add(recNew); } } return recordings; }
private void LoadFromTvServer() {//load TvwishlistFolder and file namesfrom TvServer TvBusinessLayer layer = new TvBusinessLayer(); Setting setting; setting = layer.GetSetting("TvWishList_MachineName", "NONE"); HostComputer = setting.Value; //load Tvserver Version setting = layer.GetSetting("TvWishList_TvServerVersion", "0.0.0.0"); TvVersion = setting.Value; /*//TV_PROGRAM_FOLDER setting = layer.GetSetting("TvWishList_TV_PROGRAM_FOLDER", "NOT_DEFINED"); TV_PROGRAM_FOLDER = setting.Value;*/ }
public bool addsingleschedule(Program oneprogram, ref TvWish mywish, int counter) { /* string programName = oneprogram.Title; string description = oneprogram.Description; Int32 idChannel = oneprogram.IdChannel; DateTime startTime = oneprogram.StartTime; DateTime endTime = oneprogram.EndTime; */ TvBusinessLayer layer = new TvBusinessLayer(); #if(TV100) IList allschedules = Schedule.ListAll(); #elif(TV101 || TV11 || TV12) IList<Schedule> allschedules = Schedule.ListAll(); #endif int allschedules_before = allschedules.Count; // add new schedule Schedule schedule = null; try { schedule = layer.AddSchedule(oneprogram.IdChannel, oneprogram.Title, oneprogram.StartTime, oneprogram.EndTime, 0); schedule.PreRecordInterval = mywish.i_prerecord; schedule.PostRecordInterval = mywish.i_postrecord; schedule.ScheduleType = 0; schedule.Series = mywish.b_series; if (mywish.useFolderName == lng.TranslateString("Automatic", 2853)) //automatic seriesname with MP management { #if (TV12 || TV11) if ((oneprogram.EpisodePart != string.Empty) || (oneprogram.EpisodeName != string.Empty) || (oneprogram.SeriesNum != string.Empty) || (oneprogram.EpisodeNum != string.Empty)) #else if ((oneprogram.SeriesNum != string.Empty) || (oneprogram.EpisodeNum != string.Empty)) #endif { schedule.Series = true; LogDebug("schedule.Series changed to true for automatic", (int)LogSetting.DEBUG); } else { schedule.Series = false; LogDebug("schedule.Series changed to false for automatic", (int)LogSetting.DEBUG); } } LogDebug("schedule.Series=" + schedule.Series.ToString(), (int)LogSetting.DEBUG); schedule.KeepDate = mywish.D_keepuntil; schedule.KeepMethod = mywish.i_keepmethod; schedule.MaxAirings = mywish.i_keepepisodes; schedule.RecommendedCard = mywish.i_recommendedcard; schedule.Priority = mywish.i_priority; schedule.Persist(); } catch { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message = lng.TranslateString("Failed to add program {0}",60,oneprogram.Title); LogDebug(message, (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); mymessage.addmessage(oneprogram, message, MessageType.Conflict, mywish.name, (int)XmlMessages.MessageEvents.FAILED_ADDING, mywish.tvwishid, string.Empty); return false; } LogDebug("schedule created", (int)LogSetting.DEBUG); if (schedule == null) { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message = lng.TranslateString("Failed to create schedule for program {0}", 61, oneprogram.Title); LogDebug(message, (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); mymessage.addmessage(oneprogram, message, MessageType.Conflict, mywish.name, (int)XmlMessages.MessageEvents.FAILED_CREATE, mywish.tvwishid, string.Empty); return false; } #region schedule exists int allschedules_after = Schedule.ListAll().Count; LogDebug("allschedule", (int)LogSetting.DEBUG); if (allschedules_after == allschedules_before) //fatal BUG fixed: &&(VIEW_ONLY_MODE==false) existing schedule can be deleted afterewards { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message = lng.TranslateString("Program: {0} already scheduled", 62, oneprogram.Title); LogDebug(message, (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); // old: mymessage.addmessage(schedule, message, mywish.t_action, mywish.name, (int)XmlMessages.MessageEvents.SCHEDULE_FOUND, mywish.tvwishid); //only added if no other message did exist before do not change mymessage.addmessage(schedule, message, MessageType.Conflict, mywish.name, (int)XmlMessages.MessageEvents.FAILED_ADDING, mywish.tvwishid, string.Empty); //outputscheduletoresponse(schedule, (int)LogSetting.INFO); return false; } #endregion schedule exists #region filter days LogDebug("start filterfunctions", (int)LogSetting.DEBUG); // filter function only use schedules starting after after_days and ending before before_days if ((mywish.i_afterdays > -1) && (mywish.i_beforedays > -1)) { LogDebug("after_days= " + mywish.i_afterdays.ToString(), (int)LogSetting.DEBUG); LogDebug("before_days= " + mywish.i_beforedays.ToString(), (int)LogSetting.DEBUG); Int32 start_day = (int)oneprogram.StartTime.DayOfWeek; //changed to usage of start time only !!!!!!!!!!!!!!! //Int32 end_day = (int)endTime.DayOfWeek; Int32 end_day = (int)oneprogram.StartTime.DayOfWeek; LogDebug("start_day= " + start_day, (int)LogSetting.DEBUG); LogDebug("end_day= " + end_day, (int)LogSetting.DEBUG); if (mywish.i_beforedays >= mywish.i_afterdays) /* ------I-------------------------------------------------I------ * after before * start end * * start >= after && end <= before && end >= start * */ { //use regular timeinterval from after_days till before_days if ((start_day < mywish.i_afterdays) || (end_day > mywish.i_beforedays) || (end_day < start_day)) { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message =lng.TranslateString("Skipping program {0} because it is not between {1} and {2}",63, oneprogram.Title, ((DayOfWeek)mywish.i_afterdays).ToString() , ((DayOfWeek)mywish.i_beforedays).ToString()); LogDebug(message, (int)LogSetting.INFO); LogDebug("\nStart=" + oneprogram.StartTime.ToString(), (int)LogSetting.INFO); LogDebug("End=" + oneprogram.EndTime.ToString(), (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); mymessage.addmessage(oneprogram, message, MessageType.Conflict, mywish.name, (int)XmlMessages.MessageEvents.FILTER_MISMATCH, mywish.tvwishid, string.Empty); schedule.Delete(); return false; } } else if (mywish.i_beforedays < mywish.i_afterdays) /* 0:0 -----I-------------------------I------------------------I------ * after before * * 1) I start end I I start >= after && end >= after && end >= start * * * 2) I I start end I start <=before && end <= before && end >= start * * 3) I start I end I start >= after && end <= before && end <= start * * * */ { //use timeinterval from before_days till after_days bool doublecheck = false; if (((start_day >= mywish.i_afterdays) && (end_day >= mywish.i_afterdays) && (end_day >= start_day)) || ((start_day <= mywish.i_beforedays) && (end_day <= mywish.i_beforedays) && (end_day >= start_day)) || ((start_day >= mywish.i_afterdays) && (end_day <= mywish.i_beforedays) && (end_day <= start_day))) { doublecheck = true; } if (((start_day < mywish.i_afterdays) || (end_day < mywish.i_afterdays) || (end_day < start_day)) && ((start_day > mywish.i_beforedays) || (end_day > mywish.i_beforedays) || (end_day < start_day)) && ((start_day < mywish.i_afterdays) || (end_day > mywish.i_beforedays))) { if (doublecheck == true) { LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.ERROR); LogDebug("doublecheck failed check equation for days - please post logfile and contact huha", (int)LogSetting.ERROR); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.ERROR); } LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message = lng.TranslateString("Skipping program {0} because it is not between {1} and {2}",63, oneprogram.Title, ((DayOfWeek)mywish.i_afterdays).ToString() , ((DayOfWeek)mywish.i_beforedays).ToString() ); LogDebug(message, (int)LogSetting.INFO); LogDebug("\nStart=" + oneprogram.StartTime.ToString(), (int)LogSetting.INFO); LogDebug("End=" + oneprogram.EndTime.ToString(), (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); mymessage.addmessage(oneprogram, message, MessageType.Conflict, mywish.name, (int)XmlMessages.MessageEvents.FILTER_MISMATCH, mywish.tvwishid, string.Empty); schedule.Delete(); return false; } }// if (before_days == after_days) do nothing } #endregion filter days #region filter time LogDebug("afterhours filter", (int)LogSetting.DEBUG); // filter function only use schedules starting after hh:mm and ending before hh:mm if ((mywish.i_aftertime > -1) && (mywish.i_beforetime > -1)) { int start_time_minutes_all = oneprogram.StartTime.Hour * 60 + oneprogram.StartTime.Minute; int end_time_minutes_all = start_time_minutes_all; LogDebug("after_minutes= " + mywish.i_aftertime, (int)LogSetting.DEBUG); LogDebug("before_minutes= " + mywish.i_beforetime, (int)LogSetting.DEBUG); LogDebug("start_time_minutes= " + start_time_minutes_all, (int)LogSetting.DEBUG); LogDebug("end_time_minutes= " + end_time_minutes_all, (int)LogSetting.DEBUG); if (mywish.i_beforetime >= mywish.i_aftertime) /* ------I-------------------------------------------------I------ * after before * start end * * start >= after && end <= before && end >= start * */ { //use regular timeinterval from after_minutes till before_minutes if ((start_time_minutes_all < mywish.i_aftertime) || (end_time_minutes_all > mywish.i_beforetime) || (end_time_minutes_all < start_time_minutes_all)) { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message = lng.TranslateString("Skipping program {0} because it is not between {1} and {2}",64, oneprogram.Title, mywish.aftertime , mywish.beforetime); message+="\nStart=" + oneprogram.StartTime.ToString(); LogDebug(message, (int)LogSetting.INFO); LogDebug("End=" + oneprogram.EndTime.ToString(), (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); mymessage.addmessage(oneprogram, message, MessageType.Conflict, mywish.name, (int)XmlMessages.MessageEvents.FILTER_MISMATCH, mywish.tvwishid, string.Empty); schedule.Delete(); return false; } } else if (mywish.i_beforetime < mywish.i_aftertime) /* 0:0 -----I-------------------------I------------------------I------ * after before * * 1) I start end I I start >= after && end >= after && end >= start * * * 2) I I start end I start <=before && end <= before && end >= start * * 3) I start I end I start >= after && end <= before && end <= start * * * */ { //use timeinterval from after_minutes till 23:59 and from 00:00 till before_minutes bool doublecheck = false; if (((start_time_minutes_all >= mywish.i_aftertime) && (end_time_minutes_all >= mywish.i_aftertime) && (end_time_minutes_all >= start_time_minutes_all)) || ((start_time_minutes_all <= mywish.i_beforetime) && (end_time_minutes_all <= mywish.i_beforetime) && (end_time_minutes_all >= start_time_minutes_all)) || ((start_time_minutes_all >= mywish.i_aftertime) && (end_time_minutes_all <= mywish.i_beforetime) && (end_time_minutes_all <= start_time_minutes_all))) { doublecheck = true; } //if (((start_time_minutes_all < mywish.i_aftertime) && (start_time_minutes_all > mywish.i_beforetime)) || ((end_time_minutes_all > mywish.i_beforetime) && (end_time_minutes_all < mywish.i_aftertime))) if ( ( (start_time_minutes_all < mywish.i_aftertime)||(end_time_minutes_all < mywish.i_aftertime)||(end_time_minutes_all < start_time_minutes_all) ) && ( (start_time_minutes_all > mywish.i_beforetime)||(end_time_minutes_all > mywish.i_beforetime)||(end_time_minutes_all < start_time_minutes_all) ) && ( (start_time_minutes_all < mywish.i_aftertime)||(end_time_minutes_all > mywish.i_beforetime) ) ) { if (doublecheck == true) { LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.ERROR); LogDebug("doublecheck failed check equation for minutes - please post logfile and contact huha", (int)LogSetting.ERROR); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.ERROR); } LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message = lng.TranslateString("Skipping program {0} because it is not between {1} and {2}",64,oneprogram.Title, mywish.aftertime , mywish.beforetime); message+="\nStart=" + oneprogram.StartTime.ToString(); LogDebug(message, (int)LogSetting.INFO); LogDebug("End=" + oneprogram.EndTime.ToString(), (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); mymessage.addmessage(oneprogram, message, MessageType.Conflict, mywish.name, (int)XmlMessages.MessageEvents.FILTER_MISMATCH, mywish.tvwishid, string.Empty); schedule.Delete(); return false; } }// if (before_minutes == after_minutes) do nothing } #endregion filter time #region within next hours LogDebug("start WithinNextHours", (int)LogSetting.DEBUG); if (mywish.i_withinNextHours > 0) { DateTime myNextDateTime = DateTime.Now; myNextDateTime = myNextDateTime.AddHours(mywish.i_withinNextHours); if (oneprogram.StartTime > myNextDateTime) { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); lng.TranslateString(message = "Skipping program {0} because it is not within the next {1} hours", 65, oneprogram.Title,mywish.i_withinNextHours.ToString()); message+="\nStart=" + oneprogram.StartTime.ToString(); LogDebug(message, (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); mymessage.addmessage(oneprogram, message, MessageType.Conflict, mywish.name, (int)XmlMessages.MessageEvents.FILTER_MISMATCH, mywish.tvwishid, string.Empty); schedule.Delete(); return false; } } #endregion within next hours #region channelfilter LogDebug("start channelfilter", (int)LogSetting.DEBUG); //filter one specific channel if (mywish.channel != "") { Channel channel = null; string channelname = ""; try //must use try due to in bug in map.ReferencedChannelGroup() - caused exception before { //search for TV group match channel = schedule.ReferencedChannel(); channelname = channel.DisplayName; } catch { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); LogDebug("Error: could not retrieve channel name for program " + schedule.ProgramName, (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); channelname = ""; } LogDebug("channelname=" + channelname, (int)LogSetting.DEBUG); LogDebug("channelfilter=" + mywish.channel, (int)LogSetting.DEBUG); if ((mywish.channel != channelname)&&(mywish.channel != lng.TranslateString("Any",4100))) { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message = lng.TranslateString("Skipping program {0} because it does not match the required channel filter {1}",66, oneprogram.Title, mywish.channel); LogDebug(message, (int)LogSetting.INFO); LogDebug("\nChannelname=" + channelname, (int)LogSetting.INFO); LogDebug("\nStart=" + oneprogram.StartTime.ToString(), (int)LogSetting.INFO); LogDebug("End=" + oneprogram.EndTime.ToString(), (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); mymessage.addmessage(oneprogram, message, MessageType.Conflict, mywish.name, (int)XmlMessages.MessageEvents.FILTER_MISMATCH, mywish.tvwishid, string.Empty); schedule.Delete(); return false; } } #endregion channelfilter #if (TV12) #region filter episode part //filter episode part LogDebug("start filterepisode part", (int)LogSetting.DEBUG); if (mywish.episodepart != "") { if (mywish.episodepart.ToUpper() != oneprogram.EpisodePart.ToUpper()) { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message = lng.TranslateString("Skipping program {0} because it does not match the required episode part {1}",67,oneprogram.Title,mywish.episodepart); LogDebug(message, (int)LogSetting.INFO); LogDebug("\nStart=" + oneprogram.StartTime.ToString(), (int)LogSetting.INFO); LogDebug("\nEnd=" + oneprogram.EndTime.ToString(), (int)LogSetting.INFO); LogDebug("\nEpisodepart=" + oneprogram.EpisodePart, (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); mymessage.addmessage(oneprogram, message, MessageType.Conflict, mywish.name, (int)XmlMessages.MessageEvents.FILTER_MISMATCH, mywish.tvwishid, string.Empty); schedule.Delete(); return false; } } #endregion filter episode part #region filter episode name //filter episode name LogDebug("start filterepisodename", (int)LogSetting.DEBUG); if (mywish.episodename != "") { if (mywish.episodename.ToUpper() != oneprogram.EpisodeName.ToUpper()) { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message = lng.TranslateString("Skipping program {0} because it does not match the required episode name {1}",68, oneprogram.Title, mywish.episodename); LogDebug(message, (int)LogSetting.INFO); LogDebug("\nStart=" + oneprogram.StartTime.ToString(), (int)LogSetting.INFO); LogDebug("\nEnd=" + oneprogram.EndTime.ToString(), (int)LogSetting.INFO); LogDebug("\nEpisodeName=" + oneprogram.EpisodeName, (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); mymessage.addmessage(oneprogram, message, MessageType.Conflict, mywish.name, (int)XmlMessages.MessageEvents.FILTER_MISMATCH, mywish.tvwishid, string.Empty); schedule.Delete(); return false; } } #endregion filter episode name #region filter series number //filter series number LogDebug("start filterseries", (int)LogSetting.DEBUG); if ((mywish.seriesnumber != "") && (oneprogram.SeriesNum != "")) { try { string[] tokens = oneprogram.SeriesNum.Split('\\','/'); Log.Debug("tokens[0]=" + tokens[0]); int programNumber = -1; int.TryParse(tokens[0], out programNumber); Log.Debug("programNumber=" + programNumber.ToString()); //process expressions bool expression = false; string[] expressionArray = mywish.seriesnumber.Split(','); foreach (string myExpression in expressionArray) { if (myExpression.Contains("-") == true) { string[] numberarray = myExpression.Split('-'); Log.Debug("numberarray.Length=" + numberarray.Length.ToString()); if (numberarray.Length == 2) { if ((numberarray[0] == string.Empty) || (numberarray[1] == string.Empty)) { // a- or -a Log.Debug("a- or -a case"); string temp = myExpression.Replace("-", string.Empty); int maxValue = 0; int.TryParse(temp, out maxValue); Log.Debug("Expression = " + mywish.seriesnumber + " maxValue=" + maxValue.ToString()); if (programNumber <= maxValue) { expression = true; Log.Debug("Found match in expression " + myExpression); break; } } else //a-b { int minValue = 0; int.TryParse(numberarray[0], out minValue); Log.Debug("Expression = " + mywish.seriesnumber + " minValue=" + minValue.ToString()); int maxValue = 0; int.TryParse(numberarray[1], out maxValue); Log.Debug("Expression = " + mywish.seriesnumber + " maxValue=" + maxValue.ToString()); if ((programNumber >= minValue) && (programNumber <= maxValue)) { expression = true; Log.Debug("Found match in expression " + myExpression); break; } } } else { Log.Error("Ignoring invalid expression " + myExpression); break; } } else if (myExpression.Contains("+") == true) { string temp = myExpression.Replace("+", string.Empty); int minValue = 0; int.TryParse(temp, out minValue); Log.Debug("Expression = " + mywish.seriesnumber + " minValue=" + minValue.ToString()); if (programNumber >= minValue) { expression = true; Log.Debug("Found match in expression " + myExpression); break; } } else { int minValue = 0; int.TryParse(myExpression, out minValue); Log.Debug("Expression = " + mywish.seriesnumber + " intValue=" + minValue.ToString()); if (programNumber == minValue) { expression = true; Log.Debug("Found match in expression " + myExpression); break; } } } if (expression == false) //skip incorrect numbers { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message = lng.TranslateString("Skipping program {0} because it is not matching the required series number {1}",69, oneprogram.Title,mywish.seriesnumber); LogDebug(message, (int)LogSetting.INFO); LogDebug("Start=" + oneprogram.StartTime.ToString(), (int)LogSetting.INFO); LogDebug("End=" + oneprogram.EndTime.ToString(), (int)LogSetting.INFO); LogDebug("Seriesnumber=" + oneprogram.SeriesNum, (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); mymessage.addmessage(oneprogram, message, MessageType.Conflict, mywish.name, (int)XmlMessages.MessageEvents.FILTER_MISMATCH, mywish.tvwishid, string.Empty); schedule.Delete(); return false; } } catch (Exception exc) { //ignore errors LogDebug("Exception in filter series number - Message=" + exc.Message, (int)LogSetting.ERROR); string languagetext = lng.TranslateString("Fatal error - check the log file", 24); labelmessage(languagetext, PipeCommands.StartEpg); //do not stop - do not flag as error Thread.Sleep(ErrorWaitTime); } } #endregion filter series number #region filter episode number //filter episode number LogDebug("start filter episode number", (int)LogSetting.DEBUG); if ((mywish.episodenumber != "") && (oneprogram.EpisodeNum != "")) { try { string[] tokens = oneprogram.EpisodeNum.Split('\\', '/'); Log.Debug("tokens[0]=" + tokens[0]); int programNumber = 0; int.TryParse(tokens[0], out programNumber); Log.Debug("programNumber=" + programNumber.ToString()); //process expressions bool expression = false; string[] expressionArray = mywish.episodenumber.Split(','); foreach (string myExpression in expressionArray) { if (myExpression.Contains("-") == true) { string[] numberarray = myExpression.Split('-'); if (numberarray.Length == 2) { if ((numberarray[0] == string.Empty) || (numberarray[1] == string.Empty)) { // a- or -a Log.Debug("a- or -a case"); string temp = myExpression.Replace("-", string.Empty); int maxValue = 0; int.TryParse(temp, out maxValue); Log.Debug("Expression = " + mywish.episodenumber + " maxValue=" + maxValue.ToString()); if (programNumber <= maxValue) { expression = true; Log.Debug("Found match in expression " + myExpression); break; } } else //a-b { int minValue = 0; int.TryParse(numberarray[0], out minValue); Log.Debug("Expression = " + mywish.episodenumber + " minValue=" + minValue.ToString()); int maxValue = 0; int.TryParse(numberarray[1], out maxValue); Log.Debug("Expression = " + mywish.episodenumber + " maxValue=" + maxValue.ToString()); if ((programNumber >= minValue) && (programNumber <= maxValue)) { expression = true; Log.Debug("Found match in expression " + myExpression); break; } } } else { Log.Error("Ignoring invalid expression " + myExpression); break; } } else if (myExpression.Contains("+") == true) { string temp = myExpression.Replace("+", string.Empty); int minValue = 0; int.TryParse(temp, out minValue); Log.Debug("Expression = " + mywish.episodenumber + " intValue2=" + minValue.ToString()); if (programNumber >= minValue) { expression = true; Log.Debug("Found match in expression " + myExpression); break; } } else { int minValue = 0; int.TryParse(myExpression, out minValue); Log.Debug("Expression = " + mywish.episodenumber + " intValue=" + minValue.ToString()); if (programNumber == minValue) { expression = true; Log.Debug("Found match in expression " + myExpression); break; } } } if (expression == false) //skip incorrect numbers { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message = lng.TranslateString("Skipping program {0} because it is not matching the required episode number {1}",70, oneprogram.Title, mywish.episodenumber); LogDebug(message, (int)LogSetting.INFO); LogDebug("Start=" + oneprogram.StartTime.ToString(), (int)LogSetting.INFO); LogDebug("End=" + oneprogram.EndTime.ToString(), (int)LogSetting.INFO); LogDebug("Episodenumber=" + oneprogram.EpisodeNum, (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); mymessage.addmessage(oneprogram, message, MessageType.Conflict, mywish.name, (int)XmlMessages.MessageEvents.FILTER_MISMATCH, mywish.tvwishid, string.Empty); schedule.Delete(); return false; } } catch (Exception exc) { //ignore errors LogDebug("Exception in filter episode number - Message=" + exc.Message, (int)LogSetting.ERROR); string languagetext = lng.TranslateString("Fatal error - check the log file", 24); labelmessage(languagetext, PipeCommands.StartEpg); //do not stop - do not flag as error Thread.Sleep(ErrorWaitTime); } } #endregion filter episode number #endif //start checking for repeated and convert to upper string programNameRpt = ProcessEpgMarker(oneprogram.Title); string descriptionRpt = ProcessEpgMarker(oneprogram.Description); /*string programNameRpt = oneprogram.Title.ToUpper(); try { programNameRpt = programNameRpt.Replace(_EpgMarker.ToUpper(), ""); } catch { //ignore errors } string descriptionRpt = oneprogram.Description.ToUpper(); try { descriptionRpt = descriptionRpt.Replace(_EpgMarker.ToUpper(), ""); } catch { //ignore errors }*/ LogDebug("programNameRpt=" + programNameRpt, (int)LogSetting.DEBUG); LogDebug("descriptionRpt=" + descriptionRpt, (int)LogSetting.DEBUG); #region recording exist //check for existing recording of same title and description if (mywish.b_skip == true) { foreach (Recording onerecording in Recording.ListAll()) { Log.Debug("Recording=" + onerecording.Title); string recordedTitle = ProcessEpgMarker(onerecording.Title); string recordedDescription = ProcessEpgMarker(onerecording.Description); /*string recordedTitle = onerecording.Title.ToUpper(); try { recordedTitle = recordedTitle.Replace(_EpgMarker.ToUpper(), ""); } catch { //ignore errors } string recordedDescription = onerecording.Description.ToUpper(); try { recordedDescription = recordedDescription.Replace(_EpgMarker.ToUpper(), ""); } catch { //ignore errors }*/ //LogDebug("recordedDescription=" + recordedDescription, (int)LogSetting.DEBUG); //LogDebug("descriptionRpt=" + descriptionRpt, (int)LogSetting.DEBUG); if (recordedTitle != programNameRpt) continue; //new: added for speedup do not do episodemanagament if title does not match #if(TV100 || TV101) //bool ok = episodeManagement(recordedDescription, descriptionRpt, "", "", "", "", "", oneprogram.SeriesNum, "", oneprogram.EpisodeNum, _episode_d, local_episode_n, local_episode_m); bool ok = episodeManagement(recordedDescription, descriptionRpt, "", "", "", "", "", oneprogram.SeriesNum, "", oneprogram.EpisodeNum, mywish.b_episodecriteria_d, mywish.b_episodecriteria_n, mywish.b_episodecriteria_c); #elif(TV11) //bool ok = episodeManagement(recordedDescription, descriptionRpt, onerecording.EpisodePart, oneprogram.EpisodePart, onerecording.EpisodeName, oneprogram.EpisodeName, onerecording.SeriesNum, oneprogram.SeriesNum, onerecording.EpisodeNum, oneprogram.EpisodeNum, _episode_d, local_episode_n, local_episode_m); bool ok = episodeManagement(recordedDescription, descriptionRpt, onerecording.EpisodePart, oneprogram.EpisodePart, onerecording.EpisodeName, oneprogram.EpisodeName, onerecording.SeriesNum, oneprogram.SeriesNum, onerecording.EpisodeNum, oneprogram.EpisodeNum, mywish.b_episodecriteria_d, mywish.b_episodecriteria_n, mywish.b_episodecriteria_c); #elif(TV12) //bool ok = episodeManagement(recordedDescription, descriptionRpt, onerecording.EpisodePart, oneprogram.EpisodePart, onerecording.EpisodeName, oneprogram.EpisodeName, onerecording.SeriesNum, oneprogram.SeriesNum, onerecording.EpisodeNum, oneprogram.EpisodeNum, mywish.b_episodecriteria_a, mywish.b_episodecriteria_d, mywish.b_episodecriteria_p, mywish.b_episodecriteria_n, mywish.b_episodecriteria_c); bool ok = episodeManagement(recordedDescription, descriptionRpt, onerecording.EpisodePart, oneprogram.EpisodePart, onerecording.EpisodeName, oneprogram.EpisodeName, onerecording.SeriesNum, oneprogram.SeriesNum, onerecording.EpisodeNum, oneprogram.EpisodeNum, mywish.b_episodecriteria_d, mywish.b_episodecriteria_n, mywish.b_episodecriteria_c); #endif if ((VIEW_ONLY_MODE == false) && (recordedTitle == programNameRpt) && (ok == true)) { //check for preferred group bool old1 = IsChannelInGroup(onerecording.IdChannel, mywish.preferredgroup); bool old2 = IsRadioChannelInGroup(onerecording.IdChannel, mywish.preferredgroup); bool new1 = IsChannelInGroup(oneprogram.IdChannel, mywish.preferredgroup); bool new2 = IsRadioChannelInGroup(oneprogram.IdChannel, mywish.preferredgroup); bool expression = (!new1 && !new2) || old1 || old2; Log.Debug("old1=" + old1.ToString(), (int)LogSetting.DEBUG); Log.Debug("old2=" + old2.ToString(), (int)LogSetting.DEBUG); Log.Debug("new1=" + new1.ToString(), (int)LogSetting.DEBUG); Log.Debug("new2=" + new2.ToString(), (int)LogSetting.DEBUG); Log.Debug("expression=" + expression.ToString(), (int)LogSetting.DEBUG); Log.Debug("mywish.b_includeRecordings=" + mywish.b_includeRecordings.ToString(), (int)LogSetting.DEBUG); if (!mywish.b_includeRecordings || (mywish.preferredgroup==lng.TranslateString("All Channels",4104)) || expression) //preferred group only if includeRecordings==true { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); //do not send reply mail for already scheduled movies message = lng.TranslateString("Program: {0} already recorded",71,oneprogram.Title); LogDebug(message, (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); outputscheduletoresponse(schedule, (int)LogSetting.INFO); mymessage.addmessage(oneprogram, message, MessageType.Conflict, mywish.name, (int)XmlMessages.MessageEvents.ALREADY_RECORDED, mywish.tvwishid, string.Empty); schedule.Delete(); return false; } else { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); //do not send reply mail for already scheduled movies LogDebug("Warning: Program: " + oneprogram.Title + " already recorded, but not in preferred group - will try again", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); } } } } #endregion recording exist #region skip deleted entries in messages //skip deleted entries in messages if found again if ((mywish.b_skip == true) && (_skipDeleted == true)) { foreach (xmlmessage singlemessage in mymessage.ListAllTvMessages()) { if (singlemessage.type == MessageType.Deleted.ToString()) { string title = ProcessEpgMarker(singlemessage.title); string messageDescription = ProcessEpgMarker(singlemessage.description); /*string title = singlemessage.title.ToUpper(); try { title = title.Replace(_EpgMarker.ToUpper(), ""); } catch { //ignore errors } string messageDescription = singlemessage.description.ToUpper(); try { messageDescription = messageDescription.Replace(_EpgMarker.ToUpper(), ""); } catch { //ignore errors }*/ //LogDebug("onerecording.Description=" + onerecording.Description, (int)LogSetting.DEBUG); //LogDebug("onerecording.Description=" + onerecording.Description, (int)LogSetting.DEBUG); if (title != programNameRpt) continue; //new. added for speedup - ignore if title does not match and do not do episodemanagement #if(TV100 || TV101) //bool ok = episodeManagement(messageDescription, descriptionRpt, "", "", "", "", "", oneprogram.SeriesNum, "", oneprogram.EpisodeNum, _episode_d, local_episode_n, local_episode_m); bool ok = episodeManagement(messageDescription, descriptionRpt, "", "", "", "", "", oneprogram.SeriesNum, "", oneprogram.EpisodeNum, mywish.b_episodecriteria_d, mywish.b_episodecriteria_n, mywish.b_episodecriteria_c); #elif(TV11) //bool ok = episodeManagement(messageDescription, descriptionRpt, singlemessage.EpisodePart, oneprogram.EpisodePart, singlemessage.EpisodeName, oneprogram.EpisodeName, singlemessage.SeriesNum, oneprogram.SeriesNum, singlemessage.EpisodeNum, oneprogram.EpisodeNum, _episode_d, local_episode_n, local_episode_m); bool ok = episodeManagement(messageDescription, descriptionRpt, singlemessage.EpisodePart, oneprogram.EpisodePart, singlemessage.EpisodeName, oneprogram.EpisodeName, singlemessage.SeriesNum, oneprogram.SeriesNum, singlemessage.EpisodeNum, oneprogram.EpisodeNum, mywish.b_episodecriteria_d, mywish.b_episodecriteria_n, mywish.b_episodecriteria_c); #elif(TV12) //bool ok = episodeManagement(messageDescription, descriptionRpt, singlemessage.EpisodePart, oneprogram.EpisodePart, singlemessage.EpisodeName, oneprogram.EpisodeName, singlemessage.SeriesNum, oneprogram.SeriesNum, singlemessage.EpisodeNum, oneprogram.EpisodeNum, mywish.b_episodecriteria_a, mywish.b_episodecriteria_d, mywish.b_episodecriteria_p, mywish.b_episodecriteria_n, mywish.b_episodecriteria_c); bool ok = episodeManagement(messageDescription, descriptionRpt, singlemessage.EpisodePart, oneprogram.EpisodePart, singlemessage.EpisodeName, oneprogram.EpisodeName, singlemessage.SeriesNum, oneprogram.SeriesNum, singlemessage.EpisodeNum, oneprogram.EpisodeNum, mywish.b_episodecriteria_d, mywish.b_episodecriteria_n, mywish.b_episodecriteria_c); #endif if ((VIEW_ONLY_MODE == false) && (title == programNameRpt) && (ok == true)) { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); //do not send reply mail for already scheduled movies message = lng.TranslateString("Program: {0} has been already deleted and is skipped",72,oneprogram.Title); LogDebug(message, (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); outputscheduletoresponse(schedule, (int)LogSetting.INFO); mymessage.addmessage(oneprogram, message, MessageType.Conflict, mywish.name, (int)XmlMessages.MessageEvents.REPEATED_FOUND, mywish.tvwishid, string.Empty); schedule.Delete(); return false; } } } }//end skip deleted entries in messages if found again #endregion skip deleted entries in messages #region skip entries from the past //skip entries from the past if ((schedule.StartTime < DateTime.Now) && (schedule.ScheduleType == 0) && (VIEW_ONLY_MODE == false)) //old date, but only for type "ONCE" and Email/Recording mode { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message = lng.TranslateString("Start time of program {0} is in the past - will skip schedule",73,oneprogram.Title); LogDebug(message, (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); mymessage.addmessage(oneprogram, message, MessageType.Conflict, mywish.name, (int)XmlMessages.MessageEvents.FILTER_MISMATCH, mywish.tvwishid, string.Empty); schedule.Delete(); return false; } #endregion skip entries from the past Schedule nonPreferredGroupSchedule = null; #region Check for repeated schedules (1st) if ((mywish.b_skip == true)&&(VIEW_ONLY_MODE == false)) // 1st {//Check for repeated schedules of same title and description foreach (Schedule myschedule in allschedules) { string myscheduleProgramName = ProcessEpgMarker(myschedule.ProgramName); /*string myscheduleProgramName = myschedule.ProgramName.ToUpper(); try { myscheduleProgramName = myscheduleProgramName.Replace(_EpgMarker.ToUpper(), ""); } catch { //ignore errors }*/ //check for identical description LogDebug("check for identical description", (int)LogSetting.DEBUG); //retrieve Program from Schedule #if(TV100 || TV101) Program myprogram = Program.RetrieveByTitleAndTimes(myschedule.ProgramName, myschedule.StartTime, myschedule.EndTime); #elif(TV11 || TV12) Program myprogram = Program.RetrieveByTitleTimesAndChannel(myschedule.ProgramName, myschedule.StartTime, myschedule.EndTime, myschedule.IdChannel); #endif if (myprogram != null) { string myprogramDescription = ProcessEpgMarker(myprogram.Description); /*string myprogramDescription = myprogram.Description.ToUpper(); try { myprogramDescription = myprogramDescription.Replace(_EpgMarker.ToUpper(), ""); } catch { //ignore errors }*/ //compare episodes #if(TV100 || TV101) bool ok = episodeManagement(myprogramDescription, descriptionRpt, "", "", "", "", myprogram.SeriesNum, oneprogram.SeriesNum, myprogram.EpisodeNum, oneprogram.EpisodeNum, mywish.b_episodecriteria_d, mywish.b_episodecriteria_n, mywish.b_episodecriteria_c); #elif(TV11) bool ok = episodeManagement(myprogramDescription, descriptionRpt, myprogram.EpisodePart, oneprogram.EpisodePart, myprogram.EpisodeName, oneprogram.EpisodeName, myprogram.SeriesNum, oneprogram.SeriesNum, myprogram.EpisodeNum, oneprogram.EpisodeNum, mywish.b_episodecriteria_d, mywish.b_episodecriteria_n, mywish.b_episodecriteria_c); #elif(TV12) bool ok = episodeManagement(myprogramDescription, descriptionRpt, myprogram.EpisodePart, oneprogram.EpisodePart, myprogram.EpisodeName, oneprogram.EpisodeName, myprogram.SeriesNum, oneprogram.SeriesNum, myprogram.EpisodeNum, oneprogram.EpisodeNum, mywish.b_episodecriteria_d, mywish.b_episodecriteria_n, mywish.b_episodecriteria_c); #endif if ((VIEW_ONLY_MODE == false) && (ok == true) && (myprogram.Title.ToUpper() == oneprogram.Title.ToUpper()) ) //old bug fixed need to compare title!!! {//schedules do match -> repeated schedule Log.Debug("mywish.preferredgroup=" + mywish.preferredgroup, (int)LogSetting.DEBUG); bool old1 = IsChannelInGroup(myschedule.IdChannel, mywish.preferredgroup); bool old2 = IsRadioChannelInGroup(myschedule.IdChannel, mywish.preferredgroup); bool new1 = IsChannelInGroup(oneprogram.IdChannel, mywish.preferredgroup); bool new2 = IsRadioChannelInGroup(oneprogram.IdChannel, mywish.preferredgroup); bool expression = (!new1 && !new2) || old1 || old2; Log.Debug("old1=" + old1.ToString(), (int)LogSetting.DEBUG); Log.Debug("old2=" + old2.ToString(), (int)LogSetting.DEBUG); Log.Debug("new1=" + new1.ToString(), (int)LogSetting.DEBUG); Log.Debug("new2=" + new2.ToString(), (int)LogSetting.DEBUG); Log.Debug("expression=" + expression.ToString(), (int)LogSetting.DEBUG); if ((mywish.preferredgroup == lng.TranslateString("All Channels",4104)) || expression) { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message = lng.TranslateString("Repeated Schedule {0} found - skipping",74,oneprogram.Title); LogDebug(message, (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); LogDebug("Old Schedule:", (int)LogSetting.INFO); outputscheduletoresponse(myschedule, (int)LogSetting.INFO); mymessage.addmessage(oneprogram, message, MessageType.Conflict, mywish.name, (int)XmlMessages.MessageEvents.REPEATED_FOUND, mywish.tvwishid, string.Empty); schedule.Delete(); return false; } else { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); LogDebug("Repeated Schedule " + oneprogram.Title + " found with same title, but not in preferred group - will try again", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); if ((_automaticrecording == true) && (mywish.action != lng.TranslateString("Email",2701)) && (mywish.action != lng.TranslateString("View",2703))) //schedule new recording { Log.Debug("Storing as nonPreferredGroupSchedule old schedule not in preferred group"); nonPreferredGroupSchedule = myschedule; //will be deleted later } } }//end schedules do match -> repeated schedule }//end (myprogram != null) }//end all schedules loop }//end skip repeated schedules #endregion Check for repeated schedules (1st) #region Check For Conflicts (2nd) // Check for conflicts (2nd) LogDebug("check for conflicts", (int)LogSetting.DEBUG); if ((VIEW_ONLY_MODE == false)&& (_scheduleconflicts == false)) //scheduleconflicts = true will trigger priority processing { #if(MPTV2) IList<Schedule> conflict_schedules = Schedule.GetConflictingSchedules(schedule); #else IList<Schedule> conflict_schedules = GetAllConflictSchedules(schedule, nonPreferredGroupSchedule); #endif int conflict_count = conflict_schedules.Count; if (conflict_count > 0) { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); //do not send reply mail for already scheduled movies message = lng.TranslateString("Program: {0} has conflicts and will not be scheduled",75,oneprogram.Title); LogDebug(message, (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); outputscheduletoresponse(schedule, (int)LogSetting.INFO); //conflictprograms.Add(oneprogram); mymessage.addmessage(oneprogram, message, MessageType.Conflict, mywish.name, (int)XmlMessages.MessageEvents.MANUAL_CONFLICT, mywish.tvwishid, string.Empty); Log.Debug("Schedule number before deleting"+Schedule.ListAll().Count.ToString()); schedule.Delete(); Log.Debug("Schedule number after deleting" + Schedule.ListAll().Count.ToString()); return false; } } #endregion Check For Conflicts (2nd) #region PriorityProcessing (3rd) //priority processing 3rd if schedule conflicts==true, must come after conflicts LogDebug("start priorityprocessing", (int)LogSetting.DEBUG); if ((_scheduleconflicts == true) && (_automaticrecording == true) && (mywish.action != lng.TranslateString("Email", 2701)) && (VIEW_ONLY_MODE == false)) { IList<Schedule> allconflicts = GetAllConflictSchedules(schedule, nonPreferredGroupSchedule); LogDebug("allconflicts.Count=" + allconflicts.Count.ToString(), (int)LogSetting.DEBUG); while (allconflicts.Count > 0) //loop until all conflicts are resolved { bool foundflag = false; foreach (Schedule conflictschedule in allconflicts) //only one conflict will be removed (break statements prevents complete loop) { LogDebug("schedule.Priority=" + schedule.Priority.ToString(), (int)LogSetting.DEBUG); LogDebug("conflictschedule.ProgramName=" + conflictschedule.ProgramName.ToString(), (int)LogSetting.DEBUG); LogDebug("conflictschedule.Priority=" + conflictschedule.Priority.ToString(), (int)LogSetting.DEBUG); if (conflictschedule.Priority < schedule.Priority) { //delete conflicting schedule and send message LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message = lng.TranslateString("Deleting schedule {0} because of lower priority",76,conflictschedule.ProgramName); LogDebug(message, (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); mymessage.addmessage(conflictschedule, message, MessageType.Conflict, mywish.name, (int)XmlMessages.MessageEvents.LOW_PRIORITY_DELETE, mywish.tvwishid, string.Empty); //checked above to avoid email or viewonly Log.Debug("Changing message for old schedule to conflict"); int index = mymessage.GetTvMessageBySchedule(conflictschedule,MessageType.Scheduled); if (index >= 0) { xmlmessage changemessage = mymessage.GetTvMessageAtIndex(index); changemessage.message = "Deleting schedule with lower priority"; changemessage.type = MessageType.Conflict.ToString(); mymessage.ReplaceTvMessageAtIndex(index, changemessage); } Log.Debug("Deleting schedule with lower priority"); conflictschedule.Delete(); mywish.i_scheduled--; foundflag = true; break; //only one conflict deletion should fix it } }//end loop all conflicting schedules for priority processing if (foundflag == false) //skip schedule due to not high enough priority { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message = lng.TranslateString("Schedule {0} has not enough priority to delete conflicts - skipping",77,oneprogram.Title); LogDebug(message, (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); outputprogramresponse(oneprogram, (int)LogSetting.INFO); mymessage.addmessage(oneprogram, message, MessageType.Conflict, mywish.name, (int)XmlMessages.MessageEvents.LOW_PRIORITY_DELETE, mywish.tvwishid, string.Empty); schedule.Delete(); return false; } //check for additional conflicts and rerun loop allconflicts = GetAllConflictSchedules(schedule, nonPreferredGroupSchedule); }//end conflicts do exist for priority processing while (allconflicts.Count > 0) } //end priority processing #endregion PriorityProcessing (3rd) #region delete nonpreferred group schedule (4th) //delete nonpreferred schedule as it is now sure that the preferred group schedule will be scheduled if (nonPreferredGroupSchedule != null) { //delete message for nonpreferred group schedule Log.Debug("Changing message for old schedule to conflict"); int index = mymessage.GetTvMessageBySchedule(nonPreferredGroupSchedule,MessageType.Scheduled); if (index >= 0) { xmlmessage changemessage = mymessage.GetTvMessageAtIndex(index); changemessage.message = lng.TranslateString("Better Schedule Found In Preferred Group",78); changemessage.type = MessageType.Conflict.ToString(); mymessage.ReplaceTvMessageAtIndex(index, changemessage); } LogDebug("Deleting nonPreferredGroupSchedule title=" + nonPreferredGroupSchedule.ProgramName, (int)LogSetting.DEBUG); nonPreferredGroupSchedule.Delete(); mywish.i_scheduled--; } #endregion delete nonpreferred schedule (4th) //do not insert new code here #region success: schedule and/or email //success: schedule and/or email if ((_automaticrecording == true) && (mywish.action != lng.TranslateString("Email", 2701)) && (mywish.action != lng.TranslateString("View", 2703))) //schedule new recording { LogDebug("", (int)LogSetting.INFO); LogDebug("*******************************************************************************\n", (int)LogSetting.INFO); message = lng.TranslateString("TvWishList found program from Tv Wish [{0}]: {1}\nTvWishList did schedule the program", 79, (counter + 1).ToString(), mywish.name); LogDebug(message, (int)LogSetting.INFO); LogDebug("*******************************************************************************\n", (int)LogSetting.INFO); mymessage.addmessage(schedule, message, mywish.t_action, mywish.name, (int)XmlMessages.MessageEvents.SCHEDULE_FOUND, mywish.tvwishid, string.Empty); outputscheduletoresponse(schedule, (int)LogSetting.DEBUG); LogDebug("End of new schedule", (int)LogSetting.INFO); //mywish.i_scheduled++; if (mywish.i_keepuntil > 0) //handle days for keepuntil and convert back to date after schedule has been found { schedule.KeepDate = DateTime.Now.AddDays(mywish.i_keepuntil); schedule.Persist(); } if (mywish.b_useFoldername) //add folder move of recording { if ((schedule.ProgramName.Contains(@"\")) || (mywish.name.Contains(@"\"))) { LogDebug("", (int)LogSetting.ADDRESPONSE); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.ADDRESPONSE); LogDebug("Failed to add folder " + schedule.ProgramName + " because program and name must not contain \" \\\"", (int)LogSetting.ADDRESPONSE); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.ADDRESPONSE); } else { //create new xml file for renaming recorded filename try { XmlDocument xmlDoc = new XmlDocument(); string filename = TV_USER_FOLDER + @"\TvWishList\" + FileRenameXML; try { xmlDoc.Load(filename); } catch (System.IO.FileNotFoundException) { XmlTextWriter xmlWriter = new XmlTextWriter(filename, System.Text.Encoding.UTF8); xmlWriter.Formatting = Formatting.Indented; xmlWriter.WriteProcessingInstruction("xml", "version='1.0' encoding='UTF-8'"); xmlWriter.WriteStartElement("AllJobs"); xmlWriter.Close(); xmlDoc.Load(filename); } XmlNode alljobs = xmlDoc.DocumentElement; //XmlNode alljobs = xmlDoc.SelectSingleNode("/AllJobs"); XmlNode node = xmlDoc.CreateElement("Job"); AddAttribute(node, "ScheduleName", schedule.ProgramName); AddAttribute(node, "Folder", mywish.name); //episode mode with separate folder has been disabled above already Double number = Convert.ToDouble(schedule.PreRecordInterval) * (-1); DateTime absoluteStartTime = oneprogram.StartTime.AddMinutes(number); AddAttribute(node, "Start", absoluteStartTime.ToString("yyyy-MM-dd_HH:mm", CultureInfo.InvariantCulture)); LogDebug("Start=" + absoluteStartTime.ToString("yyyy-MM-dd_HH:mm", CultureInfo.InvariantCulture), (int)LogSetting.DEBUG); number = Convert.ToDouble(schedule.PostRecordInterval); DateTime absoluteEndTime = oneprogram.EndTime.AddMinutes(number); AddAttribute(node, "End", absoluteEndTime.ToString("yyyy-MM-dd_HH:mm", CultureInfo.InvariantCulture)); LogDebug("End=" + absoluteEndTime.ToString("yyyy-MM-dd_HH:mm", CultureInfo.InvariantCulture), (int)LogSetting.DEBUG); AddAttribute(node, "idChannel", schedule.IdChannel.ToString()); alljobs.AppendChild(node); xmlDoc.Save(filename); } catch (Exception exc) { LogDebug("Could not update " + TV_USER_FOLDER + @"\TvWishList\" + FileRenameXML, (int)LogSetting.ERROR); LogDebug("Exception message was " + exc.Message, (int)LogSetting.ERROR); string languagetext = lng.TranslateString("Fatal error - check the log file", 24); labelmessage(languagetext, PipeCommands.StartEpg); //do not stop - do not flag as error Thread.Sleep(ErrorWaitTime); } } } } else { if (mymessage.existsmessage(schedule, mywish.t_action) == false) //new reminder - send email { LogDebug("", (int)LogSetting.INFO); LogDebug("*******************************************************************************\n", (int)LogSetting.INFO); message = lng.TranslateString("TvWishList found program from Tv Wish [{0}]: {1}\nTvWishList did not schedule but is reminding you of the program", 80, (counter + 1).ToString(), mywish.name); LogDebug("*******************************************************************************\n", (int)LogSetting.INFO); LogDebug(message, (int)LogSetting.INFO); schedule.ScheduleType = 9; //bug in 1.2.0.15 mymessage.addmessage(schedule, message, mywish.t_action, mywish.name, (int)XmlMessages.MessageEvents.EMAIL_FOUND, mywish.tvwishid, string.Empty); outputscheduletoresponse(schedule, (int)LogSetting.DEBUG); schedule.ScheduleType = 0; //end bug 1.2.0.15 LogDebug("End of reminder a", (int)LogSetting.DEBUG); schedule.Delete(); //mywish.i_scheduled++; } else //message does exist already - do not send email but return { LogDebug("", (int)LogSetting.DEBUG); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.DEBUG); LogDebug("Message does exist already - not included in email", (int)LogSetting.DEBUG); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.DEBUG); outputscheduletoresponse(schedule, (int)LogSetting.DEBUG); LogDebug("End of old reminder b", (int)LogSetting.DEBUG); schedule.Delete(); } } #endregion success: schedule and/or email return true; }
private void ProcessFileRenaming() { if (_ProcessFileRenamingRunning == true) { Log.Debug("Old ProcessFileRenaming is running - returning thread"); return; } _ProcessFileRenamingRunning = true; string filename = TV_USER_FOLDER + @"\TvWishList\" + FileRenameXML; Logdebug("Starting ProcessFileRenaming - file=" + filename); //process file renaming from xml file if (File.Exists(filename) == false) { Logdebug("Could not find jobfile " + filename); _ProcessFileRenamingRunning = false; return; } TvBusinessLayer layer = new TvBusinessLayer(); Setting setting = null; //wait for comskip to finish setting = layer.GetSetting("TvWishList_WaitComSkipMinutes", "60"); try { int i = Convert.ToInt32(setting.Value); ComSkipMaxWait = i; } catch { ComSkipMaxWait = 60; } Log.Debug("ComSkipMaxWait=" + ComSkipMaxWait.ToString()); System.Threading.Thread.Sleep(10000);//sleep 10s Process[] sprocs1 = Process.GetProcessesByName(ProcessName1); if (sprocs1.Length > 0) { sprocs1[0].WaitForExit(60000 * ComSkipMaxWait); //wait 60s * ComSkipMaxWait if (sprocs1[0].HasExited) { Log.Debug("Process " + ProcessName1 + " has been finished"); } else { Log.Error("Process " + ProcessName1 + " did not finish"); } } else { Log.Debug("Process " + ProcessName1 + " does not exist"); } System.Threading.Thread.Sleep(10000);//sleep 10s Process[] sprocs2 = Process.GetProcessesByName(ProcessName2); if (sprocs2.Length > 0) { sprocs2[0].WaitForExit(60000 * ComSkipMaxWait); //wait 60s * MaxWait if (sprocs2[0].HasExited) { Log.Debug("Process " + ProcessName2 + " has been finished"); } else { Log.Error("Process " + ProcessName2 + " did not finish"); } } else { Log.Debug("Process " + ProcessName2 + " does not exist"); } System.Threading.Thread.Sleep(10000);//sleep 10s Log.Debug("read xml file"); //read xml file XmlDocument renamexmldoc = new XmlDocument(); try { renamexmldoc.Load(filename); XmlNode root = renamexmldoc.DocumentElement; XmlNodeList nodealljobs = renamexmldoc.SelectNodes("/AllJobs/Job"); Log.Debug("Reading Nodes"); #if(TV100) IList allrecordings = Recording.ListAll(); #elif(TV101) IList<Recording> allrecordings = Recording.ListAll(); #elif((TV11)||(TV12)) IList<Recording> allrecordings = Recording.ListAll(); #endif foreach (XmlNode nodejob in nodealljobs) { //get xml node string programname = nodejob.Attributes["ScheduleName"].Value; Log.Debug("programname=" + programname); string folder = nodejob.Attributes["Folder"].Value; Log.Debug("folder=" + folder); DateTime startTime = DateTime.ParseExact(nodejob.Attributes["Start"].Value, "yyyy-MM-dd_HH:mm", CultureInfo.InvariantCulture); Logdebug("startTime =" + startTime.ToString("yyyy-MM-dd_HH:mm", CultureInfo.InvariantCulture)); DateTime endTime = DateTime.ParseExact(nodejob.Attributes["End"].Value, "yyyy-MM-dd_HH:mm", CultureInfo.InvariantCulture); Logdebug("endTime =" + endTime.ToString("yyyy-MM-dd_HH:mm", CultureInfo.InvariantCulture)); int channelid = -1; int.TryParse(nodejob.Attributes["idChannel"].Value, out channelid); Logdebug("channelid =" + channelid.ToString()); bool nodeExists = true; //search all my recordings for match foreach (Recording myrecording in allrecordings) { if (myrecording.StartTime == myrecording.EndTime) {//during recording the start time will be equal to the end time and text all in capitol letters - in that case ignore and wait till recording is finished - schedule does exist in parallel during recording continue; } string myrecording_startstring = myrecording.StartTime.ToString("yyyy-MM-dd_HH:mm", CultureInfo.InvariantCulture); DateTime myrecording_start = DateTime.ParseExact(myrecording_startstring, "yyyy-MM-dd_HH:mm", CultureInfo.InvariantCulture); //Logdebug("myrecording_startTime =" + myrecording_start.ToString("yyyy-MM-dd_HH:mm", CultureInfo.InvariantCulture)); string myrecording_endstring = myrecording.EndTime.ToString("yyyy-MM-dd_HH:mm", CultureInfo.InvariantCulture); DateTime myrecording_end = DateTime.ParseExact(myrecording_endstring, "yyyy-MM-dd_HH:mm", CultureInfo.InvariantCulture); //Logdebug("myrecording_endTime =" + myrecording_end.ToString("yyyy-MM-dd_HH:mm", CultureInfo.InvariantCulture)); if ((startTime == myrecording_start) && (endTime == myrecording_end) && (channelid == myrecording.IdChannel) && (File.Exists(myrecording.FileName) == true)) { //xml list entry has been recorded and matches start, end time and channel id Logdebug("Recording matched for " + programname); //rename filenames and update recording with new location string directory = System.IO.Path.GetDirectoryName(myrecording.FileName); //valid directory string filenameNoExtension = System.IO.Path.GetFileNameWithoutExtension(myrecording.FileName); //valid filename without extension char[] invalidPathChars = Path.GetInvalidPathChars(); for (int i = 0; i < invalidPathChars.Length; i++) { folder = folder.Replace(invalidPathChars[i], '_'); //valid subdirectory name after replacement } string newname = directory + @"\" + folder + @"\" + filenameNoExtension + ".ts"; if (Directory.Exists(directory + @"\" + folder) == false) { Log.Debug("Creating directory " + directory + @"\" + folder); Directory.CreateDirectory(directory + @"\" + folder); } if (File.Exists(newname) == false) { Logdebug("Moving " + myrecording.FileName + " to " + newname); File.Move(myrecording.FileName, newname); String xmlfilename = myrecording.FileName.Substring(0, myrecording.FileName.Length - 2) + "xml"; //substitute .ts by .xml if (File.Exists(xmlfilename) == true) { String newxmlfilename = directory + @"\" + folder + @"\" + filenameNoExtension + ".xml"; //bug in older version File.Move(xmlfilename, newxmlfilename); Logdebug("Moving " + xmlfilename + " to " + newxmlfilename); } //update recording file name myrecording.FileName = newname; myrecording.Persist(); //move other comskip files as well string[] morefiles = Directory.GetFiles(directory, filenameNoExtension + "*"); foreach (string singlefile in morefiles) { string shortname=System.IO.Path.GetFileName(singlefile); string newfilename = directory + @"\" + folder + @"\" + shortname; if (File.Exists(newfilename) == false) { Logdebug("Moving " + singlefile + " to " + newfilename); File.Move(singlefile, newfilename); } else { Log.Error("file " + singlefile + " does exist already - will not move file"); } } //removing node after successful completion root.RemoveChild(nodejob); Logdebug("Removing childnode after successful renaming for " + programname); nodeExists = false; } else { Log.Error("file " + newname + " does exist already - will not move file"); } break; } }//end all recordings endTime = endTime.AddDays(1.0); //add one day to make sure recordings are completed including postprocessing if ((DateTime.Now > endTime)&&(nodeExists)) { root.RemoveChild(nodejob); Logdebug("Removing childnode due to timeout for " + programname); } } renamexmldoc.Save(filename); if (root.HasChildNodes == false) { File.Delete(filename); Log.Debug("Deleting xml file as there are no entries"); } } catch (Exception ee) { Log.Error("ProcessFileRenaming failed with exception message:"); Log.Error(ee.Message); } Log.Debug("ProcessFileRenaming completed"); _ProcessFileRenamingRunning = false; }
public bool ReadLanguageFile() { Log.Debug("ReadLanguageFile started"); TvBusinessLayer layer = new TvBusinessLayer(); Setting setting = null; setting = layer.GetSetting("TvWishList_TV_USER_FOLDER", "NOT_DEFINED"); string TV_USER_FOLDER; TV_USER_FOLDER = layer.GetSetting("TvWishList_TV_USER_FOLDER", "NOT_FOUND").Value; if ((File.Exists(TV_USER_FOLDER + @"\TvService.exe") == true) || (Directory.Exists(TV_USER_FOLDER) == false)) { //autodetect paths InstallPaths instpaths = new InstallPaths(); //define new instance for folder detection #if (MPTV2) //Native MP2 Tv server instpaths.GetInstallPathsMP2(); TV_USER_FOLDER = instpaths.TV2_USER_FOLDER; #else instpaths.GetInstallPaths(); TV_USER_FOLDER = instpaths.TV_USER_FOLDER; #endif Log.Debug("TV server user folder detected at " + TV_USER_FOLDER); if ((File.Exists(TV_USER_FOLDER + @"\TvService.exe") == true) || (Directory.Exists(TV_USER_FOLDER) == false)) { Log.Error(@" TV server user folder does not exist - using C:\MediaPortal\TvWishList"); Log.Debug(@" TV server user folder does not exist - using C:\MediaPortal\TvWishList"); TV_USER_FOLDER = @"C:\MediaPortal"; if (Directory.Exists(TV_USER_FOLDER) == false) Directory.CreateDirectory(TV_USER_FOLDER + @"\TvWishList"); } else {//store found TV_USER_FOLDER setting = layer.GetSetting("TvWishList_TV_USER_FOLDER", "NOT_FOUND"); setting.Value = TV_USER_FOLDER; setting.Persist(); } } if (Directory.Exists(setting.Value) == false) { Log.Error("Error: TV User Folder is not defined - cannot use language file"); return false; } string foldername = setting.Value + @"\TvWishList\Languages\"; setting = layer.GetSetting("TvWishList_LanguageFile", "strings_en.xml"); string filename = foldername + setting.Value; if (File.Exists(filename) == false) { Log.Error("Could not find language file " + filename); filename = foldername + "strings_en.xml"; Log.Error("Switching to English default language file " + filename); } Log.Debug("Language file is " + filename); try { //read inputfile string[] inputlines = File.ReadAllLines(filename); Log.Debug(inputlines.Length.ToString()+" Lines read"); int minimum = 0; int maximum = 0; int offset = 0; int offsetMinimum = 0; int offsetMaximum = 0; //process each line foreach (string line in inputlines) { string myline = line.Replace("\t", string.Empty); //replace tab //global replacements if ((myline.Contains("<!-- TVSERVER VECTORSIZE="))||(myline.Contains("<!--TVSERVER VECTORSIZE="))) { myline = myline.Replace("<!-- TVSERVER VECTORSIZE=", string.Empty); myline = myline.Replace("<!--TVSERVER VECTORSIZE=", string.Empty); myline = myline.Replace("-->", string.Empty); int size = 0; int.TryParse(myline, out size); Log.Debug("size = " + size.ToString()); Language = new string[size]; for (int i = 0; i < size; i++) { Language[i] = String.Empty; } //define at least true and false try { Language[4000] = "true"; Language[4001] = "false"; } catch //do nothing { Log.Error("Error in default initialization of true and false"); } } else if ((myline.Contains("<!-- TVSERVER USE FROM=")) || (myline.Contains("<!--TVSERVER USE FROM=")) ) { myline = myline.Replace("<!-- TVSERVER USE FROM=", string.Empty); myline = myline.Replace("<!--TVSERVER USE FROM=", string.Empty); myline = myline.Replace("-->", string.Empty); myline = myline.Replace("OFFSET_FROM=", "\n"); //order is important myline = myline.Replace("OFFSET_TO=", "\n"); myline = myline.Replace("TO=", "\n"); //myline = myline.Replace("OFFSET=", "\n"); string[] tokenarray = myline.Split('\n'); if (tokenarray.Length != 4) { Log.Error("Invalid tv server command " + line.Replace("{","_") + " - cannot use language files"); return false; } minimum = 0; int.TryParse(tokenarray[0], out minimum); Log.Debug(" new minimum=" + minimum.ToString()); maximum = 0; int.TryParse(tokenarray[1], out maximum); Log.Debug(" new maximum=" + maximum.ToString()); offsetMinimum = 0; int.TryParse(tokenarray[2], out offsetMinimum); Log.Debug(" new offsetMinimum=" + offsetMinimum.ToString()); offsetMaximum = 0; int.TryParse(tokenarray[3], out offsetMaximum); Log.Debug(" new offsetMaximum=" + offsetMaximum.ToString()); offset = minimum - offsetMinimum; Log.Debug(" new offset=" + offset.ToString()); } else if (myline.Contains("<String id=\"")) // <String id="1107">Mehr</String> { try { //remove leading spaces int leadingSpaces = 0; for (int i = 0; i < myline.Length; i++) { if (myline[i] == ' ') { leadingSpaces++; } else { break; } } //textoutput("leadingSpaces=" + leadingSpaces.ToString()); myline = myline.Substring(leadingSpaces, myline.Length - leadingSpaces);//remove leading spaces //remove trailing spaces int trailingSpaces = 0; for (int i = myline.Length - 1; i >= 0; i--) { if (myline[i] == ' ') { trailingSpaces++; } else { break; } } //textoutput("trailingSpaces=" + trailingSpaces.ToString()); myline = myline.Substring(0, myline.Length - trailingSpaces); myline = myline.Substring(12, myline.Length - 12); //remove beginning comment and <String id=" //now extract the numbers till the next " int digits = 0; for (int i = 0; i < myline.Length; i++) { if (myline[i] == '"') { break; } else { digits++; } } //Log.Debug("digits=" + digits.ToString()); string digitString = myline.Substring(0, digits); //Log.Debug("digitString=" + digitString); if (myline.Length >= digits) myline = myline.Substring(digits, myline.Length - digits); myline = myline.Replace("\">", ""); //remove ending myline = myline.Replace("</String>", ""); //remove ending string valueString = myline; //Debug //string output = valueString.Replace("{", "_"); //output = output.Replace("}", "_"); //Log.Debug("output ="+output); int number = 0; int.TryParse(digitString, out number); //Log.Debug("number=" + number.ToString()); if ((number >= minimum) && (number <= maximum)) { number = number - offset; Language[number] = valueString; //Debug //string output2 = Language[number].Replace("{", "_"); //output2 = output2.Replace("}", "_"); //Log.Debug("language[" + number.ToString() + "]=" + output2); } } catch (Exception exc) { string output = line.Replace("{", "_"); output = output.Replace("}", "_"); Log.Error("Error: could not read string " + output + " Exception was " + exc.Message); } }//end expression }//end foreach line } catch (Exception exc) { Log.Error("Error: could not read language file " + filename + " Exception was " + exc.Message); return false; } Log.Debug("Language file read"); return true; }
private void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e) { try { Logdebug("SystemEvents_PowerModeChanged =" + e.Mode.ToString()); if (e.Mode == PowerModes.Suspend) { Logdebug("SystemEvents Suspend"); if (receivethread != null) { try { TvBusinessLayer layer = new TvBusinessLayer(); Setting setting = null; setting = layer.GetSetting("TvWishList_NextEpgDate", DateTime.Now.ToString("yyyy-MM-dd_HH:mm", System.Globalization.CultureInfo.InvariantCulture)); setting.Value = _PreviousEpgTime.ToString("yyyy-MM-dd_HH:mm", System.Globalization.CultureInfo.InvariantCulture); Logdebug("TvWishList_NextEpgDate=" + setting.Value); setting.Persist(); } catch (Exception exc) { Log.Error("Error in writing old epg time"); Log.Error(exc.Message); } Log.Error("Aborting receive thread because of system standby event"); receivethread.Abort(); //resetting next epg date _NextEpgTime = _PreviousEpgTime; Logdebug("TVSERVER TvWishList: Setting NextEpgTime =" + _NextEpgTime.ToString()); /* //writing file try { string[] all_lines = new string[] { _PreviousEpgTime.ToString("yyyy-MM-dd_HH:mm", System.Globalization.CultureInfo.InvariantCulture) }; File.WriteAllLines(TV_USER_FOLDER + @"\TvWishList\NextEPG.txt", all_lines); } catch (Exception exc) { Logdebug("Error in writing old epg time file"); Log.Error("Error in writing old epg time file"); Log.Debug(exc.Message); Log.Error(exc.Message); }*/ } } else if (e.Mode == PowerModes.Resume) { Logdebug("SystemEvents Resume"); } else if (e.Mode == PowerModes.StatusChange) { Logdebug("SystemEvents Status Change"); } } catch (Exception exc) { Log.Error("SystemEvents_PowerModeChanged failed with exception message:"); Log.Error(exc.Message); } }
public void SetupTvStartedFilewatcher(object sender, FileSystemEventArgs e) { Logdebug("SetupTvStartedFilewatcher"); //disable filewatcher SetupTvStarted.EnableRaisingEvents = false; /* //debug only foreach (Mediaportal.TV.Server.TVDatabase.Entities.Schedule allschedule in Mediaportal.TV.Server.TVDatabase.TVBusinessLayer.ScheduleManagement.ListAllSchedules()) { List<Mediaportal.TV.Server.TVDatabase.Entities.Schedule> notViewableSchedules = new List<Mediaportal.TV.Server.TVDatabase.Entities.Schedule>(); IList<Mediaportal.TV.Server.TVDatabase.Entities.Schedule> mylist = Mediaportal.TV.Server.TVDatabase.TVBusinessLayer.ScheduleManagementhuha.GetConflictingSchedules(allschedule, out notViewableSchedules); Log.Debug("*****************************************************************"); Log.Debug("***********************allschedule=" + allschedule.ProgramName + " s=" + allschedule.StartTime.ToString() + " ch=" + allschedule.IdChannel.ToString()); Log.Debug("mylist.Count="+mylist.Count.ToString()); foreach (Mediaportal.TV.Server.TVDatabase.Entities.Schedule test in mylist) { Log.Debug("mylistSchedules = " + test.ProgramName + " id=" + test.IdSchedule.ToString() + " start=" + test.StartTime.ToString() + " end=" + test.EndTime.ToString() + " channel=" + test.IdChannel); } Log.Debug("notViewableSchedules.Count="+notViewableSchedules.Count.ToString()); Log.Debug("*****************************************************************"); foreach (Mediaportal.TV.Server.TVDatabase.Entities.Schedule test in notViewableSchedules) { Log.Debug("notViewableSchedules = " + test.ProgramName + " id=" + test.IdSchedule.ToString() + " start=" + test.StartTime.ToString() + " end=" + test.EndTime.ToString() + " channel=" + test.IdChannel); } Log.Debug(""); } //end debug */ //Thread.Sleep(2000); //wait for storing data Process[] allnamedprocesses; do { System.Threading.Thread.Sleep(1000); //sleep 1s allnamedprocesses = Process.GetProcessesByName("SetupTv"); Log.Debug("allnamedprocesses.Length=" + allnamedprocesses.Length.ToString()); } while ((allnamedprocesses.Length > 0) && (File.Exists(filewatcherSetupTvStarted))); //SetupTv completed or TvWishList deactivated TvBusinessLayer layer = new TvBusinessLayer(); Setting setting = null; //unlock data setting = layer.GetSetting("TvWishList_LockingPluginname", "NONE"); setting.Value = "NONE"; setting.Persist(); if (File.Exists(filewatcherSetupTvStarted) == true) { File.Delete(filewatcherSetupTvStarted); } setting = layer.GetSetting("TvWishList_BUSY", "false"); setting.Value = "false"; setting.Persist(); Logdebug("SetupTvStartedFilewatcher completed busy=false, unlocked"); //enable filewatcher SetupTvStarted.EnableRaisingEvents = true; }
private void ServerThreadRoutine(object data) { string defaultTimeOutValuestring = TimeOutValuestring; TvBusinessLayer layer = new TvBusinessLayer(); Setting setting = null; while (PipeServerActive) { try { var sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null); var rule = new PipeAccessRule(sid, PipeAccessRights.ReadWrite,System.Security.AccessControl.AccessControlType.Allow); var sec = new PipeSecurity(); sec.AddAccessRule(rule); #if (MPTV2) string pipeName = "MP2TvWishListPipe"; #else string pipeName = "TvWishListPipe"; #endif pipeServer = new NamedPipeServerStream(pipeName, PipeDirection.InOut, 1, PipeTransmissionMode.Byte, PipeOptions.None, 0, 0, sec); //only 1 thread for pipe int threadId = Thread.CurrentThread.ManagedThreadId; // Wait for a client to connect Logdebug("TvServer: Waiting for client to connect"); PipeServerBusy = false; pipeServer.WaitForConnection(); ServerMessage = string.Empty; Logdebug("Client connected on pipe server thread."); PipeServerBusy = true; ; // Read the request from the client. Once the client has // written to the pipe its security token will be available. //pipeServer.ReadTimeout = 5000; //timeout not supported for async streams StreamString ss = new StreamString(pipeServer); // Verify our identity to the connected client using a // string that the client anticipates. MessageFromClient = ss.ReadString(); //receive message from client first //labelreceivedTextServer.Text = messagefromclient; Logdebug("***** CLIENTMESSAGE=" + MessageFromClient); //******************************* //commandinterpretation //******************************* if (MessageFromClient == PipeCommands.RequestTvVersion.ToString()) { string response = PipeCommands.RequestTvVersion.ToString() + "=" + this.Version; Logdebug("sending response " + response); ss.WriteString(response); } else if (MessageFromClient.StartsWith(PipeCommands.StartEpg.ToString()) == true) { defaultTimeOutValuestring = TimeOutValuestring; string[] tokens = MessageFromClient.Split(':'); if (tokens.Length > 1) { TimeOutValuestring = tokens[1]; Logdebug("Changed TimeOutValuestring=" + TimeOutValuestring); } Logdebug("Starting EPG Search from pipe command"); Thread StartEPGsearchThread = new Thread(StartEPGsearchCommand); StartEPGsearchThread.Start(); while ((ServerMessage.StartsWith(PipeCommands.Ready.ToString())==false) && (ServerMessage.StartsWith(PipeCommands.Error.ToString()) == false)) { ServerTimeOutCounter = new Thread(ServerTimeOutError); ServerTimeOutCounter.Start(); while ((NewServerMessage == false) || (ServerMessage==string.Empty)) { Thread.Sleep(500); Logdebug("waiting for new servermessage (ServerMessage="+ServerMessage); } Logdebug("Sending Servermessage=" + ServerMessage); ss.WriteString(ServerMessage); //send response messages until done ServerTimeOutCounter.Abort(); NewServerMessage = false; } TimeOutValuestring = defaultTimeOutValuestring; } else if (MessageFromClient.StartsWith(PipeCommands.Error_TimeOut.ToString()) == true) { TimeOutValuestring = MessageFromClient.Replace(PipeCommands.Error_TimeOut.ToString(), string.Empty); Logdebug("new TimeOutValuestring="+TimeOutValuestring); ss.WriteString(TimeOutValuestring); } else if (MessageFromClient.StartsWith(PipeCommands.ExportTvWishes.ToString()) == true) { defaultTimeOutValuestring = TimeOutValuestring; string[] tokens = MessageFromClient.Split(':'); if (tokens.Length > 1) { TimeOutValuestring = tokens[1]; Log.Debug("Changed TimeOutValuestring=" + TimeOutValuestring); } if (MessageFromClient.Contains("VIEWONLY=TRUE") == true) { ServerMessage = ExportTvWishes(true); } else //Email & Record Mode { ServerMessage = ExportTvWishes(false); } ss.WriteString(ServerMessage); TimeOutValuestring = defaultTimeOutValuestring; } else if (MessageFromClient.StartsWith(PipeCommands.ImportTvWishes.ToString()) == true) { defaultTimeOutValuestring = TimeOutValuestring; string[] tokens = MessageFromClient.Split(':'); if (tokens.Length > 1) { TimeOutValuestring = tokens[1]; Logdebug("Changed TimeOutValuestring=" + TimeOutValuestring); } if (MessageFromClient.Contains("VIEWONLY=TRUE") == true) { ServerMessage = ImportTvWishes(true); } else //Email & Record Mode { ServerMessage = ImportTvWishes(false); } ss.WriteString(ServerMessage); TimeOutValuestring = defaultTimeOutValuestring; } else if (MessageFromClient.StartsWith(PipeCommands.RemoveSetting.ToString()) == true) { defaultTimeOutValuestring = TimeOutValuestring; string[] tokens = MessageFromClient.Split(':'); if (tokens.Length > 1) { TimeOutValuestring = tokens[1]; Logdebug("Changed TimeOutValuestring=" + TimeOutValuestring); } string tag = tokens[0].Replace(PipeCommands.RemoveSetting.ToString(), string.Empty); setting = layer.GetSetting(tag, string.Empty); if (setting != null) { setting.Remove(); ServerMessage = "Setting " + tag + " removed"; Logdebug("Setting " + tag + " removed"); } else { ServerMessage = "Setting " + tag + " could not be removed"; Logdebug("Eror: Setting " + tag + " could not be removed"); } ss.WriteString(ServerMessage); TimeOutValuestring = defaultTimeOutValuestring; } else if (MessageFromClient.StartsWith(PipeCommands.RemoveRecording.ToString()) == true) {//string command = Main_GUI.PipeCommands.RemoveRecording.ToString() + this.IdRecording.ToString() + ":10"; defaultTimeOutValuestring = TimeOutValuestring; string[] tokens = MessageFromClient.Split(':'); if (tokens.Length > 1) { TimeOutValuestring = tokens[1]; Logdebug("Changed TimeOutValuestring=" + TimeOutValuestring); } string idRecordingString = tokens[0].Replace(PipeCommands.RemoveRecording.ToString(), string.Empty); try { int idRecording = -1; int.TryParse(idRecordingString, out idRecording); Logdebug("idRecording=" + idRecording.ToString()); Recording myrecording = Recording.Retrieve(idRecording); Logdebug("idRecording=" + myrecording.Title.ToString()); myrecording.Delete(); Logdebug("Recording deleted"); ServerMessage = "Recording deleted"; } catch (Exception exc) { Logdebug("no recording found for idRecordingString = " + idRecordingString); Logdebug("exception is " + exc.Message); ServerMessage = "Error: Recording could not be deleted check the tvserver log file"; } ss.WriteString(ServerMessage); TimeOutValuestring = defaultTimeOutValuestring; } else if (MessageFromClient.StartsWith(PipeCommands.RemoveLongSetting.ToString()) == true) { defaultTimeOutValuestring = TimeOutValuestring; string[] tokens = MessageFromClient.Split(':'); if (tokens.Length > 1) { TimeOutValuestring = tokens[1]; Logdebug("Changed TimeOutValuestring=" + TimeOutValuestring); } //processing string mysetting = string.Empty; try { //cleanup work mysetting = tokens[0].Replace(PipeCommands.RemoveLongSetting.ToString(), string.Empty); Log.Debug("mysetting=" + mysetting); for (int i = 1; i < 1000; i++) { setting = layer.GetSetting(mysetting + "_" + i.ToString("D3"), "_DOES_NOT_EXIST_"); Log.Debug("save_longsetting setting=" + setting.Value); if (setting.Value == "_DOES_NOT_EXIST_") { setting.Remove(); break; } else { string value = setting.Value; setting.Remove(); } } ServerMessage = "Long setting could be removed"; } catch (Exception exc) { Logdebug("Longsetting could not be removed for mysetting= " + mysetting); Logdebug("exception is " + exc.Message); ServerMessage = "Error: Long setting could not be removed - check the tvserver log file"; } ss.WriteString(ServerMessage); TimeOutValuestring = defaultTimeOutValuestring; } #if (MPTV2) else if (MessageFromClient.StartsWith(PipeCommands.WriteSetting.ToString()) == true) { string tag = MessageFromClient.Replace(PipeCommands.WriteSetting.ToString(), string.Empty); string[] tags = tag.Split('\n'); ServiceAgents.Instance.SettingServiceAgent.SaveValue(tags[0], tags[1]); ServerMessage = "SUCCESS"; ss.WriteString(ServerMessage); } else if (MessageFromClient.StartsWith(PipeCommands.ReadSetting.ToString()) == true) { string tag = MessageFromClient.Replace(PipeCommands.ReadSetting.ToString(), string.Empty); Log.Debug("tag="+tag); string value = ServiceAgents.Instance.SettingServiceAgent.GetValue(tag, string.Empty); Log.Debug("value=" + value); ServerMessage = value; ss.WriteString(ServerMessage); } else if (MessageFromClient.StartsWith(PipeCommands.ReadAllCards.ToString()) == true) { defaultTimeOutValuestring = TimeOutValuestring; string[] tokens = MessageFromClient.Split(':'); if (tokens.Length > 1) { TimeOutValuestring = tokens[1]; Logdebug("Changed TimeOutValuestring=" + TimeOutValuestring); } ServerMessage = string.Empty; foreach (Card mycard in Card.ListAll()) { ServerMessage += mycard.IdCard.ToString() + "\n" + mycard.Name + "\n"; } //65000 max chars ss.WriteString(ServerMessage); } else if (MessageFromClient.StartsWith(PipeCommands.ReadAllChannelsByGroup.ToString()) == true) { string groupIdString = MessageFromClient.Replace(PipeCommands.ReadAllChannelsByGroup.ToString(), string.Empty); Log.Debug("groupIdString="+groupIdString); int groupId = -1; int.TryParse(groupIdString, out groupId); Log.Debug("groupId=" + groupId.ToString()); ServerMessage = string.Empty; foreach (Channel mychannel in Channel.ListAllByGroup(groupId)) { ServerMessage += mychannel.IdChannel.ToString() + "\n" + mychannel.DisplayName + "\n"; } Log.Debug("Groupchannels=" + ServerMessage); //65000 max chars ss.WriteString(ServerMessage); } else if (MessageFromClient.StartsWith(PipeCommands.ReadAllChannels.ToString()) == true)//must be after ReadAllChannelsByGroup { ServerMessage = string.Empty; foreach (Channel mychannel in Channel.ListAll()) { ServerMessage += mychannel.IdChannel.ToString() + "\n" + mychannel.DisplayName + "\n"; } //65000 max chars ss.WriteString(ServerMessage); } else if (MessageFromClient.StartsWith(PipeCommands.ReadAllRadioChannelsByGroup.ToString()) == true) { string groupIdString = MessageFromClient.Replace(PipeCommands.ReadAllRadioChannelsByGroup.ToString(), string.Empty); Log.Debug("radiogroupIdString=" + groupIdString); int groupId = -1; int.TryParse(groupIdString, out groupId); Log.Debug("radiogroupId=" + groupId.ToString()); ServerMessage = string.Empty; foreach (RadioChannel myradiochannel in RadioChannel.ListAllByGroup(groupId)) { ServerMessage += myradiochannel.Id.ToString() + "\n" + myradiochannel.Name + "\n"; } Log.Debug("radioGroupchannels=" + ServerMessage); //65000 max chars ss.WriteString(ServerMessage); } else if (MessageFromClient.StartsWith(PipeCommands.ReadAllRadioChannels.ToString()) == true)//must be after ReadAllRadioChannelsByGroup { ServerMessage = string.Empty; foreach (RadioChannel myradiochannel in RadioChannel.ListAll()) { ServerMessage += myradiochannel.Id.ToString() + "\n" + myradiochannel.Name + "\n"; } //65000 max chars ss.WriteString(ServerMessage); } else if (MessageFromClient.StartsWith(PipeCommands.ReadAllChannelGroups.ToString()) == true) { ServerMessage = string.Empty; foreach (ChannelGroup mygroup in ChannelGroup.ListAll()) { ServerMessage += mygroup.Id.ToString() + "\n" + mygroup.GroupName + "\n"; } //65000 max chars ss.WriteString(ServerMessage); } else if (MessageFromClient.StartsWith(PipeCommands.ReadAllRadioChannelGroups.ToString()) == true) { ServerMessage = string.Empty; foreach (RadioChannelGroup myradiogroup in RadioChannelGroup.ListAll()) { ServerMessage += myradiogroup.Id.ToString() + "\n" + myradiogroup.GroupName + "\n"; } //65000 max chars ss.WriteString(ServerMessage); } else if (MessageFromClient.StartsWith(PipeCommands.ReadAllRecordings.ToString()) == true) { ServerMessage = string.Empty; foreach (Recording myrecording in Recording.ListAll()) { ServerMessage += myrecording.IdRecording.ToString() + "\n" + myrecording.Title + "\n"+myrecording.FileName + "\n" + myrecording.IdChannel.ToString() + "\n" + myrecording.StartTime.ToString("yyyy-MM-dd_HH:mm", CultureInfo.InvariantCulture) + "\n" + myrecording.EndTime.ToString("yyyy-MM-dd_HH:mm", CultureInfo.InvariantCulture) + "\n"; } //65000 max chars ss.WriteString(ServerMessage); } else if (MessageFromClient.StartsWith(PipeCommands.ReadAllSchedules.ToString()) == true) { ServerMessage = string.Empty; foreach (Schedule myschedule in Schedule.ListAll()) { ServerMessage += myschedule.IdSchedule.ToString() + "\n" + myschedule.ProgramName + "\n" + myschedule.IdChannel.ToString() + "\n" + myschedule.StartTime.ToString("yyyy-MM-dd_HH:mm", CultureInfo.InvariantCulture) + "\n" + myschedule.EndTime.ToString("yyyy-MM-dd_HH:mm", CultureInfo.InvariantCulture) + "\n" + myschedule.ScheduleType.ToString() + "\n" + myschedule.PreRecordInterval.ToString() + "\n" + myschedule.PostRecordInterval.ToString() + "\n" + myschedule.MaxAirings.ToString() + "\n" + myschedule.KeepDate.ToString("yyyy-MM-dd_HH:mm", CultureInfo.InvariantCulture) + "\n" + myschedule.KeepMethod.ToString() + "\n" + myschedule.Priority.ToString() + "\n" + myschedule.PreRecordInterval.ToString() + "\n" + myschedule.Series.ToString() + "\n"; } //65000 max chars ss.WriteString(ServerMessage); } else if (MessageFromClient.StartsWith(PipeCommands.ScheduleDelete.ToString()) == true) { string scheduleIdString = MessageFromClient.Replace(PipeCommands.ScheduleDelete.ToString(), string.Empty); Log.Debug("scheduleIdString=" + scheduleIdString); int scheduleId = -1; int.TryParse(scheduleIdString, out scheduleId); Log.Debug("scheduleId=" + scheduleId.ToString()); Schedule.Delete(scheduleId); //65000 max chars ss.WriteString("Deleted"); } else if (MessageFromClient.StartsWith(PipeCommands.ScheduleNew.ToString()) == true) { string schedule = MessageFromClient.Replace(PipeCommands.ScheduleNew.ToString(), string.Empty); string[] scheduletags = schedule.Split('\n'); int idChannel = -1; int.TryParse(scheduletags[1], out idChannel); DateTime start = DateTime.ParseExact(scheduletags[2], "yyyy-MM-dd_HH:mm", System.Globalization.CultureInfo.InvariantCulture); DateTime end = DateTime.ParseExact(scheduletags[3], "yyyy-MM-dd_HH:mm", System.Globalization.CultureInfo.InvariantCulture); Schedule myschedule = new Schedule(idChannel, scheduletags[0], start, end); myschedule.Persist(); ServerMessage = "SUCCESS"; ss.WriteString(ServerMessage); } #endif else //Unknown command { Logdebug("sending response " + PipeCommands.UnknownCommand.ToString()); ss.WriteString(PipeCommands.UnknownCommand.ToString()); } } // Catch the IOException that is raised if the pipe is broken // or disconnected. catch (IOException e) { Log.Error("ServerThread ERROR: " + e.Message); } catch (Exception e) { Log.Error("ServerThread ERROR: " + e.Message); } if (pipeServer != null) { if (pipeServer.IsConnected) pipeServer.Disconnect(); pipeServer.Close(); pipeServer.Dispose(); pipeServer = null; } Logdebug("Connection closed"); } Logdebug("Pipe Server Thread Completed"); }
public DateTime EPGUpdateBeforeSchedule(DateTime _nextEpgTime) { Logdebug("EPGUpdateBeforeSchedule() _nextEpgTime="+_nextEpgTime.ToString()); TvBusinessLayer layer = new TvBusinessLayer(); Setting setting = null; setting = layer.GetSetting("TvWishList_CheckEPGScheduleMinutes","00"); bool EPGBeforeSchedule = false; Boolean.TryParse(setting.Value, out EPGBeforeSchedule); setting = layer.GetSetting("TvWishList_SlowCPU","true"); _useRecordingFlag = false; Boolean.TryParse(setting.Value, out _useRecordingFlag); if (EPGBeforeSchedule) { string minutes = layer.GetSetting("TvWishList_BeforeEPGMinutes", "00").Value; Logdebug("tvserver minutes =" + minutes); double minutenumber = 0; try { minutenumber = Convert.ToDouble(minutes); } catch (Exception exc) { Log.Error("Error: Could not convert EPG minutes " + minutenumber + " into number - setting to 00"); Log.Error("Exception message was:\n" + exc.Message + "\n"); minutenumber = 0; } //get next schedule start DateTime firstStartTime = DateTime.Now.AddYears(100); //always in the future Log.Debug("firstStartTime ="+firstStartTime.ToString()); Boolean found = false; foreach (Schedule myschedule in Schedule.ListAll()) { DateTime newStartTime = myschedule.StartTime.AddMinutes(minutenumber * (-1.0)); newStartTime = newStartTime.AddMinutes(myschedule.PreRecordInterval * (-1.0)); Log.Debug("Schedule ProgramName=" + myschedule.ProgramName); Log.Debug("newStartTime="+newStartTime.ToString()); if ((newStartTime > DateTime.Now) && (newStartTime < firstStartTime) ) { firstStartTime = newStartTime; found = true; Logdebug("New minimum schedule time found = "+newStartTime.ToString()); } } //update next epg time if ((found) && (firstStartTime < _nextEpgTime)) { _runEPGScript = true; //run script before next EPG check _nextEpgTime = firstStartTime; Logdebug("updating with new schedule start time nextEPGtime=" + _nextEpgTime.ToString()); //store data, because check needs to be done after each recording setting = layer.GetSetting("TvWishList_NextEpgDate", "2999-01-01"); setting.Value = _NextEpgTime.ToString("yyyy-MM-dd_HH:mm", System.Globalization.CultureInfo.InvariantCulture); Logdebug("Next epg checking date set to " + setting.Value); setting.Persist(); } } Logdebug("EPGUpdateBeforeSchedule() completed _nextEpgTime=" + _nextEpgTime.ToString()); return _nextEpgTime; }
public void StartEPGsearchCommand() { try { Logdebug("Started StartEPGsearchCommand"); //disable filewatcher //StartEPGsearch.EnableRaisingEvents = false; //File.Delete(filewatcherstartepg); use this file as a check for other processes //get new updated value for next epg check TvBusinessLayer layer = new TvBusinessLayer(); Setting setting = null; // get DEBUG setting = layer.GetSetting("TvWishList_Debug", "false"); DEBUG = false; Boolean.TryParse(setting.Value, out DEBUG); Log.DebugValue = DEBUG; //////////////////////////////////////////////// //start epgprocessing here if (epgwatchclass == null) { Logdebug("EpgParser could not be initiated - aborting operation"); Log.Error("EpgParser could not be initiated - aborting operation"); return; } else { try { if (MessageFromClient.Contains("VIEWONLY=TRUE") == true) { epgwatchclass.SearchEPG(true); } else //Email & Record Mode { epgwatchclass.SearchEPG(false); } } catch (Exception exc) { Log.Error("Parsing EPG data failed with exception message:"); Log.Error(exc.Message); // Reset BUSY Flag after exception //set BUSY = false setting = layer.GetSetting("TvWishList_BUSY", "false"); setting.Value = "false"; setting.Persist(); } } Log.Debug("epgwatchcommand completed "); //must end with "ready or "error" if ((ServerMessage.StartsWith(PipeCommands.Ready.ToString()) == false) && (ServerMessage.StartsWith(PipeCommands.Error.ToString()) == false)) { string errortext = "Epgwatch did end without error and not ready"; Logdebug(errortext); SendServerPipeMessage(errortext, PipeCommands.Error); } //enable filewatcher //StartEPGsearch.EnableRaisingEvents = true; } catch (Exception exc) { Log.Error("filewatcher epgwatch failed with exception message:"); Log.Error(exc.Message); } }
public IList<Schedule> GetConflictingSchedules(Schedule schedule) { TvBusinessLayer mylayer = new TvBusinessLayer(); List<Schedule> conflictingSchedules = new List<Schedule>(); List<Schedule> notViewableSchedules = new List<Schedule>(); mylayer.GetConflictingSchedules(schedule, out conflictingSchedules, out notViewableSchedules); Log.Debug("**********DEBUG GetConflictingSchedules ****************"); Log.Debug("Schedule:"); Log.Debug(schedule.ProgramName); Log.Debug(schedule.StartTime.ToString()); Log.Debug(schedule.EndTime.ToString()); Log.Debug(schedule.IdChannel.ToString()); Log.Debug(""); Log.Debug("Conflicting Schedules:"); foreach (Schedule myschedule in conflictingSchedules) { Log.Debug(myschedule.ProgramName); Log.Debug(myschedule.StartTime.ToString()); Log.Debug(myschedule.EndTime.ToString()); Log.Debug(myschedule.IdChannel.ToString()); Log.Debug(""); } Log.Debug("notViewable Schedules:"); foreach (Schedule myschedule in notViewableSchedules) { Log.Debug(myschedule.ProgramName); Log.Debug(myschedule.StartTime.ToString()); Log.Debug(myschedule.EndTime.ToString()); Log.Debug(myschedule.IdChannel.ToString()); Log.Debug(""); } return conflictingSchedules; }
public DateTime NextEpgTime() { try { TvBusinessLayer layer = new TvBusinessLayer(); Setting setting = null; string hours = layer.GetSetting("TvWishList_CheckEpgHours", "06").Value; int hournumber = 0; try { hournumber = Convert.ToInt32(hours); } catch (Exception exc) { Log.Error("Error: Could not convert EPG hours " + hours + " into number - setting to 06"); Log.Error("Exception message was:\n" + exc.Message + "\n"); hournumber = 6; } string minutes = layer.GetSetting("TvWishList_CheckEpgMinutes", "00").Value; Logdebug("tvserver minutes =" + minutes); int minutenumber = 0; try { minutenumber = Convert.ToInt32(minutes); } catch (Exception exc) { Log.Error("Error: Could not convert EPG minutes " + minutenumber + " into number - setting to 00"); Log.Error("Exception message was:\n" + exc.Message + "\n"); minutenumber = 0; } if (layer.GetSetting("TvWishList_Every", "false").Value.ToLower() == "true") { //process every xx days string days = layer.GetSetting("TvWishList_CheckEpgDays", "07").Value; int daynumber = 7; try { daynumber = Convert.ToInt32(days); } catch (Exception exc) { Log.Error("Error: Could not convert EPG days " + days + " into number - setting to 07"); Log.Error("Exception message was:\n" + exc.Message + "\n"); daynumber = 7; } _NextEpgTime = _NextEpgTime.AddDays(daynumber); } else //process week days { // extract weekday bool Sunday = false; if (layer.GetSetting("TvWishList_Sunday", "false").Value.ToLower() == "true") { Sunday = true; Log.Debug("Sunday"); } bool Monday = false; if (layer.GetSetting("TvWishList_Monday", "false").Value.ToLower() == "true") { Monday = true; Log.Debug("Monday"); } bool Tuesday = false; if (layer.GetSetting("TvWishList_Tuesday", "false").Value.ToLower() == "true") { Tuesday = true; Log.Debug("Tuesday"); } bool Wednesday = false; if (layer.GetSetting("TvWishList_Wednesday", "false").Value.ToLower() == "true") { Wednesday = true; Log.Debug("Wednesday"); } bool Thursday = false; if (layer.GetSetting("TvWishList_Thursday", "false").Value.ToLower() == "true") { Thursday = true; Log.Debug("Thursday"); } bool Friday = false; if (layer.GetSetting("TvWishList_Friday", "false").Value.ToLower() == "true") { Friday = true; Log.Debug("Friday"); } bool Saturday = false; if (layer.GetSetting("TvWishList_Saturday", "false").Value.ToLower() == "true") { Saturday = true; Log.Debug("Saturday"); } string testdatestring = DateTime.Now.ToString("yyyy-MM-dd") + "_" + hournumber.ToString("D2") + ":" + minutenumber.ToString("D2"); DateTime testdate = DateTime.ParseExact(testdatestring, "yyyy-MM-dd_HH:mm", System.Globalization.CultureInfo.InvariantCulture); Logdebug("testdate=" + testdate.ToString()); int daynumber = 7; if (testdate > DateTime.Now) { daynumber = 0; } DayOfWeek weekday = _NextEpgTime.DayOfWeek; if (weekday == DayOfWeek.Sunday) { if (Monday) daynumber = 1; else if (Tuesday) daynumber = 2; else if (Wednesday) daynumber = 3; else if (Thursday) daynumber = 4; else if (Friday) daynumber = 5; else if (Saturday) daynumber = 6; } else if (weekday == DayOfWeek.Monday) { if (Tuesday) daynumber = 1; else if (Wednesday) daynumber = 2; else if (Thursday) daynumber = 3; else if (Friday) daynumber = 4; else if (Saturday) daynumber = 5; else if (Sunday) daynumber = 6; } else if (weekday == DayOfWeek.Tuesday) { if (Wednesday) daynumber = 1; else if (Thursday) daynumber = 2; else if (Friday) daynumber = 3; else if (Saturday) daynumber = 4; else if (Sunday) daynumber = 5; else if (Monday) daynumber = 6; } else if (weekday == DayOfWeek.Wednesday) { if (Thursday) daynumber = 1; else if (Friday) daynumber = 2; else if (Saturday) daynumber = 3; else if (Sunday) daynumber = 4; else if (Monday) daynumber = 5; else if (Tuesday) daynumber = 6; } else if (weekday == DayOfWeek.Thursday) { if (Friday) daynumber = 1; else if (Saturday) daynumber = 2; else if (Sunday) daynumber = 3; else if (Monday) daynumber = 4; else if (Tuesday) daynumber = 5; else if (Wednesday) daynumber = 6; } else if (weekday == DayOfWeek.Friday) { if (Saturday) daynumber = 1; else if (Sunday) daynumber = 2; else if (Monday) daynumber = 3; else if (Tuesday) daynumber = 4; else if (Wednesday) daynumber = 5; else if (Thursday) daynumber = 6; } else if (weekday == DayOfWeek.Saturday) { if (Sunday) daynumber = 1; else if (Monday) daynumber = 2; else if (Tuesday) daynumber = 3; else if (Wednesday) daynumber = 4; else if (Thursday) daynumber = 5; else if (Friday) daynumber = 6; } _PreviousEpgTime = _NextEpgTime; _NextEpgTime = _NextEpgTime.AddDays(daynumber); Log.Debug("_PreviousEpgTime=" + _PreviousEpgTime.ToString()); Log.Debug("_NextEpgTime=" + _NextEpgTime.ToString()); Log.Debug("daynumber=" + daynumber.ToString()); } string datestring = _NextEpgTime.ToString("yyyy-MM-dd"); datestring = datestring + "_" + hours + ":" + minutes; Logdebug("Next epg checking date set to datestring=" + datestring); _NextEpgTime = DateTime.ParseExact(datestring, "yyyy-MM-dd_HH:mm", System.Globalization.CultureInfo.InvariantCulture); _NextEpgTime = EPGUpdateBeforeSchedule(_NextEpgTime); setting = layer.GetSetting("TvWishList_NextEpgDate","2999-01-01"); setting.Value = _NextEpgTime.ToString("yyyy-MM-dd_HH:mm", System.Globalization.CultureInfo.InvariantCulture); Logdebug("Next epg checking date set to " + setting.Value); setting.Persist(); } catch (Exception ex) { Log.Error("Error in starting setting next Epg date time: Exception message was " + ex.Message); } return _NextEpgTime; }
public bool save_longsetting(string mystring, string mysetting) { TvBusinessLayer layer = new TvBusinessLayer(); Setting setting; int STRINGLIMIT = 4000; //is 4096 string limit for settings - split if larger // tell TvWishCreator setting = layer.GetSetting("TvWishList_TvWishDataCreator", "0.0.0.0"); if (setting.Value != _DataLoadedBy) { Log.Error("Fatal data consistency error: Data have been loaded by " + _DataLoadedBy + " and were overwritten by " + setting.Value+" will overwrite again!"); } setting.Value = _LockingPluginname;//new data created now _DataLoadedBy = _LockingPluginname; setting.Persist(); // tell TvWish Version setting = layer.GetSetting("TvWishList_TvWishVersion", "0.0.0.0"); setting.Value = TvWishVersion(); setting.Persist(); #if (MP2) //send pipe command for speeding up savesettings string response = string.Empty; string command = Main_GUI.PipeCommands.RemoveLongSetting.ToString() + mysetting + ":10"; Log.Debug("command=" + command); for (int i = 1; i < 120; i++) { response = PipeClient.Instance.RunSingleCommand(command); if (response == PluginGuiLocalizeStrings.Get(1200)) //Waiting for old process to finish { Log.Debug("Waiting for old process to finish"); Thread.Sleep(1000); } else { break; } } Log.Debug("Server response=" + response); if (response.StartsWith("Error") ) {//error occured Log.Error("Error in pipecommand response="+response); } #elif(MPTV2) //Log.Debug("TvWishListSetup.Setup=" + TvWishListSetup.Setup.ToString()); Log.Debug("TvSetup = " + TvSetup.ToString()); if (TvSetup) {// Command comes from setup form as TvWishList setup is activated //send pipe command for speeding up savesettings string response = string.Empty; string command = PipeCommands.RemoveLongSetting.ToString() + mysetting + ":10"; Log.Debug("command=" + command); for (int i = 1; i < 120; i++) { response = PipeClient.Instance.RunSingleCommand(command); if (response == PluginGuiLocalizeStrings.Get(1200)) //Waiting for old process to finish { Log.Debug("Waiting for old process to finish"); Thread.Sleep(1000); } else { break; } } Log.Debug("Server response=" + response); if (response.StartsWith("Error")) {//error occured Log.Error("Error in pipecommand response=" + response); } } else //command comes from tvserver as TvWishList setup is deactivated { Setting.DeleteSettings(mysetting); } #else //cleanup work for (int i = 1; i < 1000; i++) { setting = layer.GetSetting(mysetting + "_" + i.ToString("D3"), "_DOES_NOT_EXIST_"); Log.Debug("save_longsetting setting=" + setting.Value); if (setting.Value == "_DOES_NOT_EXIST_") { setting.Remove(); break; } else { string value = setting.Value; setting.Remove(); //if (value == string.Empty) was needed for MP2 only before pipecommand // break; //will be cleaned up later by tv server } } #endif // split string if too large !!! Limit of 4096 characters in tv server try { if (mystring.Length > STRINGLIMIT) { string partial_string = mystring.Substring(0, STRINGLIMIT); setting = layer.GetSetting(mysetting, ""); setting.Value = partial_string; //LogDebug("partial string " + mysetting + " =" + partial_string, (int)LogSetting.DEBUG); setting.Persist(); int ctr = 1; while (ctr * STRINGLIMIT <= mystring.Length) { if ((ctr + 1) * STRINGLIMIT < mystring.Length) { partial_string = mystring.Substring(ctr * STRINGLIMIT, STRINGLIMIT); setting = layer.GetSetting(mysetting + "_" + ctr.ToString("D3"), ""); setting.Value = partial_string; //LogDebug("partial string " + mysetting + "_" + ctr.ToString("D3") + " =" + partial_string, (int)LogSetting.DEBUG); setting.Persist(); } else { partial_string = mystring.Substring(ctr * STRINGLIMIT, mystring.Length - ctr * STRINGLIMIT); setting = layer.GetSetting(mysetting + "_" + ctr.ToString("D3"), ""); setting.Value = partial_string; //LogDebug("partial listviewstring " + mysetting + "_" + ctr.ToString("D3") + " =" + partial_string, (int)LogSetting.DEBUG); setting.Persist(); ctr++; setting = layer.GetSetting(mysetting + "_" + ctr.ToString("D3"), ""); setting.Value = ""; setting.Persist(); } ctr++; if (ctr > 999) { Log.Debug("!!!!!!!!!!!!!!!!!!!! Fatal Error: Too many data entries - skipping data", (int)LogSetting.ERROR); break; } } } else //do not split string - small enough { setting = layer.GetSetting(mysetting, ""); setting.Value = mystring; setting.Persist(); int ctr = 1; //LogDebug("string " + mysetting + "=" + mystring, (int)LogSetting.DEBUG); setting = layer.GetSetting(mysetting + "_" + ctr.ToString("D3"), ""); //needed for detecting in loadlongsettings setting.Value = ""; setting.Persist(); } return true; } catch (Exception exc) { Log.Debug("Adding long setting failed with message \n" + exc.Message, (int)LogSetting.ERROR); return false; } }
public void SetupLanguages() { TvBusinessLayer layer = new TvBusinessLayer(); Setting setting; //check for installation folders first setting = layer.GetSetting("TvWishList_TV_USER_FOLDER", "NOT_FOUND"); TV_USER_FOLDER = setting.Value; Log.Debug("a) TV_USER_FOLDER=" + TV_USER_FOLDER); if ((File.Exists(TV_USER_FOLDER + @"\TvService.exe") == true) || (Directory.Exists(TV_USER_FOLDER) == false)) { //autodetect paths #if (MPTV2) //Native MP2 Tv server instpaths.GetInstallPathsMP2(); TV_USER_FOLDER = instpaths.ask_TV2_USER(); #else instpaths.GetInstallPaths(); TV_USER_FOLDER = instpaths.ask_TV_USER(); #endif LogDebug("TV server user folder detected at " + TV_USER_FOLDER, (int)LogSetting.DEBUG); if ((File.Exists(TV_USER_FOLDER + @"\TvService.exe") == true) || (Directory.Exists(TV_USER_FOLDER) == false)) { LogDebug(@" TV server user folder does not exist - using C:\MediaPortal", (int)LogSetting.ERROR); TV_USER_FOLDER = @"C:\MediaPortal"; if (Directory.Exists(TV_USER_FOLDER) == false) Directory.CreateDirectory(TV_USER_FOLDER + @"\TvWishList"); } } setting.Value = TV_USER_FOLDER; setting.Persist();//write setting during initialization Log.Debug("TV_USER_FOLDER=" + TV_USER_FOLDER); //checkboxes setting = layer.GetSetting("TvWishList_Debug", "false"); DEBUG = false; Boolean.TryParse(setting.Value, out DEBUG); checkBoxDebug.Checked = DEBUG; Log.DebugValue = DEBUG; LogDebug("Loadsettings Debug set", (int)LogSetting.DEBUG); if (lng.ReadLanguageFile() == false) return; tabControl1.TabPages[0].Text = lng.TranslateString("Main", 100); radioButtonEasy.Text = lng.TranslateString("Easy", 101); radioButtonExpert.Text = lng.TranslateString("Expert", 102); buttonUp.Text = lng.TranslateString("Up", 103); buttonDown.Text = lng.TranslateString("Down", 104); buttonDelete.Text = lng.TranslateString("Delete", 105); buttonCancel.Text = lng.TranslateString("Cancel", 106); buttonDefault.Text = lng.TranslateString("Default", 107); buttonhelp.Text = lng.TranslateString("Help", 108); checkBoxDebug.Text = lng.TranslateString("Debugmodus", 109); linkLabel1.Text = lng.TranslateString("Home Page", 110); buttonallactive.Text = lng.TranslateString("All Active", 111); buttonallinactive.Text = lng.TranslateString("All Inactive", 112); buttonSkipAll.Text = lng.TranslateString("Skip All", 113); buttonSkipNone.Text = lng.TranslateString("Skip None", 114); label11.Text = lng.TranslateString("Channel Filter", 115); tabControl1.TabPages[1].Text = lng.TranslateString("Email", 130); groupBox2.Text = lng.TranslateString("Account", 131); label16.Text = lng.TranslateString("User Name", 132); label18.Text = lng.TranslateString("Password", 133); label1.Text = lng.TranslateString("Repeat Password", 134); label4.Text = lng.TranslateString("Email Address", 135); label2.Text = lng.TranslateString("only if different than user name", 136); buttontest.Text = lng.TranslateString("Search Now", 137); groupBox1.Text = lng.TranslateString("Address", 138); label14.Text = lng.TranslateString("Email Receiver", 139); buttonTestSend.Text = lng.TranslateString("Test Send Mail", 140); groupBox4.Text = lng.TranslateString("SMTP", 141); label13.Text = lng.TranslateString("Provider", 142); label8.Text = lng.TranslateString("Port", 143); label9.Text = lng.TranslateString("SMTP Server", 144); checkBoxSSL.Text = lng.TranslateString("SSL", 145); checkBoxemailreply.Text = lng.TranslateString("Enable Email Reply", 146); checkBoxEmailOnlynew.Text = lng.TranslateString("Email Only New", 147); labelstatus.Text = lng.TranslateString("Ready", 20); labelmainstatus.Text = lng.TranslateString("Ready", 20); tabControl1.TabPages[2].Text = lng.TranslateString("EPG", 193); groupBox3.Text = lng.TranslateString("Check EPG", 161); checkBoxMon.Text = lng.TranslateString("Monday", 162); checkBoxTue.Text = lng.TranslateString("Tuesday", 163); checkBoxWed.Text = lng.TranslateString("Wednesday", 164); checkBoxThur.Text = lng.TranslateString("Thursday", 165); checkBoxFri.Text = lng.TranslateString("Friday", 166); checkBoxSat.Text = lng.TranslateString("Saturday", 167); checkBoxSun.Text = lng.TranslateString("Sunday", 168); checkBoxEvery.Text = lng.TranslateString("Every", 169); label5.Text = lng.TranslateString("Days", 170); label7.Text = lng.TranslateString("Hours", 171); label10.Text = lng.TranslateString("Minutes", 172); label26.Text = lng.TranslateString("Minutes", 172); label6.Text = lng.TranslateString("At", 173); checkBoxScheduleMinutes.Text = lng.TranslateString("Check EPG", 174); label27.Text = lng.TranslateString("before each schedule", 175); label15.Text = lng.TranslateString("Next Tv Server Checking Date:", 176); groupBox6.Text = lng.TranslateString("Match Criteria for Repeated Movies and Episodes besides the title", 177); label12.Text = lng.TranslateString("EPG Repeater Mark in Title or Description", 178); groupBox5.Text = lng.TranslateString("Other Options", 179); checkBoxschedule.Text = lng.TranslateString("Automatic Recording", 180); checkBoxscheduleconflicts.Text = lng.TranslateString("Schedule Conflicts", 181); checkBoxDeleteChangedEPG.Text = lng.TranslateString("Delete Changed EPG", 182); checkBoxResetEmailFormat.Text = lng.TranslateString("Restore Default Values", 183); checkBoxSlowCPU.Text = lng.TranslateString("Slow CPU", 184); checkBoxSkipDeleted.Text = lng.TranslateString("Skip Deleted", 185); label17.Text = lng.TranslateString("Deleted Expiration:", 186); label19.Text = lng.TranslateString("Months", 187); label32.Text = lng.TranslateString("Max Schedules Per Wish", 188); label28.Text = lng.TranslateString("Minutes", 172); label20.Text = lng.TranslateString("ComSkip Wait Time", 192); tabControl1.TabPages[3].Text = lng.TranslateString("Settings", 160); tabControl1.TabPages[4].Text = lng.TranslateString("Formats", 200); label23.Text = lng.TranslateString("Expert users can define customized formats for sent emails", 205); label25.Text = lng.TranslateString("Date and Time Format", 201); //label20.Text = lng.TranslateString("Email Format", 202); label24.Text = lng.TranslateString("Language File", 203); label21.Text = lng.TranslateString("Sort Criteria", 204); checkBoxdescendingSort.Text = lng.TranslateString("Descending Sort", 206); label22.Text = lng.TranslateString("Filter Criteria", 207); checkBoxFilterEmail.Text = lng.TranslateString("Email", 208); checkBoxFilterRecord.Text = lng.TranslateString("Record", 209); checkBoxFilterConflicts.Text = lng.TranslateString("Conflicts", 210); checkBoxDeletemessageFile.Text = lng.TranslateString("Delete All Messages", 211); //Match Type 2600-2606 DataGridViewComboBoxColumn mygroupcomboxcolumn2 = dataGridView1.Columns[2] as DataGridViewComboBoxColumn; for (int i = 0; i <= 6; i++) { mygroupcomboxcolumn2.Items[i] = lng.Get(2600 + i); //Log.Debug(" mygroupcomboxcolumn2.Items["+i.ToString()+"]="+ mygroupcomboxcolumn2.Items[i].ToString()); } //Group DataGridViewComboBoxColumn mygroupcomboxcolumn3 = dataGridView1.Columns[3] as DataGridViewComboBoxColumn; mygroupcomboxcolumn3.Items[0] = lng.Get(4104); //"All Channels" //Record type 2650-2655 DataGridViewComboBoxColumn mygroupcomboxcolumn4 = dataGridView1.Columns[4] as DataGridViewComboBoxColumn; for (int i = 0; i <= 5; i++) { mygroupcomboxcolumn4.Items[i] = lng.Get(2650 + i); } //Action 2700-2702 // do not use view 2703! DataGridViewComboBoxColumn mygroupcomboxcolumn5 = dataGridView1.Columns[5] as DataGridViewComboBoxColumn; for (int i = 0; i <= 2; i++) { mygroupcomboxcolumn5.Items[i] = lng.Get(2700 + i); } //Recommendedcard Any DataGridViewComboBoxColumn mygroupcomboxcolumn16 = dataGridView1.Columns[16] as DataGridViewComboBoxColumn; mygroupcomboxcolumn16.Items[0] = lng.Get(4100); //Any //Days 2750-2756 DataGridViewComboBoxColumn mygroupcomboxcolumn20 = dataGridView1.Columns[20] as DataGridViewComboBoxColumn; mygroupcomboxcolumn20.Items[0] = lng.Get(4100); //Any for (int i = 0; i <= 6; i++) { mygroupcomboxcolumn20.Items[i+1] = lng.Get(2750 + i); } DataGridViewComboBoxColumn mygroupcomboxcolumn21 = dataGridView1.Columns[21] as DataGridViewComboBoxColumn; mygroupcomboxcolumn21.Items[0] = lng.Get(4100); //Any for (int i = 0; i <= 6; i++) { mygroupcomboxcolumn21.Items[i+1] = lng.Get(2750 + i); } //Channel DataGridViewComboBoxColumn mygroupcomboxcolumn22 = dataGridView1.Columns[22] as DataGridViewComboBoxColumn; mygroupcomboxcolumn22.Items[0] = lng.Get(4100); //Any //Use name Folder 2850-2853 DataGridViewComboBoxColumn mygroupcomboxcolumn25 = dataGridView1.Columns[25] as DataGridViewComboBoxColumn; for (int i = 0; i <= 3; i++) { mygroupcomboxcolumn25.Items[i] = lng.Get(2850 + i); } //Keep Until 2900-2906 --> not used a combobox in tv server //Change Episode Matching Criteria USE SHORT NAMES! DataGridViewComboBoxColumn mygroupcomboxcolumn33 = dataGridView1.Columns[33] as DataGridViewComboBoxColumn; mygroupcomboxcolumn33.Items[0] = lng.Get(3264);//bug do not use 4103, 3264 is used in tvWish.c for translation mygroupcomboxcolumn33.Items[1] = lng.Get(2960); mygroupcomboxcolumn33.Items[2] = lng.Get(2961); mygroupcomboxcolumn33.Items[3] = lng.Get(2962); mygroupcomboxcolumn33.Items[4] = lng.Get(2960) + "+" + lng.Get(2961); mygroupcomboxcolumn33.Items[5] = lng.Get(2960) + "+" + lng.Get(2962); mygroupcomboxcolumn33.Items[6] = lng.Get(2961) + "+" + lng.Get(2962); mygroupcomboxcolumn33.Items[7] = lng.Get(2960) + "+" + lng.Get(2961) + "+" + lng.Get(2962); /*Log.Debug("Episode Matching Criteria Items for Combobox"); Log.Debug(lng.Get(3264)); Log.Debug(lng.Get(2960)); Log.Debug(lng.Get(2961)); Log.Debug(lng.Get(2962)); Log.Debug(lng.Get(2960) + "+" + lng.Get(2961)); Log.Debug(lng.Get(2960) + "+" + lng.Get(2962)); Log.Debug(lng.Get(2961) + "+" + lng.Get(2962)); Log.Debug(lng.Get(2960) + "+" + lng.Get(2961) + "+" + lng.Get(2962)); Log.Debug("End Episode Matching Criteria Items for Combobox");*/ //PreferredGroup DataGridViewComboBoxColumn mygroupcomboxcolumn34 = dataGridView1.Columns[34] as DataGridViewComboBoxColumn; mygroupcomboxcolumn34.Items[0] = lng.Get(4104); //"All Channels" //Column Headers 2800-2835 dataGridView1.Columns[0].HeaderText = lng.TranslateString("Active", 2800); dataGridView1.Columns[1].HeaderText = lng.TranslateString("Search For", 2801); dataGridView1.Columns[2].HeaderText = lng.TranslateString("Match Type", 2802); dataGridView1.Columns[3].HeaderText = lng.TranslateString("Group", 2803); dataGridView1.Columns[4].HeaderText = lng.TranslateString("Record Type", 2804); dataGridView1.Columns[5].HeaderText = lng.TranslateString("Action", 2805); dataGridView1.Columns[6].HeaderText = lng.TranslateString("Exclude", 2806); dataGridView1.Columns[8].HeaderText = lng.TranslateString("Pre Recording Time", 2808); dataGridView1.Columns[9].HeaderText = lng.TranslateString("Post Recording Time", 2809); dataGridView1.Columns[10].HeaderText = lng.TranslateString("Episode Name", 2810); dataGridView1.Columns[11].HeaderText = lng.TranslateString("Episode Part", 2811); dataGridView1.Columns[12].HeaderText = lng.TranslateString("Episode Number", 2812); dataGridView1.Columns[13].HeaderText = lng.TranslateString("Series Number", 2813); dataGridView1.Columns[14].HeaderText = lng.TranslateString("Keep Episodes", 2814); dataGridView1.Columns[15].HeaderText = lng.TranslateString("Keep Until", 2815); dataGridView1.Columns[16].HeaderText = lng.TranslateString("Recommended Card", 2816); dataGridView1.Columns[17].HeaderText = lng.TranslateString("Priority", 2817); dataGridView1.Columns[18].HeaderText = lng.TranslateString("After Time", 2818); dataGridView1.Columns[19].HeaderText = lng.TranslateString("Before Time", 2819); dataGridView1.Columns[20].HeaderText = lng.TranslateString("After Day", 2820); dataGridView1.Columns[21].HeaderText = lng.TranslateString("Before Day", 2821); dataGridView1.Columns[22].HeaderText = lng.TranslateString("Channel", 2822); dataGridView1.Columns[23].HeaderText = lng.TranslateString("Skip", 2823); dataGridView1.Columns[24].HeaderText = lng.TranslateString("Name", 2824); dataGridView1.Columns[25].HeaderText = lng.TranslateString("Move Recordings to Folder", 2825); dataGridView1.Columns[26].HeaderText = lng.TranslateString("Show Only Within The Next Hour(s)", 2826); dataGridView1.Columns[33].HeaderText = lng.TranslateString("Change Episode Match Criteria", 2833); dataGridView1.Columns[34].HeaderText = lng.TranslateString("Preferred Channel Group", 2834); dataGridView1.Columns[35].HeaderText = lng.TranslateString("Including Recordings", 2835); //Tv Setup Format Column Box for (int i = 1; i <= 13; i++) { comboBoxSortCriteria.Items[i-1] = lng.Get(3200 + i); } comboBoxSortCriteria.Text = comboBoxSortCriteria.Items[0].ToString(); }
public bool SearchEPG(bool view_only_mode) { Log.Info("[TvWishList]:SearchEPG started with view_only_mode=" + view_only_mode.ToString(), (int)LogSetting.DEBUG); VIEW_ONLY_MODE = view_only_mode; myTvWishes = new TvWishProcessing(); // load globals from data base TvBusinessLayer layer = new TvBusinessLayer(); Setting setting; /* //Debug only Log.Debug("Debug Schedules:"); foreach (Schedule myschedule in Schedule.ListAll()) { outputscheduletoresponse(myschedule, (int)LogSetting.DEBUG); } //end debug */ lng.ReadLanguageFile(); Log.Debug("language file read"); try { setting = layer.GetSetting("TvWishList_Debug", "false"); if (BoolConversion(setting.Value,false)) { DEBUG = true; } else { DEBUG = false; } Log.DebugValue = DEBUG; //TV User Folder setting = layer.GetSetting("TvWishList_TV_USER_FOLDER", "NOT_FOUND"); TV_USER_FOLDER = setting.Value; /*// delete later - no more needed filewatchermessages = TV_USER_FOLDER + @"\TvWishList\filewatchermessages.txt"; if (File.Exists(filewatchermessages) == true) { File.Delete(filewatchermessages); LogDebug("Deleting file " + filewatchermessages, (int)LogSetting.DEBUG); }*/ } catch { string languagetext = lng.TranslateString("Fatal error - check the log file",24 ); labelmessage(languagetext, PipeCommands.Error); LogDebug("Could not read from TV database", (int)LogSetting.ERROR); return false; } //***************************************************** //Lock TvWishList with timeout error bool success = false; int seconds = 60; Log.Debug("Lock TvWishList EpgSearch"); for (int i = 0; i < seconds / 10; i++) { success = myTvWishes.LockTvWishList("TvWishList EpgSearch"); if (success) break; System.Threading.Thread.Sleep(10000); //sleep 10s to wait for BUSY=false string languagetext = lng.TranslateString("Waiting for old jobs {0}s to finish", 1, (seconds - i * 10).ToString()); Log.Debug(languagetext, (int)LogSetting.DEBUG); labelmessage(languagetext, PipeCommands.StartEpg); } if (success == false) { string languagetext = lng.TranslateString("Error: TvWishList did not finish old jobs - reboot your computer", 2); LogDebug(languagetext, (int)LogSetting.ERROR); labelmessage(languagetext, PipeCommands.Error); return false; } try { string languagetext = lng.TranslateString("Reading data settings", 3); LogDebug(languagetext, (int)LogSetting.DEBUG); labelmessage(languagetext, PipeCommands.StartEpg); //checkboxes Log.Debug("Reading Settings"); setting = layer.GetSetting("TvWishList_SkipDeleted", "false"); if (BoolConversion(setting.Value, false)) _skipDeleted = true; else _skipDeleted = false; setting = layer.GetSetting("TvWishList_EmailReply", "true"); if (BoolConversion(setting.Value, true)) _emailreply = true; else _emailreply = false; setting = layer.GetSetting("TvWishList_Schedule", "true"); if (BoolConversion(setting.Value, true)) _automaticrecording = true; else _automaticrecording = false; setting = layer.GetSetting("TvWishList_ScheduleConflicts", "false"); if (BoolConversion(setting.Value, false)) _scheduleconflicts = true; else _scheduleconflicts = false; setting = layer.GetSetting("TvWishList_EmailOnlyNew", "true"); if (BoolConversion(setting.Value, true)) _emailonlynew = true; else _emailonlynew = false; setting = layer.GetSetting("TvWishList_DeleteTimeChanges", "true"); if (BoolConversion(setting.Value, true)) _DeleteTimeChanges = true; else _DeleteTimeChanges = false; setting = layer.GetSetting("TvWishList_FilterEmail", "true"); if (BoolConversion(setting.Value, true)) _filter_email = true; else _filter_email = false; setting = layer.GetSetting("TvWishList_FilterRecord", "true"); if (BoolConversion(setting.Value, true)) _filter_scheduled = true; else _filter_scheduled = false; setting = layer.GetSetting("TvWishList_FilterConflicts", "true"); if (BoolConversion(setting.Value, true)) _filter_conflicts = true; else _filter_conflicts = false; setting = layer.GetSetting("TvWishList_DescendingSort", "false"); if (BoolConversion(setting.Value, true)) _descendingsort = true; else _descendingsort = false; //textboxes string Emailformat = myTvWishes.loadlongsettings("TvWishList_EmailFormat"); if (Emailformat == string.Empty) { Emailformat = lng.TranslateString(Emailformat, 90); } Emailformat = Emailformat.Replace(@"\n", "\n"); Emailformat = Emailformat.Replace("<br>", "\n"); Emailformat = Emailformat.Replace("<BR>", "\n"); string myEmailformat=Emailformat.ToString().Replace('{', '_'); myEmailformat=myEmailformat.ToString().Replace('}', '_'); LogDebug("Emailformat :" + myEmailformat, (int)LogSetting.DEBUG); //datetimeformat setting = layer.GetSetting("TvWishList_DateTimeFormat", ""); string DateTimeFormat = setting.Value.ToString(); if (DateTimeFormat == string.Empty) { DateTimeFormat = lng.TranslateString("{1:00}/{2:00} at {3:00}:{4:00}", 91); } string myDateformat = DateTimeFormat.ToString().Replace('{', '_'); myDateformat = myDateformat.ToString().Replace('}', '_'); LogDebug("DateTimeFormat=" + myDateformat, (int)LogSetting.DEBUG); //initialize messages string messagedata = ""; mymessage = new XmlMessages(DateTimeFormat, Emailformat, DEBUG); languagetext = lng.TranslateString("Loading Messages", 4); Log.Debug(languagetext); labelmessage(languagetext, PipeCommands.StartEpg); if (VIEW_ONLY_MODE == true) { messagedata = ""; //start with a clean message list for viewonlymode } else { //mymessage.filename = TV_USER_FOLDER + @"\TvWishList\Messages.xml"; messagedata = myTvWishes.loadlongsettings("TvWishList_ListViewMessages"); } mymessage.readxmlfile(messagedata, false); Log.Debug("mymessage.TvMessages.Count=" + mymessage.ListAllTvMessages().Count.ToString()); //mymessage.logmessages(); //DEBUG ONLY setting = layer.GetSetting("TvWishList_Sort", "Start"); string sortstring = setting.Value; if (sortstring == "Title") _sort = (int)XmlMessages.Sorting.Title; else if (sortstring == "Start") _sort = (int)XmlMessages.Sorting.Start; else if (sortstring == "Created") _sort = (int)XmlMessages.Sorting.Created; else if (sortstring == "Genre") _sort = (int)XmlMessages.Sorting.Genre; else if (sortstring == "Classification") _sort = (int)XmlMessages.Sorting.Classification; else if (sortstring == "ParentalRating") _sort = (int)XmlMessages.Sorting.ParentalRating; else if (sortstring == "StarRating") _sort = (int)XmlMessages.Sorting.StarRating; else if (sortstring == "Type") _sort = (int)XmlMessages.Sorting.Type; else if (sortstring == "Message") _sort = (int)XmlMessages.Sorting.Message; else if (sortstring == "SearchString") _sort = (int)XmlMessages.Sorting.SearchString; else if (sortstring == "EpisodeName") _sort = (int)XmlMessages.Sorting.EpisodeName; else if (sortstring == "EpisodeNum") _sort = (int)XmlMessages.Sorting.EpisodeNum; else if (sortstring == "EpisodeNumber") _sort = (int)XmlMessages.Sorting.EpisodeNumber; else if (sortstring == "EpisodePart") _sort = (int)XmlMessages.Sorting.EpisodePart; //EPG marker setting = layer.GetSetting("TvWishList_EpgMarker", ""); _EpgMarker = setting.Value; /*if (_EpgMarker.Contains(@"|")) { EpgMarkerExpression = true; } else { EpgMarkerExpression = false; }*/ //textboxes setting = layer.GetSetting("TvWishList_UserName", ""); _TextBoxUserName = setting.Value; setting = layer.GetSetting("TvWishList_Password", ""); _TextBoxPassword = setting.Value; setting = layer.GetSetting("TvWishList_TestReceiver", ""); s_receiver = setting.Value; setting = layer.GetSetting("TvWishList_SmtpEmailAddress", ""); _TextBoxSmtpEmailAddress = setting.Value; //providerdata setting = layer.GetSetting("TvWishList_Providers_0", "_Last Setting;;0;False"); string[] tokenarray = setting.Value.Split(';'); if (tokenarray.Length != 4) { LogDebug("Provider array has invalid number of elements: " + tokenarray.Length.ToString(), (int)LogSetting.ERROR); } else { try { _TextBoxSmtpServer = tokenarray[1]; _numericUpDownSmtpPort = Convert.ToInt32(tokenarray[2]); _checkBoxSSL = Convert.ToBoolean(tokenarray[3]); } catch (Exception ex) { LogDebug("Failed converting provider data with exception: " + ex.Message, (int)LogSetting.ERROR); languagetext = lng.TranslateString("Fatal error - check the log file", 24); labelmessage(languagetext, PipeCommands.StartEpg); //do not stop - do not flag as error Thread.Sleep(ErrorWaitTime); } } //maxfound setting = layer.GetSetting("TvWishList_MaxFound", "100"); try { MAXFOUND = Convert.ToInt32(setting.Value); } catch { LogDebug("Max Found could not be converted to number resetting to 100", (int)LogSetting.DEBUG); MAXFOUND = 100; languagetext = lng.TranslateString("Fatal error - check the log file", 24); labelmessage(languagetext, PipeCommands.StartEpg); //do not stop - do not flag as error Thread.Sleep(ErrorWaitTime); } setting = layer.GetSetting("TvWishList_MaxTvWishId", "0"); int maxTvWishId = 0; int.TryParse(setting.Value, out maxTvWishId); myTvWishes.MaxTvWishId = maxTvWishId; Log.Debug("EpgClass: MaxTvWishId=" + myTvWishes.MaxTvWishId.ToString(), (int)LogSetting.DEBUG); //deleteExpiration in months int deleteExpiration = 12; setting = layer.GetSetting("TvWishList_DeleteExpiration", "12"); try { deleteExpiration = Convert.ToInt32(setting.Value); } catch { LogDebug("Delete Expiration could not be converted to number resetting to 12", (int)LogSetting.ERROR); deleteExpiration = 12; languagetext = lng.TranslateString("Fatal error - check the log file", 24); labelmessage(languagetext, PipeCommands.StartEpg); //do not stop - do not flag as error Thread.Sleep(ErrorWaitTime); } //listviewdata setting = layer.GetSetting("TvWishList_ColumnSeparator", ";"); TV_WISH_COLUMN_SEPARATOR = setting.Value[0]; //default pre and post record from general recording settings setting = layer.GetSetting("preRecordInterval", "5"); string prerecord = setting.Value; setting = layer.GetSetting("postRecordInterval", "5"); string postrecord = setting.Value; myTvWishes.TvServerSettings(prerecord, postrecord, ChannelGroup.ListAll(), RadioChannelGroup.ListAll(), Channel.ListAll(), Card.ListAll(), TV_WISH_COLUMN_SEPARATOR); languagetext = lng.TranslateString("Loading Tv wishes", 5); Log.Debug(languagetext); labelmessage(languagetext, PipeCommands.StartEpg); string listviewdata = ""; if (VIEW_ONLY_MODE == true) { listviewdata = myTvWishes.loadlongsettings("TvWishList_OnlyView"); //never change setting name must match to MP plugin and later savelongsetting } else { listviewdata = myTvWishes.loadlongsettings("TvWishList_ListView"); } Log.Debug("listviewdata=" + listviewdata, (int)LogSetting.DEBUG); myTvWishes.Clear(); myTvWishes.LoadFromString(listviewdata, true); RESPONSE = ""; //conflictprograms.Clear(); //update messages before conflict checking of EPG data Log.Debug("after reading messages: TvMessages.Count=" + mymessage.ListAllTvMessages().Count.ToString()); mymessage.updatemessages(deleteExpiration); Log.Debug("after update messages: TvMessages.Count=" + mymessage.ListAllTvMessages().Count.ToString()); //Debug for foxbenw issue Log.Debug("Outputting all schedules before schedule processing"); foreach (Schedule oneschedule in Schedule.ListAll()) { mymessage.outputscheduletoresponse(oneschedule, (int)LogSetting.DEBUG); } Log.Debug("End of Outputting all schedules before schedule processing"); //#if (MP11RC || MP12) #if (TV11 || TV12) // check for conflicts between epg data and schedules (only for 1.1 final lor later) foreach (Schedule oneschedule in Schedule.ListAll()) { LogDebug("Schedule=" + oneschedule.ProgramName, (int)LogSetting.DEBUG); LogDebug("Schedule Start Time: " + oneschedule.StartTime.ToString(), (int)LogSetting.DEBUG); LogDebug("Schedule End Time: " + oneschedule.EndTime.ToString(), (int)LogSetting.DEBUG); LogDebug("Schedule Channel: " + oneschedule.IdChannel.ToString(), (int)LogSetting.DEBUG); LogDebug("Schedule ID: " + oneschedule.IdSchedule.ToString(), (int)LogSetting.DEBUG); bool EpgTimeChanged = false; Program testprogram = null; Schedule testschedule = oneschedule; try { testprogram = Program.RetrieveByTitleTimesAndChannel(oneschedule.ProgramName, oneschedule.StartTime, oneschedule.EndTime, oneschedule.IdChannel); } catch { testprogram = null; } if (_DeleteTimeChanges == true) { // check for valid EPG entry if (testprogram == null) { // check for changed time on same channel IList<Program> alternativeprograms = null; alternativeprograms = Program.RetrieveEveryTimeOnThisChannel(oneschedule.ProgramName, oneschedule.IdChannel); if (alternativeprograms != null) { // search for closest program to original start time double minimumdifferenz = 10000000.0; //start with largest value > 4 weeks Program minprogram = null; foreach (Program altprogram in alternativeprograms) { LogDebug("Alternate EPG=" + altprogram.Title, (int)LogSetting.DEBUG); LogDebug("Alternate Start Time: " + altprogram.StartTime.ToString(), (int)LogSetting.DEBUG); LogDebug("Alternate End Time: " + altprogram.EndTime.ToString(), (int)LogSetting.DEBUG); double totalminutes = (altprogram.StartTime - oneschedule.StartTime).TotalMinutes; if (totalminutes < 0) totalminutes = totalminutes * (-1); LogDebug("Differenz to Schedule totalminutes=" + totalminutes.ToString(), (int)LogSetting.DEBUG); // int differenz = oneschedule.StartTime.Subtract(altprogram.StartTime).Minutes; //DateTime.Compare(oneschedule.StartTime, altprogram.StartTime); if (totalminutes < minimumdifferenz) { minimumdifferenz = totalminutes; minprogram = altprogram; } } LogDebug("Minimum Differenz to Schedule = " + minimumdifferenz.ToString(), (int)LogSetting.DEBUG); if (minprogram != null) { //alternative program found Schedule schedule = layer.AddSchedule(minprogram.IdChannel, minprogram.Title, minprogram.StartTime, minprogram.EndTime, 0); schedule.PreRecordInterval = oneschedule.PreRecordInterval; schedule.PostRecordInterval = oneschedule.PostRecordInterval; schedule.ScheduleType = oneschedule.ScheduleType; schedule.Series = oneschedule.Series; schedule.KeepDate = oneschedule.KeepDate; schedule.KeepMethod = oneschedule.KeepMethod; schedule.RecommendedCard = oneschedule.RecommendedCard; schedule.Priority = oneschedule.Priority; schedule.Persist(); LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message = lng.TranslateString("Schedule {0} had no valid EPG data but could be corrected", 50, oneschedule.ProgramName); LogDebug("Scheduled New= " + schedule.ProgramName, (int)LogSetting.INFO); LogDebug("New Start Time= " + schedule.StartTime.ToString(), (int)LogSetting.INFO); LogDebug("New End Time= " + schedule.EndTime.ToString(), (int)LogSetting.INFO); LogDebug("Deleted= " + oneschedule.ProgramName, (int)LogSetting.INFO); LogDebug("Old Start Time= " + oneschedule.StartTime.ToString(), (int)LogSetting.INFO); LogDebug("OLd End Time= " + oneschedule.EndTime.ToString(), (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); EpgTimeChanged = true; //new // try to change schedule messages if they exist from old data try { int k; k = mymessage.GetTvMessageBySchedule(oneschedule,MessageType.Scheduled); LogDebug("try to change schedule message: k="+k.ToString(), (int)LogSetting.DEBUG); xmlmessage scheduledmessage = mymessage.GetTvMessageAtIndex(k); LogDebug("schedule message retrieved", (int)LogSetting.DEBUG); bool ok = mymessage.addmessage(schedule, scheduledmessage.message, MessageType.Scheduled, scheduledmessage.searchstring, (int)XmlMessages.MessageEvents.SCHEDULE_FOUND, scheduledmessage.tvwishid, string.Empty); LogDebug("ok=" + ok.ToString(), (int)LogSetting.DEBUG); if (ok) mymessage.DeleteTvMessageAt(k); /* updatedmessage.start = schedule.StartTime; updatedmessage.end = schedule.EndTime; mymessage.ReplaceTvMessageAtIndex(k, updatedmessage);*/ LogDebug("new schedule message has been added", (int)LogSetting.DEBUG); } catch { LogDebug("schedule message could not be found", (int)LogSetting.DEBUG); } //add new email message if it did exist try { int k; k = mymessage.GetTvMessageBySchedule(oneschedule, MessageType.Emailed); LogDebug("try to change email message: k=" + k.ToString(), (int)LogSetting.DEBUG); xmlmessage emailmessage = mymessage.GetTvMessageAtIndex(k); LogDebug("email message retrieved", (int)LogSetting.DEBUG); bool ok = mymessage.addmessage(schedule, emailmessage.message, MessageType.Emailed, emailmessage.searchstring, (int)XmlMessages.MessageEvents.EMAIL_FOUND, emailmessage.tvwishid, string.Empty); LogDebug("ok=" + ok.ToString(), (int)LogSetting.DEBUG); if (ok) mymessage.DeleteTvMessageAt(k); LogDebug("new email message has been added", (int)LogSetting.DEBUG); } catch { LogDebug("Email message could not be found", (int)LogSetting.DEBUG); } //end new change Log.Debug("Deleting schedule "+oneschedule.ProgramName+" with id="+oneschedule.IdSchedule.ToString()); oneschedule.Delete(); //delete old schedule if possible mymessage.addmessage(oneschedule, message, MessageType.Conflict, "", (int)XmlMessages.MessageEvents.NO_VALID_EPG, "-1", string.Empty); //reassign testprogram and testschedule testprogram = minprogram; testschedule = schedule; } else { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message = lng.TranslateString("Schedule {0} has no valid EPG data - check your schedules for conflicts",51,oneschedule.ProgramName); LogDebug(message, (int)LogSetting.INFO); LogDebug("Schedule start date = " + oneschedule.StartTime.ToString() + "\n", (int)LogSetting.INFO); LogDebug("Schedule end date= " + oneschedule.EndTime.ToString() + "\n\n", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); mymessage.addmessage(oneschedule, message, MessageType.Conflict, "", (int)XmlMessages.MessageEvents.NO_VALID_EPG, "-1", string.Empty); } } else //no alternative program does exist - email warning { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message = lng.TranslateString("Schedule {0} has no valid EPG data - check your schedules for conflicts",52,oneschedule.ProgramName); LogDebug(message, (int)LogSetting.INFO); LogDebug( "Schedule start date = " + oneschedule.StartTime.ToString() + "\n", (int)LogSetting.INFO); LogDebug("Schedule end date= " + oneschedule.EndTime.ToString() + "\n\n", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); mymessage.addmessage(oneschedule, message, MessageType.Conflict, "", (int)XmlMessages.MessageEvents.NO_VALID_EPG, "-1", string.Empty); //do not use -1 bug!!! } }// else: Schedule does match to EPG data - check next schedule }//end epg changes //try to reschedule if episode or description epg data and message have been changed, but only if tvwish still exists int i; try { i = mymessage.GetTvMessageBySchedule(testschedule,MessageType.Scheduled); // new bugfix: must be type scheduled } catch { i = -1; } Log.Debug("message index i=" + i.ToString()); if ((i >= 0) && (testprogram != null))//scheduled message does exist for schedule and program does exist for schedule { try { xmlmessage testmessage = mymessage.GetTvMessageAtIndex(i); Log.Debug("retriefed testmessage.title=" + testmessage.title); //get tvwish (which can cause exception for unvalid entries) TvWish mytestwish = myTvWishes.RetrieveById(testmessage.tvwishid); Log.Debug("retrieved mytestwish.name=" + mytestwish.name); bool ok = episodeManagementEmptyString(testprogram.Description, testmessage.description, testprogram.EpisodePart, testmessage.EpisodePart, testprogram.EpisodeName, testmessage.EpisodeName, testprogram.SeriesNum, testmessage.SeriesNum, testprogram.EpisodeNum, testmessage.EpisodeNum, mytestwish.b_episodecriteria_d, mytestwish.b_episodecriteria_n, mytestwish.b_episodecriteria_c); if ((ok == false) || (EpgTimeChanged))//epg episode data or epg time did change //new: always try to reschedule if epg time changed because simultanous change of EPG data cannot be tracked { //conflict message testmessage.type = MessageType.Conflict.ToString(); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message = lng.TranslateString("Epg data did change for Episode/Description or EPG Time changed- deleting current schedule and trying to reschedule",53); LogDebug(message, (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); testmessage.message = message; mymessage.ReplaceTvMessageAtIndex(i, testmessage); //delete schedule Log.Debug("Deleting testschedule " + testschedule.ProgramName + " with id=" + testschedule.IdSchedule.ToString()); testschedule.Delete(); if (mytestwish.b_active == false) {//need to run now again for inactive tvwish mytestwish.b_active = true; Log.Debug("Setting Tvwish active and running sql query"); //search for schedules SqlQueryPrograms(ref mytestwish, i); mytestwish.b_active = false; myTvWishes.ReplaceAtIndex(i, mytestwish); } } } catch //ignore errors { } }//end of episode changes } //end all schedules #endif //Debug for foxbenw issue Log.Debug("Outputting all schedules before tvwish processing"); foreach (Schedule oneschedule in Schedule.ListAll()) { mymessage.outputscheduletoresponse(oneschedule, (int)LogSetting.DEBUG); } Log.Debug("End of Outputting all schedules before tvwish processing"); // start processing all TvWishes TvWish mywish = null; for (int i = 0; i < myTvWishes.ListAll().Count; i++) { mywish = myTvWishes.GetAtIndex(i); if (DEBUG) { Log.Debug("Before Query:"); myTvWishes.DebugTvWish(mywish); } if ((mywish.name == "") && (mywish.searchfor == "") && (mywish.episodename == "") && (mywish.episodenumber == "") && (mywish.episodepart == "")) { Log.Debug("Skipping tvwish with id=" + mywish.tvwishid.ToString()); continue; } languagetext = lng.TranslateString("Searching for {0}", 6,mywish.name); labelmessage(languagetext, PipeCommands.StartEpg); //remove leading and ending spaces of tv wish Log.Debug("(before removing spaces: mywish.searchfor="+mywish.searchfor); if (mywish.searchfor.Length > 0) { while (mywish.searchfor[0] == ' ') { mywish.searchfor = mywish.searchfor.Substring(1, mywish.searchfor.Length - 1); if (mywish.searchfor.Length == 0) break; } while (mywish.searchfor[mywish.searchfor.Length - 1] == ' ') { mywish.searchfor = mywish.searchfor.Substring(0, mywish.searchfor.Length - 1); if (mywish.searchfor.Length == 0) break; } } Log.Debug("(after removing spaces: mywish.searchfor=" + mywish.searchfor); //search for recordings and add messages only in email mode DateTime start = DateTime.Now; //DEBUG PERFORMANCE if (VIEW_ONLY_MODE == false) //recording first to identify existing recordings SqlQueryRecordings(mywish, i); DateTime end = DateTime.Now; //DEBUG PERFORMANCE Log.Debug("SQL query recordings time=" + end.Subtract(start).TotalSeconds.ToString()); //DEBUG PERFORMANCE //search for schedules start = DateTime.Now; //DEBUG PERFORMANCE SqlQueryPrograms(ref mywish, i); end = DateTime.Now; //DEBUG PERFORMANCE Log.Debug("SQL query programs time=" + end.Subtract(start).TotalSeconds.ToString()); //DEBUG PERFORMANCE myTvWishes.ReplaceAtIndex(i, mywish); /* if (DEBUG) { Log.Debug("After Query:"); myTvWishes.DebugTvWish(mywish); }*/ } //end all Tvwishes //check for remaining schedule conflicts #if(TV11 || TV12) //only for 1.1 final IList<Schedule> allschedules = Schedule.ListAll(); IList<Card> cards = Card.ListAll(); // initialize conflicting schedules and assign all existing schedules to cards List<Schedule> conflicts = new List<Schedule>(); if (cards.Count != 0) { //LogDebug("GetConflictingSchedules: Cards.Count =" + cards.Count.ToString(), (int)LogSetting.DEBUG); #if (!MPTV2) List<Schedule>[] cardSchedules = new List<Schedule>[cards.Count]; for (int i = 0; i < cards.Count; i++) { cardSchedules[i] = new List<Schedule>(); } Schedule overlappingSchedule = null; #endif bool ok = false; Log.Debug("allschedules.count=" + allschedules.Count.ToString()); foreach (Schedule oneschedule in allschedules) { #if (MPTV2) if (Schedule.GetConflictingSchedules(oneschedule).Count > 0) { ok = false; } else { ok = true; } Log.Debug("ok="+ok.ToString()); /* Mediaportal.TV.Server.TVDatabase.Entities.Schedule onerawschedule = ServiceAgents.Instance.ScheduleServiceAgent.GetSchedule(oneschedule.IdSchedule); List<Mediaportal.TV.Server.TVDatabase.Entities.Schedule> notViewableSchedules = new List<Mediaportal.TV.Server.TVDatabase.Entities.Schedule>(); ServiceAgents.Instance.ScheduleServiceAgent.GetConflictingSchedules(onerawschedule, out notViewableSchedules); try { if (notViewableSchedules.Count > 0) { ok = false; } else { ok = true; } } catch { ok = false; }*/ #elif(TV110) //mylayer.GetConflictingSchedules(schedule, out conflictingSchedules, out notViewableSchedules); IList<Schedule> local_conflicts = GetConflictingSchedules(oneschedule); try { if (local_conflicts.Count > 0) ok = false; else ok = true; } catch { ok = false; } #else ok = AssignSchedulesToCard(oneschedule, cardSchedules, out overlappingSchedule, DEBUG); //overlappingSchedule not used #endif if (ok == false)//conflict exists { LogDebug("", (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); message = lng.TranslateString("Schedule conflict must be manually resolved",54); LogDebug(message, (int)LogSetting.INFO); LogDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", (int)LogSetting.INFO); outputscheduletoresponse(oneschedule, (int)LogSetting.INFO); LogDebug("", (int)LogSetting.INFO); mymessage.addmessage(oneschedule, message, MessageType.Conflict, "", (int)XmlMessages.MessageEvents.MANUAL_CONFLICT, "-1", string.Empty); //Bug -1 } } } #endif //enable html email format if ((mymessage.EmailFormat.StartsWith("USE_HTML")) && (mymessage.EmailFormat.Length > 7)) { mymessage.EmailFormat = mymessage.EmailFormat.Substring(8); HtmlFormat = true; } else { HtmlFormat = false; } //Send all reply mails //update messages was done at the beginning mymessage.sortmessages(_sort, _descendingsort); mymessage.filtermessages(_filter_email, false, _filter_conflicts, _filter_scheduled, false, false, false); // old: mymessage.filtermessages(_filter_email,_filter_scheduled,_filter_conflicts,false,false,false); RESPONSE = mymessage.emailmessages(_emailonlynew); //store modified listviewdata and messages back //update counters before saving data myTvWishes.UpdateCounters(mymessage.ListAllTvMessages()); //log messages mymessage.logmessages(); string listviewstring = myTvWishes.SaveToString(); //mymessage.logmessages(); //DEBUGONLY string dataString = mymessage.writexmlfile(false); //write xml file to string //LogDebug("Updated listview string: \n" + listviewstring, (int)LogSetting.DEBUG); if (VIEW_ONLY_MODE == true) { myTvWishes.save_longsetting(listviewstring, "TvWishList_OnlyView"); //do never modify keywords must match MP plugin myTvWishes.save_longsetting(dataString, "TvWishList_OnlyViewMessages"); } else { myTvWishes.save_longsetting(listviewstring, "TvWishList_ListView"); //do never modify keywords must match MP plugin myTvWishes.save_longsetting(dataString, "TvWishList_ListViewMessages"); } Log.Debug("RESPONSE="+RESPONSE); if ((_emailreply == true) && (RESPONSE != "") && (VIEW_ONLY_MODE == false)) { languagetext = lng.TranslateString("Sending email to {0}", 7, s_receiver); LogDebug(languagetext, (int)LogSetting.DEBUG); labelmessage(languagetext, PipeCommands.StartEpg); // build the email message /* LogDebug("_TextBoxSmtpServer " + _TextBoxSmtpServer, (int)LogSetting.DEBUG); LogDebug("_TextBoxUserName " + _TextBoxUserName, (int)LogSetting.DEBUG); LogDebug("_TextBoxPassword " + _TextBoxPassword, (int)LogSetting.DEBUG); LogDebug("_numericUpDownSmtpPort " + _numericUpDownSmtpPort.ToString(), (int)LogSetting.DEBUG); LogDebug("_checkBoxSSL " + _checkBoxSSL.ToString(), (int)LogSetting.DEBUG);*/ if (_TextBoxSmtpServer == "") { LogDebug("Error: No Smtp Server defined - check and test configuration in TV Server Configuration", (int)LogSetting.ERROR); languagetext = lng.TranslateString("Error: No Smtp Server defined", 8); labelmessage(languagetext, PipeCommands.Error); SearchEpgExit(); //includes setting BUSY = false; return false; } /* if ((_TextBoxUserName == "") && (_useCredentials)) { LogDebug("Error: No user name defined - check and test configuration in TV Server Configuration", (int)LogSetting.ERROR); languagetext = lng.TranslateString("Error: No user name defined", 9); labelmessage(languagetext, PipeCommands.Error); SearchEpgExit(); //includes setting BUSY = false; return false; } if ((_TextBoxPassword == "")&& (_useCredentials)) { LogDebug("Error: No password defined - check and test configuration in TV Server Configuration", (int)LogSetting.ERROR); languagetext = lng.TranslateString("Error: No password defined", 10); labelmessage(languagetext, PipeCommands.Error); SearchEpgExit(); //includes setting BUSY = false; return false; }*/ if (_TextBoxSmtpEmailAddress == "") { _TextBoxSmtpEmailAddress = _TextBoxUserName; } if (s_receiver == "") { LogDebug("Error: No receiver emailaddress defined - check and test configuration in TV Server Configuration", (int)LogSetting.ERROR); languagetext = lng.TranslateString("Error: No receiver emailaddress defined", 11); labelmessage(languagetext, PipeCommands.Error); SearchEpgExit(); //includes setting BUSY = false; return false; } //load last settings and store it in providerstring [0] setting = layer.GetSetting("TvWishList_Providers_0", "_Last Setting;;0;False;False;;0;False"); string[] array = setting.Value.Split(";".ToCharArray()); if (array.Length != 4) { LogDebug("TvWishList Error: Invalid provider string: " + setting.Value + "\n Count is " + array.Length, (int)LogSetting.ERROR); languagetext = lng.TranslateString("Error: Invalid provider settings", 12); labelmessage(languagetext, PipeCommands.Error); SearchEpgExit(); //includes setting BUSY = false; return false; } string ServerAddress = array[1]; if (ServerAddress == "") { LogDebug("Server address not specified - aborting email check", (int)LogSetting.ERROR); languagetext = lng.TranslateString("Error: Server address not specified", 13); labelmessage(languagetext, PipeCommands.Error); SearchEpgExit(); //includes setting BUSY = false; return false; } //wait for internet connection bool InternetConnected = false; for (int i = 1; i < 30; i++) //wait up to 300s and check every 10s { System.Threading.Thread.Sleep(10000); //sleep 10s to wait for internet connection after standby //check for existing ip address try { IPHostEntry hostIP = Dns.GetHostEntry(ServerAddress); IPAddress[] addr = hostIP.AddressList; LogDebug("POP3 Server exists", (int)LogSetting.DEBUG); InternetConnected = true; break; } catch {//continue loop LogDebug("Waiting for internet connection in iteration " + i.ToString(), (int)LogSetting.DEBUG); } } if (InternetConnected == false) { LogDebug("Failed to get internet connection", (int)LogSetting.DEBUG); languagetext = lng.TranslateString("Error: Failed to get internet connection to POP3 server", 14); labelmessage(languagetext, PipeCommands.Error); SearchEpgExit(); //includes setting BUSY = false; return false; } int smtpport = 0; try { smtpport = Convert.ToInt32(_numericUpDownSmtpPort); } catch { smtpport = 0; } if (smtpport == 0) { LogDebug("Error: No smtp port defined - check and test configuration in TV Server Configuration", (int)LogSetting.ERROR); languagetext = lng.TranslateString("Error: No smtp port defined", 15); labelmessage(languagetext, PipeCommands.Error); SearchEpgExit(); //includes setting BUSY = false; return false; } LogDebug("_TextBoxSmtpServer:" + _TextBoxSmtpServer, (int)LogSetting.DEBUG); LogDebug("smtpport:" + smtpport, (int)LogSetting.DEBUG); LogDebug("_checkBoxSSL:" + _checkBoxSSL.ToString(), (int)LogSetting.DEBUG); LogDebug("_TextBoxUserName:"******"_TextBoxSmtpEmailAddress:" + _TextBoxSmtpEmailAddress, (int)LogSetting.DEBUG); SendTvServerEmail sendobject = new SendTvServerEmail(_TextBoxSmtpServer, smtpport, _checkBoxSSL, _TextBoxUserName, _TextBoxPassword, _TextBoxSmtpEmailAddress); sendobject.Debug = DEBUG; sendobject.HtmlFormat = HtmlFormat; LogDebug("Send reply mail to " + s_receiver + " at " + DateTime.Now.ToString(), (int)LogSetting.DEBUG); LogDebug("Subject:" + s_subject, (int)LogSetting.DEBUG); LogDebug(RESPONSE, (int)LogSetting.DEBUG); LogDebug("End of mail", (int)LogSetting.DEBUG); bool ok = sendobject.SendNewEmail(s_receiver, s_subject, RESPONSE); if (ok == true) { LogDebug("Sending return emails completed", (int)LogSetting.DEBUG); //System.Threading.Thread.Sleep(2000); //wait 2s languagetext = lng.TranslateString("Sending return emails completed", 16); labelmessage(languagetext, PipeCommands.StartEpg); } else { if (_TextBoxUserName == string.Empty) { LogDebug("Sending return emails failed - check the username", (int)LogSetting.ERROR); languagetext = lng.TranslateString("Error: Sending return emails failed - check the username", 17); labelmessage(languagetext, PipeCommands.Error); } else if (_TextBoxPassword == string.Empty) { LogDebug("Sending return emails failed - check the password", (int)LogSetting.ERROR); languagetext = lng.TranslateString("Error: Sending return emails failed - check the password", 18); labelmessage(languagetext, PipeCommands.Error); } else { LogDebug("Sending return emails failed", (int)LogSetting.ERROR); languagetext = lng.TranslateString("Error: Sending return emails failed", 19); labelmessage(languagetext, PipeCommands.Error); } SearchEpgExit(); //includes setting BUSY = false; return false; } } //System.Threading.Thread.Sleep(2000); //wait 2s languagetext = lng.TranslateString("Ready", 20); labelmessage(languagetext, PipeCommands.Ready); Log.Info("SearchEPG ended successfully"); } catch (Exception exc) { Log.Error("Error:Exception in SearchEPG: "+exc.Message); string languagetext = lng.TranslateString("Fatal error - check the log file",24 ); labelmessage(languagetext, PipeCommands.Error); SearchEpgExit(); //includes setting BUSY = false; return false; } SearchEpgExit(); //includes setting BUSY = false; return true; }
public override void OnSectionActivated() { //set Debug flag first TvBusinessLayer layer = new TvBusinessLayer(); Setting setting; setting = layer.GetSetting("TvWishList_Debug", "false"); DEBUG = false; Boolean.TryParse(setting.Value, out DEBUG); checkBoxDebug.Checked = DEBUG; Log.DebugValue = DEBUG; //turn on setup flag _setup = true; LogDebug("TvWishList: Configuration activated", (int)LogSetting.DEBUG); if (epgwatchclass != null) { epgwatchclass.newlabelmessage += new setuplabelmessage(labelupdate); } #if (MPTV2) if (tvSetupPipeClient != null) { tvSetupPipeClient.newlabelmessage += new setupPipeLabelMessage(labelupdate); } #endif //dataGridView1.RowsAdded += new DataGridViewRowsAddedEventHandler(dataGridView1_RowsAdded); // set actual groups from TV server DataGridViewComboBoxColumn mygroupcomboxcolumn = dataGridView1.Columns[3] as DataGridViewComboBoxColumn; DataGridViewComboBoxColumn mypreferredgroupcomboxcolumn = dataGridView1.Columns[34] as DataGridViewComboBoxColumn; //LogDebug("2) Group Item Count=" + mygroupcomboxcolumn.Items.Count.ToString(), (int)LogSetting.DEBUG); if (mygroupcomboxcolumn.Items.Count == 1) { foreach (ChannelGroup channelgroup in ChannelGroup.ListAll()) { if (channelgroup.GroupName != "All Channels") { mygroupcomboxcolumn.Items.AddRange(new object[] { channelgroup.GroupName }); mypreferredgroupcomboxcolumn.Items.AddRange(new object[] { channelgroup.GroupName }); } } foreach (RadioChannelGroup radiochannelgroup in RadioChannelGroup.ListAll()) { if (radiochannelgroup.GroupName != "All Channels") { mygroupcomboxcolumn.Items.AddRange(new object[] { radiochannelgroup.GroupName }); mypreferredgroupcomboxcolumn.Items.AddRange(new object[] { radiochannelgroup.GroupName }); } } } //channel group drop box at the bottom of the GUI if (comboBoxGroups.Items.Count == 1) { foreach (ChannelGroup channelgroup in ChannelGroup.ListAll()) { if (channelgroup.GroupName != "All Channels") { comboBoxGroups.Items.AddRange(new object[] { channelgroup.GroupName }); } } foreach (RadioChannelGroup radiochannelgroup in RadioChannelGroup.ListAll()) { if (radiochannelgroup.GroupName != "All Channels") { comboBoxGroups.Items.AddRange(new object[] { radiochannelgroup.GroupName }); } } } //LogDebug("3)After Group Item Count=" + mygroupcomboxcolumn.Items.Count.ToString(), (int)LogSetting.DEBUG); //dataGridView1.Columns.RemoveAt(3); //dataGridView1.Columns.Insert(3, mygroupcomboxcolumn); //set tv cards #if(TV100) IList cards = Card.ListAll(); #elif(TV101) IList<Card> cards = Card.ListAll(); #elif(TV11) IList<Card> cards = Card.ListAll(); #elif(TV12) IList<Card> cards = Card.ListAll(); #endif DataGridViewComboBoxColumn mycomboxcolumn = dataGridView1.Columns[16] as DataGridViewComboBoxColumn; //LogDebug("Card Item Count=" + mycomboxcolumn.Items.Count.ToString(), (int)LogSetting.DEBUG); if (mycomboxcolumn.Items.Count == 1) { foreach (Card card in cards) { mycomboxcolumn.Items.AddRange(new object[] { card.IdCard.ToString() }); } } SetupLanguages(); //must come before loadsettings try { //***************************************************** //Lock TvWishList with timeout error bool success = false; //int seconds = 60; success = myTvWishes.LockTvWishList("TvWishList Setup"); if (!success) { setting = layer.GetSetting("TvWishList_LockingPluginname", "Not Defined"); MessageBox.Show(lng.TranslateString("Waiting for old jobs to finish from\n" + setting.Value + "\nTry again later\nIf jobs do not finish you have to reboot or manually stop the Tvserver", 250, setting.Value), lng.TranslateString("Closing Tv Configuration",251)); Log.Debug("Waiting for old jobs to finish from\n" + setting.Value + "\nTry again later\nIf jobs do not finish you have to reboot or manually stop the Tvserver"); Application.Exit(); //application is not closing immediately!! return; } MyLoadSettings(); //enable SetupTV process filewatcher loop after locking string filename = TV_USER_FOLDER + @"\TvWishList\SetupTvStarted.txt"; Log.Debug("trying to create file "+filename); if (!File.Exists(filename)) { try { File.WriteAllText(filename, "SetupTvStarted"); Log.Debug("file created"); } catch (Exception ex) { LogDebug("Fatal Error: Failed to delete file " + filename + " - exception message is\n" + ex.Message, (int)LogSetting.ERROR); } } } catch (Exception ex) { LogDebug("Fatal Error: Failed to load settings - exception message is\n" + ex.Message, (int)LogSetting.ERROR); LogDebug("Trying to resave settings to data base", (int)LogSetting.ERROR); try { MySaveSettings(); LogDebug("Saving settings succeeded", (int)LogSetting.ERROR); } catch { LogDebug("Fatal Error: Faileed to save settings", (int)LogSetting.ERROR); } } //language file drop box Log.Debug("start comboBoxLanguage.Items.Count="+comboBoxLanguage.Items.Count.ToString()); comboBoxLanguage.Items.Clear(); string languageFolder = TV_USER_FOLDER + @"\TvWishList\Languages"; if (Directory.Exists(languageFolder) == false) { Log.Error("language folder " + languageFolder + " does not exist"); comboBoxLanguage.Items.Add("Error: No Language files found"); } else { try { DirectoryInfo dirinfo = new DirectoryInfo(languageFolder); FileInfo[] allfiles = dirinfo.GetFiles("string*.xml"); ReverseLanguageFileTranslator_File = new string[allfiles.Length]; ReverseLanguageFileTranslator_Language = new string[allfiles.Length]; int ctr = 0; foreach (FileInfo myfileinfo in allfiles) { ReverseLanguageFileTranslator_File[ctr] = myfileinfo.Name; ReverseLanguageFileTranslator_Language[ctr] = LanguageFileTranslation(myfileinfo.Name); comboBoxLanguage.Items.Add(ReverseLanguageFileTranslator_Language[ctr]); ctr++; } } catch (Exception exc) { Log.Error("ProcessFolder Exception: " + exc.Message); } } Log.Debug("end comboBoxLanguage.Items.Count=" + comboBoxLanguage.Items.Count.ToString()); base.OnSectionActivated(); }
public void MySaveSettings() { Log.Debug("MySaveSettings()"); TvBusinessLayer layer = new TvBusinessLayer(); Setting setting; if (LoadSettingError == true) { LogDebug("No data saved because of loadsetting error", (int)LogSetting.ERROR); return; } //TV User Folder setting = layer.GetSetting("TvWishList_TV_USER_FOLDER", "NOT_FOUND"); setting.Value = TV_USER_FOLDER; setting.Persist(); //checkboxes setting = layer.GetSetting("TvWishList_Debug", "false"); if (checkBoxDebug.Checked == true) setting.Value = "true"; else setting.Value = "false"; setting.Persist(); setting = layer.GetSetting("TvWishList_SkipDeleted", "false"); if (checkBoxSkipDeleted.Checked == true) setting.Value = "true"; else setting.Value = "false"; setting.Persist(); setting = layer.GetSetting("TvWishList_EmailReply", "true"); if (checkBoxemailreply.Checked == true) setting.Value = "true"; else setting.Value = "false"; setting.Persist(); setting = layer.GetSetting("TvWishList_Schedule", "true"); if (checkBoxschedule.Checked == true) setting.Value = "true"; else setting.Value = "false"; setting.Persist(); setting = layer.GetSetting("TvWishList_ScheduleConflicts", "false"); if (checkBoxscheduleconflicts.Checked == true) setting.Value = "true"; else setting.Value = "false"; setting.Persist(); setting = layer.GetSetting("TvWishList_EmailOnlyNew", "true"); if (checkBoxEmailOnlynew.Checked == true) setting.Value = "true"; else setting.Value = "false"; setting.Persist(); setting = layer.GetSetting("TvWishList_DeleteTimeChanges", "true"); if (checkBoxDeleteChangedEPG.Checked == true) setting.Value = "true"; else setting.Value = "false"; setting.Persist(); setting = layer.GetSetting("TvWishList_SlowCPU", "true"); if (checkBoxSlowCPU.Checked == true) setting.Value = "true"; else setting.Value = "false"; setting.Persist(); setting = layer.GetSetting("TvWishList_FilterEmail", "true"); if (checkBoxFilterEmail.Checked == true) setting.Value = "true"; else setting.Value = "false"; setting.Persist(); setting = layer.GetSetting("TvWishList_FilterRecord", "false"); if (checkBoxFilterRecord.Checked == true) setting.Value = "true"; else setting.Value = "false"; setting.Persist(); setting = layer.GetSetting("TvWishList_FilterConflicts", "true"); if (checkBoxFilterConflicts.Checked == true) setting.Value = "true"; else setting.Value = "false"; setting.Persist(); setting = layer.GetSetting("TvWishList_DescendingSort", "true"); if (checkBoxdescendingSort.Checked == true) setting.Value = "true"; else setting.Value = "false"; setting.Persist(); setting = layer.GetSetting("TvWishList_Easy", "true"); if (radioButtonEasy.Checked == true) setting.Value = "true"; else setting.Value = "false"; setting.Persist(); setting = layer.GetSetting("TvWishList_Expert", "false"); if (radioButtonExpert.Checked == true) setting.Value = "true"; else setting.Value = "false"; setting.Persist(); //textboxes setting = layer.GetSetting("TvWishList_Sort", "Start"); setting.Value = SortCriteriaReverseTranslation(comboBoxSortCriteria.Text); setting.Persist(); setting = layer.GetSetting("TvWishList_DateTimeFormat", "{1:00}/{2:00} at {3:00}:{4:00}"); setting.Value = textBoxDateTimeFormat.Text; setting.Persist(); myTvWishes.save_longsetting(textBoxEmailFormat.Text, "TvWishList_EmailFormat"); setting = layer.GetSetting("TvWishList_EpgMarker", ""); setting.Value = textBoxEpgMark.Text; setting.Persist(); setting = layer.GetSetting("TvWishList_UserName", ""); setting.Value = trimstring(TextBoxUserName.Text); setting.Persist(); if (TextBoxPassword.Text !=TextBoxPassword2.Text) { MessageBox.Show(lng.TranslateString("Error: Your password does not match and is reset - please enter password again",023),lng.TranslateString("Error: Passwords Do Not Match",4305)); TextBoxPassword.Text=""; TextBoxPassword2.Text=""; } setting = layer.GetSetting("TvWishList_Password", ""); setting.Value = trimstring(TextBoxPassword.Text); setting.Persist(); if (textBoxSmtpEmailAdress.Text == "") { textBoxSmtpEmailAdress.Text = TextBoxUserName.Text; } setting = layer.GetSetting("TvWishList_SmtpEmailAddress", ""); setting.Value = trimstring(textBoxSmtpEmailAdress.Text); setting.Persist(); setting = layer.GetSetting("TvWishList_TestReceiver", ""); setting.Value = trimstring(TextBoxTestReceiver.Text); setting.Persist(); //arrays try { try { providerupdate(0); //store last settings as first provider defaults } catch {//ignore errors LogDebug("Last user settings could not be stored", (int)LogSetting.ERROR); } for (int i=0; i< listBoxProvider2.Items.Count; i++) //last settings are stored at position 0 for custom provider { setting = layer.GetSetting("TvWishList_Providers_"+i.ToString(), ";;;"); //LogDebug("provider_"+i.ToString()+" = "+providers[i]); setting.Value = providers[i]; if (setting.Value == null) { setting.Value = ";;;"; } setting.Persist(); } } catch (Exception ex) { LogDebug("Failed to write Provider ListBox to data base - exception message is\n" + ex.Message, (int)LogSetting.ERROR); } //maxfound //checkcombotextbox(ref ComboBox mycombobox,string format,int min, int max, string fieldname); checkcombotextbox(ref comboBoxmaxfound, "", 1, 1000000000, "Max Found"); setting = layer.GetSetting("TvWishList_MaxFound", "100"); setting.Value = comboBoxmaxfound.Text; setting.Persist(); setting = layer.GetSetting("TvWishList_DeleteExpiration", "12"); setting.Value = comboBoxDeleteExpiration.Text; setting.Persist(); setting = layer.GetSetting("TvWishList_ChannelGroups", "Any"); setting.Value = comboBoxGroups.Text; setting.Persist(); setting = layer.GetSetting("TvWishList_LanguageFile", "strings_en.xml"); setting.Value = ReverseLanguageFileTranslation(comboBoxLanguage.Text); setting.Persist(); //saving messages //update message.tvwishid if tvwish has been deleted or is unknown Log.Debug("tv setup window before updating messages: TvMessages.Count=" + mymessage.ListAllTvMessages().Count.ToString()); for (int i = mymessage.ListAllTvMessages().Count - 1; i >= 0; i--) { xmlmessage onemessage = mymessage.GetTvMessageAtIndex(i); //Log.Debug("onemessage.tvwishid="+onemessage.tvwishid); TvWish mywish = myTvWishes.RetrieveById(onemessage.tvwishid); if ((mywish == null)&&(onemessage.tvwishid!="-1")) //allow -1 for general conflicts { Log.Debug("deleting " + onemessage.title + " at " + onemessage.start.ToString() + " ID: " + onemessage.tvwishid); mymessage.DeleteTvMessageAt(i); } /*if ((mywish == null) && (mymessage.tvwishid != "-1")) { Log.Debug("Changing for " + mymessage.title + " at " + mymessage.start.ToString() + " from " + mymessage.tvwishid + " to -1"); mymessage.tvwishid = "-1"; mymessages.TvMessages[i] = mymessage; }*/ } Log.Debug("tv setup window after updating messages: TvMessages.Count=" + mymessage.ListAllTvMessages().Count.ToString()); string dataString = mymessage.writexmlfile(false); //write xml file to string myTvWishes.save_longsetting(dataString, "TvWishList_ListViewMessages"); //listview data string listviewstring = ""; myTvWishes.Clear(); //convert dataGridView1 to tvwishes for (int i=0;i<dataGridView1.Rows.Count-1;i++) { try //add new default row to enable automated upgrades for new formats with more items { TvWish mywish = myTvWishes.DefaultData(); Log.Debug("i="+i.ToString()); Log.Debug("dataGridView1.RowCount=" + dataGridView1.RowCount.ToString()); Log.Debug("dataGridView1.ColumnCount=" + dataGridView1.ColumnCount.ToString()); try { mywish.active = dataGridView1[(int)TvWishEntries.active, i].Value.ToString(); } catch { } try{ mywish.skip = dataGridView1[(int)TvWishEntries.skip, i].Value.ToString(); } catch { } try{ mywish.includeRecordings = dataGridView1[(int)TvWishEntries.includerecordings, i].Value.ToString(); } catch { } try { mywish.searchfor = dataGridView1[(int)TvWishEntries.searchfor, i].Value.ToString(); } catch { } try { mywish.matchtype = dataGridView1[(int)TvWishEntries.matchtype, i].Value.ToString(); } catch { } try { mywish.group = dataGridView1[(int)TvWishEntries.group, i].Value.ToString(); } catch { } try { mywish.recordtype = dataGridView1[(int)TvWishEntries.recordtype, i].Value.ToString(); } catch { } try { mywish.action = dataGridView1[(int)TvWishEntries.action, i].Value.ToString(); } catch { } try { mywish.exclude = dataGridView1[(int)TvWishEntries.exclude, i].Value.ToString(); } catch { } try { mywish.prerecord = dataGridView1[(int)TvWishEntries.prerecord, i].Value.ToString(); } catch { } try { mywish.postrecord = dataGridView1[(int)TvWishEntries.postrecord, i].Value.ToString(); } catch { } try { mywish.episodename = dataGridView1[(int)TvWishEntries.episodename, i].Value.ToString(); } catch { } try { mywish.episodepart = dataGridView1[(int)TvWishEntries.episodepart, i].Value.ToString(); } catch { } try { mywish.episodenumber = dataGridView1[(int)TvWishEntries.episodenumber, i].Value.ToString(); } catch { } try { mywish.seriesnumber = dataGridView1[(int)TvWishEntries.seriesnumber, i].Value.ToString(); } catch { } try { mywish.keepepisodes = dataGridView1[(int)TvWishEntries.keepepisodes, i].Value.ToString(); } catch { } try { mywish.keepuntil = dataGridView1[(int)TvWishEntries.keepuntil, i].Value.ToString(); } catch { } try { mywish.recommendedcard = dataGridView1[(int)TvWishEntries.recommendedcard, i].Value.ToString(); } catch { } try { mywish.priority = dataGridView1[(int)TvWishEntries.priority, i].Value.ToString(); } catch { } try { mywish.aftertime = dataGridView1[(int)TvWishEntries.aftertime, i].Value.ToString(); } catch { } try { mywish.beforetime = dataGridView1[(int)TvWishEntries.beforetime, i].Value.ToString(); } catch { } try { mywish.afterdays = dataGridView1[(int)TvWishEntries.afterdays, i].Value.ToString(); } catch { } try { mywish.beforedays = dataGridView1[(int)TvWishEntries.beforedays, i].Value.ToString(); } catch { } try { mywish.channel = dataGridView1[(int)TvWishEntries.channel, i].Value.ToString(); } catch { } try { mywish.name = dataGridView1[(int)TvWishEntries.name, i].Value.ToString(); } catch { } try { mywish.useFolderName = dataGridView1[(int)TvWishEntries.useFolderName, i].Value.ToString(); } catch { } try { mywish.withinNextHours = dataGridView1[(int)TvWishEntries.withinNextHours, i].Value.ToString(); } catch { } try { mywish.episodecriteria = dataGridView1[(int)TvWishEntries.episodecriteria, i].Value.ToString(); } catch { } try { mywish.preferredgroup = dataGridView1[(int)TvWishEntries.preferredgroup, i].Value.ToString(); } catch { } //add tvwishid try { mywish.tvwishid = dataGridView1[(int)TvWishEntries.tvwishid, i].Value.ToString(); //decrease MaxTvWishId because new defaultwish id was not used - otherwise tvwishid would be increased during each save action myTvWishes.MaxTvWishId--; } catch { } myTvWishes.Add(mywish); Log.Debug("Tv wish added"); } catch (Exception exc) { LogDebug("Reading row failed with message \n" + exc.Message, (int)LogSetting.ERROR); } LogDebug("Tvwish finished", (int)LogSetting.DEBUG); } //End all rows in datagridview // save to string (includes backtransformation from language) listviewstring = myTvWishes.SaveToStringNoChecking(); Log.Debug("savesettings: after language translation listviewstring=" + listviewstring); //check data listviewstring = myTvWishes.CheckString(listviewstring); Log.Debug("savesettings: after checking listviewstring=" + listviewstring); myTvWishes.save_longsetting(listviewstring, "TvWishList_ListView"); //must be after listviewstring! LogDebug("SaveSetings: MaxTvWishId=" + myTvWishes.MaxTvWishId.ToString(), (int)LogSetting.DEBUG); setting = layer.GetSetting("TvWishList_MaxTvWishId", "0"); setting.Value = myTvWishes.MaxTvWishId.ToString(); setting.Persist(); //integer values setting = layer.GetSetting("TvWishList_ProviderSelected", "0"); int j = listBoxProvider2.SelectedIndex; setting.Value = j.ToString(); //select actual item in listbox setting.Persist(); //comboboxes setting = layer.GetSetting("TvWishList_WaitComSkipMinutes", "60"); try { int i = Convert.ToInt32(comboBoxComSkipWaitMinutes.Text); } catch { comboBoxComSkipWaitMinutes.Text = "60"; } setting.Value = comboBoxComSkipWaitMinutes.Text; setting.Persist(); // check comboboxes before saving //checkcombotextbox(ref ComboBox mycombobox,string format,int min, int max, string fieldname); checkcombotextbox(ref comboBoxdays, "D2" , 1, 14, "Days"); //checkcombotextbox(ref ComboBox mycombobox,string format,int min, int max, string fieldname); checkcombotextbox(ref comboBoxhours, "D2", 0, 23, "Hours"); //checkcombotextbox(ref ComboBox mycombobox,string format,int min, int max, string fieldname); checkcombotextbox(ref comboBoxminutes, "D2", 0, 59, "Minutes"); //calculate new epg checking data // get old epg checking data string old_epg_check = ""; setting = layer.GetSetting("TvWishList_CheckEpgDays", "07"); old_epg_check += "days"+setting.Value; setting = layer.GetSetting("TvWishList_CheckEpgHours", "06"); old_epg_check += "hours"+setting.Value; setting = layer.GetSetting("TvWishList_CheckEpgMinutes", "00"); LogDebug("old epg checking data minutes=" + setting.Value, (int)LogSetting.DEBUG); old_epg_check += "minutes"+setting.Value; setting = layer.GetSetting("TvWishList_Monday", "false"); old_epg_check += "Monday" + setting.Value; setting = layer.GetSetting("TvWishList_Tuesday", "false"); old_epg_check += "Tuesday" + setting.Value; setting = layer.GetSetting("TvWishList_Wednesday", "false"); old_epg_check += "Wednesday" + setting.Value; setting = layer.GetSetting("TvWishList_Thursday", "false"); old_epg_check += "Thursday" + setting.Value; setting = layer.GetSetting("TvWishList_Friday", "false"); old_epg_check += "Friday" + setting.Value; setting = layer.GetSetting("TvWishList_Saturday", "false"); old_epg_check += "Saturday" + setting.Value; setting = layer.GetSetting("TvWishList_Sunday", "false"); old_epg_check += "Sunday" + setting.Value; setting = layer.GetSetting("TvWishList_Every", "false"); old_epg_check += "Every" + setting.Value; setting = layer.GetSetting("TvWishList_CheckEPGScheduleMinutes", "false"); old_epg_check += "CheckEPGScheduleMinutes" + setting.Value; setting = layer.GetSetting("TvWishList_BeforeEPGMinutes", "00"); old_epg_check += "BeforeEPGMinutes" + setting.Value; string new_epg_check = ""; if ((checkBoxMon.Checked == false) && (checkBoxTue.Checked == false) && (checkBoxWed.Checked == false) && (checkBoxThur.Checked == false) && (checkBoxFri.Checked == false) && (checkBoxSat.Checked == false) && (checkBoxSun.Checked == false) && (checkBoxEvery.Checked == false)) { checkBoxEvery.Checked = true; LogDebug("no information about checking days - using every " + comboBoxdays.Text + " days", (int)LogSetting.INFO); } setting = layer.GetSetting("TvWishList_CheckEpgDays", "07"); setting.Value = comboBoxdays.Text; new_epg_check += "days" + setting.Value; setting.Persist(); setting = layer.GetSetting("TvWishList_CheckEpgHours", "06"); setting.Value = comboBoxhours.Text; new_epg_check += "hours" + setting.Value; setting.Persist(); setting = layer.GetSetting("TvWishList_CheckEpgMinutes", "00"); setting.Value = comboBoxminutes.Text; LogDebug("new_epg_check minutes=" + setting.Value, (int)LogSetting.DEBUG); new_epg_check += "minutes" + setting.Value; setting.Persist(); setting = layer.GetSetting("TvWishList_Monday", "false"); if (checkBoxMon.Checked == true) setting.Value = "true"; else setting.Value = "false"; new_epg_check += "Monday" + setting.Value; setting.Persist(); setting = layer.GetSetting("TvWishList_Tuesday", "false"); if (checkBoxTue.Checked == true) setting.Value = "true"; else setting.Value = "false"; new_epg_check += "Tuesday" + setting.Value; setting.Persist(); setting = layer.GetSetting("TvWishList_Wednesday", "false"); if (checkBoxWed.Checked == true) setting.Value = "true"; else setting.Value = "false"; new_epg_check += "Wednesday" + setting.Value; setting.Persist(); setting = layer.GetSetting("TvWishList_Thursday", "false"); if (checkBoxThur.Checked == true) setting.Value = "true"; else setting.Value = "false"; new_epg_check += "Thursday" + setting.Value; setting.Persist(); setting = layer.GetSetting("TvWishList_Friday", "false"); if (checkBoxFri.Checked == true) setting.Value = "true"; else setting.Value = "false"; new_epg_check += "Friday" + setting.Value; setting.Persist(); setting = layer.GetSetting("TvWishList_Saturday", "false"); if (checkBoxSat.Checked == true) setting.Value = "true"; else setting.Value = "false"; new_epg_check += "Saturday" + setting.Value; setting.Persist(); setting = layer.GetSetting("TvWishList_Sunday", "false"); if (checkBoxSun.Checked == true) setting.Value = "true"; else setting.Value = "false"; new_epg_check += "Sunday" + setting.Value; setting.Persist(); setting = layer.GetSetting("TvWishList_Every", "false"); if (checkBoxEvery.Checked == true) setting.Value = "true"; else setting.Value = "false"; new_epg_check += "Every" + setting.Value; setting.Persist(); setting = layer.GetSetting("TvWishList_CheckEPGScheduleMinutes", "false"); if (checkBoxScheduleMinutes.Checked == true) setting.Value = "true"; else setting.Value = "false"; new_epg_check += "CheckEPGScheduleMinutes" + setting.Value; setting.Persist(); setting = layer.GetSetting("TvWishList_BeforeEPGMinutes", "00"); setting.Value = comboBoxScheduleMinutes.Text; new_epg_check += "BeforeEPGMinutes" + setting.Value; setting.Persist(); LogDebug("old_epg_check=" + old_epg_check, (int)LogSetting.DEBUG); LogDebug("new_epg_check=" + new_epg_check, (int)LogSetting.DEBUG); //update tv service if a new value is set if (old_epg_check != new_epg_check) { string nextEpgFileWatcherFile = TV_USER_FOLDER + @"\TvWishList\NextEPGCheck.txt"; LogDebug("Writing Filewatcher file " + nextEpgFileWatcherFile, (int)LogSetting.DEBUG); //writing file try { File.WriteAllText(nextEpgFileWatcherFile, "NextEPGCheckUpdate"); } catch (Exception exc) { LogDebug("Error in writing epg time file " + nextEpgFileWatcherFile, (int)LogSetting.ERROR); LogDebug(exc.Message, (int)LogSetting.ERROR); } } }
public void MyLoadSettings() { LogDebug("Loadsettings started", (int)LogSetting.DEBUG); TvBusinessLayer layer = new TvBusinessLayer(); Setting setting; try { setting = layer.GetSetting("TvWishList_SkipDeleted", "false"); if (BoolConversion(setting.Value,false)) checkBoxSkipDeleted.Checked = true; else checkBoxSkipDeleted.Checked = false; setting = layer.GetSetting("TvWishList_EmailReply", "true"); if (BoolConversion(setting.Value, true)) checkBoxemailreply.Checked = true; else checkBoxemailreply.Checked = false; setting = layer.GetSetting("TvWishList_Schedule", "true"); if (BoolConversion(setting.Value, true)) checkBoxschedule.Checked = true; else checkBoxschedule.Checked = false; setting = layer.GetSetting("TvWishList_ScheduleConflicts", "false"); if (BoolConversion(setting.Value, false)) checkBoxscheduleconflicts.Checked = true; else checkBoxscheduleconflicts.Checked = false; setting = layer.GetSetting("TvWishList_EmailOnlyNew", "true"); if (BoolConversion(setting.Value, true)) checkBoxEmailOnlynew.Checked = true; else checkBoxEmailOnlynew.Checked = false; setting = layer.GetSetting("TvWishList_SlowCPU", "true"); if (BoolConversion(setting.Value, true)) checkBoxSlowCPU.Checked = true; else checkBoxSlowCPU.Checked = false; setting = layer.GetSetting("TvWishList_Monday", "false"); if (BoolConversion(setting.Value, false)) checkBoxMon.Checked = true; else checkBoxMon.Checked = false; setting = layer.GetSetting("TvWishList_Tuesday", "false"); if (BoolConversion(setting.Value, false)) checkBoxTue.Checked = true; else checkBoxTue.Checked = false; setting = layer.GetSetting("TvWishList_Wednesday", "false"); if (BoolConversion(setting.Value, false)) checkBoxWed.Checked = true; else checkBoxWed.Checked = false; setting = layer.GetSetting("TvWishList_Thursday", "false"); if (BoolConversion(setting.Value, false)) checkBoxThur.Checked = true; else checkBoxThur.Checked = false; setting = layer.GetSetting("TvWishList_Friday", "false"); if (BoolConversion(setting.Value, false)) checkBoxFri.Checked = true; else checkBoxFri.Checked = false; setting = layer.GetSetting("TvWishList_Saturday", "false"); if (BoolConversion(setting.Value, false)) checkBoxSat.Checked = true; else checkBoxSat.Checked = false; setting = layer.GetSetting("TvWishList_Sunday", "false"); if (BoolConversion(setting.Value, false)) checkBoxSun.Checked = true; else checkBoxSun.Checked = false; setting = layer.GetSetting("TvWishList_Every", "false"); if (BoolConversion(setting.Value, false)) checkBoxEvery.Checked = true; else checkBoxEvery.Checked = false; setting = layer.GetSetting("TvWishList_DeleteTimeChanges", "false"); if (BoolConversion(setting.Value, false)) checkBoxDeleteChangedEPG.Checked = true; else checkBoxDeleteChangedEPG.Checked = false; setting = layer.GetSetting("TvWishList_FilterEmail", "true"); if (BoolConversion(setting.Value, true)) checkBoxFilterEmail.Checked = true; else checkBoxFilterEmail.Checked = false; setting = layer.GetSetting("TvWishList_FilterRecord", "false"); if (BoolConversion(setting.Value, false)) checkBoxFilterRecord.Checked = true; else checkBoxFilterRecord.Checked = false; setting = layer.GetSetting("TvWishList_FilterConflicts", "true"); if (BoolConversion(setting.Value, true)) checkBoxFilterConflicts.Checked = true; else checkBoxFilterConflicts.Checked = false; setting = layer.GetSetting("TvWishList_DescendingSort", "false"); if (BoolConversion(setting.Value, false)) checkBoxdescendingSort.Checked = true; else checkBoxdescendingSort.Checked = false; setting = layer.GetSetting("TvWishList_Easy", "true"); if (BoolConversion(setting.Value, true)) { radioButtonEasy.Checked = true; } setting = layer.GetSetting("TvWishList_Expert", "false"); if (BoolConversion(setting.Value, false)) { radioButtonExpert.Checked = true; } LogDebug("TvWishList_Expert=" + radioButtonExpert.Checked.ToString(), (int)LogSetting.DEBUG); setting = layer.GetSetting("TvWishList_DateTimeFormat", "{1:00}/{2:00} at {3:00}:{4:00}"); textBoxDateTimeFormat.Text = setting.Value; //LogDebug("TvWishList_DateTimeFormat=" + setting.Value, (int)LogSetting.DEBUG); textBoxEmailFormat.Text = myTvWishes.loadlongsettings("TvWishList_EmailFormat"); setting = layer.GetSetting("TvWishList_Sort", "Start"); Log.Debug("TvWishList_Sort=" + setting.Value); comboBoxSortCriteria.Text = SortCriteriaTranslation(setting.Value); setting = layer.GetSetting("TvWishList_EpgMarker", ""); textBoxEpgMark.Text = setting.Value; setting = layer.GetSetting("TvWishList_LanguageFile", "strings_en.xml"); comboBoxLanguage.Text = LanguageFileTranslation(setting.Value); Log.Debug("TvWishList_LanguageFile="+setting.Value); setting = layer.GetSetting("TvWishList_UserName", ""); TextBoxUserName.Text = setting.Value; setting = layer.GetSetting("TvWishList_Password", ""); TextBoxPassword.Text = setting.Value; TextBoxPassword2.Text = setting.Value; setting = layer.GetSetting("TvWishList_TestReceiver", ""); TextBoxTestReceiver.Text = setting.Value; setting = layer.GetSetting("TvWishList_SmtpEmailAddress", ""); textBoxSmtpEmailAdress.Text = setting.Value; if (textBoxSmtpEmailAdress.Text == "") { textBoxSmtpEmailAdress.Text = TextBoxUserName.Text; } //combobox setting = layer.GetSetting("TvWishList_WaitComSkipMinutes", "60"); try { int i = Convert.ToInt32(setting.Value); comboBoxComSkipWaitMinutes.Text = setting.Value; } catch { comboBoxComSkipWaitMinutes.Text = "60"; } setting = layer.GetSetting("TvWishList_CheckEpgDays", "07"); comboBoxdays.Text = setting.Value; //checkcombotextbox(ref ComboBox mycombobox,string format,int min, int max, string fieldname); checkcombotextbox(ref comboBoxdays, "D2", 1, 14, "Days"); setting = layer.GetSetting("TvWishList_CheckEpgHours", "06"); comboBoxhours.Text = setting.Value; //checkcombotextbox(ref ComboBox mycombobox,string format,int min, int max, string fieldname); checkcombotextbox(ref comboBoxhours, "D2", 0, 23, "Hours"); setting = layer.GetSetting("TvWishList_CheckEpgMinutes", "00"); comboBoxminutes.Text = setting.Value; //checkcombotextbox(ref ComboBox mycombobox,string format,int min, int max, string fieldname); checkcombotextbox(ref comboBoxminutes, "D2", 0, 59, "Minutes"); setting = layer.GetSetting("TvWishList_BeforeEPGMinutes", "00"); comboBoxScheduleMinutes.Text = setting.Value; //checkcombotextbox(ref ComboBox mycombobox,string format,int min, int max, string fieldname); checkcombotextbox(ref comboBoxScheduleMinutes, "D2", 0, 59, "Minutes"); setting = layer.GetSetting("TvWishList_CheckEPGScheduleMinutes", "false"); //Log.Debug("TvWishList_CheckEPGScheduleMinutes"+setting.Value); try { checkBoxScheduleMinutes.Checked = Convert.ToBoolean(setting.Value); } catch { checkBoxScheduleMinutes.Checked = false; } try { setting = layer.GetSetting("TvWishList_ChannelGroups", "Any"); comboBoxGroups.Text = setting.Value; } catch { comboBoxGroups.Text = "Any"; } //maxfound setting = layer.GetSetting("TvWishList_MaxFound", "100"); comboBoxmaxfound.Text = setting.Value; //checkcombotextbox(ref ComboBox mycombobox,string format,int min, int max, string fieldname); checkcombotextbox(ref comboBoxmaxfound, "", 1, 1000000000, "Max Found"); setting = layer.GetSetting("TvWishList_MaxTvWishId", "0"); int maxTvWishId = 0; int.TryParse(setting.Value, out maxTvWishId); myTvWishes.MaxTvWishId = maxTvWishId; LogDebug("LoadSettings: MaxTvWishId=" + myTvWishes.MaxTvWishId.ToString(), (int)LogSetting.DEBUG); setting = layer.GetSetting("TvWishList_DeleteExpiration", "12"); comboBoxDeleteExpiration.Text = setting.Value; //initialize messages string messagedata = ""; //mymessage = new XmlMessages(mymessage.date_time_format, mymessage.EmailFormat, DEBUG); messagedata = myTvWishes.loadlongsettings("TvWishList_ListViewMessages"); mymessage.readxmlfile(messagedata, false); Log.Debug(mymessage.ListAllTvMessages().Count.ToString()+" messages read"); setting = layer.GetSetting("TvWishList_ColumnSeparator", ";"); TV_WISH_COLUMN_SEPARATOR = setting.Value[0]; //default pre and post record from general recording settings setting = layer.GetSetting("preRecordInterval", "5"); PRERECORD = setting.Value; setting = layer.GetSetting("postRecordInterval", "5"); POSTRECORD = setting.Value; //initialize tvserver settings in TvWish for checking of channels myTvWishes.TvServerSettings(PRERECORD, POSTRECORD, ChannelGroup.ListAll(), RadioChannelGroup.ListAll(), Channel.ListAll(), Card.ListAll(), TV_WISH_COLUMN_SEPARATOR); //listviewdata //Log.Debug("Turnuing off eventhandler for adding rows"); //dataGridView1.RowsAdded -= new DataGridViewRowsAddedEventHandler(dataGridView1_RowsAdded); DataGridViewComboBoxColumn channelfilter = dataGridView1.Columns[22] as DataGridViewComboBoxColumn; string addnames = ";"; for (int i = 0; i < channelfilter.Items.Count; i++) { addnames += channelfilter.Items[i] + ";" as String; } //convert defaultdata with language translation string[] columndata = (string[])myTvWishes.DefaultValues.Clone(); TvWish defaultwish = new TvWish(); defaultwish = myTvWishes.CreateTvWish(true, columndata); //Log.Debug("defaultwish with Languagetranslation"); myTvWishes.DebugTvWish(defaultwish); //define nullvalues for datagrid with language translation DataGridViewCheckBoxColumn active = dataGridView1.Columns[(int)TvWishEntries.active] as DataGridViewCheckBoxColumn; active.DefaultCellStyle.NullValue = defaultwish.b_active; DataGridViewCheckBoxColumn skip = dataGridView1.Columns[(int)TvWishEntries.skip] as DataGridViewCheckBoxColumn; skip.DefaultCellStyle.NullValue = defaultwish.b_skip; DataGridViewCheckBoxColumn includerecordings = dataGridView1.Columns[(int)TvWishEntries.includerecordings] as DataGridViewCheckBoxColumn; includerecordings.DefaultCellStyle.NullValue = defaultwish.b_includeRecordings; DataGridViewTextBoxColumn searchfor = dataGridView1.Columns[(int)TvWishEntries.searchfor] as DataGridViewTextBoxColumn; searchfor.DefaultCellStyle.NullValue = defaultwish.searchfor; DataGridViewComboBoxColumn matchtype = dataGridView1.Columns[(int)TvWishEntries.matchtype] as DataGridViewComboBoxColumn; matchtype.DefaultCellStyle.NullValue = defaultwish.matchtype; DataGridViewComboBoxColumn group = dataGridView1.Columns[(int)TvWishEntries.group] as DataGridViewComboBoxColumn; group.DefaultCellStyle.NullValue = defaultwish.group; DataGridViewComboBoxColumn recordtype = dataGridView1.Columns[(int)TvWishEntries.recordtype] as DataGridViewComboBoxColumn; recordtype.DefaultCellStyle.NullValue = defaultwish.recordtype; DataGridViewComboBoxColumn action = dataGridView1.Columns[(int)TvWishEntries.action] as DataGridViewComboBoxColumn; action.DefaultCellStyle.NullValue = defaultwish.action; DataGridViewTextBoxColumn exclude = dataGridView1.Columns[(int)TvWishEntries.exclude] as DataGridViewTextBoxColumn; exclude.DefaultCellStyle.NullValue = defaultwish.exclude; DataGridViewTextBoxColumn prerecord = dataGridView1.Columns[(int)TvWishEntries.prerecord] as DataGridViewTextBoxColumn; prerecord.DefaultCellStyle.NullValue = defaultwish.prerecord; DataGridViewTextBoxColumn postrecord = dataGridView1.Columns[(int)TvWishEntries.postrecord] as DataGridViewTextBoxColumn; postrecord.DefaultCellStyle.NullValue = defaultwish.postrecord; DataGridViewTextBoxColumn episodename = dataGridView1.Columns[(int)TvWishEntries.episodename] as DataGridViewTextBoxColumn; episodename.DefaultCellStyle.NullValue = defaultwish.episodename; DataGridViewTextBoxColumn episodepart = dataGridView1.Columns[(int)TvWishEntries.episodepart] as DataGridViewTextBoxColumn; episodepart.DefaultCellStyle.NullValue = defaultwish.episodepart; DataGridViewTextBoxColumn episodenumber = dataGridView1.Columns[(int)TvWishEntries.episodenumber] as DataGridViewTextBoxColumn; episodenumber.DefaultCellStyle.NullValue = defaultwish.episodenumber; DataGridViewTextBoxColumn seriesnumber = dataGridView1.Columns[(int)TvWishEntries.seriesnumber] as DataGridViewTextBoxColumn; seriesnumber.DefaultCellStyle.NullValue = defaultwish.seriesnumber; DataGridViewTextBoxColumn keepepisodes = dataGridView1.Columns[(int)TvWishEntries.keepepisodes] as DataGridViewTextBoxColumn; keepepisodes.DefaultCellStyle.NullValue = defaultwish.keepepisodes; DataGridViewTextBoxColumn keepuntil = dataGridView1.Columns[(int)TvWishEntries.keepuntil] as DataGridViewTextBoxColumn; keepuntil.DefaultCellStyle.NullValue = defaultwish.keepuntil; DataGridViewComboBoxColumn recommendedcard = dataGridView1.Columns[(int)TvWishEntries.recommendedcard] as DataGridViewComboBoxColumn; recommendedcard.DefaultCellStyle.NullValue = defaultwish.recommendedcard; DataGridViewComboBoxColumn priority = dataGridView1.Columns[(int)TvWishEntries.priority] as DataGridViewComboBoxColumn; priority.DefaultCellStyle.NullValue = defaultwish.priority; DataGridViewTextBoxColumn aftertime = dataGridView1.Columns[(int)TvWishEntries.aftertime] as DataGridViewTextBoxColumn; aftertime.DefaultCellStyle.NullValue = defaultwish.aftertime; DataGridViewTextBoxColumn beforetime = dataGridView1.Columns[(int)TvWishEntries.beforetime] as DataGridViewTextBoxColumn; beforetime.DefaultCellStyle.NullValue = defaultwish.beforetime; DataGridViewComboBoxColumn afterdays = dataGridView1.Columns[(int)TvWishEntries.afterdays] as DataGridViewComboBoxColumn; afterdays.DefaultCellStyle.NullValue = defaultwish.afterdays; DataGridViewComboBoxColumn beforedays = dataGridView1.Columns[(int)TvWishEntries.beforedays] as DataGridViewComboBoxColumn; beforedays.DefaultCellStyle.NullValue = defaultwish.beforedays; DataGridViewComboBoxColumn channel = dataGridView1.Columns[(int)TvWishEntries.channel] as DataGridViewComboBoxColumn; channel.DefaultCellStyle.NullValue = defaultwish.channel; DataGridViewTextBoxColumn name = dataGridView1.Columns[(int)TvWishEntries.name] as DataGridViewTextBoxColumn; name.DefaultCellStyle.NullValue = defaultwish.name; DataGridViewComboBoxColumn useFolderName = dataGridView1.Columns[(int)TvWishEntries.useFolderName] as DataGridViewComboBoxColumn; useFolderName.DefaultCellStyle.NullValue = defaultwish.useFolderName; DataGridViewTextBoxColumn withinNextHours = dataGridView1.Columns[(int)TvWishEntries.withinNextHours] as DataGridViewTextBoxColumn; withinNextHours.DefaultCellStyle.NullValue = defaultwish.withinNextHours; DataGridViewComboBoxColumn episodecriteria = dataGridView1.Columns[(int)TvWishEntries.episodecriteria] as DataGridViewComboBoxColumn; episodecriteria.DefaultCellStyle.NullValue = defaultwish.episodecriteria; DataGridViewComboBoxColumn preferredgroup = dataGridView1.Columns[(int)TvWishEntries.preferredgroup] as DataGridViewComboBoxColumn; preferredgroup.DefaultCellStyle.NullValue = defaultwish.preferredgroup; //load all tvwishes string listviewdata = myTvWishes.loadlongsettings("TvWishList_ListView"); LogDebug("liestview=" + listviewdata, (int)LogSetting.DEBUG); myTvWishes.LoadFromString(listviewdata, true); //needed for later checking in savesettings() //fill datagridview LogDebug("initial datagrid rowcount=" + dataGridView1.Rows.Count.ToString(), (int)LogSetting.DEBUG); int newrow = dataGridView1.Rows.Count - 1; if (newrow == 0) //fill only the first time, datagrid is being remembered { Log.Debug("myTvWishes.ListAll().Count="+myTvWishes.ListAll().Count.ToString()); foreach (TvWish mywish in myTvWishes.ListAll()) { newrow = dataGridView1.Rows.Count - 1; Log.Debug("searchfor" + mywish.searchfor); Log.Debug("newrow=" + newrow.ToString()); if (addnames.Contains(";" + mywish.channel + ";") == false)//add new channel names { channelfilter.Items.Add(mywish.channel); addnames += mywish.channel + ";"; //LogDebug("loadsetting addnames: " + addnames, (int)LogSetting.DEBUG); } LoadTvWishToDataGridRow(newrow, mywish); } Log.Debug(myTvWishes.ListAll().Count.ToString()+" Tvwishes added"); }//end fill datagrid updatechannelnames(); //dataGridView1.RowsAdded += new DataGridViewRowsAddedEventHandler(dataGridView1_RowsAdded); //Log.Debug("Turnuing on eventhandler for adding rows"); //end listviewdata //load providervalues setdefaultproviders(false); //load last settings and store it in providerstring [0] setting = layer.GetSetting("TvWishList_Providers_0", "_Last Setting;;0;False"); providers[0] = setting.Value; //LogDebug("Load settings: provider_0=" + providers[0]); try { translateprovider(providers[0]); //restore last user settings providers[0] } catch { LogDebug("translateprovider(providers[0]= " + providers[0] + " failed", (int)LogSetting.DEBUG); } //labels DateTime NextEpgDate = DateTime.Now; setting = layer.GetSetting("TvWishList_NextEpgDate", DateTime.Now.ToString("yyyy-MM-dd_HH:mm", System.Globalization.CultureInfo.InvariantCulture)); try { NextEpgDate = DateTime.ParseExact(setting.Value, "yyyy-MM-dd_HH:mm", System.Globalization.CultureInfo.InvariantCulture); } catch (Exception exc) { LogDebug("NextEpgDate failed with exception: " + exc.Message, (int)LogSetting.ERROR); } Log.Debug("FormatConversion:"); string mydate = NextEpgDate.ToString(lng.TranslateString(@"MM/dd/yyyy", 189), System.Globalization.CultureInfo.InvariantCulture); Log.Debug("mydate=" + mydate); string mytime = NextEpgDate.ToString(lng.TranslateString(@"HH:mm", 190), System.Globalization.CultureInfo.InvariantCulture); Log.Debug("mytime=" + mytime); labelCheckingdate.Text = lng.TranslateString("{0} at {1}",191,mydate,mytime); Log.Debug("labelCheckingdate.Text" + labelCheckingdate.Text); //integer values setting = layer.GetSetting("TvWishList_ProviderSelected", "0"); int j = 0; int.TryParse(setting.Value, out j); if ((j < 0) || (j > listBoxProvider2.Items.Count)) { j = 0; } try { listBoxProvider2.SetSelected(0, true); //select custom item in listbox } catch (Exception exc) { LogDebug("listBoxProvider2.SetSelected failed with exception: " + exc.Message, (int)LogSetting.ERROR); } LogDebug("LoadSettings Completed", (int)LogSetting.DEBUG); LoadSettingError = false; } catch (Exception exc) { LogDebug("LoadSettings Error: Exception: "+exc.Message, (int)LogSetting.ERROR); LoadSettingError = true; } }
private void TestTvWishList() { LogDebug("EPG watching started", (int)LogSetting.DEBUG); try { MySaveSettings(); } catch (Exception ex) { LogDebug("Fatal Error: Failed to save settings - exception message is\n" + ex.Message, (int)LogSetting.ERROR); } try { //***************************************************** //unlock TvWishList myTvWishes.UnLockTvWishList(); //***************************************************** //run processing epgwatchclass.SearchEPG(false); //Email & Record } catch (Exception exc) { LogDebug("Parsing EPG data failed with exception message:", (int)LogSetting.ERROR); LogDebug(exc.Message, (int)LogSetting.ERROR); // Reset BUSY Flag TvBusinessLayer layer = new TvBusinessLayer(); Setting setting = null; //set BUSY = false setting = layer.GetSetting("TvWishList_BUSY", "false"); setting.Value = "false"; setting.Persist(); labelupdate("Parsing EPG data failed - Check the log file", PipeCommands.Error); } try { //***************************************************** //Lock TvWishList with timeout error bool success = false; int seconds = 60; for (int i = 0; i < seconds / 10; i++) { success = myTvWishes.LockTvWishList("TvWishList Setup"); if (success) break; System.Threading.Thread.Sleep(10000); //sleep 10s to wait for BUSY=false LogDebug("Waiting for old jobs " + (seconds - i * 10).ToString() + "s to finish", (int)LogSetting.DEBUG); } if (success == false) { LogDebug("Timeout Error: TvWishList did not finish old jobs - reboot your computer ", (int)LogSetting.DEBUG); MessageBox.Show(lng.TranslateString("Timeout Error: TvWishList did not finish old jobs - try to close the plugin again or reboot ", 002)); LoadSettingError = true; } else { MyLoadSettings(); } } catch (Exception ex) { LogDebug("Fatal Error: Failed to load settings - exception message is\n" + ex.Message, (int)LogSetting.ERROR); LogDebug("Trying to resave settings to data base", (int)LogSetting.ERROR); try { MySaveSettings(); LogDebug("Saving settings succeeded", (int)LogSetting.ERROR); } catch { LogDebug("Fatal Error: Faileed to save settings", (int)LogSetting.ERROR); } } BUSY = false; }