diff --git a/src/public/stylesheets/style.css b/src/public/stylesheets/style.css index 34b03edb6..83b29dba1 100644 --- a/src/public/stylesheets/style.css +++ b/src/public/stylesheets/style.css @@ -832,4 +832,8 @@ a.external:after, a[href^="http://"]:after, a[href^="https://"]:after { .note-detail-empty { margin: 50px; +} + +.modal-header { + padding: 0.7rem 1rem !important; /* make modal header padding slightly smaller */ } \ No newline at end of file diff --git a/src/routes/api/clipper.js b/src/routes/api/clipper.js new file mode 100644 index 000000000..cfd352b38 --- /dev/null +++ b/src/routes/api/clipper.js @@ -0,0 +1,59 @@ +"use strict"; + +const noteService = require('../../services/notes'); +const dateNoteService = require('../../services/date_notes'); +const dateUtils = require('../../services/date_utils'); +const imageService = require('../../services/image'); + +async function createNote(req) { + console.log(req.body); + + const {title, html, source_url} = req.body; + + const todayNote = await dateNoteService.getDateNote(dateUtils.localNowDate()); + + await noteService.createNote(todayNote.noteId, title, html, { + attributes: [ + { + type: 'label', + name: 'sourceUrl', + value: source_url + } + ] + }); + + return {}; +} + +async function createScreenshot(req) { + console.log(req.body); + + const {imageDataUrl, title, url} = req.body; + + const prefix = "data:image/png;base64,"; + + if (imageDataUrl.startsWith(prefix)) { + const buffer = Buffer.from(imageDataUrl.substr(prefix.length), 'base64'); + + const todayNote = await dateNoteService.getDateNote(dateUtils.localNowDate()); + + const {note} = await imageService.saveImage(buffer, title, todayNote.noteId, true); + + await note.setLabel('sourceUrl', url); + } + else { + console.log("Unrecognized prefix"); + } +} + +async function ping(req, res) { + console.log("PING!!!!"); + + res.status(200).send("TriliumClipperServer"); +} + +module.exports = { + createNote, + createScreenshot, + ping +}; \ No newline at end of file diff --git a/src/routes/routes.js b/src/routes/routes.js index 9b8655dae..b46b0eff9 100644 --- a/src/routes/routes.js +++ b/src/routes/routes.js @@ -32,6 +32,7 @@ const filesRoute = require('./api/file_upload'); const searchRoute = require('./api/search'); const dateNotesRoute = require('./api/date_notes'); const linkMapRoute = require('./api/link_map'); +const clipperRoute = require('./api/clipper'); const log = require('../services/log'); const express = require('express'); @@ -223,6 +224,10 @@ function register(app) { // this is for entering protected mode so user has to be already logged-in (that's the reason we don't require username) apiRoute(POST, '/api/login/protected', loginApiRoute.loginToProtectedSession); + route(POST, '/api/clipper/notes', [], clipperRoute.createNote, apiResultHandler); + route(POST, '/api/clipper/screenshot', [], clipperRoute.createScreenshot, apiResultHandler); + route(GET, '/api/clipper/ping', [], clipperRoute.ping); + app.use('', router); } diff --git a/src/services/image.js b/src/services/image.js index 90e34139c..bc49a0f4e 100644 --- a/src/services/image.js +++ b/src/services/image.js @@ -48,7 +48,7 @@ async function shrinkImage(buffer, originalName) { try { finalImageBuffer = await optimize(resizedImage); } catch (e) { - log.error("Failed to optimize image '" + originalName + "\nStack: " + e.stack); + log.error("Failed to optimize image '" + originalName + "'\nStack: " + e.stack); finalImageBuffer = resizedImage; } @@ -93,7 +93,7 @@ async function optimize(buffer) { quality: 50 }), imageminPngQuant({ - quality: "0-70" + quality: [0, 0.7] }), imageminGifLossy({ lossy: 80, diff --git a/src/services/port.js b/src/services/port.js index 4748c98e6..fa6f7fda9 100644 --- a/src/services/port.js +++ b/src/services/port.js @@ -3,7 +3,7 @@ const config = require('./config'); const utils = require('./utils'); if (utils.isElectron()) { - module.exports = getPort(); + module.exports = 53010;//getPort(); } else { module.exports = Promise.resolve(config['Network']['port'] || '3000');