Esempio n. 1
0
        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);
        }