private void LoadCsvMovieData() { try { MetaData = new List <MovieMetaDataInstance>(); TextFieldParser parser = new TextFieldParser("Data\\MovieData\\metadata.csv"); parser.HasFieldsEnclosedInQuotes = true; parser.SetDelimiters(","); int lineNumber = 0; while (!parser.EndOfData) { string[] fields = parser.ReadFields(); lineNumber++; if (lineNumber > 1 && fields.Length == 6) //check all data fields are present (ignore non-present data) { MovieMetaDataInstance metaDataInstance = new MovieMetaDataInstance(); metaDataInstance.Id = Convert.ToInt32(fields[0]); metaDataInstance.MovieId = Convert.ToInt32(fields[1]); metaDataInstance.Title = Convert.ToString(fields[2]); metaDataInstance.Language = Convert.ToString(fields[3]); metaDataInstance.Duration = Convert.ToString(fields[4]); metaDataInstance.ReleaseYear = Convert.ToInt32(fields[5]); MetaData.Add(metaDataInstance); } } } catch (Exception e) { } }
public List <MovieStatisticsInstance> GetMovieStats(string language = "EN") { List <StatsDataInstance> summarisedStats = StatsData.GroupBy(x => x.MovieId) .Select(x => new StatsDataInstance { MovieId = x.First().MovieId, WatchDurationMs = x.Sum(x => x.WatchDurationMs), MovieWatchCount = x.Count(), AverageWatchTimeS = (int)(x.Sum(x => x.WatchDurationMs) / x.Count()) / 1000 }).ToList(); List <MovieStatisticsInstance> AllMovieStats = new List <MovieStatisticsInstance>(); foreach (StatsDataInstance movieStatsSummary in summarisedStats) { MovieMetaDataInstance movieInfo = GetMovieData(movieStatsSummary.MovieId).Where(x => x.Language == language).FirstOrDefault(); if (movieInfo != null) { MovieStatisticsInstance m = new MovieStatisticsInstance(); m.MovieId = movieStatsSummary.MovieId; m.Title = movieInfo.Title; m.AverageWatchDurationS = movieStatsSummary.AverageWatchTimeS; m.Watches = movieStatsSummary.MovieWatchCount; m.ReleaseYear = movieInfo.ReleaseYear; AllMovieStats.Add(m); } } return(AllMovieStats); }
public void AddMetaData(MovieMetaDataInstance metaDataInstance) { metaDataInstance.Id = NextId(); MetaData.Add(metaDataInstance); }