示例#1
0
        public static MusicBrainzAlias Map(DataContext context, JsonMusicBrainzRequest.Alias json)
        {
            MusicBrainzAlias alias = new MusicBrainzAlias
            {
                Name        = json.Name
                , Begin     = json.Begin
                , TypeId    = json.TypeId
                , End       = json.End
                , Primary   = json.Primary
                , ShortName = json.ShortName
                , Type      = json.Type
                , Locale    = json.Locale
                , Ended     = json.Ended
            };

            alias.UniqueHash = Comparator.ComputeContentHash(alias);

            MusicBrainzAlias dbAlias = context.SetAliases.FirstOrDefault(x => x.UniqueHash.Equals(alias.UniqueHash));

            if (null != dbAlias)
            {
                // already in db
                return(dbAlias);
            }

            context.SetAliases.Add(alias);
            context.SaveChanges();

            return(alias);
        }
示例#2
0
        private static MusicBrainzReleaseEvent Map(DataContext context, JsonMusicBrainzRequest.Release.ReleaseEvent json)
        {
            DateTime?parsedDate = DateTimeParserPipe.Process(json.Date);

            MusicBrainzReleaseEvent events = new MusicBrainzReleaseEvent
            {
                Date   = parsedDate
                , Area = null == json.Area ? null : Map(context, json.Area)
            };

            events.UniqueHash = Comparator.ComputeContentHash(events);

            MusicBrainzReleaseEvent dbEvent =
                context.SetReleaseEvents.FirstOrDefault(x => x.UniqueHash.Equals(events.UniqueHash));

            if (null != dbEvent)
            {
                // already in db
                return(dbEvent);
            }

            context.SetReleaseEvents.Add(events);
            context.SaveChanges();

            return(events);
        }
示例#3
0
        public static MusicBrainzArtistCredit Map(DataContext context, JsonMusicBrainzRequest.ClaArtistCredit json)
        {
            MusicBrainzArtistCredit credit = new MusicBrainzArtistCredit
            {
                Name         = json.Name
                , Joinphrase = json.Joinphrase
                , Artist     = null == json.Artist ? null : Map(context, json.Artist)
            };

            credit.UniqueHash = Comparator.ComputeContentHash(credit);

            MusicBrainzArtistCredit dbCredit =
                context.SetArtistCredits.FirstOrDefault(x => x.UniqueHash.Equals(credit.UniqueHash));

            if (null != dbCredit)
            {
                // already in db
                return(dbCredit);
            }

            context.SetArtistCredits.Add(credit);
            context.SaveChanges();

            return(credit);
        }
示例#4
0
        private static MusicBrainzTextRepresentation Map(DataContext context
                                                         , JsonMusicBrainzRequest.Release.ClaTextRepresentation json)
        {
            MusicBrainzTextRepresentation text = new MusicBrainzTextRepresentation
            {
                Language = json.Language
                , Script = json.Script
            };

            text.UniqueHash = Comparator.ComputeContentHash(text);

            MusicBrainzTextRepresentation dbText =
                context.SetTextRepresentations.FirstOrDefault(x => x.UniqueHash.Equals(text.UniqueHash));

            if (null != dbText)
            {
                // already in db
                return(dbText);
            }

            context.SetTextRepresentations.Add(text);
            context.SaveChanges();

            return(text);
        }
