diff options
Diffstat (limited to 'MediaBrowser.Model/Notifications')
8 files changed, 303 insertions, 0 deletions
diff --git a/MediaBrowser.Model/Notifications/NotificationLevel.cs b/MediaBrowser.Model/Notifications/NotificationLevel.cs new file mode 100644 index 000000000..a49ee2fe6 --- /dev/null +++ b/MediaBrowser.Model/Notifications/NotificationLevel.cs @@ -0,0 +1,10 @@ + +namespace MediaBrowser.Model.Notifications +{ + public enum NotificationLevel + { + Normal = 0, + Warning = 1, + Error = 2 + } +} diff --git a/MediaBrowser.Model/Notifications/NotificationOption.cs b/MediaBrowser.Model/Notifications/NotificationOption.cs new file mode 100644 index 000000000..cda9e311d --- /dev/null +++ b/MediaBrowser.Model/Notifications/NotificationOption.cs @@ -0,0 +1,56 @@ +using System; + +namespace MediaBrowser.Model.Notifications +{ + public class NotificationOption + { + public string Type { get; set; } + + /// <summary> + /// User Ids to not monitor (it's opt out) + /// </summary> + public string[] DisabledMonitorUsers { get; set; } + + /// <summary> + /// User Ids to send to (if SendToUserMode == Custom) + /// </summary> + public string[] SendToUsers { get; set; } + + /// <summary> + /// Gets or sets a value indicating whether this <see cref="NotificationOption"/> is enabled. + /// </summary> + /// <value><c>true</c> if enabled; otherwise, <c>false</c>.</value> + public bool Enabled { get; set; } + + /// <summary> + /// Gets or sets the title format string. + /// </summary> + /// <value>The title format string.</value> + public string Title { get; set; } + + /// <summary> + /// Gets or sets the description. + /// </summary> + /// <value>The description.</value> + public string Description { get; set; } + + /// <summary> + /// Gets or sets the disabled services. + /// </summary> + /// <value>The disabled services.</value> + public string[] DisabledServices { get; set; } + + /// <summary> + /// Gets or sets the send to user mode. + /// </summary> + /// <value>The send to user mode.</value> + public SendToUserType SendToUserMode { get; set; } + + public NotificationOption() + { + DisabledServices = new string[] {}; + DisabledMonitorUsers = new string[] {}; + SendToUsers = new string[] {}; + } + } +}
\ No newline at end of file diff --git a/MediaBrowser.Model/Notifications/NotificationOptions.cs b/MediaBrowser.Model/Notifications/NotificationOptions.cs new file mode 100644 index 000000000..158e00b39 --- /dev/null +++ b/MediaBrowser.Model/Notifications/NotificationOptions.cs @@ -0,0 +1,132 @@ +using MediaBrowser.Model.Extensions; +using MediaBrowser.Model.Users; +using System; + +namespace MediaBrowser.Model.Notifications +{ + public class NotificationOptions + { + public NotificationOption[] Options { get; set; } + + public NotificationOptions() + { + Options = new[] + { + new NotificationOption + { + Type = NotificationType.TaskFailed.ToString(), + Enabled = true, + SendToUserMode = SendToUserType.Admins + }, + new NotificationOption + { + Type = NotificationType.ServerRestartRequired.ToString(), + Enabled = true, + SendToUserMode = SendToUserType.Admins + }, + new NotificationOption + { + Type = NotificationType.ApplicationUpdateAvailable.ToString(), + Enabled = true, + SendToUserMode = SendToUserType.Admins + }, + new NotificationOption + { + Type = NotificationType.ApplicationUpdateInstalled.ToString(), + Enabled = true, + SendToUserMode = SendToUserType.Admins + }, + new NotificationOption + { + Type = NotificationType.PluginUpdateInstalled.ToString(), + Enabled = true, + SendToUserMode = SendToUserType.Admins + }, + new NotificationOption + { + Type = NotificationType.PluginUninstalled.ToString(), + Enabled = true, + SendToUserMode = SendToUserType.Admins + }, + new NotificationOption + { + Type = NotificationType.InstallationFailed.ToString(), + Enabled = true, + SendToUserMode = SendToUserType.Admins + }, + new NotificationOption + { + Type = NotificationType.PluginInstalled.ToString(), + Enabled = true, + SendToUserMode = SendToUserType.Admins + }, + new NotificationOption + { + Type = NotificationType.PluginError.ToString(), + Enabled = true, + SendToUserMode = SendToUserType.Admins + }, + new NotificationOption + { + Type = NotificationType.UserLockedOut.ToString(), + Enabled = true, + SendToUserMode = SendToUserType.Admins + } + }; + } + + public NotificationOption GetOptions(string type) + { + foreach (NotificationOption i in Options) + { + if (StringHelper.EqualsIgnoreCase(type, i.Type)) return i; + } + return null; + } + + public bool IsEnabled(string type) + { + NotificationOption opt = GetOptions(type); + + return opt != null && opt.Enabled; + } + + public bool IsServiceEnabled(string service, string notificationType) + { + NotificationOption opt = GetOptions(notificationType); + + return opt == null || + !ListHelper.ContainsIgnoreCase(opt.DisabledServices, service); + } + + public bool IsEnabledToMonitorUser(string type, Guid userId) + { + NotificationOption opt = GetOptions(type); + + return opt != null && opt.Enabled && + !ListHelper.ContainsIgnoreCase(opt.DisabledMonitorUsers, userId.ToString("")); + } + + public bool IsEnabledToSendToUser(string type, string userId, UserPolicy userPolicy) + { + NotificationOption opt = GetOptions(type); + + if (opt != null && opt.Enabled) + { + if (opt.SendToUserMode == SendToUserType.All) + { + return true; + } + + if (opt.SendToUserMode == SendToUserType.Admins && userPolicy.IsAdministrator) + { + return true; + } + + return ListHelper.ContainsIgnoreCase(opt.SendToUsers, userId); + } + + return false; + } + } +} diff --git a/MediaBrowser.Model/Notifications/NotificationRequest.cs b/MediaBrowser.Model/Notifications/NotificationRequest.cs new file mode 100644 index 000000000..9c89e40fb --- /dev/null +++ b/MediaBrowser.Model/Notifications/NotificationRequest.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; + +namespace MediaBrowser.Model.Notifications +{ + public class NotificationRequest + { + public string Name { get; set; } + + public string Description { get; set; } + + public string Url { get; set; } + + public NotificationLevel Level { get; set; } + + public Guid[] UserIds { get; set; } + + public DateTime Date { get; set; } + + /// <summary> + /// The corresponding type name used in configuration. Not for display. + /// </summary> + public string NotificationType { get; set; } + + public Dictionary<string, string> Variables { get; set; } + + public SendToUserType? SendToUserMode { get; set; } + + public NotificationRequest() + { + UserIds = Array.Empty<Guid>(); + Date = DateTime.UtcNow; + } + } +} diff --git a/MediaBrowser.Model/Notifications/NotificationServiceInfo.cs b/MediaBrowser.Model/Notifications/NotificationServiceInfo.cs new file mode 100644 index 000000000..0ffe7d4ae --- /dev/null +++ b/MediaBrowser.Model/Notifications/NotificationServiceInfo.cs @@ -0,0 +1,8 @@ +namespace MediaBrowser.Model.Notifications +{ + public class NotificationServiceInfo + { + public string Name { get; set; } + public string Id { get; set; } + } +}
\ No newline at end of file diff --git a/MediaBrowser.Model/Notifications/NotificationType.cs b/MediaBrowser.Model/Notifications/NotificationType.cs new file mode 100644 index 000000000..eefd15808 --- /dev/null +++ b/MediaBrowser.Model/Notifications/NotificationType.cs @@ -0,0 +1,24 @@ +namespace MediaBrowser.Model.Notifications +{ + public enum NotificationType + { + ApplicationUpdateAvailable, + ApplicationUpdateInstalled, + AudioPlayback, + GamePlayback, + VideoPlayback, + AudioPlaybackStopped, + GamePlaybackStopped, + VideoPlaybackStopped, + InstallationFailed, + PluginError, + PluginInstalled, + PluginUpdateInstalled, + PluginUninstalled, + NewLibraryContent, + ServerRestartRequired, + TaskFailed, + CameraImageUploaded, + UserLockedOut + } +}
\ No newline at end of file diff --git a/MediaBrowser.Model/Notifications/NotificationTypeInfo.cs b/MediaBrowser.Model/Notifications/NotificationTypeInfo.cs new file mode 100644 index 000000000..4c3283d8e --- /dev/null +++ b/MediaBrowser.Model/Notifications/NotificationTypeInfo.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using System; + +namespace MediaBrowser.Model.Notifications +{ + public class NotificationTypeInfo + { + public string Type { get; set; } + + public string Name { get; set; } + + public bool Enabled { get; set; } + + public string Category { get; set; } + + public bool IsBasedOnUserEvent { get; set; } + + public string DefaultTitle { get; set; } + + public string DefaultDescription { get; set; } + + public string[] Variables { get; set; } + + public NotificationTypeInfo() + { + Variables = new string[] {}; + } + } +}
\ No newline at end of file diff --git a/MediaBrowser.Model/Notifications/SendToUserType.cs b/MediaBrowser.Model/Notifications/SendToUserType.cs new file mode 100644 index 000000000..1998d3102 --- /dev/null +++ b/MediaBrowser.Model/Notifications/SendToUserType.cs @@ -0,0 +1,9 @@ +namespace MediaBrowser.Model.Notifications +{ + public enum SendToUserType + { + All = 0, + Admins = 1, + Custom = 2 + } +}
\ No newline at end of file |
