/// <summary>
        /// This function is for demo purposes. It adds three files to the background download queue and displays them in the multi-select list.
        /// </summary>
        private void OnAddButtonClick(object sender, EventArgs e)
        {
            Dictionary <string, Uri> urlPresets = new Dictionary <string, Uri>
            {
                { "21 MB File", new Uri("http://media.ch9.ms/ch9/ecbc/cfcb0ad7-fbdd-47b0-aabf-4da5e3e0ecbc/WP8JumpStart06.mp3", UriKind.Absolute) },
                { "34 MB File", new Uri("http://media.ch9.ms/ch9/7e13/ce6ea97c-e233-4e7c-a74d-ee1c81e37e13/WP8JumpStart04.mp3", UriKind.Absolute) },
                { "92 MB File", new Uri("http://media.ch9.ms/ch9/7e13/ce6ea97c-e233-4e7c-a74d-ee1c81e37e13/WP8JumpStart04.wmv", UriKind.Absolute) },
            };

            foreach (var preset in urlPresets)
            {
                Uri saveLocation = new Uri("/shared/transfers/" + preset.Key, UriKind.Relative);
                BackgroundTransferRequest request = new BackgroundTransferRequest(preset.Value, saveLocation)
                {
                    TransferPreferences = TransferPreferences.AllowBattery   // Note: this will not use cellular data to download
                };
                TransferMonitor monitor = new TransferMonitor(request, preset.Key);
                try
                {
                    BackgroundTransferService.Add(request);
                }
                catch (Exception err) // An exception is thrown if this transfer is already requested.
                {
                    Debug.WriteLine(err);
                    continue;
                }
                monitor.Failed += TransferCanceled;
                _list.Add(monitor);
            }
        }
 private void OnCancelButtonClick(object sender, EventArgs e)
 {
     while (TransfersList.SelectedItems.Count > 0)
     {
         TransferMonitor monitor = (TransferMonitor)TransfersList.SelectedItems[0];
         if (monitor != null)
         {
             monitor.RequestCancel();
         }
         _list.Remove(monitor);
     }
 }
        public BackgroundTransferControl()
        {
            InitializeComponent();

            _request = BackgroundTransferService.Requests.FirstOrDefault(s => s.Tag == "Channel9Download");

            if (_request != null)
            {
                _monitor             = new TransferMonitor(_request);
                _monitor.Failed     += TransferFailed;
                Control1.DataContext = _monitor;
            }
        }
        private void RestartDownload()
        {
            try
            {
                BackgroundTransferService.Remove(_request);
            }
            catch (Exception)
            {
                //No need to worry. These errors can be surpressed. We are just making sure the download has been completed cancelled.
            }

            _request = null;
            _monitor = null;

            BeginDownload();
        }
示例#5
0
        public async Task DownloadRulesFileAsync()
        {
            await Task.Yield();

            Uri requestUri  = new Uri(this.RulesUri);
            Uri downloadUri = new Uri(this.localFileName, UriKind.RelativeOrAbsolute);
            BackgroundTransferRequest req = new BackgroundTransferRequest(requestUri, downloadUri)
            {
                TransferPreferences = TransferPreferences.AllowCellularAndBattery
            };

            BackgroundTransferService.Add(req);

            TransferMonitor monitor = new TransferMonitor(req);

            monitor.Complete += (sender, args) => BackgroundTransferService.Remove(args.Request);
        }
        /// <summary>
        /// This clears all completed transfers from the transfer queue
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ClearCompletedItems(object sender, EventArgs e)
        {
            var i = 0;

            // Perhaps a goofy looking iteration, but a foreach will not work because items are being removed from _list
            while (i < _list.Count)
            {
                if (_list.ElementAt(i).State == TransferRequestState.Complete)
                {
                    TransferMonitor monitor = _list.ElementAt(i);
                    monitor.RequestCancel(); //ensures that the request is removed from the queue, even if complete
                    UnsubscribeMonitor(monitor);
                    _list.RemoveAt(i);
                }
                else
                {
                    i++;
                }
            }
        }
        private void BeginDownload()
        {
            using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
            {
                if (storage.FileExists("/shared/transfers/channel9.mp3"))
                {
                    storage.DeleteFile("/shared/transfers/channel9.mp3");
                }
            }

            _request = new BackgroundTransferRequest(
                new Uri("http://media.ch9.ms/ch9/7e13/ce6ea97c-e233-4e7c-a74d-ee1c81e37e13/WP8JumpStart04.mp3",
                        UriKind.Absolute),
                new Uri("/shared/transfers/channel9.mp3", UriKind.Relative))
            {
                Tag = "Channel9Download", TransferPreferences = TransferPreferences.AllowBattery
            };
            _monitor             = new TransferMonitor(_request);
            Control1.DataContext = _monitor;

            _monitor.RequestStart(); //This adds request to the BackgroundTransferService queue.
        }
        public BackgroundTransferQueue()
        {
            InitializeComponent();

            // Load existing background requests into the collection

            foreach (BackgroundTransferRequest request in BackgroundTransferService.Requests)
            {
                var monitor = new TransferMonitor(request);
                SubscribeMonitor(monitor);
                _list.Add(monitor);
            }

            TransfersList.DataContext = _list;


            // Subscribe buttons to actions
            _selectButton.Click     += OnSelectButtonClick;
            _addButton.Click        += OnAddButtonClick;
            _cancelButton.Click     += OnCancelButtonClick;
            _list.CollectionChanged += delegate { _selectButton.IsEnabled = (_list.Count > 0); };

            ReloadApplicationBar();
        }
示例#9
0
 private void StartDownload(BackgroundTransferRequest request)
 {
     if (request.TransferStatus == TransferStatus.Completed)
     {
         OnCompletion(request);
     }
     else if (request.TransferStatus == TransferStatus.Unknown)
     {
         OnFailure(request);
     }
     else
     {
         Monitor           = new TransferMonitor(request);
         Monitor.Complete += (_, args) => { OnCompletion(request); };
         Monitor.Failed   += (_, args) =>
         {
             OnFailure(request);
             if (args.Request.StatusCode == 206 && args.Request.TotalBytesToReceive > 100000000 && args.Request.TransferPreferences == TransferPreferences.AllowCellularAndBattery)
             {
                 var newRequest = new BackgroundTransferRequest(args.Request.RequestUri, args.Request.DownloadLocation)
                 {
                     Tag = args.Request.Tag,
                     TransferPreferences = TransferPreferences.None,
                 };
                 StartDownload(newRequest);
             }
         };
         if (request.TransferStatus == TransferStatus.None)
         {
             IsolatedStorage.WriteAllText(GetBaseFilename() + CourseTopicNameSuffix, CourseTopicName);
             IsolatedStorage.WriteAllText(GetBaseFilename() + LectureTitleSuffix, LectureTitle);
             IsolatedStorage.WriteAllText(GetBaseFilename() + IndexSuffix, Index.ToString());
             Monitor.RequestStart();
         }
     }
 }
 private void UnsubscribeMonitor(TransferMonitor monitor)
 {
     monitor.Failed -= TransferCanceled;
 }
 public void SubscribeMonitor(TransferMonitor monitor)
 {
     UnsubscribeMonitor(monitor); // prevent duplicate subscription
     monitor.Failed += TransferCanceled;
 }
 private TransferMonitorViewModel(TransferMonitor monitor)
 {
     Monitor = monitor;
 }