aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2017-04-07 15:26:59 -0400
committerGitHub <noreply@github.com>2017-04-07 15:26:59 -0400
commit7c55cd08cbfc1c4a6ba2823007432316e1efce8d (patch)
treeb045a71d84deeb89a85975d34a7a2ded2642c0d5 /Emby.Server.Implementations
parent66e901ef93942c631c3ee3b222cc75265e1b17fb (diff)
parent6f7d8bb742f3594bdca16fa5c20c55707edad158 (diff)
Merge pull request #2567 from MediaBrowser/beta
Beta
Diffstat (limited to 'Emby.Server.Implementations')
-rw-r--r--Emby.Server.Implementations/Dto/DtoService.cs9
-rw-r--r--Emby.Server.Implementations/Emby.Server.Implementations.csproj5
-rw-r--r--Emby.Server.Implementations/FileOrganization/TvFolderOrganizer.cs36
-rw-r--r--Emby.Server.Implementations/HttpServer/HttpListenerHost.cs13
-rw-r--r--Emby.Server.Implementations/Library/LibraryManager.cs60
-rw-r--r--Emby.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs2
-rw-r--r--Emby.Server.Implementations/Library/Resolvers/PhotoResolver.cs15
-rw-r--r--Emby.Server.Implementations/Library/UserManager.cs6
-rw-r--r--Emby.Server.Implementations/LiveTv/Listings/XmlTvListingsProvider.cs4
-rw-r--r--Emby.Server.Implementations/LiveTv/LiveStreamHelper.cs5
-rw-r--r--Emby.Server.Implementations/LiveTv/LiveTvManager.cs41
-rw-r--r--Emby.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs6
-rw-r--r--Emby.Server.Implementations/LiveTv/TunerHosts/BaseTunerHost.cs5
-rw-r--r--Emby.Server.Implementations/LiveTv/TunerHosts/MulticastStream.cs10
-rw-r--r--Emby.Server.Implementations/Session/SessionManager.cs4
-rw-r--r--Emby.Server.Implementations/Sorting/MetascoreComparer.cs41
-rw-r--r--Emby.Server.Implementations/packages.config2
17 files changed, 129 insertions, 135 deletions
diff --git a/Emby.Server.Implementations/Dto/DtoService.cs b/Emby.Server.Implementations/Dto/DtoService.cs
index d477008a5..e65e98f21 100644
--- a/Emby.Server.Implementations/Dto/DtoService.cs
+++ b/Emby.Server.Implementations/Dto/DtoService.cs
@@ -882,15 +882,6 @@ namespace Emby.Server.Implementations.Dto
dto.AspectRatio = hasAspectRatio.AspectRatio;
}
- if (fields.Contains(ItemFields.Metascore))
- {
- var hasMetascore = item as IHasMetascore;
- if (hasMetascore != null)
- {
- dto.Metascore = hasMetascore.Metascore;
- }
- }
-
if (fields.Contains(ItemFields.AwardSummary))
{
var hasAwards = item as IHasAwards;
diff --git a/Emby.Server.Implementations/Emby.Server.Implementations.csproj b/Emby.Server.Implementations/Emby.Server.Implementations.csproj
index 670acd37f..4b1418007 100644
--- a/Emby.Server.Implementations/Emby.Server.Implementations.csproj
+++ b/Emby.Server.Implementations/Emby.Server.Implementations.csproj
@@ -247,7 +247,6 @@
<Compile Include="Sorting\IsFolderComparer.cs" />
<Compile Include="Sorting\IsPlayedComparer.cs" />
<Compile Include="Sorting\IsUnplayedComparer.cs" />
- <Compile Include="Sorting\MetascoreComparer.cs" />
<Compile Include="Sorting\NameComparer.cs" />
<Compile Include="Sorting\OfficialRatingComparer.cs" />
<Compile Include="Sorting\PlayCountComparer.cs" />
@@ -296,8 +295,8 @@
<Project>{4f26d5d8-a7b0-42b3-ba42-7cb7d245934e}</Project>
<Name>SocketHttpListener.Portable</Name>
</ProjectReference>
- <Reference Include="Emby.XmlTv, Version=1.0.6251.29080, Culture=neutral, processorArchitecture=MSIL">
- <HintPath>..\packages\Emby.XmlTv.1.0.7\lib\portable-net45+win8\Emby.XmlTv.dll</HintPath>
+ <Reference Include="Emby.XmlTv, Version=1.0.6299.28292, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\packages\Emby.XmlTv.1.0.8\lib\portable-net45+win8\Emby.XmlTv.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="MediaBrowser.Naming, Version=1.0.6279.25941, Culture=neutral, processorArchitecture=MSIL">
diff --git a/Emby.Server.Implementations/FileOrganization/TvFolderOrganizer.cs b/Emby.Server.Implementations/FileOrganization/TvFolderOrganizer.cs
index 2850c3a61..2cbf2613e 100644
--- a/Emby.Server.Implementations/FileOrganization/TvFolderOrganizer.cs
+++ b/Emby.Server.Implementations/FileOrganization/TvFolderOrganizer.cs
@@ -53,9 +53,29 @@ namespace Emby.Server.Implementations.FileOrganization
return false;
}
+ private bool IsValidWatchLocation(string path, List<string> libraryFolderPaths)
+ {
+ if (IsPathAlreadyInMediaLibrary(path, libraryFolderPaths))
+ {
+ _logger.Info("Folder {0} is not eligible for auto-organize because it is also part of an Emby library", path);
+ return false;
+ }
+
+ return true;
+ }
+
+ private bool IsPathAlreadyInMediaLibrary(string path, List<string> libraryFolderPaths)
+ {
+ return libraryFolderPaths.Any(i => string.Equals(i, path, StringComparison.Ordinal) || _fileSystem.ContainsSubPath(i, path));
+ }
+
public async Task Organize(AutoOrganizeOptions options, CancellationToken cancellationToken, IProgress<double> progress)
{
- var watchLocations = options.TvOptions.WatchLocations.ToList();
+ var libraryFolderPaths = _libraryManager.GetVirtualFolders().SelectMany(i => i.Locations).ToList();
+
+ var watchLocations = options.TvOptions.WatchLocations
+ .Where(i => IsValidWatchLocation(i, libraryFolderPaths))
+ .ToList();
var eligibleFiles = watchLocations.SelectMany(GetFilesToOrganize)
.OrderBy(_fileSystem.GetCreationTimeUtc)
@@ -72,17 +92,24 @@ namespace Emby.Server.Implementations.FileOrganization
foreach (var file in eligibleFiles)
{
+ cancellationToken.ThrowIfCancellationRequested();
+
var organizer = new EpisodeFileOrganizer(_organizationService, _config, _fileSystem, _logger, _libraryManager,
_libraryMonitor, _providerManager);
try
{
var result = await organizer.OrganizeEpisodeFile(file.FullName, options, options.TvOptions.OverwriteExistingEpisodes, cancellationToken).ConfigureAwait(false);
+
if (result.Status == FileSortingStatus.Success && !processedFolders.Contains(file.DirectoryName, StringComparer.OrdinalIgnoreCase))
{
processedFolders.Add(file.DirectoryName);
}
}
+ catch (OperationCanceledException)
+ {
+ break;
+ }
catch (Exception ex)
{
_logger.ErrorException("Error organizing episode {0}", ex, file.FullName);
@@ -151,19 +178,18 @@ namespace Emby.Server.Implementations.FileOrganization
/// <param name="extensions">The extensions.</param>
private void DeleteLeftOverFiles(string path, IEnumerable<string> extensions)
{
- var eligibleFiles = _fileSystem.GetFiles(path, true)
- .Where(i => extensions.Contains(i.Extension, StringComparer.OrdinalIgnoreCase))
+ var eligibleFiles = _fileSystem.GetFilePaths(path, extensions.ToArray(), false, true)
.ToList();
foreach (var file in eligibleFiles)
{
try
{
- _fileSystem.DeleteFile(file.FullName);
+ _fileSystem.DeleteFile(file);
}
catch (Exception ex)
{
- _logger.ErrorException("Error deleting file {0}", ex, file.FullName);
+ _logger.ErrorException("Error deleting file {0}", ex, file);
}
}
}
diff --git a/Emby.Server.Implementations/HttpServer/HttpListenerHost.cs b/Emby.Server.Implementations/HttpServer/HttpListenerHost.cs
index 6d15cc619..ee5245a69 100644
--- a/Emby.Server.Implementations/HttpServer/HttpListenerHost.cs
+++ b/Emby.Server.Implementations/HttpServer/HttpListenerHost.cs
@@ -273,10 +273,19 @@ namespace Emby.Server.Implementations.HttpServer
return 400;
}
+ var exceptionType = ex.GetType();
+
int statusCode;
- if (!_mapExceptionToStatusCode.TryGetValue(ex.GetType(), out statusCode))
+ if (!_mapExceptionToStatusCode.TryGetValue(exceptionType, out statusCode))
{
- statusCode = 500;
+ if (string.Equals(exceptionType.Name, "DirectoryNotFoundException", StringComparison.OrdinalIgnoreCase))
+ {
+ statusCode = 404;
+ }
+ else
+ {
+ statusCode = 500;
+ }
}
return statusCode;
diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs
index 026486efc..dbb0160a5 100644
--- a/Emby.Server.Implementations/Library/LibraryManager.cs
+++ b/Emby.Server.Implementations/Library/LibraryManager.cs
@@ -448,7 +448,7 @@ namespace Emby.Server.Implementations.Library
if (parent != null)
{
- await parent.ValidateChildren(new Progress<double>(), CancellationToken.None, new MetadataRefreshOptions(_fileSystem), false) .ConfigureAwait(false);
+ await parent.ValidateChildren(new Progress<double>(), CancellationToken.None, new MetadataRefreshOptions(_fileSystem), false).ConfigureAwait(false);
}
}
else if (parent != null)
@@ -941,7 +941,7 @@ namespace Emby.Server.Implementations.Library
return CreateItemByName<MusicArtist>(MusicArtist.GetPath, name);
}
- private T CreateItemByName<T>(Func<string,string> getPathFn, string name)
+ private T CreateItemByName<T>(Func<string, string> getPathFn, string name)
where T : BaseItem, new()
{
if (typeof(T) == typeof(MusicArtist))
@@ -1255,10 +1255,9 @@ namespace Emby.Server.Implementations.Library
private string GetCollectionType(string path)
{
- return _fileSystem.GetFiles(path, false)
- .Where(i => string.Equals(i.Extension, ".collection", StringComparison.OrdinalIgnoreCase))
+ return _fileSystem.GetFilePaths(path, new[] { ".collection" }, true, false)
.Select(i => _fileSystem.GetFileNameWithoutExtension(i))
- .FirstOrDefault();
+ .FirstOrDefault(i => !string.IsNullOrWhiteSpace(i));
}
/// <summary>
@@ -2474,29 +2473,36 @@ namespace Emby.Server.Implementations.Library
return GetNamingOptions(new LibraryOptions());
}
+ private NamingOptions _namingOptions;
+ private string[] _videoFileExtensions;
public NamingOptions GetNamingOptions(LibraryOptions libraryOptions)
{
- var options = new ExtendedNamingOptions();
+ if (_namingOptions == null)
+ {
+ var options = new ExtendedNamingOptions();
- // These cause apps to have problems
- options.AudioFileExtensions.Remove(".m3u");
- options.AudioFileExtensions.Remove(".wpl");
+ // These cause apps to have problems
+ options.AudioFileExtensions.Remove(".m3u");
+ options.AudioFileExtensions.Remove(".wpl");
- if (!libraryOptions.EnableArchiveMediaFiles)
- {
- options.AudioFileExtensions.Remove(".rar");
- options.AudioFileExtensions.Remove(".zip");
- }
+ //if (!libraryOptions.EnableArchiveMediaFiles)
+ {
+ options.AudioFileExtensions.Remove(".rar");
+ options.AudioFileExtensions.Remove(".zip");
+ }
- if (!libraryOptions.EnableArchiveMediaFiles)
- {
- options.VideoFileExtensions.Remove(".rar");
- options.VideoFileExtensions.Remove(".zip");
- }
+ //if (!libraryOptions.EnableArchiveMediaFiles)
+ {
+ options.VideoFileExtensions.Remove(".rar");
+ options.VideoFileExtensions.Remove(".zip");
+ }
- options.VideoFileExtensions.Add(".tp");
+ options.VideoFileExtensions.Add(".tp");
+ _namingOptions = options;
+ _videoFileExtensions = _namingOptions.VideoFileExtensions.ToArray();
+ }
- return options;
+ return _namingOptions;
}
public ItemLookupInfo ParseName(string name)
@@ -2515,12 +2521,14 @@ namespace Emby.Server.Implementations.Library
public IEnumerable<Video> FindTrailers(BaseItem owner, List<FileSystemMetadata> fileSystemChildren, IDirectoryService directoryService)
{
+ var namingOptions = GetNamingOptions();
+
var files = owner.DetectIsInMixedFolder() ? new List<FileSystemMetadata>() : fileSystemChildren.Where(i => i.IsDirectory)
.Where(i => string.Equals(i.Name, BaseItem.TrailerFolderName, StringComparison.OrdinalIgnoreCase))
- .SelectMany(i => _fileSystem.GetFiles(i.FullName, false))
+ .SelectMany(i => _fileSystem.GetFiles(i.FullName, _videoFileExtensions, false, false))
.ToList();
- var videoListResolver = new VideoListResolver(GetNamingOptions(), new NullLogger());
+ var videoListResolver = new VideoListResolver(namingOptions, new NullLogger());
var videos = videoListResolver.Resolve(fileSystemChildren);
@@ -2561,12 +2569,14 @@ namespace Emby.Server.Implementations.Library
public IEnumerable<Video> FindExtras(BaseItem owner, List<FileSystemMetadata> fileSystemChildren, IDirectoryService directoryService)
{
+ var namingOptions = GetNamingOptions();
+
var files = fileSystemChildren.Where(i => i.IsDirectory)
.Where(i => ExtrasSubfolderNames.Contains(i.Name ?? string.Empty, StringComparer.OrdinalIgnoreCase))
- .SelectMany(i => _fileSystem.GetFiles(i.FullName, false))
+ .SelectMany(i => _fileSystem.GetFiles(i.FullName, _videoFileExtensions, false, false))
.ToList();
- var videoListResolver = new VideoListResolver(GetNamingOptions(), new NullLogger());
+ var videoListResolver = new VideoListResolver(namingOptions, new NullLogger());
var videos = videoListResolver.Resolve(fileSystemChildren);
diff --git a/Emby.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs b/Emby.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs
index 384ed8dac..9a5d6b105 100644
--- a/Emby.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs
+++ b/Emby.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs
@@ -276,7 +276,7 @@ namespace Emby.Server.Implementations.Library.Resolvers
return false;
}
- return directoryService.GetFiles(fullPath).Any(i => string.Equals(i.Extension, ".vob", StringComparison.OrdinalIgnoreCase));
+ return directoryService.GetFilePaths(fullPath).Any(i => string.Equals(Path.GetExtension(i), ".vob", StringComparison.OrdinalIgnoreCase));
}
/// <summary>
diff --git a/Emby.Server.Implementations/Library/Resolvers/PhotoResolver.cs b/Emby.Server.Implementations/Library/Resolvers/PhotoResolver.cs
index df39e57ad..0968e8ea2 100644
--- a/Emby.Server.Implementations/Library/Resolvers/PhotoResolver.cs
+++ b/Emby.Server.Implementations/Library/Resolvers/PhotoResolver.cs
@@ -5,10 +5,6 @@ using MediaBrowser.Model.Entities;
using System;
using System.IO;
using System.Linq;
-using MediaBrowser.Common.IO;
-using MediaBrowser.Model.IO;
-using MediaBrowser.Controller.Configuration;
-using MediaBrowser.Controller.IO;
using MediaBrowser.Model.Configuration;
namespace Emby.Server.Implementations.Library.Resolvers
@@ -45,7 +41,7 @@ namespace Emby.Server.Implementations.Library.Resolvers
var filename = Path.GetFileNameWithoutExtension(args.Path);
// Make sure the image doesn't belong to a video file
- if (args.DirectoryService.GetFiles(Path.GetDirectoryName(args.Path)).Any(i => IsOwnedByMedia(args.GetLibraryOptions(), i, filename)))
+ if (args.DirectoryService.GetFilePaths(Path.GetDirectoryName(args.Path)).Any(i => IsOwnedByMedia(args.GetLibraryOptions(), i, filename)))
{
return null;
}
@@ -61,11 +57,14 @@ namespace Emby.Server.Implementations.Library.Resolvers
return null;
}
- private bool IsOwnedByMedia(LibraryOptions libraryOptions, FileSystemMetadata file, string imageFilename)
+ private bool IsOwnedByMedia(LibraryOptions libraryOptions, string file, string imageFilename)
{
- if (_libraryManager.IsVideoFile(file.FullName, libraryOptions) && imageFilename.StartsWith(Path.GetFileNameWithoutExtension(file.Name), StringComparison.OrdinalIgnoreCase))
+ if (_libraryManager.IsVideoFile(file, libraryOptions))
{
- return true;
+ if (imageFilename.StartsWith(Path.GetFileNameWithoutExtension(file), StringComparison.OrdinalIgnoreCase))
+ {
+ return true;
+ }
}
return false;
diff --git a/Emby.Server.Implementations/Library/UserManager.cs b/Emby.Server.Implementations/Library/UserManager.cs
index 3b11a4767..89b7198ca 100644
--- a/Emby.Server.Implementations/Library/UserManager.cs
+++ b/Emby.Server.Implementations/Library/UserManager.cs
@@ -182,7 +182,7 @@ namespace Emby.Server.Implementations.Library
}
}
- public Task<bool> AuthenticateUser(string username, string passwordSha1, string remoteEndPoint)
+ public Task<User> AuthenticateUser(string username, string passwordSha1, string remoteEndPoint)
{
return AuthenticateUser(username, passwordSha1, null, remoteEndPoint);
}
@@ -226,7 +226,7 @@ namespace Emby.Server.Implementations.Library
return builder.ToString();
}
- public async Task<bool> AuthenticateUser(string username, string passwordSha1, string passwordMd5, string remoteEndPoint)
+ public async Task<User> AuthenticateUser(string username, string passwordSha1, string passwordMd5, string remoteEndPoint)
{
if (string.IsNullOrWhiteSpace(username))
{
@@ -307,7 +307,7 @@ namespace Emby.Server.Implementations.Library
_logger.Info("Authentication request for {0} {1}.", user.Name, success ? "has succeeded" : "has been denied");
- return success;
+ return success ? user : null;
}
private async Task UpdateInvalidLoginAttemptCount(User user, int newValue)
diff --git a/Emby.Server.Implementations/LiveTv/Listings/XmlTvListingsProvider.cs b/Emby.Server.Implementations/LiveTv/Listings/XmlTvListingsProvider.cs
index 21c4006a6..fc0a826b4 100644
--- a/Emby.Server.Implementations/LiveTv/Listings/XmlTvListingsProvider.cs
+++ b/Emby.Server.Implementations/LiveTv/Listings/XmlTvListingsProvider.cs
@@ -268,12 +268,12 @@ namespace Emby.Server.Implementations.LiveTv.Listings
var results = reader.GetChannels();
// Should this method be async?
- return results.Select(c => new ChannelInfo()
+ return results.Select(c => new ChannelInfo
{
Id = c.Id,
Name = c.DisplayName,
ImageUrl = c.Icon != null && !String.IsNullOrEmpty(c.Icon.Source) ? c.Icon.Source : null,
- Number = c.Id
+ Number = string.IsNullOrWhiteSpace(c.Number) ? c.Id : c.Number
}).ToList();
}
diff --git a/Emby.Server.Implementations/LiveTv/LiveStreamHelper.cs b/Emby.Server.Implementations/LiveTv/LiveStreamHelper.cs
index 9a8a930bd..3906df000 100644
--- a/Emby.Server.Implementations/LiveTv/LiveStreamHelper.cs
+++ b/Emby.Server.Implementations/LiveTv/LiveStreamHelper.cs
@@ -6,6 +6,7 @@ using System.Threading.Tasks;
using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Model.Dlna;
using MediaBrowser.Model.Dto;
+using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
namespace Emby.Server.Implementations.LiveTv
@@ -29,6 +30,8 @@ namespace Emby.Server.Implementations.LiveTv
var now = DateTime.UtcNow;
+ var allowVideoStreamCopy = mediaSource.MediaStreams.Any(i => i.Type == MediaStreamType.Video && i.AllowStreamCopy);
+
var info = await _mediaEncoder.GetMediaInfo(new MediaInfoRequest
{
InputPath = mediaSource.Path,
@@ -73,6 +76,8 @@ namespace Emby.Server.Implementations.LiveTv
var videoStream = mediaSource.MediaStreams.FirstOrDefault(i => i.Type == MediaBrowser.Model.Entities.MediaStreamType.Video);
if (videoStream != null)
{
+ videoStream.AllowStreamCopy = allowVideoStreamCopy;
+
if (!videoStream.BitRate.HasValue)
{
var width = videoStream.Width ?? 1920;
diff --git a/Emby.Server.Implementations/LiveTv/LiveTvManager.cs b/Emby.Server.Implementations/LiveTv/LiveTvManager.cs
index b9e73b62e..4ffea3571 100644
--- a/Emby.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/Emby.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -261,7 +261,7 @@ namespace Emby.Server.Implementations.LiveTv
return info.Item1;
}
- public Task<Tuple<MediaSourceInfo, IDirectStreamProvider, bool>> GetChannelStream(string id, string mediaSourceId, CancellationToken cancellationToken)
+ public Task<Tuple<MediaSourceInfo, IDirectStreamProvider>> GetChannelStream(string id, string mediaSourceId, CancellationToken cancellationToken)
{
return GetLiveStream(id, mediaSourceId, true, cancellationToken);
}
@@ -323,7 +323,7 @@ namespace Emby.Server.Implementations.LiveTv
return _services.FirstOrDefault(i => string.Equals(i.Name, name, StringComparison.OrdinalIgnoreCase));
}
- private async Task<Tuple<MediaSourceInfo, IDirectStreamProvider, bool>> GetLiveStream(string id, string mediaSourceId, bool isChannel, CancellationToken cancellationToken)
+ private async Task<Tuple<MediaSourceInfo, IDirectStreamProvider>> GetLiveStream(string id, string mediaSourceId, bool isChannel, CancellationToken cancellationToken)
{
if (string.Equals(id, mediaSourceId, StringComparison.OrdinalIgnoreCase))
{
@@ -334,7 +334,6 @@ namespace Emby.Server.Implementations.LiveTv
bool isVideo;
ILiveTvService service;
IDirectStreamProvider directStreamProvider = null;
- var assumeInterlaced = false;
if (isChannel)
{
@@ -383,12 +382,7 @@ namespace Emby.Server.Implementations.LiveTv
Normalize(info, service, isVideo);
- if (!(service is EmbyTV.EmbyTV))
- {
- assumeInterlaced = true;
- }
-
- return new Tuple<MediaSourceInfo, IDirectStreamProvider, bool>(info, directStreamProvider, assumeInterlaced);
+ return new Tuple<MediaSourceInfo, IDirectStreamProvider>(info, directStreamProvider);
}
private void Normalize(MediaSourceInfo mediaSource, ILiveTvService service, bool isVideo)
@@ -492,6 +486,12 @@ namespace Emby.Server.Implementations.LiveTv
{
stream.NalLengthSize = "0";
}
+
+ if (stream.Type == MediaStreamType.Video)
+ {
+ stream.IsInterlaced = true;
+ stream.AllowStreamCopy = false;
+ }
}
}
}
@@ -1015,29 +1015,28 @@ namespace Emby.Server.Implementations.LiveTv
}
}
- IEnumerable<LiveTvProgram> programs = _libraryManager.QueryItems(internalQuery).Items.Cast<LiveTvProgram>();
+ var programList = _libraryManager.QueryItems(internalQuery).Items.Cast<LiveTvProgram>().ToList();
+ var totalCount = programList.Count;
- var programList = programs.ToList();
+ IOrderedEnumerable<LiveTvProgram> orderedPrograms = programList.OrderBy(i => i.StartDate.Date);
- var factorChannelWatchCount = (query.IsAiring ?? false) || (query.IsKids ?? false) || (query.IsSports ?? false) || (query.IsMovie ?? false) || (query.IsNews ?? false) || (query.IsSeries ?? false);
+ if (query.IsAiring ?? false)
+ {
+ orderedPrograms = orderedPrograms
+ .ThenByDescending(i => GetRecommendationScore(i, user.Id, true));
+ }
- programs = programList.OrderBy(i => i.StartDate.Date)
- .ThenByDescending(i => GetRecommendationScore(i, user.Id, factorChannelWatchCount))
- .ThenBy(i => i.StartDate);
+ IEnumerable<LiveTvProgram> programs = orderedPrograms;
if (query.Limit.HasValue)
{
programs = programs.Take(query.Limit.Value);
}
- programList = programs.ToList();
-
- var returnArray = programList.ToArray();
-
var result = new QueryResult<LiveTvProgram>
{
- Items = returnArray,
- TotalRecordCount = returnArray.Length
+ Items = programs.ToArray(),
+ TotalRecordCount = totalCount
};
return result;
diff --git a/Emby.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs b/Emby.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs
index 747e0fdd3..a9c449f83 100644
--- a/Emby.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs
+++ b/Emby.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs
@@ -104,7 +104,7 @@ namespace Emby.Server.Implementations.LiveTv
openKeys.Add(item.Id.ToString("N"));
openKeys.Add(source.Id ?? string.Empty);
source.OpenToken = string.Join(StreamIdDelimeterString, openKeys.ToArray());
- }
+ }
// Dummy this up so that direct play checks can still run
if (string.IsNullOrEmpty(source.Path) && source.Protocol == MediaProtocol.Http)
@@ -142,7 +142,7 @@ namespace Emby.Server.Implementations.LiveTv
{
if (!stream.SupportsProbing || stream.MediaStreams.Any(i => i.Index != -1))
{
- await AddMediaInfo(stream, isAudio, cancellationToken).ConfigureAwait(false);
+ AddMediaInfo(stream, isAudio, cancellationToken);
}
else
{
@@ -158,7 +158,7 @@ namespace Emby.Server.Implementations.LiveTv
return new Tuple<MediaSourceInfo, IDirectStreamProvider>(stream, directStreamProvider);
}
- private async Task AddMediaInfo(MediaSourceInfo mediaSource, bool isAudio, CancellationToken cancellationToken)
+ private void AddMediaInfo(MediaSourceInfo mediaSource, bool isAudio, CancellationToken cancellationToken)
{
mediaSource.DefaultSubtitleStreamIndex = null;
diff --git a/Emby.Server.Implementations/LiveTv/TunerHosts/BaseTunerHost.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/BaseTunerHost.cs
index 74b8a7764..10b7132a1 100644
--- a/Emby.Server.Implementations/LiveTv/TunerHosts/BaseTunerHost.cs
+++ b/Emby.Server.Implementations/LiveTv/TunerHosts/BaseTunerHost.cs
@@ -227,11 +227,6 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
throw new LiveTvConflictException();
}
- protected virtual bool EnableMediaProbing
- {
- get { return false; }
- }
-
protected async Task<bool> IsAvailable(TunerHostInfo tuner, string channelId, CancellationToken cancellationToken)
{
try
diff --git a/Emby.Server.Implementations/LiveTv/TunerHosts/MulticastStream.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/MulticastStream.cs
index 281632590..abd7a00a9 100644
--- a/Emby.Server.Implementations/LiveTv/TunerHosts/MulticastStream.cs
+++ b/Emby.Server.Implementations/LiveTv/TunerHosts/MulticastStream.cs
@@ -37,11 +37,11 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
{
var allStreams = _outputStreams.ToList();
- if (allStreams.Count == 1)
- {
- await allStreams[0].Value.WriteAsync(buffer, 0, bytesRead).ConfigureAwait(false);
- }
- else
+ //if (allStreams.Count == 1)
+ //{
+ // await allStreams[0].Value.WriteAsync(buffer, 0, bytesRead).ConfigureAwait(false);
+ //}
+ //else
{
byte[] copy = new byte[bytesRead];
Buffer.BlockCopy(buffer, 0, copy, 0, bytesRead);
diff --git a/Emby.Server.Implementations/Session/SessionManager.cs b/Emby.Server.Implementations/Session/SessionManager.cs
index 8051b7848..05a240cea 100644
--- a/Emby.Server.Implementations/Session/SessionManager.cs
+++ b/Emby.Server.Implementations/Session/SessionManager.cs
@@ -1404,12 +1404,14 @@ namespace Emby.Server.Implementations.Session
{
var result = await _userManager.AuthenticateUser(request.Username, request.PasswordSha1, request.PasswordMd5, request.RemoteEndPoint).ConfigureAwait(false);
- if (!result)
+ if (result == null)
{
EventHelper.FireEventIfNotNull(AuthenticationFailed, this, new GenericEventArgs<AuthenticationRequest>(request), _logger);
throw new SecurityException("Invalid user or password entered.");
}
+
+ user = result;
}
var token = await GetAuthorizationToken(user.Id.ToString("N"), request.DeviceId, request.App, request.AppVersion, request.DeviceName).ConfigureAwait(false);
diff --git a/Emby.Server.Implementations/Sorting/MetascoreComparer.cs b/Emby.Server.Implementations/Sorting/MetascoreComparer.cs
deleted file mode 100644
index 9759e0228..000000000
--- a/Emby.Server.Implementations/Sorting/MetascoreComparer.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Sorting;
-using MediaBrowser.Model.Querying;
-
-namespace Emby.Server.Implementations.Sorting
-{
- public class MetascoreComparer : IBaseItemComparer
- {
- /// <summary>
- /// Compares the specified x.
- /// </summary>
- /// <param name="x">The x.</param>
- /// <param name="y">The y.</param>
- /// <returns>System.Int32.</returns>
- public int Compare(BaseItem x, BaseItem y)
- {
- return GetValue(x).CompareTo(GetValue(y));
- }
-
- private float GetValue(BaseItem x)
- {
- var hasMetascore = x as IHasMetascore;
-
- if (hasMetascore != null)
- {
- return hasMetascore.Metascore ?? 0;
- }
-
- return 0;
- }
-
- /// <summary>
- /// Gets the name.
- /// </summary>
- /// <value>The name.</value>
- public string Name
- {
- get { return ItemSortBy.Metascore; }
- }
- }
-}
diff --git a/Emby.Server.Implementations/packages.config b/Emby.Server.Implementations/packages.config
index ccabbc27b..ac4e885c7 100644
--- a/Emby.Server.Implementations/packages.config
+++ b/Emby.Server.Implementations/packages.config
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="Emby.XmlTv" version="1.0.7" targetFramework="portable45-net45+win8" />
+ <package id="Emby.XmlTv" version="1.0.8" targetFramework="portable45-net45+win8" />
<package id="MediaBrowser.Naming" version="1.0.5" targetFramework="portable45-net45+win8" />
<package id="SQLitePCL.pretty" version="1.1.0" targetFramework="portable45-net45+win8" />
<package id="SQLitePCLRaw.core" version="1.1.2" targetFramework="portable45-net45+win8" />