54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
package service
|
|
|
|
import (
|
|
"butterfliu/internal/model"
|
|
"butterfliu/internal/repository"
|
|
"butterfliu/internal/util"
|
|
"errors"
|
|
)
|
|
|
|
type CoverService struct {
|
|
mediaRepo *repository.MediaRepository
|
|
songRepo *repository.SongRepository
|
|
albumRepo *repository.AlbumRepository
|
|
}
|
|
|
|
func NewCoverService(mediaRepo *repository.MediaRepository, songRepo *repository.SongRepository, albumRepo *repository.AlbumRepository) *CoverService {
|
|
return &CoverService{
|
|
mediaRepo: mediaRepo,
|
|
songRepo: songRepo,
|
|
albumRepo: albumRepo,
|
|
}
|
|
}
|
|
|
|
func (s *CoverService) getMediaFile(id int) (model.MediaFile, error) {
|
|
song, err := s.songRepo.Get(id)
|
|
if err != nil {
|
|
return model.MediaFile{}, err
|
|
}
|
|
return s.mediaRepo.Get(song.MediaFileID)
|
|
}
|
|
|
|
func (s *CoverService) GetSongCover(id int) (string, error) {
|
|
file, err := s.getMediaFile(id)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
cover, err := util.ExtractCover(file.Path, id)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return cover, nil
|
|
}
|
|
|
|
func (s *CoverService) GetAlbumCover(id int) (string, error) {
|
|
songs, err := s.albumRepo.GetSongIDs(id)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
if len(songs) == 0 {
|
|
return "", errors.New("no songs found for album")
|
|
}
|
|
return s.GetSongCover(songs[0])
|
|
}
|