mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-05-31 04:05:50 -04:00
Merge pull request #13589 from JPVenson/feature/DatabaseRefactor
[Feature] Database code refactor
This commit is contained in:
commit
d848faeb75
@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "Development Jellyfin Server",
|
"name": "Development Jellyfin Server",
|
||||||
"image":"mcr.microsoft.com/devcontainers/dotnet:9.0-bookworm",
|
"image": "mcr.microsoft.com/devcontainers/dotnet:9.0-bookworm",
|
||||||
|
"service": "app",
|
||||||
|
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
|
||||||
// restores nuget packages, installs the dotnet workloads and installs the dev https certificate
|
// restores nuget packages, installs the dotnet workloads and installs the dev https certificate
|
||||||
"postStartCommand": "sudo dotnet restore; sudo dotnet workload update; sudo dotnet dev-certs https --trust; sudo bash \"./.devcontainer/install-ffmpeg.sh\"",
|
"postStartCommand": "sudo dotnet restore; sudo dotnet workload update; sudo dotnet dev-certs https --trust; sudo bash \"./.devcontainer/install-ffmpeg.sh\"",
|
||||||
// reads the extensions list and installs them
|
// reads the extensions list and installs them
|
||||||
@ -13,7 +15,9 @@
|
|||||||
},
|
},
|
||||||
"ghcr.io/devcontainers-contrib/features/apt-packages:1": {
|
"ghcr.io/devcontainers-contrib/features/apt-packages:1": {
|
||||||
"preserve_apt_list": false,
|
"preserve_apt_list": false,
|
||||||
"packages": ["libfontconfig1"]
|
"packages": [
|
||||||
|
"libfontconfig1"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"ghcr.io/devcontainers/features/docker-in-docker:2": {
|
"ghcr.io/devcontainers/features/docker-in-docker:2": {
|
||||||
"dockerDashComposeVersion": "v2"
|
"dockerDashComposeVersion": "v2"
|
||||||
|
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"dotnet.preferVisualStudioCodeFileSystemWatcher": true
|
||||||
|
}
|
@ -35,11 +35,11 @@ using Emby.Server.Implementations.SyncPlay;
|
|||||||
using Emby.Server.Implementations.TV;
|
using Emby.Server.Implementations.TV;
|
||||||
using Emby.Server.Implementations.Updates;
|
using Emby.Server.Implementations.Updates;
|
||||||
using Jellyfin.Api.Helpers;
|
using Jellyfin.Api.Helpers;
|
||||||
|
using Jellyfin.Database.Implementations;
|
||||||
using Jellyfin.Drawing;
|
using Jellyfin.Drawing;
|
||||||
using Jellyfin.MediaEncoding.Hls.Playlist;
|
using Jellyfin.MediaEncoding.Hls.Playlist;
|
||||||
using Jellyfin.Networking.Manager;
|
using Jellyfin.Networking.Manager;
|
||||||
using Jellyfin.Networking.Udp;
|
using Jellyfin.Networking.Udp;
|
||||||
using Jellyfin.Server.Implementations;
|
|
||||||
using Jellyfin.Server.Implementations.Item;
|
using Jellyfin.Server.Implementations.Item;
|
||||||
using Jellyfin.Server.Implementations.MediaSegments;
|
using Jellyfin.Server.Implementations.MediaSegments;
|
||||||
using MediaBrowser.Common;
|
using MediaBrowser.Common;
|
||||||
@ -574,10 +574,15 @@ namespace Emby.Server.Implementations
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Create services registered with the service container that need to be initialized at application startup.
|
/// Create services registered with the service container that need to be initialized at application startup.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="startupConfig">The configuration used to initialise the application.</param>
|
||||||
/// <returns>A task representing the service initialization operation.</returns>
|
/// <returns>A task representing the service initialization operation.</returns>
|
||||||
public async Task InitializeServices()
|
public async Task InitializeServices(IConfiguration startupConfig)
|
||||||
{
|
{
|
||||||
var jellyfinDb = await Resolve<IDbContextFactory<JellyfinDbContext>>().CreateDbContextAsync().ConfigureAwait(false);
|
var factory = Resolve<IDbContextFactory<JellyfinDbContext>>();
|
||||||
|
var provider = Resolve<IJellyfinDatabaseProvider>();
|
||||||
|
provider.DbContextFactory = factory;
|
||||||
|
|
||||||
|
var jellyfinDb = await factory.CreateDbContextAsync().ConfigureAwait(false);
|
||||||
await using (jellyfinDb.ConfigureAwait(false))
|
await using (jellyfinDb.ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
if ((await jellyfinDb.Database.GetPendingMigrationsAsync().ConfigureAwait(false)).Any())
|
if ((await jellyfinDb.Database.GetPendingMigrationsAsync().ConfigureAwait(false)).Any())
|
||||||
|
@ -4,7 +4,7 @@ using System.IO;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
using MediaBrowser.Controller.Collections;
|
using MediaBrowser.Controller.Collections;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
@ -4,7 +4,7 @@ using System;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Server.Implementations;
|
using Jellyfin.Database.Implementations;
|
||||||
using MediaBrowser.Controller;
|
using MediaBrowser.Controller;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
|
@ -5,8 +5,8 @@ using System.Collections.Generic;
|
|||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Common;
|
using MediaBrowser.Common;
|
||||||
using MediaBrowser.Controller.Channels;
|
using MediaBrowser.Controller.Channels;
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
<ProjectReference Include="..\Emby.Photos\Emby.Photos.csproj" />
|
<ProjectReference Include="..\Emby.Photos\Emby.Photos.csproj" />
|
||||||
<ProjectReference Include="..\src\Jellyfin.Drawing\Jellyfin.Drawing.csproj" />
|
<ProjectReference Include="..\src\Jellyfin.Drawing\Jellyfin.Drawing.csproj" />
|
||||||
<ProjectReference Include="..\MediaBrowser.MediaEncoding\MediaBrowser.MediaEncoding.csproj" />
|
<ProjectReference Include="..\MediaBrowser.MediaEncoding\MediaBrowser.MediaEncoding.csproj" />
|
||||||
|
<ProjectReference Include="..\src\Jellyfin.Database\Jellyfin.Database.Implementations\Jellyfin.Database.Implementations.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -5,8 +5,8 @@ using System.Globalization;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Events;
|
using Jellyfin.Data.Events;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Controller.Channels;
|
using MediaBrowser.Controller.Channels;
|
||||||
using MediaBrowser.Controller.Configuration;
|
using MediaBrowser.Controller.Configuration;
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using MediaBrowser.Controller.Net;
|
using MediaBrowser.Controller.Net;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
using MediaBrowser.Controller.Drawing;
|
using MediaBrowser.Controller.Drawing;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
|
@ -6,6 +6,7 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
using MediaBrowser.Controller.Drawing;
|
using MediaBrowser.Controller.Drawing;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
using MediaBrowser.Controller.Drawing;
|
using MediaBrowser.Controller.Drawing;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
using MediaBrowser.Controller.Drawing;
|
using MediaBrowser.Controller.Drawing;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
|
@ -18,8 +18,10 @@ using Emby.Server.Implementations.Library.Validators;
|
|||||||
using Emby.Server.Implementations.Playlists;
|
using Emby.Server.Implementations.Playlists;
|
||||||
using Emby.Server.Implementations.ScheduledTasks.Tasks;
|
using Emby.Server.Implementations.ScheduledTasks.Tasks;
|
||||||
using Emby.Server.Implementations.Sorting;
|
using Emby.Server.Implementations.Sorting;
|
||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Data;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Common.Extensions;
|
using MediaBrowser.Common.Extensions;
|
||||||
using MediaBrowser.Controller;
|
using MediaBrowser.Controller;
|
||||||
|
@ -13,8 +13,10 @@ using System.Text.Json;
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using AsyncKeyedLock;
|
using AsyncKeyedLock;
|
||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Data;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using Jellyfin.Extensions.Json;
|
using Jellyfin.Extensions.Json;
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Model.Entities;
|
using MediaBrowser.Model.Entities;
|
||||||
|
|
||||||
|
@ -4,8 +4,9 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Immutable;
|
using System.Collections.Immutable;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
@ -3,8 +3,9 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
@ -4,6 +4,7 @@ using System.Linq;
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using MediaBrowser.Controller.Drawing;
|
using MediaBrowser.Controller.Drawing;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
@ -6,9 +6,9 @@ using System.Collections.Generic;
|
|||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Database.Implementations;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using Jellyfin.Server.Implementations;
|
|
||||||
using MediaBrowser.Controller.Configuration;
|
using MediaBrowser.Controller.Configuration;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
@ -6,8 +6,10 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Data;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Controller.Channels;
|
using MediaBrowser.Controller.Channels;
|
||||||
using MediaBrowser.Controller.Configuration;
|
using MediaBrowser.Controller.Configuration;
|
||||||
|
@ -4,6 +4,7 @@ using System.Linq;
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using MediaBrowser.Controller.Collections;
|
using MediaBrowser.Controller.Collections;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Entities.Movies;
|
using MediaBrowser.Controller.Entities.Movies;
|
||||||
|
@ -9,8 +9,8 @@ using System.IO;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using MediaBrowser.Common;
|
using MediaBrowser.Common;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Playlists;
|
using MediaBrowser.Controller.Playlists;
|
||||||
|
@ -2,7 +2,7 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Server.Implementations;
|
using Jellyfin.Database.Implementations;
|
||||||
using MediaBrowser.Model.Globalization;
|
using MediaBrowser.Model.Globalization;
|
||||||
using MediaBrowser.Model.Tasks;
|
using MediaBrowser.Model.Tasks;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
@ -18,6 +18,7 @@ namespace Emby.Server.Implementations.ScheduledTasks.Tasks
|
|||||||
private readonly ILogger<OptimizeDatabaseTask> _logger;
|
private readonly ILogger<OptimizeDatabaseTask> _logger;
|
||||||
private readonly ILocalizationManager _localization;
|
private readonly ILocalizationManager _localization;
|
||||||
private readonly IDbContextFactory<JellyfinDbContext> _provider;
|
private readonly IDbContextFactory<JellyfinDbContext> _provider;
|
||||||
|
private readonly IJellyfinDatabaseProvider _jellyfinDatabaseProvider;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="OptimizeDatabaseTask" /> class.
|
/// Initializes a new instance of the <see cref="OptimizeDatabaseTask" /> class.
|
||||||
@ -25,14 +26,17 @@ namespace Emby.Server.Implementations.ScheduledTasks.Tasks
|
|||||||
/// <param name="logger">Instance of the <see cref="ILogger"/> interface.</param>
|
/// <param name="logger">Instance of the <see cref="ILogger"/> interface.</param>
|
||||||
/// <param name="localization">Instance of the <see cref="ILocalizationManager"/> interface.</param>
|
/// <param name="localization">Instance of the <see cref="ILocalizationManager"/> interface.</param>
|
||||||
/// <param name="provider">Instance of the <see cref="IDbContextFactory{JellyfinDbContext}"/> interface.</param>
|
/// <param name="provider">Instance of the <see cref="IDbContextFactory{JellyfinDbContext}"/> interface.</param>
|
||||||
|
/// <param name="jellyfinDatabaseProvider">Instance of the JellyfinDatabaseProvider that can be used for provider specific operations.</param>
|
||||||
public OptimizeDatabaseTask(
|
public OptimizeDatabaseTask(
|
||||||
ILogger<OptimizeDatabaseTask> logger,
|
ILogger<OptimizeDatabaseTask> logger,
|
||||||
ILocalizationManager localization,
|
ILocalizationManager localization,
|
||||||
IDbContextFactory<JellyfinDbContext> provider)
|
IDbContextFactory<JellyfinDbContext> provider,
|
||||||
|
IJellyfinDatabaseProvider jellyfinDatabaseProvider)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_localization = localization;
|
_localization = localization;
|
||||||
_provider = provider;
|
_provider = provider;
|
||||||
|
_jellyfinDatabaseProvider = jellyfinDatabaseProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
@ -73,20 +77,7 @@ namespace Emby.Server.Implementations.ScheduledTasks.Tasks
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var context = await _provider.CreateDbContextAsync(cancellationToken).ConfigureAwait(false);
|
await _jellyfinDatabaseProvider.RunScheduledOptimisation(cancellationToken).ConfigureAwait(false);
|
||||||
await using (context.ConfigureAwait(false))
|
|
||||||
{
|
|
||||||
if (context.Database.IsSqlite())
|
|
||||||
{
|
|
||||||
await context.Database.ExecuteSqlRawAsync("PRAGMA optimize", cancellationToken).ConfigureAwait(false);
|
|
||||||
await context.Database.ExecuteSqlRawAsync("VACUUM", cancellationToken).ConfigureAwait(false);
|
|
||||||
_logger.LogInformation("jellyfin.db optimized successfully!");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_logger.LogInformation("This database doesn't support optimization");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -7,11 +7,13 @@ using System.Globalization;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Data;
|
||||||
using Jellyfin.Data.Entities.Security;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
using Jellyfin.Data.Events;
|
using Jellyfin.Data.Events;
|
||||||
using Jellyfin.Data.Queries;
|
using Jellyfin.Data.Queries;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
using Jellyfin.Database.Implementations.Entities.Security;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Common.Events;
|
using MediaBrowser.Common.Events;
|
||||||
using MediaBrowser.Common.Extensions;
|
using MediaBrowser.Common.Extensions;
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Sorting;
|
using MediaBrowser.Controller.Sorting;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#nullable disable
|
#nullable disable
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Sorting;
|
using MediaBrowser.Controller.Sorting;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#nullable disable
|
#nullable disable
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Sorting;
|
using MediaBrowser.Controller.Sorting;
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Sorting;
|
using MediaBrowser.Controller.Sorting;
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Sorting;
|
using MediaBrowser.Controller.Sorting;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#nullable disable
|
#nullable disable
|
||||||
|
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Sorting;
|
using MediaBrowser.Controller.Sorting;
|
||||||
|
@ -5,7 +5,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Session;
|
using MediaBrowser.Controller.Session;
|
||||||
|
@ -3,8 +3,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Data;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Controller.Configuration;
|
using MediaBrowser.Controller.Configuration;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
|
@ -3,7 +3,8 @@ using System.Security.Claims;
|
|||||||
using System.Text.Encodings.Web;
|
using System.Text.Encodings.Web;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Api.Constants;
|
using Jellyfin.Api.Constants;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using MediaBrowser.Controller.Authentication;
|
using MediaBrowser.Controller.Authentication;
|
||||||
using MediaBrowser.Controller.Net;
|
using MediaBrowser.Controller.Net;
|
||||||
using Microsoft.AspNetCore.Authentication;
|
using Microsoft.AspNetCore.Authentication;
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Api.Constants;
|
using Jellyfin.Api.Constants;
|
||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Common.Extensions;
|
using MediaBrowser.Common.Extensions;
|
||||||
using MediaBrowser.Common.Net;
|
using MediaBrowser.Common.Net;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using MediaBrowser.Common.Extensions;
|
using MediaBrowser.Common.Extensions;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.SyncPlay;
|
using MediaBrowser.Controller.SyncPlay;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
|
using Jellyfin.Data;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Common.Extensions;
|
using MediaBrowser.Common.Extensions;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
using Jellyfin.Api.Auth.DefaultAuthorizationPolicy;
|
using Jellyfin.Api.Auth.DefaultAuthorizationPolicy;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
|
|
||||||
namespace Jellyfin.Api.Auth.UserPermissionPolicy
|
namespace Jellyfin.Api.Auth.UserPermissionPolicy
|
||||||
{
|
{
|
||||||
|
@ -4,8 +4,9 @@ using System.Linq;
|
|||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
using Jellyfin.Api.Helpers;
|
using Jellyfin.Api.Helpers;
|
||||||
using Jellyfin.Api.ModelBinders;
|
using Jellyfin.Api.ModelBinders;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
@ -6,6 +6,7 @@ using System.Threading.Tasks;
|
|||||||
using Jellyfin.Api.Helpers;
|
using Jellyfin.Api.Helpers;
|
||||||
using Jellyfin.Api.ModelBinders;
|
using Jellyfin.Api.ModelBinders;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Controller.Channels;
|
using MediaBrowser.Controller.Channels;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
|
@ -4,8 +4,8 @@ using System.Diagnostics.CodeAnalysis;
|
|||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Jellyfin.Api.Helpers;
|
using Jellyfin.Api.Helpers;
|
||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using MediaBrowser.Common.Extensions;
|
using MediaBrowser.Common.Extensions;
|
||||||
using MediaBrowser.Controller;
|
using MediaBrowser.Controller;
|
||||||
using MediaBrowser.Model.Dto;
|
using MediaBrowser.Model.Dto;
|
||||||
|
@ -4,8 +4,9 @@ using System.Linq;
|
|||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
using Jellyfin.Api.Helpers;
|
using Jellyfin.Api.Helpers;
|
||||||
using Jellyfin.Api.ModelBinders;
|
using Jellyfin.Api.ModelBinders;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
@ -130,7 +130,7 @@ public class ImageController : BaseJellyfinApiController
|
|||||||
await _userManager.ClearProfileImageAsync(user).ConfigureAwait(false);
|
await _userManager.ClearProfileImageAsync(user).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
user.ProfileImage = new Data.Entities.ImageInfo(Path.Combine(userDataPath, "profile" + extension));
|
user.ProfileImage = new Database.Implementations.Entities.ImageInfo(Path.Combine(userDataPath, "profile" + extension));
|
||||||
|
|
||||||
await _providerManager
|
await _providerManager
|
||||||
.SaveImage(stream, mimeType, user.ProfileImage.Path)
|
.SaveImage(stream, mimeType, user.ProfileImage.Path)
|
||||||
|
@ -6,7 +6,7 @@ using System.Linq;
|
|||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
using Jellyfin.Api.Helpers;
|
using Jellyfin.Api.Helpers;
|
||||||
using Jellyfin.Api.ModelBinders;
|
using Jellyfin.Api.ModelBinders;
|
||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
@ -4,7 +4,9 @@ using System.Linq;
|
|||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
using Jellyfin.Api.Helpers;
|
using Jellyfin.Api.Helpers;
|
||||||
using Jellyfin.Api.ModelBinders;
|
using Jellyfin.Api.ModelBinders;
|
||||||
|
using Jellyfin.Data;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Common.Extensions;
|
using MediaBrowser.Common.Extensions;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
|
@ -11,8 +11,9 @@ using Jellyfin.Api.Extensions;
|
|||||||
using Jellyfin.Api.Helpers;
|
using Jellyfin.Api.Helpers;
|
||||||
using Jellyfin.Api.ModelBinders;
|
using Jellyfin.Api.ModelBinders;
|
||||||
using Jellyfin.Api.Models.LibraryDtos;
|
using Jellyfin.Api.Models.LibraryDtos;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Common.Api;
|
using MediaBrowser.Common.Api;
|
||||||
using MediaBrowser.Common.Extensions;
|
using MediaBrowser.Common.Extensions;
|
||||||
|
@ -15,6 +15,7 @@ using Jellyfin.Api.Helpers;
|
|||||||
using Jellyfin.Api.ModelBinders;
|
using Jellyfin.Api.ModelBinders;
|
||||||
using Jellyfin.Api.Models.LiveTvDtos;
|
using Jellyfin.Api.Models.LiveTvDtos;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Common.Api;
|
using MediaBrowser.Common.Api;
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
|
@ -4,7 +4,7 @@ using System.ComponentModel.DataAnnotations;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using MediaBrowser.Controller;
|
using MediaBrowser.Controller;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
|
@ -5,8 +5,9 @@ using System.Linq;
|
|||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
using Jellyfin.Api.Helpers;
|
using Jellyfin.Api.Helpers;
|
||||||
using Jellyfin.Api.ModelBinders;
|
using Jellyfin.Api.ModelBinders;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Common.Extensions;
|
using MediaBrowser.Common.Extensions;
|
||||||
using MediaBrowser.Controller.Configuration;
|
using MediaBrowser.Controller.Configuration;
|
||||||
|
@ -4,8 +4,9 @@ using System.Linq;
|
|||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
using Jellyfin.Api.Helpers;
|
using Jellyfin.Api.Helpers;
|
||||||
using Jellyfin.Api.ModelBinders;
|
using Jellyfin.Api.ModelBinders;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
@ -4,7 +4,7 @@ using System.Linq;
|
|||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
using Jellyfin.Api.Helpers;
|
using Jellyfin.Api.Helpers;
|
||||||
using Jellyfin.Api.ModelBinders;
|
using Jellyfin.Api.ModelBinders;
|
||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
@ -5,7 +5,7 @@ using System.Threading.Tasks;
|
|||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
using Jellyfin.Api.Helpers;
|
using Jellyfin.Api.Helpers;
|
||||||
using Jellyfin.Api.ModelBinders;
|
using Jellyfin.Api.ModelBinders;
|
||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
|
@ -3,8 +3,8 @@ using System.ComponentModel.DataAnnotations;
|
|||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
using Jellyfin.Api.Helpers;
|
using Jellyfin.Api.Helpers;
|
||||||
using Jellyfin.Api.ModelBinders;
|
using Jellyfin.Api.ModelBinders;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
@ -3,8 +3,9 @@ using System.ComponentModel.DataAnnotations;
|
|||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
using Jellyfin.Api.Helpers;
|
using Jellyfin.Api.Helpers;
|
||||||
using Jellyfin.Api.ModelBinders;
|
using Jellyfin.Api.ModelBinders;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using Jellyfin.Api.ModelBinders;
|
using Jellyfin.Api.ModelBinders;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using MediaBrowser.Model.Dto;
|
using MediaBrowser.Model.Dto;
|
||||||
using MediaBrowser.Model.Entities;
|
using MediaBrowser.Model.Entities;
|
||||||
using MediaBrowser.Model.Querying;
|
using MediaBrowser.Model.Querying;
|
||||||
|
@ -7,6 +7,7 @@ using Jellyfin.Api.Extensions;
|
|||||||
using Jellyfin.Api.Helpers;
|
using Jellyfin.Api.Helpers;
|
||||||
using Jellyfin.Api.ModelBinders;
|
using Jellyfin.Api.ModelBinders;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
@ -7,7 +7,8 @@ using Jellyfin.Api.Constants;
|
|||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
using Jellyfin.Api.Helpers;
|
using Jellyfin.Api.Helpers;
|
||||||
using Jellyfin.Api.Models.UserDtos;
|
using Jellyfin.Api.Models.UserDtos;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Common.Api;
|
using MediaBrowser.Common.Api;
|
||||||
using MediaBrowser.Common.Extensions;
|
using MediaBrowser.Common.Extensions;
|
||||||
|
@ -7,8 +7,8 @@ using System.Threading.Tasks;
|
|||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
using Jellyfin.Api.Helpers;
|
using Jellyfin.Api.Helpers;
|
||||||
using Jellyfin.Api.ModelBinders;
|
using Jellyfin.Api.ModelBinders;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
@ -6,8 +6,9 @@ using System.Linq;
|
|||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
using Jellyfin.Api.Helpers;
|
using Jellyfin.Api.Helpers;
|
||||||
using Jellyfin.Api.ModelBinders;
|
using Jellyfin.Api.ModelBinders;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
|
@ -8,8 +8,8 @@ using System.Text;
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Common.Configuration;
|
using MediaBrowser.Common.Configuration;
|
||||||
using MediaBrowser.Common.Extensions;
|
using MediaBrowser.Common.Extensions;
|
||||||
|
@ -7,8 +7,10 @@ using System.Text.Json;
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Data;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Common.Extensions;
|
using MediaBrowser.Common.Extensions;
|
||||||
using MediaBrowser.Common.Net;
|
using MediaBrowser.Common.Net;
|
||||||
|
@ -5,8 +5,9 @@ using System.Security.Claims;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Api.Constants;
|
using Jellyfin.Api.Constants;
|
||||||
using Jellyfin.Api.Extensions;
|
using Jellyfin.Api.Extensions;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Common.Extensions;
|
using MediaBrowser.Common.Extensions;
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions.Json.Converters;
|
using Jellyfin.Extensions.Json.Converters;
|
||||||
using MediaBrowser.Model.Entities;
|
using MediaBrowser.Model.Entities;
|
||||||
using MediaBrowser.Model.Querying;
|
using MediaBrowser.Model.Querying;
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data;
|
||||||
using Jellyfin.Data.Events;
|
using Jellyfin.Data.Events;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using MediaBrowser.Controller.Authentication;
|
using MediaBrowser.Controller.Authentication;
|
||||||
using MediaBrowser.Controller.Net;
|
using MediaBrowser.Controller.Net;
|
||||||
using MediaBrowser.Model.Activity;
|
using MediaBrowser.Model.Activity;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using MediaBrowser.Controller.Authentication;
|
using MediaBrowser.Controller.Authentication;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Net;
|
using MediaBrowser.Controller.Net;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
|
|
||||||
namespace Jellyfin.Data
|
namespace Jellyfin.Data
|
||||||
{
|
{
|
||||||
|
@ -1,33 +0,0 @@
|
|||||||
namespace Jellyfin.Data.Enums
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// An enum representing types of art.
|
|
||||||
/// </summary>
|
|
||||||
public enum ArtKind
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Another type of art, not covered by the other members.
|
|
||||||
/// </summary>
|
|
||||||
Other = 0,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A poster.
|
|
||||||
/// </summary>
|
|
||||||
Poster = 1,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A banner.
|
|
||||||
/// </summary>
|
|
||||||
Banner = 2,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A thumbnail.
|
|
||||||
/// </summary>
|
|
||||||
Thumbnail = 3,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A logo.
|
|
||||||
/// </summary>
|
|
||||||
Logo = 4
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
namespace Jellyfin.Data.Enums
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// An enum representing the version of Chromecast to be used by clients.
|
|
||||||
/// </summary>
|
|
||||||
public enum ChromecastVersion
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Stable Chromecast version.
|
|
||||||
/// </summary>
|
|
||||||
Stable = 0,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Unstable Chromecast version.
|
|
||||||
/// </summary>
|
|
||||||
Unstable = 1
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,58 +0,0 @@
|
|||||||
namespace Jellyfin.Data.Enums
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// An enum that represents a day of the week, weekdays, weekends, or all days.
|
|
||||||
/// </summary>
|
|
||||||
public enum DynamicDayOfWeek
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Sunday.
|
|
||||||
/// </summary>
|
|
||||||
Sunday = 0,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Monday.
|
|
||||||
/// </summary>
|
|
||||||
Monday = 1,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Tuesday.
|
|
||||||
/// </summary>
|
|
||||||
Tuesday = 2,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Wednesday.
|
|
||||||
/// </summary>
|
|
||||||
Wednesday = 3,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Thursday.
|
|
||||||
/// </summary>
|
|
||||||
Thursday = 4,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Friday.
|
|
||||||
/// </summary>
|
|
||||||
Friday = 5,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Saturday.
|
|
||||||
/// </summary>
|
|
||||||
Saturday = 6,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// All days of the week.
|
|
||||||
/// </summary>
|
|
||||||
Everyday = 7,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A week day, or Monday-Friday.
|
|
||||||
/// </summary>
|
|
||||||
Weekday = 8,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Saturday and Sunday.
|
|
||||||
/// </summary>
|
|
||||||
Weekend = 9
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,58 +0,0 @@
|
|||||||
namespace Jellyfin.Data.Enums
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// An enum representing the different options for the home screen sections.
|
|
||||||
/// </summary>
|
|
||||||
public enum HomeSectionType
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// None.
|
|
||||||
/// </summary>
|
|
||||||
None = 0,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// My Media.
|
|
||||||
/// </summary>
|
|
||||||
SmallLibraryTiles = 1,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// My Media Small.
|
|
||||||
/// </summary>
|
|
||||||
LibraryButtons = 2,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Active Recordings.
|
|
||||||
/// </summary>
|
|
||||||
ActiveRecordings = 3,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Continue Watching.
|
|
||||||
/// </summary>
|
|
||||||
Resume = 4,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Continue Listening.
|
|
||||||
/// </summary>
|
|
||||||
ResumeAudio = 5,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Latest Media.
|
|
||||||
/// </summary>
|
|
||||||
LatestMedia = 6,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Next Up.
|
|
||||||
/// </summary>
|
|
||||||
NextUp = 7,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Live TV.
|
|
||||||
/// </summary>
|
|
||||||
LiveTv = 8,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Continue Reading.
|
|
||||||
/// </summary>
|
|
||||||
ResumeBook = 9
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,23 +0,0 @@
|
|||||||
namespace Jellyfin.Data.Enums
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// An enum representing a type of indexing in a user's display preferences.
|
|
||||||
/// </summary>
|
|
||||||
public enum IndexingKind
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Index by the premiere date.
|
|
||||||
/// </summary>
|
|
||||||
PremiereDate = 0,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Index by the production year.
|
|
||||||
/// </summary>
|
|
||||||
ProductionYear = 1,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Index by the community rating.
|
|
||||||
/// </summary>
|
|
||||||
CommunityRating = 2
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
namespace Jellyfin.Data.Enums
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// An enum representing the type of media file.
|
|
||||||
/// </summary>
|
|
||||||
public enum MediaFileKind
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// The main file.
|
|
||||||
/// </summary>
|
|
||||||
Main = 0,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A sidecar file.
|
|
||||||
/// </summary>
|
|
||||||
Sidecar = 1,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// An additional part to the main file.
|
|
||||||
/// </summary>
|
|
||||||
AdditionalPart = 2,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// An alternative format to the main file.
|
|
||||||
/// </summary>
|
|
||||||
AlternativeFormat = 3,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// An additional stream for the main file.
|
|
||||||
/// </summary>
|
|
||||||
AdditionalStream = 4
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,128 +0,0 @@
|
|||||||
namespace Jellyfin.Data.Enums
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// The types of user permissions.
|
|
||||||
/// </summary>
|
|
||||||
public enum PermissionKind
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the user is an administrator.
|
|
||||||
/// </summary>
|
|
||||||
IsAdministrator = 0,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the user is hidden.
|
|
||||||
/// </summary>
|
|
||||||
IsHidden = 1,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the user is disabled.
|
|
||||||
/// </summary>
|
|
||||||
IsDisabled = 2,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the user can control shared devices.
|
|
||||||
/// </summary>
|
|
||||||
EnableSharedDeviceControl = 3,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the user can access the server remotely.
|
|
||||||
/// </summary>
|
|
||||||
EnableRemoteAccess = 4,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the user can manage live tv.
|
|
||||||
/// </summary>
|
|
||||||
EnableLiveTvManagement = 5,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the user can access live tv.
|
|
||||||
/// </summary>
|
|
||||||
EnableLiveTvAccess = 6,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the user can play media.
|
|
||||||
/// </summary>
|
|
||||||
EnableMediaPlayback = 7,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the server should transcode audio for the user if requested.
|
|
||||||
/// </summary>
|
|
||||||
EnableAudioPlaybackTranscoding = 8,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the server should transcode video for the user if requested.
|
|
||||||
/// </summary>
|
|
||||||
EnableVideoPlaybackTranscoding = 9,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the user can delete content.
|
|
||||||
/// </summary>
|
|
||||||
EnableContentDeletion = 10,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the user can download content.
|
|
||||||
/// </summary>
|
|
||||||
EnableContentDownloading = 11,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether to enable sync transcoding for the user.
|
|
||||||
/// </summary>
|
|
||||||
EnableSyncTranscoding = 12,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the user can do media conversion.
|
|
||||||
/// </summary>
|
|
||||||
EnableMediaConversion = 13,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the user has access to all devices.
|
|
||||||
/// </summary>
|
|
||||||
EnableAllDevices = 14,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the user has access to all channels.
|
|
||||||
/// </summary>
|
|
||||||
EnableAllChannels = 15,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the user has access to all folders.
|
|
||||||
/// </summary>
|
|
||||||
EnableAllFolders = 16,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether to enable public sharing for the user.
|
|
||||||
/// </summary>
|
|
||||||
EnablePublicSharing = 17,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the user can remotely control other users.
|
|
||||||
/// </summary>
|
|
||||||
EnableRemoteControlOfOtherUsers = 18,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the user is permitted to do playback remuxing.
|
|
||||||
/// </summary>
|
|
||||||
EnablePlaybackRemuxing = 19,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the server should force transcoding on remote connections for the user.
|
|
||||||
/// </summary>
|
|
||||||
ForceRemoteSourceTranscoding = 20,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the user can create, modify and delete collections.
|
|
||||||
/// </summary>
|
|
||||||
EnableCollectionManagement = 21,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the user can edit subtitles.
|
|
||||||
/// </summary>
|
|
||||||
EnableSubtitleManagement = 22,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Whether the user can edit lyrics.
|
|
||||||
/// </summary>
|
|
||||||
EnableLyricManagement = 23,
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,68 +0,0 @@
|
|||||||
namespace Jellyfin.Data.Enums
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// An enum representing a person's role in a specific media item.
|
|
||||||
/// </summary>
|
|
||||||
public enum PersonRoleType
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Another role, not covered by the other types.
|
|
||||||
/// </summary>
|
|
||||||
Other = 0,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The director of the media.
|
|
||||||
/// </summary>
|
|
||||||
Director = 1,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// An artist.
|
|
||||||
/// </summary>
|
|
||||||
Artist = 2,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The original artist.
|
|
||||||
/// </summary>
|
|
||||||
OriginalArtist = 3,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// An actor.
|
|
||||||
/// </summary>
|
|
||||||
Actor = 4,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A voice actor.
|
|
||||||
/// </summary>
|
|
||||||
VoiceActor = 5,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A producer.
|
|
||||||
/// </summary>
|
|
||||||
Producer = 6,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A remixer.
|
|
||||||
/// </summary>
|
|
||||||
Remixer = 7,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A conductor.
|
|
||||||
/// </summary>
|
|
||||||
Conductor = 8,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A composer.
|
|
||||||
/// </summary>
|
|
||||||
Composer = 9,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// An author.
|
|
||||||
/// </summary>
|
|
||||||
Author = 10,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// An editor.
|
|
||||||
/// </summary>
|
|
||||||
Editor = 11
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,73 +0,0 @@
|
|||||||
namespace Jellyfin.Data.Enums
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// The types of user preferences.
|
|
||||||
/// </summary>
|
|
||||||
public enum PreferenceKind
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// A list of blocked tags.
|
|
||||||
/// </summary>
|
|
||||||
BlockedTags = 0,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A list of blocked channels.
|
|
||||||
/// </summary>
|
|
||||||
BlockedChannels = 1,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A list of blocked media folders.
|
|
||||||
/// </summary>
|
|
||||||
BlockedMediaFolders = 2,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A list of enabled devices.
|
|
||||||
/// </summary>
|
|
||||||
EnabledDevices = 3,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A list of enabled channels.
|
|
||||||
/// </summary>
|
|
||||||
EnabledChannels = 4,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A list of enabled folders.
|
|
||||||
/// </summary>
|
|
||||||
EnabledFolders = 5,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A list of folders to allow content deletion from.
|
|
||||||
/// </summary>
|
|
||||||
EnableContentDeletionFromFolders = 6,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A list of latest items to exclude.
|
|
||||||
/// </summary>
|
|
||||||
LatestItemExcludes = 7,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A list of media to exclude.
|
|
||||||
/// </summary>
|
|
||||||
MyMediaExcludes = 8,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A list of grouped folders.
|
|
||||||
/// </summary>
|
|
||||||
GroupedFolders = 9,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A list of unrated items to block.
|
|
||||||
/// </summary>
|
|
||||||
BlockUnratedItems = 10,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A list of ordered views.
|
|
||||||
/// </summary>
|
|
||||||
OrderedViews = 11,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A list of allowed tags.
|
|
||||||
/// </summary>
|
|
||||||
AllowedTags = 12
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
namespace Jellyfin.Data.Enums
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// An enum representing the axis that should be scrolled.
|
|
||||||
/// </summary>
|
|
||||||
public enum ScrollDirection
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Horizontal scrolling direction.
|
|
||||||
/// </summary>
|
|
||||||
Horizontal = 0,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Vertical scrolling direction.
|
|
||||||
/// </summary>
|
|
||||||
Vertical = 1
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
namespace Jellyfin.Data.Enums
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// An enum representing the sorting order.
|
|
||||||
/// </summary>
|
|
||||||
public enum SortOrder
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Sort in increasing order.
|
|
||||||
/// </summary>
|
|
||||||
Ascending = 0,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sort in decreasing order.
|
|
||||||
/// </summary>
|
|
||||||
Descending = 1
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
namespace Jellyfin.Data.Enums
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// An enum representing a subtitle playback mode.
|
|
||||||
/// </summary>
|
|
||||||
public enum SubtitlePlaybackMode
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// The default subtitle playback mode.
|
|
||||||
/// </summary>
|
|
||||||
Default = 0,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Always show subtitles.
|
|
||||||
/// </summary>
|
|
||||||
Always = 1,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Only show forced subtitles.
|
|
||||||
/// </summary>
|
|
||||||
OnlyForced = 2,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Don't show subtitles.
|
|
||||||
/// </summary>
|
|
||||||
None = 3,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Only show subtitles when the current audio stream is in a different language.
|
|
||||||
/// </summary>
|
|
||||||
Smart = 4
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,23 +0,0 @@
|
|||||||
namespace Jellyfin.Data.Enums
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Enum SyncPlayUserAccessType.
|
|
||||||
/// </summary>
|
|
||||||
public enum SyncPlayUserAccessType
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// User can create groups and join them.
|
|
||||||
/// </summary>
|
|
||||||
CreateAndJoinGroups = 0,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// User can only join already existing groups.
|
|
||||||
/// </summary>
|
|
||||||
JoinGroups = 1,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// SyncPlay is disabled for the user.
|
|
||||||
/// </summary>
|
|
||||||
None = 2
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,113 +0,0 @@
|
|||||||
namespace Jellyfin.Data.Enums
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// An enum representing the type of view for a library or collection.
|
|
||||||
/// </summary>
|
|
||||||
public enum ViewType
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Shows albums.
|
|
||||||
/// </summary>
|
|
||||||
Albums = 0,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shows album artists.
|
|
||||||
/// </summary>
|
|
||||||
AlbumArtists = 1,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shows artists.
|
|
||||||
/// </summary>
|
|
||||||
Artists = 2,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shows channels.
|
|
||||||
/// </summary>
|
|
||||||
Channels = 3,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shows collections.
|
|
||||||
/// </summary>
|
|
||||||
Collections = 4,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shows episodes.
|
|
||||||
/// </summary>
|
|
||||||
Episodes = 5,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shows favorites.
|
|
||||||
/// </summary>
|
|
||||||
Favorites = 6,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shows genres.
|
|
||||||
/// </summary>
|
|
||||||
Genres = 7,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shows guide.
|
|
||||||
/// </summary>
|
|
||||||
Guide = 8,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shows movies.
|
|
||||||
/// </summary>
|
|
||||||
Movies = 9,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shows networks.
|
|
||||||
/// </summary>
|
|
||||||
Networks = 10,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shows playlists.
|
|
||||||
/// </summary>
|
|
||||||
Playlists = 11,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shows programs.
|
|
||||||
/// </summary>
|
|
||||||
Programs = 12,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shows recordings.
|
|
||||||
/// </summary>
|
|
||||||
Recordings = 13,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shows schedule.
|
|
||||||
/// </summary>
|
|
||||||
Schedule = 14,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shows series.
|
|
||||||
/// </summary>
|
|
||||||
Series = 15,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shows shows.
|
|
||||||
/// </summary>
|
|
||||||
Shows = 16,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shows songs.
|
|
||||||
/// </summary>
|
|
||||||
Songs = 17,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shows songs.
|
|
||||||
/// </summary>
|
|
||||||
Suggestions = 18,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shows trailers.
|
|
||||||
/// </summary>
|
|
||||||
Trailers = 19,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shows upcoming.
|
|
||||||
/// </summary>
|
|
||||||
Upcoming = 20
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,4 +1,4 @@
|
|||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
|
||||||
namespace Jellyfin.Data.Events.Users
|
namespace Jellyfin.Data.Events.Users
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
|
||||||
namespace Jellyfin.Data.Events.Users
|
namespace Jellyfin.Data.Events.Users
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
|
||||||
namespace Jellyfin.Data.Events.Users
|
namespace Jellyfin.Data.Events.Users
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
|
||||||
namespace Jellyfin.Data.Events.Users
|
namespace Jellyfin.Data.Events.Users
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
|
||||||
namespace Jellyfin.Data.Events.Users
|
namespace Jellyfin.Data.Events.Users
|
||||||
{
|
{
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
namespace Jellyfin.Data.Interfaces
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// An interface abstracting an entity that has a concurrency token.
|
|
||||||
/// </summary>
|
|
||||||
public interface IHasConcurrencyToken
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the version of this row. Acts as a concurrency token.
|
|
||||||
/// </summary>
|
|
||||||
uint RowVersion { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Called when saving changes to this entity.
|
|
||||||
/// </summary>
|
|
||||||
void OnSavingChanges();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
|
||||||
|
|
||||||
namespace Jellyfin.Data.Interfaces
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// An abstraction representing an entity that has permissions.
|
|
||||||
/// </summary>
|
|
||||||
public interface IHasPermissions
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets a collection containing this entity's permissions.
|
|
||||||
/// </summary>
|
|
||||||
ICollection<Permission> Permissions { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Checks whether this entity has the specified permission kind.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="kind">The kind of permission.</param>
|
|
||||||
/// <returns><c>true</c> if this entity has the specified permission, <c>false</c> otherwise.</returns>
|
|
||||||
bool HasPermission(PermissionKind kind);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the specified permission to the provided value.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="kind">The kind of permission.</param>
|
|
||||||
/// <param name="value">The value to set.</param>
|
|
||||||
void SetPermission(PermissionKind kind, bool value);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using Jellyfin.Data.Entities.Libraries;
|
|
||||||
|
|
||||||
namespace Jellyfin.Data.Interfaces
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// An abstraction representing an entity that has releases.
|
|
||||||
/// </summary>
|
|
||||||
public interface IHasReleases
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets a collection containing this entity's releases.
|
|
||||||
/// </summary>
|
|
||||||
ICollection<Release> Releases { get; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -38,6 +38,10 @@
|
|||||||
<PackageReference Include="SmartAnalyzers.MultithreadingAnalyzer" PrivateAssets="All" />
|
<PackageReference Include="SmartAnalyzers.MultithreadingAnalyzer" PrivateAssets="All" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\src\Jellyfin.Database\Jellyfin.Database.Implementations\Jellyfin.Database.Implementations.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging" />
|
<PackageReference Include="Microsoft.Extensions.Logging" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
220
Jellyfin.Data/UserEntityExtensions.cs
Normal file
220
Jellyfin.Data/UserEntityExtensions.cs
Normal file
@ -0,0 +1,220 @@
|
|||||||
|
using System;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Linq;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Interfaces;
|
||||||
|
|
||||||
|
namespace Jellyfin.Data;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Contains extension methods for manipulation of <see cref="User"/> entities.
|
||||||
|
/// </summary>
|
||||||
|
public static class UserEntityExtensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The values being delimited here are Guids, so commas work as they do not appear in Guids.
|
||||||
|
/// </summary>
|
||||||
|
private const char Delimiter = ',';
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks whether the user has the specified permission.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entity">The entity to update.</param>
|
||||||
|
/// <param name="kind">The permission kind.</param>
|
||||||
|
/// <returns><c>True</c> if the user has the specified permission.</returns>
|
||||||
|
public static bool HasPermission(this IHasPermissions entity, PermissionKind kind)
|
||||||
|
{
|
||||||
|
return entity.Permissions.FirstOrDefault(p => p.Kind == kind)?.Value ?? false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the given permission kind to the provided value.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entity">The entity to update.</param>
|
||||||
|
/// <param name="kind">The permission kind.</param>
|
||||||
|
/// <param name="value">The value to set.</param>
|
||||||
|
public static void SetPermission(this IHasPermissions entity, PermissionKind kind, bool value)
|
||||||
|
{
|
||||||
|
var currentPermission = entity.Permissions.FirstOrDefault(p => p.Kind == kind);
|
||||||
|
if (currentPermission is null)
|
||||||
|
{
|
||||||
|
entity.Permissions.Add(new Permission(kind, value));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
currentPermission.Value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the user's preferences for the given preference kind.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entity">The entity to update.</param>
|
||||||
|
/// <param name="preference">The preference kind.</param>
|
||||||
|
/// <returns>A string array containing the user's preferences.</returns>
|
||||||
|
public static string[] GetPreference(this User entity, PreferenceKind preference)
|
||||||
|
{
|
||||||
|
var val = entity.Preferences.FirstOrDefault(p => p.Kind == preference)?.Value;
|
||||||
|
|
||||||
|
return string.IsNullOrEmpty(val) ? Array.Empty<string>() : val.Split(Delimiter);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the user's preferences for the given preference kind.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entity">The entity to update.</param>
|
||||||
|
/// <param name="preference">The preference kind.</param>
|
||||||
|
/// <typeparam name="T">Type of preference.</typeparam>
|
||||||
|
/// <returns>A {T} array containing the user's preference.</returns>
|
||||||
|
public static T[] GetPreferenceValues<T>(this User entity, PreferenceKind preference)
|
||||||
|
{
|
||||||
|
var val = entity.Preferences.FirstOrDefault(p => p.Kind == preference)?.Value;
|
||||||
|
if (string.IsNullOrEmpty(val))
|
||||||
|
{
|
||||||
|
return Array.Empty<T>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert array of {string} to array of {T}
|
||||||
|
var converter = TypeDescriptor.GetConverter(typeof(T));
|
||||||
|
var stringValues = val.Split(Delimiter);
|
||||||
|
var convertedCount = 0;
|
||||||
|
var parsedValues = new T[stringValues.Length];
|
||||||
|
for (var i = 0; i < stringValues.Length; i++)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var parsedValue = converter.ConvertFromString(stringValues[i].Trim());
|
||||||
|
if (parsedValue is not null)
|
||||||
|
{
|
||||||
|
parsedValues[convertedCount++] = (T)parsedValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (FormatException)
|
||||||
|
{
|
||||||
|
// Unable to convert value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return parsedValues[..convertedCount];
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the specified preference to the given value.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entity">The entity to update.</param>
|
||||||
|
/// <param name="preference">The preference kind.</param>
|
||||||
|
/// <param name="values">The values.</param>
|
||||||
|
public static void SetPreference(this User entity, PreferenceKind preference, string[] values)
|
||||||
|
{
|
||||||
|
var value = string.Join(Delimiter, values);
|
||||||
|
var currentPreference = entity.Preferences.FirstOrDefault(p => p.Kind == preference);
|
||||||
|
if (currentPreference is null)
|
||||||
|
{
|
||||||
|
entity.Preferences.Add(new Preference(preference, value));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
currentPreference.Value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the specified preference to the given value.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entity">The entity to update.</param>
|
||||||
|
/// <param name="preference">The preference kind.</param>
|
||||||
|
/// <param name="values">The values.</param>
|
||||||
|
/// <typeparam name="T">The type of value.</typeparam>
|
||||||
|
public static void SetPreference<T>(this User entity, PreferenceKind preference, T[] values)
|
||||||
|
{
|
||||||
|
var value = string.Join(Delimiter, values);
|
||||||
|
var currentPreference = entity.Preferences.FirstOrDefault(p => p.Kind == preference);
|
||||||
|
if (currentPreference is null)
|
||||||
|
{
|
||||||
|
entity.Preferences.Add(new Preference(preference, value));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
currentPreference.Value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks whether this user is currently allowed to use the server.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entity">The entity to update.</param>
|
||||||
|
/// <returns><c>True</c> if the current time is within an access schedule, or there are no access schedules.</returns>
|
||||||
|
public static bool IsParentalScheduleAllowed(this User entity)
|
||||||
|
{
|
||||||
|
return entity.AccessSchedules.Count == 0
|
||||||
|
|| entity.AccessSchedules.Any(i => IsParentalScheduleAllowed(i, DateTime.UtcNow));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks whether the provided folder is in this user's grouped folders.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entity">The entity to update.</param>
|
||||||
|
/// <param name="id">The Guid of the folder.</param>
|
||||||
|
/// <returns><c>True</c> if the folder is in the user's grouped folders.</returns>
|
||||||
|
public static bool IsFolderGrouped(this User entity, Guid id)
|
||||||
|
{
|
||||||
|
return Array.IndexOf(GetPreferenceValues<Guid>(entity, PreferenceKind.GroupedFolders), id) != -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes the default permissions for a user. Should only be called on user creation.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entity">The entity to update.</param>
|
||||||
|
// TODO: make these user configurable?
|
||||||
|
public static void AddDefaultPermissions(this User entity)
|
||||||
|
{
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.IsAdministrator, false));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.IsDisabled, false));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.IsHidden, true));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.EnableAllChannels, true));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.EnableAllDevices, true));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.EnableAllFolders, true));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.EnableContentDeletion, false));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.EnableContentDownloading, true));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.EnableMediaConversion, true));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.EnableMediaPlayback, true));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.EnablePlaybackRemuxing, true));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.EnablePublicSharing, true));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.EnableRemoteAccess, true));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.EnableSyncTranscoding, true));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.EnableAudioPlaybackTranscoding, true));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.EnableLiveTvAccess, true));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.EnableLiveTvManagement, true));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.EnableSharedDeviceControl, true));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.EnableVideoPlaybackTranscoding, true));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.ForceRemoteSourceTranscoding, false));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.EnableRemoteControlOfOtherUsers, false));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.EnableCollectionManagement, false));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.EnableSubtitleManagement, false));
|
||||||
|
entity.Permissions.Add(new Permission(PermissionKind.EnableLyricManagement, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes the default preferences. Should only be called on user creation.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entity">The entity to update.</param>
|
||||||
|
public static void AddDefaultPreferences(this User entity)
|
||||||
|
{
|
||||||
|
foreach (var val in Enum.GetValues<PreferenceKind>())
|
||||||
|
{
|
||||||
|
entity.Preferences.Add(new Preference(val, string.Empty));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool IsParentalScheduleAllowed(AccessSchedule schedule, DateTime date)
|
||||||
|
{
|
||||||
|
var localTime = date.ToLocalTime();
|
||||||
|
var hour = localTime.TimeOfDay.TotalHours;
|
||||||
|
var currentDayOfWeek = localTime.DayOfWeek;
|
||||||
|
|
||||||
|
return schedule.DayOfWeek.Contains(currentDayOfWeek)
|
||||||
|
&& hour >= schedule.StartHour
|
||||||
|
&& hour <= schedule.EndHour;
|
||||||
|
}
|
||||||
|
}
|
@ -1,9 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Events;
|
using Jellyfin.Data.Events;
|
||||||
using Jellyfin.Data.Queries;
|
using Jellyfin.Data.Queries;
|
||||||
|
using Jellyfin.Database.Implementations;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using MediaBrowser.Model.Activity;
|
using MediaBrowser.Model.Activity;
|
||||||
using MediaBrowser.Model.Querying;
|
using MediaBrowser.Model.Querying;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
@ -0,0 +1,17 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using MediaBrowser.Common.Configuration;
|
||||||
|
|
||||||
|
namespace Jellyfin.Server.Implementations.DatabaseConfiguration;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Factory for constructing a database configuration.
|
||||||
|
/// </summary>
|
||||||
|
public class DatabaseConfigurationFactory : IConfigurationFactory
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public IEnumerable<ConfigurationStore> GetConfigurations()
|
||||||
|
{
|
||||||
|
yield return new DatabaseConfigurationStore();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Jellyfin.Database.Implementations.DbConfiguration;
|
||||||
|
using MediaBrowser.Common.Configuration;
|
||||||
|
|
||||||
|
namespace Jellyfin.Server.Implementations.DatabaseConfiguration;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A configuration that stores database related settings.
|
||||||
|
/// </summary>
|
||||||
|
public class DatabaseConfigurationStore : ConfigurationStore
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The name of the configuration in the storage.
|
||||||
|
/// </summary>
|
||||||
|
public const string StoreKey = "database";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="DatabaseConfigurationStore"/> class.
|
||||||
|
/// </summary>
|
||||||
|
public DatabaseConfigurationStore()
|
||||||
|
{
|
||||||
|
ConfigurationType = typeof(DatabaseConfigurationOptions);
|
||||||
|
Key = StoreKey;
|
||||||
|
}
|
||||||
|
}
|
@ -3,12 +3,14 @@ using System.Collections.Concurrent;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Jellyfin.Data;
|
||||||
using Jellyfin.Data.Dtos;
|
using Jellyfin.Data.Dtos;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Entities.Security;
|
|
||||||
using Jellyfin.Data.Enums;
|
|
||||||
using Jellyfin.Data.Events;
|
using Jellyfin.Data.Events;
|
||||||
using Jellyfin.Data.Queries;
|
using Jellyfin.Data.Queries;
|
||||||
|
using Jellyfin.Database.Implementations;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
|
using Jellyfin.Database.Implementations.Entities.Security;
|
||||||
|
using Jellyfin.Database.Implementations.Enums;
|
||||||
using Jellyfin.Extensions;
|
using Jellyfin.Extensions;
|
||||||
using MediaBrowser.Common.Extensions;
|
using MediaBrowser.Common.Extensions;
|
||||||
using MediaBrowser.Controller.Devices;
|
using MediaBrowser.Controller.Devices;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Entities.Audio;
|
using MediaBrowser.Controller.Entities.Audio;
|
||||||
using MediaBrowser.Controller.Events;
|
using MediaBrowser.Controller.Events;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Entities.Audio;
|
using MediaBrowser.Controller.Entities.Audio;
|
||||||
using MediaBrowser.Controller.Events;
|
using MediaBrowser.Controller.Events;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using MediaBrowser.Controller.Events;
|
using MediaBrowser.Controller.Events;
|
||||||
using MediaBrowser.Controller.Events.Authentication;
|
using MediaBrowser.Controller.Events.Authentication;
|
||||||
using MediaBrowser.Model.Activity;
|
using MediaBrowser.Model.Activity;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using MediaBrowser.Controller.Events;
|
using MediaBrowser.Controller.Events;
|
||||||
using MediaBrowser.Controller.Events.Authentication;
|
using MediaBrowser.Controller.Events.Authentication;
|
||||||
using MediaBrowser.Model.Activity;
|
using MediaBrowser.Model.Activity;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Data.Entities;
|
|
||||||
using Jellyfin.Data.Enums;
|
using Jellyfin.Data.Enums;
|
||||||
|
using Jellyfin.Database.Implementations.Entities;
|
||||||
using MediaBrowser.Controller.Events;
|
using MediaBrowser.Controller.Events;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Model.Activity;
|
using MediaBrowser.Model.Activity;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user