aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-01-07 13:39:35 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-01-07 13:39:35 -0500
commit5392ff4da4794a0c4268baa61572a8cd881db379 (patch)
treed6a95ff3393fdfb44764bea77c820b6fa39bbcc1
parent9862959354560e00331433ec6cd4276210e1a1c4 (diff)
added a new encoding settings page under advanced
-rw-r--r--MediaBrowser.Api/LiveTv/LiveTvService.cs27
-rw-r--r--MediaBrowser.Api/Playback/BaseStreamingService.cs15
-rw-r--r--MediaBrowser.Api/Playback/Hls/BaseHlsService.cs11
-rw-r--r--MediaBrowser.Api/Playback/Progressive/VideoService.cs2
-rw-r--r--MediaBrowser.Api/UserLibrary/ItemsService.cs8
-rw-r--r--MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs7
-rw-r--r--MediaBrowser.Controller/LiveTv/ILiveTvManager.cs6
-rw-r--r--MediaBrowser.Controller/Providers/BaseMetadataProvider.cs2
-rw-r--r--MediaBrowser.Model/Configuration/ServerConfiguration.cs5
-rw-r--r--MediaBrowser.Model/LiveTv/LiveTvServiceInfo.cs18
-rw-r--r--MediaBrowser.Providers/Movies/PersonProviderFromXml.cs7
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs14
-rw-r--r--MediaBrowser.WebDashboard/Api/DashboardService.cs1
-rw-r--r--MediaBrowser.WebDashboard/ApiClient.js11
-rw-r--r--MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj6
-rw-r--r--MediaBrowser.WebDashboard/packages.config2
16 files changed, 116 insertions, 26 deletions
diff --git a/MediaBrowser.Api/LiveTv/LiveTvService.cs b/MediaBrowser.Api/LiveTv/LiveTvService.cs
index e985fb615..df6d9389b 100644
--- a/MediaBrowser.Api/LiveTv/LiveTvService.cs
+++ b/MediaBrowser.Api/LiveTv/LiveTvService.cs
@@ -120,16 +120,16 @@ namespace MediaBrowser.Api.LiveTv
[ApiMember(Name = "UserId", Description = "Optional filter by user id.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
public string UserId { get; set; }
- [ApiMember(Name = "MinStartDate", Description = "Optional. The minimum premiere date. Format = yyyyMMddHHmmss", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
+ [ApiMember(Name = "MinStartDate", Description = "Optional. The minimum premiere date. Format = ISO", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
public string MinStartDate { get; set; }
- [ApiMember(Name = "MaxStartDate", Description = "Optional. The maximum premiere date. Format = yyyyMMddHHmmss", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
+ [ApiMember(Name = "MaxStartDate", Description = "Optional. The maximum premiere date. Format = ISO", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
public string MaxStartDate { get; set; }
- [ApiMember(Name = "MinEndDate", Description = "Optional. The minimum premiere date. Format = yyyyMMddHHmmss", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
+ [ApiMember(Name = "MinEndDate", Description = "Optional. The minimum premiere date. Format = ISO", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
public string MinEndDate { get; set; }
- [ApiMember(Name = "MaxEndDate", Description = "Optional. The maximum premiere date. Format = yyyyMMddHHmmss", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
+ [ApiMember(Name = "MaxEndDate", Description = "Optional. The maximum premiere date. Format = ISO", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
public string MaxEndDate { get; set; }
}
@@ -215,6 +215,12 @@ namespace MediaBrowser.Api.LiveTv
public string Id { get; set; }
}
+ [Route("/LiveTv/GuideInfo", "GET")]
+ [Api(Description = "Gets guide info")]
+ public class GetGuideInfo : IReturn<GuideInfo>
+ {
+ }
+
public class LiveTvService : BaseApiService
{
private readonly ILiveTvManager _liveTvManager;
@@ -274,22 +280,22 @@ namespace MediaBrowser.Api.LiveTv
if (!string.IsNullOrEmpty(request.MinStartDate))
{
- query.MinStartDate = DateTime.ParseExact(request.MinStartDate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
+ query.MinStartDate = DateTime.Parse(request.MinStartDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime();
}
if (!string.IsNullOrEmpty(request.MinEndDate))
{
- query.MinEndDate = DateTime.ParseExact(request.MinEndDate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
+ query.MinEndDate = DateTime.Parse(request.MinEndDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime();
}
if (!string.IsNullOrEmpty(request.MaxStartDate))
{
- query.MaxStartDate = DateTime.ParseExact(request.MaxStartDate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
+ query.MaxStartDate = DateTime.Parse(request.MaxStartDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime();
}
if (!string.IsNullOrEmpty(request.MaxEndDate))
{
- query.MaxEndDate = DateTime.ParseExact(request.MaxEndDate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
+ query.MaxEndDate = DateTime.Parse(request.MaxEndDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime();
}
var result = _liveTvManager.GetPrograms(query, CancellationToken.None).Result;
@@ -453,5 +459,10 @@ namespace MediaBrowser.Api.LiveTv
return ToOptimizedResult(group);
}
+
+ public object Get(GetGuideInfo request)
+ {
+ return ToOptimizedResult(_liveTvManager.GetGuideInfo());
+ }
}
} \ No newline at end of file
diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs
index ac4b53adf..dc34fca77 100644
--- a/MediaBrowser.Api/Playback/BaseStreamingService.cs
+++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs
@@ -257,10 +257,10 @@ namespace MediaBrowser.Api.Playback
/// Gets the number of threads.
/// </summary>
/// <returns>System.Int32.</returns>
- /// <exception cref="System.Exception">Unrecognized EncodingQuality value.</exception>
+ /// <exception cref="System.Exception">Unrecognized MediaEncodingQuality value.</exception>
protected int GetNumberOfThreads()
{
- var quality = ServerConfigurationManager.Configuration.EncodingQuality;
+ var quality = ServerConfigurationManager.Configuration.MediaEncodingQuality;
switch (quality)
{
@@ -273,7 +273,7 @@ namespace MediaBrowser.Api.Playback
case EncodingQuality.MaxQuality:
return 0;
default:
- throw new Exception("Unrecognized EncodingQuality value.");
+ throw new Exception("Unrecognized MediaEncodingQuality value.");
}
}
@@ -706,6 +706,13 @@ namespace MediaBrowser.Api.Playback
state.IsoMount = await IsoManager.Mount(state.MediaPath, CancellationToken.None).ConfigureAwait(false);
}
+ var commandLineArgs = GetCommandLineArguments(outputPath, state, true);
+
+ if (ServerConfigurationManager.Configuration.EnableDebugEncodingLogging)
+ {
+ commandLineArgs = "-loglevel debug " + commandLineArgs;
+ }
+
var process = new Process
{
StartInfo = new ProcessStartInfo
@@ -719,7 +726,7 @@ namespace MediaBrowser.Api.Playback
FileName = MediaEncoder.EncoderPath,
WorkingDirectory = Path.GetDirectoryName(MediaEncoder.EncoderPath),
- Arguments = GetCommandLineArguments(outputPath, state, true),
+ Arguments = commandLineArgs,
WindowStyle = ProcessWindowStyle.Hidden,
ErrorDialog = false,
diff --git a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs
index 68342e91d..9abedde4b 100644
--- a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs
+++ b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs
@@ -7,6 +7,7 @@ using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Controller.Persistence;
+using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.IO;
using System;
@@ -111,7 +112,15 @@ namespace MediaBrowser.Api.Playback.Hls
if (isPlaylistNewlyCreated)
{
- await WaitForMinimumSegmentCount(playlist, 3).ConfigureAwait(false);
+ var minimumSegmentCount = 3;
+ var quality = ServerConfigurationManager.Configuration.MediaEncodingQuality;
+
+ if (quality == EncodingQuality.HighSpeed || quality == EncodingQuality.HighQuality)
+ {
+ minimumSegmentCount = 2;
+ }
+
+ await WaitForMinimumSegmentCount(playlist, minimumSegmentCount).ConfigureAwait(false);
}
int audioBitrate;
diff --git a/MediaBrowser.Api/Playback/Progressive/VideoService.cs b/MediaBrowser.Api/Playback/Progressive/VideoService.cs
index f4e4019f6..cdc8e2ffb 100644
--- a/MediaBrowser.Api/Playback/Progressive/VideoService.cs
+++ b/MediaBrowser.Api/Playback/Progressive/VideoService.cs
@@ -29,6 +29,7 @@ namespace MediaBrowser.Api.Playback.Progressive
[Route("/Videos/{Id}/stream.m2ts", "GET")]
[Route("/Videos/{Id}/stream.3gp", "GET")]
[Route("/Videos/{Id}/stream.wmv", "GET")]
+ [Route("/Videos/{Id}/stream.wtv", "GET")]
[Route("/Videos/{Id}/stream", "GET")]
[Route("/Videos/{Id}/stream.ts", "HEAD")]
[Route("/Videos/{Id}/stream.webm", "HEAD")]
@@ -42,6 +43,7 @@ namespace MediaBrowser.Api.Playback.Progressive
[Route("/Videos/{Id}/stream.avi", "HEAD")]
[Route("/Videos/{Id}/stream.3gp", "HEAD")]
[Route("/Videos/{Id}/stream.wmv", "HEAD")]
+ [Route("/Videos/{Id}/stream.wtv", "HEAD")]
[Route("/Videos/{Id}/stream.m2ts", "HEAD")]
[Route("/Videos/{Id}/stream", "HEAD")]
[Api(Description = "Gets a video stream")]
diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs
index 464f4ba1a..202ac293f 100644
--- a/MediaBrowser.Api/UserLibrary/ItemsService.cs
+++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs
@@ -196,10 +196,10 @@ namespace MediaBrowser.Api.UserLibrary
[ApiMember(Name = "AiredDuringSeason", Description = "Gets all episodes that aired during a season, including specials.", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
public int? AiredDuringSeason { get; set; }
- [ApiMember(Name = "MinPremiereDate", Description = "Optional. The minimum premiere date. Format = yyyyMMddHHmmss", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
+ [ApiMember(Name = "MinPremiereDate", Description = "Optional. The minimum premiere date. Format = ISO", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
public string MinPremiereDate { get; set; }
- [ApiMember(Name = "MaxPremiereDate", Description = "Optional. The maximum premiere date. Format = yyyyMMddHHmmss", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
+ [ApiMember(Name = "MaxPremiereDate", Description = "Optional. The maximum premiere date. Format = ISO", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
public string MaxPremiereDate { get; set; }
[ApiMember(Name = "HasOverview", Description = "Optional filter by items that have an overview or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
@@ -1031,14 +1031,14 @@ namespace MediaBrowser.Api.UserLibrary
if (!string.IsNullOrEmpty(request.MinPremiereDate))
{
- var date = DateTime.ParseExact(request.MinPremiereDate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
+ var date = DateTime.Parse(request.MinPremiereDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime();
items = items.Where(i => i.PremiereDate.HasValue && i.PremiereDate.Value >= date);
}
if (!string.IsNullOrEmpty(request.MaxPremiereDate))
{
- var date = DateTime.ParseExact(request.MaxPremiereDate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
+ var date = DateTime.Parse(request.MaxPremiereDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime();
items = items.Where(i => i.PremiereDate.HasValue && i.PremiereDate.Value <= date);
}
diff --git a/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs b/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs
index 07fa0e610..d057598e3 100644
--- a/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs
+++ b/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs
@@ -109,7 +109,12 @@ namespace MediaBrowser.Api.WebSocket
{
while (!reader.EndOfStream)
{
- lines.Add(await reader.ReadLineAsync().ConfigureAwait(false));
+ var line = await reader.ReadLineAsync().ConfigureAwait(false);
+
+ if (line.IndexOf(", Debug,", StringComparison.OrdinalIgnoreCase) == -1)
+ {
+ lines.Add(line);
+ }
}
}
}
diff --git a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs
index ceca14f5b..d23c8c555 100644
--- a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs
+++ b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs
@@ -235,5 +235,11 @@ namespace MediaBrowser.Controller.LiveTv
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task.</returns>
Task CloseLiveStream(string id, CancellationToken cancellationToken);
+
+ /// <summary>
+ /// Gets the guide information.
+ /// </summary>
+ /// <returns>GuideInfo.</returns>
+ GuideInfo GetGuideInfo();
}
}
diff --git a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs
index 67475b329..3b499b487 100644
--- a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs
+++ b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs
@@ -45,7 +45,7 @@ namespace MediaBrowser.Controller.Providers
protected static readonly Task<bool> FalseTaskResult = Task.FromResult(false);
- protected static readonly SemaphoreSlim XmlParsingResourcePool = new SemaphoreSlim(5, 5);
+ protected static readonly SemaphoreSlim XmlParsingResourcePool = new SemaphoreSlim(4, 4);
/// <summary>
/// Supportses the specified item.
diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs
index c8c205404..02dd909f2 100644
--- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs
+++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs
@@ -207,7 +207,7 @@ namespace MediaBrowser.Model.Configuration
/// Gets or sets the encoding quality.
/// </summary>
/// <value>The encoding quality.</value>
- public EncodingQuality EncodingQuality { get; set; }
+ public EncodingQuality MediaEncodingQuality { get; set; }
public bool EnableMovieChapterImageExtraction { get; set; }
public bool EnableEpisodeChapterImageExtraction { get; set; }
@@ -219,12 +219,15 @@ namespace MediaBrowser.Model.Configuration
public MetadataOptions GameOptions { get; set; }
public MetadataOptions BookOptions { get; set; }
+ public bool EnableDebugEncodingLogging { get; set; }
+
/// <summary>
/// Initializes a new instance of the <see cref="ServerConfiguration" /> class.
/// </summary>
public ServerConfiguration()
: base()
{
+ MediaEncodingQuality = EncodingQuality.HighSpeed;
ImageSavingConvention = ImageSavingConvention.Legacy;
HttpServerPortNumber = 8096;
LegacyWebSocketPortNumber = 8945;
diff --git a/MediaBrowser.Model/LiveTv/LiveTvServiceInfo.cs b/MediaBrowser.Model/LiveTv/LiveTvServiceInfo.cs
index 87647738f..a25207509 100644
--- a/MediaBrowser.Model/LiveTv/LiveTvServiceInfo.cs
+++ b/MediaBrowser.Model/LiveTv/LiveTvServiceInfo.cs
@@ -1,4 +1,5 @@
-
+using System;
+
namespace MediaBrowser.Model.LiveTv
{
/// <summary>
@@ -12,4 +13,19 @@ namespace MediaBrowser.Model.LiveTv
/// <value>The name.</value>
public string Name { get; set; }
}
+
+ public class GuideInfo
+ {
+ /// <summary>
+ /// Gets or sets the start date.
+ /// </summary>
+ /// <value>The start date.</value>
+ public DateTime StartDate { get; set; }
+
+ /// <summary>
+ /// Gets or sets the end date.
+ /// </summary>
+ /// <value>The end date.</value>
+ public DateTime EndDate { get; set; }
+ }
}
diff --git a/MediaBrowser.Providers/Movies/PersonProviderFromXml.cs b/MediaBrowser.Providers/Movies/PersonProviderFromXml.cs
index 60722f980..014580025 100644
--- a/MediaBrowser.Providers/Movies/PersonProviderFromXml.cs
+++ b/MediaBrowser.Providers/Movies/PersonProviderFromXml.cs
@@ -57,6 +57,7 @@ namespace MediaBrowser.Providers.Movies
/// </summary>
/// <param name="item">The item.</param>
/// <param name="force">if set to <c>true</c> [force].</param>
+ /// <param name="providerInfo">The provider information.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{System.Boolean}.</returns>
public override async Task<bool> FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken)
@@ -79,12 +80,10 @@ namespace MediaBrowser.Providers.Movies
{
XmlParsingResourcePool.Release();
}
-
- SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
- return true;
}
- return false;
+ SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
+ return true;
}
}
}
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
index 332cbf016..d49410b4e 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -980,5 +980,19 @@ namespace MediaBrowser.Server.Implementations.LiveTv
{
return ActiveService.CloseLiveStream(id, cancellationToken);
}
+
+ public GuideInfo GetGuideInfo()
+ {
+ var programs = _programs.ToList();
+
+ var startDate = programs.Select(i => i.Value.ProgramInfo.StartDate).Min();
+ var endDate = programs.Select(i => i.Value.ProgramInfo.StartDate).Max();
+
+ return new GuideInfo
+ {
+ StartDate = startDate,
+ EndDate = endDate
+ };
+ }
}
}
diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs
index 5605ce6e7..c67a90e3e 100644
--- a/MediaBrowser.WebDashboard/Api/DashboardService.cs
+++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs
@@ -481,6 +481,7 @@ namespace MediaBrowser.WebDashboard.Api
"edititemmetadata.js",
"edititempeople.js",
"edititemimages.js",
+ "encodingsettings.js",
"gamesrecommendedpage.js",
"gamesystemspage.js",
"gamespage.js",
diff --git a/MediaBrowser.WebDashboard/ApiClient.js b/MediaBrowser.WebDashboard/ApiClient.js
index be2a342c9..f2b2d6b7b 100644
--- a/MediaBrowser.WebDashboard/ApiClient.js
+++ b/MediaBrowser.WebDashboard/ApiClient.js
@@ -389,6 +389,17 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
});
};
+ self.getLiveTvGuideInfo = function (options) {
+
+ var url = self.getUrl("LiveTv/GuideInfo", options || {});
+
+ return self.ajax({
+ type: "GET",
+ url: url,
+ dataType: "json"
+ });
+ };
+
self.getLiveTvChannel = function (id, userId) {
if (!id) {
diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
index cbd53bde9..7724c02f5 100644
--- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
+++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
@@ -160,6 +160,9 @@
<Content Include="dashboard-ui\css\mediaplayer.css">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
+ <Content Include="dashboard-ui\encodingsettings.html">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
<Content Include="dashboard-ui\livetvchannel.html">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
@@ -397,6 +400,9 @@
<Content Include="dashboard-ui\scripts\appsplayback.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
+ <Content Include="dashboard-ui\scripts\encodingsettings.js">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
<Content Include="dashboard-ui\scripts\librarymenu.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
diff --git a/MediaBrowser.WebDashboard/packages.config b/MediaBrowser.WebDashboard/packages.config
index 4932cd5c1..3bb7e7105 100644
--- a/MediaBrowser.WebDashboard/packages.config
+++ b/MediaBrowser.WebDashboard/packages.config
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="MediaBrowser.ApiClient.Javascript" version="3.0.218" targetFramework="net45" />
+ <package id="MediaBrowser.ApiClient.Javascript" version="3.0.219" targetFramework="net45" />
</packages> \ No newline at end of file