diff --git a/src/cron.js b/src/cron.js index ad3c8252a..a76fda786 100644 --- a/src/cron.js +++ b/src/cron.js @@ -4,7 +4,9 @@ exports = module.exports = { startPostActivationJobs: startPostActivationJobs, startPreActivationJobs: startPreActivationJobs, - stopJobs: stopJobs + stopJobs: stopJobs, + + handleSettingsChanged: handleSettingsChanged }; var appHealthMonitor = require('./apphealthmonitor.js'), @@ -85,11 +87,6 @@ function startPostActivationJobs(callback) { start: true }); - settings.on(settings.TIME_ZONE_KEY, recreateJobs); - settings.on(settings.APP_AUTOUPDATE_PATTERN_KEY, appAutoupdatePatternChanged); - settings.on(settings.BOX_AUTOUPDATE_PATTERN_KEY, boxAutoupdatePatternChanged); - settings.on(settings.DYNAMIC_DNS_KEY, dynamicDnsChanged); - settings.getAll(function (error, allSettings) { if (error) return callback(error); @@ -102,6 +99,19 @@ function startPostActivationJobs(callback) { }); } +function handleSettingsChanged(key, value) { + assert.strictEqual(typeof key, 'string'); + assert.strictEqual(typeof value, 'string'); + + switch (key) { + case settings.TIME_ZONE_KEY: recreateJobs(value); break; + case settings.APP_AUTOUPDATE_PATTERN_KEY: appAutoupdatePatternChanged(value); break; + case settings.BOX_AUTOUPDATE_PATTERN_KEY: boxAutoupdatePatternChanged(value); break; + case settings.DYNAMIC_DNS_KEY: dynamicDnsChanged(value); break; + default: break; + } +} + function recreateJobs(tz) { assert.strictEqual(typeof tz, 'string'); @@ -282,11 +292,6 @@ function dynamicDnsChanged(enabled) { function stopJobs(callback) { assert.strictEqual(typeof callback, 'function'); - settings.removeListener(settings.TIME_ZONE_KEY, recreateJobs); - settings.removeListener(settings.APP_AUTOUPDATE_PATTERN_KEY, appAutoupdatePatternChanged); - settings.removeListener(settings.BOX_AUTOUPDATE_PATTERN_KEY, boxAutoupdatePatternChanged); - settings.removeListener(settings.DYNAMIC_DNS_KEY, dynamicDnsChanged); - for (var job in gJobs) { if (!gJobs[job]) continue; gJobs[job].stop(); diff --git a/src/settings.js b/src/settings.js index 66feca961..ce7dfc6a5 100644 --- a/src/settings.js +++ b/src/settings.js @@ -56,9 +56,6 @@ exports = module.exports = { // blobs CLOUDRON_AVATAR_KEY: 'cloudron_avatar', // not stored in db but can be used for locked flag - - on: on, - removeListener: removeListener }; var addons = require('./addons.js'), @@ -69,6 +66,7 @@ var addons = require('./addons.js'), BackupsError = backups.BackupsError, config = require('./config.js'), constants = require('./constants.js'), + cron = require('./cron.js'), CronJob = require('cron').CronJob, DatabaseError = require('./databaseerror.js'), moment = require('moment-timezone'), @@ -101,8 +99,6 @@ var gDefaults = (function () { return result; })(); -let gEvents = new (require('events').EventEmitter)(); - function SettingsError(reason, errorOrMessage) { assert.strictEqual(typeof reason, 'string'); assert(errorOrMessage instanceof Error || typeof errorOrMessage === 'string' || typeof errorOrMessage === 'undefined'); @@ -127,12 +123,9 @@ SettingsError.EXTERNAL_ERROR = 'External Error'; SettingsError.NOT_FOUND = 'Not Found'; SettingsError.BAD_FIELD = 'Bad Field'; -function on(key, handler) { - gEvents.on(key, handler); -} -function removeListener(key, handler) { - gEvents.removeListener(key, handler); +function notifyChange(key, value) { + cron.handleSettingsChanged(key, value); } function setAppAutoupdatePattern(pattern, callback) { @@ -147,7 +140,7 @@ function setAppAutoupdatePattern(pattern, callback) { settingsdb.set(exports.APP_AUTOUPDATE_PATTERN_KEY, pattern, function (error) { if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); - gEvents.emit(exports.APP_AUTOUPDATE_PATTERN_KEY, pattern); + notifyChange(exports.APP_AUTOUPDATE_PATTERN_KEY, pattern); return callback(null); }); @@ -176,7 +169,7 @@ function setBoxAutoupdatePattern(pattern, callback) { settingsdb.set(exports.BOX_AUTOUPDATE_PATTERN_KEY, pattern, function (error) { if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); - gEvents.emit(exports.BOX_AUTOUPDATE_PATTERN_KEY, pattern); + notifyChange(exports.BOX_AUTOUPDATE_PATTERN_KEY, pattern); return callback(null); }); @@ -202,7 +195,7 @@ function setTimeZone(tz, callback) { settingsdb.set(exports.TIME_ZONE_KEY, tz, function (error) { if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); - gEvents.emit(exports.TIME_ZONE_KEY, tz); + notifyChange(exports.TIME_ZONE_KEY, tz); return callback(null); }); @@ -241,7 +234,7 @@ function setCloudronName(name, callback) { settingsdb.set(exports.CLOUDRON_NAME_KEY, name, function (error) { if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); - gEvents.emit(exports.CLOUDRON_NAME_KEY, name); + notifyChange(exports.CLOUDRON_NAME_KEY, name); return callback(null); }); @@ -290,7 +283,7 @@ function setDynamicDnsConfig(enabled, callback) { settingsdb.set(exports.DYNAMIC_DNS_KEY, enabled ? 'enabled' : '', function (error) { if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); - gEvents.emit(exports.DYNAMIC_DNS_KEY, enabled); + notifyChange(exports.DYNAMIC_DNS_KEY, enabled); return callback(null); }); @@ -328,7 +321,7 @@ function setBackupConfig(backupConfig, callback) { settingsdb.set(exports.BACKUP_CONFIG_KEY, JSON.stringify(backupConfig), function (error) { if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); - gEvents.emit(exports.BACKUP_CONFIG_KEY, backupConfig); + notifyChange(exports.BACKUP_CONFIG_KEY, backupConfig); callback(null); }); @@ -354,7 +347,7 @@ function setEmailDigest(enabled, callback) { settingsdb.set(exports.EMAIL_DIGEST, enabled ? 'enabled' : '', function (error) { if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); - gEvents.emit(exports.EMAIL_DIGEST, enabled); + notifyChange(exports.EMAIL_DIGEST, enabled); callback(null); }); @@ -429,7 +422,7 @@ function setAppstoreConfig(appstoreConfig, callback) { settingsdb.set(exports.APPSTORE_CONFIG_KEY, JSON.stringify(data), function (error) { if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error)); - gEvents.emit(exports.APPSTORE_CONFIG_KEY, appstoreConfig); + notifyChange(exports.APPSTORE_CONFIG_KEY, appstoreConfig); callback(null); });