public void ClearHistory(TLDialogBase dialog) { var confirmation = MessageBox.Show(AppResources.ClearHistoryConfirmation, AppResources.Confirm, MessageBoxButton.OKCancel); if (confirmation != MessageBoxResult.OK) { return; } if (dialog.Peer is TLPeerChannel) { var channel = (TLChannel)dialog.With; MTProtoService.DeleteHistoryAsync(channel.ToInputChannel(), result => { CacheService.ClearDialog(dialog.Peer); BeginOnUIThread(() => { if (dialog.With != null) { dialog.With.ClearBitmap(); } dialog.NotifyOfPropertyChange(() => dialog.UnreadCount); var dialog71 = dialog as TLDialog71; if (dialog71 != null) { dialog71.NotifyOfPropertyChange(() => dialog71.UnreadMentionsCount); } }); }, error => { Execute.ShowDebugMessage("channels.deleteHistory error " + error); }); } else if (dialog.Peer is TLPeerUser) { var user = (TLUserBase)dialog.With; var inputPeer = user.ToInputPeer(); DeleteHistoryAsync(true, inputPeer, result => { CacheService.ClearDialog(dialog.Peer); BeginOnUIThread(() => { if (dialog.With != null) { dialog.With.ClearBitmap(); } dialog.NotifyOfPropertyChange(() => dialog.UnreadCount); var dialog71 = dialog as TLDialog71; if (dialog71 != null) { dialog71.NotifyOfPropertyChange(() => dialog71.UnreadMentionsCount); } }); }, error => { Execute.ShowDebugMessage("messages.deleteHistory error " + error); }); } else if (dialog.Peer is TLPeerChat) { var chat = (TLChatBase)dialog.With; var inputPeer = chat.ToInputPeer(); DeleteHistoryAsync(true, inputPeer, result => { CacheService.ClearDialog(dialog.Peer); BeginOnUIThread(() => { if (dialog.With != null) { dialog.With.ClearBitmap(); } dialog.NotifyOfPropertyChange(() => dialog.UnreadCount); var dialog71 = dialog as TLDialog71; if (dialog71 != null) { dialog71.NotifyOfPropertyChange(() => dialog71.UnreadMentionsCount); } }); }, error => { Execute.ShowDebugMessage("messages.deleteHistory error " + error); }); } else if (dialog.Peer is TLPeerEncryptedChat) { var chat = CacheService.GetEncryptedChat(dialog.Peer.Id) as TLEncryptedChat; if (chat == null) { return; } var flushHistoryAction = new TLDecryptedMessageActionFlushHistory(); var decryptedTuple = SecretDialogDetailsViewModel.GetDecryptedServiceMessageAndObject(flushHistoryAction, chat, MTProtoService.CurrentUserId, CacheService); SecretDialogDetailsViewModel.SendEncryptedService(chat, decryptedTuple.Item2, MTProtoService, CacheService, sentEncryptedMessage => { CacheService.ClearDecryptedHistoryAsync(chat.Id); BeginOnUIThread(() => { if (dialog.With != null) { dialog.With.ClearBitmap(); } dialog.NotifyOfPropertyChange(() => dialog.UnreadCount); }); }); } else if (dialog.Peer is TLPeerBroadcast) { var broadcast = CacheService.GetBroadcast(dialog.Peer.Id); if (broadcast == null) { return; } CacheService.ClearBroadcastHistoryAsync(broadcast.Id); } }
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); } } }); } }
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 void ClearHistory(TLDialogBase dialog) { if (dialog == null) { return; } if (dialog.Peer is TLPeerUser) { return; } var confirmation = MessageBox.Show(string.Format("{0}?", AppResources.ClearHistory), AppResources.Confirm, MessageBoxButton.OKCancel); if (confirmation != MessageBoxResult.OK) { return; } if (dialog.Peer is TLPeerChat) { var chat = (TLChatBase)dialog.With; var inputPeer = chat.ToInputPeer(); DeleteHistoryAsync(inputPeer, result => { CacheService.DeleteDialog(dialog); // TODO : move this line to MTProtoService BeginOnUIThread(() => { if (dialog.With != null) { dialog.With.Bitmap = null; } Items.Remove(dialog); }); }, error => { Execute.ShowDebugMessage("messages.deleteHistory error " + error); }); } else if (dialog.Peer is TLPeerEncryptedChat) { var chat = CacheService.GetEncryptedChat(dialog.Peer.Id) as TLEncryptedChat; if (chat == null) { return; } var flushHistoryAction = new TLDecryptedMessageActionFlushHistory(); var decryptedTuple = SecretDialogDetailsViewModel.GetDecryptedServiceMessageAndObject(flushHistoryAction, chat, MTProtoService.CurrentUserId, CacheService); SecretDialogDetailsViewModel.SendEncryptedService(chat, decryptedTuple.Item2, MTProtoService, CacheService, sentEncryptedMessage => { chat.SetBitmap(null); CacheService.ClearDecryptedHistoryAsync(chat.Id); }); } else if (dialog.Peer is TLPeerBroadcast) { var broadcast = CacheService.GetBroadcast(dialog.Peer.Id); if (broadcast == null) { return; } CacheService.ClearBroadcastHistoryAsync(broadcast.Id); } }