diff --git a/etc/init.lisp b/etc/init.lisp index dce78a1..e59b70a 100644 --- a/etc/init.lisp +++ b/etc/init.lisp @@ -445,9 +445,7 @@ (define-key "q" #'gempub-library-window-close *gempub-library-keymap*) -(define-key "C-J" #'gemini-delete-certificate *gemini-certificates-keymap*) - - +(define-key "C-J" #'gempub-open-file *gempub-library-keymap*) ;; tags keymap diff --git a/src/db.lisp b/src/db.lisp index cd9ea92..1c74044 100644 --- a/src/db.lisp +++ b/src/db.lisp @@ -3261,4 +3261,4 @@ days in the past" (query (delete-from +table-gempub-metadata+ (where (:= :local-uri local-uri))))) (defun gempub-metadata-find (local-uri) - (query (select :* (from +table-gempub-metadata+) (where (:= :local-uri local-uri))))) + (fetch-single (select :* (from +table-gempub-metadata+) (where (:= :local-uri local-uri))))) diff --git a/src/gempub.lisp b/src/gempub.lisp index 33b862e..cefdb17 100644 --- a/src/gempub.lisp +++ b/src/gempub.lisp @@ -109,7 +109,7 @@ (zip-info:zip-file-p local-uri))) (push local-uri removed-known) (db:gempub-metadata-delete local-uri)))) - (loop for gempub-file in all-gempub-files do + (loop for gempub-file in (mapcar #'uri:normalize-path all-gempub-files) do (when (not (db:gempub-metadata-find gempub-file)) (push gempub-file added-file) (save-metadata gempub-file))) diff --git a/src/package.lisp b/src/package.lisp index 0a2bd67..08a414f 100644 --- a/src/package.lisp +++ b/src/package.lisp @@ -2682,7 +2682,8 @@ :gempub-library-window-move :gempub-library-window-go-up :gempub-library-window-go-down - :gempub-library-window-close)) + :gempub-library-window-close + :gempub-open-file)) (defpackage :scheduled-events (:use diff --git a/src/program-events.lisp b/src/program-events.lisp index 1c199e7..55929eb 100644 --- a/src/program-events.lisp +++ b/src/program-events.lisp @@ -1133,8 +1133,14 @@ ((zip-info:zip-file-p local-path) (let ((temp-directory (fs:temporary-directory))) (os-utils:unzip-file local-path temp-directory) - (setf (url object) temp-directory) - (push-event object))) + (let* ((library-entry (db:gempub-metadata-find local-path)) + (index-file (and library-entry + (db:row-index-file library-entry)))) + (misc:dbg "ii ~a ~a" local-path index-file) + (if index-file + (setf (url object) (fs:cat-parent-dir temp-directory index-file)) + (setf (url object) temp-directory)) + (push-event object)))) (t (let* ((file-string (fs:slurp-file local-path)) (parent-dir (fs:parent-dir-path local-path)) diff --git a/src/ui-goodies.lisp b/src/ui-goodies.lisp index ddb012f..a0d6941 100644 --- a/src/ui-goodies.lisp +++ b/src/ui-goodies.lisp @@ -2180,3 +2180,9 @@ gemini page the program is rendering." (defun gempub-library-window-close () (close-window-and-return-to-message *gempub-library-window*)) + +(defun gempub-open-file () + "Open the selected gempub." + (when-let* ((fields (line-oriented-window:selected-row-fields *gempub-library-window*)) + (iri-to-open (db:row-local-uri fields))) + (gemini-viewer:load-gemini-url iri-to-open :give-focus-to-message-window t)))