From 9fc0db643f5eb773f28a2ed34e623e446af71395 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 9 Jan 2016 16:27:43 -0500 Subject: [PATCH 01/15] add ConnectUser property --- MediaBrowser.Model/Connect/ConnectUser.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/MediaBrowser.Model/Connect/ConnectUser.cs b/MediaBrowser.Model/Connect/ConnectUser.cs index da290da120..383261a6b7 100644 --- a/MediaBrowser.Model/Connect/ConnectUser.cs +++ b/MediaBrowser.Model/Connect/ConnectUser.cs @@ -8,5 +8,6 @@ namespace MediaBrowser.Model.Connect public string Email { get; set; } public bool IsActive { get; set; } public string ImageUrl { get; set; } + public bool IsSupporter { get; set; } } } From d815582ea844f77ff3e3c1b019de4ae8a41072e1 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 10 Jan 2016 12:36:38 -0500 Subject: [PATCH 02/15] hide restart if not specified --- MediaBrowser.Server.Mono/Native/NativeApp.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MediaBrowser.Server.Mono/Native/NativeApp.cs b/MediaBrowser.Server.Mono/Native/NativeApp.cs index 500555647f..c73a964970 100644 --- a/MediaBrowser.Server.Mono/Native/NativeApp.cs +++ b/MediaBrowser.Server.Mono/Native/NativeApp.cs @@ -28,7 +28,8 @@ namespace MediaBrowser.Server.Mono.Native { get { - return true; + // A restart script must be provided + return StartupOptions.ContainsOption("-restartpath"); } } From 3f17949f252ec5dbc3fd00223eea1da81c0a49e4 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 11 Jan 2016 11:53:54 -0500 Subject: [PATCH 03/15] update ps3 dlna profile --- MediaBrowser.Dlna/Profiles/SonyPs3Profile.cs | 2 +- MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MediaBrowser.Dlna/Profiles/SonyPs3Profile.cs b/MediaBrowser.Dlna/Profiles/SonyPs3Profile.cs index a99d7775aa..6ad2b3fca2 100644 --- a/MediaBrowser.Dlna/Profiles/SonyPs3Profile.cs +++ b/MediaBrowser.Dlna/Profiles/SonyPs3Profile.cs @@ -92,7 +92,7 @@ namespace MediaBrowser.Dlna.Profiles { Container = "ts", VideoCodec = "h264", - AudioCodec = "mp3", + AudioCodec = "ac3,aac,mp3", Type = DlnaProfileType.Video }, new TranscodingProfile diff --git a/MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml b/MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml index 5d6e720000..ce34dd5f29 100644 --- a/MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml +++ b/MediaBrowser.Dlna/Profiles/Xml/Sony PlayStation 3.xml @@ -48,7 +48,7 @@ - + From 72120e0de5430cec167ee200b1c6880a4898e33d Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 11 Jan 2016 21:38:43 -0500 Subject: [PATCH 04/15] ensure recording filename is unique --- .../LiveTv/EmbyTV/RecordingHelper.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs index 3ee808bb51..a5c869d457 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/RecordingHelper.cs @@ -73,7 +73,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV } else { - name += " " + info.StartDate.ToString("yyyy-MM-dd"); + name += " " + info.StartDate.ToString("yyyy-MM-dd") + " " + info.Id; } return name; From 06633d9fdf588b819e60ac576c294545e006c278 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 11 Jan 2016 12:16:46 -0500 Subject: [PATCH 05/15] update translations --- MediaBrowser.Server.Implementations/Localization/Core/ca.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MediaBrowser.Server.Implementations/Localization/Core/ca.json b/MediaBrowser.Server.Implementations/Localization/Core/ca.json index 33fd30c367..98039b994d 100644 --- a/MediaBrowser.Server.Implementations/Localization/Core/ca.json +++ b/MediaBrowser.Server.Implementations/Localization/Core/ca.json @@ -154,7 +154,7 @@ "HeaderDisc": "Disc", "HeaderTrack": "Track", "HeaderAudio": "\u00c0udio", - "HeaderVideo": "Video", + "HeaderVideo": "V\u00eddeo", "HeaderEmbeddedImage": "Embedded image", "HeaderResolution": "Resolution", "HeaderSubtitles": "Subtitles", From 56763c08a2be6594457e1fffea1eda791c187f9c Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 12 Jan 2016 15:12:50 -0500 Subject: [PATCH 06/15] add error handling to package retrieval --- .../Updates/InstallationManager.cs | 39 +++++++++---------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs b/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs index 0142753314..6d68b968be 100644 --- a/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs +++ b/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs @@ -194,37 +194,36 @@ namespace MediaBrowser.Common.Implementations.Updates /// Task{List{PackageInfo}}. public async Task> GetAvailablePackagesWithoutRegistrationInfo(CancellationToken cancellationToken) { - using (var stream = await GetCachedPackages(cancellationToken).ConfigureAwait(false)) + try { - var packages = _jsonSerializer.DeserializeFromStream>(stream).ToList(); - - if ((DateTime.UtcNow - _lastPackageUpdateTime) > GetCacheLength()) + using (var stream = _fileSystem.OpenRead(PackageCachePath)) { - UpdateCachedPackages(CancellationToken.None, false); - } - - return packages; - } - } + var packages = _jsonSerializer.DeserializeFromStream>(stream).ToList(); - private string PackageCachePath - { - get { return Path.Combine(_appPaths.CachePath, "serverpackages.json"); } - } + if ((DateTime.UtcNow - _lastPackageUpdateTime) > GetCacheLength()) + { + UpdateCachedPackages(CancellationToken.None, false); + } - private async Task GetCachedPackages(CancellationToken cancellationToken) - { - try - { - return _fileSystem.OpenRead(PackageCachePath); + return packages; + } } catch (Exception) { } + _lastPackageUpdateTime = DateTime.MinValue; await UpdateCachedPackages(cancellationToken, true).ConfigureAwait(false); - return _fileSystem.OpenRead(PackageCachePath); + using (var stream = _fileSystem.OpenRead(PackageCachePath)) + { + return _jsonSerializer.DeserializeFromStream>(stream).ToList(); + } + } + + private string PackageCachePath + { + get { return Path.Combine(_appPaths.CachePath, "serverpackages.json"); } } private readonly SemaphoreSlim _updateSemaphore = new SemaphoreSlim(1, 1); From b7780ec7c6f747d14f90b914c0a0bb9268c89274 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 12 Jan 2016 15:49:33 -0500 Subject: [PATCH 07/15] capture conductor --- .../Probing/ProbeResultNormalizer.cs | 10 +++++++++- MediaBrowser.Model/Entities/PersonType.cs | 4 ++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs b/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs index 6bd754865d..d91df253e5 100644 --- a/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs +++ b/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs @@ -440,7 +440,6 @@ namespace MediaBrowser.MediaEncoding.Probing } var composer = FFProbeHelpers.GetDictionaryValue(tags, "composer"); - if (!string.IsNullOrWhiteSpace(composer)) { foreach (var person in Split(composer, false)) @@ -449,6 +448,15 @@ namespace MediaBrowser.MediaEncoding.Probing } } + var conductor = FFProbeHelpers.GetDictionaryValue(tags, "conductor"); + if (!string.IsNullOrWhiteSpace(conductor)) + { + foreach (var person in Split(conductor, false)) + { + audio.People.Add(new BaseItemPerson { Name = person, Type = PersonType.Conductor }); + } + } + audio.Album = FFProbeHelpers.GetDictionaryValue(tags, "album"); var artists = FFProbeHelpers.GetDictionaryValue(tags, "artists"); diff --git a/MediaBrowser.Model/Entities/PersonType.cs b/MediaBrowser.Model/Entities/PersonType.cs index ee80b1496d..bdf8460952 100644 --- a/MediaBrowser.Model/Entities/PersonType.cs +++ b/MediaBrowser.Model/Entities/PersonType.cs @@ -30,5 +30,9 @@ namespace MediaBrowser.Model.Entities /// The producer /// public const string Producer = "Producer"; + /// + /// The conductor + /// + public const string Conductor = "Conductor"; } } From 0c2192e9033c649d72c422695366214de0a81ea3 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 14 Jan 2016 12:04:42 -0500 Subject: [PATCH 08/15] merge from dev --- MediaBrowser.WebDashboard/Api/DashboardService.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs index 53dbaf4aaa..5ad40e4c75 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardService.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs @@ -345,6 +345,9 @@ namespace MediaBrowser.WebDashboard.Api DeleteFoldersByName(bowerPath, "grunt"); DeleteFoldersByName(bowerPath, "rollups"); + _fileSystem.DeleteDirectory(Path.Combine(bowerPath, "jquery", "external"), true); + _fileSystem.DeleteDirectory(Path.Combine(bowerPath, "jquery", "src"), true); + DeleteCryptoFiles(Path.Combine(bowerPath, "cryptojslib", "components")); DeleteFoldersByName(Path.Combine(bowerPath, "jquery"), "src"); From c8f65e758906263039b0d6cda7b5cb77552b29a6 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 14 Jan 2016 12:11:29 -0500 Subject: [PATCH 09/15] update interlaced detection --- .../MediaEncoding/IMediaEncoder.cs | 3 +- .../MediaEncoding/MediaInfoRequest.cs | 1 - .../Encoder/EncodingJobFactory.cs | 2 +- .../Encoder/MediaEncoder.cs | 73 +++++++++++-------- .../Probing/ProbeResultNormalizer.cs | 3 +- .../MediaBrowser.Model.Portable.csproj | 3 + .../MediaBrowser.Model.net35.csproj | 3 + MediaBrowser.Model/Entities/MediaStream.cs | 6 ++ MediaBrowser.Model/MediaBrowser.Model.csproj | 1 + MediaBrowser.Model/Net/EndPointInfo.cs | 8 ++ .../MediaInfo/AudioImageProvider.cs | 29 ++++++-- 11 files changed, 90 insertions(+), 42 deletions(-) create mode 100644 MediaBrowser.Model/Net/EndPointInfo.cs diff --git a/MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs b/MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs index 427af6f6d7..76ef054de0 100644 --- a/MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs +++ b/MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs @@ -35,9 +35,10 @@ namespace MediaBrowser.Controller.MediaEncoding /// Extracts the audio image. /// /// The path. + /// Index of the image stream. /// The cancellation token. /// Task{Stream}. - Task ExtractAudioImage(string path, CancellationToken cancellationToken); + Task ExtractAudioImage(string path, int? imageStreamIndex, CancellationToken cancellationToken); /// /// Extracts the video image. diff --git a/MediaBrowser.Controller/MediaEncoding/MediaInfoRequest.cs b/MediaBrowser.Controller/MediaEncoding/MediaInfoRequest.cs index 24df7b8854..ca0c2fdbb4 100644 --- a/MediaBrowser.Controller/MediaEncoding/MediaInfoRequest.cs +++ b/MediaBrowser.Controller/MediaEncoding/MediaInfoRequest.cs @@ -15,7 +15,6 @@ namespace MediaBrowser.Controller.MediaEncoding public IIsoMount MountedIso { get; set; } public VideoType VideoType { get; set; } public List PlayableStreamFileNames { get; set; } - public bool ExtractKeyFrameInterval { get; set; } public MediaInfoRequest() { diff --git a/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs b/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs index afbd29578e..9cdc4a7bf1 100644 --- a/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs +++ b/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs @@ -505,7 +505,7 @@ namespace MediaBrowser.MediaEncoding.Encoder { return "libx264"; } - if (string.Equals(codec, "h265", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(codec, "h265", StringComparison.OrdinalIgnoreCase) || string.Equals(codec, "hevc", StringComparison.OrdinalIgnoreCase)) { return "libx265"; } diff --git a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs index f44d922d57..d5645ce0e7 100644 --- a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs +++ b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs @@ -258,17 +258,17 @@ namespace MediaBrowser.MediaEncoding.Encoder var mediaInfo = new ProbeResultNormalizer(_logger, FileSystem).GetMediaInfo(result, videoType, isAudio, primaryPath, protocol); - //var videoStream = mediaInfo.MediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Video); + var videoStream = mediaInfo.MediaStreams.FirstOrDefault(i => i.Type == MediaStreamType.Video); - //if (videoStream != null) - //{ - // var isInterlaced = await DetectInterlaced(mediaInfo, videoStream, inputPath, probeSizeArgument).ConfigureAwait(false); + if (videoStream != null) + { + var isInterlaced = await DetectInterlaced(mediaInfo, videoStream, inputPath, probeSizeArgument).ConfigureAwait(false); - // if (isInterlaced) - // { - // videoStream.IsInterlaced = true; - // } - //} + if (isInterlaced) + { + videoStream.IsInterlaced = true; + } + } return mediaInfo; } @@ -292,19 +292,22 @@ namespace MediaBrowser.MediaEncoding.Encoder return false; } - var formats = (video.Container ?? string.Empty).Split(',').ToList(); - - // Take a shortcut and limit this to containers that are likely to have interlaced content - if (!formats.Contains("vob", StringComparer.OrdinalIgnoreCase) && - !formats.Contains("m2ts", StringComparer.OrdinalIgnoreCase) && - !formats.Contains("ts", StringComparer.OrdinalIgnoreCase) && - !formats.Contains("mpegts", StringComparer.OrdinalIgnoreCase) && - !formats.Contains("wtv", StringComparer.OrdinalIgnoreCase)) + // If the video codec is not some form of mpeg, then take a shortcut and limit this to containers that are likely to have interlaced content + if ((videoStream.Codec ?? string.Empty).IndexOf("mpeg", StringComparison.OrdinalIgnoreCase) == -1) { - return false; + var formats = (video.Container ?? string.Empty).Split(',').ToList(); + + if (!formats.Contains("vob", StringComparer.OrdinalIgnoreCase) && + !formats.Contains("m2ts", StringComparer.OrdinalIgnoreCase) && + !formats.Contains("ts", StringComparer.OrdinalIgnoreCase) && + !formats.Contains("mpegts", StringComparer.OrdinalIgnoreCase) && + !formats.Contains("wtv", StringComparer.OrdinalIgnoreCase)) + { + return false; + } } - var args = "{0} -i {1} -map 0:v:{2} -filter:v idet -frames:v 500 -an -f null /dev/null"; + var args = "{0} -i {1} -map 0:v:{2} -an -filter:v idet -frames:v 500 -an -f null /dev/null"; var process = new Process { @@ -444,7 +447,7 @@ namespace MediaBrowser.MediaEncoding.Encoder return false; } - if (((tff + bff) / total) >= .65) + if (((tff + bff) / total) >= .4) { return true; } @@ -469,29 +472,37 @@ namespace MediaBrowser.MediaEncoding.Encoder /// protected readonly CultureInfo UsCulture = new CultureInfo("en-US"); - public Task ExtractAudioImage(string path, CancellationToken cancellationToken) + public Task ExtractAudioImage(string path, int? imageStreamIndex, CancellationToken cancellationToken) { - return ExtractImage(new[] { path }, MediaProtocol.File, true, null, null, cancellationToken); + return ExtractImage(new[] { path }, imageStreamIndex, MediaProtocol.File, true, null, null, cancellationToken); } public Task ExtractVideoImage(string[] inputFiles, MediaProtocol protocol, Video3DFormat? threedFormat, TimeSpan? offset, CancellationToken cancellationToken) { - return ExtractImage(inputFiles, protocol, false, threedFormat, offset, cancellationToken); + return ExtractImage(inputFiles, null, protocol, false, threedFormat, offset, cancellationToken); } - private async Task ExtractImage(string[] inputFiles, MediaProtocol protocol, bool isAudio, + private async Task ExtractImage(string[] inputFiles, int? imageStreamIndex, MediaProtocol protocol, bool isAudio, Video3DFormat? threedFormat, TimeSpan? offset, CancellationToken cancellationToken) { var resourcePool = isAudio ? _audioImageResourcePool : _videoImageResourcePool; var inputArgument = GetInputArgument(inputFiles, protocol); - if (!isAudio) + if (isAudio) + { + //if (imageStreamIndex.HasValue && imageStreamIndex.Value > 0) + //{ + // // It seems for audio files we need to subtract 1 (for the audio stream??) + // imageStreamIndex = imageStreamIndex.Value - 1; + //} + } + else { try { - return await ExtractImageInternal(inputArgument, protocol, threedFormat, offset, true, resourcePool, cancellationToken).ConfigureAwait(false); + return await ExtractImageInternal(inputArgument, imageStreamIndex, protocol, threedFormat, offset, true, resourcePool, cancellationToken).ConfigureAwait(false); } catch (ArgumentException) { @@ -503,10 +514,10 @@ namespace MediaBrowser.MediaEncoding.Encoder } } - return await ExtractImageInternal(inputArgument, protocol, threedFormat, offset, false, resourcePool, cancellationToken).ConfigureAwait(false); + return await ExtractImageInternal(inputArgument, imageStreamIndex, protocol, threedFormat, offset, false, resourcePool, cancellationToken).ConfigureAwait(false); } - private async Task ExtractImageInternal(string inputPath, MediaProtocol protocol, Video3DFormat? threedFormat, TimeSpan? offset, bool useIFrame, SemaphoreSlim resourcePool, CancellationToken cancellationToken) + private async Task ExtractImageInternal(string inputPath, int? imageStreamIndex, MediaProtocol protocol, Video3DFormat? threedFormat, TimeSpan? offset, bool useIFrame, SemaphoreSlim resourcePool, CancellationToken cancellationToken) { if (string.IsNullOrEmpty(inputPath)) { @@ -540,9 +551,11 @@ namespace MediaBrowser.MediaEncoding.Encoder } } + var mapArg = imageStreamIndex.HasValue ? (" -map 0:v:" + imageStreamIndex.Value.ToString(CultureInfo.InvariantCulture)) : string.Empty; + // Use ffmpeg to sample 100 (we can drop this if required using thumbnail=50 for 50 frames) frames and pick the best thumbnail. Have a fall back just in case. - var args = useIFrame ? string.Format("-i {0} -threads 1 -v quiet -vframes 1 -vf \"{2},thumbnail=30\" -f image2 \"{1}\"", inputPath, "-", vf) : - string.Format("-i {0} -threads 1 -v quiet -vframes 1 -vf \"{2}\" -f image2 \"{1}\"", inputPath, "-", vf); + var args = useIFrame ? string.Format("-i {0}{3} -threads 1 -v quiet -vframes 1 -vf \"{2},thumbnail=30\" -f image2 \"{1}\"", inputPath, "-", vf, mapArg) : + string.Format("-i {0}{3} -threads 1 -v quiet -vframes 1 -vf \"{2}\" -f image2 \"{1}\"", inputPath, "-", vf, mapArg); var probeSize = GetProbeSizeArgument(new[] { inputPath }, protocol); diff --git a/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs b/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs index d91df253e5..31f6af1810 100644 --- a/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs +++ b/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs @@ -141,6 +141,7 @@ namespace MediaBrowser.MediaEncoding.Probing if (streamInfo.tags != null) { stream.Language = GetDictionaryValue(streamInfo.tags, "language"); + stream.Comment = GetDictionaryValue(streamInfo.tags, "comment"); } if (string.Equals(streamInfo.codec_type, "audio", StringComparison.OrdinalIgnoreCase)) @@ -872,7 +873,7 @@ namespace MediaBrowser.MediaEncoding.Probing } } - private void ExtractTimestamp(Model.MediaInfo.MediaInfo video) + private void ExtractTimestamp(MediaInfo video) { if (video.VideoType == VideoType.VideoFile) { diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index 6145983e26..b8c64b6431 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -827,6 +827,9 @@ MediaInfo\VideoCodec.cs + + Net\EndPointInfo.cs + Net\HttpException.cs diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index 435c4f50b4..e74468effd 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -783,6 +783,9 @@ MediaInfo\VideoCodec.cs + + Net\EndPointInfo.cs + Net\HttpException.cs diff --git a/MediaBrowser.Model/Entities/MediaStream.cs b/MediaBrowser.Model/Entities/MediaStream.cs index d089f0aa94..7f4cc2f84d 100644 --- a/MediaBrowser.Model/Entities/MediaStream.cs +++ b/MediaBrowser.Model/Entities/MediaStream.cs @@ -30,6 +30,12 @@ namespace MediaBrowser.Model.Entities /// The language. public string Language { get; set; } + /// + /// Gets or sets the comment. + /// + /// The comment. + public string Comment { get; set; } + /// /// Gets or sets a value indicating whether this instance is interlaced. /// diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 3664175d8e..db278baa14 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -162,6 +162,7 @@ + diff --git a/MediaBrowser.Model/Net/EndPointInfo.cs b/MediaBrowser.Model/Net/EndPointInfo.cs new file mode 100644 index 0000000000..5a158e7859 --- /dev/null +++ b/MediaBrowser.Model/Net/EndPointInfo.cs @@ -0,0 +1,8 @@ +namespace MediaBrowser.Model.Net +{ + public class EndPointInfo + { + public bool IsLocal { get; set; } + public bool IsInNetwork { get; set; } + } +} diff --git a/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs b/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs index 8884412d27..c98a67bbdb 100644 --- a/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs +++ b/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Common.Extensions; +using System; +using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; @@ -43,20 +44,27 @@ namespace MediaBrowser.Providers.MediaInfo { var audio = (Audio)item; + var imageStreams = + audio.GetMediaSources(false) + .Take(1) + .SelectMany(i => i.MediaStreams) + .Where(i => i.Type == MediaStreamType.EmbeddedImage) + .ToList(); + // Can't extract if we didn't find a video stream in the file - if (!audio.GetMediaSources(false).Take(1).SelectMany(i => i.MediaStreams).Any(i => i.Type == MediaStreamType.EmbeddedImage)) + if (imageStreams.Count == 0) { return Task.FromResult(new DynamicImageResponse { HasImage = false }); } - return GetImage((Audio)item, cancellationToken); + return GetImage((Audio)item, imageStreams, cancellationToken); } - public async Task GetImage(Audio item, CancellationToken cancellationToken) + public async Task GetImage(Audio item, List imageStreams, CancellationToken cancellationToken) { var path = GetAudioImagePath(item); - if (!_fileSystem.FileExists(path)) + if (!_fileSystem.FileExists(path)) { var semaphore = GetLock(path); @@ -66,11 +74,16 @@ namespace MediaBrowser.Providers.MediaInfo try { // Check again in case it was saved while waiting for the lock - if (!_fileSystem.FileExists(path)) + if (!_fileSystem.FileExists(path)) { - _fileSystem.CreateDirectory(Path.GetDirectoryName(path)); + _fileSystem.CreateDirectory(Path.GetDirectoryName(path)); + + var imageStream = imageStreams.FirstOrDefault(i => (i.Comment ?? string.Empty).IndexOf("front", StringComparison.OrdinalIgnoreCase) != -1) ?? + imageStreams.FirstOrDefault(i => (i.Comment ?? string.Empty).IndexOf("cover", StringComparison.OrdinalIgnoreCase) != -1); + + var imageStreamIndex = imageStream == null ? (int?)null : imageStream.Index; - using (var stream = await _mediaEncoder.ExtractAudioImage(item.Path, cancellationToken).ConfigureAwait(false)) + using (var stream = await _mediaEncoder.ExtractAudioImage(item.Path, imageStreamIndex, cancellationToken).ConfigureAwait(false)) { using (var fileStream = _fileSystem.GetFileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, true)) { From 16b6b99a912533c59e8992088fe72b95bea352a8 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 14 Jan 2016 13:19:10 -0500 Subject: [PATCH 10/15] 3.0.5786 --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index b4951f12dc..a23f384f56 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.0.*")] -[assembly: AssemblyVersion("3.0.5785.0")] +[assembly: AssemblyVersion("3.0.5786.0")] From bb7b6028372ca68fe6402c75d437a24ff426a572 Mon Sep 17 00:00:00 2001 From: Luke Date: Thu, 14 Jan 2016 23:36:21 -0500 Subject: [PATCH 11/15] update mac project --- .../Emby.Server.Mac.csproj | 515 +++++++++++++++++- 1 file changed, 487 insertions(+), 28 deletions(-) diff --git a/MediaBrowser.Server.Mac/Emby.Server.Mac.csproj b/MediaBrowser.Server.Mac/Emby.Server.Mac.csproj index 6cc96490e8..f7a6a8cd61 100644 --- a/MediaBrowser.Server.Mac/Emby.Server.Mac.csproj +++ b/MediaBrowser.Server.Mac/Emby.Server.Mac.csproj @@ -1136,6 +1136,9 @@ Resources\dashboard-ui\bower_components\emby-webcomponents\requirehtml.js + + Resources\dashboard-ui\bower_components\emby-webcomponents\visibleinviewport.js + Resources\dashboard-ui\bower_components\fastclick\.bower.json @@ -1328,6 +1331,9 @@ Resources\dashboard-ui\bower_components\hls.js\src\demux\aacdemuxer.js + + Resources\dashboard-ui\bower_components\hls.js\src\demux\adts.js + Resources\dashboard-ui\bower_components\hls.js\src\demux\demuxer-inline.js @@ -1367,6 +1373,9 @@ Resources\dashboard-ui\bower_components\hls.js\src\remux\mp4-remuxer.js + + Resources\dashboard-ui\bower_components\hls.js\src\utils\attr-list.js + Resources\dashboard-ui\bower_components\hls.js\src\utils\binary-search.js @@ -2363,11 +2372,50 @@ Resources\dashboard-ui\bower_components\jquery\.bower.json - - Resources\dashboard-ui\bower_components\jquery\MIT-LICENSE.txt + + Resources\dashboard-ui\bower_components\jquery\.editorconfig + + + Resources\dashboard-ui\bower_components\jquery\.gitattributes + + + Resources\dashboard-ui\bower_components\jquery\.gitignore + + + Resources\dashboard-ui\bower_components\jquery\.jscsrc + + + Resources\dashboard-ui\bower_components\jquery\.jshintignore + + + Resources\dashboard-ui\bower_components\jquery\.jshintrc + + + Resources\dashboard-ui\bower_components\jquery\.mailmap + + + Resources\dashboard-ui\bower_components\jquery\.npmignore + + + Resources\dashboard-ui\bower_components\jquery\.travis.yml - - Resources\dashboard-ui\bower_components\jquery\bower.json + + Resources\dashboard-ui\bower_components\jquery\AUTHORS.txt + + + Resources\dashboard-ui\bower_components\jquery\CONTRIBUTING.md + + + Resources\dashboard-ui\bower_components\jquery\Gruntfile.js + + + Resources\dashboard-ui\bower_components\jquery\LICENSE.txt + + + Resources\dashboard-ui\bower_components\jquery\README.md + + + Resources\dashboard-ui\bower_components\jquery\package.json Resources\dashboard-ui\bower_components\jquery\dist\jquery.js @@ -2378,6 +2426,48 @@ Resources\dashboard-ui\bower_components\jquery\dist\jquery.min.map + + Resources\dashboard-ui\bower_components\jquery\external\npo\npo.js + + + Resources\dashboard-ui\bower_components\jquery\external\qunit\LICENSE.txt + + + Resources\dashboard-ui\bower_components\jquery\external\qunit\MIT-LICENSE.txt + + + Resources\dashboard-ui\bower_components\jquery\external\qunit\qunit.css + + + Resources\dashboard-ui\bower_components\jquery\external\qunit\qunit.js + + + Resources\dashboard-ui\bower_components\jquery\external\qunit-assert-step\MIT-LICENSE.txt + + + Resources\dashboard-ui\bower_components\jquery\external\qunit-assert-step\qunit-assert-step.js + + + Resources\dashboard-ui\bower_components\jquery\external\requirejs\require.js + + + Resources\dashboard-ui\bower_components\jquery\external\sinon\sinon-1.14.1.js + + + Resources\dashboard-ui\bower_components\jquery\external\sizzle\LICENSE.txt + + + Resources\dashboard-ui\bower_components\jquery\external\sizzle\dist\sizzle.js + + + Resources\dashboard-ui\bower_components\jquery\external\sizzle\dist\sizzle.min.js + + + Resources\dashboard-ui\bower_components\jquery\external\sizzle\dist\sizzle.min.map + + + Resources\dashboard-ui\bower_components\jquery\src\.jshintrc + Resources\dashboard-ui\bower_components\jquery\src\ajax.js @@ -2492,9 +2582,15 @@ Resources\dashboard-ui\bower_components\jquery\src\core\ready.js + + Resources\dashboard-ui\bower_components\jquery\src\core\support.js + Resources\dashboard-ui\bower_components\jquery\src\css\addGetHookIf.js + + Resources\dashboard-ui\bower_components\jquery\src\css\adjustCSS.js + Resources\dashboard-ui\bower_components\jquery\src\css\curCSS.js @@ -2504,18 +2600,15 @@ Resources\dashboard-ui\bower_components\jquery\src\css\hiddenVisibleSelectors.js + + Resources\dashboard-ui\bower_components\jquery\src\css\showHide.js + Resources\dashboard-ui\bower_components\jquery\src\css\support.js - - Resources\dashboard-ui\bower_components\jquery\src\css\swap.js - Resources\dashboard-ui\bower_components\jquery\src\data\Data.js - - Resources\dashboard-ui\bower_components\jquery\src\data\accepts.js - Resources\dashboard-ui\bower_components\jquery\src\effects\Tween.js @@ -2528,9 +2621,15 @@ Resources\dashboard-ui\bower_components\jquery\src\event\alias.js + + Resources\dashboard-ui\bower_components\jquery\src\event\focusin.js + Resources\dashboard-ui\bower_components\jquery\src\event\support.js + + Resources\dashboard-ui\bower_components\jquery\src\event\trigger.js + Resources\dashboard-ui\bower_components\jquery\src\exports\amd.js @@ -2540,23 +2639,386 @@ Resources\dashboard-ui\bower_components\jquery\src\manipulation\_evalUrl.js + + Resources\dashboard-ui\bower_components\jquery\src\manipulation\buildFragment.js + + + Resources\dashboard-ui\bower_components\jquery\src\manipulation\getAll.js + + + Resources\dashboard-ui\bower_components\jquery\src\manipulation\setGlobalEval.js + Resources\dashboard-ui\bower_components\jquery\src\manipulation\support.js + + Resources\dashboard-ui\bower_components\jquery\src\manipulation\wrapMap.js + Resources\dashboard-ui\bower_components\jquery\src\queue\delay.js - - Resources\dashboard-ui\bower_components\jquery\src\sizzle\dist\sizzle.js + + Resources\dashboard-ui\bower_components\jquery\src\traversing\findFilter.js - - Resources\dashboard-ui\bower_components\jquery\src\sizzle\dist\sizzle.min.js + + Resources\dashboard-ui\bower_components\jquery\test\.jshintrc - - Resources\dashboard-ui\bower_components\jquery\src\sizzle\dist\sizzle.min.map + + Resources\dashboard-ui\bower_components\jquery\test\delegatetest.html - - Resources\dashboard-ui\bower_components\jquery\src\traversing\findFilter.js + + Resources\dashboard-ui\bower_components\jquery\test\hovertest.html + + + Resources\dashboard-ui\bower_components\jquery\test\index.html + + + Resources\dashboard-ui\bower_components\jquery\test\jquery.js + + + Resources\dashboard-ui\bower_components\jquery\test\localfile.html + + + Resources\dashboard-ui\bower_components\jquery\test\networkerror.html + + + Resources\dashboard-ui\bower_components\jquery\test\promises_aplus_adapter.js + + + Resources\dashboard-ui\bower_components\jquery\test\readywait.html + + + Resources\dashboard-ui\bower_components\jquery\test\xhtml.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\1x1.jpg + + + Resources\dashboard-ui\bower_components\jquery\test\data\atom+xml.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\badcall.js + + + Resources\dashboard-ui\bower_components\jquery\test\data\badjson.js + + + Resources\dashboard-ui\bower_components\jquery\test\data\cleanScript.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\dashboard.xml + + + Resources\dashboard-ui\bower_components\jquery\test\data\echoData.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\echoQuery.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\errorWithJSON.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\errorWithText.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\etag.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\headers.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\if_modified_since.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\iframe.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\jquery-1.9.1.js + + + Resources\dashboard-ui\bower_components\jquery\test\data\json.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\json_obj.js + + + Resources\dashboard-ui\bower_components\jquery\test\data\jsonp.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\name.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\name.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\nocontent.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\params_html.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\readywaitasset.js + + + Resources\dashboard-ui\bower_components\jquery\test\data\readywaitloader.js + + + Resources\dashboard-ui\bower_components\jquery\test\data\script.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\statusText.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\test.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\test.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\test2.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\test3.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\testbar.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\testinit.js + + + Resources\dashboard-ui\bower_components\jquery\test\data\testrunner.js + + + Resources\dashboard-ui\bower_components\jquery\test\data\testsuite.css + + + Resources\dashboard-ui\bower_components\jquery\test\data\text.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\with_fries.xml + + + Resources\dashboard-ui\bower_components\jquery\test\data\with_fries_over_jsonp.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\ajax\content-type.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\ajax\evalScript.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\ajax\method.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\ajax\onunload.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\ajax\unreleasedXHR.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\core\aliased.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\core\cc_on.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\core\dont_return.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\core\dynamic_ready.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\core\onready.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\css\cssWidthBeforeDocReady.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\data\dataAttrs.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\dimensions\documentLarge.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\event\focusElem.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\event\focusinCrossFrame.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\event\interactiveReady.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\event\longLoadScript.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\event\onbeforeunload.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\event\promiseReady.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\event\syncReady.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\event\triggerunload.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\manipulation\iframe-denied.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\offset\absolute.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\offset\body.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\offset\fixed.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\offset\relative.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\offset\scroll.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\offset\static.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\offset\table.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\selector\html5_selector.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\selector\sizzle_cache.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\support\bodyBackground.html + + + Resources\dashboard-ui\bower_components\jquery\test\data\support\csp-clean.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\support\csp-log.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\support\csp.js + + + Resources\dashboard-ui\bower_components\jquery\test\data\support\csp.php + + + Resources\dashboard-ui\bower_components\jquery\test\data\support\getComputedSupport.js + + + Resources\dashboard-ui\bower_components\jquery\test\integration\gh-1764-fullscreen.html + + + Resources\dashboard-ui\bower_components\jquery\test\integration\gh-2343-ie-radio-click.html + + + Resources\dashboard-ui\bower_components\jquery\test\integration\data\gh-1764-fullscreen-iframe.css + + + Resources\dashboard-ui\bower_components\jquery\test\integration\data\gh-1764-fullscreen-iframe.html + + + Resources\dashboard-ui\bower_components\jquery\test\integration\data\gh-1764-fullscreen.js + + + Resources\dashboard-ui\bower_components\jquery\test\node_smoke_tests\.jshintrc + + + Resources\dashboard-ui\bower_components\jquery\test\node_smoke_tests\document_missing.js + + + Resources\dashboard-ui\bower_components\jquery\test\node_smoke_tests\document_passed.js + + + Resources\dashboard-ui\bower_components\jquery\test\node_smoke_tests\document_present_originally.js + + + Resources\dashboard-ui\bower_components\jquery\test\node_smoke_tests\iterable_with_native_symbol.js + + + Resources\dashboard-ui\bower_components\jquery\test\node_smoke_tests\iterable_with_symbol_polyfill.js + + + Resources\dashboard-ui\bower_components\jquery\test\node_smoke_tests\lib\ensure_global_not_created.js + + + Resources\dashboard-ui\bower_components\jquery\test\node_smoke_tests\lib\ensure_iterability_es6.js + + + Resources\dashboard-ui\bower_components\jquery\test\node_smoke_tests\lib\ensure_jquery.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\ajax.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\attributes.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\basic.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\callbacks.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\core.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\css.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\data.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\deferred.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\deprecated.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\dimensions.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\effects.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\event.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\exports.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\manipulation.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\offset.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\queue.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\ready.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\selector.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\serialize.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\support.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\traversing.js + + + Resources\dashboard-ui\bower_components\jquery\test\unit\wrap.js Resources\dashboard-ui\bower_components\jstree\.bower.json @@ -2726,6 +3188,9 @@ Resources\dashboard-ui\bower_components\neon-animation\.gitignore + + Resources\dashboard-ui\bower_components\neon-animation\.travis.yml + Resources\dashboard-ui\bower_components\neon-animation\CONTRIBUTING.md @@ -2819,8 +3284,8 @@ Resources\dashboard-ui\bower_components\neon-animation\demo\index.html - - Resources\dashboard-ui\bower_components\neon-animation\demo\shared.css + + Resources\dashboard-ui\bower_components\neon-animation\demo\shared-styles.html Resources\dashboard-ui\bower_components\neon-animation\demo\card\index.html @@ -2834,8 +3299,8 @@ Resources\dashboard-ui\bower_components\neon-animation\demo\declarative\index.html - - Resources\dashboard-ui\bower_components\neon-animation\demo\doc\basic.html + + Resources\dashboard-ui\bower_components\neon-animation\demo\doc\index.html Resources\dashboard-ui\bower_components\neon-animation\demo\doc\my-animatable.html @@ -2843,9 +3308,6 @@ Resources\dashboard-ui\bower_components\neon-animation\demo\doc\my-dialog.html - - Resources\dashboard-ui\bower_components\neon-animation\demo\doc\types.html - Resources\dashboard-ui\bower_components\neon-animation\demo\dropdown\animated-dropdown.html @@ -4121,9 +4583,6 @@ Resources\dashboard-ui\bower_components\web-animations-js\web-animations.min.js - - Resources\dashboard-ui\bower_components\web-animations-js\web-animations.min.js.gz - Resources\dashboard-ui\bower_components\web-animations-js\web-animations.min.js.map From f0089e9f044d691d5b003235e1cd4843c26fce4d Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 30 Dec 2015 14:51:52 -0500 Subject: [PATCH 12/15] allow realtime monitor under linux --- MediaBrowser.Server.Mono/Native/BaseMonoApp.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MediaBrowser.Server.Mono/Native/BaseMonoApp.cs b/MediaBrowser.Server.Mono/Native/BaseMonoApp.cs index ba6d7ad1fd..8f3006e116 100644 --- a/MediaBrowser.Server.Mono/Native/BaseMonoApp.cs +++ b/MediaBrowser.Server.Mono/Native/BaseMonoApp.cs @@ -119,7 +119,7 @@ namespace MediaBrowser.Server.Mono.Native { get { - return false; + return Environment.OperatingSystem == Startup.Common.OperatingSystem.Linux; } } From bd96e3bb6128ff4c30be7e6bb2d27ab34240c4f4 Mon Sep 17 00:00:00 2001 From: Sven-Hendrik Haase Date: Tue, 19 Jan 2016 03:44:27 +0100 Subject: [PATCH 13/15] Capitalize API --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6ee0855b74..ead2a2da3f 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Emby Server Emby Server is a home media server built on top of other popular open source technologies such as **Service Stack**, **jQuery**, **jQuery mobile**, and **Mono**. -It features a REST-based api with built-in documention to facilitate client development. We also have client libraries for our api to enable rapid development. +It features a REST-based API with built-in documention to facilitate client development. We also have client libraries for our API to enable rapid development. ## Emby Apps From 76bfde2675f832ad389f8d83148cddb66c214f0e Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 19 Jan 2016 14:46:59 -0500 Subject: [PATCH 14/15] fix merge conflicts --- MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs | 10 +++++----- MediaBrowser.Server.Mono/Native/BaseMonoApp.cs | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs index d5645ce0e7..ba0790bf3b 100644 --- a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs +++ b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs @@ -492,11 +492,11 @@ namespace MediaBrowser.MediaEncoding.Encoder if (isAudio) { - //if (imageStreamIndex.HasValue && imageStreamIndex.Value > 0) - //{ - // // It seems for audio files we need to subtract 1 (for the audio stream??) - // imageStreamIndex = imageStreamIndex.Value - 1; - //} + if (imageStreamIndex.HasValue && imageStreamIndex.Value > 0) + { + // It seems for audio files we need to subtract 1 (for the audio stream??) + imageStreamIndex = imageStreamIndex.Value - 1; + } } else { diff --git a/MediaBrowser.Server.Mono/Native/BaseMonoApp.cs b/MediaBrowser.Server.Mono/Native/BaseMonoApp.cs index 8f3006e116..31d4592c8e 100644 --- a/MediaBrowser.Server.Mono/Native/BaseMonoApp.cs +++ b/MediaBrowser.Server.Mono/Native/BaseMonoApp.cs @@ -119,7 +119,7 @@ namespace MediaBrowser.Server.Mono.Native { get { - return Environment.OperatingSystem == Startup.Common.OperatingSystem.Linux; + return Environment.OperatingSystem != Startup.Common.OperatingSystem.Osx; } } From e951dd20d95c81da29d4f9d8a2cb927e7639518b Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 19 Jan 2016 14:52:08 -0500 Subject: [PATCH 15/15] fix merge conflict --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index a23f384f56..1f9e07f26d 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.0.*")] -[assembly: AssemblyVersion("3.0.5786.0")] +[assembly: AssemblyVersion("3.0.5814")]