/* eslint-disable no-undef */ /* eslint-disable no-console */ /* eslint-disable no-unused-vars */ let ipc = null let logMessages = new Set() let logHandlers = { log: console.log, warn: console.warn, error: console.error } try { ipc = window.ipcRenderer || require('electron').ipcRenderer logHandlers.log = message => ipc.send('log', message) logHandlers.warn = message => ipc.send('warn', message) logHandlers.error = message => ipc.send('error', message) } catch (e) { console.log('Cannot use electron logging.') } /** Basic class for app specific logging requirements. * Can be used to implement persistent logging in electron apps. * Uses a logMessage cache to prevent error overflows. This is * needed since errors may occur very frequently * (e.g. display update loops at 60fps, programmatic loops, ...). * * The logging handlers can be overwritten by calling the static * setup method. */ export default class Logging { /** Static log function. * @param {*} message */ static log(message) { logHandlers.log(message) } /** * Static warn function. * Emits each warning only once per session. * @param {*} message */ static warn(message) { if (!logMessages.has(message)) { logMessages.add(message) logHandlers.warn(message) } } /** * Static error function. * Emits each error message only once per session. * @param {*} message */ static error(message) { if (!logMessages.has(message)) { logMessages.add(message) logHandlers.error(message) } } static setup({ log = console.log, warn = console.warn, error = console.error } = {}) { logHandlers.log = log logHandlers.warn = warn logHandlers.error = error } }