diff --git a/build/android/common.mk b/build/android/common.mk index 99e1787a7..d629b54af 100644 --- a/build/android/common.mk +++ b/build/android/common.mk @@ -46,10 +46,6 @@ LOCAL_SRC_FILES := \ ec-calibrator.c \ linphone_tunnel.cc -ifndef MY_LOG_DOMAIN -MY_LOG_DOMAIN = \"Linphone\" -endif - ifndef LINPHONE_VERSION LINPHONE_VERSION = "Devel" endif @@ -64,7 +60,6 @@ LOCAL_CFLAGS += \ -DENABLE_TRACE \ -DLINPHONE_VERSION=\"$(LINPHONE_VERSION)\" \ -DLINPHONE_PLUGINS_DIR=\"\\tmp\" \ - -DLOG_DOMAIN=$(MY_LOG_DOMAIN) \ -DHAVE_EXOSIP_TRYLOCK=1 \ -DHAVE_EXOSIP_TLS_VERIFY_CERTIFICATE=1 diff --git a/configure.ac b/configure.ac index c4b2514cd..1693a08ae 100644 --- a/configure.ac +++ b/configure.ac @@ -97,7 +97,7 @@ fi dnl Add the languages which your application supports here. PKG_PROG_PKG_CONFIG -ALL_LINGUAS="fr it de ja es pl cs nl sv pt_BR hu ru zh_CN nb_NO zh_TW" +ALL_LINGUAS="fr it de ja es pl cs nl sv pt_BR hu ru zh_CN nb_NO zh_TW he" AC_SUBST(ALL_LINGUAS) AC_DEFINE_UNQUOTED(LINPHONE_ALL_LANGS, "$ALL_LINGUAS", [All supported languages]) diff --git a/coreapi/TunnelManager.cc b/coreapi/TunnelManager.cc index 71ecc5184..8ce6da7e5 100644 --- a/coreapi/TunnelManager.cc +++ b/coreapi/TunnelManager.cc @@ -355,7 +355,8 @@ void TunnelManager::sOnIterate(TunnelManager *zis){ } #ifdef ANDROID -static void linphone_android_log_handler(int lev, const char *fmt, va_list args){ +extern void linphone_android_log_handler(int prio, const char *fmt, va_list args); +static void linphone_android_tunnel_log_handler(int lev, const char *fmt, va_list args) { int prio; switch(lev){ case TUNNEL_DEBUG: prio = ANDROID_LOG_DEBUG; break; @@ -363,9 +364,9 @@ static void linphone_android_log_handler(int lev, const char *fmt, va_list args) case TUNNEL_NOTICE: prio = ANDROID_LOG_INFO; break; case TUNNEL_WARN: prio = ANDROID_LOG_WARN; break; case TUNNEL_ERROR: prio = ANDROID_LOG_ERROR; break; - default: prio = ANDROID_LOG_DEFAULT; break; + default: prio = ANDROID_LOG_DEFAULT; break; } - __android_log_vprint(prio, LOG_DOMAIN, fmt, args); + linphone_android_log_handler(prio, fmt, args); } #endif /*ANDROID*/ @@ -376,7 +377,7 @@ void TunnelManager::enableLogs(bool value) { void TunnelManager::enableLogs(bool isEnabled,LogHandler logHandler) { if (logHandler != NULL) SetLogHandler(logHandler); #ifdef ANDROID - else SetLogHandler(linphone_android_log_handler); + else SetLogHandler(linphone_android_tunnel_log_handler); #else else SetLogHandler(default_log_handler); #endif @@ -399,6 +400,7 @@ void TunnelManager::processUdpMirrorEvent(const Event &ev){ enable(false); mAutoDetectStarted = false; } else { + mCurrentUdpMirrorClient++; if (mCurrentUdpMirrorClient !=mUdpMirrorClients.end()) { // enable tunnel but also try backup server LOGI("Tunnel is required, enabling; Trying backup udp mirror"); diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c index d84ddfd82..ba4a06e0e 100644 --- a/coreapi/callbacks.c +++ b/coreapi/callbacks.c @@ -59,14 +59,14 @@ void linphone_core_update_streams_destinations(LinphoneCore *lc, LinphoneCall *c rtp_addr = (new_audiodesc->rtp_addr[0] != '\0') ? new_audiodesc->rtp_addr : new_md->addr; rtcp_addr = (new_audiodesc->rtcp_addr[0] != '\0') ? new_audiodesc->rtcp_addr : new_md->addr; ms_message("Change audio stream destination: RTP=%s:%d RTCP=%s:%d", rtp_addr, new_audiodesc->rtp_port, rtcp_addr, new_audiodesc->rtcp_port); - rtp_session_set_remote_addr_full(call->audiostream->session, rtp_addr, new_audiodesc->rtp_port, rtcp_addr, new_audiodesc->rtcp_port); + rtp_session_set_remote_addr_full(call->audiostream->ms.session, rtp_addr, new_audiodesc->rtp_port, rtcp_addr, new_audiodesc->rtcp_port); } #ifdef VIDEO_ENABLED if (call->videostream && new_videodesc) { rtp_addr = (new_videodesc->rtp_addr[0] != '\0') ? new_videodesc->rtp_addr : new_md->addr; rtcp_addr = (new_videodesc->rtcp_addr[0] != '\0') ? new_videodesc->rtcp_addr : new_md->addr; ms_message("Change video stream destination: RTP=%s:%d RTCP=%s:%d", rtp_addr, new_videodesc->rtp_port, rtcp_addr, new_videodesc->rtcp_port); - rtp_session_set_remote_addr_full(call->videostream->session, rtp_addr, new_videodesc->rtp_port, rtcp_addr, new_videodesc->rtcp_port); + rtp_session_set_remote_addr_full(call->videostream->ms.session, rtp_addr, new_videodesc->rtp_port, rtcp_addr, new_videodesc->rtcp_port); } #endif @@ -100,35 +100,44 @@ void linphone_core_update_streams(LinphoneCore *lc, LinphoneCall *call, SalMedia call->media_pending=TRUE; } call->resultdesc=new_md; - if ((call->audiostream && call->audiostream->ticker) || (call->videostream && call->videostream->ticker)){ + if ((call->audiostream && call->audiostream->ms.ticker) || (call->videostream && call->videostream->ms.ticker)){ /* we already started media: check if we really need to restart it*/ if (oldmd){ int md_changed = media_parameters_changed(call, oldmd, new_md); - if ((md_changed == SAL_MEDIA_DESCRIPTION_UNCHANGED) && !call->playing_ringbacktone) { - /*as nothing has changed, keep the oldmd */ - call->resultdesc=oldmd; - sal_media_description_unref(new_md); - if (call->all_muted){ - ms_message("Early media finished, unmuting inputs..."); - /*we were in early media, now we want to enable real media */ - linphone_call_enable_camera (call,linphone_call_camera_enabled (call)); - if (call->audiostream) - linphone_core_mute_mic (lc, linphone_core_is_mic_muted(lc)); -#ifdef VIDEO_ENABLED - if (call->videostream && call->camera_active) - video_stream_change_camera(call->videostream,lc->video_conf.device ); -#endif - } - ms_message("No need to restart streams, SDP is unchanged."); - return; - } else if ((md_changed == SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED) && !call->playing_ringbacktone) { - call->resultdesc = oldmd; - ms_message("Network parameters have changed, update them."); - linphone_core_update_streams_destinations(lc, call, oldmd, new_md); - sal_media_description_unref(new_md); - return; - }else{ + if ((md_changed & SAL_MEDIA_DESCRIPTION_CODEC_CHANGED) || call->playing_ringbacktone) { ms_message("Media descriptions are different, need to restart the streams."); + } else { + if (md_changed == SAL_MEDIA_DESCRIPTION_UNCHANGED) { + /*as nothing has changed, keep the oldmd */ + call->resultdesc=oldmd; + sal_media_description_unref(new_md); + if (call->all_muted){ + ms_message("Early media finished, unmuting inputs..."); + /*we were in early media, now we want to enable real media */ + linphone_call_enable_camera (call,linphone_call_camera_enabled (call)); + if (call->audiostream) + linphone_core_mute_mic (lc, linphone_core_is_mic_muted(lc)); +#ifdef VIDEO_ENABLED + if (call->videostream && call->camera_active) + video_stream_change_camera(call->videostream,lc->video_conf.device ); +#endif + } + ms_message("No need to restart streams, SDP is unchanged."); + return; + } + else { + if (md_changed & SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED) { + ms_message("Network parameters have changed, update them."); + linphone_core_update_streams_destinations(lc, call, oldmd, new_md); + } + if (md_changed & SAL_MEDIA_DESCRIPTION_CRYPTO_CHANGED) { + ms_message("Crypto parameters have changed, update them."); + linphone_call_update_crypto_parameters(call, oldmd, new_md); + } + call->resultdesc = oldmd; + sal_media_description_unref(new_md); + return; + } } } linphone_call_stop_media_streams (call); diff --git a/coreapi/chat.c b/coreapi/chat.c index ea87c9740..00f237377 100644 --- a/coreapi/chat.c +++ b/coreapi/chat.c @@ -242,4 +242,4 @@ LinphoneChatMessage* linphone_chat_message_clone(const LinphoneChatMessage* msg) new_message->cb=msg->cb; if (msg->from) new_message->from=linphone_address_clone(msg->from); return new_message; -} \ No newline at end of file +} diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index 5a18a0525..3bf93f78e 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -161,13 +161,13 @@ void linphone_call_set_authentication_token_verified(LinphoneCall *call, bool_t if (call->audiostream==NULL){ ms_error("linphone_call_set_authentication_token_verified(): No audio stream"); } - if (call->audiostream->ortpZrtpContext==NULL){ + if (call->audiostream->ms.zrtp_context==NULL){ ms_error("linphone_call_set_authentication_token_verified(): No zrtp context."); } if (!call->auth_token_verified && verified){ - ortp_zrtp_sas_verified(call->audiostream->ortpZrtpContext); + ortp_zrtp_sas_verified(call->audiostream->ms.zrtp_context); }else if (call->auth_token_verified && !verified){ - ortp_zrtp_sas_reset_verified(call->audiostream->ortpZrtpContext); + ortp_zrtp_sas_reset_verified(call->audiostream->ms.zrtp_context); } call->auth_token_verified=verified; propagate_encryption_changed(call); @@ -244,7 +244,7 @@ void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall * else md->streams[0].ptime=linphone_core_get_download_ptime(lc); l=make_codec_list(lc,lc->codecs_conf.audio_codecs,call->params.audio_bw,&md->streams[0].max_rate); - pt=payload_type_clone(rtp_profile_get_payload_from_mime(&av_profile,"telephone-event")); + pt=payload_type_clone(rtp_profile_get_payload_from_mime(lc->default_profile,"telephone-event")); l=ms_list_append(l,pt); md->streams[0].payloads=l; @@ -886,7 +886,7 @@ LinphoneCall *linphone_call_get_replaced_call(LinphoneCall *call){ **/ void linphone_call_enable_camera (LinphoneCall *call, bool_t enable){ #ifdef VIDEO_ENABLED - if (call->videostream!=NULL && call->videostream->ticker!=NULL){ + if (call->videostream!=NULL && call->videostream->ms.ticker!=NULL){ LinphoneCore *lc=call->core; MSWebCam *nowebcam=get_nowebcam_device(); if (call->camera_active!=enable && lc->video_conf.device!=nowebcam){ @@ -1065,7 +1065,7 @@ void linphone_call_set_next_video_frame_decoded_callback(LinphoneCall *call, Lin call->nextVideoFrameDecoded._func = cb; call->nextVideoFrameDecoded._user_data = user_data; #ifdef VIDEO_ENABLED - ms_filter_call_method_noarg(call->videostream->decoder, MS_VIDEO_DECODER_RESET_FIRST_IMAGE_NOTIFICATION); + ms_filter_call_method_noarg(call->videostream->ms.decoder, MS_VIDEO_DECODER_RESET_FIRST_IMAGE_NOTIFICATION); #endif } @@ -1109,20 +1109,20 @@ void linphone_call_init_audio_stream(LinphoneCall *call){ if (lc->rtptf){ RtpTransport *artp=lc->rtptf->audio_rtp_func(lc->rtptf->audio_rtp_func_data, call->audio_port); RtpTransport *artcp=lc->rtptf->audio_rtcp_func(lc->rtptf->audio_rtcp_func_data, call->audio_port+1); - rtp_session_set_transports(audiostream->session,artp,artcp); + rtp_session_set_transports(audiostream->ms.session,artp,artcp); } if ((linphone_core_get_firewall_policy(lc) == LinphonePolicyUseIce) && (call->ice_session != NULL)){ - rtp_session_set_pktinfo(audiostream->session, TRUE); - rtp_session_set_symmetric_rtp(audiostream->session, FALSE); + rtp_session_set_pktinfo(audiostream->ms.session, TRUE); + rtp_session_set_symmetric_rtp(audiostream->ms.session, FALSE); if (ice_session_check_list(call->ice_session, 0) == NULL) { ice_session_add_check_list(call->ice_session, ice_check_list_new()); } - audiostream->ice_check_list = ice_session_check_list(call->ice_session, 0); - ice_check_list_set_rtp_session(audiostream->ice_check_list, audiostream->session); + audiostream->ms.ice_check_list = ice_session_check_list(call->ice_session, 0); + ice_check_list_set_rtp_session(audiostream->ms.ice_check_list, audiostream->ms.session); } call->audiostream_app_evq = ortp_ev_queue_new(); - rtp_session_register_event_queue(audiostream->session,call->audiostream_app_evq); + rtp_session_register_event_queue(audiostream->ms.session,call->audiostream_app_evq); } void linphone_call_init_video_stream(LinphoneCall *call){ @@ -1142,7 +1142,7 @@ void linphone_call_init_video_stream(LinphoneCall *call){ if (dscp!=-1) video_stream_set_dscp(call->videostream,dscp); video_stream_enable_display_filter_auto_rotate(call->videostream, lp_config_get_int(lc->config,"video","display_filter_auto_rotate",0)); - if (video_recv_buf_size>0) rtp_session_set_recv_buf_size(call->videostream->session,video_recv_buf_size); + if (video_recv_buf_size>0) rtp_session_set_recv_buf_size(call->videostream->ms.session,video_recv_buf_size); if( lc->video_conf.displaytype != NULL) video_stream_set_display_filter_name(call->videostream,lc->video_conf.displaytype); @@ -1150,19 +1150,19 @@ void linphone_call_init_video_stream(LinphoneCall *call){ if (lc->rtptf){ RtpTransport *vrtp=lc->rtptf->video_rtp_func(lc->rtptf->video_rtp_func_data, call->video_port); RtpTransport *vrtcp=lc->rtptf->video_rtcp_func(lc->rtptf->video_rtcp_func_data, call->video_port+1); - rtp_session_set_transports(call->videostream->session,vrtp,vrtcp); + rtp_session_set_transports(call->videostream->ms.session,vrtp,vrtcp); } if ((linphone_core_get_firewall_policy(lc) == LinphonePolicyUseIce) && (call->ice_session != NULL)){ - rtp_session_set_pktinfo(call->videostream->session, TRUE); - rtp_session_set_symmetric_rtp(call->videostream->session, FALSE); + rtp_session_set_pktinfo(call->videostream->ms.session, TRUE); + rtp_session_set_symmetric_rtp(call->videostream->ms.session, FALSE); if (ice_session_check_list(call->ice_session, 1) == NULL) { ice_session_add_check_list(call->ice_session, ice_check_list_new()); } - call->videostream->ice_check_list = ice_session_check_list(call->ice_session, 1); - ice_check_list_set_rtp_session(call->videostream->ice_check_list, call->videostream->session); + call->videostream->ms.ice_check_list = ice_session_check_list(call->ice_session, 1); + ice_check_list_set_rtp_session(call->videostream->ms.ice_check_list, call->videostream->ms.session); } call->videostream_app_evq = ortp_ev_queue_new(); - rtp_session_register_event_queue(call->videostream->session,call->videostream_app_evq); + rtp_session_register_event_queue(call->videostream->ms.session,call->videostream_app_evq); #ifdef TEST_EXT_RENDERER video_stream_set_render_callback(call->videostream,rendercb,NULL); #endif @@ -1458,7 +1458,7 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, const char *cna int crypto_idx = find_crypto_index_from_tag(local_st_desc->crypto, stream->crypto_local_tag); if (crypto_idx >= 0) { - audio_stream_enable_strp( + audio_stream_enable_srtp( call->audiostream, stream->crypto[0].algo, local_st_desc->crypto[crypto_idx].master_key, @@ -1658,12 +1658,58 @@ void linphone_call_stop_media_streams_for_ice_gathering(LinphoneCall *call){ #endif } +void linphone_call_update_crypto_parameters(LinphoneCall *call, SalMediaDescription *old_md, SalMediaDescription *new_md) { + SalStreamDescription *old_stream; + SalStreamDescription *new_stream; + int i; + + old_stream = sal_media_description_find_stream(old_md, SalProtoRtpSavp, SalAudio); + new_stream = sal_media_description_find_stream(new_md, SalProtoRtpSavp, SalAudio); + if (old_stream && new_stream) { + const SalStreamDescription *local_st_desc = sal_media_description_find_stream(call->localdesc, SalProtoRtpSavp, SalAudio); + int crypto_idx = find_crypto_index_from_tag(local_st_desc->crypto, new_stream->crypto_local_tag); + if (crypto_idx >= 0) { + audio_stream_enable_srtp(call->audiostream, new_stream->crypto[0].algo, local_st_desc->crypto[crypto_idx].master_key, new_stream->crypto[0].master_key); + call->audiostream_encrypted = TRUE; + } else { + ms_warning("Failed to find local crypto algo with tag: %d", new_stream->crypto_local_tag); + call->audiostream_encrypted = FALSE; + } + for (i = 0; i < SAL_CRYPTO_ALGO_MAX; i++) { + old_stream->crypto[i].tag = new_stream->crypto[i].tag; + old_stream->crypto[i].algo = new_stream->crypto[i].algo; + strncpy(old_stream->crypto[i].master_key, new_stream->crypto[i].master_key, sizeof(old_stream->crypto[i].master_key) - 1); + } + } + +#ifdef VIDEO_ENABLED + old_stream = sal_media_description_find_stream(old_md, SalProtoRtpSavp, SalVideo); + new_stream = sal_media_description_find_stream(new_md, SalProtoRtpSavp, SalVideo); + if (old_stream && new_stream) { + const SalStreamDescription *local_st_desc = sal_media_description_find_stream(call->localdesc, SalProtoRtpSavp, SalVideo); + int crypto_idx = find_crypto_index_from_tag(local_st_desc->crypto, new_stream->crypto_local_tag); + if (crypto_idx >= 0) { + video_stream_enable_strp(call->videostream, new_stream->crypto[0].algo, local_st_desc->crypto[crypto_idx].master_key, new_stream->crypto[0].master_key); + call->videostream_encrypted = TRUE; + } else { + ms_warning("Failed to find local crypto algo with tag: %d", new_stream->crypto_local_tag); + call->videostream_encrypted = FALSE; + } + for (i = 0; i < SAL_CRYPTO_ALGO_MAX; i++) { + old_stream->crypto[i].tag = new_stream->crypto[i].tag; + old_stream->crypto[i].algo = new_stream->crypto[i].algo; + strncpy(old_stream->crypto[i].master_key, new_stream->crypto[i].master_key, sizeof(old_stream->crypto[i].master_key) - 1); + } + } +#endif +} + void linphone_call_delete_ice_session(LinphoneCall *call){ if (call->ice_session != NULL) { ice_session_destroy(call->ice_session); call->ice_session = NULL; - if (call->audiostream != NULL) call->audiostream->ice_check_list = NULL; - if (call->videostream != NULL) call->videostream->ice_check_list = NULL; + if (call->audiostream != NULL) call->audiostream->ms.ice_check_list = NULL; + if (call->videostream != NULL) call->videostream->ms.ice_check_list = NULL; call->stats[LINPHONE_CALL_STATS_AUDIO].ice_state = LinphoneIceStateNotActivated; call->stats[LINPHONE_CALL_STATS_VIDEO].ice_state = LinphoneIceStateNotActivated; } @@ -1676,7 +1722,7 @@ static void linphone_call_log_fill_stats(LinphoneCallLog *log, AudioStream *st){ void linphone_call_stop_audio_stream(LinphoneCall *call) { if (call->audiostream!=NULL) { - rtp_session_unregister_event_queue(call->audiostream->session,call->audiostream_app_evq); + rtp_session_unregister_event_queue(call->audiostream->ms.session,call->audiostream_app_evq); ortp_ev_queue_flush(call->audiostream_app_evq); ortp_ev_queue_destroy(call->audiostream_app_evq); call->audiostream_app_evq=NULL; @@ -1701,7 +1747,7 @@ void linphone_call_stop_audio_stream(LinphoneCall *call) { void linphone_call_stop_video_stream(LinphoneCall *call) { #ifdef VIDEO_ENABLED if (call->videostream!=NULL){ - rtp_session_unregister_event_queue(call->videostream->session,call->videostream_app_evq); + rtp_session_unregister_event_queue(call->videostream->ms.session,call->videostream_app_evq); ortp_ev_queue_flush(call->videostream_app_evq); ortp_ev_queue_destroy(call->videostream_app_evq); call->videostream_app_evq=NULL; @@ -1967,14 +2013,14 @@ void linphone_call_background_tasks(LinphoneCall *call, bool_t one_second_elapse RtpSession *as=NULL,*vs=NULL; float audio_load=0, video_load=0; if (call->audiostream!=NULL){ - as=call->audiostream->session; - if (call->audiostream->ticker) - audio_load=ms_ticker_get_average_load(call->audiostream->ticker); + as=call->audiostream->ms.session; + if (call->audiostream->ms.ticker) + audio_load=ms_ticker_get_average_load(call->audiostream->ms.ticker); } if (call->videostream!=NULL){ - if (call->videostream->ticker) - video_load=ms_ticker_get_average_load(call->videostream->ticker); - vs=call->videostream->session; + if (call->videostream->ms.ticker) + video_load=ms_ticker_get_average_load(call->videostream->ms.ticker); + vs=call->videostream->ms.session; } report_bandwidth(call,as,vs); ms_message("Thread processing load: audio=%f\tvideo=%f",audio_load,video_load); @@ -1984,7 +2030,7 @@ void linphone_call_background_tasks(LinphoneCall *call, bool_t one_second_elapse OrtpEvent *ev; /* Ensure there is no dangling ICE check list. */ - if (call->ice_session == NULL) call->videostream->ice_check_list = NULL; + if (call->ice_session == NULL) call->videostream->ms.ice_check_list = NULL; // Beware that the application queue should not depend on treatments fron the // mediastreamer queue. @@ -1996,7 +2042,7 @@ void linphone_call_background_tasks(LinphoneCall *call, bool_t one_second_elapse if (evt == ORTP_EVENT_ZRTP_ENCRYPTION_CHANGED){ linphone_call_videostream_encryption_changed(call, evd->info.zrtp_stream_encrypted); } else if (evt == ORTP_EVENT_RTCP_PACKET_RECEIVED) { - call->stats[LINPHONE_CALL_STATS_VIDEO].round_trip_delay = rtp_session_get_round_trip_propagation(call->videostream->session); + call->stats[LINPHONE_CALL_STATS_VIDEO].round_trip_delay = rtp_session_get_round_trip_propagation(call->videostream->ms.session); if(call->stats[LINPHONE_CALL_STATS_VIDEO].received_rtcp != NULL) freemsg(call->stats[LINPHONE_CALL_STATS_VIDEO].received_rtcp); call->stats[LINPHONE_CALL_STATS_VIDEO].received_rtcp = evd->packet; @@ -2004,7 +2050,7 @@ void linphone_call_background_tasks(LinphoneCall *call, bool_t one_second_elapse if (lc->vtable.call_stats_updated) lc->vtable.call_stats_updated(lc, call, &call->stats[LINPHONE_CALL_STATS_VIDEO]); } else if (evt == ORTP_EVENT_RTCP_PACKET_EMITTED) { - memcpy(&call->stats[LINPHONE_CALL_STATS_VIDEO].jitter_stats, rtp_session_get_jitter_stats(call->videostream->session), sizeof(jitter_stats_t)); + memcpy(&call->stats[LINPHONE_CALL_STATS_VIDEO].jitter_stats, rtp_session_get_jitter_stats(call->videostream->ms.session), sizeof(jitter_stats_t)); if(call->stats[LINPHONE_CALL_STATS_VIDEO].sent_rtcp != NULL) freemsg(call->stats[LINPHONE_CALL_STATS_VIDEO].sent_rtcp); call->stats[LINPHONE_CALL_STATS_VIDEO].sent_rtcp = evd->packet; @@ -2023,7 +2069,7 @@ void linphone_call_background_tasks(LinphoneCall *call, bool_t one_second_elapse OrtpEvent *ev; /* Ensure there is no dangling ICE check list. */ - if (call->ice_session == NULL) call->audiostream->ice_check_list = NULL; + if (call->ice_session == NULL) call->audiostream->ms.ice_check_list = NULL; // Beware that the application queue should not depend on treatments fron the // mediastreamer queue. @@ -2037,7 +2083,7 @@ void linphone_call_background_tasks(LinphoneCall *call, bool_t one_second_elapse } else if (evt == ORTP_EVENT_ZRTP_SAS_READY) { linphone_call_audiostream_auth_token_ready(call, evd->info.zrtp_sas.sas, evd->info.zrtp_sas.verified); } else if (evt == ORTP_EVENT_RTCP_PACKET_RECEIVED) { - call->stats[LINPHONE_CALL_STATS_AUDIO].round_trip_delay = rtp_session_get_round_trip_propagation(call->audiostream->session); + call->stats[LINPHONE_CALL_STATS_AUDIO].round_trip_delay = rtp_session_get_round_trip_propagation(call->audiostream->ms.session); if(call->stats[LINPHONE_CALL_STATS_AUDIO].received_rtcp != NULL) freemsg(call->stats[LINPHONE_CALL_STATS_AUDIO].received_rtcp); call->stats[LINPHONE_CALL_STATS_AUDIO].received_rtcp = evd->packet; @@ -2045,7 +2091,7 @@ void linphone_call_background_tasks(LinphoneCall *call, bool_t one_second_elapse if (lc->vtable.call_stats_updated) lc->vtable.call_stats_updated(lc, call, &call->stats[LINPHONE_CALL_STATS_AUDIO]); } else if (evt == ORTP_EVENT_RTCP_PACKET_EMITTED) { - memcpy(&call->stats[LINPHONE_CALL_STATS_AUDIO].jitter_stats, rtp_session_get_jitter_stats(call->audiostream->session), sizeof(jitter_stats_t)); + memcpy(&call->stats[LINPHONE_CALL_STATS_AUDIO].jitter_stats, rtp_session_get_jitter_stats(call->audiostream->ms.session), sizeof(jitter_stats_t)); if(call->stats[LINPHONE_CALL_STATS_AUDIO].sent_rtcp != NULL) freemsg(call->stats[LINPHONE_CALL_STATS_AUDIO].sent_rtcp); call->stats[LINPHONE_CALL_STATS_AUDIO].sent_rtcp = evd->packet; diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 48d265453..0a76f4b4f 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -710,11 +710,12 @@ static PayloadType * find_payload(RtpProfile *prof, const char *mime_type, int c return candidate; } -static bool_t get_codec(LpConfig *config, const char* type, int index, PayloadType **ret){ +static bool_t get_codec(LinphoneCore *lc, const char* type, int index, PayloadType **ret){ char codeckey[50]; const char *mime,*fmtp; int rate,channels,enabled; PayloadType *pt; + LpConfig *config=lc->config; *ret=NULL; snprintf(codeckey,50,"%s_%i",type,index); @@ -725,7 +726,7 @@ static bool_t get_codec(LpConfig *config, const char* type, int index, PayloadTy fmtp=lp_config_get_string(config,codeckey,"recv_fmtp",NULL); channels=lp_config_get_int(config,codeckey,"channels",0); enabled=lp_config_get_int(config,codeckey,"enabled",1); - pt=find_payload(&av_profile,mime,rate,channels,fmtp); + pt=find_payload(lc->default_profile,mime,rate,channels,fmtp); if (pt && enabled ) pt->flags|=PAYLOAD_TYPE_ENABLED; //ms_message("Found codec %s/%i",pt->mime_type,pt->clock_rate); if (pt==NULL) ms_warning("Ignoring codec config %s/%i with fmtp=%s because unsupported", @@ -771,10 +772,10 @@ static int codec_compare(const PayloadType *a, const PayloadType *b){ return 0; } -static MSList *add_missing_codecs(SalStreamType mtype, MSList *l){ +static MSList *add_missing_codecs(LinphoneCore *lc, SalStreamType mtype, MSList *l){ int i; for(i=0;idefault_profile,i); if (pt){ if (mtype==SalVideo && pt->type!=PAYLOAD_VIDEO) pt=NULL; @@ -815,22 +816,22 @@ static void codecs_config_read(LinphoneCore *lc) PayloadType *pt; MSList *audio_codecs=NULL; MSList *video_codecs=NULL; - for (i=0;get_codec(lc->config,"audio_codec",i,&pt);i++){ + for (i=0;get_codec(lc,"audio_codec",i,&pt);i++){ if (pt){ if (!ms_filter_codec_supported(pt->mime_type)){ ms_warning("Codec %s is not supported by mediastreamer2, removed.",pt->mime_type); }else audio_codecs=codec_append_if_new(audio_codecs,pt); } } - audio_codecs=add_missing_codecs(SalAudio,audio_codecs); - for (i=0;get_codec(lc->config,"video_codec",i,&pt);i++){ + audio_codecs=add_missing_codecs(lc,SalAudio,audio_codecs); + for (i=0;get_codec(lc,"video_codec",i,&pt);i++){ if (pt){ if (!ms_filter_codec_supported(pt->mime_type)){ ms_warning("Codec %s is not supported by mediastreamer2, removed.",pt->mime_type); }else video_codecs=codec_append_if_new(video_codecs,(void *)pt); } } - video_codecs=add_missing_codecs(SalVideo,video_codecs); + video_codecs=add_missing_codecs(lc,SalVideo,video_codecs); linphone_core_set_audio_codecs(lc,audio_codecs); linphone_core_set_video_codecs(lc,video_codecs); linphone_core_update_allocated_audio_bandwidth(lc); @@ -1077,7 +1078,7 @@ static void linphone_core_assign_payload_type(LinphoneCore *lc, PayloadType *con ms_message("assigning %s/%i payload type number %i",pt->mime_type,pt->clock_rate,number); payload_type_set_number(pt,number); if (recv_fmtp!=NULL) payload_type_set_recv_fmtp(pt,recv_fmtp); - rtp_profile_set_payload(&av_profile,number,pt); + rtp_profile_set_payload(lc->default_profile,number,pt); lc->payload_types=ms_list_append(lc->payload_types,pt); } @@ -1095,6 +1096,8 @@ static void linphone_core_handle_static_payloads(LinphoneCore *lc){ } static void linphone_core_free_payload_types(LinphoneCore *lc){ + rtp_profile_clear_all(lc->default_profile); + rtp_profile_destroy(lc->default_profile); ms_list_for_each(lc->payload_types,(void (*)(void*))payload_type_destroy); ms_list_free(lc->payload_types); lc->payload_types=NULL; @@ -1128,6 +1131,7 @@ static void linphone_core_init (LinphoneCore * lc, const LinphoneCoreVTable *vta linphone_core_set_state(lc,LinphoneGlobalStartup,"Starting up"); ortp_init(); lc->dyn_pt=96; + lc->default_profile=rtp_profile_new("default profile"); linphone_core_assign_payload_type(lc,&payload_type_pcmu8000,0,NULL); linphone_core_assign_payload_type(lc,&payload_type_gsm,3,NULL); linphone_core_assign_payload_type(lc,&payload_type_pcma8000,8,NULL); @@ -2662,8 +2666,8 @@ int linphone_core_update_call(LinphoneCore *lc, LinphoneCall *call, const Linpho #ifdef VIDEO_ENABLED bool_t has_video = call->params.has_video; if ((call->ice_session != NULL) && (call->videostream != NULL) && !params->has_video) { - ice_session_remove_check_list(call->ice_session, call->videostream->ice_check_list); - call->videostream->ice_check_list = NULL; + ice_session_remove_check_list(call->ice_session, call->videostream->ms.ice_check_list); + call->videostream->ms.ice_check_list = NULL; } call->params = *params; linphone_call_make_local_media_description(lc, call); @@ -2902,7 +2906,7 @@ int linphone_core_accept_call_with_params(LinphoneCore *lc, LinphoneCall *call, if (call->audiostream==NULL) linphone_call_init_media_streams(call); - if (!was_ringing && call->audiostream->ticker==NULL){ + if (!was_ringing && call->audiostream->ms.ticker==NULL){ audio_stream_prepare_sound(call->audiostream,lc->sound_conf.play_sndcard,lc->sound_conf.capt_sndcard); } @@ -4497,7 +4501,7 @@ void linphone_core_set_play_file(LinphoneCore *lc, const char *file){ } if (file!=NULL) { lc->play_file=ms_strdup(file); - if (call && call->audiostream && call->audiostream->ticker) + if (call && call->audiostream && call->audiostream->ms.ticker) audio_stream_play(call->audiostream,file); } } diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index 114d8165c..5ed0b907f 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -52,13 +52,31 @@ extern "C" void libmsbcg729_init(); #endif /*ANDROID*/ static JavaVM *jvm=0; +static const char* LogDomain = "Linphone"; #ifdef ANDROID -static void linphone_android_log_handler(OrtpLogLevel lev, const char *fmt, va_list args){ - int prio; - char str[4096]; +void linphone_android_log_handler(int prio, const char *fmt, va_list args) { + char str[4096]; char *current; char *next; + + vsnprintf(str, sizeof(str) - 1, fmt, args); + str[sizeof(str) - 1] = '\0'; + if (strlen(str) < 512) { + __android_log_write(prio, LogDomain, str); + } else { + current = str; + while ((next = strchr(current, '\n')) != NULL) { + *next = '\0'; + __android_log_write(prio, LogDomain, current); + current = next + 1; + } + __android_log_write(prio, LogDomain, current); + } +} + +static void linphone_android_ortp_log_handler(OrtpLogLevel lev, const char *fmt, va_list args) { + int prio; switch(lev){ case ORTP_DEBUG: prio = ANDROID_LOG_DEBUG; break; case ORTP_MESSAGE: prio = ANDROID_LOG_INFO; break; @@ -67,19 +85,7 @@ static void linphone_android_log_handler(OrtpLogLevel lev, const char *fmt, va_l case ORTP_FATAL: prio = ANDROID_LOG_FATAL; break; default: prio = ANDROID_LOG_DEFAULT; break; } - vsnprintf(str, sizeof(str) - 1, fmt, args); - str[sizeof(str) - 1] = '\0'; - if (strlen(str) < 512) { - __android_log_write(prio, LOG_DOMAIN, str); - } else { - current = str; - while ((next = strchr(current, '\n')) != NULL) { - *next = '\0'; - __android_log_write(prio, LOG_DOMAIN, current); - current = next + 1; - } - __android_log_write(prio, LOG_DOMAIN, current); - } + linphone_android_log_handler(prio, fmt, args); } int dumbMethodForAllowingUsageOfCpuFeaturesFromStaticLibMediastream() { @@ -100,9 +106,11 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *ajvm, void *reserved) //LinphoneFactory extern "C" void Java_org_linphone_core_LinphoneCoreFactoryImpl_setDebugMode(JNIEnv* env ,jobject thiz - ,jboolean isDebug) { + ,jboolean isDebug + ,jstring jdebugTag) { if (isDebug) { - linphone_core_enable_logs_with_cb(linphone_android_log_handler); + LogDomain = env->GetStringUTFChars(jdebugTag, NULL); + linphone_core_enable_logs_with_cb(linphone_android_ortp_log_handler); } else { linphone_core_disable_logs(); } @@ -1124,6 +1132,12 @@ extern "C" jint Java_org_linphone_core_LinphoneProxyConfigImpl_lookupCCCFromIso( env->ReleaseStringUTFChars(jiso, iso); return (jint) prefix; } +extern "C" jint Java_org_linphone_core_LinphoneProxyConfigImpl_lookupCCCFromE164(JNIEnv* env, jobject thiz, jlong proxyCfg, jstring je164) { + const char* e164 = env->GetStringUTFChars(je164, NULL); + int prefix = linphone_dial_plan_lookup_ccc_from_e164(e164); + env->ReleaseStringUTFChars(je164, e164); + return (jint) prefix; +} extern "C" jstring Java_org_linphone_core_LinphoneProxyConfigImpl_getDomain(JNIEnv* env ,jobject thiz ,jlong proxyCfg) { @@ -2165,6 +2179,12 @@ extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setVideoPolicy(JNIEnv *e linphone_core_set_video_policy((LinphoneCore *)lc, &vpol); } +extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setStaticPicture(JNIEnv *env, jobject thiz, jlong lc, jstring path) { + const char *cpath = env->GetStringUTFChars(path, NULL); + linphone_core_set_static_picture((LinphoneCore *)lc, cpath); + env->ReleaseStringUTFChars(path, cpath); +} + extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setCpuCountNative(JNIEnv *env, jobject thiz, jint count) { ms_set_cpu_count(count); } diff --git a/coreapi/misc.c b/coreapi/misc.c index d75722138..53f0d65cf 100644 --- a/coreapi/misc.c +++ b/coreapi/misc.c @@ -881,10 +881,10 @@ void linphone_core_update_ice_from_remote_media_description(LinphoneCall *call, ice_session_add_check_list(call->ice_session, cl); switch (stream->type) { case SalAudio: - if (call->audiostream != NULL) call->audiostream->ice_check_list = cl; + if (call->audiostream != NULL) call->audiostream->ms.ice_check_list = cl; break; case SalVideo: - if (call->videostream != NULL) call->videostream->ice_check_list = cl; + if (call->videostream != NULL) call->videostream->ms.ice_check_list = cl; break; default: break; diff --git a/coreapi/private.h b/coreapi/private.h index 925a30360..c171fac88 100644 --- a/coreapi/private.h +++ b/coreapi/private.h @@ -285,6 +285,7 @@ void linphone_call_stop_video_stream(LinphoneCall *call); void linphone_call_stop_media_streams(LinphoneCall *call); void linphone_call_delete_ice_session(LinphoneCall *call); void linphone_call_stop_media_streams_for_ice_gathering(LinphoneCall *call); +void linphone_call_update_crypto_parameters(LinphoneCall *call, SalMediaDescription *old_md, SalMediaDescription *new_md); const char * linphone_core_get_identity(LinphoneCore *lc); const char * linphone_core_get_route(LinphoneCore *lc); @@ -502,6 +503,7 @@ struct _LinphoneCore Sal *sal; LinphoneGlobalState state; struct _LpConfig *config; + RtpProfile *default_profile; net_config_t net_conf; sip_config_t sip_conf; rtp_config_t rtp_conf; diff --git a/coreapi/proxy.c b/coreapi/proxy.c index ad2ed6719..cd8a03f1b 100644 --- a/coreapi/proxy.c +++ b/coreapi/proxy.c @@ -629,7 +629,7 @@ int linphone_dial_plan_lookup_ccc_from_e164(const char* e164) { found++; } } - } while (found>1 || found==0); + } while ((found>1 || found==0) && i < sizeof(dial_plan->ccc)); if (found==1) { return atoi(elected_dial_plan->ccc); } else { @@ -985,7 +985,7 @@ void linphone_proxy_config_write_to_config_file(LpConfig *config, LinphoneProxyC lp_config_set_string(config,key,"reg_identity",obj->reg_identity); } if (obj->contact_params!=NULL){ - lp_config_set_string(config,key,"contact_params",obj->contact_params); + lp_config_set_string(config,key,"contact_parameters",obj->contact_params); } lp_config_set_int(config,key,"reg_expires",obj->expires); lp_config_set_int(config,key,"reg_sendregister",obj->reg_sendregister); diff --git a/coreapi/sal.c b/coreapi/sal.c index b89397352..f995ee712 100644 --- a/coreapi/sal.c +++ b/coreapi/sal.c @@ -190,10 +190,18 @@ static bool_t payload_list_equals(const MSList *l1, const MSList *l2){ int sal_stream_description_equals(const SalStreamDescription *sd1, const SalStreamDescription *sd2) { int result = SAL_MEDIA_DESCRIPTION_UNCHANGED; + int i; /* A different proto should result in SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED but the encryption change needs a stream restart for now, so use SAL_MEDIA_DESCRIPTION_CODEC_CHANGED */ if (sd1->proto != sd2->proto) result |= SAL_MEDIA_DESCRIPTION_CODEC_CHANGED; + for (i = 0; i < SAL_CRYPTO_ALGO_MAX; i++) { + if ((sd1->crypto[i].tag != sd2->crypto[i].tag) + || (sd1->crypto[i].algo != sd2->crypto[i].algo) + || (strncmp(sd1->crypto[i].master_key, sd2->crypto[i].master_key, sizeof(sd1->crypto[i].master_key) - 1))) { + result |= SAL_MEDIA_DESCRIPTION_CRYPTO_CHANGED; + } + } if (sd1->type != sd2->type) result |= SAL_MEDIA_DESCRIPTION_CODEC_CHANGED; if (strcmp(sd1->rtp_addr, sd2->rtp_addr) != 0) result |= SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED; diff --git a/coreapi/sal.h b/coreapi/sal.h index bc68b7044..016e6cbd3 100644 --- a/coreapi/sal.h +++ b/coreapi/sal.h @@ -56,7 +56,8 @@ typedef enum { #define SAL_MEDIA_DESCRIPTION_UNCHANGED 0x00 #define SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED 0x01 #define SAL_MEDIA_DESCRIPTION_CODEC_CHANGED 0x02 -#define SAL_MEDIA_DESCRIPTION_CHANGED (SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED | SAL_MEDIA_DESCRIPTION_CODEC_CHANGED) +#define SAL_MEDIA_DESCRIPTION_CRYPTO_CHANGED 0x04 +#define SAL_MEDIA_DESCRIPTION_CHANGED (SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED | SAL_MEDIA_DESCRIPTION_CODEC_CHANGED | SAL_MEDIA_DESCRIPTION_CRYPTO_CHANGED) const char* sal_transport_to_string(SalTransport transport); SalTransport sal_transport_parse(const char*); diff --git a/gtk/Makefile.am b/gtk/Makefile.am index d31a05bfe..78f5d0de7 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -4,7 +4,6 @@ UI_FILES= about.ui \ contact.ui \ parameters.ui \ sip_account.ui \ - chatroom.ui \ call_logs.ui \ log.ui \ buddylookup.ui \ diff --git a/gtk/buddylookup.ui b/gtk/buddylookup.ui index 34b45edfc..c32727b05 100644 --- a/gtk/buddylookup.ui +++ b/gtk/buddylookup.ui @@ -6,7 +6,6 @@ 5 Search contacts in directory center-on-parent - linphone2.png dialog False diff --git a/gtk/chat.c b/gtk/chat.c index aa1e7dff6..4363dcbac 100644 --- a/gtk/chat.c +++ b/gtk/chat.c @@ -19,33 +19,251 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "linphone.h" - #ifdef HAVE_GTK_OSX #include #endif -GtkWidget * linphone_gtk_init_chatroom(LinphoneChatRoom *cr, const char *with){ - GtkWidget *w; - GtkTextBuffer *b; - gchar *tmp; - w=linphone_gtk_create_window("chatroom"); - tmp=g_strdup_printf(_("Chat with %s"),with); - gtk_window_set_title(GTK_WINDOW(w),tmp); - g_free(tmp); - g_object_set_data(G_OBJECT(w),"cr",cr); - gtk_widget_show(w); - linphone_chat_room_set_user_data(cr,w); - b=gtk_text_view_get_buffer(GTK_TEXT_VIEW(linphone_gtk_get_widget(w,"textlog"))); - gtk_text_buffer_create_tag(b,"blue","foreground","blue",NULL); - gtk_text_buffer_create_tag(b,"green","foreground","green",NULL); +void linphone_gtk_quit_chatroom(LinphoneChatRoom *cr) { + GtkWidget *main_window=linphone_gtk_get_main_window (); + GtkWidget *nb=linphone_gtk_get_widget(main_window,"viewswitch"); + GtkWidget *friendlist=linphone_gtk_get_widget(main_window,"contact_list"); + GtkWidget *w=g_object_get_data(G_OBJECT(friendlist),"chatview"); + int idx = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(w),"idx")); + g_return_if_fail(w!=NULL); + gtk_notebook_remove_page (GTK_NOTEBOOK(nb),idx); + linphone_gtk_update_chat_picture(FALSE); + g_object_set_data(G_OBJECT(friendlist),"chatview",NULL); + gtk_widget_destroy(w); +} + +GtkWidget *create_tab_chat_header(LinphoneChatRoom *cr,const LinphoneAddress *uri){ + GtkWidget *w=gtk_hbox_new (FALSE,0); + GtkWidget *i=create_pixmap ("chat.png"); + GtkWidget *l; + GtkWidget *b=gtk_button_new_with_label("x"); + + gtk_widget_set_size_request(b,20,20); + g_signal_connect_swapped(G_OBJECT(b),"clicked",G_CALLBACK(linphone_gtk_quit_chatroom),cr); + gchar *text=g_strdup_printf("Chat "); + l=gtk_label_new (text); + gtk_box_pack_start (GTK_BOX(w),i,FALSE,FALSE,0); + gtk_box_pack_start (GTK_BOX(w),l,FALSE,FALSE,0); + gtk_box_pack_end(GTK_BOX(w),b,TRUE,TRUE,0); + gtk_widget_show_all(w); return w; } -void linphone_gtk_create_chatroom(const char *with){ +void linphone_gtk_push_text(GtkWidget *w, const LinphoneAddress *from, const char *message, gboolean me,LinphoneChatRoom *cr){ + GtkTextView *text=GTK_TEXT_VIEW(linphone_gtk_get_widget(w,"textview")); + GtkTextBuffer *buffer=gtk_text_view_get_buffer(text); + GtkTextIter iter,begin; + GList *l = g_object_get_data(G_OBJECT(w),"list"); + gtk_text_buffer_get_start_iter(buffer,&begin); + int off; + gtk_text_buffer_get_end_iter(buffer,&iter); + off=gtk_text_iter_get_offset(&iter); + + if(g_strcmp0((char *)g_object_get_data(G_OBJECT(w),"from_message"),linphone_address_as_string(from))!=0){ + gtk_text_buffer_get_iter_at_offset(buffer,&iter,off); + const char *display=linphone_address_get_display_name(from); + if (display==NULL || display[0]=='\0') { + display=linphone_address_get_username(from); + } + gtk_text_buffer_insert(buffer,&iter,display,-1); + //gtk_text_buffer_apply_tag_by_name(b,"bold",&begin,&iter); + gtk_text_buffer_get_end_iter(buffer,&iter); + gtk_text_buffer_insert(buffer,&iter,":",-1); + gtk_text_buffer_get_end_iter(buffer,&iter); + gtk_text_buffer_insert(buffer,&iter,"\n",-1); + g_object_set_data(G_OBJECT(w),"from_message",linphone_address_as_string(from)); + } + + //gtk_text_buffer_apply_tag_by_name(b,me ? "green" : "blue" ,&begin,&iter); + gtk_text_buffer_get_end_iter(buffer,&iter); + gtk_text_buffer_get_iter_at_offset(buffer,&begin,off); + if(me){ + l=g_list_append(l,GINT_TO_POINTER(gtk_text_iter_get_offset(&iter))); + g_object_set_data(G_OBJECT(w),"list",l); + } + gtk_text_buffer_insert(buffer,&iter,"\t",-1); + gtk_text_buffer_insert(buffer,&iter,message,-1); + gtk_text_buffer_get_end_iter(buffer,&iter); + gtk_text_buffer_insert(buffer,&iter,"\n",-1); + + GtkTextMark *mark=gtk_text_buffer_create_mark(buffer,NULL,&iter,FALSE); + gtk_text_view_scroll_mark_onscreen(text,mark); + //gtk_text_buffer_get_end_iter(b,&iter); + //gtk_text_iter_forward_to_line_end(&iter); + //gtk_text_view_scroll_to_iter(v,&iter,0,TRUE,1.0,1.0); + gtk_text_buffer_get_bounds (buffer, &begin, &iter); + + GHashTable *hash=(GHashTable *)g_object_get_data(G_OBJECT(linphone_gtk_get_main_window()),"history"); + if(me){ + g_hash_table_insert(hash,linphone_address_as_string_uri_only(linphone_chat_room_get_peer_address(cr)), + (gpointer)gtk_text_buffer_get_text(buffer,&begin,&iter,FALSE)); + } else { + + g_hash_table_insert(hash,linphone_address_as_string_uri_only(from), + (gpointer)gtk_text_buffer_get_text(buffer,&begin,&iter,FALSE)); + } + g_object_set_data(G_OBJECT(linphone_gtk_get_main_window()),"history",hash); +} + +const LinphoneAddress* linphone_gtk_get_used_identity(){ + LinphoneCore *lc=linphone_gtk_get_core(); + LinphoneProxyConfig *cfg; + linphone_core_get_default_proxy(lc,&cfg); + if (cfg) return linphone_address_new(linphone_proxy_config_get_identity(cfg)); + else return linphone_core_get_primary_contact_parsed(lc); +} + + +/* function in dev for displaying ack*/ +void update_chat_state_message(LinphoneChatMessageState state){ + /*GdkPixbuf *pixbuf; + + switch (state) { + case LinphoneChatMessageStateInProgress: + pixbuf=create_pixbuf("chat_message_in_progress.png"); + break; + case LinphoneChatMessageStateDelivered: + pixbuf=create_pixbuf("chat_message_delivered.png"); + break; + case LinphoneChatMessageStateNotDelivered: + pixbuf=create_pixbuf("chat_message_not_delivered.png"); + break; + default : pixbuf=NULL; + } + + GtkWidget *main_window=linphone_gtk_get_main_window(); + GtkWidget *friendlist=linphone_gtk_get_widget(main_window,"contact_list"); + GtkWidget *page=(GtkWidget*)g_object_get_data(G_OBJECT(friendlist),"chatview"); + if(page!=NULL){ + GtkTextView *text=GTK_TEXT_VIEW(linphone_gtk_get_widget(page,"textview")); + GtkTextBuffer *b=gtk_text_view_get_buffer(text); + GtkTextIter iter; + GList *l = g_object_get_data(G_OBJECT(page),"list"); + gtk_text_buffer_get_end_iter(b,&iter); + gtk_text_buffer_get_iter_at_offset(b,&iter,GPOINTER_TO_INT(g_list_nth_data(l,0))); + fprintf(stdout,"offset check %i \n",GPOINTER_TO_INT(g_list_nth_data(l,0))); + l=g_list_remove(l,g_list_nth_data(l,0)); + gtk_text_buffer_insert_pixbuf(b,&iter,pixbuf); + + //gtk_text_buffer_get_end_iter(b,&iter); + //gtk_text_buffer_insert_pixbuf(b,&iter,pixbuf); + //gtk_text_buffer_get_end_iter(b,&iter); + //gtk_text_buffer_insert(b,&iter,"\n",-1); + g_object_set_data(G_OBJECT(page),"list",l); + } else { + fprintf(stdout,"NULLLL\n"); + }*/ +} + +static void on_chat_state_changed(LinphoneChatMessage *msg, LinphoneChatMessageState state, void *user_pointer){ + g_message("chat message state is %s",linphone_chat_message_state_to_string(state)); + update_chat_state_message(state); +} + +void linphone_gtk_send_text(LinphoneChatRoom *cr){ + GtkWidget *main_window=linphone_gtk_get_main_window(); + GtkWidget *friendlist=linphone_gtk_get_widget(main_window,"contact_list"); + GtkWidget *w=(GtkWidget*)g_object_get_data(G_OBJECT(friendlist),"chatview"); + GtkWidget *entry=linphone_gtk_get_widget(w,"text_entry"); + const gchar *entered; - LinphoneChatRoom *cr=linphone_core_create_chat_room(linphone_gtk_get_core(),with); - if (!cr) return; - linphone_gtk_init_chatroom(cr,with); + entered=gtk_entry_get_text(GTK_ENTRY(entry)); + if (strlen(entered)>0) { + LinphoneChatMessage *msg; + linphone_gtk_push_text(w, + linphone_gtk_get_used_identity(), + entered,TRUE,g_object_get_data(G_OBJECT(w),"cr")); + msg=linphone_chat_room_create_message(cr,entered); + linphone_chat_room_send_message2(cr,msg,on_chat_state_changed,NULL); + gtk_entry_set_text(GTK_ENTRY(entry),""); + + } +} + +GtkWidget* linphone_gtk_init_chatroom(LinphoneChatRoom *cr, const LinphoneAddress *with){ + GtkWidget *chat_view=linphone_gtk_create_widget("main","chatroom_frame"); + GtkWidget *main_window=linphone_gtk_get_main_window (); + GHashTable *hash=g_object_get_data(G_OBJECT(main_window),"history"); + GtkNotebook *notebook=(GtkNotebook *)linphone_gtk_get_widget(main_window,"viewswitch"); + GtkWidget *text=linphone_gtk_get_widget(chat_view,"textview"); + int idx; + + gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW(text),GTK_WRAP_WORD); + gtk_text_view_set_editable (GTK_TEXT_VIEW(text),FALSE); + gtk_notebook_append_page (notebook,chat_view,create_tab_chat_header(cr,with)); + idx = gtk_notebook_page_num(notebook, chat_view); + gtk_notebook_set_current_page(notebook, idx); + gtk_widget_show(chat_view); + + GList *l = NULL; + g_object_set_data(G_OBJECT(chat_view),"cr",cr); + g_object_set_data(G_OBJECT(chat_view),"idx",GINT_TO_POINTER(idx)); + g_object_set_data(G_OBJECT(chat_view),"from_message",NULL); + g_object_set_data(G_OBJECT(chat_view),"from_chatroom",linphone_address_as_string_uri_only(with)); + g_object_set_data(G_OBJECT(chat_view),"list",l); + + gchar *buf=g_hash_table_lookup(hash,linphone_address_as_string_uri_only(with)); + if(buf != NULL){ + GtkTextIter start; + GtkTextIter end; + + GtkTextBuffer *text_buffer; + text_buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); + gtk_text_buffer_get_bounds(text_buffer, &start, &end); + g_object_set_data(G_OBJECT(chat_view),"cr",cr); + gtk_text_buffer_delete (text_buffer, &start, &end); + gtk_text_buffer_insert(text_buffer,&start,buf,-1); + } + + GtkWidget *button = linphone_gtk_get_widget(chat_view,"send"); + g_signal_connect_swapped(G_OBJECT(button),"clicked",(GCallback)linphone_gtk_send_text,cr); + + GtkWidget *entry = linphone_gtk_get_widget(chat_view,"text_entry"); + g_signal_connect_swapped(G_OBJECT(entry),"activate",(GCallback)linphone_gtk_send_text,cr); + + return chat_view; +} + +LinphoneChatRoom * linphone_gtk_create_chatroom(const LinphoneAddress *with){ + LinphoneChatRoom *cr=linphone_core_create_chat_room(linphone_gtk_get_core(),linphone_address_as_string(with)); + if (!cr) return NULL; + return cr; +} + + + +void linphone_gtk_load_chatroom(LinphoneChatRoom *cr,const LinphoneAddress *uri,GtkWidget *chat_view){ + GtkWidget *main_window=linphone_gtk_get_main_window (); + GHashTable *hash=g_object_get_data(G_OBJECT(main_window),"history"); + if(g_strcmp0((char *)g_object_get_data(G_OBJECT(chat_view),"from_chatroom"), + linphone_address_as_string_uri_only(uri))!=0) + { + GtkTextView *text_view=GTK_TEXT_VIEW(linphone_gtk_get_widget(chat_view,"textview")); + GtkTextIter start; + GtkTextIter end; + gchar *buf=g_hash_table_lookup(hash,linphone_address_as_string_uri_only(uri)); + GtkTextBuffer *text_buffer; + text_buffer=gtk_text_view_get_buffer(text_view); + gtk_text_buffer_get_bounds(text_buffer, &start, &end); + g_object_set_data(G_OBJECT(chat_view),"cr",cr); + gtk_text_buffer_delete (text_buffer, &start, &end); + if(buf!=NULL){ + gtk_text_buffer_insert(text_buffer,&start,buf,-1); + } else { + g_object_set_data(G_OBJECT(chat_view),"from_message",NULL); + GtkWidget *entry = linphone_gtk_get_widget(chat_view,"text_entry"); + g_signal_connect_swapped(G_OBJECT(entry),"activate",(GCallback)linphone_gtk_send_text,cr); + + GtkWidget *button = linphone_gtk_get_widget(chat_view,"send"); + g_signal_connect_swapped(G_OBJECT(button),"clicked",(GCallback)linphone_gtk_send_text,cr); + } + + g_object_set_data(G_OBJECT(chat_view),"from_chatroom",linphone_address_as_string_uri_only(uri)); + } } void linphone_gtk_chat_destroyed(GtkWidget *w){ @@ -58,84 +276,37 @@ void linphone_gtk_chat_close(GtkWidget *button){ gtk_widget_destroy(w); } -void linphone_gtk_push_text(GtkTextView *v, const char *from, const char *message, gboolean me){ - GtkTextBuffer *b=gtk_text_view_get_buffer(v); - GtkTextIter iter,begin; - int off; - gtk_text_buffer_get_end_iter(b,&iter); - off=gtk_text_iter_get_offset(&iter); - gtk_text_buffer_insert(b,&iter,from,-1); - gtk_text_buffer_get_end_iter(b,&iter); - gtk_text_buffer_insert(b,&iter,":\t",-1); - gtk_text_buffer_get_end_iter(b,&iter); - gtk_text_buffer_get_iter_at_offset(b,&begin,off); - gtk_text_buffer_apply_tag_by_name(b,me ? "green" : "blue" ,&begin,&iter); - gtk_text_buffer_insert(b,&iter,message,-1); - gtk_text_buffer_get_end_iter(b,&iter); - gtk_text_buffer_insert(b,&iter,"\n",-1); - gtk_text_buffer_get_end_iter(b,&iter); - - GtkTextMark *mark=gtk_text_buffer_create_mark(b,NULL,&iter,FALSE); - gtk_text_view_scroll_mark_onscreen(v,mark); - //gtk_text_buffer_get_end_iter(b,&iter); - //gtk_text_iter_forward_to_line_end(&iter); - //gtk_text_view_scroll_to_iter(v,&iter,0,TRUE,1.0,1.0); -} - -const char* linphone_gtk_get_used_identity(){ - LinphoneCore *lc=linphone_gtk_get_core(); - LinphoneProxyConfig *cfg; - linphone_core_get_default_proxy(lc,&cfg); - if (cfg) return linphone_proxy_config_get_identity(cfg); - else return linphone_core_get_primary_contact(lc); -} - -static void on_chat_state_changed(LinphoneChatMessage *msg, LinphoneChatMessageState state, void *user_pointer){ - g_message("chat message state is %s",linphone_chat_message_state_to_string(state)); -} - -void linphone_gtk_send_text(GtkWidget *button){ - GtkWidget *w=gtk_widget_get_toplevel(button); - GtkWidget *entry=linphone_gtk_get_widget(w,"text_entry"); - LinphoneChatRoom *cr=(LinphoneChatRoom*)g_object_get_data(G_OBJECT(w),"cr"); - const gchar *entered; - entered=gtk_entry_get_text(GTK_ENTRY(entry)); - if (strlen(entered)>0) { - LinphoneChatMessage *msg; - linphone_gtk_push_text(GTK_TEXT_VIEW(linphone_gtk_get_widget(w,"textlog")), - linphone_gtk_get_used_identity(), - entered,TRUE); - msg=linphone_chat_room_create_message(cr,entered); - linphone_chat_room_send_message2(cr,msg,on_chat_state_changed,NULL); - gtk_entry_set_text(GTK_ENTRY(entry),""); - } -} void linphone_gtk_text_received(LinphoneCore *lc, LinphoneChatRoom *room, const LinphoneAddress *from, const char *message){ - GtkWidget *w=(GtkWidget*)linphone_chat_room_get_user_data(room); - if (w==NULL){ - w=linphone_gtk_init_chatroom(room,linphone_address_as_string_uri_only(from)); - g_object_set_data(G_OBJECT(w),"is_notified",GINT_TO_POINTER(FALSE)); - } + GtkWidget *main_window=linphone_gtk_get_main_window(); + GtkWidget *friendlist=linphone_gtk_get_widget(main_window,"contact_list"); + GtkWidget *w; + + w=(GtkWidget*)g_object_get_data(G_OBJECT(friendlist),"chatview"); + if(w!=NULL){ + linphone_gtk_load_chatroom(room,from,w); + } else { + w=linphone_gtk_init_chatroom(room,from); + g_object_set_data(G_OBJECT(friendlist),"chatview",(gpointer)w); + } + #ifdef HAVE_GTK_OSX /* Notified when a new message is sent */ linphone_gtk_status_icon_set_blinking(TRUE); - #else - if (!gtk_window_is_active((GtkWindow*)w)){ + #else + if(!gtk_window_is_active(GTK_WINDOW(main_window))){ if(!GPOINTER_TO_INT(g_object_get_data(G_OBJECT(w),"is_notified"))){ linphone_gtk_notify(NULL,message); g_object_set_data(G_OBJECT(w),"is_notified",GINT_TO_POINTER(TRUE)); + } else { + g_object_set_data(G_OBJECT(w),"is_notified",GINT_TO_POINTER(FALSE)); } - } else { - g_object_set_data(G_OBJECT(w),"is_notified",GINT_TO_POINTER(FALSE)); } #endif - - linphone_gtk_push_text(GTK_TEXT_VIEW(linphone_gtk_get_widget(w,"textlog")), - linphone_address_as_string_uri_only(from), - message,FALSE); - gtk_window_present(GTK_WINDOW(w)); + linphone_gtk_push_text(w,from,message,FALSE,room); + //linphone_gtk_update_chat_picture(TRUE); + //gtk_window_present(GTK_WINDOW(w)); /*gtk_window_set_urgency_hint(GTK_WINDOW(w),TRUE);*/ } diff --git a/gtk/chatroom.ui b/gtk/chatroom.ui deleted file mode 100644 index dc392710b..000000000 --- a/gtk/chatroom.ui +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - - - True - - - True - True - never - automatic - - - 400 - 200 - True - True - False - word - - - - - 0 - - - - - True - - - True - True - True - - - - 0 - - - - - True - True - True - - - - True - - - True - gtk-ok - - - 0 - - - - - True - Send - - - 7 - 1 - - - - - - - False - False - 1 - - - - - False - False - 1 - - - - - True - end - - - gtk-close - True - True - True - True - - - - False - False - end - 0 - - - - - False - 2 - - - - - - diff --git a/gtk/conference.c b/gtk/conference.c index 0feed47af..546b3e1c2 100644 --- a/gtk/conference.c +++ b/gtk/conference.c @@ -22,7 +22,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - + #include "linphone.h" #define PADDING_PIXELS 4 @@ -48,27 +48,32 @@ static void init_local_participant(GtkWidget *participant){ static GtkWidget *get_conference_tab(GtkWidget *mw){ GtkWidget *box=(GtkWidget*)g_object_get_data(G_OBJECT(mw),"conference_tab"); - if (box==NULL){ - box=gtk_vbox_new(FALSE,0); - GtkWidget *participant=linphone_gtk_create_widget("main","callee_frame"); - gtk_box_set_homogeneous(GTK_BOX(box),TRUE); - init_local_participant(participant); - gtk_box_pack_start(GTK_BOX(box),participant,FALSE,FALSE,PADDING_PIXELS); - gtk_widget_show(box); - g_object_set_data(G_OBJECT(mw),"conference_tab",box); - gtk_notebook_append_page(GTK_NOTEBOOK(linphone_gtk_get_widget(mw,"viewswitch")),box, - create_conference_label()); + GtkWidget *conf_frame=(GtkWidget*)g_object_get_data(G_OBJECT(mw),"conf_frame"); + if(conf_frame!=NULL){ + if (box==NULL){ + GtkWidget *conf_box=linphone_gtk_get_widget(conf_frame,"conf_box"); + box=gtk_vbox_new(FALSE,0); + GtkWidget *participant=linphone_gtk_create_widget("main","callee_frame"); + gtk_box_set_homogeneous(GTK_BOX(box),TRUE); + init_local_participant(participant); + gtk_box_pack_start(GTK_BOX(box),participant,FALSE,FALSE,PADDING_PIXELS); + gtk_widget_show(box); + g_object_set_data(G_OBJECT(mw),"conference_tab",box); + gtk_box_pack_start(GTK_BOX(conf_box),box,FALSE,FALSE,PADDING_PIXELS); + } } return box; } static GtkWidget *find_conferencee_from_call(LinphoneCall *call){ GtkWidget *mw=linphone_gtk_get_main_window(); - GtkWidget *tab=get_conference_tab(mw); + get_conference_tab(mw); + GtkWidget *conf_frame=(GtkWidget *)g_object_get_data(G_OBJECT(mw),"conf_frame"); + GtkWidget *conf_box=linphone_gtk_get_widget(conf_frame,"conf_box"); GList *elem; GtkWidget *ret=NULL; if (call!=NULL){ - GList *l=gtk_container_get_children(GTK_CONTAINER(tab)); + GList *l=gtk_container_get_children(GTK_CONTAINER(conf_box)); for(elem=l;elem!=NULL;elem=elem->next){ GtkWidget *frame=(GtkWidget*)elem->data; if (call==g_object_get_data(G_OBJECT(frame),"call")){ @@ -84,14 +89,25 @@ static GtkWidget *find_conferencee_from_call(LinphoneCall *call){ void linphone_gtk_set_in_conference(LinphoneCall *call){ GtkWidget *mw=linphone_gtk_get_main_window(); - GtkWidget *participant=find_conferencee_from_call(call); - + GtkWidget *viewswitch=linphone_gtk_get_widget(mw,"viewswitch"); + GtkWidget *conf_frame=(GtkWidget *)g_object_get_data(G_OBJECT(mw),"conf_frame"); + g_object_set_data(G_OBJECT(mw),"is_conf",GINT_TO_POINTER(TRUE)); + if(conf_frame==NULL){ + conf_frame=linphone_gtk_create_widget("main","conf_frame"); + GtkWidget *button_conf=linphone_gtk_get_widget(conf_frame,"terminate_conf"); + GtkWidget *image=create_pixmap("stopcall-red.png"); + gtk_button_set_image(GTK_BUTTON(button_conf),image); + g_signal_connect_swapped(G_OBJECT(button_conf),"clicked",(GCallback)linphone_gtk_terminate_call,NULL); + g_object_set_data(G_OBJECT(mw),"conf_frame",(gpointer)conf_frame); + gtk_notebook_append_page(GTK_NOTEBOOK(viewswitch),conf_frame, + create_conference_label()); + } + GtkWidget *participant=find_conferencee_from_call(call); + GtkWidget *conf_box=linphone_gtk_get_widget(conf_frame,"conf_box"); if (participant==NULL){ - GtkWidget *tab=get_conference_tab(mw); const LinphoneAddress *addr=linphone_call_get_remote_address(call); participant=linphone_gtk_create_widget("main","callee_frame"); GtkWidget *sound_meter; - GtkWidget *viewswitch=linphone_gtk_get_widget(mw,"viewswitch"); gchar *markup; if (linphone_address_get_display_name(addr)!=NULL){ markup=g_strdup_printf("%s",linphone_address_get_display_name(addr)); @@ -103,17 +119,14 @@ void linphone_gtk_set_in_conference(LinphoneCall *call){ gtk_label_set_markup(GTK_LABEL(linphone_gtk_get_widget(participant,"callee_name_label")),markup); g_free(markup); sound_meter=linphone_gtk_get_widget(participant,"sound_indicator"); - linphone_gtk_init_audio_meter(sound_meter, (get_volume_t) linphone_call_get_play_volume, call); - gtk_box_pack_start(GTK_BOX(tab),participant,FALSE,FALSE,PADDING_PIXELS); + linphone_gtk_init_audio_meter(sound_meter, (get_volume_t) linphone_call_get_play_volume, call); + gtk_box_pack_start(GTK_BOX(conf_box),participant,FALSE,FALSE,PADDING_PIXELS); g_object_set_data_full(G_OBJECT(participant),"call",linphone_call_ref(call),(GDestroyNotify)linphone_call_unref); - gtk_widget_show(participant); gtk_notebook_set_current_page(GTK_NOTEBOOK(viewswitch), - gtk_notebook_page_num(GTK_NOTEBOOK(viewswitch),tab)); + gtk_notebook_page_num(GTK_NOTEBOOK(viewswitch),conf_frame)); } } - - void linphone_gtk_terminate_conference_participant(LinphoneCall *call){ GtkWidget *frame=find_conferencee_from_call(call); if (frame){ @@ -123,20 +136,23 @@ void linphone_gtk_terminate_conference_participant(LinphoneCall *call){ void linphone_gtk_unset_from_conference(LinphoneCall *call){ GtkWidget *mw=linphone_gtk_get_main_window(); - GtkWidget *box=(GtkWidget*)g_object_get_data(G_OBJECT(mw),"conference_tab"); + GtkWidget *conf_frame=(GtkWidget *)g_object_get_data(G_OBJECT(mw),"conf_frame"); + GtkWidget *conf_box=linphone_gtk_get_widget(conf_frame,"conf_box"); GtkWidget *frame; - if (box==NULL) return; /*conference tab already destroyed*/ + if (conf_box==NULL) return; /*conference tab already destroyed*/ frame=find_conferencee_from_call(call); GList *children; if (frame){ gtk_widget_destroy(frame); } - children=gtk_container_get_children(GTK_CONTAINER(box)); + children=gtk_container_get_children(GTK_CONTAINER(conf_box)); if (g_list_length(children)==2){ /*the conference is terminated */ - gtk_widget_destroy(box); - g_object_set_data(G_OBJECT(mw),"conference_tab",NULL); + gtk_widget_destroy(conf_box); + g_object_set_data(G_OBJECT(mw),"conference_tab",NULL); } + gtk_widget_destroy(conf_frame); g_list_free(children); + g_object_set_data(G_OBJECT(mw),"is_conf",GINT_TO_POINTER(FALSE)); + g_object_set_data(G_OBJECT(mw),"conf_frame",NULL); } - diff --git a/gtk/contact.ui b/gtk/contact.ui index 25ec2bee6..db22d9310 100644 --- a/gtk/contact.ui +++ b/gtk/contact.ui @@ -7,7 +7,6 @@ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 5 center-on-parent - linphone2.png dialog diff --git a/gtk/friendlist.c b/gtk/friendlist.c index d5a056fef..3ab59c613 100644 --- a/gtk/friendlist.c +++ b/gtk/friendlist.c @@ -27,12 +27,15 @@ enum{ FRIEND_NAME, FRIEND_PRESENCE_STATUS, FRIEND_ID, + FRIEND_CHATROOM, FRIEND_SIP_ADDRESS, FRIEND_ICON, + FRIEND_CALL, + FRIEND_CHAT, + FRIEND_CHAT_CONVERSATION, FRIEND_LIST_NCOL }; - typedef struct _status_picture_tab_t{ LinphoneOnlineStatus status; const char *img; @@ -67,6 +70,24 @@ static GdkPixbuf *create_status_picture(LinphoneOnlineStatus ss){ return NULL; } +static GdkPixbuf *create_call_picture(){ + GdkPixbuf *pixbuf; + pixbuf = create_pixbuf("call.png"); + return pixbuf; +} + +static GdkPixbuf *create_chat_picture(){ + GdkPixbuf *pixbuf; + pixbuf = create_pixbuf("chat.png"); + return pixbuf; +} + +static GdkPixbuf *create_active_chat_picture(){ + GdkPixbuf *pixbuf; + pixbuf = create_pixbuf("active_chat.png"); + return pixbuf; +} +/* void linphone_gtk_set_friend_status(GtkWidget *friendlist , LinphoneFriend * fid, const gchar *url, const gchar *status, const gchar *img){ GtkTreeIter iter; LinphoneFriend *tmp=0; @@ -87,10 +108,8 @@ void linphone_gtk_set_friend_status(GtkWidget *friendlist , LinphoneFriend * fid } }while(gtk_tree_model_iter_next(model,&iter)); } - } - - +*/ static void linphone_gtk_set_selection_to_uri_bar(GtkTreeView *treeview){ GtkTreeSelection *select; GtkTreeIter iter; @@ -107,22 +126,141 @@ static void linphone_gtk_set_selection_to_uri_bar(GtkTreeView *treeview){ } } +void linphone_gtk_add_contact(){ + GtkWidget *w=linphone_gtk_create_window("contact"); + int presence_enabled=linphone_gtk_get_ui_config_int("use_subscribe_notify",1); + + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(w,"show_presence")),presence_enabled); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(w,"allow_presence")), + presence_enabled); + gtk_widget_show(w); +} + +void linphone_gtk_edit_contact(GtkWidget *button){ + GtkWidget *w=gtk_widget_get_toplevel(button); + GtkTreeSelection *select; + GtkTreeIter iter; + GtkTreeModel *model; + LinphoneFriend *lf=NULL; + select = gtk_tree_view_get_selection(GTK_TREE_VIEW(linphone_gtk_get_widget(w,"contact_list"))); + if (gtk_tree_selection_get_selected (select, &model, &iter)) + { + gtk_tree_model_get (model, &iter,FRIEND_ID , &lf, -1); + linphone_gtk_show_contact(lf); + } +} + +void linphone_gtk_remove_contact(GtkWidget *button){ + GtkWidget *w=gtk_widget_get_toplevel(button); + GtkTreeSelection *select; + GtkTreeIter iter; + GtkTreeModel *model; + LinphoneFriend *lf=NULL; + select = gtk_tree_view_get_selection(GTK_TREE_VIEW(linphone_gtk_get_widget(w,"contact_list"))); + if (gtk_tree_selection_get_selected (select, &model, &iter)) + { + gtk_tree_model_get (model, &iter,FRIEND_ID , &lf, -1); + linphone_core_remove_friend(linphone_gtk_get_core(),lf); + linphone_gtk_show_friends(); + } +} + static void linphone_gtk_call_selected(GtkTreeView *treeview){ linphone_gtk_set_selection_to_uri_bar(treeview); linphone_gtk_start_call(linphone_gtk_get_widget(gtk_widget_get_toplevel(GTK_WIDGET(treeview)), "start_call")); } +void linphone_gtk_update_chat_picture(gboolean active){ + GtkTreeIter iter; + GtkWidget *w = linphone_gtk_get_main_window(); + GtkWidget *friendlist=linphone_gtk_get_widget(w,"contact_list"); + GtkTreeModel *model=gtk_tree_view_get_model(GTK_TREE_VIEW(friendlist)); + if (gtk_tree_model_get_iter_first(model,&iter)) { + do{ + if(!active){ + gtk_list_store_set(GTK_LIST_STORE(model),&iter,FRIEND_CHAT,create_chat_picture(),-1); + } else { + gtk_list_store_set(GTK_LIST_STORE(model),&iter,FRIEND_CHAT,create_active_chat_picture(),-1); + } + }while(gtk_tree_model_iter_next(model,&iter)); + } +} + +static gboolean grab_focus(GtkWidget *w){ + gtk_widget_grab_focus(w); + return FALSE; +} + +void linphone_gtk_chat_selected(GtkWidget *item){ + GtkWidget *w=gtk_widget_get_toplevel(item); + GtkTreeSelection *select; + GtkListStore *store=NULL; + GtkTreeIter iter; + GtkTreeModel *model; + LinphoneFriend *lf=NULL; + LinphoneChatRoom *cr=NULL; + GtkWidget *friendlist=linphone_gtk_get_widget(w,"contact_list"); + GtkWidget *page; + + select=gtk_tree_view_get_selection(GTK_TREE_VIEW(friendlist)); + store=GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(item))); + if (gtk_tree_selection_get_selected (select, &model, &iter)){ + GtkNotebook *notebook=(GtkNotebook *)linphone_gtk_get_widget(w,"viewswitch"); + gtk_tree_model_get(model,&iter,FRIEND_CHATROOM,&cr,-1); + const LinphoneAddress *uri; + gtk_tree_model_get (model, &iter,FRIEND_ID , &lf, -1); + uri=linphone_friend_get_address(lf); + if(cr == NULL){ + cr=linphone_gtk_create_chatroom(uri); + gtk_list_store_set(store,&iter, FRIEND_CHATROOM,cr,-1); + gtk_list_store_set(store,&iter, FRIEND_CHAT_CONVERSATION,NULL,-1); + } + page=(GtkWidget*)g_object_get_data(G_OBJECT(friendlist),"chatview"); + if(page==NULL){ + page=linphone_gtk_init_chatroom(cr,uri); + g_object_set_data(G_OBJECT(friendlist),"chatview",(gpointer)page); + } else { + linphone_gtk_load_chatroom(cr,uri,page); + } + gtk_notebook_set_current_page(notebook,gtk_notebook_page_num(notebook,page)); + linphone_gtk_update_chat_picture(FALSE); + g_idle_add((GSourceFunc)grab_focus,linphone_gtk_get_widget(page,"text_entry")); + gtk_list_store_set(store,&iter,FRIEND_CHAT,create_active_chat_picture(),-1); + } +} + void linphone_gtk_contact_activated(GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data) { - linphone_gtk_call_selected(treeview); + //linphone_gtk_call_selected(treeview); } void linphone_gtk_contact_clicked(GtkTreeView *treeview){ linphone_gtk_set_selection_to_uri_bar(treeview); + if(GPOINTER_TO_INT(g_object_get_data(G_OBJECT(treeview),"numcol"))==1){ + linphone_gtk_call_selected(treeview); + } else { + if(GPOINTER_TO_INT(g_object_get_data(G_OBJECT(treeview),"numcol"))==2){ + linphone_gtk_chat_selected(GTK_WIDGET(treeview)); + } + } + g_object_set_data(G_OBJECT(treeview),"numcol",GINT_TO_POINTER(0)); +} + + +void linphone_gtk_add_button_clicked(void){ + linphone_gtk_add_contact(); +} + +void linphone_gtk_edit_button_clicked(GtkWidget *button){ + linphone_gtk_edit_contact(button); +} + +void linphone_gtk_remove_button_clicked(GtkWidget *button){ + linphone_gtk_remove_contact(button); } static GtkWidget * create_presence_menu(){ @@ -275,7 +413,7 @@ static gint friend_sort(GtkTreeModel *model, GtkTreeIter *a,GtkTreeIter *b,gpoin static void on_name_column_clicked(GtkTreeModel *model){ GtkSortType st; gint column; - + gtk_tree_sortable_get_sort_column_id(GTK_TREE_SORTABLE(model),&column,&st); if (column==FRIEND_NAME){ if (st==GTK_SORT_ASCENDING) st=GTK_SORT_DESCENDING; @@ -284,7 +422,6 @@ static void on_name_column_clicked(GtkTreeModel *model){ gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model),FRIEND_NAME,st); } - static int get_friend_weight(const LinphoneFriend *lf){ int w=0; switch(linphone_friend_get_status(lf)){ @@ -320,14 +457,6 @@ static int friend_compare_func(const LinphoneFriend *lf1, const LinphoneFriend * return w2-w1; } -static gint friend_sort_with_presence(GtkTreeModel *model, GtkTreeIter *a,GtkTreeIter *b,gpointer user_data){ - LinphoneFriend *lf1=NULL,*lf2=NULL; - gtk_tree_model_get(model,a,FRIEND_ID,&lf1,-1); - gtk_tree_model_get(model,b,FRIEND_ID,&lf2,-1); - return friend_compare_func(lf1,lf2); -} - - static MSList *sort_friend_list(const MSList *friends){ MSList *ret=NULL; const MSList *elem; @@ -343,7 +472,7 @@ static MSList *sort_friend_list(const MSList *friends){ static void on_presence_column_clicked(GtkTreeModel *model){ GtkSortType st; gint column; - + gtk_tree_sortable_get_sort_column_id(GTK_TREE_SORTABLE(model),&column,&st); if (column==FRIEND_ID){ if (st==GTK_SORT_ASCENDING) st=GTK_SORT_DESCENDING; @@ -352,44 +481,37 @@ static void on_presence_column_clicked(GtkTreeModel *model){ gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model),FRIEND_ID,st); } -static void linphone_gtk_friend_list_init(GtkWidget *friendlist) -{ +void create_button(){ + GtkWidget *main_window = linphone_gtk_get_main_window (); + GtkWidget *button_add = linphone_gtk_get_widget(main_window,"add_button"); + GtkWidget *image; + + image=gtk_image_new_from_stock(GTK_STOCK_ADD,GTK_ICON_SIZE_MENU); + gtk_container_add (GTK_CONTAINER (button_add), image); +} + +static void linphone_gtk_friend_list_init(GtkWidget *friendlist){ GtkListStore *store; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeSelection *select; linphone_gtk_init_bookmark_icon(); - - store = gtk_list_store_new(FRIEND_LIST_NCOL, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, - G_TYPE_STRING, GDK_TYPE_PIXBUF); + + store = gtk_list_store_new(FRIEND_LIST_NCOL,GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, + G_TYPE_POINTER, G_TYPE_STRING, GDK_TYPE_PIXBUF, GDK_TYPE_PIXBUF, GDK_TYPE_PIXBUF, G_TYPE_STRING); gtk_tree_view_set_model(GTK_TREE_VIEW(friendlist),GTK_TREE_MODEL(store)); g_object_unref(G_OBJECT(store)); + /* Tree specification*/ + gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(friendlist),FALSE); gtk_tree_view_set_search_equal_func(GTK_TREE_VIEW(friendlist),friend_search_func,NULL,NULL); gtk_tree_view_set_search_column(GTK_TREE_VIEW(friendlist),FRIEND_NAME); - gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store),FRIEND_NAME,friend_sort,NULL,NULL); - gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store),FRIEND_ID,friend_sort_with_presence,NULL,NULL); - - renderer = gtk_cell_renderer_pixbuf_new (); - column = gtk_tree_view_column_new_with_attributes (_("Name"), - renderer, - "pixbuf", FRIEND_ICON, - NULL); - g_object_set (G_OBJECT(column), "resizable", TRUE, NULL); - g_signal_connect_swapped(G_OBJECT(column),"clicked",(GCallback)on_name_column_clicked,GTK_TREE_MODEL(store)); - gtk_tree_view_column_set_clickable(column,TRUE); - - renderer = gtk_cell_renderer_text_new (); - gtk_tree_view_column_pack_start(column,renderer,FALSE); - gtk_tree_view_column_add_attribute (column,renderer, - "text", - FRIEND_NAME); - - gtk_tree_view_append_column (GTK_TREE_VIEW (friendlist), column); + /*Name and presence column*/ + renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes (_("Presence status"), renderer, "text", FRIEND_PRESENCE_STATUS, @@ -398,21 +520,46 @@ static void linphone_gtk_friend_list_init(GtkWidget *friendlist) g_signal_connect_swapped(G_OBJECT(column),"clicked",(GCallback)on_presence_column_clicked,GTK_TREE_MODEL(store)); gtk_tree_view_column_set_clickable(column,TRUE); gtk_tree_view_column_set_visible(column,linphone_gtk_get_ui_config_int("friendlist_status",1)); - + renderer = gtk_cell_renderer_pixbuf_new(); - gtk_tree_view_column_pack_start(column,renderer,FALSE); + gtk_tree_view_column_pack_start(column,renderer,TRUE); gtk_tree_view_column_add_attribute (column,renderer, "pixbuf", FRIEND_PRESENCE_IMG); gtk_tree_view_append_column (GTK_TREE_VIEW (friendlist), column); + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes (_("Name"), + renderer, + "text", FRIEND_NAME,NULL); + g_object_set (G_OBJECT(column), "resizable", TRUE, NULL); + g_signal_connect_swapped(G_OBJECT(column),"clicked",(GCallback)on_name_column_clicked,GTK_TREE_MODEL(store)); + gtk_tree_view_column_set_clickable(column,TRUE); + gtk_tree_view_column_set_expand(column,TRUE); + gtk_tree_view_column_set_max_width(column,60); + gtk_tree_view_append_column (GTK_TREE_VIEW (friendlist), column); + + /* Call column*/ + renderer = gtk_cell_renderer_pixbuf_new(); + column = gtk_tree_view_column_new_with_attributes (_("Call"),renderer,"pixbuf",FRIEND_CALL,NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (friendlist), column); + + /* chat column*/ + renderer = gtk_cell_renderer_pixbuf_new(); + column = gtk_tree_view_column_new_with_attributes (_("Chat"),renderer,"pixbuf",FRIEND_CHAT,NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (friendlist), column); + select = gtk_tree_view_get_selection (GTK_TREE_VIEW (friendlist)); gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE); + + gtk_tree_view_set_grid_lines(GTK_TREE_VIEW(friendlist),GTK_TREE_VIEW_GRID_LINES_NONE); #if GTK_CHECK_VERSION(2,12,0) gtk_tree_view_set_tooltip_column(GTK_TREE_VIEW(friendlist),FRIEND_SIP_ADDRESS); #endif - gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget( - gtk_widget_get_toplevel(friendlist),"show_category")),0); + + gtk_widget_set_size_request(friendlist,200,100); + /*gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget( + gtk_widget_get_toplevel(friendlist),"show_category")),0);*/ } void linphone_gtk_show_directory_search(void){ @@ -468,29 +615,27 @@ void linphone_gtk_directory_search_button_clicked(GtkWidget *button){ linphone_gtk_get_widget(gtk_widget_get_toplevel(button),"directory_search_entry")); } - void linphone_gtk_show_friends(void){ GtkWidget *mw=linphone_gtk_get_main_window(); GtkWidget *friendlist=linphone_gtk_get_widget(mw,"contact_list"); GtkListStore *store=NULL; GtkTreeIter iter; const MSList *itf; - GtkWidget *category=linphone_gtk_get_widget(mw,"show_category"); GtkWidget *filter=linphone_gtk_get_widget(mw,"search_bar"); LinphoneCore *core=linphone_gtk_get_core(); const gchar *search=NULL; - gboolean online_only=FALSE,lookup=FALSE; + gboolean lookup=FALSE; MSList *sorted; - + linphone_gtk_show_directory_search(); if (gtk_tree_view_get_model(GTK_TREE_VIEW(friendlist))==NULL){ linphone_gtk_friend_list_init(friendlist); } + store=GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(friendlist))); gtk_list_store_clear(store); - online_only=(gtk_combo_box_get_active(GTK_COMBO_BOX(category))==1); search=gtk_entry_get_text(GTK_ENTRY(filter)); if (search==NULL || search[0]=='\0') lookup=FALSE; @@ -511,60 +656,36 @@ void linphone_gtk_show_friends(void){ continue; } } - if (!online_only || (linphone_friend_get_status(lf)!=LinphoneStatusOffline)){ - BuddyInfo *bi; - gboolean send_subscribe=linphone_friend_get_send_subscribe(lf); - if (name==NULL || name[0]=='\0') display=uri; - gtk_list_store_append(store,&iter); - gtk_list_store_set(store,&iter,FRIEND_NAME, display, - FRIEND_PRESENCE_STATUS, - send_subscribe ? linphone_online_status_to_string(linphone_friend_get_status(lf)) : "", - FRIEND_ID,lf, - FRIEND_PRESENCE_IMG, send_subscribe ? create_status_picture(linphone_friend_get_status(lf)) : NULL, - -1); - escaped=g_markup_escape_text(uri,-1); - gtk_list_store_set(store,&iter,FRIEND_SIP_ADDRESS,escaped,-1); - g_free(escaped); - bi=linphone_friend_get_info(lf); - if (bi!=NULL && bi->image_data!=NULL){ - GdkPixbuf *pbuf= - _gdk_pixbuf_new_from_memory_at_scale(bi->image_data,bi->image_length,-1,40,TRUE); - if (pbuf) { - gtk_list_store_set(store,&iter,FRIEND_ICON,pbuf,-1); - g_object_unref(G_OBJECT(pbuf)); - } - } + //BuddyInfo *bi; + gboolean send_subscribe=linphone_friend_get_send_subscribe(lf); + if (name==NULL || name[0]=='\0') { + display=linphone_address_get_username(f_uri); } + gtk_list_store_append(store,&iter); + gtk_list_store_set(store,&iter,FRIEND_NAME, display,FRIEND_ID,lf, + FRIEND_PRESENCE_IMG, send_subscribe ? create_status_picture(linphone_friend_get_status(lf)) : NULL, + -1); + + gtk_list_store_set(store,&iter,FRIEND_CALL,create_call_picture(),-1); + gtk_list_store_set(store,&iter,FRIEND_CHAT,create_chat_picture(),-1); + + escaped=g_markup_escape_text(uri,-1); + gtk_list_store_set(store,&iter,FRIEND_SIP_ADDRESS,escaped,-1); + g_free(escaped); + //bi=linphone_friend_get_info(lf); + /*if (bi!=NULL && bi->image_data!=NULL){ + GdkPixbuf *pbuf= + _gdk_pixbuf_new_from_memory_at_scale(bi->image_data,bi->image_length,-1,40,TRUE); + if (pbuf) { + //gtk_list_store_set(store,&iter,FRIEND_ICON,pbuf,-1); + g_object_unref(G_OBJECT(pbuf)); + } + }*/ ms_free(uri); } ms_list_free(sorted); } -void linphone_gtk_add_contact(){ - GtkWidget *w=linphone_gtk_create_window("contact"); - int presence_enabled=linphone_gtk_get_ui_config_int("use_subscribe_notify",1); - - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(w,"show_presence")),presence_enabled); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(w,"allow_presence")), - presence_enabled); - gtk_widget_show(w); -} - -void linphone_gtk_remove_contact(GtkWidget *button){ - GtkWidget *w=gtk_widget_get_toplevel(button); - GtkTreeSelection *select; - GtkTreeIter iter; - GtkTreeModel *model; - LinphoneFriend *lf=NULL; - select = gtk_tree_view_get_selection(GTK_TREE_VIEW(linphone_gtk_get_widget(w,"contact_list"))); - if (gtk_tree_selection_get_selected (select, &model, &iter)) - { - gtk_tree_model_get (model, &iter,FRIEND_ID , &lf, -1); - linphone_core_remove_friend(linphone_gtk_get_core(),lf); - linphone_gtk_show_friends(); - } -} - void linphone_gtk_show_contact(LinphoneFriend *lf){ GtkWidget *w=linphone_gtk_create_window("contact"); char *uri; @@ -587,37 +708,6 @@ void linphone_gtk_show_contact(LinphoneFriend *lf){ gtk_widget_show(w); } -void linphone_gtk_edit_contact(GtkWidget *button){ - GtkWidget *w=gtk_widget_get_toplevel(button); - GtkTreeSelection *select; - GtkTreeIter iter; - GtkTreeModel *model; - LinphoneFriend *lf=NULL; - select = gtk_tree_view_get_selection(GTK_TREE_VIEW(linphone_gtk_get_widget(w,"contact_list"))); - if (gtk_tree_selection_get_selected (select, &model, &iter)) - { - gtk_tree_model_get (model, &iter,FRIEND_ID , &lf, -1); - linphone_gtk_show_contact(lf); - } -} - -void linphone_gtk_chat_selected(GtkWidget *item){ - GtkWidget *w=gtk_widget_get_toplevel(item); - GtkTreeSelection *select; - GtkTreeIter iter; - GtkTreeModel *model; - LinphoneFriend *lf=NULL; - select = gtk_tree_view_get_selection(GTK_TREE_VIEW(linphone_gtk_get_widget(w,"contact_list"))); - if (gtk_tree_selection_get_selected (select, &model, &iter)) - { - char *uri; - gtk_tree_model_get (model, &iter,FRIEND_ID , &lf, -1); - uri=linphone_address_as_string(linphone_friend_get_address(lf)); - linphone_gtk_create_chatroom(uri); - ms_free(uri); - } -} - void linphone_gtk_contact_cancel(GtkWidget *button){ gtk_widget_destroy(gtk_widget_get_toplevel(button)); } @@ -730,7 +820,7 @@ static GtkWidget *linphone_gtk_create_contact_menu(GtkWidget *contact_list){ gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item); g_signal_connect_swapped(G_OBJECT(menu_item),"activate",(GCallback)linphone_gtk_remove_contact,contact_list); } - + if (ssc && (sip_setup_context_get_capabilities(ssc) & SIP_SETUP_CAP_BUDDY_LOOKUP)) { gchar *tmp=g_strdup_printf(_("Add new contact from %s directory"),linphone_proxy_config_get_domain(cfg)); @@ -744,7 +834,7 @@ static GtkWidget *linphone_gtk_create_contact_menu(GtkWidget *contact_list){ g_signal_connect_swapped(G_OBJECT(menu_item),"activate",(GCallback)linphone_gtk_show_buddy_lookup_window,ssc); gtk_widget_show(menu); } - + menu_item=gtk_image_menu_item_new_from_stock(GTK_STOCK_ADD,NULL); gtk_widget_show(menu_item); gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item); @@ -759,19 +849,75 @@ static GtkWidget *linphone_gtk_create_contact_menu(GtkWidget *contact_list){ return menu; } - gboolean linphone_gtk_popup_contact_menu(GtkWidget *list, GdkEventButton *event){ GtkWidget *m=linphone_gtk_create_contact_menu(list); - gtk_menu_popup (GTK_MENU (m), NULL, NULL, NULL, NULL, + gtk_menu_popup (GTK_MENU (m), NULL, NULL, NULL, NULL, event ? event->button : 0, event ? event->time : gtk_get_current_event_time()); return TRUE; } +gint get_col_number_from_tree_view_column (GtkTreeViewColumn *col){ + GList *cols; + gint num; + g_return_val_if_fail ( col != NULL, -1 ); + g_return_val_if_fail ( col->tree_view != NULL, -1 ); + cols = gtk_tree_view_get_columns(GTK_TREE_VIEW(col->tree_view)); + num = g_list_index(cols, (gpointer) col); + g_list_free(cols); + + return num; +} + +int longueur_list (GtkTreeView *tree_view){ + GtkTreeIter iter; + int i=0; + GtkTreeModel *model=gtk_tree_view_get_model(tree_view); + if (gtk_tree_model_get_iter_first(model,&iter)) { + do{ + i++; + }while(gtk_tree_model_iter_next(model,&iter)); + } + return i; +} + +static gint tree_view_get_cell_from_pos(GtkTreeView *view, guint x, guint y){ + GtkTreeViewColumn *col = NULL; + GList *node, *columns; + gint colx = 0; + gint coly = longueur_list(view); + gint height=0; + + g_return_val_if_fail ( view != NULL, 0 ); + columns = gtk_tree_view_get_columns(view); + + for (node = columns; node != NULL && col == NULL; node = node->next){ + GtkTreeViewColumn *checkcol = (GtkTreeViewColumn*) node->data; + gtk_tree_view_column_cell_get_size(checkcol,NULL,NULL,NULL,NULL,&height); + if (x >= colx && x < (colx + checkcol->width) && y < height*coly){ + col = checkcol; + gint num = get_col_number_from_tree_view_column(col); + return num; + } + else { + colx += checkcol->width; + } + } + g_list_free(columns); + return 0; +} + gboolean linphone_gtk_contact_list_button_pressed(GtkWidget *widget, GdkEventButton *event){ /* Ignore double-clicks and triple-clicks */ if (event->button == 3 && event->type == GDK_BUTTON_PRESS) { return linphone_gtk_popup_contact_menu(widget, event); + } else if(event->button == 1 && event->type == GDK_BUTTON_PRESS){ + gint numcol = tree_view_get_cell_from_pos(GTK_TREE_VIEW(widget),event->x,event->y); + if(numcol==2){ + g_object_set_data(G_OBJECT(widget),"numcol",GINT_TO_POINTER(1)); + } else if(numcol==3){ + g_object_set_data(G_OBJECT(widget),"numcol",GINT_TO_POINTER(2)); + } } return FALSE; } diff --git a/gtk/incall_view.c b/gtk/incall_view.c index 9798a718d..6230df1ae 100644 --- a/gtk/incall_view.c +++ b/gtk/incall_view.c @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. /* * C Implementation: incall_frame * -* Description: +* Description: * * * Author: Simon Morlat , (C) 2009 @@ -50,7 +50,7 @@ LinphoneCall *linphone_gtk_get_currently_displayed_call(gboolean *is_conf){ if (page!=NULL){ LinphoneCall *call=(LinphoneCall*)g_object_get_data(G_OBJECT(page),"call"); if (call==NULL){ - if (page==g_object_get_data(G_OBJECT(main_window),"conference_tab")){ + if (GPOINTER_TO_INT(g_object_get_data(G_OBJECT(main_window),"is_conf"))){ if (is_conf) *is_conf=TRUE; return NULL; @@ -74,12 +74,34 @@ static GtkWidget *make_tab_header(int number){ return w; } +void update_tab_header(LinphoneCall *call,gboolean pause){ + GtkWidget *w=(GtkWidget*)linphone_call_get_user_pointer(call); + GtkWidget *main_window=linphone_gtk_get_main_window(); + GtkNotebook *notebook=GTK_NOTEBOOK(linphone_gtk_get_widget(main_window,"viewswitch")); + gint call_index=GPOINTER_TO_INT(g_object_get_data(G_OBJECT(w),"call_index")); + GtkWidget *new_label=gtk_hbox_new (FALSE,0); + GtkWidget *i=NULL; + if(pause){ +i=gtk_image_new_from_stock(GTK_STOCK_MEDIA_PAUSE,GTK_ICON_SIZE_SMALL_TOOLBAR); + } else { + i=create_pixmap ("status-green.png"); + } + GtkWidget *l; + gchar *text=g_strdup_printf(_("Call #%i"),call_index); + l=gtk_label_new (text); + gtk_box_pack_start (GTK_BOX(new_label),i,FALSE,FALSE,0); + gtk_box_pack_end(GTK_BOX(new_label),l,TRUE,TRUE,0); + + gtk_notebook_set_tab_label(notebook,w,new_label); + gtk_widget_show_all(new_label); +} + static void linphone_gtk_in_call_set_animation_image(GtkWidget *callview, const char *image_name, gboolean is_stock){ GtkWidget *container=linphone_gtk_get_widget(callview,"in_call_animation"); GList *elem=gtk_container_get_children(GTK_CONTAINER(container)); GtkWidget *image; - - if (!is_stock){ + + if (!is_stock){ if (image_name==NULL){ gtk_widget_hide(container); } @@ -107,19 +129,18 @@ static void linphone_gtk_in_call_set_animation_spinner(GtkWidget *callview){ #endif } - static void linphone_gtk_transfer_call(LinphoneCall *dest_call){ LinphoneCall *call=linphone_gtk_get_currently_displayed_call(NULL); if (call) linphone_core_transfer_call_to_another(linphone_gtk_get_core(),call,dest_call); } -static void transfer_button_clicked(GtkWidget *button, gpointer call_ref){ +void transfer_button_clicked(GtkWidget *button, gpointer call_ref){ GtkWidget *menu_item; GtkWidget *menu=gtk_menu_new(); LinphoneCall *call=(LinphoneCall*)call_ref; LinphoneCore *lc=linphone_gtk_get_core(); const MSList *elem=linphone_core_get_calls(lc); - + for(;elem!=NULL;elem=elem->next){ LinphoneCall *other_call=(LinphoneCall*)elem->data; GtkWidget *call_view=(GtkWidget*)linphone_call_get_user_pointer(other_call); @@ -137,38 +158,28 @@ static void transfer_button_clicked(GtkWidget *button, gpointer call_ref){ } } gtk_menu_popup(GTK_MENU(menu),NULL,NULL,NULL,NULL,0, - gtk_get_current_event_time()); + gtk_get_current_event_time()); gtk_widget_show(menu); } - - void linphone_gtk_enable_transfer_button(LinphoneCore *lc, gboolean value){ const MSList *elem=linphone_core_get_calls(lc); for(;elem!=NULL;elem=elem->next){ LinphoneCall *call=(LinphoneCall*)elem->data; GtkWidget *call_view=(GtkWidget*)linphone_call_get_user_pointer(call); - GtkWidget *box=linphone_gtk_get_widget (call_view,"mute_pause_buttons"); - GtkWidget *button=(GtkWidget*)g_object_get_data(G_OBJECT(box),"transfer"); - if (button && value==FALSE){ - gtk_widget_destroy(button); - button=NULL; - }else if (!button && value==TRUE){ - button=gtk_button_new_with_label (_("Transfer")); - //gtk_button_set_image_position(GTK_BUTTON(button),GTK_POS_BOTTOM); - gtk_button_set_image(GTK_BUTTON(button),gtk_image_new_from_stock (GTK_STOCK_GO_FORWARD,GTK_ICON_SIZE_BUTTON)); - g_signal_connect(G_OBJECT(button),"clicked",(GCallback)transfer_button_clicked,call); - gtk_widget_show_all(button); - gtk_container_add(GTK_CONTAINER(box),button); + GtkWidget *button=linphone_gtk_get_widget (call_view,"transfer_button"); + if(button != NULL){ + gtk_widget_set_sensitive(button,value); } - g_object_set_data(G_OBJECT(box),"transfer",button); } } static void conference_button_clicked(GtkWidget *button, gpointer call_ref){ + gtk_widget_set_sensitive(button,FALSE); + g_object_set_data(G_OBJECT(linphone_gtk_get_main_window()),"conf_frame",NULL); linphone_core_add_all_to_conference(linphone_gtk_get_core()); //linphone_core_add_to_conference(linphone_gtk_get_core(),(LinphoneCall*)call_ref); - gtk_widget_set_sensitive(button,FALSE); + } void linphone_gtk_enable_conference_button(LinphoneCore *lc, gboolean value){ @@ -176,20 +187,10 @@ void linphone_gtk_enable_conference_button(LinphoneCore *lc, gboolean value){ for(;elem!=NULL;elem=elem->next){ LinphoneCall *call=(LinphoneCall*)elem->data; GtkWidget *call_view=(GtkWidget*)linphone_call_get_user_pointer(call); - GtkWidget *box=linphone_gtk_get_widget (call_view,"mute_pause_buttons"); - GtkWidget *button=(GtkWidget*)g_object_get_data(G_OBJECT(box),"conference"); - if (button && value==FALSE){ - gtk_widget_destroy(button); - button=NULL; - }else if (!button && value==TRUE){ - button=gtk_button_new_with_label (_("Conference")); - //gtk_button_set_image_position(GTK_BUTTON(button),GTK_POS_BOTTOM); - gtk_button_set_image(GTK_BUTTON(button),gtk_image_new_from_stock (GTK_STOCK_ADD,GTK_ICON_SIZE_BUTTON)); - g_signal_connect(G_OBJECT(button),"clicked",(GCallback)conference_button_clicked,call); - gtk_widget_show_all(button); - gtk_container_add(GTK_CONTAINER(box),button); + GtkWidget *button=linphone_gtk_get_widget (call_view,"conference_button"); + if (button != NULL){ + gtk_widget_set_sensitive(button,value); } - g_object_set_data(G_OBJECT(box),"conference",button); } } @@ -201,7 +202,7 @@ static void show_used_codecs(GtkWidget *callstats, LinphoneCall *call){ GtkWidget *acodec_ui=linphone_gtk_get_widget(callstats,"audio_codec"); GtkWidget *vcodec_ui=linphone_gtk_get_widget(callstats,"video_codec"); if (acodec){ - + char tmp[64]={0}; snprintf(tmp,sizeof(tmp)-1,"%s/%i/%i",acodec->mime_type,acodec->clock_rate,acodec->channels); gtk_label_set_label(GTK_LABEL(acodec_ui),tmp); @@ -286,7 +287,16 @@ static void linphone_gtk_show_call_stats(LinphoneCall *call){ refresh_call_stats(call_stats); gtk_widget_show(call_stats); } - + +} + +void linphone_gtk_enable_video_button(LinphoneCall *call, gboolean sensitive, gboolean holdon){ + GtkWidget *callview=(GtkWidget*)linphone_call_get_user_pointer (call); + GtkWidget *button; + g_return_if_fail(callview!=NULL); + button=linphone_gtk_get_widget(callview,"video_button"); + gtk_widget_set_sensitive(GTK_WIDGET(button),sensitive); + gtk_widget_set_visible(GTK_WIDGET(button),sensitive); } void linphone_gtk_create_in_call_view(LinphoneCall *call){ @@ -311,8 +321,26 @@ void linphone_gtk_create_in_call_view(LinphoneCall *call){ gtk_notebook_set_current_page(notebook, idx); call_index++; linphone_gtk_enable_hold_button (call,FALSE,TRUE); + linphone_gtk_enable_video_button (call,FALSE,TRUE); linphone_gtk_enable_mute_button( GTK_BUTTON(linphone_gtk_get_widget(call_view,"incall_mute")),FALSE); + + GtkWidget *transfer = linphone_gtk_get_widget(call_view,"transfer_button"); + gtk_button_set_image(GTK_BUTTON(transfer),gtk_image_new_from_stock + (GTK_STOCK_GO_FORWARD,GTK_ICON_SIZE_BUTTON)); + g_signal_connect(G_OBJECT(transfer),"clicked",(GCallback)transfer_button_clicked,call); + gtk_widget_hide(transfer); + + GtkWidget *conf = linphone_gtk_get_widget(call_view,"conference_button"); + gtk_button_set_image(GTK_BUTTON(conf),gtk_image_new_from_stock (GTK_STOCK_ADD,GTK_ICON_SIZE_BUTTON)); + g_signal_connect(G_OBJECT(conf),"clicked",(GCallback)conference_button_clicked,call); + gtk_widget_hide(conf); + + GtkWidget *button=linphone_gtk_get_widget(call_view,"terminate_call"); + GtkWidget *image=create_pixmap("stopcall-red.png"); + gtk_button_set_label(GTK_BUTTON(button),_("Hang up")); + gtk_button_set_image(GTK_BUTTON(button),image); + gtk_widget_show(image); g_signal_connect_swapped(G_OBJECT(linphone_gtk_get_widget(call_view,"quality_indicator")),"button-press-event",(GCallback)linphone_gtk_show_call_stats,call); } @@ -368,7 +396,7 @@ void linphone_gtk_remove_in_call_view(LinphoneCall *call){ if (linphone_core_is_in_conference(linphone_gtk_get_core())){ /*show the conference*/ gtk_notebook_set_current_page(GTK_NOTEBOOK(nb),gtk_notebook_page_num(GTK_NOTEBOOK(nb), - g_object_get_data(G_OBJECT(main_window),"conference_tab"))); + g_object_get_data(G_OBJECT(main_window),"conf_frame"))); }else gtk_notebook_set_current_page(GTK_NOTEBOOK(nb), 0); }else{ /*show the active call*/ @@ -383,9 +411,9 @@ static void display_peer_name_in_label(GtkWidget *label, const LinphoneAddress * char *uri_label; displayname=linphone_address_get_display_name(from); id=linphone_address_as_string_uri_only(from); - + if (displayname!=NULL){ - uri_label=g_markup_printf_escaped("%s\n%s", + uri_label=g_markup_printf_escaped("%s\n%s", displayname,id); }else uri_label=g_markup_printf_escaped("%s\n",id); @@ -398,10 +426,10 @@ void linphone_gtk_in_call_view_set_calling(LinphoneCall *call){ GtkWidget *status=linphone_gtk_get_widget(callview,"in_call_status"); GtkWidget *callee=linphone_gtk_get_widget(callview,"in_call_uri"); GtkWidget *duration=linphone_gtk_get_widget(callview,"in_call_duration"); - + gtk_label_set_markup(GTK_LABEL(status),_("Calling...")); display_peer_name_in_label(callee,linphone_call_get_remote_address (call)); - + gtk_label_set_text(GTK_LABEL(duration),_("00::00::00")); linphone_gtk_in_call_set_animation_spinner(callview); } @@ -415,7 +443,7 @@ void linphone_gtk_in_call_view_set_incoming(LinphoneCall *call){ gtk_label_set_markup(GTK_LABEL(status),_("Incoming call")); gtk_widget_show_all(linphone_gtk_get_widget(callview,"answer_decline_panel")); - gtk_widget_hide(linphone_gtk_get_widget(callview,"mute_pause_buttons")); + gtk_widget_hide(linphone_gtk_get_widget(callview,"buttons_panel")); display_peer_name_in_label(callee,linphone_call_get_remote_address (call)); answer_button=linphone_gtk_get_widget(callview,"accept_call"); @@ -423,11 +451,11 @@ void linphone_gtk_in_call_view_set_incoming(LinphoneCall *call){ gtk_button_set_label(GTK_BUTTON(answer_button),_("Answer")); gtk_button_set_image(GTK_BUTTON(answer_button),image); gtk_widget_show(image); - + image=create_pixmap (linphone_gtk_get_ui_config("stop_call_icon","stopcall-red.png")); gtk_button_set_image(GTK_BUTTON(linphone_gtk_get_widget(callview,"decline_call")),image); gtk_widget_show(image); - + linphone_gtk_in_call_set_animation_image(callview,GTK_STOCK_DIALOG_INFO,TRUE); } @@ -482,8 +510,6 @@ static gboolean linphone_gtk_in_call_view_refresh(LinphoneCall *call){ return TRUE; } - - typedef struct _volume_ctx{ GtkWidget *widget; get_volume_t get_volume; @@ -537,13 +563,14 @@ void linphone_gtk_uninit_audio_meter(GtkWidget *w){ void linphone_gtk_in_call_view_enable_audio_view(LinphoneCall *call, gboolean val){ GtkWidget *callview=(GtkWidget*)linphone_call_get_user_pointer(call); GtkWidget *audio_view=linphone_gtk_get_widget(callview,"incall_audioview"); - //GtkWidget *mic=linphone_gtk_get_widget(callview,"incall_mic_icon"); + GtkWidget *mic=linphone_gtk_get_widget(callview,"incall_mic_icon"); GtkWidget *spk=linphone_gtk_get_widget(callview,"incall_spk_icon"); GtkWidget *mic_level=linphone_gtk_get_widget(callview,"mic_audiolevel"); GtkWidget *spk_level=linphone_gtk_get_widget(callview,"spk_audiolevel"); GdkPixbuf *pbuf; - //gtk_image_set_from_pixbuf(GTK_IMAGE(mic),(pbuf=create_pixbuf("mic_active.png"))); - //g_object_unref(pbuf); + + gtk_image_set_from_pixbuf(GTK_IMAGE(mic),(pbuf=create_pixbuf("mic_active.png"))); + g_object_unref(pbuf); if (val){ gtk_image_set_from_pixbuf(GTK_IMAGE(spk),(pbuf=create_pixbuf("speaker.png"))); g_object_unref(pbuf); @@ -589,7 +616,7 @@ void linphone_gtk_in_call_view_show_encryption(LinphoneCall *call){ gtk_button_set_label(GTK_BUTTON(verify_button), verified ? _("Set unverified") : _("Set verified")); gtk_widget_show_all(encryption_box); - } + } break; default: gtk_widget_hide_all(encryption_box); @@ -604,24 +631,34 @@ void linphone_gtk_in_call_view_set_in_call(LinphoneCall *call){ guint taskid=GPOINTER_TO_INT(g_object_get_data(G_OBJECT(callview),"taskid")); gboolean in_conf=linphone_call_params_local_conference_mode(linphone_call_get_current_params(call)); GtkWidget *call_stats=(GtkWidget*)g_object_get_data(G_OBJECT(callview),"call_stats"); - + display_peer_name_in_label(callee,linphone_call_get_remote_address (call)); - gtk_widget_set_visible(linphone_gtk_get_widget(callview,"mute_pause_buttons"),!in_conf); + gtk_widget_set_visible(linphone_gtk_get_widget(callview,"buttons_panel"),!in_conf); + + gtk_widget_hide(linphone_gtk_get_widget(callview,"answer_decline_panel")); gtk_label_set_markup(GTK_LABEL(status),in_conf ? _("In conference") : _("In call")); + gtk_widget_set_sensitive(linphone_gtk_get_widget(callview,"conference_button"),!in_conf); + gtk_widget_set_sensitive(linphone_gtk_get_widget(callview,"transfer_button"),!in_conf); + gtk_label_set_text(GTK_LABEL(duration),_("00::00::00")); linphone_gtk_in_call_set_animation_image(callview,GTK_STOCK_MEDIA_PLAY,TRUE); + update_tab_header(call,FALSE); linphone_gtk_enable_mute_button( - GTK_BUTTON(linphone_gtk_get_widget(callview,"incall_mute")),!in_conf); + GTK_BUTTON(linphone_gtk_get_widget(callview,"incall_mute")),TRUE); + gtk_widget_show_all(linphone_gtk_get_widget(callview,"buttons_panel")); if (taskid==0){ taskid=g_timeout_add(250,(GSourceFunc)linphone_gtk_in_call_view_refresh,call); g_object_set_data(G_OBJECT(callview),"taskid",GINT_TO_POINTER(taskid)); } linphone_gtk_in_call_view_enable_audio_view(call, !in_conf); linphone_gtk_in_call_view_show_encryption(call); - if (in_conf) linphone_gtk_set_in_conference(call); + if (in_conf){ + linphone_gtk_set_in_conference(call); + gtk_widget_set_sensitive(linphone_gtk_get_widget(callview,"incall_mute"),FALSE); + } if (call_stats) show_used_codecs(call_stats,call); } @@ -630,6 +667,7 @@ void linphone_gtk_in_call_view_set_paused(LinphoneCall *call){ GtkWidget *status=linphone_gtk_get_widget(callview,"in_call_status"); gtk_widget_hide(linphone_gtk_get_widget(callview,"answer_decline_panel")); gtk_label_set_markup(GTK_LABEL(status),_("Paused call")); + linphone_gtk_in_call_set_animation_image(callview,GTK_STOCK_MEDIA_PAUSE,TRUE); } @@ -654,7 +692,7 @@ void linphone_gtk_in_call_view_terminate(LinphoneCall *call, const char *error_m GtkWidget *callview=(GtkWidget*)linphone_call_get_user_pointer(call); GtkWidget *status=linphone_gtk_get_widget(callview,"in_call_status"); guint taskid=GPOINTER_TO_INT(g_object_get_data(G_OBJECT(callview),"taskid")); - gboolean in_conf=linphone_call_params_local_conference_mode(linphone_call_get_current_params(call)); + gboolean in_conf=linphone_call_params_local_conference_mode(linphone_call_get_current_params(call)); if ((callview==NULL) || (status==NULL)) return; if (error_msg==NULL) @@ -666,13 +704,17 @@ void linphone_gtk_in_call_view_terminate(LinphoneCall *call, const char *error_m } linphone_gtk_in_call_set_animation_image(callview, linphone_gtk_get_ui_config("stop_call_icon","stopcall-red.png"),FALSE); - + gtk_widget_hide(linphone_gtk_get_widget(callview,"answer_decline_panel")); gtk_widget_hide(linphone_gtk_get_widget(callview,"incall_audioview")); + gtk_widget_hide(linphone_gtk_get_widget(callview,"terminate_call")); + gtk_widget_hide(linphone_gtk_get_widget(callview,"video_button")); + gtk_widget_hide(linphone_gtk_get_widget(callview,"transfer_button")); + gtk_widget_hide(linphone_gtk_get_widget(callview,"conference_button")); linphone_gtk_enable_mute_button( GTK_BUTTON(linphone_gtk_get_widget(callview,"incall_mute")),FALSE); linphone_gtk_enable_hold_button(call,FALSE,TRUE); - + if (taskid!=0) g_source_remove(taskid); g_timeout_add_seconds(2,(GSourceFunc)in_call_view_terminated,call); if (in_conf) @@ -726,8 +768,7 @@ void linphone_gtk_mute_clicked(GtkButton *button){ linphone_gtk_draw_mute_button(button,!active); } -void linphone_gtk_enable_mute_button(GtkButton *button, gboolean sensitive) -{ +void linphone_gtk_enable_mute_button(GtkButton *button, gboolean sensitive){ /*gtk_widget_set_sensitive(GTK_WIDGET(button),sensitive);*/ gtk_widget_set_visible(GTK_WIDGET(button),sensitive); linphone_gtk_draw_mute_button(button,FALSE); @@ -755,6 +796,7 @@ void linphone_gtk_draw_hold_button(GtkButton *button, gboolean active){ void linphone_gtk_hold_clicked(GtkButton *button){ int active=GPOINTER_TO_INT(g_object_get_data(G_OBJECT(button),"active")); LinphoneCall *call=linphone_gtk_get_currently_displayed_call(NULL); + update_tab_header(call,active); if (!call) return; if(!active) { @@ -770,6 +812,7 @@ void linphone_gtk_enable_hold_button(LinphoneCall *call, gboolean sensitive, gbo GtkWidget *callview=(GtkWidget*)linphone_call_get_user_pointer (call); GtkWidget *button; g_return_if_fail(callview!=NULL); + update_tab_header(call,!holdon); button=linphone_gtk_get_widget(callview,"hold_call"); gtk_widget_set_sensitive(GTK_WIDGET(button),sensitive); gtk_widget_set_visible(GTK_WIDGET(button),sensitive); diff --git a/gtk/linphone.h b/gtk/linphone.h index 97a4400c7..c9accb6f6 100644 --- a/gtk/linphone.h +++ b/gtk/linphone.h @@ -70,7 +70,7 @@ void linphone_gtk_show_parameters(void); void linphone_gtk_fill_soundcards(GtkWidget *pb); void linphone_gtk_fill_webcams(GtkWidget *pb); void linphone_gtk_load_identities(void); -void linphone_gtk_create_chatroom(const char *with); +LinphoneChatRoom * linphone_gtk_create_chatroom(const LinphoneAddress *with); void linphone_gtk_text_received(LinphoneCore *lc, LinphoneChatRoom *room, const LinphoneAddress *from, const char *message); void linphone_gtk_call_log_update(GtkWidget *w); void linphone_gtk_create_log_window(void); @@ -95,10 +95,20 @@ GtkWidget * linphone_gtk_show_buddy_lookup_window(SipSetupContext *ctx); void linphone_gtk_buddy_lookup_set_keyword(GtkWidget *w, const char *kw); void * linphone_gtk_wait(LinphoneCore *lc, void *ctx, LinphoneWaitingState ws, const char *purpose, float progress); +void linphone_gtk_terminate_call(GtkWidget *button); +void update_tab_header(LinphoneCall *call,gboolean pause); + void linphone_gtk_show_directory_search(void); void linphone_gtk_status_icon_set_blinking(gboolean val); void linphone_gtk_notify(LinphoneCall *call, const char *msg); +LinphoneChatRoom *linphone_gtk_start_chat(GtkTreeView* t); +void linphone_gtk_load_chatroom(LinphoneChatRoom *cr,const LinphoneAddress *uri,GtkWidget *chat_view); +void linphone_gtk_send_text(LinphoneChatRoom *cr); +GtkWidget * linphone_gtk_init_chatroom(LinphoneChatRoom *cr, const LinphoneAddress *with); +void linphone_gtk_update_chat_picture(gboolean active); +void linphone_gtk_chat_set_conversation(const LinphoneAddress *uri,gchar *conversation); +gchar * linphone_gtk_chat_get_conversation(const LinphoneAddress *uri); /*functions controlling the different views*/ gboolean linphone_gtk_use_in_call_view(); @@ -112,6 +122,7 @@ void linphone_gtk_in_call_view_set_incoming(LinphoneCall *call); void linphone_gtk_in_call_view_set_paused(LinphoneCall *call); void linphone_gtk_in_call_view_set_transfer_status(LinphoneCall *call,LinphoneCallState cstate); void linphone_gtk_mute_clicked(GtkButton *button); +void transfer_button_clicked(GtkWidget *button, gpointer call_ref); void linphone_gtk_enable_mute_button(GtkButton *button, gboolean sensitive); void linphone_gtk_enable_hold_button(LinphoneCall *call, gboolean sensitive, gboolean holdon); void linphone_gtk_enable_transfer_button(LinphoneCore *lc, gboolean value); diff --git a/gtk/main.c b/gtk/main.c index 48bf27a08..2f5728491 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -134,7 +134,7 @@ static GOptionEntry linphone_options[]={ }; #define INSTALLED_XML_DIR PACKAGE_DATA_DIR "/linphone" -#define RELATIVE_XML_DIR +#define RELATIVE_XML_DIR #define BUILD_TREE_XML_DIR "gtk" #ifndef WIN32 @@ -145,7 +145,6 @@ static GOptionEntry linphone_options[]={ #define SECRETS_FILE "linphone-zidcache" #endif - char *linphone_gtk_get_config_file(const char *filename){ const int path_max=1024; char *config_file=g_malloc0(path_max); @@ -170,7 +169,6 @@ char *linphone_gtk_get_config_file(const char *filename){ return config_file; } - #define FACTORY_CONFIG_FILE "linphonerc.factory" static char _factory_config_file[1024]; static const char *linphone_gtk_get_factory_config_file(){ @@ -180,7 +178,7 @@ static const char *linphone_gtk_get_factory_config_file(){ "%s",FACTORY_CONFIG_FILE); } else { char *progdir; - + if (progpath != NULL) { char *basename; progdir = strdup(progpath); @@ -251,8 +249,6 @@ static void linphone_gtk_init_liblinphone(const char *config_file, } } - - LinphoneCore *linphone_gtk_get_core(void){ return the_core; } @@ -306,7 +302,7 @@ GtkWidget *linphone_gtk_create_window(const char *window_name){ GtkWidget *w; if (get_ui_file(window_name,path,sizeof(path))==-1) return NULL; - + if (!gtk_builder_add_from_file (builder, path, &error)){ g_error("Couldn't load builder file: %s", error->message); g_error_free (error); @@ -331,7 +327,7 @@ GtkWidget *linphone_gtk_create_widget(const char *filename, const char *widget_n gchar *object_ids[2]; object_ids[0]=g_strdup(widget_name); object_ids[1]=NULL; - + if (get_ui_file(filename,path,sizeof(path))==-1) return NULL; if (!gtk_builder_add_objects_from_file(builder,path,object_ids,&error)){ g_error("Couldn't load %s from builder file %s: %s", widget_name,path,error->message); @@ -385,7 +381,7 @@ GtkWidget *linphone_gtk_get_widget(GtkWidget *window, const char *name){ void linphone_gtk_display_something(GtkMessageType type,const gchar *message){ GtkWidget *dialog; GtkWidget *main_window=linphone_gtk_get_main_window(); - + gtk_widget_show(main_window); if (type==GTK_MESSAGE_QUESTION) { @@ -441,7 +437,7 @@ void linphone_gtk_show_about(){ GdkPixbuf *logo=create_pixbuf( linphone_gtk_get_ui_config("logo","linphone-banner.png")); static const char *defcfg="defcfg"; - + about=linphone_gtk_create_window("about"); gtk_about_dialog_set_url_hook(about_url_clicked,NULL,NULL); memset(&filestat,0,sizeof(filestat)); @@ -483,6 +479,7 @@ static void set_video_window_decorations(GdkWindow *w){ const char *icon_path=linphone_gtk_get_ui_config("icon",LINPHONE_ICON); char video_title[256]; GdkPixbuf *pbuf=create_pixbuf(icon_path); + if (!linphone_core_in_call(linphone_gtk_get_core())){ snprintf(video_title,sizeof(video_title),"%s video",title); /* When not in call, treat the video as a normal window */ @@ -650,8 +647,8 @@ static void save_uri_history(){ static void completion_add_text(GtkEntry *entry, const char *text){ GtkTreeIter iter; GtkTreeModel *model=gtk_entry_completion_get_model(gtk_entry_get_completion(entry)); - - if (gtk_tree_model_get_iter_first(model,&iter)){ + + if (gtk_tree_model_get_iter_first(model,&iter)){ do { gchar *uri=NULL; gtk_tree_model_get(model,&iter,0,&uri,-1); @@ -672,7 +669,6 @@ static void completion_add_text(GtkEntry *entry, const char *text){ save_uri_history(); } - bool_t linphone_gtk_video_enabled(void){ const LinphoneVideoPolicy *vpol=linphone_core_get_video_policy(linphone_gtk_get_core()); return vpol->automatically_accept && vpol->automatically_initiate; @@ -690,7 +686,6 @@ void linphone_gtk_show_main_window(){ void linphone_gtk_call_terminated(LinphoneCall *call, const char *error){ GtkWidget *mw=linphone_gtk_get_main_window(); if (linphone_core_get_calls(linphone_gtk_get_core())==NULL){ - gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"terminate_call"),FALSE); gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"start_call"),TRUE); } if (linphone_gtk_use_in_call_view() && call) @@ -704,22 +699,22 @@ static void linphone_gtk_update_call_buttons(LinphoneCall *call){ const MSList *calls=linphone_core_get_calls(lc); GtkWidget *button; bool_t start_active=TRUE; - bool_t stop_active=FALSE; + //bool_t stop_active=FALSE; bool_t add_call=FALSE; int call_list_size=ms_list_size(calls); - + if (calls==NULL){ start_active=TRUE; - stop_active=FALSE; + //stop_active=FALSE; }else{ - stop_active=TRUE; + //stop_active=TRUE; start_active=TRUE; add_call=TRUE; } button=linphone_gtk_get_widget(mw,"start_call"); gtk_widget_set_sensitive(button,start_active); gtk_widget_set_visible(button,!add_call); - + button=linphone_gtk_get_widget(mw,"add_call"); if (linphone_core_sound_resources_locked(lc) || (call && linphone_call_get_state(call)==LinphoneCallIncomingReceived)) { gtk_widget_set_sensitive(button,FALSE); @@ -727,8 +722,8 @@ static void linphone_gtk_update_call_buttons(LinphoneCall *call){ gtk_widget_set_sensitive(button,start_active); } gtk_widget_set_visible(button,add_call); - - gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"terminate_call"),stop_active); + + //gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"terminate_call"),stop_active); linphone_gtk_enable_transfer_button(lc,call_list_size>1); linphone_gtk_enable_conference_button(lc,call_list_size>1); @@ -754,7 +749,6 @@ static gboolean linphone_gtk_auto_answer(LinphoneCall *call){ return FALSE; } - void linphone_gtk_start_call(GtkWidget *w){ LinphoneCore *lc=linphone_gtk_get_core(); LinphoneCall *call; @@ -771,14 +765,13 @@ void linphone_gtk_start_call(GtkWidget *w){ gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"start_call"),FALSE); g_timeout_add(100,(GSourceFunc)linphone_gtk_start_call_do,uri_bar); } - + } void linphone_gtk_uri_bar_activate(GtkWidget *w){ linphone_gtk_start_call(w); } - void linphone_gtk_terminate_call(GtkWidget *button){ gboolean is_conf; LinphoneCall *call=linphone_gtk_get_currently_displayed_call(&is_conf); @@ -808,7 +801,7 @@ void _linphone_gtk_enable_video(gboolean val){ policy.automatically_initiate=policy.automatically_accept=val; linphone_core_enable_video(linphone_gtk_get_core(),TRUE,TRUE); linphone_core_set_video_policy(linphone_gtk_get_core(),&policy); - + if (val){ linphone_core_enable_video_preview(linphone_gtk_get_core(), linphone_gtk_get_ui_config_int("videoselfview",VIDEOSELFVIEW_DEFAULT)); @@ -841,7 +834,6 @@ void linphone_gtk_used_identity_changed(GtkWidget *w){ if (sel) g_free(sel); } - void on_proxy_refresh_button_clicked(GtkWidget *w){ LinphoneCore *lc=linphone_gtk_get_core(); MSList const *item=linphone_core_get_proxy_config_list(lc); @@ -895,7 +887,6 @@ typedef struct _AuthTimeout{ GtkWidget *w; } AuthTimeout; - static void auth_timeout_clean(AuthTimeout *tout){ tout->w=NULL; } @@ -947,7 +938,7 @@ static void linphone_gtk_auth_info_requested(LinphoneCore *lc, const char *realm LinphoneAuthInfo *info; gchar *msg; GtkWidget *mw=linphone_gtk_get_main_window(); - + if (mw && GTK_WIDGET_VISIBLE(linphone_gtk_get_widget(mw,"login_frame"))){ /*don't prompt for authentication when login frame is visible*/ linphone_core_abort_authentication(lc,NULL); @@ -969,6 +960,7 @@ static void linphone_gtk_auth_info_requested(LinphoneCore *lc, const char *realm static void linphone_gtk_display_status(LinphoneCore *lc, const char *status){ GtkWidget *w=linphone_gtk_get_main_window(); GtkWidget *status_bar=linphone_gtk_get_widget(w,"status_bar"); + gtk_statusbar_push(GTK_STATUSBAR(status_bar), gtk_statusbar_get_context_id(GTK_STATUSBAR(status_bar),""), status); @@ -1037,14 +1029,14 @@ void linphone_gtk_notify(LinphoneCall *call, const char *msg){ if (!notify_init ("Linphone")) ms_error("Libnotify failed to init."); #endif if (!call) { - + #ifdef HAVE_NOTIFY if (!notify_notification_show(notify_notification_new("Linphone",msg,NULL #ifdef HAVE_NOTIFY1 ,NULL #endif ),NULL)) - + ms_error("Failed to send notification."); #else linphone_gtk_show_main_window(); @@ -1157,7 +1149,7 @@ static void linphone_gtk_call_state_changed(LinphoneCore *lc, LinphoneCall *call if (auto_answer) { linphone_call_ref(call); g_timeout_add(2000,(GSourceFunc)linphone_gtk_auto_answer ,call); - } + } break; case LinphoneCallResuming: linphone_gtk_enable_hold_button(call,TRUE,TRUE); @@ -1165,8 +1157,10 @@ static void linphone_gtk_call_state_changed(LinphoneCore *lc, LinphoneCall *call break; case LinphoneCallPausing: linphone_gtk_enable_hold_button(call,TRUE,FALSE); + update_tab_header(call,FALSE); case LinphoneCallPausedByRemote: linphone_gtk_in_call_view_set_paused(call); + update_tab_header(call,TRUE); break; case LinphoneCallConnected: linphone_gtk_enable_hold_button (call,TRUE,TRUE); @@ -1193,7 +1187,7 @@ static void update_registration_status(LinphoneProxyConfig *cfg, LinphoneRegistr GtkTreeIter iter; gboolean found=FALSE; const char *stock_id=NULL; - + if (gtk_tree_model_get_iter_first(model,&iter)){ gpointer p; do{ @@ -1227,7 +1221,7 @@ static void update_registration_status(LinphoneProxyConfig *cfg, LinphoneRegistr gtk_list_store_set(GTK_LIST_STORE(model),&iter,1,stock_id,-1); } -static void linphone_gtk_registration_state_changed(LinphoneCore *lc, LinphoneProxyConfig *cfg, +static void linphone_gtk_registration_state_changed(LinphoneCore *lc, LinphoneProxyConfig *cfg, LinphoneRegistrationState rs, const char *msg){ switch (rs){ case LinphoneRegistrationOk: @@ -1279,13 +1273,13 @@ static GtkWidget *create_icon_menu(){ GtkWidget *image; gchar *tmp; const gchar *homesite; - + homesite=linphone_gtk_get_ui_config("home","http://www.linphone.org"); menu_item=gtk_image_menu_item_new_with_label(_("Website link")); tmp=g_strdup(homesite); g_object_set_data(G_OBJECT(menu_item),"home",tmp); g_object_weak_ref(G_OBJECT(menu_item),(GWeakNotify)g_free,tmp); - + image=gtk_image_new_from_stock(GTK_STOCK_HELP,GTK_ICON_SIZE_MENU); gtk_widget_show(image); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item),image); @@ -1293,7 +1287,7 @@ static GtkWidget *create_icon_menu(){ gtk_widget_show(menu_item); gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item); g_signal_connect(G_OBJECT(menu_item),"activate",(GCallback)linphone_gtk_link_to_website,NULL); - + menu_item=gtk_image_menu_item_new_from_stock(GTK_STOCK_ABOUT,NULL); gtk_widget_show(menu_item); gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item); @@ -1447,6 +1441,7 @@ static void linphone_gtk_dtmf_released(GtkButton *button){ linphone_core_stop_dtmf (linphone_gtk_get_core()); } + static void linphone_gtk_connect_digits(void){ GtkContainer *cont=GTK_CONTAINER(linphone_gtk_get_widget(linphone_gtk_get_main_window(),"dtmf_table")); GList *children=gtk_container_get_children(cont); @@ -1486,18 +1481,23 @@ static void linphone_gtk_configure_main_window(){ static const char *home; static const char *start_call_icon; static const char *add_call_icon; - static const char *stop_call_icon; + //static const char *stop_call_icon; static const char *search_icon; static gboolean update_check_menu; static gboolean buttons_have_borders; static gboolean show_abcd; GtkWidget *w=linphone_gtk_get_main_window(); + GHashTable *contacts_history; + + contacts_history=g_hash_table_new_full(g_str_hash, g_str_equal,g_free, NULL); + g_object_set_data(G_OBJECT(w),"history",(gpointer)contacts_history); + if (!config_loaded){ title=linphone_gtk_get_ui_config("title","Linphone"); home=linphone_gtk_get_ui_config("home","http://www.linphone.org"); start_call_icon=linphone_gtk_get_ui_config("start_call_icon","startcall-green.png"); add_call_icon=linphone_gtk_get_ui_config("add_call_icon","addcall-green.png"); - stop_call_icon=linphone_gtk_get_ui_config("stop_call_icon","stopcall-red.png"); + //stop_call_icon=linphone_gtk_get_ui_config("stop_call_icon","stopcall-red.png"); search_icon=linphone_gtk_get_ui_config("directory_search_icon",NULL); update_check_menu=linphone_gtk_get_ui_config_int("update_check_menu",0); buttons_have_borders=linphone_gtk_get_ui_config_int("buttons_border",1); @@ -1520,12 +1520,6 @@ static void linphone_gtk_configure_main_window(){ if (!buttons_have_borders) gtk_button_set_relief(GTK_BUTTON(linphone_gtk_get_widget(w,"add_call")),GTK_RELIEF_NONE); } - if (stop_call_icon){ - gtk_button_set_image(GTK_BUTTON(linphone_gtk_get_widget(w,"terminate_call")), - create_pixmap (stop_call_icon)); - if (!buttons_have_borders) - gtk_button_set_relief(GTK_BUTTON(linphone_gtk_get_widget(w,"terminate_call")),GTK_RELIEF_NONE); - } if (search_icon){ GdkPixbuf *pbuf=create_pixbuf(search_icon); if(pbuf != NULL) { @@ -1632,6 +1626,7 @@ static void linphone_gtk_init_main_window(){ linphone_gtk_call_log_update(main_window); linphone_gtk_update_call_buttons (NULL); + g_object_set_data(G_OBJECT(main_window),"is_conf",GINT_TO_POINTER(FALSE)); /*prevent the main window from being destroyed by a user click on WM controls, instead we hide it*/ g_signal_connect (G_OBJECT (main_window), "delete-event", G_CALLBACK (linphone_gtk_close), main_window); @@ -1764,11 +1759,11 @@ int main(int argc, char *argv[]){ g_thread_init(NULL); #endif gdk_threads_init(); - + progpath = strdup(argv[0]); - + config_file=linphone_gtk_get_config_file(NULL); - + #ifdef WIN32 /*workaround for windows: sometimes LANG is defined to an integer value, not understood by gtk */ @@ -1792,8 +1787,10 @@ int main(int argc, char *argv[]){ if (strncmp(lang,"zh",2)==0){ workaround_gtk_entry_chinese_bug=TRUE; } -#else +#elif __APPLE__ setenv("LANG",lang,1); +#else + setenv("LANGUAGE",lang,1); #endif } @@ -1809,13 +1806,13 @@ int main(int argc, char *argv[]){ gtk_rc_add_default_file("./gtkrc"); #endif gdk_threads_enter(); - + if (!gtk_init_with_args(&argc,&argv,_("A free SIP video-phone"), linphone_options,NULL,NULL)){ gdk_threads_leave(); return -1; } - + settings=gtk_settings_get_default(); g_type_class_unref (g_type_class_ref (GTK_TYPE_IMAGE_MENU_ITEM)); g_type_class_unref (g_type_class_ref (GTK_TYPE_BUTTON)); @@ -1850,18 +1847,20 @@ int main(int argc, char *argv[]){ /*never block termination:*/ g_signal_connect(G_OBJECT(theMacApp),"NSApplicationBlockTermination",(GCallback)on_block_termination,NULL); #endif - + the_ui=linphone_gtk_create_window("main"); - + + g_object_set_data(G_OBJECT(the_ui),"is_created",GINT_TO_POINTER(FALSE)); + linphone_gtk_create_log_window(); linphone_core_enable_logs_with_cb(linphone_gtk_log_handler); linphone_gtk_init_liblinphone(config_file, factory_config_file); - + g_set_application_name(app_name); pbuf=create_pixbuf(linphone_gtk_get_ui_config("icon",LINPHONE_ICON)); if (pbuf!=NULL) gtk_window_set_default_icon(pbuf); - + /* do not lower timeouts under 30 ms because it exhibits a bug on gtk+/win32, with cpu running 20% all the time...*/ gtk_timeout_add(30,(GtkFunction)linphone_gtk_iterate,(gpointer)linphone_gtk_get_core()); gtk_timeout_add(30,(GtkFunction)linphone_gtk_check_logs,(gpointer)NULL); diff --git a/gtk/main.ui b/gtk/main.ui index a57b79966..1229289cc 100644 --- a/gtk/main.ui +++ b/gtk/main.ui @@ -1,8 +1,13 @@ - + - + + True + False + gtk-add + + False @@ -11,18 +16,42 @@ 0 none - + True False 12 - + True False + 12 - + True False + + + True + False + + + True + True + False + + + False + False + 0 + + + + + False + True + 0 + + True @@ -35,42 +64,23 @@ True True - end - 0 + 1 - - True - True - False + + 90 + 10 + True + False False False - 1 + 2 - - True - True - 0 - - - - - 170 - 30 - True - False - - - False - False - end - 1 - @@ -82,11 +92,169 @@ + + False + + + True + False + 0 + none + + + True + False + + + True + True + never + + + True + True + + + + + True + True + 0 + + + + + True + False + + + True + True + True + + False + False + True + True + + + True + True + 0 + + + + + True + True + True + False + + + True + False + + + True + False + gtk-ok + + + True + True + 0 + + + + + True + False + Send + + + True + True + 7 + 1 + + + + + + + False + False + 1 + + + + + False + False + 1 + + + + + + + + + + + + False + + + True + False + 0 + none + + + True + False + + + + + + True + False + + + End conference + True + True + True + False + + + False + False + end + 0 + + + + + True + True + end + 1 + + + + + + + False False + cursor 0.5 none @@ -184,29 +352,31 @@ False - False + True 2 False + True - - True - True - False - half - + + True + False + gtk-missing-image + 1 - True + False False 0 + 90 + 10 True False @@ -216,6 +386,19 @@ 1 + + + 90 + True + False + + + False + False + end + 2 + + True @@ -223,17 +406,6 @@ gtk-missing-image 1 - - True - False - 2 - - - - - True - False - False False @@ -244,7 +416,7 @@ False - False + True 3 @@ -290,11 +462,21 @@ - + True False + 2 + 3 True - spread + + + Video + True + True + True + False + + Pause @@ -304,29 +486,74 @@ - False - False - 0 + 1 + 2 - - Video + + Mute + True + True + True + False + half + + + + 2 + 3 + + + + + Transfer True True True False - False - False - 1 + 1 + 2 + + + + + Hang up + True + True + True + False + + + + 1 + 2 + 1 + 2 + + + + + Conference + True + True + True + False + + + 2 + 3 + 1 + 2 False False + 7 5 @@ -368,9 +595,10 @@ + 90 True False - GDK_BUTTON_PRESS_MASK | GDK_STRUCTURE_MASK + GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_STRUCTURE_MASK Call quality rating @@ -384,6 +612,11 @@ + + True + False + gtk-edit + True False @@ -621,38 +854,11 @@ True False + 8 True False - - - True - True - True - False - - - - False - False - 0 - - - - - True - True - Initiate a new call - False - - - - False - False - 1 - - True @@ -676,9 +882,8 @@ True True - True - Enter username, phone number, or full sip address + True False False True @@ -708,23 +913,40 @@ True True - 2 + 0 - - True + True True + Initiate a new call False - + False False - 3 + 1 + + + True + True + True + False + + + + False + True + 2 + + + + + False @@ -734,117 +956,575 @@ - + True - True + False - + True False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + none + True + False + False + True + True + + + + False + True + 4 + 0 + + + + + + + + True + True + automatic + automatic + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + False + 0 + + + + + + + + + True + True + 2 + + + + + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + + + True + True + True + Add + immediate + False + add_image + 1 + + + + False + False + 0 + + + + + True + True + True + Edit + False + edit_image + + + + False + False + 1 + + + + + True + True + True + False + remove_image + + + + False + False + 2 + + + + + False + False + 3 + + + + + False + False + 12 + 0 + + + + + True + True + + True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - + True False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - + True False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - Lookup: - - - True - True - 12 - 0 - - - - - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - - True - False - False - True - True - - - - True - True - 4 - 1 - - - - - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - in - - - True - True - 8 - 2 - - - - - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - model1 - 0 - + 0.5 + none - - - 0 - + + True + False + 0 + 0 + + + True + False + 0 + + + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 4 + 4 + 4 + True + + + D + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + + + 3 + 4 + 3 + 4 + + + + + # + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + + + 2 + 3 + 3 + 4 + + + + + 0 + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + + + 1 + 2 + 3 + 4 + + + + + * + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + + + 3 + 4 + + + + + C + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + + + 3 + 4 + 2 + 3 + + + + + 9 + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + + + 2 + 3 + 2 + 3 + + + + + 8 + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + + + 1 + 2 + 2 + 3 + + + + + 7 + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + + + 2 + 3 + + + + + B + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + + + 3 + 4 + 1 + 2 + + + + + 6 + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + + + 2 + 3 + 1 + 2 + + + + + 5 + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + + + 1 + 2 + 1 + 2 + + + + + 4 + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + + + 1 + 2 + + + + + A + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + + + 3 + 4 + + + + + 3 + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + + + 2 + 3 + + + + + 2 + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + + + 1 + 2 + + + + + 1 + 40 + 40 + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + + + + + + + + + + True True - 4 + 0 + + + + + False + 0 + none + + + False + + + True + True + + True + False + False + True + True + + + True + True + 0 + + + + + True + True + True + False + none + + + + True + False + + + True + False + gtk-find + + + True + True + 0 + + + + + True + False + Search + + + True + True + 1 + + + + + + + False + True + 1 + + + + + + + True + False + <b>Add contacts from directory</b> + True + + + + + False + False + 5 + 2 + + + + + True + False + + + Add contact + True + True + False + image10 + + + + False + False + 0 + + + + + False + False 3 - False + True + True + 0 + + + + + + + True + False + + + True + False + gtk-missing-image + 1 + + + True True 0 - + True - True - - - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True - 0 - - - - - - + False + Keypad True @@ -852,225 +1532,112 @@ 1 + + + False + + + + + True + False - + + True False - 0 - none + 2 - + + True False + end - + + gtk-clear True True - - True - False - False - True - True - - - - + True + False + True + - True - True + False + False 0 - - True - True - True - False - none - - - - True - False - - - True - False - gtk-find - - - True - True - 0 - - - - - True - False - Search - - - True - True - 1 - - - - - - - False - True - 1 - + + + + - - - - - True - False - <b>Add contacts from directory</b> - True - - - - - False - False - 5 - 2 - - - - - True - False - - - Add contact - True - True - False - image10 - False - False + True + end 0 + + + True + True + never + + + 350 + True + True + False + + + + + + + True + True + 1 + + - False - False - 3 + True + True + 0 - True - True - 0 - - - - - - - True - False - - - True - False - gtk-directory - 1 - - - True - True - 0 - - - - - True - False - Contacts - - - True - True 1 - - - False - - - - - True - False - - + + True False - 2 - + True False - end - - - gtk-clear - True - True - True - False - True - - - - False - False - 0 - - - - - - - - + gtk-refresh + 1 - False + True True - end 0 - + True - True - never - - - True - True - False - - - - + False + 0.49000000953674316 + Recent calls True @@ -1080,365 +1647,22 @@ - True - True - 0 - - - - - 1 - - - - - True - False - - - True - False - gtk-refresh - 1 - - - True - True - 0 - - - - - True - False - 0.49000000953674316 - Recent calls - - - True - True 1 + False - - - 1 - False - - - - - True - False - 0.5 - none - - True - False - 0 - 0 - - - True - False - 0 - - - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 4 - 4 - 4 - True - - - D - True - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - - - 3 - 4 - 3 - 4 - - - - - # - True - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - - - 2 - 3 - 3 - 4 - - - - - 0 - True - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - - - 1 - 2 - 3 - 4 - - - - - * - True - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - - - 3 - 4 - - - - - C - True - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - - - 3 - 4 - 2 - 3 - - - - - 9 - True - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - - - 2 - 3 - 2 - 3 - - - - - 8 - True - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - - - 1 - 2 - 2 - 3 - - - - - 7 - True - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - - - 2 - 3 - - - - - B - True - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - - - 3 - 4 - 1 - 2 - - - - - 6 - True - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - - - 2 - 3 - 1 - 2 - - - - - 5 - True - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - - - 1 - 2 - 1 - 2 - - - - - 4 - True - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - - - 1 - 2 - - - - - A - True - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - - - 3 - 4 - - - - - 3 - True - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - - - 2 - 3 - - - - - 2 - True - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - - - 1 - 2 - - - - - 1 - 40 - 40 - True - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - - - - - - - + - + - 2 - - - - - True - False - - - True - False - gtk-missing-image - 1 - - - True - True - 0 - - - - - True - False - Keypad - - - True - True - 1 - - - - - 2 - False + True + True + 4 + 1 @@ -1842,4 +2066,10 @@ + + True + False + Delete + gtk-remove + diff --git a/gtk/parameters.ui b/gtk/parameters.ui index d6d2e4927..53a644796 100644 --- a/gtk/parameters.ui +++ b/gtk/parameters.ui @@ -176,7 +176,6 @@ False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Settings - linphone2.png @@ -1615,50 +1614,6 @@ 3 - - - False - True - True - - - - True - False - - - True - False - gtk-network - - - True - True - 0 - - - - - True - False - Register to FONICS -virtual network ! - - - True - True - 1 - - - - - - - False - False - 4 - - False @@ -2092,7 +2047,7 @@ virtual network ! 1 2 GTK_FILL - + @@ -2154,7 +2109,7 @@ virtual network ! 2 3 GTK_FILL - + diff --git a/gtk/password.ui b/gtk/password.ui index 2d9f53241..a355c1848 100644 --- a/gtk/password.ui +++ b/gtk/password.ui @@ -8,7 +8,6 @@ Linphone - Authentication required True center-on-parent - linphone2.png dialog False diff --git a/gtk/propertybox.c b/gtk/propertybox.c index 03092a0a5..a6d9d96f8 100644 --- a/gtk/propertybox.c +++ b/gtk/propertybox.c @@ -794,7 +794,12 @@ static void linphone_gtk_fill_langs(GtkWidget *pb){ const char *all_langs="C " LINPHONE_ALL_LANGS; const char *name; int i=0,index=0; - const char *cur_lang=getenv("LANG"); + const char *cur_lang; + #if defined(WIN32) || defined(__APPLE__) + cur_lang=getenv("LANG"); + #else + cur_lang=getenv("LANGUAGE"); + #endif int cur_lang_index=-1; char text[256]={0}; if (cur_lang==NULL) cur_lang="C"; @@ -818,7 +823,12 @@ static void linphone_gtk_fill_langs(GtkWidget *pb){ void linphone_gtk_lang_changed(GtkComboBox *combo){ const char *selected=gtk_combo_box_get_active_text(combo); char code[10]; - const char *cur_lang=getenv("LANG"); + const char *cur_lang; + #if defined(WIN32) || defined(__APPLE__) + cur_lang=getenv("LANG"); + #else + cur_lang=getenv("LANGUAGE"); + #endif if (selected!=NULL){ sscanf(selected,"%s",code); if (cur_lang==NULL) cur_lang="C"; @@ -1286,4 +1296,3 @@ void linphone_gtk_dscp_edit_response(GtkWidget *dialog, guint response_id){ } gtk_widget_destroy(dialog); } - diff --git a/gtk/sip_account.ui b/gtk/sip_account.ui index 3a1dac376..60b751cfa 100644 --- a/gtk/sip_account.ui +++ b/gtk/sip_account.ui @@ -13,7 +13,6 @@ 5 Linphone - Configure a SIP account center-on-parent - linphone2.png dialog diff --git a/gtk/support.c b/gtk/support.c index 227d5b42c..de6c3a910 100644 --- a/gtk/support.c +++ b/gtk/support.c @@ -156,7 +156,11 @@ const char *linphone_gtk_get_lang(const char *config_file){ void linphone_gtk_set_lang(const char *code){ LpConfig *cfg=linphone_core_get_config(linphone_gtk_get_core()); const char *curlang; - curlang=getenv("LANG"); + #if defined(WIN32) || defined(__APPLE__) + curlang=getenv("LANG"); + #else + curlang=getenv("LANGUAGE"); + #endif if (curlang!=NULL && strncmp(curlang,code,2)==0) { /* do not loose the _territory@encoding part*/ return; @@ -166,8 +170,10 @@ void linphone_gtk_set_lang(const char *code){ char tmp[128]; snprintf(tmp,sizeof(tmp),"LANG=%s",code); _putenv(tmp); -#else +#elif __APPLE__ setenv("LANG",code,1); +#else + setenv("LANGUAGE",code,1); #endif } diff --git a/gtk/tunnel_config.ui b/gtk/tunnel_config.ui index a940a5f7c..e0baf91fd 100644 --- a/gtk/tunnel_config.ui +++ b/gtk/tunnel_config.ui @@ -22,7 +22,6 @@ 5 Configure VoIP tunnel center-on-parent - linphone2.png dialog diff --git a/gtk/waiting.ui b/gtk/waiting.ui index 4413dfab0..d2ca9ad89 100644 --- a/gtk/waiting.ui +++ b/gtk/waiting.ui @@ -6,7 +6,6 @@ False True GTK_WIN_POS_CENTER_ON_PARENT - linphone2.png False diff --git a/java/common/org/linphone/core/LinphoneCore.java b/java/common/org/linphone/core/LinphoneCore.java index 8815085d0..d612589fe 100644 --- a/java/common/org/linphone/core/LinphoneCore.java +++ b/java/common/org/linphone/core/LinphoneCore.java @@ -786,7 +786,9 @@ public interface LinphoneCore { LinphoneProxyConfig[] getProxyConfigList(); void setVideoPolicy(boolean autoInitiate, boolean autoAccept); - + + void setStaticPicture(String path); + void setUserAgent(String name, String version); void setCpuCount(int count); diff --git a/java/common/org/linphone/core/LinphoneCoreFactory.java b/java/common/org/linphone/core/LinphoneCoreFactory.java index 04cef4aea..100794016 100644 --- a/java/common/org/linphone/core/LinphoneCoreFactory.java +++ b/java/common/org/linphone/core/LinphoneCoreFactory.java @@ -72,8 +72,9 @@ abstract public class LinphoneCoreFactory { /** * Enable verbose traces * @param enable + * @param tag */ - abstract public void setDebugMode(boolean enable); + abstract public void setDebugMode(boolean enable, String tag); abstract public void setLogHandler(LinphoneLogHandler handler); /** diff --git a/java/common/org/linphone/core/LinphoneProxyConfig.java b/java/common/org/linphone/core/LinphoneProxyConfig.java index eee58c915..b6b8919fb 100644 --- a/java/common/org/linphone/core/LinphoneProxyConfig.java +++ b/java/common/org/linphone/core/LinphoneProxyConfig.java @@ -145,4 +145,10 @@ public interface LinphoneProxyConfig { * @param country iso code */ public int lookupCCCFromIso(String iso); + + /** + * Return the international prefix for the given country + * @param e164 phone number + */ + public int lookupCCCFromE164(String e164); } diff --git a/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java b/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java index a99509fa3..b719f0f70 100644 --- a/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java +++ b/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java @@ -131,7 +131,7 @@ public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory { } @Override - public native void setDebugMode(boolean enable); + public native void setDebugMode(boolean enable, String tag); @Override public void setLogHandler(LinphoneLogHandler handler) { diff --git a/java/impl/org/linphone/core/LinphoneCoreImpl.java b/java/impl/org/linphone/core/LinphoneCoreImpl.java index 83f6d20d3..d4f7808c6 100644 --- a/java/impl/org/linphone/core/LinphoneCoreImpl.java +++ b/java/impl/org/linphone/core/LinphoneCoreImpl.java @@ -20,15 +20,17 @@ package org.linphone.core; import static android.media.AudioManager.MODE_IN_CALL; import static android.media.AudioManager.MODE_RINGTONE; -import android.content.Context; -import android.media.AudioManager; import java.io.File; import java.io.IOException; import org.linphone.core.LinphoneCall.State; +import org.linphone.mediastream.Log; import org.linphone.mediastream.video.capture.hwconf.Hacks; +import android.content.Context; +import android.media.AudioManager; + class LinphoneCoreImpl implements LinphoneCore { @@ -754,6 +756,10 @@ class LinphoneCoreImpl implements LinphoneCore { public synchronized void setVideoPolicy(boolean autoInitiate, boolean autoAccept) { setVideoPolicy(nativePtr, autoInitiate, autoAccept); } + private native void setStaticPicture(long nativePtr, String path); + public void setStaticPicture(String path) { + setStaticPicture(nativePtr, path); + } private native void setUserAgent(long nativePtr, String name, String version); @Override public void setUserAgent(String name, String version) { diff --git a/java/impl/org/linphone/core/LinphoneProxyConfigImpl.java b/java/impl/org/linphone/core/LinphoneProxyConfigImpl.java index 2295bce03..649d46fe3 100644 --- a/java/impl/org/linphone/core/LinphoneProxyConfigImpl.java +++ b/java/impl/org/linphone/core/LinphoneProxyConfigImpl.java @@ -78,6 +78,7 @@ class LinphoneProxyConfigImpl implements LinphoneProxyConfig { private native void setContactParameters(long ptr, String params); private native int lookupCCCFromIso(long nativePtr, String iso); + private native int lookupCCCFromE164(long nativePtr, String e164); public void enableRegister(boolean value) { enableRegister(nativePtr,value); @@ -153,4 +154,8 @@ class LinphoneProxyConfigImpl implements LinphoneProxyConfig { public int lookupCCCFromIso(String iso) { return lookupCCCFromIso(nativePtr, iso); } + @Override + public int lookupCCCFromE164(String e164) { + return lookupCCCFromE164(nativePtr, e164); + } } diff --git a/java/impl/org/linphone/core/Log.java b/java/impl/org/linphone/core/Log.java deleted file mode 100644 index b70b65931..000000000 --- a/java/impl/org/linphone/core/Log.java +++ /dev/null @@ -1,112 +0,0 @@ -/* -Log.java -Copyright (C) 2011 Belledonne Communications, Grenoble, France - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -package org.linphone.core; - -import static android.util.Log.DEBUG; -import static android.util.Log.ERROR; -import static android.util.Log.INFO; -import static android.util.Log.WARN; - -/** - * Convenient wrapper for Android logs. - * - * @author Guillaume Beraudo - */ -public final class Log { - - public static final String TAG = "Linphone"; - private static final boolean useIsLoggable = false; - - @SuppressWarnings(value="all") - private static boolean isLoggable(int level) { - return !useIsLoggable || android.util.Log.isLoggable(TAG, level); - } - - public static void i(Object...objects) { - if (isLoggable(INFO)) { - android.util.Log.i(TAG, toString(objects)); - } - } - public static void i(Throwable t, Object...objects) { - if (isLoggable(INFO)) { - android.util.Log.i(TAG, toString(objects), t); - } - } - - - public static void d(Object...objects) { - if (isLoggable(DEBUG)) { - android.util.Log.d(TAG, toString(objects)); - } - } - public static void d(Throwable t, Object...objects) { - if (isLoggable(DEBUG)) { - android.util.Log.d(TAG, toString(objects), t); - } - } - - public static void w(Object...objects) { - if (isLoggable(WARN)) { - android.util.Log.w(TAG, toString(objects)); - } - } - public static void w(Throwable t, Object...objects) { - if (isLoggable(WARN)) { - android.util.Log.w(TAG, toString(objects), t); - } - } - - public static void e(Object...objects) { - if (isLoggable(ERROR)) { - android.util.Log.e(TAG, toString(objects)); - } - } - public static void e(Throwable t, Object...objects) { - if (isLoggable(ERROR)) { - android.util.Log.e(TAG, toString(objects), t); - } - } - - /** - * @throws RuntimeException always throw after logging the error message. - */ - public static void f(Object...objects) { - if (isLoggable(ERROR)) { - android.util.Log.e(TAG, toString(objects)); - throw new RuntimeException("Fatal error : " + toString(objects)); - } - } - /** - * @throws RuntimeException always throw after logging the error message. - */ - public static void f(Throwable t, Object...objects) { - if (isLoggable(ERROR)) { - android.util.Log.e(TAG, toString(objects), t); - throw new RuntimeException("Fatal error : " + toString(objects), t); - } - } - - private static String toString(Object...objects) { - StringBuilder sb = new StringBuilder(); - for (Object o : objects) { - sb.append(o); - } - return sb.toString(); - } -} diff --git a/mediastreamer2 b/mediastreamer2 index 517ddc047..256e4eca8 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 517ddc04728373f6f0844e45c2b7ade272d33016 +Subproject commit 256e4eca87c06865d0ff186d05b4ca03f9394701 diff --git a/oRTP b/oRTP index 59ff6bb7a..b1590514c 160000 --- a/oRTP +++ b/oRTP @@ -1 +1 @@ -Subproject commit 59ff6bb7a0c5047526b802d264f6db4faa2bd5c2 +Subproject commit b1590514c98d33e5464d46317fdeaec52f778de7 diff --git a/pixmaps/Makefile.am b/pixmaps/Makefile.am index 4e7c56ed6..a7ee4ecb9 100644 --- a/pixmaps/Makefile.am +++ b/pixmaps/Makefile.am @@ -5,12 +5,14 @@ pixmapdir=$(datadir)/pixmaps/linphone pixmap_DATA= \ hold_on.png hold_off.png \ mic_muted.png mic_active.png \ -linphone-3-250x130.png linphone-3.png linphone2-57x57.png \ linphone.png linphone-banner.png \ status-green.png \ status-orange.png \ status-red.png \ status-offline.png \ +call.png \ +chat.png \ +chat_message_inprogress.png chat_message_delivered.png chat_message_not_delivered.png\ contact-orange.png dialer-orange.png history-orange.png\ startcall-green.png stopcall-red.png addcall-green.png linphone.icns \ contact_starred.png contact_unstarred.png \ diff --git a/pixmaps/active_chat.png b/pixmaps/active_chat.png new file mode 100644 index 000000000..e428845d5 Binary files /dev/null and b/pixmaps/active_chat.png differ diff --git a/pixmaps/addcall-green.png b/pixmaps/addcall-green.png index 3e6ae3b7a..9de8463ca 100644 Binary files a/pixmaps/addcall-green.png and b/pixmaps/addcall-green.png differ diff --git a/pixmaps/call.png b/pixmaps/call.png new file mode 100644 index 000000000..7edf53556 Binary files /dev/null and b/pixmaps/call.png differ diff --git a/pixmaps/chat.png b/pixmaps/chat.png new file mode 100644 index 000000000..50a23af57 Binary files /dev/null and b/pixmaps/chat.png differ diff --git a/pixmaps/chat_message_delivered.png b/pixmaps/chat_message_delivered.png new file mode 100644 index 000000000..5cb746551 Binary files /dev/null and b/pixmaps/chat_message_delivered.png differ diff --git a/pixmaps/chat_message_inprogress.png b/pixmaps/chat_message_inprogress.png new file mode 100644 index 000000000..2ffcbca35 Binary files /dev/null and b/pixmaps/chat_message_inprogress.png differ diff --git a/pixmaps/chat_message_not_delivered.png b/pixmaps/chat_message_not_delivered.png new file mode 100644 index 000000000..cf9c610c0 Binary files /dev/null and b/pixmaps/chat_message_not_delivered.png differ diff --git a/pixmaps/green.png b/pixmaps/green.png deleted file mode 100644 index 0005537ca..000000000 Binary files a/pixmaps/green.png and /dev/null differ diff --git a/pixmaps/hold_off.png b/pixmaps/hold_off.png index 61ab330c6..3ba6746fb 100644 Binary files a/pixmaps/hold_off.png and b/pixmaps/hold_off.png differ diff --git a/pixmaps/hold_on.png b/pixmaps/hold_on.png index 94469b2d6..776d5ddd4 100644 Binary files a/pixmaps/hold_on.png and b/pixmaps/hold_on.png differ diff --git a/pixmaps/linphone-3-250x130.png b/pixmaps/linphone-3-250x130.png deleted file mode 100644 index 020e943b6..000000000 Binary files a/pixmaps/linphone-3-250x130.png and /dev/null differ diff --git a/pixmaps/linphone-3.png b/pixmaps/linphone-3.png deleted file mode 100644 index 92faf7936..000000000 Binary files a/pixmaps/linphone-3.png and /dev/null differ diff --git a/pixmaps/linphone2-57x57.png b/pixmaps/linphone2-57x57.png deleted file mode 100644 index a0f531636..000000000 Binary files a/pixmaps/linphone2-57x57.png and /dev/null differ diff --git a/pixmaps/linphone2.png b/pixmaps/linphone2.png deleted file mode 100644 index d1bf1ab63..000000000 Binary files a/pixmaps/linphone2.png and /dev/null differ diff --git a/pixmaps/linphone2.xpm b/pixmaps/linphone2.xpm deleted file mode 100644 index 717f8c42f..000000000 --- a/pixmaps/linphone2.xpm +++ /dev/null @@ -1,883 +0,0 @@ -/* XPM */ -static char * linphone2_xpm[] = { -"50 45 835 2", -" c None", -". c #211F1D", -"+ c #53514E", -"@ c #5F5D59", -"# c #7D7C78", -"$ c #605F5C", -"% c #94928C", -"& c #95938D", -"* c #7B7A77", -"= c #605E5C", -"- c #353432", -"; c #585754", -"> c #84827D", -", c #B9B6B0", -"' c #D9D5CE", -") c #DFDBD3", -"! c #EAE6DE", -"~ c #EFEBE2", -"{ c #EEEAE1", -"] c #EFEBE3", -"^ c #EEEAE2", -"/ c #75726D", -"( c #5E5C58", -"_ c #7D7B77", -": c #BAB6AF", -"< c #E5E1D8", -"[ c #DAD7CF", -"} c #C8C4BD", -"| c #898782", -"1 c #949089", -"2 c #938F88", -"3 c #5B5854", -"4 c #45433F", -"5 c #4D4943", -"6 c #5F5C56", -"7 c #A5A199", -"8 c #DCD5C5", -"9 c #6F6B63", -"0 c #42413F", -"a c #A19E97", -"b c #DAD6CE", -"c c #EDE9E1", -"d c #D4D0C9", -"e c #96928C", -"f c #63605B", -"g c #827C73", -"h c #6F6961", -"i c #90877A", -"j c #8E8578", -"k c #B4A999", -"l c #B9AD9D", -"m c #C0B5A3", -"n c #BCB1A0", -"o c #858075", -"p c #C3BCAE", -"q c #EAE5DB", -"r c #E0D9C9", -"s c #C5BDAE", -"t c #20201E", -"u c #8D8B86", -"v c #CAC7C1", -"w c #D2CEC6", -"x c #918F89", -"y c #5D5A56", -"z c #A0998F", -"A c #827B6F", -"B c #C0B4A2", -"C c #C2B7A5", -"D c #C1B6A4", -"E c #8A8174", -"F c #94918B", -"G c #C7C3BB", -"H c #AFAAA1", -"I c #938B7E", -"J c #646058", -"K c #D8D1C3", -"L c #ECE7DE", -"M c #EBE7DD", -"N c #E4DED0", -"O c #DED6C5", -"P c #57544D", -"Q c #202020", -"R c #7E7C77", -"S c #DFDCD4", -"T c #F0ECE4", -"U c #EDE9E0", -"V c #ECE8E1", -"W c #B6B2AB", -"X c #77736E", -"Y c #767067", -"Z c #A3998B", -"` c #BCB09F", -" . c #C3B7A6", -".. c #BFB3A1", -"+. c #C3B8A7", -"@. c #BFB4A2", -"#. c #BDB2A1", -"$. c #3E3B35", -"%. c #BBB4A6", -"&. c #A7A39C", -"*. c #ECE9E1", -"=. c #77736A", -"-. c #E7E1D5", -";. c #E3DDCE", -">. c #8F897F", -",. c #22201E", -"'. c #91908C", -"). c #EFECE3", -"!. c #EBE7DE", -"~. c #878581", -"{. c #5B574F", -"]. c #7F786C", -"^. c #8D867A", -"/. c #9C9994", -"(. c #98958F", -"_. c #837B6E", -":. c #C4B9A7", -"<. c #958B7E", -"[. c #736D62", -"}. c #4E4942", -"|. c #4C4842", -"1. c #383632", -"2. c #99968F", -"3. c #ECE8DE", -"4. c #7C7972", -"5. c #CCC6BB", -"6. c #E9E4D9", -"7. c #EDE8DF", -"8. c #E1D9C9", -"9. c #BFB8A9", -"0. c #1A1A1A", -"a. c #C3BFB8", -"b. c #CFCCC4", -"c. c #85827C", -"d. c #56514A", -"e. c #A69C8D", -"f. c #BFB3A2", -"g. c #C2B7A6", -"h. c #B4AA9A", -"i. c #757168", -"j. c #706D68", -"k. c #918E88", -"l. c #464441", -"m. c #97948E", -"n. c #C9C6BF", -"o. c #8C8A85", -"p. c #8E897F", -"q. c #999488", -"r. c #817E77", -"s. c #C1BEB7", -"t. c #807D75", -"u. c #8A8377", -"v. c #6E6A63", -"w. c #A8A49C", -"x. c #EAE4D9", -"y. c #E4DDCF", -"z. c #D8D0C0", -"A. c #AFA99C", -"B. c #848076", -"C. c #BFBBB4", -"D. c #B1AEA8", -"E. c #47443F", -"F. c #5C5851", -"G. c #686259", -"H. c #B0A595", -"I. c #B7AC9B", -"J. c #817A6F", -"K. c #7E7A70", -"L. c #AEA99D", -"M. c #9A9791", -"N. c #EEE9E1", -"O. c #E6E2DA", -"P. c #CCC8BF", -"Q. c #E3DCCE", -"R. c #86827A", -"S. c #C6C3BC", -"T. c #7C7974", -"U. c #4A4642", -"V. c #6E685F", -"W. c #89837A", -"X. c #7B7873", -"Y. c #9A9892", -"Z. c #827D73", -"`. c #56534C", -" + c #6A675E", -".+ c #E2DBCC", -"++ c #EDE9DF", -"@+ c #DED8CC", -"#+ c #DDD5C4", -"$+ c #C4BDAE", -"%+ c #6F6B62", -"&+ c #312F2B", -"*+ c #6D6960", -"=+ c #A19B8F", -"-+ c #E5E1DA", -";+ c #7F7D79", -">+ c #CFCBC3", -",+ c #ACA9A2", -"'+ c #B6B1A8", -")+ c #B4B0AA", -"!+ c #827F7A", -"~+ c #444340", -"{+ c #262524", -"]+ c #C1BEB8", -"^+ c #9A968D", -"/+ c #242322", -"(+ c #CEC7B7", -"_+ c #DFD8C7", -":+ c #E6E0D3", -"<+ c #747067", -"[+ c #D3CCBC", -"}+ c #857F74", -"|+ c #595856", -"1+ c #CCC8C2", -"2+ c #D4D1C9", -"3+ c #ECE8DF", -"4+ c #CFCBC4", -"5+ c #93918C", -"6+ c #2F2E2C", -"7+ c #312F2C", -"8+ c #969185", -"9+ c #BAB3A5", -"0+ c #B1AB9D", -"a+ c #363532", -"b+ c #E2DED5", -"c+ c #676360", -"d+ c #4C4B4A", -"e+ c #767471", -"f+ c #75736D", -"g+ c #5B5956", -"h+ c #928D81", -"i+ c #E5DFD2", -"j+ c #EEE9E0", -"k+ c #EBE6DB", -"l+ c #C0B9AB", -"m+ c #A7A195", -"n+ c #8D887E", -"o+ c #C4BCAD", -"p+ c #BCB8B1", -"q+ c #D5D1C9", -"r+ c #7A746D", -"s+ c #AEABA4", -"t+ c #B2AFA8", -"u+ c #98948D", -"v+ c #7D7A76", -"w+ c #69655D", -"x+ c #9B9589", -"y+ c #A9A396", -"z+ c #A7A49F", -"A+ c #D8D2C9", -"B+ c #948F83", -"C+ c #454340", -"D+ c #D7D3CC", -"E+ c #63615E", -"F+ c #141414", -"G+ c #000000", -"H+ c #53504A", -"I+ c #EBE7DC", -"J+ c #E4DDD0", -"K+ c #898479", -"L+ c #ADA79A", -"M+ c #CBC3B4", -"N+ c #89847A", -"O+ c #CDC6B6", -"P+ c #AAA59C", -"Q+ c #9F9D98", -"R+ c #E6E2D9", -"S+ c #AFACA7", -"T+ c #615F5C", -"U+ c #201F1D", -"V+ c #66625B", -"W+ c #AEA89A", -"X+ c #AEA89B", -"Y+ c #B7B0A2", -"Z+ c #070707", -"`+ c #E0DED9", -" @ c #CFC7B8", -".@ c #6B6863", -"+@ c #63625E", -"@@ c #DBD3C3", -"#@ c #534D46", -"$@ c #807E7B", -"%@ c #DDD9D1", -"&@ c #36322E", -"*@ c #4B4A49", -"=@ c #6E6C67", -"-@ c #E5DED1", -";@ c #E9E4D8", -">@ c #EFEAE2", -",@ c #E2DCD0", -"'@ c #8F8A7F", -")@ c #999387", -"!@ c #4E4B45", -"~@ c #6B665E", -"{@ c #47433D", -"]@ c #D4CDC0", -"^@ c #E8E3DA", -"/@ c #1F1E1E", -"(@ c #65615A", -"_@ c #ADA699", -":@ c #949494", -"<@ c #BEBEBC", -"[@ c #DAD2C2", -"}@ c #7F7B74", -"|@ c #4D4D4D", -"1@ c #959084", -"2@ c #DAD5C9", -"3@ c #B9B1A2", -"4@ c #3C3934", -"5@ c #989693", -"6@ c #B1ADA5", -"7@ c #76746F", -"8@ c #4C4A44", -"9@ c #DCD4C3", -"0@ c #E9E3D8", -"a@ c #DCD8CE", -"b@ c #A6A49E", -"c@ c #9C9890", -"d@ c #7B776D", -"e@ c #55534E", -"f@ c #B5B3AD", -"g@ c #474440", -"h@ c #D0C9B9", -"i@ c #E7E2D7", -"j@ c #65635D", -"k@ c #4F4E4C", -"l@ c #B7B1A3", -"m@ c #B7B3A9", -"n@ c #96948E", -"o@ c #BCBBBB", -"p@ c #BCB6A9", -"q@ c #ABA6A1", -"r@ c #8E8C87", -"s@ c #161514", -"t@ c #545350", -"u@ c #B9B1A1", -"v@ c #958F84", -"w@ c #8C867B", -"x@ c #81796E", -"y@ c #BFB4A3", -"z@ c #C6BBAA", -"A@ c #5E5B53", -"B@ c #96938D", -"C@ c #696762", -"D@ c #DFD7C7", -"E@ c #C6C2B9", -"F@ c #817C72", -"G@ c #B3AC9F", -"H@ c #B5AFA4", -"I@ c #6C6964", -"J@ c #DFD8C9", -"K@ c #9C9C9B", -"L@ c #716E6A", -"M@ c #B8B1A3", -"N@ c #2A2926", -"O@ c #625F58", -"P@ c #E0D8C9", -"Q@ c #C1BAAB", -"R@ c #252321", -"S@ c #E1DDD5", -"T@ c #7B7977", -"U@ c #625E57", -"V@ c #322F2A", -"W@ c #C4B9A8", -"X@ c #D1C7B6", -"Y@ c #C1B5A4", -"Z@ c #C8BEAC", -"`@ c #9A9387", -" # c #2D2C28", -".# c #595752", -"+# c #A29D94", -"@# c #D5CEBD", -"## c #CBC4B4", -"$# c #DBD3C2", -"%# c #A09C94", -"&# c #C1C1C1", -"*# c #95938E", -"=# c #7F7A70", -"-# c #8B867C", -";# c #D6D0C4", -"># c #C9C2B3", -",# c #7C7B78", -"'# c #BEBBB5", -")# c #D1CABA", -"!# c #44423F", -"~# c #D6D2CA", -"{# c #3A3835", -"]# c #262421", -"^# c #33302C", -"/# c #69645B", -"(# c #8B8478", -"_# c #5F5951", -":# c #605C53", -"<# c #67635B", -"[# c #BFB8AA", -"}# c #928D82", -"|# c #B8B2A4", -"1# c #938F85", -"2# c #989287", -"3# c #89857C", -"4# c #706E6A", -"5# c #DED7C6", -"6# c #928F88", -"7# c #979797", -"8# c #B4AEA2", -"9# c #918C81", -"0# c #68645C", -"a# c #979286", -"b# c #4A4741", -"c# c #5E5D5A", -"d# c #B2AFAA", -"e# c #47453F", -"f# c #C2BBAC", -"g# c #B5AEA0", -"h# c #D4CDBC", -"i# c #CAC7C0", -"j# c #B5AEA1", -"k# c #CCC4B5", -"l# c #ACABA7", -"m# c #797979", -"n# c #757169", -"o# c #BDB6A7", -"p# c #68655D", -"q# c #A09B92", -"r# c #D1CABB", -"s# c #8D887D", -"t# c #80807F", -"u# c #C5BEAF", -"v# c #1E1D1B", -"w# c #A3A099", -"x# c #888681", -"y# c #6A6864", -"z# c #B3AEA3", -"A# c #4D4A44", -"B# c #D6CFBE", -"C# c #A29E95", -"D# c #C1BAAC", -"E# c #918C82", -"F# c #6D6961", -"G# c #B9B3A5", -"H# c #979084", -"I# c #3A3836", -"J# c #BDBBB7", -"K# c #C7C0B1", -"L# c #6C6860", -"M# c #D2CBBB", -"N# c #393836", -"O# c #66635D", -"P# c #A19D94", -"Q# c #656461", -"R# c #32302C", -"S# c #CCC5B5", -"T# c #DEDAD1", -"U# c #B1ACA3", -"V# c #7C7C7C", -"W# c #B5B4B1", -"X# c #5A5853", -"Y# c #4F4C46", -"Z# c #A09A8E", -"`# c #76726A", -" $ c #88857F", -".$ c #4B4843", -"+$ c #DAD2C1", -"@$ c #B4ADA0", -"#$ c #B7B4AF", -"$$ c #CCC9C2", -"%$ c #282623", -"&$ c #888378", -"*$ c #262522", -"=$ c #A8A194", -"-$ c #9A9388", -";$ c #BEB7A8", -">$ c #E3DCCD", -",$ c #D1CEC6", -"'$ c #ACA699", -")$ c #AFA99B", -"!$ c #B2ADA2", -"~$ c #A09D97", -"{$ c #C0BCB5", -"]$ c #B0A99C", -"^$ c #7A776F", -"/$ c #99958E", -"($ c #8A8681", -"_$ c #777068", -":$ c #B3AB9D", -"<$ c #131211", -"[$ c #5D5A53", -"}$ c #090908", -"|$ c #8C877C", -"1$ c #C7C1B4", -"2$ c #D3CEC5", -"3$ c #EAE5DA", -"4$ c #83817D", -"5$ c #C7C0B0", -"6$ c #484743", -"7$ c #C3BFB7", -"8$ c #C7C1B3", -"9$ c #9E998F", -"0$ c #CCC9C1", -"a$ c #C3C0B8", -"b$ c #817E78", -"c$ c #7F786E", -"d$ c #AFA494", -"e$ c #ABA396", -"f$ c #474645", -"g$ c #BCB9B3", -"h$ c #9B9893", -"i$ c #2B2926", -"j$ c #070706", -"k$ c #74716D", -"l$ c #B7B4AD", -"m$ c #484641", -"n$ c #504D47", -"o$ c #DBD6CC", -"p$ c #65615B", -"q$ c #DCD5C6", -"r$ c #B3ADA1", -"s$ c #A8A296", -"t$ c #949086", -"u$ c #999690", -"v$ c #AAA6A0", -"w$ c #6D675F", -"x$ c #A09789", -"y$ c #C2B6A5", -"z$ c #6C6259", -"A$ c #66645F", -"B$ c #2D2D2D", -"C$ c #64615B", -"D$ c #2F2D2A", -"E$ c #8B8781", -"F$ c #64625D", -"G$ c #0A0908", -"H$ c #393733", -"I$ c #C2BAAB", -"J$ c #D9D5CD", -"K$ c #9C978C", -"L$ c #CFC8B8", -"M$ c #9C968A", -"N$ c #928D83", -"O$ c #98958E", -"P$ c #CBC8C0", -"Q$ c #B1ADA7", -"R$ c #8D8A84", -"S$ c #878177", -"T$ c #B4AA9B", -"U$ c #B3A898", -"V$ c #7A7368", -"W$ c #706E6B", -"X$ c #292826", -"Y$ c #A9A499", -"Z$ c #3F3E3C", -"`$ c #1B1A18", -" % c #9F9C96", -".% c #2D2A27", -"+% c #C8C1B1", -"@% c #E6DFD2", -"#% c #C0BDB7", -"$% c #8C8982", -"%% c #C7C3BC", -"&% c #8E8B84", -"*% c #958E86", -"=% c #837B6F", -"-% c #AFA595", -";% c #80796E", -">% c #31302D", -",% c #8F8C87", -"'% c #74726E", -")% c #5E5C57", -"!% c #393430", -"~% c #413F3B", -"{% c #413C37", -"]% c #605E5A", -"^% c #22201D", -"/% c #0C0B0A", -"(% c #E9E4DA", -"_% c #D6CFC2", -":% c #7E766A", -"<% c #C0B4A3", -"[% c #C1B6A5", -"}% c #605B52", -"|% c #97938B", -"1% c #181817", -"2% c #0A0A0A", -"3% c #8D8981", -"4% c #787369", -"5% c #D4CFC6", -"6% c #DCD6C9", -"7% c #CAC6BC", -"8% c #A5A096", -"9% c #78756E", -"0% c #726E65", -"a% c #4A4742", -"b% c #605E59", -"c% c #363433", -"d% c #0B0A0A", -"e% c #BFB5A5", -"f% c #C3B8A6", -"g% c #6C6359", -"h% c #7C786E", -"i% c #46433D", -"j% c #55534F", -"k% c #BAB5AB", -"l% c #E1DACA", -"m% c #B1AA9C", -"n% c #928B80", -"o% c #ACA598", -"p% c #CCC5B8", -"q% c #E1DACB", -"r% c #CFC9BE", -"s% c #44413C", -"t% c #23221F", -"u% c #AFA89B", -"v% c #D5CCBB", -"w% c #BEB2A1", -"x% c #A59A8B", -"y% c #5C564D", -"z% c #0F0F0E", -"A% c #65625C", -"B% c #B8B4AE", -"C% c #AAA498", -"D% c #55514B", -"E% c #332F2A", -"F% c #47443E", -"G% c #252320", -"H% c #3A3833", -"I% c #6B665C", -"J% c #857D71", -"K% c #90887B", -"L% c #CBC1B0", -"M% c #CBC1AF", -"N% c #DED7CA", -"O% c #9B968A", -"P% c #59554E", -"Q% c #B5AB9C", -"R% c #7B7469", -"S% c #57524A", -"T% c #040303", -"U% c #2F2D29", -"V% c #BEBBB4", -"W% c #D2CEC3", -"X% c #1D1C1A", -"Y% c #292827", -"Z% c #1C1A18", -"`% c #090807", -" & c #181613", -".& c #807A6E", -"+& c #DCD5C7", -"@& c #B8B2A5", -"#& c #191815", -"$& c #B8B0A2", -"%& c #C9C1B2", -"&& c #6A6259", -"*& c #AEA393", -"=& c #625D54", -"-& c #010100", -";& c #353431", -">& c #76736C", -",& c #C8C5BD", -"'& c #979287", -")& c #3A3733", -"!& c #413E39", -"~& c #8A8680", -"{& c #BFB8AB", -"]& c #3A3631", -"^& c #494440", -"/& c #3C3731", -"(& c #28231F", -"_& c #181715", -":& c #040404", -"<& c #3D3933", -"[& c #B9B1A3", -"}& c #85827B", -"|& c #080807", -"1& c #645F57", -"2& c #8F897E", -"3& c #71675D", -"4& c #B5AB9A", -"5& c #766E63", -"6& c #38342F", -"7& c #0D0C0B", -"8& c #0D0B0A", -"9& c #33312D", -"0& c #D5CFC4", -"a& c #DBD4C5", -"b& c #534E48", -"c& c #030303", -"d& c #5E5D5E", -"e& c #535153", -"f& c #666460", -"g& c #3D3B39", -"h& c #79756B", -"i& c #43413B", -"j& c #B9B4A9", -"k& c #D5D0C6", -"l& c #CEC8BC", -"m& c #BDB6A9", -"n& c #97948F", -"o& c #D5CEC0", -"p& c #B2AC9E", -"q& c #ADA293", -"r& c #797166", -"s& c #151412", -"t& c #76736D", -"u& c #DBD4C8", -"v& c #D9D2C1", -"w& c #2E2B28", -"x& c #171615", -"y& c #454243", -"z& c #2C2B2A", -"A& c #68655E", -"B& c #807C75", -"C& c #BAB5AA", -"D& c #D0CABD", -"E& c #D9D1C0", -"F& c #E1DACD", -"G& c #DCD3C3", -"H& c #D0C7B7", -"I& c #D6CEBE", -"J& c #A8A299", -"K& c #54524D", -"L& c #0B0A09", -"M& c #5E5A53", -"N& c #9C9486", -"O& c #948C7E", -"P& c #544F47", -"Q& c #0D0C0A", -"R& c #DDD7CC", -"S& c #E4DFD3", -"T& c #AFAA9F", -"U& c #847F76", -"V& c #BFB7AB", -"W& c #E5DFD1", -"X& c #E8E3D7", -"Y& c #C6BBA9", -"Z& c #C8BDAC", -"`& c #B8AE9F", -" * c #756F65", -".* c #46413B", -"+* c #6A665D", -"@* c #B0AA9C", -"#* c #D7CFBF", -"$* c #E0D8C8", -"%* c #B8B2A7", -"&* c #5B5851", -"** c #272623", -"=* c #191513", -"-* c #413F3A", -";* c #4B4842", -">* c #87837B", -",* c #B7B2A9", -"'* c #A6A199", -")* c #E7E1D4", -"!* c #D7CEBD", -"~* c #D9D1C2", -"{* c #CDC4B3", -"]* c #B1A89A", -"^* c #837D73", -"/* c #534F48", -"(* c #373531", -"_* c #22211F", -":* c #C7BFB0", -"<* c #3F3D38", -"[* c #A8A295", -"}* c #BAB5A9", -"|* c #3B3935", -"1* c #706C63", -"2* c #91887C", -"3* c #C1B7A7", -"4* c #B7AD9D", -"5* c #69645C", -"6* c #74716B", -"7* c #A19D95", -"8* c #918B82", -"9* c #484640", -"0* c #636058", -"a* c #68635B", -"b* c #38332F", -"c* c #0E0C0B", -"d* c #837E73", -"e* c #34322E", -"f* c #050505", -"g* c #060606", -"h* c #060505", -"i* c #12100E", -"j* c #78746C", -"k* c #C5C0B5", -"l* c #AFABA1", -"m* c #44433F", -"n* c #100E0C", -"o* c #21201D", -"p* c #6C6963", -"q* c #D0CBBF", -"r* c #53504B", -"s* c #4E4B44", -"t* c #CCC5B6", -"u* c #72716C", -"v* c #6E6C66", -"w* c #43403B", -"x* c #B0AA9F", -"y* c #85817A", -"z* c #D5CFC3", -"A* c #8C887E", -"B* c #2D2C2A", -"C* c #2A2723", -"D* c #65635E", -"E* c #BCB7AC", -"F* c #66625A", -"G* c #7F796F", -"H* c #96928A", -"I* c #CCC7BE", -"J* c #B5B1A9", -"K* c #938F86", -"L* c #CCC8BE", -"M* c #1E1C1A", -"N* c #817D73", -"O* c #191715", -"P* c #726D64", -"Q* c #747069", -"R* c #E8E2D6", -"S* c #99958B", -"T* c #E5E0D3", -"U* c #7F7C73", -"V* c #666159", -"W* c #1A1917", -"X* c #131110", -"Y* c #726E66", -"Z* c #45433E", -"`* c #D9D1C1", -" = c #1E1B19", -".= c #CDC5B5", -"+= c #A7A194", -"@= c #242220", -"#= c #42403B", -"$= c #060605", -"%= c #484540", -" ", -" . + @ # $ % & % * = ", -" - ; > , ' ) ! ~ { ] { ] { ~ ^ / ", -" ( _ : < ~ ^ ~ ^ [ } | 1 2 3 4 5 6 7 8 9 ", -" 0 a b ^ ^ ~ c d e f g h i j k l m n o p q r s ", -" t u v { ] { w x y z A B C m D E F G H I J K L M N O P ", -" Q R S T U V W X Y Z ` ...+.@.C #.$.%.&.*.=.O -.{ ;.O O >. ", -" ,.'.^ { ).!.~.{.].#.^./.(._.:.<.[.}.|.1.O 2.3.4.5.6.] 7.-.8.9. ", -" 0.a.{ ^ b.c.d.e.f.g.h.i.j.c k.l.m.n.o.p.q.O r.s.t.u.v.w.x.y.O z. ", -" A.B.C.D.9 E.F.G.H.I.J.K.L.] M.).N.] { O.P.Q.R.S.T.U.V.W.X.Y.R.Z.`. ", -" +O .+++@+O O #+$+%+&+*+=+p.-+;+{ ] ^ ~ ^ ^ ^ U >+,+'+)+!+~+{+]+^+ ", -" /+(+_+U N.:+O O O O <+[+O }+|+1+^ ~ [ 2+^ ^ 3+4+5+@ 6+7+8+9+0+a+b+c+ ", -" d+e+f+g+h+i+j+k+j+:+O O l+m+n+O o+p+q+M.r+s+t+u+v+y w+x+y+8+z+A+O O B+C+D+E+ ", -" d+u F+G+H+#+;.I+^ ] J+O K+L+M+N+O O+P+Q+R+S+T+U+V+W+X+Y+Z+`+ @.@+@O O @@#@$@%@&@ ", -" *@=@G+ B+-@;@] >@{ ,@'@)@O M+!@~@{@]@^@/@(@_@O y.:@<@[@}@|@[@Y+1@2@O O 3@4@5@6@ ", -" 7@ 8@9@0@a@b@c@d@O O O e@f@g@h@O i@j@O O O h@_ k@l@O m@n@Q.H o@p@O O O &+q@r@ ", -" s@t@ G+u@v@w@x@y@z@O O A@B@C@(+O O D@E@F@O O O G@H@I@r J@K@L@M@N@O@P@O O Q@R@S@T@ ", -" U@<+ V@W@X@Y@Z@:.`@ #.#+#@#O O O O Q.1 ##O O $#%#&#*#$+=#-#;#>#,#'#)#O O K+!#~#{# ", -" w+i.]# ^#/#(#_#:#<#[#}#|#O O O O O O q 1#O O O $#2#3#4#5#6#7#8#9#0#a#O O O b#c#d# ", -" e#f# e#>#g#h#O O O O O O O O O O y.i#j#O O O k#l#m#n#o#p#q#r#s#t#5.O O u#v#w#x# ", -" y#z# A#B#O O O O O O O O O O O O O y.C#O+O O O D#E#F#G#H#I#J#K#T+L#M#O O Y+N#4+O# ", -" P#Q# R#S#O O O O O O O O O O O O O T#/ #+O O O U#V#W#9+X#Y#Z#`# $.$+$#+@$.@#$$$ ", -" %$&$ *$=$O O -$8+;$O O O O O O O >$,$'$O O O O 8@i.)$!$~${$L i+]$^$/$: ($_$:$G+", -" <$[$U@ }$|$1$s+2$=.O O O O O O O O 3$4$Q@O O O 5$6$7${ 3$8$9$u+0$a$b$c$d$@.e$G+", -" f$g$h$i$ j$k$l$m$n$9#O O O O O O O O 5#o$p$)#O O O q$r$s$t$u$b+v$w$x$n Y@Y@y$z$A$", -" B$C$D$ E$F$G$H$I$9#O O O O O O O O O N J$K$L$M$N$O$P$Q$R$S$T$U$m D Y@D D Y@V$W$", -" X$Y$Z$ `$ % .%+%w+O O O O O O O O O O @%#%$%%%0$&%*%=%-%D Y@D Y@D Y@D D Y@;%4#", -" >%,%'%)% !%~%{% R@]% ^%/%S$[@O O O O O O O O D@(%_%&$:%d$Y@D D m y$<%C m D Y@Y@[%}%F$", -" |%1% 2%`$3%4%5%;@N 6%7%8%9%0%a%b%c%d%H+K#O O O O O O O O e% .f. .<%y$D m C @.f%@.C m D D U$g% ", -" [$h%i%j%k%l%O m%k#n%o%p%-@++q%0@:+r%h%s%t%u%O O O O O O O v%..:.f.g.m D y$B f%w%+.@.C x%y%z% ", -" A%B%C%l%$+D%E%F%G%H%H%I%J%K%L%M%N%;.y.O%<$P%5$O O O O +$Q%+.w%f%B y$D m g.f.:...R%S%T%G+ ", -" U%V%W%z.s#X%Y%Z%G+G+G+G+G+G+j$`% &.&+&3$N @&#&v#$&O O O %&&&@.f%@.C m D y$<%*&=&}$-& ", -" ;&>&,&'&)&!&Q ~&{&]&G+ ^&/&(&_&:&<&[&:+D@}&G+|&1&z.O 2&3&C <%y$m D 4&5&6&7&8& ", -" 9&0&a&b&c&d&e&f&g&h&Z%i&a+j&k&l&>+m&n&>%P%L%O o&G+ G+^#p&h%{.Y@D q&r&6&s&G+ ", -" t&u&v&w&x&y&z&A&B&C&D&E&8 F&G&H&I&y.-.3$J&b#O K&G+ L&M&N&O&P&Q&G+ ", -"n$R&S&T&U&u#V&]@W&X&;.+$Y&Z&`& *.*+*@*#*$*%*&*=#**G+ =*G+G+ ", -"-*;*>*,*'*)*!*-@~*{*]*^*/*(*_*H%M$:*<*U@[*#+}***G+ ", -" |*1*=$2*3*4*5*.$G+6*7*8*8&v#9*0*a*H+b*c*M@+$d*e* ", -" f*g*h*i* U+-#E#N j*G+G+ k*l*m*n* ", -" o*u%p*q*r*G+ s*t*u*v*G+ ", -" w*x*y*z*A*B*C* D*E*[*}$G+ ", -" L#F*G*H*I*J*p@K*L*M#M*N*O* ", -" b#P*(+Q*R*S*T*U*l+1.V*W* ", -" X*Y*Z*`* =.=X%+=@=G+ ", -" #=$=%=G+ "}; diff --git a/pixmaps/mic_active.png b/pixmaps/mic_active.png index 349daad4b..ee6b9038c 100644 Binary files a/pixmaps/mic_active.png and b/pixmaps/mic_active.png differ diff --git a/pixmaps/mic_muted.png b/pixmaps/mic_muted.png index e540d0031..60fd18761 100644 Binary files a/pixmaps/mic_muted.png and b/pixmaps/mic_muted.png differ diff --git a/pixmaps/oldlogo.png b/pixmaps/oldlogo.png deleted file mode 100644 index 06cf18315..000000000 Binary files a/pixmaps/oldlogo.png and /dev/null differ diff --git a/pixmaps/red.png b/pixmaps/red.png deleted file mode 100644 index e6136b3ff..000000000 Binary files a/pixmaps/red.png and /dev/null differ diff --git a/pixmaps/sip-away.png b/pixmaps/sip-away.png deleted file mode 100644 index ba7580faa..000000000 Binary files a/pixmaps/sip-away.png and /dev/null differ diff --git a/pixmaps/sip-bifm.png b/pixmaps/sip-bifm.png deleted file mode 100644 index 898a18a7e..000000000 Binary files a/pixmaps/sip-bifm.png and /dev/null differ diff --git a/pixmaps/sip-busy.png b/pixmaps/sip-busy.png deleted file mode 100644 index 550e10a13..000000000 Binary files a/pixmaps/sip-busy.png and /dev/null differ diff --git a/pixmaps/sip-closed.png b/pixmaps/sip-closed.png deleted file mode 100644 index 6bbe08352..000000000 Binary files a/pixmaps/sip-closed.png and /dev/null differ diff --git a/pixmaps/sip-online.png b/pixmaps/sip-online.png deleted file mode 100644 index a6656ec57..000000000 Binary files a/pixmaps/sip-online.png and /dev/null differ diff --git a/pixmaps/sip-otl.png b/pixmaps/sip-otl.png deleted file mode 100644 index cc9023b81..000000000 Binary files a/pixmaps/sip-otl.png and /dev/null differ diff --git a/pixmaps/sip-otp.png b/pixmaps/sip-otp.png deleted file mode 100644 index 0df6f91a0..000000000 Binary files a/pixmaps/sip-otp.png and /dev/null differ diff --git a/pixmaps/sip-wfa.png b/pixmaps/sip-wfa.png deleted file mode 100644 index d6fe73b4f..000000000 Binary files a/pixmaps/sip-wfa.png and /dev/null differ diff --git a/pixmaps/startcall-green.png b/pixmaps/startcall-green.png index 940802a0c..56cf6e136 100644 Binary files a/pixmaps/startcall-green.png and b/pixmaps/startcall-green.png differ diff --git a/pixmaps/stopcall-red.png b/pixmaps/stopcall-red.png index 1004b8a01..de77592c7 100644 Binary files a/pixmaps/stopcall-red.png and b/pixmaps/stopcall-red.png differ diff --git a/po/POTFILES.in b/po/POTFILES.in index fdc209b3c..1af3423bb 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -20,7 +20,6 @@ gtk/loginframe.c [type: gettext/glade]gtk/call_logs.ui [type: gettext/glade]gtk/main.ui [type: gettext/glade]gtk/sip_account.ui -[type: gettext/glade]gtk/chatroom.ui [type: gettext/glade]gtk/parameters.ui [type: gettext/glade]gtk/buddylookup.ui [type: gettext/glade]gtk/waiting.ui diff --git a/po/de.po b/po/de.po index c645ba066..5429c1b01 100644 --- a/po/de.po +++ b/po/de.po @@ -6,32 +6,44 @@ msgid "" msgstr "" "Project-Id-Version: linphone 0.7.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-02-27 20:37+0100\n" -"PO-Revision-Date: 2012-02-24 22:28+0100\n" +"POT-Creation-Date: 2012-11-07 17:24+0100\n" +"PO-Revision-Date: 2012-11-07 19:27+0100\n" "Last-Translator: Gerhard Stengel \n" "Language-Team: German \n" -"Language: \n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" -"X-Generator: Lokalize 1.2\n" +"X-Generator: Lokalize 1.5\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -#: ../gtk/calllogs.c:71 +#: ../gtk/calllogs.c:82 +msgid "Aborted" +msgstr "Abgebrochen" + +#: ../gtk/calllogs.c:85 +msgid "Missed" +msgstr "Entgangen" + +#: ../gtk/calllogs.c:88 +msgid "Declined" +msgstr "Abgewiesen" + +#: ../gtk/calllogs.c:94 #, c-format msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "%i Minute" msgstr[1] "%i Minuten" -#: ../gtk/calllogs.c:74 +#: ../gtk/calllogs.c:97 #, c-format msgid "%i second" msgid_plural "%i seconds" msgstr[0] "%i Sekunde" msgstr[1] "%i Sekunden" -#: ../gtk/calllogs.c:77 +#: ../gtk/calllogs.c:100 #, c-format msgid "" "%s\t%s\tQuality: %s\n" @@ -40,10 +52,17 @@ msgstr "" "%s\t%s\tQualität: %s\n" "%s\t%s %s\t" -#: ../gtk/calllogs.c:79 +#: ../gtk/calllogs.c:102 msgid "n/a" msgstr "nicht verfügbar" +#: ../gtk/calllogs.c:105 +#, c-format +msgid "" +"%s\t%s\t\n" +"%s\t%s" +msgstr "" + #: ../gtk/conference.c:33 ../gtk/incall_view.c:185 msgid "Conference" msgstr "Konferenz" @@ -57,34 +76,38 @@ msgstr "Eigenes Telefon" msgid "Couldn't find pixmap file: %s" msgstr "Pixmapdatei %s kann nicht gefunden werden." -#: ../gtk/chat.c:27 +#: ../gtk/chat.c:32 #, c-format msgid "Chat with %s" msgstr "Chat mit %s" -#: ../gtk/main.c:84 +#: ../gtk/main.c:89 msgid "log to stdout some debug information while running." msgstr "Ausgabe von Debug-Informationen auf stdout während der Laufzeit" -#: ../gtk/main.c:91 +#: ../gtk/main.c:96 msgid "path to a file to write logs into." msgstr "Pfad zu einer Datei, in die Protokolle geschrieben werden." -#: ../gtk/main.c:98 +#: ../gtk/main.c:103 +msgid "Start linphone with video disabled." +msgstr "Linphone mit ausgeschaltetem Video starten." + +#: ../gtk/main.c:110 msgid "Start only in the system tray, do not show the main interface." msgstr "" "Nur im Systemabschnitt der Kontrollleiste starten, aber das Hauptfenster " "nicht zeigen." -#: ../gtk/main.c:105 +#: ../gtk/main.c:117 msgid "address to call right now" msgstr "Im Moment anzurufende Adresse" -#: ../gtk/main.c:112 +#: ../gtk/main.c:124 msgid "if set automatically answer incoming calls" msgstr "Falls aktiviert, werden eingehende Anrufe automatisch beantwortet" -#: ../gtk/main.c:119 +#: ../gtk/main.c:131 msgid "" "Specifiy a working directory (should be the base of the installation, eg: c:" "\\Program Files\\Linphone)" @@ -92,12 +115,12 @@ msgstr "" "Geben Sie einen Arbeitsordner an (sollte der Installationsordner sein, z. B. " "C:\\Programme\\Linphone)" -#: ../gtk/main.c:466 +#: ../gtk/main.c:501 #, c-format msgid "Call with %s" msgstr "Im Gespräch mit %s" -#: ../gtk/main.c:826 +#: ../gtk/main.c:879 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -110,7 +133,7 @@ msgstr "" "Ihrer Kontaktliste hinzufügen?\n" "Wenn Sie mit Nein antworten, wird diese Person vorläufig blockiert." -#: ../gtk/main.c:904 +#: ../gtk/main.c:957 #, c-format msgid "" "Please enter your password for username %s\n" @@ -119,59 +142,59 @@ msgstr "" "Geben Sie bitte Ihr Passwort für den Benutzernamen %s\n" " auf der Domäne %s ein:" -#: ../gtk/main.c:1004 +#: ../gtk/main.c:1059 msgid "Call error" msgstr "Anruf fehlgeschlagen" -#: ../gtk/main.c:1007 ../coreapi/linphonecore.c:2528 +#: ../gtk/main.c:1062 ../coreapi/linphonecore.c:2940 msgid "Call ended" msgstr "Anruf beendet" -#: ../gtk/main.c:1010 ../coreapi/linphonecore.c:199 +#: ../gtk/main.c:1065 ../coreapi/linphonecore.c:244 msgid "Incoming call" msgstr "Eingehender Anruf" -#: ../gtk/main.c:1012 ../gtk/incall_view.c:326 ../gtk/main.ui.h:21 +#: ../gtk/main.c:1067 ../gtk/incall_view.c:423 ../gtk/main.ui.h:4 msgid "Answer" msgstr "Annehmen" -#: ../gtk/main.c:1014 ../gtk/main.ui.h:29 +#: ../gtk/main.c:1069 ../gtk/main.ui.h:5 msgid "Decline" msgstr "Abweisen" -#: ../gtk/main.c:1020 +#: ../gtk/main.c:1075 msgid "Call paused" msgstr "Anruf wird gehalten" -#: ../gtk/main.c:1020 +#: ../gtk/main.c:1075 #, c-format msgid "by %s" msgstr "von %s" -#: ../gtk/main.c:1069 +#: ../gtk/main.c:1124 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s schlägt vor, eine Videoübertragung zu starten. Nehmen Sie an?" -#: ../gtk/main.c:1225 +#: ../gtk/main.c:1284 msgid "Website link" msgstr "Website-Verknüpfung" -#: ../gtk/main.c:1265 +#: ../gtk/main.c:1324 msgid "Linphone - a video internet phone" msgstr "Linphone - ein Internet-Video-Telefon" -#: ../gtk/main.c:1357 +#: ../gtk/main.c:1416 #, c-format msgid "%s (Default)" msgstr "%s (Vorgabe)" -#: ../gtk/main.c:1636 ../coreapi/callbacks.c:722 +#: ../gtk/main.c:1696 ../coreapi/callbacks.c:765 #, c-format msgid "We are transferred to %s" msgstr "Vermittlung nach %s" -#: ../gtk/main.c:1646 +#: ../gtk/main.c:1706 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." @@ -179,7 +202,7 @@ msgstr "" "Auf diesem Rechner können keine Soundkarten gefunden werden.\n" "Sie können keine Audio-Anrufe tätigen oder entgegennehmen." -#: ../gtk/main.c:1749 +#: ../gtk/main.c:1813 msgid "A free SIP video-phone" msgstr "Ein freies SIP-Video-Telefon" @@ -187,7 +210,7 @@ msgstr "Ein freies SIP-Video-Telefon" msgid "Add to addressbook" msgstr "Zum Adressbuch hinzufügen" -#: ../gtk/friendlist.c:377 ../gtk/propertybox.c:297 ../gtk/contact.ui.h:3 +#: ../gtk/friendlist.c:377 ../gtk/propertybox.c:362 ../gtk/contact.ui.h:1 msgid "Name" msgstr "Name" @@ -229,114 +252,114 @@ msgstr "Kontakt „%s“ löschen" msgid "Add new contact from %s directory" msgstr "Einen neuen Kontakt aus dem %s-Verzeichnis hinzufügen" -#: ../gtk/propertybox.c:303 +#: ../gtk/propertybox.c:368 msgid "Rate (Hz)" msgstr "Rate (Hz)" -#: ../gtk/propertybox.c:309 +#: ../gtk/propertybox.c:374 msgid "Status" msgstr "Status" -#: ../gtk/propertybox.c:315 +#: ../gtk/propertybox.c:380 msgid "Min bitrate (kbit/s)" msgstr "Min. Bitrate (kbit/s)" -#: ../gtk/propertybox.c:322 +#: ../gtk/propertybox.c:387 msgid "Parameters" msgstr "Parameter" -#: ../gtk/propertybox.c:365 ../gtk/propertybox.c:508 +#: ../gtk/propertybox.c:430 ../gtk/propertybox.c:573 msgid "Enabled" msgstr "Freigegeben" -#: ../gtk/propertybox.c:367 ../gtk/propertybox.c:508 +#: ../gtk/propertybox.c:432 ../gtk/propertybox.c:573 msgid "Disabled" msgstr "Gesperrt" -#: ../gtk/propertybox.c:554 +#: ../gtk/propertybox.c:619 msgid "Account" msgstr "Konto" -#: ../gtk/propertybox.c:694 +#: ../gtk/propertybox.c:759 msgid "English" msgstr "Englisch" -#: ../gtk/propertybox.c:695 +#: ../gtk/propertybox.c:760 msgid "French" msgstr "Französisch" -#: ../gtk/propertybox.c:696 +#: ../gtk/propertybox.c:761 msgid "Swedish" msgstr "Schwedisch" -#: ../gtk/propertybox.c:697 +#: ../gtk/propertybox.c:762 msgid "Italian" msgstr "Italienisch" -#: ../gtk/propertybox.c:698 +#: ../gtk/propertybox.c:763 msgid "Spanish" msgstr "Spanisch" -#: ../gtk/propertybox.c:699 +#: ../gtk/propertybox.c:764 msgid "Brazilian Portugese" msgstr "Brasilianisches Portugiesisch" -#: ../gtk/propertybox.c:700 +#: ../gtk/propertybox.c:765 msgid "Polish" msgstr "Polnisch" -#: ../gtk/propertybox.c:701 +#: ../gtk/propertybox.c:766 msgid "German" msgstr "Deutsch" -#: ../gtk/propertybox.c:702 +#: ../gtk/propertybox.c:767 msgid "Russian" msgstr "Russisch" -#: ../gtk/propertybox.c:703 +#: ../gtk/propertybox.c:768 msgid "Japanese" msgstr "Japanisch" -#: ../gtk/propertybox.c:704 +#: ../gtk/propertybox.c:769 msgid "Dutch" msgstr "Niederländisch" -#: ../gtk/propertybox.c:705 +#: ../gtk/propertybox.c:770 msgid "Hungarian" msgstr "Ungarisch" -#: ../gtk/propertybox.c:706 +#: ../gtk/propertybox.c:771 msgid "Czech" msgstr "Tschechisch" -#: ../gtk/propertybox.c:707 +#: ../gtk/propertybox.c:772 msgid "Chinese" msgstr "Chinesisch" -#: ../gtk/propertybox.c:708 +#: ../gtk/propertybox.c:773 msgid "Traditional Chinese" msgstr "Traditionelles Chinesisch" -#: ../gtk/propertybox.c:709 +#: ../gtk/propertybox.c:774 msgid "Norwegian" msgstr "Norwegisch" -#: ../gtk/propertybox.c:766 +#: ../gtk/propertybox.c:831 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "" "Linphone muss neu gestartet werden, damit die neue Spracheinstellung wirksam " "wird." -#: ../gtk/propertybox.c:836 +#: ../gtk/propertybox.c:901 msgid "None" msgstr "Keinen" -#: ../gtk/propertybox.c:840 +#: ../gtk/propertybox.c:905 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:846 +#: ../gtk/propertybox.c:911 msgid "ZRTP" msgstr "" @@ -410,7 +433,7 @@ msgstr "Geben Sie Ihren Benutzernamen bei linphone.org ein." msgid "Username:" msgstr "Benutzername:" -#: ../gtk/setupwizard.c:93 ../gtk/password.ui.h:2 +#: ../gtk/setupwizard.c:93 ../gtk/password.ui.h:4 msgid "Password:" msgstr "Passwort:" @@ -478,35 +501,35 @@ msgstr "" "wir Ihnen soeben per E-Mail geschickt haben.\n" "Danach gehen Sie hierher zurück und drücken auf „Vor“." -#: ../gtk/setupwizard.c:559 +#: ../gtk/setupwizard.c:554 msgid "Welcome to the account setup assistant" msgstr "Willkommen zum Konto-Einrichtungsassistenten" -#: ../gtk/setupwizard.c:564 +#: ../gtk/setupwizard.c:559 msgid "Account setup assistant" msgstr "Konto-Einrichtungsassistent" -#: ../gtk/setupwizard.c:570 +#: ../gtk/setupwizard.c:565 msgid "Configure your account (step 1/1)" msgstr "Konto einrichten (Schritt 1/1)" -#: ../gtk/setupwizard.c:575 +#: ../gtk/setupwizard.c:570 msgid "Enter your sip username (step 1/1)" msgstr "Geben Sie Ihren SIP-Benutzernamen ein (Schritt 1/1)" -#: ../gtk/setupwizard.c:579 +#: ../gtk/setupwizard.c:574 msgid "Enter account information (step 1/2)" msgstr "Geben Sie Ihre Zugangsdaten ein (Schritt 1/2)" -#: ../gtk/setupwizard.c:588 +#: ../gtk/setupwizard.c:583 msgid "Validation (step 2/2)" msgstr "Bestätigung (Schritt 2/2)" -#: ../gtk/setupwizard.c:593 +#: ../gtk/setupwizard.c:588 msgid "Error" msgstr "Fehler" -#: ../gtk/setupwizard.c:597 +#: ../gtk/setupwizard.c:592 msgid "Terminating" msgstr "Fertigstellen" @@ -524,85 +547,134 @@ msgstr "Vermittlung zum Anruf #%i mit %s" msgid "Transfer" msgstr "Vermittlung" -#: ../gtk/incall_view.c:305 +#: ../gtk/incall_view.c:208 ../gtk/incall_view.c:211 +msgid "Not used" +msgstr "Nicht verwendet" + +#: ../gtk/incall_view.c:218 +msgid "ICE not activated" +msgstr "ICE nicht aktiviert" + +#: ../gtk/incall_view.c:220 +msgid "ICE failed" +msgstr "ICE fehlgeschlagen" + +#: ../gtk/incall_view.c:222 +msgid "ICE in progress" +msgstr "ICE läuft" + +#: ../gtk/incall_view.c:224 +msgid "Going through one or more NATs" +msgstr "Ein oder mehrere NATs werden durchquert" + +#: ../gtk/incall_view.c:226 +msgid "Direct" +msgstr "Direkt" + +#: ../gtk/incall_view.c:228 +msgid "Through a relay server" +msgstr "Über einen Relay-Server" + +#: ../gtk/incall_view.c:237 ../gtk/incall_view.c:241 +#, c-format +msgid "" +"download: %f\n" +"upload: %f (kbit/s)" +msgstr "" +"Herunterladen: %f\n" +"Hochladen: %f (kbit/s)" + +#: ../gtk/incall_view.c:402 msgid "Calling..." msgstr "Verbindungsaufbau..." -#: ../gtk/incall_view.c:308 ../gtk/incall_view.c:516 +#: ../gtk/incall_view.c:405 ../gtk/incall_view.c:614 msgid "00::00::00" msgstr "" -#: ../gtk/incall_view.c:319 +#: ../gtk/incall_view.c:416 msgid "Incoming call" msgstr "Eingehender Anruf" -#: ../gtk/incall_view.c:356 +#: ../gtk/incall_view.c:453 msgid "good" msgstr "gut" -#: ../gtk/incall_view.c:358 +#: ../gtk/incall_view.c:455 msgid "average" msgstr "durchschnittlich" -#: ../gtk/incall_view.c:360 +#: ../gtk/incall_view.c:457 msgid "poor" msgstr "schlecht" -#: ../gtk/incall_view.c:362 +#: ../gtk/incall_view.c:459 msgid "very poor" msgstr "sehr schlecht" -#: ../gtk/incall_view.c:364 +#: ../gtk/incall_view.c:461 msgid "too bad" msgstr "zu schlecht" -#: ../gtk/incall_view.c:365 ../gtk/incall_view.c:381 +#: ../gtk/incall_view.c:462 ../gtk/incall_view.c:478 msgid "unavailable" msgstr "nicht verfügbar" -#: ../gtk/incall_view.c:481 +#: ../gtk/incall_view.c:578 msgid "Secured by SRTP" msgstr "Gesichert durch SRTP" -#: ../gtk/incall_view.c:487 +#: ../gtk/incall_view.c:584 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "Gesichert durch ZRTP - [Auth.-Token: %s]" -#: ../gtk/incall_view.c:493 +#: ../gtk/incall_view.c:590 msgid "Set unverified" msgstr "Auf „Ungeprüft“ setzen" -#: ../gtk/incall_view.c:493 ../gtk/main.ui.h:49 +#: ../gtk/incall_view.c:590 ../gtk/main.ui.h:3 msgid "Set verified" msgstr "Auf „Geprüft“ setzen" -#: ../gtk/incall_view.c:514 +#: ../gtk/incall_view.c:612 msgid "In conference" msgstr "In Konferenz" -#: ../gtk/incall_view.c:514 +#: ../gtk/incall_view.c:612 msgid "In call" msgstr "Im Gespräch" -#: ../gtk/incall_view.c:533 +#: ../gtk/incall_view.c:632 msgid "Paused call" msgstr "Gehaltener Anruf" -#: ../gtk/incall_view.c:545 +#: ../gtk/incall_view.c:644 #, c-format msgid "%02i::%02i::%02i" msgstr "" -#: ../gtk/incall_view.c:561 +#: ../gtk/incall_view.c:661 msgid "Call ended." msgstr "Anruf beendet." -#: ../gtk/incall_view.c:618 +#: ../gtk/incall_view.c:689 +msgid "Transfer in progress" +msgstr "Vermittlung läuft" + +#: ../gtk/incall_view.c:692 +msgid "Transfer done." +msgstr "Vermittlung abgeschlossen." + +#: ../gtk/incall_view.c:695 +msgid "Transfer failed." +msgstr "Vermittlung fehlgeschlagen." + +#: ../gtk/incall_view.c:740 msgid "Resume" msgstr "Fortsetzen" -#: ../gtk/incall_view.c:625 ../gtk/main.ui.h:45 +#: ../gtk/incall_view.c:747 ../gtk/main.ui.h:6 msgid "Pause" msgstr "Halten" @@ -612,225 +684,225 @@ msgid "Please enter login information for %s" msgstr "Bitte geben Sie die Anmeldeinformationen für %s ein." #: ../gtk/main.ui.h:1 -msgid "#" -msgstr "" - -#: ../gtk/main.ui.h:2 -msgid "*" -msgstr "" - -#: ../gtk/main.ui.h:3 -msgid "0" -msgstr "" - -#: ../gtk/main.ui.h:4 -msgid "1" -msgstr "" - -#: ../gtk/main.ui.h:5 -msgid "2" -msgstr "" - -#: ../gtk/main.ui.h:6 -msgid "3" -msgstr "" - -#: ../gtk/main.ui.h:7 -msgid "4" -msgstr "" - -#: ../gtk/main.ui.h:8 -msgid "5" -msgstr "" - -#: ../gtk/main.ui.h:9 -msgid "6" -msgstr "" - -#: ../gtk/main.ui.h:10 -msgid "7" -msgstr "" - -#: ../gtk/main.ui.h:11 -msgid "8" -msgstr "" - -#: ../gtk/main.ui.h:12 -msgid "9" -msgstr "" - -#: ../gtk/main.ui.h:13 -msgid "Add contacts from directory" -msgstr "Kontakte aus einem Verzeichnis hinzufügen" - -#: ../gtk/main.ui.h:14 msgid "Callee name" msgstr "Name des Angerufenen" +#: ../gtk/main.ui.h:2 +msgid "label" +msgstr "" + +#: ../gtk/main.ui.h:7 +msgid "Video" +msgstr "" + +#: ../gtk/main.ui.h:8 +msgid "In call" +msgstr "Im Gespräch" + +#: ../gtk/main.ui.h:9 +msgid "Duration" +msgstr "Dauer" + +#: ../gtk/main.ui.h:10 +msgid "Call quality rating" +msgstr "Bewertung der Verbindungsqualität" + +#: ../gtk/main.ui.h:11 +msgid "_Options" +msgstr "_Optionen" + +#: ../gtk/main.ui.h:12 +msgid "Always start video" +msgstr "Video immer starten" + +#: ../gtk/main.ui.h:13 +msgid "Enable self-view" +msgstr "Selbstansicht ein" + +#: ../gtk/main.ui.h:14 +msgid "_Help" +msgstr "_Hilfe" + #: ../gtk/main.ui.h:15 -msgid "Welcome !" -msgstr "Willkommen !" +msgid "Show debug window" +msgstr "Debug-Fenster anzeigen" #: ../gtk/main.ui.h:16 -msgid "A" +msgid "_Homepage" msgstr "" #: ../gtk/main.ui.h:17 -msgid "ADSL" -msgstr "" +msgid "Check _Updates" +msgstr "Auf _Aktualisierungen überprüfen" #: ../gtk/main.ui.h:18 msgid "Account assistant" msgstr "Konto-Einrichtungsassistent" #: ../gtk/main.ui.h:19 -msgid "Add contact" -msgstr "Kontakt hinzufügen" +msgid "Initiate a new call" +msgstr "Einen neuen Anruf beginnen" #: ../gtk/main.ui.h:20 -msgid "All users" -msgstr "Alle Teilnehmer" +msgid "Enter username, phone number, or full sip address" +msgstr "Teilnehmer, Telefonnummer oder vollständige SIP-Adresse eingeben" + +#: ../gtk/main.ui.h:21 +msgid "SIP address or phone number:" +msgstr "SIP-Adresse oder Telefonnummer:" #: ../gtk/main.ui.h:22 -msgid "Automatically log me in" -msgstr "Automatisch anmelden" +msgid "Lookup:" +msgstr "Suchen:" #: ../gtk/main.ui.h:23 -msgid "B" -msgstr "" +msgid "in" +msgstr "in" -#: ../gtk/main.ui.h:24 ../gtk/parameters.ui.h:21 -msgid "C" -msgstr "" +#: ../gtk/main.ui.h:24 +msgid "Search" +msgstr "Suchen" #: ../gtk/main.ui.h:25 -msgid "Call quality rating" -msgstr "Bewertung der Verbindungsqualität" +msgid "Add contacts from directory" +msgstr "Kontakte aus einem Verzeichnis hinzufügen" #: ../gtk/main.ui.h:26 -msgid "Check _Updates" -msgstr "Auf _Aktualisierungen überprüfen" +msgid "Add contact" +msgstr "Kontakt hinzufügen" #: ../gtk/main.ui.h:27 msgid "Contacts" msgstr "Kontakte" #: ../gtk/main.ui.h:28 +msgid "Recent calls" +msgstr "Letzte Gespräche" + +#: ../gtk/main.ui.h:29 msgid "D" msgstr "" #: ../gtk/main.ui.h:30 -msgid "Default" -msgstr "Vorgabe" +msgid "#" +msgstr "" #: ../gtk/main.ui.h:31 -msgid "Duration" -msgstr "Dauer" +msgid "0" +msgstr "" #: ../gtk/main.ui.h:32 -msgid "Enable self-view" -msgstr "Selbstansicht ein" +msgid "*" +msgstr "" -#: ../gtk/main.ui.h:33 -msgid "Enable video" -msgstr "Video ein" +#: ../gtk/main.ui.h:33 ../gtk/parameters.ui.h:7 +msgid "C" +msgstr "" #: ../gtk/main.ui.h:34 -msgid "Enter username, phone number, or full sip address" -msgstr "Teilnehmer, Telefonnummer oder vollständige SIP-Adresse eingeben" +msgid "9" +msgstr "" #: ../gtk/main.ui.h:35 -msgid "Fiber Channel" -msgstr "Glasfaserkabel" +msgid "8" +msgstr "" #: ../gtk/main.ui.h:36 -msgid "In call" -msgstr "Im Gespräch" +msgid "7" +msgstr "" #: ../gtk/main.ui.h:37 -msgid "Initiate a new call" -msgstr "Einen neuen Anruf beginnen" +msgid "B" +msgstr "" #: ../gtk/main.ui.h:38 -msgid "Internet connection:" -msgstr "Internetverbindung:" +msgid "6" +msgstr "" #: ../gtk/main.ui.h:39 +msgid "5" +msgstr "" + +#: ../gtk/main.ui.h:40 +msgid "4" +msgstr "" + +#: ../gtk/main.ui.h:41 +msgid "A" +msgstr "" + +#: ../gtk/main.ui.h:42 +msgid "3" +msgstr "" + +#: ../gtk/main.ui.h:43 +msgid "2" +msgstr "" + +#: ../gtk/main.ui.h:44 +msgid "1" +msgstr "" + +#: ../gtk/main.ui.h:45 msgid "Keypad" msgstr "Wähltastatur" -#: ../gtk/main.ui.h:40 -msgid "Login information" -msgstr "Anmeldeinformationen" - -#: ../gtk/main.ui.h:41 -msgid "Lookup:" -msgstr "Suchen:" - -#: ../gtk/main.ui.h:42 +#: ../gtk/main.ui.h:46 msgid "My current identity:" msgstr "Aktuelle Identität:" -#: ../gtk/main.ui.h:43 -msgid "Online users" -msgstr "Angemeldete Teilnehmer" - -#: ../gtk/main.ui.h:44 -msgid "Password" -msgstr "Passwort" - -#: ../gtk/main.ui.h:46 -msgid "Recent calls" -msgstr "Letzte Gespräche" - -#: ../gtk/main.ui.h:47 -msgid "SIP address or phone number:" -msgstr "SIP-Adresse oder Telefonnummer:" - -#: ../gtk/main.ui.h:48 -msgid "Search" -msgstr "Suchen" - -#: ../gtk/main.ui.h:50 -msgid "Show debug window" -msgstr "Debug-Fenster anzeigen" - -#: ../gtk/main.ui.h:51 +#: ../gtk/main.ui.h:47 ../gtk/tunnel_config.ui.h:7 msgid "Username" msgstr "Benutzername" +#: ../gtk/main.ui.h:48 ../gtk/tunnel_config.ui.h:8 +msgid "Password" +msgstr "Passwort" + +#: ../gtk/main.ui.h:49 +msgid "Internet connection:" +msgstr "Internetverbindung:" + +#: ../gtk/main.ui.h:50 +msgid "Automatically log me in" +msgstr "Automatisch anmelden" + +#: ../gtk/main.ui.h:51 +msgid "Login information" +msgstr "Anmeldeinformationen" + #: ../gtk/main.ui.h:52 -msgid "Video" -msgstr "" +msgid "Welcome !" +msgstr "Willkommen !" #: ../gtk/main.ui.h:53 -msgid "_Help" -msgstr "_Hilfe" +msgid "All users" +msgstr "Alle Teilnehmer" #: ../gtk/main.ui.h:54 -msgid "_Homepage" -msgstr "" +msgid "Online users" +msgstr "Angemeldete Teilnehmer" #: ../gtk/main.ui.h:55 -msgid "_Options" -msgstr "_Optionen" +msgid "ADSL" +msgstr "" #: ../gtk/main.ui.h:56 -msgid "in" -msgstr "in" +msgid "Fiber Channel" +msgstr "Glasfaserkabel" #: ../gtk/main.ui.h:57 -msgid "label" -msgstr "" +msgid "Default" +msgstr "Vorgabe" #: ../gtk/about.ui.h:1 -msgid "(C) Belledonne Communications,2010\n" -msgstr "" - -#: ../gtk/about.ui.h:3 msgid "About linphone" msgstr "Über Linphone" +#: ../gtk/about.ui.h:2 +msgid "(C) Belledonne Communications,2010\n" +msgstr "" + #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." msgstr "" @@ -864,22 +936,22 @@ msgstr "" "cs: Petr Pisar \n" "hu: anonymous\n" -#: ../gtk/contact.ui.h:1 -msgid "Contact information" -msgstr "Kontaktinformationen" - #: ../gtk/contact.ui.h:2 -msgid "Allow this contact to see my presence status" -msgstr "Diesem Kontakt erlauben, meinen Anwesenheitsstatus zu sehen" - -#: ../gtk/contact.ui.h:4 msgid "SIP Address" msgstr "SIP-Adresse" -#: ../gtk/contact.ui.h:5 +#: ../gtk/contact.ui.h:3 msgid "Show this contact presence status" msgstr "Anwesenheitsstatus dieses Kontakts zeigen" +#: ../gtk/contact.ui.h:4 +msgid "Allow this contact to see my presence status" +msgstr "Diesem Kontakt erlauben, meinen Anwesenheitsstatus zu sehen" + +#: ../gtk/contact.ui.h:5 +msgid "Contact information" +msgstr "Kontaktinformationen" + #: ../gtk/log.ui.h:1 msgid "Linphone debug window" msgstr "Linphone Debug-Fenster" @@ -892,235 +964,273 @@ msgstr "Ans Ende rollen" msgid "Linphone - Authentication required" msgstr "Linphone - Authentifikation erforderlich" -#: ../gtk/password.ui.h:3 +#: ../gtk/password.ui.h:2 msgid "Please enter the domain password" msgstr "Bitte das Passwort der Domäne eingeben" -#: ../gtk/password.ui.h:4 +#: ../gtk/password.ui.h:3 msgid "UserID" msgstr "Benutzer-ID" #: ../gtk/call_logs.ui.h:1 -msgid "Call back" -msgstr "Anrufen" - -#: ../gtk/call_logs.ui.h:2 msgid "Call history" msgstr "Anrufchronik" -#: ../gtk/call_logs.ui.h:3 +#: ../gtk/call_logs.ui.h:2 msgid "Clear all" msgstr "Alle löschen" -#: ../gtk/sip_account.ui.h:1 -msgid "Configure a SIP account" -msgstr "SIP-Konto einrichten" +#: ../gtk/call_logs.ui.h:3 +msgid "Call back" +msgstr "Anrufen" -#: ../gtk/sip_account.ui.h:2 +#: ../gtk/sip_account.ui.h:1 msgid "Linphone - Configure a SIP account" msgstr "Linphone - SIP-Konto einrichten" -#: ../gtk/sip_account.ui.h:3 -msgid "Looks like sip:" -msgstr "Sieht aus wie sip:" - -#: ../gtk/sip_account.ui.h:4 -msgid "Looks like sip:@" -msgstr "Sieht aus wie sip:@" - -#: ../gtk/sip_account.ui.h:5 -msgid "Publish presence information" -msgstr "Anwesenheitsstatus veröffentlichen" - -#: ../gtk/sip_account.ui.h:6 -msgid "Register" -msgstr "Registrieren" - -#: ../gtk/sip_account.ui.h:7 -msgid "Registration duration (sec):" -msgstr "Registrierungsdauer (sec):" - -#: ../gtk/sip_account.ui.h:8 -msgid "Route (optional):" -msgstr "Route (optional):" - -#: ../gtk/sip_account.ui.h:9 -msgid "SIP Proxy address:" -msgstr "SIP-Proxy-Adresse:" - -#: ../gtk/sip_account.ui.h:10 +#: ../gtk/sip_account.ui.h:2 msgid "Your SIP identity:" msgstr "Ihre SIP-Identität:" -#: ../gtk/sip_account.ui.h:11 +#: ../gtk/sip_account.ui.h:3 +msgid "Looks like sip:@" +msgstr "Sieht aus wie sip:@" + +#: ../gtk/sip_account.ui.h:4 msgid "sip:" msgstr "sip:" +#: ../gtk/sip_account.ui.h:5 +msgid "SIP Proxy address:" +msgstr "SIP-Proxy-Adresse:" + +#: ../gtk/sip_account.ui.h:6 +msgid "Looks like sip:" +msgstr "Sieht aus wie sip:" + +#: ../gtk/sip_account.ui.h:7 +msgid "Route (optional):" +msgstr "Route (optional):" + +#: ../gtk/sip_account.ui.h:8 +msgid "Registration duration (sec):" +msgstr "Registrierungsdauer (sec):" + +#: ../gtk/sip_account.ui.h:9 +msgid "Register" +msgstr "Registrieren" + +#: ../gtk/sip_account.ui.h:10 +msgid "Publish presence information" +msgstr "Anwesenheitsstatus veröffentlichen" + +#: ../gtk/sip_account.ui.h:11 +msgid "Configure a SIP account" +msgstr "SIP-Konto einrichten" + #: ../gtk/chatroom.ui.h:1 msgid "Send" msgstr "Senden" #: ../gtk/parameters.ui.h:1 -msgid "0 stands for \"unlimited\"" -msgstr "0 bedeutet „unbegrenzt“" +msgid "default soundcard" +msgstr "Standard-Soundkarte" #: ../gtk/parameters.ui.h:2 -msgid "Audio" -msgstr "Audio" +msgid "a sound card" +msgstr "eine Soundkarte" #: ../gtk/parameters.ui.h:3 -msgid "Bandwidth control" -msgstr "Bandbreiten-Einstellungen" +msgid "default camera" +msgstr "Standard-Kamera" #: ../gtk/parameters.ui.h:4 -msgid "Codecs" -msgstr "Codecs" - -#: ../gtk/parameters.ui.h:5 -msgid "Default identity" -msgstr "Standard-Identität" - -#: ../gtk/parameters.ui.h:6 -msgid "Language" -msgstr "Sprache" - -#: ../gtk/parameters.ui.h:7 -msgid "Level" -msgstr "Detaillierung" - -#: ../gtk/parameters.ui.h:8 -msgid "NAT and Firewall" -msgstr "NAT und Firewall" - -#: ../gtk/parameters.ui.h:9 -msgid "Network protocol and ports" -msgstr "Netzwerkprotokoll und Ports" - -#: ../gtk/parameters.ui.h:10 -msgid "Privacy" -msgstr "Privatsphäre" - -#: ../gtk/parameters.ui.h:11 -msgid "Proxy accounts" -msgstr "Proxy-Konten" - -#: ../gtk/parameters.ui.h:12 -msgid "Transport" -msgstr "Übertragung" - -#: ../gtk/parameters.ui.h:13 -msgid "Video" -msgstr "Video" - -#: ../gtk/parameters.ui.h:14 -msgid "" -"Adaptive rate control is a technique to dynamically guess the available " -"bandwidth during a call." -msgstr "" -"Adaptive Ratenregelung ist eine Technik zur dynamischen Abschätzung der " -"zur Verfügung stehenden Bandbreite während eines Anrufs." - -#: ../gtk/parameters.ui.h:15 -msgid "ALSA special device (optional):" -msgstr "Spezielles ALSA-Gerät (optional):" - -#: ../gtk/parameters.ui.h:16 -msgid "Add" -msgstr "Hinzufügen" - -#: ../gtk/parameters.ui.h:17 -msgid "Audio RTP/UDP:" -msgstr "" - -#: ../gtk/parameters.ui.h:18 -msgid "Audio codecs" -msgstr "Audio-Codecs" - -#: ../gtk/parameters.ui.h:19 -msgid "Behind NAT / Firewall (specify gateway IP below)" -msgstr "Hinter NAT / Firewall (IP-Gateway unten angeben)" - -#: ../gtk/parameters.ui.h:20 -msgid "Behind NAT / Firewall (use STUN to resolve)" -msgstr "Hinter NAT / Firewall (mit STUN auflösen)" - -#: ../gtk/parameters.ui.h:22 msgid "CIF" msgstr "" -#: ../gtk/parameters.ui.h:23 -msgid "Capture device:" -msgstr "Aufnahmegerät:" +#: ../gtk/parameters.ui.h:5 +msgid "Audio codecs" +msgstr "Audio-Codecs" -#: ../gtk/parameters.ui.h:24 -msgid "Codecs" -msgstr "Codecs" +#: ../gtk/parameters.ui.h:6 +msgid "Video codecs" +msgstr "Video-Codecs" -#: ../gtk/parameters.ui.h:25 -msgid "Direct connection to the Internet" -msgstr "Direkte Verbindung ins Internet" +#: ../gtk/parameters.ui.h:8 +msgid "SIP (UDP)" +msgstr "" -#: ../gtk/parameters.ui.h:26 -msgid "Disable" -msgstr "Sperren" +#: ../gtk/parameters.ui.h:9 +msgid "SIP (TCP)" +msgstr "" -#: ../gtk/parameters.ui.h:27 -msgid "Done" -msgstr "Fertig" +#: ../gtk/parameters.ui.h:10 +msgid "SIP (TLS)" +msgstr "" -#: ../gtk/parameters.ui.h:28 -msgid "Download speed limit in Kbit/sec:" -msgstr "Download-Bandbreite (kbit/sec):" +#: ../gtk/parameters.ui.h:11 +msgid "Settings" +msgstr "Einstellungen" -#: ../gtk/parameters.ui.h:29 -msgid "Edit" -msgstr "Bearbeiten" +#: ../gtk/parameters.ui.h:12 +msgid "Set Maximum Transmission Unit:" +msgstr "Maximum Transmission Unit setzen:" -#: ../gtk/parameters.ui.h:30 -msgid "Enable" -msgstr "Freigeben" +#: ../gtk/parameters.ui.h:13 +msgid "Send DTMFs as SIP info" +msgstr "DTMFs als SIP-Info senden" -#: ../gtk/parameters.ui.h:31 -msgid "Enable adaptive rate control" -msgstr "Adaptive Ratenregelung ein" +#: ../gtk/parameters.ui.h:14 +msgid "Use IPv6 instead of IPv4" +msgstr "IPv6 statt IPv4 verwenden" -#: ../gtk/parameters.ui.h:32 -msgid "Enable echo cancellation" -msgstr "Echounterdrückung ein" +#: ../gtk/parameters.ui.h:15 +msgid "Transport" +msgstr "Übertragung" -#: ../gtk/parameters.ui.h:33 -msgid "Erase all passwords" -msgstr "Alle Passwörter löschen" - -#: ../gtk/parameters.ui.h:34 -msgid "Manage SIP Accounts" -msgstr "SIP-Konten verwalten" - -#: ../gtk/parameters.ui.h:35 +#: ../gtk/parameters.ui.h:16 msgid "Media encryption type" msgstr "Verschlüsselungstyp der Medien" -#: ../gtk/parameters.ui.h:36 -msgid "Multimedia settings" -msgstr "Multimedia-Einstellungen" +#: ../gtk/parameters.ui.h:17 +msgid "Tunnel" +msgstr "Tunnel" -#: ../gtk/parameters.ui.h:37 +#: ../gtk/parameters.ui.h:18 +msgid "Video RTP/UDP:" +msgstr "" + +#: ../gtk/parameters.ui.h:19 +msgid "Audio RTP/UDP:" +msgstr "" + +#: ../gtk/parameters.ui.h:20 +msgid "DSCP fields" +msgstr "DSCP-Felder" + +#: ../gtk/parameters.ui.h:21 +msgid "Fixed" +msgstr "Fest" + +#: ../gtk/parameters.ui.h:22 +msgid "Network protocol and ports" +msgstr "Netzwerkprotokoll und Ports" + +#: ../gtk/parameters.ui.h:23 +msgid "Direct connection to the Internet" +msgstr "Direkte Verbindung ins Internet" + +#: ../gtk/parameters.ui.h:24 +msgid "Behind NAT / Firewall (specify gateway IP below)" +msgstr "Hinter NAT / Firewall (IP-Gateway darunter angeben)" + +#: ../gtk/parameters.ui.h:25 +msgid "Public IP address:" +msgstr "Öffentliche IP-Adresse:" + +#: ../gtk/parameters.ui.h:26 +msgid "Behind NAT / Firewall (use STUN to resolve)" +msgstr "Hinter NAT / Firewall (STUN verwenden)" + +#: ../gtk/parameters.ui.h:27 +msgid "Behind NAT / Firewall (use ICE)" +msgstr "Hinter NAT / Firewall (ICE verwenden)" + +#: ../gtk/parameters.ui.h:28 +msgid "Stun server:" +msgstr "STUN-Server:" + +#: ../gtk/parameters.ui.h:29 +msgid "NAT and Firewall" +msgstr "NAT und Firewall" + +#: ../gtk/parameters.ui.h:30 msgid "Network settings" msgstr "Netzwerkeinstellungen" -#: ../gtk/parameters.ui.h:38 +#: ../gtk/parameters.ui.h:31 +msgid "Ring sound:" +msgstr "Klingelton:" + +#: ../gtk/parameters.ui.h:32 +msgid "ALSA special device (optional):" +msgstr "Spezielles ALSA-Gerät (optional):" + +#: ../gtk/parameters.ui.h:33 +msgid "Capture device:" +msgstr "Aufnahmegerät:" + +#: ../gtk/parameters.ui.h:34 +msgid "Ring device:" +msgstr "Gerät für Klingelton:" + +#: ../gtk/parameters.ui.h:35 msgid "Playback device:" msgstr "Wiedergabegerät:" +#: ../gtk/parameters.ui.h:36 +msgid "Enable echo cancellation" +msgstr "Echounterdrückung ein" + +#: ../gtk/parameters.ui.h:37 +msgid "Audio" +msgstr "Audio" + +#: ../gtk/parameters.ui.h:38 +msgid "Video input device:" +msgstr "Video-Aufnahmegerät:" + #: ../gtk/parameters.ui.h:39 msgid "Prefered video resolution:" msgstr "Bevorzugte Video-Auflösung:" #: ../gtk/parameters.ui.h:40 -msgid "Public IP address:" -msgstr "Öffentliche IP-Adresse:" +msgid "Video" +msgstr "Video" #: ../gtk/parameters.ui.h:41 +msgid "Multimedia settings" +msgstr "Multimedia-Einstellungen" + +#: ../gtk/parameters.ui.h:42 +msgid "This section defines your SIP address when not using a SIP account" +msgstr "" +"In diesem Bereich legen Sie Ihre SIP-Adresse fest, wenn Sie kein SIP-Konto " +"verwenden." + +#: ../gtk/parameters.ui.h:43 +msgid "Your display name (eg: John Doe):" +msgstr "Ihr angezeigter Name (z. B. Heinz Müller):" + +#: ../gtk/parameters.ui.h:44 +msgid "Your username:" +msgstr "Ihr Benutzername:" + +#: ../gtk/parameters.ui.h:45 +msgid "Your resulting SIP address:" +msgstr "Sich ergebende SIP-Adresse:" + +#: ../gtk/parameters.ui.h:46 +msgid "Default identity" +msgstr "Standard-Identität" + +#: ../gtk/parameters.ui.h:47 +msgid "Wizard" +msgstr "Assistent" + +#: ../gtk/parameters.ui.h:48 +msgid "Add" +msgstr "Hinzufügen" + +#: ../gtk/parameters.ui.h:49 +msgid "Edit" +msgstr "Bearbeiten" + +#: ../gtk/parameters.ui.h:50 +msgid "Remove" +msgstr "Entfernen" + +#: ../gtk/parameters.ui.h:51 msgid "" "Register to FONICS\n" "virtual network !" @@ -1128,127 +1238,97 @@ msgstr "" "Am virtuellen FONICS\n" "Netzwerk anmelden!" -#: ../gtk/parameters.ui.h:43 -msgid "Remove" -msgstr "Entfernen" - -#: ../gtk/parameters.ui.h:44 -msgid "Ring device:" -msgstr "Gerät für Klingelton:" - -#: ../gtk/parameters.ui.h:45 -msgid "Ring sound:" -msgstr "Klingelton:" - -#: ../gtk/parameters.ui.h:46 -msgid "SIP (TCP)" -msgstr "" - -#: ../gtk/parameters.ui.h:47 -msgid "SIP (TLS)" -msgstr "" - -#: ../gtk/parameters.ui.h:48 -msgid "SIP (UDP)" -msgstr "" - -#: ../gtk/parameters.ui.h:49 -msgid "Send DTMFs as SIP info" -msgstr "DTMFs als SIP-Info senden" - -#: ../gtk/parameters.ui.h:50 -msgid "Set Maximum Transmission Unit:" -msgstr "Maximum Transmission Unit setzen:" - -#: ../gtk/parameters.ui.h:51 -msgid "Settings" -msgstr "Einstellungen" - -#: ../gtk/parameters.ui.h:52 -msgid "Show advanced settings" -msgstr "Fortgeschrittene Einstellungen anzeigen" - #: ../gtk/parameters.ui.h:53 -msgid "Stun server:" -msgstr "STUN-Server:" +msgid "Proxy accounts" +msgstr "Proxy-Konten" #: ../gtk/parameters.ui.h:54 -msgid "This section defines your SIP address when not using a SIP account" -msgstr "" -"In diesem Bereich legen Sie Ihre SIP-Adresse fest, wenn Sie kein SIP-Konto " -"verwenden." +msgid "Erase all passwords" +msgstr "Alle Passwörter löschen" #: ../gtk/parameters.ui.h:55 -msgid "Tunnel" -msgstr "Tunnel" +msgid "Privacy" +msgstr "Privatsphäre" #: ../gtk/parameters.ui.h:56 +msgid "Manage SIP Accounts" +msgstr "SIP-Konten verwalten" + +#: ../gtk/parameters.ui.h:57 ../gtk/tunnel_config.ui.h:4 +msgid "Enable" +msgstr "Freigeben" + +#: ../gtk/parameters.ui.h:58 ../gtk/tunnel_config.ui.h:5 +msgid "Disable" +msgstr "Sperren" + +#: ../gtk/parameters.ui.h:59 +msgid "Codecs" +msgstr "Codecs" + +#: ../gtk/parameters.ui.h:60 +msgid "0 stands for \"unlimited\"" +msgstr "0 bedeutet „unbegrenzt“" + +#: ../gtk/parameters.ui.h:61 msgid "Upload speed limit in Kbit/sec:" msgstr "Upload-Bandbreite (kbit/sec):" -#: ../gtk/parameters.ui.h:57 -msgid "Use IPv6 instead of IPv4" -msgstr "IPv6 statt IPv4 verwenden" +#: ../gtk/parameters.ui.h:62 +msgid "Download speed limit in Kbit/sec:" +msgstr "Download-Bandbreite (kbit/sec):" -#: ../gtk/parameters.ui.h:58 +#: ../gtk/parameters.ui.h:63 +msgid "Enable adaptive rate control" +msgstr "Adaptive Ratenregelung ein" + +#: ../gtk/parameters.ui.h:64 +msgid "" +"Adaptive rate control is a technique to dynamically guess the available " +"bandwidth during a call." +msgstr "" +"Adaptive Ratenregelung ist eine Technik zur dynamischen Abschätzung der " +"zur Verfügung stehenden Bandbreite während eines Anrufs." + +#: ../gtk/parameters.ui.h:65 +msgid "Bandwidth control" +msgstr "Bandbreiten-Einstellungen" + +#: ../gtk/parameters.ui.h:66 +msgid "Codecs" +msgstr "Codecs" + +#: ../gtk/parameters.ui.h:67 +msgid "Language" +msgstr "Sprache" + +#: ../gtk/parameters.ui.h:68 +msgid "Show advanced settings" +msgstr "Fortgeschrittene Einstellungen anzeigen" + +#: ../gtk/parameters.ui.h:69 +msgid "Level" +msgstr "Detaillierung" + +#: ../gtk/parameters.ui.h:70 msgid "User interface" msgstr "Benutzeroberfläche" -#: ../gtk/parameters.ui.h:59 -msgid "Video RTP/UDP:" -msgstr "" - -#: ../gtk/parameters.ui.h:60 -msgid "Video codecs" -msgstr "Video-Codecs" - -#: ../gtk/parameters.ui.h:61 -msgid "Video input device:" -msgstr "Video-Aufnahmegerät:" - -#: ../gtk/parameters.ui.h:62 -msgid "Wizard" -msgstr "Assistent" - -#: ../gtk/parameters.ui.h:63 -msgid "Your display name (eg: John Doe):" -msgstr "Ihr angezeigter Name (z. B. Heinz Müller):" - -#: ../gtk/parameters.ui.h:64 -msgid "Your resulting SIP address:" -msgstr "Sich ergebende SIP-Adresse:" - -#: ../gtk/parameters.ui.h:65 -msgid "Your username:" -msgstr "Ihr Benutzername:" - -#: ../gtk/parameters.ui.h:66 -msgid "a sound card" -msgstr "eine Soundkarte" - -#: ../gtk/parameters.ui.h:67 -msgid "default camera" -msgstr "Standard-Kamera" - -#: ../gtk/parameters.ui.h:68 -msgid "default soundcard" -msgstr "Standard-Soundkarte" - -#: ../gtk/parameters.ui.h:69 -msgid "edit" -msgstr "Bearbeiten" +#: ../gtk/parameters.ui.h:71 +msgid "Done" +msgstr "Fertig" #: ../gtk/buddylookup.ui.h:1 -msgid "Search somebody" -msgstr "Kontaktsuche" +msgid "Search contacts in directory" +msgstr "Kontakte im Verzeichnis suchen" #: ../gtk/buddylookup.ui.h:2 msgid "Add to my list" msgstr "Zur Kontaktliste hinzufügen" #: ../gtk/buddylookup.ui.h:3 -msgid "Search contacts in directory" -msgstr "Kontakte im Verzeichnis suchen" +msgid "Search somebody" +msgstr "Kontaktsuche" #: ../gtk/waiting.ui.h:1 msgid "Linphone" @@ -1258,19 +1338,87 @@ msgstr "Linphone" msgid "Please wait" msgstr "Bitte warten" -#: ../coreapi/linphonecore.c:187 +#: ../gtk/dscp_settings.ui.h:1 +msgid "Dscp settings" +msgstr "DSCP-Einstellungen" + +#: ../gtk/dscp_settings.ui.h:2 +msgid "SIP" +msgstr "SIP" + +#: ../gtk/dscp_settings.ui.h:3 +msgid "Audio RTP stream" +msgstr "Audio-RTP-Datenstrom" + +#: ../gtk/dscp_settings.ui.h:4 +msgid "Video RTP stream" +msgstr "Video-RTP-Datenstrom" + +#: ../gtk/dscp_settings.ui.h:5 +msgid "Set DSCP values (in hexadecimal)" +msgstr "DSCP-Werte setzen (hexadezimal)" + +#: ../gtk/call_statistics.ui.h:1 +msgid "Call statistics" +msgstr "Anrufstatistik" + +#: ../gtk/call_statistics.ui.h:2 +msgid "Audio codec" +msgstr "Audio-Codec" + +#: ../gtk/call_statistics.ui.h:3 +msgid "Video codec" +msgstr "Video-Codec" + +#: ../gtk/call_statistics.ui.h:4 +msgid "Audio IP bandwidth usage" +msgstr "Genutzte IP-Bandbreite Audio" + +#: ../gtk/call_statistics.ui.h:5 +msgid "Media connectivity" +msgstr "Medienanbindung" + +#: ../gtk/call_statistics.ui.h:6 +msgid "Video IP bandwidth usage" +msgstr "Genutzte IP-Bandbreite Video" + +#: ../gtk/call_statistics.ui.h:7 +msgid "Call statistics and information" +msgstr "Anrufstatistik und -informationen" + +#: ../gtk/tunnel_config.ui.h:1 +msgid "Configure VoIP tunnel" +msgstr "VoIP-Tunnel einrichten" + +#: ../gtk/tunnel_config.ui.h:2 +msgid "Host" +msgstr "Host" + +#: ../gtk/tunnel_config.ui.h:3 +msgid "Port" +msgstr "Port" + +#: ../gtk/tunnel_config.ui.h:6 +msgid "Configure tunnel" +msgstr "Tunnel einrichten" + +#: ../gtk/tunnel_config.ui.h:9 +msgid "Configure http proxy (optional)" +msgstr "HTTP-Proxy einrichten (optional)" + +#: ../coreapi/linphonecore.c:232 msgid "aborted" msgstr "abgebrochen" -#: ../coreapi/linphonecore.c:190 +#: ../coreapi/linphonecore.c:235 msgid "completed" msgstr "beendet" -#: ../coreapi/linphonecore.c:193 +#: ../coreapi/linphonecore.c:238 msgid "missed" msgstr "entgangen" -#: ../coreapi/linphonecore.c:198 +#: ../coreapi/linphonecore.c:243 #, c-format msgid "" "%s at %s\n" @@ -1285,23 +1433,23 @@ msgstr "" "Status: %s\n" "Dauer: %i min %i sec\n" -#: ../coreapi/linphonecore.c:199 +#: ../coreapi/linphonecore.c:244 msgid "Outgoing call" msgstr "Abgehender Anruf" -#: ../coreapi/linphonecore.c:1109 +#: ../coreapi/linphonecore.c:1221 msgid "Ready" msgstr "Bereit" -#: ../coreapi/linphonecore.c:1852 +#: ../coreapi/linphonecore.c:2068 msgid "Looking for telephone number destination..." msgstr "Telefonnummernziel wird gesucht..." -#: ../coreapi/linphonecore.c:1855 +#: ../coreapi/linphonecore.c:2071 msgid "Could not resolve this number." msgstr "Diese Nummer kann nicht aufgelöst werden." -#: ../coreapi/linphonecore.c:1899 +#: ../coreapi/linphonecore.c:2115 msgid "" "Could not parse given sip address. A sip url usually looks like sip:" "user@domain" @@ -1309,39 +1457,51 @@ msgstr "" "SIP-Adresse kann nicht eingelesen werden. Eine SIP-Adresse hat folgenden " "Aufbau " -#: ../coreapi/linphonecore.c:2057 +#: ../coreapi/linphonecore.c:2306 msgid "Contacting" msgstr "Verbindungsaufbau" -#: ../coreapi/linphonecore.c:2064 +#: ../coreapi/linphonecore.c:2313 msgid "Could not call" msgstr "Anruf kann nicht getätigt werden." -#: ../coreapi/linphonecore.c:2174 +#: ../coreapi/linphonecore.c:2423 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Die maximale Anzahl der gleichzeitigen Anrufe ist erreicht." -#: ../coreapi/linphonecore.c:2306 +#: ../coreapi/linphonecore.c:2567 +msgid "is contacting you" +msgstr "ruft Sie an" + +#: ../coreapi/linphonecore.c:2568 +msgid " and asked autoanswer." +msgstr " und fragt nach automatischer Antwort." + +#: ../coreapi/linphonecore.c:2568 +msgid "." +msgstr "" + +#: ../coreapi/linphonecore.c:2630 msgid "Modifying call parameters..." msgstr "Die Anrufparameter werden verändert..." -#: ../coreapi/linphonecore.c:2488 +#: ../coreapi/linphonecore.c:2899 msgid "Connected." msgstr "Verbunden." -#: ../coreapi/linphonecore.c:2511 +#: ../coreapi/linphonecore.c:2922 msgid "Call aborted" msgstr "Anruf abgebrochen" -#: ../coreapi/linphonecore.c:2652 +#: ../coreapi/linphonecore.c:3093 msgid "Could not pause the call" msgstr "Anruf kann nicht gehalten werden" -#: ../coreapi/linphonecore.c:2657 +#: ../coreapi/linphonecore.c:3098 msgid "Pausing the current call..." msgstr "Aktueller Anruf wird gehalten..." -#: ../coreapi/misc.c:147 +#: ../coreapi/misc.c:148 msgid "" "Your computer appears to be using ALSA sound drivers.\n" "This is the best choice. However the pcm oss emulation module\n" @@ -1353,7 +1513,7 @@ msgstr "" "zur PCM-OSS-Emulation nicht vorhanden. Bitte führen Sie als\n" "Systemverwalter den Befehl „modprobe snd-pcm-oss“ aus, um es zu laden." -#: ../coreapi/misc.c:150 +#: ../coreapi/misc.c:151 msgid "" "Your computer appears to be using ALSA sound drivers.\n" "This is the best choice. However the mixer oss emulation module\n" @@ -1365,10 +1525,14 @@ msgstr "" "zur Mixer-OSS-Emulation nicht vorhanden. Bitte führen Sie als\n" "Systemverwalter den Befehl „modprobe snd-mixer-oss“ aus, um es zu laden." -#: ../coreapi/misc.c:479 +#: ../coreapi/misc.c:496 msgid "Stun lookup in progress..." msgstr "STUN-Ermittlung läuft..." +#: ../coreapi/misc.c:620 +msgid "ICE local candidates gathering in progress..." +msgstr "Lokale Kandidaten für ICE werden zusammengestellt..." + #: ../coreapi/friend.c:33 msgid "Online" msgstr "Angemeldet" @@ -1417,7 +1581,7 @@ msgstr "Ausstehend" msgid "Unknown-bug" msgstr "Unbekannter Fehler" -#: ../coreapi/proxy.c:196 +#: ../coreapi/proxy.c:204 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." @@ -1425,7 +1589,7 @@ msgstr "" "Die von Ihnen eingegebene SIP-Proxy-Adresse ist ungültig, sie muss mit " "„sip:“ gefolgt vom Hostnamen beginnen." -#: ../coreapi/proxy.c:202 +#: ../coreapi/proxy.c:210 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" @@ -1434,146 +1598,142 @@ msgstr "" "Sie sollte wie sip:benutzername@proxydomain aussehen, also z.B. sip:" "alice@beispiel.net" -#: ../coreapi/proxy.c:704 +#: ../coreapi/proxy.c:808 #, c-format msgid "Could not login as %s" msgstr "Anmeldung als %s fehlgeschlagen" -#: ../coreapi/callbacks.c:206 -msgid "is contacting you" -msgstr "ruft Sie an" - -#: ../coreapi/callbacks.c:207 -msgid " and asked autoanswer." -msgstr " und fragt nach automatischer Antwort." - -#: ../coreapi/callbacks.c:207 -msgid "." -msgstr "" - -#: ../coreapi/callbacks.c:266 +#: ../coreapi/callbacks.c:267 msgid "Remote ringing." msgstr "Klingeln bei der Gegenseite." -#: ../coreapi/callbacks.c:282 +#: ../coreapi/callbacks.c:287 msgid "Remote ringing..." msgstr "Klingeln bei der Gegenseite..." -#: ../coreapi/callbacks.c:293 +#: ../coreapi/callbacks.c:298 msgid "Early media." msgstr "" -#: ../coreapi/callbacks.c:331 +#: ../coreapi/callbacks.c:343 #, c-format msgid "Call with %s is paused." msgstr "Anruf mit %s wird gehalten." -#: ../coreapi/callbacks.c:342 +#: ../coreapi/callbacks.c:356 #, c-format msgid "Call answered by %s - on hold." msgstr "Der von %s entgegengenommene Anruf wird gehalten." -#: ../coreapi/callbacks.c:357 +#: ../coreapi/callbacks.c:367 msgid "Call resumed." msgstr "Anruf fortgesetzt." -#: ../coreapi/callbacks.c:362 +#: ../coreapi/callbacks.c:372 #, c-format msgid "Call answered by %s." msgstr "Anruf wird von %s entgegengenommen." -#: ../coreapi/callbacks.c:377 +#: ../coreapi/callbacks.c:387 msgid "Incompatible, check codecs..." msgstr "Inkompatibel, überprüfen Sie die Codecs..." -#: ../coreapi/callbacks.c:418 +#: ../coreapi/callbacks.c:428 msgid "We have been resumed." msgstr "Anruf wird fortgesetzt." -#: ../coreapi/callbacks.c:426 +#: ../coreapi/callbacks.c:437 msgid "We are paused by other party." msgstr "Anruf wird von der Gegenseite gehalten." -#: ../coreapi/callbacks.c:432 +#: ../coreapi/callbacks.c:443 msgid "Call is updated by remote." msgstr "Anruf ist von der Gegenseite aktualisiert worden." -#: ../coreapi/callbacks.c:485 +#: ../coreapi/callbacks.c:512 msgid "Call terminated." msgstr "Anruf beendet." -#: ../coreapi/callbacks.c:492 +#: ../coreapi/callbacks.c:519 msgid "User is busy." msgstr "Teilnehmer ist besetzt." -#: ../coreapi/callbacks.c:493 +#: ../coreapi/callbacks.c:520 msgid "User is temporarily unavailable." msgstr "Teilnehmer zur Zeit nicht verfügbar." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:495 +#: ../coreapi/callbacks.c:522 msgid "User does not want to be disturbed." msgstr "Teilnehmer möchte nicht gestört werden." -#: ../coreapi/callbacks.c:496 +#: ../coreapi/callbacks.c:523 msgid "Call declined." msgstr "Anruf abgewiesen" -#: ../coreapi/callbacks.c:508 +#: ../coreapi/callbacks.c:535 msgid "No response." msgstr "Keine Antwort." -#: ../coreapi/callbacks.c:512 +#: ../coreapi/callbacks.c:539 msgid "Protocol error." msgstr "Protokollfehler" -#: ../coreapi/callbacks.c:528 +#: ../coreapi/callbacks.c:555 msgid "Redirected" msgstr "Umgeleitet" -#: ../coreapi/callbacks.c:562 -msgid "No common codecs" -msgstr "Keine gemeinsamen Codecs" +#: ../coreapi/callbacks.c:591 +msgid "Incompatible media parameters." +msgstr "Inkompatible Medienparameter." -#: ../coreapi/callbacks.c:568 +#: ../coreapi/callbacks.c:597 msgid "Call failed." msgstr "Anruf fehlgeschlagen." -#: ../coreapi/callbacks.c:649 +#: ../coreapi/callbacks.c:692 #, c-format msgid "Registration on %s successful." msgstr "Registrierung auf %s erfolgreich." -#: ../coreapi/callbacks.c:650 +#: ../coreapi/callbacks.c:693 #, c-format msgid "Unregistration on %s done." msgstr "Abmeldung von %s ist erfolgt." -#: ../coreapi/callbacks.c:670 +#: ../coreapi/callbacks.c:713 msgid "no response timeout" msgstr "Zeitüberschreitung bei der Antwort" -#: ../coreapi/callbacks.c:673 +#: ../coreapi/callbacks.c:716 #, c-format msgid "Registration on %s failed: %s" msgstr "Registrierung auf %s fehlgeschlagen: %s" -#: ../coreapi/sal_eXosip2.c:888 ../coreapi/sal_eXosip2.c:890 -msgid "Authentication failure" -msgstr "Authentifikation fehlgeschlagen" - -#: ../coreapi/linphonecall.c:128 +#: ../coreapi/linphonecall.c:129 #, c-format msgid "Authentication token is %s" msgstr "Authentifizierungs-Token ist %s" -#: ../coreapi/linphonecall.c:1615 +#: ../coreapi/linphonecall.c:2055 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." msgstr[0] "Sie haben %i Anruf in Abwesenheit." msgstr[1] "Sie haben %i Anrufe in Abwesenheit." +#~ msgid "Enable video" +#~ msgstr "Video ein" + +#~ msgid "edit" +#~ msgstr "Bearbeiten" + +#~ msgid "No common codecs" +#~ msgstr "Keine gemeinsamen Codecs" + +#~ msgid "Authentication failure" +#~ msgstr "Authentifikation fehlgeschlagen" + #~ msgid "We are being paused..." #~ msgstr "Anruf wird gehalten..." @@ -1615,9 +1775,6 @@ msgstr[1] "Sie haben %i Anrufe in Abwesenheit." #~ msgid "Call" #~ msgstr "Anrufen" -#~ msgid "Not found" -#~ msgstr "Nicht gefunden" - #~ msgid "Register at startup" #~ msgstr "Beim Starten registrieren" @@ -1703,9 +1860,6 @@ msgstr[1] "Sie haben %i Anrufe in Abwesenheit." #~ msgid "A filter that send several inputs to one output." #~ msgstr "Ein Filter, der mehrere Eingaben an eine Ausgabe sendet." -#~ msgid "Audio resampler" -#~ msgstr "Audio-Resampler" - #~ msgid "RTP output filter" #~ msgstr "RTP-Ausgabefilter" @@ -1829,9 +1983,6 @@ msgstr[1] "Sie haben %i Anrufe in Abwesenheit." #~ "Ein auf Video für Windows (vfw.h) basierender Quellfilter, um Bilder " #~ "aufzuzeichnen." -#~ msgid "ICE filter" -#~ msgstr "ICE-Filter" - #~ msgid "" #~ "A filter that trashes its input (useful for terminating some graphs)." #~ msgstr "Ein Filter, der seine Eingabe vernichtet" @@ -1890,10 +2041,6 @@ msgstr[1] "Sie haben %i Anrufe in Abwesenheit." #~ msgid "Incoming call from %s" #~ msgstr "Eingehendes Gespr�h" -#, fuzzy -#~ msgid "Call Details" -#~ msgstr "Gesprächsverlauf" - #, fuzzy #~ msgid "_Modes" #~ msgstr "Codecs" @@ -2179,9 +2326,6 @@ msgstr[1] "Sie haben %i Anrufe in Abwesenheit." #~ "Alle gespeicherten Authentifikationsinformationen löschen (Benutzername, " #~ "Passwort,...)" -#~ msgid "SIP" -#~ msgstr "SIP" - #~ msgid "List of audio codecs, in order of preference:" #~ msgstr "Liste von Audio-CoDecs in der Reihenfolge ihrer Präferenz" diff --git a/po/he.po b/po/he.po new file mode 100644 index 000000000..77307f3db --- /dev/null +++ b/po/he.po @@ -0,0 +1,1722 @@ +# Hebrew translations for linphone +# Copyright (C) Belledonne Communications,2010 +# This file is distributed under the same license as the linphone package. +# Eli Zaretskii , 2012. +# Isratine Citizen , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: Linphone 3.5.2\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-09-26 18:38+0200\n" +"PO-Revision-Date: 2012-12-27 10:14+0200\n" +"Last-Translator: Isratine Citizen \n" +"Language-Team: Rahut \n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.5.4\n" + +#: ../gtk/calllogs.c:71 +#, c-format +msgid "%i minute" +msgid_plural "%i minutes" +msgstr[0] "דקה %i" +msgstr[1] "%i דקות" + +#: ../gtk/calllogs.c:74 +#, c-format +msgid "%i second" +msgid_plural "%i seconds" +msgstr[0] "שניה %i" +msgstr[1] "%i שניות" + +#: ../gtk/calllogs.c:77 +#, c-format +msgid "" +"%s\t%s\tQuality: %s\n" +"%s\t%s %s\t" +msgstr "" +"%s\t%s\tאיכות: %s\n" +"%s\t%s %s\t" + +#: ../gtk/calllogs.c:79 +msgid "n/a" +msgstr "לא זמין (n/a)" + +#: ../gtk/conference.c:33 ../gtk/incall_view.c:185 +msgid "Conference" +msgstr "ועידה" + +#: ../gtk/conference.c:41 +msgid "Me" +msgstr "אני" + +#: ../gtk/support.c:49 ../gtk/support.c:73 ../gtk/support.c:102 +#, c-format +msgid "Couldn't find pixmap file: %s" +msgstr "לא ניתן למצוא קובץ ‫pixmap: ‫%s" + +# שוחחו +#: ../gtk/chat.c:27 +#, c-format +msgid "Chat with %s" +msgstr "שיחה עם %s" + +# cli +#: ../gtk/main.c:84 +#, fuzzy +msgid "log to stdout some debug information while running." +msgstr "רשום אל stdout מידע ניפוי שגיאות מסוים בזמן ביצוע." + +# cli +#: ../gtk/main.c:91 +#, fuzzy +msgid "path to a file to write logs into." +msgstr "נתיב אל קובץ שברצונך לרשום אליו את הרשומות." + +# cli +#: ../gtk/main.c:98 +#, fuzzy +msgid "Start only in the system tray, do not show the main interface." +msgstr "התחל במגש המערכת בלבד, אל תציג את הממשק הראשי." + +# cli +#: ../gtk/main.c:105 +#, fuzzy +msgid "address to call right now" +msgstr "כתובת להתקשרות ברגע זה" + +# cli +#: ../gtk/main.c:112 +#, fuzzy +msgid "if set automatically answer incoming calls" +msgstr "באם אפשרות זו נקבעת ענה אוטומטית לקריאות נכנסות" + +# cli +#: ../gtk/main.c:119 +#, fuzzy +msgid "" +"Specifiy a working directory (should be the base of the installation, eg: c:" +"\\Program Files\\Linphone)" +msgstr "" +"ציין מדור העבודה (אמור להיות מבוסס על ההתקנה, למשל: c:\\Program Files" +"\\Linphone)" + +#: ../gtk/main.c:465 +#, c-format +msgid "Call with %s" +msgstr "התקשרות באמצעות %s" + +# הקשר שלהם +# אם התשובה +#: ../gtk/main.c:820 +#, c-format +msgid "" +"%s would like to add you to his contact list.\n" +"Would you allow him to see your presence status or add him to your contact " +"list ?\n" +"If you answer no, this person will be temporarily blacklisted." +msgstr "" +"‫%s מעוניין להוסיפך אל רשימת אנשי הקשר שלו.\n" +"האם ברצונך להרשות להם לראות את מצב נוכחותך או להוסיפם אל רשימת אנשי הקשר " +"שלך ?\n" +"היה ותשובתך תהיה לא, אדם זה יהיה מסומן באופן זמני ברשימה השחורה." + +#: ../gtk/main.c:898 +#, c-format +msgid "" +"Please enter your password for username %s\n" +" at domain %s:" +msgstr "" +"נא להזין את סיסמתך עבור שם משתמש %s\n" +" בתחום %s:" + +# שיחה +#: ../gtk/main.c:998 +msgid "Call error" +msgstr "שגיאת קריאה" + +# Conversation ended +#: ../gtk/main.c:1001 ../coreapi/linphonecore.c:2433 +msgid "Call ended" +msgstr "שיחה הסתיימה" + +#: ../gtk/main.c:1004 ../coreapi/linphonecore.c:199 +msgid "Incoming call" +msgstr "קריאה נכנסת" + +#: ../gtk/main.c:1006 ../gtk/incall_view.c:294 ../gtk/main.ui.h:21 +msgid "Answer" +msgstr "לענות" + +# דחיה +#: ../gtk/main.c:1008 ../gtk/main.ui.h:29 +msgid "Decline" +msgstr "לדחות" + +# Conversation paused +#: ../gtk/main.c:1014 +msgid "Call paused" +msgstr "שיחה הושהתה" + +#: ../gtk/main.c:1014 +#, c-format +msgid "by %s" +msgstr "מאת %s" + +#: ../gtk/main.c:1170 +msgid "Website link" +msgstr "קישור אתר רשת" + +# ‫Linphone - וידאופון במרשתת +#: ../gtk/main.c:1210 +msgid "Linphone - a video internet phone" +msgstr "‫Linphone - וידאופון אינטרנטי" + +#: ../gtk/main.c:1302 +#, c-format +msgid "%s (Default)" +msgstr "‫%s (משתמטת)" + +#: ../gtk/main.c:1580 ../coreapi/callbacks.c:702 +#, c-format +msgid "We are transferred to %s" +msgstr "אנחנו מועברים אל %s" + +# קריאות שמע +#: ../gtk/main.c:1590 +msgid "" +"No sound cards have been detected on this computer.\n" +"You won't be able to send or receive audio calls." +msgstr "" +"לא אותרו כרטיסי קול במחשב זה.\n" +"לא תהיה ביכולתך לשלוח או לקבל שיחות שמע." + +#: ../gtk/main.c:1691 +msgid "A free SIP video-phone" +msgstr "וידאופון SIP חופשי" + +#: ../gtk/friendlist.c:203 +msgid "Add to addressbook" +msgstr "הוסף אל ספר כתובות" + +#: ../gtk/friendlist.c:377 ../gtk/propertybox.c:297 ../gtk/contact.ui.h:3 +msgid "Name" +msgstr "שם" + +#: ../gtk/friendlist.c:393 +msgid "Presence status" +msgstr "מצב נוכחות" + +# a name or a number +#: ../gtk/friendlist.c:432 +#, c-format +msgid "Search in %s directory" +msgstr "חיפוש במדור %s" + +# איש־קשר +#: ../gtk/friendlist.c:646 +msgid "Invalid sip contact !" +msgstr "כתובת sip לא תקפה !" + +# צור קשר עם +#: ../gtk/friendlist.c:691 +#, c-format +msgid "Call %s" +msgstr "התקשר אל %s" + +#: ../gtk/friendlist.c:692 +#, c-format +msgid "Send text to %s" +msgstr "שלח טקסט אל %s" + +#: ../gtk/friendlist.c:693 +#, c-format +msgid "Edit contact '%s'" +msgstr "ערוך איש קשר '%s'" + +#: ../gtk/friendlist.c:694 +#, c-format +msgid "Delete contact '%s'" +msgstr "מחק איש קשר '%s'" + +#: ../gtk/friendlist.c:736 +#, c-format +msgid "Add new contact from %s directory" +msgstr "הוסף איש קשר חדש מן מדור %s" + +# קצב תדר תדירות מהירות +#: ../gtk/propertybox.c:303 +msgid "Rate (Hz)" +msgstr "שיעור (הרץ)" + +#: ../gtk/propertybox.c:309 +msgid "Status" +msgstr "מצב" + +# שיעור סיביות מינימלי +#: ../gtk/propertybox.c:315 +msgid "Min bitrate (kbit/s)" +msgstr "קצב נתונים מינימלי (קי״ב/שנ׳)" + +#: ../gtk/propertybox.c:322 +msgid "Parameters" +msgstr "פרמטרים" + +#: ../gtk/propertybox.c:365 ../gtk/propertybox.c:508 +msgid "Enabled" +msgstr "מופעל" + +#: ../gtk/propertybox.c:367 ../gtk/propertybox.c:508 +msgid "Disabled" +msgstr "לא מופעל" + +#: ../gtk/propertybox.c:554 +msgid "Account" +msgstr "חשבון" + +#: ../gtk/propertybox.c:694 +msgid "English" +msgstr "English" + +#: ../gtk/propertybox.c:695 +msgid "French" +msgstr "Français" + +#: ../gtk/propertybox.c:696 +msgid "Swedish" +msgstr "Svenska" + +#: ../gtk/propertybox.c:697 +msgid "Italian" +msgstr "Italiano" + +#: ../gtk/propertybox.c:698 +msgid "Spanish" +msgstr "Español" + +# português do Brasil +#: ../gtk/propertybox.c:699 +msgid "Brazilian Portugese" +msgstr "português brasileiro" + +#: ../gtk/propertybox.c:700 +msgid "Polish" +msgstr "Polski" + +#: ../gtk/propertybox.c:701 +msgid "German" +msgstr "Deutsch" + +#: ../gtk/propertybox.c:702 +msgid "Russian" +msgstr "Русский" + +#: ../gtk/propertybox.c:703 +msgid "Japanese" +msgstr "日本語" + +#: ../gtk/propertybox.c:704 +msgid "Dutch" +msgstr "Nederlands" + +#: ../gtk/propertybox.c:705 +msgid "Hungarian" +msgstr "Magyar" + +#: ../gtk/propertybox.c:706 +msgid "Czech" +msgstr "Česky" + +#: ../gtk/propertybox.c:707 +msgid "Chinese" +msgstr "中文" + +# 繁体字 +#: ../gtk/propertybox.c:708 +msgid "Traditional Chinese" +msgstr "繁體字" + +#: ../gtk/propertybox.c:709 +msgid "Norwegian" +msgstr "norsk" + +# selected הנבחרת +#: ../gtk/propertybox.c:766 +msgid "" +"You need to restart linphone for the new language selection to take effect." +msgstr "עליך לאתחל את לינפון כדי שהשפה החדשה תיכנס לתוקף." + +#: ../gtk/propertybox.c:836 +msgid "None" +msgstr "ללא" + +#: ../gtk/propertybox.c:840 +msgid "SRTP" +msgstr "" + +#: ../gtk/propertybox.c:846 +msgid "ZRTP" +msgstr "" + +#: ../gtk/update.c:80 +#, c-format +msgid "" +"A more recent version is availalble from %s.\n" +"Would you like to open a browser to download it ?" +msgstr "" +"גרסא מאוחרת יותר זמינה מן %s.\n" +"האם ברצונך לפתוח דפדפן בכדי להורידה ?" + +# בידך +#: ../gtk/update.c:91 +msgid "You are running the lastest version." +msgstr "ברשותך הגרסא האחרונה של לינפון." + +#: ../gtk/buddylookup.c:85 +msgid "Firstname, Lastname" +msgstr "שם פרטי , שם משפחה" + +#: ../gtk/buddylookup.c:160 +msgid "Error communicating with server." +msgstr "שגיאה בהתקשרות עם שרת." + +#: ../gtk/buddylookup.c:164 +msgid "Connecting..." +msgstr "מתחבר כעת..." + +#: ../gtk/buddylookup.c:168 +msgid "Connected" +msgstr "מקושר" + +#: ../gtk/buddylookup.c:172 +msgid "Receiving data..." +msgstr "מאחזר כעת מידע..." + +#: ../gtk/buddylookup.c:180 +#, c-format +msgid "Found %i contact" +msgid_plural "Found %i contacts" +msgstr[0] "נמצא איש קשר %i" +msgstr[1] "נמצאו %i אנשי קשר" + +#: ../gtk/setupwizard.c:33 +msgid "" +"Welcome !\n" +"This assistant will help you to use a SIP account for your calls." +msgstr "" +"ברוך בואך !\n" +"אשף זה יסייע לך לעשות שימוש בחשבון SIP עבור שיחותייך." + +#: ../gtk/setupwizard.c:42 +msgid "Create an account on linphone.org" +msgstr "צור חשבון אצל linphone.org" + +#: ../gtk/setupwizard.c:43 +msgid "I have already a linphone.org account and I just want to use it" +msgstr "כבר קיים חשבון linphone.org ברשותי וברצוני לעשות בו שימוש" + +# כבר קיים ברשותי חשבון sip +#: ../gtk/setupwizard.c:44 +msgid "I have already a sip account and I just want to use it" +msgstr "כבר קיים חשבון sip ברשותי וברצוני לעשות בו שימוש" + +#: ../gtk/setupwizard.c:84 +msgid "Enter your linphone.org username" +msgstr "הזן את שם משתמשך אצל linphone.org" + +#: ../gtk/setupwizard.c:91 +msgid "Username:" +msgstr "שם משתמש:" + +#: ../gtk/setupwizard.c:93 ../gtk/password.ui.h:2 +msgid "Password:" +msgstr "סיסמה:" + +#: ../gtk/setupwizard.c:113 +msgid "Enter your account informations" +msgstr "הזן את מידע חשבונך" + +#: ../gtk/setupwizard.c:120 +msgid "Username*" +msgstr "שם משתמש*" + +#: ../gtk/setupwizard.c:121 +msgid "Password*" +msgstr "סיסמה*" + +#: ../gtk/setupwizard.c:124 +msgid "Domain*" +msgstr "מתחם*" + +#: ../gtk/setupwizard.c:125 +msgid "Proxy" +msgstr "פרוקסי" + +# נדרשים +#: ../gtk/setupwizard.c:293 +msgid "(*) Required fields" +msgstr "(*) שדות חובה" + +#: ../gtk/setupwizard.c:294 +msgid "Username: (*)" +msgstr "שם משתמש: (*)" + +#: ../gtk/setupwizard.c:296 +msgid "Password: (*)" +msgstr "סיסמה: (*)" + +#: ../gtk/setupwizard.c:298 +msgid "Email: (*)" +msgstr "דוא״ל: (*)" + +#: ../gtk/setupwizard.c:300 +msgid "Confirm your password: (*)" +msgstr "אימות סיסמתך: (*)" + +# אינו בר־השגה +# לשוב אחורה +#: ../gtk/setupwizard.c:364 +msgid "" +"Error, account not validated, username already used or server unreachable.\n" +"Please go back and try again." +msgstr "" +"שגיאה, חשבון לא אומת, שם משתמש כבר בשימוש או שרת לא ניתן להשגה.\n" +"נא לחזור ולנסות שוב." + +# תודה רבה +#: ../gtk/setupwizard.c:375 +msgid "Thank you. Your account is now configured and ready for use." +msgstr "תודה לך. חשבונך מוגדר ומוכן לשימוש כעת." + +# לאחר מכן +#: ../gtk/setupwizard.c:383 +msgid "" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" +"Then come back here and press Next button." +msgstr "" +"נא לאמת את חשבונך באמצעות הקלקה על הקישור ששלחנו לך עתה באמצעות דוא״ל.\n" +"אחרי כן נא לחזור לכאן וללחוץ על הלחצן 'קדימה'." + +# Wizard אשף +# סייע +#: ../gtk/setupwizard.c:553 +msgid "Welcome to the account setup assistant" +msgstr "ברוך בואך אל אשף הגדרת החשבון" + +#: ../gtk/setupwizard.c:558 +msgid "Account setup assistant" +msgstr "אשף הגדרת חשבון" + +# שלב +#: ../gtk/setupwizard.c:564 +msgid "Configure your account (step 1/1)" +msgstr "הגדרת חשבונך (צעד 1/1)" + +#: ../gtk/setupwizard.c:569 +msgid "Enter your sip username (step 1/1)" +msgstr "הזנת שם משתמש sip (צעד 1/1)" + +#: ../gtk/setupwizard.c:573 +msgid "Enter account information (step 1/2)" +msgstr "הזנת מידע חשבון (צעד 1/2)" + +# תקפות +#: ../gtk/setupwizard.c:582 +msgid "Validation (step 2/2)" +msgstr "אימות (צעד 2/2)" + +#: ../gtk/setupwizard.c:587 +msgid "Error" +msgstr "שגיאה" + +#: ../gtk/setupwizard.c:591 +msgid "Terminating" +msgstr "מסיים כעת" + +#: ../gtk/incall_view.c:69 +#, c-format +msgid "Call #%i" +msgstr "שיחה מס׳ %i" + +#: ../gtk/incall_view.c:129 +#, c-format +msgid "Transfer to call #%i with %s" +msgstr "העברה אל שיחה מס׳ %i עם %s" + +#: ../gtk/incall_view.c:157 +msgid "Transfer" +msgstr "העברה" + +#: ../gtk/incall_view.c:273 +msgid "Calling..." +msgstr "מתקשר כעת..." + +#: ../gtk/incall_view.c:276 ../gtk/incall_view.c:484 +msgid "00::00::00" +msgstr "‭00::00::00" + +#: ../gtk/incall_view.c:287 +msgid "Incoming call" +msgstr "קריאה נכנסת" + +#: ../gtk/incall_view.c:324 +msgid "good" +msgstr "טובה" + +# רגילה +#: ../gtk/incall_view.c:326 +msgid "average" +msgstr "ממוצעת" + +# weak חלשה חלושה רפויה רופפת +#: ../gtk/incall_view.c:328 +msgid "poor" +msgstr "דלה" + +#: ../gtk/incall_view.c:330 +msgid "very poor" +msgstr "דלה מאוד" + +# רעה +#: ../gtk/incall_view.c:332 +msgid "too bad" +msgstr "גרועה מדי" + +#: ../gtk/incall_view.c:333 ../gtk/incall_view.c:349 +msgid "unavailable" +msgstr "לא זמינה" + +# באמצעות +#: ../gtk/incall_view.c:449 +msgid "Secured by SRTP" +msgstr "מאובטחת על ידי SRTP" + +#: ../gtk/incall_view.c:455 +#, c-format +msgid "Secured by ZRTP - [auth token: %s]" +msgstr "מאובטחת על ידי ZRTP - [אות אימות: %s]" + +# set or unset verification state of ZRTP SAS. +#: ../gtk/incall_view.c:461 +msgid "Set unverified" +msgstr "הגדר כלא מאומתת" + +#: ../gtk/incall_view.c:461 ../gtk/main.ui.h:49 +msgid "Set verified" +msgstr "הגדר כמאומתת" + +#: ../gtk/incall_view.c:482 +msgid "In conference" +msgstr "בשיחת ועידה" + +#: ../gtk/incall_view.c:482 +msgid "In call" +msgstr "בשיחה כעת" + +#: ../gtk/incall_view.c:501 +msgid "Paused call" +msgstr "שיחה מושהית" + +# שעות %02i דקות %02i שניות %02i +# Force LTR time format (hours::minutes::seconds) with LRO chatacter (U+202D) +#: ../gtk/incall_view.c:513 +#, c-format +msgid "%02i::%02i::%02i" +msgstr "‭%02i::%02i::%02i" + +#: ../gtk/incall_view.c:529 +msgid "Call ended." +msgstr "שיחה הסתיימה." + +#: ../gtk/incall_view.c:586 +msgid "Resume" +msgstr "חזרה" + +#: ../gtk/incall_view.c:593 ../gtk/main.ui.h:45 +msgid "Pause" +msgstr "השהיה" + +#: ../gtk/loginframe.c:93 +#, c-format +msgid "Please enter login information for %s" +msgstr "נא להזין מידע התחברות עבור %s" + +#: ../gtk/main.ui.h:1 +msgid "#" +msgstr "" + +#: ../gtk/main.ui.h:2 +msgid "*" +msgstr "" + +#: ../gtk/main.ui.h:3 +msgid "0" +msgstr "" + +#: ../gtk/main.ui.h:4 +msgid "1" +msgstr "" + +#: ../gtk/main.ui.h:5 +msgid "2" +msgstr "2 (דהו)" + +#: ../gtk/main.ui.h:6 +msgid "3" +msgstr "3 (אבג)" + +#: ../gtk/main.ui.h:7 +msgid "4" +msgstr "4 (מנ)" + +#: ../gtk/main.ui.h:8 +msgid "5" +msgstr "5 (יכל)" + +#: ../gtk/main.ui.h:9 +msgid "6" +msgstr "6 (זחט)" + +#: ../gtk/main.ui.h:10 +msgid "7" +msgstr "7 (רשת)" + +#: ../gtk/main.ui.h:11 +msgid "8" +msgstr "8 (צק)" + +#: ../gtk/main.ui.h:12 +msgid "9" +msgstr "9 (סעפ)" + +#: ../gtk/main.ui.h:13 +msgid "Add contacts from directory" +msgstr "הוסף אנשי קשר מן מדור" + +# מתקשר Caller +# זה ש: נתקשר או מתוקשר או הותקשר? +#: ../gtk/main.ui.h:14 +msgid "Callee name" +msgstr "שם המקבל" + +#: ../gtk/main.ui.h:15 +msgid "Welcome !" +msgstr "ברוך בואך !" + +#: ../gtk/main.ui.h:16 +msgid "A" +msgstr "" + +#: ../gtk/main.ui.h:17 +msgid "ADSL" +msgstr "‫ADSL" + +#: ../gtk/main.ui.h:18 +msgid "Account assistant" +msgstr "אשף חשבון" + +#: ../gtk/main.ui.h:19 +msgid "Add contact" +msgstr "הוספת איש קשר" + +#: ../gtk/main.ui.h:20 +msgid "All users" +msgstr "כל המשתמשים" + +#: ../gtk/main.ui.h:22 +msgid "Automatically log me in" +msgstr "חבר אותי אוטומטית" + +#: ../gtk/main.ui.h:23 +msgid "B" +msgstr "" + +#: ../gtk/main.ui.h:24 ../gtk/parameters.ui.h:21 +msgid "C" +msgstr "" + +#: ../gtk/main.ui.h:25 +msgid "Call quality rating" +msgstr "אומדן איכות שיחה" + +#: ../gtk/main.ui.h:26 +msgid "Check _Updates" +msgstr "בדיקת _עדכונים" + +#: ../gtk/main.ui.h:27 +msgid "Contacts" +msgstr "אנשי קשר" + +#: ../gtk/main.ui.h:28 +msgid "D" +msgstr "" + +# משתמט +#: ../gtk/main.ui.h:30 +msgid "Default" +msgstr "ברירת מחדל" + +#: ../gtk/main.ui.h:31 +msgid "Duration" +msgstr "משך זמן" + +#: ../gtk/main.ui.h:32 +msgid "Enable self-view" +msgstr "אפשר ראות-עצמית" + +#: ../gtk/main.ui.h:33 +msgid "Enable video" +msgstr "הפעל וידאו" + +# הזנת +#: ../gtk/main.ui.h:34 +msgid "Enter username, phone number, or full sip address" +msgstr "נא להזין שם משתמש, מספר טלפון, או כתובת sip מלאה" + +#: ../gtk/main.ui.h:35 +msgid "Fiber Channel" +msgstr "ערוץ סיב" + +#: ../gtk/main.ui.h:36 +msgid "In call" +msgstr "בשיחה כעת" + +#: ../gtk/main.ui.h:37 +msgid "Initiate a new call" +msgstr "התחלת שיחה חדשה" + +# מרשתת +#: ../gtk/main.ui.h:38 +msgid "Internet connection:" +msgstr "חיבור אינטרנט:" + +#: ../gtk/main.ui.h:39 +msgid "Keypad" +msgstr "לוח מקשים" + +#: ../gtk/main.ui.h:40 +msgid "Login information" +msgstr "מידע התחברות" + +# עיון +#: ../gtk/main.ui.h:41 +msgid "Lookup:" +msgstr "חיפוש:" + +# הזהות הנוכחית שלי +#: ../gtk/main.ui.h:42 +msgid "My current identity:" +msgstr "זהותי הנוכחית:" + +#: ../gtk/main.ui.h:43 +msgid "Online users" +msgstr "משתמשים מקוונים" + +#: ../gtk/main.ui.h:44 +msgid "Password" +msgstr "סיסמה" + +# קריאות אחרונות +#: ../gtk/main.ui.h:46 +msgid "Recent calls" +msgstr "שיחות אחרונות" + +#: ../gtk/main.ui.h:47 +msgid "SIP address or phone number:" +msgstr "כתובת SIP או מספר טלפון" + +#: ../gtk/main.ui.h:48 +msgid "Search" +msgstr "חיפוש" + +#: ../gtk/main.ui.h:50 +msgid "Show debug window" +msgstr "הצג חלון ניפוי שגיאות" + +#: ../gtk/main.ui.h:51 +msgid "Username" +msgstr "שם משתמש" + +#: ../gtk/main.ui.h:52 +msgid "_Help" +msgstr "_עזרה" + +#: ../gtk/main.ui.h:53 +msgid "_Homepage" +msgstr "_עמוד הבית" + +#: ../gtk/main.ui.h:54 +msgid "_Options" +msgstr "_אפשרויות" + +# במסגרת +#: ../gtk/main.ui.h:55 +msgid "in" +msgstr "בקרב" + +#: ../gtk/main.ui.h:56 +msgid "label" +msgstr "תוויות" + +# Should be updated to 2012 2013 +# כל הזכויות שמורות (C) ‫Belledonne Communications, ‫2010\n +#: ../gtk/about.ui.h:1 +msgid "(C) Belledonne Communications,2010\n" +msgstr "‫(C) ‫Belledonne Communications,‫2010\n" + +#: ../gtk/about.ui.h:3 +msgid "About linphone" +msgstr "אודות לינפון" + +#: ../gtk/about.ui.h:4 +msgid "An internet video phone using the standard SIP (rfc3261) protocol." +msgstr "וידאופון אינטרנטי באמצעות תקן הפרוטוקול SIP (‫rfc3261)." + +#: ../gtk/about.ui.h:5 +msgid "" +"fr: Simon Morlat\n" +"en: Simon Morlat and Delphine Perreau\n" +"it: Alberto Zanoni \n" +"de: Jean-Jacques Sarton \n" +"sv: Daniel Nylander \n" +"es: Jesus Benitez \n" +"ja: YAMAGUCHI YOSHIYA \n" +"pt_BR: Rafael Caesar Lenzi \n" +"pl: Robert Nasiadek \n" +"cs: Petr Pisar \n" +"hu: anonymous\n" +msgstr "" + +#: ../gtk/contact.ui.h:1 +msgid "Contact information" +msgstr "מידע איש קשר" + +#: ../gtk/contact.ui.h:2 +msgid "Allow this contact to see my presence status" +msgstr "הרשה לאיש קשר זה לראות את מצב הנוכחות שלי" + +#: ../gtk/contact.ui.h:4 +msgid "SIP Address" +msgstr "כתובת ‫SIP" + +#: ../gtk/contact.ui.h:5 +msgid "Show this contact presence status" +msgstr "הצג את מצב נוכחותו של איש קשר זה" + +#: ../gtk/log.ui.h:1 +msgid "Linphone debug window" +msgstr "חלון ניפוי שגיאות ‫Linphone" + +#: ../gtk/log.ui.h:2 +msgid "Scroll to end" +msgstr "גלול אוטומטית לסוף" + +#: ../gtk/password.ui.h:1 +msgid "Linphone - Authentication required" +msgstr "‫Linphone - נדרש אימות" + +# תחום +#: ../gtk/password.ui.h:3 +msgid "Please enter the domain password" +msgstr "נא להזין את סיסמת המתחם" + +#: ../gtk/password.ui.h:4 +msgid "UserID" +msgstr "זהות משתמש (‫UID)" + +# קריאה חוזרת +#: ../gtk/call_logs.ui.h:1 +msgid "Call back" +msgstr "חיוג חוזר" + +# קריאות +#: ../gtk/call_logs.ui.h:2 +msgid "Call history" +msgstr "היסטוריית שיחות" + +#: ../gtk/call_logs.ui.h:3 +msgid "Clear all" +msgstr "טיהור מוחלט" + +#: ../gtk/sip_account.ui.h:1 +msgid "Configure a SIP account" +msgstr "הגדרת חשבון ‫SIP" + +#: ../gtk/sip_account.ui.h:2 +msgid "Linphone - Configure a SIP account" +msgstr "‫Linphone - הגדרת חשבון ‫SIP" + +#: ../gtk/sip_account.ui.h:3 +msgid "Looks like sip:" +msgstr "נראה כמו ‪sip:" + +#: ../gtk/sip_account.ui.h:4 +msgid "Looks like sip:@" +msgstr "נראה כמו ‪sip:@" + +#: ../gtk/sip_account.ui.h:5 +msgid "Publish presence information" +msgstr "פרסם מידע נוכחות" + +#: ../gtk/sip_account.ui.h:6 +msgid "Register" +msgstr "רישום" + +#: ../gtk/sip_account.ui.h:7 +msgid "Registration duration (sec):" +msgstr "משך רישום (בשניות):" + +#: ../gtk/sip_account.ui.h:8 +msgid "Route (optional):" +msgstr "ניתוב (רשות):" + +#: ../gtk/sip_account.ui.h:9 +msgid "SIP Proxy address:" +msgstr "כתובת SIP Proxy:" + +#: ../gtk/sip_account.ui.h:10 +msgid "Your SIP identity:" +msgstr "זהות ה־SIP שלך:" + +#: ../gtk/sip_account.ui.h:11 +msgid "sip:" +msgstr "" + +#: ../gtk/chatroom.ui.h:1 +msgid "Send" +msgstr "שיגור" + +# ללא הגבלה +#: ../gtk/parameters.ui.h:1 +msgid "0 stands for \"unlimited\"" +msgstr "0 מסמל \"בלי הגבלה\"" + +#: ../gtk/parameters.ui.h:2 +msgid "Audio" +msgstr "שמע" + +# פס רוחב +# טווח תדרים +#: ../gtk/parameters.ui.h:3 +msgid "Bandwidth control" +msgstr "בקרת רוחב פס" + +#: ../gtk/parameters.ui.h:4 +msgid "Codecs" +msgstr "קודקים" + +#: ../gtk/parameters.ui.h:5 +msgid "Default identity" +msgstr "זהות משתמטת" + +#: ../gtk/parameters.ui.h:6 +msgid "Language" +msgstr "שפה" + +#: ../gtk/parameters.ui.h:7 +msgid "Level" +msgstr "רמה" + +#: ../gtk/parameters.ui.h:8 +msgid "NAT and Firewall" +msgstr "‫NAT וחומת אש" + +#: ../gtk/parameters.ui.h:9 +msgid "Network protocol and ports" +msgstr "פרוטוקולי רשת עבודה ופורטים" + +#: ../gtk/parameters.ui.h:10 +msgid "Privacy" +msgstr "פרטיות" + +# חשבונות מתווכים +#: ../gtk/parameters.ui.h:11 +msgid "Proxy accounts" +msgstr "חשבונות Proxy" + +# מוביל +#: ../gtk/parameters.ui.h:12 +msgid "Transport" +msgstr "טרנספורט" + +#: ../gtk/parameters.ui.h:13 +msgid "Video" +msgstr "וידאו" + +# שיטה ניחוש +#: ../gtk/parameters.ui.h:14 +msgid "" +"Adaptive rate control is a technique to dynamically guess the available " +"bandwidth during a call." +msgstr "" +"בקרת קצב מסתגלת הינה טכניקה להשערה דינמית של רוחב הפס הזמין במהלך שיחה." + +#: ../gtk/parameters.ui.h:15 +msgid "ALSA special device (optional):" +msgstr "התקן ALSA מיוחד (רשות):" + +#: ../gtk/parameters.ui.h:16 +msgid "Add" +msgstr "הוסף" + +#: ../gtk/parameters.ui.h:17 +msgid "Audio RTP/UDP:" +msgstr "שמע RTP/UDP:" + +#: ../gtk/parameters.ui.h:18 +msgid "Audio codecs" +msgstr "קודקים של שמע" + +#: ../gtk/parameters.ui.h:19 +msgid "Behind NAT / Firewall (specify gateway IP below)" +msgstr "מאחורי NAT \\ חומת־אש (ציון כתובת שער (Gateway IP) למטה)" + +# שימוש ב־STUN +# utilize +#: ../gtk/parameters.ui.h:20 +msgid "Behind NAT / Firewall (use STUN to resolve)" +msgstr "מאחורי NAT \\ חומת־אש (ניצול STUN)" + +#: ../gtk/parameters.ui.h:22 +msgid "CIF" +msgstr "" + +#: ../gtk/parameters.ui.h:23 +msgid "Capture device:" +msgstr "התקן לכידה:" + +#: ../gtk/parameters.ui.h:24 +msgid "Codecs" +msgstr "קודקים" + +#: ../gtk/parameters.ui.h:25 +msgid "Direct connection to the Internet" +msgstr "חיבור ישיר אל האינטרנט" + +#: ../gtk/parameters.ui.h:26 +msgid "Disable" +msgstr "נטרל" + +#: ../gtk/parameters.ui.h:27 +msgid "Done" +msgstr "סיום" + +# האם KiB means kibibyte? +# קי״ב (1024) אל מול ק״ב (1000) +#: ../gtk/parameters.ui.h:28 +msgid "Download speed limit in Kbit/sec:" +msgstr "מגבלת מהירות הורדה בקי״ב/שנ׳:" + +#: ../gtk/parameters.ui.h:29 +msgid "Edit" +msgstr "ערוך" + +#: ../gtk/parameters.ui.h:30 +msgid "Enable" +msgstr "אפשר" + +#: ../gtk/parameters.ui.h:31 +msgid "Enable adaptive rate control" +msgstr "אפשר בקרת קצב מסתגלת" + +#: ../gtk/parameters.ui.h:32 +msgid "Enable echo cancellation" +msgstr "אפשר ביטול הד" + +#: ../gtk/parameters.ui.h:33 +msgid "Erase all passwords" +msgstr "מחק סיסמאות" + +#: ../gtk/parameters.ui.h:34 +msgid "Manage SIP Accounts" +msgstr "ניהול חשבונות ‫SIP" + +#: ../gtk/parameters.ui.h:35 +msgid "Media encryption type" +msgstr "סוג הצפנת מדיה" + +#: ../gtk/parameters.ui.h:36 +msgid "Multimedia settings" +msgstr "הגדרות מולטימדיה" + +#: ../gtk/parameters.ui.h:37 +msgid "Network settings" +msgstr "הגדרות רשת עבודה" + +#: ../gtk/parameters.ui.h:38 +msgid "Playback device:" +msgstr "התקן פס קול:" + +# רצויה +#: ../gtk/parameters.ui.h:39 +msgid "Prefered video resolution:" +msgstr "רזולוציית וידאו מועדפת:" + +#: ../gtk/parameters.ui.h:40 +msgid "Public IP address:" +msgstr "כתובת IP פומבית:" + +#: ../gtk/parameters.ui.h:41 +msgid "" +"Register to FONICS\n" +"virtual network !" +msgstr "" +"רישום אל FONICS\n" +"רשת עבודה וירטואלית !" + +#: ../gtk/parameters.ui.h:43 +msgid "Remove" +msgstr "הסר" + +#: ../gtk/parameters.ui.h:44 +msgid "Ring device:" +msgstr "התקן צלצול:" + +#: ../gtk/parameters.ui.h:45 +msgid "Ring sound:" +msgstr "צליל צלצול:" + +#: ../gtk/parameters.ui.h:46 +msgid "SIP (TCP)" +msgstr "" + +#: ../gtk/parameters.ui.h:47 +msgid "SIP (TLS)" +msgstr "" + +#: ../gtk/parameters.ui.h:48 +msgid "SIP (UDP)" +msgstr "" + +#: ../gtk/parameters.ui.h:49 +msgid "Send DTMFs as SIP info" +msgstr "שלח טזמ״תים (DTMFs) כמידע SIP" + +# שידור +#: ../gtk/parameters.ui.h:50 +msgid "Set Maximum Transmission Unit:" +msgstr "הגדר יחידת תמסורת מרבית:" + +#: ../gtk/parameters.ui.h:51 +msgid "Settings" +msgstr "הגדרות" + +#: ../gtk/parameters.ui.h:52 +msgid "Show advanced settings" +msgstr "הצג הגדרות מתקדמות" + +#: ../gtk/parameters.ui.h:53 +msgid "Stun server:" +msgstr "שרת STUN:" + +#: ../gtk/parameters.ui.h:54 +msgid "This section defines your SIP address when not using a SIP account" +msgstr "חלק זה מגדיר את כתובת ה־SIP כאשר אינך עושה שימוש בחשבון SIP" + +# מנהרה +#: ../gtk/parameters.ui.h:55 +msgid "Tunnel" +msgstr "" + +# האם KiB means kibibyte? +#: ../gtk/parameters.ui.h:56 +msgid "Upload speed limit in Kbit/sec:" +msgstr "מגבלת מהירות העלאה בקי״ב/שנ׳:" + +#: ../gtk/parameters.ui.h:57 +msgid "Use IPv6 instead of IPv4" +msgstr "השתמש בפרוטוקול IPv6 במקום בפרוטוקול IPv4" + +#: ../gtk/parameters.ui.h:58 +msgid "User interface" +msgstr "ממשק משתמש" + +#: ../gtk/parameters.ui.h:59 +msgid "Video RTP/UDP:" +msgstr "וידאו RTP/UDP:" + +#: ../gtk/parameters.ui.h:60 +msgid "Video codecs" +msgstr "קודקים של וידאו" + +#: ../gtk/parameters.ui.h:61 +msgid "Video input device:" +msgstr "התקן קלט וידאו:" + +#: ../gtk/parameters.ui.h:62 +msgid "Wizard" +msgstr "אשף" + +#: ../gtk/parameters.ui.h:63 +msgid "Your display name (eg: John Doe):" +msgstr "שם התצוגה שלך (למשל: יורם יהודה):" + +#: ../gtk/parameters.ui.h:64 +msgid "Your resulting SIP address:" +msgstr "כתובת SIP נובעת:" + +#: ../gtk/parameters.ui.h:65 +msgid "Your username:" +msgstr "שם המשתמש שלך:" + +#: ../gtk/parameters.ui.h:66 +msgid "a sound card" +msgstr "כרטיס קול" + +#: ../gtk/parameters.ui.h:67 +msgid "default camera" +msgstr "מצלמה משתמטת" + +#: ../gtk/parameters.ui.h:68 +msgid "default soundcard" +msgstr "כרטיס קול משתמט" + +#: ../gtk/parameters.ui.h:69 +msgid "edit" +msgstr "עריכה" + +# חיפוש מאן דהו +#: ../gtk/buddylookup.ui.h:1 +msgid "Search somebody" +msgstr "חיפוש אחר מישהו" + +#: ../gtk/buddylookup.ui.h:2 +msgid "Add to my list" +msgstr "הוסף אל הרשימה שלי" + +#: ../gtk/buddylookup.ui.h:3 +msgid "Search contacts in directory" +msgstr "חיפוש אנשי קשר בתוך מדור" + +#: ../gtk/waiting.ui.h:1 +msgid "Linphone" +msgstr "Linphone" + +#: ../gtk/waiting.ui.h:2 +msgid "Please wait" +msgstr "נא להמתין" + +#: ../coreapi/linphonecore.c:187 +msgid "aborted" +msgstr "ננטשה" + +#: ../coreapi/linphonecore.c:190 +msgid "completed" +msgstr "הסתיימה" + +#: ../coreapi/linphonecore.c:193 +msgid "missed" +msgstr "הוחמצה" + +# needs to be tested +#: ../coreapi/linphonecore.c:198 +#, c-format +msgid "" +"%s at %s\n" +"From: %s\n" +"To: %s\n" +"Status: %s\n" +"Duration: %i mn %i sec\n" +msgstr "" +"%s אצל %s\n" +"מאת: %s\n" +"אל: %s\n" +"מצב: %s\n" +"משך: %i mn %i sec\n" + +#: ../coreapi/linphonecore.c:199 +msgid "Outgoing call" +msgstr "קריאה יוצאת" + +#: ../coreapi/linphonecore.c:1105 +msgid "Ready" +msgstr "מוכן" + +#: ../coreapi/linphonecore.c:1848 +msgid "Looking for telephone number destination..." +msgstr "מחפש כעת עבור יעד מספר טלפון..." + +#: ../coreapi/linphonecore.c:1851 +msgid "Could not resolve this number." +msgstr "לא ניתן לפתור את מספר זה." + +# לרוב +#: ../coreapi/linphonecore.c:1895 +msgid "" +"Could not parse given sip address. A sip url usually looks like sip:" +"user@domain" +msgstr "" +"לא ניתן היה לפענח את הכתובת שניתנה. כתובת sip בדרך כלל נראית כך: sip:" +"user@domain" + +#: ../coreapi/linphonecore.c:2052 +msgid "Contacting" +msgstr "מתקשר כעת" + +#: ../coreapi/linphonecore.c:2059 +msgid "Could not call" +msgstr "לא ניתן להתקשר" + +# מספר השיחות המקבילות המרבי +#: ../coreapi/linphonecore.c:2167 +msgid "Sorry, we have reached the maximum number of simultaneous calls" +msgstr "הגענו אל המספר המרבי של שיחות מקבילות, עמך הסליחה" + +# פרמטרי קריאה +#: ../coreapi/linphonecore.c:2297 +msgid "Modifying call parameters..." +msgstr "מתאים כעת פרמטרים של שיחה..." + +#: ../coreapi/linphonecore.c:2393 +msgid "Connected." +msgstr "מקושר." + +#: ../coreapi/linphonecore.c:2416 +msgid "Call aborted" +msgstr "קריאה בוטלה" + +#: ../coreapi/linphonecore.c:2557 +msgid "Could not pause the call" +msgstr "לא ניתן להשהות את השיחה" + +#: ../coreapi/linphonecore.c:2562 +msgid "Pausing the current call..." +msgstr "משהה כעת שיחה נוכחית..." + +#: ../coreapi/misc.c:147 +msgid "" +"Your computer appears to be using ALSA sound drivers.\n" +"This is the best choice. However the pcm oss emulation module\n" +"is missing and linphone needs it. Please execute\n" +"'modprobe snd-pcm-oss' as root to load it." +msgstr "" +"נראה שמחשבך עושה שימוש במנהל התקן הקול ALSA.\n" +"זוהי הבחירה הטובה ביותר. אולם מודול ההדמיה (emulation module) של pcm oss\n" +"נעדר ולינפון זקוק לו. נא להריץ את הפקודה\n" +"‫'modprobe snd-pcm-oss' כמשתמש שורש (משתמש על) כדי להטעינו." + +#: ../coreapi/misc.c:150 +msgid "" +"Your computer appears to be using ALSA sound drivers.\n" +"This is the best choice. However the mixer oss emulation module\n" +"is missing and linphone needs it. Please execute\n" +" 'modprobe snd-mixer-oss' as root to load it." +msgstr "" +"נראה שמחשבך עושה שימוש במנהל התקן הקול ALSA.\n" +"זוהי הבחירה הטובה ביותר. אולם מודול ההדמיה (emulation module) של mixer oss\n" +"נעדר ולינפון זקוק לו. נא להריץ את הפקודה\n" +"‫'modprobe snd-mixer-oss' כמשתמש שורש (משתמש על) כדי להטעינו." + +# במהלך (או) באמצע חיפוש... +#: ../coreapi/misc.c:479 +msgid "Stun lookup in progress..." +msgstr "בדיקת STUN מצויה כעת בעיצומה..." + +#: ../coreapi/friend.c:33 +msgid "Online" +msgstr "מקוון" + +#: ../coreapi/friend.c:36 +msgid "Busy" +msgstr "עסוק" + +# מיד אשוב +#: ../coreapi/friend.c:39 +msgid "Be right back" +msgstr "כבר אשוב" + +#: ../coreapi/friend.c:42 +msgid "Away" +msgstr "נעדר" + +#: ../coreapi/friend.c:45 +msgid "On the phone" +msgstr "בטלפון" + +#: ../coreapi/friend.c:48 +msgid "Out to lunch" +msgstr "בארוחת צהריים" + +#: ../coreapi/friend.c:51 +msgid "Do not disturb" +msgstr "נא לא להפריע" + +# Is it: change residence? +# What is the difference with Away? +# fr Parti +#: ../coreapi/friend.c:54 +msgid "Moved" +msgstr "עברתי דירה" + +# additional נוסף +#: ../coreapi/friend.c:57 +msgid "Using another messaging service" +msgstr "אני עושה כעת שימוש בשירות מסרים אחר" + +#: ../coreapi/friend.c:60 +msgid "Offline" +msgstr "לא מקוון" + +#: ../coreapi/friend.c:63 +msgid "Pending" +msgstr "בהמתנה" + +#: ../coreapi/friend.c:66 +msgid "Unknown-bug" +msgstr "תקלה לא ידועה" + +#: ../coreapi/proxy.c:196 +msgid "" +"The sip proxy address you entered is invalid, it must start with \"sip:\" " +"followed by a hostname." +msgstr "" +"כתובת sip proxy שהוזנה הינה שגויה, זו צריכה להתחיל עם‭\"sip:\" ‬ לאחר שם מארח." + +# כמו למשל +#: ../coreapi/proxy.c:202 +msgid "" +"The sip identity you entered is invalid.\n" +"It should look like sip:username@proxydomain, such as sip:alice@example.net" +msgstr "" +"זהות sip שהוזנה הינה שגויה.\n" +"זו צריכה להיראות כמו sip:username@proxydomain, למשל sip:alice@example.net" + +# בשם כ־ +#: ../coreapi/proxy.c:702 +#, c-format +msgid "Could not login as %s" +msgstr "לא ניתן להתחבר בזהות %s" + +#: ../coreapi/callbacks.c:206 +msgid "is contacting you" +msgstr "מתקשר/ת אליך" + +#: ../coreapi/callbacks.c:207 +msgid " and asked autoanswer." +msgstr " ומבקש/ת מענה אוטומטי." + +#: ../coreapi/callbacks.c:207 +msgid "." +msgstr "" + +#: ../coreapi/callbacks.c:266 +msgid "Remote ringing." +msgstr "צלצול מרוחק." + +#: ../coreapi/callbacks.c:282 +msgid "Remote ringing..." +msgstr "צלצול מרוחק..." + +# A SIP state +#: ../coreapi/callbacks.c:293 +msgid "Early media." +msgstr "מדיה מוקדמת." + +#: ../coreapi/callbacks.c:331 +#, c-format +msgid "Call with %s is paused." +msgstr "שיחה עם %s מושהית." + +#: ../coreapi/callbacks.c:342 +#, c-format +msgid "Call answered by %s - on hold." +msgstr "קריאה נענתה על ידי %s - בהמתנה." + +# renewed +#: ../coreapi/callbacks.c:357 +msgid "Call resumed." +msgstr "קריאה חודשה." + +#: ../coreapi/callbacks.c:362 +#, c-format +msgid "Call answered by %s." +msgstr "קריאה נענתה על ידי %s." + +# לא תואם +# אי תאימות +# אי התאמה +#: ../coreapi/callbacks.c:377 +msgid "Incompatible, check codecs..." +msgstr "חוסר תאימות, נא לבדוק קודקים..." + +#: ../coreapi/callbacks.c:432 +msgid "We are being paused..." +msgstr "אנחנו כעת מושהים..." + +#: ../coreapi/callbacks.c:436 +msgid "We have been resumed..." +msgstr "חזרנו..." + +# באופן מרוחק +#: ../coreapi/callbacks.c:441 +msgid "Call has been updated by remote..." +msgstr "שיחה עודכנה מרחוק..." + +#: ../coreapi/callbacks.c:473 +msgid "Call terminated." +msgstr "קריאה הסתיימה." + +#: ../coreapi/callbacks.c:480 +msgid "User is busy." +msgstr "משתמש עסוק כעת." + +#: ../coreapi/callbacks.c:481 +msgid "User is temporarily unavailable." +msgstr "משתמש לא זמין זמנית." + +#. char *retrymsg=_("%s. Retry after %i minute(s)."); +#: ../coreapi/callbacks.c:483 +msgid "User does not want to be disturbed." +msgstr "משתמש לא מעוניין שיפריעו לו." + +#: ../coreapi/callbacks.c:484 +msgid "Call declined." +msgstr "קריאה סורבה." + +#: ../coreapi/callbacks.c:496 +msgid "No response." +msgstr "אין תגובה." + +#: ../coreapi/callbacks.c:500 +msgid "Protocol error." +msgstr "שגיאת פרוטוקול." + +#: ../coreapi/callbacks.c:516 +msgid "Redirected" +msgstr "מכוון מחדש" + +#: ../coreapi/callbacks.c:550 +msgid "No common codecs" +msgstr "אין קודקים משותפים" + +#: ../coreapi/callbacks.c:556 +msgid "Call failed." +msgstr "קריאה נכשלה." + +# הרשמה אצל %s הושלמה בהצלחה. +#: ../coreapi/callbacks.c:633 +#, c-format +msgid "Registration on %s successful." +msgstr "רישום אצל %s הושלם בהצלחה." + +#: ../coreapi/callbacks.c:634 +#, c-format +msgid "Unregistration on %s done." +msgstr "אי רישום אצל %s סוים." + +# Pas de réponse +# no response in defined time +#: ../coreapi/callbacks.c:650 +msgid "no response timeout" +msgstr "אין היענות תוך זמן מוגדר" + +#: ../coreapi/callbacks.c:653 +#, c-format +msgid "Registration on %s failed: %s" +msgstr "רישום אצל %s נכשל: %s" + +#: ../coreapi/sal_eXosip2.c:870 ../coreapi/sal_eXosip2.c:872 +msgid "Authentication failure" +msgstr "כשל באימות" + +#: ../coreapi/linphonecall.c:128 +#, c-format +msgid "Authentication token is %s" +msgstr "אות האימות הינה %s" + +# האם כדאי לחקות את הטלפונים הניידים? שיחות של נענו +#: ../coreapi/linphonecall.c:1573 +#, c-format +msgid "You have missed %i call." +msgid_plural "You have missed %i calls." +msgstr[0] "החמצת שיחה %i." +msgstr[1] "החמצת %i שיחות." + +#~ msgid "Please choose a username:" +#~ msgstr "נא לבחור שם משתמש:" + +#~ msgid "Checking if '%s' is available..." +#~ msgstr "בודק כעת אם '%s' זמין..." + +#~ msgid "Please wait..." +#~ msgstr "נא להמתין..." + +#~ msgid "Sorry this username already exists. Please try a new one." +#~ msgstr "צר לי, שם משתמש זה כבר קיים. נא לנסות אחד חדש." + +#, fuzzy +#~ msgid "Ok !" +#~ msgstr "חיובי !" + +#~ msgid "Communication problem, please try again later." +#~ msgstr "בעיית תקשורת, נא לנסות שוב מאוחר יותר." + +#~ msgid "Choosing a username" +#~ msgstr "בחירת שם משתמש" + +# וידוא +#, fuzzy +#~ msgid "Verifying" +#~ msgstr "מאמת כעת" + +# וידוא +#~ msgid "Confirmation" +#~ msgstr "אימות" + +#~ msgid "Creating your account" +#~ msgstr "חשבונך נוצר כעת" + +#~ msgid "Now ready !" +#~ msgstr "מוכן כעת !" + +#~ msgid "Call" +#~ msgstr "קריאה" + +#~ msgid "Not found" +#~ msgstr "לא נמצא" + +#~ msgid "" +#~ "Pause all calls\n" +#~ "and answer" +#~ msgstr "" +#~ "Pauser les appels en cours\n" +#~ "et répondre" + +#~ msgid "Contact list" +#~ msgstr "Liste de contacts" + +#~ msgid "Audio & video" +#~ msgstr "Audio et video" + +#~ msgid "Audio only" +#~ msgstr "Audio seul" + +#~ msgid "Duration:" +#~ msgstr "Durée:" + +#, fuzzy +#~ msgid "_Call history" +#~ msgstr "Historique des appels" + +#~ msgid "_Linphone" +#~ msgstr "_Linphone" + +#~ msgid "Register at startup" +#~ msgstr "S'enregistrer au démarrage" + +#~ msgid "Ports" +#~ msgstr "Ports utilisés" + +#~ msgid "Sorry, you have to pause or stop the current call first !" +#~ msgstr "Désolé, vous devez d'abord mettre en attente l'appel en cours." + +#~ msgid "There is already a call in process, pause or stop it first." +#~ msgstr "" +#~ "Il y a déjà un appel en cours, veuillez d'abord le mettre en attente ou " +#~ "le raccrocher." diff --git a/po/ru.po b/po/ru.po index 8467df849..8c48acd1e 100644 --- a/po/ru.po +++ b/po/ru.po @@ -1,12 +1,12 @@ -# SIP Telephony Application. -# Copyright (C) 2001, 2002 Free Software Foundation, Inc. -# Simon Morlat , 2001. -# +# SIP Telephony Application. +# Copyright (C) 2001, 2002 Free Software Foundation, Inc. +# Simon Morlat , 2001. +# msgid "" msgstr "" "Project-Id-Version: linphone 0.7.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-05 12:41+0100\n" +"POT-Creation-Date: 2012-11-24 01:00+0600\n" "PO-Revision-Date: 2010-01-22 18:43+0300\n" "Last-Translator: Maxim Prokopyev \n" "Language-Team: Russian \n" @@ -14,20 +14,24 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: ../gtk/calllogs.c:71 #, c-format msgid "%i minute" msgid_plural "%i minutes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%i минута" +msgstr[1] "%i минуты" +msgstr[2] "%i минут" #: ../gtk/calllogs.c:74 #, c-format msgid "%i second" msgid_plural "%i seconds" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%i секунда" +msgstr[1] "%i секунды" +msgstr[2] "%i секунд" #: ../gtk/calllogs.c:77 #, c-format @@ -35,19 +39,20 @@ msgid "" "%s\t%s\tQuality: %s\n" "%s\t%s %s\t" msgstr "" +"%s\t%s\tКачество: %s\n" +"%s\t%s %s\t" #: ../gtk/calllogs.c:79 msgid "n/a" -msgstr "" +msgstr "н/д" -#: ../gtk/conference.c:33 ../gtk/incall_view.c:183 +#: ../gtk/conference.c:33 ../gtk/incall_view.c:185 msgid "Conference" -msgstr "" +msgstr "Конференция" #: ../gtk/conference.c:41 -#, fuzzy msgid "Me" -msgstr "Приглушить" +msgstr "Я" #: ../gtk/support.c:49 ../gtk/support.c:73 ../gtk/support.c:102 #, c-format @@ -57,44 +62,44 @@ msgstr "Невозможно найти графический файл: %s" #: ../gtk/chat.c:27 #, c-format msgid "Chat with %s" -msgstr "Обмен сообщениями с %s" +msgstr "Чат с %s" -#: ../gtk/main.c:83 +#: ../gtk/main.c:84 msgid "log to stdout some debug information while running." msgstr "" "Вывод некоторой отладочной информации на устройство стандартного вывода во " -"время работы " +"время работы" -#: ../gtk/main.c:90 +#: ../gtk/main.c:91 msgid "path to a file to write logs into." -msgstr "" +msgstr "путь к файлу для записи журнала работы." -#: ../gtk/main.c:97 +#: ../gtk/main.c:98 msgid "Start only in the system tray, do not show the main interface." -msgstr "Показывать только в системном лотке, не запуская главное окно" +msgstr "Запускать только в системном лотке, не показывая главное окно" -#: ../gtk/main.c:104 +#: ../gtk/main.c:105 msgid "address to call right now" msgstr "адрес для звонка" -#: ../gtk/main.c:111 +#: ../gtk/main.c:112 msgid "if set automatically answer incoming calls" -msgstr "если установлен автоматический прием входящих вызовов" +msgstr "автоматически принимать входящие вызовы, если включено" -#: ../gtk/main.c:118 +#: ../gtk/main.c:119 msgid "" "Specifiy a working directory (should be the base of the installation, eg: c:" "\\Program Files\\Linphone)" msgstr "" -"Определить рабочий каталог (относительно каталога установки, например: c:" -"\\Program Files\\Linphone)" +"Укажите рабочий каталог (должен содержать установленные файлы приложения, " +"например: c:\\Program Files\\Linphone)" -#: ../gtk/main.c:464 -#, fuzzy, c-format +#: ../gtk/main.c:465 +#, c-format msgid "Call with %s" -msgstr "Обмен сообщениями с %s" +msgstr "Чат с %s" -#: ../gtk/main.c:815 +#: ../gtk/main.c:820 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -102,12 +107,12 @@ msgid "" "list ?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" -"%s вы бы хотели быть добавленным в этот контактный лист.\n" -"Вы разрешаете ему(ей) видеть ваш статус присутствия или добавить в " -"контактный лист?\n" -"Если вы ответите Нет, эта персона будет временно заблокирована." +"%s хочет добавить вас в свой контакт-лист.\n" +"Вы разрешаете ему(ей) видеть статус вашего присутствия или хотите добавить " +"его(её) в свой контактный лист?\n" +"Если вы ответите Нет, этот человек будет временно заблокирован." -#: ../gtk/main.c:893 +#: ../gtk/main.c:898 #, c-format msgid "" "Please enter your password for username %s\n" @@ -116,223 +121,221 @@ msgstr "" "Пожалуйста, введите пароль для пользователя %s\n" " в домене %s:" -#: ../gtk/main.c:993 -#, fuzzy +#: ../gtk/main.c:998 msgid "Call error" -msgstr "История звонков" +msgstr "Ошибка вызова" -#: ../gtk/main.c:996 ../coreapi/linphonecore.c:2406 +#: ../gtk/main.c:1001 ../coreapi/linphonecore.c:2433 msgid "Call ended" msgstr "Разговор окончен" -#: ../gtk/main.c:999 ../coreapi/linphonecore.c:199 +#: ../gtk/main.c:1004 ../coreapi/linphonecore.c:199 msgid "Incoming call" msgstr "Входящий вызов" -#: ../gtk/main.c:1001 ../gtk/incall_view.c:292 ../gtk/main.ui.h:20 +#: ../gtk/main.c:1006 ../gtk/incall_view.c:294 ../gtk/main.ui.h:4 msgid "Answer" -msgstr "" +msgstr "Ответить" -#: ../gtk/main.c:1003 ../gtk/main.ui.h:29 +#: ../gtk/main.c:1008 ../gtk/main.ui.h:5 msgid "Decline" msgstr "Отклонить" -#: ../gtk/main.c:1009 -#, fuzzy +#: ../gtk/main.c:1014 msgid "Call paused" -msgstr "отмененный" +msgstr "Вызов приостановлен" -#: ../gtk/main.c:1009 +#: ../gtk/main.c:1014 #, c-format msgid "by %s" -msgstr "" +msgstr "со стороны: %s" -#: ../gtk/main.c:1165 +#: ../gtk/main.c:1170 msgid "Website link" -msgstr "Домашняя страница" +msgstr "Ссылка на сайт" -#: ../gtk/main.c:1205 +#: ../gtk/main.c:1210 msgid "Linphone - a video internet phone" -msgstr "Linphone - Интернет видео телефон" +msgstr "Linphone - видео-телефон для интернета" -#: ../gtk/main.c:1295 +#: ../gtk/main.c:1302 #, c-format msgid "%s (Default)" msgstr "%s (По умолчанию)" -#: ../gtk/main.c:1566 ../coreapi/callbacks.c:700 +#: ../gtk/main.c:1580 ../coreapi/callbacks.c:702 #, c-format msgid "We are transferred to %s" -msgstr "" +msgstr "Мы переведены на %s" -#: ../gtk/main.c:1576 +#: ../gtk/main.c:1590 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" +"На этом компьютере не обнаружено ни одной звуковой карты.\n" +"Вы не сможете совершать или принимать аудио-вызовы." -#: ../gtk/main.c:1663 +#: ../gtk/main.c:1691 msgid "A free SIP video-phone" msgstr "Свободный SIP видео-телефон" #: ../gtk/friendlist.c:203 -#, fuzzy msgid "Add to addressbook" -msgstr "Adressbuch" +msgstr "Добавить в адресную книгу" -#: ../gtk/friendlist.c:258 ../gtk/propertybox.c:296 ../gtk/contact.ui.h:3 +#: ../gtk/friendlist.c:377 ../gtk/propertybox.c:297 ../gtk/contact.ui.h:1 msgid "Name" msgstr "Имя" -#: ../gtk/friendlist.c:271 +#: ../gtk/friendlist.c:393 msgid "Presence status" msgstr "Статус присутствия" -#: ../gtk/friendlist.c:308 +#: ../gtk/friendlist.c:432 #, c-format msgid "Search in %s directory" msgstr "Поиск в директории %s" -#: ../gtk/friendlist.c:568 +#: ../gtk/friendlist.c:646 msgid "Invalid sip contact !" -msgstr "Неверный sip контакт" +msgstr "Неверный sip-контакт!" -#: ../gtk/friendlist.c:613 +#: ../gtk/friendlist.c:691 #, c-format msgid "Call %s" -msgstr "Звонк %s" +msgstr "Набрать %s" -#: ../gtk/friendlist.c:614 +#: ../gtk/friendlist.c:692 #, c-format msgid "Send text to %s" -msgstr "Послать текст %s" +msgstr "Послать текст к %s" -#: ../gtk/friendlist.c:615 +#: ../gtk/friendlist.c:693 #, c-format msgid "Edit contact '%s'" msgstr "Редактировать контакт '%s'" -#: ../gtk/friendlist.c:616 +#: ../gtk/friendlist.c:694 #, c-format msgid "Delete contact '%s'" msgstr "Удалить контакт '%s'" -#: ../gtk/friendlist.c:658 +#: ../gtk/friendlist.c:736 #, c-format msgid "Add new contact from %s directory" msgstr "Добавить новый контакт из директории '%s'" -#: ../gtk/propertybox.c:302 +#: ../gtk/propertybox.c:303 msgid "Rate (Hz)" -msgstr "Частота (Hz)" +msgstr "Частота (Гц)" -#: ../gtk/propertybox.c:308 +#: ../gtk/propertybox.c:309 msgid "Status" msgstr "Статус" -#: ../gtk/propertybox.c:314 +#: ../gtk/propertybox.c:315 msgid "Min bitrate (kbit/s)" -msgstr "Минимальный битрейт (kbit/s)" +msgstr "Минимальный битрейт (кбит/с)" -#: ../gtk/propertybox.c:321 +#: ../gtk/propertybox.c:322 msgid "Parameters" msgstr "Параметры" -#: ../gtk/propertybox.c:364 ../gtk/propertybox.c:507 +#: ../gtk/propertybox.c:365 ../gtk/propertybox.c:508 msgid "Enabled" msgstr "Включен" -#: ../gtk/propertybox.c:366 ../gtk/propertybox.c:507 +#: ../gtk/propertybox.c:367 ../gtk/propertybox.c:508 msgid "Disabled" msgstr "Отключен" -#: ../gtk/propertybox.c:553 +#: ../gtk/propertybox.c:554 msgid "Account" msgstr "Учетная запись" -#: ../gtk/propertybox.c:693 +#: ../gtk/propertybox.c:694 msgid "English" msgstr "Английский" -#: ../gtk/propertybox.c:694 +#: ../gtk/propertybox.c:695 msgid "French" msgstr "Французский" -#: ../gtk/propertybox.c:695 +#: ../gtk/propertybox.c:696 msgid "Swedish" msgstr "Шведский" -#: ../gtk/propertybox.c:696 +#: ../gtk/propertybox.c:697 msgid "Italian" msgstr "Итальянский" -#: ../gtk/propertybox.c:697 +#: ../gtk/propertybox.c:698 msgid "Spanish" msgstr "Испанский" -#: ../gtk/propertybox.c:698 -#, fuzzy -msgid "Brazilian Portugese" -msgstr "Португальский" - #: ../gtk/propertybox.c:699 +msgid "Brazilian Portugese" +msgstr "Бразильский португальский" + +#: ../gtk/propertybox.c:700 msgid "Polish" msgstr "Польский" -#: ../gtk/propertybox.c:700 +#: ../gtk/propertybox.c:701 msgid "German" msgstr "Немецкий" -#: ../gtk/propertybox.c:701 +#: ../gtk/propertybox.c:702 msgid "Russian" msgstr "Русский" -#: ../gtk/propertybox.c:702 +#: ../gtk/propertybox.c:703 msgid "Japanese" msgstr "Японский" -#: ../gtk/propertybox.c:703 -msgid "Dutch" -msgstr "Датский" - #: ../gtk/propertybox.c:704 +msgid "Dutch" +msgstr "Нидерландский" + +#: ../gtk/propertybox.c:705 msgid "Hungarian" msgstr "Венгерский" -#: ../gtk/propertybox.c:705 +#: ../gtk/propertybox.c:706 msgid "Czech" msgstr "Чешский" -#: ../gtk/propertybox.c:706 +#: ../gtk/propertybox.c:707 msgid "Chinese" msgstr "Китайский" -#: ../gtk/propertybox.c:707 -msgid "Traditional Chinese" -msgstr "" - #: ../gtk/propertybox.c:708 -msgid "Norwegian" -msgstr "" +msgid "Traditional Chinese" +msgstr "Традиционный китайский" -#: ../gtk/propertybox.c:765 +#: ../gtk/propertybox.c:709 +msgid "Norwegian" +msgstr "Норвежский" + +#: ../gtk/propertybox.c:766 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "" -"Вы должны перезагрузить Linphone для того чтобы языковые настройки вступили " +"Вы должны перезапустить Linphone для того, чтобы языковые настройки вступили " "в силу." -#: ../gtk/propertybox.c:835 +#: ../gtk/propertybox.c:836 msgid "None" msgstr "Нет" -#: ../gtk/propertybox.c:839 +#: ../gtk/propertybox.c:840 msgid "SRTP" -msgstr "" +msgstr "SRTP" -#: ../gtk/propertybox.c:845 +#: ../gtk/propertybox.c:846 msgid "ZRTP" -msgstr "" +msgstr "ZRTP" #: ../gtk/update.c:80 #, c-format @@ -340,12 +343,12 @@ msgid "" "A more recent version is availalble from %s.\n" "Would you like to open a browser to download it ?" msgstr "" -"Доступна новая версия с %s\n" +"Доступна более новая версия с %s\n" "Открыть браузер для загрузки?" #: ../gtk/update.c:91 msgid "You are running the lastest version." -msgstr "" +msgstr "Вы используете самую последнюю версию." #: ../gtk/buddylookup.c:85 msgid "Firstname, Lastname" @@ -372,425 +375,458 @@ msgstr "Получение данных..." msgid "Found %i contact" msgid_plural "Found %i contacts" msgstr[0] "Найден %i контакт" -msgstr[1] "" +msgstr[1] "Найдено %i контакта" +msgstr[2] "Найдено %i контактов" -#: ../gtk/setupwizard.c:25 +#: ../gtk/setupwizard.c:33 msgid "" "Welcome !\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -"Добро пожаловать\n" -"Помощник настройки учетной записи для SIP" +"Добро пожаловать!\n" +"Этот помощник поможет вам использовать учётную запись SIP для ваших звонков." -#: ../gtk/setupwizard.c:34 -msgid "Create an account by choosing a username" -msgstr "Создать учетную запись" +#: ../gtk/setupwizard.c:42 +msgid "Create an account on linphone.org" +msgstr "Создать учётную запись на linphone.org" -#: ../gtk/setupwizard.c:35 -msgid "I have already an account and just want to use it" -msgstr "Использовать существующую учетную запись" +#: ../gtk/setupwizard.c:43 +msgid "I have already a linphone.org account and I just want to use it" +msgstr "" +"У меня уже есть учётная запись на linphone.org и я хочу использовать её" -#: ../gtk/setupwizard.c:53 -msgid "Please choose a username:" -msgstr "Выберите имя пользователя:" +#: ../gtk/setupwizard.c:44 +msgid "I have already a sip account and I just want to use it" +msgstr "У меня уже есть учётная запись SIP и я хочу использовать её" -#: ../gtk/setupwizard.c:54 +#: ../gtk/setupwizard.c:84 +msgid "Enter your linphone.org username" +msgstr "Введите ваше имя пользователя на linphone.org" + +#: ../gtk/setupwizard.c:91 msgid "Username:" msgstr "Имя пользователя:" -#: ../gtk/setupwizard.c:92 -#, c-format -msgid "Checking if '%s' is available..." -msgstr "Проверка доступности '%s'" +#: ../gtk/setupwizard.c:93 ../gtk/password.ui.h:4 +msgid "Password:" +msgstr "Пароль:" -#: ../gtk/setupwizard.c:97 ../gtk/setupwizard.c:164 -msgid "Please wait..." -msgstr "Ждите..." +#: ../gtk/setupwizard.c:113 +msgid "Enter your account informations" +msgstr "Введите информацию о вашей учётной записи" -#: ../gtk/setupwizard.c:101 -msgid "Sorry this username already exists. Please try a new one." -msgstr "Такое имя пользователя уже существует. " +#: ../gtk/setupwizard.c:120 +msgid "Username*" +msgstr "Имя пользователя*" -#: ../gtk/setupwizard.c:103 ../gtk/setupwizard.c:168 -msgid "Ok !" -msgstr "Ok !" +#: ../gtk/setupwizard.c:121 +msgid "Password*" +msgstr "Пароль*" -#: ../gtk/setupwizard.c:106 ../gtk/setupwizard.c:171 -msgid "Communication problem, please try again later." -msgstr "Проблемы со связью, повторите попытку позже." +#: ../gtk/setupwizard.c:124 +msgid "Domain*" +msgstr "Домен*" -#: ../gtk/setupwizard.c:134 +#: ../gtk/setupwizard.c:125 +msgid "Proxy" +msgstr "Прокси" + +#: ../gtk/setupwizard.c:293 +msgid "(*) Required fields" +msgstr "(*) Обязательные поля" + +#: ../gtk/setupwizard.c:294 +msgid "Username: (*)" +msgstr "Имя пользователя: (*)" + +#: ../gtk/setupwizard.c:296 +msgid "Password: (*)" +msgstr "Пароль: (*)" + +#: ../gtk/setupwizard.c:298 +msgid "Email: (*)" +msgstr "Email: (*)" + +#: ../gtk/setupwizard.c:300 +msgid "Confirm your password: (*)" +msgstr "Подтвердите ваш пароль: (*)" + +#: ../gtk/setupwizard.c:364 +msgid "" +"Error, account not validated, username already used or server unreachable.\n" +"Please go back and try again." +msgstr "" +"Ошибка, непроверенная учётная запись, имя пользователя уже существует или " +"сервер недоступен.\n" +"Вернитесь и попробуйте ещё раз." + +#: ../gtk/setupwizard.c:375 msgid "Thank you. Your account is now configured and ready for use." -msgstr "Спасибо! Учетная запись успешно настроена." +msgstr "Спасибо! Учетная запись успешно настроена и готова к использованию." -#: ../gtk/setupwizard.c:228 +#: ../gtk/setupwizard.c:383 +msgid "" +"Please validate your account by clicking on the link we just sent you by " +"email.\n" +"Then come back here and press Next button." +msgstr "" +"Пожалуйста, подтвердите свою учётную запись, пройдя по ссылке, которую мы " +"только что выслали вам на электронную почту.\n" +"Затем вернитесь и нажмите на кнопку Далее." + +#: ../gtk/setupwizard.c:553 msgid "Welcome to the account setup assistant" -msgstr "Добро пожаловат" +msgstr "Добро пожаловать в помощник настройки учётной записи" -#: ../gtk/setupwizard.c:232 +#: ../gtk/setupwizard.c:558 msgid "Account setup assistant" -msgstr "Помощник настройки учетной записи" +msgstr "Помощник настройки учётной записи" -#: ../gtk/setupwizard.c:236 -msgid "Choosing a username" -msgstr "Имя пользователя:" +#: ../gtk/setupwizard.c:564 +msgid "Configure your account (step 1/1)" +msgstr "Настройте свою учётную запись (шаг 1/1)" -#: ../gtk/setupwizard.c:240 -msgid "Verifying" -msgstr "Проверка" +#: ../gtk/setupwizard.c:569 +msgid "Enter your sip username (step 1/1)" +msgstr "Введите ваше имя пользователя SIP (шаг 1/1)" -#: ../gtk/setupwizard.c:244 -msgid "Confirmation" -msgstr "Подтверждение" +#: ../gtk/setupwizard.c:573 +msgid "Enter account information (step 1/2)" +msgstr "Введи информация об учётной записи (шаг 1/2)" -#: ../gtk/setupwizard.c:249 -msgid "Creating your account" -msgstr "Создание аккаунта" +#: ../gtk/setupwizard.c:582 +msgid "Validation (step 2/2)" +msgstr "Проверка (шаг 2/2)" -#: ../gtk/setupwizard.c:253 -msgid "Now ready !" -msgstr "Готово !" +#: ../gtk/setupwizard.c:587 +msgid "Error" +msgstr "Ошибка" + +#: ../gtk/setupwizard.c:591 +msgid "Terminating" +msgstr "Завершение" #: ../gtk/incall_view.c:69 -#, fuzzy, c-format +#, c-format msgid "Call #%i" -msgstr "Звонк %s" +msgstr "Вызов #%i" -#: ../gtk/incall_view.c:127 +#: ../gtk/incall_view.c:129 #, c-format msgid "Transfer to call #%i with %s" -msgstr "" +msgstr "Перевести на #%i с %s" -#: ../gtk/incall_view.c:155 +#: ../gtk/incall_view.c:157 msgid "Transfer" -msgstr "" +msgstr "Перевести" -#: ../gtk/incall_view.c:271 +#: ../gtk/incall_view.c:273 msgid "Calling..." msgstr "Вызов..." -#: ../gtk/incall_view.c:274 ../gtk/incall_view.c:482 +#: ../gtk/incall_view.c:276 ../gtk/incall_view.c:484 msgid "00::00::00" msgstr "00::00::00" -#: ../gtk/incall_view.c:285 -#, fuzzy +#: ../gtk/incall_view.c:287 msgid "Incoming call" -msgstr "Входящий вызов" - -#: ../gtk/incall_view.c:322 -msgid "good" -msgstr "" +msgstr "Входящий вызов" #: ../gtk/incall_view.c:324 -msgid "average" -msgstr "" +msgid "good" +msgstr "хорошее" #: ../gtk/incall_view.c:326 -msgid "poor" -msgstr "" +msgid "average" +msgstr "среднее" #: ../gtk/incall_view.c:328 -msgid "very poor" -msgstr "" +msgid "poor" +msgstr "плохое" #: ../gtk/incall_view.c:330 +msgid "very poor" +msgstr "очень плохое" + +#: ../gtk/incall_view.c:332 msgid "too bad" -msgstr "" +msgstr "слишком плохое" -#: ../gtk/incall_view.c:331 ../gtk/incall_view.c:347 +#: ../gtk/incall_view.c:333 ../gtk/incall_view.c:349 msgid "unavailable" -msgstr "" +msgstr "недоступно" -#: ../gtk/incall_view.c:447 +#: ../gtk/incall_view.c:449 msgid "Secured by SRTP" -msgstr "" +msgstr "Защищено SRTP" -#: ../gtk/incall_view.c:453 +#: ../gtk/incall_view.c:455 #, c-format msgid "Secured by ZRTP - [auth token: %s]" -msgstr "" +msgstr "Защищено ZRTP - [токен: %s]" -#: ../gtk/incall_view.c:459 +#: ../gtk/incall_view.c:461 msgid "Set unverified" -msgstr "" +msgstr "Не проверен" -#: ../gtk/incall_view.c:459 ../gtk/main.ui.h:49 +#: ../gtk/incall_view.c:461 ../gtk/main.ui.h:3 msgid "Set verified" -msgstr "" +msgstr "Проверен" -#: ../gtk/incall_view.c:480 +#: ../gtk/incall_view.c:482 msgid "In conference" -msgstr "" +msgstr "В конференции" -#: ../gtk/incall_view.c:480 -#, fuzzy +#: ../gtk/incall_view.c:482 msgid "In call" msgstr "Соединен с" -#: ../gtk/incall_view.c:499 -#, fuzzy +#: ../gtk/incall_view.c:501 msgid "Paused call" -msgstr "Завершить вызов" +msgstr "Приостановленный вызов" -#: ../gtk/incall_view.c:511 +#: ../gtk/incall_view.c:513 #, c-format msgid "%02i::%02i::%02i" msgstr "%02i::%02i::%02i" -#: ../gtk/incall_view.c:527 +#: ../gtk/incall_view.c:529 msgid "Call ended." msgstr "Звонок закончен." -#: ../gtk/incall_view.c:584 +#: ../gtk/incall_view.c:586 msgid "Resume" -msgstr "" +msgstr "Продолжить" -#: ../gtk/incall_view.c:591 ../gtk/main.ui.h:45 +#: ../gtk/incall_view.c:593 ../gtk/main.ui.h:6 msgid "Pause" -msgstr "" +msgstr "Пауза" #: ../gtk/loginframe.c:93 #, c-format msgid "Please enter login information for %s" -msgstr "Введите информацию для входа %s:" +msgstr "Введите информацию для входа %s" #: ../gtk/main.ui.h:1 -msgid "#" -msgstr "#" +msgid "Callee name" +msgstr "Имя вызываемого абонента" #: ../gtk/main.ui.h:2 -msgid "*" -msgstr "*" - -#: ../gtk/main.ui.h:3 -msgid "0" -msgstr "0" - -#: ../gtk/main.ui.h:4 -msgid "1" -msgstr "1" - -#: ../gtk/main.ui.h:5 -msgid "2" -msgstr "2" - -#: ../gtk/main.ui.h:6 -msgid "3" -msgstr "3" +msgid "label" +msgstr "метка" #: ../gtk/main.ui.h:7 -msgid "4" -msgstr "4" +msgid "In call" +msgstr "Вызов" #: ../gtk/main.ui.h:8 -msgid "5" -msgstr "5" +msgid "Duration" +msgstr "Продолжительность" #: ../gtk/main.ui.h:9 -msgid "6" -msgstr "6" +msgid "Call quality rating" +msgstr "Уровень качества звонка" #: ../gtk/main.ui.h:10 -msgid "7" -msgstr "7" +msgid "_Options" +msgstr "_Настройки" #: ../gtk/main.ui.h:11 -msgid "8" -msgstr "8" +msgid "Enable video" +msgstr "Включить видео" #: ../gtk/main.ui.h:12 -msgid "9" -msgstr "9" +msgid "Enable self-view" +msgstr "Включить своё видео" #: ../gtk/main.ui.h:13 -#, fuzzy -msgid "Add contacts from directory" -msgstr "Добавить новый контакт из директории '%s'" +msgid "_Help" +msgstr "_Помощь" #: ../gtk/main.ui.h:14 -#, fuzzy -msgid "Callee name" -msgstr "Звонок закончен." +msgid "Show debug window" +msgstr "Показать окно отладки" #: ../gtk/main.ui.h:15 -msgid "Welcome !" -msgstr "Добро пожаловать!" +msgid "_Homepage" +msgstr "_Домашняя страница" #: ../gtk/main.ui.h:16 -msgid "A" -msgstr "A" +msgid "Check _Updates" +msgstr "Проверить _Обновления" #: ../gtk/main.ui.h:17 -msgid "ADSL" -msgstr "" +msgid "Account assistant" +msgstr "Помощник настройки учётной записи" #: ../gtk/main.ui.h:18 -#, fuzzy -msgid "Add contact" -msgstr "Найден %i контакт" +msgid "Initiate a new call" +msgstr "Совершить новый вызов" #: ../gtk/main.ui.h:19 -msgid "All users" -msgstr "" +msgid "Enter username, phone number, or full sip address" +msgstr "Введите имя пользователя, номер телефона или полный SIP-адрес" + +#: ../gtk/main.ui.h:20 +msgid "SIP address or phone number:" +msgstr "SIP-адрес или номер телефона:" #: ../gtk/main.ui.h:21 -msgid "Automatically log me in" -msgstr "Входить автоматически" +msgid "Lookup:" +msgstr "Поиск:" #: ../gtk/main.ui.h:22 -msgid "B" -msgstr "B" +msgid "in" +msgstr "в" -#: ../gtk/main.ui.h:23 ../gtk/parameters.ui.h:21 -msgid "C" -msgstr "C" +#: ../gtk/main.ui.h:23 +msgid "Search" +msgstr "Поиск" #: ../gtk/main.ui.h:24 -#, fuzzy -msgid "Call" -msgstr "Звонк %s" +msgid "Add contacts from directory" +msgstr "Добавить контакты из директории" #: ../gtk/main.ui.h:25 -msgid "Call quality rating" -msgstr "" +msgid "Add contact" +msgstr "Добавить контакт" #: ../gtk/main.ui.h:26 -msgid "Check _Updates" -msgstr "" +msgid "Contacts" +msgstr "Контакты" #: ../gtk/main.ui.h:27 -#, fuzzy -msgid "Contacts" -msgstr "Соединение" +msgid "Recent calls" +msgstr "Недавние вызовы" #: ../gtk/main.ui.h:28 msgid "D" msgstr "D" +#: ../gtk/main.ui.h:29 +msgid "#" +msgstr "#" + #: ../gtk/main.ui.h:30 -msgid "Default" -msgstr "По умолчанию" +msgid "0" +msgstr "0" #: ../gtk/main.ui.h:31 -msgid "Duration" -msgstr "Продолжительность" +msgid "*" +msgstr "*" -#: ../gtk/main.ui.h:32 -msgid "Enable self-view" -msgstr "Включить видео " +#: ../gtk/main.ui.h:32 ../gtk/parameters.ui.h:7 +msgid "C" +msgstr "C" #: ../gtk/main.ui.h:33 -#, fuzzy -msgid "Enable video" -msgstr "Включен" +msgid "9" +msgstr "9" #: ../gtk/main.ui.h:34 -msgid "Enter username, phone number, or full sip address" -msgstr "Введите имя пользователя, " +msgid "8" +msgstr "8" #: ../gtk/main.ui.h:35 -#, fuzzy -msgid "Fiber Channel" -msgstr "" -"ADSL\n" -"Выделенный канал" +msgid "7" +msgstr "7" #: ../gtk/main.ui.h:36 -msgid "In call" -msgstr "Входящий звонок" +msgid "B" +msgstr "B" #: ../gtk/main.ui.h:37 -msgid "Initiate a new call" -msgstr "" +msgid "6" +msgstr "6" #: ../gtk/main.ui.h:38 -msgid "Internet connection:" -msgstr "Интернет-соединение:" +msgid "5" +msgstr "5" #: ../gtk/main.ui.h:39 -msgid "Keypad" -msgstr "" +msgid "4" +msgstr "4" #: ../gtk/main.ui.h:40 -msgid "Login information" -msgstr "Информация " +msgid "A" +msgstr "A" #: ../gtk/main.ui.h:41 -msgid "Lookup:" -msgstr "Поиск:" +msgid "3" +msgstr "3" #: ../gtk/main.ui.h:42 -msgid "My current identity:" -msgstr "Текущий идентификатор:" +msgid "2" +msgstr "2" #: ../gtk/main.ui.h:43 -#, fuzzy -msgid "Online users" -msgstr "" -"Все пользователи\n" -"Пользователи в сети" +msgid "1" +msgstr "1" #: ../gtk/main.ui.h:44 -msgid "Password" -msgstr "Пароль" +msgid "Keypad" +msgstr "Номеронабиратель" + +#: ../gtk/main.ui.h:45 +msgid "My current identity:" +msgstr "Мой текущий идентификатор:" #: ../gtk/main.ui.h:46 -#, fuzzy -msgid "Recent calls" -msgstr "Входящий звонок" - -#: ../gtk/main.ui.h:47 -msgid "SIP address or phone number:" -msgstr "SIP-адрес или номер телефона." - -#: ../gtk/main.ui.h:48 -#, fuzzy -msgid "Search" -msgstr "Поиск:" - -#: ../gtk/main.ui.h:50 -#, fuzzy -msgid "Show debug window" -msgstr "Linphone окно отладки" - -#: ../gtk/main.ui.h:51 msgid "Username" msgstr "Имя пользователя" +#: ../gtk/main.ui.h:47 +msgid "Password" +msgstr "Пароль" + +#: ../gtk/main.ui.h:48 +msgid "Internet connection:" +msgstr "Интернет-соединение:" + +#: ../gtk/main.ui.h:49 +msgid "Automatically log me in" +msgstr "Входить автоматически" + +#: ../gtk/main.ui.h:50 +msgid "Login information" +msgstr "Информация для входа" + +#: ../gtk/main.ui.h:51 +msgid "Welcome !" +msgstr "Добро пожаловать!" + #: ../gtk/main.ui.h:52 -#, fuzzy -msgid "_Help" -msgstr "Помощь" +msgid "All users" +msgstr "Все пользователи" #: ../gtk/main.ui.h:53 -msgid "_Homepage" -msgstr "" +msgid "Online users" +msgstr "Пользователи в сети" #: ../gtk/main.ui.h:54 -msgid "_Options" -msgstr "" +msgid "ADSL" +msgstr "ADSL" #: ../gtk/main.ui.h:55 -msgid "in" -msgstr "в" +msgid "Fiber Channel" +msgstr "Оптоволокно" #: ../gtk/main.ui.h:56 -msgid "label" -msgstr "метка" +msgid "Default" +msgstr "По умолчанию" #: ../gtk/about.ui.h:1 -msgid "(C) Belledonne Communications,2010\n" -msgstr "" - -#: ../gtk/about.ui.h:3 msgid "About linphone" msgstr "Про linphone" +#: ../gtk/about.ui.h:2 +msgid "(C) Belledonne Communications,2010\n" +msgstr "(C) Belledonne Communications,2010\n" + #: ../gtk/about.ui.h:4 -#, fuzzy msgid "An internet video phone using the standard SIP (rfc3261) protocol." -msgstr "Интернет видео телефон использующий стандарт SIP (rfc3261) протокола." +msgstr "" +"Видео-телефон для интернета, использующий стандартный протокол SIP (rfc3261)." #: ../gtk/about.ui.h:5 msgid "" @@ -818,267 +854,292 @@ msgstr "" "cs: Petr Pisar \n" "hu: anonymous\n" -#: ../gtk/contact.ui.h:1 -#, fuzzy -msgid "Contact information" -msgstr "Контактная информация" - #: ../gtk/contact.ui.h:2 -msgid "Allow this contact to see my presence status" -msgstr "Разрешить этому контакту видеть мой статус присутствия" +msgid "SIP Address" +msgstr "SIP-адрес" + +#: ../gtk/contact.ui.h:3 +msgid "Show this contact presence status" +msgstr "Показывать статус присутствия этого контакта" #: ../gtk/contact.ui.h:4 -msgid "SIP Address" -msgstr "SIP Адрес" +msgid "Allow this contact to see my presence status" +msgstr "Разрешить этому контакту видеть статус моего присутствия" #: ../gtk/contact.ui.h:5 -msgid "Show this contact presence status" -msgstr "Показывать этому контакту статус присутствия" +msgid "Contact information" +msgstr "Контактная информация" #: ../gtk/log.ui.h:1 msgid "Linphone debug window" -msgstr "Linphone окно отладки" +msgstr "Окно отладки linphone" + +#: ../gtk/log.ui.h:2 +msgid "Scroll to end" +msgstr "Прокрутите до конца" #: ../gtk/password.ui.h:1 msgid "Linphone - Authentication required" -msgstr "Linphone - Регистрация необходима" +msgstr "Linphone - Необходима аутентификация" #: ../gtk/password.ui.h:2 -msgid "Password:" -msgstr "Пароль:" - -#: ../gtk/password.ui.h:3 msgid "Please enter the domain password" msgstr "Введите пароль" -#: ../gtk/password.ui.h:4 +#: ../gtk/password.ui.h:3 msgid "UserID" msgstr "UserID" #: ../gtk/call_logs.ui.h:1 -#, fuzzy -msgid "Call back" -msgstr "Звонк %s" - -#: ../gtk/call_logs.ui.h:2 msgid "Call history" msgstr "История звонков" -#: ../gtk/call_logs.ui.h:3 +#: ../gtk/call_logs.ui.h:2 msgid "Clear all" -msgstr "" +msgstr "Очистить всё" + +#: ../gtk/call_logs.ui.h:3 +msgid "Call back" +msgstr "Перезвонить" #: ../gtk/sip_account.ui.h:1 -msgid "Configure a SIP account" -msgstr "Настроить учетную запись SIP" +msgid "Linphone - Configure a SIP account" +msgstr "Linphone - Настроить учётную запись SIP" #: ../gtk/sip_account.ui.h:2 -msgid "Linphone - Configure a SIP account" -msgstr "Linphone - Настроить учетную запись SIP" - -#: ../gtk/sip_account.ui.h:3 -msgid "Looks like sip:" -msgstr "" - -#: ../gtk/sip_account.ui.h:4 -msgid "Looks like sip:@" -msgstr "" - -#: ../gtk/sip_account.ui.h:5 -msgid "Publish presence information" -msgstr "Показывать статус присутствия" - -#: ../gtk/sip_account.ui.h:6 -msgid "Register" -msgstr "" - -#: ../gtk/sip_account.ui.h:7 -msgid "Registration duration (sec):" -msgstr "Продолжительность регистрации (сек):" - -#: ../gtk/sip_account.ui.h:8 -msgid "Route (optional):" -msgstr "Маршрут (необязательно):" - -#: ../gtk/sip_account.ui.h:9 -msgid "SIP Proxy address:" -msgstr "Адрес SIP прокси:" - -#: ../gtk/sip_account.ui.h:10 msgid "Your SIP identity:" msgstr "Идентификатор SIP:" -#: ../gtk/sip_account.ui.h:11 +#: ../gtk/sip_account.ui.h:3 +msgid "Looks like sip:@" +msgstr "Похоже на sip:@" + +#: ../gtk/sip_account.ui.h:4 msgid "sip:" msgstr "sip:" +#: ../gtk/sip_account.ui.h:5 +msgid "SIP Proxy address:" +msgstr "Адрес SIP-прокси:" + +#: ../gtk/sip_account.ui.h:6 +msgid "Looks like sip:" +msgstr "Похоже на sip:" + +#: ../gtk/sip_account.ui.h:7 +msgid "Route (optional):" +msgstr "Маршрут (необязательно):" + +#: ../gtk/sip_account.ui.h:8 +msgid "Registration duration (sec):" +msgstr "Продолжительность регистрации (сек):" + +#: ../gtk/sip_account.ui.h:9 +msgid "Register" +msgstr "Зарегистрироваться" + +#: ../gtk/sip_account.ui.h:10 +msgid "Publish presence information" +msgstr "Опубликовывать статус присутствия" + +#: ../gtk/sip_account.ui.h:11 +msgid "Configure a SIP account" +msgstr "Настроить учётную запись SIP" + #: ../gtk/chatroom.ui.h:1 msgid "Send" msgstr "Отправить" #: ../gtk/parameters.ui.h:1 -msgid "0 stands for \"unlimited\"" -msgstr "0 означает \"безлимитный\"" +msgid "default soundcard" +msgstr "звуковая карта по умолчанию" #: ../gtk/parameters.ui.h:2 -msgid "Audio" -msgstr "Звук" +msgid "a sound card" +msgstr "звуковая карта" #: ../gtk/parameters.ui.h:3 -msgid "Bandwidth control" -msgstr "Пропускная способность" +msgid "default camera" +msgstr "камера по умолчаию" #: ../gtk/parameters.ui.h:4 -msgid "Codecs" -msgstr "Кодеки" - -#: ../gtk/parameters.ui.h:5 -msgid "Default identity" -msgstr "Идентификатор по умолчанию" - -#: ../gtk/parameters.ui.h:6 -msgid "Language" -msgstr "Язык" - -#: ../gtk/parameters.ui.h:7 -#, fuzzy -msgid "Level" -msgstr "Язык" - -#: ../gtk/parameters.ui.h:8 -msgid "NAT and Firewall" -msgstr "NAT и брандмауэр" - -#: ../gtk/parameters.ui.h:9 -msgid "Network protocol and ports" -msgstr "" - -#: ../gtk/parameters.ui.h:10 -msgid "Privacy" -msgstr "Секретность" - -#: ../gtk/parameters.ui.h:11 -msgid "Proxy accounts" -msgstr "Учетные записи Proxy" - -#: ../gtk/parameters.ui.h:12 -msgid "Transport" -msgstr "Транспорт" - -#: ../gtk/parameters.ui.h:13 -msgid "Video" -msgstr "Видео" - -#: ../gtk/parameters.ui.h:14 -msgid "" -"Adaptive rate control is a technique to dynamically guess the available " -"bandwidth during a call." -msgstr "" - -#: ../gtk/parameters.ui.h:15 -msgid "ALSA special device (optional):" -msgstr "Специальное устройство ALSA (необязательно)" - -#: ../gtk/parameters.ui.h:16 -msgid "Add" -msgstr "Добавить" - -#: ../gtk/parameters.ui.h:17 -msgid "Audio RTP/UDP:" -msgstr "Аудио RTP/UDP" - -#: ../gtk/parameters.ui.h:18 -#, fuzzy -msgid "Audio codecs" -msgstr "" -"Аудио кодеки\n" -"Видео кодеки" - -#: ../gtk/parameters.ui.h:19 -msgid "Behind NAT / Firewall (specify gateway IP below)" -msgstr "За NAT / брандмауэр (указать IP-адрес шлюза ниже)" - -#: ../gtk/parameters.ui.h:20 -msgid "Behind NAT / Firewall (use STUN to resolve)" -msgstr "За NAT / брандмауэр (исползовать STUN)" - -#: ../gtk/parameters.ui.h:22 msgid "CIF" msgstr "CIF" +#: ../gtk/parameters.ui.h:5 +msgid "Audio codecs" +msgstr "Аудио кодеки" + +#: ../gtk/parameters.ui.h:6 +msgid "Video codecs" +msgstr "Видео кодеки" + +#: ../gtk/parameters.ui.h:8 +msgid "SIP (UDP)" +msgstr "SIP (UDP)" + +#: ../gtk/parameters.ui.h:9 +msgid "SIP (TCP)" +msgstr "SIP (TCP)" + +#: ../gtk/parameters.ui.h:10 +msgid "SIP (TLS)" +msgstr "SIP (TLS)" + +#: ../gtk/parameters.ui.h:11 +msgid "Settings" +msgstr "Настройки" + +#: ../gtk/parameters.ui.h:12 +msgid "Set Maximum Transmission Unit:" +msgstr "Установить MTU:" + +#: ../gtk/parameters.ui.h:13 +msgid "Send DTMFs as SIP info" +msgstr "Отправлять DTFM как SIP Info" + +#: ../gtk/parameters.ui.h:14 +msgid "Use IPv6 instead of IPv4" +msgstr "Использовать IPv6 вместо IPv4" + +#: ../gtk/parameters.ui.h:15 +msgid "Transport" +msgstr "Транспорт" + +#: ../gtk/parameters.ui.h:16 +msgid "Media encryption type" +msgstr "Тип шифрования потока" + +#: ../gtk/parameters.ui.h:17 +msgid "Tunnel" +msgstr "Туннель" + +#: ../gtk/parameters.ui.h:18 +msgid "edit" +msgstr "редактировать" + +#: ../gtk/parameters.ui.h:19 +msgid "Video RTP/UDP:" +msgstr "Видео RTP/UDP:" + +#: ../gtk/parameters.ui.h:20 +msgid "Audio RTP/UDP:" +msgstr "Аудио RTP/UDP:" + +#: ../gtk/parameters.ui.h:21 +msgid "Network protocol and ports" +msgstr "Протокол и порты" + +#: ../gtk/parameters.ui.h:22 +msgid "Direct connection to the Internet" +msgstr "Прямое подключение к Интернету" + #: ../gtk/parameters.ui.h:23 -msgid "Capture device:" -msgstr "Устройство захвата:" +msgid "Behind NAT / Firewall (specify gateway IP below)" +msgstr "За NAT / брандмауэром (укажите IP-адрес шлюза ниже)" #: ../gtk/parameters.ui.h:24 -msgid "Codecs" -msgstr "Кодеки" +msgid "Public IP address:" +msgstr "Внешний IP-адрес:" #: ../gtk/parameters.ui.h:25 -msgid "Direct connection to the Internet" -msgstr "Прямое подключение к Интернет" +msgid "Behind NAT / Firewall (use STUN to resolve)" +msgstr "За NAT / брандмауэром (использовать STUN)" #: ../gtk/parameters.ui.h:26 -msgid "Disable" -msgstr "Выключить" +msgid "Stun server:" +msgstr "Сервер STUN:" #: ../gtk/parameters.ui.h:27 -msgid "Done" -msgstr "Готово" +msgid "NAT and Firewall" +msgstr "NAT и брандмауэр" #: ../gtk/parameters.ui.h:28 -msgid "Download speed limit in Kbit/sec:" -msgstr "Ограничение скорости входящего потока kbit/sec" - -#: ../gtk/parameters.ui.h:29 -msgid "Edit" -msgstr "Редактировать" - -#: ../gtk/parameters.ui.h:30 -msgid "Enable" -msgstr "Включить" - -#: ../gtk/parameters.ui.h:31 -msgid "Enable adaptive rate control" -msgstr "" - -#: ../gtk/parameters.ui.h:32 -msgid "Enable echo cancellation" -msgstr "Включить подавление эхо" - -#: ../gtk/parameters.ui.h:33 -msgid "Erase all passwords" -msgstr "Стереть все пароли" - -#: ../gtk/parameters.ui.h:34 -msgid "Manage SIP Accounts" -msgstr "Управление учетными записями SIP" - -#: ../gtk/parameters.ui.h:35 -msgid "Media encryption type" -msgstr "" - -#: ../gtk/parameters.ui.h:36 -msgid "Multimedia settings" -msgstr "Настройка мультимедиа" - -#: ../gtk/parameters.ui.h:37 msgid "Network settings" msgstr "Настройки сети" -#: ../gtk/parameters.ui.h:38 -msgid "Playback device:" -msgstr "Устройство воспроизведения" +#: ../gtk/parameters.ui.h:29 +msgid "Ring sound:" +msgstr "Звук звонка:" -#: ../gtk/parameters.ui.h:39 +#: ../gtk/parameters.ui.h:30 +msgid "ALSA special device (optional):" +msgstr "Специальное устройство ALSA (необязательно):" + +#: ../gtk/parameters.ui.h:31 +msgid "Capture device:" +msgstr "Устройство захвата:" + +#: ../gtk/parameters.ui.h:32 +msgid "Ring device:" +msgstr "Устройство звонка:" + +#: ../gtk/parameters.ui.h:33 +msgid "Playback device:" +msgstr "Устройство воспроизведения:" + +#: ../gtk/parameters.ui.h:34 +msgid "Enable echo cancellation" +msgstr "Включить подавление эхо" + +#: ../gtk/parameters.ui.h:35 +msgid "Audio" +msgstr "Звук" + +#: ../gtk/parameters.ui.h:36 +msgid "Video input device:" +msgstr "Устройство захвата видео:" + +#: ../gtk/parameters.ui.h:37 msgid "Prefered video resolution:" msgstr "Предпочтительное разрешение видео:" +#: ../gtk/parameters.ui.h:38 +msgid "Video" +msgstr "Видео" + +#: ../gtk/parameters.ui.h:39 +msgid "Multimedia settings" +msgstr "Настройки мультимедиа" + #: ../gtk/parameters.ui.h:40 -msgid "Public IP address:" -msgstr "Выделенный IP-адрес" +msgid "This section defines your SIP address when not using a SIP account" +msgstr "" +"Эта секция устанавливает ваш SIP-адрес, когда вы не используете SIP-аккаунт" #: ../gtk/parameters.ui.h:41 +msgid "Your display name (eg: John Doe):" +msgstr "Отображаемое имя (напр.: Иван Сидоров):" + +#: ../gtk/parameters.ui.h:42 +msgid "Your username:" +msgstr "Имя пользователя:" + +#: ../gtk/parameters.ui.h:43 +msgid "Your resulting SIP address:" +msgstr "Результирующий SIP-адрес:" + +#: ../gtk/parameters.ui.h:44 +msgid "Default identity" +msgstr "Идентификатор по умолчанию" + +#: ../gtk/parameters.ui.h:45 +msgid "Wizard" +msgstr "Мастер" + +#: ../gtk/parameters.ui.h:46 +msgid "Add" +msgstr "Добавить" + +#: ../gtk/parameters.ui.h:47 +msgid "Edit" +msgstr "Редактировать" + +#: ../gtk/parameters.ui.h:48 +msgid "Remove" +msgstr "Удалить" + +#: ../gtk/parameters.ui.h:49 msgid "" "Register to FONICS\n" "virtual network !" @@ -1086,120 +1147,97 @@ msgstr "" "Регистрация в \n" "виртуальной сети FONICS!" -#: ../gtk/parameters.ui.h:43 -msgid "Remove" -msgstr "Удалить" - -#: ../gtk/parameters.ui.h:44 -msgid "Ring device:" -msgstr "Устройство звонка:" - -#: ../gtk/parameters.ui.h:45 -msgid "Ring sound:" -msgstr "Звук звонка:" - -#: ../gtk/parameters.ui.h:46 -#, fuzzy -msgid "SIP (TCP)" -msgstr "SIP (UDP):" - -#: ../gtk/parameters.ui.h:47 -#, fuzzy -msgid "SIP (TLS)" -msgstr "SIP (UDP):" - -#: ../gtk/parameters.ui.h:48 -#, fuzzy -msgid "SIP (UDP)" -msgstr "SIP (UDP):" - -#: ../gtk/parameters.ui.h:49 -msgid "Send DTMFs as SIP info" -msgstr "Отправить DTFM как SIP-инфо" - -#: ../gtk/parameters.ui.h:50 -msgid "Set Maximum Transmission Unit:" -msgstr "Установка MTU (Максимально Передаваемый Блок)" - #: ../gtk/parameters.ui.h:51 -msgid "Settings" -msgstr "Настройки:" +msgid "Proxy accounts" +msgstr "Учетные записи прокси" #: ../gtk/parameters.ui.h:52 -msgid "Show advanced settings" -msgstr "" +msgid "Erase all passwords" +msgstr "Стереть все пароли" #: ../gtk/parameters.ui.h:53 -msgid "Stun server:" -msgstr "Stun сервер:" +msgid "Privacy" +msgstr "Конфеденциальность" #: ../gtk/parameters.ui.h:54 -msgid "This section defines your SIP address when not using a SIP account" -msgstr "Поле определяет ваш SIP адрес когда вы не используете SIP аккаунт" +msgid "Manage SIP Accounts" +msgstr "Управление учётными записями SIP" #: ../gtk/parameters.ui.h:55 -msgid "Upload speed limit in Kbit/sec:" -msgstr "Ограничение исходящего потока kbit/sec:" +msgid "Enable" +msgstr "Включить" #: ../gtk/parameters.ui.h:56 -msgid "Use IPv6 instead of IPv4" -msgstr "Использовать IPv6 вместо IPv4" +msgid "Disable" +msgstr "Выключить" #: ../gtk/parameters.ui.h:57 -msgid "User interface" -msgstr "Интерфейс:" +msgid "Codecs" +msgstr "Кодеки" #: ../gtk/parameters.ui.h:58 -msgid "Video RTP/UDP:" -msgstr "Видео RTP/UDP:" +msgid "0 stands for \"unlimited\"" +msgstr "0 означает \"безлимитный\"" #: ../gtk/parameters.ui.h:59 -#, fuzzy -msgid "Video codecs" -msgstr "" -"Аудио кодеки\n" -"Видео кодеки" +msgid "Upload speed limit in Kbit/sec:" +msgstr "Ограничение исходящего потока в кбит/сек:" #: ../gtk/parameters.ui.h:60 -msgid "Video input device:" -msgstr "Видео устройство вывода:" +msgid "Download speed limit in Kbit/sec:" +msgstr "Ограничение скорости входящего потока в кбит/сек" #: ../gtk/parameters.ui.h:61 -msgid "Your display name (eg: John Doe):" -msgstr "Отображаемое имя (Иван Сидоров):" +msgid "Enable adaptive rate control" +msgstr "Включить адаптивный контроль скорости" #: ../gtk/parameters.ui.h:62 -msgid "Your resulting SIP address:" -msgstr "Результирующий sip адрес:" +msgid "" +"Adaptive rate control is a technique to dynamically guess the available " +"bandwidth during a call." +msgstr "" +"Адаптивное управление скоростью - это техника, позволяющая динамически " +"определять доступную пропускную способность сети во время звонка." #: ../gtk/parameters.ui.h:63 -msgid "Your username:" -msgstr "Имя пользователя:" +msgid "Bandwidth control" +msgstr "Управление скоростью сети" #: ../gtk/parameters.ui.h:64 -#, fuzzy -msgid "a sound card" -msgstr "звуковая карта\n" +msgid "Codecs" +msgstr "Кодеки" #: ../gtk/parameters.ui.h:65 -msgid "default camera" -msgstr "камера по умолчаию" +msgid "Language" +msgstr "Язык" #: ../gtk/parameters.ui.h:66 -msgid "default soundcard" -msgstr "звуковая карта по умолчанию" +msgid "Show advanced settings" +msgstr "Показывать расширенные настройки" + +#: ../gtk/parameters.ui.h:67 +msgid "Level" +msgstr "Уровень" + +#: ../gtk/parameters.ui.h:68 +msgid "User interface" +msgstr "Интерфейс пользователя" + +#: ../gtk/parameters.ui.h:69 +msgid "Done" +msgstr "Готово" #: ../gtk/buddylookup.ui.h:1 -msgid "Search somebody" -msgstr "Поиск" +msgid "Search contacts in directory" +msgstr "Искать контакты в директории" #: ../gtk/buddylookup.ui.h:2 msgid "Add to my list" -msgstr "Добавить в список" +msgstr "Добавить в мой список" #: ../gtk/buddylookup.ui.h:3 -msgid "Search contacts in directory" -msgstr "Поиск контактов в директории" +msgid "Search somebody" +msgstr "Найти кого-нибудь" #: ../gtk/waiting.ui.h:1 msgid "Linphone" @@ -1215,7 +1253,7 @@ msgstr "отмененный" #: ../coreapi/linphonecore.c:190 msgid "completed" -msgstr "заверщённый" +msgstr "завершённый" #: ../coreapi/linphonecore.c:193 msgid "missed" @@ -1234,67 +1272,63 @@ msgstr "" "От: %s\n" "Кому: %s\n" "Статус: %s\n" -"Длительность: %i мн %i сек\n" +"Длительность: %i мин %i сек\n" #: ../coreapi/linphonecore.c:199 msgid "Outgoing call" msgstr "Исходящий звонок" -#: ../coreapi/linphonecore.c:1088 +#: ../coreapi/linphonecore.c:1105 msgid "Ready" msgstr "Готов" -#: ../coreapi/linphonecore.c:1831 +#: ../coreapi/linphonecore.c:1848 msgid "Looking for telephone number destination..." -msgstr "Поиск назначения для телефонного номера.." +msgstr "Поиск адреса для телефонного номера..." -#: ../coreapi/linphonecore.c:1834 +#: ../coreapi/linphonecore.c:1851 msgid "Could not resolve this number." -msgstr "Не может принять решение по этому номеру." +msgstr "Не могу найти этот номер." -#: ../coreapi/linphonecore.c:1878 +#: ../coreapi/linphonecore.c:1895 msgid "" "Could not parse given sip address. A sip url usually looks like sip:" "user@domain" msgstr "" -"Не могу опознать sip адрес. SIP url обычно выглядит как: " +"Не могу опознать sip адрес. SIP-URL обычно выглядит как sip:" +"username@domainname" -#: ../coreapi/linphonecore.c:2025 +#: ../coreapi/linphonecore.c:2052 msgid "Contacting" msgstr "Соединение" -#: ../coreapi/linphonecore.c:2032 -#, fuzzy +#: ../coreapi/linphonecore.c:2059 msgid "Could not call" -msgstr "невозможно позвонить" +msgstr "Не удалось позвонить" -#: ../coreapi/linphonecore.c:2140 +#: ../coreapi/linphonecore.c:2167 msgid "Sorry, we have reached the maximum number of simultaneous calls" -msgstr "" +msgstr "Извините, мы превысили максимальное количество одновременных вызовов" -#: ../coreapi/linphonecore.c:2270 +#: ../coreapi/linphonecore.c:2297 msgid "Modifying call parameters..." -msgstr "" +msgstr "Изменение параметров вызова..." -#: ../coreapi/linphonecore.c:2366 +#: ../coreapi/linphonecore.c:2393 msgid "Connected." msgstr "Соединён." -#: ../coreapi/linphonecore.c:2389 -#, fuzzy +#: ../coreapi/linphonecore.c:2416 msgid "Call aborted" -msgstr "отмененный" +msgstr "Вызов отменён" -#: ../coreapi/linphonecore.c:2530 -#, fuzzy +#: ../coreapi/linphonecore.c:2557 msgid "Could not pause the call" -msgstr "невозможно позвонить" +msgstr "Не удалось приостановить вызов" -#: ../coreapi/linphonecore.c:2535 -#, fuzzy +#: ../coreapi/linphonecore.c:2562 msgid "Pausing the current call..." -msgstr "Показать текущий звонок" +msgstr "Приостановление текущего вызова..." #: ../coreapi/misc.c:147 msgid "" @@ -1303,11 +1337,11 @@ msgid "" "is missing and linphone needs it. Please execute\n" "'modprobe snd-pcm-oss' as root to load it." msgstr "" -"Ваш компьютер использует ALSA звуковой драйвер.\n" -"Это лучший выбор. Однако, pcm oss модуль эмуляции\n" -"не найден и он нужен для linphone.\n" -"Пожалуйста, выполните от пользователя root 'modprobe snd-pcm-oss' чтоб " -"загрузить его." +"Ваш компьютер использует звуковой драйвер ALSA.\n" +"Это лучший выбор. Однако, модуль эмуляции PCM OSS\n" +"не найден, а он нужен для linphone.\n" +"Пожалуйста, выполните от имени пользователя root команду 'modprobe snd-pcm-" +"oss', чтобы загрузить его." #: ../coreapi/misc.c:150 msgid "" @@ -1316,13 +1350,13 @@ msgid "" "is missing and linphone needs it. Please execute\n" " 'modprobe snd-mixer-oss' as root to load it." msgstr "" -"Ваш компьютер использует ALSA звуковой драйвер.\n" -"Это лучший выбор. Однако, oss микшера модуля\n" -"не найден и он нужен для linphone.\n" -"Пожалуйста, выполните от пользователя root 'modprobe snd-pcm-oss' чтоб " -"загрузить его." +"Ваш компьютер использует звуковой драйвер ALSA.\n" +"Это лучший выбор. Однако, модуль микшера OSS\n" +"не найден, а он нужен для linphone.\n" +"Пожалуйста, выполните от имени пользователя root команду 'modprobe snd-pcm-" +"oss' чтобы загрузить его." -#: ../coreapi/misc.c:478 +#: ../coreapi/misc.c:479 msgid "Stun lookup in progress..." msgstr "Идет поиск Stun..." @@ -1374,87 +1408,86 @@ msgstr "В ожидании" msgid "Unknown-bug" msgstr "Неизвестная ошибка" -#: ../coreapi/proxy.c:192 +#: ../coreapi/proxy.c:196 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." msgstr "" -"Введеный SIP-адрес прокси является недействительным, он должен начинаться с " +"Введеный адрес SIP-прокси является недействительным, он должен выглядеть как " "\"sip:имя_хоста\"" -#: ../coreapi/proxy.c:198 +#: ../coreapi/proxy.c:202 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "" -"Неверные параметры идентификации\n" -"Должно выглядеть как sip:username@proxydomain" +"Неверные параметры идентификации SIP.\n" +"Они должны выглядеть как sip:username@proxydomain, например such as sip:" +"alice@example.net" -#: ../coreapi/proxy.c:690 +#: ../coreapi/proxy.c:702 #, c-format msgid "Could not login as %s" -msgstr "Невозможно зайти как: %s" +msgstr "Невозможно зайти как %s" #: ../coreapi/callbacks.c:206 -#, fuzzy msgid "is contacting you" -msgstr "контактирует с вами." +msgstr "пытается связаться с вами" #: ../coreapi/callbacks.c:207 msgid " and asked autoanswer." -msgstr "" +msgstr " и ответил автоответчик." #: ../coreapi/callbacks.c:207 msgid "." -msgstr "" +msgstr "." #: ../coreapi/callbacks.c:266 -#, fuzzy msgid "Remote ringing." -msgstr "Registrierung" +msgstr "Абонент вызывается." #: ../coreapi/callbacks.c:282 -#, fuzzy msgid "Remote ringing..." -msgstr "Registrierung" +msgstr "Абонент вызывается..." #: ../coreapi/callbacks.c:293 msgid "Early media." -msgstr "Early media" +msgstr "Гудки." #: ../coreapi/callbacks.c:331 -#, fuzzy, c-format +#, c-format msgid "Call with %s is paused." -msgstr "Обмен сообщениями с %s" +msgstr "Вызов %s приостановлен." #: ../coreapi/callbacks.c:342 #, c-format msgid "Call answered by %s - on hold." -msgstr "" +msgstr "Вызов отвечен %s - в ожидании." #: ../coreapi/callbacks.c:357 -#, fuzzy msgid "Call resumed." -msgstr "Разговор окончен" +msgstr "Разговор продолжен." #: ../coreapi/callbacks.c:362 -#, fuzzy, c-format +#, c-format msgid "Call answered by %s." -msgstr "" -"Позвонить\n" -"или ответить" +msgstr "Вызов отвечен %s." + +#: ../coreapi/callbacks.c:377 +msgid "Incompatible, check codecs..." +msgstr "Несовместимо, проверьте кодеки..." #: ../coreapi/callbacks.c:432 msgid "We are being paused..." -msgstr "" +msgstr "Мы на паузе..." #: ../coreapi/callbacks.c:436 msgid "We have been resumed..." -msgstr "" +msgstr "Наш вызов продолжен..." #: ../coreapi/callbacks.c:441 msgid "Call has been updated by remote..." -msgstr "" +msgstr "Вызов обновлён вызываемым абонентом..." #: ../coreapi/callbacks.c:473 msgid "Call terminated." @@ -1471,74 +1504,106 @@ msgstr "Пользователь временно недоступен." #. char *retrymsg=_("%s. Retry after %i minute(s)."); #: ../coreapi/callbacks.c:483 msgid "User does not want to be disturbed." -msgstr "Пользователь не хочет чтоб его беспокоили." +msgstr "Абонент не хочет отвечать." #: ../coreapi/callbacks.c:484 msgid "Call declined." msgstr "Звонок отклонён." #: ../coreapi/callbacks.c:496 -#, fuzzy msgid "No response." -msgstr "время ожидания истекло" +msgstr "Нет ответа." #: ../coreapi/callbacks.c:500 msgid "Protocol error." -msgstr "" +msgstr "Ошибка протокола." #: ../coreapi/callbacks.c:516 -#, fuzzy msgid "Redirected" -msgstr "Переадресован на %s..." +msgstr "Переадресован" -#: ../coreapi/callbacks.c:526 -msgid "Not found" -msgstr "" - -#: ../coreapi/callbacks.c:551 +#: ../coreapi/callbacks.c:550 msgid "No common codecs" -msgstr "" +msgstr "Нет общих кодеков" -#: ../coreapi/callbacks.c:557 -#, fuzzy +#: ../coreapi/callbacks.c:556 msgid "Call failed." -msgstr "Anruf annulliert" +msgstr "Не удалось совершить вызов." -#: ../coreapi/callbacks.c:631 +#: ../coreapi/callbacks.c:633 #, c-format msgid "Registration on %s successful." msgstr "Регистрация на %s прошла успешно." -#: ../coreapi/callbacks.c:632 +#: ../coreapi/callbacks.c:634 #, c-format msgid "Unregistration on %s done." msgstr "Отмена регистрации на %s завершена." -#: ../coreapi/callbacks.c:648 +#: ../coreapi/callbacks.c:650 msgid "no response timeout" msgstr "время ожидания истекло" -#: ../coreapi/callbacks.c:651 +#: ../coreapi/callbacks.c:653 #, c-format msgid "Registration on %s failed: %s" msgstr "Регистрация на %s не удалась: %s" -#: ../coreapi/sal_eXosip2.c:873 ../coreapi/sal_eXosip2.c:875 -#, fuzzy +#: ../coreapi/sal_eXosip2.c:870 ../coreapi/sal_eXosip2.c:872 msgid "Authentication failure" -msgstr "Информация аунтефикации" +msgstr "Ошибка аутентификации" #: ../coreapi/linphonecall.c:128 -#, fuzzy, c-format +#, c-format msgid "Authentication token is %s" -msgstr "Информация аунтефикации" +msgstr "Аутентификационный токен: %s" -#: ../coreapi/linphonecall.c:1560 +#: ../coreapi/linphonecall.c:1573 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." -msgstr[0] "У вас пропущено %i звонков." -msgstr[1] "У вас пропущено %i звонков." +msgstr[0] "У вас пропущен %i звонок." +msgstr[1] "У вас пропущено %i звонка." +msgstr[2] "У вас пропущено %i звонков." + +#~ msgid "Please choose a username:" +#~ msgstr "Выберите имя пользователя:" + +#~ msgid "Checking if '%s' is available..." +#~ msgstr "Проверка доступности '%s'..." + +#~ msgid "Please wait..." +#~ msgstr "Ждите..." + +#~ msgid "Sorry this username already exists. Please try a new one." +#~ msgstr "Такое имя пользователя уже существует. Попробуйте выбрать другое." + +#~ msgid "Ok !" +#~ msgstr "Ок!" + +#~ msgid "Communication problem, please try again later." +#~ msgstr "Проблемы со связью, повторите попытку позже." + +#~ msgid "Choosing a username" +#~ msgstr "Имя пользователя:" + +#~ msgid "Verifying" +#~ msgstr "Проверка" + +#~ msgid "Confirmation" +#~ msgstr "Подтверждение" + +#~ msgid "Creating your account" +#~ msgstr "Создание аккаунта" + +#~ msgid "Now ready !" +#~ msgstr "Готово !" + +#~ msgid "Call" +#~ msgstr "Вызов" + +#~ msgid "Not found" +#~ msgstr "Не найден" #, fuzzy #~ msgid "Unmute" @@ -1694,9 +1759,6 @@ msgstr[1] "У вас пропущено %i звонков." #~ msgid "Start call" #~ msgstr "Вызов" -#~ msgid "Terminate call" -#~ msgstr "Прервать вызов" - #~ msgid "_Modes" #~ msgstr "_Режимы" @@ -1991,7 +2053,7 @@ msgstr[1] "У вас пропущено %i звонков." #~ msgid "Use IPv6 network (if available)" #~ msgstr "Использовать IPv6 сеть (если доступно)" -# msgstr "Teilnehmer zur Zeit nicht ansprechbar." +# msgstr "Teilnehmer zur Zeit nicht ansprechbar." #~ msgid "" #~ "Toggle this if you are on an ipv6 network and you wish linphone to use it." #~ msgstr "Отметьте, если Вы в сети с ipv6 и будите использовать linphone." diff --git a/tools/Makefile.am b/tools/Makefile.am index 9e0c94550..e906e29b0 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -7,9 +7,9 @@ AM_CPPFLAGS=\ COMMON_CFLAGS=\ -DIN_LINPHONE \ - $(LIBXML2_CFLAGS) \ $(ORTP_CFLAGS) \ - $(STRICT_OPTIONS) + $(STRICT_OPTIONS) \ + $(LIBXML2_CFLAGS) if BUILD_TOOLS @@ -21,8 +21,8 @@ libxml2lpc_la_SOURCES=\ libxml2lpc_la_CFLAGS=$(COMMON_CFLAGS) libxml2lpc_la_LIBADD=\ - $(LIBXML2_LIBS) \ - $(top_builddir)/coreapi/liblinphone.la + $(top_builddir)/coreapi/liblinphone.la \ + $(LIBXML2_LIBS) libxml2lpc_la_LDFLAGS=-no-undefined @@ -33,7 +33,8 @@ xml2lpc_test_SOURCES=\ xml2lpc_test_CFLAGS=$(COMMON_CFLAGS) xml2lpc_test_LDADD=\ - libxml2lpc.la + $(top_builddir)/coreapi/liblinphone.la \ + libxml2lpc.la endif