فهرست منبع

debug: add Check log for mobile

Tienson Qin 1 ماه پیش
والد
کامیت
1a3b26c0bf
4فایلهای تغییر یافته به همراه69 افزوده شده و 3 حذف شده
  1. 1 1
      src/main/frontend/db/transact.cljs
  2. 51 1
      src/main/mobile/components/header.cljs
  3. 5 0
      src/main/mobile/core.cljs
  4. 12 1
      src/main/mobile/state.cljs

+ 1 - 1
src/main/frontend/db/transact.cljs

@@ -48,7 +48,7 @@
         (let [result (<? (p->c (request)))]
           (if (:ex-data result)
             (do
-              (js/console.error (:ex-message result) (:ex-data result))
+              (log/error :worker-request-failed result)
               (p/reject! response result)
               (capture-error result))
             (p/resolve! response result))

+ 51 - 1
src/main/mobile/components/header.cljs

@@ -13,6 +13,7 @@
             [frontend.util :as util]
             [goog.date :as gdate]
             [logseq.db :as ldb]
+            [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [mobile.components.ui :as ui-component]
             [mobile.components.ui-silk :as ui-silk]
@@ -80,6 +81,49 @@
    [:span.mt-2
     (shui/tabler-icon "menu" {:size 24})]))
 
+(rum/defc log
+  []
+  (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-row.justify-between
+      [:div.text-lg.font-medium.mb-2 "Full log: "]
+
+      (shui/button
+       {:variant :ghost
+        :size :sm
+        :on-click (fn []
+                    (util/copy-to-clipboard! log-str))}
+       "Copy")]
+
+     [:div.flex.flex-row.gap-2
+      (shui/button
+       {:size :sm
+        :on-click (fn []
+                    (set-error-only! (not error-only?)))}
+       (if error-only?
+         "Show all"
+         "Show errors only"))
+
+      (shui/button
+       {:size :sm
+        :on-click (fn []
+                    (set-reversed! (not reversed?)))}
+       (if reversed?
+         "New record first"
+         "Old record first"))]
+
+     (let [records (cond->> @mobile-state/*log
+                     error-only?
+                     (filter (fn [record] (= (:level record) :error)))
+                     reversed?
+                     reverse)]
+       (when (seq records)
+         [:ul
+          (for [record records]
+            [:li (str record)])]))]))
+
 (rum/defc header
   [tab login?]
   (ui-silk/app-silk-topbar
@@ -112,7 +156,13 @@
                          (ui/menu-link {:on-click #(js/window.open "https://github.com/logseq/db-test/issues")}
                                        [:span.text-lg.flex.gap-2.items-center
                                         (shui/tabler-icon "bug" {:class "opacity-70" :size 22})
-                                        "Report bug"])])
+                                        "Report bug"])
+                         (ui/menu-link {:on-click (fn []
+                                                    (mobile-state/set-popup!
+                                                     {:open? true
+                                                      :content-fn (fn [] (log))}))}
+                                       [:span.text-lg.flex.gap-2.items-center
+                                        "Check log"])])
                       {:title "Actions"
                        :default-height false
                        :type :action-sheet}))}

+ 5 - 0
src/main/mobile/core.cljs

@@ -1,6 +1,7 @@
 (ns mobile.core
   "Mobile core"
   (:require ["react-dom/client" :as rdc]
+            [clojure.string :as string]
             [frontend.background-tasks]
             [frontend.components.imports :as imports]
             [frontend.db.async :as db-async]
@@ -8,6 +9,7 @@
             [frontend.handler.db-based.rtc-background-tasks]
             [frontend.state :as state]
             [frontend.util :as util]
+            [lambdaisland.glogi :as log]
             [logseq.shui.ui :as shui]
             [mobile.components.app :as app]
             [mobile.events]
@@ -73,6 +75,9 @@
    ;; set to false to enable HistoryAPI
    {:use-fragment true}))
 
+(log/add-handler (fn [record]
+                   (mobile-state/log-append! record)))
+
 (defn ^:export init []
   ;; init is called ONCE when the page loads
   ;; this is called in the index.html and must be exported

+ 12 - 1
src/main/mobile/state.cljs

@@ -1,6 +1,7 @@
 (ns mobile.state
   "Mobile state"
-  (:require [frontend.rum :as r]))
+  (:require [clojure.string :as string]
+            [frontend.rum :as r]))
 
 (defonce *tab (atom "home"))
 (defn set-tab! [tab] (reset! *tab tab))
@@ -49,3 +50,13 @@
 
 (defn redirect-to-tab! [name]
   (set-tab! (str name)))
+
+(defonce *log (atom []))
+(defn log-append!
+  [record]
+  (swap! *log conj record))
+
+(defn log->str
+  []
+  (->> @*log
+       (string/join "\n\n")))