Esempio n. 1
0
        public static async Task <WebIntResult> ProcessAsync(IOwinContext context)
        {
            if (!ServiceRegistration.IsRegistered <ITvProvider>())
            {
                throw new BadRequestException("GetRadioGroupCount: ITvProvider not found");
            }

            var channelGroups = await TVAccess.GetGroupsAsync(context);

            return(new WebIntResult {
                Result = channelGroups.Count
            });
        }
        public static Task <WebIntResult> ProcessAsync(IOwinContext context)
        {
            if (!ServiceRegistration.IsRegistered <ITvProvider>())
            {
                throw new BadRequestException("GetRecordingCount: ITvProvider not found");
            }

            IList <MediaItem> items = MediaLibraryAccess.GetMediaItemsByAspect(context, BasicNecessaryMIATypeIds, BasicOptionalMIATypeIds);

            return(Task.FromResult(new WebIntResult {
                Result = items.Count
            }));
        }
Esempio n. 3
0
        public static Task <WebStreamServiceDescription> ProcessAsync(IOwinContext context)
        {
            WebStreamServiceDescription webStreamServiceDescription = new WebStreamServiceDescription
            {
                ApiVersion         = GlobalVersion.API_VERSION,
                ServiceVersion     = GlobalVersion.VERSION,
                SupportsMedia      = true,
                SupportsRecordings = true,
                SupportsTV         = ServiceRegistration.IsRegistered <SlimTv.Interfaces.ITvProvider>()
            };

            return(Task.FromResult(webStreamServiceDescription));
        }
Esempio n. 4
0
        public static async Task <WebBoolResult> ProcessAsync(IOwinContext context, string channelId, string title, DateTime startTime, DateTime endTime, WebScheduleType scheduleType)
        {
            if (!ServiceRegistration.IsRegistered <ITvProvider>())
            {
                throw new BadRequestException("AddSchedule: ITvProvider not found");
            }

            bool result = await TVAccess.CreateScheduleAsync(context, int.Parse(channelId), title, startTime, endTime, scheduleType);

            return(new WebBoolResult {
                Result = result
            });
        }
Esempio n. 5
0
        public static async Task <WebBoolResult> ProcessAsync(IOwinContext context, string scheduleId)
        {
            if (!ServiceRegistration.IsRegistered <ITvProvider>())
            {
                throw new BadRequestException("DeleteSchedule: ITvProvider not found");
            }

            bool result = await TVAccess.DeleteScheduleAsync(context, int.Parse(scheduleId));

            return(new WebBoolResult {
                Result = result
            });
        }
