mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-05 07:18:47 +01:00
Merge branch 'master' into network-rewrite
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<CodeAnalysisRuleSet>../jellyfin-tests.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
@@ -15,8 +15,8 @@
|
||||
<PackageReference Include="AutoFixture" Version="4.17.0" />
|
||||
<PackageReference Include="AutoFixture.AutoMoq" Version="4.17.0" />
|
||||
<PackageReference Include="AutoFixture.Xunit2" Version="4.17.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.9" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="7.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options" Version="7.0.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
|
||||
<PackageReference Include="xunit" Version="2.4.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace Jellyfin.Api.Tests
|
||||
user.SetPermission(PermissionKind.IsAdministrator, role.Equals(UserRoles.Administrator, StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
// Add access schedules if set.
|
||||
if (accessSchedules != null)
|
||||
if (accessSchedules is not null)
|
||||
{
|
||||
foreach (var accessSchedule in accessSchedules)
|
||||
{
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<CodeAnalysisRuleSet>../jellyfin-tests.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using Xunit;
|
||||
|
||||
namespace Jellyfin.Controller.Tests.Entities
|
||||
namespace Jellyfin.Controller.Tests.Entities;
|
||||
|
||||
public class BaseItemTests
|
||||
{
|
||||
public class BaseItemTests
|
||||
{
|
||||
[Theory]
|
||||
[InlineData("", "")]
|
||||
[InlineData("1", "0000000001")]
|
||||
[InlineData("t", "t")]
|
||||
[InlineData("test", "test")]
|
||||
[InlineData("test1", "test0000000001")]
|
||||
[InlineData("1test 2", "0000000001test 0000000002")]
|
||||
public void BaseItem_ModifySortChunks_Valid(string input, string expected)
|
||||
=> Assert.Equal(expected, BaseItem.ModifySortChunks(input));
|
||||
}
|
||||
[Theory]
|
||||
[InlineData("", "")]
|
||||
[InlineData("1", "0000000001")]
|
||||
[InlineData("t", "t")]
|
||||
[InlineData("test", "test")]
|
||||
[InlineData("test1", "test0000000001")]
|
||||
[InlineData("1test 2", "0000000001test 0000000002")]
|
||||
public void BaseItem_ModifySortChunks_Valid(string input, string expected)
|
||||
=> Assert.Equal(expected, BaseItem.ModifySortChunks(input));
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<CodeAnalysisRuleSet>../jellyfin-tests.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<CodeAnalysisRuleSet>../jellyfin-tests.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<CodeAnalysisRuleSet>../jellyfin-tests.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<CodeAnalysisRuleSet>../jellyfin-tests.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<CodeAnalysisRuleSet>../jellyfin-tests.ruleset</CodeAnalysisRuleSet>
|
||||
<RootNamespace>Jellyfin.MediaEncoding.Keyframes</RootNamespace>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<CodeAnalysisRuleSet>../jellyfin-tests.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -323,7 +323,7 @@ namespace Jellyfin.Model.Tests
|
||||
var val = builder.BuildVideoItem(options);
|
||||
Assert.NotNull(val);
|
||||
|
||||
if (playMethod != null)
|
||||
if (playMethod is not null)
|
||||
{
|
||||
Assert.Equal(playMethod, val.PlayMethod);
|
||||
}
|
||||
@@ -472,7 +472,7 @@ namespace Jellyfin.Model.Tests
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (playMethod == null)
|
||||
else if (playMethod is null)
|
||||
{
|
||||
Assert.Null(val.SubProtocol);
|
||||
Assert.Equal("stream", uri.Filename);
|
||||
@@ -490,7 +490,7 @@ namespace Jellyfin.Model.Tests
|
||||
using (var stream = File.OpenRead(path))
|
||||
{
|
||||
var value = await JsonSerializer.DeserializeAsync<T>(stream, JsonDefaults.Options);
|
||||
if (value != null)
|
||||
if (value is not null)
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<CodeAnalysisRuleSet>../jellyfin-tests.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<CodeAnalysisRuleSet>../jellyfin-tests.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -27,7 +27,7 @@ namespace Jellyfin.Naming.Tests.TV
|
||||
{
|
||||
var result = SeasonPathParser.Parse(path, true, true);
|
||||
|
||||
Assert.Equal(result.SeasonNumber != null, result.Success);
|
||||
Assert.Equal(result.SeasonNumber is not null, result.Success);
|
||||
Assert.Equal(result.SeasonNumber, seasonNumber);
|
||||
Assert.Equal(isSeasonDirectory, result.IsSeasonFolder);
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ namespace Jellyfin.Naming.Tests.Video
|
||||
|
||||
Assert.Equal(is3D, result.Is3D);
|
||||
|
||||
if (format3D == null)
|
||||
if (format3D is null)
|
||||
{
|
||||
Assert.Null(result?.Format3D);
|
||||
}
|
||||
|
||||
@@ -25,8 +25,8 @@ namespace Jellyfin.Naming.Tests.Video
|
||||
files.Select(i => VideoResolver.Resolve(i, false, _namingOptions)).OfType<VideoFileInfo>().ToList(),
|
||||
_namingOptions).ToList();
|
||||
|
||||
Assert.Single(result.Where(v => v.ExtraType == null));
|
||||
Assert.Single(result.Where(v => v.ExtraType != null));
|
||||
Assert.Single(result.Where(v => v.ExtraType is null));
|
||||
Assert.Single(result.Where(v => v.ExtraType is not null));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -44,8 +44,8 @@ namespace Jellyfin.Naming.Tests.Video
|
||||
files.Select(i => VideoResolver.Resolve(i, false, _namingOptions)).OfType<VideoFileInfo>().ToList(),
|
||||
_namingOptions).ToList();
|
||||
|
||||
Assert.Single(result.Where(v => v.ExtraType == null));
|
||||
Assert.Single(result.Where(v => v.ExtraType != null));
|
||||
Assert.Single(result.Where(v => v.ExtraType is null));
|
||||
Assert.Single(result.Where(v => v.ExtraType is not null));
|
||||
Assert.Equal(2, result[0].AlternateVersions.Count);
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<CodeAnalysisRuleSet>../jellyfin-tests.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<CodeAnalysisRuleSet>../jellyfin-tests.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -91,7 +91,7 @@ namespace Jellyfin.Providers.Tests.Manager
|
||||
|
||||
// Use type Series to hit DisplayOrder
|
||||
Assert.False(TestMergeBaseItemData<Series, SeriesInfo>(propName, oldValue, newValue, null, false, out _));
|
||||
if (lockField != null)
|
||||
if (lockField is not null)
|
||||
{
|
||||
Assert.False(TestMergeBaseItemData<Series, SeriesInfo>(propName, oldValue, newValue, lockField, true, out _));
|
||||
Assert.False(TestMergeBaseItemData<Series, SeriesInfo>(propName, null, newValue, lockField, false, out _));
|
||||
@@ -120,7 +120,7 @@ namespace Jellyfin.Providers.Tests.Manager
|
||||
|
||||
// Use type Audio to hit AlbumArtists
|
||||
Assert.False(TestMergeBaseItemData<Audio, SongInfo>(propName, oldValue, newValue, null, false, out _));
|
||||
if (lockField != null)
|
||||
if (lockField is not null)
|
||||
{
|
||||
Assert.False(TestMergeBaseItemData<Audio, SongInfo>(propName, oldValue, newValue, lockField, true, out _));
|
||||
Assert.False(TestMergeBaseItemData<Audio, SongInfo>(propName, Array.Empty<string>(), newValue, lockField, false, out _));
|
||||
@@ -328,11 +328,11 @@ namespace Jellyfin.Providers.Tests.Manager
|
||||
People = oldValue
|
||||
};
|
||||
|
||||
var lockedFields = lockField == null ? Array.Empty<MetadataField>() : new[] { (MetadataField)lockField };
|
||||
var lockedFields = lockField is null ? Array.Empty<MetadataField>() : new[] { (MetadataField)lockField };
|
||||
MetadataService<Movie, MovieInfo>.MergeBaseItemData(source, target, lockedFields, replaceData, false);
|
||||
|
||||
actualValue = target.People;
|
||||
return newValue?.Equals(actualValue) ?? actualValue == null;
|
||||
return newValue?.Equals(actualValue) ?? actualValue is null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -367,12 +367,12 @@ namespace Jellyfin.Providers.Tests.Manager
|
||||
};
|
||||
property.SetValue(target.Item, oldValue);
|
||||
|
||||
var lockedFields = lockField == null ? Array.Empty<MetadataField>() : new[] { (MetadataField)lockField };
|
||||
var lockedFields = lockField is null ? Array.Empty<MetadataField>() : new[] { (MetadataField)lockField };
|
||||
// generic type doesn't actually matter to call the static method, just has to be filled in
|
||||
MetadataService<TItemType, TIdType>.MergeBaseItemData(source, target, lockedFields, replaceData, false);
|
||||
|
||||
actualValue = property.GetValue(target.Item);
|
||||
return newValue?.Equals(actualValue) ?? actualValue == null;
|
||||
return newValue?.Equals(actualValue) ?? actualValue is null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -423,14 +423,14 @@ namespace Jellyfin.Providers.Tests.Manager
|
||||
where TProviderType : class, IImageProvider
|
||||
{
|
||||
Mock<IHasOrder>? hasOrder = null;
|
||||
if (order != null)
|
||||
if (order is not null)
|
||||
{
|
||||
hasOrder = new Mock<IHasOrder>(MockBehavior.Strict);
|
||||
hasOrder.Setup(i => i.Order)
|
||||
.Returns((int)order);
|
||||
}
|
||||
|
||||
var provider = hasOrder == null
|
||||
var provider = hasOrder is null
|
||||
? new Mock<TProviderType>(MockBehavior.Strict)
|
||||
: hasOrder.As<TProviderType>();
|
||||
provider.Setup(p => p.Name)
|
||||
@@ -471,14 +471,14 @@ namespace Jellyfin.Providers.Tests.Manager
|
||||
}
|
||||
|
||||
Mock<IHasOrder>? hasOrder = null;
|
||||
if (order != null)
|
||||
if (order is not null)
|
||||
{
|
||||
hasOrder = forcedProvider == null ? new Mock<IHasOrder>() : forcedProvider.As<IHasOrder>();
|
||||
hasOrder = forcedProvider is null ? new Mock<IHasOrder>() : forcedProvider.As<IHasOrder>();
|
||||
hasOrder.Setup(i => i.Order)
|
||||
.Returns((int)order);
|
||||
}
|
||||
|
||||
var provider = hasOrder == null
|
||||
var provider = hasOrder is null
|
||||
? new Mock<TProviderType>(MockBehavior.Strict)
|
||||
: hasOrder.As<TProviderType>();
|
||||
provider.Setup(p => p.Name)
|
||||
@@ -499,7 +499,7 @@ namespace Jellyfin.Providers.Tests.Manager
|
||||
};
|
||||
|
||||
// only create type options if populating it with something
|
||||
if (imageFetcherOrder != null || metadataFetcherOrder != null)
|
||||
if (imageFetcherOrder is not null || metadataFetcherOrder is not null)
|
||||
{
|
||||
imageFetcherOrder ??= Array.Empty<string>();
|
||||
metadataFetcherOrder ??= Array.Empty<string>();
|
||||
@@ -527,7 +527,7 @@ namespace Jellyfin.Providers.Tests.Manager
|
||||
var serverConfiguration = new ServerConfiguration();
|
||||
|
||||
// only create type options if populating it with something
|
||||
if (imageFetcherOrder != null || localMetadataReaderOrder != null || metadataFetcherOrder != null)
|
||||
if (imageFetcherOrder is not null || localMetadataReaderOrder is not null || metadataFetcherOrder is not null)
|
||||
{
|
||||
imageFetcherOrder ??= Array.Empty<string>();
|
||||
localMetadataReaderOrder ??= Array.Empty<string>();
|
||||
|
||||
@@ -80,7 +80,7 @@ namespace Jellyfin.Providers.Tests.MediaInfo
|
||||
|
||||
var actual = await embeddedImageProvider.GetImage(input, type, CancellationToken.None);
|
||||
Assert.NotNull(actual);
|
||||
if (expectedFormat == null)
|
||||
if (expectedFormat is null)
|
||||
{
|
||||
Assert.False(actual.HasImage);
|
||||
}
|
||||
@@ -131,7 +131,7 @@ namespace Jellyfin.Providers.Tests.MediaInfo
|
||||
|
||||
var actual = await embeddedImageProvider.GetImage(input, type, CancellationToken.None);
|
||||
Assert.NotNull(actual);
|
||||
if (expectedFormat == null)
|
||||
if (expectedFormat is null)
|
||||
{
|
||||
Assert.False(actual.HasImage);
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ namespace Jellyfin.Providers.Tests.MediaInfo
|
||||
private static IMediaSourceManager GetMediaSourceManager(Video item, MediaStream? defaultStream, List<MediaStream> mediaStreams)
|
||||
{
|
||||
var defaultStreamList = new List<MediaStream>();
|
||||
if (defaultStream != null)
|
||||
if (defaultStream is not null)
|
||||
{
|
||||
defaultStreamList.Add(defaultStream);
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<CodeAnalysisRuleSet>../jellyfin-tests.ruleset</CodeAnalysisRuleSet>
|
||||
<RootNamespace>Jellyfin.Server.Implementations.Tests</RootNamespace>
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace Jellyfin.Server.Implementations.Tests.TypedBaseItem
|
||||
|
||||
private static bool IsProjectAssemblyName(string? name)
|
||||
{
|
||||
if (name == null)
|
||||
if (name is null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
|
||||
{
|
||||
return new ContentResult()
|
||||
{
|
||||
Content = (@params != null && @params.Count > 0)
|
||||
Content = (@params is not null && @params.Count > 0)
|
||||
? string.Join("&", @params.Select(x => x.Key + "=" + x.Value))
|
||||
: string.Empty,
|
||||
ContentType = "text/plain; charset=utf-8",
|
||||
@@ -42,7 +42,7 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
|
||||
{
|
||||
return new ContentResult()
|
||||
{
|
||||
Content = (@params != null && @params.Count > 0)
|
||||
Content = (@params is not null && @params.Count > 0)
|
||||
? string.Join("&", @params.Select(x => x.Key + "=" + string.Join(',', x.Value)))
|
||||
: string.Empty,
|
||||
ContentType = "text/plain; charset=utf-8",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<CodeAnalysisRuleSet>../jellyfin-tests.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
@@ -9,8 +9,8 @@
|
||||
<PackageReference Include="AutoFixture" Version="4.17.0" />
|
||||
<PackageReference Include="AutoFixture.AutoMoq" Version="4.17.0" />
|
||||
<PackageReference Include="AutoFixture.Xunit2" Version="4.17.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.9" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="7.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options" Version="7.0.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
|
||||
<PackageReference Include="xunit" Version="2.4.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<CodeAnalysisRuleSet>../jellyfin-tests.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
@@ -10,8 +10,8 @@
|
||||
<PackageReference Include="AutoFixture" Version="4.17.0" />
|
||||
<PackageReference Include="AutoFixture.AutoMoq" Version="4.17.0" />
|
||||
<PackageReference Include="AutoFixture.Xunit2" Version="4.17.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.9" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="7.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options" Version="7.0.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
|
||||
<PackageReference Include="xunit" Version="2.4.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<CodeAnalysisRuleSet>../jellyfin-tests.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
|
||||
Reference in New Issue
Block a user