Bläddra i källkod

fix: share text or picture doesn't work if the app has been closed

Tienson Qin 3 månader sedan
förälder
incheckning
f137da94f6

+ 1 - 0
src/main/frontend/handler.cljs

@@ -179,6 +179,7 @@
                   (js/console.error "Error while restoring repos: " e)))
        (p/finally (fn []
                     (state/set-db-restoring! false)
+                    (p/resolve! state/db-worker-ready-promise true)
                     (when-not (util/mobile?)
                       (p/let [webgpu-available? (db-browser/<check-webgpu-available?)]
                         (log/info :webgpu-available? webgpu-available?)

+ 0 - 3
src/main/frontend/handler/events.cljs

@@ -183,9 +183,6 @@
   (let [db-based? (config/db-based-graph? repo)]
     (p/do!
      (state/pub-event! [:graph/sync-context])
-    ;; re-render-root is async and delegated to rum, so we need to wait for main ui to refresh
-     (when (util/mobile?)
-       (state/pub-event! [:mobile/post-init]))
      ;; FIXME: an ugly implementation for redirecting to page on new window is restored
      (repo-handler/graph-ready! repo)
      (when-not config/publishing?

+ 2 - 1
src/main/frontend/modules/shortcut/config.cljs

@@ -525,7 +525,8 @@
    :ui/toggle-document-mode                 {:binding "t d"
                                              :fn      state/toggle-document-mode!}
 
-   :ui/highlight-recent-blocks              {:fn      state/toggle-highlight-recent-blocks!}
+   :ui/highlight-recent-blocks              {:binding "mod+c mod+r"
+                                             :fn      state/toggle-highlight-recent-blocks!}
 
    :ui/toggle-settings                      {:binding (if mac? ["t s" "mod+,"] "t s")
                                              :fn      ui-handler/toggle-settings-modal!}

+ 1 - 0
src/main/frontend/state.cljs

@@ -34,6 +34,7 @@
 (defonce *db-worker (atom nil))
 (defonce *db-worker-client-id (atom nil))
 (defonce *editor-info (atom nil))
+(defonce db-worker-ready-promise (p/deferred))
 
 (def db-worker-ready-flow
   "`<invoke-db-worker` throws err if `*db-worker` not ready yet.

+ 4 - 0
src/main/mobile/components/app.css

@@ -325,6 +325,10 @@ ul {
   &:has(.ls-quick-add) {
     @apply min-h-[80vh] max-h-[90vh] overflow-y-auto overflow-x-hidden;
   }
+
+  .ls-debug-log {
+    @apply h-[80vh] overflow-y-auto overflow-x-hidden pb-8;
+  }
 }
 
 /* silk styles */

+ 3 - 2
src/main/mobile/components/header.cljs

@@ -86,7 +86,7 @@
   (let [log-str (mobile-state/log->str)
         [error-only? set-error-only!] (hooks/use-state false)
         [reversed? set-reversed!] (hooks/use-state false)]
-    [:div.flex.flex-col.gap-1.p-2.overflow-y-scroll
+    [:div.flex.flex-col.gap-1.p-2.ls-debug-log
      [:div.flex.flex-row.justify-between
       [:div.text-lg.font-medium.mb-2 "Full log: "]
 
@@ -116,7 +116,7 @@
 
      (let [records (cond->> @mobile-state/*log
                      error-only?
-                     (filter (fn [record] (= (:level record) :error)))
+                     (filter (fn [record] (contains? #{:error :severe} (:level record))))
                      reversed?
                      reverse)]
        (when (seq records)
@@ -158,6 +158,7 @@
                                         (shui/tabler-icon "bug" {:class "opacity-70" :size 22})
                                         "Report bug"])
                          (ui/menu-link {:on-click (fn []
+                                                    (mobile-state/set-popup! nil)
                                                     (mobile-state/set-popup!
                                                      {:open? true
                                                       :content-fn (fn [] (log))}))}

+ 1 - 9
src/main/mobile/events.cljs

@@ -2,15 +2,7 @@
   "Mobile events"
   (:require [frontend.components.quick-add :as quick-add]
             [frontend.handler.events :as events]
-            [mobile.init :as init]
-            [mobile.state :as mobile-state]
-            [promesa.core :as p]))
-
-;; TODO: move more events here
-(defmethod events/handle :mobile/post-init [_]
-  (p/do!
-   (p/delay 1000)
-   (init/mobile-post-init)))
+            [mobile.state :as mobile-state]))
 
 (defmethod events/handle :dialog/mobile-quick-add [_]
   (mobile-state/set-popup! {:open? true

+ 11 - 17
src/main/mobile/init.cljs

@@ -10,26 +10,18 @@
             [frontend.mobile.util :as mobile-util]
             [frontend.state :as state]
             [frontend.util :as util]
+            [lambdaisland.glogi :as log]
             [logseq.shui.dialog.core :as shui-dialog]
             [mobile.components.ui :as cc-ui]
             [mobile.state :as mobile-state]
             [promesa.core :as p]))
 
-(def *init-url (atom nil))
 ;; FIXME: `appUrlOpen` are fired twice when receiving a same intent.
 ;; The following two variable atoms are used to compare whether
 ;; they are from the same intent share.
 (def *last-shared-url (atom nil))
 (def *last-shared-seconds (atom 0))
 
-(defn mobile-post-init
-  "postinit logic of mobile platforms: handle deeplink and intent"
-  []
-  (when (mobile-util/native-ios?)
-    (when @*init-url
-      (deeplink/deeplink @*init-url)
-      (reset! *init-url nil))))
-
 (defn- ios-init
   "Initialize iOS-specified event listeners"
   []
@@ -94,14 +86,16 @@
   []
   (.addListener App "appUrlOpen"
                 (fn [^js data]
-                  (when-let [url (.-url data)]
-                    (if-not (= (.-readyState js/document) "complete")
-                      (reset! *init-url url)
-                      (when-not (and (= @*last-shared-url url)
-                                     (<= (- (.getSeconds (js/Date.)) @*last-shared-seconds) 1))
-                        (reset! *last-shared-url url)
-                        (reset! *last-shared-seconds (.getSeconds (js/Date.)))
-                        (deeplink/deeplink url))))))
+                  (log/info ::app-url-open data)
+                  (p/then
+                   state/db-worker-ready-promise
+                   (fn []
+                     (when-let [url (.-url data)]
+                       (when-not (and (= @*last-shared-url url)
+                                      (<= (- (.getSeconds (js/Date.)) @*last-shared-seconds) 1))
+                         (reset! *last-shared-url url)
+                         (reset! *last-shared-seconds (.getSeconds (js/Date.)))
+                         (deeplink/deeplink url)))))))
 
   (.addListener Keyboard "keyboardWillShow"
                 (fn [^js info]