Exemplo n.º 1
0
        private async Task FillLocationData(SkillRequest skillRequest, KinoheldUser user)
        {
            var request = (IntentRequest)skillRequest.Request;

            if (!string.IsNullOrEmpty(request.Intent.GetSlot(Slots.City)))
            {
                return;
            }

            if (!string.IsNullOrEmpty(user?.City))
            {
                request.Intent.Slots[Slots.City].Value = user.City;
                request.Intent.Slots[Slots.City].ConfirmationStatus = "CONFIRMED";
                return;
            }

            var amazonLocationInfo = await m_amazonService.GetLocationInfoAsync(skillRequest.Context).ConfigureAwait(false);

            if (!string.IsNullOrEmpty(amazonLocationInfo?.PostalCode))
            {
                request.Intent.Slots[Slots.City].Value = amazonLocationInfo.PostalCode;
                request.Intent.Slots[Slots.City].ConfirmationStatus = "CONFIRMED";
                return;
            }
        }
Exemplo n.º 2
0
        public async Task <GetOverviewInput> GetInput(SkillRequest skillRequest, KinoheldUser user)
        {
            var pendingResponse = await PendingDialog(skillRequest, user).ConfigureAwait(false);

            if (pendingResponse != null)
            {
                return(new GetOverviewInput {
                    PendingResponse = pendingResponse
                });
            }

            m_logger.LogDebug("Preparing input");
            var input = PrepareInput((IntentRequest)skillRequest.Request);

            if (input?.PendingResponse != null)
            {
                return(input);
            }

            m_logger.LogDebug("Cinema selection started");
            var cinemaSelectionResponse = await SelectCinema(skillRequest, input, user).ConfigureAwait(false);

            if (cinemaSelectionResponse.PendingResponse != null)
            {
                return(cinemaSelectionResponse);
            }

            return(cinemaSelectionResponse);
        }
 private static void AddNewAssignment(KinoheldUser existantUser, string city, string cinemaJson)
 {
     existantUser.CityCinemaAssignments.Add(new CityCinemaAssignment
     {
         City   = city,
         Cinema = cinemaJson,
         User   = existantUser
     });
 }
Exemplo n.º 4
0
        private async Task <SkillResponse> PendingDialog(SkillRequest skillRequest, KinoheldUser user)
        {
            var request = (IntentRequest)skillRequest.Request;

            if (request.DialogState == DialogState.Started)
            {
                await FillLocationData(skillRequest, user).ConfigureAwait(false);

                return(ResponseBuilder.DialogDelegate(request.Intent));
            }

            if (request.DialogState != DialogState.Completed)
            {
                return(ResponseBuilder.DialogDelegate());
            }

            return(null);
        }
Exemplo n.º 5
0
        private async Task <GetOverviewInput> SelectCinema(SkillRequest skillRequest, GetOverviewInput input, KinoheldUser user)
        {
            var request = (IntentRequest)skillRequest.Request;

            var cinemaPreferenceForCity =
                user?.CityCinemaAssignments.FirstOrDefault(p => p.City == input.SelectedCity);

            if (cinemaPreferenceForCity != null)
            {
                m_logger.LogDebug("Taking cinema from the preferences");
                input.SelectedCinema = JsonHelper.Deserialize <Cinema>(cinemaPreferenceForCity.Cinema);
                return(input);
            }

            var cinemaSelection = request.Intent.GetSlot(Slots.CinemaSelection);

            if (string.IsNullOrEmpty(cinemaSelection) ||
                !int.TryParse(cinemaSelection, out var cinemaSelectionInt))
            {
                m_logger.LogDebug("Getting cinemas near the selected city to choose from");
                var kinos = await m_kinoheldService.GetCinemas(input.SelectedCity).ConfigureAwait(false);

                if (!kinos.Any())
                {
                    input.PendingResponse = ResponseBuilder.Tell(string.Format(m_messages.ErrorNoCinemaInCity, input.SelectedCity));
                    return(input);
                }

                if (kinos.Count == 1)
                {
                    input.SelectedCinema = kinos.First();
                    return(input);
                }

                input.PendingResponse = GetResponseCinemaSelection(input, kinos);
                return(input);
            }

            if (!skillRequest.Session.Attributes.ContainsKey(Constants.Session.Cinemas))
            {
                input.PendingResponse = ResponseBuilder.Tell(string.Format(m_messages.ErrorMissingSessionCinemaObject,
                                                                           Constants.Session.Cinemas));
            }

            m_logger.LogDebug("Getting cinemas from session data");

            var jsonCinemas = JArray.Parse(skillRequest.Session.Attributes[Constants.Session.Cinemas].ToString());
            var cinemas     = jsonCinemas.ToObject <IEnumerable <Cinema> >().ToList();

            if (cinemas.Count < cinemaSelectionInt)
            {
                input.PendingResponse = GetResponseCinemaSelection(input, cinemas);
                return(input);
            }

            m_logger.LogDebug("Taking the chosen cinema from the list");
            input.SelectedCinema = cinemas[cinemaSelectionInt - 1];

            var savePreference = request.Intent.GetSlot(Slots.SaveCinemaToPreferences);

            if (string.IsNullOrEmpty(savePreference))
            {
                m_logger.LogDebug("Asking user if he wishes to save the cinema selection for upcoming requests");
                input.PendingResponse = GetResponseCinemaSaveToPreference(input, skillRequest.Session);
                return(input);
            }

            if (savePreference.Equals("Ja", StringComparison.OrdinalIgnoreCase))
            {
                m_logger.LogDebug("Saving cinema selection for future requests");
                var cinemaData = JsonHelper.Serialize(input.SelectedCinema);
                await m_dbAccess.SaveCityCinemaPreferenceAsync(skillRequest.Session.User.UserId, input.SelectedCity, cinemaData).ConfigureAwait(false);
            }

            return(input);
        }