package main import ( "net/http" "os" "path/filepath" "github.com/gin-gonic/gin" "github.com/glebarez/sqlite" "gorm.io/gorm" ) func main() { dbPath := getenv("DB_PATH", "/data/downloader.db") _ = os.MkdirAll(filepath.Dir(dbPath), 0755) db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{}) must(err) must(db.AutoMigrate(&Task{}, &Setting{})) client := &http.Client{Timeout: 2 * 60 * 1e9} cfg := loadConfig(db) a := &App{db: db, cfg: cfg, queue: make(chan uint, 100), httpClient: client} a.loadSettings() normalizeConfig(&a.cfg) a.am = &AMAPIClient{BaseURL: a.cfg.AMAPI, HTTP: client} if a.cfg.WebDAVURL != "" { a.storage = NewWebDAVStorage(a.cfg) } a.startWorkers() r := gin.Default() r.StaticFile("/", "/app/index.html") api := r.Group("/api") api.GET("/search", a.search) api.GET("/tasks", a.listTasks) api.POST("/tasks", a.addTask) api.POST("/tasks/:id/retry", a.retryTask) api.DELETE("/tasks/:id", a.deleteTask) api.GET("/settings", a.getSettings) api.PUT("/settings", a.putSettings) api.POST("/webdav/test", a.testWebDAV) must(r.Run(":" + getenv("PORT", "9540"))) } func must(err error) { if err != nil { panic(err) } }