public async Task UpdateDurationAsync(long id, IBinder binder, CancellationToken token) { //var id = RegEx.NumberExtractor.Match(assetName).Value; var containerName = await _videoService.GetAssetContainerAsync(id, AssetType.Long, token); var container = await binder.BindAsync <CloudBlobContainer>(new BlobAttribute(containerName), token); var blobs = await container.ListBlobsSegmentedAsync(null, null); var blob = blobs.Results.OfType <CloudBlockBlob>() .First(f => f.Name.EndsWith("manifest.json")); var str = await blob.DownloadTextAsync(); dynamic json = JToken.Parse(str); string durationXml = json.AssetFile[0].Duration; var v = XmlConvert.ToTimeSpan(durationXml); var blobDirectoryFiles = await binder.BindAsync <IEnumerable <CloudBlockBlob> >(new BlobAttribute($"spitball-files/files/{id}"), token); var originalVideoBlob = blobDirectoryFiles.Single(s => s.Name.Contains("/file-", StringComparison.OrdinalIgnoreCase)); var url = originalVideoBlob.GetDownloadLink(TimeSpan.FromHours(1)); await _videoService.CreatePreviewJobAsync(id, url.AbsoluteUri, v, token); var command = UpdateDocumentMetaCommand.Video(id, v); await _commandBus.DispatchAsync(command, token); }