From 32234c290a7a05cc970ddbc98c6e68a39083b6ad Mon Sep 17 00:00:00 2001 From: "Zhuohuan LI (CARPE DIEM)" Date: Wed, 26 Oct 2016 17:27:23 +0800 Subject: [PATCH] fix sloc file glob bug in win32 --- package.json | 2 +- src/brolog-env.ts | 19 ++++++++--------- src/io-client.ts | 36 ++++++-------------------------- src/puppet-web/browser-cookie.ts | 7 +++++-- src/puppet-web/browser-driver.ts | 30 +++++++++++++++++++++----- src/puppet-web/browser.ts | 7 +------ src/puppet-web/puppet-web.ts | 31 +++++++++++++-------------- src/state-monitor.ts | 2 +- src/util-lib.ts | 2 +- 9 files changed, 64 insertions(+), 72 deletions(-) diff --git a/package.json b/package.json index ef59f8dd..f681b745 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "eslint": "eslint \"{bin,example,src,test}/**/*.js\"", "tslint": "tslint \"{bin,example,src,test}/**/*.ts\" && tsc --noEmit", "pretest": "npm run lint && npm run clean && npm run build", - "sloc": "sloc {bin,example,script,src,test,index.ts} --details --format cli-table --keys total,source,comment && sloc {bin,example,script,src,test,index.ts}", + "sloc": "sloc \"{bin,example,src,test,index.ts}\" --details --format cli-table --keys total,source,comment && sloc \"{bin,example,src,test,index.ts}\"", "test": "npm run test:chrome", "posttest": "npm run clean && npm run sloc", "test:phantomjs": "cross-env LC_ALL=C WECHATY_LOG=info WECHATY_HEAD=phantomjs ava --timeout=10m \"dist/test/*.spec.js\"", diff --git a/src/brolog-env.ts b/src/brolog-env.ts index de322f41..d19d064a 100644 --- a/src/brolog-env.ts +++ b/src/brolog-env.ts @@ -9,6 +9,8 @@ import { Brolog } from 'brolog' +export let log: Brolog + const level = process.env['WECHATY_LOG'] // use a typescript switch/case/default: never to replace regex @@ -16,16 +18,13 @@ const levelRegexStr = 'silly|verbose|info|warn|error|silent' const levelRegex = new RegExp(levelRegexStr, 'i') if (levelRegex.test(level)) { // log.level = level.toLowerCase() - Brolog.level(level) - Brolog.silly('Brolog', 'WECHATY_LOG set level to %s', level) -} -else if (level) { - Brolog.warn('Brolog', 'env WECHATY_LOG(%s) must be one of silly|verbose|info|warn|error|silent', level) + log = new Brolog(level) + log.silly('Brolog', 'WECHATY_LOG set level to %s', level) +} else { + log = new Brolog() + log.warn('Brolog', 'env WECHATY_LOG(%s) must be one of silly|verbose|info|warn|error|silent', level) } -export { - Brolog - , Brolog as log -} +export { Brolog } -export default Brolog +export default log diff --git a/src/io-client.ts b/src/io-client.ts index 504f7a9c..d9983c09 100644 --- a/src/io-client.ts +++ b/src/io-client.ts @@ -23,22 +23,20 @@ import Wechaty from './wechaty' import brolog from './brolog-env' export class IoClient { - // private _targetState - // private _currentState - private state = new StateMonitor<'online', 'offline'>('IoClient', 'offline') private wechaty: Wechaty | null private io: Io | null + private state = new StateMonitor<'online', 'offline'>('IoClient', 'offline') + constructor( private token: string = Config.token || Config.DEFAULT_TOKEN - , private log = brolog + , private log: any = brolog ) { if (!log) { const e = new Error('constructor() log(npmlog/brolog) must be set') throw e } - this.log = log this.log.verbose('IoClient', 'constructor() with token: %s', token) if (!token) { @@ -46,38 +44,16 @@ export class IoClient { this.log.error('IoClient', e.message) throw e } - - // this.targetState('disconnected') - // this.currentState('disconnected') - // this.state.target('offline') - // this.state.current('offline') } -// // targetState : 'connected' | 'disconnected' -// private targetState(newState?) { -// if (newState) { -// this.log.verbose('IoClient', 'targetState(%s)', newState) -// this._targetState = newState -// } -// return this._targetState -// } - -// // currentState : 'connecting' | 'connected' | 'disconnecting' | 'disconnected' -// private currentState(newState?) { -// if (newState) { -// this.log.verbose('IoClient', 'currentState(%s)', newState) -// this._currentState = newState -// } -// return this._currentState -// } - public async init(): Promise { this.log.verbose('IoClient', 'init()') // if (/connecting|disconnecting/.test(this.currentState())) { if (this.state.inprocess()) { - this.log.warn('IoClient', 'init() with state.inprocess(), skip init') - return Promise.reject('pending') + const e = new Error('state.inprocess(), skip init') + this.log.warn('IoClient', 'init() with %s', e.message) + throw e } // this.targetState('connected') diff --git a/src/puppet-web/browser-cookie.ts b/src/puppet-web/browser-cookie.ts index bbf8ce10..4efab992 100644 --- a/src/puppet-web/browser-cookie.ts +++ b/src/puppet-web/browser-cookie.ts @@ -148,8 +148,8 @@ export class BrowserCookie { await new Promise((resolve, reject) => { fs.readFile(storeFile, (err, jsonStr) => { if (err) { - if (err) { log.silly('PuppetWebBrowserCookie', 'load(%s) skipped because error code: %s', this.storeFile, err.code) } - return reject(new Error('error code:' + err.code)) + log.verbose('PuppetWebBrowserCookie', 'load(%s) skipped because error code: %s', this.storeFile, err.code) + return // fail safe } const cookies = JSON.parse(jsonStr.toString()) @@ -165,6 +165,9 @@ export class BrowserCookie { }) }) }) + + return + } /** diff --git a/src/puppet-web/browser-driver.ts b/src/puppet-web/browser-driver.ts index 794b9c08..3d8447ed 100644 --- a/src/puppet-web/browser-driver.ts +++ b/src/puppet-web/browser-driver.ts @@ -97,11 +97,31 @@ export class BrowserDriver { const customChrome = Capabilities.chrome() .set('chromeOptions', options) - return new Builder() - .setAlertBehavior('ignore') - .forBrowser('chrome') - .withCapabilities(customChrome) - .build() + /** + * XXX when will Builder().build() throw exception??? + */ + let driver + let ttl = 3 + let err + + while (!driver && ttl--) { + try { + driver = new Builder() + .setAlertBehavior('ignore') + .forBrowser('chrome') + .withCapabilities(customChrome) + .build() + } catch (e) { + log.warn('PuppetWebBrowserDriver', 'getChromeDriver() exception: %s, retry ttl: %d', e.message, ttl) + err = e + } + } + + if (driver) { + return driver + } + + throw err } private getPhantomJsDriver(): WebDriver { diff --git a/src/puppet-web/browser.ts b/src/puppet-web/browser.ts index 26bc63eb..a8762c38 100644 --- a/src/puppet-web/browser.ts +++ b/src/puppet-web/browser.ts @@ -33,9 +33,9 @@ export type BrowserSetting = { export class Browser extends EventEmitter { private cookie: BrowserCookie + public driver: BrowserDriver public state = new StateMonitor<'open', 'close'>('Browser', 'close') - public driver: BrowserDriver constructor(private setting: BrowserSetting = { head: Config.head @@ -44,11 +44,6 @@ export class Browser extends EventEmitter { super() log.verbose('PuppetWebBrowser', 'constructor() with head(%s) sessionFile(%s)', setting.head, setting.sessionFile) - // this.targetState('close') - // this.currentState('close') - // this.state.target('close') - // this.state.current('close') - this.driver = new BrowserDriver(this.setting.head) this.cookie = new BrowserCookie(this.driver, this.setting.sessionFile) } diff --git a/src/puppet-web/puppet-web.ts b/src/puppet-web/puppet-web.ts index fd02ae45..ca3b144e 100644 --- a/src/puppet-web/puppet-web.ts +++ b/src/puppet-web/puppet-web.ts @@ -193,15 +193,13 @@ export class PuppetWeb extends Puppet { // if (this.targetState() !== 'live') { if (this.state.target() !== 'live') { - log.warn('PuppetWeb', 'initBrowser() found state.target()) != live, no init anymore') - // return Promise.resolve('skipped') - return Promise.reject('skipped') + const e = new Error('found state.target()) != live, no init anymore') + log.warn('PuppetWeb', 'initBrowser() %s', e.message) + throw e } - // return co.call(this, function* () { try { await browser.init() - // }).catch(e => { } catch (e) { log.error('PuppetWeb', 'initBrowser() exception: %s', e.message) throw e @@ -225,17 +223,18 @@ export class PuppetWeb extends Puppet { return Promise.reject(errMsg) } - await bridge.init() - .catch(e => { - if (!this.browser) { - log.warn('PuppetWeb', 'initBridge() without browser?') - } else if (this.browser.dead()) { - log.warn('PuppetWeb', 'initBridge() found browser dead, wait it to restore') - } else { - log.error('PuppetWeb', 'initBridge() exception: %s', e.message) - throw e - } - }) + try { + await bridge.init() + } catch (e) { + if (!this.browser) { + log.warn('PuppetWeb', 'initBridge() without browser?') + } else if (this.browser.dead()) { + log.warn('PuppetWeb', 'initBridge() found browser dead, wait it to restore') + } else { + log.error('PuppetWeb', 'initBridge() exception: %s', e.message) + throw e + } + } return } diff --git a/src/state-monitor.ts b/src/state-monitor.ts index c95168b0..58bcc8ae 100644 --- a/src/state-monitor.ts +++ b/src/state-monitor.ts @@ -22,7 +22,7 @@ export class StateMonitor { private _stable: boolean constructor(private _client: string, initState: A|B) { - log.verbose('StateMonitor', 'constructor(%s, %s)', _client, initState) + log.silly('StateMonitor', 'constructor(%s, %s)', _client, initState) this._target = initState this._current = initState diff --git a/src/util-lib.ts b/src/util-lib.ts index 6c26f7f5..5ca1575b 100644 --- a/src/util-lib.ts +++ b/src/util-lib.ts @@ -128,7 +128,7 @@ class UtilLib { log.verbose('UtilLib', 'getPort(%d) return: %d' , port , okPort - ) + ) resolve(okPort) }) }) -- GitLab