public void MockDownloadAsset(MusicAsset asset)
        {
            mockDownloadAsset = asset;

            AssetDownloadStateChanged?.Invoke(this, new MusicAssetDownloadStateChangeArgs(asset.Music, MusicAssetDownloadState.Downloading));

            var rand = new Random();

            double progress = 0;

            Task.Run(async() =>
            {
                while (progress <= 1)
                {
                    await Task.Delay(TimeSpan.FromSeconds(1));

                    AssetDownloadProgressChanged?.Invoke(this, new MusicAssetDownloadProgressChangeArgs(asset.Music, progress));

                    double inc = (double)rand.Next(1, 15) / 100;

                    progress += inc;
                }

                await Task.Delay(TimeSpan.FromSeconds(1));

                mockDownloadAsset = null;

                AssetDownloadProgressChanged?.Invoke(this, new MusicAssetDownloadProgressChangeArgs(asset.Music, 1));

                AssetDownloadStateChanged?.Invoke(this, new MusicAssetDownloadStateChangeArgs(asset.Music, MusicAssetDownloadState.Downloaded));
            });
        }
        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));
            }
        }