summaryrefslogtreecommitdiff
path: root/src/gizmo/wasp-shindaggers.el
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2024-09-13 13:52:38 -0400
committerLLLL Colonq <llll@colonq>2024-09-13 13:52:38 -0400
commitd93ab7e848bf0f4bc1087504eecd7c959d19bf6c (patch)
treef4f1806ceb56d2a68c9641313000f9a50fa77d78 /src/gizmo/wasp-shindaggers.el
parentcc3ccebbd3af825f5e4866532906f1a7a2756518 (diff)
Update :3
Diffstat (limited to 'src/gizmo/wasp-shindaggers.el')
-rw-r--r--src/gizmo/wasp-shindaggers.el77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/gizmo/wasp-shindaggers.el b/src/gizmo/wasp-shindaggers.el
new file mode 100644
index 00000000..9ced5e98
--- /dev/null
+++ b/src/gizmo/wasp-shindaggers.el
@@ -0,0 +1,77 @@
+;;; wasp-shindaggers --- Shindaggers interface -*- lexical-binding: t; -*-
+;;; Commentary:
+;;; Code:
+
+(require 'dash)
+(require 's)
+(require 'f)
+(require 'ht)
+(require 'rx)
+(require 'cl-lib)
+(require 'request)
+(require 'dom)
+(require 'wasp-user)
+
+(defcustom w/shindaggers-server "https://shindaggers.io"
+ "Server URL for Shindaggers."
+ :type '(string)
+ :group 'wasp)
+
+(defvar w/shindaggers-last-response nil)
+
+(defun w/shindaggers-get (loc k)
+ "Get LOC from Shindaggers, passing the returned HTML to K."
+ (setf request-message-level -1)
+ (request
+ (s-concat w/shindaggers-server loc)
+ :type "GET"
+ :headers
+ `(("Content-Type" . "application/json"))
+ :parser #'json-parse-buffer
+ :success
+ (cl-function
+ (lambda (&key data &allow-other-keys)
+ (setq w/shindaggers-last-response data)
+ (funcall k data))))
+ t)
+
+(defun w/shindaggers-get-user-id (user k)
+ "Retrieve the Shindaggers user number for USER and pass it to K."
+ (let ((duser (s-downcase user)))
+ (w/shindaggers-get
+ (s-concat "/api/users?search=" duser)
+ (lambda (p)
+ (let ((res
+ (car
+ (--filter
+ (s-equals? (s-downcase (ht-get it "name")) duser)
+ (seq-into (ht-get p "Users") 'list)))))
+ (funcall k (and res (string-to-number (ht-get res "id")))))))))
+
+(defun w/shindaggers-get-collection (userid k)
+ "Retrieve the Shindaggers collection for USERID and pass it to K."
+ (w/shindaggers-get
+ (format "/api/user/%s/collection" userid)
+ (lambda (p)
+ (funcall
+ k
+ (--map (ht-get it "name") (ht-get p "Collectables"))))))
+
+(defvar w/shindaggers-user-cache nil)
+(defun w/shindaggers-update-user (user)
+ "Update USER data from Shindaggers."
+ (unless (-contains? w/shindaggers-user-cache user)
+ (add-to-list 'w/shindaggers-user-cache user)
+ (w/shindaggers-get-user-id
+ user
+ (lambda (userid)
+ (w/shindaggers-get-collection
+ userid
+ (lambda (knives)
+ (w/user-bind
+ user
+ (lambda ()
+ (setf (alist-get :shindaggers-knives w/user-current) knives)))))))))
+
+(provide 'wasp-shindaggers)
+;;; wasp-shindaggers.el ends here