122 lines
1.9 KiB
Go
122 lines
1.9 KiB
Go
package common
|
|
|
|
import (
|
|
"slices"
|
|
"time"
|
|
)
|
|
|
|
type Song struct {
|
|
artists []string
|
|
title string
|
|
file string
|
|
albumartists []string
|
|
track string
|
|
length uint64
|
|
date string
|
|
lastModified time.Time
|
|
}
|
|
|
|
func NewSong(artist string, title string, file string) *Song {
|
|
song := Song{
|
|
artists: []string{artist},
|
|
title: title,
|
|
file: file,
|
|
}
|
|
|
|
return &song
|
|
}
|
|
|
|
func (s *Song) AddArtist(artist string) {
|
|
s.artists = append(s.artists, artist)
|
|
}
|
|
|
|
func (s *Song) AddAlbumartist(artist string) {
|
|
s.albumartists = append(s.albumartists, artist)
|
|
}
|
|
|
|
func (s *Song) SongArtists() []string {
|
|
if len(s.albumartists) > 0 {
|
|
songArtists := []string{}
|
|
for _, artist := range s.artists {
|
|
if !slices.Contains(s.albumartists, artist) {
|
|
songArtists = append(songArtists, artist)
|
|
}
|
|
}
|
|
|
|
return songArtists
|
|
}
|
|
|
|
return []string{}
|
|
}
|
|
|
|
func (s *Song) AlbumArtists() []string {
|
|
if len(s.albumartists) > 0 {
|
|
return s.albumartists
|
|
}
|
|
|
|
return s.artists
|
|
}
|
|
|
|
func (s *Song) Title() string {
|
|
return s.title
|
|
}
|
|
|
|
func (s *Song) File() string {
|
|
return s.file
|
|
}
|
|
|
|
func (s *Song) SetTrack(track string) {
|
|
s.track = track
|
|
}
|
|
|
|
func (s *Song) Track() string {
|
|
return s.track
|
|
}
|
|
|
|
func (s *Song) SetLength(length uint64) {
|
|
s.length = length
|
|
}
|
|
|
|
func (s *Song) Length() uint64 {
|
|
return s.length
|
|
}
|
|
|
|
func (s *Song) SetDate(date string) {
|
|
s.date = date
|
|
}
|
|
|
|
func (s *Song) Date() string {
|
|
return s.date
|
|
}
|
|
|
|
func (s *Song) SetLastModified(lastModified time.Time) {
|
|
s.lastModified = lastModified
|
|
}
|
|
|
|
func (s *Song) LastModified() time.Time {
|
|
return s.lastModified
|
|
}
|
|
|
|
type PlaylistSong struct {
|
|
*Song
|
|
id string
|
|
pos uint64
|
|
}
|
|
|
|
func NewPlaylistSong(song *Song, id string, pos uint64) *PlaylistSong {
|
|
playlistSong := &PlaylistSong{
|
|
Song: song,
|
|
id: id,
|
|
pos: pos,
|
|
}
|
|
|
|
return playlistSong
|
|
}
|
|
|
|
func (t *PlaylistSong) ID() string {
|
|
return t.id
|
|
}
|
|
|
|
func (t *PlaylistSong) Pos() uint64 {
|
|
return t.pos
|
|
}
|