public override async Task <bool> RemoveScheduleAsync(ISchedule schedule) { await _initComplete.Task; TvDatabase.Schedule tvSchedule = TvDatabase.Schedule.Retrieve(schedule.ScheduleId); // Already deleted somewhere else? if (tvSchedule == null) { return(true); } _tvControl.StopRecordingSchedule(tvSchedule.IdSchedule); // delete canceled schedules first foreach (var cs in CanceledSchedule.ListAll().Where(x => x.IdSchedule == tvSchedule.IdSchedule)) { cs.Remove(); } try { // can fail if "StopRecordingSchedule" already deleted the entry TvDatabase.Schedule.ResetProgramStates(tvSchedule.IdSchedule); tvSchedule.Remove(); } catch { } _tvControl.OnNewSchedule(); // I don't think this is needed, but doesn't hurt either 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))) { 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 bool RemoveSchedule(IProgram program) { IScheduleService scheduleService = GlobalServiceProvider.Get <IScheduleService>(); ICanceledScheduleService canceledScheduleService = GlobalServiceProvider.Get <ICanceledScheduleService>(); var allSchedules = scheduleService.ListAllSchedules() .Where(schedule => schedule.IdChannel == program.ChannelId && schedule.StartTime == program.StartTime && schedule.EndTime == program.EndTime); foreach (Schedule schedule in allSchedules) { switch (schedule.ScheduleType) { case (int)ScheduleRecordingType.Once: scheduleService.DeleteSchedule(schedule.IdSchedule); break; default: CanceledSchedule canceledSchedule = CanceledScheduleFactory.CreateCanceledSchedule(schedule.IdSchedule, schedule.IdChannel, schedule.StartTime); canceledScheduleService.SaveCanceledSchedule(canceledSchedule); break; } } return(true); }
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))) { 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 }
private static void CancelSingleSchedule(Schedule schedule, Program canceledProgram) { ICanceledScheduleService canceledScheduleService = GlobalServiceProvider.Instance.Get <ICanceledScheduleService>(); CanceledSchedule canceledSchedule = CanceledScheduleFactory.CreateCanceledSchedule(schedule.IdSchedule, canceledProgram.IdChannel, canceledProgram.StartTime); canceledScheduleService.SaveCanceledSchedule(canceledSchedule); StopRecording(schedule); }
/// <summary> /// Removes every cancled schedule. /// </summary> /// <param name="refFillList">The schedules list.</param> /// <returns></returns> private void removeCanceledSchedules(IList <Schedule> refFillList) { IList <CanceledSchedule> canceledList = CanceledSchedule.ListAll(); foreach (CanceledSchedule canceled in canceledList) { foreach (Schedule sched in refFillList) { if ((canceled.IdSchedule == sched.IdSchedule) && (canceled.CancelDateTime == sched.StartTime)) { refFillList.Remove(sched); break; } } } }
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); }
public override bool RemoveSchedule(ISchedule schedule) { TvDatabase.Schedule tvSchedule = TvDatabase.Schedule.Retrieve(schedule.ScheduleId); // Already deleted somewhere else? if (tvSchedule == null) { return(true); } _tvControl.StopRecordingSchedule(tvSchedule.IdSchedule); // delete canceled schedules first foreach (var cs in CanceledSchedule.ListAll().Where(x => x.IdSchedule == tvSchedule.IdSchedule)) { cs.Remove(); } tvSchedule.Remove(); _tvControl.OnNewSchedule(); // I don't think this is needed, but doesn't hurt either 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 bool RemoveSchedule(ISchedule schedule) { #if TVE3 TvDatabase.Schedule tvSchedule = TvDatabase.Schedule.Retrieve(schedule.ScheduleId); _tvControl.StopRecordingSchedule(tvSchedule.IdSchedule); // delete canceled schedules first foreach (var cs in CanceledSchedule.ListAll().Where(x => x.IdSchedule == tvSchedule.IdSchedule)) { cs.Remove(); } tvSchedule.Remove(); _tvControl.OnNewSchedule(); // I don't think this is needed, but doesn't hurt either #else IScheduleService scheduleService = GlobalServiceProvider.Instance.Get <IScheduleService>(); if (scheduleService == null) { return(false); } scheduleService.DeleteSchedule(schedule.ScheduleId); #endif return(true); }
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(); } }
public WebBoolResult DeleteSchedule(int scheduleId) { try { Log.Debug("Deleting schedule with id {0}", scheduleId); Schedule schedule = Schedule.Retrieve(scheduleId); _tvControl.StopRecordingSchedule(schedule.IdSchedule); // delete canceled schedules first foreach (var cs in CanceledSchedule.ListAll().Where(x => x.IdSchedule == schedule.IdSchedule)) { cs.Remove(); } schedule.Remove(); _tvControl.OnNewSchedule(); // I don't think this is needed, but doesn't hurt either return(true); } catch (Exception ex) { Log.Warn(String.Format("Failed to delete schedule {0}", scheduleId), ex); return(false); } }
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(); }
private void OnClick(int iItem) { m_iSelectedItem = GetSelectedItemNo(); GUIListItem item = GetItem(iItem); if (item == null) { return; } Schedule rec = (Schedule)item.TVTag; GUIDialogMenu dlg = (GUIDialogMenu)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_MENU); if (dlg == null) { return; } dlg.Reset(); dlg.SetHeading(rec.ProgramName); if (rec.Series == false) { dlg.AddLocalizedString(618); //delete } else { dlg.AddLocalizedString(981); //Delete this recording dlg.AddLocalizedString(982); //Delete series recording dlg.AddLocalizedString(888); //Episodes management } VirtualCard card; TvServer server = new TvServer(); if (server.IsRecordingSchedule(rec.IdSchedule, out card)) { dlg.AddLocalizedString(979); //Play recording from beginning dlg.AddLocalizedString(980); //Play recording from live point } else { IList <TuningDetail> details = Channel.Retrieve(rec.IdChannel).ReferringTuningDetail(); foreach (TuningDetail detail in details) { if (detail.ChannelType == 0) { dlg.AddLocalizedString(882); //Quality settings break; } } } dlg.DoModal(GetID); if (dlg.SelectedLabel == -1) { return; } switch (dlg.SelectedId) { case 888: ////Episodes management OnSetEpisodesToKeep(rec); break; case 882: OnSetQuality(rec); break; case 981: //Delete this recording only { if (server.IsRecordingSchedule(rec.IdSchedule, out card)) { 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, GUILocalizeStrings.Get(730)); //This schedule is recording. If you delete dlgYesNo.SetLine(2, GUILocalizeStrings.Get(731)); //the schedule then the recording is stopped. dlgYesNo.SetLine(3, GUILocalizeStrings.Get(732)); //are you sure dlgYesNo.DoModal(GUIWindowManager.ActiveWindow); if (dlgYesNo.IsConfirmed) { server.StopRecordingSchedule(rec.IdSchedule); CanceledSchedule schedule = new CanceledSchedule(rec.IdSchedule, rec.IdChannel, rec.StartTime); rec.Persist(); server.OnNewSchedule(); } } } else { server.StopRecordingSchedule(rec.IdSchedule); CanceledSchedule schedule = new CanceledSchedule(rec.IdSchedule, rec.IdChannel, rec.StartTime); rec.Persist(); server.OnNewSchedule(); } LoadDirectory(); } break; case 982: //Delete series recording goto case 618; case 618: // delete entire recording { if (server.IsRecordingSchedule(rec.IdSchedule, out card)) { 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, GUILocalizeStrings.Get(730)); //This schedule is recording. If you delete dlgYesNo.SetLine(2, GUILocalizeStrings.Get(731)); //the schedule then the recording is stopped. dlgYesNo.SetLine(3, GUILocalizeStrings.Get(732)); //are you sure dlgYesNo.DoModal(GUIWindowManager.ActiveWindow); if (dlgYesNo.IsConfirmed) { server.StopRecordingSchedule(rec.IdSchedule); rec.Delete(); server.OnNewSchedule(); } } } else { rec.Delete(); server.OnNewSchedule(); } LoadDirectory(); } break; case 979: // Play recording from beginning if (g_Player.Playing && g_Player.IsTVRecording) { g_Player.Stop(true); } //TVHome.IsTVOn = true; TVHome.ViewChannel(rec.ReferencedChannel()); g_Player.SeekAbsolute(0); if (TVHome.Card.IsTimeShifting) { g_Player.ShowFullScreenWindow(); return; } break; case 980: // Play recording from live point //TVHome.IsTVOn = true; TVHome.ViewChannel(rec.ReferencedChannel()); if (TVHome.Card.IsTimeShifting) { if (g_Player.Playing) { g_Player.SeekAsolutePercentage(99); } g_Player.ShowFullScreenWindow(); return; } break; } while (m_iSelectedItem >= GetItemCount() && m_iSelectedItem > 0) { m_iSelectedItem--; } GUIControl.SelectItemControl(GetID, listPriorities.GetID, m_iSelectedItem); }