Example #1
0
        public IEnumerable <IMetaData> GetMetadatasFromAList(string pathToFile, int numberOfLines, bool order = false)
        {
            Console.WriteLine($"Inside {nameof(TplDataflow9FullSampleControllerWithExecutionBlocks)} - {nameof(GetMetadatasFromAList)}");
            CommonHelpers.CleanWorkingDirectory(SavedImageDirectory);
            var listOfMetadata = new List <IMetaData>();

            if (string.IsNullOrWhiteSpace(pathToFile))
            {
                return(Functions.ReturnOnlyOneMetadaInError("The path file is null or empty"));
            }

            if (numberOfLines < 1)
            {
                return(Functions.ReturnOnlyOneMetadaInError("You aks for number of line lower than 1"));
            }


            // Create the members of the pipeline.
            var transformBlockStreamTextContent = new TransformBlock <string, string>(uri =>
                                                                                      Functions.StreamTextContent(uri)
                                                                                      );
            var transformBlockTranformContentIntoListOfUri = new TransformBlock <string, IList <string> >(content =>
                                                                                                          Functions.TranformContentIntoListOfUri(content, numberOfLines)
                                                                                                          );
            var transformManyBlockTransformListIntoSeveralUris = new TransformManyBlock <IList <string>, string>(listOfUri =>
                                                                                                                 Functions.TransformListIntoSeveralUris(listOfUri)
                                                                                                                 );
            var transformBlockDownloadImageData = new TransformBlock <string, IMetaData>(url =>
                                                                                         Functions.DownloadImageData(url, SavedImageDirectory)
                                                                                         );
            var actionBlockSetStatusOfProcess = new ActionBlock <IMetaData>(metadata =>
                                                                            Functions.SetStatusOfProcess(listOfMetadata, metadata)
                                                                            );


            // Connect the dataflow blocks to form a pipeline.
            transformBlockStreamTextContent.LinkTo(transformBlockTranformContentIntoListOfUri, DataflowOptions.LinkOptions);
            transformBlockTranformContentIntoListOfUri.LinkTo(transformManyBlockTransformListIntoSeveralUris, DataflowOptions.LinkOptions);
            transformManyBlockTransformListIntoSeveralUris.LinkTo(transformBlockDownloadImageData, DataflowOptions.LinkOptions);
            transformBlockDownloadImageData.LinkTo(actionBlockSetStatusOfProcess, DataflowOptions.LinkOptions);

            // Start GetMetadatasFromAList pipeline with the input values.
            transformBlockStreamTextContent.Post(pathToFile);

            // Mark the head of the pipeline as complete.
            transformBlockStreamTextContent.Complete();

            // Wait for the last block in the pipeline to process all messages.
            actionBlockSetStatusOfProcess.Completion.Wait();

            return(order
                ? listOfMetadata.OrderByDescending(metadata => metadata.Status)
                : (IEnumerable <IMetaData>)listOfMetadata);
        }