commit
029bb80910
@ -1,59 +0,0 @@
|
||||
VERSION := $(shell sed -ne '/^Version:/s/.* *//p' \
|
||||
deployment/fedora-package-x64/pkg-src/jellyfin.spec)
|
||||
|
||||
deployment/fedora-package-x64/pkg-src/jellyfin-web-$(VERSION).tar.gz:
|
||||
curl -f -L -o deployment/fedora-package-x64/pkg-src/jellyfin-web-$(VERSION).tar.gz \
|
||||
https://github.com/jellyfin/jellyfin-web/archive/v$(VERSION).tar.gz \
|
||||
|| curl -f -L -o deployment/fedora-package-x64/pkg-src/jellyfin-web-$(VERSION).tar.gz \
|
||||
https://github.com/jellyfin/jellyfin-web/archive/master.tar.gz \
|
||||
|
||||
srpm: deployment/fedora-package-x64/pkg-src/jellyfin-web-$(VERSION).tar.gz
|
||||
cd deployment/fedora-package-x64; \
|
||||
SOURCE_DIR=../.. \
|
||||
WORKDIR="$${PWD}"; \
|
||||
package_temporary_dir="$${WORKDIR}/pkg-dist-tmp"; \
|
||||
pkg_src_dir="$${WORKDIR}/pkg-src"; \
|
||||
GNU_TAR=1; \
|
||||
tar \
|
||||
--transform "s,^\.,jellyfin-$(VERSION)," \
|
||||
--exclude='.git*' \
|
||||
--exclude='**/.git' \
|
||||
--exclude='**/.hg' \
|
||||
--exclude='**/.vs' \
|
||||
--exclude='**/.vscode' \
|
||||
--exclude='deployment' \
|
||||
--exclude='**/bin' \
|
||||
--exclude='**/obj' \
|
||||
--exclude='**/.nuget' \
|
||||
--exclude='*.deb' \
|
||||
--exclude='*.rpm' \
|
||||
-czf "pkg-src/jellyfin-$(VERSION).tar.gz" \
|
||||
-C $${SOURCE_DIR} ./ || GNU_TAR=0; \
|
||||
if [ $${GNU_TAR} -eq 0 ]; then \
|
||||
package_temporary_dir="$$(mktemp -d)"; \
|
||||
mkdir -p "$${package_temporary_dir}/jellyfin"; \
|
||||
tar \
|
||||
--exclude='.git*' \
|
||||
--exclude='**/.git' \
|
||||
--exclude='**/.hg' \
|
||||
--exclude='**/.vs' \
|
||||
--exclude='**/.vscode' \
|
||||
--exclude='deployment' \
|
||||
--exclude='**/bin' \
|
||||
--exclude='**/obj' \
|
||||
--exclude='**/.nuget' \
|
||||
--exclude='*.deb' \
|
||||
--exclude='*.rpm' \
|
||||
-czf "$${package_temporary_dir}/jellyfin/jellyfin-$(VERSION).tar.gz" \
|
||||
-C $${SOURCE_DIR} ./; \
|
||||
mkdir -p "$${package_temporary_dir}/jellyfin-$(VERSION)"; \
|
||||
tar -xzf "$${package_temporary_dir}/jellyfin/jellyfin-$(VERSION).tar.gz" \
|
||||
-C "$${package_temporary_dir}/jellyfin-$(VERSION); \
|
||||
rm -f "$${package_temporary_dir}/jellyfin/jellyfin-$(VERSION).tar.gz"; \
|
||||
tar -czf "$${SOURCE_DIR}/SOURCES/pkg-src/jellyfin-$(VERSION).tar.gz" \
|
||||
-C "$${package_temporary_dir}" "jellyfin-$(VERSION); \
|
||||
rm -rf $${package_temporary_dir}; \
|
||||
fi; \
|
||||
rpmbuild -bs pkg-src/jellyfin.spec \
|
||||
--define "_sourcedir $$PWD/pkg-src/" \
|
||||
--define "_srcrpmdir $(outdir)"
|
@ -0,0 +1 @@
|
||||
../fedora/Makefile
|
@ -0,0 +1,3 @@
|
||||
# Joshua must review all changes to deployment and build.sh
|
||||
deployment/* @joshuaboniface
|
||||
build.sh @joshuaboniface
|
@ -1,39 +0,0 @@
|
||||
#pragma warning disable CS1591
|
||||
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Emby.Server.Implementations.Net;
|
||||
using MediaBrowser.Model.Services;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
|
||||
namespace Emby.Server.Implementations.HttpServer
|
||||
{
|
||||
public interface IHttpListener : IDisposable
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the error handler.
|
||||
/// </summary>
|
||||
/// <value>The error handler.</value>
|
||||
Func<Exception, IRequest, bool, bool, Task> ErrorHandler { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the request handler.
|
||||
/// </summary>
|
||||
/// <value>The request handler.</value>
|
||||
Func<IHttpRequest, string, string, string, CancellationToken, Task> RequestHandler { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the web socket handler.
|
||||
/// </summary>
|
||||
/// <value>The web socket handler.</value>
|
||||
Action<WebSocketConnectEventArgs> WebSocketConnected { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Stops this instance.
|
||||
/// </summary>
|
||||
Task Stop();
|
||||
|
||||
Task ProcessWebSocketRequest(HttpContext ctx);
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
{
|
||||
"MusicVideos": "Музичні відео",
|
||||
"Music": "Музика",
|
||||
"Movies": "Фільми",
|
||||
"MessageApplicationUpdatedTo": "Jellyfin Server був оновлений до версії {0}",
|
||||
"MessageApplicationUpdated": "Jellyfin Server був оновлений",
|
||||
"Latest": "Останні",
|
||||
"LabelIpAddressValue": "IP-адреси: {0}",
|
||||
"ItemRemovedWithName": "{0} видалено з бібліотеки",
|
||||
"ItemAddedWithName": "{0} додано до бібліотеки",
|
||||
"HeaderNextUp": "Наступний",
|
||||
"HeaderLiveTV": "Ефірне ТБ",
|
||||
"HeaderFavoriteSongs": "Улюблені пісні",
|
||||
"HeaderFavoriteShows": "Улюблені шоу",
|
||||
"HeaderFavoriteEpisodes": "Улюблені серії",
|
||||
"HeaderFavoriteArtists": "Улюблені виконавці",
|
||||
"HeaderFavoriteAlbums": "Улюблені альбоми",
|
||||
"HeaderContinueWatching": "Продовжити перегляд",
|
||||
"HeaderCameraUploads": "Завантажено з камери",
|
||||
"HeaderAlbumArtists": "Виконавці альбомів",
|
||||
"Genres": "Жанри",
|
||||
"Folders": "Директорії",
|
||||
"Favorites": "Улюблені",
|
||||
"DeviceOnlineWithName": "{0} під'єднано",
|
||||
"DeviceOfflineWithName": "{0} від'єднано",
|
||||
"Collections": "Колекції",
|
||||
"ChapterNameValue": "Глава {0}",
|
||||
"Channels": "Канали",
|
||||
"CameraImageUploadedFrom": "Нова фотографія завантажена з {0}",
|
||||
"Books": "Книги",
|
||||
"AuthenticationSucceededWithUserName": "{0} успішно авторизовані",
|
||||
"Artists": "Виконавці",
|
||||
"Application": "Додаток",
|
||||
"AppDeviceValues": "Додаток: {0}, Пристрій: {1}",
|
||||
"Albums": "Альбоми"
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using WebSocketManager = Emby.Server.Implementations.WebSockets.WebSocketManager;
|
||||
|
||||
namespace Emby.Server.Implementations.Middleware
|
||||
{
|
||||
public class WebSocketMiddleware
|
||||
{
|
||||
private readonly RequestDelegate _next;
|
||||
private readonly ILogger<WebSocketMiddleware> _logger;
|
||||
private readonly WebSocketManager _webSocketManager;
|
||||
|
||||
public WebSocketMiddleware(RequestDelegate next, ILogger<WebSocketMiddleware> logger, WebSocketManager webSocketManager)
|
||||
{
|
||||
_next = next;
|
||||
_logger = logger;
|
||||
_webSocketManager = webSocketManager;
|
||||
}
|
||||
|
||||
public async Task Invoke(HttpContext httpContext)
|
||||
{
|
||||
_logger.LogInformation("Handling request: " + httpContext.Request.Path);
|
||||
|
||||
if (httpContext.WebSockets.IsWebSocketRequest)
|
||||
{
|
||||
var webSocketContext = await httpContext.WebSockets.AcceptWebSocketAsync(null).ConfigureAwait(false);
|
||||
if (webSocketContext != null)
|
||||
{
|
||||
await _webSocketManager.OnWebSocketConnected(webSocketContext).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
await _next.Invoke(httpContext).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,48 +0,0 @@
|
||||
using System;
|
||||
using System.Net.WebSockets;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Emby.Server.Implementations.Net
|
||||
{
|
||||
/// <summary>
|
||||
/// Interface IWebSocket
|
||||
/// </summary>
|
||||
public interface IWebSocket : IDisposable
|
||||
{
|
||||
/// <summary>
|
||||
/// Occurs when [closed].
|
||||
/// </summary>
|
||||
event EventHandler<EventArgs> Closed;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the state.
|
||||
/// </summary>
|
||||
/// <value>The state.</value>
|
||||
WebSocketState State { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the receive action.
|
||||
/// </summary>
|
||||
/// <value>The receive action.</value>
|
||||
Action<byte[]> OnReceiveBytes { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Sends the async.
|
||||
/// </summary>
|
||||
/// <param name="bytes">The bytes.</param>
|
||||
/// <param name="endOfMessage">if set to <c>true</c> [end of message].</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <returns>Task.</returns>
|
||||
Task SendAsync(byte[] bytes, bool endOfMessage, CancellationToken cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// Sends the asynchronous.
|
||||
/// </summary>
|
||||
/// <param name="text">The text.</param>
|
||||
/// <param name="endOfMessage">if set to <c>true</c> [end of message].</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <returns>Task.</returns>
|
||||
Task SendAsync(string text, bool endOfMessage, CancellationToken cancellationToken);
|
||||
}
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
using System;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
|
||||
namespace Emby.Server.Implementations.Net
|
||||
{
|
||||
public class WebSocketConnectEventArgs : EventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the URL.
|
||||
/// </summary>
|
||||
/// <value>The URL.</value>
|
||||
public string Url { get; set; }
|
||||
/// <summary>
|
||||
/// Gets or sets the query string.
|
||||
/// </summary>
|
||||
/// <value>The query string.</value>
|
||||
public IQueryCollection QueryString { get; set; }
|
||||
/// <summary>
|
||||
/// Gets or sets the web socket.
|
||||
/// </summary>
|
||||
/// <value>The web socket.</value>
|
||||
public IWebSocket WebSocket { get; set; }
|
||||
/// <summary>
|
||||
/// Gets or sets the endpoint.
|
||||
/// </summary>
|
||||
/// <value>The endpoint.</value>
|
||||
public string Endpoint { get; set; }
|
||||
}
|
||||
}
|
@ -1,191 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Controller.Session;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
using MediaBrowser.Model.Session;
|
||||
|
||||
namespace Emby.Server.Implementations.Session
|
||||
{
|
||||
public class HttpSessionController : ISessionController
|
||||
{
|
||||
private readonly IHttpClient _httpClient;
|
||||
private readonly IJsonSerializer _json;
|
||||
private readonly ISessionManager _sessionManager;
|
||||
|
||||
public SessionInfo Session { get; private set; }
|
||||
|
||||
private readonly string _postUrl;
|
||||
|
||||
public HttpSessionController(IHttpClient httpClient,
|
||||
IJsonSerializer json,
|
||||
SessionInfo session,
|
||||
string postUrl, ISessionManager sessionManager)
|
||||
{
|
||||
_httpClient = httpClient;
|
||||
_json = json;
|
||||
Session = session;
|
||||
_postUrl = postUrl;
|
||||
_sessionManager = sessionManager;
|
||||
}
|
||||
|
||||
private string PostUrl => string.Format("http://{0}{1}", Session.RemoteEndPoint, _postUrl);
|
||||
|
||||
public bool IsSessionActive => (DateTime.UtcNow - Session.LastActivityDate).TotalMinutes <= 5;
|
||||
|
||||
public bool SupportsMediaControl => true;
|
||||
|
||||
private Task SendMessage(string name, string messageId, CancellationToken cancellationToken)
|
||||
{
|
||||
return SendMessage(name, messageId, new Dictionary<string, string>(), cancellationToken);
|
||||
}
|
||||
|
||||
private Task SendMessage(string name, string messageId, Dictionary<string, string> args, CancellationToken cancellationToken)
|
||||
{
|
||||
args["messageId"] = messageId;
|
||||
var url = PostUrl + "/" + name + ToQueryString(args);
|
||||
|
||||
return SendRequest(new HttpRequestOptions
|
||||
{
|
||||
Url = url,
|
||||
CancellationToken = cancellationToken,
|
||||
BufferContent = false
|
||||
});
|
||||
}
|
||||
|
||||
private Task SendPlayCommand(PlayRequest command, string messageId, CancellationToken cancellationToken)
|
||||
{
|
||||
var dict = new Dictionary<string, string>();
|
||||
|
||||
dict["ItemIds"] = string.Join(",", command.ItemIds.Select(i => i.ToString("N", CultureInfo.InvariantCulture)).ToArray());
|
||||
|
||||
if (command.StartPositionTicks.HasValue)
|
||||
{
|
||||
dict["StartPositionTicks"] = command.StartPositionTicks.Value.ToString(CultureInfo.InvariantCulture);
|
||||
}
|
||||
if (command.AudioStreamIndex.HasValue)
|
||||
{
|
||||
dict["AudioStreamIndex"] = command.AudioStreamIndex.Value.ToString(CultureInfo.InvariantCulture);
|
||||
}
|
||||
if (command.SubtitleStreamIndex.HasValue)
|
||||
{
|
||||
dict["SubtitleStreamIndex"] = command.SubtitleStreamIndex.Value.ToString(CultureInfo.InvariantCulture);
|
||||
}
|
||||
if (command.StartIndex.HasValue)
|
||||
{
|
||||
dict["StartIndex"] = command.StartIndex.Value.ToString(CultureInfo.InvariantCulture);
|
||||
}
|
||||
if (!string.IsNullOrEmpty(command.MediaSourceId))
|
||||
{
|
||||
dict["MediaSourceId"] = command.MediaSourceId;
|
||||
}
|
||||
|
||||
return SendMessage(command.PlayCommand.ToString(), messageId, dict, cancellationToken);
|
||||
}
|
||||
|
||||
private Task SendPlaystateCommand(PlaystateRequest command, string messageId, CancellationToken cancellationToken)
|
||||
{
|
||||
var args = new Dictionary<string, string>();
|
||||
|
||||
if (command.Command == PlaystateCommand.Seek)
|
||||
{
|
||||
if (!command.SeekPositionTicks.HasValue)
|
||||
{
|
||||
throw new ArgumentException("SeekPositionTicks cannot be null");
|
||||
}
|
||||
|
||||
args["SeekPositionTicks"] = command.SeekPositionTicks.Value.ToString(CultureInfo.InvariantCulture);
|
||||
}
|
||||
|
||||
return SendMessage(command.Command.ToString(), messageId, args, cancellationToken);
|
||||
}
|
||||
|
||||
private string[] _supportedMessages = Array.Empty<string>();
|
||||
public Task SendMessage<T>(string name, string messageId, T data, ISessionController[] allControllers, CancellationToken cancellationToken)
|
||||
{
|
||||
if (!IsSessionActive)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
if (string.Equals(name, "Play", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return SendPlayCommand(data as PlayRequest, messageId, cancellationToken);
|
||||
}
|
||||
if (string.Equals(name, "PlayState", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return SendPlaystateCommand(data as PlaystateRequest, messageId, cancellationToken);
|
||||
}
|
||||
if (string.Equals(name, "GeneralCommand", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var command = data as GeneralCommand;
|
||||
return SendMessage(command.Name, messageId, command.Arguments, cancellationToken);
|
||||
}
|
||||
|
||||
if (!_supportedMessages.Contains(name, StringComparer.OrdinalIgnoreCase))
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
var url = PostUrl + "/" + name;
|
||||
|
||||
url += "?messageId=" + messageId;
|
||||
|
||||
var options = new HttpRequestOptions
|
||||
{
|
||||
Url = url,
|
||||
CancellationToken = cancellationToken,
|
||||
BufferContent = false
|
||||
};
|
||||
|
||||
if (data != null)
|
||||
{
|
||||
if (typeof(T) == typeof(string))
|
||||
{
|
||||
var str = data as string;
|
||||
if (!string.IsNullOrEmpty(str))
|
||||
{
|
||||
options.RequestContent = str;
|
||||
options.RequestContentType = "application/json";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
options.RequestContent = _json.SerializeToString(data);
|
||||
options.RequestContentType = "application/json";
|
||||
}
|
||||
}
|
||||
|
||||
return SendRequest(options);
|
||||
}
|
||||
|
||||
private async Task SendRequest(HttpRequestOptions options)
|
||||
{
|
||||
using (var response = await _httpClient.Post(options).ConfigureAwait(false))
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private static string ToQueryString(Dictionary<string, string> nvc)
|
||||
{
|
||||
var array = (from item in nvc
|
||||
select string.Format("{0}={1}", WebUtility.UrlEncode(item.Key), WebUtility.UrlEncode(item.Value)))
|
||||
.ToArray();
|
||||
|
||||
var args = string.Join("&", array);
|
||||
|
||||
if (string.IsNullOrEmpty(args))
|
||||
{
|
||||
return args;
|
||||
}
|
||||
|
||||
return "?" + args;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,105 +0,0 @@
|
||||
using System;
|
||||
using System.Net.WebSockets;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Emby.Server.Implementations.Net;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace Emby.Server.Implementations.SocketSharp
|
||||
{
|
||||
public class SharpWebSocket : IWebSocket
|
||||
{
|
||||
/// <summary>
|
||||
/// The logger
|
||||
/// </summary>
|
||||
private readonly ILogger _logger;
|
||||
|
||||
public event EventHandler<EventArgs> Closed;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the web socket.
|
||||
/// </summary>
|
||||
/// <value>The web socket.</value>
|
||||
private readonly WebSocket _webSocket;
|
||||
|
||||
private readonly CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource();
|
||||
private bool _disposed;
|
||||
|
||||
public SharpWebSocket(WebSocket socket, ILogger logger)
|
||||
{
|
||||
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
|
||||
_webSocket = socket ?? throw new ArgumentNullException(nameof(socket));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the state.
|
||||
/// </summary>
|
||||
/// <value>The state.</value>
|
||||
public WebSocketState State => _webSocket.State;
|
||||
|
||||
/// <summary>
|
||||
/// Sends the async.
|
||||
/// </summary>
|
||||
/// <param name="bytes">The bytes.</param>
|
||||
/// <param name="endOfMessage">if set to <c>true</c> [end of message].</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <returns>Task.</returns>
|
||||
public Task SendAsync(byte[] bytes, bool endOfMessage, CancellationToken cancellationToken)
|
||||
{
|
||||
return _webSocket.SendAsync(new ArraySegment<byte>(bytes), WebSocketMessageType.Binary, endOfMessage, cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sends the asynchronous.
|
||||
/// </summary>
|
||||
/// <param name="text">The text.</param>
|
||||
/// <param name="endOfMessage">if set to <c>true</c> [end of message].</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <returns>Task.</returns>
|
||||
public Task SendAsync(string text, bool endOfMessage, CancellationToken cancellationToken)
|
||||
{
|
||||
return _webSocket.SendAsync(new ArraySegment<byte>(Encoding.UTF8.GetBytes(text)), WebSocketMessageType.Text, endOfMessage, cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
|
||||
/// </summary>
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Releases unmanaged and - optionally - managed resources.
|
||||
/// </summary>
|
||||
/// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
|
||||
protected virtual void Dispose(bool dispose)
|
||||
{
|
||||
if (_disposed)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (dispose)
|
||||
{
|
||||
_cancellationTokenSource.Cancel();
|
||||
if (_webSocket.State == WebSocketState.Open)
|
||||
{
|
||||
_webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closed by client",
|
||||
CancellationToken.None);
|
||||
}
|
||||
Closed?.Invoke(this, EventArgs.Empty);
|
||||
}
|
||||
|
||||
_disposed = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the receive action.
|
||||
/// </summary>
|
||||
/// <value>The receive action.</value>
|
||||
public Action<byte[]> OnReceiveBytes { get; set; }
|
||||
}
|
||||
}
|
@ -1,135 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net.WebSockets;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Emby.Server.Implementations.HttpServer;
|
||||
using Emby.Server.Implementations.Net;
|
||||
using MediaBrowser.Model.Services;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Http.Extensions;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Net.Http.Headers;
|
||||
|
||||
namespace Emby.Server.Implementations.SocketSharp
|
||||
{
|
||||
public class WebSocketSharpListener : IHttpListener
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
|
||||
private CancellationTokenSource _disposeCancellationTokenSource = new CancellationTokenSource();
|
||||
private CancellationToken _disposeCancellationToken;
|
||||
|
||||
public WebSocketSharpListener(ILogger<WebSocketSharpListener> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
_disposeCancellationToken = _disposeCancellationTokenSource.Token;
|
||||
}
|
||||
|
||||
public Func<Exception, IRequest, bool, bool, Task> ErrorHandler { get; set; }
|
||||
|
||||
public Func<IHttpRequest, string, string, string, CancellationToken, Task> RequestHandler { get; set; }
|
||||
|
||||
public Action<WebSocketConnectEventArgs> WebSocketConnected { get; set; }
|
||||
|
||||
private static void LogRequest(ILogger logger, HttpRequest request)
|
||||
{
|
||||
var url = request.GetDisplayUrl();
|
||||
|
||||
logger.LogInformation("WS {Url}. UserAgent: {UserAgent}", url, request.Headers[HeaderNames.UserAgent].ToString());
|
||||
}
|
||||
|
||||
public async Task ProcessWebSocketRequest(HttpContext ctx)
|
||||
{
|
||||
try
|
||||
{
|
||||
LogRequest(_logger, ctx.Request);
|
||||
var endpoint = ctx.Connection.RemoteIpAddress.ToString();
|
||||
var url = ctx.Request.GetDisplayUrl();
|
||||
|
||||
var webSocketContext = await ctx.WebSockets.AcceptWebSocketAsync(null).ConfigureAwait(false);
|
||||
var socket = new SharpWebSocket(webSocketContext, _logger);
|
||||
|
||||
WebSocketConnected(new WebSocketConnectEventArgs
|
||||
{
|
||||
Url = url,
|
||||
QueryString = ctx.Request.Query,
|
||||
WebSocket = socket,
|
||||
Endpoint = endpoint
|
||||
});
|
||||
|
||||
WebSocketReceiveResult result;
|
||||
var message = new List<byte>();
|
||||
|
||||
do
|
||||
{
|
||||
var buffer = WebSocket.CreateServerBuffer(4096);
|
||||
result = await webSocketContext.ReceiveAsync(buffer, _disposeCancellationToken);
|
||||
message.AddRange(buffer.Array.Take(result.Count));
|
||||
|
||||
if (result.EndOfMessage)
|
||||
{
|
||||
socket.OnReceiveBytes(message.ToArray());
|
||||
message.Clear();
|
||||
}
|
||||
} while (socket.State == WebSocketState.Open && result.MessageType != WebSocketMessageType.Close);
|
||||
|
||||
|
||||
if (webSocketContext.State == WebSocketState.Open)
|
||||
{
|
||||
await webSocketContext.CloseAsync(
|
||||
result.CloseStatus ?? WebSocketCloseStatus.NormalClosure,
|
||||
result.CloseStatusDescription,
|
||||
_disposeCancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
socket.Dispose();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "AcceptWebSocketAsync error");
|
||||
if (!ctx.Response.HasStarted)
|
||||
{
|
||||
ctx.Response.StatusCode = 500;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Task Stop()
|
||||
{
|
||||
_disposeCancellationTokenSource.Cancel();
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Releases the unmanaged resources and disposes of the managed resources used.
|
||||
/// </summary>
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
private bool _disposed;
|
||||
|
||||
/// <summary>
|
||||
/// Releases the unmanaged resources and disposes of the managed resources used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">Whether or not the managed resources should be disposed.</param>
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (_disposed)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (disposing)
|
||||
{
|
||||
Stop().GetAwaiter().GetResult();
|
||||
}
|
||||
|
||||
_disposed = true;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Model.Net;
|
||||
|
||||
namespace Emby.Server.Implementations.WebSockets
|
||||
{
|
||||
public interface IWebSocketHandler
|
||||
{
|
||||
Task ProcessMessage(WebSocketMessage<object> message, TaskCompletionSource<bool> taskCompletionSource);
|
||||
}
|
||||
}
|
@ -1,102 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net.WebSockets;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Model.Net;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using UtfUnknown;
|
||||
|
||||
namespace Emby.Server.Implementations.WebSockets
|
||||
{
|
||||
public class WebSocketManager
|
||||
{
|
||||
private readonly IWebSocketHandler[] _webSocketHandlers;
|
||||
private readonly IJsonSerializer _jsonSerializer;
|
||||
private readonly ILogger<WebSocketManager> _logger;
|
||||
private const int BufferSize = 4096;
|
||||
|
||||
public WebSocketManager(IWebSocketHandler[] webSocketHandlers, IJsonSerializer jsonSerializer, ILogger<WebSocketManager> logger)
|
||||
{
|
||||
_webSocketHandlers = webSocketHandlers;
|
||||
_jsonSerializer = jsonSerializer;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public async Task OnWebSocketConnected(WebSocket webSocket)
|
||||
{
|
||||
var taskCompletionSource = new TaskCompletionSource<bool>();
|
||||
var cancellationToken = new CancellationTokenSource().Token;
|
||||
WebSocketReceiveResult result;
|
||||
var message = new List<byte>();
|
||||
|
||||
// Keep listening for incoming messages, otherwise the socket closes automatically
|
||||
do
|
||||
{
|
||||
var buffer = WebSocket.CreateServerBuffer(BufferSize);
|
||||
result = await webSocket.ReceiveAsync(buffer, cancellationToken).ConfigureAwait(false);
|
||||
message.AddRange(buffer.Array.Take(result.Count));
|
||||
|
||||
if (result.EndOfMessage)
|
||||
{
|
||||
await ProcessMessage(message.ToArray(), taskCompletionSource).ConfigureAwait(false);
|
||||
message.Clear();
|
||||
}
|
||||
} while (!taskCompletionSource.Task.IsCompleted &&
|
||||
webSocket.State == WebSocketState.Open &&
|
||||
result.MessageType != WebSocketMessageType.Close);
|
||||
|
||||
if (webSocket.State == WebSocketState.Open)
|
||||
{
|
||||
await webSocket.CloseAsync(
|
||||
result.CloseStatus ?? WebSocketCloseStatus.NormalClosure,
|
||||
result.CloseStatusDescription,
|
||||
cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ProcessMessage(byte[] messageBytes, TaskCompletionSource<bool> taskCompletionSource)
|
||||
{
|
||||
var charset = CharsetDetector.DetectFromBytes(messageBytes).Detected?.EncodingName;
|
||||
var message = string.Equals(charset, "utf-8", StringComparison.OrdinalIgnoreCase)
|
||||
? Encoding.UTF8.GetString(messageBytes, 0, messageBytes.Length)
|
||||
: Encoding.ASCII.GetString(messageBytes, 0, messageBytes.Length);
|
||||
|
||||
// All messages are expected to be valid JSON objects
|
||||
if (!message.StartsWith("{", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
_logger.LogDebug("Received web socket message that is not a json structure: {Message}", message);
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var info = _jsonSerializer.DeserializeFromString<WebSocketMessage<object>>(message);
|
||||
|
||||
_logger.LogDebug("Websocket message received: {0}", info.MessageType);
|
||||
|
||||
var tasks = _webSocketHandlers.Select(handler => Task.Run(() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
handler.ProcessMessage(info, taskCompletionSource).ConfigureAwait(false);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "{HandlerType} failed processing WebSocket message {MessageType}",
|
||||
handler.GetType().Name, info.MessageType ?? string.Empty);
|
||||
}
|
||||
}));
|
||||
|
||||
await Task.WhenAll(tasks);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Error processing web socket message");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,195 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class Artwork
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected Artwork()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static Artwork CreateArtworkUnsafe()
|
||||
{
|
||||
return new Artwork();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="path"></param>
|
||||
/// <param name="kind"></param>
|
||||
/// <param name="_metadata0"></param>
|
||||
/// <param name="_personrole1"></param>
|
||||
public Artwork(string path, Enums.ArtKind kind, Metadata _metadata0, PersonRole _personrole1)
|
||||
{
|
||||
if (string.IsNullOrEmpty(path)) throw new ArgumentNullException(nameof(path));
|
||||
this.Path = path;
|
||||
|
||||
this.Kind = kind;
|
||||
|
||||
if (_metadata0 == null) throw new ArgumentNullException(nameof(_metadata0));
|
||||
_metadata0.Artwork.Add(this);
|
||||
|
||||
if (_personrole1 == null) throw new ArgumentNullException(nameof(_personrole1));
|
||||
_personrole1.Artwork = this;
|
||||
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="path"></param>
|
||||
/// <param name="kind"></param>
|
||||
/// <param name="_metadata0"></param>
|
||||
/// <param name="_personrole1"></param>
|
||||
public static Artwork Create(string path, Enums.ArtKind kind, Metadata _metadata0, PersonRole _personrole1)
|
||||
{
|
||||
return new Artwork(path, kind, _metadata0, _personrole1);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Id
|
||||
/// </summary>
|
||||
internal int _Id;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetId(int oldValue, ref int newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetId(ref int result);
|
||||
|
||||
/// <summary>
|
||||
/// Identity, Indexed, Required
|
||||
/// </summary>
|
||||
[Key]
|
||||
[Required]
|
||||
public int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
int value = _Id;
|
||||
GetId(ref value);
|
||||
return (_Id = value);
|
||||
}
|
||||
protected set
|
||||
{
|
||||
int oldValue = _Id;
|
||||
SetId(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Id = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Path
|
||||
/// </summary>
|
||||
protected string _Path;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Path to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetPath(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Path to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetPath(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Required, Max length = 65535
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(65535)]
|
||||
[StringLength(65535)]
|
||||
public string Path
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Path;
|
||||
GetPath(ref value);
|
||||
return (_Path = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Path;
|
||||
SetPath(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Path = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Kind
|
||||
/// </summary>
|
||||
internal Enums.ArtKind _Kind;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Kind to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetKind(Enums.ArtKind oldValue, ref Enums.ArtKind newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Kind to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetKind(ref Enums.ArtKind result);
|
||||
|
||||
/// <summary>
|
||||
/// Indexed, Required
|
||||
/// </summary>
|
||||
[Required]
|
||||
public Enums.ArtKind Kind
|
||||
{
|
||||
get
|
||||
{
|
||||
Enums.ArtKind value = _Kind;
|
||||
GetKind(ref value);
|
||||
return (_Kind = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
Enums.ArtKind oldValue = _Kind;
|
||||
SetKind(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Kind = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Required, ConcurrenyToken
|
||||
/// </summary>
|
||||
[ConcurrencyCheck]
|
||||
[Required]
|
||||
public uint RowVersion { get; set; }
|
||||
|
||||
public void OnSavingChanges()
|
||||
{
|
||||
RowVersion++;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,69 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class Book : LibraryItem
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected Book()
|
||||
{
|
||||
BookMetadata = new HashSet<BookMetadata>();
|
||||
Releases = new HashSet<Release>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static Book CreateBookUnsafe()
|
||||
{
|
||||
return new Book();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
|
||||
public Book(Guid urlid, DateTime dateadded)
|
||||
{
|
||||
this.UrlId = urlid;
|
||||
|
||||
this.BookMetadata = new HashSet<BookMetadata>();
|
||||
this.Releases = new HashSet<Release>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
|
||||
public static Book Create(Guid urlid, DateTime dateadded)
|
||||
{
|
||||
return new Book(urlid, dateadded);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
|
||||
[ForeignKey("BookMetadata_BookMetadata_Id")]
|
||||
public virtual ICollection<BookMetadata> BookMetadata { get; protected set; }
|
||||
|
||||
[ForeignKey("Release_Releases_Id")]
|
||||
public virtual ICollection<Release> Releases { get; protected set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,107 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class BookMetadata : Metadata
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected BookMetadata()
|
||||
{
|
||||
Publishers = new HashSet<Company>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static BookMetadata CreateBookMetadataUnsafe()
|
||||
{
|
||||
return new BookMetadata();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="title">The title or name of the object</param>
|
||||
/// <param name="language">ISO-639-3 3-character language codes</param>
|
||||
/// <param name="_book0"></param>
|
||||
public BookMetadata(string title, string language, DateTime dateadded, DateTime datemodified, Book _book0)
|
||||
{
|
||||
if (string.IsNullOrEmpty(title)) throw new ArgumentNullException(nameof(title));
|
||||
this.Title = title;
|
||||
|
||||
if (string.IsNullOrEmpty(language)) throw new ArgumentNullException(nameof(language));
|
||||
this.Language = language;
|
||||
|
||||
if (_book0 == null) throw new ArgumentNullException(nameof(_book0));
|
||||
_book0.BookMetadata.Add(this);
|
||||
|
||||
this.Publishers = new HashSet<Company>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="title">The title or name of the object</param>
|
||||
/// <param name="language">ISO-639-3 3-character language codes</param>
|
||||
/// <param name="_book0"></param>
|
||||
public static BookMetadata Create(string title, string language, DateTime dateadded, DateTime datemodified, Book _book0)
|
||||
{
|
||||
return new BookMetadata(title, language, dateadded, datemodified, _book0);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for ISBN
|
||||
/// </summary>
|
||||
protected long? _ISBN;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of ISBN to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetISBN(long? oldValue, ref long? newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of ISBN to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetISBN(ref long? result);
|
||||
|
||||
public long? ISBN
|
||||
{
|
||||
get
|
||||
{
|
||||
long? value = _ISBN;
|
||||
GetISBN(ref value);
|
||||
return (_ISBN = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
long? oldValue = _ISBN;
|
||||
SetISBN(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_ISBN = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
|
||||
[ForeignKey("Company_Publishers_Id")]
|
||||
public virtual ICollection<Company> Publishers { get; protected set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,263 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class Chapter
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected Chapter()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static Chapter CreateChapterUnsafe()
|
||||
{
|
||||
return new Chapter();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="language">ISO-639-3 3-character language codes</param>
|
||||
/// <param name="timestart"></param>
|
||||
/// <param name="_release0"></param>
|
||||
public Chapter(string language, long timestart, Release _release0)
|
||||
{
|
||||
if (string.IsNullOrEmpty(language)) throw new ArgumentNullException(nameof(language));
|
||||
this.Language = language;
|
||||
|
||||
this.TimeStart = timestart;
|
||||
|
||||
if (_release0 == null) throw new ArgumentNullException(nameof(_release0));
|
||||
_release0.Chapters.Add(this);
|
||||
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="language">ISO-639-3 3-character language codes</param>
|
||||
/// <param name="timestart"></param>
|
||||
/// <param name="_release0"></param>
|
||||
public static Chapter Create(string language, long timestart, Release _release0)
|
||||
{
|
||||
return new Chapter(language, timestart, _release0);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Id
|
||||
/// </summary>
|
||||
internal int _Id;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetId(int oldValue, ref int newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetId(ref int result);
|
||||
|
||||
/// <summary>
|
||||
/// Identity, Indexed, Required
|
||||
/// </summary>
|
||||
[Key]
|
||||
[Required]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
public int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
int value = _Id;
|
||||
GetId(ref value);
|
||||
return (_Id = value);
|
||||
}
|
||||
protected set
|
||||
{
|
||||
int oldValue = _Id;
|
||||
SetId(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Id = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Name
|
||||
/// </summary>
|
||||
protected string _Name;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Name to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetName(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Name to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetName(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Max length = 1024
|
||||
/// </summary>
|
||||
[MaxLength(1024)]
|
||||
[StringLength(1024)]
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Name;
|
||||
GetName(ref value);
|
||||
return (_Name = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Name;
|
||||
SetName(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Name = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Language
|
||||
/// </summary>
|
||||
protected string _Language;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Language to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetLanguage(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Language to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetLanguage(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Required, Min length = 3, Max length = 3
|
||||
/// ISO-639-3 3-character language codes
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MinLength(3)]
|
||||
[MaxLength(3)]
|
||||
[StringLength(3)]
|
||||
public string Language
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Language;
|
||||
GetLanguage(ref value);
|
||||
return (_Language = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Language;
|
||||
SetLanguage(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Language = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for TimeStart
|
||||
/// </summary>
|
||||
protected long _TimeStart;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of TimeStart to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetTimeStart(long oldValue, ref long newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of TimeStart to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetTimeStart(ref long result);
|
||||
|
||||
/// <summary>
|
||||
/// Required
|
||||
/// </summary>
|
||||
[Required]
|
||||
public long TimeStart
|
||||
{
|
||||
get
|
||||
{
|
||||
long value = _TimeStart;
|
||||
GetTimeStart(ref value);
|
||||
return (_TimeStart = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
long oldValue = _TimeStart;
|
||||
SetTimeStart(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_TimeStart = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for TimeEnd
|
||||
/// </summary>
|
||||
protected long? _TimeEnd;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of TimeEnd to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetTimeEnd(long? oldValue, ref long? newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of TimeEnd to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetTimeEnd(ref long? result);
|
||||
|
||||
public long? TimeEnd
|
||||
{
|
||||
get
|
||||
{
|
||||
long? value = _TimeEnd;
|
||||
GetTimeEnd(ref value);
|
||||
return (_TimeEnd = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
long? oldValue = _TimeEnd;
|
||||
SetTimeEnd(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_TimeEnd = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Required, ConcurrenyToken
|
||||
/// </summary>
|
||||
[ConcurrencyCheck]
|
||||
[Required]
|
||||
public uint RowVersion { get; set; }
|
||||
|
||||
public void OnSavingChanges()
|
||||
{
|
||||
RowVersion++;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,120 @@
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class Collection
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor
|
||||
/// </summary>
|
||||
public Collection()
|
||||
{
|
||||
CollectionItem = new LinkedList<CollectionItem>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Id
|
||||
/// </summary>
|
||||
internal int _Id;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetId(int oldValue, ref int newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetId(ref int result);
|
||||
|
||||
/// <summary>
|
||||
/// Identity, Indexed, Required
|
||||
/// </summary>
|
||||
[Key]
|
||||
[Required]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
public int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
int value = _Id;
|
||||
GetId(ref value);
|
||||
return (_Id = value);
|
||||
}
|
||||
protected set
|
||||
{
|
||||
int oldValue = _Id;
|
||||
SetId(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Id = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Name
|
||||
/// </summary>
|
||||
protected string _Name;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Name to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetName(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Name to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetName(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Max length = 1024
|
||||
/// </summary>
|
||||
[MaxLength(1024)]
|
||||
[StringLength(1024)]
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Name;
|
||||
GetName(ref value);
|
||||
return (_Name = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Name;
|
||||
SetName(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Name = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Required, ConcurrenyToken
|
||||
/// </summary>
|
||||
[ConcurrencyCheck]
|
||||
[Required]
|
||||
public uint RowVersion { get; set; }
|
||||
|
||||
public void OnSavingChanges()
|
||||
{
|
||||
RowVersion++;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
[ForeignKey("CollectionItem_CollectionItem_Id")]
|
||||
public virtual ICollection<CollectionItem> CollectionItem { get; protected set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,143 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class CollectionItem
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected CollectionItem()
|
||||
{
|
||||
// NOTE: This class has one-to-one associations with CollectionItem.
|
||||
// One-to-one associations are not validated in constructors since this causes a scenario where each one must be constructed before the other.
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static CollectionItem CreateCollectionItemUnsafe()
|
||||
{
|
||||
return new CollectionItem();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="_collection0"></param>
|
||||
/// <param name="_collectionitem1"></param>
|
||||
/// <param name="_collectionitem2"></param>
|
||||
public CollectionItem(Collection _collection0, CollectionItem _collectionitem1, CollectionItem _collectionitem2)
|
||||
{
|
||||
// NOTE: This class has one-to-one associations with CollectionItem.
|
||||
// One-to-one associations are not validated in constructors since this causes a scenario where each one must be constructed before the other.
|
||||
|
||||
if (_collection0 == null) throw new ArgumentNullException(nameof(_collection0));
|
||||
_collection0.CollectionItem.Add(this);
|
||||
|
||||
if (_collectionitem1 == null) throw new ArgumentNullException(nameof(_collectionitem1));
|
||||
_collectionitem1.Next = this;
|
||||
|
||||
if (_collectionitem2 == null) throw new ArgumentNullException(nameof(_collectionitem2));
|
||||
_collectionitem2.Previous = this;
|
||||
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="_collection0"></param>
|
||||
/// <param name="_collectionitem1"></param>
|
||||
/// <param name="_collectionitem2"></param>
|
||||
public static CollectionItem Create(Collection _collection0, CollectionItem _collectionitem1, CollectionItem _collectionitem2)
|
||||
{
|
||||
return new CollectionItem(_collection0, _collectionitem1, _collectionitem2);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Id
|
||||
/// </summary>
|
||||
internal int _Id;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetId(int oldValue, ref int newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetId(ref int result);
|
||||
|
||||
/// <summary>
|
||||
/// Identity, Indexed, Required
|
||||
/// </summary>
|
||||
[Key]
|
||||
[Required]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
public int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
int value = _Id;
|
||||
GetId(ref value);
|
||||
return (_Id = value);
|
||||
}
|
||||
protected set
|
||||
{
|
||||
int oldValue = _Id;
|
||||
SetId(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Id = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Required, ConcurrenyToken
|
||||
/// </summary>
|
||||
[ConcurrencyCheck]
|
||||
[Required]
|
||||
public uint RowVersion { get; set; }
|
||||
|
||||
public void OnSavingChanges()
|
||||
{
|
||||
RowVersion++;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Required
|
||||
/// </summary>
|
||||
[ForeignKey("LibraryItem_Id")]
|
||||
public virtual LibraryItem LibraryItem { get; set; }
|
||||
|
||||
/// <remarks>
|
||||
/// TODO check if this properly updated dependant and has the proper principal relationship
|
||||
/// </remarks>
|
||||
[ForeignKey("CollectionItem_Next_Id")]
|
||||
public virtual CollectionItem Next { get; set; }
|
||||
|
||||
/// <remarks>
|
||||
/// TODO check if this properly updated dependant and has the proper principal relationship
|
||||
/// </remarks>
|
||||
[ForeignKey("CollectionItem_Previous_Id")]
|
||||
public virtual CollectionItem Previous { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,137 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class Company
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected Company()
|
||||
{
|
||||
CompanyMetadata = new HashSet<CompanyMetadata>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static Company CreateCompanyUnsafe()
|
||||
{
|
||||
return new Company();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="_moviemetadata0"></param>
|
||||
/// <param name="_seriesmetadata1"></param>
|
||||
/// <param name="_musicalbummetadata2"></param>
|
||||
/// <param name="_bookmetadata3"></param>
|
||||
/// <param name="_company4"></param>
|
||||
public Company(MovieMetadata _moviemetadata0, SeriesMetadata _seriesmetadata1, MusicAlbumMetadata _musicalbummetadata2, BookMetadata _bookmetadata3, Company _company4)
|
||||
{
|
||||
if (_moviemetadata0 == null) throw new ArgumentNullException(nameof(_moviemetadata0));
|
||||
_moviemetadata0.Studios.Add(this);
|
||||
|
||||
if (_seriesmetadata1 == null) throw new ArgumentNullException(nameof(_seriesmetadata1));
|
||||
_seriesmetadata1.Networks.Add(this);
|
||||
|
||||
if (_musicalbummetadata2 == null) throw new ArgumentNullException(nameof(_musicalbummetadata2));
|
||||
_musicalbummetadata2.Labels.Add(this);
|
||||
|
||||
if (_bookmetadata3 == null) throw new ArgumentNullException(nameof(_bookmetadata3));
|
||||
_bookmetadata3.Publishers.Add(this);
|
||||
|
||||
if (_company4 == null) throw new ArgumentNullException(nameof(_company4));
|
||||
_company4.Parent = this;
|
||||
|
||||
this.CompanyMetadata = new HashSet<CompanyMetadata>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="_moviemetadata0"></param>
|
||||
/// <param name="_seriesmetadata1"></param>
|
||||
/// <param name="_musicalbummetadata2"></param>
|
||||
/// <param name="_bookmetadata3"></param>
|
||||
/// <param name="_company4"></param>
|
||||
public static Company Create(MovieMetadata _moviemetadata0, SeriesMetadata _seriesmetadata1, MusicAlbumMetadata _musicalbummetadata2, BookMetadata _bookmetadata3, Company _company4)
|
||||
{
|
||||
return new Company(_moviemetadata0, _seriesmetadata1, _musicalbummetadata2, _bookmetadata3, _company4);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Id
|
||||
/// </summary>
|
||||
internal int _Id;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetId(int oldValue, ref int newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetId(ref int result);
|
||||
|
||||
/// <summary>
|
||||
/// Identity, Indexed, Required
|
||||
/// </summary>
|
||||
[Key]
|
||||
[Required]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
public int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
int value = _Id;
|
||||
GetId(ref value);
|
||||
return (_Id = value);
|
||||
}
|
||||
protected set
|
||||
{
|
||||
int oldValue = _Id;
|
||||
SetId(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Id = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Required, ConcurrenyToken
|
||||
/// </summary>
|
||||
[ConcurrencyCheck]
|
||||
[Required]
|
||||
public uint RowVersion { get; set; }
|
||||
|
||||
public void OnSavingChanges()
|
||||
{
|
||||
RowVersion++;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
[ForeignKey("CompanyMetadata_CompanyMetadata_Id")]
|
||||
public virtual ICollection<CompanyMetadata> CompanyMetadata { get; protected set; }
|
||||
[ForeignKey("Company_Parent_Id")]
|
||||
public virtual Company Parent { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,216 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class CompanyMetadata : Metadata
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected CompanyMetadata()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static CompanyMetadata CreateCompanyMetadataUnsafe()
|
||||
{
|
||||
return new CompanyMetadata();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="title">The title or name of the object</param>
|
||||
/// <param name="language">ISO-639-3 3-character language codes</param>
|
||||
/// <param name="_company0"></param>
|
||||
public CompanyMetadata(string title, string language, DateTime dateadded, DateTime datemodified, Company _company0)
|
||||
{
|
||||
if (string.IsNullOrEmpty(title)) throw new ArgumentNullException(nameof(title));
|
||||
this.Title = title;
|
||||
|
||||
if (string.IsNullOrEmpty(language)) throw new ArgumentNullException(nameof(language));
|
||||
this.Language = language;
|
||||
|
||||
if (_company0 == null) throw new ArgumentNullException(nameof(_company0));
|
||||
_company0.CompanyMetadata.Add(this);
|
||||
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="title">The title or name of the object</param>
|
||||
/// <param name="language">ISO-639-3 3-character language codes</param>
|
||||
/// <param name="_company0"></param>
|
||||
public static CompanyMetadata Create(string title, string language, DateTime dateadded, DateTime datemodified, Company _company0)
|
||||
{
|
||||
return new CompanyMetadata(title, language, dateadded, datemodified, _company0);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Description
|
||||
/// </summary>
|
||||
protected string _Description;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Description to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetDescription(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Description to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetDescription(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Max length = 65535
|
||||
/// </summary>
|
||||
[MaxLength(65535)]
|
||||
[StringLength(65535)]
|
||||
public string Description
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Description;
|
||||
GetDescription(ref value);
|
||||
return (_Description = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Description;
|
||||
SetDescription(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Description = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Headquarters
|
||||
/// </summary>
|
||||
protected string _Headquarters;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Headquarters to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetHeadquarters(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Headquarters to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetHeadquarters(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Max length = 255
|
||||
/// </summary>
|
||||
[MaxLength(255)]
|
||||
[StringLength(255)]
|
||||
public string Headquarters
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Headquarters;
|
||||
GetHeadquarters(ref value);
|
||||
return (_Headquarters = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Headquarters;
|
||||
SetHeadquarters(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Headquarters = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Country
|
||||
/// </summary>
|
||||
protected string _Country;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Country to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetCountry(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Country to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetCountry(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Max length = 2
|
||||
/// </summary>
|
||||
[MaxLength(2)]
|
||||
[StringLength(2)]
|
||||
public string Country
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Country;
|
||||
GetCountry(ref value);
|
||||
return (_Country = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Country;
|
||||
SetCountry(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Country = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Homepage
|
||||
/// </summary>
|
||||
protected string _Homepage;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Homepage to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetHomepage(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Homepage to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetHomepage(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Max length = 1024
|
||||
/// </summary>
|
||||
[MaxLength(1024)]
|
||||
[StringLength(1024)]
|
||||
public string Homepage
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Homepage;
|
||||
GetHomepage(ref value);
|
||||
return (_Homepage = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Homepage;
|
||||
SetHomepage(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Homepage = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,68 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class CustomItem : LibraryItem
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected CustomItem()
|
||||
{
|
||||
CustomItemMetadata = new HashSet<CustomItemMetadata>();
|
||||
Releases = new HashSet<Release>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static CustomItem CreateCustomItemUnsafe()
|
||||
{
|
||||
return new CustomItem();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
|
||||
public CustomItem(Guid urlid, DateTime dateadded)
|
||||
{
|
||||
this.UrlId = urlid;
|
||||
|
||||
this.CustomItemMetadata = new HashSet<CustomItemMetadata>();
|
||||
this.Releases = new HashSet<Release>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
|
||||
public static CustomItem Create(Guid urlid, DateTime dateadded)
|
||||
{
|
||||
return new CustomItem(urlid, dateadded);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
[ForeignKey("CustomItemMetadata_CustomItemMetadata_Id")]
|
||||
public virtual ICollection<CustomItemMetadata> CustomItemMetadata { get; protected set; }
|
||||
|
||||
[ForeignKey("Release_Releases_Id")]
|
||||
public virtual ICollection<Release> Releases { get; protected set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,67 @@
|
||||
using System;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class CustomItemMetadata : Metadata
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected CustomItemMetadata()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static CustomItemMetadata CreateCustomItemMetadataUnsafe()
|
||||
{
|
||||
return new CustomItemMetadata();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="title">The title or name of the object</param>
|
||||
/// <param name="language">ISO-639-3 3-character language codes</param>
|
||||
/// <param name="_customitem0"></param>
|
||||
public CustomItemMetadata(string title, string language, DateTime dateadded, DateTime datemodified, CustomItem _customitem0)
|
||||
{
|
||||
if (string.IsNullOrEmpty(title)) throw new ArgumentNullException(nameof(title));
|
||||
this.Title = title;
|
||||
|
||||
if (string.IsNullOrEmpty(language)) throw new ArgumentNullException(nameof(language));
|
||||
this.Language = language;
|
||||
|
||||
if (_customitem0 == null) throw new ArgumentNullException(nameof(_customitem0));
|
||||
_customitem0.CustomItemMetadata.Add(this);
|
||||
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="title">The title or name of the object</param>
|
||||
/// <param name="language">ISO-639-3 3-character language codes</param>
|
||||
/// <param name="_customitem0"></param>
|
||||
public static CustomItemMetadata Create(string title, string language, DateTime dateadded, DateTime datemodified, CustomItem _customitem0)
|
||||
{
|
||||
return new CustomItemMetadata(title, language, dateadded, datemodified, _customitem0);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,110 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class Episode : LibraryItem
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected Episode()
|
||||
{
|
||||
// NOTE: This class has one-to-one associations with LibraryRoot, LibraryItem and CollectionItem.
|
||||
// One-to-one associations are not validated in constructors since this causes a scenario where each one must be constructed before the other.
|
||||
|
||||
Releases = new HashSet<Release>();
|
||||
EpisodeMetadata = new HashSet<EpisodeMetadata>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static Episode CreateEpisodeUnsafe()
|
||||
{
|
||||
return new Episode();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
|
||||
/// <param name="_season0"></param>
|
||||
public Episode(Guid urlid, DateTime dateadded, Season _season0)
|
||||
{
|
||||
// NOTE: This class has one-to-one associations with LibraryRoot, LibraryItem and CollectionItem.
|
||||
// One-to-one associations are not validated in constructors since this causes a scenario where each one must be constructed before the other.
|
||||
|
||||
this.UrlId = urlid;
|
||||
|
||||
if (_season0 == null) throw new ArgumentNullException(nameof(_season0));
|
||||
_season0.Episodes.Add(this);
|
||||
|
||||
this.Releases = new HashSet<Release>();
|
||||
this.EpisodeMetadata = new HashSet<EpisodeMetadata>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
|
||||
/// <param name="_season0"></param>
|
||||
public static Episode Create(Guid urlid, DateTime dateadded, Season _season0)
|
||||
{
|
||||
return new Episode(urlid, dateadded, _season0);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for EpisodeNumber
|
||||
/// </summary>
|
||||
protected int? _EpisodeNumber;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of EpisodeNumber to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetEpisodeNumber(int? oldValue, ref int? newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of EpisodeNumber to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetEpisodeNumber(ref int? result);
|
||||
|
||||
public int? EpisodeNumber
|
||||
{
|
||||
get
|
||||
{
|
||||
int? value = _EpisodeNumber;
|
||||
GetEpisodeNumber(ref value);
|
||||
return (_EpisodeNumber = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
int? oldValue = _EpisodeNumber;
|
||||
SetEpisodeNumber(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_EpisodeNumber = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
[ForeignKey("Release_Releases_Id")]
|
||||
public virtual ICollection<Release> Releases { get; protected set; }
|
||||
[ForeignKey("EpisodeMetadata_EpisodeMetadata_Id")]
|
||||
public virtual ICollection<EpisodeMetadata> EpisodeMetadata { get; protected set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,179 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class EpisodeMetadata : Metadata
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected EpisodeMetadata()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static EpisodeMetadata CreateEpisodeMetadataUnsafe()
|
||||
{
|
||||
return new EpisodeMetadata();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="title">The title or name of the object</param>
|
||||
/// <param name="language">ISO-639-3 3-character language codes</param>
|
||||
/// <param name="_episode0"></param>
|
||||
public EpisodeMetadata(string title, string language, DateTime dateadded, DateTime datemodified, Episode _episode0)
|
||||
{
|
||||
if (string.IsNullOrEmpty(title)) throw new ArgumentNullException(nameof(title));
|
||||
this.Title = title;
|
||||
|
||||
if (string.IsNullOrEmpty(language)) throw new ArgumentNullException(nameof(language));
|
||||
this.Language = language;
|
||||
|
||||
if (_episode0 == null) throw new ArgumentNullException(nameof(_episode0));
|
||||
_episode0.EpisodeMetadata.Add(this);
|
||||
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="title">The title or name of the object</param>
|
||||
/// <param name="language">ISO-639-3 3-character language codes</param>
|
||||
/// <param name="_episode0"></param>
|
||||
public static EpisodeMetadata Create(string title, string language, DateTime dateadded, DateTime datemodified, Episode _episode0)
|
||||
{
|
||||
return new EpisodeMetadata(title, language, dateadded, datemodified, _episode0);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Outline
|
||||
/// </summary>
|
||||
protected string _Outline;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Outline to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetOutline(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Outline to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetOutline(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Max length = 1024
|
||||
/// </summary>
|
||||
[MaxLength(1024)]
|
||||
[StringLength(1024)]
|
||||
public string Outline
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Outline;
|
||||
GetOutline(ref value);
|
||||
return (_Outline = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Outline;
|
||||
SetOutline(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Outline = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Plot
|
||||
/// </summary>
|
||||
protected string _Plot;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Plot to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetPlot(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Plot to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetPlot(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Max length = 65535
|
||||
/// </summary>
|
||||
[MaxLength(65535)]
|
||||
[StringLength(65535)]
|
||||
public string Plot
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Plot;
|
||||
GetPlot(ref value);
|
||||
return (_Plot = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Plot;
|
||||
SetPlot(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Plot = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Tagline
|
||||
/// </summary>
|
||||
protected string _Tagline;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Tagline to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetTagline(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Tagline to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetTagline(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Max length = 1024
|
||||
/// </summary>
|
||||
[MaxLength(1024)]
|
||||
[StringLength(1024)]
|
||||
public string Tagline
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Tagline;
|
||||
GetTagline(ref value);
|
||||
return (_Tagline = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Tagline;
|
||||
SetTagline(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Tagline = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,152 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class Genre
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected Genre()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static Genre CreateGenreUnsafe()
|
||||
{
|
||||
return new Genre();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
/// <param name="_metadata0"></param>
|
||||
public Genre(string name, Metadata _metadata0)
|
||||
{
|
||||
if (string.IsNullOrEmpty(name)) throw new ArgumentNullException(nameof(name));
|
||||
this.Name = name;
|
||||
|
||||
if (_metadata0 == null) throw new ArgumentNullException(nameof(_metadata0));
|
||||
_metadata0.Genres.Add(this);
|
||||
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
/// <param name="_metadata0"></param>
|
||||
public static Genre Create(string name, Metadata _metadata0)
|
||||
{
|
||||
return new Genre(name, _metadata0);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Id
|
||||
/// </summary>
|
||||
internal int _Id;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetId(int oldValue, ref int newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetId(ref int result);
|
||||
|
||||
/// <summary>
|
||||
/// Identity, Indexed, Required
|
||||
/// </summary>
|
||||
[Key]
|
||||
[Required]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
public int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
int value = _Id;
|
||||
GetId(ref value);
|
||||
return (_Id = value);
|
||||
}
|
||||
protected set
|
||||
{
|
||||
int oldValue = _Id;
|
||||
SetId(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Id = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Name
|
||||
/// </summary>
|
||||
internal string _Name;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Name to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetName(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Name to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetName(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Indexed, Required, Max length = 255
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(255)]
|
||||
[StringLength(255)]
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Name;
|
||||
GetName(ref value);
|
||||
return (_Name = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Name;
|
||||
SetName(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Name = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Required, ConcurrenyToken
|
||||
/// </summary>
|
||||
[ConcurrencyCheck]
|
||||
[Required]
|
||||
public uint RowVersion { get; set; }
|
||||
|
||||
public void OnSavingChanges()
|
||||
{
|
||||
RowVersion++;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,109 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class Group
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected Group()
|
||||
{
|
||||
GroupPermissions = new HashSet<Permission>();
|
||||
ProviderMappings = new HashSet<ProviderMapping>();
|
||||
Preferences = new HashSet<Preference>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static Group CreateGroupUnsafe()
|
||||
{
|
||||
return new Group();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
/// <param name="_user0"></param>
|
||||
public Group(string name, User _user0)
|
||||
{
|
||||
if (string.IsNullOrEmpty(name)) throw new ArgumentNullException(nameof(name));
|
||||
this.Name = name;
|
||||
|
||||
if (_user0 == null) throw new ArgumentNullException(nameof(_user0));
|
||||
_user0.Groups.Add(this);
|
||||
|
||||
this.GroupPermissions = new HashSet<Permission>();
|
||||
this.ProviderMappings = new HashSet<ProviderMapping>();
|
||||
this.Preferences = new HashSet<Preference>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
/// <param name="_user0"></param>
|
||||
public static Group Create(string name, User _user0)
|
||||
{
|
||||
return new Group(name, _user0);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Identity, Indexed, Required
|
||||
/// </summary>
|
||||
[Key]
|
||||
[Required]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
public int Id { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// Required, Max length = 255
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(255)]
|
||||
[StringLength(255)]
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Required, ConcurrenyToken
|
||||
/// </summary>
|
||||
[ConcurrencyCheck]
|
||||
[Required]
|
||||
public uint RowVersion { get; set; }
|
||||
|
||||
public void OnSavingChanges()
|
||||
{
|
||||
RowVersion++;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
|
||||
[ForeignKey("Permission_GroupPermissions_Id")]
|
||||
public virtual ICollection<Permission> GroupPermissions { get; protected set; }
|
||||
|
||||
[ForeignKey("ProviderMapping_ProviderMappings_Id")]
|
||||
public virtual ICollection<ProviderMapping> ProviderMappings { get; protected set; }
|
||||
|
||||
[ForeignKey("Preference_Preferences_Id")]
|
||||
public virtual ICollection<Preference> Preferences { get; protected set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,147 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class Library
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected Library()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static Library CreateLibraryUnsafe()
|
||||
{
|
||||
return new Library();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
public Library(string name)
|
||||
{
|
||||
if (string.IsNullOrEmpty(name)) throw new ArgumentNullException(nameof(name));
|
||||
this.Name = name;
|
||||
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
public static Library Create(string name)
|
||||
{
|
||||
return new Library(name);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Id
|
||||
/// </summary>
|
||||
internal int _Id;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetId(int oldValue, ref int newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetId(ref int result);
|
||||
|
||||
/// <summary>
|
||||
/// Identity, Indexed, Required
|
||||
/// </summary>
|
||||
[Key]
|
||||
[Required]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
public int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
int value = _Id;
|
||||
GetId(ref value);
|
||||
return (_Id = value);
|
||||
}
|
||||
protected set
|
||||
{
|
||||
int oldValue = _Id;
|
||||
SetId(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Id = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Name
|
||||
/// </summary>
|
||||
protected string _Name;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Name to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetName(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Name to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetName(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Required, Max length = 1024
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(1024)]
|
||||
[StringLength(1024)]
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Name;
|
||||
GetName(ref value);
|
||||
return (_Name = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Name;
|
||||
SetName(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Name = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Required, ConcurrenyToken
|
||||
/// </summary>
|
||||
[ConcurrencyCheck]
|
||||
[Required]
|
||||
public uint RowVersion { get; set; }
|
||||
|
||||
public void OnSavingChanges()
|
||||
{
|
||||
RowVersion++;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,170 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public abstract partial class LibraryItem
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to being abstract.
|
||||
/// </summary>
|
||||
protected LibraryItem()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
|
||||
protected LibraryItem(Guid urlid, DateTime dateadded)
|
||||
{
|
||||
this.UrlId = urlid;
|
||||
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Id
|
||||
/// </summary>
|
||||
internal int _Id;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetId(int oldValue, ref int newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetId(ref int result);
|
||||
|
||||
/// <summary>
|
||||
/// Identity, Indexed, Required
|
||||
/// </summary>
|
||||
[Key]
|
||||
[Required]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
public int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
int value = _Id;
|
||||
GetId(ref value);
|
||||
return (_Id = value);
|
||||
}
|
||||
protected set
|
||||
{
|
||||
int oldValue = _Id;
|
||||
SetId(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Id = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for UrlId
|
||||
/// </summary>
|
||||
internal Guid _UrlId;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of UrlId to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetUrlId(Guid oldValue, ref Guid newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of UrlId to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetUrlId(ref Guid result);
|
||||
|
||||
/// <summary>
|
||||
/// Indexed, Required
|
||||
/// This is whats gets displayed in the Urls and API requests. This could also be a string.
|
||||
/// </summary>
|
||||
[Required]
|
||||
public Guid UrlId
|
||||
{
|
||||
get
|
||||
{
|
||||
Guid value = _UrlId;
|
||||
GetUrlId(ref value);
|
||||
return (_UrlId = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
Guid oldValue = _UrlId;
|
||||
SetUrlId(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_UrlId = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for DateAdded
|
||||
/// </summary>
|
||||
protected DateTime _DateAdded;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of DateAdded to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetDateAdded(DateTime oldValue, ref DateTime newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of DateAdded to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetDateAdded(ref DateTime result);
|
||||
|
||||
/// <summary>
|
||||
/// Required
|
||||
/// </summary>
|
||||
[Required]
|
||||
public DateTime DateAdded
|
||||
{
|
||||
get
|
||||
{
|
||||
DateTime value = _DateAdded;
|
||||
GetDateAdded(ref value);
|
||||
return (_DateAdded = value);
|
||||
}
|
||||
internal set
|
||||
{
|
||||
DateTime oldValue = _DateAdded;
|
||||
SetDateAdded(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_DateAdded = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Required, ConcurrenyToken
|
||||
/// </summary>
|
||||
[ConcurrencyCheck]
|
||||
[Required]
|
||||
public uint RowVersion { get; set; }
|
||||
|
||||
public void OnSavingChanges()
|
||||
{
|
||||
RowVersion++;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Required
|
||||
/// </summary>
|
||||
[ForeignKey("LibraryRoot_Id")]
|
||||
public virtual LibraryRoot LibraryRoot { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,192 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class LibraryRoot
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected LibraryRoot()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static LibraryRoot CreateLibraryRootUnsafe()
|
||||
{
|
||||
return new LibraryRoot();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="path">Absolute Path</param>
|
||||
public LibraryRoot(string path)
|
||||
{
|
||||
if (string.IsNullOrEmpty(path)) throw new ArgumentNullException(nameof(path));
|
||||
this.Path = path;
|
||||
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="path">Absolute Path</param>
|
||||
public static LibraryRoot Create(string path)
|
||||
{
|
||||
return new LibraryRoot(path);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Id
|
||||
/// </summary>
|
||||
internal int _Id;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetId(int oldValue, ref int newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetId(ref int result);
|
||||
|
||||
/// <summary>
|
||||
/// Identity, Indexed, Required
|
||||
/// </summary>
|
||||
[Key]
|
||||
[Required]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
public int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
int value = _Id;
|
||||
GetId(ref value);
|
||||
return (_Id = value);
|
||||
}
|
||||
protected set
|
||||
{
|
||||
int oldValue = _Id;
|
||||
SetId(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Id = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Path
|
||||
/// </summary>
|
||||
protected string _Path;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Path to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetPath(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Path to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetPath(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Required, Max length = 65535
|
||||
/// Absolute Path
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(65535)]
|
||||
[StringLength(65535)]
|
||||
public string Path
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Path;
|
||||
GetPath(ref value);
|
||||
return (_Path = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Path;
|
||||
SetPath(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Path = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for NetworkPath
|
||||
/// </summary>
|
||||
protected string _NetworkPath;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of NetworkPath to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetNetworkPath(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of NetworkPath to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetNetworkPath(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Max length = 65535
|
||||
/// Absolute network path, for example for transcoding sattelites.
|
||||
/// </summary>
|
||||
[MaxLength(65535)]
|
||||
[StringLength(65535)]
|
||||
public string NetworkPath
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _NetworkPath;
|
||||
GetNetworkPath(ref value);
|
||||
return (_NetworkPath = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _NetworkPath;
|
||||
SetNetworkPath(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_NetworkPath = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Required, ConcurrenyToken
|
||||
/// </summary>
|
||||
[ConcurrencyCheck]
|
||||
[Required]
|
||||
public uint RowVersion { get; set; }
|
||||
|
||||
public void OnSavingChanges()
|
||||
{
|
||||
RowVersion++;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Required
|
||||
/// </summary>
|
||||
[ForeignKey("Library_Id")]
|
||||
public virtual Library Library { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,200 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class MediaFile
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected MediaFile()
|
||||
{
|
||||
MediaFileStreams = new HashSet<MediaFileStream>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static MediaFile CreateMediaFileUnsafe()
|
||||
{
|
||||
return new MediaFile();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="path">Relative to the LibraryRoot</param>
|
||||
/// <param name="kind"></param>
|
||||
/// <param name="_release0"></param>
|
||||
public MediaFile(string path, Enums.MediaFileKind kind, Release _release0)
|
||||
{
|
||||
if (string.IsNullOrEmpty(path)) throw new ArgumentNullException(nameof(path));
|
||||
this.Path = path;
|
||||
|
||||
this.Kind = kind;
|
||||
|
||||
if (_release0 == null) throw new ArgumentNullException(nameof(_release0));
|
||||
_release0.MediaFiles.Add(this);
|
||||
|
||||
this.MediaFileStreams = new HashSet<MediaFileStream>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="path">Relative to the LibraryRoot</param>
|
||||
/// <param name="kind"></param>
|
||||
/// <param name="_release0"></param>
|
||||
public static MediaFile Create(string path, Enums.MediaFileKind kind, Release _release0)
|
||||
{
|
||||
return new MediaFile(path, kind, _release0);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Id
|
||||
/// </summary>
|
||||
internal int _Id;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetId(int oldValue, ref int newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetId(ref int result);
|
||||
|
||||
/// <summary>
|
||||
/// Identity, Indexed, Required
|
||||
/// </summary>
|
||||
[Key]
|
||||
[Required]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
public int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
int value = _Id;
|
||||
GetId(ref value);
|
||||
return (_Id = value);
|
||||
}
|
||||
protected set
|
||||
{
|
||||
int oldValue = _Id;
|
||||
SetId(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Id = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Path
|
||||
/// </summary>
|
||||
protected string _Path;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Path to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetPath(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Path to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetPath(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Required, Max length = 65535
|
||||
/// Relative to the LibraryRoot
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(65535)]
|
||||
[StringLength(65535)]
|
||||
public string Path
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Path;
|
||||
GetPath(ref value);
|
||||
return (_Path = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Path;
|
||||
SetPath(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Path = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Kind
|
||||
/// </summary>
|
||||
protected Enums.MediaFileKind _Kind;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Kind to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetKind(Enums.MediaFileKind oldValue, ref Enums.MediaFileKind newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Kind to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetKind(ref Enums.MediaFileKind result);
|
||||
|
||||
/// <summary>
|
||||
/// Required
|
||||
/// </summary>
|
||||
[Required]
|
||||
public Enums.MediaFileKind Kind
|
||||
{
|
||||
get
|
||||
{
|
||||
Enums.MediaFileKind value = _Kind;
|
||||
GetKind(ref value);
|
||||
return (_Kind = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
Enums.MediaFileKind oldValue = _Kind;
|
||||
SetKind(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Kind = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Required, ConcurrenyToken
|
||||
/// </summary>
|
||||
[ConcurrencyCheck]
|
||||
[Required]
|
||||
public uint RowVersion { get; set; }
|
||||
|
||||
public void OnSavingChanges()
|
||||
{
|
||||
RowVersion++;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
|
||||
[ForeignKey("MediaFileStream_MediaFileStreams_Id")]
|
||||
public virtual ICollection<MediaFileStream> MediaFileStreams { get; protected set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,149 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class MediaFileStream
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected MediaFileStream()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static MediaFileStream CreateMediaFileStreamUnsafe()
|
||||
{
|
||||
return new MediaFileStream();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="streamnumber"></param>
|
||||
/// <param name="_mediafile0"></param>
|
||||
public MediaFileStream(int streamnumber, MediaFile _mediafile0)
|
||||
{
|
||||
this.StreamNumber = streamnumber;
|
||||
|
||||
if (_mediafile0 == null) throw new ArgumentNullException(nameof(_mediafile0));
|
||||
_mediafile0.MediaFileStreams.Add(this);
|
||||
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="streamnumber"></param>
|
||||
/// <param name="_mediafile0"></param>
|
||||
public static MediaFileStream Create(int streamnumber, MediaFile _mediafile0)
|
||||
{
|
||||
return new MediaFileStream(streamnumber, _mediafile0);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Id
|
||||
/// </summary>
|
||||
internal int _Id;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetId(int oldValue, ref int newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetId(ref int result);
|
||||
|
||||
/// <summary>
|
||||
/// Identity, Indexed, Required
|
||||
/// </summary>
|
||||
[Key]
|
||||
[Required]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
public int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
int value = _Id;
|
||||
GetId(ref value);
|
||||
return (_Id = value);
|
||||
}
|
||||
protected set
|
||||
{
|
||||
int oldValue = _Id;
|
||||
SetId(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Id = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for StreamNumber
|
||||
/// </summary>
|
||||
protected int _StreamNumber;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of StreamNumber to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetStreamNumber(int oldValue, ref int newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of StreamNumber to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetStreamNumber(ref int result);
|
||||
|
||||
/// <summary>
|
||||
/// Required
|
||||
/// </summary>
|
||||
[Required]
|
||||
public int StreamNumber
|
||||
{
|
||||
get
|
||||
{
|
||||
int value = _StreamNumber;
|
||||
GetStreamNumber(ref value);
|
||||
return (_StreamNumber = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
int oldValue = _StreamNumber;
|
||||
SetStreamNumber(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_StreamNumber = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Required, ConcurrenyToken
|
||||
/// </summary>
|
||||
[ConcurrencyCheck]
|
||||
[Required]
|
||||
public uint RowVersion { get; set; }
|
||||
|
||||
public void OnSavingChanges()
|
||||
{
|
||||
RowVersion++;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,380 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public abstract partial class Metadata
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to being abstract.
|
||||
/// </summary>
|
||||
protected Metadata()
|
||||
{
|
||||
PersonRoles = new HashSet<PersonRole>();
|
||||
Genres = new HashSet<Genre>();
|
||||
Artwork = new HashSet<Artwork>();
|
||||
Ratings = new HashSet<Rating>();
|
||||
Sources = new HashSet<MetadataProviderId>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="title">The title or name of the object</param>
|
||||
/// <param name="language">ISO-639-3 3-character language codes</param>
|
||||
protected Metadata(string title, string language, DateTime dateadded, DateTime datemodified)
|
||||
{
|
||||
if (string.IsNullOrEmpty(title)) throw new ArgumentNullException(nameof(title));
|
||||
this.Title = title;
|
||||
|
||||
if (string.IsNullOrEmpty(language)) throw new ArgumentNullException(nameof(language));
|
||||
this.Language = language;
|
||||
|
||||
this.PersonRoles = new HashSet<PersonRole>();
|
||||
this.Genres = new HashSet<Genre>();
|
||||
this.Artwork = new HashSet<Artwork>();
|
||||
this.Ratings = new HashSet<Rating>();
|
||||
this.Sources = new HashSet<MetadataProviderId>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Id
|
||||
/// </summary>
|
||||
internal int _Id;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetId(int oldValue, ref int newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetId(ref int result);
|
||||
|
||||
/// <summary>
|
||||
/// Identity, Indexed, Required
|
||||
/// </summary>
|
||||
[Key]
|
||||
[Required]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
public int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
int value = _Id;
|
||||
GetId(ref value);
|
||||
return (_Id = value);
|
||||
}
|
||||
protected set
|
||||
{
|
||||
int oldValue = _Id;
|
||||
SetId(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Id = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Title
|
||||
/// </summary>
|
||||
protected string _Title;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Title to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetTitle(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Title to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetTitle(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Required, Max length = 1024
|
||||
/// The title or name of the object
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(1024)]
|
||||
[StringLength(1024)]
|
||||
public string Title
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Title;
|
||||
GetTitle(ref value);
|
||||
return (_Title = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Title;
|
||||
SetTitle(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Title = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for OriginalTitle
|
||||
/// </summary>
|
||||
protected string _OriginalTitle;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of OriginalTitle to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetOriginalTitle(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of OriginalTitle to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetOriginalTitle(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Max length = 1024
|
||||
/// </summary>
|
||||
[MaxLength(1024)]
|
||||
[StringLength(1024)]
|
||||
public string OriginalTitle
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _OriginalTitle;
|
||||
GetOriginalTitle(ref value);
|
||||
return (_OriginalTitle = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _OriginalTitle;
|
||||
SetOriginalTitle(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_OriginalTitle = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for SortTitle
|
||||
/// </summary>
|
||||
protected string _SortTitle;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of SortTitle to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetSortTitle(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of SortTitle to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetSortTitle(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Max length = 1024
|
||||
/// </summary>
|
||||
[MaxLength(1024)]
|
||||
[StringLength(1024)]
|
||||
public string SortTitle
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _SortTitle;
|
||||
GetSortTitle(ref value);
|
||||
return (_SortTitle = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _SortTitle;
|
||||
SetSortTitle(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_SortTitle = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Language
|
||||
/// </summary>
|
||||
protected string _Language;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Language to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetLanguage(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Language to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetLanguage(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Required, Min length = 3, Max length = 3
|
||||
/// ISO-639-3 3-character language codes
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MinLength(3)]
|
||||
[MaxLength(3)]
|
||||
[StringLength(3)]
|
||||
public string Language
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Language;
|
||||
GetLanguage(ref value);
|
||||
return (_Language = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Language;
|
||||
SetLanguage(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Language = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for ReleaseDate
|
||||
/// </summary>
|
||||
protected DateTimeOffset? _ReleaseDate;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of ReleaseDate to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetReleaseDate(DateTimeOffset? oldValue, ref DateTimeOffset? newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of ReleaseDate to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetReleaseDate(ref DateTimeOffset? result);
|
||||
|
||||
public DateTimeOffset? ReleaseDate
|
||||
{
|
||||
get
|
||||
{
|
||||
DateTimeOffset? value = _ReleaseDate;
|
||||
GetReleaseDate(ref value);
|
||||
return (_ReleaseDate = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
DateTimeOffset? oldValue = _ReleaseDate;
|
||||
SetReleaseDate(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_ReleaseDate = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for DateAdded
|
||||
/// </summary>
|
||||
protected DateTime _DateAdded;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of DateAdded to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetDateAdded(DateTime oldValue, ref DateTime newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of DateAdded to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetDateAdded(ref DateTime result);
|
||||
|
||||
/// <summary>
|
||||
/// Required
|
||||
/// </summary>
|
||||
[Required]
|
||||
public DateTime DateAdded
|
||||
{
|
||||
get
|
||||
{
|
||||
DateTime value = _DateAdded;
|
||||
GetDateAdded(ref value);
|
||||
return (_DateAdded = value);
|
||||
}
|
||||
internal set
|
||||
{
|
||||
DateTime oldValue = _DateAdded;
|
||||
SetDateAdded(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_DateAdded = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for DateModified
|
||||
/// </summary>
|
||||
protected DateTime _DateModified;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of DateModified to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetDateModified(DateTime oldValue, ref DateTime newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of DateModified to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetDateModified(ref DateTime result);
|
||||
|
||||
/// <summary>
|
||||
/// Required
|
||||
/// </summary>
|
||||
[Required]
|
||||
public DateTime DateModified
|
||||
{
|
||||
get
|
||||
{
|
||||
DateTime value = _DateModified;
|
||||
GetDateModified(ref value);
|
||||
return (_DateModified = value);
|
||||
}
|
||||
internal set
|
||||
{
|
||||
DateTime oldValue = _DateModified;
|
||||
SetDateModified(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_DateModified = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Required, ConcurrenyToken
|
||||
/// </summary>
|
||||
[ConcurrencyCheck]
|
||||
[Required]
|
||||
public uint RowVersion { get; set; }
|
||||
|
||||
public void OnSavingChanges()
|
||||
{
|
||||
RowVersion++;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
|
||||
[ForeignKey("PersonRole_PersonRoles_Id")]
|
||||
public virtual ICollection<PersonRole> PersonRoles { get; protected set; }
|
||||
|
||||
[ForeignKey("PersonRole_PersonRoles_Id")]
|
||||
public virtual ICollection<Genre> Genres { get; protected set; }
|
||||
|
||||
[ForeignKey("PersonRole_PersonRoles_Id")]
|
||||
public virtual ICollection<Artwork> Artwork { get; protected set; }
|
||||
|
||||
[ForeignKey("PersonRole_PersonRoles_Id")]
|
||||
public virtual ICollection<Rating> Ratings { get; protected set; }
|
||||
|
||||
[ForeignKey("PersonRole_PersonRoles_Id")]
|
||||
public virtual ICollection<MetadataProviderId> Sources { get; protected set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,147 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class MetadataProvider
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected MetadataProvider()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static MetadataProvider CreateMetadataProviderUnsafe()
|
||||
{
|
||||
return new MetadataProvider();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
public MetadataProvider(string name)
|
||||
{
|
||||
if (string.IsNullOrEmpty(name)) throw new ArgumentNullException(nameof(name));
|
||||
this.Name = name;
|
||||
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
public static MetadataProvider Create(string name)
|
||||
{
|
||||
return new MetadataProvider(name);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Id
|
||||
/// </summary>
|
||||
internal int _Id;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetId(int oldValue, ref int newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetId(ref int result);
|
||||
|
||||
/// <summary>
|
||||
/// Identity, Indexed, Required
|
||||
/// </summary>
|
||||
[Key]
|
||||
[Required]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
public int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
int value = _Id;
|
||||
GetId(ref value);
|
||||
return (_Id = value);
|
||||
}
|
||||
protected set
|
||||
{
|
||||
int oldValue = _Id;
|
||||
SetId(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Id = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Name
|
||||
/// </summary>
|
||||
protected string _Name;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Name to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetName(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Name to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetName(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Required, Max length = 1024
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(1024)]
|
||||
[StringLength(1024)]
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Name;
|
||||
GetName(ref value);
|
||||
return (_Name = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Name;
|
||||
SetName(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Name = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Required, ConcurrenyToken
|
||||
/// </summary>
|
||||
[ConcurrencyCheck]
|
||||
[Required]
|
||||
public uint RowVersion { get; set; }
|
||||
|
||||
public void OnSavingChanges()
|
||||
{
|
||||
RowVersion++;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,179 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class MetadataProviderId
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected MetadataProviderId()
|
||||
{
|
||||
// NOTE: This class has one-to-one associations with MetadataProviderId.
|
||||
// One-to-one associations are not validated in constructors since this causes a scenario where each one must be constructed before the other.
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static MetadataProviderId CreateMetadataProviderIdUnsafe()
|
||||
{
|
||||
return new MetadataProviderId();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="providerid"></param>
|
||||
/// <param name="_metadata0"></param>
|
||||
/// <param name="_person1"></param>
|
||||
/// <param name="_personrole2"></param>
|
||||
/// <param name="_ratingsource3"></param>
|
||||
public MetadataProviderId(string providerid, Metadata _metadata0, Person _person1, PersonRole _personrole2, RatingSource _ratingsource3)
|
||||
{
|
||||
// NOTE: This class has one-to-one associations with MetadataProviderId.
|
||||
// One-to-one associations are not validated in constructors since this causes a scenario where each one must be constructed before the other.
|
||||
|
||||
if (string.IsNullOrEmpty(providerid)) throw new ArgumentNullException(nameof(providerid));
|
||||
this.ProviderId = providerid;
|
||||
|
||||
if (_metadata0 == null) throw new ArgumentNullException(nameof(_metadata0));
|
||||
_metadata0.Sources.Add(this);
|
||||
|
||||
if (_person1 == null) throw new ArgumentNullException(nameof(_person1));
|
||||
_person1.Sources.Add(this);
|
||||
|
||||
if (_personrole2 == null) throw new ArgumentNullException(nameof(_personrole2));
|
||||
_personrole2.Sources.Add(this);
|
||||
|
||||
if (_ratingsource3 == null) throw new ArgumentNullException(nameof(_ratingsource3));
|
||||
_ratingsource3.Source = this;
|
||||
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="providerid"></param>
|
||||
/// <param name="_metadata0"></param>
|
||||
/// <param name="_person1"></param>
|
||||
/// <param name="_personrole2"></param>
|
||||
/// <param name="_ratingsource3"></param>
|
||||
public static MetadataProviderId Create(string providerid, Metadata _metadata0, Person _person1, PersonRole _personrole2, RatingSource _ratingsource3)
|
||||
{
|
||||
return new MetadataProviderId(providerid, _metadata0, _person1, _personrole2, _ratingsource3);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Id
|
||||
/// </summary>
|
||||
internal int _Id;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetId(int oldValue, ref int newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Id to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetId(ref int result);
|
||||
|
||||
/// <summary>
|
||||
/// Identity, Indexed, Required
|
||||
/// </summary>
|
||||
[Key]
|
||||
[Required]
|
||||
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
public int Id
|
||||
{
|
||||
get
|
||||
{
|
||||
int value = _Id;
|
||||
GetId(ref value);
|
||||
return (_Id = value);
|
||||
}
|
||||
protected set
|
||||
{
|
||||
int oldValue = _Id;
|
||||
SetId(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Id = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for ProviderId
|
||||
/// </summary>
|
||||
protected string _ProviderId;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of ProviderId to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetProviderId(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of ProviderId to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetProviderId(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Required, Max length = 255
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MaxLength(255)]
|
||||
[StringLength(255)]
|
||||
public string ProviderId
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _ProviderId;
|
||||
GetProviderId(ref value);
|
||||
return (_ProviderId = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _ProviderId;
|
||||
SetProviderId(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_ProviderId = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Required, ConcurrenyToken
|
||||
/// </summary>
|
||||
[ConcurrencyCheck]
|
||||
[Required]
|
||||
public uint RowVersion { get; set; }
|
||||
|
||||
public void OnSavingChanges()
|
||||
{
|
||||
RowVersion++;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Required
|
||||
/// </summary>
|
||||
[ForeignKey("MetadataProvider_Id")]
|
||||
public virtual MetadataProvider MetadataProvider { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,69 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class Movie : LibraryItem
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected Movie()
|
||||
{
|
||||
Releases = new HashSet<Release>();
|
||||
MovieMetadata = new HashSet<MovieMetadata>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static Movie CreateMovieUnsafe()
|
||||
{
|
||||
return new Movie();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
|
||||
public Movie(Guid urlid, DateTime dateadded)
|
||||
{
|
||||
this.UrlId = urlid;
|
||||
|
||||
this.Releases = new HashSet<Release>();
|
||||
this.MovieMetadata = new HashSet<MovieMetadata>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="urlid">This is whats gets displayed in the Urls and API requests. This could also be a string.</param>
|
||||
public static Movie Create(Guid urlid, DateTime dateadded)
|
||||
{
|
||||
return new Movie(urlid, dateadded);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
|
||||
[ForeignKey("Release_Releases_Id")]
|
||||
public virtual ICollection<Release> Releases { get; protected set; }
|
||||
|
||||
[ForeignKey("MovieMetadata_MovieMetadata_Id")]
|
||||
public virtual ICollection<MovieMetadata> MovieMetadata { get; protected set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,223 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Jellyfin.Data.Entities
|
||||
{
|
||||
public partial class MovieMetadata : Metadata
|
||||
{
|
||||
partial void Init();
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor. Protected due to required properties, but present because EF needs it.
|
||||
/// </summary>
|
||||
protected MovieMetadata()
|
||||
{
|
||||
Studios = new HashSet<Company>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving.
|
||||
/// </summary>
|
||||
public static MovieMetadata CreateMovieMetadataUnsafe()
|
||||
{
|
||||
return new MovieMetadata();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor with required data
|
||||
/// </summary>
|
||||
/// <param name="title">The title or name of the object</param>
|
||||
/// <param name="language">ISO-639-3 3-character language codes</param>
|
||||
/// <param name="_movie0"></param>
|
||||
public MovieMetadata(string title, string language, DateTime dateadded, DateTime datemodified, Movie _movie0)
|
||||
{
|
||||
if (string.IsNullOrEmpty(title)) throw new ArgumentNullException(nameof(title));
|
||||
this.Title = title;
|
||||
|
||||
if (string.IsNullOrEmpty(language)) throw new ArgumentNullException(nameof(language));
|
||||
this.Language = language;
|
||||
|
||||
if (_movie0 == null) throw new ArgumentNullException(nameof(_movie0));
|
||||
_movie0.MovieMetadata.Add(this);
|
||||
|
||||
this.Studios = new HashSet<Company>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static create function (for use in LINQ queries, etc.)
|
||||
/// </summary>
|
||||
/// <param name="title">The title or name of the object</param>
|
||||
/// <param name="language">ISO-639-3 3-character language codes</param>
|
||||
/// <param name="_movie0"></param>
|
||||
public static MovieMetadata Create(string title, string language, DateTime dateadded, DateTime datemodified, Movie _movie0)
|
||||
{
|
||||
return new MovieMetadata(title, language, dateadded, datemodified, _movie0);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Properties
|
||||
*************************************************************************/
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Outline
|
||||
/// </summary>
|
||||
protected string _Outline;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Outline to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetOutline(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Outline to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetOutline(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Max length = 1024
|
||||
/// </summary>
|
||||
[MaxLength(1024)]
|
||||
[StringLength(1024)]
|
||||
public string Outline
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Outline;
|
||||
GetOutline(ref value);
|
||||
return (_Outline = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Outline;
|
||||
SetOutline(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Outline = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Plot
|
||||
/// </summary>
|
||||
protected string _Plot;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Plot to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetPlot(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Plot to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetPlot(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Max length = 65535
|
||||
/// </summary>
|
||||
[MaxLength(65535)]
|
||||
[StringLength(65535)]
|
||||
public string Plot
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Plot;
|
||||
GetPlot(ref value);
|
||||
return (_Plot = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Plot;
|
||||
SetPlot(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Plot = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Tagline
|
||||
/// </summary>
|
||||
protected string _Tagline;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Tagline to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetTagline(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Tagline to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetTagline(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Max length = 1024
|
||||
/// </summary>
|
||||
[MaxLength(1024)]
|
||||
[StringLength(1024)]
|
||||
public string Tagline
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Tagline;
|
||||
GetTagline(ref value);
|
||||
return (_Tagline = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Tagline;
|
||||
SetTagline(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Tagline = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Backing field for Country
|
||||
/// </summary>
|
||||
protected string _Country;
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Country to be changed before setting.
|
||||
/// </summary>
|
||||
partial void SetCountry(string oldValue, ref string newValue);
|
||||
/// <summary>
|
||||
/// When provided in a partial class, allows value of Country to be changed before returning.
|
||||
/// </summary>
|
||||
partial void GetCountry(ref string result);
|
||||
|
||||
/// <summary>
|
||||
/// Max length = 2
|
||||
/// </summary>
|
||||
[MaxLength(2)]
|
||||
[StringLength(2)]
|
||||
public string Country
|
||||
{
|
||||
get
|
||||
{
|
||||
string value = _Country;
|
||||
GetCountry(ref value);
|
||||
return (_Country = value);
|
||||
}
|
||||
set
|
||||
{
|
||||
string oldValue = _Country;
|
||||
SetCountry(oldValue, ref value);
|
||||
if (oldValue != value)
|
||||
{
|
||||
_Country = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Navigation properties
|
||||
*************************************************************************/
|
||||
[ForeignKey("Company_Studios_Id")]
|
||||
public virtual ICollection<Company> Studios { get; protected set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue