private void ConvertState(MessageViewModel message) { if (message.IsOutgoing && !message.IsChannelPost && !message.IsSaved()) { var maxId = 0L; var chat = message.GetChat(); if (chat != null) { maxId = chat.LastReadOutboxMessageId; } if (message.SendingState is MessageSendingStateFailed) { StateLabel.Text = "\u00A0\u00A0\uE611"; } else if (message.SendingState is MessageSendingStatePending) { StateLabel.Text = "\u00A0\u00A0\uE600"; } else if (message.Id <= maxId) { StateLabel.Text = "\u00A0\u00A0\uE601"; } else { StateLabel.Text = "\u00A0\u00A0\uE602"; } } else { StateLabel.Text = string.Empty; } }
private string UpdateStateIcon(MessageViewModel message) { if (message.IsOutgoing && !message.IsChannelPost && !message.IsSaved) { var maxId = 0L; var messageHash = message.ChatId ^ message.Id; var chat = message.GetChat(); if (chat != null) { maxId = chat.LastReadOutboxMessageId; } if (message.SendingState is MessageSendingStateFailed) { UpdateTicks(true, null); _ticksState = MessageTicksState.Failed; _ticksHash = messageHash; // TODO: return("\u00A0\u00A0failed"); // Failed } else if (message.SendingState is MessageSendingStatePending) { UpdateTicks(true, null); _ticksState = MessageTicksState.Pending; _ticksHash = messageHash; return("\u00A0\u00A0\uE600"); // Pending } else if (message.Id <= maxId) { UpdateTicks(true, true, _ticksState == MessageTicksState.Sent && _ticksHash == messageHash); _ticksState = MessageTicksState.Read; _ticksHash = messageHash; return(_container != null ? "\u00A0\u00A0\uE603" : "\u00A0\u00A0\uE601"); // Read } UpdateTicks(true, false, _ticksState == MessageTicksState.Pending && _ticksHash == messageHash); _ticksState = MessageTicksState.Sent; _ticksHash = messageHash; return(_container != null ? "\u00A0\u00A0\uE603" : "\u00A0\u00A0\uE602"); // Unread } UpdateTicks(false, null); _ticksState = MessageTicksState.None; _ticksHash = 0; return(string.Empty); }
private static (string, IList <TextEntity>) UpdateChatChangePhoto(MessageViewModel message, MessageChatChangePhoto chatChangePhoto, bool active) { var content = string.Empty; var entities = active ? new List <TextEntity>() : null; var chat = message.GetChat(); if (chat.Type is ChatTypeSupergroup supergroup && supergroup.IsChannel) { content = Strings.Resources.ActionChannelChangedPhoto; }
//private string GetFromLabel(TLMessage message, string title) //{ // return GetFromLabelInternal(message, title) + Environment.NewLine; //} private string GetFromLabel(MessageViewModel message, string title) { if (!string.IsNullOrWhiteSpace(title)) { return(title); } if (message.IsChannelPost) { var chat = message.GetChat(); if (chat != null) { return(message.ProtoService.GetTitle(chat)); } } else if (message.IsSaved()) { if (message.ForwardInfo is MessageForwardedFromUser fromUser) { return(message.ProtoService.GetUser(fromUser.SenderUserId)?.GetFullName()); } else if (message.ForwardInfo is MessageForwardedPost post) { return(message.ProtoService.GetTitle(message.ProtoService.GetChat(post.ChatId))); } } var user = message.GetSenderUser(); if (user != null) { return(user.GetFullName()); } //if (message.IsPost && (message.ToId is TLPeerChat || message.ToId is TLPeerChannel)) //{ // return message.Parent?.DisplayName ?? string.Empty; //} //else if (message.IsSaved() && message.FwdFromUser is TLUser user) //{ // return user.FullName; //} //var from = message.From?.FullName ?? string.Empty; //if (message.ViaBot != null && message.FwdFrom == null) //{ // from += $" via @{message.ViaBot.Username}"; //} //return from; return(title ?? string.Empty); }
public void UpdateMessageState(MessageViewModel message) { if (message.IsOutgoing && !message.IsChannelPost && !message.IsSaved()) { var maxId = 0L; var chat = message.GetChat(); if (chat != null) { maxId = chat.LastReadOutboxMessageId; } if (message.SendingState is MessageSendingStateFailed) { UpdateTicks(null); _ticksState = false; StateLabel.Text = "\u00A0\u00A0failed"; } else if (message.SendingState is MessageSendingStatePending) { UpdateTicks(null); _ticksState = false; StateLabel.Text = "\u00A0\u00A0\uE600"; } else if (message.Id <= maxId) { UpdateTicks(true, _ticksState); _ticksState = false; StateLabel.Text = _container != null ? "\u00A0\u00A0\uE603" : "\u00A0\u00A0\uE601"; } else { UpdateTicks(false); _ticksState = true; StateLabel.Text = _container != null ? "\u00A0\u00A0\uE603" : "\u00A0\u00A0\uE602"; } } else { UpdateTicks(null); _ticksState = false; StateLabel.Text = string.Empty; } }
private string GetFromLabel(MessageViewModel message, string title) { if (!string.IsNullOrWhiteSpace(title)) { return(title); } if (message.IsChannelPost) { var chat = message.GetChat(); if (chat != null) { return(message.ProtoService.GetTitle(chat)); } } else if (message.IsSaved()) { if (message.ForwardInfo?.Origin is MessageForwardOriginUser fromUser) { return(message.ProtoService.GetUser(fromUser.SenderUserId)?.GetFullName()); } else if (message.ForwardInfo?.Origin is MessageForwardOriginChannel post) { return(message.ProtoService.GetTitle(message.ProtoService.GetChat(post.ChatId))); } else if (message.ForwardInfo?.Origin is MessageForwardOriginHiddenUser fromHiddenUser) { return(fromHiddenUser.SenderName); } } var user = message.GetSenderUser(); if (user != null) { return(user.GetFullName()); } return(title ?? string.Empty); }
private static (string, IList <TextEntity>) UpdateChatAddMembers(MessageViewModel message, MessageChatAddMembers chatAddMembers, bool active) { var content = string.Empty; var entities = active ? new List <TextEntity>() : null; int singleUserId = 0; if (singleUserId == 0 && chatAddMembers.MemberUserIds.Count == 1) { singleUserId = chatAddMembers.MemberUserIds[0]; } var fromUser = message.GetSenderUser(); if (singleUserId != 0) { var whoUser = message.ProtoService.GetUser(singleUserId); if (singleUserId == message.SenderUserId) { var chat = message.GetChat(); var supergroup = chat.Type as ChatTypeSupergroup; if (supergroup != null && supergroup.IsChannel) { if (singleUserId == message.ProtoService.GetMyId()) { content = Strings.Resources.ChannelJoined; } else { content = ReplaceWithLink(Strings.Resources.EventLogChannelJoined, "un1", fromUser, ref entities); } } else { if (supergroup != null && !supergroup.IsChannel) { if (singleUserId == message.ProtoService.GetMyId()) { content = Strings.Resources.ChannelMegaJoined; } else { content = ReplaceWithLink(Strings.Resources.ActionAddUserSelfMega, "un1", fromUser, ref entities); } } else if (message.IsOutgoing) { content = Strings.Resources.ActionAddUserSelfYou; } else { content = ReplaceWithLink(Strings.Resources.ActionAddUserSelf, "un1", fromUser, ref entities); } } } else { if (message.IsOutgoing) { content = ReplaceWithLink(Strings.Resources.ActionYouAddUser, "un2", whoUser, ref entities); } else if (singleUserId == message.ProtoService.GetMyId()) { var chat = message.GetChat(); var supergroup = chat.Type as ChatTypeSupergroup; if (supergroup != null) { if (supergroup.IsChannel) { content = ReplaceWithLink(Strings.Resources.ChannelAddedBy, "un1", fromUser, ref entities); } else { content = ReplaceWithLink(Strings.Resources.MegaAddedBy, "un1", fromUser, ref entities); } } else { content = ReplaceWithLink(Strings.Resources.ActionAddUserYou, "un1", fromUser, ref entities); } } else { content = ReplaceWithLink(Strings.Resources.ActionAddUser, "un1", fromUser, ref entities); content = ReplaceWithLink(content, "un2", whoUser, ref entities); } } } else { if (message.IsOutgoing) { content = ReplaceWithLink(Strings.Resources.ActionYouAddUser, "un2", chatAddMembers.MemberUserIds, message.ProtoService, ref entities); } else { content = ReplaceWithLink(Strings.Resources.ActionAddUser, "un1", message.GetSenderUser(), ref entities); content = ReplaceWithLink(content, "un2", chatAddMembers.MemberUserIds, message.ProtoService, ref entities); } } return(content, entities); }
private void UpdateMessageHeader(MessageViewModel message) { MaybeUseInner(ref message); var paragraph = HeaderLabel; var admin = AdminLabel; var parent = Header; paragraph.Inlines.Clear(); if (message == null) { return; } var chat = message.GetChat(); var sticker = message.Content is MessageSticker; var light = sticker || message.Content is MessageVideoNote; var shown = false; if (!light && message.IsFirst && !message.IsOutgoing && !message.IsChannelPost && (chat.Type is ChatTypeBasicGroup || chat.Type is ChatTypeSupergroup)) { var sender = message.GetSenderUser(); var hyperlink = new Hyperlink(); hyperlink.Inlines.Add(new Run { Text = sender?.GetFullName() }); hyperlink.UnderlineStyle = UnderlineStyle.None; hyperlink.Foreground = PlaceholderHelper.GetBrush(message.SenderUserId); hyperlink.Click += (s, args) => From_Click(message); paragraph.Inlines.Add(hyperlink); shown = true; } else if (!light && message.IsChannelPost && chat.Type is ChatTypeSupergroup) { var hyperlink = new Hyperlink(); hyperlink.Inlines.Add(new Run { Text = message.ProtoService.GetTitle(chat) }); hyperlink.UnderlineStyle = UnderlineStyle.None; //hyperlink.Foreground = Convert.Bubble(message.ChatId); hyperlink.Click += (s, args) => From_Click(message); paragraph.Inlines.Add(hyperlink); shown = true; } else if (!light && message.IsFirst && message.IsSaved()) { var title = string.Empty; if (message.ForwardInfo is MessageForwardedFromUser fromUser) { title = message.ProtoService.GetUser(fromUser.SenderUserId)?.GetFullName(); } else if (message.ForwardInfo is MessageForwardedPost post) { title = message.ProtoService.GetTitle(message.ProtoService.GetChat(post.ForwardedFromChatId)); } var hyperlink = new Hyperlink(); hyperlink.Inlines.Add(new Run { Text = title ?? string.Empty }); hyperlink.UnderlineStyle = UnderlineStyle.None; //hyperlink.Foreground = Convert.Bubble(message.FwdFrom?.FromId ?? message.FwdFrom?.ChannelId ?? 0); hyperlink.Click += (s, args) => FwdFrom_Click(message); paragraph.Inlines.Add(hyperlink); shown = true; } if (shown) { if (admin != null && !message.IsOutgoing && message.Delegate != null && message.Delegate.IsAdmin(message.SenderUserId)) { paragraph.Inlines.Add(new Run { Text = " " + Strings.Resources.ChatAdmin, Foreground = null }); } } var forward = false; if (message.ForwardInfo != null && !sticker && !message.IsSaved()) { if (paragraph.Inlines.Count > 0) { paragraph.Inlines.Add(new LineBreak()); } paragraph.Inlines.Add(new Run { Text = Strings.Resources.ForwardedMessage, FontWeight = FontWeights.Normal }); paragraph.Inlines.Add(new LineBreak()); paragraph.Inlines.Add(new Run { Text = Strings.Resources.From + " ", FontWeight = FontWeights.Normal }); var title = string.Empty; if (message.ForwardInfo is MessageForwardedFromUser fromUser) { title = message.ProtoService.GetUser(fromUser.SenderUserId)?.GetFullName(); } else if (message.ForwardInfo is MessageForwardedPost post) { title = message.ProtoService.GetTitle(message.ProtoService.GetChat(post.ChatId)); } var hyperlink = new Hyperlink(); hyperlink.Inlines.Add(new Run { Text = title }); hyperlink.UnderlineStyle = UnderlineStyle.None; hyperlink.Foreground = light ? new SolidColorBrush(Colors.White) : paragraph.Foreground; hyperlink.Click += (s, args) => FwdFrom_Click(message); paragraph.Inlines.Add(hyperlink); forward = true; } //if (message.HasViaBotId && message.ViaBot != null && !message.ViaBot.IsDeleted && message.ViaBot.HasUsername) var viaBot = message.ProtoService.GetUser(message.ViaBotUserId); if (viaBot != null && viaBot.Type is UserTypeBot && !string.IsNullOrEmpty(viaBot.Username)) { var hyperlink = new Hyperlink(); hyperlink.Inlines.Add(new Run { Text = (paragraph.Inlines.Count > 0 ? " via @" : "via @"), FontWeight = FontWeights.Normal }); hyperlink.Inlines.Add(new Run { Text = viaBot.Username }); hyperlink.UnderlineStyle = UnderlineStyle.None; hyperlink.Foreground = light ? new SolidColorBrush(Colors.White) : paragraph.Foreground; hyperlink.Click += (s, args) => ViaBot_Click(message); if (paragraph.Inlines.Count > 0 && !forward) { paragraph.Inlines.Insert(1, hyperlink); } else { paragraph.Inlines.Add(hyperlink); } } if (paragraph.Inlines.Count > 0) { if (admin != null && shown && !message.IsOutgoing && message.Delegate != null && message.Delegate.IsAdmin(message.SenderUserId)) { admin.Visibility = Visibility.Visible; } else if (admin != null) { admin.Visibility = Visibility.Collapsed; } paragraph.Inlines.Add(new Run { Text = " " }); paragraph.Visibility = Visibility.Visible; parent.Visibility = Visibility.Visible; } else { if (admin != null) { admin.Visibility = Visibility.Collapsed; } paragraph.Visibility = Visibility.Collapsed; parent.Visibility = message.ReplyToMessageId != 0 ? Visibility.Visible : Visibility.Collapsed; } }