Move Video to media package

This commit is contained in:
Carl Pearson
2024-09-26 05:50:16 -06:00
parent 00d4a12014
commit 88160b2301
5 changed files with 40 additions and 28 deletions

View File

@@ -11,6 +11,7 @@ import (
"strconv" "strconv"
"strings" "strings"
"time" "time"
"ytdlp-site/media"
"github.com/labstack/echo/v4" "github.com/labstack/echo/v4"
"golang.org/x/crypto/bcrypt" "golang.org/x/crypto/bcrypt"
@@ -493,7 +494,7 @@ func processOriginal(originalID uint) {
// check if there is an original video // check if there is an original video
hasOriginalVideo := true hasOriginalVideo := true
hasOriginalAudio := true hasOriginalAudio := true
var video Video var video media.Video
var audio Audio var audio Audio
err := db.Where("source = ?", "original").Where("original_id = ?", originalID).First(&video).Error err := db.Where("source = ?", "original").Where("original_id = ?", originalID).First(&video).Error
if err == gorm.ErrRecordNotFound { if err == gorm.ErrRecordNotFound {
@@ -625,7 +626,7 @@ func startDownload(originalID uint, videoURL string, audioOnly bool) {
return return
} }
video := Video{ video := media.Video{
OriginalID: originalID, OriginalID: originalID,
Filename: dlFilename, Filename: dlFilename,
Source: "original", Source: "original",
@@ -725,7 +726,7 @@ func videoHandler(c echo.Context) error {
return c.Redirect(http.StatusSeeOther, "/videos") return c.Redirect(http.StatusSeeOther, "/videos")
} }
var videos []Video var videos []media.Video
db.Where("original_id = ?", id). db.Where("original_id = ?", id).
Order("CASE WHEN source = 'original' THEN 0 ELSE 1 END, height ASC"). Order("CASE WHEN source = 'original' THEN 0 ELSE 1 END, height ASC").
Find(&videos) Find(&videos)
@@ -814,7 +815,7 @@ func deleteTranscodes(originalID int) {
} }
func deleteTranscodedVideos(originalID int) { func deleteTranscodedVideos(originalID int) {
var videos []Video var videos []media.Video
db.Where("original_id = ?", originalID).Where("source = ?", "transcode").Find(&videos) db.Where("original_id = ?", originalID).Where("source = ?", "transcode").Find(&videos)
for _, video := range videos { for _, video := range videos {
path := filepath.Join(getDataDir(), video.Filename) path := filepath.Join(getDataDir(), video.Filename)
@@ -824,11 +825,11 @@ func deleteTranscodedVideos(originalID int) {
log.Errorln("error removing", path, err) 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) { func deleteOriginalVideos(originalID int) {
var videos []Video var videos []media.Video
db.Where("original_id = ?", originalID).Where("source = ?", "original").Find(&videos) db.Where("original_id = ?", originalID).Where("source = ?", "original").Find(&videos)
for _, video := range videos { for _, video := range videos {
path := filepath.Join(getDataDir(), video.Filename) path := filepath.Join(getDataDir(), video.Filename)
@@ -838,7 +839,7 @@ func deleteOriginalVideos(originalID int) {
fmt.Println("error removing", path, err) 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) { func deleteAudiosWithSource(originalID int, source string) {
@@ -879,7 +880,7 @@ func deleteVideoHandler(c echo.Context) error {
referrer = "/" referrer = "/"
} }
var video Video var video media.Video
result := db.First(&video, id) result := db.First(&video, id)
if result.Error != nil { if result.Error != nil {
log.Errorln("error retrieving video", id, result.Error) 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) 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) log.Errorln("error deleting video record", id, err)
} }
return c.Redirect(http.StatusSeeOther, referrer) return c.Redirect(http.StatusSeeOther, referrer)
@@ -934,7 +935,7 @@ func transcodeToVideoHandler(c echo.Context) error {
referrer = "/" referrer = "/"
} }
var video Video var video media.Video
err := db.Where("source = ?", "original").Where("original_id = ?", originalId).First(&video).Error err := db.Where("source = ?", "original").Where("original_id = ?", originalId).First(&video).Error
if err == gorm.ErrRecordNotFound { if err == gorm.ErrRecordNotFound {
log.Errorf("no video record for original %d: %v", originalId, err) 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 // check if there is an original video
hasOriginalVideo := true hasOriginalVideo := true
hasOriginalAudio := true hasOriginalAudio := true
var video Video var video media.Video
var audio Audio var audio Audio
err := db.Where("source = ?", "original").Where("original_id = ?", originalId).First(&video).Error err := db.Where("source = ?", "original").Where("original_id = ?", originalId).First(&video).Error
if err == gorm.ErrRecordNotFound { if err == gorm.ErrRecordNotFound {

View File

@@ -8,6 +8,7 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"time" "time"
"ytdlp-site/media"
"github.com/gorilla/sessions" "github.com/gorilla/sessions"
"github.com/labstack/echo/v4" "github.com/labstack/echo/v4"
@@ -79,7 +80,7 @@ func main() {
sqlDB.SetMaxOpenConns(1) sqlDB.SetMaxOpenConns(1)
// Migrate the schema // Migrate the schema
db.AutoMigrate(&Original{}, &Video{}, &Audio{}, &User{}, &TempURL{}, &Transcode{}) db.AutoMigrate(&Original{}, &media.Video{}, &Audio{}, &User{}, &TempURL{}, &Transcode{})
go PeriodicCleanup() go PeriodicCleanup()
// create a user // create a user

23
media/media.go Normal file
View File

@@ -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
}

View File

@@ -34,20 +34,6 @@ type Original struct {
Video bool // audio download requested 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 { type Transcode struct {
gorm.Model gorm.Model
Status string // "pending", "running", "failed" Status string // "pending", "running", "failed"

View File

@@ -8,6 +8,7 @@ import (
"path/filepath" "path/filepath"
"strings" "strings"
"time" "time"
"ytdlp-site/media"
"github.com/google/uuid" "github.com/google/uuid"
"gorm.io/gorm" "gorm.io/gorm"
@@ -70,7 +71,7 @@ func videoToVideo(transID uint, height uint, srcFilepath string) {
db.First(&orig, "id = ?", trans.OriginalID) db.First(&orig, "id = ?", trans.OriginalID)
// create video record // 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) fileSize, err := getSize(dstFilepath)
if err == nil { if err == nil {
@@ -262,7 +263,7 @@ func transcodePending() {
if trans.SrcKind == "video" { if trans.SrcKind == "video" {
var srcVideo Video var srcVideo media.Video
err = db.First(&srcVideo, "id = ?", trans.SrcID).Error err = db.First(&srcVideo, "id = ?", trans.SrcID).Error
if err != nil { if err != nil {
fmt.Println("no such source video for video Transcode", trans) fmt.Println("no such source video for video Transcode", trans)