aboutsummaryrefslogtreecommitdiff
path: root/lisp/mastodon-media.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/mastodon-media.el')
-rw-r--r--lisp/mastodon-media.el39
1 files changed, 39 insertions, 0 deletions
diff --git a/lisp/mastodon-media.el b/lisp/mastodon-media.el
index 9dd22f4..ff40633 100644
--- a/lisp/mastodon-media.el
+++ b/lisp/mastodon-media.el
@@ -177,6 +177,45 @@ with the image."
(set-marker marker nil)))
(kill-buffer url-buffer))))))
+(defun mastodon-media--process-full-sized-image-response
+ (status-plist image-options 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 nil))))
+ (when mastodon-media--enable-image-caching
+ (unless (url-is-cached url) ;; cache if not already cached
+ (url-store-in-cache url-buffer)))
+ (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))))))))
+
(defun mastodon-media--load-image-from-url (url media-type start region-length)
"Take a URL and MEDIA-TYPE and load the image asynchronously.
MEDIA-TYPE is a symbol and either `avatar' or `media-link'.