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") |