Esempio n. 1
0
        private Source CreateSourceForMetadata(
            Artist artist,
            Relisten.Vendor.ArchiveOrg.Metadata.RootObject detailsRoot,
            Relisten.Vendor.ArchiveOrg.SearchDoc searchDoc,
            string properDisplayDate,
            Venue dbVenue = null
            )
        {
            var meta = detailsRoot.metadata;

            var sbd = meta.identifier.EmptyIfNull().ContainsInsensitive("sbd") ||
                      meta.title.EmptyIfNull().ContainsInsensitive("sbd") ||
                      meta.source.EmptyIfNull().ContainsInsensitive("sbd") ||
                      meta.lineage.EmptyIfNull().ContainsInsensitive("sbd")
            ;

            var remaster = meta.identifier.EmptyIfNull().ContainsInsensitive("remast") ||
                           meta.title.EmptyIfNull().ContainsInsensitive("remast") ||
                           meta.source.EmptyIfNull().ContainsInsensitive("remast") ||
                           meta.lineage.EmptyIfNull().ContainsInsensitive("remast")
            ;

            var flac_type = FlacType.NoFlac;

            if (detailsRoot.files.Any(f => f.format == "24bit Flac"))
            {
                flac_type = FlacType.Flac24Bit;
            }
            else if (detailsRoot.files.Any(f => f.format == "Flac"))
            {
                flac_type = FlacType.Flac16Bit;
            }

            return(new Source()
            {
                artist_id = artist.id,
                is_soundboard = sbd,
                is_remaster = remaster,
                has_jamcharts = false,
                avg_rating = 0,  // dbReviews.Average(rev => 1.0 * rev.rating),
                num_reviews = 0, // dbReviews.Count,
                upstream_identifier = meta.identifier,
                description = meta.description.EmptyIfNull(),
                taper_notes = meta.notes.EmptyIfNull(),
                source = meta.source.EmptyIfNull(),
                taper = meta.taper.EmptyIfNull(),
                transferrer = meta.transferer.EmptyIfNull(),
                lineage = meta.lineage.EmptyIfNull(),
                updated_at = searchDoc._iguana_updated_at,
                venue_id = dbVenue?.id,
                display_date = properDisplayDate,
                flac_type = flac_type
            });
        }
Esempio n. 2
0
        private Source CreateSourceForMetadata(
            Artist artist,
            Relisten.Vendor.ArchiveOrg.Metadata.Metadata meta,
            Relisten.Vendor.ArchiveOrg.SearchDoc searchDoc,
            Venue dbVenue = null
            )
        {
            var sbd = meta.identifier.EmptyIfNull().ContainsInsensitive("sbd") ||
                      meta.title.EmptyIfNull().ContainsInsensitive("sbd") ||
                      meta.source.EmptyIfNull().ContainsInsensitive("sbd") ||
                      meta.lineage.EmptyIfNull().ContainsInsensitive("sbd")
            ;

            var remaster = meta.identifier.EmptyIfNull().ContainsInsensitive("remast") ||
                           meta.title.EmptyIfNull().ContainsInsensitive("remast") ||
                           meta.source.EmptyIfNull().ContainsInsensitive("remast") ||
                           meta.lineage.EmptyIfNull().ContainsInsensitive("remast")
            ;

            return(new Source()
            {
                artist_id = artist.id,
                is_soundboard = sbd,
                is_remaster = remaster,
                has_jamcharts = false,
                avg_rating = 0,  // dbReviews.Average(rev => 1.0 * rev.rating),
                num_reviews = 0, // dbReviews.Count,
                upstream_identifier = meta.identifier,
                description = meta.description.EmptyIfNull(),
                taper_notes = meta.notes.EmptyIfNull(),
                source = meta.source.EmptyIfNull(),
                taper = meta.taper.EmptyIfNull(),
                transferrer = meta.transferer.EmptyIfNull(),
                lineage = meta.lineage.EmptyIfNull(),
                updated_at = searchDoc._iguana_updated_at,
                venue_id = dbVenue?.id,
                display_date = meta.date
            });
        }
