public TvEpisode(TvSeries series, int seasonNumber, int episodeNumber, string title) { m_Series = series; m_SeasonNumber = seasonNumber; m_EpisodeNumber = episodeNumber; m_Title = title; }
private ObservableCollection<TvSeries> CreateRuntimeData() { var results = new ObservableCollection<TvSeries>(); IOrderedEnumerable<IGrouping<string, MGFile>> seriesList = from f in m_DataStore.Files group f by f.Tags.GetString(TVShowDataStoreTemplate.SeriesTitle) into asdf orderby asdf.Key select asdf; foreach (IGrouping<string, MGFile> seriesGroup in seriesList) { var series = new TvSeries(seriesGroup.Key); series.SeriesBannerPath = seriesGroup.Select(f => f.Tags.GetString(TVShowDataStoreTemplate.SeriesBanner)).Coalesce(); series.SeriesPosterPath = seriesGroup.Select(f => f.Tags.GetString(TVShowDataStoreTemplate.SeriesPoster)).Coalesce(); series.SeriesDescription = seriesGroup.Select(f => f.Tags.GetString(TVShowDataStoreTemplate.SeriesDescription)).Coalesce(); var episodeGroups = from f in seriesGroup group f by new { EpisodeNumber = f.Tags.GetInt(TVShowDataStoreTemplate.EpisodeNumber), SeasonNumber = f.Tags.GetInt(TVShowDataStoreTemplate.SeasonNumber) } into grp select new { grp.Key.SeasonNumber, grp.Key.EpisodeNumber, Episodes = grp, FirstAired = grp.Select(file => file.Tags.GetDateTime(TVShowDataStoreTemplate.EpisodeFirstAired)).Coalesce(), EpisodeBannerPath = grp.Select(file => file.Tags.GetString(TVShowDataStoreTemplate.EpisodeBanner)).Coalesce(), Length = grp.Select(file => file.Tags.GetTimeSpan(TVShowDataStoreTemplate.PlayTime)).Coalesce(), Title = grp.Select(file => file.Tags.GetString(TVShowDataStoreTemplate.EpisodeTitle)).Coalesce(), Ipod = grp.Any(file => true == file.Tags.GetBool(TVShowDataStoreTemplate.iPodClassicCompatible)), Iphone = grp.Any(file => true == file.Tags.GetBool(TVShowDataStoreTemplate.iPhoneCompatible)), Computer = grp.Any(), }; IEnumerable<TvEpisode> episodes = from ep in episodeGroups where ep.SeasonNumber.HasValue && ep.EpisodeNumber.HasValue select new TvEpisode(series, ep.SeasonNumber.Value, ep.EpisodeNumber.Value, ep.Title) { AirDate = ep.FirstAired, EpisodeBannerPath = ep.EpisodeBannerPath, Length = ep.Length, HasComputerVersion = ep.Computer, HasIphoneVersion = ep.Iphone, HasIpodVersion = ep.Ipod, }; episodes = from ep in episodes orderby ep.SeasonNumber, ep.EpisodeNumber select ep; series.Episodes.AddRange(episodes); results.Add(series); } return results; }