summaryrefslogtreecommitdiff
path: root/src/gizmo/wasp-telemetry.el
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