UNPKG

vscode-minxing-extension

Version:

适用于敏行移动平台的开发工具,包含创建应用模板,WiFi真机同步,日志输出等功能

61 lines (60 loc) 2.45 kB
import * as MXAPI from 'minxing-devtools-core'; import * as vscode from 'vscode'; import * as _ from 'underscore'; import co from 'co'; import * as Utils from '../utils'; import {WifiInfo} from '../domain'; class StatusBarItem{ static _instance: StatusBarItem; static get instance(){ if (StatusBarItem._instance == null) { StatusBarItem._instance = new StatusBarItem(); } return StatusBarItem._instance; } ctrl: vscode.StatusBarItem; constructor(){ this.ctrl = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 2); _.extendOwn(this.ctrl, { tooltip: '客户端连接状态', command: 'Minxing.getWifiInfo' }); this.update(); this.ctrl.show(); } update(){ const {port, ip, connectionCount, remoteIps} : WifiInfo = MXAPI.Wifi.info() as WifiInfo; const icon = connectionCount > 0 ? 'pulse' : 'radio-tower'; const ips = remoteIps.map(ip => ip.replace(/^::ffff:/i, '')); const portStr = port == null ? '' : `, 端口:${port}`; const ipStr = _.isEmpty(ips) ? '' : `, 客户端:${ips.join(', ')}`; const status = `$(${icon}) IP:${ip.join(' | ')}${portStr},连接数:${connectionCount}${ipStr}`; this.ctrl.text = status; } dispose(){ this.ctrl.dispose(); } } export const statusBarItem = StatusBarItem.instance; export default { start: co.wrap(function *(context){ const tempPath: string = Utils.getTempPath(); const port: number = yield MXAPI.Utils.getServerPort(1001, 9999); MXAPI.Wifi.start({ tempPath, port, onConnection: co.wrap(function*(clientIp:string){ StatusBarItem.instance.update(); yield vscode.window.showInformationMessage(`调试终端 [${clientIp.replace(/^::ffff:/i, '')}] 已连接到 VSCode。可以开始调试了...`); }), onClose: co.wrap(function*(clientIp:string){ StatusBarItem.instance.update(); yield vscode.window.showInformationMessage(`调试终端 [${clientIp.replace(/^::ffff:/i, '')}] 已断离 VSCode`); }) }); StatusBarItem.instance.update(); context.subscriptions.push(StatusBarItem.instance.ctrl); }), stop(){ StatusBarItem.instance.dispose(); } };