diff --git a/sflphone-client-gnome/VERSION b/sflphone-client-gnome/VERSION index 517317e95fb23bda5f1c305dfaa84bfa8021a824..bc440692c3b559a2d3fe749ce99f8993b879252f 100644 --- a/sflphone-client-gnome/VERSION +++ b/sflphone-client-gnome/VERSION @@ -1 +1 @@ -0.9.6~beta +0.9.6~rc1 diff --git a/sflphone-client-kde/po/de/sflphone-client-kde.po b/sflphone-client-kde/po/de/sflphone-client-kde.po index 1fcbbb32a26db9784bd0ff1751789448cf1a0051..da44ae52f633f8ef95329b5019bb3cdfba37dd9b 100644 --- a/sflphone-client-kde/po/de/sflphone-client-kde.po +++ b/sflphone-client-kde/po/de/sflphone-client-kde.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-03 13:49-0400\n" +"POT-Creation-Date: 2009-07-08 15:18-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -222,22 +222,22 @@ msgstr "" msgid "(C) 2009 Savoir-faire Linux" msgstr "" -#: ../src/main.cpp:43 +#: ../src/main.cpp:42 msgid "Jérémy Quentin" msgstr "" -#: ../src/main.cpp:45 +#: ../src/main.cpp:43 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" -#: ../src/main.cpp:45 +#: ../src/main.cpp:43 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" -#: ../src/SFLPhone.cpp:62 ../src/sflphone_kdeview.cpp:1047 -#: ../src/sflphone_kdeview.cpp:1052 ../src/sflphone_kdeview.cpp:1057 +#: ../src/SFLPhone.cpp:62 ../src/sflphone_kdeview.cpp:1066 +#: ../src/sflphone_kdeview.cpp:1071 ../src/sflphone_kdeview.cpp:1076 msgid "SFLphone" msgstr "" @@ -257,28 +257,28 @@ msgstr "" msgid "Click to accept or refuse it." msgstr "" -#: ../src/sflphone_kdeview.cpp:864 +#: ../src/sflphone_kdeview.cpp:883 msgid "No account registered" msgstr "" -#: ../src/sflphone_kdeview.cpp:868 +#: ../src/sflphone_kdeview.cpp:887 msgid "Using account" msgstr "" -#: ../src/sflphone_kdeview.cpp:1047 +#: ../src/sflphone_kdeview.cpp:1066 msgid "Main screen" msgstr "" -#: ../src/sflphone_kdeview.cpp:1052 ../build/src/ui_dlggeneralbase.h:165 +#: ../src/sflphone_kdeview.cpp:1071 ../build/src/ui_dlggeneralbase.h:165 msgid "Call history" msgstr "" -#: ../src/sflphone_kdeview.cpp:1057 +#: ../src/sflphone_kdeview.cpp:1076 #: ../build/src/ui_sflphone_kdeview_base.h:407 msgid "Address book" msgstr "" -#: ../src/sflphone_kdeview.cpp:1071 ../src/sflphone_kdeview.cpp:1132 +#: ../src/sflphone_kdeview.cpp:1090 ../src/sflphone_kdeview.cpp:1151 msgid "Edit before call" msgstr "" @@ -352,7 +352,7 @@ msgid "Hooks" msgstr "" #: ../build/src/ui_dlgaccountsbase.h:321 -#: ../build/src/ui_dlgaddressbookbase.h:142 ../build/src/ui_dlgaudiobase.h:262 +#: ../build/src/ui_dlgaddressbookbase.h:142 ../build/src/ui_dlgaudiobase.h:263 #: ../build/src/ui_dlgdisplaybase.h:120 ../build/src/ui_dlggeneralbase.h:164 #: ../build/src/ui_dlghooksbase.h:173 ../build/src/ui_dlgrecordbase.h:90 #: ../build/src/ui_sflphone_kdeview_base.h:390 @@ -476,56 +476,52 @@ msgstr "" msgid "&Home" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:264 +#: ../build/src/ui_dlgaudiobase.h:265 msgid "Audio device" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:267 +#: ../build/src/ui_dlgaudiobase.h:268 msgid "ALSA" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:268 +#: ../build/src/ui_dlgaudiobase.h:269 msgid "PulseAudio" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:270 +#: ../build/src/ui_dlgaudiobase.h:271 msgid "Enable ringtones" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:271 -msgid "&Codecs" +#: ../build/src/ui_dlgaudiobase.h:272 +msgid "*.ul *.au *.wav" msgstr "" #: ../build/src/ui_dlgaudiobase.h:273 -msgid "Active" +msgid "&Codecs" msgstr "" #: ../build/src/ui_dlgaudiobase.h:275 -msgid "Name" +msgid "Active" msgstr "" #: ../build/src/ui_dlgaudiobase.h:277 -msgid "Frequency" +msgid "Name" msgstr "" #: ../build/src/ui_dlgaudiobase.h:279 -msgid "Bitrate" +msgid "Frequency" msgstr "" #: ../build/src/ui_dlgaudiobase.h:281 -msgid "Bandwidth" -msgstr "" - -#: ../build/src/ui_dlgaudiobase.h:284 -msgid "ALSA settings" +msgid "Bitrate" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:285 -msgid "In" +#: ../build/src/ui_dlgaudiobase.h:283 +msgid "Bandwidth" msgstr "" #: ../build/src/ui_dlgaudiobase.h:286 -msgid "Out" +msgid "ALSA settings" msgstr "" #: ../build/src/ui_dlgaudiobase.h:287 @@ -533,10 +529,18 @@ msgid "ALSA plugin" msgstr "" #: ../build/src/ui_dlgaudiobase.h:288 -msgid "PulseAudio settings" +msgid "In" msgstr "" #: ../build/src/ui_dlgaudiobase.h:289 +msgid "Out" +msgstr "" + +#: ../build/src/ui_dlgaudiobase.h:290 +msgid "PulseAudio settings" +msgstr "" + +#: ../build/src/ui_dlgaudiobase.h:291 msgid "Mute other applications during a call" msgstr "" @@ -651,7 +655,7 @@ msgid "Display dialpad" msgstr "" #: ../build/src/ui_sflphone_kdeview_base.h:405 -msgctxt "Action record a calld" +msgctxt "Action record a call" msgid "Record" msgstr "" diff --git a/sflphone-client-kde/po/es/sflphone-client-kde.po b/sflphone-client-kde/po/es/sflphone-client-kde.po index 89dc63a1b0dae9b016ff19ef78eb987f0db8f861..a1cbc3c04ba985cefbf4af95c31f9baf8983a77e 100644 --- a/sflphone-client-kde/po/es/sflphone-client-kde.po +++ b/sflphone-client-kde/po/es/sflphone-client-kde.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-03 13:49-0400\n" +"POT-Creation-Date: 2009-07-08 15:18-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -222,22 +222,22 @@ msgstr "" msgid "(C) 2009 Savoir-faire Linux" msgstr "" -#: ../src/main.cpp:43 +#: ../src/main.cpp:42 msgid "Jérémy Quentin" msgstr "" -#: ../src/main.cpp:45 +#: ../src/main.cpp:43 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" -#: ../src/main.cpp:45 +#: ../src/main.cpp:43 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" -#: ../src/SFLPhone.cpp:62 ../src/sflphone_kdeview.cpp:1047 -#: ../src/sflphone_kdeview.cpp:1052 ../src/sflphone_kdeview.cpp:1057 +#: ../src/SFLPhone.cpp:62 ../src/sflphone_kdeview.cpp:1066 +#: ../src/sflphone_kdeview.cpp:1071 ../src/sflphone_kdeview.cpp:1076 msgid "SFLphone" msgstr "" @@ -257,28 +257,28 @@ msgstr "" msgid "Click to accept or refuse it." msgstr "" -#: ../src/sflphone_kdeview.cpp:864 +#: ../src/sflphone_kdeview.cpp:883 msgid "No account registered" msgstr "" -#: ../src/sflphone_kdeview.cpp:868 +#: ../src/sflphone_kdeview.cpp:887 msgid "Using account" msgstr "" -#: ../src/sflphone_kdeview.cpp:1047 +#: ../src/sflphone_kdeview.cpp:1066 msgid "Main screen" msgstr "" -#: ../src/sflphone_kdeview.cpp:1052 ../build/src/ui_dlggeneralbase.h:165 +#: ../src/sflphone_kdeview.cpp:1071 ../build/src/ui_dlggeneralbase.h:165 msgid "Call history" msgstr "" -#: ../src/sflphone_kdeview.cpp:1057 +#: ../src/sflphone_kdeview.cpp:1076 #: ../build/src/ui_sflphone_kdeview_base.h:407 msgid "Address book" msgstr "" -#: ../src/sflphone_kdeview.cpp:1071 ../src/sflphone_kdeview.cpp:1132 +#: ../src/sflphone_kdeview.cpp:1090 ../src/sflphone_kdeview.cpp:1151 msgid "Edit before call" msgstr "" @@ -352,7 +352,7 @@ msgid "Hooks" msgstr "" #: ../build/src/ui_dlgaccountsbase.h:321 -#: ../build/src/ui_dlgaddressbookbase.h:142 ../build/src/ui_dlgaudiobase.h:262 +#: ../build/src/ui_dlgaddressbookbase.h:142 ../build/src/ui_dlgaudiobase.h:263 #: ../build/src/ui_dlgdisplaybase.h:120 ../build/src/ui_dlggeneralbase.h:164 #: ../build/src/ui_dlghooksbase.h:173 ../build/src/ui_dlgrecordbase.h:90 #: ../build/src/ui_sflphone_kdeview_base.h:390 @@ -476,56 +476,52 @@ msgstr "" msgid "&Home" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:264 +#: ../build/src/ui_dlgaudiobase.h:265 msgid "Audio device" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:267 +#: ../build/src/ui_dlgaudiobase.h:268 msgid "ALSA" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:268 +#: ../build/src/ui_dlgaudiobase.h:269 msgid "PulseAudio" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:270 +#: ../build/src/ui_dlgaudiobase.h:271 msgid "Enable ringtones" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:271 -msgid "&Codecs" +#: ../build/src/ui_dlgaudiobase.h:272 +msgid "*.ul *.au *.wav" msgstr "" #: ../build/src/ui_dlgaudiobase.h:273 -msgid "Active" +msgid "&Codecs" msgstr "" #: ../build/src/ui_dlgaudiobase.h:275 -msgid "Name" +msgid "Active" msgstr "" #: ../build/src/ui_dlgaudiobase.h:277 -msgid "Frequency" +msgid "Name" msgstr "" #: ../build/src/ui_dlgaudiobase.h:279 -msgid "Bitrate" +msgid "Frequency" msgstr "" #: ../build/src/ui_dlgaudiobase.h:281 -msgid "Bandwidth" -msgstr "" - -#: ../build/src/ui_dlgaudiobase.h:284 -msgid "ALSA settings" +msgid "Bitrate" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:285 -msgid "In" +#: ../build/src/ui_dlgaudiobase.h:283 +msgid "Bandwidth" msgstr "" #: ../build/src/ui_dlgaudiobase.h:286 -msgid "Out" +msgid "ALSA settings" msgstr "" #: ../build/src/ui_dlgaudiobase.h:287 @@ -533,10 +529,18 @@ msgid "ALSA plugin" msgstr "" #: ../build/src/ui_dlgaudiobase.h:288 -msgid "PulseAudio settings" +msgid "In" msgstr "" #: ../build/src/ui_dlgaudiobase.h:289 +msgid "Out" +msgstr "" + +#: ../build/src/ui_dlgaudiobase.h:290 +msgid "PulseAudio settings" +msgstr "" + +#: ../build/src/ui_dlgaudiobase.h:291 msgid "Mute other applications during a call" msgstr "" @@ -651,7 +655,7 @@ msgid "Display dialpad" msgstr "" #: ../build/src/ui_sflphone_kdeview_base.h:405 -msgctxt "Action record a calld" +msgctxt "Action record a call" msgid "Record" msgstr "" diff --git a/sflphone-client-kde/po/fr/sflphone-client-kde.po b/sflphone-client-kde/po/fr/sflphone-client-kde.po index f7d57fcd09fd5d523923ab7ded3aa53b1d3bb222..d8a946740558f8bd8effee33aa236a25270a3737 100644 --- a/sflphone-client-kde/po/fr/sflphone-client-kde.po +++ b/sflphone-client-kde/po/fr/sflphone-client-kde.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-03 13:49-0400\n" +"POT-Creation-Date: 2009-07-08 15:18-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -224,22 +224,22 @@ msgstr "SFLphone Client KDE" msgid "(C) 2009 Savoir-faire Linux" msgstr "(C) 2009 Savoir-faire Linux" -#: ../src/main.cpp:43 +#: ../src/main.cpp:42 msgid "Jérémy Quentin" msgstr "Jérémy Quentin" -#: ../src/main.cpp:45 +#: ../src/main.cpp:43 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Jérémy Quentin" -#: ../src/main.cpp:45 +#: ../src/main.cpp:43 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "jeremy.quentin@savoirfairelinux.com" -#: ../src/SFLPhone.cpp:62 ../src/sflphone_kdeview.cpp:1047 -#: ../src/sflphone_kdeview.cpp:1052 ../src/sflphone_kdeview.cpp:1057 +#: ../src/SFLPhone.cpp:62 ../src/sflphone_kdeview.cpp:1066 +#: ../src/sflphone_kdeview.cpp:1071 ../src/sflphone_kdeview.cpp:1076 msgid "SFLphone" msgstr "SFLphone" @@ -261,28 +261,28 @@ msgstr "Vous avez un appel entrant de" msgid "Click to accept or refuse it." msgstr "Cliquez sur ce message pour accepter ou refuser" -#: ../src/sflphone_kdeview.cpp:864 +#: ../src/sflphone_kdeview.cpp:883 msgid "No account registered" msgstr "Aucun compte enregistré" -#: ../src/sflphone_kdeview.cpp:868 +#: ../src/sflphone_kdeview.cpp:887 msgid "Using account" msgstr "Utilise le compte" -#: ../src/sflphone_kdeview.cpp:1047 +#: ../src/sflphone_kdeview.cpp:1066 msgid "Main screen" msgstr "Écran principal" -#: ../src/sflphone_kdeview.cpp:1052 ../build/src/ui_dlggeneralbase.h:165 +#: ../src/sflphone_kdeview.cpp:1071 ../build/src/ui_dlggeneralbase.h:165 msgid "Call history" msgstr "Historique d'appel" -#: ../src/sflphone_kdeview.cpp:1057 +#: ../src/sflphone_kdeview.cpp:1076 #: ../build/src/ui_sflphone_kdeview_base.h:407 msgid "Address book" msgstr "Carnet d'adresse" -#: ../src/sflphone_kdeview.cpp:1071 ../src/sflphone_kdeview.cpp:1132 +#: ../src/sflphone_kdeview.cpp:1090 ../src/sflphone_kdeview.cpp:1151 msgid "Edit before call" msgstr "Éditer avant d'appeler" @@ -356,7 +356,7 @@ msgid "Hooks" msgstr "Ancrage" #: ../build/src/ui_dlgaccountsbase.h:321 -#: ../build/src/ui_dlgaddressbookbase.h:142 ../build/src/ui_dlgaudiobase.h:262 +#: ../build/src/ui_dlgaddressbookbase.h:142 ../build/src/ui_dlgaudiobase.h:263 #: ../build/src/ui_dlgdisplaybase.h:120 ../build/src/ui_dlggeneralbase.h:164 #: ../build/src/ui_dlghooksbase.h:173 ../build/src/ui_dlgrecordbase.h:90 #: ../build/src/ui_sflphone_kdeview_base.h:390 @@ -493,67 +493,71 @@ msgstr "&Mobiles" msgid "&Home" msgstr "P&ersonnels" -#: ../build/src/ui_dlgaudiobase.h:264 +#: ../build/src/ui_dlgaudiobase.h:265 msgid "Audio device" msgstr "Interface audio" -#: ../build/src/ui_dlgaudiobase.h:267 +#: ../build/src/ui_dlgaudiobase.h:268 msgid "ALSA" msgstr "ALSA" -#: ../build/src/ui_dlgaudiobase.h:268 +#: ../build/src/ui_dlgaudiobase.h:269 msgid "PulseAudio" msgstr "PulseAudio" -#: ../build/src/ui_dlgaudiobase.h:270 +#: ../build/src/ui_dlgaudiobase.h:271 msgid "Enable ringtones" msgstr "Activer les sonneries" -#: ../build/src/ui_dlgaudiobase.h:271 +#: ../build/src/ui_dlgaudiobase.h:272 +msgid "*.ul *.au *.wav" +msgstr "" + +#: ../build/src/ui_dlgaudiobase.h:273 msgid "&Codecs" msgstr "&Codecs" -#: ../build/src/ui_dlgaudiobase.h:273 +#: ../build/src/ui_dlgaudiobase.h:275 msgid "Active" msgstr "Activé" -#: ../build/src/ui_dlgaudiobase.h:275 +#: ../build/src/ui_dlgaudiobase.h:277 msgid "Name" msgstr "Nom" -#: ../build/src/ui_dlgaudiobase.h:277 +#: ../build/src/ui_dlgaudiobase.h:279 msgid "Frequency" msgstr "Fréquence" -#: ../build/src/ui_dlgaudiobase.h:279 +#: ../build/src/ui_dlgaudiobase.h:281 msgid "Bitrate" msgstr "Bitrate" -#: ../build/src/ui_dlgaudiobase.h:281 +#: ../build/src/ui_dlgaudiobase.h:283 msgid "Bandwidth" msgstr "Bande passante" -#: ../build/src/ui_dlgaudiobase.h:284 +#: ../build/src/ui_dlgaudiobase.h:286 msgid "ALSA settings" msgstr "Paramètre ALSA" -#: ../build/src/ui_dlgaudiobase.h:285 +#: ../build/src/ui_dlgaudiobase.h:287 +msgid "ALSA plugin" +msgstr "Greffon ALSA" + +#: ../build/src/ui_dlgaudiobase.h:288 msgid "In" msgstr "Entrée" -#: ../build/src/ui_dlgaudiobase.h:286 +#: ../build/src/ui_dlgaudiobase.h:289 msgid "Out" msgstr "Sortie" -#: ../build/src/ui_dlgaudiobase.h:287 -msgid "ALSA plugin" -msgstr "Greffon ALSA" - -#: ../build/src/ui_dlgaudiobase.h:288 +#: ../build/src/ui_dlgaudiobase.h:290 msgid "PulseAudio settings" msgstr "Paramètres PulseAudio" -#: ../build/src/ui_dlgaudiobase.h:289 +#: ../build/src/ui_dlgaudiobase.h:291 msgid "Mute other applications during a call" msgstr "Couper le son des autres applications pendant un appel" @@ -670,9 +674,10 @@ msgid "Display dialpad" msgstr "Afficher le clavier" #: ../build/src/ui_sflphone_kdeview_base.h:405 -msgctxt "Action record a calld" +#, fuzzy +msgctxt "Action record a call" msgid "Record" -msgstr "Enregistrer" +msgstr "Enregistrement" #: ../build/src/ui_sflphone_kdeview_base.h:406 msgid "Account creation wizard" @@ -682,6 +687,10 @@ msgstr "Assistant de création de compte" msgid "Attention:number of results exceeds max displayed." msgstr "Attention:tous les résultats ne sont pas affichés." +#~ msgctxt "Action record a calld" +#~ msgid "Record" +#~ msgstr "Enregistrer" + #~ msgid "Attention : SIP port must be over 1024 !" #~ msgstr "Attention : le port SIP doit être supérieur à 1024 !" diff --git a/sflphone-client-kde/po/ru/sflphone-client-kde.po b/sflphone-client-kde/po/ru/sflphone-client-kde.po index 7e1c705bbf1c9701845cbd4753bc54915c11c0e8..6cae504c5a3953557cc8b1e6bb42a1e8906aaf28 100644 --- a/sflphone-client-kde/po/ru/sflphone-client-kde.po +++ b/sflphone-client-kde/po/ru/sflphone-client-kde.po @@ -3,774 +3,1531 @@ # This file is distributed under the same license as the sflphone package. # Hussein Abdallah <hussein.abdallah@savoirfairelinux.com>, 2009 # -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: SFLphone 0.9.6\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-08 15:18-0400\n" -"PO-Revision-Date: 2009-06-08 10:19 GMT-5\n" -"Last-Translator: HUSSEIN ABDALLAH <hussein.abdallah@savoirfairelinux.com>\n" -"Language-Team: Savoir-Faire Linux Inc <sflphoneteam@savoirfairelinux.com>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../src/Account.cpp:34 -msgctxt "account state" -msgid "Registered" -msgstr "" - -#: ../src/Account.cpp:36 -msgctxt "account state" -msgid "Not Registered" -msgstr "" - -#: ../src/Account.cpp:38 -msgctxt "account state" -msgid "Trying..." -msgstr "" - -#: ../src/Account.cpp:40 -msgctxt "account state" -msgid "Error" -msgstr "" - -#: ../src/Account.cpp:42 -#, fuzzy -msgctxt "account state" -msgid "Bad authentification" -msgstr "Включить предупреждения" - -#: ../src/Account.cpp:44 -msgctxt "account state" -msgid "Network unreachable" -msgstr "" - -#: ../src/Account.cpp:46 -msgctxt "account state" -msgid "Host unreachable" -msgstr "" - -#: ../src/Account.cpp:48 -#, fuzzy -msgctxt "account state" -msgid "Stun configuration error" -msgstr "Окно настроек" - -#: ../src/Account.cpp:50 -#, fuzzy -msgctxt "account state" -msgid "Stun server invalid" -msgstr "STUN-сервер" - -#: ../src/Account.cpp:51 -msgctxt "account state" -msgid "Invalid" -msgstr "" - -#: ../src/AccountWizard.cpp:163 ../src/AccountWizard.cpp:278 -msgid "Account Creation Wizard" -msgstr "Мастер настройки SFLphone" - -#: ../src/AccountWizard.cpp:199 -msgid "Creation of account succeed with these parameters" -msgstr "Успешное создание аккаунта с этими настройками" - -#: ../src/AccountWizard.cpp:211 -msgid "Creation of account has failed for the reason" -msgstr "Создание аккаунта не получилось по этим причинам" - -#: ../src/AccountWizard.cpp:217 -msgid "Register of account succeed with these parameters" -msgstr "Успешное регистрация аккаунта с этими настройками" - -#: ../src/AccountWizard.cpp:255 ../src/AccountWizard.cpp:440 -#: ../build/src/ui_dlgaccountsbase.h:359 -msgid "Alias" -msgstr "Псевдоним" - -#: ../src/AccountWizard.cpp:256 ../src/AccountWizard.cpp:441 -#: ../build/src/ui_dlgaccountsbase.h:366 -msgid "Server" -msgstr "Сервер" - -#: ../src/AccountWizard.cpp:257 ../src/AccountWizard.cpp:442 -#: ../build/src/ui_dlgaccountsbase.h:367 -msgid "User" -msgstr "Пользователь" - -#: ../src/AccountWizard.cpp:258 ../src/AccountWizard.cpp:443 -#: ../build/src/ui_dlgaccountsbase.h:368 -msgid "Password" -msgstr "Пароль" - -#: ../src/AccountWizard.cpp:259 ../build/src/ui_dlgaccountsbase.h:360 -msgid "Protocol" -msgstr "Протокол" - -#: ../src/AccountWizard.cpp:260 ../build/src/ui_dlgaccountsbase.h:369 -#: ../build/src/ui_sflphone_kdeview_base.h:396 -msgid "Mailbox" -msgstr "Звуковые сообщения" - -#: ../src/AccountWizard.cpp:279 -#, fuzzy -msgid "Welcome to the Account creation wizard of SFLphone" -msgstr "Добро пожаловать в мастер настройки SFLphone" - -#: ../src/AccountWizard.cpp:281 -msgid "This wizard will help you setting up an account." -msgstr "Этот мастер установки поможет вам настроить ваш аккаунт." - -#: ../src/AccountWizard.cpp:309 ../src/conf/ConfigurationDialog.cpp:50 -msgid "Accounts" -msgstr "Аккаунты" - -#: ../src/AccountWizard.cpp:310 -msgid "Please choose between those options :" -msgstr "Выберите пожалуйста тип аккаунта :" - -#: ../src/AccountWizard.cpp:312 -msgid "Create a free SIP/IAX2 account on sflphone.org" -msgstr "Создать бесплатный SIP/IAX2-аккаунт на sflphone.org" - -#: ../src/AccountWizard.cpp:313 -msgid "Register an existing SIP/IAX2 account" -msgstr "Зарегистрировать существующий SIP или IAX2 аккаунт" - -#: ../src/AccountWizard.cpp:352 -msgid "VoIP Protocols" -msgstr "VoIP-протоколы" - -#: ../src/AccountWizard.cpp:353 -msgid "Choose the account type" -msgstr "Выберите тип аккаунта:" - -#: ../src/AccountWizard.cpp:355 -msgid "Register a SIP (Session Initiation Protocol) account" -msgstr "Зарегистрировать существующий SIP или IAX2 аккаунт" - -#: ../src/AccountWizard.cpp:356 -msgid "Register a IAX2 (InterAsterisk eXchange) account" -msgstr "Зарегистрируете IAX2-аккаунт" - -#: ../src/AccountWizard.cpp:395 -msgid "Optionnal Email Address" -msgstr "Электронный адрес (необязательный) " - -#: ../src/AccountWizard.cpp:396 -msgid "This email address will be used to send your voicemail messages." -msgstr "Этот электронный адрес будет использоваться для речевых сообщений" - -#: ../src/AccountWizard.cpp:398 -msgid "Email address" -msgstr "Адрес эл. почты" - -#: ../src/AccountWizard.cpp:432 -msgid "SIP Account Settings" -msgstr "Настройки SIP-аккаунта" - -#: ../src/AccountWizard.cpp:436 -msgid "IAX2 Account Settings" -msgstr "Настройки IAX2-аккаунта" - -#: ../src/AccountWizard.cpp:438 -msgid "Please full these settings fields." -msgstr "Заполните пожалуйста эти поля." - -#: ../src/AccountWizard.cpp:444 -msgid "Voicemail number" -msgstr "" - -#: ../src/AccountWizard.cpp:523 -msgid "Network Address Translation (NAT)" -msgstr "Network Address Translation (NAT)" - -#: ../src/AccountWizard.cpp:524 -msgid "" -"You should probably enable this option if you're placed under a firewall" -msgstr "Вы наверное должны это включить если вы находитесь за сетевым экраном." - -#: ../src/AccountWizard.cpp:526 -msgid "Enable STUN" -msgstr "Включить STUN" - -#: ../src/AccountWizard.cpp:527 -msgid "Stun Server" -msgstr "STUN-сервер" - -#: ../src/AccountWizard.cpp:561 -msgid "Account Definition Finished" -msgstr "Настройка аккаунта закончена." - -#: ../src/AccountWizard.cpp:562 -msgid "" -"After checking the settings you chose, click \"Finish\" to create the " -"account." -msgstr "" -"После просмотра выбранных настроек, нажмите на \"Закончить\" чтобы создать " -"аккаунт. " - -#: ../src/ActionSetAccountFirst.cpp:26 -msgid "Default account" -msgstr "" - -#: ../src/Call.cpp:116 -msgid "Transfer to : " -msgstr "Переслать звонок на другой номер :" - -#: ../src/main.cpp:34 -msgid "SFLphone KDE Client" -msgstr "" - -#: ../src/main.cpp:38 -msgid "(C) 2009 Savoir-faire Linux" -msgstr "" - -#: ../src/main.cpp:42 -msgid "Jérémy Quentin" -msgstr "" - -#: ../src/main.cpp:43 -msgctxt "NAME OF TRANSLATORS" -msgid "Your names" -msgstr "" - -#: ../src/main.cpp:43 -msgctxt "EMAIL OF TRANSLATORS" -msgid "Your emails" -msgstr "" - -#: ../src/SFLPhone.cpp:62 ../src/sflphone_kdeview.cpp:1066 -#: ../src/sflphone_kdeview.cpp:1071 ../src/sflphone_kdeview.cpp:1076 -#, fuzzy -msgid "SFLphone" -msgstr "SFLPhone" - -#: ../src/SFLPhone.cpp:181 -msgid "You still have some calls open. Please close all calls before quitting." -msgstr "" -"У вас ещё есть неоконченные звонки. Пожалуйста проверьте что все звонки " -"окончены перед тем как выйти." - -#: ../src/SFLPhone.cpp:209 -msgid "Incoming call" -msgstr "Входящий звонок" - -#: ../src/SFLPhone.cpp:210 -msgid "You have an incoming call from" -msgstr "Входящей звонок от " - -#: ../src/SFLPhone.cpp:210 -msgid "Click to accept or refuse it." -msgstr "Нажмите чтобы принять или отклонить." - -#: ../src/sflphone_kdeview.cpp:883 -msgid "No account registered" -msgstr "" - -#: ../src/sflphone_kdeview.cpp:887 -#, fuzzy -msgid "Using account" -msgstr "Настроить &аккаунты" - -#: ../src/sflphone_kdeview.cpp:1066 -msgid "Main screen" -msgstr "Главный экран" - -#: ../src/sflphone_kdeview.cpp:1071 ../build/src/ui_dlggeneralbase.h:165 -msgid "Call history" -msgstr "Журнал звонков" - -#: ../src/sflphone_kdeview.cpp:1076 -#: ../build/src/ui_sflphone_kdeview_base.h:407 -msgid "Address book" -msgstr "Адресная книга" - -#: ../src/sflphone_kdeview.cpp:1090 ../src/sflphone_kdeview.cpp:1151 -msgid "Edit before call" -msgstr "Изменить перед звонком" - -#: ../src/sflphone_const.h:56 -msgid "Call" -msgstr "Звонок" - -#: ../src/sflphone_const.h:57 ../build/src/ui_sflphone_kdeview_base.h:392 -msgid "Hang up" -msgstr "Положить трубку" - -#: ../src/sflphone_const.h:58 ../build/src/ui_sflphone_kdeview_base.h:393 -msgid "Hold" -msgstr "Удержать звонок" - -#: ../src/sflphone_const.h:59 ../build/src/ui_sflphone_kdeview_base.h:394 -msgid "Transfer" -msgstr "Переслать звонок на другой номер" - -#: ../src/sflphone_const.h:60 -msgid "Record" -msgstr "Записать" - -#: ../src/sflphone_const.h:61 -msgid "Accept" -msgstr "Принять" - -#: ../src/sflphone_const.h:62 -msgid "Refuse" -msgstr "Отклонить" - -#: ../src/sflphone_const.h:63 -msgid "Unhold" -msgstr "Снова взять" - -#: ../src/sflphone_const.h:64 -msgid "Give up transfer" -msgstr "Отменить пересылку звонка" - -#: ../src/sflphone_const.h:65 -msgid "Call back" -msgstr "Перезвонить" - -#: ../src/sflphone_const.h:66 -msgid "Give up search" -msgstr "Отменить поиск" - -#: ../src/conf/ConfigurationDialog.cpp:48 ../build/src/ui_dlgrecordbase.h:91 -msgid "General" -msgstr "Общие настройки" - -#: ../src/conf/ConfigurationDialog.cpp:49 -msgid "Display" -msgstr "Экран" - -#: ../src/conf/ConfigurationDialog.cpp:51 -msgid "Audio" -msgstr "Звук" - -#: ../src/conf/ConfigurationDialog.cpp:52 -msgid "Address Book" -msgstr "Адресная книга" - -#: ../src/conf/ConfigurationDialog.cpp:53 -#, fuzzy -msgctxt "Config section" -msgid "Record" -msgstr "Записать" - -#: ../src/conf/ConfigurationDialog.cpp:54 -msgid "Hooks" -msgstr "перехватчики (hooks)" - -#: ../build/src/ui_dlgaccountsbase.h:321 -#: ../build/src/ui_dlgaddressbookbase.h:142 ../build/src/ui_dlgaudiobase.h:263 -#: ../build/src/ui_dlgdisplaybase.h:120 ../build/src/ui_dlggeneralbase.h:164 -#: ../build/src/ui_dlghooksbase.h:173 ../build/src/ui_dlgrecordbase.h:90 -#: ../build/src/ui_sflphone_kdeview_base.h:390 -msgid "Form" -msgstr "" - -#: ../build/src/ui_dlgaccountsbase.h:323 -msgid "" -"By default, when you place a call, sflphone will use the first account in " -"this list which is \"registered\". Change the order of the accounts using " -"the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking " -"them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" " -"buttons. Edit the selected account with the form on the right." -msgstr "" - -#: ../build/src/ui_dlgaccountsbase.h:327 -#, fuzzy -msgid "Remove the selected account" -msgstr "Убрать этот аккаунт" - -#: ../build/src/ui_dlgaccountsbase.h:330 -msgid "" -"This button will remove the selected account in the list below. Be sure you " -"really don't need it anymore. If you think you might use it again later, " -"just uncheck it." -msgstr "" - -#: ../build/src/ui_dlgaccountsbase.h:335 -msgid "Remove" -msgstr "" - -#: ../build/src/ui_dlgaccountsbase.h:336 -msgid "Backspace, Return" -msgstr "" - -#: ../build/src/ui_dlgaccountsbase.h:338 -msgid "Add a new account" -msgstr "Добавить новый аккаунт" - -#: ../build/src/ui_dlgaccountsbase.h:341 -msgid "" -"This button enables you to initialize a new account. You will then be able " -"to edit it using the form on the right." -msgstr "" - -#: ../build/src/ui_dlgaccountsbase.h:343 -msgid "Add" -msgstr "" - -#: ../build/src/ui_dlgaccountsbase.h:345 -#, fuzzy -msgid "Get this account down" -msgstr "Убрать этот аккаунт" - -#: ../build/src/ui_dlgaccountsbase.h:348 ../build/src/ui_dlgaccountsbase.h:355 -msgid "" -"By default, when you place a call, sflphone will use the first account in " -"this list which is \"registered\". Change the order of the accounts using " -"the \"Up\" and \"Down\" arrows." -msgstr "" - -#: ../build/src/ui_dlgaccountsbase.h:350 -msgid "Down" -msgstr "Вниз" - -#: ../build/src/ui_dlgaccountsbase.h:352 -#, fuzzy -msgid "Get this account up" -msgstr "Убрать этот аккаунт" - -#: ../build/src/ui_dlgaccountsbase.h:357 -msgid "Up" -msgstr "Вверх" - -#: ../build/src/ui_dlgaccountsbase.h:358 -msgid "Apply" -msgstr "Применить" - -#: ../build/src/ui_dlgaccountsbase.h:363 -msgid "SIP" -msgstr "SIP" - -#: ../build/src/ui_dlgaccountsbase.h:364 -msgid "IAX" -msgstr "IAX" - -#: ../build/src/ui_dlgaccountsbase.h:370 -msgid "State" -msgstr "Статус" - -#: ../build/src/ui_dlgaccountsbase.h:373 -msgid "Stun settings will be applied on each account" -msgstr "Stun-настройки будут использоваться для всех аккаунтов" - -#: ../build/src/ui_dlgaccountsbase.h:374 -#, fuzzy -msgid "Enable Stun" -msgstr "&Включить STUN" - -#: ../build/src/ui_dlgaccountsbase.h:375 -msgid "choose Stun server (example : stunserver.org)" -msgstr "" - -#: ../build/src/ui_dlgaddressbookbase.h:143 -msgid "Maximum &results" -msgstr "Максимальное &количество результатов" - -#: ../build/src/ui_dlgaddressbookbase.h:144 -msgid "Display &photo if available" -msgstr "Показать &фотографию контакта (если имеется)" - -#: ../build/src/ui_dlgaddressbookbase.h:145 -msgid "Display phone numbers of these &types :" -msgstr "Если контакт имеет несколько номеров, показать &только :" - -#: ../build/src/ui_dlgaddressbookbase.h:146 -msgid "&Work" -msgstr "&Рабочий номер" - -#: ../build/src/ui_dlgaddressbookbase.h:147 -msgid "&Mobile" -msgstr "Номер &мобильника" - -#: ../build/src/ui_dlgaddressbookbase.h:148 -msgid "&Home" -msgstr "&Домашний номер" - -#: ../build/src/ui_dlgaudiobase.h:265 -#, fuzzy -msgid "Audio device" -msgstr "Звуковое устройство" - -#: ../build/src/ui_dlgaudiobase.h:268 -msgid "ALSA" -msgstr "ALSA" - -#: ../build/src/ui_dlgaudiobase.h:269 -msgid "PulseAudio" -msgstr "PulseAudio" - -#: ../build/src/ui_dlgaudiobase.h:271 -#, fuzzy -msgid "Enable ringtones" -msgstr "Включить звонок" - -#: ../build/src/ui_dlgaudiobase.h:272 -msgid "*.ul *.au *.wav" -msgstr "" - -#: ../build/src/ui_dlgaudiobase.h:273 -msgid "&Codecs" -msgstr "&Кодеки" - -#: ../build/src/ui_dlgaudiobase.h:275 -msgid "Active" -msgstr "" - -#: ../build/src/ui_dlgaudiobase.h:277 -msgid "Name" -msgstr "Имя" - -#: ../build/src/ui_dlgaudiobase.h:279 -msgid "Frequency" -msgstr "Частота" - -#: ../build/src/ui_dlgaudiobase.h:281 -msgid "Bitrate" -msgstr "Битрейт" - -#: ../build/src/ui_dlgaudiobase.h:283 -msgid "Bandwidth" -msgstr "Пропускная способность" - -#: ../build/src/ui_dlgaudiobase.h:286 -msgid "ALSA settings" -msgstr "Настройка ALSA" - -#: ../build/src/ui_dlgaudiobase.h:287 -#, fuzzy -msgid "ALSA plugin" -msgstr "ALSA-плагин" - -#: ../build/src/ui_dlgaudiobase.h:288 -msgid "In" -msgstr "" - -#: ../build/src/ui_dlgaudiobase.h:289 -msgid "Out" -msgstr "" - -#: ../build/src/ui_dlgaudiobase.h:290 -msgid "PulseAudio settings" -msgstr "Настройка PulseAudio" - -#: ../build/src/ui_dlgaudiobase.h:291 -msgid "Mute other applications during a call" -msgstr "Приглушить звук других програм во время звонка" - -#: ../build/src/ui_dlgdisplaybase.h:121 -msgid "Enable notifications" -msgstr "Включить предупреждения" - -#: ../build/src/ui_dlgdisplaybase.h:122 -msgid "On incoming &calls" -msgstr "При входящих звонках" - -#: ../build/src/ui_dlgdisplaybase.h:123 -msgid "On &messages" -msgstr "При звуковых &сообщениях" - -#: ../build/src/ui_dlgdisplaybase.h:124 -msgid "Show main window" -msgstr "Показать главное окно" - -#: ../build/src/ui_dlgdisplaybase.h:125 -msgid "On &start" -msgstr "При &запуске" - -#: ../build/src/ui_dlgdisplaybase.h:126 -msgid "On &incoming calls" -msgstr "При входящих звонках" - -#: ../build/src/ui_dlggeneralbase.h:166 -msgid "Keep my history for at least" -msgstr "" - -#: ../build/src/ui_dlggeneralbase.h:167 -msgid "days" -msgstr "" - -#: ../build/src/ui_dlggeneralbase.h:168 -#, fuzzy -msgid "Clear history" -msgstr "Стереть журнал" - -#: ../build/src/ui_dlggeneralbase.h:169 -msgid "Connection" -msgstr "Подключение" - -#: ../build/src/ui_dlggeneralbase.h:170 -#, fuzzy -msgid "SIP Port" -msgstr "SIP-порт" - -#: ../build/src/ui_dlggeneralbase.h:171 -msgid "Attention " -msgstr "Внимание" - -#: ../build/src/ui_dlghooksbase.h:174 -msgid "URL Argument" -msgstr "" - -#: ../build/src/ui_dlghooksbase.h:175 -#, c-format -msgid "Custom commands with URL %s will be replaced with the passed URL." -msgstr "" - -#: ../build/src/ui_dlghooksbase.h:176 -msgid "Trigger on specific SIP header" -msgstr "" - -#: ../build/src/ui_dlghooksbase.h:177 -msgid "Trigger on IAX2 URL" -msgstr "" - -#: ../build/src/ui_dlghooksbase.h:178 -#, fuzzy -msgid "Command to run" -msgstr "Команда" - -#: ../build/src/ui_dlghooksbase.h:179 -msgid "Phone number formatting" -msgstr "Формат номера телефона" - -#: ../build/src/ui_dlghooksbase.h:180 -msgid "Add phone number prefix" -msgstr "Добавить перед на набранными номерами" - -#: ../build/src/ui_dlgrecordbase.h:92 -msgid "Destination folder" -msgstr "Папка для записи" - -#: ../build/src/ui_sflphone_kdeview_base.h:391 -#, fuzzy -msgid "Pick up" -msgstr "&Взять трубку" - -#: ../build/src/ui_sflphone_kdeview_base.h:395 -#, fuzzy -msgid "History" -msgstr "Журнал" - -#: ../build/src/ui_sflphone_kdeview_base.h:397 -#, fuzzy -msgid "Configure accounts" -msgstr "Настроить &аккаунты" - -#: ../build/src/ui_sflphone_kdeview_base.h:398 -#, fuzzy -msgid "Configure audio" -msgstr "Настроить &звук" - -#: ../build/src/ui_sflphone_kdeview_base.h:399 -#: ../build/src/ui_sflphone_kdeview_base.h:401 -#, fuzzy -msgid "Configure SFLphone" -msgstr "&Настроить SFLPhone" - -#: ../build/src/ui_sflphone_kdeview_base.h:403 -#, fuzzy -msgid "Display volume bars" -msgstr "Показать уровень &громкости" - -#: ../build/src/ui_sflphone_kdeview_base.h:404 -#, fuzzy -msgid "Display dialpad" -msgstr "Показать &клавиатуру" - -#: ../build/src/ui_sflphone_kdeview_base.h:405 -#, fuzzy -msgctxt "Action record a call" -msgid "Record" -msgstr "Записать" - -#: ../build/src/ui_sflphone_kdeview_base.h:406 -#, fuzzy -msgid "Account creation wizard" -msgstr "&Мастер настройки SFLphone" - -#: ../build/src/ui_sflphone_kdeview_base.h:408 -msgid "Attention:number of results exceeds max displayed." -msgstr "" - -#~ msgid "Attention : SIP port must be over 1024 !" -#~ msgstr "Внимание : SIP-порт должен быть больше чем 1024 !" - -#~ msgid "Attention : SIP port must be under 65536 !" -#~ msgstr "Внимание : SIP-порт должен быть меньше чем 65536 !" - -#~ msgid "about" -#~ msgstr "О" - -#~ msgid "Configure general settings" -#~ msgstr "Общие настройки" - -#~ msgid "&Capacity" -#~ msgstr "Вместимость" - -#~ msgid "Configure display" -#~ msgstr "Настроить экран" - -#~ msgid "Configure user accounts" -#~ msgstr "Настройка аккаунтов пользователей" - -#~ msgid "&Alias" -#~ msgstr "Псевдоним" - -#~ msgid "&Protocol" -#~ msgstr "Протокол" - -#~ msgid "&Server" -#~ msgstr "&Сервер" - -#~ msgid "&User" -#~ msgstr "&Пользователь" - -#~ msgid "Pass&word" -#~ msgstr "Па&роль" - -#~ msgid "&Mailbox" -#~ msgstr "&Звуковые сообщения" - -#~ msgid "Configure audio settings" -#~ msgstr "Настройки звука" - -#~ msgid "Configure record settings" -#~ msgstr "Настроить запись звонков" - -#~ msgid "Configure address book settings" -#~ msgstr "Настроить адресную книгу" - -#~ msgid "Configure hooks settings" -#~ msgstr "Настроить перехватчики" - -#~ msgid "SIP Protocol" -#~ msgstr "SIP-Протокол" - -#~ msgid "IAX2 Protocol" -#~ msgstr "IAX2-Протокол" - -#~ msgid "SIP Header" -#~ msgstr "SIP Заголовок" - -#~ msgid "Prepend" -#~ msgstr "Добавить в начало" - -#~ msgid "&Hang up" -#~ msgstr "&Положить трубку" - -#~ msgid "H&old" -#~ msgstr "&Удержать звонок" - -#~ msgid "&Transfer" -#~ msgstr "Пе&реслать звонок на другой номер" - -#~ msgid "&About" -#~ msgstr "&О SFLphone" - -#~ msgid "&Record" -#~ msgstr "Записать" +msgid "" +msgstr "" +"Project-Id-Version: SFLphone 0.9.6\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-07-08 15:18-0400\n" +"PO-Revision-Date: 2009-06-08 10:19 GMT-5\n" +"Last-Translator: HUSSEIN ABDALLAH <hussein.abdallah@savoirfairelinux.com>\n" +"Language-Team: Savoir-Faire Linux Inc <sflphoneteam@savoirfairelinux.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../src/Account.cpp:34 +msgctxt "account state" +msgid "Registered" +msgstr "" + +#: ../src/Account.cpp:36 +msgctxt "account state" +msgid "Not Registered" +msgstr "" + +#: ../src/Account.cpp:38 +msgctxt "account state" +msgid "Trying..." +msgstr "" + +#: ../src/Account.cpp:40 +msgctxt "account state" +msgid "Error" +msgstr "" + +#: ../src/Account.cpp:42 +#, fuzzy +msgctxt "account state" +msgid "Bad authentification" +msgstr "Включить предупреждения" + +#: ../src/Account.cpp:44 +msgctxt "account state" +msgid "Network unreachable" +msgstr "" + +#: ../src/Account.cpp:46 +msgctxt "account state" +msgid "Host unreachable" +msgstr "" + +#: ../src/Account.cpp:48 +#, fuzzy +msgctxt "account state" +msgid "Stun configuration error" +msgstr "Окно настроек" + +#: ../src/Account.cpp:50 +#, fuzzy +msgctxt "account state" +msgid "Stun server invalid" +msgstr "STUN-сервер" + +#: ../src/Account.cpp:51 +msgctxt "account state" +msgid "Invalid" +msgstr "" + +#: ../src/AccountWizard.cpp:163 ../src/AccountWizard.cpp:278 +msgid "Account Creation Wizard" +msgstr "Мастер настройки SFLphone" + +#: ../src/AccountWizard.cpp:199 +msgid "Creation of account succeed with these parameters" +msgstr "Успешное создание аккаунта с этими настройками" + +#: ../src/AccountWizard.cpp:211 +msgid "Creation of account has failed for the reason" +msgstr "Создание аккаунта не получилось по этим причинам" + +#: ../src/AccountWizard.cpp:217 +msgid "Register of account succeed with these parameters" +msgstr "Успешное регистрация аккаунта с этими настройками" + +#: ../src/AccountWizard.cpp:255 ../src/AccountWizard.cpp:440 +#: ../build/src/ui_dlgaccountsbase.h:359 +msgid "Alias" +msgstr "Псевдоним" + +#: ../src/AccountWizard.cpp:256 ../src/AccountWizard.cpp:441 +#: ../build/src/ui_dlgaccountsbase.h:366 +msgid "Server" +msgstr "Сервер" + +#: ../src/AccountWizard.cpp:257 ../src/AccountWizard.cpp:442 +#: ../build/src/ui_dlgaccountsbase.h:367 +msgid "User" +msgstr "Пользователь" + +#: ../src/AccountWizard.cpp:258 ../src/AccountWizard.cpp:443 +#: ../build/src/ui_dlgaccountsbase.h:368 +msgid "Password" +msgstr "Пароль" + +#: ../src/AccountWizard.cpp:259 ../build/src/ui_dlgaccountsbase.h:360 +msgid "Protocol" +msgstr "Протокол" + +#: ../src/AccountWizard.cpp:260 ../build/src/ui_dlgaccountsbase.h:369 +#: ../build/src/ui_sflphone_kdeview_base.h:396 +msgid "Mailbox" +msgstr "Звуковые сообщения" + +#: ../src/AccountWizard.cpp:279 +#, fuzzy +msgid "Welcome to the Account creation wizard of SFLphone" +msgstr "Добро пожаловать в мастер настройки SFLphone" + +#: ../src/AccountWizard.cpp:281 +msgid "This wizard will help you setting up an account." +msgstr "Этот мастер установки поможет вам настроить ваш аккаунт." + +#: ../src/AccountWizard.cpp:309 ../src/conf/ConfigurationDialog.cpp:50 +msgid "Accounts" +msgstr "Аккаунты" + +#: ../src/AccountWizard.cpp:310 +msgid "Please choose between those options :" +msgstr "Выберите пожалуйста тип аккаунта :" + +#: ../src/AccountWizard.cpp:312 +msgid "Create a free SIP/IAX2 account on sflphone.org" +msgstr "Создать бесплатный SIP/IAX2-аккаунт на sflphone.org" + +#: ../src/AccountWizard.cpp:313 +msgid "Register an existing SIP/IAX2 account" +msgstr "Зарегистрировать существующий SIP или IAX2 аккаунт" + +#: ../src/AccountWizard.cpp:352 +msgid "VoIP Protocols" +msgstr "VoIP-протоколы" + +#: ../src/AccountWizard.cpp:353 +msgid "Choose the account type" +msgstr "Выберите тип аккаунта:" + +#: ../src/AccountWizard.cpp:355 +msgid "Register a SIP (Session Initiation Protocol) account" +msgstr "Зарегистрировать существующий SIP или IAX2 аккаунт" + +#: ../src/AccountWizard.cpp:356 +msgid "Register a IAX2 (InterAsterisk eXchange) account" +msgstr "Зарегистрируете IAX2-аккаунт" + +#: ../src/AccountWizard.cpp:395 +msgid "Optionnal Email Address" +msgstr "Электронный адрес (необязательный) " + +#: ../src/AccountWizard.cpp:396 +msgid "This email address will be used to send your voicemail messages." +msgstr "Этот электронный адрес будет использоваться для речевых сообщений" + +#: ../src/AccountWizard.cpp:398 +msgid "Email address" +msgstr "Адрес эл. почты" + +#: ../src/AccountWizard.cpp:432 +msgid "SIP Account Settings" +msgstr "Настройки SIP-аккаунта" + +#: ../src/AccountWizard.cpp:436 +msgid "IAX2 Account Settings" +msgstr "Настройки IAX2-аккаунта" + +#: ../src/AccountWizard.cpp:438 +msgid "Please full these settings fields." +msgstr "Заполните пожалуйста эти поля." + +#: ../src/AccountWizard.cpp:444 +msgid "Voicemail number" +msgstr "" + +#: ../src/AccountWizard.cpp:523 +msgid "Network Address Translation (NAT)" +msgstr "Network Address Translation (NAT)" + +#: ../src/AccountWizard.cpp:524 +msgid "" +"You should probably enable this option if you're placed under a firewall" +msgstr "Вы наверное должны это включить если вы находитесь за сетевым экраном." + +#: ../src/AccountWizard.cpp:526 +msgid "Enable STUN" +msgstr "Включить STUN" + +#: ../src/AccountWizard.cpp:527 +msgid "Stun Server" +msgstr "STUN-сервер" + +#: ../src/AccountWizard.cpp:561 +msgid "Account Definition Finished" +msgstr "Настройка аккаунта закончена." + +#: ../src/AccountWizard.cpp:562 +msgid "" +"After checking the settings you chose, click \"Finish\" to create the " +"account." +msgstr "" +"После просмотра выбранных настроек, нажмите на \"Закончить\" чтобы создать " +"аккаунт. " + +#: ../src/ActionSetAccountFirst.cpp:26 +msgid "Default account" +msgstr "" + +#: ../src/Call.cpp:116 +msgid "Transfer to : " +msgstr "Переслать звонок на другой номер :" + +#: ../src/main.cpp:34 +msgid "SFLphone KDE Client" +msgstr "" + +#: ../src/main.cpp:38 +msgid "(C) 2009 Savoir-faire Linux" +msgstr "" + +#: ../src/main.cpp:42 +msgid "Jérémy Quentin" +msgstr "" + +#: ../src/main.cpp:43 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" + +#: ../src/main.cpp:43 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" + +#: ../src/SFLPhone.cpp:62 ../src/sflphone_kdeview.cpp:1066 +#: ../src/sflphone_kdeview.cpp:1071 ../src/sflphone_kdeview.cpp:1076 +#, fuzzy +msgid "SFLphone" +msgstr "SFLPhone" + +#: ../src/SFLPhone.cpp:181 +msgid "You still have some calls open. Please close all calls before quitting." +msgstr "" +"У вас ещё есть неоконченные звонки. Пожалуйста проверьте что все звонки " +"окончены перед тем как выйти." + +#: ../src/SFLPhone.cpp:209 +msgid "Incoming call" +msgstr "Входящий звонок" + +#: ../src/SFLPhone.cpp:210 +msgid "You have an incoming call from" +msgstr "Входящей звонок от " + +#: ../src/SFLPhone.cpp:210 +msgid "Click to accept or refuse it." +msgstr "Нажмите чтобы принять или отклонить." + +#: ../src/sflphone_kdeview.cpp:883 +msgid "No account registered" +msgstr "" + +#: ../src/sflphone_kdeview.cpp:887 +#, fuzzy +msgid "Using account" +msgstr "Настроить &аккаунты" + +#: ../src/sflphone_kdeview.cpp:1066 +msgid "Main screen" +msgstr "Главный экран" + +#: ../src/sflphone_kdeview.cpp:1071 ../build/src/ui_dlggeneralbase.h:165 +msgid "Call history" +msgstr "Журнал звонков" + +#: ../src/sflphone_kdeview.cpp:1076 +#: ../build/src/ui_sflphone_kdeview_base.h:407 +msgid "Address book" +msgstr "Адресная книга" + +#: ../src/sflphone_kdeview.cpp:1090 ../src/sflphone_kdeview.cpp:1151 +msgid "Edit before call" +msgstr "Изменить перед звонком" + +#: ../src/sflphone_const.h:56 +msgid "Call" +msgstr "Звонок" + +#: ../src/sflphone_const.h:57 ../build/src/ui_sflphone_kdeview_base.h:392 +msgid "Hang up" +msgstr "Положить трубку" + +#: ../src/sflphone_const.h:58 ../build/src/ui_sflphone_kdeview_base.h:393 +msgid "Hold" +msgstr "Удержать звонок" + +#: ../src/sflphone_const.h:59 ../build/src/ui_sflphone_kdeview_base.h:394 +msgid "Transfer" +msgstr "Переслать звонок на другой номер" + +#: ../src/sflphone_const.h:60 +msgid "Record" +msgstr "Записать" + +#: ../src/sflphone_const.h:61 +msgid "Accept" +msgstr "Принять" + +#: ../src/sflphone_const.h:62 +msgid "Refuse" +msgstr "Отклонить" + +#: ../src/sflphone_const.h:63 +msgid "Unhold" +msgstr "Снова взять" + +#: ../src/sflphone_const.h:64 +msgid "Give up transfer" +msgstr "Отменить пересылку звонка" + +#: ../src/sflphone_const.h:65 +msgid "Call back" +msgstr "Перезвонить" + +#: ../src/sflphone_const.h:66 +msgid "Give up search" +msgstr "Отменить поиск" + +#: ../src/conf/ConfigurationDialog.cpp:48 ../build/src/ui_dlgrecordbase.h:91 +msgid "General" +msgstr "Общие настройки" + +#: ../src/conf/ConfigurationDialog.cpp:49 +msgid "Display" +msgstr "Экран" + +#: ../src/conf/ConfigurationDialog.cpp:51 +msgid "Audio" +msgstr "Звук" + +#: ../src/conf/ConfigurationDialog.cpp:52 +msgid "Address Book" +msgstr "Адресная книга" + +#: ../src/conf/ConfigurationDialog.cpp:53 +#, fuzzy +msgctxt "Config section" +msgid "Record" +msgstr "Записать" + +#: ../src/conf/ConfigurationDialog.cpp:54 +msgid "Hooks" +msgstr "перехватчики (hooks)" + +#: ../build/src/ui_dlgaccountsbase.h:321 +#: ../build/src/ui_dlgaddressbookbase.h:142 ../build/src/ui_dlgaudiobase.h:263 +#: ../build/src/ui_dlgdisplaybase.h:120 ../build/src/ui_dlggeneralbase.h:164 +#: ../build/src/ui_dlghooksbase.h:173 ../build/src/ui_dlgrecordbase.h:90 +#: ../build/src/ui_sflphone_kdeview_base.h:390 +msgid "Form" +msgstr "" + +#: ../build/src/ui_dlgaccountsbase.h:323 +msgid "" +"By default, when you place a call, sflphone will use the first account in " +"this list which is \"registered\". Change the order of the accounts using " +"the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking " +"them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" " +"buttons. Edit the selected account with the form on the right." +msgstr "" + +#: ../build/src/ui_dlgaccountsbase.h:327 +#, fuzzy +msgid "Remove the selected account" +msgstr "Убрать этот аккаунт" + +#: ../build/src/ui_dlgaccountsbase.h:330 +msgid "" +"This button will remove the selected account in the list below. Be sure you " +"really don't need it anymore. If you think you might use it again later, " +"just uncheck it." +msgstr "" + +#: ../build/src/ui_dlgaccountsbase.h:335 +msgid "Remove" +msgstr "" + +#: ../build/src/ui_dlgaccountsbase.h:336 +msgid "Backspace, Return" +msgstr "" + +#: ../build/src/ui_dlgaccountsbase.h:338 +msgid "Add a new account" +msgstr "Добавить новый аккаунт" + +#: ../build/src/ui_dlgaccountsbase.h:341 +msgid "" +"This button enables you to initialize a new account. You will then be able " +"to edit it using the form on the right." +msgstr "" + +#: ../build/src/ui_dlgaccountsbase.h:343 +msgid "Add" +msgstr "" + +#: ../build/src/ui_dlgaccountsbase.h:345 +#, fuzzy +msgid "Get this account down" +msgstr "Убрать этот аккаунт" + +#: ../build/src/ui_dlgaccountsbase.h:348 ../build/src/ui_dlgaccountsbase.h:355 +msgid "" +"By default, when you place a call, sflphone will use the first account in " +"this list which is \"registered\". Change the order of the accounts using " +"the \"Up\" and \"Down\" arrows." +msgstr "" + +#: ../build/src/ui_dlgaccountsbase.h:350 +msgid "Down" +msgstr "Вниз" + +#: ../build/src/ui_dlgaccountsbase.h:352 +#, fuzzy +msgid "Get this account up" +msgstr "Убрать этот аккаунт" + +#: ../build/src/ui_dlgaccountsbase.h:357 +msgid "Up" +msgstr "Вверх" + +#: ../build/src/ui_dlgaccountsbase.h:358 +msgid "Apply" +msgstr "Применить" + +#: ../build/src/ui_dlgaccountsbase.h:363 +msgid "SIP" +msgstr "SIP" + +#: ../build/src/ui_dlgaccountsbase.h:364 +msgid "IAX" +msgstr "IAX" + +#: ../build/src/ui_dlgaccountsbase.h:370 +msgid "State" +msgstr "Статус" + +#: ../build/src/ui_dlgaccountsbase.h:373 +msgid "Stun settings will be applied on each account" +msgstr "Stun-настройки будут использоваться для всех аккаунтов" + +#: ../build/src/ui_dlgaccountsbase.h:374 +#, fuzzy +msgid "Enable Stun" +msgstr "&Включить STUN" + +#: ../build/src/ui_dlgaccountsbase.h:375 +msgid "choose Stun server (example : stunserver.org)" +msgstr "" + +#: ../build/src/ui_dlgaddressbookbase.h:143 +msgid "Maximum &results" +msgstr "Максимальное &количество результатов" + +#: ../build/src/ui_dlgaddressbookbase.h:144 +msgid "Display &photo if available" +msgstr "Показать &фотографию контакта (если имеется)" + +#: ../build/src/ui_dlgaddressbookbase.h:145 +msgid "Display phone numbers of these &types :" +msgstr "Если контакт имеет несколько номеров, показать &только :" + +#: ../build/src/ui_dlgaddressbookbase.h:146 +msgid "&Work" +msgstr "&Рабочий номер" + +#: ../build/src/ui_dlgaddressbookbase.h:147 +msgid "&Mobile" +msgstr "Номер &мобильника" + +#: ../build/src/ui_dlgaddressbookbase.h:148 +msgid "&Home" +msgstr "&Домашний номер" + +#: ../build/src/ui_dlgaudiobase.h:265 +#, fuzzy +msgid "Audio device" +msgstr "Звуковое устройство" + +#: ../build/src/ui_dlgaudiobase.h:268 +msgid "ALSA" +msgstr "ALSA" + +#: ../build/src/ui_dlgaudiobase.h:269 +msgid "PulseAudio" +msgstr "PulseAudio" + +#: ../build/src/ui_dlgaudiobase.h:271 +#, fuzzy +msgid "Enable ringtones" +msgstr "Включить звонок" + +#: ../build/src/ui_dlgaudiobase.h:272 +msgid "*.ul *.au *.wav" +msgstr "" + +#: ../build/src/ui_dlgaudiobase.h:273 +msgid "&Codecs" +msgstr "&Кодеки" + +#: ../build/src/ui_dlgaudiobase.h:275 +msgid "Active" +msgstr "" + +#: ../build/src/ui_dlgaudiobase.h:277 +msgid "Name" +msgstr "Имя" + +#: ../build/src/ui_dlgaudiobase.h:279 +msgid "Frequency" +msgstr "Частота" + +#: ../build/src/ui_dlgaudiobase.h:281 +msgid "Bitrate" +msgstr "Битрейт" + +#: ../build/src/ui_dlgaudiobase.h:283 +msgid "Bandwidth" +msgstr "Пропускная способность" + +#: ../build/src/ui_dlgaudiobase.h:286 +msgid "ALSA settings" +msgstr "Настройка ALSA" + +#: ../build/src/ui_dlgaudiobase.h:287 +#, fuzzy +msgid "ALSA plugin" +msgstr "ALSA-плагин" + +#: ../build/src/ui_dlgaudiobase.h:288 +msgid "In" +msgstr "" + +#: ../build/src/ui_dlgaudiobase.h:289 +msgid "Out" +msgstr "" + +#: ../build/src/ui_dlgaudiobase.h:290 +msgid "PulseAudio settings" +msgstr "Настройка PulseAudio" + +#: ../build/src/ui_dlgaudiobase.h:291 +msgid "Mute other applications during a call" +msgstr "Приглушить звук других програм во время звонка" + +#: ../build/src/ui_dlgdisplaybase.h:121 +msgid "Enable notifications" +msgstr "Включить предупреждения" + +#: ../build/src/ui_dlgdisplaybase.h:122 +msgid "On incoming &calls" +msgstr "При входящих звонках" + +#: ../build/src/ui_dlgdisplaybase.h:123 +msgid "On &messages" +msgstr "При звуковых &сообщениях" + +#: ../build/src/ui_dlgdisplaybase.h:124 +msgid "Show main window" +msgstr "Показать главное окно" + +#: ../build/src/ui_dlgdisplaybase.h:125 +msgid "On &start" +msgstr "При &запуске" + +#: ../build/src/ui_dlgdisplaybase.h:126 +msgid "On &incoming calls" +msgstr "При входящих звонках" + +#: ../build/src/ui_dlggeneralbase.h:166 +msgid "Keep my history for at least" +msgstr "" + +#: ../build/src/ui_dlggeneralbase.h:167 +msgid "days" +msgstr "" + +#: ../build/src/ui_dlggeneralbase.h:168 +#, fuzzy +msgid "Clear history" +msgstr "Стереть журнал" + +#: ../build/src/ui_dlggeneralbase.h:169 +msgid "Connection" +msgstr "Подключение" + +#: ../build/src/ui_dlggeneralbase.h:170 +#, fuzzy +msgid "SIP Port" +msgstr "SIP-порт" + +#: ../build/src/ui_dlggeneralbase.h:171 +msgid "Attention " +msgstr "Внимание" + +#: ../build/src/ui_dlghooksbase.h:174 +msgid "URL Argument" +msgstr "" + +#: ../build/src/ui_dlghooksbase.h:175 +#, c-format +msgid "Custom commands with URL %s will be replaced with the passed URL." +msgstr "" + +#: ../build/src/ui_dlghooksbase.h:176 +msgid "Trigger on specific SIP header" +msgstr "" + +#: ../build/src/ui_dlghooksbase.h:177 +msgid "Trigger on IAX2 URL" +msgstr "" + +#: ../build/src/ui_dlghooksbase.h:178 +#, fuzzy +msgid "Command to run" +msgstr "Команда" + +#: ../build/src/ui_dlghooksbase.h:179 +msgid "Phone number formatting" +msgstr "Формат номера телефона" + +#: ../build/src/ui_dlghooksbase.h:180 +msgid "Add phone number prefix" +msgstr "Добавить перед на набранными номерами" + +#: ../build/src/ui_dlgrecordbase.h:92 +msgid "Destination folder" +msgstr "Папка для записи" + +#: ../build/src/ui_sflphone_kdeview_base.h:391 +#, fuzzy +msgid "Pick up" +msgstr "&Взять трубку" + +#: ../build/src/ui_sflphone_kdeview_base.h:395 +#, fuzzy +msgid "History" +msgstr "Журнал" + +#: ../build/src/ui_sflphone_kdeview_base.h:397 +#, fuzzy +msgid "Configure accounts" +msgstr "Настроить &аккаунты" + +#: ../build/src/ui_sflphone_kdeview_base.h:398 +#, fuzzy +msgid "Configure audio" +msgstr "Настроить &звук" + +#: ../build/src/ui_sflphone_kdeview_base.h:399 +#: ../build/src/ui_sflphone_kdeview_base.h:401 +#, fuzzy +msgid "Configure SFLphone" +msgstr "&Настроить SFLPhone" + +#: ../build/src/ui_sflphone_kdeview_base.h:403 +#, fuzzy +msgid "Display volume bars" +msgstr "Показать уровень &громкости" + +#: ../build/src/ui_sflphone_kdeview_base.h:404 +#, fuzzy +msgid "Display dialpad" +msgstr "Показать &клавиатуру" + +#: ../build/src/ui_sflphone_kdeview_base.h:405 +#, fuzzy +msgctxt "Action record a call" +msgid "Record" +msgstr "Записать" + +#: ../build/src/ui_sflphone_kdeview_base.h:406 +#, fuzzy +msgid "Account creation wizard" +msgstr "&Мастер настройки SFLphone" + +#: ../build/src/ui_sflphone_kdeview_base.h:408 +msgid "Attention:number of results exceeds max displayed." +msgstr "" + +#~ msgid "Attention : SIP port must be over 1024 !" +#~ msgstr "Внимание : SIP-порт должен быть больше чем 1024 !" + +#~ msgid "Attention : SIP port must be under 65536 !" +#~ msgstr "Внимание : SIP-порт должен быть меньше чем 65536 !" + +#~ msgid "about" +#~ msgstr "О" + +#~ msgid "Configure general settings" +#~ msgstr "Общие настройки" + +#~ msgid "&Capacity" +#~ msgstr "Вместимость" + +#~ msgid "Configure display" +#~ msgstr "Настроить экран" + +#~ msgid "Configure user accounts" +#~ msgstr "Настройка аккаунтов пользователей" + +#~ msgid "&Alias" +#~ msgstr "Псевдоним" + +#~ msgid "&Protocol" +#~ msgstr "Протокол" + +#~ msgid "&Server" +#~ msgstr "&Сервер" + +#~ msgid "&User" +#~ msgstr "&Пользователь" + +#~ msgid "Pass&word" +#~ msgstr "Па&роль" + +#~ msgid "&Mailbox" +#~ msgstr "&Звуковые сообщения" + +#~ msgid "Configure audio settings" +#~ msgstr "Настройки звука" + +#~ msgid "Configure record settings" +#~ msgstr "Настроить запись звонков" + +#~ msgid "Configure address book settings" +#~ msgstr "Настроить адресную книгу" + +#~ msgid "Configure hooks settings" +#~ msgstr "Настроить перехватчики" + +#~ msgid "SIP Protocol" +#~ msgstr "SIP-Протокол" + +#~ msgid "IAX2 Protocol" +#~ msgstr "IAX2-Протокол" + +#~ msgid "SIP Header" +#~ msgstr "SIP Заголовок" + +#~ msgid "Prepend" +#~ msgstr "Добавить в начало" + +#~ msgid "&Hang up" +#~ msgstr "&Положить трубку" + +#~ msgid "H&old" +#~ msgstr "&Удержать звонок" + +#~ msgid "&Transfer" +#~ msgstr "Пе&реслать звонок на другой номер" + +#~ msgid "&About" +#~ msgstr "&О SFLphone" + +#~ msgid "&Record" +#~ msgstr "Записать" +======= +msgid "" +msgstr "" +"Project-Id-Version: SFLphone 0.9.6\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-07-08 15:18-0400\n" +"PO-Revision-Date: 2009-06-08 10:19 GMT-5\n" +"Last-Translator: HUSSEIN ABDALLAH <hussein.abdallah@savoirfairelinux.com>\n" +"Language-Team: Savoir-Faire Linux Inc <sflphoneteam@savoirfairelinux.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../src/Account.cpp:34 +msgctxt "account state" +msgid "Registered" +msgstr "Зарегестрирован" + +#: ../src/Account.cpp:36 +msgctxt "account state" +msgid "Not Registered" +msgstr "Не зарегестрирован" + +#: ../src/Account.cpp:38 +msgctxt "account state" +msgid "Trying..." +msgstr "попытка подключения..." + +#: ../src/Account.cpp:40 +msgctxt "account state" +msgid "Error" +msgstr "Ошибка" + +#: ../src/Account.cpp:42 +msgctxt "account state" +msgid "Bad authentification" +msgstr "Включить предупреждения" + +#: ../src/Account.cpp:44 +msgctxt "account state" +msgid "Network unreachable" +msgstr "Сеть недоступна" + +#: ../src/Account.cpp:46 +msgctxt "account state" +msgid "Host unreachable" +msgstr "Сервер недоступен" + +#: ../src/Account.cpp:48 +msgctxt "account state" +msgid "Stun configuration error" +msgstr "Окно настроек" + +#: ../src/Account.cpp:50 +msgctxt "account state" +msgid "Stun server invalid" +msgstr "STUN-сервер недействителен" + +#: ../src/Account.cpp:51 +msgctxt "account state" +msgid "Invalid" +msgstr "Недействителен" + +#: ../src/AccountWizard.cpp:163 ../src/AccountWizard.cpp:278 +msgid "Account Creation Wizard" +msgstr "Мастер настройки SFLphone" + +#: ../src/AccountWizard.cpp:199 +msgid "Creation of account succeed with these parameters" +msgstr "Успешное создание аккаунта с этими настройками" + +#: ../src/AccountWizard.cpp:211 +msgid "Creation of account has failed for the reason" +msgstr "Создание аккаунта не получилось по этим причинам" + +#: ../src/AccountWizard.cpp:217 +msgid "Register of account succeed with these parameters" +msgstr "Успешное регистрация аккаунта с этими настройками" + +#: ../src/AccountWizard.cpp:255 ../src/AccountWizard.cpp:440 +#: ../build/src/ui_dlgaccountsbase.h:359 +msgid "Alias" +msgstr "Псевдоним" + +#: ../src/AccountWizard.cpp:256 ../src/AccountWizard.cpp:441 +#: ../build/src/ui_dlgaccountsbase.h:366 +msgid "Server" +msgstr "Сервер" + +#: ../src/AccountWizard.cpp:257 ../src/AccountWizard.cpp:442 +#: ../build/src/ui_dlgaccountsbase.h:367 +msgid "User" +msgstr "Пользователь" + +#: ../src/AccountWizard.cpp:258 ../src/AccountWizard.cpp:443 +#: ../build/src/ui_dlgaccountsbase.h:368 +msgid "Password" +msgstr "Пароль" + +#: ../src/AccountWizard.cpp:259 ../build/src/ui_dlgaccountsbase.h:360 +msgid "Protocol" +msgstr "Протокол" + +#: ../src/AccountWizard.cpp:260 ../build/src/ui_dlgaccountsbase.h:369 +#: ../build/src/ui_sflphone_kdeview_base.h:396 +msgid "Mailbox" +msgstr "Автоответчик" + +#: ../src/AccountWizard.cpp:279 +msgid "Welcome to the Account creation wizard of SFLphone" +msgstr "Добро пожаловать в мастер настройки SFLphone" + +#: ../src/AccountWizard.cpp:281 +msgid "This wizard will help you setting up an account." +msgstr "Этот мастер установки поможет вам настроить ваш аккаунт." + +#: ../src/AccountWizard.cpp:309 ../src/conf/ConfigurationDialog.cpp:50 +msgid "Accounts" +msgstr "Аккаунты" + +#: ../src/AccountWizard.cpp:310 +msgid "Please choose between those options :" +msgstr "Выберите пожалуйста тип аккаунта :" + +#: ../src/AccountWizard.cpp:312 +msgid "Create a free SIP/IAX2 account on sflphone.org" +msgstr "Создать бесплатный SIP/IAX2-аккаунт на sflphone.org" + +#: ../src/AccountWizard.cpp:313 +msgid "Register an existing SIP/IAX2 account" +msgstr "Зарегистрировать существующий SIP или IAX2 аккаунт" + +#: ../src/AccountWizard.cpp:352 +msgid "VoIP Protocols" +msgstr "VoIP-протоколы" + +#: ../src/AccountWizard.cpp:353 +msgid "Choose the account type" +msgstr "Выберите тип аккаунта:" + +#: ../src/AccountWizard.cpp:355 +msgid "Register a SIP (Session Initiation Protocol) account" +msgstr "Зарегистрировать существующий SIP-аккаунт" + +#: ../src/AccountWizard.cpp:356 +msgid "Register a IAX2 (InterAsterisk eXchange) account" +msgstr "Зарегистрировать существующий IAX2-аккаунт" + +#: ../src/AccountWizard.cpp:395 +msgid "Optionnal Email Address" +msgstr "Электронный адрес (необязательный) " + +#: ../src/AccountWizard.cpp:396 +msgid "This email address will be used to send your voicemail messages." +msgstr "Этот электронный адрес будет использоваться для речевых сообщений" + +#: ../src/AccountWizard.cpp:398 +msgid "Email address" +msgstr "Адрес эл. почты" + +#: ../src/AccountWizard.cpp:432 +msgid "SIP Account Settings" +msgstr "Настройки SIP-аккаунта" + +#: ../src/AccountWizard.cpp:436 +msgid "IAX2 Account Settings" +msgstr "Настройки IAX2-аккаунта" + +#: ../src/AccountWizard.cpp:438 +msgid "Please full these settings fields." +msgstr "Заполните пожалуйста эти поля." + +#: ../src/AccountWizard.cpp:444 +msgid "Voicemail number" +msgstr "Номер автоответчика" + +#: ../src/AccountWizard.cpp:523 +msgid "Network Address Translation (NAT)" +msgstr "Network Address Translation (NAT)" + +#: ../src/AccountWizard.cpp:524 +msgid "" +"You should probably enable this option if you're placed under a firewall" +msgstr "" +"Вы наверное должны это включить если вы находитесь за сетевым экраном." + +#: ../src/AccountWizard.cpp:526 +msgid "Enable STUN" +msgstr "Включить STUN" + +#: ../src/AccountWizard.cpp:527 +msgid "Stun Server" +msgstr "STUN-сервер" + +#: ../src/AccountWizard.cpp:561 +msgid "Account Definition Finished" +msgstr "Настройка аккаунта закончена." + +#: ../src/AccountWizard.cpp:562 +msgid "" +"After checking the settings you chose, click \"Finish\" to create the " +"account." +msgstr "" +"После просмотра выбранных настроек, нажмите на \"Закончить\" чтобы создать " +"аккаунт. " + +#: ../src/ActionSetAccountFirst.cpp:26 +msgid "Default account" +msgstr "Аккаунт по умолчанию" + +#: ../src/Call.cpp:116 +msgid "Transfer to : " +msgstr "Переслать звонок на другой номер :" + +#: ../src/main.cpp:34 +msgid "SFLphone KDE Client" +msgstr "SFLphone - версия для KDE " + +#: ../src/main.cpp:38 +msgid "(C) 2009 Savoir-faire Linux" +msgstr "(C) 2009 Savoir-faire Linux" + +#: ../src/main.cpp:42 +msgid "Jérémy Quentin" +msgstr "Jérémy Quentin" + +#: ../src/main.cpp:43 +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Hussein Abdallah" + +#: ../src/main.cpp:43 +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "hussein.abdallah@savoirfairelinux.com" + +#: ../src/SFLPhone.cpp:62 ../src/sflphone_kdeview.cpp:1066 +#: ../src/sflphone_kdeview.cpp:1071 ../src/sflphone_kdeview.cpp:1076 +msgid "SFLphone" +msgstr "SFLphone" + +#: ../src/SFLPhone.cpp:181 +msgid "You still have some calls open. Please close all calls before quitting." +msgstr "" +"У вас ещё есть неоконченные звонки. Пожалуйста проверьте что все звонки " +"окончены перед тем как выйти." + +#: ../src/SFLPhone.cpp:209 +msgid "Incoming call" +msgstr "Входящий звонок" + +#: ../src/SFLPhone.cpp:210 +msgid "You have an incoming call from" +msgstr "Входящей звонок от " + +#: ../src/SFLPhone.cpp:210 +msgid "Click to accept or refuse it." +msgstr "Нажмите чтобы принять или отклонить." + +#: ../src/sflphone_kdeview.cpp:883 +msgid "No account registered" +msgstr "Нет зарегистрированных аккаунтов" + +#: ../src/sflphone_kdeview.cpp:887 +msgid "Using account" +msgstr "Используется аккаунт" + +#: ../src/sflphone_kdeview.cpp:1066 +msgid "Main screen" +msgstr "Главный экран" + +#: ../src/sflphone_kdeview.cpp:1071 ../build/src/ui_dlggeneralbase.h:165 +msgid "Call history" +msgstr "Журнал звонков" + +#: ../src/sflphone_kdeview.cpp:1076 +#: ../build/src/ui_sflphone_kdeview_base.h:407 +msgid "Address book" +msgstr "Адресная книга" + +#: ../src/sflphone_kdeview.cpp:1090 ../src/sflphone_kdeview.cpp:1151 +msgid "Edit before call" +msgstr "Изменить перед звонком" + +#: ../src/sflphone_const.h:56 +msgid "Call" +msgstr "Звонок" + +#: ../src/sflphone_const.h:57 ../build/src/ui_sflphone_kdeview_base.h:392 +msgid "Hang up" +msgstr "Положить трубку" + +#: ../src/sflphone_const.h:58 ../build/src/ui_sflphone_kdeview_base.h:393 +msgid "Hold" +msgstr "Удержать звонок" + +#: ../src/sflphone_const.h:59 ../build/src/ui_sflphone_kdeview_base.h:394 +msgid "Transfer" +msgstr "Переслать звонок на другой номер" + +#: ../src/sflphone_const.h:60 +msgid "Record" +msgstr "Записать" + +#: ../src/sflphone_const.h:61 +msgid "Accept" +msgstr "Принять" + +#: ../src/sflphone_const.h:62 +msgid "Refuse" +msgstr "Отклонить" + +#: ../src/sflphone_const.h:63 +msgid "Unhold" +msgstr "Снова взять" + +#: ../src/sflphone_const.h:64 +msgid "Give up transfer" +msgstr "Отменить пересылку звонка" + +#: ../src/sflphone_const.h:65 +msgid "Call back" +msgstr "Перезвонить" + +#: ../src/sflphone_const.h:66 +msgid "Give up search" +msgstr "Отменить поиск" + +#: ../src/conf/ConfigurationDialog.cpp:48 ../build/src/ui_dlgrecordbase.h:91 +msgid "General" +msgstr "Общие настройки" + +#: ../src/conf/ConfigurationDialog.cpp:49 +msgid "Display" +msgstr "Экран" + +#: ../src/conf/ConfigurationDialog.cpp:51 +msgid "Audio" +msgstr "Звук" + +#: ../src/conf/ConfigurationDialog.cpp:52 +msgid "Address Book" +msgstr "Адресная книга" + +#: ../src/conf/ConfigurationDialog.cpp:53 +msgctxt "Config section" +msgid "Record" +msgstr "Запись переговоров" + +#: ../src/conf/ConfigurationDialog.cpp:54 +msgid "Hooks" +msgstr "перехватчики (hooks)" + +#: ../build/src/ui_dlgaccountsbase.h:321 +#: ../build/src/ui_dlgaddressbookbase.h:142 ../build/src/ui_dlgaudiobase.h:263 +#: ../build/src/ui_dlgdisplaybase.h:120 ../build/src/ui_dlggeneralbase.h:164 +#: ../build/src/ui_dlghooksbase.h:173 ../build/src/ui_dlgrecordbase.h:90 +#: ../build/src/ui_sflphone_kdeview_base.h:390 +msgid "Form" +msgstr "" + +#: ../build/src/ui_dlgaccountsbase.h:323 +msgid "" +"By default, when you place a call, sflphone will use the first account in " +"this list which is \"registered\". Change the order of the accounts using " +"the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking " +"them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" " +"buttons. Edit the selected account with the form on the right." +msgstr "" +"По умолчанию, SFLPhone будет использовать первый аккаунт в списке " +"зарегистрированных аккаунтов. Последовательность использования " +"аккаунтов можно изменить при помощи стрелок \"Вверх\" и \"Вниз\"." + + +#: ../build/src/ui_dlgaccountsbase.h:327 +msgid "Remove the selected account" +msgstr "Убрать этот аккаунт" + +#: ../build/src/ui_dlgaccountsbase.h:330 +msgid "" +"This button will remove the selected account in the list below. Be sure you " +"really don't need it anymore. If you think you might use it again later, " +"just uncheck it." +msgstr "" +"Это кнопка уберëт аккаунт. Если вы думаете его использовать позже, " +"то достаточно его отменить " + +#: ../build/src/ui_dlgaccountsbase.h:335 +msgid "Remove" +msgstr "Убрать" + +#: ../build/src/ui_dlgaccountsbase.h:336 +msgid "Backspace, Return" +msgstr "Backspace, Return" + +#: ../build/src/ui_dlgaccountsbase.h:338 +msgid "Add a new account" +msgstr "Добавить новый аккаунт" + +#: ../build/src/ui_dlgaccountsbase.h:341 +msgid "" +"This button enables you to initialize a new account. You will then be able " +"to edit it using the form on the right." +msgstr "" +"Это кнопка позволит вам добавить новый аккаунт. После этого вы сможете " +"его изменить при помощи экрана справа." + +#: ../build/src/ui_dlgaccountsbase.h:343 +msgid "Add" +msgstr "Добавить" + +#: ../build/src/ui_dlgaccountsbase.h:345 +msgid "Get this account down" +msgstr "Убрать этот аккаунт" + +#: ../build/src/ui_dlgaccountsbase.h:348 ../build/src/ui_dlgaccountsbase.h:355 +msgid "" +"By default, when you place a call, sflphone will use the first account in " +"this list which is \"registered\". Change the order of the accounts using " +"the \"Up\" and \"Down\" arrows." +msgstr "" +"По умолчанию, SFLPhone будет использовать первый аккаунт в списке " +"зарегистрированных аккаунтов. Последовательность использования " +"аккаунтов можно изменить при помощи стрелок \"Вверх\" и \"Вниз\"." + + +#: ../build/src/ui_dlgaccountsbase.h:350 +msgid "Down" +msgstr "Вниз" + +#: ../build/src/ui_dlgaccountsbase.h:352 +msgid "Get this account up" +msgstr "Убрать этот аккаунт" + +#: ../build/src/ui_dlgaccountsbase.h:357 +msgid "Up" +msgstr "Вверх" + +#: ../build/src/ui_dlgaccountsbase.h:358 +msgid "Apply" +msgstr "Применить" + +#: ../build/src/ui_dlgaccountsbase.h:363 +msgid "SIP" +msgstr "SIP" + +#: ../build/src/ui_dlgaccountsbase.h:364 +msgid "IAX" +msgstr "IAX" + +#: ../build/src/ui_dlgaccountsbase.h:370 +msgid "State" +msgstr "Статус" + +#: ../build/src/ui_dlgaccountsbase.h:373 +msgid "Stun settings will be applied on each account" +msgstr "Stun-настройки будут использоваться для всех аккаунтов" + +#: ../build/src/ui_dlgaccountsbase.h:374 +msgid "Enable Stun" +msgstr "&Включить STUN" + +#: ../build/src/ui_dlgaccountsbase.h:375 +msgid "choose Stun server (example : stunserver.org)" +msgstr "Выберите STUN-сервер (например : stunserver.org )" + +#: ../build/src/ui_dlgaddressbookbase.h:143 +msgid "Maximum &results" +msgstr "Максимальное &количество результатов" + +#: ../build/src/ui_dlgaddressbookbase.h:144 +msgid "Display &photo if available" +msgstr "Показать &фотографию контакта (если имеется)" + +#: ../build/src/ui_dlgaddressbookbase.h:145 +msgid "Display phone numbers of these &types :" +msgstr "Если контакт имеет несколько номеров, показать &только :" + +#: ../build/src/ui_dlgaddressbookbase.h:146 +msgid "&Work" +msgstr "&Рабочий номер" + +#: ../build/src/ui_dlgaddressbookbase.h:147 +msgid "&Mobile" +msgstr "Номер &мобильника" + +#: ../build/src/ui_dlgaddressbookbase.h:148 +msgid "&Home" +msgstr "&Домашний номер" + +#: ../build/src/ui_dlgaudiobase.h:265 +msgid "Audio device" +msgstr "Звуковое устройство" + +#: ../build/src/ui_dlgaudiobase.h:268 +msgid "ALSA" +msgstr "ALSA" + +#: ../build/src/ui_dlgaudiobase.h:269 +msgid "PulseAudio" +msgstr "PulseAudio" + +#: ../build/src/ui_dlgaudiobase.h:271 +msgid "Enable ringtones" +msgstr "Включить звонок" + +#: ../build/src/ui_dlgaudiobase.h:272 +msgid "*.ul *.au *.wav" +msgstr "*.ul *.au *.wav" + +#: ../build/src/ui_dlgaudiobase.h:273 +msgid "&Codecs" +msgstr "&Кодеки" + +#: ../build/src/ui_dlgaudiobase.h:275 +msgid "Active" +msgstr "Вкл." + +#: ../build/src/ui_dlgaudiobase.h:277 +msgid "Name" +msgstr "Имя" + +#: ../build/src/ui_dlgaudiobase.h:279 +msgid "Frequency" +msgstr "Частота" + +#: ../build/src/ui_dlgaudiobase.h:281 +msgid "Bitrate" +msgstr "Битрейт" + +#: ../build/src/ui_dlgaudiobase.h:283 +msgid "Bandwidth" +msgstr "Пропускная способность" + +#: ../build/src/ui_dlgaudiobase.h:286 +msgid "ALSA settings" +msgstr "Настройка ALSA" + +#: ../build/src/ui_dlgaudiobase.h:287 +msgid "ALSA plugin" +msgstr "ALSA-плагин" + +#: ../build/src/ui_dlgaudiobase.h:288 +msgid "In" +msgstr "Вход" + +#: ../build/src/ui_dlgaudiobase.h:289 +msgid "Out" +msgstr "Выход" + +#: ../build/src/ui_dlgaudiobase.h:290 +msgid "PulseAudio settings" +msgstr "Настройка PulseAudio" + +#: ../build/src/ui_dlgaudiobase.h:291 +msgid "Mute other applications during a call" +msgstr "Приглушить звук других програм во время звонка" + +#: ../build/src/ui_dlgdisplaybase.h:121 +msgid "Enable notifications" +msgstr "Включить предупреждения" + +#: ../build/src/ui_dlgdisplaybase.h:122 +msgid "On incoming &calls" +msgstr "При входящих звонках" + +#: ../build/src/ui_dlgdisplaybase.h:123 +msgid "On &messages" +msgstr "При звуковых &сообщениях" + +#: ../build/src/ui_dlgdisplaybase.h:124 +msgid "Show main window" +msgstr "Показать главное окно" + +#: ../build/src/ui_dlgdisplaybase.h:125 +msgid "On &start" +msgstr "При &запуске" + +#: ../build/src/ui_dlgdisplaybase.h:126 +msgid "On &incoming calls" +msgstr "При входящих звонках" + +#: ../build/src/ui_dlggeneralbase.h:166 +msgid "Keep my history for at least" +msgstr "Сохранить журнал звонков как минимум " + +#: ../build/src/ui_dlggeneralbase.h:167 +msgid "days" +msgstr "дней" + +#: ../build/src/ui_dlggeneralbase.h:168 +msgid "Clear history" +msgstr "Стереть журнал" + +#: ../build/src/ui_dlggeneralbase.h:169 +msgid "Connection" +msgstr "Подключение" + +#: ../build/src/ui_dlggeneralbase.h:170 +msgid "SIP Port" +msgstr "SIP-порт" + +#: ../build/src/ui_dlggeneralbase.h:171 +msgid "Attention " +msgstr "Внимание" + +#: ../build/src/ui_dlghooksbase.h:174 +msgid "URL Argument" +msgstr "Аргумент переданный в URL" + +#: ../build/src/ui_dlghooksbase.h:175 +#, c-format +msgid "Custom commands with URL %s will be replaced with the passed URL." +msgstr "Команды с URL %s будут заменены на переданный URL" + +#: ../build/src/ui_dlghooksbase.h:176 +msgid "Trigger on specific SIP header" +msgstr "Запустить при определëнном SIP-заголовке" + +#: ../build/src/ui_dlghooksbase.h:177 +msgid "Trigger on IAX2 URL" +msgstr "Запустить при URL IAX2 " + +#: ../build/src/ui_dlghooksbase.h:178 +msgid "Command to run" +msgstr "Команда" + +#: ../build/src/ui_dlghooksbase.h:179 +msgid "Phone number formatting" +msgstr "Формат номера телефона" + +#: ../build/src/ui_dlghooksbase.h:180 +msgid "Add phone number prefix" +msgstr "Добавить перед на набранными номерами" + +#: ../build/src/ui_dlgrecordbase.h:92 +msgid "Destination folder" +msgstr "Папка для записи" + +#: ../build/src/ui_sflphone_kdeview_base.h:391 +msgid "Pick up" +msgstr "&Взять трубку" + +#: ../build/src/ui_sflphone_kdeview_base.h:395 +msgid "History" +msgstr "Журнал" + +#: ../build/src/ui_sflphone_kdeview_base.h:397 +msgid "Configure accounts" +msgstr "Настроить &аккаунты" + +#: ../build/src/ui_sflphone_kdeview_base.h:398 +msgid "Configure audio" +msgstr "Настроить &звук" + +#: ../build/src/ui_sflphone_kdeview_base.h:399 +#: ../build/src/ui_sflphone_kdeview_base.h:401 +msgid "Configure SFLphone" +msgstr "&Настроить SFLPhone" + +#: ../build/src/ui_sflphone_kdeview_base.h:403 +msgid "Display volume bars" +msgstr "Показать уровень &громкости" + +#: ../build/src/ui_sflphone_kdeview_base.h:404 +msgid "Display dialpad" +msgstr "Показать &клавиатуру" + +#: ../build/src/ui_sflphone_kdeview_base.h:405 +msgctxt "Action record a call" +msgid "Record" +msgstr "Записать" + +#: ../build/src/ui_sflphone_kdeview_base.h:406 +msgid "Account creation wizard" +msgstr "&Мастер настройки SFLphone" + +#: ../build/src/ui_sflphone_kdeview_base.h:408 +msgid "Attention:number of results exceeds max displayed." +msgstr "Внимание: Количество результатов превышает настроенный максимум результатов" + +#~ msgid "Attention : SIP port must be over 1024 !" +#~ msgstr "Внимание : SIP-порт должен быть больше чем 1024 !" + +#~ msgid "Attention : SIP port must be under 65536 !" +#~ msgstr "Внимание : SIP-порт должен быть меньше чем 65536 !" + +#~ msgid "about" +#~ msgstr "О" + +#~ msgid "Configure general settings" +#~ msgstr "Общие настройки" + +#~ msgid "&Capacity" +#~ msgstr "Вместимость" + +#~ msgid "Configure display" +#~ msgstr "Настроить экран" + +#~ msgid "Configure user accounts" +#~ msgstr "Настройка аккаунтов пользователей" + +#~ msgid "&Alias" +#~ msgstr "Псевдоним" + +#~ msgid "&Protocol" +#~ msgstr "Протокол" + +#~ msgid "&Server" +#~ msgstr "&Сервер" + +#~ msgid "&User" +#~ msgstr "&Пользователь" + +#~ msgid "Pass&word" +#~ msgstr "Па&роль" + +#~ msgid "&Mailbox" +#~ msgstr "&Звуковые сообщения" + +#~ msgid "Configure audio settings" +#~ msgstr "Настройки звука" + +#~ msgid "Configure record settings" +#~ msgstr "Настроить запись звонков" + +#~ msgid "Configure address book settings" +#~ msgstr "Настроить адресную книгу" + +#~ msgid "Configure hooks settings" +#~ msgstr "Настроить перехватчики" + +#~ msgid "SIP Protocol" +#~ msgstr "SIP-Протокол" + +#~ msgid "IAX2 Protocol" +#~ msgstr "IAX2-Протокол" + +#~ msgid "SIP Header" +#~ msgstr "SIP Заголовок" + +#~ msgid "Prepend" +#~ msgstr "Добавить в начало" + +#~ msgid "&Hang up" +#~ msgstr "&Положить трубку" + +#~ msgid "H&old" +#~ msgstr "&Удержать звонок" + +#~ msgid "&Transfer" +#~ msgstr "Пе&реслать звонок на другой номер" + +#~ msgid "&About" +#~ msgstr "&О SFLphone" + +#~ msgid "&Record" +#~ msgstr "Записать" diff --git a/sflphone-client-kde/po/sflphone-client-kde.pot b/sflphone-client-kde/po/sflphone-client-kde.pot index 89dc63a1b0dae9b016ff19ef78eb987f0db8f861..a1cbc3c04ba985cefbf4af95c31f9baf8983a77e 100644 --- a/sflphone-client-kde/po/sflphone-client-kde.pot +++ b/sflphone-client-kde/po/sflphone-client-kde.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-03 13:49-0400\n" +"POT-Creation-Date: 2009-07-08 15:18-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -222,22 +222,22 @@ msgstr "" msgid "(C) 2009 Savoir-faire Linux" msgstr "" -#: ../src/main.cpp:43 +#: ../src/main.cpp:42 msgid "Jérémy Quentin" msgstr "" -#: ../src/main.cpp:45 +#: ../src/main.cpp:43 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" -#: ../src/main.cpp:45 +#: ../src/main.cpp:43 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" -#: ../src/SFLPhone.cpp:62 ../src/sflphone_kdeview.cpp:1047 -#: ../src/sflphone_kdeview.cpp:1052 ../src/sflphone_kdeview.cpp:1057 +#: ../src/SFLPhone.cpp:62 ../src/sflphone_kdeview.cpp:1066 +#: ../src/sflphone_kdeview.cpp:1071 ../src/sflphone_kdeview.cpp:1076 msgid "SFLphone" msgstr "" @@ -257,28 +257,28 @@ msgstr "" msgid "Click to accept or refuse it." msgstr "" -#: ../src/sflphone_kdeview.cpp:864 +#: ../src/sflphone_kdeview.cpp:883 msgid "No account registered" msgstr "" -#: ../src/sflphone_kdeview.cpp:868 +#: ../src/sflphone_kdeview.cpp:887 msgid "Using account" msgstr "" -#: ../src/sflphone_kdeview.cpp:1047 +#: ../src/sflphone_kdeview.cpp:1066 msgid "Main screen" msgstr "" -#: ../src/sflphone_kdeview.cpp:1052 ../build/src/ui_dlggeneralbase.h:165 +#: ../src/sflphone_kdeview.cpp:1071 ../build/src/ui_dlggeneralbase.h:165 msgid "Call history" msgstr "" -#: ../src/sflphone_kdeview.cpp:1057 +#: ../src/sflphone_kdeview.cpp:1076 #: ../build/src/ui_sflphone_kdeview_base.h:407 msgid "Address book" msgstr "" -#: ../src/sflphone_kdeview.cpp:1071 ../src/sflphone_kdeview.cpp:1132 +#: ../src/sflphone_kdeview.cpp:1090 ../src/sflphone_kdeview.cpp:1151 msgid "Edit before call" msgstr "" @@ -352,7 +352,7 @@ msgid "Hooks" msgstr "" #: ../build/src/ui_dlgaccountsbase.h:321 -#: ../build/src/ui_dlgaddressbookbase.h:142 ../build/src/ui_dlgaudiobase.h:262 +#: ../build/src/ui_dlgaddressbookbase.h:142 ../build/src/ui_dlgaudiobase.h:263 #: ../build/src/ui_dlgdisplaybase.h:120 ../build/src/ui_dlggeneralbase.h:164 #: ../build/src/ui_dlghooksbase.h:173 ../build/src/ui_dlgrecordbase.h:90 #: ../build/src/ui_sflphone_kdeview_base.h:390 @@ -476,56 +476,52 @@ msgstr "" msgid "&Home" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:264 +#: ../build/src/ui_dlgaudiobase.h:265 msgid "Audio device" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:267 +#: ../build/src/ui_dlgaudiobase.h:268 msgid "ALSA" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:268 +#: ../build/src/ui_dlgaudiobase.h:269 msgid "PulseAudio" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:270 +#: ../build/src/ui_dlgaudiobase.h:271 msgid "Enable ringtones" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:271 -msgid "&Codecs" +#: ../build/src/ui_dlgaudiobase.h:272 +msgid "*.ul *.au *.wav" msgstr "" #: ../build/src/ui_dlgaudiobase.h:273 -msgid "Active" +msgid "&Codecs" msgstr "" #: ../build/src/ui_dlgaudiobase.h:275 -msgid "Name" +msgid "Active" msgstr "" #: ../build/src/ui_dlgaudiobase.h:277 -msgid "Frequency" +msgid "Name" msgstr "" #: ../build/src/ui_dlgaudiobase.h:279 -msgid "Bitrate" +msgid "Frequency" msgstr "" #: ../build/src/ui_dlgaudiobase.h:281 -msgid "Bandwidth" -msgstr "" - -#: ../build/src/ui_dlgaudiobase.h:284 -msgid "ALSA settings" +msgid "Bitrate" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:285 -msgid "In" +#: ../build/src/ui_dlgaudiobase.h:283 +msgid "Bandwidth" msgstr "" #: ../build/src/ui_dlgaudiobase.h:286 -msgid "Out" +msgid "ALSA settings" msgstr "" #: ../build/src/ui_dlgaudiobase.h:287 @@ -533,10 +529,18 @@ msgid "ALSA plugin" msgstr "" #: ../build/src/ui_dlgaudiobase.h:288 -msgid "PulseAudio settings" +msgid "In" msgstr "" #: ../build/src/ui_dlgaudiobase.h:289 +msgid "Out" +msgstr "" + +#: ../build/src/ui_dlgaudiobase.h:290 +msgid "PulseAudio settings" +msgstr "" + +#: ../build/src/ui_dlgaudiobase.h:291 msgid "Mute other applications during a call" msgstr "" @@ -651,7 +655,7 @@ msgid "Display dialpad" msgstr "" #: ../build/src/ui_sflphone_kdeview_base.h:405 -msgctxt "Action record a calld" +msgctxt "Action record a call" msgid "Record" msgstr "" diff --git a/sflphone-client-kde/po/zh_CN/sflphone-client-kde.po b/sflphone-client-kde/po/zh_CN/sflphone-client-kde.po index 89dc63a1b0dae9b016ff19ef78eb987f0db8f861..a1cbc3c04ba985cefbf4af95c31f9baf8983a77e 100644 --- a/sflphone-client-kde/po/zh_CN/sflphone-client-kde.po +++ b/sflphone-client-kde/po/zh_CN/sflphone-client-kde.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-03 13:49-0400\n" +"POT-Creation-Date: 2009-07-08 15:18-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -222,22 +222,22 @@ msgstr "" msgid "(C) 2009 Savoir-faire Linux" msgstr "" -#: ../src/main.cpp:43 +#: ../src/main.cpp:42 msgid "Jérémy Quentin" msgstr "" -#: ../src/main.cpp:45 +#: ../src/main.cpp:43 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" -#: ../src/main.cpp:45 +#: ../src/main.cpp:43 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" -#: ../src/SFLPhone.cpp:62 ../src/sflphone_kdeview.cpp:1047 -#: ../src/sflphone_kdeview.cpp:1052 ../src/sflphone_kdeview.cpp:1057 +#: ../src/SFLPhone.cpp:62 ../src/sflphone_kdeview.cpp:1066 +#: ../src/sflphone_kdeview.cpp:1071 ../src/sflphone_kdeview.cpp:1076 msgid "SFLphone" msgstr "" @@ -257,28 +257,28 @@ msgstr "" msgid "Click to accept or refuse it." msgstr "" -#: ../src/sflphone_kdeview.cpp:864 +#: ../src/sflphone_kdeview.cpp:883 msgid "No account registered" msgstr "" -#: ../src/sflphone_kdeview.cpp:868 +#: ../src/sflphone_kdeview.cpp:887 msgid "Using account" msgstr "" -#: ../src/sflphone_kdeview.cpp:1047 +#: ../src/sflphone_kdeview.cpp:1066 msgid "Main screen" msgstr "" -#: ../src/sflphone_kdeview.cpp:1052 ../build/src/ui_dlggeneralbase.h:165 +#: ../src/sflphone_kdeview.cpp:1071 ../build/src/ui_dlggeneralbase.h:165 msgid "Call history" msgstr "" -#: ../src/sflphone_kdeview.cpp:1057 +#: ../src/sflphone_kdeview.cpp:1076 #: ../build/src/ui_sflphone_kdeview_base.h:407 msgid "Address book" msgstr "" -#: ../src/sflphone_kdeview.cpp:1071 ../src/sflphone_kdeview.cpp:1132 +#: ../src/sflphone_kdeview.cpp:1090 ../src/sflphone_kdeview.cpp:1151 msgid "Edit before call" msgstr "" @@ -352,7 +352,7 @@ msgid "Hooks" msgstr "" #: ../build/src/ui_dlgaccountsbase.h:321 -#: ../build/src/ui_dlgaddressbookbase.h:142 ../build/src/ui_dlgaudiobase.h:262 +#: ../build/src/ui_dlgaddressbookbase.h:142 ../build/src/ui_dlgaudiobase.h:263 #: ../build/src/ui_dlgdisplaybase.h:120 ../build/src/ui_dlggeneralbase.h:164 #: ../build/src/ui_dlghooksbase.h:173 ../build/src/ui_dlgrecordbase.h:90 #: ../build/src/ui_sflphone_kdeview_base.h:390 @@ -476,56 +476,52 @@ msgstr "" msgid "&Home" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:264 +#: ../build/src/ui_dlgaudiobase.h:265 msgid "Audio device" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:267 +#: ../build/src/ui_dlgaudiobase.h:268 msgid "ALSA" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:268 +#: ../build/src/ui_dlgaudiobase.h:269 msgid "PulseAudio" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:270 +#: ../build/src/ui_dlgaudiobase.h:271 msgid "Enable ringtones" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:271 -msgid "&Codecs" +#: ../build/src/ui_dlgaudiobase.h:272 +msgid "*.ul *.au *.wav" msgstr "" #: ../build/src/ui_dlgaudiobase.h:273 -msgid "Active" +msgid "&Codecs" msgstr "" #: ../build/src/ui_dlgaudiobase.h:275 -msgid "Name" +msgid "Active" msgstr "" #: ../build/src/ui_dlgaudiobase.h:277 -msgid "Frequency" +msgid "Name" msgstr "" #: ../build/src/ui_dlgaudiobase.h:279 -msgid "Bitrate" +msgid "Frequency" msgstr "" #: ../build/src/ui_dlgaudiobase.h:281 -msgid "Bandwidth" -msgstr "" - -#: ../build/src/ui_dlgaudiobase.h:284 -msgid "ALSA settings" +msgid "Bitrate" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:285 -msgid "In" +#: ../build/src/ui_dlgaudiobase.h:283 +msgid "Bandwidth" msgstr "" #: ../build/src/ui_dlgaudiobase.h:286 -msgid "Out" +msgid "ALSA settings" msgstr "" #: ../build/src/ui_dlgaudiobase.h:287 @@ -533,10 +529,18 @@ msgid "ALSA plugin" msgstr "" #: ../build/src/ui_dlgaudiobase.h:288 -msgid "PulseAudio settings" +msgid "In" msgstr "" #: ../build/src/ui_dlgaudiobase.h:289 +msgid "Out" +msgstr "" + +#: ../build/src/ui_dlgaudiobase.h:290 +msgid "PulseAudio settings" +msgstr "" + +#: ../build/src/ui_dlgaudiobase.h:291 msgid "Mute other applications during a call" msgstr "" @@ -651,7 +655,7 @@ msgid "Display dialpad" msgstr "" #: ../build/src/ui_sflphone_kdeview_base.h:405 -msgctxt "Action record a calld" +msgctxt "Action record a call" msgid "Record" msgstr "" diff --git a/sflphone-client-kde/po/zh_HK/sflphone-client-kde.po b/sflphone-client-kde/po/zh_HK/sflphone-client-kde.po index 89dc63a1b0dae9b016ff19ef78eb987f0db8f861..a1cbc3c04ba985cefbf4af95c31f9baf8983a77e 100644 --- a/sflphone-client-kde/po/zh_HK/sflphone-client-kde.po +++ b/sflphone-client-kde/po/zh_HK/sflphone-client-kde.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-03 13:49-0400\n" +"POT-Creation-Date: 2009-07-08 15:18-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -222,22 +222,22 @@ msgstr "" msgid "(C) 2009 Savoir-faire Linux" msgstr "" -#: ../src/main.cpp:43 +#: ../src/main.cpp:42 msgid "Jérémy Quentin" msgstr "" -#: ../src/main.cpp:45 +#: ../src/main.cpp:43 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "" -#: ../src/main.cpp:45 +#: ../src/main.cpp:43 msgctxt "EMAIL OF TRANSLATORS" msgid "Your emails" msgstr "" -#: ../src/SFLPhone.cpp:62 ../src/sflphone_kdeview.cpp:1047 -#: ../src/sflphone_kdeview.cpp:1052 ../src/sflphone_kdeview.cpp:1057 +#: ../src/SFLPhone.cpp:62 ../src/sflphone_kdeview.cpp:1066 +#: ../src/sflphone_kdeview.cpp:1071 ../src/sflphone_kdeview.cpp:1076 msgid "SFLphone" msgstr "" @@ -257,28 +257,28 @@ msgstr "" msgid "Click to accept or refuse it." msgstr "" -#: ../src/sflphone_kdeview.cpp:864 +#: ../src/sflphone_kdeview.cpp:883 msgid "No account registered" msgstr "" -#: ../src/sflphone_kdeview.cpp:868 +#: ../src/sflphone_kdeview.cpp:887 msgid "Using account" msgstr "" -#: ../src/sflphone_kdeview.cpp:1047 +#: ../src/sflphone_kdeview.cpp:1066 msgid "Main screen" msgstr "" -#: ../src/sflphone_kdeview.cpp:1052 ../build/src/ui_dlggeneralbase.h:165 +#: ../src/sflphone_kdeview.cpp:1071 ../build/src/ui_dlggeneralbase.h:165 msgid "Call history" msgstr "" -#: ../src/sflphone_kdeview.cpp:1057 +#: ../src/sflphone_kdeview.cpp:1076 #: ../build/src/ui_sflphone_kdeview_base.h:407 msgid "Address book" msgstr "" -#: ../src/sflphone_kdeview.cpp:1071 ../src/sflphone_kdeview.cpp:1132 +#: ../src/sflphone_kdeview.cpp:1090 ../src/sflphone_kdeview.cpp:1151 msgid "Edit before call" msgstr "" @@ -352,7 +352,7 @@ msgid "Hooks" msgstr "" #: ../build/src/ui_dlgaccountsbase.h:321 -#: ../build/src/ui_dlgaddressbookbase.h:142 ../build/src/ui_dlgaudiobase.h:262 +#: ../build/src/ui_dlgaddressbookbase.h:142 ../build/src/ui_dlgaudiobase.h:263 #: ../build/src/ui_dlgdisplaybase.h:120 ../build/src/ui_dlggeneralbase.h:164 #: ../build/src/ui_dlghooksbase.h:173 ../build/src/ui_dlgrecordbase.h:90 #: ../build/src/ui_sflphone_kdeview_base.h:390 @@ -476,56 +476,52 @@ msgstr "" msgid "&Home" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:264 +#: ../build/src/ui_dlgaudiobase.h:265 msgid "Audio device" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:267 +#: ../build/src/ui_dlgaudiobase.h:268 msgid "ALSA" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:268 +#: ../build/src/ui_dlgaudiobase.h:269 msgid "PulseAudio" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:270 +#: ../build/src/ui_dlgaudiobase.h:271 msgid "Enable ringtones" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:271 -msgid "&Codecs" +#: ../build/src/ui_dlgaudiobase.h:272 +msgid "*.ul *.au *.wav" msgstr "" #: ../build/src/ui_dlgaudiobase.h:273 -msgid "Active" +msgid "&Codecs" msgstr "" #: ../build/src/ui_dlgaudiobase.h:275 -msgid "Name" +msgid "Active" msgstr "" #: ../build/src/ui_dlgaudiobase.h:277 -msgid "Frequency" +msgid "Name" msgstr "" #: ../build/src/ui_dlgaudiobase.h:279 -msgid "Bitrate" +msgid "Frequency" msgstr "" #: ../build/src/ui_dlgaudiobase.h:281 -msgid "Bandwidth" -msgstr "" - -#: ../build/src/ui_dlgaudiobase.h:284 -msgid "ALSA settings" +msgid "Bitrate" msgstr "" -#: ../build/src/ui_dlgaudiobase.h:285 -msgid "In" +#: ../build/src/ui_dlgaudiobase.h:283 +msgid "Bandwidth" msgstr "" #: ../build/src/ui_dlgaudiobase.h:286 -msgid "Out" +msgid "ALSA settings" msgstr "" #: ../build/src/ui_dlgaudiobase.h:287 @@ -533,10 +529,18 @@ msgid "ALSA plugin" msgstr "" #: ../build/src/ui_dlgaudiobase.h:288 -msgid "PulseAudio settings" +msgid "In" msgstr "" #: ../build/src/ui_dlgaudiobase.h:289 +msgid "Out" +msgstr "" + +#: ../build/src/ui_dlgaudiobase.h:290 +msgid "PulseAudio settings" +msgstr "" + +#: ../build/src/ui_dlgaudiobase.h:291 msgid "Mute other applications during a call" msgstr "" @@ -651,7 +655,7 @@ msgid "Display dialpad" msgstr "" #: ../build/src/ui_sflphone_kdeview_base.h:405 -msgctxt "Action record a calld" +msgctxt "Action record a call" msgid "Record" msgstr "" diff --git a/sflphone-client-kde/src/CMakeLists.txt b/sflphone-client-kde/src/CMakeLists.txt index 0d71a14d5c3e6b32874df54db4d44e29ea5d71e6..1513094c6247e19af0d06a12d5c57d0874592765 100644 --- a/sflphone-client-kde/src/CMakeLists.txt +++ b/sflphone-client-kde/src/CMakeLists.txt @@ -54,9 +54,9 @@ SET( sflphone_client_kde_SRCS conf/dlghooks.cpp conf/ConfigurationSkeleton.cpp Dialpad.cpp -# Codec.cpp -# CodecListModel.cpp -# SortableCodecListWidget.cpp + Codec.cpp + CodecListModel.cpp + SortableCodecListWidget.cpp Item.cpp ) diff --git a/sflphone-client-kde/src/Call.cpp b/sflphone-client-kde/src/Call.cpp index 8b235c5cf5d7e9b03eda78b54f067622c89d5fc2..efb34db0da9ab6b59166ceb24edb7f62736ac8c4 100644 --- a/sflphone-client-kde/src/Call.cpp +++ b/sflphone-client-kde/src/Call.cpp @@ -358,7 +358,7 @@ Contact * Call::findContactForNumberInKAddressBook(QString number) ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance(); MapStringInt addressBookSettings = configurationManager.getAddressbookSettings().value(); bool displayPhoto = addressBookSettings[ADDRESSBOOK_DISPLAY_CONTACT_PHOTO]; - AddressBook * ab = KABC::StdAddressBook::self(); + AddressBook * ab = KABC::StdAddressBook::self(true); QVector<Contact *> results = QVector<Contact *>(); AddressBook::Iterator it; for ( it = ab->begin(); it != ab->end(); ++it ) { @@ -593,8 +593,8 @@ void Call::call() callManager.placeCall(account, callId, number); this->account = account; this->peerPhoneNumber = number; - Contact * contact = findContactForNumberInKAddressBook(peerPhoneNumber); - if(contact) this->peerName = contact->getNickName(); +// Contact * contact = findContactForNumberInKAddressBook(peerPhoneNumber); +// if(contact) this->peerName = contact->getNickName(); this->startTime = new QDateTime(QDateTime::currentDateTime()); this->historyState = OUTGOING; } diff --git a/sflphone-client-kde/src/Codec.cpp b/sflphone-client-kde/src/Codec.cpp new file mode 100644 index 0000000000000000000000000000000000000000..3e94070c0de39b524cf2153406c0ac2d1a2cefa9 --- /dev/null +++ b/sflphone-client-kde/src/Codec.cpp @@ -0,0 +1,64 @@ +/*************************************************************************** + * Copyright (C) 2009 by Savoir-Faire Linux * + * Author : Jérémy Quentin * + * jeremy.quentin@savoirfairelinux.com * + * * + * 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 3 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. * + ***************************************************************************/ +#include "Codec.h" + +#include "configurationmanager_interface_singleton.h" +#include "sflphone_const.h" + +Codec::Codec(int payload, bool enabled) +{ + ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance(); + QStringList details = configurationManager.getCodecDetails(payload); + this->payload = QString::number(payload); + this->enabled = enabled; + this->name = details[CODEC_NAME]; + this->frequency = details[CODEC_SAMPLE_RATE]; + this->bitrate = details[CODEC_BIT_RATE]; + this->bandwidth = details[CODEC_BANDWIDTH]; +} + +QString Codec::getPayload() const +{ return payload; } +QString Codec::getName() const +{ return name; } +QString Codec::getFrequency() const +{ return frequency; } +QString Codec::getBitrate() const +{ return bitrate; } +QString Codec::getBandwidth() const +{ return bandwidth; } +bool Codec::isEnabled() const +{ return enabled; } + +void Codec::setPayload(QString payload) +{ this->payload = payload; } +void Codec::setName(QString name) +{ this->name = name; } +void Codec::setFrequency(QString frequency) +{ this->frequency = frequency; } +void Codec::setBitrate(QString bitrate) +{ this->bitrate = bitrate; } +void Codec::setBandwidth(QString bandwidth) +{ this->bandwidth = bandwidth; } +void Codec::setEnabled(bool enabled) +{ this->enabled = enabled; } + + diff --git a/sflphone-client-kde/src/Codec.h b/sflphone-client-kde/src/Codec.h new file mode 100644 index 0000000000000000000000000000000000000000..9a86d604d5a9a293cf7a1e9b2a9b59cd463d86e8 --- /dev/null +++ b/sflphone-client-kde/src/Codec.h @@ -0,0 +1,66 @@ +/*************************************************************************** + * Copyright (C) 2009 by Savoir-Faire Linux * + * Author : Jérémy Quentin * + * jeremy.quentin@savoirfairelinux.com * + * * + * 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 3 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. * + ***************************************************************************/ +#ifndef CODEC_H +#define CODEC_H + +#include <QObject> +#include <QtCore/QString> + +/** + @author Jérémy Quentin <jeremy.quentin@gmail.com> +*/ +class Codec : public QObject +{ +Q_OBJECT +private: + QString payload; + QString name; + QString frequency; + QString bitrate; + QString bandwidth; + bool enabled; + +public: + Codec(int payload, bool enabled); +// Codec(const Codec & codec); + +// ~Codec(); + + QString getPayload() const; + QString getName() const; + QString getFrequency() const; + QString getBitrate() const; + QString getBandwidth() const; + bool isEnabled() const; + + void setPayload(QString payload); + void setName(QString name); + void setFrequency(QString frequency); + void setBitrate(QString bitrate); + void setBandwidth(QString bandwidth); + void setEnabled(bool enabled); + + Codec & operator=(const Codec&); + + +}; + +#endif diff --git a/sflphone-client-kde/src/CodecListModel.cpp b/sflphone-client-kde/src/CodecListModel.cpp new file mode 100644 index 0000000000000000000000000000000000000000..60b7866dd52c34899ef51f2290811393bd249a90 --- /dev/null +++ b/sflphone-client-kde/src/CodecListModel.cpp @@ -0,0 +1,203 @@ +/*************************************************************************** + * Copyright (C) 2009 by Savoir-Faire Linux * + * Author : Jérémy Quentin * + * jeremy.quentin@savoirfairelinux.com * + * * + * 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 3 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. * + ***************************************************************************/ +#include "CodecListModel.h" + +#include <QtCore/QSize> +#include <QtCore/QDebug> +#include "configurationmanager_interface_singleton.h" + +CodecListModel::CodecListModel(QObject *parent) + : QAbstractTableModel(parent) +{ + this->codecs = QList<Codec *>(); + ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance(); + QStringList activeCodecList = configurationManager.getActiveCodecList(); + setActiveCodecList(activeCodecList); +} + + +CodecListModel::~CodecListModel() +{ +} + + +QVariant CodecListModel::data ( const QModelIndex & index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + const Codec * codec = codecs[index.row()]; + if(index.column() == 0 && role == Qt::DisplayRole) + { + return QVariant(codec->getName()); + } + else if(index.column() == 0 && role == Qt::CheckStateRole) + { + return QVariant(codec->isEnabled() ? Qt::Checked : Qt::Unchecked); + } + else if(index.column() == 1 && role == Qt::DisplayRole) + { + return QVariant(codec->getFrequency()); + } + else if(index.column() == 2 && role == Qt::DisplayRole) + { + return QVariant(codec->getBitrate()); + } + else if(index.column() == 3 && role == Qt::DisplayRole) + { + return QVariant(codec->getBandwidth()); + } + + return QVariant(); +} + + +int CodecListModel::rowCount(const QModelIndex & parent) const +{ + return codecs.count(); +} + +int CodecListModel::columnCount(const QModelIndex & parent) const +{ + return 4; +} + + +QVariant CodecListModel::headerData(int section , Qt::Orientation orientation, int role) const +{ + if (section == 0 && orientation == Qt::Horizontal && role == Qt::DisplayRole) + { + return QVariant("Codec"); + } + else if (section == 1 && orientation == Qt::Horizontal && role == Qt::DisplayRole) + { + return QVariant("Frequency"); + } + else if (section == 2 && orientation == Qt::Horizontal && role == Qt::DisplayRole) + { + return QVariant("Bitrate"); + } + else if (section == 3 && orientation == Qt::Horizontal && role == Qt::DisplayRole) + { + return QVariant("Bandwidth"); + } + return QVariant(); +} + +Qt::ItemFlags CodecListModel::flags(const QModelIndex & index) const +{ + if (index.column() == 0) + { + return QAbstractItemModel::flags(index) | Qt::ItemIsUserCheckable; + } + return QAbstractItemModel::flags(index); +} + +bool CodecListModel::setData ( const QModelIndex & index, const QVariant &value, int role) +{ + qDebug() << "setData"; + if (index.isValid() && index.column() == 0 && role == Qt::CheckStateRole) { + codecs[index.row()]->setEnabled(value.toBool()); + emit dataChanged(index, index); + return true; + } + return false; +} + +bool CodecListModel::codecUp( int index ) +{ + qDebug() << getActiveCodecList(); + if(index > 0 && index <= rowCount()) + { + codecs.swap(index - 1, index); + qDebug() << getActiveCodecList(); + emit dataChanged(this->index(index - 1, 0, QModelIndex()), this->index(index, columnCount(), QModelIndex())); + qDebug() << getActiveCodecList(); + return true; + } + return false; +} + +bool CodecListModel::codecDown( int index ) +{ + if(index >= 0 && index < rowCount()) + { + codecs.swap(index + 1, index); + emit dataChanged(this->index(index, 0, QModelIndex()), this->index(index + 1, columnCount(), QModelIndex())); + return true; + } + return false; +} + +QStringList CodecListModel::getActiveCodecList() const +{ + QStringList codecList; + for(int i = 0 ; i < rowCount() ; i++) + { + if(codecs[i]->isEnabled()) + codecList.append(codecs[i]->getPayload()); + } + return codecList; +} + +void CodecListModel::setActiveCodecList(const QStringList & activeCodecListToSet) +{ + this->codecs = QList<Codec *>(); + ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance(); + QStringList codecList = configurationManager.getCodecList(); + QStringList activeCodecList = activeCodecListToSet; + #if QT_VERSION >= 0x040500 + activeCodecList.removeDuplicates(); + #else + for (int i = 0 ; i < activeCodecList.size() ; i++) + { + if(activeCodecList.lastIndexOf(activeCodecList[i]) != i || ! codecList.contains(activeCodecList[i])) + { + activeCodecList.removeAt(i); + i--; + } + } + #endif + + QStringList codecListToDisplay = activeCodecList; + for (int i=0 ; i<codecList.size() ; i++) + { + if(! activeCodecList.contains(codecList[i])) + { + codecListToDisplay << codecList[i]; + } + } + for(int i=0 ; i<codecListToDisplay.size() ; i++) + { + bool ok; + qDebug() << codecListToDisplay[i]; + QString payloadStr = QString(codecListToDisplay[i]); + int payload = payloadStr.toInt(&ok); + if(!ok) + qDebug() << "The codec's payload sent by the configurationManager is not a number : " << codecListToDisplay[i]; + else + { + codecs << new Codec(payload, activeCodecList.contains(codecListToDisplay[i])); + } + } + + emit dataChanged(this->index(0, 0, QModelIndex()), this->index(rowCount(), columnCount(), QModelIndex())); +} diff --git a/sflphone-client-kde/src/CodecListModel.h b/sflphone-client-kde/src/CodecListModel.h new file mode 100644 index 0000000000000000000000000000000000000000..26b63b642c12baa619abed2dedaf1054f0bf1673 --- /dev/null +++ b/sflphone-client-kde/src/CodecListModel.h @@ -0,0 +1,59 @@ +/*************************************************************************** + * Copyright (C) 2009 by Savoir-Faire Linux * + * Author : Jérémy Quentin * + * jeremy.quentin@savoirfairelinux.com * + * * + * 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 3 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. * + ***************************************************************************/ +#ifndef CODECLISTMODEL_H +#define CODECLISTMODEL_H + +#include <QAbstractItemModel> +#include "Codec.h" + +/** + @author Jérémy Quentin <jeremy.quentin@gmail.com> +*/ +class CodecListModel : public QAbstractTableModel +{ +Q_OBJECT +private: + QList<Codec *> codecs; + +public: + CodecListModel(QObject *parent = 0); + + ~CodecListModel(); + void setCodecs(QList<Codec *> codecs); + + QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const; + int rowCount(const QModelIndex & parent = QModelIndex()) const; + int columnCount(const QModelIndex & parent = QModelIndex()) const; +// bool insertRows(int position, int rows, const QModelIndex &parent); + QVariant headerData(int section , Qt::Orientation orientation, int role) const; + Qt::ItemFlags flags(const QModelIndex & index) const; + virtual bool setData ( const QModelIndex & index, const QVariant &value, int role); + + bool codecUp( int index ); + bool codecDown( int index ); + QStringList getActiveCodecList() const ; + void setActiveCodecList(const QStringList & activeCodecListToSet); + +signals: + void dataChanged(const QModelIndex &, const QModelIndex &); +}; + +#endif diff --git a/sflphone-client-kde/src/SortableCodecListWidget.cpp b/sflphone-client-kde/src/SortableCodecListWidget.cpp new file mode 100644 index 0000000000000000000000000000000000000000..27587446b7b735b6c972b8e07a930009d13fe343 --- /dev/null +++ b/sflphone-client-kde/src/SortableCodecListWidget.cpp @@ -0,0 +1,145 @@ +/*************************************************************************** + * Copyright (C) 2009 by Savoir-Faire Linux * + * Author : Jérémy Quentin * + * jeremy.quentin@savoirfairelinux.com * + * * + * 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 3 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. * + ***************************************************************************/ +#include "SortableCodecListWidget.h" + +#include <QHBoxLayout> +#include <QVBoxLayout> +#include <QDebug> + +SortableCodecListWidget::SortableCodecListWidget(QWidget *parent) + : QWidget(parent) +{ + codecTable = new QTableView(this); + codecTable->setObjectName("codecTable"); +// CodecListModel * model = new CodecListModel(); +// codecTable->setModel(model); +// codecTable->resizeColumnsToContents(); +// codecTable->resizeRowsToContents(); + codecTable->setSelectionBehavior(QAbstractItemView::SelectRows); + + codecUpButton = new KPushButton(this); + codecUpButton->setObjectName("codecUpButton"); + codecUpButton->setIcon(KIcon("go-up")); + + codecDownButton = new KPushButton(this); + codecDownButton->setObjectName("codecDownButton"); + codecDownButton->setIcon(KIcon("go-down")); + + QHBoxLayout * mainLayout = new QHBoxLayout(this); + QVBoxLayout * buttonsLayout = new QVBoxLayout(); + + buttonsLayout->addWidget(codecUpButton); + buttonsLayout->addWidget(codecDownButton); + + mainLayout->addWidget(codecTable); + mainLayout->addLayout(buttonsLayout); + + QMetaObject::connectSlotsByName(this); +} + +void SortableCodecListWidget::setModel(CodecListModel * model) +{ + codecTable->setModel(model); + codecTable->resizeColumnsToContents(); + codecTable->resizeRowsToContents(); + connect(codecTable->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), + this, SLOT(updateCommands())); + connect(codecTable->model(), SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), + this, SIGNAL(dataChanged())); +} + +CodecListModel * SortableCodecListWidget::model() +{ + return (CodecListModel *) codecTable->model(); +} + +void SortableCodecListWidget::on_codecUpButton_clicked() +{ + qDebug() << "on_toolButton_codecUpButton_clicked"; + CodecListModel * model = (CodecListModel *) codecTable->model(); + int currentRow = selectedRow(); + model->codecUp(currentRow); + setSelectedRow(currentRow - 1); +} + +void SortableCodecListWidget::on_codecDownButton_clicked() +{ + qDebug() << "on_codecDownButton_clicked"; + CodecListModel * model = (CodecListModel *) codecTable->model(); + int currentRow = selectedRow(); + model->codecDown(currentRow); + setSelectedRow(currentRow + 1); +} + +void SortableCodecListWidget::updateCommands() +{ + qDebug() << "SortableCodecListWidget::updateCommands"; + bool buttonsEnabled[2] = {true,true}; + if(selectedRow() == -1) + { + buttonsEnabled[0] = false; + buttonsEnabled[1] = false; + } + else + { + if(selectedRow() == 0) + { + buttonsEnabled[0] = false; + } + if(selectedRow() == codecTable->model()->rowCount() - 1) + { + buttonsEnabled[1] = false; + } + } + codecUpButton->setEnabled(buttonsEnabled[0]); + codecDownButton->setEnabled(buttonsEnabled[1]); +} + +QModelIndex SortableCodecListWidget::selectedIndex() +{ + QItemSelectionModel *selection = codecTable->selectionModel(); + const QModelIndexList selectedIndexes = selection->selectedIndexes(); + if ( !selectedIndexes.isEmpty() && selectedIndexes[0].isValid() ) + return selectedIndexes[0]; + else + return QModelIndex(); + } + +int SortableCodecListWidget::selectedRow() +{ + QModelIndex index = selectedIndex(); + if(index.isValid()) + return index.row(); + else + return -1; +} + +void SortableCodecListWidget::setSelectedRow(int row) +{ + QItemSelectionModel * selection = codecTable->selectionModel(); + QAbstractItemModel * model = codecTable->model(); + QItemSelection newSelection = QItemSelection(model->index(row, 0, QModelIndex()), model->index(row +1 , model->columnCount(), QModelIndex())); + selection->clear(); + for(int i = 0 ; i < model->columnCount() ; i++) + { + selection->select(model->index(row, i, QModelIndex()) , QItemSelectionModel::Select); + } +} \ No newline at end of file diff --git a/sflphone-client-kde/src/SortableCodecListWidget.h b/sflphone-client-kde/src/SortableCodecListWidget.h new file mode 100644 index 0000000000000000000000000000000000000000..0ea9eae8fecad5859968f56d28585be317e81f66 --- /dev/null +++ b/sflphone-client-kde/src/SortableCodecListWidget.h @@ -0,0 +1,64 @@ +/*************************************************************************** + * Copyright (C) 2009 by Savoir-Faire Linux * + * Author : Jérémy Quentin * + * jeremy.quentin@savoirfairelinux.com * + * * + * 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 3 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. * + ***************************************************************************/ +#ifndef SORTABLECODECLISTWIDGET_H +#define SORTABLECODECLISTWIDGET_H + +#include <QWidget> +#include <KPushButton> +#include <QTableView> +#include "CodecListModel.h" + +/** + @author Jérémy Quentin <jeremy.quentin@gmail.com> +*/ +class SortableCodecListWidget : public QWidget +{ +Q_OBJECT +private: + KPushButton * codecUpButton; + KPushButton * codecDownButton; + QTableView * codecTable; + +public: + SortableCodecListWidget(QWidget *parent = 0); + + virtual void setModel(CodecListModel * model); + virtual CodecListModel * model(); + +private slots: + void on_codecUpButton_clicked(); + void on_codecDownButton_clicked(); + +public slots: + void updateCommands(); + +private: + QModelIndex selectedIndex(); + int selectedRow(); + + void setSelectedRow(int row); + +signals: + void dataChanged(); + +}; + +#endif diff --git a/sflphone-client-kde/src/conf/ConfigurationDialog.cpp b/sflphone-client-kde/src/conf/ConfigurationDialog.cpp index 9ed7f643854e187cf2bdcec6ebaf2725c404f57e..a6477354e10b424fe3ce3e807bf2d196239d344b 100644 --- a/sflphone-client-kde/src/conf/ConfigurationDialog.cpp +++ b/sflphone-client-kde/src/conf/ConfigurationDialog.cpp @@ -102,12 +102,14 @@ void ConfigurationDialogKDE::updateButtons() void ConfigurationDialogKDE::applyCustomSettings() { qDebug() << "applyCustomSettings"; - dlgAccounts->applyCustomSettings(); // if(hasChanged()) // { ConfigurationSkeleton::self()->writeConfig(); // } + dlgAccounts->applyCustomSettings(); + dlgAudio->applyCustomSettings(); updateButtons(); + emit changesApplied(); } void ConfigurationDialogKDE::reload() @@ -115,5 +117,6 @@ void ConfigurationDialogKDE::reload() qDebug() << "reload"; ConfigurationSkeleton::self()->readConfig(); updateWidgets(); + applyCustomSettings(); updateButtons(); } diff --git a/sflphone-client-kde/src/conf/ConfigurationDialog.h b/sflphone-client-kde/src/conf/ConfigurationDialog.h index 02ac0fe0dc4b1477a9675a0651c708e21b883f6c..7fc0009b9caeb04a68cf32a5099a349c86a83ba1 100644 --- a/sflphone-client-kde/src/conf/ConfigurationDialog.h +++ b/sflphone-client-kde/src/conf/ConfigurationDialog.h @@ -103,6 +103,7 @@ private slots: signals: void clearCallHistoryAsked(); + void changesApplied(); }; diff --git a/sflphone-client-kde/src/conf/ConfigurationSkeleton.cpp b/sflphone-client-kde/src/conf/ConfigurationSkeleton.cpp index e6f89cdd33ebc64d95def2231e93725d69c011fe..f73b8de984f9cff49cd3004f30c4fab72c76e368 100644 --- a/sflphone-client-kde/src/conf/ConfigurationSkeleton.cpp +++ b/sflphone-client-kde/src/conf/ConfigurationSkeleton.cpp @@ -26,9 +26,10 @@ ConfigurationSkeleton::ConfigurationSkeleton() : ConfigurationSkeletonBase() { - qDebug() << "Yoooooooouuuuupppppppiiiiii"; + qDebug() << "Building ConfigurationSkeleton"; + codecListModel = new CodecListModel(); readConfig(); - isImmutable( QString::fromLatin1 ( "alsaPlugin" ) ); + } ConfigurationSkeleton * ConfigurationSkeleton::instance = NULL; @@ -45,6 +46,11 @@ ConfigurationSkeleton::~ConfigurationSkeleton() { } +CodecListModel * ConfigurationSkeleton::getCodecListModel() +{ + return codecListModel; +} + void ConfigurationSkeleton::readConfig() { qDebug() << "\nReading config"; @@ -151,6 +157,7 @@ void ConfigurationSkeleton::readConfig() MapStringInt addressBookSettings = configurationManager.getAddressbookSettings().value(); qDebug() << "getAddressbookSettings() : " << addressBookSettings; + setEnableAddressBook(addressBookSettings[ADDRESSBOOK_ENABLE]); setMaxResults(addressBookSettings[ADDRESSBOOK_MAX_RESULTS]); setDisplayPhoto(addressBookSettings[ADDRESSBOOK_DISPLAY_CONTACT_PHOTO]); setBusiness(addressBookSettings[ADDRESSBOOK_DISPLAY_BUSINESS]); @@ -181,6 +188,8 @@ void ConfigurationSkeleton::writeConfig() ////General settings//// //////////////////////// + qDebug() << "Writing General settings"; + //Call history settings if(enableHistory() != configurationManager.getHistoryEnabled()) configurationManager.setHistoryEnabled(); configurationManager.setHistoryLimit(historyMax()); @@ -192,6 +201,8 @@ void ConfigurationSkeleton::writeConfig() ////Display settings//// //////////////////////// + qDebug() << "Writing Display settings"; + //Notification settings if(notifOnCalls() != configurationManager.getNotify()) configurationManager.setNotify(); if(notifOnMessages() != configurationManager.getMailNotify()) configurationManager.setMailNotify(); @@ -205,6 +216,8 @@ void ConfigurationSkeleton::writeConfig() ////Accounts settings//// ///////////////////////// + qDebug() << "Writing Accounts settings"; + // saveAccountList(); @@ -216,6 +229,8 @@ void ConfigurationSkeleton::writeConfig() ////Audio settings//// ////////////////////// + qDebug() << "Writing Audio settings"; + //Audio Interface settings int prevManager = configurationManager.getAudioManager(); int newManager = interface(); @@ -229,6 +244,7 @@ void ConfigurationSkeleton::writeConfig() configurationManager.setRingtoneChoice(ringtone()); //codecs settings + qDebug() << "activeCodecList = " << activeCodecList(); configurationManager.setActiveCodecList(activeCodecList()); @@ -252,6 +268,8 @@ void ConfigurationSkeleton::writeConfig() ////Record settings//// /////////////////////// + qDebug() << "Writing Record settings"; + QString destination = destinationFolder(); qDebug() << destination ; configurationManager.setRecordPath(destination); @@ -261,7 +279,10 @@ void ConfigurationSkeleton::writeConfig() ////Address Book settings//// ///////////////////////////// + qDebug() << "Writing Address Book settings"; + MapStringInt addressBookSettings = MapStringInt(); + addressBookSettings[ADDRESSBOOK_ENABLE] = enableAddressBook(); addressBookSettings[ADDRESSBOOK_MAX_RESULTS] = maxResults(); addressBookSettings[ADDRESSBOOK_DISPLAY_CONTACT_PHOTO] = displayPhoto(); addressBookSettings[ADDRESSBOOK_DISPLAY_BUSINESS] = business(); @@ -273,6 +294,8 @@ void ConfigurationSkeleton::writeConfig() ///////Hooks settings//////// ///////////////////////////// + qDebug() << "Writing Hooks settings"; + MapStringString hooksSettings = MapStringString(); hooksSettings[HOOKS_ENABLED] = addPrefix() ? "1" : "0"; hooksSettings[HOOKS_ADD_PREFIX] = prepend(); @@ -285,4 +308,12 @@ void ConfigurationSkeleton::writeConfig() readConfig(); } +QStringList ConfigurationSkeleton::activeCodecList() const +{ + return codecListModel->getActiveCodecList(); +} +void ConfigurationSkeleton::setActiveCodecList(const QStringList & v) +{ + codecListModel->setActiveCodecList(v); +} diff --git a/sflphone-client-kde/src/conf/ConfigurationSkeleton.h b/sflphone-client-kde/src/conf/ConfigurationSkeleton.h index a7f31d68b405aac9198aba9312aa939291bebc32..71386a50701c0e72979caeadd154a15cd5973b5b 100644 --- a/sflphone-client-kde/src/conf/ConfigurationSkeleton.h +++ b/sflphone-client-kde/src/conf/ConfigurationSkeleton.h @@ -24,6 +24,7 @@ #include <QWidget> #include "kcfg_settings.h" +#include "CodecListModel.h" /** @author Jérémy Quentin <jeremy.quentin@gmail.com> @@ -34,6 +35,8 @@ Q_OBJECT private: static ConfigurationSkeleton * instance; + + CodecListModel * codecListModel; public: ConfigurationSkeleton(); @@ -47,6 +50,10 @@ public: static ConfigurationSkeleton * self(); + QStringList activeCodecList() const; + void setActiveCodecList(const QStringList & v); + + CodecListModel * getCodecListModel(); // protected: diff --git a/sflphone-client-kde/src/conf/dlgaccounts.cpp b/sflphone-client-kde/src/conf/dlgaccounts.cpp index a2efb52bbb623d837d97b7d6b67e21422a8420a6..9179626e67969216fa06de7aea74777ac15c4c81 100644 --- a/sflphone-client-kde/src/conf/dlgaccounts.cpp +++ b/sflphone-client-kde/src/conf/dlgaccounts.cpp @@ -296,7 +296,7 @@ void DlgAccounts::on_toolButton_accountsApply_clicked() void DlgAccounts::applyCustomSettings() { - qDebug() << "applyCustomSettings"; + qDebug() << "DlgAccounts::applyCustomSettings"; if(hasChanged()) { toolButton_accountsApply->setEnabled(false); diff --git a/sflphone-client-kde/src/conf/dlgaddressbookbase.ui b/sflphone-client-kde/src/conf/dlgaddressbookbase.ui index 0048b161954c45f5831794baff6ecf528c610c0f..779a3dc5705b55829beaed96a867605e98ffdfe1 100644 --- a/sflphone-client-kde/src/conf/dlgaddressbookbase.ui +++ b/sflphone-client-kde/src/conf/dlgaddressbookbase.ui @@ -14,16 +14,38 @@ <string>Form</string> </property> <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QCheckBox" name="kcfg_enableAddressBook"> + <property name="text"> + <string>Enable address book</string> + </property> + </widget> + </item> <item> <widget class="QWidget" name="widget_configAddressBookGeneral" native="true"> + <property name="enabled"> + <bool>false</bool> + </property> <layout class="QVBoxLayout" name="verticalLayout_2"> + <property name="leftMargin"> + <number>0</number> + </property> <item> <widget class="QWidget" name="widget_maxResults" native="true"> <layout class="QHBoxLayout" name="horizontalLayout_4"> <property name="spacing"> <number>-1</number> </property> - <property name="margin"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>5</number> + </property> + <property name="rightMargin"> + <number>5</number> + </property> + <property name="bottomMargin"> <number>5</number> </property> <item> @@ -68,34 +90,34 @@ </property> </widget> </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox_displayTypes"> - <property name="title"> - <string>Display phone numbers of these &types :</string> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_7"> - <item> - <widget class="QCheckBox" name="kcfg_business"> - <property name="text"> - <string>&Work</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="kcfg_mobile"> - <property name="text"> - <string>&Mobile</string> - </property> - </widget> - </item> <item> - <widget class="QCheckBox" name="kcfg_home"> - <property name="text"> - <string>&Home</string> + <widget class="QGroupBox" name="groupBox_displayTypes"> + <property name="title"> + <string>Display phone numbers of these &types :</string> </property> + <layout class="QHBoxLayout" name="horizontalLayout_7"> + <item> + <widget class="QCheckBox" name="kcfg_business"> + <property name="text"> + <string>&Work</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="kcfg_mobile"> + <property name="text"> + <string>&Mobile</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="kcfg_home"> + <property name="text"> + <string>&Home</string> + </property> + </widget> + </item> + </layout> </widget> </item> </layout> @@ -132,12 +154,12 @@ <slot>setValue(int)</slot> <hints> <hint type="sourcelabel"> - <x>223</x> - <y>35</y> + <x>265</x> + <y>67</y> </hint> <hint type="destinationlabel"> - <x>301</x> - <y>33</y> + <x>326</x> + <y>70</y> </hint> </hints> </connection> @@ -148,12 +170,28 @@ <slot>setValue(int)</slot> <hints> <hint type="sourcelabel"> - <x>294</x> - <y>36</y> + <x>326</x> + <y>70</y> + </hint> + <hint type="destinationlabel"> + <x>265</x> + <y>67</y> + </hint> + </hints> + </connection> + <connection> + <sender>kcfg_enableAddressBook</sender> + <signal>toggled(bool)</signal> + <receiver>widget_configAddressBookGeneral</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>92</x> + <y>25</y> </hint> <hint type="destinationlabel"> - <x>215</x> - <y>33</y> + <x>91</x> + <y>39</y> </hint> </hints> </connection> diff --git a/sflphone-client-kde/src/conf/dlgaudio.cpp b/sflphone-client-kde/src/conf/dlgaudio.cpp index 0700c61bfb418e8ea04748dbbd78a302157c8f5d..8a29233bca28d592ca06d1e65b27886a9e6aa10d 100644 --- a/sflphone-client-kde/src/conf/dlgaudio.cpp +++ b/sflphone-client-kde/src/conf/dlgaudio.cpp @@ -38,25 +38,33 @@ DlgAudio::DlgAudio(KConfigDialog *parent) KUrlRequester_ringtone->lineEdit()->setReadOnly(true); codecTableHasChanged = false; - toolButton_codecUp->setIcon(KIcon("go-up")); - toolButton_codecDown->setIcon(KIcon("go-down")); - tableWidget_codecs->verticalHeader()->hide(); - tableWidget_codecs->setSelectionBehavior(QAbstractItemView::SelectRows); +// toolButton_codecUp->setIcon(KIcon("go-up")); +// toolButton_codecDown->setIcon(KIcon("go-down")); +// tableWidget_codecs->verticalHeader()->hide(); +// tableWidget_codecs->setSelectionBehavior(QAbstractItemView::SelectRows); + + ConfigurationSkeleton * skeleton = ConfigurationSkeleton::self(); + CodecListModel * model = skeleton->getCodecListModel(); + sortableCodecList->setModel(model); updateAlsaSettings(); connect(box_alsaPlugin, SIGNAL(currentIndexChanged(int)), parent, SLOT(updateButtons())); - connect(tableWidget_codecs, SIGNAL(itemChanged(QTableWidgetItem *)), - this, SLOT(codecTableChanged())); - connect(tableWidget_codecs, SIGNAL(currentCellChanged(int, int, int, int)), - this, SLOT(updateCodecListCommands())); - connect(toolButton_codecUp, SIGNAL(clicked()), - this, SLOT(codecTableChanged())); - connect(toolButton_codecDown, SIGNAL(clicked()), - this, SLOT(codecTableChanged())); +// connect(tableWidget_codecs, SIGNAL(itemChanged(QTableWidgetItem *)), +// this, SLOT(codecTableChanged())); +// connect(tableWidget_codecs, SIGNAL(currentCellChanged(int, int, int, int)), +// this, SLOT(updateCodecListCommands())); +// connect(toolButton_codecUp, SIGNAL(clicked()), +// this, SLOT(codecTableChanged())); +// connect(toolButton_codecDown, SIGNAL(clicked()), +// this, SLOT(codecTableChanged())); connect(this, SIGNAL(updateButtons()), parent, SLOT(updateButtons())); + + connect(sortableCodecList, SIGNAL(dataChanged()), + this, SLOT(codecTableChanged())); + } @@ -72,88 +80,108 @@ void DlgAudio::updateWidgets() box_alsaPlugin->setCurrentIndex(box_alsaPlugin->findText(skeleton->alsaPlugin())); //codecList - qDebug() << "loadCodecs"; - ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance(); - QStringList codecList = configurationManager.getCodecList(); - QStringList activeCodecList = skeleton->activeCodecList(); - #if QT_VERSION >= 0x040500 - activeCodecList.removeDuplicates(); - #else - for (int i = 0 ; i < activeCodecList.size() ; i++) - { - if(activeCodecList.lastIndexOf(activeCodecList[i]) != i || ! codecList.contains(activeCodecList[i])) - { - activeCodecList.removeAt(i); - i--; - } - } - #endif - - QStringList codecListToDisplay = activeCodecList; - for (int i=0 ; i<codecList.size() ; i++) - { - if(! activeCodecList.contains(codecList[i])) - { - codecListToDisplay << codecList[i]; - } - } - qDebug() << "codecList = " << codecList; - qDebug() << "activeCodecList" << activeCodecList; - qDebug() << "codecListToDisplay" << codecListToDisplay; - tableWidget_codecs->setRowCount(0); - for(int i=0 ; i<codecListToDisplay.size() ; i++) - { - bool ok; - qDebug() << codecListToDisplay[i]; - QString payloadStr = QString(codecListToDisplay[i]); - int payload = payloadStr.toInt(&ok); - if(!ok) - qDebug() << "The codec's payload sent by the configurationManager is not a number : " << codecListToDisplay[i]; - else - { - QStringList details = configurationManager.getCodecDetails(payload); - tableWidget_codecs->insertRow(i); - tableWidget_codecs->setVerticalHeaderItem (i, new QTableWidgetItem()); - tableWidget_codecs->verticalHeaderItem (i)->setText(payloadStr); - tableWidget_codecs->setItem(i,0,new QTableWidgetItem("")); - tableWidget_codecs->setItem(i,1,new QTableWidgetItem(details[CODEC_NAME])); - tableWidget_codecs->setItem(i,2,new QTableWidgetItem(details[CODEC_SAMPLE_RATE])); - tableWidget_codecs->setItem(i,3,new QTableWidgetItem(details[CODEC_BIT_RATE])); - tableWidget_codecs->setItem(i,4,new QTableWidgetItem(details[CODEC_BANDWIDTH])); - tableWidget_codecs->item(i,0)->setFlags(Qt::ItemIsSelectable|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled); - tableWidget_codecs->item(i,0)->setCheckState(activeCodecList.contains(codecListToDisplay[i]) ? Qt::Checked : Qt::Unchecked); - tableWidget_codecs->item(i,1)->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled); - tableWidget_codecs->item(i,2)->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled); - tableWidget_codecs->item(i,3)->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled); - tableWidget_codecs->item(i,4)->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled); - - qDebug() << "Added to codecs : " << payloadStr << " , " << details[CODEC_NAME]; - } - } - tableWidget_codecs->resizeColumnsToContents(); - tableWidget_codecs->resizeRowsToContents(); +// qDebug() << "loadCodecs"; +// ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance(); +// QStringList codecList = configurationManager.getCodecList(); +// QStringList activeCodecList = skeleton->activeCodecList(); +// +// qDebug() << "loadCodecs1"; +// #if QT_VERSION >= 0x040500 +// qDebug() << "loadCodecs1b"; +// activeCodecList.removeDuplicates(); +// +// qDebug() << "loadCodecs1c"; +// #else +// +// qDebug() << "loadCodecs1d"; +// for (int i = 0 ; i < activeCodecList.size() ; i++) +// { +// if(activeCodecList.lastIndexOf(activeCodecList[i]) != i || ! codecList.contains(activeCodecList[i])) +// { +// activeCodecList.removeAt(i); +// i--; +// } +// } +// +// qDebug() << "loadCodecs1e"; +// #endif +// +// qDebug() << "loadCodecs2"; +// QStringList codecListToDisplay = activeCodecList; +// qDebug() << "loadCodecs2b"; +// codecList.size(); +// +// qDebug() << "loadCodecs2c"; +// for (int i=0 ; i<codecList.size() ; i++) +// { +// +// qDebug() << "loadCodecs3"; +// if(! activeCodecList.contains(codecList[i])) +// { +// +// qDebug() << "loadCodecs4"; +// codecListToDisplay << codecList[i]; +// } +// } +// +// qDebug() << "loadCodecs5"; +// qDebug() << "codecList = " << codecList; +// qDebug() << "activeCodecList" << activeCodecList; +// qDebug() << "codecListToDisplay" << codecListToDisplay; +// tableWidget_codecs->setRowCount(0); +// for(int i=0 ; i<codecListToDisplay.size() ; i++) +// { +// bool ok; +// qDebug() << codecListToDisplay[i]; +// QString payloadStr = QString(codecListToDisplay[i]); +// int payload = payloadStr.toInt(&ok); +// if(!ok) +// qDebug() << "The codec's payload sent by the configurationManager is not a number : " << codecListToDisplay[i]; +// else +// { +// QStringList details = configurationManager.getCodecDetails(payload); +// tableWidget_codecs->insertRow(i); +// tableWidget_codecs->setVerticalHeaderItem (i, new QTableWidgetItem()); +// tableWidget_codecs->verticalHeaderItem (i)->setText(payloadStr); +// tableWidget_codecs->setItem(i,0,new QTableWidgetItem("")); +// tableWidget_codecs->setItem(i,1,new QTableWidgetItem(details[CODEC_NAME])); +// tableWidget_codecs->setItem(i,2,new QTableWidgetItem(details[CODEC_SAMPLE_RATE])); +// tableWidget_codecs->setItem(i,3,new QTableWidgetItem(details[CODEC_BIT_RATE])); +// tableWidget_codecs->setItem(i,4,new QTableWidgetItem(details[CODEC_BANDWIDTH])); +// tableWidget_codecs->item(i,0)->setFlags(Qt::ItemIsSelectable|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled); +// tableWidget_codecs->item(i,0)->setCheckState(activeCodecList.contains(codecListToDisplay[i]) ? Qt::Checked : Qt::Unchecked); +// tableWidget_codecs->item(i,1)->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled); +// tableWidget_codecs->item(i,2)->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled); +// tableWidget_codecs->item(i,3)->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled); +// tableWidget_codecs->item(i,4)->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled); +// +// qDebug() << "Added to codecs : " << payloadStr << " , " << details[CODEC_NAME]; +// } +// } +// tableWidget_codecs->resizeColumnsToContents(); +// tableWidget_codecs->resizeRowsToContents(); codecTableHasChanged = false; } void DlgAudio::updateSettings() { -// qDebug() << "DlgAudio::updateSettings"; + qDebug() << "DlgAudio::updateSettings"; //alsaPlugin ConfigurationSkeleton * skeleton = ConfigurationSkeleton::self(); skeleton->setAlsaPlugin(box_alsaPlugin->currentText()); //codecList - QStringList activeCodecs; - for(int i = 0 ; i < tableWidget_codecs->rowCount() ; i++) - { - if(tableWidget_codecs->item(i,0)->checkState() == Qt::Checked) - { - activeCodecs << tableWidget_codecs->verticalHeaderItem(i)->text(); - } - } - qDebug() << "Calling setActiveCodecList with list : " << activeCodecs ; - skeleton->setActiveCodecList(activeCodecs); +// QStringList activeCodecs; +// for(int i = 0 ; i < tableWidget_codecs->rowCount() ; i++) +// { +// if(tableWidget_codecs->item(i,0)->checkState() == Qt::Checked) +// { +// activeCodecs << tableWidget_codecs->verticalHeaderItem(i)->text(); +// } +// } +// qDebug() << "Calling setActiveCodecList with list : " << activeCodecs ; +// skeleton->setActiveCodecList(activeCodecs); codecTableHasChanged = false; } @@ -205,69 +233,75 @@ void DlgAudio::updateAlsaSettings() } } -void DlgAudio::updateCodecListCommands() -{ - qDebug() << "updateCodecListCommands"; - bool buttonsEnabled[2] = {true,true}; - if(! tableWidget_codecs->currentItem()) - { - buttonsEnabled[0] = false; - buttonsEnabled[1] = false; - } - else - { - if(tableWidget_codecs->currentRow() == 0) - { - buttonsEnabled[0] = false; - } - if(tableWidget_codecs->currentRow() == tableWidget_codecs->rowCount() - 1) - { - buttonsEnabled[1] = false; - } - } - toolButton_codecUp->setEnabled(buttonsEnabled[0]); - toolButton_codecDown->setEnabled(buttonsEnabled[1]); -} +// void DlgAudio::updateCodecListCommands() +// { +// qDebug() << "updateCodecListCommands"; +// bool buttonsEnabled[2] = {true,true}; +// if(! tableWidget_codecs->currentItem()) +// { +// buttonsEnabled[0] = false; +// buttonsEnabled[1] = false; +// } +// else +// { +// if(tableWidget_codecs->currentRow() == 0) +// { +// buttonsEnabled[0] = false; +// } +// if(tableWidget_codecs->currentRow() == tableWidget_codecs->rowCount() - 1) +// { +// buttonsEnabled[1] = false; +// } +// } +// toolButton_codecUp->setEnabled(buttonsEnabled[0]); +// toolButton_codecDown->setEnabled(buttonsEnabled[1]); +// } -void DlgAudio::on_toolButton_codecUp_clicked() -{ - qDebug() << "on_toolButton_codecUp_clicked"; - int currentCol = tableWidget_codecs->currentColumn(); - int currentRow = tableWidget_codecs->currentRow(); - int nbCol = tableWidget_codecs->columnCount(); - for(int i = 0 ; i < nbCol ; i++) - { - QTableWidgetItem * item1 = tableWidget_codecs->takeItem(currentRow, i); - QTableWidgetItem * item2 = tableWidget_codecs->takeItem(currentRow - 1, i); - tableWidget_codecs->setItem(currentRow - 1, i , item1); - tableWidget_codecs->setItem(currentRow, i , item2); - } - QTableWidgetItem * item1 = tableWidget_codecs->takeVerticalHeaderItem(currentRow); - QTableWidgetItem * item2 = tableWidget_codecs->takeVerticalHeaderItem(currentRow - 1); - tableWidget_codecs->setVerticalHeaderItem(currentRow - 1, item1); - tableWidget_codecs->setVerticalHeaderItem(currentRow, item2); - tableWidget_codecs->setCurrentCell(currentRow - 1, currentCol); -} +// void DlgAudio::on_toolButton_codecUp_clicked() +// { +// qDebug() << "on_toolButton_codecUp_clicked"; +// int currentCol = tableWidget_codecs->currentColumn(); +// int currentRow = tableWidget_codecs->currentRow(); +// int nbCol = tableWidget_codecs->columnCount(); +// for(int i = 0 ; i < nbCol ; i++) +// { +// QTableWidgetItem * item1 = tableWidget_codecs->takeItem(currentRow, i); +// QTableWidgetItem * item2 = tableWidget_codecs->takeItem(currentRow - 1, i); +// tableWidget_codecs->setItem(currentRow - 1, i , item1); +// tableWidget_codecs->setItem(currentRow, i , item2); +// } +// QTableWidgetItem * item1 = tableWidget_codecs->takeVerticalHeaderItem(currentRow); +// QTableWidgetItem * item2 = tableWidget_codecs->takeVerticalHeaderItem(currentRow - 1); +// tableWidget_codecs->setVerticalHeaderItem(currentRow - 1, item1); +// tableWidget_codecs->setVerticalHeaderItem(currentRow, item2); +// tableWidget_codecs->setCurrentCell(currentRow - 1, currentCol); +// } +// +// void DlgAudio::on_toolButton_codecDown_clicked() +// { +// qDebug() << "on_toolButton_codecDown_clicked"; +// int currentCol = tableWidget_codecs->currentColumn(); +// int currentRow = tableWidget_codecs->currentRow(); +// int nbCol = tableWidget_codecs->columnCount(); +// for(int i = 0 ; i < nbCol ; i++) +// { +// QTableWidgetItem * item1 = tableWidget_codecs->takeItem(currentRow, i); +// QTableWidgetItem * item2 = tableWidget_codecs->takeItem(currentRow + 1, i); +// tableWidget_codecs->setItem(currentRow + 1, i , item1); +// tableWidget_codecs->setItem(currentRow, i , item2); +// } +// QTableWidgetItem * item1 = tableWidget_codecs->takeVerticalHeaderItem(currentRow); +// QTableWidgetItem * item2 = tableWidget_codecs->takeVerticalHeaderItem(currentRow + 1); +// tableWidget_codecs->setVerticalHeaderItem(currentRow + 1, item1); +// tableWidget_codecs->setVerticalHeaderItem(currentRow, item2); +// tableWidget_codecs->setCurrentCell(currentRow + 1, currentCol); +// } + -void DlgAudio::on_toolButton_codecDown_clicked() +void DlgAudio::applyCustomSettings() { - qDebug() << "on_toolButton_codecDown_clicked"; - int currentCol = tableWidget_codecs->currentColumn(); - int currentRow = tableWidget_codecs->currentRow(); - int nbCol = tableWidget_codecs->columnCount(); - for(int i = 0 ; i < nbCol ; i++) - { - QTableWidgetItem * item1 = tableWidget_codecs->takeItem(currentRow, i); - QTableWidgetItem * item2 = tableWidget_codecs->takeItem(currentRow + 1, i); - tableWidget_codecs->setItem(currentRow + 1, i , item1); - tableWidget_codecs->setItem(currentRow, i , item2); - } - QTableWidgetItem * item1 = tableWidget_codecs->takeVerticalHeaderItem(currentRow); - QTableWidgetItem * item2 = tableWidget_codecs->takeVerticalHeaderItem(currentRow + 1); - tableWidget_codecs->setVerticalHeaderItem(currentRow + 1, item1); - tableWidget_codecs->setVerticalHeaderItem(currentRow, item2); - tableWidget_codecs->setCurrentCell(currentRow + 1, currentCol); + codecTableHasChanged = false; } diff --git a/sflphone-client-kde/src/conf/dlgaudio.h b/sflphone-client-kde/src/conf/dlgaudio.h index cad1b9ee65a39f0e20183a3616e353115d6c04a1..74fe3db72b88cd2f02fb7eaf9c7a51167b539d09 100644 --- a/sflphone-client-kde/src/conf/dlgaudio.h +++ b/sflphone-client-kde/src/conf/dlgaudio.h @@ -46,11 +46,12 @@ public slots: void updateSettings(); bool hasChanged(); void updateAlsaSettings(); + void applyCustomSettings(); private slots: - void updateCodecListCommands(); - void on_toolButton_codecUp_clicked(); - void on_toolButton_codecDown_clicked(); +// void updateCodecListCommands(); +// void on_toolButton_codecUp_clicked(); +// void on_toolButton_codecDown_clicked(); void codecTableChanged(); signals: diff --git a/sflphone-client-kde/src/conf/dlgaudiobase.ui b/sflphone-client-kde/src/conf/dlgaudiobase.ui index 3679d8c79da33d1f7d00ba9924d287776ea97c8d..a73315057e53ed48b8623718b5cc564acdd67920 100644 --- a/sflphone-client-kde/src/conf/dlgaudiobase.ui +++ b/sflphone-client-kde/src/conf/dlgaudiobase.ui @@ -95,87 +95,7 @@ <number>2</number> </property> <item> - <widget class="QTableWidget" name="tableWidget_codecs"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>0</width> - <height>100</height> - </size> - </property> - <property name="frameShape"> - <enum>QFrame::StyledPanel</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Sunken</enum> - </property> - <property name="verticalScrollBarPolicy"> - <enum>Qt::ScrollBarAsNeeded</enum> - </property> - <property name="textElideMode"> - <enum>Qt::ElideRight</enum> - </property> - <property name="verticalScrollMode"> - <enum>QAbstractItemView::ScrollPerPixel</enum> - </property> - <property name="horizontalScrollMode"> - <enum>QAbstractItemView::ScrollPerPixel</enum> - </property> - <column> - <property name="text"> - <string>Active</string> - </property> - </column> - <column> - <property name="text"> - <string>Name</string> - </property> - </column> - <column> - <property name="text"> - <string>Frequency</string> - </property> - </column> - <column> - <property name="text"> - <string>Bitrate</string> - </property> - </column> - <column> - <property name="text"> - <string>Bandwidth</string> - </property> - </column> - </widget> - </item> - <item> - <layout class="QVBoxLayout" name="verticalLayout_codecsOrder"> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <item> - <widget class="QToolButton" name="toolButton_codecUp"> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="toolButton_codecDown"> - <property name="text"> - <string/> - </property> - </widget> - </item> - </layout> + <widget class="SortableCodecListWidget" name="sortableCodecList" native="true"/> </item> </layout> </widget> @@ -311,6 +231,12 @@ <extends>QFrame</extends> <header>kurlrequester.h</header> </customwidget> + <customwidget> + <class>SortableCodecListWidget</class> + <extends>QWidget</extends> + <header>SortableCodecListWidget.h</header> + <container>1</container> + </customwidget> </customwidgets> <resources/> <connections> diff --git a/sflphone-client-kde/src/conf/dlgrecord.cpp b/sflphone-client-kde/src/conf/dlgrecord.cpp index 3c97898f5cd30bd11aca1a278a9a2bd93482cfff..49181a1b632ff31dbce54d14ac9a6a4802810001 100644 --- a/sflphone-client-kde/src/conf/dlgrecord.cpp +++ b/sflphone-client-kde/src/conf/dlgrecord.cpp @@ -29,6 +29,7 @@ DlgRecord::DlgRecord(QWidget *parent) KUrlRequester_destinationFolder->setMode(KFile::Directory|KFile::ExistingOnly|KFile::LocalOnly); KUrlRequester_destinationFolder->setUrl(KUrl(QDir::home().path())); KUrlRequester_destinationFolder->lineEdit()->setObjectName("kcfg_destinationFolder"); + KUrlRequester_destinationFolder->lineEdit()->setReadOnly(true); } diff --git a/sflphone-client-kde/src/conf/sflphone-client-kde.kcfg b/sflphone-client-kde/src/conf/sflphone-client-kde.kcfg index c90d937a82b9467862627d82d0798fc2287ed8e0..11d1fc817d6c834d4286b09c288411a43e6fcd07 100644 --- a/sflphone-client-kde/src/conf/sflphone-client-kde.kcfg +++ b/sflphone-client-kde/src/conf/sflphone-client-kde.kcfg @@ -2,7 +2,10 @@ <!DOCTYPE kcfg SYSTEM "http://www.kde.org/standards/kcfg/1.0/kcfg.dtd"> <kcfg> <kcfgfile name="ConfigDialogKDE" /> - <group name="main"> + <group name="main"> + + <!-- General Settings --> + <entry name="SIPPort" type="Int"> <label>Defines the port that will be used for SIP communication.</label> <min> 1025 </min> @@ -18,6 +21,9 @@ <max> 99 </max> <default> 30 </default> </entry> + + <!-- Display Settings --> + <entry name="notifOnCalls" type="Bool"> <label>Defines whether user should be notified when receiving a call.</label> </entry> @@ -30,6 +36,9 @@ <entry name="displayOnCalls" type="Bool"> <label>Defines whether the main window should be displayed when receiving a message.</label> </entry> + + <!-- Accounts Settings --> + <!-- <entry name="accountList" type="StringList"> <label>Defines the list of accounts to register, in order of preference (first registered used by default).</label> @@ -41,6 +50,9 @@ <entry name="stunServer" type="String"> <label>Defines the Stun server to use.</label> </entry> + + <!-- Audio Settings --> + <entry name="interface" type="Enum"> <label>Defines the Stun server to use.</label> <choices> @@ -54,9 +66,11 @@ <entry name="ringtone" type="Path"> <label>Defines which ringtone is used.</label> </entry> + <!-- <entry name="activeCodecList" type="StringList"> <label>Defines which ALSA plugin to use.</label> </entry> + --> <entry name="alsaPlugin" type="String"> <label>Defines which ALSA plugin to use.</label> </entry> @@ -69,6 +83,12 @@ <entry name="pulseAudioVolumeAlter" type="Bool"> <label>Defines whether pulse audio can mute other applications during a call.</label> </entry> + + <!-- Address Book Settings --> + + <entry name="enableAddressBook" type="Bool"> + <label>Defines whether the search in KDE Address Book is enabled</label> + </entry> <entry name="maxResults" type="Int"> <label>Defines the max number of contacts to display during a search in address book.</label> </entry> @@ -84,9 +104,15 @@ <entry name="home" type="Bool"> <label>Defines whether to display personnal phone numbers.</label> </entry> + + <!-- Record Settings --> + <entry name="destinationFolder" type="Path"> <label>Defines the destination directory for call recordings.</label> </entry> + + <!-- Hooks Settings --> + <entry name="enableHooksSIP" type="Bool"> <label>Defines whether to enable hooks for SIP accounts.</label> </entry> diff --git a/sflphone-client-kde/src/main.cpp b/sflphone-client-kde/src/main.cpp index 23853b339751d74b5fcc37be72497c252f6a15aa..c6de33b710fe18315102c533ab8832d3b38d7251 100644 --- a/sflphone-client-kde/src/main.cpp +++ b/sflphone-client-kde/src/main.cpp @@ -16,6 +16,11 @@ #include "conf/ConfigurationDialog.h" +#include <QTableView> +#include <QListView> +#include "CodecListModel.h" +#include "SortableCodecListWidget.h" + static const char description[] = "A KDE 4 Client for SFLphone"; @@ -50,11 +55,13 @@ int main(int argc, char **argv) //configuration dbus registerCommTypes(); - SFLPhone * fenetre = new SFLPhone(); InstanceInterface & instance = InstanceInterfaceSingleton::getInstance(); instance.Register(getpid(), APP_NAME); + +// SortableCodecListWidget * cl = new SortableCodecListWidget(); +// cl->show(); return app.exec(); } diff --git a/sflphone-client-kde/src/sflphone_const.h b/sflphone-client-kde/src/sflphone_const.h index aa08c6e4e096ca92afacc8df1b30fdad59b25621..d7810672e513f15b1127539913b788f20a93fe81 100644 --- a/sflphone-client-kde/src/sflphone_const.h +++ b/sflphone-client-kde/src/sflphone_const.h @@ -184,6 +184,7 @@ #define ADDRESSBOOK_DISPLAY_BUSINESS "ADDRESSBOOK_DISPLAY_PHONE_BUSINESS" #define ADDRESSBOOK_DISPLAY_HOME "ADDRESSBOOK_DISPLAY_PHONE_HOME" #define ADDRESSBOOK_DISPLAY_MOBILE "ADDRESSBOOK_DISPLAY_PHONE_MOBILE" +#define ADDRESSBOOK_ENABLE "ADDRESSBOOK_ENABLE" /** Hooks settings */ #define HOOKS_ADD_PREFIX "PHONE_NUMBER_HOOK_ADD_PREFIX" @@ -208,38 +209,4 @@ -/** Error while opening capture device */ -#define ALSA_CAPTURE_DEVICE 0x0001 -/** Error while opening playback device */ -#define ALSA_PLAYBACK_DEVICE 0x0010 -/** Error pulseaudio */ -#define PULSEAUDIO_NOT_RUNNING 0x0100 - -/** Tone to play when no voice mails */ -#define TONE_WITHOUT_MESSAGE 0 -/** Tone to play when voice mails */ -#define TONE_WITH_MESSAGE 1 - - -/** Notification levels */ -#define __NOTIF_LEVEL_MIN 0 -#define __NOTIF_LEVEL_MED 1 -#define __NOTIF_LEVEL_HIGH 2 - -/** Messages ID for the status bar - Incoming calls */ -#define __MSG_INCOMING_CALL 0 -/** Messages ID for the status bar - Calling */ -#define __MSG_CALLING 1 -/** Messages ID for the status bar - Voice mails notification */ -#define __MSG_VOICE_MAILS 2 -/** Messages ID for the status bar - Current account */ -#define __MSG_ACCOUNT_DEFAULT 3 - -/** Desktop notifications - Time before to close the notification*/ -#define __TIMEOUT_MODE "default" -/** Desktop notifications - Time before to close the notification*/ -#define __TIMEOUT_TIME 18000 // 30 secondes - - - #endif diff --git a/sflphone-client-kde/src/sflphone_kdeview.cpp b/sflphone-client-kde/src/sflphone_kdeview.cpp index b40fde0d20be6596ed34ec38ea203530a8666dee..3e144e160e7174a99852d97213c1684dda79bea9 100644 --- a/sflphone-client-kde/src/sflphone_kdeview.cpp +++ b/sflphone-client-kde/src/sflphone_kdeview.cpp @@ -105,13 +105,16 @@ sflphone_kdeView::sflphone_kdeView(QWidget *parent) connect(configDialog, SIGNAL(clearCallHistoryAsked()), callList, SLOT(clearHistory())); + connect(configDialog, SIGNAL(changesApplied()), + this, SLOT(loadWindow())); + connect(accountList, SIGNAL(accountListUpdated()), - this, SLOT(updateStatusMessage())); + this, SLOT(updateStatusMessage())); connect(accountList, SIGNAL(accountListUpdated()), - this, SLOT(updateWindowCallState())); + this, SLOT(updateWindowCallState())); accountList->updateAccounts(); - + QPalette pal = QPalette(palette()); pal.setColor(QPalette::AlternateBase, Qt::lightGray); setPalette(pal); @@ -148,6 +151,8 @@ void sflphone_kdeView::loadWindow() updateVolumeControls(); updateDialpad(); updateSearchHistory(); + updateAddressBookEnabled(); + updateAddressBook(); } @@ -498,7 +503,7 @@ void sflphone_kdeView::updateWindowCallState() buttonIconFiles[0] = ICON_ACCEPT; buttonIconFiles[1] = ICON_REFUSE; actionTexts[0] = ACTION_LABEL_ACCEPT; - actionTexts[0] = ACTION_LABEL_REFUSE; + actionTexts[1] = ACTION_LABEL_REFUSE; break; case CALL_STATE_RINGING: qDebug() << "Reached CALL_STATE_RINGING with call " << (*callList)[item]->getCallId(); @@ -683,23 +688,37 @@ void sflphone_kdeView::updateAddressBook() { QListWidgetItem * item = listWidget_addressBook->takeItem(0); qDebug() << "take item " << item->text(); + delete item; } - QString textSearched = lineEdit_addressBook->text(); - if(textSearched.isEmpty()) - { - label_addressBookFull->setVisible(false); - return; - } - bool full = false; - QVector<Contact *> contactsFound = findContactsInKAddressBook(textSearched, full); - qDebug() << "Full : " << full; - label_addressBookFull->setVisible(full); - for(int i = 0 ; i < contactsFound.size() ; i++) + if(isAddressBookEnabled()) { - Contact * contact = contactsFound[i]; - addContactToContactList(contact); + if(loadAddressBook()) + { + QString textSearched = lineEdit_addressBook->text(); + if(textSearched.isEmpty()) + { + label_addressBookFull->setVisible(false); + return; + } + bool full = false; + QVector<Contact *> contactsFound = findContactsInKAddressBook(textSearched, full); + qDebug() << "Full : " << full; + label_addressBookFull->setVisible(full); + for(int i = 0 ; i < contactsFound.size() ; i++) + { + Contact * contact = contactsFound[i]; + addContactToContactList(contact); + } + alternateColors(listWidget_addressBook); + } + else + { + lineEdit_addressBook->setText(i18n("Address book loading...")); + lineEdit_addressBook->setEnabled(false); + label_addressBookFull->setVisible(false); + } } - alternateColors(listWidget_addressBook); + } void sflphone_kdeView::alternateColors(QListWidget * listWidget) @@ -722,8 +741,7 @@ QVector<Contact *> sflphone_kdeView::findContactsInKAddressBook(QString textSear int maxResults = addressBookSettings[ADDRESSBOOK_MAX_RESULTS]; int typesDisplayed = phoneNumberTypesDisplayed(); bool displayPhoto = addressBookSettings[ADDRESSBOOK_DISPLAY_CONTACT_PHOTO]; - - AddressBook * ab = KABC::StdAddressBook::self(); + AddressBook * ab = KABC::StdAddressBook::self(true); QVector<Contact *> results = QVector<Contact *>(); AddressBook::Iterator it; full = false; @@ -1433,6 +1451,46 @@ void sflphone_kdeView::on1_volumeChanged(const QString &device, double value) updateVolumeBar(); } +void sflphone_kdeView::enableAddressBook() +{ + qDebug() << "\nenableAddressBook\n"; + lineEdit_addressBook->clear(); + lineEdit_addressBook->setEnabled(true); +} +bool sflphone_kdeView::loadAddressBook() +{ + qDebug() << "loadAddressBook"; + AddressBook * ab = StdAddressBook::self(true); + if(ab->loadingHasFinished()) + { + return true; + } + else + { + connect(ab, SIGNAL(addressBookChanged(AddressBook *)), + this, SLOT(enableAddressBook())); + return false; + } +} + + +void sflphone_kdeView::updateAddressBookEnabled() +{ + action_addressBook->setVisible(isAddressBookEnabled()); + if(! isAddressBookEnabled() && stackedWidget_screen->currentWidget() == page_addressBook) + { + stackedWidget_screen->setCurrentWidget(page_callList); + action_history->setChecked(false); + } +} + + +bool sflphone_kdeView::isAddressBookEnabled() +{ + ConfigurationManagerInterface & configurationManager = ConfigurationManagerInterfaceSingleton::getInstance(); + MapStringInt addressBookSettings = configurationManager.getAddressbookSettings().value(); + return addressBookSettings[ADDRESSBOOK_ENABLE]; +} #include "sflphone_kdeview.moc" diff --git a/sflphone-client-kde/src/sflphone_kdeview.h b/sflphone-client-kde/src/sflphone_kdeview.h index ddcc22354e92b93caa56d47de0e49692d7575240..a9a4e72a779d9a108cc77ea07bd5e586e07c799c 100644 --- a/sflphone-client-kde/src/sflphone_kdeview.h +++ b/sflphone-client-kde/src/sflphone_kdeview.h @@ -81,11 +81,6 @@ public: //Constructors & Destructors sflphone_kdeView(QWidget *parent); virtual ~sflphone_kdeView(); - /** - * Called at construction. Updates all the display - * according to the settings. - */ - void loadWindow(); //Getters /** @@ -118,6 +113,12 @@ public: */ int phoneNumberTypesDisplayed(); + /** + * + * @return true if the address book is enabled in config + */ + bool isAddressBookEnabled(); + //Updates QVector<Contact *> findContactsInKAddressBook(QString textSearched, bool & full); @@ -227,7 +228,34 @@ private slots: void updateDialpad(); public slots: + /** + * Updates all the display + * according to the settings. + */ + void loadWindow(); + + void updateStatusMessage(); + /** + * Enable the address book search line edit. + * To be called once the address book loading has finished. + */ + void enableAddressBook(); + /** + * Loads the address book asynchronously. + * Calls enableAddressBook() once the address book + * loading has finished if it is not allready loaded. + * @return true if address book has finished loading + */ + bool loadAddressBook(); + + /** + * Chooses to enable/disable (show/hide) the address book + * button according to the configuration's setting, and + * returns to the main window if is in address book + * whereas it is disabled. + */ + void updateAddressBookEnabled(); virtual void keyPressEvent(QKeyEvent *event) diff --git a/sflphone-client-kde/src/ui/sflphone_kdeview_base.ui b/sflphone-client-kde/src/ui/sflphone_kdeview_base.ui index b739d849aefbcbff6c35a58c62e5818efc44ac6b..831907f40781fcc0f789bdd4304d5a5cfe5cee87 100644 --- a/sflphone-client-kde/src/ui/sflphone_kdeview_base.ui +++ b/sflphone-client-kde/src/ui/sflphone_kdeview_base.ui @@ -66,6 +66,12 @@ </item> <item> <widget class="KLineEdit" name="lineEdit_addressBook"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Address book loading...</string> + </property> <property name="showClearButton" stdset="0"> <bool>true</bool> </property> diff --git a/sflphone-common/VERSION b/sflphone-common/VERSION index 517317e95fb23bda5f1c305dfaa84bfa8021a824..bc440692c3b559a2d3fe749ce99f8993b879252f 100644 --- a/sflphone-common/VERSION +++ b/sflphone-common/VERSION @@ -1 +1 @@ -0.9.6~beta +0.9.6~rc1 diff --git a/sflphone-common/configure.ac b/sflphone-common/configure.ac index b39dc0343faa0146a480fe1388fc95212f2c7c65..92c734e3d61ae39012220437756c563118fd5a26 100644 --- a/sflphone-common/configure.ac +++ b/sflphone-common/configure.ac @@ -2,7 +2,7 @@ dnl SFLPhone - configure.ac for automake 1.9 and autoconf 2.59 dnl dnl Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) - AC_INIT([SFLphone],[0.9.6~beta],[sflphoneteam@savoirfairelinux.com],[sflphone]) + AC_INIT([SFLphone],[0.9.6~rc1],[sflphoneteam@savoirfairelinux.com],[sflphone]) AC_COPYRIGHT([[Copyright (c) Savoir-Faire Linux 2004-2009]]) AC_REVISION([$Revision$]) diff --git a/sflphone-common/src/config/config.cpp b/sflphone-common/src/config/config.cpp index 9c6bb914baf03d73aaa73f94d6f6b2b5340730e5..4f8c02c8de554f762e1963133d452c67122e1654 100644 --- a/sflphone-common/src/config/config.cpp +++ b/sflphone-common/src/config/config.cpp @@ -22,6 +22,9 @@ #include "../global.h" #include <fstream> #include <cstdlib> +#include <sys/types.h> +#include <sys/stat.h> +#include <errno.h> namespace Conf { @@ -255,7 +258,11 @@ ConfigTree::saveConfigTree (const std::string& fileName) } file.close(); - + + if(chmod(fileName.c_str(), S_IRUSR | S_IWUSR)) { + _debug("Failed to set permission on configuration file because: %s\n",strerror(errno)); + } + return true; } @@ -267,7 +274,7 @@ int ConfigTree::populateFromFile (const std::string& fileName) { bool out = false; - + if (fileName.empty()) { return 0; } @@ -332,7 +339,11 @@ ConfigTree::populateFromFile (const std::string& fileName) } file.close(); - + + if(chmod(fileName.c_str(), S_IRUSR | S_IWUSR)) { + _debug("Failed to set permission on configuration file because: %s\n",strerror(errno)); + } + return 1; } diff --git a/sflphone-common/src/config/config.h b/sflphone-common/src/config/config.h index 0872889486659d2a7db64634106f36fcb58ce3a0..0fa75a24acd2e580d1ddb457179f8091507f6d3b 100644 --- a/sflphone-common/src/config/config.h +++ b/sflphone-common/src/config/config.h @@ -155,7 +155,7 @@ class ConfigTree * List of sections. Each sections has an ItemList as child */ SectionMap _sections; - + friend class ConfigTreeIterator; public: diff --git a/sflphone-common/src/global.h b/sflphone-common/src/global.h index d08d9ce8524dddad65ddb2831421baf27eaa2d62..a6053980b86bb7f1947ff03ca7b9da1f55dee94c 100644 --- a/sflphone-common/src/global.h +++ b/sflphone-common/src/global.h @@ -32,7 +32,7 @@ #include <map> #include <vector> -#define SFLPHONED_VERSION "0.9.6~beta" /** Version number */ +#define SFLPHONED_VERSION "0.9.6~rc1" /** Version number */ #define HOMEDIR (getenv ("HOME")) /** Home directory */ diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 7a49b2c04a3948237400173cfd5e3859ec6f01c7..345fb7df667cac41ccbd41ddfaa2c03bea97e44a 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -1293,7 +1293,7 @@ ManagerImpl::createSettingsPath (void) { _path = std::string (HOMEDIR) + DIR_SEPARATOR_STR + "." + PROGDIR; - if (mkdir (_path.data(), 0755) != 0) { + if (mkdir (_path.data(), 0600) != 0) { // If directory creation failed if (errno != EEXIST) { _debug ("Cannot create directory: %s\n", strerror (errno)); @@ -1952,31 +1952,7 @@ void ManagerImpl::setAudioManager (const int32_t& api) switchAudioManager(); return; - - /* - int manager; - - _debug(" ManagerImpl::setAudioManager :: %i \n",api); - - manager = api; - if( manager == PULSEAUDIO ) - { - if(app_is_running("pulseaudio") != 0) - { - // The pulseaudio daemon is not running - manager = ALSA; - notifyErrClient(PULSEAUDIO_NOT_RUNNING); - } - } - - if(manager == api) - { - // it means that we can change the audio manager - setConfig( PREFERENCES , CONFIG_AUDIO , api) ; - switchAudioManager(); - } - */ - + } int32_t diff --git a/sflphone-common/src/sdp.cpp b/sflphone-common/src/sdp.cpp index 9256b238b8ca8db8dd1cf6341e296940d5b1c4da..8c79cb36dd98489ccf568fc3bf27e12335a36aff 100644 --- a/sflphone-common/src/sdp.cpp +++ b/sflphone-common/src/sdp.cpp @@ -180,7 +180,6 @@ int Sdp::receiving_initial_offer (pjmedia_sdp_session* remote) // pjmedia_sdp_neg_create_w_remote_offer with the remote offer, and by providing the local offer ( optional ) pj_status_t status; - pjmedia_sdp_neg_state state; _debug ("Receiving initial offer\n"); @@ -200,13 +199,68 @@ int Sdp::receiving_initial_offer (pjmedia_sdp_session* remote) status = pjmedia_sdp_neg_create_w_remote_offer (_pool, get_local_sdp_session(), remote, &_negociator); - state = pjmedia_sdp_neg_get_state (_negociator); - PJ_ASSERT_RETURN (status == PJ_SUCCESS, 1); return PJ_SUCCESS; } +pj_status_t Sdp::check_sdp_answer(pjsip_inv_session *inv, pjsip_rx_data *rdata) +{ + static const pj_str_t str_application = { "application", 11 }; + static const pj_str_t str_sdp = { "sdp", 3 }; + pj_status_t status; + pjsip_msg * message = NULL; + pjmedia_sdp_session * remote_sdp = NULL; + + if (pjmedia_sdp_neg_get_state(inv->neg) == PJMEDIA_SDP_NEG_STATE_LOCAL_OFFER) { + + message = rdata->msg_info.msg; + + if(message == NULL) { + _debug("No message"); + return PJMEDIA_SDP_EINSDP; + } + + if (message->body == NULL) { + _debug("Empty message body\n"); + return PJMEDIA_SDP_EINSDP; + } + + if (pj_stricmp(&message->body->content_type.type, &str_application) || pj_stricmp(&message->body->content_type.subtype, &str_sdp)) { + _debug("Incoming Message does not contain SDP\n"); + return PJMEDIA_SDP_EINSDP; + } + + // Parse the SDP body. + status = pjmedia_sdp_parse(rdata->tp_info.pool, (char*)message->body->data, message->body->len, &remote_sdp); + if (status == PJ_SUCCESS) { + status = pjmedia_sdp_validate(remote_sdp); + } + + if (status != PJ_SUCCESS) { + _debug("SDP cannot be validated\n"); + return PJMEDIA_SDP_EINSDP; + } + + // This is an answer + _debug("Got SDP answer %s\n", pjsip_rx_data_get_info(rdata)); + status = pjmedia_sdp_neg_set_remote_answer(inv->pool, inv->neg, remote_sdp); + + if (status != PJ_SUCCESS) { + _debug("An error occured while processing remote answer %s\n", pjsip_rx_data_get_info(rdata)); + return PJMEDIA_SDP_EINSDP; + } + + // Prefer our codecs to remote when possible + pjmedia_sdp_neg_set_prefer_remote_codec_order(inv->neg, 0); + + status = pjmedia_sdp_neg_negotiate(inv->pool, inv->neg, 0); + _debug("Negotiation returned with status %d PJ_SUCCESS being %d\n", status, PJ_SUCCESS); + } + + return status; +} + void Sdp::sdp_add_protocol (void) { this->_local_offer->origin.version = 0; @@ -298,7 +352,7 @@ void Sdp::clean_session_media() _session_media.clear(); } -void Sdp::set_negociated_offer (const pjmedia_sdp_session *sdp) +void Sdp::set_negotiated_sdp (const pjmedia_sdp_session *sdp) { int nb_media, nb_codecs; @@ -308,7 +362,6 @@ void Sdp::set_negociated_offer (const pjmedia_sdp_session *sdp) std::string type, dir; CodecsMap codecs_list; CodecsMap::iterator iter; - AudioCodec *codec_to_add; pjmedia_sdp_attr *attribute; pjmedia_sdp_rtpmap *rtpmap; diff --git a/sflphone-common/src/sdp.h b/sflphone-common/src/sdp.h index ec3178955b57c5370872d43ada2c92302f9f18af..fcd28db15eabc1aabfc0b0d91292829037572204 100644 --- a/sflphone-common/src/sdp.h +++ b/sflphone-common/src/sdp.h @@ -25,6 +25,8 @@ #include <pjmedia/sdp_neg.h> #include <pjsip/sip_transport.h> #include <pjlib.h> +#include <pjsip_ua.h> +#include <pjmedia/errno.h> #include <pj/pool.h> #include <pj/assert.h> @@ -97,6 +99,17 @@ class Sdp { */ int receiving_initial_offer( pjmedia_sdp_session* remote ); + /* + * On receiving a message, check if it contains SDP and negotiate. Should be used for + * SDP answer and offer but currently is only used for answer. + * SDP negociator instance with the remote offer. + * + * @param inv The the invitation + * @param rdata The remote data + */ + + pj_status_t check_sdp_answer(pjsip_inv_session *inv, pjsip_rx_data *rdata); + /* * Remove all media in the session media vector. */ @@ -138,7 +151,7 @@ class Sdp { * * @param sdp the negociated offer */ - void set_negociated_offer( const pjmedia_sdp_session *sdp ); + void set_negotiated_sdp ( const pjmedia_sdp_session *sdp ); /* * Attribute the specified port to every medias provided diff --git a/sflphone-common/src/sipvoiplink.cpp b/sflphone-common/src/sipvoiplink.cpp index af41b6d268c760870fcca500204e488df9331432..7d402327517b2d17505b39c2e501abd055f32681 100644 --- a/sflphone-common/src/sipvoiplink.cpp +++ b/sflphone-common/src/sipvoiplink.cpp @@ -503,7 +503,6 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl) SIPCall* call = new SIPCall (id, Call::Outgoing, _pool); - if (call) { account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (Manager::instance().getAccountFromCall (id))); @@ -520,7 +519,6 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl) setCallAudioLocal (call, getLocalIPAddress(), useStun(), getStunServer()); - try { _debug ("CREATE NEW RTP SESSION FROM NEWOUTGOINGCALL\n"); _audiortp->createNewSession (call); @@ -528,9 +526,6 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl) _debug ("Failed to create rtp thread from newOutGoingCall\n"); } - - - call->initRecFileName(); _debug ("Try to make a call to: %s with call ID: %s\n", toUrl.data(), id.data()); @@ -560,8 +555,6 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl) bool SIPVoIPLink::answer (const CallID& id) { - - int i; SIPCall *call; pj_status_t status; pjsip_tx_data *tdata; @@ -1415,7 +1408,6 @@ bool get_dns_server_addresses (std::vector<std::string> *servers) nameservers.push_back (inet_ntoa (address)); } - //nameservers.push_back ("192.168.50.3"); *servers = nameservers; return true; @@ -1427,8 +1419,6 @@ pj_status_t SIPVoIPLink::enable_dns_srv_resolver (pjsip_endpoint *endpt, pj_dns_ pj_status_t status; pj_dns_resolver *resv; std::vector <std::string> dns_servers; - pj_uint16_t port = 5353; - pjsip_resolver_t *res; int scount, i; // Create the DNS resolver instance @@ -1706,13 +1696,10 @@ int SIPVoIPLink::createUDPServer (void) pj_sockaddr_in bound_addr; pjsip_host_port a_name; char tmpIP[32]; - pj_sock_t sock; - // Init bound address to ANY pj_memset (&bound_addr, 0, sizeof (bound_addr)); - bound_addr.sin_addr.s_addr = pj_htonl (PJ_INADDR_ANY); bound_addr.sin_port = pj_htons ( (pj_uint16_t) _localPort); bound_addr.sin_family = PJ_AF_INET; @@ -1875,22 +1862,17 @@ void SIPVoIPLink::handle_reinvite (SIPCall *call) } } - -/*******************************/ -/* CALLBACKS IMPLEMENTATION */ -/*******************************/ - +// This callback is called when the invite session state has changed void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e) { - _debug ("--------------------- call_on_state_changed --------------------- %i\n", inv->state); SIPCall *call; AccountID accId; SIPVoIPLink *link; pjsip_rx_data *rdata; - - + pj_status_t status; + /* Retrieve the call information */ call = reinterpret_cast<SIPCall*> (inv->mod_data[_mod_ua.id]); @@ -1900,7 +1882,7 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e) //Retrieve the body message rdata = e->body.tsx_state.src.rdata; - + /* If this is an outgoing INVITE that was created because of * REFER/transfer, send NOTIFY to transferer. */ @@ -1961,84 +1943,79 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e) } } } - } else { + + return; + } + + // The call is ringing - We need to handle this case only on outgoing call + if (inv->state == PJSIP_INV_STATE_EARLY && e->body.tsx_state.tsx->role == PJSIP_ROLE_UAC) { + call->setConnectionState (Call::Ringing); + Manager::instance().peerRingingCall (call->getCallId()); + } + // After 2xx is sent/received. + else if (inv->state == PJSIP_INV_STATE_CONNECTING) { + status = call->getLocalSDP()->check_sdp_answer (inv, rdata); + if (status != PJ_SUCCESS) { + _debug("Failed to check_incoming_sdp in call_on_state_changed\n"); + return; + } + } + // After we sent or received a ACK - The connection is established + else if (inv->state == PJSIP_INV_STATE_CONFIRMED) { - // The call is ringing - We need to handle this case only on outgoing call - if (inv->state == PJSIP_INV_STATE_EARLY && e->body.tsx_state.tsx->role == PJSIP_ROLE_UAC) { - call->setConnectionState (Call::Ringing); - Manager::instance().peerRingingCall (call->getCallId()); + /* If the call is a direct IP-to-IP call */ + if (call->getCallConfiguration () == Call::IPtoIP) { + link = SIPVoIPLink::instance (""); + } else { + accId = Manager::instance().getAccountFromCall (call->getCallId()); + link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink (accId)); } - // We receive a ACK - The connection is established - else if (inv->state == PJSIP_INV_STATE_CONFIRMED) { + if (link) + link->SIPCallAnswered (call, rdata); + } + else if (inv->state == PJSIP_INV_STATE_DISCONNECTED) { + _debug ("------------------- Call disconnected ---------------------\n"); + _debug ("State: %i, Disconnection cause: %i\n", inv->state, inv->cause); - /* If the call is a direct IP-to-IP call */ - if (call->getCallConfiguration () == Call::IPtoIP) { - link = SIPVoIPLink::instance (""); - } else { + switch (inv->cause) { + /* The call terminates normally - BYE / CANCEL */ + case PJSIP_SC_OK: + case PJSIP_SC_DECLINE: + case PJSIP_SC_REQUEST_TERMINATED: accId = Manager::instance().getAccountFromCall (call->getCallId()); link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink (accId)); - } - - if (link) - link->SIPCallAnswered (call, rdata); - } - - else if (inv->state == PJSIP_INV_STATE_DISCONNECTED) { - int count = 0; - _debug ("------------------- Call disconnected ---------------------\n"); - _debug ("State: %i, Disconnection cause: %i\n", inv->state, inv->cause); - - switch (inv->cause) { - /* The call terminates normally - BYE / CANCEL */ - - case PJSIP_SC_OK: - - case PJSIP_SC_DECLINE: - - case PJSIP_SC_REQUEST_TERMINATED: - - accId = Manager::instance().getAccountFromCall (call->getCallId()); - link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink (accId)); - - if (link) { - link->SIPCallClosed (call); - } - - break; - - /* The call connection failed */ - - case PJSIP_SC_NOT_FOUND: /* peer not found */ - - case PJSIP_SC_REQUEST_TIMEOUT: /* request timeout */ - - case PJSIP_SC_NOT_ACCEPTABLE_HERE: /* no compatible codecs */ - case PJSIP_SC_NOT_ACCEPTABLE_ANYWHERE: - - case PJSIP_SC_UNSUPPORTED_MEDIA_TYPE: - - case PJSIP_SC_UNAUTHORIZED: - - case PJSIP_SC_REQUEST_PENDING: - accId = Manager::instance().getAccountFromCall (call->getCallId()); - link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink (accId)); + if (link) { + link->SIPCallClosed (call); + } - if (link) { - link->SIPCallServerFailure (call); - } + break; + /* The call connection failed */ + case PJSIP_SC_NOT_FOUND: /* peer not found */ + case PJSIP_SC_REQUEST_TIMEOUT: /* request timeout */ + case PJSIP_SC_NOT_ACCEPTABLE_HERE: /* no compatible codecs */ + case PJSIP_SC_NOT_ACCEPTABLE_ANYWHERE: + case PJSIP_SC_UNSUPPORTED_MEDIA_TYPE: + case PJSIP_SC_UNAUTHORIZED: + case PJSIP_SC_REQUEST_PENDING: + accId = Manager::instance().getAccountFromCall (call->getCallId()); + link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink (accId)); - break; + if (link) { + link->SIPCallServerFailure (call); + } - default: - _debug ("sipvoiplink.cpp - line %d : Unhandled call state. This is probably a bug.\n", __LINE__); - break; - } + break; + default: + _debug ("sipvoiplink.cpp - line %d : Unhandled call state. This is probably a bug.\n", __LINE__); + break; } } + } +// This callback is called after SDP offer/answer session has completed. void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) { _debug ("--------------------- call_on_media_update --------------------- \n"); @@ -2048,38 +2025,42 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status) SIPVoIPLink * link = NULL; SIPCall * call; - - if (status != PJ_SUCCESS) { - _debug ("Error while negociating the offer\n"); - return; - } - - // Get the new sdp, result of the negociation - pjmedia_sdp_neg_get_active_local (inv->neg, &local_sdp); - pjmedia_sdp_neg_get_active_remote(inv->neg, &remote_sdp); - + call = reinterpret_cast<SIPCall *> (inv->mod_data[getModId() ]); if (!call) { _debug ("Call declined by peer, SDP negociation stopped\n"); return; } - - // Clean the resulting sdp offer to create a new one (in case of a reinvite) - call->getLocalSDP()->clean_session_media(); - - // Set the fresh negociated one - call->getLocalSDP()->set_negociated_offer (local_sdp); - // Set remote ip / port - call->getLocalSDP()->set_media_transport_info_from_remote_sdp (remote_sdp); - link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink(AccountNULL)); if(link == NULL) { _debug ("Failed to get sip link\n"); return; } + if (status != PJ_SUCCESS) { + _debug ("Error while negotiating the offer\n"); + link->hangup(call->getCallId()); + Manager::instance().callFailure(call->getCallId()); + return; + } + + // Get the new sdp, result of the negotiation + pjmedia_sdp_neg_get_active_local (inv->neg, &local_sdp); + pjmedia_sdp_neg_get_active_remote (inv->neg, &remote_sdp); + + // Clean the resulting sdp offer to create a new one (in case of a reinvite) + call->getLocalSDP()->clean_session_media(); + + // Set the fresh negotiated one, no matter if that was an offer or answer. + // The local sdp is updated in case of an answer, even if the remote sdp + // is kept internally. + call->getLocalSDP()->set_negotiated_sdp (local_sdp); + + // Set remote ip / port + call->getLocalSDP()->set_media_transport_info_from_remote_sdp (remote_sdp); + try { call->setAudioStart (true); link->getAudioRtp()->start(); @@ -2107,11 +2088,8 @@ void call_on_tsx_changed (pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_ void regc_cb (struct pjsip_regc_cbparam *param) { - - //AccountID *id = static_cast<AccountID *> (param->token); SIPAccount *account; - //_debug("UserAgent: Account ID is %s, Register result: %d, Status: %d\n", id->data(), param->status, param->code); account = static_cast<SIPAccount *> (param->token); if (!account) @@ -2167,11 +2145,10 @@ void regc_cb (struct pjsip_regc_cbparam *param) } +// Optional function to be called to process incoming request message. pj_bool_t mod_on_rx_request (pjsip_rx_data *rdata) { - - pj_status_t status; pj_str_t reason; unsigned options = 0; @@ -2325,7 +2302,6 @@ mod_on_rx_request (pjsip_rx_data *rdata) get_remote_sdp_from_offer (rdata, &r_sdp); -// _debug("r_sdp = %s\n", r_sdp); status = call->getLocalSDP()->receiving_initial_offer (r_sdp); if (status!=PJ_SUCCESS) { @@ -2334,7 +2310,6 @@ mod_on_rx_request (pjsip_rx_data *rdata) return false; } - call->setConnectionState (Call::Progressing); call->setPeerNumber (peerNumber); @@ -2364,7 +2339,6 @@ mod_on_rx_request (pjsip_rx_data *rdata) return true; } - // Specify media capability during invite session creation status = pjsip_inv_create_uas (dialog, rdata, call->getLocalSDP()->get_local_sdp_session(), 0, &inv);