Adding oEmbed provider

--HG--
branch : 1.x
extra : rebase_source : f59bb906662cb178ccaaeffc141227563d73f819
This commit is contained in:
Sebastien Ros
2013-05-11 11:28:57 -07:00
parent df168d285e
commit 7868f90542
27 changed files with 435 additions and 17 deletions

View File

@@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.IO;
using System.Web.Mvc;
using Orchard.MediaLibrary.Providers.ClientStorage;
using Orchard.MediaLibrary.Services;
using Orchard.Themes;
using Orchard.UI.Admin;

View File

@@ -0,0 +1,110 @@
using System;
using System.Net;
using System.Text.RegularExpressions;
using System.Web.Mvc;
using System.Xml.Linq;
using Orchard.MediaLibrary.Models;
using Orchard.MediaLibrary.Services;
using Orchard.MediaLibrary.ViewModels;
using Orchard.Taxonomies.Services;
using Orchard.Themes;
using Orchard.UI.Admin;
using Orchard.ContentManagement;
namespace Orchard.MediaLibrary.Controllers {
[Admin, Themed(false)]
public class OEmbedController : Controller {
private readonly ITaxonomyService _taxonomyService;
private readonly IMediaLibraryService _mediaLibraryService;
public OEmbedController(
ITaxonomyService taxonomyService,
IMediaLibraryService mediaManagerService,
IOrchardServices services) {
_taxonomyService = taxonomyService;
_mediaLibraryService = mediaManagerService;
Services = services;
}
public IOrchardServices Services { get; set; }
public ActionResult Index(int id) {
var viewModel = new OEmbedViewModel();
return View(viewModel);
}
[HttpPost]
public ActionResult Index(int id, string url) {
var viewModel = new OEmbedViewModel {
Url = url,
Id = id
};
try {
// <link rel="alternate" href="http://vimeo.com/api/oembed.xml?url=http%3A%2F%2Fvimeo.com%2F23608259" type="text/xml+oembed">
var source = new WebClient().DownloadString(url);
// seek type="text/xml+oembed"
var oembedSignature = source.IndexOf("type=\"text/xml+oembed\"", StringComparison.OrdinalIgnoreCase);
if (oembedSignature != -1) {
var tagStart = source.Substring(0, oembedSignature).LastIndexOf('<');
var tagEnd = source.IndexOf('>', oembedSignature);
var tag = source.Substring(tagStart, tagEnd - tagStart);
var matches = new Regex("href=\"([^\"]+)\"").Matches(tag);
if (matches.Count > 0) {
var href = matches[0].Groups[1].Value;
try {
var content = new WebClient().DownloadString(href);
viewModel.Content = XDocument.Parse(content);
}
catch {
// bubble exception
}
}
}
}
catch (Exception e) {
return View(viewModel);
}
return View(viewModel);
}
[HttpPost, ValidateInput(false)]
public ActionResult MediaPost(int id, string url, string document) {
var termPart = _taxonomyService.GetTerm(id);
if (termPart == null) {
return HttpNotFound();
}
var content = XDocument.Parse(document);
var oembed = content.Root;
var part = Services.ContentManager.New<MediaPart>("OEmbed");
part.TermPart = _taxonomyService.GetTerm(id);
part.Resource = url;
part.MimeType = "text/html";
part.Title = oembed.Element("title").Value;
if (oembed.Element("description") != null) {
part.Caption = oembed.Element("description").Value;
}
var oembedPart = part.As<OEmbedPart>();
foreach (var element in oembed.Elements()) {
oembedPart[element.Name.LocalName] = element.Value;
}
Services.ContentManager.Create(oembedPart);
var viewModel = new OEmbedViewModel {
Id = id
};
return View("Index", viewModel);
}
}
}

View File

