diff --git a/app/src/types/index.d.ts b/app/src/types/index.d.ts
index 56d4b58a9..f8e5760fd 100644
--- a/app/src/types/index.d.ts
+++ b/app/src/types/index.d.ts
@@ -424,6 +424,7 @@ declare interface IConfig {
container: "std" | "android" | "docker" | "ios"
isMicrosoftStore: boolean
os: "windows" | "linux" | "darwin"
+ osPlatform: string
homeDir: string
xanadu: boolean
udanax: boolean
diff --git a/app/src/util/assets.ts b/app/src/util/assets.ts
index 584db3afd..39ee16c86 100644
--- a/app/src/util/assets.ts
+++ b/app/src/util/assets.ts
@@ -23,10 +23,10 @@ const loadThirdIcon = (iconURL: string, data: IAppearance) => {
export const loadAssets = (data: IAppearance) => {
const htmlElement = document.getElementsByTagName("html")[0];
- htmlElement.setAttribute("lang",window.siyuan.config.appearance.lang);
- htmlElement.setAttribute("data-theme-mode",getThemeMode());
- htmlElement.setAttribute("data-light-theme",window.siyuan.config.appearance.themeLight);
- htmlElement.setAttribute("data-dark-theme",window.siyuan.config.appearance.themeDark);
+ htmlElement.setAttribute("lang", window.siyuan.config.appearance.lang);
+ htmlElement.setAttribute("data-theme-mode", getThemeMode());
+ htmlElement.setAttribute("data-light-theme", window.siyuan.config.appearance.themeLight);
+ htmlElement.setAttribute("data-dark-theme", window.siyuan.config.appearance.themeDark);
const OSTheme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
if (window.siyuan.config.appearance.modeOS && (
(window.siyuan.config.appearance.mode === 1 && OSTheme === "light") ||
@@ -172,6 +172,7 @@ export const addGA = () => {
version: Constants.SIYUAN_VERSION,
container: window.siyuan.config.system.container,
os: window.siyuan.config.system.os,
+ osPlatform: window.siyuan.config.system.osPlatform,
isLoggedIn: false,
subscriptionStatus: -1,
subscriptionPlan: -1,
diff --git a/kernel/conf/system.go b/kernel/conf/system.go
index f560c9b09..b3bdffc37 100644
--- a/kernel/conf/system.go
+++ b/kernel/conf/system.go
@@ -24,6 +24,7 @@ type System struct {
ID string `json:"id"`
KernelVersion string `json:"kernelVersion"`
OS string `json:"os"`
+ OSPlatform string `json:"osPlatform"`
Container string `json:"container"` // docker, android, ios, std
IsMicrosoftStore bool `json:"isMicrosoftStore"`
IsInsider bool `json:"isInsider"`
diff --git a/kernel/model/conf.go b/kernel/model/conf.go
index e8e9b9522..195cb6f6e 100644
--- a/kernel/model/conf.go
+++ b/kernel/model/conf.go
@@ -236,6 +236,7 @@ func InitConf() {
logging.LogInfof("using Microsoft Store edition")
}
Conf.System.OS = runtime.GOOS
+ Conf.System.OSPlatform = util.GetOSPlatform()
Conf.Newbie = util.IsNewbie
if "" != Conf.UserData {
diff --git a/kernel/util/os.go b/kernel/util/os.go
new file mode 100644
index 000000000..cacdfff48
--- /dev/null
+++ b/kernel/util/os.go
@@ -0,0 +1,33 @@
+// SiYuan - Build Your Eternal Digital Garden
+// Copyright (c) 2020-present, b3log.org
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+//go:build !ios && !android
+
+package util
+
+import (
+ "github.com/shirou/gopsutil/v3/host"
+ "github.com/siyuan-note/logging"
+)
+
+func GetOSPlatform() (ret string) {
+ ret, _, _, err := host.PlatformInformation()
+ if nil != err {
+ logging.LogWarnf("get os platform failed: %s", err)
+ return
+ }
+ return
+}
diff --git a/kernel/util/os_mobile.go b/kernel/util/os_mobile.go
new file mode 100644
index 000000000..73bff4e41
--- /dev/null
+++ b/kernel/util/os_mobile.go
@@ -0,0 +1,29 @@
+// SiYuan - Build Your Eternal Digital Garden
+// Copyright (c) 2020-present, b3log.org
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+//go:build ios || android
+
+package util
+
+func GetOSPlatform() (ret string) {
+ if ContainerIOS == Container {
+ return "iOS"
+ }
+ if ContainerAndroid == Container {
+ return "Android"
+ }
+ return
+}
diff --git a/kernel/util/runtime.go b/kernel/util/runtime.go
index e38c1c553..1fbadcd12 100644
--- a/kernel/util/runtime.go
+++ b/kernel/util/runtime.go
@@ -49,6 +49,7 @@ func logBootInfo() {
logging.LogInfof("kernel is booting:\n"+
" * ver [%s]\n"+
" * arch [%s]\n"+
+ " * os [%s] "+
" * pid [%d]\n"+
" * runtime mode [%s]\n"+
" * working directory [%s]\n"+
@@ -56,7 +57,7 @@ func logBootInfo() {
" * container [%s]\n"+
" * database [ver=%s]\n"+
" * workspace directory [%s]",
- Ver, runtime.GOARCH, os.Getpid(), Mode, WorkingDir, ReadOnly, Container, DatabaseVer, WorkspaceDir)
+ Ver, runtime.GOARCH, GetOSPlatform(), os.Getpid(), Mode, WorkingDir, ReadOnly, Container, DatabaseVer, WorkspaceDir)
}
func IsMutexLocked(m *sync.Mutex) bool {