mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
Added support for custom encoding presets to Orchard.Azure.MediaServices.
This commit is contained in:
@@ -76,8 +76,8 @@ namespace Orchard.Azure.MediaServices.Controllers {
|
|||||||
|
|
||||||
var presetPattern = new Regex(@"^[\w\s]*$");
|
var presetPattern = new Regex(@"^[\w\s]*$");
|
||||||
foreach (var preset in viewModel.EncodingSettings.WamsEncodingPresets) {
|
foreach (var preset in viewModel.EncodingSettings.WamsEncodingPresets) {
|
||||||
if (!presetPattern.IsMatch(preset)) {
|
if (!presetPattern.IsMatch(preset.Name)) {
|
||||||
_services.Notifier.Error(T("The encoding preset '{0}' is invalid. Encoding presets can only contain letters, numbers and spaces.", preset));
|
_services.Notifier.Error(T("The encoding preset name '{0}' is invalid. Encoding presets can only contain letters, numbers and spaces.", preset.Name));
|
||||||
return View("Index", viewModel);
|
return View("Index", viewModel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Orchard.Azure.MediaServices.Models;
|
using System.Linq;
|
||||||
|
using Orchard.Azure.MediaServices.Models;
|
||||||
using Orchard;
|
using Orchard;
|
||||||
using Orchard.ContentManagement;
|
using Orchard.ContentManagement;
|
||||||
using Orchard.Environment;
|
using Orchard.Environment;
|
||||||
@@ -53,7 +54,7 @@ namespace Orchard.Azure.MediaServices.Events {
|
|||||||
"H264 Adaptive Bitrate MP4 Set SD 4x3 for iOS Cellular Only",
|
"H264 Adaptive Bitrate MP4 Set SD 4x3 for iOS Cellular Only",
|
||||||
"H264 Smooth Streaming 720p Xbox Live ADK",
|
"H264 Smooth Streaming 720p Xbox Live ADK",
|
||||||
"H264 Smooth Streaming Windows Phone 7 Series"
|
"H264 Smooth Streaming Windows Phone 7 Series"
|
||||||
};
|
}.Select(x => new EncodingPreset() { Name = x });
|
||||||
settings.SubtitleLanguages = new[] {
|
settings.SubtitleLanguages = new[] {
|
||||||
"da-DK",
|
"da-DK",
|
||||||
"nl-BE",
|
"nl-BE",
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using System.Globalization;
|
|||||||
using Orchard.ContentManagement;
|
using Orchard.ContentManagement;
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace Orchard.Azure.MediaServices.Models {
|
namespace Orchard.Azure.MediaServices.Models {
|
||||||
|
|
||||||
@@ -18,10 +19,10 @@ namespace Orchard.Azure.MediaServices.Models {
|
|||||||
set { this.Store(x => x.WamsAccountKey, value); }
|
set { this.Store(x => x.WamsAccountKey, value); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public string StorageAccountKey {
|
public string StorageAccountKey {
|
||||||
get { return this.Retrieve(x => x.StorageAccountKey); }
|
get { return this.Retrieve(x => x.StorageAccountKey); }
|
||||||
set { this.Store(x => x.StorageAccountKey, value); }
|
set { this.Store(x => x.StorageAccountKey, value); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool EnableDynamicPackaging {
|
public bool EnableDynamicPackaging {
|
||||||
get { return this.Retrieve(x => x.EnableDynamicPackaging); }
|
get { return this.Retrieve(x => x.EnableDynamicPackaging); }
|
||||||
@@ -49,14 +50,21 @@ namespace Orchard.Azure.MediaServices.Models {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<string> WamsEncodingPresets {
|
public IEnumerable<EncodingPreset> WamsEncodingPresets {
|
||||||
get {
|
get {
|
||||||
var presets = Retrieve<string>("WamsEncodingPresets");
|
var presets = Retrieve<string>("WamsEncodingPresetsJson");
|
||||||
return !String.IsNullOrEmpty(presets) ? presets.Split(';') : new string[] { };
|
if (!String.IsNullOrEmpty(presets)) {
|
||||||
|
return JsonConvert.DeserializeObject<EncodingPreset[]>(presets);
|
||||||
|
}
|
||||||
|
// Fall back to old style property for compatibility with existing data.
|
||||||
|
presets = Retrieve<string>("WamsEncodingPresets");
|
||||||
|
var presetNames = !String.IsNullOrEmpty(presets) ? presets.Split(';') : new string[] { };
|
||||||
|
return presetNames.Select(x => new EncodingPreset() { Name = x });
|
||||||
}
|
}
|
||||||
set {
|
set {
|
||||||
var presets = value != null && value.Any() ? String.Join(";", value) : null;
|
// Clear out old style property, migrate setting to the new one.
|
||||||
Store("WamsEncodingPresets", presets);
|
Store("WamsEncodingPresets", default(string));
|
||||||
|
Store("WamsEncodingPresetsJson", JsonConvert.SerializeObject(value.ToArray()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Web;
|
||||||
|
using System.Web.Mvc;
|
||||||
|
|
||||||
|
namespace Orchard.Azure.MediaServices.Models {
|
||||||
|
public class EncodingPreset {
|
||||||
|
public string Name { get; set; }
|
||||||
|
[AllowHtml]
|
||||||
|
public string CustomXml { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -149,6 +149,7 @@
|
|||||||
<Content Include="Content\expressInstall.swf" />
|
<Content Include="Content\expressInstall.swf" />
|
||||||
<Content Include="Content\MSAdaptiveStreamingPlugin.swf" />
|
<Content Include="Content\MSAdaptiveStreamingPlugin.swf" />
|
||||||
<Content Include="Content\StrobeMediaPlayback.swf" />
|
<Content Include="Content\StrobeMediaPlayback.swf" />
|
||||||
|
<Compile Include="Models\EncodingPreset.cs" />
|
||||||
<Compile Include="Shapes\CloudVideoPlayerShape.cs" />
|
<Compile Include="Shapes\CloudVideoPlayerShape.cs" />
|
||||||
<Compile Include="Helpers\BitExtensions.cs" />
|
<Compile Include="Helpers\BitExtensions.cs" />
|
||||||
<Compile Include="Infrastructure\Assets\AssetDriverResult.cs" />
|
<Compile Include="Infrastructure\Assets\AssetDriverResult.cs" />
|
||||||
@@ -553,6 +554,9 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="Scripts\lib\MPEG Dash Notice.docx" />
|
<None Include="Scripts\lib\MPEG Dash Notice.docx" />
|
||||||
|
<Content Include="Styles\cloudmedia-admin-settings.css.map">
|
||||||
|
<DependentUpon>cloudmedia-admin-settings.css</DependentUpon>
|
||||||
|
</Content>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="Scripts\cloudmedia-admin-common.js.map" />
|
<Content Include="Scripts\cloudmedia-admin-common.js.map" />
|
||||||
|
|||||||
@@ -15,6 +15,25 @@ var Orchard;
|
|||||||
})();
|
})();
|
||||||
Settings.StringItem = StringItem;
|
Settings.StringItem = StringItem;
|
||||||
|
|
||||||
|
var EncodingPreset = (function () {
|
||||||
|
function EncodingPreset(name, customXml) {
|
||||||
|
this.name = ko.observable(name);
|
||||||
|
this.customXml = ko.observable(customXml);
|
||||||
|
this.isExpanded = ko.observable(false);
|
||||||
|
this.type = ko.computed(function () {
|
||||||
|
var customXml = this.customXml();
|
||||||
|
if (!!customXml && customXml.length > 0)
|
||||||
|
return "Custom preset";
|
||||||
|
return "Standard preset";
|
||||||
|
}, this);
|
||||||
|
}
|
||||||
|
EncodingPreset.prototype.toggle = function () {
|
||||||
|
this.isExpanded(!this.isExpanded());
|
||||||
|
};
|
||||||
|
return EncodingPreset;
|
||||||
|
})();
|
||||||
|
Settings.EncodingPreset = EncodingPreset;
|
||||||
|
|
||||||
Settings.clientViewModel = {
|
Settings.clientViewModel = {
|
||||||
wamsEncodingPresets: ko.observableArray(),
|
wamsEncodingPresets: ko.observableArray(),
|
||||||
defaultWamsEncodingPresetIndex: ko.observable(),
|
defaultWamsEncodingPresetIndex: ko.observable(),
|
||||||
@@ -32,7 +51,7 @@ var Orchard;
|
|||||||
Settings.deleteWamsEncodingPreset = deleteWamsEncodingPreset;
|
Settings.deleteWamsEncodingPreset = deleteWamsEncodingPreset;
|
||||||
|
|
||||||
function addNewWamsEncodingPreset() {
|
function addNewWamsEncodingPreset() {
|
||||||
Settings.clientViewModel.wamsEncodingPresets.push(new StringItem("Unnamed"));
|
Settings.clientViewModel.wamsEncodingPresets.push(new EncodingPreset("Unnamed", null));
|
||||||
$("#presets-table tbody:first-of-type tr:last-of-type td:nth-child(2) input").focus().select();
|
$("#presets-table tbody:first-of-type tr:last-of-type td:nth-child(2) input").focus().select();
|
||||||
}
|
}
|
||||||
Settings.addNewWamsEncodingPreset = addNewWamsEncodingPreset;
|
Settings.addNewWamsEncodingPreset = addNewWamsEncodingPreset;
|
||||||
@@ -49,8 +68,8 @@ var Orchard;
|
|||||||
Settings.addNewSubtitleLanguage = addNewSubtitleLanguage;
|
Settings.addNewSubtitleLanguage = addNewSubtitleLanguage;
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
$.each(initWamsEncodingPresets, function (presetIndex, presetName) {
|
$.each(initWamsEncodingPresets, function (presetIndex, preset) {
|
||||||
Settings.clientViewModel.wamsEncodingPresets.push(new StringItem(presetName));
|
Settings.clientViewModel.wamsEncodingPresets.push(new EncodingPreset(preset.name, preset.customXml));
|
||||||
});
|
});
|
||||||
|
|
||||||
Settings.clientViewModel.defaultWamsEncodingPresetIndex(initDefaultWamsEncodingPresetIndex);
|
Settings.clientViewModel.defaultWamsEncodingPresetIndex(initDefaultWamsEncodingPresetIndex);
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"cloudmedia-admin-settings.js","sourceRoot":"","sources":["cloudmedia-admin-settings.ts"],"names":["Orchard","Orchard.Azure","Orchard.Azure.MediaServices","Orchard.Azure.MediaServices.Admin","Orchard.Azure.MediaServices.Admin.Settings","Orchard.Azure.MediaServices.Admin.Settings.StringItem","Orchard.Azure.MediaServices.Admin.Settings.StringItem.constructor","Orchard.Azure.MediaServices.Admin.Settings.deleteWamsEncodingPreset","Orchard.Azure.MediaServices.Admin.Settings.addNewWamsEncodingPreset","Orchard.Azure.MediaServices.Admin.Settings.deleteSubtitleLanguage","Orchard.Azure.MediaServices.Admin.Settings.addNewSubtitleLanguage"],"mappings":"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"}
|
{"version":3,"file":"cloudmedia-admin-settings.js","sourceRoot":"","sources":["cloudmedia-admin-settings.ts"],"names":["Orchard","Orchard.Azure","Orchard.Azure.MediaServices","Orchard.Azure.MediaServices.Admin","Orchard.Azure.MediaServices.Admin.Settings","Orchard.Azure.MediaServices.Admin.Settings.StringItem","Orchard.Azure.MediaServices.Admin.Settings.StringItem.constructor","Orchard.Azure.MediaServices.Admin.Settings.EncodingPreset","Orchard.Azure.MediaServices.Admin.Settings.EncodingPreset.constructor","Orchard.Azure.MediaServices.Admin.Settings.EncodingPreset.toggle","Orchard.Azure.MediaServices.Admin.Settings.deleteWamsEncodingPreset","Orchard.Azure.MediaServices.Admin.Settings.addNewWamsEncodingPreset","Orchard.Azure.MediaServices.Admin.Settings.deleteSubtitleLanguage","Orchard.Azure.MediaServices.Admin.Settings.addNewSubtitleLanguage"],"mappings":"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"}
|
||||||
@@ -1,37 +1,56 @@
|
|||||||
/// <reference path="typings/jquery.d.ts" />
|
/// <reference path="typings/jquery.d.ts" />
|
||||||
/// <reference path="typings/knockout.d.ts" />
|
/// <reference path="typings/knockout.d.ts" />
|
||||||
|
|
||||||
declare var initWamsEncodingPresets: string[];
|
declare var initWamsEncodingPresets: any[];
|
||||||
declare var initDefaultWamsEncodingPresetIndex: number;
|
declare var initDefaultWamsEncodingPresetIndex: number;
|
||||||
declare var initSubtitleLanguages: string[];
|
declare var initSubtitleLanguages: string[];
|
||||||
|
|
||||||
module Orchard.Azure.MediaServices.Admin.Settings
|
module Orchard.Azure.MediaServices.Admin.Settings {
|
||||||
{
|
|
||||||
export class StringItem
|
export class StringItem {
|
||||||
{
|
constructor(value: string) {
|
||||||
constructor(value: string)
|
|
||||||
{
|
|
||||||
this.value = ko.observable(value);
|
this.value = ko.observable(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public value: KnockoutObservable<string>;
|
public value: KnockoutObservable<string>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IClientViewModel
|
export class EncodingPreset {
|
||||||
{
|
constructor(name: string, customXml: string) {
|
||||||
wamsEncodingPresets: KnockoutObservableArray<StringItem>;
|
this.name = ko.observable(name);
|
||||||
|
this.customXml = ko.observable(customXml);
|
||||||
|
this.isExpanded = ko.observable(false);
|
||||||
|
this.type = ko.computed(function () {
|
||||||
|
var customXml: string = this.customXml();
|
||||||
|
if (!!customXml && customXml.length > 0)
|
||||||
|
return "Custom preset";
|
||||||
|
return "Standard preset";
|
||||||
|
}, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public name: KnockoutObservable<string>;
|
||||||
|
public customXml: KnockoutObservable<string>;
|
||||||
|
public isExpanded: KnockoutObservable<boolean>;
|
||||||
|
public type: KnockoutComputed<string>;
|
||||||
|
|
||||||
|
public toggle() {
|
||||||
|
this.isExpanded(!this.isExpanded());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IClientViewModel {
|
||||||
|
wamsEncodingPresets: KnockoutObservableArray<EncodingPreset>;
|
||||||
defaultWamsEncodingPresetIndex: KnockoutObservable<number>;
|
defaultWamsEncodingPresetIndex: KnockoutObservable<number>;
|
||||||
subtitleLanguages: KnockoutObservableArray<StringItem>;
|
subtitleLanguages: KnockoutObservableArray<StringItem>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export var clientViewModel: IClientViewModel = {
|
export var clientViewModel: IClientViewModel = {
|
||||||
wamsEncodingPresets: ko.observableArray<StringItem>(),
|
wamsEncodingPresets: ko.observableArray<EncodingPreset>(),
|
||||||
defaultWamsEncodingPresetIndex: ko.observable<number>(),
|
defaultWamsEncodingPresetIndex: ko.observable<number>(),
|
||||||
subtitleLanguages: ko.observableArray<StringItem>()
|
subtitleLanguages: ko.observableArray<StringItem>()
|
||||||
};
|
};
|
||||||
|
|
||||||
export function deleteWamsEncodingPreset(preset: StringItem)
|
export function deleteWamsEncodingPreset(preset: EncodingPreset) {
|
||||||
{
|
|
||||||
var removedIndex = clientViewModel.wamsEncodingPresets.indexOf(preset);
|
var removedIndex = clientViewModel.wamsEncodingPresets.indexOf(preset);
|
||||||
clientViewModel.wamsEncodingPresets.remove(preset);
|
clientViewModel.wamsEncodingPresets.remove(preset);
|
||||||
if (removedIndex === clientViewModel.defaultWamsEncodingPresetIndex())
|
if (removedIndex === clientViewModel.defaultWamsEncodingPresetIndex())
|
||||||
@@ -40,34 +59,28 @@ module Orchard.Azure.MediaServices.Admin.Settings
|
|||||||
clientViewModel.defaultWamsEncodingPresetIndex(clientViewModel.defaultWamsEncodingPresetIndex() - 1);
|
clientViewModel.defaultWamsEncodingPresetIndex(clientViewModel.defaultWamsEncodingPresetIndex() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function addNewWamsEncodingPreset()
|
export function addNewWamsEncodingPreset() {
|
||||||
{
|
clientViewModel.wamsEncodingPresets.push(new EncodingPreset("Unnamed", null));
|
||||||
clientViewModel.wamsEncodingPresets.push(new StringItem("Unnamed"));
|
|
||||||
$("#presets-table tbody:first-of-type tr:last-of-type td:nth-child(2) input").focus().select();
|
$("#presets-table tbody:first-of-type tr:last-of-type td:nth-child(2) input").focus().select();
|
||||||
}
|
}
|
||||||
|
|
||||||
export function deleteSubtitleLanguage(languageCultureCode: StringItem)
|
export function deleteSubtitleLanguage(languageCultureCode: StringItem) {
|
||||||
{
|
|
||||||
clientViewModel.subtitleLanguages.remove(languageCultureCode);
|
clientViewModel.subtitleLanguages.remove(languageCultureCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function addNewSubtitleLanguage()
|
export function addNewSubtitleLanguage() {
|
||||||
{
|
|
||||||
clientViewModel.subtitleLanguages.push(new StringItem("Unnamed"));
|
clientViewModel.subtitleLanguages.push(new StringItem("Unnamed"));
|
||||||
$("#languages-table tbody:first-of-type tr:last-of-type td:nth-child(1) input").focus().select();
|
$("#languages-table tbody:first-of-type tr:last-of-type td:nth-child(1) input").focus().select();
|
||||||
}
|
}
|
||||||
|
|
||||||
$(function ()
|
$(function () {
|
||||||
{
|
$.each(initWamsEncodingPresets, function (presetIndex: number, preset: any) {
|
||||||
$.each(initWamsEncodingPresets, function (presetIndex: number, presetName: string)
|
clientViewModel.wamsEncodingPresets.push(new EncodingPreset(preset.name, preset.customXml));
|
||||||
{
|
|
||||||
clientViewModel.wamsEncodingPresets.push(new StringItem(presetName));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
clientViewModel.defaultWamsEncodingPresetIndex(initDefaultWamsEncodingPresetIndex);
|
clientViewModel.defaultWamsEncodingPresetIndex(initDefaultWamsEncodingPresetIndex);
|
||||||
|
|
||||||
$.each(initSubtitleLanguages, function (languageIndex: number, languageCultureCode: string)
|
$.each(initSubtitleLanguages, function (languageIndex: number, languageCultureCode: string) {
|
||||||
{
|
|
||||||
clientViewModel.subtitleLanguages.push(new StringItem(languageCultureCode));
|
clientViewModel.subtitleLanguages.push(new StringItem(languageCultureCode));
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -80,6 +93,6 @@ module Orchard.Azure.MediaServices.Admin.Settings
|
|||||||
localStorage.setItem("selectedCloudMediaSettingsTab", $("#tabs").tabs("option", "active"));
|
localStorage.setItem("selectedCloudMediaSettingsTab", $("#tabs").tabs("option", "active"));
|
||||||
},
|
},
|
||||||
active: localStorage && localStorage.getItem ? localStorage.getItem("selectedCloudMediaSettingsTab") : null
|
active: localStorage && localStorage.getItem ? localStorage.getItem("selectedCloudMediaSettingsTab") : null
|
||||||
}).show();
|
}).show();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,8 +38,8 @@ namespace Orchard.Azure.MediaServices.Services.Tasks.Providers {
|
|||||||
public override TaskConfiguration Editor(dynamic shapeFactory, IUpdateModel updater) {
|
public override TaskConfiguration Editor(dynamic shapeFactory, IUpdateModel updater) {
|
||||||
var settings = _orchardServices.WorkContext.CurrentSite.As<CloudMediaSettingsPart>();
|
var settings = _orchardServices.WorkContext.CurrentSite.As<CloudMediaSettingsPart>();
|
||||||
var viewModel = new EncodeViewModel() {
|
var viewModel = new EncodeViewModel() {
|
||||||
EncodingPresets = settings.WamsEncodingPresets,
|
EncodingPresets = settings.WamsEncodingPresets.Select(x => x.Name),
|
||||||
SelectedEncodingPreset = settings.WamsEncodingPresets.Any() ? settings.WamsEncodingPresets.ToArray()[settings.DefaultWamsEncodingPresetIndex] : null
|
SelectedEncodingPreset = settings.WamsEncodingPresets.Any() ? settings.WamsEncodingPresets.ToArray()[settings.DefaultWamsEncodingPresetIndex].Name : null
|
||||||
};
|
};
|
||||||
|
|
||||||
if (updater != null) {
|
if (updater != null) {
|
||||||
@@ -66,12 +66,14 @@ namespace Orchard.Azure.MediaServices.Services.Tasks.Providers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override ITask CreateTask(TaskConfiguration config, TaskCollection tasks, IEnumerable<IAsset> inputAssets) {
|
public override ITask CreateTask(TaskConfiguration config, TaskCollection tasks, IEnumerable<IAsset> inputAssets) {
|
||||||
|
var settings = _orchardServices.WorkContext.CurrentSite.As<CloudMediaSettingsPart>();
|
||||||
var viewModel = (EncodeViewModel)config.Settings;
|
var viewModel = (EncodeViewModel)config.Settings;
|
||||||
|
var encodingPreset = settings.WamsEncodingPresets.Where(x => x.Name == viewModel.SelectedEncodingPreset).Single();
|
||||||
|
|
||||||
var task = tasks.AddNew(
|
var task = tasks.AddNew(
|
||||||
viewModel.SelectedEncodingPreset,
|
viewModel.SelectedEncodingPreset,
|
||||||
_wamsClient.GetLatestMediaProcessorByName(MediaProcessorName.WindowsAzureMediaEncoder),
|
_wamsClient.GetLatestMediaProcessorByName(MediaProcessorName.WindowsAzureMediaEncoder),
|
||||||
viewModel.SelectedEncodingPreset,
|
!String.IsNullOrEmpty(encodingPreset.CustomXml) ? encodingPreset.CustomXml : encodingPreset.Name,
|
||||||
TaskOptions.None);
|
TaskOptions.None);
|
||||||
|
|
||||||
task.InputAssets.AddRange(inputAssets);
|
task.InputAssets.AddRange(inputAssets);
|
||||||
|
|||||||
@@ -1,35 +1,30 @@
|
|||||||
h2 {
|
h2 {
|
||||||
margin-top: 1em !important;
|
margin-top: 1em !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
#test-button,
|
#test-button,
|
||||||
#save-button {
|
#save-button {
|
||||||
margin-top: 1em;
|
margin-top: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#presets-table {
|
#presets-table {
|
||||||
width: auto;
|
width: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
#presets-table th:nth-child(1),
|
#presets-table th:nth-child(1),
|
||||||
#presets-table th:nth-child(3),
|
#presets-table th:nth-child(4),
|
||||||
#presets-table td:nth-child(1),
|
#presets-table td:nth-child(1),
|
||||||
#presets-table td:nth-child(3) {
|
#presets-table td:nth-child(4) {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
#presets-table td:nth-child(2) {
|
#presets-table td:nth-child(2) {
|
||||||
width: 400px;
|
width: 400px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#languages-table {
|
#languages-table {
|
||||||
width: auto;
|
width: auto;
|
||||||
/*td:nth-child(2) {
|
/*td:nth-child(2) {
|
||||||
width: 400px;
|
width: 400px;
|
||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
#languages-table th:nth-child(2),
|
#languages-table th:nth-child(2),
|
||||||
#languages-table td:nth-child(2) {
|
#languages-table td:nth-child(2) {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
/*# sourceMappingURL=cloudmedia-admin-settings.css.map */
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"version": 3,
|
||||||
|
"file": "cloudmedia-admin-settings.css",
|
||||||
|
"sources": [
|
||||||
|
"cloudmedia-admin-settings.less"
|
||||||
|
],
|
||||||
|
"names": [],
|
||||||
|
"mappings": "AAAA;EACC,0BAAA;;AAGD;AAAc;EACb,eAAA;;AAGD;EACC,WAAA;;AADD,cAEC,GAAE,UAAU;AAFb,cAEkB,GAAE,UAAU;AAF9B,cAEmC,GAAE,UAAU;AAF/C,cAEoD,GAAE,UAAU;EAC9D,kBAAA;;AAHF,cAKC,GAAE,UAAU;EACX,YAAA;;AAIF;EACC,WAAA;;;;;AADD,gBAEC,GAAE,UAAU;AAFb,gBAEkB,GAAE,UAAU;EAC5B,kBAAA"
|
||||||
|
}
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#presets-table {
|
#presets-table {
|
||||||
width: auto;
|
width: auto;
|
||||||
th:nth-child(1), th:nth-child(3), td:nth-child(1), td:nth-child(3) {
|
th:nth-child(1), th:nth-child(4), td:nth-child(1), td:nth-child(4) {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
td:nth-child(2) {
|
td:nth-child(2) {
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Orchard.Azure.MediaServices.Models;
|
||||||
|
|
||||||
namespace Orchard.Azure.MediaServices.ViewModels.Settings {
|
namespace Orchard.Azure.MediaServices.ViewModels.Settings {
|
||||||
public class EncodingSettingsViewModel {
|
public class EncodingSettingsViewModel {
|
||||||
public IEnumerable<string> WamsEncodingPresets { get; set; }
|
public IEnumerable<EncodingPreset> WamsEncodingPresets { get; set; }
|
||||||
public int DefaultWamsEncodingPresetIndex { get; set; }
|
public int DefaultWamsEncodingPresetIndex { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
@model Orchard.Azure.MediaServices.ViewModels.Settings.EncodingSettingsViewModel
|
@model Orchard.Azure.MediaServices.ViewModels.Settings.EncodingSettingsViewModel
|
||||||
@using (Script.Head()) {
|
@using (Script.Head()) {
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var initWamsEncodingPresets = [ @(Model.WamsEncodingPresets != null && Model.WamsEncodingPresets.Any() ? Html.Raw(String.Join(", ", from s in Model.WamsEncodingPresets select String.Format("'{0}'", s))) : Html.Raw(""))];
|
var initWamsEncodingPresets = [ @(Model.WamsEncodingPresets != null && Model.WamsEncodingPresets.Any() ? Html.Raw(String.Join(", ", from s in Model.WamsEncodingPresets select String.Format("{{name: '{0}', customXml: '{1}'}}", s.Name, HttpUtility.JavaScriptStringEncode(s.CustomXml)))) : Html.Raw(""))];
|
||||||
var initDefaultWamsEncodingPresetIndex = @Model.DefaultWamsEncodingPresetIndex +0;
|
var initDefaultWamsEncodingPresetIndex = @Model.DefaultWamsEncodingPresetIndex +0;
|
||||||
</script>
|
</script>
|
||||||
}
|
}
|
||||||
@@ -18,13 +18,25 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th scope="col">@T("Default")</th>
|
<th scope="col">@T("Default")</th>
|
||||||
<th scope="col">@T("Name")</th>
|
<th scope="col">@T("Name")</th>
|
||||||
|
<th scope="col">@T("Type")</th>
|
||||||
<th scope="col"></th>
|
<th scope="col"></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody data-bind="foreach: wamsEncodingPresets">
|
<tbody data-bind="foreach: wamsEncodingPresets">
|
||||||
<tr>
|
<tr>
|
||||||
<td><input type="radio" name="presets-requiredUploads" data-bind="value: $index(), checked: $parent.defaultWamsEncodingPresetIndex" /></td>
|
<td><input type="radio" name="presets-requiredUploads" data-bind="value: $index(), checked: $parent.defaultWamsEncodingPresetIndex" /></td>
|
||||||
<td><input type="text" class="text large" data-bind="value: value, attr: { id: 'EncodingSettings_WamsEncodingPresets_' + $index(), name: 'EncodingSettings.WamsEncodingPresets[' + $index() + ']'}" /></td>
|
<td>
|
||||||
|
<input type="text" class="text large" data-bind="value: name, attr: { id: 'EncodingSettings_WamsEncodingPresets_' + $index().Name, name: 'EncodingSettings.WamsEncodingPresets[' + $index() + '].Name'}" />
|
||||||
|
<section class="preset-custom-section" data-bind="visible: isExpanded">
|
||||||
|
<label>@T("Custom encoding preset XML")</label>
|
||||||
|
<textarea data-bind="value: customXml, attr: { id: 'EncodingSettings_WamsEncodingPresets_' + $index().CustomXml, name: 'EncodingSettings.WamsEncodingPresets[' + $index() + '].CustomXml'}"></textarea>
|
||||||
|
<p class="hint">@T("Leave empty if this is standard preset (in which case the name must match a standard Microsoft Azure Media Services encoding preset name.")</p>
|
||||||
|
</section>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<strong data-bind="text: type"></strong>
|
||||||
|
<a href="#" data-bind="click: toggle">@T("Change")</a>
|
||||||
|
</td>
|
||||||
<td><a href="#" data-bind="click: Orchard.Azure.MediaServices.Admin.Settings.deleteWamsEncodingPreset">@T("Delete")</a></td>
|
<td><a href="#" data-bind="click: Orchard.Azure.MediaServices.Admin.Settings.deleteWamsEncodingPreset">@T("Delete")</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -33,6 +45,7 @@
|
|||||||
<td></td>
|
<td></td>
|
||||||
<td><a href="#" data-bind="click: Orchard.Azure.MediaServices.Admin.Settings.addNewWamsEncodingPreset"><i class="icon-plus-sign icon-large"></i> Add new</a></td>
|
<td><a href="#" data-bind="click: Orchard.Azure.MediaServices.Admin.Settings.addNewWamsEncodingPreset"><i class="icon-plus-sign icon-large"></i> Add new</a></td>
|
||||||
<td></td>
|
<td></td>
|
||||||
|
<td></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|||||||
Reference in New Issue
Block a user