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)
{
for (int i = 0; i < days; ++i)
{
if (WeekEndTool.IsWorkingDay(dtDay.DayOfWeek))
{
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)
{
IList<Program> progList = layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName,
rec.ReferencedChannel());
foreach (Program prog in progList)
{
if ((rec.IsRecordingProgram(prog, false)) &&
(WeekEndTool.IsWeekend(prog.StartTime.DayOfWeek)))
{
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;
}
IList<Program> programs;
if (rec.ScheduleType == (int)ScheduleRecordingType.WeeklyEveryTimeOnThisChannel)
{
//Log.Debug("get {0} {1} EveryTimeOnThisChannel", rec.ProgramName, rec.ReferencedChannel().Name);
programs = layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName, rec.ReferencedChannel());
foreach (Program prog in programs)
{
// dtDay.DayOfWeek == rec.StartTime.DayOfWeek
// Log.Debug("BusinessLayer.cs Program prog in programs WeeklyEveryTimeOnThisChannel: {0} {1} prog.StartTime.DayOfWeek == rec.StartTime.DayOfWeek {2} == {3}", rec.ProgramName, rec.ReferencedChannel().Name, prog.StartTime.DayOfWeek, rec.StartTime.DayOfWeek);
if (prog.StartTime.DayOfWeek == rec.StartTime.DayOfWeek && 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);
//Log.Debug("BusinessLayer.cs Added Recording WeeklyEveryTimeOnThisChannel: {0} {1} prog.StartTime.DayOfWeek == rec.StartTime.DayOfWeek {2} == {3}", rec.ProgramName, rec.ReferencedChannel().Name, prog.StartTime.DayOfWeek, rec.StartTime.DayOfWeek);
}
}
return recordings;
}
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);
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(rec.GetSchedStartTimeForProg(prog), prog.IdChannel))
{
recNew.Canceled = recNew.StartTime;
}
recordings.Add(recNew);
}
}
return recordings;
}