Esempio n. 6
0
        private void InitMovieGenre(string language)
        {
            if (MovieGenreMap.ContainsKey(language))
            {
                return;
            }

            var list = new List <GenreMapping>();

            if (ServiceRegistration.IsRegistered <ISettingsManager>())
            {
                var settings = ServiceRegistration.Get <ISettingsManager>().Load <GenreSettings>();
                if (settings.MovieGenreMappings?.Length > 0)
                {
                    list.AddRange(settings.MovieGenreMappings);
                }
            }

            string genreRegex;

            list.AddRange(new GenreMapping[]
            {
                new GenreMapping((int)VideoGenre.Action, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.Action", language, out genreRegex) ? genreRegex : @"Action", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.Adventure, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.Adventure", language, out genreRegex) ? genreRegex : @"Adventure", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.Animation, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.Animation", language, out genreRegex) ? genreRegex : @"Animation", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.Comedy, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.Comedy", language, out genreRegex) ? genreRegex : @"Comedy", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.Crime, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.Crime", language, out genreRegex) ? genreRegex : @"Crime", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.Documentary, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.Documentary", language, out genreRegex) ? genreRegex : @"Documentary", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.Biography, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.Biography", language, out genreRegex) ? genreRegex : @"Biography", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.Drama, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.Drama", language, out genreRegex) ? genreRegex : @"Drama", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.Family, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.Family", language, out genreRegex) ? genreRegex : @"Family", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.Fantasy, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.Fantasy", language, out genreRegex) ? genreRegex : @"Fantasy", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.History, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.History", language, out genreRegex) ? genreRegex : @"History", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.Horror, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.Horror", language, out genreRegex) ? genreRegex : @"Horror", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.Music, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.Music", language, out genreRegex) ? genreRegex : @"Music", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.Mystery, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.Mystery", language, out genreRegex) ? genreRegex : @"Mystery", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.Romance, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.Romance", language, out genreRegex) ? genreRegex : @"Romance", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.SciFi, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.ScienceFiction", language, out genreRegex) ? genreRegex : @"Science Fiction", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.TvMovie, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.TVMovie", language, out genreRegex) ? genreRegex : @"TV", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.Thriller, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.Thriller", language, out genreRegex) ? genreRegex : @"Thriller", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.War, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.War", language, out genreRegex) ? genreRegex : @"War", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.Western, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.Western", language, out genreRegex) ? genreRegex : @"Western", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.Kids, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.Kids", language, out genreRegex) ? genreRegex : @"Kids|Children|Teen", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.Noir, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.Noir", language, out genreRegex) ? genreRegex : @"Noir", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.Sport, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.Sport", language, out genreRegex) ? genreRegex : @"Sport", RegexOptions.IgnoreCase)),
                new GenreMapping((int)VideoGenre.Superhero, new Regex(GenreStringManager.TryGetGenreString("Match", "Video.Superhero", language, out genreRegex) ? genreRegex : @"Superhero", RegexOptions.IgnoreCase)),
            });

            MovieGenreMap.TryAdd(language, list);
        }
        public static async Task <IList <WebDiskSpaceInformation> > ProcessAsync(IOwinContext context)
        {
            if (!ServiceRegistration.IsRegistered <ITvProvider>())
            {
                throw new BadRequestException("GetAllRecordingDiskInformation: ITvProvider not found");
            }

            var cards = await TVAccess.GetTunerCardsAsync(context);

            return(cards.Select(card => Card(card)).Select(x => x.RecordingFolder).Distinct().AsQueryable()
                   .Select(x => DiskSpaceInformation.GetSpaceInformation(x))
                   .GroupBy(x => x.Disk, (key, list) => list.First())
                   .ToList());
        }
Esempio n. 8
0
        private void InitMusicGenre(string language)
        {
            if (MusicGenreMap.ContainsKey(language))
            {
                return;
            }

            var list = new List <GenreMapping>();

            if (ServiceRegistration.IsRegistered <ISettingsManager>())
            {
                var settings = ServiceRegistration.Get <ISettingsManager>().Load <GenreSettings>();
                if (settings.MusicGenreMappings?.Length > 0)
                {
                    list.AddRange(settings.MusicGenreMappings);
                }
            }

            string genreRegex;

            list.AddRange(new GenreMapping[]
            {
                new GenreMapping((int)AudioGenre.Classic, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.Classic", language, out genreRegex) ? genreRegex : @"Classic", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.Soundtrack, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.Soundtrack", language, out genreRegex) ? genreRegex : @"Soundtrack", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.NewAge, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.NewAge", language, out genreRegex) ? genreRegex : @"New Age", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.Rock, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.Rock", language, out genreRegex) ? genreRegex : @"Rock", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.Metal, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.Metal", language, out genreRegex) ? genreRegex : @"Metal", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.Country, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.Classic", language, out genreRegex) ? genreRegex : @"Country", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.Jazz, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.Jazz", language, out genreRegex) ? genreRegex : @"Jazz", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.Soul, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.RbSoul", language, out genreRegex) ? genreRegex : @"Soul", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.Rap, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.HipHopRap", language, out genreRegex) ? genreRegex : @"Rap", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.Reggae, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.Raggae", language, out genreRegex) ? genreRegex : @"Reggae", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.Pop, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.Pop", language, out genreRegex) ? genreRegex : @"Pop", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.Dance, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.Dance", language, out genreRegex) ? genreRegex : @"Dance", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.Electronic, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.Electronic", language, out genreRegex) ? genreRegex : @"Electronic", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.Comedy, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.Comedy", language, out genreRegex) ? genreRegex : @"Comedy", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.Folk, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.Folk", language, out genreRegex) ? genreRegex : @"Folk", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.EasyListening, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.EasyListening", language, out genreRegex) ? genreRegex : @"Easy", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.Holiday, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.Holiday", language, out genreRegex) ? genreRegex : @"Holiday", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.World, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.World", language, out genreRegex) ? genreRegex : @"World", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.Alternative, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.Alternative", language, out genreRegex) ? genreRegex : @"Alternative", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.Compilation, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.Compilation", language, out genreRegex) ? genreRegex : @"Compilation", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.Audiobook, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.Audiobook", language, out genreRegex) ? genreRegex : @"Audiobook", RegexOptions.IgnoreCase)),
                new GenreMapping((int)AudioGenre.Karaoke, new Regex(GenreStringManager.TryGetGenreString("Match", "Audio.Karaoke", language, out genreRegex) ? genreRegex : @"Karaoke", RegexOptions.IgnoreCase)),
            });

            MusicGenreMap.TryAdd(language, list);
        }
