コード例 #1
0
        private void OpenImageViewer()
        {
            if (ImageViewer == null)
            {
                ImageViewer = new DecryptedImageViewerViewModel(StateService, true)
                {
                    DialogDetails = this
                };
                NotifyOfPropertyChange(() => ImageViewer);
            }

            ImageViewer.OpenViewer();
        }
コード例 #2
0
        public void OpenMedia(TLDecryptedMessage message)
#endif
        {
            if (message == null)
            {
                return;
            }
            if (message.Status == MessageStatus.Sending)
            {
                return;
            }

            var mediaPhoto = message.Media as TLDecryptedMessageMediaPhoto;

            if (mediaPhoto != null)
            {
                if (message.TTL != null && message.TTL.Value > 0 && message.TTL.Value <= 60.0)
                {
                    var decryptedMessage = message as TLDecryptedMessage17;
                    if (decryptedMessage != null)
                    {
                        return;
                    }
                }
                message.Unread = new TLBool(false);
                message.Status = MessageStatus.Read;
                CacheService.SyncDecryptedMessage(message, Chat, r => { });

                {
                    StateService.CurrentDecryptedPhotoMessage  = message;
                    StateService.CurrentDecryptedMediaMessages =
                        Items
                        .OfType <TLDecryptedMessage>()
                        .Where(x => x.Media is TLDecryptedMessageMediaPhoto || x.Media is TLDecryptedMessageMediaVideo)
                        .ToList();

                    if (ImageViewer == null)
                    {
                        ImageViewer = new DecryptedImageViewerViewModel(StateService, true)
                        {
                            DialogDetails = this
                        };
                        NotifyOfPropertyChange(() => ImageViewer);
                    }

                    ImageViewer.OpenViewer();
                }

                return;
            }

            var mediaGeo = message.Media as TLDecryptedMessageMediaGeoPoint;

            if (mediaGeo != null)
            {
                StateService.DecryptedMediaMessage = message;
                NavigationService.UriFor <MapViewModel>().Navigate();
                return;
            }

            var mediaVideo = message.Media as TLDecryptedMessageMediaVideo;

            if (mediaVideo != null)
            {
                var fileLocation = mediaVideo.File as TLEncryptedFile;
                if (fileLocation == null)
                {
                    return;
                }

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

                using (var store = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    if (store.FileExists(fileName))
                    {
                        var mediaVideo17 = mediaVideo as TLDecryptedMessageMediaVideo17;
                        if (mediaVideo17 != null)
                        {
                            if (!message.Out.Value)
                            {
                                if (message.TTL != null && message.TTL.Value > 0 && message.TTL.Value <= 60.0)
                                {
                                    if (mediaVideo17.TTLParams == null)
                                    {
                                        message.IsTTLStarted   = true;
                                        message.DeleteDate     = new TLLong(DateTime.Now.Ticks + Math.Max(mediaVideo17.Duration.Value + 1, message.TTL.Value) * TimeSpan.TicksPerSecond);
                                        mediaVideo17.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 =>
                                            {
                                            });
                                        });
                                    }
                                }
                            }
                        }

                        var launcher = new MediaPlayerLauncher();
                        launcher.Location = MediaLocationType.Data;
                        launcher.Media    = new Uri(fileName, UriKind.Relative);
                        launcher.Show();
                    }
                    else
                    {
                        mediaVideo.DownloadingProgress = 0.001;
                        var fileManager = IoC.Get <IEncryptedFileManager>();
                        fileManager.DownloadFile(fileLocation, mediaVideo);
                    }
                }

                return;
            }

            var mediaAudio = message.Media as TLDecryptedMessageMediaAudio;

            if (mediaAudio != null)
            {
                var fileLocation = mediaAudio.File as TLEncryptedFile;
                if (fileLocation == null)
                {
                    return;
                }

                var fileName = String.Format("audio{0}_{1}.wav",
                                             fileLocation.Id,
                                             fileLocation.AccessHash);

                using (var store = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    if (!store.FileExists(fileName))
                    {
                        mediaAudio.DownloadingProgress = 0.001;
                        var fileManager = IoC.Get <IEncryptedFileManager>();
                        fileManager.DownloadFile(fileLocation, mediaAudio);
                    }
                    else
                    {
                        var mediaAudio17 = mediaAudio as TLDecryptedMessageMediaAudio17;
                        if (mediaAudio17 != null)
                        {
                            if (!message.Out.Value)
                            {
                                if (message.TTL != null && message.TTL.Value > 0 && message.TTL.Value <= 60.0)
                                {
                                    if (mediaAudio17.TTLParams == null)
                                    {
                                        message.IsTTLStarted   = true;
                                        message.DeleteDate     = new TLLong(DateTime.Now.Ticks + Math.Max(mediaAudio17.Duration.Value + 1, message.TTL.Value) * TimeSpan.TicksPerSecond);
                                        mediaAudio17.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 =>
                                            {
                                            });
                                        });
                                    }
                                }
                            }
                        }
                    }
                }

                return;
            }

            var mediaDocument = message.Media as TLDecryptedMessageMediaDocument;

            if (mediaDocument != null)
            {
                var fileLocation = mediaDocument.File as TLEncryptedFile;
                if (fileLocation == null)
                {
                    return;
                }

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

                using (var store = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    if (store.FileExists(fileName))
                    {
#if WP8
                        StorageFile pdfFile = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);

                        Windows.System.Launcher.LaunchFileAsync(pdfFile);
#endif
                    }
                    else
                    {
                        mediaDocument.DownloadingProgress = 0.001;
                        var fileManager = IoC.Get <IEncryptedFileManager>();
                        fileManager.DownloadFile(fileLocation, mediaDocument);
                    }
                }

                return;
            }
#if DEBUG
            MessageBox.Show("Tap on media");
#endif
        }