Weihua Lu 4 лет назад
Родитель
Сommit
ecb16cca03
1 измененных файлов с 62 добавлено и 0 удалено
  1. 62 0
      src/main/frontend/fs/capacitor_fs.cljs

+ 62 - 0
src/main/frontend/fs/capacitor_fs.cljs

@@ -0,0 +1,62 @@
+(ns frontend.fs.capacitor-fs
+  (:require [frontend.fs.protocol :as protocol]
+            [lambdaisland.glogi :as log]
+            ["@capacitor/filesystem" :refer [Filesystem Directory Encoding]]
+            [promesa.core :as p]))
+
+(defrecord Capacitorfs []
+  protocol/Fs
+  (mkdir! [this dir]
+    (p/let [result (.mkdir Filesystem
+                      (clj->js
+                       {:path dir
+                        :directory (.-ExternalStorage Directory)}))]
+      (js/console.log result)))
+  (mkdir-recur! [this dir]
+    (p/let [result (.mkdir Filesystem
+                           (clj->js
+                            {:path dir
+                             :directory (.-ExternalStorage Directory)
+                             :recursive true}))]
+      (js/console.log result)))
+  (readdir [this dir]                   ; recursive
+    nil)
+  (unlink! [this repo path _opts]
+    nil)
+  (rmdir! [this dir]
+    ;; Too dangerious!!! We'll never implement this.
+    nil)
+  (read-file [this dir path _options]
+    (let [path (str dir path)]
+      (p/let [content (.readFile Filesystem
+                              (clj->js
+                               {:path path
+                                :directory (.-ExternalStorage Directory)
+                                :encoding (.-UTF8 Encoding)}))]
+        content)))
+  (write-file! [this repo dir path content {:keys [ok-handler error-handler] :as opts}]
+    (let [path (str dir path)]
+      (p/catch
+          (p/let [result (.writeFile Filesystem
+                                     (clj->js
+                                      {:path path
+                                       :data content
+                                       :directory (.-ExternalStorage Directory)
+                                       :encoding (.-UTF8 Encoding)
+                                       :recursive true}))]
+            (when ok-handler
+              (ok-handler repo path result)))
+          (fn [error]
+            (if error-handler
+              (error-handler error)
+              (log/error :write-file-failed error))))))
+  (rename! [this repo old-path new-path]
+    nil)
+  (stat [this dir path]
+    nil)
+  (open-dir [this ok-handler]
+    nil)
+  (get-files [this path-or-handle ok-handler]
+    nil)
+  (watch-dir! [this dir]
+    nil))