diff --git a/handlers.go b/handlers.go index d8134c2..5da0b1c 100644 --- a/handlers.go +++ b/handlers.go @@ -138,7 +138,7 @@ func downloadPostHandler(c echo.Context) error { original := Original{ URL: url, UserID: userID, - Status: "pending", + Status: Pending, Audio: audioOnly, Video: !audioOnly, } @@ -562,10 +562,10 @@ func processOriginal(originalID uint) { } func startDownload(originalID uint, videoURL string, audioOnly bool) { - fmt.Println("startDownload audioOnly=", audioOnly) + log.Debugf("startDownload audioOnly=%t", audioOnly) // metadata phase - db.Model(&Original{}).Where("id = ?", originalID).Update("status", "metadata") + SetOriginalStatus(originalID, Metadata) var origMeta Meta var err error if audioOnly { @@ -574,21 +574,21 @@ func startDownload(originalID uint, videoURL string, audioOnly bool) { origMeta, err = getYtdlpVideoMeta(videoURL) } if err != nil { - db.Model(&Original{}).Where("id = ?", originalID).Update("status", "failed") + SetOriginalStatus(originalID, Failed) return } - fmt.Printf("original metadata %v\n", origMeta) + log.Debugf("original metadata %v", origMeta) err = db.Model(&Original{}).Where("id = ?", originalID).Updates(map[string]interface{}{ "title": origMeta.title, "artist": origMeta.artist, }).Error if err != nil { - db.Model(&Original{}).Where("id = ?", originalID).Update("status", "failed") + SetOriginalStatus(originalID, Failed) return } // download original - db.Model(&Original{}).Where("id = ?", originalID).Update("status", "downloading") + SetOriginalStatus(originalID, Downloading) dlFilename := fmt.Sprintf("%d-%s.%s", originalID, origMeta.title, origMeta.ext) dlFilepath := filepath.Join(getDataDir(), dlFilename) @@ -606,7 +606,7 @@ func startDownload(originalID uint, videoURL string, audioOnly bool) { cmd := exec.Command(ytdlp, ytdlpArgs...) err = cmd.Run() if err != nil { - db.Model(&Original{}).Where("id = ?", originalID).Update("status", "failed") + SetOriginalStatus(originalID, Failed) return } @@ -625,7 +625,7 @@ func startDownload(originalID uint, videoURL string, audioOnly bool) { fmt.Println("create Audio", audio) if db.Create(&audio).Error != nil { fmt.Println("Couldn't create audio entry", err) - db.Model(&Original{}).Where("id = ?", originalID).Update("status", "failed") + SetOriginalStatus(originalID, Failed) return } } else { @@ -640,12 +640,12 @@ func startDownload(originalID uint, videoURL string, audioOnly bool) { fmt.Println("create Video", video) if db.Create(&video).Error != nil { fmt.Println("Couldn't create video entry", err) - db.Model(&Original{}).Where("id = ?", originalID).Update("status", "failed") + SetOriginalStatus(originalID, Failed) return } } - db.Model(&Original{}).Where("id = ?", originalID).Update("status", "completed") + SetOriginalStatus(originalID, DownloadCompleted) processOriginal(originalID) } @@ -789,12 +789,13 @@ func videoHandler(c echo.Context) error { func videoRestartHandler(c echo.Context) error { id, _ := strconv.Atoi(c.Param("id")) + + // FIXME: rewrite this as an update var orig Original if err := db.First(&orig, id).Error; err != nil { return c.Redirect(http.StatusSeeOther, "/videos") } - - orig.Status = "pending" + orig.Status = Pending db.Save(&orig) go startDownload(uint(id), orig.URL, orig.Audio) diff --git a/models.go b/models.go index b36866e..fd8ce76 100644 --- a/models.go +++ b/models.go @@ -11,15 +11,26 @@ import ( "gorm.io/gorm" ) +type OriginalStatus string + +const ( + Pending OriginalStatus = "pending" + Metadata OriginalStatus = "metadata" + Downloading OriginalStatus = "downloading" + DownloadCompleted OriginalStatus = "download completed" + Transcoding OriginalStatus = "transcoding" + Failed OriginalStatus = "failed" +) + type Original struct { gorm.Model UserID uint URL string Title string Artist string - Status string // "pending", "metadata", "downloading", "completed", "failed", "cancelled" - Audio bool // video download requested - Video bool // audio download requested + Status OriginalStatus + Audio bool // video download requested + Video bool // audio download requested } type Video struct { @@ -102,6 +113,10 @@ func CreateUser(db *gorm.DB, username, password string) error { return nil } +func SetOriginalStatus(id uint, status OriginalStatus) error { + return db.Model(&Original{}).Where("id = ?", id).Update("status", status).Error +} + func NewDownloadManager() *DownloadManager { return &DownloadManager{ downloads: make(map[uint]*DownloadStatus),