mirror of https://github.com/logseq/logseq
Write files works
parent
ee12e58254
commit
580763844b
|
@ -0,0 +1,26 @@
|
|||
(ns frontend.handler.worker
|
||||
(:require [cljs-bean.core :as bean]
|
||||
[frontend.handler.file :as file-handler]
|
||||
[frontend.handler.notification :as notification]
|
||||
[clojure.edn :as edn]))
|
||||
|
||||
(defmulti handle identity)
|
||||
|
||||
(defmethod handle :write-files [_ {:keys [repo files]}]
|
||||
(file-handler/alter-files repo files {}))
|
||||
|
||||
(defmethod handle :notification [_ data]
|
||||
(apply notification/show! (edn/read-string data)))
|
||||
|
||||
(defmethod handle :default [_ data]
|
||||
(prn :debug "Worker data not handled: " data))
|
||||
|
||||
(defn handle-message!
|
||||
[^js worker]
|
||||
(assert worker "worker doesn't exists")
|
||||
(set! (.-onmessage worker)
|
||||
(fn [event]
|
||||
(let [data (.-data event)]
|
||||
(when-not (= (.-type data) "RAW")
|
||||
(let [[e payload] (bean/->clj data)]
|
||||
(handle (keyword e) payload)))))))
|
|
@ -12,7 +12,8 @@
|
|||
[frontend.state :as state]
|
||||
[electron.ipc :as ipc]
|
||||
[frontend.modules.outliner.datascript :as outliner-db]
|
||||
[clojure.edn :as edn]))
|
||||
[clojure.edn :as edn]
|
||||
[frontend.handler.worker :as worker-handler]))
|
||||
|
||||
(defonce *sqlite (atom nil))
|
||||
|
||||
|
@ -31,6 +32,7 @@
|
|||
"/static/js/db-worker.js")
|
||||
worker (js/Worker. (str worker-url "?electron=" (util/electron?)))
|
||||
sqlite (Comlink/wrap worker)]
|
||||
(worker-handler/handle-message! worker)
|
||||
(reset! *sqlite sqlite)
|
||||
(-> (p/let [_ (.init sqlite)]
|
||||
(ask-persist-permission!))
|
||||
|
|
|
@ -11,7 +11,8 @@
|
|||
[datascript.core :as d]
|
||||
[logseq.db :as ldb]
|
||||
[malli.core :as m]
|
||||
[frontend.worker.state :as state]))
|
||||
[frontend.worker.state :as state]
|
||||
[goog.object :as gobj]))
|
||||
|
||||
(defonce file-writes-chan
|
||||
(let [coercer (m/coercer [:catn
|
||||
|
@ -81,12 +82,12 @@
|
|||
(doseq [[repo page-id outliner-op] (set (map #(take 3 %) pages))] ; remove time to dedupe pages to write
|
||||
(try (do-write-file! repo conn page-id outliner-op context)
|
||||
(catch :default e
|
||||
;; FIXME: notification
|
||||
;; (notification/show!
|
||||
;; [:div
|
||||
;; [:p "Write file failed, please copy the changes to other editors in case of losing data."]
|
||||
;; "Error: " (str (gobj/get e "stack"))]
|
||||
;; :error)
|
||||
(worker-util/post-message :notification
|
||||
(pr-str
|
||||
[[:div
|
||||
[:p "Write file failed, please copy the changes to other editors in case of losing data."]
|
||||
"Error: " (str (gobj/get e "stack"))]
|
||||
:error]))
|
||||
(log/error :file/write-file-error {:error e}))))))
|
||||
|
||||
(defn sync-to-file
|
||||
|
@ -94,7 +95,6 @@
|
|||
(when (and repo page-id
|
||||
(not (:created-from-journal-template? tx-meta))
|
||||
(not (:delete-files? tx-meta)))
|
||||
(prn :debug :sync-to-file :repo repo :page-id page-id)
|
||||
(async/put! file-writes-chan [repo page-id (:outliner-op tx-meta) (tc/to-long (t/now))])))
|
||||
|
||||
(defn <ratelimit-file-writes!
|
||||
|
|
|
@ -5,7 +5,8 @@
|
|||
[logseq.common.path :as path]
|
||||
[datascript.core :as d]
|
||||
[logseq.db :as ldb]
|
||||
[frontend.worker.date :as worker-date]))
|
||||
[frontend.worker.date :as worker-date]
|
||||
[frontend.worker.util :as util]))
|
||||
|
||||
(defn- indented-block-content
|
||||
[content spaces-tabs]
|
||||
|
@ -149,10 +150,8 @@
|
|||
(tree->file-content repo db tree {:init-level init-level} context))]
|
||||
(when-not (and (string/blank? new-content) (not blocks-just-deleted?))
|
||||
(let [files [[file-path new-content]]]
|
||||
(prn :debug :write-file :file-path file-path :content new-content)
|
||||
;; TODO: send files to main thread to save
|
||||
;; (file-handler/alter-files-handler! repo files {} {})
|
||||
)))
|
||||
(when (seq files)
|
||||
(util/post-message :write-files {:repo repo :files files})))))
|
||||
;; In e2e tests, "card" page in db has no :file/path
|
||||
(js/console.error "File path from page-block is not valid" page-block tree))))
|
||||
|
||||
|
|
|
@ -9,7 +9,8 @@
|
|||
[clojure.core.async :as async]
|
||||
[cljs.core.async.impl.channels :refer [ManyToManyChannel]]
|
||||
[cljs-time.coerce :as tc]
|
||||
[cljs-time.core :as t]))
|
||||
[cljs-time.core :as t]
|
||||
[cljs-bean.core :as bean]))
|
||||
|
||||
(defonce db-version-prefix "logseq_db_")
|
||||
(defonce local-db-prefix "logseq_local_")
|
||||
|
@ -136,3 +137,7 @@
|
|||
(defn time-ms
|
||||
[]
|
||||
(tc/to-long (t/now)))
|
||||
|
||||
(defn post-message
|
||||
[type data]
|
||||
(.postMessage js/self (bean/->js [type data])))
|
||||
|
|
Loading…
Reference in New Issue