diff --git a/episodes.go b/episodes.go index 05a5a8e..35ec40c 100644 --- a/episodes.go +++ b/episodes.go @@ -2,8 +2,9 @@ package main import ( "fmt" - "gitea.seeseepuff.be/seeseemelk/mysqlite" "log" + + "gitea.seeseepuff.be/seeseemelk/mysqlite" ) func CalculateEpisodeNumbers(db *mysqlite.Db) error { @@ -46,8 +47,9 @@ func CalculateEpisodeNumbers(db *mysqlite.Db) error { } // Set the episode ID + log.Printf("Setting episode ID for %d to %d", episodeId, lastEpisode) lastEpisode++ - err = tx.Query("update videos set episode = ? where id = ?").Bind(&lastEpisode, &episodeId).Exec() + err = tx.Query("update videos set episode = ? where id = ?").Bind(lastEpisode, episodeId).Exec() if err != nil { return fmt.Errorf("error updating episode id: %w", err) } diff --git a/go.mod b/go.mod index f86bbda..989b898 100644 --- a/go.mod +++ b/go.mod @@ -5,13 +5,12 @@ go 1.24 toolchain go1.24.0 require ( - gitea.seeseepuff.be/seeseemelk/mysqlite v0.4.0 + gitea.seeseepuff.be/seeseemelk/mysqlite v0.6.0 github.com/playwright-community/playwright-go v0.4902.0 ) require ( github.com/deckarep/golang-set/v2 v2.7.0 // indirect - github.com/donseba/go-htmx v1.12.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/go-jose/go-jose/v3 v3.0.3 // indirect github.com/go-stack/stack v1.8.1 // indirect diff --git a/go.sum b/go.sum index e51182c..24ade2a 100644 --- a/go.sum +++ b/go.sum @@ -1,12 +1,10 @@ -gitea.seeseepuff.be/seeseemelk/mysqlite v0.4.0 h1:jBj4qsSJCz7XOBakh2Rl4Pggvv5hPpR8iLcvxwdQ4NQ= -gitea.seeseepuff.be/seeseemelk/mysqlite v0.4.0/go.mod h1:cgswydOxJjMlNwfcBIXnKjr47LwXnMT9BInkiHb0tXE= +gitea.seeseepuff.be/seeseemelk/mysqlite v0.6.0 h1:Tqo9jnPXBDzIiMh+CrrFd5epITbG8UWqVfpLk21R/C0= +gitea.seeseepuff.be/seeseemelk/mysqlite v0.6.0/go.mod h1:cgswydOxJjMlNwfcBIXnKjr47LwXnMT9BInkiHb0tXE= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/deckarep/golang-set/v2 v2.7.0 h1:gIloKvD7yH2oip4VLhsv3JyLLFnC0Y2mlusgcvJYW5k= github.com/deckarep/golang-set/v2 v2.7.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= -github.com/donseba/go-htmx v1.12.0 h1:7tESER0uxaqsuGMv3yP3pK1drfBUXM6apG4H7/3+IgE= -github.com/donseba/go-htmx v1.12.0/go.mod h1:8PTAYvNKf8+QYis+DpAsggKz+sa2qljtMgvdAeNBh5s= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/go-jose/go-jose/v3 v3.0.3 h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k= diff --git a/html_debug.go b/html_debug.go index 712015a..da03c80 100644 --- a/html_debug.go +++ b/html_debug.go @@ -16,5 +16,5 @@ func renderTemplate(wr io.Writer, templateName string, viewModel any) error { if err != nil { return err } - return templates.Execute(wr, viewModel) + return templates.ExecuteTemplate(wr, templateName+".gohtml", viewModel) } diff --git a/main.go b/main.go index 0eb1310..986db27 100644 --- a/main.go +++ b/main.go @@ -2,8 +2,9 @@ package main import ( "flag" - "github.com/playwright-community/playwright-go" "log" + + "github.com/playwright-community/playwright-go" ) func main() { @@ -57,12 +58,12 @@ func main() { // if err != nil { // panic(err) // } - // - // err = CalculateEpisodeNumbers(db) - // if err != nil { - // panic(err) - // } - // + + err = CalculateEpisodeNumbers(db) + if err != nil { + panic(err) + } + // err = DownloadAllVideos(db) // if err != nil { // panic(err) diff --git a/static/style.css b/static/style.css index 6e2bb06..7e08fad 100644 --- a/static/style.css +++ b/static/style.css @@ -2,12 +2,198 @@ body { background-color: black; color: white; font-family: sans-serif; + margin: 0; + padding: 20px; } h1 { text-transform: uppercase; + text-align: center; + color: #e50914; + margin-bottom: 30px; +} + +.video-container { + max-width: 1000px; + margin: 0 auto; } .video-box { border: 1px solid white; + border-radius: 8px; + background-color: #1e1e1e; + padding: 15px; + display: flex; + overflow: hidden; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); + gap: 20px; +} + +.thumbnail-container { + flex: 0 0 auto; + max-width: 40%; + margin-right: 20px; + position: relative; +} + +.thumbnail-container a { + display: block; + cursor: pointer; + position: relative; + overflow: hidden; + transition: opacity 0.2s; +} + +.thumbnail-container a:hover { + opacity: 0.8; +} + +.thumbnail-container a:hover .play-button { + opacity: 1; +} + +.play-button { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); + display: flex; + justify-content: center; + align-items: center; + opacity: 0; + transition: opacity 0.3s ease; +} + +.play-symbol { + color: white; + font-size: 50px; + text-shadow: 0 0 10px rgba(0, 0, 0, 0.5); +} + +.video-thumbnail { + width: 100%; + height: auto; + border-radius: 4px; + display: block; +} + +.video-info { + flex: 1; + display: flex; + flex-direction: column; +} + +.video-title { + font-size: 24px; + margin-top: 0; + margin-bottom: 15px; + color: #ffffff; +} + +.video-description { + flex: 1; + font-size: 16px; + line-height: 1.5; + color: #aaaaaa; + margin-bottom: 20px; +} + +.video-actions { + display: flex; + gap: 10px; +} + +.watch-button { + background-color: #e50914; + color: white; + border: none; + padding: 10px 20px; + border-radius: 4px; + cursor: pointer; + font-size: 16px; + font-weight: bold; +} + +.watch-button:hover { + background-color: #f40612; +} + +.mark-watched { + background-color: transparent; + color: #aaaaaa; + border: 1px solid #555; + padding: 10px 15px; + border-radius: 4px; + cursor: pointer; + font-size: 16px; +} + +.mark-watched:hover { + background-color: #333; + color: #ffffff; +} + +/* Video Player Styles */ +.video-player-container { + max-width: 1200px; + margin: 0 auto; +} + +.video-player-box { + border: 1px solid white; + border-radius: 8px; + background-color: #1e1e1e; + padding: 20px; + overflow: hidden; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); +} + +.video-player { + margin: 20px 0; + width: 100%; + display: flex; + justify-content: center; +} + +.video-player video { + width: 100%; + max-height: 70vh; + background-color: black; +} + +.video-player-info { + margin-top: 20px; +} + +.back-button-container { + max-width: 1200px; + margin: 0 auto 20px; +} + +.back-button { + display: inline-block; + color: #aaaaaa; + text-decoration: none; + padding: 8px 16px; + border: 1px solid #555; + border-radius: 4px; +} + +.back-button:hover { + background-color: #333; + color: #ffffff; +} + +@media (max-width: 768px) { + .video-box { + flex-direction: column; + } + + .thumbnail-container { + max-width: 100%; + margin-bottom: 15px; + flex: auto; + } } diff --git a/viewmodels.go b/viewmodels.go index f7685d1..e7242ad 100644 --- a/viewmodels.go +++ b/viewmodels.go @@ -1,7 +1,14 @@ package main type VideoInfoVM struct { + ID int Title string Description string Thumbnail string } + +type VideoPlayerVM struct { + ID int + Title string + Description string +} diff --git a/web/index.gohtml b/web/index.gohtml index 0c2945a..26079c7 100644 --- a/web/index.gohtml +++ b/web/index.gohtml @@ -8,10 +8,21 @@