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 45b93e8b8739f75beca6952c05f7889faef41b24 72 lines 1.8 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 // Set format 36 if format == "json" { 37 logger.SetFormatter(log.JSONFormatter) 38 } else { 39 logger.SetFormatter(log.TextFormatter) 40 logger.SetReportTimestamp(true) 41 } 42 43 return logger 44} 45 46// GetLogger returns the global logger, creating a default one if it doesn't exist 47func GetLogger() *log.Logger { 48 if Logger == nil { 49 Logger = NewLogger("info", "text") 50 } 51 return Logger 52} 53 54func Titlecase(s string) string { 55 return cases.Title(language.Und, cases.NoLower).String(s) 56} 57 58// TestTaskRepository interface for dependency injection in tests 59type TestTaskRepository interface { 60 List(ctx context.Context, options repo.TaskListOptions) ([]*models.Task, error) 61 Update(ctx context.Context, task *models.Task) error 62} 63 64// TestBookRepository interface for dependency injection in tests 65type TestBookRepository interface { 66 List(ctx context.Context, options repo.BookListOptions) ([]*models.Book, error) 67} 68 69// TestNoteRepository interface for dependency injection in tests 70type TestNoteRepository interface { 71 List(ctx context.Context, options repo.NoteListOptions) ([]*models.Note, error) 72}