2013-01-18 15:55:50 +00:00
|
|
|
using System.Text;
|
2014-01-08 14:16:39 +00:00
|
|
|
namespace AsterNET.FastAGI.Command
|
2013-01-18 15:55:50 +00:00
|
|
|
{
|
|
|
|
/// <summary>
|
|
|
|
/// Say a given time, returning early if any of the given DTMF digits are pressed.<br/>
|
|
|
|
/// Returns 0 if playback completes without a digit being pressed, or the ASCII
|
|
|
|
/// numerical value of the digit if one was pressed or -1 on error/hangup.<br/>
|
|
|
|
/// Available since Asterisk 1.2.
|
|
|
|
/// </summary>
|
|
|
|
public class SayDateTimeCommand : AGICommand
|
|
|
|
{
|
|
|
|
private static string DEFAULT_FORMAT = "ABdY 'digits/at' IMp";
|
|
|
|
|
|
|
|
private long time;
|
|
|
|
private string escapeDigits;
|
|
|
|
private string format;
|
|
|
|
private string timezone;
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Creates a new SayDateTimeCommand that says the given time.
|
|
|
|
/// <param name="time">the time to say in seconds elapsed since 00:00:00 on January 1, 1970, Coordinated Universal Time (UTC)</param>
|
|
|
|
/// </summary>
|
|
|
|
public SayDateTimeCommand(long time)
|
|
|
|
{
|
|
|
|
this.time = time;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Creates a new SayDateTimeCommand that says the given time and allows interruption by one of the given escape digits.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="time">the time to say in seconds elapsed since 00:00:00 on January 1, 1970, Coordinated Universal Time (UTC)</param>
|
2015-01-04 14:26:32 +00:00
|
|
|
/// <param name="escapeDigits">the digits that allow the user to interrupt this command or null for none.</param>
|
2013-01-18 15:55:50 +00:00
|
|
|
public SayDateTimeCommand(long time, string escapeDigits)
|
|
|
|
{
|
|
|
|
this.time = time;
|
|
|
|
this.escapeDigits = escapeDigits;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Creates a new SayDateTimeCommand that says the given time in the given
|
|
|
|
/// format and allows interruption by one of the given escape digits.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="time">the time to say in seconds elapsed since 00:00:00 on January 1, 1970, Coordinated Universal Time (UTC)</param>
|
2015-01-04 14:26:32 +00:00
|
|
|
/// <param name="escapeDigits">the digits that allow the user to interrupt this command or null for none.</param>
|
2013-01-18 15:55:50 +00:00
|
|
|
/// <param name="format">the format the time should be said in</param>
|
|
|
|
public SayDateTimeCommand(long time, string escapeDigits, string format)
|
|
|
|
{
|
|
|
|
this.time = time;
|
|
|
|
this.escapeDigits = escapeDigits;
|
|
|
|
this.format = format;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Creates a new SayDateTimeCommand that says the given time in the given
|
|
|
|
/// format and timezone and allows interruption by one of the given escape
|
|
|
|
/// digits.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="time">the time to say in seconds elapsed since 00:00:00 on January 1, 1970, Coordinated Universal Time (UTC)</param>
|
2015-01-04 14:26:32 +00:00
|
|
|
/// <param name="escapeDigits">the digits that allow the user to interrupt this command or null for none.</param>
|
2013-01-18 15:55:50 +00:00
|
|
|
/// <param name="format">the format the time should be said in</param>
|
|
|
|
/// <param name="timezone">the timezone to use when saying the time, for example "UTC" or "Europe/Berlin".</param>
|
|
|
|
public SayDateTimeCommand(long time, string escapeDigits, string format, string timezone)
|
|
|
|
{
|
|
|
|
this.time = time;
|
|
|
|
this.escapeDigits = escapeDigits;
|
|
|
|
this.format = format;
|
|
|
|
this.timezone = timezone;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Get/Set the time to say in seconds elapsed since 00:00:00 on January 1, 1970, Coordinated Universal Time (UTC).
|
|
|
|
/// </summary>
|
|
|
|
public long Time
|
|
|
|
{
|
|
|
|
get { return this.time; }
|
|
|
|
set { this.time = value; }
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Get/Set the digits that allow the user to interrupt this command.
|
|
|
|
/// </summary>
|
|
|
|
public string getEscapeDigits
|
|
|
|
{
|
|
|
|
get { return this.escapeDigits; }
|
|
|
|
set { this.escapeDigits = value; }
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Get/Set the format the time should be said in.
|
|
|
|
/// </summary>
|
|
|
|
public string Format
|
|
|
|
{
|
|
|
|
get { return this.format; }
|
|
|
|
set { this.format = value; }
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Get/Set the timezone to use when saying the time.
|
|
|
|
/// </summary>
|
|
|
|
public string Timezone
|
|
|
|
{
|
|
|
|
get { return this.timezone; }
|
|
|
|
set { this.timezone = value; }
|
|
|
|
}
|
|
|
|
|
|
|
|
public override string BuildCommand()
|
|
|
|
{
|
|
|
|
StringBuilder sb = new StringBuilder("SAY DATETIME ");
|
|
|
|
sb.Append(time);
|
|
|
|
sb.Append(" ");
|
|
|
|
sb.Append(EscapeAndQuote(escapeDigits));
|
|
|
|
|
|
|
|
if (format == null && timezone != null)
|
|
|
|
{
|
|
|
|
sb.Append(" ");
|
|
|
|
sb.Append(EscapeAndQuote(DEFAULT_FORMAT));
|
|
|
|
}
|
|
|
|
if (format != null)
|
|
|
|
{
|
|
|
|
sb.Append(" ");
|
|
|
|
sb.Append(EscapeAndQuote(format));
|
|
|
|
}
|
|
|
|
|
|
|
|
if (timezone != null)
|
|
|
|
{
|
|
|
|
sb.Append(" ");
|
|
|
|
sb.Append(EscapeAndQuote(timezone));
|
|
|
|
}
|
|
|
|
return sb.ToString();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|