From f4821e9d3f0045c4145d0b5f1b12f853201387b8 Mon Sep 17 00:00:00 2001 From: sstent Date: Fri, 12 Sep 2025 19:13:37 -0700 Subject: [PATCH] go baby go --- fitness-tui/cmd/main.go | 11 +++++++++-- fitness-tui/internal/config/config.go | 25 ++++++++++++++++++++++--- fitness-tui/internal/garmin/client.go | 1 - fitness-tui/internal/tui/app.go | 20 ++++++++++++++++++-- ~/.fitness-tui/config.yaml | 7 ------- 5 files changed, 49 insertions(+), 15 deletions(-) delete mode 100644 ~/.fitness-tui/config.yaml diff --git a/fitness-tui/cmd/main.go b/fitness-tui/cmd/main.go index d7509a8..8043650 100644 --- a/fitness-tui/cmd/main.go +++ b/fitness-tui/cmd/main.go @@ -5,6 +5,8 @@ import ( "os" "github.com/sstent/fitness-tui/internal/config" + "github.com/sstent/fitness-tui/internal/garmin" + "github.com/sstent/fitness-tui/internal/storage" "github.com/sstent/fitness-tui/internal/tui" ) @@ -15,9 +17,14 @@ func main() { os.Exit(1) } - fmt.Printf("Using storage path: %s\n", cfg.StoragePath) + // Initialize storage + activityStorage := storage.NewActivityStorage(cfg.StoragePath) - app := tui.App{} + // Initialize Garmin client + garminClient := garmin.NewClient(cfg.Garmin.Username, cfg.Garmin.Password, cfg.StoragePath) + + // Create and run the application + app := tui.NewApp(activityStorage, garminClient) if err := app.Run(); err != nil { fmt.Printf("Application error: %v\n", err) os.Exit(1) diff --git a/fitness-tui/internal/config/config.go b/fitness-tui/internal/config/config.go index 87caa1b..9881d93 100644 --- a/fitness-tui/internal/config/config.go +++ b/fitness-tui/internal/config/config.go @@ -2,6 +2,7 @@ package config import ( "fmt" + "log" "os" "path/filepath" @@ -21,17 +22,37 @@ type Config struct { } func Load() (*Config, error) { + // DEBUG: Add diagnostic logging + cwd, _ := os.Getwd() + log.Printf("DEBUG: Current working directory: %s", cwd) + + home, _ := os.UserHomeDir() + configDir := filepath.Join(home, ".fitness-tui") + log.Printf("DEBUG: Expected config directory: %s", configDir) + viper.SetConfigName("config") viper.SetConfigType("yaml") + + // Add search paths for config file + viper.AddConfigPath(".") // Current directory + viper.AddConfigPath(configDir) // ~/.fitness-tui/ + viper.AddConfigPath(filepath.Join(".", ".fitness-tui")) // ./.fitness-tui/ + setViperDefaults() // Read configuration if err := viper.ReadInConfig(); err != nil { - if _, ok := err.(viper.ConfigFileNotFoundError); !ok { + if _, ok := err.(viper.ConfigFileNotFoundError); ok { + log.Printf("DEBUG: Config file not found in search paths") + log.Printf("DEBUG: Searched in: ., %s, ./.fitness-tui/", configDir) + return nil, fmt.Errorf("config file not found - expected config.yaml in: %s", configDir) + } else { return nil, fmt.Errorf("config read error: %w", err) } } + log.Printf("DEBUG: Successfully loaded config from: %s", viper.ConfigFileUsed()) + // Create storage path atomically storagePath := viper.GetString("storagepath") if err := os.MkdirAll(storagePath, 0755); err != nil { @@ -74,5 +95,3 @@ func validateConfig(cfg *Config) error { } return nil } -} -} diff --git a/fitness-tui/internal/garmin/client.go b/fitness-tui/internal/garmin/client.go index e90cbce..5c893c1 100644 --- a/fitness-tui/internal/garmin/client.go +++ b/fitness-tui/internal/garmin/client.go @@ -5,7 +5,6 @@ import ( "fmt" "github.com/sstent/fitness-tui/internal/tui/models" - "github.com/sstent/go-garth" ) type Client struct { diff --git a/fitness-tui/internal/tui/app.go b/fitness-tui/internal/tui/app.go index a86c981..0fed206 100644 --- a/fitness-tui/internal/tui/app.go +++ b/fitness-tui/internal/tui/app.go @@ -4,14 +4,26 @@ import ( "fmt" tea "github.com/charmbracelet/bubbletea" + "github.com/sstent/fitness-tui/internal/garmin" + "github.com/sstent/fitness-tui/internal/storage" + "github.com/sstent/fitness-tui/internal/tui/screens" ) type App struct { currentModel tea.Model } +func NewApp(activityStorage *storage.ActivityStorage, garminClient *garmin.Client) *App { + // Initialize with the activity list screen as the default + activityList := screens.NewActivityList(activityStorage, garminClient) + + return &App{ + currentModel: activityList, + } +} + func (a *App) Init() tea.Cmd { - return nil + return a.currentModel.Init() } func (a *App) Update(msg tea.Msg) (tea.Model, tea.Cmd) { @@ -22,7 +34,11 @@ func (a *App) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return a, tea.Quit } } - return a, nil + + // Delegate to the current model + updatedModel, cmd := a.currentModel.Update(msg) + a.currentModel = updatedModel + return a, cmd } func (a *App) View() string { diff --git a/~/.fitness-tui/config.yaml b/~/.fitness-tui/config.yaml deleted file mode 100644 index 065b044..0000000 --- a/~/.fitness-tui/config.yaml +++ /dev/null @@ -1,7 +0,0 @@ -garmin: - username: "your_garmin_email@example.com" - password: "your_garmin_password" -openrouter: - apikey: "your_openrouter_api_key" - model: "deepseek/deepseek-r1-0528" -storagepath: "/home/sstent/.fitness-tui" \ No newline at end of file