Move Video to media package
This commit is contained in:
23
handlers.go
23
handlers.go
@@ -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 {
|
||||||
|
3
main.go
3
main.go
@@ -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
23
media/media.go
Normal 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
|
||||||
|
}
|
14
models.go
14
models.go
@@ -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"
|
||||||
|
@@ -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)
|
||||||
|
Reference in New Issue
Block a user