예제 #1
0
        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;
            }
        }
예제 #2
0
 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();
            }
        }
예제 #5
0
 private void HighlightMessage(TLDecryptedMessageBase message)
 {
     message.IsHighlighted = true;
     BeginOnUIThread(TimeSpan.FromSeconds(2.0), () =>
     {
         message.IsHighlighted = false;
     });
 }
예제 #6
0
        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;
        }
예제 #7
0
        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);
        }
예제 #8
0
        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);
        }
예제 #9
0
        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
        }
예제 #11
0
 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);
            }
        }
예제 #14
0
        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();
            }
        }
예제 #15
0
        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;
        }
예제 #16
0
        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);
        }
예제 #19
0
 private static bool GetIsChannelMessage(TLDecryptedMessageBase messageCommon)
 {
     return(false);
 }
예제 #20
0
        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);
            }
        }
예제 #21
0
        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;
            }
        }
예제 #22
0
        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);
        }
예제 #23
0
        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);
        }
예제 #24
0
 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);
                        }
                    }
                });
            }
        }