Get() methods from all repositories now return a ErrNotFound when the id is nonexistent

This commit is contained in:
Deluan
2016-03-18 11:33:50 -04:00
parent db34122faf
commit c90a50827a
11 changed files with 70 additions and 42 deletions
+8 -10
View File
@@ -1,16 +1,13 @@
package engine
import (
"io"
"os"
"bytes"
"image"
_ "image/gif"
_ "image/jpeg"
_ "image/png"
"bytes"
"image/jpeg"
_ "image/png"
"io"
"os"
"github.com/deluan/gosonic/domain"
"github.com/dhowden/tag"
@@ -31,16 +28,17 @@ func NewCover(mr domain.MediaFileRepository) Cover {
func (c cover) Get(id string, size int, out io.Writer) error {
mf, err := c.mfileRepo.Get(id)
if err != nil {
if err != nil && err != domain.ErrNotFound {
return err
}
var reader io.Reader
if mf != nil && mf.HasCoverArt {
if err == nil && mf.HasCoverArt {
reader, err = readFromTag(mf.Path)
} else {
f, err := os.Open("static/default_cover.jpg")
var f *os.File
f, err = os.Open("static/default_cover.jpg")
if err == nil {
defer f.Close()
reader = f
+14 -3
View File
@@ -3,6 +3,7 @@ package engine
import (
"strings"
"github.com/astaxie/beego"
"github.com/deluan/gomate"
"github.com/deluan/gosonic/domain"
"github.com/kennygrant/sanitize"
@@ -73,7 +74,7 @@ func (s search) SearchArtist(q string, offset int, size int) (*Results, error) {
res := make(Results, len(resp))
for i, id := range resp {
a, err := s.artistRepo.Get(id)
if err != nil {
if criticalError("Artist", id, err) {
return nil, err
}
res[i] = Entry{Id: a.Id, Title: a.Name, IsDir: true}
@@ -92,7 +93,7 @@ func (s search) SearchAlbum(q string, offset int, size int) (*Results, error) {
res := make(Results, len(resp))
for i, id := range resp {
al, err := s.albumRepo.Get(id)
if err != nil {
if criticalError("Album", id, err) {
return nil, err
}
res[i] = FromAlbum(al)
@@ -111,10 +112,20 @@ func (s search) SearchSong(q string, offset int, size int) (*Results, error) {
res := make(Results, len(resp))
for i, id := range resp {
mf, err := s.mfileRepo.Get(id)
if err != nil {
if criticalError("Song", id, err) {
return nil, err
}
res[i] = FromMediaFile(mf)
}
return &res, nil
}
func criticalError(kind, id string, err error) bool {
switch {
case err != nil:
return true
case err == domain.ErrNotFound:
beego.Warn(kind, "Id", id, "not in the DB. Need a reindex?")
}
return false
}