1package model
2
3import (
4	"mime"
5	"time"
6)
7
8type MediaFile struct {
9	Annotations
10	Bookmarkable
11
12	ID                   string    `json:"id"            orm:"pk;column(id)"`
13	Path                 string    `json:"path"`
14	Title                string    `json:"title"`
15	Album                string    `json:"album"`
16	ArtistID             string    `json:"artistId"      orm:"pk;column(artist_id)"`
17	Artist               string    `json:"artist"`
18	AlbumArtistID        string    `json:"albumArtistId" orm:"pk;column(album_artist_id)"`
19	AlbumArtist          string    `json:"albumArtist"`
20	AlbumID              string    `json:"albumId"       orm:"pk;column(album_id)"`
21	HasCoverArt          bool      `json:"hasCoverArt"`
22	TrackNumber          int       `json:"trackNumber"`
23	DiscNumber           int       `json:"discNumber"`
24	DiscSubtitle         string    `json:"discSubtitle"`
25	Year                 int       `json:"year"`
26	Size                 int64     `json:"size"`
27	Suffix               string    `json:"suffix"`
28	Duration             float32   `json:"duration"`
29	BitRate              int       `json:"bitRate"`
30	Genre                string    `json:"genre"`
31	FullText             string    `json:"fullText"`
32	SortTitle            string    `json:"sortTitle"`
33	SortAlbumName        string    `json:"sortAlbumName"`
34	SortArtistName       string    `json:"sortArtistName"`
35	SortAlbumArtistName  string    `json:"sortAlbumArtistName"`
36	OrderAlbumName       string    `json:"orderAlbumName"`
37	OrderArtistName      string    `json:"orderArtistName"`
38	OrderAlbumArtistName string    `json:"orderAlbumArtistName"`
39	Compilation          bool      `json:"compilation"`
40	Comment              string    `json:"comment"`
41	Lyrics               string    `json:"lyrics"`
42	CatalogNum           string    `json:"catalogNum"`
43	MbzTrackID           string    `json:"mbzTrackId"         orm:"column(mbz_track_id)"`
44	MbzAlbumID           string    `json:"mbzAlbumId"         orm:"column(mbz_album_id)"`
45	MbzArtistID          string    `json:"mbzArtistId"        orm:"column(mbz_artist_id)"`
46	MbzAlbumArtistID     string    `json:"mbzAlbumArtistId"   orm:"column(mbz_album_artist_id)"`
47	MbzAlbumType         string    `json:"mbzAlbumType"`
48	MbzAlbumComment      string    `json:"mbzAlbumComment"`
49	CreatedAt            time.Time `json:"createdAt"`
50	UpdatedAt            time.Time `json:"updatedAt"`
51}
52
53func (mf *MediaFile) ContentType() string {
54	return mime.TypeByExtension("." + mf.Suffix)
55}
56
57type MediaFiles []MediaFile
58
59type MediaFileRepository interface {
60	CountAll(options ...QueryOptions) (int64, error)
61	Exists(id string) (bool, error)
62	Put(m *MediaFile) error
63	Get(id string) (*MediaFile, error)
64	GetAll(options ...QueryOptions) (MediaFiles, error)
65	FindByAlbum(albumId string) (MediaFiles, error)
66	FindAllByPath(path string) (MediaFiles, error)
67	FindByPath(path string) (*MediaFile, error)
68	FindPathsRecursively(basePath string) ([]string, error)
69	GetStarred(options ...QueryOptions) (MediaFiles, error)
70	GetRandom(options ...QueryOptions) (MediaFiles, error)
71	Search(q string, offset int, size int) (MediaFiles, error)
72	Delete(id string) error
73	DeleteByPath(path string) (int64, error)
74
75	AnnotatedRepository
76	BookmarkableRepository
77}
78
79func (mf MediaFile) GetAnnotations() Annotations {
80	return mf.Annotations
81}
82