Пример #1
0
        public async Task <string> Response()
        {
            var request       = AlexaRequest.request;
            var slots         = request.intent.slots;
            var durationValue = slots.Duration.value;
            var duration      = durationValue is null?DateTime.Now.AddDays(7) : DateTimeDurationSerializer.GetMaxPremiereDate(durationValue);

            var result = await ServerDataQuery.Instance.GetUpComingTvAsync(duration);

            //IDataSource aplDataSource;
            //IDataSource aplaDataSource;

            var sequenceLayoutProperties = await DataSourcePropertiesManager.Instance.GetBaseItemCollectionSequenceViewPropertiesAsync(result.Items.ToList());

            var aplaDataSource = await DataSourcePropertiesManager.Instance.GetAudioResponsePropertiesAsync(new InternalAudioResponseQuery()
            {
                SpeechResponseType = SpeechResponseType.UpComingEpisodes,
                items = result.Items.ToList(),
                date  = duration
            });

            AlexaSessionManager.Instance.UpdateSession(Session, sequenceLayoutProperties);

            return(await AlexaResponseClient.Instance.BuildAlexaResponseAsync(new Response()
            {
                shouldEndSession = null,
                directives = new List <IDirective>()
                {
                    await RenderDocumentDirectiveManager.Instance.RenderAudioDocumentDirectiveAsync(aplaDataSource),
                    await RenderDocumentDirectiveManager.Instance.RenderVisualDocumentDirectiveAsync <MediaItem>(sequenceLayoutProperties, Session)
                }
            }, Session));
        }
Пример #2
0
        public async Task <string> Response()
        {
            var request  = AlexaRequest.request;
            var slots    = request.intent.slots;
            var duration = slots.Duration.value;
            var type     = slots.MovieAlternatives.value is null ? "Series" : "Movie";

            // Default will be 25 days ago unless given a time duration
            var d = duration is null?DateTime.Now.AddDays(-25) : DateTimeDurationSerializer.GetMinDateCreation(duration);

            var query = type == "Series"
                ? ServerDataQuery.Instance.GetLatestTv(Session.User, d)
                : ServerDataQuery.Instance.GetLatestMovies(Session.User, d);

            var results = query.Where(item => item.IsParentalAllowed(Session.User)).ToList();

            if (!results.Any())
            {
                return(await AlexaResponseClient.Instance.BuildAlexaResponseAsync(new Response()
                {
                    outputSpeech = new OutputSpeech()
                    {
                        phrase = $"No new { type } have been added."
                    },
                    shouldEndSession = true,
                }, Session));
            }

            var sequenceLayoutProperties = await DataSourcePropertiesManager.Instance.GetBaseItemCollectionSequenceViewPropertiesAsync(results);

            var newLibraryItemsAudioProperties = await DataSourcePropertiesManager.Instance.GetAudioResponsePropertiesAsync(new InternalAudioResponseQuery()
            {
                SpeechResponseType = SpeechResponseType.NewLibraryItems,
                items   = results,
                session = Session,
                date    = d
            });

            AlexaSessionManager.Instance.UpdateSession(Session, sequenceLayoutProperties);

            var renderDocumentDirective = await RenderDocumentDirectiveManager.Instance.RenderVisualDocumentDirectiveAsync(sequenceLayoutProperties, Session);

            var renderAudioDirective = await RenderDocumentDirectiveManager.Instance.RenderAudioDocumentDirectiveAsync(newLibraryItemsAudioProperties);

            return(await AlexaResponseClient.Instance.BuildAlexaResponseAsync(new Response()
            {
                shouldEndSession = null,

                directives = new List <IDirective>()
                {
                    renderDocumentDirective,
                    renderAudioDirective
                }
            }, Session));
        }