Skip to content

Commit

Permalink
fix search dipping into restricted channels
Browse files Browse the repository at this point in the history
  • Loading branch information
LukePulverenti committed Jun 30, 2016
1 parent 0082ec4 commit 8591d32
Show file tree
Hide file tree
Showing 29 changed files with 210 additions and 424 deletions.
6 changes: 2 additions & 4 deletions MediaBrowser.Api/GamesService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,7 @@ public object Get(GetGameSystemSummaries request)
{
IncludeItemTypes = new[] { typeof(GameSystem).Name }
};
var parentIds = new string[] { } ;
var gameSystems = _libraryManager.GetItemList(query, parentIds)
var gameSystems = _libraryManager.GetItemList(query)
.Cast<GameSystem>()
.ToList();

Expand All @@ -130,8 +129,7 @@ public object Get(GetPlayerIndex request)
{
IncludeItemTypes = new[] { typeof(Game).Name }
};
var parentIds = new string[] { };
var games = _libraryManager.GetItemList(query, parentIds)
var games = _libraryManager.GetItemList(query)
.Cast<Game>()
.ToList();

Expand Down
74 changes: 3 additions & 71 deletions MediaBrowser.Api/LiveTv/LiveTvService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -519,14 +519,6 @@ public class ChannelMappingOptions
public string ProviderName { get; set; }
}

public class TunerChannelMapping
{
public string Name { get; set; }
public string Number { get; set; }
public string ProviderChannelNumber { get; set; }
public string ProviderChannelName { get; set; }
}

[Route("/LiveTv/Registration", "GET")]
[Authenticated]
public class GetLiveTvRegistrationInfo : IReturn<MBRegistrationRecord>
Expand Down Expand Up @@ -595,36 +587,7 @@ public async Task<object> Get(GetLiveTvRegistrationInfo request)

public async Task<object> Post(SetChannelMapping request)
{
var config = GetConfiguration();

var listingsProviderInfo = config.ListingProviders.First(i => string.Equals(request.ProviderId, i.Id, StringComparison.OrdinalIgnoreCase));
listingsProviderInfo.ChannelMappings = listingsProviderInfo.ChannelMappings.Where(i => !string.Equals(i.Name, request.TunerChannelNumber, StringComparison.OrdinalIgnoreCase)).ToArray();

if (!string.Equals(request.TunerChannelNumber, request.ProviderChannelNumber, StringComparison.OrdinalIgnoreCase))
{
var list = listingsProviderInfo.ChannelMappings.ToList();
list.Add(new NameValuePair
{
Name = request.TunerChannelNumber,
Value = request.ProviderChannelNumber
});
listingsProviderInfo.ChannelMappings = list.ToArray();
}

UpdateConfiguration(config);

var tunerChannels = await _liveTvManager.GetChannelsForListingsProvider(request.ProviderId, CancellationToken.None)
.ConfigureAwait(false);

var providerChannels = await _liveTvManager.GetChannelsFromListingsProviderData(request.ProviderId, CancellationToken.None)
.ConfigureAwait(false);

var mappings = listingsProviderInfo.ChannelMappings.ToList();

var tunerChannelMappings =
tunerChannels.Select(i => GetTunerChannelMapping(i, mappings, providerChannels)).ToList();

return tunerChannelMappings.First(i => string.Equals(i.Number, request.TunerChannelNumber, StringComparison.OrdinalIgnoreCase));
return await _liveTvManager.SetChannelMapping(request.ProviderId, request.TunerChannelNumber, request.ProviderChannelNumber).ConfigureAwait(false);
}

public async Task<object> Get(GetChannelMappingOptions request)
Expand All @@ -645,7 +608,7 @@ public async Task<object> Get(GetChannelMappingOptions request)