@@ -10,7 +10,7 @@ namespace Orchard.MediaLibrary.Drivers {
ContentShape("Parts_Image_Summary", () => shapeHelper.Parts_Image_Summary()),
ContentShape("Parts_Image", () => shapeHelper.Parts_Image()),
ContentShape("Parts_Image_SummaryAdmin", () => shapeHelper.Parts_Image_SummaryAdmin())
);
);
}
}
}

View File

@@ -0,0 +1,15 @@
using Orchard.ContentManagement.Drivers;
using Orchard.MediaLibrary.Models;
namespace Orchard.MediaLibrary.Drivers {
public class OEmbedPartDriver : ContentPartDriver<OEmbedPart> {
protected override DriverResult Display(OEmbedPart part, string displayType, dynamic shapeHelper) {
return Combined(
ContentShape("Parts_OEmbed_Metadata", () => shapeHelper.Parts_OEmbed_Metadata()),
ContentShape("Parts_OEmbed_Summary", () => shapeHelper.Parts_OEmbed_Summary()),
ContentShape("Parts_OEmbed_SummaryAdmin", () => shapeHelper.Parts_OEmbed_SummaryAdmin()),
ContentShape("Parts_OEmbed", () => shapeHelper.Parts_OEmbed())
);
}
}
}

View File

@@ -67,5 +67,19 @@ namespace Orchard.MediaLibrary {
return 1;
}
public int UpdateFrom1() {
ContentDefinitionManager.AlterTypeDefinition("OEmbed", td => td
.DisplayedAs("External Media")
.WithSetting("Stereotype", "Media")
.WithPart("CommonPart")
.WithPart("MediaPart")
.WithPart("OEmbedPart")
.WithPart("TitlePart")
);
return 2;
}
}
}

View File

@@ -0,0 +1,13 @@
using Orchard.ContentManagement;
using Orchard.ContentManagement.FieldStorage.InfosetStorage;
namespace Orchard.MediaLibrary.Models {
public class OEmbedPart : ContentPart {
public string this[string index] {
get { return this.As<InfosetPart>().Get("OEmbedPart", index, null); }
set { this.As<InfosetPart>().Set("OEmbedPart", index, null, value); }
}
}
}

View File

@@ -71,6 +71,8 @@
<ItemGroup>
<Content Include="Scripts\history.js" />
<Content Include="Scripts\knockout-2.2.1.js" />
<Content Include="Styles\menu.oembed-mediaproviders.css" />
<Content Include="Styles\orchard-oembed-admin.css" />
<Content Include="Styles\menu.websearch-mediaproviders.css" />
<Content Include="Styles\menu.clientstorage-mediaproviders.css" />
<Content Include="Styles\dialog-mode.css" />
@@ -112,9 +114,11 @@
<Compile Include="AdminMenu.cs" />
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="Controllers\ClientStorageController.cs" />
<Compile Include="Controllers\OEmbedController.cs" />
<Compile Include="Controllers\FolderController.cs" />
<Compile Include="Controllers\WebSearchController.cs" />
<Compile Include="Drivers\AudioPartDriver.cs" />
<Compile Include="Drivers\OEmbedPartDriver.cs" />
<Compile Include="Drivers\MediaLibraryPickerFieldDriver.cs" />
<Compile Include="Drivers\DocumentPartDriver.cs" />
<Compile Include="Drivers\VideoPartDriver.cs" />
@@ -132,14 +136,16 @@
<Compile Include="Drivers\MediaPartDriver.cs" />
<Compile Include="Migrations.cs" />
<Compile Include="Models\AudioPart.cs" />
<Compile Include="Models\ImagePart.cs" />
<Compile Include="Models\DocumentPart.cs" />
<Compile Include="Models\VideoPart.cs" />
<Compile Include="Models\ImagePart.cs" />
<Compile Include="Models\OEmbedPart.cs" />
<Compile Include="Models\MediaFolder.cs" />
<Compile Include="Models\MediaPart.cs" />
<Compile Include="Models\MediaPartRecord.cs" />
<Compile Include="Permissions.cs" />
<Compile Include="Providers\ClientStorage\ClientStorageMenu.cs" />
<Compile Include="Providers\ClientStorageMenu.cs" />
<Compile Include="Providers\OEmbedMenu.cs" />
<Compile Include="Providers\WebSearchMenu.cs" />
<Compile Include="ResourceManifest.cs" />
<Compile Include="Services\IMediaLibraryService.cs" />
@@ -153,6 +159,7 @@
<Compile Include="ViewModels\MediaManagerFolderEditViewModel.cs" />
<Compile Include="ViewModels\MediaManagerImportViewModel.cs" />
<Compile Include="ViewModels\MediaManagerIndexViewModel.cs" />
<Compile Include="ViewModels\OEmbedViewModel.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Admin\Index.cshtml" />
@@ -276,6 +283,24 @@
<ItemGroup>
<Content Include="Views\Parts\Video.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\OEmbed\Index.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\OEmbed.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\OEmbed.Metadata.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\OEmbed.Summary.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts\OEmbed.SummaryAdmin.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media-OEmbed.Thumbnail.cshtml" />
</ItemGroup>
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>

