X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=action_vbox.cpp;h=120bfa63a28359c9941939731ff9e69b8af3babb;hp=e325c0ff747ec5093ebacab39653fa1bb3486a33;hb=5566f74eb29be75da44e29ba72ee6f015249ce61;hpb=8994874d7bcb1eff9ee833fb22e4910cc365f456 diff --git a/action_vbox.cpp b/action_vbox.cpp index e325c0f..120bfa6 100644 --- a/action_vbox.cpp +++ b/action_vbox.cpp @@ -101,7 +101,7 @@ void EndpointAppPBX::action_init_vbox_play(void) e_vbox_state = VBOX_STATE_MENU; SCPY(e_vbox_display, (char *)((language)?"druecke 2 f. wiedergabe":"press 2 to play")); - e_vbox_display_refresh = 1; + schedule_timer(&e_vbox_refresh, 0, 0); set_tone_vbox("menu"); e_vbox_menu = -1; @@ -112,7 +112,7 @@ void EndpointAppPBX::action_init_vbox_play(void) if (e_vbox_index_num == 0) { e_vbox_state = VBOX_STATE_NOTHING; SCPY(e_vbox_display, (char *)((language)?"keine Anrufe":"no calls")); - e_vbox_display_refresh = 1; + schedule_timer(&e_vbox_refresh, 0, 0); set_tone_vbox("nothing"); } } @@ -232,6 +232,8 @@ void EndpointAppPBX::action_dialing_vbox_play(void) int language = e_ext.vbox_language; struct port_list *portlist; class Port *port; + time_t current_time; + struct tm *current_tm; portlist = ea_endpoint->ep_portlist; @@ -242,7 +244,7 @@ void EndpointAppPBX::action_dialing_vbox_play(void) PDEBUG(DEBUG_EPOINT, "EPOINT(%d) dialing digit: %c\n", ea_endpoint->ep_serial, e_extdialing[0]); - e_vbox_display_refresh = 1; + schedule_timer(&e_vbox_refresh, 0, 0); if (e_vbox_state == VBOX_STATE_RECORD_RECORD) { if (e_extdialing[0] == '1' || e_extdialing[0] == '0') { @@ -280,10 +282,10 @@ void EndpointAppPBX::action_dialing_vbox_play(void) PDEBUG(DEBUG_EPOINT, "EPOINT(%d) play recoding.\n", ea_endpoint->ep_serial); /* play announcement */ e_vbox_counter = 0; - e_vbox_counter_last = 0; e_vbox_counter_max = 0; e_vbox_speed = 1; e_vbox_state = VBOX_STATE_RECORD_PLAY; + schedule_timer(&e_vbox_refresh, 0, 0); if (e_ext.vbox_language) SCPY(e_vbox_display, "Wied., 1=stop %s"); else @@ -396,10 +398,12 @@ void EndpointAppPBX::action_dialing_vbox_play(void) e_vbox_state = VBOX_STATE_CALLINFO_INTRO; SPRINT(e_vbox_display, "#%d", e_vbox_play+1); vbox_index_read(e_vbox_play); - if (e_vbox_index_mon!=now_tm->tm_mon || e_vbox_index_year!=now_tm->tm_year) { + time(¤t_time); + current_tm = localtime(¤t_time); + if (e_vbox_index_mon!=current_tm->tm_mon || e_vbox_index_year!=current_tm->tm_year) { UPRINT(strchr(e_vbox_display,'\0'), " %s", (language)?months_german[e_vbox_index_mon]:months_english[e_vbox_index_mon]); } - if (e_vbox_index_mday!=now_tm->tm_mday || e_vbox_index_mon!=now_tm->tm_mon || e_vbox_index_year!=now_tm->tm_year) { + if (e_vbox_index_mday!=current_tm->tm_mday || e_vbox_index_mon!=current_tm->tm_mon || e_vbox_index_year!=current_tm->tm_year) { UPRINT(strchr(e_vbox_display,'\0'), " %d", e_vbox_index_mday); } UPRINT(strchr(e_vbox_display,'\0'), " %02d:%02d", e_vbox_index_hour, e_vbox_index_min); @@ -419,10 +423,10 @@ void EndpointAppPBX::action_dialing_vbox_play(void) PDEBUG(DEBUG_EPOINT, "EPOINT(%d) play call #%d. abborting announcement and starting with playback\n", ea_endpoint->ep_serial, e_vbox_play+1); /* the callinfo is played, so we start with the call */ e_vbox_counter = 0; - e_vbox_counter_last = 0; e_vbox_counter_max = 0; e_vbox_speed = 1; e_vbox_state = VBOX_STATE_PLAY; + schedule_timer(&e_vbox_refresh, 0, 0); SPRINT(e_vbox_display, "#%d %%s", e_vbox_play+1); if (e_ext.vbox_display == VBOX_DISPLAY_DETAILED) UPRINT(strchr(e_vbox_display,'\0'), " (%s)", e_vbox_index_callerid); @@ -558,7 +562,7 @@ void EndpointAppPBX::action_dialing_vbox_play(void) SPRINT(e_dialinginfo.id, "extern:%s", e_vbox_index_callerid); e_extdialing = e_dialinginfo.id; e_action = NULL; - process_dialing(); + process_dialing(0); return; } break; @@ -600,31 +604,35 @@ void EndpointAppPBX::action_dialing_vbox_play(void) /* * this handler is called by Epoint::handler(), whenever the action is NUMB_ACTION_VBOX_PLAY */ -void EndpointAppPBX::vbox_handler(void) +int vbox_refresh(struct lcr_timer *timer, void *instance, int index) { - /* refresh if counter changes */ - if (e_vbox_state==VBOX_STATE_PLAY || e_vbox_state==VBOX_STATE_RECORD_PLAY) - if (e_vbox_counter != e_vbox_counter_last) { - e_vbox_counter_last = e_vbox_counter; - e_vbox_display_refresh = 1; - } + class EndpointAppPBX *ea = (class EndpointAppPBX *)instance; - /* refresh display, if required (include counter) */ - if (e_vbox_display_refresh && e_ext.vbox_display!=VBOX_DISPLAY_OFF) { - char counter[32]; - struct lcr_msg *message; - - SPRINT(counter, "%02d:%02d", e_vbox_counter/60, e_vbox_counter%60); - if (e_vbox_counter_max) - UPRINT(strchr(counter,'\0'), " of %02d:%02d", e_vbox_counter_max/60, e_vbox_counter_max%60); - - e_vbox_display_refresh = 0; - message = message_create(ea_endpoint->ep_serial, ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); - SPRINT(message->param.notifyinfo.display, e_vbox_display, counter); - PDEBUG(DEBUG_EPOINT, "EPOINT(%d) terminal %s pending display:%s\n", ea_endpoint->ep_serial, e_ext.number, message->param.notifyinfo.display); - message_put(message); - logmessage(message->type, &message->param, ea_endpoint->ep_portlist->port_id, DIRECTION_OUT); - } + /* no display */ + if (ea->e_ext.vbox_display == VBOX_DISPLAY_OFF) + return 0; + + /* refresh display */ + char counter[32]; + struct lcr_msg *message; + + SPRINT(counter, "%02d:%02d", ea->e_vbox_counter/60, ea->e_vbox_counter%60); + if (ea->e_vbox_counter_max) + UPRINT(strchr(counter,'\0'), " of %02d:%02d", ea->e_vbox_counter_max/60, ea->e_vbox_counter_max%60); + + message = message_create(ea->ea_endpoint->ep_serial, ea->ea_endpoint->ep_portlist->port_id, EPOINT_TO_PORT, MESSAGE_NOTIFY); + SPRINT(message->param.notifyinfo.display, ea->e_vbox_display, counter); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) terminal %s pending display:%s\n", ea->ea_endpoint->ep_serial, ea->e_ext.number, message->param.notifyinfo.display); + message_put(message); + ea->logmessage(message->type, &message->param, ea->ea_endpoint->ep_portlist->port_id, DIRECTION_OUT); + + /* not playing anymore */ + if (!ea->e_vbox_state==VBOX_STATE_PLAY && !ea->e_vbox_state==VBOX_STATE_RECORD_PLAY) + return 0; + + schedule_timer(&ea->e_vbox_refresh, 1, 0); + + return 0; } @@ -636,6 +644,8 @@ void EndpointAppPBX::vbox_message_eof(void) { char buffer[32]; int language = e_ext.vbox_language; + time_t current_time; + struct tm *current_tm; PDEBUG(DEBUG_EPOINT, "EPOINT(%d) terminal %s end of file during state: %d\n", ea_endpoint->ep_serial, e_ext.number, e_vbox_state); @@ -644,7 +654,7 @@ void EndpointAppPBX::vbox_message_eof(void) case VBOX_STATE_NOTHING: e_vbox_state = VBOX_STATE_MENU; SCPY(e_vbox_display, (char *)((language)?"druecke 2 f. wiedergabe":"press 2 to play")); - e_vbox_display_refresh = 1; + schedule_timer(&e_vbox_refresh, 0, 0); set_tone_vbox("menu"); break; @@ -652,7 +662,7 @@ void EndpointAppPBX::vbox_message_eof(void) if (e_vbox_speed > 0) { e_vbox_state = VBOX_STATE_MENU; SCPY(e_vbox_display, (char *)((language)?"druecke 3 f. Naechste":"press 3 for next")); - e_vbox_display_refresh = 1; + schedule_timer(&e_vbox_refresh, 0, 0); set_tone_vbox("menu"); } else { /* if we have endoffile because we were playing backwards, we continue to play forward */ @@ -664,11 +674,13 @@ void EndpointAppPBX::vbox_message_eof(void) case VBOX_STATE_PAUSE: SCPY(e_vbox_display, (char *)((language)?"druecke 2 f. weiterspielen":"press 2 to continue")); - e_vbox_display_refresh = 1; + schedule_timer(&e_vbox_refresh, 0, 0); break; case VBOX_STATE_CALLINFO_INTRO: - if (e_vbox_index_mday==now_tm->tm_mday && e_vbox_index_mon==now_tm->tm_mon && e_vbox_index_year==now_tm->tm_year) + time(¤t_time); + current_tm = localtime(¤t_time); + if (e_vbox_index_mday==current_tm->tm_mday && e_vbox_index_mon==current_tm->tm_mon && e_vbox_index_year==current_tm->tm_year) goto skip_day_month; e_vbox_state = VBOX_STATE_CALLINFO_MONTH; //german day if (e_ext.vbox_language) @@ -764,37 +776,37 @@ void EndpointAppPBX::vbox_message_eof(void) } else { /* the callinfo is played, so we start with the call */ e_vbox_counter = 0; - e_vbox_counter_last = 0; e_vbox_counter_max = 0; e_vbox_speed = 1; e_vbox_state = VBOX_STATE_PLAY; + schedule_timer(&e_vbox_refresh, 0, 0); SPRINT(e_vbox_display, "#%d %%s", e_vbox_play); if (e_ext.vbox_display == VBOX_DISPLAY_DETAILED) UPRINT(strchr(e_vbox_display,'\0'), " (%s)", e_vbox_index_callerid); - e_vbox_display_refresh = 1; + schedule_timer(&e_vbox_refresh, 0, 0); set_play_vbox(e_vbox_index_file, 0); } break; case VBOX_STATE_RECORD_ASK: set_tone_vbox("record_ask"); - e_vbox_display_refresh = 1; + schedule_timer(&e_vbox_refresh, 0, 0); break; case VBOX_STATE_STORE_ASK: set_tone_vbox("store_ask"); - e_vbox_display_refresh = 1; + schedule_timer(&e_vbox_refresh, 0, 0); break; case VBOX_STATE_DELETE_ASK: set_tone_vbox("delete_ask"); - e_vbox_display_refresh = 1; + schedule_timer(&e_vbox_refresh, 0, 0); break; case VBOX_STATE_RECORD_PLAY: e_vbox_state = VBOX_STATE_RECORD_ASK; SCPY(e_vbox_display, (char *)((language)?"1=Aufn. 2=Wied. 3=nein":"1=record 2=play 3=no")); - e_vbox_display_refresh = 1; + schedule_timer(&e_vbox_refresh, 0, 0); set_tone_vbox("record_ask"); break; @@ -803,12 +815,12 @@ void EndpointAppPBX::vbox_message_eof(void) if (e_vbox_index_num == 0) { /* nothing to play */ e_vbox_state = VBOX_STATE_MENU; SCPY(e_vbox_display, (char *)((language)?"keine Anrufe":"no calls")); - e_vbox_display_refresh = 1; + schedule_timer(&e_vbox_refresh, 0, 0); set_tone_vbox("nothing"); } else { e_vbox_state = VBOX_STATE_MENU; SCPY(e_vbox_display, (char *)((language)?"druecke 2 f. wiedergabe":"press 2 to play")); - e_vbox_display_refresh = 1; + schedule_timer(&e_vbox_refresh, 0, 0); set_tone_vbox("menu"); } break;