Exemplo n.º 1
0
        public Manifest Build(string path, IPackageMetaData packageMetaData)
        {
            var files = this.artefactProcessor.RetrieveFiles(path);

            var manifest = new Manifest
                {
                    Author = packageMetaData.Author,
                    Id = Guid.NewGuid(),
                    Name = packageMetaData.Name,
                    Path = path,
                    Tokens = packageMetaData.Tokens,
                    Version = packageMetaData.Version,
                };

            int progress = 0;

            var fileCount = files.Count();
            var manifestFiles = new BlockingCollection<ManifestFile>();

            Parallel.ForEach(
                files,
                file =>
                    {
                        manifestFiles.Add(new ManifestFile { File = StripParentPath(path, file) });
                        this.progressNotifier.UpdateProgress(ProgressStage.BuildManifest, fileCount, progress);
                        progress++;
                    });

            manifest.Files.AddRange(manifestFiles);

            return manifest;
        }
Exemplo n.º 2
0
        public Manifest Build(string path, IPackageMetaData packageMetaData)
        {
            var files = this.artefactProcessor.RetrieveFiles(path);

            var manifest = new Manifest
            {
                Author  = packageMetaData.Author,
                Id      = Guid.NewGuid(),
                Name    = packageMetaData.Name,
                Path    = path,
                Tokens  = packageMetaData.Tokens,
                Version = packageMetaData.Version,
            };

            int progress = 0;

            var fileCount     = files.Count();
            var manifestFiles = new BlockingCollection <ManifestFile>();

            Parallel.ForEach(
                files,
                file =>
            {
                manifestFiles.Add(new ManifestFile {
                    File = StripParentPath(path, file)
                });
                this.progressNotifier.UpdateProgress(ProgressStage.BuildManifest, fileCount, progress);
                progress++;
            });

            manifest.Files.AddRange(manifestFiles);

            return(manifest);
        }
Exemplo n.º 3
0
 public Package Build(string path, IPackageMetaData packageMetaData)
 {
     return(new Package {
         Manifest = this.manifestBuilder.Build(path, packageMetaData)
     });
 }
Exemplo n.º 4
0
        public async Task <bool> InitializeAsync()
        {
            using (await _mutex.LockAsync().ConfigureAwait(false))
            {
                try
                {
                    IEnumerable <CdnjsPackage> packages;

                    if (IsCachedVersionOld(out packages))
                    {
                        Directory.CreateDirectory(new FileInfo(_localPath).DirectoryName);

                        using (WebClient client = new WebClient())
                        {
                            await client.DownloadFileTaskAsync(_remoteApiUrl, _localPath).ConfigureAwait(false);
                        }
                    }

                    if (packages == null)
                    {
                        using (StreamReader reader = new StreamReader(_localPath))
                        {
                            string json = await reader.ReadToEndAsync();

                            var obj = (JObject)JsonConvert.DeserializeObject(json);

                            packages = JsonConvert.DeserializeObject <IEnumerable <CdnjsPackage> >(obj["results"].ToString());
                        }
                    }

                    var comparer = new PackageNameComparer();
                    var distinct = new List <CdnjsPackage>();

                    // For some reason, the Cdnjs api returns duplicate entries
                    foreach (var package in packages.OrderBy(p => p.Name, comparer))
                    {
                        if (!distinct.Any(p => p.Name == package.Name))
                        {
                            distinct.Add(package);
                        }
                    }

                    _packages = distinct;
                    Dictionary <string, Lazy <Task <IPackageInfo> > > infos = new Dictionary <string, Lazy <Task <IPackageInfo> > >();

                    foreach (CdnjsPackage package in distinct)
                    {
                        CdnjsPackage local = package;
                        infos[local.Name] = new Lazy <Task <IPackageInfo> >(async() =>
                        {
                            IPackageMetaData metadata = await local.GetPackageMetaData(Name);
                            return(new PackageInfo(local.Name, metadata.Description)
                            {
                                Homepage = metadata.Homepage
                            });
                        });
                    }

                    _searchPackages = infos;
                    return(true);
                }
                catch (Exception)
                {
                    return(false);
                }
            }
        }
Exemplo n.º 5
0
 public Package Build(string path, IPackageMetaData packageMetaData)
 {
     return new Package { Manifest = this.manifestBuilder.Build(path, packageMetaData) };
 }