<commit_before>var mongoose = require('mongoose');
var async = require('async');
var ipc = require('electron').ipcMain;

// TODO : ツイートとタグの参照関係が保たれない可能性があるのでどうにかする
// TODO : データモデルの定義は別ファイルに切り出す
var tweetSchema = new mongoose.Schema({
  tags: { name: [String] },
  body:  {
    text: String,
    tweeted_at: String
  },
  user: {
    name: String,
    screen_name: String
  },
  create_at: { type: Date, default: Date.now }
});
mongoose.model('Tweet', tweetSchema);
var Tweet = mongoose.model('Tweet');
exports.Tweet = Tweet;

var tagSchema = new mongoose.Schema({
  name: String
});
mongoose.model('Tag', tagSchema);
var Tag = mongoose.model('Tag');
exports.Tag = Tag;

exports.streaming = function(
  TWITTER_CONSUMER_KEY,
  TWITTER_CONSUMER_SECRET,
  ACCESS_TOKEN_KEY,
  ACCESS_TOKEN_SECRET,
  mainWindow
) {
  var Stream = require('user-stream');
  var user_stream;
  try {
    user_stream = new Stream({
    consumer_key: TWITTER_CONSUMER_KEY,
    consumer_secret: TWITTER_CONSUMER_SECRET,
    access_token_key: ACCESS_TOKEN_KEY,
    access_token_secret: ACCESS_TOKEN_SECRET
  });
  } catch (e) {
    console.log(e);
    return;
  }
  user_stream.stream();
  user_stream.on('data', function(json) {
    if (json['text'] != undefined) {
      var tags = HashTagParser(json['text']);
      if (tags.indexOf('kirokutron') >= 0) {
        // TODO : タグとツイートの保存を同期し，終了してから renderer に通知する

        // タグを見て，存在すれば何もしない．存在しなければ登録する
        var calls = [];
        tags.forEach(function(tag_name) {
          calls.push(function(callback) {
            Tag.find({ name: tag_name }, function(err, docs) {
              if (docs.length == 0) {
                var tag = new Tag();
                tag.name = tag_name;
                console.log("saved tag : " + tag_name);
                tag.save(function(err, data){<commit_msg>Modify error handling<commit_after>var mongoose = require('mongoose');
var async = require('async');
var ipc = require('electron').ipcMain;

// TODO : ツイートとタグの参照関係が保たれない可能性があるのでどうにかする
// TODO : データモデルの定義は別ファイルに切り出す
var tweetSchema = new mongoose.Schema({
  tags: { name: [String] },
  body:  {
    text: String,
    tweeted_at: String
  },
  user: {
    name: String,
    screen_name: String
  },
  create_at: { type: Date, default: Date.now }
});
mongoose.model('Tweet', tweetSchema);
var Tweet = mongoose.model('Tweet');
exports.Tweet = Tweet;

var tagSchema = new mongoose.Schema({
  name: String
});
mongoose.model('Tag', tagSchema);
var Tag = mongoose.model('Tag');
exports.Tag = Tag;

exports.streaming = function(
  TWITTER_CONSUMER_KEY,
  TWITTER_CONSUMER_SECRET,
  ACCESS_TOKEN_KEY,
  ACCESS_TOKEN_SECRET,
  mainWindow
) {
  var Stream = require('user-stream');
  var user_stream = new Stream({
    consumer_key: TWITTER_CONSUMER_KEY,
    consumer_secret: TWITTER_CONSUMER_SECRET,
    access_token_key: ACCESS_TOKEN_KEY,
    access_token_secret: ACCESS_TOKEN_SECRET
  });
  user_stream.stream();
  user_stream.on('error', function(err) {
    console.log(err);
  });
  user_stream.on('data', function(json) {
    if (json['text'] != undefined) {
      var tags = HashTagParser(json['text']);
      if (tags.indexOf('kirokutron') >= 0) {
        // TODO : タグとツイートの保存を同期し，終了してから renderer に通知する

        // タグを見て，存在すれば何もしない．存在しなければ登録する
        var calls = [];
        tags.forEach(function(tag_name) {
          calls.push(function(callback) {
            Tag.find({ name: tag_name }, function(err, docs) {
              if (docs.length == 0) {
                var tag = new Tag();
                tag.name = tag_name;
                console.log("saved tag : " + tag_name);
                tag.save(function(err, data){
{'fraction_non_alphanumeric': 0.13455741298986024, 'fraction_numerical': 0.0010961907371882709, 'mean_word_length': 3.1524459613196814, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4802989', 'n_tokens_mistral': 1417, 'n_tokens_neox': 1402, 'n_words': 244}