Skip to content

Commit 2b28587

Browse files
committed
Merge branch 'deploy'
2 parents 1203764 + 6993e68 commit 2b28587

9 files changed

+102
-16
lines changed

controllers/AutoUpdater.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ exports.init = function init(window) {
6262
}
6363

6464
exports.manualCheckUpdate = function () {
65-
app.helpers.CheckUpdate(FEED_URL, function (err, update) {
65+
app.helpers.CheckAppUpdate(FEED_URL, function (err, update) {
6666
if (err) {
6767
console.error(TAG, err)
6868
app.controllers.MainWindow.notify('Update Error', 'Failed to check for updates');

controllers/ExtensionManager.js

Lines changed: 52 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
'use strict';
2-
var TAG = _TAG('TournamenterModules');
2+
var TAG = _TAG('ExtensionManager');
33
//
44
// Manages (extra) extensions for Tournamenter
55
//
@@ -12,11 +12,18 @@ var TAG = _TAG('TournamenterModules');
1212
//
1313
const fs = require('fs');
1414
const path = require('path');
15+
const async = require('async');
1516
const fork = require('child_process').fork;
1617
const readline = require('readline');
1718

1819
const emit = app.helpers.emit;
1920

21+
//
22+
// Cache variables
23+
//
24+
exports._cachedUpdates = null
25+
exports._cachedExtensions = null
26+
2027
//
2128
// Initialize module
2229
//
@@ -54,6 +61,9 @@ exports.init = function () {
5461
ipc.on('ExtensionManager:executing', function (event, id) {
5562
event.returnValue = exports.isExecuting();
5663
})
64+
65+
// Delay check for updates a bit
66+
setTimeout(exports.checkUpdates, 4000);
5767
}
5868

5969

@@ -89,7 +99,6 @@ exports.getExtensionsPaths = function (extensions) {
8999
//
90100
// List packages with it's `package.js` information
91101
//
92-
exports._cachedExtensions = null
93102
exports.list = function () {
94103
const installPath = path.join(exports.getInstallPath(), 'node_modules');
95104

@@ -142,7 +151,7 @@ exports.list = function () {
142151
if(!('_requiredBy' in extension))
143152
return true;
144153

145-
// It's a root dependency (installed by `npm install <dep>`)
154+
// It's a root dependency (installed by `npm install <dep>`)
146155
if(extension._requiredBy.indexOf('#USER') >= 0)
147156
return true;
148157

@@ -165,6 +174,12 @@ exports.list = function () {
165174
])
166175
})
167176

177+
// Set updates into objects
178+
extensions = extensions.map((extension) => {
179+
extension.update = exports.getUpdate(extension.name)
180+
return extension
181+
})
182+
168183
// Save cache
169184
exports._cachedExtensions = extensions;
170185

@@ -217,7 +232,8 @@ exports.install = function (extension, cb) {
217232

218233
// Bind stdout and stderr read events and pipes to ipc
219234
app.helpers.bindProcessLogsToIPC(proc, 'ExtensionManager', {
220-
error: /ERR!/g,
235+
error: /ERR!/,
236+
skip: /npm (verb|http|info)/
221237
});
222238
}
223239

@@ -239,10 +255,35 @@ exports.remove = function (extension, cb){
239255

240256
// Bind stdout and stderr read events and pipes to ipc
241257
app.helpers.bindProcessLogsToIPC(proc, 'ExtensionManager', {
242-
error: /ERR!/g,
258+
error: /ERR!/,
259+
skip: /npm (verb|http|info)/
243260
});
244261
}
245262

263+
//
264+
// Check for updates on all dependencies
265+
//
266+
exports.checkUpdates = function (next) {
267+
let packages = exports.list()
268+
async.mapLimit(packages, 2, app.helpers.CheckPackageUpdate, (err, updates) => {
269+
// Join the 'names' with the versions, to create a map table from module name to version
270+
let versions = _.zipObject(_.map(packages, 'name'), updates)
271+
exports._cachedUpdates = versions
272+
273+
// Clear Extensions cache
274+
exports._cachedExtensions = null
275+
276+
// Notify update
277+
emit('ExtensionManager:update', true)
278+
})
279+
}
280+
281+
//
282+
// Get an update for a given module name string. Returns null if up to date
283+
//
284+
exports.getUpdate = function (name) {
285+
return exports._cachedUpdates && exports._cachedUpdates[name] || null
286+
}
246287

247288
//
248289
// Low level call for NPM
@@ -295,6 +336,12 @@ exports.runNpm = function (params, cb){
295336
console.log(TAG, chalk.green(`npm run ${params[0]} ${params[1]}... finish: ${code}`));
296337
emit('ExtensionManager:log', 'server', `Install finished. Code ${code}`);
297338

339+
// Clear extension update cache
340+
exports._cachedUpdates = null
341+
342+
// Check for updates
343+
exports.checkUpdates()
344+
298345
// Callback with error
299346
cb && cb(failed ? errors && errors.join('\r\n') : null);
300347
})

helpers/CheckUpdate.js renamed to helpers/CheckAppUpdate.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const request = require('request')
44
* Checks for update given the url.
55
* Returns the Update object with ''
66
*/
7-
module.exports = function CheckUpdate(url, next) {
7+
module.exports = function CheckAppUpdate(url, next) {
88
request({
99
url: url,
1010
json: true,

helpers/CheckPackageUpdate.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
const semver = require('semver')
2+
const request = require('request')
3+
4+
const NPM_BASE = 'http://registry.npmjs.org'
5+
6+
/*
7+
* Checks for update for a specific package
8+
* this will never send back errors. Only no-update available (null)
9+
*/
10+
module.exports = function CheckPackageUpdate(package, next) {
11+
let {name, version} = package
12+
let url = `${NPM_BASE}/${name}`
13+
14+
request({
15+
url,
16+
json: true,
17+
}, function (error, response, body) {
18+
if (error) {
19+
return next && next(null, null)
20+
}
21+
22+
if (response.statusCode != 200) {
23+
return next && next(null, null)
24+
}
25+
26+
// Check version
27+
let newVersion = body['dist-tags'].latest
28+
let hasUpdate = semver.gt(newVersion, version)
29+
30+
// Send back data
31+
return next && next(null, hasUpdate ? newVersion : null)
32+
})
33+
}

helpers/bindProcessLogsToIPC.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@ module.exports = function bindProcessLogsToIPC(proc, namespace, regexs = {}){
1717
if(!regexs.error || (regexs.error && regexs.error.test(line)))
1818
return emit(`${namespace}:log`, 'error', line);
1919

20+
// Skip lines
21+
if(regexs.skip && regexs.skip.test(line))
22+
return;
23+
2024
// Emits a warning
2125
emit(`${namespace}:log`, 'warn', line);
22-
2326
});
2427

2528
}

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"homepage": "https://github.com/ivanseidel/TournamenterApp",
1111
"repository": "https://github.com/ivanseidel/TournamenterApp",
1212
"license": "MIT",
13-
"version": "1.6.2",
13+
"version": "1.6.4",
1414
"README": "none",
1515
"engines": {
1616
"node": "6.9.1"
@@ -72,15 +72,16 @@
7272
}
7373
},
7474
"dependencies": {
75-
"async": "1.2.1",
75+
"async": "^2.3.0",
7676
"chalk": "^1.1.3",
7777
"forever-monitor": "^1.7.0",
7878
"ip": "^1.1.5",
7979
"kerberos": "0.0.21",
8080
"lodash": "^4.13.1",
8181
"npm": "^3.10.5",
8282
"request": "^2.81.0",
83-
"tournamenter": "2.2.8"
83+
"semver": "^5.3.0",
84+
"tournamenter": "2.3.0"
8485
},
8586
"devDependencies": {
8687
"bower": "latest",

public/app/App.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ angular.module('App', [
151151
$scope._loaded = false;
152152
$scope.version = require('electron').remote.app.getVersion();
153153
$scope.versionTournamenter = require('tournamenter/package.json').version;
154-
$scope.newUpdate = require('electron').remote.require('./helpers/CheckUpdate.js').newUpdate;
154+
$scope.newUpdate = require('electron').remote.require('./helpers/CheckAppUpdate.js').newUpdate;
155155

156156
$scope.openExternal = function openExternal(link){
157157
const {shell} = require('electron');

public/views/extensions.panel.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<md-list ng-cloak style="padding: 0;"
55
ng-class="{installing: executing}">
66

7-
<md-list-item class="secondary-button-padding">
7+
<md-list-item class="secondary-button-padding" style="padding: 0;">
88
<div flex style="line-height: 1.2; font-size: 14px; margin: 8px 16px;">
99
Installed: <small class="label" style="background-color: #999;">
1010
{{ extensions.length }}
@@ -25,12 +25,12 @@
2525
ng-repeat="extension in extensions track by extension.name">
2626

2727
<div flex style="line-height: 1.2; margin: 8px 8px 8px 0;">
28-
<h5>{{ extension.name }}</h5>
28+
<h5>{{ extension.name }} <small>{{ extension.update ? '(Update Available)' : ''}}</small></h5>
2929
<div class="description">{{ extension.description }}</div>
3030
</div>
3131
<!-- <flex></flex> -->
3232

33-
<div style="font-size: 14px;">
33+
<div class="label" style="font-size: 10px;">
3434
v{{ extension.version }}
3535
</div>
3636

public/views/extensions.window.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,12 @@ <h3>{{ extension.name }}</h3>
8888
</div>
8989

9090

91-
<div layout="column">
91+
<div layout="column" layout-align="start end">
9292
<div class="version">
93+
<span ng-if="extension.update">New Update: </span>
9394
<md-icon md-font-icon="mdi mdi-layers"></md-icon>
9495
<span>v{{ extension.version }}</span>
96+
<span ng-if="extension.update"> -> v{{ extension.update }}</span>
9597
</div>
9698
<div flex></div>
9799
<div layout="row">

0 commit comments

Comments
 (0)