cli + tui to publish to leaflet (wip) & manage tasks, notes & watch/read lists 馃崈
charm leaflet readability golang
29
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 74 lines 2.0 kB view raw
1package utils 2 3import ( 4 "context" 5 "os" 6 "strings" 7 8 "github.com/charmbracelet/log" 9 "github.com/stormlightlabs/noteleaf/internal/models" 10 "github.com/stormlightlabs/noteleaf/internal/repo" 11 "golang.org/x/text/cases" 12 "golang.org/x/text/language" 13) 14 15// Logger is the global application logger 16var Logger *log.Logger 17 18// NewLogger creates a new logger with the specified level and format 19func NewLogger(level string, format string) *log.Logger { 20 logger := log.New(os.Stderr) 21 22 switch strings.ToLower(level) { 23 case "debug": 24 logger.SetLevel(log.DebugLevel) 25 case "info": 26 logger.SetLevel(log.InfoLevel) 27 case "warn", "warning": 28 logger.SetLevel(log.WarnLevel) 29 case "error": 30 logger.SetLevel(log.ErrorLevel) 31 default: 32 logger.SetLevel(log.InfoLevel) 33 } 34 35 if format == "json" { 36 logger.SetFormatter(log.JSONFormatter) 37 } else { 38 logger.SetFormatter(log.TextFormatter) 39 logger.SetReportTimestamp(true) 40 } 41 42 return logger 43} 44 45// GetLogger returns the global logger, creating a default one if it doesn't exist 46func GetLogger() *log.Logger { 47 if Logger == nil { 48 Logger = NewLogger("info", "text") 49 } 50 return Logger 51} 52 53func Titlecase(s string) string { 54 return cases.Title(language.Und, cases.NoLower).String(s) 55} 56 57// TestTaskRepository interface for dependency injection in tests 58type TestTaskRepository interface { 59 List(ctx context.Context, options repo.TaskListOptions) ([]*models.Task, error) 60 Update(ctx context.Context, task *models.Task) error 61} 62 63// TestBookRepository interface for dependency injection in tests 64type TestBookRepository interface { 65 List(ctx context.Context, options repo.BookListOptions) ([]*models.Book, error) 66} 67 68// TestNoteRepository interface for dependency injection in tests. 69type TestNoteRepository interface { 70 List(ctx context.Context, options repo.NoteListOptions) ([]*models.Note, error) 71 ListPublished(ctx context.Context) ([]*models.Note, error) 72 ListDrafts(ctx context.Context) ([]*models.Note, error) 73 GetLeafletNotes(ctx context.Context) ([]*models.Note, error) 74}