|
@@ -5,15 +5,13 @@
|
|
|
[clojure.string :as string]
|
|
|
["fs" :as fs]
|
|
|
["path" :as path]
|
|
|
- ["electron" :refer [BrowserWindow app protocol] :as electron]))
|
|
|
+ ["electron" :refer [BrowserWindow app protocol ipcMain] :as electron]))
|
|
|
|
|
|
(def ROOT_PATH (path/join js/__dirname ".."))
|
|
|
-(def MAIN_WINDOW_ENTRY (str "file://" (path/join js/__dirname (if dev? "dev.html" "index.html"))))
|
|
|
+(def MAIN_WINDOW_ENTRY (str "file://" (path/join js/__dirname (if dev? "electron.html" "index.html"))))
|
|
|
|
|
|
-(def ^:dynamic *setup-fn* nil)
|
|
|
-(def ^:dynamic *teardown-fn* nil)
|
|
|
-(def ^:dynamic *teardown-updater* nil)
|
|
|
-(def ^:dynamic *teardown-interceptor* nil)
|
|
|
+(defonce *setup-fn (volatile! nil))
|
|
|
+(defonce *teardown-fn (volatile! nil))
|
|
|
|
|
|
;; Handle creating/removing shortcuts on Windows when installing/uninstalling.
|
|
|
(when (js/require "electron-squirrel-startup") (.quit app))
|
|
@@ -21,8 +19,10 @@
|
|
|
(defn create-main-window
|
|
|
"create main app window"
|
|
|
[]
|
|
|
- (let [win-opts {:width 980
|
|
|
- :height 700
|
|
|
+ (let [win-opts {:width 980
|
|
|
+ :height 700
|
|
|
+ :frame false
|
|
|
+ :titleBarStyle (if mac? "hidden" nil)
|
|
|
:webPreferences
|
|
|
{:nodeIntegration false
|
|
|
:nodeIntegrationInWorker false
|
|
@@ -35,13 +35,10 @@
|
|
|
win))
|
|
|
|
|
|
(defn setup-updater! [^js win]
|
|
|
- (.. log (info (str "Logseq App(" (.getVersion app) ") Starting... ")))
|
|
|
-
|
|
|
;; manual updater
|
|
|
- (set! *teardown-updater*
|
|
|
- (init-updater {:repo "logseq/logseq"
|
|
|
- :logger log
|
|
|
- :win win})))
|
|
|
+ (init-updater {:repo "logseq/logseq"
|
|
|
+ :logger log
|
|
|
+ :win win}))
|
|
|
|
|
|
(defn setup-interceptor! []
|
|
|
(.registerFileProtocol
|
|
@@ -50,7 +47,31 @@
|
|
|
(let [url (.-url request)
|
|
|
path (string/replace url "assets://" "")]
|
|
|
(callback #js {:path path}))))
|
|
|
- (set! *teardown-interceptor* #(.unregisterProtocol protocol "assets")))
|
|
|
+ #(.unregisterProtocol protocol "assets"))
|
|
|
+
|
|
|
+(defn setup-app-manager!
|
|
|
+ [^js win]
|
|
|
+ (let [toggle-win-channel "toggle-max-or-min-active-win"
|
|
|
+ call-app-channel "call-application"]
|
|
|
+ (doto ipcMain
|
|
|
+ (.handle toggle-win-channel
|
|
|
+ (fn [_ toggle-min?]
|
|
|
+ (when-let [active-win (.getFocusedWindow BrowserWindow)]
|
|
|
+ (if toggle-min?
|
|
|
+ (if (.isMinimized active-win)
|
|
|
+ (.restore active-win)
|
|
|
+ (.minimize active-win))
|
|
|
+ (if (.isMaximized active-win)
|
|
|
+ (.unmaximize active-win)
|
|
|
+ (.maximize active-win))))))
|
|
|
+ (.handle call-app-channel
|
|
|
+ (fn [_ type & args]
|
|
|
+ (try
|
|
|
+ (js-invoke app type args)
|
|
|
+ (catch js/Error e
|
|
|
+ (js/console.error e))))))
|
|
|
+ #(do (.removeHandler ipcMain toggle-win-channel)
|
|
|
+ (.removeHandler ipcMain call-app-channel))))
|
|
|
|
|
|
(defn main
|
|
|
[]
|
|
@@ -61,22 +82,21 @@
|
|
|
*win (atom win)
|
|
|
*quitting? (atom false)]
|
|
|
|
|
|
- (set! *setup-fn*
|
|
|
- (fn []
|
|
|
- ;; updater
|
|
|
- (setup-updater! win)
|
|
|
- (setup-interceptor!)
|
|
|
+ (.. log (info (str "Logseq App(" (.getVersion app) ") Starting... ")))
|
|
|
|
|
|
- ;; handler
|
|
|
- (handler/set-ipc-handler! win)
|
|
|
+ (vreset! *setup-fn
|
|
|
+ (fn []
|
|
|
+ (let [t0 (setup-updater! win)
|
|
|
+ t1 (setup-interceptor!)
|
|
|
+ t2 (setup-app-manager! win)
|
|
|
+ tt (handler/set-ipc-handler! win)]
|
|
|
|
|
|
- ;; teardown
|
|
|
- #(do
|
|
|
- (when *teardown-updater* (*teardown-updater*))
|
|
|
- (when *teardown-interceptor* (*teardown-interceptor*)))))
|
|
|
+ (vreset! *teardown-fn
|
|
|
+ #(doseq [f [t0 t1 t2 tt]]
|
|
|
+ (and f (f)))))))
|
|
|
|
|
|
;; setup effects
|
|
|
- (*setup-fn*)
|
|
|
+ (@*setup-fn)
|
|
|
|
|
|
;; main window events
|
|
|
(.on win "close" #(if (or @*quitting? win32?)
|
|
@@ -88,8 +108,8 @@
|
|
|
|
|
|
(defn start []
|
|
|
(js/console.log "Main - start")
|
|
|
- (when *setup-fn* (*setup-fn*)))
|
|
|
+ (when @*setup-fn (@*setup-fn)))
|
|
|
|
|
|
(defn stop []
|
|
|
(js/console.log "Main - stop")
|
|
|
- (when *teardown-fn* (*teardown-fn*)))
|
|
|
+ (when @*teardown-fn (@*teardown-fn)))
|