| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 | using System;using System.Collections.Generic;using System.Linq;using System.Threading;using Jellyfin.Api.Constants;using Jellyfin.Api.Models.NotificationDtos;using Jellyfin.Data.Enums;using MediaBrowser.Controller.Library;using MediaBrowser.Controller.Notifications;using MediaBrowser.Model.Dto;using MediaBrowser.Model.Notifications;using Microsoft.AspNetCore.Authorization;using Microsoft.AspNetCore.Http;using Microsoft.AspNetCore.Mvc;namespace Jellyfin.Api.Controllers{    /// <summary>    /// The notification controller.    /// </summary>    [Authorize(Policy = Policies.DefaultAuthorization)]    public class NotificationsController : BaseJellyfinApiController    {        private readonly INotificationManager _notificationManager;        private readonly IUserManager _userManager;        /// <summary>        /// Initializes a new instance of the <see cref="NotificationsController" /> class.        /// </summary>        /// <param name="notificationManager">The notification manager.</param>        /// <param name="userManager">The user manager.</param>        public NotificationsController(INotificationManager notificationManager, IUserManager userManager)        {            _notificationManager = notificationManager;            _userManager = userManager;        }        /// <summary>        /// Gets a user's notifications.        /// </summary>        /// <response code="200">Notifications returned.</response>        /// <returns>An <see cref="OkResult"/> containing a list of notifications.</returns>        [HttpGet("{userId}")]        [ProducesResponseType(StatusCodes.Status200OK)]        public ActionResult<NotificationResultDto> GetNotifications()        {            return new NotificationResultDto();        }        /// <summary>        /// Gets a user's notification summary.        /// </summary>        /// <response code="200">Summary of user's notifications returned.</response>        /// <returns>An <cref see="OkResult"/> containing a summary of the users notifications.</returns>        [HttpGet("{userId}/Summary")]        [ProducesResponseType(StatusCodes.Status200OK)]        public ActionResult<NotificationsSummaryDto> GetNotificationsSummary()        {            return new NotificationsSummaryDto();        }        /// <summary>        /// Gets notification types.        /// </summary>        /// <response code="200">All notification types returned.</response>        /// <returns>An <cref see="OkResult"/> containing a list of all notification types.</returns>        [HttpGet("Types")]        [ProducesResponseType(StatusCodes.Status200OK)]        public IEnumerable<NotificationTypeInfo> GetNotificationTypes()        {            return _notificationManager.GetNotificationTypes();        }        /// <summary>        /// Gets notification services.        /// </summary>        /// <response code="200">All notification services returned.</response>        /// <returns>An <cref see="OkResult"/> containing a list of all notification services.</returns>        [HttpGet("Services")]        [ProducesResponseType(StatusCodes.Status200OK)]        public IEnumerable<NameIdPair> GetNotificationServices()        {            return _notificationManager.GetNotificationServices();        }        /// <summary>        /// Sends a notification to all admins.        /// </summary>        /// <param name="url">The URL of the notification.</param>        /// <param name="level">The level of the notification.</param>        /// <param name="name">The name of the notification.</param>        /// <param name="description">The description of the notification.</param>        /// <response code="204">Notification sent.</response>        /// <returns>A <cref see="NoContentResult"/>.</returns>        [HttpPost("Admin")]        [ProducesResponseType(StatusCodes.Status204NoContent)]        public ActionResult CreateAdminNotification(            [FromQuery] string? url,            [FromQuery] NotificationLevel? level,            [FromQuery] string name = "",            [FromQuery] string description = "")        {            var notification = new NotificationRequest            {                Name = name,                Description = description,                Url = url,                Level = level ?? NotificationLevel.Normal,                UserIds = _userManager.Users                    .Where(user => user.HasPermission(PermissionKind.IsAdministrator))                    .Select(user => user.Id)                    .ToArray(),                Date = DateTime.UtcNow,            };            _notificationManager.SendNotification(notification, CancellationToken.None);            return NoContent();        }        /// <summary>        /// Sets notifications as read.        /// </summary>        /// <response code="204">Notifications set as read.</response>        /// <returns>A <cref see="NoContentResult"/>.</returns>        [HttpPost("{userId}/Read")]        [ProducesResponseType(StatusCodes.Status204NoContent)]        public ActionResult SetRead()        {            return NoContent();        }        /// <summary>        /// Sets notifications as unread.        /// </summary>        /// <response code="204">Notifications set as unread.</response>        /// <returns>A <cref see="NoContentResult"/>.</returns>        [HttpPost("{userId}/Unread")]        [ProducesResponseType(StatusCodes.Status204NoContent)]        public ActionResult SetUnread()        {            return NoContent();        }    }}
 |