mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
Implement various suggestions
This commit is contained in:
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 1;
|
||||||
|
}
|
||||||
|
|
||||||
return stream?.Width ?? 0;
|
return 0;
|
||||||
|
})
|
||||||
}).First();
|
.ThenByDescending(i =>
|
||||||
|
{
|
||||||
|
return i.GetDefaultVideoStream()?.Width ?? 0;
|
||||||
|
}).First();
|
||||||
|
}
|
||||||
|
|
||||||
var list = primaryVersion.LinkedAlternateVersions.ToList();
|
var list = primaryVersion.LinkedAlternateVersions.ToList();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user