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