Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
        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
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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();
            }
        }
Esempio n. 9
0
        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();
        }