113 lines
2.2 KiB
Go
113 lines
2.2 KiB
Go
package server
|
|
|
|
import (
|
|
"embed"
|
|
"fmt"
|
|
golog "log"
|
|
"os"
|
|
"path/filepath"
|
|
"seanime/internal/core"
|
|
"seanime/internal/cron"
|
|
"seanime/internal/handlers"
|
|
"seanime/internal/updater"
|
|
"seanime/internal/util"
|
|
"seanime/internal/util/crashlog"
|
|
"time"
|
|
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
func startApp(embeddedLogo []byte) (*core.App, core.SeanimeFlags, *updater.SelfUpdater) {
|
|
// Print the header
|
|
core.PrintHeader()
|
|
|
|
// Get the flags
|
|
flags := core.GetSeanimeFlags()
|
|
|
|
selfupdater := updater.NewSelfUpdater()
|
|
|
|
// Create the app instance
|
|
app := core.NewApp(&core.ConfigOptions{
|
|
DataDir: flags.DataDir,
|
|
EmbeddedLogo: embeddedLogo,
|
|
IsDesktopSidecar: flags.IsDesktopSidecar,
|
|
}, selfupdater)
|
|
|
|
// Create log file
|
|
logFilePath := filepath.Join(app.Config.Logs.Dir, fmt.Sprintf("seanime-%s.log", time.Now().Format("2006-01-02_15-04-05")))
|
|
// Open the log file
|
|
logFile, _ := os.OpenFile(
|
|
logFilePath,
|
|
os.O_APPEND|os.O_CREATE|os.O_WRONLY,
|
|
0664,
|
|
)
|
|
|
|
log.Logger = *app.Logger
|
|
golog.SetOutput(app.Logger)
|
|
util.SetupLoggerSignalHandling(logFile)
|
|
crashlog.GlobalCrashLogger.SetLogDir(app.Config.Logs.Dir)
|
|
|
|
app.OnFlushLogs = func() {
|
|
util.WriteGlobalLogBufferToFile(logFile)
|
|
logFile.Sync()
|
|
}
|
|
|
|
if !flags.Update {
|
|
go func() {
|
|
for {
|
|
util.WriteGlobalLogBufferToFile(logFile)
|
|
time.Sleep(5 * time.Second)
|
|
}
|
|
}()
|
|
}
|
|
|
|
return app, flags, selfupdater
|
|
}
|
|
|
|
func startAppLoop(webFS *embed.FS, app *core.App, flags core.SeanimeFlags, selfupdater *updater.SelfUpdater) {
|
|
updateMode := flags.Update
|
|
|
|
appLoop:
|
|
for {
|
|
switch updateMode {
|
|
case true:
|
|
|
|
log.Log().Msg("Running in update mode")
|
|
|
|
// Print the header
|
|
core.PrintHeader()
|
|
|
|
// Run the self-updater
|
|
err := selfupdater.Run()
|
|
if err != nil {
|
|
}
|
|
|
|
log.Log().Msg("Shutting down in 10 seconds...")
|
|
time.Sleep(10 * time.Second)
|
|
|
|
break appLoop
|
|
case false:
|
|
|
|
// Create the echo app instance
|
|
echoApp := core.NewEchoApp(app, webFS)
|
|
|
|
// Initialize the routes
|
|
handlers.InitRoutes(app, echoApp)
|
|
|
|
// Run the server
|
|
core.RunEchoServer(app, echoApp)
|
|
|
|
// Run the jobs in the background
|
|
cron.RunJobs(app)
|
|
|
|
select {
|
|
case <-selfupdater.Started():
|
|
app.Cleanup()
|
|
updateMode = true
|
|
break
|
|
}
|
|
}
|
|
continue
|
|
}
|
|
}
|