diff --git a/handlers.go b/handlers.go index c9fdf48..54da5f1 100644 --- a/handlers.go +++ b/handlers.go @@ -115,9 +115,10 @@ func downloadPostHandler(c echo.Context) error { } type Meta struct { - title string - artist string - uploadDate time.Time + title string + artist string + uploadDate time.Time + uploaderUrl string } func getYtdlpTitle(url string, args []string) (string, error) { @@ -191,6 +192,16 @@ func getYtdlpUploadDate(url string, args []string) (time.Time, error) { return uploadDate, nil } +func getYtdlpUploaderUrl(url string, args []string) (string, error) { + args = append(args, "--simulate", "--print", "%(uploader_url)s", url) + stdout, _, err := ytdlp.Run(args...) + if err != nil { + log.Errorln(err) + return "", err + } + return strings.TrimSpace(string(stdout)), nil +} + func getYtdlpMeta(url string, args []string) (Meta, error) { meta := Meta{} @@ -208,6 +219,10 @@ func getYtdlpMeta(url string, args []string) (Meta, error) { if err != nil { return meta, err } + meta.uploaderUrl, err = getYtdlpUploaderUrl(url, args) + if err != nil { + return meta, err + } return meta, nil } @@ -569,9 +584,10 @@ func startDownload(originalID uint, videoURL string, audioOnly bool) { } log.Debugf("original metadata %v", origMeta) err = db.Model(&originals.Original{}).Where("id = ?", originalID).Updates(map[string]interface{}{ - "title": origMeta.title, - "artist": origMeta.artist, - "upload_date": origMeta.uploadDate, + "title": origMeta.title, + "artist": origMeta.artist, + "upload_date": origMeta.uploadDate, + "uploader_url": origMeta.uploaderUrl, }).Error if err != nil { log.Errorln("couldn't store metadata:", err) diff --git a/originals/originals.go b/originals/originals.go index 7cea6c2..c91af85 100644 --- a/originals/originals.go +++ b/originals/originals.go @@ -24,16 +24,17 @@ const ( type Original struct { gorm.Model - UserID uint - URL string - Title string - Artist string - UploadDate time.Time - Status Status - Audio bool // video download requested - Video bool // audio download requested - Watched bool - Timestamp float64 + UserID uint + URL string + Title string + Artist string + UploadDate time.Time + UploaderUrl string + Status Status + Audio bool // video download requested + Video bool // audio download requested + Watched bool + Timestamp float64 Playlist bool // part of a playlist PlaylistID uint // Playlist.ID (if part of a playlist) diff --git a/static/style/videos.css b/static/style/videos.css index 642b067..6d00fd1 100644 --- a/static/style/videos.css +++ b/static/style/videos.css @@ -10,4 +10,12 @@ .video-list { grid-template-columns: 1fr; } +} + +.video-artist-link { + + a, + a:visited { + color: gray; + } } \ No newline at end of file diff --git a/templates/videos.html b/templates/videos.html index 191ac6a..13b0f6e 100644 --- a/templates/videos.html +++ b/templates/videos.html @@ -35,7 +35,11 @@
{{.Title}}
-
{{.Artist}}
+ {{if (eq .UploaderUrl "")}} +
{{.Artist}}
+ {{else}} + + {{end}}
{{.URL}}
{{.Status}}