Exemplo n.º 1
0
        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);
        }
Exemplo n.º 5
0
        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);
        }