コード例 #1
0
        protected virtual async Task <RecordingStatus?> CreateOrDeleteSchedule(IProgram program, ScheduleRecordingType recordingType = ScheduleRecordingType.Once)
        {
            IScheduleControlAsync scheduleControl = _tvHandler.ScheduleControl;
            RecordingStatus?      newStatus       = null;

            if (scheduleControl != null)
            {
                RecordingStatus?recordingStatus = await GetRecordingStatusAsync(program);

                if (recordingStatus.HasValue && (recordingStatus.Value.HasFlag(RecordingStatus.Scheduled) || recordingStatus.Value.HasFlag(RecordingStatus.SeriesScheduled)))
                {
                    if (await scheduleControl.RemoveScheduleForProgramAsync(program, recordingType))
                    {
                        newStatus = RecordingStatus.None;
                    }
                }
                else
                {
                    var result = await scheduleControl.CreateScheduleAsync(program, recordingType);

                    if (result.Success)
                    {
                        newStatus = recordingType == ScheduleRecordingType.Once ? RecordingStatus.Scheduled : RecordingStatus.SeriesScheduled;
                    }
                }
            }
            return(newStatus);
        }
コード例 #2
0
        public static async Task <IList <WebScheduleBasic> > ProcessAsync(IOwinContext context, string filter, WebSortField?sort, WebSortOrder?order)
        {
            if (!ServiceRegistration.IsRegistered <ITvProvider>())
            {
                throw new BadRequestException("GetSchedules: ITvProvider not found");
            }

            IScheduleControlAsync scheduleControl = ServiceRegistration.Get <ITvProvider>() as IScheduleControlAsync;

            var schedules = await TVAccess.GetSchedulesAsync(context);

            List <WebScheduleBasic> output = schedules.Select(schedule => ScheduleBasic(schedule)).ToList();

            // sort and filter
            if (sort != null && order != null)
            {
                output = output.Filter(filter).SortScheduleList(sort, order).ToList();
            }
            else
            {
                output = output.Filter(filter).ToList();
            }

            return(output);
        }
コード例 #3
0
        private UPnPError OnCreateScheduleByTime(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context)
        {
            outParams = new List <object>();
            IScheduleControlAsync     scheduleControl     = ServiceRegistration.Get <ITvProvider>() as IScheduleControlAsync;
            IChannelAndGroupInfoAsync channelAndGroupInfo = ServiceRegistration.Get <ITvProvider>() as IChannelAndGroupInfoAsync;

            if (scheduleControl == null || channelAndGroupInfo == null)
            {
                return(new UPnPError(500, "IChannelAndGroupInfo or IScheduleControl service not available"));
            }

            int      channelId = (int)inParams[0];
            DateTime startTime = (DateTime)inParams[1];
            DateTime endTime   = (DateTime)inParams[2];
            ScheduleRecordingType recordingType = (ScheduleRecordingType)inParams[3];
            ISchedule             schedule      = null;

            AsyncResult <IChannel> result = channelAndGroupInfo.GetChannelAsync(channelId).Result;

            if (result.Success)
            {
                var scheduleResult = scheduleControl.CreateScheduleByTimeAsync(result.Result, startTime, endTime, recordingType).Result;
                if (scheduleResult.Success)
                {
                    schedule = scheduleResult.Result;
                }
            }

            outParams = new List <object> {
                result.Success, schedule
            };
            return(null);
        }
