Hack with the sync mode of request.el
This commit is contained in:
parent
097c212b97
commit
5bcb946406
1 changed files with 25 additions and 11 deletions
|
@ -128,17 +128,31 @@ See https://apps.ankiweb.net/docs/manual.html#latex-conflicts.")
|
||||||
(json-array-type 'list)
|
(json-array-type 'list)
|
||||||
reply err)
|
reply err)
|
||||||
|
|
||||||
(request (format "http://%s:%s"
|
(let ((response (request (format "http://%s:%s"
|
||||||
anki-editor-anki-connect-listening-address
|
anki-editor-anki-connect-listening-address
|
||||||
anki-editor-anki-connect-listening-port)
|
anki-editor-anki-connect-listening-port)
|
||||||
:type "POST"
|
:type "POST"
|
||||||
:parser 'json-read
|
:parser 'json-read
|
||||||
:data (encode-coding-string request-body 'utf-8)
|
:data (encode-coding-string request-body 'utf-8)
|
||||||
:success (cl-function (lambda (&key data &allow-other-keys)
|
:success (cl-function (lambda (&key data &allow-other-keys)
|
||||||
(setq reply data)))
|
(setq reply data)))
|
||||||
:error (cl-function (lambda (&key _ &key error-thrown &allow-other-keys)
|
:error (cl-function (lambda (&key _ &key error-thrown &allow-other-keys)
|
||||||
(setq err (string-trim (cdr error-thrown)))))
|
(setq err (string-trim (cdr error-thrown)))))
|
||||||
:sync t)
|
:sync t)))
|
||||||
|
|
||||||
|
;; HACK: I expect the behavior of the sync mode to be that
|
||||||
|
;; callbacks get called before the invocation to `request' ends,
|
||||||
|
;; but it seems not to be the case (or I get it wrong ?) that
|
||||||
|
;; sometimes when the curl process finishes, the
|
||||||
|
;; `request--curl-callback' (the sentinel of the curl process,
|
||||||
|
;; which calls `request--callback', which subsequently calls the
|
||||||
|
;; callbacks) get called after `request--curl-sync' ends. Here I
|
||||||
|
;; check if the `done-p' is nil (which will be set to `t' after
|
||||||
|
;; callbacks have been called) and call `request--curl-callback'
|
||||||
|
;; manually.
|
||||||
|
(unless (request-response-done-p response)
|
||||||
|
(request--curl-callback (get-buffer-process (request-response--buffer response)) "finished\n")))
|
||||||
|
|
||||||
(when err (error "Error communicating with AnkiConnect using cURL: %s" err))
|
(when err (error "Error communicating with AnkiConnect using cURL: %s" err))
|
||||||
(or reply (error "Got empty reply from AnkiConnect"))))
|
(or reply (error "Got empty reply from AnkiConnect"))))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue