nodebb-plugin-import
Version:
Import your forum data to nodebb
160 lines (130 loc) • 4.42 kB
JavaScript
// todo: how to warn?
(function (module) {
const nbbRequire = require('nodebb-plugin-require');
const async = require('async');
const extend = require('extend');
// nbb-core
const Messages = nbbRequire('src/messaging');
// custom
const Data = require('../helpers/data');
const User = require('../augmented/user');
const db = require('../augmented/database');
// var Room = require('../augmented/room');
const utils = require('../../public/js/utils');
Messages.import = function (data, options, callback) {
throw new Error('not implemented');
};
Messages.batchImport = function (array, options, progressCallback, batchCallback) {
let index = 0;
if (typeof batchCallback === 'undefined') {
batchCallback = progressCallback;
progressCallback = options;
options = {};
}
options = extend(true, {}, options);
async.eachSeries(
array,
(record, next) => {
Messages.import(record, options, (err, data) => {
progressCallback(err, {
original: record,
imported: data,
index: ++index,
});
// ignore errors:
// let progressCallback throw an error or log a warning if it wants to.
next();
});
},
(err) => {
batchCallback(err);
},
);
};
// [potential-nodebb-core]
Messages.newRoomWithNameAndTimestamp = function (fromUid, toUids, roomName, timestamp, callback) {
Messages.newRoom(fromUid, toUids, (err, roomId) => {
if (err) {
throw err;
return callback(err);
}
Messages.renameRoom(fromUid, roomId, roomName, () => {
const uids = [fromUid].concat(toUids).sort();
timestamp = timestamp || new Date();
async.parallel([
function (next) {
db.sortedSetAdd(`chat:room:${roomId}:uids`, timestamp, fromUid, next);
},
function (next) {
db.sortedSetAdd(`chat:room:${roomId}:uids`, uids.map(() => timestamp), uids, next);
},
function (next) {
db.sortedSetsAdd(uids.map(uid => `uid:${uid}:chat:rooms`), timestamp, roomId, next);
},
function (next) {
Messages.getRoomData(roomId, next);
},
], (err, results) => {
if (err) {
throw err;
return callback(err);
}
callback(null, results[3]);
});
});
});
};
Messages.setImported = function (_mid, uid, message, callback) {
return Data.setImported('_imported:_messages', '_imported_message:', _mid, uid, message, callback);
};
Messages.getImported = function (_mid, callback) {
return Data.getImported('_imported:_messages', '_imported_message:', _mid, callback);
};
Messages.deleteImported = function (_mid, callback) {
return Data.deleteImported('_imported:_messages', '_imported_message:', _mid, callback);
};
Messages.deleteEachImported = function (onProgress, callback) {
return Data.deleteEachImported('_imported:_messages', '_imported_message:', onProgress, callback);
};
Messages.isImported = function (_mid, callback) {
return Data.isImported('_imported:_messages', _mid, callback);
};
Messages.eachImported = function (iterator, options, callback) {
return Data.each('_imported:_messages', '_imported_message:', iterator, options, callback);
};
Messages.countImported = function (callback) {
return Data.count('_imported:_messages', callback);
};
// [potential-nodebb-core]
Messages.count = function (callback) {
db.keys('message:*', (err, keys) => {
if (err) {
callback(err);
}
callback(err, keys.length);
});
};
// [potential-nodebb-core]
Messages.each = function (iterator, options, callback) {
if (typeof callback === 'undefined') {
callback = options;
options = {};
}
options = options || {};
const prefix = 'message:';
db.keys(`${prefix}*`, (err, keys) => {
if (err) {
return callback(err);
}
async.mapLimit(keys, options.batch || 100, (key, next) => {
db.getObject(key, (err, message) => {
if (message) {
message.mid = key.replace(prefix, '');
}
iterator(message, next);
});
}, callback);
});
};
module.exports = Messages;
}(module));