Exemple #1
0
        public void TestExecute()
        {
            WebRequestFactory.Current = new TestWebRequestFactory();
            var          connectClient = new LiveConnectClient(new LiveConnectSession());
            var          requestUrl    = new Uri("http://foo.com");
            IStorageFile outputFile    = new StorageFileStub();
            IProgress <LiveOperationProgress> progress    = new Progress <LiveOperationProgress>();
            SynchronizationContextWrapper     syncContext = SynchronizationContextWrapper.Current;

            var tailoredDownloadOperation =
                new TailoredDownloadOperation(connectClient, requestUrl, outputFile, progress, syncContext);
        }
Exemple #2
0
        /// <summary>
        /// Download a file to disk.
        /// </summary>
        /// <param name="path">relative or absolute uri to the file to be downloaded.</param>
        /// <param name="outputFile">the file that the downloaded content is written to.</param>
        /// <param name="ct">a token that is used to cancel the download operation.</param>
        /// <param name="progress">a delegate that is called to report the download progress.</param>
        /// <returns>TODO</returns>
        internal Task <LiveDownloadOperationResult> InternalDownloadAsync(
            string path,
            IStorageFile outputFile,
            CancellationToken ct,
            IProgress <LiveOperationProgress> progress)
        {
            if (this.Session == null)
            {
                throw new LiveConnectException(ApiOperation.ApiClientErrorCode, ResourceHelper.GetString("UserNotLoggedIn"));
            }

            var tcs = new TaskCompletionSource <LiveDownloadOperationResult>();

            var op = new TailoredDownloadOperation(
                this,
                this.GetResourceUri(path, ApiMethod.Download),
                outputFile,
                progress,
                null);

            op.OperationCompletedCallback = (LiveDownloadOperationResult result) =>
            {
                if (result.IsCancelled)
                {
                    tcs.TrySetCanceled();
                }
                else if (result.Error != null)
                {
                    tcs.TrySetException(result.Error);
                }
                else
                {
                    tcs.TrySetResult(result);
                }
            };

            ct.Register(op.Cancel);

            op.Execute();

            return(tcs.Task);
        }