-
Notifications
You must be signed in to change notification settings - Fork 1
/
code.ts
83 lines (72 loc) · 1.83 KB
/
code.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
79
80
81
82
83
let apiKey: string = null,
lastAction: number = 0,
lastFile: string = undefined;
const VERSION = '1.0.0';
async function sendHeartbeat(file: string, project: string, isWrite: boolean) {
if (apiKey != null) {
let language = figma.editorType;
let time = Date.now();
figma.ui.postMessage({
type: 'heartbeat',
data: {
file,
time,
project,
language,
isWrite,
VERSION,
apiKey,
},
});
lastAction = time;
lastFile = file;
} else {
await figma.clientStorage.getAsync('waka_time_api_key').then((myAPIKey) => {
apiKey = myAPIKey;
if (apiKey == null) {
promptForAPIKey();
} else {
sendHeartbeat(file, project, isWrite);
}
});
}
}
function enoughTimePassed() {
return lastAction + 120000 < Date.now();
}
function promptForAPIKey(): void {
figma.showUI(__html__);
figma.ui.onmessage = (msg) => {
if (msg.type === 'update-api-key') {
figma.clientStorage.setAsync('waka_time_api_key', msg.apiKey);
apiKey = msg.apiKey;
figma.ui.hide();
}
};
}
async function checkAPIKey() {
await figma.clientStorage.getAsync('waka_time_api_key').then((myAPIKey) => {
apiKey = myAPIKey;
if (apiKey == null) {
promptForAPIKey();
}
});
}
async function handleActivity() {
const file = `${figma.root.name}/${figma.currentPage.name}`;
if (enoughTimePassed() || lastFile !== file) {
sendHeartbeat(file, figma.root.name, false);
}
}
function setupEventListeners() {
figma.on('selectionchange', handleActivity);
figma.on('documentchange', handleActivity);
figma.on('currentpagechange', handleActivity);
figma.on('close', handleActivity);
}
function initialize() {
figma.showUI(__html__, { visible: false });
checkAPIKey();
setupEventListeners();
}
initialize();