vivaplusdl/episodes.go
Sebastiaan de Schaetzen c36a533d17
All checks were successful
Build / build (push) Successful in 3m15s
Can view some videos
2025-03-16 11:50:45 +01:00

73 lines
1.9 KiB
Go

package main
import (
"fmt"
"log"
"gitea.seeseepuff.be/seeseemelk/mysqlite"
)
func CalculateEpisodeNumbers(db *mysqlite.Db) error {
log.Printf("Calculating episode numbers")
// Start a transaction
tx, err := db.Begin()
if err != nil {
return fmt.Errorf("error starting transaction: %w", err)
}
defer tx.MustRollback()
query := `
select v.upload_date,
ifnull(
(select max(episode) from videos where upload_date = v.upload_date),
substr(upload_date, 6, 2) || substr(upload_date, 9, 2) || '00')
from videos v where episode is null group by upload_date
`
// Loop over each year and set the missing episode numbers
for row := range tx.Query(query).Range(&err) {
var uploadDate string
var lastEpisode int
err = row.Scan(&uploadDate, &lastEpisode)
log.Printf("Last episode for %s is %d", uploadDate, lastEpisode)
if err != nil {
return fmt.Errorf("error getting row: %w", err)
}
// Find all episodes that need updating
query := tx.Query("select id from videos where upload_date = ? and episode is null order by run, id desc").Bind(uploadDate)
// Update each episode
for episode := range query.Range(&err) {
var episodeId int
err = episode.Scan(&episodeId)
if err != nil {
return fmt.Errorf("error retrieving episode id: %w", err)
}
// 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()
if err != nil {
return fmt.Errorf("error updating episode id: %w", err)
}
}
if err != nil {
return fmt.Errorf("error retrieving episodes: %w", err)
}
}
if err != nil {
return fmt.Errorf("error fetching episodes: %w", err)
}
// Commit all changes
err = tx.Commit()
if err != nil {
return fmt.Errorf("error commiting changes: %w", err)
}
return nil
}