/// <summary> /// Gets triggered if one of the buttons of a cell in the table view was touched. /// </summary> /// <param name="cell">Cell.</param> /// <param name="button">Button.</param> /// <param name="action">Action.</param> async void HandleActionRequested(DownloaderCell cell, UIButton button, DownloaderCell.TRANSFER_ACTION action) { // Get the index of the cell in the table view. var path = this.TableView.IndexPathForCell(cell); if (path == null) { return; } int index = path.Row; // Get the related download info object. var downloadInfo = AppDelegate.AvailableDownloads[index]; // Via the task identifier we can get back to the enqueued task. var pendingTasks = await this.Session.GetTasksAsync(); NSUrlSessionDownloadTask downloadTask = pendingTasks.DownloadTasks.FirstOrDefault(t => t.TaskIdentifier == downloadInfo.TaskId); switch (action) { case DownloaderCell.TRANSFER_ACTION.Download: Console.WriteLine("Creating new download task."); // Create a new download task. downloadTask = this.Session.CreateDownloadTask(NSUrl.FromString(downloadInfo.Source)); // The creation can fail. if (downloadTask == null) { new UIAlertView(string.Empty, "Failed to create download task! Please retry.", null, "OK").Show(); return; } // Update the download info object. downloadInfo.TaskId = (int)downloadTask.TaskIdentifier; downloadInfo.Status = DownloadInfo.STATUS.Downloading; // Resume / start the download. downloadTask.Resume(); Console.WriteLine("Starting download of '{0}'. State of task: '{1}'. ID: '{2}'", downloadInfo.Title, downloadTask.State, downloadTask.TaskIdentifier); /* * // If this code is commented in, the app will exit immediately after the downlaod has been initiated. * // When the download completes, iOS will relaunch the app and the UI will reflect the current state. * AppDelegate.SerializeAvailableDownloads (); * Exit (3); */ break; case DownloaderCell.TRANSFER_ACTION.Stop: if (downloadTask != null) { downloadTask.Cancel(); } downloadInfo.Reset(); downloadInfo.Status = DownloadInfo.STATUS.Cancelled; Console.WriteLine("Stopping download of '{0}'.", downloadInfo.Title); break; case DownloaderCell.TRANSFER_ACTION.View: break; } // Update UI. cell.UpdateFromDownloadInfo(downloadInfo); }
/// <summary> /// Gets triggered if one of the buttons of a cell in the table view was touched. /// </summary> /// <param name="cell">Cell.</param> /// <param name="button">Button.</param> /// <param name="action">Action.</param> async void HandleActionRequested(DownloaderCell cell, UIButton button, DownloaderCell.TRANSFER_ACTION action) { // Get the index of the cell in the table view. var path = this.TableView.IndexPathForCell (cell); if (path == null) { return; } int index = path.Row; // Get the related download info object. var downloadInfo = AppDelegate.AvailableDownloads[index]; // Via the task identifier we can get back to the enqueued task. var pendingTasks = await this.Session.GetTasksAsync (); NSUrlSessionDownloadTask downloadTask = pendingTasks.DownloadTasks.FirstOrDefault (t => t.TaskIdentifier == downloadInfo.TaskId); switch(action) { case DownloaderCell.TRANSFER_ACTION.Download: Console.WriteLine ("Creating new download task."); // Create a new download task. downloadTask = this.Session.CreateDownloadTask (NSUrl.FromString (downloadInfo.Source)); // The creation can fail. if (downloadTask == null) { new UIAlertView (string.Empty, "Failed to create download task! Please retry.", null, "OK").Show (); return; } // Update the download info object. downloadInfo.TaskId = (int)downloadTask.TaskIdentifier; downloadInfo.Status = DownloadInfo.STATUS.Downloading; // Resume / start the download. downloadTask.Resume (); Console.WriteLine ("Starting download of '{0}'. State of task: '{1}'. ID: '{2}'", downloadInfo.Title, downloadTask.State, downloadTask.TaskIdentifier); /* // If this code is commented in, the app will exit immediately after the downlaod has been initiated. // When the download completes, iOS will relaunch the app and the UI will reflect the current state. AppDelegate.SerializeAvailableDownloads (); Exit (3); */ break; case DownloaderCell.TRANSFER_ACTION.Stop: if (downloadTask != null) { downloadTask.Cancel (); } downloadInfo.Reset (); downloadInfo.Status = DownloadInfo.STATUS.Cancelled; Console.WriteLine ("Stopping download of '{0}'.", downloadInfo.Title); break; case DownloaderCell.TRANSFER_ACTION.View: break; } // Update UI. cell.UpdateFromDownloadInfo (downloadInfo); }