| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #!/usr/local/bin/node
- /*
- * Copyright 2010-2020 Gildas Lormeau
- * contact : gildas.lormeau <at> gmail.com
- *
- * This file is part of SingleFile.
- *
- * The code in this file is free software: you can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public License
- * (GNU AGPL) as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *
- * The code in this file is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
- * General Public License for more details.
- *
- * As additional permission under GNU AGPL version 3 section 7, you may
- * distribute UNMODIFIED VERSIONS OF THIS file without the copy of the GNU
- * AGPL normally required by section 4, provided you include this license
- * notice and a URL through which recipients can access the Corresponding
- * Source.
- */
- /* global require, process */
- const fs = require("fs");
- const nativeMessage = require("./lib/messaging.js");
- const backend = require("./../cli/back-ends/puppeteer.js");
- process.stdin
- .pipe(new nativeMessage.Input())
- .pipe(new nativeMessage.Transform(function (msg, push, done) {
- capturePage(msg);
- push(JSON.stringify(msg));
- done();
- }))
- .pipe(new nativeMessage.Output())
- .pipe(process.stdout);
- async function capturePage(options) {
- await backend.initialize(require("./options.json"));
- try {
- const pageData = await backend.getPageData(options);
- if (options.output) {
- fs.writeFileSync(getFilename(options.output), pageData.content);
- } else if (options.filenameTemplate && pageData.filename) {
- pageData.filename = "../" + pageData.filename;
- fs.writeFileSync(getFilename(pageData.filename), pageData.content);
- }
- return pageData;
- } catch (error) {
- if (options.errorFile) {
- const message = "URL: " + options.url + "\nStack: " + error.stack + "\n";
- fs.writeFileSync(options.errorFile, message, { flag: "a" });
- }
- } finally {
- await backend.closeBrowser();
- process.exit(0);
- }
- }
- function getFilename(filename, index = 1) {
- let newFilename = filename;
- if (index > 1) {
- const regExpMatchExtension = /(\.[^.]+)$/;
- const matchExtension = newFilename.match(regExpMatchExtension);
- if (matchExtension && matchExtension[1]) {
- newFilename = newFilename.replace(regExpMatchExtension, " - " + index + matchExtension[1]);
- } else {
- newFilename += " - " + index;
- }
- }
- if (fs.existsSync(newFilename)) {
- return getFilename(filename, index + 1);
- } else {
- return newFilename;
- }
- }
|