Пример #1
0
        private IPackage ReadPackage(JsonTextReader jsonReader, NodeModuleBuilder builder)
        {
            IPackage package = null;

            builder.Reset();

            try {
                // The JsonTextReader should be positioned at the start of the
                // object literal token for the package
                var module = JToken.ReadFrom(jsonReader);

                builder.Name = (string)module["name"];
                if (string.IsNullOrEmpty(builder.Name))
                {
                    // I don't believe this should ever happen if the data returned is
                    // well formed. Could throw an exception, but just skip instead for
                    // resiliency on the NTVS side.
                    return(null);
                }

                builder.AppendToDescription((string)module["description"] ?? string.Empty);

                var time = module["time"];
                if (time != null)
                {
                    builder.AppendToDate((string)time["modified"]);
                }

                var distTags = module["dist-tags"];
                if (distTags != null)
                {
                    var latestVersion = distTags
                                        .OfType <JProperty>()
                                        .Where(v => (string)v.Name == "latest")
                                        .Select(v => (string)v.Value)
                                        .FirstOrDefault();

                    if (!string.IsNullOrEmpty(latestVersion))
                    {
                        try {
                            builder.LatestVersion = SemverVersion.Parse(latestVersion);
                        } catch (SemverVersionFormatException) {
                            OnOutputLogged(String.Format(
                                               Resources.InvalidPackageSemVersion,
                                               latestVersion,
                                               builder.Name));
                        }
                    }
                }

                var versions = module["versions"];
                if (versions != null)
                {
                    builder.AvailableVersions = GetVersions(versions);
                }

                AddKeywords(builder, module["keywords"]);
                AddAuthor(builder, module["author"]);
                AddHomepage(builder, module["homepage"]);

                package = builder.Build();
            } catch (InvalidOperationException) {
                // Occurs if a JValue appears where we expect JProperty
                return(null);
            } catch (ArgumentException) {
                OnOutputLogged(string.Format(Resources.ParsingError, builder.Name));
                return(null);
            }
            return(package);
        }
Пример #2
0
        private IPackage ReadPackage(JsonTextReader jsonReader, NodeModuleBuilder builder) {
            IPackage package = null;
            builder.Reset();

            try {
                // The JsonTextReader should be positioned at the start of the
                // object literal token for the package
                var module = JToken.ReadFrom(jsonReader);

                builder.Name = (string)module["name"];
                if (string.IsNullOrEmpty(builder.Name)) {
                    // I don't believe this should ever happen if the data returned is
                    // well formed. Could throw an exception, but just skip instead for
                    // resiliency on the NTVS side.
                    return null;
                }

                builder.AppendToDescription((string)module["description"] ?? string.Empty);

                var time = module["time"];
                if (time != null) {
                    builder.AppendToDate((string)time["modified"]);
                }

                var distTags = module["dist-tags"];
                if (distTags != null) {
                    var latestVersion = distTags
                        .OfType<JProperty>()
                        .Where(v => (string)v.Name == "latest")
                        .Select(v => (string)v.Value)
                        .FirstOrDefault();

                    if (!string.IsNullOrEmpty(latestVersion)) {
                        try {
                            builder.LatestVersion = SemverVersion.Parse(latestVersion);
                        } catch (SemverVersionFormatException) {
                            OnOutputLogged(String.Format(
                                Resources.InvalidPackageSemVersion,
                                latestVersion,
                                builder.Name));
                        }
                    }
                }

                var versions = module["versions"];
                if (versions != null) {
                    builder.AvailableVersions = GetVersions(versions);
                }

                AddKeywords(builder, module["keywords"]);
                AddAuthor(builder, module["author"]);
                AddHomepage(builder, module["homepage"]);

                package = builder.Build();
            } catch (InvalidOperationException) {
                // Occurs if a JValue appears where we expect JProperty
                return null;
            } catch (ArgumentException) {
                OnOutputLogged(string.Format(Resources.ParsingError, builder.Name));
                return null;
            }
            return package;
        }
