Switch string -> OriginalStatus
This commit is contained in:
27
handlers.go
27
handlers.go
@@ -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)
|
||||||
|
21
models.go
21
models.go
@@ -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),
|
||||||
|
Reference in New Issue
Block a user