浏览代码

refactor: db content backup

Andelf 3 年之前
父节点
当前提交
9146dad0a4
共有 3 个文件被更改,包括 23 次插入12 次删除
  1. 2 2
      src/main/frontend/fs/capacitor_fs.cljs
  2. 5 10
      src/main/frontend/fs/watcher_handler.cljs
  3. 16 0
      src/main/frontend/handler/file.cljs

+ 2 - 2
src/main/frontend/fs/capacitor_fs.cljs

@@ -143,7 +143,7 @@
         backup-dir-parent (util/node-path.dirname file-path)
         backup-dir-parent (string/replace backup-dir-parent repo-dir "")
         backup-dir-name (util/node-path.name file-path)
-        file-extname (util/node-path.extname file-path)
+        file-extname (.extname util/node-path file-path)
         file-root (util/safe-path-join backup-root backup-dir-parent backup-dir-name)
         file-path (util/safe-path-join file-root
                                        (str (string/replace (.toISOString (js/Date.)) ":" "_") "." (mobile-util/platform) file-extname))]
@@ -282,7 +282,7 @@
                    (string/replace-first path "file://" "")
                    path)
             repo-dir (config/get-local-dir repo)
-            recycle-dir (str repo-dir config/app-name "/.recycle")
+            recycle-dir (str repo-dir config/app-name "/.recycle") ;; logseq/.recycle
             file-name (-> (string/replace path repo-dir "")
                           (string/replace "/" "_")
                           (string/replace "\\" "_"))

+ 5 - 10
src/main/frontend/fs/watcher_handler.cljs

@@ -1,7 +1,6 @@
 (ns frontend.fs.watcher-handler
   (:require [clojure.string :as string]
             [frontend.config :as config]
-            [frontend.util :as util]
             [frontend.db :as db]
             [frontend.db.model :as model]
             [frontend.handler.editor :as editor]
@@ -12,12 +11,10 @@
             [logseq.graph-parser.util :as gp-util]
             [logseq.graph-parser.util.block-ref :as block-ref]
             [lambdaisland.glogi :as log]
-            [electron.ipc :as ipc]
             [promesa.core :as p]
             [frontend.state :as state]
             [frontend.encrypt :as encrypt]
-            [frontend.fs :as fs]
-            [frontend.fs.capacitor-fs :as capacitor-fs]))
+            [frontend.fs :as fs]))
 
 ;; all IPC paths must be normalized! (via gp-util/path-normalize)
 
@@ -37,12 +34,10 @@
   [repo path content db-content mtime backup?]
   (p/let [
           ;; save the previous content in a versioned bak file to avoid data overwritten.
-          _ (-> (when-let [repo-dir (and backup? (config/get-local-dir repo))]
-                  (prn "⚠️Bak File: " path)
-                  (if (util/electron?)
-                    (ipc/ipc "backupDbFile" repo-dir path db-content content)
-                    (capacitor-fs/backup-file-handle-changed! repo-dir path db-content)))
-                (p/catch #(js/console.error "❌ Bak Error: " path %)))
+          _ (when backup?
+              (-> (when-let [repo-dir (config/get-local-dir repo)]
+                    (file-handler/backup-file! repo-dir path db-content content))
+                  (p/catch #(js/console.error "❌ Bak Error: " path %))))
 
           _ (file-handler/alter-file repo path content {:re-render-root? true
                                                         :from-disk? true})]

+ 16 - 0
src/main/frontend/handler/file.cljs

@@ -8,11 +8,13 @@
             [frontend.db :as db]
             [frontend.fs :as fs]
             [frontend.fs.nfs :as nfs]
+            [frontend.fs.capacitor-fs :as capacitor-fs]
             [frontend.handler.common :as common-handler]
             [frontend.handler.ui :as ui-handler]
             [frontend.state :as state]
             [frontend.util :as util]
             [logseq.graph-parser.util :as gp-util]
+            [electron.ipc :as ipc]
             [lambdaisland.glogi :as log]
             [promesa.core :as p]
             [frontend.mobile.util :as mobile]
@@ -80,6 +82,20 @@
                    (log/error :nfs/load-files-error repo-url)
                    (log/error :exception error))))))
 
+(defn backup-file!
+  "Backup db content to bak directory"
+  [repo-url path db-content content]
+  (prn ::debug repo-url)
+  (cond
+    (util/electron?)
+    (ipc/ipc "backupDbFile" repo-url path db-content content)
+
+    (or (mobile/native-ios?) (mobile/native-android?))
+    (capacitor-fs/backup-file-handle-changed! repo-url path db-content)
+
+    :else
+    nil))
+
 (defn- page-exists-in-another-file
   "Conflict of files towards same page"
   [repo-url page file]