Use juice to prepare html messages

This commit is contained in:
Andris Reinman 2016-05-03 19:21:01 +03:00
parent c031ea7747
commit 4f2d66c30c
8 changed files with 251 additions and 67 deletions

View file

@ -275,31 +275,43 @@ module.exports.create = (campaign, opts, callback) => {
keys.push('cid');
values.push(cid);
db.getConnection((err, connection) => {
tools.prepareHtml(campaign.html, (err, preparedHtml) => {
if (err) {
return next(err);
log.error('jsdom', err);
preparedHtml = campaign.html;
}
let query = 'INSERT INTO campaigns (`' + keys.join('`, `') + '`) VALUES (' + values.map(() => '?').join(',') + ')';
connection.query(query, values, (err, result) => {
connection.release();
if (preparedHtml) {
keys.push('html_prepared');
values.push(preparedHtml);
}
db.getConnection((err, connection) => {
if (err) {
return next(err);
}
let campaignId = result && result.insertId || false;
if (!campaignId) {
return next(null, false);
}
// we are going to aqcuire a lot of log info, so we are putting
// sending logs into separate tables
createCampaignTables(campaignId, err => {
let query = 'INSERT INTO campaigns (`' + keys.join('`, `') + '`) VALUES (' + values.map(() => '?').join(',') + ')';
connection.query(query, values, (err, result) => {
connection.release();
if (err) {
// FIXME: rollback
return next(err);
}
return next(null, campaignId);
let campaignId = result && result.insertId || false;
if (!campaignId) {
return next(null, false);
}
// we are going to aqcuire a lot of log info, so we are putting
// sending logs into separate tables
createCampaignTables(campaignId, err => {
if (err) {
// FIXME: rollback
return next(err);
}
return next(null, campaignId);
});
});
});
});
@ -355,8 +367,8 @@ module.exports.create = (campaign, opts, callback) => {
return callback(new Error('Selected template not found'));
}
keys = keys.concat(['html', 'text']);
values = values.concat([template.html, template.text]);
campaign.html = template.html;
campaign.text = template.text;
create(callback);
});
@ -410,58 +422,70 @@ module.exports.update = (id, updates, callback) => {
}
});
db.getConnection((err, connection) => {
tools.prepareHtml(campaign.html, (err, preparedHtml) => {
if (err) {
return callback(err);
log.error('jsdom', err);
preparedHtml = campaign.html;
}
values.push(id);
if (preparedHtml) {
keys.push('html_prepared');
values.push(preparedHtml);
}
connection.query('UPDATE campaigns SET ' + keys.map(key => '`' + key + '`=?').join(', ') + ' WHERE id=? LIMIT 1', values, (err, result) => {
db.getConnection((err, connection) => {
if (err) {
connection.release();
return callback(err);
}
let affected = result && result.affectedRows || false;
if (!affected) {
connection.release();
return callback(null, affected);
}
values.push(id);
connection.query('SELECT `type`, `source_url` FROM campaigns WHERE id=? LIMIT 1', [id], (err, rows) => {
connection.query('UPDATE campaigns SET ' + keys.map(key => '`' + key + '`=?').join(', ') + ' WHERE id=? LIMIT 1', values, (err, result) => {
if (err) {
connection.release();
return callback(err);
}
let affected = result && result.affectedRows || false;
if (!rows || !rows[0] || rows[0].type !== 2) {
// if not RSS, then nothing to do here
if (!affected) {
connection.release();
return callback(null, affected);
}
// update seen rss entries to avoid sending old entries to subscribers
feed.fetch(rows[0].source_url, (err, entries) => {
connection.query('SELECT `type`, `source_url` FROM campaigns WHERE id=? LIMIT 1', [id], (err, rows) => {
if (err) {
connection.release();
return callback(err);
}
let query = 'INSERT IGNORE INTO `rss` (`parent`,`guid`,`pubdate`) VALUES ' + entries.map(() => '(?,?,?)').join(',');
values = [];
entries.forEach(entry => {
values.push(id, entry.guid, entry.date);
});
connection.query(query, values, err => {
if (!rows || !rows[0] || rows[0].type !== 2) {
// if not RSS, then nothing to do here
connection.release();
if (err) {
// too late to report as failed
log.error('RSS', err);
}
return callback(null, affected);
}
// update seen rss entries to avoid sending old entries to subscribers
feed.fetch(rows[0].source_url, (err, entries) => {
if (err) {
connection.release();
return callback(err);
}
let query = 'INSERT IGNORE INTO `rss` (`parent`,`guid`,`pubdate`) VALUES ' + entries.map(() => '(?,?,?)').join(',');
values = [];
entries.forEach(entry => {
values.push(id, entry.guid, entry.date);
});
connection.query(query, values, err => {
connection.release();
if (err) {
// too late to report as failed
log.error('RSS', err);
}
return callback(null, affected);
});
});
});
});