diff options
Diffstat (limited to 'MediaBrowser.Controller/Entities/User.cs')
| -rw-r--r-- | MediaBrowser.Controller/Entities/User.cs | 114 |
1 files changed, 68 insertions, 46 deletions
diff --git a/MediaBrowser.Controller/Entities/User.cs b/MediaBrowser.Controller/Entities/User.cs index e0682c9ee..626afcfdf 100644 --- a/MediaBrowser.Controller/Entities/User.cs +++ b/MediaBrowser.Controller/Entities/User.cs @@ -1,11 +1,12 @@ -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Connect; using MediaBrowser.Model.Serialization; +using MediaBrowser.Model.Users; using System; using System.IO; +using System.Linq; using System.Runtime.Serialization; using System.Threading; using System.Threading.Tasks; @@ -35,7 +36,7 @@ namespace MediaBrowser.Controller.Entities public string ConnectUserName { get; set; } public string ConnectUserId { get; set; } - public UserLinkType ConnectLinkType { get; set; } + public UserLinkType? ConnectLinkType { get; set; } public string ConnectAccessKey { get; set; } /// <summary> @@ -105,37 +106,50 @@ namespace MediaBrowser.Controller.Entities /// <value>The last activity date.</value> public DateTime? LastActivityDate { get; set; } - /// <summary> - /// The _configuration - /// </summary> - private UserConfiguration _configuration; - /// <summary> - /// The _configuration initialized - /// </summary> - private bool _configurationInitialized; - /// <summary> - /// The _configuration sync lock - /// </summary> - private object _configurationSyncLock = new object(); - /// <summary> - /// Gets the user's configuration - /// </summary> - /// <value>The configuration.</value> + private UserConfiguration _config; + private readonly object _configSyncLock = new object(); [IgnoreDataMember] public UserConfiguration Configuration { get { - // Lazy load - LazyInitializer.EnsureInitialized(ref _configuration, ref _configurationInitialized, ref _configurationSyncLock, () => (UserConfiguration)ConfigurationHelper.GetXmlConfiguration(typeof(UserConfiguration), ConfigurationFilePath, XmlSerializer)); - return _configuration; + if (_config == null) + { + lock (_configSyncLock) + { + if (_config == null) + { + _config = UserManager.GetUserConfiguration(this); + } + } + } + + return _config; } - private set - { - _configuration = value; + set { _config = value; } + } - _configurationInitialized = value != null; + private UserPolicy _policy; + private readonly object _policySyncLock = new object(); + [IgnoreDataMember] + public UserPolicy Policy + { + get + { + if (_policy == null) + { + lock (_policySyncLock) + { + if (_policy == null) + { + _policy = UserManager.GetUserPolicy(this); + } + } + } + + return _policy; } + set { _policy = value; } } /// <summary> @@ -178,7 +192,7 @@ namespace MediaBrowser.Controller.Entities Name = newName; - return RefreshMetadata(new MetadataRefreshOptions + return RefreshMetadata(new MetadataRefreshOptions(new DirectoryService()) { ReplaceAllMetadata = true, ImageRefreshMode = ImageRefreshMode.FullRefresh, @@ -198,7 +212,7 @@ namespace MediaBrowser.Controller.Entities /// </summary> /// <value>The configuration directory path.</value> [IgnoreDataMember] - private string ConfigurationDirectoryPath + public string ConfigurationDirectoryPath { get { @@ -231,33 +245,41 @@ namespace MediaBrowser.Controller.Entities return System.IO.Path.Combine(parentPath, Id.ToString("N")); } - /// <summary> - /// Gets the path to the user's configuration file - /// </summary> - /// <value>The configuration file path.</value> - [IgnoreDataMember] - public string ConfigurationFilePath + public bool IsParentalScheduleAllowed() { - get + return IsParentalScheduleAllowed(DateTime.UtcNow); + } + + public bool IsParentalScheduleAllowed(DateTime date) + { + var schedules = Policy.AccessSchedules; + + if (schedules.Length == 0) { - return System.IO.Path.Combine(ConfigurationDirectoryPath, "config.xml"); + return true; } + + return schedules.Any(i => IsParentalScheduleAllowed(i, date)); } - /// <summary> - /// Updates the configuration. - /// </summary> - /// <param name="config">The config.</param> - /// <exception cref="System.ArgumentNullException">config</exception> - public void UpdateConfiguration(UserConfiguration config) + private bool IsParentalScheduleAllowed(AccessSchedule schedule, DateTime date) { - if (config == null) + if (date.Kind != DateTimeKind.Utc) { - throw new ArgumentNullException("config"); + throw new ArgumentException("Utc date expected"); } - Configuration = config; - UserManager.UpdateConfiguration(this, Configuration); + var localTime = date.ToLocalTime(); + + return DayOfWeekHelper.GetDaysOfWeek(schedule.DayOfWeek).Contains(localTime.DayOfWeek) && + IsWithinTime(schedule, localTime); + } + + private bool IsWithinTime(AccessSchedule schedule, DateTime localTime) + { + var hour = localTime.TimeOfDay.TotalHours; + + return hour >= schedule.StartHour && hour <= schedule.EndHour; } } } |
