diff --git a/handlers.go b/handlers.go index ad36fd9..501b092 100644 --- a/handlers.go +++ b/handlers.go @@ -29,6 +29,13 @@ import ( var ytdlpAudioOptions = []string{"-f", "bestvideo[height<=1080]+bestaudio/best[height<=1080]"} var ytdlpVideoOptions = []string{"-f", "bestaudio"} +type DisplayVideoClip struct { + TempURL + ID uint // VideoClip.ID + Start float64 + Stop float64 +} + func registerHandler(c echo.Context) error { 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"). Find(&audios) + var videoClips []media.VideoClip + db.Where("original_id = ?", id). + Find(&videoClips) + dataDir := config.GetDataDir() // create temporary URLs var videoURLs []VideoTemplate var audioURLs []AudioTemplate + var clipDisplays []DisplayVideoClip for _, video := range videos { tempURL, err := CreateTempURL(filepath.Join(dataDir, video.Filename)) 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", map[string]interface{}{ "original": orig, "videos": videoURLs, "audios": audioURLs, + "clips": clipDisplays, "dataDir": dataDir, "Footer": handlers.MakeFooter(), }) diff --git a/main.go b/main.go index cec8212..915b174 100644 --- a/main.go +++ b/main.go @@ -95,8 +95,9 @@ func main() { sqlDB.SetMaxOpenConns(1) // Migrate the schema - db.AutoMigrate(&originals.Original{}, &playlists.Playlist{}, &media.Video{}, - &media.Audio{}, &users.User{}, &TempURL{}, &transcodes.Transcode{}) + db.AutoMigrate(&originals.Original{}, &playlists.Playlist{}, + &media.Video{}, &media.Audio{}, &media.VideoClip{}, + &users.User{}, &TempURL{}, &transcodes.Transcode{}) database.Init(db, log) defer database.Fini() diff --git a/media/models.go b/media/models.go index 9aa915e..b7a3f21 100644 --- a/media/models.go +++ b/media/models.go @@ -43,8 +43,10 @@ type Video struct { Status Status } -type Clip struct { +type VideoClip struct { gorm.Model VideoFile OriginalID uint // Original.ID + StartMS uint + StopMS uint }