private Channel IsInsertAllowed(EpgChannel epgChannel)
        {
            DVBBaseChannel dvbChannel = (DVBBaseChannel)epgChannel.Channel;

            //are there any epg infos for this channel?
            if (epgChannel.Programs.Count == 0)
            {
                Log.Epg("{0}: no epg infos found for channel networkid:0x{1:X} transportid:0x{2:X} serviceid:0x{3:X}",
                        _grabberName, dvbChannel.NetworkId, dvbChannel.TransportId, dvbChannel.ServiceId);
                return(null);
            }
            //do we know a channel with these tuning details?
            Channel      dbChannel    = null;
            TuningDetail tuningDetail = _layer.GetTuningDetail(dvbChannel);

            if (tuningDetail != null)
            {
                dbChannel = tuningDetail.ReferencedChannel();
            }

            if (dbChannel == null)
            {
                Log.Epg("{0}: no channel found for networkid:0x{1:X} transportid:0x{2:X} serviceid:0x{3:X}", _grabberName,
                        dvbChannel.NetworkId, dvbChannel.TransportId, dvbChannel.ServiceId);

                /*foreach (EpgProgram ei in epgChannel.Programs)
                 * {
                 * string title = "";
                 * if (ei.Text.Count > 0)
                 * {
                 *  title = ei.Text[0].Title;
                 * }
                 * Log.Epg("                   -> {0}-{1}  {2}", ei.StartTime, ei.EndTime, title);
                 * }*/
                return(null);
            }
            //should we store epg for this channel?
            if ((dbChannel.IsRadio && _storeOnlySelectedChannelsRadio) || (!dbChannel.IsRadio && _storeOnlySelectedChannels))
            {
                if (!dbChannel.GrabEpg)
                {
                    Log.Epg("{0}: channel {1} is not configured to grab epg.", _grabberName, dbChannel.DisplayName);
                    return(null);
                }
            }
            if (_checkForLastUpdate)
            {
                //is the regrab time reached?
                TimeSpan ts = DateTime.Now - dbChannel.LastGrabTime;
                if (ts.TotalMinutes < _epgReGrabAfter)
                {
                    Log.Epg("{0}: {1} not needed lastUpdate:{2}", _grabberName, dbChannel.DisplayName, dbChannel.LastGrabTime);
                    return(null);
                }
            }
            return(dbChannel);
        }