43 lines
811 B
Go
43 lines
811 B
Go
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)
|
|
}
|