Пример #1
0
        public SimpleDataSet MapProjectToSimpleDataIndexItem(
            IDictionary <int, MonthlyProjectDownloads> projectDownloadStats,
            DateTime mostRecentUpdateDate,
            IPublishedContent project, SimpleDataSet simpleDataSet, string indexType,
            int projectVotes, WikiFile[] files, int downloads, IEnumerable <string> compatVersions)
        {
            var isLive     = project.GetPropertyValue <bool>("projectLive");
            var isApproved = project.GetPropertyValue <bool>("approved");

            var strictPackageFiles = PackageRepositoryService.GetAllStrictSupportedPackageVersions(files);

            simpleDataSet.NodeDefinition.NodeId = project.Id;
            simpleDataSet.NodeDefinition.Type   = indexType;

            simpleDataSet.RowData.Add("body", project.GetPropertyValue <string>("description"));
            simpleDataSet.RowData.Add("nodeName", project.Name);
            simpleDataSet.RowData.Add("categoryFolder", project.Parent.Name.ToLowerInvariant().Trim());
            simpleDataSet.RowData.Add("updateDate", project.UpdateDate.ToString("yyyy-MM-dd HH:mm:ss"));
            simpleDataSet.RowData.Add("createDate", project.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"));
            simpleDataSet.RowData.Add("nodeTypeAlias", "project");
            simpleDataSet.RowData.Add("url", project.Url);
            simpleDataSet.RowData.Add("uniqueId", project.GetPropertyValue <string>("packageGuid"));
            simpleDataSet.RowData.Add("worksOnUaaS", project.GetPropertyValue <string>("worksOnUaaS"));

            var imageFile = string.Empty;

            if (project.HasValue("defaultScreenshotPath"))
            {
                imageFile = project.GetPropertyValue <string>("defaultScreenshotPath");
            }
            if (string.IsNullOrWhiteSpace(imageFile))
            {
                var image = files.FirstOrDefault(x => x.FileType == "screenshot");
                if (image != null)
                {
                    imageFile = image.Path;
                }
            }

            //Clean up version data before its included in the index, the reason we have to do this
            // is due to the way the version data is stored, you can see it in uVersion.config - it's super strange
            // because of the 3 digit nature but when it doesn't end with a '0' it's actually just the major/minor version
            // so we have to do all of this parsing.
            var version         = project.GetPropertyValue <string>("compatibleVersions") ?? string.Empty;
            var cleanedVersions = version.ToLower()
                                  .Trim(',')
                                  .Split(',')
                                  .Select(x => x.GetFromUmbracoString(reduceToConfigured: false))
                                  .Where(x => x != null);

            var cleanedCompatVersions = compatVersions
                                        .Select(x => x.GetFromUmbracoString(reduceToConfigured: false))
                                        .Where(x => x != null);

            var hasForum = project.Children.Any(x => x.IsVisible());

            MonthlyProjectDownloads projStats = null;

            projectDownloadStats.TryGetValue(project.Id, out projStats);

            var points = new ProjectPopularityPoints(
                mostRecentUpdateDate,
                projStats,
                project.CreateDate,
                project.UpdateDate,
                project.GetPropertyValue <bool>("worksOnUaaS"), hasForum,
                project.GetPropertyValue <string>("sourceUrl").IsNullOrWhiteSpace() == false,
                project.GetPropertyValue <bool>("openForCollab"),
                downloads,
                projectVotes);
            var pop = points.Calculate();

            simpleDataSet.RowData.Add("popularity", pop.ToString());
            simpleDataSet.RowData.Add("karma", projectVotes.ToString());
            simpleDataSet.RowData.Add("downloads", downloads.ToString());
            simpleDataSet.RowData.Add("image", imageFile);

            var packageFiles = files.Count(x => x.FileType == "package");

            simpleDataSet.RowData.Add("packageFiles", packageFiles.ToString());

            simpleDataSet.RowData.Add("projectLive", isLive ? "1" : "0");
            simpleDataSet.RowData.Add("approved", isApproved ? "1" : "0");

            //now we need to add the versions and compat versions
            // first, this is the versions that the project has files tagged against
            simpleDataSet.RowData.Add("versions", string.Join(",", cleanedVersions));
            //then we index the versions that the project has actually been flagged as compatible against
            simpleDataSet.RowData.Add("compatVersions", string.Join(",", cleanedCompatVersions));

            simpleDataSet.RowData.Add("minimumVersionStrict", string.Join(",", strictPackageFiles.Select(x => x.MinUmbracoVersion.ToString(3))));

            return(simpleDataSet);
        }
Пример #2
0
        public SimpleDataSet MapProjectToSimpleDataIndexItem(IPublishedContent project, SimpleDataSet simpleDataSet, string indexType,
                                                             int projectVotes, WikiFile[] files, int downloads, IEnumerable <string> compatVersions)
        {
            var isLive     = project.GetPropertyValue <bool>("projectLive");
            var isApproved = project.GetPropertyValue <bool>("approved");

            var strictPackageFiles = PackageRepositoryService.GetAllStrictSupportedPackageVersions(files);

            simpleDataSet.NodeDefinition.NodeId = project.Id;
            simpleDataSet.NodeDefinition.Type   = indexType;

            simpleDataSet.RowData.Add("body", project.GetPropertyValue <string>("description"));
            simpleDataSet.RowData.Add("nodeName", project.Name);
            simpleDataSet.RowData.Add("categoryFolder", project.Parent.Name.ToLowerInvariant().Trim());
            simpleDataSet.RowData.Add("updateDate", project.UpdateDate.ToString("yyyy-MM-dd HH:mm:ss"));
            simpleDataSet.RowData.Add("createDate", project.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"));
            simpleDataSet.RowData.Add("nodeTypeAlias", "project");
            simpleDataSet.RowData.Add("url", project.Url);
            simpleDataSet.RowData.Add("uniqueId", project.GetPropertyValue <string>("packageGuid"));
            simpleDataSet.RowData.Add("worksOnUaaS", project.GetPropertyValue <string>("worksOnUaaS"));

            var imageFile = string.Empty;

            if (project.HasValue("defaultScreenshotPath"))
            {
                imageFile = project.GetPropertyValue <string>("defaultScreenshotPath");
            }
            if (string.IsNullOrWhiteSpace(imageFile))
            {
                var image = files.FirstOrDefault(x => x.FileType == "screenshot");
                if (image != null)
                {
                    imageFile = image.Path;
                }
            }

            //Clean up version data before its included in the index, the reason we have to do this
            // is due to the way the version data is stored, you can see it in uVersion.config - it's super strange
            // because of the 3 digit nature but when it doesn't end with a '0' it's actually just the major/minor version
            // so we have to do all of this parsing.
            var version         = project.GetPropertyValue <string>("compatibleVersions") ?? string.Empty;
            var cleanedVersions = version.ToLower()
                                  .Trim(',')
                                  .Split(',')
                                  .Select(x => x.GetFromUmbracoString(reduceToConfigured: false))
                                  .Where(x => x != null);

            var cleanedCompatVersions = compatVersions
                                        .Select(x => x.GetFromUmbracoString(reduceToConfigured: false))
                                        .Where(x => x != null);

            //popularity for sorting number = downloads + karma * 100;
            //TODO: Change score so that we take into account:
            // - recently updated
            // - works on latest umbraco versions
            // - works on uaas
            // - has a forum
            // - has source code link
            // - open for collab / has collaborators
            // - download count in a recent timeframe - since old downloads should count for less

            var pop = downloads + (projectVotes * 100);

            simpleDataSet.RowData.Add("popularity", pop.ToString());
            simpleDataSet.RowData.Add("karma", projectVotes.ToString());
            simpleDataSet.RowData.Add("downloads", downloads.ToString());
            simpleDataSet.RowData.Add("image", imageFile);

            var packageFiles = files.Count(x => x.FileType == "package");

            simpleDataSet.RowData.Add("packageFiles", packageFiles.ToString());

            simpleDataSet.RowData.Add("projectLive", isLive ? "1" : "0");
            simpleDataSet.RowData.Add("approved", isApproved ? "1" : "0");

            //now we need to add the versions and compat versions
            // first, this is the versions that the project has files tagged against
            simpleDataSet.RowData.Add("versions", string.Join(",", cleanedVersions));
            //then we index the versions that the project has actually been flagged as compatible against
            simpleDataSet.RowData.Add("compatVersions", string.Join(",", cleanedCompatVersions));

            simpleDataSet.RowData.Add("minimumVersionStrict", string.Join(",", strictPackageFiles.Select(x => x.MinUmbracoVersion.ToString(3))));

            return(simpleDataSet);
        }