diff --git a/model/album.go b/model/album.go index 059519457..b452caa48 100644 --- a/model/album.go +++ b/model/album.go @@ -38,4 +38,5 @@ type AlbumRepository interface { GetStarred(...QueryOptions) (Albums, error) Search(q string, offset int, size int) (Albums, error) Refresh(ids ...string) error + PurgeEmpty() error } diff --git a/model/artist.go b/model/artist.go index 59dea872a..a2af148ba 100644 --- a/model/artist.go +++ b/model/artist.go @@ -22,4 +22,5 @@ type ArtistRepository interface { Search(q string, offset int, size int) (Artists, error) Refresh(ids ...string) error GetIndex() (ArtistIndexes, error) + PurgeEmpty() error } diff --git a/persistence/album_repository.go b/persistence/album_repository.go index c5d7a2068..de046da6d 100644 --- a/persistence/album_repository.go +++ b/persistence/album_repository.go @@ -157,6 +157,12 @@ func (r *albumRepository) PurgeInactive(activeList model.Albums) error { }) } +func (r *albumRepository) PurgeEmpty() error { + o := Db() + _, err := o.Raw("delete from album where id not in (select distinct(album_id) from media_file)").Exec() + return err +} + func (r *albumRepository) GetStarred(options ...model.QueryOptions) (model.Albums, error) { var starred []album _, err := r.newQuery(Db(), options...).Filter("starred", true).All(&starred) diff --git a/persistence/artist_repository.go b/persistence/artist_repository.go index b46122cd3..e0f3bb795 100644 --- a/persistence/artist_repository.go +++ b/persistence/artist_repository.go @@ -160,6 +160,12 @@ func (r *artistRepository) PurgeInactive(activeList model.Artists) error { }) } +func (r *artistRepository) PurgeEmpty() error { + o := Db() + _, err := o.Raw("delete from artist where id not in (select distinct(artist_id) from album)").Exec() + return err +} + func (r *artistRepository) Search(q string, offset int, size int) (model.Artists, error) { if len(q) <= 2 { return nil, nil diff --git a/scanner/tag_scanner.go b/scanner/tag_scanner.go index 46c76898f..c28a918df 100644 --- a/scanner/tag_scanner.go +++ b/scanner/tag_scanner.go @@ -80,6 +80,16 @@ func (s *TagScanner) Scan(ctx context.Context, lastModifiedSince time.Time) erro return err } + err = s.repos.album.PurgeEmpty() + if err != nil { + return err + } + + err = s.repos.artist.PurgeEmpty() + if err != nil { + return err + } + return nil }