/// <summary> /// Observe a file transfer, hold the observation. /// </summary> public void Observe(WCSessionFileTransfer fileTransfer, Action <NSProgress> handler) { var observation = fileTransfer.Progress.AddObserver("fractionCompleted", NSKeyValueObservingOptions.New, (_) => { handler(fileTransfer.Progress); }); this.observations.Add(observation); this.fileTransfers.Add(fileTransfer); }
/// <summary> /// Unobserve a file transfer, invalidate the observation. /// </summary> public void Unobserve(WCSessionFileTransfer fileTransfer) { var index = this.fileTransfers.IndexOf(fileTransfer); if (index != -1) { var observation = this.observations[index]; observation.Dispose(); this.observations.RemoveAt(index); this.fileTransfers.RemoveAt(index); } }
/// <summary> /// Log the file transfer progress. /// </summary> private void LogProgress(WCSessionFileTransfer fileTransfer) { DispatchQueue.MainQueue.DispatchAsync(() => { var dateFormatter = new NSDateFormatter { TimeStyle = NSDateFormatterStyle.Medium }; var timeString = dateFormatter.StringFor(new NSDate()); var fileName = fileTransfer.File.FileUrl.LastPathComponent; var progress = fileTransfer.Progress.LocalizedDescription ?? "No progress"; this.Log($"- {fileName}: {progress} at {timeString}"); }); }