]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
mod_say_en: add short form date/time (MODAPP-180)
authorMichael Jerris <mike@jerris.com>
Mon, 16 Feb 2009 22:24:25 +0000 (22:24 +0000)
committerMichael Jerris <mike@jerris.com>
Mon, 16 Feb 2009 22:24:25 +0000 (22:24 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12072 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/include/switch_types.h
src/mod/say/mod_say_en/mod_say_en.c
src/switch_ivr_play_say.c

index b6c555aaa6d5131c589d214ab09f0400982ba77d..dce378e27768a4f31a567e83bfe55896760c601c 100644 (file)
@@ -281,7 +281,8 @@ typedef enum {
        SST_POSTAL_ADDRESS,
        SST_ACCOUNT_NUMBER,
        SST_NAME_SPELLED,
-       SST_NAME_PHONETIC
+       SST_NAME_PHONETIC,
+       SST_SHORT_DATE_TIME
 } switch_say_type_t;
 
 typedef enum {
index 04debd0b31fbe195fdc70d1d3cb1f4431c9abe00..ce4f32e667dc3a1b5d498cf9e01d0fa6d7782729 100644 (file)
@@ -263,9 +263,9 @@ static switch_status_t en_say_time(switch_core_session_t *session, char *tosay,
                                                                   switch_input_args_t *args)
 {
        int32_t t;
-       switch_time_t target = 0;
-       switch_time_exp_t tm;
-       uint8_t say_date = 0, say_time = 0;
+       switch_time_t target = 0, target_now = 0;
+       switch_time_exp_t tm, tm_now;
+       uint8_t say_date = 0, say_time = 0, say_year = 0, say_month = 0, say_dow = 0, say_day = 0, say_yesterday = 0, say_today = 0;
        switch_channel_t *channel = switch_core_session_get_channel(session);
        const char *tz = switch_channel_get_variable(channel, "timezone");
        
@@ -351,19 +351,24 @@ static switch_status_t en_say_time(switch_core_session_t *session, char *tosay,
 
        if ((t = atol(tosay)) > 0) {
                target = switch_time_make(t, 0);
+               target_now = switch_micro_time_now();
        } else {
                target = switch_micro_time_now();
+               target_now = switch_micro_time_now();
        }
        
        if (tz) {
                int check = atoi(tz);
                if (check) {
                        switch_time_exp_tz(&tm, target, check);
+                       switch_time_exp_tz(&tm_now, target_now, check);
                } else {
                        switch_time_exp_tz_name(tz, &tm, target);
+                       switch_time_exp_tz_name(tz, &tm_now, target_now);
                }
        } else {
                switch_time_exp_lt(&tm, target);
+               switch_time_exp_lt(&tm_now, target_now);
        }
 
        switch (type) {
@@ -375,15 +380,59 @@ static switch_status_t en_say_time(switch_core_session_t *session, char *tosay,
                break;
        case SST_CURRENT_TIME:
                say_time = 1;
+               break;
+       case SST_SHORT_DATE_TIME:
+               say_time = 1;
+               if (tm.tm_year != tm_now.tm_year) {
+                       say_date = 1;
+                       break;
+               }
+               if (tm.tm_yday == tm_now.tm_yday) {
+                       say_today = 1;
+                       break;
+               }
+               if (tm.tm_yday == tm_now.tm_yday - 1) {
+                       say_yesterday = 1;
+                       break;
+               }
+               if (tm.tm_yday >= tm_now.tm_yday - 5) {
+                       say_dow = 1;
+                       break;
+               }
+               if (tm.tm_mon != tm_now.tm_mon) {
+                       say_month = say_day = say_dow = 1;
+                       break;
+               }
+
+               say_month = say_day = say_dow = 1;
+               
                break;
        default:
                break;
        }
 
-       if (say_date) {
+       if (say_today) {
+               say_file("time/today.wav");
+       }
+       if (say_yesterday) {
+               say_file("time/yesterday.wav");
+       }
+       if (say_dow) {
                say_file("time/day-%d.wav", tm.tm_wday);
+       }
+
+       if (say_date) {
+               say_year = say_month = say_day = say_dow = 1;
+               say_today = say_yesterday = 0;
+       }
+
+       if (say_month) {
                say_file("time/mon-%d.wav", tm.tm_mon);
+       }
+       if (say_day) {
                say_num(tm.tm_mday, SSM_COUNTED);
+       }
+       if (say_year) {
                say_num(tm.tm_year + 1900, SSM_PRONOUNCED);
        }
 
@@ -495,6 +544,7 @@ static switch_status_t en_say(switch_core_session_t *session, char *tosay, switc
        case SST_CURRENT_DATE:
        case SST_CURRENT_TIME:
        case SST_CURRENT_DATE_TIME:
+       case SST_SHORT_DATE_TIME:
                say_cb = en_say_time;
                break;
        case SST_IP_ADDRESS:
index 752182fc116298aac01d0a09da885b9cfe29d2e8..e554522c280a386f4c4784d2bdc46183a25829d4 100644 (file)
@@ -62,6 +62,7 @@ static char *SAY_TYPE_NAMES[] = {
        "ACCOUNT_NUMBER",
        "NAME_SPELLED",
        "NAME_PHONETIC",
+       "SHORT_DATE_TIME",
        NULL
 };