public override void DidResolveMediaSelection(NSUrlSession session, AVAssetDownloadTask assetDownloadTask, AVMediaSelection resolvedMediaSelection) { Log.Debug($"DidResolveMediaSelection: {assetDownloadTask?.TaskDescription} | {resolvedMediaSelection.Asset}"); // You should be sure to use this delegate callback to keep a reference // to `resolvedMediaSelection` so that in the future you can use it to // download additional media selections. mediaSelectionMap [assetDownloadTask] = resolvedMediaSelection; }
public override void DidFinishDownloadingToUrl(NSUrlSession session, AVAssetDownloadTask assetDownloadTask, NSUrl location) { //Log.Debug ($"DidFinishDownloadingToUrl: {assetDownloadTask?.TaskDescription} | {location}"); // This delegate callback should only be used to save the location URL // somewhere in your application. Any additional work should be done in // `URLSessionTaskDelegate.urlSession(_:task:didCompleteWithError:)`. MusicAsset asset; if (activeDownloadsMap.TryGetValue(assetDownloadTask, out asset)) { SettingsStudio.Settings.SetSetting(asset.Id, location.RelativePath); } }
public override void DidLoadTimeRange(NSUrlSession session, AVAssetDownloadTask assetDownloadTask, CMTimeRange timeRange, NSValue [] loadedTimeRanges, CMTimeRange timeRangeExpectedToLoad) { //Log.Debug ($"DidLoadTimeRange: {assetDownloadTask?.TaskDescription}"); var asset = activeDownloadsMap [assetDownloadTask]; if (asset != null) { var percentComplete = 0.0; // Iterate through the loaded time ranges foreach (var val in loadedTimeRanges) { // Unwrap the CMTimeRange from the NSValue var loadedTimeRange = val.CMTimeRangeValue; // Calculate the percentage of the total expected asset duration percentComplete += loadedTimeRange.Duration.Seconds / timeRangeExpectedToLoad.Duration.Seconds; } AssetDownloadProgressChanged?.Invoke(this, new MusicAssetDownloadProgressChangeArgs(asset.Music, percentComplete)); } }