update indexedDb

This commit is contained in:
Luke Pulverenti 2015-05-11 12:32:15 -04:00
parent 42b4b03703
commit 5492e34c6d
12 changed files with 103 additions and 73 deletions

View File

@ -57,6 +57,7 @@
<Compile Include="GDI\UnplayedCountIndicator.cs" /> <Compile Include="GDI\UnplayedCountIndicator.cs" />
<Compile Include="IImageEncoder.cs" /> <Compile Include="IImageEncoder.cs" />
<Compile Include="Common\ImageHeader.cs" /> <Compile Include="Common\ImageHeader.cs" />
<Compile Include="ImageHelpers.cs" />
<Compile Include="ImageMagick\ImageMagickEncoder.cs" /> <Compile Include="ImageMagick\ImageMagickEncoder.cs" />
<Compile Include="ImageMagick\StripCollageBuilder.cs" /> <Compile Include="ImageMagick\StripCollageBuilder.cs" />
<Compile Include="ImageProcessor.cs" /> <Compile Include="ImageProcessor.cs" />

View File

@ -1,11 +1,9 @@
using Emby.Drawing.ImageMagick; using MediaBrowser.Common.IO;
using MediaBrowser.Common.IO;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.Drawing.Drawing2D; using System.Drawing.Drawing2D;
using System.Drawing.Imaging; using System.Drawing.Imaging;
using System.IO; using System.IO;
using System.Linq;
namespace Emby.Drawing.GDI namespace Emby.Drawing.GDI
{ {
@ -18,10 +16,10 @@ namespace Emby.Drawing.GDI
int height) int height)
{ {
const int numStrips = 4; const int numStrips = 4;
files = StripCollageBuilder.ProjectPaths(files, numStrips).ToList(); files = ImageHelpers.ProjectPaths(files, numStrips);
const int rows = 1; const int rows = 1;
int cols = numStrips; int cols = numStrips;
int cellWidth = 2 * (width / 3); int cellWidth = 2 * (width / 3);
int cellHeight = height; int cellHeight = height;
@ -76,8 +74,8 @@ namespace Emby.Drawing.GDI
int width, int width,
int height) int height)
{ {
files = StripCollageBuilder.ProjectPaths(files, 4).ToList(); files = ImageHelpers.ProjectPaths(files, 4);
const int rows = 2; const int rows = 2;
const int cols = 2; const int cols = 2;

View File

@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace Emby.Drawing
{
internal static class ImageHelpers
{
internal static List<string> ProjectPaths(List<string> paths, int count)
{
if (count <= 0)
{
throw new ArgumentOutOfRangeException("count");
}
if (paths.Count == 0)
{
throw new ArgumentOutOfRangeException("paths");
}
var list = new List<string>();
AddToList(list, paths, count);
return list.Take(count).ToList();
}
private static void AddToList(List<string> list, List<string> paths, int count)
{
while (list.Count < count)
{
foreach (var path in paths)
{
list.Add(path);
if (list.Count >= count)
{
return;
}
}
}
}
}
}

View File

@ -1,4 +1,5 @@
using ImageMagickSharp; using System.Linq;
using ImageMagickSharp;
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Drawing;
using MediaBrowser.Model.Drawing; using MediaBrowser.Model.Drawing;
@ -195,15 +196,15 @@ namespace Emby.Drawing.ImageMagick
if (ratio >= 1.4) if (ratio >= 1.4)
{ {
new StripCollageBuilder(_appPaths).BuildThumbCollage(options.InputPaths, options.OutputPath, options.Width, options.Height, options.Text); new StripCollageBuilder(_appPaths).BuildThumbCollage(options.InputPaths.ToList(), options.OutputPath, options.Width, options.Height, options.Text);
} }
else if (ratio >= .9) else if (ratio >= .9)
{ {
new StripCollageBuilder(_appPaths).BuildSquareCollage(options.InputPaths, options.OutputPath, options.Width, options.Height, options.Text); new StripCollageBuilder(_appPaths).BuildSquareCollage(options.InputPaths.ToList(), options.OutputPath, options.Width, options.Height, options.Text);
} }
else else
{ {
new StripCollageBuilder(_appPaths).BuildPosterCollage(options.InputPaths, options.OutputPath, options.Width, options.Height, options.Text); new StripCollageBuilder(_appPaths).BuildPosterCollage(options.InputPaths.ToList(), options.OutputPath, options.Width, options.Height, options.Text);
} }
} }