コード例 #4
0
        protected virtual async Task <RecordingStatus?> CreateSchedule(IProgram program, ScheduleRecordingType recordingType = ScheduleRecordingType.Once)
        {
            IScheduleControlAsync scheduleControl = _tvHandler.ScheduleControl;
            RecordingStatus?      newStatus       = null;

            if (scheduleControl != null)
            {
                RecordingStatus?recordingStatus = await GetRecordingStatusAsync(program);

                if (recordingStatus.HasValue && (recordingStatus.Value.HasFlag(RecordingStatus.Scheduled) || recordingStatus.Value.HasFlag(RecordingStatus.SeriesScheduled)))
                {
                    // Delete any existing schedule
                    if (await scheduleControl.RemoveScheduleForProgramAsync(program, recordingStatus.Value.HasFlag(RecordingStatus.SeriesScheduled) ? ScheduleRecordingType.EveryTimeOnEveryChannel : ScheduleRecordingType.Once))
                    {
                        newStatus = RecordingStatus.None;
                    }
                }
                // Now create new schedule
                var result = await scheduleControl.CreateScheduleAsync(program, recordingType);

                if (result.Success)
                {
                    newStatus = recordingType == ScheduleRecordingType.Once ? RecordingStatus.Scheduled : RecordingStatus.SeriesScheduled;
                    UpdateRecordingStatus(program, (RecordingStatus)newStatus, recordingType);
                    SlimTvClientMessaging.SendSlimTvProgramChangedMessage(program);
                }
            }
            return(newStatus);
        }
コード例 #5
0
        private UPnPError OnGetRecordingFileOrStream(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context)
        {
            outParams = new List <object>();
            IProgramInfoAsync     programInfo     = ServiceRegistration.Get <ITvProvider>() as IProgramInfoAsync;
            IScheduleControlAsync scheduleControl = ServiceRegistration.Get <ITvProvider>() as IScheduleControlAsync;

            if (programInfo == null || scheduleControl == null)
            {
                return(new UPnPError(500, "IProgramInfo or IScheduleControl service not available"));
            }

            int      programId = (int)inParams[0];
            IProgram program;
            bool     result       = false;
            string   fileOrStream = null;

            if (programInfo.GetProgram(programId, out program))
            {
                var scheduleResult = scheduleControl.GetRecordingFileOrStreamAsync(program).Result;
                if (scheduleResult.Success)
                {
                    result       = true;
                    fileOrStream = scheduleResult.Result;
                }
            }

            outParams = new List <object> {
                result, fileOrStream
            };
            return(null);
        }
コード例 #6
0
        private UPnPError OnCreateSchedule(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context)
        {
            outParams = new List <object>();
            IProgramInfoAsync     programInfo     = ServiceRegistration.Get <ITvProvider>() as IProgramInfoAsync;
            IScheduleControlAsync scheduleControl = ServiceRegistration.Get <ITvProvider>() as IScheduleControlAsync;

            if (programInfo == null || scheduleControl == null)
            {
                return(new UPnPError(500, "IProgramInfo or IScheduleControl service not available"));
            }

            int programId = (int)inParams[0];
            ScheduleRecordingType recordingType = (ScheduleRecordingType)inParams[1];
            IProgram  program;
            ISchedule schedule = null;
            bool      result   = false;

            if (programInfo.GetProgram(programId, out program))
            {
                var scheduleResult = scheduleControl.CreateScheduleAsync(program, recordingType).Result;
                result   = scheduleResult.Success;
                schedule = scheduleResult.Result;
            }

            outParams = new List <object> {
                result, schedule
            };
            return(null);
        }
コード例 #7
0
        protected virtual async Task <RecordingStatus?> CreateOrDeleteScheduleByTimeAsync(IChannel program, DateTime start, DateTime end)
        {
            IScheduleControlAsync scheduleControl = _tvHandler.ScheduleControl;
            RecordingStatus?      newStatus       = null;

            if (scheduleControl != null)
            {
                var result = await scheduleControl.CreateScheduleByTimeAsync(program, start, end, ScheduleRecordingType.Once);

                if (result.Success)
                {
                    newStatus = RecordingStatus.Scheduled;
                }
            }
            return(newStatus);
        }