Esempio n. 3
0
        private async Task <ImportStats> ImportSingleIdentifier(
            Artist artist,
            Source dbSource,
            Relisten.Vendor.ArchiveOrg.SearchDoc searchDoc,
            Relisten.Vendor.ArchiveOrg.Metadata.RootObject detailsRoot,
            PerformContext ctx
            )
        {
            var stats = new ImportStats();

            var upstream_identifier = searchDoc.identifier;
            var isUpdate            = dbSource != null;

            var meta = detailsRoot.metadata;

            var mp3Files  = detailsRoot.files.Where(file => file.format == "VBR MP3");
            var flacFiles = detailsRoot.files.Where(file => file.format == "Flac");

            if (mp3Files.Count() == 0)
            {
                ctx?.WriteLine("No VBR MP3 files found for {0}", searchDoc.identifier);

                return(stats);
            }

            var dbReviews = detailsRoot.reviews == null
                ? new List <SourceReview>()
                : detailsRoot.reviews.Select(rev =>
            {
                return(new SourceReview()
                {
                    rating = rev.stars * 2, // scale to out of 10
                    title = rev.reviewtitle,
                    review = rev.reviewbody,
                    author = rev.reviewer,
                    updated_at = rev.reviewdate
                });
            }).ToList();

            if (isUpdate)
            {
                var src = CreateSourceForMetadata(artist, meta, searchDoc);
                src.id   = dbSource.id;
                dbSource = await _sourceService.Save(src);

                stats.Updated++;
                stats.Created += (await ReplaceSourceReviews(dbSource, dbReviews)).Count();
                stats.Removed += await _sourceService.DropAllSetsAndTracksForSource(dbSource);
            }
            else
            {
                Venue dbVenue = null;
                if (artist.features.per_source_venues)
                {
                    var venueName = String.IsNullOrEmpty(meta.venue) ? meta.coverage : meta.venue;

                    if (String.IsNullOrEmpty(venueName))
                    {
                        venueName = "Unknown Venue";
                    }

                    var venueUpstreamId = venueName;
                    dbVenue = await _venueService.ForUpstreamIdentifier(artist, venueUpstreamId);

                    if (dbVenue == null)
                    {
                        dbVenue = await _venueService.Save(new Venue()
                        {
                            artist_id           = artist.id,
                            name                = venueName,
                            location            = String.IsNullOrEmpty(meta.coverage) ? "Unknown Location" : meta.coverage,
                            upstream_identifier = venueUpstreamId,
                            slug                = Slugify(venueName),
                            updated_at          = searchDoc._iguana_updated_at
                        });
                    }
                }

                dbSource = await _sourceService.Save(CreateSourceForMetadata(artist, meta, searchDoc, dbVenue));

                stats.Created++;

                stats.Created += (await ReplaceSourceReviews(dbSource, dbReviews)).Count();
            }

            var dbSet = (await _sourceSetService.InsertAll(new[] { CreateSetForSource(dbSource) })).First();

            stats.Created++;

            var flacTracksByName = flacFiles.GroupBy(f => f.name).ToDictionary(g => g.Key, g => g.First());

            var trackNum = 0;
            var dbTracks = mp3Files.
                           Where(file =>
            {
                return(!(
                           (file.title == null && file.original == null) ||
                           file.length == null ||
                           file.name == null
                           ));
            }).
                           OrderBy(file => file.name).
                           Select(file =>
            {
                var r    = CreateSourceTrackForFile(artist, dbSource, meta, file, trackNum, flacTracksByName, dbSet);
                trackNum = r.track_position;
                return(r);
            })
            ;

            stats.Created += (await _sourceTrackService.InsertAll(dbTracks)).Count();

            return(stats);
        }
