add genre clean

This commit is contained in:
sentriz
2020-12-30 18:27:13 +00:00
parent 6a15955513
commit 8492561d2b
3 changed files with 34 additions and 7 deletions

View File

@@ -14,8 +14,11 @@ func migrateInitSchema() gormigrate.Migration {
ID: "202002192100",
Migrate: func(tx *gorm.DB) error {
return tx.AutoMigrate(
Artist{},
Genre{},
TrackGenre{},
AlbumGenre{},
Track{},
Artist{},
User{},
Setting{},
Play{},
@@ -170,6 +173,10 @@ func migrateMultiGenre() gormigrate.Migration {
TrackGenre{},
AlbumGenre{},
)
if err := step.Error; err != nil {
return fmt.Errorf("step auto migrate: %w", err)
}
var genreCount int
tx.
Model(Genre{}).
@@ -178,9 +185,6 @@ func migrateMultiGenre() gormigrate.Migration {
return nil
}
if err := step.Error; err != nil {
return fmt.Errorf("step auto migrate: %w", err)
}
step = tx.Exec(`
INSERT INTO track_genres (track_id, genre_id)
SELECT id, tag_genre_id
@@ -188,10 +192,10 @@ func migrateMultiGenre() gormigrate.Migration {
WHERE tag_genre_id IS NOT NULL;
UPDATE tracks SET tag_genre_id=NULL;
`)
if err := step.Error; err != nil {
return fmt.Errorf("step migrate track genres: %w", err)
}
step = tx.Exec(`
INSERT INTO album_genres (album_id, genre_id)
SELECT id, tag_genre_id

View File

@@ -126,7 +126,7 @@ func (t *Track) RelPath() string {
}
func (t *Track) GenreStrings() []string {
var strs []string
strs := make([]string, 0, len(t.Genres))
for _, genre := range t.Genres {
strs = append(strs, genre.Name)
}
@@ -197,7 +197,7 @@ func (a *Album) IndexRightPath() string {
}
func (a *Album) GenreStrings() []string {
var strs []string
strs := make([]string, 0, len(a.Genres))
for _, genre := range a.Genres {
strs = append(strs, genre.Name)
}

View File

@@ -145,6 +145,28 @@ func (s *Scanner) cleanArtists() (int, error) {
return int(q.RowsAffected), q.Error
}
func (s *Scanner) cleanGenres() (int, error) {
subTrack := s.db.
Select("genres.id").
Model(&db.Genre{}).
Joins("JOIN track_genres ON track_genres.genre_id=genres.id").
Joins("LEFT JOIN tracks ON tracks.id=track_genres.track_id").
Where("tracks.id IS NULL").
SubQuery()
subAlbum := s.db.
Select("genres.id").
Model(&db.Genre{}).
Joins("JOIN album_genres ON album_genres.genre_id=genres.id").
Joins("LEFT JOIN albums ON albums.id=album_genres.album_id").
Where("albums.id IS NULL").
SubQuery()
q := s.db.
Where("genres.id IN ?", subTrack).
Or("genres.id IN ?", subAlbum).
Delete(&db.Genre{})
return int(q.RowsAffected), q.Error
}
// ## begin entries
// ## begin entries
// ## begin entries
@@ -199,6 +221,7 @@ func (s *Scanner) Start(opts ScanOptions) error {
{name: "tracks", f: s.cleanTracks},
{name: "folders", f: s.cleanFolders},
{name: "artists", f: s.cleanArtists},
{name: "genres", f: s.cleanGenres},
}
for _, clean := range cleanFuncs {
start = time.Now()