electron-screenshots 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -2
- package/lib/index.js +7 -0
- package/lib/screenshots.d.ts +6 -1
- package/lib/screenshots.js +53 -12
- package/package.json +6 -4
- package/lib/logger.d.ts +0 -3
- package/lib/logger.js +0 -7
package/README.md
CHANGED
|
@@ -80,11 +80,17 @@ module.exports = {
|
|
|
80
80
|
|
|
81
81
|
## Methods
|
|
82
82
|
|
|
83
|
+
- `Lang`类型产考`react-screenshots`中的`Lang`类型
|
|
83
84
|
- `Lang`类型产考`react-screenshots`中的`Lang`类型
|
|
84
85
|
|
|
85
86
|
```ts
|
|
86
|
-
|
|
87
|
-
|
|
87
|
+
export type LoggerFn = (...args: unknown[]) => void
|
|
88
|
+
export type Logger = Debugger | LoggerFn
|
|
89
|
+
export interface ScreenshotsOpts {
|
|
90
|
+
lang?: Partial<Lang>
|
|
91
|
+
// 调用日志,默认值为 debug('electron-screenshots')
|
|
92
|
+
// debug https://www.npmjs.com/package/debug
|
|
93
|
+
logger?: Logger
|
|
88
94
|
}
|
|
89
95
|
```
|
|
90
96
|
|
package/lib/index.js
CHANGED
|
@@ -10,6 +10,13 @@ electron_1.app.whenReady().then(function () {
|
|
|
10
10
|
var screenshots = new screenshots_1.default({
|
|
11
11
|
lang: {
|
|
12
12
|
operation_rectangle_title: '矩形2323'
|
|
13
|
+
},
|
|
14
|
+
logger: function () {
|
|
15
|
+
var args = [];
|
|
16
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
17
|
+
args[_i] = arguments[_i];
|
|
18
|
+
}
|
|
19
|
+
return console.log(args);
|
|
13
20
|
}
|
|
14
21
|
});
|
|
15
22
|
electron_1.globalShortcut.register('ctrl+shift+a', function () {
|
package/lib/screenshots.d.ts
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
+
import { Debugger } from 'debug';
|
|
2
3
|
import { BrowserWindow, BrowserView } from 'electron';
|
|
3
4
|
import Events from 'events';
|
|
4
5
|
import { Bounds, Lang } from 'react-screenshots';
|
|
6
|
+
export declare type LoggerFn = (...args: unknown[]) => void;
|
|
7
|
+
export declare type Logger = Debugger | LoggerFn;
|
|
5
8
|
export interface ScreenshotsOpts {
|
|
6
|
-
lang
|
|
9
|
+
lang?: Partial<Lang>;
|
|
10
|
+
logger?: Logger;
|
|
7
11
|
}
|
|
8
12
|
export { Bounds, Lang };
|
|
9
13
|
export default class Screenshots extends Events {
|
|
10
14
|
$win: BrowserWindow | null;
|
|
11
15
|
$view: BrowserView;
|
|
16
|
+
private logger;
|
|
12
17
|
private isReady;
|
|
13
18
|
constructor(opts?: ScreenshotsOpts);
|
|
14
19
|
/**
|
package/lib/screenshots.js
CHANGED
|
@@ -14,6 +14,25 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
14
14
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
15
|
};
|
|
16
16
|
})();
|
|
17
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
17
36
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
18
37
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
19
38
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -54,13 +73,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
54
73
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
55
74
|
};
|
|
56
75
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
76
|
+
var debug_1 = __importDefault(require("debug"));
|
|
57
77
|
var electron_1 = require("electron");
|
|
58
78
|
var promises_1 = __importDefault(require("fs/promises"));
|
|
59
79
|
var event_1 = __importDefault(require("./event"));
|
|
60
80
|
var events_1 = __importDefault(require("events"));
|
|
61
81
|
var padStart_1 = __importDefault(require("./padStart"));
|
|
62
82
|
var getBoundAndDisplay_1 = __importDefault(require("./getBoundAndDisplay"));
|
|
63
|
-
var logger_1 = __importDefault(require("./logger"));
|
|
64
83
|
var Screenshots = /** @class */ (function (_super) {
|
|
65
84
|
__extends(Screenshots, _super);
|
|
66
85
|
function Screenshots(opts) {
|
|
@@ -77,10 +96,11 @@ var Screenshots = /** @class */ (function (_super) {
|
|
|
77
96
|
});
|
|
78
97
|
_this.isReady = new Promise(function (resolve) {
|
|
79
98
|
electron_1.ipcMain.once('SCREENSHOTS:ready', function () {
|
|
80
|
-
|
|
99
|
+
_this.logger('SCREENSHOTS:ready');
|
|
81
100
|
resolve();
|
|
82
101
|
});
|
|
83
102
|
});
|
|
103
|
+
_this.logger = (opts === null || opts === void 0 ? void 0 : opts.logger) || (0, debug_1.default)('electron-screenshots');
|
|
84
104
|
_this.listenIpc();
|
|
85
105
|
_this.$view.webContents.loadURL("file://".concat(require.resolve('react-screenshots/electron/electron.html')));
|
|
86
106
|
if (opts === null || opts === void 0 ? void 0 : opts.lang) {
|
|
@@ -93,7 +113,7 @@ var Screenshots = /** @class */ (function (_super) {
|
|
|
93
113
|
*/
|
|
94
114
|
Screenshots.prototype.startCapture = function () {
|
|
95
115
|
var _this = this;
|
|
96
|
-
|
|
116
|
+
this.logger('startCapture');
|
|
97
117
|
this.isReady.then(function () {
|
|
98
118
|
if (_this.$win && !_this.$win.isDestroyed()) {
|
|
99
119
|
_this.$win.close();
|
|
@@ -116,7 +136,7 @@ var Screenshots = /** @class */ (function (_super) {
|
|
|
116
136
|
* 结束截图
|
|
117
137
|
*/
|
|
118
138
|
Screenshots.prototype.endCapture = function () {
|
|
119
|
-
|
|
139
|
+
this.logger('endCapture');
|
|
120
140
|
if (!this.$win)
|
|
121
141
|
return;
|
|
122
142
|
this.$win.setSimpleFullScreen(false);
|
|
@@ -129,7 +149,7 @@ var Screenshots = /** @class */ (function (_super) {
|
|
|
129
149
|
Screenshots.prototype.setLang = function (lang) {
|
|
130
150
|
var _this = this;
|
|
131
151
|
this.isReady.then(function () {
|
|
132
|
-
|
|
152
|
+
_this.logger('setLang', lang);
|
|
133
153
|
_this.$view.webContents.send('SCREENSHOTS:setLang', lang);
|
|
134
154
|
});
|
|
135
155
|
};
|
|
@@ -177,11 +197,30 @@ var Screenshots = /** @class */ (function (_super) {
|
|
|
177
197
|
Screenshots.prototype.capture = function (_a) {
|
|
178
198
|
var display = _a.display;
|
|
179
199
|
return __awaiter(this, void 0, void 0, function () {
|
|
180
|
-
var sources, source;
|
|
200
|
+
var NodeScreenshots, capturer, image, err_1, sources, source;
|
|
181
201
|
return __generator(this, function (_b) {
|
|
182
202
|
switch (_b.label) {
|
|
183
203
|
case 0:
|
|
184
|
-
|
|
204
|
+
this.logger('SCREENSHOTS:capture');
|
|
205
|
+
_b.label = 1;
|
|
206
|
+
case 1:
|
|
207
|
+
_b.trys.push([1, 4, , 6]);
|
|
208
|
+
return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require('node-screenshots')); })];
|
|
209
|
+
case 2:
|
|
210
|
+
NodeScreenshots = (_b.sent()).Screenshots;
|
|
211
|
+
capturer = NodeScreenshots.fromDisplay(display.id);
|
|
212
|
+
this.logger('SCREENSHOTS:NodeScreenshots.fromDisplay(%d) %o', display.id, capturer);
|
|
213
|
+
if (!capturer) {
|
|
214
|
+
throw new Error("NodeScreenshots.fromDisplay(".concat(display.id, ") get null"));
|
|
215
|
+
}
|
|
216
|
+
return [4 /*yield*/, capturer.capture()];
|
|
217
|
+
case 3:
|
|
218
|
+
image = _b.sent();
|
|
219
|
+
this.$view.webContents.send('SCREENSHOTS:capture', display, "data:image/png;base64,".concat(image.toString('base64')));
|
|
220
|
+
return [3 /*break*/, 6];
|
|
221
|
+
case 4:
|
|
222
|
+
err_1 = _b.sent();
|
|
223
|
+
this.logger('SCREENSHOTS:capturer.capture() error %o', err_1);
|
|
185
224
|
return [4 /*yield*/, electron_1.desktopCapturer.getSources({
|
|
186
225
|
types: ['screen'],
|
|
187
226
|
thumbnailSize: {
|
|
@@ -189,8 +228,9 @@ var Screenshots = /** @class */ (function (_super) {
|
|
|
189
228
|
height: display.height
|
|
190
229
|
}
|
|
191
230
|
})];
|
|
192
|
-
case
|
|
231
|
+
case 5:
|
|
193
232
|
sources = _b.sent();
|
|
233
|
+
source = void 0;
|
|
194
234
|
// Linux系统上,screen.getDisplayNearestPoint 返回的 Display 对象的 id 和 这儿 source 对象上的 display_id(Linux上,这个值是空字符串) 或 id 的中间部分,都不一致
|
|
195
235
|
// 但是,如果只有一个显示器的话,其实不用判断,直接返回就行
|
|
196
236
|
if (sources.length === 1) {
|
|
@@ -208,7 +248,8 @@ var Screenshots = /** @class */ (function (_super) {
|
|
|
208
248
|
return [2 /*return*/];
|
|
209
249
|
}
|
|
210
250
|
this.$view.webContents.send('SCREENSHOTS:capture', display, source.thumbnail.toDataURL());
|
|
211
|
-
return [
|
|
251
|
+
return [3 /*break*/, 6];
|
|
252
|
+
case 6: return [2 /*return*/];
|
|
212
253
|
}
|
|
213
254
|
});
|
|
214
255
|
});
|
|
@@ -222,7 +263,7 @@ var Screenshots = /** @class */ (function (_super) {
|
|
|
222
263
|
* OK事件
|
|
223
264
|
*/
|
|
224
265
|
electron_1.ipcMain.on('SCREENSHOTS:ok', function (e, buffer, bounds) {
|
|
225
|
-
|
|
266
|
+
_this.logger('SCREENSHOTS:ok', buffer, bounds);
|
|
226
267
|
var event = new event_1.default();
|
|
227
268
|
_this.emit('ok', event, buffer, bounds);
|
|
228
269
|
if (event.defaultPrevented) {
|
|
@@ -235,7 +276,7 @@ var Screenshots = /** @class */ (function (_super) {
|
|
|
235
276
|
* CANCEL事件
|
|
236
277
|
*/
|
|
237
278
|
electron_1.ipcMain.on('SCREENSHOTS:cancel', function () {
|
|
238
|
-
|
|
279
|
+
_this.logger('SCREENSHOTS:cancel');
|
|
239
280
|
var event = new event_1.default();
|
|
240
281
|
_this.emit('cancel', event);
|
|
241
282
|
if (event.defaultPrevented) {
|
|
@@ -251,7 +292,7 @@ var Screenshots = /** @class */ (function (_super) {
|
|
|
251
292
|
return __generator(this, function (_b) {
|
|
252
293
|
switch (_b.label) {
|
|
253
294
|
case 0:
|
|
254
|
-
|
|
295
|
+
this.logger('SCREENSHOTS:save', buffer, bounds);
|
|
255
296
|
event = new event_1.default();
|
|
256
297
|
this.emit('save', event, buffer, bounds);
|
|
257
298
|
if (event.defaultPrevented || !this.$win) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "electron-screenshots",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "electron 截图插件",
|
|
5
5
|
"types": "lib/screenshots.d.ts",
|
|
6
6
|
"main": "lib/screenshots.js",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
],
|
|
10
10
|
"scripts": {
|
|
11
11
|
"prepublishOnly": "npm run build",
|
|
12
|
-
"start": "DEBUG=screenshots electron lib/index.js",
|
|
12
|
+
"start": "cross-env DEBUG=electron-screenshots electron lib/index.js",
|
|
13
13
|
"dev": "tsc --sourceMap --watch",
|
|
14
14
|
"build": "npm run lint && npm run clean && tsc",
|
|
15
15
|
"lint": "eslint . --ext .js,.ts --fix",
|
|
@@ -36,7 +36,8 @@
|
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"debug": "^4.3.3",
|
|
39
|
-
"
|
|
39
|
+
"node-screenshots": "^0.0.2",
|
|
40
|
+
"react-screenshots": "^0.4.0"
|
|
40
41
|
},
|
|
41
42
|
"peerDependencies": {
|
|
42
43
|
"electron": ">=11"
|
|
@@ -45,6 +46,7 @@
|
|
|
45
46
|
"@types/debug": "^4.1.7",
|
|
46
47
|
"@typescript-eslint/eslint-plugin": "^5.10.0",
|
|
47
48
|
"@typescript-eslint/parser": "^5.10.0",
|
|
49
|
+
"cross-env": "^7.0.3",
|
|
48
50
|
"electron": "^16.0.7",
|
|
49
51
|
"electron-debug": "^3.2.0",
|
|
50
52
|
"eslint": "^8.7.0",
|
|
@@ -55,5 +57,5 @@
|
|
|
55
57
|
"rimraf": "^3.0.2",
|
|
56
58
|
"typescript": "^4.5.5"
|
|
57
59
|
},
|
|
58
|
-
"gitHead": "
|
|
60
|
+
"gitHead": "7f08cb538a014a14ca26111065f61953059be570"
|
|
59
61
|
}
|
package/lib/logger.d.ts
DELETED
package/lib/logger.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
var debug_1 = __importDefault(require("debug"));
|
|
7
|
-
exports.default = (0, debug_1.default)('screenshots');
|