using System; using Dapper.Contrib.Extensions; using System.Collections.Generic; using System.Linq; using Newtonsoft.Json; namespace PlexRequests.Store { [Table("Requested")] public class RequestedModel : Entity { public RequestedModel() { RequestedUsers = new List(); } // ReSharper disable once IdentifierTypo public int ProviderId { get; set; } public string ImdbId { get; set; } public string Overview { get; set; } public string Title { get; set; } public string PosterPath { get; set; } public DateTime ReleaseDate { get; set; } public RequestType Type { get; set; } public string Status { get; set; } public bool Approved { get; set; } [Obsolete("Use RequestedUsers")] public string RequestedBy { get; set; } public DateTime RequestedDate { get; set; } public bool Available { get; set; } public IssueState Issues { get; set; } public string OtherMessage { get; set; } public string AdminNote { get; set; } public int[] SeasonList { get; set; } public int SeasonCount { get; set; } public string SeasonsRequested { get; set; } public string MusicBrainzId { get; set; } public List RequestedUsers { get; set; } public string ArtistName { get; set; } public string ArtistId { get; set; } public List UsersToNotify { get; private set; } [JsonIgnore] public List AllUsers { get { var u = new List(); if (!string.IsNullOrEmpty(RequestedBy)) { u.Add(RequestedBy); } if (RequestedUsers.Any()) { u.AddRange(RequestedUsers.Where(requestedUser => requestedUser != RequestedBy)); } return u; } } [JsonIgnore] public bool CanApprove => !Approved && !Available; public bool UserHasRequested(string username) { return AllUsers.Any(x => x.Equals(username, StringComparison.OrdinalIgnoreCase)); } public void AddUserToNotification(string username) { if (UsersToNotify == null) { UsersToNotify = new List(); } if (UsersToNotify.FirstOrDefault(x => x == username) != null) { // User already exists in the notification list return; } UsersToNotify.Add(username); } } public enum RequestType { Movie, TvShow, Album } public enum IssueState { None = 99, WrongAudio = 0, NoSubtitles = 1, WrongContent = 2, PlaybackIssues = 3, Other = 4 // Provide a message } }