diff options
Diffstat (limited to 'emacs/.emacs.d/lisp/my')
| -rw-r--r-- | emacs/.emacs.d/lisp/my/belf.el | 69 | 
1 files changed, 25 insertions, 44 deletions
| diff --git a/emacs/.emacs.d/lisp/my/belf.el b/emacs/.emacs.d/lisp/my/belf.el index 829ebcb..0e7a557 100644 --- a/emacs/.emacs.d/lisp/my/belf.el +++ b/emacs/.emacs.d/lisp/my/belf.el @@ -102,9 +102,12 @@  (defun belf-epub-content-file-name (file-name)    (with-temp-buffer -    (call-process "unzip" nil t nil "-p" file-name "META-INF/container.xml") -    (let ((dom (libxml-parse-xml-region (point-min) (point-max)))) -      (dom-attr (dom-by-tag (dom-by-tag (dom-by-tag dom 'container) 'rootfiles) 'rootfile) 'full-path)))) +    (if (eq 0 (call-process "unzip" nil t nil +                            "-p" file-name "META-INF/container.xml")) +        (let ((dom (libxml-parse-xml-region (point-min) (point-max)))) +          (dom-attr (dom-by-tag (dom-by-tag (dom-by-tag dom 'container) 'rootfiles) 'rootfile) 'full-path)) +      (message "Failed to extract container.xml: %s" (buffer-string)) +      nil)))  (defun belf-epub-cover-file-name (file-name content-file-name)    (with-temp-buffer @@ -115,7 +118,8 @@             (items              (dom-by-tag (dom-by-tag (dom-by-tag dom 'package) 'manifest) 'item))             cover-name -           cover-file) +           cover-file +           cover-file-from-prop)        (while (and metas (not cover-name))          (let-alist (cadr (car metas))            (when (equal .name "cover") @@ -124,11 +128,19 @@        (while (and items (not cover-file))          (let-alist (cadr (car items))            (when (equal .id cover-name) -            (setq cover-file .href))) +            (setq cover-file .href)) +          (when (equal .properties "cover-image") +            (setq cover-file-from-prop .href)))          (setq items (cdr items)))        (cond (cover-file               (file-name-concat (file-name-directory content-file-name)                                 cover-file)) +            (cover-file-from-prop +             (file-name-concat (file-name-directory content-file-name) +                               cover-file-from-prop)) +            ((not cover-name) +             (message "Could not find cover in epub metadata.") +             nil)              ;; If no cover-file, then try cover-name if it looks like              ;; an image file path              ((string-match-p belf-book-cover-re cover-name) @@ -159,47 +171,15 @@ For EPUB, looks for a cover image in the file. If not found, extract the first p    (when-let ((cover-file-name (belf-locate-book-cover file-name)))      (concat "file://" cover-file-name))    (when (equal "epub" (file-name-extension file-name)) -    (let* ((content-file-name (belf-epub-content-file-name file-name)) -           (cover-file -            (belf-epub-cover-file-name file-name content-file-name)) -           (cover-file-name (file-name-with-extension -                             file-name -                             (file-name-extension cover-file)))) +    (when-let* ((content-file-name (belf-epub-content-file-name file-name)) +                (cover-file +                 (belf-epub-cover-file-name file-name content-file-name)) +                (cover-file-name (file-name-with-extension +                                  file-name +                                  (file-name-extension cover-file))))        (call-process "unzip" nil `(:file ,cover-file-name) nil                      "-p" file-name cover-file)        (concat "file://" cover-file-name))) -  ;; (with-temp-buffer -  ;;   (let ((content-file-name)) -  ;;     (call-process "unzip" nil t nil "-p" file-name content-file-name) -  ;;     (let* ((dom (libxml-parse-xml-region (point-min) (point-max))) -  ;;            (metas -  ;;             (dom-by-tag (dom-by-tag (dom-by-tag dom 'package) 'metadata) 'meta)) -  ;;            (items -  ;;             (dom-by-tag (dom-by-tag (dom-by-tag dom 'package) 'manifest) 'item)) -  ;;            cover-name -  ;;            cover-file -  ;;            cover-file-name) -  ;;       (while (and (cdr metas) (not cover-name)) -  ;;         (let-alist (cadr (car metas)) -  ;;           (when (equal .name "cover") -  ;;             (setq cover-name .content))) -  ;;         (setq metas (cdr metas))) -  ;;       (while (and (cdr items) (not cover-file)) -  ;;         (let-alist (cadr (car items)) -  ;;           (when (equal .id cover-name) -  ;;             (setq cover-file .href))) -  ;;         (setq items (cdr items))) -  ;;       (when cover-file -  ;;         (setq cover-file -  ;;               (concat (or (file-name-directory content-file-name) "") -  ;;                       cover-file))) -  ;;       (setq cover-file-name -  ;;             (file-name-with-extension -  ;;              file-name -  ;;              (file-name-extension cover-file))) -  ;;       (call-process "unzip" nil `(:file ,cover-file-name) nil -  ;;                     "-p" file-name cover-file) -  ;;       (concat "file://" cover-file-name))))    )  (defun belf-book-infobox-at-point () @@ -221,7 +201,8 @@ For EPUB, looks for a cover image in the file. If not found, extract the first p          (alist-get 'Description info)          (when-let ((text (alist-get 'Description info)))            (with-temp-buffer -            (insert text) +            (insert +             (if (stringp text) text (prin1-to-string text)))              (shr-render-region (point-min) (point-max))              (goto-char (point-min))              (insert "\n") | 