View File

@@ -80,6 +80,20 @@
<Place Fields_MediaLibraryPicker_SummaryAdmin="Content:after"/>
</Match>
<!-- OEmbedPart -->
<Match DisplayType="Summary">
<Place Parts_OEmbed_Summary="Content:5" />
</Match>
<Match DisplayType="SummaryAdmin">
<Place Parts_OEmbed_Metadata="Meta:4"
Parts_OEmbed_SummaryAdmin="Header"
/>
</Match>
<Match DisplayType="Detail">
<Place Parts_OEmbed="Content:5" />
</Match>
</Placement>

View File

@@ -1,11 +1,11 @@
using Orchard.Localization;
using Orchard.UI.Navigation;
namespace Orchard.MediaLibrary.Providers.ClientStorage {
public class NavigationProvider : INavigationProvider {
namespace Orchard.MediaLibrary.Providers {
public class ClientStorageMenu : INavigationProvider {
public Localizer T { get; set; }
public NavigationProvider() {
public ClientStorageMenu() {
T = NullLocalizer.Instance;
}

View File

@@ -0,0 +1,21 @@
using Orchard.Localization;
using Orchard.UI.Navigation;
namespace Orchard.MediaLibrary.Providers {
public class OEmbedMenu : INavigationProvider {
public Localizer T { get; set; }
public OEmbedMenu() {
T = NullLocalizer.Instance;
}
public string MenuName { get { return "mediaproviders"; } }
public void GetNavigation(NavigationBuilder builder) {
builder.AddImageSet("oembed")
.Add(T("Media Url"), "10",
menu => menu.Action("Index", "OEmbed", new { area = "Orchard.MediaLibrary" })
.Permission(Permissions.ManageMediaContent));
}
}
}

View File

@@ -13,7 +13,7 @@ namespace Orchard.MediaLibrary.Providers {
public void GetNavigation(NavigationBuilder builder) {
builder.AddImageSet("websearch")
.Add(T("Web Search"), "5",
.Add(T("Web Search"), "7",
menu => menu.Action("Index", "WebSearch", new { area = "Orchard.MediaLibrary" })
.Permission(Permissions.ManageMediaContent));
}

View File

@@ -0,0 +1,3 @@
.navicon-media-url {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAPCAYAAAACsSQRAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAQpJREFUOE+dk7EKgzAQQDXSvfRHOvgDbgU3v8NPcHVxdfUH6uziLri6OAl+QycnkWvuyIUkxLZUeJjTu5e7iAEA+AgdIie28q3gX7wPDcxdfZ3QmgMfou97iOMY2raFfd+DLMsgSRLYto1FHyVh0zQkqOua7mVZgiHReXg3C4njOERRFJS8riukaQrLspAAZV8lsuU7Jud5DtM0UREzDAOwXEqeSnDBOi2Y55mSq6oCPgsXPBsecxxHWQbCkmChmXQGdtl1HeXKyzvOlWc/Q41zUwK7E4Q/Ixeo3R6yy5cj4RrdCS0QKREeCY16IiGsQEqiHyV6Y8SSSPAlgj8cg3PT7ApLgFjBf0DwBrFhrWGsTyEzAAAAAElFTkSuQmCC');
}

View File

@@ -113,7 +113,8 @@
#media-library-main-list {
width: auto;
height: 100%;
padding-left: 10px;
padding-left: 3px;
padding-top: 3px;
overflow-y: auto;
overflow-x: hidden;
}
@@ -149,6 +150,7 @@
background: #fafafa;
color: grey;
border-left: 1px solid #e0e0e0;
overflow-y: auto;
}
#media-library-main-editor em {
@@ -163,6 +165,9 @@
#media-library-main-editor footer, #media-library-main-editor .properties {
margin-top: 10px;
overflow: hidden;
-ms-word-break: break-all;
word-break: break-all;
}
#media-library-main-selection {
@@ -170,6 +175,10 @@
overflow: hidden;
}
#media-library-main-editor .properties span {
overflow: hidden;
}
#media-library-main-selection li {
float: left;
margin: 0 3px 3px 0;
@@ -230,6 +239,17 @@
width: 60px;
height: 60px;
}
.media-thumbnail-o-embed {
background-repeat: no-repeat;
-moz-background-size: cover;
-o-background-size: cover;
-webkit-background-size: cover;
background-size: cover;
background-image: none;
box-sizing: inherit;
}
.media-thumbnail-image {
background-repeat: no-repeat;
-moz-background-size: cover;

View File

@@ -0,0 +1,28 @@
body {
margin: 0;
padding: 0;
border: 0;
overflow: hidden;
height: 100%;
max-height: 100%;
}
#oembed-main {
position: absolute;
top: 0;
right: 0;
left: 0;
bottom: 0;
padding: 5px;
overflow: auto;
}
#query {
background-position: right center;
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAARCAIAAABbzbuTAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAKdJREFUOE+lkcEJAyEQRe0pRy+evFuHJViBNdiPFXj2agULooiZzbjGuIYgeSALf+aps5K6yR9CKUUp9biQUqaUWm2gCc651viJtRYbOqcQQuCcQ1lrjSlgjIGEUuq9b9GLU8Da2I0sc4JXv+8E4MnTMCTnLIRgjB3H0bKLZWn/BFh7M8Da/kvAt3cA5hnad/XSMUZMRuctLOm79NF/CAA6G8LEplDrE2p/mfIGi8fEAAAAAElFTkSuQmCC');
background-repeat: no-repeat;
padding-right: 20px;
box-sizing: border-box;
margin-bottom: 10px;
}

