Esempio n. 1
0
        private async Task CacheGuideResponse(DateTimeOffset startDate, DateTimeOffset endDate, CancellationToken cancellationToken)
        {
            using (var releaser = await _guideLock.LockAsync()) {
                if (_guide != null && (DateTime.Now - _guide.FetchTime).Hours < 1)
                {
                    return;
                }

                _logger.Info("[MythTV] Start CacheGuideResponse");

                await EnsureSetup();

                var options = GetOptions(cancellationToken,
                                         "/Guide/GetProgramGuide?StartTime={0}&EndTime={1}&Details=1",
                                         FormatMythDate(startDate),
                                         FormatMythDate(endDate));
                // This can be slow so default 20 sec timeout can be too short
                options.TimeoutMs = 60000;

                using (var stream = await _httpClient.Get(options).ConfigureAwait(false))
                {
                    _guide = new GuideResponse(stream, _jsonSerializer);
                }
            }

            _logger.Info("[MythTV] End CacheGuideResponse");
        }
Esempio n. 2
0
        public async Task <IEnumerable <ProgramInfo> > GetProgramsAsync(string channelId, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken)
        {
            _logger.Info("[MythTV] Start GetPrograms Async, retrieve programs for: {0}", channelId);
            EnsureSetup();
            List <ProgramInfo> ret = new List <ProgramInfo>();
            var options            = GetOptions(cancellationToken, "/Guide/GetProgramGuide?StartTime={0}&EndTime={1}&StartChanId={2}&NumChannels=1&Details=1", FormateMythDate(startDateUtc), FormateMythDate(endDateUtc), channelId);

            using (var stream = await _httpClient.Get(options).ConfigureAwait(false))
            {
                var data = GuideResponse.ParseGuide(stream, _jsonSerializer, _logger);

                foreach (var item in data.Channels)
                {
                    foreach (var prog in item.Programs)
                    {
                        List <string> categories = new List <string>();
                        categories.AddRange(prog.Category.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries));

                        ProgramInfo val = new ProgramInfo()
                        {
                            Name         = prog.Title,
                            EpisodeTitle = prog.SubTitle,
                            Overview     = prog.Description,
                            Audio        = ProgramAudio.Stereo, //Hardcode for now (ProgramAudio)item.AudioProps,
                            ChannelId    = item.ChanId.ToString(),
                            EndDate      = (DateTime)prog.EndTime,
                            StartDate    = (DateTime)prog.StartTime,
                            Id           = string.Format("StartTime={0}&ChanId={1}", ((DateTime)prog.StartTime).Ticks, item.ChanId),
                            IsSeries     = GeneralHelpers.ContainsWord(prog.CatType, "series", StringComparison.OrdinalIgnoreCase),
                            IsMovie      = GeneralHelpers.ContainsWord(prog.CatType, "movie", StringComparison.OrdinalIgnoreCase),
                            IsRepeat     = prog.Repeat,
                            IsNews       = GeneralHelpers.ContainsWord(prog.Category, "news",
                                                                       StringComparison.OrdinalIgnoreCase),
                            IsKids = GeneralHelpers.ContainsWord(prog.Category, "animation",
                                                                 StringComparison.OrdinalIgnoreCase),
                            IsSports =
                                GeneralHelpers.ContainsWord(prog.Category, "sport",
                                                            StringComparison.OrdinalIgnoreCase) ||
                                GeneralHelpers.ContainsWord(prog.Category, "motor sports",
                                                            StringComparison.OrdinalIgnoreCase) ||
                                GeneralHelpers.ContainsWord(prog.Category, "football",
                                                            StringComparison.OrdinalIgnoreCase) ||
                                GeneralHelpers.ContainsWord(prog.Category, "cricket",
                                                            StringComparison.OrdinalIgnoreCase)
                        };
                        val.Genres.AddRange(categories);
                        if (!string.IsNullOrWhiteSpace(item.IconURL))
                        {
                            val.HasImage = true;
                            val.ImageUrl = string.Format("{0}{1}", Plugin.Instance.Configuration.WebServiceUrl, item.IconURL);
                        }
                        else
                        {
                            val.HasImage = false;
                        }

                        ret.Add(val);
                    }
                }
            }

            return(ret);
        }