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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
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);
            }
        }
        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);
            }
        }
Beispiel #7
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
        }
Beispiel #8
0
        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);
        }
Beispiel #11
0
 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);
 }
Beispiel #12
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);
        }
Beispiel #13
0
        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();
            }
        }
Beispiel #15
0
        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);
            }
        }
Beispiel #16
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();
        }
Beispiel #17
0
        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);
        }