Capitalizes V for tv show notification type. Refactors notification message curlys class.

This commit is contained in:
Victor Usoltsev 2021-03-27 00:51:36 +13:00
parent 4c571101c7
commit 412063c982
2 changed files with 172 additions and 234 deletions

View file

@ -209,7 +209,6 @@ namespace Ombi.Notifications
if (model.RequestType == RequestType.Movie) if (model.RequestType == RequestType.Movie)
{ {
_log.LogDebug("Notification options: {@model}, Req: {@MovieRequest}, Settings: {@Customization}", model, MovieRequest, Customization); _log.LogDebug("Notification options: {@model}, Req: {@MovieRequest}, Settings: {@Customization}", model, MovieRequest, Customization);
curlys.Setup(model, MovieRequest, Customization, preference); curlys.Setup(model, MovieRequest, Customization, preference);
} }
else if (model.RequestType == RequestType.TvShow) else if (model.RequestType == RequestType.TvShow)

View file

@ -14,228 +14,164 @@ namespace Ombi.Notifications
{ {
public class NotificationMessageCurlys public class NotificationMessageCurlys
{ {
public void Setup(NotificationOptions opts, MovieRequests req, CustomizationSettings s, UserNotificationPreferences pref)
{
LoadIssues(opts);
RequestId = req?.Id.ToString();
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;
}
if (Alias.IsNullOrEmpty())
{
// Can be set if it's an issue
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();
}
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
{
PosterImage = req?.PosterPath;
}
AdditionalInformation = opts?.AdditionalInformation ?? string.Empty;
CalculateRequestStatus(req);
}
public void Setup(NotificationOptions opts, AlbumRequest req, CustomizationSettings s, UserNotificationPreferences pref)
{
LoadIssues(opts);
RequestId = req?.Id.ToString();
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;
CalculateRequestStatus(req);
}
public void SetupNewsletter(CustomizationSettings s) public void SetupNewsletter(CustomizationSettings s)
{ {
ApplicationUrl = (s?.ApplicationUrl.HasValue() ?? false) ? s.ApplicationUrl : string.Empty; ApplicationName = string.IsNullOrEmpty(s?.ApplicationName) ? "Ombi" : s.ApplicationName;
ApplicationName = string.IsNullOrEmpty(s?.ApplicationName) ? "Ombi" : s?.ApplicationName; ApplicationUrl = s?.ApplicationUrl.HasValue() ?? false ? s.ApplicationUrl : string.Empty;
}
public void Setup(NotificationOptions opts, ChildRequests 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;
}
DenyReason = req?.DeniedReason;
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;
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();
}
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
{
PosterImage = req?.ParentRequest.PosterPath;
}
AdditionalInformation = opts.AdditionalInformation;
// DO Episode and Season Lists
var episodes = req?.SeasonRequests?.SelectMany(x => x.Episodes) ?? new List<EpisodeRequests>();
var seasons = req?.SeasonRequests?.OrderBy(x => x.SeasonNumber).ToList() ?? new List<SeasonRequests>();
var orderedEpisodes = episodes.OrderBy(x => x.EpisodeNumber).ToList();
var epSb = new StringBuilder();
var seasonSb = new StringBuilder();
for (var i = 0; i < orderedEpisodes.Count; i++)
{
var ep = orderedEpisodes[i];
if (i < orderedEpisodes.Count - 1)
{
epSb.Append($"{ep.EpisodeNumber},");
}
else
{
epSb.Append($"{ep.EpisodeNumber}");
}
}
for (var i = 0; i < seasons.Count; i++)
{
var ep = seasons[i];
if (i < seasons.Count - 1)
{
seasonSb.Append($"{ep.SeasonNumber},");
}
else
{
seasonSb.Append($"{ep.SeasonNumber}");
}
}
EpisodesList = epSb.ToString();
SeasonsList = seasonSb.ToString();
CalculateRequestStatus(req);
} }
public void Setup(OmbiUser user, CustomizationSettings s) public void Setup(OmbiUser user, CustomizationSettings s)
{ {
ApplicationUrl = (s?.ApplicationUrl.HasValue() ?? false) ? s.ApplicationUrl : string.Empty; ApplicationName = string.IsNullOrEmpty(s?.ApplicationName) ? "Ombi" : s.ApplicationName;
ApplicationName = string.IsNullOrEmpty(s?.ApplicationName) ? "Ombi" : s?.ApplicationName; ApplicationUrl = s?.ApplicationUrl.HasValue() ?? false ? s.ApplicationUrl : string.Empty;
RequestedUser = user.UserName; RequestedUser = user.UserName;
Alias = user.UserAlias; Alias = user.UserAlias;
UserName = user.UserName; 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;
Year = req?.ReleaseDate.Year.ToString();
Overview = req?.Overview;
AdditionalInformation = opts?.AdditionalInformation ?? string.Empty;
if (!string.IsNullOrEmpty(req?.PosterPath))
{
PosterImage = $"https://image.tmdb.org/t/p/w300/{req.PosterPath.TrimStart('/')}";
}
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 = $"https://image.tmdb.org/t/p/w300/{req.ParentRequest?.PosterPath.TrimStart('/')}";
}
// Generate episode list.
StringBuilder epSb = new StringBuilder();
IEnumerable<EpisodeRequests> episodes = req?.SeasonRequests?
.SelectMany(x => x.Episodes) ?? new List<EpisodeRequests>();
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<SeasonRequests> seasons = req?.SeasonRequests ?? new List<SeasonRequests>();
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)
{
LoadIssues(opts);
LoadCommon(req, s, pref);
LoadTitle(opts, req);
ProviderId = req?.ForeignArtistId ?? string.Empty;
Year = req?.ReleaseDate.Year.ToString();
AdditionalInformation = opts?.AdditionalInformation ?? string.Empty;
PosterImage = req?.Cover.HasValue() ?? false ? req.Cover : req?.Disk ?? string.Empty;
CalculateRequestStatus(req);
}
private void LoadIssues(NotificationOptions opts) private void LoadIssues(NotificationOptions opts)
{ {
var val = string.Empty; IssueDescription = opts.Substitutes.TryGetValue("IssueDescription", out string val) ? val : string.Empty;
IssueDescription = opts.Substitutes.TryGetValue("IssueDescription", out val) ? val : string.Empty;
IssueCategory = opts.Substitutes.TryGetValue("IssueCategory", 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; IssueStatus = opts.Substitutes.TryGetValue("IssueStatus", out val) ? val : string.Empty;
IssueSubject = opts.Substitutes.TryGetValue("IssueSubject", 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; NewIssueComment = opts.Substitutes.TryGetValue("NewIssueComment", out val) ? val : string.Empty;
UserName = opts.Substitutes.TryGetValue("IssueUser", 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; Alias = opts.Substitutes.TryGetValue("IssueUserAlias", out val) ? val : string.Empty;
Type = opts.Substitutes.TryGetValue("RequestType", out val) ? val.Humanize() : string.Empty; Type = opts.Substitutes.TryGetValue("RequestType", out val) && Enum.TryParse(val, out RequestType type)
? HumanizeReturnType(type)
: string.Empty;
}
private void LoadCommon(BaseRequest req, CustomizationSettings s, UserNotificationPreferences pref)
{
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;
RequestId = req?.Id.ToString();
RequestedUser = req?.RequestedUser?.UserName;
RequestedDate = req?.RequestedDate.ToString("D");
if (Type.IsNullOrEmpty())
{
Type = HumanizeReturnType(req?.RequestType);
}
if (UserName.IsNullOrEmpty())
{
UserName = req?.RequestedUser?.UserName;
}
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;
}
}
private static string HumanizeReturnType(RequestType? requestType)
{
return requestType switch
{
null => string.Empty,
RequestType.TvShow => "TV Show",
_ => requestType.Humanize()
};
}
private void LoadTitle(NotificationOptions opts, BaseRequest req)
{
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) private void CalculateRequestStatus(BaseRequest req)
@ -248,16 +184,19 @@ namespace Ombi.Notifications
RequestStatus = "Available"; RequestStatus = "Available";
return; return;
} }
if (req.Denied ?? false) if (req.Denied ?? false)
{ {
RequestStatus = "Denied"; RequestStatus = "Denied";
return; return;
} }
if (!req.Available && req.Approved) if (!req.Available && req.Approved)
{ {
RequestStatus = "Processing Request"; RequestStatus = "Processing Request";
return; return;
} }
RequestStatus = "Pending Approval"; RequestStatus = "Pending Approval";
} }
} }
@ -298,36 +237,36 @@ namespace Ombi.Notifications
public Dictionary<string, string> Curlys => new Dictionary<string, string> public Dictionary<string, string> Curlys => new Dictionary<string, string>
{ {
{nameof(RequestId), RequestId }, { nameof(RequestId), RequestId },
{nameof(RequestedUser), RequestedUser }, { nameof(RequestedUser), RequestedUser },
{nameof(Title), Title }, { nameof(Title), Title },
{nameof(RequestedDate), RequestedDate }, { nameof(RequestedDate), RequestedDate },
{nameof(Type), Type }, { nameof(Type), Type },
{nameof(AdditionalInformation), AdditionalInformation }, { nameof(AdditionalInformation), AdditionalInformation },
{nameof(LongDate),LongDate}, { nameof(LongDate), LongDate },
{nameof(ShortDate),ShortDate}, { nameof(ShortDate), ShortDate },
{nameof(LongTime),LongTime}, { nameof(LongTime), LongTime },
{nameof(ShortTime),ShortTime}, { nameof(ShortTime), ShortTime },
{nameof(Overview),Overview}, { nameof(Overview), Overview },
{nameof(Year),Year}, { nameof(Year), Year },
{nameof(EpisodesList),EpisodesList}, { nameof(EpisodesList), EpisodesList },
{nameof(SeasonsList),SeasonsList}, { nameof(SeasonsList), SeasonsList },
{nameof(PosterImage),PosterImage}, { nameof(PosterImage), PosterImage },
{nameof(ApplicationName),ApplicationName}, { nameof(ApplicationName), ApplicationName },
{nameof(ApplicationUrl),ApplicationUrl}, { nameof(ApplicationUrl), ApplicationUrl },
{nameof(IssueDescription),IssueDescription}, { nameof(IssueDescription), IssueDescription },
{nameof(IssueCategory),IssueCategory}, { nameof(IssueCategory), IssueCategory },
{nameof(IssueStatus),IssueStatus}, { nameof(IssueStatus), IssueStatus },
{nameof(IssueSubject),IssueSubject}, { nameof(IssueSubject), IssueSubject },
{nameof(NewIssueComment),NewIssueComment}, { nameof(NewIssueComment), NewIssueComment },
{nameof(IssueUser),IssueUser}, { nameof(IssueUser), IssueUser },
{nameof(UserName),UserName}, { nameof(UserName), UserName },
{nameof(Alias),Alias}, { nameof(Alias), Alias },
{nameof(UserPreference),UserPreference}, { nameof(UserPreference), UserPreference },
{nameof(DenyReason),DenyReason}, { nameof(DenyReason), DenyReason },
{nameof(AvailableDate),AvailableDate}, { nameof(AvailableDate), AvailableDate },
{nameof(RequestStatus),RequestStatus}, { nameof(RequestStatus), RequestStatus },
{nameof(ProviderId),ProviderId}, { nameof(ProviderId), ProviderId },
}; };
} }
} }