add genre clean
This commit is contained in:
@@ -14,8 +14,11 @@ func migrateInitSchema() gormigrate.Migration {
|
|||||||
ID: "202002192100",
|
ID: "202002192100",
|
||||||
Migrate: func(tx *gorm.DB) error {
|
Migrate: func(tx *gorm.DB) error {
|
||||||
return tx.AutoMigrate(
|
return tx.AutoMigrate(
|
||||||
Artist{},
|
Genre{},
|
||||||
|
TrackGenre{},
|
||||||
|
AlbumGenre{},
|
||||||
Track{},
|
Track{},
|
||||||
|
Artist{},
|
||||||
User{},
|
User{},
|
||||||
Setting{},
|
Setting{},
|
||||||
Play{},
|
Play{},
|
||||||
@@ -170,6 +173,10 @@ func migrateMultiGenre() gormigrate.Migration {
|
|||||||
TrackGenre{},
|
TrackGenre{},
|
||||||
AlbumGenre{},
|
AlbumGenre{},
|
||||||
)
|
)
|
||||||
|
if err := step.Error; err != nil {
|
||||||
|
return fmt.Errorf("step auto migrate: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
var genreCount int
|
var genreCount int
|
||||||
tx.
|
tx.
|
||||||
Model(Genre{}).
|
Model(Genre{}).
|
||||||
@@ -178,9 +185,6 @@ func migrateMultiGenre() gormigrate.Migration {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := step.Error; err != nil {
|
|
||||||
return fmt.Errorf("step auto migrate: %w", err)
|
|
||||||
}
|
|
||||||
step = tx.Exec(`
|
step = tx.Exec(`
|
||||||
INSERT INTO track_genres (track_id, genre_id)
|
INSERT INTO track_genres (track_id, genre_id)
|
||||||
SELECT id, tag_genre_id
|
SELECT id, tag_genre_id
|
||||||
@@ -188,10 +192,10 @@ func migrateMultiGenre() gormigrate.Migration {
|
|||||||
WHERE tag_genre_id IS NOT NULL;
|
WHERE tag_genre_id IS NOT NULL;
|
||||||
UPDATE tracks SET tag_genre_id=NULL;
|
UPDATE tracks SET tag_genre_id=NULL;
|
||||||
`)
|
`)
|
||||||
|
|
||||||
if err := step.Error; err != nil {
|
if err := step.Error; err != nil {
|
||||||
return fmt.Errorf("step migrate track genres: %w", err)
|
return fmt.Errorf("step migrate track genres: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
step = tx.Exec(`
|
step = tx.Exec(`
|
||||||
INSERT INTO album_genres (album_id, genre_id)
|
INSERT INTO album_genres (album_id, genre_id)
|
||||||
SELECT id, tag_genre_id
|
SELECT id, tag_genre_id
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ func (t *Track) RelPath() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (t *Track) GenreStrings() []string {
|
func (t *Track) GenreStrings() []string {
|
||||||
var strs []string
|
strs := make([]string, 0, len(t.Genres))
|
||||||
for _, genre := range t.Genres {
|
for _, genre := range t.Genres {
|
||||||
strs = append(strs, genre.Name)
|
strs = append(strs, genre.Name)
|
||||||
}
|
}
|
||||||
@@ -197,7 +197,7 @@ func (a *Album) IndexRightPath() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *Album) GenreStrings() []string {
|
func (a *Album) GenreStrings() []string {
|
||||||
var strs []string
|
strs := make([]string, 0, len(a.Genres))
|
||||||
for _, genre := range a.Genres {
|
for _, genre := range a.Genres {
|
||||||
strs = append(strs, genre.Name)
|
strs = append(strs, genre.Name)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -145,6 +145,28 @@ func (s *Scanner) cleanArtists() (int, error) {
|
|||||||
return int(q.RowsAffected), q.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
|
// ## begin entries
|
||||||
// ## begin entries
|
// ## begin entries
|
||||||
@@ -199,6 +221,7 @@ func (s *Scanner) Start(opts ScanOptions) error {
|
|||||||
{name: "tracks", f: s.cleanTracks},
|
{name: "tracks", f: s.cleanTracks},
|
||||||
{name: "folders", f: s.cleanFolders},
|
{name: "folders", f: s.cleanFolders},
|
||||||
{name: "artists", f: s.cleanArtists},
|
{name: "artists", f: s.cleanArtists},
|
||||||
|
{name: "genres", f: s.cleanGenres},
|
||||||
}
|
}
|
||||||
for _, clean := range cleanFuncs {
|
for _, clean := range cleanFuncs {
|
||||||
start = time.Now()
|
start = time.Now()
|
||||||
|
|||||||
Reference in New Issue
Block a user