public void DoesMatch_NamesMatch_ReturnsTrue( string definedName, string alias, string providerName) { ChannelName channelName = GetChannelName(definedName, alias); Assert.IsTrue(channelMatcher.DoesMatch(channelName, providerName)); }
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)); }
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); }
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)); }