public void DeleteReply() { //var message31 = Reply as TLMessage31; //if (message31 != null) //{ // if (message31.ReplyMarkup != null) // { // message31.ReplyMarkup.HasResponse = true; // } //} if (_previousReply != null) { Reply = _previousReply; _previousReply = null; } else { //if (_replyMarkupMessage == Reply) //{ // SetReplyMarkup(null); //} Reply = null; } }
private void SaveReply() { if (Reply != null && !IsWebPagePreview(Reply)) { _previousReply = Reply; } }
public Telegram.Api.WindowsPhone.Tuple <TLDecryptedMessageBase, TLObject> GetDecryptedMessageAndObject(TLDecryptedMessageBase message, TLEncryptedChat chat) { TLDecryptedMessageBase decryptedMessage; TLObject decryptedObject; var encryptedChat17 = chat as TLEncryptedChat17; if (encryptedChat17 != null) { var message17 = message as TLDecryptedMessage17; if (message17 == null) { return(null); } var inSeqNo = message17.InSeqNo; var outSeqNo = message17.OutSeqNo; var decryptedMessageLayer17 = TLUtils.GetDecryptedMessageLayer(encryptedChat17.Layer, inSeqNo, outSeqNo, message); decryptedMessage = message; decryptedObject = decryptedMessageLayer17; } else { var decryptedMessage8 = message; decryptedMessage = decryptedMessage8; decryptedObject = decryptedMessage; } return(new Telegram.Api.WindowsPhone.Tuple <TLDecryptedMessageBase, TLObject>(decryptedMessage, decryptedObject)); }
private void CreateGroupedItems(TLDecryptedMessageBase currentItem) { var message73 = currentItem as TLDecryptedMessage73; if (message73 != null && message73.GroupedId != null) { var firstItem = GroupedItems.FirstOrDefault() as TLDecryptedMessage73; if (firstItem == null || (firstItem.GroupedId != null && firstItem.GroupedId.Value != message73.GroupedId.Value)) { var items = new List <TLDecryptedMessageBase>(); for (var i = _items.Count - 1; i >= 0; i--) { var item = _items[i] as TLDecryptedMessage73; if (item != null && item.GroupedId != null && item.GroupedId.Value == message73.GroupedId.Value) { items.Add(item); } } GroupedItems.IsNotifying = false; GroupedItems.Clear(); if (items.Count > 1) { foreach (var item in items) { GroupedItems.Add(item); } } GroupedItems.IsNotifying = true; GroupedItems.Refresh(); var view = GetView() as DecryptedImageViewerView; if (view != null) { view.ScrollTo(currentItem, 0.0); } } else if (firstItem.GroupedId != null && firstItem.GroupedId.Value == message73.GroupedId.Value) { var view = GetView() as DecryptedImageViewerView; if (view != null) { view.ScrollTo(currentItem, 0.0); } } else { GroupedItems.Clear(); } } else { GroupedItems.Clear(); } }
private void HighlightMessage(TLDecryptedMessageBase message) { message.IsHighlighted = true; BeginOnUIThread(TimeSpan.FromSeconds(2.0), () => { message.IsHighlighted = false; }); }
private void SetBackgroundAndBorder(TLDecryptedMessageBase messageCommon) { var isLightTheme = (Visibility)Application.Current.Resources["PhoneLightThemeVisibility"] == Visibility.Visible; var messageService = messageCommon as TLDecryptedMessageService; var sticker = messageCommon != null && messageCommon.IsSticker(); var output = GetOutput(messageCommon); Brush border; if (messageService != null) { border = (Brush)Resources["ServiceMessageBorderBrush"]; } else if (sticker) { border = new SolidColorBrush(Colors.Transparent); } else { border = isLightTheme ? (output ? (Brush)Resources["OutputBorderBrushLight"] : (Brush)Resources["InputBorderBrushLight"]) : (output ? (Brush)Resources["OutputBorderBrushDark"] : (Brush)Resources["InputBorderBrushDark"]); } Brush background; if (messageService != null) { background = (Brush)Resources["ServiceMessageBackgroundBrush"]; } else if (sticker) { background = new SolidColorBrush(Colors.Transparent); } else { background = isLightTheme ? (output ? (Brush)Resources["OutputBackgroundBrushLight"] : (Brush)Resources["InputBackgroundBrushLight"]) : (output ? (Brush)Resources["OutputBackgroundBrushDark"] : (Brush)Resources["InputBackgroundBrushDark"]); } Corner.Fill = background; Corner.Stroke = border; CornerBorder.BorderBrush = border; MainBorder.Background = background; MainBorder.BorderBrush = border; MorePanel.Background = background; Header.Background = background; }
public override TLObject FromBytes(byte[] bytes, ref int position) { bytes.ThrowExceptionIfIncorrect(ref position, Signature); Layer = GetObject <TLInt>(bytes, ref position); Message = GetObject <TLDecryptedMessageBase>(bytes, ref position); return(this); }
public override TLObject FromBytes(byte[] bytes, ref int position) { bytes.ThrowExceptionIfIncorrect(ref position, Signature); System.Diagnostics.Debug.WriteLine(" >>TLDecryptedMessageLayer.FromBytes layer={0} message=[{1}]", Layer, Message); Layer = GetObject <TLInt>(bytes, ref position); Message = GetObject <TLDecryptedMessageBase>(bytes, ref position); return(this); }
private static bool IsWebPagePreview(TLDecryptedMessageBase message) { var messagesContainer = message as TLDecryptedMessagesContainter; if (messagesContainer != null) { return(messagesContainer.WebPageMedia != null); } return(false); }
public void ScrollTo(TLDecryptedMessageBase currentItem, double duration) { #if !NO_RIBBON var index = ViewModel.GroupedItems.IndexOf(currentItem); if (index != -1) { _index = index; _duration = duration; Ribbon.LayoutUpdated += Ribbon_LayoutUpdated; } #endif }
private void RestoreReply() { if (_previousReply != null) { Reply = _previousReply; _previousReply = null; } else { if (IsWebPagePreview(Reply)) { Reply = null; } } }
private static void SaveVideoAsync(TLDecryptedMessageMediaBase mediaBase) { var mediaDocument = mediaBase as TLDecryptedMessageMediaDocument45; if (mediaDocument != null && TLDecryptedMessageBase.IsVideo(mediaDocument)) { var fileLocation = mediaDocument.File as TLEncryptedFile; if (fileLocation == null) { return; } var fileName = String.Format("{0}_{1}_{2}.mp4", fileLocation.Id, fileLocation.DCId, fileLocation.AccessHash); Execute.BeginOnThreadPool(() => ImageViewerViewModel.SaveVideo(fileName)); return; } var mediaVideo = mediaBase as TLDecryptedMessageMediaVideo; if (mediaVideo != null) { var fileLocation = mediaVideo.File as TLEncryptedFile; if (fileLocation == null) { return; } var fileName = String.Format("{0}_{1}_{2}.mp4", fileLocation.Id, fileLocation.DCId, fileLocation.AccessHash); Execute.BeginOnThreadPool(() => ImageViewerViewModel.SaveVideo(fileName)); return; } }
public void SetControlContent(int column, TLDecryptedMessageBase content) { var selector = (DecryptedImageViewerTemplateSelector)Resources["Selector"]; if (Grid.GetColumn(Item1) == column) { Control1.Content = content; Control1.ContentTemplate = (DataTemplate)selector.Convert(content, null, null, null); } else if (Grid.GetColumn(Item2) == column) { Control2.Content = content; Control2.ContentTemplate = (DataTemplate)selector.Convert(content, null, null, null); } else if (Grid.GetColumn(Item3) == column) { Control3.Content = content; Control3.ContentTemplate = (DataTemplate)selector.Convert(content, null, null, null); } }
public void ProcessScroll() { // replies if (_previousScrollPosition != null) { RaiseScrollTo(new ScrollToEventArgs(_previousScrollPosition)); _previousScrollPosition = null; return; } // unread separator //if (!_isFirstSliceLoaded) //{ // Items.Clear(); // var messages = CacheService.GetHistory(TLUtils.InputPeerToPeer(Peer, StateService.CurrentUserId)); // ProcessRepliesAndAudio(messages); // const int maxCount = 5; // for (var i = 0; i < messages.Count && i < maxCount; i++) // { // Items.Add(messages[i]); // } // //wait to complete animation for hiding ScrollToBottomButton // BeginOnUIThread(TimeSpan.FromSeconds(0.35), () => // { // for (var i = maxCount; i < messages.Count; i++) // { // Items.Add(messages[i]); // } // _isFirstSliceLoaded = true; // UpdateItemsAsync(0, 0, Constants.FileSliceLength, false); // }); //} //else { RaiseScrollToBottom(); } }
public void ReplyMessage(TLDecryptedMessageBase message) { if (message == null) { return; } if (message.RandomIndex == 0) { return; } //var message31 = message as TLMessage31; //if (message31 != null && !message31.Out.Value) //{ // var fromId = message31.FromId; // var user = CacheService.GetUser(fromId) as TLUser; // if (user != null && user.IsBot) // { // SetReplyMarkup(message31); // } //} Reply = message; }
public void OpenReply(TLDecryptedMessageBase message) { if (message == null) { return; } var reply = message.Reply; if (reply == null) { return; } if (reply.RandomIndex == 0) { return; } for (var i = 0; i < Items.Count; i++) { if (Items[i].RandomIndex == reply.RandomIndex) { RaiseScrollTo(new ScrollToEventArgs(Items[i])); //waiting ScrollTo to complete BeginOnUIThread(TimeSpan.FromSeconds(0.1), () => { HighlightMessage(Items[i]); _previousScrollPosition = message; ShowScrollToBottomButton(); }); return; } } }
private DataTemplate GenerateCommonMessageTemplate(TLDecryptedMessageBase message) { if (message != null) { if (message.IsSticker()) { if (message.Out.Value) { return(UserStickerTemplate ?? EmptyMessageTemplate); } return(FriendStickerTemplate ?? EmptyMessageTemplate); } if (message.Out.Value) { return(UserMessageTemplate ?? EmptyMessageTemplate); } return(FriendMessageTemplate ?? EmptyMessageTemplate); } return(EmptyMessageTemplate); }
public static string Convert(TLDecryptedMessageBase value, bool showContent) { var serviceMessage = value as TLDecryptedMessageService; if (serviceMessage != null) { if (serviceMessage.Action is TLDecryptedMessageActionEmpty) { return(AppResources.SecretChatCreated); } return(DecryptedServiceMessageToTextConverter.Convert(serviceMessage)); } var message = value as TLDecryptedMessage; if (message != null) { var canSendString = string.Empty; if (message.Status == MessageStatus.Failed) { canSendString = string.Format("{0}: ", AppResources.SendingFailed); } var message73 = message as TLDecryptedMessage73; if (message73 != null && message73.GroupedId != null) { return(canSendString + AppResources.Album); } if (message.Media != null) { var messageMediaWebPage = message.Media as TLDecryptedMessageMediaWebPage; if (messageMediaWebPage != null) { return(canSendString + messageMediaWebPage.Url); } if (message.Media is TLDecryptedMessageMediaDocument) { if (message.IsVoice()) { return(canSendString + AppResources.VoiceMessage); } if (message.IsVideo()) { return(canSendString + AppResources.Video); } if (message.IsGif()) { return(canSendString + AppResources.Gif); } return(canSendString + AppResources.Document); } if (message.Media is TLDecryptedMessageMediaContact) { return(canSendString + AppResources.Contact); } if (message.Media is TLDecryptedMessageMediaGeoPoint) { return(canSendString + AppResources.GeoPoint); } if (message.Media is TLDecryptedMessageMediaPhoto) { return(canSendString + AppResources.Photo); } if (message.Media is TLDecryptedMessageMediaVideo) { return(canSendString + AppResources.Video); } if (message.Media is TLDecryptedMessageMediaAudio) { return(canSendString + AppResources.Audio); } if (message.Media is TLDecryptedMessageMediaExternalDocument) { if (message.IsSticker()) { return(canSendString + AppResources.Sticker); } return(canSendString + AppResources.Document); } } if (message.Message != null) { if (showContent) { var str = message.Message != null?message.Message.ToString() : string.Empty; return(canSendString + str.Substring(0, Math.Min(str.Length, 40)).Replace("\r\n", "\n").Replace('\n', ' ')); } return(canSendString + AppResources.Message); } } return(null); }
private static bool GetIsChannelMessage(TLDecryptedMessageBase messageCommon) { return(false); }
private void SetFooter(TLDecryptedMessageBase messageBase) { var isLightTheme = (Visibility)Application.Current.Resources["PhoneLightThemeVisibility"] == Visibility.Visible; var message = messageBase as TLDecryptedMessage; var service = messageBase as TLDecryptedMessageService; var output = GetOutput(messageBase); var isGroupedMedia = message != null && message.Media is TLDecryptedMessageMediaGroup; var isPhoto = message != null && message.Media is TLDecryptedMessageMediaPhoto; var isVideo = message != null && message.IsVideo(); var isGeoPoint = message != null && message.Media is TLDecryptedMessageMediaGeoPoint; var isVenue = message != null && message.Media is TLDecryptedMessageMediaVenue; var isDocument = message != null && IsDocument(message); var isVoice = message != null && message.IsVoice(); var isSticker = message != null && message.IsSticker(); var isWebPage = message != null && message.Media is TLDecryptedMessageMediaWebPage; var isEmptyMedia = message != null && (message.Media == null || message.Media is TLDecryptedMessageMediaEmpty); //var isGif = message != null && message.IsGif(); var isShortFooter = IsShortFooter(message, isGroupedMedia, isPhoto, isVideo, isGeoPoint, isDocument, isVoice, isSticker, isWebPage, isEmptyMedia); Brush background = new SolidColorBrush(Colors.Transparent); if (service != null) { background = (Brush)Resources["ServiceMessageBackgroundBrush"]; } else if (!isSticker) { background = isLightTheme ? (output ? (Brush)Resources["OutputBackgroundBrushLight"] : (Brush)Resources["InputBackgroundBrushLight"]) : (output ? (Brush)Resources["OutputBackgroundBrushDark"] : (Brush)Resources["InputBackgroundBrushDark"]); } Brush footerForeground; if (isSticker) { footerForeground = isLightTheme ? (Brush)Resources["StickerFooterSubtleBrushLight"] : (Brush)Resources["StickerFooterSubtleBrushDark"]; } else if (isShortFooter && (isGroupedMedia || isPhoto || (isGeoPoint && !isVenue) || isVideo)) { footerForeground = new SolidColorBrush(Colors.White); } else { footerForeground = isLightTheme ? (output ? (Brush)Resources["OutputSubtleBrushLight"] : (Brush)Resources["InputSubtleBrushLight"]) : (output ? (Brush)Resources["OutputSubtleBrushDark"] : (Brush)Resources["InputSubtleBrushDark"]); } Brush footerBackground; if (isSticker) { footerBackground = isLightTheme ? (Brush)Resources["StickerFooterBackgroundBrushLight"] : (Brush)Resources["StickerFooterBackgroundBrushDark"]; } else if (isShortFooter && (isGroupedMedia || isPhoto || (isGeoPoint && !isVenue) || isVideo)) { footerBackground = new SolidColorBrush(Color.FromArgb(128, 0, 0, 0)); } else { footerBackground = new SolidColorBrush(Colors.Transparent); } FooterContent.Foreground = footerForeground; FooterContentGrid.Background = footerBackground; Footer.MaxWidth = message != null ? message.MediaWidth : 12.0 + 311.0 + 12.0; Status.Fill = footerForeground; //ViewsIcon.Stroke = footerForeground; if (messageBase != null && messageBase.Reply != null && (isGroupedMedia || isPhoto || isVideo)) { MediaContentControl.Margin = new Thickness(12.0, 3.0, 12.0, 0.0); } else { MediaContentControl.Margin = new Thickness(12.0, 0.0, 12.0, 0.0); } // setup message and media position //MessageGrid.Visibility = message != null && !TLString.IsNullOrEmpty(message.Message) || showAsServiceMessage // ? Visibility.Visible // : Visibility.Collapsed; //Panel.Children.Remove(MessageGrid); //Panel.Children.Remove(MediaGrid); //if (message != null && (message.Media is TLMessageMediaWebPage || message.Media is TLMessageMediaEmpty) || showAsServiceMessage) //{ // MessageGrid.Margin = new Thickness(0.0, 6.0, 0.0, 0.0); // MediaGrid.Margin = new Thickness(0.0, 0.0, 0.0, 0.0); // Panel.Children.Add(MessageGrid); // Panel.Children.Add(MediaGrid); //} //else //{ // MessageGrid.Margin = new Thickness(0.0, 0.0, 0.0, 0.0); // MediaGrid.Margin = new Thickness(0.0, 6.0, 0.0, 0.0); // Panel.Children.Add(MediaGrid); // Panel.Children.Add(MessageGrid); //} // setup footer position Panel.Children.Remove(Footer); MediaGrid.Children.Remove(Footer); MessageGrid.Children.Remove(Footer); if (service != null) { // remove footer } else if (!isShortFooter) { Footer.Margin = new Thickness(0.0, -1.0, 0.0, 0.0); Footer.Background = background; Footer.HorizontalAlignment = HorizontalAlignment.Stretch; Footer.VerticalAlignment = VerticalAlignment.Stretch; Panel.Children.Add(Footer); MessageGrid.Margin = new Thickness(0.0, 6.0, 0.0, 0.0); } else { if (isSticker) { Footer.Margin = new Thickness(0.0, -1.0, 0.0, 0.0); Footer.Background = new SolidColorBrush(Colors.Transparent); Footer.HorizontalAlignment = HorizontalAlignment.Right; Footer.VerticalAlignment = VerticalAlignment.Bottom; MediaGrid.Children.Add(Footer); MessageGrid.Margin = new Thickness(0.0, 0.0, 0.0, 0.0); } else if (isEmptyMedia) { Footer.Margin = new Thickness(0.0, -1.0, 0.0, -11.0); Footer.Background = new SolidColorBrush(Colors.Transparent); Footer.HorizontalAlignment = HorizontalAlignment.Stretch; Footer.VerticalAlignment = VerticalAlignment.Bottom; MessageGrid.Children.Add(Footer); MessageGrid.Margin = new Thickness(0.0, 6.0, 0.0, 11.0); } else if (isGroupedMedia || isPhoto || isGeoPoint || isVideo || isVoice || isDocument) { Footer.Margin = new Thickness(0.0, -1.0, 0.0, 0.0); Footer.Background = new SolidColorBrush(Colors.Transparent); Footer.HorizontalAlignment = HorizontalAlignment.Right; Footer.VerticalAlignment = VerticalAlignment.Bottom; MediaGrid.Children.Add(Footer); MessageGrid.Margin = new Thickness(0.0, 6.0, 0.0, 0.0); } else { Footer.Margin = new Thickness(0.0, -1.0, 0.0, 0.0); Footer.Background = background; Footer.HorizontalAlignment = HorizontalAlignment.Stretch; Footer.VerticalAlignment = VerticalAlignment.Stretch; Panel.Children.Add(Footer); MessageGrid.Margin = new Thickness(0.0, 6.0, 0.0, 0.0); } } if (message != null && (message.Media == null || message.Media is TLDecryptedMessageMediaEmpty)) { var messageDateTimeConverter = (IValueConverter)Application.Current.Resources["MessageDateTimeConverter"]; var dateText = messageDateTimeConverter.Convert(message.Date, null, null, null); var footerBuilder = new StringBuilder(); if (FlowDirection == FlowDirection.RightToLeft) { footerBuilder.Append("د"); } else { footerBuilder.Append("a"); } footerBuilder.Append("/ " + dateText); if (message.Out.Value) { footerBuilder.Append(" W"); } InputMessage.Footer = footerBuilder.ToString(); } else { InputMessage.Footer = string.Empty; } if (isVoice) { MediaContentControl.Foreground = footerForeground; } else { MediaContentControl.SetValue(Control.ForegroundProperty, DependencyProperty.UnsetValue); } }
private void UpdateBinding(TLDecryptedMessageBase messageBase) { var serviceMessage = messageBase as TLDecryptedMessageService; if (serviceMessage != null) { //SaveBinding(ref _fwdFromLabelTextBinding, FwdFromLabel, Run.TextProperty); SaveBinding(ref _inputMessageVisibilityBinding, InputMessage, TelegramRichTextBox.VisibilityProperty); SaveBinding(ref _inputMessageEntitiesBinding, InputMessage, TelegramRichTextBox.EntitiesProperty); SaveBinding(ref _inputMessageTextBinding, InputMessage, TelegramRichTextBox.TextProperty); SaveBinding(ref _mediaContentControlContentBinding, MediaContentControl, ContentControl.ContentProperty); SaveBinding(ref _mediaContentControlContentTemplateBinding, MediaContentControl, ContentControl.ContentTemplateProperty); SaveBinding(ref _viaBotNameBinding, ViaBotGrid, TextBlock.TextProperty); //SaveBinding(ref _authorBinding, AuthorLabel, TextBlock.TextProperty); //SaveBinding(ref _editLabelVisibilityBinding, EditLabel, TextBlock.VisibilityProperty); //SaveBinding(ref _commandsReplyMarkupBinding, Commands, CommandsControl.ReplyMarkupProperty); //System.Diagnostics.Debug.WriteLine("ClearMediaBinding id=" + messageBase.Id); _suppressFooterReplacement = true; ClearValue(MediaProperty); ClearValue(MediaCaptionProperty); _suppressFooterReplacement = false; //SaveBinding(ref _mediaBinding, this, MediaProperty); } var message = messageBase as TLDecryptedMessage; if (message != null) { var stopwatch = Stopwatch.StartNew(); RestoreBinding(ref _inputMessageVisibilityBinding, InputMessage, TelegramRichTextBox.VisibilityProperty); RestoreBinding(ref _inputMessageEntitiesBinding, InputMessage, TelegramRichTextBox.EntitiesProperty); RestoreBinding(ref _inputMessageTextBinding, InputMessage, TelegramRichTextBox.TextProperty); RestoreBinding(ref _mediaContentControlContentBinding, MediaContentControl, ContentControl.ContentProperty); RestoreBinding(ref _mediaContentControlContentTemplateBinding, MediaContentControl, ContentControl.ContentTemplateProperty); RestoreBinding(ref _viaBotNameBinding, ViaBotGrid, TextBlock.TextProperty); //RestoreBinding(ref _authorBinding, AuthorLabel, TextBlock.TextProperty); //RestoreBinding(ref _editLabelVisibilityBinding, EditLabel, TextBlock.VisibilityProperty); //RestoreBinding(ref _commandsReplyMarkupBinding, Commands, CommandsControl.ReplyMarkupProperty); //System.Diagnostics.Debug.WriteLine("RestoreBinding elapsed=" + stopwatch.Elapsed); _suppressFooterReplacement = true; var mediaBinding = new Binding("Media") { Source = message, Mode = BindingMode.OneWay }; SetBinding(MediaProperty, mediaBinding); var mediaCaption = message.Media as IMediaCaption; if (mediaCaption != null) { var mediaCaptionBinding = new Binding("Media.Caption") { Source = message, Mode = BindingMode.OneWay }; SetBinding(MediaCaptionProperty, mediaCaptionBinding); } _suppressFooterReplacement = false; } }
public static string Convert(TLDecryptedMessageBase value, bool showContent) { var serviceMessage = value as TLDecryptedMessageService; if (serviceMessage != null) { if (serviceMessage.Action is TLDecryptedMessageActionEmpty) { return(AppResources.SecretChatCreated); } return(DecryptedServiceMessageToTextConverter.Convert(serviceMessage)); } var message = value as TLDecryptedMessage; if (message != null) { var canSendString = string.Empty; if (message.Status == MessageStatus.Failed) { canSendString = string.Format("{0}: ", AppResources.SendingFailed); } if (message.Media != null) { if (message.Media is TLDecryptedMessageMediaDocument) { return(canSendString + AppResources.Document); } if (message.Media is TLDecryptedMessageMediaContact) { return(canSendString + AppResources.Contact); } if (message.Media is TLDecryptedMessageMediaGeoPoint) { return(canSendString + AppResources.GeoPoint); } if (message.Media is TLDecryptedMessageMediaPhoto) { return(canSendString + AppResources.Photo); } if (message.Media is TLDecryptedMessageMediaVideo) { return(canSendString + AppResources.Video); } if (message.Media is TLDecryptedMessageMediaAudio) { return(canSendString + AppResources.Audio); } if (message.Media is TLDecryptedMessageMediaExternalDocument) { if (message.IsSticker()) { return(canSendString + AppResources.Sticker); } return(canSendString + AppResources.Document); } } if (message.Message != null) { if (showContent) { return(canSendString + message.Message); } return(canSendString + AppResources.Message); } } return(null); }
private void DrawBubble(TLDecryptedMessageBase messageCommon) { var isLightTheme = (Visibility)Application.Current.Resources["PhoneLightThemeVisibility"] == Visibility.Visible; var message = messageCommon as TLDecryptedMessage; var messageService = messageCommon as TLDecryptedMessageService; var unreadSeparator = false;//messageService != null && messageService.Action is TLDecryptedMessageActionUnreadMessages; var sticker = message != null && message.IsSticker(); _isChannelMessage = GetIsChannelMessage(messageCommon); var output = GetOutput(messageCommon); var grouped = message != null && message.Media is TLDecryptedMessageMediaGroup; FromLabel.Visibility = Visibility.Collapsed; Tile.Visibility = Visibility.Collapsed; SetBackgroundAndBorder(messageCommon); Brush foreground; if (messageService != null) { foreground = (Brush)Resources["ServiceMessageForegroundBrush"]; } else { foreground = isLightTheme ? (output ? (Brush)Resources["OutputForegroundBrushLight"] : (Brush)Resources["InputForegroundBrushLight"]) : (output ? (Brush)Resources["OutputForegroundBrushDark"] : (Brush)Resources["InputForegroundBrushDark"]); } Brush footerForeground; if (!sticker) { footerForeground = isLightTheme ? (output ? (Brush)Resources["OutputSubtleBrushLight"] : (Brush)Resources["InputSubtleBrushLight"]) : (output ? (Brush)Resources["OutputSubtleBrushDark"] : (Brush)Resources["InputSubtleBrushDark"]); } else { footerForeground = isLightTheme ? (Brush)Resources["StickerFooterSubtleBrushLight"] : (Brush)Resources["StickerFooterSubtleBrushDark"]; } Brush footerBackground; if (!sticker) { footerBackground = new SolidColorBrush(Colors.Transparent); } else { footerBackground = isLightTheme ? (Brush)Resources["StickerFooterBackgroundBrushLight"] : (Brush)Resources["StickerFooterBackgroundBrushDark"]; } Foreground = foreground; InputMessage.SetForeground(foreground); var beforeLastGridLength = output && messageService == null ? new GridLength(1.0, GridUnitType.Star) : GridLength.Auto; var lastGridLength = output && messageService == null ? GridLength.Auto : new GridLength(1.0, GridUnitType.Star); var bubbleGridColumn = output && messageService == null ? 4 : 3; var cornerGridColumn = output && messageService == null ? 5 : 2; Corner.Margin = output ? new Thickness(-1.0, 12.0, 0.0, 0.0) : new Thickness(0.0, 12.0, -1.0, 0.0); Corner.HorizontalAlignment = output ? HorizontalAlignment.Left : HorizontalAlignment.Right; PathScaleTransform.ScaleX = output ? -1.0 : 1.0; Corner.Visibility = messageService != null ? Visibility.Collapsed : Visibility.Visible; CornerBorder.Visibility = messageService != null ? Visibility.Collapsed : Visibility.Visible; if (unreadSeparator) { MainBorder.Margin = new Thickness(-18.0, 0.0, -18.0, 6.0); MainBorder.HorizontalAlignment = HorizontalAlignment.Stretch; Panel.HorizontalAlignment = HorizontalAlignment.Center; } else if (messageService != null) { MainBorder.Margin = new Thickness(0.0, 0.0, 0.0, 6.0); MainBorder.HorizontalAlignment = HorizontalAlignment.Center; Panel.HorizontalAlignment = HorizontalAlignment.Center; } else { MainBorder.Margin = new Thickness(0.0, 0.0, 0.0, 6.0); MainBorder.HorizontalAlignment = HorizontalAlignment.Left; Panel.HorizontalAlignment = HorizontalAlignment.Left; } Grid.SetColumnSpan(MainBorder, messageService != null ? 2 : 1); InputMessage.TextAlignment = messageService != null ? TextAlignment.Center : TextAlignment.Left; MainBorder.BorderThickness = output ? new Thickness(1.0, 1.0, 0.0, 1.0) : new Thickness(0.0, 1.0, 1.0, 1.0); CornerBorder.BorderThickness = output ? new Thickness(1.0, 0.0, 0.0, 0.0) : new Thickness(0.0, 0.0, 1.0, 0.0); BeforeLastColumn.Width = beforeLastGridLength; LastColumn.Width = lastGridLength; Grid.SetColumn(MainBorder, bubbleGridColumn); Grid.SetColumn(Corner, cornerGridColumn); Grid.SetColumn(CornerBorder, cornerGridColumn); Header.MaxWidth = messageCommon != null ? messageCommon.MediaWidth : 12.0 + 311.0 + 12.0; //FwdFromGrid.Visibility = Visibility.Collapsed; var message45 = message as TLDecryptedMessage45; ViaBotGrid.Visibility = message45 != null && !TLString.IsNullOrEmpty(message45.ViaBotName) ? Visibility.Visible : Visibility.Collapsed; ReplyContent.Visibility = message != null ? message.ReplyVisibility : Visibility.Collapsed; if (FromLabel.Visibility == Visibility.Visible //|| FwdFromGrid.Visibility == Visibility.Visible || ViaBotGrid.Visibility == Visibility.Visible || ReplyContent.Visibility == Visibility.Visible) { Header.Visibility = Visibility.Visible; } else { Header.Visibility = Visibility.Collapsed; } if (FromLabel.Visibility == Visibility.Visible //&& FwdFromGrid.Visibility == Visibility.Collapsed && ViaBotGrid.Visibility == Visibility.Collapsed && ReplyContent.Visibility == Visibility.Collapsed && message != null && !TLString.IsNullOrEmpty(message.Message)) { FromLabel.Margin = new Thickness(0.0, 2.0, 0.0, -4.0); } else if (FromLabel.Visibility == Visibility.Visible //&& FwdFromGrid.Visibility == Visibility.Collapsed && ViaBotGrid.Visibility == Visibility.Collapsed && message != null && message.ReplyInfo != null) { FromLabel.Margin = new Thickness(0.0, 2.0, 0.0, 6.0); } else { FromLabel.Margin = new Thickness(0.0, 2.0, 0.0, 0.0); } CaptionPanel.Children.Remove(ViaBotGrid); FromLabelPanel.Children.Remove(ViaBotGrid); if (FromLabel.Visibility == Visibility.Visible && ViaBotGrid.Visibility == Visibility.Visible) { ViaBotGrid.Margin = FromLabel.Margin; FromLabel.Margin = new Thickness(FromLabel.Margin.Left, FromLabel.Margin.Top, FromLabel.Margin.Right + 6.0, FromLabel.Margin.Bottom); FromLabelPanel.Children.Add(ViaBotGrid); } else { ViaBotGrid.Margin = new Thickness(0.0, -6.0, 0.0, 0.0); CaptionPanel.Children.Insert(2, ViaBotGrid); } Status.Visibility = output? Visibility.Visible : Visibility.Collapsed; MessageGrid.MaxWidth = messageCommon != null ? messageCommon.MediaWidth : 12.0 + 311.0 + 12.0; Panel.Children.Remove(Header); MainItemGrid.Children.Remove(Header); if (messageService != null) { MessageGrid.Margin = new Thickness(0.0, 2.0, 0.0, 7.0); } else if (sticker) { ReplyContent.Foreground = footerForeground; ViaBotGrid.Foreground = new SolidColorBrush(Colors.White); Header.Background = footerBackground; Grid.SetRow(Header, 1); Grid.SetColumn(Header, output ? bubbleGridColumn - 1 : bubbleGridColumn + 1); Header.HorizontalAlignment = output ? HorizontalAlignment.Right : HorizontalAlignment.Left; Header.Margin = new Thickness(6.0); MainItemGrid.Children.Add(Header); } else { ReplyContent.Foreground = foreground; ViaBotGrid.Foreground = (Brush)Application.Current.Resources["TelegramBadgeAccentBrush"]; Header.SetValue(Grid.RowProperty, DependencyProperty.UnsetValue); Header.SetValue(Grid.ColumnProperty, DependencyProperty.UnsetValue); Header.HorizontalAlignment = HorizontalAlignment.Left; Header.Margin = new Thickness(0.0, 0.0, 0.0, -6.0); Panel.Children.Insert(0, Header); } SetFooter(messageCommon); }
private bool GetOutput(TLDecryptedMessageBase message) { return(message != null && message.Out.Value && !_isChannelMessage); }
public MessagesRemovedEventArgs(TLDialogBase dialog, TLDecryptedMessageBase message) { Dialog = dialog; DecryptedMessage = message; }
public void Handle(TLDecryptedMessageBase decryptedMessage) { if (Chat != null && decryptedMessage.ChatId.Value == Chat.Id.Value) { System.Diagnostics.Debug.WriteLine("Handle random_id={0} date={1} qts={2}", decryptedMessage.RandomId, decryptedMessage.Date, decryptedMessage.Qts); var serviceMessage = decryptedMessage as TLDecryptedMessageService; if (serviceMessage != null) { var action = serviceMessage.Action; var typingAction = action as TLDecryptedMessageActionTyping; if (typingAction != null) { var cancelAction = typingAction.Action as TLSendMessageCancelAction; if (cancelAction != null) { InputTypingManager.RemoveTypingUser(With.Index); } else { InputTypingManager.AddTypingUser(With.Index, typingAction.Action); } } var setMessageTTLAction = action as TLDecryptedMessageActionSetMessageTTL; if (setMessageTTLAction != null) { Chat.MessageTTL = setMessageTTLAction.TTLSeconds; } var flushHistoryAction = action as TLDecryptedMessageActionFlushHistory; if (flushHistoryAction != null) { Execute.BeginOnUIThread(() => Items.Clear()); CacheService.ClearDecryptedHistoryAsync(Chat.Id); } var readMessagesAction = action as TLDecryptedMessageActionReadMessages; if (readMessagesAction != null) { Execute.BeginOnUIThread(() => { foreach (var randomId in readMessagesAction.RandomIds) { foreach (var item in UngroupEnumerator(Items)) { if (item.RandomId.Value == randomId.Value) { item.Status = MessageStatus.Read; if (item.TTL != null && item.TTL.Value > 0) { item.DeleteDate = new TLLong(DateTime.Now.Ticks + Chat.MessageTTL.Value * TimeSpan.TicksPerSecond); } var decryptedMessage17 = item as TLDecryptedMessage17; if (decryptedMessage17 != null) { var decryptedMediaPhoto = decryptedMessage17.Media as TLDecryptedMessageMediaPhoto; if (decryptedMediaPhoto != null) { if (decryptedMediaPhoto.TTLParams == null) { var ttlParams = new TTLParams(); ttlParams.IsStarted = true; ttlParams.Total = decryptedMessage17.TTL.Value; ttlParams.StartTime = DateTime.Now; ttlParams.Out = decryptedMessage17.Out.Value; decryptedMediaPhoto.TTLParams = ttlParams; } } var decryptedMediaVideo17 = decryptedMessage17.Media as TLDecryptedMessageMediaVideo17; if (decryptedMediaVideo17 != null) { if (decryptedMediaVideo17.TTLParams == null) { var ttlParams = new TTLParams(); ttlParams.IsStarted = true; ttlParams.Total = decryptedMessage17.TTL.Value; ttlParams.StartTime = DateTime.Now; ttlParams.Out = decryptedMessage17.Out.Value; decryptedMediaVideo17.TTLParams = ttlParams; } } var decryptedMediaAudio17 = decryptedMessage17.Media as TLDecryptedMessageMediaAudio17; if (decryptedMediaAudio17 != null) { if (decryptedMediaAudio17.TTLParams == null) { var ttlParams = new TTLParams(); ttlParams.IsStarted = true; ttlParams.Total = decryptedMessage17.TTL.Value; ttlParams.StartTime = DateTime.Now; ttlParams.Out = decryptedMessage17.Out.Value; decryptedMediaAudio17.TTLParams = ttlParams; } } var decryptedMediaDocument45 = decryptedMessage17.Media as TLDecryptedMessageMediaDocument45; if (decryptedMediaDocument45 != null && (decryptedMessage17.IsVoice() || decryptedMessage17.IsVideo())) { if (decryptedMediaDocument45.TTLParams == null) { var ttlParams = new TTLParams(); ttlParams.IsStarted = true; ttlParams.Total = decryptedMessage17.TTL.Value; ttlParams.StartTime = DateTime.Now; ttlParams.Out = decryptedMessage17.Out.Value; decryptedMediaDocument45.TTLParams = ttlParams; } var message45 = decryptedMessage17 as TLDecryptedMessage45; if (message45 != null) { message45.SetListened(); } decryptedMediaDocument45.NotListened = false; decryptedMediaDocument45.NotifyOfPropertyChange(() => decryptedMediaDocument45.NotListened); } } item.NotifyOfPropertyChange(() => item.Status); break; } } } }); } var deleteMessagesAction = action as TLDecryptedMessageActionDeleteMessages; if (deleteMessagesAction != null) { Execute.BeginOnUIThread(() => { var group = new Dictionary <long, TLDecryptedMessageMediaGroup>(); foreach (var randomId in deleteMessagesAction.RandomIds) { for (var i = 0; i < Items.Count; i++) { var groupedMessage = false; var message73 = Items[i] as TLDecryptedMessage73; if (message73 != null && message73.GroupedId != null) { var mediaGroup = message73.Media as TLDecryptedMessageMediaGroup; if (mediaGroup != null) { groupedMessage = true; for (var k = 0; k < mediaGroup.Group.Count; k++) { if (mediaGroup.Group[k].RandomId.Value == randomId.Value) { mediaGroup.Group.RemoveAt(k); if (mediaGroup.Group.Count == 0) { Items.Remove(message73); } else { group[message73.GroupedId.Value] = mediaGroup; } break; } } } } if (!groupedMessage && Items[i].RandomId.Value == randomId.Value) { Items.RemoveAt(i); break; } } } foreach (var mediaGroup in group.Values) { mediaGroup.RaiseCalculate(); } CacheService.DeleteDecryptedMessages(deleteMessagesAction.RandomIds); }); } } if (!TLUtils.IsDisplayedDecryptedMessage(decryptedMessage)) { return; } ProcessMessages(new List <TLDecryptedMessageBase> { decryptedMessage }); Execute.OnUIThread(() => { var addedGrouped = false; var message73 = decryptedMessage as TLDecryptedMessage73; if (message73 != null && message73.GroupedId != null && Items.Count > 0) { var previousMessage = Items[0] as TLDecryptedMessage73; if (previousMessage != null && previousMessage.GroupedId != null && previousMessage.GroupedId.Value == message73.GroupedId.Value) { Items.RemoveAt(0); var items = new List <TLDecryptedMessageBase>(); var mediaGroup = previousMessage.Media as TLDecryptedMessageMediaGroup; if (mediaGroup != null) { items.Add(message73); for (var i = mediaGroup.Group.Count - 1; i >= 0; i--) { items.Add(mediaGroup.Group[i]); } } else { items.Add(message73); items.Add(previousMessage); } ProcessGroupedMessages(items); for (var j = 0; j < items.Count; j++) { InsertMessageInOrder(items[j]); } addedGrouped = true; } } var position = -1; if (!addedGrouped) { position = InsertMessageInOrder(decryptedMessage); System.Diagnostics.Debug.WriteLine("Handle.Insert random_id={0} date={1} position={2}", decryptedMessage.RandomId, decryptedMessage.Date, position); } else { position = 0; } NotifyOfPropertyChange(() => DescriptionVisibility); if (position != -1) { ReadMessages(decryptedMessage); if (decryptedMessage is TLDecryptedMessage) { InputTypingManager.RemoveTypingUser(With.Index); } } }); } }
public TopMessageUpdatedEventArgs(TLDialogBase dialog, TLDecryptedMessageBase message) { Dialog = dialog; DecryptedMessage = message; }
public void Handle(TLDecryptedMessageBase decryptedMessage) { if (Chat != null && decryptedMessage.ChatId.Value == Chat.Id.Value) { var serviceMessage = decryptedMessage as TLDecryptedMessageService; if (serviceMessage != null) { var action = serviceMessage.Action; var setMessageTTLAction = action as TLDecryptedMessageActionSetMessageTTL; if (setMessageTTLAction != null) { Chat.MessageTTL = setMessageTTLAction.TTLSeconds; } var flushHistoryAction = action as TLDecryptedMessageActionFlushHistory; if (flushHistoryAction != null) { Execute.BeginOnUIThread(() => Items.Clear()); CacheService.ClearDecryptedHistoryAsync(Chat.Id); } var readMessagesAction = action as TLDecryptedMessageActionReadMessages; if (readMessagesAction != null) { Execute.BeginOnUIThread(() => { foreach (var randomId in readMessagesAction.RandomIds) { foreach (var item in Items) { if (item.RandomId.Value == randomId.Value) { item.Status = MessageStatus.Read; if (item.TTL != null && item.TTL.Value > 0) { item.DeleteDate = new TLLong(DateTime.Now.Ticks + Chat.MessageTTL.Value * TimeSpan.TicksPerSecond); } var decryptedMessage17 = item as TLDecryptedMessage17; if (decryptedMessage17 != null) { var decryptedMediaPhoto = decryptedMessage17.Media as TLDecryptedMessageMediaPhoto; if (decryptedMediaPhoto != null) { if (decryptedMediaPhoto.TTLParams == null) { var ttlParams = new TTLParams(); ttlParams.IsStarted = true; ttlParams.Total = decryptedMessage17.TTL.Value; ttlParams.StartTime = DateTime.Now; ttlParams.Out = decryptedMessage17.Out.Value; decryptedMediaPhoto.TTLParams = ttlParams; } } var decryptedMediaVideo17 = decryptedMessage17.Media as TLDecryptedMessageMediaVideo17; if (decryptedMediaVideo17 != null) { if (decryptedMediaVideo17.TTLParams == null) { var ttlParams = new TTLParams(); ttlParams.IsStarted = true; ttlParams.Total = decryptedMessage17.TTL.Value; ttlParams.StartTime = DateTime.Now; ttlParams.Out = decryptedMessage17.Out.Value; decryptedMediaVideo17.TTLParams = ttlParams; } } var decryptedMediaAudio17 = decryptedMessage17.Media as TLDecryptedMessageMediaAudio17; if (decryptedMediaAudio17 != null) { if (decryptedMediaAudio17.TTLParams == null) { var ttlParams = new TTLParams(); ttlParams.IsStarted = true; ttlParams.Total = decryptedMessage17.TTL.Value; ttlParams.StartTime = DateTime.Now; ttlParams.Out = decryptedMessage17.Out.Value; decryptedMediaAudio17.TTLParams = ttlParams; } } } item.NotifyOfPropertyChange(() => item.Status); break; } } } }); } var deleteMessagesAction = action as TLDecryptedMessageActionDeleteMessages; if (deleteMessagesAction != null) { Execute.BeginOnUIThread(() => { foreach (var randomId in deleteMessagesAction.RandomIds) { for (var i = 0; i < Items.Count; i++) { if (Items[i].RandomId.Value == randomId.Value) { Items.RemoveAt(i); break; } } } CacheService.DeleteDecryptedMessages(deleteMessagesAction.RandomIds); }); } } if (!TLUtils.IsDisplayedDecryptedMessage(decryptedMessage)) { return; } Execute.OnUIThread(() => { var position = InsertMessageInOrder(decryptedMessage); NotifyOfPropertyChange(() => DescriptionVisibility); if (position != -1) { ReadMessages(decryptedMessage); if (decryptedMessage is TLDecryptedMessage) { RemoveTypingUser(With.Index); } } }); } }