diff --git a/persistence/db_ledis/checksum_repository.go b/persistence/db_ledis/checksum_repository.go index 7ce2c97e3..c30144e25 100644 --- a/persistence/db_ledis/checksum_repository.go +++ b/persistence/db_ledis/checksum_repository.go @@ -1,8 +1,6 @@ package db_ledis import ( - "errors" - "github.com/cloudsonic/sonic-server/log" "github.com/cloudsonic/sonic-server/scanner" "github.com/siddontang/ledisdb/ledis" @@ -35,14 +33,6 @@ func (r *checkSumRepository) loadData() { log.Debug("Loaded checksums", "total", len(r.data)) } -func (r *checkSumRepository) Put(id, sum string) error { - if id == "" { - return errors.New("ID is required") - } - _, err := Db().HSet(checkSumKeyName, []byte(id), []byte(sum)) - return err -} - func (r *checkSumRepository) Get(id string) (string, error) { return r.data[id], nil } diff --git a/persistence/db_ledis/wire_providers.go b/persistence/db_ledis/wire_providers.go index 2459b56aa..59f66ea5e 100644 --- a/persistence/db_ledis/wire_providers.go +++ b/persistence/db_ledis/wire_providers.go @@ -5,6 +5,5 @@ import ( ) var Set = wire.NewSet( - NewCheckSumRepository, NewNowPlayingRepository, ) diff --git a/persistence/db_storm/checksum_repository.go b/persistence/db_storm/checksum_repository.go new file mode 100644 index 000000000..b4504b5f1 --- /dev/null +++ b/persistence/db_storm/checksum_repository.go @@ -0,0 +1,53 @@ +package db_storm + +import ( + "github.com/asdine/storm" + "github.com/cloudsonic/sonic-server/domain" + "github.com/cloudsonic/sonic-server/log" + "github.com/cloudsonic/sonic-server/scanner" +) + +var ( + checkSumBucket = "_Checksums" +) + +type checkSumRepository struct { + data map[string]string +} + +func NewCheckSumRepository() scanner.CheckSumRepository { + r := &checkSumRepository{} + return r +} + +func (r *checkSumRepository) loadData() error { + loadedData := make(map[string]string) + err := Db().Get(checkSumBucket, checkSumBucket, &loadedData) + if err == storm.ErrNotFound { + return domain.ErrNotFound + } + log.Debug("Loaded checksums", "total", len(loadedData)) + r.data = loadedData + return err +} + +func (r *checkSumRepository) Get(id string) (string, error) { + if r.data == nil { + err := r.loadData() + if err != nil { + return "", err + } + } + return r.data[id], nil +} + +func (r *checkSumRepository) SetData(newSums map[string]string) error { + err := Db().Set(checkSumBucket, checkSumBucket, newSums) + if err != nil { + return err + } + r.data = newSums + return nil +} + +var _ scanner.CheckSumRepository = (*checkSumRepository)(nil) diff --git a/persistence/db_storm/checksum_repository_test.go b/persistence/db_storm/checksum_repository_test.go new file mode 100644 index 000000000..863beebf0 --- /dev/null +++ b/persistence/db_storm/checksum_repository_test.go @@ -0,0 +1,28 @@ +package db_storm + +import ( + "github.com/cloudsonic/sonic-server/scanner" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("ChecksumRepository", func() { + var repo scanner.CheckSumRepository + + BeforeEach(func() { + Db().Drop(checkSumBucket) + repo = NewCheckSumRepository() + repo.SetData(map[string]string{ + "a": "AAA", "b": "BBB", + }) + }) + + It("can retrieve data", func() { + Expect(repo.Get("b")).To(Equal("BBB")) + }) + + It("persists data", func() { + newRepo := NewCheckSumRepository() + Expect(newRepo.Get("b")).To(Equal("BBB")) + }) +}) diff --git a/persistence/db_storm/wire_providers.go b/persistence/db_storm/wire_providers.go index 2228a0f70..fa5f63b63 100644 --- a/persistence/db_storm/wire_providers.go +++ b/persistence/db_storm/wire_providers.go @@ -12,5 +12,6 @@ var Set = wire.NewSet( NewMediaFileRepository, NewArtistIndexRepository, NewPlaylistRepository, + NewCheckSumRepository, persistence.NewMediaFolderRepository, ) diff --git a/scanner/itunes_scanner.go b/scanner/itunes_scanner.go index 870ff6fa3..3d4898a7e 100644 --- a/scanner/itunes_scanner.go +++ b/scanner/itunes_scanner.go @@ -37,7 +37,6 @@ func NewItunesScanner(checksumRepo CheckSumRepository) *ItunesScanner { } type CheckSumRepository interface { - Put(id, sum string) error Get(id string) (string, error) SetData(newSums map[string]string) error } diff --git a/wire_gen.go b/wire_gen.go index 4a7a02686..1bc39d869 100644 --- a/wire_gen.go +++ b/wire_gen.go @@ -19,7 +19,7 @@ import ( // Injectors from wire_injectors.go: func initImporter(musicFolder string) *scanner.Importer { - checkSumRepository := db_ledis.NewCheckSumRepository() + checkSumRepository := db_storm.NewCheckSumRepository() itunesScanner := scanner.NewItunesScanner(checkSumRepository) mediaFileRepository := db_storm.NewMediaFileRepository() albumRepository := db_storm.NewAlbumRepository()