/// <summary> /// Populates the page with content passed during navigation. Any saved state is also /// provided when recreating a page from a prior session. /// </summary> /// <param name="navigationParameter">The parameter value passed to /// <see cref="Frame.Navigate(Type, Object)"/> when this page was initially requested. /// </param> /// <param name="pageState">A dictionary of state preserved by this page during an earlier /// session. This will be null the first time a page is visited.</param> protected override async void LoadState(Object navigationParameter, Dictionary <String, Object> pageState) { var app = Application.Current as App; var loader = new ResourceLoader(); if (app.needToDownload == false) { needtoGoBack = true; return; } app.needToDownload = false; var item = navigationParameter as DownloadMagazine; if (item != null) { statusText.Text = loader.GetString("download_progress"); var url = item.url; LoadSnappedSource(); //magList.Visibility = Windows.UI.Xaml.Visibility.Collapsed; downloadView.Visibility = Windows.UI.Xaml.Visibility.Visible; try { var folder = await app.Manager.AddMagazineFolderStructure(url); Windows.UI.Xaml.Media.Imaging.BitmapSource bitmap = null; try { bitmap = await app.Manager.DownloadThumbnailAsync(url, folder); } catch { } if (bitmap == null) { var messageDialog = new MessageDialog(loader.GetString("download_failed")); var commands = new List <UICommand>(); var close = new UICommand(loader.GetString("close")); close.Invoked = closeCommandHandler; messageDialog.Commands.Clear(); messageDialog.Commands.Add(close); var task = messageDialog.ShowAsync().AsTask(); return; } pdfThumbnail.Width = bitmap.PixelWidth * pdfThumbnail.Height / bitmap.PixelHeight; pdfThumbnail.Source = bitmap; pRing.IsActive = false; var progressIndicator = new Progress <int>((value) => { if (statusText.Text != app.Manager.StatusText) { statusText.Text = app.Manager.StatusText; } progressBar.Value = value; }); cts = new CancellationTokenSource(); IRandomAccessStream stream = null; if (item.redirectUrl == null) { stream = await app.Manager.DownloadMagazineAsync(url, folder, item.IsSampleDownloaded, progressIndicator, cts.Token); } else { stream = await app.Manager.DownloadMagazineAsync(url, item.redirectUrl, folder, item.IsSampleDownloaded, progressIndicator, cts.Token); } if (stream == null) { return; } statusText.Text = loader.GetString("done"); await app.Manager.MarkAsDownloaded(url, folder, item.IsSampleDownloaded); await Task.Delay(1000); var mag = DownloadManager.GetLocalUrl(app.Manager.MagazineLocalUrl, url.FullName); this.Frame.Navigate(typeof(PdfViewPage), new MagazineData() { stream = stream, folderUrl = mag.FolderPath }); } catch (Exception ex) { statusText.Text = "Error"; if (ex.Message == "Response status code does not indicate success: 403 (Forbidden).") { var messageDialog = new MessageDialog(loader.GetString("download_failed")); var commands = new List <UICommand>(); var close = new UICommand(loader.GetString("close")); close.Invoked = closeCommandHandler; messageDialog.Commands.Clear(); messageDialog.Commands.Add(close); var task = messageDialog.ShowAsync().AsTask(); return; } else if (ex.Message == "The operation was canceled.") { var messageDialog = new MessageDialog(loader.GetString("download_failed")); var commands = new List <UICommand>(); var close = new UICommand(loader.GetString("close")); close.Invoked = closeCommandHandler; messageDialog.Commands.Clear(); messageDialog.Commands.Add(close); var task = messageDialog.ShowAsync().AsTask(); return; } else { var messageDialog = new MessageDialog("Unexpected error"); var commands = new List <UICommand>(); var close = new UICommand(loader.GetString("close")); close.Invoked = closeCommandHandler; messageDialog.Commands.Clear(); messageDialog.Commands.Add(close); var task = messageDialog.ShowAsync().AsTask(); return; } } } else { //string s = navigationParameter as string; //if (s == "test") //{ // testView.Visibility = Windows.UI.Xaml.Visibility.Visible; //} //else //{ // needtoGoBack = true; //} } }
//private async Task<StorageFile> CreateMetadataFile(string name) //{ // //var roamingFolder = Windows.Storage.ApplicationData.Current.RoamingFolder; // var roamingFolder = KnownFolders.DocumentsLibrary; // var file = await roamingFolder.CreateFileAsync(name + ".pmd", CreationCollisionOption.ReplaceExisting); // folder = await roamingFolder.CreateFolderAsync(name, CreationCollisionOption.GenerateUniqueName); // var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite); // using (var outputStream = stream.GetOutputStreamAt(0)) // using (var dataWriter = new DataWriter(outputStream)) // { // string data = name + "\r\n" + DateTime.Today.Month.ToString() + "/" + DateTime.Today.Day.ToString() + "/" + DateTime.Today.Year.ToString() + "\r\n"; // dataWriter.WriteString(data); // await dataWriter.StoreAsync(); // await outputStream.FlushAsync(); // } // return file; //} //private async Task<IRandomAccessStream> DownloadFileAsyncWithProgress(string url, StorageFile pdfFile, IProgress<int> progress = null, CancellationToken cancelToken = default(CancellationToken)) //{ // HttpClient client = new HttpClient(); // HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, url); // int read = 0; // int offset = 0; // byte[] responseBuffer = new byte[1024]; // var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancelToken); // var length = response.Content.Headers.ContentLength; // cancelToken.ThrowIfCancellationRequested(); // var stream = new InMemoryRandomAccessStream(); // using (var responseStream = await response.Content.ReadAsStreamAsync()) // { // do // { // cancelToken.ThrowIfCancellationRequested(); // read = await responseStream.ReadAsync(responseBuffer, 0, responseBuffer.Length); // cancelToken.ThrowIfCancellationRequested(); // await stream.AsStream().WriteAsync(responseBuffer, 0, read); // offset += read; // int val = (int)(offset * 100 / length); // progress.Report(val); // } // while (read != 0); // } // await stream.FlushAsync(); // using (var protectedStream = await DownloadManager.ProtectPDFStream(stream)) // using (var fileStream = await pdfFile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite)) // //using (var unprotectedStream = await UnprotectPDFStream(protectedStream)) // { // await RandomAccessStream.CopyAsync(protectedStream, fileStream.GetOutputStreamAt(0)); // await fileStream.FlushAsync(); // } // return stream; //} //private async Task GetUrlsFromPDF(IRandomAccessStream stream) //{ // using (var dataReader = new DataReader(stream.GetInputStreamAt(0))) // { // uint u = await dataReader.LoadAsync((uint)stream.Size); // IBuffer buffer = dataReader.ReadBuffer(u); // GetPDFLinks(buffer); // TimeSpan t = new TimeSpan(0, 0, 1); // await Task.Delay(t); // } //} //private void GetPDFLinks(IBuffer buffer) //{ // var document = Document.Create( // buffer, // - file // DocumentType.PDF, // type // 72 // - dpi // ); // var linkVistor = new LinkInfoVisitor(); // linkVistor.OnURILink += linkVistor_OnURILink; // for (int i = 0; i < document.PageCount; i++) // { // var links = document.GetLinks(i); // for (int j = 0; j < links.Count; j++) // { // links[j].AcceptVisitor(linkVistor); // } // } //} //void linkVistor_OnURILink(LinkInfoVisitor __param0, LinkInfoURI __param1) //{ // string str = __param1.URI; // if (str.Contains("localhost")) // { // links.Add(str); // } //} //private async Task DownloadAssetsAsync(StorageFile metadataFile) //{ // var absLinks = new List<string>(); // foreach (var link in links) // { // string absLink = link; // var pos = absLink.IndexOf('?'); // if (pos >= 0) absLink = link.Substring(0, pos); // string fileName = absLink.Replace("http://localhost/", ""); // string linkString = ""; // linkString = folder.Path + "\\" + absLink.Replace("http://localhost/", "") + "\r\n"; // absLink = absLink.Replace("http://localhost/", "http://librelio-europe.s3.amazonaws.com/niveales/wind/windfree_albeau2012/"); // absLinks.Add(absLink); // var progressIndicator = new Progress<int>((value) => progressBar.Value = value); // cts = new CancellationTokenSource(); // var sampleFile = await folder.CreateFileAsync(fileName + ".pmd", CreationCollisionOption.ReplaceExisting); // await DownloadFileAsyncWithProgress(absLink, sampleFile, progressIndicator, cts.Token); // using (var fileStream = await metadataFile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite)) // using (var dataReader = new DataReader(fileStream.GetInputStreamAt(0))) // using (var dataWriter = new DataWriter(fileStream.GetOutputStreamAt(0))) // { // var len = await dataReader.LoadAsync((uint)fileStream.Size); // var data = dataReader.ReadString((uint)len); // var size = dataWriter.WriteString(data + linkString); // await fileStream.FlushAsync(); // await dataWriter.StoreAsync(); // } // } //} private async void itemListView_ItemClick(object sender, ItemClickEventArgs e) { Item item = (Item)e.ClickedItem; var loader = new ResourceLoader(); statusText.Text = loader.GetString("download_progress"); var app = Application.Current as App; foreach (var url in app.Manager.MagazineUrl) { if (url.FullName == item.FullName) { //magList.Visibility = Windows.UI.Xaml.Visibility.Collapsed; downloadView.Visibility = Windows.UI.Xaml.Visibility.Visible; var folder = await app.Manager.AddMagazineFolderStructure(url); var bitmap = await app.Manager.DownloadThumbnailAsync(url, folder); pdfThumbnail.Width = bitmap.PixelWidth * pdfThumbnail.Height / bitmap.PixelHeight; pdfThumbnail.Source = bitmap; pRing.IsActive = false; var progressIndicator = new Progress <int>((value) => { if (statusText.Text != app.Manager.StatusText) { statusText.Text = app.Manager.StatusText; } progressBar.Value = value; }); cts = new CancellationTokenSource(); try { var stream = await app.Manager.DownloadMagazineAsync(url, folder, false, progressIndicator, cts.Token); if (stream == null) { return; } statusText.Text = loader.GetString("done"); await app.Manager.MarkAsDownloaded(url, folder, false); await Task.Delay(1000); var mag = DownloadManager.GetLocalUrl(app.Manager.MagazineLocalUrl, item.FullName); this.Frame.Navigate(typeof(PdfViewPage), new MagazineData() { stream = stream, folderUrl = mag.FolderPath }); } catch (Exception ex) { statusText.Text = "Error"; if (ex.Message == "Response status code does not indicate success: 403 (Forbidden).") { var messageDialog = new MessageDialog(loader.GetString("download_failed")); var commands = new List <UICommand>(); var close = new UICommand(loader.GetString("close")); close.Invoked = closeCommandHandler; messageDialog.Commands.Clear(); messageDialog.Commands.Add(close); var task = messageDialog.ShowAsync().AsTask(); return; } else if (ex.Message == "The operation was canceled.") { var messageDialog = new MessageDialog(loader.GetString("download_failed")); var commands = new List <UICommand>(); var close = new UICommand(loader.GetString("close")); close.Invoked = closeCommandHandler; messageDialog.Commands.Clear(); messageDialog.Commands.Add(close); var task = messageDialog.ShowAsync().AsTask(); return; } else { var messageDialog = new MessageDialog("Unexpected error"); var commands = new List <UICommand>(); var close = new UICommand(loader.GetString("close")); close.Invoked = closeCommandHandler; messageDialog.Commands.Clear(); messageDialog.Commands.Add(close); var task = messageDialog.ShowAsync().AsTask(); return; } } return; } } }