mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-05-24 02:02:29 -04:00
Enable TreatWarningsAsErrors for MediaBrowser.Model
This commit is contained in:
parent
13d65318eb
commit
141efafd3d
@ -1,5 +1,5 @@
|
|||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1602
|
|
||||||
|
|
||||||
namespace Emby.Dlna.ContentDirectory
|
namespace Emby.Dlna.ContentDirectory
|
||||||
{
|
{
|
||||||
|
@ -553,7 +553,7 @@ namespace Emby.Dlna
|
|||||||
|
|
||||||
private void DumpProfiles()
|
private void DumpProfiles()
|
||||||
{
|
{
|
||||||
DeviceProfile[] list = new []
|
DeviceProfile[] list = new[]
|
||||||
{
|
{
|
||||||
new SamsungSmartTvProfile(),
|
new SamsungSmartTvProfile(),
|
||||||
new XboxOneProfile(),
|
new XboxOneProfile(),
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
#pragma warning disable SA1602
|
|
||||||
|
|
||||||
namespace Emby.Dlna.PlayTo
|
namespace Emby.Dlna.PlayTo
|
||||||
{
|
{
|
||||||
|
@ -6207,9 +6207,9 @@ AND Type = @InternalPersonType)");
|
|||||||
|
|
||||||
if (item.Type == MediaStreamType.Subtitle)
|
if (item.Type == MediaStreamType.Subtitle)
|
||||||
{
|
{
|
||||||
item.localizedUndefined = _localization.GetLocalizedString("Undefined");
|
item.LocalizedUndefined = _localization.GetLocalizedString("Undefined");
|
||||||
item.localizedDefault = _localization.GetLocalizedString("Default");
|
item.LocalizedDefault = _localization.GetLocalizedString("Default");
|
||||||
item.localizedForced = _localization.GetLocalizedString("Forced");
|
item.LocalizedForced = _localization.GetLocalizedString("Forced");
|
||||||
}
|
}
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
|
@ -523,7 +523,7 @@ namespace Jellyfin.Api.Helpers
|
|||||||
/// <param name="type">Dlna profile type.</param>
|
/// <param name="type">Dlna profile type.</param>
|
||||||
public void NormalizeMediaSourceContainer(MediaSourceInfo mediaSource, DeviceProfile profile, DlnaProfileType type)
|
public void NormalizeMediaSourceContainer(MediaSourceInfo mediaSource, DeviceProfile profile, DlnaProfileType type)
|
||||||
{
|
{
|
||||||
mediaSource.Container = StreamBuilder.NormalizeMediaSourceFormatIntoSingleContainer(mediaSource.Container, mediaSource.Path, profile, type);
|
mediaSource.Container = StreamBuilder.NormalizeMediaSourceFormatIntoSingleContainer(mediaSource.Container, profile, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetDeviceSpecificSubtitleInfo(StreamInfo info, MediaSourceInfo mediaSource, string accessToken)
|
private void SetDeviceSpecificSubtitleInfo(StreamInfo info, MediaSourceInfo mediaSource, string accessToken)
|
||||||
|
@ -183,7 +183,7 @@ namespace Jellyfin.Api.Helpers
|
|||||||
if (string.IsNullOrEmpty(containerInternal))
|
if (string.IsNullOrEmpty(containerInternal))
|
||||||
{
|
{
|
||||||
containerInternal = streamingRequest.Static ?
|
containerInternal = streamingRequest.Static ?
|
||||||
StreamBuilder.NormalizeMediaSourceFormatIntoSingleContainer(state.InputContainer, state.MediaPath, null, DlnaProfileType.Audio)
|
StreamBuilder.NormalizeMediaSourceFormatIntoSingleContainer(state.InputContainer, null, DlnaProfileType.Audio)
|
||||||
: GetOutputFileExtension(state);
|
: GetOutputFileExtension(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -681,9 +681,9 @@ namespace MediaBrowser.MediaEncoding.Probing
|
|||||||
{
|
{
|
||||||
stream.Type = MediaStreamType.Subtitle;
|
stream.Type = MediaStreamType.Subtitle;
|
||||||
stream.Codec = NormalizeSubtitleCodec(stream.Codec);
|
stream.Codec = NormalizeSubtitleCodec(stream.Codec);
|
||||||
stream.localizedUndefined = _localization.GetLocalizedString("Undefined");
|
stream.LocalizedUndefined = _localization.GetLocalizedString("Undefined");
|
||||||
stream.localizedDefault = _localization.GetLocalizedString("Default");
|
stream.LocalizedDefault = _localization.GetLocalizedString("Default");
|
||||||
stream.localizedForced = _localization.GetLocalizedString("Forced");
|
stream.LocalizedForced = _localization.GetLocalizedString("Forced");
|
||||||
}
|
}
|
||||||
else if (string.Equals(streamInfo.CodecType, "video", StringComparison.OrdinalIgnoreCase))
|
else if (string.Equals(streamInfo.CodecType, "video", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
|
@ -7,6 +7,13 @@ namespace MediaBrowser.Model.Channels
|
|||||||
{
|
{
|
||||||
public class ChannelFeatures
|
public class ChannelFeatures
|
||||||
{
|
{
|
||||||
|
public ChannelFeatures()
|
||||||
|
{
|
||||||
|
MediaTypes = Array.Empty<ChannelMediaType>();
|
||||||
|
ContentTypes = Array.Empty<ChannelMediaContentType>();
|
||||||
|
DefaultSortFields = Array.Empty<ChannelItemSortField>();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the name.
|
/// Gets or sets the name.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -38,7 +45,7 @@ namespace MediaBrowser.Model.Channels
|
|||||||
public ChannelMediaContentType[] ContentTypes { get; set; }
|
public ChannelMediaContentType[] ContentTypes { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the maximum number of records the channel allows retrieving at a time.
|
/// Gets or sets the maximum number of records the channel allows retrieving at a time.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int? MaxPageSize { get; set; }
|
public int? MaxPageSize { get; set; }
|
||||||
|
|
||||||
@ -55,7 +62,7 @@ namespace MediaBrowser.Model.Channels
|
|||||||
public ChannelItemSortField[] DefaultSortFields { get; set; }
|
public ChannelItemSortField[] DefaultSortFields { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Indicates if a sort ascending/descending toggle is supported or not.
|
/// Gets or sets a value indicating whether a sort ascending/descending toggle is supported.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool SupportsSortOrderToggle { get; set; }
|
public bool SupportsSortOrderToggle { get; set; }
|
||||||
|
|
||||||
@ -76,12 +83,5 @@ namespace MediaBrowser.Model.Channels
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value><c>true</c> if [supports content downloading]; otherwise, <c>false</c>.</value>
|
/// <value><c>true</c> if [supports content downloading]; otherwise, <c>false</c>.</value>
|
||||||
public bool SupportsContentDownloading { get; set; }
|
public bool SupportsContentDownloading { get; set; }
|
||||||
|
|
||||||
public ChannelFeatures()
|
|
||||||
{
|
|
||||||
MediaTypes = Array.Empty<ChannelMediaType>();
|
|
||||||
ContentTypes = Array.Empty<ChannelMediaContentType>();
|
|
||||||
DefaultSortFields = Array.Empty<ChannelItemSortField>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ namespace MediaBrowser.Model.Channels
|
|||||||
public class ChannelQuery
|
public class ChannelQuery
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Fields to return within the items, in addition to basic information.
|
/// Gets or sets the fields to return within the items, in addition to basic information.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The fields.</value>
|
/// <value>The fields.</value>
|
||||||
public ItemFields[] Fields { get; set; }
|
public ItemFields[] Fields { get; set; }
|
||||||
@ -28,13 +28,13 @@ namespace MediaBrowser.Model.Channels
|
|||||||
public Guid UserId { get; set; }
|
public Guid UserId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Skips over a given number of items within the results. Use for paging.
|
/// Gets or sets the start index. Use for paging.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The start index.</value>
|
/// <value>The start index.</value>
|
||||||
public int? StartIndex { get; set; }
|
public int? StartIndex { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The maximum number of items to return.
|
/// Gets or sets the maximum number of items to return.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The limit.</value>
|
/// <value>The limit.</value>
|
||||||
public int? Limit { get; set; }
|
public int? Limit { get; set; }
|
||||||
|
@ -5,6 +5,41 @@ namespace MediaBrowser.Model.Configuration
|
|||||||
{
|
{
|
||||||
public class EncodingOptions
|
public class EncodingOptions
|
||||||
{
|
{
|
||||||
|
public EncodingOptions()
|
||||||
|
{
|
||||||
|
EnableFallbackFont = false;
|
||||||
|
DownMixAudioBoost = 2;
|
||||||
|
MaxMuxingQueueSize = 2048;
|
||||||
|
EnableThrottling = false;
|
||||||
|
ThrottleDelaySeconds = 180;
|
||||||
|
EncodingThreadCount = -1;
|
||||||
|
// This is a DRM device that is almost guaranteed to be there on every intel platform,
|
||||||
|
// plus it's the default one in ffmpeg if you don't specify anything
|
||||||
|
VaapiDevice = "/dev/dri/renderD128";
|
||||||
|
// This is the OpenCL device that is used for tonemapping.
|
||||||
|
// The left side of the dot is the platform number, and the right side is the device number on the platform.
|
||||||
|
OpenclDevice = "0.0";
|
||||||
|
EnableTonemapping = false;
|
||||||
|
EnableVppTonemapping = false;
|
||||||
|
TonemappingAlgorithm = "hable";
|
||||||
|
TonemappingRange = "auto";
|
||||||
|
TonemappingDesat = 0;
|
||||||
|
TonemappingThreshold = 0.8;
|
||||||
|
TonemappingPeak = 100;
|
||||||
|
TonemappingParam = 0;
|
||||||
|
H264Crf = 23;
|
||||||
|
H265Crf = 28;
|
||||||
|
DeinterlaceDoubleRate = false;
|
||||||
|
DeinterlaceMethod = "yadif";
|
||||||
|
EnableDecodingColorDepth10Hevc = true;
|
||||||
|
EnableDecodingColorDepth10Vp9 = true;
|
||||||
|
EnableEnhancedNvdecDecoder = true;
|
||||||
|
EnableHardwareEncoding = true;
|
||||||
|
AllowHevcEncoding = true;
|
||||||
|
EnableSubtitleExtraction = true;
|
||||||
|
HardwareDecodingCodecs = new string[] { "h264", "vc1" };
|
||||||
|
}
|
||||||
|
|
||||||
public int EncodingThreadCount { get; set; }
|
public int EncodingThreadCount { get; set; }
|
||||||
|
|
||||||
public string TranscodingTempPath { get; set; }
|
public string TranscodingTempPath { get; set; }
|
||||||
@ -24,12 +59,12 @@ namespace MediaBrowser.Model.Configuration
|
|||||||
public string HardwareAccelerationType { get; set; }
|
public string HardwareAccelerationType { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// FFmpeg path as set by the user via the UI.
|
/// Gets or sets the FFmpeg path as set by the user via the UI.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string EncoderAppPath { get; set; }
|
public string EncoderAppPath { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The current FFmpeg path being used by the system and displayed on the transcode page.
|
/// Gets or sets the current FFmpeg path being used by the system and displayed on the transcode page.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string EncoderAppPathDisplay { get; set; }
|
public string EncoderAppPathDisplay { get; set; }
|
||||||
|
|
||||||
@ -76,40 +111,5 @@ namespace MediaBrowser.Model.Configuration
|
|||||||
public bool EnableSubtitleExtraction { get; set; }
|
public bool EnableSubtitleExtraction { get; set; }
|
||||||
|
|
||||||
public string[] HardwareDecodingCodecs { get; set; }
|
public string[] HardwareDecodingCodecs { get; set; }
|
||||||
|
|
||||||
public EncodingOptions()
|
|
||||||
{
|
|
||||||
EnableFallbackFont = false;
|
|
||||||
DownMixAudioBoost = 2;
|
|
||||||
MaxMuxingQueueSize = 2048;
|
|
||||||
EnableThrottling = false;
|
|
||||||
ThrottleDelaySeconds = 180;
|
|
||||||
EncodingThreadCount = -1;
|
|
||||||
// This is a DRM device that is almost guaranteed to be there on every intel platform,
|
|
||||||
// plus it's the default one in ffmpeg if you don't specify anything
|
|
||||||
VaapiDevice = "/dev/dri/renderD128";
|
|
||||||
// This is the OpenCL device that is used for tonemapping.
|
|
||||||
// The left side of the dot is the platform number, and the right side is the device number on the platform.
|
|
||||||
OpenclDevice = "0.0";
|
|
||||||
EnableTonemapping = false;
|
|
||||||
EnableVppTonemapping = false;
|
|
||||||
TonemappingAlgorithm = "hable";
|
|
||||||
TonemappingRange = "auto";
|
|
||||||
TonemappingDesat = 0;
|
|
||||||
TonemappingThreshold = 0.8;
|
|
||||||
TonemappingPeak = 100;
|
|
||||||
TonemappingParam = 0;
|
|
||||||
H264Crf = 23;
|
|
||||||
H265Crf = 28;
|
|
||||||
DeinterlaceDoubleRate = false;
|
|
||||||
DeinterlaceMethod = "yadif";
|
|
||||||
EnableDecodingColorDepth10Hevc = true;
|
|
||||||
EnableDecodingColorDepth10Vp9 = true;
|
|
||||||
EnableEnhancedNvdecDecoder = true;
|
|
||||||
EnableHardwareEncoding = true;
|
|
||||||
AllowHevcEncoding = true;
|
|
||||||
EnableSubtitleExtraction = true;
|
|
||||||
HardwareDecodingCodecs = new string[] { "h264", "vc1" };
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,11 @@ namespace MediaBrowser.Model.Configuration
|
|||||||
{
|
{
|
||||||
public class ImageOption
|
public class ImageOption
|
||||||
{
|
{
|
||||||
|
public ImageOption()
|
||||||
|
{
|
||||||
|
Limit = 1;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the type.
|
/// Gets or sets the type.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -23,10 +28,5 @@ namespace MediaBrowser.Model.Configuration
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The minimum width.</value>
|
/// <value>The minimum width.</value>
|
||||||
public int MinWidth { get; set; }
|
public int MinWidth { get; set; }
|
||||||
|
|
||||||
public ImageOption()
|
|
||||||
{
|
|
||||||
Limit = 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,13 +2,30 @@
|
|||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using MediaBrowser.Model.Entities;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Model.Configuration
|
namespace MediaBrowser.Model.Configuration
|
||||||
{
|
{
|
||||||
public class LibraryOptions
|
public class LibraryOptions
|
||||||
{
|
{
|
||||||
|
public LibraryOptions()
|
||||||
|
{
|
||||||
|
TypeOptions = Array.Empty<TypeOptions>();
|
||||||
|
DisabledSubtitleFetchers = Array.Empty<string>();
|
||||||
|
SubtitleFetcherOrder = Array.Empty<string>();
|
||||||
|
DisabledLocalMetadataReaders = Array.Empty<string>();
|
||||||
|
|
||||||
|
SkipSubtitlesIfAudioTrackMatches = true;
|
||||||
|
RequirePerfectSubtitleMatch = true;
|
||||||
|
|
||||||
|
EnablePhotos = true;
|
||||||
|
SaveSubtitlesWithMedia = true;
|
||||||
|
EnableRealtimeMonitor = true;
|
||||||
|
PathInfos = Array.Empty<MediaPathInfo>();
|
||||||
|
EnableInternetProviders = true;
|
||||||
|
EnableAutomaticSeriesGrouping = true;
|
||||||
|
SeasonZeroDisplayName = "Specials";
|
||||||
|
}
|
||||||
|
|
||||||
public bool EnablePhotos { get; set; }
|
public bool EnablePhotos { get; set; }
|
||||||
|
|
||||||
public bool EnableRealtimeMonitor { get; set; }
|
public bool EnableRealtimeMonitor { get; set; }
|
||||||
@ -79,387 +96,5 @@ namespace MediaBrowser.Model.Configuration
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LibraryOptions()
|
|
||||||
{
|
|
||||||
TypeOptions = Array.Empty<TypeOptions>();
|
|
||||||
DisabledSubtitleFetchers = Array.Empty<string>();
|
|
||||||
SubtitleFetcherOrder = Array.Empty<string>();
|
|
||||||
DisabledLocalMetadataReaders = Array.Empty<string>();
|
|
||||||
|
|
||||||
SkipSubtitlesIfAudioTrackMatches = true;
|
|
||||||
RequirePerfectSubtitleMatch = true;
|
|
||||||
|
|
||||||
EnablePhotos = true;
|
|
||||||
SaveSubtitlesWithMedia = true;
|
|
||||||
EnableRealtimeMonitor = true;
|
|
||||||
PathInfos = Array.Empty<MediaPathInfo>();
|
|
||||||
EnableInternetProviders = true;
|
|
||||||
EnableAutomaticSeriesGrouping = true;
|
|
||||||
SeasonZeroDisplayName = "Specials";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class MediaPathInfo
|
|
||||||
{
|
|
||||||
public string Path { get; set; }
|
|
||||||
|
|
||||||
public string NetworkPath { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class TypeOptions
|
|
||||||
{
|
|
||||||
public string Type { get; set; }
|
|
||||||
|
|
||||||
public string[] MetadataFetchers { get; set; }
|
|
||||||
|
|
||||||
public string[] MetadataFetcherOrder { get; set; }
|
|
||||||
|
|
||||||
public string[] ImageFetchers { get; set; }
|
|
||||||
|
|
||||||
public string[] ImageFetcherOrder { get; set; }
|
|
||||||
|
|
||||||
public ImageOption[] ImageOptions { get; set; }
|
|
||||||
|
|
||||||
public ImageOption GetImageOptions(ImageType type)
|
|
||||||
{
|
|
||||||
foreach (var i in ImageOptions)
|
|
||||||
{
|
|
||||||
if (i.Type == type)
|
|
||||||
{
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (DefaultImageOptions.TryGetValue(Type, out ImageOption[] options))
|
|
||||||
{
|
|
||||||
foreach (var i in options)
|
|
||||||
{
|
|
||||||
if (i.Type == type)
|
|
||||||
{
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return DefaultInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int GetLimit(ImageType type)
|
|
||||||
{
|
|
||||||
return GetImageOptions(type).Limit;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int GetMinWidth(ImageType type)
|
|
||||||
{
|
|
||||||
return GetImageOptions(type).MinWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsEnabled(ImageType type)
|
|
||||||
{
|
|
||||||
return GetLimit(type) > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TypeOptions()
|
|
||||||
{
|
|
||||||
MetadataFetchers = Array.Empty<string>();
|
|
||||||
MetadataFetcherOrder = Array.Empty<string>();
|
|
||||||
ImageFetchers = Array.Empty<string>();
|
|
||||||
ImageFetcherOrder = Array.Empty<string>();
|
|
||||||
ImageOptions = Array.Empty<ImageOption>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Dictionary<string, ImageOption[]> DefaultImageOptions = new Dictionary<string, ImageOption[]>
|
|
||||||
{
|
|
||||||
{
|
|
||||||
"Movie", new []
|
|
||||||
{
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
MinWidth = 1280,
|
|
||||||
Type = ImageType.Backdrop
|
|
||||||
},
|
|
||||||
|
|
||||||
// Don't download this by default as it's rarely used.
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 0,
|
|
||||||
Type = ImageType.Art
|
|
||||||
},
|
|
||||||
|
|
||||||
// Don't download this by default as it's rarely used.
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 0,
|
|
||||||
Type = ImageType.Disc
|
|
||||||
},
|
|
||||||
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
Type = ImageType.Primary
|
|
||||||
},
|
|
||||||
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 0,
|
|
||||||
Type = ImageType.Banner
|
|
||||||
},
|
|
||||||
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
Type = ImageType.Thumb
|
|
||||||
},
|
|
||||||
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
Type = ImageType.Logo
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"MusicVideo", new []
|
|
||||||
{
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
MinWidth = 1280,
|
|
||||||
Type = ImageType.Backdrop
|
|
||||||
},
|
|
||||||
|
|
||||||
// Don't download this by default as it's rarely used.
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 0,
|
|
||||||
Type = ImageType.Art
|
|
||||||
},
|
|
||||||
|
|
||||||
// Don't download this by default as it's rarely used.
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 0,
|
|
||||||
Type = ImageType.Disc
|
|
||||||
},
|
|
||||||
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
Type = ImageType.Primary
|
|
||||||
},
|
|
||||||
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 0,
|
|
||||||
Type = ImageType.Banner
|
|
||||||
},
|
|
||||||
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
Type = ImageType.Thumb
|
|
||||||
},
|
|
||||||
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
Type = ImageType.Logo
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Series", new []
|
|
||||||
{
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
MinWidth = 1280,
|
|
||||||
Type = ImageType.Backdrop
|
|
||||||
},
|
|
||||||
|
|
||||||
// Don't download this by default as it's rarely used.
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 0,
|
|
||||||
Type = ImageType.Art
|
|
||||||
},
|
|
||||||
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
Type = ImageType.Primary
|
|
||||||
},
|
|
||||||
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
Type = ImageType.Banner
|
|
||||||
},
|
|
||||||
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
Type = ImageType.Thumb
|
|
||||||
},
|
|
||||||
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
Type = ImageType.Logo
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"MusicAlbum", new []
|
|
||||||
{
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 0,
|
|
||||||
MinWidth = 1280,
|
|
||||||
Type = ImageType.Backdrop
|
|
||||||
},
|
|
||||||
|
|
||||||
// Don't download this by default as it's rarely used.
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 0,
|
|
||||||
Type = ImageType.Disc
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"MusicArtist", new []
|
|
||||||
{
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
MinWidth = 1280,
|
|
||||||
Type = ImageType.Backdrop
|
|
||||||
},
|
|
||||||
|
|
||||||
// Don't download this by default
|
|
||||||
// They do look great, but most artists won't have them, which means a banner view isn't really possible
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 0,
|
|
||||||
Type = ImageType.Banner
|
|
||||||
},
|
|
||||||
|
|
||||||
// Don't download this by default
|
|
||||||
// Generally not used
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 0,
|
|
||||||
Type = ImageType.Art
|
|
||||||
},
|
|
||||||
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
Type = ImageType.Logo
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"BoxSet", new []
|
|
||||||
{
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
MinWidth = 1280,
|
|
||||||
Type = ImageType.Backdrop
|
|
||||||
},
|
|
||||||
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
Type = ImageType.Primary
|
|
||||||
},
|
|
||||||
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
Type = ImageType.Thumb
|
|
||||||
},
|
|
||||||
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
Type = ImageType.Logo
|
|
||||||
},
|
|
||||||
|
|
||||||
// Don't download this by default as it's rarely used.
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 0,
|
|
||||||
Type = ImageType.Art
|
|
||||||
},
|
|
||||||
|
|
||||||
// Don't download this by default as it's rarely used.
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 0,
|
|
||||||
Type = ImageType.Disc
|
|
||||||
},
|
|
||||||
|
|
||||||
// Don't download this by default as it's rarely used.
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 0,
|
|
||||||
Type = ImageType.Banner
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Season", new []
|
|
||||||
{
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 0,
|
|
||||||
MinWidth = 1280,
|
|
||||||
Type = ImageType.Backdrop
|
|
||||||
},
|
|
||||||
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
Type = ImageType.Primary
|
|
||||||
},
|
|
||||||
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 0,
|
|
||||||
Type = ImageType.Banner
|
|
||||||
},
|
|
||||||
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 0,
|
|
||||||
Type = ImageType.Thumb
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Episode", new []
|
|
||||||
{
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 0,
|
|
||||||
MinWidth = 1280,
|
|
||||||
Type = ImageType.Backdrop
|
|
||||||
},
|
|
||||||
|
|
||||||
new ImageOption
|
|
||||||
{
|
|
||||||
Limit = 1,
|
|
||||||
Type = ImageType.Primary
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public static ImageOption DefaultInstance = new ImageOption();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
12
MediaBrowser.Model/Configuration/MediaPathInfo.cs
Normal file
12
MediaBrowser.Model/Configuration/MediaPathInfo.cs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#nullable disable
|
||||||
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
|
namespace MediaBrowser.Model.Configuration
|
||||||
|
{
|
||||||
|
public class MediaPathInfo
|
||||||
|
{
|
||||||
|
public string Path { get; set; }
|
||||||
|
|
||||||
|
public string NetworkPath { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -4,11 +4,11 @@ namespace MediaBrowser.Model.Configuration
|
|||||||
{
|
{
|
||||||
public class MetadataConfiguration
|
public class MetadataConfiguration
|
||||||
{
|
{
|
||||||
public bool UseFileCreationTimeForDateAdded { get; set; }
|
|
||||||
|
|
||||||
public MetadataConfiguration()
|
public MetadataConfiguration()
|
||||||
{
|
{
|
||||||
UseFileCreationTimeForDateAdded = true;
|
UseFileCreationTimeForDateAdded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool UseFileCreationTimeForDateAdded { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,16 @@ namespace MediaBrowser.Model.Configuration
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class MetadataOptions
|
public class MetadataOptions
|
||||||
{
|
{
|
||||||
|
public MetadataOptions()
|
||||||
|
{
|
||||||
|
DisabledMetadataSavers = Array.Empty<string>();
|
||||||
|
LocalMetadataReaderOrder = Array.Empty<string>();
|
||||||
|
DisabledMetadataFetchers = Array.Empty<string>();
|
||||||
|
MetadataFetcherOrder = Array.Empty<string>();
|
||||||
|
DisabledImageFetchers = Array.Empty<string>();
|
||||||
|
ImageFetcherOrder = Array.Empty<string>();
|
||||||
|
}
|
||||||
|
|
||||||
public string ItemType { get; set; }
|
public string ItemType { get; set; }
|
||||||
|
|
||||||
public string[] DisabledMetadataSavers { get; set; }
|
public string[] DisabledMetadataSavers { get; set; }
|
||||||
@ -23,15 +33,5 @@ namespace MediaBrowser.Model.Configuration
|
|||||||
public string[] DisabledImageFetchers { get; set; }
|
public string[] DisabledImageFetchers { get; set; }
|
||||||
|
|
||||||
public string[] ImageFetcherOrder { get; set; }
|
public string[] ImageFetcherOrder { get; set; }
|
||||||
|
|
||||||
public MetadataOptions()
|
|
||||||
{
|
|
||||||
DisabledMetadataSavers = Array.Empty<string>();
|
|
||||||
LocalMetadataReaderOrder = Array.Empty<string>();
|
|
||||||
DisabledMetadataFetchers = Array.Empty<string>();
|
|
||||||
MetadataFetcherOrder = Array.Empty<string>();
|
|
||||||
DisabledImageFetchers = Array.Empty<string>();
|
|
||||||
ImageFetcherOrder = Array.Empty<string>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,12 @@ namespace MediaBrowser.Model.Configuration
|
|||||||
{
|
{
|
||||||
public class MetadataPluginSummary
|
public class MetadataPluginSummary
|
||||||
{
|
{
|
||||||
|
public MetadataPluginSummary()
|
||||||
|
{
|
||||||
|
SupportedImageTypes = Array.Empty<ImageType>();
|
||||||
|
Plugins = Array.Empty<MetadataPlugin>();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the type of the item.
|
/// Gets or sets the type of the item.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -25,11 +31,5 @@ namespace MediaBrowser.Model.Configuration
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The supported image types.</value>
|
/// <value>The supported image types.</value>
|
||||||
public ImageType[] SupportedImageTypes { get; set; }
|
public ImageType[] SupportedImageTypes { get; set; }
|
||||||
|
|
||||||
public MetadataPluginSummary()
|
|
||||||
{
|
|
||||||
SupportedImageTypes = Array.Empty<ImageType>();
|
|
||||||
Plugins = Array.Empty<MetadataPlugin>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
365
MediaBrowser.Model/Configuration/TypeOptions.cs
Normal file
365
MediaBrowser.Model/Configuration/TypeOptions.cs
Normal file
@ -0,0 +1,365 @@
|
|||||||
|
#nullable disable
|
||||||
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using MediaBrowser.Model.Entities;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Model.Configuration
|
||||||
|
{
|
||||||
|
public class TypeOptions
|
||||||
|
{
|
||||||
|
public static readonly ImageOption DefaultInstance = new ImageOption();
|
||||||
|
|
||||||
|
public static readonly Dictionary<string, ImageOption[]> DefaultImageOptions = new Dictionary<string, ImageOption[]>
|
||||||
|
{
|
||||||
|
{
|
||||||
|
"Movie", new[]
|
||||||
|
{
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
MinWidth = 1280,
|
||||||
|
Type = ImageType.Backdrop
|
||||||
|
},
|
||||||
|
|
||||||
|
// Don't download this by default as it's rarely used.
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 0,
|
||||||
|
Type = ImageType.Art
|
||||||
|
},
|
||||||
|
|
||||||
|
// Don't download this by default as it's rarely used.
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 0,
|
||||||
|
Type = ImageType.Disc
|
||||||
|
},
|
||||||
|
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
Type = ImageType.Primary
|
||||||
|
},
|
||||||
|
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 0,
|
||||||
|
Type = ImageType.Banner
|
||||||
|
},
|
||||||
|
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
Type = ImageType.Thumb
|
||||||
|
},
|
||||||
|
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
Type = ImageType.Logo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"MusicVideo", new[]
|
||||||
|
{
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
MinWidth = 1280,
|
||||||
|
Type = ImageType.Backdrop
|
||||||
|
},
|
||||||
|
|
||||||
|
// Don't download this by default as it's rarely used.
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 0,
|
||||||
|
Type = ImageType.Art
|
||||||
|
},
|
||||||
|
|
||||||
|
// Don't download this by default as it's rarely used.
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 0,
|
||||||
|
Type = ImageType.Disc
|
||||||
|
},
|
||||||
|
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
Type = ImageType.Primary
|
||||||
|
},
|
||||||
|
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 0,
|
||||||
|
Type = ImageType.Banner
|
||||||
|
},
|
||||||
|
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
Type = ImageType.Thumb
|
||||||
|
},
|
||||||
|
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
Type = ImageType.Logo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Series", new[]
|
||||||
|
{
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
MinWidth = 1280,
|
||||||
|
Type = ImageType.Backdrop
|
||||||
|
},
|
||||||
|
|
||||||
|
// Don't download this by default as it's rarely used.
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 0,
|
||||||
|
Type = ImageType.Art
|
||||||
|
},
|
||||||
|
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
Type = ImageType.Primary
|
||||||
|
},
|
||||||
|
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
Type = ImageType.Banner
|
||||||
|
},
|
||||||
|
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
Type = ImageType.Thumb
|
||||||
|
},
|
||||||
|
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
Type = ImageType.Logo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"MusicAlbum", new[]
|
||||||
|
{
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 0,
|
||||||
|
MinWidth = 1280,
|
||||||
|
Type = ImageType.Backdrop
|
||||||
|
},
|
||||||
|
|
||||||
|
// Don't download this by default as it's rarely used.
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 0,
|
||||||
|
Type = ImageType.Disc
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"MusicArtist", new[]
|
||||||
|
{
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
MinWidth = 1280,
|
||||||
|
Type = ImageType.Backdrop
|
||||||
|
},
|
||||||
|
|
||||||
|
// Don't download this by default
|
||||||
|
// They do look great, but most artists won't have them, which means a banner view isn't really possible
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 0,
|
||||||
|
Type = ImageType.Banner
|
||||||
|
},
|
||||||
|
|
||||||
|
// Don't download this by default
|
||||||
|
// Generally not used
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 0,
|
||||||
|
Type = ImageType.Art
|
||||||
|
},
|
||||||
|
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
Type = ImageType.Logo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"BoxSet", new[]
|
||||||
|
{
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
MinWidth = 1280,
|
||||||
|
Type = ImageType.Backdrop
|
||||||
|
},
|
||||||
|
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
Type = ImageType.Primary
|
||||||
|
},
|
||||||
|
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
Type = ImageType.Thumb
|
||||||
|
},
|
||||||
|
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
Type = ImageType.Logo
|
||||||
|
},
|
||||||
|
|
||||||
|
// Don't download this by default as it's rarely used.
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 0,
|
||||||
|
Type = ImageType.Art
|
||||||
|
},
|
||||||
|
|
||||||
|
// Don't download this by default as it's rarely used.
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 0,
|
||||||
|
Type = ImageType.Disc
|
||||||
|
},
|
||||||
|
|
||||||
|
// Don't download this by default as it's rarely used.
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 0,
|
||||||
|
Type = ImageType.Banner
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Season", new[]
|
||||||
|
{
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 0,
|
||||||
|
MinWidth = 1280,
|
||||||
|
Type = ImageType.Backdrop
|
||||||
|
},
|
||||||
|
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
Type = ImageType.Primary
|
||||||
|
},
|
||||||
|
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 0,
|
||||||
|
Type = ImageType.Banner
|
||||||
|
},
|
||||||
|
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 0,
|
||||||
|
Type = ImageType.Thumb
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Episode", new[]
|
||||||
|
{
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 0,
|
||||||
|
MinWidth = 1280,
|
||||||
|
Type = ImageType.Backdrop
|
||||||
|
},
|
||||||
|
|
||||||
|
new ImageOption
|
||||||
|
{
|
||||||
|
Limit = 1,
|
||||||
|
Type = ImageType.Primary
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public TypeOptions()
|
||||||
|
{
|
||||||
|
MetadataFetchers = Array.Empty<string>();
|
||||||
|
MetadataFetcherOrder = Array.Empty<string>();
|
||||||
|
ImageFetchers = Array.Empty<string>();
|
||||||
|
ImageFetcherOrder = Array.Empty<string>();
|
||||||
|
ImageOptions = Array.Empty<ImageOption>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Type { get; set; }
|
||||||
|
|
||||||
|
public string[] MetadataFetchers { get; set; }
|
||||||
|
|
||||||
|
public string[] MetadataFetcherOrder { get; set; }
|
||||||
|
|
||||||
|
public string[] ImageFetchers { get; set; }
|
||||||
|
|
||||||
|
public string[] ImageFetcherOrder { get; set; }
|
||||||
|
|
||||||
|
public ImageOption[] ImageOptions { get; set; }
|
||||||
|
|
||||||
|
public ImageOption GetImageOptions(ImageType type)
|
||||||
|
{
|
||||||
|
foreach (var i in ImageOptions)
|
||||||
|
{
|
||||||
|
if (i.Type == type)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DefaultImageOptions.TryGetValue(Type, out ImageOption[] options))
|
||||||
|
{
|
||||||
|
foreach (var i in options)
|
||||||
|
{
|
||||||
|
if (i.Type == type)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return DefaultInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetLimit(ImageType type)
|
||||||
|
{
|
||||||
|
return GetImageOptions(type).Limit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetMinWidth(ImageType type)
|
||||||
|
{
|
||||||
|
return GetImageOptions(type).MinWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsEnabled(ImageType type)
|
||||||
|
{
|
||||||
|
return GetLimit(type) > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -11,6 +11,24 @@ namespace MediaBrowser.Model.Configuration
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class UserConfiguration
|
public class UserConfiguration
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="UserConfiguration" /> class.
|
||||||
|
/// </summary>
|
||||||
|
public UserConfiguration()
|
||||||
|
{
|
||||||
|
EnableNextEpisodeAutoPlay = true;
|
||||||
|
RememberAudioSelections = true;
|
||||||
|
RememberSubtitleSelections = true;
|
||||||
|
|
||||||
|
HidePlayedInLatest = true;
|
||||||
|
PlayDefaultAudioTrack = true;
|
||||||
|
|
||||||
|
LatestItemsExcludes = Array.Empty<string>();
|
||||||
|
OrderedViews = Array.Empty<string>();
|
||||||
|
MyMediaExcludes = Array.Empty<string>();
|
||||||
|
GroupedFolders = Array.Empty<string>();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the audio language preference.
|
/// Gets or sets the audio language preference.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -52,23 +70,5 @@ namespace MediaBrowser.Model.Configuration
|
|||||||
public bool RememberSubtitleSelections { get; set; }
|
public bool RememberSubtitleSelections { get; set; }
|
||||||
|
|
||||||
public bool EnableNextEpisodeAutoPlay { get; set; }
|
public bool EnableNextEpisodeAutoPlay { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="UserConfiguration" /> class.
|
|
||||||
/// </summary>
|
|
||||||
public UserConfiguration()
|
|
||||||
{
|
|
||||||
EnableNextEpisodeAutoPlay = true;
|
|
||||||
RememberAudioSelections = true;
|
|
||||||
RememberSubtitleSelections = true;
|
|
||||||
|
|
||||||
HidePlayedInLatest = true;
|
|
||||||
PlayDefaultAudioTrack = true;
|
|
||||||
|
|
||||||
LatestItemsExcludes = Array.Empty<string>();
|
|
||||||
OrderedViews = Array.Empty<string>();
|
|
||||||
MyMediaExcludes = Array.Empty<string>();
|
|
||||||
GroupedFolders = Array.Empty<string>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,14 @@ namespace MediaBrowser.Model.Configuration
|
|||||||
{
|
{
|
||||||
public class XbmcMetadataOptions
|
public class XbmcMetadataOptions
|
||||||
{
|
{
|
||||||
|
public XbmcMetadataOptions()
|
||||||
|
{
|
||||||
|
ReleaseDateFormat = "yyyy-MM-dd";
|
||||||
|
|
||||||
|
SaveImagePathsInNfo = true;
|
||||||
|
EnablePathSubstitution = true;
|
||||||
|
}
|
||||||
|
|
||||||
public string UserId { get; set; }
|
public string UserId { get; set; }
|
||||||
|
|
||||||
public string ReleaseDateFormat { get; set; }
|
public string ReleaseDateFormat { get; set; }
|
||||||
@ -14,13 +22,5 @@ namespace MediaBrowser.Model.Configuration
|
|||||||
public bool EnablePathSubstitution { get; set; }
|
public bool EnablePathSubstitution { get; set; }
|
||||||
|
|
||||||
public bool EnableExtraThumbsDuplication { get; set; }
|
public bool EnableExtraThumbsDuplication { get; set; }
|
||||||
|
|
||||||
public XbmcMetadataOptions()
|
|
||||||
{
|
|
||||||
ReleaseDateFormat = "yyyy-MM-dd";
|
|
||||||
|
|
||||||
SaveImagePathsInNfo = true;
|
|
||||||
EnablePathSubstitution = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,20 +34,20 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
public DeviceProfile Profile { get; set; }
|
public DeviceProfile Profile { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Optional. Only needed if a specific AudioStreamIndex or SubtitleStreamIndex are requested.
|
/// Gets or sets a media source id. Optional. Only needed if a specific AudioStreamIndex or SubtitleStreamIndex are requested.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string MediaSourceId { get; set; }
|
public string MediaSourceId { get; set; }
|
||||||
|
|
||||||
public string DeviceId { get; set; }
|
public string DeviceId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Allows an override of supported number of audio channels
|
/// Gets or sets an override of supported number of audio channels
|
||||||
/// Example: DeviceProfile supports five channel, but user only has stereo speakers
|
/// Example: DeviceProfile supports five channel, but user only has stereo speakers.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int? MaxAudioChannels { get; set; }
|
public int? MaxAudioChannels { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The application's configured quality setting.
|
/// Gets or sets the application's configured quality setting.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int? MaxBitrate { get; set; }
|
public int? MaxBitrate { get; set; }
|
||||||
|
|
||||||
@ -66,6 +66,7 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the maximum bitrate.
|
/// Gets the maximum bitrate.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="isAudio">Whether or not this is audio.</param>
|
||||||
/// <returns>System.Nullable<System.Int32>.</returns>
|
/// <returns>System.Nullable<System.Int32>.</returns>
|
||||||
public int? GetMaxBitrate(bool isAudio)
|
public int? GetMaxBitrate(bool isAudio)
|
||||||
{
|
{
|
||||||
|
@ -9,6 +9,12 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
{
|
{
|
||||||
public class CodecProfile
|
public class CodecProfile
|
||||||
{
|
{
|
||||||
|
public CodecProfile()
|
||||||
|
{
|
||||||
|
Conditions = Array.Empty<ProfileCondition>();
|
||||||
|
ApplyConditions = Array.Empty<ProfileCondition>();
|
||||||
|
}
|
||||||
|
|
||||||
[XmlAttribute("type")]
|
[XmlAttribute("type")]
|
||||||
public CodecType Type { get; set; }
|
public CodecType Type { get; set; }
|
||||||
|
|
||||||
@ -22,12 +28,6 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
[XmlAttribute("container")]
|
[XmlAttribute("container")]
|
||||||
public string Container { get; set; }
|
public string Container { get; set; }
|
||||||
|
|
||||||
public CodecProfile()
|
|
||||||
{
|
|
||||||
Conditions = Array.Empty<ProfileCondition>();
|
|
||||||
ApplyConditions = Array.Empty<ProfileCondition>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public string[] GetCodecs()
|
public string[] GetCodecs()
|
||||||
{
|
{
|
||||||
return ContainerProfile.SplitValue(Codec);
|
return ContainerProfile.SplitValue(Codec);
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
using System.Linq;
|
||||||
using MediaBrowser.Model.MediaInfo;
|
using MediaBrowser.Model.MediaInfo;
|
||||||
|
|
||||||
namespace MediaBrowser.Model.Dlna
|
namespace MediaBrowser.Model.Dlna
|
||||||
|
@ -9,6 +9,11 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
{
|
{
|
||||||
public class ContainerProfile
|
public class ContainerProfile
|
||||||
{
|
{
|
||||||
|
public ContainerProfile()
|
||||||
|
{
|
||||||
|
Conditions = Array.Empty<ProfileCondition>();
|
||||||
|
}
|
||||||
|
|
||||||
[XmlAttribute("type")]
|
[XmlAttribute("type")]
|
||||||
public DlnaProfileType Type { get; set; }
|
public DlnaProfileType Type { get; set; }
|
||||||
|
|
||||||
@ -17,11 +22,6 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
[XmlAttribute("container")]
|
[XmlAttribute("container")]
|
||||||
public string Container { get; set; }
|
public string Container { get; set; }
|
||||||
|
|
||||||
public ContainerProfile()
|
|
||||||
{
|
|
||||||
Conditions = Array.Empty<ProfileCondition>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public string[] GetContainers()
|
public string[] GetContainers()
|
||||||
{
|
{
|
||||||
return SplitValue(Container);
|
return SplitValue(Container);
|
||||||
|
@ -81,13 +81,13 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
DlnaFlags.DlnaV15;
|
DlnaFlags.DlnaV15;
|
||||||
|
|
||||||
// if (isDirectStream)
|
// if (isDirectStream)
|
||||||
//{
|
// {
|
||||||
// flagValue = flagValue | DlnaFlags.ByteBasedSeek;
|
// flagValue = flagValue | DlnaFlags.ByteBasedSeek;
|
||||||
//}
|
// }
|
||||||
// else if (runtimeTicks.HasValue)
|
// else if (runtimeTicks.HasValue)
|
||||||
//{
|
// {
|
||||||
// flagValue = flagValue | DlnaFlags.TimeBasedSeek;
|
// flagValue = flagValue | DlnaFlags.TimeBasedSeek;
|
||||||
//}
|
// }
|
||||||
|
|
||||||
string dlnaflags = string.Format(
|
string dlnaflags = string.Format(
|
||||||
CultureInfo.InvariantCulture,
|
CultureInfo.InvariantCulture,
|
||||||
@ -150,16 +150,18 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
DlnaFlags.DlnaV15;
|
DlnaFlags.DlnaV15;
|
||||||
|
|
||||||
// if (isDirectStream)
|
// if (isDirectStream)
|
||||||
//{
|
// {
|
||||||
// flagValue = flagValue | DlnaFlags.ByteBasedSeek;
|
// flagValue = flagValue | DlnaFlags.ByteBasedSeek;
|
||||||
//}
|
// }
|
||||||
// else if (runtimeTicks.HasValue)
|
// else if (runtimeTicks.HasValue)
|
||||||
//{
|
// {
|
||||||
// flagValue = flagValue | DlnaFlags.TimeBasedSeek;
|
// flagValue = flagValue | DlnaFlags.TimeBasedSeek;
|
||||||
//}
|
// }
|
||||||
|
|
||||||
string dlnaflags = string.Format(CultureInfo.InvariantCulture, ";DLNA.ORG_FLAGS={0}",
|
string dlnaflags = string.Format(
|
||||||
DlnaMaps.FlagsToString(flagValue));
|
CultureInfo.InvariantCulture,
|
||||||
|
";DLNA.ORG_FLAGS={0}",
|
||||||
|
DlnaMaps.FlagsToString(flagValue));
|
||||||
|
|
||||||
ResponseProfile mediaProfile = _profile.GetVideoMediaProfile(
|
ResponseProfile mediaProfile = _profile.GetVideoMediaProfile(
|
||||||
container,
|
container,
|
||||||
|
@ -8,6 +8,7 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
public interface IDeviceDiscovery
|
public interface IDeviceDiscovery
|
||||||
{
|
{
|
||||||
event EventHandler<GenericEventArgs<UpnpDeviceInfo>> DeviceDiscovered;
|
event EventHandler<GenericEventArgs<UpnpDeviceInfo>> DeviceDiscovered;
|
||||||
|
|
||||||
event EventHandler<GenericEventArgs<UpnpDeviceInfo>> DeviceLeft;
|
event EventHandler<GenericEventArgs<UpnpDeviceInfo>> DeviceLeft;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,6 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
string.Equals(container, "mpegts", StringComparison.OrdinalIgnoreCase) ||
|
string.Equals(container, "mpegts", StringComparison.OrdinalIgnoreCase) ||
|
||||||
string.Equals(container, "m2ts", StringComparison.OrdinalIgnoreCase))
|
string.Equals(container, "m2ts", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
|
|
||||||
return ResolveVideoMPEG2TSFormat(videoCodec, audioCodec, width, height, timestampType);
|
return ResolveVideoMPEG2TSFormat(videoCodec, audioCodec, width, height, timestampType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -323,7 +322,6 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
if (string.Equals(videoCodec, "wmv", StringComparison.OrdinalIgnoreCase) &&
|
if (string.Equals(videoCodec, "wmv", StringComparison.OrdinalIgnoreCase) &&
|
||||||
(string.IsNullOrEmpty(audioCodec) || string.Equals(audioCodec, "wma", StringComparison.OrdinalIgnoreCase) || string.Equals(videoCodec, "wmapro", StringComparison.OrdinalIgnoreCase)))
|
(string.IsNullOrEmpty(audioCodec) || string.Equals(audioCodec, "wma", StringComparison.OrdinalIgnoreCase) || string.Equals(videoCodec, "wmapro", StringComparison.OrdinalIgnoreCase)))
|
||||||
{
|
{
|
||||||
|
|
||||||
if (width.HasValue && height.HasValue)
|
if (width.HasValue && height.HasValue)
|
||||||
{
|
{
|
||||||
if ((width.Value <= 720) && (height.Value <= 576))
|
if ((width.Value <= 720) && (height.Value <= 576))
|
||||||
@ -479,7 +477,9 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
{
|
{
|
||||||
if (string.Equals(container, "jpeg", StringComparison.OrdinalIgnoreCase) ||
|
if (string.Equals(container, "jpeg", StringComparison.OrdinalIgnoreCase) ||
|
||||||
string.Equals(container, "jpg", StringComparison.OrdinalIgnoreCase))
|
string.Equals(container, "jpg", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
return ResolveImageJPGFormat(width, height);
|
return ResolveImageJPGFormat(width, height);
|
||||||
|
}
|
||||||
|
|
||||||
if (string.Equals(container, "png", StringComparison.OrdinalIgnoreCase))
|
if (string.Equals(container, "png", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
|
@ -4,14 +4,14 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
{
|
{
|
||||||
public class ResolutionConfiguration
|
public class ResolutionConfiguration
|
||||||
{
|
{
|
||||||
public int MaxWidth { get; set; }
|
|
||||||
|
|
||||||
public int MaxBitrate { get; set; }
|
|
||||||
|
|
||||||
public ResolutionConfiguration(int maxWidth, int maxBitrate)
|
public ResolutionConfiguration(int maxWidth, int maxBitrate)
|
||||||
{
|
{
|
||||||
MaxWidth = maxWidth;
|
MaxWidth = maxWidth;
|
||||||
MaxBitrate = maxBitrate;
|
MaxBitrate = maxBitrate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int MaxWidth { get; set; }
|
||||||
|
|
||||||
|
public int MaxBitrate { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,11 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
{
|
{
|
||||||
public class ResponseProfile
|
public class ResponseProfile
|
||||||
{
|
{
|
||||||
|
public ResponseProfile()
|
||||||
|
{
|
||||||
|
Conditions = Array.Empty<ProfileCondition>();
|
||||||
|
}
|
||||||
|
|
||||||
[XmlAttribute("container")]
|
[XmlAttribute("container")]
|
||||||
public string Container { get; set; }
|
public string Container { get; set; }
|
||||||
|
|
||||||
@ -28,11 +33,6 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
|
|
||||||
public ProfileCondition[] Conditions { get; set; }
|
public ProfileCondition[] Conditions { get; set; }
|
||||||
|
|
||||||
public ResponseProfile()
|
|
||||||
{
|
|
||||||
Conditions = Array.Empty<ProfileCondition>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public string[] GetContainers()
|
public string[] GetContainers()
|
||||||
{
|
{
|
||||||
return ContainerProfile.SplitValue(Container);
|
return ContainerProfile.SplitValue(Container);
|
||||||
|
@ -7,6 +7,46 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
{
|
{
|
||||||
public class SearchCriteria
|
public class SearchCriteria
|
||||||
{
|
{
|
||||||
|
public SearchCriteria(string search)
|
||||||
|
{
|
||||||
|
if (search.Length == 0)
|
||||||
|
{
|
||||||
|
throw new ArgumentException("String can't be empty.", nameof(search));
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchType = SearchType.Unknown;
|
||||||
|
|
||||||
|
string[] factors = RegexSplit(search, "(and|or)");
|
||||||
|
foreach (string factor in factors)
|
||||||
|
{
|
||||||
|
string[] subFactors = RegexSplit(factor.Trim().Trim('(').Trim(')').Trim(), "\\s", 3);
|
||||||
|
|
||||||
|
if (subFactors.Length == 3)
|
||||||
|
{
|
||||||
|
if (string.Equals("upnp:class", subFactors[0], StringComparison.OrdinalIgnoreCase)
|
||||||
|
&& (string.Equals("=", subFactors[1], StringComparison.Ordinal) || string.Equals("derivedfrom", subFactors[1], StringComparison.OrdinalIgnoreCase)))
|
||||||
|
{
|
||||||
|
if (string.Equals("\"object.item.imageItem\"", subFactors[2], StringComparison.Ordinal) || string.Equals("\"object.item.imageItem.photo\"", subFactors[2], StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
SearchType = SearchType.Image;
|
||||||
|
}
|
||||||
|
else if (string.Equals("\"object.item.videoItem\"", subFactors[2], StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
SearchType = SearchType.Video;
|
||||||
|
}
|
||||||
|
else if (string.Equals("\"object.container.playlistContainer\"", subFactors[2], StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
SearchType = SearchType.Playlist;
|
||||||
|
}
|
||||||
|
else if (string.Equals("\"object.container.album.musicAlbum\"", subFactors[2], StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
SearchType = SearchType.MusicAlbum;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public SearchType SearchType { get; set; }
|
public SearchType SearchType { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -31,45 +71,5 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
{
|
{
|
||||||
return Regex.Split(str, term, RegexOptions.IgnoreCase);
|
return Regex.Split(str, term, RegexOptions.IgnoreCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SearchCriteria(string search)
|
|
||||||
{
|
|
||||||
if (search.Length == 0)
|
|
||||||
{
|
|
||||||
throw new ArgumentException("String can't be empty.", nameof(search));
|
|
||||||
}
|
|
||||||
|
|
||||||
SearchType = SearchType.Unknown;
|
|
||||||
|
|
||||||
string[] factors = RegexSplit(search, "(and|or)");
|
|
||||||
foreach (string factor in factors)
|
|
||||||
{
|
|
||||||
string[] subFactors = RegexSplit(factor.Trim().Trim('(').Trim(')').Trim(), "\\s", 3);
|
|
||||||
|
|
||||||
if (subFactors.Length == 3)
|
|
||||||
{
|
|
||||||
if (string.Equals("upnp:class", subFactors[0], StringComparison.OrdinalIgnoreCase) &&
|
|
||||||
(string.Equals("=", subFactors[1], StringComparison.Ordinal) || string.Equals("derivedfrom", subFactors[1], StringComparison.OrdinalIgnoreCase)))
|
|
||||||
{
|
|
||||||
if (string.Equals("\"object.item.imageItem\"", subFactors[2], StringComparison.Ordinal) || string.Equals("\"object.item.imageItem.photo\"", subFactors[2], StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
SearchType = SearchType.Image;
|
|
||||||
}
|
|
||||||
else if (string.Equals("\"object.item.videoItem\"", subFactors[2], StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
SearchType = SearchType.Video;
|
|
||||||
}
|
|
||||||
else if (string.Equals("\"object.container.playlistContainer\"", subFactors[2], StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
SearchType = SearchType.Playlist;
|
|
||||||
}
|
|
||||||
else if (string.Equals("\"object.container.album.musicAlbum\"", subFactors[2], StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
SearchType = SearchType.MusicAlbum;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,10 +6,10 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
{
|
{
|
||||||
public class SortCriteria
|
public class SortCriteria
|
||||||
{
|
{
|
||||||
public SortOrder SortOrder => SortOrder.Ascending;
|
|
||||||
|
|
||||||
public SortCriteria(string value)
|
public SortCriteria(string value)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SortOrder SortOrder => SortOrder.Ascending;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -227,7 +227,7 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string NormalizeMediaSourceFormatIntoSingleContainer(string inputContainer, string _, DeviceProfile profile, DlnaProfileType type)
|
public static string NormalizeMediaSourceFormatIntoSingleContainer(string inputContainer, DeviceProfile profile, DlnaProfileType type)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(inputContainer))
|
if (string.IsNullOrEmpty(inputContainer))
|
||||||
{
|
{
|
||||||
@ -274,14 +274,14 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
if (options.ForceDirectPlay)
|
if (options.ForceDirectPlay)
|
||||||
{
|
{
|
||||||
playlistItem.PlayMethod = PlayMethod.DirectPlay;
|
playlistItem.PlayMethod = PlayMethod.DirectPlay;
|
||||||
playlistItem.Container = NormalizeMediaSourceFormatIntoSingleContainer(item.Container, item.Path, options.Profile, DlnaProfileType.Audio);
|
playlistItem.Container = NormalizeMediaSourceFormatIntoSingleContainer(item.Container, options.Profile, DlnaProfileType.Audio);
|
||||||
return playlistItem;
|
return playlistItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.ForceDirectStream)
|
if (options.ForceDirectStream)
|
||||||
{
|
{
|
||||||
playlistItem.PlayMethod = PlayMethod.DirectStream;
|
playlistItem.PlayMethod = PlayMethod.DirectStream;
|
||||||
playlistItem.Container = NormalizeMediaSourceFormatIntoSingleContainer(item.Container, item.Path, options.Profile, DlnaProfileType.Audio);
|
playlistItem.Container = NormalizeMediaSourceFormatIntoSingleContainer(item.Container, options.Profile, DlnaProfileType.Audio);
|
||||||
return playlistItem;
|
return playlistItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -349,7 +349,7 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
playlistItem.PlayMethod = PlayMethod.DirectStream;
|
playlistItem.PlayMethod = PlayMethod.DirectStream;
|
||||||
}
|
}
|
||||||
|
|
||||||
playlistItem.Container = NormalizeMediaSourceFormatIntoSingleContainer(item.Container, item.Path, options.Profile, DlnaProfileType.Audio);
|
playlistItem.Container = NormalizeMediaSourceFormatIntoSingleContainer(item.Container, options.Profile, DlnaProfileType.Audio);
|
||||||
|
|
||||||
return playlistItem;
|
return playlistItem;
|
||||||
}
|
}
|
||||||
@ -698,7 +698,7 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
if (directPlay != null)
|
if (directPlay != null)
|
||||||
{
|
{
|
||||||
playlistItem.PlayMethod = directPlay.Value;
|
playlistItem.PlayMethod = directPlay.Value;
|
||||||
playlistItem.Container = NormalizeMediaSourceFormatIntoSingleContainer(item.Container, item.Path, options.Profile, DlnaProfileType.Video);
|
playlistItem.Container = NormalizeMediaSourceFormatIntoSingleContainer(item.Container, options.Profile, DlnaProfileType.Video);
|
||||||
|
|
||||||
if (subtitleStream != null)
|
if (subtitleStream != null)
|
||||||
{
|
{
|
||||||
@ -1404,7 +1404,9 @@ namespace MediaBrowser.Model.Dlna
|
|||||||
{
|
{
|
||||||
_logger.LogInformation(
|
_logger.LogInformation(
|
||||||
"Bitrate exceeds {PlayBackMethod} limit: media bitrate: {MediaBitrate}, max bitrate: {MaxBitrate}",
|
"Bitrate exceeds {PlayBackMethod} limit: media bitrate: {MediaBitrate}, max bitrate: {MaxBitrate}",
|
||||||
playMethod, itemBitrate, requestedMaxBitrate);
|
playMethod,
|
||||||
|
itemBitrate,
|
||||||
|
requestedMaxBitrate);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -294,13 +294,13 @@ namespace MediaBrowser.Model.Dto
|
|||||||
public NameGuidPair[] GenreItems { get; set; }
|
public NameGuidPair[] GenreItems { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// If the item does not have a logo, this will hold the Id of the Parent that has one.
|
/// Gets or sets wether the item has a logo, this will hold the Id of the Parent that has one.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The parent logo item id.</value>
|
/// <value>The parent logo item id.</value>
|
||||||
public string ParentLogoItemId { get; set; }
|
public string ParentLogoItemId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// If the item does not have any backdrops, this will hold the Id of the Parent that has one.
|
/// Gets or sets wether the item has any backdrops, this will hold the Id of the Parent that has one.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The parent backdrop item id.</value>
|
/// <value>The parent backdrop item id.</value>
|
||||||
public string ParentBackdropItemId { get; set; }
|
public string ParentBackdropItemId { get; set; }
|
||||||
@ -318,7 +318,7 @@ namespace MediaBrowser.Model.Dto
|
|||||||
public int? LocalTrailerCount { get; set; }
|
public int? LocalTrailerCount { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// User data for this item based on the user it's being requested for.
|
/// Gets or sets the user data for this item based on the user it's being requested for.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The user data.</value>
|
/// <value>The user data.</value>
|
||||||
public UserItemDataDto UserData { get; set; }
|
public UserItemDataDto UserData { get; set; }
|
||||||
@ -506,7 +506,7 @@ namespace MediaBrowser.Model.Dto
|
|||||||
public string ParentLogoImageTag { get; set; }
|
public string ParentLogoImageTag { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// If the item does not have a art, this will hold the Id of the Parent that has one.
|
/// Gets or sets wether the item has fan art, this will hold the Id of the Parent that has one.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The parent art item id.</value>
|
/// <value>The parent art item id.</value>
|
||||||
public string ParentArtItemId { get; set; }
|
public string ParentArtItemId { get; set; }
|
||||||
@ -695,7 +695,7 @@ namespace MediaBrowser.Model.Dto
|
|||||||
public string ChannelPrimaryImageTag { get; set; }
|
public string ChannelPrimaryImageTag { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The start date of the recording, in UTC.
|
/// Gets or sets the start date of the recording, in UTC.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public DateTime? StartDate { get; set; }
|
public DateTime? StartDate { get; set; }
|
||||||
|
|
||||||
|
@ -12,6 +12,18 @@ namespace MediaBrowser.Model.Dto
|
|||||||
{
|
{
|
||||||
public class MediaSourceInfo
|
public class MediaSourceInfo
|
||||||
{
|
{
|
||||||
|
public MediaSourceInfo()
|
||||||
|
{
|
||||||
|
Formats = Array.Empty<string>();
|
||||||
|
MediaStreams = new List<MediaStream>();
|
||||||
|
MediaAttachments = Array.Empty<MediaAttachment>();
|
||||||
|
RequiredHttpHeaders = new Dictionary<string, string>();
|
||||||
|
SupportsTranscoding = true;
|
||||||
|
SupportsDirectStream = true;
|
||||||
|
SupportsDirectPlay = true;
|
||||||
|
SupportsProbing = true;
|
||||||
|
}
|
||||||
|
|
||||||
public MediaProtocol Protocol { get; set; }
|
public MediaProtocol Protocol { get; set; }
|
||||||
|
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
@ -31,6 +43,7 @@ namespace MediaBrowser.Model.Dto
|
|||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// Gets or sets a value indicating whether the media is remote.
|
||||||
/// Differentiate internet url vs local network.
|
/// Differentiate internet url vs local network.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsRemote { get; set; }
|
public bool IsRemote { get; set; }
|
||||||
@ -95,16 +108,28 @@ namespace MediaBrowser.Model.Dto
|
|||||||
|
|
||||||
public int? AnalyzeDurationMs { get; set; }
|
public int? AnalyzeDurationMs { get; set; }
|
||||||
|
|
||||||
public MediaSourceInfo()
|
[JsonIgnore]
|
||||||
|
public TranscodeReason[] TranscodeReasons { get; set; }
|
||||||
|
|
||||||
|
public int? DefaultAudioStreamIndex { get; set; }
|
||||||
|
|
||||||
|
public int? DefaultSubtitleStreamIndex { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public MediaStream VideoStream
|
||||||
{
|
{
|
||||||
Formats = Array.Empty<string>();
|
get
|
||||||
MediaStreams = new List<MediaStream>();
|
{
|
||||||
MediaAttachments = Array.Empty<MediaAttachment>();
|
foreach (var i in MediaStreams)
|
||||||
RequiredHttpHeaders = new Dictionary<string, string>();
|
{
|
||||||
SupportsTranscoding = true;
|
if (i.Type == MediaStreamType.Video)
|
||||||
SupportsDirectStream = true;
|
{
|
||||||
SupportsDirectPlay = true;
|
return i;
|
||||||
SupportsProbing = true;
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void InferTotalBitrate(bool force = false)
|
public void InferTotalBitrate(bool force = false)
|
||||||
@ -134,13 +159,6 @@ namespace MediaBrowser.Model.Dto
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public TranscodeReason[] TranscodeReasons { get; set; }
|
|
||||||
|
|
||||||
public int? DefaultAudioStreamIndex { get; set; }
|
|
||||||
|
|
||||||
public int? DefaultSubtitleStreamIndex { get; set; }
|
|
||||||
|
|
||||||
public MediaStream GetDefaultAudioStream(int? defaultIndex)
|
public MediaStream GetDefaultAudioStream(int? defaultIndex)
|
||||||
{
|
{
|
||||||
if (defaultIndex.HasValue)
|
if (defaultIndex.HasValue)
|
||||||
@ -175,23 +193,6 @@ namespace MediaBrowser.Model.Dto
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public MediaStream VideoStream
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
foreach (var i in MediaStreams)
|
|
||||||
{
|
|
||||||
if (i.Type == MediaStreamType.Video)
|
|
||||||
{
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public MediaStream GetMediaStream(MediaStreamType type, int index)
|
public MediaStream GetMediaStream(MediaStreamType type, int index)
|
||||||
{
|
{
|
||||||
foreach (var i in MediaStreams)
|
foreach (var i in MediaStreams)
|
||||||
|
@ -10,6 +10,15 @@ namespace MediaBrowser.Model.Dto
|
|||||||
{
|
{
|
||||||
public class MetadataEditorInfo
|
public class MetadataEditorInfo
|
||||||
{
|
{
|
||||||
|
public MetadataEditorInfo()
|
||||||
|
{
|
||||||
|
ParentalRatingOptions = Array.Empty<ParentalRating>();
|
||||||
|
Countries = Array.Empty<CountryInfo>();
|
||||||
|
Cultures = Array.Empty<CultureDto>();
|
||||||
|
ExternalIdInfos = Array.Empty<ExternalIdInfo>();
|
||||||
|
ContentTypeOptions = Array.Empty<NameValuePair>();
|
||||||
|
}
|
||||||
|
|
||||||
public ParentalRating[] ParentalRatingOptions { get; set; }
|
public ParentalRating[] ParentalRatingOptions { get; set; }
|
||||||
|
|
||||||
public CountryInfo[] Countries { get; set; }
|
public CountryInfo[] Countries { get; set; }
|
||||||
@ -21,14 +30,5 @@ namespace MediaBrowser.Model.Dto
|
|||||||
public string ContentType { get; set; }
|
public string ContentType { get; set; }
|
||||||
|
|
||||||
public NameValuePair[] ContentTypeOptions { get; set; }
|
public NameValuePair[] ContentTypeOptions { get; set; }
|
||||||
|
|
||||||
public MetadataEditorInfo()
|
|
||||||
{
|
|
||||||
ParentalRatingOptions = Array.Empty<ParentalRating>();
|
|
||||||
Countries = Array.Empty<CountryInfo>();
|
|
||||||
Cultures = Array.Empty<CultureDto>();
|
|
||||||
ExternalIdInfos = Array.Empty<ExternalIdInfo>();
|
|
||||||
ContentTypeOptions = Array.Empty<NameValuePair>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
14
MediaBrowser.Model/Dto/NameGuidPair.cs
Normal file
14
MediaBrowser.Model/Dto/NameGuidPair.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#nullable disable
|
||||||
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Model.Dto
|
||||||
|
{
|
||||||
|
public class NameGuidPair
|
||||||
|
{
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -19,11 +19,4 @@ namespace MediaBrowser.Model.Dto
|
|||||||
/// <value>The identifier.</value>
|
/// <value>The identifier.</value>
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class NameGuidPair
|
|
||||||
{
|
|
||||||
public string Name { get; set; }
|
|
||||||
|
|
||||||
public Guid Id { get; set; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,15 @@ namespace MediaBrowser.Model.Dto
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class UserDto : IItemDto, IHasServerId
|
public class UserDto : IItemDto, IHasServerId
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="UserDto"/> class.
|
||||||
|
/// </summary>
|
||||||
|
public UserDto()
|
||||||
|
{
|
||||||
|
Configuration = new UserConfiguration();
|
||||||
|
Policy = new UserPolicy();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the name.
|
/// Gets or sets the name.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -94,15 +103,6 @@ namespace MediaBrowser.Model.Dto
|
|||||||
/// <value>The primary image aspect ratio.</value>
|
/// <value>The primary image aspect ratio.</value>
|
||||||
public double? PrimaryImageAspectRatio { get; set; }
|
public double? PrimaryImageAspectRatio { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="UserDto"/> class.
|
|
||||||
/// </summary>
|
|
||||||
public UserDto()
|
|
||||||
{
|
|
||||||
Configuration = new UserConfiguration();
|
|
||||||
Policy = new UserPolicy();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
|
@ -24,36 +24,4 @@ namespace MediaBrowser.Model.Entities
|
|||||||
public const string Playlists = "playlists";
|
public const string Playlists = "playlists";
|
||||||
public const string Folders = "folders";
|
public const string Folders = "folders";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class SpecialFolder
|
|
||||||
{
|
|
||||||
public const string TvShowSeries = "TvShowSeries";
|
|
||||||
public const string TvGenres = "TvGenres";
|
|
||||||
public const string TvGenre = "TvGenre";
|
|
||||||
public const string TvLatest = "TvLatest";
|
|
||||||
public const string TvNextUp = "TvNextUp";
|
|
||||||
public const string TvResume = "TvResume";
|
|
||||||
public const string TvFavoriteSeries = "TvFavoriteSeries";
|
|
||||||
public const string TvFavoriteEpisodes = "TvFavoriteEpisodes";
|
|
||||||
|
|
||||||
public const string MovieLatest = "MovieLatest";
|
|
||||||
public const string MovieResume = "MovieResume";
|
|
||||||
public const string MovieMovies = "MovieMovies";
|
|
||||||
public const string MovieCollections = "MovieCollections";
|
|
||||||
public const string MovieFavorites = "MovieFavorites";
|
|
||||||
public const string MovieGenres = "MovieGenres";
|
|
||||||
public const string MovieGenre = "MovieGenre";
|
|
||||||
|
|
||||||
public const string MusicArtists = "MusicArtists";
|
|
||||||
public const string MusicAlbumArtists = "MusicAlbumArtists";
|
|
||||||
public const string MusicAlbums = "MusicAlbums";
|
|
||||||
public const string MusicGenres = "MusicGenres";
|
|
||||||
public const string MusicLatest = "MusicLatest";
|
|
||||||
public const string MusicPlaylists = "MusicPlaylists";
|
|
||||||
public const string MusicSongs = "MusicSongs";
|
|
||||||
public const string MusicFavorites = "MusicFavorites";
|
|
||||||
public const string MusicFavoriteArtists = "MusicFavoriteArtists";
|
|
||||||
public const string MusicFavoriteAlbums = "MusicFavoriteAlbums";
|
|
||||||
public const string MusicFavoriteSongs = "MusicFavoriteSongs";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -84,7 +84,7 @@ namespace MediaBrowser.Model.Entities
|
|||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the video range.
|
/// Gets the video range.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The video range.</value>
|
/// <value>The video range.</value>
|
||||||
public string VideoRange
|
public string VideoRange
|
||||||
@ -108,11 +108,11 @@ namespace MediaBrowser.Model.Entities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string localizedUndefined { get; set; }
|
public string LocalizedUndefined { get; set; }
|
||||||
|
|
||||||
public string localizedDefault { get; set; }
|
public string LocalizedDefault { get; set; }
|
||||||
|
|
||||||
public string localizedForced { get; set; }
|
public string LocalizedForced { get; set; }
|
||||||
|
|
||||||
public string DisplayTitle
|
public string DisplayTitle
|
||||||
{
|
{
|
||||||
@ -154,7 +154,7 @@ namespace MediaBrowser.Model.Entities
|
|||||||
|
|
||||||
if (IsDefault)
|
if (IsDefault)
|
||||||
{
|
{
|
||||||
attributes.Add(string.IsNullOrEmpty(localizedDefault) ? "Default" : localizedDefault);
|
attributes.Add(string.IsNullOrEmpty(LocalizedDefault) ? "Default" : LocalizedDefault);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(Title))
|
if (!string.IsNullOrEmpty(Title))
|
||||||
@ -229,17 +229,17 @@ namespace MediaBrowser.Model.Entities
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
attributes.Add(string.IsNullOrEmpty(localizedUndefined) ? "Und" : localizedUndefined);
|
attributes.Add(string.IsNullOrEmpty(LocalizedUndefined) ? "Und" : LocalizedUndefined);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsDefault)
|
if (IsDefault)
|
||||||
{
|
{
|
||||||
attributes.Add(string.IsNullOrEmpty(localizedDefault) ? "Default" : localizedDefault);
|
attributes.Add(string.IsNullOrEmpty(LocalizedDefault) ? "Default" : LocalizedDefault);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsForced)
|
if (IsForced)
|
||||||
{
|
{
|
||||||
attributes.Add(string.IsNullOrEmpty(localizedForced) ? "Forced" : localizedForced);
|
attributes.Add(string.IsNullOrEmpty(LocalizedForced) ? "Forced" : LocalizedForced);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(Title))
|
if (!string.IsNullOrEmpty(Title))
|
||||||
@ -266,67 +266,6 @@ namespace MediaBrowser.Model.Entities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetResolutionText()
|
|
||||||
{
|
|
||||||
var i = this;
|
|
||||||
|
|
||||||
if (i.Width.HasValue && i.Height.HasValue)
|
|
||||||
{
|
|
||||||
var width = i.Width.Value;
|
|
||||||
var height = i.Height.Value;
|
|
||||||
|
|
||||||
if (width >= 3800 || height >= 2000)
|
|
||||||
{
|
|
||||||
return "4K";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (width >= 2500)
|
|
||||||
{
|
|
||||||
if (i.IsInterlaced)
|
|
||||||
{
|
|
||||||
return "1440i";
|
|
||||||
}
|
|
||||||
|
|
||||||
return "1440p";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (width >= 1900 || height >= 1000)
|
|
||||||
{
|
|
||||||
if (i.IsInterlaced)
|
|
||||||
{
|
|
||||||
return "1080i";
|
|
||||||
}
|
|
||||||
|
|
||||||
return "1080p";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (width >= 1260 || height >= 700)
|
|
||||||
{
|
|
||||||
if (i.IsInterlaced)
|
|
||||||
{
|
|
||||||
return "720i";
|
|
||||||
}
|
|
||||||
|
|
||||||
return "720p";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (width >= 700 || height >= 440)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (i.IsInterlaced)
|
|
||||||
{
|
|
||||||
return "480i";
|
|
||||||
}
|
|
||||||
|
|
||||||
return "480p";
|
|
||||||
}
|
|
||||||
|
|
||||||
return "SD";
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string NalLengthSize { get; set; }
|
public string NalLengthSize { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -487,6 +426,96 @@ namespace MediaBrowser.Model.Entities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets a value indicating whether [supports external stream].
|
||||||
|
/// </summary>
|
||||||
|
/// <value><c>true</c> if [supports external stream]; otherwise, <c>false</c>.</value>
|
||||||
|
public bool SupportsExternalStream { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the filename.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The filename.</value>
|
||||||
|
public string Path { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the pixel format.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The pixel format.</value>
|
||||||
|
public string PixelFormat { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the level.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The level.</value>
|
||||||
|
public double? Level { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets whether this instance is anamorphic.
|
||||||
|
/// </summary>
|
||||||
|
/// <value><c>true</c> if this instance is anamorphic; otherwise, <c>false</c>.</value>
|
||||||
|
public bool? IsAnamorphic { get; set; }
|
||||||
|
|
||||||
|
private string GetResolutionText()
|
||||||
|
{
|
||||||
|
var i = this;
|
||||||
|
|
||||||
|
if (i.Width.HasValue && i.Height.HasValue)
|
||||||
|
{
|
||||||
|
var width = i.Width.Value;
|
||||||
|
var height = i.Height.Value;
|
||||||
|
|
||||||
|
if (width >= 3800 || height >= 2000)
|
||||||
|
{
|
||||||
|
return "4K";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (width >= 2500)
|
||||||
|
{
|
||||||
|
if (i.IsInterlaced)
|
||||||
|
{
|
||||||
|
return "1440i";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "1440p";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (width >= 1900 || height >= 1000)
|
||||||
|
{
|
||||||
|
if (i.IsInterlaced)
|
||||||
|
{
|
||||||
|
return "1080i";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "1080p";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (width >= 1260 || height >= 700)
|
||||||
|
{
|
||||||
|
if (i.IsInterlaced)
|
||||||
|
{
|
||||||
|
return "720i";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "720p";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (width >= 700 || height >= 440)
|
||||||
|
{
|
||||||
|
if (i.IsInterlaced)
|
||||||
|
{
|
||||||
|
return "480i";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "480p";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "SD";
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public static bool IsTextFormat(string format)
|
public static bool IsTextFormat(string format)
|
||||||
{
|
{
|
||||||
string codec = format ?? string.Empty;
|
string codec = format ?? string.Empty;
|
||||||
@ -533,35 +562,5 @@ namespace MediaBrowser.Model.Entities
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets a value indicating whether [supports external stream].
|
|
||||||
/// </summary>
|
|
||||||
/// <value><c>true</c> if [supports external stream]; otherwise, <c>false</c>.</value>
|
|
||||||
public bool SupportsExternalStream { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the filename.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The filename.</value>
|
|
||||||
public string Path { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the pixel format.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The pixel format.</value>
|
|
||||||
public string PixelFormat { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the level.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The level.</value>
|
|
||||||
public double? Level { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets a value indicating whether this instance is anamorphic.
|
|
||||||
/// </summary>
|
|
||||||
/// <value><c>true</c> if this instance is anamorphic; otherwise, <c>false</c>.</value>
|
|
||||||
public bool? IsAnamorphic { get; set; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,40 +0,0 @@
|
|||||||
#nullable disable
|
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Model.Entities
|
|
||||||
{
|
|
||||||
public class PackageReviewInfo
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the package id (database key) for this review.
|
|
||||||
/// </summary>
|
|
||||||
public int id { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the rating value.
|
|
||||||
/// </summary>
|
|
||||||
public int rating { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets whether or not this review recommends this item.
|
|
||||||
/// </summary>
|
|
||||||
public bool recommend { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets a short description of the review.
|
|
||||||
/// </summary>
|
|
||||||
public string title { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the full review.
|
|
||||||
/// </summary>
|
|
||||||
public string review { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the time of review.
|
|
||||||
/// </summary>
|
|
||||||
public DateTime timestamp { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
36
MediaBrowser.Model/Entities/SpecialFolder.cs
Normal file
36
MediaBrowser.Model/Entities/SpecialFolder.cs
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
|
namespace MediaBrowser.Model.Entities
|
||||||
|
{
|
||||||
|
public static class SpecialFolder
|
||||||
|
{
|
||||||
|
public const string TvShowSeries = "TvShowSeries";
|
||||||
|
public const string TvGenres = "TvGenres";
|
||||||
|
public const string TvGenre = "TvGenre";
|
||||||
|
public const string TvLatest = "TvLatest";
|
||||||
|
public const string TvNextUp = "TvNextUp";
|
||||||
|
public const string TvResume = "TvResume";
|
||||||
|
public const string TvFavoriteSeries = "TvFavoriteSeries";
|
||||||
|
public const string TvFavoriteEpisodes = "TvFavoriteEpisodes";
|
||||||
|
|
||||||
|
public const string MovieLatest = "MovieLatest";
|
||||||
|
public const string MovieResume = "MovieResume";
|
||||||
|
public const string MovieMovies = "MovieMovies";
|
||||||
|
public const string MovieCollections = "MovieCollections";
|
||||||
|
public const string MovieFavorites = "MovieFavorites";
|
||||||
|
public const string MovieGenres = "MovieGenres";
|
||||||
|
public const string MovieGenre = "MovieGenre";
|
||||||
|
|
||||||
|
public const string MusicArtists = "MusicArtists";
|
||||||
|
public const string MusicAlbumArtists = "MusicAlbumArtists";
|
||||||
|
public const string MusicAlbums = "MusicAlbums";
|
||||||
|
public const string MusicGenres = "MusicGenres";
|
||||||
|
public const string MusicLatest = "MusicLatest";
|
||||||
|
public const string MusicPlaylists = "MusicPlaylists";
|
||||||
|
public const string MusicSongs = "MusicSongs";
|
||||||
|
public const string MusicFavorites = "MusicFavorites";
|
||||||
|
public const string MusicFavoriteArtists = "MusicFavoriteArtists";
|
||||||
|
public const string MusicFavoriteAlbums = "MusicFavoriteAlbums";
|
||||||
|
public const string MusicFavoriteSongs = "MusicFavoriteSongs";
|
||||||
|
}
|
||||||
|
}
|
@ -11,6 +11,14 @@ namespace MediaBrowser.Model.Entities
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class VirtualFolderInfo
|
public class VirtualFolderInfo
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="VirtualFolderInfo"/> class.
|
||||||
|
/// </summary>
|
||||||
|
public VirtualFolderInfo()
|
||||||
|
{
|
||||||
|
Locations = Array.Empty<string>();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the name.
|
/// Gets or sets the name.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -31,14 +39,6 @@ namespace MediaBrowser.Model.Entities
|
|||||||
|
|
||||||
public LibraryOptions LibraryOptions { get; set; }
|
public LibraryOptions LibraryOptions { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="VirtualFolderInfo"/> class.
|
|
||||||
/// </summary>
|
|
||||||
public VirtualFolderInfo()
|
|
||||||
{
|
|
||||||
Locations = Array.Empty<string>();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the item identifier.
|
/// Gets or sets the item identifier.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -10,6 +10,11 @@ namespace MediaBrowser.Model.Globalization
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class CultureDto
|
public class CultureDto
|
||||||
{
|
{
|
||||||
|
public CultureDto()
|
||||||
|
{
|
||||||
|
ThreeLetterISOLanguageNames = Array.Empty<string>();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the name.
|
/// Gets or sets the name.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -29,7 +34,7 @@ namespace MediaBrowser.Model.Globalization
|
|||||||
public string TwoLetterISOLanguageName { get; set; }
|
public string TwoLetterISOLanguageName { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the name of the three letter ISO language.
|
/// Gets the name of the three letter ISO language.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The name of the three letter ISO language.</value>
|
/// <value>The name of the three letter ISO language.</value>
|
||||||
public string ThreeLetterISOLanguageName
|
public string ThreeLetterISOLanguageName
|
||||||
@ -47,10 +52,5 @@ namespace MediaBrowser.Model.Globalization
|
|||||||
}
|
}
|
||||||
|
|
||||||
public string[] ThreeLetterISOLanguageNames { get; set; }
|
public string[] ThreeLetterISOLanguageNames { get; set; }
|
||||||
|
|
||||||
public CultureDto()
|
|
||||||
{
|
|
||||||
ThreeLetterISOLanguageNames = Array.Empty<string>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -155,13 +155,16 @@ namespace MediaBrowser.Model.IO
|
|||||||
/// Gets the directories.
|
/// Gets the directories.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="path">The path.</param>
|
/// <param name="path">The path.</param>
|
||||||
/// <param name="recursive">if set to <c>true</c> [recursive].</param>
|
/// <param name="recursive">If set to <c>true</c> also searches in subdirectiories.</param>
|
||||||
/// <returns>IEnumerable<DirectoryInfo>.</returns>
|
/// <returns>All found directories.</returns>
|
||||||
IEnumerable<FileSystemMetadata> GetDirectories(string path, bool recursive = false);
|
IEnumerable<FileSystemMetadata> GetDirectories(string path, bool recursive = false);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the files.
|
/// Gets the files.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="path">The path in which to search.</param>
|
||||||
|
/// <param name="recursive">If set to <c>true</c> also searches in subdirectiories.</param>
|
||||||
|
/// <returns>All found files.</returns>
|
||||||
IEnumerable<FileSystemMetadata> GetFiles(string path, bool recursive = false);
|
IEnumerable<FileSystemMetadata> GetFiles(string path, bool recursive = false);
|
||||||
|
|
||||||
IEnumerable<FileSystemMetadata> GetFiles(string path, IReadOnlyList<string> extensions, bool enableCaseSensitiveExtensions, bool recursive);
|
IEnumerable<FileSystemMetadata> GetFiles(string path, IReadOnlyList<string> extensions, bool enableCaseSensitiveExtensions, bool recursive);
|
||||||
|
@ -9,7 +9,7 @@ namespace MediaBrowser.Model.LiveTv
|
|||||||
public class BaseTimerInfoDto : IHasServerId
|
public class BaseTimerInfoDto : IHasServerId
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Id of the recording.
|
/// Gets or sets the Id of the recording.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
|
|
||||||
@ -28,7 +28,7 @@ namespace MediaBrowser.Model.LiveTv
|
|||||||
public string ExternalId { get; set; }
|
public string ExternalId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// ChannelId of the recording.
|
/// Gets or sets the channel id of the recording.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Guid ChannelId { get; set; }
|
public Guid ChannelId { get; set; }
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ namespace MediaBrowser.Model.LiveTv
|
|||||||
public string ExternalChannelId { get; set; }
|
public string ExternalChannelId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// ChannelName of the recording.
|
/// Gets or sets the channel name of the recording.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string ChannelName { get; set; }
|
public string ChannelName { get; set; }
|
||||||
|
|
||||||
@ -58,22 +58,22 @@ namespace MediaBrowser.Model.LiveTv
|
|||||||
public string ExternalProgramId { get; set; }
|
public string ExternalProgramId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Name of the recording.
|
/// Gets or sets the name of the recording.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Description of the recording.
|
/// Gets or sets the description of the recording.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Overview { get; set; }
|
public string Overview { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The start date of the recording, in UTC.
|
/// Gets or sets the start date of the recording, in UTC.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public DateTime StartDate { get; set; }
|
public DateTime StartDate { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The end date of the recording, in UTC.
|
/// Gets or sets the end date of the recording, in UTC.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public DateTime EndDate { get; set; }
|
public DateTime EndDate { get; set; }
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ namespace MediaBrowser.Model.LiveTv
|
|||||||
public bool IsPrePaddingRequired { get; set; }
|
public bool IsPrePaddingRequired { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// If the item does not have any backdrops, this will hold the Id of the Parent that has one.
|
/// Gets or sets the Id of the Parent that has a backdrop if the item does not have one.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The parent backdrop item id.</value>
|
/// <value>The parent backdrop item id.</value>
|
||||||
public string ParentBackdropItemId { get; set; }
|
public string ParentBackdropItemId { get; set; }
|
||||||
|
58
MediaBrowser.Model/LiveTv/ListingsProviderInfo.cs
Normal file
58
MediaBrowser.Model/LiveTv/ListingsProviderInfo.cs
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#nullable disable
|
||||||
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using MediaBrowser.Model.Dto;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Model.LiveTv
|
||||||
|
{
|
||||||
|
public class ListingsProviderInfo
|
||||||
|
{
|
||||||
|
public ListingsProviderInfo()
|
||||||
|
{
|
||||||
|
NewsCategories = new[] { "news", "journalism", "documentary", "current affairs" };
|
||||||
|
SportsCategories = new[] { "sports", "basketball", "baseball", "football" };
|
||||||
|
KidsCategories = new[] { "kids", "family", "children", "childrens", "disney" };
|
||||||
|
MovieCategories = new[] { "movie" };
|
||||||
|
EnabledTuners = Array.Empty<string>();
|
||||||
|
EnableAllTuners = true;
|
||||||
|
ChannelMappings = Array.Empty<NameValuePair>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Id { get; set; }
|
||||||
|
|
||||||
|
public string Type { get; set; }
|
||||||
|
|
||||||
|
public string Username { get; set; }
|
||||||
|
|
||||||
|
public string Password { get; set; }
|
||||||
|
|
||||||
|
public string ListingsId { get; set; }
|
||||||
|
|
||||||
|
public string ZipCode { get; set; }
|
||||||
|
|
||||||
|
public string Country { get; set; }
|
||||||
|
|
||||||
|
public string Path { get; set; }
|
||||||
|
|
||||||
|
public string[] EnabledTuners { get; set; }
|
||||||
|
|
||||||
|
public bool EnableAllTuners { get; set; }
|
||||||
|
|
||||||
|
public string[] NewsCategories { get; set; }
|
||||||
|
|
||||||
|
public string[] SportsCategories { get; set; }
|
||||||
|
|
||||||
|
public string[] KidsCategories { get; set; }
|
||||||
|
|
||||||
|
public string[] MovieCategories { get; set; }
|
||||||
|
|
||||||
|
public NameValuePair[] ChannelMappings { get; set; }
|
||||||
|
|
||||||
|
public string MoviePrefix { get; set; }
|
||||||
|
|
||||||
|
public string PreferredLanguage { get; set; }
|
||||||
|
|
||||||
|
public string UserAgent { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -11,6 +11,12 @@ namespace MediaBrowser.Model.LiveTv
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class LiveTvChannelQuery
|
public class LiveTvChannelQuery
|
||||||
{
|
{
|
||||||
|
public LiveTvChannelQuery()
|
||||||
|
{
|
||||||
|
EnableUserData = true;
|
||||||
|
SortBy = Array.Empty<string>();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the type of the channel.
|
/// Gets or sets the type of the channel.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -48,13 +54,13 @@ namespace MediaBrowser.Model.LiveTv
|
|||||||
public Guid UserId { get; set; }
|
public Guid UserId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Skips over a given number of items within the results. Use for paging.
|
/// gets or sets the start index. Used for paging.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The start index.</value>
|
/// <value>The start index.</value>
|
||||||
public int? StartIndex { get; set; }
|
public int? StartIndex { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The maximum number of items to return.
|
/// Gets or sets the maximum number of items to return.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The limit.</value>
|
/// <value>The limit.</value>
|
||||||
public int? Limit { get; set; }
|
public int? Limit { get; set; }
|
||||||
@ -68,15 +74,15 @@ namespace MediaBrowser.Model.LiveTv
|
|||||||
public bool EnableUserData { get; set; }
|
public bool EnableUserData { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Used to specific whether to return news or not.
|
/// Gets or sets a value whether to return news or not.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>If set to null, all programs will be returned</remarks>
|
/// <remarks>If set to <c>null</c>, all programs will be returned.</remarks>
|
||||||
public bool? IsNews { get; set; }
|
public bool? IsNews { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Used to specific whether to return movies or not.
|
/// Gets or sets a value whether to return movies or not.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>If set to null, all programs will be returned</remarks>
|
/// <remarks>If set to <c>null</c>, all programs will be returned.</remarks>
|
||||||
public bool? IsMovie { get; set; }
|
public bool? IsMovie { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -96,15 +102,9 @@ namespace MediaBrowser.Model.LiveTv
|
|||||||
public string[] SortBy { get; set; }
|
public string[] SortBy { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The sort order to return results with.
|
/// Gets or sets the sort order to return results with.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The sort order.</value>
|
/// <value>The sort order.</value>
|
||||||
public SortOrder? SortOrder { get; set; }
|
public SortOrder? SortOrder { get; set; }
|
||||||
|
|
||||||
public LiveTvChannelQuery()
|
|
||||||
{
|
|
||||||
EnableUserData = true;
|
|
||||||
SortBy = Array.Empty<string>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,12 +2,19 @@
|
|||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using MediaBrowser.Model.Dto;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Model.LiveTv
|
namespace MediaBrowser.Model.LiveTv
|
||||||
{
|
{
|
||||||
public class LiveTvOptions
|
public class LiveTvOptions
|
||||||
{
|
{
|
||||||
|
public LiveTvOptions()
|
||||||
|
{
|
||||||
|
TunerHosts = Array.Empty<TunerHostInfo>();
|
||||||
|
ListingProviders = Array.Empty<ListingsProviderInfo>();
|
||||||
|
MediaLocationsCreated = Array.Empty<string>();
|
||||||
|
RecordingPostProcessorArguments = "\"{path}\"";
|
||||||
|
}
|
||||||
|
|
||||||
public int? GuideDays { get; set; }
|
public int? GuideDays { get; set; }
|
||||||
|
|
||||||
public string RecordingPath { get; set; }
|
public string RecordingPath { get; set; }
|
||||||
@ -33,93 +40,5 @@ namespace MediaBrowser.Model.LiveTv
|
|||||||
public string RecordingPostProcessor { get; set; }
|
public string RecordingPostProcessor { get; set; }
|
||||||
|
|
||||||
public string RecordingPostProcessorArguments { get; set; }
|
public string RecordingPostProcessorArguments { get; set; }
|
||||||
|
|
||||||
public LiveTvOptions()
|
|
||||||
{
|
|
||||||
TunerHosts = Array.Empty<TunerHostInfo>();
|
|
||||||
ListingProviders = Array.Empty<ListingsProviderInfo>();
|
|
||||||
MediaLocationsCreated = Array.Empty<string>();
|
|
||||||
RecordingPostProcessorArguments = "\"{path}\"";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class TunerHostInfo
|
|
||||||
{
|
|
||||||
public string Id { get; set; }
|
|
||||||
|
|
||||||
public string Url { get; set; }
|
|
||||||
|
|
||||||
public string Type { get; set; }
|
|
||||||
|
|
||||||
public string DeviceId { get; set; }
|
|
||||||
|
|
||||||
public string FriendlyName { get; set; }
|
|
||||||
|
|
||||||
public bool ImportFavoritesOnly { get; set; }
|
|
||||||
|
|
||||||
public bool AllowHWTranscoding { get; set; }
|
|
||||||
|
|
||||||
public bool EnableStreamLooping { get; set; }
|
|
||||||
|
|
||||||
public string Source { get; set; }
|
|
||||||
|
|
||||||
public int TunerCount { get; set; }
|
|
||||||
|
|
||||||
public string UserAgent { get; set; }
|
|
||||||
|
|
||||||
public TunerHostInfo()
|
|
||||||
{
|
|
||||||
AllowHWTranscoding = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class ListingsProviderInfo
|
|
||||||
{
|
|
||||||
public string Id { get; set; }
|
|
||||||
|
|
||||||
public string Type { get; set; }
|
|
||||||
|
|
||||||
public string Username { get; set; }
|
|
||||||
|
|
||||||
public string Password { get; set; }
|
|
||||||
|
|
||||||
public string ListingsId { get; set; }
|
|
||||||
|
|
||||||
public string ZipCode { get; set; }
|
|
||||||
|
|
||||||
public string Country { get; set; }
|
|
||||||
|
|
||||||
public string Path { get; set; }
|
|
||||||
|
|
||||||
public string[] EnabledTuners { get; set; }
|
|
||||||
|
|
||||||
public bool EnableAllTuners { get; set; }
|
|
||||||
|
|
||||||
public string[] NewsCategories { get; set; }
|
|
||||||
|
|
||||||
public string[] SportsCategories { get; set; }
|
|
||||||
|
|
||||||
public string[] KidsCategories { get; set; }
|
|
||||||
|
|
||||||
public string[] MovieCategories { get; set; }
|
|
||||||
|
|
||||||
public NameValuePair[] ChannelMappings { get; set; }
|
|
||||||
|
|
||||||
public string MoviePrefix { get; set; }
|
|
||||||
|
|
||||||
public string PreferredLanguage { get; set; }
|
|
||||||
|
|
||||||
public string UserAgent { get; set; }
|
|
||||||
|
|
||||||
public ListingsProviderInfo()
|
|
||||||
{
|
|
||||||
NewsCategories = new[] { "news", "journalism", "documentary", "current affairs" };
|
|
||||||
SportsCategories = new[] { "sports", "basketball", "baseball", "football" };
|
|
||||||
KidsCategories = new[] { "kids", "family", "children", "childrens", "disney" };
|
|
||||||
MovieCategories = new[] { "movie" };
|
|
||||||
EnabledTuners = Array.Empty<string>();
|
|
||||||
EnableAllTuners = true;
|
|
||||||
ChannelMappings = Array.Empty<NameValuePair>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,11 @@ namespace MediaBrowser.Model.LiveTv
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class LiveTvServiceInfo
|
public class LiveTvServiceInfo
|
||||||
{
|
{
|
||||||
|
public LiveTvServiceInfo()
|
||||||
|
{
|
||||||
|
Tuners = Array.Empty<string>();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the name.
|
/// Gets or sets the name.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -53,10 +58,5 @@ namespace MediaBrowser.Model.LiveTv
|
|||||||
public bool IsVisible { get; set; }
|
public bool IsVisible { get; set; }
|
||||||
|
|
||||||
public string[] Tuners { get; set; }
|
public string[] Tuners { get; set; }
|
||||||
|
|
||||||
public LiveTvServiceInfo()
|
|
||||||
{
|
|
||||||
Tuners = Array.Empty<string>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,11 @@ namespace MediaBrowser.Model.LiveTv
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class RecordingQuery
|
public class RecordingQuery
|
||||||
{
|
{
|
||||||
|
public RecordingQuery()
|
||||||
|
{
|
||||||
|
EnableTotalRecordCount = true;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the channel identifier.
|
/// Gets or sets the channel identifier.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -31,13 +36,13 @@ namespace MediaBrowser.Model.LiveTv
|
|||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Skips over a given number of items within the results. Use for paging.
|
/// Gets or sets the start index. Use for paging.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The start index.</value>
|
/// <value>The start index.</value>
|
||||||
public int? StartIndex { get; set; }
|
public int? StartIndex { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The maximum number of items to return.
|
/// Gets or sets the maximum number of items to return.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The limit.</value>
|
/// <value>The limit.</value>
|
||||||
public int? Limit { get; set; }
|
public int? Limit { get; set; }
|
||||||
@ -61,7 +66,7 @@ namespace MediaBrowser.Model.LiveTv
|
|||||||
public string SeriesTimerId { get; set; }
|
public string SeriesTimerId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Fields to return within the items, in addition to basic information.
|
/// Gets or sets the fields to return within the items, in addition to basic information.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The fields.</value>
|
/// <value>The fields.</value>
|
||||||
public ItemFields[] Fields { get; set; }
|
public ItemFields[] Fields { get; set; }
|
||||||
@ -85,10 +90,5 @@ namespace MediaBrowser.Model.LiveTv
|
|||||||
public ImageType[] EnableImageTypes { get; set; }
|
public ImageType[] EnableImageTypes { get; set; }
|
||||||
|
|
||||||
public bool EnableTotalRecordCount { get; set; }
|
public bool EnableTotalRecordCount { get; set; }
|
||||||
|
|
||||||
public RecordingQuery()
|
|
||||||
{
|
|
||||||
EnableTotalRecordCount = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,14 @@ using MediaBrowser.Model.Entities;
|
|||||||
|
|
||||||
namespace MediaBrowser.Model.LiveTv
|
namespace MediaBrowser.Model.LiveTv
|
||||||
{
|
{
|
||||||
|
public enum KeepUntil
|
||||||
|
{
|
||||||
|
UntilDeleted,
|
||||||
|
UntilSpaceNeeded,
|
||||||
|
UntilWatched,
|
||||||
|
UntilDate
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class SeriesTimerInfoDto.
|
/// Class SeriesTimerInfoDto.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -83,12 +91,4 @@ namespace MediaBrowser.Model.LiveTv
|
|||||||
/// <value>The parent primary image tag.</value>
|
/// <value>The parent primary image tag.</value>
|
||||||
public string ParentPrimaryImageTag { get; set; }
|
public string ParentPrimaryImageTag { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum KeepUntil
|
|
||||||
{
|
|
||||||
UntilDeleted,
|
|
||||||
UntilSpaceNeeded,
|
|
||||||
UntilWatched,
|
|
||||||
UntilDate
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
38
MediaBrowser.Model/LiveTv/TunerHostInfo.cs
Normal file
38
MediaBrowser.Model/LiveTv/TunerHostInfo.cs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#nullable disable
|
||||||
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using MediaBrowser.Model.Dto;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Model.LiveTv
|
||||||
|
{
|
||||||
|
public class TunerHostInfo
|
||||||
|
{
|
||||||
|
public TunerHostInfo()
|
||||||
|
{
|
||||||
|
AllowHWTranscoding = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Id { get; set; }
|
||||||
|
|
||||||
|
public string Url { get; set; }
|
||||||
|
|
||||||
|
public string Type { get; set; }
|
||||||
|
|
||||||
|
public string DeviceId { get; set; }
|
||||||
|
|
||||||
|
public string FriendlyName { get; set; }
|
||||||
|
|
||||||
|
public bool ImportFavoritesOnly { get; set; }
|
||||||
|
|
||||||
|
public bool AllowHWTranscoding { get; set; }
|
||||||
|
|
||||||
|
public bool EnableStreamLooping { get; set; }
|
||||||
|
|
||||||
|
public string Source { get; set; }
|
||||||
|
|
||||||
|
public int TunerCount { get; set; }
|
||||||
|
|
||||||
|
public string UserAgent { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -17,7 +17,7 @@
|
|||||||
<TargetFramework>net5.0</TargetFramework>
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||||
<TreatWarningsAsErrors Condition=" '$(Configuration)' == 'Release' ">true</TreatWarningsAsErrors>
|
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<LangVersion>latest</LangVersion>
|
<LangVersion>latest</LangVersion>
|
||||||
<PublishRepositoryUrl>true</PublishRepositoryUrl>
|
<PublishRepositoryUrl>true</PublishRepositoryUrl>
|
||||||
@ -44,7 +44,7 @@
|
|||||||
|
|
||||||
<!-- Code Analyzers-->
|
<!-- Code Analyzers-->
|
||||||
<ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
|
<ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8" PrivateAssets="All" />
|
<!-- <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8" PrivateAssets="All" /> -->
|
||||||
<PackageReference Include="SerilogAnalyzer" Version="0.15.0" PrivateAssets="All" />
|
<PackageReference Include="SerilogAnalyzer" Version="0.15.0" PrivateAssets="All" />
|
||||||
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="All" />
|
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="All" />
|
||||||
<PackageReference Include="SmartAnalyzers.MultithreadingAnalyzer" Version="1.1.31" PrivateAssets="All" />
|
<PackageReference Include="SmartAnalyzers.MultithreadingAnalyzer" Version="1.1.31" PrivateAssets="All" />
|
||||||
|
@ -10,6 +10,17 @@ namespace MediaBrowser.Model.MediaInfo
|
|||||||
{
|
{
|
||||||
public class MediaInfo : MediaSourceInfo, IHasProviderIds
|
public class MediaInfo : MediaSourceInfo, IHasProviderIds
|
||||||
{
|
{
|
||||||
|
public MediaInfo()
|
||||||
|
{
|
||||||
|
Chapters = Array.Empty<ChapterInfo>();
|
||||||
|
Artists = Array.Empty<string>();
|
||||||
|
AlbumArtists = Array.Empty<string>();
|
||||||
|
Studios = Array.Empty<string>();
|
||||||
|
Genres = Array.Empty<string>();
|
||||||
|
People = Array.Empty<BaseItemPerson>();
|
||||||
|
ProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||||
|
}
|
||||||
|
|
||||||
public ChapterInfo[] Chapters { get; set; }
|
public ChapterInfo[] Chapters { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -69,16 +80,5 @@ namespace MediaBrowser.Model.MediaInfo
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The overview.</value>
|
/// <value>The overview.</value>
|
||||||
public string Overview { get; set; }
|
public string Overview { get; set; }
|
||||||
|
|
||||||
public MediaInfo()
|
|
||||||
{
|
|
||||||
Chapters = Array.Empty<ChapterInfo>();
|
|
||||||
Artists = Array.Empty<string>();
|
|
||||||
AlbumArtists = Array.Empty<string>();
|
|
||||||
Studios = Array.Empty<string>();
|
|
||||||
Genres = Array.Empty<string>();
|
|
||||||
People = Array.Empty<BaseItemPerson>();
|
|
||||||
ProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,17 @@ namespace MediaBrowser.Model.MediaInfo
|
|||||||
{
|
{
|
||||||
public class PlaybackInfoRequest
|
public class PlaybackInfoRequest
|
||||||
{
|
{
|
||||||
|
public PlaybackInfoRequest()
|
||||||
|
{
|
||||||
|
EnableDirectPlay = true;
|
||||||
|
EnableDirectStream = true;
|
||||||
|
EnableTranscoding = true;
|
||||||
|
AllowVideoStreamCopy = true;
|
||||||
|
AllowAudioStreamCopy = true;
|
||||||
|
IsPlayback = true;
|
||||||
|
DirectPlayProtocols = new MediaProtocol[] { MediaProtocol.Http };
|
||||||
|
}
|
||||||
|
|
||||||
public Guid Id { get; set; }
|
public Guid Id { get; set; }
|
||||||
|
|
||||||
public Guid UserId { get; set; }
|
public Guid UserId { get; set; }
|
||||||
@ -43,16 +54,5 @@ namespace MediaBrowser.Model.MediaInfo
|
|||||||
public bool AutoOpenLiveStream { get; set; }
|
public bool AutoOpenLiveStream { get; set; }
|
||||||
|
|
||||||
public MediaProtocol[] DirectPlayProtocols { get; set; }
|
public MediaProtocol[] DirectPlayProtocols { get; set; }
|
||||||
|
|
||||||
public PlaybackInfoRequest()
|
|
||||||
{
|
|
||||||
EnableDirectPlay = true;
|
|
||||||
EnableDirectStream = true;
|
|
||||||
EnableTranscoding = true;
|
|
||||||
AllowVideoStreamCopy = true;
|
|
||||||
AllowAudioStreamCopy = true;
|
|
||||||
IsPlayback = true;
|
|
||||||
DirectPlayProtocols = new MediaProtocol[] { MediaProtocol.Http };
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,14 @@ namespace MediaBrowser.Model.MediaInfo
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class PlaybackInfoResponse
|
public class PlaybackInfoResponse
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="PlaybackInfoResponse" /> class.
|
||||||
|
/// </summary>
|
||||||
|
public PlaybackInfoResponse()
|
||||||
|
{
|
||||||
|
MediaSources = Array.Empty<MediaSourceInfo>();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the media sources.
|
/// Gets or sets the media sources.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -27,13 +35,5 @@ namespace MediaBrowser.Model.MediaInfo
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The error code.</value>
|
/// <value>The error code.</value>
|
||||||
public PlaybackErrorCode? ErrorCode { get; set; }
|
public PlaybackErrorCode? ErrorCode { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="PlaybackInfoResponse" /> class.
|
|
||||||
/// </summary>
|
|
||||||
public PlaybackInfoResponse()
|
|
||||||
{
|
|
||||||
MediaSources = Array.Empty<MediaSourceInfo>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,11 +7,11 @@ namespace MediaBrowser.Model.MediaInfo
|
|||||||
{
|
{
|
||||||
public class SubtitleTrackInfo
|
public class SubtitleTrackInfo
|
||||||
{
|
{
|
||||||
public IReadOnlyList<SubtitleTrackEvent> TrackEvents { get; set; }
|
|
||||||
|
|
||||||
public SubtitleTrackInfo()
|
public SubtitleTrackInfo()
|
||||||
{
|
{
|
||||||
TrackEvents = Array.Empty<SubtitleTrackEvent>();
|
TrackEvents = Array.Empty<SubtitleTrackEvent>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IReadOnlyList<SubtitleTrackEvent> TrackEvents { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,12 @@ namespace MediaBrowser.Model.Net
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sends a UDP message to a particular end point (uni or multicast).
|
/// Sends a UDP message to a particular end point (uni or multicast).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="buffer">An array of type <see cref="byte" /> that contains the data to send.</param>
|
||||||
|
/// <param name="offset">The zero-based position in buffer at which to begin sending data.</param>
|
||||||
|
/// <param name="bytes">The number of bytes to send.</param>
|
||||||
|
/// <param name="endPoint">An <see cref="IPEndPoint" /> that represents the remote device.</param>
|
||||||
|
/// <param name="cancellationToken">The cancellation token to cancel operation.</param>
|
||||||
|
/// <returns>The task object representing the asynchronous operation.</returns>
|
||||||
Task SendToAsync(byte[] buffer, int offset, int bytes, IPEndPoint endPoint, CancellationToken cancellationToken);
|
Task SendToAsync(byte[] buffer, int offset, int bytes, IPEndPoint endPoint, CancellationToken cancellationToken);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,9 @@ namespace MediaBrowser.Model.Net
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a new unicast socket using the specified local port number.
|
/// Creates a new unicast socket using the specified local port number.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="localIp">The local IP address to bind to.</param>
|
||||||
|
/// <param name="localPort">The local port to bind to.</param>
|
||||||
|
/// <returns>A new unicast socket using the specified local port number.</returns>
|
||||||
ISocket CreateSsdpUdpSocket(IPAddress localIp, int localPort);
|
ISocket CreateSsdpUdpSocket(IPAddress localIp, int localPort);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -91,9 +91,9 @@ namespace MediaBrowser.Model.Net
|
|||||||
{ ".webp", "image/webp" },
|
{ ".webp", "image/webp" },
|
||||||
|
|
||||||
// Type font
|
// Type font
|
||||||
{ ".ttf" , "font/ttf" },
|
{ ".ttf", "font/ttf" },
|
||||||
{ ".woff" , "font/woff" },
|
{ ".woff", "font/woff" },
|
||||||
{ ".woff2" , "font/woff2" },
|
{ ".woff2", "font/woff2" },
|
||||||
|
|
||||||
// Type text
|
// Type text
|
||||||
{ ".ass", "text/x-ssa" },
|
{ ".ass", "text/x-ssa" },
|
||||||
@ -168,14 +168,17 @@ namespace MediaBrowser.Model.Net
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the type of the MIME.
|
/// Gets the type of the MIME.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static string? GetMimeType(string path, bool enableStreamDefault)
|
/// <param name="filename">The filename to find the MIME type of.</param>
|
||||||
|
/// <param name="enableStreamDefault">Whether of not to return a default value if no fitting MIME type is found.</param>
|
||||||
|
/// <returns>The worrect MIME type for the given filename, or `null` if it wasn't found and <paramref name="enableStreamDefault"/> is false.</returns>
|
||||||
|
public static string? GetMimeType(string filename, bool enableStreamDefault)
|
||||||
{
|
{
|
||||||
if (path.Length == 0)
|
if (filename.Length == 0)
|
||||||
{
|
{
|
||||||
throw new ArgumentException("String can't be empty.", nameof(path));
|
throw new ArgumentException("String can't be empty.", nameof(filename));
|
||||||
}
|
}
|
||||||
|
|
||||||
var ext = Path.GetExtension(path);
|
var ext = Path.GetExtension(filename);
|
||||||
|
|
||||||
if (_mimeTypeLookup.TryGetValue(ext, out string? result))
|
if (_mimeTypeLookup.TryGetValue(ext, out string? result))
|
||||||
{
|
{
|
||||||
@ -210,9 +213,9 @@ namespace MediaBrowser.Model.Net
|
|||||||
return enableStreamDefault ? "application/octet-stream" : null;
|
return enableStreamDefault ? "application/octet-stream" : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string? ToExtension(string? mimeType)
|
public static string? ToExtension(string mimeType)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(mimeType))
|
if (mimeType.Length == 0)
|
||||||
{
|
{
|
||||||
throw new ArgumentException("String can't be empty.", nameof(mimeType));
|
throw new ArgumentException("String can't be empty.", nameof(mimeType));
|
||||||
}
|
}
|
||||||
|
@ -1,33 +0,0 @@
|
|||||||
#nullable disable
|
|
||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
namespace MediaBrowser.Model.Net
|
|
||||||
{
|
|
||||||
public class NetworkShare
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// The name of the computer that this share belongs to.
|
|
||||||
/// </summary>
|
|
||||||
public string Server { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Share name.
|
|
||||||
/// </summary>
|
|
||||||
public string Name { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Local path.
|
|
||||||
/// </summary>
|
|
||||||
public string Path { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Share type.
|
|
||||||
/// </summary>
|
|
||||||
public NetworkShareType ShareType { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Comment.
|
|
||||||
/// </summary>
|
|
||||||
public string Remark { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -20,12 +20,12 @@ namespace MediaBrowser.Model.Net
|
|||||||
public int ReceivedBytes { get; set; }
|
public int ReceivedBytes { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The <see cref="IPEndPoint"/> the data was received from.
|
/// Gets or sets the <see cref="IPEndPoint"/> the data was received from.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public IPEndPoint RemoteEndPoint { get; set; }
|
public IPEndPoint RemoteEndPoint { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The local <see cref="IPAddress"/>.
|
/// Gets or sets the local <see cref="IPAddress"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public IPAddress LocalIPAddress { get; set; }
|
public IPAddress LocalIPAddress { get; set; }
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@ namespace MediaBrowser.Model.Net
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class WebSocketMessage.
|
/// Class WebSocketMessage.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T"></typeparam>
|
/// <typeparam name="T">The type of the data.</typeparam>
|
||||||
public class WebSocketMessage<T>
|
public class WebSocketMessage<T>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -2,18 +2,16 @@
|
|||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using Jellyfin.Data.Enums;
|
|
||||||
using MediaBrowser.Model.Extensions;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Data.Entities;
|
||||||
|
using Jellyfin.Data.Enums;
|
||||||
|
using MediaBrowser.Model.Extensions;
|
||||||
using MediaBrowser.Model.Users;
|
using MediaBrowser.Model.Users;
|
||||||
|
|
||||||
namespace MediaBrowser.Model.Notifications
|
namespace MediaBrowser.Model.Notifications
|
||||||
{
|
{
|
||||||
public class NotificationOptions
|
public class NotificationOptions
|
||||||
{
|
{
|
||||||
public NotificationOption[] Options { get; set; }
|
|
||||||
|
|
||||||
public NotificationOptions()
|
public NotificationOptions()
|
||||||
{
|
{
|
||||||
Options = new[]
|
Options = new[]
|
||||||
@ -71,6 +69,8 @@ namespace MediaBrowser.Model.Notifications
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public NotificationOption[] Options { get; set; }
|
||||||
|
|
||||||
public NotificationOption GetOptions(string type)
|
public NotificationOption GetOptions(string type)
|
||||||
{
|
{
|
||||||
foreach (NotificationOption i in Options)
|
foreach (NotificationOption i in Options)
|
||||||
@ -104,7 +104,7 @@ namespace MediaBrowser.Model.Notifications
|
|||||||
NotificationOption opt = GetOptions(type);
|
NotificationOption opt = GetOptions(type);
|
||||||
|
|
||||||
return opt != null && opt.Enabled &&
|
return opt != null && opt.Enabled &&
|
||||||
!opt.DisabledMonitorUsers.Contains(userId.ToString(""), StringComparer.OrdinalIgnoreCase);
|
!opt.DisabledMonitorUsers.Contains(userId.ToString(string.Empty), StringComparer.OrdinalIgnoreCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsEnabledToSendToUser(string type, string userId, User user)
|
public bool IsEnabledToSendToUser(string type, string userId, User user)
|
||||||
|
@ -7,6 +7,12 @@ namespace MediaBrowser.Model.Notifications
|
|||||||
{
|
{
|
||||||
public class NotificationRequest
|
public class NotificationRequest
|
||||||
{
|
{
|
||||||
|
public NotificationRequest()
|
||||||
|
{
|
||||||
|
UserIds = Array.Empty<Guid>();
|
||||||
|
Date = DateTime.UtcNow;
|
||||||
|
}
|
||||||
|
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
public string Description { get; set; }
|
public string Description { get; set; }
|
||||||
@ -20,16 +26,10 @@ namespace MediaBrowser.Model.Notifications
|
|||||||
public DateTime Date { get; set; }
|
public DateTime Date { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The corresponding type name used in configuration. Not for display.
|
/// Gets or sets the corresponding type name used in configuration. Not for display.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string NotificationType { get; set; }
|
public string NotificationType { get; set; }
|
||||||
|
|
||||||
public SendToUserType? SendToUserMode { get; set; }
|
public SendToUserType? SendToUserMode { get; set; }
|
||||||
|
|
||||||
public NotificationRequest()
|
|
||||||
{
|
|
||||||
UserIds = Array.Empty<Guid>();
|
|
||||||
Date = DateTime.UtcNow;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,11 +6,11 @@ namespace MediaBrowser.Model.Providers
|
|||||||
public class ExternalIdInfo
|
public class ExternalIdInfo
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the external id information for serialization to the client.
|
/// Initializes a new instance of the <see cref="ExternalIdInfo"/> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="name">Name of the external id provider (IE: IMDB, MusicBrainz, etc).</param>
|
/// <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="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="type">Specific media type for this id.</param>
|
||||||
/// <param name="urlFormatString">URL format string.</param>
|
/// <param name="urlFormatString">URL format string.</param>
|
||||||
public ExternalIdInfo(string name, string key, ExternalIdMediaType? type, string urlFormatString)
|
public ExternalIdInfo(string name, string key, ExternalIdMediaType? type, string urlFormatString)
|
||||||
{
|
{
|
||||||
|
@ -22,7 +22,7 @@ namespace MediaBrowser.Model.Providers
|
|||||||
public string Url { get; set; }
|
public string Url { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a url used for previewing a smaller version.
|
/// Gets or sets a url used for previewing a smaller version.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string ThumbnailUrl { get; set; }
|
public string ThumbnailUrl { get; set; }
|
||||||
|
|
||||||
|
@ -7,6 +7,14 @@ namespace MediaBrowser.Model.Providers
|
|||||||
{
|
{
|
||||||
public class SubtitleOptions
|
public class SubtitleOptions
|
||||||
{
|
{
|
||||||
|
public SubtitleOptions()
|
||||||
|
{
|
||||||
|
DownloadLanguages = Array.Empty<string>();
|
||||||
|
|
||||||
|
SkipIfAudioTrackMatches = true;
|
||||||
|
RequirePerfectMatch = true;
|
||||||
|
}
|
||||||
|
|
||||||
public bool SkipIfEmbeddedSubtitlesPresent { get; set; }
|
public bool SkipIfEmbeddedSubtitlesPresent { get; set; }
|
||||||
|
|
||||||
public bool SkipIfAudioTrackMatches { get; set; }
|
public bool SkipIfAudioTrackMatches { get; set; }
|
||||||
@ -24,13 +32,5 @@ namespace MediaBrowser.Model.Providers
|
|||||||
public bool IsOpenSubtitleVipAccount { get; set; }
|
public bool IsOpenSubtitleVipAccount { get; set; }
|
||||||
|
|
||||||
public bool RequirePerfectMatch { get; set; }
|
public bool RequirePerfectMatch { get; set; }
|
||||||
|
|
||||||
public SubtitleOptions()
|
|
||||||
{
|
|
||||||
DownloadLanguages = Array.Empty<string>();
|
|
||||||
|
|
||||||
SkipIfAudioTrackMatches = true;
|
|
||||||
RequirePerfectMatch = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,11 @@ namespace MediaBrowser.Model.Querying
|
|||||||
{
|
{
|
||||||
public class EpisodeQuery
|
public class EpisodeQuery
|
||||||
{
|
{
|
||||||
|
public EpisodeQuery()
|
||||||
|
{
|
||||||
|
Fields = Array.Empty<ItemFields>();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the user identifier.
|
/// Gets or sets the user identifier.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -66,10 +71,5 @@ namespace MediaBrowser.Model.Querying
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The start item identifier.</value>
|
/// <value>The start item identifier.</value>
|
||||||
public string StartItemId { get; set; }
|
public string StartItemId { get; set; }
|
||||||
|
|
||||||
public EpisodeQuery()
|
|
||||||
{
|
|
||||||
Fields = Array.Empty<ItemFields>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,31 +14,32 @@ namespace MediaBrowser.Model.Querying
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The user to localize search results for.
|
/// Gets or sets the user to localize search results for.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The user id.</value>
|
/// <value>The user id.</value>
|
||||||
public Guid UserId { get; set; }
|
public Guid UserId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// Gets or sets the parent id.
|
||||||
/// Specify this to localize the search to a specific item or folder. Omit to use the root.
|
/// Specify this to localize the search to a specific item or folder. Omit to use the root.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The parent id.</value>
|
/// <value>The parent id.</value>
|
||||||
public Guid ParentId { get; set; }
|
public Guid ParentId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Skips over a given number of items within the results. Use for paging.
|
/// Gets or sets the start index. Used for paging.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The start index.</value>
|
/// <value>The start index.</value>
|
||||||
public int? StartIndex { get; set; }
|
public int? StartIndex { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The maximum number of items to return.
|
/// Gets or sets the maximum number of items to return.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The limit.</value>
|
/// <value>The limit.</value>
|
||||||
public int? Limit { get; set; }
|
public int? Limit { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Fields to return within the items, in addition to basic information.
|
/// Gets or sets the fields to return within the items, in addition to basic information.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The fields.</value>
|
/// <value>The fields.</value>
|
||||||
public ItemFields[] Fields { get; set; }
|
public ItemFields[] Fields { get; set; }
|
||||||
|
@ -7,6 +7,13 @@ namespace MediaBrowser.Model.Querying
|
|||||||
{
|
{
|
||||||
public class MovieRecommendationQuery
|
public class MovieRecommendationQuery
|
||||||
{
|
{
|
||||||
|
public MovieRecommendationQuery()
|
||||||
|
{
|
||||||
|
ItemLimit = 10;
|
||||||
|
CategoryLimit = 6;
|
||||||
|
Fields = Array.Empty<ItemFields>();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the user identifier.
|
/// Gets or sets the user identifier.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -36,12 +43,5 @@ namespace MediaBrowser.Model.Querying
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The fields.</value>
|
/// <value>The fields.</value>
|
||||||
public ItemFields[] Fields { get; set; }
|
public ItemFields[] Fields { get; set; }
|
||||||
|
|
||||||
public MovieRecommendationQuery()
|
|
||||||
{
|
|
||||||
ItemLimit = 10;
|
|
||||||
CategoryLimit = 6;
|
|
||||||
Fields = Array.Empty<ItemFields>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,13 @@ namespace MediaBrowser.Model.Querying
|
|||||||
{
|
{
|
||||||
public class NextUpQuery
|
public class NextUpQuery
|
||||||
{
|
{
|
||||||
|
public NextUpQuery()
|
||||||
|
{
|
||||||
|
EnableImageTypes = Array.Empty<ImageType>();
|
||||||
|
EnableTotalRecordCount = true;
|
||||||
|
DisableFirstEpisode = false;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the user id.
|
/// Gets or sets the user id.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -27,19 +34,19 @@ namespace MediaBrowser.Model.Querying
|
|||||||
public string SeriesId { get; set; }
|
public string SeriesId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Skips over a given number of items within the results. Use for paging.
|
/// Gets or sets the start index. Use for paging.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The start index.</value>
|
/// <value>The start index.</value>
|
||||||
public int? StartIndex { get; set; }
|
public int? StartIndex { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The maximum number of items to return.
|
/// Gets or sets the maximum number of items to return.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The limit.</value>
|
/// <value>The limit.</value>
|
||||||
public int? Limit { get; set; }
|
public int? Limit { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Fields to return within the items, in addition to basic information.
|
/// gets or sets the fields to return within the items, in addition to basic information.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The fields.</value>
|
/// <value>The fields.</value>
|
||||||
public ItemFields[] Fields { get; set; }
|
public ItemFields[] Fields { get; set; }
|
||||||
@ -68,12 +75,5 @@ namespace MediaBrowser.Model.Querying
|
|||||||
/// Gets or sets a value indicating whether do disable sending first episode as next up.
|
/// Gets or sets a value indicating whether do disable sending first episode as next up.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool DisableFirstEpisode { get; set; }
|
public bool DisableFirstEpisode { get; set; }
|
||||||
|
|
||||||
public NextUpQuery()
|
|
||||||
{
|
|
||||||
EnableImageTypes = Array.Empty<ImageType>();
|
|
||||||
EnableTotalRecordCount = true;
|
|
||||||
DisableFirstEpisode = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,35 +6,16 @@ using MediaBrowser.Model.Dto;
|
|||||||
|
|
||||||
namespace MediaBrowser.Model.Querying
|
namespace MediaBrowser.Model.Querying
|
||||||
{
|
{
|
||||||
public class QueryFiltersLegacy
|
|
||||||
{
|
|
||||||
public string[] Genres { get; set; }
|
|
||||||
|
|
||||||
public string[] Tags { get; set; }
|
|
||||||
|
|
||||||
public string[] OfficialRatings { get; set; }
|
|
||||||
|
|
||||||
public int[] Years { get; set; }
|
|
||||||
|
|
||||||
public QueryFiltersLegacy()
|
|
||||||
{
|
|
||||||
Genres = Array.Empty<string>();
|
|
||||||
Tags = Array.Empty<string>();
|
|
||||||
OfficialRatings = Array.Empty<string>();
|
|
||||||
Years = Array.Empty<int>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class QueryFilters
|
public class QueryFilters
|
||||||
{
|
{
|
||||||
public NameGuidPair[] Genres { get; set; }
|
|
||||||
|
|
||||||
public string[] Tags { get; set; }
|
|
||||||
|
|
||||||
public QueryFilters()
|
public QueryFilters()
|
||||||
{
|
{
|
||||||
Tags = Array.Empty<string>();
|
Tags = Array.Empty<string>();
|
||||||
Genres = Array.Empty<NameGuidPair>();
|
Genres = Array.Empty<NameGuidPair>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public NameGuidPair[] Genres { get; set; }
|
||||||
|
|
||||||
|
public string[] Tags { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
26
MediaBrowser.Model/Querying/QueryFiltersLegacy.cs
Normal file
26
MediaBrowser.Model/Querying/QueryFiltersLegacy.cs
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#nullable disable
|
||||||
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Model.Querying
|
||||||
|
{
|
||||||
|
public class QueryFiltersLegacy
|
||||||
|
{
|
||||||
|
public QueryFiltersLegacy()
|
||||||
|
{
|
||||||
|
Genres = Array.Empty<string>();
|
||||||
|
Tags = Array.Empty<string>();
|
||||||
|
OfficialRatings = Array.Empty<string>();
|
||||||
|
Years = Array.Empty<int>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string[] Genres { get; set; }
|
||||||
|
|
||||||
|
public string[] Tags { get; set; }
|
||||||
|
|
||||||
|
public string[] OfficialRatings { get; set; }
|
||||||
|
|
||||||
|
public int[] Years { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -8,24 +8,6 @@ namespace MediaBrowser.Model.Querying
|
|||||||
{
|
{
|
||||||
public class QueryResult<T>
|
public class QueryResult<T>
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the items.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The items.</value>
|
|
||||||
public IReadOnlyList<T> Items { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The total number of records available.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>The total record count.</value>
|
|
||||||
public int TotalRecordCount { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The index of the first record in Items.
|
|
||||||
/// </summary>
|
|
||||||
/// <value>First record index.</value>
|
|
||||||
public int StartIndex { get; set; }
|
|
||||||
|
|
||||||
public QueryResult()
|
public QueryResult()
|
||||||
{
|
{
|
||||||
Items = Array.Empty<T>();
|
Items = Array.Empty<T>();
|
||||||
@ -36,5 +18,23 @@ namespace MediaBrowser.Model.Querying
|
|||||||
Items = items;
|
Items = items;
|
||||||
TotalRecordCount = items.Count;
|
TotalRecordCount = items.Count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the items.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The items.</value>
|
||||||
|
public IReadOnlyList<T> Items { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the total number of records available.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The total record count.</value>
|
||||||
|
public int TotalRecordCount { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the index of the first record in Items.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>First record index.</value>
|
||||||
|
public int StartIndex { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,11 @@ namespace MediaBrowser.Model.Querying
|
|||||||
{
|
{
|
||||||
public class UpcomingEpisodesQuery
|
public class UpcomingEpisodesQuery
|
||||||
{
|
{
|
||||||
|
public UpcomingEpisodesQuery()
|
||||||
|
{
|
||||||
|
EnableImageTypes = Array.Empty<ImageType>();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the user id.
|
/// Gets or sets the user id.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -21,19 +26,19 @@ namespace MediaBrowser.Model.Querying
|
|||||||
public string ParentId { get; set; }
|
public string ParentId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Skips over a given number of items within the results. Use for paging.
|
/// Gets or sets the start index. Use for paging.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The start index.</value>
|
/// <value>The start index.</value>
|
||||||
public int? StartIndex { get; set; }
|
public int? StartIndex { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The maximum number of items to return.
|
/// Gets or sets the maximum number of items to return.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The limit.</value>
|
/// <value>The limit.</value>
|
||||||
public int? Limit { get; set; }
|
public int? Limit { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Fields to return within the items, in addition to basic information.
|
/// Gets or sets the fields to return within the items, in addition to basic information.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The fields.</value>
|
/// <value>The fields.</value>
|
||||||
public ItemFields[] Fields { get; set; }
|
public ItemFields[] Fields { get; set; }
|
||||||
@ -55,10 +60,5 @@ namespace MediaBrowser.Model.Querying
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The enable image types.</value>
|
/// <value>The enable image types.</value>
|
||||||
public ImageType[] EnableImageTypes { get; set; }
|
public ImageType[] EnableImageTypes { get; set; }
|
||||||
|
|
||||||
public UpcomingEpisodesQuery()
|
|
||||||
{
|
|
||||||
EnableImageTypes = Array.Empty<ImageType>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,8 +7,21 @@ namespace MediaBrowser.Model.Search
|
|||||||
{
|
{
|
||||||
public class SearchQuery
|
public class SearchQuery
|
||||||
{
|
{
|
||||||
|
public SearchQuery()
|
||||||
|
{
|
||||||
|
IncludeArtists = true;
|
||||||
|
IncludeGenres = true;
|
||||||
|
IncludeMedia = true;
|
||||||
|
IncludePeople = true;
|
||||||
|
IncludeStudios = true;
|
||||||
|
|
||||||
|
MediaTypes = Array.Empty<string>();
|
||||||
|
IncludeItemTypes = Array.Empty<string>();
|
||||||
|
ExcludeItemTypes = Array.Empty<string>();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The user to localize search results for.
|
/// Gets or sets the user to localize search results for.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The user id.</value>
|
/// <value>The user id.</value>
|
||||||
public Guid UserId { get; set; }
|
public Guid UserId { get; set; }
|
||||||
@ -20,13 +33,13 @@ namespace MediaBrowser.Model.Search
|
|||||||
public string SearchTerm { get; set; }
|
public string SearchTerm { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Skips over a given number of items within the results. Use for paging.
|
/// Gets or sets the start index. Used for paging.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The start index.</value>
|
/// <value>The start index.</value>
|
||||||
public int? StartIndex { get; set; }
|
public int? StartIndex { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The maximum number of items to return.
|
/// Gets or sets the maximum number of items to return.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The limit.</value>
|
/// <value>The limit.</value>
|
||||||
public int? Limit { get; set; }
|
public int? Limit { get; set; }
|
||||||
@ -58,18 +71,5 @@ namespace MediaBrowser.Model.Search
|
|||||||
public bool? IsKids { get; set; }
|
public bool? IsKids { get; set; }
|
||||||
|
|
||||||
public bool? IsSports { get; set; }
|
public bool? IsSports { get; set; }
|
||||||
|
|
||||||
public SearchQuery()
|
|
||||||
{
|
|
||||||
IncludeArtists = true;
|
|
||||||
IncludeGenres = true;
|
|
||||||
IncludeMedia = true;
|
|
||||||
IncludePeople = true;
|
|
||||||
IncludeStudios = true;
|
|
||||||
|
|
||||||
MediaTypes = Array.Empty<string>();
|
|
||||||
IncludeItemTypes = Array.Empty<string>();
|
|
||||||
ExcludeItemTypes = Array.Empty<string>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ namespace MediaBrowser.Model.Session
|
|||||||
public class BrowseRequest
|
public class BrowseRequest
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// Gets or sets the item type.
|
||||||
/// Artist, Genre, Studio, Person, or any kind of BaseItem.
|
/// Artist, Genre, Studio, Person, or any kind of BaseItem.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The type of the item.</value>
|
/// <value>The type of the item.</value>
|
||||||
|
@ -9,6 +9,13 @@ namespace MediaBrowser.Model.Session
|
|||||||
{
|
{
|
||||||
public class ClientCapabilities
|
public class ClientCapabilities
|
||||||
{
|
{
|
||||||
|
public ClientCapabilities()
|
||||||
|
{
|
||||||
|
PlayableMediaTypes = Array.Empty<string>();
|
||||||
|
SupportedCommands = Array.Empty<GeneralCommandType>();
|
||||||
|
SupportsPersistentIdentifier = true;
|
||||||
|
}
|
||||||
|
|
||||||
public IReadOnlyList<string> PlayableMediaTypes { get; set; }
|
public IReadOnlyList<string> PlayableMediaTypes { get; set; }
|
||||||
|
|
||||||
public IReadOnlyList<GeneralCommandType> SupportedCommands { get; set; }
|
public IReadOnlyList<GeneralCommandType> SupportedCommands { get; set; }
|
||||||
@ -28,12 +35,5 @@ namespace MediaBrowser.Model.Session
|
|||||||
public string AppStoreUrl { get; set; }
|
public string AppStoreUrl { get; set; }
|
||||||
|
|
||||||
public string IconUrl { get; set; }
|
public string IconUrl { get; set; }
|
||||||
|
|
||||||
public ClientCapabilities()
|
|
||||||
{
|
|
||||||
PlayableMediaTypes = Array.Empty<string>();
|
|
||||||
SupportedCommands = Array.Empty<GeneralCommandType>();
|
|
||||||
SupportsPersistentIdentifier = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
#nullable disable
|
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
@ -8,15 +7,15 @@ namespace MediaBrowser.Model.Session
|
|||||||
{
|
{
|
||||||
public class GeneralCommand
|
public class GeneralCommand
|
||||||
{
|
{
|
||||||
public GeneralCommandType Name { get; set; }
|
|
||||||
|
|
||||||
public Guid ControllingUserId { get; set; }
|
|
||||||
|
|
||||||
public Dictionary<string, string> Arguments { get; set; }
|
|
||||||
|
|
||||||
public GeneralCommand()
|
public GeneralCommand()
|
||||||
{
|
{
|
||||||
Arguments = new Dictionary<string, string>();
|
Arguments = new Dictionary<string, string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public GeneralCommandType Name { get; set; }
|
||||||
|
|
||||||
|
public Guid ControllingUserId { get; set; }
|
||||||
|
|
||||||
|
public Dictionary<string, string> Arguments { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -111,18 +111,4 @@ namespace MediaBrowser.Model.Session
|
|||||||
|
|
||||||
public string PlaylistItemId { get; set; }
|
public string PlaylistItemId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum RepeatMode
|
|
||||||
{
|
|
||||||
RepeatNone = 0,
|
|
||||||
RepeatAll = 1,
|
|
||||||
RepeatOne = 2
|
|
||||||
}
|
|
||||||
|
|
||||||
public class QueueItem
|
|
||||||
{
|
|
||||||
public Guid Id { get; set; }
|
|
||||||
|
|
||||||
public string PlaylistItemId { get; set; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
#pragma warning disable CS1591
|
|
||||||
|
|
||||||
namespace MediaBrowser.Model.Session
|
namespace MediaBrowser.Model.Session
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -46,6 +44,10 @@ namespace MediaBrowser.Model.Session
|
|||||||
/// The fast forward.
|
/// The fast forward.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
FastForward,
|
FastForward,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The play pause.
|
||||||
|
/// </summary>
|
||||||
PlayPause
|
PlayPause
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
14
MediaBrowser.Model/Session/QueueItem.cs
Normal file
14
MediaBrowser.Model/Session/QueueItem.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#nullable disable
|
||||||
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Model.Session
|
||||||
|
{
|
||||||
|
public class QueueItem
|
||||||
|
{
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
|
||||||
|
public string PlaylistItemId { get; set; }
|
||||||
|
}
|
||||||
|
}
|
11
MediaBrowser.Model/Session/RepeatMode.cs
Normal file
11
MediaBrowser.Model/Session/RepeatMode.cs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
|
namespace MediaBrowser.Model.Session
|
||||||
|
{
|
||||||
|
public enum RepeatMode
|
||||||
|
{
|
||||||
|
RepeatNone = 0,
|
||||||
|
RepeatAll = 1,
|
||||||
|
RepeatOne = 2
|
||||||
|
}
|
||||||
|
}
|
31
MediaBrowser.Model/Session/TranscodeReason.cs
Normal file
31
MediaBrowser.Model/Session/TranscodeReason.cs
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
|
namespace MediaBrowser.Model.Session
|
||||||
|
{
|
||||||
|
public enum TranscodeReason
|
||||||
|
{
|
||||||
|
ContainerNotSupported = 0,
|
||||||
|
VideoCodecNotSupported = 1,
|
||||||
|
AudioCodecNotSupported = 2,
|
||||||
|
ContainerBitrateExceedsLimit = 3,
|
||||||
|
AudioBitrateNotSupported = 4,
|
||||||
|
AudioChannelsNotSupported = 5,
|
||||||
|
VideoResolutionNotSupported = 6,
|
||||||
|
UnknownVideoStreamInfo = 7,
|
||||||
|
UnknownAudioStreamInfo = 8,
|
||||||
|
AudioProfileNotSupported = 9,
|
||||||
|
AudioSampleRateNotSupported = 10,
|
||||||
|
AnamorphicVideoNotSupported = 11,
|
||||||
|
InterlacedVideoNotSupported = 12,
|
||||||
|
SecondaryAudioNotSupported = 13,
|
||||||
|
RefFramesNotSupported = 14,
|
||||||
|
VideoBitDepthNotSupported = 15,
|
||||||
|
VideoBitrateNotSupported = 16,
|
||||||
|
VideoFramerateNotSupported = 17,
|
||||||
|
VideoLevelNotSupported = 18,
|
||||||
|
VideoProfileNotSupported = 19,
|
||||||
|
AudioBitDepthNotSupported = 20,
|
||||||
|
SubtitleCodecNotSupported = 21,
|
||||||
|
DirectPlayError = 22
|
||||||
|
}
|
||||||
|
}
|
@ -7,6 +7,11 @@ namespace MediaBrowser.Model.Session
|
|||||||
{
|
{
|
||||||
public class TranscodingInfo
|
public class TranscodingInfo
|
||||||
{
|
{
|
||||||
|
public TranscodingInfo()
|
||||||
|
{
|
||||||
|
TranscodeReasons = Array.Empty<TranscodeReason>();
|
||||||
|
}
|
||||||
|
|
||||||
public string AudioCodec { get; set; }
|
public string AudioCodec { get; set; }
|
||||||
|
|
||||||
public string VideoCodec { get; set; }
|
public string VideoCodec { get; set; }
|
||||||
@ -30,37 +35,5 @@ namespace MediaBrowser.Model.Session
|
|||||||
public int? AudioChannels { get; set; }
|
public int? AudioChannels { get; set; }
|
||||||
|
|
||||||
public TranscodeReason[] TranscodeReasons { get; set; }
|
public TranscodeReason[] TranscodeReasons { get; set; }
|
||||||
|
|
||||||
public TranscodingInfo()
|
|
||||||
{
|
|
||||||
TranscodeReasons = Array.Empty<TranscodeReason>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum TranscodeReason
|
|
||||||
{
|
|
||||||
ContainerNotSupported = 0,
|
|
||||||
VideoCodecNotSupported = 1,
|
|
||||||
AudioCodecNotSupported = 2,
|
|
||||||
ContainerBitrateExceedsLimit = 3,
|
|
||||||
AudioBitrateNotSupported = 4,
|
|
||||||
AudioChannelsNotSupported = 5,
|
|
||||||
VideoResolutionNotSupported = 6,
|
|
||||||
UnknownVideoStreamInfo = 7,
|
|
||||||
UnknownAudioStreamInfo = 8,
|
|
||||||
AudioProfileNotSupported = 9,
|
|
||||||
AudioSampleRateNotSupported = 10,
|
|
||||||
AnamorphicVideoNotSupported = 11,
|
|
||||||
InterlacedVideoNotSupported = 12,
|
|
||||||
SecondaryAudioNotSupported = 13,
|
|
||||||
RefFramesNotSupported = 14,
|
|
||||||
VideoBitDepthNotSupported = 15,
|
|
||||||
VideoBitrateNotSupported = 16,
|
|
||||||
VideoFramerateNotSupported = 17,
|
|
||||||
VideoLevelNotSupported = 18,
|
|
||||||
VideoProfileNotSupported = 19,
|
|
||||||
AudioBitDepthNotSupported = 20,
|
|
||||||
SubtitleCodecNotSupported = 21,
|
|
||||||
DirectPlayError = 22
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,11 @@ namespace MediaBrowser.Model.Sync
|
|||||||
{
|
{
|
||||||
public class SyncJob
|
public class SyncJob
|
||||||
{
|
{
|
||||||
|
public SyncJob()
|
||||||
|
{
|
||||||
|
RequestedItemIds = Array.Empty<Guid>();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the identifier.
|
/// Gets or sets the identifier.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -126,10 +131,5 @@ namespace MediaBrowser.Model.Sync
|
|||||||
public string PrimaryImageItemId { get; set; }
|
public string PrimaryImageItemId { get; set; }
|
||||||
|
|
||||||
public string PrimaryImageTag { get; set; }
|
public string PrimaryImageTag { get; set; }
|
||||||
|
|
||||||
public SyncJob()
|
|
||||||
{
|
|
||||||
RequestedItemIds = Array.Empty<Guid>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,14 @@ namespace MediaBrowser.Model.System
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class SystemInfo : PublicSystemInfo
|
public class SystemInfo : PublicSystemInfo
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="SystemInfo" /> class.
|
||||||
|
/// </summary>
|
||||||
|
public SystemInfo()
|
||||||
|
{
|
||||||
|
CompletedInstallations = Array.Empty<InstallationInfo>();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the display name of the operating system.
|
/// Gets or sets the display name of the operating system.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -37,7 +45,7 @@ namespace MediaBrowser.Model.System
|
|||||||
public string OperatingSystemDisplayName { get; set; }
|
public string OperatingSystemDisplayName { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get or sets the package name.
|
/// Gets or sets the package name.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The value of the '-package' command line argument.</value>
|
/// <value>The value of the '-package' command line argument.</value>
|
||||||
public string PackageName { get; set; }
|
public string PackageName { get; set; }
|
||||||
@ -127,13 +135,5 @@ namespace MediaBrowser.Model.System
|
|||||||
public FFmpegLocation EncoderLocation { get; set; }
|
public FFmpegLocation EncoderLocation { get; set; }
|
||||||
|
|
||||||
public Architecture SystemArchitecture { get; set; }
|
public Architecture SystemArchitecture { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="SystemInfo" /> class.
|
|
||||||
/// </summary>
|
|
||||||
public SystemInfo()
|
|
||||||
{
|
|
||||||
CompletedInstallations = Array.Empty<InstallationInfo>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ namespace MediaBrowser.Model.System
|
|||||||
/// Gets the MAC address of the device.
|
/// Gets the MAC address of the device.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The MAC address.</value>
|
/// <value>The MAC address.</value>
|
||||||
public string? MacAddress { get; set; }
|
public string? MacAddress { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the wake-on-LAN port.
|
/// Gets or sets the wake-on-LAN port.
|
||||||
|
@ -15,7 +15,7 @@ namespace MediaBrowser.Model.Tasks
|
|||||||
event EventHandler<GenericEventArgs<double>> TaskProgress;
|
event EventHandler<GenericEventArgs<double>> TaskProgress;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the scheduled task.
|
/// Gets the scheduled task.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The scheduled task.</value>
|
/// <value>The scheduled task.</value>
|
||||||
IScheduledTask ScheduledTask { get; }
|
IScheduledTask ScheduledTask { get; }
|
||||||
@ -57,10 +57,9 @@ namespace MediaBrowser.Model.Tasks
|
|||||||
double? CurrentProgress { get; }
|
double? CurrentProgress { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the triggers that define when the task will run.
|
/// Gets or sets the triggers that define when the task will run.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The triggers.</value>
|
/// <value>The triggers.</value>
|
||||||
/// <exception cref="ArgumentNullException">value</exception>
|
|
||||||
TaskTriggerInfo[] Triggers { get; set; }
|
TaskTriggerInfo[] Triggers { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -9,6 +9,10 @@ namespace MediaBrowser.Model.Tasks
|
|||||||
{
|
{
|
||||||
public interface ITaskManager : IDisposable
|
public interface ITaskManager : IDisposable
|
||||||
{
|
{
|
||||||
|
event EventHandler<GenericEventArgs<IScheduledTaskWorker>> TaskExecuting;
|
||||||
|
|
||||||
|
event EventHandler<TaskCompletionEventArgs> TaskCompleted;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the list of Scheduled Tasks.
|
/// Gets the list of Scheduled Tasks.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -18,7 +22,7 @@ namespace MediaBrowser.Model.Tasks
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Cancels if running and queue.
|
/// Cancels if running and queue.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T"></typeparam>
|
/// <typeparam name="T">An implementatin of <see cref="IScheduledTask" />.</typeparam>
|
||||||
/// <param name="options">Task options.</param>
|
/// <param name="options">Task options.</param>
|
||||||
void CancelIfRunningAndQueue<T>(TaskOptions options)
|
void CancelIfRunningAndQueue<T>(TaskOptions options)
|
||||||
where T : IScheduledTask;
|
where T : IScheduledTask;
|
||||||
@ -26,21 +30,21 @@ namespace MediaBrowser.Model.Tasks
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Cancels if running and queue.
|
/// Cancels if running and queue.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T"></typeparam>
|
/// <typeparam name="T">An implementatin of <see cref="IScheduledTask" />.</typeparam>
|
||||||
void CancelIfRunningAndQueue<T>()
|
void CancelIfRunningAndQueue<T>()
|
||||||
where T : IScheduledTask;
|
where T : IScheduledTask;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Cancels if running.
|
/// Cancels if running.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T"></typeparam>
|
/// <typeparam name="T">An implementatin of <see cref="IScheduledTask" />.</typeparam>
|
||||||
void CancelIfRunning<T>()
|
void CancelIfRunning<T>()
|
||||||
where T : IScheduledTask;
|
where T : IScheduledTask;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Queues the scheduled task.
|
/// Queues the scheduled task.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T"></typeparam>
|
/// <typeparam name="T">An implementatin of <see cref="IScheduledTask" />.</typeparam>
|
||||||
/// <param name="options">Task options.</param>
|
/// <param name="options">Task options.</param>
|
||||||
void QueueScheduledTask<T>(TaskOptions options)
|
void QueueScheduledTask<T>(TaskOptions options)
|
||||||
where T : IScheduledTask;
|
where T : IScheduledTask;
|
||||||
@ -48,7 +52,7 @@ namespace MediaBrowser.Model.Tasks
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Queues the scheduled task.
|
/// Queues the scheduled task.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T"></typeparam>
|
/// <typeparam name="T">An implementatin of <see cref="IScheduledTask" />.</typeparam>
|
||||||
void QueueScheduledTask<T>()
|
void QueueScheduledTask<T>()
|
||||||
where T : IScheduledTask;
|
where T : IScheduledTask;
|
||||||
|
|
||||||
@ -58,6 +62,8 @@ namespace MediaBrowser.Model.Tasks
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Queues the scheduled task.
|
/// Queues the scheduled task.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="task">The <see cref="IScheduledTask" /> to queue.</param>
|
||||||
|
/// <param name="options">The <see cref="TaskOptions" /> to use.</param>
|
||||||
void QueueScheduledTask(IScheduledTask task, TaskOptions options);
|
void QueueScheduledTask(IScheduledTask task, TaskOptions options);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -67,12 +73,10 @@ namespace MediaBrowser.Model.Tasks
|
|||||||
void AddTasks(IEnumerable<IScheduledTask> tasks);
|
void AddTasks(IEnumerable<IScheduledTask> tasks);
|
||||||
|
|
||||||
void Cancel(IScheduledTaskWorker task);
|
void Cancel(IScheduledTaskWorker task);
|
||||||
|
|
||||||
Task Execute(IScheduledTaskWorker task, TaskOptions options);
|
Task Execute(IScheduledTaskWorker task, TaskOptions options);
|
||||||
|
|
||||||
void Execute<T>()
|
void Execute<T>()
|
||||||
where T : IScheduledTask;
|
where T : IScheduledTask;
|
||||||
|
|
||||||
event EventHandler<GenericEventArgs<IScheduledTaskWorker>> TaskExecuting;
|
|
||||||
event EventHandler<TaskCompletionEventArgs> TaskCompleted;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,10 @@ namespace MediaBrowser.Model.Tasks
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Stars waiting for the trigger action.
|
/// Stars waiting for the trigger action.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="lastResult">Result of the last run triggerd task.</param>
|
||||||
|
/// <param name="logger">The <see cref="ILogger"/>.</param>
|
||||||
|
/// <param name="taskName">The name of the task.</param>
|
||||||
|
/// <param name="isApplicationStartup">Wheter or not this is is fired during startup.</param>
|
||||||
void Start(TaskResult lastResult, ILogger logger, string taskName, bool isApplicationStartup);
|
void Start(TaskResult lastResult, ILogger logger, string taskName, bool isApplicationStartup);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -8,6 +8,14 @@ namespace MediaBrowser.Model.Tasks
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class TaskInfo
|
public class TaskInfo
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="TaskInfo"/> class.
|
||||||
|
/// </summary>
|
||||||
|
public TaskInfo()
|
||||||
|
{
|
||||||
|
Triggers = Array.Empty<TaskTriggerInfo>();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the name.
|
/// Gets or sets the name.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -67,13 +75,5 @@ namespace MediaBrowser.Model.Tasks
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The key.</value>
|
/// <value>The key.</value>
|
||||||
public string Key { get; set; }
|
public string Key { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="TaskInfo"/> class.
|
|
||||||
/// </summary>
|
|
||||||
public TaskInfo()
|
|
||||||
{
|
|
||||||
Triggers = Array.Empty<TaskTriggerInfo>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,12 @@ namespace MediaBrowser.Model.Tasks
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class TaskTriggerInfo
|
public class TaskTriggerInfo
|
||||||
{
|
{
|
||||||
|
public const string TriggerDaily = "DailyTrigger";
|
||||||
|
public const string TriggerWeekly = "WeeklyTrigger";
|
||||||
|
public const string TriggerInterval = "IntervalTrigger";
|
||||||
|
public const string TriggerSystemEvent = "SystemEventTrigger";
|
||||||
|
public const string TriggerStartup = "StartupTrigger";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the type.
|
/// Gets or sets the type.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -39,11 +45,5 @@ namespace MediaBrowser.Model.Tasks
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The maximum runtime ticks.</value>
|
/// <value>The maximum runtime ticks.</value>
|
||||||
public long? MaxRuntimeTicks { get; set; }
|
public long? MaxRuntimeTicks { get; set; }
|
||||||
|
|
||||||
public const string TriggerDaily = "DailyTrigger";
|
|
||||||
public const string TriggerWeekly = "WeeklyTrigger";
|
|
||||||
public const string TriggerInterval = "IntervalTrigger";
|
|
||||||
public const string TriggerSystemEvent = "SystemEventTrigger";
|
|
||||||
public const string TriggerStartup = "StartupTrigger";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,56 @@ namespace MediaBrowser.Model.Users
|
|||||||
{
|
{
|
||||||
public class UserPolicy
|
public class UserPolicy
|
||||||
{
|
{
|
||||||
|
public UserPolicy()
|
||||||
|
{
|
||||||
|
IsHidden = true;
|
||||||
|
|
||||||
|
EnableContentDeletion = false;
|
||||||
|
EnableContentDeletionFromFolders = Array.Empty<string>();
|
||||||
|
|
||||||
|
EnableSyncTranscoding = true;
|
||||||
|
EnableMediaConversion = true;
|
||||||
|
|
||||||
|
EnableMediaPlayback = true;
|
||||||
|
EnableAudioPlaybackTranscoding = true;
|
||||||
|
EnableVideoPlaybackTranscoding = true;
|
||||||
|
EnablePlaybackRemuxing = true;
|
||||||
|
ForceRemoteSourceTranscoding = false;
|
||||||
|
EnableLiveTvManagement = true;
|
||||||
|
EnableLiveTvAccess = true;
|
||||||
|
|
||||||
|
// Without this on by default, admins won't be able to do this
|
||||||
|
// Improve in the future
|
||||||
|
EnableLiveTvManagement = true;
|
||||||
|
|
||||||
|
EnableSharedDeviceControl = true;
|
||||||
|
|
||||||
|
BlockedTags = Array.Empty<string>();
|
||||||
|
BlockUnratedItems = Array.Empty<UnratedItem>();
|
||||||
|
|
||||||
|
EnableUserPreferenceAccess = true;
|
||||||
|
|
||||||
|
AccessSchedules = Array.Empty<AccessSchedule>();
|
||||||
|
|
||||||
|
LoginAttemptsBeforeLockout = -1;
|
||||||
|
|
||||||
|
MaxActiveSessions = 0;
|
||||||
|
|
||||||
|
EnableAllChannels = true;
|
||||||
|
EnabledChannels = Array.Empty<Guid>();
|
||||||
|
|
||||||
|
EnableAllFolders = true;
|
||||||
|
EnabledFolders = Array.Empty<Guid>();
|
||||||
|
|
||||||
|
EnabledDevices = Array.Empty<string>();
|
||||||
|
EnableAllDevices = true;
|
||||||
|
|
||||||
|
EnableContentDownloading = true;
|
||||||
|
EnablePublicSharing = true;
|
||||||
|
EnableRemoteAccess = true;
|
||||||
|
SyncPlayAccess = SyncPlayUserAccessType.CreateAndJoinGroups;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets a value indicating whether this instance is administrator.
|
/// Gets or sets a value indicating whether this instance is administrator.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -112,55 +162,5 @@ namespace MediaBrowser.Model.Users
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>Access level to SyncPlay features.</value>
|
/// <value>Access level to SyncPlay features.</value>
|
||||||
public SyncPlayUserAccessType SyncPlayAccess { get; set; }
|
public SyncPlayUserAccessType SyncPlayAccess { get; set; }
|
||||||
|
|
||||||
public UserPolicy()
|
|
||||||
{
|
|
||||||
IsHidden = true;
|
|
||||||
|
|
||||||
EnableContentDeletion = false;
|
|
||||||
EnableContentDeletionFromFolders = Array.Empty<string>();
|
|
||||||
|
|
||||||
EnableSyncTranscoding = true;
|
|
||||||
EnableMediaConversion = true;
|
|
||||||
|
|
||||||
EnableMediaPlayback = true;
|
|
||||||
EnableAudioPlaybackTranscoding = true;
|
|
||||||
EnableVideoPlaybackTranscoding = true;
|
|
||||||
EnablePlaybackRemuxing = true;
|
|
||||||
ForceRemoteSourceTranscoding = false;
|
|
||||||
EnableLiveTvManagement = true;
|
|
||||||
EnableLiveTvAccess = true;
|
|
||||||
|
|
||||||
// Without this on by default, admins won't be able to do this
|
|
||||||
// Improve in the future
|
|
||||||
EnableLiveTvManagement = true;
|
|
||||||
|
|
||||||
EnableSharedDeviceControl = true;
|
|
||||||
|
|
||||||
BlockedTags = Array.Empty<string>();
|
|
||||||
BlockUnratedItems = Array.Empty<UnratedItem>();
|
|
||||||
|
|
||||||
EnableUserPreferenceAccess = true;
|
|
||||||
|
|
||||||
AccessSchedules = Array.Empty<AccessSchedule>();
|
|
||||||
|
|
||||||
LoginAttemptsBeforeLockout = -1;
|
|
||||||
|
|
||||||
MaxActiveSessions = 0;
|
|
||||||
|
|
||||||
EnableAllChannels = true;
|
|
||||||
EnabledChannels = Array.Empty<Guid>();
|
|
||||||
|
|
||||||
EnableAllFolders = true;
|
|
||||||
EnabledFolders = Array.Empty<Guid>();
|
|
||||||
|
|
||||||
EnabledDevices = Array.Empty<string>();
|
|
||||||
EnableAllDevices = true;
|
|
||||||
|
|
||||||
EnableContentDownloading = true;
|
|
||||||
EnablePublicSharing = true;
|
|
||||||
EnableRemoteAccess = true;
|
|
||||||
SyncPlayAccess = SyncPlayUserAccessType.CreateAndJoinGroups;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,8 @@
|
|||||||
<Rule Id="SA1515" Action="None" />
|
<Rule Id="SA1515" Action="None" />
|
||||||
<!-- disable warning SA1600: Elements should be documented -->
|
<!-- disable warning SA1600: Elements should be documented -->
|
||||||
<Rule Id="SA1600" Action="None" />
|
<Rule Id="SA1600" Action="None" />
|
||||||
|
<!-- disable warning SA1602: Enumeration items should be documented -->
|
||||||
|
<Rule Id="SA1602" Action="None" />
|
||||||
<!-- disable warning SA1633: The file header is missing or not located at the top of the file -->
|
<!-- disable warning SA1633: The file header is missing or not located at the top of the file -->
|
||||||
<Rule Id="SA1633" Action="None" />
|
<Rule Id="SA1633" Action="None" />
|
||||||
</Rules>
|
</Rules>
|
||||||
|
@ -1,17 +1,11 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace Jellyfin.Api.Tests.ModelBinders
|
namespace Jellyfin.Api.Tests.ModelBinders
|
||||||
{
|
{
|
||||||
public enum TestType
|
public enum TestType
|
||||||
{
|
{
|
||||||
#pragma warning disable SA1602 // Enumeration items should be documented
|
|
||||||
How,
|
How,
|
||||||
Much,
|
Much,
|
||||||
Is,
|
Is,
|
||||||
The,
|
The,
|
||||||
Fish
|
Fish
|
||||||
#pragma warning restore SA1602 // Enumeration items should be documented
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user