diff options
| author | marty hiatt <martianhiatus@riseup.net> | 2024-03-13 09:26:33 +0100 | 
|---|---|---|
| committer | marty hiatt <martianhiatus@riseup.net> | 2024-03-13 09:26:33 +0100 | 
| commit | 7d0a20ac0ca871eff153cb7bc0e0ceda24a4858f (patch) | |
| tree | f4ea1fb15e90dc2955dc2f4233a464e794a42c14 /lisp/mastodon-media.el | |
| parent | 4e19f18a1a6d5bd60673013751b4332be0ea445c (diff) | |
media: rewrite process-full-sized-image-response
Diffstat (limited to 'lisp/mastodon-media.el')
| -rw-r--r-- | lisp/mastodon-media.el | 52 | 
1 files changed, 19 insertions, 33 deletions
| diff --git a/lisp/mastodon-media.el b/lisp/mastodon-media.el index eaa9718..0014a44 100644 --- a/lisp/mastodon-media.el +++ b/lisp/mastodon-media.el @@ -34,6 +34,7 @@  ;;; Code:  (require 'url-cache) +(require 'mm-decode)  (autoload 'mastodon-tl--propertize-img-str-or-url "mastodon-tl") @@ -177,44 +178,29 @@ with the image."                (set-marker marker nil)))            (kill-buffer url-buffer)))))) -(defun mastodon-media--process-full-sized-image-response -    (status-plist image-options url) +(defun mastodon-media--process-full-sized-image-response (status-plist url)    ;; FIXME: refactor this with but not into    ;; `mastodon-media--process-image-response'.    "Callback function processing the `url-retrieve' response for URL.  URL is a full-sized image URL attached to a timeline image. -STATUS-PLIST is a plist of status events as per `url-retrieve'. -IMAGE-OPTIONS are the precomputed options to apply to the image." -  (let ((url-buffer (current-buffer)) -        (is-error-response-p (eq :error (car status-plist)))) -    (let* ((data (unless is-error-response-p -                   (goto-char (point-min)) -                   (search-forward "\n\n") -                   (buffer-substring (point) (point-max)))) -           (image (when data -                    (apply #'create-image data -                           (if (version< emacs-version "27.1") -                               (when image-options 'imagemagick) -                             nil) ; inbuilt scaling in 27.1 -                           t `(:max-width ,(window-pixel-width)))))) -      (when mastodon-media--enable-image-caching -        (unless (url-is-cached url) ;; cache if not already cached -          (url-store-in-cache url-buffer))) +STATUS-PLIST is a plist of status events as per `url-retrieve'." +  (if-let (error-response (plist-get status-plist :error)) +      (message "error in loading image: %S" error-response) +    (when mastodon-media--enable-image-caching +      (unless (url-is-cached url) ;; cache if not already cached +        (url-store-in-cache))) +    (let* ((handle (mm-dissect-buffer t)) +           (image (mm-get-image handle)) +           (str (image-property image :data))) +      (setf (image-property image :max-width) +            (window-pixel-width))        (with-current-buffer (get-buffer-create "*masto-image*") -        (let ((inhibit-read-only t)) -          (erase-buffer) -          (insert " ") -          (when image -            (add-text-properties (point-min) (point-max) -                                 `( display ,image -                                    keymap ,(if (boundp 'shr-image-map) -                                                shr-image-map -                                              shr-map) -                                    image-url ,url -                                    shr-url ,url)) -            (image-mode) -            (goto-char (point-min)) -            (switch-to-buffer-other-window (current-buffer)))))))) +        (erase-buffer) +        (insert-image image str) +        (special-mode) ; prevent image-mode loop bug +        (image-mode) +        (goto-char (point-min)) +        (switch-to-buffer-other-window (current-buffer))))))  (defun mastodon-media--load-image-from-url (url media-type start region-length)    "Take a URL and MEDIA-TYPE and load the image asynchronously. | 
