private ClientNotificationWithAcknowledgement CreateMessageReceivedNotification(Message message, ServerNotification serverNotification) { var notification = new ClientNotificationWithAcknowledgement { {"type", "MessageReceived"}, {"senderInternalUserId", message.SenderInternalUserId}, {"messageId", message.MessageId}, {"senderMessageId", message.SenderMessageId}, {"receivedExpired", message.ExpiryTimeStamp.HasValue && message.ExpiryTimeStamp <= DateTime.UtcNow}, {"messageType", message.MessageType}, {"messageScope", message.MessageScope}, {"sentTimestamp", message.SentTimestamp}, {"contextItems", message.ContextItems}, }; notification.AcknowledgementDetail = new ClientNotificationAcknowledgement { Result = NotificationResult.Delivered, ServerNotificationId = serverNotification.NotificationId, SentTime = serverNotification.CreatedOn, Type = serverNotification.Type }; return notification; }
private TimeSpan CalculatedTimeToRead(Message message) { if(!(message.ReceivedTimestamp.HasValue && message.ReadTimestamp.HasValue)) { return TimeSpan.Zero; } return message.ReadTimestamp.Value - message.ReceivedTimestamp.Value; }
public async Task NotifyMessageReadAsync(Message message) { var notification = CreateMessageReadNotification(message); await _notificationManager.QueueClientNotificationAsync(notification); if (_appState.IsOpen) { _notificationManager.SynchroniseAsync().ExecuteInBackground(); } }
private ClientNotification CreateMessageReadNotification(Message message) { var notification = new ClientNotification { {"type", "MessageRead"}, {"senderInternalUserId", message.SenderInternalUserId}, {"messageId", message.MessageId}, {"senderMessageId", message.SenderMessageId}, {"messageType", message.MessageType}, {"messageScope", message.MessageScope}, {"sentTimestamp", message.SentTimestamp}, {"contextItems", message.ContextItems}, {"timeToReadSeconds", (int)CalculatedTimeToRead(message).TotalSeconds} }; return notification; }
private ClientNotification CreateInteractionResultNotification(Message message, string interactionType, string buttonDescription, string userAction, DateTime interactionTime) { var notification = new ClientNotification { {"type", "InteractionResult"}, {"senderInternalUserId", message.SenderInternalUserId}, {"messageId", message.MessageId}, {"senderMessageId", message.SenderMessageId}, {"timeToInteractionSeconds", (int)(interactionTime - message.SentTimestamp).TotalSeconds}, {"interactionTimeStamp", interactionTime}, {"interactionType", interactionType}, {"buttonDescription", buttonDescription}, {"userAction", userAction}, {"operatingSystem", _environmentInformation.OperatingSystem}, {"messageSentTimestamp", message.SentTimestamp}, {"contextItems", message.ContextItems}, }; return notification; }
private async Task SendInteractionResultAsync(Message message, string interactionType, string buttonDescription, string userAction, DateTime interactionTime) { var notification = CreateInteractionResultNotification(message, interactionType, buttonDescription, userAction, interactionTime); await _notificationManager.QueueClientNotificationAsync(notification); var storedMessage = await _pushDataContext.SimplePushMessages.GetAsync(message.MessageId); if (storedMessage != null) { // We are done with this message now, delete it await _pushDataContext.SimplePushMessages.DeleteAsync(storedMessage.Id); await _pushDataContext.SaveChangesAsync(); } }
private static void CreateBasicAlertView(Message message, out SimplePushAlertView alertView, out DisplayAlertEvent displayAlertEvent, string bodyOverride = null) { alertView = new SimplePushAlertView(); var avatarId = message.AvatarAssetId; if (!String.IsNullOrEmpty(avatarId)) { var assetHelper = DonkyCore.Instance.GetService<IAssetHelper>(); alertView.Image.Source = new UriImageSource { Uri = new Uri(assetHelper.CreateUriForAsset(avatarId)) }; } alertView.TitleLabel.Text = message.SenderDisplayName; alertView.BodyLabel.Text = bodyOverride ?? message.Body; displayAlertEvent = new DisplayAlertEvent { Content = alertView }; }