Fix notifications failing when poster image is not set (#78)
This commit is contained in:
@@ -32,7 +32,7 @@ public class NotificationPublisher : INotificationPublisher
|
|||||||
QueueRecord record = ContextProvider.Get<QueueRecord>(nameof(QueueRecord));
|
QueueRecord record = ContextProvider.Get<QueueRecord>(nameof(QueueRecord));
|
||||||
InstanceType instanceType = (InstanceType)ContextProvider.Get<object>(nameof(InstanceType));
|
InstanceType instanceType = (InstanceType)ContextProvider.Get<object>(nameof(InstanceType));
|
||||||
Uri instanceUrl = ContextProvider.Get<Uri>(nameof(ArrInstance) + nameof(ArrInstance.Url));
|
Uri instanceUrl = ContextProvider.Get<Uri>(nameof(ArrInstance) + nameof(ArrInstance.Url));
|
||||||
Uri imageUrl = GetImageFromContext(record, instanceType);
|
Uri? imageUrl = GetImageFromContext(record, instanceType);
|
||||||
|
|
||||||
ArrNotification notification = new()
|
ArrNotification notification = new()
|
||||||
{
|
{
|
||||||
@@ -62,11 +62,13 @@ public class NotificationPublisher : INotificationPublisher
|
|||||||
}
|
}
|
||||||
|
|
||||||
public virtual async Task NotifyQueueItemDeleted(bool removeFromClient, DeleteReason reason)
|
public virtual async Task NotifyQueueItemDeleted(bool removeFromClient, DeleteReason reason)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
QueueRecord record = ContextProvider.Get<QueueRecord>(nameof(QueueRecord));
|
QueueRecord record = ContextProvider.Get<QueueRecord>(nameof(QueueRecord));
|
||||||
InstanceType instanceType = (InstanceType)ContextProvider.Get<object>(nameof(InstanceType));
|
InstanceType instanceType = (InstanceType)ContextProvider.Get<object>(nameof(InstanceType));
|
||||||
Uri instanceUrl = ContextProvider.Get<Uri>(nameof(ArrInstance) + nameof(ArrInstance.Url));
|
Uri instanceUrl = ContextProvider.Get<Uri>(nameof(ArrInstance) + nameof(ArrInstance.Url));
|
||||||
Uri imageUrl = GetImageFromContext(record, instanceType);
|
Uri? imageUrl = GetImageFromContext(record, instanceType);
|
||||||
|
|
||||||
QueueItemDeletedNotification notification = new()
|
QueueItemDeletedNotification notification = new()
|
||||||
{
|
{
|
||||||
@@ -81,8 +83,15 @@ public class NotificationPublisher : INotificationPublisher
|
|||||||
|
|
||||||
await _dryRunInterceptor.InterceptAsync(Notify<QueueItemDeletedNotification>, notification);
|
await _dryRunInterceptor.InterceptAsync(Notify<QueueItemDeletedNotification>, notification);
|
||||||
}
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "failed to notify queue item deleted");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public virtual async Task NotifyDownloadCleaned(double ratio, TimeSpan seedingTime, string categoryName, CleanReason reason)
|
public virtual async Task NotifyDownloadCleaned(double ratio, TimeSpan seedingTime, string categoryName, CleanReason reason)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
DownloadCleanedNotification notification = new()
|
DownloadCleanedNotification notification = new()
|
||||||
{
|
{
|
||||||
@@ -93,13 +102,21 @@ public class NotificationPublisher : INotificationPublisher
|
|||||||
new() { Title = "Hash", Text = ContextProvider.Get<string>("hash").ToLowerInvariant() },
|
new() { Title = "Hash", Text = ContextProvider.Get<string>("hash").ToLowerInvariant() },
|
||||||
new() { Title = "Category", Text = categoryName.ToLowerInvariant() },
|
new() { Title = "Category", Text = categoryName.ToLowerInvariant() },
|
||||||
new() { Title = "Ratio", Text = $"{ratio.ToString(CultureInfo.InvariantCulture)}%" },
|
new() { Title = "Ratio", Text = $"{ratio.ToString(CultureInfo.InvariantCulture)}%" },
|
||||||
new() { Title = "Seeding hours", Text = $"{Math.Round(seedingTime.TotalHours, 0).ToString(CultureInfo.InvariantCulture)}h" }
|
new()
|
||||||
|
{
|
||||||
|
Title = "Seeding hours", Text = $"{Math.Round(seedingTime.TotalHours, 0).ToString(CultureInfo.InvariantCulture)}h"
|
||||||
|
}
|
||||||
],
|
],
|
||||||
Level = NotificationLevel.Important
|
Level = NotificationLevel.Important
|
||||||
};
|
};
|
||||||
|
|
||||||
await _dryRunInterceptor.InterceptAsync(Notify<DownloadCleanedNotification>, notification);
|
await _dryRunInterceptor.InterceptAsync(Notify<DownloadCleanedNotification>, notification);
|
||||||
}
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "failed to notify download cleaned");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[DryRunSafeguard]
|
[DryRunSafeguard]
|
||||||
private Task Notify<T>(T message) where T: notnull
|
private Task Notify<T>(T message) where T: notnull
|
||||||
@@ -107,12 +124,21 @@ public class NotificationPublisher : INotificationPublisher
|
|||||||
return _messageBus.Publish(message);
|
return _messageBus.Publish(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Uri GetImageFromContext(QueueRecord record, InstanceType instanceType) =>
|
private Uri? GetImageFromContext(QueueRecord record, InstanceType instanceType)
|
||||||
instanceType switch
|
{
|
||||||
|
Uri? image = instanceType switch
|
||||||
{
|
{
|
||||||
InstanceType.Sonarr => record.Series!.Images.FirstOrDefault(x => x.CoverType == "poster")?.RemoteUrl,
|
InstanceType.Sonarr => record.Series!.Images.FirstOrDefault(x => x.CoverType == "poster")?.RemoteUrl,
|
||||||
InstanceType.Radarr => record.Movie!.Images.FirstOrDefault(x => x.CoverType == "poster")?.RemoteUrl,
|
InstanceType.Radarr => record.Movie!.Images.FirstOrDefault(x => x.CoverType == "poster")?.RemoteUrl,
|
||||||
InstanceType.Lidarr => record.Album!.Images.FirstOrDefault(x => x.CoverType == "cover")?.Url,
|
InstanceType.Lidarr => record.Album!.Images.FirstOrDefault(x => x.CoverType == "cover")?.Url,
|
||||||
_ => throw new ArgumentOutOfRangeException(nameof(instanceType))
|
_ => throw new ArgumentOutOfRangeException(nameof(instanceType))
|
||||||
} ?? throw new Exception("failed to get image url from context");
|
};
|
||||||
|
|
||||||
|
if (image is null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("no poster found for {title}", record.Title);
|
||||||
|
}
|
||||||
|
|
||||||
|
return image;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user