private bool IsLastMessageOld(IContribution newContribution) { const int TimeThresholdInSeconds = 10; TimeSpan duration = newContribution.ContributionTimeStamp - lastMessageSentDate; return(duration.TotalSeconds > TimeThresholdInSeconds); }
SignListViewModel signListViewModel; //签到信息视图模型 public SignController(ISignInfo signInfo, IGameMember gameMember, IContribution contribution, IMemberGroup memberGroup) { EFSignInfo = signInfo; EFGameMember = gameMember; EFContribution = contribution; EFMemberGroup = memberGroup; }
private Run FormatUser(IContribution contribution) { return(new Run(userRepository.FindEntityById(contribution.ContributorUserId).Username) { FontWeight = FontWeights.Bold }); }
MemberGroupListViewModel MemberGroupListViewModel; //社团分组表视图 public MemberGroupController(IMemberGroup memberGroup, IGameMember gameMember, ISignInfo signInfo, IContribution contribution) { EFMemberGroup = memberGroup; EFGameMember = gameMember; EFSignInfo = signInfo; EFContribution = contribution; }
public void NewContributionGetsAssignedId() { HandleMessage(contributionRequest); Conversation contributionConversation = ConversationRepository.FindEntityById(contributionRequest.Contribution.ConversationId); IContribution lastContributionAdded = contributionConversation.LastContribution; Assert.IsTrue(lastContributionAdded.Id != 0); }
public void AddsNewContributionToConversation() { HandleMessage(contributionRequest); Conversation contributionConversation = ConversationRepository.FindEntityById(contributionRequest.Contribution.ConversationId); IContribution lastContributionAdded = contributionConversation.LastContribution; Assert.IsTrue(lastContributionAdded.ContributorUserId.Equals(contributionRequest.Contribution.ContributorUserId)); }
/// <summary> /// Adds a contribution to a current conversation in the repository. /// </summary> /// <param name="contribution"></param> public void AddContributionToConversation(IContribution contribution) { Conversation conversation = FindEntityById(contribution.ConversationId); Conversation previousConversation = conversation.CreateLightweightCopy(); conversation.AddContribution(contribution); OnEntityUpdated(conversation, previousConversation); }
private static Run FormatTimeStamp(IContribution contribution) { return(new Run(contribution.ContributionTimeStamp.ToString("HH:mm:ss dd/MM/yyyy", new CultureInfo("en-GB"))) { FontSize = 10, FontStyle = FontStyles.Italic, Foreground = Brushes.DarkGray }); }
private void OnContributionAdded(IContribution contribution) { var contributionNotification = new EntityNotification <IContribution>(contribution, NotificationType.Create); List <Participation> participationsByConversationId = participationRepository.GetParticipationsByConversationId(contribution.ConversationId); IEnumerable <User> participantUsers = participationsByConversationId.Select(participant => userRepository.FindEntityById(participant.UserId)); IEnumerable <int> connectedUserIds = participantUsers.Where(user => user.ConnectionStatus.UserConnectionStatus == ConnectionStatus.Status.Connected).Select(user => user.Id); ClientManager.SendMessageToClients(contributionNotification, connectedUserIds); }
/// <summary> /// Formats a contribution to be viewable on the screen. To be used with a <see cref="FlowDocument" />. /// </summary> /// <param name="contribution">The <see cref="TextContribution" /> to format.</param> /// <returns>A <see cref="Paragraph" /> that is added to a <see cref="FlowDocument" /> to be sent to a view Control.</returns> public Paragraph FormatContribution(IContribution contribution) { Paragraph paragraph = FormatParagraph(contribution); Run user = FormatUser(contribution); // Here will decide whether the contribution is text or image var textContribution = contribution as TextContribution; Run message = null; InlineUIContainer test = null; if (textContribution != null) { message = FormatMessageBody(textContribution); } else { test = FormatMessageBody((ImageContribution)contribution); } Run timeStamp = FormatTimeStamp(contribution); if (!IsSameSenderAsLastContribution(contribution.ContributorUserId)) { paragraph.Inlines.Add(user); paragraph.Inlines.Add(new LineBreak()); } if (message != null) { paragraph.Inlines.Add(message); } if (test != null) { paragraph.Inlines.Add(test); } if (IsLastMessageOld(contribution)) { paragraph.Inlines.Add(new LineBreak()); paragraph.Inlines.Add(timeStamp); } lastUserId = contribution.ContributorUserId; lastMessageSentDate = contribution.ContributionTimeStamp; return(paragraph); }
private void OnContributionAdded(IContribution contribution) { if (contribution.ConversationId == groupChat.Conversation.Id) { Application.Current.Dispatcher.Invoke(() => { FlowDocument messages = GroupChat.Messages; messages.Blocks.Add(contributionMessageFormatter.FormatContribution(contribution)); GroupChat.Messages = messages; }); if (groupChat.Conversation.LastContribution.ContributorUserId != clientService.ClientUserId) { audioPlayer.Play(Resources.Chat_Notification_Sound); } } }
protected override void HandleMessage(ContributionRequest message) { var conversationRepository = (ConversationRepository)ServiceRegistry.GetService <RepositoryManager>().GetRepository <Conversation>(); var entityIdAllocatorFactory = ServiceRegistry.GetService <EntityIdAllocatorFactory>(); IContribution newContribution; IContribution contribution = message.Contribution; switch (contribution.ContributionType) { case ContributionType.Text: newContribution = new TextContribution(entityIdAllocatorFactory.AllocateEntityId <IContribution>(), (TextContribution)contribution); conversationRepository.AddContributionToConversation(newContribution); break; case ContributionType.Image: newContribution = new ImageContribution(entityIdAllocatorFactory.AllocateEntityId <IContribution>(), (ImageContribution)contribution); conversationRepository.AddContributionToConversation(newContribution); break; } }
private Paragraph FormatParagraph(IContribution contribution) { TextAlignment alignment = IsContributor(contribution.ContributorUserId) ? TextAlignment.Right : TextAlignment.Left; Brush brush = IsContributor(contribution.ContributorUserId) ? senderBackground : receiverBackground; var marginSpacing = 50; var messageSpacing = 2; if (!IsSameSenderAsLastContribution(contribution.ContributorUserId)) { messageSpacing = 20; } Thickness messageMargin = IsContributor(contribution.ContributorUserId) ? new Thickness(marginSpacing, messageSpacing, 0, 0) : new Thickness(0, messageSpacing, marginSpacing, 0); return(new Paragraph { TextAlignment = alignment, Background = brush, Margin = messageMargin }); }
public ContributionRequest(IContribution contribution) { Contribution = contribution; }
/// <summary> /// Adds an <see cref="IContribution" /> entity to this conversation. /// The contribution's conversation Id must match this conversation's Id. /// </summary> public void AddContribution(IContribution newContribution) { contributionsIndexedByContributionId.Add(newContribution.Id, newContribution); }
private void OnContributionAdded(IContribution contribution) { Conversation conversation = conversationRepository.FindEntityById(contribution.ConversationId); ConversationWindowManager.CreateConversationWindow(ServiceRegistry, conversation); }