diff options
-rw-r--r-- | elisp/delivery-track.el | 70 |
1 files changed, 33 insertions, 37 deletions
diff --git a/elisp/delivery-track.el b/elisp/delivery-track.el index 809e1f2..e38c285 100644 --- a/elisp/delivery-track.el +++ b/elisp/delivery-track.el @@ -58,17 +58,25 @@ buffer (funcall provider-parser (json-parse-buffer)))) -(defun delivery-track--dhl-de (track-id buffer callback) - "Async request to API using TRACK-ID and process with CALLBACK. -It writes into the org-node in BUFFER." - (let* ((url-request-method "GET") - (params `((piececode ,track-id) - ("noRedirect" true) - (language "en")))) - (thread-first - "https://www.dhl.de/int-verfolgen/data/search?" - (concat (url-build-query-string params)) - (url-retrieve callback (list buffer))))) +(defun delivery-track-entry--dhl (response) + "Parse DHL RESPONSE into standard delivery-track info for writer." + (let* ((shipment-info (seq-find + (lambda (item) + (eq t (gethash "hasCompleteDetails" item))) + (gethash "sendungen" response))) + (history (thread-last + shipment-info + (gethash "sendungsdetails") + (gethash "sendungsverlauf")))) + (list + (gethash "id" shipment-info) + (gethash "kurzStatus" history) + (thread-last + (gethash "events" history) + (seq-keep (lambda (event) + (when-let ((time (gethash "datum" event))) + (list time (gethash "status" event))))) + (reverse))))) (defun delivery-track-entry--hermes (response) "Parse hermes RESPONSE into standard delivery-track info for writer." @@ -82,6 +90,19 @@ It writes into the org-node in BUFFER." (list time (gethash "statusHistoryText" event))))) (reverse)))) +(defun delivery-track--dhl-de (track-id) + "Async request to dhl API using TRACK-ID. +Write update on the org-node in current buffer." + (let* ((url-request-method "GET") + (params `((piececode ,track-id) + ("noRedirect" true) + (language "en")))) + (thread-first + "https://www.dhl.de/int-verfolgen/data/search?" + (concat (url-build-query-string params)) + (url-retrieve #'delivery-track--process-response + (list (current-buffer) #'delivery-track-entry--dhl))))) + (defun delivery-track--hermes-de (track-id) "Async request to hermes API using TRACK-ID. Write update on the org-node in current buffer." @@ -94,31 +115,6 @@ Write update on the org-node in current buffer." (url-retrieve #'delivery-track--process-response (list (current-buffer) #'delivery-track-entry--hermes))))) - -(defun delivery-track-entry--dhl (_request-status buffer) - "Parse response from DHL and write in in BUFFER." - (goto-char url-http-end-of-headers) - (let* ((shipment-info (thread-last - (json-parse-buffer) - (gethash "sendungen") - (seq-find - (lambda (item) - (eq t (gethash "hasCompleteDetails" item)))))) - (history (thread-last - shipment-info - (gethash "sendungsdetails") - (gethash "sendungsverlauf")))) - (delivery-track-org-entry - buffer - (gethash "id" shipment-info) - (gethash "kurzStatus" history) - (thread-last - (gethash "events" history) - (seq-keep (lambda (event) - (when-let ((time (gethash "datum" event))) - (list time (gethash "status" event))))) - (reverse))))) - (defun delivery-track-update (track-id provider) "Update tracking information for TRACK-ID under PROVIDER. Interactive defaults to current buffer's org-node id and provider properties." @@ -126,7 +122,7 @@ Interactive defaults to current buffer's org-node id and provider properties." (completing-read "Which service provider? " '(dhl hermes) nil t (org-entry-get nil "provider")))) (pcase provider - ("dhl" (delivery-track--dhl-de track-id (current-buffer) #'delivery-track-entry--dhl)) + ("dhl" (delivery-track--dhl-de track-id )) ("hermes" (delivery-track--hermes-de track-id)))) |