Example #1
0
        private async Task ProcessSetlistShow(ImportStats stats, PhishinShow show, Artist artist, Source dbSource, IDictionary <string, SourceSet> sets)
        {
            var dbShow = existingSetlistShows.GetValue(show.date);

            var addSongs = false;

            if (dbShow == null)
            {
                dbShow = await _setlistShowService.Save(new SetlistShow()
                {
                    artist_id           = artist.id,
                    upstream_identifier = show.date,
                    date       = DateTime.Parse(show.date),
                    venue_id   = existingVenues[show.venue.id.ToString()].id,
                    tour_id    = existingTours[show.tour_id.ToString()].id,
                    era_id     = yearToEraMapping.GetValue(show.date.Substring(0, 4), yearToEraMapping["1983-1987"]).id,
                    updated_at = dbSource.updated_at
                });

                stats.Created++;

                addSongs = true;
            }
            else if (show.updated_at > dbShow.updated_at)
            {
                dbShow.date       = DateTime.Parse(show.date);
                dbShow.venue_id   = existingVenues[show.venue.id.ToString()].id;
                dbShow.tour_id    = existingTours[show.tour_id.ToString()].id;
                dbShow.era_id     = yearToEraMapping.GetValue(show.date.Substring(0, 4), yearToEraMapping["1983-1987"]).id;
                dbShow.updated_at = dbSource.updated_at;

                dbShow = await _setlistShowService.Save(dbShow);

                stats.Updated++;
                stats.Removed += await _setlistShowService.RemoveSongPlays(dbShow);

                addSongs = true;
            }

            if (addSongs)
            {
                var dbSongs = show.tracks.
                              SelectMany(phishinTrack => phishinTrack.song_ids.Select(song_id => existingSetlistSongs.GetValue(song_id.ToString()))).
                              Where(t => t != null).
                              GroupBy(t => t.upstream_identifier).
                              Select(g => g.First()).
                              ToList()
                ;

                stats.Created += await _setlistShowService.AddSongPlays(dbShow, dbSongs);
            }
        }
Example #2
0
        private async Task <Source> ProcessShow(ImportStats stats, Artist artist, PhishinShow fullShow, ArtistUpstreamSource src, Source dbSource, PerformContext ctx)
        {
            dbSource.has_jamcharts = fullShow.tags.Count(t => t.name == "Jamcharts") > 0;
            dbSource = await _sourceService.Save(dbSource);

            var sets = new Dictionary <string, SourceSet>();

            foreach (var track in fullShow.tracks)
            {
                var set = sets.GetValue(track.set);

                if (set == null)
                {
                    set = new SourceSet()
                    {
                        source_id  = dbSource.id,
                        index      = SetIndexForIdentifier(track.set),
                        name       = track.set_name,
                        is_encore  = track.set[0] == 'E',
                        updated_at = dbSource.updated_at
                    };

                    // this needs to be set after loading from the db
                    set.tracks = new List <SourceTrack>();

                    sets[track.set] = set;
                }
            }

            var setMaps = (await _sourceSetService.UpdateAll(dbSource, sets.Values))
                          .GroupBy(s => s.index)
                          .ToDictionary(kvp => kvp.Key, kvp => kvp.Single());

            foreach (var kvp in setMaps)
            {
                kvp.Value.tracks = new List <SourceTrack>();
            }

            foreach (var track in fullShow.tracks)
            {
                var set = setMaps[SetIndexForIdentifier(track.set)];
                set.tracks.Add(new SourceTrack()
                {
                    source_set_id  = set.id,
                    source_id      = dbSource.id,
                    title          = track.title,
                    duration       = track.duration / 1000,
                    track_position = track.position,
                    slug           = SlugifyTrack(track.title),
                    mp3_url        = track.mp3.Replace("http:", "https:"),
                    updated_at     = dbSource.updated_at,
                    artist_id      = artist.id
                });
            }

            stats.Created += (await _sourceTrackService.InsertAll(dbSource, setMaps.SelectMany(kvp => kvp.Value.tracks))).Count();

            await ProcessSetlistShow(stats, fullShow, artist, src, dbSource, sets);

            ResetTrackSlugCounts();

            return(dbSource);
        }