add genre clean
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user