diff --git a/persistence/persistence.go b/persistence/persistence.go index 65ccadcf..9d1766ba 100644 --- a/persistence/persistence.go +++ b/persistence/persistence.go @@ -126,7 +126,19 @@ func (db *NewSQLStore) GC(ctx context.Context) error { if err != nil { return err } - return db.Artist(ctx).(*artistRepository).cleanSearchIndex() + err = db.Artist(ctx).(*artistRepository).cleanSearchIndex() + if err != nil { + return err + } + err = db.MediaFile(ctx).(*mediaFileRepository).cleanAnnotations() + if err != nil { + return err + } + err = db.Album(ctx).(*albumRepository).cleanAnnotations() + if err != nil { + return err + } + return db.Artist(ctx).(*artistRepository).cleanAnnotations() } func (db *NewSQLStore) getOrmer() orm.Ormer { diff --git a/persistence/annotation.go b/persistence/sql_annotations.go similarity index 87% rename from persistence/annotation.go rename to persistence/sql_annotations.go index 7a2607d3..298cc23c 100644 --- a/persistence/annotation.go +++ b/persistence/sql_annotations.go @@ -5,6 +5,7 @@ import ( . "github.com/Masterminds/squirrel" "github.com/astaxie/beego/orm" + "github.com/deluan/navidrome/log" "github.com/deluan/navidrome/model" "github.com/google/uuid" ) @@ -95,3 +96,15 @@ func (r sqlRepository) SetStar(starred bool, ids ...string) error { func (r sqlRepository) SetRating(rating int, itemID string) error { return r.annUpsert(map[string]interface{}{"rating": rating}, itemID) } + +func (r sqlRepository) cleanAnnotations() error { + del := Delete(annotationTable).Where(Eq{"item_type": r.tableName}).Where("item_id not in (select id from " + r.tableName + ")") + c, err := r.executeSQL(del) + if err != nil { + return err + } + if c > 0 { + log.Debug(r.ctx, "Clean-up annotations", "table", r.tableName, "totalDeleted", c) + } + return nil +} diff --git a/persistence/sql_repository.go b/persistence/sql_base_repository.go similarity index 100% rename from persistence/sql_repository.go rename to persistence/sql_base_repository.go diff --git a/persistence/search.go b/persistence/sql_search.go similarity index 100% rename from persistence/search.go rename to persistence/sql_search.go