From 999ad78a0d899c4b9a441933ff68843b0ae3e0a9 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 29 Nov 2014 14:51:30 -0500 Subject: [PATCH 01/15] rework configurations --- MediaBrowser.Api/Images/ImageService.cs | 36 ++--- .../Dlna/DlnaIconResponse.cs | 4 +- .../Drawing/IImageProcessor.cs | 2 +- .../Drawing/ImageFormat.cs | 11 -- .../Drawing/ImageProcessingOptions.cs | 2 +- .../Drawing/ImageStream.cs | 28 ++++ .../LiveTv/StreamResponseInfo.cs | 4 +- .../MediaBrowser.Controller.csproj | 4 +- .../Providers/IImageEnhancer.cs | 6 +- .../Providers/IImageSaver.cs | 4 +- .../Providers/ILocalImageProvider.cs | 4 +- MediaBrowser.Dlna/DlnaManager.cs | 2 +- .../MediaBrowser.Model.Portable.csproj | 6 +- .../MediaBrowser.Model.net35.csproj | 6 +- .../{ImageOutputFormat.cs => ImageFormat.cs} | 2 +- MediaBrowser.Model/Dto/ImageOptions.cs | 2 +- MediaBrowser.Model/MediaBrowser.Model.csproj | 2 +- .../MediaInfo/VideoImageProvider.cs | 2 +- .../Drawing/ImageExtensions.cs | 2 +- .../Drawing/ImageProcessor.cs | 85 ++++++----- .../Library/ResolverHelper.cs | 37 +++-- .../Library/Resolvers/BaseVideoResolver.cs | 50 ++++++- .../Resolvers/Movies/BoxSetResolver.cs | 6 +- .../Library/Resolvers/Movies/MovieResolver.cs | 17 ++- .../Library/Resolvers/PlaylistResolver.cs | 6 +- .../Library/Resolvers/TV/SeriesResolver.cs | 6 +- ...MediaBrowser.Server.Implementations.csproj | 1 + MediaBrowser.ServerApplication/App.config | 2 +- .../Images/XbmcImageSaver.cs | 4 +- MediaBrowser.sln | 137 +++++++++--------- SharedVersion.cs | 6 +- 31 files changed, 280 insertions(+), 206 deletions(-) delete mode 100644 MediaBrowser.Controller/Drawing/ImageFormat.cs create mode 100644 MediaBrowser.Controller/Drawing/ImageStream.cs rename MediaBrowser.Model/Drawing/{ImageOutputFormat.cs => ImageFormat.cs} (93%) rename {MediaBrowser.Controller => MediaBrowser.Server.Implementations}/Drawing/ImageExtensions.cs (99%) diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index 9d7362f63a..0e4ccf0b17 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -567,7 +567,7 @@ namespace MediaBrowser.Api.Images private async Task GetImageResult(IHasImages item, ImageRequest request, ItemImageInfo image, - ImageOutputFormat format, + ImageFormat format, List enhancers, string contentType, TimeSpan? cacheDuration, @@ -612,11 +612,11 @@ namespace MediaBrowser.Api.Images }); } - private ImageOutputFormat GetOutputFormat(ImageRequest request, ItemImageInfo image, List enhancers) + private ImageFormat GetOutputFormat(ImageRequest request, ItemImageInfo image, List enhancers) { if (!string.IsNullOrWhiteSpace(request.Format)) { - ImageOutputFormat format; + ImageFormat format; if (Enum.TryParse(request.Format, true, out format)) { return format; @@ -627,28 +627,28 @@ namespace MediaBrowser.Api.Images var clientFormats = GetClientSupportedFormats(); - if (serverFormats.Contains(ImageOutputFormat.Webp) && - clientFormats.Contains(ImageOutputFormat.Webp)) + if (serverFormats.Contains(ImageFormat.Webp) && + clientFormats.Contains(ImageFormat.Webp)) { - return ImageOutputFormat.Webp; + return ImageFormat.Webp; } if (enhancers.Count > 0) { - return ImageOutputFormat.Png; + return ImageFormat.Png; } if (string.Equals(Path.GetExtension(image.Path), ".jpg", StringComparison.OrdinalIgnoreCase) || string.Equals(Path.GetExtension(image.Path), ".jpeg", StringComparison.OrdinalIgnoreCase)) { - return ImageOutputFormat.Jpg; + return ImageFormat.Jpg; } // We can't predict if there will be transparency or not, so play it safe - return ImageOutputFormat.Png; + return ImageFormat.Png; } - private ImageOutputFormat[] GetClientSupportedFormats() + private ImageFormat[] GetClientSupportedFormats() { if ((Request.AcceptTypes ?? new string[] { }).Contains("image/webp", StringComparer.OrdinalIgnoreCase)) { @@ -657,32 +657,32 @@ namespace MediaBrowser.Api.Images // Not displaying properly on iOS if (userAgent.IndexOf("cfnetwork", StringComparison.OrdinalIgnoreCase) == -1) { - return new[] { ImageOutputFormat.Webp, ImageOutputFormat.Jpg, ImageOutputFormat.Png }; + return new[] { ImageFormat.Webp, ImageFormat.Jpg, ImageFormat.Png }; } } - return new[] { ImageOutputFormat.Jpg, ImageOutputFormat.Png }; + return new[] { ImageFormat.Jpg, ImageFormat.Png }; } - private string GetMimeType(ImageOutputFormat format, string path) + private string GetMimeType(ImageFormat format, string path) { - if (format == ImageOutputFormat.Bmp) + if (format == ImageFormat.Bmp) { return Common.Net.MimeTypes.GetMimeType("i.bmp"); } - if (format == ImageOutputFormat.Gif) + if (format == ImageFormat.Gif) { return Common.Net.MimeTypes.GetMimeType("i.gif"); } - if (format == ImageOutputFormat.Jpg) + if (format == ImageFormat.Jpg) { return Common.Net.MimeTypes.GetMimeType("i.jpg"); } - if (format == ImageOutputFormat.Png) + if (format == ImageFormat.Png) { return Common.Net.MimeTypes.GetMimeType("i.png"); } - if (format == ImageOutputFormat.Webp) + if (format == ImageFormat.Webp) { return Common.Net.MimeTypes.GetMimeType("i.webp"); } diff --git a/MediaBrowser.Controller/Dlna/DlnaIconResponse.cs b/MediaBrowser.Controller/Dlna/DlnaIconResponse.cs index 04d8e88b97..5ae92082d2 100644 --- a/MediaBrowser.Controller/Dlna/DlnaIconResponse.cs +++ b/MediaBrowser.Controller/Dlna/DlnaIconResponse.cs @@ -1,6 +1,6 @@ -using MediaBrowser.Controller.Drawing; -using System; +using System; using System.IO; +using MediaBrowser.Model.Drawing; namespace MediaBrowser.Controller.Dlna { diff --git a/MediaBrowser.Controller/Drawing/IImageProcessor.cs b/MediaBrowser.Controller/Drawing/IImageProcessor.cs index 3bd3335276..8ac7d56d29 100644 --- a/MediaBrowser.Controller/Drawing/IImageProcessor.cs +++ b/MediaBrowser.Controller/Drawing/IImageProcessor.cs @@ -94,6 +94,6 @@ namespace MediaBrowser.Controller.Drawing /// Gets the supported image output formats. /// /// ImageOutputFormat[]. - ImageOutputFormat[] GetSupportedImageOutputFormats(); + ImageFormat[] GetSupportedImageOutputFormats(); } } diff --git a/MediaBrowser.Controller/Drawing/ImageFormat.cs b/MediaBrowser.Controller/Drawing/ImageFormat.cs deleted file mode 100644 index f785625567..0000000000 --- a/MediaBrowser.Controller/Drawing/ImageFormat.cs +++ /dev/null @@ -1,11 +0,0 @@ - -namespace MediaBrowser.Controller.Drawing -{ - public enum ImageFormat - { - Jpg, - Png, - Gif, - Bmp - } -} diff --git a/MediaBrowser.Controller/Drawing/ImageProcessingOptions.cs b/MediaBrowser.Controller/Drawing/ImageProcessingOptions.cs index b99186f37f..d8f5d52c3b 100644 --- a/MediaBrowser.Controller/Drawing/ImageProcessingOptions.cs +++ b/MediaBrowser.Controller/Drawing/ImageProcessingOptions.cs @@ -29,7 +29,7 @@ namespace MediaBrowser.Controller.Drawing public List Enhancers { get; set; } - public ImageOutputFormat OutputFormat { get; set; } + public ImageFormat OutputFormat { get; set; } public bool AddPlayedIndicator { get; set; } diff --git a/MediaBrowser.Controller/Drawing/ImageStream.cs b/MediaBrowser.Controller/Drawing/ImageStream.cs new file mode 100644 index 0000000000..353abaca33 --- /dev/null +++ b/MediaBrowser.Controller/Drawing/ImageStream.cs @@ -0,0 +1,28 @@ +using MediaBrowser.Model.Drawing; +using System; +using System.IO; + +namespace MediaBrowser.Controller.Drawing +{ + public class ImageStream : IDisposable + { + /// + /// Gets or sets the stream. + /// + /// The stream. + public Stream Stream { get; set; } + /// + /// Gets or sets the format. + /// + /// The format. + public ImageFormat Format { get; set; } + + public void Dispose() + { + if (Stream != null) + { + Stream.Dispose(); + } + } + } +} diff --git a/MediaBrowser.Controller/LiveTv/StreamResponseInfo.cs b/MediaBrowser.Controller/LiveTv/StreamResponseInfo.cs index b133874d09..cb6aa22d24 100644 --- a/MediaBrowser.Controller/LiveTv/StreamResponseInfo.cs +++ b/MediaBrowser.Controller/LiveTv/StreamResponseInfo.cs @@ -1,5 +1,5 @@ -using MediaBrowser.Controller.Drawing; -using System.IO; +using System.IO; +using MediaBrowser.Model.Drawing; namespace MediaBrowser.Controller.LiveTv { diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 1c8a588f60..931bc51d13 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -55,7 +55,6 @@ - @@ -114,9 +113,9 @@ - + @@ -270,7 +269,6 @@ - diff --git a/MediaBrowser.Controller/Providers/IImageEnhancer.cs b/MediaBrowser.Controller/Providers/IImageEnhancer.cs index ae605ec0d5..56f8d02bef 100644 --- a/MediaBrowser.Controller/Providers/IImageEnhancer.cs +++ b/MediaBrowser.Controller/Providers/IImageEnhancer.cs @@ -1,7 +1,7 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Drawing; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Drawing; using MediaBrowser.Model.Entities; -using System.Drawing; using System.Threading.Tasks; namespace MediaBrowser.Controller.Providers @@ -49,6 +49,6 @@ namespace MediaBrowser.Controller.Providers /// Index of the image. /// Task{Image}. /// - Task EnhanceImageAsync(IHasImages item, Image originalImage, ImageType imageType, int imageIndex); + Task EnhanceImageAsync(IHasImages item, ImageStream originalImage, ImageType imageType, int imageIndex); } } \ No newline at end of file diff --git a/MediaBrowser.Controller/Providers/IImageSaver.cs b/MediaBrowser.Controller/Providers/IImageSaver.cs index 5516c08f6a..a983de63e7 100644 --- a/MediaBrowser.Controller/Providers/IImageSaver.cs +++ b/MediaBrowser.Controller/Providers/IImageSaver.cs @@ -1,5 +1,5 @@ -using MediaBrowser.Controller.Drawing; -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Model.Drawing; using MediaBrowser.Model.Entities; using System.Collections.Generic; diff --git a/MediaBrowser.Controller/Providers/ILocalImageProvider.cs b/MediaBrowser.Controller/Providers/ILocalImageProvider.cs index 68afb84b86..d1345d7a6e 100644 --- a/MediaBrowser.Controller/Providers/ILocalImageProvider.cs +++ b/MediaBrowser.Controller/Providers/ILocalImageProvider.cs @@ -1,5 +1,5 @@ -using MediaBrowser.Controller.Drawing; -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Model.Drawing; using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; diff --git a/MediaBrowser.Dlna/DlnaManager.cs b/MediaBrowser.Dlna/DlnaManager.cs index f4578eca7c..219196ecc2 100644 --- a/MediaBrowser.Dlna/DlnaManager.cs +++ b/MediaBrowser.Dlna/DlnaManager.cs @@ -2,12 +2,12 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; using MediaBrowser.Controller.Dlna; -using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Plugins; using MediaBrowser.Dlna.Profiles; using MediaBrowser.Dlna.Server; using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Dlna.Profiles; +using MediaBrowser.Model.Drawing; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; using System; diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index 292bad943a..1e0c5c7eab 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -404,12 +404,12 @@ Drawing\DrawingUtils.cs + + Drawing\ImageFormat.cs + Drawing\ImageOrientation.cs - - Drawing\ImageOutputFormat.cs - Drawing\ImageSize.cs diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index 96a3a21a5d..e1ad7b36a3 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -369,12 +369,12 @@ Drawing\DrawingUtils.cs + + Drawing\ImageFormat.cs + Drawing\ImageOrientation.cs - - Drawing\ImageOutputFormat.cs - Drawing\ImageSize.cs diff --git a/MediaBrowser.Model/Drawing/ImageOutputFormat.cs b/MediaBrowser.Model/Drawing/ImageFormat.cs similarity index 93% rename from MediaBrowser.Model/Drawing/ImageOutputFormat.cs rename to MediaBrowser.Model/Drawing/ImageFormat.cs index ec32f64f26..0172c9754f 100644 --- a/MediaBrowser.Model/Drawing/ImageOutputFormat.cs +++ b/MediaBrowser.Model/Drawing/ImageFormat.cs @@ -4,7 +4,7 @@ namespace MediaBrowser.Model.Drawing /// /// Enum ImageOutputFormat /// - public enum ImageOutputFormat + public enum ImageFormat { /// /// The BMP diff --git a/MediaBrowser.Model/Dto/ImageOptions.cs b/MediaBrowser.Model/Dto/ImageOptions.cs index 037be4a877..8e35c1323f 100644 --- a/MediaBrowser.Model/Dto/ImageOptions.cs +++ b/MediaBrowser.Model/Dto/ImageOptions.cs @@ -73,7 +73,7 @@ namespace MediaBrowser.Model.Dto /// Gets or sets the format. /// /// The format. - public ImageOutputFormat? Format { get; set; } + public ImageFormat? Format { get; set; } /// /// Gets or sets a value indicating whether [add played indicator]. diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index b09f694c64..df4e6949e1 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -191,7 +191,7 @@ - + diff --git a/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs b/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs index 78a294e5f0..a91a01edca 100644 --- a/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs +++ b/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs @@ -1,8 +1,8 @@ using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Drawing; using MediaBrowser.Model.Entities; using MediaBrowser.Model.IO; using MediaBrowser.Model.MediaInfo; diff --git a/MediaBrowser.Controller/Drawing/ImageExtensions.cs b/MediaBrowser.Server.Implementations/Drawing/ImageExtensions.cs similarity index 99% rename from MediaBrowser.Controller/Drawing/ImageExtensions.cs rename to MediaBrowser.Server.Implementations/Drawing/ImageExtensions.cs index 2511659c3f..d3b8bd3716 100644 --- a/MediaBrowser.Controller/Drawing/ImageExtensions.cs +++ b/MediaBrowser.Server.Implementations/Drawing/ImageExtensions.cs @@ -4,7 +4,7 @@ using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO; -namespace MediaBrowser.Controller.Drawing +namespace MediaBrowser.Server.Implementations.Drawing { /// /// Class ImageExtensions diff --git a/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs b/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs index feda361c82..29993d675e 100644 --- a/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs +++ b/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs @@ -129,13 +129,13 @@ namespace MediaBrowser.Server.Implementations.Drawing } } - public ImageOutputFormat[] GetSupportedImageOutputFormats() + public Model.Drawing.ImageFormat[] GetSupportedImageOutputFormats() { if (_webpAvailable) { - return new[] { ImageOutputFormat.Webp, ImageOutputFormat.Gif, ImageOutputFormat.Jpg, ImageOutputFormat.Png }; + return new[] { Model.Drawing.ImageFormat.Webp, Model.Drawing.ImageFormat.Gif, Model.Drawing.ImageFormat.Jpg, Model.Drawing.ImageFormat.Png }; } - return new[] { ImageOutputFormat.Gif, ImageOutputFormat.Jpg, ImageOutputFormat.Png }; + return new[] { Model.Drawing.ImageFormat.Gif, Model.Drawing.ImageFormat.Jpg, Model.Drawing.ImageFormat.Png }; } public async Task ProcessImage(ImageProcessingOptions options) @@ -227,7 +227,7 @@ namespace MediaBrowser.Server.Implementations.Drawing // Graphics.FromImage will throw an exception if the PixelFormat is Indexed, so we need to handle that here // Also, Webp only supports Format32bppArgb and Format32bppRgb - var pixelFormat = selectedOutputFormat == ImageOutputFormat.Webp + var pixelFormat = selectedOutputFormat == Model.Drawing.ImageFormat.Webp ? PixelFormat.Format32bppArgb : PixelFormat.Format32bppPArgb; @@ -263,7 +263,7 @@ namespace MediaBrowser.Server.Implementations.Drawing // Save to the cache location using (var cacheFileStream = _fileSystem.GetFileStream(cacheFilePath, FileMode.Create, FileAccess.Write, FileShare.Read, false)) { - if (selectedOutputFormat == ImageOutputFormat.Webp) + if (selectedOutputFormat == Model.Drawing.ImageFormat.Webp) { SaveToWebP(thumbnail, cacheFileStream, quality); } @@ -381,17 +381,17 @@ namespace MediaBrowser.Server.Implementations.Drawing /// The image. /// The output format. /// ImageFormat. - private System.Drawing.Imaging.ImageFormat GetOutputFormat(Image image, ImageOutputFormat outputFormat) + private System.Drawing.Imaging.ImageFormat GetOutputFormat(Image image, Model.Drawing.ImageFormat outputFormat) { switch (outputFormat) { - case ImageOutputFormat.Bmp: + case Model.Drawing.ImageFormat.Bmp: return System.Drawing.Imaging.ImageFormat.Bmp; - case ImageOutputFormat.Gif: + case Model.Drawing.ImageFormat.Gif: return System.Drawing.Imaging.ImageFormat.Gif; - case ImageOutputFormat.Jpg: + case Model.Drawing.ImageFormat.Jpg: return System.Drawing.Imaging.ImageFormat.Jpeg; - case ImageOutputFormat.Png: + case Model.Drawing.ImageFormat.Png: return System.Drawing.Imaging.ImageFormat.Png; default: return image.RawFormat; @@ -471,7 +471,7 @@ namespace MediaBrowser.Server.Implementations.Drawing /// /// Gets the cache file path based on a set of parameters /// - private string GetCacheFilePath(string originalPath, ImageSize outputSize, int quality, DateTime dateModified, ImageOutputFormat format, bool addPlayedIndicator, double percentPlayed, int? unwatchedCount, string backgroundColor) + private string GetCacheFilePath(string originalPath, ImageSize outputSize, int quality, DateTime dateModified, Model.Drawing.ImageFormat format, bool addPlayedIndicator, double percentPlayed, int? unwatchedCount, string backgroundColor) { var filename = originalPath; @@ -772,15 +772,23 @@ namespace MediaBrowser.Server.Implementations.Drawing { await fileStream.CopyToAsync(memoryStream).ConfigureAwait(false); - using (var originalImage = Image.FromStream(memoryStream, true, false)) + memoryStream.Position = 0; + + var imageStream = new ImageStream { - //Pass the image through registered enhancers - using (var newImage = await ExecuteImageEnhancers(supportedEnhancers, originalImage, item, imageType, imageIndex).ConfigureAwait(false)) + Stream = memoryStream, + Format = GetFormat(originalImagePath) + }; + + //Pass the image through registered enhancers + using (var newImageStream = await ExecuteImageEnhancers(supportedEnhancers, imageStream, item, imageType, imageIndex).ConfigureAwait(false)) + { + var parentDirectory = Path.GetDirectoryName(enhancedImagePath); + + Directory.CreateDirectory(parentDirectory); + + using (var newImage = Image.FromStream(newImageStream.Stream, true, false)) { - var parentDirectory = Path.GetDirectoryName(enhancedImagePath); - - Directory.CreateDirectory(parentDirectory); - //And then save it in the cache using (var outputStream = _fileSystem.GetFileStream(enhancedImagePath, FileMode.Create, FileAccess.Write, FileShare.Read, false)) { @@ -799,6 +807,30 @@ namespace MediaBrowser.Server.Implementations.Drawing return enhancedImagePath; } + private Model.Drawing.ImageFormat GetFormat(string path) + { + var extension = Path.GetExtension(path); + + if (string.Equals(extension, ".png", StringComparison.OrdinalIgnoreCase)) + { + return Model.Drawing.ImageFormat.Png; + } + if (string.Equals(extension, ".gif", StringComparison.OrdinalIgnoreCase)) + { + return Model.Drawing.ImageFormat.Gif; + } + if (string.Equals(extension, ".webp", StringComparison.OrdinalIgnoreCase)) + { + return Model.Drawing.ImageFormat.Webp; + } + if (string.Equals(extension, ".bmp", StringComparison.OrdinalIgnoreCase)) + { + return Model.Drawing.ImageFormat.Bmp; + } + + return Model.Drawing.ImageFormat.Jpg; + } + /// /// Executes the image enhancers. /// @@ -808,7 +840,7 @@ namespace MediaBrowser.Server.Implementations.Drawing /// Type of the image. /// Index of the image. /// Task{EnhancedImage}. - private async Task ExecuteImageEnhancers(IEnumerable imageEnhancers, Image originalImage, IHasImages item, ImageType imageType, int imageIndex) + private async Task ExecuteImageEnhancers(IEnumerable imageEnhancers, ImageStream originalImage, IHasImages item, ImageType imageType, int imageIndex) { var result = originalImage; @@ -832,21 +864,6 @@ namespace MediaBrowser.Server.Implementations.Drawing return result; } - /// - /// The _semaphoreLocks - /// - private readonly ConcurrentDictionary _locks = new ConcurrentDictionary(); - - /// - /// Gets the lock. - /// - /// The filename. - /// System.Object. - private object GetObjectLock(string filename) - { - return _locks.GetOrAdd(filename, key => new object()); - } - /// /// The _semaphoreLocks /// diff --git a/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs b/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs index b9fbd6f8c4..92c8379322 100644 --- a/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs +++ b/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs @@ -56,43 +56,40 @@ namespace MediaBrowser.Server.Implementations.Library /// Ensures the name. /// /// The item. + /// The arguments. private static void EnsureName(BaseItem item, ItemResolveArgs args) { // If the subclass didn't supply a name, add it here if (string.IsNullOrEmpty(item.Name) && !string.IsNullOrEmpty(item.Path)) { //we use our resolve args name here to get the name of the containg folder, not actual video file - item.Name = GetMbName(args.FileInfo.Name, (args.FileInfo.Attributes & FileAttributes.Directory) == FileAttributes.Directory); + item.Name = GetDisplayName(args.FileInfo.Name, (args.FileInfo.Attributes & FileAttributes.Directory) == FileAttributes.Directory); } } + /// + /// Gets the display name. + /// + /// The path. + /// if set to true [is directory]. + /// System.String. + private static string GetDisplayName(string path, bool isDirectory) + { + //first just get the file or directory name + var fn = isDirectory ? Path.GetFileName(path) : Path.GetFileNameWithoutExtension(path); + + return fn; + } + /// /// The MB name regex /// private static readonly Regex MbNameRegex = new Regex(@"(\[.*?\])", RegexOptions.Compiled); - /// - /// Strip out attribute items and return just the name we will use for items - /// - /// Assumed to be a file or directory path - /// if set to true [is directory]. - /// The cleaned name - private static string GetMbName(string path, bool isDirectory) - { - //first just get the file or directory name - var fn = isDirectory ? Path.GetFileName(path) : Path.GetFileNameWithoutExtension(path); - - //now - strip out anything inside brackets - fn = StripBrackets(fn); - - return fn; - } - - private static string StripBrackets(string inputString) + internal static string StripBrackets(string inputString) { var output = MbNameRegex.Replace(inputString, string.Empty).Trim(); return Regex.Replace(output, @"\s+", " "); } - } } diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs index f6d33079b9..35519b9321 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/BaseVideoResolver.cs @@ -1,10 +1,9 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Entities; -using MediaBrowser.Naming.Audio; using MediaBrowser.Naming.Common; -using MediaBrowser.Naming.Video; using System; +using System.IO; namespace MediaBrowser.Server.Implementations.Library.Resolvers { @@ -29,7 +28,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers /// `0. protected override T Resolve(ItemResolveArgs args) { - return ResolveVideo(args); + return ResolveVideo(args, true); } /// @@ -37,8 +36,9 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers /// /// The type of the T video type. /// The args. + /// if set to true [parse name]. /// ``0. - protected TVideoType ResolveVideo(ItemResolveArgs args) + protected TVideoType ResolveVideo(ItemResolveArgs args, bool parseName) where TVideoType : Video, new() { // If the path is a file check for a matching extensions @@ -69,10 +69,18 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers IsInMixedFolder = true, IsPlaceHolder = videoInfo.IsStub, IsShortcut = isShortcut, - Name = videoInfo.Name, ProductionYear = videoInfo.Year }; + if (parseName) + { + video.Name = videoInfo.Name; + } + else + { + video.Name = Path.GetFileNameWithoutExtension(path); + } + if (videoInfo.IsStub) { if (string.Equals(videoInfo.StubType, "dvd", StringComparison.OrdinalIgnoreCase)) @@ -89,6 +97,38 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers } } + if (videoInfo.Is3D) + { + if (string.Equals(videoInfo.Format3D, "fsbs", StringComparison.OrdinalIgnoreCase)) + { + video.Video3DFormat = Video3DFormat.FullSideBySide; + } + else if (string.Equals(videoInfo.Format3D, "ftab", StringComparison.OrdinalIgnoreCase)) + { + video.Video3DFormat = Video3DFormat.FullTopAndBottom; + } + else if (string.Equals(videoInfo.Format3D, "hsbs", StringComparison.OrdinalIgnoreCase)) + { + video.Video3DFormat = Video3DFormat.HalfSideBySide; + } + else if (string.Equals(videoInfo.Format3D, "htab", StringComparison.OrdinalIgnoreCase)) + { + video.Video3DFormat = Video3DFormat.HalfTopAndBottom; + } + else if (string.Equals(videoInfo.Format3D, "sbs", StringComparison.OrdinalIgnoreCase)) + { + video.Video3DFormat = Video3DFormat.HalfSideBySide; + } + else if (string.Equals(videoInfo.Format3D, "sbs3d", StringComparison.OrdinalIgnoreCase)) + { + video.Video3DFormat = Video3DFormat.HalfSideBySide; + } + else if (string.Equals(videoInfo.Format3D, "tab", StringComparison.OrdinalIgnoreCase)) + { + video.Video3DFormat = Video3DFormat.HalfTopAndBottom; + } + } + return video; } } diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs index 1416bd04ea..7f9b16d950 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/BoxSetResolver.cs @@ -40,7 +40,11 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies if (filename.IndexOf("[boxset]", StringComparison.OrdinalIgnoreCase) != -1 || args.ContainsFileSystemEntryByName("collection.xml")) { - return new BoxSet { Path = args.Path }; + return new BoxSet + { + Path = args.Path, + Name = ResolverHelper.StripBrackets(Path.GetFileName(args.Path)) + }; } } diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs index a2da9ff775..c928c5e656 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs @@ -8,13 +8,12 @@ using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Resolvers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; +using MediaBrowser.Naming.Common; +using MediaBrowser.Naming.Video; using System; using System.Collections.Generic; using System.IO; using System.Linq; -using MediaBrowser.Naming.Audio; -using MediaBrowser.Naming.Common; -using MediaBrowser.Naming.Video; namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies { @@ -116,14 +115,14 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies // Find movies that are mixed in the same folder if (string.Equals(collectionType, CollectionType.Trailers, StringComparison.OrdinalIgnoreCase)) { - return ResolveVideo(args); + return ResolveVideo(args, true); } Video item = null; if (string.Equals(collectionType, CollectionType.MusicVideos, StringComparison.OrdinalIgnoreCase)) { - item = ResolveVideo(args); + item = ResolveVideo(args, true); } // To find a movie file, the collection type must be movies or boxsets @@ -131,7 +130,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies if (string.Equals(collectionType, CollectionType.Movies, StringComparison.OrdinalIgnoreCase) || string.Equals(collectionType, CollectionType.BoxSets, StringComparison.OrdinalIgnoreCase)) { - item = ResolveVideo(args); + item = ResolveVideo(args, true); } if (item != null) @@ -180,8 +179,10 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies /// The file system entries. /// The directory service. /// if set to true [support multi file items]. + /// if set to true [supports multiple sources]. + /// Type of the collection. /// Movie. - private T FindMovie(string path, Folder parent, List fileSystemEntries, IDirectoryService directoryService, bool supportMultiFileItems, bool supportsMultipleSources, string collectionType) + private T FindMovie(string path, Folder parent, IEnumerable fileSystemEntries, IDirectoryService directoryService, bool supportMultiFileItems, bool supportsMultipleSources, string collectionType) where T : Video, new() { var movies = new List(); @@ -231,7 +232,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies CollectionType = collectionType }; - var item = ResolveVideo(childArgs); + var item = ResolveVideo(childArgs, true); if (item != null) { diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/PlaylistResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/PlaylistResolver.cs index 7eff53ce1f..a95739f227 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/PlaylistResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/PlaylistResolver.cs @@ -28,7 +28,11 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers if (filename.IndexOf("[playlist]", StringComparison.OrdinalIgnoreCase) != -1) { - return new Playlist { Path = args.Path }; + return new Playlist + { + Path = args.Path, + Name = ResolverHelper.StripBrackets(Path.GetFileName(args.Path)) + }; } } diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs index 30eaf3198d..52a95a3002 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs @@ -81,7 +81,11 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV if (IsSeriesFolder(args.Path, isTvShowsFolder, args.FileSystemChildren, args.DirectoryService, _fileSystem, _logger, _libraryManager)) { - return new Series(); + return new Series + { + Path = args.Path, + Name = ResolverHelper.StripBrackets(Path.GetFileName(args.Path)) + }; } } diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 3abcf83b6b..48523d68e8 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -121,6 +121,7 @@ + diff --git a/MediaBrowser.ServerApplication/App.config b/MediaBrowser.ServerApplication/App.config index 8fef47d73f..94dd9ee733 100644 --- a/MediaBrowser.ServerApplication/App.config +++ b/MediaBrowser.ServerApplication/App.config @@ -12,7 +12,7 @@ - + diff --git a/MediaBrowser.XbmcMetadata/Images/XbmcImageSaver.cs b/MediaBrowser.XbmcMetadata/Images/XbmcImageSaver.cs index 6071db6b5a..596e11c023 100644 --- a/MediaBrowser.XbmcMetadata/Images/XbmcImageSaver.cs +++ b/MediaBrowser.XbmcMetadata/Images/XbmcImageSaver.cs @@ -1,8 +1,8 @@ -using MediaBrowser.Controller.Drawing; -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Drawing; using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; diff --git a/MediaBrowser.sln b/MediaBrowser.sln index b04f445560..fab640a675 100644 --- a/MediaBrowser.sln +++ b/MediaBrowser.sln @@ -103,15 +103,15 @@ Global {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Debug|x86.Build.0 = Debug|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU + {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU + {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU + {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -140,15 +140,15 @@ Global {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Debug|x86.Build.0 = Debug|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU + {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU + {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU + {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -177,15 +177,15 @@ Global {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Debug|x86.Build.0 = Debug|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU + {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU + {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU + {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -214,15 +214,15 @@ Global {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Debug|x86.Build.0 = Debug|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU + {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU + {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU + {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -251,15 +251,15 @@ Global {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Debug|x86.Build.0 = Debug|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU + {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU + {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU + {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -287,15 +287,15 @@ Global {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Debug|x86.ActiveCfg = Debug|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU + {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU + {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU + {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -322,15 +322,15 @@ Global {2E781478-814D-4A48-9D80-BFF206441A65}.Debug|x86.ActiveCfg = Debug|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU + {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU + {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU + {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -427,15 +427,15 @@ Global {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Debug|x86.ActiveCfg = Debug|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU + {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU + {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU + {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -483,23 +483,22 @@ Global {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release|x86.ActiveCfg = Release|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|x86 - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|x86 + {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU + {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Win32.ActiveCfg = Debug|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Win32.Build.0 = Debug|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|x86.ActiveCfg = Debug|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|x86.Build.0 = Debug|x86 - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|Any CPU.ActiveCfg = Debug|x86 - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|Any CPU.Build.0 = Debug|x86 + {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|Any CPU.Build.0 = Debug|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|Win32.ActiveCfg = Debug|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|x64.ActiveCfg = Debug|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|x86.ActiveCfg = Debug|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release Mono|Mixed Platforms.ActiveCfg = Release|x86 - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release Mono|Mixed Platforms.Build.0 = Release|x86 + {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release Mono|Win32.ActiveCfg = Release|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release Mono|Win32.Build.0 = Release|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release Mono|x64.ActiveCfg = Release|Any CPU @@ -507,17 +506,17 @@ Global {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release Mono|x86.Build.0 = Release|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|x86 - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|x86 + {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU + {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Win32.ActiveCfg = Release|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Win32.Build.0 = Release|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|x64.ActiveCfg = Release|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|x86.ActiveCfg = Release|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|x86.Build.0 = Release|x86 - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Any CPU.ActiveCfg = Release|x86 - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Any CPU.Build.0 = Release|x86 - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Any CPU.Build.0 = Release|Any CPU + {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Mixed Platforms.Build.0 = Release|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Win32.ActiveCfg = Release|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|x64.ActiveCfg = Release|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|x86.ActiveCfg = Release|Any CPU @@ -537,15 +536,15 @@ Global {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Debug|x86.ActiveCfg = Debug|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU + {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU + {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU + {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -572,15 +571,15 @@ Global {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Debug|x86.ActiveCfg = Debug|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU + {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU + {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU + {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -607,15 +606,15 @@ Global {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Debug|x86.ActiveCfg = Debug|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU + {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU + {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU + {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -733,17 +732,17 @@ Global {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Release|x86.ActiveCfg = Release|Any CPU {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|x86 - {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|x86 + {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU + {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Win32.ActiveCfg = Debug|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Win32.Build.0 = Debug|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|x86.ActiveCfg = Debug|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|x86.Build.0 = Debug|x86 - {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Any CPU.ActiveCfg = Debug|x86 - {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Any CPU.Build.0 = Debug|x86 - {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Any CPU.Build.0 = Debug|Any CPU + {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Win32.ActiveCfg = Debug|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Win32.Build.0 = Debug|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -751,8 +750,8 @@ Global {175A9388-F352-4586-A6B4-070DED62B644}.Debug|x86.Build.0 = Debug|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|Any CPU.ActiveCfg = Release Mono|Any CPU {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|Any CPU.Build.0 = Release Mono|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|x86 - {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|Mixed Platforms.Build.0 = Release Mono|x86 + {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|Win32.ActiveCfg = Release Mono|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|Win32.Build.0 = Release Mono|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU @@ -760,16 +759,15 @@ Global {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|x86.Build.0 = Release Mono|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|x86 - {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|x86 + {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Win32.Build.0 = Release Mono|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|x86.ActiveCfg = Release Mono|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|x86.Build.0 = Release Mono|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release|Any CPU.ActiveCfg = Release|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {175A9388-F352-4586-A6B4-070DED62B644}.Release|Mixed Platforms.Build.0 = Release|x86 + {175A9388-F352-4586-A6B4-070DED62B644}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {175A9388-F352-4586-A6B4-070DED62B644}.Release|Win32.ActiveCfg = Release|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release|Win32.Build.0 = Release|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release|x64.ActiveCfg = Release|Any CPU @@ -814,7 +812,4 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(Performance) = preSolution - HasPerformanceSessions = true - EndGlobalSection EndGlobal diff --git a/SharedVersion.cs b/SharedVersion.cs index dabe2420fb..1755e2bb33 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,8 +1,4 @@ using System.Reflection; -#if (DEBUG) [assembly: AssemblyVersion("3.0.*")] -#else -//[assembly: AssemblyVersion("3.0.*")] -[assembly: AssemblyVersion("3.0.5445.5")] -#endif +//[assembly: AssemblyVersion("3.0.5445.5")] From 1a3cd2a1c4e06372fb65dabefea8344c7ec5c318 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 29 Nov 2014 15:22:35 -0500 Subject: [PATCH 02/15] add single art limit setting to dlna profile --- .../Localization/Server/server.json | 4 +- MediaBrowser.sln | 126 +++++++++--------- 2 files changed, 67 insertions(+), 63 deletions(-) diff --git a/MediaBrowser.Server.Implementations/Localization/Server/server.json b/MediaBrowser.Server.Implementations/Localization/Server/server.json index 117a5c4079..e328ca2c67 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/server.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/server.json @@ -1291,5 +1291,7 @@ "HeaderYears": "Years", "HeaderAddTag": "Add Tag", "LabelBlockItemsWithTags": "Block items with tags:", - "LabelTag": "Tag:" + "LabelTag": "Tag:", + "LabelEnableSingleImageInDidlLimit": "Limit to single embedded image", + "LabelEnableSingleImageInDidlLimitHelp": "Some devices will not render properly if multiple images are embedded within Didl." } diff --git a/MediaBrowser.sln b/MediaBrowser.sln index fab640a675..9dadcc4544 100644 --- a/MediaBrowser.sln +++ b/MediaBrowser.sln @@ -103,15 +103,15 @@ Global {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Debug|x86.Build.0 = Debug|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU + {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU + {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -140,15 +140,15 @@ Global {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Debug|x86.Build.0 = Debug|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU + {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU + {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -177,15 +177,15 @@ Global {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Debug|x86.Build.0 = Debug|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU + {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU + {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -214,15 +214,15 @@ Global {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Debug|x86.Build.0 = Debug|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU + {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU + {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -251,15 +251,15 @@ Global {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Debug|x86.Build.0 = Debug|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU + {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU + {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -287,15 +287,15 @@ Global {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Debug|x86.ActiveCfg = Debug|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU + {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU + {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -322,15 +322,15 @@ Global {2E781478-814D-4A48-9D80-BFF206441A65}.Debug|x86.ActiveCfg = Debug|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU + {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU + {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -427,15 +427,15 @@ Global {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Debug|x86.ActiveCfg = Debug|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU + {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU + {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -483,8 +483,8 @@ Global {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release|x86.ActiveCfg = Release|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU + {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|x86 + {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Win32.ActiveCfg = Debug|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Win32.Build.0 = Debug|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU @@ -498,7 +498,8 @@ Global {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|x64.ActiveCfg = Debug|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|x86.ActiveCfg = Debug|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release Mono|Mixed Platforms.ActiveCfg = Release|x86 + {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release Mono|Mixed Platforms.Build.0 = Release|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release Mono|Win32.ActiveCfg = Release|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release Mono|Win32.Build.0 = Release|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release Mono|x64.ActiveCfg = Release|Any CPU @@ -506,8 +507,8 @@ Global {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release Mono|x86.Build.0 = Release|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU + {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|x86 + {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Win32.ActiveCfg = Release|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Win32.Build.0 = Release|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|x64.ActiveCfg = Release|Any CPU @@ -515,8 +516,8 @@ Global {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|x86.Build.0 = Release|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Any CPU.ActiveCfg = Release|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Any CPU.Build.0 = Release|Any CPU - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Mixed Platforms.Build.0 = Release|x86 + {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Mixed Platforms.Build.0 = Release|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Win32.ActiveCfg = Release|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|x64.ActiveCfg = Release|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|x86.ActiveCfg = Release|Any CPU @@ -536,15 +537,15 @@ Global {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Debug|x86.ActiveCfg = Debug|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU + {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU + {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -571,15 +572,15 @@ Global {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Debug|x86.ActiveCfg = Debug|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU + {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU + {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -606,15 +607,15 @@ Global {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Debug|x86.ActiveCfg = Debug|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|Any CPU.ActiveCfg = Release|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|Any CPU.Build.0 = Release|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|Mixed Platforms.ActiveCfg = Release|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|Mixed Platforms.Build.0 = Release|Any CPU + {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU + {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU + {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU @@ -732,17 +733,17 @@ Global {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Release|x86.ActiveCfg = Release|Any CPU {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU + {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|x86 + {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Win32.ActiveCfg = Debug|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Win32.Build.0 = Debug|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|x86.ActiveCfg = Debug|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|x86.Build.0 = Debug|x86 - {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Any CPU.Build.0 = Debug|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Any CPU.ActiveCfg = Debug|x86 + {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Any CPU.Build.0 = Debug|x86 + {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Mixed Platforms.Build.0 = Debug|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Win32.ActiveCfg = Debug|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Win32.Build.0 = Debug|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -750,8 +751,8 @@ Global {175A9388-F352-4586-A6B4-070DED62B644}.Debug|x86.Build.0 = Debug|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|Any CPU.ActiveCfg = Release Mono|Any CPU {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|Any CPU.Build.0 = Release Mono|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|Mixed Platforms.Build.0 = Release Mono|Any CPU + {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|Mixed Platforms.ActiveCfg = Release Mono|x86 + {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|Mixed Platforms.Build.0 = Release Mono|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|Win32.ActiveCfg = Release Mono|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|Win32.Build.0 = Release Mono|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU @@ -759,15 +760,16 @@ Global {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|x86.Build.0 = Release Mono|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU + {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|x86 + {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Win32.Build.0 = Release Mono|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|x86.ActiveCfg = Release Mono|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|x86.Build.0 = Release Mono|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release|Any CPU.ActiveCfg = Release|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {175A9388-F352-4586-A6B4-070DED62B644}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {175A9388-F352-4586-A6B4-070DED62B644}.Release|Mixed Platforms.Build.0 = Release|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release|Win32.ActiveCfg = Release|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release|Win32.Build.0 = Release|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release|x64.ActiveCfg = Release|Any CPU From f9ba260a19e12aff6562733023566943afb8cdd5 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 29 Nov 2014 17:19:02 -0500 Subject: [PATCH 03/15] remove old release configurations --- .../ContentDirectory/ControlHandler.cs | 38 ++- MediaBrowser.Server.Mac/readme.txt | 13 + MediaBrowser.sln | 298 ------------------ 3 files changed, 39 insertions(+), 310 deletions(-) create mode 100644 MediaBrowser.Server.Mac/readme.txt diff --git a/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs b/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs index ba98400eae..438b5a4ce7 100644 --- a/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs +++ b/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs @@ -235,18 +235,19 @@ namespace MediaBrowser.Dlna.ContentDirectory foreach (var i in childrenResult.Items) { - var displayStubType = GetDisplayStubType(i, serverItem.Item); + var childItem = i.Item; + var displayStubType = GetDisplayStubType(childItem, serverItem.Item); - if (i.IsFolder || displayStubType.HasValue) + if (childItem.IsFolder || displayStubType.HasValue) { - var childCount = (await GetUserItems(i, displayStubType, user, sortCriteria, null, 0).ConfigureAwait(false)) + var childCount = (await GetUserItems(childItem, displayStubType, user, sortCriteria, null, 0).ConfigureAwait(false)) .TotalRecordCount; - result.DocumentElement.AppendChild(_didlBuilder.GetFolderElement(result, i, displayStubType, item, childCount, filter)); + result.DocumentElement.AppendChild(_didlBuilder.GetFolderElement(result, childItem, displayStubType, item, childCount, filter)); } else { - result.DocumentElement.AppendChild(_didlBuilder.GetItemElement(result, i, item, serverItem.StubType, deviceId, filter)); + result.DocumentElement.AppendChild(_didlBuilder.GetItemElement(result, childItem, item, serverItem.StubType, deviceId, filter)); } } } @@ -274,6 +275,11 @@ namespace MediaBrowser.Dlna.ContentDirectory { return StubType.Folder; } + + if (movie.People.Count > 0) + { + return StubType.Folder; + } } } @@ -408,7 +414,7 @@ namespace MediaBrowser.Dlna.ContentDirectory }).ConfigureAwait(false); } - private async Task> GetUserItems(BaseItem item, StubType? stubType, User user, SortCriteria sort, int? startIndex, int? limit) + private async Task> GetUserItems(BaseItem item, StubType? stubType, User user, SortCriteria sort, int? startIndex, int? limit) { if (stubType.HasValue) { @@ -428,7 +434,7 @@ namespace MediaBrowser.Dlna.ContentDirectory sortOrders.Add(ItemSortBy.SortName); } - return await folder.GetItems(new InternalItemsQuery + var queryResult = await folder.GetItems(new InternalItemsQuery { Limit = limit, StartIndex = startIndex, @@ -438,9 +444,15 @@ namespace MediaBrowser.Dlna.ContentDirectory Filter = FilterUnsupportedContent }).ConfigureAwait(false); + + return new QueryResult + { + TotalRecordCount = queryResult.TotalRecordCount, + Items = queryResult.Items.Select(i => new ServerItem { Item = i, StubType = null }).ToArray() + }; } - private Task> GetMovieItems(Movie item) + private Task> GetMovieItems(Movie item) { var list = new List(); @@ -448,12 +460,14 @@ namespace MediaBrowser.Dlna.ContentDirectory list.AddRange(item.LocalTrailerIds.Select(i => _libraryManager.GetItemById(i)).Where(i => i != null)); list.AddRange(item.SpecialFeatureIds.Select(i => _libraryManager.GetItemById(i)).Where(i => i != null)); - list.AddRange(item.ThemeVideoIds.Select(i => _libraryManager.GetItemById(i)).Where(i => i != null)); - return Task.FromResult(new QueryResult + var serverItems = list.Select(i => new ServerItem { Item = i, StubType = null }) + .ToList(); + + return Task.FromResult(new QueryResult { - Items = list.ToArray(), - TotalRecordCount = list.Count + Items = serverItems.ToArray(), + TotalRecordCount = serverItems.Count }); } diff --git a/MediaBrowser.Server.Mac/readme.txt b/MediaBrowser.Server.Mac/readme.txt new file mode 100644 index 0000000000..e0833ebbba --- /dev/null +++ b/MediaBrowser.Server.Mac/readme.txt @@ -0,0 +1,13 @@ +Instructions for deploying a new build: + +1. Download source code + +2. In resources folder, remove dashboard-ui, then re-add from the WebDashboard project, making sure to link the files, rather than copy. This will pick up any web client changes since the last deployment. + +3. Repeat the process for swagger-ui, if ServiceStack has been updated since the last release. If in doubt, just do it. + +4. Commit and push the changes to the Mac project + +5. Build the installer + +6. Proceed as normal and tag the builds in github \ No newline at end of file diff --git a/MediaBrowser.sln b/MediaBrowser.sln index 9dadcc4544..22c2fdc249 100644 --- a/MediaBrowser.sln +++ b/MediaBrowser.sln @@ -59,11 +59,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Server.Startup EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug_Ubuntu|Any CPU = Debug_Ubuntu|Any CPU - Debug_Ubuntu|Mixed Platforms = Debug_Ubuntu|Mixed Platforms - Debug_Ubuntu|Win32 = Debug_Ubuntu|Win32 - Debug_Ubuntu|x64 = Debug_Ubuntu|x64 - Debug_Ubuntu|x86 = Debug_Ubuntu|x86 Debug|Any CPU = Debug|Any CPU Debug|Mixed Platforms = Debug|Mixed Platforms Debug|Win32 = Debug|Win32 @@ -74,11 +69,6 @@ Global Release Mono|Win32 = Release Mono|Win32 Release Mono|x64 = Release Mono|x64 Release Mono|x86 = Release Mono|x86 - Release_Ubuntu|Any CPU = Release_Ubuntu|Any CPU - Release_Ubuntu|Mixed Platforms = Release_Ubuntu|Mixed Platforms - Release_Ubuntu|Win32 = Release_Ubuntu|Win32 - Release_Ubuntu|x64 = Release_Ubuntu|x64 - Release_Ubuntu|x86 = Release_Ubuntu|x86 Release|Any CPU = Release|Any CPU Release|Mixed Platforms = Release|Mixed Platforms Release|Win32 = Release|Win32 @@ -86,13 +76,6 @@ Global Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Debug_Ubuntu|Win32.ActiveCfg = Debug|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Debug_Ubuntu|x86.ActiveCfg = Debug|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Debug|Any CPU.Build.0 = Debug|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -108,13 +91,6 @@ Global {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU - {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release|Any CPU.ActiveCfg = Release|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release|Any CPU.Build.0 = Release|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -123,13 +99,6 @@ Global {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release|x64.ActiveCfg = Release|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release|x86.ActiveCfg = Release|Any CPU {17E1F4E6-8ABD-4FE5-9ECF-43D4B6087BA2}.Release|x86.Build.0 = Release|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Debug_Ubuntu|Win32.ActiveCfg = Debug|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Debug_Ubuntu|x86.ActiveCfg = Debug|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Debug|Any CPU.Build.0 = Debug|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -145,13 +114,6 @@ Global {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU - {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release|Any CPU.ActiveCfg = Release|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release|Any CPU.Build.0 = Release|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -160,13 +122,6 @@ Global {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release|x64.ActiveCfg = Release|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release|x86.ActiveCfg = Release|Any CPU {4FD51AC5-2C16-4308-A993-C3A84F3B4582}.Release|x86.Build.0 = Release|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Debug_Ubuntu|Win32.ActiveCfg = Debug|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Debug_Ubuntu|x86.ActiveCfg = Debug|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Debug|Any CPU.Build.0 = Debug|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -182,13 +137,6 @@ Global {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU - {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release|Any CPU.ActiveCfg = Release|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release|Any CPU.Build.0 = Release|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -197,13 +145,6 @@ Global {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release|x64.ActiveCfg = Release|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release|x86.ActiveCfg = Release|Any CPU {9142EEFA-7570-41E1-BFCC-468BB571AF2F}.Release|x86.Build.0 = Release|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Debug_Ubuntu|Win32.ActiveCfg = Debug|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Debug_Ubuntu|x86.ActiveCfg = Debug|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Debug|Any CPU.Build.0 = Debug|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -219,13 +160,6 @@ Global {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU - {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release|Any CPU.ActiveCfg = Release|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release|Any CPU.Build.0 = Release|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -234,13 +168,6 @@ Global {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release|x64.ActiveCfg = Release|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release|x86.ActiveCfg = Release|Any CPU {7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release|x86.Build.0 = Release|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Debug_Ubuntu|Win32.ActiveCfg = Debug|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Debug_Ubuntu|x86.ActiveCfg = Debug|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Debug|Any CPU.Build.0 = Debug|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -256,13 +183,6 @@ Global {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU - {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release|Any CPU.ActiveCfg = Release|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release|Any CPU.Build.0 = Release|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -271,13 +191,6 @@ Global {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release|x64.ActiveCfg = Release|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release|x86.ActiveCfg = Release|Any CPU {5624B7B5-B5A7-41D8-9F10-CC5611109619}.Release|x86.Build.0 = Release|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Debug_Ubuntu|Win32.ActiveCfg = Debug|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Debug_Ubuntu|x86.ActiveCfg = Debug|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Debug|Any CPU.Build.0 = Debug|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -292,13 +205,6 @@ Global {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU - {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release|Any CPU.ActiveCfg = Release|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release|Any CPU.Build.0 = Release|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -306,13 +212,6 @@ Global {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release|Win32.ActiveCfg = Release|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release|x64.ActiveCfg = Release|Any CPU {C4D2573A-3FD3-441F-81AF-174AC4CD4E1D}.Release|x86.ActiveCfg = Release|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Debug_Ubuntu|Win32.ActiveCfg = Debug|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Debug_Ubuntu|x86.ActiveCfg = Debug|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Debug|Any CPU.Build.0 = Debug|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -327,13 +226,6 @@ Global {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU - {2E781478-814D-4A48-9D80-BFF206441A65}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release|Any CPU.ActiveCfg = Release|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release|Any CPU.Build.0 = Release|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -341,13 +233,6 @@ Global {2E781478-814D-4A48-9D80-BFF206441A65}.Release|Win32.ActiveCfg = Release|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release|x64.ActiveCfg = Release|Any CPU {2E781478-814D-4A48-9D80-BFF206441A65}.Release|x86.ActiveCfg = Release|Any CPU - {657B5410-7C3B-4806-9753-D254102CE537}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {657B5410-7C3B-4806-9753-D254102CE537}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {657B5410-7C3B-4806-9753-D254102CE537}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU - {657B5410-7C3B-4806-9753-D254102CE537}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU - {657B5410-7C3B-4806-9753-D254102CE537}.Debug_Ubuntu|Win32.ActiveCfg = Debug|Any CPU - {657B5410-7C3B-4806-9753-D254102CE537}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU - {657B5410-7C3B-4806-9753-D254102CE537}.Debug_Ubuntu|x86.ActiveCfg = Debug|Any CPU {657B5410-7C3B-4806-9753-D254102CE537}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {657B5410-7C3B-4806-9753-D254102CE537}.Debug|Any CPU.Build.0 = Debug|Any CPU {657B5410-7C3B-4806-9753-D254102CE537}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -362,13 +247,6 @@ Global {657B5410-7C3B-4806-9753-D254102CE537}.Release Mono|Win32.ActiveCfg = Release|Any CPU {657B5410-7C3B-4806-9753-D254102CE537}.Release Mono|x64.ActiveCfg = Release|Any CPU {657B5410-7C3B-4806-9753-D254102CE537}.Release Mono|x86.ActiveCfg = Release|Any CPU - {657B5410-7C3B-4806-9753-D254102CE537}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {657B5410-7C3B-4806-9753-D254102CE537}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU - {657B5410-7C3B-4806-9753-D254102CE537}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU - {657B5410-7C3B-4806-9753-D254102CE537}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU - {657B5410-7C3B-4806-9753-D254102CE537}.Release_Ubuntu|Win32.ActiveCfg = Release|Any CPU - {657B5410-7C3B-4806-9753-D254102CE537}.Release_Ubuntu|x64.ActiveCfg = Release|Any CPU - {657B5410-7C3B-4806-9753-D254102CE537}.Release_Ubuntu|x86.ActiveCfg = Release|Any CPU {657B5410-7C3B-4806-9753-D254102CE537}.Release|Any CPU.ActiveCfg = Release|Any CPU {657B5410-7C3B-4806-9753-D254102CE537}.Release|Any CPU.Build.0 = Release|Any CPU {657B5410-7C3B-4806-9753-D254102CE537}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -376,13 +254,6 @@ Global {657B5410-7C3B-4806-9753-D254102CE537}.Release|Win32.ActiveCfg = Release|Any CPU {657B5410-7C3B-4806-9753-D254102CE537}.Release|x64.ActiveCfg = Release|Any CPU {657B5410-7C3B-4806-9753-D254102CE537}.Release|x86.ActiveCfg = Release|Any CPU - {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU - {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU - {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Debug_Ubuntu|Win32.ActiveCfg = Debug|Any CPU - {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU - {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Debug_Ubuntu|x86.ActiveCfg = Debug|Any CPU {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Debug|Any CPU.Build.0 = Debug|Any CPU {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -397,13 +268,6 @@ Global {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Release Mono|Win32.ActiveCfg = Release|Any CPU {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Release Mono|x64.ActiveCfg = Release|Any CPU {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Release Mono|x86.ActiveCfg = Release|Any CPU - {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU - {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU - {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU - {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Release_Ubuntu|Win32.ActiveCfg = Release|Any CPU - {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Release_Ubuntu|x64.ActiveCfg = Release|Any CPU - {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Release_Ubuntu|x86.ActiveCfg = Release|Any CPU {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Release|Any CPU.ActiveCfg = Release|Any CPU {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Release|Any CPU.Build.0 = Release|Any CPU {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -411,13 +275,6 @@ Global {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Release|Win32.ActiveCfg = Release|Any CPU {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Release|x64.ActiveCfg = Release|Any CPU {E22BFD35-0FCD-4A85-978A-C22DCD73A081}.Release|x86.ActiveCfg = Release|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Debug_Ubuntu|Win32.ActiveCfg = Debug|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Debug_Ubuntu|x86.ActiveCfg = Debug|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Debug|Any CPU.Build.0 = Debug|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -432,13 +289,6 @@ Global {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU - {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release|Any CPU.ActiveCfg = Release|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release|Any CPU.Build.0 = Release|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -446,13 +296,6 @@ Global {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release|Win32.ActiveCfg = Release|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release|x64.ActiveCfg = Release|Any CPU {442B5058-DCAF-4263-BB6A-F21E31120A1B}.Release|x86.ActiveCfg = Release|Any CPU - {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU - {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU - {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Debug_Ubuntu|Win32.ActiveCfg = Debug|Any CPU - {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU - {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Debug_Ubuntu|x86.ActiveCfg = Debug|Any CPU {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Debug|Any CPU.Build.0 = Debug|Any CPU {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -467,13 +310,6 @@ Global {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release Mono|Win32.ActiveCfg = Release|Any CPU {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release Mono|x64.ActiveCfg = Release|Any CPU {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release Mono|x86.ActiveCfg = Release|Any CPU - {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU - {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU - {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU - {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release_Ubuntu|Win32.ActiveCfg = Release|Any CPU - {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release_Ubuntu|x64.ActiveCfg = Release|Any CPU - {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release_Ubuntu|x86.ActiveCfg = Release|Any CPU {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release|Any CPU.ActiveCfg = Release|Any CPU {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release|Any CPU.Build.0 = Release|Any CPU {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -481,15 +317,6 @@ Global {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release|Win32.ActiveCfg = Release|Any CPU {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release|x64.ActiveCfg = Release|Any CPU {D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release|x86.ActiveCfg = Release|Any CPU - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|x86 - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|x86 - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Win32.ActiveCfg = Debug|x86 - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|Win32.Build.0 = Debug|x86 - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|x86.ActiveCfg = Debug|x86 - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug_Ubuntu|x86.Build.0 = Debug|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|Any CPU.Build.0 = Debug|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -505,15 +332,6 @@ Global {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release Mono|x64.ActiveCfg = Release|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release Mono|x86.ActiveCfg = Release|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release Mono|x86.Build.0 = Release|x86 - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|x86 - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|x86 - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Win32.ActiveCfg = Release|x86 - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|Win32.Build.0 = Release|x86 - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|x64.ActiveCfg = Release|Any CPU - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|x86.ActiveCfg = Release|x86 - {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release_Ubuntu|x86.Build.0 = Release|x86 {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Any CPU.ActiveCfg = Release|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Any CPU.Build.0 = Release|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -521,13 +339,6 @@ Global {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Win32.ActiveCfg = Release|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|x64.ActiveCfg = Release|Any CPU {94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|x86.ActiveCfg = Release|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Debug_Ubuntu|Win32.ActiveCfg = Debug|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Debug_Ubuntu|x86.ActiveCfg = Debug|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Debug|Any CPU.Build.0 = Debug|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -542,13 +353,6 @@ Global {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU - {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release|Any CPU.ActiveCfg = Release|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release|Any CPU.Build.0 = Release|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -556,13 +360,6 @@ Global {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release|Win32.ActiveCfg = Release|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release|x64.ActiveCfg = Release|Any CPU {734098EB-6DC1-4DD0-A1CA-3140DCD2737C}.Release|x86.ActiveCfg = Release|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Debug_Ubuntu|Win32.ActiveCfg = Debug|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Debug_Ubuntu|x86.ActiveCfg = Debug|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Debug|Any CPU.Build.0 = Debug|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -577,13 +374,6 @@ Global {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU - {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release|Any CPU.ActiveCfg = Release|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release|Any CPU.Build.0 = Release|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -591,13 +381,6 @@ Global {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release|Win32.ActiveCfg = Release|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release|x64.ActiveCfg = Release|Any CPU {0BD82FA6-EB8A-4452-8AF5-74F9C3849451}.Release|x86.ActiveCfg = Release|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Debug_Ubuntu|Win32.ActiveCfg = Debug|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Debug_Ubuntu|x86.ActiveCfg = Debug|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Debug|Any CPU.Build.0 = Debug|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -612,13 +395,6 @@ Global {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|Win32.ActiveCfg = Release Mono|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release Mono|x86.ActiveCfg = Release Mono|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU - {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release_Ubuntu|x86.ActiveCfg = Release Mono|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release|Any CPU.ActiveCfg = Release|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release|Any CPU.Build.0 = Release|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -626,13 +402,6 @@ Global {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release|Win32.ActiveCfg = Release|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release|x64.ActiveCfg = Release|Any CPU {4A4402D4-E910-443B-B8FC-2C18286A2CA0}.Release|x86.ActiveCfg = Release|Any CPU - {23499896-B135-4527-8574-C26E926EA99E}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {23499896-B135-4527-8574-C26E926EA99E}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {23499896-B135-4527-8574-C26E926EA99E}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU - {23499896-B135-4527-8574-C26E926EA99E}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU - {23499896-B135-4527-8574-C26E926EA99E}.Debug_Ubuntu|Win32.ActiveCfg = Debug|Any CPU - {23499896-B135-4527-8574-C26E926EA99E}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU - {23499896-B135-4527-8574-C26E926EA99E}.Debug_Ubuntu|x86.ActiveCfg = Debug|Any CPU {23499896-B135-4527-8574-C26E926EA99E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {23499896-B135-4527-8574-C26E926EA99E}.Debug|Any CPU.Build.0 = Debug|Any CPU {23499896-B135-4527-8574-C26E926EA99E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -647,13 +416,6 @@ Global {23499896-B135-4527-8574-C26E926EA99E}.Release Mono|Win32.ActiveCfg = Release|Any CPU {23499896-B135-4527-8574-C26E926EA99E}.Release Mono|x64.ActiveCfg = Release|Any CPU {23499896-B135-4527-8574-C26E926EA99E}.Release Mono|x86.ActiveCfg = Release|Any CPU - {23499896-B135-4527-8574-C26E926EA99E}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {23499896-B135-4527-8574-C26E926EA99E}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU - {23499896-B135-4527-8574-C26E926EA99E}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU - {23499896-B135-4527-8574-C26E926EA99E}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU - {23499896-B135-4527-8574-C26E926EA99E}.Release_Ubuntu|Win32.ActiveCfg = Release|Any CPU - {23499896-B135-4527-8574-C26E926EA99E}.Release_Ubuntu|x64.ActiveCfg = Release|Any CPU - {23499896-B135-4527-8574-C26E926EA99E}.Release_Ubuntu|x86.ActiveCfg = Release|Any CPU {23499896-B135-4527-8574-C26E926EA99E}.Release|Any CPU.ActiveCfg = Release|Any CPU {23499896-B135-4527-8574-C26E926EA99E}.Release|Any CPU.Build.0 = Release|Any CPU {23499896-B135-4527-8574-C26E926EA99E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -661,13 +423,6 @@ Global {23499896-B135-4527-8574-C26E926EA99E}.Release|Win32.ActiveCfg = Release|Any CPU {23499896-B135-4527-8574-C26E926EA99E}.Release|x64.ActiveCfg = Release|Any CPU {23499896-B135-4527-8574-C26E926EA99E}.Release|x86.ActiveCfg = Release|Any CPU - {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU - {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU - {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Debug_Ubuntu|Win32.ActiveCfg = Debug|Any CPU - {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU - {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Debug_Ubuntu|x86.ActiveCfg = Debug|Any CPU {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Debug|Any CPU.Build.0 = Debug|Any CPU {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -682,13 +437,6 @@ Global {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Release Mono|Win32.ActiveCfg = Release|Any CPU {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Release Mono|x64.ActiveCfg = Release|Any CPU {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Release Mono|x86.ActiveCfg = Release|Any CPU - {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU - {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU - {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU - {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Release_Ubuntu|Win32.ActiveCfg = Release|Any CPU - {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Release_Ubuntu|x64.ActiveCfg = Release|Any CPU - {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Release_Ubuntu|x86.ActiveCfg = Release|Any CPU {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Release|Any CPU.ActiveCfg = Release|Any CPU {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Release|Any CPU.Build.0 = Release|Any CPU {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -696,13 +444,6 @@ Global {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Release|Win32.ActiveCfg = Release|Any CPU {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Release|x64.ActiveCfg = Release|Any CPU {7EF9F3E0-697D-42F3-A08F-19DEB5F84392}.Release|x86.ActiveCfg = Release|Any CPU - {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU - {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU - {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Debug_Ubuntu|Win32.ActiveCfg = Debug|Any CPU - {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU - {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Debug_Ubuntu|x86.ActiveCfg = Debug|Any CPU {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Debug|Any CPU.Build.0 = Debug|Any CPU {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -717,13 +458,6 @@ Global {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Release Mono|Win32.ActiveCfg = Release|Any CPU {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Release Mono|x64.ActiveCfg = Release|Any CPU {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Release Mono|x86.ActiveCfg = Release|Any CPU - {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU - {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU - {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU - {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Release_Ubuntu|Win32.ActiveCfg = Release|Any CPU - {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Release_Ubuntu|x64.ActiveCfg = Release|Any CPU - {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Release_Ubuntu|x86.ActiveCfg = Release|Any CPU {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Release|Any CPU.ActiveCfg = Release|Any CPU {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Release|Any CPU.Build.0 = Release|Any CPU {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU @@ -731,15 +465,6 @@ Global {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Release|Win32.ActiveCfg = Release|Any CPU {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Release|x64.ActiveCfg = Release|Any CPU {6E4145E4-C6D4-4E4D-94F2-87188DB6E239}.Release|x86.ActiveCfg = Release|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|x86 - {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|x86 - {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Win32.ActiveCfg = Debug|x86 - {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|Win32.Build.0 = Debug|x86 - {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|x86.ActiveCfg = Debug|x86 - {175A9388-F352-4586-A6B4-070DED62B644}.Debug_Ubuntu|x86.Build.0 = Debug|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Any CPU.ActiveCfg = Debug|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Any CPU.Build.0 = Debug|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 @@ -758,15 +483,6 @@ Global {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|x64.ActiveCfg = Release Mono|Any CPU {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|x86.ActiveCfg = Release Mono|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release Mono|x86.Build.0 = Release Mono|x86 - {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Any CPU.ActiveCfg = Release Mono|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Any CPU.Build.0 = Release Mono|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release Mono|x86 - {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Mixed Platforms.Build.0 = Release Mono|x86 - {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Win32.ActiveCfg = Release Mono|x86 - {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|Win32.Build.0 = Release Mono|x86 - {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|x64.ActiveCfg = Release Mono|Any CPU - {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|x86.ActiveCfg = Release Mono|x86 - {175A9388-F352-4586-A6B4-070DED62B644}.Release_Ubuntu|x86.Build.0 = Release Mono|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release|Any CPU.ActiveCfg = Release|Any CPU {175A9388-F352-4586-A6B4-070DED62B644}.Release|Mixed Platforms.ActiveCfg = Release|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release|Mixed Platforms.Build.0 = Release|x86 @@ -775,13 +491,6 @@ Global {175A9388-F352-4586-A6B4-070DED62B644}.Release|x64.ActiveCfg = Release|Any CPU {175A9388-F352-4586-A6B4-070DED62B644}.Release|x86.ActiveCfg = Release|x86 {175A9388-F352-4586-A6B4-070DED62B644}.Release|x86.Build.0 = Release|x86 - {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU - {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Debug_Ubuntu|Mixed Platforms.ActiveCfg = Debug|Any CPU - {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Debug_Ubuntu|Mixed Platforms.Build.0 = Debug|Any CPU - {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Debug_Ubuntu|Win32.ActiveCfg = Debug|Any CPU - {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Debug_Ubuntu|x64.ActiveCfg = Debug|Any CPU - {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Debug_Ubuntu|x86.ActiveCfg = Debug|Any CPU {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Debug|Any CPU.Build.0 = Debug|Any CPU {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -796,13 +505,6 @@ Global {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Release Mono|Win32.ActiveCfg = Release|Any CPU {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Release Mono|x64.ActiveCfg = Release|Any CPU {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Release Mono|x86.ActiveCfg = Release|Any CPU - {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU - {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Release_Ubuntu|Mixed Platforms.ActiveCfg = Release|Any CPU - {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Release_Ubuntu|Mixed Platforms.Build.0 = Release|Any CPU - {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Release_Ubuntu|Win32.ActiveCfg = Release|Any CPU - {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Release_Ubuntu|x64.ActiveCfg = Release|Any CPU - {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Release_Ubuntu|x86.ActiveCfg = Release|Any CPU {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Release|Any CPU.ActiveCfg = Release|Any CPU {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Release|Any CPU.Build.0 = Release|Any CPU {B90AB8F2-1BFF-4568-A3FD-2A338A435A75}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU From d7bdb744ca9d4b3955071dfe3c38ed631dbafbfd Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 30 Nov 2014 14:01:33 -0500 Subject: [PATCH 04/15] add new image params --- MediaBrowser.Api/Library/LibraryService.cs | 6 +- MediaBrowser.Api/Movies/MoviesService.cs | 2 +- MediaBrowser.Api/PackageService.cs | 7 +- .../Playback/BaseStreamingService.cs | 5 - MediaBrowser.Api/PlaylistService.cs | 2 +- MediaBrowser.Api/StartupWizardService.cs | 1 + .../UserLibrary/ArtistsService.cs | 2 +- .../UserLibrary/BaseItemsByNameService.cs | 12 +- .../UserLibrary/BaseItemsRequest.cs | 47 +++++- MediaBrowser.Api/UserLibrary/ItemsService.cs | 9 +- .../UserLibrary/UserLibraryService.cs | 2 +- .../Extensions/BaseExtensions.cs | 2 + .../Dlna/DlnaIconResponse.cs | 22 --- MediaBrowser.Controller/Dlna/IDlnaManager.cs | 5 +- MediaBrowser.Controller/Dto/IDtoService.cs | 18 +- MediaBrowser.Controller/Entities/BaseItem.cs | 6 +- MediaBrowser.Controller/Entities/Folder.cs | 2 +- MediaBrowser.Controller/Entities/User.cs | 3 +- .../Library/ILibraryManager.cs | 8 + .../Library/IUserManager.cs | 14 ++ .../LiveTv/ILiveTvService.cs | 7 +- .../LiveTv/StreamResponseInfo.cs | 20 --- .../MediaBrowser.Controller.csproj | 2 - .../ContentDirectory/ControlHandler.cs | 113 +++++++++---- MediaBrowser.Dlna/Didl/DidlBuilder.cs | 13 +- MediaBrowser.Dlna/DlnaManager.cs | 5 +- .../Encoder/MediaEncoder.cs | 3 + .../MediaBrowser.Model.Portable.csproj | 6 + .../MediaBrowser.Model.net35.csproj | 6 + .../Configuration/ServerConfiguration.cs | 6 + MediaBrowser.Model/Dlna/StreamBuilder.cs | 1 - MediaBrowser.Model/Dlna/TranscodingProfile.cs | 3 - MediaBrowser.Model/Dto/BaseItemDto.cs | 15 +- MediaBrowser.Model/Dto/DtoOptions.cs | 32 ++++ MediaBrowser.Model/MediaBrowser.Model.csproj | 2 + MediaBrowser.Model/Querying/ItemFields.cs | 25 +++ MediaBrowser.Model/Users/UserPolicy.cs | 11 ++ .../Connect/ConnectManager.cs | 41 ++++- .../Dto/DtoService.cs | 154 +++++++++++------- .../Library/LibraryManager.cs | 46 +++++- .../Library/ResolverHelper.cs | 7 +- .../Library/UserManager.cs | 15 +- .../LiveTv/LiveTvDtoService.cs | 16 +- .../Localization/Server/server.json | 2 +- 44 files changed, 520 insertions(+), 206 deletions(-) delete mode 100644 MediaBrowser.Controller/Dlna/DlnaIconResponse.cs delete mode 100644 MediaBrowser.Controller/LiveTv/StreamResponseInfo.cs create mode 100644 MediaBrowser.Model/Dto/DtoOptions.cs create mode 100644 MediaBrowser.Model/Users/UserPolicy.cs diff --git a/MediaBrowser.Api/Library/LibraryService.cs b/MediaBrowser.Api/Library/LibraryService.cs index 06d8e0478e..5cb007f8fe 100644 --- a/MediaBrowser.Api/Library/LibraryService.cs +++ b/MediaBrowser.Api/Library/LibraryService.cs @@ -276,7 +276,7 @@ namespace MediaBrowser.Api.Library var fields = Enum.GetNames(typeof(ItemFields)) .Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)) .ToList(); - + var result = new ItemsResult { TotalRecordCount = items.Count, @@ -353,7 +353,7 @@ namespace MediaBrowser.Api.Library .ToList(); BaseItem parent = item.Parent; - + while (parent != null) { if (user != null) @@ -607,7 +607,7 @@ namespace MediaBrowser.Api.Library } } } - + var dtos = themeSongIds.Select(_libraryManager.GetItemById) .OrderBy(i => i.SortName) .Select(i => _dtoService.GetBaseItemDto(i, fields, user, item)); diff --git a/MediaBrowser.Api/Movies/MoviesService.cs b/MediaBrowser.Api/Movies/MoviesService.cs index ef86a46e8a..8d6568d798 100644 --- a/MediaBrowser.Api/Movies/MoviesService.cs +++ b/MediaBrowser.Api/Movies/MoviesService.cs @@ -208,7 +208,7 @@ namespace MediaBrowser.Api.Movies { returnItems = returnItems.Take(request.Limit.Value); } - + var result = new ItemsResult { Items = returnItems.Select(i => _dtoService.GetBaseItemDto(i, fields, user)).ToArray(), diff --git a/MediaBrowser.Api/PackageService.cs b/MediaBrowser.Api/PackageService.cs index eebdafc5c8..e24fa4964b 100644 --- a/MediaBrowser.Api/PackageService.cs +++ b/MediaBrowser.Api/PackageService.cs @@ -16,6 +16,7 @@ namespace MediaBrowser.Api /// Class GetPackage /// [Route("/Packages/{Name}", "GET", Summary = "Gets a package, by name or assembly guid")] + [Authenticated] public class GetPackage : IReturn { /// @@ -37,6 +38,7 @@ namespace MediaBrowser.Api /// Class GetPackages /// [Route("/Packages", "GET", Summary = "Gets available packages")] + [Authenticated] public class GetPackages : IReturn> { /// @@ -60,6 +62,7 @@ namespace MediaBrowser.Api /// Class GetPackageVersionUpdates /// [Route("/Packages/Updates", "GET", Summary = "Gets available package updates for currently installed packages")] + [Authenticated(Roles = "Admin")] public class GetPackageVersionUpdates : IReturn> { /// @@ -74,6 +77,7 @@ namespace MediaBrowser.Api /// Class InstallPackage /// [Route("/Packages/Installed/{Name}", "POST", Summary = "Installs a package")] + [Authenticated(Roles = "Admin")] public class InstallPackage : IReturnVoid { /// @@ -109,6 +113,7 @@ namespace MediaBrowser.Api /// Class CancelPackageInstallation /// [Route("/Packages/Installing/{Id}", "DELETE", Summary = "Cancels a package installation")] + [Authenticated(Roles = "Admin")] public class CancelPackageInstallation : IReturnVoid { /// @@ -122,7 +127,6 @@ namespace MediaBrowser.Api /// /// Class PackageService /// - [Authenticated(Roles = "Admin")] public class PackageService : BaseApiService { private readonly IInstallationManager _installationManager; @@ -139,7 +143,6 @@ namespace MediaBrowser.Api /// /// The request. /// System.Object. - /// Unsupported PackageType public object Get(GetPackageVersionUpdates request) { var result = new List(); diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index 21c4a3dffe..12ccfb6b1d 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -2011,11 +2011,6 @@ namespace MediaBrowser.Api.Playback state.EstimateContentLength = transcodingProfile.EstimateContentLength; state.EnableMpegtsM2TsMode = transcodingProfile.EnableMpegtsM2TsMode; state.TranscodeSeekInfo = transcodingProfile.TranscodeSeekInfo; - - if (state.VideoRequest != null && string.IsNullOrWhiteSpace(state.VideoRequest.Profile)) - { - state.VideoRequest.Profile = transcodingProfile.VideoProfile; - } } } diff --git a/MediaBrowser.Api/PlaylistService.cs b/MediaBrowser.Api/PlaylistService.cs index 5325e9c448..7f7717f71b 100644 --- a/MediaBrowser.Api/PlaylistService.cs +++ b/MediaBrowser.Api/PlaylistService.cs @@ -151,7 +151,7 @@ namespace MediaBrowser.Api { items = items.Take(request.Limit.Value).ToArray(); } - + var dtos = items .Select(i => _dtoService.GetBaseItemDto(i.Item2, request.GetItemFields().ToList(), user)) .ToArray(); diff --git a/MediaBrowser.Api/StartupWizardService.cs b/MediaBrowser.Api/StartupWizardService.cs index fd50191264..4443b2a2bc 100644 --- a/MediaBrowser.Api/StartupWizardService.cs +++ b/MediaBrowser.Api/StartupWizardService.cs @@ -61,6 +61,7 @@ namespace MediaBrowser.Api public void Post(ReportStartupWizardComplete request) { _config.Configuration.IsStartupWizardCompleted = true; + _config.Configuration.EnableLocalizedGuids = true; _config.SaveConfiguration(); } diff --git a/MediaBrowser.Api/UserLibrary/ArtistsService.cs b/MediaBrowser.Api/UserLibrary/ArtistsService.cs index 07015ecae2..2299b2b1aa 100644 --- a/MediaBrowser.Api/UserLibrary/ArtistsService.cs +++ b/MediaBrowser.Api/UserLibrary/ArtistsService.cs @@ -89,7 +89,7 @@ namespace MediaBrowser.Api.UserLibrary if (request.UserId.HasValue) { var user = UserManager.GetUserById(request.UserId.Value); - + return DtoService.GetBaseItemDto(item, fields.ToList(), user); } diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs index 3ae53daf88..9d211a4199 100644 --- a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs +++ b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs @@ -127,11 +127,11 @@ namespace MediaBrowser.Api.UserLibrary } - var fields = request.GetItemFields().ToList(); - var tuples = ibnItems.Select(i => new Tuple>(i, i.GetTaggedItems(libraryItems).ToList())); - var dtos = tuples.Select(i => GetDto(i.Item1, user, fields, i.Item2)); + var dtoOptions = request.GetDtoOptions(); + + var dtos = tuples.Select(i => GetDto(i.Item1, user, dtoOptions, i.Item2)); result.Items = dtos.Where(i => i != null).ToArray(); @@ -332,12 +332,12 @@ namespace MediaBrowser.Api.UserLibrary /// /// The item. /// The user. - /// The fields. + /// The options. /// The library items. /// Task{DtoBaseItem}. - private BaseItemDto GetDto(TItemType item, User user, List fields, List libraryItems) + private BaseItemDto GetDto(TItemType item, User user, DtoOptions options, List libraryItems) { - var dto = DtoService.GetItemByNameDto(item, fields, libraryItems, user); + var dto = DtoService.GetItemByNameDto(item, options, libraryItems, user); return dto; } diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs b/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs index 6b0c64b797..808dbb1ff9 100644 --- a/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs +++ b/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Dto; +using MediaBrowser.Model.Entities; using MediaBrowser.Model.Querying; using ServiceStack; using System; @@ -9,6 +10,11 @@ namespace MediaBrowser.Api.UserLibrary { public abstract class BaseItemsRequest : IHasItemFields { + protected BaseItemsRequest() + { + EnableImages = true; + } + /// /// Skips over a given number of items within the results. Use for paging. /// @@ -116,6 +122,15 @@ namespace MediaBrowser.Api.UserLibrary [ApiMember(Name = "Years", Description = "Optional. If specified, results will be filtered based on production year. This allows multiple, comma delimeted.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)] public string Years { get; set; } + [ApiMember(Name = "EnableImages", Description = "Optional, include image information in output", IsRequired = false, DataType = "boolean", ParameterType = "query", Verb = "GET")] + public bool EnableImages { get; set; } + + [ApiMember(Name = "ImageTypeLimit", Description = "Optional, the max number of images to return, per image type", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")] + public int? ImageTypeLimit { get; set; } + + [ApiMember(Name = "EnableImageTypes", Description = "Optional. The image types to include in the output.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] + public string EnableImageTypes { get; set; } + public string[] GetGenres() { return (Genres ?? string.Empty).Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries); @@ -198,5 +213,35 @@ namespace MediaBrowser.Api.UserLibrary return val.Split(','); } + + public DtoOptions GetDtoOptions() + { + var options = new DtoOptions(); + + options.Fields = this.GetItemFields().ToList(); + options.EnableImages = EnableImages; + + if (ImageTypeLimit.HasValue) + { + options.ImageTypeLimit = ImageTypeLimit.Value; + } + + if (string.IsNullOrWhiteSpace(EnableImageTypes)) + { + if (options.EnableImages) + { + // Get everything + options.ImageTypes = Enum.GetNames(typeof(ImageType)) + .Select(i => (ImageType)Enum.Parse(typeof(ImageType), i, true)) + .ToList(); + } + } + else + { + options.ImageTypes = (EnableImageTypes ?? string.Empty).Split(',').Where(i => !string.IsNullOrWhiteSpace(i)).Select(v => (ImageType)Enum.Parse(typeof(ImageType), v, true)).ToList(); + } + + return options; + } } } diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index b87ee895af..d15556f554 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -321,15 +321,14 @@ namespace MediaBrowser.Api.UserLibrary var result = await GetItemsToSerialize(request, user, parentItem).ConfigureAwait(false); var isFiltered = result.Item2; + var dtoOptions = request.GetDtoOptions(); if (isFiltered) { - var currentFields = request.GetItemFields().ToList(); - return new ItemsResult { TotalRecordCount = result.Item1.TotalRecordCount, - Items = result.Item1.Items.Select(i => _dtoService.GetBaseItemDto(i, currentFields, user)).ToArray() + Items = result.Item1.Items.Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user)).ToArray() }; } @@ -363,9 +362,7 @@ namespace MediaBrowser.Api.UserLibrary var pagedItems = ApplyPaging(request, itemsArray); - var fields = request.GetItemFields().ToList(); - - var returnItems = pagedItems.Select(i => _dtoService.GetBaseItemDto(i, fields, user)).ToArray(); + var returnItems = pagedItems.Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user)).ToArray(); return new ItemsResult { diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs index fd0e79a217..511312a631 100644 --- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs +++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs @@ -374,7 +374,7 @@ namespace MediaBrowser.Api.UserLibrary item = i.Item1; childCount = i.Item2.Count; } - + var dto = _dtoService.GetBaseItemDto(item, fields, user); dto.ChildCount = childCount; diff --git a/MediaBrowser.Common/Extensions/BaseExtensions.cs b/MediaBrowser.Common/Extensions/BaseExtensions.cs index be2fbffc64..4daee48753 100644 --- a/MediaBrowser.Common/Extensions/BaseExtensions.cs +++ b/MediaBrowser.Common/Extensions/BaseExtensions.cs @@ -96,6 +96,8 @@ namespace MediaBrowser.Common.Extensions /// The STR. /// The type. /// Guid. + /// type + [Obsolete("Use LibraryManager.GetNewItemId")] public static Guid GetMBId(this string str, Type type) { if (type == null) diff --git a/MediaBrowser.Controller/Dlna/DlnaIconResponse.cs b/MediaBrowser.Controller/Dlna/DlnaIconResponse.cs deleted file mode 100644 index 5ae92082d2..0000000000 --- a/MediaBrowser.Controller/Dlna/DlnaIconResponse.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.IO; -using MediaBrowser.Model.Drawing; - -namespace MediaBrowser.Controller.Dlna -{ - public class DlnaIconResponse : IDisposable - { - public Stream Stream { get; set; } - - public ImageFormat Format { get; set; } - - public void Dispose() - { - if (Stream != null) - { - Stream.Dispose(); - Stream = null; - } - } - } -} diff --git a/MediaBrowser.Controller/Dlna/IDlnaManager.cs b/MediaBrowser.Controller/Dlna/IDlnaManager.cs index b7a06b368b..34464f6a2d 100644 --- a/MediaBrowser.Controller/Dlna/IDlnaManager.cs +++ b/MediaBrowser.Controller/Dlna/IDlnaManager.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Model.Dlna; +using MediaBrowser.Controller.Drawing; +using MediaBrowser.Model.Dlna; using System.Collections.Generic; namespace MediaBrowser.Controller.Dlna @@ -69,6 +70,6 @@ namespace MediaBrowser.Controller.Dlna /// /// The filename. /// DlnaIconResponse. - DlnaIconResponse GetIcon(string filename); + ImageStream GetIcon(string filename); } } diff --git a/MediaBrowser.Controller/Dto/IDtoService.cs b/MediaBrowser.Controller/Dto/IDtoService.cs index 61b2caec0d..7c7ec56d50 100644 --- a/MediaBrowser.Controller/Dto/IDtoService.cs +++ b/MediaBrowser.Controller/Dto/IDtoService.cs @@ -22,7 +22,8 @@ namespace MediaBrowser.Controller.Dto /// /// The dto. /// The item. - void AttachPrimaryImageAspectRatio(IItemDto dto, IHasImages item); + /// The fields. + void AttachPrimaryImageAspectRatio(IItemDto dto, IHasImages item, List fields); /// /// Gets the base item dto. @@ -34,6 +35,16 @@ namespace MediaBrowser.Controller.Dto /// Task{BaseItemDto}. BaseItemDto GetBaseItemDto(BaseItem item, List fields, User user = null, BaseItem owner = null); + /// + /// Gets the base item dto. + /// + /// The item. + /// The options. + /// The user. + /// The owner. + /// BaseItemDto. + BaseItemDto GetBaseItemDto(BaseItem item, DtoOptions options, User user = null, BaseItem owner = null); + /// /// Gets the chapter information dto. /// @@ -51,12 +62,13 @@ namespace MediaBrowser.Controller.Dto /// /// Gets the item by name dto. /// + /// /// The item. - /// The fields. + /// The options. /// The tagged items. /// The user. /// BaseItemDto. - BaseItemDto GetItemByNameDto(T item, List fields, List taggedItems, User user = null) + BaseItemDto GetItemByNameDto(T item, DtoOptions options, List taggedItems, User user = null) where T : BaseItem, IItemByName; } } diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 990ea49f67..ea615f023d 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -1820,7 +1820,11 @@ namespace MediaBrowser.Controller.Entities if (pct > 0) { pct = userData.PlaybackPositionTicks / pct; - dto.PlayedPercentage = 100 * pct; + + if (pct > 0) + { + dto.PlayedPercentage = 100 * pct; + } } } } diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 34f52aac5d..0e712dc458 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -103,7 +103,7 @@ namespace MediaBrowser.Controller.Entities if (item.Id == Guid.Empty) { - item.Id = item.Path.GetMBId(item.GetType()); + item.Id = LibraryManager.GetNewItemId(item.Path, item.GetType()); } if (ActualChildren.Any(i => i.Id == item.Id)) diff --git a/MediaBrowser.Controller/Entities/User.cs b/MediaBrowser.Controller/Entities/User.cs index 0bbd2eeca7..3fa0a04356 100644 --- a/MediaBrowser.Controller/Entities/User.cs +++ b/MediaBrowser.Controller/Entities/User.cs @@ -4,6 +4,7 @@ using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Connect; using MediaBrowser.Model.Serialization; +using MediaBrowser.Model.Users; using System; using System.IO; using System.Linq; @@ -287,7 +288,7 @@ namespace MediaBrowser.Controller.Entities var localTime = date.ToLocalTime(); - return DayOfWeekHelper.GetDaysOfWeek(schedule.DayOfWeek).Contains(localTime.DayOfWeek) && + return DayOfWeekHelper.GetDaysOfWeek(schedule.DayOfWeek).Contains(localTime.DayOfWeek) && IsWithinTime(schedule, localTime); } diff --git a/MediaBrowser.Controller/Library/ILibraryManager.cs b/MediaBrowser.Controller/Library/ILibraryManager.cs index 3367f98e47..10fee05a96 100644 --- a/MediaBrowser.Controller/Library/ILibraryManager.cs +++ b/MediaBrowser.Controller/Library/ILibraryManager.cs @@ -414,5 +414,13 @@ namespace MediaBrowser.Controller.Library IEnumerable GetAdditionalParts(string file, VideoType type, IEnumerable files); + + /// + /// Gets the new item identifier. + /// + /// The key. + /// The type. + /// Guid. + Guid GetNewItemId(string key, Type type); } } \ No newline at end of file diff --git a/MediaBrowser.Controller/Library/IUserManager.cs b/MediaBrowser.Controller/Library/IUserManager.cs index bd44f786f9..debdafe4d5 100644 --- a/MediaBrowser.Controller/Library/IUserManager.cs +++ b/MediaBrowser.Controller/Library/IUserManager.cs @@ -164,5 +164,19 @@ namespace MediaBrowser.Controller.Library /// The pin. /// true if XXXX, false otherwise. Task RedeemPasswordResetPin(string pin); + + /// + /// Gets the user policy. + /// + /// The user identifier. + /// UserPolicy. + UserPolicy GetUserPolicy(string userId); + + /// + /// Updates the user policy. + /// + /// The user identifier. + /// The user policy. + Task UpdateUserPolicy(string userId, UserPolicy userPolicy); } } diff --git a/MediaBrowser.Controller/LiveTv/ILiveTvService.cs b/MediaBrowser.Controller/LiveTv/ILiveTvService.cs index eda69b164e..993db00043 100644 --- a/MediaBrowser.Controller/LiveTv/ILiveTvService.cs +++ b/MediaBrowser.Controller/LiveTv/ILiveTvService.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Channels; +using MediaBrowser.Controller.Drawing; namespace MediaBrowser.Controller.LiveTv { @@ -109,7 +110,7 @@ namespace MediaBrowser.Controller.LiveTv /// The channel identifier. /// The cancellation token. /// Task{Stream}. - Task GetChannelImageAsync(string channelId, CancellationToken cancellationToken); + Task GetChannelImageAsync(string channelId, CancellationToken cancellationToken); /// /// Gets the recording image asynchronous. This only needs to be implemented if an image path or url cannot be supplied to RecordingInfo @@ -117,7 +118,7 @@ namespace MediaBrowser.Controller.LiveTv /// The recording identifier. /// The cancellation token. /// Task{ImageResponseInfo}. - Task GetRecordingImageAsync(string recordingId, CancellationToken cancellationToken); + Task GetRecordingImageAsync(string recordingId, CancellationToken cancellationToken); /// /// Gets the program image asynchronous. This only needs to be implemented if an image path or url cannot be supplied to ProgramInfo @@ -126,7 +127,7 @@ namespace MediaBrowser.Controller.LiveTv /// The channel identifier. /// The cancellation token. /// Task{ImageResponseInfo}. - Task GetProgramImageAsync(string programId, string channelId, CancellationToken cancellationToken); + Task GetProgramImageAsync(string programId, string channelId, CancellationToken cancellationToken); /// /// Gets the recordings asynchronous. diff --git a/MediaBrowser.Controller/LiveTv/StreamResponseInfo.cs b/MediaBrowser.Controller/LiveTv/StreamResponseInfo.cs deleted file mode 100644 index cb6aa22d24..0000000000 --- a/MediaBrowser.Controller/LiveTv/StreamResponseInfo.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.IO; -using MediaBrowser.Model.Drawing; - -namespace MediaBrowser.Controller.LiveTv -{ - public class StreamResponseInfo - { - /// - /// Gets or sets the stream. - /// - /// The stream. - public Stream Stream { get; set; } - - /// - /// Gets or sets the type of the MIME. - /// - /// The type of the MIME. - public ImageFormat Format { get; set; } - } -} diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 931bc51d13..dbff88fd8b 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -105,7 +105,6 @@ - @@ -191,7 +190,6 @@ - diff --git a/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs b/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs index 438b5a4ce7..d979e3d891 100644 --- a/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs +++ b/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs @@ -236,7 +236,7 @@ namespace MediaBrowser.Dlna.ContentDirectory foreach (var i in childrenResult.Items) { var childItem = i.Item; - var displayStubType = GetDisplayStubType(childItem, serverItem.Item); + var displayStubType = i.StubType; if (childItem.IsFolder || displayStubType.HasValue) { @@ -263,29 +263,6 @@ namespace MediaBrowser.Dlna.ContentDirectory }; } - private StubType? GetDisplayStubType(BaseItem item, BaseItem context) - { - if (context == null || context.IsFolder) - { - var movie = item as Movie; - if (movie != null) - { - if (movie.LocalTrailerIds.Count > 0 || - movie.SpecialFeatureIds.Count > 0) - { - return StubType.Folder; - } - - if (movie.People.Count > 0) - { - return StubType.Folder; - } - } - } - - return null; - } - private async Task>> HandleSearch(Headers sparams, User user, string deviceId) { var searchCriteria = new SearchCriteria(sparams.GetValueOrDefault("SearchCriteria", "")); @@ -418,11 +395,36 @@ namespace MediaBrowser.Dlna.ContentDirectory { if (stubType.HasValue) { - var movie = item as Movie; - - if (movie != null) + if (stubType.Value == StubType.People) { - return await GetMovieItems(movie).ConfigureAwait(false); + var items = item.People.Select(i => + { + try + { + return _libraryManager.GetPerson(i.Name); + } + catch + { + return null; + } + + }).Where(i => i != null).ToArray(); + + var result = new QueryResult + { + Items = items.Select(i => new ServerItem { Item = i }).ToArray(), + TotalRecordCount = items.Length + }; + + return ApplyPaging(result, startIndex, limit); + } + if (stubType.Value == StubType.Folder) + { + var movie = item as Movie; + if (movie != null) + { + return ApplyPaging(await GetMovieItems(movie).ConfigureAwait(false), startIndex, limit); + } } } @@ -445,13 +447,52 @@ namespace MediaBrowser.Dlna.ContentDirectory }).ConfigureAwait(false); + var serverItems = queryResult + .Items + .Select(i => new ServerItem + { + Item = i, + StubType = GetDisplayStubType(i, item) + }) + .ToArray(); + return new QueryResult { TotalRecordCount = queryResult.TotalRecordCount, - Items = queryResult.Items.Select(i => new ServerItem { Item = i, StubType = null }).ToArray() + Items = serverItems }; } + private QueryResult ApplyPaging(QueryResult result, int? startIndex, int? limit) + { + result.Items = result.Items.Skip(startIndex ?? 0).Take(limit ?? int.MaxValue).ToArray(); + + return result; + } + + private StubType? GetDisplayStubType(BaseItem item, BaseItem context) + { + if (context == null || context.IsFolder) + { + var movie = item as Movie; + if (movie != null) + { + if (movie.LocalTrailerIds.Count > 0 || + movie.SpecialFeatureIds.Count > 0) + { + return StubType.Folder; + } + + if (movie.People.Count > 0) + { + return StubType.Folder; + } + } + } + + return null; + } + private Task> GetMovieItems(Movie item) { var list = new List(); @@ -464,6 +505,12 @@ namespace MediaBrowser.Dlna.ContentDirectory var serverItems = list.Select(i => new ServerItem { Item = i, StubType = null }) .ToList(); + serverItems.Add(new ServerItem + { + Item = item, + StubType = StubType.People + }); + return Task.FromResult(new QueryResult { Items = serverItems.ToArray(), @@ -512,6 +559,11 @@ namespace MediaBrowser.Dlna.ContentDirectory stubType = StubType.Folder; id = id.Split(new[] { '_' }, 2)[1]; } + else if (id.StartsWith("people_", StringComparison.OrdinalIgnoreCase)) + { + stubType = StubType.People; + id = id.Split(new[] { '_' }, 2)[1]; + } if (Guid.TryParse(id, out itemId)) { @@ -538,6 +590,7 @@ namespace MediaBrowser.Dlna.ContentDirectory public enum StubType { - Folder = 0 + Folder = 0, + People = 1 } } diff --git a/MediaBrowser.Dlna/Didl/DidlBuilder.cs b/MediaBrowser.Dlna/Didl/DidlBuilder.cs index 565431758f..5d5d24b1c7 100644 --- a/MediaBrowser.Dlna/Didl/DidlBuilder.cs +++ b/MediaBrowser.Dlna/Didl/DidlBuilder.cs @@ -293,8 +293,17 @@ namespace MediaBrowser.Dlna.Didl container.AppendChild(res); } - private string GetDisplayName(BaseItem item, BaseItem context) + private string GetDisplayName(BaseItem item, StubType? itemStubType, BaseItem context) { + if (itemStubType.HasValue && itemStubType.Value == StubType.People) + { + if (item is Video) + { + return _localization.GetLocalizedString("HeaderCastCrew"); + } + return _localization.GetLocalizedString("HeaderPeople"); + } + var episode = item as Episode; var season = context as Season; @@ -491,7 +500,7 @@ namespace MediaBrowser.Dlna.Didl // MediaMonkey for example won't display content without a title //if (filter.Contains("dc:title")) { - AddValue(element, "dc", "title", GetDisplayName(item, context), NS_DC); + AddValue(element, "dc", "title", GetDisplayName(item, itemStubType, context), NS_DC); } element.AppendChild(CreateObjectClass(element.OwnerDocument, item, itemStubType)); diff --git a/MediaBrowser.Dlna/DlnaManager.cs b/MediaBrowser.Dlna/DlnaManager.cs index 219196ecc2..fad23ae425 100644 --- a/MediaBrowser.Dlna/DlnaManager.cs +++ b/MediaBrowser.Dlna/DlnaManager.cs @@ -2,6 +2,7 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; using MediaBrowser.Controller.Dlna; +using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Plugins; using MediaBrowser.Dlna.Profiles; using MediaBrowser.Dlna.Server; @@ -469,13 +470,13 @@ namespace MediaBrowser.Dlna return new DescriptionXmlBuilder(profile, serverUuId, "").GetXml(); } - public DlnaIconResponse GetIcon(string filename) + public ImageStream GetIcon(string filename) { var format = filename.EndsWith(".png", StringComparison.OrdinalIgnoreCase) ? ImageFormat.Png : ImageFormat.Jpg; - return new DlnaIconResponse + return new ImageStream { Format = format, Stream = GetType().Assembly.GetManifestResourceStream("MediaBrowser.Dlna.Images." + filename.ToLower()) diff --git a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs index 82d5e0344c..7fb27e25f5 100644 --- a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs +++ b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs @@ -299,6 +299,9 @@ namespace MediaBrowser.MediaEncoding.Encoder } } + // TODO: Output in webp for smaller sizes + // -f image2 -f webp + // 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 0 -v quiet -vframes 1 -vf \"{2},thumbnail=30\" -f image2 \"{1}\"", inputPath, "-", vf) : string.Format("-i {0} -threads 0 -v quiet -vframes 1 -vf \"{2}\" -f image2 \"{1}\"", inputPath, "-", vf); diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index 1e0c5c7eab..6f0943cfa6 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -422,6 +422,9 @@ Dto\ChapterInfoDto.cs + + Dto\DtoOptions.cs + Dto\GameSystemSummary.cs @@ -1118,6 +1121,9 @@ Users\PinRedeemResult.cs + + Users\UserPolicy.cs + Properties\SharedVersion.cs diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index e1ad7b36a3..088fd023c9 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -387,6 +387,9 @@ Dto\ChapterInfoDto.cs + + Dto\DtoOptions.cs + Dto\GameSystemSummary.cs @@ -1077,6 +1080,9 @@ Users\PinRedeemResult.cs + + Users\UserPolicy.cs + Properties\SharedVersion.cs diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs index c9df615e1c..b9eaf70010 100644 --- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs +++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs @@ -55,6 +55,12 @@ namespace MediaBrowser.Model.Configuration /// true if [save local meta]; otherwise, false. public bool SaveLocalMeta { get; set; } + /// + /// Gets or sets a value indicating whether [enable localized guids]. + /// + /// true if [enable localized guids]; otherwise, false. + public bool EnableLocalizedGuids { get; set; } + /// /// Gets or sets the preferred metadata language. /// diff --git a/MediaBrowser.Model/Dlna/StreamBuilder.cs b/MediaBrowser.Model/Dlna/StreamBuilder.cs index 4907abfd73..fb26f1ff8c 100644 --- a/MediaBrowser.Model/Dlna/StreamBuilder.cs +++ b/MediaBrowser.Model/Dlna/StreamBuilder.cs @@ -298,7 +298,6 @@ namespace MediaBrowser.Model.Dlna playlistItem.VideoCodec = transcodingProfile.VideoCodec; playlistItem.Protocol = transcodingProfile.Protocol; playlistItem.AudioStreamIndex = audioStreamIndex; - playlistItem.VideoProfile = transcodingProfile.VideoProfile; List videoTranscodingConditions = new List(); foreach (CodecProfile i in options.Profile.CodecProfiles) diff --git a/MediaBrowser.Model/Dlna/TranscodingProfile.cs b/MediaBrowser.Model/Dlna/TranscodingProfile.cs index ad82d6facd..d9963eb750 100644 --- a/MediaBrowser.Model/Dlna/TranscodingProfile.cs +++ b/MediaBrowser.Model/Dlna/TranscodingProfile.cs @@ -29,9 +29,6 @@ namespace MediaBrowser.Model.Dlna [XmlAttribute("transcodeSeekInfo")] public TranscodeSeekInfo TranscodeSeekInfo { get; set; } - [XmlAttribute("videoProfile")] - public string VideoProfile { get; set; } - [XmlAttribute("context")] public EncodingContext Context { get; set; } diff --git a/MediaBrowser.Model/Dto/BaseItemDto.cs b/MediaBrowser.Model/Dto/BaseItemDto.cs index a9f13374bc..e0f250deb1 100644 --- a/MediaBrowser.Model/Dto/BaseItemDto.cs +++ b/MediaBrowser.Model/Dto/BaseItemDto.cs @@ -64,7 +64,7 @@ namespace MediaBrowser.Model.Dto public float? Metascore { get; set; } - public bool IsUnidentified { get; set; } + public bool? IsUnidentified { get; set; } public int? AnimeSeriesIndex { get; set; } @@ -217,6 +217,12 @@ namespace MediaBrowser.Model.Dto /// The run time ticks. public long? RunTimeTicks { get; set; } + /// + /// Gets or sets the recursive unplayed item count. + /// + /// The recursive unplayed item count. + public int? RecursiveUnplayedItemCount { get; set; } + /// /// Gets or sets the play access. /// @@ -235,13 +241,6 @@ namespace MediaBrowser.Model.Dto /// The production year. public int? ProductionYear { get; set; } - /// - /// Gets or sets the recursive unplayed item count. - /// - /// The recursive unplayed item count. - [Obsolete] - public int? RecursiveUnplayedItemCount { get; set; } - /// /// Gets or sets the season count. /// diff --git a/MediaBrowser.Model/Dto/DtoOptions.cs b/MediaBrowser.Model/Dto/DtoOptions.cs new file mode 100644 index 0000000000..069d71fceb --- /dev/null +++ b/MediaBrowser.Model/Dto/DtoOptions.cs @@ -0,0 +1,32 @@ +using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Querying; +using System.Collections.Generic; + +namespace MediaBrowser.Model.Dto +{ + public class DtoOptions + { + public List Fields { get; set; } + public List ImageTypes { get; set; } + public int ImageTypeLimit { get; set; } + public bool EnableImages { get; set; } + + public DtoOptions() + { + Fields = new List(); + ImageTypes = new List(); + ImageTypeLimit = int.MaxValue; + EnableImages = true; + } + + public int GetImageLimit(ImageType type) + { + if (EnableImages && ImageTypes.Contains(type)) + { + return ImageTypeLimit; + } + + return 0; + } + } +} diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index df4e6949e1..f7eb54292c 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -125,6 +125,7 @@ + @@ -412,6 +413,7 @@ + diff --git a/MediaBrowser.Model/Querying/ItemFields.cs b/MediaBrowser.Model/Querying/ItemFields.cs index 9ceca311c3..84f6bd651c 100644 --- a/MediaBrowser.Model/Querying/ItemFields.cs +++ b/MediaBrowser.Model/Querying/ItemFields.cs @@ -81,11 +81,21 @@ namespace MediaBrowser.Model.Querying /// Keywords, + /// + /// The media source count + /// + MediaSourceCount, + /// /// The media versions /// MediaSources, + /// + /// The metascore + /// + Metascore, + /// /// The metadata settings /// @@ -101,6 +111,11 @@ namespace MediaBrowser.Model.Querying /// ParentId, + /// + /// The part count + /// + PartCount, + /// /// The physical path of the item /// @@ -126,6 +141,11 @@ namespace MediaBrowser.Model.Querying /// PrimaryImageAspectRatio, + /// + /// The original primary image aspect ratio + /// + OriginalPrimaryImageAspectRatio, + /// /// The revenue /// @@ -171,6 +191,11 @@ namespace MediaBrowser.Model.Querying /// Tags, + /// + /// The vote count + /// + VoteCount, + /// /// The TMDB collection name /// diff --git a/MediaBrowser.Model/Users/UserPolicy.cs b/MediaBrowser.Model/Users/UserPolicy.cs new file mode 100644 index 0000000000..02d1777472 --- /dev/null +++ b/MediaBrowser.Model/Users/UserPolicy.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace MediaBrowser.Model.Users +{ + public class UserPolicy + { + } +} diff --git a/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs b/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs index cff49df10f..cbd75cdeb7 100644 --- a/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs +++ b/MediaBrowser.Server.Implementations/Connect/ConnectManager.cs @@ -88,6 +88,11 @@ namespace MediaBrowser.Server.Implementations.Connect } } + private string XApplicationValue + { + get { return "Media Browser Server/" + _appHost.ApplicationVersion; } + } + public ConnectManager(ILogger logger, IApplicationPaths appPaths, IJsonSerializer json, @@ -204,9 +209,18 @@ namespace MediaBrowser.Server.Implementations.Connect postData["localAddress"] = localAddress; } - using (var stream = await _httpClient.Post(url, postData, CancellationToken.None).ConfigureAwait(false)) + var options = new HttpRequestOptions { - var data = _json.DeserializeFromStream(stream); + Url = url, + CancellationToken = CancellationToken.None + }; + + options.SetPostData(postData); + SetApplicationHeader(options); + + using (var response = await _httpClient.Post(options).ConfigureAwait(false)) + { + var data = _json.DeserializeFromStream(response.Content); _data.ServerId = data.Id; _data.AccessKey = data.AccessKey; @@ -252,6 +266,7 @@ namespace MediaBrowser.Server.Implementations.Connect options.SetPostData(postData); SetServerAccessToken(options); + SetApplicationHeader(options); // No need to examine the response using (var stream = (await _httpClient.Post(options).ConfigureAwait(false)).Content) @@ -398,6 +413,7 @@ namespace MediaBrowser.Server.Implementations.Connect options.SetPostData(postData); SetServerAccessToken(options); + SetApplicationHeader(options); var result = new UserLinkResult(); @@ -517,6 +533,7 @@ namespace MediaBrowser.Server.Implementations.Connect options.SetPostData(postData); SetServerAccessToken(options); + SetApplicationHeader(options); // No need to examine the response using (var stream = (await _httpClient.Post(options).ConfigureAwait(false)).Content) @@ -562,6 +579,7 @@ namespace MediaBrowser.Server.Implementations.Connect }; options.SetPostData(postData); + SetApplicationHeader(options); // No need to examine the response using (var stream = (await _httpClient.Post(options).ConfigureAwait(false)).Content) @@ -629,6 +647,7 @@ namespace MediaBrowser.Server.Implementations.Connect }; SetServerAccessToken(options); + SetApplicationHeader(options); using (var stream = await _httpClient.Get(options).ConfigureAwait(false)) { @@ -645,6 +664,11 @@ namespace MediaBrowser.Server.Implementations.Connect } } + private void SetApplicationHeader(HttpRequestOptions options) + { + options.RequestHeaders.Add("X-Application", XApplicationValue); + } + private void SetServerAccessToken(HttpRequestOptions options) { if (string.IsNullOrWhiteSpace(ConnectAccessKey)) @@ -687,6 +711,7 @@ namespace MediaBrowser.Server.Implementations.Connect }; SetServerAccessToken(options); + SetApplicationHeader(options); try { @@ -974,6 +999,7 @@ namespace MediaBrowser.Server.Implementations.Connect options.SetPostData(postData); SetServerAccessToken(options); + SetApplicationHeader(options); try { @@ -1006,20 +1032,22 @@ namespace MediaBrowser.Server.Implementations.Connect { throw new ArgumentNullException("passwordMd5"); } - - var request = new HttpRequestOptions + + var options = new HttpRequestOptions { Url = GetConnectUrl("user/authenticate") }; - request.SetPostData(new Dictionary + options.SetPostData(new Dictionary { {"userName",username}, {"password",passwordMd5} }); + SetApplicationHeader(options); + // No need to examine the response - using (var stream = (await _httpClient.SendAsync(request, "POST").ConfigureAwait(false)).Content) + using (var response = (await _httpClient.SendAsync(options, "POST").ConfigureAwait(false)).Content) { } } @@ -1062,6 +1090,7 @@ namespace MediaBrowser.Server.Implementations.Connect options.SetPostData(postData); SetServerAccessToken(options); + SetApplicationHeader(options); try { diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index bfed3887f4..b4393572ee 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -69,7 +69,22 @@ namespace MediaBrowser.Server.Implementations.Dto /// item public BaseItemDto GetBaseItemDto(BaseItem item, List fields, User user = null, BaseItem owner = null) { - var dto = GetBaseItemDtoInternal(item, fields, user, owner); + var options = new DtoOptions + { + Fields = fields + }; + + // Get everything + options.ImageTypes = Enum.GetNames(typeof(ImageType)) + .Select(i => (ImageType)Enum.Parse(typeof(ImageType), i, true)) + .ToList(); + + return GetBaseItemDto(item, options, user, owner); + } + + public BaseItemDto GetBaseItemDto(BaseItem item, DtoOptions options, User user = null, BaseItem owner = null) + { + var dto = GetBaseItemDtoInternal(item, options, user, owner); var byName = item as IItemByName; @@ -87,8 +102,10 @@ namespace MediaBrowser.Server.Implementations.Dto return dto; } - private BaseItemDto GetBaseItemDtoInternal(BaseItem item, List fields, User user = null, BaseItem owner = null) + private BaseItemDto GetBaseItemDtoInternal(BaseItem item, DtoOptions options, User user = null, BaseItem owner = null) { + var fields = options.Fields; + if (item == null) { throw new ArgumentNullException("item"); @@ -115,7 +132,7 @@ namespace MediaBrowser.Server.Implementations.Dto { try { - AttachPrimaryImageAspectRatio(dto, item); + AttachPrimaryImageAspectRatio(dto, item, fields); } catch (Exception ex) { @@ -155,7 +172,7 @@ namespace MediaBrowser.Server.Implementations.Dto AttachStudios(dto, item); } - AttachBasicFields(dto, item, owner, fields); + AttachBasicFields(dto, item, owner, options); if (fields.Contains(ItemFields.SyncInfo)) { @@ -174,18 +191,19 @@ namespace MediaBrowser.Server.Implementations.Dto } } - if (item is Playlist) + var playlist = item as Playlist; + if (playlist != null) { - AttachLinkedChildImages(dto, (Folder)item, user); + AttachLinkedChildImages(dto, playlist, user, options); } return dto; } - public BaseItemDto GetItemByNameDto(T item, List fields, List taggedItems, User user = null) + public BaseItemDto GetItemByNameDto(T item, DtoOptions options, List taggedItems, User user = null) where T : BaseItem, IItemByName { - var dto = GetBaseItemDtoInternal(item, fields, user); + var dto = GetBaseItemDtoInternal(item, options, user); SetItemByNameInfo(item, dto, taggedItems, user); @@ -369,36 +387,27 @@ namespace MediaBrowser.Server.Implementations.Dto dto.GameSystem = item.GameSystemName; } - /// - /// Gets the backdrop image tags. - /// - /// The item. - /// List{System.String}. - private List GetBackdropImageTags(BaseItem item) + private List GetBackdropImageTags(BaseItem item, int limit) { - return GetCacheTags(item, ImageType.Backdrop).ToList(); + return GetCacheTags(item, ImageType.Backdrop, limit).ToList(); } - /// - /// Gets the screenshot image tags. - /// - /// The item. - /// List{Guid}. - private List GetScreenshotImageTags(BaseItem item) + private List GetScreenshotImageTags(BaseItem item, int limit) { var hasScreenshots = item as IHasScreenshots; if (hasScreenshots == null) { return new List(); } - return GetCacheTags(item, ImageType.Screenshot).ToList(); + return GetCacheTags(item, ImageType.Screenshot, limit).ToList(); } - private IEnumerable GetCacheTags(BaseItem item, ImageType type) + private IEnumerable GetCacheTags(BaseItem item, ImageType type, int limit) { return item.GetImages(type) .Select(p => GetImageCacheTag(item, p)) .Where(i => i != null) + .Take(limit) .ToList(); } @@ -649,9 +658,11 @@ namespace MediaBrowser.Server.Implementations.Dto /// The dto. /// The item. /// The owner. - /// The fields. - private void AttachBasicFields(BaseItemDto dto, BaseItem item, BaseItem owner, List fields) + /// The options. + private void AttachBasicFields(BaseItemDto dto, BaseItem item, BaseItem owner, DtoOptions options) { + var fields = options.Fields; + if (fields.Contains(ItemFields.DateCreated)) { dto.DateCreated = item.DateCreated; @@ -662,7 +673,11 @@ namespace MediaBrowser.Server.Implementations.Dto dto.DisplayMediaType = item.DisplayMediaType; } - dto.IsUnidentified = item.IsUnidentified; + // Leave null if false + if (item.IsUnidentified) + { + dto.IsUnidentified = item.IsUnidentified; + } if (fields.Contains(ItemFields.Settings)) { @@ -736,10 +751,13 @@ namespace MediaBrowser.Server.Implementations.Dto dto.AspectRatio = hasAspectRatio.AspectRatio; } - var hasMetascore = item as IHasMetascore; - if (hasMetascore != null) + if (fields.Contains(ItemFields.ProductionLocations)) { - dto.Metascore = hasMetascore.Metascore; + var hasMetascore = item as IHasMetascore; + if (hasMetascore != null) + { + dto.Metascore = hasMetascore.Metascore; + } } if (fields.Contains(ItemFields.AwardSummary)) @@ -751,11 +769,19 @@ namespace MediaBrowser.Server.Implementations.Dto } } - dto.BackdropImageTags = GetBackdropImageTags(item); + var backdropLimit = options.GetImageLimit(ImageType.Backdrop); + if (backdropLimit > 0) + { + dto.BackdropImageTags = GetBackdropImageTags(item, backdropLimit); + } if (fields.Contains(ItemFields.ScreenshotImageTags)) { - dto.ScreenshotImageTags = GetScreenshotImageTags(item); + var screenshotLimit = options.GetImageLimit(ImageType.Screenshot); + if (screenshotLimit > 0) + { + dto.ScreenshotImageTags = GetScreenshotImageTags(item, screenshotLimit); + } } if (fields.Contains(ItemFields.Genres)) @@ -769,11 +795,14 @@ namespace MediaBrowser.Server.Implementations.Dto var currentItem = item; foreach (var image in currentItem.ImageInfos.Where(i => !currentItem.AllowsMultipleImages(i.Type))) { - var tag = GetImageCacheTag(item, image); - - if (tag != null) + if (options.GetImageLimit(image.Type) > 0) { - dto.ImageTags[image.Type] = tag; + var tag = GetImageCacheTag(item, image); + + if (tag != null) + { + dto.ImageTags[image.Type] = tag; + } } } @@ -851,14 +880,14 @@ namespace MediaBrowser.Server.Implementations.Dto } // If there are no backdrops, indicate what parent has them in case the Ui wants to allow inheritance - if (dto.BackdropImageTags.Count == 0) + if (backdropLimit > 0 && dto.BackdropImageTags.Count == 0) { var parentWithBackdrop = GetParentBackdropItem(item, owner); if (parentWithBackdrop != null) { dto.ParentBackdropItemId = GetDtoId(parentWithBackdrop); - dto.ParentBackdropImageTags = GetBackdropImageTags(parentWithBackdrop); + dto.ParentBackdropImageTags = GetBackdropImageTags(parentWithBackdrop, backdropLimit); } } @@ -874,7 +903,7 @@ namespace MediaBrowser.Server.Implementations.Dto dto.ParentIndexNumber = item.ParentIndexNumber; // If there is no logo, indicate what parent has one in case the Ui wants to allow inheritance - if (!dto.HasLogo) + if (!dto.HasLogo && options.GetImageLimit(ImageType.Logo) > 0) { var parentWithLogo = GetParentImageItem(item, ImageType.Logo, owner); @@ -887,7 +916,7 @@ namespace MediaBrowser.Server.Implementations.Dto } // If there is no art, indicate what parent has one in case the Ui wants to allow inheritance - if (!dto.HasArtImage) + if (!dto.HasArtImage && options.GetImageLimit(ImageType.Thumb) > 0) { var parentWithImage = GetParentImageItem(item, ImageType.Art, owner); @@ -900,7 +929,7 @@ namespace MediaBrowser.Server.Implementations.Dto } // If there is no thumb, indicate what parent has one in case the Ui wants to allow inheritance - if (!dto.HasThumb) + if (!dto.HasThumb && options.GetImageLimit(ImageType.Thumb) > 0) { var parentWithImage = GetParentImageItem(item, ImageType.Thumb, owner); @@ -953,7 +982,11 @@ namespace MediaBrowser.Server.Implementations.Dto dto.Type = item.GetClientTypeName(); dto.CommunityRating = item.CommunityRating; - dto.VoteCount = item.VoteCount; + + if (fields.Contains(ItemFields.VoteCount)) + { + dto.VoteCount = item.VoteCount; + } if (item.IsFolder) { @@ -1017,8 +1050,15 @@ namespace MediaBrowser.Server.Implementations.Dto dto.IsoType = video.IsoType; dto.IsHD = video.IsHD; - dto.PartCount = video.AdditionalPartIds.Count + 1; - dto.MediaSourceCount = video.MediaSourceCount; + if (fields.Contains(ItemFields.Chapters)) + { + dto.PartCount = video.AdditionalPartIds.Count + 1; + } + + if (fields.Contains(ItemFields.MediaSourceCount)) + { + dto.MediaSourceCount = video.MediaSourceCount; + } if (fields.Contains(ItemFields.Chapters)) { @@ -1200,28 +1240,28 @@ namespace MediaBrowser.Server.Implementations.Dto } } - private void AttachLinkedChildImages(BaseItemDto dto, Folder folder, User user) + private void AttachLinkedChildImages(BaseItemDto dto, Folder folder, User user, DtoOptions options) { List linkedChildren = null; - if (dto.BackdropImageTags.Count == 0) + var backdropLimit = options.GetImageLimit(ImageType.Backdrop); + + if (backdropLimit > 0 && dto.BackdropImageTags.Count == 0) { - if (linkedChildren == null) - { - linkedChildren = user == null - ? folder.GetRecursiveChildren().ToList() - : folder.GetRecursiveChildren(user, true).ToList(); - } + linkedChildren = user == null + ? folder.GetRecursiveChildren().ToList() + : folder.GetRecursiveChildren(user, true).ToList(); + var parentWithBackdrop = linkedChildren.FirstOrDefault(i => i.GetImages(ImageType.Backdrop).Any()); if (parentWithBackdrop != null) { dto.ParentBackdropItemId = GetDtoId(parentWithBackdrop); - dto.ParentBackdropImageTags = GetBackdropImageTags(parentWithBackdrop); + dto.ParentBackdropImageTags = GetBackdropImageTags(parentWithBackdrop, backdropLimit); } } - if (!dto.ImageTags.ContainsKey(ImageType.Primary)) + if (!dto.ImageTags.ContainsKey(ImageType.Primary) && options.GetImageLimit(ImageType.Primary) > 0) { if (linkedChildren == null) { @@ -1380,8 +1420,9 @@ namespace MediaBrowser.Server.Implementations.Dto /// /// The dto. /// The item. + /// The fields. /// Task. - public void AttachPrimaryImageAspectRatio(IItemDto dto, IHasImages item) + public void AttachPrimaryImageAspectRatio(IItemDto dto, IHasImages item, List fields) { var imageInfo = item.GetImageInfo(ImageType.Primary, 0); @@ -1412,7 +1453,10 @@ namespace MediaBrowser.Server.Implementations.Dto return; } - dto.OriginalPrimaryImageAspectRatio = size.Width / size.Height; + if (fields.Contains(ItemFields.OriginalPrimaryImageAspectRatio)) + { + dto.OriginalPrimaryImageAspectRatio = size.Width / size.Height; + } var supportedEnhancers = _imageProcessor.GetSupportedEnhancers(item, ImageType.Primary).ToList(); diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index 63ced85599..81751545c1 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -17,7 +17,6 @@ using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Naming.Audio; using MediaBrowser.Naming.Common; -using MediaBrowser.Naming.IO; using MediaBrowser.Naming.Video; using MediaBrowser.Server.Implementations.Library.Resolvers.TV; using MediaBrowser.Server.Implementations.Library.Validators; @@ -485,12 +484,36 @@ namespace MediaBrowser.Server.Implementations.Library if (item != null) { - ResolverHelper.SetInitialItemValues(item, args, _fileSystem); + ResolverHelper.SetInitialItemValues(item, args, _fileSystem, this); } return item; } + public Guid GetNewItemId(string key, Type type) + { + if (string.IsNullOrWhiteSpace(key)) + { + throw new ArgumentNullException("key"); + } + if (type == null) + { + throw new ArgumentNullException("type"); + } + + if (ConfigurationManager.Configuration.EnableLocalizedGuids && key.StartsWith(ConfigurationManager.ApplicationPaths.ProgramDataPath)) + { + // Try to normalize paths located underneath program-data in an attempt to make them more portable + key = key.Substring(ConfigurationManager.ApplicationPaths.ProgramDataPath.Length) + .TrimStart(new[] { '/', '\\' }) + .Replace("/", "\\"); + } + + key = type.FullName + key.ToLower(); + + return key.GetMD5(); + } + public IEnumerable ReplaceVideosWithPrimaryVersions(IEnumerable items) { var dict = new Dictionary(); @@ -651,7 +674,7 @@ namespace MediaBrowser.Server.Implementations.Library Directory.CreateDirectory(rootFolderPath); - var rootFolder = GetItemById(rootFolderPath.GetMBId(typeof(AggregateFolder))) as AggregateFolder ?? (AggregateFolder)ResolvePath(new DirectoryInfo(rootFolderPath)); + var rootFolder = GetItemById(GetNewItemId(rootFolderPath, typeof(AggregateFolder))) as AggregateFolder ?? (AggregateFolder)ResolvePath(new DirectoryInfo(rootFolderPath)); // Add in the plug-in folders foreach (var child in PluginFolderCreators) @@ -662,7 +685,14 @@ namespace MediaBrowser.Server.Implementations.Library { if (folder.Id == Guid.Empty) { - folder.Id = (folder.Path ?? folder.GetType().Name).GetMBId(folder.GetType()); + if (string.IsNullOrWhiteSpace(folder.Path)) + { + folder.Id = GetNewItemId(folder.GetType().Name, folder.GetType()); + } + else + { + folder.Id = GetNewItemId(folder.Path, folder.GetType()); + } } folder = GetItemById(folder.Id) as BasePluginFolder ?? folder; @@ -685,7 +715,7 @@ namespace MediaBrowser.Server.Implementations.Library Directory.CreateDirectory(userRootPath); - _userRootFolder = GetItemById(userRootPath.GetMBId(typeof(UserRootFolder))) as UserRootFolder ?? + _userRootFolder = GetItemById(GetNewItemId(userRootPath, typeof(UserRootFolder))) as UserRootFolder ?? (UserRootFolder)ResolvePath(new DirectoryInfo(userRootPath)); } @@ -801,7 +831,7 @@ namespace MediaBrowser.Server.Implementations.Library Path.Combine(path, validFilename) : Path.Combine(path, subFolderPrefix, validFilename); - var id = fullPath.GetMBId(type); + var id = GetNewItemId(fullPath, type); BaseItem obj; @@ -1513,7 +1543,7 @@ namespace MediaBrowser.Server.Implementations.Library path = Path.Combine(path, _fileSystem.GetValidFilename(type)); - var id = (path + "_namedview_" + name).GetMBId(typeof(UserView)); + var id = GetNewItemId(path + "_namedview_" + name, typeof(UserView)); var item = GetItemById(id) as UserView; @@ -1578,7 +1608,7 @@ namespace MediaBrowser.Server.Implementations.Library throw new ArgumentNullException("viewType"); } - var id = ("7_namedview_" + name + user.Id.ToString("N") + parentId).GetMBId(typeof(UserView)); + var id = GetNewItemId("7_namedview_" + name + user.Id.ToString("N") + parentId, typeof(UserView)); var path = BaseItem.GetInternalMetadataPathForId(id); diff --git a/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs b/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs index 92c8379322..d071fd2325 100644 --- a/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs +++ b/MediaBrowser.Server.Implementations/Library/ResolverHelper.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.IO; +using MediaBrowser.Common.IO; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using System; @@ -20,7 +19,7 @@ namespace MediaBrowser.Server.Implementations.Library /// The item. /// The args. /// The file system. - public static void SetInitialItemValues(BaseItem item, ItemResolveArgs args, IFileSystem fileSystem) + public static void SetInitialItemValues(BaseItem item, ItemResolveArgs args, IFileSystem fileSystem, ILibraryManager libraryManager) { // If the resolver didn't specify this if (string.IsNullOrEmpty(item.Path)) @@ -34,7 +33,7 @@ namespace MediaBrowser.Server.Implementations.Library item.Parent = args.Parent; } - item.Id = item.Path.GetMBId(item.GetType()); + item.Id = libraryManager.GetNewItemId(item.Path, item.GetType()); // If the resolver didn't specify this if (string.IsNullOrEmpty(item.DisplayMediaType)) diff --git a/MediaBrowser.Server.Implementations/Library/UserManager.cs b/MediaBrowser.Server.Implementations/Library/UserManager.cs index 54c584d47f..ed45e890bf 100644 --- a/MediaBrowser.Server.Implementations/Library/UserManager.cs +++ b/MediaBrowser.Server.Implementations/Library/UserManager.cs @@ -17,6 +17,7 @@ using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Events; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Querying; using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Users; using System; @@ -327,7 +328,10 @@ namespace MediaBrowser.Server.Implementations.Library try { - _dtoServiceFactory().AttachPrimaryImageAspectRatio(dto, user); + _dtoServiceFactory().AttachPrimaryImageAspectRatio(dto, user, new List + { + ItemFields.PrimaryImageAspectRatio + }); } catch (Exception ex) { @@ -765,5 +769,14 @@ namespace MediaBrowser.Server.Implementations.Library public DateTime ExpirationDate { get; set; } } + public UserPolicy GetUserPolicy(string userId) + { + throw new NotImplementedException(); + } + + public Task UpdateUserPolicy(string userId, UserPolicy userPolicy) + { + throw new NotImplementedException(); + } } } diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs index 371619c084..b3066b460f 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs @@ -13,6 +13,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Model.Querying; namespace MediaBrowser.Server.Implementations.LiveTv { @@ -247,7 +248,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv if (imageTag != null) { dto.ImageTags[ImageType.Primary] = imageTag; - _dtoService.AttachPrimaryImageAspectRatio(dto, recording); + _dtoService.AttachPrimaryImageAspectRatio(dto, recording, new List + { + ItemFields.PrimaryImageAspectRatio + }); } if (user != null) @@ -337,7 +341,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv { dto.ImageTags[ImageType.Primary] = imageTag; - _dtoService.AttachPrimaryImageAspectRatio(dto, info); + _dtoService.AttachPrimaryImageAspectRatio(dto, info, new List + { + ItemFields.PrimaryImageAspectRatio + }); } if (currentProgram != null) @@ -401,7 +408,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv if (imageTag != null) { dto.ImageTags[ImageType.Primary] = imageTag; - _dtoService.AttachPrimaryImageAspectRatio(dto, item); + _dtoService.AttachPrimaryImageAspectRatio(dto, item, new List + { + ItemFields.PrimaryImageAspectRatio + }); } if (user != null) diff --git a/MediaBrowser.Server.Implementations/Localization/Server/server.json b/MediaBrowser.Server.Implementations/Localization/Server/server.json index e328ca2c67..6da7adee10 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/server.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/server.json @@ -542,7 +542,7 @@ "HeaderRunningTasks": "Running Tasks", "HeaderActiveDevices": "Active Devices", "HeaderPendingInstallations": "Pending Installations", - "HeaerServerInformation": "Server Information", + "HeaderServerInformation": "Server Information", "ButtonRestartNow": "Restart Now", "ButtonRestart": "Restart", "ButtonShutdown": "Shutdown", From dc8fb33a1f5ad474fed88d58a19c1098c68b815f Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 1 Dec 2014 07:43:34 -0500 Subject: [PATCH 05/15] updated nuget --- MediaBrowser.Api/IHasDtoOptions.cs | 49 +++++++ MediaBrowser.Api/MediaBrowser.Api.csproj | 1 + MediaBrowser.Api/PackageReviewService.cs | 8 +- MediaBrowser.Api/TvShowsService.cs | 30 ++++- .../UserLibrary/BaseItemsRequest.cs | 37 +----- .../UserLibrary/UserLibraryService.cs | 17 ++- .../HttpClientManager/HttpClientManager.cs | 16 ++- .../Security/PluginSecurityManager.cs | 6 +- .../Updates/InstallationManager.cs | 5 +- MediaBrowser.Common/Constants/Constants.cs | 8 -- .../Extensions/BaseExtensions.cs | 53 -------- .../IO/FileSystemRepository.cs | 122 ------------------ .../MediaBrowser.Common.csproj | 2 - MediaBrowser.Controller/Entities/BaseItem.cs | 9 ++ .../ContentDirectory/ContentDirectory.cs | 8 +- .../ContentDirectory/ControlHandler.cs | 71 +++++++++- MediaBrowser.Model/Querying/ItemFields.cs | 10 ++ MediaBrowser.Model/Querying/ItemQuery.cs | 4 + .../Querying/ItemsByNameQuery.cs | 15 +++ .../Querying/LatestItemsQuery.cs | 15 +++ MediaBrowser.Model/Querying/NextUpQuery.cs | 16 +++ .../Querying/UpcomingEpisodesQuery.cs | 15 +++ .../Drawing/ImageProcessor.cs | 16 ++- .../Dto/DtoService.cs | 43 ++++-- .../EntryPoints/UsageReporter.cs | 5 +- .../FileOrganization/TvFolderOrganizer.cs | 3 - .../Library/PathExtensions.cs | 37 ++++++ ...MediaBrowser.Server.Implementations.csproj | 1 + .../ApplicationHost.cs | 4 +- Nuget/MediaBrowser.Common.Internal.nuspec | 4 +- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Model.Signed.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 +- 33 files changed, 368 insertions(+), 270 deletions(-) create mode 100644 MediaBrowser.Api/IHasDtoOptions.cs delete mode 100644 MediaBrowser.Common/Constants/Constants.cs delete mode 100644 MediaBrowser.Common/IO/FileSystemRepository.cs create mode 100644 MediaBrowser.Server.Implementations/Library/PathExtensions.cs diff --git a/MediaBrowser.Api/IHasDtoOptions.cs b/MediaBrowser.Api/IHasDtoOptions.cs new file mode 100644 index 0000000000..f7fb57f014 --- /dev/null +++ b/MediaBrowser.Api/IHasDtoOptions.cs @@ -0,0 +1,49 @@ +using MediaBrowser.Model.Dto; +using MediaBrowser.Model.Entities; +using System; +using System.Linq; + +namespace MediaBrowser.Api +{ + public interface IHasDtoOptions : IHasItemFields + { + bool? EnableImages { get; set; } + + int? ImageTypeLimit { get; set; } + + string EnableImageTypes { get; set; } + } + + public static class HasDtoOptionsExtensions + { + public static DtoOptions GetDtoOptions(this IHasDtoOptions request) + { + var options = new DtoOptions(); + + options.Fields = request.GetItemFields().ToList(); + options.EnableImages = request.EnableImages ?? true; + + if (request.ImageTypeLimit.HasValue) + { + options.ImageTypeLimit = request.ImageTypeLimit.Value; + } + + if (string.IsNullOrWhiteSpace(request.EnableImageTypes)) + { + if (options.EnableImages) + { + // Get everything + options.ImageTypes = Enum.GetNames(typeof(ImageType)) + .Select(i => (ImageType)Enum.Parse(typeof(ImageType), i, true)) + .ToList(); + } + } + else + { + options.ImageTypes = (request.EnableImageTypes ?? string.Empty).Split(',').Where(i => !string.IsNullOrWhiteSpace(i)).Select(v => (ImageType)Enum.Parse(typeof(ImageType), v, true)).ToList(); + } + + return options; + } + } +} diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj index dae3790990..286b807b66 100644 --- a/MediaBrowser.Api/MediaBrowser.Api.csproj +++ b/MediaBrowser.Api/MediaBrowser.Api.csproj @@ -77,6 +77,7 @@ + diff --git a/MediaBrowser.Api/PackageReviewService.cs b/MediaBrowser.Api/PackageReviewService.cs index 112a2c5cea..c4cf1eac31 100644 --- a/MediaBrowser.Api/PackageReviewService.cs +++ b/MediaBrowser.Api/PackageReviewService.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Constants; -using MediaBrowser.Common.Net; +using MediaBrowser.Common.Net; using MediaBrowser.Controller.Net; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Serialization; @@ -103,6 +102,7 @@ namespace MediaBrowser.Api private readonly IHttpClient _httpClient; private readonly INetworkManager _netManager; private readonly IJsonSerializer _serializer; + private const string MbAdminUrl = "http://www.mb3admin.com/admin/"; public PackageReviewService(IHttpClient client, INetworkManager net, IJsonSerializer serializer) { @@ -132,7 +132,7 @@ namespace MediaBrowser.Api parms += "&title=true"; } - var result = _httpClient.Get(Constants.MbAdminUrl + "/service/packageReview/retrieve" + parms, CancellationToken.None).Result; + var result = _httpClient.Get(MbAdminUrl + "/service/packageReview/retrieve" + parms, CancellationToken.None).Result; var reviews = _serializer.DeserializeFromStream>(result); @@ -153,7 +153,7 @@ namespace MediaBrowser.Api { "review", reviewText }, }; - Task.WaitAll(_httpClient.Post(Constants.MbAdminUrl + "/service/packageReview/update", review, CancellationToken.None)); + Task.WaitAll(_httpClient.Post(MbAdminUrl + "/service/packageReview/update", review, CancellationToken.None)); } } } diff --git a/MediaBrowser.Api/TvShowsService.cs b/MediaBrowser.Api/TvShowsService.cs index 2f9bbca476..d1464cd262 100644 --- a/MediaBrowser.Api/TvShowsService.cs +++ b/MediaBrowser.Api/TvShowsService.cs @@ -19,7 +19,7 @@ namespace MediaBrowser.Api /// Class GetNextUpEpisodes /// [Route("/Shows/NextUp", "GET", Summary = "Gets a list of next up episodes")] - public class GetNextUpEpisodes : IReturn, IHasItemFields + public class GetNextUpEpisodes : IReturn, IHasDtoOptions { /// /// Gets or sets the user id. @@ -58,10 +58,19 @@ namespace MediaBrowser.Api /// The parent id. [ApiMember(Name = "ParentId", Description = "Specify this to localize the search to a specific item or folder. Omit to use the root", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] public string ParentId { get; set; } + + [ApiMember(Name = "EnableImages", Description = "Optional, include image information in output", IsRequired = false, DataType = "boolean", ParameterType = "query", Verb = "GET")] + public bool? EnableImages { get; set; } + + [ApiMember(Name = "ImageTypeLimit", Description = "Optional, the max number of images to return, per image type", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")] + public int? ImageTypeLimit { get; set; } + + [ApiMember(Name = "EnableImageTypes", Description = "Optional. The image types to include in the output.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] + public string EnableImageTypes { get; set; } } [Route("/Shows/Upcoming", "GET", Summary = "Gets a list of upcoming episodes")] - public class GetUpcomingEpisodes : IReturn, IHasItemFields + public class GetUpcomingEpisodes : IReturn, IHasDtoOptions { /// /// Gets or sets the user id. @@ -97,6 +106,15 @@ namespace MediaBrowser.Api /// The parent id. [ApiMember(Name = "ParentId", Description = "Specify this to localize the search to a specific item or folder. Omit to use the root", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] public string ParentId { get; set; } + + [ApiMember(Name = "EnableImages", Description = "Optional, include image information in output", IsRequired = false, DataType = "boolean", ParameterType = "query", Verb = "GET")] + public bool? EnableImages { get; set; } + + [ApiMember(Name = "ImageTypeLimit", Description = "Optional, the max number of images to return, per image type", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")] + public int? ImageTypeLimit { get; set; } + + [ApiMember(Name = "EnableImageTypes", Description = "Optional. The image types to include in the output.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] + public string EnableImageTypes { get; set; } } [Route("/Shows/{Id}/Similar", "GET", Summary = "Finds tv shows similar to a given one.")] @@ -252,9 +270,9 @@ namespace MediaBrowser.Api var pagedItems = ApplyPaging(previousEpisodes, request.StartIndex, request.Limit); - var fields = request.GetItemFields().ToList(); + var options = request.GetDtoOptions(); - var returnItems = pagedItems.Select(i => _dtoService.GetBaseItemDto(i, fields, user)).ToArray(); + var returnItems = pagedItems.Select(i => _dtoService.GetBaseItemDto(i, options, user)).ToArray(); var result = new ItemsResult { @@ -283,9 +301,9 @@ namespace MediaBrowser.Api var user = _userManager.GetUserById(request.UserId); - var fields = request.GetItemFields().ToList(); + var options = request.GetDtoOptions(); - var returnItems = result.Items.Select(i => _dtoService.GetBaseItemDto(i, fields, user)).ToArray(); + var returnItems = result.Items.Select(i => _dtoService.GetBaseItemDto(i, options, user)).ToArray(); return ToOptimizedSerializedResultUsingCache(new ItemsResult { diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs b/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs index 808dbb1ff9..fffc11d68f 100644 --- a/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs +++ b/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Entities; using MediaBrowser.Model.Querying; using ServiceStack; using System; @@ -8,7 +7,7 @@ using System.Linq; namespace MediaBrowser.Api.UserLibrary { - public abstract class BaseItemsRequest : IHasItemFields + public abstract class BaseItemsRequest : IHasDtoOptions { protected BaseItemsRequest() { @@ -123,7 +122,7 @@ namespace MediaBrowser.Api.UserLibrary public string Years { get; set; } [ApiMember(Name = "EnableImages", Description = "Optional, include image information in output", IsRequired = false, DataType = "boolean", ParameterType = "query", Verb = "GET")] - public bool EnableImages { get; set; } + public bool? EnableImages { get; set; } [ApiMember(Name = "ImageTypeLimit", Description = "Optional, the max number of images to return, per image type", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")] public int? ImageTypeLimit { get; set; } @@ -213,35 +212,5 @@ namespace MediaBrowser.Api.UserLibrary return val.Split(','); } - - public DtoOptions GetDtoOptions() - { - var options = new DtoOptions(); - - options.Fields = this.GetItemFields().ToList(); - options.EnableImages = EnableImages; - - if (ImageTypeLimit.HasValue) - { - options.ImageTypeLimit = ImageTypeLimit.Value; - } - - if (string.IsNullOrWhiteSpace(EnableImageTypes)) - { - if (options.EnableImages) - { - // Get everything - options.ImageTypes = Enum.GetNames(typeof(ImageType)) - .Select(i => (ImageType)Enum.Parse(typeof(ImageType), i, true)) - .ToList(); - } - } - else - { - options.ImageTypes = (EnableImageTypes ?? string.Empty).Split(',').Where(i => !string.IsNullOrWhiteSpace(i)).Select(v => (ImageType)Enum.Parse(typeof(ImageType), v, true)).ToList(); - } - - return options; - } } } diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs index 511312a631..a64e0758ab 100644 --- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs +++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs @@ -221,7 +221,7 @@ namespace MediaBrowser.Api.UserLibrary } [Route("/Users/{UserId}/Items/Latest", "GET", Summary = "Gets latest media")] - public class GetLatestMedia : IReturn>, IHasItemFields + public class GetLatestMedia : IReturn>, IHasDtoOptions { /// /// Gets or sets the user id. @@ -251,6 +251,15 @@ namespace MediaBrowser.Api.UserLibrary [ApiMember(Name = "GroupItems", Description = "Whether or not to group items into a parent container.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")] public bool GroupItems { get; set; } + [ApiMember(Name = "EnableImages", Description = "Optional, include image information in output", IsRequired = false, DataType = "boolean", ParameterType = "query", Verb = "GET")] + public bool? EnableImages { get; set; } + + [ApiMember(Name = "ImageTypeLimit", Description = "Optional, the max number of images to return, per image type", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")] + public int? ImageTypeLimit { get; set; } + + [ApiMember(Name = "EnableImageTypes", Description = "Optional. The image types to include in the output.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] + public string EnableImageTypes { get; set; } + public GetLatestMedia() { Limit = 20; @@ -362,7 +371,7 @@ namespace MediaBrowser.Api.UserLibrary } } - var fields = request.GetItemFields().ToList(); + var options = request.GetDtoOptions(); var dtos = list.Select(i => { @@ -374,8 +383,8 @@ namespace MediaBrowser.Api.UserLibrary item = i.Item1; childCount = i.Item2.Count; } - - var dto = _dtoService.GetBaseItemDto(item, fields, user); + + var dto = _dtoService.GetBaseItemDto(item, options, user); dto.ChildCount = childCount; diff --git a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs index 900009a238..78b0b13899 100644 --- a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs +++ b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Common.Configuration; +using System.Net.Sockets; +using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; using MediaBrowser.Common.Net; @@ -134,9 +135,22 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager request.Referer = options.Referer; } + request.ServicePoint.BindIPEndPointDelegate = BindIPEndPointCallback; + return request; } + private static IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount) + { + // Prefer local ipv4 + if (remoteEndPoint.AddressFamily == AddressFamily.InterNetworkV6) + { + return new IPEndPoint(IPAddress.IPv6Any, 0); + } + + return new IPEndPoint(IPAddress.Any, 0); + } + private void AddRequestHeaders(HttpWebRequest request, HttpRequestOptions options) { foreach (var header in options.RequestHeaders.ToList()) diff --git a/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs b/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs index 2c387a4ddf..8da3006a37 100644 --- a/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs +++ b/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs @@ -17,7 +17,9 @@ namespace MediaBrowser.Common.Implementations.Security /// public class PluginSecurityManager : ISecurityManager { - private const string MBValidateUrl = Constants.Constants.MbAdminUrl + "service/registration/validate"; + private const string MbAdminUrl = "http://www.mb3admin.com/admin/"; + + private const string MBValidateUrl = MbAdminUrl + "service/registration/validate"; /// /// The _is MB supporter @@ -160,7 +162,7 @@ namespace MediaBrowser.Common.Implementations.Security return new SupporterInfo(); } - var url = Constants.Constants.MbAdminUrl + "/service/supporter/retrieve?key=" + key; + var url = MbAdminUrl + "/service/supporter/retrieve?key=" + key; using (var stream = await _httpClient.Get(url, CancellationToken.None).ConfigureAwait(false)) { diff --git a/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs b/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs index b022dc6719..275e75188c 100644 --- a/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs +++ b/MediaBrowser.Common.Implementations/Updates/InstallationManager.cs @@ -161,7 +161,7 @@ namespace MediaBrowser.Common.Implementations.Updates { "systemid", _applicationHost.SystemId } }; - using (var json = await _httpClient.Post(Constants.Constants.MbAdminUrl + "service/package/retrieveall", data, cancellationToken).ConfigureAwait(false)) + using (var json = await _httpClient.Post(MbAdminUrl + "service/package/retrieveall", data, cancellationToken).ConfigureAwait(false)) { cancellationToken.ThrowIfCancellationRequested(); @@ -172,6 +172,7 @@ namespace MediaBrowser.Common.Implementations.Updates } private Tuple, DateTime> _lastPackageListResult; + private const string MbAdminUrl = "http://www.mb3admin.com/admin/"; /// /// Gets all available packages. @@ -203,7 +204,7 @@ namespace MediaBrowser.Common.Implementations.Updates } } - using (var json = await _httpClient.Get(Constants.Constants.MbAdminUrl + "service/MB3Packages.json", cancellationToken).ConfigureAwait(false)) + using (var json = await _httpClient.Get(MbAdminUrl + "service/MB3Packages.json", cancellationToken).ConfigureAwait(false)) { cancellationToken.ThrowIfCancellationRequested(); diff --git a/MediaBrowser.Common/Constants/Constants.cs b/MediaBrowser.Common/Constants/Constants.cs deleted file mode 100644 index d569fd8eae..0000000000 --- a/MediaBrowser.Common/Constants/Constants.cs +++ /dev/null @@ -1,8 +0,0 @@ - -namespace MediaBrowser.Common.Constants -{ - public static class Constants - { - public const string MbAdminUrl = "http://www.mb3admin.com/admin/"; - } -} diff --git a/MediaBrowser.Common/Extensions/BaseExtensions.cs b/MediaBrowser.Common/Extensions/BaseExtensions.cs index 4daee48753..8e96373f44 100644 --- a/MediaBrowser.Common/Extensions/BaseExtensions.cs +++ b/MediaBrowser.Common/Extensions/BaseExtensions.cs @@ -1,5 +1,4 @@ using System; -using System.Globalization; using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; @@ -55,28 +54,6 @@ namespace MediaBrowser.Common.Extensions return sb.ToString(); } - /// - /// Removes the accent. - /// - /// The text. - /// System.String. - public static string RemoveAccent(this string text) - { - var normalizedString = text.Normalize(NormalizationForm.FormD); - var stringBuilder = new StringBuilder(); - - foreach (var c in normalizedString) - { - var unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c); - if (unicodeCategory != UnicodeCategory.NonSpacingMark) - { - stringBuilder.Append(c); - } - } - - return stringBuilder.ToString().Normalize(NormalizationForm.FormC); - } - /// /// Gets the M d5. /// @@ -109,35 +86,5 @@ namespace MediaBrowser.Common.Extensions return key.GetMD5(); } - - /// - /// Gets the attribute value. - /// - /// The STR. - /// The attrib. - /// System.String. - /// attrib - public static string GetAttributeValue(this string str, string attrib) - { - if (string.IsNullOrEmpty(str)) - { - throw new ArgumentNullException("str"); - } - - if (string.IsNullOrEmpty(attrib)) - { - throw new ArgumentNullException("attrib"); - } - - string srch = "[" + attrib + "="; - int start = str.IndexOf(srch, StringComparison.OrdinalIgnoreCase); - if (start > -1) - { - start += srch.Length; - int end = str.IndexOf(']', start); - return str.Substring(start, end - start); - } - return null; - } } } diff --git a/MediaBrowser.Common/IO/FileSystemRepository.cs b/MediaBrowser.Common/IO/FileSystemRepository.cs deleted file mode 100644 index 07328d72d9..0000000000 --- a/MediaBrowser.Common/IO/FileSystemRepository.cs +++ /dev/null @@ -1,122 +0,0 @@ -using MediaBrowser.Common.Extensions; -using System; -using System.IO; - -namespace MediaBrowser.Common.IO -{ - /// - /// This is a wrapper for storing large numbers of files within a directory on a file system. - /// Simply pass a filename into GetResourcePath and it will return a full path location of where the file should be stored. - /// - public class FileSystemRepository - { - /// - /// Gets or sets the path. - /// - /// The path. - protected string Path { get; set; } - - /// - /// Initializes a new instance of the class. - /// - /// The path. - /// - public FileSystemRepository(string path) - { - if (string.IsNullOrEmpty(path)) - { - throw new ArgumentNullException(); - } - - Path = path; - } - - /// - /// Gets the full path of where a resource should be stored within the repository - /// - /// Name of the unique. - /// The file extension. - /// System.String. - /// - /// - public string GetResourcePath(string uniqueName, string fileExtension) - { - if (string.IsNullOrEmpty(uniqueName)) - { - throw new ArgumentNullException("uniqueName"); - } - - if (string.IsNullOrEmpty(fileExtension)) - { - throw new ArgumentNullException("fileExtension"); - } - - var filename = uniqueName.GetMD5() + fileExtension; - - return GetResourcePath(filename); - } - - /// - /// Gets the resource path. - /// - /// The filename. - /// System.String. - /// - public string GetResourcePath(string filename) - { - if (string.IsNullOrEmpty(filename)) - { - throw new ArgumentNullException("filename"); - } - - var prefix = filename.Substring(0, 1); - - var path = System.IO.Path.Combine(Path, prefix); - - return System.IO.Path.Combine(path, filename); - } - - /// - /// Determines if a resource is present in the repository - /// - /// Name of the unique. - /// The file extension. - /// true if the specified unique name contains resource; otherwise, false. - public bool ContainsResource(string uniqueName, string fileExtension) - { - return ContainsFilePath(GetResourcePath(uniqueName, fileExtension)); - } - - /// - /// Determines if a file with a given name is present in the repository - /// - /// The filename. - /// true if the specified filename contains filename; otherwise, false. - /// - public bool ContainsFilename(string filename) - { - if (string.IsNullOrEmpty(filename)) - { - throw new ArgumentNullException(); - } - - return ContainsFilePath(GetResourcePath(filename)); - } - - /// - /// Determines if a file is present in the repository - /// - /// The path. - /// true if [contains file path] [the specified path]; otherwise, false. - /// - public bool ContainsFilePath(string path) - { - if (string.IsNullOrEmpty(path)) - { - throw new ArgumentNullException(); - } - - return File.Exists(path); - } - } -} diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index 6e96feed3a..9fdfccaaf6 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -57,12 +57,10 @@ - - diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index ea615f023d..c784098479 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -361,6 +361,15 @@ namespace MediaBrowser.Controller.Entities } } + public bool ContainsPerson(string name) + { + if (string.IsNullOrWhiteSpace(name)) + { + throw new ArgumentNullException("name"); + } + return People.Any(i => string.Equals(i.Name, name, StringComparison.OrdinalIgnoreCase)); + } + public string GetInternalMetadataPath() { return GetInternalMetadataPath(ConfigurationManager.ApplicationPaths.InternalMetadataPath); diff --git a/MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs b/MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs index 87f705e16a..d4be1b2f4e 100644 --- a/MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs +++ b/MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Dlna; using MediaBrowser.Controller.Drawing; @@ -23,6 +24,7 @@ namespace MediaBrowser.Dlna.ContentDirectory private readonly IServerConfigurationManager _config; private readonly IUserManager _userManager; private readonly ILocalizationManager _localization; + private readonly IChannelManager _channelManager; public ContentDirectory(IDlnaManager dlna, IUserDataManager userDataManager, @@ -31,7 +33,7 @@ namespace MediaBrowser.Dlna.ContentDirectory IServerConfigurationManager config, IUserManager userManager, ILogger logger, - IHttpClient httpClient, ILocalizationManager localization) + IHttpClient httpClient, ILocalizationManager localization, IChannelManager channelManager) : base(logger, httpClient) { _dlna = dlna; @@ -41,6 +43,7 @@ namespace MediaBrowser.Dlna.ContentDirectory _config = config; _userManager = userManager; _localization = localization; + _channelManager = channelManager; } private int SystemUpdateId @@ -77,7 +80,8 @@ namespace MediaBrowser.Dlna.ContentDirectory user, SystemUpdateId, _config, - _localization) + _localization, + _channelManager) .ProcessControlRequest(request); } diff --git a/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs b/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs index d979e3d891..85be840165 100644 --- a/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs +++ b/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs @@ -1,13 +1,16 @@ using MediaBrowser.Common.Extensions; +using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; +using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Localization; using MediaBrowser.Dlna.Didl; using MediaBrowser.Dlna.Server; using MediaBrowser.Dlna.Service; +using MediaBrowser.Model.Channels; using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -26,6 +29,7 @@ namespace MediaBrowser.Dlna.ContentDirectory public class ControlHandler : BaseControlHandler { private readonly ILibraryManager _libraryManager; + private readonly IChannelManager _channelManager; private readonly IUserDataManager _userDataManager; private readonly User _user; @@ -41,13 +45,14 @@ namespace MediaBrowser.Dlna.ContentDirectory private readonly DeviceProfile _profile; - public ControlHandler(ILogger logger, ILibraryManager libraryManager, DeviceProfile profile, string serverAddress, IImageProcessor imageProcessor, IUserDataManager userDataManager, User user, int systemUpdateId, IServerConfigurationManager config, ILocalizationManager localization) + public ControlHandler(ILogger logger, ILibraryManager libraryManager, DeviceProfile profile, string serverAddress, IImageProcessor imageProcessor, IUserDataManager userDataManager, User user, int systemUpdateId, IServerConfigurationManager config, ILocalizationManager localization, IChannelManager channelManager) : base(config, logger) { _libraryManager = libraryManager; _userDataManager = userDataManager; _user = user; _systemUpdateId = systemUpdateId; + _channelManager = channelManager; _profile = profile; _didlBuilder = new DidlBuilder(profile, user, imageProcessor, serverAddress, userDataManager, localization); @@ -412,7 +417,7 @@ namespace MediaBrowser.Dlna.ContentDirectory var result = new QueryResult { - Items = items.Select(i => new ServerItem { Item = i }).ToArray(), + Items = items.Select(i => new ServerItem { Item = i, StubType = StubType.Folder }).ToArray(), TotalRecordCount = items.Length }; @@ -426,6 +431,14 @@ namespace MediaBrowser.Dlna.ContentDirectory return ApplyPaging(await GetMovieItems(movie).ConfigureAwait(false), startIndex, limit); } } + + var person = item as Person; + if (person != null) + { + return await GetItemsFromPerson(person, user, startIndex, limit).ConfigureAwait(false); + } + + return ApplyPaging(new QueryResult(), startIndex, limit); } var folder = (Folder)item; @@ -463,6 +476,42 @@ namespace MediaBrowser.Dlna.ContentDirectory }; } + private async Task> GetItemsFromPerson(Person person, User user, int? startIndex, int? limit) + { + var items = user.RootFolder.GetRecursiveChildren(user) + .Where(i => i is Movie || i is Series) + .Where(i => i.ContainsPerson(person.Name)) + .ToList(); + + var trailerResult = await _channelManager.GetAllMediaInternal(new AllChannelMediaQuery + { + ContentTypes = new[] { ChannelMediaContentType.MovieExtra }, + ExtraTypes = new[] { ExtraType.Trailer }, + UserId = user.Id.ToString("N") + + }, CancellationToken.None).ConfigureAwait(false); + + items.AddRange(trailerResult.Items.Where(i => i.ContainsPerson(person.Name))); + + items = _libraryManager.Sort(items, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending) + .Skip(startIndex ?? 0) + .Take(limit ?? int.MaxValue) + .ToList(); + + var serverItems = items.Select(i => new ServerItem + { + Item = i, + StubType = null + }) + .ToArray(); + + return new QueryResult + { + TotalRecordCount = serverItems.Length, + Items = serverItems + }; + } + private QueryResult ApplyPaging(QueryResult result, int? startIndex, int? limit) { result.Items = result.Items.Skip(startIndex ?? 0).Take(limit ?? int.MaxValue).ToArray(); @@ -482,17 +531,27 @@ namespace MediaBrowser.Dlna.ContentDirectory { return StubType.Folder; } + } - if (movie.People.Count > 0) - { - return StubType.Folder; - } + if (EnablePeopleDisplay(item)) + { + return StubType.Folder; } } return null; } + private bool EnablePeopleDisplay(BaseItem item) + { + if (item.People.Count > 0) + { + return item is Movie; + } + + return false; + } + private Task> GetMovieItems(Movie item) { var list = new List(); diff --git a/MediaBrowser.Model/Querying/ItemFields.cs b/MediaBrowser.Model/Querying/ItemFields.cs index 84f6bd651c..ec37c75d01 100644 --- a/MediaBrowser.Model/Querying/ItemFields.cs +++ b/MediaBrowser.Model/Querying/ItemFields.cs @@ -6,6 +6,11 @@ namespace MediaBrowser.Model.Querying /// public enum ItemFields { + /// + /// The alternate episode numbers + /// + AlternateEpisodeNumbers, + /// /// The awards summary /// @@ -161,6 +166,11 @@ namespace MediaBrowser.Model.Querying /// ScreenshotImageTags, + /// + /// The series studio + /// + SeriesStudio, + /// /// The soundtrack ids /// diff --git a/MediaBrowser.Model/Querying/ItemQuery.cs b/MediaBrowser.Model/Querying/ItemQuery.cs index 3969eedaa8..e535e8218e 100644 --- a/MediaBrowser.Model/Querying/ItemQuery.cs +++ b/MediaBrowser.Model/Querying/ItemQuery.cs @@ -282,6 +282,10 @@ namespace MediaBrowser.Model.Querying public DateTime? MinPremiereDate { get; set; } public DateTime? MaxPremiereDate { get; set; } + + public bool? EnableImages { get; set; } + public int? ImageTypeLimit { get; set; } + public string EnableImageTypes { get; set; } /// /// Initializes a new instance of the class. diff --git a/MediaBrowser.Model/Querying/ItemsByNameQuery.cs b/MediaBrowser.Model/Querying/ItemsByNameQuery.cs index bef2f7aed3..1780226288 100644 --- a/MediaBrowser.Model/Querying/ItemsByNameQuery.cs +++ b/MediaBrowser.Model/Querying/ItemsByNameQuery.cs @@ -101,6 +101,21 @@ namespace MediaBrowser.Model.Querying /// /// null if [is played] contains no value, true if [is played]; otherwise, false. public bool? IsPlayed { get; set; } + /// + /// Gets or sets a value indicating whether [enable images]. + /// + /// null if [enable images] contains no value, true if [enable images]; otherwise, false. + public bool? EnableImages { get; set; } + /// + /// Gets or sets the image type limit. + /// + /// The image type limit. + public int? ImageTypeLimit { get; set; } + /// + /// Gets or sets the enable image types. + /// + /// The enable image types. + public string EnableImageTypes { get; set; } /// /// Initializes a new instance of the class. diff --git a/MediaBrowser.Model/Querying/LatestItemsQuery.cs b/MediaBrowser.Model/Querying/LatestItemsQuery.cs index ccf5ab087b..4537378f58 100644 --- a/MediaBrowser.Model/Querying/LatestItemsQuery.cs +++ b/MediaBrowser.Model/Querying/LatestItemsQuery.cs @@ -50,5 +50,20 @@ namespace MediaBrowser.Model.Querying /// /// true if [group items]; otherwise, false. public bool GroupItems { get; set; } + /// + /// Gets or sets a value indicating whether [enable images]. + /// + /// null if [enable images] contains no value, true if [enable images]; otherwise, false. + public bool? EnableImages { get; set; } + /// + /// Gets or sets the image type limit. + /// + /// The image type limit. + public int? ImageTypeLimit { get; set; } + /// + /// Gets or sets the enable image types. + /// + /// The enable image types. + public string EnableImageTypes { get; set; } } } diff --git a/MediaBrowser.Model/Querying/NextUpQuery.cs b/MediaBrowser.Model/Querying/NextUpQuery.cs index 0e9c9882f3..c3178b8eb6 100644 --- a/MediaBrowser.Model/Querying/NextUpQuery.cs +++ b/MediaBrowser.Model/Querying/NextUpQuery.cs @@ -38,5 +38,21 @@ namespace MediaBrowser.Model.Querying /// /// The fields. public ItemFields[] Fields { get; set; } + /// + /// Gets or sets a value indicating whether [enable images]. + /// + /// null if [enable images] contains no value, true if [enable images]; otherwise, false. + public bool? EnableImages { get; set; } + /// + /// Gets or sets the image type limit. + /// + /// The image type limit. + public int? ImageTypeLimit { get; set; } + /// + /// Gets or sets the enable image types. + /// + /// The enable image types. + public string EnableImageTypes { get; set; } + } } diff --git a/MediaBrowser.Model/Querying/UpcomingEpisodesQuery.cs b/MediaBrowser.Model/Querying/UpcomingEpisodesQuery.cs index e5a875e883..359babeb23 100644 --- a/MediaBrowser.Model/Querying/UpcomingEpisodesQuery.cs +++ b/MediaBrowser.Model/Querying/UpcomingEpisodesQuery.cs @@ -31,5 +31,20 @@ /// /// The fields. public ItemFields[] Fields { get; set; } + /// + /// Gets or sets a value indicating whether [enable images]. + /// + /// null if [enable images] contains no value, true if [enable images]; otherwise, false. + public bool? EnableImages { get; set; } + /// + /// Gets or sets the image type limit. + /// + /// The image type limit. + public int? ImageTypeLimit { get; set; } + /// + /// Gets or sets the enable image types. + /// + /// The enable image types. + public string EnableImageTypes { get; set; } } } \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs b/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs index 29993d675e..4203f4cc19 100644 --- a/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs +++ b/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs @@ -787,12 +787,24 @@ namespace MediaBrowser.Server.Implementations.Drawing Directory.CreateDirectory(parentDirectory); - using (var newImage = Image.FromStream(newImageStream.Stream, true, false)) + // Save as png + if (newImageStream.Format == Model.Drawing.ImageFormat.Png) { //And then save it in the cache using (var outputStream = _fileSystem.GetFileStream(enhancedImagePath, FileMode.Create, FileAccess.Write, FileShare.Read, false)) { - newImage.Save(System.Drawing.Imaging.ImageFormat.Png, outputStream, 100); + await newImageStream.Stream.CopyToAsync(outputStream).ConfigureAwait(false); + } + } + else + { + using (var newImage = Image.FromStream(newImageStream.Stream, true, false)) + { + //And then save it in the cache + using (var outputStream = _fileSystem.GetFileStream(enhancedImagePath, FileMode.Create, FileAccess.Write, FileShare.Read, false)) + { + newImage.Save(System.Drawing.Imaging.ImageFormat.Png, outputStream, 100); + } } } } diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index b4393572ee..c420ddabbb 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -1020,7 +1020,10 @@ namespace MediaBrowser.Server.Implementations.Dto dto.AlbumPrimaryImageTag = GetImageCacheTag(albumParent, ImageType.Primary); } - dto.MediaSourceCount = 1; + //if (fields.Contains(ItemFields.MediaSourceCount)) + //{ + // Songs always have one + //} } var album = item as MusicAlbum; @@ -1057,7 +1060,10 @@ namespace MediaBrowser.Server.Implementations.Dto if (fields.Contains(ItemFields.MediaSourceCount)) { - dto.MediaSourceCount = video.MediaSourceCount; + if (video.MediaSourceCount != 1) + { + dto.MediaSourceCount = video.MediaSourceCount; + } } if (fields.Contains(ItemFields.Chapters)) @@ -1120,12 +1126,16 @@ namespace MediaBrowser.Server.Implementations.Dto { dto.IndexNumberEnd = episode.IndexNumberEnd; - dto.DvdSeasonNumber = episode.DvdSeasonNumber; - dto.DvdEpisodeNumber = episode.DvdEpisodeNumber; + if (fields.Contains(ItemFields.AlternateEpisodeNumbers)) + { + dto.DvdSeasonNumber = episode.DvdSeasonNumber; + dto.DvdEpisodeNumber = episode.DvdEpisodeNumber; + dto.AbsoluteEpisodeNumber = episode.AbsoluteEpisodeNumber; + } + dto.AirsAfterSeasonNumber = episode.AirsAfterSeasonNumber; dto.AirsBeforeEpisodeNumber = episode.AirsBeforeEpisodeNumber; dto.AirsBeforeSeasonNumber = episode.AirsBeforeSeasonNumber; - dto.AbsoluteEpisodeNumber = episode.AbsoluteEpisodeNumber; var episodeSeason = episode.Season; if (episodeSeason != null) @@ -1163,9 +1173,21 @@ namespace MediaBrowser.Server.Implementations.Dto dto.SeriesId = GetDtoId(series); dto.SeriesName = series.Name; dto.AirTime = series.AirTime; - dto.SeriesStudio = series.Studios.FirstOrDefault(); - dto.SeriesThumbImageTag = GetImageCacheTag(series, ImageType.Thumb); - dto.SeriesPrimaryImageTag = GetImageCacheTag(series, ImageType.Primary); + + if (options.GetImageLimit(ImageType.Thumb) > 0) + { + dto.SeriesThumbImageTag = GetImageCacheTag(series, ImageType.Thumb); + } + + if (options.GetImageLimit(ImageType.Primary) > 0) + { + dto.SeriesPrimaryImageTag = GetImageCacheTag(series, ImageType.Primary); + } + + if (fields.Contains(ItemFields.SeriesStudio)) + { + dto.SeriesStudio = series.Studios.FirstOrDefault(); + } } } @@ -1183,7 +1205,10 @@ namespace MediaBrowser.Server.Implementations.Dto dto.AirTime = series.AirTime; dto.SeriesStudio = series.Studios.FirstOrDefault(); - dto.SeriesPrimaryImageTag = GetImageCacheTag(series, ImageType.Primary); + if (options.GetImageLimit(ImageType.Primary) > 0) + { + dto.SeriesPrimaryImageTag = GetImageCacheTag(series, ImageType.Primary); + } } } diff --git a/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs b/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs index 85410faf2b..36ba55828a 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs +++ b/MediaBrowser.Server.Implementations/EntryPoints/UsageReporter.cs @@ -12,6 +12,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints private readonly IApplicationHost _applicationHost; private readonly INetworkManager _networkManager; private readonly IHttpClient _httpClient; + private const string MbAdminUrl = "http://www.mb3admin.com/admin/"; public UsageReporter(IApplicationHost applicationHost, INetworkManager networkManager, IHttpClient httpClient) { @@ -37,7 +38,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints { "isservice", _applicationHost.IsRunningAsService.ToString().ToLower()} }; - return _httpClient.Post(Common.Constants.Constants.MbAdminUrl + "service/registration/ping", data, cancellationToken); + return _httpClient.Post(MbAdminUrl + "service/registration/ping", data, cancellationToken); } public Task ReportAppUsage(ClientInfo app, CancellationToken cancellationToken) @@ -59,7 +60,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints { "platform", app.DeviceName }, }; - return _httpClient.Post(Common.Constants.Constants.MbAdminUrl + "service/registration/ping", data, cancellationToken); + return _httpClient.Post(MbAdminUrl + "service/registration/ping", data, cancellationToken); } } diff --git a/MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs b/MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs index c41aebb694..cf120f1476 100644 --- a/MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs +++ b/MediaBrowser.Server.Implementations/FileOrganization/TvFolderOrganizer.cs @@ -3,8 +3,6 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.FileOrganization; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; -using MediaBrowser.Controller.Resolvers; -using MediaBrowser.Model.Configuration; using MediaBrowser.Model.FileOrganization; using MediaBrowser.Model.Logging; using System; @@ -13,7 +11,6 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Server.Implementations.Library; namespace MediaBrowser.Server.Implementations.FileOrganization { diff --git a/MediaBrowser.Server.Implementations/Library/PathExtensions.cs b/MediaBrowser.Server.Implementations/Library/PathExtensions.cs new file mode 100644 index 0000000000..00bd651252 --- /dev/null +++ b/MediaBrowser.Server.Implementations/Library/PathExtensions.cs @@ -0,0 +1,37 @@ +using System; + +namespace MediaBrowser.Server.Implementations.Library +{ + public static class PathExtensions + { + /// + /// Gets the attribute value. + /// + /// The STR. + /// The attrib. + /// System.String. + /// attrib + public static string GetAttributeValue(this string str, string attrib) + { + if (string.IsNullOrEmpty(str)) + { + throw new ArgumentNullException("str"); + } + + if (string.IsNullOrEmpty(attrib)) + { + throw new ArgumentNullException("attrib"); + } + + string srch = "[" + attrib + "="; + int start = str.IndexOf(srch, StringComparison.OrdinalIgnoreCase); + if (start > -1) + { + start += srch.Length; + int end = str.IndexOf(']', start); + return str.Substring(start, end - start); + } + return null; + } + } +} diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 48523d68e8..0172a94f76 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -182,6 +182,7 @@ + diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs index 7360f1915d..4258de83f5 100644 --- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs +++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs @@ -446,7 +446,7 @@ namespace MediaBrowser.Server.Startup.Common SessionManager = new SessionManager(UserDataManager, ServerConfigurationManager, Logger, UserRepository, LibraryManager, UserManager, musicManager, DtoService, ImageProcessor, ItemRepository, JsonSerializer, this, HttpClient, AuthenticationRepository, DeviceManager); RegisterSingleInstance(SessionManager); - var newsService = new Server.Implementations.News.NewsService(ApplicationPaths, JsonSerializer); + var newsService = new Implementations.News.NewsService(ApplicationPaths, JsonSerializer); RegisterSingleInstance(newsService); var fileOrganizationService = new FileOrganizationService(TaskManager, FileOrganizationRepository, LogManager.GetLogger("FileOrganizationService"), LibraryMonitor, LibraryManager, ServerConfigurationManager, FileSystemManager, ProviderManager); @@ -481,7 +481,7 @@ namespace MediaBrowser.Server.Startup.Common UserViewManager = new UserViewManager(LibraryManager, LocalizationManager, FileSystemManager, UserManager, ChannelManager, LiveTvManager, ApplicationPaths, playlistManager); RegisterSingleInstance(UserViewManager); - var contentDirectory = new ContentDirectory(dlnaManager, UserDataManager, ImageProcessor, LibraryManager, ServerConfigurationManager, UserManager, LogManager.GetLogger("UpnpContentDirectory"), HttpClient, LocalizationManager); + var contentDirectory = new ContentDirectory(dlnaManager, UserDataManager, ImageProcessor, LibraryManager, ServerConfigurationManager, UserManager, LogManager.GetLogger("UpnpContentDirectory"), HttpClient, LocalizationManager, ChannelManager); RegisterSingleInstance(contentDirectory); NotificationManager = new NotificationManager(LogManager, UserManager, ServerConfigurationManager); diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 1a0b144b02..243ee6548c 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.510 + 3.0.511 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 717d3c9347..a84bf06019 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.510 + 3.0.511 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index 74126bbbf7..91e30aebef 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Model.Signed - 3.0.510 + 3.0.511 MediaBrowser.Model - Signed Edition Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index ce0baf19e7..2be5f196bf 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.510 + 3.0.511 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - + From 56f6b0335ce40aeab275f1038b96a8ecc642f18f Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 2 Dec 2014 22:13:03 -0500 Subject: [PATCH 06/15] updated nuget --- MediaBrowser.Api/ItemLookupService.cs | 13 - MediaBrowser.Api/Movies/TrailersService.cs | 2 +- MediaBrowser.Api/PackageService.cs | 5 +- .../Networking/BaseNetworkManager.cs | 18 +- MediaBrowser.Controller/Entities/BaseItem.cs | 53 +++- MediaBrowser.Controller/Entities/Folder.cs | 42 +-- MediaBrowser.Controller/Entities/Trailer.cs | 1 + MediaBrowser.Controller/Entities/UserView.cs | 3 +- MediaBrowser.Controller/Entities/Video.cs | 254 +++++------------- .../Library/ILibraryManager.cs | 13 +- .../MediaBrowser.LocalMetadata.csproj | 1 - .../Providers/TrailerXmlProvider.cs | 37 --- .../ApiClient/ConnectionMode.cs | 3 +- MediaBrowser.Model/ApiClient/IApiClient.cs | 2 +- .../ApiClient/ServerCredentials.cs | 10 +- .../ApiClient/ServerDiscoveryInfo.cs | 5 + MediaBrowser.Model/ApiClient/ServerInfo.cs | 21 +- MediaBrowser.Model/Dto/BaseItemDto.cs | 5 - MediaBrowser.Model/Querying/ItemFields.cs | 5 - MediaBrowser.Model/Querying/ItemQuery.cs | 23 +- .../Querying/ItemsByNameQuery.cs | 5 +- .../Querying/LatestItemsQuery.cs | 9 +- MediaBrowser.Model/Querying/NextUpQuery.cs | 9 +- .../Querying/UpcomingEpisodesQuery.cs | 11 +- .../Manager/ProviderManager.cs | 1 - .../MediaBrowser.Providers.csproj | 1 - .../MediaInfo/FFProbeProvider.cs | 6 - .../Movies/FanartMovieImageProvider.cs | 7 - .../Movies/MovieDbImageProvider.cs | 7 - .../Movies/MovieDbTrailerProvider.cs | 7 +- .../Movies/MovieExternalIds.cs | 6 +- .../Movies/MovieUpdatesPrescanTask.cs | 2 +- .../Movies/TrailerMetadataService.cs | 34 --- .../Omdb/OmdbImageProvider.cs | 2 +- .../Omdb/OmdbItemProvider.cs | 14 +- .../Dto/DtoService.cs | 5 +- .../Intros/DefaultIntroProvider.cs | 11 +- .../Library/LibraryManager.cs | 194 ++++++------- .../Library/Resolvers/BaseVideoResolver.cs | 160 ++++++++--- .../Library/Resolvers/LocalTrailerResolver.cs | 61 ----- .../Library/Resolvers/Movies/MovieResolver.cs | 101 +++---- .../Library/Resolvers/TV/EpisodeResolver.cs | 34 +-- .../Library/Resolvers/VideoResolver.cs | 6 + ...MediaBrowser.Server.Implementations.csproj | 3 +- .../Sync/SyncManager.cs | 2 +- .../packages.config | 2 +- .../ApplicationHost.cs | 7 +- .../Providers/MovieNfoProvider.cs | 9 - Nuget/MediaBrowser.Common.Internal.nuspec | 4 +- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Model.Signed.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 +- 52 files changed, 498 insertions(+), 746 deletions(-) delete mode 100644 MediaBrowser.LocalMetadata/Providers/TrailerXmlProvider.cs delete mode 100644 MediaBrowser.Providers/Movies/TrailerMetadataService.cs delete mode 100644 MediaBrowser.Server.Implementations/Library/Resolvers/LocalTrailerResolver.cs diff --git a/MediaBrowser.Api/ItemLookupService.cs b/MediaBrowser.Api/ItemLookupService.cs index b19d6c6549..507d569708 100644 --- a/MediaBrowser.Api/ItemLookupService.cs +++ b/MediaBrowser.Api/ItemLookupService.cs @@ -37,12 +37,6 @@ namespace MediaBrowser.Api { } - [Route("/Items/RemoteSearch/Trailer", "POST")] - [Authenticated] - public class GetTrailerRemoteSearchResults : RemoteSearchQuery, IReturn> - { - } - [Route("/Items/RemoteSearch/AdultVideo", "POST")] [Authenticated] public class GetAdultVideoRemoteSearchResults : RemoteSearchQuery, IReturn> @@ -162,13 +156,6 @@ namespace MediaBrowser.Api return ToOptimizedResult(result); } - public object Post(GetTrailerRemoteSearchResults request) - { - var result = _providerManager.GetRemoteSearchResults(request, CancellationToken.None).Result; - - return ToOptimizedResult(result); - } - public object Post(GetMusicAlbumRemoteSearchResults request) { var result = _providerManager.GetRemoteSearchResults(request, CancellationToken.None).Result; diff --git a/MediaBrowser.Api/Movies/TrailersService.cs b/MediaBrowser.Api/Movies/TrailersService.cs index a6024d4610..8e1704af73 100644 --- a/MediaBrowser.Api/Movies/TrailersService.cs +++ b/MediaBrowser.Api/Movies/TrailersService.cs @@ -92,7 +92,7 @@ namespace MediaBrowser.Api.Movies Logger, // Strip out secondary versions - request, item => (item is Movie || item is Trailer) && !((Video)item).PrimaryVersionId.HasValue, + request, item => (item is Movie) && !((Video)item).PrimaryVersionId.HasValue, SimilarItemsHelper.GetSimiliarityScore); diff --git a/MediaBrowser.Api/PackageService.cs b/MediaBrowser.Api/PackageService.cs index e24fa4964b..136969b170 100644 --- a/MediaBrowser.Api/PackageService.cs +++ b/MediaBrowser.Api/PackageService.cs @@ -173,9 +173,10 @@ namespace MediaBrowser.Api public object Get(GetPackage request) { var packages = _installationManager.GetAvailablePackages(CancellationToken.None, applicationVersion: _appHost.ApplicationVersion).Result; + var list = packages.ToList(); - var result = packages.FirstOrDefault(p => string.Equals(p.guid, request.AssemblyGuid ?? "none", StringComparison.OrdinalIgnoreCase)) - ?? packages.FirstOrDefault(p => p.name.Equals(request.Name, StringComparison.OrdinalIgnoreCase)); + var result = list.FirstOrDefault(p => string.Equals(p.guid, request.AssemblyGuid ?? "none", StringComparison.OrdinalIgnoreCase)) + ?? list.FirstOrDefault(p => p.name.Equals(request.Name, StringComparison.OrdinalIgnoreCase)); return ToOptimizedResult(result); } diff --git a/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs b/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs index 2a1c5dfe68..bf6ebf7ef7 100644 --- a/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs +++ b/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs @@ -24,14 +24,28 @@ namespace MediaBrowser.Common.Implementations.Networking /// IPAddress. public IEnumerable GetLocalIpAddresses() { - var list = GetIPsDefault().Where(i => !IPAddress.IsLoopback(i)).Select(i => i.ToString()).ToList(); + var list = GetIPsDefault() + .Where(i => !IPAddress.IsLoopback(i)) + .Select(i => i.ToString()) + .Where(FilterIpAddress) + .ToList(); if (list.Count > 0) { return list; } - return GetLocalIpAddressesFallback(); + return GetLocalIpAddressesFallback().Where(FilterIpAddress); + } + + private bool FilterIpAddress(string address) + { + if (address.StartsWith("169.", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + + return true; } private bool IsInPrivateAddressSpace(string endpoint) diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index ca08cf1a1b..5f1d45fc87 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -893,6 +893,28 @@ namespace MediaBrowser.Controller.Entities return Id.ToString(); } + internal virtual bool IsValidFromResolver(BaseItem newItem) + { + var current = this; + + var currentAsPlaceHolder = current as ISupportsPlaceHolders; + + if (currentAsPlaceHolder != null) + { + var newHasPlaceHolder = newItem as ISupportsPlaceHolders; + + if (newHasPlaceHolder != null) + { + if (currentAsPlaceHolder.IsPlaceHolder != newHasPlaceHolder.IsPlaceHolder) + { + return false; + } + } + } + + return current.IsInMixedFolder == newItem.IsInMixedFolder; + } + /// /// Gets the preferred metadata language. /// @@ -1288,7 +1310,7 @@ namespace MediaBrowser.Controller.Entities /// if set to true [reset position]. /// Task. /// - public virtual async Task MarkPlayed(User user, + public virtual async Task MarkPlayed(User user, DateTime? datePlayed, bool resetPosition) { @@ -1726,5 +1748,34 @@ namespace MediaBrowser.Controller.Entities } } } + + protected Task RefreshMetadataForOwnedVideo(MetadataRefreshOptions options, string path, CancellationToken cancellationToken) + { + var newOptions = new MetadataRefreshOptions(options.DirectoryService) + { + ImageRefreshMode = options.ImageRefreshMode, + MetadataRefreshMode = options.MetadataRefreshMode, + ReplaceAllMetadata = options.ReplaceAllMetadata + }; + + var id = LibraryManager.GetNewItemId(path, typeof(Video)); + + // Try to retrieve it from the db. If we don't find it, use the resolved version + var video = LibraryManager.GetItemById(id) as Video; + + if (video == null) + { + video = LibraryManager.ResolvePath(new FileInfo(path)) as Video; + + newOptions.ForceSave = true; + } + + if (video == null) + { + return Task.FromResult(true); + } + + return video.RefreshMetadata(newOptions, cancellationToken); + } } } diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index ad90027de4..8afa376b39 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -363,47 +363,7 @@ namespace MediaBrowser.Controller.Entities private bool IsValidFromResolver(BaseItem current, BaseItem newItem) { - var currentAsVideo = current as Video; - - if (currentAsVideo != null) - { - var newAsVideo = newItem as Video; - - if (newAsVideo != null) - { - if (currentAsVideo.IsPlaceHolder != newAsVideo.IsPlaceHolder) - { - return false; - } - if (currentAsVideo.IsMultiPart != newAsVideo.IsMultiPart) - { - return false; - } - if (currentAsVideo.HasLocalAlternateVersions != newAsVideo.HasLocalAlternateVersions) - { - return false; - } - } - } - else - { - var currentAsPlaceHolder = current as ISupportsPlaceHolders; - - if (currentAsPlaceHolder != null) - { - var newHasPlaceHolder = newItem as ISupportsPlaceHolders; - - if (newHasPlaceHolder != null) - { - if (currentAsPlaceHolder.IsPlaceHolder != newHasPlaceHolder.IsPlaceHolder) - { - return false; - } - } - } - } - - return current.IsInMixedFolder == newItem.IsInMixedFolder; + return current.IsValidFromResolver(newItem); } /// diff --git a/MediaBrowser.Controller/Entities/Trailer.cs b/MediaBrowser.Controller/Entities/Trailer.cs index bbbf2358f0..07173d26fd 100644 --- a/MediaBrowser.Controller/Entities/Trailer.cs +++ b/MediaBrowser.Controller/Entities/Trailer.cs @@ -12,6 +12,7 @@ namespace MediaBrowser.Controller.Entities /// /// Class Trailer /// + [Obsolete] public class Trailer : Video, IHasCriticRating, IHasSoundtracks, IHasProductionLocations, IHasBudget, IHasTrailers, IHasKeywords, IHasTaglines, IHasMetascore, IHasLookupInfo { public List SoundtrackIds { get; set; } diff --git a/MediaBrowser.Controller/Entities/UserView.cs b/MediaBrowser.Controller/Entities/UserView.cs index 7674dc1d38..926ffa19c1 100644 --- a/MediaBrowser.Controller/Entities/UserView.cs +++ b/MediaBrowser.Controller/Entities/UserView.cs @@ -63,8 +63,7 @@ namespace MediaBrowser.Controller.Entities { CollectionType.Books, CollectionType.HomeVideos, - CollectionType.Photos, - CollectionType.Trailers + CollectionType.Photos }; var collectionFolder = folder as ICollectionFolder; diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs index 1c59b8bfb2..d58ae71093 100644 --- a/MediaBrowser.Controller/Entities/Video.cs +++ b/MediaBrowser.Controller/Entities/Video.cs @@ -1,7 +1,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Providers; -using MediaBrowser.Controller.Resolvers; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using MediaBrowser.Model.MediaInfo; @@ -19,24 +18,23 @@ namespace MediaBrowser.Controller.Entities /// /// Class Video /// - public class Video : BaseItem, - IHasAspectRatio, - IHasTags, + public class Video : BaseItem, + IHasAspectRatio, + IHasTags, ISupportsPlaceHolders, IHasMediaSources, IHasShortOverview, IHasPreferredMetadataLanguage, IThemeMedia { - public bool IsMultiPart { get; set; } - public bool HasLocalAlternateVersions { get; set; } public Guid? PrimaryVersionId { get; set; } - public List AdditionalPartIds { get; set; } - public List LocalAlternateVersionIds { get; set; } + public List AdditionalParts { get; set; } + public List LocalAlternateVersions { get; set; } + public List LinkedAlternateVersions { get; set; } public bool IsThemeMedia { get; set; } - + public string FormatName { get; set; } public long? Size { get; set; } public string Container { get; set; } @@ -56,12 +54,12 @@ namespace MediaBrowser.Controller.Entities /// /// The timestamp. public TransportStreamTimestamp? Timestamp { get; set; } - + public Video() { PlayableStreamFileNames = new List(); - AdditionalPartIds = new List(); - LocalAlternateVersionIds = new List(); + AdditionalParts = new List(); + LocalAlternateVersions = new List(); Tags = new List(); SubtitleFiles = new List(); LinkedAlternateVersions = new List(); @@ -78,11 +76,31 @@ namespace MediaBrowser.Controller.Entities { get { - return LinkedAlternateVersions.Count + LocalAlternateVersionIds.Count + 1; + return LinkedAlternateVersions.Count + LocalAlternateVersions.Count + 1; } } - public List LinkedAlternateVersions { get; set; } + [IgnoreDataMember] + public bool IsStacked + { + get { return AdditionalParts.Count > 0; } + } + + [IgnoreDataMember] + public bool HasLocalAlternateVersions + { + get { return LocalAlternateVersions.Count > 0; } + } + + public IEnumerable GetAdditionalPartIds() + { + return AdditionalParts.Select(i => LibraryManager.GetNewItemId(i, typeof(Video))); + } + + public IEnumerable GetLocalAlternateVersionIds() + { + return LocalAlternateVersions.Select(i => LibraryManager.GetNewItemId(i, typeof(Video))); + } /// /// Gets the linked children. @@ -90,7 +108,7 @@ namespace MediaBrowser.Controller.Entities /// IEnumerable{BaseItem}. public IEnumerable /// The genres. public string[] AllGenres { get; set; } - + /// /// Limit results to items containing specific studios /// @@ -211,7 +211,7 @@ namespace MediaBrowser.Model.Querying /// /// The max players. public int? MaxPlayers { get; set; } - + /// /// Gets or sets the name starts with or greater. /// @@ -223,7 +223,7 @@ namespace MediaBrowser.Model.Querying /// /// The name starts with or greater. public string NameStartsWith { get; set; } - + /// /// Gets or sets the name starts with. /// @@ -267,7 +267,7 @@ namespace MediaBrowser.Model.Querying public bool? CollapseBoxSetItems { get; set; } public bool? IsPlayed { get; set; } - + /// /// Gets or sets the exclude location types. /// @@ -285,8 +285,8 @@ namespace MediaBrowser.Model.Querying public bool? EnableImages { get; set; } public int? ImageTypeLimit { get; set; } - public string EnableImageTypes { get; set; } - + public ImageType[] EnableImageTypes { get; set; } + /// /// Initializes a new instance of the class. /// @@ -294,16 +294,16 @@ namespace MediaBrowser.Model.Querying { LocationTypes = new LocationType[] { }; ExcludeLocationTypes = new LocationType[] { }; - + SortBy = new string[] { }; - Filters = new ItemFilter[] {}; + Filters = new ItemFilter[] { }; - Fields = new ItemFields[] {}; + Fields = new ItemFields[] { }; - MediaTypes = new string[] {}; + MediaTypes = new string[] { }; - VideoTypes = new VideoType[] {}; + VideoTypes = new VideoType[] { }; Genres = new string[] { }; Studios = new string[] { }; @@ -317,6 +317,7 @@ namespace MediaBrowser.Model.Querying ImageTypes = new ImageType[] { }; AirDays = new DayOfWeek[] { }; SeriesStatuses = new SeriesStatus[] { }; + EnableImageTypes = new ImageType[] { }; } } } diff --git a/MediaBrowser.Model/Querying/ItemsByNameQuery.cs b/MediaBrowser.Model/Querying/ItemsByNameQuery.cs index 1780226288..578f22f600 100644 --- a/MediaBrowser.Model/Querying/ItemsByNameQuery.cs +++ b/MediaBrowser.Model/Querying/ItemsByNameQuery.cs @@ -115,8 +115,8 @@ namespace MediaBrowser.Model.Querying /// Gets or sets the enable image types. /// /// The enable image types. - public string EnableImageTypes { get; set; } - + public ImageType[] EnableImageTypes { get; set; } + /// /// Initializes a new instance of the class. /// @@ -130,6 +130,7 @@ namespace MediaBrowser.Model.Querying SortBy = new string[] { }; ExcludeItemTypes = new string[] { }; IncludeItemTypes = new string[] { }; + EnableImageTypes = new ImageType[] { }; } } } diff --git a/MediaBrowser.Model/Querying/LatestItemsQuery.cs b/MediaBrowser.Model/Querying/LatestItemsQuery.cs index 4537378f58..a8086e5cd9 100644 --- a/MediaBrowser.Model/Querying/LatestItemsQuery.cs +++ b/MediaBrowser.Model/Querying/LatestItemsQuery.cs @@ -1,4 +1,6 @@  +using MediaBrowser.Model.Entities; + namespace MediaBrowser.Model.Querying { public class LatestItemsQuery @@ -64,6 +66,11 @@ namespace MediaBrowser.Model.Querying /// Gets or sets the enable image types. /// /// The enable image types. - public string EnableImageTypes { get; set; } + public ImageType[] EnableImageTypes { get; set; } + + public LatestItemsQuery() + { + EnableImageTypes = new ImageType[] {}; + } } } diff --git a/MediaBrowser.Model/Querying/NextUpQuery.cs b/MediaBrowser.Model/Querying/NextUpQuery.cs index c3178b8eb6..b5f50bde03 100644 --- a/MediaBrowser.Model/Querying/NextUpQuery.cs +++ b/MediaBrowser.Model/Querying/NextUpQuery.cs @@ -1,4 +1,5 @@ - +using MediaBrowser.Model.Entities; + namespace MediaBrowser.Model.Querying { public class NextUpQuery @@ -52,7 +53,11 @@ namespace MediaBrowser.Model.Querying /// Gets or sets the enable image types. /// /// The enable image types. - public string EnableImageTypes { get; set; } + public ImageType[] EnableImageTypes { get; set; } + public NextUpQuery() + { + EnableImageTypes = new ImageType[] {}; + } } } diff --git a/MediaBrowser.Model/Querying/UpcomingEpisodesQuery.cs b/MediaBrowser.Model/Querying/UpcomingEpisodesQuery.cs index 359babeb23..665b980eb8 100644 --- a/MediaBrowser.Model/Querying/UpcomingEpisodesQuery.cs +++ b/MediaBrowser.Model/Querying/UpcomingEpisodesQuery.cs @@ -1,4 +1,6 @@ -namespace MediaBrowser.Model.Querying +using MediaBrowser.Model.Entities; + +namespace MediaBrowser.Model.Querying { public class UpcomingEpisodesQuery { @@ -45,6 +47,11 @@ /// Gets or sets the enable image types. /// /// The enable image types. - public string EnableImageTypes { get; set; } + public ImageType[] EnableImageTypes { get; set; } + + public UpcomingEpisodesQuery() + { + EnableImageTypes = new ImageType[] {}; + } } } \ No newline at end of file diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index cdf1e788c8..d9982e7863 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -437,7 +437,6 @@ namespace MediaBrowser.Providers.Manager GetPluginSummary(), GetPluginSummary(), GetPluginSummary(), - GetPluginSummary(), GetPluginSummary(), GetPluginSummary(), GetPluginSummary(), diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj index 0757541078..6ac1ab84e6 100644 --- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj +++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj @@ -110,7 +110,6 @@ - diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs b/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs index 16c255397f..acca43cf81 100644 --- a/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs +++ b/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs @@ -31,7 +31,6 @@ namespace MediaBrowser.Providers.MediaInfo ICustomMetadataProvider, ICustomMetadataProvider, ICustomMetadataProvider, - ICustomMetadataProvider, ICustomMetadataProvider False - ..\packages\MediaBrowser.Naming.1.0.0.12\lib\portable-net45+sl4+wp71+win8+wpa81\MediaBrowser.Naming.dll + ..\packages\MediaBrowser.Naming.1.0.0.13\lib\portable-net45+sl4+wp71+win8+wpa81\MediaBrowser.Naming.dll False @@ -194,7 +194,6 @@ - diff --git a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs index 263bfb6ad0..201eb8c7f3 100644 --- a/MediaBrowser.Server.Implementations/Sync/SyncManager.cs +++ b/MediaBrowser.Server.Implementations/Sync/SyncManager.cs @@ -189,7 +189,7 @@ namespace MediaBrowser.Server.Implementations.Sync return false; } - if (video.IsMultiPart) + if (video.IsStacked) { return false; } diff --git a/MediaBrowser.Server.Implementations/packages.config b/MediaBrowser.Server.Implementations/packages.config index 634e8a9794..9f006798ee 100644 --- a/MediaBrowser.Server.Implementations/packages.config +++ b/MediaBrowser.Server.Implementations/packages.config @@ -1,6 +1,6 @@  - + \ No newline at end of file diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs index 4258de83f5..8ae117ebdd 100644 --- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs +++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs @@ -950,11 +950,6 @@ namespace MediaBrowser.Server.Startup.Common var localAddresses = NetworkManager.GetLocalIpAddresses() .ToList(); - if (localAddresses.Count < 2) - { - return localAddresses; - } - var httpServerAddresses = HttpServer.LocalEndPoints .Select(i => i.Split(':').FirstOrDefault()) .Where(i => !string.IsNullOrEmpty(i)) @@ -967,7 +962,7 @@ namespace MediaBrowser.Server.Startup.Common if (matchedAddresses.Count == 0) { - return localAddresses.Take(1); + return localAddresses; } return matchedAddresses; diff --git a/MediaBrowser.XbmcMetadata/Providers/MovieNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/MovieNfoProvider.cs index 1b979c3789..6c9949fc2f 100644 --- a/MediaBrowser.XbmcMetadata/Providers/MovieNfoProvider.cs +++ b/MediaBrowser.XbmcMetadata/Providers/MovieNfoProvider.cs @@ -26,13 +26,4 @@ namespace MediaBrowser.XbmcMetadata.Providers { } } - - public class TrailerNfoProvider : BaseVideoNfoProvider - { - public TrailerNfoProvider(IFileSystem fileSystem, ILogger logger, IConfigurationManager config) - : base(fileSystem, logger, config) - { - } - } - } \ No newline at end of file diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 243ee6548c..c7cfeb9b8d 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.511 + 3.0.517 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index a84bf06019..16aa7b0246 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.511 + 3.0.517 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Model.Signed.nuspec b/Nuget/MediaBrowser.Model.Signed.nuspec index 91e30aebef..aa1acad97c 100644 --- a/Nuget/MediaBrowser.Model.Signed.nuspec +++ b/Nuget/MediaBrowser.Model.Signed.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Model.Signed - 3.0.511 + 3.0.517 MediaBrowser.Model - Signed Edition Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 2be5f196bf..70c9ce9f30 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.511 + 3.0.517 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - + From 5eb44c42c586af34dd16efc76240d0d6c8e02069 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 4 Dec 2014 00:24:41 -0500 Subject: [PATCH 07/15] resolve mixed folder detection --- MediaBrowser.Controller/Entities/BaseItem.cs | 28 +- MediaBrowser.Controller/Entities/Folder.cs | 8 +- .../Library/ILibraryManager.cs | 10 +- .../Resolvers/IItemResolver.cs | 23 ++ .../ContentDirectory/ControlHandler.cs | 5 +- .../Library/CoreResolutionIgnoreRule.cs | 5 - .../Library/EntityResolutionHelper.cs | 74 ----- .../Library/LibraryManager.cs | 106 +++--- .../Library/ResolverHelper.cs | 134 +++++++- .../Library/Resolvers/BaseVideoResolver.cs | 124 ++++--- .../Resolvers/Movies/BoxSetResolver.cs | 6 +- .../Library/Resolvers/Movies/MovieResolver.cs | 313 +++++++++++------- .../Library/Resolvers/PhotoResolver.cs | 4 +- .../Library/Resolvers/TV/EpisodeResolver.cs | 9 +- .../Library/Resolvers/TV/SeriesResolver.cs | 5 +- .../Library/Resolvers/VideoResolver.cs | 22 +- ...MediaBrowser.Server.Implementations.csproj | 2 +- .../packages.config | 2 +- 18 files changed, 512 insertions(+), 368 deletions(-) diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 5f1d45fc87..072555986c 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -53,16 +53,6 @@ namespace MediaBrowser.Controller.Entities public static string ThemeSongFilename = "theme"; public static string ThemeVideosFolderName = "backdrops"; - public static List> ExtraSuffixes = new List> - { - new KeyValuePair("-trailer", ExtraType.Trailer), - new KeyValuePair("-deleted", ExtraType.DeletedScene), - new KeyValuePair("-behindthescenes", ExtraType.BehindTheScenes), - new KeyValuePair("-interview", ExtraType.Interview), - new KeyValuePair("-scene", ExtraType.Scene), - new KeyValuePair("-sample", ExtraType.Sample) - }; - public List ImageInfos { get; set; } [IgnoreDataMember] @@ -618,7 +608,9 @@ namespace MediaBrowser.Controller.Entities .Where(i => string.Equals(FileSystem.GetFileNameWithoutExtension(i), ThemeSongFilename, StringComparison.OrdinalIgnoreCase)) ); - return LibraryManager.ResolvePaths(files, directoryService, null).Select(audio => + return LibraryManager.ResolvePaths(files, directoryService, null) + .OfType() + .Select(audio => { // Try to retrieve it from the db. If we don't find it, use the resolved version var dbItem = LibraryManager.GetItemById(audio.Id) as Audio.Audio; @@ -628,10 +620,7 @@ namespace MediaBrowser.Controller.Entities audio = dbItem; } - if (audio != null) - { - audio.ExtraType = ExtraType.ThemeSong; - } + audio.ExtraType = ExtraType.ThemeSong; return audio; @@ -649,7 +638,9 @@ namespace MediaBrowser.Controller.Entities .Where(i => string.Equals(i.Name, ThemeVideosFolderName, StringComparison.OrdinalIgnoreCase)) .SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly)); - return LibraryManager.ResolvePaths