protected override void OnNavigatedFrom(NavigationEventArgs e) { ViewModel.OnNavigatedFrom(); MediaControl.Content = null; MessagePlayerControl.Stop(); if (e.Uri == _externalUri) { _fromExternalUri = true; } else { _fromExternalUri = false; } base.OnNavigatedFrom(e); }
public void Handle(DownloadableItem item) { var webPage = item.Owner as TLWebPage; if (webPage != null) { Execute.BeginOnUIThread(() => { var messages = UngroupEnumerator(Items).OfType <TLDecryptedMessage>(); foreach (var m in messages) { var media = m.Media as TLDecryptedMessageMediaWebPage; if (media != null && media.WebPage == webPage) { media.NotifyOfPropertyChange(() => media.Photo); media.NotifyOfPropertyChange(() => media.Self); break; } } }); } var decryptedMessage = item.Owner as TLDecryptedMessage; if (decryptedMessage != null) { var mediaExternalDocument = decryptedMessage.Media as TLDecryptedMessageMediaExternalDocument; if (mediaExternalDocument != null) { decryptedMessage.NotifyOfPropertyChange(() => decryptedMessage.Self); } } var decryptedMedia = item.Owner as TLDecryptedMessageMediaBase; if (decryptedMedia != null) { decryptedMessage = UngroupEnumerator(Items).OfType <TLDecryptedMessage>().FirstOrDefault(x => x.Media == decryptedMedia); if (decryptedMessage != null) { var mediaPhoto = decryptedMessage.Media as TLDecryptedMessageMediaPhoto; if (mediaPhoto != null) { mediaPhoto.DownloadingProgress = 1.0; var fileName = item.IsoFileName; using (var store = IsolatedStorageFile.GetUserStoreForApplication()) { byte[] buffer; using (var file = store.OpenFile(fileName, FileMode.Open, FileAccess.Read)) { buffer = new byte[file.Length]; file.Read(buffer, 0, buffer.Length); } var fileLocation = decryptedMessage.Media.File as TLEncryptedFile; if (fileLocation == null) { return; } var decryptedBuffer = Telegram.Api.Helpers.Utils.AesIge(buffer, mediaPhoto.Key.Data, mediaPhoto.IV.Data, false); var newFileName = String.Format("{0}_{1}_{2}.jpg", fileLocation.Id, fileLocation.DCId, fileLocation.AccessHash); using (var file = store.OpenFile(newFileName, FileMode.OpenOrCreate, FileAccess.Write)) { file.Write(decryptedBuffer, 0, decryptedBuffer.Length); } store.DeleteFile(fileName); } if (!decryptedMedia.IsCanceled) { decryptedMedia.NotifyOfPropertyChange(() => decryptedMedia.Self); } } var mediaVideo = decryptedMessage.Media as TLDecryptedMessageMediaVideo; if (mediaVideo != null) { mediaVideo.DownloadingProgress = 1.0; var fileName = item.IsoFileName; using (var store = IsolatedStorageFile.GetUserStoreForApplication()) { byte[] buffer; using (var file = store.OpenFile(fileName, FileMode.Open, FileAccess.Read)) { buffer = new byte[file.Length]; file.Read(buffer, 0, buffer.Length); } var fileLocation = decryptedMessage.Media.File as TLEncryptedFile; if (fileLocation == null) { return; } var decryptedBuffer = Telegram.Api.Helpers.Utils.AesIge(buffer, mediaVideo.Key.Data, mediaVideo.IV.Data, false); var newFileName = String.Format("{0}_{1}_{2}.mp4", fileLocation.Id, fileLocation.DCId, fileLocation.AccessHash); using (var file = store.OpenFile(newFileName, FileMode.OpenOrCreate, FileAccess.Write)) { file.Write(decryptedBuffer, 0, decryptedBuffer.Length); } store.DeleteFile(fileName); } } var mediaDocument = decryptedMessage.Media as TLDecryptedMessageMediaDocument; if (mediaDocument != null) { if (decryptedMessage.IsVoice()) { var fileLocation = decryptedMessage.Media.File as TLEncryptedFile; if (fileLocation == null) { return; } var fileName = item.IsoFileName; var decryptedFileName = String.Format("audio{0}_{1}.mp3", fileLocation.Id, fileLocation.AccessHash); using (var store = IsolatedStorageFile.GetUserStoreForApplication()) { byte[] buffer; using (var file = store.OpenFile(fileName, FileMode.Open, FileAccess.Read)) { buffer = new byte[file.Length]; file.Read(buffer, 0, buffer.Length); } var decryptedBuffer = Telegram.Api.Helpers.Utils.AesIge(buffer, mediaDocument.Key.Data, mediaDocument.IV.Data, false); using (var file = store.OpenFile(decryptedFileName, FileMode.OpenOrCreate, FileAccess.Write)) { file.Write(decryptedBuffer, 0, decryptedBuffer.Length); } store.DeleteFile(fileName); } Telegram.Api.Helpers.Execute.BeginOnUIThread(() => { MessagePlayerControl.ConvertAndSaveOpusToWav(mediaDocument); mediaDocument.DownloadingProgress = 1.0; }); } else if (decryptedMessage.IsVideo()) { mediaDocument.DownloadingProgress = 1.0; var fileName = item.IsoFileName; using (var store = IsolatedStorageFile.GetUserStoreForApplication()) { byte[] buffer; using (var file = store.OpenFile(fileName, FileMode.Open, FileAccess.Read)) { buffer = new byte[file.Length]; file.Read(buffer, 0, buffer.Length); } var fileLocation = decryptedMessage.Media.File as TLEncryptedFile; if (fileLocation == null) { return; } var decryptedBuffer = Telegram.Api.Helpers.Utils.AesIge(buffer, mediaDocument.Key.Data, mediaDocument.IV.Data, false); var newFileName = String.Format("{0}_{1}_{2}.mp4", fileLocation.Id, fileLocation.DCId, fileLocation.AccessHash); using (var file = store.OpenFile(newFileName, FileMode.OpenOrCreate, FileAccess.Write)) { file.Write(decryptedBuffer, 0, decryptedBuffer.Length); } store.DeleteFile(fileName); } } else { mediaDocument.DownloadingProgress = 1.0; var fileName = item.IsoFileName; using (var store = IsolatedStorageFile.GetUserStoreForApplication()) { byte[] buffer; using (var file = store.OpenFile(fileName, FileMode.Open, FileAccess.Read)) { buffer = new byte[file.Length]; file.Read(buffer, 0, buffer.Length); } var fileLocation = decryptedMessage.Media.File as TLEncryptedFile; if (fileLocation == null) { return; } var decryptedBuffer = Telegram.Api.Helpers.Utils.AesIge(buffer, mediaDocument.Key.Data, mediaDocument.IV.Data, false); var newFileName = String.Format("{0}_{1}_{2}.{3}", fileLocation.Id, fileLocation.DCId, fileLocation.AccessHash, fileLocation.FileExt ?? mediaDocument.FileExt); using (var file = store.OpenFile(newFileName, FileMode.OpenOrCreate, FileAccess.Write)) { file.Write(decryptedBuffer, 0, decryptedBuffer.Length); } store.DeleteFile(fileName); } } } var mediaAudio = decryptedMessage.Media as TLDecryptedMessageMediaAudio; if (mediaAudio != null) { var fileLocation = decryptedMessage.Media.File as TLEncryptedFile; if (fileLocation == null) { return; } var fileName = item.IsoFileName; var decryptedFileName = String.Format("audio{0}_{1}.mp3", fileLocation.Id, fileLocation.AccessHash); using (var store = IsolatedStorageFile.GetUserStoreForApplication()) { byte[] buffer; using (var file = store.OpenFile(fileName, FileMode.Open, FileAccess.Read)) { buffer = new byte[file.Length]; file.Read(buffer, 0, buffer.Length); } var decryptedBuffer = Telegram.Api.Helpers.Utils.AesIge(buffer, mediaAudio.Key.Data, mediaAudio.IV.Data, false); using (var file = store.OpenFile(decryptedFileName, FileMode.OpenOrCreate, FileAccess.Write)) { file.Write(decryptedBuffer, 0, decryptedBuffer.Length); } store.DeleteFile(fileName); } Telegram.Api.Helpers.Execute.BeginOnUIThread(() => { MessagePlayerControl.ConvertAndSaveOpusToWav(mediaAudio); mediaAudio.DownloadingProgress = 1.0; }); } } } }