示例#5
0
        private static MusicBrainzArtist Map(DataContext context, JsonMusicBrainzRequest.ClaArtistCredit.ClaArtist json)
        {
            // references
            List <MusicBrainzAlias> aliases =
                json.Aliases?.Select(x => Map(context, x)).ToList() ?? new List <MusicBrainzAlias>();

            // main object
            MusicBrainzArtist artist = new MusicBrainzArtist
            {
                Name             = json.Name
                , Disambiguation = json.Disambiguation
                , SortName       = json.SortName
            };

            artist.UniqueHash = Comparator.ComputeContentHash(artist);

            MusicBrainzArtist dbArtist = context.SetArtists.Include(x => x.MusicBrainzArtistMusicBrainzAliases)
                                         .ThenInclude(x => x.MusicBrainzAlias)
                                         .FirstOrDefault(x => x.UniqueHash.Equals(artist.UniqueHash));

            if (null == dbArtist)
            {
                // new entry

                // save to generate primary key
                context.SetArtists.Add(artist);
                context.SaveChanges();

                // references
                artist.MusicBrainzArtistMusicBrainzAliases = aliases.Select(x => NewShadow(artist, x)).ToList();
                context.SaveChanges();

                return(artist);
            }

            // already exists, only check for new references
            IEnumerable <Int32> existingAliasIds =
                dbArtist.MusicBrainzArtistMusicBrainzAliases.Select(x => x.MusicBrainzAlias.UniqueId);
            IEnumerable <Int32> newAliasIds = aliases.Select(x => x.UniqueId).Except(existingAliasIds).Distinct();
            IEnumerable <MusicBrainzArtistMusicBrainzAlias> newAliases =
                aliases.Where(x => newAliasIds.Contains(x.UniqueId)).Select(x => NewShadow(dbArtist, x));

            dbArtist.MusicBrainzArtistMusicBrainzAliases.AddRange(newAliases);

            context.SaveChanges();

            return(dbArtist);
        }
        public void ComparatorComputeContentHash()
        {
            List <Tuple <Object, String> > inputs = new List <Tuple <Object, String> >
            {
                new Tuple <Object, String>(new ExampleClass(),
                                           "wel6y4rRE+fpNcCLQAOM9D9A6OZQVDb7Fb7bBpZHOK5+KKXvji9p3LokPZ+zvMx2xOzoax0K15xm3sZRCOi7ig=="),
                new Tuple <Object, String>("This is my String.",
                                           "MCfv18vve7mCH2gZzI4sQD/BOhj5ZFfEd5WDiEi/Dcz4LiwvrDhOnOYa0+IMTncp3cXgT5q2hxhOvtKfyerHYA=="),
                new Tuple <Object, String>(1337,
                                           "bwrGX+ARiGYKrZAL/hbFZuvw5WwKfUoVvYMQSRCN6AvTovvxqLkWYkM6QEWOwgiiB8qwc/GQvWW4ieleT8qOCQ=="),
                new Tuple <Object, String>("1337",
                                           "FEbZUAIL2RC/ChNoEisBIehKUnj+Ttaa7OYSL8/fREMe0KtKYBK8DjwlO4Zt8aOMvNNoYvk9b7jvyeAGWUfILQ=="),
                new Tuple <Object, String>(DateTime.MinValue,
                                           "Nftww8LP6xU0jSNlEPgd5LE9PO8gPl6Jy5sBTcl1PVocAAy/IDMzCbXgxGv1YWIPgGlPcyxfw6D8t4u7qHWqWQ==")
            };

            foreach (Tuple <Object, String> input in inputs)
            {
                Assert.AreEqual(input.Item2, Comparator.ComputeContentHash(input.Item1));
            }
        }
示例#7
0
        public static MusicBrainzTag Map(DataContext context, JsonMusicBrainzRequest.Tag json)
        {
            MusicBrainzTag tag = new MusicBrainzTag
            {
                Name    = json.Name
                , Count = json.Count
            };

            tag.UniqueHash = Comparator.ComputeContentHash(tag);

            MusicBrainzTag dbTag = context.SetTags.FirstOrDefault(x => x.UniqueHash.Equals(tag.UniqueHash));

            if (null != dbTag)
            {
                // already in db
                return(dbTag);
            }

            context.SetTags.Add(tag);
            context.SaveChanges();

            return(tag);
        }
