private void SendDocumentInternal(StorageFile storageFile, TLObject obj)
        {
            var message = GetDecryptedMessage(obj);

            if (message == null)
            {
                return;
            }

            var media = message.Media as TLDecryptedMessageMediaDocument;

            if (media == null)
            {
                return;
            }

            var file = media.File as TLEncryptedFile;

            if (file == null)
            {
                return;
            }

            UploadDocumentFileManager.UploadFile(file.Id, obj, storageFile, media.Key, media.IV);
        }
Exemple #2
0
        public void CancelUploading(TLDecryptedMessageMediaBase media)
        {
            var mediaPhoto = media as TLDecryptedMessageMediaPhoto;

            if (mediaPhoto != null && mediaPhoto.File != null)
            {
                var file = mediaPhoto.File as TLEncryptedFile;
                if (file != null && file.Id != null)
                {
                    UploadFileManager.CancelUploadFile(file.Id);
                }
            }

            var mediaDocument = media as TLDecryptedMessageMediaDocument;

            if (mediaDocument != null && mediaDocument.File != null)
            {
                var file = mediaDocument.File as TLEncryptedFile;
                if (file != null && file.Id != null)
                {
                    UploadDocumentFileManager.CancelUploadFile(file.Id);
                }
            }

            var mediaVideo = media as TLDecryptedMessageMediaVideo;

            if (mediaVideo != null && mediaVideo.File != null)
            {
                var file = mediaVideo.File as TLEncryptedFile;
                if (file != null && file.Id != null)
                {
                    UploadVideoFileManager.CancelUploadFile(file.Id);
                }
            }
        }
        private void SendDocumentInternal(byte[] data, TLObject obj)
        {
            var message = GetDecryptedMessage(obj);

            if (message == null)
            {
                return;
            }

            var media = message.Media as TLDecryptedMessageMediaDocument;

            if (media == null)
            {
                return;
            }
            var file = media.File as TLEncryptedFile;

            if (file == null)
            {
                return;
            }

            if (data == null)
            {
                var fileName = String.Format("{0}_{1}_{2}.jpg",
                                             file.Id,
                                             file.DCId,
                                             file.AccessHash);

                using (var store = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    using (var fileStream = store.OpenFile(fileName, FileMode.Open, FileAccess.Read))
                    {
                        data = new byte[fileStream.Length];
                        fileStream.Read(data, 0, data.Length);
                    }
                }
            }

            var encryptedBytes = Telegram.Api.Helpers.Utils.AesIge(data, media.Key.Data, media.IV.Data, true);

            UploadDocumentFileManager.UploadFile(file.Id, obj, encryptedBytes);
        }
        private async void UploadPhotoInternal(IList <Telegram.Api.WindowsPhone.Tuple <TLDecryptedMessageBase, TLObject> > messages)
        {
            for (var i = 0; i < messages.Count; i++)
            {
                var obj = messages[i].Item2;

                var message = GetDecryptedMessage(obj);
                if (message == null)
                {
                    return;
                }

                var media = message.Media as TLDecryptedMessageMediaPhoto;
                if (media == null)
                {
                    return;
                }

                var file = media.File as TLEncryptedFile;
                if (file == null)
                {
                    return;
                }

                var fileName = String.Format("{0}_{1}_{2}.jpg",
                                             file.Id,
                                             file.DCId,
                                             file.AccessHash);

                var storageFile = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);

                if (storageFile == null)
                {
                    return;
                }

                System.Diagnostics.Debug.WriteLine("Upload photo random_id={0} name={1}", messages[i].Item1.RandomId, storageFile.DisplayName);
                UploadDocumentFileManager.UploadFile(file.Id, obj, storageFile, media.Key, media.IV);
            }
        }
Exemple #5
0
        private void SendDocumentInternal(TLMessage25 message, object o)
#endif
        {
            var document = ((TLMessageMediaDocument)message.Media).Document as TLDocument;

            if (document == null)
            {
                return;
            }

            byte[] thumbBytes = null;
            var    thumb      = document.Thumb as TLPhotoSize;

            if (thumb != null)
            {
                var thumbLocation = thumb.Location as TLFileLocation;
                if (thumbLocation != null)
                {
                    var fileName = String.Format("{0}_{1}_{2}.jpg",
                                                 thumbLocation.VolumeId,
                                                 thumbLocation.LocalId,
                                                 thumbLocation.Secret);

                    using (var store = IsolatedStorageFile.GetUserStoreForApplication())
                    {
                        using (var fileStream = store.OpenFile(fileName, FileMode.Open, FileAccess.Read))
                        {
                            thumbBytes = new byte[fileStream.Length];
                            fileStream.Read(thumbBytes, 0, thumbBytes.Length);
                        }
                    }
                }
            }

            var bytes       = document.Buffer;
            var md5Bytes    = Telegram.Api.Helpers.Utils.ComputeMD5(bytes ?? new byte[0]);
            var md5Checksum = BitConverter.ToInt64(md5Bytes, 0);

            StateService.GetServerFilesAsync(
                results =>
            {
                var serverFile = results.FirstOrDefault(result => result.MD5Checksum.Value == md5Checksum);

                if (serverFile != null)
                {
                    message.InputMedia = serverFile.Media;
                    ShellViewModel.SendMediaInternal(message, MTProtoService, StateService, CacheService);
                }
                else
                {
                    if (thumbBytes != null)
                    {
                        var thumbFileId = TLLong.Random();
                        UploadFileManager.UploadFile(thumbFileId, message.Media, thumbBytes);

                        Thread.Sleep(100);     //NOTE: без этой строки не работает. Почему???
                    }

                    var fileId                      = TLLong.Random();
                    message.Media.FileId            = fileId;
                    message.Media.UploadingProgress = 0.001;
#if WP81
                    if (file == null)
                    {
                        UploadDocumentFileManager.UploadFile(fileId, message, bytes);
                    }
                    else
                    {
                        UploadDocumentFileManager.UploadFile(fileId, message, file);
                    }
#else
                    UploadDocumentFileManager.UploadFile(fileId, message, bytes);
#endif
                }
            });
        }