View File

@ -2,7 +2,6 @@
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
namespace Emby.Drawing.ImageMagick namespace Emby.Drawing.ImageMagick
{ {
@ -15,7 +14,7 @@ namespace Emby.Drawing.ImageMagick
_appPaths = appPaths; _appPaths = appPaths;
} }
public void BuildPosterCollage(IEnumerable<string> paths, string outputPath, int width, int height, string text) public void BuildPosterCollage(List<string> paths, string outputPath, int width, int height, string text)
{ {
if (!string.IsNullOrWhiteSpace(text)) if (!string.IsNullOrWhiteSpace(text))
{ {
@ -33,7 +32,7 @@ namespace Emby.Drawing.ImageMagick
} }
} }
public void BuildSquareCollage(IEnumerable<string> paths, string outputPath, int width, int height, string text) public void BuildSquareCollage(List<string> paths, string outputPath, int width, int height, string text)
{ {
if (!string.IsNullOrWhiteSpace(text)) if (!string.IsNullOrWhiteSpace(text))
{ {
@ -51,7 +50,7 @@ namespace Emby.Drawing.ImageMagick
} }
} }
public void BuildThumbCollage(IEnumerable<string> paths, string outputPath, int width, int height, string text) public void BuildThumbCollage(List<string> paths, string outputPath, int width, int height, string text)
{ {
if (!string.IsNullOrWhiteSpace(text)) if (!string.IsNullOrWhiteSpace(text))
{ {
@ -69,31 +68,10 @@ namespace Emby.Drawing.ImageMagick
} }
} }
internal static string[] ProjectPaths(IEnumerable<string> paths, int count) private MagickWand BuildThumbCollageWandWithText(List<string> paths, string text, int width, int height)
{ {
var clone = paths.ToList(); var inputPaths = ImageHelpers.ProjectPaths(paths, 8);
var list = new List<string>(); using (var wandImages = new MagickWand(inputPaths.ToArray()))
while (list.Count < count)
{
foreach (var path in clone)
{
list.Add(path);
if (list.Count >= count)
{
break;
}
}
}
return list.Take(count).ToArray();
}
private MagickWand BuildThumbCollageWandWithText(IEnumerable<string> paths, string text, int width, int height)
{
var inputPaths = ProjectPaths(paths, 8);
using (var wandImages = new MagickWand(inputPaths))
{ {
var wand = new MagickWand(width, height); var wand = new MagickWand(width, height);
wand.OpenImage("gradient:#111111-#111111"); wand.OpenImage("gradient:#111111-#111111");
@ -165,10 +143,10 @@ namespace Emby.Drawing.ImageMagick
} }
} }
private MagickWand BuildPosterCollageWand(IEnumerable<string> paths, int width, int height) private MagickWand BuildPosterCollageWand(List<string> paths, int width, int height)
{ {
var inputPaths = ProjectPaths(paths, 4); var inputPaths = ImageHelpers.ProjectPaths(paths, 4);
using (var wandImages = new MagickWand(inputPaths)) using (var wandImages = new MagickWand(inputPaths.ToArray()))
{ {
var wand = new MagickWand(width, height); var wand = new MagickWand(width, height);
wand.OpenImage("gradient:#111111-#111111"); wand.OpenImage("gradient:#111111-#111111");
@ -230,10 +208,10 @@ namespace Emby.Drawing.ImageMagick
} }
} }
private MagickWand BuildPosterCollageWandWithText(IEnumerable<string> paths, string label, int width, int height) private MagickWand BuildPosterCollageWandWithText(List<string> paths, string label, int width, int height)
{ {
var inputPaths = ProjectPaths(paths, 4); var inputPaths = ImageHelpers.ProjectPaths(paths, 4);
using (var wandImages = new MagickWand(inputPaths)) using (var wandImages = new MagickWand(inputPaths.ToArray()))
{ {
var wand = new MagickWand(width, height); var wand = new MagickWand(width, height);
wand.OpenImage("gradient:#111111-#111111"); wand.OpenImage("gradient:#111111-#111111");
@ -305,10 +283,10 @@ namespace Emby.Drawing.ImageMagick
} }
} }
private MagickWand BuildThumbCollageWand(IEnumerable<string> paths, int width, int height) private MagickWand BuildThumbCollageWand(List<string> paths, int width, int height)
{ {
var inputPaths = ProjectPaths(paths, 8); var inputPaths = ImageHelpers.ProjectPaths(paths, 8);
using (var wandImages = new MagickWand(inputPaths)) using (var wandImages = new MagickWand(inputPaths.ToArray()))
{ {
var wand = new MagickWand(width, height); var wand = new MagickWand(width, height);
wand.OpenImage("gradient:#111111-#111111"); wand.OpenImage("gradient:#111111-#111111");
@ -370,10 +348,10 @@ namespace Emby.Drawing.ImageMagick
} }
} }
private MagickWand BuildSquareCollageWand(IEnumerable<string> paths, int width, int height) private MagickWand BuildSquareCollageWand(List<string> paths, int width, int height)
{ {
var inputPaths = ProjectPaths(paths, 4); var inputPaths = ImageHelpers.ProjectPaths(paths, 4);
using (var wandImages = new MagickWand(inputPaths)) using (var wandImages = new MagickWand(inputPaths.ToArray()))
{ {
var wand = new MagickWand(width, height); var wand = new MagickWand(width, height);
wand.OpenImage("gradient:#111111-#111111"); wand.OpenImage("gradient:#111111-#111111");
@ -435,10 +413,10 @@ namespace Emby.Drawing.ImageMagick
} }
} }
private MagickWand BuildSquareCollageWandWithText(IEnumerable<string> paths, string label, int width, int height) private MagickWand BuildSquareCollageWandWithText(List<string> paths, string label, int width, int height)
{ {
var inputPaths = ProjectPaths(paths, 4); var inputPaths = ImageHelpers.ProjectPaths(paths, 4);
using (var wandImages = new MagickWand(inputPaths)) using (var wandImages = new MagickWand(inputPaths.ToArray()))
{ {
var wand = new MagickWand(width, height); var wand = new MagickWand(width, height);
wand.OpenImage("gradient:#111111-#111111"); wand.OpenImage("gradient:#111111-#111111");

View File

@ -764,7 +764,11 @@ namespace Emby.Drawing
try try
{ {
_logger.Debug("Creating image collage and saving to {0}", options.OutputPath);
_imageEncoder.CreateImageCollage(options); _imageEncoder.CreateImageCollage(options);
_logger.Debug("Completed creation of image collage and saved to {0}", options.OutputPath);
} }
finally finally
{ {

View File

@ -346,7 +346,7 @@ namespace MediaBrowser.Api
// We can really reduce the timeout for apps that are using the newer api // We can really reduce the timeout for apps that are using the newer api
if (!string.IsNullOrWhiteSpace(job.PlaySessionId) && job.Type != TranscodingJobType.Progressive) if (!string.IsNullOrWhiteSpace(job.PlaySessionId) && job.Type != TranscodingJobType.Progressive)
{ {
timerDuration = 60000; timerDuration = 50000;
} }
job.PingTimeout = timerDuration; job.PingTimeout = timerDuration;

View File

@ -17,7 +17,7 @@ namespace MediaBrowser.Model.Configuration
DownMixAudioBoost = 2; DownMixAudioBoost = 2;
EncodingQuality = EncodingQuality.Auto; EncodingQuality = EncodingQuality.Auto;
EnableThrottling = true; EnableThrottling = true;
ThrottleThresholdSeconds = 120; ThrottleThresholdSeconds = 110;
} }
} }
} }

