Files
AI-Expert-Sidebar/app.go
T
2026-04-01 14:09:33 +08:00

95 lines
2.8 KiB
Go

package main
import (
"context"
"log"
"AI-Expert-Sidebar/internal/config"
"AI-Expert-Sidebar/internal/database"
"AI-Expert-Sidebar/internal/handler"
"AI-Expert-Sidebar/internal/service"
)
type App struct {
ctx context.Context
expert *handler.Expert
settings *handler.SettingsHandler
library *handler.LibraryHandler
}
func NewApp() *App {
return &App{
expert: handler.NewExpert(),
settings: handler.NewSettingsHandler(),
library: handler.NewLibraryHandler(),
}
}
func (a *App) startup(ctx context.Context) {
a.ctx = ctx
a.expert.SetContext(ctx)
a.settings.SetContext(ctx)
a.library.SetContext(ctx)
if err := config.Load(); err != nil {
log.Printf("[App] Config warning: %v", err)
}
if err := database.Init(); err != nil {
log.Printf("[App] DB init warning: %v", err)
}
if err := service.InitLibraries(); err != nil {
log.Printf("[App] Library init warning: %v", err)
}
}
// ── Library ───────────────────────────────────────────────────────────────────
func (a *App) ListLibraries() []handler.LibraryInfo {
return a.library.ListLibraries()
}
func (a *App) GetActiveLibrary() string {
return a.library.GetActiveLibrary()
}
func (a *App) CreateLibrary(name, description string) string {
return a.library.CreateLibrary(name, description)
}
func (a *App) SwitchLibrary(name string) string {
return a.library.SwitchLibrary(name)
}
func (a *App) DeleteLibrary(name string) string {
return a.library.DeleteLibrary(name)
}
func (a *App) ImportCSV() service.ImportResult {
return a.library.ImportCSV()
}
// ── Settings ──────────────────────────────────────────────────────────────────
func (a *App) GetSettings() *service.SettingsDTO {
return a.settings.GetSettings()
}
func (a *App) SaveSettings(dto service.SettingsDTO) string {
return a.settings.SaveSettings(dto)
}
func (a *App) GetProviders() []handler.ProviderPreset {
return a.settings.GetProviders()
}
// ── Expert ────────────────────────────────────────────────────────────────────
func (a *App) SearchExpert(query string) interface{} {
return a.expert.SearchExpert(query)
}
func (a *App) AskDeepSeek(query, rawAnswer string) string {
return a.expert.AskDeepSeek(query, rawAnswer)
}
func (a *App) StopGeneration() {
a.expert.StopGeneration()
}
func (a *App) ToggleTopmost(enabled bool) {
a.expert.ToggleTopmost(enabled)
}
func (a *App) GetDBStatus() bool {
return a.expert.GetDBStatus()
}