예제 #1
0
        private async Task <SkillResponse> CommuteAsync(ICollection <string> favoriteLines)
        {
            IList <Line> lines = await GetStatusesAsync(string.Join(",", favoriteLines));

            var paragraphs = new List <string>();

            bool hasMultipleStatuses = lines.Count > 1;

            foreach (Line line in lines.OrderBy((p) => p.Name, StringComparer.Ordinal))
            {
                string text = StatusIntent.GenerateResponse(new[] { line });

                if (hasMultipleStatuses)
                {
                    string displayName = Verbalizer.LineName(line.Name, asTitleCase: true);
                    text = string.Format(CultureInfo.CurrentCulture, Strings.CommuteIntentPrefixFormat, displayName, text);
                }

                paragraphs.Add(text);
            }

            return(SkillResponseBuilder
                   .Tell(paragraphs)
                   .WithCard(Strings.CommuteIntentCardTitle, string.Join("\n", paragraphs))
                   .Build());
        }
        /// <summary>
        /// Generates the summary text to respond for a single line status.
        /// </summary>
        /// <param name="name">The name of the line.</param>
        /// <param name="status">The status for a line.</param>
        /// <returns>
        /// The response text for the specified line status.
        /// </returns>
        private static string GenerateSummaryResponse(string name, LineStatus status)
        {
            string format;

            if (status.StatusSeverity == LineStatusSeverity.ServiceClosed)
            {
                format = Strings.StatusIntentClosedFormat;
            }
            else
            {
                Debug.Assert(
                    status.StatusSeverity == LineStatusSeverity.GoodService || status.StatusSeverity == LineStatusSeverity.NoIssues,
                    $"'{status.StatusSeverity}' is not supported for a summary response.");

                format = Strings.StatusIntentGoodServiceFormat;
            }

            var    culture    = CultureInfo.CurrentCulture;
            string spokenName = Verbalizer.LineName(name);
            string statusText = string.Format(culture, format, spokenName);

            return(char.ToUpper(statusText[0], culture) + statusText.Substring(1));
        }