Files
calorie-counter/main.go
2024-09-04 23:57:13 +02:00

120 lines
2.6 KiB
Go

package main
import (
"embed"
"flag"
"fmt"
"io"
"log"
"os"
_ "embed"
"github.com/wailsapp/wails/v2"
"github.com/wailsapp/wails/v2/pkg/options"
"github.com/wailsapp/wails/v2/pkg/options/assetserver"
)
//go:embed all:frontend/dist
var assets embed.FS
var Error *log.Logger
func init() {
log.SetFlags(log.Lmicroseconds | log.Lshortfile)
logFile, err := os.Create("main.log")
if err != nil {
log.Printf("Error creating log file: %v", err)
return
}
logger := io.MultiWriter(os.Stdout, logFile)
log.SetOutput(logger)
Error = log.New(io.MultiWriter(logFile, os.Stderr, os.Stdout),
fmt.Sprintf("%sERROR:%s ", "\033[0;101m", "\033[0m"),
log.Lmicroseconds|log.Lshortfile)
}
var (
settingsService *SettingsService
foodService *FoodService
weightService *WeightService
)
//go:embed food.ddl
var foodDDL string
//go:embed spellfix.dll
var spellfixDll []byte
// TODO: Embed food.ddl and create DB if no exists
// TODO: Add averages to graphs (ie. R2) https://stackoverflow.com/questions/60622195/how-to-draw-a-linear-regression-line-in-chart-js
func main() {
_, err := os.Open("spellfix.dll")
if err != nil && !os.IsNotExist(err) {
Error.Printf("Error looking for spellfix.dll: %v", err)
return
}
if err != nil && os.IsNotExist(err) {
log.Printf("No spellfix.dll found, creating...")
file, err := os.Create("spellfix.dll")
if err != nil {
Error.Printf("Error creating spellfix.dll: %v", err)
return
}
_, err = file.Write(spellfixDll)
if err != nil {
Error.Printf("Error writing spellfix.dll: %v", err)
return
}
file.Close()
}
dbpath := flag.String("db", "food.db", "Path to the database file")
flag.Parse()
db := DB{path: *dbpath}
err = db.Open()
if err != nil {
Error.Printf("%++v", err)
return
}
defer db.Close()
err = db.Init(foodDDL)
if err != nil {
Error.Printf("Error initializing database: %++v", err)
return
}
settingsService = &SettingsService{db: &db}
err = settingsService.LoadSettings()
if err != nil {
Error.Printf("%++v", err)
return
}
log.Printf("Loaded settings as: %++v", Settings)
foodService = &FoodService{db: &db}
weightService = &WeightService{db: &db}
// Create an instance of the app structure
app := NewApp()
// Create application with options
err = wails.Run(&options.App{
Title: "calorie-counter",
Width: 1920,
Height: 1080,
AssetServer: &assetserver.Options{
Assets: assets,
},
BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1},
OnStartup: app.startup,
Bind: []interface{}{
app,
},
})
if err != nil {
println("Error:", err.Error())
}
}