Merge remote-tracking branch 'upstream/master' into quickconnect

This commit is contained in:
ConfusedPolarBear
2020-06-19 23:33:43 -05:00
725 changed files with 8927 additions and 5743 deletions

View File

@@ -38,7 +38,7 @@ namespace MediaBrowser.Model.Channels
public ChannelMediaContentType[] ContentTypes { get; set; }
/// <summary>
/// Represents the maximum number of records the channel allows retrieving at a time
/// Represents the maximum number of records the channel allows retrieving at a time.
/// </summary>
public int? MaxPageSize { get; set; }

View File

@@ -10,7 +10,7 @@ namespace MediaBrowser.Model.Channels
public class ChannelQuery
{
/// <summary>
/// Fields to return within the items, in addition to basic information
/// Fields to return within the items, in addition to basic information.
/// </summary>
/// <value>The fields.</value>
public ItemFields[] Fields { get; set; }
@@ -34,7 +34,7 @@ namespace MediaBrowser.Model.Channels
public int? StartIndex { get; set; }
/// <summary>
/// The maximum number of items to return
/// The maximum number of items to return.
/// </summary>
/// <value>The limit.</value>
public int? Limit { get; set; }

View File

@@ -1,3 +1,5 @@
using Jellyfin.Data.Enums;
#pragma warning disable CS1591
namespace MediaBrowser.Model.Configuration

View File

@@ -12,7 +12,7 @@ namespace MediaBrowser.Model.Configuration
public class BaseApplicationConfiguration
{
/// <summary>
/// The number of days we should retain log files
/// The number of days we should retain log files.
/// </summary>
/// <value>The log file retention days.</value>
public int LogFileRetentionDays { get; set; }

View File

@@ -1,18 +0,0 @@
#pragma warning disable CS1591
namespace MediaBrowser.Model.Configuration
{
public enum DynamicDayOfWeek
{
Sunday = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 3,
Thursday = 4,
Friday = 5,
Saturday = 6,
Everyday = 7,
Weekday = 8,
Weekend = 9
}
}

View File

@@ -36,7 +36,8 @@ namespace MediaBrowser.Model.Configuration
public string EncoderPreset { get; set; }
public string DeinterlaceMethod { get; set; }
public bool EnableDecodingColorDepth10Hevc { get; set; }
public bool EnableDecodingColorDepth10Vp9 { get; set; }
public bool EnableHardwareEncoding { get; set; }
public bool EnableSubtitleExtraction { get; set; }
@@ -54,6 +55,8 @@ namespace MediaBrowser.Model.Configuration
H264Crf = 23;
H265Crf = 28;
DeinterlaceMethod = "yadif";
EnableDecodingColorDepth10Hevc = true;
EnableDecodingColorDepth10Vp9 = true;
EnableHardwareEncoding = true;
EnableSubtitleExtraction = true;
HardwareDecodingCodecs = new string[] { "h264", "vc1" };

View File

@@ -10,17 +10,27 @@ namespace MediaBrowser.Model.Configuration
public class LibraryOptions
{
public bool EnablePhotos { get; set; }
public bool EnableRealtimeMonitor { get; set; }
public bool EnableChapterImageExtraction { get; set; }
public bool ExtractChapterImagesDuringLibraryScan { get; set; }
public bool DownloadImagesInAdvance { get; set; }
public MediaPathInfo[] PathInfos { get; set; }
public bool SaveLocalMetadata { get; set; }
public bool EnableInternetProviders { get; set; }
public bool ImportMissingEpisodes { get; set; }
public bool EnableAutomaticSeriesGrouping { get; set; }
public bool EnableEmbeddedTitles { get; set; }
public bool EnableEmbeddedEpisodeInfos { get; set; }
public int AutomaticRefreshIntervalDays { get; set; }
@@ -38,17 +48,25 @@ namespace MediaBrowser.Model.Configuration
public string MetadataCountryCode { get; set; }
public string SeasonZeroDisplayName { get; set; }
public string[] MetadataSavers { get; set; }
public string[] DisabledLocalMetadataReaders { get; set; }
public string[] LocalMetadataReaderOrder { get; set; }
public string[] DisabledSubtitleFetchers { get; set; }
public string[] SubtitleFetcherOrder { get; set; }
public bool SkipSubtitlesIfEmbeddedSubtitlesPresent { get; set; }
public bool SkipSubtitlesIfAudioTrackMatches { get; set; }
public string[] SubtitleDownloadLanguages { get; set; }
public bool RequirePerfectSubtitleMatch { get; set; }
public bool SaveSubtitlesWithMedia { get; set; }
public TypeOptions[] TypeOptions { get; set; }
@@ -89,17 +107,22 @@ namespace MediaBrowser.Model.Configuration
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)

View File

@@ -3,7 +3,7 @@
namespace MediaBrowser.Model.Configuration
{
/// <summary>
/// Enum MetadataPluginType
/// Enum MetadataPluginType.
/// </summary>
public enum MetadataPluginType
{

View File

@@ -116,19 +116,19 @@ namespace MediaBrowser.Model.Configuration
public string MetadataCountryCode { get; set; }
/// <summary>
/// Characters to be replaced with a ' ' in strings to create a sort name
/// Characters to be replaced with a ' ' in strings to create a sort name.
/// </summary>
/// <value>The sort replace characters.</value>
public string[] SortReplaceCharacters { get; set; }
/// <summary>
/// Characters to be removed from strings to create a sort name
/// Characters to be removed from strings to create a sort name.
/// </summary>
/// <value>The sort remove characters.</value>
public string[] SortRemoveCharacters { get; set; }
/// <summary>
/// Words to be removed from strings to create a sort name
/// Words to be removed from strings to create a sort name.
/// </summary>
/// <value>The sort remove words.</value>
public string[] SortRemoveWords { get; set; }

View File

@@ -1,13 +0,0 @@
#pragma warning disable CS1591
namespace MediaBrowser.Model.Configuration
{
public enum SubtitlePlaybackMode
{
Default = 0,
Always = 1,
OnlyForced = 2,
None = 3,
Smart = 4
}
}

View File

@@ -1,23 +0,0 @@
namespace MediaBrowser.Model.Configuration
{
/// <summary>
/// Enum SyncPlayAccess.
/// </summary>
public enum SyncPlayAccess
{
/// <summary>
/// User can create groups and join them.
/// </summary>
CreateAndJoinGroups,
/// <summary>
/// User can only join already existing groups.
/// </summary>
JoinGroups,
/// <summary>
/// SyncPlay is disabled for the user.
/// </summary>
None
}
}

View File

@@ -1,17 +0,0 @@
#pragma warning disable CS1591
namespace MediaBrowser.Model.Configuration
{
public enum UnratedItem
{
Movie,
Trailer,
Series,
Music,
Book,
LiveTvChannel,
LiveTvProgram,
ChannelContent,
Other
}
}

View File

@@ -2,11 +2,12 @@
#pragma warning disable CS1591
using System;
using Jellyfin.Data.Enums;
namespace MediaBrowser.Model.Configuration
{
/// <summary>
/// Class UserConfiguration
/// Class UserConfiguration.
/// </summary>
public class UserConfiguration
{
@@ -33,6 +34,7 @@ namespace MediaBrowser.Model.Configuration
public string[] GroupedFolders { get; set; }
public SubtitlePlaybackMode SubtitleMode { get; set; }
public bool DisplayCollectionsView { get; set; }
public bool EnableLocalPassword { get; set; }
@@ -40,12 +42,15 @@ namespace MediaBrowser.Model.Configuration
public string[] OrderedViews { get; set; }
public string[] LatestItemsExcludes { get; set; }
public string[] MyMediaExcludes { get; set; }
public bool HidePlayedInLatest { get; set; }
public bool RememberAudioSelections { get; set; }
public bool RememberSubtitleSelections { get; set; }
public bool EnableNextEpisodeAutoPlay { get; set; }
/// <summary>

View File

@@ -10,6 +10,7 @@ namespace MediaBrowser.Model.Configuration
public string ReleaseDateFormat { get; set; }
public bool SaveImagePathsInNfo { get; set; }
public bool EnablePathSubstitution { get; set; }
public bool EnableExtraThumbsDuplication { get; set; }

View File

@@ -47,7 +47,7 @@ namespace MediaBrowser.Model.Dlna
public int? MaxAudioChannels { get; set; }
/// <summary>
/// The application's configured quality setting
/// The application's configured quality setting.
/// </summary>
public long? MaxBitrate { get; set; }
@@ -85,6 +85,7 @@ namespace MediaBrowser.Model.Dlna
{
return Profile.MaxStaticMusicBitrate;
}
return Profile.MaxStaticBitrate;
}

View File

@@ -79,11 +79,11 @@ namespace MediaBrowser.Model.Dlna
DlnaFlags.InteractiveTransferMode |
DlnaFlags.DlnaV15;
//if (isDirectStream)
// if (isDirectStream)
//{
// flagValue = flagValue | DlnaFlags.ByteBasedSeek;
//}
//else if (runtimeTicks.HasValue)
// else if (runtimeTicks.HasValue)
//{
// flagValue = flagValue | DlnaFlags.TimeBasedSeek;
//}
@@ -148,11 +148,11 @@ namespace MediaBrowser.Model.Dlna
DlnaFlags.InteractiveTransferMode |
DlnaFlags.DlnaV15;
//if (isDirectStream)
// if (isDirectStream)
//{
// flagValue = flagValue | DlnaFlags.ByteBasedSeek;
//}
//else if (runtimeTicks.HasValue)
// else if (runtimeTicks.HasValue)
//{
// flagValue = flagValue | DlnaFlags.TimeBasedSeek;
//}

View File

@@ -27,16 +27,25 @@ namespace MediaBrowser.Model.Dlna
public DeviceIdentification Identification { get; set; }
public string FriendlyName { get; set; }
public string Manufacturer { get; set; }
public string ManufacturerUrl { get; set; }
public string ModelName { get; set; }
public string ModelDescription { get; set; }
public string ModelNumber { get; set; }
public string ModelUrl { get; set; }
public string SerialNumber { get; set; }
public bool EnableAlbumArtInDidl { get; set; }
public bool EnableSingleAlbumArtLimit { get; set; }
public bool EnableSingleSubtitleLimit { get; set; }
public string SupportedMediaTypes { get; set; }
@@ -46,15 +55,19 @@ namespace MediaBrowser.Model.Dlna
public string AlbumArtPn { get; set; }
public int MaxAlbumArtWidth { get; set; }
public int MaxAlbumArtHeight { get; set; }
public int? MaxIconWidth { get; set; }
public int? MaxIconHeight { get; set; }
public long? MaxStreamingBitrate { get; set; }
public long? MaxStaticBitrate { get; set; }
public int? MusicStreamingTranscodingBitrate { get; set; }
public int? MaxStaticMusicBitrate { get; set; }
/// <summary>
@@ -65,10 +78,13 @@ namespace MediaBrowser.Model.Dlna
public string ProtocolInfo { get; set; }
public int TimelineOffsetSeconds { get; set; }
public bool RequiresPlainVideoItems { get; set; }
public bool RequiresPlainFolders { get; set; }
public bool EnableMSMediaReceiverRegistrar { get; set; }
public bool IgnoreTranscodeByteRangeRequests { get; set; }
public XmlAttribute[] XmlRootAttributes { get; set; }
@@ -88,6 +104,7 @@ namespace MediaBrowser.Model.Dlna
public ContainerProfile[] ContainerProfiles { get; set; }
public CodecProfile[] CodecProfiles { get; set; }
public ResponseProfile[] ResponseProfiles { get; set; }
public SubtitleProfile[] SubtitleProfiles { get; set; }
@@ -169,6 +186,7 @@ namespace MediaBrowser.Model.Dlna
return i;
}
return null;
}
@@ -209,6 +227,7 @@ namespace MediaBrowser.Model.Dlna
return i;
}
return null;
}
@@ -254,6 +273,7 @@ namespace MediaBrowser.Model.Dlna
return i;
}
return null;
}
@@ -318,6 +338,7 @@ namespace MediaBrowser.Model.Dlna
return i;
}
return null;
}
}

View File

@@ -107,6 +107,7 @@ namespace MediaBrowser.Model.Dlna
return list.ToArray();
}
if (string.Equals(videoCodec, "h264", StringComparison.OrdinalIgnoreCase))
{
if (string.Equals(audioCodec, "lpcm", StringComparison.OrdinalIgnoreCase))
@@ -150,15 +151,16 @@ namespace MediaBrowser.Model.Dlna
{
return new MediaFormatProfile[] { MediaFormatProfile.VC1_TS_AP_L2_AC3_ISO };
}
return new MediaFormatProfile[] { MediaFormatProfile.VC1_TS_AP_L1_AC3_ISO };
}
if (string.Equals(audioCodec, "dts", StringComparison.OrdinalIgnoreCase))
{
suffix = string.Equals(suffix, "_ISO", StringComparison.OrdinalIgnoreCase) ? suffix : "_T";
return new MediaFormatProfile[] { ValueOf(string.Format("VC1_TS_HD_DTS{0}", suffix)) };
}
}
else if (string.Equals(videoCodec, "mpeg4", StringComparison.OrdinalIgnoreCase) || string.Equals(videoCodec, "msmpeg4", StringComparison.OrdinalIgnoreCase))
{
@@ -191,10 +193,12 @@ namespace MediaBrowser.Model.Dlna
{
return MediaFormatProfile.AVC_MP4_MP_SD_AC3;
}
if (string.Equals(audioCodec, "mp3", StringComparison.OrdinalIgnoreCase))
{
return MediaFormatProfile.AVC_MP4_MP_SD_MPEG1_L3;
}
if (width.HasValue && height.HasValue)
{
if ((width.Value <= 720) && (height.Value <= 576))
@@ -278,6 +282,7 @@ namespace MediaBrowser.Model.Dlna
{
return MediaFormatProfile.WMVMED_FULL;
}
return MediaFormatProfile.WMVMED_PRO;
}
}
@@ -286,6 +291,7 @@ namespace MediaBrowser.Model.Dlna
{
return MediaFormatProfile.WMVHIGH_FULL;
}
return MediaFormatProfile.WMVHIGH_PRO;
}
@@ -343,6 +349,7 @@ namespace MediaBrowser.Model.Dlna
{
return MediaFormatProfile.WMA_BASE;
}
return MediaFormatProfile.WMA_FULL;
}
@@ -354,14 +361,17 @@ namespace MediaBrowser.Model.Dlna
{
return MediaFormatProfile.LPCM16_44_MONO;
}
if (frequency.Value == 44100 && channels.Value == 2)
{
return MediaFormatProfile.LPCM16_44_STEREO;
}
if (frequency.Value == 48000 && channels.Value == 1)
{
return MediaFormatProfile.LPCM16_48_MONO;
}
if (frequency.Value == 48000 && channels.Value == 2)
{
return MediaFormatProfile.LPCM16_48_STEREO;
@@ -379,6 +389,7 @@ namespace MediaBrowser.Model.Dlna
{
return MediaFormatProfile.AAC_ISO_320;
}
return MediaFormatProfile.AAC_ISO;
}
@@ -388,6 +399,7 @@ namespace MediaBrowser.Model.Dlna
{
return MediaFormatProfile.AAC_ADTS_320;
}
return MediaFormatProfile.AAC_ADTS;
}

View File

@@ -15,7 +15,6 @@ namespace MediaBrowser.Model.Dlna
public ProfileCondition(ProfileConditionType condition, ProfileConditionValue property, string value)
: this(condition, property, value, false)
{
}
public ProfileCondition(ProfileConditionType condition, ProfileConditionValue property, string value, bool isRequired)

View File

@@ -10,7 +10,6 @@ namespace MediaBrowser.Model.Dlna
public SortCriteria(string value)
{
}
}
}

View File

@@ -109,7 +109,6 @@ namespace MediaBrowser.Model.Dlna
}
return 1;
}).ThenBy(i =>
{
switch (i.PlayMethod)
@@ -121,7 +120,6 @@ namespace MediaBrowser.Model.Dlna
default:
return 1;
}
}).ThenBy(i =>
{
switch (i.MediaSource.Protocol)
@@ -131,7 +129,6 @@ namespace MediaBrowser.Model.Dlna
default:
return 1;
}
}).ThenBy(i =>
{
if (maxBitrate > 0)
@@ -143,7 +140,6 @@ namespace MediaBrowser.Model.Dlna
}
return 0;
}).ThenBy(streams.IndexOf);
}
@@ -631,10 +627,12 @@ namespace MediaBrowser.Model.Dlna
{
playlistItem.MinSegments = transcodingProfile.MinSegments;
}
if (transcodingProfile.SegmentLength > 0)
{
playlistItem.SegmentLength = transcodingProfile.SegmentLength;
}
playlistItem.SubProtocol = transcodingProfile.Protocol;
if (!string.IsNullOrEmpty(transcodingProfile.MaxAudioChannels)
@@ -781,7 +779,7 @@ namespace MediaBrowser.Model.Dlna
if (!ConditionProcessor.IsVideoConditionSatisfied(applyCondition, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, isInterlaced, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc))
{
//LogConditionFailure(options.Profile, "VideoCodecProfile.ApplyConditions", applyCondition, item);
// LogConditionFailure(options.Profile, "VideoCodecProfile.ApplyConditions", applyCondition, item);
applyConditions = false;
break;
}
@@ -825,7 +823,7 @@ namespace MediaBrowser.Model.Dlna
if (!ConditionProcessor.IsVideoAudioConditionSatisfied(applyCondition, audioChannels, inputAudioBitrate, inputAudioSampleRate, inputAudioBitDepth, audioProfile, isSecondaryAudio))
{
//LogConditionFailure(options.Profile, "VideoCodecProfile.ApplyConditions", applyCondition, item);
// LogConditionFailure(options.Profile, "VideoCodecProfile.ApplyConditions", applyCondition, item);
applyConditions = false;
break;
}
@@ -951,6 +949,7 @@ namespace MediaBrowser.Model.Dlna
{
return (PlayMethod.DirectPlay, new List<TranscodeReason>());
}
if (options.ForceDirectStream)
{
return (PlayMethod.DirectStream, new List<TranscodeReason>());
@@ -1046,7 +1045,7 @@ namespace MediaBrowser.Model.Dlna
{
if (!ConditionProcessor.IsVideoConditionSatisfied(applyCondition, width, height, bitDepth, videoBitrate, videoProfile, videoLevel, videoFramerate, packetLength, timestamp, isAnamorphic, isInterlaced, refFrames, numVideoStreams, numAudioStreams, videoCodecTag, isAvc))
{
//LogConditionFailure(profile, "VideoCodecProfile.ApplyConditions", applyCondition, mediaSource);
// LogConditionFailure(profile, "VideoCodecProfile.ApplyConditions", applyCondition, mediaSource);
applyConditions = false;
break;
}
@@ -1092,7 +1091,7 @@ namespace MediaBrowser.Model.Dlna
{
if (!ConditionProcessor.IsVideoAudioConditionSatisfied(applyCondition, audioChannels, audioBitrate, audioSampleRate, audioBitDepth, audioProfile, isSecondaryAudio))
{
//LogConditionFailure(profile, "VideoAudioCodecProfile.ApplyConditions", applyCondition, mediaSource);
// LogConditionFailure(profile, "VideoAudioCodecProfile.ApplyConditions", applyCondition, mediaSource);
applyConditions = false;
break;
}
@@ -1265,6 +1264,7 @@ namespace MediaBrowser.Model.Dlna
return true;
}
}
return false;
}
@@ -1367,14 +1367,17 @@ namespace MediaBrowser.Model.Dlna
{
throw new ArgumentException("ItemId is required");
}
if (string.IsNullOrEmpty(options.DeviceId))
{
throw new ArgumentException("DeviceId is required");
}
if (options.Profile == null)
{
throw new ArgumentException("Profile is required");
}
if (options.MediaSources == null)
{
throw new ArgumentException("MediaSources is required");
@@ -1422,6 +1425,7 @@ namespace MediaBrowser.Model.Dlna
item.AudioBitrate = Math.Max(num, item.AudioBitrate ?? num);
}
}
break;
}
case ProfileConditionValue.AudioChannels:
@@ -1456,6 +1460,7 @@ namespace MediaBrowser.Model.Dlna
item.SetOption(qualifier, "audiochannels", Math.Max(num, item.GetTargetAudioChannels(qualifier) ?? num).ToString(CultureInfo.InvariantCulture));
}
}
break;
}
case ProfileConditionValue.IsAvc:
@@ -1476,6 +1481,7 @@ namespace MediaBrowser.Model.Dlna
item.RequireAvc = true;
}
}
break;
}
case ProfileConditionValue.IsAnamorphic:
@@ -1496,6 +1502,7 @@ namespace MediaBrowser.Model.Dlna
item.RequireNonAnamorphic = true;
}
}
break;
}
case ProfileConditionValue.IsInterlaced:
@@ -1526,6 +1533,7 @@ namespace MediaBrowser.Model.Dlna
item.SetOption(qualifier, "deinterlace", "true");
}
}
break;
}
case ProfileConditionValue.AudioProfile:
@@ -1571,6 +1579,7 @@ namespace MediaBrowser.Model.Dlna
item.SetOption(qualifier, "maxrefframes", Math.Max(num, item.GetTargetRefFrames(qualifier) ?? num).ToString(CultureInfo.InvariantCulture));
}
}
break;
}
case ProfileConditionValue.VideoBitDepth:
@@ -1605,6 +1614,7 @@ namespace MediaBrowser.Model.Dlna
item.SetOption(qualifier, "videobitdepth", Math.Max(num, item.GetTargetVideoBitDepth(qualifier) ?? num).ToString(CultureInfo.InvariantCulture));
}
}
break;
}
case ProfileConditionValue.VideoProfile:
@@ -1627,6 +1637,7 @@ namespace MediaBrowser.Model.Dlna
item.SetOption(qualifier, "profile", string.Join(",", values));
}
}
break;
}
case ProfileConditionValue.Height:
@@ -1651,6 +1662,7 @@ namespace MediaBrowser.Model.Dlna
item.MaxHeight = Math.Max(num, item.MaxHeight ?? num);
}
}
break;
}
case ProfileConditionValue.VideoBitrate:
@@ -1675,6 +1687,7 @@ namespace MediaBrowser.Model.Dlna
item.VideoBitrate = Math.Max(num, item.VideoBitrate ?? num);
}
}
break;
}
case ProfileConditionValue.VideoFramerate:
@@ -1699,6 +1712,7 @@ namespace MediaBrowser.Model.Dlna
item.MaxFramerate = Math.Max(num, item.MaxFramerate ?? num);
}
}
break;
}
case ProfileConditionValue.VideoLevel:
@@ -1723,6 +1737,7 @@ namespace MediaBrowser.Model.Dlna
item.SetOption(qualifier, "level", Math.Max(num, item.GetTargetVideoLevel(qualifier) ?? num).ToString(CultureInfo.InvariantCulture));
}
}
break;
}
case ProfileConditionValue.Width:
@@ -1747,8 +1762,10 @@ namespace MediaBrowser.Model.Dlna
item.MaxWidth = Math.Max(num, item.MaxWidth ?? num);
}
}
break;
}
default:
break;
}

View File

@@ -69,6 +69,7 @@ namespace MediaBrowser.Model.Dlna
public Guid ItemId { get; set; }
public PlayMethod PlayMethod { get; set; }
public EncodingContext Context { get; set; }
public DlnaProfileType MediaType { get; set; }
@@ -80,15 +81,23 @@ namespace MediaBrowser.Model.Dlna
public long StartPositionTicks { get; set; }
public int? SegmentLength { get; set; }
public int? MinSegments { get; set; }
public bool BreakOnNonKeyFrames { get; set; }
public bool RequireAvc { get; set; }
public bool RequireNonAnamorphic { get; set; }
public bool CopyTimestamps { get; set; }
public bool EnableMpegtsM2TsMode { get; set; }
public bool EnableSubtitlesInManifest { get; set; }
public string[] AudioCodecs { get; set; }
public string[] VideoCodecs { get; set; }
public int? AudioStreamIndex { get; set; }
@@ -96,6 +105,7 @@ namespace MediaBrowser.Model.Dlna
public int? SubtitleStreamIndex { get; set; }
public int? TranscodingMaxAudioChannels { get; set; }
public int? GlobalMaxAudioChannels { get; set; }
public int? AudioBitrate { get; set; }
@@ -103,12 +113,15 @@ namespace MediaBrowser.Model.Dlna
public int? VideoBitrate { get; set; }
public int? MaxWidth { get; set; }
public int? MaxHeight { get; set; }
public float? MaxFramerate { get; set; }
public DeviceProfile DeviceProfile { get; set; }
public string DeviceProfileId { get; set; }
public string DeviceId { get; set; }
public long? RunTimeTicks { get; set; }
@@ -120,10 +133,13 @@ namespace MediaBrowser.Model.Dlna
public MediaSourceInfo MediaSource { get; set; }
public string[] SubtitleCodecs { get; set; }
public SubtitleDeliveryMethod SubtitleDeliveryMethod { get; set; }
public string SubtitleFormat { get; set; }
public string PlaySessionId { get; set; }
public TranscodeReason[] TranscodeReasons { get; set; }
public Dictionary<string, string> StreamOptions { get; private set; }
@@ -160,11 +176,13 @@ namespace MediaBrowser.Model.Dlna
{
continue;
}
if (string.Equals(pair.Name, "SubtitleStreamIndex", StringComparison.OrdinalIgnoreCase) &&
string.Equals(pair.Value, "-1", StringComparison.OrdinalIgnoreCase))
{
continue;
}
if (string.Equals(pair.Name, "Static", StringComparison.OrdinalIgnoreCase) &&
string.Equals(pair.Value, "false", StringComparison.OrdinalIgnoreCase))
{
@@ -465,7 +483,7 @@ namespace MediaBrowser.Model.Dlna
}
/// <summary>
/// Returns the audio stream that will be used
/// Returns the audio stream that will be used.
/// </summary>
public MediaStream TargetAudioStream
{
@@ -481,7 +499,7 @@ namespace MediaBrowser.Model.Dlna
}
/// <summary>
/// Returns the video stream that will be used
/// Returns the video stream that will be used.
/// </summary>
public MediaStream TargetVideoStream
{
@@ -497,7 +515,7 @@ namespace MediaBrowser.Model.Dlna
}
/// <summary>
/// Predicts the audio sample rate that will be in the output stream
/// Predicts the audio sample rate that will be in the output stream.
/// </summary>
public int? TargetAudioSampleRate
{
@@ -509,7 +527,7 @@ namespace MediaBrowser.Model.Dlna
}
/// <summary>
/// Predicts the audio sample rate that will be in the output stream
/// Predicts the audio sample rate that will be in the output stream.
/// </summary>
public int? TargetAudioBitDepth
{
@@ -532,7 +550,7 @@ namespace MediaBrowser.Model.Dlna
}
/// <summary>
/// Predicts the audio sample rate that will be in the output stream
/// Predicts the audio sample rate that will be in the output stream.
/// </summary>
public int? TargetVideoBitDepth
{
@@ -579,7 +597,7 @@ namespace MediaBrowser.Model.Dlna
}
/// <summary>
/// Predicts the audio sample rate that will be in the output stream
/// Predicts the audio sample rate that will be in the output stream.
/// </summary>
public float? TargetFramerate
{
@@ -593,7 +611,7 @@ namespace MediaBrowser.Model.Dlna
}
/// <summary>
/// Predicts the audio sample rate that will be in the output stream
/// Predicts the audio sample rate that will be in the output stream.
/// </summary>
public double? TargetVideoLevel
{
@@ -680,7 +698,7 @@ namespace MediaBrowser.Model.Dlna
}
/// <summary>
/// Predicts the audio sample rate that will be in the output stream
/// Predicts the audio sample rate that will be in the output stream.
/// </summary>
public int? TargetPacketLength
{
@@ -694,7 +712,7 @@ namespace MediaBrowser.Model.Dlna
}
/// <summary>
/// Predicts the audio sample rate that will be in the output stream
/// Predicts the audio sample rate that will be in the output stream.
/// </summary>
public string TargetVideoProfile
{
@@ -732,7 +750,7 @@ namespace MediaBrowser.Model.Dlna
}
/// <summary>
/// Predicts the audio bitrate that will be in the output stream
/// Predicts the audio bitrate that will be in the output stream.
/// </summary>
public int? TargetAudioBitrate
{
@@ -746,7 +764,7 @@ namespace MediaBrowser.Model.Dlna
}
/// <summary>
/// Predicts the audio channels that will be in the output stream
/// Predicts the audio channels that will be in the output stream.
/// </summary>
public int? TargetAudioChannels
{
@@ -787,7 +805,7 @@ namespace MediaBrowser.Model.Dlna
}
/// <summary>
/// Predicts the audio codec that will be in the output stream
/// Predicts the audio codec that will be in the output stream.
/// </summary>
public string[] TargetAudioCodec
{
@@ -840,7 +858,7 @@ namespace MediaBrowser.Model.Dlna
}
/// <summary>
/// Predicts the audio channels that will be in the output stream
/// Predicts the audio channels that will be in the output stream.
/// </summary>
public long? TargetSize
{
@@ -993,6 +1011,7 @@ namespace MediaBrowser.Model.Dlna
{
return GetMediaStreamCount(MediaStreamType.Video, int.MaxValue);
}
return GetMediaStreamCount(MediaStreamType.Video, 1);
}
}
@@ -1005,6 +1024,7 @@ namespace MediaBrowser.Model.Dlna
{
return GetMediaStreamCount(MediaStreamType.Audio, int.MaxValue);
}
return GetMediaStreamCount(MediaStreamType.Audio, 1);
}
}

View File

@@ -5,22 +5,22 @@ namespace MediaBrowser.Model.Dlna
public enum SubtitleDeliveryMethod
{
/// <summary>
/// The encode
/// The encode.
/// </summary>
Encode = 0,
/// <summary>
/// The embed
/// The embed.
/// </summary>
Embed = 1,
/// <summary>
/// The external
/// The external.
/// </summary>
External = 2,
/// <summary>
/// The HLS
/// The HLS.
/// </summary>
Hls = 3
}

View File

@@ -62,17 +62,23 @@ namespace MediaBrowser.Model.Dto
public DateTime? DateCreated { get; set; }
public DateTime? DateLastMediaAdded { get; set; }
public string ExtraType { get; set; }
public int? AirsBeforeSeasonNumber { get; set; }
public int? AirsAfterSeasonNumber { get; set; }
public int? AirsBeforeEpisodeNumber { get; set; }
public bool? CanDelete { get; set; }
public bool? CanDownload { get; set; }
public bool? HasSubtitles { get; set; }
public string PreferredMetadataLanguage { get; set; }
public string PreferredMetadataCountryCode { get; set; }
/// <summary>
@@ -87,6 +93,7 @@ namespace MediaBrowser.Model.Dto
/// </summary>
/// <value>The name of the sort.</value>
public string SortName { get; set; }
public string ForcedSortName { get; set; }
/// <summary>
@@ -146,6 +153,7 @@ namespace MediaBrowser.Model.Dto
/// </summary>
/// <value>The channel identifier.</value>
public Guid ChannelId { get; set; }
public string ChannelName { get; set; }
/// <summary>
@@ -213,6 +221,7 @@ namespace MediaBrowser.Model.Dto
/// </summary>
/// <value>The number.</value>
public string Number { get; set; }
public string ChannelNumber { get; set; }
/// <summary>
@@ -308,7 +317,7 @@ namespace MediaBrowser.Model.Dto
public int? LocalTrailerCount { get; set; }
/// <summary>
/// User data for this item based on the user it's being requested for
/// User data for this item based on the user it's being requested for.
/// </summary>
/// <value>The user data.</value>
public UserItemDataDto UserData { get; set; }
@@ -467,6 +476,7 @@ namespace MediaBrowser.Model.Dto
/// </summary>
/// <value>The part count.</value>
public int? PartCount { get; set; }
public int? MediaSourceCount { get; set; }
/// <summary>
@@ -582,7 +592,7 @@ namespace MediaBrowser.Model.Dto
/// Gets or sets the locked fields.
/// </summary>
/// <value>The locked fields.</value>
public MetadataFields[] LockedFields { get; set; }
public MetadataField[] LockedFields { get; set; }
/// <summary>
/// Gets or sets the trailer count.
@@ -599,6 +609,7 @@ namespace MediaBrowser.Model.Dto
/// </summary>
/// <value>The series count.</value>
public int? SeriesCount { get; set; }
public int? ProgramCount { get; set; }
/// <summary>
/// Gets or sets the episode count.
@@ -615,6 +626,7 @@ namespace MediaBrowser.Model.Dto
/// </summary>
/// <value>The album count.</value>
public int? AlbumCount { get; set; }
public int? ArtistCount { get; set; }
/// <summary>
/// Gets or sets the music video count.
@@ -629,18 +641,31 @@ namespace MediaBrowser.Model.Dto
public bool? LockData { get; set; }
public int? Width { get; set; }
public int? Height { get; set; }
public string CameraMake { get; set; }
public string CameraModel { get; set; }
public string Software { get; set; }
public double? ExposureTime { get; set; }
public double? FocalLength { get; set; }
public ImageOrientation? ImageOrientation { get; set; }
public double? Aperture { get; set; }
public double? ShutterSpeed { get; set; }
public double? Latitude { get; set; }
public double? Longitude { get; set; }
public double? Altitude { get; set; }
public int? IsoSpeedRating { get; set; }
/// <summary>

View File

@@ -1,5 +1,7 @@
#nullable disable
using System.Collections.Generic;
using System.Text.Json.Serialization;
using MediaBrowser.Model.Entities;
namespace MediaBrowser.Model.Dto
{
@@ -38,6 +40,12 @@ namespace MediaBrowser.Model.Dto
/// <value>The primary image tag.</value>
public string PrimaryImageTag { get; set; }
/// <summary>
/// Gets or sets the primary image blurhash.
/// </summary>
/// <value>The primary image blurhash.</value>
public Dictionary<ImageType, Dictionary<string, string>> ImageBlurHashes { get; set; }
/// <summary>
/// Gets a value indicating whether this instance has primary image.
/// </summary>

View File

@@ -61,7 +61,7 @@ namespace MediaBrowser.Model.Dto
/// <summary>
/// Gets or sets the image tag.
/// If set this will result in strong, unconditional response caching
/// If set this will result in strong, unconditional response caching.
/// </summary>
/// <value>The hash.</value>
public string Tag { get; set; }

View File

@@ -13,39 +13,56 @@ namespace MediaBrowser.Model.Dto
public class MediaSourceInfo
{
public MediaProtocol Protocol { get; set; }
public string Id { get; set; }
public string Path { get; set; }
public string EncoderPath { get; set; }
public MediaProtocol? EncoderProtocol { get; set; }
public MediaSourceType Type { get; set; }
public string Container { get; set; }
public long? Size { get; set; }
public string Name { get; set; }
/// <summary>
/// Differentiate internet url vs local network
/// Differentiate internet url vs local network.
/// </summary>
public bool IsRemote { get; set; }
public string ETag { get; set; }
public long? RunTimeTicks { get; set; }
public bool ReadAtNativeFramerate { get; set; }
public bool IgnoreDts { get; set; }
public bool IgnoreIndex { get; set; }
public bool GenPtsInput { get; set; }
public bool SupportsTranscoding { get; set; }
public bool SupportsDirectStream { get; set; }
public bool SupportsDirectPlay { get; set; }
public bool IsInfiniteStream { get; set; }
public bool RequiresOpening { get; set; }
public string OpenToken { get; set; }
public bool RequiresClosing { get; set; }
public string LiveStreamId { get; set; }
public int? BufferMs { get; set; }
public bool RequiresLooping { get; set; }
@@ -67,10 +84,13 @@ namespace MediaBrowser.Model.Dto
public int? Bitrate { get; set; }
public TransportStreamTimestamp? Timestamp { get; set; }
public Dictionary<string, string> RequiredHttpHeaders { get; set; }
public string TranscodingUrl { get; set; }
public string TranscodingSubProtocol { get; set; }
public string TranscodingContainer { get; set; }
public int? AnalyzeDurationMs { get; set; }
@@ -118,6 +138,7 @@ namespace MediaBrowser.Model.Dto
public TranscodeReason[] TranscodeReasons { get; set; }
public int? DefaultAudioStreamIndex { get; set; }
public int? DefaultSubtitleStreamIndex { get; set; }
public MediaStream GetDefaultAudioStream(int? defaultIndex)

View File

@@ -11,11 +11,15 @@ namespace MediaBrowser.Model.Dto
public class MetadataEditorInfo
{
public ParentalRating[] ParentalRatingOptions { get; set; }
public CountryInfo[] Countries { get; set; }
public CultureDto[] Cultures { get; set; }
public ExternalIdInfo[] ExternalIdInfos { get; set; }
public string ContentType { get; set; }
public NameValuePair[] ContentTypeOptions { get; set; }
public MetadataEditorInfo()

View File

@@ -23,6 +23,7 @@ namespace MediaBrowser.Model.Dto
public class NameGuidPair
{
public string Name { get; set; }
public Guid Id { get; set; }
}
}

View File

@@ -104,7 +104,7 @@ namespace MediaBrowser.Model.Entities
public bool ShowSidebar { get; set; }
/// <summary>
/// Gets or sets the client
/// Gets or sets the client.
/// </summary>
public string Client { get; set; }
}

View File

@@ -63,6 +63,11 @@ namespace MediaBrowser.Model.Entities
/// <summary>
/// The box rear.
/// </summary>
BoxRear = 11
BoxRear = 11,
/// <summary>
/// The user profile image.
/// </summary>
Profile = 12
}
}

View File

@@ -13,7 +13,7 @@ using MediaBrowser.Model.MediaInfo;
namespace MediaBrowser.Model.Entities
{
/// <summary>
/// Class MediaStream
/// Class MediaStream.
/// </summary>
public class MediaStream
{
@@ -114,7 +114,7 @@ namespace MediaBrowser.Model.Entities
{
if (Type == MediaStreamType.Audio)
{
//if (!string.IsNullOrEmpty(Title))
// if (!string.IsNullOrEmpty(Title))
//{
// return AddLanguageIfNeeded(Title);
//}
@@ -125,6 +125,7 @@ namespace MediaBrowser.Model.Entities
{
attributes.Add(StringHelper.FirstToUpper(Language));
}
if (!string.IsNullOrEmpty(Codec) && !string.Equals(Codec, "dca", StringComparison.OrdinalIgnoreCase))
{
attributes.Add(AudioCodec.GetFriendlyName(Codec));
@@ -142,6 +143,7 @@ namespace MediaBrowser.Model.Entities
{
attributes.Add(Channels.Value.ToString(CultureInfo.InvariantCulture) + " ch");
}
if (IsDefault)
{
attributes.Add("Default");
@@ -208,7 +210,6 @@ namespace MediaBrowser.Model.Entities
if (Type == MediaStreamType.Video)
{
}
return null;
@@ -228,30 +229,37 @@ namespace MediaBrowser.Model.Entities
{
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)
{
@@ -259,11 +267,13 @@ namespace MediaBrowser.Model.Entities
{
return "480i";
}
return "480p";
}
return "SD";
}
return null;
}
@@ -449,6 +459,7 @@ namespace MediaBrowser.Model.Entities
{
return false;
}
if (string.Equals(fromCodec, "ssa", StringComparison.OrdinalIgnoreCase))
{
return false;
@@ -459,6 +470,7 @@ namespace MediaBrowser.Model.Entities
{
return false;
}
if (string.Equals(toCodec, "ssa", StringComparison.OrdinalIgnoreCase))
{
return false;

View File

@@ -6,6 +6,7 @@ namespace MediaBrowser.Model.Entities
public class MediaUrl
{
public string Url { get; set; }
public string Name { get; set; }
}
}

View File

@@ -3,7 +3,7 @@ namespace MediaBrowser.Model.Entities
/// <summary>
/// Enum MetadataFields.
/// </summary>
public enum MetadataFields
public enum MetadataField
{
/// <summary>
/// The cast.

View File

@@ -3,28 +3,28 @@
namespace MediaBrowser.Model.Entities
{
/// <summary>
/// Enum MetadataProviders
/// Enum MetadataProviders.
/// </summary>
public enum MetadataProviders
public enum MetadataProvider
{
/// <summary>
/// The imdb
/// The imdb.
/// </summary>
Imdb = 2,
/// <summary>
/// The TMDB
/// The TMDB.
/// </summary>
Tmdb = 3,
/// <summary>
/// The TVDB
/// The TVDB.
/// </summary>
Tvdb = 4,
/// <summary>
/// The tvcom
/// The tvcom.
/// </summary>
Tvcom = 5,
/// <summary>
/// Tmdb Collection Id
/// Tmdb Collection Id.
/// </summary>
TmdbCollection = 7,
MusicBrainzAlbum = 8,

View File

@@ -36,6 +36,5 @@ namespace MediaBrowser.Model.Entities
/// Gets or sets the time of review.
/// </summary>
public DateTime timestamp { get; set; }
}
}

View File

@@ -14,7 +14,7 @@ namespace MediaBrowser.Model.Entities
/// <param name="instance">The instance.</param>
/// <param name="provider">The provider.</param>
/// <returns><c>true</c> if [has provider identifier] [the specified instance]; otherwise, <c>false</c>.</returns>
public static bool HasProviderId(this IHasProviderIds instance, MetadataProviders provider)
public static bool HasProviderId(this IHasProviderIds instance, MetadataProvider provider)
{
return !string.IsNullOrEmpty(instance.GetProviderId(provider.ToString()));
}
@@ -25,7 +25,7 @@ namespace MediaBrowser.Model.Entities
/// <param name="instance">The instance.</param>
/// <param name="provider">The provider.</param>
/// <returns>System.String.</returns>
public static string? GetProviderId(this IHasProviderIds instance, MetadataProviders provider)
public static string? GetProviderId(this IHasProviderIds instance, MetadataProvider provider)
{
return instance.GetProviderId(provider.ToString());
}
@@ -94,7 +94,7 @@ namespace MediaBrowser.Model.Entities
/// <param name="instance">The instance.</param>
/// <param name="provider">The provider.</param>
/// <param name="value">The value.</param>
public static void SetProviderId(this IHasProviderIds instance, MetadataProviders provider, string value)
public static void SetProviderId(this IHasProviderIds instance, MetadataProvider provider, string value)
{
instance.SetProviderId(provider.ToString(), value);
}

View File

@@ -7,7 +7,7 @@ using MediaBrowser.Model.Configuration;
namespace MediaBrowser.Model.Entities
{
/// <summary>
/// Used to hold information about a user's list of configured virtual folders
/// Used to hold information about a user's list of configured virtual folders.
/// </summary>
public class VirtualFolderInfo
{
@@ -52,6 +52,7 @@ namespace MediaBrowser.Model.Entities
public string PrimaryImageItemId { get; set; }
public double? RefreshProgress { get; set; }
public string RefreshStatus { get; set; }
}
}

View File

@@ -5,7 +5,7 @@ using System.IO;
namespace MediaBrowser.Model.IO
{
/// <summary>
/// Interface IZipClient
/// Interface IZipClient.
/// </summary>
public interface IZipClient
{

View File

@@ -124,6 +124,7 @@ namespace MediaBrowser.Model.LiveTv
/// </summary>
/// <value><c>true</c> if this instance is post padding required; otherwise, <c>false</c>.</value>
public bool IsPostPaddingRequired { get; set; }
public KeepUntil KeepUntil { get; set; }
}
}

View File

@@ -6,7 +6,7 @@ namespace MediaBrowser.Model.LiveTv
public enum ChannelType
{
/// <summary>
/// The TV
/// The TV.
/// </summary>
TV,

View File

@@ -54,7 +54,7 @@ namespace MediaBrowser.Model.LiveTv
public int? StartIndex { get; set; }
/// <summary>
/// The maximum number of items to return
/// The maximum number of items to return.
/// </summary>
/// <value>The limit.</value>
public int? Limit { get; set; }
@@ -64,16 +64,17 @@ namespace MediaBrowser.Model.LiveTv
/// </summary>
/// <value><c>true</c> if [add current program]; otherwise, <c>false</c>.</value>
public bool AddCurrentProgram { get; set; }
public bool EnableUserData { get; set; }
/// <summary>
/// Used to specific whether to return news or not
/// Used to specific whether to return news or not.
/// </summary>
/// <remarks>If set to null, all programs will be returned</remarks>
public bool? IsNews { get; set; }
/// <summary>
/// Used to specific whether to return movies or not
/// Used to specific whether to return movies or not.
/// </summary>
/// <remarks>If set to null, all programs will be returned</remarks>
public bool? IsMovie { get; set; }
@@ -88,12 +89,13 @@ namespace MediaBrowser.Model.LiveTv
/// </summary>
/// <value><c>null</c> if [is sports] contains no value, <c>true</c> if [is sports]; otherwise, <c>false</c>.</value>
public bool? IsSports { get; set; }
public bool? IsSeries { get; set; }
public string[] SortBy { get; set; }
/// <summary>
/// The sort order to return results with
/// The sort order to return results with.
/// </summary>
/// <value>The sort order.</value>
public SortOrder? SortOrder { get; set; }

View File

@@ -9,21 +9,29 @@ namespace MediaBrowser.Model.LiveTv
public class LiveTvOptions
{
public int? GuideDays { get; set; }
public string RecordingPath { get; set; }
public string MovieRecordingPath { get; set; }
public string SeriesRecordingPath { get; set; }
public bool EnableRecordingSubfolders { get; set; }
public bool EnableOriginalAudioWithEncodedRecordings { get; set; }
public TunerHostInfo[] TunerHosts { get; set; }
public ListingsProviderInfo[] ListingProviders { get; set; }
public int PrePaddingSeconds { get; set; }
public int PostPaddingSeconds { get; set; }
public string[] MediaLocationsCreated { get; set; }
public string RecordingPostProcessor { get; set; }
public string RecordingPostProcessorArguments { get; set; }
public LiveTvOptions()
@@ -38,15 +46,25 @@ namespace MediaBrowser.Model.LiveTv
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()
@@ -58,23 +76,39 @@ namespace MediaBrowser.Model.LiveTv
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()

View File

@@ -37,7 +37,7 @@ namespace MediaBrowser.Model.LiveTv
public int? StartIndex { get; set; }
/// <summary>
/// The maximum number of items to return
/// The maximum number of items to return.
/// </summary>
/// <value>The limit.</value>
public int? Limit { get; set; }
@@ -61,18 +61,27 @@ namespace MediaBrowser.Model.LiveTv
public string SeriesTimerId { get; set; }
/// <summary>
/// Fields to return within the items, in addition to basic information
/// Fields to return within the items, in addition to basic information.
/// </summary>
/// <value>The fields.</value>
public ItemFields[] Fields { get; set; }
public bool? EnableImages { get; set; }
public bool? IsLibraryItem { get; set; }
public bool? IsNews { get; set; }
public bool? IsMovie { get; set; }
public bool? IsSeries { get; set; }
public bool? IsKids { get; set; }
public bool? IsSports { get; set; }
public int? ImageTypeLimit { get; set; }
public ImageType[] EnableImageTypes { get; set; }
public bool EnableTotalRecordCount { get; set; }

View File

@@ -7,7 +7,7 @@ namespace MediaBrowser.Model.LiveTv
public class SeriesTimerQuery
{
/// <summary>
/// Gets or sets the sort by - SortName, Priority
/// Gets or sets the sort by - SortName, Priority.
/// </summary>
/// <value>The sort by.</value>
public string? SortBy { get; set; }

View File

@@ -41,6 +41,5 @@ namespace MediaBrowser.Model.LiveTv
/// </summary>
/// <value>The program information.</value>
public BaseItemDto ProgramInfo { get; set; }
}
}

View File

@@ -23,7 +23,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="3.1.4" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="3.1.5" />
<PackageReference Include="System.Globalization" Version="4.3.0" />
<PackageReference Include="System.Text.Json" Version="4.7.2" />
</ItemGroup>

View File

@@ -32,18 +32,29 @@ namespace MediaBrowser.Model.MediaInfo
}
public string OpenToken { get; set; }
public Guid UserId { get; set; }
public string PlaySessionId { get; set; }
public long? MaxStreamingBitrate { get; set; }
public long? StartTimeTicks { get; set; }
public int? AudioStreamIndex { get; set; }
public int? SubtitleStreamIndex { get; set; }
public int? MaxAudioChannels { get; set; }
public Guid ItemId { get; set; }
public DeviceProfile DeviceProfile { get; set; }
public bool EnableDirectPlay { get; set; }
public bool EnableDirectStream { get; set; }
public MediaProtocol[] DirectPlayProtocols { get; set; }
}
}

View File

@@ -35,13 +35,21 @@ namespace MediaBrowser.Model.MediaInfo
/// </summary>
/// <value>The studios.</value>
public string[] Studios { get; set; }
public string[] Genres { get; set; }
public string ShowName { get; set; }
public int? IndexNumber { get; set; }
public int? ParentIndexNumber { get; set; }
public int? ProductionYear { get; set; }
public DateTime? PremiereDate { get; set; }
public BaseItemPerson[] People { get; set; }
public Dictionary<string, string> ProviderIds { get; set; }
/// <summary>

View File

@@ -29,11 +29,17 @@ namespace MediaBrowser.Model.MediaInfo
public DeviceProfile DeviceProfile { get; set; }
public bool EnableDirectPlay { get; set; }
public bool EnableDirectStream { get; set; }
public bool EnableTranscoding { get; set; }
public bool AllowVideoStreamCopy { get; set; }
public bool AllowAudioStreamCopy { get; set; }
public bool IsPlayback { get; set; }
public bool AutoOpenLiveStream { get; set; }
public MediaProtocol[] DirectPlayProtocols { get; set; }

View File

@@ -28,7 +28,6 @@ namespace MediaBrowser.Model.Net
public HttpException(string message, Exception innerException)
: base(message, innerException)
{
}
/// <summary>

View File

@@ -6,27 +6,27 @@ namespace MediaBrowser.Model.Net
public class NetworkShare
{
/// <summary>
/// The name of the computer that this share belongs to
/// The name of the computer that this share belongs to.
/// </summary>
public string Server { get; set; }
/// <summary>
/// Share name
/// Share name.
/// </summary>
public string Name { get; set; }
/// <summary>
/// Local path
/// Local path.
/// </summary>
public string Path { get; set; }
/// <summary>
/// Share type
/// Share type.
/// </summary>
public NetworkShareType ShareType { get; set; }
/// <summary>
/// Comment
/// Comment.
/// </summary>
public string Remark { get; set; }
}

View File

@@ -18,7 +18,7 @@ namespace MediaBrowser.Model.Notifications
public string Type { get; set; }
/// <summary>
/// User Ids to not monitor (it's opt out)
/// User Ids to not monitor (it's opt out).
/// </summary>
public string[] DisabledMonitorUsers { get; set; }

View File

@@ -2,7 +2,10 @@
#pragma warning disable CS1591
using System;
using Jellyfin.Data.Enums;
using MediaBrowser.Model.Extensions;
using System.Linq;
using Jellyfin.Data.Entities;
using MediaBrowser.Model.Users;
namespace MediaBrowser.Model.Notifications
@@ -104,7 +107,7 @@ namespace MediaBrowser.Model.Notifications
!opt.DisabledMonitorUsers.Contains(userId.ToString(""), StringComparer.OrdinalIgnoreCase);
}
public bool IsEnabledToSendToUser(string type, string userId, UserPolicy userPolicy)
public bool IsEnabledToSendToUser(string type, string userId, User user)
{
NotificationOption opt = GetOptions(type);
@@ -115,7 +118,7 @@ namespace MediaBrowser.Model.Notifications
return true;
}
if (opt.SendToUserMode == SendToUserType.Admins && userPolicy.IsAdministrator)
if (opt.SendToUserMode == SendToUserType.Admins && user.HasPermission(PermissionKind.IsAdministrator))
{
return true;
}

View File

@@ -51,6 +51,5 @@ namespace MediaBrowser.Model.Providers
public RemoteSearchResult[] Artists { get; set; }
}
}

View File

@@ -8,15 +8,25 @@ namespace MediaBrowser.Model.Providers
public class RemoteSubtitleInfo
{
public string ThreeLetterISOLanguageName { get; set; }
public string Id { get; set; }
public string ProviderName { get; set; }
public string Name { get; set; }
public string Format { get; set; }
public string Author { get; set; }
public string Comment { get; set; }
public DateTime? DateCreated { get; set; }
public float? CommunityRating { get; set; }
public int? DownloadCount { get; set; }
public bool? IsHashMatch { get; set; }
}
}

View File

@@ -8,13 +8,19 @@ namespace MediaBrowser.Model.Providers
public class SubtitleOptions
{
public bool SkipIfEmbeddedSubtitlesPresent { get; set; }
public bool SkipIfAudioTrackMatches { get; set; }
public string[] DownloadLanguages { get; set; }
public bool DownloadMovieSubtitles { get; set; }
public bool DownloadEpisodeSubtitles { get; set; }
public string OpenSubtitlesUsername { get; set; }
public string OpenSubtitlesPasswordHash { get; set; }
public bool IsOpenSubtitleVipAccount { get; set; }
public bool RequirePerfectMatch { get; set; }

View File

@@ -6,6 +6,7 @@ namespace MediaBrowser.Model.Providers
public class SubtitleProviderInfo
{
public string Name { get; set; }
public string Id { get; set; }
}
}

View File

@@ -8,198 +8,198 @@ namespace MediaBrowser.Model.Querying
public enum ItemFields
{
/// <summary>
/// The air time
/// The air time.
/// </summary>
AirTime,
/// <summary>
/// The can delete
/// The can delete.
/// </summary>
CanDelete,
/// <summary>
/// The can download
/// The can download.
/// </summary>
CanDownload,
/// <summary>
/// The channel information
/// The channel information.
/// </summary>
ChannelInfo,
/// <summary>
/// The chapters
/// The chapters.
/// </summary>
Chapters,
ChildCount,
/// <summary>
/// The cumulative run time ticks
/// The cumulative run time ticks.
/// </summary>
CumulativeRunTimeTicks,
/// <summary>
/// The custom rating
/// The custom rating.
/// </summary>
CustomRating,
/// <summary>
/// The date created of the item
/// The date created of the item.
/// </summary>
DateCreated,
/// <summary>
/// The date last media added
/// The date last media added.
/// </summary>
DateLastMediaAdded,
/// <summary>
/// Item display preferences
/// Item display preferences.
/// </summary>
DisplayPreferencesId,
/// <summary>
/// The etag
/// The etag.
/// </summary>
Etag,
/// <summary>
/// The external urls
/// The external urls.
/// </summary>
ExternalUrls,
/// <summary>
/// Genres
/// Genres.
/// </summary>
Genres,
/// <summary>
/// The home page URL
/// The home page URL.
/// </summary>
HomePageUrl,
/// <summary>
/// The item counts
/// The item counts.
/// </summary>
ItemCounts,
/// <summary>
/// The media source count
/// The media source count.
/// </summary>
MediaSourceCount,
/// <summary>
/// The media versions
/// The media versions.
/// </summary>
MediaSources,
OriginalTitle,
/// <summary>
/// The item overview
/// The item overview.
/// </summary>
Overview,
/// <summary>
/// The id of the item's parent
/// The id of the item's parent.
/// </summary>
ParentId,
/// <summary>
/// The physical path of the item
/// The physical path of the item.
/// </summary>
Path,
/// <summary>
/// The list of people for the item
/// The list of people for the item.
/// </summary>
People,
PlayAccess,
/// <summary>
/// The production locations
/// The production locations.
/// </summary>
ProductionLocations,
/// <summary>
/// Imdb, tmdb, etc
/// Imdb, tmdb, etc.
/// </summary>
ProviderIds,
/// <summary>
/// The aspect ratio of the primary image
/// The aspect ratio of the primary image.
/// </summary>
PrimaryImageAspectRatio,
RecursiveItemCount,
/// <summary>
/// The settings
/// The settings.
/// </summary>
Settings,
/// <summary>
/// The screenshot image tags
/// The screenshot image tags.
/// </summary>
ScreenshotImageTags,
SeriesPrimaryImage,
/// <summary>
/// The series studio
/// The series studio.
/// </summary>
SeriesStudio,
/// <summary>
/// The sort name of the item
/// The sort name of the item.
/// </summary>
SortName,
/// <summary>
/// The special episode numbers
/// The special episode numbers.
/// </summary>
SpecialEpisodeNumbers,
/// <summary>
/// The studios of the item
/// The studios of the item.
/// </summary>
Studios,
BasicSyncInfo,
/// <summary>
/// The synchronize information
/// The synchronize information.
/// </summary>
SyncInfo,
/// <summary>
/// The taglines of the item
/// The taglines of the item.
/// </summary>
Taglines,
/// <summary>
/// The tags
/// The tags.
/// </summary>
Tags,
/// <summary>
/// The trailer url of the item
/// The trailer url of the item.
/// </summary>
RemoteTrailers,
/// <summary>
/// The media streams
/// The media streams.
/// </summary>
MediaStreams,
/// <summary>
/// The season user data
/// The season user data.
/// </summary>
SeasonUserData,
/// <summary>
/// The service name
/// The service name.
/// </summary>
ServiceName,
ThemeSongIds,

View File

@@ -3,7 +3,7 @@
namespace MediaBrowser.Model.Querying
{
/// <summary>
/// These represent sort orders that are known by the core
/// These represent sort orders that are known by the core.
/// </summary>
public static class ItemSortBy
{

View File

@@ -33,13 +33,13 @@ namespace MediaBrowser.Model.Querying
public int? StartIndex { get; set; }
/// <summary>
/// The maximum number of items to return
/// The maximum number of items to return.
/// </summary>
/// <value>The limit.</value>
public int? Limit { get; set; }
/// <summary>
/// Fields to return within the items, in addition to basic information
/// Fields to return within the items, in addition to basic information.
/// </summary>
/// <value>The fields.</value>
public ItemFields[] Fields { get; set; }

View File

@@ -9,8 +9,11 @@ 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()
@@ -21,9 +24,11 @@ namespace MediaBrowser.Model.Querying
Years = Array.Empty<int>();
}
}
public class QueryFilters
{
public NameGuidPair[] Genres { get; set; }
public string[] Tags { get; set; }
public QueryFilters()

View File

@@ -15,7 +15,7 @@ namespace MediaBrowser.Model.Querying
public IReadOnlyList<T> Items { get; set; }
/// <summary>
/// The total number of records available
/// The total number of records available.
/// </summary>
/// <value>The total record count.</value>
public int TotalRecordCount { get; set; }

View File

@@ -26,13 +26,13 @@ namespace MediaBrowser.Model.Querying
public int? StartIndex { get; set; }
/// <summary>
/// The maximum number of items to return
/// The maximum number of items to return.
/// </summary>
/// <value>The limit.</value>
public int? Limit { get; set; }
/// <summary>
/// Fields to return within the items, in addition to basic information
/// Fields to return within the items, in addition to basic information.
/// </summary>
/// <value>The fields.</value>
public ItemFields[] Fields { get; set; }

View File

@@ -100,6 +100,7 @@ namespace MediaBrowser.Model.Search
public string MediaType { get; set; }
public DateTime? StartDate { get; set; }
public DateTime? EndDate { get; set; }
/// <summary>

View File

@@ -8,7 +8,7 @@ namespace MediaBrowser.Model.Search
public class SearchQuery
{
/// <summary>
/// The user to localize search results for
/// The user to localize search results for.
/// </summary>
/// <value>The user id.</value>
public Guid UserId { get; set; }
@@ -26,20 +26,27 @@ namespace MediaBrowser.Model.Search
public int? StartIndex { get; set; }
/// <summary>
/// The maximum number of items to return
/// The maximum number of items to return.
/// </summary>
/// <value>The limit.</value>
public int? Limit { get; set; }
public bool IncludePeople { get; set; }
public bool IncludeMedia { get; set; }
public bool IncludeGenres { get; set; }
public bool IncludeStudios { get; set; }
public bool IncludeArtists { get; set; }
public string[] MediaTypes { get; set; }
public string[] IncludeItemTypes { get; set; }
public string[] ExcludeItemTypes { get; set; }
public string ParentId { get; set; }
public bool? IsMovie { get; set; }

View File

@@ -58,7 +58,7 @@ namespace MediaBrowser.Model.Services
public string Route { get; set; }
/// <summary>
/// Whether to exclude this property from being included in the ModelSchema
/// Whether to exclude this property from being included in the ModelSchema.
/// </summary>
public bool ExcludeInSchema { get; set; }
}

View File

@@ -23,7 +23,7 @@ namespace MediaBrowser.Model.Services
string Verb { get; }
/// <summary>
/// The request ContentType
/// The request ContentType.
/// </summary>
string ContentType { get; }
@@ -32,7 +32,7 @@ namespace MediaBrowser.Model.Services
string UserAgent { get; }
/// <summary>
/// The expected Response ContentType for this request
/// The expected Response ContentType for this request.
/// </summary>
string ResponseContentType { get; set; }
@@ -55,7 +55,7 @@ namespace MediaBrowser.Model.Services
string RemoteIp { get; }
/// <summary>
/// The value of the Authorization Header used to send the Api Key, null if not available
/// The value of the Authorization Header used to send the Api Key, null if not available.
/// </summary>
string Authorization { get; }
@@ -68,7 +68,7 @@ namespace MediaBrowser.Model.Services
long ContentLength { get; }
/// <summary>
/// The value of the Referrer, null if not available
/// The value of the Referrer, null if not available.
/// </summary>
Uri UrlReferrer { get; }
}
@@ -76,9 +76,13 @@ namespace MediaBrowser.Model.Services
public interface IHttpFile
{
string Name { get; }
string FileName { get; }
long ContentLength { get; }
string ContentType { get; }
Stream InputStream { get; }
}

View File

@@ -7,7 +7,7 @@ namespace MediaBrowser.Model.Services
public interface IRequiresRequestStream
{
/// <summary>
/// The raw Http Request Input Stream
/// The raw Http Request Input Stream.
/// </summary>
Stream RequestStream { get; set; }
}

View File

@@ -8,6 +8,8 @@ namespace MediaBrowser.Model.Services
}
public interface IReturn { }
public interface IReturn<T> : IReturn { }
public interface IReturnVoid : IReturn { }
}

View File

@@ -13,15 +13,19 @@ namespace MediaBrowser.Model.Session
public string[] SupportedCommands { get; set; }
public bool SupportsMediaControl { get; set; }
public bool SupportsContentUploading { get; set; }
public string MessageCallbackUrl { get; set; }
public bool SupportsPersistentIdentifier { get; set; }
public bool SupportsSync { get; set; }
public DeviceProfile DeviceProfile { get; set; }
public string AppStoreUrl { get; set; }
public string IconUrl { get; set; }
public ClientCapabilities()

View File

@@ -7,7 +7,7 @@ using MediaBrowser.Model.Services;
namespace MediaBrowser.Model.Session
{
/// <summary>
/// Class PlayRequest
/// Class PlayRequest.
/// </summary>
public class PlayRequest
{
@@ -19,7 +19,7 @@ namespace MediaBrowser.Model.Session
public Guid[] ItemIds { get; set; }
/// <summary>
/// Gets or sets the start position ticks that the first item should be played at
/// Gets or sets the start position ticks that the first item should be played at.
/// </summary>
/// <value>The start position ticks.</value>
[ApiMember(Name = "StartPositionTicks", Description = "The starting position of the first item.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
@@ -39,8 +39,11 @@ namespace MediaBrowser.Model.Session
public Guid ControllingUserId { get; set; }
public int? SubtitleStreamIndex { get; set; }
public int? AudioStreamIndex { get; set; }
public string MediaSourceId { get; set; }
public int? StartIndex { get; set; }
}
}

View File

@@ -105,6 +105,7 @@ namespace MediaBrowser.Model.Session
public RepeatMode RepeatMode { get; set; }
public QueueItem[] NowPlayingQueue { get; set; }
public string PlaylistItemId { get; set; }
}
@@ -118,6 +119,7 @@ namespace MediaBrowser.Model.Session
public class QueueItem
{
public Guid Id { get; set; }
public string PlaylistItemId { get; set; }
}
}

View File

@@ -62,6 +62,7 @@ namespace MediaBrowser.Model.Session
public string NextMediaType { get; set; }
public string PlaylistItemId { get; set; }
public QueueItem[] NowPlayingQueue { get; set; }
}
}

View File

@@ -8,17 +8,25 @@ namespace MediaBrowser.Model.Session
public class TranscodingInfo
{
public string AudioCodec { get; set; }
public string VideoCodec { get; set; }
public string Container { get; set; }
public bool IsVideoDirect { get; set; }
public bool IsAudioDirect { get; set; }
public int? Bitrate { get; set; }
public float? Framerate { get; set; }
public double? CompletionPercentage { get; set; }
public int? Width { get; set; }
public int? Height { get; set; }
public int? AudioChannels { get; set; }
public TranscodeReason[] TranscodeReasons { get; set; }

View File

@@ -5,15 +5,15 @@ namespace MediaBrowser.Model.Sync
public enum SyncCategory
{
/// <summary>
/// The latest
/// The latest.
/// </summary>
Latest = 0,
/// <summary>
/// The next up
/// The next up.
/// </summary>
NextUp = 1,
/// <summary>
/// The resume
/// The resume.
/// </summary>
Resume = 2
}

View File

@@ -122,7 +122,9 @@ namespace MediaBrowser.Model.Sync
public int ItemCount { get; set; }
public string ParentName { get; set; }
public string PrimaryImageItemId { get; set; }
public string PrimaryImageTag { get; set; }
public SyncJob()

View File

@@ -9,42 +9,52 @@ namespace MediaBrowser.Model.SyncPlay
/// The user-joined update. Tells members of a group about a new user.
/// </summary>
UserJoined,
/// <summary>
/// The user-left update. Tells members of a group that a user left.
/// </summary>
UserLeft,
/// <summary>
/// The group-joined update. Tells a user that the group has been joined.
/// </summary>
GroupJoined,
/// <summary>
/// The group-left update. Tells a user that the group has been left.
/// </summary>
GroupLeft,
/// <summary>
/// The group-wait update. Tells members of the group that a user is buffering.
/// </summary>
GroupWait,
/// <summary>
/// The prepare-session update. Tells a user to load some content.
/// </summary>
PrepareSession,
/// <summary>
/// The not-in-group error. Tells a user that they don't belong to a group.
/// </summary>
NotInGroup,
/// <summary>
/// The group-does-not-exist error. Sent when trying to join a non-existing group.
/// </summary>
GroupDoesNotExist,
/// <summary>
/// The create-group-denied error. Sent when a user tries to create a group without required permissions.
/// </summary>
CreateGroupDenied,
/// <summary>
/// The join-group-denied error. Sent when a user tries to join a group without required permissions.
/// </summary>
JoinGroupDenied,
/// <summary>
/// The library-access-denied error. Sent when a user tries to join a group without required access to the library.
/// </summary>

View File

@@ -1,7 +1,7 @@
namespace MediaBrowser.Model.SyncPlay
{
/// <summary>
/// Enum PlaybackRequestType
/// Enum PlaybackRequestType.
/// </summary>
public enum PlaybackRequestType
{
@@ -9,22 +9,27 @@ namespace MediaBrowser.Model.SyncPlay
/// A user is requesting a play command for the group.
/// </summary>
Play = 0,
/// <summary>
/// A user is requesting a pause command for the group.
/// </summary>
Pause = 1,
/// <summary>
/// A user is requesting a seek command for the group.
/// </summary>
Seek = 2,
/// <summary>
/// A user is signaling that playback is buffering.
/// </summary>
Buffering = 3,
/// <summary>
/// A user is signaling that playback resumed.
/// </summary>
BufferingDone = 4,
/// <summary>
/// A user is reporting its ping.
/// </summary>

View File

@@ -9,10 +9,12 @@ namespace MediaBrowser.Model.SyncPlay
/// The play command. Instructs users to start playback.
/// </summary>
Play = 0,
/// <summary>
/// The pause command. Instructs users to pause playback.
/// </summary>
Pause = 1,
/// <summary>
/// The seek command. Instructs users to seek to a specified time.
/// </summary>

View File

@@ -23,7 +23,7 @@ namespace MediaBrowser.Model.System
};
/// <summary>
/// Class SystemInfo
/// Class SystemInfo.
/// </summary>
public class SystemInfo : PublicSystemInfo
{

View File

@@ -57,7 +57,7 @@ namespace MediaBrowser.Model.Tasks
double? CurrentProgress { get; }
/// <summary>
/// Gets the triggers that define when the task will run
/// Gets the triggers that define when the task will run.
/// </summary>
/// <value>The triggers.</value>
/// <exception cref="ArgumentNullException">value</exception>

View File

@@ -10,7 +10,7 @@ namespace MediaBrowser.Model.Tasks
public interface ITaskManager : IDisposable
{
/// <summary>
/// Gets the list of Scheduled Tasks
/// Gets the list of Scheduled Tasks.
/// </summary>
/// <value>The scheduled tasks.</value>
IScheduledTaskWorker[] ScheduledTasks { get; }

View File

@@ -8,11 +8,17 @@ namespace MediaBrowser.Model.Users
public class UserAction
{
public string Id { get; set; }
public string ServerId { get; set; }
public Guid UserId { get; set; }
public Guid ItemId { get; set; }
public UserActionType Type { get; set; }
public DateTime Date { get; set; }
public long? PositionTicks { get; set; }
}
}

View File

@@ -2,7 +2,9 @@
#pragma warning disable CS1591
using System;
using MediaBrowser.Model.Configuration;
using System.Xml.Serialization;
using Jellyfin.Data.Enums;
using AccessSchedule = Jellyfin.Data.Entities.AccessSchedule;
namespace MediaBrowser.Model.Users
{
@@ -33,24 +35,37 @@ namespace MediaBrowser.Model.Users
public int? MaxParentalRating { get; set; }
public string[] BlockedTags { get; set; }
public bool EnableUserPreferenceAccess { get; set; }
public AccessSchedule[] AccessSchedules { get; set; }
public UnratedItem[] BlockUnratedItems { get; set; }
public bool EnableRemoteControlOfOtherUsers { get; set; }
public bool EnableSharedDeviceControl { get; set; }
public bool EnableRemoteAccess { get; set; }
public bool EnableLiveTvManagement { get; set; }
public bool EnableLiveTvAccess { get; set; }
public bool EnableMediaPlayback { get; set; }
public bool EnableAudioPlaybackTranscoding { get; set; }
public bool EnableVideoPlaybackTranscoding { get; set; }
public bool EnablePlaybackRemuxing { get; set; }
public bool ForceRemoteSourceTranscoding { get; set; }
public bool EnableContentDeletion { get; set; }
public string[] EnableContentDeletionFromFolders { get; set; }
public bool EnableContentDownloading { get; set; }
/// <summary>
@@ -58,27 +73,36 @@ namespace MediaBrowser.Model.Users
/// </summary>
/// <value><c>true</c> if [enable synchronize]; otherwise, <c>false</c>.</value>
public bool EnableSyncTranscoding { get; set; }
public bool EnableMediaConversion { get; set; }
public string[] EnabledDevices { get; set; }
public bool EnableAllDevices { get; set; }
public string[] EnabledChannels { get; set; }
public bool EnableAllChannels { get; set; }
public string[] EnabledFolders { get; set; }
public bool EnableAllFolders { get; set; }
public int InvalidLoginAttemptCount { get; set; }
public int LoginAttemptsBeforeLockout { get; set; }
public bool EnablePublicSharing { get; set; }
public string[] BlockedMediaFolders { get; set; }
public string[] BlockedChannels { get; set; }
public int RemoteClientBitrateLimit { get; set; }
[XmlElement(ElementName = "AuthenticationProviderId")]
public string AuthenticationProviderId { get; set; }
public string PasswordResetProviderId { get; set; }
/// <summary>