forked from KnicKnic/WASM-ImageMagick
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebworker.js
89 lines (76 loc) · 2.13 KB
/
webworker.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
// This file helps make the compiled js file be imported as a web worker by the src/magickApi.ts file
const stdout = []
const stderr = []
let exitCode = 0
if (typeof Module == 'undefined') {
Module = {
noInitialRun: true,
moduleLoaded: false,
messagesToProcess: [],
print: text => {
stdout.push(text)
console.log(text)
},
printErr: text => {
stderr.push(text)
console.error(text);
},
quit: status=> {
exitCode = status
}
}
// see https://kripken.github.io/emscripten-site/docs/api_reference/module.html
Module.onRuntimeInitialized = function () {
FS.mkdir('/pictures')
FS.currentPath = '/pictures'
Module.moduleLoaded = true
processFiles()
}
}
processFiles = function () {
if (!Module.moduleLoaded) {
return
}
// clean up stdout, stderr and exitCode
stdout.splice(0, stdout.length)
stderr.splice(0, stderr.length)
exitCode = undefined
for (let message of Module.messagesToProcess) {
for (let file of message.files) {
FS.writeFile(file.name, file.content)
}
try {
Module.callMain(message.args)
}
catch (e) { }
for (let file of message.files) {
// cleanup source files
// mogrify then output files have same name, so skip
if (message.args[0] != 'mogrify') {
FS.unlink(file.name)
}
}
let dir = FS.open('/pictures')
let files = dir.node.contents
let responseFiles = []
for (let destFilename in files) {
let processed = {}
processed.name = destFilename
let read = FS.readFile(destFilename)
// cleanup read file
FS.unlink(destFilename)
processed.blob = new Blob([read])
responseFiles.push(processed)
}
message.outputFiles = responseFiles
message.stdout = stdout.map(s => s)
message.stderr = stderr.map(s => s)
message.exitCode = exitCode
postMessage(message)
}
Module.messagesToProcess = []
}
onmessage = function (magickRequest) {
Module.messagesToProcess.push(magickRequest.data)
processFiles()
}