PageRenderTime 44ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 1ms

/BlogEngine/DotNetSlave.BusinessLogic/Packaging/Installer.cs

#
C# | 125 lines | 89 code | 19 blank | 17 comment | 13 complexity | cf1c345f5b2a62e70e8e7090ab76d8b5 MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0, BSD-3-Clause
  1. using System;
  2. using System.Linq;
  3. using System.Web;
  4. using System.Collections.Generic;
  5. using BlogEngine.Core.Json;
  6. using BlogEngine.Core.Providers;
  7. using NuGet;
  8. namespace BlogEngine.Core.Packaging
  9. {
  10. /// <summary>
  11. /// Responsible for install/uninstall operations
  12. /// </summary>
  13. public static class Installer
  14. {
  15. private static IPackageRepository _repository
  16. {
  17. get
  18. {
  19. return PackageRepositoryFactory.Default.CreateRepository(
  20. new PackageSource(BlogSettings.Instance.GalleryFeedUrl, "Default"));
  21. }
  22. }
  23. /// <summary>
  24. /// Install package
  25. /// </summary>
  26. /// <param name="pkgId"></param>
  27. public static JsonResponse InstallPackage(string pkgId)
  28. {
  29. try
  30. {
  31. if(BlogService.InstalledFromGalleryPackages() != null &&
  32. BlogService.InstalledFromGalleryPackages().Find(p => p.PackageId == pkgId) != null)
  33. UninstallPackage(pkgId);
  34. var packageManager = new PackageManager(
  35. _repository,
  36. new DefaultPackagePathResolver(BlogSettings.Instance.GalleryFeedUrl),
  37. new PhysicalFileSystem(HttpContext.Current.Server.MapPath(Utils.ApplicationRelativeWebRoot + "App_Data/packages"))
  38. );
  39. var package = _repository.FindPackage(pkgId);
  40. packageManager.InstallPackage(package, false);
  41. var iPkg = new InstalledPackage { PackageId = package.Id, Version = package.Version.ToString() };
  42. BlogService.InsertPackage(iPkg);
  43. var packageFiles = FileSystem.InstallPackage(package.Id, package.Version.ToString());
  44. BlogService.InsertPackageFiles(packageFiles);
  45. Blog.CurrentInstance.Cache.Remove(Constants.CacheKey);
  46. }
  47. catch (Exception ex)
  48. {
  49. Utils.Log("BlogEngine.Core.Packaging.Installer.InstallPackage", ex);
  50. return new JsonResponse { Success = false, Message = "Error installing package, see logs for details" };
  51. }
  52. return new JsonResponse { Success = true, Message = "Package successfully installed" };
  53. }
  54. /// <summary>
  55. /// Uninstall package
  56. /// </summary>
  57. /// <param name="pkgId"></param>
  58. /// <returns></returns>
  59. public static JsonResponse UninstallPackage(string pkgId)
  60. {
  61. try
  62. {
  63. var packageManager = new PackageManager(
  64. _repository,
  65. new DefaultPackagePathResolver(BlogSettings.Instance.GalleryFeedUrl),
  66. new PhysicalFileSystem(HttpContext.Current.Server.MapPath(Utils.ApplicationRelativeWebRoot + "App_Data/packages"))
  67. );
  68. var package = _repository.FindPackage(pkgId);
  69. if (package == null)
  70. return new JsonResponse { Success = false, Message = "Package " + pkgId + " not found" };
  71. packageManager.UninstallPackage(package, true);
  72. FileSystem.UninstallPackage(package.Id);
  73. BlogService.DeletePackage(pkgId);
  74. // reset cache
  75. Blog.CurrentInstance.Cache.Remove(Constants.CacheKey);
  76. }
  77. catch (Exception ex)
  78. {
  79. Utils.Log("PackageManager.UninstallPackage", ex);
  80. return new JsonResponse { Success = false, Message = "Error uninstalling package, see logs for details" };
  81. }
  82. return new JsonResponse { Success = true, Message = "Package successfully uninstalled" };
  83. }
  84. /// <summary>
  85. /// Load installed packages
  86. /// </summary>
  87. /// <param name="packages"></param>
  88. public static void MarkAsInstalled(List<JsonPackage> packages)
  89. {
  90. var installed = BlogService.InstalledFromGalleryPackages();
  91. foreach (var pkg in packages)
  92. {
  93. if (pkg == null) continue;
  94. var p = pkg;
  95. if(installed != null && installed.Count > 0)
  96. {
  97. foreach (var inst in installed.Where(inst => p.Id == inst.PackageId))
  98. {
  99. pkg.Location = "I";
  100. pkg.LocalVersion = inst.Version;
  101. }
  102. }
  103. }
  104. }
  105. }
  106. }