Switch string -> OriginalStatus

This commit is contained in:
Carl Pearson
2024-09-22 05:21:28 -06:00
parent 6902225716
commit 6c7a435d4f
2 changed files with 32 additions and 16 deletions

View File

@@ -138,7 +138,7 @@ func downloadPostHandler(c echo.Context) error {
original := Original{ original := Original{
URL: url, URL: url,
UserID: userID, UserID: userID,
Status: "pending", Status: Pending,
Audio: audioOnly, Audio: audioOnly,
Video: !audioOnly, Video: !audioOnly,
} }
@@ -562,10 +562,10 @@ func processOriginal(originalID uint) {
} }
func startDownload(originalID uint, videoURL string, audioOnly bool) { func startDownload(originalID uint, videoURL string, audioOnly bool) {
fmt.Println("startDownload audioOnly=", audioOnly) log.Debugf("startDownload audioOnly=%t", audioOnly)
// metadata phase // metadata phase
db.Model(&Original{}).Where("id = ?", originalID).Update("status", "metadata") SetOriginalStatus(originalID, Metadata)
var origMeta Meta var origMeta Meta
var err error var err error
if audioOnly { if audioOnly {
@@ -574,21 +574,21 @@ func startDownload(originalID uint, videoURL string, audioOnly bool) {
origMeta, err = getYtdlpVideoMeta(videoURL) origMeta, err = getYtdlpVideoMeta(videoURL)
} }
if err != nil { if err != nil {
db.Model(&Original{}).Where("id = ?", originalID).Update("status", "failed") SetOriginalStatus(originalID, Failed)
return 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{}{ err = db.Model(&Original{}).Where("id = ?", originalID).Updates(map[string]interface{}{
"title": origMeta.title, "title": origMeta.title,
"artist": origMeta.artist, "artist": origMeta.artist,
}).Error }).Error
if err != nil { if err != nil {
db.Model(&Original{}).Where("id = ?", originalID).Update("status", "failed") SetOriginalStatus(originalID, Failed)
return return
} }
// download original // 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) dlFilename := fmt.Sprintf("%d-%s.%s", originalID, origMeta.title, origMeta.ext)
dlFilepath := filepath.Join(getDataDir(), dlFilename) dlFilepath := filepath.Join(getDataDir(), dlFilename)
@@ -606,7 +606,7 @@ func startDownload(originalID uint, videoURL string, audioOnly bool) {
cmd := exec.Command(ytdlp, ytdlpArgs...) cmd := exec.Command(ytdlp, ytdlpArgs...)
err = cmd.Run() err = cmd.Run()
if err != nil { if err != nil {
db.Model(&Original{}).Where("id = ?", originalID).Update("status", "failed") SetOriginalStatus(originalID, Failed)
return return
} }
@@ -625,7 +625,7 @@ func startDownload(originalID uint, videoURL string, audioOnly bool) {
fmt.Println("create Audio", audio) fmt.Println("create Audio", audio)
if db.Create(&audio).Error != nil { if db.Create(&audio).Error != nil {
fmt.Println("Couldn't create audio entry", err) fmt.Println("Couldn't create audio entry", err)
db.Model(&Original{}).Where("id = ?", originalID).Update("status", "failed") SetOriginalStatus(originalID, Failed)
return return
} }
} else { } else {
@@ -640,12 +640,12 @@ func startDownload(originalID uint, videoURL string, audioOnly bool) {
fmt.Println("create Video", video) fmt.Println("create Video", video)
if db.Create(&video).Error != nil { if db.Create(&video).Error != nil {
fmt.Println("Couldn't create video entry", err) fmt.Println("Couldn't create video entry", err)
db.Model(&Original{}).Where("id = ?", originalID).Update("status", "failed") SetOriginalStatus(originalID, Failed)
return return
} }
} }
db.Model(&Original{}).Where("id = ?", originalID).Update("status", "completed") SetOriginalStatus(originalID, DownloadCompleted)
processOriginal(originalID) processOriginal(originalID)
} }
@@ -789,12 +789,13 @@ func videoHandler(c echo.Context) error {
func videoRestartHandler(c echo.Context) error { func videoRestartHandler(c echo.Context) error {
id, _ := strconv.Atoi(c.Param("id")) id, _ := strconv.Atoi(c.Param("id"))
// FIXME: rewrite this as an update
var orig Original var orig Original
if err := db.First(&orig, id).Error; err != nil { if err := db.First(&orig, id).Error; err != nil {
return c.Redirect(http.StatusSeeOther, "/videos") return c.Redirect(http.StatusSeeOther, "/videos")
} }
orig.Status = Pending
orig.Status = "pending"
db.Save(&orig) db.Save(&orig)
go startDownload(uint(id), orig.URL, orig.Audio) go startDownload(uint(id), orig.URL, orig.Audio)

View File

@@ -11,15 +11,26 @@ import (
"gorm.io/gorm" "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 { type Original struct {
gorm.Model gorm.Model
UserID uint UserID uint
URL string URL string
Title string Title string
Artist string Artist string
Status string // "pending", "metadata", "downloading", "completed", "failed", "cancelled" Status OriginalStatus
Audio bool // video download requested Audio bool // video download requested
Video bool // audio download requested Video bool // audio download requested
} }
type Video struct { type Video struct {
@@ -102,6 +113,10 @@ func CreateUser(db *gorm.DB, username, password string) error {
return nil return nil
} }
func SetOriginalStatus(id uint, status OriginalStatus) error {
return db.Model(&Original{}).Where("id = ?", id).Update("status", status).Error
}
func NewDownloadManager() *DownloadManager { func NewDownloadManager() *DownloadManager {
return &DownloadManager{ return &DownloadManager{
downloads: make(map[uint]*DownloadStatus), downloads: make(map[uint]*DownloadStatus),