feat: assembly and main entry point
This commit is contained in:
+33
-2
@@ -1,7 +1,38 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import "log"
|
import (
|
||||||
|
"flag"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"yoresee_dropbox/internal/app"
|
||||||
|
)
|
||||||
|
|
||||||
func main() {
|
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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1,42 @@
|
|||||||
package app
|
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)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user