-
Notifications
You must be signed in to change notification settings - Fork 39
/
analytics-main.ts
78 lines (67 loc) · 2.28 KB
/
analytics-main.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/**
* Copyright (c) 2020 BlockDev AG
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import ua from "universal-analytics"
import { App, BrowserWindow, screen } from "electron"
import { machineIdSync } from "node-machine-id"
import * as packageJson from "../../package.json"
import { Analytics, Action, AppAction, Category } from "./analytics"
export const getScreenResolution = (window: BrowserWindow): string => {
const display = screen.getDisplayMatching(window.getBounds())
return `${display.size.width}x${display.size.height}`
}
export const machineId = (): string => machineIdSync()
const ga = ua(packageJson.analyticsAccountId, {
cid: machineId(),
strictCidFormat: false,
})
// ga.debug(true)
export const analytics: Analytics = {
setUserId(userId: string) {
ga.set("uid", userId)
},
event(category: Category, action: Action, label?: string, value?: number) {
ga.event(category, action, label ?? "", value ?? 0).send()
},
pageview(path: string) {
ga.pageview(path).send()
},
}
export const initialize = (): void => {
ga.set("an", packageJson.productName)
ga.set("aid", "network.mysterium.desktop")
ga.set("av", packageJson.version)
}
export const setupGlobals = (): void => {
global.analyticsSetUserId = analytics.setUserId
global.analyticsEvent = analytics.event
global.analyticsPageview = analytics.pageview
}
export const setupApp = (app: App): void => {
app.on("will-quit", () => {
analytics.event(Category.App, AppAction.Quit)
})
}
export const setupWindow = (window: BrowserWindow): void => {
ga.set("sr", getScreenResolution(window))
ga.set("ua", window.webContents.userAgent)
window.on("minimize", () => {
analytics.event(Category.App, AppAction.MinimizeWindow)
})
window.on("moved", () => {
ga.set("sr", getScreenResolution(window))
})
window.on("close", () => {
analytics.event(Category.App, AppAction.CloseWindow)
})
window.on("restore", () => {
analytics.event(Category.App, AppAction.RestoreWindow)
})
screen.removeAllListeners()
screen.on("display-metrics-changed", () => {
ga.set("sr", getScreenResolution(window))
})
}