/// <summary> /// Get random image /// </summary> /// <param name="binding"></param> /// <returns></returns> private async Task <ImageModel> GetRandomImage(RandomImageBinding binding) { var imageRequest = new HttpRequestMessage(HttpMethod.Get, "/api/image") { Content = new StringContent(JsonSerializer.Serialize(binding), Encoding.UTF8, "application/json") }; var imageResponse = await _db.BuildApiResponse <ImageModel>(imageRequest, _session._accessToken); if (imageResponse.Status == HttpStatusCode.OK) { return(imageResponse.Content); } return(null); }
public async Task <JsonResult> GetNewImage(int[] preImageId) { var binding = new RandomImageBinding { PreviousImageIds = preImageId, ReturnRandom = true }; var image = await GetRandomImage(binding); var returnValues = new { ImageId = image.ImageId, ImageUrl = Common.BuildCloudinaryUrl(image.FileName) }; return(Json(returnValues)); }
/// <summary> /// Init Guess set up /// Get user details or creat them /// Old guesses /// New image /// </summary> /// <param name="userGuid">Can be null if so new user is created</param> /// <returns></returns> public async Task <ActionResult> GuessNoFeedback(string userGuid, byte?phase = 0) { if (_session._isLoggedin) { //create if no guid var getUserRequest = new HttpRequestMessage(HttpMethod.Post, "/api/user"); //Get if exists if (!string.IsNullOrEmpty(userGuid) && new Guid(userGuid) != Guid.Empty) { getUserRequest = new HttpRequestMessage(HttpMethod.Get, string.Format("/api/user/hash/{0}", userGuid)); } var getUserResponse = await _db.BuildApiResponse <UserModel>(getUserRequest, _session._accessToken); GuessViewModel model = new GuessViewModel(); if (getUserResponse.Status == HttpStatusCode.OK) { model.UserHash = getUserResponse.Content.HashUser.Value; model.UserId = getUserResponse.Content.UserId; //returning details model.ReturningUser = (getUserResponse.Content.Guesses != null && getUserResponse.Content.Guesses.Any()); model.ReturningTimer = (getUserResponse.Content.TimePhase1.HasValue) ? ((getUserResponse.Content.TimePhase1.Value.Hour * 3600) + (getUserResponse.Content.TimePhase1.Value.Minute * 60) + (getUserResponse.Content.TimePhase1.Value.Second)) : 0; //Login logging var updateLoginTokenRequest = new HttpRequestMessage(HttpMethod.Post, string.Format("/api/token/{0}/{1}", _session._accessId, model.UserHash.ToString())); var updateLoginTokenResponse = await _db.BuildApiResponse <Token>(updateLoginTokenRequest, _session._accessToken); //Past guesses var usersGuessRequest = new HttpRequestMessage(HttpMethod.Get, string.Format("/api/usersGuess/{0}/{1}", getUserResponse.Content.UserId, phase)); var usersGuessResponse = await _db.BuildApiResponse <List <UserGuessModel> >(usersGuessRequest, _session._accessToken); model.FinalPercentage = getUserResponse.Content.Guesses != null && getUserResponse.Content.Guesses.Any() && usersGuessResponse.Content.Count >= 10 ? (decimal)Calculations.FindAverageDifferenceOfList(usersGuessResponse.Content.OrderBy(x => x.UsersGuessId).Skip(usersGuessResponse.Content.Count - 10).ToList()) : (decimal)0.0; model.ImagesUsed = usersGuessResponse.Content.Count; model.Phase = (byte)(phase.HasValue ? phase.Value : 0); //Get random new image that hasn't been used var binding = new RandomImageBinding { PreviousImageIds = getUserResponse.Content.Guesses != null && getUserResponse.Content.Guesses.Any() ? getUserResponse.Content.Guesses.Select(x => x.ImageId).ToArray() : new int[0], ReturnRandom = true }; var image = await GetRandomImage(binding); if (image != null) { model.CurrentCloudinaryUrl = Common.BuildCloudinaryUrl(image.FileName); model.CurrentImageId = image.ImageId; return(View(model)); } } return(RedirectToAction("Errorpage", "Home")); } return(RedirectToAction("Login", "Account")); }