コード例 #1
0
    /// <inheritdoc />
    public async Task <Message> ReplyToAsync(string userId, Message message, MessageToEdit messageParam, CancellationToken token = default(CancellationToken))
    {
        ThrowIfDisposed();
        token.ThrowIfCancellationRequested();
        if (message.SenderId != userId && message.RecipientId != userId)
        {
            throw new UnauthorizedAccessException("The sender must be a part of the conversation.");
        }

        Thread thread;

        if (message.ThreadId == null)
        {
            thread = new Thread
            {
                Id       = Guid.NewGuid().ToString(),
                Subject  = message.Subject,
                SenderId = message.SenderId
            };
        }
        else
        {
            thread = await Context.Threads.FirstOrDefaultAsync(e => e.Id == message.ThreadId, token);

            if (thread == null)
            {
                return(null);
            }
            thread.IsArchived = false;
            Context.Update(thread);
        }

        message.IsArchived = false;
        Context.Update(message);

        Message newMessage = new Message
        {
            Id          = Guid.NewGuid(),
            ThreadId    = thread.Id,
            Thread      = thread,
            SenderId    = userId,
            RecipientId = message.SenderId,
            Subject     = message.Subject,
            Content     = messageParam.Content,
            MessageSent = DateTime.UtcNow
        };

        await DbSet.AddAsync(newMessage, token);

        thread.Modified = DateTime.UtcNow;
        await Context.SaveChangesAsync(token);

        return(newMessage);
    }
コード例 #2
0
    /// <inheritdoc />
    public Message ReplyTo(string userId, Message message, MessageToEdit messageParam)
    {
        ThrowIfDisposed();
        if (message.SenderId != userId && message.RecipientId != userId)
        {
            throw new UnauthorizedAccessException("The sender must be a part of the conversation.");
        }

        Thread thread;

        if (message.ThreadId == null)
        {
            thread = new Thread
            {
                Id       = Guid.NewGuid().ToString(),
                Subject  = message.Subject,
                SenderId = message.SenderId
            };
        }
        else
        {
            thread = Context.Threads.FirstOrDefault(e => e.Id == message.ThreadId);
            if (thread == null)
            {
                return(null);
            }
            thread.IsArchived = false;
            Context.Update(thread);
        }

        message.IsArchived = false;
        Context.Update(message);

        Message newMessage = new Message
        {
            Id          = Guid.NewGuid(),
            ThreadId    = thread.Id,
            SenderId    = userId,
            RecipientId = message.SenderId,
            Subject     = message.Subject,
            Content     = messageParam.Content,
            MessageSent = DateTime.UtcNow
        };

        DbSet.Add(newMessage);
        thread.Modified = DateTime.UtcNow;
        Context.SaveChanges();
        return(newMessage);
    }
コード例 #3
0
        private void MessageInputSendCommand(object obj)
        {
            if (String.IsNullOrEmpty(editMessageId))
            {
                MessageToSend?.Raise(this, new StringEventArgs(replyToMessageId));

                // Simulate that we close Reply part
                MessageContentReplyButtonCommand(null);
            }
            else
            {
                MessageToEdit?.Raise(this, new StringEventArgs(editMessageId));
                StopEditionMode();
            }
        }
コード例 #4
0
 public async Task <Message> EditMessage(int id, MessageToEdit message, AccessToken personalInformation)
 {
     Requires(personalInformation, new[] { "messages" });
     return(await SendJson <Message>($"messages/{id}", message, personalInformation));
 }