/// <inheritdoc />
        public async Task OnEvent(PendingRestartEventArgs eventArgs)
        {
            var dataObject = DataObjectHelpers
                             .GetBaseDataObject(_applicationHost, NotificationType.PendingRestart);

            await _webhookSender.SendNotification(NotificationType.PendingRestart, dataObject)
            .ConfigureAwait(false);
        }
示例#2
0
        /// <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);
        }
示例#4
0
        /// <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);
        }
示例#6
0
        /// <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);
        }
示例#8
0
        /// <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);
        }
示例#12
0
        /// <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);
            }
        }
示例#13
0
        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");
            }
        }