コード例 #1
0
        /// <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;
                //}
            }
        }
コード例 #2
0
        //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;
                }
            }
        }