Fix unreliable media extension during yt-dlp --simulate
This commit is contained in:
59
handlers.go
59
handlers.go
@@ -150,7 +150,6 @@ func downloadPostHandler(c echo.Context) error {
|
|||||||
type Meta struct {
|
type Meta struct {
|
||||||
title string
|
title string
|
||||||
artist string
|
artist string
|
||||||
ext string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func getYtdlpTitle(url string, args []string) (string, error) {
|
func getYtdlpTitle(url string, args []string) (string, error) {
|
||||||
@@ -190,15 +189,11 @@ func getYtdlpMeta(url string, args []string) (Meta, error) {
|
|||||||
|
|
||||||
meta.title, err = getYtdlpTitle(url, args)
|
meta.title, err = getYtdlpTitle(url, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
return meta, err
|
||||||
}
|
}
|
||||||
meta.artist, err = getYtdlpArtist(url, args)
|
meta.artist, err = getYtdlpArtist(url, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
return meta, err
|
||||||
}
|
|
||||||
meta.ext, err = getYtdlpExt(url, args)
|
|
||||||
if err != nil {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return meta, nil
|
return meta, nil
|
||||||
@@ -518,6 +513,7 @@ func startDownload(originalID uint, videoURL string, audioOnly bool) {
|
|||||||
origMeta, err = getYtdlpVideoMeta(videoURL)
|
origMeta, err = getYtdlpVideoMeta(videoURL)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Errorln("couldn't retrieve metadata:", err)
|
||||||
SetOriginalStatus(originalID, Failed)
|
SetOriginalStatus(originalID, Failed)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -527,33 +523,70 @@ func startDownload(originalID uint, videoURL string, audioOnly bool) {
|
|||||||
"artist": origMeta.artist,
|
"artist": origMeta.artist,
|
||||||
}).Error
|
}).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Errorln("couldn't store metadata:", err)
|
||||||
SetOriginalStatus(originalID, Failed)
|
SetOriginalStatus(originalID, Failed)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// download original
|
// download original
|
||||||
SetOriginalStatus(originalID, Downloading)
|
SetOriginalStatus(originalID, Downloading)
|
||||||
dlFilename := fmt.Sprintf("%d-%s.%s", originalID, origMeta.title, origMeta.ext)
|
|
||||||
dlFilepath := filepath.Join(getDataDir(), dlFilename)
|
|
||||||
|
|
||||||
|
// create temporary directory
|
||||||
|
tempDir, err := os.MkdirTemp("", "dl")
|
||||||
|
if err != nil {
|
||||||
|
log.Errorln("Error creating temporary directory:", err)
|
||||||
|
SetOriginalStatus(originalID, Failed)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer os.RemoveAll(tempDir)
|
||||||
|
log.Debugln("created", tempDir)
|
||||||
|
|
||||||
|
// download into temporary directory
|
||||||
var args []string
|
var args []string
|
||||||
if audioOnly {
|
if audioOnly {
|
||||||
args = ytdlpVideoOptions
|
args = ytdlpVideoOptions
|
||||||
} else {
|
} else {
|
||||||
args = ytdlpAudioOptions
|
args = ytdlpAudioOptions
|
||||||
}
|
}
|
||||||
|
|
||||||
ytdlp := "yt-dlp"
|
ytdlp := "yt-dlp"
|
||||||
ytdlpArgs := append(args, "-o", dlFilepath, videoURL)
|
ytdlpArgs := append(args, videoURL)
|
||||||
|
|
||||||
fmt.Println(ytdlp, strings.Join(ytdlpArgs, " "))
|
fmt.Println(ytdlp, strings.Join(ytdlpArgs, " "))
|
||||||
cmd := exec.Command(ytdlp, ytdlpArgs...)
|
cmd := exec.Command(ytdlp, ytdlpArgs...)
|
||||||
|
cmd.Dir = tempDir
|
||||||
err = cmd.Run()
|
err = cmd.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Errorln("yt-dlp failed")
|
||||||
SetOriginalStatus(originalID, Failed)
|
SetOriginalStatus(originalID, Failed)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// discover name of downloaded file
|
||||||
|
dirEnts, err := os.ReadDir(tempDir)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorln("Error reading directory:", err)
|
||||||
|
SetOriginalStatus(originalID, Failed)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
dlFilename := ""
|
||||||
|
for _, dirEnt := range dirEnts {
|
||||||
|
if !dirEnt.IsDir() {
|
||||||
|
dlFilename = dirEnt.Name()
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if dlFilename == "" {
|
||||||
|
log.Errorln("couldn't find a downloaded file")
|
||||||
|
SetOriginalStatus(originalID, Failed)
|
||||||
|
}
|
||||||
|
|
||||||
|
// move to data directory
|
||||||
|
dlFilepath := filepath.Join(getDataDir(), dlFilename)
|
||||||
|
err = os.Rename(filepath.Join(tempDir, dlFilename), dlFilepath)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorln("couldn't move downloaded file")
|
||||||
|
SetOriginalStatus(originalID, Failed)
|
||||||
|
}
|
||||||
|
|
||||||
if audioOnly {
|
if audioOnly {
|
||||||
mediaMeta, err := getAudioMeta(dlFilepath)
|
mediaMeta, err := getAudioMeta(dlFilepath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -566,7 +599,6 @@ func startDownload(originalID uint, videoURL string, audioOnly bool) {
|
|||||||
OriginalID: originalID,
|
OriginalID: originalID,
|
||||||
Filename: dlFilename,
|
Filename: dlFilename,
|
||||||
Source: "original",
|
Source: "original",
|
||||||
Type: origMeta.ext,
|
|
||||||
Length: mediaMeta.length,
|
Length: mediaMeta.length,
|
||||||
Size: mediaMeta.size,
|
Size: mediaMeta.size,
|
||||||
}
|
}
|
||||||
@@ -588,7 +620,6 @@ func startDownload(originalID uint, videoURL string, audioOnly bool) {
|
|||||||
OriginalID: originalID,
|
OriginalID: originalID,
|
||||||
Filename: dlFilename,
|
Filename: dlFilename,
|
||||||
Source: "original",
|
Source: "original",
|
||||||
Type: origMeta.ext,
|
|
||||||
FPS: mediaMeta.fps,
|
FPS: mediaMeta.fps,
|
||||||
Width: mediaMeta.width,
|
Width: mediaMeta.width,
|
||||||
Height: mediaMeta.height,
|
Height: mediaMeta.height,
|
||||||
|
Reference in New Issue
Block a user