Commit b69b95d2 authored by 神楽坂玲奈's avatar 神楽坂玲奈

error handler

parent dd32aa4e
...@@ -86,7 +86,7 @@ export class AppsService { ...@@ -86,7 +86,7 @@ export class AppsService {
let params = new URLSearchParams(); let params = new URLSearchParams();
params.set('user_id', this.loginService.user.email); params.set('user_id', this.loginService.user.email);
let data = await this.http.get(appsURL).map((response) => response.json()).toPromise(); let data = await this.http.get(appsURL).map((response) => response.json()).toPromise();
let keys_data = await this.http.get(keysURL, {search: params}).map((response) => response.json()).toPromise(); let keys_data = await this.http.get(keysURL, { search: params }).map((response) => response.json()).toPromise();
for (let item of keys_data) { for (let item of keys_data) {
let app = data.find((app: any) => app.id === item.app_id); let app = data.find((app: any) => app.id === item.app_id);
if (app) { if (app) {
...@@ -99,7 +99,7 @@ export class AppsService { ...@@ -99,7 +99,7 @@ export class AppsService {
console.error(e); console.error(e);
let data = localStorage.getItem('apps_json'); let data = localStorage.getItem('apps_json');
if (data) { if (data) {
this.apps = this.loadAppsList(JSON.parse(data)); this.apps = this.loadAppsList(JSON.parse(data!));
} else { } else {
alert('读取游戏列表失败,可能是网络不通'); alert('读取游戏列表失败,可能是网络不通');
this.apps = new Map(); this.apps = new Map();
...@@ -360,7 +360,7 @@ export class AppsService { ...@@ -360,7 +360,7 @@ export class AppsService {
let checksumFiles = await this.getChecksumFile(app); let checksumFiles = await this.getChecksumFile(app);
for (let [pattern, fileOption] of app.files) { for (let [pattern, fileOption] of app.files) {
await new Promise((resolve, reject) => { await new Promise((resolve, reject) => {
new glob.Glob(pattern, {cwd: appPath}, (err, files) => { new glob.Glob(pattern, { cwd: appPath }, (err, files) => {
for (let file of files) { for (let file of files) {
// 避免被当做文件夹 // 避免被当做文件夹
if (fileOption.sync) { if (fileOption.sync) {
...@@ -517,7 +517,7 @@ export class AppsService { ...@@ -517,7 +517,7 @@ export class AppsService {
let ignoreFiles: Set<string> = new Set(); let ignoreFiles: Set<string> = new Set();
for (let [pattern, fileOption] of app.files) { for (let [pattern, fileOption] of app.files) {
await new Promise((resolve, reject) => { await new Promise((resolve, reject) => {
new glob.Glob(pattern, {cwd: app.local!.path}, (err, files) => { new glob.Glob(pattern, { cwd: app.local!.path }, (err, files) => {
for (let file of files) { for (let file of files) {
if (fileOption.ignore) { if (fileOption.ignore) {
ignoreFiles.add(file); ignoreFiles.add(file);
...@@ -703,7 +703,7 @@ export class AppsService { ...@@ -703,7 +703,7 @@ export class AppsService {
} }
let files = await this.downloadService.getFiles(downloadId); let files = await this.downloadService.getFiles(downloadId);
_app.status.status = 'waiting'; _app.status.status = 'waiting';
return {app: _app, files: files}; return { app: _app, files: files };
}; };
if (!app.isInstalled()) { if (!app.isInstalled()) {
let apps: App[] = []; let apps: App[] = [];
...@@ -724,7 +724,7 @@ export class AppsService { ...@@ -724,7 +724,7 @@ export class AppsService {
for (let result of downloadResults) { for (let result of downloadResults) {
let o = new InstallOption(result.app, option.installLibrary); let o = new InstallOption(result.app, option.installLibrary);
o.downloadFiles = result.files; o.downloadFiles = result.files;
let task = tryToInstall({app: result.app, option: o}); let task = tryToInstall({ app: result.app, option: o });
installTasks.push(task); installTasks.push(task);
} }
await Promise.all(installTasks); await Promise.all(installTasks);
...@@ -770,14 +770,14 @@ export class AppsService { ...@@ -770,14 +770,14 @@ export class AppsService {
if (th105.isInstalled()) { if (th105.isInstalled()) {
const config_file = path.join((<AppLocal>app.local).path, 'configex123.ini'); const config_file = path.join((<AppLocal>app.local).path, 'configex123.ini');
let config = await new Promise((resolve, reject) => { let config = await new Promise((resolve, reject) => {
fs.readFile(config_file, {encoding: 'utf-8'}, (error, data) => { fs.readFile(config_file, { encoding: 'utf-8' }, (error, data) => {
if (error) { if (error) {
return reject(error); return reject(error);
} }
resolve(ini.parse(data)); resolve(ini.parse(data));
}); });
}); });
config['th105path'] = {path: (<AppLocal>th105.local).path}; config['th105path'] = { path: (<AppLocal>th105.local).path };
await new Promise((resolve, reject) => { await new Promise((resolve, reject) => {
fs.writeFile(config_file, ini.stringify(config), (error) => { fs.writeFile(config_file, ini.stringify(config), (error) => {
if (error) { if (error) {
...@@ -798,7 +798,7 @@ export class AppsService { ...@@ -798,7 +798,7 @@ export class AppsService {
if (action.open.id === 'np2fmgen') { if (action.open.id === 'np2fmgen') {
const config_file = path.join(action.open!.local!.path, 'np21nt.ini'); const config_file = path.join(action.open!.local!.path, 'np21nt.ini');
let config = await new Promise((resolve, reject) => { let config = await new Promise((resolve, reject) => {
fs.readFile(config_file, {encoding: 'utf-8'}, (error, data) => { fs.readFile(config_file, { encoding: 'utf-8' }, (error, data) => {
if (error) { if (error) {
return reject(error); return reject(error);
} }
...@@ -845,7 +845,7 @@ export class AppsService { ...@@ -845,7 +845,7 @@ export class AppsService {
args = args.concat(action.args); args = args.concat(action.args);
env = Object.assign(env, action.env); env = Object.assign(env, action.env);
console.log(execute, args, env, cwd); console.log(execute, args, env, cwd);
let handle = child_process.spawn(execute, args, {env: env, cwd: cwd}); let handle = child_process.spawn(execute, args, { env: env, cwd: cwd });
handle.stdout.on('data', (data) => { handle.stdout.on('data', (data) => {
console.log(`stdout: ${data}`); console.log(`stdout: ${data}`);
...@@ -872,7 +872,7 @@ export class AppsService { ...@@ -872,7 +872,7 @@ export class AppsService {
async network(app: App, server: any) { async network(app: App, server: any) {
if (!this.maotama) { if (!this.maotama) {
this.maotama = new Promise((resolve, reject) => { this.maotama = new Promise((resolve, reject) => {
let child = sudo.fork('maotama', [], {stdio: ['inherit', 'inherit', 'inherit', 'ipc']}); let child = sudo.fork('maotama', [], { stdio: ['inherit', 'inherit', 'inherit', 'ipc'] });
child.once('message', () => resolve(child)); child.once('message', () => resolve(child));
child.once('error', reject); child.once('error', reject);
child.once('exit', reject); child.once('exit', reject);
...@@ -890,7 +890,7 @@ export class AppsService { ...@@ -890,7 +890,7 @@ export class AppsService {
if (connection) { if (connection) {
connection.connection.close(); connection.connection.close();
} }
connection = {connection: new WebSocket(server.url), address: null}; connection = { connection: new WebSocket(server.url), address: null };
let id: Timer | null; let id: Timer | null;
this.connections.set(app, connection); this.connections.set(app, connection);
connection.connection.onmessage = (event) => { connection.connection.onmessage = (event) => {
......
/**
* Created by zh99998 on 2017/6/1.
*/
import * as Raven from 'raven-js';
import { ErrorHandler } from '@angular/core';
Raven
.config('https://2c5fa0d0f13c43b5b96346f4eff2ea60@sentry.io/174769')
.install();
export class RavenErrorHandler implements ErrorHandler {
handleError(err: any): void {
Raven.captureException(err.originalError || err);
}
}
\ No newline at end of file
import {NgModule, NO_ERRORS_SCHEMA, LOCALE_ID} from '@angular/core'; import { ErrorHandler, LOCALE_ID, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
import {BrowserModule} from '@angular/platform-browser'; import { BrowserModule } from '@angular/platform-browser';
import {FormsModule, ReactiveFormsModule} from '@angular/forms'; import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import {HttpModule} from '@angular/http'; import { HttpModule } from '@angular/http';
import {MyCardComponent} from './mycard.component'; import { MyCardComponent } from './mycard.component';
import {LoginComponent} from './login.component'; import { LoginComponent } from './login.component';
import {StoreComponent} from './store.component'; import { StoreComponent } from './store.component';
import {LobbyComponent} from './lobby.component'; import { LobbyComponent } from './lobby.component';
import {AppDetailComponent} from './app-detail.component'; import { AppDetailComponent } from './app-detail.component';
import {RosterComponent} from './roster.component'; import { RosterComponent } from './roster.component';
import {YGOProComponent} from './ygopro.component'; import { YGOProComponent } from './ygopro.component';
import {AppsService} from './apps.service'; import { AppsService } from './apps.service';
import {SettingsService} from './settings.sevices'; import { SettingsService } from './settings.sevices';
import {LoginService} from './login.service'; import { LoginService } from './login.service';
import {DownloadService} from './download.service'; import { DownloadService } from './download.service';
import {AboutComponent} from './about.component'; import { AboutComponent } from './about.component';
import {CandyComponent} from './candy.component'; import { CandyComponent } from './candy.component';
import { RavenErrorHandler } from './error-handler';
@NgModule({ @NgModule({
imports: [BrowserModule, FormsModule, ReactiveFormsModule, HttpModule], imports: [BrowserModule, FormsModule, ReactiveFormsModule, HttpModule],
...@@ -29,6 +31,9 @@ import {CandyComponent} from './candy.component'; ...@@ -29,6 +31,9 @@ import {CandyComponent} from './candy.component';
provide: LOCALE_ID, provide: LOCALE_ID,
deps: [SettingsService], deps: [SettingsService],
useFactory: (settingsService: SettingsService) => settingsService.getLocale() useFactory: (settingsService: SettingsService) => settingsService.getLocale()
},
{
provide: ErrorHandler, useClass: RavenErrorHandler
} }
], ],
schemas: [NO_ERRORS_SCHEMA] schemas: [NO_ERRORS_SCHEMA]
......
{ {
"name": "mycard", "name": "mycard",
"version": "3.0.27", "version": "3.0.28",
"description": "moecube", "description": "moecube",
"keywords": [], "keywords": [],
"author": "zh99998 <zh99998@gmail.com>", "author": "zh99998 <zh99998@gmail.com>",
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
"i18n:download": "curl --output locale/messages.en-US.xlf --retry 5 --location --user ${TRANSIFEX_USERNAME}:${TRANSIFEX_PASSWORD} https://www.transifex.com/api/2/project/moecube/resource/messages/translation/en_US/?file && sed -i.bak 's/\\&amp;/\\&/g; s/\\&lt;/</g; s/\\&gt;/>/g; s/\\&quot;/\"/g;' locale/messages.en-US.xlf" "i18n:download": "curl --output locale/messages.en-US.xlf --retry 5 --location --user ${TRANSIFEX_USERNAME}:${TRANSIFEX_PASSWORD} https://www.transifex.com/api/2/project/moecube/resource/messages/translation/en_US/?file && sed -i.bak 's/\\&amp;/\\&/g; s/\\&lt;/</g; s/\\&gt;/>/g; s/\\&quot;/\"/g;' locale/messages.en-US.xlf"
}, },
"dependencies": { "dependencies": {
"@angular/animations": "^4.1.3",
"@angular/common": "latest", "@angular/common": "latest",
"@angular/compiler": "latest", "@angular/compiler": "latest",
"@angular/core": "latest", "@angular/core": "latest",
...@@ -35,14 +36,15 @@ ...@@ -35,14 +36,15 @@
"candy": "https://github.com/moecube/candy/releases/download/v2.2.0/candy.tar.gz", "candy": "https://github.com/moecube/candy/releases/download/v2.2.0/candy.tar.gz",
"candy-shop": "candy-chat/candy-plugins", "candy-shop": "candy-chat/candy-plugins",
"core-js": "latest", "core-js": "latest",
"electron-updater": "latest",
"electron-is-dev": "latest", "electron-is-dev": "latest",
"electron-sudo": "moecube/electron-sudo#moecube", "electron-sudo": "moecube/electron-sudo#moecube",
"electron-updater": "latest",
"font-awesome": "latest", "font-awesome": "latest",
"glob": "latest", "glob": "latest",
"ini": "latest", "ini": "latest",
"jquery": "latest", "jquery": "latest",
"marked": "latest", "marked": "latest",
"raven-js": "latest",
"raw-socket": "latest", "raw-socket": "latest",
"reconnecting-websocket": "latest", "reconnecting-websocket": "latest",
"reflect-metadata": "latest", "reflect-metadata": "latest",
...@@ -64,6 +66,7 @@ ...@@ -64,6 +66,7 @@
"@types/bootstrap": "latest", "@types/bootstrap": "latest",
"@types/jquery": "latest", "@types/jquery": "latest",
"@types/marked": "latest", "@types/marked": "latest",
"@types/raven-js": "latest",
"@types/tether": "latest", "@types/tether": "latest",
"@types/typeahead": "latest", "@types/typeahead": "latest",
"electron": "latest", "electron": "latest",
...@@ -89,8 +92,7 @@ ...@@ -89,8 +92,7 @@
} }
], ],
"extraResources": [ "extraResources": [
"bin", "bin"
"images"
], ],
"dmg": { "dmg": {
"contents": [ "contents": [
......
...@@ -77,8 +77,11 @@ System.config({ ...@@ -77,8 +77,11 @@ System.config({
'jquery': 'npm:jquery/dist/jquery.min.js', 'jquery': 'npm:jquery/dist/jquery.min.js',
'tether': 'npm:tether/dist/js/tether.min.js', 'tether': 'npm:tether/dist/js/tether.min.js',
'bootstrap': 'npm:bootstrap/dist/js/bootstrap.min.js', 'bootstrap': 'npm:bootstrap/dist/js/bootstrap.min.js',
'reconnecting-websocket': 'npm:reconnecting-websocket/dist/index.js' 'reconnecting-websocket': 'npm:reconnecting-websocket/dist/index.js',
// 'typeahead.js': '@node/typeahead.js' // 'typeahead.js': '@node/typeahead.js'
'raven-js': 'npm:raven-js'
}, },
// packages tells the System loader how to load when no filename and/or no extension // packages tells the System loader how to load when no filename and/or no extension
packages: { packages: {
...@@ -88,6 +91,9 @@ System.config({ ...@@ -88,6 +91,9 @@ System.config({
}, },
rxjs: { rxjs: {
defaultExtension: 'js' defaultExtension: 'js'
},
'raven-js': {
main: 'dist/raven.js'
} }
}, },
meta: { meta: {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment