UNPKG

iobroker.backitup

Version:

Backitup enables the cyclic creation of backups of an IoBroker / Homematic installation

107 lines (93 loc) 3.48 kB
const fs = require('fs'); const words = require('../admin/words'); function getDate(d) { d = d || new Date(); return d.getFullYear() + '_' + ('0' + (d.getMonth() + 1)).slice(-2) + '_' + ('0' + d.getDate()).slice(-2) + '-' + ('0' + d.getHours()).slice(-2) + '_' + ('0' + d.getMinutes()).slice(-2) + '_' + ('0' + d.getSeconds()).slice(-2); } function copyFile(source, target, cb) { const rd = fs.createReadStream(source); rd.on('error', err => { if (cb) { cb(err); cb = null; } }); const wr = fs.createWriteStream(target); wr.on('error', err => { if (cb) { cb(err); cb = null; } }); wr.on('close', ex => { if (cb) { cb(); cb = null; } }); rd.pipe(wr); } /** * looks for iobroker home folder * * @returns {string} */ function getIobDir() { const utils = require('@iobroker/adapter-core'); const tools = require(utils.controllerDir + '/lib/tools.js'); let backupDir = tools.getConfigFileName().replace(/\\/g, '/'); let parts = backupDir.split('/'); parts.pop(); // iobroker.json parts.pop(); // iobroker-data.json return parts.join('/'); } // function to create a date string # const MONTHS = { en: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], de: ['Januar', 'Februar', 'Maerz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'], ru: ['январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь'], es: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'], it: ['gennaio', 'febbraio', 'marzo', 'aprile', 'maggio', 'giugno', 'luglio', 'agosto', 'settembre', 'ottobre', 'novembre', 'dicembre'], pt: ['janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho', 'julho', 'agosto', 'setembro', 'outubro', 'novembro', 'dezembro'], pl: ['styczeń', 'luty', 'marzec', 'kwiecień', 'maj', 'czerwiec', 'lipiec', 'sierpień', 'wrzesień', 'październik', 'listopad', 'grudzień'], fr: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'], }; const timePattern = { en: '%d at %t Hours', de: '%d um %t Uhr', ru: '%d в %t' }; function padding0(number) { return (number < 10) ? '0' + number : number; } function getTimeString(systemLang, date) { date = date || new Date(); let day = date.getDate(); let monthIndex = date.getMonth(); let year = date.getFullYear(); let hours = date.getHours(); let minutes = date.getMinutes(); return (timePattern[systemLang] || timePattern.en) .replace('%d', padding0(day) + '. ' + (MONTHS[systemLang] || MONTHS.en)[monthIndex] + ' ' + year) .replace('%t', padding0(hours) + ':' + padding0(minutes)); } function _(word, systemLang) { if (words[word]) { return words[word][systemLang] || words[word].en; } else { console.warn('Please translate in words.js: ' + word); return word; } } module.exports = { getDate, copyFile, getIobDir, getTimeString, _ };