mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-08 00:39:25 +01:00
Merge remote-tracking branch 'upstream/master' into authenticationdb-efcore
This commit is contained in:
@@ -1,12 +1,22 @@
|
||||
#nullable disable
|
||||
#pragma warning disable CS1591
|
||||
|
||||
namespace MediaBrowser.Model.Configuration
|
||||
{
|
||||
public class MediaPathInfo
|
||||
{
|
||||
public MediaPathInfo(string path)
|
||||
{
|
||||
Path = path;
|
||||
}
|
||||
|
||||
// Needed for xml serialization
|
||||
public MediaPathInfo()
|
||||
{
|
||||
Path = string.Empty;
|
||||
}
|
||||
|
||||
public string Path { get; set; }
|
||||
|
||||
public string NetworkPath { get; set; }
|
||||
public string? NetworkPath { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#pragma warning disable CS1591
|
||||
#pragma warning disable CS1591, CA1707
|
||||
|
||||
namespace MediaBrowser.Model.Dlna
|
||||
{
|
||||
|
||||
@@ -21,11 +21,7 @@ namespace MediaBrowser.Model.Dlna
|
||||
|
||||
public static ResolutionOptions Normalize(
|
||||
int? inputBitrate,
|
||||
int? unused1,
|
||||
int? unused2,
|
||||
int outputBitrate,
|
||||
string inputCodec,
|
||||
string outputCodec,
|
||||
int? maxWidth,
|
||||
int? maxHeight)
|
||||
{
|
||||
|
||||
@@ -694,7 +694,7 @@ namespace MediaBrowser.Model.Dlna
|
||||
if (isEligibleForDirectPlay || isEligibleForDirectStream)
|
||||
{
|
||||
// See if it can be direct played
|
||||
var directPlayInfo = GetVideoDirectPlayProfile(options, item, videoStream, audioStream, isEligibleForDirectPlay, isEligibleForDirectStream);
|
||||
var directPlayInfo = GetVideoDirectPlayProfile(options, item, videoStream, audioStream, isEligibleForDirectStream);
|
||||
var directPlay = directPlayInfo.Item1;
|
||||
|
||||
if (directPlay != null)
|
||||
@@ -810,7 +810,7 @@ namespace MediaBrowser.Model.Dlna
|
||||
// Honor requested max channels
|
||||
playlistItem.GlobalMaxAudioChannels = options.MaxAudioChannels;
|
||||
|
||||
int audioBitrate = GetAudioBitrate(playlistItem.SubProtocol, options.GetMaxBitrate(false) ?? 0, playlistItem.TargetAudioCodec, audioStream, playlistItem);
|
||||
int audioBitrate = GetAudioBitrate(options.GetMaxBitrate(false) ?? 0, playlistItem.TargetAudioCodec, audioStream, playlistItem);
|
||||
playlistItem.AudioBitrate = Math.Min(playlistItem.AudioBitrate ?? audioBitrate, audioBitrate);
|
||||
|
||||
isFirstAppliedCodecProfile = true;
|
||||
@@ -907,7 +907,7 @@ namespace MediaBrowser.Model.Dlna
|
||||
return 192000;
|
||||
}
|
||||
|
||||
private static int GetAudioBitrate(string subProtocol, long maxTotalBitrate, string[] targetAudioCodecs, MediaStream audioStream, StreamInfo item)
|
||||
private static int GetAudioBitrate(long maxTotalBitrate, string[] targetAudioCodecs, MediaStream audioStream, StreamInfo item)
|
||||
{
|
||||
string targetAudioCodec = targetAudioCodecs.Length == 0 ? null : targetAudioCodecs[0];
|
||||
|
||||
@@ -1005,7 +1005,6 @@ namespace MediaBrowser.Model.Dlna
|
||||
MediaSourceInfo mediaSource,
|
||||
MediaStream videoStream,
|
||||
MediaStream audioStream,
|
||||
bool isEligibleForDirectPlay,
|
||||
bool isEligibleForDirectStream)
|
||||
{
|
||||
if (options.ForceDirectPlay)
|
||||
@@ -1146,7 +1145,7 @@ namespace MediaBrowser.Model.Dlna
|
||||
{
|
||||
string audioCodec = audioStream.Codec;
|
||||
conditions = new List<ProfileCondition>();
|
||||
bool? isSecondaryAudio = audioStream == null ? null : mediaSource.IsSecondaryAudio(audioStream);
|
||||
bool? isSecondaryAudio = mediaSource.IsSecondaryAudio(audioStream);
|
||||
|
||||
foreach (var i in profile.CodecProfiles)
|
||||
{
|
||||
@@ -1262,7 +1261,7 @@ namespace MediaBrowser.Model.Dlna
|
||||
continue;
|
||||
}
|
||||
|
||||
if (playMethod == PlayMethod.Transcode && !IsSubtitleEmbedSupported(subtitleStream, profile, transcodingSubProtocol, outputContainer))
|
||||
if (playMethod == PlayMethod.Transcode && !IsSubtitleEmbedSupported(outputContainer))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -1291,7 +1290,7 @@ namespace MediaBrowser.Model.Dlna
|
||||
continue;
|
||||
}
|
||||
|
||||
if (playMethod == PlayMethod.Transcode && !IsSubtitleEmbedSupported(subtitleStream, profile, transcodingSubProtocol, outputContainer))
|
||||
if (playMethod == PlayMethod.Transcode && !IsSubtitleEmbedSupported(outputContainer))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -1313,7 +1312,7 @@ namespace MediaBrowser.Model.Dlna
|
||||
};
|
||||
}
|
||||
|
||||
private static bool IsSubtitleEmbedSupported(MediaStream subtitleStream, SubtitleProfile subtitleProfile, string transcodingSubProtocol, string transcodingContainer)
|
||||
private static bool IsSubtitleEmbedSupported(string transcodingContainer)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(transcodingContainer))
|
||||
{
|
||||
@@ -1728,18 +1727,14 @@ namespace MediaBrowser.Model.Dlna
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(value))
|
||||
// change from split by | to comma
|
||||
// strip spaces to avoid having to encode
|
||||
var values = value
|
||||
.Split('|', StringSplitOptions.RemoveEmptyEntries);
|
||||
|
||||
if (condition.Condition == ProfileConditionType.Equals || condition.Condition == ProfileConditionType.EqualsAny)
|
||||
{
|
||||
// change from split by | to comma
|
||||
|
||||
// strip spaces to avoid having to encode
|
||||
var values = value
|
||||
.Split('|', StringSplitOptions.RemoveEmptyEntries);
|
||||
|
||||
if (condition.Condition == ProfileConditionType.Equals || condition.Condition == ProfileConditionType.EqualsAny)
|
||||
{
|
||||
item.SetOption(qualifier, "profile", string.Join(',', values));
|
||||
}
|
||||
item.SetOption(qualifier, "profile", string.Join(',', values));
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
@@ -636,7 +636,7 @@ namespace MediaBrowser.Model.Dlna
|
||||
continue;
|
||||
}
|
||||
|
||||
var encodedValue = pair.Value.Replace(" ", "%20");
|
||||
var encodedValue = pair.Value.Replace(" ", "%20", StringComparison.Ordinal);
|
||||
|
||||
list.Add(string.Format(CultureInfo.InvariantCulture, "{0}={1}", pair.Name, encodedValue));
|
||||
}
|
||||
|
||||
@@ -255,13 +255,18 @@ namespace MediaBrowser.Model.Entities
|
||||
attributes.Add(string.IsNullOrEmpty(LocalizedForced) ? "Forced" : LocalizedForced);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(Codec))
|
||||
{
|
||||
attributes.Add(Codec.ToUpperInvariant());
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(Title))
|
||||
{
|
||||
var result = new StringBuilder(Title);
|
||||
foreach (var tag in attributes)
|
||||
{
|
||||
// Keep Tags that are not already in Title.
|
||||
if (Title.IndexOf(tag, StringComparison.OrdinalIgnoreCase) == -1)
|
||||
if (!Title.Contains(tag, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
result.Append(" - ").Append(tag);
|
||||
}
|
||||
|
||||
@@ -1,48 +1,68 @@
|
||||
namespace MediaBrowser.Model.Entities
|
||||
{
|
||||
/// <summary>
|
||||
/// Struct PersonType.
|
||||
/// Types of persons.
|
||||
/// </summary>
|
||||
public class PersonType
|
||||
public static class PersonType
|
||||
{
|
||||
/// <summary>
|
||||
/// The actor.
|
||||
/// A person whose profession is acting on the stage, in films, or on television.
|
||||
/// </summary>
|
||||
public const string Actor = "Actor";
|
||||
|
||||
/// <summary>
|
||||
/// The director.
|
||||
/// A person who supervises the actors and other staff in a film, play, or similar production.
|
||||
/// </summary>
|
||||
public const string Director = "Director";
|
||||
|
||||
/// <summary>
|
||||
/// The composer.
|
||||
/// A person who writes music, especially as a professional occupation.
|
||||
/// </summary>
|
||||
public const string Composer = "Composer";
|
||||
|
||||
/// <summary>
|
||||
/// The writer.
|
||||
/// A writer of a book, article, or document. Can also be used as a generic term for music writer if there is a lack of specificity.
|
||||
/// </summary>
|
||||
public const string Writer = "Writer";
|
||||
|
||||
/// <summary>
|
||||
/// The guest star.
|
||||
/// A well-known actor or other performer who appears in a work in which they do not have a regular role.
|
||||
/// </summary>
|
||||
public const string GuestStar = "GuestStar";
|
||||
|
||||
/// <summary>
|
||||
/// The producer.
|
||||
/// A person responsible for the financial and managerial aspects of the making of a film or broadcast or for staging a play, opera, etc.
|
||||
/// </summary>
|
||||
public const string Producer = "Producer";
|
||||
|
||||
/// <summary>
|
||||
/// The conductor.
|
||||
/// A person who directs the performance of an orchestra or choir.
|
||||
/// </summary>
|
||||
public const string Conductor = "Conductor";
|
||||
|
||||
/// <summary>
|
||||
/// The lyricist.
|
||||
/// A person who writes the words to a song or musical.
|
||||
/// </summary>
|
||||
public const string Lyricist = "Lyricist";
|
||||
|
||||
/// <summary>
|
||||
/// A person who adapts a musical composition for performance.
|
||||
/// </summary>
|
||||
public const string Arranger = "Arranger";
|
||||
|
||||
/// <summary>
|
||||
/// An audio engineer who performed a general engineering role.
|
||||
/// </summary>
|
||||
public const string Engineer = "Engineer";
|
||||
|
||||
/// <summary>
|
||||
/// An engineer responsible for using a mixing console to mix a recorded track into a single piece of music suitable for release.
|
||||
/// </summary>
|
||||
public const string Mixer = "Mixer";
|
||||
|
||||
/// <summary>
|
||||
/// A person who remixed a recording by taking one or more other tracks, substantially altering them and mixing them together with other material.
|
||||
/// </summary>
|
||||
public const string Remixer = "Remixer";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
#nullable disable
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using MediaBrowser.Model.Entities;
|
||||
@@ -56,19 +55,11 @@ namespace MediaBrowser.Model.Globalization
|
||||
/// <returns><see cref="IEnumerable{LocalizatonOption}" />.</returns>
|
||||
IEnumerable<LocalizationOption> GetLocalizationOptions();
|
||||
|
||||
/// <summary>
|
||||
/// Checks if the string contains a character with the specified unicode category.
|
||||
/// </summary>
|
||||
/// <param name="value">The string.</param>
|
||||
/// <param name="category">The unicode category.</param>
|
||||
/// <returns>Wether or not the string contains a character with the specified unicode category.</returns>
|
||||
bool HasUnicodeCategory(string value, UnicodeCategory category);
|
||||
|
||||
/// <summary>
|
||||
/// Returns the correct <see cref="CultureInfo" /> for the given language.
|
||||
/// </summary>
|
||||
/// <param name="language">The language.</param>
|
||||
/// <returns>The correct <see cref="CultureInfo" /> for the given language.</returns>
|
||||
CultureDto FindLanguageInfo(string language);
|
||||
CultureDto? FindLanguageInfo(string language);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ namespace MediaBrowser.Model.IO
|
||||
/// <returns>A <see cref="FileSystemMetadata" /> object.</returns>
|
||||
/// <remarks><para>If the specified path points to a directory, the returned <see cref="FileSystemMetadata" /> object's
|
||||
/// <see cref="FileSystemMetadata.IsDirectory" /> property and the <see cref="FileSystemMetadata.Exists" /> property will both be set to false.</para>
|
||||
/// <para>For automatic handling of files <b>and</b> directories, use <see cref="M:IFileSystem.GetFileSystemInfo(System.String)" />.</para></remarks>
|
||||
/// <para>For automatic handling of files <b>and</b> directories, use <see cref="GetFileSystemInfo(string)" />.</para></remarks>
|
||||
FileSystemMetadata GetFileInfo(string path);
|
||||
|
||||
/// <summary>
|
||||
@@ -61,7 +61,7 @@ namespace MediaBrowser.Model.IO
|
||||
/// <returns>A <see cref="FileSystemMetadata" /> object.</returns>
|
||||
/// <remarks><para>If the specified path points to a file, the returned <see cref="FileSystemMetadata" /> object's
|
||||
/// <see cref="FileSystemMetadata.IsDirectory" /> property will be set to true and the <see cref="FileSystemMetadata.Exists" /> property will be set to false.</para>
|
||||
/// <para>For automatic handling of files <b>and</b> directories, use <see cref="M:IFileSystem.GetFileSystemInfo(System.String)" />.</para></remarks>
|
||||
/// <para>For automatic handling of files <b>and</b> directories, use <see cref="GetFileSystemInfo(string)" />.</para></remarks>
|
||||
FileSystemMetadata GetDirectoryInfo(string path);
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -133,6 +133,7 @@ namespace MediaBrowser.Model.System
|
||||
[Obsolete("This should be handled by the package manager")]
|
||||
public bool HasUpdateAvailable { get; set; }
|
||||
|
||||
[Obsolete("This isn't set correctly anymore")]
|
||||
public FFmpegLocation EncoderLocation { get; set; }
|
||||
|
||||
public Architecture SystemArchitecture { get; set; }
|
||||
|
||||
Reference in New Issue
Block a user