示例#1
0
        public void SetCall(TLTuple <TLPhoneCallState, TLPhoneCallBase, TLUserBase, string> tuple)
        {
            if (_disposed)
            {
                return;
            }

            if (_state != tuple.Item1)
            {
                Debug.WriteLine("[{0:HH:mm:ss.fff}] State changed in app: " + tuple.Item1, DateTime.Now);

                _state             = tuple.Item1;
                StateLabel.Content = StateToLabel(tuple.Item1);

                if (tuple.Item1 == TLPhoneCallState.Established)
                {
                    SignalBarsLabel.Visibility = Visibility.Visible;
                    StartUpdatingCallDuration();

                    if (_emojis != null)
                    {
                        for (int i = 0; i < _emojis.Length; i++)
                        {
                            var imageLarge = FindName($"LargeEmoji{i}") as Image;
                            var source     = Emoji.BuildUri(_emojis[i]);

                            imageLarge.Source = new BitmapImage(new Uri(source));
                        }
                    }
                }
            }

            //if (tuple.Item2 is TLPhoneCallRequested call)
            //{
            //}

            if (tuple.Item3 is TLUser user)
            {
                //if (user.HasPhoto && user.Photo is TLUserProfilePhoto)
                //{
                //    Image.Source = DefaultPhotoConverter.Convert(user, true) as ImageSource;
                //    GrabPanel.Background = new SolidColorBrush(Colors.Transparent);
                //}
                //else
                {
                    Image.Source         = null;
                    GrabPanel.Background = PlaceholderHelper.GetBrush(user.Id);
                }

                FromLabel.Text        = user.FullName;
                DescriptionLabel.Text = string.Format(Strings.Resources.CallEmojiKeyTooltip, user.FirstName);
            }

            if (tuple.Item4.Length > 0)
            {
                _emojis = tuple.Item4.Split(' ');
            }
        }
        private void OnContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args)
        {
            if (args.InRecycleQueue)
            {
                return;
            }

            var content = args.ItemContainer.ContentTemplateRoot as Grid;
            var venue   = args.Item as Venue;

            var border = content.Children[0] as Border;
            var bitmap = border.Child as BitmapIcon;

            border.Background = PlaceholderHelper.GetBrush(venue.Id.GetHashCode());
            bitmap.UriSource  = new Uri(string.Format("https://ss3.4sqi.net/img/categories_v2/{0}_88.png", venue.Type));
        }
示例#3
0
        public void Update(Call call, DateTime started)
        {
            if (_disposed)
            {
                return;
            }

            _call    = call;
            _started = started;

            //if (_state != call.State)
            //{
            //    Debug.WriteLine("[{0:HH:mm:ss.fff}] State changed in app: " + tuple.Item1, DateTime.Now);

            //    _state = tuple.Item1;
            //    StateLabel.Content = StateToLabel(tuple.Item1);

            //    if (tuple.Item1 == TLPhoneCallState.Established)
            //    {
            //        SignalBarsLabel.Visibility = Visibility.Visible;
            //        StartUpdatingCallDuration();

            //        if (_emojis != null)
            //        {
            //            for (int i = 0; i < _emojis.Length; i++)
            //            {
            //                var imageLarge = FindName($"LargeEmoji{i}") as Image;
            //                var source = Emoji.BuildUri(_emojis[i]);

            //                imageLarge.Source = new BitmapImage(new Uri(source));
            //            }
            //        }
            //    }
            //}

            //if (tuple.Item2 is TLPhoneCallRequested call)
            //{
            //}

            var user = _cacheService.GetUser(call.UserId);

            if (user != null)
            {
                if (user.ProfilePhoto != null)
                {
                    var file = user.ProfilePhoto.Big;
                    if (file.Local.IsDownloadingCompleted)
                    {
                        Image.Source = new BitmapImage(new Uri("file:///" + file.Local.Path));
                        BackgroundPanel.Background = new SolidColorBrush(Colors.Transparent);
                    }
                    else if (file.Local.CanBeDownloaded && !file.Local.IsDownloadingActive)
                    {
                        Image.Source = null;
                        BackgroundPanel.Background = PlaceholderHelper.GetBrush(user.Id);

                        _protoService?.DownloadFile(file.Id, 1, 0);
                    }
                }
                else
                {
                    Image.Source = null;
                    BackgroundPanel.Background = PlaceholderHelper.GetBrush(user.Id);
                }

                FromLabel.Text        = user.GetFullName();
                DescriptionLabel.Text = string.Format(Strings.Resources.CallEmojiKeyTooltip, user.FirstName);
            }

            if (call.State is CallStateReady ready)
            {
                _emojis = ready.Emojis;

                for (int i = 0; i < ready.Emojis.Count; i++)
                {
                    var imageLarge = FindName($"LargeEmoji{i}") as Image;
                    var source     = Emoji.BuildUri(_emojis[i]);

                    imageLarge.Source = new BitmapImage(new Uri(source));
                }
            }

            switch (call.State)
            {
            case CallStatePending pending:
                if (call.IsOutgoing)
                {
                    ResetUI();
                }
                else
                {
                    Mute.Visibility = Visibility.Collapsed;

                    Close.Visibility = Visibility.Collapsed;
                    Close.Margin     = new Thickness();

                    Accept.Margin     = new Thickness(0, 0, 6, 0);
                    Accept.Visibility = Visibility.Visible;

                    Discard.Margin     = new Thickness(6, 0, 0, 0);
                    Discard.Visibility = Visibility.Visible;
                }
                break;

            case CallStateDiscarded discarded:
                if (call.IsOutgoing && discarded.Reason is CallDiscardReasonDeclined)
                {
                    Mute.Visibility = Visibility.Collapsed;

                    Close.Margin     = new Thickness(0, 0, 6, 0);
                    Close.Visibility = Visibility.Visible;

                    Accept.Margin     = new Thickness(6, 0, 0, 0);
                    Accept.Visibility = Visibility.Visible;

                    Discard.Visibility = Visibility.Collapsed;
                    Discard.Margin     = new Thickness();
                }
                break;

            default:
                ResetUI();
                break;
            }

            switch (call.State)
            {
            case CallStatePending pending:
                StateLabel.Content = call.IsOutgoing
                        ? pending.IsReceived
                        ? Strings.Resources.VoipRinging
                        : pending.IsCreated
                        ? Strings.Resources.VoipWaiting
                        : Strings.Resources.VoipRequesting
                        : Strings.Resources.VoipIncoming;
                break;

            case CallStateExchangingKeys exchangingKeys:
                StateLabel.Content = Strings.Resources.VoipExchangingKeys;
                break;

            case CallStateHangingUp hangingUp:
                StateLabel.Content = Strings.Resources.VoipHangingUp;
                break;

            case CallStateDiscarded discarded:
                StateLabel.Content = discarded.Reason is CallDiscardReasonDeclined
                        ? Strings.Resources.VoipBusy
                        : Strings.Resources.VoipCallEnded;
                break;
            }
        }
示例#4
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;
            }
        }