diff --git a/handlers.go b/handlers.go index 88bcd89..0c93ac6 100644 --- a/handlers.go +++ b/handlers.go @@ -11,6 +11,7 @@ import ( "strconv" "strings" "time" + "ytdlp-site/media" "github.com/labstack/echo/v4" "golang.org/x/crypto/bcrypt" @@ -493,7 +494,7 @@ func processOriginal(originalID uint) { // check if there is an original video hasOriginalVideo := true hasOriginalAudio := true - var video Video + var video media.Video var audio Audio err := db.Where("source = ?", "original").Where("original_id = ?", originalID).First(&video).Error if err == gorm.ErrRecordNotFound { @@ -625,7 +626,7 @@ func startDownload(originalID uint, videoURL string, audioOnly bool) { return } - video := Video{ + video := media.Video{ OriginalID: originalID, Filename: dlFilename, Source: "original", @@ -725,7 +726,7 @@ func videoHandler(c echo.Context) error { return c.Redirect(http.StatusSeeOther, "/videos") } - var videos []Video + var videos []media.Video db.Where("original_id = ?", id). Order("CASE WHEN source = 'original' THEN 0 ELSE 1 END, height ASC"). Find(&videos) @@ -814,7 +815,7 @@ func deleteTranscodes(originalID int) { } func deleteTranscodedVideos(originalID int) { - var videos []Video + var videos []media.Video db.Where("original_id = ?", originalID).Where("source = ?", "transcode").Find(&videos) for _, video := range videos { path := filepath.Join(getDataDir(), video.Filename) @@ -824,11 +825,11 @@ func deleteTranscodedVideos(originalID int) { log.Errorln("error removing", path, err) } } - db.Delete(&Video{}, "original_id = ? AND source = ?", originalID, "transcode") + db.Delete(&media.Video{}, "original_id = ? AND source = ?", originalID, "transcode") } func deleteOriginalVideos(originalID int) { - var videos []Video + var videos []media.Video db.Where("original_id = ?", originalID).Where("source = ?", "original").Find(&videos) for _, video := range videos { path := filepath.Join(getDataDir(), video.Filename) @@ -838,7 +839,7 @@ func deleteOriginalVideos(originalID int) { fmt.Println("error removing", path, err) } } - db.Delete(&Video{}, "original_id = ? AND source = ?", originalID, "original") + db.Delete(&media.Video{}, "original_id = ? AND source = ?", originalID, "original") } func deleteAudiosWithSource(originalID int, source string) { @@ -879,7 +880,7 @@ func deleteVideoHandler(c echo.Context) error { referrer = "/" } - var video Video + var video media.Video result := db.First(&video, id) if result.Error != nil { log.Errorln("error retrieving video", id, result.Error) @@ -893,7 +894,7 @@ func deleteVideoHandler(c echo.Context) error { log.Errorln("coudn't remove", videoPath, err) } - if err := db.Delete(&Video{}, id).Error; err != nil { + if err := db.Delete(&media.Video{}, id).Error; err != nil { log.Errorln("error deleting video record", id, err) } return c.Redirect(http.StatusSeeOther, referrer) @@ -934,7 +935,7 @@ func transcodeToVideoHandler(c echo.Context) error { referrer = "/" } - var video Video + var video media.Video err := db.Where("source = ?", "original").Where("original_id = ?", originalId).First(&video).Error if err == gorm.ErrRecordNotFound { log.Errorf("no video record for original %d: %v", originalId, err) @@ -956,7 +957,7 @@ func transcodeToAudioHandler(c echo.Context) error { // check if there is an original video hasOriginalVideo := true hasOriginalAudio := true - var video Video + var video media.Video var audio Audio err := db.Where("source = ?", "original").Where("original_id = ?", originalId).First(&video).Error if err == gorm.ErrRecordNotFound { diff --git a/main.go b/main.go index c172603..1ee9a2f 100644 --- a/main.go +++ b/main.go @@ -8,6 +8,7 @@ import ( "os" "path/filepath" "time" + "ytdlp-site/media" "github.com/gorilla/sessions" "github.com/labstack/echo/v4" @@ -79,7 +80,7 @@ func main() { sqlDB.SetMaxOpenConns(1) // Migrate the schema - db.AutoMigrate(&Original{}, &Video{}, &Audio{}, &User{}, &TempURL{}, &Transcode{}) + db.AutoMigrate(&Original{}, &media.Video{}, &Audio{}, &User{}, &TempURL{}, &Transcode{}) go PeriodicCleanup() // create a user diff --git a/media/media.go b/media/media.go new file mode 100644 index 0000000..679d0fb --- /dev/null +++ b/media/media.go @@ -0,0 +1,23 @@ +package media + +import "gorm.io/gorm" + +type Status string + +const ( + Transcoding Status = "transcoding" +) + +type Video struct { + gorm.Model + OriginalID uint // Original.ID + Source string // "original", "transcode" + Filename string + Width uint + Height uint + FPS float64 + Length float64 + Size int64 + Type string + Codec string +} diff --git a/models.go b/models.go index a388581..ade8fea 100644 --- a/models.go +++ b/models.go @@ -34,20 +34,6 @@ type Original struct { Video bool // audio download requested } -type Video struct { - gorm.Model - OriginalID uint // Original.ID - Source string // "original", "transcode" - Filename string - Width uint - Height uint - FPS float64 - Length float64 - Size int64 - Type string - Codec string -} - type Transcode struct { gorm.Model Status string // "pending", "running", "failed" diff --git a/workers.go b/workers.go index 9d7697a..ddf56a1 100644 --- a/workers.go +++ b/workers.go @@ -8,6 +8,7 @@ import ( "path/filepath" "strings" "time" + "ytdlp-site/media" "github.com/google/uuid" "gorm.io/gorm" @@ -70,7 +71,7 @@ func videoToVideo(transID uint, height uint, srcFilepath string) { db.First(&orig, "id = ?", trans.OriginalID) // create video record - video := Video{OriginalID: orig.ID, Source: "transcode", Filename: dstFilename} + video := media.Video{OriginalID: orig.ID, Source: "transcode", Filename: dstFilename} fileSize, err := getSize(dstFilepath) if err == nil { @@ -262,7 +263,7 @@ func transcodePending() { if trans.SrcKind == "video" { - var srcVideo Video + var srcVideo media.Video err = db.First(&srcVideo, "id = ?", trans.SrcID).Error if err != nil { fmt.Println("no such source video for video Transcode", trans)