Selaa lähdekoodia

fix: readdir with path-only? option

Tienson Qin 3 vuotta sitten
vanhempi
sitoutus
91ceae48e4

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

@@ -53,8 +53,12 @@
   (protocol/mkdir-recur! (get-fs dir) dir))
   (protocol/mkdir-recur! (get-fs dir) dir))
 
 
 (defn readdir
 (defn readdir
-  [dir]
-  (protocol/readdir (get-fs dir) dir))
+  [dir & {:keys [path-only?]}]
+  (p/let [result (protocol/readdir (get-fs dir) dir)
+          result (bean/->clj result)]
+    (if (and path-only? (map? (first result)))
+      (map :uri result)
+      result)))
 
 
 (defn unlink!
 (defn unlink!
   "Should move the path to logseq/recycle instead of deleting it."
   "Should move the path to logseq/recycle instead of deleting it."

+ 14 - 11
src/main/frontend/fs/capacitor_fs.cljs

@@ -125,12 +125,14 @@
 (defn- truncate-old-versioned-files!
 (defn- truncate-old-versioned-files!
   "reserve the latest 6 version files"
   "reserve the latest 6 version files"
   [dir]
   [dir]
-  (p/let [files (readdir dir)
-          files (js->clj files :keywordize-keys true)
-          old-versioned-files (drop 6 (reverse (sort-by :mtime files)))]
-    (mapv (fn [file]
-            (.deleteFile Filesystem (clj->js {:path (:uri file)})))
-          old-versioned-files)))
+  (->
+   (p/let [files (readdir dir)
+           files (js->clj files :keywordize-keys true)
+           old-versioned-files (drop 6 (reverse (sort-by :mtime files)))]
+     (mapv (fn [file]
+             (.deleteFile Filesystem (clj->js {:path (:uri file)})))
+           old-versioned-files))
+   (p/catch (fn [_]))))
 
 
 ;; TODO: move this to FS protocol
 ;; TODO: move this to FS protocol
 (defn backup-file
 (defn backup-file
@@ -139,13 +141,14 @@
   :version-file-dir = `version-file-dir`"
   :version-file-dir = `version-file-dir`"
   [repo dir path content]
   [repo dir path content]
   {:pre [(contains? #{:backup-dir :version-file-dir} dir)]}
   {:pre [(contains? #{:backup-dir :version-file-dir} dir)]}
-  (let [ext (util/get-file-ext path)
+  (let [repo-dir (config/get-local-dir repo)
+        ext (util/get-file-ext path)
         dir (case dir
         dir (case dir
-               :backup-dir (get-backup-dir repo path backup-dir ext)
-               :version-file-dir (get-backup-dir repo path version-file-dir ext))
-        new-path (util/safe-path-join dir (str (string/replace (.toISOString (js/Date.)) ":" "_") "." ext))]
+              :backup-dir (get-backup-dir repo-dir path backup-dir ext)
+              :version-file-dir (get-backup-dir repo-dir path version-file-dir ext))
+        new-path (util/safe-path-join dir (str (string/replace (.toISOString (js/Date.)) ":" "_") "." (mobile-util/platform) "." ext))]
     (<write-file-with-utf8 new-path content)
     (<write-file-with-utf8 new-path content)
-    (truncate-old-versioned-files! backup-dir)))
+    (truncate-old-versioned-files! dir)))
 
 
 (defn backup-file-handle-changed!
 (defn backup-file-handle-changed!
   [repo-dir file-path content]
   [repo-dir file-path content]

+ 3 - 11
src/main/frontend/handler/file_sync.cljs

@@ -131,17 +131,9 @@
                                      (#(js->clj % :keywordize-keys true))
                                      (#(js->clj % :keywordize-keys true))
                                      ((juxt :dir :name))
                                      ((juxt :dir :name))
                                      (apply path/join base-path))
                                      (apply path/join base-path))
-            version-file-paths* (<! (p->c (fs/readdir version-files-dir)))]
-        (when-not (instance? ExceptionInfo version-file-paths*)
-          (let [version-file-paths
-                (filterv
-                 ;; filter dir
-                 (fn [dir-or-file]
-                   (-> (path/parse dir-or-file)
-                       (js->clj :keywordize-keys true)
-                       :ext
-                       seq))
-                 (js->clj (<! (p->c (fs/readdir version-files-dir)))))]
+            version-file-paths (<! (p->c (fs/readdir version-files-dir :path-only? true)))]
+        (when-not (instance? ExceptionInfo version-file-paths)
+          (when (seq version-file-paths)
             (mapv
             (mapv
              (fn [path]
              (fn [path]
                (let [create-time
                (let [create-time