From f16fa9686c6a97af38f70f6450b24d00842a93fd Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Thu, 25 Jul 2024 19:21:24 +0200 Subject: [PATCH] Add query method to retrieve metadata from db --- transcoder/go.mod | 11 +++++-- transcoder/go.sum | 8 +++++ transcoder/src/metadata.go | 65 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 transcoder/src/metadata.go diff --git a/transcoder/go.mod b/transcoder/go.mod index 3a34c4b0..cd26a59e 100644 --- a/transcoder/go.mod +++ b/transcoder/go.mod @@ -1,8 +1,11 @@ module github.com/zoriya/kyoo/transcoder -go 1.21 +go 1.22 -require github.com/labstack/echo/v4 v4.12.0 // direct +require ( + github.com/jmoiron/sqlx v1.4.0 + github.com/labstack/echo/v4 v4.12.0 +) require ( github.com/disintegration/imaging v1.6.2 @@ -17,7 +20,9 @@ require ( golang.org/x/image v0.10.0 // indirect golang.org/x/net v0.24.0 // indirect golang.org/x/sys v0.19.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/text v0.14.0 golang.org/x/time v0.5.0 // indirect gopkg.in/vansante/go-ffprobe.v2 v2.2.0 ) + +replace github.com/jmoiron/sqlx v1.4.0 => github.com/kmpm/sqlx v1.3.5-0.20220614102404-845a9a7f1301 diff --git a/transcoder/go.sum b/transcoder/go.sum index 904cd449..447202c9 100644 --- a/transcoder/go.sum +++ b/transcoder/go.sum @@ -2,17 +2,25 @@ 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/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c= github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4= +github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= +github.com/kmpm/sqlx v1.3.5-0.20220614102404-845a9a7f1301 h1:BX43DPpHzm4o6tYs3W+92d0F3iCD5/n4zKjv1FV8Ews= +github.com/kmpm/sqlx v1.3.5-0.20220614102404-845a9a7f1301/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ= github.com/labstack/echo/v4 v4.12.0 h1:IKpw49IMryVB2p1a4dzwlhP1O2Tf2E0Ir/450lH+kI0= github.com/labstack/echo/v4 v4.12.0/go.mod h1:UP9Cr2DJXbOK3Kr9ONYzNowSh7HP0aG0ShAyycHSJvM= github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0= github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU= +github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg= +github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= diff --git a/transcoder/src/metadata.go b/transcoder/src/metadata.go new file mode 100644 index 00000000..e6392af1 --- /dev/null +++ b/transcoder/src/metadata.go @@ -0,0 +1,65 @@ +package src + +import ( + "github.com/jmoiron/sqlx" +) + +type MetadataService struct { + database *sqlx.DB +} + +func (s MetadataService) GetMetadata(path string, sha string) (*MediaInfo, error) { + var ret MediaInfo + rows, err := s.database.Queryx(` + select * from info as i where i.sha=$1; + select * from videos as v where v.sha=$1; + select * from audios as a where a.sha=$1; + select * from subtitles as s where s.sha=$1; + select * from chapters as c where c.sha=$1; + `, + sha, + ) + if err != nil { + return nil, err + } + defer rows.Close() + + if !rows.Next() { + if err = rows.Err(); err != nil { + return nil, err + } + // TODO: retrieve mediainfo from file + store them in db. + return &ret, nil + } + rows.StructScan(ret) + + rows.NextResultSet() + for rows.Next() { + var video Video + rows.StructScan(video) + ret.Videos = append(ret.Videos, video) + } + + rows.NextResultSet() + for rows.Next() { + var audio Audio + rows.StructScan(audio) + ret.Audios = append(ret.Audios, audio) + } + + rows.NextResultSet() + for rows.Next() { + var subtitle Subtitle + rows.StructScan(subtitle) + ret.Subtitles = append(ret.Subtitles, subtitle) + } + + rows.NextResultSet() + for rows.Next() { + var chapter Chapter + rows.StructScan(chapter) + ret.Chapters = append(ret.Chapters, chapter) + } + + return &ret, nil +}