-
Notifications
You must be signed in to change notification settings - Fork 1
/
KBRG_TimecodeCorrection.jsx
155 lines (136 loc) · 5.16 KB
/
KBRG_TimecodeCorrection.jsx
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
144
145
146
147
148
149
150
151
152
153
154
155
#include '../json2.js'
#include 'CacheThumbnails.js'
#include 'ThumbnailMetadata.js'
#include 'Timecode.js'
//add XMP context
if (ExternalObject.AdobeXMPScript === undefined) {
ExternalObject.AdobeXMPScript = new ExternalObject('lib:AdobeXMPScript');
}
//add event context
try {
var xLib = new ExternalObject("lib:PlugPlugExternalObject");
} catch (e) {
alert(e);
}
//fix missing const value
XMPConst.NS_BWF = "http:https://ns.adobe.com/bwf/bext/1.0/";
//define namespace
var Agrarvolution = Agrarvolution || {};
$.Agrarvolution = Agrarvolution;
Agrarvolution.logLevels = {
critical: "CRIT",
status: "STAT",
info: "INFO",
error: "ERR "
};
Agrarvolution.CEP_PANEL = {
correction: 0,
repair: 1,
};
/**
*CSXSEvent wrapping function to send log messages to the gui.
*@param {string} text - text that should be sent to gui
*@param {string} logLevel - choose which log level to display in gui
*@param {number} parameters - selects which panel should receive the log messages
*@param {boolean} logging - enable logging
*@return {boolean}
*/
Agrarvolution.logToCEP = function(text, logLevel, targetPanel, logging) {
if (!xLib) {
return false;
}
if (!logging) {
return false;
}
var eventObj = new CSXSEvent();
targetPanel = targetPanel || Agrarvolution.CEP_PANEL.correction; //temp default
switch (targetPanel) {
case Agrarvolution.CEP_PANEL.correction:
default:
eventObj.type = "com.adobe.csxs.events.agrarvolution.timecodeCorrectionLog";
break;
case Agrarvolution.CEP_PANEL.repair:
eventObj.type = "com.adobe.csxs.events.agrarvolution.timecodeRepairLog";
break;
}
eventObj.data = JSON.stringify({
text: text,
logLevel: logLevel
});
eventObj.dispatch();
return true;
}
Agrarvolution.timecodeCorrection = {
TIMECODE_SOURCE: {
file: 0,
created: 1,
lastChanged: 2
},
SCAN_TARGET: {
folder: 0,
selection: 1
},
/**
* Caches thumbnails and exports any available timecodedata to an csv string.
* @param {object} parameters
* @returns {string} boolean on error (false), string on success
*/
exportTimecodeData: function(parameters) {
if (parameters === undefined) {
Agrarvolution.logToCEP("Called without parameters.", Agrarvolution.logLevels.error, parameters.logTarget, parameters.logging);
return '';
}
Agrarvolution.logToCEP("Starting host script.", Agrarvolution.logLevels.info, parameters.logTarget, parameters.logging);
var thumbnailCache = new CacheThumbnails(parameters);
if (thumbnailCache.mediaCache.length === 0) {
Agrarvolution.logToCEP("No media was cached.", Agrarvolution.logLevels.error, parameters.logTarget, parameters.logging);
return '';
}
return JSON.stringify({
csv: thumbnailCache.toTimecodeCSV(),
path: app.document.presentationPath
});
},
/**
* Handles input from CEP UI.
* It caches thumbnails, and calls the generic update method with the specified method.
* @param {object} parameters
* @returns {boolean} true on success
*/
processCEPInput: function(parameters) {
if (parameters === undefined) {
Agrarvolution.logToCEP("Called without parameters.", Agrarvolution.logLevels.error, parameters.logTarget, parameters.logging);
return false;
}
Agrarvolution.logToCEP("Starting host script.", Agrarvolution.logLevels.info, parameters.logTarget, parameters.logging);
var thumbnailCache = new CacheThumbnails(parameters);
if (thumbnailCache.mediaCache.length === 0) {
Agrarvolution.logToCEP("No media was cached.", Agrarvolution.logLevels.error, parameters.logTarget, parameters.logging);
return false;
}
var processedMedia = thumbnailCache.updateCache(parameters, parameters.method);
if (processedMedia === 0) {
Agrarvolution.logToCEP("No media was processed.",
Agrarvolution.logLevels.status, parameters.logTarget, parameters.logging);
return false;
}
/*check processing
* This currently ignores changes to the thumbnails if they are not made with the array update / csv pipeline.
* @Todo Add ability to check every time related type of thumbnail metadata change.
*/
var checkCache = new CacheThumbnails(parameters);
if (parameters.timecodes) {
var validatedInput = CacheThumbnails.validateTimecodeArray(parameters.timecodes, Agrarvolution.logToCEP, parameters.logTarget, false);
var checkResults = checkCache.compareTimecodes(validatedInput);
return JSON.stringify({
results: checkResults,
processed: processedMedia
});
}
Agrarvolution.logToCEP("Time formats for " + processedMedia + " media thumbnails have been updated.",
Agrarvolution.logLevels.status, parameters.logTarget, parameters.logging);
return JSON.stringify({
processed: processedMedia
});
}
};