aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Model
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Model')
-rw-r--r--MediaBrowser.Model/Configuration/ServerConfiguration.cs27
-rw-r--r--MediaBrowser.Model/MediaBrowser.Model.csproj2
-rw-r--r--MediaBrowser.Model/Plugins/PluginInfo.cs43
-rw-r--r--MediaBrowser.Model/Plugins/PluginPageInfo.cs34
-rw-r--r--MediaBrowser.Model/Plugins/PluginStatus.cs47
-rw-r--r--MediaBrowser.Model/Providers/ExternalIdInfo.cs21
-rw-r--r--MediaBrowser.Model/Serialization/IJsonSerializer.cs102
-rw-r--r--MediaBrowser.Model/Session/SessionMessageType.cs2
-rw-r--r--MediaBrowser.Model/Updates/InstallationInfo.cs8
-rw-r--r--MediaBrowser.Model/Updates/PackageInfo.cs50
-rw-r--r--MediaBrowser.Model/Updates/VersionInfo.cs47
11 files changed, 213 insertions, 170 deletions
diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs
index 0dbd51bdc..0f0ad0f9a 100644
--- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs
+++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs
@@ -49,8 +49,6 @@ namespace MediaBrowser.Model.Configuration
new MetadataOptions
{
ItemType = "Series",
- DisabledMetadataFetchers = new[] { "TheMovieDb" },
- DisabledImageFetchers = new[] { "TheMovieDb" }
},
new MetadataOptions
{
@@ -69,13 +67,10 @@ namespace MediaBrowser.Model.Configuration
new MetadataOptions
{
ItemType = "Season",
- DisabledMetadataFetchers = new[] { "TheMovieDb" },
},
new MetadataOptions
{
ItemType = "Episode",
- DisabledMetadataFetchers = new[] { "The Open Movie Database", "TheMovieDb" },
- DisabledImageFetchers = new[] { "The Open Movie Database", "TheMovieDb" }
}
};
}
@@ -304,6 +299,18 @@ namespace MediaBrowser.Model.Configuration
public int MinResumeDurationSeconds { get; set; } = 300;
/// <summary>
+ /// Gets or sets the minimum minutes of a book that must be played in order for playstate to be updated.
+ /// </summary>
+ /// <value>The min resume in minutes.</value>
+ public int MinAudiobookResume { get; set; } = 5;
+
+ /// <summary>
+ /// Gets or sets the remaining minutes of a book that can be played while still saving playstate. If this percentage is crossed playstate will be reset to the beginning and the item will be marked watched.
+ /// </summary>
+ /// <value>The remaining time in minutes.</value>
+ public int MaxAudiobookResume { get; set; } = 5;
+
+ /// <summary>
/// Gets or sets the delay in seconds that we will wait after a file system change to try and discover what has been added/removed
/// Some delay is necessary with some items because their creation is not atomic. It involves the creation of several
/// different directories and files.
@@ -449,5 +456,15 @@ namespace MediaBrowser.Model.Configuration
/// Gets or sets the how many metadata refreshes can run concurrently.
/// </summary>
public int LibraryMetadataRefreshConcurrency { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether older plugins should automatically be deleted from the plugin folder.
+ /// </summary>
+ public bool RemoveOldPlugins { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether plugin image should be disabled.
+ /// </summary>
+ public bool DisablePluginImages { get; set; }
}
}
diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj
index 334fe8209..c271a9cf8 100644
--- a/MediaBrowser.Model/MediaBrowser.Model.csproj
+++ b/MediaBrowser.Model/MediaBrowser.Model.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
<!-- ProjectGuid is only included as a requirement for SonarQube analysis -->
<PropertyGroup>
diff --git a/MediaBrowser.Model/Plugins/PluginInfo.cs b/MediaBrowser.Model/Plugins/PluginInfo.cs
index dd215192f..25216610d 100644
--- a/MediaBrowser.Model/Plugins/PluginInfo.cs
+++ b/MediaBrowser.Model/Plugins/PluginInfo.cs
@@ -1,4 +1,7 @@
-#nullable disable
+#nullable enable
+
+using System;
+
namespace MediaBrowser.Model.Plugins
{
/// <summary>
@@ -7,34 +10,46 @@ namespace MediaBrowser.Model.Plugins
public class PluginInfo
{
/// <summary>
+ /// Initializes a new instance of the <see cref="PluginInfo"/> class.
+ /// </summary>
+ /// <param name="name">The plugin name.</param>
+ /// <param name="version">The plugin <see cref="Version"/>.</param>
+ /// <param name="description">The plugin description.</param>
+ /// <param name="id">The <see cref="Guid"/>.</param>
+ /// <param name="canUninstall">True if this plugin can be uninstalled.</param>
+ public PluginInfo(string name, Version version, string description, Guid id, bool canUninstall)
+ {
+ Name = name;
+ Version = version;
+ Description = description;
+ Id = id;
+ CanUninstall = canUninstall;
+ }
+
+ /// <summary>
/// Gets or sets the name.
/// </summary>
- /// <value>The name.</value>
public string Name { get; set; }
/// <summary>
/// Gets or sets the version.
/// </summary>
- /// <value>The version.</value>
- public string Version { get; set; }
+ public Version Version { get; set; }
/// <summary>
/// Gets or sets the name of the configuration file.
/// </summary>
- /// <value>The name of the configuration file.</value>
- public string ConfigurationFileName { get; set; }
+ public string? ConfigurationFileName { get; set; }
/// <summary>
/// Gets or sets the description.
/// </summary>
- /// <value>The description.</value>
public string Description { get; set; }
/// <summary>
/// Gets or sets the unique id.
/// </summary>
- /// <value>The unique id.</value>
- public string Id { get; set; }
+ public Guid Id { get; set; }
/// <summary>
/// Gets or sets a value indicating whether the plugin can be uninstalled.
@@ -42,9 +57,13 @@ namespace MediaBrowser.Model.Plugins
public bool CanUninstall { get; set; }
/// <summary>
- /// Gets or sets the image URL.
+ /// Gets or sets a value indicating whether this plugin has a valid image.
+ /// </summary>
+ public bool HasImage { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating the status of the plugin.
/// </summary>
- /// <value>The image URL.</value>
- public string ImageUrl { get; set; }
+ public PluginStatus Status { get; set; }
}
}
diff --git a/MediaBrowser.Model/Plugins/PluginPageInfo.cs b/MediaBrowser.Model/Plugins/PluginPageInfo.cs
index ca72e19ee..85c0aa204 100644
--- a/MediaBrowser.Model/Plugins/PluginPageInfo.cs
+++ b/MediaBrowser.Model/Plugins/PluginPageInfo.cs
@@ -1,20 +1,40 @@
-#nullable disable
-#pragma warning disable CS1591
+#nullable enable
namespace MediaBrowser.Model.Plugins
{
+ /// <summary>
+ /// Defines the <see cref="PluginPageInfo" />.
+ /// </summary>
public class PluginPageInfo
{
- public string Name { get; set; }
+ /// <summary>
+ /// Gets or sets the name.
+ /// </summary>
+ public string Name { get; set; } = string.Empty;
- public string DisplayName { get; set; }
+ /// <summary>
+ /// Gets or sets the display name.
+ /// </summary>
+ public string? DisplayName { get; set; }
- public string EmbeddedResourcePath { get; set; }
+ /// <summary>
+ /// Gets or sets the resource path.
+ /// </summary>
+ public string EmbeddedResourcePath { get; set; } = string.Empty;
+ /// <summary>
+ /// Gets or sets a value indicating whether this plugin should appear in the main menu.
+ /// </summary>
public bool EnableInMainMenu { get; set; }
- public string MenuSection { get; set; }
+ /// <summary>
+ /// Gets or sets the menu section.
+ /// </summary>
+ public string? MenuSection { get; set; }
- public string MenuIcon { get; set; }
+ /// <summary>
+ /// Gets or sets the menu icon.
+ /// </summary>
+ public string? MenuIcon { get; set; }
}
}
diff --git a/MediaBrowser.Model/Plugins/PluginStatus.cs b/MediaBrowser.Model/Plugins/PluginStatus.cs
new file mode 100644
index 000000000..4b9b9bbee
--- /dev/null
+++ b/MediaBrowser.Model/Plugins/PluginStatus.cs
@@ -0,0 +1,47 @@
+namespace MediaBrowser.Model.Plugins
+{
+ /// <summary>
+ /// Plugin load status.
+ /// </summary>
+ public enum PluginStatus
+ {
+ /// <summary>
+ /// This plugin requires a restart in order for it to load. This is a memory only status.
+ /// The actual status of the plugin after reload is present in the manifest.
+ /// eg. A disabled plugin will still be active until the next restart, and so will have a memory status of Restart,
+ /// but a disk manifest status of Disabled.
+ /// </summary>
+ Restart = 1,
+
+ /// <summary>
+ /// This plugin is currently running.
+ /// </summary>
+ Active = 0,
+
+ /// <summary>
+ /// This plugin has been marked as disabled.
+ /// </summary>
+ Disabled = -1,
+
+ /// <summary>
+ /// This plugin does not meet the TargetAbi requirements.
+ /// </summary>
+ NotSupported = -2,
+
+ /// <summary>
+ /// This plugin caused an error when instantiated. (Either DI loop, or exception)
+ /// </summary>
+ Malfunctioned = -3,
+
+ /// <summary>
+ /// This plugin has been superceded by another version.
+ /// </summary>
+ Superceded = -4,
+
+ /// <summary>
+ /// An attempt to remove this plugin from disk will happen at every restart.
+ /// It will not be loaded, if unable to do so.
+ /// </summary>
+ Deleted = -5
+ }
+}
diff --git a/MediaBrowser.Model/Providers/ExternalIdInfo.cs b/MediaBrowser.Model/Providers/ExternalIdInfo.cs
index 01784554f..afe95e6ee 100644
--- a/MediaBrowser.Model/Providers/ExternalIdInfo.cs
+++ b/MediaBrowser.Model/Providers/ExternalIdInfo.cs
@@ -6,16 +6,31 @@ namespace MediaBrowser.Model.Providers
public class ExternalIdInfo
{
/// <summary>
+ /// Represents the external id information for serialization to the client.
+ /// </summary>
+ /// <param name="name">Name of the external id provider (IE: IMDB, MusicBrainz, etc).</param>
+ /// <param name="key">Key for this id. This key should be unique across all providers.</param>
+ /// <param name="type">Specific media type for this id</param>
+ /// <param name="urlFormatString">URL format string.</param>
+ public ExternalIdInfo(string name, string key, ExternalIdMediaType? type, string urlFormatString)
+ {
+ Name = name;
+ Key = key;
+ Type = type;
+ UrlFormatString = urlFormatString;
+ }
+
+ /// <summary>
/// Gets or sets the display name of the external id provider (IE: IMDB, MusicBrainz, etc).
/// </summary>
// TODO: This should be renamed to ProviderName
- public string? Name { get; set; }
+ public string Name { get; set; }
/// <summary>
/// Gets or sets the unique key for this id. This key should be unique across all providers.
/// </summary>
// TODO: This property is not actually unique across the concrete types at the moment. It should be updated to be unique.
- public string? Key { get; set; }
+ public string Key { get; set; }
/// <summary>
/// Gets or sets the specific media type for this id. This is used to distinguish between the different
@@ -31,6 +46,6 @@ namespace MediaBrowser.Model.Providers
/// <summary>
/// Gets or sets the URL format string.
/// </summary>
- public string? UrlFormatString { get; set; }
+ public string UrlFormatString { get; set; }
}
}
diff --git a/MediaBrowser.Model/Serialization/IJsonSerializer.cs b/MediaBrowser.Model/Serialization/IJsonSerializer.cs
deleted file mode 100644
index 09b6ff9b5..000000000
--- a/MediaBrowser.Model/Serialization/IJsonSerializer.cs
+++ /dev/null
@@ -1,102 +0,0 @@
-#nullable disable
-#pragma warning disable CS1591
-
-using System;
-using System.IO;
-using System.Threading.Tasks;
-
-namespace MediaBrowser.Model.Serialization
-{
- public interface IJsonSerializer
- {
- /// <summary>
- /// Serializes to stream.
- /// </summary>
- /// <param name="obj">The obj.</param>
- /// <param name="stream">The stream.</param>
- /// <exception cref="ArgumentNullException">obj</exception>
- void SerializeToStream(object obj, Stream stream);
-
- /// <summary>
- /// Serializes to stream.
- /// </summary>
- /// <param name="obj">The obj.</param>
- /// <param name="stream">The stream.</param>
- /// <exception cref="ArgumentNullException">obj</exception>
- void SerializeToStream<T>(T obj, Stream stream);
-
- /// <summary>
- /// Serializes to file.
- /// </summary>
- /// <param name="obj">The obj.</param>
- /// <param name="file">The file.</param>
- /// <exception cref="ArgumentNullException">obj</exception>
- void SerializeToFile(object obj, string file);
-
- /// <summary>
- /// Deserializes from file.
- /// </summary>
- /// <param name="type">The type.</param>
- /// <param name="file">The file.</param>
- /// <returns>System.Object.</returns>
- /// <exception cref="ArgumentNullException">type</exception>
- object DeserializeFromFile(Type type, string file);
-
- /// <summary>
- /// Deserializes from file.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="file">The file.</param>
- /// <returns>``0.</returns>
- /// <exception cref="ArgumentNullException">file</exception>
- T DeserializeFromFile<T>(string file)
- where T : class;
-
- /// <summary>
- /// Deserializes from stream.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="stream">The stream.</param>
- /// <returns>``0.</returns>
- /// <exception cref="ArgumentNullException">stream</exception>
- T DeserializeFromStream<T>(Stream stream);
-
- /// <summary>
- /// Deserializes from string.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="text">The text.</param>
- /// <returns>``0.</returns>
- /// <exception cref="ArgumentNullException">text</exception>
- T DeserializeFromString<T>(string text);
-
- /// <summary>
- /// Deserializes from stream.
- /// </summary>
- /// <param name="stream">The stream.</param>
- /// <param name="type">The type.</param>
- /// <returns>System.Object.</returns>
- /// <exception cref="ArgumentNullException">stream</exception>
- object DeserializeFromStream(Stream stream, Type type);
-
- /// <summary>
- /// Deserializes from string.
- /// </summary>
- /// <param name="json">The json.</param>
- /// <param name="type">The type.</param>
- /// <returns>System.Object.</returns>
- /// <exception cref="ArgumentNullException">json</exception>
- object DeserializeFromString(string json, Type type);
-
- /// <summary>
- /// Serializes to string.
- /// </summary>
- /// <param name="obj">The obj.</param>
- /// <returns>System.String.</returns>
- /// <exception cref="ArgumentNullException">obj</exception>
- string SerializeToString(object obj);
-
- Task<object> DeserializeFromStreamAsync(Stream stream, Type type);
- Task<T> DeserializeFromStreamAsync<T>(Stream stream);
- }
-}
diff --git a/MediaBrowser.Model/Session/SessionMessageType.cs b/MediaBrowser.Model/Session/SessionMessageType.cs
index 23c41026d..84f4716b4 100644
--- a/MediaBrowser.Model/Session/SessionMessageType.cs
+++ b/MediaBrowser.Model/Session/SessionMessageType.cs
@@ -15,7 +15,7 @@ namespace MediaBrowser.Model.Session
Play,
SyncPlayCommand,
SyncPlayGroupUpdate,
- PlayState,
+ Playstate,
RestartRequired,
ServerShuttingDown,
ServerRestarting,
diff --git a/MediaBrowser.Model/Updates/InstallationInfo.cs b/MediaBrowser.Model/Updates/InstallationInfo.cs
index a6d80dba6..eebe1a903 100644
--- a/MediaBrowser.Model/Updates/InstallationInfo.cs
+++ b/MediaBrowser.Model/Updates/InstallationInfo.cs
@@ -1,5 +1,6 @@
#nullable disable
using System;
+using System.Text.Json.Serialization;
namespace MediaBrowser.Model.Updates
{
@@ -9,10 +10,11 @@ namespace MediaBrowser.Model.Updates
public class InstallationInfo
{
/// <summary>
- /// Gets or sets the guid.
+ /// Gets or sets the Id.
/// </summary>
- /// <value>The guid.</value>
- public Guid Guid { get; set; }
+ /// <value>The Id.</value>
+ [JsonPropertyName("Guid")]
+ public Guid Id { get; set; }
/// <summary>
/// Gets or sets the name.
diff --git a/MediaBrowser.Model/Updates/PackageInfo.cs b/MediaBrowser.Model/Updates/PackageInfo.cs
index 5e9304363..7a82685f0 100644
--- a/MediaBrowser.Model/Updates/PackageInfo.cs
+++ b/MediaBrowser.Model/Updates/PackageInfo.cs
@@ -1,6 +1,7 @@
-#nullable disable
+#nullable enable
using System;
using System.Collections.Generic;
+using System.Text.Json.Serialization;
namespace MediaBrowser.Model.Updates
{
@@ -10,54 +11,75 @@ namespace MediaBrowser.Model.Updates
public class PackageInfo
{
/// <summary>
+ /// Initializes a new instance of the <see cref="PackageInfo"/> class.
+ /// </summary>
+ public PackageInfo()
+ {
+ Versions = Array.Empty<VersionInfo>();
+ Id = string.Empty;
+ Category = string.Empty;
+ Name = string.Empty;
+ Overview = string.Empty;
+ Owner = string.Empty;
+ Description = string.Empty;
+ }
+
+ /// <summary>
/// Gets or sets the name.
/// </summary>
/// <value>The name.</value>
- public string name { get; set; }
+ [JsonPropertyName("name")]
+ public string Name { get; set; }
/// <summary>
/// Gets or sets a long description of the plugin containing features or helpful explanations.
/// </summary>
/// <value>The description.</value>
- public string description { get; set; }
+ [JsonPropertyName("description")]
+ public string Description { get; set; }
/// <summary>
/// Gets or sets a short overview of what the plugin does.
/// </summary>
/// <value>The overview.</value>
- public string overview { get; set; }
+ [JsonPropertyName("overview")]
+ public string Overview { get; set; }
/// <summary>
/// Gets or sets the owner.
/// </summary>
/// <value>The owner.</value>
- public string owner { get; set; }
+ [JsonPropertyName("owner")]
+ public string Owner { get; set; }
/// <summary>
/// Gets or sets the category.
/// </summary>
/// <value>The category.</value>
- public string category { get; set; }
+ [JsonPropertyName("category")]
+ public string Category { get; set; }
/// <summary>
- /// The guid of the assembly associated with this plugin.
+ /// Gets or sets the guid of the assembly associated with this plugin.
/// This is used to identify the proper item for automatic updates.
/// </summary>
/// <value>The name.</value>
- public string guid { get; set; }
+ [JsonPropertyName("guid")]
+ public string Id { get; set; }
/// <summary>
/// Gets or sets the versions.
/// </summary>
/// <value>The versions.</value>
- public IList<VersionInfo> versions { get; set; }
+ [JsonPropertyName("versions")]
+#pragma warning disable CA2227 // Collection properties should be read only
+ public IList<VersionInfo> Versions { get; set; }
+#pragma warning restore CA2227 // Collection properties should be read only
/// <summary>
- /// Initializes a new instance of the <see cref="PackageInfo"/> class.
+ /// Gets or sets the image url for the package.
/// </summary>
- public PackageInfo()
- {
- versions = Array.Empty<VersionInfo>();
- }
+ [JsonPropertyName("imageUrl")]
+ public string? ImageUrl { get; set; }
}
}
diff --git a/MediaBrowser.Model/Updates/VersionInfo.cs b/MediaBrowser.Model/Updates/VersionInfo.cs
index 844170999..209092265 100644
--- a/MediaBrowser.Model/Updates/VersionInfo.cs
+++ b/MediaBrowser.Model/Updates/VersionInfo.cs
@@ -1,76 +1,79 @@
-#nullable disable
+#nullable enable
-using System;
+using System.Text.Json.Serialization;
+using SysVersion = System.Version;
namespace MediaBrowser.Model.Updates
{
/// <summary>
- /// Class PackageVersionInfo.
+ /// Defines the <see cref="VersionInfo"/> class.
/// </summary>
public class VersionInfo
{
- private Version _version;
+ private SysVersion? _version;
/// <summary>
/// Gets or sets the version.
/// </summary>
/// <value>The version.</value>
- public string version
+ [JsonPropertyName("version")]
+ public string Version
{
- get
- {
- return _version == null ? string.Empty : _version.ToString();
- }
+ get => _version == null ? string.Empty : _version.ToString();
- set
- {
- _version = Version.Parse(value);
- }
+ set => _version = SysVersion.Parse(value);
}
/// <summary>
- /// Gets the version as a <see cref="Version"/>.
+ /// Gets the version as a <see cref="SysVersion"/>.
/// </summary>
- public Version VersionNumber => _version;
+ public SysVersion VersionNumber => _version ?? new SysVersion(0, 0, 0);
/// <summary>
/// Gets or sets the changelog for this version.
/// </summary>
/// <value>The changelog.</value>
- public string changelog { get; set; }
+ [JsonPropertyName("changelog")]
+ public string? Changelog { get; set; }
/// <summary>
/// Gets or sets the ABI that this version was built against.
/// </summary>
/// <value>The target ABI version.</value>
- public string targetAbi { get; set; }
+ [JsonPropertyName("targetAbi")]
+ public string? TargetAbi { get; set; }
/// <summary>
/// Gets or sets the source URL.
/// </summary>
/// <value>The source URL.</value>
- public string sourceUrl { get; set; }
+ [JsonPropertyName("sourceUrl")]
+ public string? SourceUrl { get; set; }
/// <summary>
/// Gets or sets a checksum for the binary.
/// </summary>
/// <value>The checksum.</value>
- public string checksum { get; set; }
+ [JsonPropertyName("checksum")]
+ public string? Checksum { get; set; }
/// <summary>
/// Gets or sets a timestamp of when the binary was built.
/// </summary>
/// <value>The timestamp.</value>
- public string timestamp { get; set; }
+ [JsonPropertyName("timestamp")]
+ public string? Timestamp { get; set; }
/// <summary>
/// Gets or sets the repository name.
/// </summary>
- public string repositoryName { get; set; }
+ [JsonPropertyName("repositoryName")]
+ public string RepositoryName { get; set; } = string.Empty;
/// <summary>
/// Gets or sets the repository url.
/// </summary>
- public string repositoryUrl { get; set; }
+ [JsonPropertyName("repositoryUrl")]
+ public string RepositoryUrl { get; set; } = string.Empty;
}
}