aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Entities/User.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller/Entities/User.cs')
-rw-r--r--MediaBrowser.Controller/Entities/User.cs114
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;
}
}
}