tabby/tabby-core/src/services/homeBase.service.ts
2021-12-08 23:33:45 +01:00

68 lines
2.4 KiB
TypeScript

import { Injectable, Inject } from '@angular/core'
import * as mixpanel from 'mixpanel'
import { v4 as uuidv4 } from 'uuid'
import { ConfigService } from './config.service'
import { PlatformService, BOOTSTRAP_DATA, BootstrapData, HostAppService } from '../api'
@Injectable({ providedIn: 'root' })
export class HomeBaseService {
appVersion: string
mixpanel: any
/** @hidden */
private constructor (
private config: ConfigService,
private platform: PlatformService,
private hostApp: HostAppService,
@Inject(BOOTSTRAP_DATA) private bootstrapData: BootstrapData,
) {
this.appVersion = platform.getAppVersion()
if (this.config.store.enableAnalytics && !this.config.store.enableWelcomeTab) {
this.enableAnalytics()
}
}
openGitHub (): void {
this.platform.openExternal('https://github.com/Eugeny/tabby')
}
openDiscussions (): void {
this.platform.openExternal('https://github.com/Eugeny/tabby/discussions')
}
openTwitter (): void {
this.platform.openExternal('https://twitter.com/eugeeeeny')
}
reportBug (): void {
let body = `Version: ${this.appVersion}\n`
body += `Platform: ${this.hostApp.platform} ${process.arch} ${this.platform.getOSRelease()}\n`
const plugins = this.bootstrapData.installedPlugins.filter(x => !x.isBuiltin).map(x => x.name)
body += `Plugins: ${plugins.join(', ') || 'none'}\n`
body += `Frontend: ${this.config.store.terminal?.frontend}\n\n`
this.platform.openExternal(`https://github.com/Eugeny/tabby/issues/new?body=${encodeURIComponent(body)}`)
}
enableAnalytics (): void {
if (!window.localStorage.analyticsUserID) {
window.localStorage.analyticsUserID = uuidv4()
}
this.mixpanel = mixpanel.init('bb4638b0860eef14c04d4fbc5eb365fa')
if (!window.localStorage.installEventSent) {
this.mixpanel.track('freshInstall', this.getAnalyticsProperties())
window.localStorage.installEventSent = true
}
this.mixpanel.track('launch', this.getAnalyticsProperties())
}
getAnalyticsProperties (): Record<string, string> {
return {
distinct_id: window.localStorage.analyticsUserID,
platform: process.platform,
os: this.platform.getOSRelease(),
version: this.appVersion,
}
}
}