Esempio n. 9
0
        public static async Task <IList <WebProgramBasic> > ProcessAsync(IOwinContext context, string channelId, DateTime startTime, DateTime endTime)
        {
            if (!ServiceRegistration.IsRegistered <ITvProvider>())
            {
                throw new BadRequestException("GetProgramsBasicForChannel: ITvProvider not found");
            }

            var programs = await TVAccess.GetGroupProgramsAsync(context, startTime, endTime, int.Parse(channelId));

            if (programs.Count == 0)
            {
                Logger.Warn("GetProgramsBasicForChannel: Couldn't get Now/Next Info for channel with Id: {0}", channelId);
            }

            return(programs.Select(program => ProgramBasic(program)).ToList());
        }
Esempio n. 10
0
        public static async Task <WebChannelDetailed> ProcessAsync(IOwinContext context, string channelId)
        {
            if (!ServiceRegistration.IsRegistered <ITvProvider>())
            {
                throw new BadRequestException("GetChannelDetailedById: ITvProvider not found");
            }

            var channel = await TVAccess.GetChannelAsync(int.Parse(channelId));

            if (channel == null)
            {
                throw new NotFoundException(string.Format("GetChannelDetailedById: Couldn't get channel with Id: {0}", channelId));
            }

            return(ChannelDetailed(channel));
        }
        public IList <IChannelGroup> GetItems(string sortCriteria)
        {
            if (ServiceRegistration.IsRegistered <ITvProvider>())
            {
                IChannelAndGroupInfoAsync channelAndGroupInfo = ServiceRegistration.Get <ITvProvider>() as IChannelAndGroupInfoAsync;

                IList <IChannelGroup> channelGroups = new List <IChannelGroup>();
                var result = channelAndGroupInfo.GetChannelGroupsAsync().Result;
                if (result.Success)
                {
                    result.Result = FilterGroups(result.Result);
                    return(result.Result.OrderBy(g => g.Name).ToList());
                }
            }
            return(null);
        }
Esempio n. 12
0
 public IList <IChannel> GetItems(string sortCriteria)
 {
     if (ServiceRegistration.IsRegistered <ITvProvider>())
     {
         IChannelAndGroupInfoAsync channelAndGroupInfo = ServiceRegistration.Get <ITvProvider>() as IChannelAndGroupInfoAsync;
         IChannelGroup             group = new ChannelGroup()
         {
             ChannelGroupId = GroupId
         };
         var res = channelAndGroupInfo.GetChannelsAsync(group).Result;
         if (res.Success)
         {
             return(res.Result.OrderBy(c => c.Name).ToList());
         }
     }
     return(null);
 }
Esempio n. 13
0
        public static async Task <WebScheduleBasic> ProcessAsync(IOwinContext context, string scheduleId)
        {
            if (!ServiceRegistration.IsRegistered <ITvProvider>())
            {
                throw new BadRequestException("GetScheduleById: ITvProvider not found");
            }

            var schedule = await TVAccess.GetScheduleAsync(context, int.Parse(scheduleId));

            if (schedule == null)
            {
                throw new NotFoundException(string.Format("GetScheduleById: Couldn't get schedule with Id: {0}", scheduleId));
            }

            WebScheduleBasic output = ScheduleBasic(schedule);

            return(output);
        }
Esempio n. 14
0
        public static Task <WebBoolResult> ProcessAsync(IOwinContext context, string id)
        {
            if (!ServiceRegistration.IsRegistered <ITvProvider>())
            {
                throw new BadRequestException("DeleteRecording: ITvProvider not found");
            }

            MediaItem item = MediaLibraryAccess.GetMediaItemById(context, Guid.Parse(id), BasicNecessaryMIATypeIds, BasicOptionalMIATypeIds);

            if (item == null)
            {
                throw new NotFoundException(String.Format("DeleteRecording: No MediaItem found with id: {0}", id));
            }

            return(System.Threading.Tasks.Task.FromResult(new WebBoolResult {
                Result = MediaLibraryAccess.Delete(context, item)
            }));
        }
        public static async Task <WebProgramDetailed> ProcessAsync(IOwinContext context, string programId)
        {
            if (!ServiceRegistration.IsRegistered <ITvProvider>())
            {
                throw new BadRequestException("GetProgramDetailedById: ITvProvider not found");
            }

            IProgram program = await TVAccess.GetProgramAsync(context, int.Parse(programId));

            if (program == null)
            {
                throw new NotFoundException(string.Format("GetProgramDetailedById: Couldn't get Now/Next Info for channel with Id: {0}", programId));
            }

            WebProgramDetailed webProgramDetailed = ProgramDetailed(program);

            return(webProgramDetailed);
        }
Esempio n. 16
0
        public static async Task <WebBoolResult> ProcessAsync(IOwinContext context, string programId)
        {
            if (programId == null)
            {
                throw new BadRequestException("CancelSchedule: programId is null");
            }

            if (!ServiceRegistration.IsRegistered <ITvProvider>())
            {
                throw new BadRequestException("CancelSchedule: ITvProvider not found");
            }

            bool result = await TVAccess.UnCancelScheduleAsync(context, int.Parse(programId));

            return(new WebBoolResult {
                Result = result
            });
        }
Esempio n. 17
0
        public static async Task <WebProgramDetailed> ProcessAsync(IOwinContext context, string channelId)
        {
            if (!ServiceRegistration.IsRegistered <ITvProvider>())
            {
                throw new BadRequestException("GetCurrentProgramOnChannel: ITvProvider not found");
            }

            var programs = await TVAccess.GetChannelNowNextProgramAsync(context, int.Parse(channelId));

            if (programs == null)
            {
                throw new BadRequestException(string.Format("GetCurrentProgramOnChannel: Couldn't get Now/Next Info for channel with Id: {0}", channelId));
            }

            WebProgramDetailed webProgramDetailed = ProgramDetailed(programs[0]);

            return(webProgramDetailed);
        }
Esempio n. 18
0
        protected static async Task <IList <IChannelGroup> > GetChannelGroupsAsync(bool isTv)
        {
            if (!ServiceRegistration.IsRegistered <ITvHandler>())
            {
                Logger.Error($"WifiRemote: List Channel Groups: No tv handler");
                return(new List <IChannelGroup>());
            }

            ITvHandler tvHandler     = ServiceRegistration.Get <ITvHandler>();
            var        channelGroups = await tvHandler.ChannelAndGroupInfo.GetChannelGroupsAsync();

            if (!channelGroups.Success)
            {
                Logger.Error($"WifiRemote: List Channel Groups: Error getting groups");
                return(new List <IChannelGroup>());
            }

            return(channelGroups.Result.Where(g => g.MediaType == (isTv ? MediaType.TV : MediaType.Radio)).ToList());
        }
