copay-crown
Version:
A Secure Crown Wallet
139 lines (118 loc) • 3.73 kB
text/typescript
import { Component, Inject } from '@angular/core';
import { DOCUMENT } from "@angular/platform-browser";
import { TranslateService } from '@ngx-translate/core';
import { ActionSheetController, ToastController } from 'ionic-angular';
// native
import { SocialSharing } from '@ionic-native/social-sharing';
// providers
import { ConfigProvider } from '../../../../providers/config/config';
import { Logger } from '../../../../providers/logger/logger';
import { PlatformProvider } from '../../../../providers/platform/platform';
import * as _ from 'lodash';
export class SessionLogPage {
private config: any;
private dom: Document;
public logOptions: any;
public filteredLogs: any[];
public filterValue: number;
public isCordova: boolean;
constructor(
dom: Document,
private configProvider: ConfigProvider,
private logger: Logger,
private socialSharing: SocialSharing,
private actionSheetCtrl: ActionSheetController,
private toastCtrl: ToastController,
private platformProvider: PlatformProvider,
private translate: TranslateService
) {
this.dom = dom;
this.config = this.configProvider.get();
this.isCordova = this.platformProvider.isCordova;
let logLevels: any = this.logger.getLevels();
this.logOptions = _.keyBy(logLevels, 'weight');
}
ionViewDidLoad() {
this.logger.info('ionViewDidLoad SessionLogPage');
}
ionViewWillEnter() {
let selectedLevel: any = _.has(this.config, 'log.weight') ? this.logger.getWeight(this.config.log.weight) : this.logger.getDefaultWeight();
this.filterValue = selectedLevel.weight;
this.setOptionSelected(selectedLevel.weight);
this.filterLogs(selectedLevel.weight);
}
private filterLogs(weight: number): void {
this.filteredLogs = this.logger.get(weight);
}
public setOptionSelected(weight: number): void {
this.filterLogs(weight);
let opts = {
log: {
weight
}
};
this.configProvider.set(opts);
}
public prepareLogs(): any {
let log = 'Copay Session Logs\n Be careful, this could contain sensitive private data\n\n';
log += '\n\n';
log += this.logger.get().map((v) => {
return '[' + v.timestamp + '][' + v.level + ']' + v.msg;
}).join('\n');
return log;
}
private copyToClipboard() {
let textarea = this.dom.createElement('textarea');
this.dom.body.appendChild(textarea);
textarea.value = this.prepareLogs();
textarea.select();
this.dom.execCommand('copy');
let message = this.translate.instant('Copied to clipboard');
let showSuccess = this.toastCtrl.create({
message,
duration: 1000,
});
showSuccess.present();
}
public sendLogs(): void {
let body = this.prepareLogs();
this.socialSharing.shareViaEmail(
body,
'Copay Logs',
null, // TO: must be null or an array
null, // CC: must be null or an array
null, // BCC: must be null or an array
null, // FILES: can be null, a string, or an array
);
}
public showOptionsMenu(): void {
let copyText = this.translate.instant('Copy to clipboard');
let emailText = this.translate.instant('Send by email');
let button = [];
if (this.isCordova) {
button = [{
text: emailText,
handler: () => {
this.sendLogs()
}
}];
}
else {
button = [{
text: copyText,
handler: () => {
this.copyToClipboard();
}
}];
}
let actionSheet = this.actionSheetCtrl.create({
title: '',
buttons: button
});
actionSheet.present();
}
}