Skip to content
Snippets Groups Projects
Verified Commit 8df05f5f authored by Ernesto Rico Schmidt's avatar Ernesto Rico Schmidt
Browse files

Merge branch 'develop'

parents 3b8a5fea 7f1d640c
No related branches found
No related tags found
No related merge requests found
image: golang:1.19
image: golang:1.20
stages:
- prepare
......
### Build Image
FROM golang:1.19-bullseye AS builder
FROM golang:1.20-bookworm AS builder
LABEL maintainer="Christian Pointner <equinox@helsinki.at>"
RUN set -e \
......@@ -19,7 +19,7 @@ WORKDIR /usr/src
RUN make
### APP Image
FROM debian:bullseye
FROM debian:bookworm
LABEL maintainer="Christian Pointner <equinox@helsinki.at>"
ENV AURA_UID=2872
......@@ -27,7 +27,7 @@ ENV AURA_GID=${AURA_UID}
RUN set -e \
&& apt-get update -q \
&& apt-get install -y -q --no-install-recommends ffmpeg ca-certificates netcat \
&& apt-get install -y -q --no-install-recommends ffmpeg ca-certificates netcat-openbsd \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN set -e \
......
# TODO
- [ ] API: Built-In Documentaion using Swagger/OpenAPI
- [ ] API: Documentation of API Usage and Authentication
- [ ] Store: Automatic Pools
- [ ] API: Websockets-based API
- [ ] Testing
- [ ] Unit Tests
- [ ] Integration Testing (mostly for API, auth and importer)
- [ ] Importer: Confiuration of hash algorithm
- [ ] Daemon: Metics
- [ ] Daemon: Streamline Logging Output
- [ ] Auth: finalize OIDC session refresher
- [ ] Auth: OIDC Login Error (handle query parameters: `error`, `error_description`)
- [ ] Debug UI: Implement Playlist View
- [ ] View
- [ ] Edit
module gitlab.servus.at/autoradio/tank
go 1.18
go 1.20
require (
github.com/codegangsta/cli v1.22.12
github.com/codegangsta/cli v1.22.14
github.com/coreos/go-oidc v2.2.1+incompatible
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf
github.com/gin-gonic/gin v1.9.0
github.com/gin-gonic/gin v1.9.1
github.com/jinzhu/gorm v1.9.16
github.com/rs/cors/wrapper/gin v0.0.0-20221003140808-fcebdb403f4d
github.com/swaggo/files v1.0.0
github.com/swaggo/gin-swagger v1.5.3
github.com/rs/cors/wrapper/gin v0.0.0-20230802123556-066574eebbd0
github.com/swaggo/files v1.0.1
github.com/swaggo/gin-swagger v1.6.0
github.com/swaggo/swag v1.16.1
golang.org/x/oauth2 v0.5.0
golang.org/x/oauth2 v0.11.0
gopkg.in/gormigrate.v1 v1.6.0
gopkg.in/yaml.v3 v3.0.1
)
......@@ -21,49 +21,51 @@ replace github.com/codegangsta/cli => github.com/urfave/cli v1.22.10
require (
github.com/KyleBanks/depth v1.2.1 // indirect
github.com/bytedance/sonic v1.8.0 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
github.com/bytedance/sonic v1.10.0-rc3 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect
github.com/chenzhuoyu/iasm v0.9.0 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
github.com/ghodss/yaml v1.0.0 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-openapi/jsonpointer v0.19.6 // indirect
github.com/go-openapi/jsonpointer v0.20.0 // indirect
github.com/go-openapi/jsonreference v0.20.2 // indirect
github.com/go-openapi/spec v0.20.9 // indirect
github.com/go-openapi/swag v0.22.3 // indirect
github.com/go-openapi/swag v0.22.4 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.11.2 // indirect
github.com/go-playground/validator/v10 v10.15.0 // indirect
github.com/go-sql-driver/mysql v1.5.0 // indirect
github.com/goccy/go-json v0.10.0 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/goccy/go-json v0.10.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/cpuid/v2 v2.0.9 // indirect
github.com/leodido/go-urn v1.2.1 // indirect
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
github.com/leodido/go-urn v1.2.4 // indirect
github.com/lib/pq v1.1.1 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-isatty v0.0.17 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pelletier/go-toml/v2 v2.0.6 // indirect
github.com/pelletier/go-toml/v2 v2.0.9 // indirect
github.com/pquerna/cachecontrol v0.1.0 // indirect
github.com/rs/cors v1.8.2 // indirect
github.com/rs/cors v1.9.0 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 // indirect
github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.9 // indirect
github.com/ugorji/go/codec v1.2.11 // indirect
github.com/urfave/cli/v2 v2.25.3 // indirect
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect
golang.org/x/crypto v0.5.0 // indirect
golang.org/x/net v0.10.0 // indirect
golang.org/x/sys v0.8.0 // indirect
golang.org/x/text v0.9.0 // indirect
golang.org/x/tools v0.9.1 // indirect
golang.org/x/arch v0.4.0 // indirect
golang.org/x/crypto v0.12.0 // indirect
golang.org/x/net v0.14.0 // indirect
golang.org/x/sys v0.11.0 // indirect
golang.org/x/text v0.12.0 // indirect
golang.org/x/tools v0.12.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/protobuf v1.28.1 // indirect
google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/square/go-jose.v2 v2.6.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
sigs.k8s.io/yaml v1.3.0 // indirect
......
This diff is collapsed.
......@@ -88,7 +88,7 @@ func (st *Store) metadataFieldsFromFile(show string, id uint64) (map[string]inte
return nil, err
}
fields := make(map[string]interface{})
fields["duration"] = duration
fields["duration"] = duration.Seconds()
fields["size"] = size
// tag names are based on vorbis comments,
......
......@@ -235,6 +235,67 @@ var (
return tx.Table("playlist_entries").DropColumn("duration").Error
},
},
{
ID: "202309141500",
Migrate: func(tx *gorm.DB) error {
type File struct {
ID uint64 `json:"id" gorm:"primary_key"`
CreatedAt time.Time `json:"created"`
UpdatedAt time.Time `json:"updated"`
ShowName string `json:"show" gorm:"not null;index"`
Show Show `json:"-" gorm:"association_foreignkey:Name"`
Source FileSource `json:"source" gorm:"embedded;embedded_prefix:source__"`
Metadata FileMetadata `json:"metadata" gorm:"embedded;embedded_prefix:metadata__"`
Size uint64 `json:"size"`
Duration float64 `json:"duration"`
}
if err := tx.Model(&File{}).ModifyColumn("duration", "float").Error; err != nil {
return err
}
type PlaylistEntry struct {
ID uint64 `json:"-" gorm:"primary_key"`
PlaylistID uint64 `json:"-" gorm:"not null;index;unique_index:unique_playlist_line_numbers"`
LineNum uint `json:"-" gorm:"not null;unique_index:unique_playlist_line_numbers"`
URI string `json:"uri" gorm:"size:1024"`
Duration *float64 `json:"duration,omitempty"`
File *File `json:"file,omitempty" gorm:"association_autoupdate:false;association_autocreate:false"`
FileID *uint64 `json:"-" gorm:"index"`
}
return tx.Model(&PlaylistEntry{}).ModifyColumn("duration", "float").Error
},
Rollback: func(tx *gorm.DB) error {
type File struct {
ID uint64 `json:"id" gorm:"primary_key"`
CreatedAt time.Time `json:"created"`
UpdatedAt time.Time `json:"updated"`
ShowName string `json:"show" gorm:"not null;index"`
Show Show `json:"-" gorm:"association_foreignkey:Name"`
Source FileSource `json:"source" gorm:"embedded;embedded_prefix:source__"`
Metadata FileMetadata `json:"metadata" gorm:"embedded;embedded_prefix:metadata__"`
Size uint64 `json:"size"`
Duration time.Duration `json:"duration"`
}
if err := tx.Model(&File{}).ModifyColumn("duration", "int").Error; err != nil {
return err
}
type PlaylistEntry struct {
ID uint64 `json:"-" gorm:"primary_key"`
PlaylistID uint64 `json:"-" gorm:"not null;index;unique_index:unique_playlist_line_numbers"`
LineNum uint `json:"-" gorm:"not null;unique_index:unique_playlist_line_numbers"`
URI string `json:"uri" gorm:"size:1024"`
Duration *time.Duration `json:"duration,omitempty"`
File *File `json:"file,omitempty" gorm:"association_autoupdate:false;association_autocreate:false"`
FileID *uint64 `json:"-" gorm:"index"`
}
return tx.Model(&Playlist{}).ModifyColumn("duration", "int").Error
},
},
}
)
......
......@@ -580,7 +580,7 @@ func TestFilesSourceHash(t *testing.T) {
type playlistTestEntry struct {
uri string
duration *time.Duration
duration *float64
}
func generateTestPlaylist(entries ...playlistTestEntry) (p Playlist) {
......@@ -615,7 +615,7 @@ func TestPlaylistsListCreateDelete(t *testing.T) {
if err != ErrPlaylistHasMultipleNullDurationEntries {
t.Fatalf("creating playlist with more than one non-file entry without duration should fail with specific error but returned: %v", err)
}
testDuration := time.Second
testDuration := time.Second.Seconds()
in = generateTestPlaylist(playlistTestEntry{"audioin://1", &testDuration}, playlistTestEntry{"http://stream.example.com/live.mp", nil})
testPlaylist, err = store.CreatePlaylist(testShowName, in)
if err != nil {
......
......@@ -177,15 +177,15 @@ type FileMetadata struct {
}
type File struct {
ID uint64 `json:"id" gorm:"primary_key"`
CreatedAt time.Time `json:"created"`
UpdatedAt time.Time `json:"updated"`
ShowName string `json:"show" gorm:"not null;index"`
Show Show `json:"-" gorm:"association_foreignkey:Name"`
Source FileSource `json:"source" gorm:"embedded;embedded_prefix:source__"`
Metadata FileMetadata `json:"metadata" gorm:"embedded;embedded_prefix:metadata__"`
Size uint64 `json:"size"`
Duration time.Duration `json:"duration"`
ID uint64 `json:"id" gorm:"primary_key"`
CreatedAt time.Time `json:"created"`
UpdatedAt time.Time `json:"updated"`
ShowName string `json:"show" gorm:"not null;index"`
Show Show `json:"-" gorm:"association_foreignkey:Name"`
Source FileSource `json:"source" gorm:"embedded;embedded_prefix:source__"`
Metadata FileMetadata `json:"metadata" gorm:"embedded;embedded_prefix:metadata__"`
Size uint64 `json:"size"`
Duration float64 `json:"duration"`
}
//******* ImportLogs
......@@ -204,13 +204,13 @@ type ImportLogs map[string]*Log
//******* Playlists
type PlaylistEntry struct {
ID uint64 `json:"-" gorm:"primary_key"`
PlaylistID uint64 `json:"-" gorm:"not null;index;unique_index:unique_playlist_line_numbers"`
LineNum uint `json:"-" gorm:"not null;unique_index:unique_playlist_line_numbers"`
URI string `json:"uri" gorm:"size:1024"`
Duration *time.Duration `json:"duration,omitempty"`
File *File `json:"file,omitempty" gorm:"association_autoupdate:false;association_autocreate:false"`
FileID *uint64 `json:"-" gorm:"index"`
ID uint64 `json:"-" gorm:"primary_key"`
PlaylistID uint64 `json:"-" gorm:"not null;index;unique_index:unique_playlist_line_numbers"`
LineNum uint `json:"-" gorm:"not null;unique_index:unique_playlist_line_numbers"`
URI string `json:"uri" gorm:"size:1024"`
Duration *float64 `json:"duration,omitempty"`
File *File `json:"file,omitempty" gorm:"association_autoupdate:false;association_autocreate:false"`
FileID *uint64 `json:"-" gorm:"index"`
}
type Playlist struct {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment