mirror of https://github.com/logseq/logseq
feat(electron): copy file when upload asset
parent
25c7726331
commit
6b61a3c762
|
@ -1,3 +1,5 @@
|
|||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const { ipcRenderer, contextBridge, shell } = require('electron')
|
||||
|
||||
contextBridge.exposeInMainWorld('apis', {
|
||||
|
@ -6,8 +8,8 @@ contextBridge.exposeInMainWorld('apis', {
|
|||
},
|
||||
|
||||
on: (channel, callback) => {
|
||||
const newCallback = (_, data) => callback(data);
|
||||
ipcRenderer.on(channel, newCallback);
|
||||
const newCallback = (_, data) => callback(data)
|
||||
ipcRenderer.on(channel, newCallback)
|
||||
},
|
||||
|
||||
checkForUpdates: async (...args) => {
|
||||
|
@ -28,5 +30,21 @@ contextBridge.exposeInMainWorld('apis', {
|
|||
|
||||
async openExternal (url, options) {
|
||||
await shell.openExternal(url, options)
|
||||
},
|
||||
|
||||
async copyFileToAssets (repoPathRoot, to, from) {
|
||||
if (fs.statSync(from).isDirectory()) {
|
||||
throw new Error('not support copy directory')
|
||||
}
|
||||
|
||||
const dest = path.join(repoPathRoot, to)
|
||||
const assetsRoot = path.dirname(dest)
|
||||
|
||||
if (!/assets$/.test(assetsRoot)) {
|
||||
throw new Error('illegal assets dirname')
|
||||
}
|
||||
|
||||
await fs.promises.mkdir(assetsRoot, { recursive: true })
|
||||
await fs.promises.copyFile(from, dest)
|
||||
}
|
||||
})
|
||||
|
|
|
@ -226,7 +226,7 @@
|
|||
(let [src (::src state)
|
||||
granted? (state/sub [:nfs/user-granted? (state/get-current-repo)])]
|
||||
|
||||
(when granted?
|
||||
(when (or granted? (util/electron?))
|
||||
(p/then (editor-handler/make-asset-url href) #(reset! src %)))
|
||||
|
||||
(when @src
|
||||
|
|
|
@ -1552,21 +1552,30 @@
|
|||
(when-let [block-file (db-model/get-block-file block-id)]
|
||||
(p/let [[repo-dir assets-dir] (ensure-assets-dir! repo)]
|
||||
(let [prefix (:file/path block-file)
|
||||
prefix (and prefix (string/replace prefix "/" "_"))
|
||||
prefix (and prefix (string/replace
|
||||
(if (util/electron?)
|
||||
(string/replace prefix (str repo-dir "/") "")
|
||||
prefix) "/" "_"))
|
||||
prefix (and prefix (subs prefix 0 (string/last-index-of prefix ".")))]
|
||||
(save-assets! repo repo-dir assets-dir files
|
||||
(fn [index]
|
||||
(str prefix "_" (.now js/Date) "_" index)))))))
|
||||
([repo dir path files gen-filename]
|
||||
(p/all
|
||||
(for [[index file] (map-indexed vector files)]
|
||||
(for [[index ^js file] (map-indexed vector files)]
|
||||
(let [ext (.-name file)
|
||||
ext (if ext (subs ext (string/last-index-of ext ".")) "")
|
||||
filename (str (gen-filename index file) ext)
|
||||
filename (str path "/" filename)]
|
||||
;(js/console.debug "Write asset #" filename file)
|
||||
(p/then (fs/write-file! repo dir filename (.stream file) nil)
|
||||
#(p/resolved [filename file])))))))
|
||||
(js/console.debug "Write asset #" dir filename file)
|
||||
(if (util/electron?)
|
||||
(let [from (.-path file)]
|
||||
(if (string/blank? from)
|
||||
(throw (js/Error. "TODO: can not resolved From file path"))
|
||||
(p/then (js/window.apis.copyFileToAssets dir filename from)
|
||||
#(p/resolved [filename file]))))
|
||||
(p/then (fs/write-file! repo dir filename (.stream file) nil)
|
||||
#(p/resolved [filename file]))))))))
|
||||
|
||||
(defonce *assets-url-cache (atom {}))
|
||||
|
||||
|
|
Loading…
Reference in New Issue