First real commit. Setting up for full CI/CD and testing pipeline
This commit is contained in:
121
app/app.go
Normal file
121
app/app.go
Normal file
@@ -0,0 +1,121 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sync"
|
||||
|
||||
"fast_reader/internal/reader"
|
||||
"fast_reader/internal/settings"
|
||||
"fast_reader/internal/storage"
|
||||
)
|
||||
|
||||
type App struct {
|
||||
ctx context.Context
|
||||
mu sync.RWMutex
|
||||
settings settings.Settings
|
||||
settingsPath string
|
||||
}
|
||||
|
||||
func NewApp() *App {
|
||||
return &App{
|
||||
settings: settings.Default(),
|
||||
}
|
||||
}
|
||||
|
||||
func (a *App) Startup(ctx context.Context) {
|
||||
a.ctx = ctx
|
||||
|
||||
configDir, err := os.UserConfigDir()
|
||||
if err != nil {
|
||||
log.Printf("Could not locate user config directory: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
a.mu.Lock()
|
||||
defer a.mu.Unlock()
|
||||
|
||||
a.settingsPath = filepath.Join(
|
||||
configDir,
|
||||
"fast_reader",
|
||||
"settings.json",
|
||||
)
|
||||
|
||||
var saved settings.Settings
|
||||
|
||||
err = storage.Load(a.settingsPath, &saved)
|
||||
|
||||
if err != nil {
|
||||
if !os.IsNotExist(err) {
|
||||
log.Printf("Could not load settings: %v", err)
|
||||
}
|
||||
|
||||
a.settings = settings.Default()
|
||||
return
|
||||
}
|
||||
|
||||
a.settings = saved.Normalize()
|
||||
|
||||
log.Println("Settings loaded successfully")
|
||||
}
|
||||
|
||||
// PrepareText converts pasted text into a sequence of words
|
||||
// ready for RSVP playback.
|
||||
func (a *App) PrepareText(text string) []reader.Word {
|
||||
return reader.Tokenize(text)
|
||||
}
|
||||
|
||||
// GetVersion returns the application version.
|
||||
func (a *App) GetVersion() string {
|
||||
return "0.1.0"
|
||||
}
|
||||
|
||||
// GetSettings returns the current application settings.
|
||||
func (a *App) GetSettings() settings.Settings {
|
||||
a.mu.RLock()
|
||||
defer a.mu.RUnlock()
|
||||
|
||||
return a.settings
|
||||
}
|
||||
|
||||
// SaveSettings validates and persists application settings.
|
||||
func (a *App) SaveSettings(input settings.Settings) error {
|
||||
normalized := input.Normalize()
|
||||
|
||||
a.mu.Lock()
|
||||
defer a.mu.Unlock()
|
||||
|
||||
if a.settingsPath == "" {
|
||||
configDir, err := os.UserConfigDir()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
a.settingsPath = filepath.Join(
|
||||
configDir,
|
||||
"fast_reader",
|
||||
"settings.json",
|
||||
)
|
||||
}
|
||||
|
||||
if err := storage.Save(a.settingsPath, normalized); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
a.settings = normalized
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// ResetSettings restores and persists the default settings.
|
||||
func (a *App) ResetSettings() (settings.Settings, error) {
|
||||
defaults := settings.Default()
|
||||
|
||||
if err := a.SaveSettings(defaults); err != nil {
|
||||
return settings.Settings{}, err
|
||||
}
|
||||
|
||||
return defaults, nil
|
||||
}
|
||||
Reference in New Issue
Block a user