var result = new ChannelMappingOptions
{
TunerChannels = tunerChannels.Select(i => GetTunerChannelMapping(i, mappings, providerChannels)).ToList(),
TunerChannels = tunerChannels.Select(i => _liveTvManager.GetTunerChannelMapping(i, mappings, providerChannels)).ToList(),

ProviderChannels = providerChannels.Select(i => new NameIdPair
{
Expand All @@ -662,33 +625,6 @@ public async Task<object> Get(GetChannelMappingOptions request)
return ToOptimizedResult(result);
}

private TunerChannelMapping GetTunerChannelMapping(ChannelInfo channel, List<NameValuePair> mappings, List<ChannelInfo> providerChannels)
{
var result = new TunerChannelMapping
{
Name = channel.Number + " " + channel.Name,
Number = channel.Number
};

var mapping = mappings.FirstOrDefault(i => string.Equals(i.Name, channel.Number, StringComparison.OrdinalIgnoreCase));
var providerChannelNumber = channel.Number;

if (mapping != null)
{
providerChannelNumber = mapping.Value;
}

var providerChannel = providerChannels.FirstOrDefault(i => string.Equals(i.Number, providerChannelNumber, StringComparison.OrdinalIgnoreCase));

if (providerChannel != null)
{
result.ProviderChannelNumber = providerChannel.Number;
result.ProviderChannelName = providerChannel.Name;
}

return result;
}

public object Get(GetSatIniMappings request)
{
return ToOptimizedResult(_liveTvManager.GetSatIniMappings());
Expand Down Expand Up @@ -730,11 +666,7 @@ public async Task<object> Post(AddListingProvider request)

public void Delete(DeleteListingProvider request)
{
var config = GetConfiguration();

config.ListingProviders = config.ListingProviders.Where(i => !string.Equals(request.Id, i.Id, StringComparison.OrdinalIgnoreCase)).ToList();

_config.SaveConfiguration("livetv", config);
_liveTvManager.DeleteListingsProvider(request.Id);
}

public async Task<object> Post(AddTunerHost request)
Expand Down
15 changes: 10 additions & 5 deletions MediaBrowser.Api/Movies/MoviesService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,8 @@ private IEnumerable<RecommendationDto> GetRecommendationCategories(User user, st
{
var categories = new List<RecommendationDto>();

var parentIds = string.IsNullOrWhiteSpace(parentId) ? new string[] { } : new[] { parentId };
var parentIdGuid = string.IsNullOrWhiteSpace(parentId) ? (Guid?)null : new Guid(parentId);

var query = new InternalItemsQuery(user)
{
IncludeItemTypes = new[]
Expand All @@ -189,10 +190,12 @@ private IEnumerable<RecommendationDto> GetRecommendationCategories(User user, st
// IsMovie = true
SortBy = new[] { ItemSortBy.DatePlayed, ItemSortBy.Random },
SortOrder = SortOrder.Descending,
Limit = 7
Limit = 7,
ParentId = parentIdGuid,
Recursive = true
};

var recentlyPlayedMovies = _libraryManager.GetItemList(query, parentIds).ToList();
var recentlyPlayedMovies = _libraryManager.GetItemList(query).ToList();

var likedMovies = _libraryManager.GetItemList(new InternalItemsQuery(user)
{
Expand All @@ -208,9 +211,11 @@ private IEnumerable<RecommendationDto> GetRecommendationCategories(User user, st
Limit = 10,
IsFavoriteOrLiked = true,
ExcludeItemIds = recentlyPlayedMovies.Select(i => i.Id.ToString("N")).ToArray(),
EnableGroupByMetadataKey = true
EnableGroupByMetadataKey = true,
ParentId = parentIdGuid,
Recursive = true

}, parentIds).ToList();
}).ToList();

var mostRecentMovies = recentlyPlayedMovies.Take(6).ToList();
// Get recently played directors
Expand Down
2 changes: 1 addition & 1 deletion MediaBrowser.Api/StartupWizardService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ private void SetWizardFinishValues(ServerConfiguration config)
config.EnableStandaloneMusicKeys = true;
config.EnableCaseSensitiveItemIds = true;
config.EnableFolderView = true;
config.SchemaVersion = 96;
config.SchemaVersion = 97;
}

public void Post(UpdateStartupConfiguration request)
Expand Down
7 changes: 4 additions & 3 deletions MediaBrowser.Api/TvShowsService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ public async Task<object> Get(GetUpcomingEpisodes request)

var minPremiereDate = DateTime.Now.Date.ToUniversalTime().AddDays(-1);

var parentIds = string.IsNullOrWhiteSpace(request.ParentId) ? new string[] { } : new[] { request.ParentId };
var parentIdGuid = string.IsNullOrWhiteSpace(request.ParentId) ? (Guid?)null : new Guid(request.ParentId);

var itemsResult = _libraryManager.GetItemList(new InternalItemsQuery(user)
{
Expand All @@ -326,9 +326,10 @@ public async Task<object> Get(GetUpcomingEpisodes request)
SortOrder = SortOrder.Ascending,
MinPremiereDate = minPremiereDate,
StartIndex = request.StartIndex,
Limit = request.Limit
Limit = request.Limit,
ParentId = parentIdGuid

}, parentIds).ToList();
}).ToList();

var options = GetDtoOptions(request);

Expand Down
2 changes: 1 addition & 1 deletion MediaBrowser.Controller/Entities/BaseItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2175,7 +2175,7 @@ public virtual bool IsTopParent
{
get
{
if (GetParent() is AggregateFolder || this is BasePluginFolder)
if (GetParent() is AggregateFolder || this is BasePluginFolder || this is Channel)
{
return true;
}
Expand Down
7 changes: 7 additions & 0 deletions MediaBrowser.Controller/LiveTv/ILiveTvManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -345,6 +345,13 @@ Task<QueryResult<LiveTvChannel>> GetInternalChannels(LiveTvChannelQuery query,
/// <param name="validateListings">if set to <c>true</c> [validate listings].</param>
/// <returns>Task.</returns>
Task<ListingsProviderInfo> SaveListingProvider(ListingsProviderInfo info, bool validateLogin, bool validateListings);

void DeleteListingsProvider(string id);

Task<TunerChannelMapping> SetChannelMapping(string providerId, string tunerChannelNumber, string providerChannelNumber);

TunerChannelMapping GetTunerChannelMapping(ChannelInfo channel, List<NameValuePair> mappings, List<ChannelInfo> providerChannels);

/// <summary>
/// Gets the lineups.
/// </summary>
Expand Down
16 changes: 16 additions & 0 deletions MediaBrowser.Controller/LiveTv/TunerChannelMapping.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MediaBrowser.Controller.LiveTv
{
public class TunerChannelMapping
{
public string Name { get; set; }
public string Number { get; set; }
public string ProviderChannelNumber { get; set; }
public string ProviderChannelName { get; set; }
}
}
1 change: 1 addition & 0 deletions MediaBrowser.Controller/MediaBrowser.Controller.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,7 @@
<Compile Include="LiveTv\SeriesTimerInfo.cs" />
<Compile Include="LiveTv\TimerEventInfo.cs" />
<Compile Include="LiveTv\TimerInfo.cs" />
<Compile Include="LiveTv\TunerChannelMapping.cs" />
<Compile Include="Localization\ILocalizationManager.cs" />
<Compile Include="MediaEncoding\ChapterImageRefreshOptions.cs" />
<Compile Include="MediaEncoding\EncodingJobOptions.cs" />
Expand Down
35 changes: 17 additions & 18 deletions MediaBrowser.Server.Implementations/Library/LibraryManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1295,6 +1295,23 @@ public IEnumerable<BaseItem> GetItemList(InternalItemsQuery query)
return ItemRepository.GetItemList(query);
}

public IEnumerable<BaseItem> GetItemList(InternalItemsQuery query, IEnumerable<string> parentIds)
{
var parents = parentIds.Select(i => GetItemById(new Guid(i))).Where(i => i != null).ToList();

SetTopParentIdsOrAncestors(query, parents);

if (query.AncestorIds.Length == 0 && query.TopParentIds.Length == 0)
{
if (query.User != null)
{
AddUserToQuery(query, query.User);
}
}

return ItemRepository.GetItemList(query);
}

public QueryResult<BaseItem> QueryItems(InternalItemsQuery query)
{
if (query.User != null)
Expand Down Expand Up @@ -1416,15 +1433,6 @@ public QueryResult<Tuple<BaseItem, ItemCounts>> GetAlbumArtists(InternalItemsQue
return ItemRepository.GetAlbumArtists(query);
}

public IEnumerable<BaseItem> GetItemList(InternalItemsQuery query, IEnumerable<string> parentIds)
{
var parents = parentIds.Select(i => GetItemById(new Guid(i))).Where(i => i != null).ToList();

SetTopParentIdsOrAncestors(query, parents);

return ItemRepository.GetItemList(query);
}

public QueryResult<BaseItem> GetItemsResult(InternalItemsQuery query)
{
if (query.Recursive && query.ParentId.HasValue)
Expand Down Expand Up @@ -1453,15 +1461,6 @@ public QueryResult<BaseItem> GetItemsResult(InternalItemsQuery query)
};
}

public QueryResult<BaseItem> GetItemsResult(InternalItemsQuery query, IEnumerable<string> parentIds)
{
var parents = parentIds.Select(i => GetItemById(new Guid(i))).Where(i => i != null).ToList();

SetTopParentIdsOrAncestors(query, parents);

return GetItemsResult(query);
}

private void SetTopParentIdsOrAncestors(InternalItemsQuery query, List<BaseItem> parents)
{
if (parents.All(i =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ public IEnumerable<Audio> GetInstantMixFromGenres(IEnumerable<string> genres, Us

Genres = genreList.ToArray()

}, new string[] { });
});

var genresDictionary = genreList.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ private Task<IEnumerable<SearchHintInfo>> GetSearchHints(SearchQuery query, User
Limit = query.Limit,
IncludeItemsByName = true

}, new string[] { });
});

// Add search hints based on item name
hints.AddRange(mediaItems.Where(IncludeInSearch).Select(item =>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using System.Threading.Tasks;
using MediaBrowser.Common.Security;

namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV
{
public class EmbyTVRegistration : IRequiresRegistration
{
private readonly ISecurityManager _securityManager;

public static EmbyTVRegistration Instance;

public EmbyTVRegistration(ISecurityManager securityManager)
{
_securityManager = securityManager;
Instance = this;
}

private bool? _isXmlTvEnabled;

public Task LoadRegistrationInfoAsync()
{
_isXmlTvEnabled = null;
return Task.FromResult(true);
}

public async Task<bool> EnableXmlTv()
{
if (!_isXmlTvEnabled.HasValue)
{
var info = await _securityManager.GetRegistrationStatus("xmltv").ConfigureAwait(false);
_isXmlTvEnabled = info.IsValid;
}
return _isXmlTvEnabled.Value;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,15 @@ private async Task<string> GetXml(string path, CancellationToken cancellationTok

public async Task<IEnumerable<ProgramInfo>> GetProgramsAsync(ListingsProviderInfo info, string channelNumber, string channelName, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken)
{
if (!await EmbyTV.EmbyTVRegistration.Instance.EnableXmlTv().ConfigureAwait(false))
{
var length = endDateUtc - startDateUtc;
if (length.TotalDays > 1)
{
endDateUtc = startDateUtc.AddDays(1);
}
}

var path = await GetXml(info.Path, cancellationToken).ConfigureAwait(false);
var reader = new XmlTvReader(path, GetLanguage(), null);

Expand Down
Loading

0 comments on commit 8591d32

Please sign in to comment.