aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Model/Notifications
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Model/Notifications')
-rw-r--r--MediaBrowser.Model/Notifications/NotificationLevel.cs10
-rw-r--r--MediaBrowser.Model/Notifications/NotificationOption.cs56
-rw-r--r--MediaBrowser.Model/Notifications/NotificationOptions.cs132
-rw-r--r--MediaBrowser.Model/Notifications/NotificationRequest.cs35
-rw-r--r--MediaBrowser.Model/Notifications/NotificationServiceInfo.cs8
-rw-r--r--MediaBrowser.Model/Notifications/NotificationType.cs24
-rw-r--r--MediaBrowser.Model/Notifications/NotificationTypeInfo.cs29
-rw-r--r--MediaBrowser.Model/Notifications/SendToUserType.cs9
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