|
|
|
var meta = require('../meta'),
|
|
|
|
user = require('../user'),
|
|
|
|
logger = require('../logger'),
|
|
|
|
plugins = require('../plugins'),
|
|
|
|
|
|
|
|
nconf = require('nconf'),
|
|
|
|
gravatar = require('gravatar'),
|
|
|
|
|
|
|
|
SocketMeta = {};
|
|
|
|
|
|
|
|
SocketMeta.buildTitle = function(text, callback) {
|
|
|
|
meta.title.build(text, function(err, title) {
|
|
|
|
callback(title);
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
SocketMeta.updateHeader = function(data, callback, sessionData) {
|
|
|
|
if (sessionData.uid) {
|
|
|
|
user.getUserFields(sessionData.uid, data.fields, function(err, fields) {
|
|
|
|
if (!err && fields) {
|
|
|
|
fields.uid = sessionData.uid;
|
|
|
|
callback(fields);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
callback({
|
|
|
|
uid: 0,
|
|
|
|
username: "Anonymous User",
|
|
|
|
email: '',
|
|
|
|
picture: gravatar.url('', {
|
|
|
|
s: '24'
|
|
|
|
}, nconf.get('https')),
|
|
|
|
config: {
|
|
|
|
allowGuestSearching: meta.config.allowGuestSearching
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
SocketMeta.getUsageStats = function(callback) {
|
|
|
|
module.parent.exports.emitTopicPostStats(callback);
|
|
|
|
};
|
|
|
|
|
|
|
|
/* Rooms */
|
|
|
|
|
|
|
|
SocketMeta.rooms = {};
|
|
|
|
|
|
|
|
SocketMeta.rooms.enter = function(data, sessionData) {
|
|
|
|
if (data.leave !== null) {
|
|
|
|
sessionData.socket.leave(data.leave);
|
|
|
|
}
|
|
|
|
|
|
|
|
sessionData.socket.join(data.enter);
|
|
|
|
sessionData.rooms[data.enter] = sessionData.rooms[data.enter] || {};
|
|
|
|
|
|
|
|
if (sessionData.uid) {
|
|
|
|
sessionData.rooms[data.enter][sessionData.socket.id] = sessionData.uid;
|
|
|
|
|
|
|
|
if (data.leave && sessionData.rooms[data.leave] && sessionData.rooms[data.leave][sessionData.socket.id] && data.enter !== data.leave) {
|
|
|
|
delete sessionData.rooms[data.leave][sessionData.socket.id];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (data.leave) {
|
|
|
|
module.parent.exports.updateRoomBrowsingText(data.leave);
|
|
|
|
}
|
|
|
|
|
|
|
|
module.parent.exports.updateRoomBrowsingText(data.enter);
|
|
|
|
|
|
|
|
if (data.enter != 'admin') {
|
|
|
|
sessionData.server.sockets.in('admin').emit('api:get_all_rooms', sessionData.server.sockets.manager.rooms);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
SocketMeta.rooms.getAll = function(callback, sessionData) {
|
|
|
|
callback(sessionData.server.sockets.manager.rooms);
|
|
|
|
};
|
|
|
|
|
|
|
|
/* Config */
|
|
|
|
|
|
|
|
SocketMeta.config = {};
|
|
|
|
|
|
|
|
SocketMeta.config.get = function(callback, sessionData) {
|
|
|
|
meta.configs.list(function(err, config) {
|
|
|
|
if (!err) {
|
|
|
|
callback(config);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
SocketMeta.config.set = function(data, callback, sessionData) {
|
|
|
|
meta.configs.set(data.key, data.value, function(err) {
|
|
|
|
if (!err) {
|
|
|
|
callback({
|
|
|
|
status: 'ok'
|
|
|
|
});
|
|
|
|
|
|
|
|
plugins.fireHook('action:config.set', {
|
|
|
|
key: data.key,
|
|
|
|
value: data.value
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
logger.monitorConfig({io: sessionData.server}, data);
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
SocketMeta.config.remove = function(key) {
|
|
|
|
meta.configs.remove(key);
|
|
|
|
};
|
|
|
|
|
|
|
|
/* Exports */
|
|
|
|
|
|
|
|
module.exports = SocketMeta;
|