public static void SendEncryptedService(TLEncryptedChat chat, TLObject obj, IMTProtoService mtProtoService, ICacheService cacheService, Action <TLSentEncryptedMessage> callbak) { var message = GetDecryptedServiceMessage(obj); if (message == null) { return; } cacheService.SyncDecryptedMessage(message, chat, cachedMessage => { mtProtoService.SendEncryptedServiceAsync(new TLInputEncryptedChat { AccessHash = chat.AccessHash, ChatId = chat.Id }, message.RandomId, TLUtils.EncryptMessage(obj, mtProtoService.CurrentUserId, chat), result => { callbak.SafeInvoke(result); message.Status = MessageStatus.Confirmed; message.NotifyOfPropertyChange(() => message.Status); cacheService.SyncSendingDecryptedMessage(chat.Id, result.Date, message.RandomId, m => { }); }, error => { message.Status = MessageStatus.Failed; message.NotifyOfPropertyChange(() => message.Status); Execute.ShowDebugMessage("messages.sendServiceEncrypted error " + error); }); }); }
public static void SendEncrypted(TLEncryptedChat chat, TLObject obj, IMTProtoService mtProtoService, ICacheService cacheService) { var message = GetDecryptedMessage(obj); if (message == null) { return; } cacheService.SyncDecryptedMessage(message, chat, cachedMessage => { mtProtoService.SendEncryptedAsync(new TLInputEncryptedChat { AccessHash = chat.AccessHash, ChatId = chat.Id }, message.RandomId, TLUtils.EncryptMessage(obj, chat), result => Execute.BeginOnUIThread(() => { message.Status = MessageStatus.Confirmed; message.NotifyOfPropertyChange(() => message.Status); cacheService.SyncSendingDecryptedMessage(chat.Id, result.Date, message.RandomId, m => { }); }), () => { //message.Date = result.Date; message.Status = MessageStatus.Confirmed; message.NotifyOfPropertyChange(() => message.Status); }, error => { message.Status = MessageStatus.Failed; message.NotifyOfPropertyChange(() => message.Status); Execute.ShowDebugMessage("messages.sendEncrypted error " + error); }); }); }
private static TLDecryptedMessageMediaBase GetDecryptedMediaDocument(StorageFile file, TLEncryptedChat chat, TLPhotoSize thumb, ulong size, Telegram.Api.WindowsPhone.Tuple <TLString, TLString> keyIV, TLEncryptedFile fileLocation) { TLDecryptedMessageMediaBase decryptedMediaDocument; var chat17 = chat as TLEncryptedChat17; if (chat17 != null) { if (chat17.Layer.Value >= Constants.MinSecretChatWithCaptionsLayer) { decryptedMediaDocument = new TLDecryptedMessageMediaDocument45 { Thumb = thumb != null ? thumb.Bytes : TLString.Empty, ThumbW = thumb != null ? thumb.W : new TLInt(0), ThumbH = thumb != null ? thumb.H : new TLInt(0), FileName = new TLString(Path.GetFileName(file.Name)), MimeType = new TLString(file.ContentType), Size = new TLInt((int)size), Key = keyIV.Item1, IV = keyIV.Item2, Caption = TLString.Empty, File = fileLocation, StorageFile = file, UploadingProgress = 0.001 }; } else { decryptedMediaDocument = new TLDecryptedMessageMediaDocument { Thumb = thumb != null ? thumb.Bytes : TLString.Empty, ThumbW = thumb != null ? thumb.W : new TLInt(0), ThumbH = thumb != null ? thumb.H : new TLInt(0), FileName = new TLString(Path.GetFileName(file.Name)), MimeType = new TLString(file.ContentType), Size = new TLInt((int)size), Key = keyIV.Item1, IV = keyIV.Item2, File = fileLocation, StorageFile = file, UploadingProgress = 0.001 }; } } else { decryptedMediaDocument = new TLDecryptedMessageMediaDocument { Thumb = thumb != null ? thumb.Bytes : TLString.Empty, ThumbW = thumb != null ? thumb.W : new TLInt(0), ThumbH = thumb != null ? thumb.H : new TLInt(0), FileName = new TLString(Path.GetFileName(file.Name)), MimeType = new TLString(file.ContentType), Size = new TLInt((int)size), Key = keyIV.Item1, IV = keyIV.Item2, File = fileLocation, StorageFile = file, UploadingProgress = 0.001 }; } return(decryptedMediaDocument); }
private static TLDecryptedMessageMediaBase GetDecryptedMediaDocument(Photo p, TLEncryptedChat chat, TLString thumb, TLInt thumbW, TLInt thumbH, TLString mimeType, Telegram.Api.WindowsPhone.Tuple <TLString, TLString> keyIV, TLEncryptedFile fileLocation) { TLDecryptedMessageMediaBase decryptedMediaDocument; var chat17 = chat as TLEncryptedChat17; if (chat17 != null) { if (chat17.Layer.Value >= Constants.MinSecretChatWithCaptionsLayer) { decryptedMediaDocument = new TLDecryptedMessageMediaDocument45 { Thumb = thumb, ThumbW = thumbW, ThumbH = thumbH, FileName = new TLString(Path.GetFileName(p.FileName)), MimeType = mimeType, Size = new TLInt(p.Bytes.Length), Key = keyIV.Item1, IV = keyIV.Item2, Caption = TLString.Empty, File = fileLocation, UploadingProgress = 0.001 }; } else { decryptedMediaDocument = new TLDecryptedMessageMediaDocument { Thumb = thumb, ThumbW = thumbW, ThumbH = thumbH, FileName = new TLString(Path.GetFileName(p.FileName)), MimeType = mimeType, Size = new TLInt(p.Bytes.Length), Key = keyIV.Item1, IV = keyIV.Item2, File = fileLocation, UploadingProgress = 0.001 }; } } else { decryptedMediaDocument = new TLDecryptedMessageMediaDocument { Thumb = thumb, ThumbW = thumbW, ThumbH = thumbH, FileName = new TLString(Path.GetFileName(p.FileName)), MimeType = mimeType, Size = new TLInt(p.Bytes.Length), Key = keyIV.Item1, IV = keyIV.Item2, File = fileLocation, UploadingProgress = 0.001 }; } return(decryptedMediaDocument); }
public static void SendEncryptedMediaInternal(TLEncryptedChat chat, TLObject obj, IMTProtoService mtProtoService, ICacheService cacheService) { Execute.BeginOnUIThread(() => { var message = GetDecryptedMessage(obj); if (message == null) { return; } var message17 = message as TLDecryptedMessage17; var messageLayer17 = obj as TLDecryptedMessageLayer17; var chat17 = chat as TLEncryptedChat17; if (chat17 != null && messageLayer17 != null && message17 != null && message17.InSeqNo.Value == -1 && message17.OutSeqNo.Value == -1) { var inSeqNo = TLUtils.GetInSeqNo(mtProtoService.CurrentUserId, chat17); var outSeqNo = TLUtils.GetOutSeqNo(mtProtoService.CurrentUserId, chat17); message17.InSeqNo = inSeqNo; message17.OutSeqNo = outSeqNo; message17.NotifyOfPropertyChange(() => message17.InSeqNo); message17.NotifyOfPropertyChange(() => message17.OutSeqNo); messageLayer17.InSeqNo = inSeqNo; messageLayer17.OutSeqNo = outSeqNo; chat17.RawOutSeqNo = new TLInt(chat17.RawOutSeqNo.Value + 1); //Execute.ShowDebugMessage(string.Format("SendEncryptedMediaInternal set inSeqNo={0}, outSeqNo={1}", inSeqNo, outSeqNo)); } System.Diagnostics.Debug.WriteLine("Send photo random_id={0} in_seq_no={1} out_seq_no={2}", message17.RandomId, message17.InSeqNo, message17.OutSeqNo); //message.Media.UploadingProgress = 0.0; mtProtoService.SendEncryptedFileAsync( new TLInputEncryptedChat { AccessHash = chat.AccessHash, ChatId = chat.Id }, message.RandomId, TLUtils.EncryptMessage(obj, mtProtoService.CurrentUserId, chat), message.InputFile, result => { message.Media.UploadingProgress = 0.0; message.Status = MessageStatus.Confirmed; message.NotifyOfPropertyChange(() => message.Status); ProcessSentEncryptedFile(message, result); cacheService.SyncSendingDecryptedMessage(chat.Id, result.Date, message.RandomId, m => { }); }, () => { message.Status = MessageStatus.Confirmed; message.NotifyOfPropertyChange(() => message.Status); }, error => { message.Status = MessageStatus.Failed; message.NotifyOfPropertyChange(() => message.Status); Execute.ShowDebugMessage("messages.sendEncryptedFile error " + error); }); }); }
public static void SendEncryptedMultiMediaInternal(TLEncryptedChat chat, TLDecryptedMessage message, IMTProtoService mtProtoService, ICacheService cacheService) { Execute.BeginOnUIThread(() => { var chat17 = chat as TLEncryptedChat17; if (chat17 == null) { return; } var randomId = new TLVector <TLLong>(); var data = new TLVector <TLString>(); var inputFile = new TLVector <TLInputEncryptedFileBase>(); var mediaGroup = message.Media as TLDecryptedMessageMediaGroup; if (mediaGroup != null) { for (var i = 0; i < mediaGroup.Group.Count; i++) { var message73 = mediaGroup.Group[i] as TLDecryptedMessage73; if (message73 == null) { return; } if (message73.InputFile == null) { return; } randomId.Add(message73.RandomId); var messageLayer = TLUtils.GetDecryptedMessageLayer(chat17.Layer, message73.InSeqNo, message73.OutSeqNo, message73) as TLDecryptedMessageLayer17; if (message73.InSeqNo.Value == -1 && message73.OutSeqNo.Value == -1) { var inSeqNo = TLUtils.GetInSeqNo(mtProtoService.CurrentUserId, chat17); var outSeqNo = TLUtils.GetOutSeqNo(mtProtoService.CurrentUserId, chat17); message73.InSeqNo = inSeqNo; message73.OutSeqNo = outSeqNo; message73.NotifyOfPropertyChange(() => message73.InSeqNo); message73.NotifyOfPropertyChange(() => message73.OutSeqNo); messageLayer.InSeqNo = inSeqNo; messageLayer.OutSeqNo = outSeqNo; chat17.RawOutSeqNo = new TLInt(chat17.RawOutSeqNo.Value + 1); } data.Add(TLUtils.EncryptMessage(messageLayer, mtProtoService.CurrentUserId, chat)); inputFile.Add(message73.InputFile); System.Diagnostics.Debug.WriteLine("Send photo random_id={0} in_seq_no={1} out_seq_no={2}", message73.RandomId, message73.InSeqNo, message73.OutSeqNo); } } if (randomId.Count == 0) { return; } System.Diagnostics.Debug.WriteLine("Send photo random_id=[{0}]", string.Join(",", randomId)); mtProtoService.SendEncryptedMultiMediaAsync( new TLInputEncryptedChat { AccessHash = chat.AccessHash, ChatId = chat.Id }, randomId, data, inputFile, result => Execute.BeginOnUIThread(() => { message.Media.UploadingProgress = 0.0; message.Status = MessageStatus.Confirmed; message.NotifyOfPropertyChange(() => message.Status); if (mediaGroup != null) { for (var i = mediaGroup.Group.Count - 1; i >= 0; i--) { var item = mediaGroup.Group[i] as TLDecryptedMessage; if (item != null) { item.Media.UploadingProgress = 0.0; item.Status = MessageStatus.Confirmed; item.NotifyOfPropertyChange(() => message.Status); ProcessSentEncryptedFile(item, result[i]); cacheService.SyncSendingDecryptedMessage(chat.Id, result[i].Date, mediaGroup.Group[i].RandomId, m => { }); } } } }), () => { message.Status = MessageStatus.Confirmed; message.NotifyOfPropertyChange(() => message.Status); }, error => { message.Status = MessageStatus.Failed; message.NotifyOfPropertyChange(() => message.Status); Execute.ShowDebugMessage("messages.sendEncryptedFile error " + error); }); }); }
public Telegram.Api.WindowsPhone.Tuple <TLDecryptedMessageBase, TLObject> GetDecryptedMessageAndObject(TLString text, TLDecryptedMessageMediaBase media, TLEncryptedChat chat, bool delaySeq = false) { TLDecryptedMessageBase decryptedMessage; TLObject decryptedObject; var randomId = TLLong.Random(); var encryptedChat17 = chat as TLEncryptedChat17; if (encryptedChat17 != null) { var cachedEncryptedChat17 = (TLEncryptedChat17)CacheService.GetEncryptedChat(encryptedChat17.Id); TLInt inSeqNo; TLInt outSeqNo; if (!delaySeq) { inSeqNo = TLUtils.GetInSeqNo(MTProtoService.CurrentUserId, cachedEncryptedChat17); outSeqNo = TLUtils.GetOutSeqNo(MTProtoService.CurrentUserId, cachedEncryptedChat17); cachedEncryptedChat17.RawOutSeqNo = new TLInt(cachedEncryptedChat17.RawOutSeqNo.Value + 1); } else { inSeqNo = new TLInt(-1); outSeqNo = new TLInt(-1); } TLDecryptedMessageBase decryptedMessageBase; if (encryptedChat17.Layer.Value >= 73) { decryptedMessageBase = new TLDecryptedMessage73 { Flags = new TLInt(0), Media = media, Message = text, RandomId = randomId, RandomBytes = TLString.Random(Telegram.Api.Constants.MinRandomBytesLength), //Entities = new TLVector<TLMessageEntityBase>(), //ViaBotName = TLString.Empty, //ReplyToRandomMsgId = new TLLong(0), ChatId = chat.Id, FromId = new TLInt(StateService.CurrentUserId), Out = new TLBool(true), Unread = new TLBool(true), Date = TLUtils.DateToUniversalTimeTLInt(MTProtoService.ClientTicksDelta, DateTime.Now), Status = MessageStatus.Sending, TTL = chat.MessageTTL ?? new TLInt(0), InSeqNo = inSeqNo, OutSeqNo = outSeqNo }; media.TTLSeconds = decryptedMessageBase.TTL; if (!(media is TLDecryptedMessageMediaEmpty)) { ((TLDecryptedMessage45)decryptedMessageBase).SetMedia(); } } else if (encryptedChat17.Layer.Value >= 45) { decryptedMessageBase = new TLDecryptedMessage45 { Flags = new TLInt(0), Media = media, Message = text, RandomId = randomId, RandomBytes = TLString.Random(Telegram.Api.Constants.MinRandomBytesLength), //Entities = new TLVector<TLMessageEntityBase>(), //ViaBotName = TLString.Empty, //ReplyToRandomMsgId = new TLLong(0), ChatId = chat.Id, FromId = new TLInt(StateService.CurrentUserId), Out = new TLBool(true), Unread = new TLBool(true), Date = TLUtils.DateToUniversalTimeTLInt(MTProtoService.ClientTicksDelta, DateTime.Now), Status = MessageStatus.Sending, TTL = chat.MessageTTL ?? new TLInt(0), InSeqNo = inSeqNo, OutSeqNo = outSeqNo }; if (!(media is TLDecryptedMessageMediaEmpty)) { ((TLDecryptedMessage45)decryptedMessageBase).SetMedia(); } } else { decryptedMessageBase = new TLDecryptedMessage17 { Media = media, Message = text, RandomId = randomId, RandomBytes = TLString.Random(Telegram.Api.Constants.MinRandomBytesLength), ChatId = chat.Id, FromId = new TLInt(StateService.CurrentUserId), Out = new TLBool(true), Unread = new TLBool(true), Date = TLUtils.DateToUniversalTimeTLInt(MTProtoService.ClientTicksDelta, DateTime.Now), Status = MessageStatus.Sending, TTL = chat.MessageTTL ?? new TLInt(0), InSeqNo = inSeqNo, OutSeqNo = outSeqNo }; } var decryptedMessageLayer17 = TLUtils.GetDecryptedMessageLayer(encryptedChat17.Layer, inSeqNo, outSeqNo, decryptedMessageBase); decryptedMessage = decryptedMessageBase; decryptedObject = decryptedMessageLayer17; } else { var decryptedMessage8 = new TLDecryptedMessage { Media = media, Message = text, RandomId = randomId, RandomBytes = TLString.Random(Telegram.Api.Constants.MinRandomBytesLength), ChatId = chat.Id, FromId = new TLInt(StateService.CurrentUserId), Out = new TLBool(true), Unread = new TLBool(true), Date = TLUtils.DateToUniversalTimeTLInt(MTProtoService.ClientTicksDelta, DateTime.Now), Status = MessageStatus.Sending, TTL = chat.MessageTTL }; decryptedMessage = decryptedMessage8; decryptedObject = decryptedMessage; } return(new Telegram.Api.WindowsPhone.Tuple <TLDecryptedMessageBase, TLObject>(decryptedMessage, decryptedObject)); }
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)); }
public static Telegram.Api.WindowsPhone.Tuple <TLDecryptedMessageService, TLObject> GetDecryptedServiceMessageAndObject(TLDecryptedMessageActionBase action, TLEncryptedChat chat, TLInt currentUserId, ICacheService cacheService) { var mtProtoService = IoC.Get <IMTProtoService>(); TLDecryptedMessageService decryptedMessage; TLObject decryptedObject; var randomId = TLLong.Random(); var encryptedChat17 = chat as TLEncryptedChat17; if (encryptedChat17 != null && encryptedChat17.Layer.Value >= 17) { var cachedEncryptedChat17 = (TLEncryptedChat17)cacheService.GetEncryptedChat(encryptedChat17.Id); var inSeqNo = TLUtils.GetInSeqNo(currentUserId, cachedEncryptedChat17); var outSeqNo = TLUtils.GetOutSeqNo(currentUserId, cachedEncryptedChat17); cachedEncryptedChat17.RawOutSeqNo = new TLInt(cachedEncryptedChat17.RawOutSeqNo.Value + 1); var decryptedMessage17 = new TLDecryptedMessageService17 { Action = action, RandomId = randomId, //RandomBytes = TLString.Random(Telegram.Api.Constants.MinRandomBytesLength), ChatId = chat.Id, FromId = currentUserId, Out = new TLBool(true), Unread = new TLBool(true), Date = TLUtils.DateToUniversalTimeTLInt(mtProtoService.ClientTicksDelta, DateTime.Now), Status = MessageStatus.Sending, TTL = chat.MessageTTL ?? new TLInt(0), InSeqNo = inSeqNo, OutSeqNo = outSeqNo }; var decryptedMessageLayer17 = TLUtils.GetDecryptedMessageLayer(encryptedChat17.Layer, inSeqNo, outSeqNo, decryptedMessage17); decryptedMessage = decryptedMessage17; decryptedObject = decryptedMessageLayer17; } else { var decryptedMessage8 = new TLDecryptedMessageService { Action = action, RandomId = randomId, RandomBytes = TLString.Random(Telegram.Api.Constants.MinRandomBytesLength), ChatId = chat.Id, FromId = currentUserId, Out = new TLBool(true), Unread = new TLBool(true), Date = TLUtils.DateToUniversalTimeTLInt(mtProtoService.ClientTicksDelta, DateTime.Now), Status = MessageStatus.Sending, TTL = chat.MessageTTL }; decryptedMessage = decryptedMessage8; decryptedObject = decryptedMessage; } return(new Telegram.Api.WindowsPhone.Tuple <TLDecryptedMessageService, TLObject>(decryptedMessage, decryptedObject)); }
public static void SendEncryptedMediaInternal(TLEncryptedChat chat, TLObject obj, IMTProtoService mtProtoService, ICacheService cacheService) { Execute.BeginOnUIThread(() => { var message = GetDecryptedMessage(obj); if (message == null) { return; } var message17 = message as TLDecryptedMessage17; var messageLayer17 = obj as TLDecryptedMessageLayer17; var chat17 = chat as TLEncryptedChat17; if (chat17 != null && messageLayer17 != null && message17 != null && message17.InSeqNo.Value == -1 && message17.OutSeqNo.Value == -1) { var inSeqNo = TLUtils.GetInSeqNo(mtProtoService.CurrentUserId, chat17); var outSeqNo = TLUtils.GetOutSeqNo(mtProtoService.CurrentUserId, chat17); message17.InSeqNo = inSeqNo; message17.OutSeqNo = outSeqNo; message17.NotifyOfPropertyChange(() => message17.InSeqNo); message17.NotifyOfPropertyChange(() => message17.OutSeqNo); messageLayer17.InSeqNo = inSeqNo; messageLayer17.OutSeqNo = outSeqNo; chat17.RawOutSeqNo = new TLInt(chat17.RawOutSeqNo.Value + 1); } //message.Media.UploadingProgress = 0.0; mtProtoService.SendEncryptedFileAsync( new TLInputEncryptedChat { AccessHash = chat.AccessHash, ChatId = chat.Id }, message.RandomId, TLUtils.EncryptMessage(obj, chat), message.InputFile, result => { message.Status = MessageStatus.Confirmed; message.NotifyOfPropertyChange(() => message.Status); var media = message.Media; if (media != null) { var oldFile = media.File as TLEncryptedFile; media.File = result.EncryptedFile; if (oldFile != null) { var newFile = media.File as TLEncryptedFile; if (newFile != null) { newFile.FileName = oldFile.FileName; newFile.Duration = oldFile.Duration; var mediaPhoto = media as TLDecryptedMessageMediaPhoto; if (mediaPhoto != null) { var sourceFileName = String.Format("{0}_{1}_{2}.jpg", oldFile.Id, oldFile.DCId, oldFile.AccessHash); var destinationFileName = String.Format("{0}_{1}_{2}.jpg", newFile.Id, newFile.DCId, newFile.AccessHash); try { using (var store = IsolatedStorageFile.GetUserStoreForApplication()) { if (store.FileExists(sourceFileName)) { store.CopyFile(sourceFileName, destinationFileName); store.DeleteFile(sourceFileName); } } } catch (Exception ex) { } } } } } cacheService.SyncSendingDecryptedMessage(chat.Id, result.Date, message.RandomId, m => { }); }, () => { message.Status = MessageStatus.Confirmed; message.NotifyOfPropertyChange(() => message.Status); }, error => { message.Status = MessageStatus.Failed; message.NotifyOfPropertyChange(() => message.Status); Execute.ShowDebugMessage("messages.sendEncryptedFile error " + error); }); }); }
public Telegram.Api.WindowsPhone.Tuple <TLDecryptedMessageBase, TLObject> GetDecryptedMessageAndObject(TLString text, TLDecryptedMessageMediaBase media, TLEncryptedChat chat, bool delaySeq = false) { TLDecryptedMessageBase decryptedMessage; TLObject decryptedObject; var random = new Random(); var randomId = TLLong.Random(); var textString = text.ToString(); var randomBytes = new byte[] { }; if (string.IsNullOrEmpty(textString) || textString.Length < 16) { randomBytes = new byte[16]; random.NextBytes(randomBytes); } var encryptedChat17 = chat as TLEncryptedChat17; if (encryptedChat17 != null) { var cachedEncryptedChat17 = (TLEncryptedChat17)CacheService.GetEncryptedChat(encryptedChat17.Id); TLInt inSeqNo; TLInt outSeqNo; if (!delaySeq) { inSeqNo = TLUtils.GetInSeqNo(MTProtoService.CurrentUserId, cachedEncryptedChat17); outSeqNo = TLUtils.GetOutSeqNo(MTProtoService.CurrentUserId, cachedEncryptedChat17); cachedEncryptedChat17.RawOutSeqNo = new TLInt(cachedEncryptedChat17.RawOutSeqNo.Value + 1); } else { inSeqNo = new TLInt(-1); outSeqNo = new TLInt(-1); } var decryptedMessage17 = new TLDecryptedMessage17 { Media = media, Message = text, RandomId = randomId, RandomBytes = TLString.FromBigEndianData(randomBytes), ChatId = chat.Id, FromId = new TLInt(StateService.CurrentUserId), Out = new TLBool(true), Unread = new TLBool(true), Date = TLUtils.DateToUniversalTimeTLInt(MTProtoService.ClientTicksDelta, DateTime.Now), Status = MessageStatus.Sending, TTL = chat.MessageTTL ?? new TLInt(0), InSeqNo = inSeqNo, OutSeqNo = outSeqNo }; var decryptedMessageLayer17 = new TLDecryptedMessageLayer17(); decryptedMessageLayer17.Layer = encryptedChat17.Layer; decryptedMessageLayer17.InSeqNo = inSeqNo; decryptedMessageLayer17.OutSeqNo = outSeqNo; decryptedMessageLayer17.RandomBytes = TLString.Empty; decryptedMessageLayer17.Message = decryptedMessage17; decryptedMessage = decryptedMessage17; decryptedObject = decryptedMessageLayer17; } else { var decryptedMessage8 = new TLDecryptedMessage { Media = media, Message = text, RandomId = randomId, RandomBytes = TLString.FromBigEndianData(randomBytes), ChatId = chat.Id, FromId = new TLInt(StateService.CurrentUserId), Out = new TLBool(true), Unread = new TLBool(true), Date = TLUtils.DateToUniversalTimeTLInt(MTProtoService.ClientTicksDelta, DateTime.Now), Status = MessageStatus.Sending, TTL = chat.MessageTTL }; decryptedMessage = decryptedMessage8; decryptedObject = decryptedMessage; } return(new Telegram.Api.WindowsPhone.Tuple <TLDecryptedMessageBase, TLObject>(decryptedMessage, decryptedObject)); }