/// <summary> /// Gets the unpublished achievements newer than the given date. /// </summary> /// <param name="steamUserId">The steam user id.</param> /// <param name="oldestDate">The oldest date.</param> /// <param name="language">The language.</param> /// <returns> /// The achievements that haven't been published yet. /// </returns> public ICollection <Achievement> GetUnpublishedAchievements(string steamUserId, DateTime?oldestDate, string language = null) { if (steamUserId == null) { throw new ArgumentNullException("steamUserId"); } if (language == null) { language = CultureHelper.GetLanguage(); } IEnumerable <Game> games = _communityService.GetGames(steamUserId, language); ICollection <Data.Achievement> dataAchievements; if (oldestDate == null) { dataAchievements = _achievementManager.GetUnpublishedAchievements(steamUserId); } else { dataAchievements = _achievementManager.GetUnpublishedAchievements(steamUserId, oldestDate.Value); } IEnumerable <Data.Achievement> missingNames = dataAchievements.Where(a => !a.AchievementNames.Where(n => n.Language == language).Any()); if (missingNames.Any()) { IEnumerable <Achievement> communityAchievements = _communityService.GetAchievements(steamUserId, language) .Select(ua => ua.Achievement); foreach (Data.Achievement achievement in missingNames) { Achievement missing = communityAchievements .Where(a => a.Game.Id == achievement.GameId && a.ApiName == achievement.ApiName) .SingleOrDefault(); if (missing != null) { achievement.AchievementNames.Add(new AchievementName { Language = language, Name = missing.Name, Description = missing.Description }); } } } List <Achievement> achievements = dataAchievements.ToSimpleAchievementList(games, language); return(achievements); }
/// <summary> /// Updates the achievements. /// </summary> /// <param name="steamUserId">The steam user id.</param> /// <returns>true if successful, else false.</returns> /// <remarks>jQuery/WCF requires a return value in order for jQuery to execute $.ajax.success.</remarks> public int UpdateAchievements(string steamUserId) { if (steamUserId == null) { throw new ArgumentNullException("steamUserId"); } ICollection <UserAchievement> achievements = _communityService.GetAchievements(steamUserId); Data.User user = _achievementManager.GetUser(steamUserId); if (user == null) { throw new ArgumentException("User does not exist.", "steamUserId"); } int updated = _achievementManager.UpdateAchievements(achievements.ToDataAchievements(user.FacebookUserId)); return(updated); }
/// <summary> /// Gets the unpublished achievements newer than the given date. /// </summary> /// <param name="facebookUserId"> </param> /// <param name="oldestDate">The oldest date.</param> /// <param name="language">The language.</param> /// <returns> /// The achievements that haven't been published yet. /// </returns> public ICollection <Models.Achievement> GetUnpublishedAchievements(long facebookUserId, DateTime?oldestDate, string language = null) { if (language == null) { language = CultureHelper.GetLanguage(); } string steamUserId = GetSteamUserId(facebookUserId); IEnumerable <Game> games = _communityService.GetGames(steamUserId, language); ICollection <Data.Achievement> dataAchievements; if (oldestDate == null) { dataAchievements = _achievementManager.GetUnpublishedAchievements(facebookUserId); } else { dataAchievements = _achievementManager.GetUnpublishedAchievements(facebookUserId, oldestDate.Value); } IEnumerable <Data.Achievement> missingNames = dataAchievements.Where(a => !a.AchievementNames.Where(n => n.Language == language).Any()); if (missingNames.Any()) { IEnumerable <Models.Achievement> communityAchievements = _communityService.GetAchievements(steamUserId, language) .Select(ua => ua.Achievement); foreach (Data.Achievement achievement in missingNames) { Models.Achievement missing = communityAchievements .Where(a => a.Game.Id == achievement.GameId && a.ApiName == achievement.ApiName) .SingleOrDefault(); if (missing != null) { achievement.AchievementNames.Add(new AchievementName { Language = language, Name = missing.Name, Description = missing.Description }); } } } ICollection <Models.Achievement> achievements = Mapper.Map <ICollection <Models.Achievement> >(dataAchievements); // set game foreach (var dataAchievement in dataAchievements) { var achievement = achievements.Where(a => a.Id == dataAchievement.Id).SingleOrDefault(); if (achievement != null) { achievement.Game = games.Where(g => g.Id == dataAchievement.GameId).SingleOrDefault(); } } return(achievements.Where(a => a.Game != null) .OrderBy(a => a.Game.Name).ThenBy(a => a.Name).ToList()); }