/// <inheritdoc /> public async Task OnEvent(PendingRestartEventArgs eventArgs) { var dataObject = DataObjectHelpers .GetBaseDataObject(_applicationHost, NotificationType.PendingRestart); await _webhookSender.SendNotification(NotificationType.PendingRestart, dataObject) .ConfigureAwait(false); }
/// <inheritdoc /> public async Task OnEvent(UserUpdatedEventArgs eventArgs) { var dataObject = DataObjectHelpers .GetBaseDataObject(_applicationHost, NotificationType.UserUpdated) .AddUserData(eventArgs.Argument); await _webhookSender.SendNotification(NotificationType.UserUpdated, dataObject) .ConfigureAwait(false); }
/// <inheritdoc /> public async Task OnEvent(PluginInstallationCancelledEventArgs eventArgs) { var dataObject = DataObjectHelpers .GetBaseDataObject(_applicationHost, NotificationType.PluginInstallationCancelled) .AddPluginInstallationInfo(eventArgs.Argument); await _webhookSender.SendNotification(NotificationType.PluginInstallationCancelled, dataObject) .ConfigureAwait(false); }
/// <inheritdoc /> public async Task OnEvent(SubtitleDownloadFailureEventArgs eventArgs) { if (eventArgs.Item is null) { return; } var dataObject = DataObjectHelpers .GetBaseDataObject(_applicationHost, NotificationType.SubtitleDownloadFailure) .AddBaseItemData(eventArgs.Item); await _webhookSender.SendNotification(NotificationType.SubtitleDownloadFailure, dataObject, eventArgs.Item.GetType()) .ConfigureAwait(false); }
/// <inheritdoc /> public async Task OnEvent(PluginUninstalledEventArgs eventArgs) { var dataObject = DataObjectHelpers .GetBaseDataObject(_applicationHost, NotificationType.PluginUninstalled); dataObject["PluginId"] = eventArgs.Argument.Id; dataObject["PluginName"] = eventArgs.Argument.Name; dataObject["PluginDescription"] = eventArgs.Argument.Description; dataObject["PluginVersion"] = eventArgs.Argument.Version; dataObject["PluginStatus"] = eventArgs.Argument.Status; await _webhookSender.SendNotification(NotificationType.PluginUninstalled, dataObject) .ConfigureAwait(false); }
/// <inheritdoc /> public async Task OnEvent(GenericEventArgs <AuthenticationResult> eventArgs) { if (eventArgs.Argument is null) { return; } var dataObject = DataObjectHelpers .GetBaseDataObject(_applicationHost, NotificationType.AuthenticationSuccess) .AddUserData(eventArgs.Argument.User); await _webhookSender.SendNotification(NotificationType.AuthenticationSuccess, dataObject) .ConfigureAwait(false); }
/// <inheritdoc /> public async Task OnEvent(SessionStartedEventArgs eventArgs) { if (eventArgs.Argument is null) { return; } var dataObject = DataObjectHelpers .GetBaseDataObject(_applicationHost, NotificationType.SessionStart) .AddSessionInfoData(eventArgs.Argument) .AddBaseItemData(eventArgs.Argument.FullNowPlayingItem); await _webhookSender.SendNotification(NotificationType.SessionStart, dataObject) .ConfigureAwait(false); }
/// <inheritdoc /> public async Task SendNotification(UserNotification request, CancellationToken cancellationToken) { var dataObject = DataObjectHelpers .GetBaseDataObject(_applicationHost, NotificationType.Generic); dataObject[nameof(request.Name)] = request.Name; dataObject[nameof(request.Description)] = request.Description; dataObject[nameof(request.Date)] = request.Date; dataObject[nameof(request.Level)] = request.Level; dataObject[nameof(request.Url)] = request.Url; dataObject[nameof(request.User.Username)] = request.User.Username; dataObject["UserId"] = request.User.Id; await _webhookSender.SendNotification(NotificationType.Generic, dataObject) .ConfigureAwait(false); }
/// <inheritdoc /> public async Task ProcessItemsAsync() { _logger.LogDebug("ProcessItemsAsync"); // Attempt to process all items in queue. var currentItems = _itemProcessQueue.ToArray(); foreach (var(key, container) in currentItems) { var item = _libraryManager.GetItemById(key); if (item is null) { // Remove item from queue. _itemProcessQueue.TryRemove(key, out _); return; } _logger.LogDebug("Item {ItemName}", item.Name); // Metadata not refreshed yet and under retry limit. if (item.ProviderIds.Keys.Count == 0 && container.RetryCount < MaxRetries) { _logger.LogDebug("Requeue {ItemName}, no provider ids", item.Name); container.RetryCount++; _itemProcessQueue.AddOrUpdate(key, container, (_, _) => container); continue; } _logger.LogDebug("Notifying for {ItemName}", item.Name); // Send notification to each configured destination. var dataObject = DataObjectHelpers .GetBaseDataObject(_applicationHost, NotificationType.ItemAdded) .AddBaseItemData(item); var itemType = item.GetType(); await _webhookSender.SendNotification(NotificationType.ItemAdded, dataObject, itemType) .ConfigureAwait(false); // Remove item from queue. _itemProcessQueue.TryRemove(key, out _); } }
/// <inheritdoc /> public async Task OnEvent(GenericEventArgs <AuthenticationRequest> eventArgs) { if (eventArgs.Argument is null) { return; } var dataObject = DataObjectHelpers .GetBaseDataObject(_applicationHost, NotificationType.AuthenticationFailure); dataObject[nameof(eventArgs.Argument.App)] = eventArgs.Argument.App; dataObject[nameof(eventArgs.Argument.Username)] = eventArgs.Argument.Username; dataObject[nameof(eventArgs.Argument.UserId)] = eventArgs.Argument.UserId; dataObject[nameof(eventArgs.Argument.AppVersion)] = eventArgs.Argument.AppVersion; dataObject[nameof(eventArgs.Argument.DeviceId)] = eventArgs.Argument.DeviceId; dataObject[nameof(eventArgs.Argument.DeviceName)] = eventArgs.Argument.DeviceName; await _webhookSender.SendNotification(NotificationType.AuthenticationFailure, dataObject) .ConfigureAwait(false); }
/// <inheritdoc /> public async Task OnEvent(TaskCompletionEventArgs eventArgs) { var dataObject = DataObjectHelpers .GetBaseDataObject(_applicationHost, NotificationType.TaskCompleted); dataObject["TaskId"] = eventArgs.Task.Id; dataObject["TaskName"] = eventArgs.Task.Name; dataObject["TaskDescription"] = eventArgs.Task.Description; dataObject["TaskCategory"] = eventArgs.Task.Category; dataObject["TaskState"] = eventArgs.Task.State.ToString(); dataObject["ResultId"] = eventArgs.Result.Id; dataObject["ResultKey"] = eventArgs.Result.Key; dataObject["ResultName"] = eventArgs.Result.Name; dataObject["ResultStatus"] = eventArgs.Result.Status.ToString(); dataObject["StartTime"] = eventArgs.Result.StartTimeUtc; dataObject["EndTime"] = eventArgs.Result.EndTimeUtc; dataObject["ResultErrorMessage"] = eventArgs.Result.ErrorMessage; dataObject["ResultLongErrorMessage"] = eventArgs.Result.LongErrorMessage; await _webhookSender.SendNotification(NotificationType.TaskCompleted, dataObject) .ConfigureAwait(false); }
/// <inheritdoc /> public async Task OnEvent(PlaybackStopEventArgs eventArgs) { if (eventArgs.Item is null) { return; } if (eventArgs.Item.IsThemeMedia) { // Don't report theme song or local trailer playback. return; } if (eventArgs.Users.Count == 0) { // No users in playback session. return; } var dataObject = DataObjectHelpers .GetBaseDataObject(_applicationHost, NotificationType.PlaybackStop) .AddBaseItemData(eventArgs.Item) .AddPlaybackProgressData(eventArgs); dataObject[nameof(eventArgs.PlayedToCompletion)] = eventArgs.PlayedToCompletion; foreach (var user in eventArgs.Users) { var userDataObject = new Dictionary <string, object>(dataObject) { ["NotificationUsername"] = user.Username, ["UserId"] = user.Id }; await _webhookSender.SendNotification(NotificationType.PlaybackStop, userDataObject, eventArgs.Item.GetType()) .ConfigureAwait(false); } }
private async void UserDataSavedHandler(object?sender, UserDataSaveEventArgs eventArgs) { try { if (eventArgs.Item is null) { return; } if (eventArgs.Item.IsThemeMedia) { // Don't report theme song or local trailer playback. return; } var user = _userManager.GetUserById(eventArgs.UserId); if (user is null) { return; } var dataObject = DataObjectHelpers .GetBaseDataObject(_applicationHost, NotificationType.UserDataSaved) .AddBaseItemData(eventArgs.Item) .AddUserItemData(eventArgs.UserData); dataObject["SaveReason"] = eventArgs.SaveReason.ToString(); dataObject["NotificationUsername"] = user.Username; dataObject["UserId"] = user.Id; await _webhookSender.SendNotification(NotificationType.UserDataSaved, dataObject, eventArgs.Item.GetType()) .ConfigureAwait(false); } catch (Exception ex) { _logger.LogWarning(ex, "Unable to send notification"); } }