Browse Source

自动检查更新。

oldj 8 years ago
parent
commit
b5734b622f

+ 47 - 44
app/bundle.js

@@ -3449,13 +3449,12 @@ exports.reg = function (app) {
 
 
 
-var _Agent = __webpack_require__(5);
-
-var _Agent2 = _interopRequireDefault(_Agent);
+//import Agent from '../Agent'
+//import cleanData from '../../app/server/cleanData'
 
-var _cleanData = __webpack_require__(235);
+var _save = __webpack_require__(38);
 
-var _cleanData2 = _interopRequireDefault(_cleanData);
+var _save2 = _interopRequireDefault(_save);
 
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
@@ -3472,23 +3471,7 @@ module.exports = function (app, hosts) {
   }
 
   //list = cleanData(list)
-
-  _Agent2.default.pact('saveHosts', list).then(function (new_list) {
-    var state = { list: new_list };
-    var current = app.state.current;
-    var item = new_list.find(function (i) {
-      return i.id === current.id;
-    });
-    if (item) {
-      state.current = item;
-    }
-
-    app.setState(state, function () {
-      _Agent2.default.emit('select', hosts.id);
-    });
-  }).catch(function (e) {
-    return console.log(e);
-  });
+  (0, _save2.default)(app, list, hosts);
 };
 
 /***/ }),
@@ -4480,10 +4463,18 @@ var _Agent = __webpack_require__(5);
 
 var _Agent2 = _interopRequireDefault(_Agent);
 
+var _list_updated = __webpack_require__(236);
+
+var _list_updated2 = _interopRequireDefault(_list_updated);
+
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
 module.exports = function (app, list) {
-  _Agent2.default.pact('saveHosts', list).catch(function (e) {
+  var hosts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
+
+  _Agent2.default.pact('saveHosts', list).then(function (new_list) {
+    (0, _list_updated2.default)(app, new_list, hosts);
+  }).catch(function (e) {
     return console.log(e);
   });
 };
@@ -20953,6 +20944,16 @@ var App = function (_React$Component) {
     });
 
     (0, _index.reg)(_this);
+
+    setInterval(function () {
+      var list = _this.state.list;
+      if (!list || list.length === 0) return;
+
+      _Agent2.default.pact('checkNeedRemoteRefresh', list).then(function (list) {
+        if (!list) return;
+        _Agent2.default.emit('list_updated', list);
+      });
+    }, 10000);
     return _this;
   }
 
@@ -23756,6 +23757,8 @@ var map = {
 	"./get_on_hosts.js": 233,
 	"./index": 28,
 	"./index.js": 28,
+	"./list_updated": 236,
+	"./list_updated.js": 236,
 	"./order": 37,
 	"./order.js": 37,
 	"./save": 38,
@@ -23796,6 +23799,7 @@ var map = {
 	"./esc.js": 36,
 	"./get_on_hosts.js": 233,
 	"./index.js": 28,
+	"./list_updated.js": 236,
 	"./order.js": 37,
 	"./save.js": 38,
 	"./sudo_cancel.js": 39,
@@ -35349,7 +35353,8 @@ module.exports = function (app, on, on_ids, callback) {
 };
 
 /***/ }),
