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)); }
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; } }
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; } }