summaryrefslogtreecommitdiff
path: root/src/gizmo/wasp-heartrate.el
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2024-04-26 01:53:24 -0400
committerLLLL Colonq <llll@colonq>2024-04-26 01:53:24 -0400
commit6fa49e57f7313aad8852ce2721c2fcf7d0cec030 (patch)
tree34a2e4a851c663bc6d71d148e59b59ba345a5fdb /src/gizmo/wasp-heartrate.el
parent782c667e824d426b5443591afeefc37d0ae17785 (diff)
Updates
Diffstat (limited to 'src/gizmo/wasp-heartrate.el')
-rw-r--r--src/gizmo/wasp-heartrate.el74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/gizmo/wasp-heartrate.el b/src/gizmo/wasp-heartrate.el
new file mode 100644
index 00000000..62994680
--- /dev/null
+++ b/src/gizmo/wasp-heartrate.el
@@ -0,0 +1,74 @@
+;;; wasp-heartrate --- Heartbeat heartbreak it keeps on pounding -*- lexical-binding: t; -*-
+;;; Commentary:
+;;; Code:
+
+(require 'dash)
+(require 's)
+(require 'f)
+(require 'ht)
+(require 'wasp-utils)
+(require 'wasp-chat)
+
+(defun w/get-load ()
+ "Get the current CPU load."
+ (let ((res (shell-command-to-string "uptime")))
+ (string-to-number (s-trim (car (s-split "," (cadr (s-split "load average:" res))))))))
+
+(defun w/get-heartrate ()
+ "Get the streamer's heart rate."
+ (* 100 (w/get-load)))
+
+(defface w/heartrate-big
+ '((t
+ :foreground "white"
+ :height 700
+ ))
+ "Face for big heartrate."
+ :group 'wasp)
+
+(defface w/heartrate-small
+ '((t
+ :foreground "white"
+ ))
+ "Face for small heartrate disclaimer."
+ :group 'wasp)
+
+(defcustom w/heartrate-buffer "*wasp-heartrate*"
+ "Name of buffer used to display heartrate."
+ :type '(string)
+ :group 'wasp)
+
+(define-derived-mode w/heartrate-mode special-mode "heartrate"
+ "Major mode for displaying heartrate."
+ :group 'w
+ (setq-local cursor-type nil))
+
+(defun w/get-heartrate-buffer ()
+ "Return the heartrate buffer."
+ (unless (get-buffer w/heartrate-buffer)
+ (with-current-buffer (get-buffer-create w/heartrate-buffer)
+ (w/heartrate-mode)))
+ (get-buffer w/heartrate-buffer))
+
+(defun w/render-heartrate ()
+ "Render the heartrate buffer."
+ (with-current-buffer (w/get-heartrate-buffer)
+ (setq-local cursor-type nil)
+ (let* ((inhibit-read-only t))
+ (erase-buffer)
+ (w/write-line (format "%3d bpm" (w/get-heartrate)) 'w/heartrate-big)
+ (w/write (format "arbitrary counter: %s times" w/chat-bpm-count) 'w/heartrate-small))))
+
+(defvar w/heartrate-timer nil)
+(defun w/run-heartrate-timer ()
+ "Run the heartrate timer."
+ (when w/heartrate-timer
+ (cancel-timer w/heartrate-timer))
+ (w/render-heartrate)
+ (setq
+ w/heartrate-timer
+ (run-with-timer 1 nil #'w/run-heartrate-timer)))
+(w/run-heartrate-timer)
+
+(provide 'wasp-heartrate)
+;;; wasp-heartrate.el ends here