private DataTemplate GenerateServiceMessageTemplate(TLMessageBase message) { var serviceMessage = message as TLMessageService; if (serviceMessage == null) { return(EmptyMessageTemplate); } if (serviceMessage.Action is TLMessageActionAdminLogEvent adminLog) { if (adminLog.Event.Action is TLChannelAdminLogEventActionChangePhoto changePhotoAction) { if (changePhotoAction.NewPhoto is TLChatPhotoEmpty) { return(EventMessageTemplate); } return(EventMessagePhotoTemplate); } //else if (adminLog.Event.Action is TLChannelAdminLogEventActionEditMessage) //{ // return EditedTemplate; //} return(EventMessageTemplate); } else if (serviceMessage.Action is TLMessageActionChatEditPhoto) { return(ServiceMessagePhotoTemplate); } return(ServiceMessageTemplate); }
private string UpdateStateIcon(TLDraftMessageBase draft, TLMessageBase message, TLMessageState state) { if (draft is TLDraftMessage) { return(string.Empty); } if (message is TLMessage topMessage) { if (topMessage.IsOut && IsOut(ViewModel)) { switch (state) { case TLMessageState.Sending: return("\uE600"); case TLMessageState.Confirmed: return("\uE602"); case TLMessageState.Read: return("\uE601"); } } } return(string.Empty); }
protected override bool SkipMessage(TLMessageBase messageBase) { var message = messageBase as TLMessage; if (message == null) { return(true); } var mediaDocument = message.Media as TLMessageMediaDocument; if (mediaDocument == null) { return(true); } var document = mediaDocument.Document as TLDocument; if (document == null) { return(true); } if (message.IsSticker() || document.FileName.ToString().EndsWith(".webp", StringComparison.OrdinalIgnoreCase)) { return(true); } return(false); }
private void DeleteMessagesInternal(TLObject owner, TLMessageBase lastMessage, IList <TLMessageBase> messages) { var ids = new TLVector <TLInt>(); for (int i = 0; i < messages.Count; i++) { ids.Add(messages[i].Id); } // duplicate: deleting performed through updates CacheService.DeleteMessages(ids); BeginOnUIThread(() => { for (var i = 0; i < messages.Count; i++) { for (var j = 0; j < Items.Count; j++) { var dialog = Items[j] as TLDialog; if (dialog != null && dialog.TopMessage != null && dialog.TopMessage.Id.Value == messages[i].Index) { Items.RemoveAt(j); break; } } } }); EventAggregator.Publish(new DeleteMessagesEventArgs { Owner = owner, Messages = messages }); }
public Visual Push(int index, int group, TLMessageBase message) { if (_cache.Count > 0) { var border = _cache.Pop() as Border; var ellipse = border.Child as Ellipse; ellipse.Fill = Convert.Bubble(group); border.Tag = message; _inUse[index] = border; ////Headers.Children.Add(border); return(ElementCompositionPreview.GetElementVisual(ellipse)); } else { var ellipse = new Ellipse(); ellipse.Fill = Convert.Bubble(group); ellipse.Tag = group; var border = new Border(); border.Width = 32; border.Height = 32; border.HorizontalAlignment = HorizontalAlignment.Left; border.VerticalAlignment = VerticalAlignment.Top; border.Margin = new Thickness(12, 18, 0, 0); border.Child = ellipse; border.Tag = message; _inUse[index] = border; ////Headers.Children.Add(border); return(ElementCompositionPreview.GetElementVisual(ellipse)); } }
public async void DeleteMessages(TLMessageBase lastItem, IList <TLMessageBase> localMessages, IList <TLMessageBase> remoteMessages, bool revoke, Action <TLMessageBase, IList <TLMessageBase> > localCallback = null, Action <TLMessageBase, IList <TLMessageBase> > remoteCallback = null) { if (localMessages != null && localMessages.Count > 0) { localCallback?.Invoke(lastItem, localMessages); } if (remoteMessages != null && remoteMessages.Count > 0) { var messages = new TLVector <int>(remoteMessages.Select(x => x.Id).ToList()); Task <MTProtoResponse <TLMessagesAffectedMessages> > task; if (Peer is TLInputPeerChannel) { task = ProtoService.DeleteMessagesAsync(new TLInputChannel { ChannelId = ((TLInputPeerChannel)Peer).ChannelId, AccessHash = ((TLInputPeerChannel)Peer).AccessHash }, messages); } else { task = ProtoService.DeleteMessagesAsync(messages, revoke); } var response = await task; if (response.IsSucceeded) { remoteCallback?.Invoke(lastItem, remoteMessages); } } }
public void DeleteMessage(TLMessageBase message) { if (message == null) { return; } var messages = new List <TLMessageBase> { message }; var owner = CurrentItem as TLObject; if (CurrentItem is TLBroadcastChat) { DeleteMessagesInternal(owner, messages); return; } if ((message.Id == null || message.Id.Value == 0) && message.RandomIndex != 0) { DeleteMessagesInternal(owner, messages); return; } DialogDetailsViewModel.DeleteMessages(MTProtoService, null, null, messages, null, (result1, result2) => DeleteMessagesInternal(owner, result2)); }
private TLMessageBase GetNextMention(TLMessageBase currentMention, TLVector <TLMessageBase> mentions) { if (mentions == null) { return(null); } if (currentMention == null) { return(mentions.LastOrDefault()); } for (var i = mentions.Count - 1; i >= 0; i--) { if (mentions[i].Index == currentMention.Index) { if (i >= 1) { return(mentions[i - 1]); } break; } } if (mentions.Count > 0) { return(mentions.LastOrDefault()); } return(null); }
private void PreloadResultHistory(TLMessageBase message) { var maxId = message.Id; var offset = new TLInt(-10); var limit = new TLInt(Constants.MessagesSlice + 10); IList <TLMessageBase> resultHistory; if (_resultHistoryCache.TryGetValue(maxId.Value, out resultHistory)) { return; } var messageCommon = message as TLMessageCommon; if (messageCommon != null) { if (Peer is TLInputPeerChannel) { if (messageCommon.ToId is TLPeerChat) { var chat = CacheService.GetChat(messageCommon.ToId.Id); if (chat != null) { MTProtoService.GetHistoryAsync(Stopwatch.StartNew(), chat.ToInputPeer(), new TLPeerChat { Id = chat.Id }, false, new TLInt(0), offset, maxId, limit, result => { ProcessMessages(result.Messages); BeginOnUIThread(() => { _resultHistoryCache[maxId.Value] = result.Messages; }); }, error => BeginOnUIThread(() => { Execute.ShowDebugMessage("messages.getHistory error " + error); })); } return; } } } MTProtoService.GetHistoryAsync(Stopwatch.StartNew(), Peer, TLUtils.InputPeerToPeer(Peer, StateService.CurrentUserId), false, new TLInt(0), offset, maxId, limit, result => { ProcessMessages(result.Messages); BeginOnUIThread(() => { _resultHistoryCache[maxId.Value] = result.Messages; }); }, error => BeginOnUIThread(() => { Execute.ShowDebugMessage("messages.getHistory error " + error); })); }
private void SendContactInternal(TLMessageBase message) { var message25 = message as TLMessage25; if (message25 == null) { return; } var mediaContact = message25.Media as TLMessageMediaContact; if (mediaContact == null) { return; } var inputMediaContact = new TLInputMediaContact { FirstName = mediaContact.FirstName, LastName = mediaContact.LastName, PhoneNumber = mediaContact.PhoneNumber }; message25.InputMedia = inputMediaContact; ShellViewModel.SendMediaInternal(message25, MTProtoService, StateService, CacheService); }
private void SendGeoPointInternal(TLMessageBase message) { var message25 = message as TLMessage25; if (message25 == null) { return; } var mediaGeo = message25.Media as TLMessageMediaGeo; if (mediaGeo == null) { return; } var geoPoint = mediaGeo.Geo as TLGeoPoint; if (geoPoint == null) { return; } var inputMediaGeoPoint = new TLInputMediaGeoPoint { GeoPoint = new TLInputGeoPoint { Lat = geoPoint.Lat, Long = geoPoint.Long } }; message25.InputMedia = inputMediaGeoPoint; ShellViewModel.SendMediaInternal(message25, MTProtoService, StateService, CacheService); }
protected override bool SkipMessage(TLMessageBase messageBase) { var message = messageBase as TLMessage; if (message == null) { return(true); } var mediaDocument = message.Media as TLMessageMediaDocument; if (mediaDocument == null) { return(true); } var document = mediaDocument.Document as TLDocument22; if (document == null) { return(true); } var audioAttribute = document.Attributes.FirstOrDefault(x => x is TLDocumentAttributeAudio46) as TLDocumentAttributeAudio46; if (audioAttribute == null || audioAttribute.Voice) { return(true); } return(false); }
public void AddToStickers(TLMessageBase messageBase) { if (messageBase == null) { return; } var message = messageBase as TLMessage; if (message == null) { return; } var mediaDocument = message.Media as TLMessageMediaDocument; if (mediaDocument == null) { return; } var document = mediaDocument.Document as TLDocument22; if (document != null) { var inputStickerSet = document.StickerSet; if (inputStickerSet != null) { TelegramViewBase.NavigateToStickers(MTProtoService, StateService, inputStickerSet); } } }
private DataTemplate GenerateServiceMessageTemplate(TLMessageBase message) { var serviceMessage = message as TLMessageService; if (serviceMessage == null) { return(EmptyMessageTemplate); } if (serviceMessage.Action is TLMessageActionChatEditPhoto) { return(ServiceMessagePhotoTemplate); } else if (serviceMessage.Action is TLMessageActionHistoryClear) { return(EmptyMessageTemplate); } else if (serviceMessage.Action is TLMessageActionDate) { return(ServiceMessageLocalTemplate); } else if (serviceMessage.Action is TLMessageActionUnreadMessages) { //return ServiceMessageUnreadTemplate; return(ServiceMessageLocalTemplate); } else if (serviceMessage.Action is TLMessageActionPhoneCall) { return(serviceMessage.IsOut ? ServiceUserCallTemplate : ServiceFriendCallTemplate); } return(ServiceMessageTemplate); }
private void SendContactInternal(TLMessageBase messageBase) { var message = messageBase as TLMessage34; if (message == null) { return; } var mediaContact = message.Media as TLMessageMediaContact; if (mediaContact == null) { return; } var inputMediaContact = new TLInputMediaContact82 { FirstName = mediaContact.FirstName, LastName = mediaContact.LastName, PhoneNumber = mediaContact.PhoneNumber, VCard = TLString.Empty }; message.InputMedia = inputMediaContact; UploadService.SendMediaInternal(message, MTProtoService, StateService, CacheService); }
private string GetBriefLabel(TLMessageBase value, bool showContent) { if (ViewModel.Draft is TLDraftMessage draft && !string.IsNullOrWhiteSpace(draft.Message)) { return(draft.Message); } if (value is TLMessageEmpty messageEmpty) { return("Resources.EmptyMessage"); } if (value is TLMessageService messageService) { return(string.Empty); } if (value is TLMessage message) { var result = string.Empty; if (message.Media != null) { if (message.Media is TLMessageMediaDocument documentMedia) { if (string.IsNullOrEmpty(documentMedia.Caption)) { return(result); } return(result + documentMedia.Caption.Replace("\r\n", "\n").Replace("\n", " ")); } else if (message.Media is TLMessageMediaPhoto photoMedia) { if (string.IsNullOrEmpty(photoMedia.Caption)) { return(result); } return(result + photoMedia.Caption.Replace("\r\n", "\n").Replace("\n", " ")); } else if (message.Media is TLMessageMediaGame) { return(string.Empty); } } if (message.Message != null) { if (showContent) { return(result + message.Message.Replace("\r\n", "\n").Replace("\n", " ")); } //return text + Resources.Message; return(result + "Message"); } } return(string.Empty); }
private void PreloadResultHistory(TLMessageBase message) { var maxId = message.Id; var offset = new TLInt(-6); var limit = new TLInt(14); IList <TLMessageBase> resultHistory; if (_resultHistoryCache.TryGetValue(maxId.Value, out resultHistory)) { return; } IsWorking = true; MTProtoService.GetHistoryAsync("PreloadResultHistory", Peer, TLUtils.InputPeerToPeer(Peer, StateService.CurrentUserId), false, offset, maxId, limit, result => BeginOnUIThread(() => { IsWorking = false; ProcessRepliesAndAudio(result.Messages); _resultHistoryCache[maxId.Value] = result.Messages; }), error => BeginOnUIThread(() => { IsWorking = false; Execute.ShowDebugMessage("messages.getHistory error " + error); })); }
// TODO: Encrypted public TLDecryptedMessageBase DecryptedMessage { get; protected set; } public MessagesRemovedEventArgs(TLDialog dialog, TLMessageBase message) { Dialog = dialog; Messages = new List <TLMessageBase> { message }; }
private void SendLocationInternal(TLMessageBase messageBase) { var message = messageBase as TLMessage34; if (message == null) { return; } var mediaGeo = message.Media as TLMessageMediaGeo; if (mediaGeo == null) { return; } var geoPoint = mediaGeo.Geo as TLGeoPoint; if (geoPoint == null) { return; } var inputMediaGeoPoint = new TLInputMediaGeoPoint { GeoPoint = new TLInputGeoPoint { Lat = geoPoint.Lat, Long = geoPoint.Long } }; message.InputMedia = inputMediaGeoPoint; UploadService.SendMediaInternal(message, MTProtoService, StateService, CacheService); }
private void OpenReplyInternal(TLMessageBase reply, IList <TLMessageBase> messages) { IsFirstSliceLoaded = false; var startPosition = 0; for (var i = 0; i < messages.Count; i++) { startPosition = i; if (messages[i].Index == reply.Index) { break; } } for (var i = startPosition + 1; i < messages.Count; i++) { Items.Add(messages[i]); } HoldScrollingPosition = true; BeginOnUIThread(() => { for (var i = 0; i < startPosition - 1; i++) { Items.Insert(i, messages[i]); } HoldScrollingPosition = false; }); }
private void CreateGroupedItems(TLMessageBase currentItem) { var message73 = currentItem as TLMessage73; if (message73 != null && message73.GroupedId != null) { var firstItem = GroupedItems.FirstOrDefault() as TLMessage73; if (firstItem == null || (firstItem.GroupedId != null && firstItem.GroupedId.Value != message73.GroupedId.Value)) { var items = new List <TLMessageBase>(); for (var i = _items.Count - 1; i >= 0; i--) { var item = _items[i] as TLMessage73; 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 ImageViewerView; if (view != null) { view.ScrollTo(currentItem, 0.0); } } else if (firstItem.GroupedId != null && firstItem.GroupedId.Value == message73.GroupedId.Value) { var view = GetView() as ImageViewerView; if (view != null) { view.ScrollTo(currentItem, 0.0); } } else { GroupedItems.Clear(); } } else { GroupedItems.Clear(); } }
private void HighlightMessage(TLMessageBase message) { message.IsHighlighted = true; BeginOnUIThread(TimeSpan.FromSeconds(2.0), () => { message.IsHighlighted = false; }); }
private async void MessageForwardExecute(TLMessageBase messageBase) { if (messageBase is TLMessage message) { SelectionMode = ListViewSelectionMode.None; await ShareView.Current.ShowAsync(message); } }
public void ForwardMessage(TLMessageBase message) { if (message == null) { return; } DialogDetailsViewModel.ForwardMessagesCommon(new List <TLMessageBase> { message }, StateService, NavigationService); }
public static void SetMessage(DependencyObject obj, TLMessageBase value) { // TODO: shitty hack!!! var oldValue = obj.GetValue(MessageProperty); obj.SetValue(MessageProperty, value); if (oldValue == value) { OnMessageChanged(obj as RichTextBlock, value); } }
private DataTemplate GenerateCommonMessageTemplate(TLMessageBase m) { var messageCommon = m as TLMessageCommon; if (messageCommon != null) { var message40 = messageCommon as TLMessage40; //if (message40 != null && message40.Views != null && message40.Views.Value > 0) if (message40 != null && (message40.FromId == null || message40.FromId.Value < 0)) { if (message40.IsSticker()) { return(ChatStickerTemplate); } return(ChatMessageTemplate); } if (messageCommon.IsSticker()) { if (messageCommon.Out.Value) { return(UserStickerTemplate ?? EmptyMessageTemplate); } if (messageCommon.ToId is TLPeerChat || messageCommon.ToId is TLPeerBroadcast) { return(ChatFriendStickerTemplate ?? EmptyMessageTemplate); } return(FriendStickerTemplate ?? EmptyMessageTemplate); } else { if (messageCommon.Out.Value) { return(UserMessageTemplate ?? EmptyMessageTemplate); } if (messageCommon.ToId is TLPeerChat || messageCommon.ToId is TLPeerBroadcast || messageCommon.ToId is TLPeerChannel) { return(ChatFriendMessageTemplate ?? EmptyMessageTemplate); } return(FriendMessageTemplate ?? EmptyMessageTemplate); } return(EmptyMessageTemplate); } return(EmptyMessageTemplate); }
private void MessageForwardExecute(TLMessageBase message) { if (message is TLMessage) { //await ShareView.Current.ShowAsync(new TLStickerSet()); //return; App.InMemoryState.ForwardMessages = new List <TLMessage> { message as TLMessage }; NavigationService.GoBackAt(0); } }
private DataTemplate GenerateCommonMessageTemplate(TLMessageBase m) { var message = m as TLMessage; if (message == null) { return(EmptyMessageTemplate); } if (message.Media is TLMessageMediaPhoto photoMedia && photoMedia.HasTTLSeconds && (photoMedia.Photo is TLPhotoEmpty || !photoMedia.HasPhoto)) { return(ServiceMessageTemplate); }
public void ScrollTo(TLMessageBase currentItem, double duration) { #if !NO_RIBBON var index = ViewModel.GroupedItems.IndexOf(currentItem); if (index != -1) { _index = index; _duration = duration; Ribbon.LayoutUpdated += Ribbon_LayoutUpdated; } #endif }
public void Handle(TLMessageBase message) { var serviceMessage = message as TLMessageService; if (serviceMessage != null) { var editTitleAction = serviceMessage.Action as TLMessageActionChatEditTitle; if (editTitleAction != null && serviceMessage.ToId.Id.Value == Chat.Index) { NotifyOfPropertyChange(() => Chat); } } }