From 43e722c21277504ab5bc662fb2558ea30f954311 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Mon, 19 Jul 2010 18:08:03 -0700 Subject: [PATCH] Create module packaging command handlers --HG-- branch : dev rename : src/Orchard.Web/Modules/Orchard.Modules/Commands/FeatureCommand.cs => src/Orchard.Web/Modules/Orchard.Modules/Commands/FeatureCommands.cs --- .../{FeatureCommand.cs => FeatureCommands.cs} | 8 +-- .../Commands/PackagingCommands.cs | 58 +++++++++++++++++++ .../Orchard.Modules/Orchard.Modules.csproj | 3 +- src/Orchard/Packaging/PackageBuilder.cs | 3 + 4 files changed, 67 insertions(+), 5 deletions(-) rename src/Orchard.Web/Modules/Orchard.Modules/Commands/{FeatureCommand.cs => FeatureCommands.cs} (92%) create mode 100644 src/Orchard.Web/Modules/Orchard.Modules/Commands/PackagingCommands.cs diff --git a/src/Orchard.Web/Modules/Orchard.Modules/Commands/FeatureCommand.cs b/src/Orchard.Web/Modules/Orchard.Modules/Commands/FeatureCommands.cs similarity index 92% rename from src/Orchard.Web/Modules/Orchard.Modules/Commands/FeatureCommand.cs rename to src/Orchard.Web/Modules/Orchard.Modules/Commands/FeatureCommands.cs index be6153170..e44d71829 100644 --- a/src/Orchard.Web/Modules/Orchard.Modules/Commands/FeatureCommand.cs +++ b/src/Orchard.Web/Modules/Orchard.Modules/Commands/FeatureCommands.cs @@ -5,11 +5,11 @@ using Orchard.UI.Notify; using Orchard.Utility.Extensions; namespace Orchard.Modules.Commands { - public class FeatureCommand : DefaultOrchardCommandHandler { + public class FeatureCommands : DefaultOrchardCommandHandler { private readonly IModuleService _moduleService; private readonly INotifier _notifier; - public FeatureCommand(IModuleService moduleService, INotifier notifier) { + public FeatureCommands(IModuleService moduleService, INotifier notifier) { _moduleService = moduleService; _notifier = notifier; } @@ -63,8 +63,8 @@ namespace Orchard.Modules.Commands { } if (featuresToEnable.Count != 0) { _moduleService.EnableFeatures(featuresToEnable, true); - foreach(var entry in _notifier.List()) { - Context.Output.WriteLine(entry.Message); + foreach (var entry in _notifier.List()) { + Context.Output.WriteLine(entry.Message); } } else { diff --git a/src/Orchard.Web/Modules/Orchard.Modules/Commands/PackagingCommands.cs b/src/Orchard.Web/Modules/Orchard.Modules/Commands/PackagingCommands.cs new file mode 100644 index 000000000..417d8f350 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Modules/Commands/PackagingCommands.cs @@ -0,0 +1,58 @@ +using System.IO; +using Orchard.Commands; +using Orchard.Packaging; +using Orchard.UI.Notify; + +namespace Orchard.Modules.Commands { + public class PackagingCommands : DefaultOrchardCommandHandler { + private readonly IModuleService _moduleService; + private readonly INotifier _notifier; + private readonly IPackageManager _packageManager; + + public PackagingCommands(IModuleService moduleService, INotifier notifier, IPackageManager packageManager) { + _moduleService = moduleService; + _notifier = notifier; + _packageManager = packageManager; + } + + [OrchardSwitch] + public string Filename { get; set; } + + [CommandHelp("module create package [/Filename:filename.zip]\r\n\t" + "Create a package for the module . The default filename is -.zip.")] + [CommandName("module create package")] + [OrchardSwitches("Filename")] + public void CreatePackage(string moduleName) { + var packageData = _packageManager.Harvest(moduleName); + if (packageData == null) { + Context.Output.WriteLine(T("Module \"{0}\" does not exist in this Orchard installation.", moduleName)); + return; + } + + var filename = Filename; + if(string.IsNullOrEmpty(filename)) { + filename = string.Format("{0}-{1}.zip", packageData.ExtensionName, packageData.ExtensionVersion); + } + + using(var stream = File.Create(filename)) { + packageData.PackageStream.CopyTo(stream); + stream.Close(); + } + + var fileInfo = new FileInfo(filename); + Context.Output.WriteLine(T("Package \"{0}\" successfully created", fileInfo.FullName)); + } + + [CommandHelp("module install package \r\n\t" + "Install a module from a package .")] + [CommandName("module install package")] + public void InstallPackage(string filename) { + if (!File.Exists(filename)) { + Context.Output.WriteLine(T("File \"{0}\" does not exist.", filename)); + } + + using (var stream = File.Open(filename, FileMode.Open, FileAccess.Read)) { + var packageInfo = _packageManager.Install(stream); + Context.Output.WriteLine(T("Package \"{0}\" successfully installed at \"{1}\"", packageInfo.ExtensionName, packageInfo.ExtensionPath)); + } + } + } +} diff --git a/src/Orchard.Web/Modules/Orchard.Modules/Orchard.Modules.csproj b/src/Orchard.Web/Modules/Orchard.Modules/Orchard.Modules.csproj index 2668aeaf5..fa5c5a7bf 100644 --- a/src/Orchard.Web/Modules/Orchard.Modules/Orchard.Modules.csproj +++ b/src/Orchard.Web/Modules/Orchard.Modules/Orchard.Modules.csproj @@ -66,7 +66,8 @@ - + + diff --git a/src/Orchard/Packaging/PackageBuilder.cs b/src/Orchard/Packaging/PackageBuilder.cs index 25e2e7418..6265c41f9 100644 --- a/src/Orchard/Packaging/PackageBuilder.cs +++ b/src/Orchard/Packaging/PackageBuilder.cs @@ -48,6 +48,9 @@ namespace Orchard.Packaging { EndPackage(context); } + if (context.Stream.CanSeek) + context.Stream.Seek(0, SeekOrigin.Begin); + return context.Stream; }