Implement various suggestions

pull/2772/head
Patrick Barron 5 years ago
parent e1958e3902
commit 81b4a4c54c

@ -484,9 +484,9 @@ namespace MediaBrowser.Api
/// <returns>Task.</returns> /// <returns>Task.</returns>
internal Task KillTranscodingJobs(string deviceId, string playSessionId, Func<string, bool> deleteFiles) internal Task KillTranscodingJobs(string deviceId, string playSessionId, Func<string, bool> deleteFiles)
{ {
return KillTranscodingJobs(j => !string.IsNullOrWhiteSpace(playSessionId) return KillTranscodingJobs(j => string.IsNullOrWhiteSpace(playSessionId)
? string.Equals(playSessionId, j.PlaySessionId, StringComparison.OrdinalIgnoreCase) ? string.Equals(deviceId, j.DeviceId, StringComparison.OrdinalIgnoreCase)
: string.Equals(deviceId, j.DeviceId, StringComparison.OrdinalIgnoreCase), deleteFiles); : string.Equals(playSessionId, j.PlaySessionId, StringComparison.OrdinalIgnoreCase), deleteFiles);
} }
/// <summary> /// <summary>

@ -117,8 +117,8 @@ namespace MediaBrowser.Api
var val = Filters; var val = Filters;
return string.IsNullOrEmpty(val) return string.IsNullOrEmpty(val)
? new ItemFilter[] { } ? Array.Empty<ItemFilter>()
: val.Split(',').Select(v => (ItemFilter)Enum.Parse(typeof(ItemFilter), v, true)); : val.Split(',').Select(v => Enum.Parse<ItemFilter>(v, true));
} }
/// <summary> /// <summary>
@ -170,11 +170,9 @@ namespace MediaBrowser.Api
/// <returns>IEnumerable{ItemFilter}.</returns> /// <returns>IEnumerable{ItemFilter}.</returns>
public IEnumerable<ItemFilter> GetFilters() public IEnumerable<ItemFilter> GetFilters()
{ {
var val = Filters; return string.IsNullOrEmpty(Filters)
? Array.Empty<ItemFilter>()
return string.IsNullOrEmpty(val) : Filters.Split(',').Select(v => Enum.Parse<ItemFilter>(v, true));
? new ItemFilter[] { }
: val.Split(',').Select(v => (ItemFilter)Enum.Parse(typeof(ItemFilter), v, true));
} }
} }

