var htmlParser = Npm.require('htmlparser2');
var htmlToText = Npm.require('html-to-text');
var getFirstAdminUser = function() {
return Meteor.users.findOne({isAdmin: true}, {sort: {createdAt: 1}});
}
var insertPost = function(feedItem) {
var post = {
title: feedItem.title,
body: htmlToText.fromString(feedItem.description),
url: feedItem.link
};
// check that there are no posts with the same URL
if (!!post.url) {
var sixMonthsAgo = moment().subtract(6, 'months').toDate();
var postWithSameLink = Posts.findOne({url: post.url, postedAt: {$gte: sixMonthsAgo}});
if (typeof postWithSameLink !== 'undefined') {
return;
}
}
var title = cleanUp(post.title),
body = post.body,
user = getFirstAdminUser(),
postId = '';
// ------------------------------ Checks ------------------------------ //
// check that user provided a title
if(!post.title)
post.title = 'Untitled';
// ------------------------------ Properties ------------------------------ //
// Basic Properties
properties = {
title: title,
body: body,
userId: user._id,
author: getDisplayNameById(user._id),
upvotes: 0,
downvotes: 0,
commentCount: 0,
clickCount: 0,
viewCount: 0,
baseScore: 0,
score: 0,
status: 2,
inactive: false,
createdAt: new Date(),
postedAt: new Date()
};
post = _.extend(post, properties);
// ------------------------------ Insert ------------------------------ //
post._id = Posts.insert(post);
// ------------------------------ After Insert ------------------------------ //
// increment posts count
Meteor.users.update({_id: user._id}, {$inc: {postCount: 1}});
Meteor.call('upvotePost', post, user);
return post;
};
var handleFeed = function(error, feed) {
if (error) return;
feed.items.forEach(function(item, index, array) {
insertPost(item);
});
};
fetchFeeds = function() {
var content;
Feeds.find().forEach(function(rssUrl) {
try {
content = HTTP.get(rssUrl.url).content;
} catch (e) {
// just go to next url
return true;
}
var feedHandler = new htmlParser.FeedHandler(handleFeed);
var parser = new htmlParser.Parser(feedHandler, {xmlMode: true});
parser.write(content);
parser.end()
});
}