diff options
author | Teddy Wing | 2021-01-24 11:43:41 +0100 |
---|---|---|
committer | Teddy Wing | 2021-01-24 11:43:41 +0100 |
commit | 2154898790426d141ebd3ea1f6eb0adc50542489 (patch) | |
tree | ae5fcae1c8d3ae5da4e1ffe65b501d033f7d5782 | |
parent | 336f3761ab63ac95d12a7699a387b6fee17c852d (diff) | |
download | extreload-2154898790426d141ebd3ea1f6eb0adc50542489.tar.bz2 |
main.lisp: Filter DevTools targets to chosen extensions
Filter a list of extension background page targets.
The extension IDs should come from the command line, but I've hard-coded
the list here.
Increased the `sleep` time to allow time for the messages to be sent &
received before the program exits. Will need to figure out a proper way
to do this later.
-rw-r--r-- | l/src/main.lisp | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/l/src/main.lisp b/l/src/main.lisp index 50acdc3..22cd7f0 100644 --- a/l/src/main.lisp +++ b/l/src/main.lisp @@ -9,7 +9,7 @@ (wsd:send *client* (get-targets-msg 1)) - (sleep 1) + (sleep 5) (wsd:close-connection *client*)) @@ -21,7 +21,10 @@ (defun ws-on-message (message) (let* ((response (jsown:parse message)) (targets (parse-get-targets-response response))) - (format t "~&Got: ~A~%" targets))) + (if targets + (reload-extensions + (extension-targets targets) + '("pacpdcpgfbpkdpmhfaljffnfbdanmblh"))))) (defun parse-get-targets-response (response) (let* ((result (json-obj-get response "result")) @@ -35,3 +38,30 @@ (let ((s (format nil "~A" e))) (if (search "not available" s) nil))))) + +(defun reload-extensions (targets extension-ids) + (labels ((requested-extension-p (target) + (dolist (id extension-ids) + (if (uiop:string-prefix-p + (concatenate 'string "chrome-extension://" id) + (json-obj-get target "url")) + (return-from requested-extension-p t))) + + nil)) + + (filter #'requested-extension-p targets))) + +(defun extension-targets (targets) + (labels ((extensionp (target) + (equal (json-obj-get target "type") + "background_page"))) + + (filter #'extensionp targets))) + +(defun filter (predicate list-form) + (let (newl '()) + (dolist (el list-form) + (if (funcall predicate el) + (push el newl))) + + newl)) |