mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-04-22 18:14:42 +01:00
fix search dipping into restricted channels
This commit is contained in:
@@ -1295,6 +1295,23 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
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)
|
||||
@@ -1416,15 +1433,6 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
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)
|
||||
@@ -1453,15 +1461,6 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
};
|
||||
}
|
||||
|
||||
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 =>
|
||||
|
||||
@@ -98,7 +98,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
|
||||
Genres = genreList.ToArray()
|
||||
|
||||
}, new string[] { });
|
||||
});
|
||||
|
||||
var genresDictionary = genreList.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
|
||||
@@ -168,7 +168,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
Limit = query.Limit,
|
||||
IncludeItemsByName = true
|
||||
|
||||
}, new string[] { });
|
||||
});
|
||||
|
||||
// Add search hints based on item name
|
||||
hints.AddRange(mediaItems.Where(IncludeInSearch).Select(item =>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -103,6 +103,15 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings
|
||||
|
||||
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);
|
||||
|
||||
|
||||
@@ -1462,7 +1462,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
internalQuery.ChannelIds = new[] { query.ChannelId };
|
||||
}
|
||||
|
||||
var queryResult = _libraryManager.GetItemList(internalQuery, new string[] { });
|
||||
var queryResult = _libraryManager.GetItemList(internalQuery);
|
||||
IEnumerable<ILiveTvRecording> recordings = queryResult.Cast<ILiveTvRecording>();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(query.Id))
|
||||
@@ -1936,7 +1936,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
SortBy = new[] { "StartDate" },
|
||||
TopParentIds = new[] { GetInternalLiveTvFolder(CancellationToken.None).Result.Id.ToString("N") }
|
||||
|
||||
}, new string[] { }).ToList();
|
||||
}).ToList();
|
||||
|
||||
foreach (var tuple in tuples)
|
||||
{
|
||||
@@ -2526,6 +2526,79 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
||||
return info;
|
||||
}
|
||||
|
||||
public void DeleteListingsProvider(string id)
|
||||
{
|
||||
var config = GetConfiguration();
|
||||
|
||||
config.ListingProviders = config.ListingProviders.Where(i => !string.Equals(id, i.Id, StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
|
||||
_config.SaveConfiguration("livetv", config);
|
||||
_taskManager.CancelIfRunningAndQueue<RefreshChannelsScheduledTask>();
|
||||
}
|
||||
|
||||
public async Task<TunerChannelMapping> SetChannelMapping(string providerId, string tunerChannelNumber, string providerChannelNumber)
|
||||
{
|
||||
var config = GetConfiguration();
|
||||
|
||||
var listingsProviderInfo = config.ListingProviders.First(i => string.Equals(providerId, i.Id, StringComparison.OrdinalIgnoreCase));
|
||||
listingsProviderInfo.ChannelMappings = listingsProviderInfo.ChannelMappings.Where(i => !string.Equals(i.Name, tunerChannelNumber, StringComparison.OrdinalIgnoreCase)).ToArray();
|
||||
|
||||
if (!string.Equals(tunerChannelNumber, providerChannelNumber, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var list = listingsProviderInfo.ChannelMappings.ToList();
|
||||
list.Add(new NameValuePair
|
||||
{
|
||||
Name = tunerChannelNumber,
|
||||
Value = providerChannelNumber
|
||||
});
|
||||
listingsProviderInfo.ChannelMappings = list.ToArray();
|
||||
}
|
||||
|
||||
_config.SaveConfiguration("livetv", config);
|
||||
|
||||
var tunerChannels = await GetChannelsForListingsProvider(providerId, CancellationToken.None)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
var providerChannels = await GetChannelsFromListingsProviderData(providerId, CancellationToken.None)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
var mappings = listingsProviderInfo.ChannelMappings.ToList();
|
||||
|
||||
var tunerChannelMappings =
|
||||
tunerChannels.Select(i => GetTunerChannelMapping(i, mappings, providerChannels)).ToList();
|
||||
|
||||
_taskManager.CancelIfRunningAndQueue<RefreshChannelsScheduledTask>();
|
||||
|
||||
return tunerChannelMappings.First(i => string.Equals(i.Number, tunerChannelNumber, StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
|
||||
public 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 Task<List<NameIdPair>> GetLineups(string providerType, string providerId, string country, string location)
|
||||
{
|
||||
var config = GetConfiguration();
|
||||
|
||||
@@ -226,6 +226,7 @@
|
||||
<Compile Include="LiveTv\ChannelImageProvider.cs" />
|
||||
<Compile Include="LiveTv\EmbyTV\DirectRecorder.cs" />
|
||||
<Compile Include="LiveTv\EmbyTV\EmbyTV.cs" />
|
||||
<Compile Include="LiveTv\EmbyTV\EmbyTVRegistration.cs" />
|
||||
<Compile Include="LiveTv\EmbyTV\EncodedRecorder.cs" />
|
||||
<Compile Include="LiveTv\EmbyTV\EntryPoint.cs" />
|
||||
<Compile Include="LiveTv\EmbyTV\IRecorder.cs" />
|
||||
|
||||
@@ -95,7 +95,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||
private IDbCommand _updateInheritedRatingCommand;
|
||||
private IDbCommand _updateInheritedTagsCommand;
|
||||
|
||||
public const int LatestSchemaVersion = 96;
|
||||
public const int LatestSchemaVersion = 97;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="SqliteItemRepository"/> class.
|
||||
|
||||
Reference in New Issue
Block a user