/// <summary> /// Gets the guide for a given channel. /// </summary> /// <param name="strChannelID">The channel ID.</param> /// <param name="Linked">if set to <c>true</c> get [linked] pages.</param> /// <param name="linkStart">The start time to get link pages.</param> /// <param name="linkEnd">The end time to get linked pages.</param> /// <param name="startDateTime">The start date time for grabbing.</param> /// <returns>list of programs</returns> public List <ProgramData> GetGuide(string strChannelID, string displayName, bool Linked, TimeRange linkTime, DateTime startDateTime) { _strID = strChannelID; _grabLinked = Linked; _linkTimeRange = linkTime; //int offset = 0; _reqData.ChannelId = _grabber.GetChannel(strChannelID); if (_reqData.ChannelId == null) { Log.Error("WebEPG: ChannelId: {0} not found!", strChannelID); return(null); } //_removeProgramsList = _grabber.GetRemoveProgramList(strChannelID); // <--- !!! _programs = new List <ProgramData>(); Log.Info("WebEPG: ChannelId: {0}", strChannelID); //_GrabDay = 0; // sets a minimum delay for the programlist Site page grabbing // why? likely not needed. to be tested. // possible reason: 'relaxing' webservers if (_grabber.Listing.Request.Delay < 500) { _grabber.Listing.Request.Delay = 500; } WorldDateTime reqStartTime = new WorldDateTime(_siteTimeZone.FromLocalTime(startDateTime), _siteTimeZone); _reqBuilder = new RequestBuilder(_grabber.Listing.Request, reqStartTime, _reqData); _grabStart = startDateTime; Log.Debug("WebEPG: Grab Start {0} {1}", startDateTime.ToShortTimeString(), startDateTime.ToShortDateString()); int requestedStartDay = startDateTime.Subtract(DateTime.Now).Days; if (requestedStartDay > 0) { if (requestedStartDay > _grabber.Info.GrabDays) { Log.Error("WebEPG: Trying to grab past guide days"); return(null); } if (requestedStartDay + _maxGrabDays > _grabber.Info.GrabDays) { _maxGrabDays = _grabber.Info.GrabDays - requestedStartDay; Log.Info("WebEPG: Grab days more than Guide days, limiting to {0}", _maxGrabDays); } //_GrabDay = requestedStartDay; _reqBuilder.DayOffset = requestedStartDay; if (_reqBuilder.DayOffset > _maxGrabDays) //_GrabDay > _maxGrabDays) { _maxGrabDays = _reqBuilder.DayOffset + _maxGrabDays; // _GrabDay + _maxGrabDays; } } //TVDatabase.BeginTransaction(); //TVDatabase.ClearCache(); //TVDatabase.RemoveOldPrograms(); _dbPrograms = new List <Program>(); _dbLastProg = 0; try { Key epgMapKey = new Key(false, "displayName", displayName); IList <Channel> epgChannels = Broker.RetrieveList <Channel>(epgMapKey); if (epgChannels.Count > 0) { _dbPrograms = epgChannels[0].ReferringProgram(); } } catch (Exception) { Log.Error("WebEPG: Database failed, disabling db lookup"); _dblookup = false; } _timeControl = new ListingTimeControl(_siteTimeZone.FromLocalTime(startDateTime)); while (_reqBuilder.DayOffset < _maxGrabDays) { _reqBuilder.Offset = 0; bool error; while (GetListing(out error)) { //if (_grabber.Listing.SearchParameters.MaxListingCount == 0) // break; _reqBuilder.Offset++; } if (error) { if (!_grabber.Info.TreatErrorAsWarning) { Log.Error("WebEPG: ChannelId: {0} grabber error - stopping", strChannelID); break; } Log.Info("WebEPG: ChannelId: {0} grabber error - continuing", strChannelID); } //_GrabDay++; if (_reqBuilder.HasDate()) // < here { _reqBuilder.AddDays(1); _timeControl.NewDay(); } else { //if (_reqBuilder.HasList()) // < here break; //_reqBuilder.AddDays(_timeControl.GrabDay); } } return(_programs); }
/// <summary> /// Gets the guide for a given channel. /// </summary> /// <param name="strChannelID">The channel ID.</param> /// <param name="Linked">if set to <c>true</c> get [linked] pages.</param> /// <param name="linkStart">The start time to get link pages.</param> /// <param name="linkEnd">The end time to get linked pages.</param> /// <param name="startDateTime">The start date time for grabbing.</param> /// <returns>list of programs</returns> public List<ProgramData> GetGuide(string strChannelID, string displayName, bool Linked, TimeRange linkTime, DateTime startDateTime) { _strID = strChannelID; _grabLinked = Linked; _linkTimeRange = linkTime; //int offset = 0; _reqData.ChannelId = _grabber.GetChannel(strChannelID); if (_reqData.ChannelId == null) { Log.Error("WebEPG: ChannelId: {0} not found!", strChannelID); return null; } //_removeProgramsList = _grabber.GetRemoveProgramList(strChannelID); // <--- !!! _programs = new List<ProgramData>(); Log.Info("WebEPG: ChannelId: {0}", strChannelID); //_GrabDay = 0; // sets a minimum delay for the programlist Site page grabbing // why? likely not needed. to be tested. // possible reason: 'relaxing' webservers if (_grabber.Listing.Request.Delay < 500) { _grabber.Listing.Request.Delay = 500; } WorldDateTime reqStartTime = new WorldDateTime(_siteTimeZone.FromLocalTime(startDateTime), _siteTimeZone); _reqBuilder = new RequestBuilder(_grabber.Listing.Request, reqStartTime, _reqData); _grabStart = startDateTime; Log.Debug("WebEPG: Grab Start {0} {1}", startDateTime.ToShortTimeString(), startDateTime.ToShortDateString()); int requestedStartDay = startDateTime.Subtract(DateTime.Now).Days; if (requestedStartDay > 0) { if (requestedStartDay > _grabber.Info.GrabDays) { Log.Error("WebEPG: Trying to grab past guide days"); return null; } if (requestedStartDay + _maxGrabDays > _grabber.Info.GrabDays) { _maxGrabDays = _grabber.Info.GrabDays - requestedStartDay; Log.Info("WebEPG: Grab days more than Guide days, limiting to {0}", _maxGrabDays); } //_GrabDay = requestedStartDay; _reqBuilder.DayOffset = requestedStartDay; if (_reqBuilder.DayOffset > _maxGrabDays) //_GrabDay > _maxGrabDays) { _maxGrabDays = _reqBuilder.DayOffset + _maxGrabDays; // _GrabDay + _maxGrabDays; } } //TVDatabase.BeginTransaction(); //TVDatabase.ClearCache(); //TVDatabase.RemoveOldPrograms(); _dbPrograms = new List<Program>(); _dbLastProg = 0; try { Key epgMapKey = new Key(false, "displayName", displayName); IList<Channel> epgChannels = Broker.RetrieveList<Channel>(epgMapKey); if (epgChannels.Count > 0) { _dbPrograms = epgChannels[0].ReferringProgram(); } } catch (Exception) { Log.Error("WebEPG: Database failed, disabling db lookup"); _dblookup = false; } _timeControl = new ListingTimeControl(_siteTimeZone.FromLocalTime(startDateTime)); while (_reqBuilder.DayOffset < _maxGrabDays) { _reqBuilder.Offset = 0; bool error; while (GetListing(out error)) { //if (_grabber.Listing.SearchParameters.MaxListingCount == 0) // break; _reqBuilder.Offset++; } if (error) { if (!_grabber.Info.TreatErrorAsWarning) { Log.Error("WebEPG: ChannelId: {0} grabber error - stopping", strChannelID); break; } Log.Info("WebEPG: ChannelId: {0} grabber error - continuing", strChannelID); } //_GrabDay++; if (_reqBuilder.HasDate()) // < here { _reqBuilder.AddDays(1); _timeControl.NewDay(); } else { //if (_reqBuilder.HasList()) // < here break; //_reqBuilder.AddDays(_timeControl.GrabDay); } } return _programs; }