chore: fix spelling

* a
* acceleration
* addition
* altogether
* api clients
* artist
* associated
* bandwidth
* cannot
* capabilities
* case-insensitive
* case-sensitive
* configuration
* delimiter
* dependent
* diacritics
* directors
* enable
* explicitly
* filters
* finish
* have
* hierarchy
* implicit
* include
* information
* into
* its
* keepalive
* localization
* macos
* manual
* matching
* metadata
* nonexistent
* options
* overridden
* parsed
* parser
* playback
* preferring
* processes
* processing
* provider
* ratings
* retrieval
* running
* segments
* separate
* should
* station
* subdirectories
* superseded
* supported
* system
* than
* the
* throws
* transpose
* valid
* was

link: forum or chat rooms

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
This commit is contained in:
Josh Soref 2024-12-07 21:52:54 -10:00
parent b318f33599
commit 044cf9fb85
69 changed files with 159 additions and 154 deletions

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
## configure the following for a manuall install of a specific version from the repo ## configure the following for a manual install of a specific version from the repo
# wget https://repo.jellyfin.org/releases/server/ubuntu/versions/jellyfin-ffmpeg/6.0.1-1/jellyfin-ffmpeg6_6.0.1-1-jammy_amd64.deb -O ffmpeg.deb # wget https://repo.jellyfin.org/releases/server/ubuntu/versions/jellyfin-ffmpeg/6.0.1-1/jellyfin-ffmpeg6_6.0.1-1-jammy_amd64.deb -O ffmpeg.deb

View File