Пример #3
0
        internal void ParseResultsAndAddToDatabase(TextReader reader, string dbFilename, string registryUrl) {
            Directory.CreateDirectory(Path.GetDirectoryName(dbFilename));

            using (var db = new SQLiteConnection(dbFilename)) {
                db.RunInTransaction(() => {
                    db.CreateRegistryTableIfNotExists();

                    using (var jsonReader = new JsonTextReader(reader)) {
                        while (jsonReader.Read()) {
                            if (JsonToken.PropertyName != jsonReader.TokenType) {
                                continue;
                            }

                            if ((string)jsonReader.Value == "_updated") {
                                jsonReader.Read();
                                db.InsertOrReplace(new RegistryInfo() {
                                    RegistryUrl = registryUrl,
                                    Revision = (long)jsonReader.Value,
                                    UpdatedOn = DateTime.Now
                                });
                                continue;

                            }

                            var builder = new NodeModuleBuilder();
                            JToken token = null;

#if DEV14_OR_LATER
                            try {
#endif
                                token = JToken.ReadFrom(jsonReader);
#if DEV14_OR_LATER
                            } catch (JsonReaderException) {
                                // Reached end of file, so continue.
                                break;
                            }
#endif

                            var module = token.FirstOrDefault();
                            while (module != null) {
                                try {
                                    builder.Name = (string)module["name"];
                                    if (string.IsNullOrEmpty(builder.Name)) {
                                        continue;
                                    }

                                    builder.AppendToDescription((string)module["description"] ?? string.Empty);

                                    var time = module["time"];
                                    if (time != null) {
                                        builder.AppendToDate((string)time["modified"]);
                                    }

                                    var distTags = module["dist-tags"];
                                    if (distTags != null) {
                                        var latestVersion = distTags
                                            .OfType<JProperty>()
                                            .Where(v => (string)v.Name == "latest")
                                            .Select(v => (string)v.Value)
                                            .FirstOrDefault();

                                        if (!string.IsNullOrEmpty(latestVersion)) {
                                            try {
                                                builder.LatestVersion = SemverVersion.Parse(latestVersion);
                                            } catch (SemverVersionFormatException) {
                                                OnOutputLogged(String.Format(Resources.InvalidPackageSemVersion, latestVersion, builder.Name));
                                            }
                                        }
                                    }

                                    var versions = module["versions"];
                                    if (versions != null) {
                                        builder.AvailableVersions = GetVersions(versions);
                                    }

                                    AddKeywords(builder, module["keywords"]);

                                    AddAuthor(builder, module["author"]);

                                    AddHomepage(builder, module["homepage"]);

                                    var package = builder.Build();

                                    InsertCatalogEntry(db, package);
                                } catch (InvalidOperationException) {
                                    // Occurs if a JValue appears where we expect JProperty
                                } catch (ArgumentException) {
                                    OnOutputLogged(string.Format(Resources.ParsingError, builder.Name));
                                    if (!string.IsNullOrEmpty(builder.Name)) {
                                        var package = builder.Build();
                                        InsertCatalogEntry(db, package);
                                    }
                                }

                                builder.Reset();
#if DEV14_OR_LATER
                                try {
#endif
                                    token = JToken.ReadFrom(jsonReader);
#if DEV14_OR_LATER
                                } catch (JsonReaderException) {
                                    // Reached end of file, so continue.
                                    break;
                                }
#endif
                                module = token.FirstOrDefault();
                            }
                        }
                    }

                    // FTS doesn't support INSERT OR REPLACE. This is the most efficient way to bypass that limitation.
                    db.Execute("DELETE FROM CatalogEntry WHERE docid NOT IN (SELECT MAX(docid) FROM CatalogEntry GROUP BY Name)");
                });
            }
        }
