separate beads viewer into its own app

This commit is contained in:
Robin Olsen
2026-02-03 16:41:29 +01:00
parent f4b34c393f
commit 93128cb072
3 changed files with 59 additions and 53 deletions

53
cmd/beads_viewer/main.go Normal file
View File

@@ -0,0 +1,53 @@
package main
import (
"context"
"encoding/json"
"log"
"github.com/Dicklesworthstone/beads_viewer/pkg/model"
"github.com/Dicklesworthstone/beads_viewer/pkg/ui"
"github.com/LazyBachelor/LazyPM/internal/service"
tea "github.com/charmbracelet/bubbletea"
)
func main() {
config := service.Config{
StatisticsStoragePath: "./.pm/stats.json",
BeadsDBPath: "./.pm/db.db",
IssuePrefix: "pm",
}
svc, close, err := service.NewServices(context.Background(), config)
if err != nil {
log.Fatal(err)
}
defer close()
beadsIssues, err := svc.Beads.AllIssues(context.Background())
if err != nil {
panic(err)
}
modelIssues := make([]model.Issue, 0, len(beadsIssues))
for _, issue := range beadsIssues {
jsonData, err := json.Marshal(issue)
if err != nil {
panic(err)
}
var modelIssue model.Issue
if err := json.Unmarshal(jsonData, &modelIssue); err != nil {
panic(err)
}
modelIssues = append(modelIssues, modelIssue)
}
model := ui.NewModel(modelIssues, nil, config.BeadsDBPath)
if err := tea.NewProgram(model, tea.WithAltScreen(),
tea.WithMouseAllMotion()); err != nil {
panic(err)
}
}

View File

@@ -2,15 +2,9 @@ package main
import ( import (
"context" "context"
"encoding/json"
"fmt"
"os"
"github.com/Dicklesworthstone/beads_viewer/pkg/model"
bv_ui "github.com/Dicklesworthstone/beads_viewer/pkg/ui"
"github.com/LazyBachelor/LazyPM/internal/models"
"github.com/LazyBachelor/LazyPM/internal/service" "github.com/LazyBachelor/LazyPM/internal/service"
tea "github.com/charmbracelet/bubbletea" "github.com/LazyBachelor/LazyPM/pkg/tui"
) )
func main() { func main() {
@@ -20,50 +14,7 @@ func main() {
IssuePrefix: "pm", IssuePrefix: "pm",
} }
svc, close, err := service.NewServices(context.Background(), config) if err := tui.Run(context.Background(), config); err != nil {
if err != nil { panic(err)
fmt.Fprintf(os.Stderr, "Error initializing services: %v\n", err)
os.Exit(1)
}
defer close()
beadsIssues, err := svc.Beads.AllIssues(context.Background())
if err != nil {
fmt.Fprintf(os.Stderr, "Error loading issues: %v\n", err)
os.Exit(1)
}
issues, err := convertToModelIssues(beadsIssues)
if err != nil {
fmt.Fprintf(os.Stderr, "Error converting issues: %v\n", err)
os.Exit(1)
}
model := bv_ui.NewModel(issues, nil, config.BeadsDBPath)
p := tea.NewProgram(model, tea.WithAltScreen())
if _, err := p.Run(); err != nil {
fmt.Fprintf(os.Stderr, "Error running TUI: %v\n", err)
os.Exit(1)
} }
} }
func convertToModelIssues(beadsIssues []models.Issue) ([]model.Issue, error) {
result := make([]model.Issue, 0, len(beadsIssues))
for _, issue := range beadsIssues {
jsonData, err := json.Marshal(issue)
if err != nil {
return nil, fmt.Errorf("failed to marshal issue ID %s: %w", issue.ID, err)
}
var modelIssue model.Issue
if err := json.Unmarshal(jsonData, &modelIssue); err != nil {
return nil, fmt.Errorf("failed to unmarshal issue ID %s: %w", issue.ID, err)
}
result = append(result, modelIssue)
}
return result, nil
}

View File

@@ -1,8 +1,9 @@
package tui package tui
import ( import (
"github.com/LazyBachelor/LazyPM/internal/service"
"context" "context"
"github.com/LazyBachelor/LazyPM/internal/service"
) )
type TUIConfig = service.Config type TUIConfig = service.Config
@@ -15,4 +16,5 @@ func Run(ctx context.Context, config TUIConfig) error {
defer cleanup() defer cleanup()
return nil return nil
} }