public static List<JsonPackage> FromGallery(string pkgType, int page = 0, Gallery.OrderType sortOrder = Gallery.OrderType.Newest, string searchVal = "")
{
var packages = new List<JsonPackage>();
var gallery = CachedPackages.Where(p => p.Location == "G" || p.Location == "I");
if (pkgType != "all")
gallery = gallery.Where(p => p.PackageType == pkgType).ToList();
foreach (var pkg in gallery)
{
if (string.IsNullOrEmpty(searchVal))
{
packages.Add(pkg);
}
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))
{
packages.Add(pkg);
}
}
}
Gallery.GalleryPager = new Pager(page, packages.Count, pkgType);
CultureInfo culture;
try
{
culture = new CultureInfo(BlogSettings.Instance.Culture);
}
catch (Exception)
{
culture = Utils.GetDefaultCulture();
}
if (packages.Count > 0)
{
switch (sortOrder)
{
case Gallery.OrderType.Downloads:
packages = packages.OrderByDescending(p => p.DownloadCount).ThenBy(p => p.Title).ToList();
break;
case Gallery.OrderType.Rating:
packages = packages.OrderByDescending(p => p.Rating).ThenBy(p => p.Title).ToList();
break;
case Gallery.OrderType.Newest:
packages = packages.OrderByDescending(p => Convert.ToDateTime(p.LastUpdated, CultureInfo.InvariantCulture)).ThenBy(p => p.Title).ToList();
break;
case Gallery.OrderType.Alphanumeric:
packages = packages.OrderBy(p => p.Title).ToList();
break;
}
}
return packages.Skip(page * Constants.PageSize).Take(Constants.PageSize).ToList();
}