mirror of
https://github.com/logseq/logseq.git
synced 2026-04-29 08:26:40 +00:00
Also, removed idle? check when batch writing. Removed nil marker to stop the core.async loop too.
53 lines
2.4 KiB
Clojure
53 lines
2.4 KiB
Clojure
(ns frontend.debug
|
|
(:require [cljs.pprint :as pprint]
|
|
[frontend.state :as state]
|
|
[frontend.util :as util]
|
|
[frontend.state :as state]
|
|
[frontend.handler.notification :as notification]))
|
|
|
|
(defn pprint
|
|
[& xs]
|
|
(when (state/developer-mode?)
|
|
(doseq [x xs]
|
|
(pprint/pprint x))))
|
|
|
|
(defonce ack-wait-timeouts (atom {}))
|
|
|
|
(defonce default-write-ack-timeout 10000)
|
|
|
|
;; For debugging file changes are not saved on disk.
|
|
(defn wait-for-write-ack!
|
|
[page-title file-path]
|
|
(when file-path
|
|
(let [requested-at (util/time-ms)]
|
|
(state/set-state! [:debug/write-acks file-path :last-requested-at] requested-at)
|
|
(when-let [timeout (get @ack-wait-timeouts file-path)]
|
|
(js/clearTimeout timeout))
|
|
(let [timeout (js/setTimeout (fn []
|
|
(let [last-ack-at (get-in @state/state [:debug/write-acks file-path :last-ack-at])]
|
|
(when-not (and last-ack-at
|
|
(< requested-at last-ack-at (+ requested-at default-write-ack-timeout)))
|
|
(let [step (get-in @state/state [:debug/write-acks file-path :step])]
|
|
(state/pub-event! [:instrument {:type :debug/write-failed
|
|
:payload {:step step}}])
|
|
(notification/show!
|
|
(str "Logseq failed to save the page "
|
|
page-title
|
|
" to the file: "
|
|
file-path
|
|
". Stop editing this page anymore, and copy all the blocks of this page to another editor to avoid any data-loss.\n"
|
|
"Last step: "
|
|
step)
|
|
:error)))))
|
|
default-write-ack-timeout)]
|
|
(swap! ack-wait-timeouts assoc file-path timeout)))))
|
|
|
|
(defn ack-file-write!
|
|
[file-path]
|
|
(let [ack-at (util/time-ms)]
|
|
(state/set-state! [:debug/write-acks file-path :last-ack-at] ack-at)))
|
|
|
|
(defn set-ack-step!
|
|
[file-path step]
|
|
(state/set-state! [:debug/write-acks file-path :step] step))
|