public void DoesMatch_NamesMatch_ReturnsTrue(
            string definedName,
            string alias,
            string providerName)
        {
            ChannelName channelName = GetChannelName(definedName, alias);

            Assert.IsTrue(channelMatcher.DoesMatch(channelName, providerName));
        }
Пример #2
0
        public void DoesMatch_CompareWithSameValue_ReturnsTrue()
        {
            string definedName = "Digi Sport 2";
            string providerName = "RO: Digi Sport 2";
            string alias = "RO: Digi Sport 2";

            ChannelName channelName = new ChannelName(definedName, alias);

            Assert.IsTrue(channelMatcher.DoesMatch(channelName, providerName));
        }
Пример #3
0
        public void ChannelNamesDoMatch_WithAliasWithCountry(
            string definedName,
            string definedCountry,
            string alias,
            string providerName,
            string providerCountry)
        {
            ChannelName channelName = GetChannelName(definedName, definedCountry, alias);

            Assert.IsTrue(channelMatcher.DoesMatch(channelName, providerName, providerCountry));
        }
        IEnumerable <Channel> GetEnabledChannels(IEnumerable <Channel> filteredProviderChannels)
        {
            ConcurrentBag <Channel>         channels = new ConcurrentBag <Channel>();
            IEnumerable <ChannelDefinition> enabledChannelDefinitions = channelDefinitions
                                                                        .Where(x => x.IsEnabled && groups[x.GroupId].IsEnabled);

            Parallel.ForEach(enabledChannelDefinitions, channelDef =>
            {
                logger.Debug(
                    MyOperation.ChannelMatching,
                    OperationStatus.Started,
                    new LogInfo(MyLogInfoKey.Channel, channelDef.Name.Value));

                List <Channel> matchedChannels = filteredProviderChannels
                                                 .Where(x => channelMatcher.DoesMatch(channelDef.Name, x.Name, x.Country))
                                                 .ToList();

                if (!matchedChannels.Any())
                {
                    return;
                }

                logger.Debug(
                    MyOperation.ChannelMatching,
                    OperationStatus.InProgress,
                    new LogInfo(MyLogInfoKey.Channel, channelDef.Name.Value),
                    new LogInfo(MyLogInfoKey.ChannelsCount, matchedChannels.Count));

                Channel matchedChannel = matchedChannels.FirstOrDefault(x => mediaSourceChecker.IsSourcePlayableAsync(x.Url).Result);

                if (matchedChannel is null)
                {
                    logger.Debug(
                        MyOperation.ChannelMatching,
                        OperationStatus.Failure,
                        new LogInfo(MyLogInfoKey.Channel, channelDef.Name.Value));

                    return;
                }

                Channel channel             = new Channel();
                channel.Id                  = channelDef.Id;
                channel.Name                = channelDef.Name.Value;
                channel.Country             = channelDef.Country;
                channel.Group               = groups[channelDef.GroupId].Name;
                channel.LogoUrl             = channelDef.LogoUrl;
                channel.PlaylistId          = matchedChannel.PlaylistId;
                channel.PlaylistChannelName = matchedChannel.PlaylistChannelName;
                channel.Url                 = matchedChannel.Url;

                channels.Add(channel);

                logger.Debug(
                    MyOperation.ChannelMatching,
                    OperationStatus.Success,
                    new LogInfo(MyLogInfoKey.Channel, channelDef.Name.Value));
            });

            return(channels);
        }
Пример #5
0
        public string GatherPlaylist()
        {
            groups = groupRepository
                     .GetAll()
                     .Where(x => x.IsEnabled)
                     .ToServiceModels()
                     .ToDictionary(x => x.Id, x => x);

            channelDefinitions = channelRepository
                                 .GetAll()
                                 .OrderBy(x => groups[x.GroupId].Priority)
                                 .ThenBy(x => x.Name)
                                 .ToServiceModels();

            playlistProviders = playlistProviderRepository
                                .GetAll()
                                .Where(x => x.IsEnabled)
                                .ToServiceModels();

            IList <Channel> providerChannels = playlistFetcher
                                               .FetchProviderPlaylists(playlistProviders)
                                               .SelectMany(x => x.Channels)
                                               .ToList();

            Playlist playlist = new Playlist();
            IEnumerable <Channel>           filteredProviderChannels  = FilterProviderChannels(providerChannels, channelDefinitions);
            IEnumerable <ChannelDefinition> enabledChannelDefinitions = channelDefinitions
                                                                        .Where(x => x.IsEnabled && groups[x.GroupId].IsEnabled);

            logger.Info(MyOperation.ChannelMatching, OperationStatus.Started);

            foreach (ChannelDefinition channelDef in enabledChannelDefinitions)
            {
                Channel matchedChannel = filteredProviderChannels
                                         .FirstOrDefault(x => channelMatcher.DoesMatch(channelDef.Name, x.Name));

                if (matchedChannel is null)
                {
                    continue;
                }

                Channel channel = new Channel();
                channel.Id      = channelDef.Id;
                channel.Name    = channelDef.Name.Value;
                channel.Group   = groups[channelDef.GroupId].Name;
                channel.LogoUrl = channelDef.LogoUrl;
                channel.Number  = playlist.Channels.Count + 1;
                channel.Url     = matchedChannel.Url;

                playlist.Channels.Add(channel);
            }

            if (settings.CanIncludeUnmatchedChannels)
            {
                logger.Info(MyOperation.ChannelMatching, OperationStatus.InProgress, $"Getting unmatched channels");

                IEnumerable <Channel> unmatchedChannels = filteredProviderChannels
                                                          .Where(x => channelDefinitions.All(y => !channelMatcher.DoesMatch(y.Name, x.Name)))
                                                          .GroupBy(x => x.Name)
                                                          .Select(g => g.First())
                                                          .OrderBy(x => x.Name);

                foreach (Channel unmatchedChannel in unmatchedChannels)
                {
                    logger.Warn(MyOperation.ChannelMatching, OperationStatus.Failure, new LogInfo(MyLogInfoKey.Channel, unmatchedChannel.Name));

                    unmatchedChannel.Number = playlist.Channels.Count + 1;
                    playlist.Channels.Add(unmatchedChannel);
                }
            }

            logger.Debug(
                MyOperation.ChannelMatching,
                OperationStatus.Success,
                new LogInfo(MyLogInfoKey.ChannelsCount, playlist.Channels.Count.ToString()));

            return(playlistFileBuilder.BuildFile(playlist));
        }