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{
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)

View File

@@ -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),