diff --git a/src/Orchard.Web/Modules/Orchard.Modules/Packaging/Services/PackageManager.cs b/src/Orchard.Web/Modules/Orchard.Modules/Packaging/Services/PackageManager.cs index bfd19a40a..69734f582 100644 --- a/src/Orchard.Web/Modules/Orchard.Modules/Packaging/Services/PackageManager.cs +++ b/src/Orchard.Web/Modules/Orchard.Modules/Packaging/Services/PackageManager.cs @@ -24,6 +24,7 @@ namespace Orchard.Modules.Packaging.Services { void Install(PackageData packageData); } + [OrchardFeature("Orchard.Modules.Packaging")] public class PackageManager : IPackageManager { private readonly IExtensionManager _extensionManager; private readonly IPackageSourceManager _packageSourceManager; diff --git a/src/Tools/PackageIndexReferenceImplementation/Controllers/Artifacts/StreamResult.cs b/src/Tools/PackageIndexReferenceImplementation/Controllers/Artifacts/StreamResult.cs new file mode 100644 index 000000000..9eaeea23c --- /dev/null +++ b/src/Tools/PackageIndexReferenceImplementation/Controllers/Artifacts/StreamResult.cs @@ -0,0 +1,19 @@ +using System.IO; +using System.Web.Mvc; + +namespace PackageIndexReferenceImplementation.Controllers { + public class StreamResult : ActionResult { + public string ContentType { get; set; } + public Stream Stream { get; set; } + + public StreamResult(string contentType, Stream stream) { + ContentType = contentType; + Stream = stream; + } + + public override void ExecuteResult(ControllerContext context) { + context.HttpContext.Response.ContentType = ContentType; + Stream.CopyTo(context.HttpContext.Response.OutputStream); + } + } +} \ No newline at end of file diff --git a/src/Tools/PackageIndexReferenceImplementation/Controllers/AtomController.cs b/src/Tools/PackageIndexReferenceImplementation/Controllers/AtomController.cs index babf1211d..89840d45d 100644 --- a/src/Tools/PackageIndexReferenceImplementation/Controllers/AtomController.cs +++ b/src/Tools/PackageIndexReferenceImplementation/Controllers/AtomController.cs @@ -50,6 +50,16 @@ namespace PackageIndexReferenceImplementation.Controllers { } + var mediaIdentifier = UpdateSyndicationItem(packageProperties, item); + + + _mediaStorage.StoreMedia(mediaIdentifier + ":application/x-package", Request.InputStream); + _feedStorage.StoreFeed(feed); + + return new AtomItemResult("201 Created", null, item); + } + + private string UpdateSyndicationItem(PackageProperties packageProperties, SyndicationItem item) { if (!string.IsNullOrEmpty(packageProperties.Category)) { item.Authors.Clear(); //parse package.PackageProperties.Creator into email-style authors @@ -82,12 +92,7 @@ namespace PackageIndexReferenceImplementation.Controllers { var mediaUrl = Url.Action("Resource", "Media", new RouteValueDictionary { { "Id", mediaIdentifier }, { "ContentType", "application/x-package" } }); item.Links.Clear(); item.Links.Add(new SyndicationLink(new Uri(HostBaseUri(), new Uri(mediaUrl, UriKind.Relative)))); - - Request.InputStream.Seek(0, SeekOrigin.Begin); - _mediaStorage.StoreMedia(mediaIdentifier+":application/x-package", Request.InputStream); - _feedStorage.StoreFeed(feed); - - return new AtomItemResult("201 Created", null, item); + return mediaIdentifier; } private Uri HostBaseUri() { diff --git a/src/Tools/PackageIndexReferenceImplementation/Controllers/MediaController.cs b/src/Tools/PackageIndexReferenceImplementation/Controllers/MediaController.cs index 612d639fe..17aaefe9e 100644 --- a/src/Tools/PackageIndexReferenceImplementation/Controllers/MediaController.cs +++ b/src/Tools/PackageIndexReferenceImplementation/Controllers/MediaController.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.IO; using System.Linq; using System.Web; using System.Web.Mvc; @@ -21,19 +20,4 @@ namespace PackageIndexReferenceImplementation.Controllers return new StreamResult(contentType, _mediaStorage.GetMedia(id + ":" + contentType)); } } - - public class StreamResult : ActionResult { - public string ContentType { get; set; } - public Stream Stream { get; set; } - - public StreamResult(string contentType, Stream stream) { - ContentType = contentType; - Stream = stream; - } - - public override void ExecuteResult(ControllerContext context) { - context.HttpContext.Response.ContentType = ContentType; - Stream.CopyTo(context.HttpContext.Response.OutputStream); - } - } } diff --git a/src/Tools/PackageIndexReferenceImplementation/PackageIndexReferenceImplementation.csproj b/src/Tools/PackageIndexReferenceImplementation/PackageIndexReferenceImplementation.csproj index 9b877034e..37fc9973c 100644 --- a/src/Tools/PackageIndexReferenceImplementation/PackageIndexReferenceImplementation.csproj +++ b/src/Tools/PackageIndexReferenceImplementation/PackageIndexReferenceImplementation.csproj @@ -75,6 +75,7 @@ + Global.asax diff --git a/src/Tools/PackageIndexReferenceImplementation/Services/MediaStorage.cs b/src/Tools/PackageIndexReferenceImplementation/Services/MediaStorage.cs index 1728c3db4..87d356758 100644 --- a/src/Tools/PackageIndexReferenceImplementation/Services/MediaStorage.cs +++ b/src/Tools/PackageIndexReferenceImplementation/Services/MediaStorage.cs @@ -11,6 +11,7 @@ namespace PackageIndexReferenceImplementation.Services { var safeIdentifier = GetSafeIdentifier(identifier); var filePath = HostingEnvironment.MapPath("~/App_Data/Media/" + safeIdentifier); using (var destination = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { + data.Seek(0, SeekOrigin.Begin); data.CopyTo(destination); } }