Skip to content

Commit 9feedb1

Browse files
committed
♻️ Use MacRunner
1 parent 8bca39f commit 9feedb1

File tree

5 files changed

+45
-140
lines changed

5 files changed

+45
-140
lines changed
-16.4 KB
Loading
-20 KB
Loading

record/mac-runner.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,11 +137,14 @@ class MacRunner {
137137
* Capture the app window into a file
138138
* @param {*} appName Application name to capture
139139
* @param {*} output Output file name (png)
140+
* @param {boolean} disableShadow Do not capture the App shadow
140141
*/
141-
captureApp(appName, output) {
142+
captureApp(appName, output, disableShadow = true) {
142143
return this.register(() =>
143144
execCommand(
144-
`screencapture -o -l$(osascript -e 'tell app "${appName}" to id of window 1') ${output}`
145+
`screencapture ${
146+
disableShadow ? '-o' : ''
147+
} -l$(osascript -e 'tell app "${appName}" to id of window 1') ${output}`
145148
)
146149
)
147150
}
Lines changed: 20 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,36 @@
1-
const delay = require('delay')
2-
const glob = require('glob-promise')
3-
const robot = require('robotjs')
4-
const util = require('util')
5-
const exec = util.promisify(require('child_process').exec)
6-
const { makeAppActive, compressPngImage } = require('../../utils')
1+
const MacRunner = require('../../mac-runner')
2+
const { compressPngImage } = require('../../utils')
73

84
module.exports = {
95
run: async (outputPath) => {
10-
console.log('> Recording screenshot disable-shadow with param set to false')
11-
12-
const { stderr: setEnvError } = await exec(
13-
'defaults write com.apple.screencapture show-thumbnail -bool false && defaults write com.apple.screencapture disable-shadow -bool false'
6+
console.log(
7+
'> Recording screencapture disable-shadow with param set to false'
148
)
15-
if (setEnvError) {
16-
console.error(
17-
'An error occured while setting up the screenshot disble-shadow command'
18-
)
9+
10+
try {
11+
const runner = new MacRunner()
12+
await runner
13+
.openApp('Safari', '-F https://apple.com')
14+
.activateApp('Safari')
15+
.moveAndResizeApp('Safari', 0, 0, 740 * 2, 413 * 2)
16+
// We do not set the default as `captureApp` takes a param to disable shadow
17+
.captureApp('Safari', `${outputPath}/false-tmp.png`, false)
18+
.killApp('Safari')
19+
.run()
20+
} catch (runnerError) {
1921
logRollbackInfo()
20-
throw new Error(setEnvError)
22+
throw new Error(runnerError)
2123
}
2224

23-
// Preparation
24-
robot.moveMouse(
25-
robot.getScreenSize().width / 2,
26-
robot.getScreenSize().height / 2
27-
)
28-
robot.mouseClick()
29-
30-
await makeAppActive('Safari')
31-
32-
robot.keyTap('l', 'command')
33-
await delay(100)
34-
35-
robot.keyTap('h')
36-
robot.typeString('ttps://www.apple.com/macos/')
37-
await delay(100)
38-
robot.keyTap('enter')
39-
await delay(8000)
40-
41-
// Screenshot
42-
robot.keyTap('4', ['command', 'shift'])
43-
await delay(100)
44-
robot.keyTap('space')
45-
await delay(100)
46-
robot.keyTap('enter')
47-
await delay(100)
48-
49-
robot.keyTap('w', 'command')
50-
51-
await delay(1000)
52-
const screenshot = (
53-
await glob(`/Users/${process.env.USER}/Desktop/*.png`)
54-
).pop()
55-
5625
try {
57-
await compressPngImage(screenshot, outputPath, 'false')
26+
await compressPngImage(`${outputPath}/false-tmp.png`, outputPath, 'false')
5827
} catch (compressPngImageError) {
5928
logRollbackInfo()
6029
throw new Error(compressPngImageError)
6130
}
6231

63-
const { stderr: deleteEnvError } = await exec(
64-
'defaults delete com.apple.screencapture show-thumbnail && defaults delete com.apple.screencapture disable-shadow'
65-
)
66-
if (deleteEnvError) {
67-
console.error(
68-
'An error occured while cleaning the dock autohide-delay environment'
69-
)
70-
logRollbackInfo()
71-
throw new Error(deleteEnvError)
72-
}
73-
74-
return { filepath: `${outputPath}/false`, isVideo: false }
32+
return { filepath: `${outputPath}/false` }
7533
},
7634
}
7735

78-
function logRollbackInfo() {
79-
console.info(
80-
'Please manually run this command to make sure everything is properly reset:'
81-
)
82-
console.info(
83-
'defaults delete com.apple.screencapture show-thumbnail && defaults delete com.apple.screencapture disable-shadow'
84-
)
85-
}
36+
function logRollbackInfo() {}
Lines changed: 20 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,36 @@
1-
const delay = require('delay')
2-
const glob = require('glob-promise')
3-
const robot = require('robotjs')
4-
const util = require('util')
5-
const exec = util.promisify(require('child_process').exec)
6-
const { makeAppActive, compressPngImage } = require('../../utils')
1+
const MacRunner = require('../../mac-runner')
2+
const { compressPngImage } = require('../../utils')
73

84
module.exports = {
95
run: async (outputPath) => {
10-
console.log('> Recording screenshot disable-shadow with param set to true')
11-
12-
const { stderr: setEnvError } = await exec(
13-
'defaults write com.apple.screencapture show-thumbnail -bool false && defaults write com.apple.screencapture disable-shadow -bool true'
6+
console.log(
7+
'> Recording screencapture disable-shadow with param set to true'
148
)
15-
if (setEnvError) {
16-
console.error(
17-
'An error occured while setting up the screenshot disble-shadow command'
18-
)
9+
10+
try {
11+
const runner = new MacRunner()
12+
await runner
13+
.openApp('Safari', '-F https://apple.com')
14+
.activateApp('Safari')
15+
.moveAndResizeApp('Safari', 0, 0, 740 * 2, 413 * 2)
16+
// We do not set the default as `captureApp` takes a param to disable shadow
17+
.captureApp('Safari', `${outputPath}/true-tmp.png`, true)
18+
.killApp('Safari')
19+
.run()
20+
} catch (runnerError) {
1921
logRollbackInfo()
20-
throw new Error(setEnvError)
22+
throw new Error(runnerError)
2123
}
2224

23-
// Preparation
24-
robot.moveMouse(
25-
robot.getScreenSize().width / 2,
26-
robot.getScreenSize().height / 2
27-
)
28-
robot.mouseClick()
29-
30-
await makeAppActive('Safari')
31-
32-
robot.keyTap('l', 'command')
33-
await delay(100)
34-
35-
robot.keyTap('h')
36-
robot.typeString('ttps://www.apple.com/macos/')
37-
await delay(100)
38-
robot.keyTap('enter')
39-
await delay(8000)
40-
41-
// Screenshot
42-
robot.keyTap('4', ['command', 'shift'])
43-
await delay(100)
44-
robot.keyTap('space')
45-
await delay(100)
46-
robot.keyTap('enter')
47-
await delay(100)
48-
49-
robot.keyTap('w', 'command')
50-
51-
await delay(1000)
52-
const screenshot = (
53-
await glob(`/Users/${process.env.USER}/Desktop/*.png`)
54-
).pop()
55-
5625
try {
57-
await compressPngImage(screenshot, outputPath, 'true')
26+
await compressPngImage(`${outputPath}/true-tmp.png`, outputPath, 'true')
5827
} catch (compressPngImageError) {
5928
logRollbackInfo()
6029
throw new Error(compressPngImageError)
6130
}
6231

63-
const { stderr: deleteEnvError } = await exec(
64-
'defaults delete com.apple.screencapture show-thumbnail && defaults delete com.apple.screencapture disable-shadow'
65-
)
66-
if (deleteEnvError) {
67-
console.error(
68-
'An error occured while cleaning the dock autohide-delay environment'
69-
)
70-
logRollbackInfo()
71-
throw new Error(deleteEnvError)
72-
}
73-
74-
return { filepath: `${outputPath}/true`, isVideo: false }
32+
return { filepath: `${outputPath}/true` }
7533
},
7634
}
7735

78-
function logRollbackInfo() {
79-
console.info(
80-
'Please manually run this command to make sure everything is properly reset:'
81-
)
82-
console.info(
83-
'defaults delete com.apple.screencapture show-thumbnail && defaults delete com.apple.screencapture disable-shadow'
84-
)
85-
}
36+
function logRollbackInfo() {}

0 commit comments

Comments
 (0)