fix: addresses ipc errors in general

This commit is contained in:
Tienson Qin
2026-04-30 01:22:34 +08:00
parent e750c79e34
commit 72822bc720
2 changed files with 14 additions and 23 deletions

View File

@@ -514,29 +514,21 @@
(string? command) command
:else nil)))
(defn- <encode-main-ipc-result
[result]
(if (or (p/promise? result)
(instance? js/Promise result))
(p/let [result' result]
(sqlite-util/write-transit-str result'))
(sqlite-util/write-transit-str result)))
(defn set-ipc-handler! [window]
(let [main-channel "main"]
(.handle ipcMain main-channel
(fn [^js event args-js]
(let [message* (volatile! nil)]
(try
(let [message (decode-main-ipc-message args-js)
_ (vreset! message* message)
result (handle (or (utils/get-win-from-sender event) window) message)]
(<encode-main-ipc-result result))
(catch :default e
(let [command (command-name @message*)]
(when-not (contains? #{"mkdir" "stat"} command)
(logger/error "IPC error: " {:event event
:args args-js}
e)))
e)))))
(->
(p/let [message (decode-main-ipc-message args-js)
_ (vreset! message* message)
result (handle (or (utils/get-win-from-sender event) window) message)]
(sqlite-util/write-transit-str result))
(p/catch (fn [e]
(let [command (command-name @message*)]
(when-not (contains? #{"mkdir" "stat"} command)
(logger/error "IPC error: " {:event event
:args args-js}
e)))
(throw e)))))))
#(.removeHandler ipcMain main-channel)))

View File

@@ -11,13 +11,12 @@
(sqlite-util/read-transit-str result)
result))
;; TODO: handle errors
(defn ipc
[& args]
(when (util/electron?)
(p/let [payload (sqlite-util/write-transit-str (vec args))
result (js/window.apis.doAction payload)]
(maybe-read-transit result))))
maybe-result-str (js/window.apis.doAction payload)]
(maybe-read-transit maybe-result-str))))
(defn invoke
[channel & args]