diff --git a/deps/db/src/logseq/db/frontend/property.cljs b/deps/db/src/logseq/db/frontend/property.cljs index 4a4ee3999a..de44213480 100644 --- a/deps/db/src/logseq/db/frontend/property.cljs +++ b/deps/db/src/logseq/db/frontend/property.cljs @@ -537,6 +537,11 @@ :hide? true :public? false} :queryable? false} + :logseq.property.asset/external-props {:title "External properties" + :schema {:type :map + :hide? true + :public? false} + :queryable? false} :logseq.property.asset/size {:title "File Size" :schema {:type :raw-number :hide? true diff --git a/deps/graph-parser/src/logseq/graph_parser/exporter.cljs b/deps/graph-parser/src/logseq/graph_parser/exporter.cljs index 9fff2ce110..f56611d731 100644 --- a/deps/graph-parser/src/logseq/graph_parser/exporter.cljs +++ b/deps/graph-parser/src/logseq/graph_parser/exporter.cljs @@ -1205,7 +1205,8 @@ :logseq.property.asset/size (:size asset-data)} (when-let [external-url (:external-url asset-data)] {:logseq.property.asset/external-url external-url - :logseq.property.asset/external-file-name (:external-file-name asset-data)}))) + :logseq.property.asset/external-file-name (:external-file-name asset-data) + :logseq.property.asset/external-props (:external-props asset-data)}))) (defn- get-asset-block-id [assets path] @@ -1295,6 +1296,10 @@ :else path) asset-link-or-name (or link asset-name) asset-data* (when asset-link-or-name (get @assets asset-link-or-name)) + external-props (when zotero-asset? + (if linked-path + {:zotero-linked-file linked-relative} + {:zotero-imported-file (string/join ns-util/namespace-char [(last (string/split link #"/")) asset-name])})) _ (when (and asset-link-or-name (not asset-data*) (string/ends-with? path ".pdf") @@ -1308,7 +1313,8 @@ :checksum "0000000000000000000000000000000000000000000000000000000000000000" :size (.-size stat) :external-url (or link path) - :external-file-name asset-name})) + :external-file-name asset-name + :external-props external-props})) (p/catch (fn [error] (js/console.error error))))) asset-data (when asset-link-or-name (get @assets asset-link-or-name))] @@ -1323,14 +1329,15 @@ {:asset-name-uuid [asset-link-or-name (:asset-id asset-data)]} :else - (let [new-asset (merge (build-new-asset asset-data) - {:block/title (db-asset/asset-name->title (node-path/basename asset-name)) - :block/uuid (get-asset-block-id assets asset-link-or-name)} - (when-let [metadata (not-empty (common-util/safe-read-map-string (:metadata (second asset-link))))] - {:logseq.property.asset/resize-metadata metadata})) - pdf-annotations-tx (when (= "pdf" (path/file-ext asset-link-or-name)) - (build-pdf-annotations-tx asset-link-or-name assets new-asset pdf-annotation-pages opts)) - asset-tx (concat [new-asset] pdf-annotations-tx)] + (let [new-asset (merge (build-new-asset asset-data) + {:block/title (db-asset/asset-name->title (node-path/basename asset-name)) + :block/uuid (get-asset-block-id assets asset-link-or-name)} + (when-let [metadata (not-empty (common-util/safe-read-map-string (:metadata (second asset-link))))] + {:logseq.property.asset/resize-metadata metadata})) + pdf-annotations-path (or asset-name asset-link-or-name) + pdf-annotations-tx (when (= "pdf" (path/file-ext pdf-annotations-path)) + (build-pdf-annotations-tx pdf-annotations-path assets new-asset pdf-annotation-pages opts)) + asset-tx (concat [new-asset] pdf-annotations-tx)] ;; (prn :asset-added! (node-path/basename asset-name)) ;; (cljs.pprint/pprint asset-link) ;; (prn :debug :asset-tx asset-tx) diff --git a/src/main/frontend/extensions/pdf/assets.cljs b/src/main/frontend/extensions/pdf/assets.cljs index bf0be32bde..694373f2c5 100644 --- a/src/main/frontend/extensions/pdf/assets.cljs +++ b/src/main/frontend/extensions/pdf/assets.cljs @@ -198,12 +198,24 @@ (ref/->block-ref (:block/uuid ref-block)) :owner-window (pdf-windows/resolve-own-window viewer))))) +(defn- get-zotero-local-pdf-path + [{:keys [zotero-linked-file zotero-imported-file]}] + (let [zotero-config (get-in (state/sub-config) [:zotero/settings-v2 "default"]) + zotero-data-directory (:zotero-data-directory zotero-config) + zotero-linked-attachment-base-directory (:zotero-linked-attachment-base-directory zotero-config)] + (if zotero-linked-file + (str zotero-linked-attachment-base-directory "/" zotero-linked-file) + (str zotero-data-directory "/storage/" zotero-imported-file)))) + (defn db-based-open-block-ref! [block] (let [hl-value (:logseq.property.pdf/hl-value block) asset (:logseq.property/asset block) external-url (:logseq.property.asset/external-url asset) - file-path (or external-url (str "../assets/" (:block/uuid asset) ".pdf"))] + file-path (or external-url (str "../assets/" (:block/uuid asset) ".pdf")) + file-path (if (string/starts-with? file-path "zotero://") + (get-zotero-local-pdf-path (:logseq.property.asset/external-props asset)) + file-path)] (if asset (-> (p/let [href (assets-handler/updates)))]