|
|
@@ -173,26 +173,25 @@
|
|
|
(defrecord ^:large-vars/cleanup-todo Nfs []
|
|
|
protocol/Fs
|
|
|
(mkdir! [_this dir]
|
|
|
- (let [parts (->> (string/split dir "/")
|
|
|
- (remove string/blank?))
|
|
|
- root (->> (butlast parts)
|
|
|
- util/string-join-path)
|
|
|
- new-dir (last parts)
|
|
|
- root-handle (str "handle/" root)]
|
|
|
- (->
|
|
|
- (p/let [handle (idb/get-item root-handle)
|
|
|
- _ (when handle (verify-handle-permission handle true))]
|
|
|
- (when (and handle new-dir
|
|
|
- (not (string/blank? new-dir)))
|
|
|
- (p/let [handle (.getDirectoryHandle ^js handle new-dir
|
|
|
- #js {:create true})
|
|
|
- handle-path (str root-handle "/" new-dir)
|
|
|
- _ (idb/set-item! handle-path handle)]
|
|
|
- (add-nfs-file-handle! handle-path handle)
|
|
|
- (println "Stored handle: " (str root-handle "/" new-dir)))))
|
|
|
- (p/catch (fn [error]
|
|
|
- (js/console.debug "mkdir error: " error ", dir: " dir)
|
|
|
- (throw error))))))
|
|
|
+ (prn ::mkdir dir)
|
|
|
+ (let [dir (fs2-path/path-normalize dir)
|
|
|
+ parent-dir (fs2-path/parent dir)
|
|
|
+
|
|
|
+ parent-handle-path (str "handle/" parent-dir)]
|
|
|
+ (-> (p/let [parent-handle (or (get-nfs-file-handle parent-handle-path)
|
|
|
+ (idb/get-item parent-handle-path))
|
|
|
+ _ (when parent-handle (verify-handle-permission parent-handle true))]
|
|
|
+ (when parent-handle
|
|
|
+ (p/let [new-dir-name (fs2-path/filename dir)
|
|
|
+ new-handle (.getDirectoryHandle ^js parent-handle new-dir-name
|
|
|
+ #js {:create true})
|
|
|
+ handle-path (str "handle/" dir)
|
|
|
+ _ (idb/set-item! handle-path new-handle)]
|
|
|
+ (add-nfs-file-handle! handle-path new-handle)
|
|
|
+ (println "dir created: " dir))))
|
|
|
+ (p/catch (fn [error]
|
|
|
+ (js/console.debug "mkdir error: " error ", dir: " dir)
|
|
|
+ (throw error))))))
|
|
|
|
|
|
(readdir [_this dir]
|
|
|
;; This method is only used for repo-dir and version-files dir
|
|
|
@@ -205,34 +204,40 @@
|
|
|
_ (when handle
|
|
|
(verify-handle-permission handle true))
|
|
|
fpaths (if (string/includes? dir "/")
|
|
|
- (js/console.error "ERROR: unimpl")
|
|
|
- (readdir-and-reload-all-handles dir handle))]
|
|
|
+ (js/console.error "ERROR: unimpl")
|
|
|
+ (readdir-and-reload-all-handles dir handle))]
|
|
|
fpaths))
|
|
|
|
|
|
- (unlink! [this repo path _opts]
|
|
|
- (let [[dir basename] (util/get-dir-and-basename path)
|
|
|
- handle-path (str "handle" path)]
|
|
|
+ (unlink! [this repo fpath _opts]
|
|
|
+ (let [repo-dir (config/get-repo-dir repo)
|
|
|
+
|
|
|
+ filename (fs2-path/filename fpath)
|
|
|
+ ;; [dir basename] (util/get-dir-and-basename path)
|
|
|
+ handle-path (str "handle/" fpath)
|
|
|
+ recycle-dir (fs2-path/path-join repo-dir config/app-name config/recycle-dir)]
|
|
|
(->
|
|
|
- (p/let [recycle-dir (str "/" repo (util/format "/%s/%s" config/app-name config/recycle-dir))
|
|
|
- _ (protocol/mkdir! this recycle-dir)
|
|
|
- handle (idb/get-item handle-path)
|
|
|
+ (p/let [_ (protocol/mkdir! this recycle-dir)
|
|
|
+ handle (get-nfs-file-handle handle-path)
|
|
|
file (.getFile handle)
|
|
|
content (.text file)
|
|
|
- handle (idb/get-item (str "handle" dir))
|
|
|
- _ (idb/remove-item! handle-path)
|
|
|
- file-name (-> (string/replace path (str "/" repo "/") "")
|
|
|
- (string/replace "/" "_")
|
|
|
- (string/replace "\\" "_"))
|
|
|
- new-path (str recycle-dir "/" file-name)
|
|
|
- _ (protocol/write-file! this repo
|
|
|
- "/"
|
|
|
- new-path
|
|
|
- content nil)]
|
|
|
- (when handle
|
|
|
- (.removeEntry ^js handle basename))
|
|
|
+
|
|
|
+ bak-handle (get-nfs-file-handle (str "handle/" recycle-dir))
|
|
|
+ bak-filename (-> (fs2-path/relative-path repo-dir fpath)
|
|
|
+ (string/replace "/" "_")
|
|
|
+ (string/replace "\\" "_"))
|
|
|
+ _ (prn ::backup-file bak-filename)
|
|
|
+ file-handle (.getFileHandle ^js bak-handle bak-filename #js {:create true})
|
|
|
+ _ (utils/writeFile file-handle content)
|
|
|
+
|
|
|
+ parent-dir (fs2-path/parent fpath)
|
|
|
+ parent-handle (get-nfs-file-handle (str "handle/" parent-dir))
|
|
|
+
|
|
|
+ _ (when parent-handle
|
|
|
+ (.removeEntry ^js parent-handle filename))]
|
|
|
+ (idb/remove-item! handle-path)
|
|
|
(remove-nfs-file-handle! handle-path))
|
|
|
(p/catch (fn [error]
|
|
|
- (log/error :unlink/path {:path path
|
|
|
+ (log/error :unlink/path {:path fpath
|
|
|
:error error}))))))
|
|
|
|
|
|
(rmdir! [_this _dir]
|