'use strict';
var fs = require('fs');
var gulp = require('gulp');
var env = require('../utils/env');
var watch = require('gulp-watch');
var runSequence = require('run-sequence');
var log = require('../utils/log');

gulp.task('watch', ['compile'], function () {
  // bower.json文件变化时重新安装并加载
  watch(env.folders.project + "/bower.json", function (file) {
    runSequence('wireBower');
  });
  // 监控配置文件，修改时自动重新加载
  watch(env.folders.project + '/fj.conf.js', function (file) {
    runSequence('config');
  });
  watch([env.folders.app + "/**/*.scss"], function (file) {
    // 如果是删除文件则删除对应的css文件
    if (file.event === 'unlink') {
      var fileName = env.folders.temp + '/app/' + file.relative.replace(/\.scss$/, '.css');
      if (fs.existsSync(fileName)) {
        fs.unlinkSync(fileName);
      }
    }
    // 添加删除文件时需要重新wireAppScss
    if (file.event === 'add' || file.event === 'unlink') {
      runSequence('wireAppScss', 'sass');
    } else {
      runSequence('sass');
    }
  });
  watch(env.folders.app + "/**/*.ts", function (file) {
    // 如果是删除文件则删除对应的js文件
    if (file.event === 'unlink') {
      var fileName = env.folders.temp + '/app/' + file.relative.replace(/\.ts$/, '.js');
      if (fs.existsSync(fileName)) {
        fs.unlinkSync(fileName);
      }
    }
    runSequence('typescript');
  });
  watch(env.folders.test + "/**/*.ts", function (file) {
    // 如果是删除文件则删除对应的js文件
    if (file.event === 'unlink') {
      var fileName = env.folders.temp + '/test/' + file.relative.replace(/\.ts$/, '.js');
      if (fs.existsSync(fileName)) {
        fs.unlinkSync(fileName);
      }
    }
    runSequence('typescript');
  });
  watch(env.folders.app + "/**/*.es6", function (file) {
    // 如果是删除文件则删除对应的js文件
    if (file.event === 'unlink') {
      var fileName = env.folders.temp + '/app/' + file.relative.replace(/\.es6$/, '.js');
      if (fs.existsSync(fileName)) {
        fs.unlinkSync(fileName);
      }
    }
    runSequence('es6');
  });
  watch(env.folders.test + "/**/*.es6", function (file) {
    // 如果是删除文件则删除对应的js文件
    if (file.event === 'unlink') {
      var fileName = env.folders.temp + '/test/' + file.relative.replace(/\.es6$/, '.js');
      if (fs.existsSync(fileName)) {
        fs.unlinkSync(fileName);
      }
    }
    runSequence('es6');
  });
  watch(env.folders.app + "/**/*.coffee", function (file) {
    // 如果是删除文件则删除对应的js文件
    if (file.event === 'unlink') {
      var fileName = env.folders.temp + '/app/' + file.relative.replace(/\.coffee$/, '.js');
      if (fs.existsSync(fileName)) {
        fs.unlinkSync(fileName);
      }
    }
    runSequence('coffee');
  });
  watch(env.folders.test + "/**/*.coffee", function (file) {
    // 如果是删除文件则删除对应的js文件
    if (file.event === 'unlink') {
      var fileName = env.folders.temp + '/test/' + file.relative.replace(/\.coffee$/, '.js');
      if (fs.existsSync(fileName)) {
        fs.unlinkSync(fileName);
      }
    }
    runSequence('coffee');
  });
  watch([env.folders.app + "/**/*.svg"], function (file) {
    runSequence('webFont');
  });
  watch([env.folders.app + "/**/*.js", env.folders.temp + '/app/**/*.js'], function (file) {
    if (file.event === 'add' || file.event === 'unlink') {
      // 添加删除文件时自动重新启动
      runSequence('wireAppJs', 'tddRestart');
    }
  });
  watch([env.folders.test + "/**/*.js", env.folders.temp + '/test/**/*.js'], function (file) {
    if (file.event === 'add' || file.event === 'unlink') {
      // 添加删除文件时自动重新启动
      runSequence('tddRestart');
    }
  });
});

@@ -254,16 +254,60 @@
 on () %7B%0A
+  var options = %7B%0A    usePolling: true%0A  %7D;%0A
   // bow
@@ -370,16 +370,25 @@
 r.json%22,
+ options,
  functio
@@ -500,16 +500,25 @@
 onf.js',
+ options,
  functio
@@ -602,16 +602,25 @@
 .scss%22%5D,
+ options,
  functio
@@ -1079,32 +1079,41 @@
 pp + %22/**/*.ts%22,
+ options,
  function (file)
@@ -1423,16 +1423,25 @@
 */*.ts%22,
+ options,
  functio
@@ -1752,32 +1752,41 @@
 p + %22/**/*.es6%22,
+ options,
  function (file)
@@ -2091,16 +2091,25 @@
 /*.es6%22,
+ options,
  functio
@@ -2417,32 +2417,41 @@
  %22/**/*.coffee%22,
+ options,
  function (file)
@@ -2765,16 +2765,25 @@
 coffee%22,
+ options,
  functio
@@ -3104,16 +3104,25 @@
 *.svg%22%5D,
+ options,
  functio
@@ -3232,32 +3232,41 @@
 '/app/**/*.js'%5D,
+ options,
  function (file)
@@ -3484,16 +3484,25 @@
 /*.js'%5D,
+ options,
  functio

修改watch模式，以便支持虚拟机