View File

@@ -0,0 +1,10 @@
using System.Xml.Linq;
namespace Orchard.MediaLibrary.ViewModels {
public class OEmbedViewModel {
public int Id { get; set; }
public string Url { get; set; }
public XDocument Content { get; set; }
public bool Success { get; set; }
}
}

View File

@@ -394,9 +394,10 @@
},
cursor: 'move',
distance: 10,
distance: 10,
create: function() {
$(this).draggable("option", "cursorAt", { left: $(this).width() / 2, top: $(this).height() / 2 });
// position the handler a little left to the center to let the number of selected items to appear
$(this).draggable("option", "cursorAt", { left: $(this).width() / 2 - 20, top: $(this).height() / 2 });
}
});
}

View File

@@ -9,4 +9,4 @@
var document = contentItem.As<DocumentPart>();
}
<div class="media-thumbnail media-thumbnail-@contentItem.ContentType.HtmlClassify() mime-type-@media.MimeType.HtmlClassify()">
<div class="media-thumbnail media-thumbnail-@contentItem.ContentType.HtmlClassify() mime-type-@media.MimeType.HtmlClassify()"></div>

View File

@@ -0,0 +1,16 @@
@using Orchard.ContentManagement
@using Orchard.MediaLibrary.Models
@using Orchard.Utility.Extensions
@model dynamic
@{
ContentItem contentItem = Model.ContentItem;
var media = contentItem.As<MediaPart>();
var oembed = contentItem.As<OEmbedPart>();
}
@if (!String.IsNullOrEmpty(oembed["thumbnail_url"])) {
<div class="media-thumbnail media-thumbnail-@contentItem.ContentType.HtmlClassify() mime-type-@media.MimeType.HtmlClassify()">
<img src="@Display.ResizeMediaUrl(Width: 200, Height: 200, Mode: "crop", Alignment: "middlecenter", Path: oembed["thumbnail_url"])" >
</div>
}

