private void OnMessagesServiceResolvedUnreadFriendMessages(object sender, ResolvedUnreadFriendMessagesSignalArgs e) { try { if (e.Counts != null && e.Counts.Any()) { PossibleConversations.ForEach <PossibleConverstionItem>(possibleConversation => possibleConversation.UnreadMessagesCount = 0); UnreadMessages = 0; e.Counts.ForEach(friendUnreadingMessages => { PossibleConverstionItem possibleConverstionItem = PossibleConversations.FirstOrDefault(possibleConversation => friendUnreadingMessages.Id == possibleConversation.Companion.Id); if (possibleConverstionItem != null) { possibleConverstionItem.UnreadMessagesCount = (int)friendUnreadingMessages.Count; } }); UnreadMessages = PossibleConversations.Sum <PossibleConverstionItem>(possibleConversation => possibleConversation.UnreadMessagesCount); } else { PossibleConversations.ForEach <PossibleConverstionItem>(possibleConversation => possibleConversation.UnreadMessagesCount = 0); UnreadMessages = 0; } } catch (Exception exc) { Crashes.TrackError(exc); Debugger.Break(); PossibleConversations?.ForEach <PossibleConverstionItem>(possibleConversation => possibleConversation.UnreadMessagesCount = 0); UnreadMessages = 0; } GlobalSettings.Instance.AppMessagingEvents.MessagingEvents.RefreshedUnreadMessagesForConverseClusterTabInvoke(this, UnreadMessages); }
public ConversationTabViewModel BuildConversationTab(PossibleConverstionItem data) { ConversationTabViewModel conversationTabViewModel = BuildSingleMessengerTabItem <ConversationTabViewModel>(""); conversationTabViewModel.InitializeAsync(data); return(conversationTabViewModel); }
protected override void SubscribeOnIntentEvent() { base.SubscribeOnIntentEvent(); /// If it will be neccessary remove this subscriptions to the `long terme app events subscription` /// MessagingCenter.Subscribe <object, long>(this, GlobalSettings.Instance.AppMessagingEvents.FriendEvents.FriendDeleted, (sender, args) => { PossibleConverstionItem itemToRemove = PossibleConversations?.FirstOrDefault <PossibleConverstionItem>(pCI => (pCI.Companion is ProfileDTO && pCI.Companion.Id == args)); PossibleConversations?.Remove(itemToRemove); }); MessagingCenter.Subscribe <object, long>(this, GlobalSettings.Instance.AppMessagingEvents.FriendEvents.FriendshipInviteAccepted, (sender, args) => { }); _stateService.InvitesChanged += OnStateServiceInvitesChanged; _stateService.ChangedFriendship += OnStateServiceChangedFriendship; }
public PossibleConverstionItem BuildConversationItem(IPossibleMessaging data) { PossibleConverstionItem converstionItem = new PossibleConverstionItem(); converstionItem.IconPath = null; converstionItem.Companion = data; string resolvedCompanionName = _COMPANION_NAME_STUB; if (data is ProfileDTO profileDTO) { converstionItem.MessagingCompanionType = MessagingCompanionType.Friend; converstionItem.ProfileType = profileDTO.Type; converstionItem.IsAvailable = profileDTO.Availability.ToLower() == _ONLINE_AVAILABILITY_VALUE; converstionItem.IconPath = (profileDTO.Avatar != null) ? profileDTO.Avatar.Url : null; resolvedCompanionName = string.Format("{0} {1}", profileDTO.FirstName, profileDTO.LastName); } else if (data is GroupDTO groupDTO) { converstionItem.MessagingCompanionType = MessagingCompanionType.Group; resolvedCompanionName = groupDTO.Name; } else if (data is TeamDTO teamDTO) { converstionItem.MessagingCompanionType = MessagingCompanionType.Team; resolvedCompanionName = teamDTO.Name; } else if (data is FamilyDTO) { converstionItem.MessagingCompanionType = MessagingCompanionType.Family; resolvedCompanionName = _FAMILY_CONVERSATION_TITLE; } else { throw new InvalidOperationException(_COMPANION_TYPE_ERROR); } converstionItem.CompanionName = resolvedCompanionName; return(converstionItem); }
public MessageItem BuildSingleMessageItem(MessageDTO message, PossibleConverstionItem conversation) { MessageItem messageItem = new MessageItem() { IsIncomming = message.FromId == GlobalSettings.Instance.UserProfile.Id, Data = message }; if (messageItem.IsIncomming) { messageItem.Avatar = (GlobalSettings.Instance.UserProfile.Avatar?.Url != null) ? GlobalSettings.Instance.UserProfile.Avatar?.Url : null; } else { messageItem.Avatar = ResolveCompanionAvatar(message, conversation); } return(messageItem); }
private string ResolveCompanionAvatar(MessageDTO message, PossibleConverstionItem conversation) { string avatarPath = null; ProfileDTO profileDTO = null; switch (conversation.MessagingCompanionType) { case MessagingCompanionType.Family: profileDTO = ((FamilyDTO)conversation.Companion).Members?.FirstOrDefault(m => m.Id == message.FromId); break; case MessagingCompanionType.Friend: profileDTO = ((ProfileDTO)conversation.Companion); break; case MessagingCompanionType.Team: profileDTO = ((TeamDTO)conversation.Companion).Members?.FirstOrDefault(m => m.Member.Id == message.FromId)?.Member; if (profileDTO == null) { profileDTO = ((TeamDTO)conversation.Companion).CreatedBy; } break; case MessagingCompanionType.Group: profileDTO = ((GroupDTO)conversation.Companion).Members?.FirstOrDefault(m => m.Profile.Id == message.FromId).Profile; break; } if (profileDTO != null && profileDTO.Avatar != null) { avatarPath = profileDTO.Avatar.Url; } return(avatarPath); }
private void LostRealtionWithTeam(long targetTeamId) { PossibleConverstionItem itemToRemove = PossibleConversations?.FirstOrDefault <PossibleConverstionItem>(pCI => (pCI.Companion is TeamDTO && pCI.Companion.Id == targetTeamId)); PossibleConversations?.Remove(itemToRemove); }
public List <MessageItem> CreateMessageItems(IEnumerable <MessageDTO> messages, PossibleConverstionItem conversation) { List <MessageItem> messageItems = new List <MessageItem>(); foreach (MessageDTO message in messages) { messageItems.Add(BuildSingleMessageItem(message, conversation)); } return(messageItems); }
public MessageItem BuildSingleMessageItem(ReceivedMessageSignalArgs messageArgs, PossibleConverstionItem conversation) { MessageDTO message = BuildMessage(messageArgs); return(BuildSingleMessageItem(message, conversation)); }