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);
                }
            }
        }
示例#2
0
 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();
     }
 }
示例#3
0
        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();
        }
示例#4
0
        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;
            }
        }
示例#6
0
        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();
            }
        }
示例#7
0
        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();
     }
 }
示例#11
0
        /// <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);
            }
        }
示例#12
0
        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");
            }
        }
示例#14
0
 protected CardAllocationBase(TvBusinessLayer businessLayer, TVController controller)
 {
     _businessLayer = businessLayer;
     _controller    = controller;
     //_tuningChannelMapping = new Dictionary<int, IList<IChannel>>();
     //_channelMapping = new Dictionary<int, bool>();
 }
示例#15
0
        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);
                }
            }
        }
示例#16
0
        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);
                }
            }
        }
示例#17
0
        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>());
        }
示例#18
0
        /// <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");
        }
示例#20
0
        public override void OnSectionActivated()
        {
            TvBusinessLayer layer = new TvBusinessLayer();

            debug.Checked = layer.GetSetting("PTVGDebugMode", "false").Value == "true";
            base.OnSectionActivated();
        }
示例#21
0
        /// <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();
        }
示例#23
0
        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");
        }
示例#25
0
 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();
        }
示例#27
0
        /// <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());
        }
示例#28
0
        /// <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();
            }
        }
示例#30
0
        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();
        }
示例#31
0
        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;
            }
        }
示例#32
0
        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;

        }
示例#33
0
        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;
        }
示例#34
0
        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");


            
        }
示例#35
0
        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);
            }
            
            
        }
示例#36
0
        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);
            }
        }  
示例#37
0
      //-------------------------------------------------------------------------------------------------------------        
      // 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;
      }
示例#38
0
        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;*/
        }
示例#39
0
      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;
      }
示例#40
0
        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;

        }
示例#41
0
        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;

        }
示例#42
0
        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);
            }
        }
示例#43
0
        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;
        }
示例#44
0
        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");
        }
示例#45
0
        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;
        }
示例#46
0
        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);
            }
        }
示例#47
0
      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;
      }
示例#48
0
        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;
        }
示例#49
0
        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;
            }

        }
示例#50
0
        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();
        }
示例#51
0
      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;
      }
示例#52
0
        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();
            
        }
示例#53
0
        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);                    
                }
            }    


        }
示例#54
0
        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;
            }

            
        }
示例#55
0
        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;
        }