From 94312cfda8712392cfb8276c3412ec26b6d46548 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Mon, 2 Jun 2014 17:42:29 -0400 Subject: [PATCH] closes #1595 --- public/language/en_GB/global.json | 5 ++++- public/src/app.js | 21 +++++++++++++++++++-- src/meta.js | 6 +++++- src/socket.io/meta.js | 9 ++++++++- 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/public/language/en_GB/global.json b/public/language/en_GB/global.json index 0dbacf8ec2..80f9435c82 100644 --- a/public/language/en_GB/global.json +++ b/public/language/en_GB/global.json @@ -90,5 +90,8 @@ "language": "Language", "guest": "Guest", - "guests": "Guests" + "guests": "Guests", + + "updated:title": "Forum Updated", + "updated:message": "This forum has just been updated to the latest version. Click here to refresh the page." } diff --git a/public/src/app.js b/public/src/app.js index d555c29f7d..f1e524550c 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -8,7 +8,8 @@ var socket, 'uid': null, 'isFocused': true, 'currentRoom': null, - 'widgets': {} + 'widgets': {}, + 'cacheBuster': null }; (function () { @@ -51,7 +52,21 @@ var socket, app.enterRoom(room, true); - socket.emit('meta.reconnected'); + socket.emit('meta.reconnected', {}, function(err, cacheBuster) { + if (app.cacheBuster !== cacheBuster) { + app.cacheBuster = cacheBuster; + + app.alert({ + title: '[[global.updated:title]]', + message: '[[global.updated:message]]', + clickfn: function() { + window.location.reload(); + }, + type: 'warning' + }); + } + }); + $(window).trigger('action:reconnected'); setTimeout(function() { @@ -147,6 +162,8 @@ var socket, socket.emit('tools.log', arguments); }; } + + app.cacheBuster = config['cache-buster']; } } diff --git a/src/meta.js b/src/meta.js index 9a94046da8..1469d45891 100644 --- a/src/meta.js +++ b/src/meta.js @@ -16,7 +16,8 @@ var fs = require('fs'), db = require('./database'), plugins = require('./plugins'), user = require('./user'), - groups = require('./groups'); + groups = require('./groups'), + emitter = require('./emitter'); (function (Meta) { Meta.restartRequired = false; @@ -326,6 +327,8 @@ var fs = require('fs'), Meta.js.cache = payload.data.js; Meta.js.map = payload.data.map; minifier.kill(); + + emitter.emit('meta:js.compiled'); } else { winston.error('[meta/js] Could not compile client-side scripts!'); winston.error('[meta/js] ' + payload.error.message); @@ -410,6 +413,7 @@ var fs = require('fs'), Meta.css.updateBranding(); winston.info('[meta/css] Done.'); + emitter.emit('meta:css.compiled'); }); }); }; diff --git a/src/socket.io/meta.js b/src/socket.io/meta.js index 5ce1004971..e157a3876e 100644 --- a/src/socket.io/meta.js +++ b/src/socket.io/meta.js @@ -3,6 +3,7 @@ var meta = require('../meta'), topics = require('../topics'), logger = require('../logger'), plugins = require('../plugins'), + emitter = require('../emitter'), nconf = require('nconf'), gravatar = require('gravatar'), @@ -13,7 +14,7 @@ var meta = require('../meta'), rooms: {} }; -SocketMeta.reconnected = function(socket) { +SocketMeta.reconnected = function(socket, data, callback) { var uid = socket.uid, sessionID = socket.id; @@ -22,6 +23,12 @@ SocketMeta.reconnected = function(socket) { user.notifications.pushCount(uid); } + if (typeof callback === 'function') { + emitter.on('nodebb:ready', function() { + callback(null, meta.config['cache-buster']); + }); + } + if (process.env.NODE_ENV === 'development') { if (uid) { winston.info('[socket] uid ' + uid + ' (' + sessionID + ') has successfully reconnected.');