/// <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(); }
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(); }
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; }