diff --git a/cmd/ydropbox/main.go b/cmd/ydropbox/main.go index c2d3881..ea1f973 100644 --- a/cmd/ydropbox/main.go +++ b/cmd/ydropbox/main.go @@ -1,7 +1,38 @@ package main -import "log" +import ( + "flag" + "log" + "os" + "path/filepath" + "yoresee_dropbox/internal/app" +) func main() { - log.Println("yDropbox starting...") + addr := flag.String("addr", "127.0.0.1:8999", "Listen address") + workspace := flag.String("workspace", "./workspace", "Workspace directory") + token := flag.String("token", "", "Access token") + flag.Parse() + + if *token == "" { + *token = os.Getenv("YDROPBOX_TOKEN") + } + if *token == "" { + log.Fatal("Token required: --token or YDROPBOX_TOKEN env") + } + + absWorkspace, _ := filepath.Abs(*workspace) + os.MkdirAll(filepath.Join(absWorkspace, "inbox"), 0755) + os.MkdirAll(filepath.Join(absWorkspace, "outbox"), 0755) + os.MkdirAll(filepath.Join(absWorkspace, ".ydropbox"), 0755) + + cfg := app.Config{ + Addr: *addr, + Workspace: absWorkspace, + Token: *token, + } + + if err := app.Run(cfg); err != nil { + log.Fatal(err) + } } diff --git a/internal/app/app.go b/internal/app/app.go index 4879f7a..8043f11 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -1 +1,42 @@ package app + +import ( + "log" + "net/http" + "path/filepath" + "time" + "yoresee_dropbox/internal/scanner" + "yoresee_dropbox/internal/server" + "yoresee_dropbox/internal/store" +) + +type Config struct { + Addr string + Workspace string + Token string +} + +func NewHandler(cfg Config) (http.Handler, *store.Store, error) { + dbPath := filepath.Join(cfg.Workspace, ".ydropbox", "db.sqlite") + s, err := store.Open(dbPath) + if err != nil { + return nil, nil, err + } + + sc := scanner.New(s, cfg.Workspace, 10*time.Second) + sc.Start() + + srv := server.New(s, cfg.Token, cfg.Workspace) + return srv.Handler(), s, nil +} + +func Run(cfg Config) error { + handler, s, err := NewHandler(cfg) + if err != nil { + return err + } + defer s.Close() + + log.Printf("Listening on %s", cfg.Addr) + return http.ListenAndServe(cfg.Addr, handler) +}