PageRenderTime 52ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/BlogEngine/DotNetSlave.BusinessLogic/Packaging/PackageRepository.cs

#
C# | 143 lines | 103 code | 15 blank | 25 comment | 23 complexity | 7bf4105636295b8a4b7c33e6b70e8f60 MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0, BSD-3-Clause
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web.Caching;
  5. using BlogEngine.Core.Json;
  6. namespace BlogEngine.Core.Packaging
  7. {
  8. /// <summary>
  9. /// Package repository
  10. /// </summary>
  11. public class PackageRepository
  12. {
  13. /// <summary>
  14. ///
  15. /// </summary>
  16. /// <param name="pkgType"></param>
  17. /// <param name="page"></param>
  18. /// <param name="sortOrder"></param>
  19. /// <param name="searchVal"></param>
  20. /// <returns></returns>
  21. public static List<JsonPackage> FromGallery(string pkgType, int page = 0, Gallery.OrderType sortOrder = Gallery.OrderType.Newest, string searchVal = "")
  22. {
  23. var packages = new List<JsonPackage>();
  24. var gallery = CachedPackages.Where(p => p.Location == "G" || p.Location == "I");
  25. if (pkgType != "all")
  26. gallery = gallery.Where(p => p.PackageType == pkgType).ToList();
  27. foreach (var pkg in gallery)
  28. {
  29. System.Diagnostics.Debug.WriteLine(string.Format("{0}|{1}|{2}|{3}",
  30. pkg.Id, pkg.OnlineVersion, pkg.PackageType, pkg.Location));
  31. if (string.IsNullOrEmpty(searchVal))
  32. {
  33. packages.Add(pkg);
  34. }
  35. else
  36. {
  37. if (pkg.Title.IndexOf(searchVal, StringComparison.OrdinalIgnoreCase) != -1
  38. || pkg.Description.IndexOf(searchVal, StringComparison.OrdinalIgnoreCase) != -1
  39. ||
  40. (!string.IsNullOrWhiteSpace(pkg.Tags) &&
  41. pkg.Tags.IndexOf(searchVal, StringComparison.OrdinalIgnoreCase) != -1))
  42. {
  43. packages.Add(pkg);
  44. }
  45. }
  46. }
  47. Gallery.GalleryPager = new Pager(page, packages.Count, pkgType);
  48. if (packages.Count > 0)
  49. {
  50. switch (sortOrder)
  51. {
  52. case Gallery.OrderType.Downloads:
  53. packages = packages.OrderByDescending(p => p.DownloadCount).ThenBy(p => p.Title).ToList();
  54. break;
  55. case Gallery.OrderType.Rating:
  56. packages = packages.OrderByDescending(p => p.Rating).ThenBy(p => p.Title).ToList();
  57. break;
  58. case Gallery.OrderType.Newest:
  59. packages = packages.OrderByDescending(p => Convert.ToDateTime(p.LastUpdated)).ThenBy(p => p.Title).ToList();
  60. break;
  61. case Gallery.OrderType.Alphanumeric:
  62. packages = packages.OrderBy(p => p.Title).ToList();
  63. break;
  64. }
  65. }
  66. return packages.Skip(page * Constants.PageSize).Take(Constants.PageSize).ToList();
  67. }
  68. /// <summary>
  69. ///
  70. /// </summary>
  71. /// <param name="pkgType"></param>
  72. /// <returns></returns>
  73. public static List<JsonPackage> LocalPackages(string pkgType)
  74. {
  75. var packages = new List<JsonPackage>();
  76. foreach (var pkg in CachedPackages)
  77. {
  78. if(pkgType != "all")
  79. {
  80. if (pkg.PackageType != pkgType) continue;
  81. }
  82. if(pkg.Location == "G")
  83. continue;
  84. packages.Add(pkg);
  85. }
  86. return packages;
  87. }
  88. /// <summary>
  89. /// Package by ID
  90. /// </summary>
  91. /// <param name="pkgId"></param>
  92. /// <returns></returns>
  93. public static JsonPackage GetPackage(string pkgId)
  94. {
  95. return CachedPackages.FirstOrDefault(pkg => pkg.Id == pkgId);
  96. }
  97. /// <summary>
  98. /// Local "packages" - list of extensions,
  99. /// themes and widgets folders
  100. /// </summary>
  101. static IEnumerable<JsonPackage> CachedPackages
  102. {
  103. get
  104. {
  105. if (Blog.CurrentInstance.Cache[Constants.CacheKey] == null)
  106. {
  107. Blog.CurrentInstance.Cache.Add(
  108. Constants.CacheKey,
  109. LoadPackages(),
  110. null,
  111. Cache.NoAbsoluteExpiration,
  112. new TimeSpan(0, 15, 0),
  113. CacheItemPriority.Low,
  114. null);
  115. }
  116. return (IEnumerable<JsonPackage>)Blog.CurrentInstance.Cache[Constants.CacheKey];
  117. }
  118. }
  119. static List<JsonPackage> LoadPackages()
  120. {
  121. var packages = new List<JsonPackage>();
  122. Gallery.Load(packages);
  123. FileSystem.Load(packages);
  124. Installer.MarkAsInstalled(packages);
  125. return packages;
  126. }
  127. }
  128. }