update m3u tuner
This commit is contained in:
parent
1573cc2491
commit
f4765a87cc
|
@ -353,7 +353,7 @@ namespace Emby.Server.Implementations.Library
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (item is Photo)
|
if (!(item is Video))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -599,18 +599,16 @@ namespace Emby.Server.Implementations.Library
|
||||||
// When resolving the root, we need it's grandchildren (children of user views)
|
// When resolving the root, we need it's grandchildren (children of user views)
|
||||||
var flattenFolderDepth = isPhysicalRoot ? 2 : 0;
|
var flattenFolderDepth = isPhysicalRoot ? 2 : 0;
|
||||||
|
|
||||||
var fileSystemDictionary = FileData.GetFilteredFileSystemEntries(directoryService, args.Path, _fileSystem, _logger, args, flattenFolderDepth: flattenFolderDepth, resolveShortcuts: isPhysicalRoot || args.IsVf);
|
var files = FileData.GetFilteredFileSystemEntries(directoryService, args.Path, _fileSystem, _logger, args, flattenFolderDepth: flattenFolderDepth, resolveShortcuts: isPhysicalRoot || args.IsVf);
|
||||||
|
|
||||||
// Need to remove subpaths that may have been resolved from shortcuts
|
// Need to remove subpaths that may have been resolved from shortcuts
|
||||||
// Example: if \\server\movies exists, then strip out \\server\movies\action
|
// Example: if \\server\movies exists, then strip out \\server\movies\action
|
||||||
if (isPhysicalRoot)
|
if (isPhysicalRoot)
|
||||||
{
|
{
|
||||||
var paths = NormalizeRootPathList(fileSystemDictionary.Values);
|
files = NormalizeRootPathList(files).ToArray();
|
||||||
|
|
||||||
fileSystemDictionary = paths.ToDictionary(i => i.FullName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
args.FileSystemDictionary = fileSystemDictionary;
|
args.FileSystemChildren = files;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check to see if we should resolve based on our contents
|
// Check to see if we should resolve based on our contents
|
||||||
|
@ -656,7 +654,7 @@ namespace Emby.Server.Implementations.Library
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<FileSystemMetadata> NormalizeRootPathList(IEnumerable<FileSystemMetadata> paths)
|
public List<FileSystemMetadata> NormalizeRootPathList(IEnumerable<FileSystemMetadata> paths)
|
||||||
{
|
{
|
||||||
var originalList = paths.ToList();
|
var originalList = paths.ToList();
|
||||||
|
|
||||||
|
|
|
@ -25,12 +25,14 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
|
||||||
private readonly IHttpClient _httpClient;
|
private readonly IHttpClient _httpClient;
|
||||||
private readonly IServerApplicationHost _appHost;
|
private readonly IServerApplicationHost _appHost;
|
||||||
private readonly IEnvironmentInfo _environment;
|
private readonly IEnvironmentInfo _environment;
|
||||||
|
private readonly INetworkManager _networkManager;
|
||||||
|
|
||||||
public M3UTunerHost(IServerConfigurationManager config, ILogger logger, IJsonSerializer jsonSerializer, IMediaEncoder mediaEncoder, IFileSystem fileSystem, IHttpClient httpClient, IServerApplicationHost appHost, IEnvironmentInfo environment) : base(config, logger, jsonSerializer, mediaEncoder, fileSystem)
|
public M3UTunerHost(IServerConfigurationManager config, ILogger logger, IJsonSerializer jsonSerializer, IMediaEncoder mediaEncoder, IFileSystem fileSystem, IHttpClient httpClient, IServerApplicationHost appHost, IEnvironmentInfo environment, INetworkManager networkManager) : base(config, logger, jsonSerializer, mediaEncoder, fileSystem)
|
||||||
{
|
{
|
||||||
_httpClient = httpClient;
|
_httpClient = httpClient;
|
||||||
_appHost = appHost;
|
_appHost = appHost;
|
||||||
_environment = environment;
|
_environment = environment;
|
||||||
|
_networkManager = networkManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Type
|
public override string Type
|
||||||
|
@ -38,7 +40,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
|
||||||
get { return "m3u"; }
|
get { return "m3u"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Name
|
public virtual string Name
|
||||||
{
|
{
|
||||||
get { return "M3U Tuner"; }
|
get { return "M3U Tuner"; }
|
||||||
}
|
}
|
||||||
|
@ -99,9 +101,15 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
|
||||||
}
|
}
|
||||||
|
|
||||||
var channels = await GetChannels(info, true, cancellationToken).ConfigureAwait(false);
|
var channels = await GetChannels(info, true, cancellationToken).ConfigureAwait(false);
|
||||||
var m3uchannels = channels.Cast<M3UChannel>();
|
var channel = channels.FirstOrDefault(c => string.Equals(c.Id, channelId, StringComparison.OrdinalIgnoreCase));
|
||||||
var channel = m3uchannels.FirstOrDefault(c => string.Equals(c.Id, channelId, StringComparison.OrdinalIgnoreCase));
|
|
||||||
if (channel != null)
|
if (channel != null)
|
||||||
|
{
|
||||||
|
return new List<MediaSourceInfo> { CreateMediaSourceInfo(info, channel) };
|
||||||
|
}
|
||||||
|
return new List<MediaSourceInfo>();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual MediaSourceInfo CreateMediaSourceInfo(TunerHostInfo info, ChannelInfo channel)
|
||||||
{
|
{
|
||||||
var path = channel.Path;
|
var path = channel.Path;
|
||||||
MediaProtocol protocol = MediaProtocol.File;
|
MediaProtocol protocol = MediaProtocol.File;
|
||||||
|
@ -126,9 +134,16 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
|
||||||
protocol = MediaProtocol.Rtmp;
|
protocol = MediaProtocol.Rtmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Uri uri;
|
||||||
|
var isRemote = true;
|
||||||
|
if (Uri.TryCreate(path, UriKind.Absolute, out uri))
|
||||||
|
{
|
||||||
|
isRemote = !_networkManager.IsInLocalNetwork(uri.Host);
|
||||||
|
}
|
||||||
|
|
||||||
var mediaSource = new MediaSourceInfo
|
var mediaSource = new MediaSourceInfo
|
||||||
{
|
{
|
||||||
Path = channel.Path,
|
Path = path,
|
||||||
Protocol = protocol,
|
Protocol = protocol,
|
||||||
MediaStreams = new List<MediaStream>
|
MediaStreams = new List<MediaStream>
|
||||||
{
|
{
|
||||||
|
@ -155,16 +170,14 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
|
||||||
|
|
||||||
Id = channel.Path.GetMD5().ToString("N"),
|
Id = channel.Path.GetMD5().ToString("N"),
|
||||||
IsInfiniteStream = true,
|
IsInfiniteStream = true,
|
||||||
IsRemote = true,
|
IsRemote = isRemote,
|
||||||
|
|
||||||
IgnoreDts = true
|
IgnoreDts = true
|
||||||
};
|
};
|
||||||
|
|
||||||
mediaSource.InferTotalBitrate();
|
mediaSource.InferTotalBitrate();
|
||||||
|
|
||||||
return new List<MediaSourceInfo> { mediaSource };
|
return mediaSource;
|
||||||
}
|
|
||||||
return new List<MediaSourceInfo>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Task<bool> IsAvailableInternal(TunerHostInfo tuner, string channelId, CancellationToken cancellationToken)
|
protected override Task<bool> IsAvailableInternal(TunerHostInfo tuner, string channelId, CancellationToken cancellationToken)
|
||||||
|
|
|
@ -32,7 +32,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
|
||||||
_appHost = appHost;
|
_appHost = appHost;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<M3UChannel>> Parse(string url, string channelIdPrefix, string tunerHostId, CancellationToken cancellationToken)
|
public async Task<List<ChannelInfo>> Parse(string url, string channelIdPrefix, string tunerHostId, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
// Read the file and display it line by line.
|
// Read the file and display it line by line.
|
||||||
using (var reader = new StreamReader(await GetListingsStream(url, cancellationToken).ConfigureAwait(false)))
|
using (var reader = new StreamReader(await GetListingsStream(url, cancellationToken).ConfigureAwait(false)))
|
||||||
|
@ -41,7 +41,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<M3UChannel> ParseString(string text, string channelIdPrefix, string tunerHostId)
|
public List<ChannelInfo> ParseString(string text, string channelIdPrefix, string tunerHostId)
|
||||||
{
|
{
|
||||||
// Read the file and display it line by line.
|
// Read the file and display it line by line.
|
||||||
using (var reader = new StringReader(text))
|
using (var reader = new StringReader(text))
|
||||||
|
@ -66,9 +66,9 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
|
||||||
}
|
}
|
||||||
|
|
||||||
const string ExtInfPrefix = "#EXTINF:";
|
const string ExtInfPrefix = "#EXTINF:";
|
||||||
private List<M3UChannel> GetChannels(TextReader reader, string channelIdPrefix, string tunerHostId)
|
private List<ChannelInfo> GetChannels(TextReader reader, string channelIdPrefix, string tunerHostId)
|
||||||
{
|
{
|
||||||
var channels = new List<M3UChannel>();
|
var channels = new List<ChannelInfo>();
|
||||||
string line;
|
string line;
|
||||||
string extInf = "";
|
string extInf = "";
|
||||||
|
|
||||||
|
@ -111,9 +111,9 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
|
||||||
return channels;
|
return channels;
|
||||||
}
|
}
|
||||||
|
|
||||||
private M3UChannel GetChannelnfo(string extInf, string tunerHostId, string mediaUrl)
|
private ChannelInfo GetChannelnfo(string extInf, string tunerHostId, string mediaUrl)
|
||||||
{
|
{
|
||||||
var channel = new M3UChannel();
|
var channel = new ChannelInfo();
|
||||||
channel.TunerHostId = tunerHostId;
|
channel.TunerHostId = tunerHostId;
|
||||||
|
|
||||||
extInf = extInf.Trim();
|
extInf = extInf.Trim();
|
||||||
|
@ -335,10 +335,4 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
|
||||||
return dict;
|
return dict;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public class M3UChannel : ChannelInfo
|
|
||||||
{
|
|
||||||
public string Path { get; set; }
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -308,9 +308,11 @@ namespace Emby.Server.Implementations.Updates
|
||||||
.OrderByDescending(GetPackageVersion).ToArray();
|
.OrderByDescending(GetPackageVersion).ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IEnumerable<PackageInfo> packagesList = packages;
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(packageType))
|
if (!string.IsNullOrWhiteSpace(packageType))
|
||||||
{
|
{
|
||||||
packages = packages.Where(p => string.Equals(p.type, packageType, StringComparison.OrdinalIgnoreCase)).ToArray();
|
packagesList = packagesList.Where(p => string.Equals(p.type, packageType, StringComparison.OrdinalIgnoreCase));
|
||||||
}
|
}
|
||||||
|
|
||||||
// If an app version was supplied, filter the versions for each package to only include supported versions
|
// If an app version was supplied, filter the versions for each package to only include supported versions
|
||||||
|
@ -323,7 +325,9 @@ namespace Emby.Server.Implementations.Updates
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove packages with no versions
|
// Remove packages with no versions
|
||||||
return packages.Where(p => p.versions.Any()).ToArray();
|
packagesList = packagesList.Where(p => p.versions.Any());
|
||||||
|
|
||||||
|
return packagesList.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -148,18 +148,16 @@ namespace MediaBrowser.Controller.Entities
|
||||||
// When resolving the root, we need it's grandchildren (children of user views)
|
// When resolving the root, we need it's grandchildren (children of user views)
|
||||||
var flattenFolderDepth = isPhysicalRoot ? 2 : 0;
|
var flattenFolderDepth = isPhysicalRoot ? 2 : 0;
|
||||||
|
|
||||||
var fileSystemDictionary = FileData.GetFilteredFileSystemEntries(directoryService, args.Path, FileSystem, Logger, args, flattenFolderDepth: flattenFolderDepth, resolveShortcuts: isPhysicalRoot || args.IsVf);
|
var files = FileData.GetFilteredFileSystemEntries(directoryService, args.Path, FileSystem, Logger, args, flattenFolderDepth: flattenFolderDepth, resolveShortcuts: isPhysicalRoot || args.IsVf);
|
||||||
|
|
||||||
// Need to remove subpaths that may have been resolved from shortcuts
|
// Need to remove subpaths that may have been resolved from shortcuts
|
||||||
// Example: if \\server\movies exists, then strip out \\server\movies\action
|
// Example: if \\server\movies exists, then strip out \\server\movies\action
|
||||||
if (isPhysicalRoot)
|
if (isPhysicalRoot)
|
||||||
{
|
{
|
||||||
var paths = LibraryManager.NormalizeRootPathList(fileSystemDictionary.Values);
|
files = LibraryManager.NormalizeRootPathList(files).ToArray();
|
||||||
|
|
||||||
fileSystemDictionary = paths.ToDictionary(i => i.FullName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
args.FileSystemDictionary = fileSystemDictionary;
|
args.FileSystemChildren = files;
|
||||||
}
|
}
|
||||||
|
|
||||||
_requiresRefresh = _requiresRefresh || !args.PhysicalLocations.SequenceEqual(PhysicalLocations);
|
_requiresRefresh = _requiresRefresh || !args.PhysicalLocations.SequenceEqual(PhysicalLocations);
|
||||||
|
|
|
@ -292,18 +292,16 @@ namespace MediaBrowser.Controller.Entities
|
||||||
// When resolving the root, we need it's grandchildren (children of user views)
|
// When resolving the root, we need it's grandchildren (children of user views)
|
||||||
var flattenFolderDepth = isPhysicalRoot ? 2 : 0;
|
var flattenFolderDepth = isPhysicalRoot ? 2 : 0;
|
||||||
|
|
||||||
var fileSystemDictionary = FileData.GetFilteredFileSystemEntries(directoryService, args.Path, FileSystem, Logger, args, flattenFolderDepth: flattenFolderDepth, resolveShortcuts: isPhysicalRoot || args.IsVf);
|
var files = FileData.GetFilteredFileSystemEntries(directoryService, args.Path, FileSystem, Logger, args, flattenFolderDepth: flattenFolderDepth, resolveShortcuts: isPhysicalRoot || args.IsVf);
|
||||||
|
|
||||||
// Need to remove subpaths that may have been resolved from shortcuts
|
// Need to remove subpaths that may have been resolved from shortcuts
|
||||||
// Example: if \\server\movies exists, then strip out \\server\movies\action
|
// Example: if \\server\movies exists, then strip out \\server\movies\action
|
||||||
if (isPhysicalRoot)
|
if (isPhysicalRoot)
|
||||||
{
|
{
|
||||||
var paths = LibraryManager.NormalizeRootPathList(fileSystemDictionary.Values);
|
files = LibraryManager.NormalizeRootPathList(files).ToArray();
|
||||||
|
|
||||||
fileSystemDictionary = paths.ToDictionary(i => i.FullName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
args.FileSystemDictionary = fileSystemDictionary;
|
args.FileSystemChildren = files;
|
||||||
}
|
}
|
||||||
|
|
||||||
_requiresRefresh = _requiresRefresh || !args.PhysicalLocations.SequenceEqual(PhysicalLocations);
|
_requiresRefresh = _requiresRefresh || !args.PhysicalLocations.SequenceEqual(PhysicalLocations);
|
||||||
|
|
|
@ -8,7 +8,6 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using MediaBrowser.Model.Serialization;
|
using MediaBrowser.Model.Serialization;
|
||||||
using MediaBrowser.Controller.Entities.Audio;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Entities.Movies
|
namespace MediaBrowser.Controller.Entities.Movies
|
||||||
{
|
{
|
||||||
|
@ -82,20 +81,11 @@ namespace MediaBrowser.Controller.Entities.Movies
|
||||||
|
|
||||||
protected override IEnumerable<BaseItem> GetNonCachedChildren(IDirectoryService directoryService)
|
protected override IEnumerable<BaseItem> GetNonCachedChildren(IDirectoryService directoryService)
|
||||||
{
|
{
|
||||||
if (IsLegacyBoxSet)
|
|
||||||
{
|
|
||||||
return base.GetNonCachedChildren(directoryService);
|
|
||||||
}
|
|
||||||
return new List<BaseItem>();
|
return new List<BaseItem>();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override List<BaseItem> LoadChildren()
|
protected override List<BaseItem> LoadChildren()
|
||||||
{
|
{
|
||||||
if (IsLegacyBoxSet)
|
|
||||||
{
|
|
||||||
return base.LoadChildren();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Save a trip to the database
|
// Save a trip to the database
|
||||||
return new List<BaseItem>();
|
return new List<BaseItem>();
|
||||||
}
|
}
|
||||||
|
@ -109,34 +99,6 @@ namespace MediaBrowser.Controller.Entities.Movies
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[IgnoreDataMember]
|
|
||||||
protected override bool SupportsShortcutChildren
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (IsLegacyBoxSet)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[IgnoreDataMember]
|
|
||||||
private bool IsLegacyBoxSet
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (string.IsNullOrWhiteSpace(Path))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return !FileSystem.ContainsSubPath(ConfigurationManager.ApplicationPaths.DataPath, Path);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool IsAuthorizedToDelete(User user)
|
public override bool IsAuthorizedToDelete(User user)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -3,7 +3,7 @@ using MediaBrowser.Controller.Providers;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.IO
|
namespace MediaBrowser.Controller.IO
|
||||||
|
@ -36,7 +36,7 @@ namespace MediaBrowser.Controller.IO
|
||||||
/// <param name="resolveShortcuts">if set to <c>true</c> [resolve shortcuts].</param>
|
/// <param name="resolveShortcuts">if set to <c>true</c> [resolve shortcuts].</param>
|
||||||
/// <returns>Dictionary{System.StringFileSystemInfo}.</returns>
|
/// <returns>Dictionary{System.StringFileSystemInfo}.</returns>
|
||||||
/// <exception cref="System.ArgumentNullException">path</exception>
|
/// <exception cref="System.ArgumentNullException">path</exception>
|
||||||
public static Dictionary<string, FileSystemMetadata> GetFilteredFileSystemEntries(IDirectoryService directoryService,
|
public static FileSystemMetadata[] GetFilteredFileSystemEntries(IDirectoryService directoryService,
|
||||||
string path,
|
string path,
|
||||||
IFileSystem fileSystem,
|
IFileSystem fileSystem,
|
||||||
ILogger logger,
|
ILogger logger,
|
||||||
|
@ -57,7 +57,7 @@ namespace MediaBrowser.Controller.IO
|
||||||
|
|
||||||
if (!resolveShortcuts && flattenFolderDepth == 0)
|
if (!resolveShortcuts && flattenFolderDepth == 0)
|
||||||
{
|
{
|
||||||
return GetFileSystemDictionary(entries);
|
return entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
var dict = new Dictionary<string, FileSystemMetadata>(StringComparer.OrdinalIgnoreCase);
|
var dict = new Dictionary<string, FileSystemMetadata>(StringComparer.OrdinalIgnoreCase);
|
||||||
|
@ -98,7 +98,7 @@ namespace MediaBrowser.Controller.IO
|
||||||
{
|
{
|
||||||
foreach (var child in GetFilteredFileSystemEntries(directoryService, fullName, fileSystem, logger, args, flattenFolderDepth: flattenFolderDepth - 1, resolveShortcuts: resolveShortcuts))
|
foreach (var child in GetFilteredFileSystemEntries(directoryService, fullName, fileSystem, logger, args, flattenFolderDepth: flattenFolderDepth - 1, resolveShortcuts: resolveShortcuts))
|
||||||
{
|
{
|
||||||
dict[child.Key] = child.Value;
|
dict[child.FullName] = child;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -107,7 +107,7 @@ namespace MediaBrowser.Controller.IO
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return dict;
|
return dict.Values.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -277,7 +277,7 @@ namespace MediaBrowser.Controller.Library
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="paths">The paths.</param>
|
/// <param name="paths">The paths.</param>
|
||||||
/// <returns>IEnumerable{System.String}.</returns>
|
/// <returns>IEnumerable{System.String}.</returns>
|
||||||
IEnumerable<FileSystemMetadata> NormalizeRootPathList(IEnumerable<FileSystemMetadata> paths);
|
List<FileSystemMetadata> NormalizeRootPathList(IEnumerable<FileSystemMetadata> paths);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Registers the item.
|
/// Registers the item.
|
||||||
|
|
|
@ -40,20 +40,7 @@ namespace MediaBrowser.Controller.Library
|
||||||
/// Gets the file system children.
|
/// Gets the file system children.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The file system children.</value>
|
/// <value>The file system children.</value>
|
||||||
public IEnumerable<FileSystemMetadata> FileSystemChildren
|
public FileSystemMetadata[] FileSystemChildren { get; set; }
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var dict = FileSystemDictionary;
|
|
||||||
|
|
||||||
if (dict == null)
|
|
||||||
{
|
|
||||||
return new List<FileSystemMetadata>();
|
|
||||||
}
|
|
||||||
|
|
||||||
return dict.Values;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public LibraryOptions LibraryOptions { get; set; }
|
public LibraryOptions LibraryOptions { get; set; }
|
||||||
|
|
||||||
|
@ -62,12 +49,6 @@ namespace MediaBrowser.Controller.Library
|
||||||
return LibraryOptions ?? (LibraryOptions = (Parent == null ? new LibraryOptions() : BaseItem.LibraryManager.GetLibraryOptions(Parent)));
|
return LibraryOptions ?? (LibraryOptions = (Parent == null ? new LibraryOptions() : BaseItem.LibraryManager.GetLibraryOptions(Parent)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the file system dictionary.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The file system dictionary.</value>
|
|
||||||
public Dictionary<string, FileSystemMetadata> FileSystemDictionary { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the parent.
|
/// Gets or sets the parent.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -224,13 +205,11 @@ namespace MediaBrowser.Controller.Library
|
||||||
throw new ArgumentNullException();
|
throw new ArgumentNullException();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FileSystemDictionary != null)
|
foreach (var file in FileSystemChildren)
|
||||||
{
|
{
|
||||||
FileSystemMetadata entry;
|
if (string.Equals(file.FullName, path, StringComparison.Ordinal))
|
||||||
|
|
||||||
if (FileSystemDictionary.TryGetValue(path, out entry))
|
|
||||||
{
|
{
|
||||||
return entry;
|
return file;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,8 @@ namespace MediaBrowser.Controller.LiveTv
|
||||||
/// <value>The id of the channel.</value>
|
/// <value>The id of the channel.</value>
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
|
|
||||||
|
public string Path { get; set; }
|
||||||
|
|
||||||
public string TunerChannelId { get; set; }
|
public string TunerChannelId { get; set; }
|
||||||
|
|
||||||
public string CallSign { get; set; }
|
public string CallSign { get; set; }
|
||||||
|
|
|
@ -48,6 +48,7 @@ namespace MediaBrowser.Model.LiveTv
|
||||||
public bool AllowHWTranscoding { get; set; }
|
public bool AllowHWTranscoding { get; set; }
|
||||||
public bool EnableStreamLooping { get; set; }
|
public bool EnableStreamLooping { get; set; }
|
||||||
public bool EnableNewHdhrChannelIds { get; set; }
|
public bool EnableNewHdhrChannelIds { get; set; }
|
||||||
|
public string Source { get; set; }
|
||||||
|
|
||||||
public TunerHostInfo()
|
public TunerHostInfo()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user