aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--emacs/.emacs.d/lisp/my/belf.el69
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")