package main import ( "context" "github.com/coocood/freecache" "github.com/wailsapp/wails/v2/pkg/runtime" "go-stock/backend/data" "go-stock/backend/logger" ) // App struct type App struct { ctx context.Context cache *freecache.Cache } // NewApp creates a new App application struct func NewApp() *App { cacheSize := 512 * 1024 cache := freecache.NewCache(cacheSize) return &App{ cache: cache, } } // startup is called at application startup func (a *App) startup(ctx context.Context) { // Perform your setup here a.ctx = ctx } // domReady is called after front-end resources have been loaded func (a *App) domReady(ctx context.Context) { // Add your action here //ticker := time.NewTicker(time.Second) //defer ticker.Stop() ////定时更新数据 //go func() { // for range ticker.C { // runtime.WindowSetTitle(ctx, "go-stock "+time.Now().Format("2006-01-02 15:04:05")) // } //}() } // beforeClose is called when the application is about to quit, // either by clicking the window close button or calling runtime.Quit. // Returning true will cause the application to continue, false will continue shutdown as normal. func (a *App) beforeClose(ctx context.Context) (prevent bool) { dialog, err := runtime.MessageDialog(ctx, runtime.MessageDialogOptions{ Type: runtime.QuestionDialog, Title: "go-stock", Message: "确定关闭吗?", Buttons: []string{"确定"}, Icon: icon, CancelButton: "取消", }) if err != nil { return false } logger.SugaredLogger.Debugf("dialog:%s", dialog) if dialog == "No" { return true } return false } // shutdown is called at application termination func (a *App) shutdown(ctx context.Context) { // Perform your teardown here } // Greet returns a greeting for the given name func (a *App) Greet(name string) *data.StockInfo { stockInfo, _ := data.NewStockDataApi().GetStockCodeRealTimeData(name) return stockInfo } func (a *App) Follow(stockCode string) string { return data.NewStockDataApi().Follow(stockCode) } func (a *App) UnFollow(stockCode string) string { return data.NewStockDataApi().UnFollow(stockCode) } func (a *App) GetFollowList() []data.FollowedStock { return data.NewStockDataApi().GetFollowList() } func (a *App) GetStockList(key string) []data.StockBasic { return data.NewStockDataApi().GetStockList(key) } func (a *App) SetCostPriceAndVolume(stockCode string, price float64, volume int64) string { return data.NewStockDataApi().SetCostPriceAndVolume(price, volume, stockCode) } func (a *App) SetAlarmChangePercent(val float64, stockCode string) string { return data.NewStockDataApi().SetAlarmChangePercent(val, stockCode) } func (a *App) SendDingDingMessage(message string, stockCode string) string { ttl, _ := a.cache.TTL([]byte(stockCode)) logger.SugaredLogger.Infof("stockCode %s ttl:%d", stockCode, ttl) if ttl > 0 { return "" } err := a.cache.Set([]byte(stockCode), []byte("1"), 60*5) if err != nil { logger.SugaredLogger.Errorf("set cache error:%s", err.Error()) return "" } return data.NewDingDingAPI().SendDingDingMessage(message) }