mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-06-28 06:46:12 +00:00
102 lines
2.9 KiB
Go
102 lines
2.9 KiB
Go
// SiYuan - Refactor your thinking
|
|
// 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 <https://www.gnu.org/licenses/>.
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/siyuan-note/siyuan/kernel/cache"
|
|
"github.com/siyuan-note/siyuan/kernel/job"
|
|
"github.com/siyuan-note/siyuan/kernel/model"
|
|
"github.com/siyuan-note/siyuan/kernel/plugin"
|
|
"github.com/siyuan-note/siyuan/kernel/server"
|
|
"github.com/siyuan-note/siyuan/kernel/sql"
|
|
"github.com/siyuan-note/siyuan/kernel/util"
|
|
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var serveCmd = &cobra.Command{
|
|
Use: "serve",
|
|
Short: "Start kernel HTTP server",
|
|
FParseErrWhitelist: cobra.FParseErrWhitelist{UnknownFlags: true},
|
|
PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
|
|
return nil // bypass root's init — Boot() handles it
|
|
},
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
// Boot() uses flag.Parse() which expects raw --flags, not a cobra subcommand
|
|
// Strip the "serve" subcommand from os.Args before calling Boot()
|
|
saved := os.Args
|
|
newArgs := make([]string, 1, len(os.Args))
|
|
newArgs[0] = os.Args[0]
|
|
for i := 1; i < len(os.Args); i++ {
|
|
if i == 1 && os.Args[1] == "serve" {
|
|
continue
|
|
}
|
|
newArgs = append(newArgs, os.Args[i])
|
|
}
|
|
os.Args = newArgs
|
|
defer func() { os.Args = saved }()
|
|
|
|
// 设置工作目录为可执行文件所在目录
|
|
if exePath, err := os.Executable(); err == nil {
|
|
if resolved, err2 := filepath.EvalSymlinks(exePath); err2 == nil {
|
|
exePath = resolved
|
|
}
|
|
util.WorkingDir = filepath.Dir(exePath)
|
|
}
|
|
|
|
util.Boot()
|
|
|
|
model.InitJwtKey()
|
|
model.InitConf()
|
|
go server.Serve(false, model.Conf.CookieKey)
|
|
model.InitAppearance()
|
|
sql.InitDatabase(false)
|
|
sql.InitHistoryDatabase(false)
|
|
sql.InitAssetContentDatabase(false)
|
|
sql.SetCaseSensitive(model.Conf.Search.CaseSensitive)
|
|
sql.SetIndexAssetPath(model.Conf.Search.IndexAssetPath)
|
|
|
|
model.BootSyncData()
|
|
model.InitBoxes()
|
|
model.LoadFlashcards()
|
|
util.LoadAssetsTexts()
|
|
|
|
util.SetBooted()
|
|
util.PushClearAllMsg()
|
|
|
|
job.StartCron()
|
|
|
|
go model.AutoGenerateFileHistory()
|
|
go cache.LoadAssets()
|
|
go util.CheckFileSysStatus()
|
|
go plugin.InitManager()
|
|
go model.StartEmbeddingIndexer()
|
|
|
|
model.WatchAssets()
|
|
model.WatchEmojis()
|
|
model.WatchThemes()
|
|
model.HandleSignal()
|
|
},
|
|
}
|
|
|
|
func init() {
|
|
rootCmd.AddCommand(serveCmd)
|
|
}
|