diff --git a/src/main/frontend/extensions/pdf/assets.cljs b/src/main/frontend/extensions/pdf/assets.cljs index 442e7e82fa..8ac880d895 100644 --- a/src/main/frontend/extensions/pdf/assets.cljs +++ b/src/main/frontend/extensions/pdf/assets.cljs @@ -147,43 +147,42 @@ (fs/unlink! repo-cur fpath {})))) -(defn resolve-ref-page +(defn ensure-ref-page! [pdf-current] - (let [page-name (:key pdf-current) - page-name (string/trim page-name) - page-name (str "hls__" page-name) - page (db-model/get-page page-name) - file-path (:original-path pdf-current) - format (state/get-preferred-format) - repo-dir (config/get-repo-dir (state/get-current-repo)) - asset-dir (util/node-path.join repo-dir gp-config/local-assets-dir) - url (if (string/includes? file-path asset-dir) - (str ".." (last (string/split file-path repo-dir))) - file-path)] - (if-not page - (let [label (:filename pdf-current)] - (page-handler/create! page-name {:redirect? false :create-first-block? false - :split-namespace? false - :format format - :properties {:file (case format - :markdown - (util/format "[%s](%s)" label url) + (when-let [page-name (util/trim-safe (:key pdf-current))] + (let [page-name (str "hls__" page-name) + page (db-model/get-page page-name) + file-path (:original-path pdf-current) + format (state/get-preferred-format) + repo-dir (config/get-repo-dir (state/get-current-repo)) + asset-dir (util/node-path.join repo-dir gp-config/local-assets-dir) + url (if (string/includes? file-path asset-dir) + (str ".." (last (string/split file-path repo-dir))) + file-path)] + (if-not page + (let [label (:filename pdf-current)] + (page-handler/create! page-name {:redirect? false :create-first-block? false + :split-namespace? false + :format format + :properties {:file (case format + :markdown + (util/format "[%s](%s)" label url) - :org - (util/format "[[%s][%s]]" url label) + :org + (util/format "[[%s][%s]]" url label) - url) - :file-path url}}) - (db-model/get-page page-name)) + url) + :file-path url}}) + (db-model/get-page page-name)) - ;; try to update file path - (page-property/add-property! page-name :file-path url)) - page)) + ;; try to update file path + (page-property/add-property! page-name :file-path url)) + page))) (defn ensure-ref-block! ([pdf hl] (ensure-ref-block! pdf hl nil)) ([pdf-current {:keys [id content page properties]} insert-opts] - (when-let [ref-page (and pdf-current (resolve-ref-page pdf-current))] + (when-let [ref-page (and pdf-current (ensure-ref-page! pdf-current))] (let [ref-block (db-model/query-block-by-uuid id)] (if-not (nil? (:block/content ref-block)) (do diff --git a/src/main/frontend/extensions/pdf/core.cljs b/src/main/frontend/extensions/pdf/core.cljs index d5adc89faf..398d01189f 100644 --- a/src/main/frontend/extensions/pdf/core.cljs +++ b/src/main/frontend/extensions/pdf/core.cljs @@ -848,7 +848,6 @@ (confirm-fn password)))} "Submit"]]]])) - (rum/defc ^:large-vars/data-var pdf-loader [{:keys [url hls-file identity filename] :as pdf-current}] (let [*doc-ref (rum/use-ref nil) @@ -861,6 +860,13 @@ set-hls-extra! (fn [extra] (set-hls-state! #(merge % {:extra extra})))] + ;; current pdf effects + (rum/use-effect! + (fn [] + (when pdf-current + (pdf-assets/ensure-ref-page! pdf-current))) + [pdf-current]) + ;; load highlights (rum/use-effect! (fn [] @@ -888,22 +894,23 @@ ;; cache highlights (let [persist-hls-data! (rum/use-callback - (util/debounce - 4000 (fn [latest-hls extra] - (pdf-assets/persist-hls-data$ - pdf-current latest-hls extra))) [pdf-current])] + (util/debounce + 4000 (fn [latest-hls extra] + (pdf-assets/persist-hls-data$ + pdf-current latest-hls extra))) [pdf-current])] + (rum/use-effect! - (fn [] - (when (= :completed (:status loader-state)) - (p/catch - (when-not (:error hls-state) - (p/do! (persist-hls-data! (:latest-hls hls-state) (:extra hls-state)))) + (fn [] + (when (= :completed (:status loader-state)) + (p/catch + (when-not (:error hls-state) + (p/do! (persist-hls-data! (:latest-hls hls-state) (:extra hls-state)))) - ;; write hls file error - (fn [e] - (js/console.error "[write hls error]" e))))) + ;; write hls file error + (fn [e] + (js/console.error "[write hls error]" e))))) - [(:latest-hls hls-state) (:extra hls-state)])) + [(:latest-hls hls-state) (:extra hls-state)])) ;; load document (rum/use-effect!