commit
47dbd1c1b2
|
@ -14,6 +14,7 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using MediaBrowser.Controller.LiveTv;
|
||||||
|
|
||||||
namespace MediaBrowser.Api.Movies
|
namespace MediaBrowser.Api.Movies
|
||||||
{
|
{
|
||||||
|
@ -132,13 +133,15 @@ namespace MediaBrowser.Api.Movies
|
||||||
|
|
||||||
var query = new InternalItemsQuery(user)
|
var query = new InternalItemsQuery(user)
|
||||||
{
|
{
|
||||||
IncludeItemTypes = new[] { typeof(Movie).Name }
|
IncludeItemTypes = new[]
|
||||||
|
{
|
||||||
|
typeof(Movie).Name,
|
||||||
|
typeof(Trailer).Name,
|
||||||
|
//typeof(LiveTvProgram).Name
|
||||||
|
},
|
||||||
|
// IsMovie = true
|
||||||
};
|
};
|
||||||
|
|
||||||
var includeList = query.IncludeItemTypes.ToList();
|
|
||||||
includeList.Add(typeof(Trailer).Name);
|
|
||||||
query.IncludeItemTypes = includeList.ToArray();
|
|
||||||
|
|
||||||
var parentIds = string.IsNullOrWhiteSpace(request.ParentId) ? new string[] { } : new[] { request.ParentId };
|
var parentIds = string.IsNullOrWhiteSpace(request.ParentId) ? new string[] { } : new[] { request.ParentId };
|
||||||
var movies = _libraryManager.GetItemList(query, parentIds)
|
var movies = _libraryManager.GetItemList(query, parentIds)
|
||||||
.OrderBy(i => (int)i.SourceType);
|
.OrderBy(i => (int)i.SourceType);
|
||||||
|
@ -182,13 +185,15 @@ namespace MediaBrowser.Api.Movies
|
||||||
|
|
||||||
var query = new InternalItemsQuery(user)
|
var query = new InternalItemsQuery(user)
|
||||||
{
|
{
|
||||||
IncludeItemTypes = new[] { typeof(Movie).Name }
|
IncludeItemTypes = new[]
|
||||||
|
{
|
||||||
|
typeof(Movie).Name,
|
||||||
|
typeof(Trailer).Name,
|
||||||
|
//typeof(LiveTvProgram).Name
|
||||||
|
},
|
||||||
|
//IsMovie = true
|
||||||
};
|
};
|
||||||
|
|
||||||
var includeList = query.IncludeItemTypes.ToList();
|
|
||||||
includeList.Add(typeof(Trailer).Name);
|
|
||||||
query.IncludeItemTypes = includeList.ToArray();
|
|
||||||
|
|
||||||
var list = _libraryManager.GetItemList(query)
|
var list = _libraryManager.GetItemList(query)
|
||||||
.OrderBy(i => (int)i.SourceType)
|
.OrderBy(i => (int)i.SourceType)
|
||||||
.DistinctBy(i => i.GetProviderId(MetadataProviders.Imdb) ?? Guid.NewGuid().ToString("N"))
|
.DistinctBy(i => i.GetProviderId(MetadataProviders.Imdb) ?? Guid.NewGuid().ToString("N"))
|
||||||
|
|
|
@ -179,17 +179,13 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||||
{
|
{
|
||||||
var items = GetRecursiveChildren().ToList();
|
var items = GetRecursiveChildren().ToList();
|
||||||
|
|
||||||
var songs = items.OfType<Audio>().ToList();
|
var totalItems = items.Count;
|
||||||
|
|
||||||
var others = items.Except(songs).ToList();
|
|
||||||
|
|
||||||
var totalItems = songs.Count + others.Count;
|
|
||||||
var numComplete = 0;
|
var numComplete = 0;
|
||||||
|
|
||||||
var childUpdateType = ItemUpdateType.None;
|
var childUpdateType = ItemUpdateType.None;
|
||||||
|
|
||||||
// Refresh songs
|
// Refresh songs
|
||||||
foreach (var item in songs)
|
foreach (var item in items)
|
||||||
{
|
{
|
||||||
cancellationToken.ThrowIfCancellationRequested();
|
cancellationToken.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
|
@ -199,7 +195,7 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||||
numComplete++;
|
numComplete++;
|
||||||
double percent = numComplete;
|
double percent = numComplete;
|
||||||
percent /= totalItems;
|
percent /= totalItems;
|
||||||
progress.Report(percent * 100);
|
progress.Report(percent * 95);
|
||||||
}
|
}
|
||||||
|
|
||||||
var parentRefreshOptions = refreshOptions;
|
var parentRefreshOptions = refreshOptions;
|
||||||
|
@ -212,19 +208,6 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||||
// Refresh current item
|
// Refresh current item
|
||||||
await RefreshMetadata(parentRefreshOptions, cancellationToken).ConfigureAwait(false);
|
await RefreshMetadata(parentRefreshOptions, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
// Refresh all non-songs
|
|
||||||
foreach (var item in others)
|
|
||||||
{
|
|
||||||
cancellationToken.ThrowIfCancellationRequested();
|
|
||||||
|
|
||||||
var updateType = await item.RefreshMetadata(parentRefreshOptions, cancellationToken).ConfigureAwait(false);
|
|
||||||
|
|
||||||
numComplete++;
|
|
||||||
double percent = numComplete;
|
|
||||||
percent /= totalItems;
|
|
||||||
progress.Report(percent * 100);
|
|
||||||
}
|
|
||||||
|
|
||||||
progress.Report(100);
|
progress.Report(100);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -283,9 +283,6 @@ namespace MediaBrowser.Controller.Entities.TV
|
||||||
var totalItems = seasons.Count + otherItems.Count;
|
var totalItems = seasons.Count + otherItems.Count;
|
||||||
var numComplete = 0;
|
var numComplete = 0;
|
||||||
|
|
||||||
refreshOptions = new MetadataRefreshOptions(refreshOptions);
|
|
||||||
refreshOptions.IsPostRecursiveRefresh = true;
|
|
||||||
|
|
||||||
// Refresh current item
|
// Refresh current item
|
||||||
await RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
|
await RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
|
@ -315,7 +312,7 @@ namespace MediaBrowser.Controller.Entities.TV
|
||||||
&& refreshOptions.MetadataRefreshMode != MetadataRefreshMode.FullRefresh
|
&& refreshOptions.MetadataRefreshMode != MetadataRefreshMode.FullRefresh
|
||||||
&& !refreshOptions.ReplaceAllMetadata
|
&& !refreshOptions.ReplaceAllMetadata
|
||||||
&& episode.IsMissingEpisode
|
&& episode.IsMissingEpisode
|
||||||
&& episode.LocationType == Model.Entities.LocationType.Virtual
|
&& episode.LocationType == LocationType.Virtual
|
||||||
&& episode.PremiereDate.HasValue
|
&& episode.PremiereDate.HasValue
|
||||||
&& (DateTime.UtcNow - episode.PremiereDate.Value).TotalDays > 30)
|
&& (DateTime.UtcNow - episode.PremiereDate.Value).TotalDays > 30)
|
||||||
{
|
{
|
||||||
|
@ -333,6 +330,8 @@ namespace MediaBrowser.Controller.Entities.TV
|
||||||
progress.Report(percent * 100);
|
progress.Report(percent * 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
refreshOptions = new MetadataRefreshOptions(refreshOptions);
|
||||||
|
refreshOptions.IsPostRecursiveRefresh = true;
|
||||||
await ProviderManager.RefreshSingleItem(this, refreshOptions, cancellationToken).ConfigureAwait(false);
|
await ProviderManager.RefreshSingleItem(this, refreshOptions, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
progress.Report(100);
|
progress.Report(100);
|
||||||
|
|
|
@ -184,8 +184,6 @@ namespace MediaBrowser.Model.Configuration
|
||||||
public bool EnableVideoArchiveFiles { get; set; }
|
public bool EnableVideoArchiveFiles { get; set; }
|
||||||
public int RemoteClientBitrateLimit { get; set; }
|
public int RemoteClientBitrateLimit { get; set; }
|
||||||
|
|
||||||
public bool DenyIFrameEmbedding { get; set; }
|
|
||||||
|
|
||||||
public AutoOnOff EnableLibraryMonitor { get; set; }
|
public AutoOnOff EnableLibraryMonitor { get; set; }
|
||||||
|
|
||||||
public int SharingExpirationDays { get; set; }
|
public int SharingExpirationDays { get; set; }
|
||||||
|
@ -222,7 +220,6 @@ namespace MediaBrowser.Model.Configuration
|
||||||
EnableAnonymousUsageReporting = true;
|
EnableAnonymousUsageReporting = true;
|
||||||
|
|
||||||
EnableAutomaticRestart = true;
|
EnableAutomaticRestart = true;
|
||||||
DenyIFrameEmbedding = true;
|
|
||||||
|
|
||||||
EnableUPnP = true;
|
EnableUPnP = true;
|
||||||
SharingExpirationDays = 30;
|
SharingExpirationDays = 30;
|
||||||
|
|
|
@ -51,6 +51,11 @@ namespace MediaBrowser.Server.Implementations.Devices
|
||||||
|
|
||||||
public async Task<DeviceInfo> RegisterDevice(string reportedId, string name, string appName, string appVersion, string usedByUserId)
|
public async Task<DeviceInfo> RegisterDevice(string reportedId, string name, string appName, string appVersion, string usedByUserId)
|
||||||
{
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(reportedId))
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("reportedId");
|
||||||
|
}
|
||||||
|
|
||||||
var device = GetDevice(reportedId) ?? new DeviceInfo
|
var device = GetDevice(reportedId) ?? new DeviceInfo
|
||||||
{
|
{
|
||||||
Id = reportedId
|
Id = reportedId
|
||||||
|
|
|
@ -106,7 +106,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
HostContext.GlobalResponseFilters.Add(new ResponseFilter(_logger, () => _config.Configuration.DenyIFrameEmbedding).FilterResponse);
|
HostContext.GlobalResponseFilters.Add(new ResponseFilter(_logger).FilterResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnAfterInit()
|
public override void OnAfterInit()
|
||||||
|
|
|
@ -12,12 +12,10 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
||||||
{
|
{
|
||||||
private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
|
private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
private readonly Func<bool> _denyIframeEmbedding;
|
|
||||||
|
|
||||||
public ResponseFilter(ILogger logger, Func<bool> denyIframeEmbedding)
|
public ResponseFilter(ILogger logger)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_denyIframeEmbedding = denyIframeEmbedding;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -31,11 +29,6 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
||||||
// Try to prevent compatibility view
|
// Try to prevent compatibility view
|
||||||
res.AddHeader("X-UA-Compatible", "IE=Edge");
|
res.AddHeader("X-UA-Compatible", "IE=Edge");
|
||||||
|
|
||||||
if (_denyIframeEmbedding())
|
|
||||||
{
|
|
||||||
res.AddHeader("X-Frame-Options", "SAMEORIGIN");
|
|
||||||
}
|
|
||||||
|
|
||||||
var exception = dto as Exception;
|
var exception = dto as Exception;
|
||||||
|
|
||||||
if (exception != null)
|
if (exception != null)
|
||||||
|
|
|
@ -122,7 +122,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||||
AddIfMissing(excludeItemTypes, typeof(MusicGenre).Name);
|
AddIfMissing(excludeItemTypes, typeof(MusicGenre).Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (query.IncludePeople && (includeItemTypes.Count == 0 || includeItemTypes.Contains("People", StringComparer.OrdinalIgnoreCase)))
|
if (query.IncludePeople && (includeItemTypes.Count == 0 || includeItemTypes.Contains("People", StringComparer.OrdinalIgnoreCase) || includeItemTypes.Contains("Person", StringComparer.OrdinalIgnoreCase)))
|
||||||
{
|
{
|
||||||
if (!query.IncludeMedia)
|
if (!query.IncludeMedia)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2132,7 +2132,41 @@ namespace MediaBrowser.Server.Implementations.Persistence
|
||||||
}
|
}
|
||||||
if (query.IsMovie.HasValue)
|
if (query.IsMovie.HasValue)
|
||||||
{
|
{
|
||||||
whereClauses.Add("IsMovie=@IsMovie");
|
var alternateTypes = new List<string>();
|
||||||
|
if (query.IncludeItemTypes.Length == 0 || query.IncludeItemTypes.Contains(typeof(Movie).Name))
|
||||||
|
{
|
||||||
|
alternateTypes.Add(typeof(Movie).FullName);
|
||||||
|
}
|
||||||
|
if (query.IncludeItemTypes.Length == 0 || query.IncludeItemTypes.Contains(typeof(Trailer).Name))
|
||||||
|
{
|
||||||
|
alternateTypes.Add(typeof(Trailer).FullName);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (alternateTypes.Count == 0)
|
||||||
|
{
|
||||||
|
whereClauses.Add("IsMovie=@IsMovie");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (query.IsMovie.Value)
|
||||||
|
{
|
||||||
|
var typeClauses = new List<string>();
|
||||||
|
var typeIndex = 0;
|
||||||
|
foreach (var type in alternateTypes)
|
||||||
|
{
|
||||||
|
var paramName = "@AlternateType" + typeIndex.ToString(CultureInfo.InvariantCulture);
|
||||||
|
typeClauses.Add("Type=" + paramName);
|
||||||
|
cmd.Parameters.Add(cmd, paramName, DbType.String).Value = type;
|
||||||
|
typeIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
whereClauses.Add("(IsMovie=@IsMovie OR " + string.Join(" OR ", typeClauses.ToArray()) + ")");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
whereClauses.Add("(IsMovie is null OR IsMovie=@IsMovie)");
|
||||||
|
}
|
||||||
|
}
|
||||||
cmd.Parameters.Add(cmd, "@IsMovie", DbType.Boolean).Value = query.IsMovie;
|
cmd.Parameters.Add(cmd, "@IsMovie", DbType.Boolean).Value = query.IsMovie;
|
||||||
}
|
}
|
||||||
if (query.IsKids.HasValue)
|
if (query.IsKids.HasValue)
|
||||||
|
|
|
@ -404,6 +404,10 @@ namespace MediaBrowser.Server.Implementations.Session
|
||||||
/// <returns>SessionInfo.</returns>
|
/// <returns>SessionInfo.</returns>
|
||||||
private async Task<SessionInfo> GetSessionInfo(string appName, string appVersion, string deviceId, string deviceName, string remoteEndPoint, User user)
|
private async Task<SessionInfo> GetSessionInfo(string appName, string appVersion, string deviceId, string deviceName, string remoteEndPoint, User user)
|
||||||
{
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(deviceId))
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("deviceId");
|
||||||
|
}
|
||||||
var key = GetSessionKey(appName, deviceId);
|
var key = GetSessionKey(appName, deviceId);
|
||||||
|
|
||||||
await _sessionLock.WaitAsync(CancellationToken.None).ConfigureAwait(false);
|
await _sessionLock.WaitAsync(CancellationToken.None).ConfigureAwait(false);
|
||||||
|
@ -1748,6 +1752,11 @@ namespace MediaBrowser.Server.Implementations.Session
|
||||||
|
|
||||||
public void ReportNowViewingItem(string sessionId, string itemId)
|
public void ReportNowViewingItem(string sessionId, string itemId)
|
||||||
{
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(itemId))
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("itemId");
|
||||||
|
}
|
||||||
|
|
||||||
var item = _libraryManager.GetItemById(new Guid(itemId));
|
var item = _libraryManager.GetItemById(new Guid(itemId));
|
||||||
|
|
||||||
var info = GetItemInfo(item, null, null);
|
var info = GetItemInfo(item, null, null);
|
||||||
|
|
|
@ -230,7 +230,12 @@ namespace MediaBrowser.Server.Implementations.Session
|
||||||
{
|
{
|
||||||
var vals = message.Data.Split('|');
|
var vals = message.Data.Split('|');
|
||||||
|
|
||||||
_sessionManager.ReportNowViewingItem(session.Id, vals[1]);
|
var itemId = vals[1];
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(itemId))
|
||||||
|
{
|
||||||
|
_sessionManager.ReportNowViewingItem(session.Id, itemId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ namespace MediaBrowser.ServerApplication
|
||||||
Description = "The windows background service for Emby Server.",
|
Description = "The windows background service for Emby Server.",
|
||||||
|
|
||||||
// Will ensure the network is available
|
// Will ensure the network is available
|
||||||
ServicesDependedOn = new[] { "LanmanServer", "Tcpip" }
|
ServicesDependedOn = new[] { "LanmanServer", "EventLog", "Tcpip", "http" }
|
||||||
};
|
};
|
||||||
|
|
||||||
// Microsoft didn't add the ability to add a
|
// Microsoft didn't add the ability to add a
|
||||||
|
|
|
@ -125,12 +125,6 @@
|
||||||
<Content Include="dashboard-ui\components\guestinviter\guestinviter.template.html">
|
<Content Include="dashboard-ui\components\guestinviter\guestinviter.template.html">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<Content Include="dashboard-ui\components\ironcardlist\ironcardlist.template.html">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Include="dashboard-ui\components\ironcardlist\ironcardlist.js">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Include="dashboard-ui\components\metadataeditor\metadataeditor.js">
|
<Content Include="dashboard-ui\components\metadataeditor\metadataeditor.js">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user