mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-04-22 18:14:42 +01:00
Merge branch 'jellyfin:master' into gzip
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Xml.Serialization;
|
||||
|
||||
namespace MediaBrowser.Model.Branding;
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ namespace MediaBrowser.Model.Configuration
|
||||
/// </summary>
|
||||
public enum EmbeddedSubtitleOptions
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// Allow all embedded subs.
|
||||
/// </summary>
|
||||
@@ -26,5 +25,4 @@ namespace MediaBrowser.Model.Configuration
|
||||
/// </summary>
|
||||
AllowNone = 3,
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
using System;
|
||||
|
||||
#nullable disable
|
||||
#pragma warning disable CS1591
|
||||
|
||||
|
||||
@@ -22,10 +22,10 @@ namespace MediaBrowser.Model.Configuration
|
||||
HidePlayedInLatest = true;
|
||||
PlayDefaultAudioTrack = true;
|
||||
|
||||
LatestItemsExcludes = Array.Empty<string>();
|
||||
OrderedViews = Array.Empty<string>();
|
||||
MyMediaExcludes = Array.Empty<string>();
|
||||
GroupedFolders = Array.Empty<string>();
|
||||
LatestItemsExcludes = Array.Empty<Guid>();
|
||||
OrderedViews = Array.Empty<Guid>();
|
||||
MyMediaExcludes = Array.Empty<Guid>();
|
||||
GroupedFolders = Array.Empty<Guid>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -48,7 +48,7 @@ namespace MediaBrowser.Model.Configuration
|
||||
|
||||
public bool DisplayMissingEpisodes { get; set; }
|
||||
|
||||
public string[] GroupedFolders { get; set; }
|
||||
public Guid[] GroupedFolders { get; set; }
|
||||
|
||||
public SubtitlePlaybackMode SubtitleMode { get; set; }
|
||||
|
||||
@@ -56,11 +56,11 @@ namespace MediaBrowser.Model.Configuration
|
||||
|
||||
public bool EnableLocalPassword { get; set; }
|
||||
|
||||
public string[] OrderedViews { get; set; }
|
||||
public Guid[] OrderedViews { get; set; }
|
||||
|
||||
public string[] LatestItemsExcludes { get; set; }
|
||||
public Guid[] LatestItemsExcludes { get; set; }
|
||||
|
||||
public string[] MyMediaExcludes { get; set; }
|
||||
public Guid[] MyMediaExcludes { get; set; }
|
||||
|
||||
public bool HidePlayedInLatest { get; set; }
|
||||
|
||||
|
||||
@@ -29,10 +29,7 @@ namespace MediaBrowser.Model.Cryptography
|
||||
|
||||
public PasswordHash(string id, byte[] hash, byte[] salt, Dictionary<string, string> parameters)
|
||||
{
|
||||
if (id == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(id));
|
||||
}
|
||||
ArgumentNullException.ThrowIfNull(id);
|
||||
|
||||
if (id.Length == 0)
|
||||
{
|
||||
|
||||
@@ -8,7 +8,7 @@ using MediaBrowser.Model.MediaInfo;
|
||||
|
||||
namespace MediaBrowser.Model.Dlna
|
||||
{
|
||||
public class ContentFeatureBuilder
|
||||
public static class ContentFeatureBuilder
|
||||
{
|
||||
public static string BuildImageHeader(
|
||||
DeviceProfile profile,
|
||||
@@ -157,7 +157,7 @@ namespace MediaBrowser.Model.Dlna
|
||||
flagValue |= DlnaFlags.ByteBasedSeek;
|
||||
}
|
||||
|
||||
// Time based seek is curently disabled when streaming. On LG CX3 adding DlnaFlags.TimeBasedSeek and orgPn causes the DLNA playback to fail (format not supported). Further investigations are needed before enabling the remaining code paths.
|
||||
// Time based seek is currently disabled when streaming. On LG CX3 adding DlnaFlags.TimeBasedSeek and orgPn causes the DLNA playback to fail (format not supported). Further investigations are needed before enabling the remaining code paths.
|
||||
// else if (runtimeTicks.HasValue)
|
||||
// {
|
||||
// flagValue = flagValue | DlnaFlags.TimeBasedSeek;
|
||||
|
||||
@@ -565,10 +565,7 @@ namespace MediaBrowser.Model.Dlna
|
||||
|
||||
private StreamInfo BuildVideoItem(MediaSourceInfo item, VideoOptions options)
|
||||
{
|
||||
if (item == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(item));
|
||||
}
|
||||
ArgumentNullException.ThrowIfNull(item);
|
||||
|
||||
StreamInfo playlistItem = new StreamInfo
|
||||
{
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using MediaBrowser.Model.Drawing;
|
||||
using MediaBrowser.Model.Dto;
|
||||
using MediaBrowser.Model.Entities;
|
||||
|
||||
@@ -76,6 +76,8 @@ namespace MediaBrowser.Model.Dto
|
||||
|
||||
public bool? CanDownload { get; set; }
|
||||
|
||||
public bool? HasLyrics { get; set; }
|
||||
|
||||
public bool? HasSubtitles { get; set; }
|
||||
|
||||
public string PreferredMetadataLanguage { get; set; }
|
||||
@@ -294,13 +296,13 @@ namespace MediaBrowser.Model.Dto
|
||||
public NameGuidPair[] GenreItems { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets wether the item has a logo, this will hold the Id of the Parent that has one.
|
||||
/// Gets or sets whether the item has a logo, this will hold the Id of the Parent that has one.
|
||||
/// </summary>
|
||||
/// <value>The parent logo item id.</value>
|
||||
public Guid? ParentLogoItemId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets wether the item has any backdrops, this will hold the Id of the Parent that has one.
|
||||
/// Gets or sets whether the item has any backdrops, this will hold the Id of the Parent that has one.
|
||||
/// </summary>
|
||||
/// <value>The parent backdrop item id.</value>
|
||||
public Guid? ParentBackdropItemId { get; set; }
|
||||
@@ -506,7 +508,7 @@ namespace MediaBrowser.Model.Dto
|
||||
public string ParentLogoImageTag { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets wether the item has fan art, this will hold the Id of the Parent that has one.
|
||||
/// Gets or sets whether the item has fan art, this will hold the Id of the Parent that has one.
|
||||
/// </summary>
|
||||
/// <value>The parent art item id.</value>
|
||||
public Guid? ParentArtItemId { get; set; }
|
||||
|
||||
@@ -221,6 +221,8 @@ namespace MediaBrowser.Model.Entities
|
||||
|
||||
public string LocalizedExternal { get; set; }
|
||||
|
||||
public string LocalizedHearingImpaired { get; set; }
|
||||
|
||||
public string DisplayTitle
|
||||
{
|
||||
get
|
||||
@@ -345,6 +347,11 @@ namespace MediaBrowser.Model.Entities
|
||||
attributes.Add(string.IsNullOrEmpty(LocalizedUndefined) ? "Und" : LocalizedUndefined);
|
||||
}
|
||||
|
||||
if (IsHearingImpaired)
|
||||
{
|
||||
attributes.Add(string.IsNullOrEmpty(LocalizedHearingImpaired) ? "Hearing Impaired" : LocalizedHearingImpaired);
|
||||
}
|
||||
|
||||
if (IsDefault)
|
||||
{
|
||||
attributes.Add(string.IsNullOrEmpty(LocalizedDefault) ? "Default" : LocalizedDefault);
|
||||
@@ -453,6 +460,12 @@ namespace MediaBrowser.Model.Entities
|
||||
/// <value><c>true</c> if this instance is forced; otherwise, <c>false</c>.</value>
|
||||
public bool IsForced { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether this instance is for the hearing impaired.
|
||||
/// </summary>
|
||||
/// <value><c>true</c> if this instance is for the hearing impaired; otherwise, <c>false</c>.</value>
|
||||
public bool IsHearingImpaired { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the height.
|
||||
/// </summary>
|
||||
@@ -594,6 +607,10 @@ namespace MediaBrowser.Model.Entities
|
||||
<= 426 when Height <= 240 => IsInterlaced ? "240i" : "240p",
|
||||
// 640x360 (16:9 square pixel format)
|
||||
<= 640 when Height <= 360 => IsInterlaced ? "360i" : "360p",
|
||||
// 682x384 (16:9 square pixel format)
|
||||
<= 682 when Height <= 384 => IsInterlaced ? "384i" : "384p",
|
||||
// 720x404 (16:9 square pixel format)
|
||||
<= 720 when Height <= 404 => IsInterlaced ? "404i" : "404p",
|
||||
// 854x480 (16:9 square pixel format)
|
||||
<= 854 when Height <= 480 => IsInterlaced ? "480i" : "480p",
|
||||
// 960x544 (16:9 square pixel format)
|
||||
@@ -602,7 +619,7 @@ namespace MediaBrowser.Model.Entities
|
||||
<= 1024 when Height <= 576 => IsInterlaced ? "576i" : "576p",
|
||||
// 1280x720
|
||||
<= 1280 when Height <= 962 => IsInterlaced ? "720i" : "720p",
|
||||
// 2560x1080 (FHD ultra wide 21:9) using 1440px width to accomodate WQHD
|
||||
// 2560x1080 (FHD ultra wide 21:9) using 1440px width to accommodate WQHD
|
||||
<= 2560 when Height <= 1440 => IsInterlaced ? "1080i" : "1080p",
|
||||
// 4K
|
||||
<= 4096 when Height <= 3072 => "4K",
|
||||
|
||||
@@ -23,6 +23,11 @@ namespace MediaBrowser.Model.Entities
|
||||
/// <summary>
|
||||
/// The embedded image.
|
||||
/// </summary>
|
||||
EmbeddedImage
|
||||
EmbeddedImage,
|
||||
|
||||
/// <summary>
|
||||
/// The data.
|
||||
/// </summary>
|
||||
Data
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,10 +28,7 @@ namespace MediaBrowser.Model.Entities
|
||||
/// <returns><c>true</c> if a provider id with the given name was found; otherwise <c>false</c>.</returns>
|
||||
public static bool HasProviderId(this IHasProviderIds instance, string name)
|
||||
{
|
||||
if (instance == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(instance));
|
||||
}
|
||||
ArgumentNullException.ThrowIfNull(instance);
|
||||
|
||||
return instance.TryGetProviderId(name, out _);
|
||||
}
|
||||
@@ -56,10 +53,7 @@ namespace MediaBrowser.Model.Entities
|
||||
/// <returns><c>true</c> if a provider id with the given name was found; otherwise <c>false</c>.</returns>
|
||||
public static bool TryGetProviderId(this IHasProviderIds instance, string name, [NotNullWhen(true)] out string? id)
|
||||
{
|
||||
if (instance == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(instance));
|
||||
}
|
||||
ArgumentNullException.ThrowIfNull(instance);
|
||||
|
||||
if (instance.ProviderIds == null)
|
||||
{
|
||||
@@ -121,10 +115,7 @@ namespace MediaBrowser.Model.Entities
|
||||
/// <param name="value">The value.</param>
|
||||
public static void SetProviderId(this IHasProviderIds instance, string name, string? value)
|
||||
{
|
||||
if (instance == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(instance));
|
||||
}
|
||||
ArgumentNullException.ThrowIfNull(instance);
|
||||
|
||||
// If it's null remove the key from the dictionary
|
||||
if (string.IsNullOrEmpty(value))
|
||||
|
||||
@@ -8,6 +8,7 @@ namespace MediaBrowser.Model.LiveTv
|
||||
public TunerHostInfo()
|
||||
{
|
||||
AllowHWTranscoding = true;
|
||||
IgnoreDts = true;
|
||||
}
|
||||
|
||||
public string Id { get; set; }
|
||||
@@ -31,5 +32,7 @@ namespace MediaBrowser.Model.LiveTv
|
||||
public int TunerCount { get; set; }
|
||||
|
||||
public string UserAgent { get; set; }
|
||||
|
||||
public bool IgnoreDts { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,13 +34,13 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.2" />
|
||||
<PackageReference Include="MimeTypes" Version="2.4.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="System.Globalization" Version="4.3.0" />
|
||||
<PackageReference Include="System.Text.Json" Version="6.0.5" />
|
||||
<PackageReference Include="System.Text.Json" Version="6.0.6" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace MediaBrowser.Model.Querying
|
||||
/// Gets or sets the series id.
|
||||
/// </summary>
|
||||
/// <value>The series id.</value>
|
||||
public string SeriesId { get; set; }
|
||||
public Guid? SeriesId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the start index. Use for paging.
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
#nullable disable
|
||||
#pragma warning disable CS1591
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Jellyfin.Data.Enums;
|
||||
|
||||
namespace MediaBrowser.Model.Search
|
||||
{
|
||||
@@ -11,12 +9,28 @@ namespace MediaBrowser.Model.Search
|
||||
/// </summary>
|
||||
public class SearchHint
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="SearchHint" /> class.
|
||||
/// </summary>
|
||||
public SearchHint()
|
||||
{
|
||||
Name = string.Empty;
|
||||
MatchedTerm = string.Empty;
|
||||
MediaType = string.Empty;
|
||||
Artists = Array.Empty<string>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the item id.
|
||||
/// </summary>
|
||||
/// <value>The item id.</value>
|
||||
[Obsolete("Use Id instead")]
|
||||
public Guid ItemId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the item id.
|
||||
/// </summary>
|
||||
/// <value>The item id.</value>
|
||||
public Guid Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@@ -53,38 +67,42 @@ namespace MediaBrowser.Model.Search
|
||||
/// Gets or sets the image tag.
|
||||
/// </summary>
|
||||
/// <value>The image tag.</value>
|
||||
public string PrimaryImageTag { get; set; }
|
||||
public string? PrimaryImageTag { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the thumb image tag.
|
||||
/// </summary>
|
||||
/// <value>The thumb image tag.</value>
|
||||
public string ThumbImageTag { get; set; }
|
||||
public string? ThumbImageTag { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the thumb image item identifier.
|
||||
/// </summary>
|
||||
/// <value>The thumb image item identifier.</value>
|
||||
public string ThumbImageItemId { get; set; }
|
||||
public string? ThumbImageItemId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the backdrop image tag.
|
||||
/// </summary>
|
||||
/// <value>The backdrop image tag.</value>
|
||||
public string BackdropImageTag { get; set; }
|
||||
public string? BackdropImageTag { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the backdrop image item identifier.
|
||||
/// </summary>
|
||||
/// <value>The backdrop image item identifier.</value>
|
||||
public string BackdropImageItemId { get; set; }
|
||||
public string? BackdropImageItemId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the type.
|
||||
/// </summary>
|
||||
/// <value>The type.</value>
|
||||
public string Type { get; set; }
|
||||
public BaseItemKind Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether this instance is folder.
|
||||
/// </summary>
|
||||
/// <value><c>true</c> if this instance is folder; otherwise, <c>false</c>.</value>
|
||||
public bool? IsFolder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@@ -99,31 +117,47 @@ namespace MediaBrowser.Model.Search
|
||||
/// <value>The type of the media.</value>
|
||||
public string MediaType { get; set; }
|
||||
|
||||
/// <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; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the series.
|
||||
/// </summary>
|
||||
/// <value>The series.</value>
|
||||
public string Series { get; set; }
|
||||
public string? Series { get; set; }
|
||||
|
||||
public string Status { get; set; }
|
||||
/// <summary>
|
||||
/// Gets or sets the status.
|
||||
/// </summary>
|
||||
/// <value>The status.</value>
|
||||
public string? Status { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the album.
|
||||
/// </summary>
|
||||
/// <value>The album.</value>
|
||||
public string Album { get; set; }
|
||||
public string? Album { get; set; }
|
||||
|
||||
public Guid AlbumId { get; set; }
|
||||
/// <summary>
|
||||
/// Gets or sets the album id.
|
||||
/// </summary>
|
||||
/// <value>The album id.</value>
|
||||
public Guid? AlbumId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the album artist.
|
||||
/// </summary>
|
||||
/// <value>The album artist.</value>
|
||||
public string AlbumArtist { get; set; }
|
||||
public string? AlbumArtist { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the artists.
|
||||
@@ -147,13 +181,13 @@ namespace MediaBrowser.Model.Search
|
||||
/// Gets or sets the channel identifier.
|
||||
/// </summary>
|
||||
/// <value>The channel identifier.</value>
|
||||
public Guid ChannelId { get; set; }
|
||||
public Guid? ChannelId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the name of the channel.
|
||||
/// </summary>
|
||||
/// <value>The name of the channel.</value>
|
||||
public string ChannelName { get; set; }
|
||||
public string? ChannelName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the primary image aspect ratio.
|
||||
|
||||
@@ -11,7 +11,7 @@ namespace MediaBrowser.Model.SyncPlay
|
||||
Idle = 0,
|
||||
|
||||
/// <summary>
|
||||
/// The group is in wating state. Playback is paused. Will start playing when users are ready.
|
||||
/// The group is in waiting state. Playback is paused. Will start playing when users are ready.
|
||||
/// </summary>
|
||||
Waiting = 1,
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace MediaBrowser.Model.Tasks
|
||||
/// <summary>
|
||||
/// Cancels if running and queue.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">An implementatin of <see cref="IScheduledTask" />.</typeparam>
|
||||
/// <typeparam name="T">An implementation of <see cref="IScheduledTask" />.</typeparam>
|
||||
/// <param name="options">Task options.</param>
|
||||
void CancelIfRunningAndQueue<T>(TaskOptions options)
|
||||
where T : IScheduledTask;
|
||||
@@ -30,21 +30,21 @@ namespace MediaBrowser.Model.Tasks
|
||||
/// <summary>
|
||||
/// Cancels if running and queue.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">An implementatin of <see cref="IScheduledTask" />.</typeparam>
|
||||
/// <typeparam name="T">An implementation of <see cref="IScheduledTask" />.</typeparam>
|
||||
void CancelIfRunningAndQueue<T>()
|
||||
where T : IScheduledTask;
|
||||
|
||||
/// <summary>
|
||||
/// Cancels if running.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">An implementatin of <see cref="IScheduledTask" />.</typeparam>
|
||||
/// <typeparam name="T">An implementation of <see cref="IScheduledTask" />.</typeparam>
|
||||
void CancelIfRunning<T>()
|
||||
where T : IScheduledTask;
|
||||
|
||||
/// <summary>
|
||||
/// Queues the scheduled task.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">An implementatin of <see cref="IScheduledTask" />.</typeparam>
|
||||
/// <typeparam name="T">An implementation of <see cref="IScheduledTask" />.</typeparam>
|
||||
/// <param name="options">Task options.</param>
|
||||
void QueueScheduledTask<T>(TaskOptions options)
|
||||
where T : IScheduledTask;
|
||||
@@ -52,7 +52,7 @@ namespace MediaBrowser.Model.Tasks
|
||||
/// <summary>
|
||||
/// Queues the scheduled task.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">An implementatin of <see cref="IScheduledTask" />.</typeparam>
|
||||
/// <typeparam name="T">An implementation of <see cref="IScheduledTask" />.</typeparam>
|
||||
void QueueScheduledTask<T>()
|
||||
where T : IScheduledTask;
|
||||
|
||||
|
||||
@@ -21,10 +21,10 @@ namespace MediaBrowser.Model.Tasks
|
||||
/// <summary>
|
||||
/// Stars waiting for the trigger action.
|
||||
/// </summary>
|
||||
/// <param name="lastResult">Result of the last run triggerd task.</param>
|
||||
/// <param name="lastResult">Result of the last run triggered task.</param>
|
||||
/// <param name="logger">The <see cref="ILogger"/>.</param>
|
||||
/// <param name="taskName">The name of the task.</param>
|
||||
/// <param name="isApplicationStartup">Wheter or not this is is fired during startup.</param>
|
||||
/// <param name="isApplicationStartup">Whether or not this is is fired during startup.</param>
|
||||
void Start(TaskResult? lastResult, ILogger logger, string taskName, bool isApplicationStartup);
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user