diff options
| author | Masaya Tojo <masaya@tojo.tokyo> | 2020-07-12 07:49:42 +0900 | 
|---|---|---|
| committer | Masaya Tojo <masaya@tojo.tokyo> | 2020-07-12 07:49:42 +0900 | 
| commit | 779fb2944d85cb11aeefce217f41b0d6d3d3a671 (patch) | |
| tree | e9cee83f64cc12d7dd8540e78ab1b8c23c5e09a5 /qkbox | |
| parent | d8f4c0acbf1eafaa4367f771c2f7d308eff916d4 (diff) | |
qkbox: toot: Display media-attachment (only image type).
Diffstat (limited to 'qkbox')
| -rw-r--r-- | qkbox/toot.scm | 58 | 
1 files changed, 51 insertions, 7 deletions
| diff --git a/qkbox/toot.scm b/qkbox/toot.scm index 025c7a7..6e00c18 100644 --- a/qkbox/toot.scm +++ b/qkbox/toot.scm @@ -134,6 +134,7 @@                                  #:key                                  (port (current-output-port))                                  display-cw? +                                display-sensitive?                                  (display-id? #t))    (let ((status (or (status-reblog status) status))          (status/original status)) @@ -141,7 +142,7 @@        (cond         (else          (format port -                "~s ~a~@?~@?~@?~@?~@?~%~@?" +                "~s ~a~@?~@?~@?~@?~@?~%~@?~@?"                  (status-avatar-pict status/original)                  (account-to-string account)                  "~@[~%  * status-id: ~s~]" @@ -161,7 +162,24 @@                  (and (or (not (status-spoiler-text status))                           display-cw?)                       (content-filter -                      (status-to-content-string status))))))))) +                      (status-to-content-string status))) +                "~{~a~%~}" +                (map (lambda (att) +                       (if (or (not (status-sensitive? status)) +                               display-sensitive?) +                           (case (attachment-type att) +                             ((image) +                              (cond +                               ((fetch-attachment-preview-pict att) +                                => identity) +                               (else +                                "FAILED: IMAGE"))) +                             (else +                              => +                              (lambda (type) +                                (format #f "UNSUPPORTED: ~:@(~a~)" type)))) +                           (format #f "NSFW: ~:@(~a~)" (attachment-type att)))) +                     (status-media-attachments status))))))))  (define (status-avatar-pict status)    (let ((status-pict (or (fetch-avatar-static @@ -190,6 +208,9 @@          #f          (make-status reblog/json)))) +(define-public (status-sensitive? status) +  (assoc-ref (status-json status) "sensitive")) +  (define-public (status-content status)    (assoc-ref (status-json status) "content")) @@ -253,11 +274,30 @@  (define-public (status-emojis status)    (map make-emoji (vector->list (assoc-ref (status-json status) "emojis")))) +(define-record-type <attachment> +  (make-attachment json) +  attachment? +  (json attachment-json)) + +(define (attachment-type attachment) +  (string->symbol (assoc-ref (attachment-json attachment) "type"))) + +(define (attachment-preview-url attachment) +  (assoc-ref (attachment-json attachment) "preview_url")) + +(define (attachment-url attachment) +  (assoc-ref (attachment-json attachment) "url")) + +(define (fetch-attachment-preview-pict attachment) +  (fetch-pict (attachment-preview-url attachment) +              #:height> 128)) + +(define (fetch-attachment-pict attachment) +  (fetch-pict (attachment-url attachment))) +  (define-public (status-media-attachments status)    (let ((v (assoc-ref (status-json status) "media_attachments"))) -    (if (zero? (vector-length v)) -        #f -        (vector->list v)))) +    (map make-attachment (vector->list v))))  (define (status-in-reply-to-id status)    (let ((id (assoc-ref (status-json status) "in_reply_to_id"))) @@ -335,7 +375,7 @@  (define avatar-static-cache (make-hash-table)) -(define* (fetch-pict url #:key resize) +(define* (fetch-pict url #:key resize height>)    (receive (res body)        (http-get url)      (let ((tmp (tmpnam))) @@ -347,9 +387,13 @@           (let ((pict (and (zero? (apply system* "convert"                                          `(,@(and/nil resize                                                       `("-resize" -                                                       ,(format #f "~d!x~d!" +                                                       ,(format #f "~dx~d!"                                                                  (car resize)                                                                  (cadr resize)))) +                                          ,@(and/nil height> +                                                     `("-resize" +                                                       ,(format #f "x~d>" +                                                                height>)))                                            ,(string-append tmp "[0]")                                            ,(string-append "png:" tmp))))                            (pict-from-file tmp)))) | 
