/// <summary> /// /// </summary> /// <param name="pkgType"></param> /// <param name="page"></param> /// <param name="sortOrder"></param> /// <param name="searchVal"></param> /// <returns></returns> public static IQueryable<PublishedPackage> GetPackages(string pkgType, int page = 1, OrderType sortOrder = OrderType.Newest, string searchVal = "") { var srs = new PackagingSource {FeedUrl = _feedUrl}; //TODO: add setting for gallery page size var pageSize = BlogSettings.Instance.PostsPerPage; var cnt = 0; try { var retPackages = new List<PublishedPackage>(); var pkgList = GetPublishedPackages(srs); foreach (var pkg in pkgList.ToList()) { if(pkgType != "all"){ if (pkg.PackageType != pkgType) continue; } if (!pkg.IsLatestVersion) continue; // for themes, get screenshot isetead of icon // also get screenshot if icon is missing for package if ((pkg.PackageType == "Theme" || string.IsNullOrEmpty(pkg.IconUrl)) && pkg.Screenshots != null && pkg.Screenshots.Count > 0) pkg.IconUrl = pkg.Screenshots[0].ScreenshotUri; // if both icon and screenshot missing, get default image for package type if(string.IsNullOrEmpty(pkg.IconUrl)) { switch (pkg.PackageType) { case "Theme": pkg.IconUrl = "http://dnbegallery.org/cms/Themes/OrchardGallery/Content/Images/themeDefaultIcon.png"; break; case "Extension": pkg.IconUrl = "http://dnbegallery.org/cms/Themes/OrchardGallery/Content/Images/extensionDefaultIcon.png"; break; case "Widget": pkg.IconUrl = "http://dnbegallery.org/cms/Themes/OrchardGallery/Content/Images/widgetDefaultIcon.png"; break; } } if (!string.IsNullOrEmpty(pkg.IconUrl) && !pkg.IconUrl.StartsWith("http:")) pkg.IconUrl = "http://dnbegallery.org" + pkg.IconUrl; if(string.IsNullOrEmpty(searchVal)) { retPackages.Add(pkg); cnt++; } else { if(pkg.Title.IndexOf(searchVal, StringComparison.OrdinalIgnoreCase) != -1 || pkg.Description.IndexOf(searchVal, StringComparison.OrdinalIgnoreCase) != -1 || (!string.IsNullOrWhiteSpace(pkg.Tags) && pkg.Tags.IndexOf(searchVal, StringComparison.OrdinalIgnoreCase) != -1)) { retPackages.Add(pkg); cnt++; } } } GalleryPager = new Pager(page, cnt); if (cnt > 0) { switch (sortOrder) { case OrderType.Downloads: retPackages = retPackages .OrderByDescending(p => p.DownloadCount).ThenBy(p => p.Title) .Skip((page - 1) * pageSize).Take(pageSize).ToList(); break; case OrderType.Rating: retPackages = retPackages .OrderByDescending(p => p.Rating).ThenBy(p => p.Title) .Skip((page - 1) * pageSize).Take(pageSize).ToList(); break; case OrderType.Newest: retPackages = retPackages .OrderByDescending(p => p.LastUpdated).ThenBy(p => p.Title) .Skip((page - 1) * pageSize).Take(pageSize).ToList(); break; case OrderType.Alphanumeric: retPackages = retPackages.OrderBy(p => p.Title) .Skip((page - 1) * pageSize).Take(pageSize).ToList(); break; } } return retPackages.AsQueryable(); } catch (Exception) { GalleryPager = null; return null; } }