Esempio n. 19
0
        protected static async Task <IList <ISchedule> > GetSchedulesAsync()
        {
            if (!ServiceRegistration.IsRegistered <ITvHandler>())
            {
                Logger.Error($"WifiRemote: List Schedules: No tv handler");
                return(new List <ISchedule>());
            }

            ITvHandler tvHandler = ServiceRegistration.Get <ITvHandler>();
            var        schedules = await tvHandler.ScheduleControl.GetSchedulesAsync();

            if (!schedules.Success)
            {
                Logger.Error($"WifiRemote: List Schedules: Error getting schedules");
                return(new List <ISchedule>());
            }

            return(schedules.Result);
        }
Esempio n. 20
0
        public static async Task <WebChannelGroup> ProcessAsync(IOwinContext context, string groupId)
        {
            if (!ServiceRegistration.IsRegistered <ITvProvider>())
            {
                throw new BadRequestException("GetRadioGroupById: ITvProvider not found");
            }

            // select the channel Group we are looking for
            var group = await TVAccess.GetGroupAsync(context, int.Parse(groupId));

            if (group == null)
            {
                throw new NotFoundException(string.Format("GetRadioGroupById: group with id: {0} not found", groupId));
            }

            WebChannelGroup webChannelGroup = ChannelGroup(group);

            return(webChannelGroup);
        }
        public static async Task <IList <WebChannelDetailed> > ProcessAsync(IOwinContext context, string groupId, WebSortField?sort, WebSortOrder?order)
        {
            if (!ServiceRegistration.IsRegistered <ITvProvider>())
            {
                throw new BadRequestException("GetChannelsDetailed: ITvProvider not found");
            }

            List <WebChannelDetailed> output = new List <WebChannelDetailed>();
            var channels = await TVAccess.GetGroupChannelsAsync(context, groupId != null?int.Parse(groupId) : (int?)null);

            output.AddRange(channels.Where(x => x.MediaType == MediaType.TV).Select(channel => ChannelDetailed(channel)));

            // sort
            if (sort != null && order != null)
            {
                output = output.SortChannelList(sort, order).ToList();
            }

            return(output);
        }
