Beispiel #1
0
        public void CloseEditor()
        {
            _isOpen = false;
            NotifyOfPropertyChange(() => IsOpen);

            _currentItem = null;
        }
Beispiel #2
0
        private void ContinueSendPhoto(TLMessage34 message)
        {
            BeginOnUIThread(() =>
            {
                var previousMessage = InsertSendingMessage(message);
                IsEmptyDialog       = Items.Count == 0 && (_messages == null || _messages.Count == 0) && LazyItems.Count == 0;

                BeginOnThreadPool(() =>
                                  CacheService.SyncSendingMessage(
                                      message, previousMessage,
                                      m => UploadPhotoInternal(message)));
            });
        }
Beispiel #3
0
        private void SendDocumentInternal(TLMessage34 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;
                    UploadService.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
                }
            });
        }
Beispiel #4
0
 private void SendDocumentInternal(TLMessage34 message, StorageFile file)
Beispiel #5
0
        private void UploadPhotoInternal(TLMessage34 message)
        {
            var photo = ((TLMessageMediaPhoto)message.Media).Photo as TLPhoto;

            if (photo == null)
            {
                return;
            }

            var photoSize = photo.Sizes[0] as TLPhotoSize;

            if (photoSize == null)
            {
                return;
            }

            var fileLocation = photoSize.Location;

            if (fileLocation == null)
            {
                return;
            }

            byte[] bytes    = null;
            var    fileName = String.Format("{0}_{1}_{2}.jpg",
                                            fileLocation.VolumeId,
                                            fileLocation.LocalId,
                                            fileLocation.Secret);

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

            if (bytes == null)
            {
                return;
            }

            var md5Bytes    = Telegram.Api.Helpers.Utils.ComputeMD5(bytes);
            var md5Checksum = BitConverter.ToInt64(md5Bytes, 0);

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

#if MULTIPLE_PHOTOS
                serverFile = null;
#endif

                if (serverFile != null)
                {
                    var media        = serverFile.Media;
                    var captionMedia = media as IInputMediaCaption;
                    if (captionMedia == null)
                    {
                        var inputMediaPhoto = serverFile.Media as TLInputMediaPhoto;
                        if (inputMediaPhoto != null)
                        {
                            var inputMediaPhoto75 = new TLInputMediaPhoto75(inputMediaPhoto);
                            captionMedia          = inputMediaPhoto75;
                            media            = inputMediaPhoto75;
                            serverFile.Media = inputMediaPhoto75;
                            StateService.SaveServerFilesAsync(results);
                        }
                        var inputMediaUploadedPhoto = serverFile.Media as TLInputMediaUploadedPhoto;
                        if (inputMediaUploadedPhoto != null)
                        {
                            var inputMediaUploadedPhoto75 = new TLInputMediaUploadedPhoto75(inputMediaUploadedPhoto, null);
                            captionMedia     = inputMediaUploadedPhoto75;
                            media            = inputMediaUploadedPhoto75;
                            serverFile.Media = inputMediaUploadedPhoto75;
                            StateService.SaveServerFilesAsync(results);
                        }
                    }

                    if (captionMedia != null)
                    {
                        captionMedia.Caption = message.Message ?? TLString.Empty;
                    }

                    var ttlMedia = media as IInputTTLMedia;
                    if (ttlMedia != null)
                    {
                        ttlMedia.TTLSeconds = ((TLMessageMediaPhoto70)message.Media).TTLSeconds;
                    }

                    message.InputMedia = media;
                    UploadService.SendMediaInternal(message, MTProtoService, StateService, CacheService);
                }
                else
                {
                    var fileId                      = TLLong.Random();
                    message.Media.FileId            = fileId;
                    message.Media.UploadingProgress = 0.001;
                    UploadFileManager.UploadFile(fileId, message, bytes);
                }
            });
        }