示例#1
0
        private string GetFromLabel(MessageViewModel message, string title)
        {
            if (!string.IsNullOrWhiteSpace(title))
            {
                return(title);
            }

            if (message.ProtoService.TryGetChat(message.Sender, out Chat senderChat))
            {
                return(message.ProtoService.GetTitle(senderChat));
            }
            else if (message.IsSaved())
            {
                var forward = message.ProtoService.GetTitle(message.ForwardInfo);
                if (forward != null)
                {
                    return(forward);
                }
            }

            if (message.ProtoService.TryGetUser(message.Sender, out User user))
            {
                return(user.GetFullName());
            }

            return(title ?? string.Empty);
        }
示例#2
0
        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;
            }
        }
示例#3
0
        //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;
            }
        }
示例#5
0
        private string UpdateStateIcon(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 = MessageTicksState.Failed;

                    // TODO:
                    return("\u00A0\u00A0failed"); // Failed
                }
                else if (message.SendingState is MessageSendingStatePending)
                {
                    UpdateTicks(null);

                    _ticksState = MessageTicksState.Pending;
                    return("\u00A0\u00A0\uE600"); // Pending
                }
                else if (message.Id <= maxId)
                {
                    UpdateTicks(true, _ticksState == MessageTicksState.Sent);

                    _ticksState = MessageTicksState.Read;
                    return(_container != null ? "\u00A0\u00A0\uE603" : "\u00A0\u00A0\uE601"); // Read
                }

                UpdateTicks(false, _ticksState == MessageTicksState.Pending);

                _ticksState = MessageTicksState.Sent;
                return(_container != null ? "\u00A0\u00A0\uE603" : "\u00A0\u00A0\uE602"); // Unread
            }

            UpdateTicks(null);

            _ticksState = MessageTicksState.None;
            return(string.Empty);
        }
示例#6
0
        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);
        }
示例#7
0
        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;
            }
        }