Groundwork for displaying clips
This commit is contained in:
27
handlers.go
27
handlers.go
@@ -29,6 +29,13 @@ import (
|
|||||||
var ytdlpAudioOptions = []string{"-f", "bestvideo[height<=1080]+bestaudio/best[height<=1080]"}
|
var ytdlpAudioOptions = []string{"-f", "bestvideo[height<=1080]+bestaudio/best[height<=1080]"}
|
||||||
var ytdlpVideoOptions = []string{"-f", "bestaudio"}
|
var ytdlpVideoOptions = []string{"-f", "bestaudio"}
|
||||||
|
|
||||||
|
type DisplayVideoClip struct {
|
||||||
|
TempURL
|
||||||
|
ID uint // VideoClip.ID
|
||||||
|
Start float64
|
||||||
|
Stop float64
|
||||||
|
}
|
||||||
|
|
||||||
func registerHandler(c echo.Context) error {
|
func registerHandler(c echo.Context) error {
|
||||||
return c.Render(http.StatusOK, "register.html", nil)
|
return c.Render(http.StatusOK, "register.html", nil)
|
||||||
}
|
}
|
||||||
@@ -814,11 +821,16 @@ func videoHandler(c echo.Context) error {
|
|||||||
Order("CASE WHEN source = 'original' THEN 1 ELSE 0 END, bps ASC").
|
Order("CASE WHEN source = 'original' THEN 1 ELSE 0 END, bps ASC").
|
||||||
Find(&audios)
|
Find(&audios)
|
||||||
|
|
||||||
|
var videoClips []media.VideoClip
|
||||||
|
db.Where("original_id = ?", id).
|
||||||
|
Find(&videoClips)
|
||||||
|
|
||||||
dataDir := config.GetDataDir()
|
dataDir := config.GetDataDir()
|
||||||
|
|
||||||
// create temporary URLs
|
// create temporary URLs
|
||||||
var videoURLs []VideoTemplate
|
var videoURLs []VideoTemplate
|
||||||
var audioURLs []AudioTemplate
|
var audioURLs []AudioTemplate
|
||||||
|
var clipDisplays []DisplayVideoClip
|
||||||
for _, video := range videos {
|
for _, video := range videos {
|
||||||
tempURL, err := CreateTempURL(filepath.Join(dataDir, video.Filename))
|
tempURL, err := CreateTempURL(filepath.Join(dataDir, video.Filename))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -861,11 +873,26 @@ func videoHandler(c echo.Context) error {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, clip := range videoClips {
|
||||||
|
tempURL, err := CreateTempURL(filepath.Join(dataDir, clip.Filename))
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
clipDisplays = append(clipDisplays, DisplayVideoClip{
|
||||||
|
TempURL: tempURL,
|
||||||
|
ID: clip.ID,
|
||||||
|
Start: float64(1000 * clip.StartMS),
|
||||||
|
Stop: float64(1000 * clip.StopMS),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return c.Render(http.StatusOK, "video.html",
|
return c.Render(http.StatusOK, "video.html",
|
||||||
map[string]interface{}{
|
map[string]interface{}{
|
||||||
"original": orig,
|
"original": orig,
|
||||||
"videos": videoURLs,
|
"videos": videoURLs,
|
||||||
"audios": audioURLs,
|
"audios": audioURLs,
|
||||||
|
"clips": clipDisplays,
|
||||||
"dataDir": dataDir,
|
"dataDir": dataDir,
|
||||||
"Footer": handlers.MakeFooter(),
|
"Footer": handlers.MakeFooter(),
|
||||||
})
|
})
|
||||||
|
5
main.go
5
main.go
@@ -95,8 +95,9 @@ func main() {
|
|||||||
sqlDB.SetMaxOpenConns(1)
|
sqlDB.SetMaxOpenConns(1)
|
||||||
|
|
||||||
// Migrate the schema
|
// Migrate the schema
|
||||||
db.AutoMigrate(&originals.Original{}, &playlists.Playlist{}, &media.Video{},
|
db.AutoMigrate(&originals.Original{}, &playlists.Playlist{},
|
||||||
&media.Audio{}, &users.User{}, &TempURL{}, &transcodes.Transcode{})
|
&media.Video{}, &media.Audio{}, &media.VideoClip{},
|
||||||
|
&users.User{}, &TempURL{}, &transcodes.Transcode{})
|
||||||
|
|
||||||
database.Init(db, log)
|
database.Init(db, log)
|
||||||
defer database.Fini()
|
defer database.Fini()
|
||||||
|
@@ -43,8 +43,10 @@ type Video struct {
|
|||||||
Status Status
|
Status Status
|
||||||
}
|
}
|
||||||
|
|
||||||
type Clip struct {
|
type VideoClip struct {
|
||||||
gorm.Model
|
gorm.Model
|
||||||
VideoFile
|
VideoFile
|
||||||
OriginalID uint // Original.ID
|
OriginalID uint // Original.ID
|
||||||
|
StartMS uint
|
||||||
|
StopMS uint
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user