diff --git a/model/mediafile.go b/model/mediafile.go index 9ecc07bad..a3d96807a 100644 --- a/model/mediafile.go +++ b/model/mediafile.go @@ -42,7 +42,7 @@ type MediaFiles []MediaFile type MediaFileRepository interface { CountAll() (int64, error) Exists(id string) (bool, error) - Put(m *MediaFile) error + Put(m *MediaFile, overrideAnnotation bool) error Get(id string) (*MediaFile, error) FindByAlbum(albumId string) (MediaFiles, error) FindByPath(path string) (MediaFiles, error) diff --git a/persistence/album_repository.go b/persistence/album_repository.go index 36ba89c76..f51b581f6 100644 --- a/persistence/album_repository.go +++ b/persistence/album_repository.go @@ -140,8 +140,9 @@ group by album_id order by f.id`, strings.Join(ids, "','")) } if len(toUpdate) > 0 { for _, al := range toUpdate { - _, err := o.Update(&al, "name", "artist_id", "cover_art_path", "cover_art_id", "artist", "album_artist", "year", - "compilation", "play_count", "song_count", "duration", "updated_at") + // Don't update Starred/Rating + _, err := o.Update(&al, "name", "artist_id", "cover_art_path", "cover_art_id", "artist", "album_artist", + "year", "compilation", "play_count", "play_date", "song_count", "duration", "updated_at", "created_at") if err != nil { return err } diff --git a/persistence/artist_repository.go b/persistence/artist_repository.go index 345edba7f..077dc7385 100644 --- a/persistence/artist_repository.go +++ b/persistence/artist_repository.go @@ -145,7 +145,8 @@ where f.artist_id in ('%s') group by f.artist_id order by f.id`, strings.Join(id } if len(toUpdate) > 0 { for _, al := range toUpdate { - _, err := o.Update(&al) + // Don't update Starred + _, err := o.Update(&al, "name", "album_count") if err != nil { return err } diff --git a/persistence/mediafile_repository.go b/persistence/mediafile_repository.go index b04f4071d..b8b1d93d5 100644 --- a/persistence/mediafile_repository.go +++ b/persistence/mediafile_repository.go @@ -47,9 +47,15 @@ func NewMediaFileRepository() model.MediaFileRepository { return r } -func (r *mediaFileRepository) Put(m *model.MediaFile) error { +func (r *mediaFileRepository) Put(m *model.MediaFile, overrideAnnotation bool) error { tm := mediaFile(*m) return withTx(func(o orm.Ormer) error { + if !overrideAnnotation { + // Don't update media annotation fields (playcount, starred, etc..) + return r.put(o, m.ID, m.Title, &tm, "path", "title", "album", "artist", "artist_id", "album_artist", + "album_id", "has_cover_art", "track_number", "disc_number", "year", "size", "suffix", "duration", + "bit_rate", "genre", "compilation", "updated_at") + } return r.put(o, m.ID, m.Title, &tm) }) } diff --git a/persistence/mediafile_repository_test.go b/persistence/mediafile_repository_test.go index f61edde47..4a42feca7 100644 --- a/persistence/mediafile_repository_test.go +++ b/persistence/mediafile_repository_test.go @@ -19,7 +19,6 @@ var _ = Describe("MediaFileRepository", func() { Describe("FindByPath", func() { It("returns all records from a given ArtistID", func() { path := string(os.PathSeparator) + filepath.Join("beatles", "1") - println("Searching path", path) // TODO Remove Expect(repo.FindByPath(path)).To(Equal(model.MediaFiles{ songComeTogether, })) diff --git a/persistence/persistence_suite_test.go b/persistence/persistence_suite_test.go index fea1c329c..da3d40e8a 100644 --- a/persistence/persistence_suite_test.go +++ b/persistence/persistence_suite_test.go @@ -71,7 +71,7 @@ var _ = Describe("Initialize test DB", func() { } mediaFileRepository := NewMediaFileRepository() for _, s := range testSongs { - err := mediaFileRepository.Put(&s) + err := mediaFileRepository.Put(&s, true) if err != nil { panic(err) } diff --git a/persistence/searchable_repository.go b/persistence/searchable_repository.go index 7bc79e146..3f7f458d1 100644 --- a/persistence/searchable_repository.go +++ b/persistence/searchable_repository.go @@ -29,7 +29,7 @@ func (r *searchableRepository) DeleteAll() error { }) } -func (r *searchableRepository) put(o orm.Ormer, id string, textToIndex string, a interface{}) error { +func (r *searchableRepository) put(o orm.Ormer, id string, textToIndex string, a interface{}, fields ...string) error { c, err := r.newQuery(o).Filter("id", id).Count() if err != nil { return err @@ -40,7 +40,7 @@ func (r *searchableRepository) put(o orm.Ormer, id string, textToIndex string, a err = nil } } else { - _, err = o.Update(a) + _, err = o.Update(a, fields...) } if err != nil { return err diff --git a/scanner/tag_scanner.go b/scanner/tag_scanner.go index d0fbcbc95..4a3f60d2b 100644 --- a/scanner/tag_scanner.go +++ b/scanner/tag_scanner.go @@ -169,7 +169,7 @@ func (s *TagScanner) processChangedDir(dir string, updatedArtists map[string]boo for _, n := range newTracks { c, ok := currentTracks[n.ID] if !ok || (ok && n.UpdatedAt.After(c.UpdatedAt)) { - err := s.repos.mediaFile.Put(&n) + err := s.repos.mediaFile.Put(&n, false) updatedArtists[n.ArtistID] = true updatedAlbums[n.AlbumID] = true numUpdatedTracks++ diff --git a/scanner_legacy/importer.go b/scanner_legacy/importer.go index 976794384..749023dad 100644 --- a/scanner_legacy/importer.go +++ b/scanner_legacy/importer.go @@ -179,7 +179,7 @@ func (i *Importer) importMediaFiles() (model.MediaFiles, int) { mf.StarredAt = original.StarredAt } } - if err := i.mfRepo.Put(mf); err != nil { + if err := i.mfRepo.Put(mf, true); err != nil { log.Error(err) } updates++