summaryrefslogtreecommitdiff
path: root/src/gizmo/wasp-telemetry.el
diff options
context:
space:
mode:
Diffstat (limited to 'src/gizmo/wasp-telemetry.el')
-rw-r--r--src/gizmo/wasp-telemetry.el59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/gizmo/wasp-telemetry.el b/src/gizmo/wasp-telemetry.el
new file mode 100644
index 00000000..6625f38b
--- /dev/null
+++ b/src/gizmo/wasp-telemetry.el
@@ -0,0 +1,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