private void DeleteMessage(TLDecryptedMessageMediaPhoto photo) { if (photo == null) { return; } var encryptedChat = Chat as TLEncryptedChatCommon; if (encryptedChat == null) { return; } TLDecryptedMessage mediaMessage = null; for (var i = 0; i < Items.Count; i++) { var message = Items[i] as TLDecryptedMessage; if (message != null && message.Media == photo) { mediaMessage = message; break; } } if (mediaMessage == null) { return; } DeleteMessage(mediaMessage); }
private static void SavePhotoAsync(TLDecryptedMessageMediaPhoto mediaPhoto, Action <string> callback = null) { var location = mediaPhoto.Photo as TLEncryptedFile; if (location == null) { return; } var fileName = String.Format("{0}_{1}_{2}.jpg", location.Id, location.DCId, location.AccessHash); Execute.BeginOnThreadPool(() => ImageViewerViewModel.SavePhoto(fileName, callback)); }
private void SendPhoto(Photo p) { var chat = Chat as TLEncryptedChat; if (chat == null) { return; } var dcId = TLInt.Random(); var id = TLLong.Random(); var accessHash = TLLong.Random(); var fileLocation = new TLEncryptedFile { Id = id, AccessHash = accessHash, DCId = dcId, Size = new TLInt(p.Bytes.Length), KeyFingerprint = new TLInt(0) }; var fileName = String.Format("{0}_{1}_{2}.jpg", fileLocation.Id, fileLocation.DCId, fileLocation.AccessHash); using (var store = IsolatedStorageFile.GetUserStoreForApplication()) { using (var fileStream = store.CreateFile(fileName)) { fileStream.Write(p.Bytes, 0, p.Bytes.Length); } } var keyIV = GenerateKeyIV(); int thumbHeight; int thumbWidth; var thumb = ImageUtils.CreateThumb(p.Bytes, Constants.PhotoPreviewMaxSize, Constants.PhotoPreviewQuality, out thumbHeight, out thumbWidth); var decryptedMediaPhoto = new TLDecryptedMessageMediaPhoto { Thumb = TLString.FromBigEndianData(thumb), ThumbW = new TLInt(thumbWidth), ThumbH = new TLInt(thumbHeight), Key = keyIV.Item1, IV = keyIV.Item2, W = new TLInt(p.Width), H = new TLInt(p.Height), Size = new TLInt(p.Bytes.Length), File = fileLocation, UploadingProgress = 0.001 }; var decryptedTuple = GetDecryptedMessageAndObject(TLString.Empty, decryptedMediaPhoto, chat, true); InsertSendingMessage(decryptedTuple.Item1); RaiseScrollToBottom(); NotifyOfPropertyChange(() => DescriptionVisibility); BeginOnThreadPool(() => CacheService.SyncDecryptedMessage(decryptedTuple.Item1, chat, cachedMessage => UploadPhotoInternal(p.Bytes, decryptedTuple.Item2))); }
public async Task <Telegram.Api.WindowsPhone.Tuple <TLDecryptedMessageBase, TLObject> > GetPhotoMessage(StorageFile file) { var chat = Chat as TLEncryptedChat; if (chat == null) { return(null); } if (file == null) { return(null); } var properties = await file.GetBasicPropertiesAsync(); var size = properties.Size; var thumb = await DialogDetailsViewModel.GetFileThumbAsync(file) as TLPhotoSize; var dcId = TLInt.Random(); var id = TLLong.Random(); var accessHash = TLLong.Random(); var fileName = String.Format("{0}_{1}_{2}.jpg", id, dcId, accessHash); var stream = await file.OpenReadAsync(); var resizedPhoto = await DialogDetailsViewModel.ResizeJpeg(stream, Constants.DefaultImageSize, file.DisplayName, fileName); var keyIV = GenerateKeyIV(); var fileLocation = new TLEncryptedFile { Id = id, AccessHash = accessHash, DCId = dcId, Size = new TLInt(resizedPhoto.Bytes.Length), KeyFingerprint = new TLInt(0), FileName = new TLString(Path.GetFileName(file.Name)) }; TLDecryptedMessageMediaPhoto decryptedMediaPhoto; var chat17 = chat as TLEncryptedChat17; if (chat17 != null && chat17.Layer.Value >= Constants.MinSecretChatWithCaptionsLayer) { decryptedMediaPhoto = new TLDecryptedMessageMediaPhoto45 { Thumb = thumb != null ? thumb.Bytes : TLString.Empty, ThumbW = thumb != null ? thumb.W : new TLInt(0), ThumbH = thumb != null ? thumb.H : new TLInt(0), Size = new TLInt(resizedPhoto.Bytes.Length), Key = keyIV.Item1, IV = keyIV.Item2, W = new TLInt(resizedPhoto.Width), H = new TLInt(resizedPhoto.Height), Caption = TLString.Empty, File = fileLocation, StorageFile = resizedPhoto.File, UploadingProgress = 0.001 }; } else { decryptedMediaPhoto = new TLDecryptedMessageMediaPhoto { Thumb = thumb != null ? thumb.Bytes : TLString.Empty, ThumbW = thumb != null ? thumb.W : new TLInt(0), ThumbH = thumb != null ? thumb.H : new TLInt(0), Size = new TLInt(resizedPhoto.Bytes.Length), Key = keyIV.Item1, IV = keyIV.Item2, W = new TLInt(resizedPhoto.Width), H = new TLInt(resizedPhoto.Height), File = fileLocation, StorageFile = resizedPhoto.File, UploadingProgress = 0.001 }; } var decryptedTuple = GetDecryptedMessageAndObject(TLString.Empty, decryptedMediaPhoto, chat, true); return(decryptedTuple); }
public bool OpenSecretPhoto(TLDecryptedMessageMediaPhoto mediaPhoto) { if (mediaPhoto == null) { return(false); } TLDecryptedMessage17 message = null; for (var i = 0; i < Items.Count; i++) { var message17 = Items[i] as TLDecryptedMessage17; if (message17 != null && message17.Media == mediaPhoto) { message = message17; break; } } if (message == null) { return(false); } if (message.Status == MessageStatus.Sending) { return(false); } var result = false; if (!message.Out.Value) { if (message.TTL != null && message.TTL.Value > 0 && message.TTL.Value <= 60.0) { if (mediaPhoto.TTLParams == null) { message.IsTTLStarted = true; message.DeleteDate = new TLLong(DateTime.Now.Ticks + message.TTL.Value * TimeSpan.TicksPerSecond); mediaPhoto.TTLParams = new TTLParams { StartTime = DateTime.Now, IsStarted = true, Total = message.TTL.Value }; message.Unread = new TLBool(false); message.Status = MessageStatus.Read; CacheService.SyncDecryptedMessage(message, Chat, r => { var chat = Chat as TLEncryptedChat; if (chat == null) { return; } var action = new TLDecryptedMessageActionReadMessages(); action.RandomIds = new TLVector <TLLong> { message.RandomId }; var decryptedTuple = GetDecryptedServiceMessageAndObject(action, chat, MTProtoService.CurrentUserId, CacheService); SendEncryptedService(chat, decryptedTuple.Item2, MTProtoService, CacheService, sentEncryptedMessage => { }); }); } SecretPhoto = message; NotifyOfPropertyChange(() => SecretPhoto); result = true; } } else { SecretPhoto = message; NotifyOfPropertyChange(() => SecretPhoto); result = true; } return(result); }