diff --git a/sflphone-client-gnome/debian/changelog b/sflphone-client-gnome/debian/changelog index 3dfa5853eda5b9919adbeed1e93ab338eef8b25f..d7f2215ec7af7ef67046cea14d591acdeff1f9a0 100644 --- a/sflphone-client-gnome/debian/changelog +++ b/sflphone-client-gnome/debian/changelog @@ -1,83 +1,114 @@ -sflphone-client-gnome (0.9.5-0ubuntu1~3.gbp20b188) SYSTEM; urgency=low +sflphone-client-gnome (0.9.5-SYSVER) SYSTEM; urgency=low + + ** 0.9.5 release ** + + * [#1060] FIx bug in chinese translation + * [#1313] git add rtpTest.cpp rtpTest.h + * [#1313] Add init/close rtp tests + * [#1313] Basic instanciation of the rtp layer + * [#1449] Gtk-Critical concerning history filters and new calls + * [#1400] Make the match with the hostname instead of username + * [#1324] Change status bar label for "Using %s (%s)" + * [#1403] Icon size: 60x60 px + * [#1403] Do not remove notification, improve icon quality + * [#1403] Add smaller icon for gnome notifications + * [#1403] Prevent crash when hangup && no notification + * [#1403] Remove all actions on notifications; code refactoring + * [#1451] Use stun.sflphone.org as default STUN server + * [#1060] New po files - need to be translated + * [#1060] Update french translation - Rebuild template file + * [#1456] Add a flag to be replaced in the control files + * [#1454] Make cppunit optional; remove from build deps in control + files + * [#1401] Add libexpat1-dev dependency in control files + * [#1448] Take off these ugly debug messages + * [#1448] fixed getTelephoneTone and getTelephoneFile() called + repeatedly + * [#1406] add liblog4c-dev in build-depends + * [#1409] Restore .desktop icon + + -- SFLphone Automatic Build System <team@sflphone.org> Mon, 25 May 2009 11:34:48 -0400 + +sflphone-client-gnome (0.9.5-SYSVER~rc2) SYSTEM; urgency=low + + ** 0.9.5 rc2 ** + + * [#1422] Improved error message + * [#1402] Fix pjsip build + * [#1404] Clear GTK-Critical Bug at client startup + * [#1422] Added automatic VM shutdown when building on more than one + VM + * [#1422] Fixed some issues with new changelog generation script + * [#1422] Moved distribution update to specific file + * [#1422] Dropped git-dch, replace by home made implementation + * Changes for name based dbus connection + * Clean changelogs + * [#1343] Gnome: Implement a callback system to handle focus on + different widgets + * Debus Session + * Refactoring Python code, PEP8 + * [#1430] Get back dbus_g_proxy_new_for_name + * [#1430] Get back DBUS_BUS_SESSION type + * [#1430] Dbus fixed owner message binding + * Second test with DBUS owner + * [#1404] Gnome -> Preferences -> Hooks + * [#1404] Gnome -> Preferences -> Recordings + * [#1404] Call History + * [#1404] Gnome -> Preferences -> Address Book + * [#1404] IF the first notification option disable the second + notification + * Dbus with fixed owner does not automatically start the deamon + * Add codec debug tests in pysflphone + * [#1407] Some print info + * [#1407] Add a scenario to pick_up action + * Test client dbus connection to a fixed owner + * Add python dbus test suite + * [#1161] Modified version handling in build system + * [#1314] Test pulse audio and audio streams connect and disconnect + * [#1402] Add info message after configure + * [#1402] Build the daemon with the local pjsip library (vs the + installed one) + * [#1009] Fix Codec Sampling Rate set to zeros + * [#1314] Add mutex to pulse layer audio streams + * [#1314] Refactoring pulseaudio stream to test connect disconnect + * [#1314] Refactoring of pulselayer to test conect/disconnect + * Add debug messages in debus calls concerning account + * [#1314] Add some return values to audio init functions + * [#1406] add liblog4c-dev in build-depends + * [#1409] Restore .desktop icon + * Bug #1405: Fix strings as requested. + * Bug #1404: Fix strings in preferences panel. + + -- SFLphone Automatic Build System <team@sflphone.org> Tue, 19 May 2009 12:08:18 -0400 + +sflphone-client-gnome (0.9.5-0ubuntu1~rc1) SYSTEM; urgency=low - ** SNAPSHOT build @20b188472f4e66c75b3f1dffe1f110b7070397ec ** - - [ Emmanuel Milou ] - * [#1220] Add Conflicts: sflphone in debian control files - * [#1179] Add liblog4c3 runtime dependency - * [#1212] FIx typo error in dependency list for itnrepid - * [#1212] FIx .desktop file to point on the right exec - * [#1212] Modify changelog replacing tag - - [ Sflphone Project ] - * "[#1262] Updated changelogs for version 0.9.5-0ubuntu1~beta" - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-27 - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1~beta - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1~beta + [ SFLphone Project ] * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-28 + 05-05 [ Emmanuel Milou ] - * [#1212] Restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-28 - - [ Julien Bonjean ] - * [#1262]Introduced dynamic version setting - - [ Sflphone Project ] + * Add some python CLI client code; not really functional + * [#1108] Fix peerHungup method for IP to IP call [ Alexandre Savard ] - * [#1143] Add celtcodec.cpp - * [#1143] add configure and make stuffs - * [#1143] add frame size into each codecs - * [#1143] Take timestamp's step size from codec - * [#1143] RTP thread at 11 ms - * [#1143] Dynamic RTP thread sleep parameter - * [#1143] Fix dynamic thread sleep time calculation + * [#1108] Correct setting of SIP contact for direct IP call + * [#1108] SIP user agent handles incoming REFER [ Emmanuel Milou ] - * [#1262] sflphone-client-gnome uses changelog version number + * Remove website from repository + * Update translation [ Alexandre Savard ] - * [#1143] Some cleanup - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-29 + * Sflphone icon's tooltip changed for "configured" instead of + "registered" [ Emmanuel Milou ] - * [#1262] Update changelogs - * [#1262] Update rules - * [#1143] Build celt codec only if version >= 0.5.1 is detected - * [1143] Restore rules files - do not need to specify --without-celt - * [#1336] Change SFLphone logo - * [#1331] Fix searchbar problems - * [#1332] Fix unexplicit labels - * [#1334] Fix unexplicit label - * [#1329] Fix recordings config panel + * Update translation [ Sflphone Project ] - -- Sflphone Project <sflphone@mtl.savoirfairelinux.net> Thu, 30 Apr 2009 10:01:42 -0400 + -- Sflphone Project <sflphone@mtl.savoirfairelinux.net> Tue, 05 May 2009 19:16:13 -0400 sflphone-client-gnome (0.9.5-0ubuntu1~beta) SYSTEM; urgency=low diff --git a/sflphone-client-gnome/debian/control.hardy b/sflphone-client-gnome/debian/control.hardy index 83f0f4e995874fc3ae5b701075ef62d1747baae9..95d2f2538cd8be56f006cbd7786f5cfa5827d151 100644 --- a/sflphone-client-gnome/debian/control.hardy +++ b/sflphone-client-gnome/debian/control.hardy @@ -2,13 +2,13 @@ Source: sflphone-client-gnome Maintainer: SavoirFaireLinux Inc <emmanuel.milou@savoirfairelinux.com> Section: gnome Priority: optional -Build-Depends: debhelper (>= 5), libgcc1, autoconf, automake, libtool, libgtk2.0-dev, libsexy-dev, libdbus-glib-1-dev, libnotify-dev, libebook1.2-dev, check +Build-Depends: debhelper (>= 5), libgcc1, autoconf, automake, libtool, libgtk2.0-dev, libsexy-dev, libdbus-glib-1-dev, libnotify-dev, libebook1.2-dev, check, liblog4c-dev Standards-Version: 3.7.3 Package: sflphone-client-gnome Priority: optional Architecture: any -Depends: sflphone-common (>= 0.9.5), libdbus-glib-1-2 (>= 0.73), libgtk2.0-0 , libc6 (>= 2.3.6-6) , libglib2.0-0 (>= 2.12.0), libdbus-glib-1-2, libnotify1 (>= 0.4), libsexy2 (>= 0.1), librsvg2-common (>=2.22.2), liblog4c3 +Depends: sflphone-common (=VERSION), libdbus-glib-1-2 (>= 0.73), libgtk2.0-0 , libc6 (>= 2.3.6-6) , libglib2.0-0 (>= 2.12.0), libdbus-glib-1-2, libnotify1 (>= 0.4), libsexy2 (>= 0.1), librsvg2-common (>=2.22.2), liblog4c3 Replaces: sflphone Conflicts: sflphone Homepage: http://www.sflphone.org diff --git a/sflphone-client-gnome/debian/control.intrepid b/sflphone-client-gnome/debian/control.intrepid index 214c29304ebd213dc937cf627dde9851f0305181..17532c599e32e945949bab117cfae731a9ee1fe5 100644 --- a/sflphone-client-gnome/debian/control.intrepid +++ b/sflphone-client-gnome/debian/control.intrepid @@ -2,13 +2,13 @@ Source: sflphone-client-gnome Maintainer: SavoirFaireLinux Inc <emmanuel.milou@savoirfairelinux.com> Section: gnome Priority: optional -Build-Depends: debhelper (>= 5), libgcc1, autoconf, libtool, libgtk2.0-dev, libsexy-dev, libdbus-glib-1-dev, libnotify-dev, libebook1.2-dev, check +Build-Depends: debhelper (>= 5), libgcc1, autoconf, libtool, libgtk2.0-dev, libsexy-dev, libdbus-glib-1-dev, libnotify-dev, libebook1.2-dev, check, liblog4c-dev Standards-Version: 3.8.0 Package: sflphone-client-gnome Priority: optional Architecture: any -Depends: sflphone-common (>=0.9.5), libdbus-glib-1-2 (>= 0.73), libgtk2.0-0 , libc6 (>= 2.3.6-6) , libglib2.0-0 (>= 2.12.0), libdbus-glib-1-2, libnotify1 (>= 0.4), libsexy2 (>= 0.1), librsvg2-common (>= 2.22.2), liblog4c3 +Depends: sflphone-common (=VERSION), libdbus-glib-1-2 (>= 0.73), libgtk2.0-0 , libc6 (>= 2.3.6-6) , libglib2.0-0 (>= 2.12.0), libdbus-glib-1-2, libnotify1 (>= 0.4), libsexy2 (>= 0.1), librsvg2-common (>= 2.22.2), liblog4c3 Replaces: sflphone Conflicts: sflphone Homepage: http://www.sflphone.org diff --git a/sflphone-client-gnome/debian/control.jaunty b/sflphone-client-gnome/debian/control.jaunty index f36c19b8107b61ff95010cf4db3f415783d715b9..4846a69bfb3618290fbb30e61967011fb4aa4cdd 100644 --- a/sflphone-client-gnome/debian/control.jaunty +++ b/sflphone-client-gnome/debian/control.jaunty @@ -2,13 +2,13 @@ Source: sflphone-client-gnome Maintainer: SavoirFaireLinux Inc <emmanuel.milou@savoirfairelinux.com> Section: gnome Priority: optional -Build-Depends: debhelper (>= 5), libgcc1, autoconf, automake, libtool, libgtk2.0-dev (>=2.16), libdbus-glib-1-dev, libnotify-dev, libebook1.2-dev, check +Build-Depends: debhelper (>= 5), libgcc1, autoconf, automake, libtool, libgtk2.0-dev (>=2.16), libdbus-glib-1-dev, libnotify-dev, libebook1.2-dev, check, liblog4c-dev Standards-Version: 3.7.3 Package: sflphone-client-gnome Priority: optional Architecture: any -Depends: sflphone-common (>=0.9.5), libdbus-glib-1-2 (>= 0.73), libgtk2.0-0 (>=2.16) , libc6 (>= 2.3.6-6) , libglib2.0-0 (>= 2.12.0) ,libdbus-glib-1-2, libnotify1 (>= 0.4), librsvg2-common (>=2.22.2), liblog4c3 +Depends: sflphone-common (=VERSION), libdbus-glib-1-2 (>= 0.73), libgtk2.0-0 (>=2.16) , libc6 (>= 2.3.6-6) , libglib2.0-0 (>= 2.12.0) ,libdbus-glib-1-2, libnotify1 (>= 0.4), librsvg2-common (>=2.22.2), liblog4c3 Replaces: sflphone Conflicts: sflphone Homepage: http://www.sflphone.org diff --git a/sflphone-client-gnome/pixmaps/Makefile.am b/sflphone-client-gnome/pixmaps/Makefile.am index f2c997ad10e5a08f9ebb1938b7e002390c014b7c..15fc5055572ecdb0ed65c9c7feeb871384650fd8 100644 --- a/sflphone-client-gnome/pixmaps/Makefile.am +++ b/sflphone-client-gnome/pixmaps/Makefile.am @@ -1,7 +1,7 @@ icondir = $(datadir)/pixmaps -icon_DATA = sflphone1.svg +icon_DATA = sflphone.svg -buttons_DATA = accept.svg current.svg transfert.svg hang_up.svg hold.svg unhold.svg refuse.svg call.svg ring.svg dial.svg mic.svg mic_25.svg mic_50.svg mic_75.svg speaker.svg speaker_25.svg speaker_50.svg speaker_75.svg fail.svg incoming.svg outgoing.svg missed.svg mailbox.svg busy.svg icon_accept.svg icon_hold.svg icon_unhold.svg icon_hangup.svg icon_call.svg icon_dialpad.svg icon_volume.svg icon_dialpad_off.svg icon_volume_off.svg history.svg history2.svg sflphone.png sflphone1.svg stock_person.svg icon_rec.svg rec_call.svg addressbook.svg contact_default.svg face-monkey.svg users.svg home.svg wait-on.gif +buttons_DATA = accept.svg current.svg transfert.svg hang_up.svg hold.svg unhold.svg refuse.svg call.svg ring.svg dial.svg mic.svg mic_25.svg mic_50.svg mic_75.svg speaker.svg speaker_25.svg speaker_50.svg speaker_75.svg fail.svg incoming.svg outgoing.svg missed.svg mailbox.svg busy.svg icon_accept.svg icon_hold.svg icon_unhold.svg icon_hangup.svg icon_call.svg icon_dialpad.svg icon_volume.svg icon_dialpad_off.svg icon_volume_off.svg history2.svg sflphone.svg sflphone_small.svg stock_person.svg icon_rec.svg rec_call.svg addressbook.svg contact_default.svg face-monkey.svg users.svg home.svg wait-on.gif buttonsdir = $(datadir)/sflphone EXTRA_DIST = $(buttons_DATA) $(icon_DATA) diff --git a/sflphone-client-gnome/pixmaps/history.svg b/sflphone-client-gnome/pixmaps/history.svg deleted file mode 100644 index 78b36d728e0fb14b088dc83d2f10927a13a91961..0000000000000000000000000000000000000000 --- a/sflphone-client-gnome/pixmaps/history.svg +++ /dev/null @@ -1,117 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="24" - height="24" - id="svg2" - sodipodi:version="0.32" - inkscape:version="0.46" - version="1.0" - sodipodi:docname="history.svg" - inkscape:output_extension="org.inkscape.output.svg.inkscape"> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="21.480197" - inkscape:cx="1.474761" - inkscape:cy="11.975709" - inkscape:document-units="px" - inkscape:current-layer="layer1" - showgrid="false" - inkscape:window-width="1600" - inkscape:window-height="926" - inkscape:window-x="0" - inkscape:window-y="24" /> - <defs - id="defs4"> - <linearGradient - inkscape:collect="always" - id="linearGradient3527"> - <stop - style="stop-color:#150b0b;stop-opacity:1;" - offset="0" - id="stop3529" /> - <stop - style="stop-color:#150b0b;stop-opacity:0;" - offset="1" - id="stop3531" /> - </linearGradient> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective10" /> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient3527" - id="radialGradient3535" - cx="11.964509" - cy="22.347315" - fx="11.964509" - fy="22.347315" - r="0.29855451" - gradientTransform="matrix(1,0,0,2.9491628,0,-43.558553)" - gradientUnits="userSpaceOnUse" /> - </defs> - <metadata - id="metadata7"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - </cc:Work> - </rdf:RDF> - </metadata> - <g - inkscape:label="Calque 1" - inkscape:groupmode="layer" - id="layer1"> - <path - sodipodi:type="arc" - style="fill:#efebe7;fill-opacity:1;stroke:#000000;stroke-width:0.75590805999999999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stroke-linejoin:miter;stroke-linecap:square" - id="path2383" - sodipodi:cx="13.384615" - sodipodi:cy="12.461538" - sodipodi:rx="9.7408905" - sodipodi:ry="8.963563" - d="M 23.125505,12.461538 A 9.7408905,8.963563 0 1 1 3.6437244,12.461538 A 9.7408905,8.963563 0 1 1 23.125505,12.461538 z" - transform="matrix(1.137179,0,0,1.2493462,-3.1235374,-3.5444849)" /> - <rect - style="fill:#090800;fill-opacity:0.94509803999999997;stroke:#00000c;stroke-width:0.70011531999999999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2395" - width="0.54875678" - height="10.837302" - x="11.783239" - y="1.8915578" - rx="0.46546814" - ry="0.23272024" /> - <rect - style="fill:#2f7600;fill-opacity:0.94509803999999997;stroke:#091e00;stroke-width:0.70353359000000004;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2397" - width="0.69879586" - height="8.5937195" - x="17.122484" - y="-6.6727667" - rx="0.59273487" - ry="0.18454158" - transform="matrix(0.7666254,0.6420946,-0.6830233,0.7303966,0,0)" - inkscape:transform-center-x="0.34290126" - inkscape:transform-center-y="4.8387013" /> - </g> -</svg> diff --git a/sflphone-client-gnome/pixmaps/sflphone.png b/sflphone-client-gnome/pixmaps/sflphone.png deleted file mode 100644 index 50c1483ac152972fa6d993b6823b5d247dd258bc..0000000000000000000000000000000000000000 Binary files a/sflphone-client-gnome/pixmaps/sflphone.png and /dev/null differ diff --git a/sflphone-client-gnome/pixmaps/sflphone.svg b/sflphone-client-gnome/pixmaps/sflphone.svg new file mode 100644 index 0000000000000000000000000000000000000000..13af3cc7eb9e0ff3d5ae1af289c29d97427b19f7 --- /dev/null +++ b/sflphone-client-gnome/pixmaps/sflphone.svg @@ -0,0 +1,373 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="120" + height="120" + id="svg5875" + sodipodi:version="0.32" + inkscape:version="0.46" + version="1.0" + sodipodi:docname="sflphone4.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs5877"> + <linearGradient + inkscape:collect="always" + id="linearGradient3803"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop3805" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3807" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient4684"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop4686" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop4688" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient4669"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop4671" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop4673" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3859"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop3861" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3863" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient5850"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop5852" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop5854" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5850" + id="linearGradient5856" + x1="476.3125" + y1="439.0293" + x2="477.3125" + y2="514.42188" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient4999"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop5001" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop5003" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4999" + id="linearGradient5862" + gradientUnits="userSpaceOnUse" + x1="698.38525" + y1="245.5472" + x2="702.81964" + y2="977.78302" /> + <linearGradient + inkscape:collect="always" + id="linearGradient4991"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop4993" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop4995" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4991" + id="radialGradient4997" + cx="736.5" + cy="640.93073" + fx="736.5" + fy="640.93073" + r="91.964203" + gradientTransform="matrix(1,0,0,0.8097086,0,99.14184)" + gradientUnits="userSpaceOnUse" /> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective5883" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3859" + id="linearGradient3873" + x1="352.19498" + y1="451.55289" + x2="106.34038" + y2="658.39594" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-3.8268196,-1.7394634)" /> + <inkscape:perspective + id="perspective2422" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2437" + inkscape:persp3d-origin="168.5 : 109.33333 : 1" + inkscape:vp_z="337 : 164 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 164 : 1" + sodipodi:type="inkscape:persp3d" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4669" + id="linearGradient4675" + x1="-20.657925" + y1="-244.41351" + x2="184.57913" + y2="789.61469" + gradientUnits="userSpaceOnUse" + spreadMethod="pad" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4684" + id="linearGradient4690" + x1="52.987782" + y1="-84.148399" + x2="127.02813" + y2="99.500687" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4669" + id="linearGradient5149" + gradientUnits="userSpaceOnUse" + spreadMethod="pad" + x1="-20.657925" + y1="-244.41351" + x2="184.57913" + y2="789.61469" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4991" + id="radialGradient5297" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,0.8097086,0,99.14184)" + cx="736.5" + cy="640.93073" + fx="736.5" + fy="640.93073" + r="91.964203" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4999" + id="linearGradient5299" + gradientUnits="userSpaceOnUse" + x1="698.38525" + y1="245.5472" + x2="702.81964" + y2="977.78302" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4684" + id="linearGradient5301" + gradientUnits="userSpaceOnUse" + x1="52.987782" + y1="-84.148399" + x2="127.02813" + y2="99.500687" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4684" + id="linearGradient5308" + gradientUnits="userSpaceOnUse" + x1="52.987782" + y1="-84.148399" + x2="127.02813" + y2="99.500687" + gradientTransform="matrix(0.6453907,0,0,0.6453907,0.8651337,0.4352828)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3803" + id="linearGradient3809" + x1="12.663443" + y1="8.5301828" + x2="41.858654" + y2="57.533279" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0054518,0,0,1.0054518,-4.7165106e-3,-0.4345682)" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + gridtolerance="10000" + guidetolerance="10" + objecttolerance="10" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="4.6527672" + inkscape:cx="71.125906" + inkscape:cy="59.641316" + inkscape:document-units="px" + inkscape:current-layer="layer2" + showgrid="false" + inkscape:window-width="1918" + inkscape:window-height="1068" + inkscape:window-x="0" + inkscape:window-y="36" + showguides="true" + inkscape:guide-bbox="true" /> + <metadata + id="metadata5880"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title>Icône SFL</dc:title> + <dc:date>2009-04-29</dc:date> + <dc:creator> + <cc:Agent> + <dc:title>Jérôme Oufella</dc:title> + </cc:Agent> + </dc:creator> + <dc:rights> + <cc:Agent> + <dc:title>(c) 2009 Savoir-faire Linux inc.</dc:title> + </cc:Agent> + </dc:rights> + <dc:subject> + <rdf:Bag> + <rdf:li>sfl icon</rdf:li> + </rdf:Bag> + </dc:subject> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Circle" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-182.15973,-428.80763)" + style="display:inline"> + <g + style="display:inline" + id="g5868" + transform="matrix(0.6453907,0,0,0.6453907,-86.103074,148.01517)"> + <path + transform="matrix(0.9959566,0,0,1.2202117,1.6861043,-136.53125)" + d="M 602,544.5 A 92.5,75.5 0 1 1 417,544.5 A 92.5,75.5 0 1 1 602,544.5 z" + sodipodi:ry="75.5" + sodipodi:rx="92.5" + sodipodi:cy="544.5" + sodipodi:cx="509.5" + id="path4987" + style="fill:#00252b;fill-opacity:1;fill-rule:evenodd" + sodipodi:type="arc" /> + <path + transform="matrix(0.9200853,0,0,1.1406537,-168.51683,-66.406557)" + d="M 827,521 A 90.5,73 0 1 1 646,521 A 90.5,73 0 1 1 827,521 z" + sodipodi:ry="73" + sodipodi:rx="90.5" + sodipodi:cy="521" + sodipodi:cx="736.5" + id="path4989" + style="opacity:0.83064515;fill:url(#radialGradient5297);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5299);stroke-width:2.92839932;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + sodipodi:type="arc" /> + </g> + </g> + <g + inkscape:groupmode="layer" + id="layer3" + inkscape:label="Bg logo" + style="display:inline"> + <path + style="opacity:1;fill:#006f82;fill-opacity:0;fill-rule:evenodd;stroke:#006f82;stroke-width:1.04566979;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" + d="M 10.55114,62.033695 L 10.545872,59.631821 L 11.329656,63.53366 L 11.321088,59.630621 L 12.621458,63.431585 L 12.611584,58.928074 L 13.657722,64.630914 L 13.897019,55.923735 L 14.696183,66.831029 L 15.959008,53.518653 L 16.252311,69.430662 L 17.258279,56.819227 L 18.052818,65.624884 L 18.551844,57.51777 L 19.347918,67.023975 L 19.833546,52.812112 L 21.424823,71.42421 L 20.85641,47.906685 L 23.760575,76.024188 L 22.924102,48.103639 L 25.312097,76.522171 L 24.213925,47.100857 L 25.814204,69.816155 L 26.299177,55.304046 L 27.10579,69.613998 L 28.100546,51.898595 L 28.133486,66.910282 L 29.383802,47.893475 L 29.17479,70.411424 L 30.42269,50.293743 L 30.995926,76.012977 L 32.479618,45.586876 L 32.810259,78.51213 L 34.022583,42.181821 L 34.623699,80.610954 L 35.567529,39.677469 L 36.17744,82.1097 L 36.856708,38.374457 L 38.250165,84.608465 L 38.159277,43.176196 L 39.275226,80.703832 L 39.72003,47.877458 L 40.557601,76.298395 L 41.022589,52.6792 L 42.361163,73.89372 L 42.575221,53.677574 L 43.394126,73.59189 L 44.128072,54.776031 L 45.197477,71.087148 L 44.64642,55.475777 L 46.746157,70.284115 L 46.201462,57.575013 L 47.766387,64.177753 L 48.157374,33.559644 L 49.574786,63.974798 L 49.737044,29.057192 L 50.608848,64.173352 L 52.072146,33.362224 L 52.237957,82.20545 L 53.618404,31.455993 L 54.269604,83.80121 L 54.704307,28.546169 L 56.569731,89.992521 L 56.233651,27.84325 L 58.106058,92.475088 L 58.237615,25.734393 L 59.462018,94.871346 L 59.308802,25.029251 L 60.997751,97.080654 L 60.859237,25.026847 L 63.348005,99.381156 L 63.493128,47.740542 L 64.432585,95.86912 L 64.276032,51.242071 L 66.685102,98.180342 L 65.570911,52.541084 L 66.563781,98.275324 L 64.993727,25.020443 L 69.064999,96.16276 L 66.029984,26.219775 L 70.373503,94.756118 L 68.436272,27.318084 L 72.677618,93.850086 L 72.234352,27.4111 C 72.234352,27.4111 73.940422,98.363981 74.456142,97.862784 C 74.971847,97.361592 75.595153,28.106441 75.595153,28.106441 L 75.739811,94.046666 L 76.890923,29.805765 L 77.049624,93.24225 L 78.18426,30.404231 L 78.338812,91.945712 L 80.000344,33.704002 L 80.38199,89.886658 L 82.071758,35.602278 L 82.1985,84.464362 L 83.409266,38.505999 L 84.494194,70.81025 L 85.482229,41.108345 L 86.300623,69.703651 L 88.312822,44.609637 L 89.401506,78.617548 L 89.890557,48.126952 L 91.245045,76.60551 L 91.663323,49.515327 L 93.046215,73.100561 L 93.514555,51.012458 L 95.564594,69.900023 L 95.350428,54.413452 L 97.176303,71.094351 L 97.42119,56.012671 L 100.17281,68.095581 L 100.26537,56.803022 L 102.33474,68.598489 L 102.41415,58.300276 L 104.15368,64.27997 L 104.55185,54.777789 L 105.28904,66.085499 L 105.9731,60.189794 C 105.9731,60.189794 107.07326,63.772713 107.07216,63.272322 C 107.07105,62.771937 108.5787,61.082943 108.31828,60.182636 C 108.05791,59.282342 109.41561,62.475103 109.41561,62.475103" + id="path4922" + sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccscccccccccccccccccccccccccccccccccccc" /> + </g> + <g + inkscape:groupmode="layer" + id="layer2" + inkscape:label="Handset" + style="display:inline"> + <path + style="opacity:0.07000002;fill:url(#linearGradient5308);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:12.29699993;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" + d="M 59.151985,7.5345809 C 30.967536,8.249433 8.3274641,31.354675 8.3274641,59.710388 C 8.3274641,68.222065 10.375495,76.246983 13.994802,83.347823 C 13.107834,79.536662 12.643515,75.568677 12.643515,71.488769 C 12.643515,42.682964 36.013519,19.292793 64.819322,19.292793 C 85.110516,19.292792 102.69706,30.904841 111.32779,47.831165 C 105.9454,24.743656 85.222311,7.5345809 60.503272,7.5345809 C 60.05318,7.5345809 59.599356,7.5232342 59.151985,7.5345809 z" + id="path4679" /> + <path + id="path3760" + d="M 88.906874,94.063359 C 88.559935,94.977556 84.966023,98.376 83.289215,99.375481 L 81.43556,100.48037 L 73.808785,90.541207 L 66.182003,80.602053 L 67.494791,79.241241 C 68.779544,77.909476 72.634516,75.322497 73.887671,74.951128 C 74.431745,74.789888 75.528139,76.078361 81.782999,84.229651 C 85.777928,89.435809 88.983679,93.860981 88.906874,94.063359 z M 50.73329,44.477271 C 50.446627,45.232636 45.91138,49.09897 44.433331,49.848034 L 43.090474,50.528569 L 35.573545,40.555914 L 28.056608,30.583254 L 30.64475,28.448397 C 32.068233,27.274223 33.934924,26.023758 34.792949,25.669578 L 36.352996,25.025619 L 43.633459,34.513458 C 48.514886,40.874896 50.854403,44.158138 50.73329,44.477271 z M 80.086522,101.40574 C 80.038294,101.53261 79.197946,102.04305 78.219084,102.54005 C 70.526609,106.44583 58.163118,101.84815 46.523718,90.753346 C 42.403963,86.826338 33.905571,76.306559 30.548319,70.978095 C 24.069511,60.695264 21.022718,52.062253 21.112522,44.242002 C 21.168568,39.361513 22.770354,35.243539 25.642678,32.595536 L 26.627564,31.687563 L 34.18264,41.386253 L 41.737722,51.084944 L 41.126672,52.143343 C 40.282652,53.605243 40.435321,55.522605 41.628037,58.4399 C 43.124949,62.101227 55.001116,77.570343 58.187294,80.008903 C 60.691108,81.925211 62.231437,82.484651 64.082727,82.150099 L 65.393673,81.913192 L 72.783941,91.544137 C 76.848589,96.841159 80.134755,101.27887 80.086522,101.40574 z" + style="opacity:0.32000002;fill:#000000;fill-opacity:1" /> + <path + style="fill:#dfdfdf;fill-opacity:1" + d="M 92.518066,90.452167 C 92.171127,91.366364 88.577215,94.764808 86.900407,95.764289 L 85.046752,96.869181 L 77.419976,86.930015 L 69.793194,76.990861 L 71.105983,75.63005 C 72.390736,74.298285 76.245707,71.711305 77.498862,71.339937 C 78.042936,71.178697 79.13933,72.46717 85.394191,80.61846 C 89.389119,85.824618 92.59487,90.24979 92.518066,90.452167 z M 54.344481,40.86608 C 54.057819,41.621444 49.522571,45.487778 48.044523,46.236842 L 46.701666,46.917377 L 39.184735,36.944723 L 31.6678,26.972063 L 34.255941,24.837205 C 35.679425,23.663032 37.546115,22.412566 38.404141,22.058387 L 39.964188,21.414427 L 47.24465,30.902267 C 52.126078,37.263706 54.465594,40.546946 54.344481,40.86608 z M 83.697713,97.79455 C 83.649486,97.921417 82.809137,98.431852 81.830276,98.928861 C 74.137801,102.83464 61.774308,98.236957 50.134909,87.142154 C 46.015154,83.215146 37.516762,72.695367 34.159511,67.366904 C 27.680702,57.084073 24.63391,48.451062 24.723714,40.63081 C 24.77976,35.750321 26.381546,31.632348 29.253869,28.984346 L 30.238755,28.076371 L 37.793832,37.775063 L 45.348913,47.473754 L 44.737863,48.532152 C 43.893844,49.994052 44.046513,51.911414 45.239229,54.828709 C 46.73614,58.490035 58.612307,73.959152 61.798485,76.397711 C 64.3023,78.31402 65.842629,78.87346 67.693918,78.538907 L 69.004865,78.302 L 76.395132,87.932945 C 80.459781,93.229968 83.745947,97.667682 83.697713,97.79455 z" + id="path3218" /> + <g + transform="matrix(0.6018652,0,0,0.6018652,-106.46243,-252.67476)" + id="g3787" + style="fill:#ffffff;fill-opacity:0"> + <path + id="path3789" + d="M 324.6064,576.10592 C 324.02996,577.62486 318.05867,583.27138 315.27265,584.93202 L 312.1928,586.7678 L 299.5209,570.25386 L 286.84899,553.73994 L 289.03019,551.47895 C 291.16481,549.26622 297.56985,544.96795 299.65197,544.35092 C 300.55595,544.08302 302.37761,546.22382 312.77007,559.7672 C 319.40765,568.41724 324.73401,575.76967 324.6064,576.10592 z M 261.18093,493.71856 C 260.70464,494.9736 253.16932,501.39752 250.71354,502.64209 L 248.48238,503.7728 L 235.99299,487.20322 L 223.50359,470.63363 L 227.80379,467.08656 C 230.16891,465.13567 233.27042,463.05802 234.69603,462.46955 L 237.28805,461.39961 L 249.38455,477.16367 C 257.49505,487.73321 261.38216,493.18832 261.18093,493.71856 z M 309.95137,588.3053 C 309.87124,588.51609 308.475,589.36418 306.84862,590.18996 C 294.06756,596.67941 273.5256,589.04036 254.18672,570.60633 C 247.34174,564.0816 233.22165,546.60297 227.64357,537.74972 C 216.87902,520.66478 211.81677,506.32102 211.96598,493.32766 C 212.0591,485.21872 214.72047,478.3767 219.49284,473.97704 L 221.12923,472.46844 L 233.682,488.58283 L 246.23478,504.69722 L 245.21952,506.45575 C 243.81718,508.8847 244.07084,512.0704 246.05254,516.91749 C 248.53966,523.00079 268.27193,548.70275 273.56577,552.75442 C 277.72586,555.93837 280.28512,556.86788 283.36104,556.31202 L 285.53918,555.9184 L 297.81812,571.92023 C 304.57154,580.72124 310.03151,588.09451 309.95137,588.3053 z" + style="opacity:0.32000002;fill:#ffffff;fill-opacity:0" /> + <path + style="fill:#ffffff;fill-opacity:0" + d="M 330.6064,570.10592 C 330.02996,571.62486 324.05867,577.27138 321.27265,578.93202 L 318.1928,580.7678 L 305.5209,564.25386 L 292.84899,547.73994 L 295.03019,545.47895 C 297.16481,543.26622 303.56985,538.96795 305.65197,538.35092 C 306.55595,538.08302 308.37761,540.22382 318.77007,553.7672 C 325.40765,562.41724 330.73401,569.76967 330.6064,570.10592 z M 267.18093,487.71856 C 266.70464,488.9736 259.16932,495.39752 256.71354,496.64209 L 254.48238,497.7728 L 241.99299,481.20322 L 229.50359,464.63363 L 233.80379,461.08656 C 236.16891,459.13567 239.27042,457.05802 240.69603,456.46955 L 243.28805,455.39961 L 255.38455,471.16367 C 263.49505,481.73321 267.38216,487.18832 267.18093,487.71856 z M 315.95137,582.3053 C 315.87124,582.51609 314.475,583.36418 312.84862,584.18996 C 300.06756,590.67941 279.5256,583.04036 260.18672,564.60633 C 253.34174,558.0816 239.22165,540.60297 233.64357,531.74972 C 222.87902,514.66478 217.81677,500.32102 217.96598,487.32766 C 218.0591,479.21872 220.72047,472.3767 225.49284,467.97704 L 227.12923,466.46844 L 239.682,482.58283 L 252.23478,498.69722 L 251.21952,500.45575 C 249.81718,502.8847 250.07084,506.0704 252.05254,510.91749 C 254.53966,517.00079 274.27193,542.70275 279.56577,546.75442 C 283.72586,549.93837 286.28512,550.86788 289.36104,550.31202 L 291.53918,549.9184 L 303.81812,565.92023 C 310.57154,574.72124 316.03151,582.09451 315.95137,582.3053 z" + id="path3791" /> + </g> + <path + style="fill:url(#linearGradient3809);fill-opacity:1;stroke:none" + d="M 39.961991,21.402587 L 38.390972,22.062415 C 37.532947,22.416594 35.666967,23.653234 34.243484,24.827407 L 31.667014,26.963992 L 39.176482,36.955669 L 43.166868,42.23429 C 44.833493,39.007648 46.844812,36.037923 49.105318,33.342326 C 48.501731,32.545758 47.962788,31.818462 47.251516,30.891538 L 39.961991,21.402587 z M 30.253097,28.063705 L 29.247645,28.974895 C 26.375322,31.622897 24.779157,35.751365 24.723113,40.631852 C 24.633309,48.452104 27.670415,57.087755 34.149223,67.370584 C 35.036506,68.778836 36.301396,70.544757 37.731145,72.460684 C 37.518951,70.51226 37.385521,68.535071 37.385521,66.522234 C 37.385521,58.29228 39.192461,50.526372 42.412779,43.742468 L 37.793985,37.772598 L 30.253097,28.063705 z" + id="path3798" /> + </g> +</svg> diff --git a/sflphone-client-gnome/pixmaps/sflphone1.svg b/sflphone-client-gnome/pixmaps/sflphone1.svg deleted file mode 100644 index 077f7ff40f6b342b3cc81a1eb1f89c9c002a4573..0000000000000000000000000000000000000000 --- a/sflphone-client-gnome/pixmaps/sflphone1.svg +++ /dev/null @@ -1,210 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="184.25197" - height="184.25197" - id="svg5875" - sodipodi:version="0.32" - inkscape:version="0.46" - version="1.0" - sodipodi:docname="sflphone1.svg" - inkscape:output_extension="org.inkscape.output.svg.inkscape"> - <defs - id="defs5877"> - <linearGradient - inkscape:collect="always" - id="linearGradient3859"> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="0" - id="stop3861" /> - <stop - style="stop-color:#ffffff;stop-opacity:0;" - offset="1" - id="stop3863" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient5850"> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="0" - id="stop5852" /> - <stop - style="stop-color:#ffffff;stop-opacity:0;" - offset="1" - id="stop5854" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient5850" - id="linearGradient5856" - x1="476.3125" - y1="439.0293" - x2="477.3125" - y2="514.42188" - gradientUnits="userSpaceOnUse" /> - <linearGradient - inkscape:collect="always" - id="linearGradient4999"> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="0" - id="stop5001" /> - <stop - style="stop-color:#ffffff;stop-opacity:0;" - offset="1" - id="stop5003" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient4999" - id="linearGradient5862" - gradientUnits="userSpaceOnUse" - x1="627.14612" - y1="621.8194" - x2="919.63519" - y2="331.63492" /> - <linearGradient - inkscape:collect="always" - id="linearGradient4991"> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="0" - id="stop4993" /> - <stop - style="stop-color:#ffffff;stop-opacity:0;" - offset="1" - id="stop4995" /> - </linearGradient> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient4991" - id="radialGradient4997" - cx="736.5" - cy="640.93073" - fx="736.5" - fy="640.93073" - r="91.964203" - gradientTransform="matrix(1,0,0,0.8097086,0,99.14184)" - gradientUnits="userSpaceOnUse" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective5883" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient3859" - id="linearGradient3873" - x1="352.19498" - y1="451.55289" - x2="106.34038" - y2="658.39594" - gradientUnits="userSpaceOnUse" /> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - gridtolerance="10000" - guidetolerance="10" - objecttolerance="10" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="2.8744496" - inkscape:cx="77.145989" - inkscape:cy="46.157701" - inkscape:document-units="px" - inkscape:current-layer="layer1" - showgrid="false" - inkscape:window-width="1920" - inkscape:window-height="1087" - inkscape:window-x="0" - inkscape:window-y="61" /> - <metadata - id="metadata5880"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title>Icône SFL</dc:title> - <dc:date>2009-04-29</dc:date> - <dc:creator> - <cc:Agent> - <dc:title>Jérôme Oufella</dc:title> - </cc:Agent> - </dc:creator> - <dc:rights> - <cc:Agent> - <dc:title>(c) 2009 Savoir-faire Linux inc.</dc:title> - </cc:Agent> - </dc:rights> - <dc:subject> - <rdf:Bag> - <rdf:li>sfl icon</rdf:li> - </rdf:Bag> - </dc:subject> - </cc:Work> - </rdf:RDF> - </metadata> - <g - inkscape:label="Layer 1" - inkscape:groupmode="layer" - id="layer1" - transform="translate(-182.15973,-428.80763)"> - <g - id="g5868" - transform="translate(-234.84028,-6.9404095)"> - <path - transform="matrix(0.9959566,0,0,1.2202117,1.6861043,-136.53125)" - d="M 602,544.5 A 92.5,75.5 0 1 1 417,544.5 A 92.5,75.5 0 1 1 602,544.5 z" - sodipodi:ry="75.5" - sodipodi:rx="92.5" - sodipodi:cy="544.5" - sodipodi:cx="509.5" - id="path4987" - style="fill:#006f82;fill-opacity:1;fill-rule:evenodd" - sodipodi:type="arc" /> - <path - transform="matrix(0.9200853,0,0,1.1406537,-168.51683,-66.406557)" - d="M 827,521 A 90.5,73 0 1 1 646,521 A 90.5,73 0 1 1 827,521 z" - sodipodi:ry="73" - sodipodi:rx="90.5" - sodipodi:cy="521" - sodipodi:cx="736.5" - id="path4989" - style="fill:url(#radialGradient4997);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5862);stroke-width:2.92839932000000003;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:0.83064516" - sodipodi:type="arc" /> - </g> - <path - d="M 270.22391,444.59502 L 258.69788,468.03809 C 257.38814,470.58705 254.96106,470.39374 252.51404,469.02377 L 243.80625,464.49786 L 250.84056,500.08834 C 252.30314,506.58761 247.96387,506.66091 245.77493,503.877 L 230.41805,486.50568 L 228.12461,495.49762 C 227.86256,496.67785 226.64373,497.93335 224.77908,497.67092 L 205.66619,493.80646 L 210.98893,512.73361 C 212.13112,516.9458 212.99584,518.68317 210.02787,519.8494 L 203.29692,523.29927 L 236.54717,550.584 C 237.86251,551.61457 238.55002,553.49774 238.11702,555.22057 L 235.41442,565.11265 C 246.67796,563.56182 256.77634,562.1734 268.03972,560.62412 C 269.04245,560.59408 270.72036,561.45708 270.7339,562.66502 L 269.8477,598.75328 L 275.3353,598.66059 L 273.8636,562.68953 C 273.83635,561.48182 275.32797,560.48791 276.33122,560.48402 C 287.64046,561.65196 297.77986,562.69848 309.08956,563.86812 L 306.05442,554.07301 C 305.5635,552.36568 306.18695,550.46033 307.46656,549.38586 L 339.77636,520.99383 L 332.93273,517.77324 C 329.92708,516.70804 330.73274,514.94239 331.73188,510.69395 L 336.41241,491.59785 L 317.44075,496.10559 C 315.58624,496.43093 314.32569,495.21739 314.02396,494.04672 L 311.42792,485.13719 L 296.6668,503.01734 C 294.57288,505.87347 290.23369,505.94673 291.47593,499.40191 L 297.30411,463.59431 L 288.75423,468.41151 C 286.35484,469.86336 283.93569,470.13869 282.54066,467.63552" - id="maple_leaf" - style="opacity:0.25000000000000000;fill:url(#linearGradient3873);fill-opacity:1" /> - <g - id="g3867" - transform="matrix(0.9325595,0,0,0.9325595,15.86115,36.626535)"> - <path - style="opacity:0.32000002;fill:#000000;fill-opacity:1" - d="M 324.6064,576.10592 C 324.02996,577.62486 318.05867,583.27138 315.27265,584.93202 L 312.1928,586.7678 L 299.5209,570.25386 L 286.84899,553.73994 L 289.03019,551.47895 C 291.16481,549.26622 297.56985,544.96795 299.65197,544.35092 C 300.55595,544.08302 302.37761,546.22382 312.77007,559.7672 C 319.40765,568.41724 324.73401,575.76967 324.6064,576.10592 z M 261.18093,493.71856 C 260.70464,494.9736 253.16932,501.39752 250.71354,502.64209 L 248.48238,503.7728 L 235.99299,487.20322 L 223.50359,470.63363 L 227.80379,467.08656 C 230.16891,465.13567 233.27042,463.05802 234.69603,462.46955 L 237.28805,461.39961 L 249.38455,477.16367 C 257.49505,487.73321 261.38216,493.18832 261.18093,493.71856 z M 309.95137,588.3053 C 309.87124,588.51609 308.475,589.36418 306.84862,590.18996 C 294.06756,596.67941 273.5256,589.04036 254.18672,570.60633 C 247.34174,564.0816 233.22165,546.60297 227.64357,537.74972 C 216.87902,520.66478 211.81677,506.32102 211.96598,493.32766 C 212.0591,485.21872 214.72047,478.3767 219.49284,473.97704 L 221.12923,472.46844 L 233.682,488.58283 L 246.23478,504.69722 L 245.21952,506.45575 C 243.81718,508.8847 244.07084,512.0704 246.05254,516.91749 C 248.53966,523.00079 268.27193,548.70275 273.56577,552.75442 C 277.72586,555.93837 280.28512,556.86788 283.36104,556.31202 L 285.53918,555.9184 L 297.81812,571.92023 C 304.57154,580.72124 310.03151,588.09451 309.95137,588.3053 z" - id="path3760" /> - <path - id="path3218" - d="M 330.6064,570.10592 C 330.02996,571.62486 324.05867,577.27138 321.27265,578.93202 L 318.1928,580.7678 L 305.5209,564.25386 L 292.84899,547.73994 L 295.03019,545.47895 C 297.16481,543.26622 303.56985,538.96795 305.65197,538.35092 C 306.55595,538.08302 308.37761,540.22382 318.77007,553.7672 C 325.40765,562.41724 330.73401,569.76967 330.6064,570.10592 z M 267.18093,487.71856 C 266.70464,488.9736 259.16932,495.39752 256.71354,496.64209 L 254.48238,497.7728 L 241.99299,481.20322 L 229.50359,464.63363 L 233.80379,461.08656 C 236.16891,459.13567 239.27042,457.05802 240.69603,456.46955 L 243.28805,455.39961 L 255.38455,471.16367 C 263.49505,481.73321 267.38216,487.18832 267.18093,487.71856 z M 315.95137,582.3053 C 315.87124,582.51609 314.475,583.36418 312.84862,584.18996 C 300.06756,590.67941 279.5256,583.04036 260.18672,564.60633 C 253.34174,558.0816 239.22165,540.60297 233.64357,531.74972 C 222.87902,514.66478 217.81677,500.32102 217.96598,487.32766 C 218.0591,479.21872 220.72047,472.3767 225.49284,467.97704 L 227.12923,466.46844 L 239.682,482.58283 L 252.23478,498.69722 L 251.21952,500.45575 C 249.81718,502.8847 250.07084,506.0704 252.05254,510.91749 C 254.53966,517.00079 274.27193,542.70275 279.56577,546.75442 C 283.72586,549.93837 286.28512,550.86788 289.36104,550.31202 L 291.53918,549.9184 L 303.81812,565.92023 C 310.57154,574.72124 316.03151,582.09451 315.95137,582.3053 z" - style="fill:#ffffff;fill-opacity:1" /> - </g> - </g> -</svg> diff --git a/sflphone-client-gnome/pixmaps/sflphone2.svg b/sflphone-client-gnome/pixmaps/sflphone2.svg deleted file mode 100644 index 3e06bcdaf85aeba01f32cb5557b75b0a869da133..0000000000000000000000000000000000000000 --- a/sflphone-client-gnome/pixmaps/sflphone2.svg +++ /dev/null @@ -1,232 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="184.25197" - height="184.25197" - id="svg5875" - sodipodi:version="0.32" - inkscape:version="0.46" - version="1.0" - sodipodi:docname="sflphone2.svg" - inkscape:output_extension="org.inkscape.output.svg.inkscape"> - <defs - id="defs5877"> - <linearGradient - inkscape:collect="always" - id="linearGradient3289"> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="0" - id="stop3291" /> - <stop - style="stop-color:#ffffff;stop-opacity:0;" - offset="1" - id="stop3293" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient3859"> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="0" - id="stop3861" /> - <stop - style="stop-color:#ffffff;stop-opacity:0;" - offset="1" - id="stop3863" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient5850"> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="0" - id="stop5852" /> - <stop - style="stop-color:#ffffff;stop-opacity:0;" - offset="1" - id="stop5854" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient5850" - id="linearGradient5856" - x1="476.3125" - y1="439.0293" - x2="477.3125" - y2="514.42188" - gradientUnits="userSpaceOnUse" /> - <linearGradient - inkscape:collect="always" - id="linearGradient4999"> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="0" - id="stop5001" /> - <stop - style="stop-color:#ffffff;stop-opacity:0;" - offset="1" - id="stop5003" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient4999" - id="linearGradient5862" - gradientUnits="userSpaceOnUse" - x1="627.14612" - y1="621.8194" - x2="919.63519" - y2="331.63492" /> - <linearGradient - inkscape:collect="always" - id="linearGradient4991"> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="0" - id="stop4993" /> - <stop - style="stop-color:#ffffff;stop-opacity:0;" - offset="1" - id="stop4995" /> - </linearGradient> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient4991" - id="radialGradient4997" - cx="736.5" - cy="640.93073" - fx="736.5" - fy="640.93073" - r="91.964203" - gradientTransform="matrix(1,0,0,0.8097086,0,99.14184)" - gradientUnits="userSpaceOnUse" /> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective5883" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient3859" - id="linearGradient3873" - x1="352.19498" - y1="451.55289" - x2="106.34038" - y2="658.39594" - gradientUnits="userSpaceOnUse" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient3289" - id="linearGradient3295" - x1="360.56229" - y1="442.35855" - x2="127.47931" - y2="627.84052" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(1.1006682,0,0,1.1006682,-32.206826,-52.058551)" /> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - gridtolerance="10000" - guidetolerance="10" - objecttolerance="10" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="1.0162714" - inkscape:cx="-150.04476" - inkscape:cy="-40.803184" - inkscape:document-units="px" - inkscape:current-layer="layer1" - showgrid="false" - inkscape:window-width="1920" - inkscape:window-height="1087" - inkscape:window-x="0" - inkscape:window-y="61" /> - <metadata - id="metadata5880"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title>Icône SFL</dc:title> - <dc:date>2009-04-29</dc:date> - <dc:creator> - <cc:Agent> - <dc:title>Jérôme Oufella</dc:title> - </cc:Agent> - </dc:creator> - <dc:rights> - <cc:Agent> - <dc:title>(c) 2009 Savoir-faire Linux inc.</dc:title> - </cc:Agent> - </dc:rights> - <dc:subject> - <rdf:Bag> - <rdf:li>sfl icon</rdf:li> - </rdf:Bag> - </dc:subject> - </cc:Work> - </rdf:RDF> - </metadata> - <g - inkscape:label="Layer 1" - inkscape:groupmode="layer" - id="layer1" - transform="translate(-182.15973,-428.80763)"> - <g - id="g5868" - transform="translate(-234.84028,-6.9404095)"> - <path - transform="matrix(0.9959566,0,0,1.2202117,1.6861043,-136.53125)" - d="M 602,544.5 A 92.5,75.5 0 1 1 417,544.5 A 92.5,75.5 0 1 1 602,544.5 z" - sodipodi:ry="75.5" - sodipodi:rx="92.5" - sodipodi:cy="544.5" - sodipodi:cx="509.5" - id="path4987" - style="fill:#006f82;fill-opacity:1;fill-rule:evenodd" - sodipodi:type="arc" /> - <path - transform="matrix(0.9200853,0,0,1.1406537,-168.51683,-66.406557)" - d="M 827,521 A 90.5,73 0 1 1 646,521 A 90.5,73 0 1 1 827,521 z" - sodipodi:ry="73" - sodipodi:rx="90.5" - sodipodi:cy="521" - sodipodi:cx="736.5" - id="path4989" - style="fill:url(#radialGradient4997);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5862);stroke-width:2.92839932000000003;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:0.83064516" - sodipodi:type="arc" /> - </g> - <g - id="g3867" - transform="matrix(0.9325595,0,0,0.9325595,15.86115,36.626535)"> - <path - style="opacity:0.32000002;fill:#000000;fill-opacity:1" - d="M 324.6064,576.10592 C 324.02996,577.62486 318.05867,583.27138 315.27265,584.93202 L 312.1928,586.7678 L 299.5209,570.25386 L 286.84899,553.73994 L 289.03019,551.47895 C 291.16481,549.26622 297.56985,544.96795 299.65197,544.35092 C 300.55595,544.08302 302.37761,546.22382 312.77007,559.7672 C 319.40765,568.41724 324.73401,575.76967 324.6064,576.10592 z M 261.18093,493.71856 C 260.70464,494.9736 253.16932,501.39752 250.71354,502.64209 L 248.48238,503.7728 L 235.99299,487.20322 L 223.50359,470.63363 L 227.80379,467.08656 C 230.16891,465.13567 233.27042,463.05802 234.69603,462.46955 L 237.28805,461.39961 L 249.38455,477.16367 C 257.49505,487.73321 261.38216,493.18832 261.18093,493.71856 z M 309.95137,588.3053 C 309.87124,588.51609 308.475,589.36418 306.84862,590.18996 C 294.06756,596.67941 273.5256,589.04036 254.18672,570.60633 C 247.34174,564.0816 233.22165,546.60297 227.64357,537.74972 C 216.87902,520.66478 211.81677,506.32102 211.96598,493.32766 C 212.0591,485.21872 214.72047,478.3767 219.49284,473.97704 L 221.12923,472.46844 L 233.682,488.58283 L 246.23478,504.69722 L 245.21952,506.45575 C 243.81718,508.8847 244.07084,512.0704 246.05254,516.91749 C 248.53966,523.00079 268.27193,548.70275 273.56577,552.75442 C 277.72586,555.93837 280.28512,556.86788 283.36104,556.31202 L 285.53918,555.9184 L 297.81812,571.92023 C 304.57154,580.72124 310.03151,588.09451 309.95137,588.3053 z" - id="path3760" /> - <path - id="path3218" - d="M 330.6064,570.10592 C 330.02996,571.62486 324.05867,577.27138 321.27265,578.93202 L 318.1928,580.7678 L 305.5209,564.25386 L 292.84899,547.73994 L 295.03019,545.47895 C 297.16481,543.26622 303.56985,538.96795 305.65197,538.35092 C 306.55595,538.08302 308.37761,540.22382 318.77007,553.7672 C 325.40765,562.41724 330.73401,569.76967 330.6064,570.10592 z M 267.18093,487.71856 C 266.70464,488.9736 259.16932,495.39752 256.71354,496.64209 L 254.48238,497.7728 L 241.99299,481.20322 L 229.50359,464.63363 L 233.80379,461.08656 C 236.16891,459.13567 239.27042,457.05802 240.69603,456.46955 L 243.28805,455.39961 L 255.38455,471.16367 C 263.49505,481.73321 267.38216,487.18832 267.18093,487.71856 z M 315.95137,582.3053 C 315.87124,582.51609 314.475,583.36418 312.84862,584.18996 C 300.06756,590.67941 279.5256,583.04036 260.18672,564.60633 C 253.34174,558.0816 239.22165,540.60297 233.64357,531.74972 C 222.87902,514.66478 217.81677,500.32102 217.96598,487.32766 C 218.0591,479.21872 220.72047,472.3767 225.49284,467.97704 L 227.12923,466.46844 L 239.682,482.58283 L 252.23478,498.69722 L 251.21952,500.45575 C 249.81718,502.8847 250.07084,506.0704 252.05254,510.91749 C 254.53966,517.00079 274.27193,542.70275 279.56577,546.75442 C 283.72586,549.93837 286.28512,550.86788 289.36104,550.31202 L 291.53918,549.9184 L 303.81812,565.92023 C 310.57154,574.72124 316.03151,582.09451 315.95137,582.3053 z" - style="fill:#ffffff;fill-opacity:1" /> - </g> - <path - id="Upper_right_fleur-de-lis_1_" - style="opacity:0.25;fill:url(#linearGradient3295);fill-opacity:1;fill-rule:evenodd" - d="M 313.82159,550.0952 C 316.41492,546.2383 316.19867,537.79506 311.01041,534.81444 C 307.04215,532.83112 302.56394,533.60734 300.47088,535.31471 C 297.10134,537.35289 293.85443,543.8709 293.85443,550.47122 L 305.49132,550.4567 L 305.49132,563.44914 L 281.34128,563.43623 C 281.65273,570.11885 285.29984,575.47172 292.08251,578.45235 C 291.20624,581.26838 287.11534,587.00855 281.50105,586.61962 C 280.39399,592.69385 279.33536,596.10375 274.28911,601.62284 C 269.23962,596.10536 268.18422,592.69385 267.07718,586.61962 C 261.45803,587.00855 257.36552,581.26838 256.49248,578.45235 C 263.27513,575.47172 266.92225,570.11885 267.23371,563.43623 L 243.0869,563.44914 L 243.08367,550.4567 L 254.72055,550.47122 C 254.72055,543.8709 251.47365,537.35289 248.10086,535.31471 C 246.00781,533.60895 241.5296,532.83274 237.56781,534.81444 C 232.37953,537.79506 232.15845,546.23992 234.75017,550.0952 C 210.24994,545.546 212.68026,521.88493 221.02667,513.29484 C 227.77223,506.35563 235.12457,505.27118 240.79535,507.45945 C 253.6829,512.07966 262.35045,527.47503 262.77326,550.47122 L 269.51235,550.47122 C 269.51235,529.56645 265.87492,522.9016 256.39725,496.64559 C 251.62211,484.23732 254.48979,468.89684 263.02178,454.77153 C 266.07987,449.70914 269.89643,445.13894 274.28588,440.24438 C 278.67048,445.13894 282.48705,449.70914 285.54836,454.77153 C 294.07714,468.89684 296.94803,484.23732 292.17612,496.64559 C 282.69522,522.9016 279.05456,529.56485 279.05456,550.47122 L 285.79366,550.47122 C 286.21969,527.47503 294.88724,512.07966 307.77157,507.45945 C 313.44236,505.2728 320.79792,506.35563 327.54347,513.29484 C 335.89148,521.88493 338.32183,545.546 313.82159,550.0952 z" /> - </g> -</svg> diff --git a/sflphone-client-gnome/pixmaps/sflphone_notif.svg b/sflphone-client-gnome/pixmaps/sflphone_notif.svg new file mode 100644 index 0000000000000000000000000000000000000000..a8cf1fa4a3db700d247d508ad2b32c5c483eaa63 --- /dev/null +++ b/sflphone-client-gnome/pixmaps/sflphone_notif.svg @@ -0,0 +1,373 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="120" + height="120" + id="svg5875" + sodipodi:version="0.32" + inkscape:version="0.46" + version="1.0" + sodipodi:docname="sflphone_tray4.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs5877"> + <linearGradient + inkscape:collect="always" + id="linearGradient3803"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop3805" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3807" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient4684"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop4686" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop4688" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient4669"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop4671" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop4673" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3859"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop3861" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3863" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient5850"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop5852" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop5854" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5850" + id="linearGradient5856" + x1="476.3125" + y1="439.0293" + x2="477.3125" + y2="514.42188" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient4999"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop5001" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop5003" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4999" + id="linearGradient5862" + gradientUnits="userSpaceOnUse" + x1="698.38525" + y1="245.5472" + x2="702.81964" + y2="977.78302" /> + <linearGradient + inkscape:collect="always" + id="linearGradient4991"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop4993" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop4995" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4991" + id="radialGradient4997" + cx="736.5" + cy="640.93073" + fx="736.5" + fy="640.93073" + r="91.964203" + gradientTransform="matrix(1,0,0,0.8097086,0,99.14184)" + gradientUnits="userSpaceOnUse" /> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective5883" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3859" + id="linearGradient3873" + x1="352.19498" + y1="451.55289" + x2="106.34038" + y2="658.39594" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-3.8268196,-1.7394634)" /> + <inkscape:perspective + id="perspective2422" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2437" + inkscape:persp3d-origin="168.5 : 109.33333 : 1" + inkscape:vp_z="337 : 164 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 164 : 1" + sodipodi:type="inkscape:persp3d" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4669" + id="linearGradient4675" + x1="-20.657925" + y1="-244.41351" + x2="184.57913" + y2="789.61469" + gradientUnits="userSpaceOnUse" + spreadMethod="pad" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4684" + id="linearGradient4690" + x1="52.987782" + y1="-84.148399" + x2="127.02813" + y2="99.500687" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4669" + id="linearGradient5149" + gradientUnits="userSpaceOnUse" + spreadMethod="pad" + x1="-20.657925" + y1="-244.41351" + x2="184.57913" + y2="789.61469" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4991" + id="radialGradient5297" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,0.8097086,0,99.14184)" + cx="736.5" + cy="640.93073" + fx="736.5" + fy="640.93073" + r="91.964203" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4999" + id="linearGradient5299" + gradientUnits="userSpaceOnUse" + x1="698.38525" + y1="245.5472" + x2="702.81964" + y2="977.78302" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4684" + id="linearGradient5301" + gradientUnits="userSpaceOnUse" + x1="52.987782" + y1="-84.148399" + x2="127.02813" + y2="99.500687" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4684" + id="linearGradient5308" + gradientUnits="userSpaceOnUse" + x1="52.987782" + y1="-84.148399" + x2="127.02813" + y2="99.500687" + gradientTransform="matrix(0.6453907,0,0,0.6453907,0.8651337,0.4352828)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3803" + id="linearGradient3809" + x1="12.663443" + y1="8.5301828" + x2="41.858654" + y2="57.533279" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0054518,0,0,1.0054518,-4.7165106e-3,-0.4345682)" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + gridtolerance="10000" + guidetolerance="10" + objecttolerance="10" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="4.6527672" + inkscape:cx="32.869103" + inkscape:cy="59.641316" + inkscape:document-units="px" + inkscape:current-layer="layer2" + showgrid="false" + inkscape:window-width="1918" + inkscape:window-height="1068" + inkscape:window-x="0" + inkscape:window-y="75" + showguides="true" + inkscape:guide-bbox="true" /> + <metadata + id="metadata5880"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title>Icône SFL</dc:title> + <dc:date>2009-04-29</dc:date> + <dc:creator> + <cc:Agent> + <dc:title>Jérôme Oufella</dc:title> + </cc:Agent> + </dc:creator> + <dc:rights> + <cc:Agent> + <dc:title>(c) 2009 Savoir-faire Linux inc.</dc:title> + </cc:Agent> + </dc:rights> + <dc:subject> + <rdf:Bag> + <rdf:li>sfl icon</rdf:li> + </rdf:Bag> + </dc:subject> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Circle" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-182.15973,-428.80763)" + style="display:inline"> + <g + style="display:inline" + id="g5868" + transform="matrix(0.6453907,0,0,0.6453907,-86.103074,148.01517)"> + <path + transform="matrix(0.9959566,0,0,1.2202117,1.6861043,-136.53125)" + d="M 602,544.5 A 92.5,75.5 0 1 1 417,544.5 A 92.5,75.5 0 1 1 602,544.5 z" + sodipodi:ry="75.5" + sodipodi:rx="92.5" + sodipodi:cy="544.5" + sodipodi:cx="509.5" + id="path4987" + style="fill:#00252b;fill-opacity:1;fill-rule:evenodd" + sodipodi:type="arc" /> + <path + transform="matrix(0.9200853,0,0,1.1406537,-168.51683,-66.406557)" + d="M 827,521 A 90.5,73 0 1 1 646,521 A 90.5,73 0 1 1 827,521 z" + sodipodi:ry="73" + sodipodi:rx="90.5" + sodipodi:cy="521" + sodipodi:cx="736.5" + id="path4989" + style="opacity:0.83064515;fill:url(#radialGradient5297);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5299);stroke-width:2.92839932;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + sodipodi:type="arc" /> + </g> + </g> + <g + inkscape:groupmode="layer" + id="layer3" + inkscape:label="Bg logo" + style="display:inline"> + <path + style="opacity:1;fill:#006f82;fill-opacity:0;fill-rule:evenodd;stroke:#00b7df;stroke-width:1.04566979000000004;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.94117647;display:inline" + d="M 10.55114,62.033695 L 10.545872,59.631821 L 11.329656,63.53366 L 11.321088,59.630621 L 12.621458,63.431585 L 12.611584,58.928074 L 13.657722,64.630914 L 13.897019,55.923735 L 14.696183,66.831029 L 15.959008,53.518653 L 16.252311,69.430662 L 17.258279,56.819227 L 18.052818,65.624884 L 18.551844,57.51777 L 19.347918,67.023975 L 19.833546,52.812112 L 21.424823,71.42421 L 20.85641,47.906685 L 23.760575,76.024188 L 22.924102,48.103639 L 25.312097,76.522171 L 24.213925,47.100857 L 25.814204,69.816155 L 26.299177,55.304046 L 27.10579,69.613998 L 28.100546,51.898595 L 28.133486,66.910282 L 29.383802,47.893475 L 29.17479,70.411424 L 30.42269,50.293743 L 30.995926,76.012977 L 32.479618,45.586876 L 32.810259,78.51213 L 34.022583,42.181821 L 34.623699,80.610954 L 35.567529,39.677469 L 36.17744,82.1097 L 36.856708,38.374457 L 38.250165,84.608465 L 38.159277,43.176196 L 39.275226,80.703832 L 39.72003,47.877458 L 40.557601,76.298395 L 41.022589,52.6792 L 42.361163,73.89372 L 42.575221,53.677574 L 43.394126,73.59189 L 44.128072,54.776031 L 45.197477,71.087148 L 44.64642,55.475777 L 46.746157,70.284115 L 46.201462,57.575013 L 47.766387,64.177753 L 48.157374,33.559644 L 49.574786,63.974798 L 49.737044,29.057192 L 50.608848,64.173352 L 52.072146,33.362224 L 52.237957,82.20545 L 53.618404,31.455993 L 54.269604,83.80121 L 54.704307,28.546169 L 56.569731,89.992521 L 56.233651,27.84325 L 58.106058,92.475088 L 58.237615,25.734393 L 59.462018,94.871346 L 59.308802,25.029251 L 60.997751,97.080654 L 60.859237,25.026847 L 63.348005,99.381156 L 63.493128,47.740542 L 64.432585,95.86912 L 64.276032,51.242071 L 66.685102,98.180342 L 65.570911,52.541084 L 66.563781,98.275324 L 64.993727,25.020443 L 69.064999,96.16276 L 66.029984,26.219775 L 70.373503,94.756118 L 68.436272,27.318084 L 72.677618,93.850086 L 72.234352,27.4111 C 72.234352,27.4111 73.940422,98.363981 74.456142,97.862784 C 74.971847,97.361592 75.595153,28.106441 75.595153,28.106441 L 75.739811,94.046666 L 76.890923,29.805765 L 77.049624,93.24225 L 78.18426,30.404231 L 78.338812,91.945712 L 80.000344,33.704002 L 80.38199,89.886658 L 82.071758,35.602278 L 82.1985,84.464362 L 83.409266,38.505999 L 84.494194,70.81025 L 85.482229,41.108345 L 86.300623,69.703651 L 88.312822,44.609637 L 89.401506,78.617548 L 89.890557,48.126952 L 91.245045,76.60551 L 91.663323,49.515327 L 93.046215,73.100561 L 93.514555,51.012458 L 95.564594,69.900023 L 95.350428,54.413452 L 97.176303,71.094351 L 97.42119,56.012671 L 100.17281,68.095581 L 100.26537,56.803022 L 102.33474,68.598489 L 102.41415,58.300276 L 104.15368,64.27997 L 104.55185,54.777789 L 105.28904,66.085499 L 105.9731,60.189794 C 105.9731,60.189794 107.07326,63.772713 107.07216,63.272322 C 107.07105,62.771937 108.5787,61.082943 108.31828,60.182636 C 108.05791,59.282342 109.41561,62.475103 109.41561,62.475103" + id="path4922" + sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccscccccccccccccccccccccccccccccccccccc" /> + </g> + <g + inkscape:groupmode="layer" + id="layer2" + inkscape:label="Handset" + style="display:inline"> + <path + style="opacity:0.07000002;fill:url(#linearGradient5308);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:12.29699993;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" + d="M 59.151985,7.5345809 C 30.967536,8.249433 8.3274641,31.354675 8.3274641,59.710388 C 8.3274641,68.222065 10.375495,76.246983 13.994802,83.347823 C 13.107834,79.536662 12.643515,75.568677 12.643515,71.488769 C 12.643515,42.682964 36.013519,19.292793 64.819322,19.292793 C 85.110516,19.292792 102.69706,30.904841 111.32779,47.831165 C 105.9454,24.743656 85.222311,7.5345809 60.503272,7.5345809 C 60.05318,7.5345809 59.599356,7.5232342 59.151985,7.5345809 z" + id="path4679" /> + <path + id="path3760" + d="M 88.906874,94.063359 C 88.559935,94.977556 84.966023,98.376 83.289215,99.375481 L 81.43556,100.48037 L 73.808785,90.541207 L 66.182003,80.602053 L 67.494791,79.241241 C 68.779544,77.909476 72.634516,75.322497 73.887671,74.951128 C 74.431745,74.789888 75.528139,76.078361 81.782999,84.229651 C 85.777928,89.435809 88.983679,93.860981 88.906874,94.063359 z M 50.73329,44.477271 C 50.446627,45.232636 45.91138,49.09897 44.433331,49.848034 L 43.090474,50.528569 L 35.573545,40.555914 L 28.056608,30.583254 L 30.64475,28.448397 C 32.068233,27.274223 33.934924,26.023758 34.792949,25.669578 L 36.352996,25.025619 L 43.633459,34.513458 C 48.514886,40.874896 50.854403,44.158138 50.73329,44.477271 z M 80.086522,101.40574 C 80.038294,101.53261 79.197946,102.04305 78.219084,102.54005 C 70.526609,106.44583 58.163118,101.84815 46.523718,90.753346 C 42.403963,86.826338 33.905571,76.306559 30.548319,70.978095 C 24.069511,60.695264 21.022718,52.062253 21.112522,44.242002 C 21.168568,39.361513 22.770354,35.243539 25.642678,32.595536 L 26.627564,31.687563 L 34.18264,41.386253 L 41.737722,51.084944 L 41.126672,52.143343 C 40.282652,53.605243 40.435321,55.522605 41.628037,58.4399 C 43.124949,62.101227 55.001116,77.570343 58.187294,80.008903 C 60.691108,81.925211 62.231437,82.484651 64.082727,82.150099 L 65.393673,81.913192 L 72.783941,91.544137 C 76.848589,96.841159 80.134755,101.27887 80.086522,101.40574 z" + style="opacity:0.32000002;fill:#000000;fill-opacity:1" /> + <path + style="fill:#c82709;fill-opacity:1" + d="M 92.518066,90.452167 C 92.171127,91.366364 88.577215,94.764808 86.900407,95.764289 L 85.046752,96.869181 L 77.419976,86.930015 L 69.793194,76.990861 L 71.105983,75.63005 C 72.390736,74.298285 76.245707,71.711305 77.498862,71.339937 C 78.042936,71.178697 79.13933,72.46717 85.394191,80.61846 C 89.389119,85.824618 92.59487,90.24979 92.518066,90.452167 z M 54.344481,40.86608 C 54.057819,41.621444 49.522571,45.487778 48.044523,46.236842 L 46.701666,46.917377 L 39.184735,36.944723 L 31.6678,26.972063 L 34.255941,24.837205 C 35.679425,23.663032 37.546115,22.412566 38.404141,22.058387 L 39.964188,21.414427 L 47.24465,30.902267 C 52.126078,37.263706 54.465594,40.546946 54.344481,40.86608 z M 83.697713,97.79455 C 83.649486,97.921417 82.809137,98.431852 81.830276,98.928861 C 74.137801,102.83464 61.774308,98.236957 50.134909,87.142154 C 46.015154,83.215146 37.516762,72.695367 34.159511,67.366904 C 27.680702,57.084073 24.63391,48.451062 24.723714,40.63081 C 24.77976,35.750321 26.381546,31.632348 29.253869,28.984346 L 30.238755,28.076371 L 37.793832,37.775063 L 45.348913,47.473754 L 44.737863,48.532152 C 43.893844,49.994052 44.046513,51.911414 45.239229,54.828709 C 46.73614,58.490035 58.612307,73.959152 61.798485,76.397711 C 64.3023,78.31402 65.842629,78.87346 67.693918,78.538907 L 69.004865,78.302 L 76.395132,87.932945 C 80.459781,93.229968 83.745947,97.667682 83.697713,97.79455 z" + id="path3218" /> + <g + transform="matrix(0.6018652,0,0,0.6018652,-106.46243,-252.67476)" + id="g3787" + style="fill:#ffffff;fill-opacity:0"> + <path + id="path3789" + d="M 324.6064,576.10592 C 324.02996,577.62486 318.05867,583.27138 315.27265,584.93202 L 312.1928,586.7678 L 299.5209,570.25386 L 286.84899,553.73994 L 289.03019,551.47895 C 291.16481,549.26622 297.56985,544.96795 299.65197,544.35092 C 300.55595,544.08302 302.37761,546.22382 312.77007,559.7672 C 319.40765,568.41724 324.73401,575.76967 324.6064,576.10592 z M 261.18093,493.71856 C 260.70464,494.9736 253.16932,501.39752 250.71354,502.64209 L 248.48238,503.7728 L 235.99299,487.20322 L 223.50359,470.63363 L 227.80379,467.08656 C 230.16891,465.13567 233.27042,463.05802 234.69603,462.46955 L 237.28805,461.39961 L 249.38455,477.16367 C 257.49505,487.73321 261.38216,493.18832 261.18093,493.71856 z M 309.95137,588.3053 C 309.87124,588.51609 308.475,589.36418 306.84862,590.18996 C 294.06756,596.67941 273.5256,589.04036 254.18672,570.60633 C 247.34174,564.0816 233.22165,546.60297 227.64357,537.74972 C 216.87902,520.66478 211.81677,506.32102 211.96598,493.32766 C 212.0591,485.21872 214.72047,478.3767 219.49284,473.97704 L 221.12923,472.46844 L 233.682,488.58283 L 246.23478,504.69722 L 245.21952,506.45575 C 243.81718,508.8847 244.07084,512.0704 246.05254,516.91749 C 248.53966,523.00079 268.27193,548.70275 273.56577,552.75442 C 277.72586,555.93837 280.28512,556.86788 283.36104,556.31202 L 285.53918,555.9184 L 297.81812,571.92023 C 304.57154,580.72124 310.03151,588.09451 309.95137,588.3053 z" + style="opacity:0.32000002;fill:#ffffff;fill-opacity:0" /> + <path + style="fill:#ffffff;fill-opacity:0" + d="M 330.6064,570.10592 C 330.02996,571.62486 324.05867,577.27138 321.27265,578.93202 L 318.1928,580.7678 L 305.5209,564.25386 L 292.84899,547.73994 L 295.03019,545.47895 C 297.16481,543.26622 303.56985,538.96795 305.65197,538.35092 C 306.55595,538.08302 308.37761,540.22382 318.77007,553.7672 C 325.40765,562.41724 330.73401,569.76967 330.6064,570.10592 z M 267.18093,487.71856 C 266.70464,488.9736 259.16932,495.39752 256.71354,496.64209 L 254.48238,497.7728 L 241.99299,481.20322 L 229.50359,464.63363 L 233.80379,461.08656 C 236.16891,459.13567 239.27042,457.05802 240.69603,456.46955 L 243.28805,455.39961 L 255.38455,471.16367 C 263.49505,481.73321 267.38216,487.18832 267.18093,487.71856 z M 315.95137,582.3053 C 315.87124,582.51609 314.475,583.36418 312.84862,584.18996 C 300.06756,590.67941 279.5256,583.04036 260.18672,564.60633 C 253.34174,558.0816 239.22165,540.60297 233.64357,531.74972 C 222.87902,514.66478 217.81677,500.32102 217.96598,487.32766 C 218.0591,479.21872 220.72047,472.3767 225.49284,467.97704 L 227.12923,466.46844 L 239.682,482.58283 L 252.23478,498.69722 L 251.21952,500.45575 C 249.81718,502.8847 250.07084,506.0704 252.05254,510.91749 C 254.53966,517.00079 274.27193,542.70275 279.56577,546.75442 C 283.72586,549.93837 286.28512,550.86788 289.36104,550.31202 L 291.53918,549.9184 L 303.81812,565.92023 C 310.57154,574.72124 316.03151,582.09451 315.95137,582.3053 z" + id="path3791" /> + </g> + <path + style="fill:url(#linearGradient3809);fill-opacity:1;stroke:none" + d="M 39.961991,21.402587 L 38.390972,22.062415 C 37.532947,22.416594 35.666967,23.653234 34.243484,24.827407 L 31.667014,26.963992 L 39.176482,36.955669 L 43.166868,42.23429 C 44.833493,39.007648 46.844812,36.037923 49.105318,33.342326 C 48.501731,32.545758 47.962788,31.818462 47.251516,30.891538 L 39.961991,21.402587 z M 30.253097,28.063705 L 29.247645,28.974895 C 26.375322,31.622897 24.779157,35.751365 24.723113,40.631852 C 24.633309,48.452104 27.670415,57.087755 34.149223,67.370584 C 35.036506,68.778836 36.301396,70.544757 37.731145,72.460684 C 37.518951,70.51226 37.385521,68.535071 37.385521,66.522234 C 37.385521,58.29228 39.192461,50.526372 42.412779,43.742468 L 37.793985,37.772598 L 30.253097,28.063705 z" + id="path3798" /> + </g> +</svg> diff --git a/sflphone-client-gnome/pixmaps/sflphone_small.svg b/sflphone-client-gnome/pixmaps/sflphone_small.svg new file mode 100644 index 0000000000000000000000000000000000000000..eb4154c3de093bd2da6f8b413370e085fb4c76bb --- /dev/null +++ b/sflphone-client-gnome/pixmaps/sflphone_small.svg @@ -0,0 +1,373 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="60" + height="60" + id="svg5875" + sodipodi:version="0.32" + inkscape:version="0.46" + version="1.0" + sodipodi:docname="sflphone_small.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs5877"> + <linearGradient + inkscape:collect="always" + id="linearGradient3803"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop3805" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3807" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient4684"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop4686" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop4688" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient4669"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop4671" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop4673" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3859"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop3861" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3863" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient5850"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop5852" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop5854" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5850" + id="linearGradient5856" + x1="476.3125" + y1="439.0293" + x2="477.3125" + y2="514.42188" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient4999"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop5001" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop5003" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4999" + id="linearGradient5862" + gradientUnits="userSpaceOnUse" + x1="698.38525" + y1="245.5472" + x2="702.81964" + y2="977.78302" /> + <linearGradient + inkscape:collect="always" + id="linearGradient4991"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop4993" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop4995" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4991" + id="radialGradient4997" + cx="736.5" + cy="640.93073" + fx="736.5" + fy="640.93073" + r="91.964203" + gradientTransform="matrix(1,0,0,0.8097086,0,99.14184)" + gradientUnits="userSpaceOnUse" /> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective5883" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3859" + id="linearGradient3873" + x1="352.19498" + y1="451.55289" + x2="106.34038" + y2="658.39594" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-3.8268196,-1.7394634)" /> + <inkscape:perspective + id="perspective2422" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2437" + inkscape:persp3d-origin="168.5 : 109.33333 : 1" + inkscape:vp_z="337 : 164 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 164 : 1" + sodipodi:type="inkscape:persp3d" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4669" + id="linearGradient4675" + x1="-20.657925" + y1="-244.41351" + x2="184.57913" + y2="789.61469" + gradientUnits="userSpaceOnUse" + spreadMethod="pad" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4684" + id="linearGradient4690" + x1="52.987782" + y1="-84.148399" + x2="127.02813" + y2="99.500687" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4669" + id="linearGradient5149" + gradientUnits="userSpaceOnUse" + spreadMethod="pad" + x1="-20.657925" + y1="-244.41351" + x2="184.57913" + y2="789.61469" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4991" + id="radialGradient5297" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,0.8097086,0,99.14184)" + cx="736.5" + cy="640.93073" + fx="736.5" + fy="640.93073" + r="91.964203" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4999" + id="linearGradient5299" + gradientUnits="userSpaceOnUse" + x1="698.38525" + y1="245.5472" + x2="702.81964" + y2="977.78302" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4684" + id="linearGradient5301" + gradientUnits="userSpaceOnUse" + x1="52.987782" + y1="-84.148399" + x2="127.02813" + y2="99.500687" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4684" + id="linearGradient5308" + gradientUnits="userSpaceOnUse" + x1="52.987782" + y1="-84.148399" + x2="127.02813" + y2="99.500687" + gradientTransform="matrix(0.325641,0,0,0.325641,0.2327614,0.2327611)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3803" + id="linearGradient3809" + x1="12.663443" + y1="8.5301828" + x2="41.858654" + y2="57.533279" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.507315,0,0,0.507315,-0.2061336,-0.2061349)" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + gridtolerance="10000" + guidetolerance="10" + objecttolerance="10" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="4.6527672" + inkscape:cx="28.248197" + inkscape:cy="59.641316" + inkscape:document-units="px" + inkscape:current-layer="layer2" + showgrid="false" + inkscape:window-width="1680" + inkscape:window-height="1050" + inkscape:window-x="0" + inkscape:window-y="0" + showguides="true" + inkscape:guide-bbox="true" /> + <metadata + id="metadata5880"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title>Icône SFL</dc:title> + <dc:date>2009-04-29</dc:date> + <dc:creator> + <cc:Agent> + <dc:title>Jérôme Oufella</dc:title> + </cc:Agent> + </dc:creator> + <dc:rights> + <cc:Agent> + <dc:title>(c) 2009 Savoir-faire Linux inc.</dc:title> + </cc:Agent> + </dc:rights> + <dc:subject> + <rdf:Bag> + <rdf:li>sfl icon</rdf:li> + </rdf:Bag> + </dc:subject> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Circle" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-182.15973,-428.80763)" + style="display:inline"> + <g + style="display:inline" + id="g5868" + transform="matrix(0.325641,0,0,0.325641,46.600177,287.14294)"> + <path + transform="matrix(0.9959566,0,0,1.2202117,1.6861043,-136.53125)" + d="M 602,544.5 A 92.5,75.5 0 1 1 417,544.5 A 92.5,75.5 0 1 1 602,544.5 z" + sodipodi:ry="75.5" + sodipodi:rx="92.5" + sodipodi:cy="544.5" + sodipodi:cx="509.5" + id="path4987" + style="fill:#00252b;fill-opacity:1;fill-rule:evenodd" + sodipodi:type="arc" /> + <path + transform="matrix(0.9200853,0,0,1.1406537,-168.51683,-66.406557)" + d="M 827,521 A 90.5,73 0 1 1 646,521 A 90.5,73 0 1 1 827,521 z" + sodipodi:ry="73" + sodipodi:rx="90.5" + sodipodi:cy="521" + sodipodi:cx="736.5" + id="path4989" + style="opacity:0.83064515;fill:url(#radialGradient5297);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5299);stroke-width:2.92839932;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + sodipodi:type="arc" /> + </g> + </g> + <g + inkscape:groupmode="layer" + id="layer3" + inkscape:label="Bg logo" + style="display:inline"> + <path + style="opacity:1;fill:#006f82;fill-opacity:0;fill-rule:evenodd;stroke:#006f82;stroke-width:0.5276075;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" + d="M 5.1199734,31.313113 L 5.1173154,30.101213 L 5.5127844,32.069942 L 5.5084614,30.100608 L 6.1645814,32.018438 L 6.1595994,29.746128 L 6.6874434,32.623577 L 6.8081844,28.230246 L 7.2114134,33.733676 L 7.8485894,27.016728 L 7.9965804,35.045358 L 8.5041554,28.682079 L 8.9050514,33.125098 L 9.1568414,29.034539 L 9.5585124,33.83103 L 9.8035424,26.660233 L 10.606444,36.051231 L 10.319643,24.18513 L 11.78498,38.372215 L 11.362926,24.284506 L 12.567823,38.623479 L 12.013725,23.778538 L 12.821168,35.239864 L 13.065868,27.917573 L 13.472856,35.137862 L 13.974774,26.199305 L 13.991395,33.773664 L 14.622259,24.178465 L 14.516799,35.540215 L 15.146445,25.389554 L 15.435679,38.366558 L 16.184297,23.014637 L 16.351127,39.627541 L 16.962822,21.296569 L 17.266124,40.686532 L 17.742346,20.032962 L 18.050086,41.442746 L 18.39282,19.375509 L 19.095908,42.703533 L 19.05005,21.798295 L 19.613117,40.733395 L 19.83755,24.170383 L 20.260158,38.51057 L 20.494774,26.59317 L 21.170171,37.297257 L 21.278177,27.096914 L 21.691367,37.144964 L 22.06169,27.651156 L 22.601273,35.881161 L 22.323229,28.004223 L 23.382682,35.475979 L 23.107848,29.063422 L 23.897453,32.394928 L 24.094731,16.946127 L 24.809906,32.292524 L 24.891776,14.674351 L 25.331657,32.392707 L 26.069985,16.846516 L 26.153647,41.491058 L 26.850171,15.8847 L 27.178743,42.296221 L 27.398079,14.416507 L 28.339305,45.420135 L 28.169731,14.061839 L 29.114481,46.67275 L 29.180859,12.997786 L 29.798649,47.881815 L 29.721342,12.641996 L 30.573525,48.996553 L 30.503636,12.640783 L 31.759379,50.157304 L 31.832603,24.1013 L 32.306619,48.385256 L 32.227628,25.868046 L 33.443159,49.551416 L 32.880978,26.523482 L 33.381944,49.599341 L 32.589752,12.637552 L 34.643969,48.533417 L 33.11261,13.242692 L 35.304194,47.823676 L 34.326736,13.796859 L 36.466768,47.366524 L 36.243111,13.843792 C 36.243111,13.843792 37.103933,49.644074 37.364147,49.391188 C 37.624353,49.138304 37.938851,14.194636 37.938851,14.194636 L 38.01184,47.465711 L 38.59265,15.052054 L 38.672725,47.059832 L 39.245222,15.354018 L 39.323203,46.405645 L 40.161553,17.018965 L 40.354118,45.36672 L 41.206714,17.976767 L 41.270663,42.630824 L 41.881573,19.44188 L 42.428988,35.741448 L 42.927515,20.754931 L 43.340448,35.183098 L 44.355731,22.521558 L 44.905042,39.680731 L 45.1518,24.296269 L 45.835226,38.665529 L 46.046274,24.996793 L 46.744032,36.897057 L 46.980339,25.752192 L 48.014716,35.28218 L 47.906655,27.468211 L 48.827926,35.884795 L 48.951487,28.27512 L 50.339856,34.371724 L 50.386559,28.673903 L 51.430689,34.625473 L 51.470756,29.429364 L 52.348461,32.446503 L 52.549363,27.652043 L 52.921323,33.357508 L 53.266475,30.382747 C 53.266475,30.382747 53.821576,32.190559 53.821021,31.93808 C 53.820461,31.685604 54.581167,30.833398 54.449769,30.379135 C 54.318395,29.924879 55.003442,31.535832 55.003442,31.535832" + id="path4922" + sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccscccccccccccccccccccccccccccccccccccc" /> + </g> + <g + inkscape:groupmode="layer" + id="layer2" + inkscape:label="Handset" + style="display:inline"> + <path + style="opacity:0.07000002;fill:url(#linearGradient5308);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:12.29699993;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" + d="M 29.642218,3.8148121 C 15.421355,4.1755011 3.9979864,15.833578 3.9979864,30.140856 C 3.9979864,34.435543 5.0313494,38.484629 6.8575214,42.067459 C 6.4099894,40.144483 6.1757104,38.14238 6.1757104,36.083805 C 6.1757104,21.549427 17.967377,9.7475851 32.501753,9.7475851 C 42.739962,9.7475841 51.613502,15.606608 55.968259,24.147025 C 53.252498,12.497895 42.79637,3.8148121 30.324029,3.8148121 C 30.096929,3.8148121 29.867945,3.8090871 29.642218,3.8148121 z" + id="path4679" /> + <path + id="path3760" + d="M 44.655469,47.474134 C 44.480416,47.935405 42.667056,49.650138 41.820999,50.154441 L 40.885711,50.711928 L 37.037514,45.696982 L 33.189313,40.682041 L 33.851699,39.995424 C 34.499939,39.323463 36.44502,38.018167 37.077317,37.830787 C 37.351837,37.749431 37.905038,38.399548 41.061017,42.512397 C 43.076715,45.139238 44.694222,47.372021 44.655469,47.474134 z M 25.394446,22.45477 C 25.249806,22.8359 22.961483,24.786714 22.215712,25.164665 L 21.538155,25.508039 L 17.745382,20.476194 L 13.952605,15.444347 L 15.258489,14.367175 C 15.976727,13.774729 16.918592,13.143789 17.351521,12.965082 L 18.138665,12.640164 L 21.812126,17.427387 C 24.275119,20.637141 25.455555,22.293747 25.394446,22.45477 z M 40.205035,51.178837 C 40.180701,51.242851 39.756691,51.5004 39.262793,51.751169 C 35.381446,53.721885 29.143271,51.402061 23.270447,45.80402 C 21.191766,43.822593 16.903782,38.514689 15.209833,35.826137 C 11.940859,30.637789 10.403556,26.281881 10.448868,22.336062 C 10.477147,19.873542 11.28535,17.79576 12.734622,16.459673 L 13.23156,16.001542 L 17.043581,20.895153 L 20.855605,25.788765 L 20.547291,26.322796 C 20.121429,27.060418 20.19846,28.02785 20.800262,29.499813 C 21.55555,31.347187 27.547838,39.152349 29.155469,40.382759 C 30.418804,41.349659 31.195999,41.631933 32.130094,41.46313 L 32.79155,41.343595 L 36.520414,46.203025 C 38.57129,48.875713 40.229372,51.114823 40.205035,51.178837 z" + style="opacity:0.32000002;fill:#000000;fill-opacity:1" /> + <path + style="fill:#dfdfdf;fill-opacity:1" + d="M 46.477547,45.652056 C 46.302494,46.113327 44.489134,47.82806 43.643077,48.332363 L 42.707789,48.889851 L 38.859591,43.874904 L 35.011391,38.859963 L 35.673777,38.173347 C 36.322017,37.501386 38.267097,36.196088 38.899395,36.008709 C 39.173915,35.927353 39.727116,36.577471 42.883095,40.69032 C 44.898792,43.317161 46.516299,45.549944 46.477547,45.652056 z M 27.216524,20.632693 C 27.071884,21.013822 24.783561,22.964636 24.037791,23.342587 L 23.360233,23.68596 L 19.567459,18.654116 L 15.774683,13.622269 L 17.080566,12.545097 C 17.798805,11.952651 18.74067,11.321711 19.173599,11.143005 L 19.960743,10.818085 L 23.634203,15.60531 C 26.097197,18.815064 27.277633,20.471669 27.216524,20.632693 z M 42.027113,49.356759 C 42.002779,49.420772 41.578769,49.678319 41.084871,49.929092 C 37.203524,51.899808 30.965348,49.579982 25.092524,43.981942 C 23.013844,42.000514 18.72586,36.692611 17.031911,34.004059 C 13.762936,28.815711 12.225634,24.459803 12.270946,20.513984 C 12.299225,18.051464 13.107429,15.973682 14.5567,14.637595 L 15.053638,14.179464 L 18.865659,19.073076 L 22.677682,23.966688 L 22.369368,24.500718 C 21.943507,25.23834 22.020538,26.205773 22.62234,27.677735 C 23.377627,29.525109 29.369916,37.330271 30.977547,38.560681 C 32.240882,39.527582 33.018077,39.809855 33.952171,39.641052 L 34.613628,39.521517 L 38.342492,44.380947 C 40.393368,47.053635 42.05145,49.292746 42.027113,49.356759 z" + id="path3218" /> + <g + transform="matrix(0.3036796,0,0,0.3036796,-53.920882,-127.4775)" + id="g3787" + style="fill:#ffffff;fill-opacity:0"> + <path + id="path3789" + d="M 324.6064,576.10592 C 324.02996,577.62486 318.05867,583.27138 315.27265,584.93202 L 312.1928,586.7678 L 299.5209,570.25386 L 286.84899,553.73994 L 289.03019,551.47895 C 291.16481,549.26622 297.56985,544.96795 299.65197,544.35092 C 300.55595,544.08302 302.37761,546.22382 312.77007,559.7672 C 319.40765,568.41724 324.73401,575.76967 324.6064,576.10592 z M 261.18093,493.71856 C 260.70464,494.9736 253.16932,501.39752 250.71354,502.64209 L 248.48238,503.7728 L 235.99299,487.20322 L 223.50359,470.63363 L 227.80379,467.08656 C 230.16891,465.13567 233.27042,463.05802 234.69603,462.46955 L 237.28805,461.39961 L 249.38455,477.16367 C 257.49505,487.73321 261.38216,493.18832 261.18093,493.71856 z M 309.95137,588.3053 C 309.87124,588.51609 308.475,589.36418 306.84862,590.18996 C 294.06756,596.67941 273.5256,589.04036 254.18672,570.60633 C 247.34174,564.0816 233.22165,546.60297 227.64357,537.74972 C 216.87902,520.66478 211.81677,506.32102 211.96598,493.32766 C 212.0591,485.21872 214.72047,478.3767 219.49284,473.97704 L 221.12923,472.46844 L 233.682,488.58283 L 246.23478,504.69722 L 245.21952,506.45575 C 243.81718,508.8847 244.07084,512.0704 246.05254,516.91749 C 248.53966,523.00079 268.27193,548.70275 273.56577,552.75442 C 277.72586,555.93837 280.28512,556.86788 283.36104,556.31202 L 285.53918,555.9184 L 297.81812,571.92023 C 304.57154,580.72124 310.03151,588.09451 309.95137,588.3053 z" + style="opacity:0.32000002;fill:#ffffff;fill-opacity:0" /> + <path + style="fill:#ffffff;fill-opacity:0" + d="M 330.6064,570.10592 C 330.02996,571.62486 324.05867,577.27138 321.27265,578.93202 L 318.1928,580.7678 L 305.5209,564.25386 L 292.84899,547.73994 L 295.03019,545.47895 C 297.16481,543.26622 303.56985,538.96795 305.65197,538.35092 C 306.55595,538.08302 308.37761,540.22382 318.77007,553.7672 C 325.40765,562.41724 330.73401,569.76967 330.6064,570.10592 z M 267.18093,487.71856 C 266.70464,488.9736 259.16932,495.39752 256.71354,496.64209 L 254.48238,497.7728 L 241.99299,481.20322 L 229.50359,464.63363 L 233.80379,461.08656 C 236.16891,459.13567 239.27042,457.05802 240.69603,456.46955 L 243.28805,455.39961 L 255.38455,471.16367 C 263.49505,481.73321 267.38216,487.18832 267.18093,487.71856 z M 315.95137,582.3053 C 315.87124,582.51609 314.475,583.36418 312.84862,584.18996 C 300.06756,590.67941 279.5256,583.04036 260.18672,564.60633 C 253.34174,558.0816 239.22165,540.60297 233.64357,531.74972 C 222.87902,514.66478 217.81677,500.32102 217.96598,487.32766 C 218.0591,479.21872 220.72047,472.3767 225.49284,467.97704 L 227.12923,466.46844 L 239.682,482.58283 L 252.23478,498.69722 L 251.21952,500.45575 C 249.81718,502.8847 250.07084,506.0704 252.05254,510.91749 C 254.53966,517.00079 274.27193,542.70275 279.56577,546.75442 C 283.72586,549.93837 286.28512,550.86788 289.36104,550.31202 L 291.53918,549.9184 L 303.81812,565.92023 C 310.57154,574.72124 316.03151,582.09451 315.95137,582.3053 z" + id="path3791" /> + </g> + <path + style="fill:url(#linearGradient3809);fill-opacity:1;stroke:none" + d="M 19.959634,10.812111 L 19.166955,11.145037 C 18.734026,11.323743 17.792519,11.947707 17.074281,12.540153 L 15.774286,13.618197 L 19.563295,18.659639 L 21.576701,21.323043 C 22.41762,19.694995 23.432459,18.196578 24.57303,16.836476 C 24.268481,16.434556 23.99655,16.067589 23.637668,15.599896 L 19.959634,10.812111 z M 15.060874,14.173073 L 14.553559,14.632827 C 13.104288,15.968914 12.29892,18.051991 12.270643,20.51451 C 12.225331,24.460329 13.757746,28.817569 17.02672,34.005916 C 17.474411,34.71647 18.112629,35.60749 18.83403,36.574198 C 18.726964,35.591093 18.65964,34.593474 18.65964,33.577869 C 18.65964,29.425329 19.571357,25.50693 21.196214,22.084015 L 18.865736,19.071833 L 15.060874,14.173073 z" + id="path3798" /> + </g> +</svg> diff --git a/sflphone-client-gnome/sflphone.desktop.in b/sflphone-client-gnome/sflphone.desktop.in index 08ecbcb01ccc18ae7210b4e0da5bfb8c9a9c8267..2fde3130f21d8ac551f24c7e3f4ab1598fe6bb1c 100644 --- a/sflphone-client-gnome/sflphone.desktop.in +++ b/sflphone-client-gnome/sflphone.desktop.in @@ -4,7 +4,7 @@ Name=SFLphone GNOME VoIP client GenericName=Telephone Comment=Call and receive calls with SIP or IAX protocols Exec=sflphone-client-gnome -Icon=sflphone1.svg +Icon=sflphone.svg StartupNotify=true Terminal=false Type=Application diff --git a/sflphone-client-gnome/src/accountlist.c b/sflphone-client-gnome/src/accountlist.c index 3a0959c810e496c3ff9a199d67ee60a0e386322d..8a6cbe26b7f867bc681db5eb24689967afd1c585 100644 --- a/sflphone-client-gnome/src/accountlist.c +++ b/sflphone-client-gnome/src/accountlist.c @@ -23,7 +23,6 @@ #include <string.h> GQueue * accountQueue; -gchar* __CURRENT_ACCOUNT_ID = NULL; /* GCompareFunc to compare a accountID (gchar* and a account_t) */ gint @@ -129,23 +128,35 @@ account_list_get_nth ( guint n ) account_t* account_list_get_current( ) { - if( __CURRENT_ACCOUNT_ID != NULL ) - return account_list_get_by_id( __CURRENT_ACCOUNT_ID ); - else - return NULL; -} - -void -account_list_set_current_id(const gchar * accountID) -{ - DEBUG("set current id = %s", accountID); - __CURRENT_ACCOUNT_ID = g_strdup(accountID); + account_t *current; + + // No account registered + if (account_list_get_registered_accounts () == 0) + return NULL; + + // if we are here, it means that we have at least one registered account in the list + // So we get the first one + current = account_list_get_by_state (ACCOUNT_STATE_REGISTERED); + if (!current) + return NULL; + + return current; } -void -account_list_set_current_pos( guint n) +void account_list_set_current (account_t *current) { - __CURRENT_ACCOUNT_ID = account_list_get_nth(n)->accountID; + gpointer acc; + guint pos; + + // 2 steps: + // 1 - retrieve the index of the current account in the Queue + // 2 - then set it as first + pos = account_list_get_position (current); + if (pos > 0) + { + acc = g_queue_pop_nth(accountQueue, pos); + g_queue_push_nth(accountQueue, acc, 0); + } } @@ -198,12 +209,13 @@ account_list_clear ( ) void account_list_move_up(guint index) { + DEBUG ("index = %i\n", index); + if(index != 0) { gpointer acc = g_queue_pop_nth(accountQueue, index); g_queue_push_nth(accountQueue, acc, index-1); } - account_list_set_current_pos( 0 ); } void @@ -214,7 +226,6 @@ account_list_move_down(guint index) gpointer acc = g_queue_pop_nth(accountQueue, index); g_queue_push_nth(accountQueue, acc, index+1); } - account_list_set_current_pos( 0 ); } guint @@ -232,10 +243,14 @@ account_list_get_registered_accounts( void ) } gchar* account_list_get_current_id( void ){ - if( __CURRENT_ACCOUNT_ID == NULL ) - return ""; - else - return __CURRENT_ACCOUNT_ID; + + account_t *current; + + current = account_list_get_current (); + if (current) + return current->accountID; + else + return ""; } int account_list_get_sip_account_number( void ){ @@ -283,3 +298,40 @@ gchar * account_list_get_ordered_list (void) { } return order; } + + +guint account_list_get_position (account_t *account) +{ + guint size, i; + account_t *tmp; + + size = account_list_get_size (); + for (i=0; i<size; i++) + { + tmp = account_list_get_nth (i); + if (g_strcasecmp (tmp->accountID, account->accountID) == 0) + { + return i; + } + } + // Not found + return -1; +} + +gboolean account_list_current_account_has_mailbox (void) +{ + + account_t *current; + + // Check if the current account has a voicemail number configured + + current = account_list_get_current (); + if (current) + { + if (g_strcasecmp (g_hash_table_lookup (current->properties, ACCOUNT_MAILBOX), "") != 0) + return TRUE; + } + + return FALSE; +} + diff --git a/sflphone-client-gnome/src/accountlist.h b/sflphone-client-gnome/src/accountlist.h index 6456e521d09fa99859a57fcd8e29cf7ba0eeecfb..f60fd702951b225535097bd1bcf917defd580337 100644 --- a/sflphone-client-gnome/src/accountlist.h +++ b/sflphone-client-gnome/src/accountlist.h @@ -125,15 +125,9 @@ account_t * account_list_get_current( ); /** * This function sets an account as the current one - * @param accountID The ID of the current account + * @param current the account you want to set as current */ -void account_list_set_current_id(const gchar * accountID); - -/** - * This function sets an account as the current one - * @param n the position of the account you want to use - */ -void account_list_set_current_pos( guint n ); +void account_list_set_current (account_t *current); /** * This function maps account_state_t enums to a description. @@ -184,5 +178,8 @@ int account_list_get_iax_account_number( void ); gchar * account_list_get_ordered_list (void); +guint account_list_get_position (account_t *account); + +gboolean account_list_current_account_has_mailbox (void); #endif diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c index 02c8f215d334bc3a2a079b0ee2b3ca3af47c3fe5..120024a7c3d8eb8fc9e1463c25212bbcc1828a76 100644 --- a/sflphone-client-gnome/src/actions.c +++ b/sflphone-client-gnome/src/actions.c @@ -78,12 +78,16 @@ status_bar_display_account () acc = account_list_get_current (); if(acc){ - msg = g_markup_printf_escaped(_("%s account- %s") , - (gchar*)g_hash_table_lookup( acc->properties , ACCOUNT_TYPE), - (gchar*)g_hash_table_lookup( acc->properties , ACCOUNT_ALIAS)); - statusbar_push_message( msg , __MSG_ACCOUNT_DEFAULT); - g_free(msg); + msg = g_markup_printf_escaped(_("Using %s (%s)") , + (gchar*)g_hash_table_lookup( acc->properties , ACCOUNT_ALIAS), + (gchar*)g_hash_table_lookup( acc->properties , ACCOUNT_TYPE)); } + else + { + msg = g_markup_printf_escaped(_("No registered account")); + } + statusbar_push_message( msg , __MSG_ACCOUNT_DEFAULT); + g_free(msg); } @@ -235,7 +239,6 @@ gboolean sflphone_init() codec_list_init(); sflphone_fill_account_list(FALSE); sflphone_fill_codec_list(); - sflphone_set_current_account(); return TRUE; } } @@ -291,7 +294,7 @@ sflphone_hang_up() void sflphone_pick_up() { - + DEBUG("sflphone_pick_up\n"); call_t * selectedCall = calltab_get_selected_call(active_calltree); if(selectedCall) { @@ -325,6 +328,10 @@ sflphone_pick_up() break; } } + else { + sflphone_new_call(); + } + } void @@ -533,6 +540,8 @@ sflphone_new_call() call_t *c; gchar *from, *to; + + DEBUG("sflphone_new_call\n"); sflphone_on_hold(); // Play a tone when creating a new call @@ -554,6 +563,7 @@ sflphone_new_call() void sflphone_keypad( guint keyval, gchar * key) { + DEBUG("sflphone_keypad \n"); call_t * c = calltab_get_selected_call(current_calls); if((active_calltree != current_calls) || (active_calltree == current_calls && !c)) @@ -578,6 +588,7 @@ sflphone_keypad( guint keyval, gchar * key) switch(c->state) { case CALL_STATE_DIALING: // Currently dialing => edit number + DEBUG("Writing a number\n"); process_dialing(c, keyval, key); break; case CALL_STATE_RECORD: @@ -667,6 +678,10 @@ sflphone_keypad( guint keyval, gchar * key) default: break; } + + } + else { + sflphone_new_call(); } } @@ -680,8 +695,7 @@ sflphone_keypad( guint keyval, gchar * key) sflphone_place_call ( call_t * c ) { - - if (c->state == CALL_STATE_DIALING && g_str_has_prefix (c->to, "ip:")) + if (c->state == CALL_STATE_DIALING && g_str_has_prefix (c->to, "sip:")) { dbus_place_call (c); } @@ -736,7 +750,6 @@ sflphone_place_call ( call_t * c ) c -> accountID = current -> accountID; dbus_place_call(c); notify_current_account( current ); - account_list_set_current_id( c-> accountID ); } } else @@ -749,7 +762,6 @@ sflphone_place_call ( call_t * c ) c -> accountID = current -> accountID; dbus_place_call(c); notify_current_account( current ); - account_list_set_current_id( c-> accountID ); } } // Update history @@ -775,9 +787,9 @@ sflphone_display_selected_codec (const gchar* codecName) msg = g_markup_printf_escaped (_("IP call - %s"), codecName); } else { - msg = g_markup_printf_escaped(_("%s account- %s %s") , - (gchar*)g_hash_table_lookup( acc->properties , ACCOUNT_TYPE), + msg = g_markup_printf_escaped(_("Using %s (%s) - Codec: %s") , (gchar*)g_hash_table_lookup( acc->properties , ACCOUNT_ALIAS), + (gchar*)g_hash_table_lookup( acc->properties , ACCOUNT_TYPE), codecName); } statusbar_push_message( msg , __MSG_ACCOUNT_DEFAULT); @@ -819,15 +831,6 @@ sflphone_rec_call() // DEBUG("sflphone_get_current_codec_name: %s",codname); } -/* Internal to action - set the __CURRENT_ACCOUNT variable */ - void -sflphone_set_current_account() -{ - if( account_list_get_size() > 0 ) - account_list_set_current_pos( 0 ); -} - - /* Internal to action - get the codec list */ void sflphone_fill_codec_list() diff --git a/sflphone-client-gnome/src/assistant.c b/sflphone-client-gnome/src/assistant.c index 463ef4f441d14212bf247fa803ef7538d566ebae..374ea0539f25d960555f18f4ee8c30c826c6d21b 100644 --- a/sflphone-client-gnome/src/assistant.c +++ b/sflphone-client-gnome/src/assistant.c @@ -32,7 +32,7 @@ #define SFLPHONE_ORG_SERVER "sip.sflphone.org" #define SFLPHONE_ORG_ALIAS "sflphone.org" -#define MESSAGE_SUMMARY _("This assistant is now finished.\nYou can at any time check your registration state or modify your accounts parameters in the Options/Accounts window.\n\nAlias : %s\nServer : %s\nUsername : %s\nPassword : %s") +#define MESSAGE_SUMMARY _("This assistant is now finished.\nYou can at any time check your registration state or modify your accounts parameters in the Options/Accounts window.\n\nAlias : %s\nServer : %s\nUsername : %s\n") struct _wizard *wiz; @@ -72,6 +72,8 @@ void set_sflphone_org( GtkWidget* widget , gpointer data UNUSED ) { static void close_callback( void ) { gtk_widget_destroy(wiz->assistant); g_free(wiz); wiz = NULL; + + status_bar_display_account (); } /** @@ -81,6 +83,8 @@ static void close_callback( void ) { static void cancel_callback( void ) { gtk_widget_destroy(wiz->assistant); g_free(wiz); wiz = NULL; + + status_bar_display_account (); } /** @@ -95,7 +99,7 @@ static void sip_apply_callback( void ) { if( account_type == _SIP ) { g_hash_table_insert(current->properties, g_strdup(ACCOUNT_ALIAS), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->sip_alias)))); g_hash_table_insert(current->properties, g_strdup(ACCOUNT_ENABLED), g_strdup("TRUE")); - g_hash_table_insert(current->properties, g_strdup(ACCOUNT_MAILBOX), g_strdup("888")); + g_hash_table_insert(current->properties, g_strdup(ACCOUNT_MAILBOX), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->sip_voicemail)))); g_hash_table_insert(current->properties, g_strdup(ACCOUNT_TYPE), g_strdup("SIP")); g_hash_table_insert(current->properties, g_strdup(ACCOUNT_HOSTNAME), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->sip_server)))); g_hash_table_insert(current->properties, g_strdup(ACCOUNT_PASSWORD), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->sip_password)))); @@ -104,12 +108,11 @@ static void sip_apply_callback( void ) { g_hash_table_insert(current->properties, g_strdup(ACCOUNT_SIP_STUN_SERVER), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->addr)))); dbus_add_account( current ); - account_list_set_current_id( current->accountID ); sprintf(message, MESSAGE_SUMMARY, gtk_entry_get_text (GTK_ENTRY(wiz->sip_alias)), gtk_entry_get_text (GTK_ENTRY(wiz->sip_server)), - gtk_entry_get_text (GTK_ENTRY(wiz->sip_username)), - gtk_entry_get_text (GTK_ENTRY(wiz->sip_password)) + gtk_entry_get_text (GTK_ENTRY(wiz->sip_username)) + // gtk_entry_get_text (GTK_ENTRY(wiz->sip_password)) ) ; gtk_label_set_text (GTK_LABEL(wiz->label_summary), message); } @@ -123,18 +126,17 @@ static void iax_apply_callback( void ) { if( account_type == _IAX) { g_hash_table_insert(current->properties, g_strdup(ACCOUNT_ALIAS), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->iax_alias)))); g_hash_table_insert(current->properties, g_strdup(ACCOUNT_ENABLED), g_strdup("TRUE")); - g_hash_table_insert(current->properties, g_strdup(ACCOUNT_MAILBOX), g_strdup("888")); + g_hash_table_insert(current->properties, g_strdup(ACCOUNT_MAILBOX), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->iax_voicemail)))); g_hash_table_insert(current->properties, g_strdup(ACCOUNT_TYPE), g_strdup("IAX")); g_hash_table_insert(current->properties, g_strdup(ACCOUNT_USERNAME), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->iax_username)))); g_hash_table_insert(current->properties, g_strdup(ACCOUNT_HOSTNAME), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->iax_server)))); g_hash_table_insert(current->properties, g_strdup(ACCOUNT_PASSWORD), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->iax_password)))); dbus_add_account( current ); - account_list_set_current_id( current->accountID ); sprintf(message, MESSAGE_SUMMARY, gtk_entry_get_text (GTK_ENTRY(wiz->iax_alias)), gtk_entry_get_text (GTK_ENTRY(wiz->iax_server)), gtk_entry_get_text (GTK_ENTRY(wiz->iax_username)), - gtk_entry_get_text (GTK_ENTRY(wiz->iax_password)) + gtk_entry_get_text (GTK_ENTRY(wiz->iax_password)) ) ; gtk_label_set_text (GTK_LABEL(wiz->label_summary), message); } @@ -233,7 +235,7 @@ GtkWidget* build_sip_account_configuration( void ) { wiz->sip_account = create_vbox( GTK_ASSISTANT_PAGE_CONTENT , _("SIP account configuration") , _("Please fill the following information:")); // table - table = gtk_table_new ( 4, 2 , FALSE/* homogeneous */); + table = gtk_table_new ( 5, 2 , FALSE/* homogeneous */); gtk_table_set_row_spacings( GTK_TABLE(table), 10); gtk_table_set_col_spacings( GTK_TABLE(table), 10); gtk_box_pack_start( GTK_BOX(wiz->sip_account) , table , TRUE, TRUE, 0); @@ -270,6 +272,7 @@ GtkWidget* build_sip_account_configuration( void ) { gtk_table_attach ( GTK_TABLE( table ), wiz->sip_username, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); // password field + label = gtk_label_new_with_mnemonic (_("_Password")); gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5); @@ -277,6 +280,8 @@ GtkWidget* build_sip_account_configuration( void ) { wiz->sip_password = gtk_entry_new(); gtk_entry_set_icon_from_stock (GTK_ENTRY (wiz->sip_password), GTK_ENTRY_ICON_PRIMARY, GTK_STOCK_DIALOG_AUTHENTICATION); #else + + wiz->sip_password = sexy_icon_entry_new(); image = gtk_image_new_from_stock( GTK_STOCK_DIALOG_AUTHENTICATION , GTK_ICON_SIZE_SMALL_TOOLBAR ); sexy_icon_entry_set_icon( SEXY_ICON_ENTRY(wiz->sip_password), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE(image) ); @@ -285,6 +290,14 @@ GtkWidget* build_sip_account_configuration( void ) { gtk_entry_set_visibility(GTK_ENTRY(wiz->sip_password), FALSE); gtk_table_attach ( GTK_TABLE( table ), wiz->sip_password, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + // voicemail number field + label = gtk_label_new_with_mnemonic (_("_Voicemail number")); + gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5); + wiz->sip_voicemail = gtk_entry_new(); + gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->sip_voicemail); + gtk_table_attach ( GTK_TABLE( table ), wiz->sip_voicemail, 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + //gtk_assistant_set_page_complete(GTK_ASSISTANT(wiz->assistant), wiz->sip_account, TRUE); return wiz->sip_account; } @@ -318,7 +331,7 @@ GtkWidget* build_iax_account_configuration( void ) { wiz->iax_account = create_vbox( GTK_ASSISTANT_PAGE_CONFIRM , _("IAX2 account configuration") , _("Please fill the following information:")); - table = gtk_table_new ( 4, 2 , FALSE/* homogeneous */); + table = gtk_table_new ( 5, 2 , FALSE/* homogeneous */); gtk_table_set_row_spacings( GTK_TABLE(table), 10); gtk_table_set_col_spacings( GTK_TABLE(table), 10); gtk_box_pack_start( GTK_BOX(wiz->iax_account) , table , TRUE, TRUE, 0); @@ -370,6 +383,13 @@ GtkWidget* build_iax_account_configuration( void ) { gtk_entry_set_visibility(GTK_ENTRY(wiz->iax_password), FALSE); gtk_table_attach ( GTK_TABLE( table ), wiz->iax_password, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + // voicemail number field + label = gtk_label_new_with_mnemonic (_("_Voicemail number")); + gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5); + wiz->iax_voicemail = gtk_entry_new(); + gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->iax_voicemail); + gtk_table_attach ( GTK_TABLE( table ), wiz->iax_voicemail, 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); current -> state = ACCOUNT_STATE_UNREGISTERED; diff --git a/sflphone-client-gnome/src/assistant.h b/sflphone-client-gnome/src/assistant.h index cbadb2592bf7a80ff840a997ee43a05bf7de1565..9b4f712c922a2ad77fdc72cd57a2a28bd081b841 100644 --- a/sflphone-client-gnome/src/assistant.h +++ b/sflphone-client-gnome/src/assistant.h @@ -49,6 +49,7 @@ struct _wizard GtkWidget *sip_server; GtkWidget *sip_username; GtkWidget *sip_password; + GtkWidget *sip_voicemail; GtkWidget *test; GtkWidget *state; GtkWidget *mailbox; @@ -58,6 +59,7 @@ struct _wizard GtkWidget *iax_server; GtkWidget *iax_username; GtkWidget *iax_password; + GtkWidget *iax_voicemail; /** Page 4 - Nat detection */ GtkWidget *nat; GtkWidget *enable; diff --git a/sflphone-client-gnome/src/codeclist.c b/sflphone-client-gnome/src/codeclist.c index ea9fa22ade1e8dc0f5177834974ecb3c831e23b5..cd90fb4efa217090663702eb1cd1075c2e7ab08b 100644 --- a/sflphone-client-gnome/src/codeclist.c +++ b/sflphone-client-gnome/src/codeclist.c @@ -62,7 +62,6 @@ codec_list_clear () void codec_list_add(codec_t * c) { - g_print ("add %s codec\n", c->name); g_queue_push_tail (codecQueue, (gpointer *) c); } diff --git a/sflphone-client-gnome/src/config/Makefile.am b/sflphone-client-gnome/src/config/Makefile.am index 8f8bbbc8abf9b634627cbcb1fbef63cd90fb0016..d2a0801af9154651004b25c1b3cdfec0f21e0921 100644 --- a/sflphone-client-gnome/src/config/Makefile.am +++ b/sflphone-client-gnome/src/config/Makefile.am @@ -7,7 +7,8 @@ libconfig_la_SOURCES = \ configwindow.c \ accountwindow.c \ hooks-config.c \ - audioconf.c + audioconf.c \ + utils.c libconfig_la_LDFLAGS = @DEPS_LDFLAGS@ diff --git a/sflphone-client-gnome/src/config/accountwindow.c b/sflphone-client-gnome/src/config/accountwindow.c index 9b807cad064a36effa709baa658b3f9b3c2daf17..1058d295b609e592fbcac13245afca95399cda38 100644 --- a/sflphone-client-gnome/src/config/accountwindow.c +++ b/sflphone-client-gnome/src/config/accountwindow.c @@ -84,7 +84,7 @@ show_account_window (account_t * a) gchar * curHostname = ""; gchar * curPassword = ""; /* TODO: add curProxy, and add boxes for Proxy support */ - gchar * curMailbox = "888"; + gchar * curMailbox = ""; // Load from SIP/IAX/Unknown ? if(a) @@ -117,7 +117,7 @@ show_account_window (account_t * a) gtk_dialog_set_has_separator(dialog, TRUE); gtk_container_set_border_width (GTK_CONTAINER(dialog), 0); - frame = gtk_frame_new(_("Account parameters")); + gnome_main_section_new (_("Account Parameters"), &frame); gtk_box_pack_start(GTK_BOX(dialog->vbox), frame, FALSE, FALSE, 0); gtk_widget_show(frame); @@ -231,19 +231,6 @@ show_account_window (account_t * a) gtk_widget_show_all( table ); gtk_container_set_border_width (GTK_CONTAINER(table), 10); - // Toggle enabled/disabled widgets - if (strcmp(curAccountType, "SIP") == 0) { - //gtk_widget_set_sesitive( GTK_WIDGET(entryUserPart), TRUE);< - } - else if (strcmp(curAccountType, "IAX") == 0) { - //gtk_widget_set_sensitive( GTK_WIDGET(stunEnable), FALSE); - //gtk_widget_set_sensitive( GTK_WIDGET(stunServer), FALSE); - } - else { - // Disable everything ! ouch! - // Shouldn't get there. - } - response = gtk_dialog_run (GTK_DIALOG (dialog)); if(response == GTK_RESPONSE_ACCEPT) { @@ -309,11 +296,9 @@ show_account_window (account_t * a) /** @todo Verify if it's the best condition to check */ if (currentAccount->accountID == NULL) { dbus_add_account(currentAccount); - account_list_set_current_id( currentAccount->accountID ); } else { dbus_set_account_details(currentAccount); - account_list_set_current_id( currentAccount->accountID); } } gtk_widget_destroy (GTK_WIDGET(dialog)); diff --git a/sflphone-client-gnome/src/config/addressbook-config.c b/sflphone-client-gnome/src/config/addressbook-config.c index 9851ce64338fb884ca94fbcc4610ea90508bf913..a9f0eae296cb912d9bbbf9779f282f201abe2333 100644 --- a/sflphone-client-gnome/src/config/addressbook-config.c +++ b/sflphone-client-gnome/src/config/addressbook-config.c @@ -27,108 +27,119 @@ GtkWidget *book_tree_view; enum { - COLUMN_BOOK_ACTIVE, COLUMN_BOOK_NAME, COLUMN_BOOK_UID + COLUMN_BOOK_ACTIVE, COLUMN_BOOK_NAME, COLUMN_BOOK_UID }; -void + void addressbook_config_load_parameters(AddressBook_Config **settings) { - GHashTable *_params = NULL; - AddressBook_Config *_settings; + GHashTable *_params = NULL; + AddressBook_Config *_settings; - // Allocate a struct - _settings = g_new0 (AddressBook_Config, 1); + // Allocate a struct + _settings = g_new0 (AddressBook_Config, 1); - // Fetch the settings from D-Bus - _params = (GHashTable*) dbus_get_addressbook_settings(); + // Fetch the settings from D-Bus + _params = (GHashTable*) dbus_get_addressbook_settings(); - if (_params == NULL) + if (_params == NULL) { - _settings->max_results = 30; - _settings->display_contact_photo = 0; - _settings->search_phone_business = 1; - _settings->search_phone_home = 1; - _settings->search_phone_mobile = 1; + _settings->enable = 1; + _settings->max_results = 30; + _settings->display_contact_photo = 0; + _settings->search_phone_business = 1; + _settings->search_phone_home = 1; + _settings->search_phone_mobile = 1; } - else + else { - _settings->max_results = (guint) (g_hash_table_lookup(_params, - ADDRESSBOOK_MAX_RESULTS)); - _settings->display_contact_photo = (guint) (g_hash_table_lookup(_params, - ADDRESSBOOK_DISPLAY_CONTACT_PHOTO)); - _settings->search_phone_business = (guint) (g_hash_table_lookup(_params, - ADDRESSBOOK_DISPLAY_PHONE_BUSINESS)); - _settings->search_phone_home = (guint) (g_hash_table_lookup(_params, - ADDRESSBOOK_DISPLAY_PHONE_HOME)); - _settings->search_phone_mobile = (guint) (g_hash_table_lookup(_params, - ADDRESSBOOK_DISPLAY_PHONE_MOBILE)); + _settings->enable = (guint) (g_hash_table_lookup (_params, + ADDRESSBOOK_ENABLE)); + _settings->max_results = (guint) (g_hash_table_lookup(_params, + ADDRESSBOOK_MAX_RESULTS)); + _settings->display_contact_photo = (guint) (g_hash_table_lookup(_params, + ADDRESSBOOK_DISPLAY_CONTACT_PHOTO)); + _settings->search_phone_business = (guint) (g_hash_table_lookup(_params, + ADDRESSBOOK_DISPLAY_PHONE_BUSINESS)); + _settings->search_phone_home = (guint) (g_hash_table_lookup(_params, + ADDRESSBOOK_DISPLAY_PHONE_HOME)); + _settings->search_phone_mobile = (guint) (g_hash_table_lookup(_params, + ADDRESSBOOK_DISPLAY_PHONE_MOBILE)); } - *settings = _settings; + *settings = _settings; } -void + void addressbook_config_save_parameters(void) { - GHashTable *params = NULL; - - params = g_hash_table_new(NULL, g_str_equal); - g_hash_table_replace(params, (gpointer) ADDRESSBOOK_MAX_RESULTS, - (gpointer) addressbook_config->max_results); - g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_CONTACT_PHOTO, - (gpointer) addressbook_config->display_contact_photo); - g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_BUSINESS, - (gpointer) addressbook_config->search_phone_business); - g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_HOME, - (gpointer) addressbook_config->search_phone_home); - g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_MOBILE, - (gpointer) addressbook_config->search_phone_mobile); - - dbus_set_addressbook_settings(params); - - // Decrement the reference count - g_hash_table_unref(params); + GHashTable *params = NULL; + + params = g_hash_table_new(NULL, g_str_equal); + g_hash_table_replace(params, (gpointer) ADDRESSBOOK_ENABLE, + (gpointer) addressbook_config->enable); + g_hash_table_replace(params, (gpointer) ADDRESSBOOK_MAX_RESULTS, + (gpointer) addressbook_config->max_results); + g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_CONTACT_PHOTO, + (gpointer) addressbook_config->display_contact_photo); + g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_BUSINESS, + (gpointer) addressbook_config->search_phone_business); + g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_HOME, + (gpointer) addressbook_config->search_phone_home); + g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_MOBILE, + (gpointer) addressbook_config->search_phone_mobile); + + dbus_set_addressbook_settings(params); + + // Decrement the reference count + g_hash_table_unref(params); } -static void -max_results_cb(GtkRange* scale) + static void +enable_cb (GtkWidget *widget) { + addressbook_config->enable + = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); +} - addressbook_config->max_results = (guint) gtk_range_get_value(GTK_RANGE (scale)); + static void +max_results_cb (GtkSpinButton *button) +{ + addressbook_config->max_results = gtk_spin_button_get_value_as_int(button); } -static void + static void display_contact_photo_cb(GtkWidget *widget) { - addressbook_config->display_contact_photo - = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); + addressbook_config->display_contact_photo + = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); } -static void + static void search_phone_business_cb(GtkWidget *widget) { - addressbook_config->search_phone_business - = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); + addressbook_config->search_phone_business + = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); } -static void + static void search_phone_home_cb(GtkWidget *widget) { - addressbook_config->search_phone_home = (guint) gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(widget)); + addressbook_config->search_phone_home = (guint) gtk_toggle_button_get_active( + GTK_TOGGLE_BUTTON(widget)); } -static void + static void search_phone_mobile_cb(GtkWidget *widget) { - addressbook_config->search_phone_mobile - = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); + addressbook_config->search_phone_mobile + = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); } /** @@ -137,240 +148,265 @@ search_phone_mobile_cb(GtkWidget *widget) */ static void addressbook_config_book_active_toggled( - GtkCellRendererToggle *renderer UNUSED, gchar *path, gpointer data) + GtkCellRendererToggle *renderer UNUSED, gchar *path, gpointer data) { - GtkTreeIter iter; - GtkTreePath *treePath; - GtkTreeModel *model; - gboolean active; - gchar* name; - gchar* uid; + GtkTreeIter iter; + GtkTreePath *treePath; + GtkTreeModel *model; + gboolean active; + gchar* name; + gchar* uid; - // Get path of clicked book active toggle box - treePath = gtk_tree_path_new_from_string(path); - model = gtk_tree_view_get_model(GTK_TREE_VIEW(data)); - gtk_tree_model_get_iter(model, &iter, treePath); + // Get path of clicked book active toggle box + treePath = gtk_tree_path_new_from_string(path); + model = gtk_tree_view_get_model(GTK_TREE_VIEW(data)); + gtk_tree_model_get_iter(model, &iter, treePath); - // Get active value at iteration - gtk_tree_model_get(model, &iter, COLUMN_BOOK_ACTIVE, &active, - COLUMN_BOOK_UID, &uid, COLUMN_BOOK_NAME, &name, -1); + // Get active value at iteration + gtk_tree_model_get(model, &iter, COLUMN_BOOK_ACTIVE, &active, + COLUMN_BOOK_UID, &uid, COLUMN_BOOK_NAME, &name, -1); - // Toggle active value - active = !active; + // Toggle active value + active = !active; - // Store value - gtk_list_store_set(GTK_LIST_STORE(model), &iter, COLUMN_BOOK_ACTIVE, active, -1); + // Store value + gtk_list_store_set(GTK_LIST_STORE(model), &iter, COLUMN_BOOK_ACTIVE, active, -1); - gtk_tree_path_free(treePath); + gtk_tree_path_free(treePath); - // Update current memory stored books data - books_get_book_data_by_uid(uid)->active = active; + // Update current memory stored books data + books_get_book_data_by_uid(uid)->active = active; - // Save data + // Save data - gboolean valid; + gboolean valid; - // Initiate double array char list for one string - const gchar** list = (void*) malloc(sizeof(void*)); - int c = 0; + // Initiate double array char list for one string + const gchar** list = (void*) malloc(sizeof(void*)); + int c = 0; - /* Get the first iter in the list */ - valid = gtk_tree_model_get_iter_first(model, &iter); + /* Get the first iter in the list */ + valid = gtk_tree_model_get_iter_first(model, &iter); - while (valid) + while (valid) { - // Get active value at iteration - gtk_tree_model_get(model, &iter, COLUMN_BOOK_ACTIVE, &active, - COLUMN_BOOK_UID, &uid, COLUMN_BOOK_NAME, &name, -1); + // Get active value at iteration + gtk_tree_model_get(model, &iter, COLUMN_BOOK_ACTIVE, &active, + COLUMN_BOOK_UID, &uid, COLUMN_BOOK_NAME, &name, -1); - if (active) + if (active) { - // Reallocate memory each time - if (c != 0) - list = (void*) realloc(list, (c + 1) * sizeof(void*)); + // Reallocate memory each time + if (c != 0) + list = (void*) realloc(list, (c + 1) * sizeof(void*)); - *(list + c) = uid; - c++; + *(list + c) = uid; + c++; } - valid = gtk_tree_model_iter_next(model, &iter); + valid = gtk_tree_model_iter_next(model, &iter); } - // Allocate NULL array at the end for Dbus - list = (void*) realloc(list, (c + 1) * sizeof(void*)); - *(list + c) = NULL; + // Allocate NULL array at the end for Dbus + list = (void*) realloc(list, (c + 1) * sizeof(void*)); + *(list + c) = NULL; - // Call daemon to store in config file - dbus_set_addressbook_list(list); + // Call daemon to store in config file + dbus_set_addressbook_list(list); - free(list); + free(list); } -static void + static void addressbook_config_fill_book_list() { - GtkTreeIter list_store_iterator; - GSList *book_list_iterator; - GtkListStore *store; - book_data_t *book_data; - GSList *books_data = addressbook_get_books_data(); - - // Get model of view and clear it - store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(book_tree_view))); - gtk_list_store_clear(store); - - // Populate window - for (book_list_iterator = books_data; book_list_iterator != NULL; book_list_iterator - = book_list_iterator->next) + GtkTreeIter list_store_iterator; + GSList *book_list_iterator; + GtkListStore *store; + book_data_t *book_data; + GSList *books_data = addressbook_get_books_data(); + + // Get model of view and clear it + store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(book_tree_view))); + gtk_list_store_clear(store); + + // Populate window + for (book_list_iterator = books_data; book_list_iterator != NULL; book_list_iterator + = book_list_iterator->next) { - book_data = (book_data_t *) book_list_iterator->data; - gtk_list_store_append(store, &list_store_iterator); - gtk_list_store_set(store, &list_store_iterator, COLUMN_BOOK_ACTIVE, - book_data->active, COLUMN_BOOK_UID, book_data->uid, COLUMN_BOOK_NAME, - book_data->name, -1); + book_data = (book_data_t *) book_list_iterator->data; + gtk_list_store_append(store, &list_store_iterator); + gtk_list_store_set(store, &list_store_iterator, COLUMN_BOOK_ACTIVE, + book_data->active, COLUMN_BOOK_UID, book_data->uid, COLUMN_BOOK_NAME, + book_data->name, -1); } - store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(book_tree_view))); + store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(book_tree_view))); } -GtkWidget* + GtkWidget* create_addressbook_settings() { - GtkWidget *ret, *result_frame, *table, *value, *label, *photo, *item; - - GtkListStore *store; - GtkCellRenderer *renderer; - GtkTreeSelection *tree_selection; - GtkTreeViewColumn *tree_view_column; - GtkWidget *scrolled_window, *hbox; - - // Load the user value - addressbook_config_load_parameters(&addressbook_config); - - ret = gtk_vbox_new(FALSE, 10); - gtk_container_set_border_width(GTK_CONTAINER(ret), 10); - - result_frame = gtk_frame_new(_("General")); - gtk_box_pack_start(GTK_BOX(ret), result_frame, FALSE, FALSE, 0); - gtk_widget_show (result_frame); - - table = gtk_table_new ( 5, 3, FALSE/* homogeneous */); - gtk_table_set_row_spacings( GTK_TABLE(table), 10); - gtk_table_set_col_spacings( GTK_TABLE(table), 10); - gtk_widget_show(table); - gtk_container_add( GTK_CONTAINER (result_frame) , table ); - - // SCALE BUTTON - NUMBER OF RESULTS - hbox = gtk_hbox_new(FALSE, 0); - label = gtk_label_new (_("Maximum results: ")); - gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0); - value = gtk_hscale_new_with_range (25.0 , 50.0 , 5.0); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), value); - gtk_scale_set_digits (GTK_SCALE(value) , 0); - gtk_scale_set_value_pos (GTK_SCALE(value) , GTK_POS_RIGHT); - gtk_range_set_value (GTK_RANGE( value ) , addressbook_config->max_results); - g_signal_connect (G_OBJECT (value) , "value-changed" , G_CALLBACK(max_results_cb), NULL ); - gtk_box_pack_start(GTK_BOX(hbox),value,TRUE,TRUE,10); - gtk_table_attach ( GTK_TABLE( table ), hbox, 1, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND |GTK_FILL, 0, 0); - gtk_widget_show_all(hbox); - - // PHOTO DISPLAY - photo = gtk_check_button_new_with_mnemonic( _("_Display contact photo if available")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(photo), addressbook_config->display_contact_photo); - g_signal_connect (G_OBJECT(photo) , "clicked" , G_CALLBACK (display_contact_photo_cb), NULL); - gtk_table_attach ( GTK_TABLE( table ), photo, 1, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - - result_frame = gtk_frame_new(_("Fields")); - gtk_box_pack_start(GTK_BOX(ret), result_frame, FALSE, FALSE, 0); - gtk_widget_show (result_frame); - - table = gtk_table_new ( 5, 3, FALSE); - gtk_table_set_row_spacings( GTK_TABLE(table), 10); - gtk_table_set_col_spacings( GTK_TABLE(table), 10); - gtk_widget_show(table); - gtk_container_add( GTK_CONTAINER (result_frame) , table ); - - item = gtk_check_button_new_with_mnemonic( _("_Business phone")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_business); - g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_business_cb) , NULL); - gtk_table_attach ( GTK_TABLE( table ), item, 1, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - - item = gtk_check_button_new_with_mnemonic( _("_Home phone")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_home); - g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_home_cb) , NULL); - gtk_table_attach ( GTK_TABLE( table ), item, 1, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - - item = gtk_check_button_new_with_mnemonic( _("_Mobile phone")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_mobile); - g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_mobile_cb) , NULL); - gtk_table_attach ( GTK_TABLE( table ), item, 1, 3, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - - result_frame = gtk_frame_new(_("Books")); - gtk_box_pack_start(GTK_BOX(ret), result_frame, TRUE, TRUE, 0); - gtk_widget_show (result_frame); - - scrolled_window = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN); - - gtk_container_add( GTK_CONTAINER (result_frame) , scrolled_window ); - - store = gtk_list_store_new(3, - G_TYPE_BOOLEAN, // Active - G_TYPE_STRING, // uid - G_TYPE_STRING // Name - ); - - // Create tree view with list store - book_tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); - - // Get tree selection manager - tree_selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(book_tree_view)); - - // Active column - renderer = gtk_cell_renderer_toggle_new(); - tree_view_column = gtk_tree_view_column_new_with_attributes("", renderer, "active", COLUMN_BOOK_ACTIVE, NULL); - gtk_tree_view_append_column(GTK_TREE_VIEW(book_tree_view), tree_view_column); - - // Toggle active property on clicked - g_signal_connect(G_OBJECT(renderer), "toggled", G_CALLBACK(addressbook_config_book_active_toggled), (gpointer)book_tree_view); - - // Name column - renderer = gtk_cell_renderer_text_new(); - tree_view_column = gtk_tree_view_column_new_with_attributes(_("Name"), renderer, "markup", COLUMN_BOOK_NAME, NULL); - gtk_tree_view_append_column(GTK_TREE_VIEW(book_tree_view), tree_view_column); - - g_object_unref(G_OBJECT(store)); - gtk_container_add(GTK_CONTAINER(scrolled_window), book_tree_view); - - addressbook_config_fill_book_list(); - - gtk_widget_show_all(ret); - - return ret; + GtkWidget *ret, *result_frame, *table, *value, *label, *photo, *item; + + GtkListStore *store; + GtkCellRenderer *renderer; + GtkTreeSelection *tree_selection; + GtkTreeViewColumn *tree_view_column; + GtkWidget *scrolled_window, *hbox; + + // Load the user value + addressbook_config_load_parameters(&addressbook_config); + + ret = gtk_vbox_new(FALSE, 10); + gtk_container_set_border_width(GTK_CONTAINER(ret), 10); + + gnome_main_section_new (_("General"), &result_frame); + gtk_box_pack_start(GTK_BOX(ret), result_frame, FALSE, FALSE, 0); + gtk_widget_show (result_frame); + + table = gtk_table_new ( 3, 3, FALSE/* homogeneous */); + gtk_table_set_row_spacings( GTK_TABLE(table), 8); + gtk_table_set_col_spacings( GTK_TABLE(table), 8); + gtk_widget_show(table); + gtk_container_add( GTK_CONTAINER (result_frame) , table ); + + // PHOTO DISPLAY + item = gtk_check_button_new_with_mnemonic( _("_Use Evolution address books")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->enable); + g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (enable_cb), NULL); + gtk_table_attach ( GTK_TABLE( table ), item, 1, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + + // SCALE BUTTON - NUMBER OF RESULTS + hbox = gtk_hbox_new(FALSE, 0); + label = gtk_label_new (_("Download limit:")); + gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0); + value = gtk_spin_button_new_with_range(1, 500, 1); + gtk_label_set_mnemonic_widget (GTK_LABEL (label), value); + gtk_spin_button_set_value (GTK_SPIN_BUTTON( value ) , addressbook_config->max_results); + g_signal_connect (G_OBJECT (value) , "value-changed" , G_CALLBACK(max_results_cb), NULL ); + gtk_box_pack_start(GTK_BOX(hbox),value,TRUE,TRUE,10); + gtk_table_attach ( GTK_TABLE( table ), hbox, 1, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND |GTK_FILL, 0, 0); + gtk_widget_show_all(hbox); + + // PHOTO DISPLAY + photo = gtk_check_button_new_with_mnemonic( _("_Display contact photo if available")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(photo), addressbook_config->display_contact_photo); + g_signal_connect (G_OBJECT(photo) , "clicked" , G_CALLBACK (display_contact_photo_cb), NULL); + gtk_table_attach ( GTK_TABLE( table ), photo, 1, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + + + // Fields + gnome_main_section_new (_("Fields"), &result_frame); + gtk_box_pack_start(GTK_BOX(ret), result_frame, FALSE, FALSE, 0); + gtk_widget_show (result_frame); + + table = gtk_table_new ( 5, 3, FALSE); + gtk_table_set_row_spacings( GTK_TABLE(table), 8); + gtk_table_set_col_spacings( GTK_TABLE(table), 8); + gtk_widget_show(table); + gtk_container_add( GTK_CONTAINER (result_frame) , table ); + + label = gtk_label_new (_("Use the following fields from Evolution's address books:")); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + gtk_table_attach ( GTK_TABLE( table ), label, 1, 4, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + + + item = gtk_check_button_new_with_mnemonic( _("_Business phone")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_business); + g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_business_cb) , NULL); + gtk_table_attach ( GTK_TABLE( table ), item, 1, 4, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + + item = gtk_check_button_new_with_mnemonic( _("_Home phone")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_home); + g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_home_cb) , NULL); + gtk_table_attach ( GTK_TABLE( table ), item, 1, 4, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + + item = gtk_check_button_new_with_mnemonic( _("_Mobile phone")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_mobile); + g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_mobile_cb) , NULL); + gtk_table_attach ( GTK_TABLE( table ), item, 1, 4, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + + + // Address Book + gnome_main_section_new (_("Address Books"), &result_frame); + gtk_box_pack_start(GTK_BOX(ret), result_frame, TRUE, TRUE, 0); + gtk_widget_show (result_frame); + + table = gtk_table_new ( 2, 3, FALSE/* homogeneous */); + gtk_table_set_row_spacings( GTK_TABLE(table), 8); + gtk_table_set_col_spacings( GTK_TABLE(table), 8); + gtk_widget_show(table); + gtk_container_add( GTK_CONTAINER (result_frame) , table ); + + label = gtk_label_new (_("Select which Evolution address books to use:")); + gtk_misc_set_alignment(GTK_MISC(label), 0.00, 0.1); + + gtk_table_attach ( GTK_TABLE( table ), label, 1, 4, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + + scrolled_window = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN); + + gtk_table_attach ( GTK_TABLE( table ), scrolled_window, 1, 4, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + + + store = gtk_list_store_new(3, + G_TYPE_BOOLEAN, // Active + G_TYPE_STRING, // uid + G_TYPE_STRING // Name + ); + + // Create tree view with list store + book_tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); + + // Get tree selection manager + tree_selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(book_tree_view)); + + // Active column + renderer = gtk_cell_renderer_toggle_new(); + tree_view_column = gtk_tree_view_column_new_with_attributes("", renderer, "active", COLUMN_BOOK_ACTIVE, NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(book_tree_view), tree_view_column); + + // Toggle active property on clicked + g_signal_connect(G_OBJECT(renderer), "toggled", G_CALLBACK(addressbook_config_book_active_toggled), (gpointer)book_tree_view); + + // Name column + renderer = gtk_cell_renderer_text_new(); + tree_view_column = gtk_tree_view_column_new_with_attributes(_("Name"), renderer, "markup", COLUMN_BOOK_NAME, NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(book_tree_view), tree_view_column); + + g_object_unref(G_OBJECT(store)); + gtk_container_add(GTK_CONTAINER(scrolled_window), book_tree_view); + + addressbook_config_fill_book_list(); + + gtk_widget_show_all(ret); + + return ret; } -gboolean + gboolean addressbook_display(AddressBook_Config *settings, const gchar *field) { - gboolean display = FALSE; + gboolean display = FALSE; - if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_CONTACT_PHOTO) == 0) - display = (settings->display_contact_photo == 1) ? TRUE : FALSE; + if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_CONTACT_PHOTO) == 0) + display = (settings->display_contact_photo == 1) ? TRUE : FALSE; - else if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_PHONE_BUSINESS) == 0) - display = (settings->search_phone_business == 1) ? TRUE : FALSE; + else if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_PHONE_BUSINESS) == 0) + display = (settings->search_phone_business == 1) ? TRUE : FALSE; - else if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_PHONE_HOME) == 0) - display = (settings->search_phone_home == 1) ? TRUE : FALSE; + else if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_PHONE_HOME) == 0) + display = (settings->search_phone_home == 1) ? TRUE : FALSE; - else if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_PHONE_MOBILE) == 0) - display = (settings->search_phone_mobile == 1) ? TRUE : FALSE; + else if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_PHONE_MOBILE) == 0) + display = (settings->search_phone_mobile == 1) ? TRUE : FALSE; - else - display = FALSE; + else + display = FALSE; - return display; + return display; } diff --git a/sflphone-client-gnome/src/config/addressbook-config.h b/sflphone-client-gnome/src/config/addressbook-config.h index ec7a8d16360e56090421b60120bcd26cd63221b7..e2b5530d37cd044fa693c37575352d775f6d464f 100644 --- a/sflphone-client-gnome/src/config/addressbook-config.h +++ b/sflphone-client-gnome/src/config/addressbook-config.h @@ -24,9 +24,11 @@ #include <glib/gtypes.h> #include "actions.h" +#include <utils.h> G_BEGIN_DECLS +#define ADDRESSBOOK_ENABLE "ADDRESSBOOK_ENABLE" #define ADDRESSBOOK_MAX_RESULTS "ADDRESSBOOK_MAX_RESULTS" #define ADDRESSBOOK_DISPLAY_CONTACT_PHOTO "ADDRESSBOOK_DISPLAY_CONTACT_PHOTO" #define ADDRESSBOOK_DISPLAY_PHONE_BUSINESS "ADDRESSBOOK_DISPLAY_PHONE_BUSINESS" @@ -35,11 +37,12 @@ G_BEGIN_DECLS typedef struct _AddressBook_Config { - guint max_results; - guint display_contact_photo; - guint search_phone_home; - guint search_phone_business; - guint search_phone_mobile; + guint enable; + guint max_results; + guint display_contact_photo; + guint search_phone_home; + guint search_phone_business; + guint search_phone_mobile; } AddressBook_Config; /** diff --git a/sflphone-client-gnome/src/config/audioconf.c b/sflphone-client-gnome/src/config/audioconf.c index 82a324f689d3f95b98f23167a863514b3c4d73c8..7d4e0ee0ac17c483cbc30b82fe3dfe4e1455c93d 100644 --- a/sflphone-client-gnome/src/config/audioconf.c +++ b/sflphone-client-gnome/src/config/audioconf.c @@ -18,6 +18,7 @@ */ #include <audioconf.h> +#include <utils.h> GtkListStore *pluginlist; GtkListStore *outputlist; @@ -389,7 +390,7 @@ codec_active_toggled(GtkCellRendererToggle *renderer UNUSED, gchar *path, gpoint COLUMN_CODEC_FREQUENCY, &srate, -1); - printf("%s, %s\n", name, srate); + // printf("%s, %s\n", name, srate); // codec_list_get_by_name(name); if ((strcmp(name,"speex")==0) && (strcmp(srate,"8 kHz")==0)) @@ -615,7 +616,7 @@ GtkWidget* codecs_box() select_audio_manager( void ) { - DEBUG("audio manager selected"); + DEBUG("audio manager selected\n"); if( !SHOW_ALSA_CONF && !gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(pulse) ) ) { @@ -624,12 +625,15 @@ select_audio_manager( void ) alsabox = alsa_box(); gtk_container_add( GTK_CONTAINER(alsa_conf ) , alsabox); gtk_widget_show( alsa_conf ); + gtk_widget_set_sensitive(GTK_WIDGET(alsa_conf), TRUE); } else if( SHOW_ALSA_CONF && gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(pulse) )) { dbus_set_audio_manager( PULSEAUDIO ); DEBUG(" remove alsa conf panel"); gtk_container_remove( GTK_CONTAINER(alsa_conf) , alsabox ); + gtk_widget_hide( alsa_conf ); + // gtk_widget_set_sensitive(GTK_WIDGET(alsa_conf), FALSE); } else DEBUG("alsa conf panel...nothing"); @@ -652,7 +656,7 @@ GtkWidget* api_box() gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(alsa), SHOW_ALSA_CONF ); gtk_box_pack_end( GTK_BOX(ret) , alsa , TRUE , TRUE , 1); g_signal_connect(G_OBJECT(alsa), "clicked", G_CALLBACK(select_audio_manager), NULL); - + // gtk_misc_set_alignment(GTK_MISC(alsa), 0.2, 0.4); gtk_widget_show_all(ret); return ret; @@ -752,6 +756,7 @@ GtkWidget* ringtones_box() // check button to enable ringtones ret = gtk_hbox_new( TRUE , 1); enableTone = gtk_check_button_new_with_mnemonic( _("_Enable ringtones")); + // gtk_misc_set_alignment(GTK_MISC(enableTone), 0.2, 0.5); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(enableTone), dbus_is_ringtone_enabled() ); gtk_box_pack_start( GTK_BOX(ret) , enableTone , TRUE , TRUE , 1); g_signal_connect(G_OBJECT( enableTone) , "clicked" , G_CALLBACK( ringtone_enabled ) , NULL); @@ -774,16 +779,28 @@ GtkWidget* ringtones_box() GtkWidget* noise_box() { GtkWidget *ret; + GtkWidget *enableVoiceActivity; GtkWidget *enableNoiseReduction; // check button to enable ringtones ret = gtk_hbox_new( TRUE , 1); - enableNoiseReduction = gtk_check_button_new_with_mnemonic( _("_Activate silence detection")); + + enableVoiceActivity = gtk_check_button_new_with_mnemonic( _("_Voice Activity Detection")); + //TODO Use the value from D-BUS + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(enableVoiceActivity), FALSE ); + gtk_box_pack_start( GTK_BOX(ret) , enableVoiceActivity , TRUE , TRUE , 1); + //TODO Enable it + //gtk_widget_set_sensitive(GTK_WIDGET(noise_conf), FALSE); + //TODO Add a callback function + //g_signal_connect(G_OBJECT( enableNoiseReduction) , "clicked" , NULL , NULL); + + + enableNoiseReduction = gtk_check_button_new_with_mnemonic( _("_Noise Reduction (Narrow-Band Companding)")); //TODO Use the value from D-BUS gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(enableNoiseReduction), FALSE ); gtk_box_pack_start( GTK_BOX(ret) , enableNoiseReduction , TRUE , TRUE , 1); //TODO Enable it - gtk_widget_set_sensitive(GTK_WIDGET(noise_conf), FALSE); + // gtk_widget_set_sensitive(GTK_WIDGET(noise_conf), FALSE); //TODO Add a callback function //g_signal_connect(G_OBJECT( enableNoiseReduction) , "clicked" , NULL , NULL); @@ -806,24 +823,31 @@ GtkWidget* create_audio_configuration() gtk_container_set_border_width(GTK_CONTAINER(ret), 10); // Box for the audio manager selection - sound_conf = gtk_frame_new(_("Sound Manager")); + gnome_main_section_new (_("Sound Manager"), &sound_conf); gtk_box_pack_start(GTK_BOX(ret), sound_conf, FALSE, FALSE, 0); gtk_widget_show( sound_conf ); box = api_box(); gtk_container_add( GTK_CONTAINER(sound_conf) , box ); // Box for the ALSA configuration - alsa_conf = gtk_frame_new(_("ALSA configuration")); + gnome_main_section_new (_("ALSA configuration"), &alsa_conf); gtk_box_pack_start(GTK_BOX(ret), alsa_conf, FALSE, FALSE, 0); + // gtk_widget_hide( GTK_CONTAINER(alsa_conf) ); gtk_widget_show( alsa_conf ); if( SHOW_ALSA_CONF ) { + // Box for the ALSA configuration + // alsa_conf = gtk_frame_new(_("ALSA configuration")); + // gtk_box_pack_start(GTK_BOX(ret), alsa_conf, FALSE, FALSE, 0); + printf("ALSA Created \n"); alsabox = alsa_box(); gtk_container_add( GTK_CONTAINER(alsa_conf) , alsabox ); + gtk_widget_hide( alsa_conf ); } + // Box for the codecs - codecs_conf = gtk_frame_new(_("Codecs")); + gnome_main_section_new (_("Codecs"), &codecs_conf); gtk_box_pack_start(GTK_BOX(ret), codecs_conf, FALSE, FALSE, 0); gtk_widget_set_size_request(GTK_WIDGET(codecs_conf), -1, 200); gtk_widget_show( codecs_conf ); @@ -831,14 +855,22 @@ GtkWidget* create_audio_configuration() gtk_container_add( GTK_CONTAINER(codecs_conf) , box ); // Box for noise reduction - noise_conf = gtk_frame_new(_("Noise reduction")); + // removed until the functions are implemented + + /* + noise_conf = gtk_frame_new(_("Audio Processing")); +======= + gnome_main_section_new (_("Noise reduction"), &noise_conf); +>>>>>>> master:sflphone-client-gnome/src/config/audioconf.c gtk_box_pack_start(GTK_BOX(ret), noise_conf, FALSE, FALSE, 0); gtk_widget_show( noise_conf ); box = noise_box(); gtk_container_add( GTK_CONTAINER(noise_conf) , box ); + gtk_widget_set_sensitive(GTK_WIDGET(noise_conf), FALSE); + */ // Box for the ringtones - ringtones_conf = gtk_frame_new(_("Ringtones")); + gnome_main_section_new (_("Ringtones"), &ringtones_conf); gtk_box_pack_start(GTK_BOX(ret), ringtones_conf, FALSE, FALSE, 0); gtk_widget_show( ringtones_conf ); box = ringtones_box(); @@ -846,5 +878,12 @@ GtkWidget* create_audio_configuration() gtk_widget_show_all(ret); + if( SHOW_ALSA_CONF ) { + gtk_widget_show( alsa_conf ); + } + else{ + gtk_widget_hide( alsa_conf ); + } + return ret; } diff --git a/sflphone-client-gnome/src/config/configwindow.c b/sflphone-client-gnome/src/config/configwindow.c index 7a73328371f20663c6ea49b21357ed4e58f65497..e120047410dc5172d7af4cd2606db6737aaf10b7 100644 --- a/sflphone-client-gnome/src/config/configwindow.c +++ b/sflphone-client-gnome/src/config/configwindow.c @@ -31,6 +31,7 @@ #include <audioconf.h> #include <addressbook-config.h> #include <hooks-config.h> +#include <utils.h> #include <stdlib.h> #include <stdio.h> @@ -73,6 +74,10 @@ enum { COLUMN_ACCOUNT_COUNT }; +// Mail notification +GtkWidget * widg; + + /** * Fills the treelist with accounts @@ -160,6 +165,14 @@ set_popup_mode( void ) set_notif_level( ) { dbus_set_notify(); + + if (dbus_get_notify()) + gtk_widget_set_sensitive(widg, TRUE); + else { + gtk_widget_set_sensitive(widg, FALSE); + if (dbus_get_mail_notify()) + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(widg), FALSE); + } } void @@ -485,7 +498,7 @@ void update_registration( void ) GtkWidget* create_stun_tab() { GtkWidget * tableNat; - gchar * stun_server= "stun.ekiga.net:3478"; + gchar * stun_server= "stun.sflphone.org:3478"; gchar * stun_enabled = "FALSE"; GtkWidget * label; @@ -531,6 +544,7 @@ GtkWidget* create_stun_tab() + GtkWidget* create_general_settings () { @@ -540,12 +554,12 @@ create_general_settings () GtkWidget *ret; - GtkWidget *notifFrame; GtkWidget *notifBox; GtkWidget *notifAll; - GtkWidget *widg; + // GtkWidget *widg; + + GtkWidget *mutewidget; - GtkWidget *trayFrame; GtkWidget *trayBox; GtkWidget *trayItem; @@ -562,32 +576,39 @@ create_general_settings () gtk_container_set_border_width(GTK_CONTAINER(ret), 10); // Notifications Frame - notifFrame = gtk_frame_new(_("Desktop Notification")); - gtk_box_pack_start(GTK_BOX(ret), notifFrame, FALSE, FALSE, 0); - gtk_widget_show( notifFrame ); + gnome_main_section_new (_("Desktop Notifications"), &frame); + gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0); notifBox = gtk_vbox_new(FALSE, 10); gtk_widget_show( notifBox ); - gtk_container_add( GTK_CONTAINER(notifFrame) , notifBox); + gtk_container_add( GTK_CONTAINER(frame) , notifBox); + gtk_container_set_border_width(GTK_CONTAINER(notifBox), 2); - notifAll = gtk_check_button_new_with_mnemonic( _("_Enable")); + // Notification All + notifAll = gtk_check_button_new_with_mnemonic( _("_Enable notifications")); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(notifAll), dbus_get_notify() ); gtk_box_pack_start( GTK_BOX(notifBox) , notifAll , TRUE , TRUE , 1); g_signal_connect(G_OBJECT( notifAll ) , "clicked" , G_CALLBACK( set_notif_level ) , NULL ); - - widg = gtk_check_button_new_with_mnemonic( _("_Notify voice mails")); + + // Notification + widg = gtk_check_button_new_with_mnemonic( _("Enable voicemail _notifications")); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(widg), dbus_get_mail_notify() ); gtk_box_pack_start( GTK_BOX(notifBox) , widg , TRUE , TRUE , 1); g_signal_connect(G_OBJECT( widg ) , "clicked" , G_CALLBACK( set_mail_notif ) , NULL); + if (dbus_get_notify()) + gtk_widget_set_sensitive(widg, TRUE); + else + gtk_widget_set_sensitive(widg, FALSE); + // System Tray option frame - trayFrame = gtk_frame_new(_("System Tray Icon")); - gtk_box_pack_start(GTK_BOX(ret), trayFrame, FALSE, FALSE, 0); - gtk_widget_show( trayFrame ); + gnome_main_section_new (_("System Tray Icon"), &frame); + gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); trayBox = gtk_vbox_new(FALSE, 10); gtk_widget_show( trayBox ); - gtk_container_add( GTK_CONTAINER(trayFrame) , trayBox); + gtk_container_add( GTK_CONTAINER(frame) , trayBox); GtkWidget* trayItem1 = gtk_radio_button_new_with_mnemonic(NULL, _("_Popup main window on incoming call")); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(trayItem1), dbus_popup_mode() ); @@ -598,37 +619,38 @@ create_general_settings () gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(trayItem), !dbus_popup_mode() ); gtk_box_pack_start( GTK_BOX(trayBox) , trayItem , TRUE , TRUE , 1); - trayItem = gtk_check_button_new_with_mnemonic(_("_Start hidden")); + trayItem = gtk_check_button_new_with_mnemonic(_("Hide SFLphone window on _startup")); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(trayItem), dbus_is_start_hidden() ); gtk_box_pack_start( GTK_BOX(trayBox) , trayItem , TRUE , TRUE , 1); g_signal_connect(G_OBJECT( trayItem ) , "clicked" , G_CALLBACK( start_hidden ) , NULL); /** HISTORY CONFIGURATION */ - frame = gtk_frame_new(_("Calls History")); + gnome_main_section_new (_("Calls History"), &frame); gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0); gtk_widget_show( frame ); - vbox = gtk_vbox_new(FALSE, 10); - gtk_widget_show( vbox ); - gtk_container_add( GTK_CONTAINER(frame) , vbox); + hbox = gtk_hbox_new(FALSE, 10); + gtk_widget_show( hbox ); + gtk_container_add( GTK_CONTAINER(frame) , hbox); - label = gtk_label_new_with_mnemonic(_("_Maximum number of calls")); - gtk_box_pack_start( GTK_BOX(vbox) , label , TRUE , TRUE , 0); + label = gtk_label_new_with_mnemonic(_("_History size limit")); + gtk_misc_set_alignment(GTK_MISC(label), 0.03, 0.4); + gtk_box_pack_start( GTK_BOX(hbox) , label , TRUE , TRUE , 0); value = gtk_hscale_new_with_range(0.0 , 50.0 , 5.0); gtk_label_set_mnemonic_widget (GTK_LABEL (label), value); gtk_scale_set_digits( GTK_SCALE(value) , 0); gtk_scale_set_value_pos( GTK_SCALE(value) , GTK_POS_RIGHT); gtk_range_set_value( GTK_RANGE( value ) , dbus_get_max_calls()); - gtk_box_pack_start( GTK_BOX(vbox) , value , TRUE , TRUE , 0); + gtk_box_pack_start( GTK_BOX(hbox) , value , TRUE , TRUE , 0); g_signal_connect( G_OBJECT( value) , "value-changed" , G_CALLBACK( update_max_value ) , NULL); cleanButton = gtk_button_new_from_stock( GTK_STOCK_CLEAR ); - gtk_box_pack_end( GTK_BOX(vbox) , cleanButton , FALSE , TRUE , 0); + gtk_box_pack_end( GTK_BOX(hbox) , cleanButton , FALSE , TRUE , 0); g_signal_connect( G_OBJECT( cleanButton ) , "clicked" , G_CALLBACK( clean_history ) , NULL); /** PULSEAUDIO CONFIGURATION */ - frame = gtk_frame_new( _("PulseAudio sound server")); + gnome_main_section_new (_("PulseAudio sound server"), &frame); gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0); gtk_widget_show( frame ); @@ -636,10 +658,10 @@ create_general_settings () gtk_widget_show( vbox ); gtk_container_add( GTK_CONTAINER(frame) , vbox); - widg = gtk_check_button_new_with_mnemonic( _("_Control running applications volume")); - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(widg), dbus_get_pulse_app_volume_control() ); - gtk_box_pack_start( GTK_BOX(vbox) , widg , TRUE , TRUE , 1); - g_signal_connect(G_OBJECT( widg ) , "clicked" , G_CALLBACK( set_pulse_app_volume_control ) , NULL); + mutewidget = gtk_check_button_new_with_mnemonic( _("Mute other applications during a _call")); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(mutewidget), dbus_get_pulse_app_volume_control() ); + gtk_box_pack_start( GTK_BOX(vbox) , mutewidget , TRUE , TRUE , 1); + g_signal_connect(G_OBJECT( mutewidget ) , "clicked" , G_CALLBACK( set_pulse_app_volume_control ) , NULL); n = account_list_get_sip_account_number(); DEBUG("sip account number = %i", n); @@ -649,7 +671,7 @@ create_general_settings () if(curPort <= 0 || curPort > 65535) curPort = 5060; - frame = gtk_frame_new( _("SIP Port")); + gnome_main_section_new (_("SIP Port"), &frame); gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0); gtk_widget_show( frame ); gtk_widget_set_sensitive( GTK_WIDGET(frame), (n==0)?FALSE:TRUE ); @@ -663,7 +685,7 @@ create_general_settings () //gtk_widget_set_sensitive( GTK_WIDGET(applyButton), (n==0)?FALSE:TRUE ); label = gtk_label_new(_("Port:")); - + gtk_misc_set_alignment(GTK_MISC(label), 0.03, 0.4); entryPort = gtk_spin_button_new_with_range(1, 65535, 1); gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryPort); gtk_spin_button_set_value(GTK_SPIN_BUTTON(entryPort), curPort); @@ -707,9 +729,8 @@ create_recording_settings () gtk_container_set_border_width(GTK_CONTAINER(ret), 10); // Recorded file saving path - savePathFrame = gtk_frame_new(_("General")); + gnome_main_section_new (_("General"), &savePathFrame); gtk_box_pack_start(GTK_BOX(ret), savePathFrame, FALSE, FALSE, 5); - gtk_widget_show(savePathFrame); table = gtk_table_new(1, 2, FALSE); gtk_table_set_row_spacings( GTK_TABLE(table), 10); @@ -720,7 +741,7 @@ create_recording_settings () // label label = gtk_label_new_with_mnemonic(_("_Recordings folder")); gtk_table_attach( GTK_TABLE(table), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + gtk_misc_set_alignment(GTK_MISC(label), 0.08, 0.5); // folder chooser button @@ -758,7 +779,7 @@ show_config_window () // Set window properties gtk_dialog_set_has_separator(dialog, FALSE); - gtk_window_set_default_size(GTK_WINDOW(dialog), 400, 400); + gtk_window_set_default_size(GTK_WINDOW(dialog), 600, 400); gtk_container_set_border_width(GTK_CONTAINER(dialog), 0); // Create tabs container @@ -792,11 +813,12 @@ show_config_window () gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tab, gtk_label_new(_("Hooks"))); gtk_notebook_page_num(GTK_NOTEBOOK(notebook), tab); - gtk_notebook_set_current_page( GTK_NOTEBOOK( notebook) , 1); + gtk_notebook_set_current_page( GTK_NOTEBOOK( notebook) , 0); result = gtk_dialog_run(dialog); save_configuration_parameters (); + toolbar_update_buttons(); dialogOpen = FALSE; @@ -824,10 +846,10 @@ show_accounts_window( void ) // Set window properties gtk_dialog_set_has_separator(dialog, FALSE); - gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 500); + gtk_window_set_default_size(GTK_WINDOW(dialog), 600, 500); gtk_container_set_border_width(GTK_CONTAINER(dialog), 0); - accountFrame = gtk_frame_new( _("Accounts previously setup")); + gnome_main_section_new (_("Configured Accounts"), &accountFrame); gtk_box_pack_start( GTK_BOX( dialog->vbox ), accountFrame , TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(accountFrame), 10); gtk_widget_show(accountFrame); @@ -838,7 +860,7 @@ show_accounts_window( void ) gtk_container_add(GTK_CONTAINER(accountFrame) , tab); // Stun Frame, displayed only if at least 1 SIP account is configured - stunFrame = gtk_frame_new(_("Network Address Translation")); + gnome_main_section_new (_("Network Address Translation"), &stunFrame); gtk_box_pack_start( GTK_BOX( dialog->vbox ), stunFrame , TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(stunFrame), 10); gtk_widget_show(stunFrame); @@ -857,8 +879,6 @@ show_accounts_window( void ) accDialogOpen=FALSE; gtk_widget_destroy(GTK_WIDGET(dialog)); - if( account_list_get_size() >0 && account_list_get_current()==NULL ) - account_list_set_current_pos(0); toolbar_update_buttons(); } diff --git a/sflphone-client-gnome/src/config/hooks-config.c b/sflphone-client-gnome/src/config/hooks-config.c index e692bda503c3ca367d678e4090336fe061ec4edd..4d9ece57aee93ab4d5dc109dc0dfce7ecfd6b265 100644 --- a/sflphone-client-gnome/src/config/hooks-config.c +++ b/sflphone-client-gnome/src/config/hooks-config.c @@ -127,62 +127,66 @@ GtkWidget* create_hooks_settings (){ ret = gtk_vbox_new(FALSE, 10); gtk_container_set_border_width(GTK_CONTAINER(ret), 10); - frame = gtk_frame_new(_("URL argument")); + gnome_main_section_new (_("URL Passing"), &frame); gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0); gtk_widget_show (frame); - table = gtk_table_new ( 5, 3, FALSE/* homogeneous */); + table = gtk_table_new ( 6, 2, FALSE/* homogeneous */); gtk_table_set_row_spacings( GTK_TABLE(table), 10); gtk_table_set_col_spacings( GTK_TABLE(table), 10); gtk_widget_show(table); gtk_container_add( GTK_CONTAINER (frame) , table ); - widg = gtk_check_button_new_with_mnemonic( _("_SIP protocol")); + label = gtk_label_new(_("SFLphone can run custom commands if incoming calls come with an URL attached.\nIn this case, %s will be replaced with the passed URL.")); + gtk_table_attach ( GTK_TABLE( table ), label, 0, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + + widg = gtk_check_button_new_with_mnemonic( _("Trigger on specific _SIP header")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(widg), (g_strcasecmp (_urlhook_config->sip_enabled, "1")==0)?TRUE:FALSE); g_signal_connect (G_OBJECT(widg) , "clicked" , G_CALLBACK (sip_enabled_cb), NULL); gtk_table_attach ( GTK_TABLE( table ), widg, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - label = gtk_label_new_with_mnemonic (_("_SIP Header: ")); - gtk_table_attach ( GTK_TABLE( table ), label, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + // label = gtk_label_new_with_mnemonic (_("FIXME: ")); + // gtk_table_attach ( GTK_TABLE( table ), label, 1, 2, 1, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); field = gtk_entry_new (); gtk_label_set_mnemonic_widget (GTK_LABEL (label), field); gtk_entry_set_text(GTK_ENTRY(field), _urlhook_config->sip_field); - gtk_table_attach ( GTK_TABLE( table ), field, 2, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + gtk_table_attach ( GTK_TABLE( table ), field, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - widg = gtk_check_button_new_with_mnemonic( _("_IAX2 protocol")); + widg = gtk_check_button_new_with_mnemonic( _("Trigger on _IAX2 URL")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(widg), (g_strcasecmp (_urlhook_config->iax2_enabled, "1")==0)?TRUE:FALSE); g_signal_connect (G_OBJECT(widg) , "clicked" , G_CALLBACK (iax2_enabled_cb), NULL); - gtk_table_attach ( GTK_TABLE( table ), widg, 0, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + gtk_table_attach ( GTK_TABLE( table ), widg, 0, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - label = gtk_label_new_with_mnemonic (_("_Command: ")); + label = gtk_label_new_with_mnemonic (_("_Command to run: ")); + gtk_misc_set_alignment(GTK_MISC(label), 0.05, 0.5); gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); command = gtk_entry_new (); gtk_label_set_mnemonic_widget (GTK_LABEL (label), command); gtk_entry_set_text(GTK_ENTRY(command), _urlhook_config->command); gtk_table_attach ( GTK_TABLE( table ), command, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 10); - frame = gtk_frame_new(_("Phone number formatting")); + gnome_main_section_new (_("Phone Number Rewriting"), &frame); gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0); gtk_widget_show (frame); - table = gtk_table_new ( 2, 2, FALSE/* homogeneous */); + table = gtk_table_new ( 4, 2, FALSE/* homogeneous */); gtk_table_set_row_spacings( GTK_TABLE(table), 10); gtk_table_set_col_spacings( GTK_TABLE(table), 10); gtk_widget_show(table); gtk_container_add( GTK_CONTAINER (frame) , table ); - widg = gtk_check_button_new_with_mnemonic( _("_Add phone number prefix")); + widg = gtk_check_button_new_with_mnemonic( _("_Prefix dialed numbers with:")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(widg), (g_strcasecmp (_urlhook_config->phone_number_enabled, "1")==0)?TRUE:FALSE); g_signal_connect (G_OBJECT(widg) , "clicked" , G_CALLBACK (phone_number_enabled_cb), NULL); - gtk_table_attach ( GTK_TABLE( table ), widg, 0, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + gtk_table_attach ( GTK_TABLE( table ), widg, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - label = gtk_label_new_with_mnemonic (_("_Prepend: ")); - gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + // label = gtk_label_new (_("Prepend: ")); + // gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); prefix = gtk_entry_new (); gtk_label_set_mnemonic_widget (GTK_LABEL (label), prefix); gtk_entry_set_text(GTK_ENTRY(prefix), _urlhook_config->phone_number_prefix); gtk_widget_set_sensitive (GTK_WIDGET (prefix), gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widg))); - gtk_table_attach ( GTK_TABLE( table ), prefix, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 10); + gtk_table_attach ( GTK_TABLE( table ), prefix, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 10); gtk_widget_show_all(ret); diff --git a/sflphone-client-gnome/src/config/hooks-config.h b/sflphone-client-gnome/src/config/hooks-config.h index fe9c92c62f0be2ea37ba16869303e481297d6ef6..d4651fbe3729deb99910b26ef0cd2bf2ab4bcb8c 100644 --- a/sflphone-client-gnome/src/config/hooks-config.h +++ b/sflphone-client-gnome/src/config/hooks-config.h @@ -28,7 +28,7 @@ G_BEGIN_DECLS #define DEFAULT_SIP_URL_FIELD "X-sflphone-url" -#define DEFAULT_URL_COMMAND "x-www-browser" +#define DEFAULT_URL_COMMAND "xdg-open \"%s\"" #define URLHOOK_COMMAND "URLHOOK_COMMAND" #define URLHOOK_SIP_FIELD "URLHOOK_SIP_FIELD" #define URLHOOK_SIP_ENABLED "URLHOOK_SIP_ENABLED" diff --git a/sflphone-client-gnome/src/config/utils.c b/sflphone-client-gnome/src/config/utils.c new file mode 100644 index 0000000000000000000000000000000000000000..0fdb4003c8a4849f6225c3014180aef9daf0c553 --- /dev/null +++ b/sflphone-client-gnome/src/config/utils.c @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2009 Savoir-Faire Linux inc. + * Author: Emmanuel Milou <emmanuel.milou@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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "utils.h" + +void gnome_main_section_new (gchar *title, GtkWidget **frame) +{ + GtkWidget *_frame, *label; + PangoAttrList *attrs = NULL; + PangoAttribute *attr = NULL; + + attrs = pango_attr_list_new (); + attr = pango_attr_weight_new (PANGO_WEIGHT_BOLD); + attr->start_index = 0; + attr->end_index = -1; + pango_attr_list_insert (attrs, attr); + + _frame = gtk_frame_new (title); + gtk_frame_set_shadow_type (GTK_FRAME (_frame), GTK_SHADOW_NONE); + gtk_container_set_border_width(GTK_CONTAINER(_frame), 2); + + label = gtk_frame_get_label_widget (GTK_FRAME (_frame)); + gtk_label_set_attributes (GTK_LABEL (label), attrs); + pango_attr_list_unref (attrs); + + *frame = _frame; +} + + + diff --git a/sflphone-client-gnome/src/config/utils.h b/sflphone-client-gnome/src/config/utils.h new file mode 100644 index 0000000000000000000000000000000000000000..e52ed7acb14c08d0fa38779559066b63d0ca6f26 --- /dev/null +++ b/sflphone-client-gnome/src/config/utils.h @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2009 Savoir-Faire Linux inc. + * Author: Emmanuel Milou <emmanuel.milou@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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef _UTILS_ +#define _UTILS_ + +#include <gtk/gtk.h> + +G_BEGIN_DECLS + +void gnome_main_section_new (gchar *title, GtkWidget**); + +G_END_DECLS + +#endif // _UTILS_ diff --git a/sflphone-client-gnome/src/contacts/addressbook.c b/sflphone-client-gnome/src/contacts/addressbook.c index c9fa4dcbcf230668ed5e21958886d3dcaebcce00..5043c040fd30e0dda2971c0df1d2e107f357a8ec 100644 --- a/sflphone-client-gnome/src/contacts/addressbook.c +++ b/sflphone-client-gnome/src/contacts/addressbook.c @@ -46,6 +46,20 @@ addressbook_search(GtkEntry* entry) addressbook_config); } +/** + * Return addressbook state + */ +gboolean +addressbook_is_enabled() +{ + AddressBook_Config *addressbook_config; + + // Load the address book parameters + addressbook_config_load_parameters(&addressbook_config); + + return (guint)addressbook_config->enable; +} + /** * Return addressbook state */ @@ -55,6 +69,15 @@ addressbook_is_ready() return books_ready(); } +/** + * Return TRUE if at least one addressbook is active + */ +gboolean +addressbook_is_active() +{ + return books_active(); +} + /** * Asynchronous open callback. * Used to handle activation of books. diff --git a/sflphone-client-gnome/src/contacts/addressbook.h b/sflphone-client-gnome/src/contacts/addressbook.h index f83aefaf5bf6a93f1ec61c8e51e6c1dce87c75ba..08b79188d04c7836161d7557114b26a50d598638 100644 --- a/sflphone-client-gnome/src/contacts/addressbook.h +++ b/sflphone-client-gnome/src/contacts/addressbook.h @@ -35,6 +35,19 @@ gboolean addressbook_is_ready(); +/** + * Return addressbook state + */ +gboolean +addressbook_is_enabled(); + +/** + * Return if at least one addressbook is active + */ +gboolean +addressbook_is_active(); + + /** * Perform a search in addressbook */ diff --git a/sflphone-client-gnome/src/contacts/addressbook/eds.c b/sflphone-client-gnome/src/contacts/addressbook/eds.c index 8d26070a47af2268db4a84020bccb0061c03ad9f..4303109b741c4c7c9ccff471f1570246aa983629 100644 --- a/sflphone-client-gnome/src/contacts/addressbook/eds.c +++ b/sflphone-client-gnome/src/contacts/addressbook/eds.c @@ -91,6 +91,27 @@ books_ready() return (g_slist_length(books_data) > 0); } +/** + * Public way to know if we enable at least one address book + */ +gboolean +books_active() +{ + GSList *book_list_iterator; + book_data_t *book_data; + + // Iterate throw the list + for (book_list_iterator = books_data; book_list_iterator != NULL; book_list_iterator + = book_list_iterator->next) + { + book_data = (book_data_t *) book_list_iterator->data; + if (book_data->active) + return TRUE; + } + + // If no result + return FALSE; +} /** * Get a specific book data by UID */ diff --git a/sflphone-client-gnome/src/contacts/addressbook/eds.h b/sflphone-client-gnome/src/contacts/addressbook/eds.h index 7248c2c3a0f481b21e053b0810910904d37843c3..574cd941df84fa80e98d64fa01c26c5f01e85d8b 100644 --- a/sflphone-client-gnome/src/contacts/addressbook/eds.h +++ b/sflphone-client-gnome/src/contacts/addressbook/eds.h @@ -118,6 +118,12 @@ books_get_book_data_by_uid(gchar *uid); gboolean books_ready(); +/** + * Public way to know if we enabled an address book + */ +gboolean +books_active(); + /** * Good method to retrieve books_data (handle async) */ diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c index 0dd939b6e6ea9bd250b89852d56d397588a3e828..6c6e771dc308c92c1584a30e9b7c033c0b2b6220 100644 --- a/sflphone-client-gnome/src/contacts/calltree.c +++ b/sflphone-client-gnome/src/contacts/calltree.c @@ -23,6 +23,15 @@ #include <glib/gprintf.h> #include <calllist.h> #include <toolbar.h> +#include <mainwindow.h> + + +GtkWidget *sw; +GtkCellRenderer *rend; +GtkTreeViewColumn *col; +GtkTreeSelection *sel; + + /** * Show popup menu @@ -53,6 +62,8 @@ selected(GtkTreeSelection *sel, void* data UNUSED ) g_value_unset(&val); toolbar_update_buttons(); + + // set_focus_on_mainwindow(); } /* A row is activated when it is double clicked */ @@ -115,28 +126,6 @@ void row_activated(GtkTreeView *tree_view UNUSED, } } - static gboolean -on_key_released (GtkWidget *widget UNUSED, - GdkEventKey *event, - gpointer user_data UNUSED) -{ - // If a modifier key is pressed, it's a shortcut, pass along - if(event->state & GDK_CONTROL_MASK || - event->state & GDK_MOD1_MASK || - event->keyval == 60 || // < - event->keyval == 62 || // > - event->keyval == 34 || // " - event->keyval == 65361 || // left arrow - event->keyval == 65363 || // right arrow - event->keyval >= 65470 || // F-keys - event->keyval == 32 // space - ) - return FALSE; - else - sflphone_keypad(event->keyval, event->string); - return TRUE; -} - static gboolean button_pressed(GtkWidget* widget, GdkEventButton *event, gpointer user_data UNUSED) { @@ -160,6 +149,32 @@ button_pressed(GtkWidget* widget, GdkEventButton *event, gpointer user_data UNUS return FALSE; } + + static gboolean +on_key_released (GtkWidget *widget UNUSED, + GdkEventKey *event, + gpointer user_data UNUSED) +{ + DEBUG("key-release-event signal cought by on_key_released callback \n"); + // If a modifier key is pressed, it's a shortcut, pass along + if(event->state & GDK_CONTROL_MASK || + event->state & GDK_MOD1_MASK || + event->keyval == 60 || // < + event->keyval == 62 || // > + event->keyval == 34 || // " + event->keyval == 65361 || // left arrow + event->keyval == 65363 || // right arrow + event->keyval >= 65470 || // F-keys + event->keyval == 32 // space + ) + return FALSE; + else + sflphone_keypad(event->keyval, event->string); + + + return TRUE; +} + /** * Reset call tree */ @@ -169,13 +184,27 @@ calltree_reset (calltab_t* tab) gtk_list_store_clear (tab->store); } +void +focus_on_calltree_out(){ + DEBUG("set_focus_on_calltree_out \n"); + // gtk_widget_grab_focus(GTK_WIDGET(sw)); + focus_is_on_calltree = FALSE; +} + +void +focus_on_calltree_in(){ + DEBUG("set_focus_on_calltree_in \n"); + // gtk_widget_grab_focus(GTK_WIDGET(sw)); + focus_is_on_calltree = TRUE; +} + void calltree_create (calltab_t* tab, gchar* searchbar_type) { - GtkWidget *sw; - GtkCellRenderer *rend; - GtkTreeViewColumn *col; - GtkTreeSelection *sel; + // GtkWidget *sw; + // GtkCellRenderer *rend; + // GtkTreeViewColumn *col; + // GtkTreeSelection *sel; tab->tree = gtk_vbox_new(FALSE, 10); @@ -187,7 +216,6 @@ calltree_create (calltab_t* tab, gchar* searchbar_type) sw = gtk_scrolled_window_new( NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN); - g_signal_connect (G_OBJECT ( sw ), "key-release-event",G_CALLBACK (on_key_released), NULL); tab->store = gtk_list_store_new (3, GDK_TYPE_PIXBUF,// Icon @@ -202,6 +230,9 @@ calltree_create (calltab_t* tab, gchar* searchbar_type) G_CALLBACK (row_activated), NULL); + GTK_WIDGET_SET_FLAGS (GTK_WIDGET(sw),GTK_CAN_FOCUS); + gtk_widget_grab_focus (GTK_WIDGET(sw)); + // Connect the popup menu g_signal_connect (G_OBJECT (tab->view), "popup-menu", G_CALLBACK (popup_menu), @@ -210,6 +241,15 @@ calltree_create (calltab_t* tab, gchar* searchbar_type) G_CALLBACK (button_pressed), NULL); + // g_signal_connect (G_OBJECT (sw), "key-release-event", + // G_CALLBACK (on_key_released), NULL); + + g_signal_connect_after (G_OBJECT (tab->view), "focus-in-event", + G_CALLBACK (focus_on_calltree_in), NULL); + g_signal_connect_after (G_OBJECT (tab->view), "focus-out-event", + G_CALLBACK (focus_on_calltree_out), NULL); + + gtk_widget_grab_focus(GTK_WIDGET(tab->view)); rend = gtk_cell_renderer_pixbuf_new(); col = gtk_tree_view_column_new_with_attributes ("Icon", @@ -412,6 +452,9 @@ calltree_add_call (calltab_t* tab, call_t * c) GdkPixbuf *pixbuf=NULL; GtkTreeIter iter; GtkTreeSelection* sel; + GtkTreeModel *model; + GtkTreePath *path; + // New call in the list gchar * description; @@ -422,6 +465,7 @@ calltree_add_call (calltab_t* tab, call_t * c) gtk_list_store_prepend (tab->store, &iter); + if( tab == current_calls ) { switch(c->state) @@ -468,7 +512,7 @@ calltree_add_call (calltab_t* tab, call_t * c) WARN ("This widget doesn't exist - This is a bug in the application."); } - + //Resize it if(pixbuf) { @@ -483,16 +527,22 @@ calltree_add_call (calltab_t* tab, call_t * c) 2, c, // Pointer -1); + if (pixbuf != NULL) g_object_unref(G_OBJECT(pixbuf)); - sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tab->view)); - gtk_tree_selection_select_iter(GTK_TREE_SELECTION(sel), &iter); + + gtk_tree_view_set_model(GTK_TREE_VIEW(tab->view), GTK_TREE_MODEL(tab->store)); + + gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(tab->view)), &iter); + toolbar_update_buttons(); + } void calltree_display (calltab_t *tab) { + GtkTreeSelection *sel; /* If we already are displaying the specified calltree */ diff --git a/sflphone-client-gnome/src/contacts/calltree.h b/sflphone-client-gnome/src/contacts/calltree.h index 1dd57d2d282a4b5b48d0d7f6859ed55bf512cff4..09d5ad6887eed8e64af16c9c801ae1c26d9d5538 100644 --- a/sflphone-client-gnome/src/contacts/calltree.h +++ b/sflphone-client-gnome/src/contacts/calltree.h @@ -23,7 +23,7 @@ #include <gtk/gtk.h> #include <calltab.h> #include <timestamp.h> - +#include <mainwindow.h> /** @file calltree.h * @brief The GtkTreeView that list calls in the main window. diff --git a/sflphone-client-gnome/src/contacts/history.c b/sflphone-client-gnome/src/contacts/history.c index c6fe172ef3f697c8bf3720c42894220db1af8549..7999bf3b25f7c9659a076e27a94915294dd293eb 100644 --- a/sflphone-client-gnome/src/contacts/history.c +++ b/sflphone-client-gnome/src/contacts/history.c @@ -32,14 +32,20 @@ static gboolean history_is_visible (GtkTreeModel*, GtkTreeIter*, gpointer); void history_search(GtkEntry* entry UNUSED){ - gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(history_filter)); + + if(history_filter != NULL) { + + gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(history_filter)); + + } } void history_init(){ - + history_filter = history_create_filter(GTK_TREE_MODEL(history->store)); gtk_tree_view_set_model(GTK_TREE_VIEW(history->view), GTK_TREE_MODEL(history_filter)); + } void history_set_searchbar_widget(GtkWidget *searchbar){ @@ -51,7 +57,9 @@ static GtkTreeModel* history_create_filter (GtkTreeModel* child) { GtkTreeModel* ret; + GtkTreePath *path; + DEBUG("Create Filter\n"); ret = gtk_tree_model_filter_new(child, NULL); gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(ret), history_is_visible, NULL, NULL); return GTK_TREE_MODEL(ret); @@ -71,7 +79,8 @@ history_is_visible (GtkTreeModel* model, GtkTreeIter* iter, gpointer data UNUSED if(G_VALUE_HOLDS_STRING(&val)){ text = (gchar *)g_value_get_string(&val); } - if(text != NULL && g_ascii_strncasecmp(search, _("Search"), 6) != 0){ + if(text != NULL && + ( g_ascii_strncasecmp(search, _("Search history"), 14) != 0 && g_ascii_strncasecmp(search, _("Search contact"), 14) != 0)){ return g_regex_match_simple(search, text, G_REGEX_CASELESS, 0); } g_value_unset (&val); diff --git a/sflphone-client-gnome/src/contacts/searchbar.c b/sflphone-client-gnome/src/contacts/searchbar.c index 1744fbe08d1e077a12e4ba248dfff7f079da10e2..cad09e0670dff097bac9d077cce265f251418f91 100644 --- a/sflphone-client-gnome/src/contacts/searchbar.c +++ b/sflphone-client-gnome/src/contacts/searchbar.c @@ -26,7 +26,10 @@ const GdkColor BLACK_COLOR = { 0, 0, 0, 0 }; const GdkColor GRAY_COLOR = { 0, 30000, 30000, 30000 }; -void searchbar_entry_changed (GtkEntry* entry, gchar* arg1 UNUSED, gpointer data UNUSED) { +GtkWidget * searchbox; + +void searchbar_entry_changed (GtkEntry* entry, gchar* arg1 UNUSED, gpointer data UNUSED){ + // gtk_widget_grab_focus (GTK_WIDGET(searchbox)); if (active_calltree == contacts) { addressbook_search(entry); @@ -37,14 +40,40 @@ void searchbar_entry_changed (GtkEntry* entry, gchar* arg1 UNUSED, gpointer data } +// static void +// focus_in_event(GtkWidget *widget, GdkEventFocus *event, gpointer data) +// { + +// } + + void searchbar_clear_entry_if_default (GtkWidget* widget, gpointer user_data UNUSED) { + DEBUG("searchbar_clear_entry_if_default\n"); gtk_widget_modify_text(widget, GTK_STATE_NORMAL, &BLACK_COLOR); - if(g_ascii_strncasecmp(gtk_entry_get_text(GTK_ENTRY(widget)), _("Search"), 6) == 0) + if(g_ascii_strncasecmp(gtk_entry_get_text(GTK_ENTRY(widget)), "Search history", 14) == 0 + || g_ascii_strncasecmp(gtk_entry_get_text(GTK_ENTRY(widget)), "Search contact", 14) == 0 ) gtk_entry_set_text(GTK_ENTRY(widget), ""); + // gtk_widget_grab_focus (GTK_WIDGET(searchbox));1 + +} + +void +focus_on_searchbar_out(){ + DEBUG("set_focus_on_searchbar_out \n"); + // gtk_widget_grab_focus(GTK_WIDGET(sw)); + focus_is_on_searchbar = FALSE; } +void +focus_on_searchbar_in(){ + DEBUG("set_focus_on_searchbar_in \n"); + // gtk_widget_grab_focus(GTK_WIDGET(sw)); + focus_is_on_searchbar = TRUE; +} + + void searchbar_init(calltab_t *tab) { @@ -58,7 +87,7 @@ searchbar_init(calltab_t *tab) GtkWidget* searchbar_new(gchar* searchbar_type) { - GtkWidget * searchbox; + // GtkWidget * searchbox; GtkWidget* image; GtkWidget* ret = gtk_hbox_new(FALSE, 0); @@ -73,11 +102,19 @@ GtkWidget* searchbar_new(gchar* searchbar_type) { sexy_icon_entry_add_clear_button( SEXY_ICON_ENTRY(searchbox) ); #endif - gtk_widget_modify_text(searchbox, GTK_STATE_NORMAL, &GRAY_COLOR); + // GTK_WIDGET_SET_FLAGS (GTK_WIDGET(searchbox),GTK_CAN_FOCUS); + // gtk_widget_set_name (searchbox, "searchbar"); + + gtk_widget_modify_text(searchbox, GTK_STATE_NORMAL, &GRAY_COLOR); gtk_entry_set_text(GTK_ENTRY(searchbox), _("Search contact")); - g_signal_connect(GTK_ENTRY(searchbox), "changed", G_CALLBACK(searchbar_entry_changed), NULL); - g_signal_connect(GTK_ENTRY(searchbox), "grab-focus", G_CALLBACK(searchbar_clear_entry_if_default), NULL); + g_signal_connect_after(GTK_ENTRY(searchbox), "changed", G_CALLBACK(searchbar_entry_changed), NULL); + g_signal_connect_after(GTK_ENTRY(searchbox), "grab-focus", G_CALLBACK(searchbar_clear_entry_if_default), NULL); + + g_signal_connect_after (G_OBJECT (searchbox), "focus-in-event", + G_CALLBACK (focus_on_searchbar_in), NULL); + g_signal_connect_after (G_OBJECT (searchbox), "focus-out-event", + G_CALLBACK (focus_on_searchbar_out), NULL); gtk_box_pack_start(GTK_BOX(ret), searchbox, TRUE, TRUE, 0); diff --git a/sflphone-client-gnome/src/contacts/searchbar.h b/sflphone-client-gnome/src/contacts/searchbar.h index aabe3ea4113a06c6ba2ce156af4d09fe5b234fa1..f7ed3035200642cb71612d6322e2ce8793ca436b 100644 --- a/sflphone-client-gnome/src/contacts/searchbar.h +++ b/sflphone-client-gnome/src/contacts/searchbar.h @@ -30,6 +30,7 @@ #include <calllist.h> #include <gtk/gtk.h> +#include <mainwindow.h> // From version 2.16, gtk provides the functionalities libsexy used to provide #if GTK_CHECK_VERSION(2,16,0) diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c index 15aa09058ce88677cec13115b52f11c6d5dc147a..4caf79f99b23774a2be56cc7602b3757b3f378e4 100644 --- a/sflphone-client-gnome/src/dbus/dbus.c +++ b/sflphone-client-gnome/src/dbus/dbus.c @@ -215,25 +215,41 @@ dbus_connect () /* Create a proxy object for the "bus driver" (name "org.freedesktop.DBus") */ + instanceProxy = dbus_g_proxy_new_for_name (connection, "org.sflphone.SFLphone", "/org/sflphone/SFLphone/Instance", "org.sflphone.SFLphone.Instance"); - + /* + instanceProxy = dbus_g_proxy_new_for_name_owner (connection, + "org.sflphone.SFLphone", + "/org/sflphone/SFLphone/Instance", + "org.sflphone.SFLphone.Instance", + &error); + */ + if (instanceProxy==NULL) { ERROR ("Failed to get proxy to Instance"); return FALSE; } - DEBUG ("DBus connected to Instance"); - + DEBUG ("DBus connected to Instance"); + + callManagerProxy = dbus_g_proxy_new_for_name (connection, "org.sflphone.SFLphone", "/org/sflphone/SFLphone/CallManager", "org.sflphone.SFLphone.CallManager"); + /* + callManagerProxy = dbus_g_proxy_new_for_name_owner (connection, + "org.sflphone.SFLphone", + "/org/sflphone/SFLphone/CallManager", + "org.sflphone.SFLphone.CallManager", + &error); + */ if (callManagerProxy==NULL) { ERROR ("Failed to get proxy to CallManagers"); @@ -284,11 +300,20 @@ dbus_connect () dbus_g_proxy_connect_signal (callManagerProxy, "volumeChanged", G_CALLBACK(volume_changed_cb), NULL, NULL); - configurationManagerProxy = dbus_g_proxy_new_for_name (connection, + + configurationManagerProxy = dbus_g_proxy_new_for_name (connection, "org.sflphone.SFLphone", "/org/sflphone/SFLphone/ConfigurationManager", "org.sflphone.SFLphone.ConfigurationManager"); + + /* + configurationManagerProxy = dbus_g_proxy_new_for_name_owner (connection, + "org.sflphone.SFLphone", + "/org/sflphone/SFLphone/ConfigurationManager", + "org.sflphone.SFLphone.ConfigurationManager", + &error); + */ if (!configurationManagerProxy) { ERROR ("Failed to get proxy to ConfigurationManager"); diff --git a/sflphone-client-gnome/src/errors.c b/sflphone-client-gnome/src/errors.c index a566ca72d8222c25ba7fd096d6d51f2b7548fc95..fb4b4ae9355f40800558fef790ccaab4a4a6a8d2 100644 --- a/sflphone-client-gnome/src/errors.c +++ b/sflphone-client-gnome/src/errors.c @@ -25,13 +25,13 @@ sflphone_throw_exception( int err ) gchar* markup=""; switch( err ){ case ALSA_PLAYBACK_DEVICE: - markup = g_markup_printf_escaped(_("<b>ALSA notification</b>\n\nError while opening playback device")); + markup = g_markup_printf_escaped(_("ALSA notification\n\nError while opening playback device")); break; case ALSA_CAPTURE_DEVICE: - markup = g_markup_printf_escaped(_("<b>ALSA notification</b>\n\nError while opening capture device")); + markup = g_markup_printf_escaped(_("ALSA notification\n\nError while opening capture device")); break; case PULSEAUDIO_NOT_RUNNING: - markup = g_markup_printf_escaped(_("<b>Pulseaudio notification</b>\n\nPulseaudio is not running")); + markup = g_markup_printf_escaped(_("Pulseaudio notification\n\nPulseaudio is not running")); break; } main_window_error_message( markup ); diff --git a/sflphone-client-gnome/src/mainwindow.c b/sflphone-client-gnome/src/mainwindow.c index f383ccc15c88182127015aab7c4d99c5d44fa696..1db50d7282e3881c999dc9c0207c794428097cda 100644 --- a/sflphone-client-gnome/src/mainwindow.c +++ b/sflphone-client-gnome/src/mainwindow.c @@ -97,11 +97,57 @@ main_window_ask_quit(){ return TRUE; } + + +static gboolean +on_key_released (GtkWidget *widget, GdkEventKey *event, gpointer user_data UNUSED) +{ + DEBUG("On key released from Main Window : %s\n", gtk_widget_get_name(widget)); + + + if (focus_is_on_searchbar == FALSE) { + // If a modifier key is pressed, it's a shortcut, pass along + if(event->state & GDK_CONTROL_MASK || + event->state & GDK_MOD1_MASK || + event->keyval == 60 || // < + event->keyval == 62 || // > + event->keyval == 34 || // " + event->keyval == 65361 || // left arrow + event->keyval == 65363 || // right arrow + event->keyval >= 65470 || // F-keys + event->keyval == 32 // space + ) + return FALSE; + else + sflphone_keypad(event->keyval, event->string); + + } + + return TRUE; +} + +void +focus_on_mainwindow_out(){ + DEBUG("focus_on_mainwindow_out \n"); + // gtk_widget_grab_focus(GTK_WIDGET(window)); + +} + +void +focus_on_mainwindow_in(){ + DEBUG("focus_on_mainwindow_in \n"); + // gtk_widget_grab_focus(GTK_WIDGET(window)); +} + + void create_main_window () { GtkWidget *widget; + focus_is_on_calltree = FALSE; + focus_is_on_searchbar = FALSE; + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (window), 0); gtk_window_set_title (GTK_WINDOW (window), PACKAGE); @@ -110,13 +156,28 @@ create_main_window () NULL); gtk_window_set_position( GTK_WINDOW( window ) , GTK_WIN_POS_MOUSE); + // GTK_WIDGET_SET_FLAGS (GTK_WIDGET(window),GTK_CAN_FOCUS); + // gtk_widget_grab_focus (GTK_WIDGET(window)); + /* Connect the destroy event of the window with our on_destroy function - * When the window is about to be destroyed we get a notificaiton and - * stop the main GTK loop - */ + * When the window is about to be destroyed we get a notificaiton and + * stop the main GTK loop + */ g_signal_connect (G_OBJECT (window), "delete-event", G_CALLBACK (on_delete), NULL); + g_signal_connect (G_OBJECT (window), "key-release-event", + G_CALLBACK (on_key_released), NULL); + + g_signal_connect_after (G_OBJECT (window), "focus-in-event", + G_CALLBACK (focus_on_mainwindow_in), NULL); + + g_signal_connect_after (G_OBJECT (window), "focus-out-event", + G_CALLBACK (focus_on_mainwindow_out), NULL); + + + gtk_widget_set_name (window, "mainwindow"); + /* Create an accel group for window's shortcuts */ accelGroup = gtk_accel_group_new (); gtk_window_add_accel_group(GTK_WINDOW(window), accelGroup); @@ -223,14 +284,18 @@ get_main_window() void main_window_message(GtkMessageType type, gchar * markup){ + GtkWidget * dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW(get_main_window()), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, type, GTK_BUTTONS_CLOSE, "%s\n", markup); - gtk_dialog_run (GTK_DIALOG(dialog)); + + gtk_window_set_title(GTK_WINDOW(dialog), _("SFLphone Error")); + + gtk_dialog_run (GTK_DIALOG(dialog)); gtk_widget_destroy (GTK_WIDGET(dialog)); } diff --git a/sflphone-client-gnome/src/mainwindow.h b/sflphone-client-gnome/src/mainwindow.h index f126452ce1134a2463bd2cdcc454b961a977e508..bdf3c0af125353ceb8ffa9ba4f7894805b004746 100644 --- a/sflphone-client-gnome/src/mainwindow.h +++ b/sflphone-client-gnome/src/mainwindow.h @@ -21,6 +21,7 @@ #define __MAINWINDOW_H__ #include <calllist.h> +#include <calltree.h> /** @file mainwindow.h * @brief The main window of the client. @@ -90,4 +91,14 @@ void statusbar_push_message( const gchar* message , guint id ); void statusbar_pop_message( guint id ); void main_window_searchbar( gboolean *state ); + +//static gboolean +//on_key_released (GtkWidget *widget, GdkEventKey *event, +// gpointer user_data); +// void set_focus_on_mainwindow(); + +gboolean focus_is_on_calltree; + +gboolean focus_is_on_searchbar; + #endif diff --git a/sflphone-client-gnome/src/menus.c b/sflphone-client-gnome/src/menus.c index 03e97945dd8627869d5453581745a668e7495997..bb2797cb8452ca023e37d42e43f9eff208ba448f 100644 --- a/sflphone-client-gnome/src/menus.c +++ b/sflphone-client-gnome/src/menus.c @@ -48,67 +48,67 @@ GtkWidget * searchbarMenu; void update_menus() { - //Block signals for holdMenu - gtk_signal_handler_block(GTK_OBJECT(holdMenu), holdConnId); - - gtk_widget_set_sensitive( GTK_WIDGET(pickUpMenu), FALSE); - gtk_widget_set_sensitive( GTK_WIDGET(hangUpMenu), FALSE); - gtk_widget_set_sensitive( GTK_WIDGET(newCallMenu),FALSE); - gtk_widget_set_sensitive( GTK_WIDGET(holdMenu), FALSE); - gtk_widget_set_sensitive( GTK_WIDGET(recordMenu), FALSE); - gtk_widget_set_sensitive( GTK_WIDGET(copyMenu), FALSE); - - call_t * selectedCall = calltab_get_selected_call(active_calltree); - if (selectedCall) - { - gtk_widget_set_sensitive( GTK_WIDGET(copyMenu), TRUE); - switch(selectedCall->state) + //Block signals for holdMenu + gtk_signal_handler_block(GTK_OBJECT(holdMenu), holdConnId); + + gtk_widget_set_sensitive( GTK_WIDGET(pickUpMenu), FALSE); + gtk_widget_set_sensitive( GTK_WIDGET(hangUpMenu), FALSE); + gtk_widget_set_sensitive( GTK_WIDGET(newCallMenu),FALSE); + gtk_widget_set_sensitive( GTK_WIDGET(holdMenu), FALSE); + gtk_widget_set_sensitive( GTK_WIDGET(recordMenu), FALSE); + gtk_widget_set_sensitive( GTK_WIDGET(copyMenu), FALSE); + + call_t * selectedCall = calltab_get_selected_call(active_calltree); + if (selectedCall) { - case CALL_STATE_INCOMING: - gtk_widget_set_sensitive( GTK_WIDGET(pickUpMenu), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(hangUpMenu), TRUE); - break; - case CALL_STATE_HOLD: - gtk_widget_set_sensitive( GTK_WIDGET(hangUpMenu), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(holdMenu), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(newCallMenu),TRUE); - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( holdMenu ), gtk_image_new_from_file( ICONS_DIR "/icon_unhold.svg")); - break; - case CALL_STATE_RINGING: - gtk_widget_set_sensitive( GTK_WIDGET(pickUpMenu), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(hangUpMenu), TRUE); - break; - case CALL_STATE_DIALING: - gtk_widget_set_sensitive( GTK_WIDGET(pickUpMenu), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(hangUpMenu), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(newCallMenu),TRUE); - break; - case CALL_STATE_CURRENT: - case CALL_STATE_RECORD: - gtk_widget_set_sensitive( GTK_WIDGET(hangUpMenu), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(holdMenu), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(newCallMenu),TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(recordMenu), TRUE); - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( holdMenu ), gtk_image_new_from_file( ICONS_DIR "/icon_hold.svg")); - break; - case CALL_STATE_BUSY: - case CALL_STATE_FAILURE: - gtk_widget_set_sensitive( GTK_WIDGET(hangUpMenu), TRUE); - break; - default: - WARN("Should not happen in update_menus()!"); - break; + gtk_widget_set_sensitive( GTK_WIDGET(copyMenu), TRUE); + switch(selectedCall->state) + { + case CALL_STATE_INCOMING: + gtk_widget_set_sensitive( GTK_WIDGET(pickUpMenu), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(hangUpMenu), TRUE); + break; + case CALL_STATE_HOLD: + gtk_widget_set_sensitive( GTK_WIDGET(hangUpMenu), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(holdMenu), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(newCallMenu),TRUE); + gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( holdMenu ), gtk_image_new_from_file( ICONS_DIR "/icon_unhold.svg")); + break; + case CALL_STATE_RINGING: + gtk_widget_set_sensitive( GTK_WIDGET(pickUpMenu), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(hangUpMenu), TRUE); + break; + case CALL_STATE_DIALING: + gtk_widget_set_sensitive( GTK_WIDGET(pickUpMenu), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(hangUpMenu), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(newCallMenu),TRUE); + break; + case CALL_STATE_CURRENT: + case CALL_STATE_RECORD: + gtk_widget_set_sensitive( GTK_WIDGET(hangUpMenu), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(holdMenu), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(newCallMenu),TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(recordMenu), TRUE); + gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( holdMenu ), gtk_image_new_from_file( ICONS_DIR "/icon_hold.svg")); + break; + case CALL_STATE_BUSY: + case CALL_STATE_FAILURE: + gtk_widget_set_sensitive( GTK_WIDGET(hangUpMenu), TRUE); + break; + default: + WARN("Should not happen in update_menus()!"); + break; + } } - } - else - { - gtk_widget_set_sensitive( GTK_WIDGET(newCallMenu), TRUE); - } - gtk_signal_handler_unblock(holdMenu, holdConnId); + else + { + gtk_widget_set_sensitive( GTK_WIDGET(newCallMenu), TRUE); + } + gtk_signal_handler_unblock(holdMenu, holdConnId); } /* ----------------------------------------------------------------- */ - static void + static void help_about ( void * foo UNUSED) { gchar *authors[] = { @@ -118,7 +118,7 @@ help_about ( void * foo UNUSED) "Alexandre Bourget <alexandre.bourget@savoirfairelinux.com>", "Pierre-Luc Beaudoin <pierre-luc.beaudoin@savoirfairelinux.com>", "Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>", - "Yun Liu <yun.liu@savoirfairelinux.com>" + "Yun Liu <yun.liu@savoirfairelinux.com>", "Alexandre Savard <alexandre.savard@savoirfairelinux.com>", "Jean-Philippe Barrette-LaPierre", "Laurielle Lea", @@ -138,132 +138,133 @@ help_about ( void * foo UNUSED) "version", VERSION, "website", "http://www.sflphone.org", NULL); + } - GtkWidget * + GtkWidget * create_help_menu() { - GtkWidget * menu; - GtkWidget * root_menu; - GtkWidget * menu_items; + GtkWidget * menu; + GtkWidget * root_menu; + GtkWidget * menu_items; - menu = gtk_menu_new (); + menu = gtk_menu_new (); - menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_ABOUT, get_accel_group()); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - g_signal_connect_swapped (G_OBJECT (menu_items), "activate", - G_CALLBACK (help_about), - NULL); - gtk_widget_show (menu_items); + menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_ABOUT, get_accel_group()); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + g_signal_connect_swapped (G_OBJECT (menu_items), "activate", + G_CALLBACK (help_about), + NULL); + gtk_widget_show (menu_items); - root_menu = gtk_menu_item_new_with_mnemonic (_("_Help")); - gtk_menu_item_set_submenu (GTK_MENU_ITEM (root_menu), menu); + root_menu = gtk_menu_item_new_with_mnemonic (_("_Help")); + gtk_menu_item_set_submenu (GTK_MENU_ITEM (root_menu), menu); - return root_menu; + return root_menu; } /* ----------------------------------------------------------------- */ - GtkWidget * + GtkWidget * create_waiting_icon() { - GtkWidget * waiting_icon; - waiting_icon = gtk_image_menu_item_new_with_label(""); - gtk_image_menu_item_set_image ( - GTK_IMAGE_MENU_ITEM(waiting_icon), - gtk_image_new_from_animation( - gdk_pixbuf_animation_new_from_file(ICONS_DIR "/wait-on.gif", NULL))); - gtk_menu_item_set_right_justified(GTK_MENU_ITEM(waiting_icon),TRUE); - - return waiting_icon; + GtkWidget * waiting_icon; + waiting_icon = gtk_image_menu_item_new_with_label(""); + gtk_image_menu_item_set_image ( + GTK_IMAGE_MENU_ITEM(waiting_icon), + gtk_image_new_from_animation( + gdk_pixbuf_animation_new_from_file(ICONS_DIR "/wait-on.gif", NULL))); + gtk_menu_item_set_right_justified(GTK_MENU_ITEM(waiting_icon),TRUE); + + return waiting_icon; } /* ----------------------------------------------------------------- */ - static void + static void call_new_call ( void * foo UNUSED) { - sflphone_new_call(); + sflphone_new_call(); } - static void + static void call_quit ( void * foo UNUSED) { - sflphone_quit(); + sflphone_quit(); } - static void + static void call_minimize ( void * foo UNUSED) { #if GTK_CHECK_VERSION(2,10,0) - gtk_widget_hide(GTK_WIDGET( get_main_window() )); - set_minimized( TRUE ); + gtk_widget_hide(GTK_WIDGET( get_main_window() )); + set_minimized( TRUE ); #endif } - static void + static void switch_account( GtkWidget* item , gpointer data UNUSED) { - account_t* acc = g_object_get_data( G_OBJECT(item) , "account" ); - DEBUG("%s" , acc->accountID); - account_list_set_current_id( acc->accountID ); - status_bar_display_account (); + account_t* acc = g_object_get_data( G_OBJECT(item) , "account" ); + DEBUG("%s" , acc->accountID); + account_list_set_current (acc); + status_bar_display_account (); } - static void + static void call_hold (void* foo UNUSED) { - call_t * selectedCall = calltab_get_selected_call(current_calls); + call_t * selectedCall = calltab_get_selected_call(current_calls); - if(selectedCall) - { - if(selectedCall->state == CALL_STATE_HOLD) + if(selectedCall) { - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( holdMenu ), gtk_image_new_from_file( ICONS_DIR "/icon_unhold.svg")); - sflphone_off_hold(); + if(selectedCall->state == CALL_STATE_HOLD) + { + gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( holdMenu ), gtk_image_new_from_file( ICONS_DIR "/icon_unhold.svg")); + sflphone_off_hold(); + } + else + { + gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( holdMenu ), gtk_image_new_from_file( ICONS_DIR "/icon_hold.svg")); + sflphone_on_hold(); + } } - else - { - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( holdMenu ), gtk_image_new_from_file( ICONS_DIR "/icon_hold.svg")); - sflphone_on_hold(); - } - } } - static void + static void call_pick_up ( void * foo UNUSED) { - sflphone_pick_up(); + sflphone_pick_up(); } - static void + static void call_hang_up ( void * foo UNUSED) { - sflphone_hang_up(); + sflphone_hang_up(); } -static void + static void call_record ( void * foo UNUSED) { - sflphone_rec_call(); + sflphone_rec_call(); } - static void + static void call_wizard ( void * foo UNUSED) { #if GTK_CHECK_VERSION(2,10,0) - build_wizard(); + build_wizard(); #endif } -static void + static void remove_from_history( void * foo UNUSED) { - call_t* c = calltab_get_selected_call( history ); - if(c){ - DEBUG("Remove the call from the history"); - calllist_remove_from_history( c ); - } + call_t* c = calltab_get_selected_call( history ); + if(c){ + DEBUG("Remove the call from the history"); + calllist_remove_from_history( c ); + } } -static void + static void call_back( void * foo UNUSED) { call_t *selected_call, *new_call; @@ -285,428 +286,428 @@ call_back( void * foo UNUSED) } } - GtkWidget * + GtkWidget * create_call_menu() { - GtkWidget * menu; - GtkWidget * root_menu; - GtkWidget * menu_items; - GtkWidget * image; - - menu = gtk_menu_new (); - - image = gtk_image_new_from_file( ICONS_DIR "/icon_call.svg"); - newCallMenu = gtk_image_menu_item_new_with_mnemonic(_("_New call")); - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( newCallMenu ), image ); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), newCallMenu); - g_signal_connect_swapped (G_OBJECT (newCallMenu), "activate", - G_CALLBACK (call_new_call), - NULL); - gtk_widget_show (newCallMenu); - - menu_items = gtk_separator_menu_item_new (); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - - image = gtk_image_new_from_file( ICONS_DIR "/icon_accept.svg"); - pickUpMenu = gtk_image_menu_item_new_with_mnemonic(_("_Pick up")); - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( pickUpMenu ), image ); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), pickUpMenu); - gtk_widget_set_sensitive( GTK_WIDGET(pickUpMenu), FALSE); - g_signal_connect_swapped (G_OBJECT (pickUpMenu), "activate", - G_CALLBACK (call_pick_up), - NULL); - gtk_widget_show (pickUpMenu); - - image = gtk_image_new_from_file( ICONS_DIR "/icon_hangup.svg"); - hangUpMenu = gtk_image_menu_item_new_with_mnemonic(_("_Hang up")); - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( hangUpMenu ), image ); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), hangUpMenu); - gtk_widget_set_sensitive( GTK_WIDGET(hangUpMenu), FALSE); - g_signal_connect_swapped (G_OBJECT (hangUpMenu), "activate", - G_CALLBACK (call_hang_up), - NULL); - gtk_widget_show (hangUpMenu); - - image = gtk_image_new_from_file( ICONS_DIR "/icon_hold.svg"); - holdMenu = gtk_image_menu_item_new_with_mnemonic (_("On _Hold")); - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( holdMenu ), image ); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), holdMenu); - gtk_widget_set_sensitive( GTK_WIDGET(holdMenu), FALSE); - //Here we connect only to activate - //The toggled state is managed from update_menus() - holdConnId = g_signal_connect(G_OBJECT (holdMenu), "activate", - G_CALLBACK (call_hold), - NULL); - gtk_widget_show (menu_items); - - image = gtk_image_new_from_stock (GTK_STOCK_MEDIA_RECORD, GTK_ICON_SIZE_MENU); - recordMenu = gtk_image_menu_item_new_with_mnemonic(_("_Record")); - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( recordMenu ), image ); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), recordMenu); - gtk_widget_set_sensitive( GTK_WIDGET(recordMenu), FALSE); - g_signal_connect_swapped (G_OBJECT (recordMenu), "activate", - G_CALLBACK (call_record), - NULL); - gtk_widget_show (recordMenu); + GtkWidget * menu; + GtkWidget * root_menu; + GtkWidget * menu_items; + GtkWidget * image; + + menu = gtk_menu_new (); + + image = gtk_image_new_from_file( ICONS_DIR "/icon_call.svg"); + newCallMenu = gtk_image_menu_item_new_with_mnemonic(_("_New call")); + gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( newCallMenu ), image ); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), newCallMenu); + g_signal_connect_swapped (G_OBJECT (newCallMenu), "activate", + G_CALLBACK (call_new_call), + NULL); + gtk_widget_show (newCallMenu); + + menu_items = gtk_separator_menu_item_new (); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + + image = gtk_image_new_from_file( ICONS_DIR "/icon_accept.svg"); + pickUpMenu = gtk_image_menu_item_new_with_mnemonic(_("_Pick up")); + gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( pickUpMenu ), image ); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), pickUpMenu); + gtk_widget_set_sensitive( GTK_WIDGET(pickUpMenu), FALSE); + g_signal_connect_swapped (G_OBJECT (pickUpMenu), "activate", + G_CALLBACK (call_pick_up), + NULL); + gtk_widget_show (pickUpMenu); - // Separator - menu_items = gtk_separator_menu_item_new (); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + image = gtk_image_new_from_file( ICONS_DIR "/icon_hangup.svg"); + hangUpMenu = gtk_image_menu_item_new_with_mnemonic(_("_Hang up")); + gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( hangUpMenu ), image ); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), hangUpMenu); + gtk_widget_set_sensitive( GTK_WIDGET(hangUpMenu), FALSE); + g_signal_connect_swapped (G_OBJECT (hangUpMenu), "activate", + G_CALLBACK (call_hang_up), + NULL); + gtk_widget_show (hangUpMenu); + + image = gtk_image_new_from_file( ICONS_DIR "/icon_hold.svg"); + holdMenu = gtk_image_menu_item_new_with_mnemonic (_("On _Hold")); + gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( holdMenu ), image ); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), holdMenu); + gtk_widget_set_sensitive( GTK_WIDGET(holdMenu), FALSE); + //Here we connect only to activate + //The toggled state is managed from update_menus() + holdConnId = g_signal_connect(G_OBJECT (holdMenu), "activate", + G_CALLBACK (call_hold), + NULL); + gtk_widget_show (menu_items); + + image = gtk_image_new_from_stock (GTK_STOCK_MEDIA_RECORD, GTK_ICON_SIZE_MENU); + recordMenu = gtk_image_menu_item_new_with_mnemonic(_("_Record")); + gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( recordMenu ), image ); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), recordMenu); + gtk_widget_set_sensitive( GTK_WIDGET(recordMenu), FALSE); + g_signal_connect_swapped (G_OBJECT (recordMenu), "activate", + G_CALLBACK (call_record), + NULL); + gtk_widget_show (recordMenu); + + // Separator + menu_items = gtk_separator_menu_item_new (); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); #if GTK_CHECK_VERSION(2,10,0) - menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Account creation wizard")); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - g_signal_connect_swapped( G_OBJECT( menu_items ) , "activate" , G_CALLBACK( call_wizard ) , NULL ); - gtk_widget_show (menu_items); - // Separator - menu_items = gtk_separator_menu_item_new (); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Account creation wizard")); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + g_signal_connect_swapped( G_OBJECT( menu_items ) , "activate" , G_CALLBACK( call_wizard ) , NULL ); + gtk_widget_show (menu_items); + // Separator + menu_items = gtk_separator_menu_item_new (); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); #endif - // Close menu to minimize the main window to the system tray - menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_CLOSE, get_accel_group()); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - g_signal_connect_swapped (G_OBJECT (menu_items), "activate", - G_CALLBACK (call_minimize), - NULL); - gtk_widget_show (menu_items); + // Close menu to minimize the main window to the system tray + menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_CLOSE, get_accel_group()); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + g_signal_connect_swapped (G_OBJECT (menu_items), "activate", + G_CALLBACK (call_minimize), + NULL); + gtk_widget_show (menu_items); - // Separator - menu_items = gtk_separator_menu_item_new (); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + // Separator + menu_items = gtk_separator_menu_item_new (); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - // Quit Menu - quit SFLphone - menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_QUIT, get_accel_group()); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - g_signal_connect_swapped (G_OBJECT (menu_items), "activate", - G_CALLBACK (call_quit), - NULL); - gtk_widget_show (menu_items); + // Quit Menu - quit SFLphone + menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_QUIT, get_accel_group()); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + g_signal_connect_swapped (G_OBJECT (menu_items), "activate", + G_CALLBACK (call_quit), + NULL); + gtk_widget_show (menu_items); - root_menu = gtk_menu_item_new_with_mnemonic (_("_Call")); - gtk_menu_item_set_submenu (GTK_MENU_ITEM (root_menu), menu); + root_menu = gtk_menu_item_new_with_mnemonic (_("_Call")); + gtk_menu_item_set_submenu (GTK_MENU_ITEM (root_menu), menu); - return root_menu; + return root_menu; } /* ----------------------------------------------------------------- */ - static void + static void edit_preferences ( void * foo UNUSED) { - show_config_window(); + show_config_window(); } - static void + static void edit_accounts ( void * foo UNUSED) { - show_accounts_window(); + show_accounts_window(); } // The menu Edit/Copy should copy the current selected call's number - static void + static void edit_copy ( void * foo UNUSED) { - GtkClipboard* clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); - call_t * selectedCall = calltab_get_selected_call(current_calls); - gchar * no = NULL; + GtkClipboard* clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); + call_t * selectedCall = calltab_get_selected_call(current_calls); + gchar * no = NULL; - if(selectedCall) - { - switch(selectedCall->state) + if(selectedCall) { - case CALL_STATE_TRANSFERT: - case CALL_STATE_DIALING: - case CALL_STATE_RINGING: - no = selectedCall->to; - break; - case CALL_STATE_CURRENT: - case CALL_STATE_HOLD: - case CALL_STATE_BUSY: - case CALL_STATE_FAILURE: - case CALL_STATE_INCOMING: - default: - no = call_get_number(selectedCall); - break; + switch(selectedCall->state) + { + case CALL_STATE_TRANSFERT: + case CALL_STATE_DIALING: + case CALL_STATE_RINGING: + no = selectedCall->to; + break; + case CALL_STATE_CURRENT: + case CALL_STATE_HOLD: + case CALL_STATE_BUSY: + case CALL_STATE_FAILURE: + case CALL_STATE_INCOMING: + default: + no = call_get_number(selectedCall); + break; + } + + gtk_clipboard_set_text (clip, no, strlen(no) ); } - gtk_clipboard_set_text (clip, no, strlen(no) ); - } - } // The menu Edit/Paste should paste the clipboard into the current selected call - static void + static void edit_paste ( void * foo UNUSED) { - GtkClipboard* clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); - call_t * selectedCall = calltab_get_selected_call(current_calls); - gchar * no = gtk_clipboard_wait_for_text (clip); + GtkClipboard* clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); + call_t * selectedCall = calltab_get_selected_call(current_calls); + gchar * no = gtk_clipboard_wait_for_text (clip); - if(no && selectedCall) - { - switch(selectedCall->state) + if(no && selectedCall) { - case CALL_STATE_TRANSFERT: - case CALL_STATE_DIALING: - // Add the text to the number - { - gchar * before = selectedCall->to; - selectedCall->to = g_strconcat(selectedCall->to, no, NULL); - g_free(before); - DEBUG("TO: %s", selectedCall->to); - - if(selectedCall->state == CALL_STATE_DIALING) - { - g_free(selectedCall->from); - selectedCall->from = g_strconcat("\"\" <", selectedCall->to, ">", NULL); - } - calltree_update_call(current_calls, selectedCall); - } - break; - case CALL_STATE_RINGING: - case CALL_STATE_INCOMING: - case CALL_STATE_BUSY: - case CALL_STATE_FAILURE: - case CALL_STATE_HOLD: - { // Create a new call to hold the new text - selectedCall = sflphone_new_call(); - - gchar * before = selectedCall->to; - selectedCall->to = g_strconcat(selectedCall->to, no, NULL); - g_free(before); - DEBUG("TO: %s", selectedCall->to); - - g_free(selectedCall->from); - selectedCall->from = g_strconcat("\"\" <", selectedCall->to, ">", NULL); - - calltree_update_call(current_calls, selectedCall); - } - break; - case CALL_STATE_CURRENT: - default: - { - unsigned int i; - for(i = 0; i < strlen(no); i++) - { - gchar * oneNo = g_strndup(&no[i], 1); - DEBUG("<%s>", oneNo); - dbus_play_dtmf(oneNo); - - gchar * temp = g_strconcat(call_get_number(selectedCall), oneNo, NULL); - gchar * before = selectedCall->from; - selectedCall->from = g_strconcat("\"",call_get_name(selectedCall) ,"\" <", temp, ">", NULL); - g_free(before); - g_free(temp); - calltree_update_call(current_calls, selectedCall); - - } - } - break; - } + switch(selectedCall->state) + { + case CALL_STATE_TRANSFERT: + case CALL_STATE_DIALING: + // Add the text to the number + { + gchar * before = selectedCall->to; + selectedCall->to = g_strconcat(selectedCall->to, no, NULL); + g_free(before); + DEBUG("TO: %s", selectedCall->to); + + if(selectedCall->state == CALL_STATE_DIALING) + { + g_free(selectedCall->from); + selectedCall->from = g_strconcat("\"\" <", selectedCall->to, ">", NULL); + } + calltree_update_call(current_calls, selectedCall); + } + break; + case CALL_STATE_RINGING: + case CALL_STATE_INCOMING: + case CALL_STATE_BUSY: + case CALL_STATE_FAILURE: + case CALL_STATE_HOLD: + { // Create a new call to hold the new text + selectedCall = sflphone_new_call(); + + gchar * before = selectedCall->to; + selectedCall->to = g_strconcat(selectedCall->to, no, NULL); + g_free(before); + DEBUG("TO: %s", selectedCall->to); + + g_free(selectedCall->from); + selectedCall->from = g_strconcat("\"\" <", selectedCall->to, ">", NULL); + + calltree_update_call(current_calls, selectedCall); + } + break; + case CALL_STATE_CURRENT: + default: + { + unsigned int i; + for(i = 0; i < strlen(no); i++) + { + gchar * oneNo = g_strndup(&no[i], 1); + DEBUG("<%s>", oneNo); + dbus_play_dtmf(oneNo); + + gchar * temp = g_strconcat(call_get_number(selectedCall), oneNo, NULL); + gchar * before = selectedCall->from; + selectedCall->from = g_strconcat("\"",call_get_name(selectedCall) ,"\" <", temp, ">", NULL); + g_free(before); + g_free(temp); + calltree_update_call(current_calls, selectedCall); + + } + } + break; + } - } - else // There is no current call, create one - { - selectedCall = sflphone_new_call(); + } + else // There is no current call, create one + { + selectedCall = sflphone_new_call(); - gchar * before = selectedCall->to; - selectedCall->to = g_strconcat(selectedCall->to, no, NULL); - g_free(before); - DEBUG("TO: %s", selectedCall->to); + gchar * before = selectedCall->to; + selectedCall->to = g_strconcat(selectedCall->to, no, NULL); + g_free(before); + DEBUG("TO: %s", selectedCall->to); - g_free(selectedCall->from); - selectedCall->from = g_strconcat("\"\" <", selectedCall->to, ">", NULL); - calltree_update_call(current_calls,selectedCall); - } + g_free(selectedCall->from); + selectedCall->from = g_strconcat("\"\" <", selectedCall->to, ">", NULL); + calltree_update_call(current_calls,selectedCall); + } } - static void + static void clear_history (void) { - if( calllist_get_size( history ) != 0 ){ - calllist_clean_history(); + if( calllist_get_size( history ) != 0 ){ + calllist_clean_history(); } } - GtkWidget * + GtkWidget * create_edit_menu() { - GtkWidget * menu; - GtkWidget * image; - GtkWidget * root_menu; - GtkWidget * menu_items; - - menu = gtk_menu_new (); + GtkWidget * menu; + GtkWidget * image; + GtkWidget * root_menu; + GtkWidget * menu_items; + + menu = gtk_menu_new (); + + copyMenu = gtk_image_menu_item_new_from_stock( GTK_STOCK_COPY, get_accel_group()); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), copyMenu); + g_signal_connect_swapped (G_OBJECT (copyMenu), "activate", + G_CALLBACK (edit_copy), + NULL); + gtk_widget_show (copyMenu); + + pasteMenu = gtk_image_menu_item_new_from_stock( GTK_STOCK_PASTE, get_accel_group()); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), pasteMenu); + g_signal_connect_swapped (G_OBJECT (pasteMenu), "activate", + G_CALLBACK (edit_paste), + NULL); + gtk_widget_show (pasteMenu); - copyMenu = gtk_image_menu_item_new_from_stock( GTK_STOCK_COPY, get_accel_group()); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), copyMenu); - g_signal_connect_swapped (G_OBJECT (copyMenu), "activate", - G_CALLBACK (edit_copy), - NULL); - gtk_widget_show (copyMenu); - - pasteMenu = gtk_image_menu_item_new_from_stock( GTK_STOCK_PASTE, get_accel_group()); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), pasteMenu); - g_signal_connect_swapped (G_OBJECT (pasteMenu), "activate", - G_CALLBACK (edit_paste), - NULL); - gtk_widget_show (pasteMenu); - - menu_items = gtk_separator_menu_item_new (); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + menu_items = gtk_separator_menu_item_new (); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Clear history")); - image = gtk_image_new_from_stock( GTK_STOCK_CLEAR , GTK_ICON_SIZE_MENU ); - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( menu_items ), image ); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - g_signal_connect_swapped (G_OBJECT (menu_items), "activate", - G_CALLBACK (clear_history), - NULL); - gtk_widget_show (menu_items); + menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Clear history")); + image = gtk_image_new_from_stock( GTK_STOCK_CLEAR , GTK_ICON_SIZE_MENU ); + gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( menu_items ), image ); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + g_signal_connect_swapped (G_OBJECT (menu_items), "activate", + G_CALLBACK (clear_history), + NULL); + gtk_widget_show (menu_items); - menu_items = gtk_separator_menu_item_new (); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + menu_items = gtk_separator_menu_item_new (); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - menu_items = gtk_menu_item_new_with_mnemonic( _("_Accounts") ); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - g_signal_connect_swapped (G_OBJECT (menu_items), "activate", - G_CALLBACK (edit_accounts), - NULL); - gtk_widget_show (menu_items); + menu_items = gtk_menu_item_new_with_mnemonic( _("_Accounts") ); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + g_signal_connect_swapped (G_OBJECT (menu_items), "activate", + G_CALLBACK (edit_accounts), + NULL); + gtk_widget_show (menu_items); - menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_PREFERENCES, get_accel_group()); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - g_signal_connect_swapped (G_OBJECT (menu_items), "activate", - G_CALLBACK (edit_preferences), - NULL); - gtk_widget_show (menu_items); + menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_PREFERENCES, get_accel_group()); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + g_signal_connect_swapped (G_OBJECT (menu_items), "activate", + G_CALLBACK (edit_preferences), + NULL); + gtk_widget_show (menu_items); - root_menu = gtk_menu_item_new_with_mnemonic (_("_Edit")); - gtk_menu_item_set_submenu (GTK_MENU_ITEM (root_menu), menu); + root_menu = gtk_menu_item_new_with_mnemonic (_("_Edit")); + gtk_menu_item_set_submenu (GTK_MENU_ITEM (root_menu), menu); - return root_menu; + return root_menu; } /* ----------------------------------------------------------------- */ - static void + static void view_dialpad (GtkImageMenuItem *imagemenuitem UNUSED, - void* foo UNUSED) + void* foo UNUSED) { - gboolean state; - main_window_dialpad( &state ); - if( state ) - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( dialpadMenu ), - gtk_image_new_from_file( ICONS_DIR "/icon_dialpad_off.svg")); - else - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( dialpadMenu ), - gtk_image_new_from_file( ICONS_DIR "/icon_dialpad.svg")); - dbus_set_dialpad( state ); + gboolean state; + main_window_dialpad( &state ); + if( state ) + gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( dialpadMenu ), + gtk_image_new_from_file( ICONS_DIR "/icon_dialpad_off.svg")); + else + gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( dialpadMenu ), + gtk_image_new_from_file( ICONS_DIR "/icon_dialpad.svg")); + dbus_set_dialpad( state ); } - static void + static void view_volume_controls (GtkImageMenuItem *imagemenuitem UNUSED, - void* foo UNUSED) + void* foo UNUSED) { - gboolean state; - main_window_volume_controls( &state ); - if( state ) - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( volumeMenu ), - gtk_image_new_from_file( ICONS_DIR "/icon_volume_off.svg")); - else - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( volumeMenu ), - gtk_image_new_from_file( ICONS_DIR "/icon_volume.svg")); - dbus_set_volume_controls( state ); + gboolean state; + main_window_volume_controls( &state ); + if( state ) + gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( volumeMenu ), + gtk_image_new_from_file( ICONS_DIR "/icon_volume_off.svg")); + else + gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( volumeMenu ), + gtk_image_new_from_file( ICONS_DIR "/icon_volume.svg")); + dbus_set_volume_controls( state ); } /* - static void -view_searchbar (GtkImageMenuItem *imagemenuitem UNUSED, - void* foo UNUSED) -{ - gboolean state; - main_window_searchbar( &state ); - dbus_set_searchbar( state ); -} -*/ - GtkWidget * + static void + view_searchbar (GtkImageMenuItem *imagemenuitem UNUSED, + void* foo UNUSED) + { + gboolean state; + main_window_searchbar( &state ); + dbus_set_searchbar( state ); + } + */ + GtkWidget * create_view_menu() { - GtkWidget * menu; - GtkWidget * root_menu; - GtkWidget * image; - - menu = gtk_menu_new (); - - if( SHOW_DIALPAD ) - image = gtk_image_new_from_file( ICONS_DIR "/icon_dialpad_off.svg"); - else - image = gtk_image_new_from_file( ICONS_DIR "/icon_dialpad.svg"); - dialpadMenu = gtk_image_menu_item_new_with_mnemonic (_("_Dialpad")); - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( dialpadMenu ), image ); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), dialpadMenu); - g_signal_connect(G_OBJECT ( dialpadMenu ), "activate", - G_CALLBACK (view_dialpad), - NULL); - gtk_widget_show (dialpadMenu); - - if( SHOW_VOLUME ) - image = gtk_image_new_from_file( ICONS_DIR "/icon_volume.svg"); - else - image = gtk_image_new_from_file( ICONS_DIR "/icon_volume.svg"); - volumeMenu = gtk_image_menu_item_new_with_mnemonic (_("_Volume controls")); - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( volumeMenu ), image ); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), volumeMenu); - g_signal_connect(G_OBJECT (volumeMenu), "activate", - G_CALLBACK (view_volume_controls), - NULL); - gtk_widget_show (volumeMenu); + GtkWidget * menu; + GtkWidget * root_menu; + GtkWidget * image; - /*image = gtk_image_new_from_stock( GTK_STOCK_FIND , GTK_ICON_SIZE_MENU ); - searchbarMenu = gtk_image_menu_item_new_with_mnemonic (_("_Search bar")); - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( searchbarMenu ), image ); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), searchbarMenu); - g_signal_connect(G_OBJECT (searchbarMenu), "activate", + menu = gtk_menu_new (); + + if( SHOW_DIALPAD ) + image = gtk_image_new_from_file( ICONS_DIR "/icon_dialpad_off.svg"); + else + image = gtk_image_new_from_file( ICONS_DIR "/icon_dialpad.svg"); + dialpadMenu = gtk_image_menu_item_new_with_mnemonic (_("_Dialpad")); + gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( dialpadMenu ), image ); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), dialpadMenu); + g_signal_connect(G_OBJECT ( dialpadMenu ), "activate", + G_CALLBACK (view_dialpad), + NULL); + gtk_widget_show (dialpadMenu); + + if( SHOW_VOLUME ) + image = gtk_image_new_from_file( ICONS_DIR "/icon_volume.svg"); + else + image = gtk_image_new_from_file( ICONS_DIR "/icon_volume.svg"); + volumeMenu = gtk_image_menu_item_new_with_mnemonic (_("_Volume controls")); + gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( volumeMenu ), image ); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), volumeMenu); + g_signal_connect(G_OBJECT (volumeMenu), "activate", + G_CALLBACK (view_volume_controls), + NULL); + gtk_widget_show (volumeMenu); + + /*image = gtk_image_new_from_stock( GTK_STOCK_FIND , GTK_ICON_SIZE_MENU ); + searchbarMenu = gtk_image_menu_item_new_with_mnemonic (_("_Search bar")); + gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( searchbarMenu ), image ); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), searchbarMenu); + g_signal_connect(G_OBJECT (searchbarMenu), "activate", G_CALLBACK (view_searchbar), NULL); - gtk_widget_show (searchbarMenu); - */ + gtk_widget_show (searchbarMenu); + */ - root_menu = gtk_menu_item_new_with_mnemonic (_("_View")); - gtk_menu_item_set_submenu (GTK_MENU_ITEM (root_menu), menu); + root_menu = gtk_menu_item_new_with_mnemonic (_("_View")); + gtk_menu_item_set_submenu (GTK_MENU_ITEM (root_menu), menu); - return root_menu; + return root_menu; } /* ----------------------------------------------------------------- */ - GtkWidget * + GtkWidget * create_menus ( ) { - GtkWidget * menu_bar; - GtkWidget * root_menu; + GtkWidget * menu_bar; + GtkWidget * root_menu; - menu_bar = gtk_menu_bar_new (); + menu_bar = gtk_menu_bar_new (); - root_menu = create_call_menu(); - gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), root_menu); + root_menu = create_call_menu(); + gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), root_menu); - root_menu = create_edit_menu(); - gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), root_menu); + root_menu = create_edit_menu(); + gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), root_menu); - root_menu = create_view_menu(); - gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), root_menu); + root_menu = create_view_menu(); + gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), root_menu); - root_menu = create_help_menu(); - gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), root_menu); + root_menu = create_help_menu(); + gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), root_menu); - // Create waiting icon - waitingLayer = create_waiting_icon(); - gtk_menu_shell_append(GTK_MENU_SHELL (menu_bar),waitingLayer); + // Create waiting icon + waitingLayer = create_waiting_icon(); + gtk_menu_shell_append(GTK_MENU_SHELL (menu_bar),waitingLayer); - return menu_bar; + return menu_bar; } /* ----------------------------------------------------------------- */ @@ -717,197 +718,197 @@ static void edit_number_cb (GtkWidget *widget UNUSED, gpointer user_data) { } - void + void show_popup_menu (GtkWidget *my_widget, GdkEventButton *event) { - // TODO update the selection to make sure the call under the mouse is the call selected + // TODO update the selection to make sure the call under the mouse is the call selected - gboolean pickup = FALSE, hangup = FALSE, hold = FALSE, copy = FALSE, record = FALSE; - gboolean accounts = FALSE; + gboolean pickup = FALSE, hangup = FALSE, hold = FALSE, copy = FALSE, record = FALSE; + gboolean accounts = FALSE; - call_t * selectedCall = calltab_get_selected_call(current_calls); - if (selectedCall) - { - copy = TRUE; - switch(selectedCall->state) + call_t * selectedCall = calltab_get_selected_call(current_calls); + if (selectedCall) { - case CALL_STATE_INCOMING: - pickup = TRUE; - hangup = TRUE; - break; - case CALL_STATE_HOLD: - hangup = TRUE; - hold = TRUE; - break; - case CALL_STATE_RINGING: - hangup = TRUE; - break; - case CALL_STATE_DIALING: - pickup = TRUE; - hangup = TRUE; - accounts = TRUE; - break; - case CALL_STATE_RECORD: - case CALL_STATE_CURRENT: - hangup = TRUE; - hold = TRUE; - record = TRUE; - break; - case CALL_STATE_BUSY: - case CALL_STATE_FAILURE: - hangup = TRUE; - break; - default: - WARN("Should not happen in show_popup_menu!"); - break; + copy = TRUE; + switch(selectedCall->state) + { + case CALL_STATE_INCOMING: + pickup = TRUE; + hangup = TRUE; + break; + case CALL_STATE_HOLD: + hangup = TRUE; + hold = TRUE; + break; + case CALL_STATE_RINGING: + hangup = TRUE; + break; + case CALL_STATE_DIALING: + pickup = TRUE; + hangup = TRUE; + accounts = TRUE; + break; + case CALL_STATE_RECORD: + case CALL_STATE_CURRENT: + hangup = TRUE; + hold = TRUE; + record = TRUE; + break; + case CALL_STATE_BUSY: + case CALL_STATE_FAILURE: + hangup = TRUE; + break; + default: + WARN("Should not happen in show_popup_menu!"); + break; + } } - } - GtkWidget *menu; - GtkWidget *image; - int button, event_time; - GtkWidget * menu_items; + GtkWidget *menu; + GtkWidget *image; + int button, event_time; + GtkWidget * menu_items; - menu = gtk_menu_new (); - //g_signal_connect (menu, "deactivate", - // G_CALLBACK (gtk_widget_destroy), NULL); + menu = gtk_menu_new (); + //g_signal_connect (menu, "deactivate", + // G_CALLBACK (gtk_widget_destroy), NULL); - if(copy) - { - menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_COPY, get_accel_group()); + if(copy) + { + menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_COPY, get_accel_group()); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + g_signal_connect (G_OBJECT (menu_items), "activate", + G_CALLBACK (edit_copy), + NULL); + gtk_widget_show (menu_items); + } + + menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_PASTE, get_accel_group()); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); g_signal_connect (G_OBJECT (menu_items), "activate", - G_CALLBACK (edit_copy), - NULL); + G_CALLBACK (edit_paste), + NULL); gtk_widget_show (menu_items); - } - menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_PASTE, get_accel_group()); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - g_signal_connect (G_OBJECT (menu_items), "activate", - G_CALLBACK (edit_paste), - NULL); - gtk_widget_show (menu_items); + if(pickup || hangup || hold) + { + menu_items = gtk_separator_menu_item_new (); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + gtk_widget_show (menu_items); + } - if(pickup || hangup || hold) - { - menu_items = gtk_separator_menu_item_new (); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - gtk_widget_show (menu_items); - } + if(pickup) + { - if(pickup) - { + menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Pick up")); + image = gtk_image_new_from_file( ICONS_DIR "/icon_accept.svg"); + gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_items), image); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + g_signal_connect (G_OBJECT (menu_items), "activate", + G_CALLBACK (call_pick_up), + NULL); + gtk_widget_show (menu_items); + } - menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Pick up")); - image = gtk_image_new_from_file( ICONS_DIR "/icon_accept.svg"); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_items), image); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - g_signal_connect (G_OBJECT (menu_items), "activate", - G_CALLBACK (call_pick_up), - NULL); - gtk_widget_show (menu_items); - } + if(hangup) + { + menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Hang up")); + image = gtk_image_new_from_file( ICONS_DIR "/icon_hangup.svg"); + gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_items), image); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + g_signal_connect (G_OBJECT (menu_items), "activate", + G_CALLBACK (call_hang_up), + NULL); + gtk_widget_show (menu_items); + } - if(hangup) - { - menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Hang up")); - image = gtk_image_new_from_file( ICONS_DIR "/icon_hangup.svg"); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_items), image); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - g_signal_connect (G_OBJECT (menu_items), "activate", - G_CALLBACK (call_hang_up), - NULL); - gtk_widget_show (menu_items); - } + if(hold) + { + menu_items = gtk_check_menu_item_new_with_mnemonic (_("On _Hold")); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_items), + (selectedCall->state == CALL_STATE_HOLD ? TRUE : FALSE)); + g_signal_connect(G_OBJECT (menu_items), "activate", + G_CALLBACK (call_hold), + NULL); + gtk_widget_show (menu_items); + } - if(hold) - { - menu_items = gtk_check_menu_item_new_with_mnemonic (_("On _Hold")); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_items), - (selectedCall->state == CALL_STATE_HOLD ? TRUE : FALSE)); - g_signal_connect(G_OBJECT (menu_items), "activate", - G_CALLBACK (call_hold), - NULL); - gtk_widget_show (menu_items); - } + if(record) + { + menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Record")); + image = gtk_image_new_from_stock (GTK_STOCK_MEDIA_RECORD, GTK_ICON_SIZE_MENU); + gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_items), image); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + g_signal_connect (G_OBJECT (menu_items), "activate", + G_CALLBACK (call_record), + NULL); + gtk_widget_show (menu_items); + } - if(record) - { - menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Record")); - image = gtk_image_new_from_stock (GTK_STOCK_MEDIA_RECORD, GTK_ICON_SIZE_MENU); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_items), image); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - g_signal_connect (G_OBJECT (menu_items), "activate", - G_CALLBACK (call_record), - NULL); - gtk_widget_show (menu_items); - } - - if(accounts) - { - add_registered_accounts_to_menu (menu); - } - - if (event) - { - button = event->button; - event_time = event->time; - } - else - { - button = 0; - event_time = gtk_get_current_event_time (); - } - - gtk_menu_attach_to_widget (GTK_MENU (menu), my_widget, NULL); - gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, - button, event_time); + if(accounts) + { + add_registered_accounts_to_menu (menu); + } + + if (event) + { + button = event->button; + event_time = event->time; + } + else + { + button = 0; + event_time = gtk_get_current_event_time (); + } + + gtk_menu_attach_to_widget (GTK_MENU (menu), my_widget, NULL); + gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, + button, event_time); } -void + void show_popup_menu_history(GtkWidget *my_widget, GdkEventButton *event) { - gboolean pickup = FALSE; - gboolean remove = FALSE; - gboolean edit = FALSE; + gboolean pickup = FALSE; + gboolean remove = FALSE; + gboolean edit = FALSE; - call_t * selectedCall = calltab_get_selected_call( history ); - if (selectedCall) - { - remove = TRUE; - pickup = TRUE; - edit = TRUE; - } + call_t * selectedCall = calltab_get_selected_call( history ); + if (selectedCall) + { + remove = TRUE; + pickup = TRUE; + edit = TRUE; + } - GtkWidget *menu; - GtkWidget *image; - int button, event_time; - GtkWidget * menu_items; + GtkWidget *menu; + GtkWidget *image; + int button, event_time; + GtkWidget * menu_items; - menu = gtk_menu_new (); - //g_signal_connect (menu, "deactivate", - // G_CALLBACK (gtk_widget_destroy), NULL); + menu = gtk_menu_new (); + //g_signal_connect (menu, "deactivate", + // G_CALLBACK (gtk_widget_destroy), NULL); - if(pickup) - { + if(pickup) + { - menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Call back")); - image = gtk_image_new_from_file( ICONS_DIR "/icon_accept.svg"); - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( menu_items ), image ); + menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Call back")); + image = gtk_image_new_from_file( ICONS_DIR "/icon_accept.svg"); + gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( menu_items ), image ); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (call_back), NULL); + gtk_widget_show (menu_items); + } + + menu_items = gtk_separator_menu_item_new (); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (call_back), NULL); gtk_widget_show (menu_items); - } - - menu_items = gtk_separator_menu_item_new (); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - gtk_widget_show (menu_items); - if (edit) + if (edit) { menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_EDIT, get_accel_group()); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); @@ -916,64 +917,64 @@ show_popup_menu_history(GtkWidget *my_widget, GdkEventButton *event) } - if(remove) - { - menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_DELETE, get_accel_group()); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - g_signal_connect (G_OBJECT (menu_items), "activate", G_CALLBACK (remove_from_history), NULL); - gtk_widget_show (menu_items); - } - - if (event) - { - button = event->button; - event_time = event->time; - } - else - { - button = 0; - event_time = gtk_get_current_event_time (); - } - - gtk_menu_attach_to_widget (GTK_MENU (menu), my_widget, NULL); - gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, - button, event_time); + if(remove) + { + menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_DELETE, get_accel_group()); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + g_signal_connect (G_OBJECT (menu_items), "activate", G_CALLBACK (remove_from_history), NULL); + gtk_widget_show (menu_items); + } + + if (event) + { + button = event->button; + event_time = event->time; + } + else + { + button = 0; + event_time = gtk_get_current_event_time (); + } + + gtk_menu_attach_to_widget (GTK_MENU (menu), my_widget, NULL); + gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, + button, event_time); } void show_popup_menu_contacts(GtkWidget *my_widget, GdkEventButton *event) { - gboolean pickup = FALSE; - gboolean accounts = FALSE; - gboolean edit = FALSE; + gboolean pickup = FALSE; + gboolean accounts = FALSE; + gboolean edit = FALSE; - call_t * selectedCall = calltab_get_selected_call( contacts ); - if (selectedCall) - { - pickup = TRUE; - accounts = TRUE; - edit = TRUE; - } + call_t * selectedCall = calltab_get_selected_call( contacts ); + if (selectedCall) + { + pickup = TRUE; + accounts = TRUE; + edit = TRUE; + } - GtkWidget *menu; - GtkWidget *image; - int button, event_time; - GtkWidget * menu_items; + GtkWidget *menu; + GtkWidget *image; + int button, event_time; + GtkWidget * menu_items; - menu = gtk_menu_new (); - //g_signal_connect (menu, "deactivate", - // G_CALLBACK (gtk_widget_destroy), NULL); + menu = gtk_menu_new (); + //g_signal_connect (menu, "deactivate", + // G_CALLBACK (gtk_widget_destroy), NULL); - if(pickup) - { + if(pickup) + { - menu_items = gtk_image_menu_item_new_with_mnemonic(_("_New call")); - image = gtk_image_new_from_file( ICONS_DIR "/icon_accept.svg"); - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( menu_items ), image ); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (call_back), NULL); - gtk_widget_show (menu_items); - } + menu_items = gtk_image_menu_item_new_with_mnemonic(_("_New call")); + image = gtk_image_new_from_file( ICONS_DIR "/icon_accept.svg"); + gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( menu_items ), image ); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (call_back), NULL); + gtk_widget_show (menu_items); + } if (edit) { @@ -983,25 +984,25 @@ show_popup_menu_contacts(GtkWidget *my_widget, GdkEventButton *event) gtk_widget_show (menu_items); } - if(accounts) - { - add_registered_accounts_to_menu (menu); + if(accounts) + { + add_registered_accounts_to_menu (menu); + } + + if (event) + { + button = event->button; + event_time = event->time; + } + else + { + button = 0; + event_time = gtk_get_current_event_time (); } - if (event) - { - button = event->button; - event_time = event->time; - } - else - { - button = 0; - event_time = gtk_get_current_event_time (); - } - - gtk_menu_attach_to_widget (GTK_MENU (menu), my_widget, NULL); - gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, - button, event_time); + gtk_menu_attach_to_widget (GTK_MENU (menu), my_widget, NULL); + gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, + button, event_time); } @@ -1009,7 +1010,7 @@ void add_registered_accounts_to_menu (GtkWidget *menu) { GtkWidget *menu_items; unsigned int i; - account_t* acc; + account_t* acc, *current; gchar* alias; menu_items = gtk_separator_menu_item_new (); @@ -1017,23 +1018,24 @@ void add_registered_accounts_to_menu (GtkWidget *menu) { gtk_widget_show (menu_items); for( i = 0 ; i < account_list_get_size() ; i++ ){ - acc = account_list_get_nth(i); - // Display only the registered accounts - if( g_strcasecmp( account_state_name(acc -> state) , account_state_name(ACCOUNT_STATE_REGISTERED) ) == 0 ){ - alias = g_strconcat( g_hash_table_lookup(acc->properties , ACCOUNT_ALIAS) , " - ",g_hash_table_lookup(acc->properties , ACCOUNT_TYPE), NULL); - menu_items = gtk_check_menu_item_new_with_mnemonic(alias); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - g_object_set_data( G_OBJECT( menu_items ) , "account" , acc ); - g_free( alias ); - if( account_list_get_current() != NULL ){ - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_items), - (g_strcasecmp( acc->accountID , account_list_get_current()->accountID) == 0)? TRUE : FALSE); - } - g_signal_connect (G_OBJECT (menu_items), "activate", - G_CALLBACK (switch_account), - NULL); - gtk_widget_show (menu_items); - } // fi + acc = account_list_get_nth(i); + // Display only the registered accounts + if( g_strcasecmp( account_state_name(acc -> state) , account_state_name(ACCOUNT_STATE_REGISTERED) ) == 0 ){ + alias = g_strconcat( g_hash_table_lookup(acc->properties , ACCOUNT_ALIAS) , " - ",g_hash_table_lookup(acc->properties , ACCOUNT_TYPE), NULL); + menu_items = gtk_check_menu_item_new_with_mnemonic(alias); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + g_object_set_data( G_OBJECT( menu_items ) , "account" , acc ); + g_free( alias ); + current = account_list_get_current(); + if(current){ + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_items), + (g_strcasecmp( acc->accountID , current->accountID) == 0)? TRUE : FALSE); + } + g_signal_connect (G_OBJECT (menu_items), "activate", + G_CALLBACK (switch_account), + NULL); + gtk_widget_show (menu_items); + } // fi } } @@ -1088,7 +1090,7 @@ void show_edit_number (call_t *call) { // Set the number to be edited editable_num = gtk_entry_new (); #if GTK_CHECK_VERSION(2,12,0) - gtk_widget_set_tooltip_text(GTK_WIDGET(editable_num), _("Edit the phone number before making a call")); + gtk_widget_set_tooltip_text(GTK_WIDGET(editable_num), _("Edit the phone number before making a call")); #endif if (call) gtk_entry_set_text(GTK_ENTRY(editable_num), g_strdup (call_get_number (call))); diff --git a/sflphone-client-gnome/src/sflnotify.c b/sflphone-client-gnome/src/sflnotify.c index 4021a044f0228a08943e4f1dd6778d88039a43b9..882aeb5407b90c4e21a05c3d444872204f5912a7 100644 --- a/sflphone-client-gnome/src/sflnotify.c +++ b/sflphone-client-gnome/src/sflnotify.c @@ -19,124 +19,94 @@ #include <sflnotify.h> -static NotifyNotification *notification; +GnomeNotification *_gnome_notification; - void -notify_incoming_call( call_t* c ) +void create_new_gnome_notification (gchar *title, gchar *body, NotifyUrgency urgency, gint timeout, GnomeNotification **notif) { - if( dbus_get_notify()){ + GnomeNotification *_notif; - GdkPixbuf *pixbuf; - gchar* callerid; - gchar* title; - notify_init("sflphone"); + if( dbus_get_notify()){ - if (g_strcasecmp (c->accountID,"") == 0) { - title = g_markup_printf_escaped ("IP-to-IP call"); - } - else { - title = g_markup_printf_escaped(_("%s account: %s") , - (gchar*)g_hash_table_lookup(account_list_get_by_id(c->accountID)->properties , ACCOUNT_TYPE) , - (gchar*)g_hash_table_lookup(account_list_get_by_id(c->accountID)->properties , ACCOUNT_ALIAS) ) ; - } - callerid = g_markup_printf_escaped(_("<i>From:</i> %s") , c->from); + _notif = g_new0 (GnomeNotification, 1); - pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/ring.svg", NULL); + notify_init ("SFLphone"); - notification = notify_notification_new( title, - callerid, - NULL, - NULL); - notify_notification_set_urgency( notification , NOTIFY_URGENCY_CRITICAL ); - notify_notification_set_icon_from_pixbuf (notification, pixbuf); + // Set struct fields + _notif->notification = notify_notification_new (title, body, NULL, NULL); + //_notif->icon = gdk_pixbuf_new_from_file_at_size (LOGO, 120, 120, NULL); + _notif->icon = gdk_pixbuf_new_from_file (LOGO_SMALL, NULL); #if GTK_CHECK_VERSION(2,10,0) - notify_notification_attach_to_status_icon( notification , get_status_icon() ); + notify_notification_attach_to_status_icon (_notif->notification , get_status_icon() ); #endif - notify_notification_set_timeout( notification , (( g_strcasecmp(__TIMEOUT_MODE, "default") == 0 )? __TIMEOUT_TIME : NOTIFY_EXPIRES_NEVER )); - g_object_set_data( G_OBJECT( notification ) , "call" , c ); - notify_notification_add_action( notification , "accept" , _("Accept") , (NotifyActionCallback) answer_call_cb , NULL, NULL ); - notify_notification_add_action( notification , "refuse" , _("Refuse") , (NotifyActionCallback) refuse_call_cb , NULL , NULL ); - notify_notification_add_action( notification , "ignore" , _("Ignore") , (NotifyActionCallback) ignore_call_cb , NULL , NULL ); - if (!notify_notification_show (notification, NULL)) { + notify_notification_set_urgency (_notif->notification, urgency); + + if (_notif->icon != NULL) + notify_notification_set_icon_from_pixbuf (_notif->notification, _notif->icon); + else + ERROR ("notify(), cannot load notification icon"); + + notify_notification_set_timeout (_notif->notification, timeout); + + if (!notify_notification_show (_notif->notification, NULL)) { ERROR("notify(), failed to send notification"); } + + *notif = _notif; } } - void -answer_call_cb( NotifyNotification *notification, gpointer data UNUSED ) -{ - call_t* c = (call_t*)g_object_get_data( G_OBJECT( notification ) , "call" ); - c->history_state = INCOMING; - calltree_update_call( history , c ); - dbus_accept(c); -#if GTK_CHECK_VERSION(2,10,0) - if( __POPUP_WINDOW ) - status_icon_unminimize(); -#endif - g_object_unref( notification ); -} - void -refuse_call_cb( NotifyNotification *notification, gpointer data UNUSED) -{ - call_t* c = (call_t*)g_object_get_data( G_OBJECT( notification ) , "call" ); - dbus_refuse(c); - g_object_unref( notification ); -} void -ignore_call_cb( NotifyNotification *notification, gpointer data UNUSED) +notify_incoming_call (call_t* c) { - g_object_unref( notification ); + + gchar* callerid; + gchar* title; + + if (g_strcasecmp (c->accountID,"") == 0) { + title = g_markup_printf_escaped ("IP-to-IP call"); + } + else { + title = g_markup_printf_escaped(_("%s account: %s") , + (gchar*)g_hash_table_lookup(account_list_get_by_id(c->accountID)->properties , ACCOUNT_TYPE) , + (gchar*)g_hash_table_lookup(account_list_get_by_id(c->accountID)->properties , ACCOUNT_ALIAS) ) ; + } + callerid = g_markup_printf_escaped(_("<i>From:</i> %s") , c->from); + + create_new_gnome_notification (title, + callerid, + NOTIFY_URGENCY_CRITICAL, + (g_strcasecmp(__TIMEOUT_MODE, "default") == 0 )? __TIMEOUT_TIME : NOTIFY_EXPIRES_NEVER, + &_gnome_notification); } void -notify_voice_mails( guint count , account_t* acc ) +notify_voice_mails (guint count, account_t* acc) { - - if( dbus_get_mail_notify()) { // the account is different from NULL - GdkPixbuf *pixbuf; gchar* title; gchar* body; - notify_init("sflphone"); title = g_markup_printf_escaped(_("%s account: %s") , (gchar*)g_hash_table_lookup(acc->properties , ACCOUNT_TYPE) , (gchar*) g_hash_table_lookup(acc->properties , ACCOUNT_ALIAS) ) ; body = g_markup_printf_escaped(_("%d voice mails"), count); - pixbuf = gdk_pixbuf_new_from_file(LOGO, NULL); - - notification = notify_notification_new( title, - body, - NULL, - NULL); - notify_notification_set_urgency( notification , NOTIFY_URGENCY_LOW ); - notify_notification_set_icon_from_pixbuf (notification, pixbuf); -#if GTK_CHECK_VERSION(2,10,0) - notify_notification_attach_to_status_icon( notification , get_status_icon() ); -#endif - notify_notification_set_timeout( notification , NOTIFY_EXPIRES_DEFAULT ); - notify_notification_add_action( notification , "ignore" , _("Ignore") , (NotifyActionCallback) ignore_call_cb , NULL , NULL ); - - if (!notify_notification_show (notification, NULL)) { - ERROR("notify(), failed to send notification"); - } - } + create_new_gnome_notification (title, + body, + NOTIFY_URGENCY_LOW, + NOTIFY_EXPIRES_DEFAULT, + &_gnome_notification); } void -notify_current_account( account_t* acc ) +notify_current_account (account_t* acc) { - if( dbus_get_notify()){ // the account is different from NULL - GdkPixbuf *pixbuf; gchar* title; gchar* body=""; - notify_init("sflphone"); body = g_markup_printf_escaped(_("Calling with %s account <i>%s</i>") , (gchar*)g_hash_table_lookup( acc->properties , ACCOUNT_TYPE) , @@ -144,109 +114,69 @@ notify_current_account( account_t* acc ) title = g_markup_printf_escaped(_("Current account")); - pixbuf = gdk_pixbuf_new_from_file(LOGO, NULL); - - notification = notify_notification_new( title, - body, - NULL, - NULL); - notify_notification_set_urgency( notification , NOTIFY_URGENCY_NORMAL ); - notify_notification_set_icon_from_pixbuf (notification, pixbuf); -#if GTK_CHECK_VERSION(2,10,0) - notify_notification_attach_to_status_icon( notification , get_status_icon() ); -#endif - notify_notification_set_timeout( notification , NOTIFY_EXPIRES_DEFAULT ); - notify_notification_add_action( notification , "ignore" , _("Ignore") , (NotifyActionCallback) ignore_call_cb , NULL , NULL ); - - if (!notify_notification_show (notification, NULL)) { - ERROR("notify(), failed to send notification"); - } - } + create_new_gnome_notification (title, + body, + NOTIFY_URGENCY_NORMAL, + NOTIFY_EXPIRES_DEFAULT, + &_gnome_notification); } + void -notify_no_accounts( ) +notify_no_accounts () { - GdkPixbuf *pixbuf; gchar* title; gchar* body=""; - notify_init("sflphone"); body = g_markup_printf_escaped(_("You haven't setup any accounts")); - title = g_markup_printf_escaped(_("Error")); - pixbuf = gdk_pixbuf_new_from_file(LOGO, NULL); - - notification = notify_notification_new( title, - body, - NULL, - NULL); - notify_notification_set_urgency( notification , NOTIFY_URGENCY_CRITICAL ); - notify_notification_set_icon_from_pixbuf (notification, pixbuf); -#if GTK_CHECK_VERSION(2,10,0) - notify_notification_attach_to_status_icon( notification , get_status_icon() ); -#endif - notify_notification_set_timeout( notification , NOTIFY_EXPIRES_DEFAULT ); - //notify_notification_add_action( notification , "setup" , _("Setup Accounts") , (NotifyActionCallback) setup_accounts_cb , NULL , NULL ); - - if (!notify_notification_show (notification, NULL)) { - ERROR("notify(), failed to send notification"); - } + create_new_gnome_notification (title, + body, + NOTIFY_URGENCY_CRITICAL, + NOTIFY_EXPIRES_DEFAULT, + &_gnome_notification); } - void -setup_accounts_cb( NotifyNotification *notification, gpointer data UNUSED) -{ - //gtk_widget_set_parent( show_accounts_window() , GTK_WIDGET(get_main_window())); - show_accounts_window(); - g_object_unref( notification ); -} void -notify_no_registered_accounts( ) +notify_no_registered_accounts () { - GdkPixbuf *pixbuf; gchar* title; gchar* body=""; - notify_init("sflphone"); - body = g_markup_printf_escaped(_("You have no registered accounts")); - - title = g_markup_printf_escaped(_("Error")); - pixbuf = gdk_pixbuf_new_from_file(LOGO, NULL); - - notification = notify_notification_new( title, - body, - NULL, - NULL); - notify_notification_set_urgency( notification , NOTIFY_URGENCY_CRITICAL ); - notify_notification_set_icon_from_pixbuf (notification, pixbuf); -#if GTK_CHECK_VERSION(2,10,0) - notify_notification_attach_to_status_icon( notification , get_status_icon() ); -#endif - notify_notification_set_timeout( notification , NOTIFY_EXPIRES_DEFAULT ); - //notify_notification_add_action( notification , "setup" , _("Setup Accounts") , (NotifyActionCallback) setup_accounts_cb , NULL , NULL ); - - if (!notify_notification_show (notification, NULL)) { - ERROR("notify(), failed to send notification"); - } - + create_new_gnome_notification (title, + body, + NOTIFY_URGENCY_CRITICAL, + NOTIFY_EXPIRES_DEFAULT, + &_gnome_notification); } void stop_notification( void ) { - if( notification != NULL ) + /* + if( _gnome_notification != NULL ) { - if(notify_notification_show( notification , NULL)) + if(_gnome_notification->notification != NULL) { - notify_notification_close( notification , NULL); - g_object_unref( notification ); - notification = NULL; + notify_notification_close (_gnome_notification->notification, NULL); + g_object_unref(_gnome_notification->notification ); + _gnome_notification->notification = NULL; } - notification = NULL; - } + free_notification (_gnome_notification); + }*/ +} + +/** + * Freeing a notification instance + */ +void free_notification (GnomeNotification *g) +{ + g_free(g->title); + g_free(g->body); + g_free(g->notification); + g_free(g); } diff --git a/sflphone-client-gnome/src/sflnotify.h b/sflphone-client-gnome/src/sflnotify.h index 6131322b445326a68b60114d1c849d5a020ad208..1f0fdff962ba1c3b8028a036d79ca90a5cc3cdf9 100644 --- a/sflphone-client-gnome/src/sflnotify.h +++ b/sflphone-client-gnome/src/sflnotify.h @@ -17,9 +17,8 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ - -#ifndef __SFL_NOTIFY_H__ -#define __SFL_NOTIFY_H__ +#ifndef __GNOME_NOTIFICATION_H__ +#define __GNOME_NOTIFICATION_H__ /** @file sflnotify.h * @brief Implements desktop notification for incoming events. @@ -29,11 +28,22 @@ #include <accountlist.h> #include <calllist.h> #include <dbus/dbus.h> -#include <actions.h> #include <statusicon.h> -#include <configwindow.h> #include <sflphone_const.h> +G_BEGIN_DECLS + +typedef struct { + NotifyNotification *notification; + gchar *title; + gchar *body; + GdkPixbuf *icon; +} GnomeNotification; + +void create_new_gnome_notification (gchar *title, gchar *body, NotifyUrgency urgency, gint timeout, GnomeNotification **notif); + +void free_notification (GnomeNotification *g); + /** * Notify an incoming call * A dialog box is attached to the status icon @@ -65,41 +75,11 @@ void notify_no_accounts( ); */ void notify_no_registered_accounts( ); -/** - * Callback when answer button is pressed. - * Action associated: Pick up the incoming call - * @param notification The pointer on the notification structure - * @param data The data associated. Here: call_t* - */ -void answer_call_cb( NotifyNotification *notification, gpointer data ); - -/** - * Callback when refuse button is pressed - * Action associated: Hang up the incoming call - * @param notification The pointer on the notification structure - * @param data The data associated. Here: call_t* - */ -void refuse_call_cb( NotifyNotification *notification, gpointer data ); - -/** - * Callback when ignore button is pressed - * Action associated: Nothing - The call continues ringing - * @param notification The pointer on the notification structure - * @param data The data associated. Here: call_t* - */ -void ignore_call_cb( NotifyNotification *notification, gpointer data ); - -/** - * Callback when you try to make a call without accounts setup and 'setup account' button is clicked. - * Action associated: Open the account window - * @param notification The pointer on the notification structure - * @param data The data associated. Here: account_t* - */ -void setup_accounts_cb(NotifyNotification *notification, gpointer data); - /** * Stop and close the current notification if an action occured before the timeout */ void stop_notification( void ); +G_END_DECLS + #endif diff --git a/sflphone-client-gnome/src/sflphone_const.h b/sflphone-client-gnome/src/sflphone_const.h index cb71c403da397ab1ba546881b16eb686eb63e9ce..9ae9bbb696a50aa3a6b8207c7f5a8f30ab0dd8e3 100644 --- a/sflphone-client-gnome/src/sflphone_const.h +++ b/sflphone-client-gnome/src/sflphone_const.h @@ -28,8 +28,8 @@ * @brief Contains the global variables for the client code */ - -#define LOGO ICONS_DIR "/sflphone1.svg" +#define LOGO ICONS_DIR "/sflphone.svg" +#define LOGO_SMALL ICONS_DIR "/sflphone_small.svg" /** Locale */ #define _(STRING) gettext( STRING ) diff --git a/sflphone-client-gnome/src/statusicon.c b/sflphone-client-gnome/src/statusicon.c index e95f141887c3019091114441dd7da65b883fbc73..18fd693c13be0226b7edc7dbfc01cbf5f7e1fe63 100644 --- a/sflphone-client-gnome/src/statusicon.c +++ b/sflphone-client-gnome/src/statusicon.c @@ -121,7 +121,7 @@ show_status_icon() create_menu()); // Add a tooltip to the system tray icon - gchar *tip = g_markup_printf_escaped (_("SFLphone - %i accounts registered") , account_list_get_size()); + gchar *tip = g_markup_printf_escaped (_("SFLphone - %i accounts configured") , account_list_get_size()); gtk_status_icon_set_tooltip( status , tip ); g_free(tip); } diff --git a/sflphone-client-gnome/src/toolbar.c b/sflphone-client-gnome/src/toolbar.c index f6a59c73425ce9917b0536c6861f702ddbefa286..68ed11fce3223fcf4b8dc9a8320be40f05f108bf 100644 --- a/sflphone-client-gnome/src/toolbar.c +++ b/sflphone-client-gnome/src/toolbar.c @@ -20,134 +20,134 @@ #include <toolbar.h> #include <contacts/addressbook.h> -static gboolean + static gboolean is_inserted( GtkWidget* button ) { - return ( GTK_WIDGET(button)->parent == GTK_WIDGET( toolbar ) ); + return ( GTK_WIDGET(button)->parent == GTK_WIDGET( toolbar ) ); } /** * Static rec_button */ -static void + static void rec_button( GtkWidget *widget UNUSED, gpointer data UNUSED) { - sflphone_rec_call(); + sflphone_rec_call(); } -static void + static void call_mailbox( GtkWidget* widget UNUSED, gpointer data UNUSED) { - account_t* current; - call_t *mailbox_call; - gchar *to, *from, *account_id; - - current = account_list_get_current (); - if( current == NULL ) // Should not happens - return; - - to = g_strdup(g_hash_table_lookup(current->properties, ACCOUNT_MAILBOX)); - from = g_markup_printf_escaped(_("\"Voicemail\" <%s>"), to); - account_id = g_strdup (current->accountID); - - create_new_call (to, from, CALL_STATE_DIALING, account_id, &mailbox_call); - DEBUG("TO : %s" , mailbox_call->to); - calllist_add( current_calls , mailbox_call ); - calltree_add_call( current_calls , mailbox_call ); - update_menus(); - sflphone_place_call( mailbox_call ); - calltree_display(current_calls); + account_t* current; + call_t *mailbox_call; + gchar *to, *from, *account_id; + + current = account_list_get_current (); + if( current == NULL ) // Should not happens + return; + + to = g_strdup(g_hash_table_lookup(current->properties, ACCOUNT_MAILBOX)); + from = g_markup_printf_escaped(_("\"Voicemail\" <%s>"), to); + account_id = g_strdup (current->accountID); + + create_new_call (to, from, CALL_STATE_DIALING, account_id, &mailbox_call); + DEBUG("TO : %s" , mailbox_call->to); + calllist_add( current_calls , mailbox_call ); + calltree_add_call( current_calls , mailbox_call ); + update_menus(); + sflphone_place_call( mailbox_call ); + calltree_display(current_calls); } - /** +/** * Make a call */ - static void + static void call_button( GtkWidget *widget UNUSED, gpointer data UNUSED) { - DEBUG("------ call_button -----"); - call_t * selectedCall; - call_t* new_call; - gchar *to, *from; + DEBUG("------ call_button -----"); + call_t * selectedCall; + call_t* new_call; + gchar *to, *from; - selectedCall = calltab_get_selected_call(active_calltree); + selectedCall = calltab_get_selected_call(active_calltree); - if(calllist_get_size(current_calls)>0) - sflphone_pick_up(); + if(calllist_get_size(current_calls)>0) + sflphone_pick_up(); - else if(calllist_get_size(active_calltree) > 0){ - if( selectedCall) - { - DEBUG("Calling a called num"); + else if(calllist_get_size(active_calltree) > 0){ + if( selectedCall) + { + DEBUG("Calling a called num"); - to = g_strdup(call_get_number(selectedCall)); - from = g_strconcat("\"\" <", call_get_number(selectedCall), ">",NULL); + to = g_strdup(call_get_number(selectedCall)); + from = g_strconcat("\"\" <", call_get_number(selectedCall), ">",NULL); - create_new_call (to, from, CALL_STATE_DIALING, "", &new_call); + create_new_call (to, from, CALL_STATE_DIALING, "", &new_call); - DEBUG("call : from : %s to %s", new_call->from, new_call->to); + DEBUG("call : from : %s to %s", new_call->from, new_call->to); - calllist_add(current_calls, new_call); - calltree_add_call(current_calls, new_call); - sflphone_place_call(new_call); - calltree_display (current_calls); + calllist_add(current_calls, new_call); + calltree_add_call(current_calls, new_call); + sflphone_place_call(new_call); + calltree_display (current_calls); + } + else + { + sflphone_new_call(); + calltree_display(current_calls); + } } else { - sflphone_new_call(); - calltree_display(current_calls); + sflphone_new_call(); + calltree_display(current_calls); } - } - else - { - sflphone_new_call(); - calltree_display(current_calls); - } } /** * Hang up the line */ - static void + static void hang_up( GtkWidget *widget UNUSED, gpointer data UNUSED) { - sflphone_hang_up(); + sflphone_hang_up(); } /** * Hold the line */ - static void + static void hold( GtkWidget *widget UNUSED, gpointer data UNUSED) { - sflphone_on_hold(); + sflphone_on_hold(); } /** * Transfert the line */ - static void + static void transfert (GtkToggleToolButton *toggle_tool_button, - gpointer user_data UNUSED ) + gpointer user_data UNUSED ) { - gboolean up = gtk_toggle_tool_button_get_active(toggle_tool_button); - if(up) - { - sflphone_set_transfert(); - } - else - { - sflphone_unset_transfert(); - } + gboolean up = gtk_toggle_tool_button_get_active(toggle_tool_button); + if(up) + { + sflphone_set_transfert(); + } + else + { + sflphone_unset_transfert(); + } } /** * Unhold call */ - static void + static void unhold( GtkWidget *widget UNUSED, gpointer data UNUSED) { - sflphone_off_hold(); + sflphone_off_hold(); } static void toggle_button_cb (GtkToggleToolButton *widget, gpointer user_data) @@ -163,214 +163,223 @@ static void toggle_button_cb (GtkToggleToolButton *widget, gpointer user_data) GtkWidget *create_toolbar () { - GtkWidget *ret; - GtkWidget *image; + GtkWidget *ret; + GtkWidget *image; - ret = gtk_toolbar_new(); - toolbar = ret; + ret = gtk_toolbar_new(); + toolbar = ret; - gtk_toolbar_set_orientation(GTK_TOOLBAR(ret), GTK_ORIENTATION_HORIZONTAL); - gtk_toolbar_set_style(GTK_TOOLBAR(ret), GTK_TOOLBAR_ICONS); + gtk_toolbar_set_orientation(GTK_TOOLBAR(ret), GTK_ORIENTATION_HORIZONTAL); + gtk_toolbar_set_style(GTK_TOOLBAR(ret), GTK_TOOLBAR_ICONS); - image = gtk_image_new_from_file( ICONS_DIR "/call.svg"); - callButton = gtk_tool_button_new (image, _("Place a call")); + image = gtk_image_new_from_file( ICONS_DIR "/call.svg"); + callButton = gtk_tool_button_new (image, _("Place a call")); #if GTK_CHECK_VERSION(2,12,0) - gtk_widget_set_tooltip_text(GTK_WIDGET(callButton), _("Place a call")); + gtk_widget_set_tooltip_text(GTK_WIDGET(callButton), _("Place a call")); #endif - g_signal_connect (G_OBJECT (callButton), "clicked", - G_CALLBACK (call_button), NULL); - gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(callButton), -1); + g_signal_connect (G_OBJECT (callButton), "clicked", + G_CALLBACK (call_button), NULL); + gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(callButton), -1); - image = gtk_image_new_from_file( ICONS_DIR "/accept.svg"); - pickupButton = gtk_tool_button_new(image, _("Pick up")); + image = gtk_image_new_from_file( ICONS_DIR "/accept.svg"); + pickupButton = gtk_tool_button_new(image, _("Pick up")); #if GTK_CHECK_VERSION(2,12,0) - gtk_widget_set_tooltip_text(GTK_WIDGET(pickupButton), _("Pick up")); + gtk_widget_set_tooltip_text(GTK_WIDGET(pickupButton), _("Pick up")); #endif - gtk_widget_set_state( GTK_WIDGET(pickupButton), GTK_STATE_INSENSITIVE); - g_signal_connect(G_OBJECT (pickupButton), "clicked", - G_CALLBACK (call_button), NULL); - gtk_widget_show_all(GTK_WIDGET(pickupButton)); + gtk_widget_set_state( GTK_WIDGET(pickupButton), GTK_STATE_INSENSITIVE); + g_signal_connect(G_OBJECT (pickupButton), "clicked", + G_CALLBACK (call_button), NULL); + gtk_widget_show_all(GTK_WIDGET(pickupButton)); - image = gtk_image_new_from_file( ICONS_DIR "/hang_up.svg"); - hangupButton = gtk_tool_button_new (image, _("Hang up")); + image = gtk_image_new_from_file( ICONS_DIR "/hang_up.svg"); + hangupButton = gtk_tool_button_new (image, _("Hang up")); #if GTK_CHECK_VERSION(2,12,0) - gtk_widget_set_tooltip_text(GTK_WIDGET(hangupButton), _("Hang up")); + gtk_widget_set_tooltip_text(GTK_WIDGET(hangupButton), _("Hang up")); #endif - gtk_widget_set_state( GTK_WIDGET(hangupButton), GTK_STATE_INSENSITIVE); - g_signal_connect (G_OBJECT (hangupButton), "clicked", - G_CALLBACK (hang_up), NULL); - gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(hangupButton), -1); + gtk_widget_set_state( GTK_WIDGET(hangupButton), GTK_STATE_INSENSITIVE); + g_signal_connect (G_OBJECT (hangupButton), "clicked", + G_CALLBACK (hang_up), NULL); + gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(hangupButton), -1); - image = gtk_image_new_from_file( ICONS_DIR "/unhold.svg"); - unholdButton = gtk_tool_button_new (image, _("Off Hold")); + image = gtk_image_new_from_file( ICONS_DIR "/unhold.svg"); + unholdButton = gtk_tool_button_new (image, _("Off Hold")); #if GTK_CHECK_VERSION(2,12,0) - gtk_widget_set_tooltip_text(GTK_WIDGET(unholdButton), _("Off Hold")); + gtk_widget_set_tooltip_text(GTK_WIDGET(unholdButton), _("Off Hold")); #endif - gtk_widget_set_state( GTK_WIDGET(unholdButton), GTK_STATE_INSENSITIVE); - g_signal_connect (G_OBJECT (unholdButton), "clicked", - G_CALLBACK (unhold), NULL); - //gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(unholdButton), -1); - gtk_widget_show_all(GTK_WIDGET(unholdButton)); - - image = gtk_image_new_from_file( ICONS_DIR "/hold.svg"); - holdButton = gtk_tool_button_new (image, _("On Hold")); + gtk_widget_set_state( GTK_WIDGET(unholdButton), GTK_STATE_INSENSITIVE); + g_signal_connect (G_OBJECT (unholdButton), "clicked", + G_CALLBACK (unhold), NULL); + //gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(unholdButton), -1); + gtk_widget_show_all(GTK_WIDGET(unholdButton)); + + image = gtk_image_new_from_file( ICONS_DIR "/hold.svg"); + holdButton = gtk_tool_button_new (image, _("On Hold")); #if GTK_CHECK_VERSION(2,12,0) - gtk_widget_set_tooltip_text(GTK_WIDGET(holdButton), _("On Hold")); + gtk_widget_set_tooltip_text(GTK_WIDGET(holdButton), _("On Hold")); #endif - gtk_widget_set_state( GTK_WIDGET(holdButton), GTK_STATE_INSENSITIVE); - g_signal_connect (G_OBJECT (holdButton), "clicked", - G_CALLBACK (hold), NULL); - gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(holdButton), -1); - - image = gtk_image_new_from_file( ICONS_DIR "/transfert.svg"); - transfertButton = gtk_toggle_tool_button_new (); - gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(transfertButton), image); + gtk_widget_set_state( GTK_WIDGET(holdButton), GTK_STATE_INSENSITIVE); + g_signal_connect (G_OBJECT (holdButton), "clicked", + G_CALLBACK (hold), NULL); + gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(holdButton), -1); + + image = gtk_image_new_from_file( ICONS_DIR "/transfert.svg"); + transfertButton = gtk_toggle_tool_button_new (); + gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(transfertButton), image); #if GTK_CHECK_VERSION(2,12,0) - gtk_widget_set_tooltip_text(GTK_WIDGET(transfertButton), _("Transfer")); + gtk_widget_set_tooltip_text(GTK_WIDGET(transfertButton), _("Transfer")); #endif - gtk_tool_button_set_label(GTK_TOOL_BUTTON(transfertButton), _("Transfer")); - gtk_widget_set_state( GTK_WIDGET(transfertButton), GTK_STATE_INSENSITIVE); - transfertButtonConnId = g_signal_connect (G_OBJECT (transfertButton), "toggled", - G_CALLBACK (transfert), NULL); - gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(transfertButton), -1); - - image = gtk_image_new_from_file( ICONS_DIR "/history2.svg"); - historyButton = gtk_toggle_tool_button_new(); - gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (historyButton), image); + gtk_tool_button_set_label(GTK_TOOL_BUTTON(transfertButton), _("Transfer")); + gtk_widget_set_state( GTK_WIDGET(transfertButton), GTK_STATE_INSENSITIVE); + transfertButtonConnId = g_signal_connect (G_OBJECT (transfertButton), "toggled", + G_CALLBACK (transfert), NULL); + gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(transfertButton), -1); + + image = gtk_image_new_from_file( ICONS_DIR "/history2.svg"); + historyButton = gtk_toggle_tool_button_new(); + gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (historyButton), image); #if GTK_CHECK_VERSION(2,12,0) - gtk_widget_set_tooltip_text(GTK_WIDGET(historyButton), _("History")); + gtk_widget_set_tooltip_text(GTK_WIDGET(historyButton), _("History")); #endif - gtk_tool_button_set_label (GTK_TOOL_BUTTON (historyButton), _("History")); - g_signal_connect (G_OBJECT (historyButton), "toggled", G_CALLBACK (toggle_button_cb), history); - gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(historyButton), -1); - active_calltree = current_calls; - - image = gtk_image_new_from_file( ICONS_DIR "/addressbook.svg"); - contactButton = gtk_toggle_tool_button_new(); - gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (contactButton), image); + gtk_tool_button_set_label (GTK_TOOL_BUTTON (historyButton), _("History")); + g_signal_connect (G_OBJECT (historyButton), "toggled", G_CALLBACK (toggle_button_cb), history); + gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(historyButton), -1); + active_calltree = current_calls; + + image = gtk_image_new_from_file( ICONS_DIR "/addressbook.svg"); + contactButton = gtk_toggle_tool_button_new(); + gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (contactButton), image); #if GTK_CHECK_VERSION(2,12,0) - gtk_widget_set_tooltip_text(GTK_WIDGET(contactButton), _("Address book")); + gtk_widget_set_tooltip_text(GTK_WIDGET(contactButton), _("Address book")); #endif - gtk_tool_button_set_label (GTK_TOOL_BUTTON (contactButton), _("Address book")); - gtk_widget_set_state( GTK_WIDGET(contactButton), GTK_STATE_INSENSITIVE); - g_signal_connect (G_OBJECT (contactButton), "toggled", G_CALLBACK (toggle_button_cb), contacts); - gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(contactButton), -1); - - image = gtk_image_new_from_file( ICONS_DIR "/mailbox.svg"); - mailboxButton = gtk_tool_button_new( image , _("Voicemail")); - gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(mailboxButton), image); - if( account_list_get_size() ==0 ) gtk_widget_set_state( GTK_WIDGET(mailboxButton), GTK_STATE_INSENSITIVE ); + gtk_tool_button_set_label (GTK_TOOL_BUTTON (contactButton), _("Address book")); + gtk_widget_set_state( GTK_WIDGET(contactButton), GTK_STATE_INSENSITIVE); + g_signal_connect (G_OBJECT (contactButton), "toggled", G_CALLBACK (toggle_button_cb), contacts); + gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(contactButton), -1); + + image = gtk_image_new_from_file( ICONS_DIR "/mailbox.svg"); + mailboxButton = gtk_tool_button_new( image , _("Voicemail")); + gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(mailboxButton), image); + if( account_list_get_size() ==0 ) gtk_widget_set_state( GTK_WIDGET(mailboxButton), GTK_STATE_INSENSITIVE ); #if GTK_CHECK_VERSION(2,12,0) - gtk_widget_set_tooltip_text(GTK_WIDGET(mailboxButton), _("Voicemail")); + gtk_widget_set_tooltip_text(GTK_WIDGET(mailboxButton), _("Voicemail")); #endif - g_signal_connect (G_OBJECT (mailboxButton), "clicked", - G_CALLBACK (call_mailbox), NULL); - gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(mailboxButton), -1); + g_signal_connect (G_OBJECT (mailboxButton), "clicked", + G_CALLBACK (call_mailbox), NULL); + gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(mailboxButton), -1); - recButton = gtk_tool_button_new_from_stock (GTK_STOCK_MEDIA_RECORD); + recButton = gtk_tool_button_new_from_stock (GTK_STOCK_MEDIA_RECORD); #if GTK_CHECK_VERSION(2,12,0) - gtk_widget_set_tooltip_text(GTK_WIDGET(recButton), _("Record a call")); + gtk_widget_set_tooltip_text(GTK_WIDGET(recButton), _("Record a call")); #endif - gtk_widget_set_state( GTK_WIDGET(recButton), GTK_STATE_INSENSITIVE); - g_signal_connect (G_OBJECT (recButton), "clicked", - G_CALLBACK (rec_button), NULL); - gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(recButton), -1); + gtk_widget_set_state( GTK_WIDGET(recButton), GTK_STATE_INSENSITIVE); + g_signal_connect (G_OBJECT (recButton), "clicked", + G_CALLBACK (rec_button), NULL); + gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(recButton), -1); - return ret; + return ret; } - void + void toolbar_update_buttons () { - gtk_widget_set_sensitive( GTK_WIDGET(callButton), FALSE); - gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), FALSE); - gtk_widget_set_sensitive( GTK_WIDGET(holdButton), FALSE); - gtk_widget_set_sensitive( GTK_WIDGET(transfertButton), FALSE); - gtk_widget_set_sensitive( GTK_WIDGET(mailboxButton) , FALSE); - gtk_widget_set_sensitive( GTK_WIDGET(unholdButton), FALSE); - gtk_widget_set_sensitive( GTK_WIDGET(recButton), FALSE); - g_object_ref(holdButton); - g_object_ref(unholdButton); - if( is_inserted( GTK_WIDGET(holdButton) ) ) gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(holdButton)); - if( is_inserted( GTK_WIDGET(unholdButton) ) ) gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(unholdButton)); - gtk_toolbar_insert(GTK_TOOLBAR(toolbar), holdButton, 3); - g_object_ref(callButton); - g_object_ref(pickupButton); - if( is_inserted( GTK_WIDGET(callButton) ) ) gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(callButton)); - if( is_inserted( GTK_WIDGET(pickupButton) ) ) gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(pickupButton)); - gtk_toolbar_insert(GTK_TOOLBAR(toolbar), callButton, 0); - //gtk_toolbar_insert(GTK_TOOLBAR(toolbar), recButton, 0); - - - gtk_signal_handler_block(GTK_OBJECT(transfertButton),transfertButtonConnId); - gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(transfertButton), FALSE); - gtk_signal_handler_unblock(transfertButton, transfertButtonConnId); - - call_t * selectedCall = calltab_get_selected_call(active_calltree); + + gtk_widget_set_sensitive( GTK_WIDGET(callButton), FALSE); + gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), FALSE); + gtk_widget_set_sensitive( GTK_WIDGET(holdButton), FALSE); + gtk_widget_set_sensitive( GTK_WIDGET(transfertButton), FALSE); + gtk_widget_set_sensitive( GTK_WIDGET(mailboxButton) , FALSE); + gtk_widget_set_sensitive( GTK_WIDGET(unholdButton), FALSE); + gtk_widget_set_sensitive( GTK_WIDGET(recButton), FALSE); + gtk_widget_set_sensitive( GTK_WIDGET(contactButton), FALSE); + g_object_ref (contactButton); + if( is_inserted( GTK_WIDGET(contactButton) ) ) gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET (contactButton)); + g_object_ref(holdButton); + g_object_ref(unholdButton); + if( is_inserted( GTK_WIDGET(holdButton) ) ) gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(holdButton)); + if( is_inserted( GTK_WIDGET(unholdButton) ) ) gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(unholdButton)); + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), holdButton, 3); + g_object_ref(callButton); + g_object_ref(pickupButton); + if( is_inserted( GTK_WIDGET(callButton) ) ) gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(callButton)); + if( is_inserted( GTK_WIDGET(pickupButton) ) ) gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(pickupButton)); + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), callButton, 0); + + // If addressbook support has been enabled and all addressbooks are loaded, display the icon + if (addressbook_is_enabled () && addressbook_is_ready()) { + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), contactButton, 5); + // Make the icon clickable only if at least one address book is active + if (addressbook_is_active ()) gtk_widget_set_sensitive( GTK_WIDGET(contactButton), TRUE); + } + + gtk_signal_handler_block(GTK_OBJECT(transfertButton),transfertButtonConnId); + gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(transfertButton), FALSE); + gtk_signal_handler_unblock(transfertButton, transfertButtonConnId); + + call_t * selectedCall = calltab_get_selected_call(active_calltree); if (selectedCall) { switch(selectedCall->state) { case CALL_STATE_INCOMING: - gtk_widget_set_sensitive( GTK_WIDGET(pickupButton), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE); - g_object_ref(callButton); - gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(callButton)); - gtk_toolbar_insert(GTK_TOOLBAR(toolbar), pickupButton, 0); - break; + gtk_widget_set_sensitive( GTK_WIDGET(pickupButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE); + g_object_ref(callButton); + gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(callButton)); + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), pickupButton, 0); + break; case CALL_STATE_HOLD: - gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(unholdButton), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(callButton), TRUE); - g_object_ref(holdButton); - gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(holdButton)); - gtk_toolbar_insert(GTK_TOOLBAR(toolbar), unholdButton, 3); - break; + gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(unholdButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(callButton), TRUE); + g_object_ref(holdButton); + gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(holdButton)); + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), unholdButton, 3); + break; case CALL_STATE_RINGING: - gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(callButton), TRUE); - break; + gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(callButton), TRUE); + break; case CALL_STATE_DIALING: - if( active_calltree == current_calls ) gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(pickupButton), TRUE); - g_object_ref(callButton); - gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(callButton)); - gtk_toolbar_insert(GTK_TOOLBAR(toolbar), pickupButton, 0); - break; + if( active_calltree == current_calls ) gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(pickupButton), TRUE); + g_object_ref(callButton); + gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(callButton)); + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), pickupButton, 0); + break; case CALL_STATE_CURRENT: - gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(holdButton), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(transfertButton), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(callButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(holdButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(transfertButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(callButton), TRUE); gtk_widget_set_sensitive( GTK_WIDGET(recButton), TRUE); - break; + break; case CALL_STATE_BUSY: case CALL_STATE_FAILURE: - gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE); - break; + gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE); + break; case CALL_STATE_TRANSFERT: - gtk_signal_handler_block(GTK_OBJECT(transfertButton),transfertButtonConnId); - gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(transfertButton), TRUE); - gtk_signal_handler_unblock(transfertButton, transfertButtonConnId); - gtk_widget_set_sensitive( GTK_WIDGET(callButton), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(holdButton), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(transfertButton), TRUE); - break; + gtk_signal_handler_block(GTK_OBJECT(transfertButton),transfertButtonConnId); + gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(transfertButton), TRUE); + gtk_signal_handler_unblock(transfertButton, transfertButtonConnId); + gtk_widget_set_sensitive( GTK_WIDGET(callButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(holdButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(transfertButton), TRUE); + break; case CALL_STATE_RECORD: - gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(holdButton), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(transfertButton), TRUE); - gtk_widget_set_sensitive( GTK_WIDGET(callButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(holdButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(transfertButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(callButton), TRUE); gtk_widget_set_sensitive( GTK_WIDGET(recButton), TRUE); - break; + break; default: - // Fix bug #1145 - // Actually it could happen when sflphone_fill_account_list() - // call this function and no "call" is selected - // WARN("Toolbar update - Should not happen!"); - break; + // Fix bug #1145 + // Actually it could happen when sflphone_fill_account_list() + // call this function and no "call" is selected + // WARN("Toolbar update - Should not happen!"); + break; } } else @@ -378,7 +387,8 @@ toolbar_update_buttons () if( account_list_get_size() > 0 ) { gtk_widget_set_sensitive( GTK_WIDGET(callButton), TRUE ); - gtk_widget_set_sensitive( GTK_WIDGET(mailboxButton), TRUE ); + if (account_list_current_account_has_mailbox ()) + gtk_widget_set_sensitive( GTK_WIDGET(mailboxButton), TRUE ); } else { @@ -386,10 +396,5 @@ toolbar_update_buttons () } } - // Activate addressbook button if needed - // TODO : should be moved in a better place - if(addressbook_is_ready()) - gtk_widget_set_sensitive( GTK_WIDGET(contactButton), TRUE); - else - gtk_widget_set_sensitive( GTK_WIDGET(contactButton), FALSE); + } diff --git a/sflphone-client-gnome/tests/check_global.c b/sflphone-client-gnome/tests/check_global.c index f464eefb27e8d859f7ddc430e0bde03ff34f420b..5ba1256895d63a31eac550ff920506d1fdc9fa08 100644 --- a/sflphone-client-gnome/tests/check_global.c +++ b/sflphone-client-gnome/tests/check_global.c @@ -24,23 +24,28 @@ #include "../src/accountlist.h" #include "../src/sflphone_const.h" -account_t* create_test_account () +account_t* create_test_account (gchar *alias) { account_t *test; + gchar *id; + + srand(time(NULL)); test = g_new0 (account_t, 1); - test->accountID = "test"; + id = g_new0(gchar, 30); + g_sprintf(id, "%s-%d", alias, rand()); + test->accountID = g_strdup (id); test->state = ACCOUNT_STATE_REGISTERED; test->properties = g_hash_table_new(NULL, g_str_equal); // Populate the properties g_hash_table_replace (test->properties, ACCOUNT_ENABLED, "1"); - g_hash_table_replace (test->properties, ACCOUNT_ALIAS, "test account"); + g_hash_table_replace (test->properties, ACCOUNT_ALIAS, alias); g_hash_table_replace (test->properties, ACCOUNT_TYPE, "SIP"); - g_hash_table_replace (test->properties, ACCOUNT_HOSTNAME, "192.168.1.1"); - g_hash_table_replace (test->properties, ACCOUNT_USERNAME, "test"); - g_hash_table_replace (test->properties, ACCOUNT_PASSWORD, "my-password"); - g_hash_table_replace (test->properties, ACCOUNT_MAILBOX, "888"); + g_hash_table_replace (test->properties, ACCOUNT_HOSTNAME, "sflphone.org"); + g_hash_table_replace (test->properties, ACCOUNT_USERNAME, "1260"); + g_hash_table_replace (test->properties, ACCOUNT_PASSWORD, "NIPAgmLo"); + g_hash_table_replace (test->properties, ACCOUNT_MAILBOX, ""); g_hash_table_replace (test->properties, ACCOUNT_SIP_STUN_SERVER, ""); g_hash_table_replace (test->properties, ACCOUNT_SIP_STUN_ENABLED, "0"); @@ -50,7 +55,7 @@ account_t* create_test_account () START_TEST (test_add_account) { - account_t *test = create_test_account (); + account_t *test = create_test_account ("test"); account_list_init (); account_list_add (test); @@ -62,18 +67,21 @@ END_TEST START_TEST (test_ordered_list) { - account_t *test = create_test_account (); + gchar *list; + account_t *test = create_test_account ("test"); + list = g_new0(gchar, 30); + g_sprintf(list, "%s/%s/", test->accountID, test->accountID); account_list_init (); account_list_add (test); account_list_add (test); - fail_unless (g_strcasecmp (account_list_get_ordered_list (), "test/test/") == 0, "ERROR - BAD ACCOUNT LIST SERIALIZING"); + fail_unless (g_strcasecmp (account_list_get_ordered_list (), list) == 0, "ERROR - BAD ACCOUNT LIST SERIALIZING"); } END_TEST START_TEST (test_get_by_id) { - account_t *test = create_test_account (); + account_t *test = create_test_account ("test"); account_t *tmp; account_list_init (); @@ -85,7 +93,7 @@ END_TEST START_TEST (test_sip_account) { - account_t *test = create_test_account (); + account_t *test = create_test_account ("test"); account_list_init (); account_list_add (test); @@ -93,14 +101,76 @@ START_TEST (test_sip_account) } END_TEST -START_TEST (test_set_current_account) +START_TEST (test_get_account_position) { - account_t *test = create_test_account (); + guint pos, pos1; + account_t *test = create_test_account ("test"); + account_t *test2 = create_test_account ("test2"); + + account_list_init (); + account_list_add (test); + account_list_add (test2); + + pos = account_list_get_position (test); + pos1 = account_list_get_position (test2); + fail_if (pos == -1, "ERROR - bad account position"); + fail_unless (pos == 0, "ERROR - bad account position"); + + fail_if (pos1 == -1, "ERROR - bad account position"); + fail_unless (pos1 == 1, "ERROR - bad account position"); + + account_list_set_current (test); + pos = account_list_get_position (test); + pos1 = account_list_get_position (test2); + fail_if (pos == -1, "ERROR - bad account position"); + fail_unless (pos == 0, "ERROR - bad account position"); + fail_unless (pos1 == 1, "ERROR - bad account position"); +} +END_TEST + +START_TEST (test_get_current_account) +{ + account_t *test = create_test_account ("test"); + account_t *test2 = create_test_account ("test2"); + account_t *current; + + account_list_init (); + account_list_add (test); + account_list_add (test2); + current = account_list_get_current (); + fail_unless (current != NULL, "ERROR - current account NULL"); + // The current account must be the first we add + if (current) + { + fail_unless (g_strcasecmp (g_hash_table_lookup(current->properties, ACCOUNT_ALIAS) , + g_hash_table_lookup(test->properties, ACCOUNT_ALIAS)) == 0, + "ERROR - BAD CURRENT ACCOUNT"); + } + + // Then we try to change the current account + account_list_set_current (test2); + current = account_list_get_current (); + fail_unless (current != NULL, "ERROR - current account NULL"); + // The current account must be the first we add + if (current) + { + fail_unless (g_strcasecmp (g_hash_table_lookup(current->properties, ACCOUNT_ALIAS) , + g_hash_table_lookup(test2->properties, ACCOUNT_ALIAS)) == 0, + "ERROR - BAD CURRENT ACCOUNT"); + } +} +END_TEST + +START_TEST (test_current_account_has_mailbox) +{ + account_t *test = create_test_account ("test"); account_list_init (); account_list_add (test); - account_list_set_current_id (test->accountID); - fail_unless (account_list_get_sip_account_number () == 1, "ERROR - BAD CURRENT ACCOUNT"); + fail_unless (account_list_current_account_has_mailbox () == FALSE, "current account has a default mailbox"); + + g_hash_table_replace (test->properties, ACCOUNT_MAILBOX, "888"); + fail_unless (account_list_current_account_has_mailbox () == TRUE, "current account has not no voicemail number"); } END_TEST @@ -115,6 +185,9 @@ global_suite (void) tcase_add_test (tc_cases, test_ordered_list); tcase_add_test (tc_cases, test_sip_account); tcase_add_test (tc_cases, test_get_by_id); + tcase_add_test (tc_cases, test_get_account_position); + tcase_add_test (tc_cases, test_get_current_account); + tcase_add_test (tc_cases, test_current_account_has_mailbox); suite_add_tcase (s, tc_cases); return s; diff --git a/sflphone-common/Makefile.am b/sflphone-common/Makefile.am index f774bdf57cdde3095aa6082adb35b7f09a5c383c..ffd473d7d1fb1878fcc9cc46d7505db095930206 100644 --- a/sflphone-common/Makefile.am +++ b/sflphone-common/Makefile.am @@ -1,14 +1,21 @@ # Makefile.am +if BUILD_TEST +TESTS_DIR=test unittest: @(cd test; make) @echo "" @echo "NOTICE: Unitary tests successfully build" @echo "Go in the test directory to run them" @echo "" +else +unittest: + @echo "SFLphone WARNING:" + @echo " -- You need the cppunit devel package to compile the unitary tests." +endif ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = libs src ringtones po man test +SUBDIRS = libs src ringtones po man $(TESTS_DIR) EXTRA_DIST = m4/*.m4 tools/*.sh platform/* images/* README.gentoo diff --git a/sflphone-common/configure.ac b/sflphone-common/configure.ac index 19d4b8e71173ef9f718963b2465b387bf4795c4d..69f2bcf1ff60155866443a426b88423595a9df18 100644 --- a/sflphone-common/configure.ac +++ b/sflphone-common/configure.ac @@ -6,20 +6,23 @@ AC_INIT([SFLphone],[0.9.5~beta],[sflphoneteam@savoirfairelinux.com],[sflphone]) AC_COPYRIGHT([[Copyright (c) Savoir-Faire Linux 2004-2009]]) AC_REVISION([$Revision$]) +AC_CANONICAL_SYSTEM + AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION) AM_CONFIG_HEADER([config.h]) -dnl Compute canonical system name -dnl AC_CANONICAL_TARGET - dnl Use this variable in the program AC_SUBST(PACKAGE_VERSION) AM_PROG_LIBTOOL + dnl Rewrite name of programs to be installed dnl AC_ARG_PROGRAM +dnl Compute canonical system name +dnl AC_CANONICAL_TARGET + dnl Improve make variable MAKE AC_PROG_MAKE_SET @@ -144,11 +147,11 @@ dnl Check for GNU ccRTP PKG_PROG_PKG_CONFIG #Trying to set PJSIP using pkg-config -PKG_CHECK_MODULES(SIP, libpj-sfl, have_libpj=true, have_libpj=false) -if test "x${have_libpj}" = "xfalse" ; then - AC_MSG_ERROR([PJSIP not found. http://www.pjsip.org/download.htm]) -fi -AC_SUBST(SIP_CFLAGS) +#PKG_CHECK_MODULES(SIP, libpj-sfl, have_libpj=true, have_libpj=false) +#if test "x${have_libpj}" = "xfalse" ; then + # AC_MSG_ERROR([PJSIP not found. http://www.pjsip.org/download.htm]) +#fi +#AC_SUBST(SIP_CFLAGS) dnl Check for uuid development package - name: uuid-dev UUID_MIN_VERSION=1.0 @@ -264,11 +267,9 @@ AC_ARG_WITH(build-libdbus-cxx, ) AC_SUBST(BUILD_LIBDBUS_CXX_DIR) - - dnl Check for libcppunit-dev CPPUNIT_MIN_VERSION=1.12 -PKG_CHECK_MODULES(CPPUNIT, cppunit >= ${CPPUNIT_MIN_VERSION}) +PKG_CHECK_MODULES(CPPUNIT, cppunit >= ${CPPUNIT_MIN_VERSION}, AM_CONDITIONAL(BUILD_TEST, test 1 = 1 ), AM_CONDITIONAL(BUILD_TEST, test 0 = 1 )) AC_SUBST(CPPUNIT_LIBS) # check for libgsm1 (doesn't use pkg-config) @@ -393,4 +394,6 @@ AC_DEFINE_UNQUOTED(DBUS_SERVICES_DIR, "$DBUS_SERVICES_DIR", [Where services dir AC_SUBST(SFLPHONE_CFLAGS) AC_SUBST(SFLPHONE_LIBS) AC_OUTPUT -AC_MSG_NOTICE([[Configuration done! Run `make' to build the software.]]) +AC_MSG_NOTICE([[Configuration done! Please make sure that pjsip library (libs/pjproject-1.0.1) has already been compiled. Run `make' to build the software.]]) + + diff --git a/sflphone-common/debian/changelog b/sflphone-common/debian/changelog index 2c2978cee82ff96d0d93b026286bfe9e534d1fbd..796f15554f9545e461972cb8c425b0ec30d7b148 100644 --- a/sflphone-common/debian/changelog +++ b/sflphone-common/debian/changelog @@ -1,83 +1,114 @@ -sflphone-common (0.9.5-0ubuntu1~3.gbp20b188) SYSTEM; urgency=low +sflphone-common (0.9.5-SYSVER) SYSTEM; urgency=low + + ** 0.9.5 release ** + + * [#1060] FIx bug in chinese translation + * [#1313] git add rtpTest.cpp rtpTest.h + * [#1313] Add init/close rtp tests + * [#1313] Basic instanciation of the rtp layer + * [#1449] Gtk-Critical concerning history filters and new calls + * [#1400] Make the match with the hostname instead of username + * [#1324] Change status bar label for "Using %s (%s)" + * [#1403] Icon size: 60x60 px + * [#1403] Do not remove notification, improve icon quality + * [#1403] Add smaller icon for gnome notifications + * [#1403] Prevent crash when hangup && no notification + * [#1403] Remove all actions on notifications; code refactoring + * [#1451] Use stun.sflphone.org as default STUN server + * [#1060] New po files - need to be translated + * [#1060] Update french translation - Rebuild template file + * [#1456] Add a flag to be replaced in the control files + * [#1454] Make cppunit optional; remove from build deps in control + files + * [#1401] Add libexpat1-dev dependency in control files + * [#1448] Take off these ugly debug messages + * [#1448] fixed getTelephoneTone and getTelephoneFile() called + repeatedly + * [#1406] add liblog4c-dev in build-depends + * [#1409] Restore .desktop icon + + -- SFLphone Automatic Build System <team@sflphone.org> Mon, 25 May 2009 11:34:40 -0400 + +sflphone-common (0.9.5-SYSVER~rc2) SYSTEM; urgency=low + + ** 0.9.5 rc2 ** + + * [#1422] Improved error message + * [#1402] Fix pjsip build + * [#1404] Clear GTK-Critical Bug at client startup + * [#1422] Added automatic VM shutdown when building on more than one + VM + * [#1422] Fixed some issues with new changelog generation script + * [#1422] Moved distribution update to specific file + * [#1422] Dropped git-dch, replace by home made implementation + * Changes for name based dbus connection + * Clean changelogs + * [#1343] Gnome: Implement a callback system to handle focus on + different widgets + * Debus Session + * Refactoring Python code, PEP8 + * [#1430] Get back dbus_g_proxy_new_for_name + * [#1430] Get back DBUS_BUS_SESSION type + * [#1430] Dbus fixed owner message binding + * Second test with DBUS owner + * [#1404] Gnome -> Preferences -> Hooks + * [#1404] Gnome -> Preferences -> Recordings + * [#1404] Call History + * [#1404] Gnome -> Preferences -> Address Book + * [#1404] IF the first notification option disable the second + notification + * Dbus with fixed owner does not automatically start the deamon + * Add codec debug tests in pysflphone + * [#1407] Some print info + * [#1407] Add a scenario to pick_up action + * Test client dbus connection to a fixed owner + * Add python dbus test suite + * [#1161] Modified version handling in build system + * [#1314] Test pulse audio and audio streams connect and disconnect + * [#1402] Add info message after configure + * [#1402] Build the daemon with the local pjsip library (vs the + installed one) + * [#1009] Fix Codec Sampling Rate set to zeros + * [#1314] Add mutex to pulse layer audio streams + * [#1314] Refactoring pulseaudio stream to test connect disconnect + * [#1314] Refactoring of pulselayer to test conect/disconnect + * Add debug messages in debus calls concerning account + * [#1314] Add some return values to audio init functions + * [#1406] add liblog4c-dev in build-depends + * [#1409] Restore .desktop icon + * Bug #1405: Fix strings as requested. + * Bug #1404: Fix strings in preferences panel. + + -- SFLphone Automatic Build System <team@sflphone.org> Tue, 19 May 2009 12:08:03 -0400 + +sflphone-common (0.9.5-0ubuntu1~rc1) SYSTEM; urgency=low - ** SNAPSHOT build @20b188472f4e66c75b3f1dffe1f110b7070397ec ** - - [ Emmanuel Milou ] - * [#1220] Add Conflicts: sflphone in debian control files - * [#1179] Add liblog4c3 runtime dependency - * [#1212] FIx typo error in dependency list for itnrepid - * [#1212] FIx .desktop file to point on the right exec - * [#1212] Modify changelog replacing tag - - [ Sflphone Project ] - * "[#1262] Updated changelogs for version 0.9.5-0ubuntu1~beta" - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-27 - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1~beta - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1~beta + [ SFLphone Project ] * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-28 + 05-05 [ Emmanuel Milou ] - * [#1212] Restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-28 - - [ Julien Bonjean ] - * [#1262]Introduced dynamic version setting - - [ Sflphone Project ] + * Add some python CLI client code; not really functional + * [#1108] Fix peerHungup method for IP to IP call [ Alexandre Savard ] - * [#1143] Add celtcodec.cpp - * [#1143] add configure and make stuffs - * [#1143] add frame size into each codecs - * [#1143] Take timestamp's step size from codec - * [#1143] RTP thread at 11 ms - * [#1143] Dynamic RTP thread sleep parameter - * [#1143] Fix dynamic thread sleep time calculation + * [#1108] Correct setting of SIP contact for direct IP call + * [#1108] SIP user agent handles incoming REFER [ Emmanuel Milou ] - * [#1262] sflphone-client-gnome uses changelog version number + * Remove website from repository + * Update translation [ Alexandre Savard ] - * [#1143] Some cleanup - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-29 + * Sflphone icon's tooltip changed for "configured" instead of + "registered" [ Emmanuel Milou ] - * [#1262] Update changelogs - * [#1262] Update rules - * [#1143] Build celt codec only if version >= 0.5.1 is detected - * [1143] Restore rules files - do not need to specify --without-celt - * [#1336] Change SFLphone logo - * [#1331] Fix searchbar problems - * [#1332] Fix unexplicit labels - * [#1334] Fix unexplicit label - * [#1329] Fix recordings config panel + * Update translation [ Sflphone Project ] - -- Sflphone Project <sflphone@mtl.savoirfairelinux.net> Thu, 30 Apr 2009 10:01:34 -0400 + -- Sflphone Project <sflphone@mtl.savoirfairelinux.net> Tue, 05 May 2009 19:16:09 -0400 sflphone-common (0.9.5-0ubuntu1~beta) SYSTEM; urgency=low diff --git a/sflphone-common/debian/control.hardy b/sflphone-common/debian/control.hardy index a8e21760384ceb2d7f09614be3772d84c6f4c942..e14674d170b6caa6f4bac6d1118e5d1a336a88f6 100644 --- a/sflphone-common/debian/control.hardy +++ b/sflphone-common/debian/control.hardy @@ -2,7 +2,7 @@ Source: sflphone-common Maintainer: SavoirFaireLinux Inc <emmanuel.milou@savoirfairelinux.com> Section: gnome Priority: optional -Build-Depends: debhelper (>= 5), libgcc1, autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libcppunit-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, uuid-dev +Build-Depends: debhelper (>= 5), libgcc1, autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, uuid-dev, libexpat1-dev Standards-Version: 3.7.3 Package: sflphone-common diff --git a/sflphone-common/debian/control.intrepid b/sflphone-common/debian/control.intrepid index 7376cb3ebc957cc3792790236073cbfb8da6e03e..270e67811229719df9e000fd3a0871e30b9c675a 100644 --- a/sflphone-common/debian/control.intrepid +++ b/sflphone-common/debian/control.intrepid @@ -2,7 +2,7 @@ Source: sflphone-common Maintainer: SavoirFaireLinux Inc <emmanuel.milou@savoirfairelinux.com> Section: gnome Priority: optional -Build-Depends: debhelper (>= 5), libgcc1 , autoconf, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libcppunit-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev +Build-Depends: debhelper (>= 5), libgcc1 , autoconf, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev, libexpat1-dev Standards-Version: 3.8.0 Package: sflphone-common diff --git a/sflphone-common/debian/control.jaunty b/sflphone-common/debian/control.jaunty index 67dc4c90701f7313966ac891f7cc84559ac278c5..f871e07e758e0ce60d07488c106de092517de54e 100644 --- a/sflphone-common/debian/control.jaunty +++ b/sflphone-common/debian/control.jaunty @@ -2,7 +2,7 @@ Source: sflphone-common Maintainer: SavoirFaireLinux Inc <emmanuel.milou@savoirfairelinux.com> Section: gnome Priority: optional -Build-Depends: debhelper (>= 5), libgcc1 , autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libcppunit-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev +Build-Depends: debhelper (>= 5), libgcc1 , autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev, libexpat1-dev Standards-Version: 3.7.3 Package: sflphone-common diff --git a/sflphone-common/globals.mak b/sflphone-common/globals.mak index 832c65d78edca78ef83300de391f4b978c1d41ed..22944b21e0a8f9b42744ff62c8954e6c26c78287 100644 --- a/sflphone-common/globals.mak +++ b/sflphone-common/globals.mak @@ -3,7 +3,22 @@ src=$(top_srcdir) sflcodecdir=$(libdir)/sflphone/codecs sflplugindir=$(libdir)/sflphone/plugins -PJSIP_LIBS = -lpjnath-sfl -lpjsua-sfl -lpjsip-sfl -lpjmedia-sfl -lpjsip-simple-sfl -lpjsip-ua-sfl -lpjmedia-codec-sfl -lpjlib-util-sfl -lpj-sfl +# for pjsip +export TARGET_NAME := @target@ + +PJSIP_LIBS= \ + -L$(src)/libs/pjproject-1.0.1/pjnath/ \ + -L$(src)/libs/pjproject-1.0.1/pjsip/ \ + -L$(src)/libs/pjproject-1.0.1/pjlib/ \ + -L$(src)/libs/pjproject-1.0.1/pjlib-util/ \ + -L$(src)/libs/pjproject-1.0.1/pjmedia/ \ + -lpjnath-sfl-$(TARGET_NAME) -lpjsua-sfl-$(TARGET_NAME) -lpjsip-sfl-$(TARGET_NAME) -lpjmedia-sfl-$(TARGET_NAME) -lpjsip-simple-sfl-$(TARGET_NAME) -lpjsip-ua-sfl-$(TARGET_NAME) -lpjmedia-codec-sfl-$(TARGET_NAME) -lpjlib-util-sfl-$(TARGET_NAME) -lpj-sfl-$(TARGET_NAME) + +SIP_CFLAGS=-I$(src)/libs/pjproject-1.0.1/pjsip/include \ + -I$(src)/libs/pjproject-1.0.1/pjlib/include \ + -I$(src)/libs/pjproject-1.0.1/pjlib-util/include \ + -I$(src)/libs/pjproject-1.0.1/pjmedia/include \ + -I$(src)/libs/pjproject-1.0.1/pjnath/include DBUSCPP_CFLAGS=$(top_srcdir)/libs/dbus-c++/include/dbus-c++ @@ -24,13 +39,14 @@ AM_CPPFLAGS = \ -I$(src)/libs \ -I$(src)/libs/dbus-c++/include \ -I$(src)/libs/iax2 \ + -I$(src)/libs/pjproject-1.0.1 \ -I$(src)/src \ -I$(src)/test \ -DPREFIX=\"$(prefix)\" \ -DPROGSHAREDIR=\"${datadir}/sflphone\" \ $(ZEROCONFFLAGS) \ $(IAX_FLAGS) \ - @SIP_CFLAGS@ \ + $(SIP_CFLAGS) \ $(DBUSCPP_CFLAGS) \ -DCODECS_DIR=\""$(sflcodecdir)"\" \ -DPLUGINS_DIR=\""$(sflplugindir)"\" \ diff --git a/sflphone-common/po/README b/sflphone-common/po/README index fd7b8b023f6686fd97a055ea9751b34e1b396719..a3629ea2350c1299b40bca4e1fa38c8fef45441b 100644 --- a/sflphone-common/po/README +++ b/sflphone-common/po/README @@ -1,6 +1,6 @@ If we need to update sflphone.pot file, do the following steps: -xgettext -k_ -o sflphone.pot ../sflphone-gtk/src/*.c +xgettext -k_ -o sflphone.pot ../../sflphone-client-gnome/src/*.c ../../sflphone-client-gnome/src/config/*.c ../../sflphone-client-gnome/src/dbus/*.c ../../sflphone-client-gnome/src/contacts/*.c Then make && sudo make install diff --git a/sflphone-common/po/de.po b/sflphone-common/po/de.po index 1125d763740b4042d206836a41ca66513474aa4e..4371c318d078fe25c7b44ea8d964d4412ac0e597 100644 --- a/sflphone-common/po/de.po +++ b/sflphone-common/po/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: sflphone\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-02 11:15-0400\n" +"POT-Creation-Date: 2009-05-21 10:45-0400\n" "PO-Revision-Date: 2009-01-08 10:46-0500\n" "Last-Translator: Sven Werlen <sven.werlen@savoirfairelinux.com>\n" "Language-Team: SavoirFaire Linux Inc <sflphoneteam@savoirfairelinux.com>\n" @@ -17,63 +17,70 @@ msgstr "" "X-Generator: Lokalize 0.2\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ../sflphone-gtk/src/accountlist.c:158 +#: ../../sflphone-client-gnome/src/accountlist.c:169 msgid "Registered" msgstr "registriert" -#: ../sflphone-gtk/src/accountlist.c:161 +#: ../../sflphone-client-gnome/src/accountlist.c:172 msgid "Not Registered" msgstr "nicht registriert" -#: ../sflphone-gtk/src/accountlist.c:164 +#: ../../sflphone-client-gnome/src/accountlist.c:175 msgid "Trying..." msgstr "Am versuchen..." -#: ../sflphone-gtk/src/accountlist.c:167 ../sflphone-gtk/src/sflnotify.c:171 -#: ../sflphone-gtk/src/sflnotify.c:212 +#: ../../sflphone-client-gnome/src/accountlist.c:178 +#: ../../sflphone-client-gnome/src/sflnotify.c:176 +#: ../../sflphone-client-gnome/src/sflnotify.c:217 msgid "Error" msgstr "Fehler" -#: ../sflphone-gtk/src/accountlist.c:170 +#: ../../sflphone-client-gnome/src/accountlist.c:181 msgid "Bad authentification" msgstr "Falsche Authentifizierung" -#: ../sflphone-gtk/src/accountlist.c:173 +#: ../../sflphone-client-gnome/src/accountlist.c:184 msgid "Network unreachable" msgstr "Kein Netzwerk" -#: ../sflphone-gtk/src/accountlist.c:176 +#: ../../sflphone-client-gnome/src/accountlist.c:187 msgid "Host unreachable" msgstr "Host unerreichbar" -#: ../sflphone-gtk/src/accountlist.c:179 +#: ../../sflphone-client-gnome/src/accountlist.c:190 msgid "Stun configuration error" msgstr "Stun: Konfigurationsfehler" -#: ../sflphone-gtk/src/accountlist.c:182 +#: ../../sflphone-client-gnome/src/accountlist.c:193 msgid "Stun server invalid" msgstr "Ungültiger Stun Server" -#: ../sflphone-gtk/src/accountlist.c:185 +#: ../../sflphone-client-gnome/src/accountlist.c:196 msgid "Invalid" msgstr "Ungültig" -#: ../sflphone-gtk/src/actions.c:55 ../sflphone-gtk/src/sflnotify.c:103 +#: ../../sflphone-client-gnome/src/actions.c:55 +#: ../../sflphone-client-gnome/src/sflnotify.c:108 #, c-format msgid "%d voice mails" msgstr "%d Voice Nachrichten" -#: ../sflphone-gtk/src/actions.c:57 +#: ../../sflphone-client-gnome/src/actions.c:57 #, c-format msgid "%d voice mail" msgstr "%d Voice Nachricht" -#: ../sflphone-gtk/src/actions.c:81 +#: ../../sflphone-client-gnome/src/actions.c:81 #, c-format -msgid "%s account- %s" -msgstr "%s Konto- %s" +msgid "Using %s (%s)" +msgstr "" + +#: ../../sflphone-client-gnome/src/actions.c:87 +#, fuzzy +msgid "No registered account" +msgstr "Sie haben noch kein registriertes Konto" -#: ../sflphone-gtk/src/actions.c:225 +#: ../../sflphone-client-gnome/src/actions.c:229 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -81,12 +88,17 @@ msgstr "" "SFLphone Server kann nicht verbunden werden. Stellen Sie sicher, dass der " "Dämon läuft." -#: ../sflphone-gtk/src/actions.c:764 +#: ../../sflphone-client-gnome/src/actions.c:787 #, c-format -msgid "%s account- %s %s" -msgstr "%s Konto- %s %s" +msgid "IP call - %s" +msgstr "" + +#: ../../sflphone-client-gnome/src/actions.c:790 +#, c-format +msgid "Using %s (%s) - Codec: %s" +msgstr "" -#: ../sflphone-gtk/src/actions.c:861 +#: ../../sflphone-client-gnome/src/actions.c:880 #, c-format msgid "" "<b>Error: No audio codecs found.\n" @@ -99,8 +111,8 @@ msgstr "" "</b> SFL Audio-Codecs müssen in <i>%s</i> oder <b>.sflphone</b> Ihres HOME-" "Verzeichniss ( <i>%s</i> ) gespeichert werden." -#: ../sflphone-gtk/src/assistant.c:31 -#, c-format +#: ../../sflphone-client-gnome/src/assistant.c:35 +#, fuzzy, c-format msgid "" "This assistant is now finished.\n" "You can at any time check your registration state or modify your accounts " @@ -109,7 +121,6 @@ msgid "" "Alias : %s\n" "Server : %s\n" "Username : %s\n" -"Password : %s" msgstr "" "Assistent vollendet.\n" "\n" @@ -121,136 +132,129 @@ msgstr "" "Benutzername : %s\n" "Passwort : %s" -#: ../sflphone-gtk/src/assistant.c:154 +#: ../../sflphone-client-gnome/src/assistant.c:160 msgid "SFLphone account configuration wizard" msgstr "SFLphone Konto (Konfigurationsassistent)" -#: ../sflphone-gtk/src/assistant.c:180 +#: ../../sflphone-client-gnome/src/assistant.c:186 msgid "Welcome to SFLphone!" msgstr "Wilkommen zu SFLphone!" -#: ../sflphone-gtk/src/assistant.c:181 +#: ../../sflphone-client-gnome/src/assistant.c:187 msgid "This installation wizard will help you configure an account." msgstr "" "The Installationsassistent wird Ihnen helfen, ein Konto zu konfigurieren." -#: ../sflphone-gtk/src/assistant.c:195 +#: ../../sflphone-client-gnome/src/assistant.c:201 msgid "VoIP Protocols" msgstr "VoIP Protokoll" -#: ../sflphone-gtk/src/assistant.c:195 +#: ../../sflphone-client-gnome/src/assistant.c:201 msgid "Select an account type:" msgstr "Kontotyp auswählen:" -#: ../sflphone-gtk/src/assistant.c:213 +#: ../../sflphone-client-gnome/src/assistant.c:219 msgid "Account" msgstr "Konto" -#: ../sflphone-gtk/src/assistant.c:213 +#: ../../sflphone-client-gnome/src/assistant.c:219 msgid "Please select one of the following option:" msgstr "Bitte eine Option auswählen:" -#: ../sflphone-gtk/src/assistant.c:215 +#: ../../sflphone-client-gnome/src/assistant.c:221 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "" -#: ../sflphone-gtk/src/assistant.c:217 +#: ../../sflphone-client-gnome/src/assistant.c:223 msgid "Register an existing SIP or IAX2 account" msgstr "" -#: ../sflphone-gtk/src/assistant.c:230 +#: ../../sflphone-client-gnome/src/assistant.c:236 msgid "SIP account configuration" msgstr "Konfiguration des SIP-Konto" -#: ../sflphone-gtk/src/assistant.c:230 ../sflphone-gtk/src/assistant.c:305 +#: ../../sflphone-client-gnome/src/assistant.c:236 +#: ../../sflphone-client-gnome/src/assistant.c:332 msgid "Please fill the following information:" msgstr "Folgende Informationen bitte ausfühlen:" -#: ../sflphone-gtk/src/assistant.c:238 ../sflphone-gtk/src/assistant.c:313 -#: ../sflphone-gtk/src/config/accountwindow.c:143 +#: ../../sflphone-client-gnome/src/assistant.c:244 +#: ../../sflphone-client-gnome/src/assistant.c:340 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:148 msgid "_Alias" msgstr "_Alias" -#: ../sflphone-gtk/src/assistant.c:246 ../sflphone-gtk/src/assistant.c:321 -#: ../sflphone-gtk/src/config/accountwindow.c:179 +#: ../../sflphone-client-gnome/src/assistant.c:252 +#: ../../sflphone-client-gnome/src/assistant.c:348 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:184 msgid "_Host name" msgstr "_Hostname" -#: ../sflphone-gtk/src/assistant.c:254 ../sflphone-gtk/src/assistant.c:329 -#: ../sflphone-gtk/src/config/accountwindow.c:187 +#: ../../sflphone-client-gnome/src/assistant.c:260 +#: ../../sflphone-client-gnome/src/assistant.c:356 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:192 msgid "_User name" msgstr "_Benutzername" -#: ../sflphone-gtk/src/assistant.c:264 ../sflphone-gtk/src/assistant.c:339 -#: ../sflphone-gtk/src/config/accountwindow.c:198 +#: ../../sflphone-client-gnome/src/assistant.c:276 +#: ../../sflphone-client-gnome/src/assistant.c:371 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:207 msgid "_Password" msgstr "_Passwort" -#: ../sflphone-gtk/src/assistant.c:282 +#: ../../sflphone-client-gnome/src/assistant.c:294 +#: ../../sflphone-client-gnome/src/assistant.c:387 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:223 +#, fuzzy +msgid "_Voicemail number" +msgstr "_Voicemail Boxnummer" + +#: ../../sflphone-client-gnome/src/assistant.c:309 msgid "Optional Email Address " msgstr "" -#: ../sflphone-gtk/src/assistant.c:282 +#: ../../sflphone-client-gnome/src/assistant.c:309 msgid "This email address will be use to send your voicemail messages" msgstr "" -#: ../sflphone-gtk/src/assistant.c:290 +#: ../../sflphone-client-gnome/src/assistant.c:317 msgid "_Email" msgstr "_Email" -#: ../sflphone-gtk/src/assistant.c:305 +#: ../../sflphone-client-gnome/src/assistant.c:332 msgid "IAX2 account configuration" msgstr "Konfiguration des IAX2 Konto" -#: ../sflphone-gtk/src/assistant.c:360 -#: ../sflphone-gtk/src/config/configwindow.c:837 +#: ../../sflphone-client-gnome/src/assistant.c:405 +#: ../../sflphone-client-gnome/src/config/configwindow.c:863 msgid "Network Address Translation" msgstr "Network Address Translation (NAT)" -#: ../sflphone-gtk/src/assistant.c:360 +#: ../../sflphone-client-gnome/src/assistant.c:405 msgid "You should probably enable this if you are behind a firewall." msgstr "Sie sollten dieses einschalten, falls Sie hinter einer Firewall sind." -#: ../sflphone-gtk/src/assistant.c:369 -#: ../sflphone-gtk/src/config/configwindow.c:499 +#: ../../sflphone-client-gnome/src/assistant.c:414 +#: ../../sflphone-client-gnome/src/config/configwindow.c:516 msgid "E_nable STUN" msgstr "STUN Ei_nschalten" -#: ../sflphone-gtk/src/assistant.c:376 +#: ../../sflphone-client-gnome/src/assistant.c:421 msgid "_STUN server" msgstr "_STUN Server" -#: ../sflphone-gtk/src/assistant.c:390 +#: ../../sflphone-client-gnome/src/assistant.c:435 msgid "Account Registration" msgstr "Konto Registrierung" -#: ../sflphone-gtk/src/assistant.c:390 +#: ../../sflphone-client-gnome/src/assistant.c:435 msgid "Congratulations!" msgstr "Gratulation!" -#: ../sflphone-gtk/src/context-menu.c:296 ../sflphone-gtk/src/menus.c:308 -#: ../sflphone-gtk/src/menus.c:791 -msgid "_Pick up" -msgstr "_Abnehmen" - -#: ../sflphone-gtk/src/context-menu.c:308 ../sflphone-gtk/src/menus.c:318 -#: ../sflphone-gtk/src/menus.c:803 -msgid "_Hang up" -msgstr "A_uflegen" - -#: ../sflphone-gtk/src/context-menu.c:320 ../sflphone-gtk/src/menus.c:328 -#: ../sflphone-gtk/src/menus.c:815 -msgid "On _Hold" -msgstr "in _Warteschleife" - -#: ../sflphone-gtk/src/context-menu.c:332 ../sflphone-gtk/src/menus.c:340 -#: ../sflphone-gtk/src/menus.c:827 -msgid "_Record" -msgstr "_Gespräch aufzeichnen" - -#: ../sflphone-gtk/src/errors.c:28 +#: ../../sflphone-client-gnome/src/errors.c:28 +#, fuzzy msgid "" -"<b>ALSA notification</b>\n" +"ALSA notification\n" "\n" "Error while opening playback device" msgstr "" @@ -258,9 +262,10 @@ msgstr "" "\n" "Fehler während Öffnen des \"playback device\"" -#: ../sflphone-gtk/src/errors.c:31 +#: ../../sflphone-client-gnome/src/errors.c:31 +#, fuzzy msgid "" -"<b>ALSA notification</b>\n" +"ALSA notification\n" "\n" "Error while opening capture device" msgstr "" @@ -268,9 +273,10 @@ msgstr "" "\n" "Fehler während Öffnen des \"capture device\"" -#: ../sflphone-gtk/src/errors.c:34 +#: ../../sflphone-client-gnome/src/errors.c:34 +#, fuzzy msgid "" -"<b>Pulseaudio notification</b>\n" +"Pulseaudio notification\n" "\n" "Pulseaudio is not running" msgstr "" @@ -278,468 +284,587 @@ msgstr "" "\n" "Pulseaudio nicht gestartet" -#: ../sflphone-gtk/src/mainwindow.c:70 +#: ../../sflphone-client-gnome/src/mainwindow.c:70 msgid "There is one call in progress." msgstr "Laufender Anruf." -#: ../sflphone-gtk/src/mainwindow.c:74 +#: ../../sflphone-client-gnome/src/mainwindow.c:74 msgid "There are calls in progress." msgstr "Laufende Anrufe." -#: ../sflphone-gtk/src/mainwindow.c:83 +#: ../../sflphone-client-gnome/src/mainwindow.c:83 msgid "Do you still want to quit?" msgstr "" -#: ../sflphone-gtk/src/menus.c:131 +#: ../../sflphone-client-gnome/src/mainwindow.c:296 +#, fuzzy +msgid "SFLphone Error" +msgstr "SFLphone 0.9.2" + +#: ../../sflphone-client-gnome/src/menus.c:134 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone ist ein VoIP Client (kompatibel mit SIP und IAX2 Protokolle)" -#: ../sflphone-gtk/src/menus.c:134 +#: ../../sflphone-client-gnome/src/menus.c:137 msgid "About SFLphone" msgstr "Über SFLphone" -#: ../sflphone-gtk/src/menus.c:157 +#: ../../sflphone-client-gnome/src/menus.c:161 msgid "_Help" msgstr "_Hilfe" -#: ../sflphone-gtk/src/menus.c:296 ../sflphone-gtk/src/menus.c:949 +#: ../../sflphone-client-gnome/src/menus.c:300 +#: ../../sflphone-client-gnome/src/menus.c:971 msgid "_New call" msgstr "_Neuer Anruf" -#: ../sflphone-gtk/src/menus.c:354 -msgid "_Account Assistant" -msgstr "_Konto Setup Assistent" +#: ../../sflphone-client-gnome/src/menus.c:312 +#: ../../sflphone-client-gnome/src/menus.c:803 +msgid "_Pick up" +msgstr "_Abnehmen" -#: ../sflphone-gtk/src/menus.c:384 +#: ../../sflphone-client-gnome/src/menus.c:322 +#: ../../sflphone-client-gnome/src/menus.c:815 +msgid "_Hang up" +msgstr "A_uflegen" + +#: ../../sflphone-client-gnome/src/menus.c:332 +#: ../../sflphone-client-gnome/src/menus.c:827 +msgid "On _Hold" +msgstr "in _Warteschleife" + +#: ../../sflphone-client-gnome/src/menus.c:344 +#: ../../sflphone-client-gnome/src/menus.c:839 +msgid "_Record" +msgstr "_Gespräch aufzeichnen" + +#: ../../sflphone-client-gnome/src/menus.c:358 +#, fuzzy +msgid "_Account creation wizard" +msgstr "SFLphone Konto (Konfigurationsassistent)" + +#: ../../sflphone-client-gnome/src/menus.c:388 msgid "_Call" msgstr "_Anruf" -#: ../sflphone-gtk/src/menus.c:557 +#: ../../sflphone-client-gnome/src/menus.c:561 msgid "_Clear history" msgstr "Liste der vorherigen Anrufen _leeren" -#: ../sflphone-gtk/src/menus.c:569 +#: ../../sflphone-client-gnome/src/menus.c:573 msgid "_Accounts" msgstr "_Konten" -#: ../sflphone-gtk/src/menus.c:584 +#: ../../sflphone-client-gnome/src/menus.c:588 msgid "_Edit" msgstr "_Editieren" -#: ../sflphone-gtk/src/menus.c:644 +#: ../../sflphone-client-gnome/src/menus.c:649 msgid "_Dialpad" msgstr "_Wählscheibe" -#: ../sflphone-gtk/src/menus.c:656 +#: ../../sflphone-client-gnome/src/menus.c:661 msgid "_Volume controls" msgstr "Lautstärke Kontrollen" -#: ../sflphone-gtk/src/menus.c:665 -msgid "_Search contact" -msgstr "Adressbuch _Suche" - -#: ../sflphone-gtk/src/menus.c:673 +#: ../../sflphone-client-gnome/src/menus.c:679 msgid "_View" msgstr "_Anzeigen" -#: ../sflphone-gtk/src/menus.c:885 +#: ../../sflphone-client-gnome/src/menus.c:899 msgid "_Call back" msgstr "_zurückrufen" -#: ../sflphone-gtk/src/sflnotify.c:34 ../sflphone-gtk/src/sflnotify.c:100 +#: ../../sflphone-client-gnome/src/menus.c:1082 +msgid "Edit phone" +msgstr "" + +#: ../../sflphone-client-gnome/src/menus.c:1093 +msgid "Edit the phone number before making a call" +msgstr "" + +#: ../../sflphone-client-gnome/src/sflnotify.c:38 +#: ../../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%s account: %s" msgstr "%s Konto: %s" -#: ../sflphone-gtk/src/sflnotify.c:37 +#: ../../sflphone-client-gnome/src/sflnotify.c:42 #, c-format msgid "<i>From:</i> %s" msgstr "<i>Von:</i> %s" -#: ../sflphone-gtk/src/sflnotify.c:52 +#: ../../sflphone-client-gnome/src/sflnotify.c:57 msgid "Accept" msgstr "Annehmen" -#: ../sflphone-gtk/src/sflnotify.c:53 +#: ../../sflphone-client-gnome/src/sflnotify.c:58 msgid "Refuse" msgstr "Ablehnen" -#: ../sflphone-gtk/src/sflnotify.c:54 ../sflphone-gtk/src/sflnotify.c:117 -#: ../sflphone-gtk/src/sflnotify.c:154 +#: ../../sflphone-client-gnome/src/sflnotify.c:59 +#: ../../sflphone-client-gnome/src/sflnotify.c:122 +#: ../../sflphone-client-gnome/src/sflnotify.c:159 msgid "Ignore" msgstr "Ignorieren" -#: ../sflphone-gtk/src/sflnotify.c:136 +#: ../../sflphone-client-gnome/src/sflnotify.c:141 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "Mit %s Konto <i>%s</i> anrufen" -#: ../sflphone-gtk/src/sflnotify.c:140 +#: ../../sflphone-client-gnome/src/sflnotify.c:145 msgid "Current account" msgstr "Aktuelles Konto" -#: ../sflphone-gtk/src/sflnotify.c:169 +#: ../../sflphone-client-gnome/src/sflnotify.c:174 msgid "You haven't setup any accounts" msgstr "Sie haben noch kein Konto eingestellt" -#: ../sflphone-gtk/src/sflnotify.c:209 +#: ../../sflphone-client-gnome/src/sflnotify.c:214 msgid "You have no registered accounts" msgstr "Sie haben noch kein registriertes Konto" -#: ../sflphone-gtk/src/sliders.c:161 +#: ../../sflphone-client-gnome/src/sliders.c:161 msgid "Speakers volume" msgstr "Lautsprecher Lautstärke" -#: ../sflphone-gtk/src/sliders.c:163 +#: ../../sflphone-client-gnome/src/sliders.c:163 msgid "Mic volume" msgstr "Mikro Lautstärke" -#: ../sflphone-gtk/src/statusicon.c:91 +#: ../../sflphone-client-gnome/src/statusicon.c:91 msgid "_Show main window" msgstr "_Hauptfenster anzeigen" -#: ../sflphone-gtk/src/statusicon.c:124 -#, c-format -msgid "SFLphone - %i accounts registered" +#: ../../sflphone-client-gnome/src/statusicon.c:124 +#, fuzzy, c-format +msgid "SFLphone - %i accounts configured" msgstr "SFLphone - %i Konten registriert" -#: ../sflphone-gtk/src/timestamp.c:46 +#: ../../sflphone-client-gnome/src/timestamp.c:46 msgid "<small>Missed call</small>" msgstr "<small>Anruf verpasst</small>" -#: ../sflphone-gtk/src/timestamp.c:64 +#: ../../sflphone-client-gnome/src/timestamp.c:64 #, c-format msgid "<small>Duration:</small> %s" msgstr "<small>Dauer:</small> %s" -#: ../sflphone-gtk/src/toolbar.c:49 +#: ../../sflphone-client-gnome/src/toolbar.c:50 #, c-format msgid "\"Voicemail\" <%s>" msgstr "\"Voicemail\" <%s>" -#: ../sflphone-gtk/src/toolbar.c:175 ../sflphone-gtk/src/toolbar.c:177 +#: ../../sflphone-client-gnome/src/toolbar.c:176 +#: ../../sflphone-client-gnome/src/toolbar.c:178 msgid "Place a call" msgstr "Anrufen" -#: ../sflphone-gtk/src/toolbar.c:184 ../sflphone-gtk/src/toolbar.c:186 +#: ../../sflphone-client-gnome/src/toolbar.c:185 +#: ../../sflphone-client-gnome/src/toolbar.c:187 msgid "Pick up" msgstr "Abnehmen" -#: ../sflphone-gtk/src/toolbar.c:194 ../sflphone-gtk/src/toolbar.c:196 +#: ../../sflphone-client-gnome/src/toolbar.c:195 +#: ../../sflphone-client-gnome/src/toolbar.c:197 msgid "Hang up" msgstr "Auflegen" -#: ../sflphone-gtk/src/toolbar.c:204 ../sflphone-gtk/src/toolbar.c:206 +#: ../../sflphone-client-gnome/src/toolbar.c:205 +#: ../../sflphone-client-gnome/src/toolbar.c:207 msgid "Off Hold" msgstr "Aus Warteschleife" -#: ../sflphone-gtk/src/toolbar.c:215 ../sflphone-gtk/src/toolbar.c:217 +#: ../../sflphone-client-gnome/src/toolbar.c:216 +#: ../../sflphone-client-gnome/src/toolbar.c:218 msgid "On Hold" msgstr "In Warteschleife" -#: ../sflphone-gtk/src/toolbar.c:228 ../sflphone-gtk/src/toolbar.c:230 +#: ../../sflphone-client-gnome/src/toolbar.c:229 +#: ../../sflphone-client-gnome/src/toolbar.c:231 msgid "Transfer" msgstr "Weiterleiten" -#: ../sflphone-gtk/src/toolbar.c:240 ../sflphone-gtk/src/toolbar.c:242 +#: ../../sflphone-client-gnome/src/toolbar.c:241 +#: ../../sflphone-client-gnome/src/toolbar.c:243 msgid "History" msgstr "Vorherige Anrufe" -#: ../sflphone-gtk/src/toolbar.c:251 ../sflphone-gtk/src/toolbar.c:253 +#: ../../sflphone-client-gnome/src/toolbar.c:252 +#: ../../sflphone-client-gnome/src/toolbar.c:254 msgid "Address book" msgstr "" -#: ../sflphone-gtk/src/toolbar.c:258 ../sflphone-gtk/src/toolbar.c:262 +#: ../../sflphone-client-gnome/src/toolbar.c:260 +#: ../../sflphone-client-gnome/src/toolbar.c:264 msgid "Voicemail" msgstr "Voicemail" -#: ../sflphone-gtk/src/toolbar.c:270 +#: ../../sflphone-client-gnome/src/toolbar.c:272 msgid "Record a call" msgstr "Gespräch aufzeichnen" -#: ../sflphone-gtk/src/contacts/history.c:75 -#: ../sflphone-gtk/src/contacts/searchbar.c:39 -#: ../sflphone-gtk/src/contacts/searchbar.c:65 -msgid "Search" -msgstr "Suchen" - -#: ../sflphone-gtk/src/config/accountwindow.c:103 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:108 msgid "Account settings" msgstr "Kontoeinstellungen" -#: ../sflphone-gtk/src/config/accountwindow.c:115 -msgid "Account parameters" +#: ../../sflphone-client-gnome/src/config/accountwindow.c:120 +#, fuzzy +msgid "Account Parameters" msgstr "Kontoparameter" -#: ../sflphone-gtk/src/config/accountwindow.c:137 -msgid "_Enabled" -msgstr "_Aktiv" +#: ../../sflphone-client-gnome/src/config/accountwindow.c:142 +msgid "_Enable this account" +msgstr "" -#: ../sflphone-gtk/src/config/accountwindow.c:151 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:156 msgid "_Protocol" msgstr "_Protokoll" -#: ../sflphone-gtk/src/config/accountwindow.c:169 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:174 msgid "Unknown" msgstr "unbekannt" -#: ../sflphone-gtk/src/config/accountwindow.c:209 -msgid "_Voicemail box #" -msgstr "_Voicemail Boxnummer" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:265 +#: ../../sflphone-client-gnome/src/config/configwindow.c:732 +msgid "General" +msgstr "Allgemein" -#: ../sflphone-gtk/src/config/addressbook-config.c:105 -msgid "Search Parameters" -msgstr "Parametersuche" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:276 +msgid "_Use Evolution address books" +msgstr "" -#: ../sflphone-gtk/src/config/addressbook-config.c:116 -msgid "Maximum result number for a request: " -msgstr "Maximale Anzahl der Resultaten per Abfrage: " +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:283 +msgid "Download limit:" +msgstr "" -#: ../sflphone-gtk/src/config/addressbook-config.c:127 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:294 msgid "_Display contact photo if available" msgstr "" -#: ../sflphone-gtk/src/config/addressbook-config.c:132 -msgid "Search for and display: " +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:301 +msgid "Fields" +msgstr "" + +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:311 +msgid "Use the following fields from Evolution's address books:" msgstr "" -#: ../sflphone-gtk/src/config/addressbook-config.c:135 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:316 msgid "_Business phone" msgstr "" -#: ../sflphone-gtk/src/config/addressbook-config.c:140 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:321 msgid "_Home phone" msgstr "" -#: ../sflphone-gtk/src/config/addressbook-config.c:145 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:326 msgid "_Mobile phone" msgstr "" -#: ../sflphone-gtk/src/config/audioconf.c:154 -#, c-format -msgid "audio device index for output = %d\n" -msgstr "\"Audio device index\" für Ausgabe = %d\n" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:333 +msgid "Address Books" +msgstr "" -#: ../sflphone-gtk/src/config/audioconf.c:562 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:343 +msgid "Select which Evolution address books to use:" +msgstr "" + +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:377 +#: ../../sflphone-client-gnome/src/config/audioconf.c:574 msgid "Name" msgstr "Name" -#: ../sflphone-gtk/src/config/audioconf.c:567 +#: ../../sflphone-client-gnome/src/config/audioconf.c:155 +#, fuzzy, c-format +msgid "audio device index for output = %d" +msgstr "\"Audio device index\" für Ausgabe = %d\n" + +#: ../../sflphone-client-gnome/src/config/audioconf.c:579 msgid "Frequency" msgstr "Frequenz" -#: ../sflphone-gtk/src/config/audioconf.c:572 +#: ../../sflphone-client-gnome/src/config/audioconf.c:584 msgid "Bitrate" msgstr "Bitrate" -#: ../sflphone-gtk/src/config/audioconf.c:577 +#: ../../sflphone-client-gnome/src/config/audioconf.c:589 msgid "Bandwidth" msgstr "Bandbreite" -#: ../sflphone-gtk/src/config/audioconf.c:637 +#: ../../sflphone-client-gnome/src/config/audioconf.c:652 msgid "Pulseaudio" msgstr "Pulseaudio" -#: ../sflphone-gtk/src/config/audioconf.c:640 +#: ../../sflphone-client-gnome/src/config/audioconf.c:655 msgid "ALSA" msgstr "ALSA" -#: ../sflphone-gtk/src/config/audioconf.c:666 +#: ../../sflphone-client-gnome/src/config/audioconf.c:681 msgid "ALSA plugin" msgstr "ALSA Plugin" -#: ../sflphone-gtk/src/config/audioconf.c:688 +#: ../../sflphone-client-gnome/src/config/audioconf.c:703 msgid "Output" msgstr "Ausgabe" -#: ../sflphone-gtk/src/config/audioconf.c:710 +#: ../../sflphone-client-gnome/src/config/audioconf.c:725 msgid "Input" msgstr "Eingabe" -#: ../sflphone-gtk/src/config/audioconf.c:743 +#: ../../sflphone-client-gnome/src/config/audioconf.c:758 msgid "_Enable ringtones" msgstr "Klingeltöne _einschalten" -#: ../sflphone-gtk/src/config/audioconf.c:748 +#: ../../sflphone-client-gnome/src/config/audioconf.c:764 msgid "Choose a ringtone" msgstr "Klingelton auswählen" -#: ../sflphone-gtk/src/config/audioconf.c:753 +#: ../../sflphone-client-gnome/src/config/audioconf.c:769 msgid "Audio Files" msgstr "Audio Dateien" -#: ../sflphone-gtk/src/config/audioconf.c:770 -msgid "_Activate silence detection" +#: ../../sflphone-client-gnome/src/config/audioconf.c:788 +msgid "_Voice Activity Detection" +msgstr "" + +#: ../../sflphone-client-gnome/src/config/audioconf.c:798 +msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "" -#: ../sflphone-gtk/src/config/audioconf.c:798 +#: ../../sflphone-client-gnome/src/config/audioconf.c:826 msgid "Sound Manager" msgstr "Sound Manager" -#: ../sflphone-gtk/src/config/audioconf.c:805 +#: ../../sflphone-client-gnome/src/config/audioconf.c:833 msgid "ALSA configuration" msgstr "ALSA Konfiguration" -#: ../sflphone-gtk/src/config/audioconf.c:815 +#: ../../sflphone-client-gnome/src/config/audioconf.c:850 msgid "Codecs" msgstr "Codecs" -#: ../sflphone-gtk/src/config/audioconf.c:823 -msgid "Noise reduction" -msgstr "" - -#: ../sflphone-gtk/src/config/audioconf.c:830 +#: ../../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Ringtones" msgstr "Klingeltöne" -#: ../sflphone-gtk/src/config/configwindow.c:385 +#: ../../sflphone-client-gnome/src/config/configwindow.c:402 msgid "Protocol" msgstr "Protokoll" -#: ../sflphone-gtk/src/config/configwindow.c:392 +#: ../../sflphone-client-gnome/src/config/configwindow.c:409 msgid "Status" msgstr "Status" -#: ../sflphone-gtk/src/config/configwindow.c:495 +#: ../../sflphone-client-gnome/src/config/configwindow.c:512 msgid "Stun parameters will apply to each SIP account created." msgstr "" -#: ../sflphone-gtk/src/config/configwindow.c:503 +#: ../../sflphone-client-gnome/src/config/configwindow.c:520 msgid "Enable it if you are behind a firewall" msgstr "Einschalten falls Sie hinter einer Firewall sind" -#: ../sflphone-gtk/src/config/configwindow.c:511 +#: ../../sflphone-client-gnome/src/config/configwindow.c:528 msgid "Format: name.server:port" msgstr "Format: Name.Server:Port" -#: ../sflphone-gtk/src/config/configwindow.c:561 -msgid "Desktop Notification" +#: ../../sflphone-client-gnome/src/config/configwindow.c:579 +#, fuzzy +msgid "Desktop Notifications" msgstr "Desktopbenachrichtigung" -#: ../sflphone-gtk/src/config/configwindow.c:569 -msgid "_Enable" -msgstr "_Einschalten" +#: ../../sflphone-client-gnome/src/config/configwindow.c:588 +#, fuzzy +msgid "_Enable notifications" +msgstr "Klingeltöne _einschalten" -#: ../sflphone-gtk/src/config/configwindow.c:574 -msgid "_Notify voice mails" -msgstr "_Benachrichtigung für Voice Nachrichten" +#: ../../sflphone-client-gnome/src/config/configwindow.c:594 +msgid "Enable voicemail _notifications" +msgstr "" -#: ../sflphone-gtk/src/config/configwindow.c:580 +#: ../../sflphone-client-gnome/src/config/configwindow.c:605 msgid "System Tray Icon" msgstr "Benachrichtigungsfeld (\"System Tray\") Icon" -#: ../sflphone-gtk/src/config/configwindow.c:588 +#: ../../sflphone-client-gnome/src/config/configwindow.c:613 msgid "_Popup main window on incoming call" msgstr "Hauptfenster anzeigen wenn eingehendes Gespräch" -#: ../sflphone-gtk/src/config/configwindow.c:593 +#: ../../sflphone-client-gnome/src/config/configwindow.c:618 msgid "Ne_ver popup main window" msgstr "_Hauptfenster nie anzeigen" -#: ../sflphone-gtk/src/config/configwindow.c:597 -msgid "_Start hidden" -msgstr "_Unsichtbar beim Start" +#: ../../sflphone-client-gnome/src/config/configwindow.c:622 +msgid "Hide SFLphone window on _startup" +msgstr "" -#: ../sflphone-gtk/src/config/configwindow.c:603 +#: ../../sflphone-client-gnome/src/config/configwindow.c:628 msgid "Calls History" msgstr "Liste der vorherigen Anrufen" -#: ../sflphone-gtk/src/config/configwindow.c:611 -msgid "_Maximum number of calls" -msgstr "_maximale Anzahl von Anrufen" +#: ../../sflphone-client-gnome/src/config/configwindow.c:636 +#, fuzzy +msgid "_History size limit" +msgstr "Liste der vorherigen Anrufen is leer" -#: ../sflphone-gtk/src/config/configwindow.c:627 +#: ../../sflphone-client-gnome/src/config/configwindow.c:653 msgid "PulseAudio sound server" msgstr "PulseAudio Sound Server" -#: ../sflphone-gtk/src/config/configwindow.c:635 -msgid "_Control running applications volume" -msgstr "Lautstärke für laufende Anwendungen _einstellen" +#: ../../sflphone-client-gnome/src/config/configwindow.c:661 +msgid "Mute other applications during a _call" +msgstr "" -#: ../sflphone-gtk/src/config/configwindow.c:648 +#: ../../sflphone-client-gnome/src/config/configwindow.c:674 msgid "SIP Port" msgstr "SIP Port" -#: ../sflphone-gtk/src/config/configwindow.c:661 +#: ../../sflphone-client-gnome/src/config/configwindow.c:687 msgid "Port:" msgstr "Port:" -#: ../sflphone-gtk/src/config/configwindow.c:706 -msgid "General" -msgstr "Allgemein" - -#: ../sflphone-gtk/src/config/configwindow.c:717 -msgid "_Destination folder" +#: ../../sflphone-client-gnome/src/config/configwindow.c:742 +msgid "_Recordings folder" msgstr "" -#: ../sflphone-gtk/src/config/configwindow.c:723 +#: ../../sflphone-client-gnome/src/config/configwindow.c:748 msgid "Select a folder" msgstr "" -#: ../sflphone-gtk/src/config/configwindow.c:748 +#: ../../sflphone-client-gnome/src/config/configwindow.c:773 msgid "Preferences" msgstr "Einstellungen" -#: ../sflphone-gtk/src/config/configwindow.c:768 +#: ../../sflphone-client-gnome/src/config/configwindow.c:793 msgid "General Settings" msgstr "Allgemeine Einstellungen" -#: ../sflphone-gtk/src/config/configwindow.c:773 +#: ../../sflphone-client-gnome/src/config/configwindow.c:798 msgid "Audio Settings" msgstr "Audio Einstellungen" -#: ../sflphone-gtk/src/config/configwindow.c:778 -msgid "Record" -msgstr "" +#: ../../sflphone-client-gnome/src/config/configwindow.c:803 +#, fuzzy +msgid "Recordings" +msgstr "_Gespräch aufzeichnen" -#: ../sflphone-gtk/src/config/configwindow.c:783 +#: ../../sflphone-client-gnome/src/config/configwindow.c:808 msgid "Address Book" msgstr "" -#: ../sflphone-gtk/src/config/configwindow.c:788 +#: ../../sflphone-client-gnome/src/config/configwindow.c:813 msgid "Hooks" msgstr "" -#: ../sflphone-gtk/src/config/configwindow.c:814 +#: ../../sflphone-client-gnome/src/config/configwindow.c:840 msgid "Accounts" msgstr "Konten" -#: ../sflphone-gtk/src/config/configwindow.c:826 -msgid "Accounts previously setup" -msgstr "Zuvor eingestellte Konten" +#: ../../sflphone-client-gnome/src/config/configwindow.c:852 +#, fuzzy +msgid "Configured Accounts" +msgstr "Aktuelles Konto" -#: ../sflphone-gtk/src/config/hooks-config.c:92 -msgid "URL argument" +#: ../../sflphone-client-gnome/src/config/hooks-config.c:130 +msgid "URL Passing" msgstr "" -#: ../sflphone-gtk/src/config/hooks-config.c:102 -msgid "_SIP protocol" -msgstr "_SIP protokoll" +#: ../../sflphone-client-gnome/src/config/hooks-config.c:140 +#, c-format +msgid "" +"SFLphone can run custom commands if incoming calls come with an URL " +"attached.\n" +"In this case, %s will be replaced with the passed URL." +msgstr "" -#: ../sflphone-gtk/src/config/hooks-config.c:107 -msgid "_IAX2 protocol" -msgstr "_IAX2 protokoll" +#: ../../sflphone-client-gnome/src/config/hooks-config.c:143 +msgid "Trigger on specific _SIP header" +msgstr "" -#: ../sflphone-gtk/src/config/hooks-config.c:113 -msgid "_SIP Header: " +#: ../../sflphone-client-gnome/src/config/hooks-config.c:155 +msgid "Trigger on _IAX2 URL" msgstr "" -#: ../sflphone-gtk/src/config/hooks-config.c:120 -msgid "_Command: " +#: ../../sflphone-client-gnome/src/config/hooks-config.c:160 +msgid "_Command to run: " msgstr "" -#~ msgid "SFLphone 0.9.3" -#~ msgstr "SFLphone 0.9.2" +#: ../../sflphone-client-gnome/src/config/hooks-config.c:168 +msgid "Phone Number Rewriting" +msgstr "" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:178 +msgid "_Prefix dialed numbers with:" +msgstr "" + +#: ../../sflphone-client-gnome/src/contacts/history.c:83 +#: ../../sflphone-client-gnome/src/contacts/searchbar.c:123 +#, fuzzy +msgid "Search history" +msgstr "Liste der vorherigen Anrufen _leeren" + +#: ../../sflphone-client-gnome/src/contacts/history.c:83 +#: ../../sflphone-client-gnome/src/contacts/searchbar.c:110 +#, fuzzy +msgid "Search contact" +msgstr "Adressbuch _Suche" + +#, fuzzy +#~ msgid "Registered to %s (%s)" +#~ msgstr "registriert" + +#~ msgid "%s account- %s %s" +#~ msgstr "%s Konto- %s %s" + +#~ msgid "_Enable" +#~ msgstr "_Einschalten" + +#~ msgid "_Notify voice mails" +#~ msgstr "_Benachrichtigung für Voice Nachrichten" + +#~ msgid "_Start hidden" +#~ msgstr "_Unsichtbar beim Start" + +#~ msgid "_Maximum number of calls" +#~ msgstr "_maximale Anzahl von Anrufen" + +#~ msgid "_Control running applications volume" +#~ msgstr "Lautstärke für laufende Anwendungen _einstellen" + +#, fuzzy +#~ msgid "Account previously setup" +#~ msgstr "Zuvor eingestellte Konten" + +#~ msgid "_SIP protocol" +#~ msgstr "_SIP protokoll" + +#~ msgid "_IAX2 protocol" +#~ msgstr "_IAX2 protokoll" + +#~ msgid "Search" +#~ msgstr "Suchen" + +#~ msgid "_Enabled" +#~ msgstr "_Aktiv" + +#~ msgid "%s account- %s" +#~ msgstr "%s Konto- %s" + +#~ msgid "_Account Assistant" +#~ msgstr "_Konto Setup Assistent" #~ msgid "Setup Accounts" #~ msgstr "Konten einstellen" +#~ msgid "Search Parameters" +#~ msgstr "Parametersuche" + +#~ msgid "Maximum result number for a request: " +#~ msgstr "Maximale Anzahl der Resultaten per Abfrage: " + #~ msgid "_STUN Server" #~ msgstr "_STUN Server" #~ msgid "Apply" #~ msgstr "übernehmen" - -#~ msgid "History empty" -#~ msgstr "Liste der vorherigen Anrufen is leer" - diff --git a/sflphone-common/po/es.po b/sflphone-common/po/es.po index f55ec7ea4edbd3f40822bc96347877bbfa6fcba6..df246654f815314fd63936b6e3d4d33edd42db3d 100644 --- a/sflphone-common/po/es.po +++ b/sflphone-common/po/es.po @@ -9,72 +9,78 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-02 11:15-0400\n" +"POT-Creation-Date: 2009-05-21 10:45-0400\n" "PO-Revision-Date: 2008-08-11 11:53+0200\n" -"Last-Translator: Maxime Chambreuil <maxime.chambreuil@savoirfairelinux.com>\n" +"Last-Translator: Carlos Galisteo <cgalisteo AT k-rolus.net>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n>1;\n" -#: ../sflphone-gtk/src/accountlist.c:158 +#: ../../sflphone-client-gnome/src/accountlist.c:169 msgid "Registered" msgstr "Registrado" -#: ../sflphone-gtk/src/accountlist.c:161 +#: ../../sflphone-client-gnome/src/accountlist.c:172 msgid "Not Registered" msgstr "No registrado" -#: ../sflphone-gtk/src/accountlist.c:164 +#: ../../sflphone-client-gnome/src/accountlist.c:175 msgid "Trying..." msgstr "Intentando..." -#: ../sflphone-gtk/src/accountlist.c:167 ../sflphone-gtk/src/sflnotify.c:171 -#: ../sflphone-gtk/src/sflnotify.c:212 +#: ../../sflphone-client-gnome/src/accountlist.c:178 +#: ../../sflphone-client-gnome/src/sflnotify.c:176 +#: ../../sflphone-client-gnome/src/sflnotify.c:217 msgid "Error" msgstr "Error" -#: ../sflphone-gtk/src/accountlist.c:170 +#: ../../sflphone-client-gnome/src/accountlist.c:181 msgid "Bad authentification" -msgstr "" +msgstr "Autenticación erronea" -#: ../sflphone-gtk/src/accountlist.c:173 +#: ../../sflphone-client-gnome/src/accountlist.c:184 msgid "Network unreachable" -msgstr "" +msgstr "Red Inaccesible" -#: ../sflphone-gtk/src/accountlist.c:176 +#: ../../sflphone-client-gnome/src/accountlist.c:187 msgid "Host unreachable" msgstr "_Parte del servidor" -#: ../sflphone-gtk/src/accountlist.c:179 +#: ../../sflphone-client-gnome/src/accountlist.c:190 msgid "Stun configuration error" msgstr "Error de configuración Stun" -#: ../sflphone-gtk/src/accountlist.c:182 +#: ../../sflphone-client-gnome/src/accountlist.c:193 msgid "Stun server invalid" msgstr "Servidor stun inválido" -#: ../sflphone-gtk/src/accountlist.c:185 +#: ../../sflphone-client-gnome/src/accountlist.c:196 msgid "Invalid" msgstr "Inválido" -#: ../sflphone-gtk/src/actions.c:55 ../sflphone-gtk/src/sflnotify.c:103 +#: ../../sflphone-client-gnome/src/actions.c:55 +#: ../../sflphone-client-gnome/src/sflnotify.c:108 #, c-format msgid "%d voice mails" msgstr "%d mensajes de voz" -#: ../sflphone-gtk/src/actions.c:57 +#: ../../sflphone-client-gnome/src/actions.c:57 #, c-format msgid "%d voice mail" msgstr "%d mensaje de voz" -#: ../sflphone-gtk/src/actions.c:81 +#: ../../sflphone-client-gnome/src/actions.c:81 #, c-format -msgid "%s account- %s" -msgstr "%s cuenta: %s" +msgid "Using %s (%s)" +msgstr "" + +#: ../../sflphone-client-gnome/src/actions.c:87 +msgid "No registered account" +msgstr "No tiene ninguna cuenta registrada" -#: ../sflphone-gtk/src/actions.c:225 +#: ../../sflphone-client-gnome/src/actions.c:229 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -82,12 +88,17 @@ msgstr "" "Incapaz de conectar con el servidor SFLphone.\n" " Asegúrese de que el demonio esté funcionando." -#: ../sflphone-gtk/src/actions.c:764 +#: ../../sflphone-client-gnome/src/actions.c:787 #, c-format -msgid "%s account- %s %s" -msgstr "%s cuenta- %s %s" +msgid "IP call - %s" +msgstr "Llamada IP - %s" -#: ../sflphone-gtk/src/actions.c:861 +#: ../../sflphone-client-gnome/src/actions.c:790 +#, c-format +msgid "Using %s (%s) - Codec: %s" +msgstr "" + +#: ../../sflphone-client-gnome/src/actions.c:880 #, c-format msgid "" "<b>Error: No audio codecs found.\n" @@ -100,8 +111,8 @@ msgstr "" "</b> Los codecs de audio de SFLphone deben estar en <i>%s</i> o en el " "directorio <b>.sflphone</b> de su home( <i>%s</i> )" -#: ../sflphone-gtk/src/assistant.c:31 -#, fuzzy, c-format +#: ../../sflphone-client-gnome/src/assistant.c:35 +#, c-format msgid "" "This assistant is now finished.\n" "You can at any time check your registration state or modify your accounts " @@ -110,142 +121,135 @@ msgid "" "Alias : %s\n" "Server : %s\n" "Username : %s\n" -"Password : %s" msgstr "" "Ese asistante ha finalizado.\n" -"\n" "Puede comprobar en cualquier momento su estado de registro o modificar la " -"configuración de sus cuentas en la ventana de Opciones/Cuentas." +"configuración de sus cuentas en la ventana de Opciones/Cuentas.\n" +"\n" +"Alias : %s\n" +"Server : %s\n" +"Username : %s\n" -#: ../sflphone-gtk/src/assistant.c:154 +#: ../../sflphone-client-gnome/src/assistant.c:160 msgid "SFLphone account configuration wizard" msgstr "Asistente de configuración de cuentas de SFLphone" -#: ../sflphone-gtk/src/assistant.c:180 +#: ../../sflphone-client-gnome/src/assistant.c:186 msgid "Welcome to SFLphone!" msgstr "¡Bienvenido a SFLphone!" -#: ../sflphone-gtk/src/assistant.c:181 +#: ../../sflphone-client-gnome/src/assistant.c:187 msgid "This installation wizard will help you configure an account." msgstr "Este asistente de instalación le ayudará a configurar una cuenta." -#: ../sflphone-gtk/src/assistant.c:195 +#: ../../sflphone-client-gnome/src/assistant.c:201 msgid "VoIP Protocols" msgstr "Protocolos VoIP" -#: ../sflphone-gtk/src/assistant.c:195 +#: ../../sflphone-client-gnome/src/assistant.c:201 msgid "Select an account type:" msgstr "Escoja un tipo de cuenta:" -#: ../sflphone-gtk/src/assistant.c:213 +#: ../../sflphone-client-gnome/src/assistant.c:219 msgid "Account" -msgstr "Cuentas" +msgstr "Cuenta" -#: ../sflphone-gtk/src/assistant.c:213 +#: ../../sflphone-client-gnome/src/assistant.c:219 msgid "Please select one of the following option:" -msgstr "Por favor, rellene la siguiente información:" +msgstr "Por favor, elija una de las siguientes opciones:" -#: ../sflphone-gtk/src/assistant.c:215 +#: ../../sflphone-client-gnome/src/assistant.c:221 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Crear una cuenta SIP/IAX2 gratis en sflphone.org" -#: ../sflphone-gtk/src/assistant.c:217 +#: ../../sflphone-client-gnome/src/assistant.c:223 msgid "Register an existing SIP or IAX2 account" -msgstr "Registrar una cuenta SIP o IAX@ existente" +msgstr "Registrar una cuenta SIP o IAX2 existente" -#: ../sflphone-gtk/src/assistant.c:230 +#: ../../sflphone-client-gnome/src/assistant.c:236 msgid "SIP account configuration" msgstr "Configuración de cuenta SIP" -#: ../sflphone-gtk/src/assistant.c:230 ../sflphone-gtk/src/assistant.c:305 +#: ../../sflphone-client-gnome/src/assistant.c:236 +#: ../../sflphone-client-gnome/src/assistant.c:332 msgid "Please fill the following information:" msgstr "Por favor, rellene la siguiente información:" -#: ../sflphone-gtk/src/assistant.c:238 ../sflphone-gtk/src/assistant.c:313 -#: ../sflphone-gtk/src/config/accountwindow.c:143 +#: ../../sflphone-client-gnome/src/assistant.c:244 +#: ../../sflphone-client-gnome/src/assistant.c:340 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:148 msgid "_Alias" msgstr "_Alias" -#: ../sflphone-gtk/src/assistant.c:246 ../sflphone-gtk/src/assistant.c:321 -#: ../sflphone-gtk/src/config/accountwindow.c:179 +#: ../../sflphone-client-gnome/src/assistant.c:252 +#: ../../sflphone-client-gnome/src/assistant.c:348 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:184 msgid "_Host name" msgstr "_Nombre de equipo" -#: ../sflphone-gtk/src/assistant.c:254 ../sflphone-gtk/src/assistant.c:329 -#: ../sflphone-gtk/src/config/accountwindow.c:187 +#: ../../sflphone-client-gnome/src/assistant.c:260 +#: ../../sflphone-client-gnome/src/assistant.c:356 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:192 msgid "_User name" msgstr "_Usuario" -#: ../sflphone-gtk/src/assistant.c:264 ../sflphone-gtk/src/assistant.c:339 -#: ../sflphone-gtk/src/config/accountwindow.c:198 +#: ../../sflphone-client-gnome/src/assistant.c:276 +#: ../../sflphone-client-gnome/src/assistant.c:371 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:207 msgid "_Password" msgstr "_Contraseña" -#: ../sflphone-gtk/src/assistant.c:282 +#: ../../sflphone-client-gnome/src/assistant.c:294 +#: ../../sflphone-client-gnome/src/assistant.c:387 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:223 +msgid "_Voicemail number" +msgstr "_Número de buzón de voz" + +#: ../../sflphone-client-gnome/src/assistant.c:309 msgid "Optional Email Address " msgstr "Dirección de correo opcional " -#: ../sflphone-gtk/src/assistant.c:282 +#: ../../sflphone-client-gnome/src/assistant.c:309 msgid "This email address will be use to send your voicemail messages" -msgstr "Este dirección de correo sera usado para mandar los mensajes" +msgstr "Esta dirección de correo se usará para mandar sus mensajes de voz" -#: ../sflphone-gtk/src/assistant.c:290 +#: ../../sflphone-client-gnome/src/assistant.c:317 msgid "_Email" msgstr "_Correo" -#: ../sflphone-gtk/src/assistant.c:305 +#: ../../sflphone-client-gnome/src/assistant.c:332 msgid "IAX2 account configuration" msgstr "Configuración de cuenta IAX2" -#: ../sflphone-gtk/src/assistant.c:360 -#: ../sflphone-gtk/src/config/configwindow.c:837 +#: ../../sflphone-client-gnome/src/assistant.c:405 +#: ../../sflphone-client-gnome/src/config/configwindow.c:863 msgid "Network Address Translation" msgstr "Conversión de Dirección de Red (NAT)" -#: ../sflphone-gtk/src/assistant.c:360 +#: ../../sflphone-client-gnome/src/assistant.c:405 msgid "You should probably enable this if you are behind a firewall." msgstr "Probablemente tiene que activar esto si está detrás de un cortafuegos." -#: ../sflphone-gtk/src/assistant.c:369 -#: ../sflphone-gtk/src/config/configwindow.c:499 +#: ../../sflphone-client-gnome/src/assistant.c:414 +#: ../../sflphone-client-gnome/src/config/configwindow.c:516 msgid "E_nable STUN" msgstr "A_ctivar STUN" -#: ../sflphone-gtk/src/assistant.c:376 +#: ../../sflphone-client-gnome/src/assistant.c:421 msgid "_STUN server" msgstr "_Servidor STUN" -#: ../sflphone-gtk/src/assistant.c:390 +#: ../../sflphone-client-gnome/src/assistant.c:435 msgid "Account Registration" msgstr "Registro de cuenta" -#: ../sflphone-gtk/src/assistant.c:390 +#: ../../sflphone-client-gnome/src/assistant.c:435 msgid "Congratulations!" msgstr "¡Enhorabuena!" -#: ../sflphone-gtk/src/context-menu.c:296 ../sflphone-gtk/src/menus.c:308 -#: ../sflphone-gtk/src/menus.c:791 -msgid "_Pick up" -msgstr "_Descolgar" - -#: ../sflphone-gtk/src/context-menu.c:308 ../sflphone-gtk/src/menus.c:318 -#: ../sflphone-gtk/src/menus.c:803 -msgid "_Hang up" -msgstr "_Colgar" - -#: ../sflphone-gtk/src/context-menu.c:320 ../sflphone-gtk/src/menus.c:328 -#: ../sflphone-gtk/src/menus.c:815 -msgid "On _Hold" -msgstr "En _Espera" - -#: ../sflphone-gtk/src/context-menu.c:332 ../sflphone-gtk/src/menus.c:340 -#: ../sflphone-gtk/src/menus.c:827 -msgid "_Record" -msgstr "_Recordar" - -#: ../sflphone-gtk/src/errors.c:28 +#: ../../sflphone-client-gnome/src/errors.c:28 msgid "" -"<b>ALSA notification</b>\n" +"ALSA notification\n" "\n" "Error while opening playback device" msgstr "" @@ -253,9 +257,9 @@ msgstr "" "\n" "Error al abrir el dispositivo de reproducción" -#: ../sflphone-gtk/src/errors.c:31 +#: ../../sflphone-client-gnome/src/errors.c:31 msgid "" -"<b>ALSA notification</b>\n" +"ALSA notification\n" "\n" "Error while opening capture device" msgstr "" @@ -263,9 +267,9 @@ msgstr "" "\n" "Error al abrir el dispositivo de captura" -#: ../sflphone-gtk/src/errors.c:34 +#: ../../sflphone-client-gnome/src/errors.c:34 msgid "" -"<b>Pulseaudio notification</b>\n" +"Pulseaudio notification\n" "\n" "Pulseaudio is not running" msgstr "" @@ -273,463 +277,528 @@ msgstr "" "\n" "Pulseaudio no está funcionando" -#: ../sflphone-gtk/src/mainwindow.c:70 +#: ../../sflphone-client-gnome/src/mainwindow.c:70 msgid "There is one call in progress." msgstr "No hay llamada en curso" -#: ../sflphone-gtk/src/mainwindow.c:74 +#: ../../sflphone-client-gnome/src/mainwindow.c:74 msgid "There are calls in progress." msgstr "Hay llamadas en curso." -#: ../sflphone-gtk/src/mainwindow.c:83 +#: ../../sflphone-client-gnome/src/mainwindow.c:83 msgid "Do you still want to quit?" msgstr "Sin embargo quiere parar ?" -#: ../sflphone-gtk/src/menus.c:131 +#: ../../sflphone-client-gnome/src/mainwindow.c:296 +msgid "SFLphone Error" +msgstr "SFLphone Error" + +#: ../../sflphone-client-gnome/src/menus.c:134 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" "SFLphone es un telefono por Internet compatible con los protocolos SIP y IAX2" -#: ../sflphone-gtk/src/menus.c:134 +#: ../../sflphone-client-gnome/src/menus.c:137 msgid "About SFLphone" msgstr "Sobre SFLphone" -#: ../sflphone-gtk/src/menus.c:157 +#: ../../sflphone-client-gnome/src/menus.c:161 msgid "_Help" msgstr "_Ayuda" -#: ../sflphone-gtk/src/menus.c:296 ../sflphone-gtk/src/menus.c:949 +#: ../../sflphone-client-gnome/src/menus.c:300 +#: ../../sflphone-client-gnome/src/menus.c:971 msgid "_New call" msgstr "_Nueva llamada" -#: ../sflphone-gtk/src/menus.c:354 -msgid "_Account Assistant" -msgstr "_Asistente de Cuenta" +#: ../../sflphone-client-gnome/src/menus.c:312 +#: ../../sflphone-client-gnome/src/menus.c:803 +msgid "_Pick up" +msgstr "_Descolgar" + +#: ../../sflphone-client-gnome/src/menus.c:322 +#: ../../sflphone-client-gnome/src/menus.c:815 +msgid "_Hang up" +msgstr "_Colgar" + +#: ../../sflphone-client-gnome/src/menus.c:332 +#: ../../sflphone-client-gnome/src/menus.c:827 +msgid "On _Hold" +msgstr "En _Espera" -#: ../sflphone-gtk/src/menus.c:384 +#: ../../sflphone-client-gnome/src/menus.c:344 +#: ../../sflphone-client-gnome/src/menus.c:839 +msgid "_Record" +msgstr "_Recordar" + +#: ../../sflphone-client-gnome/src/menus.c:358 +msgid "_Account creation wizard" +msgstr "Asistente de configuración de cuentas" + +#: ../../sflphone-client-gnome/src/menus.c:388 msgid "_Call" msgstr "_Llamar" -#: ../sflphone-gtk/src/menus.c:557 +#: ../../sflphone-client-gnome/src/menus.c:561 msgid "_Clear history" -msgstr "Historia de Llamada" +msgstr "_Limpiar historial" -#: ../sflphone-gtk/src/menus.c:569 +#: ../../sflphone-client-gnome/src/menus.c:573 msgid "_Accounts" msgstr "_Cuentas" -#: ../sflphone-gtk/src/menus.c:584 +#: ../../sflphone-client-gnome/src/menus.c:588 msgid "_Edit" msgstr "_Editar" -#: ../sflphone-gtk/src/menus.c:644 +#: ../../sflphone-client-gnome/src/menus.c:649 msgid "_Dialpad" msgstr "_Teclado numérico" -#: ../sflphone-gtk/src/menus.c:656 +#: ../../sflphone-client-gnome/src/menus.c:661 msgid "_Volume controls" msgstr "_Controles de volumen" -#: ../sflphone-gtk/src/menus.c:665 -msgid "_Search contact" -msgstr "_Buscar contactos" - -#: ../sflphone-gtk/src/menus.c:673 +#: ../../sflphone-client-gnome/src/menus.c:679 msgid "_View" msgstr "_Ver" -#: ../sflphone-gtk/src/menus.c:885 +#: ../../sflphone-client-gnome/src/menus.c:899 msgid "_Call back" msgstr "_Llamar" -#: ../sflphone-gtk/src/sflnotify.c:34 ../sflphone-gtk/src/sflnotify.c:100 +#: ../../sflphone-client-gnome/src/menus.c:1082 +msgid "Edit phone" +msgstr "Editar teléfono" + +#: ../../sflphone-client-gnome/src/menus.c:1093 +msgid "Edit the phone number before making a call" +msgstr "Editar el número de teléfono antes de llamar" + +#: ../../sflphone-client-gnome/src/sflnotify.c:38 +#: ../../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%s account: %s" msgstr "%s cuenta: %s" -#: ../sflphone-gtk/src/sflnotify.c:37 +#: ../../sflphone-client-gnome/src/sflnotify.c:42 #, c-format msgid "<i>From:</i> %s" msgstr "<i>De:</i> %s" -#: ../sflphone-gtk/src/sflnotify.c:52 +#: ../../sflphone-client-gnome/src/sflnotify.c:57 msgid "Accept" msgstr "Aceptar" -#: ../sflphone-gtk/src/sflnotify.c:53 +#: ../../sflphone-client-gnome/src/sflnotify.c:58 msgid "Refuse" msgstr "Rechazar" -#: ../sflphone-gtk/src/sflnotify.c:54 ../sflphone-gtk/src/sflnotify.c:117 -#: ../sflphone-gtk/src/sflnotify.c:154 +#: ../../sflphone-client-gnome/src/sflnotify.c:59 +#: ../../sflphone-client-gnome/src/sflnotify.c:122 +#: ../../sflphone-client-gnome/src/sflnotify.c:159 msgid "Ignore" msgstr "Ignorar" -#: ../sflphone-gtk/src/sflnotify.c:136 +#: ../../sflphone-client-gnome/src/sflnotify.c:141 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "Llamando con la cuenta %s <i>%s</i>" -#: ../sflphone-gtk/src/sflnotify.c:140 +#: ../../sflphone-client-gnome/src/sflnotify.c:145 msgid "Current account" -msgstr "Cuenta" +msgstr "Cuenta actual" -#: ../sflphone-gtk/src/sflnotify.c:169 +#: ../../sflphone-client-gnome/src/sflnotify.c:174 msgid "You haven't setup any accounts" msgstr "No ha configurado cuentas" -#: ../sflphone-gtk/src/sflnotify.c:209 +#: ../../sflphone-client-gnome/src/sflnotify.c:214 msgid "You have no registered accounts" msgstr "No tiene ninguna cuenta registrada" -#: ../sflphone-gtk/src/sliders.c:161 +#: ../../sflphone-client-gnome/src/sliders.c:161 msgid "Speakers volume" msgstr "Volumen de altavoces" -#: ../sflphone-gtk/src/sliders.c:163 +#: ../../sflphone-client-gnome/src/sliders.c:163 msgid "Mic volume" msgstr "Volumen del micrófono" -#: ../sflphone-gtk/src/statusicon.c:91 +#: ../../sflphone-client-gnome/src/statusicon.c:91 msgid "_Show main window" msgstr "Mostrar ventana principal" -#: ../sflphone-gtk/src/statusicon.c:124 +#: ../../sflphone-client-gnome/src/statusicon.c:124 #, c-format -msgid "SFLphone - %i accounts registered" -msgstr "SFLphone - %i cuenta registrada" +msgid "SFLphone - %i accounts configured" +msgstr "SFLphone - %i cuentas configuradas" -#: ../sflphone-gtk/src/timestamp.c:46 +#: ../../sflphone-client-gnome/src/timestamp.c:46 msgid "<small>Missed call</small>" -msgstr "<small>Llamada faltada</small>" +msgstr "<small>Llamada fallida</small>" -#: ../sflphone-gtk/src/timestamp.c:64 +#: ../../sflphone-client-gnome/src/timestamp.c:64 #, c-format msgid "<small>Duration:</small> %s" msgstr "<small>Duración:</small> %s" -#: ../sflphone-gtk/src/toolbar.c:49 +#: ../../sflphone-client-gnome/src/toolbar.c:50 #, c-format msgid "\"Voicemail\" <%s>" msgstr "\"Mensaje\" <%s>" -#: ../sflphone-gtk/src/toolbar.c:175 ../sflphone-gtk/src/toolbar.c:177 +#: ../../sflphone-client-gnome/src/toolbar.c:176 +#: ../../sflphone-client-gnome/src/toolbar.c:178 msgid "Place a call" msgstr "Llamar" -#: ../sflphone-gtk/src/toolbar.c:184 ../sflphone-gtk/src/toolbar.c:186 +#: ../../sflphone-client-gnome/src/toolbar.c:185 +#: ../../sflphone-client-gnome/src/toolbar.c:187 msgid "Pick up" msgstr "Descolgar" -#: ../sflphone-gtk/src/toolbar.c:194 ../sflphone-gtk/src/toolbar.c:196 +#: ../../sflphone-client-gnome/src/toolbar.c:195 +#: ../../sflphone-client-gnome/src/toolbar.c:197 msgid "Hang up" msgstr "Colgar" -#: ../sflphone-gtk/src/toolbar.c:204 ../sflphone-gtk/src/toolbar.c:206 +#: ../../sflphone-client-gnome/src/toolbar.c:205 +#: ../../sflphone-client-gnome/src/toolbar.c:207 msgid "Off Hold" msgstr "Seguir" -#: ../sflphone-gtk/src/toolbar.c:215 ../sflphone-gtk/src/toolbar.c:217 +#: ../../sflphone-client-gnome/src/toolbar.c:216 +#: ../../sflphone-client-gnome/src/toolbar.c:218 msgid "On Hold" msgstr "Retener" -#: ../sflphone-gtk/src/toolbar.c:228 ../sflphone-gtk/src/toolbar.c:230 +#: ../../sflphone-client-gnome/src/toolbar.c:229 +#: ../../sflphone-client-gnome/src/toolbar.c:231 msgid "Transfer" msgstr "Transferir" -#: ../sflphone-gtk/src/toolbar.c:240 ../sflphone-gtk/src/toolbar.c:242 +#: ../../sflphone-client-gnome/src/toolbar.c:241 +#: ../../sflphone-client-gnome/src/toolbar.c:243 msgid "History" msgstr "Historia de Llamada" -#: ../sflphone-gtk/src/toolbar.c:251 ../sflphone-gtk/src/toolbar.c:253 +#: ../../sflphone-client-gnome/src/toolbar.c:252 +#: ../../sflphone-client-gnome/src/toolbar.c:254 msgid "Address book" -msgstr "" +msgstr "Libreta de contactos" -#: ../sflphone-gtk/src/toolbar.c:258 ../sflphone-gtk/src/toolbar.c:262 +#: ../../sflphone-client-gnome/src/toolbar.c:260 +#: ../../sflphone-client-gnome/src/toolbar.c:264 msgid "Voicemail" -msgstr "Mensaje" +msgstr "Mensaje de voz" -#: ../sflphone-gtk/src/toolbar.c:270 +#: ../../sflphone-client-gnome/src/toolbar.c:272 msgid "Record a call" -msgstr "Recordar una llamada" +msgstr "Grabar una llamada" -#: ../sflphone-gtk/src/contacts/history.c:75 -#: ../sflphone-gtk/src/contacts/searchbar.c:39 -#: ../sflphone-gtk/src/contacts/searchbar.c:65 -msgid "Search" -msgstr "Buscar" - -#: ../sflphone-gtk/src/config/accountwindow.c:103 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:108 msgid "Account settings" msgstr "Configuración de cuentas" -#: ../sflphone-gtk/src/config/accountwindow.c:115 -msgid "Account parameters" -msgstr "Paràmetros de cuenta" +#: ../../sflphone-client-gnome/src/config/accountwindow.c:120 +msgid "Account Parameters" +msgstr "Parámetros de cuenta" -#: ../sflphone-gtk/src/config/accountwindow.c:137 -msgid "_Enabled" -msgstr "_Activado" +#: ../../sflphone-client-gnome/src/config/accountwindow.c:142 +msgid "_Enable this account" +msgstr "_Habilitar esta cuenta" -#: ../sflphone-gtk/src/config/accountwindow.c:151 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:156 msgid "_Protocol" msgstr "_Protocolo" -#: ../sflphone-gtk/src/config/accountwindow.c:169 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:174 msgid "Unknown" msgstr "Desconocido" -#: ../sflphone-gtk/src/config/accountwindow.c:209 -msgid "_Voicemail box #" -msgstr "_Número de buzón de voz" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:265 +#: ../../sflphone-client-gnome/src/config/configwindow.c:732 +msgid "General" +msgstr "General" -#: ../sflphone-gtk/src/config/addressbook-config.c:105 -msgid "Search Parameters" -msgstr "Buscar paràmetros" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:276 +msgid "_Use Evolution address books" +msgstr "_Usar libreta de contactos de Evolution" -#: ../sflphone-gtk/src/config/addressbook-config.c:116 -msgid "Maximum result number for a request: " -msgstr "Numero maximo de resultados de búsqueda" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:283 +msgid "Download limit:" +msgstr "Límite de descarga" -#: ../sflphone-gtk/src/config/addressbook-config.c:127 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:294 msgid "_Display contact photo if available" -msgstr "_Mostrar fotos de contactos, si disponible" +msgstr "_Mostrar fotos de contactos, si está disponible" + +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:301 +msgid "Fields" +msgstr "Campos" -#: ../sflphone-gtk/src/config/addressbook-config.c:132 -msgid "Search for and display: " -msgstr "Buscar y mostrar: " +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:311 +msgid "Use the following fields from Evolution's address books:" +msgstr "Usar los siguientes campos de la libreta de direcciones de Evolution:" -#: ../sflphone-gtk/src/config/addressbook-config.c:135 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:316 msgid "_Business phone" -msgstr "_Numero de telefono profecional" +msgstr "_Numero de teléfono profesional" -#: ../sflphone-gtk/src/config/addressbook-config.c:140 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:321 msgid "_Home phone" -msgstr "_Numero de telefono personal" +msgstr "_Numero de teléfono personal" -#: ../sflphone-gtk/src/config/addressbook-config.c:145 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:326 msgid "_Mobile phone" -msgstr "_Numero de movil" +msgstr "_Número de movil" -#: ../sflphone-gtk/src/config/audioconf.c:154 -#, c-format -msgid "audio device index for output = %d\n" -msgstr "" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:333 +msgid "Address Books" +msgstr "Libreta de direcciones" + +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:343 +msgid "Select which Evolution address books to use:" +msgstr "Seleccione las libretas de direcciones de Evolution a usar:" -#: ../sflphone-gtk/src/config/audioconf.c:562 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:377 +#: ../../sflphone-client-gnome/src/config/audioconf.c:574 msgid "Name" msgstr "Nombre" -#: ../sflphone-gtk/src/config/audioconf.c:567 +#: ../../sflphone-client-gnome/src/config/audioconf.c:155 +#, c-format +msgid "audio device index for output = %d" +msgstr "índice del dispositivo de salida de audio = %d" + +#: ../../sflphone-client-gnome/src/config/audioconf.c:579 msgid "Frequency" msgstr "Frecuencia" -#: ../sflphone-gtk/src/config/audioconf.c:572 +#: ../../sflphone-client-gnome/src/config/audioconf.c:584 msgid "Bitrate" msgstr "Tasa de transferencia" -#: ../sflphone-gtk/src/config/audioconf.c:577 +#: ../../sflphone-client-gnome/src/config/audioconf.c:589 msgid "Bandwidth" msgstr "Ancho de banda" -#: ../sflphone-gtk/src/config/audioconf.c:637 +#: ../../sflphone-client-gnome/src/config/audioconf.c:652 msgid "Pulseaudio" -msgstr "" +msgstr "Pulseaudio" -#: ../sflphone-gtk/src/config/audioconf.c:640 +#: ../../sflphone-client-gnome/src/config/audioconf.c:655 msgid "ALSA" -msgstr "" +msgstr "ALSA" -#: ../sflphone-gtk/src/config/audioconf.c:666 +#: ../../sflphone-client-gnome/src/config/audioconf.c:681 msgid "ALSA plugin" msgstr "Plugin ALSA" -#: ../sflphone-gtk/src/config/audioconf.c:688 +#: ../../sflphone-client-gnome/src/config/audioconf.c:703 msgid "Output" -msgstr "" +msgstr "Salida" -#: ../sflphone-gtk/src/config/audioconf.c:710 +#: ../../sflphone-client-gnome/src/config/audioconf.c:725 msgid "Input" -msgstr "" +msgstr "Entrada" -#: ../sflphone-gtk/src/config/audioconf.c:743 +#: ../../sflphone-client-gnome/src/config/audioconf.c:758 msgid "_Enable ringtones" msgstr "_Habilitar tonos de llamada" -#: ../sflphone-gtk/src/config/audioconf.c:748 +#: ../../sflphone-client-gnome/src/config/audioconf.c:764 msgid "Choose a ringtone" msgstr "Elija un tono de llmada" -#: ../sflphone-gtk/src/config/audioconf.c:753 +#: ../../sflphone-client-gnome/src/config/audioconf.c:769 msgid "Audio Files" msgstr "Archivos de Audio" -#: ../sflphone-gtk/src/config/audioconf.c:770 -msgid "_Activate silence detection" -msgstr "" +#: ../../sflphone-client-gnome/src/config/audioconf.c:788 +msgid "_Voice Activity Detection" +msgstr "_Detección de actividad de voz" + +#: ../../sflphone-client-gnome/src/config/audioconf.c:798 +msgid "_Noise Reduction (Narrow-Band Companding)" +msgstr "_Reducción de ruido" -#: ../sflphone-gtk/src/config/audioconf.c:798 +#: ../../sflphone-client-gnome/src/config/audioconf.c:826 msgid "Sound Manager" -msgstr "" +msgstr "Gestor de audio" -#: ../sflphone-gtk/src/config/audioconf.c:805 +#: ../../sflphone-client-gnome/src/config/audioconf.c:833 msgid "ALSA configuration" -msgstr "Configuraciòn de cuenta SIP" +msgstr "Configuración de ALSA" -#: ../sflphone-gtk/src/config/audioconf.c:815 +#: ../../sflphone-client-gnome/src/config/audioconf.c:850 msgid "Codecs" -msgstr "" +msgstr "Códecs" -#: ../sflphone-gtk/src/config/audioconf.c:823 -msgid "Noise reduction" -msgstr "Reducción de ruidos" - -#: ../sflphone-gtk/src/config/audioconf.c:830 +#: ../../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Ringtones" -msgstr "_Permitir los ringtones" +msgstr "Tonos de llamada" -#: ../sflphone-gtk/src/config/configwindow.c:385 +#: ../../sflphone-client-gnome/src/config/configwindow.c:402 msgid "Protocol" msgstr "Protocolo" -#: ../sflphone-gtk/src/config/configwindow.c:392 +#: ../../sflphone-client-gnome/src/config/configwindow.c:409 msgid "Status" msgstr "Estado" -#: ../sflphone-gtk/src/config/configwindow.c:495 +#: ../../sflphone-client-gnome/src/config/configwindow.c:512 msgid "Stun parameters will apply to each SIP account created." msgstr "Parámetros de stun se aplicarán a cada cuenta SIP creada." -#: ../sflphone-gtk/src/config/configwindow.c:503 +#: ../../sflphone-client-gnome/src/config/configwindow.c:520 msgid "Enable it if you are behind a firewall" -msgstr "Actívelo si está detrás de un cortafuegos, después reinicie SFLphone" +msgstr "Actívelo si está detrás de un cortafuegos" -#: ../sflphone-gtk/src/config/configwindow.c:511 +#: ../../sflphone-client-gnome/src/config/configwindow.c:528 msgid "Format: name.server:port" msgstr "Formato: nombre.servidor:puerto" -#: ../sflphone-gtk/src/config/configwindow.c:561 -msgid "Desktop Notification" +#: ../../sflphone-client-gnome/src/config/configwindow.c:579 +msgid "Desktop Notifications" msgstr "Notificación de escritorio" -#: ../sflphone-gtk/src/config/configwindow.c:569 -msgid "_Enable" -msgstr "_Activar" +#: ../../sflphone-client-gnome/src/config/configwindow.c:588 +msgid "_Enable notifications" +msgstr "_Habilitar notificaciones" -#: ../sflphone-gtk/src/config/configwindow.c:574 -msgid "_Notify voice mails" -msgstr "_Notificar mensajes de voz" +#: ../../sflphone-client-gnome/src/config/configwindow.c:594 +msgid "Enable voicemail _notifications" +msgstr "Habilitar _notificaciones de mensajes de voz" -#: ../sflphone-gtk/src/config/configwindow.c:580 +#: ../../sflphone-client-gnome/src/config/configwindow.c:605 msgid "System Tray Icon" msgstr "Icono de bandeja del sistema" -#: ../sflphone-gtk/src/config/configwindow.c:588 +#: ../../sflphone-client-gnome/src/config/configwindow.c:613 msgid "_Popup main window on incoming call" msgstr "_Popup ventana principal al recibir llamadas" -#: ../sflphone-gtk/src/config/configwindow.c:593 +#: ../../sflphone-client-gnome/src/config/configwindow.c:618 msgid "Ne_ver popup main window" msgstr "_Nunca mostrar ventana principal" -#: ../sflphone-gtk/src/config/configwindow.c:597 -msgid "_Start hidden" -msgstr "_Iniciar oculto" +#: ../../sflphone-client-gnome/src/config/configwindow.c:622 +msgid "Hide SFLphone window on _startup" +msgstr "Esconder SFLphone en el arranque" -#: ../sflphone-gtk/src/config/configwindow.c:603 +#: ../../sflphone-client-gnome/src/config/configwindow.c:628 msgid "Calls History" msgstr "Historial de llamadas" -#: ../sflphone-gtk/src/config/configwindow.c:611 -msgid "_Maximum number of calls" -msgstr "_Numero maximo de llamadas" +#: ../../sflphone-client-gnome/src/config/configwindow.c:636 +msgid "_History size limit" +msgstr "Límite de tamaño de _historial" -#: ../sflphone-gtk/src/config/configwindow.c:627 +#: ../../sflphone-client-gnome/src/config/configwindow.c:653 msgid "PulseAudio sound server" msgstr "Servidor de sonido Pulseaudio" -#: ../sflphone-gtk/src/config/configwindow.c:635 -msgid "_Control running applications volume" -msgstr "_Control del volumen de las applicaciones en curso" +#: ../../sflphone-client-gnome/src/config/configwindow.c:661 +msgid "Mute other applications during a _call" +msgstr "Silenciar el resto de aplicaciones durante una llamada" -#: ../sflphone-gtk/src/config/configwindow.c:648 +#: ../../sflphone-client-gnome/src/config/configwindow.c:674 msgid "SIP Port" -msgstr "" +msgstr "Puerto SIP" -#: ../sflphone-gtk/src/config/configwindow.c:661 +#: ../../sflphone-client-gnome/src/config/configwindow.c:687 msgid "Port:" -msgstr "" - -#: ../sflphone-gtk/src/config/configwindow.c:706 -msgid "General" -msgstr "Configuración" +msgstr "Puerto:" -#: ../sflphone-gtk/src/config/configwindow.c:717 -msgid "_Destination folder" -msgstr "_Carpeta de destinación" +#: ../../sflphone-client-gnome/src/config/configwindow.c:742 +msgid "_Recordings folder" +msgstr "Directorio de Grabaciones" -#: ../sflphone-gtk/src/config/configwindow.c:723 +#: ../../sflphone-client-gnome/src/config/configwindow.c:748 msgid "Select a folder" -msgstr "" +msgstr "Seleccione un directorio" -#: ../sflphone-gtk/src/config/configwindow.c:748 +#: ../../sflphone-client-gnome/src/config/configwindow.c:773 msgid "Preferences" msgstr "Preferencias" -#: ../sflphone-gtk/src/config/configwindow.c:768 +#: ../../sflphone-client-gnome/src/config/configwindow.c:793 msgid "General Settings" -msgstr "Configuración" +msgstr "Configuración general" -#: ../sflphone-gtk/src/config/configwindow.c:773 +#: ../../sflphone-client-gnome/src/config/configwindow.c:798 msgid "Audio Settings" msgstr "Configuración de audio" -#: ../sflphone-gtk/src/config/configwindow.c:778 -msgid "Record" -msgstr "Registrar" +#: ../../sflphone-client-gnome/src/config/configwindow.c:803 +msgid "Recordings" +msgstr "Grabaciones" -#: ../sflphone-gtk/src/config/configwindow.c:783 +#: ../../sflphone-client-gnome/src/config/configwindow.c:808 msgid "Address Book" -msgstr "" +msgstr "Libreta de direcciones" -#: ../sflphone-gtk/src/config/configwindow.c:788 +#: ../../sflphone-client-gnome/src/config/configwindow.c:813 msgid "Hooks" -msgstr "" +msgstr "Disparadores" -#: ../sflphone-gtk/src/config/configwindow.c:814 +#: ../../sflphone-client-gnome/src/config/configwindow.c:840 msgid "Accounts" msgstr "Cuentas" -#: ../sflphone-gtk/src/config/configwindow.c:826 -msgid "Accounts previously setup" -msgstr "Cuentas existentes" +#: ../../sflphone-client-gnome/src/config/configwindow.c:852 +msgid "Configured Accounts" +msgstr "Cuentas Configuradas" -#: ../sflphone-gtk/src/config/hooks-config.c:92 -msgid "URL argument" +#: ../../sflphone-client-gnome/src/config/hooks-config.c:130 +msgid "URL Passing" +msgstr "Paso de URL" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:140 +#, c-format +msgid "" +"SFLphone can run custom commands if incoming calls come with an URL " +"attached.\n" +"In this case, %s will be replaced with the passed URL." msgstr "" +"SFLphone puede ejecutar órdenes personalizadas si las llamadas entrantes " +"incluyen una URL.\n" +"En este caso, %s se remplazará por la URL." -#: ../sflphone-gtk/src/config/hooks-config.c:102 -msgid "_SIP protocol" -msgstr "_Protocolo SIP" +#: ../../sflphone-client-gnome/src/config/hooks-config.c:143 +msgid "Trigger on specific _SIP header" +msgstr "Evento desencadenado con una cabecera _SIP específica" -#: ../sflphone-gtk/src/config/hooks-config.c:107 -msgid "_IAX2 protocol" -msgstr "_Protocolo IAX2" +#: ../../sflphone-client-gnome/src/config/hooks-config.c:155 +msgid "Trigger on _IAX2 URL" +msgstr "Evento desencadenado con una URL _IAX2" -#: ../sflphone-gtk/src/config/hooks-config.c:113 -msgid "_SIP Header: " -msgstr "" +#: ../../sflphone-client-gnome/src/config/hooks-config.c:160 +msgid "_Command to run: " +msgstr "_Orden a ejecutar: " -#: ../sflphone-gtk/src/config/hooks-config.c:120 -msgid "_Command: " -msgstr "" +#: ../../sflphone-client-gnome/src/config/hooks-config.c:168 +msgid "Phone Number Rewriting" +msgstr "Reescritura de número de teléfono" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:178 +msgid "_Prefix dialed numbers with:" +msgstr "_prefijar los números marcados con:" + +#: ../../sflphone-client-gnome/src/contacts/history.c:83 +#: ../../sflphone-client-gnome/src/contacts/searchbar.c:123 +msgid "Search history" +msgstr "Historial de búsquedas" -#, fuzzy -#~ msgid "SFLphone 0.9.3" -#~ msgstr "SFLphone 0.9.3" +#: ../../sflphone-client-gnome/src/contacts/history.c:83 +#: ../../sflphone-client-gnome/src/contacts/searchbar.c:110 +msgid "Search contact" +msgstr "_Buscar contacto" -#~ msgid "Setup Accounts" -#~ msgstr "Cuentas" +#~ msgid "Registered to %s (%s)" +#~ msgstr "Registrado en %s (%s)" -#~ msgid "_STUN Server" -#~ msgstr "_Servidor STUN" +#~ msgid "%s account- %s %s" +#~ msgstr "%s cuenta- %s %s" diff --git a/sflphone-common/po/fr.po b/sflphone-common/po/fr.po index 5fc0060c1a12b43699c9790dbdce8dd6e1913a36..e820d6547fc188eeacd4397ad2991f890521629c 100644 --- a/sflphone-common/po/fr.po +++ b/sflphone-common/po/fr.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-02 11:15-0400\n" +"POT-Creation-Date: 2009-05-21 10:45-0400\n" "PO-Revision-Date: 2008-03-31 14:15\n" "Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" @@ -18,63 +18,69 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n>1;\n" -#: ../sflphone-gtk/src/accountlist.c:158 +#: ../../sflphone-client-gnome/src/accountlist.c:169 msgid "Registered" msgstr "Enregistré" -#: ../sflphone-gtk/src/accountlist.c:161 +#: ../../sflphone-client-gnome/src/accountlist.c:172 msgid "Not Registered" msgstr "Non Enregistré" -#: ../sflphone-gtk/src/accountlist.c:164 +#: ../../sflphone-client-gnome/src/accountlist.c:175 msgid "Trying..." msgstr "En cours..." -#: ../sflphone-gtk/src/accountlist.c:167 ../sflphone-gtk/src/sflnotify.c:171 -#: ../sflphone-gtk/src/sflnotify.c:212 +#: ../../sflphone-client-gnome/src/accountlist.c:178 +#: ../../sflphone-client-gnome/src/sflnotify.c:176 +#: ../../sflphone-client-gnome/src/sflnotify.c:217 msgid "Error" msgstr "Erreur" -#: ../sflphone-gtk/src/accountlist.c:170 +#: ../../sflphone-client-gnome/src/accountlist.c:181 msgid "Bad authentification" msgstr "Erreur d'authentification" -#: ../sflphone-gtk/src/accountlist.c:173 +#: ../../sflphone-client-gnome/src/accountlist.c:184 msgid "Network unreachable" msgstr "Réseau non trouvé" -#: ../sflphone-gtk/src/accountlist.c:176 +#: ../../sflphone-client-gnome/src/accountlist.c:187 msgid "Host unreachable" msgstr "Serveur introuvable" -#: ../sflphone-gtk/src/accountlist.c:179 +#: ../../sflphone-client-gnome/src/accountlist.c:190 msgid "Stun configuration error" msgstr "Erreur de configuration Stun" -#: ../sflphone-gtk/src/accountlist.c:182 +#: ../../sflphone-client-gnome/src/accountlist.c:193 msgid "Stun server invalid" msgstr "Serveur Stun invalide" -#: ../sflphone-gtk/src/accountlist.c:185 +#: ../../sflphone-client-gnome/src/accountlist.c:196 msgid "Invalid" msgstr "Non valide" -#: ../sflphone-gtk/src/actions.c:55 ../sflphone-gtk/src/sflnotify.c:103 +#: ../../sflphone-client-gnome/src/actions.c:55 +#: ../../sflphone-client-gnome/src/sflnotify.c:108 #, c-format msgid "%d voice mails" msgstr "%d messages vocaux" -#: ../sflphone-gtk/src/actions.c:57 +#: ../../sflphone-client-gnome/src/actions.c:57 #, c-format msgid "%d voice mail" msgstr "%d message vocal" -#: ../sflphone-gtk/src/actions.c:81 +#: ../../sflphone-client-gnome/src/actions.c:81 #, c-format -msgid "%s account- %s" -msgstr "compte %s- %s" +msgid "Using %s (%s)" +msgstr "Utilise %s (%s)" -#: ../sflphone-gtk/src/actions.c:225 +#: ../../sflphone-client-gnome/src/actions.c:87 +msgid "No registered account" +msgstr "Aucun compte enregistré" + +#: ../../sflphone-client-gnome/src/actions.c:229 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -82,12 +88,17 @@ msgstr "" "Impossible de se connecter au serveur SFLphone.\n" " Assurez-vous que le démon est lancé." -#: ../sflphone-gtk/src/actions.c:764 -#, fuzzy, c-format -msgid "%s account- %s %s" -msgstr "compte %s- %s" +#: ../../sflphone-client-gnome/src/actions.c:787 +#, c-format +msgid "IP call - %s" +msgstr "Appel IP - %s" + +#: ../../sflphone-client-gnome/src/actions.c:790 +#, c-format +msgid "Using %s (%s) - Codec: %s" +msgstr "Utilise %s (%s) - Codec: %s" -#: ../sflphone-gtk/src/actions.c:861 +#: ../../sflphone-client-gnome/src/actions.c:880 #, c-format msgid "" "<b>Error: No audio codecs found.\n" @@ -100,7 +111,7 @@ msgstr "" "</b> Les codecs audio SFL doivent être soit dans <i>%s</i> soit dans le " "répertoire <b>.sflphone</b> de votre répertoire racine( <i>%s</i> )" -#: ../sflphone-gtk/src/assistant.c:31 +#: ../../sflphone-client-gnome/src/assistant.c:35 #, c-format msgid "" "This assistant is now finished.\n" @@ -110,642 +121,725 @@ msgid "" "Alias : %s\n" "Server : %s\n" "Username : %s\n" -"Password : %s" msgstr "" "Cet assistant est maintenant terminé.\n" -"\n" " Vous pouvez à tout moment vérifier votre état d'enregistrement ou modifier " "les paramètres de vos comptes dans la fenêtre Options/Comptes.\n" "\n" "Alias : %s\n" "Serveur : %s\n" "Nom d'usager : %s\n" -"Mot de passe : %s" -#: ../sflphone-gtk/src/assistant.c:154 +#: ../../sflphone-client-gnome/src/assistant.c:160 msgid "SFLphone account configuration wizard" msgstr "Assistant de configuration de compte" -#: ../sflphone-gtk/src/assistant.c:180 +#: ../../sflphone-client-gnome/src/assistant.c:186 msgid "Welcome to SFLphone!" msgstr "Bienvenue dans SFLphone" -#: ../sflphone-gtk/src/assistant.c:181 +#: ../../sflphone-client-gnome/src/assistant.c:187 msgid "This installation wizard will help you configure an account." msgstr "Cet assistant va vous guider dans la configuration d'un compte. " -#: ../sflphone-gtk/src/assistant.c:195 +#: ../../sflphone-client-gnome/src/assistant.c:201 msgid "VoIP Protocols" msgstr "Protocoles VoIP" -#: ../sflphone-gtk/src/assistant.c:195 +#: ../../sflphone-client-gnome/src/assistant.c:201 msgid "Select an account type:" msgstr "Choisissez un type de compte:" -#: ../sflphone-gtk/src/assistant.c:213 +#: ../../sflphone-client-gnome/src/assistant.c:219 msgid "Account" -msgstr "Comptes" +msgstr "Compte" -#: ../sflphone-gtk/src/assistant.c:213 +#: ../../sflphone-client-gnome/src/assistant.c:219 msgid "Please select one of the following option:" msgstr "Veuillez remplir les champs suivants:" -#: ../sflphone-gtk/src/assistant.c:215 +#: ../../sflphone-client-gnome/src/assistant.c:221 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Créer un compte SIP/IAX2 gratuit sur sflphone.org" -#: ../sflphone-gtk/src/assistant.c:217 +#: ../../sflphone-client-gnome/src/assistant.c:223 msgid "Register an existing SIP or IAX2 account" msgstr "Enregistrer un compte SIP ou IAX2 existant" -#: ../sflphone-gtk/src/assistant.c:230 +#: ../../sflphone-client-gnome/src/assistant.c:236 msgid "SIP account configuration" msgstr "Configuration d'un compte SIP" -#: ../sflphone-gtk/src/assistant.c:230 ../sflphone-gtk/src/assistant.c:305 +#: ../../sflphone-client-gnome/src/assistant.c:236 +#: ../../sflphone-client-gnome/src/assistant.c:332 msgid "Please fill the following information:" msgstr "Veuillez remplir les champs suivants:" -#: ../sflphone-gtk/src/assistant.c:238 ../sflphone-gtk/src/assistant.c:313 -#: ../sflphone-gtk/src/config/accountwindow.c:143 +#: ../../sflphone-client-gnome/src/assistant.c:244 +#: ../../sflphone-client-gnome/src/assistant.c:340 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:148 msgid "_Alias" msgstr "A_lias" -#: ../sflphone-gtk/src/assistant.c:246 ../sflphone-gtk/src/assistant.c:321 -#: ../sflphone-gtk/src/config/accountwindow.c:179 +#: ../../sflphone-client-gnome/src/assistant.c:252 +#: ../../sflphone-client-gnome/src/assistant.c:348 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:184 msgid "_Host name" msgstr "_Serveur" -#: ../sflphone-gtk/src/assistant.c:254 ../sflphone-gtk/src/assistant.c:329 -#: ../sflphone-gtk/src/config/accountwindow.c:187 +#: ../../sflphone-client-gnome/src/assistant.c:260 +#: ../../sflphone-client-gnome/src/assistant.c:356 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:192 msgid "_User name" msgstr "Usa_ger" -#: ../sflphone-gtk/src/assistant.c:264 ../sflphone-gtk/src/assistant.c:339 -#: ../sflphone-gtk/src/config/accountwindow.c:198 +#: ../../sflphone-client-gnome/src/assistant.c:276 +#: ../../sflphone-client-gnome/src/assistant.c:371 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:207 msgid "_Password" msgstr "_Mot de passe" -#: ../sflphone-gtk/src/assistant.c:282 +#: ../../sflphone-client-gnome/src/assistant.c:294 +#: ../../sflphone-client-gnome/src/assistant.c:387 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:223 +msgid "_Voicemail number" +msgstr "_Boite vocale #" + +#: ../../sflphone-client-gnome/src/assistant.c:309 msgid "Optional Email Address " msgstr "Courriel optionnel" -#: ../sflphone-gtk/src/assistant.c:282 +#: ../../sflphone-client-gnome/src/assistant.c:309 msgid "This email address will be use to send your voicemail messages" msgstr "Vos messages vocaux seront envoyés par courriel à cette adresse " -#: ../sflphone-gtk/src/assistant.c:290 -#, fuzzy +#: ../../sflphone-client-gnome/src/assistant.c:317 msgid "_Email" msgstr "_Email" -#: ../sflphone-gtk/src/assistant.c:305 +#: ../../sflphone-client-gnome/src/assistant.c:332 msgid "IAX2 account configuration" msgstr "Configuration d'un compte IAX2" -#: ../sflphone-gtk/src/assistant.c:360 -#: ../sflphone-gtk/src/config/configwindow.c:837 +#: ../../sflphone-client-gnome/src/assistant.c:405 +#: ../../sflphone-client-gnome/src/config/configwindow.c:863 msgid "Network Address Translation" msgstr "Traduction d'adresse réseau (NAT)" -#: ../sflphone-gtk/src/assistant.c:360 +#: ../../sflphone-client-gnome/src/assistant.c:405 msgid "You should probably enable this if you are behind a firewall." msgstr "" -"Vous devriez probablement activer cette option si \n" -"vous vous trouvez derrière un pare-feu." +"Vous devriez probablement activer cette option si vous vous trouvez derrière " +"un pare-feu." -#: ../sflphone-gtk/src/assistant.c:369 -#: ../sflphone-gtk/src/config/configwindow.c:499 +#: ../../sflphone-client-gnome/src/assistant.c:414 +#: ../../sflphone-client-gnome/src/config/configwindow.c:516 msgid "E_nable STUN" msgstr "A_ctiver STUN" -#: ../sflphone-gtk/src/assistant.c:376 +#: ../../sflphone-client-gnome/src/assistant.c:421 msgid "_STUN server" msgstr "S_erveur STUN" -#: ../sflphone-gtk/src/assistant.c:390 +#: ../../sflphone-client-gnome/src/assistant.c:435 msgid "Account Registration" msgstr "Enregistrement du compte" -#: ../sflphone-gtk/src/assistant.c:390 +#: ../../sflphone-client-gnome/src/assistant.c:435 msgid "Congratulations!" msgstr "Félicitations!" -#: ../sflphone-gtk/src/context-menu.c:296 ../sflphone-gtk/src/menus.c:308 -#: ../sflphone-gtk/src/menus.c:791 -msgid "_Pick up" -msgstr "_Décrocher" - -#: ../sflphone-gtk/src/context-menu.c:308 ../sflphone-gtk/src/menus.c:318 -#: ../sflphone-gtk/src/menus.c:803 -msgid "_Hang up" -msgstr "_Raccrocher" - -#: ../sflphone-gtk/src/context-menu.c:320 ../sflphone-gtk/src/menus.c:328 -#: ../sflphone-gtk/src/menus.c:815 -msgid "On _Hold" -msgstr "_Mettre en attente" - -#: ../sflphone-gtk/src/context-menu.c:332 ../sflphone-gtk/src/menus.c:340 -#: ../sflphone-gtk/src/menus.c:827 -#, fuzzy -msgid "_Record" -msgstr "Enregistrement" - -#: ../sflphone-gtk/src/errors.c:28 +#: ../../sflphone-client-gnome/src/errors.c:28 msgid "" -"<b>ALSA notification</b>\n" +"ALSA notification\n" "\n" "Error while opening playback device" msgstr "" -"<b>Notification ALSA</b>\n" +"Notification ALSA\n" "\n" "Erreur lors de l'ouverture du périphérique de sortie" -#: ../sflphone-gtk/src/errors.c:31 +#: ../../sflphone-client-gnome/src/errors.c:31 msgid "" -"<b>ALSA notification</b>\n" +"ALSA notification\n" "\n" "Error while opening capture device" msgstr "" -"<b>Notification ALSA</b>\n" +"Notification ALSA\n" "\n" "Erreur lors de l'ouverture du périphérique d'entrée" -#: ../sflphone-gtk/src/errors.c:34 +#: ../../sflphone-client-gnome/src/errors.c:34 msgid "" -"<b>Pulseaudio notification</b>\n" +"Pulseaudio notification\n" "\n" "Pulseaudio is not running" msgstr "" -"<b>Notification Pulseaudio</b>\n" +"Notification Pulseaudio\n" "\n" "Pulseaudio n'est pas lancé" -#: ../sflphone-gtk/src/mainwindow.c:70 +#: ../../sflphone-client-gnome/src/mainwindow.c:70 msgid "There is one call in progress." msgstr "Vous avez un appel en cours." -#: ../sflphone-gtk/src/mainwindow.c:74 +#: ../../sflphone-client-gnome/src/mainwindow.c:74 msgid "There are calls in progress." msgstr "Vous avez des appels en cours." -#: ../sflphone-gtk/src/mainwindow.c:83 +#: ../../sflphone-client-gnome/src/mainwindow.c:83 msgid "Do you still want to quit?" msgstr "Voulez-vous quitter?" -#: ../sflphone-gtk/src/menus.c:131 +#: ../../sflphone-client-gnome/src/mainwindow.c:296 +msgid "SFLphone Error" +msgstr "Erreur SFLphone" + +#: ../../sflphone-client-gnome/src/menus.c:134 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" "SFLphone est un client VoIP compatible avec les protocoles SIP et IAX2." -#: ../sflphone-gtk/src/menus.c:134 +#: ../../sflphone-client-gnome/src/menus.c:137 msgid "About SFLphone" msgstr "A propos de SFLphone" -#: ../sflphone-gtk/src/menus.c:157 +#: ../../sflphone-client-gnome/src/menus.c:161 msgid "_Help" msgstr "A_ide" -#: ../sflphone-gtk/src/menus.c:296 ../sflphone-gtk/src/menus.c:949 +#: ../../sflphone-client-gnome/src/menus.c:300 +#: ../../sflphone-client-gnome/src/menus.c:971 msgid "_New call" msgstr "_Nouvel appel" -#: ../sflphone-gtk/src/menus.c:354 -msgid "_Account Assistant" -msgstr "_Assistant SFLphone" +#: ../../sflphone-client-gnome/src/menus.c:312 +#: ../../sflphone-client-gnome/src/menus.c:803 +msgid "_Pick up" +msgstr "_Décrocher" + +#: ../../sflphone-client-gnome/src/menus.c:322 +#: ../../sflphone-client-gnome/src/menus.c:815 +msgid "_Hang up" +msgstr "_Raccrocher" + +#: ../../sflphone-client-gnome/src/menus.c:332 +#: ../../sflphone-client-gnome/src/menus.c:827 +msgid "On _Hold" +msgstr "_Mettre en attente" + +#: ../../sflphone-client-gnome/src/menus.c:344 +#: ../../sflphone-client-gnome/src/menus.c:839 +msgid "_Record" +msgstr "Enregistrer" + +#: ../../sflphone-client-gnome/src/menus.c:358 +msgid "_Account creation wizard" +msgstr "Assistant de création de compte" -#: ../sflphone-gtk/src/menus.c:384 +#: ../../sflphone-client-gnome/src/menus.c:388 msgid "_Call" msgstr "_Actions" -#: ../sflphone-gtk/src/menus.c:557 +#: ../../sflphone-client-gnome/src/menus.c:561 msgid "_Clear history" msgstr "Effacer l'historique" -#: ../sflphone-gtk/src/menus.c:569 +#: ../../sflphone-client-gnome/src/menus.c:573 msgid "_Accounts" msgstr "Co_mptes" -#: ../sflphone-gtk/src/menus.c:584 +#: ../../sflphone-client-gnome/src/menus.c:588 msgid "_Edit" msgstr "_Options" -#: ../sflphone-gtk/src/menus.c:644 +#: ../../sflphone-client-gnome/src/menus.c:649 msgid "_Dialpad" msgstr "_Clavier" -#: ../sflphone-gtk/src/menus.c:656 +#: ../../sflphone-client-gnome/src/menus.c:661 msgid "_Volume controls" msgstr "_Contrôle du volume" -#: ../sflphone-gtk/src/menus.c:665 -#, fuzzy -msgid "_Search contact" -msgstr "Rechercher un contact" - -#: ../sflphone-gtk/src/menus.c:673 +#: ../../sflphone-client-gnome/src/menus.c:679 msgid "_View" msgstr "A_ffichage" -#: ../sflphone-gtk/src/menus.c:885 +#: ../../sflphone-client-gnome/src/menus.c:899 msgid "_Call back" msgstr "_Rappeler" -#: ../sflphone-gtk/src/sflnotify.c:34 ../sflphone-gtk/src/sflnotify.c:100 +#: ../../sflphone-client-gnome/src/menus.c:1082 +msgid "Edit phone" +msgstr "Éditer numéro" + +#: ../../sflphone-client-gnome/src/menus.c:1093 +msgid "Edit the phone number before making a call" +msgstr "Éditer le numéro de téléphone avant d'appeler" + +#: ../../sflphone-client-gnome/src/sflnotify.c:38 +#: ../../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%s account: %s" msgstr "Compte %s: %s" -#: ../sflphone-gtk/src/sflnotify.c:37 +#: ../../sflphone-client-gnome/src/sflnotify.c:42 #, c-format msgid "<i>From:</i> %s" msgstr "<i>De:</i> %s" -#: ../sflphone-gtk/src/sflnotify.c:52 +#: ../../sflphone-client-gnome/src/sflnotify.c:57 msgid "Accept" msgstr "Accepter" -#: ../sflphone-gtk/src/sflnotify.c:53 +#: ../../sflphone-client-gnome/src/sflnotify.c:58 msgid "Refuse" msgstr "Refuser" -#: ../sflphone-gtk/src/sflnotify.c:54 ../sflphone-gtk/src/sflnotify.c:117 -#: ../sflphone-gtk/src/sflnotify.c:154 +#: ../../sflphone-client-gnome/src/sflnotify.c:59 +#: ../../sflphone-client-gnome/src/sflnotify.c:122 +#: ../../sflphone-client-gnome/src/sflnotify.c:159 msgid "Ignore" msgstr "Ignorer" -#: ../sflphone-gtk/src/sflnotify.c:136 +#: ../../sflphone-client-gnome/src/sflnotify.c:141 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "Appel avec le compte %s <i>%s</i>" -#: ../sflphone-gtk/src/sflnotify.c:140 +#: ../../sflphone-client-gnome/src/sflnotify.c:145 msgid "Current account" msgstr "Compte courant" -#: ../sflphone-gtk/src/sflnotify.c:169 +#: ../../sflphone-client-gnome/src/sflnotify.c:174 msgid "You haven't setup any accounts" msgstr "Vous n'avez aucun compte configuré" -#: ../sflphone-gtk/src/sflnotify.c:209 +#: ../../sflphone-client-gnome/src/sflnotify.c:214 msgid "You have no registered accounts" msgstr "Vous n'avez aucun compte enregistré" -#: ../sflphone-gtk/src/sliders.c:161 +#: ../../sflphone-client-gnome/src/sliders.c:161 msgid "Speakers volume" msgstr "Volume des hauts-parleurs" -#: ../sflphone-gtk/src/sliders.c:163 +#: ../../sflphone-client-gnome/src/sliders.c:163 msgid "Mic volume" msgstr "Volume du micro" -#: ../sflphone-gtk/src/statusicon.c:91 +#: ../../sflphone-client-gnome/src/statusicon.c:91 msgid "_Show main window" msgstr "_Afficher la fenêtre principale" -#: ../sflphone-gtk/src/statusicon.c:124 +#: ../../sflphone-client-gnome/src/statusicon.c:124 #, c-format -msgid "SFLphone - %i accounts registered" -msgstr "SFLphone - %i compte enregistré" +msgid "SFLphone - %i accounts configured" +msgstr "SFLphone - %i comptes configurés" -#: ../sflphone-gtk/src/timestamp.c:46 +#: ../../sflphone-client-gnome/src/timestamp.c:46 msgid "<small>Missed call</small>" msgstr "<small>Appel manqué</small>" -#: ../sflphone-gtk/src/timestamp.c:64 +#: ../../sflphone-client-gnome/src/timestamp.c:64 #, c-format msgid "<small>Duration:</small> %s" msgstr "<small>Durée:</small> %s" -#: ../sflphone-gtk/src/toolbar.c:49 +#: ../../sflphone-client-gnome/src/toolbar.c:50 #, c-format msgid "\"Voicemail\" <%s>" msgstr "\"Boite vocale\" <%s>" -#: ../sflphone-gtk/src/toolbar.c:175 ../sflphone-gtk/src/toolbar.c:177 +#: ../../sflphone-client-gnome/src/toolbar.c:176 +#: ../../sflphone-client-gnome/src/toolbar.c:178 msgid "Place a call" msgstr "Appeler" -#: ../sflphone-gtk/src/toolbar.c:184 ../sflphone-gtk/src/toolbar.c:186 +#: ../../sflphone-client-gnome/src/toolbar.c:185 +#: ../../sflphone-client-gnome/src/toolbar.c:187 msgid "Pick up" msgstr "Décrocher" -#: ../sflphone-gtk/src/toolbar.c:194 ../sflphone-gtk/src/toolbar.c:196 +#: ../../sflphone-client-gnome/src/toolbar.c:195 +#: ../../sflphone-client-gnome/src/toolbar.c:197 msgid "Hang up" msgstr "Raccrocher" -#: ../sflphone-gtk/src/toolbar.c:204 ../sflphone-gtk/src/toolbar.c:206 +#: ../../sflphone-client-gnome/src/toolbar.c:205 +#: ../../sflphone-client-gnome/src/toolbar.c:207 msgid "Off Hold" msgstr "Reprendre" -#: ../sflphone-gtk/src/toolbar.c:215 ../sflphone-gtk/src/toolbar.c:217 +#: ../../sflphone-client-gnome/src/toolbar.c:216 +#: ../../sflphone-client-gnome/src/toolbar.c:218 msgid "On Hold" msgstr "Mettre en attente" -#: ../sflphone-gtk/src/toolbar.c:228 ../sflphone-gtk/src/toolbar.c:230 +#: ../../sflphone-client-gnome/src/toolbar.c:229 +#: ../../sflphone-client-gnome/src/toolbar.c:231 msgid "Transfer" msgstr "Transférer" -#: ../sflphone-gtk/src/toolbar.c:240 ../sflphone-gtk/src/toolbar.c:242 +#: ../../sflphone-client-gnome/src/toolbar.c:241 +#: ../../sflphone-client-gnome/src/toolbar.c:243 msgid "History" msgstr "Historique" -#: ../sflphone-gtk/src/toolbar.c:251 ../sflphone-gtk/src/toolbar.c:253 +#: ../../sflphone-client-gnome/src/toolbar.c:252 +#: ../../sflphone-client-gnome/src/toolbar.c:254 msgid "Address book" msgstr "Carnet d'adresse" -#: ../sflphone-gtk/src/toolbar.c:258 ../sflphone-gtk/src/toolbar.c:262 +#: ../../sflphone-client-gnome/src/toolbar.c:260 +#: ../../sflphone-client-gnome/src/toolbar.c:264 msgid "Voicemail" msgstr "Boite vocale" -#: ../sflphone-gtk/src/toolbar.c:270 +#: ../../sflphone-client-gnome/src/toolbar.c:272 msgid "Record a call" msgstr "Enregistrer un appel" -#: ../sflphone-gtk/src/contacts/history.c:75 -#: ../sflphone-gtk/src/contacts/searchbar.c:39 -#: ../sflphone-gtk/src/contacts/searchbar.c:65 -msgid "Search" -msgstr "Recherche" - -#: ../sflphone-gtk/src/config/accountwindow.c:103 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:108 msgid "Account settings" msgstr "Configuration des comptes" -#: ../sflphone-gtk/src/config/accountwindow.c:115 -msgid "Account parameters" -msgstr "Paramètres du compte" +#: ../../sflphone-client-gnome/src/config/accountwindow.c:120 +msgid "Account Parameters" +msgstr "Paramètres du Compte" -#: ../sflphone-gtk/src/config/accountwindow.c:137 -msgid "_Enabled" -msgstr "_Activé" +#: ../../sflphone-client-gnome/src/config/accountwindow.c:142 +msgid "_Enable this account" +msgstr "Activer ce compte" -#: ../sflphone-gtk/src/config/accountwindow.c:151 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:156 msgid "_Protocol" msgstr "_Protocole" -#: ../sflphone-gtk/src/config/accountwindow.c:169 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:174 msgid "Unknown" msgstr "Inconnu" -#: ../sflphone-gtk/src/config/accountwindow.c:209 -msgid "_Voicemail box #" -msgstr "_Boite vocale #" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:265 +#: ../../sflphone-client-gnome/src/config/configwindow.c:732 +msgid "General" +msgstr "Général" -#: ../sflphone-gtk/src/config/addressbook-config.c:105 -msgid "Search Parameters" -msgstr "Paramètres de recherche" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:276 +msgid "_Use Evolution address books" +msgstr "Utiliser les carnets d'adresse d'Évolution" -#: ../sflphone-gtk/src/config/addressbook-config.c:116 -msgid "Maximum result number for a request: " -msgstr "Nombre maximum d'appels" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:283 +msgid "Download limit:" +msgstr "Limite de téléchargement:" -#: ../sflphone-gtk/src/config/addressbook-config.c:127 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:294 msgid "_Display contact photo if available" msgstr "Afficher la photo si disponible" -#: ../sflphone-gtk/src/config/addressbook-config.c:132 -msgid "Search for and display: " -msgstr "Chercher et afficher: " +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:301 +msgid "Fields" +msgstr "Champs" -#: ../sflphone-gtk/src/config/addressbook-config.c:135 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:311 +msgid "Use the following fields from Evolution's address books:" +msgstr "Utiliser les champs suivants des carnets d'adresse d'Évolution" + +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:316 msgid "_Business phone" msgstr "Tél du bureau" -#: ../sflphone-gtk/src/config/addressbook-config.c:140 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:321 msgid "_Home phone" msgstr "Tél du domicile" -#: ../sflphone-gtk/src/config/addressbook-config.c:145 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:326 msgid "_Mobile phone" msgstr "Tél portable" -#: ../sflphone-gtk/src/config/audioconf.c:154 -#, c-format -msgid "audio device index for output = %d\n" -msgstr "index du device audio de sortie = %d\n" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:333 +msgid "Address Books" +msgstr "Carnets d'adresse" -#: ../sflphone-gtk/src/config/audioconf.c:562 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:343 +msgid "Select which Evolution address books to use:" +msgstr "Sélectionner quels carnets d'adresse d'Évolution utiliser:" + +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:377 +#: ../../sflphone-client-gnome/src/config/audioconf.c:574 msgid "Name" msgstr "Nom" -#: ../sflphone-gtk/src/config/audioconf.c:567 +#: ../../sflphone-client-gnome/src/config/audioconf.c:155 +#, c-format +msgid "audio device index for output = %d" +msgstr "index du device audio de sortie = %d" + +#: ../../sflphone-client-gnome/src/config/audioconf.c:579 msgid "Frequency" msgstr "Fréquence" -#: ../sflphone-gtk/src/config/audioconf.c:572 +#: ../../sflphone-client-gnome/src/config/audioconf.c:584 msgid "Bitrate" msgstr "Bitrate" -#: ../sflphone-gtk/src/config/audioconf.c:577 +#: ../../sflphone-client-gnome/src/config/audioconf.c:589 msgid "Bandwidth" msgstr "Bande passante" -#: ../sflphone-gtk/src/config/audioconf.c:637 +#: ../../sflphone-client-gnome/src/config/audioconf.c:652 msgid "Pulseaudio" msgstr "" -#: ../sflphone-gtk/src/config/audioconf.c:640 +#: ../../sflphone-client-gnome/src/config/audioconf.c:655 msgid "ALSA" msgstr "" -#: ../sflphone-gtk/src/config/audioconf.c:666 +#: ../../sflphone-client-gnome/src/config/audioconf.c:681 msgid "ALSA plugin" msgstr "Greffon ALSA" -#: ../sflphone-gtk/src/config/audioconf.c:688 +#: ../../sflphone-client-gnome/src/config/audioconf.c:703 msgid "Output" msgstr "Sortie" -#: ../sflphone-gtk/src/config/audioconf.c:710 +#: ../../sflphone-client-gnome/src/config/audioconf.c:725 msgid "Input" msgstr "Entrée" -#: ../sflphone-gtk/src/config/audioconf.c:743 +#: ../../sflphone-client-gnome/src/config/audioconf.c:758 msgid "_Enable ringtones" msgstr "_Activer les sonneries" -#: ../sflphone-gtk/src/config/audioconf.c:748 +#: ../../sflphone-client-gnome/src/config/audioconf.c:764 msgid "Choose a ringtone" msgstr "Sélectionner une sonnerie" -#: ../sflphone-gtk/src/config/audioconf.c:753 +#: ../../sflphone-client-gnome/src/config/audioconf.c:769 msgid "Audio Files" msgstr "Fichier Audio" -#: ../sflphone-gtk/src/config/audioconf.c:770 -msgid "_Activate silence detection" -msgstr "Activer la détection de silence" +#: ../../sflphone-client-gnome/src/config/audioconf.c:788 +msgid "_Voice Activity Detection" +msgstr "Détection de l'activité de la voix" + +#: ../../sflphone-client-gnome/src/config/audioconf.c:798 +msgid "_Noise Reduction (Narrow-Band Companding)" +msgstr "Réduction du bruit (Compresseur extenseur LBR)" -#: ../sflphone-gtk/src/config/audioconf.c:798 +#: ../../sflphone-client-gnome/src/config/audioconf.c:826 msgid "Sound Manager" msgstr "Interface Audio" -#: ../sflphone-gtk/src/config/audioconf.c:805 +#: ../../sflphone-client-gnome/src/config/audioconf.c:833 msgid "ALSA configuration" msgstr "Configuration ALSA" -#: ../sflphone-gtk/src/config/audioconf.c:815 +#: ../../sflphone-client-gnome/src/config/audioconf.c:850 msgid "Codecs" msgstr "" -#: ../sflphone-gtk/src/config/audioconf.c:823 -msgid "Noise reduction" -msgstr "Réduction du bruit" - -#: ../sflphone-gtk/src/config/audioconf.c:830 +#: ../../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Ringtones" -msgstr "_Activer les sonneries" +msgstr "Sonneries" -#: ../sflphone-gtk/src/config/configwindow.c:385 +#: ../../sflphone-client-gnome/src/config/configwindow.c:402 msgid "Protocol" msgstr "Protocole" -#: ../sflphone-gtk/src/config/configwindow.c:392 +#: ../../sflphone-client-gnome/src/config/configwindow.c:409 msgid "Status" msgstr "Statut" -#: ../sflphone-gtk/src/config/configwindow.c:495 +#: ../../sflphone-client-gnome/src/config/configwindow.c:512 msgid "Stun parameters will apply to each SIP account created." msgstr "Les paramètres STUN sont appliqués à tous les comptes SIP créés" -#: ../sflphone-gtk/src/config/configwindow.c:503 +#: ../../sflphone-client-gnome/src/config/configwindow.c:520 msgid "Enable it if you are behind a firewall" msgstr "À activer si vous êtes derrière un pare-feu, puis redémarrez SFLphone" -#: ../sflphone-gtk/src/config/configwindow.c:511 +#: ../../sflphone-client-gnome/src/config/configwindow.c:528 msgid "Format: name.server:port" msgstr "Format: nom.serveur:port" -#: ../sflphone-gtk/src/config/configwindow.c:561 -msgid "Desktop Notification" -msgstr "Notifications du bureau" +#: ../../sflphone-client-gnome/src/config/configwindow.c:579 +msgid "Desktop Notifications" +msgstr "Notifications de Bureau" -#: ../sflphone-gtk/src/config/configwindow.c:569 -msgid "_Enable" -msgstr "_Activer" +#: ../../sflphone-client-gnome/src/config/configwindow.c:588 +msgid "_Enable notifications" +msgstr "_Activer les notifications" -#: ../sflphone-gtk/src/config/configwindow.c:574 -msgid "_Notify voice mails" -msgstr "_Notifier les messages vocaux" +#: ../../sflphone-client-gnome/src/config/configwindow.c:594 +msgid "Enable voicemail _notifications" +msgstr "Activer les notifications de boîte vocale" -#: ../sflphone-gtk/src/config/configwindow.c:580 +#: ../../sflphone-client-gnome/src/config/configwindow.c:605 msgid "System Tray Icon" msgstr "Icône dans la barre des tâches" -#: ../sflphone-gtk/src/config/configwindow.c:588 +#: ../../sflphone-client-gnome/src/config/configwindow.c:613 msgid "_Popup main window on incoming call" msgstr "_Faire apparaître la fenêtre principale lors d'appel entrant" -#: ../sflphone-gtk/src/config/configwindow.c:593 +#: ../../sflphone-client-gnome/src/config/configwindow.c:618 msgid "Ne_ver popup main window" msgstr "Ne _jamais afficher la fenêtre principale" -#: ../sflphone-gtk/src/config/configwindow.c:597 -msgid "_Start hidden" -msgstr "_Démarrer caché" +#: ../../sflphone-client-gnome/src/config/configwindow.c:622 +msgid "Hide SFLphone window on _startup" +msgstr "Cacher la fenêtre de SFLphone au démarrage" -#: ../sflphone-gtk/src/config/configwindow.c:603 +#: ../../sflphone-client-gnome/src/config/configwindow.c:628 msgid "Calls History" msgstr "Historique des appels" -#: ../sflphone-gtk/src/config/configwindow.c:611 -msgid "_Maximum number of calls" -msgstr "N_ombre maximum d'appels" +#: ../../sflphone-client-gnome/src/config/configwindow.c:636 +msgid "_History size limit" +msgstr "_Taille limite de l'historique" -#: ../sflphone-gtk/src/config/configwindow.c:627 +#: ../../sflphone-client-gnome/src/config/configwindow.c:653 msgid "PulseAudio sound server" msgstr "Serveur de son PulseAudio" -#: ../sflphone-gtk/src/config/configwindow.c:635 -msgid "_Control running applications volume" -msgstr "_Autoriser à modifier le volume des autres applications" +#: ../../sflphone-client-gnome/src/config/configwindow.c:661 +msgid "Mute other applications during a _call" +msgstr "Éteindre le son des autres applications lors d'un appel" -#: ../sflphone-gtk/src/config/configwindow.c:648 +#: ../../sflphone-client-gnome/src/config/configwindow.c:674 msgid "SIP Port" msgstr "Port SIP" -#: ../sflphone-gtk/src/config/configwindow.c:661 +#: ../../sflphone-client-gnome/src/config/configwindow.c:687 msgid "Port:" msgstr "" -#: ../sflphone-gtk/src/config/configwindow.c:706 -msgid "General" -msgstr "Général" - -#: ../sflphone-gtk/src/config/configwindow.c:717 -msgid "_Destination folder" -msgstr "_Dossier de destination" +#: ../../sflphone-client-gnome/src/config/configwindow.c:742 +msgid "_Recordings folder" +msgstr "Dossier pour les enregistrements" -#: ../sflphone-gtk/src/config/configwindow.c:723 +#: ../../sflphone-client-gnome/src/config/configwindow.c:748 msgid "Select a folder" msgstr "Choisissez un dossier" -#: ../sflphone-gtk/src/config/configwindow.c:748 +#: ../../sflphone-client-gnome/src/config/configwindow.c:773 msgid "Preferences" msgstr "Préférences" -#: ../sflphone-gtk/src/config/configwindow.c:768 +#: ../../sflphone-client-gnome/src/config/configwindow.c:793 msgid "General Settings" msgstr "Préférences" -#: ../sflphone-gtk/src/config/configwindow.c:773 +#: ../../sflphone-client-gnome/src/config/configwindow.c:798 msgid "Audio Settings" msgstr "Paramètres Audio" -#: ../sflphone-gtk/src/config/configwindow.c:778 -msgid "Record" -msgstr "Enregistrement" +#: ../../sflphone-client-gnome/src/config/configwindow.c:803 +msgid "Recordings" +msgstr "Enregistrements" -#: ../sflphone-gtk/src/config/configwindow.c:783 +#: ../../sflphone-client-gnome/src/config/configwindow.c:808 msgid "Address Book" msgstr "Carnet d'adresse" -#: ../sflphone-gtk/src/config/configwindow.c:788 +#: ../../sflphone-client-gnome/src/config/configwindow.c:813 msgid "Hooks" msgstr "Ancrage" -#: ../sflphone-gtk/src/config/configwindow.c:814 +#: ../../sflphone-client-gnome/src/config/configwindow.c:840 msgid "Accounts" msgstr "Comptes" -#: ../sflphone-gtk/src/config/configwindow.c:826 -msgid "Accounts previously setup" -msgstr "Liste des comptes existants" +#: ../../sflphone-client-gnome/src/config/configwindow.c:852 +msgid "Configured Accounts" +msgstr "Comptes Configurés" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:130 +msgid "URL Passing" +msgstr "Passage d'URL" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:140 +#, c-format +msgid "" +"SFLphone can run custom commands if incoming calls come with an URL " +"attached.\n" +"In this case, %s will be replaced with the passed URL." +msgstr "" +"SFLphone peut exécuter des commandes lors d'appels entrants qui ont un URL " +"associé.\n" +"Dans ce cas, %s sera remplacé par l'URL en question." + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:143 +msgid "Trigger on specific _SIP header" +msgstr "Déclencher sur un entête _SIP spécifique" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:155 +msgid "Trigger on _IAX2 URL" +msgstr "Déclencher en _IAX2" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:160 +msgid "_Command to run: " +msgstr "Commande à exécuter: " + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:168 +msgid "Phone Number Rewriting" +msgstr "Rééecriture du numéro" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:178 +msgid "_Prefix dialed numbers with:" +msgstr "Préfixer les numéros composés par:" + +#: ../../sflphone-client-gnome/src/contacts/history.c:83 +#: ../../sflphone-client-gnome/src/contacts/searchbar.c:123 +msgid "Search history" +msgstr "Rechercher" + +#: ../../sflphone-client-gnome/src/contacts/history.c:83 +#: ../../sflphone-client-gnome/src/contacts/searchbar.c:110 +msgid "Search contact" +msgstr "Rechercher un contact" + +#~ msgid "Registered to %s (%s)" +#~ msgstr "Connecté avec %s (%s)" + +#~ msgid "%s account- %s %s" +#~ msgstr "compte %s- %s %s" + +#~ msgid "Books" +#~ msgstr "Carnets d'adresse" + +#~ msgid "_Enable" +#~ msgstr "_Activer" + +#~ msgid "_Notify voice mails" +#~ msgstr "_Notifier les messages vocaux" -#: ../sflphone-gtk/src/config/hooks-config.c:92 -msgid "URL argument" -msgstr "Argument URL" +#~ msgid "_Start hidden" +#~ msgstr "_Démarrer caché" -#: ../sflphone-gtk/src/config/hooks-config.c:102 -msgid "_SIP protocol" -msgstr "_Protocole SIP" +#~ msgid "_Maximum number of calls" +#~ msgstr "N_ombre maximum d'appels" -#: ../sflphone-gtk/src/config/hooks-config.c:107 -msgid "_IAX2 protocol" -msgstr "_Protocole IAX2" +#~ msgid "_Control running applications volume" +#~ msgstr "_Autoriser à modifier le volume des autres applications" -#: ../sflphone-gtk/src/config/hooks-config.c:113 -msgid "_SIP Header: " -msgstr "En-tête SIP: " +#~ msgid "Account previously setup" +#~ msgstr "Liste des comptes existants" -#: ../sflphone-gtk/src/config/hooks-config.c:120 -msgid "_Command: " -msgstr "Commande" +#~ msgid "URL argument" +#~ msgstr "Argument URL" -#, fuzzy -#~ msgid "SFLphone 0.9.4" -#~ msgstr "SFLphone 0.9.4" +#~ msgid "_SIP protocol" +#~ msgstr "_Protocole SIP" -#~ msgid "Setup Accounts" -#~ msgstr "Configurer les comptes" +#~ msgid "_SIP Header: " +#~ msgstr "En-tête SIP: " -#~ msgid "_STUN Server" -#~ msgstr "S_erveur STUN" +#~ msgid "_IAX2 protocol" +#~ msgstr "_Protocole IAX2" -#~ msgid "Apply" -#~ msgstr "Appliquer" +#~ msgid "_Add phone number prefix" +#~ msgstr "Ajouter un préfixe au numéro" -#~ msgid "History empty" -#~ msgstr "L'historique est vide" +#~ msgid "_Prepend: " +#~ msgstr "Préfixe: " diff --git a/sflphone-common/po/ru.po b/sflphone-common/po/ru.po index 43f24e97e383cffcbcc8ca5302e8ef0d908da92b..32edc9fd5bffff08ed0407437e881a9ac5195f87 100644 --- a/sflphone-common/po/ru.po +++ b/sflphone-common/po/ru.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-02 11:15-0400\n" +"POT-Creation-Date: 2009-05-21 10:45-0400\n" "PO-Revision-Date: 2009-01-08 15:19 GMT-5\n" "Last-Translator: HUSSEIN ABDALLAH <hussein.abdallah@savoirfairelinux.com>\n" "Language-Team: Savoir-Faire Linux Inc <sflphoneteam@savoirfairelinux.com>\n" @@ -16,63 +16,70 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../sflphone-gtk/src/accountlist.c:158 +#: ../../sflphone-client-gnome/src/accountlist.c:169 msgid "Registered" msgstr "Зарегистрирован" -#: ../sflphone-gtk/src/accountlist.c:161 +#: ../../sflphone-client-gnome/src/accountlist.c:172 msgid "Not Registered" msgstr "Не зарегистрирован" -#: ../sflphone-gtk/src/accountlist.c:164 +#: ../../sflphone-client-gnome/src/accountlist.c:175 msgid "Trying..." msgstr "Пробует подключиться..." -#: ../sflphone-gtk/src/accountlist.c:167 ../sflphone-gtk/src/sflnotify.c:171 -#: ../sflphone-gtk/src/sflnotify.c:212 +#: ../../sflphone-client-gnome/src/accountlist.c:178 +#: ../../sflphone-client-gnome/src/sflnotify.c:176 +#: ../../sflphone-client-gnome/src/sflnotify.c:217 msgid "Error" msgstr "Ошибка" -#: ../sflphone-gtk/src/accountlist.c:170 +#: ../../sflphone-client-gnome/src/accountlist.c:181 msgid "Bad authentification" msgstr "Неправильная идентификация" -#: ../sflphone-gtk/src/accountlist.c:173 +#: ../../sflphone-client-gnome/src/accountlist.c:184 msgid "Network unreachable" msgstr "Сеть недоступна" -#: ../sflphone-gtk/src/accountlist.c:176 +#: ../../sflphone-client-gnome/src/accountlist.c:187 msgid "Host unreachable" msgstr "Хост недоступен" -#: ../sflphone-gtk/src/accountlist.c:179 +#: ../../sflphone-client-gnome/src/accountlist.c:190 msgid "Stun configuration error" msgstr "Ошибка настройки Stun" -#: ../sflphone-gtk/src/accountlist.c:182 +#: ../../sflphone-client-gnome/src/accountlist.c:193 msgid "Stun server invalid" msgstr "Недействительный Stun-сервер" -#: ../sflphone-gtk/src/accountlist.c:185 +#: ../../sflphone-client-gnome/src/accountlist.c:196 msgid "Invalid" msgstr "Недействительный" -#: ../sflphone-gtk/src/actions.c:55 ../sflphone-gtk/src/sflnotify.c:103 +#: ../../sflphone-client-gnome/src/actions.c:55 +#: ../../sflphone-client-gnome/src/sflnotify.c:108 #, c-format msgid "%d voice mails" msgstr "%d речевые сообщения" -#: ../sflphone-gtk/src/actions.c:57 +#: ../../sflphone-client-gnome/src/actions.c:57 #, c-format msgid "%d voice mail" msgstr "%d речевое сообщение" -#: ../sflphone-gtk/src/actions.c:81 +#: ../../sflphone-client-gnome/src/actions.c:81 #, c-format -msgid "%s account- %s" -msgstr "%s аккаунт- %s" +msgid "Using %s (%s)" +msgstr "" -#: ../sflphone-gtk/src/actions.c:225 +#: ../../sflphone-client-gnome/src/actions.c:87 +#, fuzzy +msgid "No registered account" +msgstr "У вас нет зарегистрированных аккаунтов" + +#: ../../sflphone-client-gnome/src/actions.c:229 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -80,12 +87,17 @@ msgstr "" "Невозможно подключиться к SFLphone-серверу.\n" "Проверьте если демон работает." -#: ../sflphone-gtk/src/actions.c:764 -#, fuzzy, c-format -msgid "%s account- %s %s" -msgstr "%s аккаунт- %s" +#: ../../sflphone-client-gnome/src/actions.c:787 +#, c-format +msgid "IP call - %s" +msgstr "" + +#: ../../sflphone-client-gnome/src/actions.c:790 +#, c-format +msgid "Using %s (%s) - Codec: %s" +msgstr "" -#: ../sflphone-gtk/src/actions.c:861 +#: ../../sflphone-client-gnome/src/actions.c:880 #, c-format msgid "" "<b>Error: No audio codecs found.\n" @@ -98,7 +110,7 @@ msgstr "" "</b> Звуковые кодеки SFL должны находиться в <i>%s</i> или в <b>.sflphone</" "b> каталоге в вашем домашнем каталоге( <i>%s</i> )" -#: ../sflphone-gtk/src/assistant.c:31 +#: ../../sflphone-client-gnome/src/assistant.c:35 #, fuzzy, c-format msgid "" "This assistant is now finished.\n" @@ -108,142 +120,134 @@ msgid "" "Alias : %s\n" "Server : %s\n" "Username : %s\n" -"Password : %s" msgstr "" "Мастер закончил настройку.\n" "\n" " Вы можете в любое время проверить статус регистрации или изменить " "параметры ваших аккаунтов в меню Правка / Аккаунты." -#: ../sflphone-gtk/src/assistant.c:154 +#: ../../sflphone-client-gnome/src/assistant.c:160 msgid "SFLphone account configuration wizard" msgstr "Мастер настройки SFLphone" -#: ../sflphone-gtk/src/assistant.c:180 +#: ../../sflphone-client-gnome/src/assistant.c:186 msgid "Welcome to SFLphone!" msgstr "Добро пожаловать в SFLphone!" -#: ../sflphone-gtk/src/assistant.c:181 +#: ../../sflphone-client-gnome/src/assistant.c:187 msgid "This installation wizard will help you configure an account." msgstr "Этот мастер установки поможет вам настроить ваш аккаунт." -#: ../sflphone-gtk/src/assistant.c:195 +#: ../../sflphone-client-gnome/src/assistant.c:201 msgid "VoIP Protocols" msgstr "VoIP-протоколы" -#: ../sflphone-gtk/src/assistant.c:195 +#: ../../sflphone-client-gnome/src/assistant.c:201 msgid "Select an account type:" msgstr "Выберите тип аккаунта:" -#: ../sflphone-gtk/src/assistant.c:213 +#: ../../sflphone-client-gnome/src/assistant.c:219 msgid "Account" msgstr "Аккаунты" -#: ../sflphone-gtk/src/assistant.c:213 +#: ../../sflphone-client-gnome/src/assistant.c:219 msgid "Please select one of the following option:" msgstr "Введите пожалуйста следующие данные" -#: ../sflphone-gtk/src/assistant.c:215 +#: ../../sflphone-client-gnome/src/assistant.c:221 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "Создать бесплатный SIP/IAX2-аккаунт на sflphone.org" -#: ../sflphone-gtk/src/assistant.c:217 +#: ../../sflphone-client-gnome/src/assistant.c:223 msgid "Register an existing SIP or IAX2 account" msgstr "Зарегистрировать существующий SIP или IAX2 аккаунт" -#: ../sflphone-gtk/src/assistant.c:230 +#: ../../sflphone-client-gnome/src/assistant.c:236 msgid "SIP account configuration" msgstr "Настройка SIP-аккаунта" -#: ../sflphone-gtk/src/assistant.c:230 ../sflphone-gtk/src/assistant.c:305 +#: ../../sflphone-client-gnome/src/assistant.c:236 +#: ../../sflphone-client-gnome/src/assistant.c:332 msgid "Please fill the following information:" msgstr "Введите пожалуйста следующие данные" -#: ../sflphone-gtk/src/assistant.c:238 ../sflphone-gtk/src/assistant.c:313 -#: ../sflphone-gtk/src/config/accountwindow.c:143 +#: ../../sflphone-client-gnome/src/assistant.c:244 +#: ../../sflphone-client-gnome/src/assistant.c:340 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:148 msgid "_Alias" msgstr "_Псевдоним" -#: ../sflphone-gtk/src/assistant.c:246 ../sflphone-gtk/src/assistant.c:321 -#: ../sflphone-gtk/src/config/accountwindow.c:179 +#: ../../sflphone-client-gnome/src/assistant.c:252 +#: ../../sflphone-client-gnome/src/assistant.c:348 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:184 msgid "_Host name" msgstr "Имя или IP-адрес _сервера" -#: ../sflphone-gtk/src/assistant.c:254 ../sflphone-gtk/src/assistant.c:329 -#: ../sflphone-gtk/src/config/accountwindow.c:187 +#: ../../sflphone-client-gnome/src/assistant.c:260 +#: ../../sflphone-client-gnome/src/assistant.c:356 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:192 msgid "_User name" msgstr "Имя или _номер пользователя" -#: ../sflphone-gtk/src/assistant.c:264 ../sflphone-gtk/src/assistant.c:339 -#: ../sflphone-gtk/src/config/accountwindow.c:198 +#: ../../sflphone-client-gnome/src/assistant.c:276 +#: ../../sflphone-client-gnome/src/assistant.c:371 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:207 msgid "_Password" msgstr "Па_роль" -#: ../sflphone-gtk/src/assistant.c:282 +#: ../../sflphone-client-gnome/src/assistant.c:294 +#: ../../sflphone-client-gnome/src/assistant.c:387 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:223 +#, fuzzy +msgid "_Voicemail number" +msgstr "Номер _автоответчика #" + +#: ../../sflphone-client-gnome/src/assistant.c:309 msgid "Optional Email Address " msgstr "Электронный адрес (необязательный) " -#: ../sflphone-gtk/src/assistant.c:282 +#: ../../sflphone-client-gnome/src/assistant.c:309 msgid "This email address will be use to send your voicemail messages" msgstr "Этот электронный адрес будет использоваться для речевых сообщений" -#: ../sflphone-gtk/src/assistant.c:290 +#: ../../sflphone-client-gnome/src/assistant.c:317 msgid "_Email" msgstr "_Включить" -#: ../sflphone-gtk/src/assistant.c:305 +#: ../../sflphone-client-gnome/src/assistant.c:332 msgid "IAX2 account configuration" msgstr "Настройка IAX2-аккаунта" -#: ../sflphone-gtk/src/assistant.c:360 -#: ../sflphone-gtk/src/config/configwindow.c:837 +#: ../../sflphone-client-gnome/src/assistant.c:405 +#: ../../sflphone-client-gnome/src/config/configwindow.c:863 msgid "Network Address Translation" msgstr "Network Address Translation" -#: ../sflphone-gtk/src/assistant.c:360 +#: ../../sflphone-client-gnome/src/assistant.c:405 msgid "You should probably enable this if you are behind a firewall." msgstr "Вы наверное должны это включить если вы находитесь за сетевым экраном." -#: ../sflphone-gtk/src/assistant.c:369 -#: ../sflphone-gtk/src/config/configwindow.c:499 +#: ../../sflphone-client-gnome/src/assistant.c:414 +#: ../../sflphone-client-gnome/src/config/configwindow.c:516 msgid "E_nable STUN" msgstr "Включить STUN" -#: ../sflphone-gtk/src/assistant.c:376 +#: ../../sflphone-client-gnome/src/assistant.c:421 msgid "_STUN server" msgstr "_STUN-сервер" -#: ../sflphone-gtk/src/assistant.c:390 +#: ../../sflphone-client-gnome/src/assistant.c:435 msgid "Account Registration" msgstr "Регистрация аккаунта" -#: ../sflphone-gtk/src/assistant.c:390 +#: ../../sflphone-client-gnome/src/assistant.c:435 msgid "Congratulations!" msgstr "Поздравляем!" -#: ../sflphone-gtk/src/context-menu.c:296 ../sflphone-gtk/src/menus.c:308 -#: ../sflphone-gtk/src/menus.c:791 -msgid "_Pick up" -msgstr "_Взять трубку" - -#: ../sflphone-gtk/src/context-menu.c:308 ../sflphone-gtk/src/menus.c:318 -#: ../sflphone-gtk/src/menus.c:803 -msgid "_Hang up" -msgstr "_Положить трубку" - -#: ../sflphone-gtk/src/context-menu.c:320 ../sflphone-gtk/src/menus.c:328 -#: ../sflphone-gtk/src/menus.c:815 -msgid "On _Hold" -msgstr "_Удержать звонок" - -#: ../sflphone-gtk/src/context-menu.c:332 ../sflphone-gtk/src/menus.c:340 -#: ../sflphone-gtk/src/menus.c:827 -msgid "_Record" -msgstr "Записать" - -#: ../sflphone-gtk/src/errors.c:28 +#: ../../sflphone-client-gnome/src/errors.c:28 +#, fuzzy msgid "" -"<b>ALSA notification</b>\n" +"ALSA notification\n" "\n" "Error while opening playback device" msgstr "" @@ -251,9 +255,10 @@ msgstr "" "\n" "Ошибка во время активирования устройства проигрывания" -#: ../sflphone-gtk/src/errors.c:31 +#: ../../sflphone-client-gnome/src/errors.c:31 +#, fuzzy msgid "" -"<b>ALSA notification</b>\n" +"ALSA notification\n" "\n" "Error while opening capture device" msgstr "" @@ -261,9 +266,10 @@ msgstr "" "\n" "Ошибка во время активирования устройства входа" -#: ../sflphone-gtk/src/errors.c:34 +#: ../../sflphone-client-gnome/src/errors.c:34 +#, fuzzy msgid "" -"<b>Pulseaudio notification</b>\n" +"Pulseaudio notification\n" "\n" "Pulseaudio is not running" msgstr "" @@ -271,473 +277,616 @@ msgstr "" "\n" "Pulseaudio не работает" -#: ../sflphone-gtk/src/mainwindow.c:70 +#: ../../sflphone-client-gnome/src/mainwindow.c:70 msgid "There is one call in progress." msgstr "Звонок ещё не окончен" -#: ../sflphone-gtk/src/mainwindow.c:74 +#: ../../sflphone-client-gnome/src/mainwindow.c:74 msgid "There are calls in progress." msgstr "Несколько звонков ещё не окончены" -#: ../sflphone-gtk/src/mainwindow.c:83 +#: ../../sflphone-client-gnome/src/mainwindow.c:83 msgid "Do you still want to quit?" msgstr "Вы уверенны что хотите выйти?" -#: ../sflphone-gtk/src/menus.c:131 +#: ../../sflphone-client-gnome/src/mainwindow.c:296 +#, fuzzy +msgid "SFLphone Error" +msgstr "SFLphone 0.9.2" + +#: ../../sflphone-client-gnome/src/menus.c:134 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone - SIP и IAX2-совместимый VoIP-клиент " -#: ../sflphone-gtk/src/menus.c:134 +#: ../../sflphone-client-gnome/src/menus.c:137 msgid "About SFLphone" msgstr "О SFLphone" -#: ../sflphone-gtk/src/menus.c:157 +#: ../../sflphone-client-gnome/src/menus.c:161 msgid "_Help" msgstr "_Помощь" -#: ../sflphone-gtk/src/menus.c:296 ../sflphone-gtk/src/menus.c:949 +#: ../../sflphone-client-gnome/src/menus.c:300 +#: ../../sflphone-client-gnome/src/menus.c:971 msgid "_New call" msgstr "_Новый звонок" -#: ../sflphone-gtk/src/menus.c:354 -msgid "_Account Assistant" -msgstr "_Мастер настройки аккаунтов" +#: ../../sflphone-client-gnome/src/menus.c:312 +#: ../../sflphone-client-gnome/src/menus.c:803 +msgid "_Pick up" +msgstr "_Взять трубку" + +#: ../../sflphone-client-gnome/src/menus.c:322 +#: ../../sflphone-client-gnome/src/menus.c:815 +msgid "_Hang up" +msgstr "_Положить трубку" -#: ../sflphone-gtk/src/menus.c:384 +#: ../../sflphone-client-gnome/src/menus.c:332 +#: ../../sflphone-client-gnome/src/menus.c:827 +msgid "On _Hold" +msgstr "_Удержать звонок" + +#: ../../sflphone-client-gnome/src/menus.c:344 +#: ../../sflphone-client-gnome/src/menus.c:839 +msgid "_Record" +msgstr "Записать" + +#: ../../sflphone-client-gnome/src/menus.c:358 +#, fuzzy +msgid "_Account creation wizard" +msgstr "Мастер настройки SFLphone" + +#: ../../sflphone-client-gnome/src/menus.c:388 msgid "_Call" msgstr "_Звонок" -#: ../sflphone-gtk/src/menus.c:557 +#: ../../sflphone-client-gnome/src/menus.c:561 msgid "_Clear history" msgstr "_Стереть журнал" -#: ../sflphone-gtk/src/menus.c:569 +#: ../../sflphone-client-gnome/src/menus.c:573 msgid "_Accounts" msgstr "_Аккаунты" -#: ../sflphone-gtk/src/menus.c:584 +#: ../../sflphone-client-gnome/src/menus.c:588 msgid "_Edit" msgstr "_Правка" -#: ../sflphone-gtk/src/menus.c:644 +#: ../../sflphone-client-gnome/src/menus.c:649 msgid "_Dialpad" msgstr "_Клавиатура" -#: ../sflphone-gtk/src/menus.c:656 +#: ../../sflphone-client-gnome/src/menus.c:661 msgid "_Volume controls" msgstr "_Настройки громкости" -#: ../sflphone-gtk/src/menus.c:665 -msgid "_Search contact" -msgstr "_Искать в журнале" - -#: ../sflphone-gtk/src/menus.c:673 +#: ../../sflphone-client-gnome/src/menus.c:679 msgid "_View" msgstr "_Вид" -#: ../sflphone-gtk/src/menus.c:885 +#: ../../sflphone-client-gnome/src/menus.c:899 msgid "_Call back" msgstr "_Перезвонить" -#: ../sflphone-gtk/src/sflnotify.c:34 ../sflphone-gtk/src/sflnotify.c:100 +#: ../../sflphone-client-gnome/src/menus.c:1082 +#, fuzzy +msgid "Edit phone" +msgstr "_Мобильный телефон" + +#: ../../sflphone-client-gnome/src/menus.c:1093 +msgid "Edit the phone number before making a call" +msgstr "" + +#: ../../sflphone-client-gnome/src/sflnotify.c:38 +#: ../../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%s account: %s" msgstr "%s аккаунт: %s" -#: ../sflphone-gtk/src/sflnotify.c:37 +#: ../../sflphone-client-gnome/src/sflnotify.c:42 #, c-format msgid "<i>From:</i> %s" msgstr "<i>От:</i> %s" -#: ../sflphone-gtk/src/sflnotify.c:52 +#: ../../sflphone-client-gnome/src/sflnotify.c:57 msgid "Accept" msgstr "Согласиться" -#: ../sflphone-gtk/src/sflnotify.c:53 +#: ../../sflphone-client-gnome/src/sflnotify.c:58 msgid "Refuse" msgstr "Отказаться" -#: ../sflphone-gtk/src/sflnotify.c:54 ../sflphone-gtk/src/sflnotify.c:117 -#: ../sflphone-gtk/src/sflnotify.c:154 +#: ../../sflphone-client-gnome/src/sflnotify.c:59 +#: ../../sflphone-client-gnome/src/sflnotify.c:122 +#: ../../sflphone-client-gnome/src/sflnotify.c:159 msgid "Ignore" msgstr "Пропустить" -#: ../sflphone-gtk/src/sflnotify.c:136 +#: ../../sflphone-client-gnome/src/sflnotify.c:141 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "Звонок с аккаунтом %s <i>%s</i>" -#: ../sflphone-gtk/src/sflnotify.c:140 +#: ../../sflphone-client-gnome/src/sflnotify.c:145 msgid "Current account" msgstr "Нынешний аккаунт" -#: ../sflphone-gtk/src/sflnotify.c:169 +#: ../../sflphone-client-gnome/src/sflnotify.c:174 msgid "You haven't setup any accounts" msgstr "Вы не настроили ни одного аккаунта" -#: ../sflphone-gtk/src/sflnotify.c:209 +#: ../../sflphone-client-gnome/src/sflnotify.c:214 msgid "You have no registered accounts" msgstr "У вас нет зарегистрированных аккаунтов" -#: ../sflphone-gtk/src/sliders.c:161 +#: ../../sflphone-client-gnome/src/sliders.c:161 msgid "Speakers volume" msgstr "Громкость" -#: ../sflphone-gtk/src/sliders.c:163 +#: ../../sflphone-client-gnome/src/sliders.c:163 msgid "Mic volume" msgstr "Громкость микрофона" -#: ../sflphone-gtk/src/statusicon.c:91 +#: ../../sflphone-client-gnome/src/statusicon.c:91 msgid "_Show main window" msgstr "_Показать главное окно" -#: ../sflphone-gtk/src/statusicon.c:124 -#, c-format -msgid "SFLphone - %i accounts registered" +#: ../../sflphone-client-gnome/src/statusicon.c:124 +#, fuzzy, c-format +msgid "SFLphone - %i accounts configured" msgstr "SFLphone - Зарегистрировано %i аккаунтов" -#: ../sflphone-gtk/src/timestamp.c:46 +#: ../../sflphone-client-gnome/src/timestamp.c:46 msgid "<small>Missed call</small>" msgstr "<small>Пропущенный звонок</small>" -#: ../sflphone-gtk/src/timestamp.c:64 +#: ../../sflphone-client-gnome/src/timestamp.c:64 #, c-format msgid "<small>Duration:</small> %s" msgstr "<small>Время:</small> %s" -#: ../sflphone-gtk/src/toolbar.c:49 +#: ../../sflphone-client-gnome/src/toolbar.c:50 #, c-format msgid "\"Voicemail\" <%s>" msgstr "\"Автоответчик\" <%s>" -#: ../sflphone-gtk/src/toolbar.c:175 ../sflphone-gtk/src/toolbar.c:177 +#: ../../sflphone-client-gnome/src/toolbar.c:176 +#: ../../sflphone-client-gnome/src/toolbar.c:178 msgid "Place a call" msgstr "Позвонить" -#: ../sflphone-gtk/src/toolbar.c:184 ../sflphone-gtk/src/toolbar.c:186 +#: ../../sflphone-client-gnome/src/toolbar.c:185 +#: ../../sflphone-client-gnome/src/toolbar.c:187 msgid "Pick up" msgstr "Взять трубку" -#: ../sflphone-gtk/src/toolbar.c:194 ../sflphone-gtk/src/toolbar.c:196 +#: ../../sflphone-client-gnome/src/toolbar.c:195 +#: ../../sflphone-client-gnome/src/toolbar.c:197 msgid "Hang up" msgstr "Положить трубку" -#: ../sflphone-gtk/src/toolbar.c:204 ../sflphone-gtk/src/toolbar.c:206 +#: ../../sflphone-client-gnome/src/toolbar.c:205 +#: ../../sflphone-client-gnome/src/toolbar.c:207 msgid "Off Hold" msgstr "Снова взять" -#: ../sflphone-gtk/src/toolbar.c:215 ../sflphone-gtk/src/toolbar.c:217 +#: ../../sflphone-client-gnome/src/toolbar.c:216 +#: ../../sflphone-client-gnome/src/toolbar.c:218 msgid "On Hold" msgstr "Удержать звонок" -#: ../sflphone-gtk/src/toolbar.c:228 ../sflphone-gtk/src/toolbar.c:230 +#: ../../sflphone-client-gnome/src/toolbar.c:229 +#: ../../sflphone-client-gnome/src/toolbar.c:231 msgid "Transfer" msgstr "Переслать звонок на другой номер" -#: ../sflphone-gtk/src/toolbar.c:240 ../sflphone-gtk/src/toolbar.c:242 +#: ../../sflphone-client-gnome/src/toolbar.c:241 +#: ../../sflphone-client-gnome/src/toolbar.c:243 msgid "History" msgstr "Журнал" -#: ../sflphone-gtk/src/toolbar.c:251 ../sflphone-gtk/src/toolbar.c:253 +#: ../../sflphone-client-gnome/src/toolbar.c:252 +#: ../../sflphone-client-gnome/src/toolbar.c:254 msgid "Address book" msgstr "Адресная книга" -#: ../sflphone-gtk/src/toolbar.c:258 ../sflphone-gtk/src/toolbar.c:262 +#: ../../sflphone-client-gnome/src/toolbar.c:260 +#: ../../sflphone-client-gnome/src/toolbar.c:264 msgid "Voicemail" msgstr "Автоответчик" -#: ../sflphone-gtk/src/toolbar.c:270 +#: ../../sflphone-client-gnome/src/toolbar.c:272 msgid "Record a call" msgstr "Записать переговор" -#: ../sflphone-gtk/src/contacts/history.c:75 -#: ../sflphone-gtk/src/contacts/searchbar.c:39 -#: ../sflphone-gtk/src/contacts/searchbar.c:65 -msgid "Search" -msgstr "Поиск" - -#: ../sflphone-gtk/src/config/accountwindow.c:103 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:108 msgid "Account settings" msgstr "Настройки аккаунта" -#: ../sflphone-gtk/src/config/accountwindow.c:115 -msgid "Account parameters" +#: ../../sflphone-client-gnome/src/config/accountwindow.c:120 +#, fuzzy +msgid "Account Parameters" msgstr "Параметры аккаунта" -#: ../sflphone-gtk/src/config/accountwindow.c:137 -msgid "_Enabled" -msgstr "_Включен" +#: ../../sflphone-client-gnome/src/config/accountwindow.c:142 +msgid "_Enable this account" +msgstr "" -#: ../sflphone-gtk/src/config/accountwindow.c:151 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:156 msgid "_Protocol" msgstr "Пр_отокол" -#: ../sflphone-gtk/src/config/accountwindow.c:169 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:174 msgid "Unknown" msgstr "Неизвестный" -#: ../sflphone-gtk/src/config/accountwindow.c:209 -msgid "_Voicemail box #" -msgstr "Номер _автоответчика #" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:265 +#: ../../sflphone-client-gnome/src/config/configwindow.c:732 +msgid "General" +msgstr "Общие настройки" -#: ../sflphone-gtk/src/config/addressbook-config.c:105 -msgid "Search Parameters" -msgstr "Параметры аккаунта" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:276 +msgid "_Use Evolution address books" +msgstr "" -#: ../sflphone-gtk/src/config/addressbook-config.c:116 -msgid "Maximum result number for a request: " -msgstr "Максимальное количество звонков" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:283 +msgid "Download limit:" +msgstr "" -#: ../sflphone-gtk/src/config/addressbook-config.c:127 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:294 msgid "_Display contact photo if available" msgstr "_Показать фотографию контакта (если имеется):" -#: ../sflphone-gtk/src/config/addressbook-config.c:132 -msgid "Search for and display: " -msgstr "Найти и показать: " +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:301 +msgid "Fields" +msgstr "" + +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:311 +msgid "Use the following fields from Evolution's address books:" +msgstr "" -#: ../sflphone-gtk/src/config/addressbook-config.c:135 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:316 msgid "_Business phone" msgstr "_Рабочий телефон" -#: ../sflphone-gtk/src/config/addressbook-config.c:140 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:321 msgid "_Home phone" msgstr "_Домашний телефон" -#: ../sflphone-gtk/src/config/addressbook-config.c:145 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:326 msgid "_Mobile phone" msgstr "_Мобильный телефон" -#: ../sflphone-gtk/src/config/audioconf.c:154 -#, c-format -msgid "audio device index for output = %d\n" -msgstr "Индекс звукового устройства = %d\n" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:333 +#, fuzzy +msgid "Address Books" +msgstr "Адресная книга" -#: ../sflphone-gtk/src/config/audioconf.c:562 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:343 +msgid "Select which Evolution address books to use:" +msgstr "" + +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:377 +#: ../../sflphone-client-gnome/src/config/audioconf.c:574 msgid "Name" msgstr "Имя" -#: ../sflphone-gtk/src/config/audioconf.c:567 +#: ../../sflphone-client-gnome/src/config/audioconf.c:155 +#, fuzzy, c-format +msgid "audio device index for output = %d" +msgstr "Индекс звукового устройства = %d\n" + +#: ../../sflphone-client-gnome/src/config/audioconf.c:579 msgid "Frequency" msgstr "Частота" -#: ../sflphone-gtk/src/config/audioconf.c:572 +#: ../../sflphone-client-gnome/src/config/audioconf.c:584 msgid "Bitrate" msgstr "Битрейт" -#: ../sflphone-gtk/src/config/audioconf.c:577 +#: ../../sflphone-client-gnome/src/config/audioconf.c:589 msgid "Bandwidth" msgstr "Пропускная способность" -#: ../sflphone-gtk/src/config/audioconf.c:637 +#: ../../sflphone-client-gnome/src/config/audioconf.c:652 msgid "Pulseaudio" msgstr "Pulseaudio" -#: ../sflphone-gtk/src/config/audioconf.c:640 +#: ../../sflphone-client-gnome/src/config/audioconf.c:655 msgid "ALSA" msgstr "ALSA" -#: ../sflphone-gtk/src/config/audioconf.c:666 +#: ../../sflphone-client-gnome/src/config/audioconf.c:681 msgid "ALSA plugin" msgstr "ALSA-плагин" -#: ../sflphone-gtk/src/config/audioconf.c:688 +#: ../../sflphone-client-gnome/src/config/audioconf.c:703 msgid "Output" msgstr "Выход" -#: ../sflphone-gtk/src/config/audioconf.c:710 +#: ../../sflphone-client-gnome/src/config/audioconf.c:725 msgid "Input" msgstr "Вход" -#: ../sflphone-gtk/src/config/audioconf.c:743 +#: ../../sflphone-client-gnome/src/config/audioconf.c:758 msgid "_Enable ringtones" msgstr "Включить звонок" -#: ../sflphone-gtk/src/config/audioconf.c:748 +#: ../../sflphone-client-gnome/src/config/audioconf.c:764 msgid "Choose a ringtone" msgstr "Выберите звонок" -#: ../sflphone-gtk/src/config/audioconf.c:753 +#: ../../sflphone-client-gnome/src/config/audioconf.c:769 msgid "Audio Files" msgstr "Звуковые файлы" -#: ../sflphone-gtk/src/config/audioconf.c:770 -msgid "_Activate silence detection" +#: ../../sflphone-client-gnome/src/config/audioconf.c:788 +#, fuzzy +msgid "_Voice Activity Detection" msgstr "Включить детектор тишины" -#: ../sflphone-gtk/src/config/audioconf.c:798 +#: ../../sflphone-client-gnome/src/config/audioconf.c:798 +msgid "_Noise Reduction (Narrow-Band Companding)" +msgstr "" + +#: ../../sflphone-client-gnome/src/config/audioconf.c:826 msgid "Sound Manager" msgstr "Менеджер звука" -#: ../sflphone-gtk/src/config/audioconf.c:805 +#: ../../sflphone-client-gnome/src/config/audioconf.c:833 msgid "ALSA configuration" msgstr "Настройка ALSA" -#: ../sflphone-gtk/src/config/audioconf.c:815 +#: ../../sflphone-client-gnome/src/config/audioconf.c:850 msgid "Codecs" msgstr "Кодеки" -#: ../sflphone-gtk/src/config/audioconf.c:823 -msgid "Noise reduction" -msgstr "Уменьшение шума" - -#: ../sflphone-gtk/src/config/audioconf.c:830 +#: ../../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Ringtones" msgstr "Звонки" -#: ../sflphone-gtk/src/config/configwindow.c:385 +#: ../../sflphone-client-gnome/src/config/configwindow.c:402 msgid "Protocol" msgstr "Протокол" -#: ../sflphone-gtk/src/config/configwindow.c:392 +#: ../../sflphone-client-gnome/src/config/configwindow.c:409 msgid "Status" msgstr "Статус" -#: ../sflphone-gtk/src/config/configwindow.c:495 +#: ../../sflphone-client-gnome/src/config/configwindow.c:512 msgid "Stun parameters will apply to each SIP account created." msgstr "STUN-параметры будут эффективны для каждого созданного SIP-аккаунта" -#: ../sflphone-gtk/src/config/configwindow.c:503 +#: ../../sflphone-client-gnome/src/config/configwindow.c:520 msgid "Enable it if you are behind a firewall" msgstr "" "Включите это если вы находитесь за сетевым экраном и потом перезагрузите " "SFLphone" -#: ../sflphone-gtk/src/config/configwindow.c:511 +#: ../../sflphone-client-gnome/src/config/configwindow.c:528 msgid "Format: name.server:port" msgstr "Формат: имя.сервер:порт" -#: ../sflphone-gtk/src/config/configwindow.c:561 -msgid "Desktop Notification" +#: ../../sflphone-client-gnome/src/config/configwindow.c:579 +#, fuzzy +msgid "Desktop Notifications" msgstr "Извещения на рабочем столе" -#: ../sflphone-gtk/src/config/configwindow.c:569 -msgid "_Enable" -msgstr "_Включить" +#: ../../sflphone-client-gnome/src/config/configwindow.c:588 +#, fuzzy +msgid "_Enable notifications" +msgstr "Включить звонок" -#: ../sflphone-gtk/src/config/configwindow.c:574 -msgid "_Notify voice mails" -msgstr "_Предупредить о новых речевых сообщениях" +#: ../../sflphone-client-gnome/src/config/configwindow.c:594 +msgid "Enable voicemail _notifications" +msgstr "" -#: ../sflphone-gtk/src/config/configwindow.c:580 +#: ../../sflphone-client-gnome/src/config/configwindow.c:605 msgid "System Tray Icon" msgstr "System Tray Icon" -#: ../sflphone-gtk/src/config/configwindow.c:588 +#: ../../sflphone-client-gnome/src/config/configwindow.c:613 msgid "_Popup main window on incoming call" msgstr "_Показать главное окно при входящем звонке" -#: ../sflphone-gtk/src/config/configwindow.c:593 +#: ../../sflphone-client-gnome/src/config/configwindow.c:618 msgid "Ne_ver popup main window" msgstr "Никогда не показывать главное окно" -#: ../sflphone-gtk/src/config/configwindow.c:597 -msgid "_Start hidden" -msgstr "_Начать спрятанным" +#: ../../sflphone-client-gnome/src/config/configwindow.c:622 +msgid "Hide SFLphone window on _startup" +msgstr "" -#: ../sflphone-gtk/src/config/configwindow.c:603 +#: ../../sflphone-client-gnome/src/config/configwindow.c:628 msgid "Calls History" msgstr "Журнал звонков" -#: ../sflphone-gtk/src/config/configwindow.c:611 -msgid "_Maximum number of calls" -msgstr "_Максимальное количество звонков" +#: ../../sflphone-client-gnome/src/config/configwindow.c:636 +#, fuzzy +msgid "_History size limit" +msgstr "Журнал пуст" -#: ../sflphone-gtk/src/config/configwindow.c:627 +#: ../../sflphone-client-gnome/src/config/configwindow.c:653 msgid "PulseAudio sound server" msgstr "Сервер звука PulseAudio" -#: ../sflphone-gtk/src/config/configwindow.c:635 -msgid "_Control running applications volume" -msgstr "_Начать спрятанным " +#: ../../sflphone-client-gnome/src/config/configwindow.c:661 +msgid "Mute other applications during a _call" +msgstr "" -#: ../sflphone-gtk/src/config/configwindow.c:648 +#: ../../sflphone-client-gnome/src/config/configwindow.c:674 msgid "SIP Port" msgstr "SIP-порт" -#: ../sflphone-gtk/src/config/configwindow.c:661 +#: ../../sflphone-client-gnome/src/config/configwindow.c:687 msgid "Port:" msgstr "Порт:" -#: ../sflphone-gtk/src/config/configwindow.c:706 -msgid "General" -msgstr "Общие настройки" - -#: ../sflphone-gtk/src/config/configwindow.c:717 -msgid "_Destination folder" -msgstr "Папка назна_чения" +#: ../../sflphone-client-gnome/src/config/configwindow.c:742 +msgid "_Recordings folder" +msgstr "" -#: ../sflphone-gtk/src/config/configwindow.c:723 +#: ../../sflphone-client-gnome/src/config/configwindow.c:748 msgid "Select a folder" msgstr "Выберите папку" -#: ../sflphone-gtk/src/config/configwindow.c:748 +#: ../../sflphone-client-gnome/src/config/configwindow.c:773 msgid "Preferences" msgstr "Предпочтения" -#: ../sflphone-gtk/src/config/configwindow.c:768 +#: ../../sflphone-client-gnome/src/config/configwindow.c:793 msgid "General Settings" msgstr "Общие настройки" -#: ../sflphone-gtk/src/config/configwindow.c:773 +#: ../../sflphone-client-gnome/src/config/configwindow.c:798 msgid "Audio Settings" msgstr "Настройки звука" -#: ../sflphone-gtk/src/config/configwindow.c:778 -msgid "Record" +#: ../../sflphone-client-gnome/src/config/configwindow.c:803 +#, fuzzy +msgid "Recordings" msgstr "Записать" -#: ../sflphone-gtk/src/config/configwindow.c:783 +#: ../../sflphone-client-gnome/src/config/configwindow.c:808 msgid "Address Book" msgstr "Адресная книга" -#: ../sflphone-gtk/src/config/configwindow.c:788 +#: ../../sflphone-client-gnome/src/config/configwindow.c:813 msgid "Hooks" msgstr "перехватчики (hooks)" -#: ../sflphone-gtk/src/config/configwindow.c:814 +#: ../../sflphone-client-gnome/src/config/configwindow.c:840 msgid "Accounts" msgstr "Аккаунты" -#: ../sflphone-gtk/src/config/configwindow.c:826 -msgid "Accounts previously setup" -msgstr "Существующие аккаунты" +#: ../../sflphone-client-gnome/src/config/configwindow.c:852 +#, fuzzy +msgid "Configured Accounts" +msgstr "Нынешний аккаунт" -#: ../sflphone-gtk/src/config/hooks-config.c:92 -msgid "URL argument" -msgstr "URL аргумент" +#: ../../sflphone-client-gnome/src/config/hooks-config.c:130 +msgid "URL Passing" +msgstr "" -#: ../sflphone-gtk/src/config/hooks-config.c:102 -msgid "_SIP protocol" -msgstr "Пр_отокол" +#: ../../sflphone-client-gnome/src/config/hooks-config.c:140 +#, c-format +msgid "" +"SFLphone can run custom commands if incoming calls come with an URL " +"attached.\n" +"In this case, %s will be replaced with the passed URL." +msgstr "" -#: ../sflphone-gtk/src/config/hooks-config.c:107 -msgid "_IAX2 protocol" -msgstr "Пр_отокол" +#: ../../sflphone-client-gnome/src/config/hooks-config.c:143 +msgid "Trigger on specific _SIP header" +msgstr "" -#: ../sflphone-gtk/src/config/hooks-config.c:113 -msgid "_SIP Header: " -msgstr "_SIP Заголовок" +#: ../../sflphone-client-gnome/src/config/hooks-config.c:155 +msgid "Trigger on _IAX2 URL" +msgstr "" -#: ../sflphone-gtk/src/config/hooks-config.c:120 -msgid "_Command: " +#: ../../sflphone-client-gnome/src/config/hooks-config.c:160 +#, fuzzy +msgid "_Command to run: " msgstr "_Команда" +#: ../../sflphone-client-gnome/src/config/hooks-config.c:168 +msgid "Phone Number Rewriting" +msgstr "" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:178 +msgid "_Prefix dialed numbers with:" +msgstr "" + +#: ../../sflphone-client-gnome/src/contacts/history.c:83 +#: ../../sflphone-client-gnome/src/contacts/searchbar.c:123 +#, fuzzy +msgid "Search history" +msgstr "_Стереть журнал" + +#: ../../sflphone-client-gnome/src/contacts/history.c:83 +#: ../../sflphone-client-gnome/src/contacts/searchbar.c:110 +#, fuzzy +msgid "Search contact" +msgstr "_Искать в журнале" + +#, fuzzy +#~ msgid "Registered to %s (%s)" +#~ msgstr "Зарегистрирован" + +#, fuzzy +#~ msgid "%s account- %s %s" +#~ msgstr "%s аккаунт- %s" + +#, fuzzy +#~ msgid "Books" +#~ msgstr "перехватчики (hooks)" + +#~ msgid "_Enable" +#~ msgstr "_Включить" + +#~ msgid "_Notify voice mails" +#~ msgstr "_Предупредить о новых речевых сообщениях" + +#~ msgid "_Start hidden" +#~ msgstr "_Начать спрятанным" + +#~ msgid "_Maximum number of calls" +#~ msgstr "_Максимальное количество звонков" + +#~ msgid "_Control running applications volume" +#~ msgstr "_Начать спрятанным " + #, fuzzy -#~ msgid "SFLphone 0.9.3" -#~ msgstr "SFLphone 0.9.2" +#~ msgid "Account previously setup" +#~ msgstr "Существующие аккаунты" + +#~ msgid "URL argument" +#~ msgstr "URL аргумент" + +#~ msgid "_SIP protocol" +#~ msgstr "Пр_отокол" + +#~ msgid "_SIP Header: " +#~ msgstr "_SIP Заголовок" + +#~ msgid "_IAX2 protocol" +#~ msgstr "Пр_отокол" + +#~ msgid "Search" +#~ msgstr "Поиск" + +#~ msgid "_Enabled" +#~ msgstr "_Включен" + +#~ msgid "%s account- %s" +#~ msgstr "%s аккаунт- %s" + +#~ msgid "Noise reduction" +#~ msgstr "Уменьшение шума" + +#~ msgid "_Destination folder" +#~ msgstr "Папка назна_чения" + +#~ msgid "_Account Assistant" +#~ msgstr "_Мастер настройки аккаунтов" #~ msgid "Setup Accounts" #~ msgstr "Настроить аккаунты" +#~ msgid "Search Parameters" +#~ msgstr "Параметры аккаунта" + +#~ msgid "Maximum result number for a request: " +#~ msgstr "Максимальное количество звонков" + +#~ msgid "Search for and display: " +#~ msgstr "Найти и показать: " + #~ msgid "_STUN Server" #~ msgstr "_STUN-сервер" #~ msgid "Apply" #~ msgstr "Применить" -#~ msgid "History empty" -#~ msgstr "Журнал пуст" - #~ msgid "Enabled" #~ msgstr "Включен" diff --git a/sflphone-common/po/sflphone.pot b/sflphone-common/po/sflphone.pot index d95d68f1994f50f349f4a78c886d904ad744a323..b00ff4c9854108cda6e75fccfa3023e583f76b5e 100644 --- a/sflphone-common/po/sflphone.pot +++ b/sflphone-common/po/sflphone.pot @@ -1,128 +1,100 @@ -# SFLphone translation template. -# Copyright (C) 2008 2009 Savoir-Faire Linux Inc -# This file is distributed under the same license as the sflphone package. -# Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>. +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: 0.9.3-1\n" +"Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-02-10 15:24-0500\n" -"PO-Revision-Date: 2009-02-10 15:24-0500\n" -"Last-Translator: Hussein Abdallah <hussein.abdallah@savoirfairelinux.com>\n" -"Language-Team: Savoir-Faire Linux Inc <sflphoneteam@savoirfairelinux.com>\n" +"POT-Creation-Date: 2009-05-21 10:45-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" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" +"Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: ../sflphone-gtk/src/accountlist.c:158 +#: ../../sflphone-client-gnome/src/accountlist.c:169 msgid "Registered" msgstr "" -#: ../sflphone-gtk/src/accountlist.c:161 +#: ../../sflphone-client-gnome/src/accountlist.c:172 msgid "Not Registered" msgstr "" -#: ../sflphone-gtk/src/accountlist.c:164 +#: ../../sflphone-client-gnome/src/accountlist.c:175 msgid "Trying..." msgstr "" -#: ../sflphone-gtk/src/accountlist.c:167 ../sflphone-gtk/src/sflnotify.c:171 -#: ../sflphone-gtk/src/sflnotify.c:210 +#: ../../sflphone-client-gnome/src/accountlist.c:178 +#: ../../sflphone-client-gnome/src/sflnotify.c:176 +#: ../../sflphone-client-gnome/src/sflnotify.c:217 msgid "Error" msgstr "" -#: ../sflphone-gtk/src/accountlist.c:170 +#: ../../sflphone-client-gnome/src/accountlist.c:181 msgid "Bad authentification" msgstr "" -#: ../sflphone-gtk/src/accountlist.c:173 +#: ../../sflphone-client-gnome/src/accountlist.c:184 msgid "Network unreachable" msgstr "" -#: ../sflphone-gtk/src/accountlist.c:176 +#: ../../sflphone-client-gnome/src/accountlist.c:187 msgid "Host unreachable" msgstr "" -#: ../sflphone-gtk/src/accountlist.c:179 +#: ../../sflphone-client-gnome/src/accountlist.c:190 msgid "Stun configuration error" msgstr "" -#: ../sflphone-gtk/src/accountlist.c:182 +#: ../../sflphone-client-gnome/src/accountlist.c:193 msgid "Stun server invalid" msgstr "" -#: ../sflphone-gtk/src/accountlist.c:185 +#: ../../sflphone-client-gnome/src/accountlist.c:196 msgid "Invalid" msgstr "" -#: ../sflphone-gtk/src/accountwindow.c:109 -msgid "Account settings" -msgstr "" - -#: ../sflphone-gtk/src/accountwindow.c:121 -msgid "Account parameters" -msgstr "" - -#: ../sflphone-gtk/src/accountwindow.c:143 -msgid "_Enabled" -msgstr "" - -#: ../sflphone-gtk/src/accountwindow.c:149 ../sflphone-gtk/src/assistant.c:238 -#: ../sflphone-gtk/src/assistant.c:292 -msgid "_Alias" -msgstr "" - -#: ../sflphone-gtk/src/accountwindow.c:157 -msgid "_Protocol" -msgstr "" - -#: ../sflphone-gtk/src/accountwindow.c:175 -msgid "Unknown" -msgstr "" - -#: ../sflphone-gtk/src/accountwindow.c:185 ../sflphone-gtk/src/assistant.c:246 -#: ../sflphone-gtk/src/assistant.c:300 -msgid "_Host name" -msgstr "" - -#: ../sflphone-gtk/src/accountwindow.c:193 ../sflphone-gtk/src/assistant.c:254 -#: ../sflphone-gtk/src/assistant.c:308 -msgid "_User name" -msgstr "" - -#: ../sflphone-gtk/src/accountwindow.c:204 ../sflphone-gtk/src/assistant.c:264 -#: ../sflphone-gtk/src/assistant.c:318 -msgid "_Password" -msgstr "" - -#: ../sflphone-gtk/src/accountwindow.c:215 -msgid "_Voicemail box #" -msgstr "" - -#: ../sflphone-gtk/src/actions.c:57 ../sflphone-gtk/src/sflnotify.c:103 +#: ../../sflphone-client-gnome/src/actions.c:55 +#: ../../sflphone-client-gnome/src/sflnotify.c:108 #, c-format msgid "%d voice mails" msgstr "" -#: ../sflphone-gtk/src/actions.c:59 +#: ../../sflphone-client-gnome/src/actions.c:57 #, c-format msgid "%d voice mail" msgstr "" -#: ../sflphone-gtk/src/actions.c:80 +#: ../../sflphone-client-gnome/src/actions.c:81 #, c-format -msgid "%s account- %s" +msgid "Using %s (%s)" msgstr "" -#: ../sflphone-gtk/src/actions.c:224 +#: ../../sflphone-client-gnome/src/actions.c:87 +msgid "No registered account" +msgstr "" + +#: ../../sflphone-client-gnome/src/actions.c:229 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." msgstr "" -#: ../sflphone-gtk/src/actions.c:798 +#: ../../sflphone-client-gnome/src/actions.c:787 +#, c-format +msgid "IP call - %s" +msgstr "" + +#: ../../sflphone-client-gnome/src/actions.c:790 +#, c-format +msgid "Using %s (%s) - Codec: %s" +msgstr "" + +#: ../../sflphone-client-gnome/src/actions.c:880 #, c-format msgid "" "<b>Error: No audio codecs found.\n" @@ -131,489 +103,668 @@ msgid "" "b> directory in your home( <i>%s</i> )" msgstr "" -#: ../sflphone-gtk/src/assistant.c:148 -msgid "SFLphone account configuration wizard" +#: ../../sflphone-client-gnome/src/assistant.c:35 +#, c-format +msgid "" +"This assistant is now finished.\n" +"You can at any time check your registration state or modify your accounts " +"parameters in the Options/Accounts window.\n" +"\n" +"Alias : %s\n" +"Server : %s\n" +"Username : %s\n" msgstr "" -#: ../sflphone-gtk/src/assistant.c:176 -msgid "SFLphone 0.9.2" +#: ../../sflphone-client-gnome/src/assistant.c:160 +msgid "SFLphone account configuration wizard" msgstr "" -#: ../sflphone-gtk/src/assistant.c:176 +#: ../../sflphone-client-gnome/src/assistant.c:186 msgid "Welcome to SFLphone!" msgstr "" -#: ../sflphone-gtk/src/assistant.c:178 +#: ../../sflphone-client-gnome/src/assistant.c:187 msgid "This installation wizard will help you configure an account." msgstr "" -#: ../sflphone-gtk/src/assistant.c:193 +#: ../../sflphone-client-gnome/src/assistant.c:201 msgid "VoIP Protocols" msgstr "" -#: ../sflphone-gtk/src/assistant.c:193 +#: ../../sflphone-client-gnome/src/assistant.c:201 msgid "Select an account type:" msgstr "" -#: ../sflphone-gtk/src/assistant.c:211 +#: ../../sflphone-client-gnome/src/assistant.c:219 msgid "Account" msgstr "" -#: ../sflphone-gtk/src/assistant.c:211 +#: ../../sflphone-client-gnome/src/assistant.c:219 msgid "Please select one of the following option:" msgstr "" -#: ../sflphone-gtk/src/assistant.c:213 +#: ../../sflphone-client-gnome/src/assistant.c:221 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "" -#: ../sflphone-gtk/src/assistant.c:215 +#: ../../sflphone-client-gnome/src/assistant.c:223 msgid "Register an existing SIP or IAX2 account" msgstr "" -#: ../sflphone-gtk/src/assistant.c:230 +#: ../../sflphone-client-gnome/src/assistant.c:236 msgid "SIP account configuration" msgstr "" -#: ../sflphone-gtk/src/assistant.c:230 ../sflphone-gtk/src/assistant.c:284 +#: ../../sflphone-client-gnome/src/assistant.c:236 +#: ../../sflphone-client-gnome/src/assistant.c:332 msgid "Please fill the following information:" msgstr "" -#: ../sflphone-gtk/src/assistant.c:284 +#: ../../sflphone-client-gnome/src/assistant.c:244 +#: ../../sflphone-client-gnome/src/assistant.c:340 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:148 +msgid "_Alias" +msgstr "" + +#: ../../sflphone-client-gnome/src/assistant.c:252 +#: ../../sflphone-client-gnome/src/assistant.c:348 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:184 +msgid "_Host name" +msgstr "" + +#: ../../sflphone-client-gnome/src/assistant.c:260 +#: ../../sflphone-client-gnome/src/assistant.c:356 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:192 +msgid "_User name" +msgstr "" + +#: ../../sflphone-client-gnome/src/assistant.c:276 +#: ../../sflphone-client-gnome/src/assistant.c:371 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:207 +msgid "_Password" +msgstr "" + +#: ../../sflphone-client-gnome/src/assistant.c:294 +#: ../../sflphone-client-gnome/src/assistant.c:387 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:223 +msgid "_Voicemail number" +msgstr "" + +#: ../../sflphone-client-gnome/src/assistant.c:309 +msgid "Optional Email Address " +msgstr "" + +#: ../../sflphone-client-gnome/src/assistant.c:309 +msgid "This email address will be use to send your voicemail messages" +msgstr "" + +#: ../../sflphone-client-gnome/src/assistant.c:317 +msgid "_Email" +msgstr "" + +#: ../../sflphone-client-gnome/src/assistant.c:332 msgid "IAX2 account configuration" msgstr "" -#: ../sflphone-gtk/src/assistant.c:341 ../sflphone-gtk/src/configwindow.c:821 +#: ../../sflphone-client-gnome/src/assistant.c:405 +#: ../../sflphone-client-gnome/src/config/configwindow.c:863 msgid "Network Address Translation" msgstr "" -#: ../sflphone-gtk/src/assistant.c:341 +#: ../../sflphone-client-gnome/src/assistant.c:405 msgid "You should probably enable this if you are behind a firewall." msgstr "" -#: ../sflphone-gtk/src/assistant.c:350 ../sflphone-gtk/src/configwindow.c:496 +#: ../../sflphone-client-gnome/src/assistant.c:414 +#: ../../sflphone-client-gnome/src/config/configwindow.c:516 msgid "E_nable STUN" msgstr "" -#: ../sflphone-gtk/src/assistant.c:357 +#: ../../sflphone-client-gnome/src/assistant.c:421 msgid "_STUN server" msgstr "" -#: ../sflphone-gtk/src/assistant.c:374 +#: ../../sflphone-client-gnome/src/assistant.c:435 msgid "Account Registration" msgstr "" -#: ../sflphone-gtk/src/assistant.c:374 +#: ../../sflphone-client-gnome/src/assistant.c:435 msgid "Congratulations!" msgstr "" -#: ../sflphone-gtk/src/assistant.c:376 +#: ../../sflphone-client-gnome/src/errors.c:28 msgid "" -"This assistant is now finished.\n" +"ALSA notification\n" "\n" -" You can at any time check your registration state or modify your accounts " -"parameters in the Options/Accounts window." +"Error while opening playback device" msgstr "" -#: ../sflphone-gtk/src/audioconf.c:154 -#, c-format -msgid "audio device index for output = %d\n" +#: ../../sflphone-client-gnome/src/errors.c:31 +msgid "" +"ALSA notification\n" +"\n" +"Error while opening capture device" msgstr "" -#: ../sflphone-gtk/src/audioconf.c:562 -msgid "Name" +#: ../../sflphone-client-gnome/src/errors.c:34 +msgid "" +"Pulseaudio notification\n" +"\n" +"Pulseaudio is not running" msgstr "" -#: ../sflphone-gtk/src/audioconf.c:567 -msgid "Frequency" +#: ../../sflphone-client-gnome/src/mainwindow.c:70 +msgid "There is one call in progress." msgstr "" -#: ../sflphone-gtk/src/audioconf.c:572 -msgid "Bitrate" +#: ../../sflphone-client-gnome/src/mainwindow.c:74 +msgid "There are calls in progress." msgstr "" -#: ../sflphone-gtk/src/audioconf.c:577 -msgid "Bandwidth" +#: ../../sflphone-client-gnome/src/mainwindow.c:83 +msgid "Do you still want to quit?" msgstr "" -#: ../sflphone-gtk/src/audioconf.c:637 -msgid "Pulseaudio" +#: ../../sflphone-client-gnome/src/mainwindow.c:296 +msgid "SFLphone Error" msgstr "" -#: ../sflphone-gtk/src/audioconf.c:640 -msgid "ALSA" +#: ../../sflphone-client-gnome/src/menus.c:134 +msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "" -#: ../sflphone-gtk/src/audioconf.c:666 -msgid "ALSA plugin" +#: ../../sflphone-client-gnome/src/menus.c:137 +msgid "About SFLphone" msgstr "" -#: ../sflphone-gtk/src/audioconf.c:688 -msgid "Output" +#: ../../sflphone-client-gnome/src/menus.c:161 +msgid "_Help" msgstr "" -#: ../sflphone-gtk/src/audioconf.c:710 -msgid "Input" +#: ../../sflphone-client-gnome/src/menus.c:300 +#: ../../sflphone-client-gnome/src/menus.c:971 +msgid "_New call" msgstr "" -#: ../sflphone-gtk/src/audioconf.c:743 -msgid "_Enable ringtones" +#: ../../sflphone-client-gnome/src/menus.c:312 +#: ../../sflphone-client-gnome/src/menus.c:803 +msgid "_Pick up" msgstr "" -#: ../sflphone-gtk/src/audioconf.c:748 -msgid "Choose a ringtone" +#: ../../sflphone-client-gnome/src/menus.c:322 +#: ../../sflphone-client-gnome/src/menus.c:815 +msgid "_Hang up" msgstr "" -#: ../sflphone-gtk/src/audioconf.c:753 -msgid "Audio Files" +#: ../../sflphone-client-gnome/src/menus.c:332 +#: ../../sflphone-client-gnome/src/menus.c:827 +msgid "On _Hold" msgstr "" -#: ../sflphone-gtk/src/audioconf.c:770 -msgid "_Activate silence detection" +#: ../../sflphone-client-gnome/src/menus.c:344 +#: ../../sflphone-client-gnome/src/menus.c:839 +msgid "_Record" msgstr "" -#: ../sflphone-gtk/src/audioconf.c:798 -msgid "Sound Manager" +#: ../../sflphone-client-gnome/src/menus.c:358 +msgid "_Account creation wizard" msgstr "" -#: ../sflphone-gtk/src/audioconf.c:805 -msgid "ALSA configuration" +#: ../../sflphone-client-gnome/src/menus.c:388 +msgid "_Call" msgstr "" -#: ../sflphone-gtk/src/audioconf.c:815 -msgid "Codecs" +#: ../../sflphone-client-gnome/src/menus.c:561 +msgid "_Clear history" msgstr "" -#: ../sflphone-gtk/src/audioconf.c:823 -msgid "Noise reduction" +#: ../../sflphone-client-gnome/src/menus.c:573 +msgid "_Accounts" msgstr "" -#: ../sflphone-gtk/src/audioconf.c:830 -msgid "Ringtones" +#: ../../sflphone-client-gnome/src/menus.c:588 +msgid "_Edit" +msgstr "" + +#: ../../sflphone-client-gnome/src/menus.c:649 +msgid "_Dialpad" +msgstr "" + +#: ../../sflphone-client-gnome/src/menus.c:661 +msgid "_Volume controls" +msgstr "" + +#: ../../sflphone-client-gnome/src/menus.c:679 +msgid "_View" +msgstr "" + +#: ../../sflphone-client-gnome/src/menus.c:899 +msgid "_Call back" +msgstr "" + +#: ../../sflphone-client-gnome/src/menus.c:1082 +msgid "Edit phone" msgstr "" -#: ../sflphone-gtk/src/calltree.c:209 +#: ../../sflphone-client-gnome/src/menus.c:1093 +msgid "Edit the phone number before making a call" +msgstr "" + +#: ../../sflphone-client-gnome/src/sflnotify.c:38 +#: ../../sflphone-client-gnome/src/sflnotify.c:105 +#, c-format +msgid "%s account: %s" +msgstr "" + +#: ../../sflphone-client-gnome/src/sflnotify.c:42 +#, c-format +msgid "<i>From:</i> %s" +msgstr "" + +#: ../../sflphone-client-gnome/src/sflnotify.c:57 +msgid "Accept" +msgstr "" + +#: ../../sflphone-client-gnome/src/sflnotify.c:58 +msgid "Refuse" +msgstr "" + +#: ../../sflphone-client-gnome/src/sflnotify.c:59 +#: ../../sflphone-client-gnome/src/sflnotify.c:122 +#: ../../sflphone-client-gnome/src/sflnotify.c:159 +msgid "Ignore" +msgstr "" + +#: ../../sflphone-client-gnome/src/sflnotify.c:141 +#, c-format +msgid "Calling with %s account <i>%s</i>" +msgstr "" + +#: ../../sflphone-client-gnome/src/sflnotify.c:145 +msgid "Current account" +msgstr "" + +#: ../../sflphone-client-gnome/src/sflnotify.c:174 +msgid "You haven't setup any accounts" +msgstr "" + +#: ../../sflphone-client-gnome/src/sflnotify.c:214 +msgid "You have no registered accounts" +msgstr "" + +#: ../../sflphone-client-gnome/src/sliders.c:161 +msgid "Speakers volume" +msgstr "" + +#: ../../sflphone-client-gnome/src/sliders.c:163 +msgid "Mic volume" +msgstr "" + +#: ../../sflphone-client-gnome/src/statusicon.c:91 +msgid "_Show main window" +msgstr "" + +#: ../../sflphone-client-gnome/src/statusicon.c:124 +#, c-format +msgid "SFLphone - %i accounts configured" +msgstr "" + +#: ../../sflphone-client-gnome/src/timestamp.c:46 +msgid "<small>Missed call</small>" +msgstr "" + +#: ../../sflphone-client-gnome/src/timestamp.c:64 +#, c-format +msgid "<small>Duration:</small> %s" +msgstr "" + +#: ../../sflphone-client-gnome/src/toolbar.c:50 #, c-format msgid "\"Voicemail\" <%s>" msgstr "" -#: ../sflphone-gtk/src/calltree.c:431 ../sflphone-gtk/src/calltree.c:433 +#: ../../sflphone-client-gnome/src/toolbar.c:176 +#: ../../sflphone-client-gnome/src/toolbar.c:178 msgid "Place a call" msgstr "" -#: ../sflphone-gtk/src/calltree.c:440 ../sflphone-gtk/src/calltree.c:442 +#: ../../sflphone-client-gnome/src/toolbar.c:185 +#: ../../sflphone-client-gnome/src/toolbar.c:187 msgid "Pick up" msgstr "" -#: ../sflphone-gtk/src/calltree.c:450 ../sflphone-gtk/src/calltree.c:452 +#: ../../sflphone-client-gnome/src/toolbar.c:195 +#: ../../sflphone-client-gnome/src/toolbar.c:197 msgid "Hang up" msgstr "" -#: ../sflphone-gtk/src/calltree.c:460 ../sflphone-gtk/src/calltree.c:462 +#: ../../sflphone-client-gnome/src/toolbar.c:205 +#: ../../sflphone-client-gnome/src/toolbar.c:207 msgid "Off Hold" msgstr "" -#: ../sflphone-gtk/src/calltree.c:471 ../sflphone-gtk/src/calltree.c:473 +#: ../../sflphone-client-gnome/src/toolbar.c:216 +#: ../../sflphone-client-gnome/src/toolbar.c:218 msgid "On Hold" msgstr "" -#: ../sflphone-gtk/src/calltree.c:484 ../sflphone-gtk/src/calltree.c:486 +#: ../../sflphone-client-gnome/src/toolbar.c:229 +#: ../../sflphone-client-gnome/src/toolbar.c:231 msgid "Transfer" msgstr "" -#: ../sflphone-gtk/src/calltree.c:496 ../sflphone-gtk/src/calltree.c:498 +#: ../../sflphone-client-gnome/src/toolbar.c:241 +#: ../../sflphone-client-gnome/src/toolbar.c:243 msgid "History" msgstr "" -#: ../sflphone-gtk/src/calltree.c:506 ../sflphone-gtk/src/calltree.c:510 +#: ../../sflphone-client-gnome/src/toolbar.c:252 +#: ../../sflphone-client-gnome/src/toolbar.c:254 +msgid "Address book" +msgstr "" + +#: ../../sflphone-client-gnome/src/toolbar.c:260 +#: ../../sflphone-client-gnome/src/toolbar.c:264 msgid "Voicemail" msgstr "" -#: ../sflphone-gtk/src/calltree.c:521 +#: ../../sflphone-client-gnome/src/toolbar.c:272 msgid "Record a call" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:382 -msgid "Protocol" +#: ../../sflphone-client-gnome/src/config/accountwindow.c:108 +msgid "Account settings" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:389 -msgid "Status" +#: ../../sflphone-client-gnome/src/config/accountwindow.c:120 +msgid "Account Parameters" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:492 -msgid "Stun parameters will apply to each SIP account created." +#: ../../sflphone-client-gnome/src/config/accountwindow.c:142 +msgid "_Enable this account" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:500 -msgid "Enable it if you are behind a firewall" +#: ../../sflphone-client-gnome/src/config/accountwindow.c:156 +msgid "_Protocol" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:508 -msgid "Format: name.server:port" +#: ../../sflphone-client-gnome/src/config/accountwindow.c:174 +msgid "Unknown" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:558 -msgid "Desktop Notification" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:265 +#: ../../sflphone-client-gnome/src/config/configwindow.c:732 +msgid "General" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:566 -msgid "_Enable" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:276 +msgid "_Use Evolution address books" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:571 -msgid "_Notify voice mails" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:283 +msgid "Download limit:" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:577 -msgid "System Tray Icon" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:294 +msgid "_Display contact photo if available" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:585 -msgid "_Popup main window on incoming call" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:301 +msgid "Fields" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:590 -msgid "Ne_ver popup main window" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:311 +msgid "Use the following fields from Evolution's address books:" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:594 -msgid "_Start hidden" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:316 +msgid "_Business phone" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:600 -msgid "Calls History" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:321 +msgid "_Home phone" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:608 -msgid "_Maximum number of calls" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:326 +msgid "_Mobile phone" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:624 -msgid "PulseAudio sound server" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:333 +msgid "Address Books" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:632 -msgid "_Control running applications volume" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:343 +msgid "Select which Evolution address books to use:" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:645 -msgid "SIP Port" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:377 +#: ../../sflphone-client-gnome/src/config/audioconf.c:574 +msgid "Name" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:658 -msgid "Port:" +#: ../../sflphone-client-gnome/src/config/audioconf.c:155 +#, c-format +msgid "audio device index for output = %d" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:703 -msgid "General" +#: ../../sflphone-client-gnome/src/config/audioconf.c:579 +msgid "Frequency" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:714 -msgid "_Destination folder" +#: ../../sflphone-client-gnome/src/config/audioconf.c:584 +msgid "Bitrate" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:719 -msgid "Select a folder" +#: ../../sflphone-client-gnome/src/config/audioconf.c:589 +msgid "Bandwidth" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:744 -msgid "Preferences" +#: ../../sflphone-client-gnome/src/config/audioconf.c:652 +msgid "Pulseaudio" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:764 -msgid "General Settings" +#: ../../sflphone-client-gnome/src/config/audioconf.c:655 +msgid "ALSA" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:769 -msgid "Audio Settings" +#: ../../sflphone-client-gnome/src/config/audioconf.c:681 +msgid "ALSA plugin" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:774 -msgid "Record" +#: ../../sflphone-client-gnome/src/config/audioconf.c:703 +msgid "Output" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:798 -msgid "Accounts" +#: ../../sflphone-client-gnome/src/config/audioconf.c:725 +msgid "Input" msgstr "" -#: ../sflphone-gtk/src/configwindow.c:810 -msgid "Accounts previously setup" +#: ../../sflphone-client-gnome/src/config/audioconf.c:758 +msgid "_Enable ringtones" msgstr "" -#: ../sflphone-gtk/src/errors.c:28 -msgid "" -"<b>ALSA notification</b>\n" -"\n" -"Error while opening playback device" +#: ../../sflphone-client-gnome/src/config/audioconf.c:764 +msgid "Choose a ringtone" msgstr "" -#: ../sflphone-gtk/src/errors.c:31 -msgid "" -"<b>ALSA notification</b>\n" -"\n" -"Error while opening capture device" +#: ../../sflphone-client-gnome/src/config/audioconf.c:769 +msgid "Audio Files" msgstr "" -#: ../sflphone-gtk/src/errors.c:34 -msgid "" -"<b>Pulseaudio notification</b>\n" -"\n" -"Pulseaudio is not running" +#: ../../sflphone-client-gnome/src/config/audioconf.c:788 +msgid "_Voice Activity Detection" msgstr "" -#: ../sflphone-gtk/src/historyfilter.c:49 -#: ../sflphone-gtk/src/historyfilter.c:68 -#: ../sflphone-gtk/src/historyfilter.c:83 -msgid "Search" +#: ../../sflphone-client-gnome/src/config/audioconf.c:798 +msgid "_Noise Reduction (Narrow-Band Companding)" msgstr "" -#: ../sflphone-gtk/src/mainwindow.c:69 -msgid "There is one call in progress." +#: ../../sflphone-client-gnome/src/config/audioconf.c:826 +msgid "Sound Manager" msgstr "" -#: ../sflphone-gtk/src/mainwindow.c:73 -msgid "There are calls in progress." +#: ../../sflphone-client-gnome/src/config/audioconf.c:833 +msgid "ALSA configuration" msgstr "" -#: ../sflphone-gtk/src/mainwindow.c:82 -msgid "Do you still want to quit?" +#: ../../sflphone-client-gnome/src/config/audioconf.c:850 +msgid "Codecs" msgstr "" -#: ../sflphone-gtk/src/menus.c:135 -msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." +#: ../../sflphone-client-gnome/src/config/audioconf.c:873 +msgid "Ringtones" msgstr "" -#: ../sflphone-gtk/src/menus.c:138 -msgid "About SFLphone" +#: ../../sflphone-client-gnome/src/config/configwindow.c:402 +msgid "Protocol" msgstr "" -#: ../sflphone-gtk/src/menus.c:161 -msgid "_Help" +#: ../../sflphone-client-gnome/src/config/configwindow.c:409 +msgid "Status" msgstr "" -#: ../sflphone-gtk/src/menus.c:278 -msgid "_New call" +#: ../../sflphone-client-gnome/src/config/configwindow.c:512 +msgid "Stun parameters will apply to each SIP account created." msgstr "" -#: ../sflphone-gtk/src/menus.c:290 ../sflphone-gtk/src/menus.c:760 -msgid "_Pick up" +#: ../../sflphone-client-gnome/src/config/configwindow.c:520 +msgid "Enable it if you are behind a firewall" msgstr "" -#: ../sflphone-gtk/src/menus.c:300 ../sflphone-gtk/src/menus.c:772 -msgid "_Hang up" +#: ../../sflphone-client-gnome/src/config/configwindow.c:528 +msgid "Format: name.server:port" msgstr "" -#: ../sflphone-gtk/src/menus.c:310 ../sflphone-gtk/src/menus.c:784 -msgid "On _Hold" +#: ../../sflphone-client-gnome/src/config/configwindow.c:579 +msgid "Desktop Notifications" msgstr "" -#: ../sflphone-gtk/src/menus.c:326 -msgid "_Account Assistant" +#: ../../sflphone-client-gnome/src/config/configwindow.c:588 +msgid "_Enable notifications" msgstr "" -#: ../sflphone-gtk/src/menus.c:356 -msgid "_Call" +#: ../../sflphone-client-gnome/src/config/configwindow.c:594 +msgid "Enable voicemail _notifications" msgstr "" -#: ../sflphone-gtk/src/menus.c:529 -msgid "_Clear history" +#: ../../sflphone-client-gnome/src/config/configwindow.c:605 +msgid "System Tray Icon" msgstr "" -#: ../sflphone-gtk/src/menus.c:541 -msgid "_Accounts" +#: ../../sflphone-client-gnome/src/config/configwindow.c:613 +msgid "_Popup main window on incoming call" msgstr "" -#: ../sflphone-gtk/src/menus.c:556 -msgid "_Edit" +#: ../../sflphone-client-gnome/src/config/configwindow.c:618 +msgid "Ne_ver popup main window" msgstr "" -#: ../sflphone-gtk/src/menus.c:616 -msgid "_Dialpad" +#: ../../sflphone-client-gnome/src/config/configwindow.c:622 +msgid "Hide SFLphone window on _startup" msgstr "" -#: ../sflphone-gtk/src/menus.c:628 -msgid "_Volume controls" +#: ../../sflphone-client-gnome/src/config/configwindow.c:628 +msgid "Calls History" msgstr "" -#: ../sflphone-gtk/src/menus.c:637 -msgid "_Search history" +#: ../../sflphone-client-gnome/src/config/configwindow.c:636 +msgid "_History size limit" msgstr "" -#: ../sflphone-gtk/src/menus.c:645 -msgid "_View" +#: ../../sflphone-client-gnome/src/config/configwindow.c:653 +msgid "PulseAudio sound server" msgstr "" -#: ../sflphone-gtk/src/menus.c:867 -msgid "_Call back" +#: ../../sflphone-client-gnome/src/config/configwindow.c:661 +msgid "Mute other applications during a _call" msgstr "" -#: ../sflphone-gtk/src/sflnotify.c:34 ../sflphone-gtk/src/sflnotify.c:100 -#, c-format -msgid "%s account: %s" +#: ../../sflphone-client-gnome/src/config/configwindow.c:674 +msgid "SIP Port" msgstr "" -#: ../sflphone-gtk/src/sflnotify.c:37 -#, c-format -msgid "<i>From:</i> %s" +#: ../../sflphone-client-gnome/src/config/configwindow.c:687 +msgid "Port:" msgstr "" -#: ../sflphone-gtk/src/sflnotify.c:52 -msgid "Accept" +#: ../../sflphone-client-gnome/src/config/configwindow.c:742 +msgid "_Recordings folder" msgstr "" -#: ../sflphone-gtk/src/sflnotify.c:53 -msgid "Refuse" +#: ../../sflphone-client-gnome/src/config/configwindow.c:748 +msgid "Select a folder" msgstr "" -#: ../sflphone-gtk/src/sflnotify.c:54 ../sflphone-gtk/src/sflnotify.c:117 -#: ../sflphone-gtk/src/sflnotify.c:154 -msgid "Ignore" +#: ../../sflphone-client-gnome/src/config/configwindow.c:773 +msgid "Preferences" msgstr "" -#: ../sflphone-gtk/src/sflnotify.c:136 -#, c-format -msgid "Calling with %s account <i>%s</i>" +#: ../../sflphone-client-gnome/src/config/configwindow.c:793 +msgid "General Settings" msgstr "" -#: ../sflphone-gtk/src/sflnotify.c:140 -msgid "Current account" +#: ../../sflphone-client-gnome/src/config/configwindow.c:798 +msgid "Audio Settings" msgstr "" -#: ../sflphone-gtk/src/sflnotify.c:169 -msgid "You haven't setup any accounts" +#: ../../sflphone-client-gnome/src/config/configwindow.c:803 +msgid "Recordings" msgstr "" -#: ../sflphone-gtk/src/sflnotify.c:185 ../sflphone-gtk/src/sflnotify.c:224 -msgid "Setup Accounts" +#: ../../sflphone-client-gnome/src/config/configwindow.c:808 +msgid "Address Book" msgstr "" -#: ../sflphone-gtk/src/sflnotify.c:208 -msgid "You have no registered accounts" +#: ../../sflphone-client-gnome/src/config/configwindow.c:813 +msgid "Hooks" msgstr "" -#: ../sflphone-gtk/src/sliders.c:161 -msgid "Speakers volume" +#: ../../sflphone-client-gnome/src/config/configwindow.c:840 +msgid "Accounts" msgstr "" -#: ../sflphone-gtk/src/sliders.c:163 -msgid "Mic volume" +#: ../../sflphone-client-gnome/src/config/configwindow.c:852 +msgid "Configured Accounts" msgstr "" -#: ../sflphone-gtk/src/statusicon.c:91 -msgid "_Show main window" +#: ../../sflphone-client-gnome/src/config/hooks-config.c:130 +msgid "URL Passing" msgstr "" -#: ../sflphone-gtk/src/statusicon.c:124 +#: ../../sflphone-client-gnome/src/config/hooks-config.c:140 #, c-format -msgid "SFLphone - %i accounts registered" +msgid "" +"SFLphone can run custom commands if incoming calls come with an URL " +"attached.\n" +"In this case, %s will be replaced with the passed URL." msgstr "" -#: ../sflphone-gtk/src/timestamp.c:46 -msgid "<small>Missed call</small>" +#: ../../sflphone-client-gnome/src/config/hooks-config.c:143 +msgid "Trigger on specific _SIP header" msgstr "" -#: ../sflphone-gtk/src/timestamp.c:64 -#, c-format -msgid "<small>Duration:</small> %s" +#: ../../sflphone-client-gnome/src/config/hooks-config.c:155 +msgid "Trigger on _IAX2 URL" +msgstr "" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:160 +msgid "_Command to run: " +msgstr "" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:168 +msgid "Phone Number Rewriting" +msgstr "" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:178 +msgid "_Prefix dialed numbers with:" +msgstr "" + +#: ../../sflphone-client-gnome/src/contacts/history.c:83 +#: ../../sflphone-client-gnome/src/contacts/searchbar.c:123 +msgid "Search history" +msgstr "" + +#: ../../sflphone-client-gnome/src/contacts/history.c:83 +#: ../../sflphone-client-gnome/src/contacts/searchbar.c:110 +msgid "Search contact" msgstr "" diff --git a/sflphone-common/po/zh_CN.po b/sflphone-common/po/zh_CN.po index fee36e06cebb45b0096f21b5a3dfb1f3591ac917..7de05fd789dc5291fc8b58039702ca8ef61aa695 100644 --- a/sflphone-common/po/zh_CN.po +++ b/sflphone-common/po/zh_CN.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-02 11:15-0400\n" +"POT-Creation-Date: 2009-05-21 10:45-0400\n" "PO-Revision-Date: 2008-10-28 14:15\n" "Last-Translator: Yun Liu <yun.liu@savoirfairelinux.com>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" @@ -17,63 +17,69 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n>1;\n" -#: ../sflphone-gtk/src/accountlist.c:158 +#: ../../sflphone-client-gnome/src/accountlist.c:169 msgid "Registered" msgstr "已注册" -#: ../sflphone-gtk/src/accountlist.c:161 +#: ../../sflphone-client-gnome/src/accountlist.c:172 msgid "Not Registered" msgstr "未注册" -#: ../sflphone-gtk/src/accountlist.c:164 +#: ../../sflphone-client-gnome/src/accountlist.c:175 msgid "Trying..." msgstr "正在连接..." -#: ../sflphone-gtk/src/accountlist.c:167 ../sflphone-gtk/src/sflnotify.c:171 -#: ../sflphone-gtk/src/sflnotify.c:212 +#: ../../sflphone-client-gnome/src/accountlist.c:178 +#: ../../sflphone-client-gnome/src/sflnotify.c:176 +#: ../../sflphone-client-gnome/src/sflnotify.c:217 msgid "Error" msgstr "注册失败" -#: ../sflphone-gtk/src/accountlist.c:170 +#: ../../sflphone-client-gnome/src/accountlist.c:181 msgid "Bad authentification" msgstr "认证错误" -#: ../sflphone-gtk/src/accountlist.c:173 +#: ../../sflphone-client-gnome/src/accountlist.c:184 msgid "Network unreachable" msgstr "网络连接失败" -#: ../sflphone-gtk/src/accountlist.c:176 +#: ../../sflphone-client-gnome/src/accountlist.c:187 msgid "Host unreachable" msgstr "服务器连接失败" -#: ../sflphone-gtk/src/accountlist.c:179 +#: ../../sflphone-client-gnome/src/accountlist.c:190 msgid "Stun configuration error" msgstr "Stun配置有误" -#: ../sflphone-gtk/src/accountlist.c:182 +#: ../../sflphone-client-gnome/src/accountlist.c:193 msgid "Stun server invalid" msgstr "Stun服务器无效" -#: ../sflphone-gtk/src/accountlist.c:185 +#: ../../sflphone-client-gnome/src/accountlist.c:196 msgid "Invalid" msgstr "无效" -#: ../sflphone-gtk/src/actions.c:55 ../sflphone-gtk/src/sflnotify.c:103 +#: ../../sflphone-client-gnome/src/actions.c:55 +#: ../../sflphone-client-gnome/src/sflnotify.c:108 #, c-format msgid "%d voice mails" msgstr "%d 个语音信息" -#: ../sflphone-gtk/src/actions.c:57 +#: ../../sflphone-client-gnome/src/actions.c:57 #, c-format msgid "%d voice mail" msgstr "%d 个语音信息" -#: ../sflphone-gtk/src/actions.c:81 +#: ../../sflphone-client-gnome/src/actions.c:81 #, c-format -msgid "%s account- %s" -msgstr "%s 帐户- %s" +msgid "Using %s (%s)" +msgstr "" + +#: ../../sflphone-client-gnome/src/actions.c:87 +msgid "No registered account" +msgstr "未发现已注册帐户" -#: ../sflphone-gtk/src/actions.c:225 +#: ../../sflphone-client-gnome/src/actions.c:229 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -81,11 +87,17 @@ msgstr "" "连接SFLphone服务器失败.\n" "请检查daemon是否还在运行." -#: ../sflphone-gtk/src/actions.c:764 -msgid "%s account- %s %s" -msgstr "%s 帐户- %s %s" +#: ../../sflphone-client-gnome/src/actions.c:787 +#, c-format +msgid "IP call - %s" +msgstr "IP 电话 - %s" -#: ../sflphone-gtk/src/actions.c:861 +#: ../../sflphone-client-gnome/src/actions.c:790 +#, c-format +msgid "Using %s (%s) - Codec: %s" +msgstr "" + +#: ../../sflphone-client-gnome/src/actions.c:880 #, c-format msgid "" "<b>Error: No audio codecs found.\n" @@ -98,7 +110,8 @@ msgstr "" "</b> SFL声音codecs文件应位于<i>%s</i> 或 位于主目录( <i>%s</i> )的<b>." "sflphone</b>目录下" -#: ../sflphone-gtk/src/assistant.c:31 +#: ../../sflphone-client-gnome/src/assistant.c:35 +#, c-format msgid "" "This assistant is now finished.\n" "You can at any time check your registration state or modify your accounts " @@ -107,7 +120,6 @@ msgid "" "Alias : %s\n" "Server : %s\n" "Username : %s\n" -"Password : %s" msgstr "" "配置完成.\n" "你可以随时在 选项/帐户 窗口中查看注册状态或者修改帐户参数.\n" @@ -115,623 +127,743 @@ msgstr "" "别名: %s\n" "服务器: %s\n" "用户名: %s\n" -"密码: %s" -#: ../sflphone-gtk/src/assistant.c:154 +#: ../../sflphone-client-gnome/src/assistant.c:160 msgid "SFLphone account configuration wizard" msgstr "SFLphone 帐户设置向导" -#: ../sflphone-gtk/src/assistant.c:180 +#: ../../sflphone-client-gnome/src/assistant.c:186 msgid "Welcome to SFLphone!" msgstr "欢迎使用SFLphone!" -#: ../sflphone-gtk/src/assistant.c:181 +#: ../../sflphone-client-gnome/src/assistant.c:187 msgid "This installation wizard will help you configure an account." msgstr "安装向导将帮助您配置帐户" -#: ../sflphone-gtk/src/assistant.c:195 +#: ../../sflphone-client-gnome/src/assistant.c:201 msgid "VoIP Protocols" msgstr "VoIP协议" -#: ../sflphone-gtk/src/assistant.c:195 +#: ../../sflphone-client-gnome/src/assistant.c:201 msgid "Select an account type:" msgstr "选择帐户类型:" -#: ../sflphone-gtk/src/assistant.c:213 +#: ../../sflphone-client-gnome/src/assistant.c:219 msgid "Account" msgstr "帐户" -#: ../sflphone-gtk/src/assistant.c:213 +#: ../../sflphone-client-gnome/src/assistant.c:219 msgid "Please select one of the following option:" msgstr "请选择以下选项中的一个:" -#: ../sflphone-gtk/src/assistant.c:215 +#: ../../sflphone-client-gnome/src/assistant.c:221 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "在sflphone.org上创建免费的SIP/IAX2帐户" -#: ../sflphone-gtk/src/assistant.c:217 +#: ../../sflphone-client-gnome/src/assistant.c:223 msgid "Register an existing SIP or IAX2 account" msgstr "注册已存在的SIP或IAX2帐户" -#: ../sflphone-gtk/src/assistant.c:230 +#: ../../sflphone-client-gnome/src/assistant.c:236 msgid "SIP account configuration" msgstr "SIP帐户配置" -#: ../sflphone-gtk/src/assistant.c:230 ../sflphone-gtk/src/assistant.c:305 +#: ../../sflphone-client-gnome/src/assistant.c:236 +#: ../../sflphone-client-gnome/src/assistant.c:332 msgid "Please fill the following information:" msgstr "请填写以下信息:" -#: ../sflphone-gtk/src/assistant.c:238 ../sflphone-gtk/src/assistant.c:313 -#: ../sflphone-gtk/src/config/accountwindow.c:143 +#: ../../sflphone-client-gnome/src/assistant.c:244 +#: ../../sflphone-client-gnome/src/assistant.c:340 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:148 msgid "_Alias" msgstr "别名(A)" -#: ../sflphone-gtk/src/assistant.c:246 ../sflphone-gtk/src/assistant.c:321 -#: ../sflphone-gtk/src/config/accountwindow.c:179 +#: ../../sflphone-client-gnome/src/assistant.c:252 +#: ../../sflphone-client-gnome/src/assistant.c:348 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:184 msgid "_Host name" msgstr "主机名(H)" -#: ../sflphone-gtk/src/assistant.c:254 ../sflphone-gtk/src/assistant.c:329 -#: ../sflphone-gtk/src/config/accountwindow.c:187 +#: ../../sflphone-client-gnome/src/assistant.c:260 +#: ../../sflphone-client-gnome/src/assistant.c:356 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:192 msgid "_User name" msgstr "用户名(U)" -#: ../sflphone-gtk/src/assistant.c:264 ../sflphone-gtk/src/assistant.c:339 -#: ../sflphone-gtk/src/config/accountwindow.c:198 +#: ../../sflphone-client-gnome/src/assistant.c:276 +#: ../../sflphone-client-gnome/src/assistant.c:371 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:207 msgid "_Password" msgstr "密码(P)" -#: ../sflphone-gtk/src/assistant.c:282 +#: ../../sflphone-client-gnome/src/assistant.c:294 +#: ../../sflphone-client-gnome/src/assistant.c:387 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:223 +msgid "_Voicemail number" +msgstr "语音信箱号码(V)" + +#: ../../sflphone-client-gnome/src/assistant.c:309 msgid "Optional Email Address " msgstr "可选邮件地址 " -#: ../sflphone-gtk/src/assistant.c:282 +#: ../../sflphone-client-gnome/src/assistant.c:309 msgid "This email address will be use to send your voicemail messages" msgstr "这个邮件地址将被用来发送您的语音邮箱消息" -#: ../sflphone-gtk/src/assistant.c:290 +#: ../../sflphone-client-gnome/src/assistant.c:317 msgid "_Email" msgstr " 邮件(E)" -#: ../sflphone-gtk/src/assistant.c:305 +#: ../../sflphone-client-gnome/src/assistant.c:332 msgid "IAX2 account configuration" msgstr "IAX2帐户配置" -#: ../sflphone-gtk/src/assistant.c:360 -#: ../sflphone-gtk/src/config/configwindow.c:837 +#: ../../sflphone-client-gnome/src/assistant.c:405 +#: ../../sflphone-client-gnome/src/config/configwindow.c:863 msgid "Network Address Translation" msgstr "网络地址解析" -#: ../sflphone-gtk/src/assistant.c:360 +#: ../../sflphone-client-gnome/src/assistant.c:405 msgid "You should probably enable this if you are behind a firewall." msgstr "如果你使用网络使用防火墙,你很有可能需要设定此项." -#: ../sflphone-gtk/src/assistant.c:369 -#: ../sflphone-gtk/src/config/configwindow.c:499 +#: ../../sflphone-client-gnome/src/assistant.c:414 +#: ../../sflphone-client-gnome/src/config/configwindow.c:516 msgid "E_nable STUN" msgstr "使用STUN(n)" -#: ../sflphone-gtk/src/assistant.c:376 +#: ../../sflphone-client-gnome/src/assistant.c:421 msgid "_STUN server" msgstr "STUN服务器(S)" -#: ../sflphone-gtk/src/assistant.c:390 +#: ../../sflphone-client-gnome/src/assistant.c:435 msgid "Account Registration" msgstr "帐户注册" -#: ../sflphone-gtk/src/assistant.c:390 +#: ../../sflphone-client-gnome/src/assistant.c:435 msgid "Congratulations!" msgstr "恭喜!" -#: ../sflphone-gtk/src/context-menu.c:296 ../sflphone-gtk/src/menus.c:308 -#: ../sflphone-gtk/src/menus.c:791 -msgid "_Pick up" -msgstr "拨出(P)" - -#: ../sflphone-gtk/src/context-menu.c:308 ../sflphone-gtk/src/menus.c:318 -#: ../sflphone-gtk/src/menus.c:803 -msgid "_Hang up" -msgstr "放下(H)" - -#: ../sflphone-gtk/src/context-menu.c:320 ../sflphone-gtk/src/menus.c:328 -#: ../sflphone-gtk/src/menus.c:815 -msgid "On _Hold" -msgstr "保持(H)" - -#: ../sflphone-gtk/src/context-menu.c:332 ../sflphone-gtk/src/menus.c:340 -#: ../sflphone-gtk/src/menus.c:827 -msgid "_Record" -msgstr "记录(R)" - -#: ../sflphone-gtk/src/errors.c:28 +#: ../../sflphone-client-gnome/src/errors.c:28 msgid "" -"<b>ALSA notification</b>\n" +"ALSA notification\n" "\n" "Error while opening playback device" msgstr "" -"<b>ALSA提示</b>\n" +"ALSA提示\n" "\n" "打开回放设备时出错" -#: ../sflphone-gtk/src/errors.c:31 +#: ../../sflphone-client-gnome/src/errors.c:31 msgid "" -"<b>ALSA notification</b>\n" +"ALSA notification\n" "\n" "Error while opening capture device" msgstr "" -"<b>ALSA提示</b>\n" +"ALSA提示\n" "\n" "打开采集设备时出错" -#: ../sflphone-gtk/src/errors.c:34 +#: ../../sflphone-client-gnome/src/errors.c:34 msgid "" -"<b>Pulseaudio notification</b>\n" +"Pulseaudio notification\n" "\n" "Pulseaudio is not running" msgstr "" +"Pulseaudio提示\n" +"\n" +"Pulseaudio未运行" -#: ../sflphone-gtk/src/mainwindow.c:70 +#: ../../sflphone-client-gnome/src/mainwindow.c:70 msgid "There is one call in progress." msgstr "有一个电话正在处理" -#: ../sflphone-gtk/src/mainwindow.c:74 +#: ../../sflphone-client-gnome/src/mainwindow.c:74 msgid "There are calls in progress." msgstr "有电话正在处理中" -#: ../sflphone-gtk/src/mainwindow.c:83 +#: ../../sflphone-client-gnome/src/mainwindow.c:83 msgid "Do you still want to quit?" msgstr "确认要退出?" -#: ../sflphone-gtk/src/menus.c:131 +#: ../../sflphone-client-gnome/src/mainwindow.c:296 +msgid "SFLphone Error" +msgstr "SFLphone出错" + +#: ../../sflphone-client-gnome/src/menus.c:134 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone是一个VoIP客户端,它兼容SIP和IAX2协议." -#: ../sflphone-gtk/src/menus.c:134 +#: ../../sflphone-client-gnome/src/menus.c:137 msgid "About SFLphone" msgstr "关于SFLphone" -#: ../sflphone-gtk/src/menus.c:157 +#: ../../sflphone-client-gnome/src/menus.c:161 msgid "_Help" msgstr "帮助(H)" -#: ../sflphone-gtk/src/menus.c:296 ../sflphone-gtk/src/menus.c:949 +#: ../../sflphone-client-gnome/src/menus.c:300 +#: ../../sflphone-client-gnome/src/menus.c:971 msgid "_New call" msgstr "新电话(N)" -#: ../sflphone-gtk/src/menus.c:354 -msgid "_Account Assistant" -msgstr "帐户向导(A)" +#: ../../sflphone-client-gnome/src/menus.c:312 +#: ../../sflphone-client-gnome/src/menus.c:803 +msgid "_Pick up" +msgstr "拨出(P)" + +#: ../../sflphone-client-gnome/src/menus.c:322 +#: ../../sflphone-client-gnome/src/menus.c:815 +msgid "_Hang up" +msgstr "放下(H)" + +#: ../../sflphone-client-gnome/src/menus.c:332 +#: ../../sflphone-client-gnome/src/menus.c:827 +msgid "On _Hold" +msgstr "保持(H)" + +#: ../../sflphone-client-gnome/src/menus.c:344 +#: ../../sflphone-client-gnome/src/menus.c:839 +msgid "_Record" +msgstr "记录(R)" -#: ../sflphone-gtk/src/menus.c:384 +#: ../../sflphone-client-gnome/src/menus.c:358 +msgid "_Account creation wizard" +msgstr "帐户创建向导" + +#: ../../sflphone-client-gnome/src/menus.c:388 msgid "_Call" msgstr "电话" -#: ../sflphone-gtk/src/menus.c:557 +#: ../../sflphone-client-gnome/src/menus.c:561 msgid "_Clear history" msgstr "清空历史记录(C)" -#: ../sflphone-gtk/src/menus.c:569 +#: ../../sflphone-client-gnome/src/menus.c:573 msgid "_Accounts" msgstr "帐户(A)" -#: ../sflphone-gtk/src/menus.c:584 +#: ../../sflphone-client-gnome/src/menus.c:588 msgid "_Edit" msgstr "编辑(E)" -#: ../sflphone-gtk/src/menus.c:644 +#: ../../sflphone-client-gnome/src/menus.c:649 msgid "_Dialpad" msgstr "拨号面板" -#: ../sflphone-gtk/src/menus.c:656 +#: ../../sflphone-client-gnome/src/menus.c:661 msgid "_Volume controls" msgstr "音量控制(V)" -#: ../sflphone-gtk/src/menus.c:665 -msgid "_Search contact" -msgstr "查找历史(S)" - -#: ../sflphone-gtk/src/menus.c:673 +#: ../../sflphone-client-gnome/src/menus.c:679 msgid "_View" msgstr "查看(V)" -#: ../sflphone-gtk/src/menus.c:885 +#: ../../sflphone-client-gnome/src/menus.c:899 msgid "_Call back" msgstr "回叫(C)" -#: ../sflphone-gtk/src/sflnotify.c:34 ../sflphone-gtk/src/sflnotify.c:100 +#: ../../sflphone-client-gnome/src/menus.c:1082 +msgid "Edit phone" +msgstr "编辑电话" + +#: ../../sflphone-client-gnome/src/menus.c:1093 +msgid "Edit the phone number before making a call" +msgstr "拨出电话前编辑电话号码" + +#: ../../sflphone-client-gnome/src/sflnotify.c:38 +#: ../../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%s account: %s" msgstr "%s 帐户: %s" -#: ../sflphone-gtk/src/sflnotify.c:37 +#: ../../sflphone-client-gnome/src/sflnotify.c:42 #, c-format msgid "<i>From:</i> %s" msgstr "<i>拨入方:</i> %s" -#: ../sflphone-gtk/src/sflnotify.c:52 +#: ../../sflphone-client-gnome/src/sflnotify.c:57 msgid "Accept" msgstr "接受" -#: ../sflphone-gtk/src/sflnotify.c:53 +#: ../../sflphone-client-gnome/src/sflnotify.c:58 msgid "Refuse" msgstr "拒绝" -#: ../sflphone-gtk/src/sflnotify.c:54 ../sflphone-gtk/src/sflnotify.c:117 -#: ../sflphone-gtk/src/sflnotify.c:154 +#: ../../sflphone-client-gnome/src/sflnotify.c:59 +#: ../../sflphone-client-gnome/src/sflnotify.c:122 +#: ../../sflphone-client-gnome/src/sflnotify.c:159 msgid "Ignore" msgstr "忽略" -#: ../sflphone-gtk/src/sflnotify.c:136 +#: ../../sflphone-client-gnome/src/sflnotify.c:141 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "使用%s帐户<i>%s</i>呼叫" -#: ../sflphone-gtk/src/sflnotify.c:140 +#: ../../sflphone-client-gnome/src/sflnotify.c:145 msgid "Current account" msgstr "当前帐户" -#: ../sflphone-gtk/src/sflnotify.c:169 +#: ../../sflphone-client-gnome/src/sflnotify.c:174 msgid "You haven't setup any accounts" msgstr "你没有设置任何帐户" -#: ../sflphone-gtk/src/sflnotify.c:209 +#: ../../sflphone-client-gnome/src/sflnotify.c:214 msgid "You have no registered accounts" msgstr "未发现已注册帐户" -#: ../sflphone-gtk/src/sliders.c:161 +#: ../../sflphone-client-gnome/src/sliders.c:161 msgid "Speakers volume" msgstr "扬声器音量" -#: ../sflphone-gtk/src/sliders.c:163 +#: ../../sflphone-client-gnome/src/sliders.c:163 msgid "Mic volume" msgstr "话筒音量" -#: ../sflphone-gtk/src/statusicon.c:91 +#: ../../sflphone-client-gnome/src/statusicon.c:91 msgid "_Show main window" msgstr "显示主窗口(S)" -#: ../sflphone-gtk/src/statusicon.c:124 +#: ../../sflphone-client-gnome/src/statusicon.c:124 #, c-format -msgid "SFLphone - %i accounts registered" -msgstr "SFLphone - %i 个帐户已注册" +msgid "SFLphone - %i accounts configured" +msgstr "SFLphone - %i 个帐户已配置" -#: ../sflphone-gtk/src/timestamp.c:46 +#: ../../sflphone-client-gnome/src/timestamp.c:46 msgid "<small>Missed call</small>" msgstr "<small>未接电话</small>" -#: ../sflphone-gtk/src/timestamp.c:64 +#: ../../sflphone-client-gnome/src/timestamp.c:64 #, c-format msgid "<small>Duration:</small> %s" msgstr "<small>时长:</small> %s" -#: ../sflphone-gtk/src/toolbar.c:49 +#: ../../sflphone-client-gnome/src/toolbar.c:50 #, c-format msgid "\"Voicemail\" <%s>" msgstr "\"语音邮件\" <%s>" -#: ../sflphone-gtk/src/toolbar.c:175 ../sflphone-gtk/src/toolbar.c:177 +#: ../../sflphone-client-gnome/src/toolbar.c:176 +#: ../../sflphone-client-gnome/src/toolbar.c:178 msgid "Place a call" msgstr "拨号" -#: ../sflphone-gtk/src/toolbar.c:184 ../sflphone-gtk/src/toolbar.c:186 +#: ../../sflphone-client-gnome/src/toolbar.c:185 +#: ../../sflphone-client-gnome/src/toolbar.c:187 msgid "Pick up" msgstr "接电话" -#: ../sflphone-gtk/src/toolbar.c:194 ../sflphone-gtk/src/toolbar.c:196 +#: ../../sflphone-client-gnome/src/toolbar.c:195 +#: ../../sflphone-client-gnome/src/toolbar.c:197 msgid "Hang up" msgstr "放电话" -#: ../sflphone-gtk/src/toolbar.c:204 ../sflphone-gtk/src/toolbar.c:206 +#: ../../sflphone-client-gnome/src/toolbar.c:205 +#: ../../sflphone-client-gnome/src/toolbar.c:207 msgid "Off Hold" msgstr "恢复通话" -#: ../sflphone-gtk/src/toolbar.c:215 ../sflphone-gtk/src/toolbar.c:217 +#: ../../sflphone-client-gnome/src/toolbar.c:216 +#: ../../sflphone-client-gnome/src/toolbar.c:218 msgid "On Hold" msgstr "待机" -#: ../sflphone-gtk/src/toolbar.c:228 ../sflphone-gtk/src/toolbar.c:230 +#: ../../sflphone-client-gnome/src/toolbar.c:229 +#: ../../sflphone-client-gnome/src/toolbar.c:231 msgid "Transfer" msgstr "转接" -#: ../sflphone-gtk/src/toolbar.c:240 ../sflphone-gtk/src/toolbar.c:242 +#: ../../sflphone-client-gnome/src/toolbar.c:241 +#: ../../sflphone-client-gnome/src/toolbar.c:243 msgid "History" msgstr "历史" -#: ../sflphone-gtk/src/toolbar.c:251 ../sflphone-gtk/src/toolbar.c:253 +#: ../../sflphone-client-gnome/src/toolbar.c:252 +#: ../../sflphone-client-gnome/src/toolbar.c:254 msgid "Address book" msgstr "地址簿" -#: ../sflphone-gtk/src/toolbar.c:258 ../sflphone-gtk/src/toolbar.c:262 +#: ../../sflphone-client-gnome/src/toolbar.c:260 +#: ../../sflphone-client-gnome/src/toolbar.c:264 msgid "Voicemail" msgstr "语音信箱" -#: ../sflphone-gtk/src/toolbar.c:270 +#: ../../sflphone-client-gnome/src/toolbar.c:272 msgid "Record a call" msgstr "记录通话" -#: ../sflphone-gtk/src/contacts/history.c:75 -#: ../sflphone-gtk/src/contacts/searchbar.c:39 -#: ../sflphone-gtk/src/contacts/searchbar.c:65 -msgid "Search" -msgstr "查找" - -#: ../sflphone-gtk/src/config/accountwindow.c:103 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:108 msgid "Account settings" msgstr "帐户设置" -#: ../sflphone-gtk/src/config/accountwindow.c:115 -msgid "Account parameters" +#: ../../sflphone-client-gnome/src/config/accountwindow.c:120 +msgid "Account Parameters" msgstr "帐户相关参数" -#: ../sflphone-gtk/src/config/accountwindow.c:137 -msgid "_Enabled" -msgstr "启用(E)" +#: ../../sflphone-client-gnome/src/config/accountwindow.c:142 +msgid "_Enable this account" +msgstr "启用该账户(E)" -#: ../sflphone-gtk/src/config/accountwindow.c:151 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:156 msgid "_Protocol" msgstr "协议(P)" -#: ../sflphone-gtk/src/config/accountwindow.c:169 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:174 msgid "Unknown" msgstr "未知" -#: ../sflphone-gtk/src/config/accountwindow.c:209 -msgid "_Voicemail box #" -msgstr "语音信箱(V)" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:265 +#: ../../sflphone-client-gnome/src/config/configwindow.c:732 +msgid "General" +msgstr "常用配置" -#: ../sflphone-gtk/src/config/addressbook-config.c:105 -msgid "Search Parameters" -msgstr "查找相关参数" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:276 +msgid "_Use Evolution address books" +msgstr "使用Evolution地址薄(U)" -#: ../sflphone-gtk/src/config/addressbook-config.c:116 -msgid "Maximum result number for a request: " -msgstr "最大拨号数" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:283 +msgid "Download limit:" +msgstr "下载上限:" -#: ../sflphone-gtk/src/config/addressbook-config.c:127 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:294 msgid "_Display contact photo if available" msgstr "如果可行则显示联系人照片(D)" -#: ../sflphone-gtk/src/config/addressbook-config.c:132 -msgid "Search for and display: " -msgstr "查找并显示:" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:301 +msgid "Fields" +msgstr "字段" -#: ../sflphone-gtk/src/config/addressbook-config.c:135 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:311 +msgid "Use the following fields from Evolution's address books:" +msgstr "使用Evolution地址薄中的如下字段:" + +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:316 msgid "_Business phone" msgstr "商务电话(B)" -#: ../sflphone-gtk/src/config/addressbook-config.c:140 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:321 msgid "_Home phone" msgstr "家庭电话(H)" -#: ../sflphone-gtk/src/config/addressbook-config.c:145 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:326 msgid "_Mobile phone" msgstr "移动电话(M)" -#: ../sflphone-gtk/src/config/audioconf.c:154 -#, c-format -msgid "audio device index for output = %d\n" -msgstr "音频设备索引输出 = %d\n" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:333 +msgid "Address Books" +msgstr "地址簿" -#: ../sflphone-gtk/src/config/audioconf.c:562 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:343 +msgid "Select which Evolution address books to use:" +msgstr "选择使用如下Evolution地址薄:" + +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:377 +#: ../../sflphone-client-gnome/src/config/audioconf.c:574 msgid "Name" msgstr "名称" -#: ../sflphone-gtk/src/config/audioconf.c:567 +#: ../../sflphone-client-gnome/src/config/audioconf.c:155 +#, c-format +msgid "audio device index for output = %d" +msgstr "音频设备输出索引 = %d" + +#: ../../sflphone-client-gnome/src/config/audioconf.c:579 msgid "Frequency" msgstr "频率" -#: ../sflphone-gtk/src/config/audioconf.c:572 +#: ../../sflphone-client-gnome/src/config/audioconf.c:584 msgid "Bitrate" msgstr "比率" -#: ../sflphone-gtk/src/config/audioconf.c:577 +#: ../../sflphone-client-gnome/src/config/audioconf.c:589 msgid "Bandwidth" msgstr "带宽" -#: ../sflphone-gtk/src/config/audioconf.c:637 +#: ../../sflphone-client-gnome/src/config/audioconf.c:652 msgid "Pulseaudio" msgstr "Pulseaudio" -#: ../sflphone-gtk/src/config/audioconf.c:640 +#: ../../sflphone-client-gnome/src/config/audioconf.c:655 msgid "ALSA" msgstr "ALSA" -#: ../sflphone-gtk/src/config/audioconf.c:666 +#: ../../sflphone-client-gnome/src/config/audioconf.c:681 msgid "ALSA plugin" msgstr "ALSA插件" -#: ../sflphone-gtk/src/config/audioconf.c:688 +#: ../../sflphone-client-gnome/src/config/audioconf.c:703 msgid "Output" msgstr "输出" -#: ../sflphone-gtk/src/config/audioconf.c:710 +#: ../../sflphone-client-gnome/src/config/audioconf.c:725 msgid "Input" msgstr "输入" -#: ../sflphone-gtk/src/config/audioconf.c:743 +#: ../../sflphone-client-gnome/src/config/audioconf.c:758 msgid "_Enable ringtones" msgstr "启用铃声(E)" -#: ../sflphone-gtk/src/config/audioconf.c:748 +#: ../../sflphone-client-gnome/src/config/audioconf.c:764 msgid "Choose a ringtone" msgstr "选择铃声" -#: ../sflphone-gtk/src/config/audioconf.c:753 +#: ../../sflphone-client-gnome/src/config/audioconf.c:769 msgid "Audio Files" msgstr "音频文件" -#: ../sflphone-gtk/src/config/audioconf.c:770 -msgid "_Activate silence detection" -msgstr "启用静音检测(A)" +#: ../../sflphone-client-gnome/src/config/audioconf.c:788 +msgid "_Voice Activity Detection" +msgstr "声音状态检测(V)" -#: ../sflphone-gtk/src/config/audioconf.c:798 +#: ../../sflphone-client-gnome/src/config/audioconf.c:798 +msgid "_Noise Reduction (Narrow-Band Companding)" +msgstr "降噪处理-窄频压缩(N)" + +#: ../../sflphone-client-gnome/src/config/audioconf.c:826 msgid "Sound Manager" msgstr "音频管理器" -#: ../sflphone-gtk/src/config/audioconf.c:805 +#: ../../sflphone-client-gnome/src/config/audioconf.c:833 msgid "ALSA configuration" msgstr "ALSA 配置" -#: ../sflphone-gtk/src/config/audioconf.c:815 +#: ../../sflphone-client-gnome/src/config/audioconf.c:850 msgid "Codecs" msgstr "Codecs编码" -#: ../sflphone-gtk/src/config/audioconf.c:823 -msgid "Noise reduction" -msgstr "降噪" - -#: ../sflphone-gtk/src/config/audioconf.c:830 +#: ../../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Ringtones" msgstr "铃声" -#: ../sflphone-gtk/src/config/configwindow.c:385 +#: ../../sflphone-client-gnome/src/config/configwindow.c:402 msgid "Protocol" msgstr "协议" -#: ../sflphone-gtk/src/config/configwindow.c:392 +#: ../../sflphone-client-gnome/src/config/configwindow.c:409 msgid "Status" msgstr "状态" -#: ../sflphone-gtk/src/config/configwindow.c:495 +#: ../../sflphone-client-gnome/src/config/configwindow.c:512 msgid "Stun parameters will apply to each SIP account created." msgstr "Stun参数将应用于每一个注册的SIP帐户" -#: ../sflphone-gtk/src/config/configwindow.c:503 +#: ../../sflphone-client-gnome/src/config/configwindow.c:520 msgid "Enable it if you are behind a firewall" msgstr "当使用防火墙时,启用该项" -#: ../sflphone-gtk/src/config/configwindow.c:511 +#: ../../sflphone-client-gnome/src/config/configwindow.c:528 msgid "Format: name.server:port" msgstr "格式:name.server:port" -#: ../sflphone-gtk/src/config/configwindow.c:561 -msgid "Desktop Notification" +#: ../../sflphone-client-gnome/src/config/configwindow.c:579 +msgid "Desktop Notifications" msgstr "桌面提示" -#: ../sflphone-gtk/src/config/configwindow.c:569 -msgid "_Enable" -msgstr "启用(E)" +#: ../../sflphone-client-gnome/src/config/configwindow.c:588 +msgid "_Enable notifications" +msgstr "启用提示(E)" -#: ../sflphone-gtk/src/config/configwindow.c:574 -msgid "_Notify voice mails" -msgstr "通知语音邮件(N)" +#: ../../sflphone-client-gnome/src/config/configwindow.c:594 +msgid "Enable voicemail _notifications" +msgstr "启用语音邮箱提示(n)" -#: ../sflphone-gtk/src/config/configwindow.c:580 +#: ../../sflphone-client-gnome/src/config/configwindow.c:605 msgid "System Tray Icon" msgstr "系统托盘图标" -#: ../sflphone-gtk/src/config/configwindow.c:588 +#: ../../sflphone-client-gnome/src/config/configwindow.c:613 msgid "_Popup main window on incoming call" msgstr "来电时弹出主窗口(P)" -#: ../sflphone-gtk/src/config/configwindow.c:593 +#: ../../sflphone-client-gnome/src/config/configwindow.c:618 msgid "Ne_ver popup main window" msgstr "从不弹出主窗口(v)" -#: ../sflphone-gtk/src/config/configwindow.c:597 -msgid "_Start hidden" -msgstr "启动时隐藏(S)" +#: ../../sflphone-client-gnome/src/config/configwindow.c:622 +msgid "Hide SFLphone window on _startup" +msgstr "在启动时隐藏SFLphone主窗口" -#: ../sflphone-gtk/src/config/configwindow.c:603 +#: ../../sflphone-client-gnome/src/config/configwindow.c:628 msgid "Calls History" msgstr "拨号历史" -#: ../sflphone-gtk/src/config/configwindow.c:611 -msgid "_Maximum number of calls" -msgstr "最大拨号数(M)" +#: ../../sflphone-client-gnome/src/config/configwindow.c:636 +msgid "_History size limit" +msgstr "历史记录上限(H)" -#: ../sflphone-gtk/src/config/configwindow.c:627 +#: ../../sflphone-client-gnome/src/config/configwindow.c:653 msgid "PulseAudio sound server" msgstr "PulseAudio服务器" -#: ../sflphone-gtk/src/config/configwindow.c:635 -msgid "_Control running applications volume" -msgstr "控制正在运行的应用程序的音量(C)" +#: ../../sflphone-client-gnome/src/config/configwindow.c:661 +msgid "Mute other applications during a _call" +msgstr "当有来电时静音其它应用程序(c)" -#: ../sflphone-gtk/src/config/configwindow.c:648 +#: ../../sflphone-client-gnome/src/config/configwindow.c:674 msgid "SIP Port" msgstr "SIP端口号" -#: ../sflphone-gtk/src/config/configwindow.c:661 +#: ../../sflphone-client-gnome/src/config/configwindow.c:687 msgid "Port:" msgstr "端口:" -#: ../sflphone-gtk/src/config/configwindow.c:706 -msgid "General" -msgstr "常用配置" - -#: ../sflphone-gtk/src/config/configwindow.c:717 -msgid "_Destination folder" -msgstr "目标文件夹(D)" +#: ../../sflphone-client-gnome/src/config/configwindow.c:742 +msgid "_Recordings folder" +msgstr "记录文件夹(R)" -#: ../sflphone-gtk/src/config/configwindow.c:723 +#: ../../sflphone-client-gnome/src/config/configwindow.c:748 msgid "Select a folder" msgstr "选择文件夹" -#: ../sflphone-gtk/src/config/configwindow.c:748 +#: ../../sflphone-client-gnome/src/config/configwindow.c:773 msgid "Preferences" msgstr "属性" -#: ../sflphone-gtk/src/config/configwindow.c:768 +#: ../../sflphone-client-gnome/src/config/configwindow.c:793 msgid "General Settings" msgstr "常用配置" -#: ../sflphone-gtk/src/config/configwindow.c:773 +#: ../../sflphone-client-gnome/src/config/configwindow.c:798 msgid "Audio Settings" msgstr "音频配置" -#: ../sflphone-gtk/src/config/configwindow.c:778 -msgid "Record" +#: ../../sflphone-client-gnome/src/config/configwindow.c:803 +msgid "Recordings" msgstr "记录" -#: ../sflphone-gtk/src/config/configwindow.c:783 +#: ../../sflphone-client-gnome/src/config/configwindow.c:808 msgid "Address Book" msgstr "地址簿" -#: ../sflphone-gtk/src/config/configwindow.c:788 +#: ../../sflphone-client-gnome/src/config/configwindow.c:813 msgid "Hooks" msgstr "钩键" -#: ../sflphone-gtk/src/config/configwindow.c:814 +#: ../../sflphone-client-gnome/src/config/configwindow.c:840 msgid "Accounts" msgstr "帐户" -#: ../sflphone-gtk/src/config/configwindow.c:826 -msgid "Accounts previously setup" -msgstr "以前帐户设置" +#: ../../sflphone-client-gnome/src/config/configwindow.c:852 +msgid "Configured Accounts" +msgstr "已配置帐户" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:130 +msgid "URL Passing" +msgstr "传输URL" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:140 +#, c-format +msgid "" +"SFLphone can run custom commands if incoming calls come with an URL " +"attached.\n" +"In this case, %s will be replaced with the passed URL." +msgstr "" +"当来电有附加的URL时,SFLphone可运行客户命令.\n" +"在此情况下,传输的URL会被替换成%s." + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:143 +msgid "Trigger on specific _SIP header" +msgstr "激活指定的SIP头(S)" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:155 +msgid "Trigger on _IAX2 URL" +msgstr "激活IAX2 URL(I)" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:160 +msgid "_Command to run: " +msgstr "运行命令(C):" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:168 +msgid "Phone Number Rewriting" +msgstr "重设电话号码" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:178 +msgid "_Prefix dialed numbers with:" +msgstr "号码前缀:" -#: ../sflphone-gtk/src/config/hooks-config.c:92 -msgid "URL argument" -msgstr "URL参数" +#: ../../sflphone-client-gnome/src/contacts/history.c:83 +#: ../../sflphone-client-gnome/src/contacts/searchbar.c:123 +msgid "Search history" +msgstr "查找历史记录" -#: ../sflphone-gtk/src/config/hooks-config.c:102 -msgid "_SIP protocol" -msgstr "SIP 协议(S)" +#: ../../sflphone-client-gnome/src/contacts/history.c:83 +#: ../../sflphone-client-gnome/src/contacts/searchbar.c:110 +msgid "Search contact" +msgstr "查找联系人(S)" -#: ../sflphone-gtk/src/config/hooks-config.c:107 -msgid "_IAX2 protocol" -msgstr "IAX2 协议(I)" +#~ msgid "Registered to %s (%s)" +#~ msgstr "注册到 %s (%s)" -#: ../sflphone-gtk/src/config/hooks-config.c:113 -msgid "_SIP Header: " -msgstr "SIP消息头(S):" +#~ msgid "%s account- %s %s" +#~ msgstr "%s 帐户- %s %s" -#: ../sflphone-gtk/src/config/hooks-config.c:120 -msgid "_Command: " -msgstr "命令(C):" +#~ msgid "Books" +#~ msgstr "钩键" -#~ msgid "SFLphone 0.9.3" -#~ msgstr "SFLphone 0.9.2" +#~ msgid "_Enable" +#~ msgstr "启用(E)" + +#~ msgid "_Notify voice mails" +#~ msgstr "通知语音邮件(N)" + +#~ msgid "_Start hidden" +#~ msgstr "启动时隐藏(S)" + +#~ msgid "_Maximum number of calls" +#~ msgstr "最大拨号数(M)" + +#~ msgid "_Control running applications volume" +#~ msgstr "控制正在运行的应用程序的音量(C)" + +#~ msgid "Account previously setup" +#~ msgstr "帐户以前设置" + +#~ msgid "URL argument" +#~ msgstr "URL参数" + +#~ msgid "_SIP protocol" +#~ msgstr "SIP 协议(S)" + +#~ msgid "_SIP Header: " +#~ msgstr "SIP消息头(S):" + +#~ msgid "_IAX2 protocol" +#~ msgstr "IAX2 协议(I)" + +#~ msgid "Search" +#~ msgstr "查找" + +#~ msgid "_Enabled" +#~ msgstr "启用(E)" + +#~ msgid "%s account- %s" +#~ msgstr "%s 帐户- %s" + +#~ msgid "Noise reduction" +#~ msgstr "降噪" + +#~ msgid "_Destination folder" +#~ msgstr "目标文件夹(D)" + +#~ msgid "_Account Assistant" +#~ msgstr "帐户向导(A)" #~ msgid "Setup Accounts" #~ msgstr "设定帐户" +#~ msgid "Search Parameters" +#~ msgstr "查找相关参数" + +#~ msgid "Maximum result number for a request: " +#~ msgstr "最大拨号数" + +#~ msgid "Search for and display: " +#~ msgstr "查找并显示:" + #~ msgid "_STUN Server" #~ msgstr "STUN服务器(S)" #~ msgid "Apply" #~ msgstr "应用" - -#~ msgid "History empty" -#~ msgstr "无历史记录" - diff --git a/sflphone-common/po/zh_HK.po b/sflphone-common/po/zh_HK.po index eebc77122fa5cb383ef1f48eb494d5db15225de3..bb25b47ecffb24f99e8eef4b1790661177fdebc5 100644 --- a/sflphone-common/po/zh_HK.po +++ b/sflphone-common/po/zh_HK.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: SFLphone 0.9.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-02 11:15-0400\n" +"POT-Creation-Date: 2009-05-21 10:45-0400\n" "PO-Revision-Date: 2008-10-28 14:15\n" "Last-Translator: Yun Liu <yun.liu@savoirfairelinux.com>\n" "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n" @@ -17,63 +17,69 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n>1;\n" -#: ../sflphone-gtk/src/accountlist.c:158 +#: ../../sflphone-client-gnome/src/accountlist.c:169 msgid "Registered" msgstr "已註冊" -#: ../sflphone-gtk/src/accountlist.c:161 +#: ../../sflphone-client-gnome/src/accountlist.c:172 msgid "Not Registered" msgstr "未註冊" -#: ../sflphone-gtk/src/accountlist.c:164 +#: ../../sflphone-client-gnome/src/accountlist.c:175 msgid "Trying..." msgstr "正在連接..." -#: ../sflphone-gtk/src/accountlist.c:167 ../sflphone-gtk/src/sflnotify.c:171 -#: ../sflphone-gtk/src/sflnotify.c:212 +#: ../../sflphone-client-gnome/src/accountlist.c:178 +#: ../../sflphone-client-gnome/src/sflnotify.c:176 +#: ../../sflphone-client-gnome/src/sflnotify.c:217 msgid "Error" msgstr "註冊失敗" -#: ../sflphone-gtk/src/accountlist.c:170 +#: ../../sflphone-client-gnome/src/accountlist.c:181 msgid "Bad authentification" msgstr "認證錯誤" -#: ../sflphone-gtk/src/accountlist.c:173 +#: ../../sflphone-client-gnome/src/accountlist.c:184 msgid "Network unreachable" msgstr "網路連線失敗" -#: ../sflphone-gtk/src/accountlist.c:176 +#: ../../sflphone-client-gnome/src/accountlist.c:187 msgid "Host unreachable" msgstr "伺服器連線失敗" -#: ../sflphone-gtk/src/accountlist.c:179 +#: ../../sflphone-client-gnome/src/accountlist.c:190 msgid "Stun configuration error" msgstr "Stun配置有誤" -#: ../sflphone-gtk/src/accountlist.c:182 +#: ../../sflphone-client-gnome/src/accountlist.c:193 msgid "Stun server invalid" msgstr "Stun伺服器無效" -#: ../sflphone-gtk/src/accountlist.c:185 +#: ../../sflphone-client-gnome/src/accountlist.c:196 msgid "Invalid" msgstr "無效" -#: ../sflphone-gtk/src/actions.c:55 ../sflphone-gtk/src/sflnotify.c:103 +#: ../../sflphone-client-gnome/src/actions.c:55 +#: ../../sflphone-client-gnome/src/sflnotify.c:108 #, c-format msgid "%d voice mails" msgstr "%d 個語音郵件" -#: ../sflphone-gtk/src/actions.c:57 +#: ../../sflphone-client-gnome/src/actions.c:57 #, c-format msgid "%d voice mail" msgstr "%d 個語音郵件" -#: ../sflphone-gtk/src/actions.c:81 +#: ../../sflphone-client-gnome/src/actions.c:81 #, c-format -msgid "%s account- %s" -msgstr "%s 帳戶- %s" +msgid "Using %s (%s)" +msgstr "" + +#: ../../sflphone-client-gnome/src/actions.c:87 +msgid "No registered account" +msgstr "未發現已註冊帳戶" -#: ../sflphone-gtk/src/actions.c:225 +#: ../../sflphone-client-gnome/src/actions.c:229 msgid "" "Unable to connect to the SFLphone server.\n" "Make sure the daemon is running." @@ -81,11 +87,17 @@ msgstr "" "連接SFLphone伺服器失敗.\n" "請核查daemon是否正在運行." -#: ../sflphone-gtk/src/actions.c:764 -msgid "%s account- %s %s" -msgstr "%s 帳戶- %s %s" +#: ../../sflphone-client-gnome/src/actions.c:787 +#, c-format +msgid "IP call - %s" +msgstr "IP電話- %s" -#: ../sflphone-gtk/src/actions.c:861 +#: ../../sflphone-client-gnome/src/actions.c:790 +#, c-format +msgid "Using %s (%s) - Codec: %s" +msgstr "" + +#: ../../sflphone-client-gnome/src/actions.c:880 #, c-format msgid "" "<b>Error: No audio codecs found.\n" @@ -98,7 +110,8 @@ msgstr "" "</b> SFL聲音編碼檔案應該位于<i>%s</i> 或者位于主目錄( <i>%s</i> )的<b>." "sflphone</b>目錄下" -#: ../sflphone-gtk/src/assistant.c:31 +#: ../../sflphone-client-gnome/src/assistant.c:35 +#, c-format msgid "" "This assistant is now finished.\n" "You can at any time check your registration state or modify your accounts " @@ -107,632 +120,749 @@ msgid "" "Alias : %s\n" "Server : %s\n" "Username : %s\n" -"Password : %s" msgstr "" "配置完成.\n" -"你可以隨時在 選項/帳戶 中查看註冊狀態或者修改帳戶信息" -"\n" +"你可以隨時在 選項/帳戶 中查看註冊狀態或者修改帳戶信息\n" "別稱: %s\n" "伺服器: %s\n" "使用者名稱: %s\n" -"密碼: %s" -#: ../sflphone-gtk/src/assistant.c:154 +#: ../../sflphone-client-gnome/src/assistant.c:160 msgid "SFLphone account configuration wizard" msgstr "SFLphone 帳戶設置向導" -#: ../sflphone-gtk/src/assistant.c:180 +#: ../../sflphone-client-gnome/src/assistant.c:186 msgid "Welcome to SFLphone!" msgstr "歡迎使用SFLphone!" -#: ../sflphone-gtk/src/assistant.c:181 +#: ../../sflphone-client-gnome/src/assistant.c:187 msgid "This installation wizard will help you configure an account." msgstr "安裝向導將幫助您配置帳戶" -#: ../sflphone-gtk/src/assistant.c:195 +#: ../../sflphone-client-gnome/src/assistant.c:201 msgid "VoIP Protocols" msgstr "VoIP協議" -#: ../sflphone-gtk/src/assistant.c:195 +#: ../../sflphone-client-gnome/src/assistant.c:201 msgid "Select an account type:" msgstr "選擇帳戶類型:" -#: ../sflphone-gtk/src/assistant.c:213 +#: ../../sflphone-client-gnome/src/assistant.c:219 msgid "Account" msgstr "帳戶" -#: ../sflphone-gtk/src/assistant.c:213 +#: ../../sflphone-client-gnome/src/assistant.c:219 msgid "Please select one of the following option:" msgstr "請選擇以下選項中的一個:" -#: ../sflphone-gtk/src/assistant.c:215 +#: ../../sflphone-client-gnome/src/assistant.c:221 msgid "Create a free SIP/IAX2 account on sflphone.org" msgstr "在sflphone.org上創建免費的SIP/IAX2帳戶" -#: ../sflphone-gtk/src/assistant.c:217 +#: ../../sflphone-client-gnome/src/assistant.c:223 msgid "Register an existing SIP or IAX2 account" msgstr "註冊已存在的SIP或IAX2帳戶" -#: ../sflphone-gtk/src/assistant.c:230 +#: ../../sflphone-client-gnome/src/assistant.c:236 msgid "SIP account configuration" msgstr "SIP帳戶配置" -#: ../sflphone-gtk/src/assistant.c:230 ../sflphone-gtk/src/assistant.c:305 +#: ../../sflphone-client-gnome/src/assistant.c:236 +#: ../../sflphone-client-gnome/src/assistant.c:332 msgid "Please fill the following information:" msgstr "請填寫如下信息:" -#: ../sflphone-gtk/src/assistant.c:238 ../sflphone-gtk/src/assistant.c:313 -#: ../sflphone-gtk/src/config/accountwindow.c:143 +#: ../../sflphone-client-gnome/src/assistant.c:244 +#: ../../sflphone-client-gnome/src/assistant.c:340 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:148 msgid "_Alias" msgstr "別稱(A)" -#: ../sflphone-gtk/src/assistant.c:246 ../sflphone-gtk/src/assistant.c:321 -#: ../sflphone-gtk/src/config/accountwindow.c:179 +#: ../../sflphone-client-gnome/src/assistant.c:252 +#: ../../sflphone-client-gnome/src/assistant.c:348 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:184 msgid "_Host name" msgstr "主机名稱(H)" -#: ../sflphone-gtk/src/assistant.c:254 ../sflphone-gtk/src/assistant.c:329 -#: ../sflphone-gtk/src/config/accountwindow.c:187 +#: ../../sflphone-client-gnome/src/assistant.c:260 +#: ../../sflphone-client-gnome/src/assistant.c:356 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:192 msgid "_User name" msgstr "使用者名稱(U)" -#: ../sflphone-gtk/src/assistant.c:264 ../sflphone-gtk/src/assistant.c:339 -#: ../sflphone-gtk/src/config/accountwindow.c:198 +#: ../../sflphone-client-gnome/src/assistant.c:276 +#: ../../sflphone-client-gnome/src/assistant.c:371 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:207 msgid "_Password" msgstr "密碼(P)" -#: ../sflphone-gtk/src/assistant.c:282 +#: ../../sflphone-client-gnome/src/assistant.c:294 +#: ../../sflphone-client-gnome/src/assistant.c:387 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:223 +msgid "_Voicemail number" +msgstr "語音郵箱(V)" + +#: ../../sflphone-client-gnome/src/assistant.c:309 msgid "Optional Email Address " msgstr "可選郵件地址 " -#: ../sflphone-gtk/src/assistant.c:282 +#: ../../sflphone-client-gnome/src/assistant.c:309 msgid "This email address will be use to send your voicemail messages" msgstr "這個郵件地址將被用來發送您的語音郵箱消息" -#: ../sflphone-gtk/src/assistant.c:290 +#: ../../sflphone-client-gnome/src/assistant.c:317 msgid "_Email" msgstr "郵件(E)" -#: ../sflphone-gtk/src/assistant.c:305 +#: ../../sflphone-client-gnome/src/assistant.c:332 msgid "IAX2 account configuration" msgstr "IAX2帳戶配置" -#: ../sflphone-gtk/src/assistant.c:360 -#: ../sflphone-gtk/src/config/configwindow.c:837 +#: ../../sflphone-client-gnome/src/assistant.c:405 +#: ../../sflphone-client-gnome/src/config/configwindow.c:863 msgid "Network Address Translation" msgstr "網路地址分析" -#: ../sflphone-gtk/src/assistant.c:360 +#: ../../sflphone-client-gnome/src/assistant.c:405 msgid "You should probably enable this if you are behind a firewall." msgstr "如果你使用網路防火牆,你很有可能需要設定該項." -#: ../sflphone-gtk/src/assistant.c:369 -#: ../sflphone-gtk/src/config/configwindow.c:499 +#: ../../sflphone-client-gnome/src/assistant.c:414 +#: ../../sflphone-client-gnome/src/config/configwindow.c:516 msgid "E_nable STUN" msgstr "啟用STUN(n)" -#: ../sflphone-gtk/src/assistant.c:376 +#: ../../sflphone-client-gnome/src/assistant.c:421 msgid "_STUN server" msgstr "STUN伺服器(S)" -#: ../sflphone-gtk/src/assistant.c:390 +#: ../../sflphone-client-gnome/src/assistant.c:435 msgid "Account Registration" msgstr "帳戶註冊" -#: ../sflphone-gtk/src/assistant.c:390 +#: ../../sflphone-client-gnome/src/assistant.c:435 msgid "Congratulations!" msgstr "恭喜!" -#: ../sflphone-gtk/src/context-menu.c:296 ../sflphone-gtk/src/menus.c:308 -#: ../sflphone-gtk/src/menus.c:791 -msgid "_Pick up" -msgstr "撥出(P)" - -#: ../sflphone-gtk/src/context-menu.c:308 ../sflphone-gtk/src/menus.c:318 -#: ../sflphone-gtk/src/menus.c:803 -msgid "_Hang up" -msgstr "放下(H)" - -#: ../sflphone-gtk/src/context-menu.c:320 ../sflphone-gtk/src/menus.c:328 -#: ../sflphone-gtk/src/menus.c:815 -msgid "On _Hold" -msgstr "待机" - -#: ../sflphone-gtk/src/context-menu.c:332 ../sflphone-gtk/src/menus.c:340 -#: ../sflphone-gtk/src/menus.c:827 -msgid "_Record" -msgstr "記錄(R)" - -#: ../sflphone-gtk/src/errors.c:28 +#: ../../sflphone-client-gnome/src/errors.c:28 msgid "" -"<b>ALSA notification</b>\n" +"ALSA notification\n" "\n" "Error while opening playback device" msgstr "" -"<b>ALSA提示</b>\n" +"ALSA提示\n" "\n" "打開回放設備時出錯" -#: ../sflphone-gtk/src/errors.c:31 +#: ../../sflphone-client-gnome/src/errors.c:31 msgid "" -"<b>ALSA notification</b>\n" +"ALSA notification\n" "\n" "Error while opening capture device" msgstr "" -"<b>ALSA提示</b>\n" +"ALSA提示\n" "\n" "打開采集設備時出錯" -#: ../sflphone-gtk/src/errors.c:34 +#: ../../sflphone-client-gnome/src/errors.c:34 msgid "" -"<b>Pulseaudio notification</b>\n" +"Pulseaudio notification\n" "\n" "Pulseaudio is not running" msgstr "" +"Pulseaudio提示\n" +"\n" +"Pulseaudio未運行" -#: ../sflphone-gtk/src/mainwindow.c:70 +#: ../../sflphone-client-gnome/src/mainwindow.c:70 msgid "There is one call in progress." msgstr "有一個電話正在處理中." -#: ../sflphone-gtk/src/mainwindow.c:74 +#: ../../sflphone-client-gnome/src/mainwindow.c:74 msgid "There are calls in progress." msgstr "有電話正在處理中." -#: ../sflphone-gtk/src/mainwindow.c:83 +#: ../../sflphone-client-gnome/src/mainwindow.c:83 msgid "Do you still want to quit?" msgstr "確認要退出?" -#: ../sflphone-gtk/src/menus.c:131 +#: ../../sflphone-client-gnome/src/mainwindow.c:296 +msgid "SFLphone Error" +msgstr "SFLphone 出錯" + +#: ../../sflphone-client-gnome/src/menus.c:134 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols." msgstr "SFLphone是一個VoIP客戶端,它兼容SIP和IAX2协议." -#: ../sflphone-gtk/src/menus.c:134 +#: ../../sflphone-client-gnome/src/menus.c:137 msgid "About SFLphone" msgstr "有關SFLphone" -#: ../sflphone-gtk/src/menus.c:157 +#: ../../sflphone-client-gnome/src/menus.c:161 msgid "_Help" msgstr "幫助(H)" -#: ../sflphone-gtk/src/menus.c:296 ../sflphone-gtk/src/menus.c:949 +#: ../../sflphone-client-gnome/src/menus.c:300 +#: ../../sflphone-client-gnome/src/menus.c:971 msgid "_New call" msgstr "新電話(N)" -#: ../sflphone-gtk/src/menus.c:354 -msgid "_Account Assistant" -msgstr "帳戶向導(A)" +#: ../../sflphone-client-gnome/src/menus.c:312 +#: ../../sflphone-client-gnome/src/menus.c:803 +msgid "_Pick up" +msgstr "撥出(P)" -#: ../sflphone-gtk/src/menus.c:384 +#: ../../sflphone-client-gnome/src/menus.c:322 +#: ../../sflphone-client-gnome/src/menus.c:815 +msgid "_Hang up" +msgstr "放下(H)" + +#: ../../sflphone-client-gnome/src/menus.c:332 +#: ../../sflphone-client-gnome/src/menus.c:827 +msgid "On _Hold" +msgstr "待机" + +#: ../../sflphone-client-gnome/src/menus.c:344 +#: ../../sflphone-client-gnome/src/menus.c:839 +msgid "_Record" +msgstr "記錄(R)" + +#: ../../sflphone-client-gnome/src/menus.c:358 +msgid "_Account creation wizard" +msgstr "帳戶創建向導(A)" + +#: ../../sflphone-client-gnome/src/menus.c:388 msgid "_Call" msgstr "電話" -#: ../sflphone-gtk/src/menus.c:557 +#: ../../sflphone-client-gnome/src/menus.c:561 msgid "_Clear history" msgstr "清空曆史記錄(C)" -#: ../sflphone-gtk/src/menus.c:569 +#: ../../sflphone-client-gnome/src/menus.c:573 msgid "_Accounts" msgstr "帳戶(A)" -#: ../sflphone-gtk/src/menus.c:584 +#: ../../sflphone-client-gnome/src/menus.c:588 msgid "_Edit" msgstr "編輯(E)" -#: ../sflphone-gtk/src/menus.c:644 +#: ../../sflphone-client-gnome/src/menus.c:649 msgid "_Dialpad" msgstr "撥號面板" -#: ../sflphone-gtk/src/menus.c:656 +#: ../../sflphone-client-gnome/src/menus.c:661 msgid "_Volume controls" msgstr "音量控制(V)" -#: ../sflphone-gtk/src/menus.c:665 -msgid "_Search contact" -msgstr "搜尋歷史(S)" - -#: ../sflphone-gtk/src/menus.c:673 +#: ../../sflphone-client-gnome/src/menus.c:679 msgid "_View" msgstr "查看(V)" -#: ../sflphone-gtk/src/menus.c:885 +#: ../../sflphone-client-gnome/src/menus.c:899 msgid "_Call back" msgstr "回叫(C)" -#: ../sflphone-gtk/src/sflnotify.c:34 ../sflphone-gtk/src/sflnotify.c:100 +#: ../../sflphone-client-gnome/src/menus.c:1082 +msgid "Edit phone" +msgstr "編輯電話" + +#: ../../sflphone-client-gnome/src/menus.c:1093 +msgid "Edit the phone number before making a call" +msgstr "撥出電話前編輯電話號碼" + +#: ../../sflphone-client-gnome/src/sflnotify.c:38 +#: ../../sflphone-client-gnome/src/sflnotify.c:105 #, c-format msgid "%s account: %s" msgstr "%s 帳戶: %s" -#: ../sflphone-gtk/src/sflnotify.c:37 +#: ../../sflphone-client-gnome/src/sflnotify.c:42 #, c-format msgid "<i>From:</i> %s" msgstr "<i>撥入方:</i> %s" -#: ../sflphone-gtk/src/sflnotify.c:52 +#: ../../sflphone-client-gnome/src/sflnotify.c:57 msgid "Accept" msgstr "接受" -#: ../sflphone-gtk/src/sflnotify.c:53 +#: ../../sflphone-client-gnome/src/sflnotify.c:58 msgid "Refuse" msgstr "拒絕" -#: ../sflphone-gtk/src/sflnotify.c:54 ../sflphone-gtk/src/sflnotify.c:117 -#: ../sflphone-gtk/src/sflnotify.c:154 +#: ../../sflphone-client-gnome/src/sflnotify.c:59 +#: ../../sflphone-client-gnome/src/sflnotify.c:122 +#: ../../sflphone-client-gnome/src/sflnotify.c:159 msgid "Ignore" msgstr "忽略" -#: ../sflphone-gtk/src/sflnotify.c:136 +#: ../../sflphone-client-gnome/src/sflnotify.c:141 #, c-format msgid "Calling with %s account <i>%s</i>" msgstr "使用%s帳戶<i>%s</i>呼叫" -#: ../sflphone-gtk/src/sflnotify.c:140 +#: ../../sflphone-client-gnome/src/sflnotify.c:145 msgid "Current account" msgstr "當前帳戶" -#: ../sflphone-gtk/src/sflnotify.c:169 +#: ../../sflphone-client-gnome/src/sflnotify.c:174 msgid "You haven't setup any accounts" msgstr "你沒有設置任何帳戶" -#: ../sflphone-gtk/src/sflnotify.c:209 +#: ../../sflphone-client-gnome/src/sflnotify.c:214 msgid "You have no registered accounts" msgstr "未發現已註冊帳戶" -#: ../sflphone-gtk/src/sliders.c:161 +#: ../../sflphone-client-gnome/src/sliders.c:161 msgid "Speakers volume" msgstr "揚聲器音量" -#: ../sflphone-gtk/src/sliders.c:163 +#: ../../sflphone-client-gnome/src/sliders.c:163 msgid "Mic volume" msgstr "話筒音量" -#: ../sflphone-gtk/src/statusicon.c:91 +#: ../../sflphone-client-gnome/src/statusicon.c:91 msgid "_Show main window" msgstr "顯示主窗口(S)" -#: ../sflphone-gtk/src/statusicon.c:124 +#: ../../sflphone-client-gnome/src/statusicon.c:124 #, c-format -msgid "SFLphone - %i accounts registered" -msgstr "SFLphone - %i 個帳戶已註冊" +msgid "SFLphone - %i accounts configured" +msgstr "SFLphone - %i 個帳戶已配置" -#: ../sflphone-gtk/src/timestamp.c:46 +#: ../../sflphone-client-gnome/src/timestamp.c:46 msgid "<small>Missed call</small>" msgstr "<small>未接電話</small>" -#: ../sflphone-gtk/src/timestamp.c:64 +#: ../../sflphone-client-gnome/src/timestamp.c:64 #, c-format msgid "<small>Duration:</small> %s" msgstr "<small>時長:</small> %s" -#: ../sflphone-gtk/src/toolbar.c:49 +#: ../../sflphone-client-gnome/src/toolbar.c:50 #, c-format msgid "\"Voicemail\" <%s>" msgstr "\"語音郵件\" <%s>" -#: ../sflphone-gtk/src/toolbar.c:175 ../sflphone-gtk/src/toolbar.c:177 +#: ../../sflphone-client-gnome/src/toolbar.c:176 +#: ../../sflphone-client-gnome/src/toolbar.c:178 msgid "Place a call" msgstr "打電話" -#: ../sflphone-gtk/src/toolbar.c:184 ../sflphone-gtk/src/toolbar.c:186 +#: ../../sflphone-client-gnome/src/toolbar.c:185 +#: ../../sflphone-client-gnome/src/toolbar.c:187 msgid "Pick up" msgstr "接電話" -#: ../sflphone-gtk/src/toolbar.c:194 ../sflphone-gtk/src/toolbar.c:196 +#: ../../sflphone-client-gnome/src/toolbar.c:195 +#: ../../sflphone-client-gnome/src/toolbar.c:197 msgid "Hang up" msgstr "放電話" -#: ../sflphone-gtk/src/toolbar.c:204 ../sflphone-gtk/src/toolbar.c:206 +#: ../../sflphone-client-gnome/src/toolbar.c:205 +#: ../../sflphone-client-gnome/src/toolbar.c:207 msgid "Off Hold" msgstr "恢复通話" -#: ../sflphone-gtk/src/toolbar.c:215 ../sflphone-gtk/src/toolbar.c:217 +#: ../../sflphone-client-gnome/src/toolbar.c:216 +#: ../../sflphone-client-gnome/src/toolbar.c:218 msgid "On Hold" msgstr "待机" -#: ../sflphone-gtk/src/toolbar.c:228 ../sflphone-gtk/src/toolbar.c:230 +#: ../../sflphone-client-gnome/src/toolbar.c:229 +#: ../../sflphone-client-gnome/src/toolbar.c:231 msgid "Transfer" msgstr "轉接" -#: ../sflphone-gtk/src/toolbar.c:240 ../sflphone-gtk/src/toolbar.c:242 +#: ../../sflphone-client-gnome/src/toolbar.c:241 +#: ../../sflphone-client-gnome/src/toolbar.c:243 msgid "History" msgstr "歷史" -#: ../sflphone-gtk/src/toolbar.c:251 ../sflphone-gtk/src/toolbar.c:253 +#: ../../sflphone-client-gnome/src/toolbar.c:252 +#: ../../sflphone-client-gnome/src/toolbar.c:254 msgid "Address book" msgstr "地址簿" -#: ../sflphone-gtk/src/toolbar.c:258 ../sflphone-gtk/src/toolbar.c:262 +#: ../../sflphone-client-gnome/src/toolbar.c:260 +#: ../../sflphone-client-gnome/src/toolbar.c:264 msgid "Voicemail" msgstr "語音郵件" -#: ../sflphone-gtk/src/toolbar.c:270 +#: ../../sflphone-client-gnome/src/toolbar.c:272 msgid "Record a call" msgstr "記錄通話" -#: ../sflphone-gtk/src/contacts/history.c:75 -#: ../sflphone-gtk/src/contacts/searchbar.c:39 -#: ../sflphone-gtk/src/contacts/searchbar.c:65 -msgid "Search" -msgstr "搜尋" - -#: ../sflphone-gtk/src/config/accountwindow.c:103 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:108 msgid "Account settings" msgstr "帳戶設置" -#: ../sflphone-gtk/src/config/accountwindow.c:115 -msgid "Account parameters" +#: ../../sflphone-client-gnome/src/config/accountwindow.c:120 +msgid "Account Parameters" msgstr "帳戶相關參數" -#: ../sflphone-gtk/src/config/accountwindow.c:137 -msgid "_Enabled" -msgstr "啟用(E)" +#: ../../sflphone-client-gnome/src/config/accountwindow.c:142 +msgid "_Enable this account" +msgstr "啟用該賬戶(E)" -#: ../sflphone-gtk/src/config/accountwindow.c:151 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:156 msgid "_Protocol" msgstr "協議(P)" -#: ../sflphone-gtk/src/config/accountwindow.c:169 +#: ../../sflphone-client-gnome/src/config/accountwindow.c:174 msgid "Unknown" msgstr "未知" -#: ../sflphone-gtk/src/config/accountwindow.c:209 -msgid "_Voicemail box #" -msgstr "語音郵箱(V)" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:265 +#: ../../sflphone-client-gnome/src/config/configwindow.c:732 +msgid "General" +msgstr "常用配置" -#: ../sflphone-gtk/src/config/addressbook-config.c:105 -msgid "Search Parameters" -msgstr "搜尋相關參數" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:276 +msgid "_Use Evolution address books" +msgstr "使用Evolution地址薄(U)" -#: ../sflphone-gtk/src/config/addressbook-config.c:116 -msgid "Maximum result number for a request: " -msgstr "最大打出電話數目" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:283 +msgid "Download limit:" +msgstr "下載上限:" -#: ../sflphone-gtk/src/config/addressbook-config.c:127 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:294 msgid "_Display contact photo if available" msgstr "如果可以則顯示聯繫人照片(D)" -#: ../sflphone-gtk/src/config/addressbook-config.c:132 -msgid "Search for and display: " -msgstr "搜尋並顯示:" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:301 +msgid "Fields" +msgstr "字段" + +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:311 +msgid "Use the following fields from Evolution's address books:" +msgstr "使用Evolution地址薄中的如下字段:" -#: ../sflphone-gtk/src/config/addressbook-config.c:135 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:316 msgid "_Business phone" msgstr "商務電話(B)" -#: ../sflphone-gtk/src/config/addressbook-config.c:140 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:321 msgid "_Home phone" msgstr "家庭電話(H)" -#: ../sflphone-gtk/src/config/addressbook-config.c:145 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:326 msgid "_Mobile phone" msgstr "移動電話(M)" -#: ../sflphone-gtk/src/config/audioconf.c:154 -#, c-format -msgid "audio device index for output = %d\n" -msgstr "音訊設備索引輸出 = %d\n" +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:333 +msgid "Address Books" +msgstr "地址簿" + +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:343 +msgid "Select which Evolution address books to use:" +msgstr "選擇使用如下Evolution地址薄:" -#: ../sflphone-gtk/src/config/audioconf.c:562 +#: ../../sflphone-client-gnome/src/config/addressbook-config.c:377 +#: ../../sflphone-client-gnome/src/config/audioconf.c:574 msgid "Name" msgstr "名稱" -#: ../sflphone-gtk/src/config/audioconf.c:567 +#: ../../sflphone-client-gnome/src/config/audioconf.c:155 +#, c-format +msgid "audio device index for output = %d" +msgstr "音訊設備輸出索引 = %d" + +#: ../../sflphone-client-gnome/src/config/audioconf.c:579 msgid "Frequency" msgstr "顰律" -#: ../sflphone-gtk/src/config/audioconf.c:572 +#: ../../sflphone-client-gnome/src/config/audioconf.c:584 msgid "Bitrate" msgstr "比率" -#: ../sflphone-gtk/src/config/audioconf.c:577 +#: ../../sflphone-client-gnome/src/config/audioconf.c:589 msgid "Bandwidth" msgstr "顰寬" -#: ../sflphone-gtk/src/config/audioconf.c:637 +#: ../../sflphone-client-gnome/src/config/audioconf.c:652 msgid "Pulseaudio" msgstr "Pulseaudio" -#: ../sflphone-gtk/src/config/audioconf.c:640 +#: ../../sflphone-client-gnome/src/config/audioconf.c:655 msgid "ALSA" msgstr "ALSA" -#: ../sflphone-gtk/src/config/audioconf.c:666 +#: ../../sflphone-client-gnome/src/config/audioconf.c:681 msgid "ALSA plugin" msgstr "ALSA插件" -#: ../sflphone-gtk/src/config/audioconf.c:688 +#: ../../sflphone-client-gnome/src/config/audioconf.c:703 msgid "Output" msgstr "輸出" -#: ../sflphone-gtk/src/config/audioconf.c:710 +#: ../../sflphone-client-gnome/src/config/audioconf.c:725 msgid "Input" msgstr "輸入" -#: ../sflphone-gtk/src/config/audioconf.c:743 +#: ../../sflphone-client-gnome/src/config/audioconf.c:758 msgid "_Enable ringtones" msgstr "啟動鈴聲(E)" -#: ../sflphone-gtk/src/config/audioconf.c:748 +#: ../../sflphone-client-gnome/src/config/audioconf.c:764 msgid "Choose a ringtone" msgstr "鈴聲選擇" -#: ../sflphone-gtk/src/config/audioconf.c:753 +#: ../../sflphone-client-gnome/src/config/audioconf.c:769 msgid "Audio Files" msgstr "音訊檔案" -#: ../sflphone-gtk/src/config/audioconf.c:770 -msgid "_Activate silence detection" -msgstr "啟用靜音檢測(A)" +#: ../../sflphone-client-gnome/src/config/audioconf.c:788 +msgid "_Voice Activity Detection" +msgstr "聲音狀態檢測(V)" + +#: ../../sflphone-client-gnome/src/config/audioconf.c:798 +msgid "_Noise Reduction (Narrow-Band Companding)" +msgstr "降噪處理-窄頻壓縮(N)" -#: ../sflphone-gtk/src/config/audioconf.c:798 +#: ../../sflphone-client-gnome/src/config/audioconf.c:826 msgid "Sound Manager" msgstr "聲音管理器" -#: ../sflphone-gtk/src/config/audioconf.c:805 +#: ../../sflphone-client-gnome/src/config/audioconf.c:833 msgid "ALSA configuration" msgstr "ALSA 配置" -#: ../sflphone-gtk/src/config/audioconf.c:815 +#: ../../sflphone-client-gnome/src/config/audioconf.c:850 msgid "Codecs" msgstr "編碼" -#: ../sflphone-gtk/src/config/audioconf.c:823 -msgid "Noise reduction" -msgstr "降噪" - -#: ../sflphone-gtk/src/config/audioconf.c:830 +#: ../../sflphone-client-gnome/src/config/audioconf.c:873 msgid "Ringtones" msgstr "鈴聲" -#: ../sflphone-gtk/src/config/configwindow.c:385 +#: ../../sflphone-client-gnome/src/config/configwindow.c:402 msgid "Protocol" msgstr "協議" -#: ../sflphone-gtk/src/config/configwindow.c:392 +#: ../../sflphone-client-gnome/src/config/configwindow.c:409 msgid "Status" msgstr "狀態" -#: ../sflphone-gtk/src/config/configwindow.c:495 +#: ../../sflphone-client-gnome/src/config/configwindow.c:512 msgid "Stun parameters will apply to each SIP account created." msgstr "Stun參數將應用於每一個註冊的SIP帳戶" -#: ../sflphone-gtk/src/config/configwindow.c:503 +#: ../../sflphone-client-gnome/src/config/configwindow.c:520 msgid "Enable it if you are behind a firewall" msgstr "當使用防火牆時,需要設定此項" -#: ../sflphone-gtk/src/config/configwindow.c:511 +#: ../../sflphone-client-gnome/src/config/configwindow.c:528 msgid "Format: name.server:port" msgstr "格式:name.server:port" -#: ../sflphone-gtk/src/config/configwindow.c:561 -msgid "Desktop Notification" +#: ../../sflphone-client-gnome/src/config/configwindow.c:579 +msgid "Desktop Notifications" msgstr "桌面提示" -#: ../sflphone-gtk/src/config/configwindow.c:569 -msgid "_Enable" -msgstr "啟用(E)" +#: ../../sflphone-client-gnome/src/config/configwindow.c:588 +msgid "_Enable notifications" +msgstr "啟動提示(E)" -#: ../sflphone-gtk/src/config/configwindow.c:574 -msgid "_Notify voice mails" -msgstr "語音郵件通知(N)" +#: ../../sflphone-client-gnome/src/config/configwindow.c:594 +msgid "Enable voicemail _notifications" +msgstr "啟用語音郵箱提示(n)" -#: ../sflphone-gtk/src/config/configwindow.c:580 +#: ../../sflphone-client-gnome/src/config/configwindow.c:605 msgid "System Tray Icon" msgstr "系統托盤圖標" -#: ../sflphone-gtk/src/config/configwindow.c:588 +#: ../../sflphone-client-gnome/src/config/configwindow.c:613 msgid "_Popup main window on incoming call" msgstr "來電話時彈出主視窗(P)" -#: ../sflphone-gtk/src/config/configwindow.c:593 +#: ../../sflphone-client-gnome/src/config/configwindow.c:618 msgid "Ne_ver popup main window" msgstr "從不彈出主視窗(v)" -#: ../sflphone-gtk/src/config/configwindow.c:597 -msgid "_Start hidden" -msgstr "啟動時隱藏(S)" +#: ../../sflphone-client-gnome/src/config/configwindow.c:622 +msgid "Hide SFLphone window on _startup" +msgstr "在啟動時隱藏SFLphone主窗口" -#: ../sflphone-gtk/src/config/configwindow.c:603 +#: ../../sflphone-client-gnome/src/config/configwindow.c:628 msgid "Calls History" msgstr "打電話歷史" -#: ../sflphone-gtk/src/config/configwindow.c:611 -msgid "_Maximum number of calls" -msgstr "最大打出電話數目(M)" +#: ../../sflphone-client-gnome/src/config/configwindow.c:636 +msgid "_History size limit" +msgstr "歷史記錄上限(H)" -#: ../sflphone-gtk/src/config/configwindow.c:627 +#: ../../sflphone-client-gnome/src/config/configwindow.c:653 msgid "PulseAudio sound server" msgstr "PulseAudio聲音伺服器" -#: ../sflphone-gtk/src/config/configwindow.c:635 -msgid "_Control running applications volume" -msgstr "控制正在運行中的應用程式的音量(C)" +#: ../../sflphone-client-gnome/src/config/configwindow.c:661 +msgid "Mute other applications during a _call" +msgstr "當有來電時靜音其它應用程序(c)" -#: ../sflphone-gtk/src/config/configwindow.c:648 +#: ../../sflphone-client-gnome/src/config/configwindow.c:674 msgid "SIP Port" msgstr "SIP端口" -#: ../sflphone-gtk/src/config/configwindow.c:661 +#: ../../sflphone-client-gnome/src/config/configwindow.c:687 msgid "Port:" msgstr "端口:" -#: ../sflphone-gtk/src/config/configwindow.c:706 -msgid "General" -msgstr "常用配置" - -#: ../sflphone-gtk/src/config/configwindow.c:717 -msgid "_Destination folder" -msgstr "目標文件夾(D)" +#: ../../sflphone-client-gnome/src/config/configwindow.c:742 +msgid "_Recordings folder" +msgstr "記錄文件夾(R)" -#: ../sflphone-gtk/src/config/configwindow.c:723 +#: ../../sflphone-client-gnome/src/config/configwindow.c:748 msgid "Select a folder" msgstr "選擇文件夾" -#: ../sflphone-gtk/src/config/configwindow.c:748 +#: ../../sflphone-client-gnome/src/config/configwindow.c:773 msgid "Preferences" msgstr "屬性" -#: ../sflphone-gtk/src/config/configwindow.c:768 +#: ../../sflphone-client-gnome/src/config/configwindow.c:793 msgid "General Settings" msgstr "常用配置" -#: ../sflphone-gtk/src/config/configwindow.c:773 +#: ../../sflphone-client-gnome/src/config/configwindow.c:798 msgid "Audio Settings" msgstr "音訊配置" -#: ../sflphone-gtk/src/config/configwindow.c:778 -msgid "Record" +#: ../../sflphone-client-gnome/src/config/configwindow.c:803 +msgid "Recordings" msgstr "記錄" -#: ../sflphone-gtk/src/config/configwindow.c:783 +#: ../../sflphone-client-gnome/src/config/configwindow.c:808 msgid "Address Book" msgstr "地址簿" -#: ../sflphone-gtk/src/config/configwindow.c:788 +#: ../../sflphone-client-gnome/src/config/configwindow.c:813 msgid "Hooks" msgstr "鉤鍵" -#: ../sflphone-gtk/src/config/configwindow.c:814 +#: ../../sflphone-client-gnome/src/config/configwindow.c:840 msgid "Accounts" msgstr "帳戶" -#: ../sflphone-gtk/src/config/configwindow.c:826 -msgid "Accounts previously setup" -msgstr "以前帳戶設定" +#: ../../sflphone-client-gnome/src/config/configwindow.c:852 +msgid "Configured Accounts" +msgstr "已配置帳戶" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:130 +msgid "URL Passing" +msgstr "傳輸URL" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:140 +#, c-format +msgid "" +"SFLphone can run custom commands if incoming calls come with an URL " +"attached.\n" +"In this case, %s will be replaced with the passed URL." +msgstr "" +"當來電有附加的URL時,SFLphone可運行客戶命令.\n" +"在此情況下,傳輸的URL會被替換成%s." + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:143 +msgid "Trigger on specific _SIP header" +msgstr "激活指定的SIP頭(S)" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:155 +msgid "Trigger on _IAX2 URL" +msgstr "激活IAX2 URL(I)" + +#: ../../sflphone-client-gnome/src/config/hooks-config.c:160 +msgid "_Command to run: " +msgstr "運行命令(C):" -#: ../sflphone-gtk/src/config/hooks-config.c:92 -msgid "URL argument" -msgstr "URL參數" +#: ../../sflphone-client-gnome/src/config/hooks-config.c:168 +msgid "Phone Number Rewriting" +msgstr "重設電話號碼" -#: ../sflphone-gtk/src/config/hooks-config.c:102 -msgid "_SIP protocol" -msgstr "SIP 協議(S)" +#: ../../sflphone-client-gnome/src/config/hooks-config.c:178 +msgid "_Prefix dialed numbers with:" +msgstr "號碼前綴:" -#: ../sflphone-gtk/src/config/hooks-config.c:107 -msgid "_IAX2 protocol" -msgstr "IAX2 協議(I)" +#: ../../sflphone-client-gnome/src/contacts/history.c:83 +#: ../../sflphone-client-gnome/src/contacts/searchbar.c:123 +msgid "Search history" +msgstr "搜尋歷史記錄" -#: ../sflphone-gtk/src/config/hooks-config.c:113 -msgid "_SIP Header: " -msgstr "SIP消息頭(S):" +#: ../../sflphone-client-gnome/src/contacts/history.c:83 +#: ../../sflphone-client-gnome/src/contacts/searchbar.c:110 +msgid "Search contact" +msgstr "搜尋聯繫人(S)" -#: ../sflphone-gtk/src/config/hooks-config.c:120 -msgid "_Command: " -msgstr "命令(C):" +#~ msgid "Registered to %s (%s)" +#~ msgstr "註冊到 %s (%s)" +#~ msgid "%s account- %s %s" +#~ msgstr "%s 帳戶- %s\t\t%s" -#~ msgid "SFLphone 0.9.3" -#~ msgstr "SFLphone 0.9.2" +#~ msgid "Books" +#~ msgstr "鉤鍵" + +#~ msgid "_Enable" +#~ msgstr "啟用(E)" + +#~ msgid "_Notify voice mails" +#~ msgstr "語音郵件通知(N)" + +#~ msgid "_Start hidden" +#~ msgstr "啟動時隱藏(S)" + +#~ msgid "_Maximum number of calls" +#~ msgstr "最大打出電話數目(M)" + +#~ msgid "_Control running applications volume" +#~ msgstr "控制正在運行中的應用程式的音量(C)" + +#~ msgid "Account previously setup" +#~ msgstr "帳戶以前設定" + +#~ msgid "URL argument" +#~ msgstr "URL參數" + +#~ msgid "_SIP protocol" +#~ msgstr "SIP 協議(S)" + +#~ msgid "_SIP Header: " +#~ msgstr "SIP消息頭(S):" + +#~ msgid "_IAX2 protocol" +#~ msgstr "IAX2 協議(I)" + +#~ msgid "Search" +#~ msgstr "搜尋" + +#~ msgid "_Enabled" +#~ msgstr "啟用(E)" + +#~ msgid "%s account- %s" +#~ msgstr "%s 帳戶- %s" + +#~ msgid "Noise reduction" +#~ msgstr "降噪" + +#~ msgid "_Destination folder" +#~ msgstr "目標文件夾(D)" + +#~ msgid "_Account Assistant" +#~ msgstr "帳戶向導(A)" #~ msgid "Setup Accounts" #~ msgstr "設定帳戶" +#~ msgid "Search Parameters" +#~ msgstr "搜尋相關參數" + +#~ msgid "Maximum result number for a request: " +#~ msgstr "最大打出電話數目" + +#~ msgid "Search for and display: " +#~ msgstr "搜尋並顯示:" + #~ msgid "_STUN Server" #~ msgstr "STUN伺服器(S)" #~ msgid "Apply" #~ msgstr "套用" - -#~ msgid "History empty" -#~ msgstr "無曆史記錄" - diff --git a/sflphone-common/src/audio/alsalayer.cpp b/sflphone-common/src/audio/alsalayer.cpp index 2d2811b363722e41d4a2d774182eec2ef21681e4..2a3939bfc37fd012bb27fb36ef56b3ba9a705786 100644 --- a/sflphone-common/src/audio/alsalayer.cpp +++ b/sflphone-common/src/audio/alsalayer.cpp @@ -50,7 +50,7 @@ AlsaLayer::~AlsaLayer (void) closeLayer(); } - void +bool AlsaLayer::closeLayer() { _debugAlsa("Close ALSA streams\n"); @@ -73,6 +73,8 @@ AlsaLayer::closeLayer() _CaptureHandle = 0; _PlaybackHandle = 0; + + return true; } bool diff --git a/sflphone-common/src/audio/alsalayer.h b/sflphone-common/src/audio/alsalayer.h index 1a392f691e0534eeff24ce80b20c2b8bc5c6768a..27259dd0c4f707dbaba833d929dab3c44d496c57 100644 --- a/sflphone-common/src/audio/alsalayer.h +++ b/sflphone-common/src/audio/alsalayer.h @@ -48,7 +48,7 @@ class AlsaLayer : public AudioLayer { */ ~AlsaLayer(void); - void closeLayer( void ); + bool closeLayer( void ); /** * Check if no devices are opened, otherwise close them. diff --git a/sflphone-common/src/audio/audiolayer.h b/sflphone-common/src/audio/audiolayer.h index 679738b68c7fc15242eff85fd5e52c6068687f2f..f7d5404ef44218de97f5e3f4ae2233b29bd82a34 100644 --- a/sflphone-common/src/audio/audiolayer.h +++ b/sflphone-common/src/audio/audiolayer.h @@ -76,7 +76,7 @@ class AudioLayer { */ virtual ~AudioLayer(void) {} - virtual void closeLayer( void ) = 0; + virtual bool closeLayer( void ) = 0; /** * Check if no devices are opened, otherwise close them. diff --git a/sflphone-common/src/audio/audiortp.cpp b/sflphone-common/src/audio/audiortp.cpp index fb35df75d1097f42e86df5326cfa4f1d40cfeefd..72e640e93f3105c1352cc770e40146119268f5ba 100644 --- a/sflphone-common/src/audio/audiortp.cpp +++ b/sflphone-common/src/audio/audiortp.cpp @@ -81,7 +81,7 @@ AudioRtp::createNewSession (SIPCall *ca) { } -void +bool AudioRtp::closeRtpSession () { ost::MutexLock m(_threadMutex); @@ -96,6 +96,8 @@ AudioRtp::closeRtpSession () { } AudioLayer* audiolayer = Manager::instance().getAudioDriver(); audiolayer->stopStream(); + + return true; } @@ -186,7 +188,6 @@ AudioRtpRTX::initBuffers() void AudioRtpRTX::initAudioRtpSession (void) { - _debug("************* initAudioRtpSession *******************\n"); try { if (_ca == 0) { return; } @@ -194,11 +195,8 @@ AudioRtpRTX::initAudioRtpSession (void) if (_audiocodec == NULL) { return; } - _debug("************* get codec info *******************\n"); _codecSampleRate = _audiocodec->getClockRate(); _codecFrameSize = _audiocodec->getFrameSize(); - _debug("_codecFrameSize: %i\n", _codecFrameSize); - _debug("_codecSampleRate: %i\n", _codecSampleRate); ost::InetHostAddress remote_ip(_ca->getLocalSDP()->get_remote_ip().c_str()); @@ -242,8 +240,6 @@ AudioRtpRTX::initAudioRtpSession (void) _sessionSend->setMark(true); } else { - //_debug("AudioRTP Thread: Added session destination %s\n", remote_ip.getHostname() ); - if (!_session->addDestination (remote_ip, (unsigned short)_ca->getLocalSDP()->get_remote_audio_port() )) { return; } @@ -416,7 +412,7 @@ AudioRtpRTX::sendSessionFromMic(int timestamp) // encode divise by two // Send encoded audio sample over the network - if (compSize > nbSamplesMax) { _debug("! ARTP: %d should be %d\n", compSize, nbSamplesMax);} + // if (compSize > nbSamplesMax) { _debug("! ARTP: %d should be %d\n", compSize, nbSamplesMax);} if (!_sym) { _sessionSend->putData(timestamp, micDataEncoded, compSize); } else { @@ -578,8 +574,13 @@ AudioRtpRTX::run () { step = _codecFrameSize; int countTime = 0; // for receive - - int threadSleep = (_codecFrameSize * 1000) / _codecSampleRate; + + int threadSleep = 0; + if (_codecSampleRate != 0) + threadSleep = (_codecFrameSize * 1000) / _codecSampleRate; + else + threadSleep = _layerFrameSize; + TimerPort::setTimer(threadSleep); audiolayer->startStream(); @@ -610,11 +611,11 @@ AudioRtpRTX::run () { if(sessionWaiting == 1){ - // _debug("Record TWO buffer \n"); - _ca->recAudio.recData(spkrDataDecoded,micData,_nSamplesSpkr,_nSamplesMic); + // Record mic and speaker during conversation + _ca->recAudio.recData(spkrDataConverted,micData,_nSamplesSpkr,_nSamplesMic); } else { - // _debug("Record ONE buffer \n"); + // Record mic only while leaving a message _ca->recAudio.recData(micData,_nSamplesMic); } diff --git a/sflphone-common/src/audio/audiortp.h b/sflphone-common/src/audio/audiortp.h index 377da181a17c6642044f99e20b152781c81c3555..34d8b3ee1e7c982e029aeb7e35e81b367218c56f 100644 --- a/sflphone-common/src/audio/audiortp.h +++ b/sflphone-common/src/audio/audiortp.h @@ -200,7 +200,7 @@ class AudioRtp { /** * Close a RTP session and kills the remaining threads */ - void closeRtpSession( void ); + bool closeRtpSession( void ); /** * Start recording diff --git a/sflphone-common/src/audio/audiostream.cpp b/sflphone-common/src/audio/audiostream.cpp index 01a56c974a63f160cb7cb1f8db1ebf3bd33c0690..08587fdb310803fe561ae208c025869f6b7ab86b 100644 --- a/sflphone-common/src/audio/audiostream.cpp +++ b/sflphone-common/src/audio/audiostream.cpp @@ -32,27 +32,52 @@ AudioStream::AudioStream( pa_context* context, int type, std::string desc, doubl channel_map.channels = 1; pa_cvolume_set( &_volume , 1 , PA_VOLUME_NORM ) ; // * vol / 100 ; - _audiostream = createStream( context ); + _context = context; + + // connectStream(); } AudioStream::~AudioStream() { - _debug("Destroy audio streams\n"); - pa_stream_disconnect( pulseStream() ); - pa_stream_unref( pulseStream() ); -} + disconnectStream(); +} + +bool +AudioStream::connectStream() +{ + ost::MutexLock guard(_mutex); + + if(!_audiostream) + _audiostream = createStream( _context ); + else { + disconnectStream(); + _audiostream = createStream( _context ); + } + + return true; +} -void -AudioStream::disconnect( void ) +bool +AudioStream::disconnectStream( void ) { + ost::MutexLock guard(_mutex); + _debug("Destroy audio streams\n"); - pa_stream_disconnect( pulseStream() ); - pa_stream_unref( pulseStream() ); + pa_stream_disconnect( _audiostream ); + pa_stream_unref( _audiostream ); + + _audiostream = NULL; + + return true; } + + void AudioStream::stream_state_callback( pa_stream* s, void* user_data UNUSED ) { + + _debug("AudioStream::stream_state_callback :: The state of the stream changed\n"); assert(s); switch(pa_stream_get_state(s)){ @@ -79,12 +104,20 @@ AudioStream::stream_state_callback( pa_stream* s, void* user_data UNUSED ) } } +pa_stream_state_t +AudioStream::getStreamState(void) { + + ost::MutexLock guard(_mutex); + return pa_stream_get_state(_audiostream); +} pa_stream* AudioStream::createStream( pa_context* c ) { + ost::MutexLock guard(_mutex); + pa_stream* s; //pa_cvolume cv; diff --git a/sflphone-common/src/audio/audiostream.h b/sflphone-common/src/audio/audiostream.h index 121b87ad9c70a4f5ef09c7865a9af2ac166c06d3..f21e4b0d27654a5efa5f28e919de6817de075d0b 100644 --- a/sflphone-common/src/audio/audiostream.h +++ b/sflphone-common/src/audio/audiostream.h @@ -27,6 +27,8 @@ #include "ringbuffer.h" #include "audioloop.h" +#include <cc++/thread.h> + /** * This data structure contains the different king of audio streams available */ @@ -68,10 +70,15 @@ class AudioStream { */ int putUrgent( void* buffer , int toCopy ); + /** + * Connect the pulse audio stream + */ + bool connectStream(); + /** * Disconnect the pulseaudio stream */ - void disconnect(); + bool disconnectStream(); /** * Accessor: Get the pulseaudio stream object @@ -94,6 +101,14 @@ class AudioStream { void setVolume( double pc ) { _volume.values[0] *= pc/100; } pa_cvolume getVolume( void ) { return _volume; } + /** + * Accessor + * @return stream state + */ + pa_stream_state_t getStreamState(void); + + + private: // Copy Constructor @@ -124,6 +139,11 @@ class AudioStream { */ void write( void ); + /** + * The pulse audio context + */ + pa_context* _context; + /** * The pulse audio object */ @@ -146,6 +166,8 @@ class AudioStream { pa_sample_spec sample_spec ; pa_cvolume _volume; + ost::Mutex _mutex; + }; #endif // _AUDIO_STREAM_H diff --git a/sflphone-common/src/audio/pulselayer.cpp b/sflphone-common/src/audio/pulselayer.cpp index 02c107ea976fd5ac17cc30a6363637a894be5ebb..fd71c8473568e414169c5be2eb3cd498f71fb2e9 100644 --- a/sflphone-common/src/audio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulselayer.cpp @@ -41,6 +41,7 @@ static void audioCallback ( pa_stream* s, size_t bytes, void* userdata ) { PulseLayer::streamState = 0; _debug("PulseLayer::Pulse audio constructor: Create context\n"); + } // Destructor @@ -48,27 +49,31 @@ PulseLayer::~PulseLayer (void) { closeLayer (); - pa_context_disconnect( context ); - pa_context_unref( context ); + // pa_context_disconnect( context ); + // pa_context_unref( context ); } - void +bool PulseLayer::closeLayer( void ) { _debug("PulseLayer::closeLayer :: Destroy pulselayer\n"); - playback->disconnect(); - record->disconnect(); + playback->disconnectStream(); + record->disconnectStream(); - while(PulseLayer::streamState != 2) - ; + while(PulseLayer::streamState != 2); PulseLayer::streamState = 0; //TODO Remove this ugly hack sleep(2); + + pa_context_disconnect( context ); + pa_context_unref( context ); + + return true; } - void +void PulseLayer::connectPulseAudioServer( void ) { _debug("PulseLayer::connectPulseAudioServer \n"); @@ -123,33 +128,45 @@ void PulseLayer::context_state_callback( pa_context* c, void* user_data ) } } -void PulseLayer::disconnectPulseAudioServer( void ) +bool PulseLayer::disconnectPulseAudioServer( void ) { - _debug(" PulseLayer::disconnectPulseAudioServer( void ) \n"); - if( playback ) - delete playback; playback=NULL; + _debug(" PulseLayer::disconnectPulseAudioServer( void ) \n"); - if( record ) + if( playback ){ + // playback->disconnectStream(); + delete playback; playback=NULL; + } + if( record ){ + // record->disconnectStream(); delete record; record=NULL; + } + if (!playback && !record) + return true; + else + return false; } -void PulseLayer::createStreams( pa_context* c ) +bool PulseLayer::createStreams( pa_context* c ) { _debug("PulseLayer::createStreams \n"); playback = new AudioStream(c, PLAYBACK_STREAM, PLAYBACK_STREAM_NAME, _manager->getSpkrVolume()); + playback->connectStream(); pa_stream_set_write_callback( playback->pulseStream(), audioCallback, this); // pa_stream_set_overflow_callback( playback->pulseStream() , overflow , this); // pa_stream_set_suspended_callback( playback->pulseStream(), stream_suspended_callback, this); record = new AudioStream(c, CAPTURE_STREAM, CAPTURE_STREAM_NAME , _manager->getMicVolume()); + record->connectStream(); pa_stream_set_read_callback( record->pulseStream() , audioCallback, this); // pa_stream_set_underflow_callback( record->pulseStream() , underflow , this); // pa_stream_set_suspended_callback(record->pulseStream(), stream_suspended_callback, this); pa_threaded_mainloop_signal(m , 0); + + return true; } @@ -177,7 +194,7 @@ bool PulseLayer::openDevice(int indexIn UNUSED, int indexOut UNUSED, int sampleR // startStream(); _debug("Connection Done!! \n"); - return true; + } void PulseLayer::closeCaptureStream( void ) diff --git a/sflphone-common/src/audio/pulselayer.h b/sflphone-common/src/audio/pulselayer.h index ce2bc2e6af79d49dd5d049f952896c2b03956c44..beae9eacc2b5b7400aca9ccd6d25a79b98dcd1c8 100644 --- a/sflphone-common/src/audio/pulselayer.h +++ b/sflphone-common/src/audio/pulselayer.h @@ -37,7 +37,7 @@ class PulseLayer : public AudioLayer { PulseLayer(ManagerImpl* manager); ~PulseLayer(void); - void closeLayer( void ); + bool closeLayer( void ); /** * Check if no devices are opened, otherwise close them. @@ -153,7 +153,7 @@ class PulseLayer : public AudioLayer { * Create the audio streams into the given context * @param c The pulseaudio context */ - void createStreams( pa_context* c ); + bool createStreams( pa_context* c ); /** * Drop the pending frames and close the playback device @@ -168,7 +168,7 @@ class PulseLayer : public AudioLayer { /** * Close the connection with the local pulseaudio server */ - void disconnectPulseAudioServer( void ); + bool disconnectPulseAudioServer( void ); /** * Get some information about the pulseaudio server @@ -192,9 +192,12 @@ class PulseLayer : public AudioLayer { int spkrVolume; int micVolume; + // private: public: static int streamState; + + friend class AudioLayerTest; }; #endif // _PULSE_LAYER_H_ diff --git a/sflphone-common/src/call.h b/sflphone-common/src/call.h index 836ee3daa6cf444ee65e1531d9f5ac6d8a7d89a8..1480ca94328452966ba009f84170d9f0c7b8efb3 100644 --- a/sflphone-common/src/call.h +++ b/sflphone-common/src/call.h @@ -26,7 +26,7 @@ #include "plug-in/audiorecorder/audiorecord.h" -#define IP_TO_IP_PATTERN "ip:" +#define IP_TO_IP_PATTERN "sip:" #define CallConfigNULL NULL /* diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp index 91f76a3ad4c1cbda12a377cf14c4195347a70018..510d97419acfa1e7fba26271586f9cfadcc531da 100644 --- a/sflphone-common/src/dbus/configurationmanager.cpp +++ b/sflphone-common/src/dbus/configurationmanager.cpp @@ -36,6 +36,7 @@ const char* ConfigurationManager::SERVER_PATH = "/org/sflphone/SFLphone/Configur std::map< std::string, std::string > ConfigurationManager::getAccountDetails( const std::string& accountID ) { + _debug("ConfigurationManager::getAccountDetails\n"); return Manager::instance().getAccountDetails(accountID); } @@ -50,6 +51,7 @@ ConfigurationManager::setAccountDetails( const std::string& accountID, void ConfigurationManager::sendRegister( const std::string& accountID, const int32_t& expire ) { + _debug("ConfigurationManager::sendRegister received\n"); Manager::instance().sendRegister(accountID, expire); } @@ -109,12 +111,14 @@ ConfigurationManager::getRingtoneList( ) std::vector< std::string > ConfigurationManager::getCodecList( ) { + _debug("ConfigurationManager::getRingtoneList received\n"); return Manager::instance().getCodecList(); } std::vector< std::string > ConfigurationManager::getCodecDetails( const int32_t& payload ) { + _debug("ConfigurationManager::getRingtoneList received\n"); return Manager::instance().getCodecDetails( payload ); } diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 994d60541b9c4db7ca61639a2c8205bd3523a0c4..1dce0670c722c6944db39deef445d3054a83e5af 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -307,21 +307,25 @@ ManagerImpl::answerCall(const CallID& id) bool ManagerImpl::hangupCall(const CallID& id) { - _debug("ManagerImpl::hangupCall(): This function is called when user hangup \n"); + _debug("ManagerImpl::hangupCall()\n"); PulseLayer *pulselayer; AccountID accountid; bool returnValue; + AudioLayer *audiolayer; stopTone(false); /* Broadcast a signal over DBus */ if (_dbus) _dbus->getCallManager()->callStateChanged(id, "HUNGUP"); + _debug("Stop audio stream\n"); + audiolayer = getAudioDriver(); + audiolayer->stopStream(); + /* Direct IP to IP call */ if (getConfigFromCall (id) == Call::IPtoIP) { returnValue = SIPVoIPLink::instance (AccountNULL)->hangup (id); } - /* Classic call, attached to an account */ else { accountid = getAccountFromCall( id ); @@ -340,6 +344,8 @@ ManagerImpl::hangupCall(const CallID& id) if(pulselayer) pulselayer->restorePulseAppsVolume(); } + + return returnValue; } @@ -810,10 +816,19 @@ ManagerImpl::peerHungupCall(const CallID& id) AccountID accountid; bool returnValue; - accountid = getAccountFromCall( id ); - if (accountid == AccountNULL) { - _debug("peerHungupCall: Call doesn't exists\n"); - return; + /* Direct IP to IP call */ + if (getConfigFromCall (id) == Call::IPtoIP) { + SIPVoIPLink::instance (AccountNULL)->hangup (id); + } + + else + { + accountid = getAccountFromCall( id ); + if (accountid == AccountNULL) { + _debug("peerHungupCall: Call doesn't exists\n"); + return; + } + returnValue = getAccountLink(accountid)->peerHungup(id); } /* Broadcast a signal over DBus */ @@ -824,8 +839,6 @@ ManagerImpl::peerHungupCall(const CallID& id) switchCall(""); } - returnValue = getAccountLink(accountid)->peerHungup(id); - removeWaitingCall(id); removeCallAccount(id); @@ -1040,6 +1053,7 @@ ManagerImpl::ringtone() AudioLoop* ManagerImpl::getTelephoneTone() { + // _debug("ManagerImpl::getTelephoneTone()\n"); if(_telephoneTone != 0) { ost::MutexLock m(_toneMutex); return _telephoneTone->getCurrentTone(); @@ -1052,6 +1066,7 @@ ManagerImpl::getTelephoneTone() AudioLoop* ManagerImpl::getTelephoneFile() { + // _debug("ManagerImpl::getTelephoneFile()\n"); ost::MutexLock m(_toneMutex); if(_audiofile.isStarted()) { return &_audiofile; @@ -1209,6 +1224,7 @@ ManagerImpl::initConfigFile ( bool load_user_value ) fill_config_str(CONFIG_ACCOUNTS_ORDER, ""); section = ADDRESSBOOK; + fill_config_int (ADDRESSBOOK_ENABLE, YES_STR); fill_config_int (ADDRESSBOOK_MAX_RESULTS, "25"); fill_config_int (ADDRESSBOOK_DISPLAY_CONTACT_PHOTO, NO_STR); fill_config_int (ADDRESSBOOK_DISPLAY_PHONE_BUSINESS, YES_STR); @@ -1861,7 +1877,7 @@ int ManagerImpl::app_is_running( std::string process ) /** * Initialization: Main Thread */ - void +bool ManagerImpl::initAudioDriver(void) { @@ -1889,13 +1905,17 @@ ManagerImpl::initAudioDriver(void) if (_audiodriver == 0) { _debug("Init audio driver error\n"); + return false; } else { error = getAudioDriver()->getErrorMessage(); if (error == -1) { _debug("Init audio driver: %i\n", error); + return false; } } + return true; + } /** @@ -1992,7 +2012,7 @@ void ManagerImpl::switchAudioManager (void) // need to stop audio streams if there is currently no call if( (type != PULSEAUDIO) && (!hasCurrentCall())) { - _debug("There is currently a call!!\n"); + // _debug("There is currently a call!!\n"); _audiodriver->stopStream(); } @@ -2522,11 +2542,11 @@ ManagerImpl::getAccountIdFromNameAndServer(const std::string& userName, const st } } - // We failed! Then only match the username + // We failed! Then only match the hostname for(iter = _accountMap.begin(); iter != _accountMap.end(); ++iter) { account = dynamic_cast<SIPAccount *>(iter->second); if ( account != NULL ) { - if(account->userMatch(userName)) + if(account->hostnameMatch(server)) return iter->first; } } @@ -2654,6 +2674,7 @@ std::map<std::string, int32_t> ManagerImpl::getAddressbookSettings () { std::map<std::string, int32_t> settings; + settings.insert (std::pair<std::string, int32_t> ("ADDRESSBOOK_ENABLE", getConfigInt (ADDRESSBOOK, ADDRESSBOOK_ENABLE)) ); settings.insert (std::pair<std::string, int32_t> ("ADDRESSBOOK_MAX_RESULTS", getConfigInt (ADDRESSBOOK, ADDRESSBOOK_MAX_RESULTS)) ); settings.insert (std::pair<std::string, int32_t> ("ADDRESSBOOK_DISPLAY_CONTACT_PHOTO", getConfigInt (ADDRESSBOOK, ADDRESSBOOK_DISPLAY_CONTACT_PHOTO))); settings.insert (std::pair<std::string, int32_t> ("ADDRESSBOOK_DISPLAY_PHONE_BUSINESS", getConfigInt (ADDRESSBOOK, ADDRESSBOOK_DISPLAY_PHONE_BUSINESS))); @@ -2665,6 +2686,7 @@ std::map<std::string, int32_t> ManagerImpl::getAddressbookSettings () { void ManagerImpl::setAddressbookSettings (const std::map<std::string, int32_t>& settings){ + setConfig(ADDRESSBOOK, ADDRESSBOOK_ENABLE, (*settings.find("ADDRESSBOOK_ENABLE")).second); setConfig(ADDRESSBOOK, ADDRESSBOOK_MAX_RESULTS, (*settings.find("ADDRESSBOOK_MAX_RESULTS")).second); setConfig(ADDRESSBOOK, ADDRESSBOOK_DISPLAY_CONTACT_PHOTO , (*settings.find("ADDRESSBOOK_DISPLAY_CONTACT_PHOTO")).second); setConfig(ADDRESSBOOK, ADDRESSBOOK_DISPLAY_PHONE_BUSINESS , (*settings.find("ADDRESSBOOK_DISPLAY_PHONE_BUSINESS")).second); @@ -2726,8 +2748,9 @@ void ManagerImpl::check_call_configuration (const CallID& id, const std::string /* Check if the call is an IP-to-IP call */ /* For an IP-to-IP call, we don't need any account */ /* Pattern looked for : ip:xxx.xxx.xxx.xxx */ - pattern = to.substr (0,3); + pattern = to.substr (0,4); if (pattern==IP_TO_IP_PATTERN) { + _debug("Sending Sip Call \n"); config = Call::IPtoIP; } else { config = Call::Classic; diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h index 2337cc4bbf86889bc37095554ddcaacb53078920..10caf62b48c5e85df232aa12820e1398424bb9ae 100644 --- a/sflphone-common/src/managerimpl.h +++ b/sflphone-common/src/managerimpl.h @@ -881,6 +881,11 @@ class ManagerImpl { */ AccountMap getSipAccountMap( void ); + /* + * Initialize audiodriver + */ + bool initAudioDriver(void); + private: /** @@ -906,11 +911,7 @@ class ManagerImpl { */ void initAudioCodec(void); - /* - * Initialize audiodriver - */ - void initAudioDriver(void); - + /* * Initialize zeroconf module and scanning */ diff --git a/sflphone-common/src/sipaccount.cpp b/sflphone-common/src/sipaccount.cpp index b72eb15e0f9bcbb78c60230b0ecddf2b18af0467..31502460a398788f81478dd451fd3f99ea2718f8 100644 --- a/sflphone-common/src/sipaccount.cpp +++ b/sflphone-common/src/sipaccount.cpp @@ -87,7 +87,7 @@ void SIPAccount::loadConfig() bool SIPAccount::fullMatch(const std::string& username, const std::string& hostname) { - return (username == getUsername() && hostname == getHostname()); + return (userMatch (username) && hostnameMatch (hostname)); } bool SIPAccount::userMatch(const std::string& username) @@ -95,3 +95,8 @@ bool SIPAccount::userMatch(const std::string& username) return (username == getUsername()); } +bool SIPAccount::hostnameMatch(const std::string& hostname) +{ + return (hostname == getHostname()); +} + diff --git a/sflphone-common/src/sipaccount.h b/sflphone-common/src/sipaccount.h index a49af2d00864a29c674a2ac152dcd2663d75620c..a9925d734f8d67a46c4d438fdfd3154a9046594a 100644 --- a/sflphone-common/src/sipaccount.h +++ b/sflphone-common/src/sipaccount.h @@ -76,6 +76,7 @@ class SIPAccount : public Account bool fullMatch(const std::string& username, const std::string& hostname); bool userMatch(const std::string& username); + bool hostnameMatch(const std::string& hostname); pjsip_regc* getRegistrationInfo( void ) { return _regc; } void setRegistrationInfo( pjsip_regc *regc ) { _regc = regc; } diff --git a/sflphone-common/src/sipvoiplink.cpp b/sflphone-common/src/sipvoiplink.cpp index c1820b60cd438d69d494a82d3daf526e6e2c856b..9cc3d9ca8b5bd9fb2c9a5030bc40504fd0551f5e 100644 --- a/sflphone-common/src/sipvoiplink.cpp +++ b/sflphone-common/src/sipvoiplink.cpp @@ -578,19 +578,23 @@ SIPVoIPLink::hangup(const CallID& id) call = getSIPCall(id); if (call==0) { _debug("! SIP Error: Call doesn't exist\n"); return false; } - + // User hangup current call. Notify peer status = pjsip_inv_end_session(call->getInvSession(), 404, NULL, &tdata); if(status != PJ_SUCCESS) return false; + if(tdata == NULL) return true; + // _debug("Some tdata info: %",); + status = pjsip_inv_send_msg(call->getInvSession(), tdata); if(status != PJ_SUCCESS) return false; + call->getInvSession()->mod_data[getModId()] = NULL; @@ -807,6 +811,8 @@ SIPVoIPLink::transfer(const CallID& id, const std::string& to) * voiplink from the call any more. But the voiplink is useful! */ pjsip_evsub_set_mod_data(sub, getModId(), this); + + _debug ("SIP port listener = %i ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", _localExternPort); /* * Create REFER request. @@ -840,7 +846,7 @@ SIPVoIPLink::refuse (const CallID& id) pj_status_t status; pjsip_tx_data *tdata; - _debug("SIPVoIPLink::refuse() : the call is refused \n"); + call = getSIPCall(id); if (call==0) { @@ -1098,7 +1104,7 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam SIPVoIPLink::SIPCallClosed(SIPCall *call) { - _debug("SIPVoIPLink::SIPCallClosed():: function called when peer hangup"); + // it was without did before //SIPCall* call = findSIPCallWithCid(event->cid); if (!call) { return; } @@ -1198,7 +1204,6 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam } bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) { - SIPCall *call; pj_status_t status; std::string uri_from, uri_to, hostname; @@ -1221,8 +1226,9 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam uri_from = "sip:" + hostname + "@" + getLocalIPAddress() ; // Generate the from URI - uri_to = "sip:" + to.substr (3, to.length()); + uri_to = "sip:" + to.substr (4, to.length()); + _debug("get local ip address: %s \n", getLocalIPAddress().c_str()); // Generate the to URI setCallAudioLocal(call, getLocalIPAddress(), useStun(), getStunServer()); @@ -1233,7 +1239,8 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam call->getLocalSDP()->create_initial_offer(); // Generate the contact URI - uri_contact << "<" << uri_from << ":" << call->getLocalSDP()->get_local_extern_audio_port() << ">"; + // uri_contact << "<" << uri_from << ":" << call->getLocalSDP()->get_local_extern_audio_port() << ">"; + uri_contact << "<" << uri_from << ":" << _localExternPort << ">"; // pjsip need the from and to information in pj_str_t format pj_strdup2(_pool, &from, uri_from.data()); @@ -1490,8 +1497,8 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam status = pjsip_xfer_init_module(_endpt); PJ_ASSERT_RETURN( status == PJ_SUCCESS, 1 ); - status = enable_dns_srv_resolver (_endpt, &p_resv); - PJ_ASSERT_RETURN( status == PJ_SUCCESS, 1 ); + //status = enable_dns_srv_resolver (_endpt, &p_resv); + //PJ_ASSERT_RETURN( status == PJ_SUCCESS, 1 ); // Init the callback for INVITE session: pj_bzero(&inv_cb, sizeof (inv_cb)); @@ -1848,6 +1855,7 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam 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) { @@ -1903,6 +1911,13 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam } void call_on_tsx_changed(pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_event *e){ + + if (tsx->role==PJSIP_ROLE_UAS && tsx->state==PJSIP_TSX_STATE_TRYING && + pjsip_method_cmp(&tsx->method, &pjsip_refer_method)==0) + { + /** Handle the refer method **/ + onCallTransfered (inv, e->body.tsx_state.src.rdata); + } } void regc_cb(struct pjsip_regc_cbparam *param){ @@ -1990,7 +2005,7 @@ void call_on_tsx_changed(pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_e sip_uri = (pjsip_sip_uri *) pjsip_uri_get_uri(uri); userName = std::string(sip_uri->user.ptr, sip_uri->user.slen); - server = std::string(sip_uri->host.ptr, sip_uri->host.slen) ; + server = std::string(sip_uri->host.ptr, sip_uri->host.slen); std::cout << userName << " ------------------ " << server << std::endl; @@ -2021,6 +2036,7 @@ void call_on_tsx_changed(pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_e uri = rdata->msg_info.from->uri; sip_uri = (pjsip_sip_uri *) pjsip_uri_get_uri(uri); + /* Retrieve only the fisrt characters */ caller = std::string(sip_uri->user.ptr, sip_uri->user.slen); callerServer = std::string(sip_uri->host.ptr, sip_uri->host.slen); @@ -2376,7 +2392,7 @@ void call_on_tsx_changed(pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_e // _debug(" %s \n", event->body.rx_msg.rdata->msg_info.msg_buf); - _debug("UserAgent: Transfer callback is involved!\n"); + // _debug("UserAgent: pjsip_evsub_get_state_name: %s \n", pjsip_evsub_get_state_name(sub)); /* @@ -2450,34 +2466,42 @@ void call_on_tsx_changed(pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_e /* When subscription is terminated, clear the xfer_sub member of * the inv_data. */ + if (pjsip_evsub_get_state(sub) == PJSIP_EVSUB_STATE_TERMINATED) { pjsip_evsub_set_mod_data(sub, _mod_ua.id, NULL); _debug("UserAgent: Xfer client subscription terminated\n"); } - + if (!link || !event) { /* Application is not interested with call progress status */ _debug("UserAgent: Either link or event is empty!\n"); return; } + /* This better be a NOTIFY request */ if (event->type == PJSIP_EVENT_TSX_STATE && event->body.tsx_state.type == PJSIP_EVENT_RX_MSG) { - + pjsip_rx_data *rdata; rdata = event->body.tsx_state.src.rdata; + /* Check if there's body */ msg = rdata->msg_info.msg; body = msg->body; if (!body) { - _debug("UserAgent: Warning! Received NOTIFY without message body\n"); - return; + // if (call->getCallConfiguration () == Call::IPtoIP) { + // _debug("UserAgent: IptoIp NOTIFY without message body\n"); + // } + // else{ + _debug("UserAgent: Warning! Received NOTIFY without message body\n"); + return; + // } } @@ -2503,7 +2527,7 @@ void call_on_tsx_changed(pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_e status_line.code = 500; status_line.reason = *pjsip_get_status_text(500); } - + if(event->body.rx_msg.rdata->msg_info.msg_buf != NULL) { request = event->body.rx_msg.rdata->msg_info.msg_buf; @@ -2522,7 +2546,7 @@ void call_on_tsx_changed(pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_e } } - + // Get current call SIPCall *call = dynamic_cast<SIPCall *>(link->getCall(Manager::instance().getCurrentCallId())); if(!call) { diff --git a/sflphone-common/src/sipvoiplink.h b/sflphone-common/src/sipvoiplink.h index 028fcd8a2fd6173135816df5c1682348813daaa4..56d17b4b979dc98b20090f316c66fcdae83da380 100644 --- a/sflphone-common/src/sipvoiplink.h +++ b/sflphone-common/src/sipvoiplink.h @@ -42,7 +42,7 @@ class AudioRtp; #define RANDOM_SIP_PORT rand() % 64000 + 1024 // To set the verbosity. From 0 (min) to 6 (max) -#define PJ_LOG_LEVEL 0 +#define PJ_LOG_LEVEL 6 /** * @file sipvoiplink.h diff --git a/sflphone-common/src/user_cfg.h b/sflphone-common/src/user_cfg.h index d0522277ea45fa17b22d0f732f00f82a20bb9e78..ee708017505aac2ce43a148e89b77db15dcb8401 100644 --- a/sflphone-common/src/user_cfg.h +++ b/sflphone-common/src/user_cfg.h @@ -73,6 +73,7 @@ #define STUN_SERVER "STUN.server" #define ADDRESSBOOK "Addressbook" /** Address book section */ +#define ADDRESSBOOK_ENABLE "Addressbook.enable" /** Enable address book */ #define ADDRESSBOOK_MAX_RESULTS "Addressbook.max_results" #define ADDRESSBOOK_DISPLAY_CONTACT_PHOTO "Addressbook.contact_photo" #define ADDRESSBOOK_DISPLAY_PHONE_BUSINESS "Addressbook.phone_business" @@ -89,7 +90,7 @@ #define PHONE_NUMBER_HOOK_ADD_PREFIX "Hooks.phone_number_add_prefix" #define EMPTY_FIELD "" /** Default value for empty field */ -#define DFT_STUN_SERVER "stun.ekiga.net" /** Default STUN server address */ +#define DFT_STUN_SERVER "stun.sflphone.org" /** Default STUN server address */ #define YES_STR "1" /** Default YES value */ #define NO_STR "0" /** Default NO value */ #define DFT_PULSE_LENGTH_STR "250" /** Default DTMF lenght */ diff --git a/sflphone-common/test/Makefile.am b/sflphone-common/test/Makefile.am index 8f3003587d6e748791b0407c6465ad85d2d6343d..d44914c98b8eef43b4bb2b4357622c146660b20d 100644 --- a/sflphone-common/test/Makefile.am +++ b/sflphone-common/test/Makefile.am @@ -1,6 +1,6 @@ include ../globals.mak -bin_PROGRAMS = numbercleanerTester pluginmanagerTester hookmanagerTester +bin_PROGRAMS = numbercleanerTester pluginmanagerTester hookmanagerTester audiolayerTester rtpTester OBJECT_FILES= \ ../src/sflphoned-managerimpl.o \ @@ -78,3 +78,41 @@ hookmanagerTester_LDADD = \ -luuid \ $(OBJECT_FILES) +audiolayerTester_SOURCES = \ + audiolayerTest.h \ + audiolayerTest.cpp \ + TestMain.cpp + +audiolayerTester_LDADD = \ + ../src/libsflphone.la \ + $(SFLPHONE_LIBS) $(ZEROCONFLIB) $(LIB_DNSSD) \ + @ALSA_LIBS@ \ + @PULSEAUDIO_LIBS@ \ + @CPPUNIT_LIBS@ \ + @CCEXT2_LIBS@ \ + @CCGNU2_LIBS@ \ + @CCRTP_LIBS@ \ + @SAMPLERATE_LIBS@ \ + $(PJSIP_LIBS) \ + -luuid \ + $(OBJECT_FILES) + +rtpTester_SOURCES = \ + rtpTest.h \ + rtpTest.cpp \ + TestMain.cpp + +rtpTester_LDADD = \ + ../src/libsflphone.la \ + $(SFLPHONE_LIBS) $(ZEROCONFLIB) $(LIB_DNSSD) \ + @ALSA_LIBS@ \ + @PULSEAUDIO_LIBS@ \ + @CPPUNIT_LIBS@ \ + @CCEXT2_LIBS@ \ + @CCGNU2_LIBS@ \ + @CCRTP_LIBS@ \ + @SAMPLERATE_LIBS@ \ + $(PJSIP_LIBS) \ + -luuid \ + $(OBJECT_FILES) + diff --git a/sflphone-common/test/audiolayerTest.cpp b/sflphone-common/test/audiolayerTest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4a4b6396f32bc50f9f9a036a9455d139dbb8dad1 --- /dev/null +++ b/sflphone-common/test/audiolayerTest.cpp @@ -0,0 +1,206 @@ +/* + * Copyright (C) 2009 Savoir-Faire Linux inc. + * Author: Emmanuel Milou <emmanuel.milou@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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <stdio.h> +#include <sstream> + +#include "audiolayerTest.h" + +#include <unistd.h> + + +using std::cout; +using std::endl; + + + +void AudioLayerTest::setUp(){ + + // Instanciate the manager + Manager::instance().initConfigFile(); + Manager::instance().init(); + + // _audiodriver = Manager::instance().getAudioDriver(); + + // std::string alsaPlugin; + // AlsaLayer *alsalayer; + + // int numCardIn, numCardOut, sampleRate, frameSize; + // layer = _audiodriver->getLayerType(); + + /* + alsaPlugin = Manager::instance().getConfigString( AUDIO , ALSA_PLUGIN ); + numCardIn = Manager::instance().getConfigInt( AUDIO , ALSA_CARD_ID_IN ); + numCardOut = Manager::instance().getConfigInt( AUDIO , ALSA_CARD_ID_OUT ); + sampleRate = Manager::instance().getConfigInt( AUDIO , ALSA_SAMPLE_RATE ); + if (sampleRate <=0 || sampleRate > 48000) { + sampleRate = 44100; + } + frameSize = Manager::instance().getConfigInt(AUDIO, ALSA_FRAME_SIZE ); + */ + + // get a pointer to the audio layer + // _audiodriver = Manager::instance().getAudioDriver(); + +} + +void AudioLayerTest::testAudioLayerConfig(){ + int sampling_rate = Manager::instance().getConfigInt(AUDIO, ALSA_SAMPLE_RATE); + int frame_size = Manager::instance().getConfigInt(AUDIO, ALSA_FRAME_SIZE); + + CPPUNIT_ASSERT(Manager::instance().getAudioDriver()->getSampleRate() == sampling_rate); + CPPUNIT_ASSERT(Manager::instance().getAudioDriver()->getFrameSize() == frame_size); +} + +void AudioLayerTest::testAudioLayerSwitch(){ + + _debug("---------- AudioLayerTest::testAudioLayerSwitch ---------------------------\n"); + + + int previous_layer = Manager::instance().getAudioDriver()->getLayerType(); + + for(int i = 0; i < 2; i++) { + _debug("---------- AudioLayerTest::testAudioLayerSwitch - %i -------------\n",i); + Manager::instance().switchAudioManager(); + if(previous_layer == ALSA) { + CPPUNIT_ASSERT(Manager::instance().getAudioDriver()->getLayerType() == PULSEAUDIO); + } + else { + CPPUNIT_ASSERT(Manager::instance().getAudioDriver()->getLayerType() == ALSA); + } + previous_layer = Manager::instance().getAudioDriver()->getLayerType(); + usleep(100000); + } +} + + + +void AudioLayerTest::testPulseConnect(){ + + _debug("---------- AudioLayerTest::testPulseConnect ---------------------------\n"); + + ManagerImpl* manager; + manager = &Manager::instance(); + + _pulselayer = new PulseLayer(manager); + + CPPUNIT_ASSERT(_pulselayer->getLayerType() == PULSEAUDIO); + + std::string alsaPlugin; + int numCardIn, numCardOut, sampleRate, frameSize; + + alsaPlugin = manager->getConfigString( AUDIO , ALSA_PLUGIN ); + numCardIn = manager->getConfigInt( AUDIO , ALSA_CARD_ID_IN ); + numCardOut = manager->getConfigInt( AUDIO , ALSA_CARD_ID_OUT ); + sampleRate = manager->getConfigInt( AUDIO , ALSA_SAMPLE_RATE ); + frameSize = manager->getConfigInt(AUDIO, ALSA_FRAME_SIZE ); + + CPPUNIT_ASSERT(_pulselayer->getPlaybackStream() == NULL); + CPPUNIT_ASSERT(_pulselayer->getRecordStream() == NULL); + + _pulselayer->setErrorMessage(-1); + try { + CPPUNIT_ASSERT(_pulselayer->openDevice(numCardIn, numCardOut, sampleRate, frameSize, SFL_PCM_BOTH, alsaPlugin) == true); + } + catch (...) { + _debug("Exception occured wile opening device! \n"); + } + + usleep(100000); + + CPPUNIT_ASSERT(_pulselayer->getPlaybackStream() != NULL); + CPPUNIT_ASSERT(_pulselayer->getRecordStream() != NULL); + + CPPUNIT_ASSERT(_pulselayer->getPlaybackStream()->pulseStream() != NULL); + CPPUNIT_ASSERT(_pulselayer->getRecordStream()->pulseStream() != NULL); + + // Must return Access failure "PA_ERR_ACCESS" == 2 + CPPUNIT_ASSERT(_pulselayer->getPlaybackStream()->getStreamState() == 2); + CPPUNIT_ASSERT(_pulselayer->getRecordStream()->getStreamState() == 2); + + CPPUNIT_ASSERT(_pulselayer->createStreams(_pulselayer->context) == true); + + // usleep(1000000); + + CPPUNIT_ASSERT(_pulselayer->getPlaybackStream()->pulseStream() != NULL); + CPPUNIT_ASSERT(_pulselayer->getPlaybackStream()->pulseStream() != NULL); + + // Must return No error "PA_OK" == 1 + CPPUNIT_ASSERT(_pulselayer->getPlaybackStream()->getStreamState() == 1); + CPPUNIT_ASSERT(_pulselayer->getRecordStream()->getStreamState() == 1); + + CPPUNIT_ASSERT(_pulselayer->getPlaybackStream()->disconnectStream() == true); + CPPUNIT_ASSERT(_pulselayer->getRecordStream()->disconnectStream() == true); + + // _debug("%i\n",_pulselayer->getPlaybackStream()->getStreamState()); + + CPPUNIT_ASSERT(_pulselayer->getPlaybackStream()->connectStream() == true); + CPPUNIT_ASSERT(_pulselayer->getRecordStream()->connectStream() == true); + + CPPUNIT_ASSERT(_pulselayer->getPlaybackStream()->getStreamState() == 1); + CPPUNIT_ASSERT(_pulselayer->getRecordStream()->getStreamState() == 1); + + CPPUNIT_ASSERT(_pulselayer->getPlaybackStream()->connectStream() == true); + CPPUNIT_ASSERT(_pulselayer->getRecordStream()->connectStream() == true); + + CPPUNIT_ASSERT(_pulselayer->getPlaybackStream()->getStreamState() == 1); + CPPUNIT_ASSERT(_pulselayer->getRecordStream()->getStreamState() == 1); + + // usleep(1000000); + CPPUNIT_ASSERT(_pulselayer->disconnectPulseAudioServer() == true); +} + + +void AudioLayerTest::testAlsaConnect(){ + + _debug("---------- AudioLayerTest::testAlsaConnect ---------------------------\n"); + + int layer = Manager::instance().getAudioDriver()->getLayerType(); + + int type, samplerate, framesize, numCardIn, numCardOut; + std::string alsaPlugin; + + if (layer != ALSA) { + Manager::instance().switchAudioManager(); + usleep(100000); + } + + // _audiolayer = Manager::instance().getAudioDriver(); + + // CPPUNIT_ASSERT(_audiolayer->closeLayer() == true); + // usleep(100000); + + // delete _audiolayer; _audiolayer == NULL; + + Manager::instance().setConfig( PREFERENCES, CONFIG_AUDIO, ALSA); + + + // _audiolayer->setErrorMessage(-1); + // CPPUNIT_ASSERT(Manager::instance().initAudioDriver() == true); + + // _audiolayer = Manager::instance().getAudioDriver(); + + // CPPUNIT_ASSERT(_audiolayer->getLayerType() == ALSA); + +} + +void AudioLayerTest::tearDown(){ + // Delete the audio recorder module + // delete _ar; _ar = NULL; +} diff --git a/sflphone-common/test/audiolayerTest.h b/sflphone-common/test/audiolayerTest.h new file mode 100644 index 0000000000000000000000000000000000000000..87c13a7a8503513d630042b24481ec71e68801e9 --- /dev/null +++ b/sflphone-common/test/audiolayerTest.h @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2009 Savoir-Faire Linux inc. + * Author: Emmanuel Milou <emmanuel.milou@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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +// Cppunit import +#include <cppunit/extensions/HelperMacros.h> +#include <cppunit/TestCaller.h> +#include <cppunit/TestCase.h> +#include <cppunit/TestSuite.h> + +#include <assert.h> + +// Application import +#include "manager.h" + +#include "config/config.h" +#include "user_cfg.h" + +#include "audio/audiolayer.h" +#include "audio/alsalayer.h" +#include "audio/pulselayer.h" + +/* + * @file audiorecorderTest.cpp + * @brief Regroups unitary tests related to the plugin manager. + */ + +#ifndef _AUDIOLAYER_TEST_ +#define _AUDIOLAYER_TEST_ + + + +class AudioLayerTest : public CppUnit::TestCase { + + /* + * Use cppunit library macros to add unit test the factory + */ + CPPUNIT_TEST_SUITE( AudioLayerTest ); + CPPUNIT_TEST( testAudioLayerConfig ); + // CPPUNIT_TEST( testAudioLayerSwitch ); + CPPUNIT_TEST( testPulseConnect ); + // CPPUNIT_TEST( testAlsaConnect ); + CPPUNIT_TEST_SUITE_END(); + + public: + AudioLayerTest() : CppUnit::TestCase("Audio Layer Tests") {} + + /* + * Code factoring - Common resources can be initialized here. + * This method is called by unitcpp before each test + */ + void setUp(); + + /* + * Code factoring - Common resources can be released here. + * This method is called by unitcpp after each test + */ + inline void tearDown(); + + void testAudioLayerConfig(); + void testAudioLayerSwitch(); + void testPulseConnect(); + void testAlsaConnect(); + + private: + + ManagerImpl* manager; + + PulseLayer* _pulselayer; + + int layer; +}; + +/* Register our test module */ +CPPUNIT_TEST_SUITE_REGISTRATION( AudioLayerTest ); + +#endif diff --git a/sflphone-common/test/audiorecorderTest.cpp b/sflphone-common/test/audiorecorderTest.cpp index 30650f9d0ee2c5d36fa45d8d40e02552de8a8481..9c0bf863edb284f29fcd5f7361c6ede3da6b68a8 100644 --- a/sflphone-common/test/audiorecorderTest.cpp +++ b/sflphone-common/test/audiorecorderTest.cpp @@ -13,7 +13,7 @@ * 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 + * along with this program; if not, write to the Free Software- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ diff --git a/sflphone-common/test/audiorecorderTest.h b/sflphone-common/test/audiorecorderTest.h index 1748bda1db973fd4063dda0872a90bf9c09af5e8..216b657079562007a1eb04955f390e3263ef1c87 100644 --- a/sflphone-common/test/audiorecorderTest.h +++ b/sflphone-common/test/audiorecorderTest.h @@ -1,4 +1,4 @@ -x/* +/* * Copyright (C) 2009 Savoir-Faire Linux inc. * Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> * diff --git a/sflphone-common/test/rtpTest.cpp b/sflphone-common/test/rtpTest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..335bb0a40bed53f92411265d2f66a9306bae03a1 --- /dev/null +++ b/sflphone-common/test/rtpTest.cpp @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2009 Savoir-Faire Linux inc. + * Author: Alexandre Savarda <emmanuel.milou@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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <stdio.h> +#include <sstream> +#include <ccrtp/rtp.h> + + +#include "rtpTest.h" + +#include <unistd.h> + + +using std::cout; +using std::endl; + + +void RtpTest::setUp(){ + + Manager::instance().initConfigFile(); + Manager::instance().init(); + + CallID cid = "123456"; + + audiortp = new AudioRtp(); + + sipcall = new SIPCall(cid, Call::Incoming, NULL); +} + +void RtpTest::testRtpInit() +{ + + _debug("------ void RtpTest::testRtpInit() ------\n"); + try { + + _debug("-------- Open Rtp Session ----------\n"); + CPPUNIT_ASSERT(audiortp->createNewSession(sipcall) == 0); + + } catch(...) { + + _debug("!!! Exception occured while Oppenning Rtp \n"); + + } + +} + + +void RtpTest::testRtpClose() +{ + + _debug("------ RtpTest::testRtpClose() ------"); + + try { + _debug("------ Close Rtp Session -------\n"); + CPPUNIT_ASSERT(audiortp->closeRtpSession()); + + } catch(...) { + + _debug("!!! Exception occured while closing Rtp \n"); + + } + +} + + +void RtpTest::tearDown(){ + + delete audiortp; audiortp = NULL; +} diff --git a/sflphone-common/test/rtpTest.h b/sflphone-common/test/rtpTest.h new file mode 100644 index 0000000000000000000000000000000000000000..b2d314a1c2968f2e1aa082bc3018ae7eb5158f09 --- /dev/null +++ b/sflphone-common/test/rtpTest.h @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2009 Savoir-Faire Linux inc. + * Author: Emmanuel Milou <emmanuel.milou@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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +// Cppunit import +#include <cppunit/extensions/HelperMacros.h> +#include <cppunit/TestCaller.h> +#include <cppunit/TestCase.h> +#include <cppunit/TestSuite.h> + +#include <assert.h> + +// Application import +#include "manager.h" +#include "audio/audiortp.h" +#include "../src/call.h" +#include "../src/sipcall.h" + +#include "config/config.h" +#include "user_cfg.h" + + + +/* + * @file audiorecorderTest.cpp + * @brief Regroups unitary tests related to the plugin manager. + */ + +#ifndef _RTP_TEST_ +#define _RTP_TEST_ + + + +class RtpTest : public CppUnit::TestCase { + + /* + * Use cppunit library macros to add unit test the factory + */ + CPPUNIT_TEST_SUITE( RtpTest ); + CPPUNIT_TEST( testRtpInit ); + CPPUNIT_TEST( testRtpClose ); + CPPUNIT_TEST_SUITE_END(); + + public: + RtpTest() : CppUnit::TestCase("Audio Layer Tests") {} + + /* + * Code factoring - Common resources can be initialized here. + * This method is called by unitcpp before each test + */ + void setUp(); + + /* + * Code factoring - Common resources can be released here. + * This method is called by unitcpp after each test + */ + inline void tearDown(); + + void testRtpInit(); + + void testRtpClose(); + + private: + + enum CallType {Incoming, Outgoing}; + + ManagerImpl* manager; + + AudioRtp *audiortp; + + SIPCall *sipcall; + +}; + +/* Register our test module */ +CPPUNIT_TEST_SUITE_REGISTRATION( RtpTest ); + +#endif diff --git a/src/audio/codecs/celtcodec.cpp b/src/audio/codecs/celtcodec.cpp deleted file mode 100644 index 3dc61c7c2b9a09b4b70302da013d269c3d773501..0000000000000000000000000000000000000000 --- a/src/audio/codecs/celtcodec.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) 2007-2009 Savoir-Faire Linux inc. - * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> - * Author: Emmanuel Milou <emmanuel.milou@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., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "audiocodec.h" -#include <cstdio> -#include <celt/celt.h> - - -class Celt : public AudioCodec{ - public: - Celt(int payload=0) - : AudioCodec(payload, "celt"), - _celt_frame_size(128) - { - _clockRate = 44100; - _channel = 1; - _bitrate = 0; - _bandwidth = 0; - initCelt(); - } - - Celt( const Celt& ); - Celt& operator=(const Celt&); - - void initCelt() { - printf("init celt"); - - mode = celt_mode_create(_clockRate, _channel, _celt_frame_size, NULL); - // celt_mode_info(mode, CELT_GET_LOOKAHEAD, &skip); - - if (mode == NULL) - { - printf("failed to create a mode\n"); - } - - // bytes_per_packet = 1024; - // if (bytes_per_packet < 0 || bytes_per_packet > MAX_PACKET) - // { - // printf ("bytes per packet must be between 0 and %d\n"); - // } - - // celt_mode_info(mode, CELT_GET_FRAME_SIZE, &frame_size); - // celt_mode_info(mode, CELT_GET_NB_CHANNELS, &_channel); - - enc = celt_encoder_create(mode); - dec = celt_decoder_create(mode); - - } - - ~Celt() - { - terminateCelt(); - } - - void terminateCelt() { - - celt_encoder_destroy(enc); - celt_decoder_destroy(dec); - } - - virtual int codecDecode (short *dst, unsigned char *src, unsigned int size) - { - int len = 0; - len = celt_decode(dec, src, size, (celt_int16_t*)dst); - return len; - } - - virtual int codecEncode (unsigned char *dst, short *src, unsigned int size) - { - int len = 0; - len = celt_encode(enc, (celt_int16_t *)src, NULL, dst, size); - return len; - } - - private: - - CELTMode *mode; - - CELTEncoder *enc; - CELTDecoder *dec; - - celt_int32_t _celt_frame_size; - celt_int32_t skip; - -}; - -// the class factories -extern "C" AudioCodec* create() { - return new Celt(115); -} - -extern "C" void destroy(AudioCodec* a) { - delete a; -} - diff --git a/src/audio/codecs/speexcodec_nb.cpp b/src/audio/codecs/speexcodec_nb.cpp deleted file mode 100644 index 72b3c36d0dadff319f236358b05be1e389f49ca4..0000000000000000000000000000000000000000 --- a/src/audio/codecs/speexcodec_nb.cpp +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (C) 2007-2009 Savoir-Faire Linux inc. - * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> - * Author: Emmanuel Milou <emmanuel.milou@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., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "audiocodec.h" -#include <cstdio> -#include <speex/speex.h> -#include <speex/speex_preprocess.h> - -class Speex : public AudioCodec{ - public: - Speex(int payload=0) - : AudioCodec(payload, "speex"), - _speexModePtr(NULL), - _speex_dec_bits(), - _speex_enc_bits(), - _speex_dec_state(), - _speex_enc_state(), - _speex_frame_size(), - _preprocess_state() - { - _clockRate = 8000; - _channel = 1; - _bitrate = 0; - _bandwidth = 0; - initSpeex(); - } - - Speex( const Speex& ); - Speex& operator=(const Speex&); - - void initSpeex() { - - int _samplingRate = 8000; - - // 8000 HZ --> Narrow-band mode - // TODO Manage the other modes - _speexModePtr = &speex_nb_mode; - // _speexModePtr = &speex_wb_mode; - - // Init the decoder struct - speex_bits_init(&_speex_dec_bits); - _speex_dec_state = speex_decoder_init(_speexModePtr); - - // Init the encoder struct - speex_bits_init(&_speex_enc_bits); - _speex_enc_state = speex_encoder_init(_speexModePtr); - - speex_encoder_ctl(_speex_enc_state,SPEEX_SET_SAMPLING_RATE,&_clockRate); - - speex_decoder_ctl(_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size); - -#ifdef HAVE_SPEEXDSP_LIB - - int enable = 1; - int quality = 10; - int complex = 10; - int attenuation = -10; - - speex_encoder_ctl(_speex_enc_state, SPEEX_SET_VAD, &enable); - speex_encoder_ctl(_speex_enc_state, SPEEX_SET_DTX, &enable); - speex_encoder_ctl(_speex_enc_state, SPEEX_SET_VBR_QUALITY, &quality); - speex_encoder_ctl(_speex_enc_state, SPEEX_SET_COMPLEXITY, &complex); - - // Init the decoder struct - speex_decoder_ctl(_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size); - - // Init the preprocess struct - _preprocess_state = speex_preprocess_state_init(_speex_frame_size,_clockRate); - speex_preprocess_ctl(_preprocess_state, SPEEX_PREPROCESS_SET_DENOISE, &enable); - speex_preprocess_ctl(_preprocess_state, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &attenuation); - speex_preprocess_ctl(_preprocess_state, SPEEX_PREPROCESS_SET_VAD, &enable); - speex_preprocess_ctl(_preprocess_state, SPEEX_PREPROCESS_SET_AGC, &enable); -#endif - - } - - ~Speex() - { - terminateSpeex(); - } - - void terminateSpeex() { - // Destroy the decoder struct - speex_bits_destroy(&_speex_dec_bits); - speex_decoder_destroy(_speex_dec_state); - _speex_dec_state = 0; - - // Destroy the encoder struct - speex_bits_destroy(&_speex_enc_bits); - speex_encoder_destroy(_speex_enc_state); - _speex_enc_state = 0; - } - - virtual int codecDecode (short *dst, unsigned char *src, unsigned int size) - { - - int ratio = 320 / _speex_frame_size; - speex_bits_read_from(&_speex_dec_bits, (char*)src, size); - speex_decode_int(_speex_dec_state, &_speex_dec_bits, dst); - - return _speex_frame_size * ratio; - } - - virtual int codecEncode (unsigned char *dst, short *src, unsigned int size) - { - speex_bits_reset(&_speex_enc_bits); - -#ifdef HAVE_SPEEXDSP_LIB - - speex_preprocess_run(_preprocess_state, src); -#endif - - speex_encode_int(_speex_enc_state, src, &_speex_enc_bits); - int nbBytes = speex_bits_write(&_speex_enc_bits, (char*)dst, size); - printf("Codec::codecEncode() nbBytes: %i \n",nbBytes); - return nbBytes; - } - - private: - const SpeexMode* _speexModePtr; - SpeexBits _speex_dec_bits; - SpeexBits _speex_enc_bits; - void *_speex_dec_state; - void *_speex_enc_state; - int _speex_frame_size; - SpeexPreprocessState *_preprocess_state; -}; - -// the class factories -extern "C" AudioCodec* create() { - return new Speex(110); -} - -extern "C" void destroy(AudioCodec* a) { - delete a; -} - diff --git a/src/audio/codecs/speexcodec_wb.cpp b/src/audio/codecs/speexcodec_wb.cpp deleted file mode 100644 index e86b3d724ef7b21040f7da61af96461fbd899685..0000000000000000000000000000000000000000 --- a/src/audio/codecs/speexcodec_wb.cpp +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (C) 2007-2009 Savoir-Faire Linux inc. - * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> - * Author: Emmanuel Milou <emmanuel.milou@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., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "audiocodec.h" -#include <cstdio> -#include <speex/speex.h> -#include <speex/speex_preprocess.h> - -class Speex : public AudioCodec{ - public: - Speex(int payload=0) - : AudioCodec(payload, "speex"), - _speexModePtr(NULL), - _speex_dec_bits(), - _speex_enc_bits(), - _speex_dec_state(), - _speex_enc_state(), - _speex_frame_size(), - _preprocess_state() - { - _clockRate = 16000; - _channel = 1; - _bitrate = 0; - _bandwidth = 0; - initSpeex(); - } - - Speex( const Speex& ); - Speex& operator=(const Speex&); - - void initSpeex() { - - int _samplingRate = 16000; - - // 8000 HZ --> Narrow-band mode - // TODO Manage the other modes - _speexModePtr = &speex_wb_mode; - // _speexModePtr = &speex_wb_mode; - - // Init the decoder struct - speex_bits_init(&_speex_dec_bits); - _speex_dec_state = speex_decoder_init(_speexModePtr); - - // Init the encoder struct - speex_bits_init(&_speex_enc_bits); - _speex_enc_state = speex_encoder_init(_speexModePtr); - - speex_encoder_ctl(_speex_enc_state,SPEEX_SET_SAMPLING_RATE,&_clockRate); - - speex_decoder_ctl(_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size); - -#ifdef HAVE_SPEEXDSP_LIB - - int enable = 1; - int quality = 10; - int complex = 10; - int attenuation = -10; - - speex_encoder_ctl(_speex_enc_state, SPEEX_SET_VAD, &enable); - speex_encoder_ctl(_speex_enc_state, SPEEX_SET_DTX, &enable); - speex_encoder_ctl(_speex_enc_state, SPEEX_SET_VBR_QUALITY, &quality); - speex_encoder_ctl(_speex_enc_state, SPEEX_SET_COMPLEXITY, &complex); - - // Init the decoder struct - speex_decoder_ctl(_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size); - - // Init the preprocess struct - _preprocess_state = speex_preprocess_state_init(_speex_frame_size,_clockRate); - speex_preprocess_ctl(_preprocess_state, SPEEX_PREPROCESS_SET_DENOISE, &enable); - speex_preprocess_ctl(_preprocess_state, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &attenuation); - speex_preprocess_ctl(_preprocess_state, SPEEX_PREPROCESS_SET_VAD, &enable); - speex_preprocess_ctl(_preprocess_state, SPEEX_PREPROCESS_SET_AGC, &enable); -#endif - - } - - ~Speex() - { - terminateSpeex(); - } - - void terminateSpeex() { - // Destroy the decoder struct - speex_bits_destroy(&_speex_dec_bits); - speex_decoder_destroy(_speex_dec_state); - _speex_dec_state = 0; - - // Destroy the encoder struct - speex_bits_destroy(&_speex_enc_bits); - speex_encoder_destroy(_speex_enc_state); - _speex_enc_state = 0; - } - - virtual int codecDecode (short *dst, unsigned char *src, unsigned int size) - { - - int ratio = 320 / _speex_frame_size; - speex_bits_read_from(&_speex_dec_bits, (char*)src, size); - speex_decode_int(_speex_dec_state, &_speex_dec_bits, dst); - - return 2 * _speex_frame_size * ratio; - } - - virtual int codecEncode (unsigned char *dst, short *src, unsigned int size) - { - speex_bits_reset(&_speex_enc_bits); - -#ifdef HAVE_SPEEXDSP_LIB - - speex_preprocess_run(_preprocess_state, src); -#endif - - speex_encode_int(_speex_enc_state, src, &_speex_enc_bits); - int nbBytes = speex_bits_write(&_speex_enc_bits, (char*)dst, size); - printf("Codec::codecEncode() nbBytes: %i \n",nbBytes); - return nbBytes; - } - - private: - const SpeexMode* _speexModePtr; - SpeexBits _speex_dec_bits; - SpeexBits _speex_enc_bits; - void *_speex_dec_state; - void *_speex_enc_state; - int _speex_frame_size; - SpeexPreprocessState *_preprocess_state; -}; - -// the class factories -extern "C" AudioCodec* create() { - return new Speex(111); -} - -extern "C" void destroy(AudioCodec* a) { - delete a; -} - diff --git a/src/audio/codecs/vorbiscodec.cpp b/src/audio/codecs/vorbiscodec.cpp deleted file mode 100644 index 2395fa2d200bd958c6997a7db60f05741be336bd..0000000000000000000000000000000000000000 --- a/src/audio/codecs/vorbiscodec.cpp +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (C) 2007-2009 Savoir-Faire Linux inc. - * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> - * Author: Emmanuel Milou <emmanuel.milou@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., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "audiocodec.h" -#include <cstdio> -#include <math.h> -#include <vorbis/vorbis.h> -#include <vorbis/codec.h> -#include <vorbis/vorbisenc.h> - -class Vorbis : public AudioCodec{ - public: - Vorbis(int payload=0) - : AudioCodec(payload, "vorbis"), - _ogg_stream_state(), - _ogg_packet(), - _vorbis_info(), - _vorbis_comment(), - _vorbis_dsp_state(), - _vorbis_block() - { - _clockRate = 8000; - _channel = 1; - _bitrate = 0; - _bandwidth = 0; - initVorbis(); - } - - Vorbis( const Vorbis& ); - Vorbis& operator=(const Vorbis&); - - void initVorbis() { - - // init the encoder - vorbis_info_init(&_vorbis_info); - vorbis_encode_init_vbr(&_vorbis_info,0.5); - - vorbis_comment_init(&_vorbis_comment); - - vorbis_analysis_init(&_vorbis_dsp_state, &_vorbis_info); - - // random number for ogg serial number - srand(time(NULL)); - - } - - ~Vorbis() - { - terminateVorbis(); - } - - void terminateVorbis() { - - vorbis_block_clear(&_vorbis_block); - vorbis_dsp_clear(&_vorbis_dsp_state); - vorbis_comment_clear(&_vorbis_comment); - vorbis_info_clear(&_vorbis_info); - } - - virtual int codecDecode (short *dst, unsigned char *src, unsigned int size) - { - - - return 1; - } - - virtual int codecEncode (unsigned char *dst, short *src, unsigned int size) - { - - return 1; - } - - private: - - // ogg-vorbis specific variables - ogg_sync_state oy; - - ogg_stream_state _ogg_stream_state; - - ogg_packet _ogg_packet; - - vorbis_info _vorbis_info; - - vorbis_comment _vorbis_comment; - - vorbis_dsp_state _vorbis_dsp_state; - - vorbis_block _vorbis_block; - - -}; - -// the class factories -extern "C" AudioCodec* create() { - return new Vorbis(117); -} - -extern "C" void destroy(AudioCodec* a) { - delete a; -} - diff --git a/tools/build-system/README b/tools/build-system/README new file mode 100644 index 0000000000000000000000000000000000000000..c12a4bbfc40c9996c34d27a21e82deb5588f7720 --- /dev/null +++ b/tools/build-system/README @@ -0,0 +1,42 @@ +# register image +VBoxManage registerimage disk VDI/ubuntu-9.04.vdi -type normal + +# check registration +VBoxManage showvdiinfo VDI/ubuntu-9.04.vdi + +# create VM +VBoxManage createvm -name "ubuntu-9.04" -register + +# check vm creation +VBoxManage list vms + +# update configuration +VBoxManage modifyvm "ubuntu-9.04" -hda "VDI/ubuntu-9.04.vdi" -memory "1024MB" -acpi on -nic1 nat + +#si 64 bits +# VBoxManage modifyvm ubuntu-9.04-64 --ostype Ubuntu_64 +# VBoxManage modifyvm ubuntu-9.04-64 --hwvirtex on + +VBoxManage setextradata "ubuntu-9.04" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol" TCP +VBoxManage setextradata "ubuntu-9.04" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" 50001 +VBoxManage setextradata "ubuntu-9.04" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort" 22 + +# start vm +VBoxHeadless -startvm "ubuntu-9.04" -p 50000 + +# install ssh support +sudo apt-get install openssh-server + +# add office-srv-01 sflphone user ssh key in authorized_keys of vm +ssh -o LogLevel=ERROR -o CheckHostIP=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 50001 sflphone@127.0.0.1 "mkdir ~/.ssh/" +scp -o LogLevel=ERROR -o CheckHostIP=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -P 50001 /home/projects/sflphone/.ssh/id_dsa.pub sflphone@127.0.0.1:~/.ssh/authorized_keys +ssh -o LogLevel=ERROR -o CheckHostIP=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 50001 sflphone@127.0.0.1 "chmod 0600 ~/.ssh/authorized_keys" + +# si nécessaire +# scp -o LogLevel=ERROR -o CheckHostIP=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -P 50001 /home/projects/sflphone/build-system/git-buildpackage_0.4.45_all.deb sflphone@127.0.0.1: + +# update /etc/sudoers +sflphone ALL = NOPASSWD: /sbin/shutdown, /usr/bin/apt-get, /usr/bin/dpkg + +# stop vm +VBoxManage controlvm "ubuntu-9-04" poweroff diff --git a/tools/build-system/automatic-build-machine.sh b/tools/build-system/automatic-build-machine.sh new file mode 100755 index 0000000000000000000000000000000000000000..66882c356977e9059e8951ef54ac15520486c3da --- /dev/null +++ b/tools/build-system/automatic-build-machine.sh @@ -0,0 +1,24 @@ +#!/bin/bash +##################################################### +# File Name: send-emails.sh +# +# Purpose : +# +# Author: Julien Bonjean (julien@bonjean.info) +# +# Creation Date: 2009-04-20 +# Last Modified: +##################################################### + +TAG=`date +%Y-%m-%d` +ROOT_DIR="/home/projects/sflphone" +SCRIPTS_DIR="${ROOT_DIR}/build-system" + +cd ${SCRIPTS_DIR} + +${SCRIPTS_DIR}/launch-build-machine.sh $* + +${SCRIPTS_DIR}/send-emails.sh $? + +exit 0 + diff --git a/tools/build-system/gpg/setup-gpg.sh b/tools/build-system/gpg/setup-gpg.sh new file mode 100755 index 0000000000000000000000000000000000000000..1a12793003d9f521f582e4535b7e97df1ee47179 --- /dev/null +++ b/tools/build-system/gpg/setup-gpg.sh @@ -0,0 +1,56 @@ +#!/bin/bash +##################################################### +# File Name: setup-gpg.sh +# +# Purpose : +# +# Author: Julien Bonjean (julien@bonjean.info) +# +# Creation Date: 2009-04-20 +# Last Modified: +##################################################### + +# pkill gpg-agent + +export LANG=en_CA.UTF-8 +export LC_ALL=en_CA.UTF-8 + +echo "Check if GPG key is present" +gpg --list-secret-keys | grep "Savoir-Faire Linux Inc." >/dev/null + +if [ "$?" -ne "0" ]; then + echo "!! GPG private key is not present" + exit -1 +fi + +echo "Check GPG agent" +pgrep -u "sflphone-package-manager" gpg-agent > /dev/null +if [ "$?" -ne "0" ]; then + echo "Not running, launching it" + EVAL=`/usr/bin/gpg-agent --daemon --write-env-file $HOME/.gpg-agent-info --default-cache-ttl 2000000000 --max-cache-ttl 2000000000 --pinentry-program /usr/bin/pinentry` + eval ${EVAL} +fi + +if [ "$?" -ne "0" ]; then + echo "!! Error with GPG agent" + exit -1 +fi + +GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info 2> /dev/null` +export ${GPG_AGENT_INFO} + +if [ "${GPG_AGENT_INFO}" == "" ]; then + echo "!! Cannot get GPG agent info" + exit -1 +fi + +GPG_TTY=`tty` +export GPG_TTY + +touch ./test-gpg +gpg -v --clearsign --use-agent ./test-gpg +rm -f ./test-gpg +rm -f ./test-gpg.asc + +exit 0 + diff --git a/tools/build-system/launch-build-machine.sh b/tools/build-system/launch-build-machine.sh new file mode 100755 index 0000000000000000000000000000000000000000..9144928eb82e8519c12960c251ede3081f3cd80d --- /dev/null +++ b/tools/build-system/launch-build-machine.sh @@ -0,0 +1,428 @@ +#!/bin/bash +##################################################### +# File Name: launch-build-machine.sh +# +# Purpose : +# +# Author: Julien Bonjean (julien@bonjean.info) +# +# Creation Date: 2009-04-20 +# Last Modified: 2009-05-15 12:23:31 -0400 +##################################################### + +# +# Not working with git 1.5.4.3 +# +# +# +# + + +TAG=`date +%Y-%m-%d` + +# wait delay after startup and shutdown of VMs +STARTUP_WAIT=40 +SHUTDOWN_WAIT=30 + +# ssh stuff +SSH_OPTIONS="-o LogLevel=ERROR -o CheckHostIP=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" +SSH_HOST="sflphone@127.0.0.1" +SSH_REPOSITORY_HOST="sflphone-package-manager@dev.savoirfairelinux.net" +SSH_BASE="ssh ${SSH_OPTIONS} -p 50001 ${SSH_HOST}" +SCP_BASE="scp ${SSH_OPTIONS} -r -P 50001" + +# home directory +ROOT_DIR="/home/projects/sflphone" + +# vbox config directory +export VBOX_USER_HOME="${ROOT_DIR}/vbox" + +# remote home directory +REMOTE_ROOT_DIR="/home/sflphone" + +# scripts +SCRIPTS_DIR="${ROOT_DIR}/build-system" +PACKAGING_SCRIPTS_DIR="${SCRIPTS_DIR}/remote" +BIN_DIR="${SCRIPTS_DIR}/bin" + +# directory that will be deployed to remote machine +TODEPLOY_DIR="${ROOT_DIR}/sflphone-packaging" +TODEPLOY_BUILD_DIR="${TODEPLOY_DIR}/build" + +# remote deployment dir +REMOTE_DEPLOY_DIR="/home/sflphone/sflphone-packaging" + +# cloned repository and archive +REPOSITORY_DIR="${TODEPLOY_BUILD_DIR}/sflphone" +REPOSITORY_ARCHIVE="`dirname ${REPOSITORY_DIR}`/sflphone.tar.gz" +REPOSITORY_SFLPHONE_COMMON_DIR="${REPOSITORY_DIR}/sflphone-common" +REPOSITORY_SFLPHONE_CLIENT_KDE_DIR="${REPOSITORY_DIR}/sflphone-client-kde" +REPOSITORY_SFLPHONE_CLIENT_GNOME_DIR="${REPOSITORY_DIR}/sflphone-client-gnome" + +# where results go +PACKAGING_RESULT_DIR=${ROOT_DIR}/packages-${TAG} + +USER="sflphone" + +RELEASE_MODE= +VERSION_APPEND= + +DO_PREPARE=1 +DO_MAIN_LOOP=1 +DO_SIGNATURES=1 +DO_UPLOAD=1 +DO_LOGGING=1 +DO_SEND_EMAIL=1 + +EDITOR=echo +export EDITOR + +NON_FATAL_ERRORS= + +MACHINES=( "ubuntu-8.04" "ubuntu-8.04-64" "ubuntu-8.10" "ubuntu-8.10-64" "ubuntu-9.04" "ubuntu-9.04-64" ) + +######################### +# BEGIN +######################### + +echo +echo " /***********************\\" +echo " | SFLPhone build system |" +echo " \\***********************/" +echo + +for PARAMETER in $* +do + case ${PARAMETER} in + --help) + echo + echo "Options :" + echo " --skip-prepare" + echo " --skip-main-loop" + echo " --skip-signatures" + echo " --skip-upload" + echo " --no-logging" + echo " --machine=MACHINE" + echo " --release-mode=[beta|rc|release]" + echo " --list-machines" + echo + exit 0;; + --skip-prepare) + unset DO_PREPARE;; + --skip-main-loop) + unset DO_MAIN_LOOP;; + --skip-signatures) + unset DO_SIGNATURES;; + --skip-upload) + unset DO_UPLOAD;; + --no-logging) + unset DO_LOGGING;; + --machine=*) + MACHINES=(${PARAMETER##*=});; + --release-mode=*) + RELEASE_MODE=(${PARAMETER##*=});; + --list-machines) + echo "Available machines :" + for MACHINE in ${MACHINES}; do + echo " "${MACHINE} + done + exit 0;; + *) + echo "Unknown parameter : ${PARAMETER}" + exit -1;; + esac +done + +# if more than one VM will be launched, automatically stop running VMs +if [ "${#MACHINES[@]}" -gt "1" ]; then + VBoxManage list runningvms | tail -n +5 | awk '{print $1}' | xargs -i VBoxManage controlvm {} poweroff +fi + +# change to working directory +cd ${SCRIPTS_DIR} + +if [ "$?" -ne "0" ]; then + echo " !! Cannot cd to working directory" + exit -1 +fi + +WHO=`whoami` + +if [ "${WHO}" != "${USER}" ]; then + echo "!! Please use user ${USER} to run this script" + exit -1; +fi + +# logging +mkdir ${PACKAGING_RESULT_DIR} 2>/dev/null +if [ ${DO_LOGGING} ]; then + + # open file descriptor + rm -f ${PACKAGING_RESULT_DIR}/packaging.log + exec 3<> ${PACKAGING_RESULT_DIR}/packaging.log + + # redirect outputs (stdout & stderr) + exec 1>&3 + exec 2>&3 +fi + +# check release +if [ ${RELEASE_MODE} ]; then + case ${RELEASE_MODE} in + beta);; + rc[1-9]);; + release);; + *) + echo "Bad release mode" + exit -1;; + esac +fi + +# check machines list +if [ -z "${MACHINES}" ]; then + echo "Need at least a machine name to launch" + exit -1 +fi + +echo +echo "Launching build system with the following machines :" +for MACHINE in ${MACHINES[*]} +do + echo " "${MACHINE} +done +echo + +if [ ${RELEASE_MODE} ]; then + echo "Release mode : ${RELEASE_MODE}" + if [ "${RELEASE_MODE}" != "release" ];then + VERSION_APPEND="~${RELEASE_MODE}" + fi +else + echo "Snapshot mode" +fi + +######################### +# COMMON PART +######################### + +if [ ${DO_PREPARE} ]; then + + echo + echo "Cleaning old deploy dir" + rm -rf ${TODEPLOY_DIR} + mkdir ${TODEPLOY_DIR} + mkdir ${TODEPLOY_BUILD_DIR} + + echo "Clone repository" + git clone ssh://repos-sflphone-git@sflphone.org/~/sflphone.git ${REPOSITORY_DIR} >/dev/null 2>&1 + + if [ "$?" -ne "0" ]; then + echo " !! Cannot clone repository" + exit -1 + fi + + FULL_VER=`cd ${REPOSITORY_DIR} && git describe --tag HEAD | cut -d "/" -f2 | cut -d "-" -f1-2 | sed 's/\.rc.*//' | sed 's/\.beta.*//'` + + # change current branch if needed + if [ ${RELEASE_MODE} ]; then + cd ${REPOSITORY_DIR} + echo "Using release branch" + git checkout origin/release -b release + else + echo "Using master branch" + fi + + # generate the changelog, according to the distribution and the git commit messages + echo "Update changelogs" + + ${SCRIPTS_DIR}/sfl-git-dch.sh ${RELEASE_MODE} + + if [ "$?" -ne "0" ]; then + echo "!! Cannot update changelogs" + exit -1 + fi + + cd ${REPOSITORY_DIR} + echo "Update repository with new changelog" + echo " Switch to master branch to commit" + if [ ${RELEASE_MODE} ]; then + + echo "Switch to master branch for commit" + git checkout master + fi + + echo " Doing commit" + VERSION_COMMIT=${FULL_VER}${VERSION_APPEND} + if [ ! ${RELEASE_MODE} ]; then + VERSION_COMMIT=${FULL_VER}" Snapshot ${TAG}" + fi + git commit -m "[#1262] Updated changelogs for version ${VERSION_COMMIT}" . >/dev/null + echo " Pushing commit" + git push origin master >/dev/null + + # change back current branch if needed + if [ ${RELEASE_MODE} ]; then + echo "Switch back to release branch" + git checkout release + git merge master + fi + + echo "Archiving repository" + tar czf ${REPOSITORY_ARCHIVE} --exclude .git -C `dirname ${REPOSITORY_DIR}` sflphone + + if [ "$?" -ne "0" ]; then + echo " !! Cannot archive repository" + exit -1 + fi + + echo "Removing repository" + rm -rf ${REPOSITORY_DIR} + + echo "Finish preparing deploy directory" + cp -r ${PACKAGING_SCRIPTS_DIR}/* ${TODEPLOY_DIR} + + if [ "$?" -ne "0" ]; then + echo " !! Cannot prepare scripts for deployment" + exit -1 + fi +fi + +######################### +# MAIN LOOP +######################### + +if [ ${DO_MAIN_LOOP} ]; then + + echo + echo "Entering main loop" + echo + + for MACHINE in ${MACHINES[*]} + do + + echo "Launch machine ${MACHINE}" + VM_STATE=`VBoxManage showvminfo ${MACHINE} | grep State | awk '{print $2}'` + if [ "${VM_STATE}" = "running" ]; then + echo "Not needed, already running" + else + cd ${VBOX_USER_HOME} && VBoxHeadless -startvm "${MACHINE}" -p 50000 & + echo "Wait ${STARTUP_WAIT} s" + sleep ${STARTUP_WAIT} + fi + + echo "Clean remote directory" + ${SSH_BASE} "rm -rf ${REMOTE_DEPLOY_DIR} 2>/dev/null" + + echo "Deploy packaging system" + ${SCP_BASE} ${TODEPLOY_DIR} ${SSH_HOST}: + + if [ "$?" -ne "0" ]; then + echo " !! Cannot deploy packaging system" + NON_FATAL_ERRORS="${NON_FATAL_ERRORS} !! Error when packaging for ${MACHINE}\n" + fi + + echo "Launch remote build" + ${SSH_BASE} "${REMOTE_DEPLOY_DIR}/build-package-ubuntu.sh ${RELEASE_MODE}" + + if [ "$?" -ne "0" ]; then + echo " !! Error during remote packaging process" + NON_FATAL_ERRORS="${NON_FATAL_ERRORS} !! Error when packaging for ${MACHINE}\n" + fi + + echo "Retrieve dists and log files (current tag is ${TAG})" + ${SCP_BASE} ${SSH_HOST}:${REMOTE_DEPLOY_DIR}/dists ${PACKAGING_RESULT_DIR}/ + ${SCP_BASE} ${SSH_HOST}:${REMOTE_DEPLOY_DIR}"/*.log" ${PACKAGING_RESULT_DIR}/ + + if [ "$?" -ne "0" ]; then + echo " !! Cannot retrieve remote files" + NON_FATAL_ERRORS="${NON_FATAL_ERRORS} !! Error when packaging for ${MACHINE}\n" + fi + + if [ "${VM_STATE}" = "running" ]; then + echo "Leave machine running" + else + echo "Shut down machine ${MACHINE}" + ${SSH_BASE} 'sudo shutdown -h now' + echo "Wait ${SHUTDOWN_WAIT} s" + sleep ${SHUTDOWN_WAIT} + # hard shut down (just to be sure) + cd "${VBOX_USER_HOME}" && VBoxManage controlvm ${MACHINE} poweroff >/dev/null 2>&1 + fi + done +fi + +######################### +# SIGNATURES +######################### + +if [ ${DO_SIGNATURES} ]; then + + echo + echo "Sign packages" + echo + + echo "Check GPG agent" + pgrep -u "sflphone" gpg-agent > /dev/null + if [ "$?" -ne "0" ]; then + echo "!! GPG agent is not running" + exit -1 + fi + GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info 2> /dev/null` + export ${GPG_AGENT_INFO} + + if [ "${GPG_AGENT_INFO}" == "" ]; then + echo "!! Cannot get GPG agent info" + exit -1 + fi + + echo "Sign packages" + find ${PACKAGING_RESULT_DIR} -name "*.deb" -exec dpkg-sig -k 'Savoir-Faire Linux Inc.' --sign builder --sign-changes full {} \; >/dev/null 2>&1 + find ${PACKAGING_RESULT_DIR} -name "*.changes" -printf "debsign -k'Savoir-Faire Linux Inc.' %p\n" | sh >/dev/null 2>&1 +fi + +######################### +# UPLOAD FILES +######################### + +if [ ${DO_UPLOAD} ]; then + + echo + echo "Upload packages" + echo + + echo "Prepare packages upload" + scp ${SSH_OPTIONS} ${PACKAGING_SCRIPTS_DIR}/update-repository.sh ${SSH_REPOSITORY_HOST}: + + if [ "$?" -ne "0" ]; then + echo " !! Cannot deploy repository scripts" + fi + + echo "Upload packages" + echo "Install dists files to repository" + scp -r ${SSH_OPTIONS} ${PACKAGING_RESULT_DIR}/dists ${SSH_REPOSITORY_HOST}: + + if [ "$?" -ne "0" ]; then + echo " !! Cannot upload packages" + exit -1 + fi + + echo "Update repository" + ssh ${SSH_OPTIONS} ${SSH_REPOSITORY_HOST} "./update-repository.sh" + + if [ "$?" -ne "0" ]; then + echo " !! Cannot update repository" + exit -1 + fi +fi + +if [ ${NON_FATAL_ERRORS} ]; then + echo "Non fatal errors :" + echo ${NON_FATAL_ERRORS} + exit -1 +fi + +# close file descriptor +exec 3>&- + +exit 0 + diff --git a/tools/build-system/packages/git-buildpackage_0.4.45_all.deb b/tools/build-system/packages/git-buildpackage_0.4.45_all.deb new file mode 100644 index 0000000000000000000000000000000000000000..cf62358c48f1a5ce054c997b8b87ef9dac677028 Binary files /dev/null and b/tools/build-system/packages/git-buildpackage_0.4.45_all.deb differ diff --git a/tools/build-system/remote/build-package-ubuntu.sh b/tools/build-system/remote/build-package-ubuntu.sh new file mode 100755 index 0000000000000000000000000000000000000000..e975f6833e22b863a2c35787bd21422bacd819c4 --- /dev/null +++ b/tools/build-system/remote/build-package-ubuntu.sh @@ -0,0 +1,183 @@ +#!/bin/bash +# +# @author: Yun Liu <yun.liu@savoirfairelinux.com>, Julien Bonjean <julien.bonjean@savoirfairelinux.com> +# +# Refer to http://www.sflphone.org for futher information +# + +PLATFORM="ubuntu" + +ROOT_DIR="/home/sflphone/sflphone-packaging" +BUILD_DIR="${ROOT_DIR}/build" +DIST_DIR="${ROOT_DIR}/dists" +REPOSITORY_ARCHIVE="${BUILD_DIR}/sflphone.tar.gz" +REPOSITORY_DIR="${BUILD_DIR}/sflphone" +REPOSITORY_SFLPHONE_COMMON_DIR="${REPOSITORY_DIR}/sflphone-common" +REPOSITORY_SFLPHONE_CLIENT_KDE_DIR="${REPOSITORY_DIR}/sflphone-client-kde" +REPOSITORY_SFLPHONE_CLIENT_GNOME_DIR="${REPOSITORY_DIR}/sflphone-client-gnome" +USER="sflphone" +DIST_APPEND="-daily" +RELEASE_MODE=$1 +VERSION_APPEND= +EDITOR=echo +export EDITOR + +######################### +# BEGIN +######################### + +WHO=`whoami` + +if [ "${WHO}" != "${USER}" ]; then + echo "!! Please use user ${USER} to run this script" + exit -1; +fi + +if [ ${RELEASE_MODE} ]; then + echo "Release mode : ${RELEASE_MODE}" + if [ "${RELEASE_MODE}" = "release" ]; then + DIST_APPEND="" + else + DIST_APPEND="-testing" + VERSION_APPEND="~${RELEASE_MODE}" + fi +else + echo "Snapshot mode" +fi + +cd ${ROOT_DIR} + +if [ "$?" -ne "0" ]; then + echo " !! Cannot cd to working directory" + exit -1 +fi + +# decompress repository +echo "Untar repository" +cd ${BUILD_DIR} && tar xf ${REPOSITORY_ARCHIVE} + +if [ "$?" -ne "0" ]; then + echo " !! Cannot untar repository" + exit -1 +fi + +echo "Switch to internal logging" + +# get system parameters +ARCH_FLAG=`getconf -a|grep LONG_BIT | sed -e 's/LONG_BIT\s*//'` +OS_VERSION=`lsb_release -d -s -c | sed -e '1d'` +PACKAGE_SYSVER="0ubuntu1" +VERSION=`cd ${REPOSITORY_DIR} && head -n 1 ./sflphone-client-gnome/debian/changelog | awk '{print $2}' | sed -e 's/(//g' -e 's/)//g' | cut -d "-" -f1` +FULL_VERSION=`cd ${REPOSITORY_DIR} && head -n 1 ./sflphone-client-gnome/debian/changelog | awk '{print $2}' | sed -e 's/(//g' -e 's/)//g' -e 's/SYSVER/'${PACKAGE_SYSVER}'/g'` + +# define log files +GLOBAL_LOG=${ROOT_DIR}/sflphone-${OS_VERSION}-${ARCH_FLAG}.log +PACKAGING_LOG=${ROOT_DIR}/sflphone-debuild-${OS_VERSION}-${ARCH_FLAG}.log + +# open log file +exec 3<>${GLOBAL_LOG} + +# redirect outputs (stdout & stderr) +exec 1>&3 +exec 2>&3 + +echo "SFLPhone version is ${VERSION}" + +echo "Do updates" +sudo apt-get update >/dev/null +sudo apt-get upgrade -y >/dev/null + +# generate the changelog, according to the distribution +echo "Generate changelogs" +sed -i 's/SYSTEM/'${OS_VERSION}'/g' ${REPOSITORY_SFLPHONE_COMMON_DIR}/debian/changelog && \ +sed -i 's/SYSVER/'${PACKAGE_SYSVER}'/g' ${REPOSITORY_SFLPHONE_COMMON_DIR}/debian/changelog && \ + # sed -i 's/SYSTEM/'${OS_VERSION}'/g' ${REPOSITORY_SFLPHONE_CLIENT_KDE_DIR}/debian/changelog && \ + # sed -i 's/SYSVER/'${PACKAGE_SYSVER}'/g' ${REPOSITORY_SFLPHONE_CLIENT_KDE_DIR}/debian/changelog && \ + sed -i 's/SYSTEM/'${OS_VERSION}'/g' ${REPOSITORY_SFLPHONE_CLIENT_GNOME_DIR}/debian/changelog && \ + sed -i 's/SYSVER/'${PACKAGE_SYSVER}'/g' ${REPOSITORY_SFLPHONE_CLIENT_GNOME_DIR}/debian/changelog + +if [ "$?" -ne "0" ]; then + echo "!! Cannot generate changelogs" + exit -1 +fi + +# copy the appropriate control file based on different archtecture +echo "Generate control files" +cp ${REPOSITORY_SFLPHONE_COMMON_DIR}/debian/control.$OS_VERSION ${REPOSITORY_SFLPHONE_COMMON_DIR}/debian/control && \ + # cp ${REPOSITORY_SFLPHONE_CLIENT_KDE_DIR}/debian/control.$OS_VERSION ${REPOSITORY_SFLPHONE_CLIENT_KDE_DIR}/debian/control && \ + cp ${REPOSITORY_SFLPHONE_CLIENT_GNOME_DIR}/debian/control.$OS_VERSION ${REPOSITORY_SFLPHONE_CLIENT_GNOME_DIR}/debian/control + +if [ "$?" -ne "0" ]; then + echo "!! Cannot generate control files" + exit -1 +fi + +# provide prerequisite directories used by debuild +echo "Build sflphone packages on Ubuntu $OS_VERSION $ARCH_FLAG bit architecture...." +cp -r ${REPOSITORY_SFLPHONE_COMMON_DIR} ${BUILD_DIR}/sflphone-common && \ +cp -r ${REPOSITORY_SFLPHONE_COMMON_DIR} ${BUILD_DIR}/sflphone-common-${FULL_VERSION}.orig && \ + # cp -r ${REPOSITORY_SFLPHONE_CLIENT_KDE_DIR} ${BUILD_DIR}/sflphone-client-kde-${FULL_VERSION}.orig && \ + cp -r ${REPOSITORY_SFLPHONE_CLIENT_GNOME_DIR} ${BUILD_DIR}/sflphone-client-gnome-${FULL_VERSION}.orig && \ +# do a cp to because path must remain for client compilation +mv ${REPOSITORY_SFLPHONE_COMMON_DIR} ${BUILD_DIR}/sflphone-common-${FULL_VERSION} && \ + # mv ${REPOSITORY_SFLPHONE_CLIENT_KDE_DIR} ${BUILD_DIR}/sflphone-client-kde-${FULL_VERSION} && \ + mv ${REPOSITORY_SFLPHONE_CLIENT_GNOME_DIR} ${BUILD_DIR}/sflphone-client-gnome-${FULL_VERSION} + +# build package sflphone-common +cd ${BUILD_DIR}/sflphone-common-${FULL_VERSION}/debian && \ +debuild -us -uc >${PACKAGING_LOG} 2>&1 + +if [ "$?" -ne "0" ]; then + echo "!! Cannot generate package sflphone-common" + exit -1 +fi + +# build package sflphone-client-gnome +cd ${BUILD_DIR}/sflphone-client-gnome-${FULL_VERSION}/debian && \ +debuild -us -uc >>${PACKAGING_LOG} 2>&1 + +if [ "$?" -ne "0" ]; then + echo "!! Cannot generate package sflphone-client-gnome" + exit -1 +fi + +# build package sflphone-client-kde +# cd ${BUILD_DIR}/sflphone-client-kde-${FULL_VERSION}/debian && \ +# debuild -us -uc >>${PACKAGING_LOG} 2>&1 + +# if [ "$?" -ne "0" ]; then +# echo "!! Cannot generate package sflphone-client-kde" +# exit -1 +# fi + +# move to dist +echo "Deploy files in dist directories" +BINARY_DIR="" +if [ "${ARCH_FLAG}" -eq "32" ]; then + BINARY_DIR="binary-i386" +else + BINARY_DIR="binary-amd64" +fi + +mkdir -p ${DIST_DIR}/${OS_VERSION}${DIST_APPEND}/universe/source +mkdir -p ${DIST_DIR}/${OS_VERSION}${DIST_APPEND}/universe/${BINARY_DIR} + +mv ${BUILD_DIR}/sflphone*.deb ${DIST_DIR}/${OS_VERSION}${DIST_APPEND}/universe/${BINARY_DIR} && \ +mv ${BUILD_DIR}/sflphone*.dsc ${DIST_DIR}/${OS_VERSION}${DIST_APPEND}/universe/source/ && \ +mv ${BUILD_DIR}/sflphone*.build ${DIST_DIR}/${OS_VERSION}${DIST_APPEND}/universe/source/ && \ +mv ${BUILD_DIR}/sflphone*.changes ${DIST_DIR}/${OS_VERSION}${DIST_APPEND}/universe/source/ && \ +mv ${BUILD_DIR}/sflphone*.orig.tar.gz ${DIST_DIR}/${OS_VERSION}${DIST_APPEND}/universe/source/ && \ +mv ${BUILD_DIR}/sflphone*.diff.gz ${DIST_DIR}/${OS_VERSION}${DIST_APPEND}/universe/source/ + +if [ "$?" -ne "0" ]; then + echo "!! Cannot copy dist files" + exit -1 +fi + +echo "All done" + +# close file descriptor +exec 3>&- + +exit 0 + diff --git a/tools/build-system/remote/update-repository.sh b/tools/build-system/remote/update-repository.sh new file mode 100755 index 0000000000000000000000000000000000000000..f03e3b232e6e52166a6d4d38b83930f716324864 --- /dev/null +++ b/tools/build-system/remote/update-repository.sh @@ -0,0 +1,74 @@ +#!/bin/bash + +# Script to update the debian repository description files (Release, Packages, Sources) +# +# @author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> +# @date: 2008 Jan 16 + +ROOT_DIR="/var/repos/sflphone/debian" +USER="sflphone-package-manager" + +export LANG=en_CA.UTF-8 +export LC_ALL=en_CA.UTF-8 + +WHO=`whoami` + +if [ "${WHO}" != "${USER}" ]; then + echo "!! Please use user ${USER} to run this script" + exit -1; +fi + +echo "Check GPG agent" +pgrep -u "sflphone-package-manager" gpg-agent > /dev/null +if [ "$?" -ne "0" ]; then + echo "!! GPG agent is not running" + exit -1 +fi +GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info 2> /dev/null` +export ${GPG_AGENT_INFO} + +if [ "${GPG_AGENT_INFO}" == "" ]; then + echo "!! Cannot get GPG agent info" + exit -1 +fi + +apt-ftparchive generate conf/apt-ftparchive.conf + +echo "Generate the description file for each distribution" +apt-ftparchive -c conf/apt-hardy-release.conf release dists/hardy > dists/hardy/Release +apt-ftparchive -c conf/apt-hardy-testing.conf release dists/hardy-testing > dists/hardy-testing/Release +apt-ftparchive -c conf/apt-hardy-daily.conf release dists/hardy-daily > dists/hardy-daily/Release + +apt-ftparchive -c conf/apt-intrepid-release.conf release dists/intrepid > dists/intrepid/Release +apt-ftparchive -c conf/apt-intrepid-testing.conf release dists/intrepid-testing > dists/intrepid-testing/Release +apt-ftparchive -c conf/apt-intrepid-daily.conf release dists/intrepid-daily > dists/intrepid-daily/Release + +apt-ftparchive -c conf/apt-jaunty-release.conf release dists/jaunty > dists/jaunty/Release +apt-ftparchive -c conf/apt-jaunty-testing.conf release dists/jaunty-testing > dists/jaunty-testing/Release +apt-ftparchive -c conf/apt-jaunty-daily.conf release dists/jaunty-daily > dists/jaunty-daily/Release + +echo "Sign the Release files" + +rm -f dists/intrepid/Release.gpg +rm -f dists/intrepid-testing/Release.gpg +rm -f dists/intrepid-daily/Release.gpg +gpg --no-tty -u C842D122 --output dists/intrepid/Release.gpg -ba dists/intrepid/Release +gpg --no-tty -u C842D122 --output dists/intrepid-testing/Release.gpg -ba dists/intrepid-testing/Release +gpg --no-tty -u C842D122 --output dists/intrepid-daily/Release.gpg -ba dists/intrepid-daily/Release + +rm -f dists/hardy/Release.gpg +rm -f dists/hardy-testing/Release.gpg +rm -f dists/hardy-daily/Release.gpg +gpg --no-tty -u C842D122 --output dists/hardy/Release.gpg -ba dists/hardy/Release +gpg --no-tty -u C842D122 --output dists/hardy-testing/Release.gpg -ba dists/hardy-testing/Release +gpg --no-tty -u C842D122 --output dists/hardy-daily/Release.gpg -ba dists/hardy-daily/Release + +rm -f dists/jaunty/Release.gpg +rm -f dists/jaunty-testing/Release.gpg +rm -f dists/jaunty-daily/Release.gpg +gpg --no-tty -u C842D122 --output dists/jaunty/Release.gpg -ba dists/jaunty/Release +gpg --no-tty -u C842D122 --output dists/jaunty-testing/Release.gpg -ba dists/jaunty-testing/Release +gpg --no-tty -u C842D122 --output dists/jaunty-daily/Release.gpg -ba dists/jaunty-daily/Release + +echo "All done" +exit 0 diff --git a/tools/build-system/send-emails.sh b/tools/build-system/send-emails.sh new file mode 100755 index 0000000000000000000000000000000000000000..065e9c691a071a48b0f10f5206972b9abf9ad49f --- /dev/null +++ b/tools/build-system/send-emails.sh @@ -0,0 +1,40 @@ +#!/bin/bash +##################################################### +# File Name: send-emails.sh +# +# Purpose : +# +# Author: Julien Bonjean (julien@bonjean.info) +# +# Creation Date: 2009-04-20 +# Last Modified: +##################################################### + +TAG=`date +%Y-%m-%d` +ROOT_DIR="/home/projects/sflphone" +PACKAGING_RESULT_DIR=${ROOT_DIR}/packages-${TAG} +STATUS="OK" + +if [ "$1" -ne 0 ]; then + STATUS="ERROR" +fi + +echo +echo "Send notification emails" +echo + +MAIL_SUBJECT="[ ${TAG} ] SFLphone Automatic Build System : ${STATUS}" + +if [ "$1" -eq 0 ]; then + echo | mail -s "${MAIL_SUBJECT}" -c emmanuel.milou@savoirfairelinux.com julien.bonjean@savoirfairelinux.com +else + ( + for i in ${PACKAGING_RESULT_DIR}/*.log + do + uuencode $i $(basename $i) + done + ) | mail -s "${MAIL_SUBJECT}" -c emmanuel.milou@savoirfairelinux.com julien.bonjean@savoirfairelinux.com +fi + +exit 0 + diff --git a/tools/build-system/sfl-git-dch.sh b/tools/build-system/sfl-git-dch.sh new file mode 100755 index 0000000000000000000000000000000000000000..986da2bdaa57ceec96343b2f19911f0476bfdac7 --- /dev/null +++ b/tools/build-system/sfl-git-dch.sh @@ -0,0 +1,165 @@ +#!/bin/bash +##################################################### +# File Name: sfl-git-dch.sh +# +# Purpose : +# +# Author: Julien Bonjean (julien@bonjean.info) +# +# Creation Date: 2009-05-13 +# Last Modified: 2009-05-14 17:22:48 -0400 +##################################################### + +# set -x + +RELEASE_MODE=$1 + +ROOT_DIR="/home/projects/sflphone" +TODEPLOY_DIR="${ROOT_DIR}/sflphone-packaging" +TODEPLOY_BUILD_DIR="${TODEPLOY_DIR}/build" +REPOSITORY_DIR="${TODEPLOY_BUILD_DIR}/sflphone" +SCRIPTS_DIR="${ROOT_DIR}/build-system" + +CHANGELOG_FILES=( "sflphone-common/debian/changelog" "sflphone-client-gnome/debian/changelog" ) + +SNAPSHOT_TAG=`date +%s` + +export DEBFULLNAME="SFLphone Automatic Build System" +export DEBEMAIL="team@sflphone.org" +export EDITOR="echo" + +cd ${REPOSITORY_DIR} + +if [ "$?" -ne "0" ]; then + echo " !! Cannot cd to working directory" + exit -1 +fi + +# get last release tag +LAST_RELEASE_TAG_NAME=`git describe --tag HEAD --match "debian/*" --abbrev=40 | cut -d "-" -f1-2` + +if [ "$?" -ne "0" ]; then + echo " !! Error when retrieving last tag" + exit -1 +fi + +# get last release commit hash +LAST_RELEASE_COMMIT_HASH=`git show --pretty=format:"%H" -s ${LAST_RELEASE_TAG_NAME=} | tail -n 1` + +if [ "$?" -ne "0" ]; then + echo " !! Error when retrieving last release commit hash" + exit -1 +fi + +echo "Last release tag is : ${LAST_RELEASE_TAG_NAME} (commit ${LAST_RELEASE_COMMIT_HASH})" +echo + + +# use git log to retrieve changelog content +CHANGELOG_CONTENT=`git log --no-merges --pretty=format:"%s" ${LAST_RELEASE_COMMIT_HASH}.. | grep -v "\[\#1262\]"` + +if [ "$?" -ne "0" ]; then + echo " !! Error when retrieving changelog content" + exit -1 +fi + +# get version +SOFTWARE_VERSION=`echo ${LAST_RELEASE_TAG_NAME} | cut -d "/" -f2- | cut -d "-" -f1` + +if [ "$?" -ne "0" ]; then + echo " !! Error when retrieving software version" + exit -1 +fi + +# add version info +SOFTWARE_VERSION_APPEND= +if [ ${RELEASE_MODE} ] +then + if [ "${RELEASE_MODE}" != "release" ]; then + SOFTWARE_VERSION_APPEND="~${RELEASE_MODE}" + fi +else + SOFTWARE_VERSION_APPEND="~snapshot${SNAPSHOT_TAG}" +fi + + + + +# iterate throw changelog files +for CHANGELOG_FILE in ${CHANGELOG_FILES[@]} +do + echo "Changelog : ${CHANGELOG_FILE}" + echo + rm -f ${CHANGELOG_FILE}.dch >/dev/null 2>&1 + + # if previous entry is a snapshot, remove it + sed -n 's/ //g;3p;3q' ${CHANGELOG_FILE} | grep "**SNAPSHOT" >/dev/null 2>&1 + if [ $? -eq 0 ]; then + echo "Previous entry is a snapshot, removing it" + + # detect first section length + FIRST_SECTION_LENGTH=`tail -n +2 ${CHANGELOG_FILE} | nl -ba | grep -m 1 "sflphone-.* SYSTEM; urgency=.*" | awk '{print $1}'` + + if [ "$?" -ne "0" ] || [ ! ${FIRST_SECTION_LENGTH} ]; then + echo " !! Error when retrieving snapshot entry length" + exit -1 + fi + + # remove first section + sed -i "1,${FIRST_SECTION_LENGTH}d" ${CHANGELOG_FILE} + + if [ "$?" -ne "0" ]; then + echo " !! Error when removing snapshot section" + exit -1 + fi + fi + + echo -n "Generate changelog " + IS_FIRST=1 + echo "${CHANGELOG_CONTENT}" | while read line + do + + if [ ${IS_FIRST} ] + then + yes | dch --changelog ${CHANGELOG_FILE} -b --allow-lower-version --no-auto-nmu --distribution SYSTEM --newversion ${SOFTWARE_VERSION}-SYSVER${SOFTWARE_VERSION_APPEND} "$line" >/dev/null 2>&1 + + if [ "$?" -ne "0" ]; then + echo + echo " !! Error with new version" + exit -1 + fi + + IS_FIRST= + else + dch --changelog ${CHANGELOG_FILE} --no-auto-nmu "$line" + if [ "$?" -ne "0" ]; then + echo + echo " !! Error when adding changelog entry" + exit -1 + fi + fi + echo -n . + done + + # add snapshot or release flag if needed + echo + if [ ${RELEASE_MODE} ]; then + sed -i "3i\ ** ${SOFTWARE_VERSION} ${RELEASE_MODE} **\n" ${CHANGELOG_FILE} + if [ "$?" -ne "0" ]; then + echo " !! Error when adding snapshot flag" + exit -1 + fi + else + sed -i "3i\ ** SNAPSHOT ${SNAPSHOT_TAG} **\n" ${CHANGELOG_FILE} + if [ "$?" -ne "0" ]; then + echo " !! Error when adding snapshot flag" + exit -1 + fi + fi + echo +done + +echo "All done !" + +exit 0 + diff --git a/tools/pysflphone/Errors.py b/tools/pysflphone/Errors.py new file mode 100644 index 0000000000000000000000000000000000000000..2a1e6b38693f22073d4073edb11d9656ecaa06af --- /dev/null +++ b/tools/pysflphone/Errors.py @@ -0,0 +1,40 @@ +# Copyright (C) 2008 by the Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +"""Our own Errors exceptions""" + +class SflPhoneError(Exception): + """Base class for all SflPhone exceptions.""" + def __init__(self, help=None): + self.help=help + def __str__(self): + return repr(self.help) + + +class SPdbusError(SflPhoneError): + """General error for dbus communication""" + +class SPdaemonError(SflPhoneError): + """General error for daemon communication""" + +class SPserverError(SflPhoneError): + """General error for server communication""" + +class SPconfigurationError(SflPhoneError): + """General error for configuration""" + +class SPaccountError(SflPhoneError): + """General error for account handling""" diff --git a/tools/pysflphone/__init__.py b/tools/pysflphone/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..94ffb667d0fe679dc40c0db3b26216748a8ea362 --- /dev/null +++ b/tools/pysflphone/__init__.py @@ -0,0 +1,17 @@ +# Copyright (C) 2008 by the Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + diff --git a/tools/pysflphone/pysflphone.py b/tools/pysflphone/pysflphone.py new file mode 100644 index 0000000000000000000000000000000000000000..d100b6b8167eed92decf0b40e0c0c10b3b218d3b --- /dev/null +++ b/tools/pysflphone/pysflphone.py @@ -0,0 +1,269 @@ +#!/usr/bin/env python +# +# Copyright (C) 2009 by the Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + + +import sys +import os +import random +from traceback import print_exc + +import gobject +from gobject import GObject + +import getopt + +import time + +from threading import Thread + +from Errors import * + +try: + import dbus + from dbus.mainloop.glib import DBusGMainLoop +except ImportError, e: + raise SflPhoneError("No python-dbus module found") + + +from sflphonectrlsimple import SflPhoneCtrlSimple + +# +# Main application +# + + +def printHelp(): + """Print help""" + print sys.argv[0] + " usage:\n\ +\n\ + --help Print this help.\n\ +\n\ + --gaa Get all accounts.\n\ + --gara Get all registered accounts. \n\ + --gaea Get all enabled accounts. \n\ + --gasa Get all SIP accounts. \n\ + --gaia Get all IAX accounts. \n\ + --gcc Get current callid. \n\ + --gacl Get active codec list. \n\ + \n\ + --gad <account> Get account details . \n\ + --enable <account> Enable the account. \n\ + --disable <account> Disable the account. \n\ + --register <account> Register the account. \n\ + --unregister <account> Unregister the account. \n\ + \n\ + --call <destination> Call to number \n\ + --transfer <destination> Transfer active call \n\ +\n\ + --gcd <callid|\"current\"> Get call details. \n\ + --accept <callid|\"current\"> Accept the call \n\ + --hangup <callid|\"current\"> Hangup the call \n\ + --refuse <callid|\"current\"> Refuse the call \n\ + --hold <callid|\"current\"> Hold the call \n\ + --unhold <callid|\"current\"> Unhold the call \n\ + --dtmf <key> Send DTMF\n" + + + +# Option definition +try: + opts, args = getopt.getopt(sys.argv[1:],"", [ "help", "gaa", "gal", "gara", "gaea", "gasa", "gaia", "gacl", "gac", "gcc", + "hangup=", "refuse=", "hold", "unhold=", "transfer=","dtmf=", "accept=", + "gcd=", "gad=", "register=", "unregister=", "enable=", "disable=", "call=" ]) +except getopt.GetoptError,err: + print str(err) + sys.exit(2) + + +# SFLPhone instance. +sflphone = SflPhoneCtrlSimple() + +# If no arguments, run the d-bus event loop. +if len(sys.argv) == 1: + loop = gobject.MainLoop() + loop.run() + +# Parse all arguments +else: + for opt, arg in opts: + + if opt == "--help": + printHelp() + + # + # info options + # + + # Get all accounts + elif opt == "--gaa": + for account in sflphone.getAllAccounts(): + print account + + # Get all registered accounts + elif opt == "--gara": + for account in sflphone.getAllRegisteredAccounts(): + print account + + # Get all enabled accounts + elif opt == "--gaea": + for account in sflphone.getAllEnabledAccounts(): + print account + + # Get all SIP accounts + elif opt == "--gasa": + for account in sflphone.getAllSipAccounts(): + print account + + # Get all IAX accounts + elif opt == "--gaia": + for account in sflphone.getAllIaxAccounts(): + print account + + # Get current call + elif opt == "--gcc": + call = sflphone.getCurrentCallID() + if call: + print call + else: + print "No current call." + + # Get account details + elif opt == "--gad": + if sflphone.checkAccountExists(arg): + details = sflphone.getAccountDetails(arg) + for var in details: + print var + ": " + details[var] + else: + print "No such account: " + arg + + # Get active codec list + elif opt == "--gacl": + print "Not implemented." + + # Get call details + elif opt == "--gcd": + if arg == "current": arg = sflphone.getCurrentCallID() + + details = sflphone.getCallDetails(arg) + if details: + print "Call: " + arg + print "Account: " + details['ACCOUNTID'] + print "Peer: " + details['PEER_NAME'] + "<" + details['PEER_NUMBER'] + ">" + + + # + # call options + # + + # Make a call + elif opt == "--call": + sflphone.Call(arg) + + # Hangup a call + elif opt == "--hangup": + if arg == "current": + arg = sflphone.getCurrentCallID() + + if arg: + sflphone.HangUp(arg) + + # Refuse a call + elif opt == "--refuse": + if arg == "current": arg = sflphone.getCurrentCallID() + sflphone.Refuse(arg) + + # Hold a call + elif opt == "--hold": + if arg == "current": arg = sflphone.getCurrentCallID() + sflphone.Hold(arg) + + # Unhold a call + elif opt == "--unhold": + if arg == "current": arg = sflphone.getCurrentCallID() + sflphone.UnHold(arg) + + # Transfer the current call + elif opt == "--transfer": + call = sflphone.callmanager.getCurrentCallID() + sflphone.Transfert(call, arg) + + # Send DTMF + elif opt == "--dtmf": + sflphone.Dtmf(arg) + + # Accept a call + elif opt == "--accept": + if arg == "current": arg = sflphone.getCurrentCallID() + sflphone.Accept(arg) + + + # + # account options + # + + # Register an account + elif opt == "--register": + if not sflphone.checkAccountExists(arg): + print "Account " + arg + ": no such account." + + elif arg in sflphone.getAllRegisteredAccounts(): + print "Account " + arg + ": already registered." + + else: + sflphone.setAccountRegistered(arg, True) + print arg + ": Sent register request." + + # Unregister an account + elif opt == "--unregister": + if not sflphone.checkAccountExists(arg): + print "Account " + arg + ": no such account." + + elif arg not in sflphone.getAllRegisteredAccounts(): + print "Account " + arg + ": is not registered." + + else: + sflphone.setAccountRegistered(arg, False) + print arg + ": Sent unregister request." + + # Enable an account + elif opt == "--enable": + if not sflphone.checkAccountExists(arg): + print "Account " + arg + ": no such account." + + elif sflphone.isAccountEnable(arg): + print "Account " + arg + ": already enabled." + + else: + sflphone.setAccountEnable(arg, True) + print arg + ": Account enabled." + + # Disable an account + elif opt == "--disable": + if not sflphone.checkAccountExists(arg): + print "Account " + arg + ": no such account." + + elif not sflphone.isAccountEnable(arg): + print "Account " + arg + ": already disabled." + + else: + sflphone.setAccountRegistered(arg, False) + sflphone.setAccountEnable(arg, False) + print arg + ": Account disabled." + + diff --git a/tools/pysflphone/pysflphone_testdbus.py b/tools/pysflphone/pysflphone_testdbus.py new file mode 100644 index 0000000000000000000000000000000000000000..52f58ba132bc940815836cc344ea286132d55d4d --- /dev/null +++ b/tools/pysflphone/pysflphone_testdbus.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python + +from sflphonectrlsimple import SflPhoneCtrlSimple + + +class SflPhoneTests(SflPhoneCtrlSimple): + + def test_get_allaccounts_methods(self): + + print "--- getAllAccounts() ---" + for account in self.getAllAccounts(): + print " " + account + print "\n" + + print "--- getAllRegisteredAccounts() ---" + for account in self.getAllRegisteredAccounts(): + print " " + account + print "\n" + + print "--- getAllSipAccounts() ---" + for account in self.getAllSipAccounts(): + print " " + account + print "\n" + + print "--- getAllIaxAccounts() ---" + for account in self.getAllIaxAccounts(): + print " " + account + print "\n" + + # def test_codecs_methods(self): + +# print "--- getCodecList() ---" +# for codec int self.getCodecList(): +# print " " + codec +# print "\n" + + +sfl = SflPhoneTests() + +sfl.test_get_allaccounts_methods() + + + + + + diff --git a/tools/pysflphone/sflphonectrlsimple.py b/tools/pysflphone/sflphonectrlsimple.py new file mode 100755 index 0000000000000000000000000000000000000000..a7d0a5ee2a7bad04adcb6f09b80ff6d4fadae411 --- /dev/null +++ b/tools/pysflphone/sflphonectrlsimple.py @@ -0,0 +1,512 @@ +#!/usr/bin/env python +# +# Copyright (C) 2009 by the Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +"""Simple class for controlling SflPhoned through DBUS""" + +import sys +import os +import random +from traceback import print_exc + +import gobject +from gobject import GObject + +import getopt + +import time +import md5 + +from threading import Thread + +from Errors import * + +try: + import dbus + from dbus.mainloop.glib import DBusGMainLoop +except ImportError, e: + raise SflPhoneError("No python-dbus module found") + + +class SflPhoneCtrlSimple(object): + """Simple class for controlling SflPhoned through DBUS""" + + # list of active calls (known by the client) + activeCalls = {} + + def __init__(self, name=sys.argv[0]): + # current active account + self.account = None + # client name + self.name = name + # client registered to sflphoned ? + self.registered = False + + self.register() + + + def __del__(self): + if self.registered: + self.unregister() + + + def register(self): + if self.registered: + return + + try: + # register the main loop for d-bus events + DBusGMainLoop(set_as_default=True) + self.bus = dbus.SessionBus() + except dbus.DBusException, e: + raise SPdbusError("Unable to connect DBUS session bus") + + dbus_objects = dbus.Interface(self.bus.get_object( + 'org.freedesktop.DBus', '/org/freedesktop/DBus'), + 'org.freedesktop.DBus').ListNames() + + if not "org.sflphone.SFLphone" in dbus_objects: + raise SPdbusError("Unable to find org.sflphone.SFLphone in DBUS. Check if sflphoned is running") + + try: + proxy_instance = self.bus.get_object("org.sflphone.SFLphone", + "/org/sflphone/SFLphone/Instance", introspect=False) + proxy_callmgr = self.bus.get_object("org.sflphone.SFLphone", + "/org/sflphone/SFLphone/CallManager", introspect=False) + proxy_confmgr = self.bus.get_object("org.sflphone.SFLphone", + "/org/sflphone/SFLphone/ConfigurationManager", + introspect=False) + + self.instance = dbus.Interface(proxy_instance, + "org.sflphone.SFLphone.Instance") + self.callmanager = dbus.Interface(proxy_callmgr, + "org.sflphone.SFLphone.CallManager") + self.configurationmanager = dbus.Interface(proxy_confmgr, + "org.sflphone.SFLphone.ConfigurationManager") + + except dbus.DBusException, e: + + raise SPdbusError("Unable to bind to sflphoned api, ask core-dev team to implement getVersion method and start to pray.") + + try: + self.instance.Register(os.getpid(), self.name) + self.registered = True + except: + raise SPdaemonError("Client registration failed") + + try: + proxy_callmgr.connect_to_signal('incomingCall', self.onIncomingCall) + proxy_callmgr.connect_to_signal('callStateChanged', self.onCallStateChanged) + except dbus.DBusException, e: + print e + + + def unregister(self): + + if not self.registered: + return + #raise SflPhoneError("Not registered !") + try: + self.instance.Unregister(os.getpid()) + self.registered = False + except: + raise SPdaemonError("Client unregistration failed") + + + def isRegistered(self): + return self.registered + + + # + # Signal handling + # + + # On incoming call event, add the call to the list of active calls + def onIncomingCall(self, account, callid, to): + print "Incoming call: " + account + ", " + callid + ", " + to + self.activeCalls[callid] = {'Account': account, 'To': to, 'State': '' } + + # On call state changed event, set the values for new calls, + # or delete the call from the list of active calls + def onCallStateChanged(self, callid, state): + print "Call state changed: " + callid + ", " + state + if state == "HUNGUP": + try: + del self.activeCalls[callid] + except KeyError: + print "Call " + callid + " didn't exist. Cannot delete." + + elif state in [ "RINGING", "CURRENT", "INCOMING", "HOLD" ]: + try: + self.activeCalls[callid]['State'] = state + except KeyError, e: + print "This call didn't exist!: " + callid + ". Adding it to the list." + callDetails = self.getCallDetails(callid) + self.activeCalls[callid] = {'Account': callDetails['ACCOUNTID'], 'To': callDetails['PEER_NUMBER'], 'State': state } + elif state in [ "BUSY", "FAILURE" ]: + try: + del self.activeCalls[callid] + except KeyError, e: + print "This call didn't exist!: " + callid + +# elif state == "UNHOLD_CURRENT": +# self.activeCalls[callid]['State'] = "UNHOLD_CURRENT" + + + # + # Account management + # + def getAllAccounts(self): + """ Return a list with all accounts""" + return self.configurationmanager.getAccountList() + + + def getAllEnabledAccounts(self): + """ Return a list with all enabled accounts""" + accounts = self.getAllAccounts() + activeaccounts = [] + for testedaccount in accounts: + if self.isAccountEnable(testedaccount): + activeaccounts.append(testedaccount) + return activeaccounts + + + def getAccountDetails(self, account=None): + """Return a list of string. If no account is provided, active account is used""" + + if account is None: + if self.account is None: + raise SflPhoneError("No provided or current account !") + if checkAccountExists(self.account): + return self.configurationmanager.getAccountDetails(self.account) + else: + if self.checkAccountExists(account): + + return self.configurationmanager.getAccountDetails(account) + + + def setAccountByAlias(self, alias): + """Define as active the first account who match with the alias""" + + for testedaccount in self.getAllAccounts(): + details = self.getAccountDetails(testedaccount) + if ( details['Account.enable'] == "TRUE" and + details['Account.alias'] == alias ): + self.account = testedaccount + return + raise SPaccountError("No enabled account matched with alias") + + + def getAccountByAlias(self, alias): + """Get account name having its alias""" + + for account in self.getAllAccounts(): + details = self.getAccountDetails(account) + if details['Account.alias'] == alias: + return account + + raise SPaccountError("No account matched with alias") + + def setAccount(self, account): + """Define the active account""" + + if account in self.getAllAccounts(): + self.account = account + else: + raise SflPhoneError("Not a valid account") + + def setFirstRegisteredAccount(self): + """Find the first enabled account and define it as active""" + + rAccounts = self.getAllRegisteredAccounts() + if 0 == len(rAccounts): + raise SflPhoneError("No registered account !") + self.account = rAccounts[0] + + def setFirstActiveAccount(self): + """Find the first enabled account and define it as active""" + + aAccounts = self.getAllEnabledAccounts() + if 0 == len(aAccounts): + raise SflPhoneError("No active account !") + self.account = aAccounts[0] + + + def getAccount(self): + """Return the active account""" + + return self.account + + + def isAccountRegistered(self, account=None): + """Return True if the account is registered. If no account is provided, active account is used""" + + if account is None: + if self.account is None: + raise SflPhoneError("No provided or current account !") + account = self.account + return self.getAccountDetails(account)['Status'] == "REGISTERED" + + + def isAccountEnable(self, account=None): + """Return True if the account is enabled. If no account is provided, active account is used""" + + if account is None: + if self.account is None: + raise SflPhoneError("No provided or current account !") + account = self.account + return self.getAccountDetails(account)['Account.enable'] == "TRUE" + + def setAccountEnable(self, account=None, enable=False): + """Set account enabled""" + if account is None: + if self.account is None: + raise SflPhoneError("No provided or current account !") + account = self.account + + if enable == True: + details = self.getAccountDetails(account) + details['Account.enable'] = "TRUE" + self.configurationmanager.setAccountDetails(account, details) + else: + details = self.getAccountDetails(account) + details['Account.enable'] = "FALSE" + self.configurationmanager.setAccountDetails(account, details) + + def checkAccountExists(self, account=None): + """ Checks if the account exists """ + if account is None: + raise SflPhoneError("No provided or current account !") + return account in self.getAllAccounts() + + def getAllRegisteredAccounts(self): + """Return a list of registered accounts""" + + registeredAccountsList = [] + for account in self.getAllAccounts(): + if self.isAccountRegistered(account): + registeredAccountsList.append(account) + + return registeredAccountsList + + def getAllEnabledAccounts(self): + """Return a list of enabled accounts""" + + enabledAccountsList = [] + for accountName in self.getAllAccounts(): + if self.getAccountDetails(accountName)['Account.enable'] == "TRUE": + enabledAccountsList.append(accountName) + + return enabledAccountsList + + def getAllSipAccounts(self): + """Return a list of SIP accounts""" + + sipAccountsList = [] + for accountName in self.getAllAccounts(): + if self.getAccountDetails(accountName)['Account.type'] == "SIP": + sipAccountsList.append(accountName) + + return sipAccountsList + + def getAllIaxAccounts(self): + """Return a list of IAX accounts""" + + iaxAccountsList = [] + for accountName in self.getAllAccounts(): + if self.getAccountDetails(accountName)['Account.type'] == "IAX": + iaxAccountsList.append(accountName) + + return iaxAccountsList + + def setAccountRegistered(self, account=None, register=False): + """ Tries to register the account """ + + if account is None: + if self.account is None: + raise SflPhoneError("No provided or current account !") + account = self.account + + try: + if register: + self.configurationmanager.sendRegister(account, int(1)) + #self.setAccount(account) + else: + self.configurationmanager.sendRegister(account, int(0)) + #self.setFirstRegisteredAccount() + except SflPhoneError, e: + print e + + # + # Codec manager + # + + def getCodecList(self): + """ Return the codec list """ + return self.configurationmanager.getCodecList() + + def getActiveCodecList(self): + """ Return the active codec list """ + return self.configurationmanager.getActiveCodecList() + + + + # + # Call management + # + + def getCurrentCallID(self): + """Return the callID of the current call if any""" + + return self.callmanager.getCurrentCallID() + + + def getCurrentCallDetails(self): + """Return informations on the current call if any""" + + return self.callmanager.getCallDetails(self.getCurrentCallID()) + + def getCallDetails(self, callid): + """Return informations on this call if exists""" + + return self.callmanager.getCallDetails(callid) + + def printClientCallList(self): + print "Client active call list:" + print "------------------------" + for call in self.activeCalls: + print "\t" + call + + # + # Action + # + def Call(self, dest): + """Start a call and return a CallID""" + if not self.account: + self.setFirstRegisteredAccount() + + if not self.isAccountRegistered(): + raise SflPhoneError("Can't place a call without a registered account") + + if dest is None or dest == "": + raise SflPhoneError("Invalid call destination") + + # callid = str(random.randrange(2**32-1)) + t = long( time.time() * 1000 ) + r = long( random.random()*100000000000000000L ) + data = str(t) + str(r) + callid = md5.md5(data).hexdigest() + + # Add the call to the list of active calls and set status to SENT + self.activeCalls[callid] = {'Account': self.account, 'To': dest, 'State': 'SENT' } + # Send the request to the CallManager + self.callmanager.placeCall(self.account, callid, dest) + + return callid + + + def HangUp(self, callid): + """End a call identified by a CallID""" + if not self.account: + self.setFirstRegisteredAccount() + + if not self.isAccountRegistered(): + raise SflPhoneError("Can't hangup a call without a registered account") + + if callid is None or callid == "": + pass # just to see + #raise SflPhoneError("Invalid callID") + + self.callmanager.hangUp(callid) + + + def Transfert(self, callid, to): + """Transfert a call identified by a CallID""" + if not self.account: + self.setFirstRegisteredAccount() + + if not self.isAccountRegistered(): + raise SflPhoneError("Can't transfert a call without a registered account") + + if callid is None or callid == "": + raise SflPhoneError("Invalid callID") + + self.callmanager.transfert(callid, to) + + + def Refuse(self, callid): + """Refuse an incoming call identified by a CallID""" + if not self.account: + self.setFirstRegisteredAccount() + + if not self.isAccountRegistered(): + raise SflPhoneError("Can't refuse a call without a registered account") + + if callid is None or callid == "": + raise SflPhoneError("Invalid callID") + + self.callmanager.refuse(callid) + + + def Accept(self, callid): + """Accept an incoming call identified by a CallID""" + if not self.account: + self.setFirstRegisteredAccount() + + if not self.isAccountRegistered(): + raise SflPhoneError("Can't accept a call without a registered account") + + if callid is None or callid == "": + raise SflPhoneError("Invalid callID") + + self.callmanager.accept(callid) + + + def Hold(self, callid): + """Hold a call identified by a CallID""" + if not self.account: + self.setFirstRegisteredAccount() + + if not self.isAccountRegistered(): + raise SflPhoneError("Can't hold a call without a registered account") + + if callid is None or callid == "": + raise SflPhoneError("Invalid callID") + + self.callmanager.hold(callid) + + + def UnHold(self, callid): + """Unhold an incoming call identified by a CallID""" + if not self.account: + self.setFirstRegisteredAccount() + + if not self.isAccountRegistered(): + raise SflPhoneError("Can't unhold a call without a registered account") + + if callid is None or callid == "": + raise SflPhoneError("Invalid callID") + + self.callmanager.unhold(callid) + + + def Dtmf(self, key): + """Send a DTMF""" + self.callmanager.playDTMF(key) + + + diff --git a/www/contact.php b/www/contact.php deleted file mode 100644 index 1649ffc79a831948346a8739f301480a392ae0a1..0000000000000000000000000000000000000000 --- a/www/contact.php +++ /dev/null @@ -1,55 +0,0 @@ -<?php -$name = 'contact'; -$javascript = array('jquery','animated-menu'); - -include('include/header.php'); - -?> - -<div id="content"> - <table class="pourcentWidth contactTabs" cellpadding="0" cellspacing="0"> - <tbody> - <tr> - <td > - <h5>SAVOIR-FAIRE LINUX - IN MONTREAL</h5> - <p>7275 Saint Urbain Bureau 306</p> - <p>Montréal (Québec) H2R 2Y5</p> - <p>Tél. (514) 276-5468</p> - <p>Fax: (514) 276-5465 </p> - <p class="previewGoogle"><a href="http://maps.google.com/maps?f=q&hl=fr&q=151+Slater+Street,+ottawa&ie=UTF8&z=15&ll=45.420684,-75.701895&spn=0.013706,0.043259&om=1&iwloc=addr" title="Opens external link in new window" target="_blank" class="external-link-new-window" > - <img src="img/mtl.png" width="400" height="347" class="perso" alt="" /></a> - </p> - - </td > - <td > - <h5>IN QUEBEC :</h5> - <p>275, rue du Parvis </p> - <p>Bureau 310 </p> - <p>Québec (Québec) G1K 6G7 </p> - <p>Tél / Fax : (418) 525-7354 </p> - <p class="previewGoogle"><a href="http://maps.google.com/maps?f=q&hl=fr&q=151+Slater+Street,+ottawa&ie=UTF8&z=15&ll=45.420684,-75.701895&spn=0.013706,0.043259&om=1&iwloc=addr" title="Opens external link in new window" target="_blank" class="external-link-new-window" > - <img src="img/qc.png" width="400" height="347" class="perso" alt="" /></a> - </p> - </td > - </tr> - <tr> - <td > - <h5>IN OTTAWA / Gatineau :</h5> - <p>151, rue Slater</p> - <p>Bureau 504</p> - <p>Ottawa, ON, K1P 5H3</p> - <p>Tél / Fax : 613-688-8081 </p> - <p class="previewGoogle"><a href="http://maps.google.com/maps?f=q&hl=fr&q=151+Slater+Street,+ottawa&ie=UTF8&z=15&ll=45.420684,-75.701895&spn=0.013706,0.043259&om=1&iwloc=addr" title="Opens external link in new window" target="_blank" class="external-link-new-window" > - <img src="img/ott.png" width="400" height="347" class="perso" alt="" /></a> - </p> - </td> - </tr> - </tbody> - </table> - </div> - -<?php - -include('include/footer.php'); - -?> diff --git a/www/css/galleria.css b/www/css/galleria.css deleted file mode 100644 index 73ca0d9700d4ce9cb5820c2db5e4083f007fd811..0000000000000000000000000000000000000000 --- a/www/css/galleria.css +++ /dev/null @@ -1,24 +0,0 @@ -.galleria{list-style:none;width:100%} -.galleria li{display:block;width:80px;height:80px;overflow:hidden;float:left;margin:0 10px 10px 0} -.galleria li a{display:none} -.galleria li div{position:absolute;display:none;top:0;left:180px} -.galleria li div img{cursor:pointer} -.galleria li.active div img,.galleria li.active div{display:block} -.galleria li img.thumb{cursor:pointer;top:auto;left:auto;display:block;width:auto;height:auto} -.galleria li .caption{display:block;padding-top:.5em} -* html .galleria li div span{width:400px} /* MSIE bug */ - -.galleria_wrapper img { - height: 400px; - outline: 4px solid #bcf; - margin-bottom: 10px; -} - -div.galleria_container{ - height: 450px; - text-align: center; -} - -.hover { - outline: 3px solid #acf; -} diff --git a/www/css/reset.css b/www/css/reset.css deleted file mode 100644 index d7c9809743ba3e2354e1dc4c17401adb87044d44..0000000000000000000000000000000000000000 --- a/www/css/reset.css +++ /dev/null @@ -1,90 +0,0 @@ -/* ---------------------------------------- - - 1. Basic - - ---------------------------------------- */ - -#slider { - width: 328px; /*important to be same as image width */ - /* height: 300px; important to be same as image height */ - position: relative; /* important */ - overflow: hidden; /* important */ -} - -#slider li{ - list-style:none; -} - -#slider1, #slider2 { - width: 260px; /* important to be same as image width */ - /*height: 300px; important to be same as image height */ - position: relative; /* important */ - overflow: hidden; /* important */ -} - -#sliderContent, #slider1Content, #slider2Content { - /* width: 720px; - position: absolute; - top: 0; - margin-left: 0;*/ -} -.sliderImage, .slider1Image, .slider2Image { - float: left; - position: relative; - display: none; - padding:5px; -} -.sliderImage span { - position: absolute; - font: 10px/15px Arial, Helvetica, sans-serif; - padding: 10px 13px; - width: 100%; - background-color: #ddfabb; - filter: alpha(opacity=80); - -moz-opacity: 0.8; - -khtml-opacity: 0.8; - opacity: 0.8; - color: #000; - display: none; - border:1px solid #ddd; -} - -.slider1Image span, .slider2Image span { - position: absolute; - font: 10px/15px Arial, Helvetica, sans-serif; - padding: 10px 13px; - width: 694px; - background-color: #000; - filter: alpha(opacity=70); - -moz-opacity: 0.7; - -khtml-opacity: 0.7; - opacity: 0.7; - color: #fff; - display: none; -} -.clear { - clear: both; -} -.sliderImage span strong, .slider1Image span strong, .slider2Image span strong { - font-size: 14px; -} -.top { - top: 0; - left: 0; -} -.bottom { - bottom: 0; - left: 5px; -} -.left { - top: 0; - left: 0; - width: 110px !important; - height: 280px; -} -.right { - right: 0; - bottom: 0; - width: 90px !important; - height: 290px; -} diff --git a/www/css/s3Slider.css b/www/css/s3Slider.css deleted file mode 100644 index a4b21841390ad79ebde978cf60f26fdaa6eb829c..0000000000000000000000000000000000000000 --- a/www/css/s3Slider.css +++ /dev/null @@ -1,7 +0,0 @@ -/* ---------------------------------------- - - Import CSS files - - ---------------------------------------- */ - -@import url("reset.css"); \ No newline at end of file diff --git a/www/css/style1.css b/www/css/style1.css deleted file mode 100644 index 93ccea13258a9902b8f3dcf15f97519be21f06b6..0000000000000000000000000000000000000000 --- a/www/css/style1.css +++ /dev/null @@ -1,555 +0,0 @@ -@charset "UTF-8"; - -/* CSS Document - Auteur : Espérance Guerson noël - Date : 2009-01-23 (23 janvier 2009) - - sfl-phone -*/ - - -* { - margin: 0 ; - padding: 0; -} - - -a:link { - text-decoration:none; - color: #009cc9; -} - -a:Hover { - text-decoration:none; - color:#a47944; -} -a:visited { - text-decoration:none; -} - -p { - color : #555555; -} - -h5 { - color : #555555; - margin-bottom : 10px; - padding : 2px; -} - -img { - border: none; -} - -img.logo { - margin: 5px; -} - -img.perso { - border: 1px dashed #ccc; - padding: 3px; -} - -.clear { - clear: both; -} - -.float_it_left { - float: left; -} - -.float_it_right { - float: right; -} - -.float_it_middle { - text-align: center; -} - -.fntBleu { - color: #009cc9; -} - -.fntBrun { - color: #a47944; -} - -.title { - font: normal 15pt Georgia, "Times New Roman", Times, serif; - letter-spacing: 1px; - padding: 16px 20px 16px 0; -} - -.alignCenter{ - text-align: center; -} -.leftAlign{ - text-align: left; -} - -.rightAlign{ - text-align: right; -} - -.previewGoogle{ - padding: 8px 0px 8px 0px; -} - -.highlight { - color: #a47944; -} - -.highlight:hover { - color: #a47944; - text-decoration:underline; -} - -.list { - padding: 10px 0 10px 0; -} - - - - - - - - - -/* enveloppe - page*/ -body { - font-family: verdana, Arial, Helvetica, sans-serif; - font-size: 10pt; - color: #111111; - background-color: #cde5ed; -} - -#global{ - background: #fff url('../img/content_bg.jpg') repeat-x; -} - -#controller { - margin: 0 auto; - /* min-width: 1000px; */ - width: 92%; -} - -#header { - width: 100%; - height: 159px; - /*background: #a47a48 url('../img/head_bg_a.jpg') no-repeat; */ - background: #0f5787 url('../img/head_bg_a.jpg') no-repeat; -} - - -.navigation { - clear: both; -} - -.option { - clear: both; -} - -.underOption { - padding: 5px 0 5px 0; -} - - - -#content { - padding: 10px 0px 0px 0px; - clear:both; -} -.pourcentWidth { - width: 100%; -} - - - -/* index content */ -.imgSliderTd { - height:420px; -} -.tabsIndex td{ -} -.tabsIndex ul.list li{ - font-weight: normal; - font-size: 13pt; - margin-bottom: 5px; - margin-left: 15px; - min-width:270px; - list-style-type:circle; - /*list-style-image:url(../img/puces.png);*/ -} - -#index_td_gauche { - padding: 10px; - width: 49.5%; - background-color: #fff; - border: 1px solid #ededed; - border-bottom:none; -} - -#index_td_separator { - background-color: transparent; -} - -#index_td_droite { - padding: 50px; - width: 49.5%; - background: #fff url(../img/corner_a.png) no-repeat left top; - border: 1px solid #ededed; - border-bottom:none; -} - - -/* fonction */ -.fonctionTabs { - padding: 20px 20px 20px 20px; - background-color: #fff; - border: 1px solid #ededed; - border-bottom:none; -} -.fonctionTabs td { - padding:5px; -} - - - -/* download */ -.downloadTabs { - padding: 20px 20px 20px 20px; - background-color: #fff; - border: 1px solid #ededed; - border-bottom:none; -} -.downloadTabs td { - padding:5px; -} - - - -/* contact */ -.contactTabs { - padding: 20px 20px 20px 20px; - background-color: #fff; - border: 1px solid #ededed; - border-bottom:none; -} -.contactTabs td { - padding:5px; -} - - - - - -/* foot */ - -#botDescr { - font-size: 9pt; - background-color: #fafafa; - border: 1px dashed #ddd; - padding: 5px; - margin-top:15px; - clear: both; -} - -#foot { - font-size: 9pt; - -} - -.footTabStyle { - width: 100%; -} - -.leftfoot { - padding-top: 15px; - padding-right:10px; -} - -.rightfoot { - padding-top: 15px; - width: 90%; -} - -#bottomLink { - padding: 0px 11px 0px 11px; - height: 100%; -} - -.footBlock { - width:200px; - margin-left:20px; - border-right:1px solid #dddddd; - float:left; -} - -.rightfootBlock { - width:200px; - margin-left:20px; - float:right; -} - -.rightfootBlock li { - color:#bdbdbd; - text-decoration:none; - list-style-type:none; - text-align: right; -} - - -.footBlock ul { - list-style:none; -} - -.footBlock li { - margin-bottom:1px; -} - -.footBlock li a { - text-decoration:none; - color:#58abd4; -} - -.footBlock li a:Hover { - text-decoration:none; - color:#a47944; -} - -#bottomPage { - margin-top: 10px; - width: 100%; - height: 125px; - background : transparent url('../img/bot_bg_a.jpg') repeat-x; -} - - - - - - - - - - - - - - - - - - -/* create several round corner */ -.cadre{ - background-color: #f0f0f0; - width: 100%; -} - -.cadre_hg, .cadre_hd, -.cadre_bg, .cadre_bd{ - width: 11px; - height: 11px; - background-repeat: no-repeat; - font-size: 1px; -} - -.cadre_hg{ - background: url('../img/cadre_rounded.png') 0 0; -} -.cadre_hd{ - background: url('../img/cadre_rounded.png') 11px 0; - float: right; -} -.cadre_bg{ - background: url('../img/cadre_rounded.png') 0 11px; -} -.cadre_bd{ - background: url('../img/cadre_rounded.png') 11px 11px; - float: right; -} - - - - - - -/* Navigation */ - -/* NAV */ -.navTabs{ - background-color: #fff; - border: 1px solid #ddd; - min-height: 26px; - width: 100%; - padding: 8px 8px 0px 8px; -} - - -#navigation li { - float:right; - padding:0 1px 0 0; - position:relative; - list-style:none; -} - -#navigation a { - float:left; - color:#58abd4; - text-decoration:none; - width:145px; - text-align:center; - line-height:25px; - font-size:13pt; - font-weight:normal; - white-space: nowrap; - overflow: hidden; -} -#navigation span { - padding:0 12px 0 6px; -} - -#navigation a:hover { - color:#a47944; -} - -#navigation .active a { - background-position:0 0; - background-color:#ededed; -} -#navigation div { - width:100%; - position:absolute; - top:22px; - left:-1px; - display:none; -} -#navigation li:hover div, -#navigation li.hover div {display:block;} -#navigation div ul { - padding:5px; - margin:0; - width:145px; - list-style:none; - z-index: 110; -} -#navigation div ul li { - float:left; - position:relative; - z-index:999; -} -#navigation div ul a { - float:none; - color:#000; - font-size:11px; - text-align:left; - display:block; - width:145px; - padding:4px 4px 4px 10px; - border-bottom:1px solid #d6d6d6; - background:#ececec; -} - - - -#navigation div ul a:hover { - color:#fff; - background:#105786; -} - -/* Download tables */ -/* -table.download-table > thead > th { - background: #CEF; -} - -table.download-table { - width: 100%; - border: 0; - background: #DDD; - border-spacing: 1px; -} - -table.download-table > thead > th + th { - width: 80%; -} - -table.download-table > thead > th { - padding: 2px 5px; - background: #CEF; -} - -table.download-table > tbody > tr > td { - background: #FAFAFA; - vertical-align: top; -} - -table.download-table > tbody > tr > td:first-child { - vertical-align: middle; -} - -table.download-table > tbody > tr > td { - padding: 5px; -} - */ -table.download-table th { - background: #CEF; -} - -table.download-table { - width: 100%; - border: 0; - background: #DDD; - border-spacing: 1px; -} - -table.download-table th + th { - width: 80%; -} - -table.download-table th { - padding: 2px 5px; - background: #CEF; -} - -table.download-table td { - background: #FAFAFA; - vertical-align: top; -} - -table.download-table td:first-child { - vertical-align: middle; -} - -table.download-table td { - padding: 5px; -} -code { - border: 1px solid #ddd; - background: #eee; - line-height: 30px; - padding: 3px; -} - -.discover-image { - bottom: -50px; - left: -50px; - position: relative; -} - -.thumbnails li { - list-style: none; - /*display: table-cell;*/ - opacity: 0.5; -} - -.thumbnails li img { - outline: 4px solid; - margin: 0.5em; -} - -.thumbnails li:hover { - opacity: 1; -} - diff --git a/www/data/.DS_Store b/www/data/.DS_Store deleted file mode 100755 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 Binary files a/www/data/.DS_Store and /dev/null differ diff --git a/www/data/Picasa.ini b/www/data/Picasa.ini deleted file mode 100644 index 64b46d1da36fc687770329f8c3f57e8400a621e6..0000000000000000000000000000000000000000 --- a/www/data/Picasa.ini +++ /dev/null @@ -1,3 +0,0 @@ - -[Picasa] -name=data diff --git a/www/data/bot_bg_a.psd b/www/data/bot_bg_a.psd deleted file mode 100755 index 6d1003ffb60d7bec269a8d00c4795d8938bf43d8..0000000000000000000000000000000000000000 Binary files a/www/data/bot_bg_a.psd and /dev/null differ diff --git a/www/data/bot_bg_b.psd b/www/data/bot_bg_b.psd deleted file mode 100755 index 4f7c178d9f0752cffe8617d2c5c9a457db14137e..0000000000000000000000000000000000000000 Binary files a/www/data/bot_bg_b.psd and /dev/null differ diff --git a/www/data/cadre_rounded.psd b/www/data/cadre_rounded.psd deleted file mode 100755 index 17b5de4559d8d2c36652efee84f7c4e28d6e76b6..0000000000000000000000000000000000000000 Binary files a/www/data/cadre_rounded.psd and /dev/null differ diff --git a/www/data/comm.psd b/www/data/comm.psd deleted file mode 100755 index b725dacb2537dcc32ef74b99eaf9c119425d9a2d..0000000000000000000000000000000000000000 Binary files a/www/data/comm.psd and /dev/null differ diff --git a/www/data/download_icon.psd b/www/data/download_icon.psd deleted file mode 100755 index 9301e53450a52e442c81a09d758f31f6b91c8979..0000000000000000000000000000000000000000 Binary files a/www/data/download_icon.psd and /dev/null differ diff --git a/www/data/logo.psd b/www/data/logo.psd deleted file mode 100755 index 8952f7556331694fdaf31cd396a1be1a4a07597c..0000000000000000000000000000000000000000 Binary files a/www/data/logo.psd and /dev/null differ diff --git a/www/data/sflPhone_a.psd b/www/data/sflPhone_a.psd deleted file mode 100755 index 257ac5cf0517d2b9b0f943fa5e5be4620edffb6b..0000000000000000000000000000000000000000 Binary files a/www/data/sflPhone_a.psd and /dev/null differ diff --git a/www/download.php b/www/download.php deleted file mode 100644 index 986eda0ef830c505093d36c745f6e00fe20ff994..0000000000000000000000000000000000000000 --- a/www/download.php +++ /dev/null @@ -1,120 +0,0 @@ -<?php -$name = 'download'; -$javascript = array('jquery','animated-menu'); - -include_once('utils.php'); - -include('include/header.php'); - -?> - <div id="content"> - <h1 class="title alignLeft fntBleu" style="margin:10px; padding:10px;">Binaries download</h1> - <h4 class= "alignLeft fntBleu" style="margin:10px; padding:10px;"> - Latest version: <? echo $GLOBALS['SFLPHONE_LATEST_VERSION']; ?> - <br>Release Date: - <? echo $GLOBALS['SFLPHONE_RELEASE_DATE']; ?> - </h4> - <table class="download-table" > - <thead> - <th>System</th> - <th>Notes</th> - <th>Maintainer</th> - </thead> - <tbody> - <tr> - <td><img class="logo" src="img/logos/small/ubuntu.png" alt="Ubuntu downloads" /></td> - <td> - <!-- UBUNTU SECTION --> - <ul style="margin:10px; padding:5px;"> - <li>Ubuntu 9.04 "Jaunty Jackalope" - <a href="http://sflphone.org/debian/dists/jaunty/universe/binary-i386/sflphone_0.9.3-0ubuntu2_i386.deb">i386</a> - </li> - - - <li>Ubuntu 8.10 "Intrepid Ibex" - <a href="http://sflphone.org/debian/dists/intrepid/universe/binary-i386/sflphone_0.9.3-0ubuntu3_i386.deb">i386</a> - | <a href="http://sflphone.org/debian/dists/intrepid/universe/binary-amd64/sflphone_0.9.3-0ubuntu3_amd64.deb" >amd64</a> - </li> - - <li>Ubuntu 8.04 LTS "Hardy Heron" - <a href="http://sflphone.org/debian/dists/hardy/universe/binary-i386/sflphone_0.9.3-0ubuntu3_i386.deb" >i386</a> - | <a href="http://sflphone.org/debian/dists/hardy/universe/binary-amd64/sflphone_0.9.3-0ubuntu3_amd64.deb" >amd64</a> - </li> - </ul> - <i>Before installing the latest version 0.9.3-3, please remove the following packages: <b>dbus-c++-1</b> and <b>sflphone-iax2</b>. - The both libraries are now provided with sflphone package.</i> - <br/><br/> - <a href="http://projects.savoirfairelinux.net/wiki/sflphone/DebianPackaging">add our repository</a> - | <a href="http://projects.savoirfairelinux.net/wiki/sflphone/093">release note and changelog</a> - </td> - <td><a href="mailto:emmanuel.milou@savoirfairelinux.com">Emmanuel Milou</a></td> - </tr> - - <!-- END UBUNTU SECTION --> - - <!-- FEDORA SECTION --> - <tr> - <td><img class="logo" src="img/logos/small/fedora.png" alt="Fedora downloads" /></td> - <td> - <ul style="margin:10px; padding:5px;"> - <li> - Fedora 9 "Sulphur" <a href="http://sflphone.org/downloads/sflphone-0.9.2-2.i386.rpm" >i386</a> - </li> - <li> - Fedora 10 : <i>Soon</i><br /> - </li> - </ul> - <br/> - <a href="http://projects.savoirfairelinux.net/wiki/sflphone/YumRepository">add our repository</a> - | <a href="http://projects.savoirfairelinux.net/wiki/sflphone/093">release note and changelog</a> - </td> - <td><a href="mailto:emmanuel.milou@savoirfairelinux.com">Emmanuel Milou</a></td> - </tr> - <tr> - <td><img class="logo"src="img/logos/small/suse.png" alt="Suse downloads" /></td> - <td> - <ul style="margin:10px; padding:5px;"> - <li>OpenSUSE 11: <a href="http://sflphone.org/yum/suse/11/i586/sflphone-0.9.3-2suse.i586.rpm">i586</a> - </li> - </ul> - <br/> - <a href="http://projects.savoirfairelinux.net/wiki/sflphone/YumRepository">add our repository</a> - | <a href="http://projects.savoirfairelinux.net/wiki/sflphone/093">release note and changelog</a> - </td> - <td><a href="mailto:emmanuel.milou@savoirfairelinux.com">Emmanuel Milou</a></td> - </tr> - <tr> - <td><img class="logo" src="img/logos/small/debian.png" alt="Debian downloads" /></td> - <td> - <i>Soon available</i> </td> - <td></td> - </tr> - - </tbody> - </table> - <h1 class="title alignLeft fntBleu" style="margin:10px; padding:10px;">Sources download</h1> - <table class="download-table" > - <thead> - <th>Sources</th> - <th>Notes</th> - </thead> - <tbody> - <tr> - <td><a href="http://projects.savoirfairelinux.net/attachments/download/98/sflphone-0.9.3.tar.gz">sflphone_0.9.3.orig.tar.gz</a></td> - <td>Compressed code source</td> - </tr> - <tr> - <td><a href="http://projects.savoirfairelinux.net/repositories/show/sflphone">GIT Repository</a></td> - <td>Fetch the latest code with git: <br/><i>git clone http://sflphone.org/git/sflphone.git</i></td> - </tr> - <tr> - <td>apt-get</td> - <td><i>apt-get source sflphone</i></td> - </tr> - </tbody> - </table> - </div> - -<?php - -include('include/footer.php'); diff --git a/www/favicon.ico b/www/favicon.ico deleted file mode 100644 index db2b83c36d7dee6f3e48b16c55ac2501c20fe24c..0000000000000000000000000000000000000000 Binary files a/www/favicon.ico and /dev/null differ diff --git a/www/features.php b/www/features.php deleted file mode 100644 index 14c4de67e0b92aeea3da07c0183356c630a54b0e..0000000000000000000000000000000000000000 --- a/www/features.php +++ /dev/null @@ -1,64 +0,0 @@ -<?php -$name = 'feature'; -$javascript = array('jquery','animated-menu'); -include('include/header.php'); - -?> - -<div id="content"> - <table class="pourcentWidth fonctionTabs" cellpadding="0" cellspacing="0"> - <tbody valign="top"> - <tr> - <td> - <img src="img/package.jpg" width="124" height="93" alt="" /> - </td> - <td> - <p class="title alignLeft fntBleu"> - Great User Experience - </p> - <p> - SFLphone now fully supports - <a href="http://www.pulseaudio.org">PulseAudio</a> - sound server so you could experience the great possibilities it offers (sound mixing, per application volume control, ...). - <br/> - The GTK+ graphical user interface provides you an intuitive and easy way to phone, and, thanks to the integration of the GNOME desktop notification, you will never miss a call. - <br/> - </p> - </td> - </tr> - <tr> - <td> - <img src="img/robust.jpg" width="120" height="140" alt="" /> - </td> - <td> - <p class="title alignLeft fntBleu"> - Enterprise-class Features - </p> - <p> - SFLphone provides a great audio quality, supports G711a, G711u, GSM and speex audio codecs, audio conversation recording, voicemail notification, non-persistent call history and an account assistant manager. - <br/> - More than a simple softphone, SFLphone supports advanced enterprise-class call features: unlimited number of calls, call transfer and on/off hold option. - <br/> - Connect it to - <a href="http://www.asterisk.org">Asterisk</a> - PBX to get the best of it. - <br/> - </p> - </td> - </tr> - <tr> - <td> - </td> - <td> - <br/><br/> - <a href="http://projects.savoirfairelinux.net/wiki/sflphone/AboutSFLphone#Features">complete list of features ...</a> | - <a href="download.php"> download</a> - </td> - </tr> - </tbody> - </table> -</div> - -<?php - -include('include/footer.php'); diff --git a/www/img/.DS_Store b/www/img/.DS_Store deleted file mode 100755 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 Binary files a/www/img/.DS_Store and /dev/null differ diff --git a/www/img/Picasa.ini b/www/img/Picasa.ini deleted file mode 100644 index 6f363522307a33a891a7efba8536d37668a30376..0000000000000000000000000000000000000000 --- a/www/img/Picasa.ini +++ /dev/null @@ -1,3 +0,0 @@ - -[Picasa] -name=img diff --git a/www/img/bot_bg_a.jpg b/www/img/bot_bg_a.jpg deleted file mode 100755 index d4e2c1f4a6302f94d40438e72a21264a2946236f..0000000000000000000000000000000000000000 Binary files a/www/img/bot_bg_a.jpg and /dev/null differ diff --git a/www/img/bot_bg_b.jpg b/www/img/bot_bg_b.jpg deleted file mode 100755 index a8e79c0588daa4fa38d2c60dbe28a983627d5f58..0000000000000000000000000000000000000000 Binary files a/www/img/bot_bg_b.jpg and /dev/null differ diff --git a/www/img/cadre_rounded.png b/www/img/cadre_rounded.png deleted file mode 100755 index 0571a882f58c0c9a5aa451792539a75956630f16..0000000000000000000000000000000000000000 Binary files a/www/img/cadre_rounded.png and /dev/null differ diff --git a/www/img/comm.jpg b/www/img/comm.jpg deleted file mode 100755 index 34dc37ee9a89583fe0a2baeeecf116cec26d2ee4..0000000000000000000000000000000000000000 Binary files a/www/img/comm.jpg and /dev/null differ diff --git a/www/img/content_bg.jpg b/www/img/content_bg.jpg deleted file mode 100755 index 3eac006940265f6402afe7298e9d66b4b14f8d4d..0000000000000000000000000000000000000000 Binary files a/www/img/content_bg.jpg and /dev/null differ diff --git a/www/img/corner_a.png b/www/img/corner_a.png deleted file mode 100755 index 625806dbfc4d47a16203e6268c3dac5b7d77d58a..0000000000000000000000000000000000000000 Binary files a/www/img/corner_a.png and /dev/null differ diff --git a/www/img/corner_b.png b/www/img/corner_b.png deleted file mode 100755 index 4dcafd02f7980b70693b2b3327b33ce09a34ea2a..0000000000000000000000000000000000000000 Binary files a/www/img/corner_b.png and /dev/null differ diff --git a/www/img/download-up.png b/www/img/download-up.png deleted file mode 100644 index f319ae842ea08fe0ac9858aaf966021197921805..0000000000000000000000000000000000000000 Binary files a/www/img/download-up.png and /dev/null differ diff --git a/www/img/download.png b/www/img/download.png deleted file mode 100644 index 242d4a24513d8e165108b260dd0ee4ac7ba3f817..0000000000000000000000000000000000000000 Binary files a/www/img/download.png and /dev/null differ diff --git a/www/img/download_icon.png b/www/img/download_icon.png deleted file mode 100755 index 3fcd9f0a44ae6fb063f060678a22a9d249dd2498..0000000000000000000000000000000000000000 Binary files a/www/img/download_icon.png and /dev/null differ diff --git a/www/img/face.jpg b/www/img/face.jpg deleted file mode 100755 index 1dd5e419a92fd9b47e8c4145f437b86d2e9759fa..0000000000000000000000000000000000000000 Binary files a/www/img/face.jpg and /dev/null differ diff --git a/www/img/gallery/account-add.png b/www/img/gallery/account-add.png deleted file mode 100644 index 6740507261ae070a456a38925e1a0fbe0d74847a..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/account-add.png and /dev/null differ diff --git a/www/img/gallery/account-edit.png b/www/img/gallery/account-edit.png deleted file mode 100644 index 006880381306effaf01954f9115a705bba9f2fb8..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/account-edit.png and /dev/null differ diff --git a/www/img/gallery/assistant-1.png b/www/img/gallery/assistant-1.png deleted file mode 100644 index ef66cca9c39f56ef7c9533649fbe34596b31de26..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/assistant-1.png and /dev/null differ diff --git a/www/img/gallery/assistant-2-.png b/www/img/gallery/assistant-2-.png deleted file mode 100644 index 4d6c1207e5919cd7b28c9348372e0dc06f381aef..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/assistant-2-.png and /dev/null differ diff --git a/www/img/gallery/assistant-3-.png b/www/img/gallery/assistant-3-.png deleted file mode 100644 index 48b5406ecf00fb546b45c96dd2dff4414e1b07f2..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/assistant-3-.png and /dev/null differ diff --git a/www/img/gallery/assistant-4-.png b/www/img/gallery/assistant-4-.png deleted file mode 100644 index 3399a8b73c6022638c326227256004de2365ea2c..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/assistant-4-.png and /dev/null differ diff --git a/www/img/gallery/assistant-5-.png b/www/img/gallery/assistant-5-.png deleted file mode 100644 index 846dad53a19ad0a04aebf0ca69b9a2bb47b033b8..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/assistant-5-.png and /dev/null differ diff --git a/www/img/gallery/edit-account.png b/www/img/gallery/edit-account.png deleted file mode 100644 index 240a3c0bfb15ba4675b437b8a19dc876a42c6381..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/edit-account.png and /dev/null differ diff --git a/www/img/gallery/edit-pref-audio.png b/www/img/gallery/edit-pref-audio.png deleted file mode 100644 index 18efedc7dc4c9e3dd7e84a6767262255ef6e428a..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/edit-pref-audio.png and /dev/null differ diff --git a/www/img/gallery/edit-pref-gen.png b/www/img/gallery/edit-pref-gen.png deleted file mode 100644 index 793c46d92325411d6600b3b254df75dcc233a534..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/edit-pref-gen.png and /dev/null differ diff --git a/www/img/gallery/edit-pref-rec.png b/www/img/gallery/edit-pref-rec.png deleted file mode 100644 index 3d66726b22968946d010e9c67e67e1b620c452a8..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/edit-pref-rec.png and /dev/null differ diff --git a/www/img/gallery/incoming-call.png b/www/img/gallery/incoming-call.png deleted file mode 100644 index 6fed4adab0b909c783599fa130bacdbc9c1591e6..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/incoming-call.png and /dev/null differ diff --git a/www/img/gallery/main-edit.png b/www/img/gallery/main-edit.png deleted file mode 100644 index f84684c9dde1c064074fbbb001f4626e954cee52..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/main-edit.png and /dev/null differ diff --git a/www/img/gallery/main-help.png b/www/img/gallery/main-help.png deleted file mode 100644 index 0b48555e4b32686e4760bcf35af6d1279140630a..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/main-help.png and /dev/null differ diff --git a/www/img/gallery/main-history-opt.png b/www/img/gallery/main-history-opt.png deleted file mode 100644 index cd1180fe44480ad48152aec99eac2afed34842d7..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/main-history-opt.png and /dev/null differ diff --git a/www/img/gallery/main-history.png b/www/img/gallery/main-history.png deleted file mode 100644 index 703b3d4d97258694ef078346475ec8e217da7099..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/main-history.png and /dev/null differ diff --git a/www/img/gallery/main-transfer.png b/www/img/gallery/main-transfer.png deleted file mode 100644 index 4cede2ac37f934685c2ab24de505480a30b7e808..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/main-transfer.png and /dev/null differ diff --git a/www/img/gallery/main-view.png b/www/img/gallery/main-view.png deleted file mode 100644 index 8aab33216591bbce79d9c5b8e0acd3d7c2f171da..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/main-view.png and /dev/null differ diff --git a/www/img/gallery/thumbs/account-add.png b/www/img/gallery/thumbs/account-add.png deleted file mode 100644 index 3f912d6a8894ce4cb6dba0b8d9005da068b2e2aa..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/thumbs/account-add.png and /dev/null differ diff --git a/www/img/gallery/thumbs/account-edit.png b/www/img/gallery/thumbs/account-edit.png deleted file mode 100644 index b59a120b5aa70ac7278bf0b25eebb29ebcc0bdf7..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/thumbs/account-edit.png and /dev/null differ diff --git a/www/img/gallery/thumbs/assistant-1.png b/www/img/gallery/thumbs/assistant-1.png deleted file mode 100644 index 21756a97adbe157810e9427e1e6b29977e38235c..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/thumbs/assistant-1.png and /dev/null differ diff --git a/www/img/gallery/thumbs/assistant-2-.png b/www/img/gallery/thumbs/assistant-2-.png deleted file mode 100644 index 36a034660fb6544947bbe98b00bb0c811f825f38..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/thumbs/assistant-2-.png and /dev/null differ diff --git a/www/img/gallery/thumbs/assistant-3-.png b/www/img/gallery/thumbs/assistant-3-.png deleted file mode 100644 index e32bed15c015fd890d830ffca5a6e34904f773e9..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/thumbs/assistant-3-.png and /dev/null differ diff --git a/www/img/gallery/thumbs/assistant-4-.png b/www/img/gallery/thumbs/assistant-4-.png deleted file mode 100644 index fcc025100f989c77123f41b864f4faf2fbcc8cbb..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/thumbs/assistant-4-.png and /dev/null differ diff --git a/www/img/gallery/thumbs/assistant-5-.png b/www/img/gallery/thumbs/assistant-5-.png deleted file mode 100644 index b9fc5894d5893fb95d10876e61b1a75c15dfe0ff..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/thumbs/assistant-5-.png and /dev/null differ diff --git a/www/img/gallery/thumbs/edit-account.png b/www/img/gallery/thumbs/edit-account.png deleted file mode 100644 index 75a19d1de98af5a94ae0a07aad9d1eff7495a3d9..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/thumbs/edit-account.png and /dev/null differ diff --git a/www/img/gallery/thumbs/edit-pref-audio.png b/www/img/gallery/thumbs/edit-pref-audio.png deleted file mode 100644 index 446ae4e8bf7471b8ae758e5ff6de7fe7ea420245..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/thumbs/edit-pref-audio.png and /dev/null differ diff --git a/www/img/gallery/thumbs/edit-pref-gen.png b/www/img/gallery/thumbs/edit-pref-gen.png deleted file mode 100644 index ab9c0a350ef4f69a3b946aab653bfece9a9b6c60..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/thumbs/edit-pref-gen.png and /dev/null differ diff --git a/www/img/gallery/thumbs/edit-pref-rec.png b/www/img/gallery/thumbs/edit-pref-rec.png deleted file mode 100644 index 1296f5e8baf15f5ccfdd41baf8d02ae4ef1d041e..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/thumbs/edit-pref-rec.png and /dev/null differ diff --git a/www/img/gallery/thumbs/incoming-call.png b/www/img/gallery/thumbs/incoming-call.png deleted file mode 100644 index 8f9efd9206ed450db2b443379c42d0babd73cf05..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/thumbs/incoming-call.png and /dev/null differ diff --git a/www/img/gallery/thumbs/main-edit.png b/www/img/gallery/thumbs/main-edit.png deleted file mode 100644 index 142a8c691e21d524668815971e92cb4ad5120524..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/thumbs/main-edit.png and /dev/null differ diff --git a/www/img/gallery/thumbs/main-help.png b/www/img/gallery/thumbs/main-help.png deleted file mode 100644 index 3902c63c84ee7a588791c47fe98bb7a648417e82..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/thumbs/main-help.png and /dev/null differ diff --git a/www/img/gallery/thumbs/main-history-opt.png b/www/img/gallery/thumbs/main-history-opt.png deleted file mode 100644 index 3886a85fc05ef8a6d54bce4b3483d674bb0f8e12..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/thumbs/main-history-opt.png and /dev/null differ diff --git a/www/img/gallery/thumbs/main-history.png b/www/img/gallery/thumbs/main-history.png deleted file mode 100644 index 27d894906f1f1d4435f092513b72d864e90a7551..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/thumbs/main-history.png and /dev/null differ diff --git a/www/img/gallery/thumbs/main-transfer.png b/www/img/gallery/thumbs/main-transfer.png deleted file mode 100644 index ad2891394a94e023cf588408002136e8d8e6f6b4..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/thumbs/main-transfer.png and /dev/null differ diff --git a/www/img/gallery/thumbs/main-view.png b/www/img/gallery/thumbs/main-view.png deleted file mode 100644 index 1ce26fd1513842db5907b0be8974c6a88b3b17c5..0000000000000000000000000000000000000000 Binary files a/www/img/gallery/thumbs/main-view.png and /dev/null differ diff --git a/www/img/head_bg_a.jpg b/www/img/head_bg_a.jpg deleted file mode 100755 index be0248958abbc86fc5d263493511bd3358b6dc4d..0000000000000000000000000000000000000000 Binary files a/www/img/head_bg_a.jpg and /dev/null differ diff --git a/www/img/head_bg_b.jpg b/www/img/head_bg_b.jpg deleted file mode 100755 index e693f5d88f57da24431de8e00ed4f8d13460c025..0000000000000000000000000000000000000000 Binary files a/www/img/head_bg_b.jpg and /dev/null differ diff --git a/www/img/icon.jpg b/www/img/icon.jpg deleted file mode 100755 index 5c1463da719f3bd866d17df7d1c70428e943583d..0000000000000000000000000000000000000000 Binary files a/www/img/icon.jpg and /dev/null differ diff --git a/www/img/level_2.gif b/www/img/level_2.gif deleted file mode 100755 index 200269edc708aa0705aa3771343e85b0f53f1504..0000000000000000000000000000000000000000 Binary files a/www/img/level_2.gif and /dev/null differ diff --git a/www/img/logos/custom/gpl3.png b/www/img/logos/custom/gpl3.png deleted file mode 100644 index 1643642eba04468cdd8beb43ea0cdf23c380d664..0000000000000000000000000000000000000000 Binary files a/www/img/logos/custom/gpl3.png and /dev/null differ diff --git a/www/img/logos/medium/Picasa.ini b/www/img/logos/medium/Picasa.ini deleted file mode 100644 index d78d28d3bd4b90171ba1f1dfdfcb8a0e15dca622..0000000000000000000000000000000000000000 --- a/www/img/logos/medium/Picasa.ini +++ /dev/null @@ -1,3 +0,0 @@ - -[Picasa] -name=medium diff --git a/www/img/logos/medium/debian.png b/www/img/logos/medium/debian.png deleted file mode 100755 index 69b8763c1fe21b84467db21d1bfeb2dc6d7746ee..0000000000000000000000000000000000000000 Binary files a/www/img/logos/medium/debian.png and /dev/null differ diff --git a/www/img/logos/medium/fedora.png b/www/img/logos/medium/fedora.png deleted file mode 100755 index b09f66c5201de1bb4c7db56714b9963001fd6b74..0000000000000000000000000000000000000000 Binary files a/www/img/logos/medium/fedora.png and /dev/null differ diff --git a/www/img/logos/medium/suse.png b/www/img/logos/medium/suse.png deleted file mode 100755 index 087b59fe18678eaf154c371da46e33d32f39aa36..0000000000000000000000000000000000000000 Binary files a/www/img/logos/medium/suse.png and /dev/null differ diff --git a/www/img/logos/medium/ubuntu.png b/www/img/logos/medium/ubuntu.png deleted file mode 100755 index abb622e6ed8e3b4099f873fe2bd19a61e27575cf..0000000000000000000000000000000000000000 Binary files a/www/img/logos/medium/ubuntu.png and /dev/null differ diff --git a/www/img/logos/small/Picasa.ini b/www/img/logos/small/Picasa.ini deleted file mode 100644 index 052edae564aec30b9d6a76cdea67211d9b18401b..0000000000000000000000000000000000000000 --- a/www/img/logos/small/Picasa.ini +++ /dev/null @@ -1,3 +0,0 @@ - -[Picasa] -name=small diff --git a/www/img/logos/small/debian.png b/www/img/logos/small/debian.png deleted file mode 100755 index 69b8763c1fe21b84467db21d1bfeb2dc6d7746ee..0000000000000000000000000000000000000000 Binary files a/www/img/logos/small/debian.png and /dev/null differ diff --git a/www/img/logos/small/fedora.png b/www/img/logos/small/fedora.png deleted file mode 100755 index b09f66c5201de1bb4c7db56714b9963001fd6b74..0000000000000000000000000000000000000000 Binary files a/www/img/logos/small/fedora.png and /dev/null differ diff --git a/www/img/logos/small/suse.png b/www/img/logos/small/suse.png deleted file mode 100755 index 087b59fe18678eaf154c371da46e33d32f39aa36..0000000000000000000000000000000000000000 Binary files a/www/img/logos/small/suse.png and /dev/null differ diff --git a/www/img/logos/small/ubuntu.png b/www/img/logos/small/ubuntu.png deleted file mode 100755 index abb622e6ed8e3b4099f873fe2bd19a61e27575cf..0000000000000000000000000000000000000000 Binary files a/www/img/logos/small/ubuntu.png and /dev/null differ diff --git a/www/img/map-ottawa.png b/www/img/map-ottawa.png deleted file mode 100755 index 2e53f35ea56c9d376cff0045b209d8bdd63ebd60..0000000000000000000000000000000000000000 Binary files a/www/img/map-ottawa.png and /dev/null differ diff --git a/www/img/mtl.png b/www/img/mtl.png deleted file mode 100755 index 3dd36deeadfbd3e21f549c91466fa7e850e3eeae..0000000000000000000000000000000000000000 Binary files a/www/img/mtl.png and /dev/null differ diff --git a/www/img/ott.png b/www/img/ott.png deleted file mode 100644 index d8241e01c4db5bd59a3d3c1a8444217bfe5197fb..0000000000000000000000000000000000000000 Binary files a/www/img/ott.png and /dev/null differ diff --git a/www/img/package.jpg b/www/img/package.jpg deleted file mode 100755 index 0a628b5f9204576c168a9c4af66895589775d038..0000000000000000000000000000000000000000 Binary files a/www/img/package.jpg and /dev/null differ diff --git a/www/img/puces.png b/www/img/puces.png deleted file mode 100755 index aaf75203ab03962eb676c3c49a3c30de0f7590c8..0000000000000000000000000000000000000000 Binary files a/www/img/puces.png and /dev/null differ diff --git a/www/img/qc.png b/www/img/qc.png deleted file mode 100755 index 7a9c2d9d67a058b6db6ccb181708d6bd51b76c4d..0000000000000000000000000000000000000000 Binary files a/www/img/qc.png and /dev/null differ diff --git a/www/img/robust.jpg b/www/img/robust.jpg deleted file mode 100755 index d43702731e297d50def75a655822d78e3707da53..0000000000000000000000000000000000000000 Binary files a/www/img/robust.jpg and /dev/null differ diff --git a/www/img/sflPhone_a.png b/www/img/sflPhone_a.png deleted file mode 100755 index 72027907b4b196dd329b7c709fd6159bd0f984db..0000000000000000000000000000000000000000 Binary files a/www/img/sflPhone_a.png and /dev/null differ diff --git a/www/img/sflPhone_b.png b/www/img/sflPhone_b.png deleted file mode 100755 index ad740e20889b9c411542cb00de9693435d7df1df..0000000000000000000000000000000000000000 Binary files a/www/img/sflPhone_b.png and /dev/null differ diff --git a/www/img/slider/homepage.png b/www/img/slider/homepage.png deleted file mode 100644 index 8974efa5b8ff00b3677ec2c389e4fa3983b205ec..0000000000000000000000000000000000000000 Binary files a/www/img/slider/homepage.png and /dev/null differ diff --git a/www/img/slider/lady-discover.jpg b/www/img/slider/lady-discover.jpg deleted file mode 100644 index 0058e469cd7049c45581da7ef6017357e1e47307..0000000000000000000000000000000000000000 Binary files a/www/img/slider/lady-discover.jpg and /dev/null differ diff --git a/www/img/slider/lady-wise.jpg b/www/img/slider/lady-wise.jpg deleted file mode 100644 index e71acfdd83af8051ad3dd20c668bd2fd2f27f5f1..0000000000000000000000000000000000000000 Binary files a/www/img/slider/lady-wise.jpg and /dev/null differ diff --git a/www/img/slider/mrbad.jpg b/www/img/slider/mrbad.jpg deleted file mode 100644 index 6cd63f5608a030284447aa7cb58cb38cf40f2b44..0000000000000000000000000000000000000000 Binary files a/www/img/slider/mrbad.jpg and /dev/null differ diff --git a/www/img/switch_B.png b/www/img/switch_B.png deleted file mode 100755 index 6344ea7f5471fc001603695b4d7e366e9ae92a4e..0000000000000000000000000000000000000000 Binary files a/www/img/switch_B.png and /dev/null differ diff --git a/www/img/switch_a.png b/www/img/switch_a.png deleted file mode 100755 index cf5af6758a9c2d4ecf811c1d9aa44b4a94e9f2b5..0000000000000000000000000000000000000000 Binary files a/www/img/switch_a.png and /dev/null differ diff --git a/www/include/footer.php b/www/include/footer.php deleted file mode 100644 index 64f336dbbdf709a37c2548bdde281792c8e34893..0000000000000000000000000000000000000000 --- a/www/include/footer.php +++ /dev/null @@ -1,61 +0,0 @@ - - <div id="botDescr"> - <p>We provide you for a free SIP/IAX account. Simply start up SFLphone and register to our Asterisk server.</p> - </div> - -<!-- foot --> - <div id="foot"> - <table class="footTabStyle" cellpadding="0" cellspacing="0"> - <tbody valign="top"> - <tr> - <td class="leftfoot" style="padding:20px;"><img src="img/face.jpg" width="150" height="100" alt="" class="perso" /></td> - <td class="rightfoot"> - <div id="bottomLink"> - <div id="footer_nav"> - <div class="footBlock"> - <ul style="padding:15px;"> - <li><a href="index.html">Home</a></li> - <li><a href="features.php">Features</a></li> - <li><a href="download.php">Download</a></li> - - <li><a href="http://projects.savoirfairelinux.net/wiki/sflphone">Wiki</a></li> - <li><a href="contact.php">Contact</a></li> - </ul> - </div> - - <div class="footBlock"> - <ul> - <li>Technical support</li> - <li><a href="mailto:sflphone@lists.savoirfairelinux.net">sflphone@lists.savoirfairelinux.net</a></li> - <li>Commercial Support</li> - <li><a href="mailto:support@savoirfairelinux.com">support@savoirfairelinux.com</a></li> - <li>General Information</li> - <li><a href="mailto:contact@savoirfairelinux.com">contact@savoirfairelinux.com</a></li> - <br> - <li>1-877-SFLINUX (735-4689)</li> - </ul> - </div> - <div class="rightfootBlock"> - <ul> - <li> - © Savoir-Faire Linux Inc 2009<img src="img/logos/custom/gpl3.png" /></li> - </ul> - </div> - <div class="clear"> - </div> - </div> - </div> - </td> - </tr> - </tbody> - </table> - </div> - - </div> - <div id="bottomPage"> - <!--//Background image --> - </div> - </div> -</body> -</html> - diff --git a/www/include/header.php b/www/include/header.php deleted file mode 100644 index 636721174ee9340582082c0be5d0be5315d1306a..0000000000000000000000000000000000000000 --- a/www/include/header.php +++ /dev/null @@ -1,62 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <title>SFLphone - Official Website</title> - <link rel="stylesheet" type="text/css" id="style1" href="css/style1.css" /> - <link rel="stylesheet" type="text/css" href="css/s3Slider.css" media="screen"/> - <link rel="shortcut icon" href="favicon.ico" /> - <!-- jquery --> - <?php - //Inlucde javascript - $javascript = array_merge(array(),(array)$javascript); - foreach($javascript as $script){ - echo "<script type='text/javascript' src='js/$script.js'></script>"; - } - $css = array_merge(array(),(array)$css); - foreach($css as $style){ - echo "<link rel='stylesheet' type='text/css' href='css/$style.css' />"; - } - //<script type="text/javascript" src="js/jquery.js"></script> - //<script type="text/javascript" src="js/s3Slider.js"></script> - //<script type="text/javascript" src="js/script.js"> </script> - //<script type="text/javascript" src="js/animated-menu.js"></script> - ?> -</head> - -<body> - <div id="header"> - <!--//Background image --> - </div> - - <div id="global"> - - <div id="controller"> - <!-- Taille fixe ou Dynamique --> - - <!-- Nav --> - <table class="navTabs" cellpadding="0" cellspacing="0"> - <tbody valign="top"> - <tr> - <td class="option"> - <div id="option"> - </div> - </td> - - <td class="navigation"> - <div id="navigation"> - <div class="dynamic-nav" style="background: #CDCDCD;" > </div> - <ul> - <li <?php echo ($name == 'contact')?'class="active"':"" ?>><a href='contact.php'><span>Contact</span></a></li> - <li <?php echo ($name == 'wiki')?'class="active"':"" ?>><a href='http://projects.savoirfairelinux.net/wiki/sflphone'><span>Wiki</span></a></li> - <li <?php echo ($name == 'download')?'class="active"':"" ?>><a href='download.php'><span>Download</span></a></li> - <li <?php echo ($name == 'screenshot')?'class="active"':"" ?>><a href='screenshot.php'><span>Screenshots</span></a></li> - <li <?php echo ($name == 'feature')?'class="active"':"" ?>><a href='features.php'><span>Features</span></a></li> - <li <?php echo ($name == 'home')?'class="active"':"" ?>><a href='index.php'><span>Home</span></a></li> - </ul> - </div> - </td> - </tr> - </tbody> - </table> diff --git a/www/index.php b/www/index.php deleted file mode 100644 index ae4af2b780dcb40e33d28cd7340f63ad33b261fa..0000000000000000000000000000000000000000 --- a/www/index.php +++ /dev/null @@ -1,73 +0,0 @@ -<?php -$name = 'home'; -$javascript = array( - 'jquery',/*'s3Slider','script',*/ - 'animated-menu' - ); - -include_once('include/header.php'); -?> - -<div id="content"> - <table class="pourcentWidth" cellpadding="0" cellspacing="0"> - <tbody valign="top"> - <tr> - <td id="index_td_gauche"> - <table class="tabsIndex" cellpadding="0" cellspacing="0"> - <tbody valign="top"> - <tr> - <td> - <ul class="thumbnails"> - <li><a href="/screenshot.php#img/gallery/main-view.png"><img class="thumb" src="img/gallery/thumbs/main-view.png" /></a></li> - <li><a href="/screenshot.php#img/gallery/main-history-opt.png"><img class="thumb" src="img/gallery/thumbs/main-history-opt.png" /></a></li> - <li><a href="/screenshot.php#img/gallery/main-transer.png"><img class="thumb" src="img/gallery/thumbs/main-transfer.png" /></a></li> - <!--<li><a href="/screenshot.php#img/gallery/incoming-call.png"><img class="thumb" src="img/gallery/thumbs/incoming-call.png" /></a></li>--> - </ul> - </td> - <td> - <ul class="fntBleu list" style="padding:10px;"> - <li>SIP and IAX2 compatible softphone</li> - <li>Robust enterprise-class desktop phone for Linux</li> - <li>Provide support of unlimited number of calls, multi-accounts, call transfer and hold.</li> - <li>Enjoy perfect audio quality</li> - <li>Gnome integration</li> - </ul> - <div class="float_it_middle"> - <a href="download.php" ><img src="img/download_icon.png" width="61" height="68" alt=""/></a> - </div> - <div class="float_it_middle"> - <p class="highlight"><a href="download.php" >Download now!</a></p> - </div> - </td> - </tr> - <tr> - <td> - </td> - </tr> - </tbody> - </table> - </td> - <td id="index_td_separator"> </td> - <td id="index_td_droite"> - <p class="title alignCenter fntBleu"> - Discover SFLphone - </p> - <p> - SFLphone is a SIP/IAX2 compatible softphone for Linux. - The SFLphone project's goal is to create a robust enterprise-class desktop phone. - While it can serve home users very well, it is designed with a hundred-calls-a-day receptionist in mind. - <br/><br/> - SFLphone is free software and is distributed under the <b>GNU General Public License version 3</b>. - It is developed by <a href="http://www.savoirfairelinux.com">Savoir-Faire Linux</a>, - a Canadian Linux consulting company, in partnership with the global community. - Savoir-Faire Linux provides to users easy-to-install packages for most of the main Linux distributions. - </p> - <img class="discover-image" src="img/slider/lady-discover.jpg" /> - </td> - </tr> - </tbody> - </table> -</div> -<?php -include_once ('include/footer.php'); -?> diff --git a/www/js/animated-menu.js b/www/js/animated-menu.js deleted file mode 100644 index 714d12aa39bf847e2b544b0bfb4691410f339e83..0000000000000000000000000000000000000000 --- a/www/js/animated-menu.js +++ /dev/null @@ -1,52 +0,0 @@ - -(function($){ - -$.fn.animatedMenu = function(){ - - var element = this; - - - $(element).before("<div class='dynamic-nav' style='background: #CDCDCD;' > </div>"); - - var activePos; - $(element).children('li.active:first').each( - function(){ - this.opacity = 0; - activePos = { left: this.offsetLeft, top: this.offsetTop, width: this.offsetWidth, height: this.offsetHeight, opacity: 0} - } - ); - $('div.dynamic-nav').hide(1,function(){$(this).animate(activePos,1);}); - - $(element).children('li').hover( - function(){ - var liPos = { - left: this.offsetLeft, - top: this.offsetTop, - width: this.offsetWidth, - height: this.offsetHeight, - opacity: 1 - } - - $('div.dynamic-nav').stop().show().animate(liPos,500); - }, - function(){ - $('div.dynamic-nav').hide(); - } - ); - - $(element).children('li.active').hover( - function(){ - $(this).removeClass('active'); - }, - function(){ - $(this).addClass('active'); - } - ); -}; - -})(jQuery); - -$(document).ready(function(){ - $('#navigation > ul').animatedMenu(); - } -); diff --git a/www/js/jquery.galleria.js b/www/js/jquery.galleria.js deleted file mode 100644 index ce5df975a18586d5ba6a018afda6044659c7fde1..0000000000000000000000000000000000000000 --- a/www/js/jquery.galleria.js +++ /dev/null @@ -1 +0,0 @@ -eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(5($){4 q;q=$.2l.7=5(k){6(!q.1U()){R N}$.1A(q.1e);4 l={Z:\'.22\',P:E,13:E,1i:5(a,b,c){},1C:5(a){}};4 m=$.11(l,k);1d(4 i 28 m){6(i){$.7[i]=m[i]}}4 n=($(m.Z).X(m.Z))?$(m.Z):3(D.16(\'1m\')).2x(r);4 o=$(D.16(\'1m\')).x(\'1L\');4 p=$(D.16(\'1g\')).x(\'1f\');n.x(\'22\').12(o).12(p);R r.1G(5(){$(r).x(\'7\');$(r).1F(\'K\').1G(5(i){4 b=$(r);4 c=$.2j?$.11({},m,b.2i()):m;c.13=$(r).X(\':2h-T\')?N:c.13;4 d=$(r).Q(\'a\').X(\'a\')?$(r).Q(\'a\'):N;4 e=$(r).1F(\'G\').C(\'O\',\'V\');4 f=d?d.9(\'1o\'):e.9(\'1c\');4 g=d?d.9(\'19\'):e.9(\'19\');4 j=20 1Z();6(c.P&&(M.8.t&&M.8.t.Y(/\\#/,\'\')==f)){b.I(\'.B\').U(\'B\');b.x(\'B\')}$(j).2s(5(){$(r).9(\'1O\',e.9(\'1O\'));4 a=d?d.Q(\'G\').x(\'1N 1M\').C(\'O\',\'V\'):e.2m(E).x(\'1N\').C(\'O\',\'V\');6(d){d.2k(a)}6(!a.1K(\'1M\')){4 w=1h.1J(e.v()/e.A()*b.A());4 h=1h.1J(e.A()/e.v()*b.v());6(w<h){a.C({A:\'1I\',v:b.v(),1H:-(h-b.A())/2})}s{a.C({v:\'1I\',A:b.A(),1E:-(w-b.v())/2})}}s{M.1D(5(){a.C({1E:-(a.v()-b.v())/2,1H:-(a.A()-b.A())/2})},1)}a.9(\'J\',f);a.9(\'19\',g);a.1B(5(){$.7.S(f)});a.L(5(){$(r).x(\'L\')},5(){$(r).U(\'L\')});b.L(5(){b.x(\'L\')},5(){b.U(\'L\')});b.1z(a);a.C(\'O\',\'2g\');c.1C(3(a));6(b.1K(\'B\')){$.7.S(f)}e.1y()}).1x(5(){b.2f(\'<1g 2e="1x" 1w="2d:2c">2b 2a 29: \'+f+\'</1g>\')}).9(\'1c\',f)})})};q.1v=5(a){R $(a).X(\':1u-T\')?$(a).I(\':1t-T\'):$(a).1k()};q.1s=5(a){R $(a).X(\':1t-T\')?$(a).I(\':1u-T\'):$(a).1r()};q.1U=5(){$(\'1R\').12($(D.16(\'1m\')).9(\'1q\',\'1l\').C({v:\'1p\',A:\'1p\',O:\'V\'}));4 a=($(\'#1l\').v()!=1)?N:E;$(\'#1l\').1y();R a};q.1e=5(a){4 b=$(\'.1L\');4 c=$(\'.7 G[@J="\'+a+\'"]\');6(a){6($.7.P){M.8=M.8.1o.Y(/\\#.*/,\'\')+\'#\'+a}c.14(\'K\').I(\'.B\').U(\'B\');c.14(\'K\').x(\'B\');4 d=$(20 1Z()).9(\'1c\',a).x(\'27\');b.1X().12(d);b.I(\'.1f\').26(c.9(\'19\'));$.7.1i(d,b.I(\'.1f\'),c);6($.7.13){d.C(\'25\',\'24\').1B(5(){$.7.1k()})}}s{b.I().23().1X();$(\'.7 K.B\').U(\'B\')}$.7.1a=a};$.11({7:{1a:\'\',1i:5(){},S:5(a){6($.7.P){$.21(a)}s{q.1e(a)}},1k:5(){4 a=$(q.1v($(\'.7 G[@J="\'+$.7.1a+\'"]\').14(\'K\'))).Q(\'G\').9(\'J\');$.7.S(a)},1r:5(){4 a=$(q.1s($(\'.7 G[@J="\'+$.7.1a+\'"]\').14(\'K\'))).Q(\'G\').9(\'J\');$.7.S(a)}}})})(3);3.11({z:18,u:18,1A:5(a){3.u=a;4 b=8.t;3.z=b;6(3.H.1b){6(3.z===\'\'){3.z=\'#\'}$("1R").1z(\'<1Y 1q="17" 1w="O: V;"></1Y>\');4 c=$("#17")[0];4 d=c.1n.D;d.1W();d.1V();d.8.t=b}s 6($.H.10){3.y=[];3.y.F=P.F;3.15=[];3.W=E}3.u(b.Y(/^#/,\'\'));2u(3.1T,2t)},1Q:5(a){3.y.1P(a);3.15.F=0;r.W=E},1T:5(){6(3.H.1b){4 a=$("#17")[0];4 b=a.2r||a.1n.D;4 c=b.8.t;6(c!=3.z){8.t=c;3.z=c;3.u(c.Y(/^#/,\'\'))}}s 6($.H.10){6(!3.1j){4 d=P.F-3.y.F;6(d){3.W=N;4 i;6(d<0){1d(i=0;i<1h.2q(d);i++){3.15.2p(3.y.2o())}}s{1d(i=0;i<d;i++){3.y.1P(3.15.2n())}}4 e=3.y[3.y.F-1];6(e!==18){3.z=8.t;3.u(e)}}s 6(3.y[3.y.F-1]===18&&!3.W){6(D.1S.2v(\'#\')>=0){3.u(D.1S.2w(\'#\')[1])}s{c=8.t;3.u(\'\')}3.W=E}}}s{c=8.t;6(c!=3.z){3.z=c;3.u(c.Y(/^#/,\'\'))}}},21:5(a){4 b;6(3.H.10){b=a}s{b=\'#\'+a;8.t=b}3.z=b;6(3.H.1b){4 c=$("#17")[0];4 d=c.1n.D;d.1W();d.1V();d.8.t=b;3.u(a)}s 6(3.H.10){3.1j=E;r.1Q(a);4 e=5(){3.1j=N};M.1D(e,2y);3.u(a);8.t=b}s{3.u(a)}}});',62,159,'|||jQuery|var|function|if|galleria|location|attr||||||||||||||||||this|else|hash|historyCallback|width||addClass|historyBackStack|historyCurrentHash|height|active|css|document|true|length|img|browser|siblings|rel|li|hover|window|false|display|history|find|return|activate|child|removeClass|none|isFirst|is|replace|insert|safari|extend|append|clickNext|parents|historyForwardStack|createElement|jQuery_history|undefined|title|current|msie|src|for|onPageLoad|caption|span|Math|onImage|dontCheck|next|css_test|div|contentWindow|href|1px|id|prev|previousSelector|first|last|nextSelector|style|error|remove|prepend|historyInit|click|onThumb|setTimeout|marginLeft|children|each|marginTop|auto|ceil|hasClass|galleria_wrapper|noscale|thumb|alt|push|historyAddHistory|body|URL|historyCheck|hasCSS|close|open|empty|iframe|Image|new|historyLoad|galleria_container|andSelf|pointer|cursor|text|replaced|in|image|loading|Error|red|color|class|html|block|only|data|meta|replaceWith|fn|clone|shift|pop|unshift|abs|contentDocument|load|100|setInterval|indexOf|split|insertBefore|200'.split('|'),0,{})) \ No newline at end of file diff --git a/www/js/jquery.js b/www/js/jquery.js deleted file mode 100755 index 3747929d8bf80f238139443a5032a606d726e5f0..0000000000000000000000000000000000000000 --- a/www/js/jquery.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * jQuery 1.2.3 - New Wave Javascript - * - * Copyright (c) 2008 John Resig (jquery.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * $Date: 2008-02-06 00:21:25 -0500 (Wed, 06 Feb 2008) $ - * $Rev: 4663 $ - */ -(function(){if(window.jQuery)var _jQuery=window.jQuery;var jQuery=window.jQuery=function(selector,context){return new jQuery.prototype.init(selector,context);};if(window.$)var _$=window.$;window.$=jQuery;var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/;var isSimple=/^.[^:#\[\.]*$/;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}else if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem)if(elem.id!=match[3])return jQuery().find(selector);else{this[0]=elem;this.length=1;return this;}else -selector=[];}}else -return new jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return new jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(selector.constructor==Array&&selector||(selector.jquery||selector.length&&selector!=window&&!selector.nodeType&&selector[0]!=undefined&&selector[0].nodeType)&&jQuery.makeArray(selector)||[selector]);},jquery:"1.2.3",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;this.each(function(i){if(this==elem)ret=i;});return ret;},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value==undefined)return this.length&&jQuery[type||"attr"](this[0],name)||undefined;else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else -return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else -selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return!selector?this:this.pushStack(jQuery.merge(this.get(),selector.constructor==String?jQuery(selector).get():selector.length!=undefined&&(!selector.nodeName||jQuery.nodeName(selector,"form"))?selector:[selector]));},is:function(selector){return selector?jQuery.multiFilter(selector,this).length>0:false;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;if(one)return value;values.push(value);}}return values;}else -return(this[0].value||"").replace(/\r/g,"");}return undefined;}return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=value.constructor==Array?value:[value];jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else -this.value=value;});},html:function(value){return value==undefined?(this.length?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value==null){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data==undefined&&this.length)data=jQuery.data(this[0],key);return data==null&&parts[1]?this.data(parts[0]):data;}else -return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script")){scripts=scripts.add(elem);}else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.prototype.init.prototype=jQuery.prototype;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else -jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==1){target=this;i=0;}for(;i<length;i++)if((options=arguments[i])!=null)for(var name in options){if(target===options[name])continue;if(deep&&options[name]&&typeof options[name]=="object"&&target[name]&&!options[name].nodeType)target[name]=jQuery.extend(target[name],options[name]);else if(options[name]!=undefined)target[name]=options[name];}return target;};var expando="jQuery"+(new Date()).getTime(),uuid=0,windowData={};var exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i;jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)window.jQuery=_jQuery;return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/function/i.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.browser.msie)script.text=data;else -script.appendChild(document.createTextNode(data));head.appendChild(script);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!=undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])break;if(!name)jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)elem.removeAttribute(expando);}delete jQuery.cache[id];}},each:function(object,callback,args){if(args){if(object.length==undefined){for(var name in object)if(callback.apply(object[name],args)===false)break;}else -for(var i=0,length=object.length;i<length;i++)if(callback.apply(object[i],args)===false)break;}else{if(object.length==undefined){for(var name in object)if(callback.call(object[name],name,object[name])===false)break;}else -for(var i=0,length=object.length,value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.className?" ":"")+className;});},remove:function(elem,classNames){if(elem.nodeType==1)elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return!jQuery.className.has(classNames,className);}).join(" "):"";},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else -jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret;function color(elem){if(!jQuery.browser.safari)return false;var ret=document.defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(elem.style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=elem.style.outline;elem.style.outline="0 solid black";elem.style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&elem.style&&elem.style[name])ret=elem.style[name];else if(document.defaultView&&document.defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var getComputedStyle=document.defaultView.getComputedStyle(elem,null);if(getComputedStyle&&!color(elem))ret=getComputedStyle.getPropertyValue(name);else{var swap=[],stack=[];for(var a=elem;a&&color(a);a=a.parentNode)stack.unshift(a);for(var i=0;i<stack.length;i++)if(color(stack[i])){swap[i]=stack[i].style.display;stack[i].style.display="block";}ret=name=="display"&&swap[stack.length-1]!=null?"none":(getComputedStyle&&getComputedStyle.getPropertyValue(name))||"";for(var i=0;i<swap.length;i++)if(swap[i]!=null)stack[i].style.display=swap[i];}if(name=="opacity"&&ret=="")ret="1";}else if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var style=elem.style.left,runtimeStyle=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;elem.style.left=ret||0;ret=elem.style.pixelLeft+"px";elem.style.left=style;elem.runtimeStyle.left=runtimeStyle;}}return ret;},clean:function(elems,context){var ret=[];context=context||document;if(typeof context.createElement=='undefined')context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;jQuery.each(elems,function(i,elem){if(!elem)return;if(elem.constructor==Number)elem=elem.toString();if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else -ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var fix=jQuery.isXMLDoc(elem)?{}:jQuery.props;if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(fix[name]){if(value!=undefined)elem[fix[name]]=value;return elem[fix[name]];}else if(jQuery.browser.msie&&name=="style")return jQuery.attr(elem.style,"cssText",value);else if(value==undefined&&jQuery.browser.msie&&jQuery.nodeName(elem,"form")&&(name=="action"||name=="method"))return elem.getAttributeNode(name).nodeValue;else if(elem.tagName){if(value!=undefined){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem.setAttribute(name,""+value);}if(jQuery.browser.msie&&/href|src/.test(name)&&!jQuery.isXMLDoc(elem))return elem.getAttribute(name,2);return elem.getAttribute(name);}else{if(name=="opacity"&&jQuery.browser.msie){if(value!=undefined){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseFloat(value).toString()=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100).toString():"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(value!=undefined)elem[name]=value;return elem[name];}},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(typeof array!="array")for(var i=0,length=array.length;i<length;i++)ret.push(array[i]);else -ret=array.slice(0);return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]==elem)return i;return-1;},merge:function(first,second){if(jQuery.browser.msie){for(var i=0;second[i];i++)if(second[i].nodeType!=8)first.push(second[i]);}else -for(var i=0;second[i];i++)first.push(second[i]);return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv&&callback(elems[i],i)||inv&&!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<length;i++){var value=callback(elems[i],i);if(value!==null&&value!=undefined){if(value.constructor!=Array)value=[value];ret=ret.concat(value);}}return ret;}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,innerHTML:"innerHTML",className:"className",value:"value",disabled:"disabled",checked:"checked",readonly:"readOnly",selected:"selected",maxlength:"maxLength",selectedIndex:"selectedIndex",defaultValue:"defaultValue",tagName:"tagName",nodeName:"nodeName"}});jQuery.each({parent:function(elem){return elem.parentNode;},parents:function(elem){return jQuery.dir(elem,"parentNode");},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(selector){var ret=jQuery.map(this,fn);if(selector&&typeof selector=="string")ret=jQuery.multiFilter(selector,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;return this.each(function(){for(var i=0,length=args.length;i<length;i++)jQuery(args[i])[original](this);});};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1)this.removeAttribute(name);},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode)this.parentNode.removeChild(this);}},empty:function(){jQuery(">*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return i<m[3]-0;},gt:function(a,i,m){return i>m[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false;var re=quickChild;var m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~")merge[id]=true;r.push(n);}if(m=="+")break;}}ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}if(m[1]==".")r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}r=tmp;}ret=r;}t=t.replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)if(n.nodeType==1)n.nodeIndex=c++;merge[id]=true;}var add=false;if(first==0){if(node.nodeIndex==last)add=true;}else if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)/first>=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[];var cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&(!elem||n!=elem))r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval!=undefined)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=function(){return fn.apply(this,arguments);};handler.data=data;handler.guid=fn.guid;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){var val;if(typeof jQuery=="undefined"||jQuery.event.triggered)return val;val=jQuery.event.handle.apply(arguments.callee.elem,arguments);return val;});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else -for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data||[]);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event)data.unshift(this.fix({type:type,target:elem}));data[0].type=type;if(exclusive)data[0].exclusive=true;if(jQuery.isFunction(jQuery.data(elem,"handle")))val=jQuery.data(elem,"handle").apply(elem,data);if(!fn&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val;event=jQuery.event.fix(event||window.event||{});var parts=event.type.split(".");event.type=parts[0];var handlers=jQuery.data(this,"events")&&jQuery.data(this,"events")[event.type],args=Array.prototype.slice.call(arguments,1);args.unshift(event);for(var j in handlers){var handler=handlers[j];args[0].handler=handler;args[0].data=handler.data;if(!parts[1]&&!event.exclusive||handler.type==parts[1]){var ret=handler.apply(this,args);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}if(jQuery.browser.msie)event.target=event.preventDefault=event.stopPropagation=event.handler=event.data=null;return val;},fix:function(event){var originalEvent=event;event=jQuery.extend({},originalEvent);event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=originalEvent.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;arguments[0].type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;arguments[0].type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){return this.each(function(){jQuery.event.add(this,type,function(event){jQuery(this).unbind(event);return(fn||data).apply(this,arguments);},fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){if(this[0])return jQuery.event.trigger(type,data,this[0],false,fn);return undefined;},toggle:function(){var args=arguments;return this.click(function(event){this.lastToggle=0==this.lastToggle?1:0;event.preventDefault();return args[this.lastToggle].apply(this,arguments)||false;});},hover:function(fnOver,fnOut){return this.bind('mouseenter',fnOver).bind('mouseleave',fnOut);},ready:function(fn){bindReady();if(jQuery.isReady)fn.call(document,jQuery);else -jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.apply(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DOMContentLoaded",jQuery.ready,false);if(jQuery.browser.msie&&window==top)(function(){if(jQuery.isReady)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}jQuery.ready();})();if(jQuery.browser.opera)document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady)return;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}jQuery.ready();},false);if(jQuery.browser.safari){var numStyles;(function(){if(jQuery.isReady)return;if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);return;}if(numStyles===undefined)numStyles=jQuery("style, link[rel=stylesheet]").length;if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}jQuery.ready();})();}jQuery.event.add(window,"load",jQuery.ready);}jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};});var withinElement=function(event,elem){var parent=event.relatedTarget;while(parent&&parent!=elem)try{parent=parent.parentNode;}catch(error){parent=elem;}return parent==elem;};jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();});jQuery.fn.extend({load:function(url,params,callback){if(jQuery.isFunction(url))return this.bind("load",url);var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=(new Date).getTime();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){var jsonp,jsre=/=\?(&|$)/g,status,data;s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(s.type.toLowerCase()=="get"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&s.type.toLowerCase()=="get"){var ts=(new Date()).getTime();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&s.type.toLowerCase()=="get"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");if((!s.url.indexOf("http")||!s.url.indexOf("//"))&&s.dataType=="script"&&s.type.toLowerCase()=="get"){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xml=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();xml.open(s.type,s.url,s.async,s.username,s.password);try{if(s.data)xml.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xml.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xml.setRequestHeader("X-Requested-With","XMLHttpRequest");xml.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend)s.beforeSend(xml);if(s.global)jQuery.event.trigger("ajaxSend",[xml,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xml&&(xml.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xml)&&"error"||s.ifModified&&jQuery.httpNotModified(xml,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xml,s.dataType);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xml.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else -jQuery.handleError(s,xml,status);complete();if(s.async)xml=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xml){xml.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xml.send(s.data);}catch(e){jQuery.handleError(s,xml,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xml,s]);}function complete(){if(s.complete)s.complete(xml,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xml,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xml;},handleError:function(s,xml,status,e){if(s.error)s.error(xml,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xml,s,e]);},active:0,httpSuccess:function(r){try{return!r.status&&location.protocol=="file:"||(r.status>=200&&r.status<300)||r.status==304||r.status==1223||jQuery.browser.safari&&r.status==undefined;}catch(e){}return false;},httpNotModified:function(xml,url){try{var xmlRes=xml.getResponseHeader("Last-Modified");return xml.status==304||xmlRes==jQuery.lastModified[url]||jQuery.browser.safari&&xml.status==undefined;}catch(e){}return false;},httpData:function(r,type){var ct=r.getResponseHeader("content-type");var xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0;var data=xml?r.responseXML:r.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else -for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else -s.push(encodeURIComponent(j)+"="+encodeURIComponent(a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle(fn,fn2):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall);var hidden=jQuery(this).is(":hidden"),self=this;for(var p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return jQuery.isFunction(opt.complete)&&opt.complete.apply(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else -e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.apply(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(!elem)return undefined;type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",array?jQuery.makeArray(array):[]);return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].apply(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:{slow:600,fast:200}[opt.duration])||400;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.apply(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.apply(this.elem,[this.now,this]);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=(new Date()).getTime();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)if(!timers[i]())timers.splice(i--,1);if(!timers.length){clearInterval(jQuery.timerId);jQuery.timerId=null;}},13);}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")this.elem.style[this.prop]="1px";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=(new Date()).getTime();if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done&&jQuery.isFunction(this.options.complete))this.options.complete.apply(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.fx.step={scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}};jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),fixed=jQuery.css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&jQuery.css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(jQuery.css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&jQuery.css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||jQuery.css(offsetChild,"position")=="absolute"))||(mozilla&&jQuery.css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l)||0;top+=parseInt(t)||0;}return results;};})(); \ No newline at end of file diff --git a/www/js/s3Slider.js b/www/js/s3Slider.js deleted file mode 100755 index 7ec1d2072cb9f9481a1d77290a7df616703318da..0000000000000000000000000000000000000000 --- a/www/js/s3Slider.js +++ /dev/null @@ -1,107 +0,0 @@ -/* ------------------------------------------------------------------------ - s3Slider - - Developped By: Boban Karišik -> http://www.serie3.info/ - CSS Help: Mészáros Róbert -> http://www.perspectived.com/ - Version: 1.0 - - Copyright: Feel free to redistribute the script/modify it, as - long as you leave my infos at the top. -------------------------------------------------------------------------- */ - - -(function($){ - - $.fn.s3Slider = function(vars) { - - var element = this; - var timeOut = (vars.timeOut != undefined) ? vars.timeOut : 4000; - var current = null; - var timeOutFn = null; - var faderStat = true; - var mOver = false; - var items = $("#" + element[0].id + "Content ." + element[0].id + "Image"); - var itemsSpan = $("#" + element[0].id + "Content ." + element[0].id + "Image span"); - - items.each(function(i) { - - $(items[i]).mouseover(function() { - mOver = true; - }); - - $(items[i]).mouseout(function() { - mOver = false; - fadeElement(true); - }); - - }); - - var fadeElement = function(isMouseOut) { - var thisTimeOut = (isMouseOut) ? (timeOut/2) : timeOut; - thisTimeOut = (faderStat) ? 10 : thisTimeOut; - if(items.length > 0) { - timeOutFn = setTimeout(makeSlider, thisTimeOut); - } else { - console.log("Poof.."); - } - } - - var makeSlider = function() { - current = (current != null) ? current : items[(items.length-1)]; - var currNo = jQuery.inArray(current, items) + 1 - currNo = (currNo == items.length) ? 0 : (currNo - 1); - var newMargin = $(element).width() * currNo; - if(faderStat == true) { - if(!mOver) { - $(items[currNo]).fadeIn((timeOut/6), function() { - if($(itemsSpan[currNo]).css('bottom') == 0) { - $(itemsSpan[currNo]).slideUp((timeOut/6), function() { - faderStat = false; - current = items[currNo]; - if(!mOver) { - fadeElement(false); - } - }); - } else { - $(itemsSpan[currNo]).slideDown((timeOut/6), function() { - faderStat = false; - current = items[currNo]; - if(!mOver) { - fadeElement(false); - } - }); - } - }); - } - } else { - if(!mOver) { - if($(itemsSpan[currNo]).css('bottom') == 0) { - $(itemsSpan[currNo]).slideDown((timeOut/6), function() { - $(items[currNo]).fadeOut((timeOut/6), function() { - faderStat = true; - current = items[(currNo+1)]; - if(!mOver) { - fadeElement(false); - } - }); - }); - } else { - $(itemsSpan[currNo]).slideUp((timeOut/6), function() { - $(items[currNo]).fadeOut((timeOut/6), function() { - faderStat = true; - current = items[(currNo+1)]; - if(!mOver) { - fadeElement(false); - } - }); - }); - } - } - } - } - - makeSlider(); - - }; - -})(jQuery); \ No newline at end of file diff --git a/www/js/script.js b/www/js/script.js deleted file mode 100755 index 98c10087438ca0941054d57d1a3c34d434dce1e6..0000000000000000000000000000000000000000 --- a/www/js/script.js +++ /dev/null @@ -1,15 +0,0 @@ -// JavaScript Document - - -$(document).ready(function(){ - $('div.rounded').wrap('<div class="cadre"></div>'); - $('div.cadre').prepend('<div class="cadre_hd"></div><div class="cadre_hg"></div>'); - $('div.cadre').append('<div class="cadre_bd"></div><div class="cadre_bg"></div>'); -}); - - -$(document).ready(function() { - $('#slider').s3Slider({ - timeOut: 4000 - }); -}); diff --git a/www/screenshot.php b/www/screenshot.php deleted file mode 100644 index d8ad97506e3d8ca9520948bd9f5fa4cd88dcc8fb..0000000000000000000000000000000000000000 --- a/www/screenshot.php +++ /dev/null @@ -1,111 +0,0 @@ -<?php -$name = 'screenshot'; -$javascript = array('jquery','animated-menu','jquery.galleria'); -$css = array('galleria'); - -include_once('utils.php'); - -include('include/header.php'); - -?> - <div id="content"> - <div id="main-image"> </div> - <ul class="gallery"> - <?php - - $images = array( - array('assistant-1.png','File menu', 'state' => 'active'), - array('main-edit.png','Edit menu'), - array('main-view.png','View menu'), - array('main-help.png','Help menu'), - array('assistant-2-.png','Installation wizard welcome'), - array('assistant-3-.png','Account type selector'), - array('assistant-4-.png','Account configuration'), - array('assistant-5-.png','Nat configuration'), - array('edit-account.png','General settings'), - array('edit-pref-gen.png','General settings'), - array('edit-pref-audio.png','Audio settings'), - array('edit-pref-rec.png','Record settings'), - array('incoming-call.png','Incoming call'), - array('main-history.png','Call history'), - array('main-history-opt.png','Call history options'), - array('main-transfer.png','Call transfer'), - array('account-edit.png','Account add dialog'), - array('account-add.png','Account edit dialog') - ); - - - foreach($images as $image){ - $fileName = $image[0]; - $description = $image[1]; - echo "<li "; - if($image['state'] != null) - echo 'class="active" > '; - echo "<a href='img/gallery/$fileName' title='$description'><img src='img/gallery/thumbs/$fileName' alt='$description'></a></li>"; - } - - ?> - </ul> - </div> - <!-- - Thanks to http://devkick.com/lab/galleria/ for doing the galleria plugin. - The code snipet bellow is taken from the demo1. It probably saved many hours of work. - - I should thank all the jQuery team and users for making one of the most awesome javascript library out there. - http://jquery.org - --> - <script type="text/javascript"> - jQuery(function($) { - - $('.gallery_demo_unstyled').addClass('gallery_demo'); // adds new class name to maintain degradability - - $('ul.gallery').galleria({ - history : true, // activates the history object for bookmarking, back-button etc. - clickNext : true, // helper for making the image clickable - insert : '#main-image', - onImage : function(image,caption,thumb) { // let's add some image effects for demonstration purposes - - // fade in the image & caption - if(! ($.browser.mozilla && navigator.appVersion.indexOf("Win")!=-1) ) { // FF/Win fades large images terribly slow - image.css('display','none').fadeIn(1000); - } - caption.css('display','none').fadeIn(1000); - - // fetch the thumbnail container - var _li = thumb.parents('li'); - - // fade out inactive thumbnail - _li.siblings().children('img.selected').fadeTo(500,0.3); - - // fade in active thumbnail - thumb.fadeTo('fast',1).addClass('selected'); - - // add a title for the clickable image - image.attr('title','Next image >>'); - }, - onThumb : function(thumb) { // thumbnail effects goes here - - // fetch the thumbnail container - var _li = thumb.parents('li'); - - // if thumbnail is active, fade all the way. - var _fadeTo = _li.is('.active') ? '1' : '0.3'; - - // fade in the thumbnail when finnished loading - thumb.css({display:'none',opacity:_fadeTo}).fadeIn(1500); - - // hover effects - thumb.hover( - function() { thumb.fadeTo('fast',1); }, - function() { _li.not('.active').children('img').fadeTo('fast',0.3); } // don't fade out if the parent is active - ) - } - }); - - }); - </script> -<?php - -include('include/footer.php'); - -?> diff --git a/www/utils.php b/www/utils.php deleted file mode 100644 index 633d33aef11a93e65e8f13ef72f11c7963286c5d..0000000000000000000000000000000000000000 --- a/www/utils.php +++ /dev/null @@ -1,6 +0,0 @@ -<?php - -$GLOBALS['SFLPHONE_LATEST_VERSION'] = '0.9.3-3'; -$GLOBALS['SFLPHONE_RELEASE_DATE'] = '2009 Feb 28'; - -?>