From 412063c9828083182d98a372ff02d21fbac727bd Mon Sep 17 00:00:00 2001 From: Victor Usoltsev Date: Sat, 27 Mar 2021 00:51:36 +1300 Subject: [PATCH] Capitalizes V for tv show notification type. Refactors notification message curlys class. --- src/Ombi.Notifications/BaseNotification.cs | 1 - .../NotificationMessageCurlys.cs | 349 ++++++++---------- 2 files changed, 144 insertions(+), 206 deletions(-) diff --git a/src/Ombi.Notifications/BaseNotification.cs b/src/Ombi.Notifications/BaseNotification.cs index c9404eb2c..9d8bbb776 100644 --- a/src/Ombi.Notifications/BaseNotification.cs +++ b/src/Ombi.Notifications/BaseNotification.cs @@ -209,7 +209,6 @@ namespace Ombi.Notifications if (model.RequestType == RequestType.Movie) { _log.LogDebug("Notification options: {@model}, Req: {@MovieRequest}, Settings: {@Customization}", model, MovieRequest, Customization); - curlys.Setup(model, MovieRequest, Customization, preference); } else if (model.RequestType == RequestType.TvShow) diff --git a/src/Ombi.Notifications/NotificationMessageCurlys.cs b/src/Ombi.Notifications/NotificationMessageCurlys.cs index 54e85080b..4c4aa01ef 100644 --- a/src/Ombi.Notifications/NotificationMessageCurlys.cs +++ b/src/Ombi.Notifications/NotificationMessageCurlys.cs @@ -14,228 +14,164 @@ namespace Ombi.Notifications { public class NotificationMessageCurlys { - public void Setup(NotificationOptions opts, MovieRequests req, CustomizationSettings s, UserNotificationPreferences pref) + public void SetupNewsletter(CustomizationSettings s) { - LoadIssues(opts); + ApplicationName = string.IsNullOrEmpty(s?.ApplicationName) ? "Ombi" : s.ApplicationName; + ApplicationUrl = s?.ApplicationUrl.HasValue() ?? false ? s.ApplicationUrl : string.Empty; + } - RequestId = req?.Id.ToString(); + public void Setup(OmbiUser user, CustomizationSettings s) + { + ApplicationName = string.IsNullOrEmpty(s?.ApplicationName) ? "Ombi" : s.ApplicationName; + ApplicationUrl = s?.ApplicationUrl.HasValue() ?? false ? s.ApplicationUrl : string.Empty; + RequestedUser = user.UserName; + Alias = user.UserAlias; + UserName = user.UserName; + } + + public void Setup(NotificationOptions opts, MovieRequests req, CustomizationSettings s, + UserNotificationPreferences pref) + { + LoadIssues(opts); + LoadCommon(req, s, pref); + LoadTitle(opts, req); ProviderId = req?.TheMovieDbId.ToString() ?? string.Empty; - string title; - if (req == null) - { - opts.Substitutes.TryGetValue("Title", out title); - } - else - { - title = req?.Title; - } - ApplicationUrl = (s?.ApplicationUrl.HasValue() ?? false) ? s.ApplicationUrl : string.Empty; - ApplicationName = string.IsNullOrEmpty(s?.ApplicationName) ? "Ombi" : s?.ApplicationName; - RequestedUser = req?.RequestedUser?.UserName; - if (UserName.IsNullOrEmpty()) - { - // Can be set if it's an issue - UserName = req?.RequestedUser?.UserName; - } + Year = req?.ReleaseDate.Year.ToString(); + Overview = req?.Overview; + AdditionalInformation = opts?.AdditionalInformation ?? string.Empty; - if (Alias.IsNullOrEmpty()) + if (!string.IsNullOrEmpty(req?.PosterPath)) { - // Can be set if it's an issue - Alias = (req?.RequestedUser?.Alias.HasValue() ?? false) ? req?.RequestedUser?.Alias : req?.RequestedUser?.UserName; + PosterImage = $"https://image.tmdb.org/t/p/w300/{req.PosterPath.TrimStart('/')}"; } - if (pref != null) - { - UserPreference = pref.Value.HasValue() ? pref.Value : Alias; - } - Title = title; - RequestedDate = req?.RequestedDate.ToString("D"); - if (Type.IsNullOrEmpty()) - { - Type = req?.RequestType.Humanize(); - } - Overview = req?.Overview; - Year = req?.ReleaseDate.Year.ToString(); - DenyReason = req?.DeniedReason; - AvailableDate = req?.MarkedAsAvailable?.ToString("D") ?? string.Empty; - if (req?.RequestType == RequestType.Movie) - { - PosterImage = string.Format((req?.PosterPath ?? string.Empty).StartsWith("/", StringComparison.InvariantCultureIgnoreCase) - ? "https://image.tmdb.org/t/p/w300{0}" : "https://image.tmdb.org/t/p/w300/{0}", req?.PosterPath); - } - else + CalculateRequestStatus(req); + } + + public void Setup(NotificationOptions opts, ChildRequests req, CustomizationSettings s, + UserNotificationPreferences pref) + { + LoadIssues(opts); + LoadCommon(req, s, pref); + LoadTitle(opts, req); + ProviderId = req?.ParentRequest?.ExternalProviderId.ToString() ?? string.Empty; + Year = req?.ParentRequest?.ReleaseDate.Year.ToString(); + Overview = req?.ParentRequest?.Overview; + AdditionalInformation = opts.AdditionalInformation; + + if (!string.IsNullOrEmpty(req?.ParentRequest?.PosterPath)) { - PosterImage = req?.PosterPath; + PosterImage = $"https://image.tmdb.org/t/p/w300/{req.ParentRequest?.PosterPath.TrimStart('/')}"; } - AdditionalInformation = opts?.AdditionalInformation ?? string.Empty; + // Generate episode list. + StringBuilder epSb = new StringBuilder(); + IEnumerable episodes = req?.SeasonRequests? + .SelectMany(x => x.Episodes) ?? new List(); + episodes + .OrderBy(x => x.EpisodeNumber) + .ToList() + .ForEach(ep => epSb.Append($"{ep.EpisodeNumber},")); + if (epSb.Length > 0) epSb.Remove(epSb.Length - 1, 1); + EpisodesList = epSb.ToString(); + // Generate season list. + StringBuilder seasonSb = new StringBuilder(); + List seasons = req?.SeasonRequests ?? new List(); + seasons + .OrderBy(x => x.SeasonNumber) + .ToList() + .ForEach(ep => seasonSb.Append($"{ep.SeasonNumber},")); + if (seasonSb.Length > 0) seasonSb.Remove(seasonSb.Length - 1, 1); + SeasonsList = seasonSb.ToString(); CalculateRequestStatus(req); } - public void Setup(NotificationOptions opts, AlbumRequest req, CustomizationSettings s, UserNotificationPreferences pref) + public void Setup(NotificationOptions opts, AlbumRequest req, CustomizationSettings s, + UserNotificationPreferences pref) { LoadIssues(opts); - - RequestId = req?.Id.ToString(); + LoadCommon(req, s, pref); + LoadTitle(opts, req); ProviderId = req?.ForeignArtistId ?? string.Empty; - - string title; - if (req == null) - { - opts.Substitutes.TryGetValue("Title", out title); - } - else - { - title = req?.Title; - } - ApplicationUrl = (s?.ApplicationUrl.HasValue() ?? false) ? s.ApplicationUrl : string.Empty; - ApplicationName = string.IsNullOrEmpty(s?.ApplicationName) ? "Ombi" : s?.ApplicationName; - RequestedUser = req?.RequestedUser?.UserName; - if (UserName.IsNullOrEmpty()) - { - // Can be set if it's an issue - UserName = req?.RequestedUser?.UserName; - } - - AvailableDate = req?.MarkedAsAvailable?.ToString("D") ?? string.Empty; - DenyReason = req?.DeniedReason; - if (Alias.IsNullOrEmpty()) - { - Alias = (req?.RequestedUser?.Alias.HasValue() ?? false) ? req?.RequestedUser?.Alias : req?.RequestedUser?.UserName; - } - if (pref != null) - { - UserPreference = pref.Value.HasValue() ? pref.Value : Alias; - } - Title = title; - RequestedDate = req?.RequestedDate.ToString("D"); - if (Type.IsNullOrEmpty()) - { - Type = req?.RequestType.Humanize(); - } Year = req?.ReleaseDate.Year.ToString(); - PosterImage = (req?.Cover.HasValue() ?? false) ? req.Cover : req?.Disk ?? string.Empty; - AdditionalInformation = opts?.AdditionalInformation ?? string.Empty; + PosterImage = req?.Cover.HasValue() ?? false ? req.Cover : req?.Disk ?? string.Empty; CalculateRequestStatus(req); } - public void SetupNewsletter(CustomizationSettings s) + private void LoadIssues(NotificationOptions opts) { - ApplicationUrl = (s?.ApplicationUrl.HasValue() ?? false) ? s.ApplicationUrl : string.Empty; - ApplicationName = string.IsNullOrEmpty(s?.ApplicationName) ? "Ombi" : s?.ApplicationName; + IssueDescription = opts.Substitutes.TryGetValue("IssueDescription", out string val) ? val : string.Empty; + IssueCategory = opts.Substitutes.TryGetValue("IssueCategory", out val) ? val : string.Empty; + IssueStatus = opts.Substitutes.TryGetValue("IssueStatus", out val) ? val : string.Empty; + IssueSubject = opts.Substitutes.TryGetValue("IssueSubject", out val) ? val : string.Empty; + NewIssueComment = opts.Substitutes.TryGetValue("NewIssueComment", out val) ? val : string.Empty; + UserName = opts.Substitutes.TryGetValue("IssueUser", out val) ? val : string.Empty; + Alias = opts.Substitutes.TryGetValue("IssueUserAlias", out val) ? val : string.Empty; + Type = opts.Substitutes.TryGetValue("RequestType", out val) && Enum.TryParse(val, out RequestType type) + ? HumanizeReturnType(type) + : string.Empty; } - public void Setup(NotificationOptions opts, ChildRequests req, CustomizationSettings s, UserNotificationPreferences pref) + private void LoadCommon(BaseRequest req, CustomizationSettings s, UserNotificationPreferences pref) { - LoadIssues(opts); - RequestId = req?.Id.ToString(); - ProviderId = req?.ParentRequest?.ExternalProviderId.ToString() ?? string.Empty; - string title; - if (req == null) - { - opts.Substitutes.TryGetValue("Title", out title); - } - else - { - title = req?.ParentRequest.Title; - } + ApplicationName = string.IsNullOrEmpty(s?.ApplicationName) ? "Ombi" : s.ApplicationName; + ApplicationUrl = s?.ApplicationUrl.HasValue() ?? false ? s.ApplicationUrl : string.Empty; + AvailableDate = req?.MarkedAsAvailable?.ToString("D") ?? string.Empty; DenyReason = req?.DeniedReason; - ApplicationUrl = (s?.ApplicationUrl.HasValue() ?? false) ? s.ApplicationUrl : string.Empty; - ApplicationName = string.IsNullOrEmpty(s?.ApplicationName) ? "Ombi" : s?.ApplicationName; + RequestId = req?.Id.ToString(); RequestedUser = req?.RequestedUser?.UserName; - if (UserName.IsNullOrEmpty()) - { - // Can be set if it's an issue - UserName = req?.RequestedUser?.UserName; - } - AvailableDate = req?.MarkedAsAvailable?.ToString("D") ?? string.Empty; - if (Alias.IsNullOrEmpty()) - { - Alias = (req?.RequestedUser?.Alias.HasValue() ?? false) ? req?.RequestedUser?.Alias : req?.RequestedUser?.UserName; - } - if (pref != null) - { - UserPreference = pref.Value.HasValue() ? pref.Value : Alias; - } - Title = title; RequestedDate = req?.RequestedDate.ToString("D"); + if (Type.IsNullOrEmpty()) { - Type = req?.RequestType.Humanize(); + Type = HumanizeReturnType(req?.RequestType); } - Overview = req?.ParentRequest.Overview; - Year = req?.ParentRequest.ReleaseDate.Year.ToString(); - if (req?.RequestType == RequestType.Movie) - { - PosterImage = string.Format((req?.ParentRequest.PosterPath ?? string.Empty).StartsWith("/", StringComparison.InvariantCultureIgnoreCase) - ? "https://image.tmdb.org/t/p/w300{0}" : "https://image.tmdb.org/t/p/w300/{0}", req?.ParentRequest.PosterPath); - } - else + if (UserName.IsNullOrEmpty()) { - PosterImage = req?.ParentRequest.PosterPath; + UserName = req?.RequestedUser?.UserName; } - AdditionalInformation = opts.AdditionalInformation; - // DO Episode and Season Lists - var episodes = req?.SeasonRequests?.SelectMany(x => x.Episodes) ?? new List(); - var seasons = req?.SeasonRequests?.OrderBy(x => x.SeasonNumber).ToList() ?? new List(); - var orderedEpisodes = episodes.OrderBy(x => x.EpisodeNumber).ToList(); - var epSb = new StringBuilder(); - var seasonSb = new StringBuilder(); - for (var i = 0; i < orderedEpisodes.Count; i++) + if (Alias.IsNullOrEmpty()) { - var ep = orderedEpisodes[i]; - if (i < orderedEpisodes.Count - 1) - { - epSb.Append($"{ep.EpisodeNumber},"); - } - else - { - epSb.Append($"{ep.EpisodeNumber}"); - } + Alias = req?.RequestedUser?.Alias.HasValue() ?? false + ? req.RequestedUser?.Alias + : req?.RequestedUser?.UserName; } - for (var i = 0; i < seasons.Count; i++) + if (pref != null) { - var ep = seasons[i]; - if (i < seasons.Count - 1) - { - seasonSb.Append($"{ep.SeasonNumber},"); - } - else - { - seasonSb.Append($"{ep.SeasonNumber}"); - } + UserPreference = pref.Value.HasValue() ? pref.Value : Alias; } - - EpisodesList = epSb.ToString(); - SeasonsList = seasonSb.ToString(); - CalculateRequestStatus(req); } - public void Setup(OmbiUser user, CustomizationSettings s) + private static string HumanizeReturnType(RequestType? requestType) { - ApplicationUrl = (s?.ApplicationUrl.HasValue() ?? false) ? s.ApplicationUrl : string.Empty; - ApplicationName = string.IsNullOrEmpty(s?.ApplicationName) ? "Ombi" : s?.ApplicationName; - RequestedUser = user.UserName; - Alias = user.UserAlias; - UserName = user.UserName; + return requestType switch + { + null => string.Empty, + RequestType.TvShow => "TV Show", + _ => requestType.Humanize() + }; } - private void LoadIssues(NotificationOptions opts) + private void LoadTitle(NotificationOptions opts, BaseRequest req) { - var val = string.Empty; - IssueDescription = opts.Substitutes.TryGetValue("IssueDescription", out val) ? val : string.Empty; - IssueCategory = opts.Substitutes.TryGetValue("IssueCategory", out val) ? val : string.Empty; - IssueStatus = opts.Substitutes.TryGetValue("IssueStatus", out val) ? val : string.Empty; - IssueSubject = opts.Substitutes.TryGetValue("IssueSubject", out val) ? val : string.Empty; - NewIssueComment = opts.Substitutes.TryGetValue("NewIssueComment", out val) ? val : string.Empty; - UserName = opts.Substitutes.TryGetValue("IssueUser", out val) ? val : string.Empty; - Alias = opts.Substitutes.TryGetValue("IssueUserAlias", out val) ? val : string.Empty; - Type = opts.Substitutes.TryGetValue("RequestType", out val) ? val.Humanize() : string.Empty; + switch (req) + { + case null: + opts.Substitutes.TryGetValue("Title", out string title); + Title = title; + break; + case ChildRequests tvShowRequest: + Title = tvShowRequest.ParentRequest?.Title; + break; + default: + Title = req.Title; + break; + } } private void CalculateRequestStatus(BaseRequest req) @@ -248,16 +184,19 @@ namespace Ombi.Notifications RequestStatus = "Available"; return; } + if (req.Denied ?? false) { RequestStatus = "Denied"; return; } + if (!req.Available && req.Approved) { RequestStatus = "Processing Request"; return; } + RequestStatus = "Pending Approval"; } } @@ -298,36 +237,36 @@ namespace Ombi.Notifications public Dictionary Curlys => new Dictionary { - {nameof(RequestId), RequestId }, - {nameof(RequestedUser), RequestedUser }, - {nameof(Title), Title }, - {nameof(RequestedDate), RequestedDate }, - {nameof(Type), Type }, - {nameof(AdditionalInformation), AdditionalInformation }, - {nameof(LongDate),LongDate}, - {nameof(ShortDate),ShortDate}, - {nameof(LongTime),LongTime}, - {nameof(ShortTime),ShortTime}, - {nameof(Overview),Overview}, - {nameof(Year),Year}, - {nameof(EpisodesList),EpisodesList}, - {nameof(SeasonsList),SeasonsList}, - {nameof(PosterImage),PosterImage}, - {nameof(ApplicationName),ApplicationName}, - {nameof(ApplicationUrl),ApplicationUrl}, - {nameof(IssueDescription),IssueDescription}, - {nameof(IssueCategory),IssueCategory}, - {nameof(IssueStatus),IssueStatus}, - {nameof(IssueSubject),IssueSubject}, - {nameof(NewIssueComment),NewIssueComment}, - {nameof(IssueUser),IssueUser}, - {nameof(UserName),UserName}, - {nameof(Alias),Alias}, - {nameof(UserPreference),UserPreference}, - {nameof(DenyReason),DenyReason}, - {nameof(AvailableDate),AvailableDate}, - {nameof(RequestStatus),RequestStatus}, - {nameof(ProviderId),ProviderId}, + { nameof(RequestId), RequestId }, + { nameof(RequestedUser), RequestedUser }, + { nameof(Title), Title }, + { nameof(RequestedDate), RequestedDate }, + { nameof(Type), Type }, + { nameof(AdditionalInformation), AdditionalInformation }, + { nameof(LongDate), LongDate }, + { nameof(ShortDate), ShortDate }, + { nameof(LongTime), LongTime }, + { nameof(ShortTime), ShortTime }, + { nameof(Overview), Overview }, + { nameof(Year), Year }, + { nameof(EpisodesList), EpisodesList }, + { nameof(SeasonsList), SeasonsList }, + { nameof(PosterImage), PosterImage }, + { nameof(ApplicationName), ApplicationName }, + { nameof(ApplicationUrl), ApplicationUrl }, + { nameof(IssueDescription), IssueDescription }, + { nameof(IssueCategory), IssueCategory }, + { nameof(IssueStatus), IssueStatus }, + { nameof(IssueSubject), IssueSubject }, + { nameof(NewIssueComment), NewIssueComment }, + { nameof(IssueUser), IssueUser }, + { nameof(UserName), UserName }, + { nameof(Alias), Alias }, + { nameof(UserPreference), UserPreference }, + { nameof(DenyReason), DenyReason }, + { nameof(AvailableDate), AvailableDate }, + { nameof(RequestStatus), RequestStatus }, + { nameof(ProviderId), ProviderId }, }; } } \ No newline at end of file