-/* 235 */
+/* 235 */,
+/* 236 */
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
@@ -35360,30 +35365,28 @@ module.exports = function (app, on, on_ids, callback) {
 
 
 
-function makeGroupContent(item, list) {
-  return (item.include || []).map(function (id) {
-    return (list.find(function (i) {
-      return i.id === id;
-    }) || {}).content || '';
-  }).join('\n\n');
-}
+var _Agent = __webpack_require__(5);
 
-module.exports = function (list) {
-  return list.map(function (item) {
-    var new_item = {};
+var _Agent2 = _interopRequireDefault(_Agent);
 
-    var valid_keys = ['id', 'title', 'content', 'on', 'where', 'url', 'last_refresh', 'refresh_interval', 'include'];
-    valid_keys.map(function (k) {
-      if (item.hasOwnProperty(k)) {
-        new_item[k] = item[k];
-      }
-    });
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
-    if (new_item.where === 'group') {
-      new_item.content = makeGroupContent(new_item, list);
-    }
+module.exports = function (app, new_list) {
+  var hosts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
 
-    return new_item;
+  var state = { list: new_list };
+  var current = app.state.current;
+  var item = new_list.find(function (i) {
+    return i.id === current.id;
+  });
+  if (item) {
+    state.current = item;
+  }
+
+  app.setState(state, function () {
+    if (hosts) {
+      _Agent2.default.emit('select', hosts.id);
+    }
   });
 };
 

+ 24 - 0
app/server/actions/checkIsExpired.js

@@ -0,0 +1,24 @@
+/**
+ * @author oldj
+ * @blog https://oldj.net
+ */
+
+'use strict'
+
+module.exports = (svr, hosts) => {
+  let {refresh_interval, last_refresh} = hosts
+  if (!last_refresh) return true
+
+  let dt
+  try {
+    dt = new Date(last_refresh)
+  } catch (e) {
+    return true
+  }
+
+  let now = new Date()
+  let hour = 3600000
+
+  return (now.getTime() - dt.getTime()) / hour > refresh_interval
+}
+

+ 21 - 0
app/server/actions/checkNeedRemoteRefresh.js

@@ -0,0 +1,21 @@
+/**
+ * @author oldj
+ * @blog https://oldj.net
+ */
+
+'use strict'
+
+const isExpired = require('./checkIsExpired')
+const saveHosts = require('./saveHosts')
+
+module.exports = (svr, list) => {
+  let exp = list.map(hosts => isExpired(svr, hosts))
+
+  if (exp.includes(true)) {
+    return saveHosts(svr, list)
+  } else {
+    return Promise.resolve()
+      .then(() => false)
+  }
+}
+

+ 7 - 16
app/server/actions/checkOneRemoteHosts.js

@@ -6,36 +6,27 @@
 'use strict'
 
 const getUrl = require('./getUrl')
+const isExpired = require('./checkIsExpired')
 
-function isExpired (interval, last) {
-  if (!last) return true
+function now () {
+  let dt = new Date()
 
-  let dt
-  try {
-    dt = new Date(last)
-  } catch (e) {
-    return true
-  }
-
-  let now = new Date()
-  let hour = 3600000
-
-  return (now.getTime() - dt.getTime()) / hour > interval
+  return `${dt.getFullYear()}-${dt.getMonth() +
+                                1}-${dt.getDate()} ${dt.getHours()}:${dt.getMinutes()}:${dt.getSeconds()}`
 }
 
 module.exports = (svr, hosts) => {
-  console.log(27, hosts)
   return new Promise((resolve, reject) => {
     if (hosts.where !== 'remote' || !hosts.url) {
       resolve(hosts)
       return
     }
 
-    let {refresh_interval, last_refresh} = hosts
-    if (isExpired(refresh_interval, last_refresh)) {
+    if (isExpired(svr, hosts)) {
       getUrl(svr, hosts.url)
         .then(content => {
           hosts.content = content
+          hosts.last_refresh = now()
         })
         .then(() => resolve(hosts))
         .catch(e => resolve(e))

+ 0 - 1
app/server/actions/saveHosts.js

@@ -37,7 +37,6 @@ function tryToApply (svr, cnt, pswd) {
 }
 
 module.exports = (svr, list) => {
-
   return checkAllRemoteHostses(svr, list)
     .then(list => cleanData(list))
     .then(list => {

+ 11 - 0
ui/app.js

@@ -33,6 +33,17 @@ export default class App extends React.Component {
     })
 
     events_reg(this)
+
+    setInterval(() => {
+      let list = this.state.list
+      if (!list || list.length === 0) return
+
+      Agent.pact('checkNeedRemoteRefresh', list)
+        .then(list => {
+          if (!list) return
+          Agent.emit('list_updated', list)
+        })
+    }, 10000)
   }
 
   loadHosts () {

+ 23 - 0
ui/events/list_updated.js

@@ -0,0 +1,23 @@
+/**
+ * @author oldj
+ * @blog https://oldj.net
+ */
+
+'use strict'
+
+import Agent from '../Agent'
+
+module.exports = (app, new_list, hosts = null) => {
+  let state = {list: new_list}
+  let current = app.state.current
+  let item = new_list.find(i => i.id === current.id)
+  if (item) {
+    state.current = item
+  }
+
+  app.setState(state, () => {
+    if (hosts) {
+      Agent.emit('select', hosts.id)
+    }
+  })
+}

+ 5 - 1
ui/events/save.js

@@ -6,8 +6,12 @@
 'use strict'
 
 import Agent from '../Agent'
+import updated from './list_updated'
 
-module.exports = (app, list) => {
+module.exports = (app, list, hosts = null) => {
   Agent.pact('saveHosts', list)
+    .then(new_list => {
+      updated(app, new_list, hosts)
+    })
     .catch(e => console.log(e))
 }

+ 4 - 17
ui/events/update_hosts.js

@@ -5,8 +5,9 @@
 
 'use strict'
 
-import Agent from '../Agent'
-import cleanData from '../../app/server/cleanData'
+//import Agent from '../Agent'
+//import cleanData from '../../app/server/cleanData'
+import save from './save'
 
 module.exports = (app, hosts) => {
   let list = app.state.list.slice(0)
@@ -19,19 +20,5 @@ module.exports = (app, hosts) => {
   }
 
   //list = cleanData(list)
-
-  Agent.pact('saveHosts', list)
-    .then(new_list => {
-      let state = {list: new_list}
-      let current = app.state.current
-      let item = new_list.find(i => i.id === current.id)
-      if (item) {
-        state.current = item
-      }
-
-      app.setState(state, () => {
-        Agent.emit('select', hosts.id)
-      })
-    })
-    .catch(e => console.log(e))
+  save(app, list, hosts)
 }