public WebBoolResult CancelSchedule(int programId) { try { Log.Debug("Canceling schedule for programId {0}", programId); var program = Program.Retrieve(programId); foreach (Schedule schedule in Schedule.ListAll().Where(schedule => schedule.IsRecordingProgram(program, true))) { switch (schedule.ScheduleType) { case (int)ScheduleRecordingType.Once: schedule.Delete(); _tvControl.OnNewSchedule(); break; default: CanceledSchedule canceledSchedule = new CanceledSchedule(schedule.IdSchedule, schedule.IdChannel, schedule.StartTime); canceledSchedule.Persist(); _tvControl.OnNewSchedule(); break; } } return(true); } catch (Exception ex) { Log.Warn(String.Format("Failed to cancel schedule for programId {0}", programId), ex); return(false); } }
public override async Task <bool> RemoveScheduleForProgramAsync(IProgram program, ScheduleRecordingType recordingType) { await _initComplete.Task; var canceledProgram = TvDatabase.Program.Retrieve(program.ProgramId); if (canceledProgram == null) { return(false); } foreach (TvDatabase.Schedule schedule in TvDatabase.Schedule.ListAll().Where(schedule => schedule.IsRecordingProgram(canceledProgram, true))) { switch (schedule.ScheduleType) { case (int)ScheduleRecordingType.Once: schedule.Delete(); RemoteControl.Instance.OnNewSchedule(); break; default: CanceledSchedule canceledSchedule = new CanceledSchedule(schedule.IdSchedule, schedule.IdChannel, program.StartTime); canceledSchedule.Persist(); RemoteControl.Instance.OnNewSchedule(); break; } } return(true); }
public override async Task <bool> RemoveScheduleForProgramAsync(IProgram program, ScheduleRecordingType recordingType) { await _initComplete.Task; var canceledProgram = TvDatabase.Program.Retrieve(program.ProgramId); if (canceledProgram == null) { return(false); } foreach (TvDatabase.Schedule schedule in TvDatabase.Schedule.ListAll().Where(schedule => schedule.IsRecordingProgram(canceledProgram, true))) { if (schedule.ScheduleType == (int)ScheduleRecordingType.Once || recordingType != ScheduleRecordingType.Once) { // Delete single schedule, or whole series schedule.Delete(); } else { // Delete this program only CanceledSchedule canceledSchedule = new CanceledSchedule(schedule.IdSchedule, schedule.IdChannel, program.StartTime); canceledSchedule.Persist(); } RemoteControl.Instance.OnNewSchedule(); } return(true); }
public WebBoolResult DeleteSchedule(int scheduleId) { // TODO: the workflow in this method doesn't make any sense at all try { Schedule schedule = Schedule.Retrieve(scheduleId); // first cancel all of the episodes of this program for this schedule foreach (Program program in Program.ListAll().Where(program => program.Title == schedule.ProgramName)) { if (schedule.IsRecordingProgram(program, true)) { CanceledSchedule canceledSchedule = new CanceledSchedule(schedule.IdSchedule, program.IdChannel, program.StartTime); canceledSchedule.Persist(); _tvControl.OnNewSchedule(); } } // now remove existing CanceledSchedule for this schedule foreach (CanceledSchedule canceled in CanceledSchedule.ListAll().Where(canceled => canceled.IdSchedule == schedule.IdSchedule)) { canceled.Remove(); } schedule.Remove(); _tvControl.OnNewSchedule(); return(true); } catch (Exception ex) { Log.Warn(String.Format("Failed to delete schedule {0}", scheduleId), ex); return(false); } }
public bool RemoveScheduleForProgram(IProgram program, ScheduleRecordingType recordingType) { #if TVE3 var canceledProgram = TvDatabase.Program.Retrieve(program.ProgramId); if (canceledProgram == null) { return(false); } foreach (TvDatabase.Schedule schedule in TvDatabase.Schedule.ListAll().Where(schedule => schedule.IsRecordingProgram(canceledProgram, true))) { switch (schedule.ScheduleType) { case (int)ScheduleRecordingType.Once: schedule.Delete(); _tvControl.OnNewSchedule(); break; default: CanceledSchedule canceledSchedule = new CanceledSchedule(schedule.IdSchedule, schedule.IdChannel, schedule.StartTime); canceledSchedule.Persist(); _tvControl.OnNewSchedule(); break; } } return(true); #else IScheduleService scheduleService = GlobalServiceProvider.Instance.Get <IScheduleService>(); IProgramService programService = GlobalServiceProvider.Instance.Get <IProgramService>(); var canceledProgram = programService.GetProgram(program.ProgramId); if (canceledProgram == null) { return(false); } foreach (Schedule schedule in scheduleService.ListAllSchedules().Where(schedule => new ScheduleBLL(schedule).IsRecordingProgram(canceledProgram, true))) { switch (schedule.ScheduleType) { case (int)ScheduleRecordingType.Once: scheduleService.DeleteSchedule(schedule.IdSchedule); break; default: // If only single program should be canceled if (recordingType == ScheduleRecordingType.Once) { CancelSingleSchedule(schedule, canceledProgram); } // Full schedule is canceled, including all programs else { CancelFullSchedule(schedule); } break; } } return(true); #endif }
public override async Task <bool> RemoveScheduleForProgramAsync(IProgram program, ScheduleRecordingType recordingType) { await _initComplete.Task; var canceledProgram = TvDatabase.Program.Retrieve(program.ProgramId); if (canceledProgram == null) { return(false); } var allSchedules = TvDatabase.Schedule.ListAll(); var matchingSchedules = allSchedules.Where(schedule => schedule.IsRecordingProgram(canceledProgram, true)); if (matchingSchedules.Count() == 0) { List <TvDatabase.Schedule> manualSchedules = new List <TvDatabase.Schedule>(); //Check for matching manual recordings because they will not match any programs start and/or end times foreach (TvDatabase.Schedule schedule in allSchedules.Where(schedule => schedule.IsManual || schedule.ProgramName == "Manual")) { if ((canceledProgram.StartTime <= schedule.StartTime && canceledProgram.EndTime >= schedule.StartTime) || //Recording was started during this program (canceledProgram.StartTime <= schedule.EndTime && canceledProgram.EndTime >= schedule.EndTime) || //Recording is ending during this program (canceledProgram.StartTime >= schedule.StartTime && canceledProgram.EndTime <= schedule.StartTime)) //The program is "inside" the recording { manualSchedules.Add(schedule); } } matchingSchedules = manualSchedules; } //Delete matching schedules foreach (TvDatabase.Schedule schedule in matchingSchedules) { _tvControl.StopRecordingSchedule(schedule.IdSchedule); if (schedule.ScheduleType == (int)ScheduleRecordingType.Once || recordingType != ScheduleRecordingType.Once) { // Delete single schedule, or whole series schedule.Delete(); } else { // Delete this program only CanceledSchedule canceledSchedule = new CanceledSchedule(schedule.IdSchedule, schedule.IdChannel, program.StartTime); canceledSchedule.Persist(); } _tvControl.OnNewSchedule(); } return(true); }
private static bool CancelEpisode(DateTime cancelStartTime, Schedule scheduleToCancel, int idChannel) { bool episodeCanceled = false; if (scheduleToCancel != null) { //create the canceled schedule to prevent the schedule from restarting again. // we only create cancelled recordings on series type schedules Schedule sched2cancel = Schedule.Retrieve(scheduleToCancel.IdSchedule); bool isOnce = IsScheduleTypeOnce(scheduleToCancel.IdSchedule); if (!isOnce) { DateTime cancel = cancelStartTime; int IdForScheduleToCancel = scheduleToCancel.IdSchedule; CanceledSchedule canceledSchedule = new CanceledSchedule(IdForScheduleToCancel, idChannel, cancel); canceledSchedule.Persist(); episodeCanceled = true; } } return(episodeCanceled); }
public void DontRecord(int id, bool cancelEntire) { UpdateTvServer(); Program program = Program.Retrieve(id); bool isSeries; Schedule schedule; if (IsRecording(program, out schedule, out isSeries)) { TvBusinessLayer layer = new TvBusinessLayer(); if (cancelEntire) { RemoteControl.Instance.StopRecordingSchedule(schedule.IdSchedule); schedule.Delete(); } else { CanceledSchedule canceledSchedule = new CanceledSchedule(schedule.IdSchedule, program.StartTime); canceledSchedule.Persist(); } RemoteControl.Instance.OnNewSchedule(); } }
private void OnClick(int iItem) { m_iSelectedItem = GetSelectedItemNo(); GUIListItem item = GetItem(iItem); if (item == null) { return; } if (item.IsFolder) { if (item.Label == "..") { if (selectedItem != null) { selectedItem = null; } LoadDirectory(); return; } if (selectedItem == null) { selectedItem = item; } LoadDirectory(); return; } Schedule schedule = item.TVTag as Schedule; if (schedule == null) { return; } if (schedule.ScheduleType == (int)ScheduleRecordingType.Once) { GUIDialogYesNo dlgYesNo = (GUIDialogYesNo)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_YES_NO); if (null != dlgYesNo) { dlgYesNo.SetHeading(GUILocalizeStrings.Get(653)); //Delete this recording? dlgYesNo.SetLine(1, schedule.ReferencedChannel().DisplayName); dlgYesNo.SetLine(2, schedule.ProgramName); dlgYesNo.SetLine(3, GUILocalizeStrings.Get(732)); //are you sure dlgYesNo.DoModal(GUIWindowManager.ActiveWindow); if (dlgYesNo.IsConfirmed) { if (schedule.ScheduleType == (int)ScheduleRecordingType.Once) { schedule.Delete(); selectedItem = null; } } } } else // advanced recording { GUIDialogMenu dlg = (GUIDialogMenu)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_MENU); if (dlg != null) { dlg.Reset(); dlg.SetHeading(schedule.ProgramName); dlg.AddLocalizedString(981); //Delete this recording dlg.AddLocalizedString(982); //Delete series recording dlg.DoModal(GetID); if (dlg.SelectedLabel == -1) { return; } switch (dlg.SelectedId) { case 981: //delete specific series CanceledSchedule canceledSchedule = new CanceledSchedule(schedule.IdSchedule, schedule.IdChannel, schedule.StartTime); canceledSchedule.Persist(); selectedItem = null; TvServer server = new TvServer(); server.OnNewSchedule(); break; case 982: //Delete entire recording schedule.Delete(); selectedItem = null; break; } } } LoadDirectory(); }