View File

@ -52,7 +52,7 @@ namespace MediaBrowser.Providers.TV
target.Status = source.Status; target.Status = source.Status;
} }
if (replaceData || target.AirDays.Count == 0) if (replaceData || target.AirDays == null || target.AirDays.Count == 0)
{ {
target.AirDays = source.AirDays; target.AirDays = source.AirDays;
} }

View File

@ -252,6 +252,9 @@ namespace MediaBrowser.Server.Implementations.Localization
throw new ArgumentNullException("rating"); throw new ArgumentNullException("rating");
} }
// Fairly common for some users to have "Rated R" in their rating field
rating = rating.Replace("Rated ", string.Empty, StringComparison.OrdinalIgnoreCase);
var ratingsDictionary = GetParentalRatingsDictionary(); var ratingsDictionary = GetParentalRatingsDictionary();
ParentalRating value; ParentalRating value;

View File

@ -103,7 +103,7 @@ namespace MediaBrowser.Server.Implementations.Photos
return parts.GetMD5().ToString("N"); return parts.GetMD5().ToString("N");
} }
protected Task CreateThumbCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath, bool drawText) protected Task<bool> CreateThumbCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath, bool drawText)
{ {
return CreateCollage(primaryItem, items, outputPath, 960, 540, drawText, primaryItem.Name); return CreateCollage(primaryItem, items, outputPath, 960, 540, drawText, primaryItem.Name);
} }
@ -115,22 +115,22 @@ namespace MediaBrowser.Server.Implementations.Photos
.Where(i => !string.IsNullOrWhiteSpace(i)); .Where(i => !string.IsNullOrWhiteSpace(i));
} }
protected Task CreatePosterCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath) protected Task<bool> CreatePosterCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath)
{ {
return CreateCollage(primaryItem, items, outputPath, 600, 900, true, primaryItem.Name); return CreateCollage(primaryItem, items, outputPath, 600, 900, true, primaryItem.Name);
} }
protected Task CreateSquareCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath, bool drawText) protected Task<bool> CreateSquareCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath, bool drawText)
{ {
return CreateCollage(primaryItem, items, outputPath, 800, 800, drawText, primaryItem.Name); return CreateCollage(primaryItem, items, outputPath, 800, 800, drawText, primaryItem.Name);
} }
protected Task CreateThumbCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath, int width, int height, bool drawText, string text) protected Task<bool> CreateThumbCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath, int width, int height, bool drawText, string text)
{ {
return CreateCollage(primaryItem, items, outputPath, width, height, drawText, text); return CreateCollage(primaryItem, items, outputPath, width, height, drawText, text);
} }
private Task CreateCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath, int width, int height, bool drawText, string text) private Task<bool> CreateCollage(IHasImages primaryItem, List<BaseItem> items, string outputPath, int width, int height, bool drawText, string text)
{ {
Directory.CreateDirectory(Path.GetDirectoryName(outputPath)); Directory.CreateDirectory(Path.GetDirectoryName(outputPath));
@ -143,7 +143,13 @@ namespace MediaBrowser.Server.Implementations.Photos
InputPaths = GetStripCollageImagePaths(primaryItem, items).ToArray() InputPaths = GetStripCollageImagePaths(primaryItem, items).ToArray()
}; };
return ImageProcessor.CreateImageCollage(options); if (options.InputPaths.Length == 0)
{
return Task.FromResult(false);
}
ImageProcessor.CreateImageCollage(options);
return Task.FromResult(true);
} }
public string Name public string Name
@ -166,26 +172,23 @@ namespace MediaBrowser.Server.Implementations.Photos
if (imageType == ImageType.Thumb) if (imageType == ImageType.Thumb)
{ {
await CreateThumbCollage(item, itemsWithImages, outputPath, drawText).ConfigureAwait(false); return await CreateThumbCollage(item, itemsWithImages, outputPath, drawText).ConfigureAwait(false);
return true;
} }
if (imageType == ImageType.Primary) if (imageType == ImageType.Primary)
{ {
if (item is UserView) if (item is UserView)
{ {
await CreateSquareCollage(item, itemsWithImages, outputPath, drawText).ConfigureAwait(false); return await CreateSquareCollage(item, itemsWithImages, outputPath, drawText).ConfigureAwait(false);
} }
else if (item is PhotoAlbum || item is Playlist) else if (item is PhotoAlbum || item is Playlist)
{ {
await CreateSquareCollage(item, itemsWithImages, outputPath, drawText).ConfigureAwait(false); return await CreateSquareCollage(item, itemsWithImages, outputPath, drawText).ConfigureAwait(false);
} }
else else
{ {
await CreatePosterCollage(item, itemsWithImages, outputPath).ConfigureAwait(false); return await CreatePosterCollage(item, itemsWithImages, outputPath).ConfigureAwait(false);
} }
return true;
} }
throw new ArgumentException("Unexpected image type"); throw new ArgumentException("Unexpected image type");

View File

@ -224,8 +224,7 @@ namespace MediaBrowser.Server.Implementations.UserViews
return false; return false;
} }
await CreateThumbCollage(item, itemsWithImages, outputPath, 960, 540, false, item.Name).ConfigureAwait(false); return await CreateThumbCollage(item, itemsWithImages, outputPath, 960, 540, false, item.Name).ConfigureAwait(false);
return true;
} }
return await base.CreateImage(item, itemsWithImages, outputPath, imageType, imageIndex).ConfigureAwait(false); return await base.CreateImage(item, itemsWithImages, outputPath, imageType, imageIndex).ConfigureAwait(false);