示例#8
0
        public static MusicBrainzRelease Map(DataContext context, JsonMusicBrainzRequest.Release json)
        {
            // references
            List <MusicBrainzArtistCredit> credits = json.ArtistCredit?.Select(x => Map(context, x)).ToList()
                                                     ?? new List <MusicBrainzArtistCredit>();
            List <MusicBrainzReleaseEvent> events = json.ReleaseEvents?.Select(x => Map(context, x)).ToList()
                                                    ?? new List <MusicBrainzReleaseEvent>();
            List <MusicBrainzAlias> aliases =
                json.Aliases?.Select(x => Map(context, x)).ToList() ?? new List <MusicBrainzAlias>();

            // main object
            DateTime?parsedDate = DateTimeParserPipe.Process(json.Date);

            MusicBrainzRelease release = new MusicBrainzRelease
            {
                Date                 = parsedDate
                , Status             = json.Status
                , Id                 = json.Id
                , Barcode            = json.Barcode
                , Country            = json.Country
                , Disambiguation     = json.Disambiguation
                , PackagingId        = json.PackagingId
                , Quality            = json.Quality
                , StatusId           = json.StatusId
                , Title              = json.Title
                , TextRepresentation = null == json.TextRepresentation ? null : Map(context, json.TextRepresentation)
            };

            release.UniqueHash = Comparator.ComputeContentHash(release);

            MusicBrainzRelease dbRelease = context.SetReleases.Include(x => x.MusicBrainzReleaseEventMusicBrainzReleases)
                                           .ThenInclude(x => x.MusicBrainzReleaseEvent)
                                           .Include(x => x.MusicBrainzReleaseMusicBrainzAliases)
                                           .ThenInclude(x => x.MusicBrainzAlias)
                                           .Include(x => x.MusicBrainzReleaseMusicBrainzArtistCredits)
                                           .ThenInclude(x => x.MusicBrainzArtistCredit)
                                           .FirstOrDefault(x => x.UniqueHash.Equals(release.UniqueHash));

            if (null == dbRelease)
            {
                // new entry

                // save to generate primary key
                context.SetReleases.Add(release);
                context.SaveChanges();

                // references
                release.MusicBrainzReleaseMusicBrainzArtistCredits = credits.Select(x => NewShadow(release, x)).ToList();
                release.MusicBrainzReleaseEventMusicBrainzReleases = events.Select(x => NewShadow(release, x)).ToList();
                release.MusicBrainzReleaseMusicBrainzAliases       = aliases.Select(x => NewShadow(release, x)).ToList();

                context.SaveChanges();
                return(release);
            }

            // already exists, only check for new references

            // credits
            IEnumerable <Int32> existingCreditIds =
                dbRelease.MusicBrainzReleaseMusicBrainzArtistCredits.Select(x => x.MusicBrainzArtistCredit.UniqueId);
            IEnumerable <Int32> newCreditIds = credits.Select(x => x.UniqueId).Except(existingCreditIds).Distinct();
            IEnumerable <MusicBrainzReleaseMusicBrainzArtistCredit> newCredits =
                credits.Where(x => newCreditIds.Contains(x.UniqueId)).Select(x => NewShadow(dbRelease, x));

            dbRelease.MusicBrainzReleaseMusicBrainzArtistCredits.AddRange(newCredits);

            // release events
            IEnumerable <Int32> existingEventIds =
                dbRelease.MusicBrainzReleaseEventMusicBrainzReleases.Select(x => x.MusicBrainzReleaseEvent.UniqueId);
            IEnumerable <Int32> newEventIds = events.Select(x => x.UniqueId).Except(existingEventIds).Distinct();
            IEnumerable <MusicBrainzReleaseEventMusicBrainzRelease> newEvents =
                events.Where(x => newEventIds.Contains(x.UniqueId)).Select(x => NewShadow(dbRelease, x));

            dbRelease.MusicBrainzReleaseEventMusicBrainzReleases.AddRange(newEvents);

            // aliases
            IEnumerable <Int32> existingAliasIds =
                dbRelease.MusicBrainzReleaseMusicBrainzAliases.Select(x => x.MusicBrainzAlias.UniqueId);
            IEnumerable <Int32> newAliasIds = aliases.Select(x => x.UniqueId).Except(existingAliasIds).Distinct();
            IEnumerable <MusicBrainzReleaseMusicBrainzAlias> newAliases =
                aliases.Where(x => newAliasIds.Contains(x.UniqueId)).Select(x => NewShadow(dbRelease, x));

            dbRelease.MusicBrainzReleaseMusicBrainzAliases.AddRange(newAliases);

            context.SaveChanges();

            return(dbRelease);
        }