Esempio n. 4
0
        private async Task <ImportStats> ImportSingleIdentifier(
            Artist artist,
            Source dbSource,
            Relisten.Vendor.ArchiveOrg.SearchDoc searchDoc,
            Relisten.Vendor.ArchiveOrg.Metadata.RootObject detailsRoot,
            ArtistUpstreamSource upstreamSrc,
            string properDisplayDate,
            PerformContext ctx
            )
        {
            var stats = new ImportStats();

            var upstream_identifier = searchDoc.identifier;
            var isUpdate            = dbSource != null;

            var meta = detailsRoot.metadata;

            var mp3Files  = detailsRoot.files?.Where(file => file?.format == "VBR MP3");
            var flacFiles = detailsRoot.files?.Where(file => file?.format == "Flac" || file?.format == "24bit Flac");

            if (mp3Files == null || mp3Files.Count() == 0)
            {
                ctx?.WriteLine("\tNo VBR MP3 files found for {0}", searchDoc.identifier);

                throw new NoVBRMp3FilesException();
            }

            var dbReviews = detailsRoot.reviews == null
                ? new List <SourceReview>()
                : detailsRoot.reviews.Select(rev =>
            {
                return(new SourceReview()
                {
                    rating = rev.stars * 2, // scale to out of 10
                    title = rev.reviewtitle,
                    review = rev.reviewbody?.Replace("Â", "") ?? "",
                    author = rev.reviewer,
                    updated_at = rev.reviewdate
                });
            }).ToList();

            Venue dbVenue = null;

            if (artist.features.per_source_venues)
            {
                var venueName = String.IsNullOrEmpty(meta.venue) ? meta.coverage : meta.venue;

                if (String.IsNullOrEmpty(venueName))
                {
                    venueName = "Unknown Venue";
                }

                var venueUpstreamId = venueName + (String.IsNullOrEmpty(meta.coverage) ? "blank coverage" : meta.coverage);
                dbVenue = await _venueService.ForUpstreamIdentifier(artist, venueUpstreamId);

                if (dbVenue == null)
                {
                    dbVenue = await _venueService.Save(new Venue()
                    {
                        artist_id           = artist.id,
                        name                = venueName,
                        location            = String.IsNullOrEmpty(meta.coverage) ? "Unknown Location" : meta.coverage,
                        upstream_identifier = venueUpstreamId,
                        slug                = Slugify(venueName),
                        updated_at          = searchDoc._iguana_updated_at
                    });
                }
            }

            if (isUpdate)
            {
                var src = CreateSourceForMetadata(artist, detailsRoot, searchDoc, properDisplayDate);
                src.id       = dbSource.id;
                src.venue_id = dbVenue.id;

                dbSource = await _sourceService.Save(src);

                dbSource.venue = dbVenue;

                stats.Updated++;
                stats.Created += (await ReplaceSourceReviews(dbSource, dbReviews)).Count();
            }
            else
            {
                dbSource = await _sourceService.Save(CreateSourceForMetadata(artist, detailsRoot, searchDoc, properDisplayDate, dbVenue));

                stats.Created++;

                existingSources[dbSource.upstream_identifier] = dbSource;

                stats.Created += (await ReplaceSourceReviews(dbSource, dbReviews)).Count();
            }

            stats.Created += (await linkService.AddLinksForSource(dbSource, LinksForSource(artist, dbSource, upstreamSrc))).Count();

            var dbSet = (await _sourceSetService.UpdateAll(dbSource, new[] { CreateSetForSource(dbSource) })).First();

            stats.Created++;

            var flacTracksByName = flacFiles.GroupBy(f => f.name).ToDictionary(g => g.Key, g => g.First());

            var dbTracks = CreateSourceTracksForFiles(artist, dbSource, meta, mp3Files, flacTracksByName, dbSet);

            stats.Created += (await _sourceTrackService.InsertAll(dbSource, dbTracks)).Count();

            ResetTrackSlugCounts();

            return(stats);
        }