diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Commands/PackagingCommands.cs b/src/Orchard.Web/Modules/Orchard.Packaging/Commands/PackagingCommands.cs index 810aba198..50c69ff98 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Commands/PackagingCommands.cs +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Commands/PackagingCommands.cs @@ -39,11 +39,10 @@ namespace Orchard.Packaging.Commands { } // append "Orchard.[ExtensionType]" to prevent conflicts with other packages (e.g, TinyMce, jQuery, ...) - string extensionPrefix = DefaultExtensionTypes.IsTheme(packageData.ExtensionType) ? - PackagingSourceManager.ThemesPrefix : - PackagingSourceManager.ModulesPrefix; - - var filename = string.Format("{0}{1}.{2}.nupkg", extensionPrefix, packageData.ExtensionName, packageData.ExtensionVersion); + var filename = string.Format("{0}{1}.{2}.nupkg", + PackagingSourceManager.GetExtensionPrefix(packageData.ExtensionType), + packageData.ExtensionName, + packageData.ExtensionVersion); if ( !Directory.Exists(path) ) { Directory.CreateDirectory(path); diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageBuilder.cs b/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageBuilder.cs index 3b437ccee..3518b3a2f 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageBuilder.cs +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageBuilder.cs @@ -63,11 +63,7 @@ namespace Orchard.Packaging.Services { } private static void SetCoreProperties(CreateContext context, ExtensionDescriptor extensionDescriptor) { - string idPrefix = DefaultExtensionTypes.IsTheme(extensionDescriptor.ExtensionType) ? - PackagingSourceManager.ThemesPrefix : - PackagingSourceManager.ModulesPrefix; - - context.Builder.Id = idPrefix + extensionDescriptor.Id; + context.Builder.Id = PackagingSourceManager.GetExtensionPrefix(extensionDescriptor.ExtensionType) + extensionDescriptor.Id; context.Builder.Version = new Version(extensionDescriptor.Version); context.Builder.Title = extensionDescriptor.Name ?? extensionDescriptor.Id; context.Builder.Description = extensionDescriptor.Description; diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageInstaller.cs b/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageInstaller.cs index 6199772ab..04cf93569 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageInstaller.cs +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageInstaller.cs @@ -99,6 +99,8 @@ namespace Orchard.Packaging.Services { } public void Uninstall(string packageId, string applicationPath) { + bool removed = false; + // this logger is used to render NuGet's log on the notifier var logger = new NugetLogger(_notifier); @@ -133,24 +135,37 @@ namespace Orchard.Packaging.Services { ) {Logger = logger}; packageManager.UninstallPackage(packageId); + removed = true; } catch { // Package doesnt exist anymore } } - // Make sure folder is deleted (themes scenario where there is no project) - string extensionPath = packageId.StartsWith(PackagingSourceManager.ThemesPrefix) - ? "~/Themes/" + packageId.Substring(PackagingSourceManager.ThemesPrefix.Length) - : "~/Modules/" + packageId.Substring(PackagingSourceManager.ThemesPrefix.Length); + // If the package was not installed through nuget we still need to try to uninstall it by removing its directory - string extensionFullPath = HostingEnvironment.MapPath(extensionPath); + // Remove theme if found + string extensionFullPath = packageId.StartsWith(PackagingSourceManager.ThemesPrefix) + ? HostingEnvironment.MapPath("~/Themes/" + packageId.Substring(PackagingSourceManager.ThemesPrefix.Length)) + : HostingEnvironment.MapPath("~/Themes/" + packageId); if (Directory.Exists(extensionFullPath)) { Directory.Delete(extensionFullPath, true); + removed = true; } - else { - throw new OrchardException(T("Package not found: ", packageId)); + + // Remove module if found + extensionFullPath = packageId.StartsWith(PackagingSourceManager.ModulesPrefix) + ? HostingEnvironment.MapPath("~/Modules/" + packageId.Substring(PackagingSourceManager.ModulesPrefix.Length)) + : HostingEnvironment.MapPath("~/Modules/" + packageId); + + if (Directory.Exists(extensionFullPath)) { + Directory.Delete(extensionFullPath, true); + removed = true; + } + + if (!removed) { + throw new OrchardException(T("Package not found: {0}", packageId)); } } diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackagingSourceManager.cs b/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackagingSourceManager.cs index c4962ec1d..b7390a967 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackagingSourceManager.cs +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackagingSourceManager.cs @@ -15,6 +15,17 @@ namespace Orchard.Packaging.Services { public const string ThemesPrefix = "Orchard.Themes."; public const string ModulesPrefix = "Orchard.Modules."; + public static string GetExtensionPrefix(string extensionType) { + switch (extensionType) { + case DefaultExtensionTypes.Theme: + return ThemesPrefix; + case DefaultExtensionTypes.Module: + return ModulesPrefix; + default: + throw new ArgumentException(); + } + } + private readonly IRepository _packagingSourceRecordRepository; public PackagingSourceManager(IRepository packagingSourceRecordRepository) {