@ -306,7 +306,8 @@ namespace MediaBrowser.Api
Directory.CreateDirectory(Path.GetDirectoryName(fullCachePath)); Directory.CreateDirectory(Path.GetDirectoryName(fullCachePath));
using (var stream = result.Content) using (var stream = result.Content)
{ {
using var fileStream = new FileStream(fullCachePath, using var fileStream = new FileStream(
fullCachePath,
FileMode.Create, FileMode.Create,
FileAccess.Write, FileAccess.Write,
FileShare.Read, FileShare.Read,

@ -393,6 +393,7 @@ namespace MediaBrowser.Api.Library
{ {
return true; return true;
} }
if (string.Equals(type, "Season", StringComparison.OrdinalIgnoreCase) if (string.Equals(type, "Season", StringComparison.OrdinalIgnoreCase)
|| string.Equals(type, "Episode", StringComparison.OrdinalIgnoreCase) || string.Equals(type, "Episode", StringComparison.OrdinalIgnoreCase)
|| string.Equals(type, "MusicVideo", StringComparison.OrdinalIgnoreCase)) || string.Equals(type, "MusicVideo", StringComparison.OrdinalIgnoreCase))

@ -137,7 +137,9 @@ namespace MediaBrowser.Api.Playback
var ext = outputFileExtension.ToLowerInvariant(); var ext = outputFileExtension.ToLowerInvariant();
var folder = ServerConfigurationManager.GetTranscodePath(); var folder = ServerConfigurationManager.GetTranscodePath();
return EnableOutputInSubFolder ? Path.Combine(folder, filename, filename + ext) : Path.Combine(folder, filename + ext); return EnableOutputInSubFolder
? Path.Combine(folder, filename, filename + ext)
: Path.Combine(folder, filename + ext);
} }
protected virtual string GetDefaultEncoderPreset() protected virtual string GetDefaultEncoderPreset()
@ -393,44 +395,36 @@ namespace MediaBrowser.Api.Playback
request.Static = string.Equals("true", val, StringComparison.OrdinalIgnoreCase); request.Static = string.Equals("true", val, StringComparison.OrdinalIgnoreCase);
break; break;
case 4: case 4:
{
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.VideoCodec = val; videoRequest.VideoCodec = val;
} }
break; break;
}
case 5: case 5:
request.AudioCodec = val; request.AudioCodec = val;
break; break;
case 6: case 6:
{
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.AudioStreamIndex = int.Parse(val, CultureInfo.InvariantCulture); videoRequest.AudioStreamIndex = int.Parse(val, CultureInfo.InvariantCulture);
} }
break; break;
}
case 7: case 7:
{
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.SubtitleStreamIndex = int.Parse(val, CultureInfo.InvariantCulture); videoRequest.SubtitleStreamIndex = int.Parse(val, CultureInfo.InvariantCulture);
} }
break; break;
}
case 8: case 8:
{
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.VideoBitRate = int.Parse(val, CultureInfo.InvariantCulture); videoRequest.VideoBitRate = int.Parse(val, CultureInfo.InvariantCulture);
} }
break; break;
}
case 9: case 9:
request.AudioBitRate = int.Parse(val, CultureInfo.InvariantCulture); request.AudioBitRate = int.Parse(val, CultureInfo.InvariantCulture);
break; break;
@ -438,71 +432,57 @@ namespace MediaBrowser.Api.Playback
request.MaxAudioChannels = int.Parse(val, CultureInfo.InvariantCulture); request.MaxAudioChannels = int.Parse(val, CultureInfo.InvariantCulture);
break; break;
case 11: case 11:
{
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.MaxFramerate = float.Parse(val, CultureInfo.InvariantCulture); videoRequest.MaxFramerate = float.Parse(val, CultureInfo.InvariantCulture);
} }
break; break;
}
case 12: case 12:
{
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.MaxWidth = int.Parse(val, CultureInfo.InvariantCulture); videoRequest.MaxWidth = int.Parse(val, CultureInfo.InvariantCulture);
} }
break; break;
}
case 13: case 13:
{
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.MaxHeight = int.Parse(val, CultureInfo.InvariantCulture); videoRequest.MaxHeight = int.Parse(val, CultureInfo.InvariantCulture);
} }
break; break;
}
case 14: case 14:
request.StartTimeTicks = long.Parse(val, CultureInfo.InvariantCulture); request.StartTimeTicks = long.Parse(val, CultureInfo.InvariantCulture);
break; break;
case 15: case 15:
{
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.Level = val; videoRequest.Level = val;
} }
break; break;
}
case 16: case 16:
{
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.MaxRefFrames = int.Parse(val, CultureInfo.InvariantCulture); videoRequest.MaxRefFrames = int.Parse(val, CultureInfo.InvariantCulture);
} }
break; break;
}
case 17: case 17:
{
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.MaxVideoBitDepth = int.Parse(val, CultureInfo.InvariantCulture); videoRequest.MaxVideoBitDepth = int.Parse(val, CultureInfo.InvariantCulture);
} }
break; break;
}
case 18: case 18:
{
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.Profile = val; videoRequest.Profile = val;
} }
break; break;
}
case 19: case 19:
// cabac no longer used // cabac no longer used
break; break;
@ -519,16 +499,13 @@ namespace MediaBrowser.Api.Playback
// Duplicating ItemId because of MediaMonkey // Duplicating ItemId because of MediaMonkey
break; break;
case 24: case 24:
{
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.CopyTimestamps = string.Equals("true", val, StringComparison.OrdinalIgnoreCase); videoRequest.CopyTimestamps = string.Equals("true", val, StringComparison.OrdinalIgnoreCase);
} }
break; break;
}
case 25: case 25:
{
if (!string.IsNullOrWhiteSpace(val) && videoRequest != null) if (!string.IsNullOrWhiteSpace(val) && videoRequest != null)
{ {
if (Enum.TryParse(val, out SubtitleDeliveryMethod method)) if (Enum.TryParse(val, out SubtitleDeliveryMethod method))
@ -538,52 +515,43 @@ namespace MediaBrowser.Api.Playback
} }
break; break;
}
case 26: case 26:
request.TranscodingMaxAudioChannels = int.Parse(val, CultureInfo.InvariantCulture); request.TranscodingMaxAudioChannels = int.Parse(val, CultureInfo.InvariantCulture);
break; break;
case 27: case 27:
{
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.EnableSubtitlesInManifest = string.Equals("true", val, StringComparison.OrdinalIgnoreCase); videoRequest.EnableSubtitlesInManifest = string.Equals("true", val, StringComparison.OrdinalIgnoreCase);
} }
break; break;
}
case 28: case 28:
request.Tag = val; request.Tag = val;
break; break;
case 29: case 29:
{
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.RequireAvc = string.Equals("true", val, StringComparison.OrdinalIgnoreCase); videoRequest.RequireAvc = string.Equals("true", val, StringComparison.OrdinalIgnoreCase);
} }
break; break;
}
case 30: case 30:
request.SubtitleCodec = val; request.SubtitleCodec = val;
break; break;
case 31: case 31:
{
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.RequireNonAnamorphic = string.Equals("true", val, StringComparison.OrdinalIgnoreCase); videoRequest.RequireNonAnamorphic = string.Equals("true", val, StringComparison.OrdinalIgnoreCase);
} }
break; break;
}
case 32: case 32:
{
if (videoRequest != null) if (videoRequest != null)
{ {
videoRequest.DeInterlace = string.Equals("true", val, StringComparison.OrdinalIgnoreCase); videoRequest.DeInterlace = string.Equals("true", val, StringComparison.OrdinalIgnoreCase);
} }
break; break;
}
case 33: case 33:
request.TranscodeReasons = val; request.TranscodeReasons = val;
break; break;
@ -860,14 +828,11 @@ namespace MediaBrowser.Api.Playback
{ {
state.DeviceProfile = DlnaManager.GetProfile(state.Request.DeviceProfileId); state.DeviceProfile = DlnaManager.GetProfile(state.Request.DeviceProfileId);
} }
else else if (!string.IsNullOrWhiteSpace(state.Request.DeviceId))
{ {
if (!string.IsNullOrWhiteSpace(state.Request.DeviceId)) var caps = DeviceManager.GetCapabilities(state.Request.DeviceId);
{
var caps = DeviceManager.GetCapabilities(state.Request.DeviceId);
state.DeviceProfile = caps != null ? caps.DeviceProfile : DlnaManager.GetProfile(headers); state.DeviceProfile = caps == null ? DlnaManager.GetProfile(headers) : caps.DeviceProfile;
}
} }
var profile = state.DeviceProfile; var profile = state.DeviceProfile;