@ -14,7 +14,7 @@ body:
label: "This issue respects the following points:" label: "This issue respects the following points:"
description: All conditions are **required**. Failure to comply with any of these conditions may cause your issue to be closed without comment. description: All conditions are **required**. Failure to comply with any of these conditions may cause your issue to be closed without comment.
options: options:
- label: This is a **bug**, not a question or a configuration issue; Please visit our forum or chat rooms first to troubleshoot with volunteers, before creating a report. The links can be found [here](https://jellyfin.org/contact/). - label: This is a **bug**, not a question or a configuration issue; Please visit our [forum or chat rooms](https://jellyfin.org/contact/) first to troubleshoot with volunteers, before creating a report.
required: true required: true
- label: This issue is **not** already reported on [GitHub](https://github.com/jellyfin/jellyfin/issues?q=is%3Aopen+is%3Aissue) _(I've searched it)_. - label: This issue is **not** already reported on [GitHub](https://github.com/jellyfin/jellyfin/issues?q=is%3Aopen+is%3Aissue) _(I've searched it)_.
required: true required: true

View File

@ -561,7 +561,7 @@ namespace Emby.Server.Implementations.IO
{ {
var enumerationOptions = GetEnumerationOptions(recursive); var enumerationOptions = GetEnumerationOptions(recursive);
// On linux and osx the search pattern is case sensitive // On linux and macOS the search pattern is case-sensitive
// If we're OK with case-sensitivity, and we're only filtering for one extension, then use the native method // If we're OK with case-sensitivity, and we're only filtering for one extension, then use the native method
if ((enableCaseSensitiveExtensions || _isEnvironmentCaseInsensitive) && extensions is not null && extensions.Count == 1) if ((enableCaseSensitiveExtensions || _isEnvironmentCaseInsensitive) && extensions is not null && extensions.Count == 1)
{ {
@ -618,7 +618,7 @@ namespace Emby.Server.Implementations.IO
{ {
var enumerationOptions = GetEnumerationOptions(recursive); var enumerationOptions = GetEnumerationOptions(recursive);
// On linux and osx the search pattern is case sensitive // On linux and macOS the search pattern is case-sensitive
// If we're OK with case-sensitivity, and we're only filtering for one extension, then use the native method // If we're OK with case-sensitivity, and we're only filtering for one extension, then use the native method
if ((enableCaseSensitiveExtensions || _isEnvironmentCaseInsensitive) && extensions is not null && extensions.Length == 1) if ((enableCaseSensitiveExtensions || _isEnvironmentCaseInsensitive) && extensions is not null && extensions.Length == 1)
{ {

View File

@ -39,7 +39,7 @@ namespace Emby.Server.Implementations.Library
public class MediaSourceManager : IMediaSourceManager, IDisposable public class MediaSourceManager : IMediaSourceManager, IDisposable
{ {
// Do not use a pipe here because Roku http requests to the server will fail, without any explicit error message. // Do not use a pipe here because Roku http requests to the server will fail, without any explicit error message.
private const char LiveStreamIdDelimeter = '_'; private const char LiveStreamIdDelimiter = '_';
private readonly IServerApplicationHost _appHost; private readonly IServerApplicationHost _appHost;
private readonly IItemRepository _itemRepo; private readonly IItemRepository _itemRepo;
@ -313,7 +313,7 @@ namespace Emby.Server.Implementations.Library
private static void SetKeyProperties(IMediaSourceProvider provider, MediaSourceInfo mediaSource) private static void SetKeyProperties(IMediaSourceProvider provider, MediaSourceInfo mediaSource)
{ {
var prefix = provider.GetType().FullName.GetMD5().ToString("N", CultureInfo.InvariantCulture) + LiveStreamIdDelimeter; var prefix = provider.GetType().FullName.GetMD5().ToString("N", CultureInfo.InvariantCulture) + LiveStreamIdDelimiter;
if (!string.IsNullOrEmpty(mediaSource.OpenToken) && !mediaSource.OpenToken.StartsWith(prefix, StringComparison.OrdinalIgnoreCase)) if (!string.IsNullOrEmpty(mediaSource.OpenToken) && !mediaSource.OpenToken.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
{ {
@ -866,11 +866,11 @@ namespace Emby.Server.Implementations.Library
{ {
ArgumentException.ThrowIfNullOrEmpty(key); ArgumentException.ThrowIfNullOrEmpty(key);
var keys = key.Split(LiveStreamIdDelimeter, 2); var keys = key.Split(LiveStreamIdDelimiter, 2);
var provider = _providers.FirstOrDefault(i => string.Equals(i.GetType().FullName.GetMD5().ToString("N", CultureInfo.InvariantCulture), keys[0], StringComparison.OrdinalIgnoreCase)); var provider = _providers.FirstOrDefault(i => string.Equals(i.GetType().FullName.GetMD5().ToString("N", CultureInfo.InvariantCulture), keys[0], StringComparison.OrdinalIgnoreCase));
var splitIndex = key.IndexOf(LiveStreamIdDelimeter, StringComparison.Ordinal); var splitIndex = key.IndexOf(LiveStreamIdDelimiter, StringComparison.Ordinal);
var keyId = key.Substring(splitIndex + 1); var keyId = key.Substring(splitIndex + 1);
return (provider, keyId); return (provider, keyId);

View File

@ -231,13 +231,13 @@ namespace Emby.Server.Implementations.Localization
ratings.Add(new ParentalRating("21", 21)); ratings.Add(new ParentalRating("21", 21));
} }
// A lot of countries don't excplicitly have a seperate rating for adult content // A lot of countries don't explicitly have a separate rating for adult content
if (ratings.All(x => x.Value != 1000)) if (ratings.All(x => x.Value != 1000))
{ {
ratings.Add(new ParentalRating("XXX", 1000)); ratings.Add(new ParentalRating("XXX", 1000));
} }
// A lot of countries don't excplicitly have a seperate rating for banned content // A lot of countries don't explicitly have a separate rating for banned content
if (ratings.All(x => x.Value != 1001)) if (ratings.All(x => x.Value != 1001))
{ {
ratings.Add(new ParentalRating("Banned", 1001)); ratings.Add(new ParentalRating("Banned", 1001));

View File

@ -119,7 +119,7 @@ namespace Emby.Server.Implementations.Plugins
// Now load the assemblies.. // Now load the assemblies..
foreach (var plugin in _plugins) foreach (var plugin in _plugins)
{ {
UpdatePluginSuperceedStatus(plugin); UpdatePluginSupersededStatus(plugin);
if (plugin.IsEnabledAndSupported == false) if (plugin.IsEnabledAndSupported == false)
{ {
@ -214,7 +214,7 @@ namespace Emby.Server.Implementations.Plugins
continue; continue;
} }
UpdatePluginSuperceedStatus(plugin); UpdatePluginSupersededStatus(plugin);
if (!plugin.IsEnabledAndSupported) if (!plugin.IsEnabledAndSupported)
{ {
continue; continue;
@ -624,9 +624,9 @@ namespace Emby.Server.Implementations.Plugins
} }
} }
private void UpdatePluginSuperceedStatus(LocalPlugin plugin) private void UpdatePluginSupersededStatus(LocalPlugin plugin)
{ {
if (plugin.Manifest.Status != PluginStatus.Superceded) if (plugin.Manifest.Status != PluginStatus.Superseded)
{ {
return; return;
} }
@ -876,7 +876,7 @@ namespace Emby.Server.Implementations.Plugins
} }
/// <summary> /// <summary>
/// Changes the status of the other versions of the plugin to "Superceded". /// Changes the status of the other versions of the plugin to "Superseded".
/// </summary> /// </summary>
/// <param name="plugin">The <see cref="LocalPlugin"/> that's master.</param> /// <param name="plugin">The <see cref="LocalPlugin"/> that's master.</param>
private void ProcessAlternative(LocalPlugin plugin) private void ProcessAlternative(LocalPlugin plugin)
@ -896,11 +896,11 @@ namespace Emby.Server.Implementations.Plugins
return; return;
} }
if (plugin.Manifest.Status == PluginStatus.Active && !ChangePluginState(previousVersion, PluginStatus.Superceded)) if (plugin.Manifest.Status == PluginStatus.Active && !ChangePluginState(previousVersion, PluginStatus.Superseded))
{ {
_logger.LogError("Unable to enable version {Version} of {Name}", previousVersion.Version, previousVersion.Name); _logger.LogError("Unable to enable version {Version} of {Name}", previousVersion.Version, previousVersion.Name);
} }
else if (plugin.Manifest.Status == PluginStatus.Superceded && !ChangePluginState(previousVersion, PluginStatus.Active)) else if (plugin.Manifest.Status == PluginStatus.Superseded && !ChangePluginState(previousVersion, PluginStatus.Active))
{ {
_logger.LogError("Unable to supercede version {Version} of {Name}", previousVersion.Version, previousVersion.Name); _logger.LogError("Unable to supercede version {Version} of {Name}", previousVersion.Version, previousVersion.Name);
} }

View File

@ -543,7 +543,7 @@ namespace Emby.Server.Implementations.ScheduledTasks
{ {
DisposeTriggers(); DisposeTriggers();
var wassRunning = State == TaskState.Running; var wasRunning = State == TaskState.Running;
var startTime = CurrentExecutionStartTime; var startTime = CurrentExecutionStartTime;
var token = CurrentCancellationTokenSource; var token = CurrentCancellationTokenSource;
@ -596,7 +596,7 @@ namespace Emby.Server.Implementations.ScheduledTasks
} }
} }
if (wassRunning) if (wasRunning)
{ {
OnTaskCompleted(startTime, DateTime.UtcNow, TaskCompletionStatus.Aborted, null); OnTaskCompleted(startTime, DateTime.UtcNow, TaskCompletionStatus.Aborted, null);
} }

View File

@ -88,7 +88,7 @@ namespace Emby.Server.Implementations.ScheduledTasks.Tasks
} }
catch (OperationCanceledException) catch (OperationCanceledException)
{ {
// InstallPackage has it's own inner cancellation token, so only throw this if it's ours // InstallPackage has its own inner cancellation token, so only throw this if it's ours
if (cancellationToken.IsCancellationRequested) if (cancellationToken.IsCancellationRequested)
{ {
throw; throw;

View File

@ -1303,7 +1303,7 @@ namespace Emby.Server.Implementations.Session
if (item is null) if (item is null)
{ {
_logger.LogError("A non-existent item Id {0} was passed into TranslateItemForPlayback", id); _logger.LogError("A nonexistent item Id {0} was passed into TranslateItemForPlayback", id);
return Array.Empty<BaseItem>(); return Array.Empty<BaseItem>();
} }
@ -1356,7 +1356,7 @@ namespace Emby.Server.Implementations.Session
if (item is null) if (item is null)
{ {
_logger.LogError("A non-existent item Id {0} was passed into TranslateItemForInstantMix", id); _logger.LogError("A nonexistent item Id {0} was passed into TranslateItemForInstantMix", id);
return new List<BaseItem>(); return new List<BaseItem>();
} }

View File

@ -187,7 +187,7 @@ namespace Emby.Server.Implementations.Updates
await _pluginManager.PopulateManifest(package, version.VersionNumber, plugin.Path, plugin.Manifest.Status).ConfigureAwait(false); await _pluginManager.PopulateManifest(package, version.VersionNumber, plugin.Path, plugin.Manifest.Status).ConfigureAwait(false);
} }
// Remove versions with a target ABI greater then the current application version. // Remove versions with a target ABI greater than the current application version.
if (Version.TryParse(version.TargetAbi, out var targetAbi) && _applicationHost.ApplicationVersion < targetAbi) if (Version.TryParse(version.TargetAbi, out var targetAbi) && _applicationHost.ApplicationVersion < targetAbi)
{ {
package.Versions.RemoveAt(i); package.Versions.RemoveAt(i);

View File

@ -1778,7 +1778,7 @@ public class DynamicHlsController : BaseJellyfinApiController
} }
else if (state.AudioStream?.CodecTag is not null && state.AudioStream.CodecTag.Equals("ac-4", StringComparison.Ordinal)) else if (state.AudioStream?.CodecTag is not null && state.AudioStream.CodecTag.Equals("ac-4", StringComparison.Ordinal))
{ {
// ac-4 audio tends to hava a super weird sample rate that will fail most encoders // ac-4 audio tends to have a super weird sample rate that will fail most encoders
// force resample it to 48KHz // force resample it to 48KHz
args += " -ar 48000"; args += " -ar 48000";
} }

View File

@ -634,10 +634,10 @@ public class UserLibraryController : BaseJellyfinApiController
{ {
if (item is Person) if (item is Person)
{ {
var hasMetdata = !string.IsNullOrWhiteSpace(item.Overview) && item.HasImage(ImageType.Primary); var hasMetadata = !string.IsNullOrWhiteSpace(item.Overview) && item.HasImage(ImageType.Primary);
var performFullRefresh = !hasMetdata && (DateTime.UtcNow - item.DateLastRefreshed).TotalDays >= 3; var performFullRefresh = !hasMetadata && (DateTime.UtcNow - item.DateLastRefreshed).TotalDays >= 3;
if (!hasMetdata) if (!hasMetadata)
{ {
var options = new MetadataRefreshOptions(new DirectoryService(_fileSystem)) var options = new MetadataRefreshOptions(new DirectoryService(_fileSystem))
{ {

View File

@ -61,7 +61,7 @@ public class OpenLiveStreamDto
public bool? EnableDirectPlay { get; set; } public bool? EnableDirectPlay { get; set; }
/// <summary> /// <summary>
/// Gets or sets a value indicating whether to enale direct stream. /// Gets or sets a value indicating whether to enable direct stream.
/// </summary> /// </summary>
public bool? EnableDirectStream { get; set; } public bool? EnableDirectStream { get; set; }

View File

@ -4,7 +4,7 @@ using MediaBrowser.Model.Dlna;
namespace Jellyfin.Api.Models.MediaInfoDtos; namespace Jellyfin.Api.Models.MediaInfoDtos;
/// <summary> /// <summary>
/// Plabyback info dto. /// Playback info dto.
/// </summary> /// </summary>
public class PlaybackInfoDto public class PlaybackInfoDto
{ {

View File

@ -43,7 +43,7 @@ namespace Jellyfin.Data.Entities.Libraries
/// Gets or sets the next item in the collection. /// Gets or sets the next item in the collection.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// TODO check if this properly updated Dependant and has the proper principal relationship. /// TODO check if this properly updated Dependent and has the proper principal relationship.
/// </remarks> /// </remarks>
public virtual CollectionItem? Next { get; set; } public virtual CollectionItem? Next { get; set; }
@ -51,7 +51,7 @@ namespace Jellyfin.Data.Entities.Libraries
/// Gets or sets the previous item in the collection. /// Gets or sets the previous item in the collection.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// TODO check if this properly updated Dependant and has the proper principal relationship. /// TODO check if this properly updated Dependent and has the proper principal relationship.
/// </remarks> /// </remarks>
public virtual CollectionItem? Previous { get; set; } public virtual CollectionItem? Previous { get; set; }

View File

@ -4,7 +4,7 @@ using System.Collections.Generic;
namespace Jellyfin.Data.Entities.Libraries namespace Jellyfin.Data.Entities.Libraries
{ {
/// <summary> /// <summary>
/// An entity representing a a series. /// An entity representing a series.
/// </summary> /// </summary>
public class Series : LibraryItem public class Series : LibraryItem
{ {

View File

@ -66,7 +66,7 @@ public class TrickplayInfo
public int Interval { get; set; } public int Interval { get; set; }
/// <summary> /// <summary>
/// Gets or sets peak bandwith usage in bits per second. /// Gets or sets peak bandwidth usage in bits per second.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Required. /// Required.

View File

@ -2065,7 +2065,7 @@ public sealed class BaseItemRepository
if (filter.IncludeInheritedTags.Length > 0) if (filter.IncludeInheritedTags.Length > 0)
{ {
// Episodes do not store inherit tags from their parents in the database, and the tag may be still required by the client. // Episodes do not store inherit tags from their parents in the database, and the tag may be still required by the client.
// In addtion to the tags for the episodes themselves, we need to manually query its parent (the season)'s tags as well. // In addition to the tags for the episodes themselves, we need to manually query its parent (the season)'s tags as well.
if (includeTypes.Length == 1 && includeTypes.FirstOrDefault() is BaseItemKind.Episode) if (includeTypes.Length == 1 && includeTypes.FirstOrDefault() is BaseItemKind.Episode)
{ {
baseQuery = baseQuery baseQuery = baseQuery

View File

@ -268,7 +268,7 @@ public class JellyfinDbContext(DbContextOptions<JellyfinDbContext> options, ILog
modelBuilder.SetDefaultDateTimeKind(DateTimeKind.Utc); modelBuilder.SetDefaultDateTimeKind(DateTimeKind.Utc);
base.OnModelCreating(modelBuilder); base.OnModelCreating(modelBuilder);
// Configuration for each entity is in it's own class inside 'ModelConfiguration'. // Configuration for each entity is in its own class inside 'ModelConfiguration'.
modelBuilder.ApplyConfigurationsFromAssembly(typeof(JellyfinDbContext).Assembly); modelBuilder.ApplyConfigurationsFromAssembly(typeof(JellyfinDbContext).Assembly);
} }
} }

View File

@ -22,7 +22,7 @@ using Microsoft.Extensions.Logging;
namespace Jellyfin.Server.Implementations.MediaSegments; namespace Jellyfin.Server.Implementations.MediaSegments;
/// <summary> /// <summary>
/// Manages media segments retrival and storage. /// Manages media segments retrieval and storage.
/// </summary> /// </summary>
public class MediaSegmentManager : IMediaSegmentManager public class MediaSegmentManager : IMediaSegmentManager
{ {

View File

@ -46,7 +46,7 @@ public class TrickplayManager : ITrickplayManager
/// </summary> /// </summary>
/// <param name="logger">The logger.</param> /// <param name="logger">The logger.</param>
/// <param name="mediaEncoder">The media encoder.</param> /// <param name="mediaEncoder">The media encoder.</param>
/// <param name="fileSystem">The file systen.</param> /// <param name="fileSystem">The file system.</param>
/// <param name="encodingHelper">The encoding helper.</param> /// <param name="encodingHelper">The encoding helper.</param>
/// <param name="libraryManager">The library manager.</param> /// <param name="libraryManager">The library manager.</param>
/// <param name="config">The server configuration manager.</param> /// <param name="config">The server configuration manager.</param>

View File

@ -46,7 +46,7 @@ namespace Jellyfin.Server.Migrations.Routines
public Guid Id => Guid.Parse("{EF103419-8451-40D8-9F34-D1A8E93A1679}"); public Guid Id => Guid.Parse("{EF103419-8451-40D8-9F34-D1A8E93A1679}");
/// <inheritdoc/> /// <inheritdoc/>
public string Name => "CreateLoggingConfigHeirarchy"; public string Name => "CreateLoggingConfigHierarchy";
/// <inheritdoc/> /// <inheritdoc/>
public bool PerformOnNewInstall => false; public bool PerformOnNewInstall => false;

View File

@ -61,7 +61,7 @@ namespace MediaBrowser.Common.Configuration
object GetConfiguration(string key); object GetConfiguration(string key);
/// <summary> /// <summary>
/// Gets the array of coniguration stores. /// Gets the array of configuration stores.
/// </summary> /// </summary>
/// <returns>Array of ConfigurationStore.</returns> /// <returns>Array of ConfigurationStore.</returns>
ConfigurationStore[] GetConfigurationStores(); ConfigurationStore[] GetConfigurationStores();

View File

@ -58,7 +58,7 @@ public interface IDeviceManager
QueryResult<Device> GetDevices(DeviceQuery query); QueryResult<Device> GetDevices(DeviceQuery query);
/// <summary> /// <summary>
/// Gets device infromation based on the provided query. /// Gets device information based on the provided query.
/// </summary> /// </summary>
/// <param name="query">The device query.</param> /// <param name="query">The device query.</param>
/// <returns>A <see cref="Task{QueryResult}"/> representing the retrieval of the device information.</returns> /// <returns>A <see cref="Task{QueryResult}"/> representing the retrieval of the device information.</returns>
@ -109,7 +109,7 @@ public interface IDeviceManager
DeviceOptionsDto? GetDeviceOptions(string deviceId); DeviceOptionsDto? GetDeviceOptions(string deviceId);
/// <summary> /// <summary>
/// Gets the dto for client capabilites. /// Gets the dto for client capabilities.
/// </summary> /// </summary>
/// <param name="capabilities">The client capabilities.</param> /// <param name="capabilities">The client capabilities.</param>
/// <returns><see cref="ClientCapabilitiesDto"/> of the device.</returns> /// <returns><see cref="ClientCapabilitiesDto"/> of the device.</returns>

View File

@ -1799,7 +1799,7 @@ namespace MediaBrowser.Controller.Entities
/// Adds a genre to the item. /// Adds a genre to the item.
/// </summary> /// </summary>
/// <param name="name">The name.</param> /// <param name="name">The name.</param>
/// <exception cref="ArgumentNullException">Throwns if name is null.</exception> /// <exception cref="ArgumentNullException">Throws if name is null.</exception>
public void AddGenre(string name) public void AddGenre(string name)
{ {
ArgumentException.ThrowIfNullOrEmpty(name); ArgumentException.ThrowIfNullOrEmpty(name);

View File

@ -53,7 +53,7 @@ namespace MediaBrowser.Controller.Library
IReadOnlyList<MediaAttachment> GetMediaAttachments(MediaAttachmentQuery query); IReadOnlyList<MediaAttachment> GetMediaAttachments(MediaAttachmentQuery query);
/// <summary> /// <summary>
/// Gets the playack media sources. /// Gets the playback media sources.
/// </summary> /// </summary>
/// <param name="item">Item to use.</param> /// <param name="item">Item to use.</param>
/// <param name="user">User to use for operation.</param> /// <param name="user">User to use for operation.</param>

View File

@ -60,7 +60,7 @@ namespace MediaBrowser.Controller.MediaEncoding
private readonly Version _minFixedKernel60i915Hang = new Version(6, 0, 18); private readonly Version _minFixedKernel60i915Hang = new Version(6, 0, 18);
private readonly Version _minKernelVersionAmdVkFmtModifier = new Version(5, 15); private readonly Version _minKernelVersionAmdVkFmtModifier = new Version(5, 15);
private readonly Version _minFFmpegImplictHwaccel = new Version(6, 0); private readonly Version _minFFmpegImplicitHwaccel = new Version(6, 0);
private readonly Version _minFFmpegHwaUnsafeOutput = new Version(6, 0); private readonly Version _minFFmpegHwaUnsafeOutput = new Version(6, 0);
private readonly Version _minFFmpegOclCuTonemapMode = new Version(5, 1, 3); private readonly Version _minFFmpegOclCuTonemapMode = new Version(5, 1, 3);
private readonly Version _minFFmpegSvtAv1Params = new Version(5, 1); private readonly Version _minFFmpegSvtAv1Params = new Version(5, 1);
@ -631,7 +631,7 @@ namespace MediaBrowser.Controller.MediaEncoding
{ {
if (string.IsNullOrWhiteSpace(container)) if (string.IsNullOrWhiteSpace(container))
{ {
// this may not work, but if the client is that broken we can not do anything better // this may not work, but if the client is that broken we cannot do anything better
return "aac"; return "aac";
} }
@ -3649,8 +3649,8 @@ namespace MediaBrowser.Controller.MediaEncoding
var subH = state.SubtitleStream?.Height; var subH = state.SubtitleStream?.Height;
var rotation = state.VideoStream?.Rotation ?? 0; var rotation = state.VideoStream?.Rotation ?? 0;
var tranposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state); var transposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
var doCuTranspose = !string.IsNullOrEmpty(tranposeDir) && _mediaEncoder.SupportsFilter("transpose_cuda"); var doCuTranspose = !string.IsNullOrEmpty(transposeDir) && _mediaEncoder.SupportsFilter("transpose_cuda");
var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || (isNvDecoder && doCuTranspose)); var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || (isNvDecoder && doCuTranspose));
var swpInW = swapWAndH ? inH : inW; var swpInW = swapWAndH ? inH : inW;
var swpInH = swapWAndH ? inW : inH; var swpInH = swapWAndH ? inW : inH;
@ -3696,7 +3696,7 @@ namespace MediaBrowser.Controller.MediaEncoding
// hw transpose // hw transpose
if (doCuTranspose) if (doCuTranspose)
{ {
mainFilters.Add($"transpose_cuda=dir={tranposeDir}"); mainFilters.Add($"transpose_cuda=dir={transposeDir}");
} }
var isRext = IsVideoStreamHevcRext(state); var isRext = IsVideoStreamHevcRext(state);
@ -3856,8 +3856,8 @@ namespace MediaBrowser.Controller.MediaEncoding
var subH = state.SubtitleStream?.Height; var subH = state.SubtitleStream?.Height;
var rotation = state.VideoStream?.Rotation ?? 0; var rotation = state.VideoStream?.Rotation ?? 0;
var tranposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state); var transposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
var doOclTranspose = !string.IsNullOrEmpty(tranposeDir) var doOclTranspose = !string.IsNullOrEmpty(transposeDir)
&& _mediaEncoder.SupportsFilterWithOption(FilterOptionType.TransposeOpenclReversal); && _mediaEncoder.SupportsFilterWithOption(FilterOptionType.TransposeOpenclReversal);
var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || (isD3d11vaDecoder && doOclTranspose)); var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || (isD3d11vaDecoder && doOclTranspose));
var swpInW = swapWAndH ? inH : inW; var swpInW = swapWAndH ? inH : inW;
@ -3901,12 +3901,12 @@ namespace MediaBrowser.Controller.MediaEncoding
// map from d3d11va to opencl via d3d11-opencl interop. // map from d3d11va to opencl via d3d11-opencl interop.
mainFilters.Add("hwmap=derive_device=opencl:mode=read"); mainFilters.Add("hwmap=derive_device=opencl:mode=read");
// hw deint <= TODO: finsh the 'yadif_opencl' filter // hw deint <= TODO: finish the 'yadif_opencl' filter
// hw transpose // hw transpose
if (doOclTranspose) if (doOclTranspose)
{ {
mainFilters.Add($"transpose_opencl=dir={tranposeDir}"); mainFilters.Add($"transpose_opencl=dir={transposeDir}");
} }
var outFormat = doOclTonemap ? string.Empty : "nv12"; var outFormat = doOclTonemap ? string.Empty : "nv12";
@ -4097,8 +4097,8 @@ namespace MediaBrowser.Controller.MediaEncoding
var subH = state.SubtitleStream?.Height; var subH = state.SubtitleStream?.Height;
var rotation = state.VideoStream?.Rotation ?? 0; var rotation = state.VideoStream?.Rotation ?? 0;
var tranposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state); var transposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
var doVppTranspose = !string.IsNullOrEmpty(tranposeDir); var doVppTranspose = !string.IsNullOrEmpty(transposeDir);
var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || ((isD3d11vaDecoder || isQsvDecoder) && doVppTranspose)); var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || ((isD3d11vaDecoder || isQsvDecoder) && doVppTranspose));
var swpInW = swapWAndH ? inH : inW; var swpInW = swapWAndH ? inH : inW;
var swpInH = swapWAndH ? inW : inH; var swpInH = swapWAndH ? inW : inH;
@ -4191,7 +4191,7 @@ namespace MediaBrowser.Controller.MediaEncoding
if (!string.IsNullOrEmpty(hwScaleFilter) && doVppTranspose) if (!string.IsNullOrEmpty(hwScaleFilter) && doVppTranspose)
{ {
hwScaleFilter += $":transpose={tranposeDir}"; hwScaleFilter += $":transpose={transposeDir}";
} }
if (!string.IsNullOrEmpty(hwScaleFilter) && isMjpegEncoder) if (!string.IsNullOrEmpty(hwScaleFilter) && isMjpegEncoder)
@ -4384,8 +4384,8 @@ namespace MediaBrowser.Controller.MediaEncoding
var subH = state.SubtitleStream?.Height; var subH = state.SubtitleStream?.Height;
var rotation = state.VideoStream?.Rotation ?? 0; var rotation = state.VideoStream?.Rotation ?? 0;
var tranposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state); var transposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
var doVppTranspose = !string.IsNullOrEmpty(tranposeDir); var doVppTranspose = !string.IsNullOrEmpty(transposeDir);
var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || ((isVaapiDecoder || isQsvDecoder) && doVppTranspose)); var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || ((isVaapiDecoder || isQsvDecoder) && doVppTranspose));
var swpInW = swapWAndH ? inH : inW; var swpInW = swapWAndH ? inH : inW;
var swpInH = swapWAndH ? inW : inH; var swpInH = swapWAndH ? inW : inH;
@ -4445,7 +4445,7 @@ namespace MediaBrowser.Controller.MediaEncoding
// hw transpose(vaapi vpp) // hw transpose(vaapi vpp)
if (isVaapiDecoder && doVppTranspose) if (isVaapiDecoder && doVppTranspose)
{ {
mainFilters.Add($"transpose_vaapi=dir={tranposeDir}"); mainFilters.Add($"transpose_vaapi=dir={transposeDir}");
} }
var outFormat = doTonemap ? (((isQsvDecoder && doVppTranspose) || isRext) ? "p010" : string.Empty) : "nv12"; var outFormat = doTonemap ? (((isQsvDecoder && doVppTranspose) || isRext) ? "p010" : string.Empty) : "nv12";
@ -4455,7 +4455,7 @@ namespace MediaBrowser.Controller.MediaEncoding
if (!string.IsNullOrEmpty(hwScaleFilter) && isQsvDecoder && doVppTranspose) if (!string.IsNullOrEmpty(hwScaleFilter) && isQsvDecoder && doVppTranspose)
{ {
hwScaleFilter += $":transpose={tranposeDir}"; hwScaleFilter += $":transpose={transposeDir}";
} }
if (!string.IsNullOrEmpty(hwScaleFilter) && isMjpegEncoder) if (!string.IsNullOrEmpty(hwScaleFilter) && isMjpegEncoder)
@ -4715,8 +4715,8 @@ namespace MediaBrowser.Controller.MediaEncoding
var subH = state.SubtitleStream?.Height; var subH = state.SubtitleStream?.Height;
var rotation = state.VideoStream?.Rotation ?? 0; var rotation = state.VideoStream?.Rotation ?? 0;
var tranposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state); var transposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
var doVaVppTranspose = !string.IsNullOrEmpty(tranposeDir); var doVaVppTranspose = !string.IsNullOrEmpty(transposeDir);
var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || (isVaapiDecoder && doVaVppTranspose)); var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || (isVaapiDecoder && doVaVppTranspose));
var swpInW = swapWAndH ? inH : inW; var swpInW = swapWAndH ? inH : inW;
var swpInH = swapWAndH ? inW : inH; var swpInH = swapWAndH ? inW : inH;
@ -4771,7 +4771,7 @@ namespace MediaBrowser.Controller.MediaEncoding
// hw transpose // hw transpose
if (doVaVppTranspose) if (doVaVppTranspose)
{ {
mainFilters.Add($"transpose_vaapi=dir={tranposeDir}"); mainFilters.Add($"transpose_vaapi=dir={transposeDir}");
} }
var outFormat = doTonemap ? (isRext ? "p010" : string.Empty) : "nv12"; var outFormat = doTonemap ? (isRext ? "p010" : string.Empty) : "nv12";
@ -4948,8 +4948,8 @@ namespace MediaBrowser.Controller.MediaEncoding
|| string.Equals(state.SubtitleStream.Codec, "ssa", StringComparison.OrdinalIgnoreCase)); || string.Equals(state.SubtitleStream.Codec, "ssa", StringComparison.OrdinalIgnoreCase));
var rotation = state.VideoStream?.Rotation ?? 0; var rotation = state.VideoStream?.Rotation ?? 0;
var tranposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state); var transposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
var doVkTranspose = isVaapiDecoder && !string.IsNullOrEmpty(tranposeDir); var doVkTranspose = isVaapiDecoder && !string.IsNullOrEmpty(transposeDir);
var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || (isVaapiDecoder && doVkTranspose)); var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || (isVaapiDecoder && doVkTranspose));
var swpInW = swapWAndH ? inH : inW; var swpInW = swapWAndH ? inH : inW;
var swpInH = swapWAndH ? inW : inH; var swpInH = swapWAndH ? inW : inH;
@ -5042,13 +5042,13 @@ namespace MediaBrowser.Controller.MediaEncoding
// vk transpose // vk transpose
if (doVkTranspose) if (doVkTranspose)
{ {
if (string.Equals(tranposeDir, "reversal", StringComparison.OrdinalIgnoreCase)) if (string.Equals(transposeDir, "reversal", StringComparison.OrdinalIgnoreCase))
{ {
mainFilters.Add("flip_vulkan"); mainFilters.Add("flip_vulkan");
} }
else else
{ {
mainFilters.Add($"transpose_vulkan=dir={tranposeDir}"); mainFilters.Add($"transpose_vulkan=dir={transposeDir}");
} }
} }
@ -5416,8 +5416,8 @@ namespace MediaBrowser.Controller.MediaEncoding
var usingHwSurface = isVtDecoder && (_mediaEncoder.EncoderVersion >= _minFFmpegWorkingVtHwSurface); var usingHwSurface = isVtDecoder && (_mediaEncoder.EncoderVersion >= _minFFmpegWorkingVtHwSurface);
var rotation = state.VideoStream?.Rotation ?? 0; var rotation = state.VideoStream?.Rotation ?? 0;
var tranposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state); var transposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
var doVtTranspose = !string.IsNullOrEmpty(tranposeDir) && _mediaEncoder.SupportsFilter("transpose_vt"); var doVtTranspose = !string.IsNullOrEmpty(transposeDir) && _mediaEncoder.SupportsFilter("transpose_vt");
var swapWAndH = Math.Abs(rotation) == 90 && doVtTranspose; var swapWAndH = Math.Abs(rotation) == 90 && doVtTranspose;
var swpInW = swapWAndH ? inH : inW; var swpInW = swapWAndH ? inH : inW;
var swpInH = swapWAndH ? inW : inH; var swpInH = swapWAndH ? inW : inH;
@ -5461,7 +5461,7 @@ namespace MediaBrowser.Controller.MediaEncoding
// hw transpose // hw transpose
if (doVtTranspose) if (doVtTranspose)
{ {
mainFilters.Add($"transpose_vt=dir={tranposeDir}"); mainFilters.Add($"transpose_vt=dir={transposeDir}");
} }
if (doVtTonemap) if (doVtTonemap)
@ -5624,8 +5624,8 @@ namespace MediaBrowser.Controller.MediaEncoding
var subH = state.SubtitleStream?.Height; var subH = state.SubtitleStream?.Height;
var rotation = state.VideoStream?.Rotation ?? 0; var rotation = state.VideoStream?.Rotation ?? 0;
var tranposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state); var transposeDir = rotation == 0 ? string.Empty : GetVideoTransposeDirection(state);
var doRkVppTranspose = !string.IsNullOrEmpty(tranposeDir); var doRkVppTranspose = !string.IsNullOrEmpty(transposeDir);
var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || (isRkmppDecoder && doRkVppTranspose)); var swapWAndH = Math.Abs(rotation) == 90 && (isSwDecoder || (isRkmppDecoder && doRkVppTranspose));
var swpInW = swapWAndH ? inH : inW; var swpInW = swapWAndH ? inH : inW;
var swpInH = swapWAndH ? inW : inH; var swpInH = swapWAndH ? inW : inH;
@ -5696,7 +5696,7 @@ namespace MediaBrowser.Controller.MediaEncoding
if (!string.IsNullOrEmpty(hwScaleFilter) && doRkVppTranspose) if (!string.IsNullOrEmpty(hwScaleFilter) && doRkVppTranspose)
{ {
hwScaleFilter += $":transpose={tranposeDir}"; hwScaleFilter += $":transpose={transposeDir}";
} }
// try enabling AFBC to save DDR bandwidth // try enabling AFBC to save DDR bandwidth
@ -6170,7 +6170,7 @@ namespace MediaBrowser.Controller.MediaEncoding
var ffmpegVersion = _mediaEncoder.EncoderVersion; var ffmpegVersion = _mediaEncoder.EncoderVersion;
// Set the av1 codec explicitly to trigger hw accelerator, otherwise libdav1d will be used. // Set the av1 codec explicitly to trigger hw accelerator, otherwise libdav1d will be used.
var isAv1 = ffmpegVersion < _minFFmpegImplictHwaccel var isAv1 = ffmpegVersion < _minFFmpegImplicitHwaccel
&& string.Equals(videoCodec, "av1", StringComparison.OrdinalIgnoreCase); && string.Equals(videoCodec, "av1", StringComparison.OrdinalIgnoreCase);
// Allow profile mismatch if decoding H.264 baseline with d3d11va and vaapi hwaccels. // Allow profile mismatch if decoding H.264 baseline with d3d11va and vaapi hwaccels.

View File

@ -46,20 +46,20 @@ public interface IMediaSegmentManager
Task DeleteSegmentAsync(Guid segmentId); Task DeleteSegmentAsync(Guid segmentId);
/// <summary> /// <summary>
/// Obtains all segments accociated with the itemId. /// Obtains all segments associated with the itemId.
/// </summary> /// </summary>
/// <param name="itemId">The id of the <see cref="BaseItem"/>.</param> /// <param name="itemId">The id of the <see cref="BaseItem"/>.</param>
/// <param name="typeFilter">filteres all media segments of the given type to be included. If null all types are included.</param> /// <param name="typeFilter">filters all media segments of the given type to be included. If null all types are included.</param>
/// <param name="filterByProvider">When set filteres the segments to only return those that which providers are currently enabled on their library.</param> /// <param name="filterByProvider">When set filters the segments to only return those that which providers are currently enabled on their library.</param>
/// <returns>An enumerator of <see cref="MediaSegmentDto"/>'s.</returns> /// <returns>An enumerator of <see cref="MediaSegmentDto"/>'s.</returns>
Task<IEnumerable<MediaSegmentDto>> GetSegmentsAsync(Guid itemId, IEnumerable<MediaSegmentType>? typeFilter, bool filterByProvider = true); Task<IEnumerable<MediaSegmentDto>> GetSegmentsAsync(Guid itemId, IEnumerable<MediaSegmentType>? typeFilter, bool filterByProvider = true);
/// <summary> /// <summary>
/// Obtains all segments accociated with the itemId. /// Obtains all segments associated with the itemId.
/// </summary> /// </summary>
/// <param name="item">The <see cref="BaseItem"/>.</param> /// <param name="item">The <see cref="BaseItem"/>.</param>
/// <param name="typeFilter">filteres all media segments of the given type to be included. If null all types are included.</param> /// <param name="typeFilter">filters all media segments of the given type to be included. If null all types are included.</param>
/// <param name="filterByProvider">When set filteres the segments to only return those that which providers are currently enabled on their library.</param> /// <param name="filterByProvider">When set filters the segments to only return those that which providers are currently enabled on their library.</param>
/// <returns>An enumerator of <see cref="MediaSegmentDto"/>'s.</returns> /// <returns>An enumerator of <see cref="MediaSegmentDto"/>'s.</returns>
Task<IEnumerable<MediaSegmentDto>> GetSegmentsAsync(BaseItem item, IEnumerable<MediaSegmentType>? typeFilter, bool filterByProvider = true); Task<IEnumerable<MediaSegmentDto>> GetSegmentsAsync(BaseItem item, IEnumerable<MediaSegmentType>? typeFilter, bool filterByProvider = true);

View File

@ -24,9 +24,9 @@ namespace MediaBrowser.Controller.Net
DateTime LastActivityDate { get; } DateTime LastActivityDate { get; }
/// <summary> /// <summary>
/// Gets or sets the date of last Keeplive received. /// Gets or sets the date of last Keepalive received.
/// </summary> /// </summary>
/// <value>The date of last Keeplive received.</value> /// <value>The date of last Keepalive received.</value>
DateTime LastKeepAliveDate { get; set; } DateTime LastKeepAliveDate { get; set; }
/// <summary> /// <summary>

View File

@ -5,7 +5,7 @@ using MediaBrowser.Controller.Library;
namespace MediaBrowser.Controller.Sorting namespace MediaBrowser.Controller.Sorting
{ {
/// <summary> /// <summary>
/// Represents a BaseItem comparer that requires a User to perform it's comparison. /// Represents a BaseItem comparer that requires a User to perform its comparison.
/// </summary> /// </summary>
public interface IUserBaseItemComparer : IBaseItemComparer public interface IUserBaseItemComparer : IBaseItemComparer
{ {

View File

@ -51,7 +51,7 @@ public class StreamState : EncodingJobInfo, IDisposable
public VideoRequestDto? VideoRequest => Request as VideoRequestDto; public VideoRequestDto? VideoRequest => Request as VideoRequestDto;
/// <summary> /// <summary>
/// Gets or sets the direct stream provicer. /// Gets or sets the direct stream provider.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Deprecated. /// Deprecated.

View File

@ -320,7 +320,7 @@ namespace MediaBrowser.LocalMetadata.Images
{ {
AddImage(files, images, name + "-fanart", ImageType.Backdrop, imagePrefix); AddImage(files, images, name + "-fanart", ImageType.Backdrop, imagePrefix);
// Support without the prefix if it's in it's own folder // Support without the prefix if it's in its own folder
if (!isInMixedFolder) if (!isInMixedFolder)
{ {
AddImage(files, images, name + "-fanart", ImageType.Backdrop); AddImage(files, images, name + "-fanart", ImageType.Backdrop);

View File

@ -15,7 +15,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="BoxSetXmlParser"/> class. /// Initializes a new instance of the <see cref="BoxSetXmlParser"/> class.
/// </summary> /// </summary>
/// <param name="logger">Instance of the <see cref="ILogger{BoxSetXmlParset}"/> interface.</param> /// <param name="logger">Instance of the <see cref="ILogger{BoxSetXmlParser}"/> interface.</param>
/// <param name="providerManager">Instance of the <see cref="IProviderManager"/> interface.</param> /// <param name="providerManager">Instance of the <see cref="IProviderManager"/> interface.</param>
public BoxSetXmlParser(ILogger<BoxSetXmlParser> logger, IProviderManager providerManager) public BoxSetXmlParser(ILogger<BoxSetXmlParser> logger, IProviderManager providerManager)
: base(logger, providerManager) : base(logger, providerManager)

View File

@ -84,7 +84,7 @@ public class BdInfoDirectoryInfo : IDirectoryInfo
/// Gets the files matching a pattern. /// Gets the files matching a pattern.
/// </summary> /// </summary>
/// <param name="searchPattern">The search pattern.</param> /// <param name="searchPattern">The search pattern.</param>
/// <returns>All files of the directory matchign the search pattern.</returns> /// <returns>All files of the directory matching the search pattern.</returns>
public IFileInfo[] GetFiles(string searchPattern) public IFileInfo[] GetFiles(string searchPattern)
{ {
return _fileSystem.GetFiles(_impl.FullName, new[] { searchPattern }, false, false) return _fileSystem.GetFiles(_impl.FullName, new[] { searchPattern }, false, false)
@ -97,7 +97,7 @@ public class BdInfoDirectoryInfo : IDirectoryInfo
/// </summary> /// </summary>
/// <param name="searchPattern">The search pattern.</param> /// <param name="searchPattern">The search pattern.</param>
/// <param name="searchOption">The search optin.</param> /// <param name="searchOption">The search optin.</param>
/// <returns>All files of the directory matchign the search pattern and options.</returns> /// <returns>All files of the directory matching the search pattern and options.</returns>
public IFileInfo[] GetFiles(string searchPattern, SearchOption searchOption) public IFileInfo[] GetFiles(string searchPattern, SearchOption searchOption)
{ {
return _fileSystem.GetFiles( return _fileSystem.GetFiles(

View File

@ -1101,14 +1101,14 @@ namespace MediaBrowser.MediaEncoding.Encoder
private void StopProcesses() private void StopProcesses()
{ {
List<ProcessWrapper> proceses; List<ProcessWrapper> processes;
lock (_runningProcessesLock) lock (_runningProcessesLock)
{ {
proceses = _runningProcesses.ToList(); processes = _runningProcesses.ToList();
_runningProcesses.Clear(); _runningProcesses.Clear();
} }
foreach (var process in proceses) foreach (var process in processes)
{ {
if (!process.HasExited) if (!process.HasExited)
{ {

View File

@ -24,7 +24,7 @@ namespace MediaBrowser.MediaEncoding.Probing
if (result.Streams is not null) if (result.Streams is not null)
{ {
// Convert all dictionaries to case insensitive // Convert all dictionaries to case-insensitive
foreach (var stream in result.Streams) foreach (var stream in result.Streams)
{ {
if (stream.Tags is not null) if (stream.Tags is not null)
@ -70,7 +70,7 @@ namespace MediaBrowser.MediaEncoding.Probing
} }
/// <summary> /// <summary>
/// Converts a dictionary to case insensitive. /// Converts a dictionary to case-insensitive.
/// </summary> /// </summary>
/// <param name="dict">The dict.</param> /// <param name="dict">The dict.</param>
/// <returns>Dictionary{System.StringSystem.String}.</returns> /// <returns>Dictionary{System.StringSystem.String}.</returns>

View File

@ -83,9 +83,9 @@ public class ServerConfiguration : BaseApplicationConfiguration
public bool QuickConnectAvailable { get; set; } = true; public bool QuickConnectAvailable { get; set; } = true;
/// <summary> /// <summary>
/// Gets or sets a value indicating whether [enable case sensitive item ids]. /// Gets or sets a value indicating whether [enable case-sensitive item ids].
/// </summary> /// </summary>
/// <value><c>true</c> if [enable case sensitive item ids]; otherwise, <c>false</c>.</value> /// <value><c>true</c> if [enable case-sensitive item ids]; otherwise, <c>false</c>.</value>
public bool EnableCaseSensitiveItemIds { get; set; } = true; public bool EnableCaseSensitiveItemIds { get; set; } = true;
public bool DisableLiveTvChannelUserDataName { get; set; } = true; public bool DisableLiveTvChannelUserDataName { get; set; } = true;
@ -249,7 +249,7 @@ public class ServerConfiguration : BaseApplicationConfiguration
public bool AllowClientLogUpload { get; set; } = true; public bool AllowClientLogUpload { get; set; } = true;
/// <summary> /// <summary>
/// Gets or sets the dummy chapter duration in seconds, use 0 (zero) or less to disable generation alltogether. /// Gets or sets the dummy chapter duration in seconds, use 0 (zero) or less to disable generation altogether.
/// </summary> /// </summary>
/// <value>The dummy chapters duration.</value> /// <value>The dummy chapters duration.</value>
public int DummyChapterDuration { get; set; } public int DummyChapterDuration { get; set; }

View File

@ -25,8 +25,8 @@ namespace MediaBrowser.Model.Dlna
/// <param name="videoFramerate">The framerate.</param> /// <param name="videoFramerate">The framerate.</param>
/// <param name="packetLength">The packet length.</param> /// <param name="packetLength">The packet length.</param>
/// <param name="timestamp">The <see cref="TransportStreamTimestamp"/>.</param> /// <param name="timestamp">The <see cref="TransportStreamTimestamp"/>.</param>
/// <param name="isAnamorphic">A value indicating whether tthe video is anamorphic.</param> /// <param name="isAnamorphic">A value indicating whether the video is anamorphic.</param>
/// <param name="isInterlaced">A value indicating whether tthe video is interlaced.</param> /// <param name="isInterlaced">A value indicating whether the video is interlaced.</param>
/// <param name="refFrames">The reference frames.</param> /// <param name="refFrames">The reference frames.</param>
/// <param name="numVideoStreams">The number of video streams.</param> /// <param name="numVideoStreams">The number of video streams.</param>
/// <param name="numAudioStreams">The number of audio streams.</param> /// <param name="numAudioStreams">The number of audio streams.</param>

View File

@ -59,7 +59,7 @@ public class DirectPlayProfile
/// <returns>True if supported.</returns> /// <returns>True if supported.</returns>
public bool SupportsAudioCodec(string? codec) public bool SupportsAudioCodec(string? codec)
{ {
// Video profiles can have audio codec restrictions too, therefore incude Video as valid type. // Video profiles can have audio codec restrictions too, therefore include Video as valid type.
return (Type == DlnaProfileType.Audio || Type == DlnaProfileType.Video) && ContainerHelper.ContainsContainer(AudioCodec, codec); return (Type == DlnaProfileType.Audio || Type == DlnaProfileType.Video) && ContainerHelper.ContainsContainer(AudioCodec, codec);
} }
} }

View File

@ -8,7 +8,7 @@ namespace MediaBrowser.Model.Entities;
public enum HardwareAccelerationType public enum HardwareAccelerationType
{ {
/// <summary> /// <summary>
/// Software accelleration. /// Software acceleration.
/// </summary> /// </summary>
none = 0, none = 0,

View File

@ -27,7 +27,7 @@ namespace MediaBrowser.Model.Entities
Tvdb = 4, Tvdb = 4,
/// <summary> /// <summary>
/// The tvcom providerd. /// The tvcom provider.
/// </summary> /// </summary>
Tvcom = 5, Tvcom = 5,

View File

@ -11,7 +11,7 @@ namespace MediaBrowser.Model.Entities;
public static class ProviderIdsExtensions public static class ProviderIdsExtensions
{ {
/// <summary> /// <summary>
/// Case insensitive dictionary of <see cref="MetadataProvider"/> string representation. /// Case-insensitive dictionary of <see cref="MetadataProvider"/> string representation.
/// </summary> /// </summary>
private static readonly Dictionary<string, string> _metadataProviderEnumDictionary = private static readonly Dictionary<string, string> _metadataProviderEnumDictionary =
Enum.GetValues<MetadataProvider>() Enum.GetValues<MetadataProvider>()
@ -107,7 +107,7 @@ public static class ProviderIdsExtensions
/// <param name="instance">The instance.</param> /// <param name="instance">The instance.</param>
/// <param name="name">The name, this should not contain a '=' character.</param> /// <param name="name">The name, this should not contain a '=' character.</param>
/// <param name="value">The value.</param> /// <param name="value">The value.</param>
/// <remarks>Due to how deserialization from the database works the name can not contain '='.</remarks> /// <remarks>Due to how deserialization from the database works the name cannot contain '='.</remarks>
/// <returns><c>true</c> if the provider id got set successfully; otherwise, <c>false</c>.</returns> /// <returns><c>true</c> if the provider id got set successfully; otherwise, <c>false</c>.</returns>
public static bool TrySetProviderId(this IHasProviderIds instance, string? name, string? value) public static bool TrySetProviderId(this IHasProviderIds instance, string? name, string? value)
{ {
@ -153,7 +153,7 @@ public static class ProviderIdsExtensions
/// <param name="instance">The instance.</param> /// <param name="instance">The instance.</param>
/// <param name="name">The name, this should not contain a '=' character.</param> /// <param name="name">The name, this should not contain a '=' character.</param>
/// <param name="value">The value.</param> /// <param name="value">The value.</param>
/// <remarks>Due to how deserialization from the database works the name can not contain '='.</remarks> /// <remarks>Due to how deserialization from the database works the name cannot contain '='.</remarks>
public static void SetProviderId(this IHasProviderIds instance, string name, string value) public static void SetProviderId(this IHasProviderIds instance, string name, string value)
{ {
ArgumentNullException.ThrowIfNull(instance); ArgumentNullException.ThrowIfNull(instance);

View File

@ -52,7 +52,7 @@ namespace MediaBrowser.Model.Globalization
/// <summary> /// <summary>
/// Gets the localization options. /// Gets the localization options.
/// </summary> /// </summary>
/// <returns><see cref="IEnumerable{LocalizatonOption}" />.</returns> /// <returns><see cref="IEnumerable{LocalizationOption}" />.</returns>
IEnumerable<LocalizationOption> GetLocalizationOptions(); IEnumerable<LocalizationOption> GetLocalizationOptions();
/// <summary> /// <summary>

View File

@ -145,7 +145,7 @@ namespace MediaBrowser.Model.IO
/// Gets the directories. /// Gets the directories.
/// </summary> /// </summary>
/// <param name="path">The path.</param> /// <param name="path">The path.</param>
/// <param name="recursive">If set to <c>true</c> also searches in subdirectiories.</param> /// <param name="recursive">If set to <c>true</c> also searches in subdirectories.</param>
/// <returns>All found directories.</returns> /// <returns>All found directories.</returns>
IEnumerable<FileSystemMetadata> GetDirectories(string path, bool recursive = false); IEnumerable<FileSystemMetadata> GetDirectories(string path, bool recursive = false);
@ -153,7 +153,7 @@ namespace MediaBrowser.Model.IO
/// Gets the files. /// Gets the files.
/// </summary> /// </summary>
/// <param name="path">The path in which to search.</param> /// <param name="path">The path in which to search.</param>
/// <param name="recursive">If set to <c>true</c> also searches in subdirectiories.</param> /// <param name="recursive">If set to <c>true</c> also searches in subdirectories.</param>
/// <returns>All found files.</returns> /// <returns>All found files.</returns>
IEnumerable<FileSystemMetadata> GetFiles(string path, bool recursive = false); IEnumerable<FileSystemMetadata> GetFiles(string path, bool recursive = false);

View File

@ -34,7 +34,12 @@ namespace MediaBrowser.Model.Plugins
Malfunctioned = -3, Malfunctioned = -3,
/// <summary> /// <summary>
/// This plugin has been superceded by another version. /// This plugin has been superseded by another version.
/// </summary>
Superseded = -4,
/// <summary>
/// [DEPRECATED] See Superseded.
/// </summary> /// </summary>
Superceded = -4, Superceded = -4,

View File

@ -5,7 +5,7 @@ using MediaBrowser.Model.Entities;
namespace MediaBrowser.Model.Session; namespace MediaBrowser.Model.Session;
/// <summary> /// <summary>
/// Class holding information on a runnning transcode. /// Class holding information on a running transcode.
/// </summary> /// </summary>
public class TranscodingInfo public class TranscodingInfo
{ {

View File

@ -47,7 +47,7 @@ namespace MediaBrowser.Model.System
/// Gets or sets a value indicating whether the startup wizard is completed. /// Gets or sets a value indicating whether the startup wizard is completed.
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// Nullable for OpenAPI specification only to retain backwards compatibility in apiclients. /// Nullable for OpenAPI specification only to retain backwards compatibility in api clients.
/// </remarks> /// </remarks>
/// <value>The startup completion status.</value>] /// <value>The startup completion status.</value>]
public bool? StartupWizardCompleted { get; set; } public bool? StartupWizardCompleted { get; set; }

View File

@ -73,7 +73,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
protected IProviderManager ProviderManager { get; } protected IProviderManager ProviderManager { get; }
/// <summary> /// <summary>
/// Gets a value indicating whether URLs after a closing XML tag are supporrted. /// Gets a value indicating whether URLs after a closing XML tag are supported.
/// </summary> /// </summary>
protected virtual bool SupportsUrlAfterClosingXmlTag => false; protected virtual bool SupportsUrlAfterClosingXmlTag => false;
@ -672,7 +672,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
} }
var fileSystemMetadata = _directoryService.GetFile(val); var fileSystemMetadata = _directoryService.GetFile(val);
// non existing file returns null // nonexistent file returns null
if (fileSystemMetadata is null || !fileSystemMetadata.Exists) if (fileSystemMetadata is null || !fileSystemMetadata.Exists)
{ {
Logger.LogWarning("Artwork file {Path} specified in nfo file for {ItemName} does not exist.", uri, itemResult.Item.Name); Logger.LogWarning("Artwork file {Path} specified in nfo file for {ItemName} does not exist.", uri, itemResult.Item.Name);

View File

@ -13,7 +13,7 @@ using Microsoft.Extensions.Logging;
namespace MediaBrowser.XbmcMetadata.Savers namespace MediaBrowser.XbmcMetadata.Savers
{ {
/// <summary> /// <summary>
/// Nfo saver for artsist. /// Nfo saver for artist.
/// </summary> /// </summary>
public class ArtistNfoSaver : BaseNfoSaver public class ArtistNfoSaver : BaseNfoSaver
{ {

View File

@ -138,7 +138,7 @@ namespace Jellyfin.LiveTv.Listings
var programsInfo = new List<ProgramInfo>(); var programsInfo = new List<ProgramInfo>();
foreach (ProgramDto schedule in dailySchedules.SelectMany(d => d.Programs)) foreach (ProgramDto schedule in dailySchedules.SelectMany(d => d.Programs))
{ {
// _logger.LogDebug("Proccesing Schedule for statio ID " + stationID + // _logger.LogDebug("Processing Schedule for station ID " + stationID +
// " which corresponds to channel " + channelNumber + " and program id " + // " which corresponds to channel " + channelNumber + " and program id " +
// schedule.ProgramId + " which says it has images? " + // schedule.ProgramId + " which says it has images? " +
// programDict[schedule.ProgramId].hasImageArtwork); // programDict[schedule.ProgramId].hasImageArtwork);

View File

@ -23,7 +23,7 @@ namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos
/// Gets or sets the provider callsign. /// Gets or sets the provider callsign.
/// </summary> /// </summary>
[JsonPropertyName("providerCallsign")] [JsonPropertyName("providerCallsign")]
public string? ProvderCallsign { get; set; } public string? ProviderCallsign { get; set; }
/// <summary> /// <summary>
/// Gets or sets the logical channel number. /// Gets or sets the logical channel number.

View File

@ -64,7 +64,7 @@ namespace Jellyfin.LiveTv.Listings.SchedulesDirectDtos
public IReadOnlyList<MetadataProgramsDto> Metadata { get; set; } = Array.Empty<MetadataProgramsDto>(); public IReadOnlyList<MetadataProgramsDto> Metadata { get; set; } = Array.Empty<MetadataProgramsDto>();
/// <summary> /// <summary>
/// Gets or sets the list of content raitings. /// Gets or sets the list of content ratings.
/// </summary> /// </summary>
[JsonPropertyName("contentRating")] [JsonPropertyName("contentRating")]
public IReadOnlyList<ContentRatingDto> ContentRating { get; set; } = Array.Empty<ContentRatingDto>(); public IReadOnlyList<ContentRatingDto> ContentRating { get; set; } = Array.Empty<ContentRatingDto>();

View File

@ -973,7 +973,7 @@ public class NetworkManager : INetworkManager, IDisposable
bindPreference = string.Empty; bindPreference = string.Empty;
int? port = null; int? port = null;
// Only consider subnets including the source IP, prefering specific overrides // Only consider subnets including the source IP, preferring specific overrides
List<PublishedServerUriOverride> validPublishedServerUrls; List<PublishedServerUriOverride> validPublishedServerUrls;
if (!isInExternalSubnet) if (!isInExternalSubnet)
{ {

View File

@ -92,7 +92,7 @@ namespace Jellyfin.Extensions.Tests.Json.Converters
Value = [GeneralCommandType.MoveUp, GeneralCommandType.MoveDown] Value = [GeneralCommandType.MoveUp, GeneralCommandType.MoveDown]
}; };
var value = JsonSerializer.Deserialize<GenericBodyArrayModel<GeneralCommandType>>(@"{ ""Value"": ""MoveUp,TotallyNotAVallidCommand,MoveDown"" }", _jsonOptions); var value = JsonSerializer.Deserialize<GenericBodyArrayModel<GeneralCommandType>>(@"{ ""Value"": ""MoveUp,TotallyNotAValidCommand,MoveDown"" }", _jsonOptions);
Assert.Equal(desiredValue.Value, value?.Value); Assert.Equal(desiredValue.Value, value?.Value);
} }

View File

@ -6,8 +6,8 @@ namespace Jellyfin.Extensions.Tests
public class StringExtensionsTests public class StringExtensionsTests
{ {
[Theory] [Theory]
[InlineData("", "")] // Identity edge-case (no diactritics) [InlineData("", "")] // Identity edge-case (no diacritics)
[InlineData("Indiana Jones", "Indiana Jones")] // Identity (no diactritics) [InlineData("Indiana Jones", "Indiana Jones")] // Identity (no diacritics)
[InlineData("a\ud800b", "ab")] // Invalid UTF-16 char stripping [InlineData("a\ud800b", "ab")] // Invalid UTF-16 char stripping
[InlineData("åäö", "aao")] // Issue #7484 [InlineData("åäö", "aao")] // Issue #7484
[InlineData("Jön", "Jon")] // Issue #7484 [InlineData("Jön", "Jon")] // Issue #7484
@ -25,8 +25,8 @@ namespace Jellyfin.Extensions.Tests
} }
[Theory] [Theory]
[InlineData("", false)] // Identity edge-case (no diactritics) [InlineData("", false)] // Identity edge-case (no diacritics)
[InlineData("Indiana Jones", false)] // Identity (no diactritics) [InlineData("Indiana Jones", false)] // Identity (no diacritics)
[InlineData("a\ud800b", true)] // Invalid UTF-16 char stripping [InlineData("a\ud800b", true)] // Invalid UTF-16 char stripping
[InlineData("åäö", true)] // Issue #7484 [InlineData("åäö", true)] // Issue #7484
[InlineData("Jön", true)] // Issue #7484 [InlineData("Jön", true)] // Issue #7484

View File

@ -232,7 +232,7 @@ namespace Jellyfin.LiveTv.Tests.SchedulesDirect
Assert.Equal(2, channelDto!.Map.Count); Assert.Equal(2, channelDto!.Map.Count);
Assert.Equal("24326", channelDto.Map[0].StationId); Assert.Equal("24326", channelDto.Map[0].StationId);
Assert.Equal("001", channelDto.Map[0].Channel); Assert.Equal("001", channelDto.Map[0].Channel);
Assert.Equal("BBC ONE South", channelDto.Map[0].ProvderCallsign); Assert.Equal("BBC ONE South", channelDto.Map[0].ProviderCallsign);
Assert.Equal("1", channelDto.Map[0].LogicalChannelNumber); Assert.Equal("1", channelDto.Map[0].LogicalChannelNumber);
Assert.Equal("providerCallsign", channelDto.Map[0].MatchType); Assert.Equal("providerCallsign", channelDto.Map[0].MatchType);
} }

View File

@ -15,17 +15,17 @@ public class TvParserHelpersTest
[InlineData("Unreleased", SeriesStatus.Unreleased)] [InlineData("Unreleased", SeriesStatus.Unreleased)]
public void SeriesStatusParserTest_Valid(string statusString, SeriesStatus? status) public void SeriesStatusParserTest_Valid(string statusString, SeriesStatus? status)
{ {
var successful = TvParserHelpers.TryParseSeriesStatus(statusString, out var parsered); var successful = TvParserHelpers.TryParseSeriesStatus(statusString, out var parsed);
Assert.True(successful); Assert.True(successful);
Assert.Equal(status, parsered); Assert.Equal(status, parsed);
} }
[Theory] [Theory]
[InlineData("XXX")] [InlineData("XXX")]
public void SeriesStatusParserTest_InValid(string statusString) public void SeriesStatusParserTest_InValid(string statusString)
{ {
var successful = TvParserHelpers.TryParseSeriesStatus(statusString, out var parsered); var successful = TvParserHelpers.TryParseSeriesStatus(statusString, out var parsed);
Assert.False(successful); Assert.False(successful);
Assert.Null(parsered); Assert.Null(parsed);
} }
} }

View File

@ -238,7 +238,7 @@ namespace Jellyfin.Networking.Tests
// User on external network, internal binding only - so assumption is a proxy forward, return external override. // User on external network, internal binding only - so assumption is a proxy forward, return external override.
[InlineData("jellyfin.org", "192.168.1.0/24", "eth16", false, "external=http://helloworld.com", "http://helloworld.com")] [InlineData("jellyfin.org", "192.168.1.0/24", "eth16", false, "external=http://helloworld.com", "http://helloworld.com")]
// User on external network, no binding - so result is the 1st external which is overriden. // User on external network, no binding - so result is the 1st external which is overridden.
[InlineData("jellyfin.org", "192.168.1.0/24", "", false, "external=http://helloworld.com", "http://helloworld.com")] [InlineData("jellyfin.org", "192.168.1.0/24", "", false, "external=http://helloworld.com", "http://helloworld.com")]
// User assumed to be internal, no binding - so result is the 1st matching interface. // User assumed to be internal, no binding - so result is the 1st matching interface.

View File

@ -31,7 +31,7 @@ namespace Jellyfin.Providers.Tests.Omdb
[Theory] [Theory]
[InlineData("\"N/A\"")] [InlineData("\"N/A\"")]
[InlineData("null")] [InlineData("null")]
public void Deserialization_To_Nullable_Int_Shoud_Be_Null(string input) public void Deserialization_To_Nullable_Int_Should_Be_Null(string input)
{ {
var result = JsonSerializer.Deserialize<int?>(input, _options); var result = JsonSerializer.Deserialize<int?>(input, _options);
Assert.Null(result); Assert.Null(result);
@ -49,7 +49,7 @@ namespace Jellyfin.Providers.Tests.Omdb
[Theory] [Theory]
[InlineData("\"N/A\"")] [InlineData("\"N/A\"")]
[InlineData("null")] [InlineData("null")]
public void Deserialization_To_Nullable_String_Shoud_Be_Null(string input) public void Deserialization_To_Nullable_String_Should_Be_Null(string input)
{ {
var result = JsonSerializer.Deserialize<string?>(input, _options); var result = JsonSerializer.Deserialize<string?>(input, _options);
Assert.Null(result); Assert.Null(result);

View File

@ -540,7 +540,7 @@
{ {
"guid": "022a3003-993f-45f1-8565-87d12af2e12a", "guid": "022a3003-993f-45f1-8565-87d12af2e12a",
"name": "InfuseSync", "name": "InfuseSync",
"description": "This plugin will track all media changes while any Infuse clients are offline to decrease sync times when logging back in to your server.", "description": "This plugin will track all media changes while any Infuse clients are offline to decrease sync times when logging back into your server.",
"overview": "Blazing fast indexing for Infuse", "overview": "Blazing fast indexing for Infuse",
"owner": "Firecore LLC", "owner": "Firecore LLC",
"category": "General", "category": "General",

View File

@ -14,7 +14,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
public sealed class DashboardControllerTests : IClassFixture<JellyfinApplicationFactory> public sealed class DashboardControllerTests : IClassFixture<JellyfinApplicationFactory>
{ {
private readonly JellyfinApplicationFactory _factory; private readonly JellyfinApplicationFactory _factory;
private readonly JsonSerializerOptions _jsonOpions = JsonDefaults.Options; private readonly JsonSerializerOptions _jsonOptions = JsonDefaults.Options;
private static string? _accessToken; private static string? _accessToken;
public DashboardControllerTests(JellyfinApplicationFactory factory) public DashboardControllerTests(JellyfinApplicationFactory factory)
@ -65,7 +65,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal(HttpStatusCode.OK, response.StatusCode);
_ = await response.Content.ReadFromJsonAsync<ConfigurationPageInfo[]>(_jsonOpions); _ = await response.Content.ReadFromJsonAsync<ConfigurationPageInfo[]>(_jsonOptions);
// TODO: check content // TODO: check content
} }
@ -81,7 +81,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
Assert.Equal(MediaTypeNames.Application.Json, response.Content.Headers.ContentType?.MediaType); Assert.Equal(MediaTypeNames.Application.Json, response.Content.Headers.ContentType?.MediaType);
Assert.Equal(Encoding.UTF8.BodyName, response.Content.Headers.ContentType?.CharSet); Assert.Equal(Encoding.UTF8.BodyName, response.Content.Headers.ContentType?.CharSet);
var data = await response.Content.ReadFromJsonAsync<ConfigurationPageInfo[]>(_jsonOpions); var data = await response.Content.ReadFromJsonAsync<ConfigurationPageInfo[]>(_jsonOptions);
Assert.NotNull(data); Assert.NotNull(data);
Assert.Empty(data); Assert.Empty(data);
} }

View File

@ -35,7 +35,7 @@ public sealed class ItemsControllerTests : IClassFixture<JellyfinApplicationFact
[Theory] [Theory]
[InlineData("Users/{0}/Items")] [InlineData("Users/{0}/Items")]
[InlineData("Users/{0}/Items/Resume")] [InlineData("Users/{0}/Items/Resume")]
public async Task GetUserItems_NonExistentUserId_NotFound(string format) public async Task GetUserItems_NonexistentUserId_NotFound(string format)
{ {
var client = _factory.CreateClient(); var client = _factory.CreateClient();
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client)); client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));

View File

@ -29,7 +29,7 @@ public sealed class LibraryControllerTests : IClassFixture<JellyfinApplicationFa
[InlineData("Shows/{0}/Similar")] [InlineData("Shows/{0}/Similar")]
[InlineData("Movies/{0}/Similar")] [InlineData("Movies/{0}/Similar")]
[InlineData("Trailers/{0}/Similar")] [InlineData("Trailers/{0}/Similar")]
public async Task Get_NonExistentItemId_NotFound(string format) public async Task Get_NonexistentItemId_NotFound(string format)
{ {
var client = _factory.CreateClient(); var client = _factory.CreateClient();
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client)); client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));
@ -41,7 +41,7 @@ public sealed class LibraryControllerTests : IClassFixture<JellyfinApplicationFa
[Theory] [Theory]
[InlineData("Items/{0}")] [InlineData("Items/{0}")]
[InlineData("Items?ids={0}")] [InlineData("Items?ids={0}")]
public async Task Delete_NonExistentItemId_Unauthorised(string format) public async Task Delete_NonexistentItemId_Unauthorised(string format)
{ {
var client = _factory.CreateClient(); var client = _factory.CreateClient();
@ -52,7 +52,7 @@ public sealed class LibraryControllerTests : IClassFixture<JellyfinApplicationFa
[Theory] [Theory]
[InlineData("Items/{0}")] [InlineData("Items/{0}")]
[InlineData("Items?ids={0}")] [InlineData("Items?ids={0}")]
public async Task Delete_NonExistentItemId_NotFound(string format) public async Task Delete_NonexistentItemId_NotFound(string format)
{ {
var client = _factory.CreateClient(); var client = _factory.CreateClient();
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client)); client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));

View File

@ -16,7 +16,7 @@ public class PlaystateControllerTests : IClassFixture<JellyfinApplicationFactory
} }
[Fact] [Fact]
public async Task DeleteMarkUnplayedItem_NonExistentUserId_NotFound() public async Task DeleteMarkUnplayedItem_NonexistentUserId_NotFound()
{ {
var client = _factory.CreateClient(); var client = _factory.CreateClient();
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client)); client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));
@ -26,7 +26,7 @@ public class PlaystateControllerTests : IClassFixture<JellyfinApplicationFactory
} }
[Fact] [Fact]
public async Task PostMarkPlayedItem_NonExistentUserId_NotFound() public async Task PostMarkPlayedItem_NonexistentUserId_NotFound()
{ {
var client = _factory.CreateClient(); var client = _factory.CreateClient();
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client)); client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));
@ -36,7 +36,7 @@ public class PlaystateControllerTests : IClassFixture<JellyfinApplicationFactory
} }
[Fact] [Fact]
public async Task DeleteMarkUnplayedItem_NonExistentItemId_NotFound() public async Task DeleteMarkUnplayedItem_NonexistentItemId_NotFound()
{ {
var client = _factory.CreateClient(); var client = _factory.CreateClient();
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client)); client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));
@ -48,7 +48,7 @@ public class PlaystateControllerTests : IClassFixture<JellyfinApplicationFactory
} }
[Fact] [Fact]
public async Task PostMarkPlayedItem_NonExistentItemId_NotFound() public async Task PostMarkPlayedItem_NonexistentItemId_NotFound()
{ {
var client = _factory.CreateClient(); var client = _factory.CreateClient();
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client)); client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));

View File

@ -20,7 +20,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
private const string TestUsername = "testUser01"; private const string TestUsername = "testUser01";
private readonly JellyfinApplicationFactory _factory; private readonly JellyfinApplicationFactory _factory;
private readonly JsonSerializerOptions _jsonOpions = JsonDefaults.Options; private readonly JsonSerializerOptions _jsonOptions = JsonDefaults.Options;
private static string? _accessToken; private static string? _accessToken;
private static Guid _testUserId = Guid.Empty; private static Guid _testUserId = Guid.Empty;
@ -30,10 +30,10 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
} }
private Task<HttpResponseMessage> CreateUserByName(HttpClient httpClient, CreateUserByName request) private Task<HttpResponseMessage> CreateUserByName(HttpClient httpClient, CreateUserByName request)
=> httpClient.PostAsJsonAsync("Users/New", request, _jsonOpions); => httpClient.PostAsJsonAsync("Users/New", request, _jsonOptions);
private Task<HttpResponseMessage> UpdateUserPassword(HttpClient httpClient, Guid userId, UpdateUserPassword request) private Task<HttpResponseMessage> UpdateUserPassword(HttpClient httpClient, Guid userId, UpdateUserPassword request)
=> httpClient.PostAsJsonAsync("Users/" + userId.ToString("N", CultureInfo.InvariantCulture) + "/Password", request, _jsonOpions); => httpClient.PostAsJsonAsync("Users/" + userId.ToString("N", CultureInfo.InvariantCulture) + "/Password", request, _jsonOptions);
[Fact] [Fact]
[Priority(-1)] [Priority(-1)]
@ -43,7 +43,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
using var response = await client.GetAsync("Users/Public"); using var response = await client.GetAsync("Users/Public");
Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal(HttpStatusCode.OK, response.StatusCode);
var users = await response.Content.ReadFromJsonAsync<UserDto[]>(_jsonOpions); var users = await response.Content.ReadFromJsonAsync<UserDto[]>(_jsonOptions);
// User are hidden by default // User are hidden by default
Assert.NotNull(users); Assert.NotNull(users);
Assert.Empty(users); Assert.Empty(users);
@ -58,7 +58,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
using var response = await client.GetAsync("Users"); using var response = await client.GetAsync("Users");
Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal(HttpStatusCode.OK, response.StatusCode);
var users = await response.Content.ReadFromJsonAsync<UserDto[]>(_jsonOpions); var users = await response.Content.ReadFromJsonAsync<UserDto[]>(_jsonOptions);
Assert.NotNull(users); Assert.NotNull(users);
Assert.Single(users); Assert.Single(users);
Assert.False(users![0].HasConfiguredPassword); Assert.False(users![0].HasConfiguredPassword);
@ -90,7 +90,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
using var response = await CreateUserByName(client, createRequest); using var response = await CreateUserByName(client, createRequest);
Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal(HttpStatusCode.OK, response.StatusCode);
var user = await response.Content.ReadFromJsonAsync<UserDto>(_jsonOpions); var user = await response.Content.ReadFromJsonAsync<UserDto>(_jsonOptions);
Assert.Equal(TestUsername, user!.Name); Assert.Equal(TestUsername, user!.Name);
Assert.False(user.HasPassword); Assert.False(user.HasPassword);
Assert.False(user.HasConfiguredPassword); Assert.False(user.HasConfiguredPassword);
@ -151,7 +151,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
var users = await JsonSerializer.DeserializeAsync<UserDto[]>( var users = await JsonSerializer.DeserializeAsync<UserDto[]>(
await client.GetStreamAsync("Users"), _jsonOpions); await client.GetStreamAsync("Users"), _jsonOptions);
var user = users!.First(x => x.Id.Equals(_testUserId)); var user = users!.First(x => x.Id.Equals(_testUserId));
Assert.True(user.HasPassword); Assert.True(user.HasPassword);
Assert.True(user.HasConfiguredPassword); Assert.True(user.HasConfiguredPassword);
@ -174,7 +174,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
var users = await JsonSerializer.DeserializeAsync<UserDto[]>( var users = await JsonSerializer.DeserializeAsync<UserDto[]>(
await client.GetStreamAsync("Users"), _jsonOpions); await client.GetStreamAsync("Users"), _jsonOptions);
var user = users!.First(x => x.Id.Equals(_testUserId)); var user = users!.First(x => x.Id.Equals(_testUserId));
Assert.False(user.HasPassword); Assert.False(user.HasPassword);
Assert.False(user.HasConfiguredPassword); Assert.False(user.HasConfiguredPassword);

View File

@ -23,7 +23,7 @@ public sealed class UserLibraryControllerTests : IClassFixture<JellyfinApplicati
} }
[Fact] [Fact]
public async Task GetRootFolder_NonExistenUserId_NotFound() public async Task GetRootFolder_NonexistentUserId_NotFound()
{ {
var client = _factory.CreateClient(); var client = _factory.CreateClient();
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client)); client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));
@ -47,7 +47,7 @@ public sealed class UserLibraryControllerTests : IClassFixture<JellyfinApplicati
[InlineData("Users/{0}/Items/{1}/LocalTrailers")] [InlineData("Users/{0}/Items/{1}/LocalTrailers")]
[InlineData("Users/{0}/Items/{1}/SpecialFeatures")] [InlineData("Users/{0}/Items/{1}/SpecialFeatures")]
[InlineData("Users/{0}/Items/{1}/Lyrics")] [InlineData("Users/{0}/Items/{1}/Lyrics")]
public async Task GetItem_NonExistenUserId_NotFound(string format) public async Task GetItem_NonexistentUserId_NotFound(string format)
{ {
var client = _factory.CreateClient(); var client = _factory.CreateClient();
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client)); client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));
@ -64,7 +64,7 @@ public sealed class UserLibraryControllerTests : IClassFixture<JellyfinApplicati
[InlineData("Users/{0}/Items/{1}/LocalTrailers")] [InlineData("Users/{0}/Items/{1}/LocalTrailers")]
[InlineData("Users/{0}/Items/{1}/SpecialFeatures")] [InlineData("Users/{0}/Items/{1}/SpecialFeatures")]
[InlineData("Users/{0}/Items/{1}/Lyrics")] [InlineData("Users/{0}/Items/{1}/Lyrics")]
public async Task GetItem_NonExistentItemId_NotFound(string format) public async Task GetItem_NonexistentItemId_NotFound(string format)
{ {
var client = _factory.CreateClient(); var client = _factory.CreateClient();
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client)); client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));

View File

@ -16,7 +16,7 @@ public sealed class VideosControllerTests : IClassFixture<JellyfinApplicationFac
} }
[Fact] [Fact]
public async Task DeleteAlternateSources_NonExistentItemId_NotFound() public async Task DeleteAlternateSources_NonexistentItemId_NotFound()
{ {
var client = _factory.CreateClient(); var client = _factory.CreateClient();
client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client)); client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));

View File

@ -85,7 +85,7 @@ namespace Jellyfin.XbmcMetadata.Tests.Parsers
Assert.Contains("Bryan Fuller", writers.Select(x => x.Name)); Assert.Contains("Bryan Fuller", writers.Select(x => x.Name));
Assert.Contains("Michael Green", writers.Select(x => x.Name)); Assert.Contains("Michael Green", writers.Select(x => x.Name));
// Direcotrs // Directors
var directors = result.People.Where(x => x.Type == PersonKind.Director).ToArray(); var directors = result.People.Where(x => x.Type == PersonKind.Director).ToArray();
Assert.Single(directors); Assert.Single(directors);
Assert.Contains("David Slade", directors.Select(x => x.Name)); Assert.Contains("David Slade", directors.Select(x => x.Name));