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); }
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); }