This commit is contained in:
parent
4b42e4f998
commit
ae765fdf64
@ -16,7 +16,7 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
func DownloadAllVideos(db *mysqlite.Db) error {
|
||||
func DownloadAllVideos(db *mysqlite.Db) (rerr error) {
|
||||
// Ensure no partial videos exist
|
||||
tempDir := os.Getenv("VIVAPLUS_DOWNLOAD")
|
||||
if tempDir == "" {
|
||||
@ -43,10 +43,18 @@ func DownloadAllVideos(db *mysqlite.Db) error {
|
||||
|
||||
log.Printf("Starting downloads...")
|
||||
for {
|
||||
err = downloadVideo(db, downloadDir, tempDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func downloadVideo(db *mysqlite.Db, downloadDir string, tempDir string) (rerr error) {
|
||||
// Fetch the next record from the database
|
||||
var id, episode int
|
||||
var href, cast, title, description, uploadDateStr, thumbnailUrl string
|
||||
err = db.Query("select id, url, `cast`, title, description, upload_date, thumbnail, episode from videos where state = 'pending' and episode is not null order by year, episode limit 1").
|
||||
err := db.Query("select id, url, `cast`, title, description, upload_date, thumbnail, episode from videos where state = 'pending' and episode is not null order by year, episode limit 1").
|
||||
ScanSingle(&id, &href, &cast, &title, &description, &uploadDateStr, &thumbnailUrl, &episode)
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
log.Printf("No videos found for downloading")
|
||||
@ -104,7 +112,10 @@ func DownloadAllVideos(db *mysqlite.Db) error {
|
||||
}
|
||||
nfoString := xml.Header + string(nfoData)
|
||||
nfoFile, err := os.Create(filepath.Join(destinationDir, baseFileName+".nfo"))
|
||||
defer nfoFile.Close()
|
||||
if err != nil {
|
||||
return fmt.Errorf("error creating NFO file: %w", err)
|
||||
}
|
||||
defer forwardError(nfoFile.Close(), &rerr)
|
||||
_, err = nfoFile.WriteString(nfoString)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error writing NFO file: %w", err)
|
||||
@ -120,12 +131,12 @@ func DownloadAllVideos(db *mysqlite.Db) error {
|
||||
if err != nil {
|
||||
return fmt.Errorf("error creating thumbnail: %w", err)
|
||||
}
|
||||
defer thumbnailFile.Close()
|
||||
defer forwardError(thumbnailFile.Close(), &rerr)
|
||||
thumbnailResp, err := http.Get(thumbnailUrl)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error fetching thumbnail: %w", err)
|
||||
}
|
||||
defer thumbnailResp.Body.Close()
|
||||
defer forwardError(thumbnailResp.Body.Close(), &rerr)
|
||||
_, err = io.Copy(thumbnailFile, thumbnailResp.Body)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error writing thumbnail: %w", err)
|
||||
@ -136,23 +147,16 @@ func DownloadAllVideos(db *mysqlite.Db) error {
|
||||
if err != nil {
|
||||
return fmt.Errorf("error starting transaction: %w", err)
|
||||
}
|
||||
defer tx.Rollback()
|
||||
result, err := tx.Exec("update videos set state = 'done' where id = ?", id)
|
||||
defer forwardError(tx.Rollback(), &rerr)
|
||||
err = tx.Query("update videos set state = 'done' where id = ?").Bind(id).Exec()
|
||||
if err != nil {
|
||||
return fmt.Errorf("error updating database: %w", err)
|
||||
}
|
||||
count, err := result.RowsAffected()
|
||||
if err != nil {
|
||||
return fmt.Errorf("error getting number of rows affected: %d", err)
|
||||
}
|
||||
if count != 1 {
|
||||
return fmt.Errorf("unexpected number of rows changed (expected exactly 1): %d", count)
|
||||
}
|
||||
err = tx.Commit()
|
||||
if err != nil {
|
||||
return fmt.Errorf("error commiting transaction: %w", err)
|
||||
}
|
||||
|
||||
log.Printf("Finished downloading file")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user