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)) | 
