示例#1
0
 private static void HandleResponse(DataContext context, Track track, JsonAcoustIdRequest air)
 {
     air.Results?.ForEach(x =>
     {
         AcoustId dbAid = HandleAcoustId(context, x);
         HandleResult(context, track, dbAid, x);
         HandleRecordings(context, x, dbAid);
     });
 }
示例#2
0
 private static void HandleResult(DataContext context, Track track, AcoustId dbAid, JsonAcoustIdRequest.JsonResult json)
 {
     context.SetAcoustIdResults.Add(new AcoustIdResult
     {
         Track      = track
         , AcoustId = dbAid
         , Score    = json.Score
     });
     context.SaveChanges();
 }
示例#3
0
        public void should_not_fail_if_duration_reported_as_zero()
        {
            UseRealHttp();

            var path       = Path.Combine(TestContext.CurrentContext.TestDirectory, "Files", "Media", "missing.mp3");
            var localTrack = new LocalTrack {
                Path = path
            };
            var acoustId = new AcoustId {
                Duration    = 0,
                Fingerprint = "fingerprint"
            };

            Subject.Lookup(new List <Tuple <LocalTrack, AcoustId> > {
                Tuple.Create(localTrack, acoustId)
            }, 0.5);
        }
示例#4
0
        private static AcoustId HandleAcoustId(DataContext context, JsonAcoustIdRequest.JsonResult json)
        {
            AcoustId dbAid = context.SetAcoustIds.FirstOrDefault(y => y.Id.Equals(json.Id));

            if (null != dbAid)
            {
                return(dbAid);
            }

            // does not exist in database yet
            dbAid = new AcoustId
            {
                Id = json.Id
            };
            context.SetAcoustIds.Add(dbAid);
            context.SaveChanges();

            return(dbAid);
        }
示例#5
0
        public void should_not_throw_if_fingerprint_invalid()
        {
            UseRealHttp();

            var path       = Path.Combine(TestContext.CurrentContext.TestDirectory, "Files", "Media", "missing.mp3");
            var localTrack = new LocalTrack {
                Path = path
            };
            var acoustId = new AcoustId {
                Duration    = 1,
                Fingerprint = "fingerprint"
            };

            var files = new List <Tuple <LocalTrack, AcoustId> > {
                Tuple.Create(localTrack, acoustId)
            };

            Subject.Lookup(files, 0.5);
            files[0].Item1.AcoustIdResults.Should().BeNull();
        }
示例#6
0
        private static void HandleRecordings(DataContext context, JsonAcoustIdRequest.JsonResult json, AcoustId ai)
        {
            json.Recordings?.ForEach(recording =>
            {
                MusicBrainzRecord mbr = context.SetMusicBrainzRecords.Include(x => x.MusicBrainzRecordAcoustIds)
                                        .ThenInclude(x => x.AcoustId)
                                        .FirstOrDefault(x => x.MusicbrainzId.Equals(recording.Id));

                if (null == mbr)
                {
                    // not found in database
                    mbr = new MusicBrainzRecord
                    {
                        MusicbrainzId = recording.Id
                        , MusicBrainzRecordAcoustIds = new List <MusicBrainzRecordAcoustId>()
                    };
                    context.SetMusicBrainzRecords.Add(mbr);
                    context.SaveChanges();
                    mbr.MusicBrainzRecordAcoustIds.Add(new MusicBrainzRecordAcoustId
                    {
                        AcoustIdUniqueId            = ai.UniqueId
                        , AcoustId                  = ai
                        , MusicBrainzRecord         = mbr
                        , MusicBrainzRecordUniqueId = mbr.UniqueId
                    });
                    context.SaveChanges();

                    return; // continue in foreach
                }

                if (mbr.MusicBrainzRecordAcoustIds.Any(x => x.AcoustId.Id.Equals(ai.Id)))
                {
                    // reference already exists
                    return;
                }

                // no reference yet -> create one
                mbr.MusicBrainzRecordAcoustIds.Add(new MusicBrainzRecordAcoustId
                {
                    AcoustIdUniqueId            = ai.UniqueId
                    , AcoustId                  = ai
                    , MusicBrainzRecord         = mbr
                    , MusicBrainzRecordUniqueId = mbr.UniqueId
                });
                context.SaveChanges();
            });
        }