Esempio n. 22
0
        public static async Task <IList <WebUser> > ProcessAsync(IOwinContext context)
        {
            if (!ServiceRegistration.IsRegistered <ITvProvider>())
            {
                throw new BadRequestException("GetActiveUsers: ITvProvider not found");
            }

            var cards = await TVAccess.GetVirtualCardsAsync(context);

            return(cards.Select(card => new WebUser
            {
                ChannelId = card.User.IdChannel,
                Name = card.User.Name,
                CardId = card.User.CardId,
                HeartBeat = card.User.HeartBeat,
                IsAdmin = card.User.IsAdmin,
                SubChannel = card.User.SubChannel,
                TvStoppedReason = (int)card.User.TvStoppedReason,
            }).ToList());
        }
        public static async Task <WebBoolResult> ProcessAsync(IOwinContext context, string programId)
        {
            if (programId == null)
            {
                throw new BadRequestException("GetProgramIsScheduled: programId is null");
            }

            if (!ServiceRegistration.IsRegistered <ITvProvider>())
            {
                throw new BadRequestException("GetProgramIsScheduled: ITvProvider not found");
            }

            var recordingStatus = await TVAccess.GetProgramRecordingStatusAsync(context, int.Parse(programId));

            bool result = recordingStatus == RecordingStatus.Recording || recordingStatus == RecordingStatus.RuleScheduled ||
                          recordingStatus == RecordingStatus.Scheduled || recordingStatus == RecordingStatus.SeriesScheduled;

            return(new WebBoolResult {
                Result = result
            });
        }
        public override void Initialise(string sortCriteria, uint?offset = null, uint?count = null)
        {
            base.Initialise(sortCriteria, offset, count);

            if (ServiceRegistration.IsRegistered <ITvProvider>())
            {
                IChannelAndGroupInfoAsync channelAndGroupInfo = ServiceRegistration.Get <ITvProvider>() as IChannelAndGroupInfoAsync;
                var res = channelAndGroupInfo?.GetChannelAsync(ChannelId).Result;
                if (res?.Success ?? false)
                {
                    var dlnaItem = Client.GetLiveDlnaItem(ChannelId);
                    if (dlnaItem == null)
                    {
                        var mediaItem = Client.StoreLiveDlnaItem(ChannelId);
                        if (mediaItem == null)
                        {
                            Logger.Error("MediaServer: Error analyzing channel {0} stream", ChannelId);
                            return;
                        }
                    }

                    IChannel channel = res.Result;
                    try
                    {
                        if (channel.MediaType == MediaType.TV)
                        {
                            Add(new MediaLibraryVideoBroadcastItem(channel.Name, channel.ChannelId, Client));
                        }
                        else if (channel.MediaType == MediaType.Radio)
                        {
                            Add(new MediaLibraryAudioBroadcastItem(channel.Name, channel.ChannelId, Client));
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Error("MediaServer: Error analyzing channel {0}", ex, ChannelId);
                    }
                }
            }
        }
Esempio n. 25
0
        public static async Task <Stream> CorrectPlaylistUrlsAsync(string baseUrl, string playlist)
        {
            if (ServiceRegistration.IsRegistered <IMediaConverter>())
            {
                IMediaConverter converter = ServiceRegistration.Get <IMediaConverter>();
                if (baseUrl == null)
                {
                    baseUrl = "";
                }
                StringBuilder palylistBuilder = new StringBuilder();

                using (var streamReader = new StreamReader(playlist, Encoding.UTF8))
                    using (var streamWriter = new StringWriter(palylistBuilder))
                    {
                        string line = await streamReader.ReadLineAsync().ConfigureAwait(false);

                        while (line != null)
                        {
                            //Fix ffmpeg adding 1 second to the target time
                            if (line.Contains("#EXT-X-TARGETDURATION:"))
                            {
                                line = line.Replace("#EXT-X-TARGETDURATION:" + (converter.HLSSegmentTimeInSeconds + 1), "#EXT-X-TARGETDURATION:" + converter.HLSSegmentTimeInSeconds);
                            }
                            //Replace URL
                            if (line.Contains(URL_PLACEHOLDER))
                            {
                                line = line.Replace(URL_PLACEHOLDER, baseUrl);
                            }
                            await streamWriter.WriteLineAsync(line).ConfigureAwait(false);

                            line = await streamReader.ReadLineAsync().ConfigureAwait(false);
                        }
                    }

                var memStream = new MemoryStream(Encoding.UTF8.GetBytes(palylistBuilder.ToString()));
                memStream.Position = 0;
                return(memStream);
            }
            return(null);
        }
Esempio n. 26
0
        public static async Task <IList <WebProgramDetailed> > ProcessAsync(IOwinContext context, string channelId)
        {
            if (!ServiceRegistration.IsRegistered <ITvProvider>())
            {
                throw new BadRequestException("GetNowNextWebProgramDetailedForChannel: ITvProvider not found");
            }

            var programs = await TVAccess.GetChannelNowNextProgramAsync(context, int.Parse(channelId));

            if (programs == null)
            {
                throw new NotFoundException(string.Format("GetNowNextWebProgramDetailedForChannel: Couldn't get Now/Next Info for channel with Id: {0}", channelId));
            }

            List <WebProgramDetailed> output = new List <WebProgramDetailed>
            {
                ProgramDetailed(programs[0]),
                ProgramDetailed(programs[1])
            };

            return(output);
        }
Esempio n. 27
0
        public static async Task <WebBoolResult> ProcessAsync(IOwinContext context, string scheduleId, string channelId = null, string title = null, DateTime?startTime = null, DateTime?endTime = null, WebScheduleType?scheduleType = null, int?preRecordInterval = null, int?postRecordInterval = null, string directory = null, int?priority = null)
        {
            if (!ServiceRegistration.IsRegistered <ITvProvider>())
            {
                throw new BadRequestException("EditSchedule: ITvProvider not found");
            }

            bool result = await TVAccess.EditScheduleAsync(context, int.Parse(scheduleId),
                                                           channelId != null?int.Parse(channelId) : (int?)null,
                                                           title,
                                                           startTime,
                                                           endTime,
                                                           scheduleType,
                                                           preRecordInterval,
                                                           postRecordInterval,
                                                           directory,
                                                           priority);

            return(new WebBoolResult {
                Result = result
            });
        }
Esempio n. 28
0
        private static void ThreadProc()
        {
            while (_screenControl == null)
            {
                try
                {
                    if (ServiceRegistration.IsRegistered <IScreenControl>())
                    {
                        _screenControl = ServiceRegistration.Get <IScreenControl>();

                        _rawInput = new RawInputHandler(_screenControl.MainWindowHandle, CAPTURE_ONLY_IN_FOREGROUND);
                        _rawInput.AddMessageFilter(); // Adding a message filter will cause keypresses to be handled
                        _rawInput.KeyPressed += OnKeyPressed;
                    }
                }
                catch
                {
                    // ignored
                }
                Thread.Sleep(500);
            }
        }
Esempio n. 29
0
        public static Task <Stream> CreateSubsPlaylistAsync(VideoTranscoding video, long startSegment)
        {
            if (ServiceRegistration.IsRegistered <IMediaConverter>())
            {
                IMediaConverter converter       = ServiceRegistration.Get <IMediaConverter>();
                StringBuilder   palylistBuilder = new StringBuilder();

                using (StringWriter writer = new StringWriter(palylistBuilder))
                {
                    writer.WriteLine("#EXTM3U");
                    writer.WriteLine("#EXT-X-VERSION:3");
                    writer.WriteLine("#EXT-X-ALLOW-CACHE:NO");
                    writer.WriteLine("#EXT-X-TARGETDURATION:" + converter.HLSSegmentTimeInSeconds);
                    writer.WriteLine("#EXT-X-MEDIA-SEQUENCE:0");
                    writer.WriteLine();

                    double remainingDuration = video.SourceMediaDuration.TotalSeconds;
                    remainingDuration -= (Convert.ToDouble(startSegment) * Convert.ToDouble(converter.HLSSegmentTimeInSeconds));
                    while (remainingDuration > 0)
                    {
                        double segmentTime = remainingDuration >= converter.HLSSegmentTimeInSeconds ? converter.HLSSegmentTimeInSeconds : remainingDuration;
                        writer.WriteLine("#EXTINF:" + segmentTime.ToString("0.000000", CultureInfo.InvariantCulture) + ",");
                        writer.WriteLine(URL_PLACEHOLDER + "playlist" + startSegment.ToString("0") + ".vtt");
                        writer.WriteLine();

                        startSegment++;
                        remainingDuration -= converter.HLSSegmentTimeInSeconds;
                    }

                    writer.WriteLine("#EXT-X-ENDLIST");
                }

                var memStream = new MemoryStream(Encoding.UTF8.GetBytes(palylistBuilder.ToString()));
                memStream.Position = 0;
                return(Task.FromResult <Stream>(memStream));
            }
            return(Task.FromResult <Stream>(null));
        }
Esempio n. 30
0
        public static Task <IList <WebRecordingBasic> > ProcessAsync(IOwinContext context, WebSortField?sort, WebSortOrder?order, string filter = null)
        {
            if (!ServiceRegistration.IsRegistered <ITvProvider>())
            {
                throw new BadRequestException("GetRecordings: ITvProvider not found");
            }

            IList <MediaItem> items = MediaLibraryAccess.GetMediaItemsByAspect(context, BasicNecessaryMIATypeIds, BasicOptionalMIATypeIds);

            List <WebRecordingBasic> output = items.Select(item => RecordingBasic(item)).ToList();

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

            return(System.Threading.Tasks.Task.FromResult <IList <WebRecordingBasic> >(output));
        }