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 }); }
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 }); }
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); }
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); }