@ -240,7 +240,8 @@ namespace MediaBrowser.Api.Playback.Hls
protected Stream GetPlaylistFileStream(string path) protected Stream GetPlaylistFileStream(string path)
{ {
return new FileStream(path, return new FileStream(
path,
FileMode.Open, FileMode.Open,
FileAccess.Read, FileAccess.Read,
FileShare.ReadWrite, FileShare.ReadWrite,

@ -243,14 +243,12 @@ namespace MediaBrowser.Api
result.StartDate = program.StartDate; result.StartDate = program.StartDate;
break; break;
case Series series: case Series series:
{
if (series.Status.HasValue) if (series.Status.HasValue)
{ {
result.Status = series.Status.Value.ToString(); result.Status = series.Status.Value.ToString();
} }
break; break;
}
case MusicAlbum album: case MusicAlbum album:
result.Artists = album.Artists; result.Artists = album.Artists;
result.AlbumArtist = album.AlbumArtist; result.AlbumArtist = album.AlbumArtist;

@ -399,7 +399,7 @@ namespace MediaBrowser.Api.UserLibrary
return string.IsNullOrEmpty(VideoTypes) return string.IsNullOrEmpty(VideoTypes)
? Array.Empty<VideoType>() ? Array.Empty<VideoType>()
: VideoTypes.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) : VideoTypes.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(v => (VideoType)Enum.Parse(typeof(VideoType), v, true)).ToArray(); .Select(v => Enum.Parse<VideoType>(v, true)).ToArray();
} }
/// <summary> /// <summary>
@ -411,9 +411,9 @@ namespace MediaBrowser.Api.UserLibrary
var val = Filters; var val = Filters;
return string.IsNullOrEmpty(val) return string.IsNullOrEmpty(val)
? new ItemFilter[] { } ? Array.Empty<ItemFilter>()
: val.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries). : val.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).
Select(v => (ItemFilter)Enum.Parse(typeof(ItemFilter), v, true)).ToArray(); Select(v => Enum.Parse<ItemFilter>(v, true)).ToArray();
} }
/// <summary> /// <summary>
@ -426,7 +426,7 @@ namespace MediaBrowser.Api.UserLibrary
return string.IsNullOrEmpty(val) return string.IsNullOrEmpty(val)
? new ImageType[] { } ? new ImageType[] { }
: val.Split(',').Select(v => (ImageType)Enum.Parse(typeof(ImageType), v, true)).ToArray(); : val.Split(',').Select(v => Enum.Parse<ImageType>(v, true)).ToArray();
} }
/// <summary> /// <summary>
@ -462,7 +462,9 @@ namespace MediaBrowser.Api.UserLibrary
var sortOrderIndex = sortOrders.Length > i ? i : 0; var sortOrderIndex = sortOrders.Length > i ? i : 0;
var sortOrderValue = sortOrders.Length > sortOrderIndex ? sortOrders[sortOrderIndex] : null; var sortOrderValue = sortOrders.Length > sortOrderIndex ? sortOrders[sortOrderIndex] : null;
var sortOrder = string.Equals(sortOrderValue, "Descending", StringComparison.OrdinalIgnoreCase) ? MediaBrowser.Model.Entities.SortOrder.Descending : MediaBrowser.Model.Entities.SortOrder.Ascending; var sortOrder = string.Equals(sortOrderValue, "Descending", StringComparison.OrdinalIgnoreCase)
? MediaBrowser.Model.Entities.SortOrder.Descending
: MediaBrowser.Model.Entities.SortOrder.Ascending;
result[i] = new ValueTuple<string, SortOrder>(vals[i], sortOrder); result[i] = new ValueTuple<string, SortOrder>(vals[i], sortOrder);
} }

@ -138,15 +138,23 @@ namespace MediaBrowser.Api
var videosWithVersions = items.Where(i => i.MediaSourceCount > 1) var videosWithVersions = items.Where(i => i.MediaSourceCount > 1)
.ToList(); .ToList();
var primaryVersion = videosWithVersions.FirstOrDefault() ?? items.OrderBy(i var primaryVersion = videosWithVersions.FirstOrDefault();
=> (i.Video3DFormat.HasValue || i.VideoType != Model.Entities.VideoType.VideoFile) ? 1 : 0) if (primaryVersion == null)
.ThenByDescending(i => {
{ primaryVersion = items.OrderBy(i =>
var stream = i.GetDefaultVideoStream(); {
if (i.Video3DFormat.HasValue || i.VideoType != Model.Entities.VideoType.VideoFile)
return stream?.Width ?? 0; {
return 1;
}).First(); }
return 0;
})
.ThenByDescending(i =>
{
return i.GetDefaultVideoStream()?.Width ?? 0;
}).First();
}
var list = primaryVersion.LinkedAlternateVersions.ToList(); var list = primaryVersion.LinkedAlternateVersions.ToList();

Loading…
Cancel
Save