feat: #7743, meta/sounds

This commit is contained in:
Barış Soner Uşaklı
2019-07-22 12:19:29 -04:00
parent 7f72181ec8
commit a15c50bf62
2 changed files with 86 additions and 111 deletions

View File

@@ -1,132 +1,103 @@
'use strict'; 'use strict';
var path = require('path'); const path = require('path');
var fs = require('fs'); const fs = require('fs');
var rimraf = require('rimraf'); const rimraf = require('rimraf');
var mkdirp = require('mkdirp'); const mkdirp = require('mkdirp');
var async = require('async');
var file = require('../file'); const util = require('util');
var plugins = require('../plugins');
var user = require('../user');
var Meta = require('../meta');
var soundsPath = path.join(__dirname, '../../build/public/sounds'); const readdirAsync = util.promisify(fs.readdir);
var uploadsPath = path.join(__dirname, '../../public/uploads/sounds'); const rimrafAsync = util.promisify(rimraf);
const mkdirpAsync = util.promisify(mkdirp);
const writeFileAsync = util.promisify(fs.writeFile);
var Sounds = module.exports; const file = require('../file');
const plugins = require('../plugins');
const user = require('../user');
const Meta = require('../meta');
Sounds.addUploads = function addUploads(callback) { const soundsPath = path.join(__dirname, '../../build/public/sounds');
fs.readdir(uploadsPath, function (err, files) { const uploadsPath = path.join(__dirname, '../../public/uploads/sounds');
if (err) {
if (err.code !== 'ENOENT') {
return callback(err);
}
files = []; const Sounds = module.exports;
Sounds.addUploads = async function addUploads() {
let files = [];
try {
files = await readdirAsync(uploadsPath);
} catch (err) {
if (err.code !== 'ENOENT') {
throw err;
} }
files = [];
}
var uploadSounds = files.reduce(function (prev, fileName) { var uploadSounds = files.reduce(function (prev, fileName) {
var name = fileName.split('.'); var name = fileName.split('.');
if (!name.length || !name[0].length) { if (!name.length || !name[0].length) {
return prev;
}
name = name[0];
name = name[0].toUpperCase() + name.slice(1);
prev[name] = fileName;
return prev; return prev;
}, {});
plugins.soundpacks = plugins.soundpacks.filter(function (pack) {
return pack.name !== 'Uploads';
});
if (Object.keys(uploadSounds).length) {
plugins.soundpacks.push({
name: 'Uploads',
id: 'uploads',
dir: uploadsPath,
sounds: uploadSounds,
});
} }
name = name[0];
name = name[0].toUpperCase() + name.slice(1);
callback(); prev[name] = fileName;
}); return prev;
}, {});
plugins.soundpacks = plugins.soundpacks.filter(pack => pack.name !== 'Uploads');
if (Object.keys(uploadSounds).length) {
plugins.soundpacks.push({
name: 'Uploads',
id: 'uploads',
dir: uploadsPath,
sounds: uploadSounds,
});
}
}; };
Sounds.build = function build(callback) { Sounds.build = async function build() {
Sounds.addUploads(function (err) { await Sounds.addUploads();
if (err) {
return callback(err);
}
var map = plugins.soundpacks.map(function (pack) { var map = plugins.soundpacks.map(function (pack) {
return Object.keys(pack.sounds).reduce(function (prev, soundName) { return Object.keys(pack.sounds).reduce(function (prev, soundName) {
var soundPath = pack.sounds[soundName]; var soundPath = pack.sounds[soundName];
prev[pack.name + ' | ' + soundName] = pack.id + '/' + soundPath; prev[pack.name + ' | ' + soundName] = pack.id + '/' + soundPath;
return prev; return prev;
}, {}); }, {});
});
map.unshift({});
map = Object.assign.apply(null, map);
async.series([
function (next) {
rimraf(soundsPath, next);
},
function (next) {
mkdirp(soundsPath, next);
},
function (cb) {
async.parallel([
function (next) {
fs.writeFile(path.join(soundsPath, 'fileMap.json'), JSON.stringify(map), next);
},
function (next) {
async.each(plugins.soundpacks, function (pack, next) {
file.linkDirs(pack.dir, path.join(soundsPath, pack.id), next);
}, next);
},
], cb);
},
], function (err) {
callback(err);
});
}); });
map.unshift({});
map = Object.assign.apply(null, map);
await rimrafAsync(soundsPath);
await mkdirpAsync(soundsPath);
await writeFileAsync(path.join(soundsPath, 'fileMap.json'), JSON.stringify(map));
await Promise.all(plugins.soundpacks.map(pack => file.linkDirs(pack.dir, path.join(soundsPath, pack.id), false)));
}; };
var keys = ['chat-incoming', 'chat-outgoing', 'notification']; var keys = ['chat-incoming', 'chat-outgoing', 'notification'];
Sounds.getUserSoundMap = function getUserSoundMap(uid, callback) { Sounds.getUserSoundMap = async function getUserSoundMap(uid) {
async.parallel({ const [defaultMapping, userSettings] = await Promise.all([
defaultMapping: function (next) { Meta.configs.getFields(keys),
Meta.configs.getFields(keys, next); user.getSettings(uid),
}, ]);
userSettings: function (next) {
user.getSettings(uid, next); userSettings.notification = userSettings.notificationSound;
}, userSettings['chat-incoming'] = userSettings.incomingChatSound;
}, function (err, results) { userSettings['chat-outgoing'] = userSettings.outgoingChatSound;
if (err) {
return callback(err); const soundMapping = {};
keys.forEach(function (key) {
if (userSettings[key] || userSettings[key] === '') {
soundMapping[key] = userSettings[key] || '';
} else {
soundMapping[key] = defaultMapping[key] || '';
} }
var userSettings = results.userSettings;
userSettings = {
notification: userSettings.notificationSound,
'chat-incoming': userSettings.incomingChatSound,
'chat-outgoing': userSettings.outgoingChatSound,
};
var defaultMapping = results.defaultMapping || {};
var soundMapping = {};
keys.forEach(function (key) {
if (userSettings[key] || userSettings[key] === '') {
soundMapping[key] = userSettings[key] || '';
} else {
soundMapping[key] = defaultMapping[key] || '';
}
});
callback(null, soundMapping);
}); });
return soundMapping;
}; };

View File

@@ -108,7 +108,9 @@ function initializeNodeBB(callback) {
var middleware = require('./middleware'); var middleware = require('./middleware');
async.waterfall([ async.waterfall([
meta.themes.setupPaths, function (next) {
meta.themes.setupPaths(next);
},
function (next) { function (next) {
plugins.init(app, middleware, next); plugins.init(app, middleware, next);
}, },
@@ -122,7 +124,9 @@ function initializeNodeBB(callback) {
function (next) { function (next) {
routes(app, middleware, next); routes(app, middleware, next);
}, },
meta.sounds.addUploads, function (next) {
meta.sounds.addUploads(next);
},
function (next) { function (next) {
meta.blacklist.load(next); meta.blacklist.load(next);
}, },