Пример #4
0
        internal void ParseResultsAndAddToDatabase(TextReader reader, string dbFilename, string registryUrl)
        {
            Directory.CreateDirectory(Path.GetDirectoryName(dbFilename));

            using (var db = new SQLiteConnection(dbFilename)) {
                db.RunInTransaction(() => {
                    db.CreateRegistryTableIfNotExists();

                    using (var jsonReader = new JsonTextReader(reader)) {
                        while (jsonReader.Read())
                        {
                            if (JsonToken.PropertyName != jsonReader.TokenType)
                            {
                                continue;
                            }

                            if ((string)jsonReader.Value == "_updated")
                            {
                                jsonReader.Read();
                                db.InsertOrReplace(new RegistryInfo()
                                {
                                    RegistryUrl = registryUrl,
                                    Revision    = (long)jsonReader.Value,
                                    UpdatedOn   = DateTime.Now
                                });
                                continue;
                            }

                            var builder  = new NodeModuleBuilder();
                            JToken token = null;

#if DEV14_OR_LATER
                            try {
#endif
                            token = JToken.ReadFrom(jsonReader);
#if DEV14_OR_LATER
                        }
                        catch (JsonReaderException) {
                            // Reached end of file, so continue.
                            break;
                        }
#endif

                            var module = token.FirstOrDefault();
                            while (module != null)
                            {
                                try {
                                    builder.Name = (string)module["name"];
                                    if (string.IsNullOrEmpty(builder.Name))
                                    {
                                        continue;
                                    }

                                    builder.AppendToDescription((string)module["description"] ?? string.Empty);

                                    var time = module["time"];
                                    if (time != null)
                                    {
                                        builder.AppendToDate((string)time["modified"]);
                                    }

                                    var distTags = module["dist-tags"];
                                    if (distTags != null)
                                    {
                                        var latestVersion = distTags
                                                            .OfType <JProperty>()
                                                            .Where(v => (string)v.Name == "latest")
                                                            .Select(v => (string)v.Value)
                                                            .FirstOrDefault();

                                        if (!string.IsNullOrEmpty(latestVersion))
                                        {
                                            try {
                                                builder.LatestVersion = SemverVersion.Parse(latestVersion);
                                            } catch (SemverVersionFormatException) {
                                                OnOutputLogged(String.Format(Resources.InvalidPackageSemVersion, latestVersion, builder.Name));
                                            }
                                        }
                                    }

                                    var versions = module["versions"];
                                    if (versions != null)
                                    {
                                        builder.AvailableVersions = GetVersions(versions);
                                    }

                                    AddKeywords(builder, module["keywords"]);

                                    AddAuthor(builder, module["author"]);

                                    AddHomepage(builder, module["homepage"]);

                                    var package = builder.Build();

                                    InsertCatalogEntry(db, package);
                                } catch (InvalidOperationException) {
                                    // Occurs if a JValue appears where we expect JProperty
                                } catch (ArgumentException) {
                                    OnOutputLogged(string.Format(Resources.ParsingError, builder.Name));
                                    if (!string.IsNullOrEmpty(builder.Name))
                                    {
                                        var package = builder.Build();
                                        InsertCatalogEntry(db, package);
                                    }
                                }

                                builder.Reset();
#if DEV14_OR_LATER
                                try {
#endif
                                token = JToken.ReadFrom(jsonReader);
#if DEV14_OR_LATER
                            }
                            catch (JsonReaderException) {
                                // Reached end of file, so continue.
                                break;
                            }
#endif
                                module = token.FirstOrDefault();
                            }
                        }
                    }

                    // FTS doesn't support INSERT OR REPLACE. This is the most efficient way to bypass that limitation.
                    db.Execute("DELETE FROM CatalogEntry WHERE docid NOT IN (SELECT MAX(docid) FROM CatalogEntry GROUP BY Name)");
                });
            }
        }