private IList<Schedule> AddProgramsToSchedulesList(Schedule rec, IList<Program> programs) { IList<Schedule> recordings = new List<Schedule>(); if (programs != null && programs.Count > 0) { foreach (Program prg in programs) { Schedule recNew = rec.Clone(); recNew.ScheduleType = (int)ScheduleRecordingType.Once; recNew.StartTime = prg.StartTime; recNew.EndTime = prg.EndTime; recNew.IdChannel = prg.IdChannel; recNew.Series = true; recNew.IdParentSchedule = rec.IdSchedule; recNew.ProgramName = prg.Title; if (rec.IsSerieIsCanceled(rec.GetSchedStartTimeForProg(prg))) { recNew.Canceled = recNew.StartTime; } recordings.Add(recNew); } } return recordings; }
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; }
private RecordingDetail CreateNewRecordingDetail(Schedule schedule, DateTime currentTime) { RecordingDetail newRecording = null; DateTime start = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, schedule.StartTime.Hour, schedule.StartTime.Minute, schedule.StartTime.Second); DateTime end = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, schedule.EndTime.Hour, schedule.EndTime.Minute, schedule.EndTime.Second); if (start > end) end = end.AddDays(1); if (currentTime >= start.AddMinutes(-schedule.PreRecordInterval) && currentTime <= end.AddMinutes(schedule.PostRecordInterval)) { if (!schedule.IsSerieIsCanceled(start)) { VirtualCard vCard = null; bool isRecordingSchedule = IsRecordingSchedule(schedule.IdSchedule, out vCard); if (!isRecordingSchedule) { newRecording = new RecordingDetail(schedule, schedule.ReferencedChannel(), end, true); } } } return newRecording; }
private bool IsTimeToRecordEveryTimeOnThisChannel(Schedule schedule, DateTime currentTime) { bool isTimeToRecord = false; TvDatabase.Program current = schedule.ReferencedChannel().GetProgramAt(currentTime.AddMinutes(schedule.PreRecordInterval), schedule.ProgramName); if (current != null) { if (currentTime >= current.StartTime.AddMinutes(-schedule.PreRecordInterval) && currentTime <= current.EndTime.AddMinutes(schedule.PostRecordInterval)) { if (!schedule.IsSerieIsCanceled(current.StartTime)) { bool createSpawnedOnceSchedule = CreateSpawnedOnceSchedule(schedule, current); if (createSpawnedOnceSchedule) { ResetTimer(); //lets process the spawned once schedule at once. } } } } return isTimeToRecord; }
private bool IsTimeToRecordEveryTimeOnEveryChannel(Schedule schedule) { bool isTimeToRecord = false; bool createSpawnedOnceSchedule = false; IList<TvDatabase.Program> programs = TvDatabase.Program.RetrieveCurrentRunningByTitle(schedule.ProgramName, schedule.PreRecordInterval, schedule.PostRecordInterval); foreach (TvDatabase.Program program in programs) { if (!schedule.IsSerieIsCanceled(program.StartTime)) { if (CreateSpawnedOnceSchedule(schedule, program)) { createSpawnedOnceSchedule = true; } } } if (createSpawnedOnceSchedule) { ResetTimer(); //lets process the spawned once schedule at once. } return isTimeToRecord; }
private bool IsScheduleReadyForRecording(Schedule schedule) { bool isScheduleReadyForRecording = true; DateTime now = DateTime.Now; VirtualCard card; if (schedule.Canceled != Schedule.MinSchedule || IsRecordingSchedule(schedule.IdSchedule, out card) || schedule.IsSerieIsCanceled(new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0))) { isScheduleReadyForRecording = false; } return isScheduleReadyForRecording; }
//------------------------------------------------------------------------------------------------------------- // 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; }