From 94a401140c1dc5bee7c296d2872439c267c83219 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Tue, 21 Dec 2021 22:49:24 +0800 Subject: [PATCH] fix: graph unlink is not executed on all the windows --- src/electron/electron/handler.cljs | 4 ++++ src/electron/electron/utils.cljs | 10 ++++++---- src/main/electron/listener.cljs | 6 ++++++ src/main/frontend/handler/repo.cljs | 13 ++++++++----- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/electron/electron/handler.cljs b/src/electron/electron/handler.cljs index 503969f3f..624ebe802 100644 --- a/src/electron/electron/handler.cljs +++ b/src/electron/electron/handler.cljs @@ -319,6 +319,10 @@ (defmethod handle :quitAndInstall [] (.quitAndInstall autoUpdater)) +(defmethod handle :graphUnlinked [^js win [_ repo]] + (doseq [window (win/get-all-windows)] + (utils/send-to-renderer window "graphUnlinked" (bean/->clj repo)))) + (defmethod handle :default [args] (println "Error: no ipc handler for: " (bean/->js args))) diff --git a/src/electron/electron/utils.cljs b/src/electron/electron/utils.cljs index 2e96ed5a6..61e016083 100644 --- a/src/electron/electron/utils.cljs +++ b/src/electron/electron/utils.cljs @@ -77,7 +77,9 @@ (.getFocusedWindow BrowserWindow)) (defn send-to-renderer - [kind payload] - (when-let [window (get-focused-window)] - (.. ^js window -webContents - (send kind (bean/->js payload))))) + ([kind payload] + (send-to-renderer (get-focused-window) kind payload)) + ([window kind payload] + (when window + (.. ^js window -webContents + (send kind (bean/->js payload)))))) diff --git a/src/main/electron/listener.cljs b/src/main/electron/listener.cljs index f1b83b13e..382a89dfa 100644 --- a/src/main/electron/listener.cljs +++ b/src/main/electron/listener.cljs @@ -8,6 +8,7 @@ [electron.ipc :as ipc] [frontend.handler.notification :as notification] [frontend.handler.metadata :as metadata-handler] + [frontend.handler.repo :as repo-handler] [frontend.ui :as ui] [frontend.db.persist :as db-persist])) @@ -59,6 +60,11 @@ comp [:div (str payload)]] (notification/show! comp type false)))) + (js/window.apis.on "graphUnlinked" + (fn [data] + (let [repo (bean/->clj data)] + (repo-handler/remove-repo! repo)))) + (js/window.apis.on "setGitUsernameAndEmail" (fn [] (state/pub-event! [:modal/set-git-username-and-email]))) diff --git a/src/main/frontend/handler/repo.cljs b/src/main/frontend/handler/repo.cljs index 1dd5275cc..a435fc274 100644 --- a/src/main/frontend/handler/repo.cljs +++ b/src/main/frontend/handler/repo.cljs @@ -30,7 +30,8 @@ [shadow.resource :as rc] [clojure.set :as set] [frontend.mobile.util :as mobile] - [frontend.db.persist :as db-persist])) + [frontend.db.persist :as db-persist] + [electron.ipc :as ipc])) ;; Project settings should be checked in two situations: ;; 1. User changes the config.edn directly in logseq.com (fn: alter-file) @@ -537,10 +538,12 @@ [{:keys [id url] :as repo}] ;; (spec/validate :repos/repo repo) (let [delete-db-f (fn [] - (db/remove-conn! url) - (db-persist/delete-graph! url) - (search/remove-db! url) - (state/delete-repo! repo))] + (let [graph-exists? (db/get-conn url)] + (db/remove-conn! url) + (db-persist/delete-graph! url) + (search/remove-db! url) + (state/delete-repo! repo) + (when graph-exists? (ipc/ipc "graphUnlinked" repo))))] (if (or (config/local-db? url) (= url "local")) (p/let [_ (idb/clear-local-db! url)] ; clear file handles (delete-db-f))