View File

@@ -1,5 +1,6 @@
@using Orchard.ContentManagement
@using Orchard.MediaLibrary.Models
@using Orchard.Utility.Extensions
@model dynamic
@{
@@ -7,4 +8,4 @@
var media = contentItem.As<MediaPart>();
}
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADsAAAA3CAIAAAA9haWfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAkhJREFUaEPtmMGNAjEMRbenPXLhxJ06KIEKqIEK6IAKqIAz16mACwixkRKh2ZnY/9txkFbLO09mHo5jm3w9/xof4/78b+P7/b5er78Flsvl9XotjzYQYHw8HosUzeFwKIvtNBnv9/ui4GK325UXWXAaO+IqYY232VhPVh+mFLcZn8/n8pEOnE6n8hkVg3FgJkgwGcIav0E3A6UpYz4ZFovF5XIpy0YMw7BarcpDCD09sDH5MfLIM3sl/ewMMH48HtvttrxJwNrMmGqz2Wxut1tZ8BtgDEOivFqBCYS0aZoxzIeWUQFGWsoNzVhvwnq2McCIVNu4aAxj4JsKJuhBqe6haAwzmGxROrBuzrO5bgxPhp4S4+X6kzAx5ie7btxy5qprpRRynL+6MdwsyVjaHOl5pjZP0q9uDEd1aa+lzZFiDDczMVlbMWbKuwmlyzATy2R5d2N93mD+d2FjJrcYYMEmR8LJGehirFSSF/xXuhsz3duUeN2N4aBsfT82bjl5MMCOK46+tULJYP6v1wRsnHBEIiMZt0QBd5CEOx7WXshAdemWD8TCTkKxba+FeYevGyd8VyrhWcFO9AlfVZZOXuDbROOEo2LEGlcnE83YsZWBxlKCacYJazYHGntuWBLWohFlPC8RL4BxwpQbIcb6cIKNE3wLDKlurbexGV95dgCHVdY48QZpqJswGCfcExIDeS1mM074eoGOdF6rmI0zgRnCZMIYp3HGPfhn4PVAlSbjjCPe1riOCTB+oae4KVkVIo3fw8e4N8/nD37XlV+UarLaAAAAAElFTkSuQmCC"/>
<div class="media-thumbnail media-thumbnail-@contentItem.ContentType.HtmlClassify() mime-type-@media.MimeType.HtmlClassify()"></div>

View File

@@ -0,0 +1,76 @@
@model Orchard.MediaLibrary.ViewModels.OEmbedViewModel
@using System.Text
@using System.Xml;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
@{
Script.Require("jQuery");
Script.Require("jQueryUI");
Style.Include("orchard-medialibrary-admin.css");
Style.Include("orchard-mediaproviders-admin.css");
Style.Include("orchard-oembed-admin.css");
}
@Display.Metas()
@Display.HeadScripts()
@Display.HeadLinks()
@Display.StyleSheetLinks()
</head>
<body>
<div id="oembed-main">
<div>
@using (Html.BeginFormAntiForgeryPost()) {
<input id="query" name="url" type="text" class="large" autofocus placeholder="@T("media url")" value="@Model.Url"/>
}
</div>
@if (Model.Content != null) {
var oembed = Model.Content.Root;
var type = oembed.Element("type").Value;
switch (oembed.Element("type").Value) {
case "photo":
<img src="@oembed.Element("url").Value" width="@oembed.Element("width").Value" height="@oembed.Element("height").Value" />
break;
case "video":
@Html.Raw(oembed.Element("html").Value)
break;
case "link":
<a href="@oembed.Element("url").Value">oembed.Element("title").Value</a>
break;
case "rich":
@Html.Raw(oembed.Element("html").Value)
break;
}
using (Html.BeginFormAntiForgeryPost(Url.Action("MediaPost"))) {
@Html.Hidden("url", Model.Url)
@Html.Hidden("id", Model.Id)
@Html.Hidden("document", Model.Content.ToString())
<button type="submit">@("Import")</button>
}
}
</div>
@using (Script.Foot()) {
<script type="text/javascript">
//<![CDATA[
$(function () {
})
//]]>
</script>
}
@Display.FootScripts()
</body>
</html>

View File

@@ -0,0 +1,11 @@
@using Orchard.ContentManagement
@using Orchard.MediaLibrary.Models
@using Orchard.Utility.Extensions
@{
OEmbedPart oembedPart = Model.ContentPart;
}
<div class="o-embed-source">
<em>@T("Source:")</em>
<span><a href="@oembedPart["provider_url"]" target="_blank">@oembedPart["provider_name"]</a></span>
</div>

View File

@@ -0,0 +1,10 @@
@using Orchard.ContentManagement
@using Orchard.MediaLibrary.Models
@{
OEmbedPart oembedPart = Model.ContentPart;
var mediaPart = ((ContentItem)Model.ContentItem).As<MediaPart>();
}
<a href="@mediaPart.Resource" target="_blank" class="button">
<span>@T("Preview")</span>
</a>

View File

@@ -0,0 +1,10 @@
@using Orchard.ContentManagement
@using Orchard.MediaLibrary.Models
@{
OEmbedPart oEmbedPart = Model.ContentPart;
var mediaPart = ((ContentItem)Model.ContentItem).As<MediaPart>();
}
<a href="@mediaPart.Resource" target="_blank" class="button">
<span>@T("Preview")</span>
</a>

View File

@@ -0,0 +1,21 @@
@using Orchard.ContentManagement
@using Orchard.MediaLibrary.Models
@{
OEmbedPart oembedPart = Model.ContentPart;
var mediaPart = ((ContentItem)Model.ContentItem).As<MediaPart>();
}
@switch (oembedPart["type"]) {
case "photo" :
<img src="@oembedPart["url"]" width="@oembedPart["width"]" height="@oembedPart["height"]" />
break;
case "video":
@Html.Raw(oembedPart["html"])
break;
case "link":
<a href="@oembedPart["url"]">@Html.ItemDisplayText(mediaPart)</a>
break;
case "rich":
@Html.Raw(oembedPart["html"])
break;
}

View File

@@ -33,7 +33,8 @@
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
</compilation>
</system.web>

View File

@@ -4,7 +4,6 @@ namespace Orchard.MediaProcessing.Descriptors.Filter {
public class FilterContext {
public dynamic State { get; set; }
public Stream Media { get; set; }
public string Format { get; set; }
public string FilePath { get; set; }
/// <summary>

View File

@@ -131,7 +131,7 @@ namespace Orchard.MediaProcessing.Shapes {
using (var image = GetImage(Path)) {
var filterContext = new FilterContext { Media = image, Format = new FileInfo(Path).Extension, FilePath = storageProvider.Value.Combine(Profile, CreateDefaultFileName(Path)) };
var filterContext = new FilterContext { Media = image, FilePath = storageProvider.Value.Combine(Profile, CreateDefaultFileName(Path)) };
var tokens = new Dictionary<string, object>();
// if a content item is provided, use it while tokenizing