コード例 #8
0
        protected virtual async Task <RecordingStatus?> GetRecordingStatusAsync(IProgram program)
        {
            IScheduleControlAsync scheduleControl = _tvHandler.ScheduleControl;

            if (scheduleControl == null)
            {
                return(null);
            }

            var result = await scheduleControl.GetRecordingStatusAsync(program);

            if (result.Success)
            {
                return(result.Result);
            }
            return(null);
        }
コード例 #9
0
        private UPnPError OnIsCurrentlyRecording(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context)
        {
            outParams = new List <object>();
            IScheduleControlAsync scheduleControl = ServiceRegistration.Get <ITvProvider>() as IScheduleControlAsync;

            if (scheduleControl == null)
            {
                return(new UPnPError(500, "IProgramInfo or IScheduleControl service not available"));
            }

            string fileName = (string)inParams[0];
            AsyncResult <ISchedule> result = scheduleControl.IsCurrentlyRecordingAsync(fileName).Result;

            outParams = new List <object> {
                result.Success, result.Result
            };
            return(null);
        }
コード例 #10
0
        private UPnPError OnGetSchedules(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context)
        {
            outParams = new List <object>();
            IProgramInfoAsync     programInfo     = ServiceRegistration.Get <ITvProvider>() as IProgramInfoAsync;
            IScheduleControlAsync scheduleControl = ServiceRegistration.Get <ITvProvider>() as IScheduleControlAsync;

            if (programInfo == null || scheduleControl == null)
            {
                return(new UPnPError(500, "IProgramInfo or IScheduleControl service not available"));
            }

            AsyncResult <IList <ISchedule> > result = scheduleControl.GetSchedulesAsync().Result;

            outParams = new List <object> {
                result.Success, result.Result
            };
            return(null);
        }
コード例 #11
0
        private UPnPError OnGetProgramsForSchedule(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context)
        {
            outParams = new List <object>();
            IScheduleControlAsync scheduleControl = ServiceRegistration.Get <ITvProvider>() as IScheduleControlAsync;

            if (scheduleControl == null)
            {
                return(new UPnPError(500, "IProgramInfo or IScheduleControl service not available"));
            }

            ISchedule schedule = (ISchedule)inParams[0];

            AsyncResult <IList <IProgram> > result = scheduleControl.GetProgramsForScheduleAsync(schedule).Result;

            outParams = new List <object> {
                result.Success, result.Result
            };
            return(null);
        }
コード例 #12
0
        private UPnPError OnRemoveSchedule(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context)
        {
            outParams = new List <object>();
            IProgramInfoAsync     programInfo     = ServiceRegistration.Get <ITvProvider>() as IProgramInfoAsync;
            IScheduleControlAsync scheduleControl = ServiceRegistration.Get <ITvProvider>() as IScheduleControlAsync;

            if (programInfo == null || scheduleControl == null)
            {
                return(new UPnPError(500, "IProgramInfo or IScheduleControl service not available"));
            }

            ISchedule schedule = (ISchedule)inParams[0];
            bool      result   = scheduleControl.RemoveScheduleAsync(schedule).Result;

            outParams = new List <object> {
                result
            };
            return(null);
        }
コード例 #13
0
        private UPnPError OnRemoveScheduleForProgram(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context)
        {
            outParams = new List <object>();
            IProgramInfoAsync     programInfo     = ServiceRegistration.Get <ITvProvider>() as IProgramInfoAsync;
            IScheduleControlAsync scheduleControl = ServiceRegistration.Get <ITvProvider>() as IScheduleControlAsync;

            if (programInfo == null || scheduleControl == null)
            {
                return(new UPnPError(500, "IProgramInfo or IScheduleControl service not available"));
            }

            int programId = (int)inParams[0];
            ScheduleRecordingType recordingType = (ScheduleRecordingType)inParams[1];
            IProgram program;
            var      result = programInfo.GetProgram(programId, out program) && scheduleControl.RemoveScheduleForProgramAsync(program, recordingType).Result;

            outParams = new List <object> {
                result
            };
            return(null);
        }