-
Notifications
You must be signed in to change notification settings - Fork 2
/
index.js
143 lines (125 loc) · 4.41 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
'use strict';
angular.module('codemill.premiere', ['codemill.adobe'])
.service('cmPremiereService', ['$q', '$log', '$timeout', 'cmAdobeService',
function ($q, $log, $timeout, adobeService) {
var jobs = {};
function registerJob(jobID, deferred) {
jobs[jobID] = deferred;
}
function unregisterJob(jobID) {
delete jobs[jobID];
}
function renderSequence(presetPath, outputPath) {
return { method : 'renderSequence', args : [presetPath, outputPath]};
}
function getActiveSequence() {
return { method : 'getActiveSequence', returnsObject : true };
}
function clearSequenceMarkers() {
return { method : 'clearSequenceMarkers' };
}
function createSequenceMarkers(markers) {
return { method : 'createSequenceMarkers', args : [markers] };
}
function handleRenderEvent(event) {
var jobID = event.data.jobID;
if (jobID in jobs) {
var deferred = jobs[jobID];
switch (event.data.type) {
case 'error':
$log.error('Failed rendering sequence', event.data.error);
deferred.reject('Failed rendering sequence');
unregisterJob(jobID);
break;
case 'progress':
deferred.notify(event.data.progress * 100);
break;
case 'complete':
$log.info('File from host: ', event.data.outputFilePath);
deferred.resolve(event.data.outputFilePath);
unregisterJob(jobID);
break;
}
}
}
if (adobeService.isHostAvailable()) {
adobeService.registerEventListener('se.codemill.ppro.RenderEvent', handleRenderEvent);
}
function runWithActiveSequenceCheck(callOpts) {
if (adobeService.isHostAvailable()) {
var deferred = $q.defer();
adobeService.callCS(getActiveSequence())
.then(function (sequence) {
if (sequence === null || sequence === undefined || sequence.id === null || sequence.id === undefined) {
deferred.reject('No active sequence');
} else {
adobeService.callCS(callOpts)
.then(function (data) {
deferred.resolve(data);
})
.catch(function (error) {
deferred.reject(error);
});
}
})
.catch(function (error) {
deferred.reject(error);
});
return deferred.promise;
} else {
return $q.when();
}
}
this.renderActiveSequence = function (config) {
var deferred = $q.defer();
var outputPath = adobeService.getFilePath(config.output);
var presetPath = adobeService.getFilePath(config.preset);
if (!adobeService.isHostAvailable()) {
var iteration = 0;
var iterationFunc = function () {
if (iteration >= 10) {
deferred.resolve(outputPath + 'test.mp4');
} else {
deferred.notify(iteration * 10);
iteration += 1;
$timeout(iterationFunc, 250);
}
};
$timeout(iterationFunc, 250);
} else {
runWithActiveSequenceCheck(renderSequence(presetPath, outputPath))
.then(function(jobID) {
registerJob(jobID, deferred);
})
.catch(function(error) {
deferred.reject(error);
});
}
return deferred.promise;
};
this.clearSequenceMarkers = function () {
return runWithActiveSequenceCheck(clearSequenceMarkers());
};
this.createSequenceMarkers = function (markers) {
return runWithActiveSequenceCheck(createSequenceMarkers(markers));
};
var guid = function () {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
s4() + '-' + s4() + s4() + s4();
};
this.getActiveSequence = function () {
if (adobeService.isHostAvailable()) {
return adobeService.callCS(getActiveSequence());
} else {
return $q.when({
'id': guid(),
'name': 'Sequence name'
});
}
};
}]);