blob: 6625f38b6c6b9e59092c7ebf1184fb0a03f07160 (
plain)
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
|
;;; wasp-telemetry --- Telemetry and Use Tracking -*- lexical-binding: t; -*-
;;; Commentary:
;;; Code:
(require 's)
(require 'ht)
(require 'wasp-utils)
(defvar w/telemetry-stats (ht-create))
(defvar w/telemetry-current nil)
(defvar w/telemetry-current-duration 0)
(defvar w/telemetry-work-cooldown 0)
(defun w/telemetry-change (new)
"Update the current telemetry state to NEW."
(message "New status: %s" new)
(when w/telemetry-current
(ht-set!
w/telemetry-stats w/telemetry-current
(+ (ht-get w/telemetry-stats w/telemetry-current 0)
w/telemetry-current-duration)))
(setf w/telemetry-current new)
(setf w/telemetry-current-duration 0))
(defun w/telemetry-update ()
"Check and possibly update KPIs."
(cl-incf w/telemetry-current-duration)
(when-let*
((win (w/get-stream-primary-window))
(b (window-buffer win)))
(cond
((> w/telemetry-work-cooldown 0)
(cl-decf w/telemetry-work-cooldown))
((s-contains? "Wikipedia" (buffer-name b))
(w/telemetry-change 'wikipedia))
((not (eq w/telemetry-current 'yap))
(w/telemetry-change 'yap))
)))
(defun w/telemetry-change-handler (_ _ _)
"Function for `after-change-functions' to track status."
(setf w/telemetry-work-cooldown 12)
(unless (eq w/telemetry-current 'lockedin)
(w/telemetry-change 'lockedin)))
(add-to-list 'after-change-functions #'w/telemetry-change-handler)
(defvar w/telemetry-timer nil)
(defun w/run-telemetry-timer ()
"Run the telemetry timer."
(when w/telemetry-timer
(cancel-timer w/telemetry-timer))
(w/telemetry-update)
(setq
w/telemetry-timer
(run-with-timer 10 nil #'w/run-telemetry-timer)))
(w/run-telemetry-timer)
(provide 'wasp-telemetry)
;;; wasp-telemetry.el ends here
|