forked from feller-prj/extractor-project
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ffmpeg.js
90 lines (82 loc) · 2.27 KB
/
ffmpeg.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
'use strict';
const ffmpeg = {
sep: navigator.platform.startsWith('Win') ? '\\' : '/'
};
window.ffmpeg = ffmpeg;
ffmpeg.convert = function(command, args, dictionary) {
return new Promise((resolve, reject) => {
args = args.split(/\s/).map(s => {
Object.keys(dictionary).forEach(key => s = s.replace(key, dictionary[key]));
return s;
});
chrome.runtime.sendNativeMessage('com.add0n.node', {
cmd: 'exec',
kill: true,
command,
arguments: args
}, obj => {
if (!obj || obj.error || (obj.code && obj.code !== 0)) {
console.warn('ffmpeg', obj);
reject(new Error(obj ? obj.error || obj.stderr || obj.stdout : 'error_12'));
}
else {
resolve();
}
});
});
};
ffmpeg.parent = path => {
return path.split(ffmpeg.sep).slice(0, -1).join(ffmpeg.sep);
};
ffmpeg.extract = path => {
const s = path.split(ffmpeg.sep).pop();
if (s.indexOf('.') === -1) {
return [s, ''].map(a => a.trim());
}
else {
const a = s.split('.');
const e = a.pop();
return [a.join('.'), e].map(a => a.trim());
}
};
ffmpeg.resolve = (path, name, extension) => {
function check(files, name, extension, index = 0) {
const leafname = name.replace(/-\d+$/, '') + (index ? '-' + index : '') + '.' + extension;
for (const n of files) {
if (n.endsWith(leafname)) {
return check(files, name, extension, index + 1);
}
}
return leafname;
}
return new Promise((resolve, reject) => {
chrome.runtime.sendNativeMessage('com.add0n.node', {
cmd: 'dir',
path
}, obj => {
if (!obj || obj.error || (obj.code && obj.code !== 0)) {
console.error(obj);
reject(new Error(obj ? obj.error || obj.stderr || obj.stdout : 'error_10'));
}
else {
resolve(path + ffmpeg.sep + check(obj.files, name, extension));
}
});
});
};
ffmpeg.remove = files => {
return new Promise((resolve, reject) => {
chrome.runtime.sendNativeMessage('com.add0n.node', {
cmd: 'remove',
files
}, obj => {
if (!obj || obj.error || (obj.code && obj.code !== 0)) {
console.error(obj);
reject(new Error(obj ? obj.error || obj.stderr || obj.stdout : 'error_11'));
}
else {
resolve();
}
});
});
};