diff options
166 files changed, 16909 insertions, 8613 deletions
@@ -1,3 +1,106 @@ +NEW in 2.27.91.1 +================ + + - We require gnome-doc-utils 0.17.3 for Mallard. + - Some fixes so distcheck passes. + +NEW in 2.27.91 +============== + + - This version needs mission-control-5 instead of the now deprecated + mission-control-4. As result, libmission-control-client and libtelepathy are + not required anymore. + + - Empathy can now optionally use ConnMan instead of NetworkManager. + + - libgnome-keyring is now required, it is used to migrate accounts created with + MissionControl4, because password were saved in the keyring. Unfortunately + the new MissionControl is not using the keyring yet, so your password will be + written in plain text. Keyring support will soon be added in a future + MissionControl-5 release. + + - Empathy now uses libunique to prevent running it twice. + +Bugs fixed: + - Fixed #588878, empathy crashes making voip call if it can't set up the pipeline + - Fixed #494007, Empathy should conform to the XDG directory specification + - Fixed #526360, easy screen sharing + - Fixed #571989, "Video preview" menu item doesn't do anything + - Fixed #576467, msn profile should use a butterfly icon (Guillaume Desmottes) + - Fixed #580134, Displays empty bubbles for messages containing < (Will Thompson) + - Fixed #582191, The call windows should have a "redial" button. + - Fixed #582810, When we stop receiving video in a call, we should not see the last video frame. + - Fixed #585322, Start chat/call from map view + - Fixed #585443, drag & drop in contact list should be a move action (Louis-Francis Ratté-Boulianne) + - Fixed #585843, Should use stable Geolocation API (Guillaume Desmottes) + - Fixed #585844, Should use stable Debug API (Guillaume Desmottes) + - Fixed #585867, "Minutes ago" is not updated with time in Map View + - Fixed #585993, support global installed themes + - Fixed #586401, Clicking URLs don't work in adium's themes + - Fixed #586977, Reduced Accuracy mode is wrong + - Fixed #587161, cannot reconnect to msn after setting a sÌͪͧÌ̒̒̚Ì̋͌̊̀ͩͣÌ̷̸̈ͦͬ̀Ì͎̯͔ͅÌ͙̮͙̹͉̱͔̳trange nickname + - Fixed #587514, Werror breaks the build + - Fixed #587634, Mailto: url mangled if :+letter forms a smiley + - Fixed #587706, ALL yahoo contacts appear in contact list w/ no status icon or avatar + - Fixed #587803, Invert the variable position for a proper translation (Guillaume Desmottes) + - Fixed #588252, Set the codecs preferences/properties from a config file + - Fixed #588840, Empathy Crashes when initiating dialog with a buddy (Will Thompson) + - Fixed #589091, Feature Share My Desktop for Empathy + - Fixed #589335, No way to send a message starting with a slash (Frédéric Péters) + - Fixed #589846, wrap text in contact label status + - Fixed #590029, IRC help window waiting for something when opened from conversation window (Guillaume Desmottes) + - Fixed #590118, Port pidgin account importer to mc5 + - Fixed #590165, Should use MC5 (Sjoerd Simons) + - Fixed #590756, VNC/Vinagre tube Service should a well-known TCP service name (Arnaud Maillet) + - Fixed #590924, Set selectable status information + - Fixed #590956, Shouldn't show old locations + - Fixed #590962, empathy-contact-widget does not follow style guidelines + - Fixed #590982, Changing the input volume makes the application crash if the call has been disconnected + - Fixed #591058, Should be able to send files from network locations (Guillaume Desmottes) + - Fixed #591199, [a11y] Attempting to get default text attributes crashes Empathy + - Fixed #591247, Missing status icons (Frédéric Péters) + - Fixed #591335, Merge new Mallard help files + - Fixed #591468, Crashed when I opened a tab to an IRC contact. (Will Thompson) + - Fixed #591543, Switch to clutter-gtk-0.10 + - Fixed #591582, make distcheck fails on codec-preference (Frédéric Péters) + - Fixed #591602, Changed Empathy docs path (Milo Casagrande) + - Fixed #591612, Segfault at strcmp opening preferences (Guillaume Desmottes) + - Fixed #592005, Unmark for translation: 'gtk-add', 'gtk-remove' and 'gtk-leave-fullscreen' + - Fixed #592052, "Call" misses translator comment (Guillaume Desmottes) + +Translations: + - Updated ar Translation (Khaled Hosny) + - Updated bg Translation (Alexander Shopov) + - Updated br Translation (Denis Arnaud) + - Updated ca Translation (Gil Forcada) + - Updated ca@valencia Translation (Carles Ferrando) + - Updated cs Translation (Andre Klapper) + - Updated de Translation (Michael Kanis) + - Updated es Translation (Jorge González) + - Updated et Translation (Ivar Smolin, Mattias Põldaru) + - Updated eu Translation (Inaki Larranaga Murgoitio) + - Updated fi Translation (Tommi Vainikainen) + - Updated ga Translation (Seán de Búrca) + - Updated gl Translation (Antón Méixome) + - Updated he Translation (Mark Krapivner) + - Updated hr Translation (Sjoerd Simons) + - Updated kn Translation (Shankar Prasad) + - Updated nb Translation (Kjartan Maraas) + - Updated or Translation (Manoj Kumar Giri) + - Updated pt_BR Translation (Rodrigo L. M. Flores) + - Updated sv Translation (Daniel Nylander) + - Updated ta Translation (ifelix) + - Updated te Translation (krishnababu k) + - Updated tr Translation (Baris Cicek) + - Updated uk Translation (Maxim V. Dziumanenko) + - Updated zh_CN Translation (Aron Xu, lyper) + - Updated zh_HK Translation (Chao-Hsiung Liao) + - Updated zh_TW Translation (Chao-Hsiung Liao) + +Documentation translations: + - Updated de Documentation translation (Mario Blättermann) + - Updated es Documentation translation (Jorge González) + NEW in 2.27.5 ============== Bugs fixed: diff --git a/configure.ac b/configure.ac index bc0491cae..8bad2e2c6 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT(Empathy, 2.27.90, http://bugzilla.gnome.org/browse.cgi?product=empathy) +AC_INIT(Empathy, 2.27.92, http://bugzilla.gnome.org/browse.cgi?product=empathy) AC_PREREQ(2.59) AC_COPYRIGHT([ Copyright (C) 2003-2007 Imendio AB @@ -9,12 +9,12 @@ AC_COPYRIGHT([ # (Interfaces removed: CURRENT++, AGE=0, REVISION=0) # (Interfaces added: CURRENT++, AGE++, REVISION=0) # (No interfaces changed: REVISION++) -LIBEMPATHY_CURRENT=28 -LIBEMPATHY_AGE=1 +LIBEMPATHY_CURRENT=29 +LIBEMPATHY_AGE=0 LIBEMPATHY_REVISION=0 -LIBEMPATHY_GTK_CURRENT=26 -LIBEMPATHY_GTK_AGE=1 +LIBEMPATHY_GTK_CURRENT=27 +LIBEMPATHY_GTK_AGE=0 LIBEMPATHY_GTK_REVISION=0 AC_SUBST(LIBEMPATHY_CURRENT) @@ -30,7 +30,6 @@ GTK_REQUIRED=2.16.0 GCONF_REQUIRED=1.2.0 LIBPANELAPPLET_REQUIRED=2.10.0 TELEPATHY_GLIB_REQUIRED=0.7.34 -MISSION_CONTROL_REQUIRED=4.61 ENCHANT_REQUIRED=1.2.0 ISO_CODES_REQUIRED=0.35 LIBNOTIFY_REQUIRED=0.4.4 @@ -40,6 +39,7 @@ LIBCHAMPLAIN_GTK_REQUIRED=0.3.6 CLUTTER_GTK_REQUIRED=0.10 GEOCLUE_REQUIRED=0.11 WEBKIT_REQUIRED=1.1.7 +KEYRING_REQUIRED=2.22 NETWORK_MANAGER_REQUIRED=0.7.0 # Use --enable-maintainer-mode to disabled deprecated symbols @@ -67,7 +67,7 @@ AM_PATH_GLIB_2_0 AC_PATH_XTRA IT_PROG_INTLTOOL([0.35.0]) GTK_DOC_CHECK([1.3]) -GNOME_DOC_INIT +GNOME_DOC_INIT([0.17.3]) IDT_COMPILE_WARNINGS AC_PATH_PROG(DBUS_BINDING_TOOL, dbus-binding-tool) AC_PATH_PROG(GCONFTOOL, gconftool-2) @@ -95,7 +95,6 @@ PKG_CHECK_MODULES(LIBEMPATHY, gio-unix-2.0 >= $GLIB_REQUIRED libxml-2.0 telepathy-glib >= $TELEPATHY_GLIB_REQUIRED - libmissioncontrol >= $MISSION_CONTROL_REQUIRED telepathy-farsight farsight2-0.10 gstreamer-0.10 @@ -111,7 +110,6 @@ PKG_CHECK_MODULES(LIBEMPATHYGTK, gtk+-2.0 >= $GTK_REQUIRED libcanberra-gtk >= $LIBCANBERRA_GTK_REQUIRED telepathy-glib >= $TELEPATHY_GLIB_REQUIRED - libmissioncontrol >= $MISSION_CONTROL_REQUIRED farsight2-0.10 gstreamer-0.10 gstreamer-interfaces-0.10 @@ -127,9 +125,10 @@ PKG_CHECK_MODULES(EMPATHY, libebook-1.2 dbus-glib-1 telepathy-glib >= $TELEPATHY_GLIB_REQUIRED - libmissioncontrol >= $MISSION_CONTROL_REQUIRED telepathy-farsight gstreamer-0.10 + unique-1.0 + gnome-keyring-1 >= $KEYRING_REQUIRED ]) PKG_CHECK_MODULES(LIBNOTIFY, libnotify >= $LIBNOTIFY_REQUIRED) @@ -341,7 +340,7 @@ if test "x$enable_megaphone" != "xno"; then glib-2.0 >= $GLIB_REQUIRED gtk+-2.0 >= $GTK_REQUIRED gconf-2.0 >= $GCONF_REQUIRED - libmissioncontrol >= $MISSION_CONTROL_REQUIRED + telepathy-glib >= $TELEPATHY_GLIB_REQUIRED ], have_megaphone="yes", have_megaphone="no") else have_megaphone=no @@ -368,7 +367,7 @@ if test "x$enable_nothere" != "xno"; then glib-2.0 >= $GLIB_REQUIRED gtk+-2.0 >= $GTK_REQUIRED gconf-2.0 >= $GCONF_REQUIRED - libmissioncontrol >= $MISSION_CONTROL_REQUIRED + telepathy-glib >= $TELEPATHY_GLIB_REQUIRED ], have_nothere="yes", have_nothere="no") else have_nothere=no @@ -419,7 +418,6 @@ if test "x$enable_python" != "xno"; then gobject-2.0 gconf-2.0 >= $GCONF_REQUIRED libxml-2.0 - libmissioncontrol >= $MISSION_CONTROL_REQUIRED gtk+-2.0 >= $GTK_REQUIRED gstreamer-0.10 gstreamer-interfaces-0.10 diff --git a/data/.gitignore b/data/.gitignore index fd8659a18..bf47a374f 100644 --- a/data/.gitignore +++ b/data/.gitignore @@ -1,3 +1,4 @@ empathy.desktop empathy.desktop.in empathy.schemas +org.freedesktop.Telepathy.Client.Empathy.service diff --git a/data/Empathy.client b/data/Empathy.client new file mode 100644 index 000000000..791813957 --- /dev/null +++ b/data/Empathy.client @@ -0,0 +1,6 @@ +[org.freedesktop.Telepathy.Client] +Interfaces=org.freedesktop.Telepathy.Client.Handler;org.freedesktop.Telepathy.Client.Interface.Requests + +[org.freedesktop.Telepathy.Client.Handler.HandlerChannelFilter 0] +org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Text +org.freedesktop.Telepathy.Channel.TargetHandleType u=1 diff --git a/data/Makefile.am b/data/Makefile.am index 7391b409e..b2591d293 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -1,25 +1,5 @@ SUBDIRS = icons -profiledir = $(datadir)/mission-control/profiles -profile_DATA = \ - aim.profile \ - icq.profile \ - jabber.profile \ - salut.profile \ - yahoo.profile \ - gtalk.profile \ - irc.profile \ - msn.profile \ - msn-haze.profile \ - sofiasip.profile \ - ekiga.profile \ - fwd.profile \ - sipphone.profile \ - groupwise.profile \ - gadugadu.profile \ - qq.profile \ - sametime.profile - desktopdir = $(datadir)/applications desktop_in_files = empathy.desktop.in desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) @@ -35,6 +15,16 @@ streamingprefs_DATA = \ codec-preferences \ element-properties +servicefiledir = $(datadir)/dbus-1/services +servicefile_in_files = org.freedesktop.Telepathy.Client.Empathy.service.in +servicefile_DATA = $(servicefile_in_files:.service.in=.service) + +org.freedesktop.Telepathy.Client.Empathy.service: org.freedesktop.Telepathy.Client.Empathy.service.in + $(QUIET_GEN)sed -e "s|[@]bindir[@]|$(bindir)|" $< > $@ + +clientfiledir = $(datarootdir)/telepathy/clients +clientfile_DATA = Empathy.client + if GCONF_SCHEMAS_INSTALL install-data-local: if test -z "$(DESTDIR)" ; then \ @@ -50,15 +40,17 @@ htmldir = $(datadir)/empathy html_DATA = Template.html EXTRA_DIST = \ - $(profile_DATA) \ $(desktop_in_files) \ $(desktop_DATA) \ $(schemas_in_files) \ $(schemas_DATA) \ $(streamingprefs_DATA) \ - $(html_DATA) + $(html_DATA) \ + $(clientfile_DATA) \ + $(servicefile_in_files) -DISTCLEANFILES = \ +DISTCLEANFILES = \ $(desktop_DATA) \ - $(schemas_DATA) + $(schemas_DATA) \ + $(servicefile_DATA) diff --git a/data/aim.profile b/data/aim.profile deleted file mode 100644 index ae7dbaecc..000000000 --- a/data/aim.profile +++ /dev/null @@ -1,10 +0,0 @@ -[Profile] -Manager=haze -Protocol=aim -IconName = im-aim -DisplayName=AIM -ConfigurationUI = aim -Capabilities = chat-p2p, supports-alias, supports-avatars, supports-roster -VCardDefault = 1 -VCardField = X-AIM -SupportedPresences = away,hidden,do-not-disturb diff --git a/data/ekiga.profile b/data/ekiga.profile deleted file mode 100644 index 1acc71044..000000000 --- a/data/ekiga.profile +++ /dev/null @@ -1,14 +0,0 @@ -[Profile] -Manager = sofiasip -Protocol = sip -DisplayName = Ekiga.net (SIP) -IconName = im-ekiga -ConfigurationUI = sofiasip -VCardDefault = 1 -VCardField = X-SIP -Capabilities = chat-p2p, voice-p2p, split-account, video-p2p -DefaultAccountDomain = ekiga.net -Default-priority = 1 -Default-stun-server = stun.ekiga.net -Default-discover-stun = false - diff --git a/data/empathy.schemas.in b/data/empathy.schemas.in index bb9068725..6aa7f8a5f 100644 --- a/data/empathy.schemas.in +++ b/data/empathy.schemas.in @@ -479,6 +479,20 @@ </schema> <schema> + <key>/schemas/apps/empathy/accounts/imported_mc4_accounts</key> + <applyto>/apps/empathy/accounts/imported_mc4_accounts</applyto> + <owner>empathy</owner> + <type>bool</type> + <default>false</default> + <locale name="C"> + <short>MC 4 accounts have been imported</short> + <long> + MC 4 accounts have been imported. + </long> + </locale> + </schema> + + <schema> <key>/schemas/apps/empathy/use_conn</key> <applyto>/apps/empathy/use_conn</applyto> <owner>empathy</owner> diff --git a/data/fwd.profile b/data/fwd.profile deleted file mode 100644 index af05b2cc3..000000000 --- a/data/fwd.profile +++ /dev/null @@ -1,15 +0,0 @@ -[Profile] -Manager = sofiasip -Protocol = sip -DisplayName = FreeWorldDialup (SIP) -IconName = im-sip -ConfigurationUI = sofiasip -VCardDefault = 1 -VCardField = X-SIP -Capabilities = chav-p2p, voice-p2p, split-account, video-p2p -DefaultAccountDomain = fwd.pulver.com -Default-priority = 1 -Default-proxy-address = fwd.pulver.com -Default-stun-server = stun.fwdnet.net -Default-discover-stun = false - diff --git a/data/gadugadu.profile b/data/gadugadu.profile deleted file mode 100644 index ca2f5b7a9..000000000 --- a/data/gadugadu.profile +++ /dev/null @@ -1,11 +0,0 @@ -[Profile] -Manager=haze -Protocol=gadugadu -DisplayName=Gadu Gadu -IconName = im-gadugadu -ConfigurationUI = gadugadu -Capabilities = chat-p2p, contact-search, supports-alias, supports-roster -VCardDefault = 1 -VCardField = X-GADUGADU -SupportedPresences = offline,available,away,hidden - diff --git a/data/groupwise.profile b/data/groupwise.profile deleted file mode 100644 index 3e47ec2fb..000000000 --- a/data/groupwise.profile +++ /dev/null @@ -1,11 +0,0 @@ -[Profile] -Manager=haze -Protocol=groupwise -IconName = im-nov -DisplayName=GroupWise -ConfigurationUI = groupwise -Capabilities = chat-p2p, supports-alias, supports-roster -VCardDefault = 1 -VCardField = X-Groupwise -SupportedPresences = away,hidden,do-not-disturb - diff --git a/data/gtalk.profile b/data/gtalk.profile deleted file mode 100644 index 21eadc031..000000000 --- a/data/gtalk.profile +++ /dev/null @@ -1,16 +0,0 @@ -[Profile] -Manager = gabble -Protocol = jabber -DisplayName = Google Talk -IconName = im-google-talk -ConfigurationUI = jabber -VCardDefault = 0 -VCardField = X-JABBER -Capabilities = chat-p2p, voice-p2p, split-account, chat-room, chat-room-list, supports-avatars, supports-alias, supports-roster -DefaultAccountDomain = gmail.com -Default-server = talk.google.com -Default-port = 5223 -Default-old-ssl = 1 -Default-ignore-ssl-errors = 1 -Default-fallback-conference-server = conference.jabber.org -SupportedPresences = away,extended-away,do-not-disturb diff --git a/data/icq.profile b/data/icq.profile deleted file mode 100644 index 0f4622e75..000000000 --- a/data/icq.profile +++ /dev/null @@ -1,11 +0,0 @@ -[Profile] -Manager=haze -Protocol=icq -IconName = im-icq -DisplayName=ICQ -ConfigurationUI = icq -Capabilities = chat-p2p, supports-alias, supports-avatars, supports-roster -VCardDefault = 1 -VCardField = X-ICQ -SupportedPresences = away,hidden,do-not-disturb - diff --git a/data/irc.profile b/data/irc.profile deleted file mode 100644 index 05bf5ed5a..000000000 --- a/data/irc.profile +++ /dev/null @@ -1,9 +0,0 @@ -[Profile] -Manager = idle -Protocol = irc -DisplayName = IRC -IconName = im-irc -ConfigurationUI = irc -VCardField = X-IRC -Capabilities = chat-p2p, chat-room, chat-room-list -SupportedPresences = away diff --git a/data/jabber.profile b/data/jabber.profile deleted file mode 100644 index c3cb57aff..000000000 --- a/data/jabber.profile +++ /dev/null @@ -1,12 +0,0 @@ -[Profile] -Manager = gabble -Protocol = jabber -DisplayName = Jabber -IconName = im-xmpp -ConfigurationUI = jabber -VCardDefault = 1 -VCardField = X-JABBER -Capabilities = chat-p2p, chat-room, chat-room-list, voice-p2p, contact-search, split-account, registration-ui, supports-avatars, supports-alias, supports-roster -DefaultAccountDomain = jabber.org -Default-fallback-conference-server = conference.jabber.org -SupportedPresences = away,extended-away,hidden,do-not-disturb diff --git a/data/msn-haze.profile b/data/msn-haze.profile deleted file mode 100644 index 196825202..000000000 --- a/data/msn-haze.profile +++ /dev/null @@ -1,13 +0,0 @@ -[Profile] -Manager=haze -Protocol=msn -DisplayName=MSN (Haze) -IconName = im-msn -ConfigurationUI = haze -SupportsInvisible = 0 -Capabilities = chat-p2p, split-account, supports-alias, supports-avatars, supports-roster -DefaultAccountDomain = hotmail.com -VCardDefault = 1 -VCardField = X-MSN -SupportedPresences = away,hidden,do-not-disturb - diff --git a/data/msn.profile b/data/msn.profile deleted file mode 100644 index 9bdd051ea..000000000 --- a/data/msn.profile +++ /dev/null @@ -1,13 +0,0 @@ -[Profile] -Manager=butterfly -Protocol=msn -DisplayName=MSN -IconName = im-msn -ConfigurationUI = msn -SupportsInvisible = 1 -Capabilities = chat-p2p, split-account, supports-avatars, supports-alias -DefaultAccountDomain = hotmail.com -VCardDefault = 1 -VCardField = X-MSN -SupportedPresences = offline,available,away,extended-away,hidden,do-not-disturb - diff --git a/data/org.freedesktop.Telepathy.Client.Empathy.service.in b/data/org.freedesktop.Telepathy.Client.Empathy.service.in new file mode 100644 index 000000000..909bd7cdf --- /dev/null +++ b/data/org.freedesktop.Telepathy.Client.Empathy.service.in @@ -0,0 +1,3 @@ +[D-BUS Service] +Name=org.freedesktop.Telepathy.Client.Empathy +Exec=@bindir@/empathy diff --git a/data/qq.profile b/data/qq.profile deleted file mode 100644 index 9a52d2441..000000000 --- a/data/qq.profile +++ /dev/null @@ -1,11 +0,0 @@ -[Profile] -Manager=haze -Protocol=qq -DisplayName=QQ -IconName = im-qq -ConfigurationUI = qq -Capabilities = chat-p2p, chat-room, contact-search, supports-alias, supports-roster -VCardDefault = 1 -VCardField = X-QQ -SupportedPresences = offline,available,away,hidden - diff --git a/data/salut.profile b/data/salut.profile deleted file mode 100644 index acd483ccc..000000000 --- a/data/salut.profile +++ /dev/null @@ -1,9 +0,0 @@ -[Profile] -Manager = salut -Protocol = local-xmpp -DisplayName = Salut -IconName = im-local-xmpp -ConfigurationUI = local-xmpp -VCardField = X-LOCAL-XMPP -Capabilities = chat-p2p, contact-search, supports-alias, supports-roster -SupportedPresences = away,extended-away,hidden,do-not-disturb diff --git a/data/sametime.profile b/data/sametime.profile deleted file mode 100644 index aec798925..000000000 --- a/data/sametime.profile +++ /dev/null @@ -1,11 +0,0 @@ -[Profile] -Manager=haze -Protocol=sametime -IconName = im-meanwhile -DisplayName = Sametime -ConfigurationUI = sametime -Capabilities = chat-p2p, supports-alias, supports-roster -VCardDefault = 1 -VCardField = X-Sametime -SupportedPresences = away,hidden,do-not-disturb - diff --git a/data/sipphone.profile b/data/sipphone.profile deleted file mode 100644 index 4904a7481..000000000 --- a/data/sipphone.profile +++ /dev/null @@ -1,16 +0,0 @@ -[Profile] -Manager = sofiasip -Protocol = sip -DisplayName = Sipphone.com (SIP) -IconName = im-sip -ConfigurationUI = sofiasip -VCardDefault = 1 -VCardField = X-SIP -Capabilities = voice-p2p, split-account, video-p2p -DefaultAccountDomain = proxy01.sipphone.com -Default-priority = 1 -Default-stun-server = stun01.sipphone.com -Default-proxy = 198.65.166.131 -Default-discover-stun = false -Default-transport = udp - diff --git a/data/sofiasip.profile b/data/sofiasip.profile deleted file mode 100644 index e49f9a09d..000000000 --- a/data/sofiasip.profile +++ /dev/null @@ -1,10 +0,0 @@ -[Profile] -Manager = sofiasip -Protocol = sip -DisplayName = SIP -IconName = im-sip -ConfigurationUI = sofiasip -VCardDefault = 1 -VCardField = X-SIP -Capabilities = chat-p2p, voice-p2p, split-account - diff --git a/data/yahoo.profile b/data/yahoo.profile deleted file mode 100644 index f4173d1af..000000000 --- a/data/yahoo.profile +++ /dev/null @@ -1,11 +0,0 @@ -[Profile] -Manager=haze -Protocol=yahoo -DisplayName=Yahoo -IconName = im-yahoo -ConfigurationUI = yahoo -Capabilities = chat-p2p, supports-alias, supports-avatars, supports-roster -VCardDefault = 1 -VCardField = X-YAHOO -SupportedPresences = away,hidden,do-not-disturb - diff --git a/docs/libempathy-gtk/libempathy-gtk-docs.sgml b/docs/libempathy-gtk/libempathy-gtk-docs.sgml index edb31afb9..cf44dde21 100644 --- a/docs/libempathy-gtk/libempathy-gtk-docs.sgml +++ b/docs/libempathy-gtk/libempathy-gtk-docs.sgml @@ -20,6 +20,7 @@ <xi:include href="xml/api-index-full.xml"/> <xi:include href="xml/empathy-account-chooser.xml"/> <xi:include href="xml/empathy-account-widget-irc.xml"/> + <xi:include href="xml/empathy-account-widget-private.xml"/> <xi:include href="xml/empathy-account-widget-sip.xml"/> <xi:include href="xml/empathy-account-widget.xml"/> <xi:include href="xml/empathy-audio-sink.xml"/> @@ -42,13 +43,17 @@ <xi:include href="xml/empathy-geometry.xml"/> <xi:include href="xml/empathy-images.xml"/> <xi:include href="xml/empathy-irc-network-dialog.xml"/> + <xi:include href="xml/empathy-kludge-label.xml"/> + <xi:include href="xml/empathy-location-manager.xml"/> <xi:include href="xml/empathy-log-window.xml"/> <xi:include href="xml/empathy-new-message-dialog.xml"/> + <xi:include href="xml/empathy-plist.xml"/> <xi:include href="xml/empathy-presence-chooser.xml"/> - <xi:include href="xml/empathy-profile-chooser.xml"/> + <xi:include href="xml/empathy-protocol-chooser.xml"/> + <xi:include href="xml/empathy-share-my-desktop.xml"/> <xi:include href="xml/empathy-smiley-manager.xml"/> - <xi:include href="xml/empathy-spell.xml"/> <xi:include href="xml/empathy-sound.xml"/> + <xi:include href="xml/empathy-spell.xml"/> <xi:include href="xml/empathy-status-preset-dialog.xml"/> <xi:include href="xml/empathy-theme-adium.xml"/> <xi:include href="xml/empathy-theme-boxes.xml"/> diff --git a/docs/libempathy-gtk/libempathy-gtk.types b/docs/libempathy-gtk/libempathy-gtk.types index ead69316b..65842bc8c 100644 --- a/docs/libempathy-gtk/libempathy-gtk.types +++ b/docs/libempathy-gtk/libempathy-gtk.types @@ -1,5 +1,5 @@ empathy_account_chooser_get_type -empathy_adium_data_get_type +empathy_account_widget_get_type empathy_audio_sink_get_type empathy_audio_src_get_type empathy_avatar_chooser_get_type @@ -21,11 +21,14 @@ empathy_contact_feature_flags_get_type empathy_contact_widget_flags_get_type empathy_gst_video_src_channel_get_type empathy_sound_get_type +empathy_kludge_label_get_type +empathy_location_manager_get_type empathy_presence_chooser_get_type -empathy_profile_chooser_get_type +empathy_protocol_chooser_get_type empathy_smiley_manager_get_type empathy_status_preset_dialog_get_type empathy_theme_adium_get_type +empathy_adium_data_get_type empathy_theme_boxes_get_type empathy_theme_irc_get_type empathy_theme_manager_get_type diff --git a/docs/libempathy/libempathy-docs.sgml b/docs/libempathy/libempathy-docs.sgml index 41c7add8d..6465e23c5 100644 --- a/docs/libempathy/libempathy-docs.sgml +++ b/docs/libempathy/libempathy-docs.sgml @@ -19,15 +19,20 @@ <xi:include href="xml/api-index-deprecated.xml"/> <xi:include href="xml/api-index-full.xml"/> <xi:include href="xml/empathy-account-manager.xml"/> + <xi:include href="xml/empathy-account-settings.xml"/> + <xi:include href="xml/empathy-account.xml"/> <xi:include href="xml/empathy-call-factory.xml"/> <xi:include href="xml/empathy-call-handler.xml"/> <xi:include href="xml/empathy-chatroom-manager.xml"/> <xi:include href="xml/empathy-chatroom.xml"/> + <xi:include href="xml/empathy-connection-managers.xml"/> + <xi:include href="xml/empathy-connectivity.xml"/> <xi:include href="xml/empathy-contact-groups.xml"/> <xi:include href="xml/empathy-contact-list.xml"/> <xi:include href="xml/empathy-contact-manager.xml"/> <xi:include href="xml/empathy-contact-monitor.xml"/> <xi:include href="xml/empathy-contact.xml"/> + <xi:include href="xml/empathy-debugger.xml"/> <xi:include href="xml/empathy-dispatcher.xml"/> <xi:include href="xml/empathy-dispatch-operation.xml"/> <xi:include href="xml/empathy-enum-types.xml"/> diff --git a/docs/libempathy/libempathy.types b/docs/libempathy/libempathy.types index 878e68033..0ddb7f5bc 100644 --- a/docs/libempathy/libempathy.types +++ b/docs/libempathy/libempathy.types @@ -1,16 +1,22 @@ +empathy_account_get_type empathy_account_manager_get_type +empathy_account_settings_get_type empathy_call_factory_get_type empathy_call_handler_get_type empathy_chatroom_get_type empathy_chatroom_manager_get_type +empathy_connection_managers_get_type +empathy_connectivity_get_type empathy_contact_get_type empathy_avatar_get_type empathy_contact_list_get_type empathy_contact_manager_get_type empathy_contact_monitor_get_type +empathy_debugger_get_type empathy_dispatcher_get_type empathy_dispatch_operation_get_type empathy_capabilities_get_type +empathy_contact_list_flags_get_type empathy_debug_flags_get_type empathy_dispatch_operation_state_get_type empathy_tp_call_status_get_type diff --git a/help/C/add-account.page b/help/C/add-account.page index 2fa344cfb..5821a856c 100644 --- a/help/C/add-account.page +++ b/help/C/add-account.page @@ -85,10 +85,12 @@ </item> </steps> - <p> - If you want to change the name that identifies the account in the <gui>Accounts</gui> - dialog, double-click on the name of the account in the box on the left of the dialog - and type the new name. - </p> + <note style="tip"> + <p> + If you want to change the name that identifies the account in the <gui>Accounts</gui> + dialog, double-click on the name of the account in the box on the left of the dialog + and type the new name. + </p> + </note> </page> diff --git a/help/C/add-contact.page b/help/C/add-contact.page index e435a9404..14d49a57a 100644 --- a/help/C/add-contact.page +++ b/help/C/add-contact.page @@ -30,14 +30,14 @@ <item> <p> From the <gui>Account</gui> drop-down list, select the type of - service the person you want to add to your contacts is using. + service the person you want to add to your contacts is using. </p> </item> <item> <p> In the <gui>Identifier</gui> text box, type the email address - or the username of the person you want to add to your - contacts list. + or the username of the person you want to add to your + contacts list. </p> </item> <item> @@ -48,7 +48,7 @@ <item> <p> Click <gui>Add</gui> to add the person to your list of - contacts. + contacts. </p> </item> </steps> @@ -56,7 +56,7 @@ <note> <p> To add a new person to your list of contacts, you need to be - connected to the Internet and to your account. + connected to the Internet and to your account. </p> </note> diff --git a/help/C/audio-call.page b/help/C/audio-call.page index 575c6af1e..8c18b9453 100644 --- a/help/C/audio-call.page +++ b/help/C/audio-call.page @@ -56,7 +56,7 @@ </p> </item> </steps> - <note> + <note style="tip"> <p> To turn an audio conversation into a video one, from the call window select <guiseq><gui>Call</gui><gui>Send video</gui></guiseq>, diff --git a/help/C/create-account.page b/help/C/create-account.page index 203818c7f..46f58395e 100644 --- a/help/C/create-account.page +++ b/help/C/create-account.page @@ -61,7 +61,7 @@ <p> <link href="http://register.jabber.org/">Jabber</link> </p> - <note> + <note style="tip"> <p> It is possible to use the automatic creation of accounts with this service. Not all the service providers support it. diff --git a/help/C/favorite-rooms.page b/help/C/favorite-rooms.page new file mode 100644 index 000000000..747c09d66 --- /dev/null +++ b/help/C/favorite-rooms.page @@ -0,0 +1,135 @@ +<page xmlns="http://projectmallard.org/1.0/" + type="topic" + id="favorite-rooms"> + + <info> + <link type="guide" xref="index#text-conv"/> + <link type="guide" xref="irc-manage#manage"/> + <link type="seealso" xref="irc-join-room"/> + <link type="seealso" xref="group-conversations"/> + <desc>Set, join and manage favorite rooms.</desc> + <revision pkgversion="2.28" version="0.1" date="2009-08-21" status="draft"/> + <credit type="author"> + <name>Milo Casagrande</name> + <email>milo@ubuntu.com</email> + </credit> + <copyright> + <year>2009</year> + <name>GNOME Documentation Project</name> + </copyright> + <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/> + </info> + + <title>Favorite rooms</title> + + <section id="set-favorite"> + <title>Set a room as a favorite</title> + <steps> + <item> + <p> + Join a room. + </p> + <list> + <item> + <p> + See <link xref="irc-join-room"/> for more information on how to join + an IRC room. + </p> + </item> + <item> + <p> + See <link xref="group-conversations"/> for more information on how to + start or join a group conversation. + </p> + </item> + </list> + </item> + <item> + <p> + From the conversation window, choose + <guiseq><gui>Conversation</gui><gui>Favorite Chatroom</gui></guiseq>. + </p> + </item> + </steps> + </section> + + <section id="join-favorite"> + <title>Join favorite rooms</title> + <steps> + <item> + <p> + From the <gui>Contact List</gui> window, perform one of the following: + </p> + <list> + <item> + <p> + Press <key>F5</key>. + </p> + </item> + <item> + <p> + Choose <guiseq><gui>Room</gui><gui>Join Favorites</gui></guiseq>, to + join all your favorite rooms. + </p> + </item> + <item> + <p> + Choose <gui>Room</gui>, and select the favorite room you want to join. + </p> + </item> + </list> + </item> + </steps> + <note> + <p> + To join a favorite room, you need to be connected to the Internet and to + your account. + </p> + </note> + </section> + + <section id="manage-favorite"> + <title>Manage favorite rooms</title> + <steps> + <item> + <p> + From the <gui>Contact List</gui> window, choose + <guiseq><gui>Room</gui><gui>Manage Favorites</gui></guiseq>. + </p> + </item> + <item> + <p> + From the <gui>Account</gui> drop-down list, select the account you want to + manage the favorite rooms of. + </p> + <p> + Select <gui>All</gui> to see all you favorite rooms. + </p> + </item> + <item> + <p> + Select the favorite room you want to manage: + </p> + <list> + <item> + <p> + Select the <gui>Auto-Connect</gui> check-box in order to automatically + join that room when you connect to your account. + </p> + </item> + <item> + <p> + Click on <gui>Remove</gui> to remove the room from your favorites. + </p> + </item> + </list> + </item> + <item> + <p> + When done, click <gui>Close</gui>. + </p> + </item> + </steps> + </section> + +</page> diff --git a/help/C/geolocation-what-is.page b/help/C/geolocation-what-is.page index fdbf0adbd..77fcff8dd 100644 --- a/help/C/geolocation-what-is.page +++ b/help/C/geolocation-what-is.page @@ -48,7 +48,7 @@ </item> </list> - <note> + <note style="tip"> <p> In order to see your contacts geographical position, they need to use a service and an application that support geolocation. diff --git a/help/C/import-account.page b/help/C/import-account.page new file mode 100644 index 000000000..19b016a25 --- /dev/null +++ b/help/C/import-account.page @@ -0,0 +1,88 @@ +<page xmlns="http://projectmallard.org/1.0/" + type="topic" + id="import-account"> + + <info> + <link type="guide" xref="index#accounts"/> + <link type="seealso" xref="add-account"/> + <link type="seealso" xref="remove-account"/> + <desc>Import an existing account to <app>Empathy</app>.</desc> + <revision pkgversion="2.28" version="0.1" date="2009-08-22" status="draft"/> + <revision pkgversion="2.28" version="0.2" date="2009-08-22" status="review"/> + <credit type="author"> + <name>Peter Haslam</name> + <email>peter.haslam@freenet.de</email> + </credit> + <credit type="author"> + <name>Milo Casagrande</name> + <email>milo@ubuntu.com</email> + </credit> + <copyright> + <year>2009</year> + <name>GNOME Documentation Project</name> + </copyright> + <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/> + </info> + + <title>Import an existing account</title> + + <steps> + <item> + <p> + From the <gui>Contact List</gui> window, do one of the following: + </p> + <list> + <item> + <p> + Press <key>F4</key>. + </p> + </item> + <item> + <p> + Choose <guiseq><gui>Edit</gui><gui>Accounts</gui></guiseq>. + </p> + </item> + </list> + </item> + <item> + <p> + Click on <gui>Import Accounts...</gui>. + </p> + </item> + <item> + <p> + From the <gui>Import Accounts</gui> dialog, select the <gui>Import</gui> + check-box next to the accounts you want to import. + </p> + </item> + <item> + <p> + Click <gui>OK</gui> to import the accounts to <app>Empathy</app>. + </p> + </item> + <item> + <p> + To enable the new account, select the + <gui>Enabled</gui> check-box next to + the name of the account in the box on the left of the dialog. + </p> + </item> + </steps> + + <note style="tip"> + <p> + If you want to change the name that identifies the account in the <gui>Accounts</gui> + dialog, double-click on the name of the account in the box on the left of the dialog + and type the new name. + </p> + </note> + + <note> + <p> + At the moment <app>Empathy</app> can import accounts only from the instant + messaging program <app>Pidgin</app>. For more information about <app>Pidgin</app>, + see the <link href="http://www.pidgin.im/">Pidgin website</link>. + </p> + </note> + +</page> diff --git a/help/C/index.page b/help/C/index.page index 068226625..a57596560 100644 --- a/help/C/index.page +++ b/help/C/index.page @@ -1,5 +1,6 @@ <page xmlns="http://projectmallard.org/1.0/" type="guide" + style="2column" id="index"> <info> diff --git a/help/C/introduction.page b/help/C/introduction.page index 58311b17b..ab3a65298 100644 --- a/help/C/introduction.page +++ b/help/C/introduction.page @@ -37,10 +37,12 @@ share your desktop in just two clicks. </p> - <p> - <media type="image" src="figures/empathy-main-window.png" mime="image/png"> + <figure> + <title><gui>Contact List</gui> window</title> + <desc><app>Empathy</app> main window</desc> + <media type="image" src="figures/empathy-main-window.png" mime="image/png" style="right"> <app>Empathy</app> main window. </media> - </p> + </figure> </page> diff --git a/help/C/irc-account.page b/help/C/irc-account.page index 1f81eb593..dd43fbb97 100644 --- a/help/C/irc-account.page +++ b/help/C/irc-account.page @@ -118,7 +118,7 @@ and type the new name. </p> - <note> + <note style="tip"> <p> If you want to use different networks at the same time, you need to create an account with each one of the networks you want to use. diff --git a/help/C/irc-join-room.page b/help/C/irc-join-room.page index c196f2055..8461b1de1 100644 --- a/help/C/irc-join-room.page +++ b/help/C/irc-join-room.page @@ -46,7 +46,7 @@ </item> </steps> - <note> + <note style="tip"> <p> To join multiple rooms, you need to repeat the steps above for each room. </p> diff --git a/help/C/send-file.page b/help/C/send-file.page index 65ac170d3..960d0cc46 100644 --- a/help/C/send-file.page +++ b/help/C/send-file.page @@ -51,19 +51,34 @@ </item> <item> <p> - The <gui>File Transfers</gui> window will appear. Wait for your contact to accept the - file transfer, or click <gui>Stop</gui> to halt the transfer. + The <gui>File Transfers</gui> window will appear. + </p> + <p> + Wait for your contact to accept the file transfer, or click + <gui>Stop</gui> to halt the transfer. + </p> + </item> + <item> + <p> + Once the transfer is finished, it is possible to close the <gui>File Transfers</gui> + window. </p> </item> </steps> + <note style="tip"> + <p> + If you have multiple finished transfers listed in the window, click on + <gui>Clear</gui> to empty the list. This will only remove the files from the + list and will not delete them from your computer. + </p> + </note> <note> <p> It is possible to send files only using the following services: <em>Jabber</em>, <em>Google Talk</em> and <em>Salut</em>. </p> </note> - <note> <p> In order to send a file to someone, you need to be connected to the Internet, or to @@ -71,19 +86,4 @@ </p> </note> - <p> - If your contact accepts the file transfer, you can watch the progress of the - transfer and see the estimated amount of time remaining before it is complete. - </p> - <p> - If they do not accept it, the status of the transfer will change to <gui>File - transfer cancelled</gui>, and the file will not be sent. - </p> - <p> - Once a transfer is finished, you can close the <gui>File Transfers</gui> - window. If you have multiple finished transfers listed in the window, click on - <gui>Clear</gui> to empty the list. This will only remove the files from the - list and will not delete them from your computer. - </p> - </page> diff --git a/help/C/set-custom-status.page b/help/C/set-custom-status.page index 2fe944085..6b9dabe50 100644 --- a/help/C/set-custom-status.page +++ b/help/C/set-custom-status.page @@ -154,7 +154,7 @@ </item> </steps> - <note> + <note style="tip"> <p> When you edit or add a new custom message, it will not be set as the current status message. You will need to select it from the <gui>Contact List</gui> window. diff --git a/help/C/share-desktop.page b/help/C/share-desktop.page index b855a47f6..06a3d7c40 100644 --- a/help/C/share-desktop.page +++ b/help/C/share-desktop.page @@ -29,7 +29,7 @@ help your contacts resolve a problem. </p> - <note> + <note style="tip"> <p> In order to be able to share your desktop or to remotely use your contacts desktop, it is necessary to have a remote desktop viewer application installed in your system. diff --git a/help/C/video-call.page b/help/C/video-call.page index 412644b4f..6f918ee6e 100644 --- a/help/C/video-call.page +++ b/help/C/video-call.page @@ -55,7 +55,7 @@ </p> </item> </steps> - <note> + <note style="tip"> <p> To turn a video conversation into an audio one, from the call window deselect <guiseq><gui>Call</gui><gui>Send video</gui></guiseq>, diff --git a/help/Makefile.am b/help/Makefile.am index be149cd04..95b218a47 100644 --- a/help/Makefile.am +++ b/help/Makefile.am @@ -18,6 +18,7 @@ DOC_PAGES = \ change-status.page \ create-account.page \ disable-account.page \ + favorite-rooms.page \ geolocation.page \ geolocation-not-showing.page \ geolocation-privacy.page \ @@ -25,6 +26,7 @@ DOC_PAGES = \ geolocation-turn.page \ geolocation-what-is.page \ group-conversations.page \ + import-account.page \ index.page \ introduction.page \ irc-account.page \ diff --git a/libempathy-gtk/Makefile.am b/libempathy-gtk/Makefile.am index 4c80e9f98..fb7e431cd 100644 --- a/libempathy-gtk/Makefile.am +++ b/libempathy-gtk/Makefile.am @@ -26,6 +26,7 @@ lib_LTLIBRARIES = libempathy-gtk.la libempathy_gtk_handwritten_source = \ empathy-account-chooser.c \ empathy-account-widget.c \ + empathy-account-widget-private.h \ empathy-account-widget-irc.c \ empathy-account-widget-sip.c \ empathy-avatar-chooser.c \ @@ -53,7 +54,7 @@ libempathy_gtk_handwritten_source = \ empathy-log-window.c \ empathy-new-message-dialog.c \ empathy-presence-chooser.c \ - empathy-profile-chooser.c \ + empathy-protocol-chooser.c \ empathy-smiley-manager.c \ empathy-sound.c \ empathy-spell.c \ @@ -115,7 +116,7 @@ libempathy_gtk_headers = \ empathy-log-window.h \ empathy-new-message-dialog.h \ empathy-presence-chooser.h \ - empathy-profile-chooser.h \ + empathy-protocol-chooser.h \ empathy-smiley-manager.h \ empathy-sound.h \ empathy-spell.h \ @@ -145,7 +146,7 @@ ui_DATA = \ empathy-account-widget-jabber.ui \ empathy-account-widget-msn.ui \ empathy-account-widget-sip.ui \ - empathy-account-widget-salut.ui \ + empathy-account-widget-local-xmpp.ui \ empathy-account-widget-irc.ui \ empathy-account-widget-icq.ui \ empathy-account-widget-yahoo.ui \ diff --git a/libempathy-gtk/empathy-account-chooser.c b/libempathy-gtk/empathy-account-chooser.c index 34ebc7eac..a91b0eb29 100644 --- a/libempathy-gtk/empathy-account-chooser.c +++ b/libempathy-gtk/empathy-account-chooser.c @@ -29,8 +29,6 @@ #include <glib/gi18n-lib.h> #include <gtk/gtk.h> -#include <libmissioncontrol/mission-control.h> - #include <libempathy/empathy-account-manager.h> #include <libempathy/empathy-utils.h> @@ -547,7 +545,7 @@ account_chooser_find_account_foreach (GtkTreeModel *model, gtk_tree_model_get (model, iter, COL_ACCOUNT_POINTER, &account, -1); - if (empathy_account_equal (account, data->account)) { + if (account == data->account) { data->found = TRUE; *(data->iter) = *iter; g_object_unref (account); @@ -617,7 +615,7 @@ account_chooser_update_iter (EmpathyAccountChooser *chooser, COL_ACCOUNT_POINTER, &account, -1); - icon_name = empathy_icon_name_from_account (account); + icon_name = empathy_account_get_icon_name (account); if (priv->filter) { is_enabled = priv->filter (account, priv->filter_data); } @@ -690,10 +688,8 @@ account_chooser_set_account_foreach (GtkTreeModel *model, if ((data->account == NULL) != (account == NULL)) { equal = FALSE; } - else if (data->account == account) { - equal = TRUE; - } else { - equal = empathy_account_equal (data->account, account); + else { + equal = (data->account == account); } if (account) { @@ -779,7 +775,7 @@ empathy_account_chooser_filter_is_connected (EmpathyAccount *account, { TpConnectionStatus status; - g_object_get (account, "status", &status, NULL); + g_object_get (account, "connection-status", &status, NULL); return status == TP_CONNECTION_STATUS_CONNECTED; } diff --git a/libempathy-gtk/empathy-account-widget-aim.ui b/libempathy-gtk/empathy-account-widget-aim.ui index 7f7ac3a60..2dfdde216 100644 --- a/libempathy-gtk/empathy-account-widget-aim.ui +++ b/libempathy-gtk/empathy-account-widget-aim.ui @@ -15,7 +15,7 @@ <child> <object class="GtkTable" id="table_common_settings"> <property name="visible">True</property> - <property name="n_rows">2</property> + <property name="n_rows">3</property> <property name="n_columns">3</property> <property name="column_spacing">12</property> <property name="row_spacing">6</property> @@ -28,8 +28,8 @@ <property name="mnemonic_widget">entry_password</property> </object> <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> <property name="x_options">GTK_FILL</property> <property name="y_options"></property> </packing> @@ -63,8 +63,8 @@ <packing> <property name="left_attach">2</property> <property name="right_attach">3</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> <property name="x_options"></property> <property name="y_options"></property> </packing> @@ -91,9 +91,30 @@ <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <object class="GtkLabel" id="label_username_example"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xpad">3</property> + <property name="label" translatable="yes"><span size="small"><b>Example:</b> MyScreenName</span></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> - <property name="y_options"></property> </packing> </child> </object> @@ -190,4 +211,92 @@ </packing> </child> </object> + <object class="GtkVBox" id="vbox_aim_simple"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label_screenname_simple"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">What is your AIM screen name?</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="xscale">0.34999999403953552</property> + <property name="yscale">0.34999999403953552</property> + <property name="bottom_padding">3</property> + <property name="left_padding">12</property> + <child> + <object class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">4</property> + <child> + <object class="GtkEntry" id="entry_screenname_simple"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">•</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_example"> + <property name="visible">True</property> + <property name="xalign">0.10000000149011612</property> + <property name="label" translatable="yes"><span size="small"><b>Example:</b> MyScreenName</span></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_password_simple"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">What is your AIM password?</property> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment2"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="xscale">0.34999999403953552</property> + <property name="yscale">0.34999999403953552</property> + <property name="left_padding">12</property> + <child> + <object class="GtkEntry" id="entry_password_simple"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="visibility">False</property> + <property name="invisible_char">•</property> + </object> + </child> + </object> + <packing> + <property name="position">3</property> + </packing> + </child> + </object> </interface> diff --git a/libempathy-gtk/empathy-account-widget-generic.ui b/libempathy-gtk/empathy-account-widget-generic.ui index 649307e06..ae97f3c98 100644 --- a/libempathy-gtk/empathy-account-widget-generic.ui +++ b/libempathy-gtk/empathy-account-widget-generic.ui @@ -29,7 +29,7 @@ </packing> </child> <child> - <object class="GtkExpander" id="expander1"> + <object class="GtkExpander" id="expander_advanced_settings"> <property name="visible">True</property> <property name="can_focus">True</property> <child> diff --git a/libempathy-gtk/empathy-account-widget-groupwise.ui b/libempathy-gtk/empathy-account-widget-groupwise.ui index 84157527d..d8ce768f9 100644 --- a/libempathy-gtk/empathy-account-widget-groupwise.ui +++ b/libempathy-gtk/empathy-account-widget-groupwise.ui @@ -14,7 +14,7 @@ <child> <object class="GtkTable" id="table_common_groupwise_settings"> <property name="visible">True</property> - <property name="n_rows">2</property> + <property name="n_rows">3</property> <property name="n_columns">2</property> <property name="column_spacing">6</property> <property name="row_spacing">6</property> @@ -56,8 +56,8 @@ <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> <property name="y_options"></property> </packing> </child> @@ -69,8 +69,8 @@ <property name="use_underline">True</property> </object> <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> <property name="x_options">GTK_FILL</property> <property name="y_options"></property> </packing> @@ -100,6 +100,24 @@ <property name="y_options"></property> </packing> </child> + <child> + <placeholder/> + </child> + <child> + <object class="GtkLabel" id="label_username_example"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xpad">3</property> + <property name="label" translatable="yes"><span size="small"><b>Example:</b> username</span></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> </object> <packing> <property name="expand">False</property> @@ -194,4 +212,92 @@ </packing> </child> </object> + <object class="GtkVBox" id="vbox_groupwise_simple"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label_id_simple"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">What is your GroupWise User ID?</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="xscale">0.34999999403953552</property> + <property name="yscale">0.34999999403953552</property> + <property name="bottom_padding">3</property> + <property name="left_padding">12</property> + <child> + <object class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">4</property> + <child> + <object class="GtkEntry" id="entry_id_simple"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">•</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_example"> + <property name="visible">True</property> + <property name="xalign">0.10000000149011612</property> + <property name="label" translatable="yes"><span size="small"><b>Example:</b> username</span></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_password_simple"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">What is your GroupWise password?</property> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment2"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="xscale">0.34999999403953552</property> + <property name="yscale">0.34999999403953552</property> + <property name="left_padding">12</property> + <child> + <object class="GtkEntry" id="entry_password_simple"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="visibility">False</property> + <property name="invisible_char">•</property> + </object> + </child> + </object> + <packing> + <property name="position">3</property> + </packing> + </child> + </object> </interface> diff --git a/libempathy-gtk/empathy-account-widget-icq.ui b/libempathy-gtk/empathy-account-widget-icq.ui index 5eab0b75b..a36698a09 100644 --- a/libempathy-gtk/empathy-account-widget-icq.ui +++ b/libempathy-gtk/empathy-account-widget-icq.ui @@ -15,7 +15,7 @@ <child> <object class="GtkTable" id="table_common_settings"> <property name="visible">True</property> - <property name="n_rows">2</property> + <property name="n_rows">3</property> <property name="n_columns">3</property> <property name="column_spacing">12</property> <property name="row_spacing">6</property> @@ -28,8 +28,8 @@ <property name="mnemonic_widget">entry_password</property> </object> <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> <property name="x_options">GTK_FILL</property> <property name="y_options"></property> </packing> @@ -63,8 +63,8 @@ <packing> <property name="left_attach">2</property> <property name="right_attach">3</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> <property name="x_options"></property> <property name="y_options"></property> </packing> @@ -91,9 +91,30 @@ <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <object class="GtkLabel" id="label_username_example"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xpad">3</property> + <property name="label" translatable="yes"><span size="small"><b>Example:</b> 123456789</span></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> - <property name="y_options"></property> </packing> </child> </object> @@ -219,4 +240,92 @@ </packing> </child> </object> + <object class="GtkVBox" id="vbox_icq_simple"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label_uin_simple"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">What is your ICQ UIN?</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="xscale">0.34999999403953552</property> + <property name="yscale">0.34999999403953552</property> + <property name="bottom_padding">3</property> + <property name="left_padding">12</property> + <child> + <object class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">4</property> + <child> + <object class="GtkEntry" id="entry_uin_simple"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">•</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_example"> + <property name="visible">True</property> + <property name="xalign">0.10000000149011612</property> + <property name="label" translatable="yes"><span size="small"><b>Example:</b> 123456789</span></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_password_simple"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">What is your ICQ password?</property> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment2"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="xscale">0.34999999403953552</property> + <property name="yscale">0.34999999403953552</property> + <property name="left_padding">12</property> + <child> + <object class="GtkEntry" id="entry_password_simple"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="visibility">False</property> + <property name="invisible_char">•</property> + </object> + </child> + </object> + <packing> + <property name="position">3</property> + </packing> + </child> + </object> </interface> diff --git a/libempathy-gtk/empathy-account-widget-irc.c b/libempathy-gtk/empathy-account-widget-irc.c index c0699b23a..e462aa611 100644 --- a/libempathy-gtk/empathy-account-widget-irc.c +++ b/libempathy-gtk/empathy-account-widget-irc.c @@ -27,13 +27,12 @@ #include <glib/gi18n-lib.h> #include <gtk/gtk.h> -#include <libmissioncontrol/mc-protocol.h> - #include <libempathy/empathy-utils.h> #include <libempathy/empathy-irc-network-manager.h> #include "empathy-irc-network-dialog.h" #include "empathy-account-widget.h" +#include "empathy-account-widget-private.h" #include "empathy-account-widget-irc.h" #include "empathy-ui-utils.h" @@ -43,7 +42,7 @@ #define IRC_NETWORKS_FILENAME "irc-networks.xml" typedef struct { - EmpathyAccount *account; + EmpathyAccountWidget *self; EmpathyIrcNetworkManager *network_manager; GtkWidget *vbox_settings; @@ -61,17 +60,19 @@ account_widget_irc_destroy_cb (GtkWidget *widget, EmpathyAccountWidgetIrc *settings) { g_object_unref (settings->network_manager); - g_object_unref (settings->account); g_slice_free (EmpathyAccountWidgetIrc, settings); } static void unset_server_params (EmpathyAccountWidgetIrc *settings) { + EmpathyAccountSettings *ac_settings; + + g_object_get (settings->self, "settings", &ac_settings, NULL); DEBUG ("Unset server, port and use-ssl"); - empathy_account_unset_param (settings->account, "server"); - empathy_account_unset_param (settings->account, "port"); - empathy_account_unset_param (settings->account, "use-ssl"); + empathy_account_settings_unset (ac_settings, "server"); + empathy_account_settings_unset (ac_settings, "port"); + empathy_account_settings_unset (ac_settings, "use-ssl"); } static void @@ -82,6 +83,9 @@ update_server_params (EmpathyAccountWidgetIrc *settings) EmpathyIrcNetwork *network; GSList *servers; gchar *charset; + EmpathyAccountSettings *ac_settings; + + g_object_get (settings->self, "settings", &ac_settings, NULL); if (!gtk_combo_box_get_active_iter ( GTK_COMBO_BOX (settings->combobox_network), &iter)) @@ -97,7 +101,7 @@ update_server_params (EmpathyAccountWidgetIrc *settings) g_object_get (network, "charset", &charset, NULL); DEBUG ("Setting charset to %s", charset); - empathy_account_set_param_string (settings->account, "charset", charset); + empathy_account_settings_set_string (ac_settings, "charset", charset); g_free (charset); servers = empathy_irc_network_get_servers (network); @@ -116,11 +120,11 @@ update_server_params (EmpathyAccountWidgetIrc *settings) NULL); DEBUG ("Setting server to %s", address); - empathy_account_set_param_string (settings->account, "server", address); + empathy_account_settings_set_string (ac_settings, "server", address); DEBUG ("Setting port to %u", port); - empathy_account_set_param_int (settings->account, "port", port); + empathy_account_settings_set_uint32 (ac_settings, "port", port); DEBUG ("Setting use-ssl to %s", ssl ? "TRUE": "FALSE" ); - empathy_account_set_param_boolean (settings->account, "use-ssl", ssl); + empathy_account_settings_set_boolean (ac_settings, "use-ssl", ssl); g_free (address); } @@ -323,25 +327,30 @@ fill_networks_model (EmpathyAccountWidgetIrc *settings, static void account_widget_irc_setup (EmpathyAccountWidgetIrc *settings) { - gchar *nick = NULL; - gchar *fullname = NULL; - gchar *server = NULL; + const gchar *nick = NULL; + const gchar *fullname = NULL; + const gchar *server = NULL; gint port = 6667; - gchar *charset; + const gchar *charset; gboolean ssl = FALSE; EmpathyIrcNetwork *network = NULL; + EmpathyAccountSettings *ac_settings; + + g_object_get (settings->self, "settings", &ac_settings, NULL); - nick = empathy_account_get_param_string (settings->account, "account"); - fullname = empathy_account_get_param_string (settings->account, "fullname"); - server = empathy_account_get_param_string (settings->account, "server"); - charset = empathy_account_get_param_string (settings->account, "charset"); - port = empathy_account_get_param_int (settings->account, "port"); - ssl = empathy_account_get_param_boolean (settings->account, "use-ssl"); + nick = empathy_account_settings_get_string (ac_settings, "account"); + fullname = empathy_account_settings_get_string (ac_settings, + "fullname"); + server = empathy_account_settings_get_string (ac_settings, "server"); + charset = empathy_account_settings_get_string (ac_settings, "charset"); + port = empathy_account_settings_get_uint32 (ac_settings, "port"); + ssl = empathy_account_settings_get_boolean (ac_settings, "use-ssl"); if (!nick) { nick = g_strdup (g_get_user_name ()); - empathy_account_set_param_string (settings->account, "account", nick); + empathy_account_settings_set_string (ac_settings, + "account", nick); } if (!fullname) @@ -351,7 +360,8 @@ account_widget_irc_setup (EmpathyAccountWidgetIrc *settings) { fullname = g_strdup (nick); } - empathy_account_set_param_string (settings->account, "fullname", fullname); + empathy_account_settings_set_string (ac_settings, + "fullname", fullname); } if (server != NULL) @@ -404,33 +414,20 @@ account_widget_irc_setup (EmpathyAccountWidgetIrc *settings) fill_networks_model (settings, network); - - g_free (nick); - g_free (fullname); - g_free (server); - g_free (charset); } -/** - * empathy_account_widget_irc_new: - * @account: the #EmpathyAccount to configure - * - * Creates a new IRC account widget to configure a given #EmpathyAccount - * - * Returns: The toplevel container of the configuration widget - */ -GtkWidget * -empathy_account_widget_irc_new (EmpathyAccount *account) +void +empathy_account_widget_irc_build (EmpathyAccountWidget *self, + const char *filename, + GtkWidget **table_common_settings) { EmpathyAccountWidgetIrc *settings; gchar *dir, *user_file_with_path, *global_file_with_path; - GtkBuilder *gui; GtkListStore *store; GtkCellRenderer *renderer; - gchar *filename; settings = g_slice_new0 (EmpathyAccountWidgetIrc); - settings->account = g_object_ref (account); + settings->self = self; dir = g_build_filename (g_get_user_config_dir (), PACKAGE_NAME, NULL); g_mkdir_with_parents (dir, S_IRUSR | S_IWUSR | S_IXUSR); @@ -453,13 +450,12 @@ empathy_account_widget_irc_new (EmpathyAccount *account) g_free (global_file_with_path); g_free (user_file_with_path); - filename = empathy_file_lookup ("empathy-account-widget-irc.ui", - "libempathy-gtk"); - gui = empathy_builder_get_file (filename, - "vbox_irc_settings", &settings->vbox_settings, + self->ui_details->gui = empathy_builder_get_file (filename, + "table_irc_settings", table_common_settings, + "vbox_irc", &self->ui_details->widget, + "table_irc_settings", &settings->vbox_settings, "combobox_network", &settings->combobox_network, NULL); - g_free (filename); /* Fill the networks combobox */ store = gtk_list_store_new (2, G_TYPE_OBJECT, G_TYPE_STRING); @@ -483,22 +479,24 @@ empathy_account_widget_irc_new (EmpathyAccount *account) account_widget_irc_setup (settings); - empathy_account_widget_handle_params (account, gui, + empathy_account_widget_handle_params (self, "entry_nick", "account", "entry_fullname", "fullname", "entry_password", "password", "entry_quit_message", "quit-message", NULL); - empathy_builder_connect (gui, settings, - "vbox_irc_settings", "destroy", account_widget_irc_destroy_cb, - "button_network", "clicked", account_widget_irc_button_edit_network_clicked_cb, - "button_add_network", "clicked", account_widget_irc_button_add_network_clicked_cb, - "button_remove_network", "clicked", account_widget_irc_button_remove_clicked_cb, - "combobox_network", "changed", account_widget_irc_combobox_network_changed_cb, + empathy_builder_connect (self->ui_details->gui, settings, + "table_irc_settings", "destroy", account_widget_irc_destroy_cb, + "button_network", "clicked", + account_widget_irc_button_edit_network_clicked_cb, + "button_add_network", "clicked", + account_widget_irc_button_add_network_clicked_cb, + "button_remove_network", "clicked", + account_widget_irc_button_remove_clicked_cb, + "combobox_network", "changed", + account_widget_irc_combobox_network_changed_cb, NULL); - empathy_account_widget_set_default_focus (gui, "entry_nick"); - - return empathy_builder_unref_and_keep_widget (gui, settings->vbox_settings); + self->ui_details->default_focus = g_strdup ("entry_nick"); } diff --git a/libempathy-gtk/empathy-account-widget-irc.h b/libempathy-gtk/empathy-account-widget-irc.h index 40e58bbc3..022158529 100644 --- a/libempathy-gtk/empathy-account-widget-irc.h +++ b/libempathy-gtk/empathy-account-widget-irc.h @@ -22,11 +22,13 @@ #define __EMPATHY_ACCOUNT_WIDGET_IRC_H__ #include <gtk/gtk.h> -#include <libempathy/empathy-account.h> +#include <libempathy-gtk/empathy-account-widget.h> G_BEGIN_DECLS -GtkWidget * empathy_account_widget_irc_new (EmpathyAccount *account); +void empathy_account_widget_irc_build (EmpathyAccountWidget *self, + const char *filename, + GtkWidget **table_common_settings); G_END_DECLS diff --git a/libempathy-gtk/empathy-account-widget-irc.ui b/libempathy-gtk/empathy-account-widget-irc.ui index abb1c9362..a4f7faa7f 100644 --- a/libempathy-gtk/empathy-account-widget-irc.ui +++ b/libempathy-gtk/empathy-account-widget-irc.ui @@ -255,207 +255,216 @@ <action-widget response="-7">button_close</action-widget> </action-widgets> </object> - <object class="GtkTable" id="vbox_irc_settings"> + <object class="GtkVBox" id="vbox_irc"> <property name="visible">True</property> - <property name="n_rows">5</property> - <property name="n_columns">2</property> - <property name="column_spacing">12</property> - <property name="row_spacing">6</property> + <property name="orientation">vertical</property> <child> - <object class="GtkEntry" id="entry_quit_message"> + <object class="GtkTable" id="table_irc_settings"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="invisible_char">●</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label_quit_message"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Quit message:</property> - </object> - <packing> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkEntry" id="entry_fullname"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="invisible_char">●</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkEntry" id="entry_password"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="visibility">False</property> - <property name="invisible_char">●</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label_password"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Password:</property> - </object> - <packing> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label_fullname"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Real name:</property> - </object> - <packing> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkEntry" id="entry_nick"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="invisible_char">●</property> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label_nick"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Nickname:</property> - <property name="use_underline">True</property> - <property name="mnemonic_widget">entry_nick</property> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkHBox" id="hbox174"> - <property name="visible">True</property> - <property name="spacing">2</property> + <property name="n_rows">5</property> + <property name="n_columns">2</property> + <property name="column_spacing">12</property> + <property name="row_spacing">6</property> <child> - <object class="GtkComboBox" id="combobox_network"> + <object class="GtkEntry" id="entry_quit_message"> <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> </object> <packing> - <property name="position">0</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="y_options"></property> </packing> </child> <child> - <object class="GtkButton" id="button_add_network"> + <object class="GtkLabel" id="label_quit_message"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Quit message:</property> + </object> + <packing> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkEntry" id="entry_fullname"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="receives_default">True</property> - <child> - <object class="GtkImage" id="image2"> - <property name="visible">True</property> - <property name="stock">gtk-add</property> - </object> - </child> + <property name="invisible_char">●</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="y_options"></property> </packing> </child> <child> - <object class="GtkButton" id="button_network"> + <object class="GtkEntry" id="entry_password"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="receives_default">True</property> - <child> - <object class="GtkImage" id="image834"> - <property name="visible">True</property> - <property name="stock">gtk-edit</property> - </object> - </child> + <property name="visibility">False</property> + <property name="invisible_char">●</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">2</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_password"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Password:</property> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_fullname"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Real name:</property> + </object> + <packing> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> </packing> </child> <child> - <object class="GtkButton" id="button_remove_network"> + <object class="GtkEntry" id="entry_nick"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="receives_default">True</property> + <property name="invisible_char">●</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_nick"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Nickname:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">entry_nick</property> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox174"> + <property name="visible">True</property> + <property name="spacing">2</property> + <child> + <object class="GtkComboBox" id="combobox_network"> + <property name="visible">True</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="button_add_network"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <child> + <object class="GtkImage" id="image2"> + <property name="visible">True</property> + <property name="stock">gtk-add</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> <child> - <object class="GtkImage" id="image835"> + <object class="GtkButton" id="button_network"> <property name="visible">True</property> - <property name="stock">gtk-remove</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <child> + <object class="GtkImage" id="image834"> + <property name="visible">True</property> + <property name="stock">gtk-edit</property> + </object> + </child> </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkButton" id="button_remove_network"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <child> + <object class="GtkImage" id="image835"> + <property name="visible">True</property> + <property name="stock">gtk-remove</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> </child> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">3</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_network2"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Network:</property> + <property name="use_underline">True</property> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> </packing> </child> </object> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label_network2"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Network:</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> + <property name="position">0</property> </packing> </child> </object> diff --git a/libempathy-gtk/empathy-account-widget-jabber.ui b/libempathy-gtk/empathy-account-widget-jabber.ui index 4b0aa15ad..d32182257 100644 --- a/libempathy-gtk/empathy-account-widget-jabber.ui +++ b/libempathy-gtk/empathy-account-widget-jabber.ui @@ -21,7 +21,7 @@ <child> <object class="GtkTable" id="table_common_settings"> <property name="visible">True</property> - <property name="n_rows">2</property> + <property name="n_rows">3</property> <property name="n_columns">3</property> <property name="column_spacing">12</property> <property name="row_spacing">6</property> @@ -35,8 +35,8 @@ <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> <property name="y_options"></property> </packing> </child> @@ -81,8 +81,8 @@ <packing> <property name="left_attach">2</property> <property name="right_attach">3</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> <property name="x_options">GTK_FILL</property> <property name="y_options"></property> </packing> @@ -93,15 +93,37 @@ <property name="xalign">0</property> <property name="label" translatable="yes">Pass_word:</property> <property name="use_underline">True</property> + <property name="justify">right</property> <property name="mnemonic_widget">entry_password</property> </object> <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> <property name="x_options">GTK_FILL</property> <property name="y_options"></property> </packing> </child> + <child> + <object class="GtkLabel" id="label_username_example"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xpad">3</property> + <property name="label" translatable="yes"><span size="small"><b>Example:</b> user@jabber.org</span></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> </object> <packing> <property name="expand">False</property> @@ -114,7 +136,7 @@ <property name="visible">True</property> <property name="can_focus">True</property> <child> - <object class="GtkVBox" id="vbox1"> + <object class="GtkVBox" id="vbox_advanced"> <property name="visible">True</property> <property name="orientation">vertical</property> <child> @@ -227,7 +249,7 @@ <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> - <object class="GtkAlignment" id="alignment1"> + <object class="GtkAlignment" id="alignment_server_settings"> <property name="visible">True</property> <property name="left_padding">12</property> <child> @@ -348,4 +370,112 @@ </packing> </child> </object> + <object class="GtkVBox" id="vbox_jabber_simple"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkLabel" id="label_id_simple"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">What is your Jabber ID?</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_id_create"> + <property name="xalign">0</property> + <property name="label" translatable="yes">What is your desired Jabber ID?</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment_simple_jabber_id"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="xscale">0.34999999403953552</property> + <property name="yscale">0.34999999403953552</property> + <property name="top_padding">6</property> + <property name="bottom_padding">3</property> + <property name="left_padding">12</property> + <child> + <object class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">4</property> + <child> + <object class="GtkEntry" id="entry_id_simple"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">•</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_example"> + <property name="visible">True</property> + <property name="xalign">0.10000000149011612</property> + <property name="label" translatable="yes"><span size="small"><b>Example:</b> user@jabber.org</span></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_password_simple"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="ypad">6</property> + <property name="label" translatable="yes">What is your Jabber password?</property> + </object> + <packing> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_password_create"> + <property name="xalign">0</property> + <property name="ypad">6</property> + <property name="label" translatable="yes">What is your desired Jabber password?</property> + </object> + <packing> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment2"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="xscale">0.34999999403953552</property> + <property name="yscale">0.5</property> + <property name="left_padding">12</property> + <child> + <object class="GtkEntry" id="entry_password_simple"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="visibility">False</property> + <property name="invisible_char">•</property> + </object> + </child> + </object> + <packing> + <property name="position">5</property> + </packing> + </child> + </object> </interface> diff --git a/libempathy-gtk/empathy-account-widget-salut.ui b/libempathy-gtk/empathy-account-widget-local-xmpp.ui index ca633309d..ca633309d 100644 --- a/libempathy-gtk/empathy-account-widget-salut.ui +++ b/libempathy-gtk/empathy-account-widget-local-xmpp.ui diff --git a/libempathy-gtk/empathy-account-widget-msn.ui b/libempathy-gtk/empathy-account-widget-msn.ui index 1d7bde038..27de65a2a 100644 --- a/libempathy-gtk/empathy-account-widget-msn.ui +++ b/libempathy-gtk/empathy-account-widget-msn.ui @@ -14,7 +14,7 @@ <child> <object class="GtkTable" id="table_common_msn_settings"> <property name="visible">True</property> - <property name="n_rows">2</property> + <property name="n_rows">3</property> <property name="n_columns">2</property> <property name="column_spacing">6</property> <property name="row_spacing">6</property> @@ -56,8 +56,8 @@ <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> <property name="y_options"></property> </packing> </child> @@ -69,8 +69,8 @@ <property name="use_underline">True</property> </object> <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> <property name="x_options">GTK_FILL</property> <property name="y_options"></property> </packing> @@ -100,6 +100,24 @@ <property name="y_options"></property> </packing> </child> + <child> + <placeholder/> + </child> + <child> + <object class="GtkLabel" id="label_username_example"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xpad">3</property> + <property name="label" translatable="yes"><span size="small"><b>Example:</b> user@hotmail.com</span></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + </packing> + </child> </object> <packing> <property name="expand">False</property> @@ -194,4 +212,92 @@ </packing> </child> </object> + <object class="GtkVBox" id="vbox_msn_simple"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label_id_simple"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">What is your Windows Live user name?</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="xscale">0.34999999403953552</property> + <property name="yscale">0.34999999403953552</property> + <property name="bottom_padding">3</property> + <property name="left_padding">12</property> + <child> + <object class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">4</property> + <child> + <object class="GtkEntry" id="entry_id_simple"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">•</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_example"> + <property name="visible">True</property> + <property name="xalign">0.10000000149011612</property> + <property name="label" translatable="yes"><span size="small"><b>Example:</b> user@hotmail.com</span></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_password_simple"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">What is your Windows Live password?</property> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment2"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="xscale">0.34999999403953552</property> + <property name="yscale">0.34999999403953552</property> + <property name="left_padding">12</property> + <child> + <object class="GtkEntry" id="entry_password_simple"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="visibility">False</property> + <property name="invisible_char">•</property> + </object> + </child> + </object> + <packing> + <property name="position">3</property> + </packing> + </child> + </object> </interface> diff --git a/libempathy-gtk/empathy-account-widget-private.h b/libempathy-gtk/empathy-account-widget-private.h new file mode 100644 index 000000000..b7ebe2be1 --- /dev/null +++ b/libempathy-gtk/empathy-account-widget-private.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2009 Collabora Ltd. + * + * 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 St, Fifth Floor, + * Boston, MA 02110-1301 USA + * + * Authors: Cosimo Cecchi <cosimo.cecchi@collabora.co.uk> + */ + +#ifndef __EMPATHY_ACCOUNT_WIDGET_PRIVATE_H__ +#define __EMPATHY_ACCOUNT_WIDGET_PRIVATE_H__ + +#include <libempathy-gtk/empathy-account-widget.h> +#include <glib.h> +#include <gtk/gtk.h> + +G_BEGIN_DECLS + +struct _EmpathyAccountWidgetUIDetails { + GtkWidget *widget; + + GtkBuilder *gui; + + char *default_focus; + gboolean add_forget; +}; + + +void empathy_account_widget_handle_params (EmpathyAccountWidget *self, + const gchar *first_widget, + ...); + +G_END_DECLS + +#endif /* __EMPATHY_ACCOUNT_WIDGET_PRIVATE_H__ */ diff --git a/libempathy-gtk/empathy-account-widget-sip.c b/libempathy-gtk/empathy-account-widget-sip.c index 05e917e53..db39ddae4 100644 --- a/libempathy-gtk/empathy-account-widget-sip.c +++ b/libempathy-gtk/empathy-account-widget-sip.c @@ -28,17 +28,15 @@ #include <glib/gi18n-lib.h> #include <gtk/gtk.h> -#include <libmissioncontrol/mc-protocol.h> - #include <libempathy/empathy-utils.h> #include "empathy-account-widget.h" +#include "empathy-account-widget-private.h" #include "empathy-account-widget-sip.h" #include "empathy-ui-utils.h" typedef struct { - EmpathyAccount *account; - + EmpathyAccountWidget *self; GtkWidget *vbox_settings; GtkWidget *entry_stun_server; @@ -50,7 +48,6 @@ static void account_widget_sip_destroy_cb (GtkWidget *widget, EmpathyAccountWidgetSip *settings) { - g_object_unref (settings->account); g_slice_free (EmpathyAccountWidgetSip, settings); } @@ -66,55 +63,65 @@ account_widget_sip_discover_stun_toggled_cb ( gtk_widget_set_sensitive (settings->spinbutton_stun_part, !active); } -/** - * empathy_account_widget_sip_new: - * @account: the #EmpathyAccount to configure - * - * Creates a new SIP account widget to configure a given #EmpathyAccount - * - * Returns: The toplevel container of the configuration widget - */ -GtkWidget * -empathy_account_widget_sip_new (EmpathyAccount *account) +void +empathy_account_widget_sip_build (EmpathyAccountWidget *self, + const char *filename, + GtkWidget **table_common_settings) { EmpathyAccountWidgetSip *settings; - GtkBuilder *gui; - gchar *filename; - - settings = g_slice_new0 (EmpathyAccountWidgetSip); - settings->account = g_object_ref (account); - - filename = empathy_file_lookup ("empathy-account-widget-sip.ui", - "libempathy-gtk"); - gui = empathy_builder_get_file (filename, - "vbox_sip_settings", &settings->vbox_settings, - "entry_stun-server", &settings->entry_stun_server, - "spinbutton_stun-port", &settings->spinbutton_stun_part, - "checkbutton_discover-stun", &settings->checkbutton_discover_stun, - NULL); - g_free (filename); - - empathy_account_widget_handle_params (account, gui, - "entry_userid", "account", - "entry_password", "password", - "checkbutton_discover-stun", "discover-stun", - "entry_stun-server", "stun-server", - "spinbutton_stun-port", "stun-port", - NULL); - - empathy_account_widget_add_forget_button (account, gui, - "button_forget", - "entry_password"); - - account_widget_sip_discover_stun_toggled_cb (settings->checkbutton_discover_stun, - settings); - - empathy_builder_connect (gui, settings, - "vbox_sip_settings", "destroy", account_widget_sip_destroy_cb, - "checkbutton_discover-stun", "toggled", account_widget_sip_discover_stun_toggled_cb, - NULL); - - empathy_account_widget_set_default_focus (gui, "entry_userid"); - - return empathy_builder_unref_and_keep_widget (gui, settings->vbox_settings); + GtkWidget *vbox_settings; + gboolean is_simple; + + g_object_get (self, "simple", &is_simple, NULL); + + if (is_simple) + { + self->ui_details->gui = empathy_builder_get_file (filename, + "vbox_sip_simple", &vbox_settings, + NULL); + + empathy_account_widget_handle_params (self, + "entry_userid_simple", "account", + "entry_password_simple", "password", + NULL); + + self->ui_details->default_focus = g_strdup ("entry_userid_simple"); + } + else + { + settings = g_slice_new0 (EmpathyAccountWidgetSip); + settings->self = self; + + self->ui_details->gui = empathy_builder_get_file (filename, + "table_common_settings", table_common_settings, + "vbox_sip_settings", &vbox_settings, + "entry_stun-server", &settings->entry_stun_server, + "spinbutton_stun-port", &settings->spinbutton_stun_part, + "checkbutton_discover-stun", &settings->checkbutton_discover_stun, + NULL); + settings->vbox_settings = vbox_settings; + + empathy_account_widget_handle_params (self, + "entry_userid", "account", + "entry_password", "password", + "checkbutton_discover-stun", "discover-stun", + "entry_stun-server", "stun-server", + "spinbutton_stun-port", "stun-port", + NULL); + + account_widget_sip_discover_stun_toggled_cb ( + settings->checkbutton_discover_stun, + settings); + + empathy_builder_connect (self->ui_details->gui, settings, + "vbox_sip_settings", "destroy", account_widget_sip_destroy_cb, + "checkbutton_discover-stun", "toggled", + account_widget_sip_discover_stun_toggled_cb, + NULL); + + self->ui_details->add_forget = TRUE; + self->ui_details->default_focus = g_strdup ("entry_userid"); + } + + self->ui_details->widget = vbox_settings; } diff --git a/libempathy-gtk/empathy-account-widget-sip.h b/libempathy-gtk/empathy-account-widget-sip.h index 69f60aacc..6334a745b 100644 --- a/libempathy-gtk/empathy-account-widget-sip.h +++ b/libempathy-gtk/empathy-account-widget-sip.h @@ -22,11 +22,13 @@ #define __EMPATHY_ACCOUNT_WIDGET_SIP_H__ #include <gtk/gtk.h> -#include <libempathy/empathy-account.h> +#include <libempathy-gtk/empathy-account-widget.h> G_BEGIN_DECLS -GtkWidget * empathy_account_widget_sip_new (EmpathyAccount *account); +void empathy_account_widget_sip_build (EmpathyAccountWidget *self, + const char *filename, + GtkWidget **table_common_settings); G_END_DECLS diff --git a/libempathy-gtk/empathy-account-widget-sip.ui b/libempathy-gtk/empathy-account-widget-sip.ui index 406f22c94..e8491a6a5 100644 --- a/libempathy-gtk/empathy-account-widget-sip.ui +++ b/libempathy-gtk/empathy-account-widget-sip.ui @@ -11,9 +11,9 @@ <property name="visible">True</property> <property name="orientation">vertical</property> <child> - <object class="GtkTable" id="table1"> + <object class="GtkTable" id="table_common_settings"> <property name="visible">True</property> - <property name="n_rows">2</property> + <property name="n_rows">3</property> <property name="n_columns">2</property> <property name="column_spacing">12</property> <property name="row_spacing">6</property> @@ -26,8 +26,8 @@ <property name="mnemonic_widget">entry_password</property> </object> <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> <property name="x_options">GTK_FILL</property> <property name="y_options"></property> </packing> @@ -92,9 +92,27 @@ <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <placeholder/> + </child> + <child> + <object class="GtkLabel" id="label_username_example"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xpad">3</property> + <property name="label" translatable="yes"><span size="small"><b>Example:</b> user@my.sip.server</span></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> - <property name="y_options"></property> </packing> </child> </object> @@ -109,7 +127,7 @@ <property name="visible">True</property> <property name="can_focus">True</property> <child> - <object class="GtkAlignment" id="alignment1"> + <object class="GtkAlignment" id="alignment3"> <property name="visible">True</property> <property name="xalign">0</property> <property name="left_padding">12</property> @@ -212,4 +230,92 @@ </packing> </child> </object> + <object class="GtkVBox" id="vbox_sip_simple"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label_userid_simple"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">What is your SIP login ID?</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="xscale">0.34999999403953552</property> + <property name="yscale">0.34999999403953552</property> + <property name="bottom_padding">3</property> + <property name="left_padding">12</property> + <child> + <object class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">4</property> + <child> + <object class="GtkEntry" id="entry_userid_simple"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">•</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_example"> + <property name="visible">True</property> + <property name="xalign">0.10000000149011612</property> + <property name="label" translatable="yes"><span size="small"><b>Example:</b> user@my.sip.server</span></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_password_simple"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">What is your SIP account password?</property> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment2"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="xscale">0.34999999403953552</property> + <property name="yscale">0.34999999403953552</property> + <property name="left_padding">12</property> + <child> + <object class="GtkEntry" id="entry_password_simple"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="visibility">False</property> + <property name="invisible_char">•</property> + </object> + </child> + </object> + <packing> + <property name="position">3</property> + </packing> + </child> + </object> </interface> diff --git a/libempathy-gtk/empathy-account-widget-yahoo.ui b/libempathy-gtk/empathy-account-widget-yahoo.ui index 31e932674..554e0dbec 100644 --- a/libempathy-gtk/empathy-account-widget-yahoo.ui +++ b/libempathy-gtk/empathy-account-widget-yahoo.ui @@ -16,7 +16,7 @@ <child> <object class="GtkTable" id="table_common_settings"> <property name="visible">True</property> - <property name="n_rows">2</property> + <property name="n_rows">3</property> <property name="n_columns">3</property> <property name="column_spacing">12</property> <property name="row_spacing">6</property> @@ -29,8 +29,8 @@ <property name="mnemonic_widget">entry_password</property> </object> <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> <property name="x_options">GTK_FILL</property> <property name="y_options"></property> </packing> @@ -51,8 +51,8 @@ <packing> <property name="left_attach">2</property> <property name="right_attach">3</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> <property name="x_options">GTK_FILL</property> <property name="y_options"></property> </packing> @@ -92,9 +92,30 @@ <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <object class="GtkLabel" id="label_username_example"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xpad">3</property> + <property name="label" translatable="yes"><span size="small"><b>Example:</b> username</span></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> - <property name="y_options"></property> </packing> </child> </object> @@ -294,4 +315,92 @@ </packing> </child> </object> + <object class="GtkVBox" id="vbox_yahoo_simple"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label_id_simple"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">What is your Yahoo! ID?</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="xscale">0.34999999403953552</property> + <property name="yscale">0.34999999403953552</property> + <property name="bottom_padding">3</property> + <property name="left_padding">12</property> + <child> + <object class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">4</property> + <child> + <object class="GtkEntry" id="entry_id_simple"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">•</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_example"> + <property name="visible">True</property> + <property name="xalign">0.10000000149011612</property> + <property name="label" translatable="yes"><span size="small"><b>Example:</b> username</span></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_password_simple"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">What is your Yahoo! password?</property> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment2"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="xscale">0.34999999403953552</property> + <property name="yscale">0.34999999403953552</property> + <property name="left_padding">12</property> + <child> + <object class="GtkEntry" id="entry_password_simple"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="visibility">False</property> + <property name="invisible_char">•</property> + </object> + </child> + </object> + <packing> + <property name="position">3</property> + </packing> + </child> + </object> </interface> diff --git a/libempathy-gtk/empathy-account-widget.c b/libempathy-gtk/empathy-account-widget.c index 0c2c35177..0927d109c 100644 --- a/libempathy-gtk/empathy-account-widget.c +++ b/libempathy-gtk/empathy-account-widget.c @@ -1,7 +1,6 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* * Copyright (C) 2006-2007 Imendio AB - * Copyright (C) 2007-2008 Collabora Ltd. + * Copyright (C) 2007-2009 Collabora Ltd. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -20,6 +19,8 @@ * * Authors: Xavier Claessens <xclaesse@gmail.com> * Martyn Russell <martyn@imendio.com> + * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk> + * Jonathan Tellier <jonathan.tellier@gmail.com> */ #include <config.h> @@ -29,702 +30,1385 @@ #include <gtk/gtk.h> #include <glib/gi18n-lib.h> -#include <libmissioncontrol/mc-protocol.h> - #include <libempathy/empathy-utils.h> #include <libempathy/empathy-account.h> +#include <telepathy-glib/connection-manager.h> +#include <telepathy-glib/util.h> +#include <dbus/dbus-protocol.h> + #include "empathy-account-widget.h" +#include "empathy-account-widget-private.h" +#include "empathy-account-widget-sip.h" +#include "empathy-account-widget-irc.h" #include "empathy-ui-utils.h" #define DEBUG_FLAG EMPATHY_DEBUG_ACCOUNT #include <libempathy/empathy-debug.h> -static gboolean -account_widget_entry_focus_cb (GtkWidget *widget, - GdkEventFocus *event, - EmpathyAccount *account) -{ - const gchar *str; - const gchar *param_name; - - str = gtk_entry_get_text (GTK_ENTRY (widget)); - param_name = g_object_get_data (G_OBJECT (widget), "param_name"); - - if (EMP_STR_EMPTY (str)) { - gchar *value = NULL; - - empathy_account_unset_param (account, param_name); - value = empathy_account_get_param_string (account, param_name); - DEBUG ("Unset %s and restore to %s", param_name, value); - gtk_entry_set_text (GTK_ENTRY (widget), value ? value : ""); - g_free (value); - } else { - McProfile *profile; - const gchar *domain = NULL; - gchar *dup_str = NULL; - - profile = empathy_account_get_profile (account); - if (mc_profile_get_capabilities (profile) & - MC_PROFILE_CAPABILITY_SPLIT_ACCOUNT) { - domain = mc_profile_get_default_account_domain (profile); - } - - if (domain && !strstr (str, "@") && - strcmp (param_name, "account") == 0) { - DEBUG ("Adding @%s suffix to account", domain); - str = dup_str = g_strconcat (str, "@", domain, NULL); - gtk_entry_set_text (GTK_ENTRY (widget), str); - } - DEBUG ("Setting %s to %s", param_name, - strstr (param_name, "password") ? "***" : str); - empathy_account_set_param_string (account, param_name, str); - g_free (dup_str); - g_object_unref (profile); - } - - return FALSE; +G_DEFINE_TYPE (EmpathyAccountWidget, empathy_account_widget, G_TYPE_OBJECT) + +typedef struct { + char *protocol; + EmpathyAccountSettings *settings; + + GtkWidget *table_common_settings; + GtkWidget *apply_button; + GtkWidget *cancel_button; + GtkWidget *entry_password; + GtkWidget *button_forget; + GtkWidget *spinbutton_port; + GtkWidget *enabled_checkbox; + + gboolean simple; + + /* An EmpathyAccountWidget can be used to either create an account or + * modify it. When we are creating an account, this member is set to TRUE */ + gboolean creating_account; + + /* After having applied changes to a user account, we automatically + * disconnect him. Once he's disconnected, he will be reconnected, + * depending on the value of this member which should be set to the checked + * state of the "Enabled" checkbox. This is done so the new information + * entered by the user is validated on the server. */ + gboolean re_enable_accound; + + gboolean dispose_run; +} EmpathyAccountWidgetPriv; + +enum { + PROP_PROTOCOL = 1, + PROP_SETTINGS, + PROP_SIMPLE, + PROP_CREATING_ACCOUNT +}; + +enum { + HANDLE_APPLY, + ACCOUNT_CREATED, + CANCELLED, + LAST_SIGNAL +}; + +static guint signals[LAST_SIGNAL] = { 0 }; + +#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyAccountWidget) +#define CHANGED_TIMEOUT 300 + +static void +account_widget_set_control_buttons_sensitivity (EmpathyAccountWidget *self, + gboolean sensitive) +{ + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); + + if (!priv->simple) + { + gtk_widget_set_sensitive (priv->apply_button, sensitive); + gtk_widget_set_sensitive (priv->cancel_button, sensitive); + } } static void -account_widget_int_changed_cb (GtkWidget *widget, - EmpathyAccount *account) +account_widget_handle_control_buttons_sensitivity (EmpathyAccountWidget *self) { - const gchar *param_name; - gint value; + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); + gboolean is_valid; - value = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widget)); - param_name = g_object_get_data (G_OBJECT (widget), "param_name"); + is_valid = empathy_account_settings_is_valid (priv->settings); - if (value == 0) { - empathy_account_unset_param (account, param_name); - value = empathy_account_get_param_int (account, param_name); - DEBUG ("Unset %s and restore to %d", param_name, value); - gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), value); - } else { - DEBUG ("Setting %s to %d", param_name, value); - empathy_account_set_param_int (account, param_name, value); - } + if (!priv->simple) + { + gtk_widget_set_sensitive (priv->apply_button, is_valid); + gtk_widget_set_sensitive (priv->cancel_button, is_valid); + } + + g_signal_emit (self, signals[HANDLE_APPLY], 0, is_valid); } static void -account_widget_checkbutton_toggled_cb (GtkWidget *widget, - EmpathyAccount *account) +account_widget_entry_changed_common (EmpathyAccountWidget *self, + GtkEntry *entry, gboolean focus) +{ + const gchar *str; + const gchar *param_name; + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); + + str = gtk_entry_get_text (entry); + param_name = g_object_get_data (G_OBJECT (entry), "param_name"); + + if (EMP_STR_EMPTY (str)) + { + const gchar *value = NULL; + + empathy_account_settings_unset (priv->settings, param_name); + + if (focus) + { + value = empathy_account_settings_get_string (priv->settings, + param_name); + DEBUG ("Unset %s and restore to %s", param_name, value); + gtk_entry_set_text (entry, value ? value : ""); + } + } + else + { + DEBUG ("Setting %s to %s", param_name, + tp_strdiff (param_name, "password") ? str : "***"); + empathy_account_settings_set_string (priv->settings, param_name, str); + } +} + +static gboolean +account_widget_entry_focus_cb (GtkWidget *widget, + GdkEventFocus *event, + EmpathyAccountWidget *self) { - gboolean value; - gboolean default_value; - const gchar *param_name; + account_widget_entry_changed_common (self, GTK_ENTRY (widget), TRUE); - value = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); - param_name = g_object_get_data (G_OBJECT (widget), "param_name"); + return FALSE; +} + +static void +account_widget_entry_changed_cb (GtkEditable *entry, + EmpathyAccountWidget *self) +{ + account_widget_entry_changed_common (self, GTK_ENTRY (entry), FALSE); + account_widget_handle_control_buttons_sensitivity (self); +} - /* FIXME: This is ugly! checkbox don't have a "not-set" value so we - * always unset the param and set the value if different from the - * default value. */ - empathy_account_unset_param (account, param_name); - default_value = empathy_account_get_param_boolean (account, param_name); +static void +account_widget_int_changed_cb (GtkWidget *widget, + EmpathyAccountWidget *self) +{ + const gchar *param_name; + gint value; + const gchar *signature; + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); + + value = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widget)); + param_name = g_object_get_data (G_OBJECT (widget), "param_name"); + + signature = empathy_account_settings_get_dbus_signature (priv->settings, + param_name); + g_return_if_fail (signature != NULL); + + DEBUG ("Setting %s to %d", param_name, value); + + switch ((int)*signature) + { + case DBUS_TYPE_INT16: + case DBUS_TYPE_INT32: + empathy_account_settings_set_int32 (priv->settings, param_name, value); + break; + case DBUS_TYPE_INT64: + empathy_account_settings_set_int64 (priv->settings, param_name, value); + break; + case DBUS_TYPE_UINT16: + case DBUS_TYPE_UINT32: + empathy_account_settings_set_uint32 (priv->settings, param_name, value); + break; + case DBUS_TYPE_UINT64: + empathy_account_settings_set_uint64 (priv->settings, param_name, value); + break; + default: + g_return_if_reached (); + } + + account_widget_handle_control_buttons_sensitivity (self); +} - if (default_value == value) { - DEBUG ("Unset %s and restore to %d", param_name, default_value); - } else { - DEBUG ("Setting %s to %d", param_name, value); - empathy_account_set_param_boolean (account, param_name, value); - } +static void +account_widget_checkbutton_toggled_cb (GtkWidget *widget, + EmpathyAccountWidget *self) +{ + gboolean value; + gboolean default_value; + const gchar *param_name; + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); + + value = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); + param_name = g_object_get_data (G_OBJECT (widget), "param_name"); + + /* FIXME: This is ugly! checkbox don't have a "not-set" value so we + * always unset the param and set the value if different from the + * default value. */ + empathy_account_settings_unset (priv->settings, param_name); + default_value = empathy_account_settings_get_boolean (priv->settings, + param_name); + + if (default_value == value) + { + DEBUG ("Unset %s and restore to %d", param_name, default_value); + } + else + { + DEBUG ("Setting %s to %d", param_name, value); + empathy_account_settings_set_boolean (priv->settings, param_name, value); + } + + account_widget_handle_control_buttons_sensitivity (self); } static void account_widget_forget_clicked_cb (GtkWidget *button, - GtkWidget *entry) + EmpathyAccountWidget *self) { - EmpathyAccount *account; - const gchar *param_name; + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); + const gchar *param_name; - param_name = g_object_get_data (G_OBJECT (entry), "param_name"); - account = g_object_get_data (G_OBJECT (entry), "account"); + param_name = g_object_get_data (G_OBJECT (priv->entry_password), + "param_name"); - DEBUG ("Unset %s", param_name); - empathy_account_unset_param (account, param_name); - gtk_entry_set_text (GTK_ENTRY (entry), ""); + DEBUG ("Unset %s", param_name); + empathy_account_settings_unset (priv->settings, param_name); + gtk_entry_set_text (GTK_ENTRY (priv->entry_password), ""); + + account_widget_handle_control_buttons_sensitivity (self); } static void account_widget_password_changed_cb (GtkWidget *entry, - GtkWidget *button) + EmpathyAccountWidget *self) { - const gchar *str; + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); + const gchar *str; - str = gtk_entry_get_text (GTK_ENTRY (entry)); - gtk_widget_set_sensitive (button, !EMP_STR_EMPTY (str)); + str = gtk_entry_get_text (GTK_ENTRY (entry)); + gtk_widget_set_sensitive (priv->button_forget, !EMP_STR_EMPTY (str)); } static void account_widget_jabber_ssl_toggled_cb (GtkWidget *checkbutton_ssl, - GtkWidget *spinbutton_port) + EmpathyAccountWidget *self) +{ + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); + gboolean value; + gint32 port = 0; + + value = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbutton_ssl)); + port = empathy_account_settings_get_uint32 (priv->settings, "port"); + + if (value) + { + if (port == 5222 || port == 0) + port = 5223; + } + else + { + if (port == 5223 || port == 0) + port = 5222; + } + + gtk_spin_button_set_value (GTK_SPIN_BUTTON (priv->spinbutton_port), port); +} + +static void +account_widget_setup_widget (EmpathyAccountWidget *self, + GtkWidget *widget, + const gchar *param_name) +{ + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); + + g_object_set_data_full (G_OBJECT (widget), "param_name", + g_strdup (param_name), g_free); + + if (GTK_IS_SPIN_BUTTON (widget)) + { + gint value = 0; + const gchar *signature; + + signature = empathy_account_settings_get_dbus_signature (priv->settings, + param_name); + g_return_if_fail (signature != NULL); + + switch ((int)*signature) + { + case DBUS_TYPE_INT16: + case DBUS_TYPE_INT32: + value = empathy_account_settings_get_int32 (priv->settings, + param_name); + break; + case DBUS_TYPE_INT64: + value = empathy_account_settings_get_int64 (priv->settings, + param_name); + break; + case DBUS_TYPE_UINT16: + case DBUS_TYPE_UINT32: + value = empathy_account_settings_get_uint32 (priv->settings, + param_name); + break; + case DBUS_TYPE_UINT64: + value = empathy_account_settings_get_uint64 (priv->settings, + param_name); + break; + default: + g_return_if_reached (); + } + + gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), value); + + g_signal_connect (widget, "value-changed", + G_CALLBACK (account_widget_int_changed_cb), + self); + } + else if (GTK_IS_ENTRY (widget)) + { + const gchar *str = NULL; + + str = empathy_account_settings_get_string (priv->settings, param_name); + gtk_entry_set_text (GTK_ENTRY (widget), str ? str : ""); + + if (strstr (param_name, "password")) + { + gtk_entry_set_visibility (GTK_ENTRY (widget), FALSE); + } + + g_signal_connect (widget, "focus-out-event", + G_CALLBACK (account_widget_entry_focus_cb), + self); + g_signal_connect (widget, "changed", + G_CALLBACK (account_widget_entry_changed_cb), self); + } + else if (GTK_IS_TOGGLE_BUTTON (widget)) + { + gboolean value = FALSE; + + value = empathy_account_settings_get_boolean (priv->settings, + param_name); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), value); + + g_signal_connect (widget, "toggled", + G_CALLBACK (account_widget_checkbutton_toggled_cb), + self); + } + else + { + DEBUG ("Unknown type of widget for param %s", param_name); + } +} + +static gchar * +account_widget_generic_format_param_name (const gchar *param_name) { - EmpathyAccount *account; - gboolean value; - gint port = 0; + gchar *str; + gchar *p; + + str = g_strdup (param_name); + + if (str && g_ascii_isalpha (str[0])) + str[0] = g_ascii_toupper (str[0]); - value = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbutton_ssl)); - account = g_object_get_data (G_OBJECT (spinbutton_port), "account"); - port = empathy_account_get_param_int (account, "port"); + while ((p = strchr (str, '-')) != NULL) + { + if (p[1] != '\0' && g_ascii_isalpha (p[1])) + { + p[0] = ' '; + p[1] = g_ascii_toupper (p[1]); + } - if (value) { - if (port == 5222 || port == 0) { - port = 5223; - } - } else { - if (port == 5223 || port == 0) { - port = 5222; - } - } + p++; + } - gtk_spin_button_set_value (GTK_SPIN_BUTTON (spinbutton_port), port); + return str; } static void -account_widget_setup_widget (GtkWidget *widget, - EmpathyAccount *account, - const gchar *param_name) +accounts_widget_generic_setup (EmpathyAccountWidget *self, + GtkWidget *table_common_settings, + GtkWidget *table_advanced_settings) { - g_object_set_data_full (G_OBJECT (widget), "param_name", - g_strdup (param_name), g_free); - g_object_set_data_full (G_OBJECT (widget), "account", - g_object_ref (account), g_object_unref); - - if (GTK_IS_SPIN_BUTTON (widget)) { - gint value = 0; - - value = empathy_account_get_param_int (account, param_name); - gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), value); + TpConnectionManagerParam *params, *param; + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); + + params = empathy_account_settings_get_tp_params (priv->settings); + + for (param = params; param != NULL && param->name != NULL; param++) + { + GtkWidget *table_settings; + guint n_rows = 0; + GtkWidget *widget = NULL; + gchar *param_name_formatted; + + if (param->flags & TP_CONN_MGR_PARAM_FLAG_REQUIRED) + table_settings = table_common_settings; + else if (priv->simple) + return; + else + table_settings = table_advanced_settings; + + param_name_formatted = account_widget_generic_format_param_name + (param->name); + g_object_get (table_settings, "n-rows", &n_rows, NULL); + gtk_table_resize (GTK_TABLE (table_settings), ++n_rows, 2); + + if (param->dbus_signature[0] == 's') + { + gchar *str; + + str = g_strdup_printf (_("%s:"), param_name_formatted); + widget = gtk_label_new (str); + gtk_misc_set_alignment (GTK_MISC (widget), 0, 0.5); + g_free (str); + + gtk_table_attach (GTK_TABLE (table_settings), + widget, + 0, 1, + n_rows - 1, n_rows, + GTK_FILL, 0, + 0, 0); + gtk_widget_show (widget); + + widget = gtk_entry_new (); + if (strcmp (param->name, "account") == 0) + { + g_signal_connect (widget, "realize", + G_CALLBACK (gtk_widget_grab_focus), + NULL); + } + gtk_table_attach (GTK_TABLE (table_settings), + widget, + 1, 2, + n_rows - 1, n_rows, + GTK_FILL | GTK_EXPAND, 0, + 0, 0); + gtk_widget_show (widget); + } + /* int types: ynqiuxt. double type is 'd' */ + else if (param->dbus_signature[0] == 'y' || + param->dbus_signature[0] == 'n' || + param->dbus_signature[0] == 'q' || + param->dbus_signature[0] == 'i' || + param->dbus_signature[0] == 'u' || + param->dbus_signature[0] == 'x' || + param->dbus_signature[0] == 't' || + param->dbus_signature[0] == 'd') + { + gchar *str = NULL; + gdouble minint = 0; + gdouble maxint = 0; + gdouble step = 1; + + switch (param->dbus_signature[0]) + { + case 'y': minint = G_MININT8; maxint = G_MAXINT8; break; + case 'n': minint = G_MININT16; maxint = G_MAXINT16; break; + case 'q': minint = 0; maxint = G_MAXUINT16; break; + case 'i': minint = G_MININT32; maxint = G_MAXINT32; break; + case 'u': minint = 0; maxint = G_MAXUINT32; break; + case 'x': minint = G_MININT64; maxint = G_MAXINT64; break; + case 't': minint = 0; maxint = G_MAXUINT64; break; + case 'd': minint = G_MININT32; maxint = G_MAXINT32; + step = 0.1; break; + } + + str = g_strdup_printf (_("%s:"), param_name_formatted); + widget = gtk_label_new (str); + gtk_misc_set_alignment (GTK_MISC (widget), 0, 0.5); + g_free (str); + + gtk_table_attach (GTK_TABLE (table_settings), + widget, + 0, 1, + n_rows - 1, n_rows, + GTK_FILL, 0, + 0, 0); + gtk_widget_show (widget); + + widget = gtk_spin_button_new_with_range (minint, maxint, step); + gtk_table_attach (GTK_TABLE (table_settings), + widget, + 1, 2, + n_rows - 1, n_rows, + GTK_FILL | GTK_EXPAND, 0, + 0, 0); + gtk_widget_show (widget); + } + else if (param->dbus_signature[0] == 'b') + { + widget = gtk_check_button_new_with_label (param_name_formatted); + gtk_table_attach (GTK_TABLE (table_settings), + widget, + 0, 2, + n_rows - 1, n_rows, + GTK_FILL | GTK_EXPAND, 0, + 0, 0); + gtk_widget_show (widget); + } + else + { + DEBUG ("Unknown signature for param %s: %s", + param_name_formatted, param->dbus_signature); + } + + if (widget) + account_widget_setup_widget (self, widget, param->name); + + g_free (param_name_formatted); + } +} - g_signal_connect (widget, "value-changed", - G_CALLBACK (account_widget_int_changed_cb), - account); - } - else if (GTK_IS_ENTRY (widget)) { - gchar *str = NULL; +static void +account_widget_handle_params_valist (EmpathyAccountWidget *self, + const gchar *first_widget, + va_list args) +{ + GObject *object; + const gchar *name; - str = empathy_account_get_param_string (account, param_name); - gtk_entry_set_text (GTK_ENTRY (widget), str ? str : ""); - g_free (str); + for (name = first_widget; name; name = va_arg (args, const gchar *)) + { + const gchar *param_name; - if (strstr (param_name, "password")) { - gtk_entry_set_visibility (GTK_ENTRY (widget), FALSE); - } + param_name = va_arg (args, const gchar *); + object = gtk_builder_get_object (self->ui_details->gui, name); - g_signal_connect (widget, "focus-out-event", - G_CALLBACK (account_widget_entry_focus_cb), - account); - } - else if (GTK_IS_TOGGLE_BUTTON (widget)) { - gboolean value = FALSE; + if (!object) + { + g_warning ("Builder is missing object '%s'.", name); + continue; + } - value = empathy_account_get_param_boolean (account, param_name); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), value); + account_widget_setup_widget (self, GTK_WIDGET (object), param_name); + } +} - g_signal_connect (widget, "toggled", - G_CALLBACK (account_widget_checkbutton_toggled_cb), - account); - } else { - DEBUG ("Unknown type of widget for param %s", param_name); - } +static void +account_widget_cancel_clicked_cb (GtkWidget *button, + EmpathyAccountWidget *self) +{ + g_signal_emit (self, signals[CANCELLED], 0); } -static gchar * -account_widget_generic_format_param_name (const gchar *param_name) +static void +account_widget_account_enabled_cb (GObject *source_object, + GAsyncResult *res, + gpointer user_data) { - gchar *str; - gchar *p; - - str = g_strdup (param_name); - - if (str && g_ascii_isalpha (str[0])) { - str[0] = g_ascii_toupper (str[0]); - } - - while ((p = strchr (str, '-')) != NULL) { - if (p[1] != '\0' && g_ascii_isalpha (p[1])) { - p[0] = ' '; - p[1] = g_ascii_toupper (p[1]); - } - - p++; - } - - return str; -} - -static void -accounts_widget_generic_setup (EmpathyAccount *account, - GtkWidget *table_common_settings, - GtkWidget *table_advanced_settings) -{ - McProtocol *protocol; - McProfile *profile; - GSList *params, *l; - - profile = empathy_account_get_profile (account); - protocol = mc_profile_get_protocol (profile); - - if (!protocol) { - /* The CM is not installed, MC shouldn't list them - * see SF bug #1688779 - * FIXME: We should display something asking the user to - * install the CM - */ - g_object_unref (profile); - return; - } - - params = mc_protocol_get_params (protocol); - - for (l = params; l; l = l->next) { - McProtocolParam *param; - GtkWidget *table_settings; - guint n_rows = 0; - GtkWidget *widget = NULL; - gchar *param_name_formatted; - - param = l->data; - if (param->flags & MC_PROTOCOL_PARAM_REQUIRED) { - table_settings = table_common_settings; - } else { - table_settings = table_advanced_settings; - } - param_name_formatted = account_widget_generic_format_param_name (param->name); - g_object_get (table_settings, "n-rows", &n_rows, NULL); - gtk_table_resize (GTK_TABLE (table_settings), ++n_rows, 2); - - if (param->signature[0] == 's') { - gchar *str; - - str = g_strdup_printf (_("%s:"), param_name_formatted); - widget = gtk_label_new (str); - gtk_misc_set_alignment (GTK_MISC (widget), 0, 0.5); - g_free (str); - - gtk_table_attach (GTK_TABLE (table_settings), - widget, - 0, 1, - n_rows - 1, n_rows, - GTK_FILL, 0, - 0, 0); - gtk_widget_show (widget); - - widget = gtk_entry_new (); - if (strcmp (param->name, "account") == 0) { - g_signal_connect (widget, "realize", - G_CALLBACK (gtk_widget_grab_focus), - NULL); - } - gtk_table_attach (GTK_TABLE (table_settings), - widget, - 1, 2, - n_rows - 1, n_rows, - GTK_FILL | GTK_EXPAND, 0, - 0, 0); - gtk_widget_show (widget); - } - /* int types: ynqiuxt. double type is 'd' */ - else if (param->signature[0] == 'y' || - param->signature[0] == 'n' || - param->signature[0] == 'q' || - param->signature[0] == 'i' || - param->signature[0] == 'u' || - param->signature[0] == 'x' || - param->signature[0] == 't' || - param->signature[0] == 'd') { - gchar *str = NULL; - gdouble minint = 0; - gdouble maxint = 0; - gdouble step = 1; - - switch (param->signature[0]) { - case 'y': minint = G_MININT8; maxint = G_MAXINT8; break; - case 'n': minint = G_MININT16; maxint = G_MAXINT16; break; - case 'q': minint = 0; maxint = G_MAXUINT16; break; - case 'i': minint = G_MININT32; maxint = G_MAXINT32; break; - case 'u': minint = 0; maxint = G_MAXUINT32; break; - case 'x': minint = G_MININT64; maxint = G_MAXINT64; break; - case 't': minint = 0; maxint = G_MAXUINT64; break; - case 'd': minint = G_MININT32; maxint = G_MAXINT32; step = 0.1; break; - } - - str = g_strdup_printf (_("%s:"), param_name_formatted); - widget = gtk_label_new (str); - gtk_misc_set_alignment (GTK_MISC (widget), 0, 0.5); - g_free (str); - - gtk_table_attach (GTK_TABLE (table_settings), - widget, - 0, 1, - n_rows - 1, n_rows, - GTK_FILL, 0, - 0, 0); - gtk_widget_show (widget); - - widget = gtk_spin_button_new_with_range (minint, maxint, step); - gtk_table_attach (GTK_TABLE (table_settings), - widget, - 1, 2, - n_rows - 1, n_rows, - GTK_FILL | GTK_EXPAND, 0, - 0, 0); - gtk_widget_show (widget); - } - else if (param->signature[0] == 'b') { - widget = gtk_check_button_new_with_label (param_name_formatted); - gtk_table_attach (GTK_TABLE (table_settings), - widget, - 0, 2, - n_rows - 1, n_rows, - GTK_FILL | GTK_EXPAND, 0, - 0, 0); - gtk_widget_show (widget); - } else { - DEBUG ("Unknown signature for param %s: %s", - param_name_formatted, param->signature); - } - - if (widget) { - account_widget_setup_widget (widget, account, param->name); - } - - g_free (param_name_formatted); - } - - mc_protocol_free_params_list (params); - g_object_unref (profile); - g_object_unref (protocol); -} - -static void -account_widget_handle_params_valist (EmpathyAccount *account, - GtkBuilder *gui, - const gchar *first_widget, - va_list args) -{ - GObject *object; - const gchar *name; - - for (name = first_widget; name; name = va_arg (args, const gchar *)) { - const gchar *param_name; - - param_name = va_arg (args, const gchar *); - object = gtk_builder_get_object (gui, name); - - if (!object) { - g_warning ("Builder is missing object '%s'.", name); - continue; - } - - account_widget_setup_widget (GTK_WIDGET (object), account, param_name); - } + GError *error = NULL; + EmpathyAccount *account = EMPATHY_ACCOUNT (source_object); + EmpathyAccountWidget *widget = EMPATHY_ACCOUNT_WIDGET (user_data); + + empathy_account_set_enabled_finish (account, res, &error); + + if (error != NULL) + { + DEBUG ("Could not automatically enable new account: %s", error->message); + g_error_free (error); + } + else + { + g_signal_emit (widget, signals[ACCOUNT_CREATED], 0); + } } -void -empathy_account_widget_handle_params (EmpathyAccount *account, - GtkBuilder *gui, - const gchar *first_widget, - ...) +static void +account_widget_applied_cb (GObject *source_object, + GAsyncResult *res, + gpointer user_data) { - va_list args; + GError *error = NULL; + EmpathyAccount *account; + EmpathyAccountSettings *settings = EMPATHY_ACCOUNT_SETTINGS (source_object); + EmpathyAccountWidget *widget = EMPATHY_ACCOUNT_WIDGET (user_data); + EmpathyAccountWidgetPriv *priv = GET_PRIV (widget); + + empathy_account_settings_apply_finish (settings, res, &error); + + if (error != NULL) + { + DEBUG ("Could not apply changes to account: %s", error->message); + g_error_free (error); + return; + } + + account = empathy_account_settings_get_account (priv->settings); + + if (priv->creating_account) + { + /* By default, when an account is created, we enable it. */ + empathy_account_set_enabled_async (account, TRUE, + account_widget_account_enabled_cb, widget); + } + else if (account != NULL && priv->enabled_checkbox != NULL) + { + gboolean enabled_checked; + + enabled_checked = gtk_toggle_button_get_active ( + GTK_TOGGLE_BUTTON (priv->enabled_checkbox)); + + if (empathy_account_is_enabled (account)) + { + /* We want to disable the account (and possibly re-enable it) to make + * sure that the new settings are effective */ + priv->re_enable_accound = enabled_checked; + empathy_account_set_enabled_async (account, FALSE, NULL, NULL); + } + else + { + /* The account is already disable so we just enable it according + * to the value of the "Enabled" checkbox */ + empathy_account_set_enabled_async (account, enabled_checked, + NULL, NULL); + } + } + + account_widget_set_control_buttons_sensitivity (widget, FALSE); +} - g_return_if_fail (GTK_IS_BUILDER (gui)); +static void +account_widget_apply_clicked_cb (GtkWidget *button, + EmpathyAccountWidget *self) +{ + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); - va_start (args, first_widget); - account_widget_handle_params_valist (account, gui, first_widget, args); - va_end (args); + empathy_account_settings_apply_async (priv->settings, + account_widget_applied_cb, self); } -void -empathy_account_widget_add_forget_button (EmpathyAccount *account, - GtkBuilder *gui, - const gchar *button, - const gchar *entry) +static void +account_widget_setup_generic (EmpathyAccountWidget *self) { - GtkWidget *button_forget; - GtkWidget *entry_password; - gchar *password = NULL; + GtkWidget *table_common_settings; + GtkWidget *table_advanced_settings; - button_forget = GTK_WIDGET (gtk_builder_get_object (gui, button)); - entry_password = GTK_WIDGET (gtk_builder_get_object (gui, entry)); + table_common_settings = GTK_WIDGET (gtk_builder_get_object + (self->ui_details->gui, "table_common_settings")); + table_advanced_settings = GTK_WIDGET (gtk_builder_get_object + (self->ui_details->gui, "table_advanced_settings")); - password = empathy_account_get_param_string (account, "password"); - gtk_widget_set_sensitive (button_forget, !EMP_STR_EMPTY (password)); - g_free (password); + accounts_widget_generic_setup (self, table_common_settings, + table_advanced_settings); - g_signal_connect (button_forget, "clicked", - G_CALLBACK (account_widget_forget_clicked_cb), - entry_password); - g_signal_connect (entry_password, "changed", - G_CALLBACK (account_widget_password_changed_cb), - button_forget); + g_object_unref (self->ui_details->gui); } -void -empathy_account_widget_set_default_focus (GtkBuilder *gui, - const gchar *entry) +static void +account_widget_settings_ready_cb (EmpathyAccountSettings *settings, + GParamSpec *pspec, + gpointer user_data) { - GObject *default_focus_entry; + EmpathyAccountWidget *self = user_data; + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); - default_focus_entry = gtk_builder_get_object (gui, entry); - g_signal_connect (default_focus_entry, "realize", - G_CALLBACK (gtk_widget_grab_focus), - NULL); + if (empathy_account_settings_is_ready (priv->settings)) + account_widget_setup_generic (self); } -GtkWidget * -empathy_account_widget_generic_new (EmpathyAccount *account) +static void +account_widget_build_generic (EmpathyAccountWidget *self, + const char *filename) { - GtkBuilder *gui; - GtkWidget *widget; - GtkWidget *table_common_settings; - GtkWidget *table_advanced_settings; - gchar *filename; + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); + GtkWidget *expander_advanced; - filename = empathy_file_lookup ("empathy-account-widget-generic.ui", - "libempathy-gtk"); - gui = empathy_builder_get_file (filename, - "vbox_generic_settings", &widget, - "table_common_settings", &table_common_settings, - "table_advanced_settings", &table_advanced_settings, - NULL); - g_free (filename); + self->ui_details->gui = empathy_builder_get_file (filename, + "table_common_settings", &priv->table_common_settings, + "vbox_generic_settings", &self->ui_details->widget, + "expander_advanced_settings", &expander_advanced, + NULL); - accounts_widget_generic_setup (account, table_common_settings, table_advanced_settings); + if (priv->simple) + gtk_widget_hide (expander_advanced); - return empathy_builder_unref_and_keep_widget (gui, widget); + g_object_ref (self->ui_details->gui); + + if (empathy_account_settings_is_ready (priv->settings)) + account_widget_setup_generic (self); + else + g_signal_connect (priv->settings, "notify::ready", + G_CALLBACK (account_widget_settings_ready_cb), self); } -GtkWidget * -empathy_account_widget_salut_new (EmpathyAccount *account) +static void +account_widget_build_salut (EmpathyAccountWidget *self, + const char *filename) +{ + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); + + self->ui_details->gui = empathy_builder_get_file (filename, + "table_common_settings", &priv->table_common_settings, + "vbox_salut_settings", &self->ui_details->widget, + NULL); + + empathy_account_widget_handle_params (self, + "entry_published", "published-name", + "entry_nickname", "nickname", + "entry_first_name", "first-name", + "entry_last_name", "last-name", + "entry_email", "email", + "entry_jid", "jid", + NULL); + + self->ui_details->default_focus = g_strdup ("entry_nickname"); +} + +static void +account_widget_build_msn (EmpathyAccountWidget *self, + const char *filename) { - GtkBuilder *gui; - GtkWidget *widget; - gchar *filename; + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); + + if (priv->simple) + { + self->ui_details->gui = empathy_builder_get_file (filename, + "vbox_msn_simple", &self->ui_details->widget, + NULL); + + empathy_account_widget_handle_params (self, + "entry_id_simple", "account", + "entry_password_simple", "password", + NULL); + + self->ui_details->default_focus = g_strdup ("entry_id_simple"); + } + else + { + self->ui_details->gui = empathy_builder_get_file (filename, + "table_common_msn_settings", &priv->table_common_settings, + "vbox_msn_settings", &self->ui_details->widget, + NULL); + + empathy_account_widget_handle_params (self, + "entry_id", "account", + "entry_password", "password", + "entry_server", "server", + "spinbutton_port", "port", + NULL); + + self->ui_details->default_focus = g_strdup ("entry_id"); + self->ui_details->add_forget = TRUE; + } +} - filename = empathy_file_lookup ("empathy-account-widget-salut.ui", - "libempathy-gtk"); - gui = empathy_builder_get_file (filename, - "vbox_salut_settings", &widget, - NULL); - g_free (filename); +static void +account_widget_build_jabber (EmpathyAccountWidget *self, + const char *filename) +{ + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); + GtkWidget *spinbutton_port; + GtkWidget *checkbutton_ssl; + GtkWidget *label_id, *label_password; + GtkWidget *label_id_create, *label_password_create; + + if (priv->simple) + { + self->ui_details->gui = empathy_builder_get_file (filename, + "vbox_jabber_simple", &self->ui_details->widget, + "label_id_simple", &label_id, + "label_id_create", &label_id_create, + "label_password_simple", &label_password, + "label_password_create", &label_password_create, + NULL); + + if (empathy_account_settings_get_boolean (priv->settings, "register")) + { + gtk_widget_hide (label_id); + gtk_widget_hide (label_password); + gtk_widget_show (label_id_create); + gtk_widget_show (label_password_create); + } + + empathy_account_widget_handle_params (self, + "entry_id_simple", "account", + "entry_password_simple", "password", + NULL); + + self->ui_details->default_focus = g_strdup ("entry_id_simple"); + } + else + { + self->ui_details->gui = empathy_builder_get_file (filename, + "table_common_settings", &priv->table_common_settings, + "vbox_jabber_settings", &self->ui_details->widget, + "spinbutton_port", &spinbutton_port, + "checkbutton_ssl", &checkbutton_ssl, + NULL); + + empathy_account_widget_handle_params (self, + "entry_id", "account", + "entry_password", "password", + "entry_resource", "resource", + "entry_server", "server", + "spinbutton_port", "port", + "spinbutton_priority", "priority", + "checkbutton_ssl", "old-ssl", + "checkbutton_ignore_ssl_errors", "ignore-ssl-errors", + "checkbutton_encryption", "require-encryption", + NULL); + + self->ui_details->default_focus = g_strdup ("entry_id"); + self->ui_details->add_forget = TRUE; + priv->spinbutton_port = spinbutton_port; + + g_signal_connect (checkbutton_ssl, "toggled", + G_CALLBACK (account_widget_jabber_ssl_toggled_cb), + self); + } +} - empathy_account_widget_handle_params (account, gui, - "entry_published", "published-name", - "entry_nickname", "nickname", - "entry_first_name", "first-name", - "entry_last_name", "last-name", - "entry_email", "email", - "entry_jid", "jid", - NULL); +static void +account_widget_build_icq (EmpathyAccountWidget *self, + const char *filename) +{ + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); + GtkWidget *spinbutton_port; + + if (priv->simple) + { + self->ui_details->gui = empathy_builder_get_file (filename, + "vbox_icq_simple", &self->ui_details->widget, + NULL); + + empathy_account_widget_handle_params (self, + "entry_uin_simple", "account", + "entry_password_simple", "password", + NULL); + + self->ui_details->default_focus = g_strdup ("entry_uin_simple"); + } + else + { + self->ui_details->gui = empathy_builder_get_file (filename, + "table_common_settings", &priv->table_common_settings, + "vbox_icq_settings", &self->ui_details->widget, + "spinbutton_port", &spinbutton_port, + NULL); + + empathy_account_widget_handle_params (self, + "entry_uin", "account", + "entry_password", "password", + "entry_server", "server", + "spinbutton_port", "port", + "entry_charset", "charset", + NULL); + + self->ui_details->default_focus = g_strdup ("entry_uin"); + self->ui_details->add_forget = TRUE; + } +} - empathy_account_widget_set_default_focus (gui, "entry_nickname"); +static void +account_widget_build_aim (EmpathyAccountWidget *self, + const char *filename) +{ + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); + GtkWidget *spinbutton_port; + + if (priv->simple) + { + self->ui_details->gui = empathy_builder_get_file (filename, + "vbox_aim_simple", &self->ui_details->widget, + NULL); + + empathy_account_widget_handle_params (self, + "entry_screenname_simple", "account", + "entry_password_simple", "password", + NULL); + + self->ui_details->default_focus = g_strdup ("entry_screenname_simple"); + } + else + { + self->ui_details->gui = empathy_builder_get_file (filename, + "table_common_settings", &priv->table_common_settings, + "vbox_aim_settings", &self->ui_details->widget, + "spinbutton_port", &spinbutton_port, + NULL); + + empathy_account_widget_handle_params (self, + "entry_screenname", "account", + "entry_password", "password", + "entry_server", "server", + "spinbutton_port", "port", + NULL); + + self->ui_details->default_focus = g_strdup ("entry_screenname"); + self->ui_details->add_forget = TRUE; + } +} - return empathy_builder_unref_and_keep_widget (gui, widget); +static void +account_widget_build_yahoo (EmpathyAccountWidget *self, + const char *filename) +{ + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); + + if (priv->simple) + { + self->ui_details->gui = empathy_builder_get_file (filename, + "vbox_yahoo_simple", &self->ui_details->widget, + NULL); + + empathy_account_widget_handle_params (self, + "entry_id_simple", "account", + "entry_password_simple", "password", + NULL); + + self->ui_details->default_focus = g_strdup ("entry_id_simple"); + } + else + { + self->ui_details->gui = empathy_builder_get_file (filename, + "table_common_settings", &priv->table_common_settings, + "vbox_yahoo_settings", &self->ui_details->widget, + NULL); + + empathy_account_widget_handle_params (self, + "entry_id", "account", + "entry_password", "password", + "entry_server", "server", + "entry_locale", "room-list-locale", + "entry_charset", "charset", + "spinbutton_port", "port", + "checkbutton_yahoojp", "yahoojp", + "checkbutton_ignore_invites", "ignore-invites", + NULL); + + self->ui_details->default_focus = g_strdup ("entry_id"); + self->ui_details->add_forget = TRUE; + } } -GtkWidget * -empathy_account_widget_msn_new (EmpathyAccount *account) +static void +account_widget_build_groupwise (EmpathyAccountWidget *self, + const char *filename) { - GtkBuilder *gui; - GtkWidget *widget; - gchar *filename; + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); + + if (priv->simple) + { + self->ui_details->gui = empathy_builder_get_file (filename, + "vbox_groupwise_simple", &self->ui_details->widget, + NULL); + + empathy_account_widget_handle_params (self, + "entry_id_simple", "account", + "entry_password_simple", "password", + NULL); + + self->ui_details->default_focus = g_strdup ("entry_id_simple"); + } + else + { + self->ui_details->gui = empathy_builder_get_file (filename, + "table_common_groupwise_settings", &priv->table_common_settings, + "vbox_groupwise_settings", &self->ui_details->widget, + NULL); + + empathy_account_widget_handle_params (self, + "entry_id", "account", + "entry_password", "password", + "entry_server", "server", + "spinbutton_port", "port", + NULL); + + self->ui_details->default_focus = g_strdup ("entry_id"); + self->ui_details->add_forget = TRUE; + } +} - filename = empathy_file_lookup ("empathy-account-widget-msn.ui", - "libempathy-gtk"); - gui = empathy_builder_get_file (filename, - "vbox_msn_settings", &widget, - NULL); - g_free (filename); +static void +account_widget_destroy_cb (GtkWidget *widget, + EmpathyAccountWidget *self) +{ + g_object_unref (self); +} - empathy_account_widget_handle_params (account, gui, - "entry_id", "account", - "entry_password", "password", - "entry_server", "server", - "spinbutton_port", "port", - NULL); +static void +empathy_account_widget_enabled_cb (EmpathyAccount *account, + GParamSpec *spec, + gpointer user_data) +{ + EmpathyAccountWidget *widget = EMPATHY_ACCOUNT_WIDGET (user_data); + EmpathyAccountWidgetPriv *priv = GET_PRIV (widget); + gboolean enabled = empathy_account_is_enabled (account); + + if (!enabled && priv->re_enable_accound) + { + /* The account has been disabled because we were applying changes. + * However, the user wants the account to be enabled so let's re-enable + * it */ + empathy_account_set_enabled_async (account, TRUE, NULL, NULL); + } + else if (priv->enabled_checkbox != NULL) + { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->enabled_checkbox), + enabled); + } +} - empathy_account_widget_add_forget_button (account, gui, - "button_forget", - "entry_password"); +static void +account_widget_enabled_toggled_cb (GtkToggleButton *toggle_button, + gpointer user_data) +{ + account_widget_handle_control_buttons_sensitivity ( + EMPATHY_ACCOUNT_WIDGET (user_data)); +} - empathy_account_widget_set_default_focus (gui, "entry_id"); +static void +do_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + EmpathyAccountWidgetPriv *priv = GET_PRIV (object); + + switch (prop_id) + { + case PROP_PROTOCOL: + priv->protocol = g_value_dup_string (value); + break; + case PROP_SETTINGS: + priv->settings = g_value_dup_object (value); + break; + case PROP_SIMPLE: + priv->simple = g_value_get_boolean (value); + break; + case PROP_CREATING_ACCOUNT: + priv->creating_account = g_value_get_boolean (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} - return empathy_builder_unref_and_keep_widget (gui, widget); +static void +do_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + EmpathyAccountWidgetPriv *priv = GET_PRIV (object); + + switch (prop_id) + { + case PROP_PROTOCOL: + g_value_set_string (value, priv->protocol); + break; + case PROP_SETTINGS: + g_value_set_object (value, priv->settings); + break; + case PROP_SIMPLE: + g_value_set_boolean (value, priv->simple); + break; + case PROP_CREATING_ACCOUNT: + g_value_set_boolean (value, priv->creating_account); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } } -GtkWidget * -empathy_account_widget_jabber_new (EmpathyAccount *account) -{ - GtkBuilder *gui; - GtkWidget *widget; - GtkWidget *spinbutton_port; - GtkWidget *checkbutton_ssl; - gchar *filename; - - filename = empathy_file_lookup ("empathy-account-widget-jabber.ui", - "libempathy-gtk"); - gui = empathy_builder_get_file (filename, - "vbox_jabber_settings", &widget, - "spinbutton_port", &spinbutton_port, - "checkbutton_ssl", &checkbutton_ssl, - NULL); - g_free (filename); - - empathy_account_widget_handle_params (account, gui, - "entry_id", "account", - "entry_password", "password", - "entry_resource", "resource", - "entry_server", "server", - "spinbutton_port", "port", - "spinbutton_priority", "priority", - "checkbutton_ssl", "old-ssl", - "checkbutton_ignore_ssl_errors", "ignore-ssl-errors", - "checkbutton_encryption", "require-encryption", - NULL); - - empathy_account_widget_add_forget_button (account, gui, - "button_forget", - "entry_password"); - - empathy_account_widget_set_default_focus (gui, "entry_id"); - - g_signal_connect (checkbutton_ssl, "toggled", - G_CALLBACK (account_widget_jabber_ssl_toggled_cb), - spinbutton_port); - - return empathy_builder_unref_and_keep_widget (gui, widget); +static void +do_constructed (GObject *obj) +{ + EmpathyAccountWidget *self = EMPATHY_ACCOUNT_WIDGET (obj); + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); + EmpathyAccount *account; + char *uiname, *filename; + + uiname = g_strconcat ("empathy-account-widget-", priv->protocol, + ".ui", NULL); + filename = empathy_file_lookup (uiname, "libempathy-gtk"); + + if (!tp_strdiff (priv->protocol, "local-xmpp")) + account_widget_build_salut (self, filename); + else if (!tp_strdiff (priv->protocol, "msn")) + account_widget_build_msn (self, filename); + else if (!tp_strdiff (priv->protocol, "jabber")) + account_widget_build_jabber (self, filename); + else if (!tp_strdiff (priv->protocol, "icq")) + account_widget_build_icq (self, filename); + else if (!tp_strdiff (priv->protocol, "aim")) + account_widget_build_aim (self, filename); + else if (!tp_strdiff (priv->protocol, "yahoo")) + account_widget_build_yahoo (self, filename); + else if (!tp_strdiff (priv->protocol, "groupwise")) + account_widget_build_groupwise (self, filename); + else if (!tp_strdiff (priv->protocol, "irc")) + empathy_account_widget_irc_build (self, filename, + &priv->table_common_settings); + else if (!tp_strdiff (priv->protocol, "sip")) + empathy_account_widget_sip_build (self, filename, + &priv->table_common_settings); + else if (!tp_strdiff (priv->protocol, "generic")) + account_widget_build_generic (self, filename); + else + { + g_free (filename); + + filename = empathy_file_lookup ( + "empathy-account-widget-generic.ui", "libempathy-gtk"); + account_widget_build_generic (self, filename); + } + + g_free (uiname); + g_free (filename); + + /* handle default focus */ + if (self->ui_details->default_focus != NULL) + { + GObject *default_focus_entry; + + default_focus_entry = gtk_builder_get_object + (self->ui_details->gui, self->ui_details->default_focus); + g_signal_connect (default_focus_entry, "realize", + G_CALLBACK (gtk_widget_grab_focus), + NULL); + } + + /* handle forget button */ + if (self->ui_details->add_forget) + { + const gchar *password = NULL; + + priv->button_forget = GTK_WIDGET (gtk_builder_get_object + (self->ui_details->gui, "button_forget")); + priv->entry_password = GTK_WIDGET (gtk_builder_get_object + (self->ui_details->gui, "entry_password")); + + password = empathy_account_settings_get_string (priv->settings, + "password"); + gtk_widget_set_sensitive (priv->button_forget, + !EMP_STR_EMPTY (password)); + + g_signal_connect (priv->button_forget, "clicked", + G_CALLBACK (account_widget_forget_clicked_cb), + self); + g_signal_connect (priv->entry_password, "changed", + G_CALLBACK (account_widget_password_changed_cb), + self); + } + + /* handle apply and cancel button */ + if (!priv->simple) + { + GtkWidget *hbox = gtk_hbox_new (TRUE, 3); + + priv->cancel_button = gtk_button_new_from_stock (GTK_STOCK_CANCEL); + priv->apply_button = gtk_button_new_from_stock ( + priv->creating_account ? GTK_STOCK_CONNECT : GTK_STOCK_APPLY); + + gtk_box_pack_end (GTK_BOX (hbox), priv->apply_button, TRUE, + TRUE, 3); + gtk_box_pack_end (GTK_BOX (hbox), priv->cancel_button, TRUE, + TRUE, 3); + + gtk_box_pack_end (GTK_BOX (self->ui_details->widget), hbox, FALSE, + FALSE, 3); + + g_signal_connect (priv->cancel_button, "clicked", + G_CALLBACK (account_widget_cancel_clicked_cb), + self); + g_signal_connect (priv->apply_button, "clicked", + G_CALLBACK (account_widget_apply_clicked_cb), + self); + gtk_widget_show_all (hbox); + account_widget_set_control_buttons_sensitivity (self, FALSE); + } + + account = empathy_account_settings_get_account (priv->settings); + + if (account != NULL) + { + g_signal_connect (account, "notify::enabled", + G_CALLBACK (empathy_account_widget_enabled_cb), self); + } + + /* handle the "Enabled" checkbox. We only add it when modifying an account */ + if (!priv->creating_account && priv->table_common_settings != NULL) + { + guint nb_rows, nb_columns; + + priv->enabled_checkbox = + gtk_check_button_new_with_label (_("Enabled")); + gtk_toggle_button_set_active ( + GTK_TOGGLE_BUTTON (priv->enabled_checkbox), + empathy_account_is_enabled (account)); + + g_object_get (priv->table_common_settings, "n-rows", &nb_rows, + "n-columns", &nb_columns, NULL); + + gtk_table_resize (GTK_TABLE (priv->table_common_settings), ++nb_rows, + nb_columns); + + gtk_table_attach (GTK_TABLE (priv->table_common_settings), + priv->enabled_checkbox, 0, nb_columns, nb_rows - 1, nb_rows, + GTK_EXPAND | GTK_FILL, 0, 0, 0); + + gtk_widget_show (priv->enabled_checkbox); + + g_signal_connect (G_OBJECT (priv->enabled_checkbox), "toggled", + G_CALLBACK (account_widget_enabled_toggled_cb), self); + } + + /* hook up to widget destruction to unref ourselves */ + g_signal_connect (self->ui_details->widget, "destroy", + G_CALLBACK (account_widget_destroy_cb), self); + + empathy_builder_unref_and_keep_widget (self->ui_details->gui, + self->ui_details->widget); + self->ui_details->gui = NULL; } -GtkWidget * -empathy_account_widget_icq_new (EmpathyAccount *account) +static void +do_dispose (GObject *obj) { - GtkBuilder *gui; - GtkWidget *widget; - GtkWidget *spinbutton_port; - gchar *filename; + EmpathyAccountWidget *self = EMPATHY_ACCOUNT_WIDGET (obj); + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); + + if (priv->dispose_run) + return; - filename = empathy_file_lookup ("empathy-account-widget-icq.ui", - "libempathy-gtk"); - gui = empathy_builder_get_file (filename, - "vbox_icq_settings", &widget, - "spinbutton_port", &spinbutton_port, - NULL); - g_free (filename); + priv->dispose_run = TRUE; - empathy_account_widget_handle_params (account, gui, - "entry_uin", "account", - "entry_password", "password", - "entry_server", "server", - "spinbutton_port", "port", - "entry_charset", "charset", - NULL); + empathy_account_settings_is_ready (priv->settings); - empathy_account_widget_add_forget_button (account, gui, - "button_forget", - "entry_password"); + if (priv->settings != NULL) + { + EmpathyAccount *account; + account = empathy_account_settings_get_account (priv->settings); - empathy_account_widget_set_default_focus (gui, "entry_uin"); + if (account != NULL) + { + g_signal_handlers_disconnect_by_func (account, + empathy_account_widget_enabled_cb, self); + } - return empathy_builder_unref_and_keep_widget (gui, widget); + g_object_unref (priv->settings); + priv->settings = NULL; + } + + if (G_OBJECT_CLASS (empathy_account_widget_parent_class)->dispose != NULL) + G_OBJECT_CLASS (empathy_account_widget_parent_class)->dispose (obj); } -GtkWidget * -empathy_account_widget_aim_new (EmpathyAccount *account) +static void +do_finalize (GObject *obj) { - GtkBuilder *gui; - GtkWidget *widget; - GtkWidget *spinbutton_port; - gchar *filename; - - filename = empathy_file_lookup ("empathy-account-widget-aim.ui", - "libempathy-gtk"); - gui = empathy_builder_get_file (filename, - "vbox_aim_settings", &widget, - "spinbutton_port", &spinbutton_port, - NULL); - g_free (filename); + EmpathyAccountWidget *self = EMPATHY_ACCOUNT_WIDGET (obj); + EmpathyAccountWidgetPriv *priv = GET_PRIV (self); - empathy_account_widget_handle_params (account, gui, - "entry_screenname", "account", - "entry_password", "password", - "entry_server", "server", - "spinbutton_port", "port", - NULL); + g_free (self->ui_details->default_focus); + g_slice_free (EmpathyAccountWidgetUIDetails, self->ui_details); - empathy_account_widget_add_forget_button (account, gui, - "button_forget", - "entry_password"); + g_free (priv->protocol); - empathy_account_widget_set_default_focus (gui, "entry_screenname"); + if (G_OBJECT_CLASS (empathy_account_widget_parent_class)->finalize != NULL) + G_OBJECT_CLASS (empathy_account_widget_parent_class)->finalize (obj); +} - return empathy_builder_unref_and_keep_widget (gui, widget); +static void +empathy_account_widget_class_init (EmpathyAccountWidgetClass *klass) +{ + GObjectClass *oclass = G_OBJECT_CLASS (klass); + GParamSpec *param_spec; + + oclass->get_property = do_get_property; + oclass->set_property = do_set_property; + oclass->constructed = do_constructed; + oclass->dispose = do_dispose; + oclass->finalize = do_finalize; + + param_spec = g_param_spec_string ("protocol", + "protocol", "The protocol of the account", + NULL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); + g_object_class_install_property (oclass, PROP_PROTOCOL, param_spec); + + param_spec = g_param_spec_object ("settings", + "settings", "The settings of the account", + EMPATHY_TYPE_ACCOUNT_SETTINGS, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); + g_object_class_install_property (oclass, PROP_SETTINGS, param_spec); + + param_spec = g_param_spec_boolean ("simple", + "simple", "Whether the account widget is a simple or an advanced one", + FALSE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); + g_object_class_install_property (oclass, PROP_SIMPLE, param_spec); + + param_spec = g_param_spec_boolean ("creating-account", + "creating-account", + "TRUE if we're creating an account, FALSE if we're modifying it", + FALSE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); + g_object_class_install_property (oclass, PROP_CREATING_ACCOUNT, param_spec); + + signals[HANDLE_APPLY] = + g_signal_new ("handle-apply", G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, 0, NULL, NULL, + g_cclosure_marshal_VOID__BOOLEAN, + G_TYPE_NONE, + 1, G_TYPE_BOOLEAN); + + /* This signal is emitted when an account has been created and enabled. */ + signals[ACCOUNT_CREATED] = + g_signal_new ("account-created", G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, 0, NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, + 0); + + signals[CANCELLED] = + g_signal_new ("cancelled", G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, 0, NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, + 0); + + g_type_class_add_private (klass, sizeof (EmpathyAccountWidgetPriv)); } -GtkWidget * -empathy_account_widget_yahoo_new (EmpathyAccount *account) +static void +empathy_account_widget_init (EmpathyAccountWidget *self) { - GtkBuilder *gui; - GtkWidget *widget; - gchar *filename; + EmpathyAccountWidgetPriv *priv = + G_TYPE_INSTANCE_GET_PRIVATE ((self), EMPATHY_TYPE_ACCOUNT_WIDGET, + EmpathyAccountWidgetPriv); - filename = empathy_file_lookup ("empathy-account-widget-yahoo.ui", - "libempathy-gtk"); - gui = empathy_builder_get_file (filename, - "vbox_yahoo_settings", &widget, - NULL); - g_free (filename); + self->priv = priv; + priv->dispose_run = FALSE; - empathy_account_widget_handle_params (account, gui, - "entry_id", "account", - "entry_password", "password", - "entry_server", "server", - "entry_locale", "room-list-locale", - "entry_charset", "charset", - "spinbutton_port", "port", - "checkbutton_yahoojp", "yahoojp", - "checkbutton_ignore_invites", "ignore-invites", - NULL); + self->ui_details = g_slice_new0 (EmpathyAccountWidgetUIDetails); +} - empathy_account_widget_add_forget_button (account, gui, - "button_forget", - "entry_password"); +/* public methods */ - empathy_account_widget_set_default_focus (gui, "entry_id"); +void +empathy_account_widget_handle_params (EmpathyAccountWidget *self, + const gchar *first_widget, + ...) +{ + va_list args; - return empathy_builder_unref_and_keep_widget (gui, widget); + va_start (args, first_widget); + account_widget_handle_params_valist (self, first_widget, args); + va_end (args); } GtkWidget * -empathy_account_widget_groupwise_new (EmpathyAccount *account) +empathy_account_widget_get_widget (EmpathyAccountWidget *widget) { - GtkBuilder *gui; - GtkWidget *widget; - gchar *filename; - - filename = empathy_file_lookup ("empathy-account-widget-groupwise.ui", - "libempathy-gtk"); - gui = empathy_builder_get_file (filename, - "vbox_groupwise_settings", &widget, - NULL); - g_free (filename); + return widget->ui_details->widget; +} - empathy_account_widget_handle_params (account, gui, - "entry_id", "account", - "entry_password", "password", - "entry_server", "server", - "spinbutton_port", "port", - NULL); +EmpathyAccountWidget * +empathy_account_widget_new_for_protocol (const char *protocol, + EmpathyAccountSettings *settings, + gboolean simple) +{ + EmpathyAccountWidget *self; - empathy_account_widget_add_forget_button (account, gui, - "button_forget", - "entry_password"); + g_return_val_if_fail (EMPATHY_IS_ACCOUNT_SETTINGS (settings), NULL); + g_return_val_if_fail (protocol != NULL, NULL); - empathy_account_widget_set_default_focus (gui, "entry_id"); + self = g_object_new + (EMPATHY_TYPE_ACCOUNT_WIDGET, "protocol", protocol, + "settings", settings, "simple", simple, + "creating-account", + empathy_account_settings_get_account (settings) == NULL, + NULL); - return empathy_builder_unref_and_keep_widget (gui, widget); + return self; } - diff --git a/libempathy-gtk/empathy-account-widget.h b/libempathy-gtk/empathy-account-widget.h index 7a76db9e0..415934a2d 100644 --- a/libempathy-gtk/empathy-account-widget.h +++ b/libempathy-gtk/empathy-account-widget.h @@ -1,4 +1,3 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* * Copyright (C) 2006-2007 Imendio AB * Copyright (C) 2007-2008 Collabora Ltd. @@ -22,34 +21,51 @@ * Martyn Russell <martyn@imendio.com> */ -#ifndef __EMPATHY_ACCOUNT_WIDGET_GENERIC_H__ -#define __EMPATHY_ACCOUNT_WIDGET_GENERIC_H__ +#ifndef __EMPATHY_ACCOUNT_WIDGET_H__ +#define __EMPATHY_ACCOUNT_WIDGET_H__ #include <gtk/gtk.h> -#include <libempathy/empathy-account.h> +#include <libempathy/empathy-account-settings.h> G_BEGIN_DECLS -void empathy_account_widget_handle_params (EmpathyAccount *account, - GtkBuilder *gui, - const gchar *first_widget, - ...); -void empathy_account_widget_add_forget_button (EmpathyAccount *account, - GtkBuilder *gui, - const gchar *button, - const gchar *entry); -void empathy_account_widget_set_default_focus (GtkBuilder *gui, - const gchar *entry); -GtkWidget *empathy_account_widget_generic_new (EmpathyAccount *account); -GtkWidget *empathy_account_widget_salut_new (EmpathyAccount *account); -GtkWidget *empathy_account_widget_msn_new (EmpathyAccount *account); -GtkWidget *empathy_account_widget_jabber_new (EmpathyAccount *account); -GtkWidget *empathy_account_widget_icq_new (EmpathyAccount *account); -GtkWidget *empathy_account_widget_aim_new (EmpathyAccount *account); -GtkWidget *empathy_account_widget_yahoo_new (EmpathyAccount *account); -GtkWidget *empathy_account_widget_groupwise_new (EmpathyAccount *account); +#define EMPATHY_TYPE_ACCOUNT_WIDGET empathy_account_widget_get_type() +#define EMPATHY_ACCOUNT_WIDGET(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_ACCOUNT_WIDGET, EmpathyAccountWidget)) +#define EMPATHY_ACCOUNT_WIDGET_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), EMPATHY_TYPE_ACCOUNT_WIDGET, EmpathyAccountWidgetClass)) +#define EMPATHY_IS_ACCOUNT_WIDGET(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_ACCOUNT_WIDGET)) +#define EMPATHY_IS_ACCOUNT_WIDGET_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), EMPATHY_TYPE_ACCOUNT_WIDGET)) +#define EMPATHY_ACCOUNT_WIDGET_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_ACCOUNT_WIDGET, EmpathyAccountWidgetClass)) + +typedef struct _EmpathyAccountWidgetUIDetails EmpathyAccountWidgetUIDetails; + +typedef struct { + GObject parent; + + EmpathyAccountWidgetUIDetails *ui_details; + + /* private */ + gpointer priv; +} EmpathyAccountWidget; + +typedef struct { + GObjectClass parent_class; +} EmpathyAccountWidgetClass; + +GType empathy_account_widget_get_type (void); + +GtkWidget *empathy_account_widget_get_widget (EmpathyAccountWidget *widget); + +EmpathyAccountWidget * empathy_account_widget_new_for_protocol ( + const char *protocol, + EmpathyAccountSettings *settings, + gboolean simple); G_END_DECLS -#endif /* __EMPATHY_ACCOUNT_WIDGET_GENERIC_H__ */ +#endif /* __EMPATHY_ACCOUNT_WIDGET_H__ */ diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c index 9fa51fb85..9096beeae 100644 --- a/libempathy-gtk/empathy-chat.c +++ b/libempathy-gtk/empathy-chat.c @@ -203,8 +203,9 @@ chat_new_connection_cb (EmpathyAccountManager *manager, EmpathyChatPriv *priv = GET_PRIV (chat); EmpathyAccount *account; - account = empathy_account_manager_get_account (manager, connection); - if (!priv->tp_chat && empathy_account_equal (account, priv->account) && + account = empathy_account_manager_get_account_for_connection (manager, + connection); + if (!priv->tp_chat && account == priv->account && priv->handle_type != TP_HANDLE_TYPE_NONE && !EMP_STR_EMPTY (priv->id)) { @@ -1781,7 +1782,8 @@ empathy_chat_set_tp_chat (EmpathyChat *chat, priv->tp_chat = g_object_ref (tp_chat); connection = empathy_tp_chat_get_connection (priv->tp_chat); - priv->account = empathy_account_manager_get_account (priv->account_manager, + priv->account = empathy_account_manager_get_account_for_connection ( + priv->account_manager, connection); g_object_ref (priv->account); diff --git a/libempathy-gtk/empathy-contact-dialogs.c b/libempathy-gtk/empathy-contact-dialogs.c index 0ec8c8e3e..5c77a787e 100644 --- a/libempathy-gtk/empathy-contact-dialogs.c +++ b/libempathy-gtk/empathy-contact-dialogs.c @@ -27,8 +27,6 @@ #include <gtk/gtk.h> #include <glib/gi18n-lib.h> -#include <libmissioncontrol/mission-control.h> - #include <libempathy/empathy-contact-manager.h> #include <libempathy/empathy-account-manager.h> #include <libempathy/empathy-contact-list.h> diff --git a/libempathy-gtk/empathy-contact-list-view.c b/libempathy-gtk/empathy-contact-list-view.c index a4dfa0f59..dcbbb18bf 100644 --- a/libempathy-gtk/empathy-contact-list-view.c +++ b/libempathy-gtk/empathy-contact-list-view.c @@ -302,7 +302,7 @@ contact_list_view_drag_data_received (GtkWidget *view, account_id = strv[0]; contact_id = strv[1]; account_manager = empathy_account_manager_dup_singleton (); - account = empathy_account_manager_lookup (account_manager, account_id); + account = empathy_account_manager_get_account (account_manager, account_id); if (account) { TpConnection *connection; diff --git a/libempathy-gtk/empathy-contact-widget.ui b/libempathy-gtk/empathy-contact-widget.ui index 5737b7d71..d91243012 100644 --- a/libempathy-gtk/empathy-contact-widget.ui +++ b/libempathy-gtk/empathy-contact-widget.ui @@ -183,9 +183,11 @@ <placeholder/> </child> <child> - <object class="GtkViewport" id="viewport_map"> + <object class="GtkFrame" id="viewport_map"> <property name="height_request">150</property> <property name="resize_mode">queue</property> + <property name="label_xalign">0</property> + <property name="shadow_type">in</property> <child> <placeholder/> </child> diff --git a/libempathy-gtk/empathy-irc-network-dialog.c b/libempathy-gtk/empathy-irc-network-dialog.c index e6b4a6f7f..8d4676417 100644 --- a/libempathy-gtk/empathy-irc-network-dialog.c +++ b/libempathy-gtk/empathy-irc-network-dialog.c @@ -27,8 +27,6 @@ #include <glib/gi18n-lib.h> #include <gtk/gtk.h> -#include <libmissioncontrol/mc-protocol.h> - #include <libempathy/empathy-utils.h> #include <libempathy/empathy-account.h> diff --git a/libempathy-gtk/empathy-log-window.c b/libempathy-gtk/empathy-log-window.c index f05017c9c..11ddca74b 100644 --- a/libempathy-gtk/empathy-log-window.c +++ b/libempathy-gtk/empathy-log-window.c @@ -419,7 +419,7 @@ log_window_find_populate (EmpathyLogWindow *window, date_readable = empathy_log_manager_get_date_readable (hit->date); account_name = empathy_account_get_display_name (hit->account); - account_icon = empathy_icon_name_from_account (hit->account); + account_icon = empathy_account_get_icon_name (hit->account); gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, @@ -774,7 +774,7 @@ log_window_chats_set_selected (EmpathyLogWindow *window, COL_CHAT_IS_CHATROOM, &this_is_chatroom, -1); - if (empathy_account_equal (this_account, account) && + if (this_account == account && strcmp (this_chat_id, chat_id) == 0 && this_is_chatroom == is_chatroom) { gtk_tree_selection_select_iter (selection, &iter); diff --git a/libempathy-gtk/empathy-new-message-dialog.c b/libempathy-gtk/empathy-new-message-dialog.c index 77b368bd9..66b2adb2d 100644 --- a/libempathy-gtk/empathy-new-message-dialog.c +++ b/libempathy-gtk/empathy-new-message-dialog.c @@ -27,8 +27,6 @@ #include <gtk/gtk.h> #include <glib/gi18n-lib.h> -#include <libmissioncontrol/mission-control.h> - #include <libempathy/empathy-call-factory.h> #include <libempathy/empathy-tp-contact-factory.h> #include <libempathy/empathy-contact-manager.h> diff --git a/libempathy-gtk/empathy-profile-chooser.c b/libempathy-gtk/empathy-profile-chooser.c deleted file mode 100644 index b3cbf90d0..000000000 --- a/libempathy-gtk/empathy-profile-chooser.c +++ /dev/null @@ -1,324 +0,0 @@ -/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */ -/* - * Copyright (C) 2007-2009 Collabora Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - * Authors: Xavier Claessens <xclaesse@gmail.com> - * Jonny Lamb <jonny.lamb@collabora.co.uk> - */ - -#include <config.h> - -#include <string.h> - -#include <gtk/gtk.h> -#include <libmissioncontrol/mc-profile.h> -#include <libmissioncontrol/mc-protocol.h> - -#include <libempathy/empathy-utils.h> - -#include "empathy-profile-chooser.h" -#include "empathy-ui-utils.h" - -/** - * SECTION:empathy-profile-chooser - * @title: EmpathyProfileChooser - * @short_description: A widget used to choose from a list of profiles - * @include: libempathy-gtk/empathy-profile-chooser.h - * - * #EmpathyProfileChooser is a widget which extends #GtkComboBox to provides a - * chooser of available profiles. - */ - -/** - * EmpathyProfileChooser: - * @parent: parent object - * - * Widget which extends #GtkComboBox to provide a chooser of available - * profiles. - */ - -#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyProfileChooser) -typedef struct -{ - GtkListStore *store; - gboolean dispose_run; -} EmpathyProfileChooserPriv; - -enum -{ - COL_ICON, - COL_LABEL, - COL_PROFILE, - COL_COUNT -}; - -G_DEFINE_TYPE (EmpathyProfileChooser, empathy_profile_chooser, - GTK_TYPE_COMBO_BOX); - -static gint -profile_chooser_sort_profile_value (McProfile *profile) -{ - guint i; - const gchar *profile_name; - const gchar *names[] = { - "jabber", - "salut", - "gtalk", - NULL - }; - - profile_name = mc_profile_get_unique_name (profile); - - for (i = 0 ; names[i]; i++) - { - if (strcmp (profile_name, names[i]) == 0) - return i; - } - - return i; -} - -static gint -profile_chooser_sort_func (GtkTreeModel *model, - GtkTreeIter *iter_a, - GtkTreeIter *iter_b, - gpointer user_data) -{ - McProfile *profile_a; - McProfile *profile_b; - gint cmp; - - gtk_tree_model_get (model, iter_a, - COL_PROFILE, &profile_a, - -1); - gtk_tree_model_get (model, iter_b, - COL_PROFILE, &profile_b, - -1); - - cmp = profile_chooser_sort_profile_value (profile_a); - cmp -= profile_chooser_sort_profile_value (profile_b); - if (cmp == 0) - { - cmp = strcmp (mc_profile_get_display_name (profile_a), - mc_profile_get_display_name (profile_b)); - } - - g_object_unref (profile_a); - g_object_unref (profile_b); - - return cmp; -} - -static void -profile_chooser_constructed (GObject *object) -{ - EmpathyProfileChooser *profile_chooser; - EmpathyProfileChooserPriv *priv; - - GList *profiles, *l, *seen; - GtkCellRenderer *renderer; - GtkTreeIter iter; - gboolean iter_set = FALSE; - McManager *btf_cm; - - priv = GET_PRIV (object); - profile_chooser = EMPATHY_PROFILE_CHOOSER (object); - - /* set up combo box with new store */ - priv->store = gtk_list_store_new (COL_COUNT, - G_TYPE_STRING, /* Icon name */ - G_TYPE_STRING, /* Label */ - MC_TYPE_PROFILE); /* Profile */ - - gtk_combo_box_set_model (GTK_COMBO_BOX (object), - GTK_TREE_MODEL (priv->store)); - - renderer = gtk_cell_renderer_pixbuf_new (); - gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (object), renderer, FALSE); - gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (object), renderer, - "icon-name", COL_ICON, - NULL); - g_object_set (renderer, "stock-size", GTK_ICON_SIZE_BUTTON, NULL); - - renderer = gtk_cell_renderer_text_new (); - gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (object), renderer, TRUE); - gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (object), renderer, - "text", COL_LABEL, - NULL); - - btf_cm = mc_manager_lookup ("butterfly"); - profiles = mc_profiles_list (); - seen = NULL; - for (l = profiles; l; l = g_list_next (l)) - { - McProfile *profile; - McProtocol *protocol; - const gchar *unique_name; - - profile = l->data; - - /* Check if the CM is installed, otherwise skip that profile. - * Workaround SF bug #1688779 */ - protocol = mc_profile_get_protocol (profile); - if (!protocol) - continue; - - g_object_unref (protocol); - - /* Skip MSN-Haze if we have butterfly */ - unique_name = mc_profile_get_unique_name (profile); - if (btf_cm && strcmp (unique_name, "msn-haze") == 0) - continue; - - if (g_list_find_custom (seen, unique_name, (GCompareFunc) strcmp)) - continue; - - seen = g_list_append (seen, (char *) unique_name); - - gtk_list_store_insert_with_values (priv->store, &iter, 0, - COL_ICON, mc_profile_get_icon_name (profile), - COL_LABEL, mc_profile_get_display_name (profile), - COL_PROFILE, profile, - -1); - iter_set = TRUE; - } - - g_list_free (seen); - - if (btf_cm) - g_object_unref (btf_cm); - - /* Set the profile sort function */ - gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->store), - COL_PROFILE, - profile_chooser_sort_func, - NULL, NULL); - gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (priv->store), - COL_PROFILE, - GTK_SORT_ASCENDING); - - if (iter_set) - gtk_combo_box_set_active_iter (GTK_COMBO_BOX (object), &iter); - - mc_profiles_free_list (profiles); - - if (G_OBJECT_CLASS (empathy_profile_chooser_parent_class)->constructed) - G_OBJECT_CLASS (empathy_profile_chooser_parent_class)->constructed (object); -} - -static void -empathy_profile_chooser_init (EmpathyProfileChooser *profile_chooser) -{ - EmpathyProfileChooserPriv *priv = - G_TYPE_INSTANCE_GET_PRIVATE (profile_chooser, - EMPATHY_TYPE_PROFILE_CHOOSER, EmpathyProfileChooserPriv); - - priv->dispose_run = FALSE; - - profile_chooser->priv = priv; -} - -static void -profile_chooser_dispose (GObject *object) -{ - EmpathyProfileChooser *profile_chooser = EMPATHY_PROFILE_CHOOSER (object); - EmpathyProfileChooserPriv *priv = GET_PRIV (profile_chooser); - - if (priv->dispose_run) - return; - - priv->dispose_run = TRUE; - - if (priv->store) - { - g_object_unref (priv->store); - priv->store = NULL; - } - - (G_OBJECT_CLASS (empathy_profile_chooser_parent_class)->dispose) (object); -} - -static void -empathy_profile_chooser_class_init (EmpathyProfileChooserClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->constructed = profile_chooser_constructed; - object_class->dispose = profile_chooser_dispose; - - g_type_class_add_private (object_class, sizeof (EmpathyProfileChooserPriv)); -} - -/** - * empathy_profile_chooser_dup_selected: - * @profile_chooser: an #EmpathyProfileChooser - * - * Returns a new reference to the selected #McProfile in @profile_chooser. The - * returned #McProfile should be unrefed with g_object_unref() when finished - * with. - * - * Return value: a new reference to the selected #McProfile - */ -McProfile * -empathy_profile_chooser_dup_selected (EmpathyProfileChooser *profile_chooser) -{ - EmpathyProfileChooserPriv *priv = GET_PRIV (profile_chooser); - GtkTreeIter iter; - McProfile *profile = NULL; - - g_return_val_if_fail (EMPATHY_IS_PROFILE_CHOOSER (profile_chooser), NULL); - - if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (profile_chooser), &iter)) - { - gtk_tree_model_get (GTK_TREE_MODEL (priv->store), &iter, - COL_PROFILE, &profile, - -1); - } - - return profile; -} - -/** - * empathy_profile_chooser_n_profiles: - * @profile_chooser: an #EmpathyProfileChooser - * - * Returns the number of profiles in @profile_chooser. - * - * Return value: the number of profiles in @profile_chooser - */ -gint -empathy_profile_chooser_n_profiles (EmpathyProfileChooser *profile_chooser) -{ - EmpathyProfileChooserPriv *priv = GET_PRIV (profile_chooser); - - g_return_val_if_fail (EMPATHY_IS_PROFILE_CHOOSER (profile_chooser), 0); - - return gtk_tree_model_iter_n_children (GTK_TREE_MODEL (priv->store), NULL); -} - -/** - * empathy_profile_chooser_new: - * - * Creates a new #EmpathyProfileChooser widget. - * - * Return value: a new #EmpathyProfileChooser widget - */ -GtkWidget * -empathy_profile_chooser_new (void) -{ - return GTK_WIDGET (g_object_new (EMPATHY_TYPE_PROFILE_CHOOSER, NULL)); -} diff --git a/libempathy-gtk/empathy-profile-chooser.h b/libempathy-gtk/empathy-profile-chooser.h deleted file mode 100644 index 37d7241a9..000000000 --- a/libempathy-gtk/empathy-profile-chooser.h +++ /dev/null @@ -1,69 +0,0 @@ -/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */ -/* - * Copyright (C) 2007-2009 Collabora Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - * Authors: Xavier Claessens <xclaesse@gmail.com> - * Jonny Lamb <jonny.lamb@collabora.co.uk - */ - -#ifndef __EMPATHY_PROFILE_CHOOSER_H__ -#define __EMPATHY_PROFILE_CHOOSER_H__ - -#include <glib-object.h> -#include <gtk/gtk.h> - -#include <libmissioncontrol/mc-profile.h> - -G_BEGIN_DECLS - -#define EMPATHY_TYPE_PROFILE_CHOOSER (empathy_profile_chooser_get_type ()) -#define EMPATHY_PROFILE_CHOOSER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), \ - EMPATHY_TYPE_PROFILE_CHOOSER, EmpathyProfileChooser)) -#define EMPATHY_PROFILE_CHOOSER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), \ - EMPATHY_TYPE_PROFILE_CHOOSER, EmpathyProfileChooserClass)) -#define EMPATHY_IS_PROFILE_CHOOSER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), \ - EMPATHY_TYPE_PROFILE_CHOOSER)) -#define EMPATHY_IS_PROFILE_CHOOSER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), \ - EMPATHY_TYPE_PROFILE_CHOOSER)) -#define EMPATHY_PROFILE_CHOOSER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), \ - EMPATHY_TYPE_PROFILE_CHOOSER, EmpathyProfileChooserClass)) - -typedef struct _EmpathyProfileChooser EmpathyProfileChooser; -typedef struct _EmpathyProfileChooserClass EmpathyProfileChooserClass; - -struct _EmpathyProfileChooser -{ - GtkComboBox parent; - - /*<private>*/ - gpointer priv; -}; - -struct _EmpathyProfileChooserClass -{ - GtkComboBoxClass parent_class; -}; - -GType empathy_profile_chooser_get_type (void) G_GNUC_CONST; -GtkWidget * empathy_profile_chooser_new (void); -McProfile * empathy_profile_chooser_dup_selected ( - EmpathyProfileChooser *profile_chooser); -gint empathy_profile_chooser_n_profiles ( - EmpathyProfileChooser *profile_chooser); - -G_END_DECLS -#endif /* __EMPATHY_PROFILE_CHOOSER_H__ */ diff --git a/libempathy-gtk/empathy-protocol-chooser.c b/libempathy-gtk/empathy-protocol-chooser.c new file mode 100644 index 000000000..16ede4fd9 --- /dev/null +++ b/libempathy-gtk/empathy-protocol-chooser.c @@ -0,0 +1,465 @@ +/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */ +/* + * Copyright (C) 2007-2009 Collabora Ltd. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Authors: Xavier Claessens <xclaesse@gmail.com> + * Jonny Lamb <jonny.lamb@collabora.co.uk> + */ + +#include <config.h> + +#include <string.h> + +#include <telepathy-glib/util.h> + +#include <gtk/gtk.h> + +#include <glib/gi18n-lib.h> + +#include <libempathy/empathy-utils.h> +#include <libempathy/empathy-connection-managers.h> + +#include "empathy-protocol-chooser.h" +#include "empathy-ui-utils.h" + +#define DEBUG_FLAG EMPATHY_DEBUG_ACCOUNT +#include <libempathy/empathy-debug.h> + +/** + * SECTION:empathy-protocol-chooser + * @title: EmpathyProtocolChooser + * @short_description: A widget used to choose from a list of protocols + * @include: libempathy-gtk/empathy-protocol-chooser.h + * + * #EmpathyProtocolChooser is a widget which extends #GtkComboBox to provides a + * chooser of available protocols. + */ + +/** + * EmpathyProtocolChooser: + * @parent: parent object + * + * Widget which extends #GtkComboBox to provide a chooser of available + * protocols. + */ + +#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyProtocolChooser) +typedef struct +{ + GtkListStore *store; + + gboolean dispose_run; + EmpathyConnectionManagers *cms; + + EmpathyProtocolChooserFilterFunc filter_func; + gpointer filter_user_data; + + GHashTable *protocols; +} EmpathyProtocolChooserPriv; + +enum +{ + COL_ICON, + COL_LABEL, + COL_CM, + COL_PROTOCOL, + COL_COUNT +}; + +G_DEFINE_TYPE (EmpathyProtocolChooser, empathy_protocol_chooser, + GTK_TYPE_COMBO_BOX); + +static gint +protocol_chooser_sort_protocol_value (TpConnectionManagerProtocol *protocol) +{ + guint i; + const gchar *names[] = { + "jabber", + "local-xmpp", + "gtalk", + NULL + }; + + for (i = 0 ; names[i]; i++) + { + if (strcmp (protocol->name, names[i]) == 0) + return i; + } + + return i; +} + +static gint +protocol_chooser_sort_func (GtkTreeModel *model, + GtkTreeIter *iter_a, + GtkTreeIter *iter_b, + gpointer user_data) +{ + TpConnectionManagerProtocol *protocol_a; + TpConnectionManagerProtocol *protocol_b; + gint cmp = 0; + + gtk_tree_model_get (model, iter_a, + COL_PROTOCOL, &protocol_a, + -1); + gtk_tree_model_get (model, iter_b, + COL_PROTOCOL, &protocol_b, + -1); + + cmp = protocol_chooser_sort_protocol_value (protocol_a); + cmp -= protocol_chooser_sort_protocol_value (protocol_b); + if (cmp == 0) + { + cmp = strcmp (protocol_a->name, protocol_b->name); + } + + return cmp; +} + +static void +protocol_choosers_add_cm (EmpathyProtocolChooser *chooser, + TpConnectionManager *cm) +{ + EmpathyProtocolChooserPriv *priv = GET_PRIV (chooser); + const TpConnectionManagerProtocol * const *iter; + + for (iter = cm->protocols; iter != NULL && *iter != NULL; iter++) + { + const TpConnectionManagerProtocol *proto = *iter; + gchar *icon_name; + const gchar *display_name; + const gchar *saved_cm_name; + + saved_cm_name = g_hash_table_lookup (priv->protocols, proto->name); + + if (!tp_strdiff (cm->name, "haze") && saved_cm_name != NULL && + tp_strdiff (saved_cm_name, "haze")) + /* the CM we're adding is a haze implementation of something we already + * have; drop it. + */ + continue; + + if (tp_strdiff (cm->name, "haze") && !tp_strdiff (saved_cm_name, "haze")) + { + GtkTreeIter titer; + gboolean valid; + const TpConnectionManagerProtocol *haze_proto; + TpConnectionManager *haze_cm; + + /* let's this CM replace the haze implementation */ + valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->store), + &titer); + + while (valid) + { + gtk_tree_model_get (GTK_TREE_MODEL (priv->store), &titer, + COL_PROTOCOL, &haze_proto, + COL_CM, &haze_cm, -1); + + if (haze_cm == NULL) + continue; + + if (haze_proto == NULL) + { + g_object_unref (haze_cm); + continue; + } + + if (!tp_strdiff (haze_cm->name, "haze") && + !tp_strdiff (haze_proto->name, proto->name)) + { + gtk_list_store_remove (priv->store, &titer); + g_object_unref (haze_cm); + break; + } + + g_object_unref (haze_cm); + valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->store), + &titer); + } + } + + g_hash_table_insert (priv->protocols, + g_strdup (proto->name), g_strdup (cm->name)); + + icon_name = empathy_protocol_icon_name (proto->name); + display_name = empathy_protocol_name_to_display_name (proto->name); + + if (display_name == NULL) + display_name = proto->name; + + gtk_list_store_insert_with_values (priv->store, + NULL, 0, + COL_ICON, icon_name, + COL_LABEL, display_name, + COL_CM, cm, + COL_PROTOCOL, proto, + -1); + + g_free (icon_name); + } +} + +static void +protocol_chooser_add_cms_list (EmpathyProtocolChooser *protocol_chooser, + GList *cms) +{ + GList *l; + + for (l = cms; l != NULL; l = l->next) + protocol_choosers_add_cm (protocol_chooser, l->data); + + gtk_combo_box_set_active (GTK_COMBO_BOX (protocol_chooser), 0); +} + +static void +protocol_chooser_cms_ready_cb (EmpathyConnectionManagers *cms, + GParamSpec *pspec, + EmpathyProtocolChooser *protocol_chooser) +{ + if (empathy_connection_managers_is_ready (cms)) + protocol_chooser_add_cms_list + (protocol_chooser, empathy_connection_managers_get_cms (cms)); +} + +static void +protocol_chooser_constructed (GObject *object) +{ + EmpathyProtocolChooser *protocol_chooser; + EmpathyProtocolChooserPriv *priv; + GtkCellRenderer *renderer; + + priv = GET_PRIV (object); + protocol_chooser = EMPATHY_PROTOCOL_CHOOSER (object); + + /* set up combo box with new store */ + priv->store = gtk_list_store_new (COL_COUNT, + G_TYPE_STRING, /* Icon name */ + G_TYPE_STRING, /* Label */ + G_TYPE_OBJECT, /* CM */ + G_TYPE_POINTER); /* protocol */ + + /* Set the protocol sort function */ + gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->store), + COL_PROTOCOL, + protocol_chooser_sort_func, + NULL, NULL); + gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (priv->store), + COL_PROTOCOL, + GTK_SORT_ASCENDING); + + gtk_combo_box_set_model (GTK_COMBO_BOX (object), + GTK_TREE_MODEL (priv->store)); + + renderer = gtk_cell_renderer_pixbuf_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (object), renderer, FALSE); + gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (object), renderer, + "icon-name", COL_ICON, + NULL); + g_object_set (renderer, "stock-size", GTK_ICON_SIZE_BUTTON, NULL); + + renderer = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (object), renderer, TRUE); + gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (object), renderer, + "text", COL_LABEL, + NULL); + + if (empathy_connection_managers_is_ready (priv->cms)) + protocol_chooser_add_cms_list (protocol_chooser, + empathy_connection_managers_get_cms (priv->cms)); + else + g_signal_connect (priv->cms, "notify::ready", + G_CALLBACK (protocol_chooser_cms_ready_cb), protocol_chooser); + + if (G_OBJECT_CLASS (empathy_protocol_chooser_parent_class)->constructed) + G_OBJECT_CLASS + (empathy_protocol_chooser_parent_class)->constructed (object); +} + +static void +empathy_protocol_chooser_init (EmpathyProtocolChooser *protocol_chooser) +{ + EmpathyProtocolChooserPriv *priv = + G_TYPE_INSTANCE_GET_PRIVATE (protocol_chooser, + EMPATHY_TYPE_PROTOCOL_CHOOSER, EmpathyProtocolChooserPriv); + + priv->dispose_run = FALSE; + priv->cms = empathy_connection_managers_dup_singleton (); + priv->protocols = g_hash_table_new_full (g_str_hash, g_str_equal, + g_free, g_free); + + protocol_chooser->priv = priv; +} + +static void +protocol_chooser_finalize (GObject *object) +{ + EmpathyProtocolChooser *protocol_chooser = EMPATHY_PROTOCOL_CHOOSER (object); + EmpathyProtocolChooserPriv *priv = GET_PRIV (protocol_chooser); + + if (priv->protocols) + { + g_hash_table_destroy (priv->protocols); + priv->protocols = NULL; + } + + (G_OBJECT_CLASS (empathy_protocol_chooser_parent_class)->finalize) (object); +} + +static void +protocol_chooser_dispose (GObject *object) +{ + EmpathyProtocolChooser *protocol_chooser = EMPATHY_PROTOCOL_CHOOSER (object); + EmpathyProtocolChooserPriv *priv = GET_PRIV (protocol_chooser); + + if (priv->dispose_run) + return; + + priv->dispose_run = TRUE; + + if (priv->store) + { + g_object_unref (priv->store); + priv->store = NULL; + } + + if (priv->cms) + { + g_object_unref (priv->cms); + priv->cms = NULL; + } + + (G_OBJECT_CLASS (empathy_protocol_chooser_parent_class)->dispose) (object); +} + +static void +empathy_protocol_chooser_class_init (EmpathyProtocolChooserClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->constructed = protocol_chooser_constructed; + object_class->dispose = protocol_chooser_dispose; + object_class->finalize = protocol_chooser_finalize; + + g_type_class_add_private (object_class, sizeof (EmpathyProtocolChooserPriv)); +} + +static gboolean +protocol_chooser_filter_visible_func (GtkTreeModel *model, + GtkTreeIter *iter, + gpointer user_data) +{ + EmpathyProtocolChooser *protocol_chooser = user_data; + EmpathyProtocolChooserPriv *priv = GET_PRIV (protocol_chooser); + TpConnectionManager *cm = NULL; + TpConnectionManagerProtocol *protocol = NULL; + gboolean visible = FALSE; + + gtk_tree_model_get (model, iter, COL_CM, &cm, COL_PROTOCOL, &protocol, -1); + + if (cm != NULL && protocol != NULL) + { + visible = priv->filter_func (cm, protocol, priv->filter_user_data); + g_object_unref (cm); + } + + return visible; +} + +/* public methods */ + +/** + * empathy_protocol_chooser_get_selected_protocol: + * @protocol_chooser: an #EmpathyProtocolChooser + * + * Returns a pointer to the selected #TpConnectionManagerProtocol in + * @protocol_chooser. + * + * Return value: a pointer to the selected #TpConnectionManagerProtocol + */ +TpConnectionManager * +empathy_protocol_chooser_dup_selected ( + EmpathyProtocolChooser *protocol_chooser, + TpConnectionManagerProtocol **protocol) +{ + GtkTreeIter iter; + TpConnectionManager *cm = NULL; + GtkTreeModel *cur_model; + + g_return_val_if_fail (EMPATHY_IS_PROTOCOL_CHOOSER (protocol_chooser), NULL); + + /* get the current model from the chooser, as we could either be filtering + * or not. + */ + cur_model = gtk_combo_box_get_model (GTK_COMBO_BOX (protocol_chooser)); + + if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (protocol_chooser), &iter)) + { + gtk_tree_model_get (GTK_TREE_MODEL (cur_model), &iter, + COL_CM, &cm, + -1); + + if (protocol != NULL) + gtk_tree_model_get (GTK_TREE_MODEL (cur_model), &iter, + COL_PROTOCOL, protocol, + -1); + } + + return cm; +} + +/** + * empathy_protocol_chooser_new: + * + * Triggers the creation of a new #EmpathyProtocolChooser. + * + * Return value: a new #EmpathyProtocolChooser widget + */ + +GtkWidget * +empathy_protocol_chooser_new (void) +{ + return GTK_WIDGET (g_object_new (EMPATHY_TYPE_PROTOCOL_CHOOSER, NULL)); +} + +void +empathy_protocol_chooser_set_visible (EmpathyProtocolChooser *protocol_chooser, + EmpathyProtocolChooserFilterFunc func, + gpointer user_data) +{ + EmpathyProtocolChooserPriv *priv; + GtkTreeModel *filter_model; + + g_return_if_fail (EMPATHY_IS_PROTOCOL_CHOOSER (protocol_chooser)); + + priv = GET_PRIV (protocol_chooser); + priv->filter_func = func; + priv->filter_user_data = user_data; + + filter_model = gtk_tree_model_filter_new (GTK_TREE_MODEL (priv->store), + NULL); + gtk_combo_box_set_model (GTK_COMBO_BOX (protocol_chooser), filter_model); + g_object_unref (filter_model); + + gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER + (filter_model), protocol_chooser_filter_visible_func, + protocol_chooser, NULL); + + gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model)); + + gtk_combo_box_set_active (GTK_COMBO_BOX (protocol_chooser), 0); +} diff --git a/libempathy-gtk/empathy-protocol-chooser.h b/libempathy-gtk/empathy-protocol-chooser.h new file mode 100644 index 000000000..55e8e355e --- /dev/null +++ b/libempathy-gtk/empathy-protocol-chooser.h @@ -0,0 +1,77 @@ +/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */ +/* + * Copyright (C) 2007-2009 Collabora Ltd. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Authors: Xavier Claessens <xclaesse@gmail.com> + * Jonny Lamb <jonny.lamb@collabora.co.uk + */ + +#ifndef __EMPATHY_PROTOCOL_CHOOSER_H__ +#define __EMPATHY_PROTOCOL_CHOOSER_H__ + +#include <glib-object.h> +#include <gtk/gtk.h> + +#include <telepathy-glib/connection-manager.h> + +G_BEGIN_DECLS + +#define EMPATHY_TYPE_PROTOCOL_CHOOSER (empathy_protocol_chooser_get_type ()) +#define EMPATHY_PROTOCOL_CHOOSER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), \ + EMPATHY_TYPE_PROTOCOL_CHOOSER, EmpathyProtocolChooser)) +#define EMPATHY_PROTOCOL_CHOOSER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), \ + EMPATHY_TYPE_PROTOCOL_CHOOSER, EmpathyProtocolChooserClass)) +#define EMPATHY_IS_PROTOCOL_CHOOSER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), \ + EMPATHY_TYPE_PROTOCOL_CHOOSER)) +#define EMPATHY_IS_PROTOCOL_CHOOSER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), \ + EMPATHY_TYPE_PROTOCOL_CHOOSER)) +#define EMPATHY_PROTOCOL_CHOOSER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o),\ + EMPATHY_TYPE_PROTOCOL_CHOOSER, EmpathyProtocolChooserClass)) + +typedef struct _EmpathyProtocolChooser EmpathyProtocolChooser; +typedef struct _EmpathyProtocolChooserClass EmpathyProtocolChooserClass; + +struct _EmpathyProtocolChooser +{ + GtkComboBox parent; + + /*<private>*/ + gpointer priv; +}; + +struct _EmpathyProtocolChooserClass +{ + GtkComboBoxClass parent_class; +}; + +typedef gboolean (*EmpathyProtocolChooserFilterFunc) (TpConnectionManager *cm, + TpConnectionManagerProtocol *protocol, gpointer user_data); + +GType empathy_protocol_chooser_get_type (void) G_GNUC_CONST; +GtkWidget * empathy_protocol_chooser_new (void); +TpConnectionManager *empathy_protocol_chooser_dup_selected ( + EmpathyProtocolChooser *protocol_chooser, + TpConnectionManagerProtocol **protocol); + +void empathy_protocol_chooser_set_visible ( + EmpathyProtocolChooser *protocol_chooser, + EmpathyProtocolChooserFilterFunc func, + gpointer user_data); + + +G_END_DECLS +#endif /* __EMPATHY_PROTOCOL_CHOOSER_H__ */ diff --git a/libempathy-gtk/empathy-share-my-desktop.c b/libempathy-gtk/empathy-share-my-desktop.c index b981d5ade..01c2e183f 100644 --- a/libempathy-gtk/empathy-share-my-desktop.c +++ b/libempathy-gtk/empathy-share-my-desktop.c @@ -23,6 +23,8 @@ #include <dbus/dbus-glib.h> #include <telepathy-glib/util.h> #include <telepathy-glib/contact.h> +#include <telepathy-glib/channel.h> +#include <telepathy-glib/interfaces.h> #define DEBUG_FLAG EMPATHY_DEBUG_SHARE_DESKTOP #include <libempathy/empathy-debug.h> diff --git a/libempathy-gtk/empathy-theme-adium.c b/libempathy-gtk/empathy-theme-adium.c index b286464d2..66d914607 100644 --- a/libempathy-gtk/empathy-theme-adium.c +++ b/libempathy-gtk/empathy-theme-adium.c @@ -31,7 +31,6 @@ #include <libempathy/empathy-time.h> #include <libempathy/empathy-utils.h> -#include <libmissioncontrol/mc-profile.h> #include "empathy-theme-adium.h" #include "empathy-smiley-manager.h" @@ -479,7 +478,6 @@ theme_adium_append_html (EmpathyThemeAdium *theme, } else if (theme_adium_match (&cur, "%time")) { gchar *format = NULL; gchar *end; - /* Time can be in 2 formats: * %time% or %time{strftime format}% * Extract the time format if provided. */ @@ -524,7 +522,6 @@ theme_adium_append_message (EmpathyChatView *view, EmpathyThemeAdiumPriv *priv = GET_PRIV (theme); EmpathyContact *sender; EmpathyAccount *account; - McProfile *account_profile; gchar *dup_body = NULL; const gchar *body; const gchar *name; @@ -548,8 +545,8 @@ theme_adium_append_message (EmpathyChatView *view, /* Get information */ sender = empathy_message_get_sender (msg); account = empathy_contact_get_account (sender); - account_profile = empathy_account_get_profile (account); - service_name = mc_profile_get_display_name (account_profile); + service_name = empathy_protocol_name_to_display_name + (empathy_account_get_protocol (account)); timestamp = empathy_message_get_timestamp (msg); body = empathy_message_get_body (msg); dup_body = theme_adium_parse_body (theme, body); diff --git a/libempathy-gtk/empathy-ui-utils.c b/libempathy-gtk/empathy-ui-utils.c index 32abc5884..c12cbd1c9 100644 --- a/libempathy-gtk/empathy-ui-utils.c +++ b/libempathy-gtk/empathy-ui-utils.c @@ -38,8 +38,6 @@ #include <gtk/gtk.h> #include <gio/gio.h> -#include <libmissioncontrol/mc-profile.h> - #include "empathy-ui-utils.h" #include "empathy-images.h" #include "empathy-conf.h" @@ -183,16 +181,6 @@ empathy_builder_unref_and_keep_widget (GtkBuilder *gui, } const gchar * -empathy_icon_name_from_account (EmpathyAccount *account) -{ - McProfile *profile; - - profile = empathy_account_get_profile (account); - - return mc_profile_get_icon_name (profile); -} - -const gchar * empathy_icon_name_for_presence (TpConnectionPresenceType presence) { switch (presence) { diff --git a/libempathy-gtk/empathy-ui-utils.h b/libempathy-gtk/empathy-ui-utils.h index 3299a44e0..afb409af4 100644 --- a/libempathy-gtk/empathy-ui-utils.h +++ b/libempathy-gtk/empathy-ui-utils.h @@ -34,8 +34,6 @@ #include <gtk/gtk.h> -#include <libmissioncontrol/mc-profile.h> - #include <libempathy/empathy-contact.h> #include <libempathy/empathy-account.h> #include <libempathy/empathy-ft-handler.h> @@ -59,7 +57,6 @@ GtkWidget *empathy_builder_unref_and_keep_widget (GtkBuilder *gui, GtkWidget *root); /* Pixbufs */ -const gchar * empathy_icon_name_from_account (EmpathyAccount *account); const gchar * empathy_icon_name_for_presence (TpConnectionPresenceType presence); const gchar * empathy_icon_name_for_contact (EmpathyContact *contact); GdkPixbuf * empathy_pixbuf_from_data (gchar *data, diff --git a/libempathy-gtk/empathy-video-src.c b/libempathy-gtk/empathy-video-src.c index bd014a5d9..96324e06c 100644 --- a/libempathy-gtk/empathy-video-src.c +++ b/libempathy-gtk/empathy-video-src.c @@ -137,7 +137,15 @@ empathy_video_src_finalize (GObject *object) GstElement * empathy_video_src_new (void) { - return GST_ELEMENT (g_object_new (EMPATHY_TYPE_GST_VIDEO_SRC, NULL)); + static gboolean registered = FALSE; + + if (!registered) { + if (!gst_element_register (NULL, "empathyvideosrc", + GST_RANK_NONE, EMPATHY_TYPE_GST_VIDEO_SRC)) + return NULL; + registered = TRUE; + } + return gst_element_factory_make ("empathyvideosrc", NULL); } void diff --git a/libempathy/Makefile.am b/libempathy/Makefile.am index 0250a63d8..ad36ede33 100644 --- a/libempathy/Makefile.am +++ b/libempathy/Makefile.am @@ -26,7 +26,7 @@ lib_LTLIBRARIES = libempathy.la libempathy_la_SOURCES = \ empathy-account.c \ - empathy-account-priv.h \ + empathy-account-settings.c \ empathy-account-manager.c \ empathy-chatroom.c \ empathy-chatroom-manager.c \ @@ -38,6 +38,7 @@ libempathy_la_SOURCES = \ empathy-contact-list.c \ empathy-contact-manager.c \ empathy-contact-monitor.c \ + empathy-connection-managers.c \ empathy-debug.c \ empathy-debugger.c \ empathy-dispatcher.c \ @@ -79,7 +80,8 @@ libempathy_la_LDFLAGS = \ -export-symbols-regex ^empathy_ libempathy_headers = \ - empathy-account.h \ + empathy-account-settings.h \ + empathy-account.h \ empathy-account-manager.h \ empathy-chatroom.h \ empathy-chatroom-manager.h \ @@ -91,6 +93,7 @@ libempathy_headers = \ empathy-contact-list.h \ empathy-contact-manager.h \ empathy-contact-monitor.h \ + empathy-connection-managers.h \ empathy-debug.h \ empathy-debugger.h \ empathy-dispatcher.h \ diff --git a/libempathy/empathy-account-manager.c b/libempathy/empathy-account-manager.c index fd8a21b1d..75de6f193 100644 --- a/libempathy/empathy-account-manager.c +++ b/libempathy/empathy-account-manager.c @@ -21,10 +21,14 @@ #include "config.h" -#include <libmissioncontrol/mc-account-monitor.h> +#include <telepathy-glib/util.h> +#include <telepathy-glib/account-manager.h> +#include <telepathy-glib/enums.h> +#include <telepathy-glib/defs.h> +#include <telepathy-glib/dbus.h> +#include <telepathy-glib/interfaces.h> #include "empathy-account-manager.h" -#include "empathy-account-priv.h" #include "empathy-marshal.h" #include "empathy-utils.h" @@ -33,15 +37,33 @@ #define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyAccountManager) -typedef struct { - McAccountMonitor *monitor; - MissionControl *mc; +#define MC5_BUS_NAME "org.freedesktop.Telepathy.MissionControl5" +typedef struct { /* (owned) unique name -> (reffed) EmpathyAccount */ GHashTable *accounts; int connected; int connecting; gboolean dispose_run; + gboolean ready; + TpAccountManager *tp_manager; + TpDBusDaemon *dbus; + + /* global presence */ + EmpathyAccount *global_account; + + TpConnectionPresenceType global_presence; + gchar *global_status; + gchar *global_status_message; + + /* requested global presence, could be different + * from the actual global one. + */ + TpConnectionPresenceType requested_presence; + gchar *requested_status; + gchar *requested_status_message; + + GHashTable *create_results; } EmpathyAccountManagerPriv; enum { @@ -51,38 +73,20 @@ enum { ACCOUNT_DISABLED, ACCOUNT_CHANGED, ACCOUNT_CONNECTION_CHANGED, - ACCOUNT_PRESENCE_CHANGED, + GLOBAL_PRESENCE_CHANGED, NEW_CONNECTION, LAST_SIGNAL }; +enum { + PROP_READY = 1, +}; + static guint signals[LAST_SIGNAL]; static EmpathyAccountManager *manager_singleton = NULL; G_DEFINE_TYPE (EmpathyAccountManager, empathy_account_manager, G_TYPE_OBJECT); -static TpConnectionPresenceType -mc_presence_to_tp_presence (McPresence presence) -{ - switch (presence) - { - case MC_PRESENCE_OFFLINE: - return TP_CONNECTION_PRESENCE_TYPE_OFFLINE; - case MC_PRESENCE_AVAILABLE: - return TP_CONNECTION_PRESENCE_TYPE_AVAILABLE; - case MC_PRESENCE_AWAY: - return TP_CONNECTION_PRESENCE_TYPE_AWAY; - case MC_PRESENCE_EXTENDED_AWAY: - return TP_CONNECTION_PRESENCE_TYPE_EXTENDED_AWAY; - case MC_PRESENCE_HIDDEN: - return TP_CONNECTION_PRESENCE_TYPE_HIDDEN; - case MC_PRESENCE_DO_NOT_DISTURB: - return TP_CONNECTION_PRESENCE_TYPE_BUSY; - default: - return TP_CONNECTION_PRESENCE_TYPE_UNSET; - } -} - static void emp_account_connection_cb (EmpathyAccount *account, GParamSpec *spec, @@ -98,6 +102,17 @@ emp_account_connection_cb (EmpathyAccount *account, } static void +emp_account_enabled_cb (EmpathyAccount *account, + GParamSpec *spec, + gpointer manager) +{ + if (empathy_account_is_enabled (account)) + g_signal_emit (manager, signals[ACCOUNT_ENABLED], 0, account); + else + g_signal_emit (manager, signals[ACCOUNT_DISABLED], 0, account); +} + +static void emp_account_status_changed_cb (EmpathyAccount *account, TpConnectionStatus old, TpConnectionStatus new, @@ -136,270 +151,333 @@ emp_account_status_changed_cb (EmpathyAccount *account, } static void -emp_account_presence_changed_cb (EmpathyAccount *account, - TpConnectionPresenceType old, - TpConnectionPresenceType new, - gpointer user_data) -{ - EmpathyAccountManager *manager = EMPATHY_ACCOUNT_MANAGER (user_data); - g_signal_emit (manager, signals[ACCOUNT_PRESENCE_CHANGED], 0, - account, new, old); -} - -static EmpathyAccount * -create_account (EmpathyAccountManager *manager, - const gchar *account_name, - McAccount *mc_account) +emp_account_manager_update_global_presence (EmpathyAccountManager *manager) { EmpathyAccountManagerPriv *priv = GET_PRIV (manager); - EmpathyAccount *account; - TpConnectionStatus status; - TpConnectionPresenceType presence; - McPresence mc_presence; - TpConnection *connection; - GError *error = NULL; - - if ((account = g_hash_table_lookup (priv->accounts, account_name)) != NULL) - return account; - - account = _empathy_account_new (mc_account); - g_hash_table_insert (priv->accounts, g_strdup (account_name), - account); + TpConnectionPresenceType presence = TP_CONNECTION_PRESENCE_TYPE_OFFLINE; + EmpathyAccount *account = NULL; + GHashTableIter iter; + gpointer value; - _empathy_account_set_enabled (account, - mc_account_is_enabled (mc_account)); + /* Make the global presence is equal to the presence of the account with the + * highest availability */ - g_signal_emit (manager, signals[ACCOUNT_CREATED], 0, account); + g_hash_table_iter_init (&iter, priv->accounts); + while (g_hash_table_iter_next (&iter, NULL, &value)) + { + EmpathyAccount *a = EMPATHY_ACCOUNT (value); + TpConnectionPresenceType p; - g_signal_connect (account, "notify::connection", - G_CALLBACK (emp_account_connection_cb), manager); + g_object_get (a, "presence", &p, NULL); - connection = mission_control_get_tpconnection (priv->mc, - mc_account, NULL); - _empathy_account_set_connection (account, connection); + if (tp_connection_presence_type_cmp_availability (p, presence) > 0) + { + account = a; + presence = p; + } + } - status = mission_control_get_connection_status (priv->mc, - mc_account, &error); + priv->global_account = account; + g_free (priv->global_status); + g_free (priv->global_status_message); - if (error != NULL) + if (account == NULL) { - status = TP_CONNECTION_STATUS_DISCONNECTED; - g_clear_error (&error); + priv->global_presence = presence; + priv->global_status = NULL; + priv->global_status_message = NULL; + return; } - mc_presence = mission_control_get_presence_actual (priv->mc, &error); - if (error != NULL) - { - presence = TP_CONNECTION_PRESENCE_TYPE_UNSET; - g_clear_error (&error); - } - else + g_object_get (account, + "presence", &priv->global_presence, + "status", &priv->global_status, + "status-message", &priv->global_status_message, + NULL); + + DEBUG ("Updated global presence to: %s (%d) \"%s\"", + priv->global_status, priv->global_presence, priv->global_status_message); +} + +static void +emp_account_presence_changed_cb (EmpathyAccount *account, + TpConnectionPresenceType presence, + const gchar *status, + const gchar *status_message, + gpointer user_data) +{ + EmpathyAccountManager *manager = EMPATHY_ACCOUNT_MANAGER (user_data); + EmpathyAccountManagerPriv *priv = GET_PRIV (manager); + + if (tp_connection_presence_type_cmp_availability (presence, + priv->global_presence) > 0) { - presence = mc_presence_to_tp_presence (mc_presence); - } + priv->global_account = account; - g_signal_connect (account, "status-changed", - G_CALLBACK (emp_account_status_changed_cb), manager); + priv->global_presence = presence; - g_signal_connect (account, "presence-changed", - G_CALLBACK (emp_account_presence_changed_cb), manager); + g_free (priv->global_status); + priv->global_status = g_strdup (status); - _empathy_account_set_status (account, status, - TP_CONNECTION_STATUS_REASON_NONE_SPECIFIED, - presence); + g_free (priv->global_status_message); + priv->global_status_message = g_strdup (status_message); - return account; + goto signal; + } + else if (priv->global_account == account) + { + emp_account_manager_update_global_presence (manager); + goto signal; + } + + return; +signal: + g_signal_emit (manager, signals[GLOBAL_PRESENCE_CHANGED], 0, + priv->global_presence, priv->global_status, priv->global_status_message); } static void -account_created_cb (McAccountMonitor *mon, - gchar *account_name, - EmpathyAccountManager *manager) +emp_account_removed_cb (EmpathyAccount *account, gpointer user_data) { - McAccount *mc_account = mc_account_lookup (account_name); + EmpathyAccountManager *manager = EMPATHY_ACCOUNT_MANAGER (user_data); + EmpathyAccountManagerPriv *priv = GET_PRIV (manager); - if (mc_account != NULL) - create_account (manager, account_name, mc_account); + g_object_ref (account); + g_hash_table_remove (priv->accounts, + empathy_account_get_unique_name (account)); + + g_signal_emit (manager, signals[ACCOUNT_DELETED], 0, account); + g_object_unref (account); } static void -account_deleted_cb (McAccountMonitor *mon, - gchar *account_name, - EmpathyAccountManager *manager) +empathy_account_manager_check_ready (EmpathyAccountManager *manager) { EmpathyAccountManagerPriv *priv = GET_PRIV (manager); - EmpathyAccount *account; + GHashTableIter iter; + gpointer value; - account = g_hash_table_lookup (priv->accounts, account_name); + if (priv->ready) + return; - if (account) + g_hash_table_iter_init (&iter, priv->accounts); + while (g_hash_table_iter_next (&iter, NULL, &value)) { - g_signal_emit (manager, signals[ACCOUNT_DELETED], 0, account); - g_hash_table_remove (priv->accounts, account_name); + EmpathyAccount *account = EMPATHY_ACCOUNT (value); + gboolean ready; + + g_object_get (account, "ready", &ready, NULL); + + if (!ready) + return; } + + /* Rerequest global presence on the initial set of accounts for cases where a + * global presence was requested before the manager was ready */ + if (priv->requested_presence != TP_CONNECTION_PRESENCE_TYPE_UNSET) + empathy_account_manager_request_global_presence (manager, + priv->requested_presence, + priv->requested_status, + priv->requested_status_message); + + priv->ready = TRUE; + g_object_notify (G_OBJECT (manager), "ready"); } static void -account_changed_cb (McAccountMonitor *mon, - gchar *account_name, - EmpathyAccountManager *manager) +account_manager_account_ready_cb (GObject *obj, + GParamSpec *spec, + gpointer user_data) { + EmpathyAccountManager *manager = EMPATHY_ACCOUNT_MANAGER (user_data); EmpathyAccountManagerPriv *priv = GET_PRIV (manager); - EmpathyAccount *account; + EmpathyAccount *account = EMPATHY_ACCOUNT (obj); + GSimpleAsyncResult *result; + gboolean ready; - account = g_hash_table_lookup (priv->accounts, account_name); + g_object_get (account, "ready", &ready, NULL); - if (account != NULL) - g_signal_emit (manager, signals[ACCOUNT_CHANGED], 0, account); + if (!ready) + return; + + /* see if there's any pending callbacks for this account */ + result = g_hash_table_lookup (priv->create_results, account); + if (result != NULL) + { + g_simple_async_result_set_op_res_gpointer ( + G_SIMPLE_ASYNC_RESULT (result), account, NULL); + + g_simple_async_result_complete (result); + + g_hash_table_remove (priv->create_results, account); + g_object_unref (result); + } + + g_signal_emit (manager, signals[ACCOUNT_CREATED], 0, account); + + g_signal_connect (account, "notify::connection", + G_CALLBACK (emp_account_connection_cb), manager); + + g_signal_connect (account, "notify::enabled", + G_CALLBACK (emp_account_enabled_cb), manager); + + g_signal_connect (account, "status-changed", + G_CALLBACK (emp_account_status_changed_cb), manager); + + g_signal_connect (account, "presence-changed", + G_CALLBACK (emp_account_presence_changed_cb), manager); + + g_signal_connect (account, "removed", + G_CALLBACK (emp_account_removed_cb), manager); + + empathy_account_manager_check_ready (manager); } -static void -account_disabled_cb (McAccountMonitor *mon, - gchar *account_name, - EmpathyAccountManager *manager) +EmpathyAccount * +empathy_account_manager_get_account (EmpathyAccountManager *manager, + const gchar *path) { EmpathyAccountManagerPriv *priv = GET_PRIV (manager); - EmpathyAccount *account; - account = g_hash_table_lookup (priv->accounts, account_name); - - if (account) - { - _empathy_account_set_enabled (account, FALSE); - g_signal_emit (manager, signals[ACCOUNT_DISABLED], 0, account); - } + return g_hash_table_lookup (priv->accounts, path); } -static void -account_enabled_cb (McAccountMonitor *mon, - gchar *account_name, - EmpathyAccountManager *manager) +EmpathyAccount * +empathy_account_manager_ensure_account (EmpathyAccountManager *manager, + const gchar *path) { EmpathyAccountManagerPriv *priv = GET_PRIV (manager); EmpathyAccount *account; - account = g_hash_table_lookup (priv->accounts, account_name); + account = g_hash_table_lookup (priv->accounts, path); + if (account != NULL) + return account; + + account = empathy_account_new (priv->dbus, path); + g_hash_table_insert (priv->accounts, g_strdup (path), account); - if (account) - { - _empathy_account_set_enabled (account, TRUE); - g_signal_emit (manager, signals[ACCOUNT_ENABLED], 0, account); - } + g_signal_connect (account, "notify::ready", + G_CALLBACK (account_manager_account_ready_cb), manager); + + return account; } -typedef struct { - TpConnectionStatus status; - TpConnectionPresenceType presence; - TpConnectionStatusReason reason; - gchar *unique_name; - EmpathyAccountManager *manager; - McAccount *mc_account; -} ChangedSignalData; -static gboolean -account_status_changed_idle_cb (ChangedSignalData *signal_data) +static void +account_manager_got_all_cb (TpProxy *proxy, + GHashTable *properties, + const GError *error, + gpointer user_data, + GObject *weak_object) { - EmpathyAccount *account; - EmpathyAccountManager *manager = signal_data->manager; - EmpathyAccountManagerPriv *priv = GET_PRIV (manager); + EmpathyAccountManager *manager = EMPATHY_ACCOUNT_MANAGER (weak_object); + GPtrArray *accounts; + int i; - account = g_hash_table_lookup (priv->accounts, - signal_data->unique_name); + if (error != NULL) + { + DEBUG ("Failed to get account manager properties: %s", error->message); + return; + } - if (account) + accounts = tp_asv_get_boxed (properties, "ValidAccounts", + EMPATHY_ARRAY_TYPE_OBJECT); + + if (accounts != NULL) { - if (empathy_account_get_connection (account) == NULL) + for (i = 0; i < accounts->len; i++) { - TpConnection *connection; - - connection = mission_control_get_tpconnection (priv->mc, - signal_data->mc_account, NULL); + gchar *name = g_ptr_array_index (accounts, i); - if (connection != NULL) - { - _empathy_account_set_connection (account, connection); - g_object_unref (connection); - } + empathy_account_manager_ensure_account (manager, name); } - - _empathy_account_set_status (account, signal_data->status, - signal_data->reason, - signal_data->presence); } - g_object_unref (signal_data->manager); - g_object_unref (signal_data->mc_account); - g_free (signal_data->unique_name); - g_slice_free (ChangedSignalData, signal_data); - - return FALSE; + empathy_account_manager_check_ready (manager); } static void -account_status_changed_cb (MissionControl *mc, - TpConnectionStatus status, - McPresence presence, - TpConnectionStatusReason reason, - const gchar *unique_name, - EmpathyAccountManager *manager) +account_validity_changed_cb (TpAccountManager *proxy, + const gchar *path, + gboolean valid, + gpointer user_data, + GObject *weak_object) { - ChangedSignalData *data; + EmpathyAccountManager *manager = EMPATHY_ACCOUNT_MANAGER (weak_object); + + if (!valid) + return; - DEBUG ("Status of account %s became " - "status: %d presence: %d reason: %d", unique_name, status, - presence, reason); + empathy_account_manager_ensure_account (manager, path); +} - data = g_slice_new0 (ChangedSignalData); - data->status = status; - data->presence = mc_presence_to_tp_presence (presence); - data->reason = reason; - data->unique_name = g_strdup (unique_name); - data->manager = g_object_ref (manager); - data->mc_account = mc_account_lookup (unique_name); +static void +account_manager_name_owner_cb (TpDBusDaemon *proxy, + const gchar *name, + const gchar *new_owner, + gpointer user_data) +{ + EmpathyAccountManager *manager = EMPATHY_ACCOUNT_MANAGER (user_data); + EmpathyAccountManagerPriv *priv = GET_PRIV (manager); - g_idle_add ((GSourceFunc) account_status_changed_idle_cb, data); + tp_dbus_daemon_cancel_name_owner_watch (proxy, name, + account_manager_name_owner_cb, user_data); + + priv->tp_manager = tp_account_manager_new (priv->dbus); + + tp_cli_account_manager_connect_to_account_validity_changed ( + priv->tp_manager, + account_validity_changed_cb, + NULL, + NULL, + G_OBJECT (manager), + NULL); + + tp_cli_dbus_properties_call_get_all (priv->tp_manager, -1, + TP_IFACE_ACCOUNT_MANAGER, + account_manager_got_all_cb, + NULL, + NULL, + G_OBJECT (manager)); } static void empathy_account_manager_init (EmpathyAccountManager *manager) { EmpathyAccountManagerPriv *priv; - GList *mc_accounts, *l; + TpProxy *mc5_proxy; priv = G_TYPE_INSTANCE_GET_PRIVATE (manager, EMPATHY_TYPE_ACCOUNT_MANAGER, EmpathyAccountManagerPriv); manager->priv = priv; - priv->monitor = mc_account_monitor_new (); - priv->mc = empathy_mission_control_dup_singleton (); priv->connected = priv->connecting = 0; - priv->dispose_run = FALSE; + priv->global_presence = TP_CONNECTION_PRESENCE_TYPE_UNSET; priv->accounts = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_object_unref); - mc_accounts = mc_accounts_list (); + priv->create_results = g_hash_table_new (g_direct_hash, g_direct_equal); + + priv->dbus = tp_dbus_daemon_dup (NULL); - for (l = mc_accounts; l; l = l->next) - account_created_cb (priv->monitor, - (char *) mc_account_get_unique_name (l->data), manager); + tp_dbus_daemon_watch_name_owner (priv->dbus, + TP_ACCOUNT_MANAGER_BUS_NAME, + account_manager_name_owner_cb, + manager, + NULL); - g_signal_connect (priv->monitor, "account-created", - G_CALLBACK (account_created_cb), manager); - g_signal_connect (priv->monitor, "account-deleted", - G_CALLBACK (account_deleted_cb), manager); - g_signal_connect (priv->monitor, "account-disabled", - G_CALLBACK (account_disabled_cb), manager); - g_signal_connect (priv->monitor, "account-enabled", - G_CALLBACK (account_enabled_cb), manager); - g_signal_connect (priv->monitor, "account-changed", - G_CALLBACK (account_changed_cb), manager); + /* trigger MC5 starting */ + mc5_proxy = g_object_new (TP_TYPE_PROXY, + "dbus-daemon", priv->dbus, + "dbus-connection", tp_proxy_get_dbus_connection (TP_PROXY (priv->dbus)), + "bus-name", MC5_BUS_NAME, + "object-path", "/", + NULL); - dbus_g_proxy_connect_signal (DBUS_G_PROXY (priv->mc), "AccountStatusChanged", - G_CALLBACK (account_status_changed_cb), - manager, NULL); + tp_cli_dbus_peer_call_ping (mc5_proxy, -1, NULL, NULL, NULL, NULL); - mc_accounts_list_free (mc_accounts); + g_object_unref (mc5_proxy); } static void @@ -408,8 +486,15 @@ do_finalize (GObject *obj) EmpathyAccountManager *manager = EMPATHY_ACCOUNT_MANAGER (obj); EmpathyAccountManagerPriv *priv = GET_PRIV (manager); + g_hash_table_destroy (priv->create_results); g_hash_table_destroy (priv->accounts); + g_free (priv->global_status); + g_free (priv->global_status_message); + + g_free (priv->requested_status); + g_free (priv->requested_status_message); + G_OBJECT_CLASS (empathy_account_manager_parent_class)->finalize (obj); } @@ -418,37 +503,37 @@ do_dispose (GObject *obj) { EmpathyAccountManager *manager = EMPATHY_ACCOUNT_MANAGER (obj); EmpathyAccountManagerPriv *priv = GET_PRIV (manager); + GHashTableIter iter; + GSimpleAsyncResult *result; if (priv->dispose_run) return; priv->dispose_run = TRUE; - dbus_g_proxy_disconnect_signal (DBUS_G_PROXY (priv->mc), - "AccountStatusChanged", - G_CALLBACK (account_status_changed_cb), - obj); - - if (priv->monitor) + /* the manager is being destroyed while there are account creation + * processes pending; this should not happen, but emit the callbacks + * with an error anyway. + */ + g_hash_table_iter_init (&iter, priv->create_results); + while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &result)) { - g_signal_handlers_disconnect_by_func (priv->monitor, - account_created_cb, obj); - g_signal_handlers_disconnect_by_func (priv->monitor, - account_deleted_cb, obj); - g_signal_handlers_disconnect_by_func (priv->monitor, - account_disabled_cb, obj); - g_signal_handlers_disconnect_by_func (priv->monitor, - account_enabled_cb, obj); - g_signal_handlers_disconnect_by_func (priv->monitor, - account_changed_cb, obj); - g_object_unref (priv->monitor); - priv->monitor = NULL; + g_simple_async_result_set_error (result, G_IO_ERROR, + G_IO_ERROR_CANCELLED, "The account manager was disposed while " + "creating the account"); + g_simple_async_result_complete (result); + g_object_unref (result); } + g_hash_table_remove_all (priv->create_results); - if (priv->mc) - g_object_unref (priv->mc); + if (priv->dbus != NULL) + { + tp_dbus_daemon_cancel_name_owner_watch (priv->dbus, + TP_ACCOUNT_MANAGER_BUS_NAME, account_manager_name_owner_cb, manager); - g_hash_table_remove_all (priv->accounts); + g_object_unref (priv->dbus); + priv->dbus = NULL; + } G_OBJECT_CLASS (empathy_account_manager_parent_class)->dispose (obj); } @@ -477,6 +562,26 @@ do_constructor (GType type, } static void +do_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + EmpathyAccountManager *manager = EMPATHY_ACCOUNT_MANAGER (object); + EmpathyAccountManagerPriv *priv = GET_PRIV (manager); + + switch (prop_id) + { + case PROP_READY: + g_value_set_boolean (value, priv->ready); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void empathy_account_manager_class_init (EmpathyAccountManagerClass *klass) { GObjectClass *oclass = G_OBJECT_CLASS (klass); @@ -484,6 +589,14 @@ empathy_account_manager_class_init (EmpathyAccountManagerClass *klass) oclass->finalize = do_finalize; oclass->dispose = do_dispose; oclass->constructor = do_constructor; + oclass->get_property = do_get_property; + + g_object_class_install_property (oclass, PROP_READY, + g_param_spec_boolean ("ready", + "Ready", + "Whether the initial state dump from the account manager is finished", + FALSE, + G_PARAM_STATIC_STRINGS | G_PARAM_READABLE)); signals[ACCOUNT_CREATED] = g_signal_new ("account-created", @@ -548,17 +661,17 @@ empathy_account_manager_class_init (EmpathyAccountManagerClass *klass) G_TYPE_UINT, /* actual connection */ G_TYPE_UINT); /* previous connection */ - signals[ACCOUNT_PRESENCE_CHANGED] = - g_signal_new ("account-presence-changed", + signals[GLOBAL_PRESENCE_CHANGED] = + g_signal_new ("global-presence-changed", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, - _empathy_marshal_VOID__OBJECT_INT_INT, + _empathy_marshal_VOID__UINT_STRING_STRING, G_TYPE_NONE, - 3, EMPATHY_TYPE_ACCOUNT, - G_TYPE_INT, /* actual presence */ - G_TYPE_INT); /* previous presence */ + 3, G_TYPE_UINT, /* Presence type */ + G_TYPE_STRING, /* status */ + G_TYPE_STRING); /* stauts message*/ signals[NEW_CONNECTION] = g_signal_new ("new-connection", @@ -581,14 +694,12 @@ empathy_account_manager_dup_singleton (void) return g_object_new (EMPATHY_TYPE_ACCOUNT_MANAGER, NULL); } -EmpathyAccount * -empathy_account_manager_create (EmpathyAccountManager *manager, - McProfile *profile) +gboolean +empathy_account_manager_is_ready (EmpathyAccountManager *manager) { - McAccount *mc_account = mc_account_create (profile); - return g_object_ref (create_account (manager, - mc_account_get_unique_name (mc_account), - mc_account)); + EmpathyAccountManagerPriv *priv = GET_PRIV (manager); + + return priv->ready; } int @@ -636,8 +747,9 @@ empathy_account_manager_get_count (EmpathyAccountManager *manager) } EmpathyAccount * -empathy_account_manager_get_account (EmpathyAccountManager *manager, - TpConnection *connection) +empathy_account_manager_get_account_for_connection ( + EmpathyAccountManager *manager, + TpConnection *connection) { EmpathyAccountManagerPriv *priv; GHashTableIter iter; @@ -659,21 +771,6 @@ empathy_account_manager_get_account (EmpathyAccountManager *manager, return NULL; } -EmpathyAccount * -empathy_account_manager_lookup (EmpathyAccountManager *manager, - const gchar *unique_name) -{ - EmpathyAccountManagerPriv *priv = GET_PRIV (manager); - EmpathyAccount *account; - - account = g_hash_table_lookup (priv->accounts, unique_name); - - if (account != NULL) - g_object_ref (account); - - return account; -} - GList * empathy_account_manager_dup_accounts (EmpathyAccountManager *manager) { @@ -726,8 +823,154 @@ empathy_account_manager_dup_connections (EmpathyAccountManager *manager) } void -empathy_account_manager_remove (EmpathyAccountManager *manager, - EmpathyAccount *account) +empathy_account_manager_request_global_presence ( + EmpathyAccountManager *manager, + TpConnectionPresenceType type, + const gchar *status, + const gchar *message) +{ + EmpathyAccountManagerPriv *priv = GET_PRIV (manager); + GHashTableIter iter; + gpointer value; + + DEBUG ("request global presence, type: %d, status: %s, message: %s", + type, status, message); + + g_hash_table_iter_init (&iter, priv->accounts); + while (g_hash_table_iter_next (&iter, NULL, &value)) + { + EmpathyAccount *account = EMPATHY_ACCOUNT (value); + gboolean ready; + + g_object_get (account, "ready", &ready, NULL); + + if (ready) + empathy_account_request_presence (account, type, status, message); + } + + /* save the requested global presence, to use it in case we create + * new accounts or some accounts become ready. + */ + priv->requested_presence = type; + + if (tp_strdiff (priv->requested_status, status)) + { + g_free (priv->requested_status); + priv->requested_status = g_strdup (status); + } + + if (tp_strdiff (priv->requested_status_message, message)) + { + g_free (priv->requested_status_message); + priv->requested_status_message = g_strdup (message); + } +} + +TpConnectionPresenceType +empathy_account_manager_get_requested_global_presence ( + EmpathyAccountManager *manager, + gchar **status, + gchar **message) +{ + EmpathyAccountManagerPriv *priv = GET_PRIV (manager); + + if (status != NULL) + *status = g_strdup (priv->requested_status); + if (message != NULL) + *message = g_strdup (priv->requested_status_message); + + return priv->requested_presence; +} + +TpConnectionPresenceType +empathy_account_manager_get_global_presence ( + EmpathyAccountManager *manager, + gchar **status, + gchar **message) +{ + EmpathyAccountManagerPriv *priv = GET_PRIV (manager); + + if (status != NULL) + *status = g_strdup (priv->global_status); + if (message != NULL) + *message = g_strdup (priv->global_status_message); + + return priv->global_presence; +} + +static void +empathy_account_manager_created_cb (TpAccountManager *proxy, + const gchar *account_path, + const GError *error, + gpointer user_data, + GObject *weak_object) +{ + EmpathyAccountManager *manager = EMPATHY_ACCOUNT_MANAGER (weak_object); + EmpathyAccountManagerPriv *priv = GET_PRIV (manager); + GSimpleAsyncResult *my_res = user_data; + EmpathyAccount *account; + + if (error != NULL) + { + g_simple_async_result_set_from_error (my_res, + (GError *) error); + g_simple_async_result_complete (my_res); + g_object_unref (my_res); + + return; + } + + account = empathy_account_manager_ensure_account (manager, account_path); + + g_hash_table_insert (priv->create_results, account, my_res); +} + +void +empathy_account_manager_create_account_async (EmpathyAccountManager *manager, + const gchar *connection_manager, + const gchar *protocol, + const gchar *display_name, + GHashTable *parameters, + GHashTable *properties, + GAsyncReadyCallback callback, + gpointer user_data) +{ + EmpathyAccountManagerPriv *priv = GET_PRIV (manager); + GSimpleAsyncResult *res; + + res = g_simple_async_result_new + (G_OBJECT (manager), callback, user_data, + empathy_account_manager_create_account_finish); + + tp_cli_account_manager_call_create_account (priv->tp_manager, + -1, + connection_manager, + protocol, + display_name, + parameters, + properties, + empathy_account_manager_created_cb, + res, + NULL, + G_OBJECT (manager)); +} + +EmpathyAccount * +empathy_account_manager_create_account_finish ( + EmpathyAccountManager *manager, GAsyncResult *result, GError **error) { - mc_account_delete (_empathy_account_get_mc_account (account)); + EmpathyAccount *retval; + + if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), + error)) + return NULL; + + g_return_val_if_fail (g_simple_async_result_is_valid (result, + G_OBJECT (manager), empathy_account_manager_create_account_finish), NULL); + + retval = EMPATHY_ACCOUNT (g_simple_async_result_get_op_res_gpointer ( + G_SIMPLE_ASYNC_RESULT (result))); + + return retval; } + diff --git a/libempathy/empathy-account-manager.h b/libempathy/empathy-account-manager.h index b04571ff8..25adfdbeb 100644 --- a/libempathy/empathy-account-manager.h +++ b/libempathy/empathy-account-manager.h @@ -28,12 +28,17 @@ G_BEGIN_DECLS -#define EMPATHY_TYPE_ACCOUNT_MANAGER (empathy_account_manager_get_type ()) -#define EMPATHY_ACCOUNT_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_ACCOUNT_MANAGER, EmpathyAccountManager)) -#define EMPATHY_ACCOUNT_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_ACCOUNT_MANAGER, EmpathyAccountManagerClass)) -#define EMPATHY_IS_ACCOUNT_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_ACCOUNT_MANAGER)) -#define EMPATHY_IS_ACCOUNT_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_ACCOUNT_MANAGER)) -#define EMPATHY_ACCOUNT_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_ACCOUNT_MANAGER, EmpathyAccountManagerClass)) +#define EMPATHY_TYPE_ACCOUNT_MANAGER (empathy_account_manager_get_type ()) +#define EMPATHY_ACCOUNT_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), \ + EMPATHY_TYPE_ACCOUNT_MANAGER, EmpathyAccountManager)) +#define EMPATHY_ACCOUNT_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), \ + EMPATHY_TYPE_ACCOUNT_MANAGER, EmpathyAccountManagerClass)) +#define EMPATHY_IS_ACCOUNT_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), \ + EMPATHY_TYPE_ACCOUNT_MANAGER)) +#define EMPATHY_IS_ACCOUNT_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), \ + EMPATHY_TYPE_ACCOUNT_MANAGER)) +#define EMPATHY_ACCOUNT_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), \ + EMPATHY_TYPE_ACCOUNT_MANAGER, EmpathyAccountManagerClass)) typedef struct _EmpathyAccountManager EmpathyAccountManager; typedef struct _EmpathyAccountManagerClass EmpathyAccountManagerClass; @@ -52,19 +57,22 @@ GType empathy_account_manager_get_type (void); /* public methods */ EmpathyAccountManager * empathy_account_manager_dup_singleton (void); -EmpathyAccount * empathy_account_manager_create - (EmpathyAccountManager *manager, - McProfile *profile); + +gboolean empathy_account_manager_is_ready (EmpathyAccountManager *manager); + int empathy_account_manager_get_connected_accounts (EmpathyAccountManager *manager); int empathy_account_manager_get_connecting_accounts (EmpathyAccountManager *manager); int empathy_account_manager_get_count (EmpathyAccountManager *manager); -EmpathyAccount * empathy_account_manager_get_account +EmpathyAccount * empathy_account_manager_get_account_for_connection (EmpathyAccountManager *manager, TpConnection *connection); -EmpathyAccount * empathy_account_manager_lookup +EmpathyAccount * empathy_account_manager_ensure_account + (EmpathyAccountManager *manager, + const gchar *unique_name); +EmpathyAccount * empathy_account_manager_get_account (EmpathyAccountManager *manager, const gchar *unique_name); GList * empathy_account_manager_dup_accounts @@ -75,6 +83,31 @@ void empathy_account_manager_remove ( EmpathyAccountManager *manager, EmpathyAccount *account); +void empathy_account_manager_request_global_presence ( + EmpathyAccountManager *manager, + TpConnectionPresenceType type, + const gchar *status, + const gchar *message); + +TpConnectionPresenceType empathy_account_manager_get_requested_global_presence ( + EmpathyAccountManager *manager, + gchar **status, + gchar **message); + +TpConnectionPresenceType empathy_account_manager_get_global_presence ( + EmpathyAccountManager *manager, + gchar **status, + gchar **message); + +void empathy_account_manager_create_account_async ( + EmpathyAccountManager *manager, const gchar *connection_manager, + const gchar *protocol, const gchar *display_name, + GHashTable *parameters, GHashTable *properties, + GAsyncReadyCallback callback, gpointer user_data); + +EmpathyAccount * empathy_account_manager_create_account_finish ( + EmpathyAccountManager *settings, GAsyncResult *result, GError **error); + G_END_DECLS #endif /* __EMPATHY_ACCOUNT_MANAGER_H__ */ diff --git a/libempathy/empathy-account-priv.h b/libempathy/empathy-account-priv.h deleted file mode 100644 index 8b656b4d8..000000000 --- a/libempathy/empathy-account-priv.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * empathy-account-priv.h - Private Header for EmpathyAccount - * Copyright (C) 2009 Collabora Ltd. - * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __EMPATHY_ACCOUNT_PRIV_H__ -#define __EMPATHY_ACCOUNT_PRIV_H__ - -#include <glib.h> - -#include <libmissioncontrol/mc-account.h> -#include "empathy-account.h" - -G_BEGIN_DECLS - -EmpathyAccount *_empathy_account_new (McAccount *account); -void _empathy_account_set_status (EmpathyAccount *account, - TpConnectionStatus status, - TpConnectionStatusReason reason, - TpConnectionPresenceType presence); -void _empathy_account_set_connection (EmpathyAccount *account, - TpConnection *connection); -void _empathy_account_set_enabled (EmpathyAccount *account, - gboolean enabled); -McAccount *_empathy_account_get_mc_account (EmpathyAccount *account); - -G_END_DECLS - -#endif /* #ifndef __EMPATHY_ACCOUNT_PRIV_H__*/ diff --git a/libempathy/empathy-account-settings.c b/libempathy/empathy-account-settings.c new file mode 100644 index 000000000..81a7a948e --- /dev/null +++ b/libempathy/empathy-account-settings.c @@ -0,0 +1,1179 @@ +/* + * empathy-account-settings.c - Source for EmpathyAccountSettings + * Copyright (C) 2009 Collabora Ltd. + * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +#include <stdio.h> +#include <stdlib.h> + +#include <telepathy-glib/util.h> +#include <telepathy-glib/interfaces.h> +#include <telepathy-glib/gtypes.h> + +#include "empathy-account-settings.h" +#include "empathy-account-manager.h" +#include "empathy-connection-managers.h" +#include "empathy-utils.h" + +#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyAccountSettings) + +G_DEFINE_TYPE(EmpathyAccountSettings, empathy_account_settings, G_TYPE_OBJECT) + +enum { + PROP_ACCOUNT = 1, + PROP_CM_NAME, + PROP_PROTOCOL, + PROP_DISPLAY_NAME, + PROP_DISPLAY_NAME_OVERRIDDEN, + PROP_READY +}; + +/* private structure */ +typedef struct _EmpathyAccountSettingsPriv EmpathyAccountSettingsPriv; + +struct _EmpathyAccountSettingsPriv +{ + gboolean dispose_has_run; + EmpathyConnectionManagers *managers; + EmpathyAccountManager *account_manager; + gulong account_manager_ready_id; + + TpConnectionManager *manager; + const TpConnectionManagerProtocol *tp_protocol; + + EmpathyAccount *account; + gchar *cm_name; + gchar *protocol; + gchar *display_name; + gchar *icon_name; + gboolean display_name_overridden; + gboolean ready; + + GHashTable *parameters; + GArray *unset_parameters; + GArray *required_params; + + gulong managers_ready_id; + gulong account_ready_id; + + GSimpleAsyncResult *apply_result; +}; + +static void +empathy_account_settings_init (EmpathyAccountSettings *obj) +{ + EmpathyAccountSettingsPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE ((obj), + EMPATHY_TYPE_ACCOUNT_SETTINGS, EmpathyAccountSettingsPriv); + + obj->priv = priv; + + /* allocate any data required by the object here */ + priv->managers = empathy_connection_managers_dup_singleton (); + priv->account_manager = empathy_account_manager_dup_singleton (); + + priv->parameters = g_hash_table_new_full (g_str_hash, g_str_equal, + g_free, (GDestroyNotify) tp_g_value_slice_free); + + priv->unset_parameters = g_array_new (TRUE, FALSE, sizeof (gchar *)); +} + +static void empathy_account_settings_dispose (GObject *object); +static void empathy_account_settings_finalize (GObject *object); +static void empathy_account_settings_ready_cb (GObject *obj, + GParamSpec *spec, gpointer user_data); +static void empathy_account_settings_check_readyness ( + EmpathyAccountSettings *self); + +static void +empathy_account_settings_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + EmpathyAccountSettings *settings = EMPATHY_ACCOUNT_SETTINGS (object); + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + + switch (prop_id) + { + case PROP_ACCOUNT: + priv->account = g_value_dup_object (value); + break; + case PROP_CM_NAME: + priv->cm_name = g_value_dup_string (value); + break; + case PROP_PROTOCOL: + priv->protocol = g_value_dup_string (value); + break; + case PROP_DISPLAY_NAME: + priv->display_name = g_value_dup_string (value); + break; + case PROP_DISPLAY_NAME_OVERRIDDEN: + priv->display_name_overridden = g_value_get_boolean (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +empathy_account_settings_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + EmpathyAccountSettings *settings = EMPATHY_ACCOUNT_SETTINGS (object); + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + + switch (prop_id) + { + case PROP_ACCOUNT: + g_value_set_object (value, priv->account); + break; + case PROP_CM_NAME: + g_value_set_string (value, priv->cm_name); + break; + case PROP_PROTOCOL: + g_value_set_string (value, priv->protocol); + break; + case PROP_DISPLAY_NAME: + g_value_set_string (value, priv->display_name); + break; + case PROP_DISPLAY_NAME_OVERRIDDEN: + g_value_set_boolean (value, priv->display_name_overridden); + break; + case PROP_READY: + g_value_set_boolean (value, priv->ready); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +empathy_account_settings_constructed (GObject *object) +{ + EmpathyAccountSettings *self = EMPATHY_ACCOUNT_SETTINGS (object); + EmpathyAccountSettingsPriv *priv = GET_PRIV (self); + + if (priv->account != NULL) + { + g_free (priv->cm_name); + g_free (priv->protocol); + + priv->cm_name = + g_strdup (empathy_account_get_connection_manager (priv->account)); + priv->protocol = + g_strdup (empathy_account_get_protocol (priv->account)); + } + + priv->icon_name = g_strdup_printf ("im-%s", priv->protocol); + + g_assert (priv->cm_name != NULL && priv->protocol != NULL); + + empathy_account_settings_check_readyness (self); + + if (!priv->ready) + { + g_signal_connect (priv->account, "notify::ready", + G_CALLBACK (empathy_account_settings_ready_cb), self); + g_signal_connect (priv->managers, "notify::ready", + G_CALLBACK (empathy_account_settings_ready_cb), self); + } + + if (G_OBJECT_CLASS ( + empathy_account_settings_parent_class)->constructed != NULL) + G_OBJECT_CLASS ( + empathy_account_settings_parent_class)->constructed (object); +} + + +static void +empathy_account_settings_class_init ( + EmpathyAccountSettingsClass *empathy_account_settings_class) +{ + GObjectClass *object_class = G_OBJECT_CLASS (empathy_account_settings_class); + + g_type_class_add_private (empathy_account_settings_class, sizeof + (EmpathyAccountSettingsPriv)); + + object_class->dispose = empathy_account_settings_dispose; + object_class->finalize = empathy_account_settings_finalize; + object_class->set_property = empathy_account_settings_set_property; + object_class->get_property = empathy_account_settings_get_property; + object_class->constructed = empathy_account_settings_constructed; + + g_object_class_install_property (object_class, PROP_ACCOUNT, + g_param_spec_object ("account", + "Account", + "The EmpathyAccount backing these settings", + EMPATHY_TYPE_ACCOUNT, + G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + + g_object_class_install_property (object_class, PROP_CM_NAME, + g_param_spec_string ("connection-manager", + "connection-manager", + "The name of the connection manager this account uses", + NULL, + G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + + g_object_class_install_property (object_class, PROP_PROTOCOL, + g_param_spec_string ("protocol", + "Protocol", + "The name of the protocol this account uses", + NULL, + G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + + g_object_class_install_property (object_class, PROP_DISPLAY_NAME, + g_param_spec_string ("display-name", + "display-name", + "The display name account these settings belong to", + NULL, + G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + + g_object_class_install_property (object_class, PROP_DISPLAY_NAME_OVERRIDDEN, + g_param_spec_boolean ("display-name-overridden", + "display-name-overridden", + "Whether the display name for this account has been manually overridden", + FALSE, + G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)); + + g_object_class_install_property (object_class, PROP_READY, + g_param_spec_boolean ("ready", + "Ready", + "Whether this account is ready to be used", + FALSE, + G_PARAM_STATIC_STRINGS | G_PARAM_READABLE)); +} + +static void +empathy_account_settings_dispose (GObject *object) +{ + EmpathyAccountSettings *self = EMPATHY_ACCOUNT_SETTINGS (object); + EmpathyAccountSettingsPriv *priv = GET_PRIV (self); + + if (priv->dispose_has_run) + return; + + priv->dispose_has_run = TRUE; + + if (priv->managers_ready_id != 0) + g_signal_handler_disconnect (priv->managers, priv->managers_ready_id); + priv->managers_ready_id = 0; + + if (priv->managers != NULL) + g_object_unref (priv->managers); + priv->managers = NULL; + + if (priv->manager != NULL) + g_object_unref (priv->manager); + priv->manager = NULL; + + if (priv->account_manager_ready_id != 0) + g_signal_handler_disconnect (priv->account_manager, + priv->account_manager_ready_id); + priv->account_manager_ready_id = 0; + + if (priv->account_manager != NULL) + g_object_unref (priv->account_manager); + priv->account_manager = NULL; + + if (priv->account_ready_id != 0) + g_signal_handler_disconnect (priv->account, priv->account_ready_id); + priv->account_ready_id = 0; + + if (priv->account != NULL) + g_object_unref (priv->account); + priv->account = NULL; + + /* release any references held by the object here */ + if (G_OBJECT_CLASS (empathy_account_settings_parent_class)->dispose) + G_OBJECT_CLASS (empathy_account_settings_parent_class)->dispose (object); +} + +static void +empathy_account_settings_free_unset_parameters ( + EmpathyAccountSettings *settings) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + int i; + + for (i = 0 ; i < priv->unset_parameters->len; i++) + g_free (g_array_index (priv->unset_parameters, gchar *, i)); + + g_array_set_size (priv->unset_parameters, 0); +} + +static void +empathy_account_settings_finalize (GObject *object) +{ + EmpathyAccountSettings *self = EMPATHY_ACCOUNT_SETTINGS (object); + EmpathyAccountSettingsPriv *priv = GET_PRIV (self); + + /* free any data held directly by the object here */ + g_free (priv->cm_name); + g_free (priv->protocol); + g_free (priv->display_name); + g_free (priv->icon_name); + + g_hash_table_destroy (priv->parameters); + + empathy_account_settings_free_unset_parameters (self); + g_array_free (priv->unset_parameters, TRUE); + + G_OBJECT_CLASS (empathy_account_settings_parent_class)->finalize (object); +} + +static void +empathy_account_settings_check_readyness (EmpathyAccountSettings *self) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (self); + + if (priv->ready) + return; + + if (priv->account != NULL && !empathy_account_is_ready (priv->account)) + return; + + if (!empathy_connection_managers_is_ready (priv->managers)) + return; + + priv->manager = empathy_connection_managers_get_cm ( + priv->managers, priv->cm_name); + + if (priv->manager == NULL) + return; + + if (priv->account != NULL) + { + g_free (priv->display_name); + priv->display_name = + g_strdup (empathy_account_get_display_name (priv->account)); + + g_free (priv->icon_name); + priv->icon_name = + g_strdup (empathy_account_get_icon_name (priv->account)); + } + + priv->tp_protocol = tp_connection_manager_get_protocol (priv->manager, + priv->protocol); + + if (priv->tp_protocol == NULL) + { + priv->manager = NULL; + return; + } + + if (priv->required_params == NULL) + { + TpConnectionManagerParam *cur; + char *val; + + priv->required_params = g_array_new (TRUE, FALSE, sizeof (gchar *)); + + for (cur = priv->tp_protocol->params; cur->name != NULL; cur++) + { + if (tp_connection_manager_param_is_required (cur)) + { + val = g_strdup (cur->name); + g_array_append_val (priv->required_params, val); + } + } + } + + g_object_ref (priv->manager); + + priv->ready = TRUE; + g_object_notify (G_OBJECT (self), "ready"); +} + +static void +empathy_account_settings_ready_cb (GObject *obj, + GParamSpec *spec, + gpointer user_data) +{ + EmpathyAccountSettings *settings = EMPATHY_ACCOUNT_SETTINGS (user_data); + + empathy_account_settings_check_readyness (settings); +} + +EmpathyAccountSettings * +empathy_account_settings_new (const gchar *connection_manager, + const gchar *protocol, + const char *display_name) +{ + return g_object_new (EMPATHY_TYPE_ACCOUNT_SETTINGS, + "connection-manager", connection_manager, + "protocol", protocol, + "display-name", display_name, + NULL); +} + +EmpathyAccountSettings * +empathy_account_settings_new_for_account (EmpathyAccount *account) +{ + return g_object_new (EMPATHY_TYPE_ACCOUNT_SETTINGS, + "account", account, + NULL); +} + +TpConnectionManagerParam * +empathy_account_settings_get_tp_params (EmpathyAccountSettings *settings) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + + g_return_val_if_fail (priv->tp_protocol != NULL, NULL); + + return priv->tp_protocol->params; +} + +gboolean +empathy_account_settings_is_ready (EmpathyAccountSettings *settings) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + + return priv->ready; +} + +const gchar * +empathy_account_settings_get_cm (EmpathyAccountSettings *settings) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + + return priv->cm_name; +} + +const gchar * +empathy_account_settings_get_protocol (EmpathyAccountSettings *settings) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + + return priv->protocol; +} + +gchar * +empathy_account_settings_get_icon_name (EmpathyAccountSettings *settings) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + + return priv->icon_name; +} + +const gchar * +empathy_account_settings_get_display_name (EmpathyAccountSettings *settings) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + + return priv->display_name; +} + +EmpathyAccount * +empathy_account_settings_get_account (EmpathyAccountSettings *settings) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + + return priv->account; +} + +static gboolean +empathy_account_settings_is_unset (EmpathyAccountSettings *settings, + const gchar *param) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + GArray *a; + int i; + + a = priv->unset_parameters; + + for (i = 0; i < a->len; i++) + { + if (!tp_strdiff (g_array_index (a, gchar *, i), param)) + return TRUE; + } + + return FALSE; +} + +static TpConnectionManagerParam * +empathy_account_settings_get_tp_param (EmpathyAccountSettings *settings, + const gchar *param) +{ + TpConnectionManagerParam *tp_params = + empathy_account_settings_get_tp_params (settings); + TpConnectionManagerParam *p; + + for (p = tp_params; p != NULL && p->name != NULL; p++) + { + if (tp_strdiff (p->name, param)) + continue; + + return p; + } + + return NULL; +} + +static void +account_settings_remove_from_unset (EmpathyAccountSettings *settings, + const gchar *param) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + int idx; + gchar *val; + + for (idx = 0; idx < priv->unset_parameters->len; idx++) + { + val = g_array_index (priv->unset_parameters, gchar *, idx); + + if (!tp_strdiff (val, param)) + { + priv->unset_parameters = + g_array_remove_index (priv->unset_parameters, idx); + g_free (val); + + break; + } + } +} + +const GValue * +empathy_account_settings_get_default (EmpathyAccountSettings *settings, + const gchar *param) +{ + TpConnectionManagerParam *p; + + p = empathy_account_settings_get_tp_param (settings, param); + + if (p == NULL || !(p->flags & TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT)) + return NULL; + + return &(p->default_value); +} + +const gchar * +empathy_account_settings_get_dbus_signature (EmpathyAccountSettings *settings, + const gchar *param) +{ + TpConnectionManagerParam *p; + + p = empathy_account_settings_get_tp_param (settings, param); + + if (p == NULL) + return NULL; + + return p->dbus_signature; +} + +const GValue * +empathy_account_settings_get (EmpathyAccountSettings *settings, + const gchar *param) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + const GValue *result = NULL; + + /* Lookup the update parameters we set */ + result = tp_asv_lookup (priv->parameters, param); + if (result != NULL) + return result; + + /* If the parameters isn't unset use the accounts setting if any */ + if (priv->account != NULL + && !empathy_account_settings_is_unset (settings, param)) + { + const GHashTable *parameters; + + parameters = empathy_account_get_parameters (priv->account); + result = tp_asv_lookup (parameters, param); + + if (result != NULL) + return result; + } + + /* fallback to the default */ + return empathy_account_settings_get_default (settings, param); +} + +void +empathy_account_settings_unset (EmpathyAccountSettings *settings, + const gchar *param) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + gchar *v; + if (empathy_account_settings_is_unset (settings, param)) + return; + + v = g_strdup (param); + + g_array_append_val (priv->unset_parameters, v); + g_hash_table_remove (priv->parameters, param); +} + +void +empathy_account_settings_discard_changes (EmpathyAccountSettings *settings) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + + g_hash_table_remove_all (priv->parameters); + empathy_account_settings_free_unset_parameters (settings); +} + +const gchar * +empathy_account_settings_get_string (EmpathyAccountSettings *settings, + const gchar *param) +{ + const GValue *v; + + v = empathy_account_settings_get (settings, param); + + if (v == NULL || !G_VALUE_HOLDS_STRING (v)) + return NULL; + + return g_value_get_string (v); +} + +gint32 +empathy_account_settings_get_int32 (EmpathyAccountSettings *settings, + const gchar *param) +{ + const GValue *v; + gint32 ret = 0; + + v = empathy_account_settings_get (settings, param); + + if (v == NULL) + return 0; + + switch G_VALUE_TYPE (v) + { + case G_TYPE_UCHAR: + ret = g_value_get_uchar (v); + break; + case G_TYPE_INT: + ret = g_value_get_int (v); + break; + case G_TYPE_UINT: + ret = CLAMP (G_MININT32, g_value_get_uint (v), G_MAXINT32); + break; + case G_TYPE_INT64: + ret = CLAMP (G_MININT32, g_value_get_int64 (v), G_MAXINT32); + break; + case G_TYPE_UINT64: + ret = CLAMP (G_MININT32, g_value_get_uint64 (v), G_MAXINT32); + break; + default: + ret = 0; + break; + } + + return ret; +} + +gint64 +empathy_account_settings_get_int64 (EmpathyAccountSettings *settings, + const gchar *param) +{ + const GValue *v; + gint64 ret = 0; + + v = empathy_account_settings_get (settings, param); + if (v == NULL) + return 0; + + switch G_VALUE_TYPE (v) + { + case G_TYPE_UCHAR: + ret = g_value_get_uchar (v); + break; + case G_TYPE_INT: + ret = g_value_get_int (v); + break; + case G_TYPE_UINT: + ret = g_value_get_uint (v); + break; + case G_TYPE_INT64: + ret = g_value_get_int64 (v); + break; + case G_TYPE_UINT64: + ret = CLAMP (G_MININT64, g_value_get_uint64 (v), G_MAXINT64); + break; + default: + ret = 0; + break; + } + + return ret; +} + +guint32 +empathy_account_settings_get_uint32 (EmpathyAccountSettings *settings, + const gchar *param) +{ + const GValue *v; + guint32 ret; + + v = empathy_account_settings_get (settings, param); + + switch G_VALUE_TYPE (v) + { + case G_TYPE_UCHAR: + ret = g_value_get_uchar (v); + break; + case G_TYPE_INT: + ret = MAX (0, g_value_get_int (v)); + break; + case G_TYPE_UINT: + ret = g_value_get_uint (v); + break; + case G_TYPE_INT64: + ret = CLAMP (0, g_value_get_int64 (v), G_MAXUINT32); + break; + case G_TYPE_UINT64: + ret = CLAMP (0, g_value_get_uint64 (v), G_MAXUINT32); + break; + default: + ret = 0; + break; + } + + return ret; +} + +guint64 +empathy_account_settings_get_uint64 (EmpathyAccountSettings *settings, + const gchar *param) +{ + const GValue *v; + guint64 ret = 0; + + v = empathy_account_settings_get (settings, param); + + if (v == NULL || !G_VALUE_HOLDS_INT (v)) + return 0; + + switch G_VALUE_TYPE (v) + { + case G_TYPE_UCHAR: + ret = g_value_get_uchar (v); + break; + case G_TYPE_INT: + ret = MAX (0, g_value_get_int (v)); + break; + case G_TYPE_UINT: + ret = g_value_get_uint (v); + break; + case G_TYPE_INT64: + ret = MAX (0, g_value_get_int64 (v)); + break; + case G_TYPE_UINT64: + ret = CLAMP (0, g_value_get_uint64 (v), G_MAXUINT64); + break; + default: + ret = 0; + break; + } + + return ret; +} + +gboolean +empathy_account_settings_get_boolean (EmpathyAccountSettings *settings, + const gchar *param) +{ + const GValue *v; + + v = empathy_account_settings_get (settings, param); + + if (v == NULL || !G_VALUE_HOLDS_BOOLEAN (v)) + return FALSE; + + return g_value_get_boolean (v); +} + +void +empathy_account_settings_set_string (EmpathyAccountSettings *settings, + const gchar *param, + const gchar *value) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + + tp_asv_set_string (priv->parameters, g_strdup (param), value); + + account_settings_remove_from_unset (settings, param); +} + +void +empathy_account_settings_set_int32 (EmpathyAccountSettings *settings, + const gchar *param, + gint32 value) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + + tp_asv_set_int32 (priv->parameters, g_strdup (param), value); + + account_settings_remove_from_unset (settings, param); +} + +void +empathy_account_settings_set_int64 (EmpathyAccountSettings *settings, + const gchar *param, + gint64 value) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + + tp_asv_set_int64 (priv->parameters, g_strdup (param), value); + + account_settings_remove_from_unset (settings, param); +} + +void +empathy_account_settings_set_uint32 (EmpathyAccountSettings *settings, + const gchar *param, + guint32 value) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + + tp_asv_set_uint32 (priv->parameters, g_strdup (param), value); + + account_settings_remove_from_unset (settings, param); +} + +void +empathy_account_settings_set_uint64 (EmpathyAccountSettings *settings, + const gchar *param, + guint64 value) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + + tp_asv_set_uint64 (priv->parameters, g_strdup (param), value); + + account_settings_remove_from_unset (settings, param); +} + +void +empathy_account_settings_set_boolean (EmpathyAccountSettings *settings, + const gchar *param, + gboolean value) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + + tp_asv_set_boolean (priv->parameters, g_strdup (param), value); + + account_settings_remove_from_unset (settings, param); +} + +static void +account_settings_display_name_set_cb (GObject *src, + GAsyncResult *res, + gpointer user_data) +{ + GError *error = NULL; + EmpathyAccount *account = EMPATHY_ACCOUNT (src); + GSimpleAsyncResult *set_result = user_data; + + empathy_account_set_display_name_finish (account, res, &error); + + if (error != NULL) + { + g_simple_async_result_set_from_error (set_result, error); + g_error_free (error); + } + + g_simple_async_result_complete (set_result); + g_object_unref (set_result); +} + +void +empathy_account_settings_set_display_name_async ( + EmpathyAccountSettings *settings, + const gchar *name, + GAsyncReadyCallback callback, + gpointer user_data) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + GSimpleAsyncResult *result; + + result = g_simple_async_result_new (G_OBJECT (settings), + callback, user_data, empathy_account_settings_set_display_name_finish); + + if (priv->account == NULL) + { + if (priv->display_name != NULL) + g_free (priv->display_name); + + priv->display_name = g_strdup (name); + + g_simple_async_result_complete_in_idle (result); + + return; + } + + empathy_account_set_display_name_async (priv->account, name, + account_settings_display_name_set_cb, result); +} + +gboolean +empathy_account_settings_set_display_name_finish ( + EmpathyAccountSettings *settings, + GAsyncResult *result, + GError **error) +{ + if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), + error)) + return FALSE; + + g_return_val_if_fail (g_simple_async_result_is_valid (result, + G_OBJECT (settings), empathy_account_settings_set_display_name_finish), + FALSE); + + return TRUE; +} + +static void +empathy_account_settings_account_updated (GObject *source, + GAsyncResult *result, + gpointer user_data) +{ + EmpathyAccountSettings *settings = EMPATHY_ACCOUNT_SETTINGS (user_data); + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + GSimpleAsyncResult *r; + GError *error = NULL; + + if (!empathy_account_update_settings_finish (EMPATHY_ACCOUNT (source), + result, &error)) + { + g_simple_async_result_set_from_error (priv->apply_result, error); + g_error_free (error); + } + else + { + empathy_account_settings_discard_changes (settings); + } + + r = priv->apply_result; + priv->apply_result = NULL; + + g_simple_async_result_complete (r); + g_object_unref (r); +} + +static void +empathy_account_settings_created_cb (GObject *source, + GAsyncResult *result, + gpointer user_data) +{ + EmpathyAccountSettings *settings = EMPATHY_ACCOUNT_SETTINGS (user_data); + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + EmpathyAccount *account; + GError *error = NULL; + GSimpleAsyncResult *r; + + account = empathy_account_manager_create_account_finish ( + EMPATHY_ACCOUNT_MANAGER (source), result, &error); + + if (account == NULL) + { + g_simple_async_result_set_from_error (priv->apply_result, error); + } + else + { + priv->account = g_object_ref (account); + empathy_account_settings_discard_changes (settings); + } + + r = priv->apply_result; + priv->apply_result = NULL; + + g_simple_async_result_complete (r); + g_object_unref (r); +} + + +static void +empathy_account_settings_do_create_account (EmpathyAccountSettings *settings) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + GHashTable *properties; + TpConnectionPresenceType type; + gchar *status; + gchar *message; + + properties = tp_asv_new (NULL, NULL); + + type = empathy_account_manager_get_requested_global_presence + (priv->account_manager, &status, &message); + + if (type != TP_CONNECTION_PRESENCE_TYPE_UNSET) + { + /* Create the account with the requested presence the same as the current + * global requested presence, but don't enable it */ + GValueArray *presence; + GValue vtype = { 0, }; + GValue vstatus = { 0, }; + GValue vmessage = { 0, }; + + presence = g_value_array_new (3); + + g_value_init (&vtype, G_TYPE_UINT); + g_value_set_uint (&vtype, type); + g_value_array_append (presence, &vtype); + + g_value_init (&vstatus, G_TYPE_STRING); + g_value_take_string (&vstatus, status); + g_value_array_append (presence, &vstatus); + + g_value_init (&vmessage, G_TYPE_STRING); + g_value_take_string (&vmessage, message); + g_value_array_append (presence, &vmessage); + + tp_asv_take_boxed (properties, TP_IFACE_ACCOUNT ".RequestedPresence", + TP_STRUCT_TYPE_SIMPLE_PRESENCE, presence); + } + + empathy_account_manager_create_account_async (priv->account_manager, + priv->cm_name, priv->protocol, priv->display_name, + priv->parameters, properties, + empathy_account_settings_created_cb, + settings); + + g_hash_table_unref (properties); +} + +static void +empathy_account_settings_manager_ready_cb (EmpathyAccountManager *manager, + GParamSpec *spec, + gpointer user_data) +{ + EmpathyAccountSettings *settings = EMPATHY_ACCOUNT_SETTINGS (user_data); + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + + if (empathy_account_manager_is_ready (manager)) + { + g_assert (priv->apply_result != NULL && priv->account == NULL); + g_signal_handler_disconnect (priv->account_manager, + priv->account_manager_ready_id); + priv->account_manager_ready_id = 0; + + empathy_account_settings_do_create_account (settings); + } +} + +void +empathy_account_settings_apply_async (EmpathyAccountSettings *settings, + GAsyncReadyCallback callback, + gpointer user_data) +{ + EmpathyAccountSettingsPriv *priv = GET_PRIV (settings); + + if (priv->apply_result != NULL) + { + g_simple_async_report_error_in_idle (G_OBJECT (settings), + callback, user_data, + G_IO_ERROR, G_IO_ERROR_PENDING, "Applying already in progress"); + return; + } + + priv->apply_result = g_simple_async_result_new (G_OBJECT (settings), + callback, user_data, empathy_account_settings_apply_finish); + + if (priv->account == NULL) + { + if (empathy_account_manager_is_ready (priv->account_manager)) + empathy_account_settings_do_create_account (settings); + else + priv->account_manager_ready_id = g_signal_connect ( + priv->account_manager, + "notify::ready", + G_CALLBACK (empathy_account_settings_manager_ready_cb), + settings); + } + else + { + empathy_account_update_settings_async (priv->account, + priv->parameters, (const gchar **)priv->unset_parameters->data, + empathy_account_settings_account_updated, settings); + } +} + +gboolean +empathy_account_settings_apply_finish (EmpathyAccountSettings *settings, + GAsyncResult *result, + GError **error) +{ + if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), + error)) + return FALSE; + + g_return_val_if_fail (g_simple_async_result_is_valid (result, + G_OBJECT (settings), empathy_account_settings_apply_finish), FALSE); + + return TRUE; +} + +gboolean +empathy_account_settings_has_account (EmpathyAccountSettings *settings, + EmpathyAccount *account) +{ + EmpathyAccountSettingsPriv *priv; + + g_return_val_if_fail (EMPATHY_IS_ACCOUNT_SETTINGS (settings), FALSE); + g_return_val_if_fail (EMPATHY_IS_ACCOUNT (account), FALSE); + + priv = GET_PRIV (settings); + + return (account == priv->account); +} + +gboolean +empathy_account_settings_is_valid (EmpathyAccountSettings *settings) +{ + EmpathyAccountSettingsPriv *priv; + int idx; + gchar *current; + gboolean missed = FALSE; + + g_return_val_if_fail (EMPATHY_IS_ACCOUNT_SETTINGS (settings), FALSE); + + priv = GET_PRIV (settings); + + for (idx = 0; idx < priv->required_params->len; idx++) + { + current = g_array_index (priv->required_params, gchar *, idx); + + /* first, look if it's set in our own parameters */ + if (tp_asv_lookup (priv->parameters, current)) + continue; + + /* if we did not unset the parameter, look if it's in the account */ + if (priv->account != NULL && + !empathy_account_settings_is_unset (settings, current)) + { + const GHashTable *account_params; + + account_params = empathy_account_get_parameters (priv->account); + if (tp_asv_lookup (account_params, current)) + continue; + } + + missed = TRUE; + break; + } + + return !missed; +} diff --git a/libempathy/empathy-account-settings.h b/libempathy/empathy-account-settings.h new file mode 100644 index 000000000..476bfb397 --- /dev/null +++ b/libempathy/empathy-account-settings.h @@ -0,0 +1,163 @@ +/* + * empathy-account-settings.h - Header for EmpathyAccountSettings + * Copyright (C) 2009 Collabora Ltd. + * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __EMPATHY_ACCOUNT_SETTINGS_H__ +#define __EMPATHY_ACCOUNT_SETTINGS_H__ + +#include <glib-object.h> +#include <gio/gio.h> + +#include <libempathy/empathy-account.h> +#include <telepathy-glib/connection-manager.h> + +G_BEGIN_DECLS + +typedef struct _EmpathyAccountSettings EmpathyAccountSettings; +typedef struct _EmpathyAccountSettingsClass EmpathyAccountSettingsClass; + +struct _EmpathyAccountSettingsClass { + GObjectClass parent_class; +}; + +struct _EmpathyAccountSettings { + GObject parent; + gpointer priv; +}; + +GType empathy_account_settings_get_type (void); + +/* TYPE MACROS */ +#define EMPATHY_TYPE_ACCOUNT_SETTINGS \ + (empathy_account_settings_get_type ()) +#define EMPATHY_ACCOUNT_SETTINGS(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + EMPATHY_TYPE_ACCOUNT_SETTINGS, EmpathyAccountSettings)) +#define EMPATHY_ACCOUNT_SETTINGS_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_ACCOUNT_SETTINGS, \ + EmpathyAccountSettingsClass)) +#define EMPATHY_IS_ACCOUNT_SETTINGS(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_ACCOUNT_SETTINGS)) +#define EMPATHY_IS_ACCOUNT_SETTINGS_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_ACCOUNT_SETTINGS)) +#define EMPATHY_ACCOUNT_SETTINGS_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_ACCOUNT_SETTINGS, \ + EmpathyAccountSettingsClass)) + +EmpathyAccountSettings * empathy_account_settings_new ( + const gchar *connection_manager, + const gchar *protocol, + const char *display_name); + +EmpathyAccountSettings * empathy_account_settings_new_for_account ( + EmpathyAccount *account); + +gboolean empathy_account_settings_is_ready (EmpathyAccountSettings *settings); + +const gchar *empathy_account_settings_get_cm (EmpathyAccountSettings *settings); +const gchar *empathy_account_settings_get_protocol ( + EmpathyAccountSettings *settings); + +EmpathyAccount *empathy_account_settings_get_account ( + EmpathyAccountSettings *settings); + +gboolean empathy_account_settings_has_account ( + EmpathyAccountSettings *settings, EmpathyAccount *account); + +TpConnectionManagerParam *empathy_account_settings_get_tp_params ( + EmpathyAccountSettings *settings); + +void empathy_account_settings_unset (EmpathyAccountSettings *settings, + const gchar *param); + +void empathy_account_settings_discard_changes ( + EmpathyAccountSettings *settings); + +const GValue *empathy_account_settings_get (EmpathyAccountSettings *settings, + const gchar *param); + +const gchar * +empathy_account_settings_get_dbus_signature (EmpathyAccountSettings *setting, + const gchar *param); + +const GValue * +empathy_account_settings_get_default (EmpathyAccountSettings *settings, + const gchar *param); + +const gchar *empathy_account_settings_get_string ( + EmpathyAccountSettings *settings, + const gchar *param); + +gint32 empathy_account_settings_get_int32 (EmpathyAccountSettings *settings, + const gchar *param); +gint64 empathy_account_settings_get_int64 (EmpathyAccountSettings *settings, + const gchar *param); +guint32 empathy_account_settings_get_uint32 (EmpathyAccountSettings *settings, + const gchar *param); +guint64 empathy_account_settings_get_uint64 (EmpathyAccountSettings *settings, + const gchar *param); +gboolean empathy_account_settings_get_boolean (EmpathyAccountSettings *settings, + const gchar *param); + +void empathy_account_settings_set_string (EmpathyAccountSettings *settings, + const gchar *param, const gchar *value); + +void empathy_account_settings_set_int32 (EmpathyAccountSettings *settings, + const gchar *param, gint32 value); +void empathy_account_settings_set_int64 (EmpathyAccountSettings *settings, + const gchar *param, gint64 value); +void empathy_account_settings_set_uint32 (EmpathyAccountSettings *settings, + const gchar *param, guint32 value); +void empathy_account_settings_set_uint64 (EmpathyAccountSettings *settings, + const gchar *param, guint64 value); + +void empathy_account_settings_set_boolean (EmpathyAccountSettings *settings, + const gchar *param, gboolean value); + +gchar *empathy_account_settings_get_icon_name ( + EmpathyAccountSettings *settings); + +const gchar *empathy_account_settings_get_display_name ( + EmpathyAccountSettings *settings); + +void empathy_account_settings_set_display_name_async ( + EmpathyAccountSettings *settings, + const gchar *name, + GAsyncReadyCallback callback, + gpointer user_data); + +gboolean empathy_account_settings_set_display_name_finish ( + EmpathyAccountSettings *settings, + GAsyncResult *result, + GError **error); + +void empathy_account_settings_apply_async (EmpathyAccountSettings *settings, + GAsyncReadyCallback callback, + gpointer user_data); + +gboolean empathy_account_settings_apply_finish ( + EmpathyAccountSettings *settings, + GAsyncResult *result, + GError **error); + +gboolean empathy_account_settings_is_valid (EmpathyAccountSettings *settings); + +G_END_DECLS + +#endif /* #ifndef __EMPATHY_ACCOUNT_SETTINGS_H__*/ diff --git a/libempathy/empathy-account.c b/libempathy/empathy-account.c index e0a8e756b..7733f3556 100644 --- a/libempathy/empathy-account.c +++ b/libempathy/empathy-account.c @@ -18,17 +18,25 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ - #include <stdio.h> #include <stdlib.h> +#include <string.h> #include <telepathy-glib/enums.h> +#include <telepathy-glib/dbus.h> +#include <telepathy-glib/account.h> +#include <telepathy-glib/gtypes.h> +#include <telepathy-glib/util.h> +#include <telepathy-glib/interfaces.h> +#include <telepathy-glib/defs.h> #define DEBUG_FLAG EMPATHY_DEBUG_ACCOUNT #include <libempathy/empathy-debug.h> +#include <glib/gi18n-lib.h> + #include "empathy-account.h" -#include "empathy-account-priv.h" +#include "empathy-account-manager.h" #include "empathy-utils.h" #include "empathy-marshal.h" @@ -36,6 +44,7 @@ enum { STATUS_CHANGED, PRESENCE_CHANGED, + REMOVED, LAST_SIGNAL }; @@ -45,10 +54,14 @@ static guint signals[LAST_SIGNAL]; enum { PROP_ENABLED = 1, PROP_PRESENCE, + PROP_STATUS, + PROP_STATUS_MESSAGE, + PROP_READY, PROP_CONNECTION_STATUS, PROP_CONNECTION_STATUS_REASON, PROP_CONNECTION, PROP_UNIQUE_NAME, + PROP_DBUS_DAEMON, PROP_DISPLAY_NAME }; @@ -64,19 +77,37 @@ struct _EmpathyAccountPriv TpConnection *connection; guint connection_invalidated_id; - TpConnectionStatus status; + TpConnectionStatus connection_status; TpConnectionStatusReason reason; + TpConnectionPresenceType presence; + gchar *status; + gchar *message; gboolean enabled; + gboolean valid; + gboolean ready; + gboolean removed; /* Timestamp when the connection got connected in seconds since the epoch */ glong connect_time; - McAccount *mc_account; + gchar *cm_name; + gchar *proto_name; + gchar *icon_name; + + gchar *unique_name; + gchar *display_name; + TpDBusDaemon *dbus; + + TpAccount *account; + GHashTable *parameters; }; #define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyAccount) +static void _empathy_account_set_connection (EmpathyAccount *account, + const gchar *path); + static void empathy_account_init (EmpathyAccount *obj) { @@ -87,7 +118,34 @@ empathy_account_init (EmpathyAccount *obj) obj->priv = priv; - priv->status = TP_CONNECTION_STATUS_DISCONNECTED; + priv->connection_status = TP_CONNECTION_STATUS_DISCONNECTED; +} + +static void +empathy_account_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + EmpathyAccount *account = EMPATHY_ACCOUNT (object); + EmpathyAccountPriv *priv = GET_PRIV (account); + + switch (prop_id) + { + case PROP_ENABLED: + empathy_account_set_enabled_async (account, + g_value_get_boolean (value), NULL, NULL); + break; + case PROP_UNIQUE_NAME: + priv->unique_name = g_value_dup_string (value); + break; + case PROP_DBUS_DAEMON: + priv->dbus = g_value_get_object (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } } static void @@ -104,11 +162,20 @@ empathy_account_get_property (GObject *object, case PROP_ENABLED: g_value_set_boolean (value, priv->enabled); break; + case PROP_READY: + g_value_set_boolean (value, priv->ready); + break; case PROP_PRESENCE: g_value_set_uint (value, priv->presence); break; + case PROP_STATUS: + g_value_set_string (value, priv->status); + break; + case PROP_STATUS_MESSAGE: + g_value_set_string (value, priv->message); + break; case PROP_CONNECTION_STATUS: - g_value_set_uint (value, priv->status); + g_value_set_uint (value, priv->connection_status); break; case PROP_CONNECTION_STATUS_REASON: g_value_set_uint (value, priv->reason); @@ -125,12 +192,297 @@ empathy_account_get_property (GObject *object, g_value_set_string (value, empathy_account_get_display_name (account)); break; + case PROP_DBUS_DAEMON: + g_value_set_object (value, priv->dbus); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } +static void +empathy_account_update (EmpathyAccount *account, + GHashTable *properties) +{ + EmpathyAccountPriv *priv = GET_PRIV (account); + GValueArray *arr; + TpConnectionStatus old_s = priv->connection_status; + gboolean presence_changed = FALSE; + + if (g_hash_table_lookup (properties, "ConnectionStatus") != NULL) + priv->connection_status = + tp_asv_get_int32 (properties, "ConnectionStatus", NULL); + + if (g_hash_table_lookup (properties, "ConnectionStatusReason") != NULL) + priv->reason = tp_asv_get_int32 (properties, + "ConnectionStatusReason", NULL); + + if (g_hash_table_lookup (properties, "CurrentPresence") != NULL) + { + presence_changed = TRUE; + arr = tp_asv_get_boxed (properties, "CurrentPresence", + TP_STRUCT_TYPE_SIMPLE_PRESENCE); + priv->presence = g_value_get_uint (g_value_array_get_nth (arr, 0)); + + g_free (priv->status); + priv->status = g_value_dup_string (g_value_array_get_nth (arr, 1)); + + g_free (priv->message); + priv->message = g_value_dup_string (g_value_array_get_nth (arr, 2)); + } + + if (g_hash_table_lookup (properties, "DisplayName") != NULL) + { + g_free (priv->display_name); + priv->display_name = + g_strdup (tp_asv_get_string (properties, "DisplayName")); + g_object_notify (G_OBJECT (account), "display-name"); + } + + if (g_hash_table_lookup (properties, "Enabled") != NULL) + { + gboolean enabled = tp_asv_get_boolean (properties, "Enabled", NULL); + if (priv->enabled != enabled) + { + priv->enabled = enabled; + g_object_notify (G_OBJECT (account), "enabled"); + } + } + + if (g_hash_table_lookup (properties, "Valid") != NULL) + priv->valid = tp_asv_get_boolean (properties, "Valid", NULL); + + if (g_hash_table_lookup (properties, "Parameters") != NULL) + { + GHashTable *parameters; + + parameters = tp_asv_get_boxed (properties, "Parameters", + TP_HASH_TYPE_STRING_VARIANT_MAP); + + if (priv->parameters != NULL) + g_hash_table_unref (priv->parameters); + + priv->parameters = g_boxed_copy (TP_HASH_TYPE_STRING_VARIANT_MAP, + parameters); + } + + if (!priv->ready) + { + priv->ready = TRUE; + g_object_notify (G_OBJECT (account), "ready"); + } + + if (priv->connection_status != old_s) + { + if (priv->connection_status == TP_CONNECTION_STATUS_CONNECTED) + { + GTimeVal val; + g_get_current_time (&val); + + priv->connect_time = val.tv_sec; + } + + g_signal_emit (account, signals[STATUS_CHANGED], 0, + old_s, priv->connection_status, priv->reason); + + g_object_notify (G_OBJECT (account), "connection-status"); + g_object_notify (G_OBJECT (account), "connection-status-reason"); + } + + if (presence_changed) + { + g_signal_emit (account, signals[PRESENCE_CHANGED], 0, + priv->presence, priv->status, priv->message); + g_object_notify (G_OBJECT (account), "presence"); + g_object_notify (G_OBJECT (account), "status"); + g_object_notify (G_OBJECT (account), "status-message"); + } + + if (g_hash_table_lookup (properties, "Connection") != NULL) + { + const gchar *conn_path = + tp_asv_get_object_path (properties, "Connection"); + + _empathy_account_set_connection (account, conn_path); + } +} + +static void +empathy_account_properties_changed (TpAccount *proxy, + GHashTable *properties, + gpointer user_data, + GObject *weak_object) +{ + EmpathyAccount *account = EMPATHY_ACCOUNT (weak_object); + EmpathyAccountPriv *priv = GET_PRIV (account); + + if (!priv->ready) + return; + + empathy_account_update (account, properties); +} + +static void +empathy_account_removed_cb (TpAccount *proxy, + gpointer user_data, + GObject *weak_object) +{ + EmpathyAccount *account = EMPATHY_ACCOUNT (weak_object); + EmpathyAccountPriv *priv = GET_PRIV (account); + + if (priv->removed) + return; + + priv->removed = TRUE; + + g_signal_emit (account, signals[REMOVED], 0); +} + +static void +empathy_account_got_all_cb (TpProxy *proxy, + GHashTable *properties, + const GError *error, + gpointer user_data, + GObject *weak_object) +{ + EmpathyAccount *account = EMPATHY_ACCOUNT (weak_object); + + DEBUG ("Got initial set of properties for %s", + empathy_account_get_unique_name (account)); + + if (error != NULL) + { + DEBUG ("Failed to get the initial set of account properties: %s", + error->message); + return; + } + + empathy_account_update (account, properties); +} + +static gchar * +empathy_account_unescape_protocol (const gchar *protocol, gssize len) +{ + gchar *result, *escape; + /* Bad implementation might accidentally use tp_escape_as_identifier, + * which escapes - in the wrong way... */ + if ((escape = g_strstr_len (protocol, len, "_2d")) != NULL) + { + GString *str; + const gchar *input; + + str = g_string_new (""); + input = protocol; + do { + g_string_append_len (str, input, escape - input); + g_string_append_c (str, '-'); + + len -= escape - input + 3; + input = escape + 3; + } while ((escape = g_strstr_len (input, len, "_2d")) != NULL); + + g_string_append_len (str, input, len); + + result = g_string_free (str, FALSE); + } + else + { + result = g_strndup (protocol, len); + } + + g_strdelimit (result, "_", '-'); + + return result; +} + +static gboolean +empathy_account_parse_unique_name (const gchar *bus_name, + gchar **protocol, gchar **manager) +{ + const gchar *proto, *proto_end; + const gchar *cm, *cm_end; + + g_return_val_if_fail ( + g_str_has_prefix (bus_name, TP_ACCOUNT_OBJECT_PATH_BASE), FALSE); + + cm = bus_name + strlen (TP_ACCOUNT_OBJECT_PATH_BASE); + + for (cm_end = cm; *cm_end != '/' && *cm_end != '\0'; cm_end++) + /* pass */; + + if (*cm_end == '\0') + return FALSE; + + if (cm_end == '\0') + return FALSE; + + proto = cm_end + 1; + + for (proto_end = proto; *proto_end != '/' && *proto_end != '\0'; proto_end++) + /* pass */; + + if (*proto_end == '\0') + return FALSE; + + if (protocol != NULL) + { + *protocol = empathy_account_unescape_protocol (proto, proto_end - proto); + } + + if (manager != NULL) + *manager = g_strndup (cm, cm_end - cm); + + return TRUE; +} + +static void +account_invalidated_cb (TpProxy *proxy, guint domain, gint code, + gchar *message, gpointer user_data) +{ + EmpathyAccount *account = EMPATHY_ACCOUNT (user_data); + EmpathyAccountPriv *priv = GET_PRIV (account); + + if (priv->removed) + return; + + priv->removed = TRUE; + + g_signal_emit (account, signals[REMOVED], 0); +} + +static void +empathy_account_constructed (GObject *object) +{ + EmpathyAccount *account = EMPATHY_ACCOUNT (object); + EmpathyAccountPriv *priv = GET_PRIV (account); + + priv->account = tp_account_new (priv->dbus, priv->unique_name, NULL); + + g_signal_connect (priv->account, "invalidated", + G_CALLBACK (account_invalidated_cb), object); + + empathy_account_parse_unique_name (priv->unique_name, + &(priv->proto_name), &(priv->cm_name)); + + priv->icon_name = empathy_protocol_icon_name (priv->proto_name); + + tp_cli_account_connect_to_account_property_changed (priv->account, + empathy_account_properties_changed, + NULL, NULL, object, NULL); + + tp_cli_account_connect_to_removed (priv->account, + empathy_account_removed_cb, + NULL, NULL, object, NULL); + + tp_cli_dbus_properties_call_get_all (priv->account, -1, + TP_IFACE_ACCOUNT, + empathy_account_got_all_cb, + NULL, + NULL, + G_OBJECT (account)); +} + static void empathy_account_dispose (GObject *object); static void empathy_account_finalize (GObject *object); @@ -142,15 +494,24 @@ empathy_account_class_init (EmpathyAccountClass *empathy_account_class) g_type_class_add_private (empathy_account_class, sizeof (EmpathyAccountPriv)); + object_class->set_property = empathy_account_set_property; object_class->get_property = empathy_account_get_property; object_class->dispose = empathy_account_dispose; object_class->finalize = empathy_account_finalize; + object_class->constructed = empathy_account_constructed; g_object_class_install_property (object_class, PROP_ENABLED, g_param_spec_boolean ("enabled", "Enabled", "Whether this account is enabled or not", FALSE, + G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)); + + g_object_class_install_property (object_class, PROP_READY, + g_param_spec_boolean ("ready", + "Ready", + "Whether this account is ready to be used", + FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE)); g_object_class_install_property (object_class, PROP_PRESENCE, @@ -162,8 +523,22 @@ empathy_account_class_init (EmpathyAccountClass *empathy_account_class) TP_CONNECTION_PRESENCE_TYPE_UNSET, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE)); + g_object_class_install_property (object_class, PROP_STATUS, + g_param_spec_string ("status", + "Status", + "The Status string of the account", + NULL, + G_PARAM_STATIC_STRINGS | G_PARAM_READABLE)); + + g_object_class_install_property (object_class, PROP_STATUS_MESSAGE, + g_param_spec_string ("status-message", + "status-message", + "The Status message string of the account", + NULL, + G_PARAM_STATIC_STRINGS | G_PARAM_READABLE)); + g_object_class_install_property (object_class, PROP_CONNECTION_STATUS, - g_param_spec_uint ("status", + g_param_spec_uint ("connection-status", "ConnectionStatus", "The accounts connections status type", 0, @@ -172,7 +547,7 @@ empathy_account_class_init (EmpathyAccountClass *empathy_account_class) G_PARAM_STATIC_STRINGS | G_PARAM_READABLE)); g_object_class_install_property (object_class, PROP_CONNECTION_STATUS_REASON, - g_param_spec_uint ("status-reason", + g_param_spec_uint ("connection-status-reason", "ConnectionStatusReason", "The account connections status reason", 0, @@ -192,7 +567,14 @@ empathy_account_class_init (EmpathyAccountClass *empathy_account_class) "UniqueName", "The accounts unique name", NULL, - G_PARAM_STATIC_STRINGS | G_PARAM_READABLE)); + G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + + g_object_class_install_property (object_class, PROP_DBUS_DAEMON, + g_param_spec_object ("dbus-daemon", + "dbus-daemon", + "The Tp Dbus daemon on which this account exists", + TP_TYPE_DBUS_DAEMON, + G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (object_class, PROP_DISPLAY_NAME, g_param_spec_string ("display-name", @@ -212,8 +594,34 @@ empathy_account_class_init (EmpathyAccountClass *empathy_account_class) G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST, 0, NULL, NULL, - _empathy_marshal_VOID__UINT_UINT, - G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT); + _empathy_marshal_VOID__UINT_STRING_STRING, + G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_STRING); + + signals[REMOVED] = g_signal_new ("removed", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + 0, NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); +} + +static void +empathy_account_free_connection (EmpathyAccount *account) +{ + EmpathyAccountPriv *priv = GET_PRIV (account); + TpConnection *conn; + + if (priv->connection == NULL) + return; + + conn = priv->connection; + priv->connection = NULL; + + if (priv->connection_invalidated_id != 0) + g_signal_handler_disconnect (conn, priv->connection_invalidated_id); + priv->connection_invalidated_id = 0; + + g_object_unref (conn); } void @@ -227,14 +635,7 @@ empathy_account_dispose (GObject *object) priv->dispose_has_run = TRUE; - if (priv->connection_invalidated_id != 0) - g_signal_handler_disconnect (priv->connection, - priv->connection_invalidated_id); - priv->connection_invalidated_id = 0; - - if (priv->connection != NULL) - g_object_unref (priv->connection); - priv->connection = NULL; + empathy_account_free_connection (self); /* release any references held by the object here */ if (G_OBJECT_CLASS (empathy_account_parent_class)->dispose != NULL) @@ -244,6 +645,16 @@ empathy_account_dispose (GObject *object) void empathy_account_finalize (GObject *object) { + EmpathyAccountPriv *priv = GET_PRIV (object); + + g_free (priv->status); + g_free (priv->message); + + g_free (priv->cm_name); + g_free (priv->proto_name); + g_free (priv->icon_name); + g_free (priv->display_name); + /* free any data held directly by the object here */ if (G_OBJECT_CLASS (empathy_account_parent_class)->finalize != NULL) G_OBJECT_CLASS (empathy_account_parent_class)->finalize (object); @@ -255,7 +666,7 @@ empathy_account_is_just_connected (EmpathyAccount *account) EmpathyAccountPriv *priv = GET_PRIV (account); GTimeVal val; - if (priv->status != TP_CONNECTION_STATUS_CONNECTED) + if (priv->connection_status != TP_CONNECTION_STATUS_CONNECTED) return FALSE; g_get_current_time (&val); @@ -285,6 +696,35 @@ empathy_account_get_connection (EmpathyAccount *account) } /** + * empathy_account_get_connection_for_path: + * @account: a #EmpathyAccount + * @patch: the path to connection object for #EmpathyAccount + * + * Get the connection of the account on path. This function does not return a + * new ref. It is not guaranteed that the returned connection object is ready + * + * Returns: the connection of the account. + **/ +TpConnection * +empathy_account_get_connection_for_path (EmpathyAccount *account, + const gchar *path) +{ + EmpathyAccountPriv *priv = GET_PRIV (account); + + /* double-check that the object path is valid */ + if (!tp_dbus_check_valid_object_path (path, NULL)) + return NULL; + + /* Should be a full object path, not the special "/" value */ + if (strlen (path) == 1) + return NULL; + + _empathy_account_set_connection (account, path); + + return priv->connection; +} + +/** * empathy_account_get_unique_name: * @account: a #EmpathyAccount * @@ -295,7 +735,7 @@ empathy_account_get_unique_name (EmpathyAccount *account) { EmpathyAccountPriv *priv = GET_PRIV (account); - return mc_account_get_unique_name (priv->mc_account); + return priv->unique_name; } /** @@ -309,7 +749,7 @@ empathy_account_get_display_name (EmpathyAccount *account) { EmpathyAccountPriv *priv = GET_PRIV (account); - return mc_account_get_display_name (priv->mc_account); + return priv->display_name; } gboolean @@ -317,154 +757,66 @@ empathy_account_is_valid (EmpathyAccount *account) { EmpathyAccountPriv *priv = GET_PRIV (account); - return mc_account_is_complete (priv->mc_account); -} - -void -empathy_account_set_enabled (EmpathyAccount *account, gboolean enabled) -{ - EmpathyAccountPriv *priv = GET_PRIV (account); - - mc_account_set_enabled (priv->mc_account, enabled); + return priv->valid; } -gboolean -empathy_account_is_enabled (EmpathyAccount *account) +const gchar * +empathy_account_get_connection_manager (EmpathyAccount *account) { EmpathyAccountPriv *priv = GET_PRIV (account); - return priv->enabled; + return priv->cm_name; } -void -empathy_account_unset_param (EmpathyAccount *account, const gchar *param) +const gchar * +empathy_account_get_protocol (EmpathyAccount *account) { EmpathyAccountPriv *priv = GET_PRIV (account); - mc_account_unset_param (priv->mc_account, param); + return priv->proto_name; } -gchar * -empathy_account_get_param_string (EmpathyAccount *account, const gchar *param) +const gchar * +empathy_account_get_icon_name (EmpathyAccount *account) { EmpathyAccountPriv *priv = GET_PRIV (account); - gchar *value = NULL; - mc_account_get_param_string (priv->mc_account, param, &value); - return value; + return priv->icon_name; } -gint -empathy_account_get_param_int (EmpathyAccount *account, const gchar *param) +const GHashTable * +empathy_account_get_parameters (EmpathyAccount *account) { EmpathyAccountPriv *priv = GET_PRIV (account); - int value; - mc_account_get_param_int (priv->mc_account, param, &value); - return value; + return priv->parameters; } gboolean -empathy_account_get_param_boolean (EmpathyAccount *account, const gchar *param) -{ - EmpathyAccountPriv *priv = GET_PRIV (account); - gboolean value; - - mc_account_get_param_boolean (priv->mc_account, param, &value); - return value; -} - -void -empathy_account_set_param_string (EmpathyAccount *account, - const gchar *param, - const gchar *value) +empathy_account_is_enabled (EmpathyAccount *account) { EmpathyAccountPriv *priv = GET_PRIV (account); - mc_account_set_param_string (priv->mc_account, param, value); -} -void -empathy_account_set_param_int (EmpathyAccount *account, - const gchar *param, - gint value) -{ - EmpathyAccountPriv *priv = GET_PRIV (account); - mc_account_set_param_int (priv->mc_account, param, value); + return priv->enabled; } -void -empathy_account_set_param_boolean (EmpathyAccount *account, - const gchar *param, - gboolean value) +gboolean +empathy_account_is_ready (EmpathyAccount *account) { EmpathyAccountPriv *priv = GET_PRIV (account); - mc_account_set_param_boolean (priv->mc_account, param, value); -} -void -empathy_account_set_display_name (EmpathyAccount *account, - const gchar *display_name) -{ - EmpathyAccountPriv *priv = GET_PRIV (account); - mc_account_set_display_name (priv->mc_account, display_name); + return priv->ready; } -McProfile * -empathy_account_get_profile (EmpathyAccount *account) -{ - EmpathyAccountPriv *priv = GET_PRIV (account); - return mc_account_get_profile (priv->mc_account); -} EmpathyAccount * -_empathy_account_new (McAccount *mc_account) +empathy_account_new (TpDBusDaemon *dbus, + const gchar *unique_name) { - EmpathyAccount *account; - EmpathyAccountPriv *priv; - - account = g_object_new (EMPATHY_TYPE_ACCOUNT, NULL); - priv = GET_PRIV (account); - priv->mc_account = mc_account; - - return account; -} - -void -_empathy_account_set_status (EmpathyAccount *account, - TpConnectionStatus status, - TpConnectionStatusReason reason, - TpConnectionPresenceType presence) -{ - EmpathyAccountPriv *priv = GET_PRIV (account); - TpConnectionStatus old_s = priv->status; - TpConnectionPresenceType old_p = priv->presence; - - priv->status = status; - priv->presence = presence; - - if (priv->status != old_s) - { - if (priv->status == TP_CONNECTION_STATUS_CONNECTED) - { - GTimeVal val; - g_get_current_time (&val); - - priv->connect_time = val.tv_sec; - } - - priv->reason = reason; - g_signal_emit (account, signals[STATUS_CHANGED], 0, - old_s, priv->status, reason); - - g_object_notify (G_OBJECT (account), "status"); - } - - if (priv->presence != old_p) - { - g_signal_emit (account, signals[PRESENCE_CHANGED], 0, - old_p, priv->presence); - g_object_notify (G_OBJECT (account), "presence"); - } + return EMPATHY_ACCOUNT (g_object_new (EMPATHY_TYPE_ACCOUNT, + "dbus-daemon", dbus, + "unique-name", unique_name, + NULL)); } static void @@ -473,13 +825,12 @@ empathy_account_connection_ready_cb (TpConnection *connection, gpointer user_data) { EmpathyAccount *account = EMPATHY_ACCOUNT (user_data); - EmpathyAccountPriv *priv = GET_PRIV (account); if (error != NULL) { DEBUG ("(%s) Connection failed to become ready: %s", empathy_account_get_unique_name (account), error->message); - priv->connection = NULL; + empathy_account_free_connection (account); } else { @@ -507,69 +858,320 @@ _empathy_account_connection_invalidated_cb (TpProxy *self, g_assert (priv->connection == TP_CONNECTION (self)); - g_signal_handler_disconnect (priv->connection, - priv->connection_invalidated_id); - priv->connection_invalidated_id = 0; - - g_object_unref (priv->connection); - priv->connection = NULL; + empathy_account_free_connection (account); g_object_notify (G_OBJECT (account), "connection"); } -void +static void _empathy_account_set_connection (EmpathyAccount *account, - TpConnection *connection) + const gchar *path) { EmpathyAccountPriv *priv = GET_PRIV (account); - if (priv->connection == connection) - return; + if (priv->connection != NULL) + { + const gchar *current; - /* Connection already set, don't set the new one */ - if (connection != NULL && priv->connection != NULL) - return; + current = tp_proxy_get_object_path (priv->connection); + if (!tp_strdiff (current, path)) + return; + } + + empathy_account_free_connection (account); - if (connection == NULL) + if (tp_strdiff ("/", path)) { - g_signal_handler_disconnect (priv->connection, - priv->connection_invalidated_id); - priv->connection_invalidated_id = 0; + GError *error = NULL; + priv->connection = tp_connection_new (priv->dbus, NULL, path, &error); - g_object_unref (priv->connection); - priv->connection = NULL; - g_object_notify (G_OBJECT (account), "connection"); + if (priv->connection == NULL) + { + DEBUG ("Failed to create a new TpConnection: %s", + error->message); + g_error_free (error); + } + else + { + priv->connection_invalidated_id = g_signal_connect (priv->connection, + "invalidated", + G_CALLBACK (_empathy_account_connection_invalidated_cb), account); + + DEBUG ("Readying connection for %s", priv->unique_name); + /* notify a change in the connection property when it's ready */ + tp_connection_call_when_ready (priv->connection, + empathy_account_connection_ready_cb, account); + } } - else + + g_object_notify (G_OBJECT (account), "connection"); +} + +static void +account_enabled_set_cb (TpProxy *proxy, + const GError *error, + gpointer user_data, + GObject *weak_object) +{ + GSimpleAsyncResult *result = user_data; + + if (error != NULL) + g_simple_async_result_set_from_error (result, (GError *) error); + + g_simple_async_result_complete (result); + g_object_unref (result); +} + +gboolean +empathy_account_set_enabled_finish (EmpathyAccount *account, + GAsyncResult *result, + GError **error) +{ + if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), + error) || + !g_simple_async_result_is_valid (result, G_OBJECT (account), + empathy_account_set_enabled_finish)) + return FALSE; + + return TRUE; +} + +void +empathy_account_set_enabled_async (EmpathyAccount *account, + gboolean enabled, + GAsyncReadyCallback callback, + gpointer user_data) +{ + EmpathyAccountPriv *priv = GET_PRIV (account); + EmpathyAccountManager *acc_manager; + GValue value = {0, }; + GSimpleAsyncResult *result = g_simple_async_result_new (G_OBJECT (account), + callback, user_data, empathy_account_set_enabled_finish); + char *status = NULL; + char *status_message = NULL; + TpConnectionPresenceType presence; + + if (priv->enabled == enabled) + { + g_simple_async_result_complete_in_idle (result); + return; + } + + acc_manager = empathy_account_manager_dup_singleton (); + presence = empathy_account_manager_get_requested_global_presence + (acc_manager, &status, &status_message); + + if (presence != TP_CONNECTION_PRESENCE_TYPE_UNSET) + empathy_account_request_presence (account, presence, status, + status_message); + + g_object_unref (acc_manager); + g_free (status); + g_free (status_message); + + g_value_init (&value, G_TYPE_BOOLEAN); + g_value_set_boolean (&value, enabled); + + tp_cli_dbus_properties_call_set (TP_PROXY (priv->account), + -1, TP_IFACE_ACCOUNT, "Enabled", &value, + account_enabled_set_cb, result, NULL, G_OBJECT (account)); +} + +static void +empathy_account_requested_presence_cb (TpProxy *proxy, + const GError *error, + gpointer user_data, + GObject *weak_object) +{ + if (error) + DEBUG ("Failed to set the requested presence: %s", error->message); +} + + +void +empathy_account_request_presence (EmpathyAccount *account, + TpConnectionPresenceType type, + const gchar *status, + const gchar *message) +{ + EmpathyAccountPriv *priv = GET_PRIV (account); + GValue value = {0, }; + GValueArray *arr; + + g_value_init (&value, TP_STRUCT_TYPE_SIMPLE_PRESENCE); + g_value_take_boxed (&value, dbus_g_type_specialized_construct + (TP_STRUCT_TYPE_SIMPLE_PRESENCE)); + arr = (GValueArray *) g_value_get_boxed (&value); + + g_value_set_uint (arr->values, type); + g_value_set_static_string (arr->values + 1, status); + g_value_set_static_string (arr->values + 2, message); + + tp_cli_dbus_properties_call_set (TP_PROXY (priv->account), + -1, + TP_IFACE_ACCOUNT, + "RequestedPresence", + &value, + empathy_account_requested_presence_cb, + NULL, + NULL, + G_OBJECT (account)); + + g_value_unset (&value); +} + +static void +empathy_account_updated_cb (TpAccount *proxy, + const gchar **reconnect_required, + const GError *error, + gpointer user_data, + GObject *weak_object) +{ + GSimpleAsyncResult *result = G_SIMPLE_ASYNC_RESULT (user_data); + + if (error != NULL) { - priv->connection = g_object_ref (connection); - priv->connection_invalidated_id = g_signal_connect (priv->connection, - "invalidated", - G_CALLBACK (_empathy_account_connection_invalidated_cb), - account); - - /* notify a change in the connection property when it's ready */ - tp_connection_call_when_ready (priv->connection, - empathy_account_connection_ready_cb, account); + g_simple_async_result_set_from_error (result, (GError *) error); } + + g_simple_async_result_complete (result); + g_object_unref (G_OBJECT (result)); } void -_empathy_account_set_enabled (EmpathyAccount *account, - gboolean enabled) +empathy_account_update_settings_async (EmpathyAccount *account, + GHashTable *parameters, const gchar **unset_parameters, + GAsyncReadyCallback callback, gpointer user_data) { EmpathyAccountPriv *priv = GET_PRIV (account); + GSimpleAsyncResult *result = g_simple_async_result_new (G_OBJECT (account), + callback, user_data, empathy_account_update_settings_finish); + + tp_cli_account_call_update_parameters (priv->account, + -1, + parameters, + unset_parameters, + empathy_account_updated_cb, + result, + NULL, + G_OBJECT (account)); +} - if (priv->enabled == enabled) - return; +gboolean +empathy_account_update_settings_finish (EmpathyAccount *account, + GAsyncResult *result, GError **error) +{ + if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), + error)) + return FALSE; + + g_return_val_if_fail (g_simple_async_result_is_valid (result, + G_OBJECT (account), empathy_account_update_settings_finish), FALSE); + + return TRUE; +} + +static void +account_display_name_set_cb (TpProxy *proxy, + const GError *error, + gpointer user_data, + GObject *weak_object) +{ + GSimpleAsyncResult *result = user_data; + + if (error != NULL) + g_simple_async_result_set_from_error (result, (GError *) error); + + g_simple_async_result_complete (result); + g_object_unref (result); +} + +void +empathy_account_set_display_name_async (EmpathyAccount *account, + const char *display_name, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GSimpleAsyncResult *result; + GValue value = {0, }; + EmpathyAccountPriv *priv = GET_PRIV (account); + + if (display_name == NULL) + { + g_simple_async_report_error_in_idle (G_OBJECT (account), + callback, user_data, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT, + _("Can't set an empty display name")); + return; + } + + result = g_simple_async_result_new (G_OBJECT (account), callback, + user_data, empathy_account_set_display_name_finish); + + g_value_init (&value, G_TYPE_STRING); + g_value_set_string (&value, display_name); + + tp_cli_dbus_properties_call_set (priv->account, -1, TP_IFACE_ACCOUNT, + "DisplayName", &value, account_display_name_set_cb, result, NULL, + G_OBJECT (account)); +} - priv->enabled = enabled; - g_object_notify (G_OBJECT (account), "enabled"); +gboolean +empathy_account_set_display_name_finish (EmpathyAccount *account, + GAsyncResult *result, GError **error) +{ + if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), + error) || + !g_simple_async_result_is_valid (result, G_OBJECT (account), + empathy_account_set_display_name_finish)) + return FALSE; + + return TRUE; } -McAccount * -_empathy_account_get_mc_account (EmpathyAccount *account) +static void +empathy_account_remove_cb (TpAccount *proxy, + const GError *error, + gpointer user_data, + GObject *weak_object) +{ + GSimpleAsyncResult *result = G_SIMPLE_ASYNC_RESULT (user_data); + + if (error != NULL) + { + g_simple_async_result_set_from_error (result, (GError *) error); + } + + g_simple_async_result_complete (result); + g_object_unref (G_OBJECT (result)); +} + +void +empathy_account_remove_async (EmpathyAccount *account, + GAsyncReadyCallback callback, gpointer user_data) { EmpathyAccountPriv *priv = GET_PRIV (account); - return priv->mc_account; + GSimpleAsyncResult *result = g_simple_async_result_new (G_OBJECT (account), + callback, user_data, empathy_account_remove_finish); + + tp_cli_account_call_remove (priv->account, + -1, + empathy_account_remove_cb, + result, + NULL, + G_OBJECT (account)); +} + +gboolean +empathy_account_remove_finish (EmpathyAccount *account, + GAsyncResult *result, GError **error) +{ + if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), + error)) + return FALSE; + + g_return_val_if_fail (g_simple_async_result_is_valid (result, + G_OBJECT (account), empathy_account_update_settings_finish), FALSE); + + return TRUE; } + diff --git a/libempathy/empathy-account.h b/libempathy/empathy-account.h index 75babd826..f88ac43e4 100644 --- a/libempathy/empathy-account.h +++ b/libempathy/empathy-account.h @@ -22,9 +22,9 @@ #define __EMPATHY_ACCOUNT_H__ #include <glib-object.h> +#include <gio/gio.h> #include <telepathy-glib/connection.h> -#include <libmissioncontrol/mc-profile.h> G_BEGIN_DECLS @@ -58,36 +58,51 @@ GType empathy_account_get_type (void); gboolean empathy_account_is_just_connected (EmpathyAccount *account); TpConnection *empathy_account_get_connection (EmpathyAccount *account); +TpConnection *empathy_account_get_connection_for_path (EmpathyAccount *account, + const gchar *path); const gchar *empathy_account_get_unique_name (EmpathyAccount *account); const gchar *empathy_account_get_display_name (EmpathyAccount *account); -void empathy_account_set_enabled (EmpathyAccount *account, - gboolean enabled); -gboolean empathy_account_is_enabled (EmpathyAccount *account); +const gchar *empathy_account_get_connection_manager (EmpathyAccount *account); +const gchar *empathy_account_get_protocol (EmpathyAccount *account); +const gchar *empathy_account_get_icon_name (EmpathyAccount *account); + +void empathy_account_set_enabled_async (EmpathyAccount *account, + gboolean enabled, GAsyncReadyCallback callback, gpointer user_data); +gboolean empathy_account_set_enabled_finish (EmpathyAccount *account, + GAsyncResult *result, GError **error); -void empathy_account_unset_param (EmpathyAccount *account, const gchar *param); -gchar *empathy_account_get_param_string (EmpathyAccount *account, - const gchar *param); -gint empathy_account_get_param_int (EmpathyAccount *account, - const gchar *param); -gboolean empathy_account_get_param_boolean (EmpathyAccount *account, - const gchar *param); - -void empathy_account_set_param_string (EmpathyAccount *account, - const gchar *param, const gchar *value); -void empathy_account_set_param_int (EmpathyAccount *account, - const gchar *param, gint value); -void empathy_account_set_param_boolean (EmpathyAccount *account, - const gchar *param, gboolean value); +gboolean empathy_account_is_enabled (EmpathyAccount *account); gboolean empathy_account_is_valid (EmpathyAccount *account); +gboolean empathy_account_is_ready (EmpathyAccount *account); + +void empathy_account_update_settings_async (EmpathyAccount *account, + GHashTable *parameters, const gchar **unset_parameters, + GAsyncReadyCallback callback, gpointer user_data); + +gboolean empathy_account_update_settings_finish (EmpathyAccount *account, + GAsyncResult *result, GError **error); + +void empathy_account_remove_async (EmpathyAccount *account, + GAsyncReadyCallback callback, gpointer user_data); +gboolean empathy_account_remove_finish (EmpathyAccount *account, + GAsyncResult *result, GError **error); + +void empathy_account_set_display_name_async (EmpathyAccount *account, + const gchar *display_name, GAsyncReadyCallback callback, + gpointer user_data); +gboolean empathy_account_set_display_name_finish (EmpathyAccount *account, + GAsyncResult *result, GError **error); + +EmpathyAccount *empathy_account_new (TpDBusDaemon *bus_daemon, + const gchar *unique_name); -void empathy_account_set_display_name (EmpathyAccount *account, - const gchar *display_name); +void empathy_account_request_presence (EmpathyAccount *account, + TpConnectionPresenceType type, const gchar *status, const gchar *message); +const GHashTable *empathy_account_get_parameters (EmpathyAccount *account); -/* TODO remove McProfile */ -McProfile *empathy_account_get_profile (EmpathyAccount *account); G_END_DECLS diff --git a/libempathy/empathy-call-handler.c b/libempathy/empathy-call-handler.c index 72c317b7f..1c6e53c6c 100644 --- a/libempathy/empathy-call-handler.c +++ b/libempathy/empathy-call-handler.c @@ -23,6 +23,7 @@ #include <stdlib.h> #include <telepathy-glib/util.h> +#include <telepathy-glib/interfaces.h> #include <telepathy-farsight/channel.h> #include <telepathy-farsight/stream.h> diff --git a/libempathy/empathy-chatroom-manager.c b/libempathy/empathy-chatroom-manager.c index 940b56220..7c3559e2f 100644 --- a/libempathy/empathy-chatroom-manager.c +++ b/libempathy/empathy-chatroom-manager.c @@ -30,6 +30,8 @@ #include <libxml/parser.h> #include <libxml/tree.h> +#include <telepathy-glib/interfaces.h> + #include "empathy-tp-chat.h" #include "empathy-chatroom-manager.h" #include "empathy-account-manager.h" @@ -221,7 +223,8 @@ chatroom_manager_parse_chatroom (EmpathyChatroomManager *manager, xmlFree (str); } - account = empathy_account_manager_lookup (priv->account_manager, account_id); + account = empathy_account_manager_get_account (priv->account_manager, + account_id); if (!account) { g_free (name); g_free (room); @@ -234,7 +237,6 @@ chatroom_manager_parse_chatroom (EmpathyChatroomManager *manager, add_chatroom (manager, chatroom); g_signal_emit (manager, signals[CHATROOM_ADDED], 0, chatroom); - g_object_unref (account); g_free (name); g_free (room); g_free (account_id); @@ -578,9 +580,8 @@ empathy_chatroom_manager_find (EmpathyChatroomManager *manager, this_account = empathy_chatroom_get_account (chatroom); this_room = empathy_chatroom_get_room (chatroom); - if (this_account && this_room && - empathy_account_equal (account, this_account) && - strcmp (this_room, room) == 0) { + if (this_account && this_room && account == this_account + && strcmp (this_room, room) == 0) { return chatroom; } } @@ -609,8 +610,7 @@ empathy_chatroom_manager_get_chatrooms (EmpathyChatroomManager *manager, chatroom = l->data; - if (empathy_account_equal (account, - empathy_chatroom_get_account (chatroom))) { + if (account == empathy_chatroom_get_account (chatroom)) { chatrooms = g_list_append (chatrooms, chatroom); } } @@ -639,8 +639,7 @@ empathy_chatroom_manager_get_count (EmpathyChatroomManager *manager, chatroom = l->data; - if (empathy_account_equal (account, - empathy_chatroom_get_account (chatroom))) { + if (account == empathy_chatroom_get_account (chatroom)) { count++; } } @@ -705,8 +704,8 @@ chatroom_manager_observe_channel_cb (EmpathyDispatcher *dispatcher, chat = EMPATHY_TP_CHAT ( empathy_dispatch_operation_get_channel_wrapper (operation)); connection = empathy_tp_chat_get_connection (chat); - account = empathy_account_manager_get_account (priv->account_manager, - connection); + account = empathy_account_manager_get_account_for_connection ( + priv->account_manager, connection); roomname = empathy_tp_chat_get_id (chat); diff --git a/libempathy/empathy-chatroom.c b/libempathy/empathy-chatroom.c index b62d6ad77..33df9a3d6 100644 --- a/libempathy/empathy-chatroom.c +++ b/libempathy/empathy-chatroom.c @@ -480,8 +480,7 @@ empathy_chatroom_equal (gconstpointer v1, room_a = empathy_chatroom_get_room (EMPATHY_CHATROOM (v1)); room_b = empathy_chatroom_get_room (EMPATHY_CHATROOM (v2)); - return empathy_account_equal (account_a, account_b) && - !tp_strdiff (room_a, room_b); + return account_a == account_b && !tp_strdiff (room_a, room_b); } EmpathyTpChat * diff --git a/libempathy/empathy-connection-managers.c b/libempathy/empathy-connection-managers.c new file mode 100644 index 000000000..bd6f315e2 --- /dev/null +++ b/libempathy/empathy-connection-managers.c @@ -0,0 +1,293 @@ +/* + * empathy-connection-managers.c - Source for EmpathyConnectionManagers + * Copyright (C) 2009 Collabora Ltd. + * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +#include <stdio.h> +#include <stdlib.h> + +#include <telepathy-glib/connection-manager.h> +#include <telepathy-glib/util.h> + +#include "empathy-connection-managers.h" +#include "empathy-utils.h" + +#define DEBUG_FLAG EMPATHY_DEBUG_OTHER +#include <libempathy/empathy-debug.h> + +static GObject *managers = NULL; + +G_DEFINE_TYPE(EmpathyConnectionManagers, empathy_connection_managers, + G_TYPE_OBJECT) + +/* signal enum */ +enum +{ + UPDATED, + LAST_SIGNAL +}; + +static guint signals[LAST_SIGNAL] = {0}; + +/* properties */ +enum { + PROP_READY = 1 +}; + +#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyConnectionManagers) + + +/* private structure */ +typedef struct _EmpathyConnectionManagersPriv + EmpathyConnectionManagersPriv; + +struct _EmpathyConnectionManagersPriv +{ + gboolean dispose_has_run; + gboolean ready; + + GList *cms; + + TpDBusDaemon *dbus; +}; + +static void +empathy_connection_managers_init (EmpathyConnectionManagers *obj) +{ + EmpathyConnectionManagersPriv *priv = + G_TYPE_INSTANCE_GET_PRIVATE ((obj), \ + EMPATHY_TYPE_CONNECTION_MANAGERS, EmpathyConnectionManagersPriv); + + obj->priv = priv; + + priv->dbus = tp_dbus_daemon_dup (NULL); + g_assert (priv->dbus != NULL); + + empathy_connection_managers_update (obj); + + /* allocate any data required by the object here */ +} + +static void empathy_connection_managers_dispose (GObject *object); + +static GObject * +empathy_connection_managers_constructor (GType type, + guint n_construct_params, + GObjectConstructParam *construct_params) +{ + if (managers != NULL) + return g_object_ref (managers); + + managers = + G_OBJECT_CLASS (empathy_connection_managers_parent_class)->constructor + (type, n_construct_params, construct_params); + + g_object_add_weak_pointer (managers, (gpointer) &managers); + + return managers; +} + + + +static void +empathy_connection_managers_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + EmpathyConnectionManagers *managers = EMPATHY_CONNECTION_MANAGERS (object); + EmpathyConnectionManagersPriv *priv = GET_PRIV (managers); + + switch (prop_id) + { + case PROP_READY: + g_value_set_boolean (value, priv->ready); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +empathy_connection_managers_class_init ( + EmpathyConnectionManagersClass *empathy_connection_managers_class) +{ + GObjectClass *object_class = + G_OBJECT_CLASS (empathy_connection_managers_class); + + g_type_class_add_private (empathy_connection_managers_class, sizeof + (EmpathyConnectionManagersPriv)); + + object_class->constructor = empathy_connection_managers_constructor; + object_class->dispose = empathy_connection_managers_dispose; + object_class->get_property = empathy_connection_managers_get_property; + + g_object_class_install_property (object_class, PROP_READY, + g_param_spec_boolean ("ready", + "Ready", + "Whether the connection manager information is ready to be used", + FALSE, + G_PARAM_STATIC_STRINGS | G_PARAM_READABLE)); + + signals[UPDATED] = g_signal_new ("updated", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + 0, NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); +} + +static void +empathy_connection_managers_free_cm_list (EmpathyConnectionManagers *self) +{ + EmpathyConnectionManagersPriv *priv = GET_PRIV (self); + GList *l; + + for (l = priv->cms ; l != NULL ; l = g_list_next (l)) + { + g_object_unref (l->data); + } + g_list_free (priv->cms); + + priv->cms = NULL; +} + +static void +empathy_connection_managers_dispose (GObject *object) +{ + EmpathyConnectionManagers *self = EMPATHY_CONNECTION_MANAGERS (object); + EmpathyConnectionManagersPriv *priv = GET_PRIV (self); + + if (priv->dispose_has_run) + return; + + priv->dispose_has_run = TRUE; + + if (priv->dbus != NULL) + g_object_unref (priv->dbus); + priv->dbus = NULL; + + empathy_connection_managers_free_cm_list (self); + + /* release any references held by the object here */ + + if (G_OBJECT_CLASS (empathy_connection_managers_parent_class)->dispose) + G_OBJECT_CLASS (empathy_connection_managers_parent_class)->dispose (object); +} + +EmpathyConnectionManagers * +empathy_connection_managers_dup_singleton (void) +{ + return EMPATHY_CONNECTION_MANAGERS ( + g_object_new (EMPATHY_TYPE_CONNECTION_MANAGERS, NULL)); +} + +gboolean +empathy_connection_managers_is_ready (EmpathyConnectionManagers *managers) +{ + EmpathyConnectionManagersPriv *priv = GET_PRIV (managers); + return priv->ready; +} + +static void +empathy_connection_managers_listed_cb (TpConnectionManager * const *cms, + gsize n_cms, + const GError *error, + gpointer user_data, + GObject *weak_object) +{ + EmpathyConnectionManagers *self = + EMPATHY_CONNECTION_MANAGERS (weak_object); + EmpathyConnectionManagersPriv *priv = GET_PRIV (self); + TpConnectionManager * const *iter; + + empathy_connection_managers_free_cm_list (self); + + if (error != NULL) + { + DEBUG ("Failed to get connection managers: %s", error->message); + goto out; + } + + for (iter = cms ; iter != NULL && *iter != NULL; iter++) + { + /* only list cms that didn't hit errors */ + if (tp_connection_manager_is_ready (*iter)) + priv->cms = g_list_prepend (priv->cms, g_object_ref (*iter)); + } + +out: + g_object_ref (weak_object); + if (!priv->ready) + { + priv->ready = TRUE; + g_object_notify (weak_object, "ready"); + } + g_signal_emit (weak_object, signals[UPDATED], 0); + g_object_unref (weak_object); +} + +void +empathy_connection_managers_update (EmpathyConnectionManagers *managers) +{ + EmpathyConnectionManagersPriv *priv = GET_PRIV (managers); + + tp_list_connection_managers (priv->dbus, + empathy_connection_managers_listed_cb, + NULL, NULL, G_OBJECT (managers)); +} + +GList * +empathy_connection_managers_get_cms (EmpathyConnectionManagers *managers) +{ + EmpathyConnectionManagersPriv *priv = GET_PRIV (managers); + + return priv->cms; +} + +TpConnectionManager * +empathy_connection_managers_get_cm (EmpathyConnectionManagers *managers, + const gchar *cm) +{ + EmpathyConnectionManagersPriv *priv = GET_PRIV (managers); + GList *l; + + for (l = priv->cms ; l != NULL; l = g_list_next (l)) + { + TpConnectionManager *c = TP_CONNECTION_MANAGER (l->data); + + if (!tp_strdiff (c->name, cm)) + return c; + } + + return NULL; +} + +guint +empathy_connection_managers_get_cms_num (EmpathyConnectionManagers *managers) +{ + EmpathyConnectionManagersPriv *priv; + + g_return_val_if_fail (EMPATHY_IS_CONNECTION_MANAGERS (managers), 0); + + priv = GET_PRIV (managers); + + return g_list_length (priv->cms); +} diff --git a/libempathy/empathy-connection-managers.h b/libempathy/empathy-connection-managers.h new file mode 100644 index 000000000..17289d36d --- /dev/null +++ b/libempathy/empathy-connection-managers.h @@ -0,0 +1,77 @@ +/* + * empathy-connection-managers.h - Header for EmpathyConnectionManagers + * Copyright (C) 2009 Collabora Ltd. + * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __EMPATHY_CONNECTION_MANAGERS_H__ +#define __EMPATHY_CONNECTION_MANAGERS_H__ + +#include <glib-object.h> + +#include <telepathy-glib/connection-manager.h> + +G_BEGIN_DECLS + +typedef struct _EmpathyConnectionManagers EmpathyConnectionManagers; +typedef struct _EmpathyConnectionManagersClass EmpathyConnectionManagersClass; + +struct _EmpathyConnectionManagersClass { + GObjectClass parent_class; +}; + +struct _EmpathyConnectionManagers { + GObject parent; + gpointer priv; +}; + +GType empathy_connection_managers_get_type (void); + +/* TYPE MACROS */ +#define EMPATHY_TYPE_CONNECTION_MANAGERS \ + (empathy_connection_managers_get_type ()) +#define EMPATHY_CONNECTION_MANAGERS(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_CONNECTION_MANAGERS, \ + EmpathyConnectionManagers)) +#define EMPATHY_CONNECTION_MANAGERS_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_CONNECTION_MANAGERS, \ + EmpathyConnectionManagersClass)) +#define EMPATHY_IS_CONNECTION_MANAGERS(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_CONNECTION_MANAGERS)) +#define EMPATHY_IS_CONNECTION_MANAGERS_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_CONNECTION_MANAGERS)) +#define EMPATHY_CONNECTION_MANAGERS_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_CONNECTION_MANAGERS, \ + EmpathyConnectionManagersClass)) + +EmpathyConnectionManagers *empathy_connection_managers_dup_singleton (void); +gboolean empathy_connection_managers_is_ready ( + EmpathyConnectionManagers *managers); + +void empathy_connection_managers_update (EmpathyConnectionManagers *managers); + +GList * empathy_connection_managers_get_cms ( + EmpathyConnectionManagers *managers); +guint empathy_connection_managers_get_cms_num + (EmpathyConnectionManagers *managers); + +TpConnectionManager *empathy_connection_managers_get_cm ( + EmpathyConnectionManagers *managers, const gchar *cm); + +G_END_DECLS + +#endif /* #ifndef __EMPATHY_CONNECTION_MANAGERS_H__*/ diff --git a/libempathy/empathy-contact.c b/libempathy/empathy-contact.c index c82ecd467..44d9dbeed 100644 --- a/libempathy/empathy-contact.c +++ b/libempathy/empathy-contact.c @@ -570,7 +570,8 @@ empathy_contact_get_account (EmpathyContact *contact) /* FIXME: This assume the account manager already exists */ manager = empathy_account_manager_dup_singleton (); connection = tp_contact_get_connection (priv->tp_contact); - priv->account = empathy_account_manager_get_account (manager, connection); + priv->account = empathy_account_manager_get_account_for_connection ( + manager, connection); g_object_ref (priv->account); g_object_unref (manager); } @@ -857,27 +858,23 @@ contact_get_avatar_filename (EmpathyContact *contact, gchar *avatar_path; gchar *avatar_file; gchar *token_escaped; - gchar *contact_escaped; if (EMP_STR_EMPTY (empathy_contact_get_id (contact))) return NULL; - contact_escaped = tp_escape_as_identifier (empathy_contact_get_id (contact)); token_escaped = tp_escape_as_identifier (token); account = empathy_contact_get_account (contact); - /* FIXME: Do not use the account, but proto/cm instead */ avatar_path = g_build_filename (g_get_user_cache_dir (), - PACKAGE_NAME, + "telepathy", "avatars", - empathy_account_get_unique_name (account), - contact_escaped, + empathy_account_get_connection_manager (account), + empathy_account_get_protocol (account), NULL); g_mkdir_with_parents (avatar_path, 0700); avatar_file = g_build_filename (avatar_path, token_escaped, NULL); - g_free (contact_escaped); g_free (token_escaped); g_free (avatar_path); diff --git a/libempathy/empathy-debug.c b/libempathy/empathy-debug.c index 9d69b801c..141340024 100644 --- a/libempathy/empathy-debug.c +++ b/libempathy/empathy-debug.c @@ -50,6 +50,7 @@ static GDebugKey keys[] = { { "Location", EMPATHY_DEBUG_LOCATION }, { "Other", EMPATHY_DEBUG_OTHER }, { "Connectivity", EMPATHY_DEBUG_CONNECTIVITY }, + { "ImportMc4Accounts", EMPATHY_DEBUG_IMPORT_MC4_ACCOUNTS }, { 0, } }; diff --git a/libempathy/empathy-debug.h b/libempathy/empathy-debug.h index edfa05d95..cc8eca0a3 100644 --- a/libempathy/empathy-debug.h +++ b/libempathy/empathy-debug.h @@ -43,6 +43,7 @@ typedef enum EMPATHY_DEBUG_OTHER = 1 << 9, EMPATHY_DEBUG_SHARE_DESKTOP = 1 << 10, EMPATHY_DEBUG_CONNECTIVITY = 1 << 11, + EMPATHY_DEBUG_IMPORT_MC4_ACCOUNTS = 1 << 11, } EmpathyDebugFlags; gboolean empathy_debug_flag_is_set (EmpathyDebugFlags flag); diff --git a/libempathy/empathy-dispatch-operation.c b/libempathy/empathy-dispatch-operation.c index 79fe8c62d..d7afcbea6 100644 --- a/libempathy/empathy-dispatch-operation.c +++ b/libempathy/empathy-dispatch-operation.c @@ -201,6 +201,26 @@ dispatcher_operation_got_contact_cb (EmpathyTpContactFactory *factory, } static void +dispatch_operation_connection_ready (TpConnection *connection, + const GError *error, + gpointer user_data) +{ + EmpathyDispatchOperation *self = EMPATHY_DISPATCH_OPERATION (user_data); + EmpathyDispatchOperationPriv *priv = GET_PRIV (self); + EmpathyTpContactFactory *factory; + TpHandle handle; + + handle = tp_channel_get_handle (priv->channel, NULL); + + factory = empathy_tp_contact_factory_dup_singleton (priv->connection); + + empathy_tp_contact_factory_get_from_handle (factory, handle, + dispatcher_operation_got_contact_cb, NULL, NULL, G_OBJECT (self)); + + g_object_unref (factory); +} + +static void empathy_dispatch_operation_constructed (GObject *object) { EmpathyDispatchOperation *self = EMPATHY_DISPATCH_OPERATION (object); @@ -219,12 +239,8 @@ empathy_dispatch_operation_constructed (GObject *object) if (handle_type == TP_HANDLE_TYPE_CONTACT && priv->contact == NULL) { - EmpathyTpContactFactory *factory; - - factory = empathy_tp_contact_factory_dup_singleton (priv->connection); - empathy_tp_contact_factory_get_from_handle (factory, handle, - dispatcher_operation_got_contact_cb, NULL, NULL, object); - g_object_unref (factory); + tp_connection_call_when_ready (priv->connection, + dispatch_operation_connection_ready, object); return; } diff --git a/libempathy/empathy-dispatcher.c b/libempathy/empathy-dispatcher.c index b51df95fa..c1a19f699 100644 --- a/libempathy/empathy-dispatcher.c +++ b/libempathy/empathy-dispatcher.c @@ -19,6 +19,9 @@ * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk> */ +#define DISPATCHER_BUS_NAME TP_CLIENT_BUS_NAME_BASE "Empathy" +#define DISPATCHER_OBJECT_PATH TP_CLIENT_OBJECT_PATH_BASE "Empathy" + #include <config.h> #include <string.h> @@ -31,8 +34,10 @@ #include <telepathy-glib/dbus.h> #include <telepathy-glib/proxy-subclass.h> #include <telepathy-glib/gtypes.h> - -#include <libmissioncontrol/mission-control.h> +#include <telepathy-glib/defs.h> +#include <telepathy-glib/svc-client.h> +#include <telepathy-glib/svc-generic.h> +#include <telepathy-glib/interfaces.h> #include <extensions/extensions.h> @@ -51,7 +56,6 @@ typedef struct { EmpathyAccountManager *account_manager; - MissionControl *mc; /* connection to connection data mapping */ GHashTable *connections; GHashTable *outstanding_classes_requests; @@ -64,7 +68,30 @@ typedef struct GHashTable *request_channel_class_async_ids; } EmpathyDispatcherPriv; -G_DEFINE_TYPE (EmpathyDispatcher, empathy_dispatcher, G_TYPE_OBJECT); +static void empathy_dispatcher_client_handler_iface_init (gpointer g_iface, + gpointer g_iface_data); + +G_DEFINE_TYPE_WITH_CODE (EmpathyDispatcher, + empathy_dispatcher, + G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES, + tp_dbus_properties_mixin_iface_init); + G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CLIENT, NULL); + G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CLIENT_HANDLER, + empathy_dispatcher_client_handler_iface_init); + ); + +static const gchar *empathy_dispatcher_interfaces[] = { + TP_IFACE_CLIENT_HANDLER, + NULL +}; + +enum +{ + PROP_INTERFACES = 1, + PROP_CHANNEL_FILTER, + PROP_CHANNELS +}; enum { @@ -77,6 +104,10 @@ enum static guint signals[LAST_SIGNAL]; static EmpathyDispatcher *dispatcher = NULL; +static void dispatcher_init_connection_if_needed ( + EmpathyDispatcher *dispatcher, + TpConnection *connection); + static GList * empathy_dispatcher_find_channel_classes (EmpathyDispatcher *dispatcher, TpConnection *connection, const gchar *channel_type, guint handle_type, GArray *fixed_properties); @@ -563,6 +594,8 @@ dispatcher_connection_new_channel (EmpathyDispatcher *dispatcher, NULL }; + dispatcher_init_connection_if_needed (dispatcher, connection); + cd = g_hash_table_lookup (priv->connections, connection); /* Don't bother with channels we have already dispatched or are dispatching @@ -638,30 +671,11 @@ dispatcher_connection_new_channel (EmpathyDispatcher *dispatcher, } static void -dispatcher_connection_new_channel_cb (TpConnection *connection, - const gchar *object_path, - const gchar *channel_type, - guint handle_type, - guint handle, - gboolean suppress_handler, - gpointer user_data, - GObject *object) -{ - EmpathyDispatcher *dispatcher = EMPATHY_DISPATCHER (object); - - /* Empathy heavily abuses surpress handler (don't try this at home), if - * surpress handler is true then it is an outgoing channel, which is - * requested either by us or some other party (like the megaphone applet). - * Otherwise it's an incoming channel */ - dispatcher_connection_new_channel (dispatcher, connection, - object_path, channel_type, handle_type, handle, NULL, !suppress_handler); -} - -static void -dispatcher_connection_new_channel_with_properties (EmpathyDispatcher *dispatcher, - TpConnection *connection, - const gchar *object_path, - GHashTable *properties) +dispatcher_connection_new_channel_with_properties ( + EmpathyDispatcher *dispatcher, + TpConnection *connection, + const gchar *object_path, + GHashTable *properties) { const gchar *channel_type; guint handle_type; @@ -701,7 +715,7 @@ dispatcher_connection_new_channel_with_properties (EmpathyDispatcher *dispatcher if (!valid) { g_message ("%s had an invalid Requested property", object_path); - return; + requested = FALSE; } dispatcher_connection_new_channel (dispatcher, connection, @@ -709,29 +723,6 @@ dispatcher_connection_new_channel_with_properties (EmpathyDispatcher *dispatcher } static void -dispatcher_connection_new_channels_cb (TpConnection *connection, - const GPtrArray *channels, - gpointer user_data, - GObject *object) -{ - EmpathyDispatcher *dispatcher = EMPATHY_DISPATCHER (object); - int i; - - for (i = 0; i < channels->len ; i++) - { - GValueArray *arr = g_ptr_array_index (channels, i); - const gchar *object_path; - GHashTable *properties; - - object_path = g_value_get_boxed (g_value_array_get_nth (arr, 0)); - properties = g_value_get_boxed (g_value_array_get_nth (arr, 1)); - - dispatcher_connection_new_channel_with_properties (dispatcher, - connection, object_path, properties); - } -} - -static void dispatcher_connection_got_all (TpProxy *proxy, GHashTable *properties, const GError *error, @@ -740,7 +731,6 @@ dispatcher_connection_got_all (TpProxy *proxy, { EmpathyDispatcher *dispatcher = EMPATHY_DISPATCHER (object); EmpathyDispatcherPriv *priv = GET_PRIV (dispatcher); - GPtrArray *channels; GPtrArray *requestable_channels; if (error) { @@ -748,15 +738,6 @@ dispatcher_connection_got_all (TpProxy *proxy, return; } - channels = tp_asv_get_boxed (properties, "Channels", - TP_ARRAY_TYPE_CHANNEL_DETAILS_LIST); - - if (channels == NULL) - DEBUG ("No Channels property !?! on connection"); - else - dispatcher_connection_new_channels_cb (TP_CONNECTION (proxy), - channels, NULL, object); - requestable_channels = tp_asv_get_boxed (properties, "RequestableChannelClasses", TP_ARRAY_TYPE_REQUESTABLE_CHANNEL_CLASS_LIST); @@ -798,38 +779,6 @@ dispatcher_connection_got_all (TpProxy *proxy, } static void -dispatcher_connection_list_channels_cb (TpConnection *connection, - const GPtrArray *channels, - const GError *error, - gpointer user_data, - GObject *dispatcher) -{ - int i; - - if (error) - { - DEBUG ("Error: %s", error->message); - return; - } - - for (i = 0; i < channels->len; i++) - { - GValueArray *values; - - values = g_ptr_array_index (channels, i); - /* We don't have any extra info, so assume already existing channels are - * incoming... */ - dispatcher_connection_new_channel (EMPATHY_DISPATCHER (dispatcher), - connection, - g_value_get_boxed (g_value_array_get_nth (values, 0)), - g_value_get_string (g_value_array_get_nth (values, 1)), - g_value_get_uint (g_value_array_get_nth (values, 2)), - g_value_get_uint (g_value_array_get_nth (values, 3)), - NULL, TRUE); - } -} - -static void dispatcher_connection_advertise_capabilities_cb (TpConnection *connection, const GPtrArray *capabilities, const GError *error, @@ -841,9 +790,8 @@ dispatcher_connection_advertise_capabilities_cb (TpConnection *connection, } static void -dispatcher_new_connection_cb (EmpathyAccountManager *manager, - TpConnection *connection, - EmpathyDispatcher *dispatcher) +dispatcher_init_connection_if_needed (EmpathyDispatcher *dispatcher, + TpConnection *connection) { EmpathyDispatcherPriv *priv = GET_PRIV (dispatcher); GPtrArray *capabilities; @@ -863,26 +811,11 @@ dispatcher_new_connection_cb (EmpathyAccountManager *manager, if (tp_proxy_has_interface_by_id (TP_PROXY (connection), TP_IFACE_QUARK_CONNECTION_INTERFACE_REQUESTS)) { - tp_cli_connection_interface_requests_connect_to_new_channels (connection, - dispatcher_connection_new_channels_cb, - NULL, NULL, G_OBJECT (dispatcher), NULL); - tp_cli_dbus_properties_call_get_all (connection, -1, TP_IFACE_CONNECTION_INTERFACE_REQUESTS, dispatcher_connection_got_all, NULL, NULL, G_OBJECT (dispatcher)); } - else - { - tp_cli_connection_connect_to_new_channel (connection, - dispatcher_connection_new_channel_cb, - NULL, NULL, G_OBJECT (dispatcher), NULL); - - tp_cli_connection_call_list_channels (connection, -1, - dispatcher_connection_list_channels_cb, NULL, NULL, - G_OBJECT (dispatcher)); - - } /* Advertise VoIP capabilities */ capabilities = g_ptr_array_sized_new (1); @@ -908,6 +841,14 @@ dispatcher_new_connection_cb (EmpathyAccountManager *manager, } static void +dispatcher_new_connection_cb (EmpathyAccountManager *manager, + TpConnection *connection, + EmpathyDispatcher *dispatcher) +{ + dispatcher_init_connection_if_needed (dispatcher, connection); +} + +static void remove_idle_handlers (gpointer key, gpointer value, gpointer user_data) @@ -924,19 +865,25 @@ dispatcher_constructor (GType type, GObjectConstructParam *construct_params) { GObject *retval; + TpDBusDaemon *dbus; - if (dispatcher == NULL) - { - retval = G_OBJECT_CLASS (empathy_dispatcher_parent_class)->constructor - (type, n_construct_params, construct_params); + if (dispatcher != NULL) + return g_object_ref (dispatcher); - dispatcher = EMPATHY_DISPATCHER (retval); - g_object_add_weak_pointer (retval, (gpointer) &dispatcher); - } - else - { - retval = g_object_ref (dispatcher); - } + retval = G_OBJECT_CLASS (empathy_dispatcher_parent_class)->constructor + (type, n_construct_params, construct_params); + + dispatcher = EMPATHY_DISPATCHER (retval); + g_object_add_weak_pointer (retval, (gpointer) &dispatcher); + + dbus = tp_dbus_daemon_dup (NULL); + + g_assert (tp_dbus_daemon_request_name (dbus, + DISPATCHER_BUS_NAME, TRUE, NULL)); + dbus_g_connection_register_g_object (tp_get_bus (), + DISPATCHER_OBJECT_PATH, retval); + + DEBUG ("Registering at '%s'", DISPATCHER_OBJECT_PATH); return retval; } @@ -983,20 +930,113 @@ dispatcher_finalize (GObject *object) } g_object_unref (priv->account_manager); - g_object_unref (priv->mc); g_hash_table_destroy (priv->connections); g_hash_table_destroy (priv->outstanding_classes_requests); } static void +dispatcher_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + EmpathyDispatcher *dispatcher = EMPATHY_DISPATCHER (object); + EmpathyDispatcherPriv *priv = GET_PRIV (dispatcher); + + switch (property_id) + { + case PROP_INTERFACES: + g_value_set_boxed (value, empathy_dispatcher_interfaces); + break; + case PROP_CHANNEL_FILTER: + { + GPtrArray *filters = g_ptr_array_new (); + GHashTable *filter = g_hash_table_new (NULL, NULL); + + g_ptr_array_add (filters, filter); + + g_value_set_boxed (value, filters); + break; + } + case PROP_CHANNELS: + { + GPtrArray *accounts; + GList *l; + + accounts = g_ptr_array_new (); + + for (l = priv->channels; l != NULL; l = g_list_next (l)) + { + TpProxy *channel = TP_PROXY (l->data); + + g_ptr_array_add (accounts, + g_strdup (tp_proxy_get_object_path (channel))); + } + + g_value_set_boxed (value, accounts); + break; + } + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void empathy_dispatcher_class_init (EmpathyDispatcherClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); + GParamSpec *param_spec; + + static TpDBusPropertiesMixinPropImpl client_props[] = { + { "Interfaces", "interfaces", NULL }, + { NULL } + }; + static TpDBusPropertiesMixinPropImpl client_handler_props[] = { + { "HandlerChannelFilter", "channel-filter", NULL }, + { "HandledChannels", "channels", NULL }, + { NULL } + }; + static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = { + { TP_IFACE_CLIENT, + tp_dbus_properties_mixin_getter_gobject_properties, + NULL, + client_props + }, + { TP_IFACE_CLIENT_HANDLER, + tp_dbus_properties_mixin_getter_gobject_properties, + NULL, + client_handler_props + }, + { NULL } + }; object_class->finalize = dispatcher_finalize; object_class->constructor = dispatcher_constructor; + object_class->get_property = dispatcher_get_property; + + param_spec = g_param_spec_boxed ("interfaces", "interfaces", + "Available D-Bus interfaces", + G_TYPE_STRV, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + g_object_class_install_property (object_class, PROP_INTERFACES, param_spec); + + param_spec = g_param_spec_boxed ("channel-filter", "channel-filter", + "Filter for channels this handles", + TP_ARRAY_TYPE_CHANNEL_CLASS_LIST, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + g_object_class_install_property (object_class, + PROP_CHANNEL_FILTER, param_spec); + + param_spec = g_param_spec_boxed ("channels", "channels", + "List of channels we're handling", + EMPATHY_ARRAY_TYPE_OBJECT, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + g_object_class_install_property (object_class, + PROP_CHANNELS, param_spec); + signals[OBSERVE] = g_signal_new ("observe", G_TYPE_FROM_CLASS (klass), @@ -1027,8 +1067,12 @@ empathy_dispatcher_class_init (EmpathyDispatcherClass *klass) G_TYPE_NONE, 1, EMPATHY_TYPE_DISPATCH_OPERATION); + g_type_class_add_private (object_class, sizeof (EmpathyDispatcherPriv)); + klass->dbus_props_class.interfaces = prop_interfaces; + tp_dbus_properties_mixin_class_init (object_class, + G_STRUCT_OFFSET (EmpathyDispatcherClass, dbus_props_class)); } static void @@ -1039,7 +1083,6 @@ empathy_dispatcher_init (EmpathyDispatcher *dispatcher) EMPATHY_TYPE_DISPATCHER, EmpathyDispatcherPriv); dispatcher->priv = priv; - priv->mc = empathy_mission_control_dup_singleton (); priv->account_manager = empathy_account_manager_dup_singleton (); g_signal_connect (priv->account_manager, "new-connection", @@ -1753,3 +1796,59 @@ empathy_dispatcher_find_requestable_channel_classes_async g_hash_table_insert (priv->request_channel_class_async_ids, request, GUINT_TO_POINTER (source_id)); } + +static void +empathy_dispatcher_handle_channels (TpSvcClientHandler *self, + const gchar *account_path, + const gchar *connection_path, + const GPtrArray *channels, + const GPtrArray *requests_satisfied, + guint64 timestamp, + GHashTable *handler_info, + DBusGMethodInvocation *context) +{ + EmpathyDispatcher *dispatcher = EMPATHY_DISPATCHER (self); + EmpathyDispatcherPriv *priv = GET_PRIV (dispatcher); + int i; + EmpathyAccount *account; + TpConnection *connection; + + account = empathy_account_manager_ensure_account (priv->account_manager, + account_path); + g_assert (account != NULL); + + connection = empathy_account_get_connection_for_path (account, + connection_path); + if (connection == NULL) + { + GError error = { TP_ERRORS, TP_ERROR_INVALID_ARGUMENT, + "Invalid connection argument" }; + dbus_g_method_return_error (context, &error); + return; + } + + for (i = 0; i < channels->len ; i++) + { + GValueArray *arr = g_ptr_array_index (channels, i); + const gchar *object_path; + GHashTable *properties; + + object_path = g_value_get_boxed (g_value_array_get_nth (arr, 0)); + properties = g_value_get_boxed (g_value_array_get_nth (arr, 1)); + + dispatcher_connection_new_channel_with_properties (dispatcher, + connection, object_path, properties); + } + + tp_svc_client_handler_return_from_handle_channels (context); +} + +static void +empathy_dispatcher_client_handler_iface_init (gpointer g_iface, + gpointer g_iface_data) +{ + TpSvcClientHandlerClass *klass = (TpSvcClientHandlerClass *) g_iface; + + tp_svc_client_handler_implement_handle_channels (klass, + empathy_dispatcher_handle_channels); +} diff --git a/libempathy/empathy-dispatcher.h b/libempathy/empathy-dispatcher.h index d6c83f6c1..41a1430fb 100644 --- a/libempathy/empathy-dispatcher.h +++ b/libempathy/empathy-dispatcher.h @@ -26,6 +26,7 @@ #include <gio/gio.h> #include <telepathy-glib/channel.h> +#include <telepathy-glib/dbus-properties-mixin.h> #include "empathy-contact.h" #include "empathy-dispatch-operation.h" @@ -51,6 +52,7 @@ struct _EmpathyDispatcher struct _EmpathyDispatcherClass { GObjectClass parent_class; + TpDBusPropertiesMixinClass dbus_props_class; }; /* Will be called when the channel is ready for dispatching. The requestor diff --git a/libempathy/empathy-ft-handler.c b/libempathy/empathy-ft-handler.c index d24467b24..b05da94aa 100644 --- a/libempathy/empathy-ft-handler.c +++ b/libempathy/empathy-ft-handler.c @@ -25,6 +25,7 @@ #include <glib/gi18n.h> #include <telepathy-glib/util.h> #include <telepathy-glib/dbus.h> +#include <telepathy-glib/interfaces.h> #include "empathy-ft-handler.h" #include "empathy-tp-contact-factory.h" diff --git a/libempathy/empathy-idle.c b/libempathy/empathy-idle.c index ac0ca72f6..c86b997af 100644 --- a/libempathy/empathy-idle.c +++ b/libempathy/empathy-idle.c @@ -28,8 +28,8 @@ #include <telepathy-glib/dbus.h> #include <telepathy-glib/util.h> -#include <libmissioncontrol/mc-enum-types.h> +#include "empathy-account-manager.h" #include "empathy-idle.h" #include "empathy-utils.h" #include "empathy-connectivity.h" @@ -42,7 +42,6 @@ #define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyIdle) typedef struct { - MissionControl *mc; DBusGProxy *gs_proxy; EmpathyConnectivity *connectivity; gulong state_change_signal_id; @@ -58,6 +57,8 @@ typedef struct { gboolean is_idle; guint ext_away_timeout; + + EmpathyAccountManager *manager; } EmpathyIdlePriv; typedef enum { @@ -81,9 +82,10 @@ G_DEFINE_TYPE (EmpathyIdle, empathy_idle, G_TYPE_OBJECT); static EmpathyIdle * idle_singleton = NULL; static void -idle_presence_changed_cb (MissionControl *mc, +idle_presence_changed_cb (EmpathyAccountManager *manager, TpConnectionPresenceType state, gchar *status, + gchar *status_message, EmpathyIdle *idle) { EmpathyIdlePriv *priv; @@ -94,14 +96,15 @@ idle_presence_changed_cb (MissionControl *mc, /* Assume our presence is offline if MC reports UNSET */ state = TP_CONNECTION_PRESENCE_TYPE_OFFLINE; - DEBUG ("Presence changed to '%s' (%d)", status, state); + DEBUG ("Presence changed to '%s' (%d) \"%s\"", status, state, + status_message); g_free (priv->status); priv->state = state; - priv->status = NULL; - if (!EMP_STR_EMPTY (status)) { - priv->status = g_strdup (status); - } + if (EMP_STR_EMPTY (status_message)) + priv->status = NULL; + else + priv->status = g_strdup (status_message); g_object_notify (G_OBJECT (idle), "state"); g_object_notify (G_OBJECT (idle), "status"); @@ -265,7 +268,6 @@ idle_finalize (GObject *object) priv = GET_PRIV (object); g_free (priv->status); - g_object_unref (priv->mc); if (priv->gs_proxy) { g_object_unref (priv->gs_proxy); @@ -407,67 +409,22 @@ empathy_idle_class_init (EmpathyIdleClass *klass) g_type_class_add_private (object_class, sizeof (EmpathyIdlePriv)); } -static TpConnectionPresenceType -empathy_idle_get_actual_presence (EmpathyIdle *idle, GError **error) -{ - McPresence presence; - EmpathyIdlePriv *priv = GET_PRIV (idle); - - presence = mission_control_get_presence_actual (priv->mc, error); - - switch (presence) { - case MC_PRESENCE_OFFLINE: - return TP_CONNECTION_PRESENCE_TYPE_OFFLINE; - case MC_PRESENCE_AVAILABLE: - return TP_CONNECTION_PRESENCE_TYPE_AVAILABLE; - case MC_PRESENCE_AWAY: - return TP_CONNECTION_PRESENCE_TYPE_AWAY; - case MC_PRESENCE_EXTENDED_AWAY: - return TP_CONNECTION_PRESENCE_TYPE_EXTENDED_AWAY; - case MC_PRESENCE_HIDDEN: - return TP_CONNECTION_PRESENCE_TYPE_HIDDEN; - case MC_PRESENCE_DO_NOT_DISTURB: - return TP_CONNECTION_PRESENCE_TYPE_BUSY; - default: - return TP_CONNECTION_PRESENCE_TYPE_OFFLINE; - } -} - static void empathy_idle_init (EmpathyIdle *idle) { - GError *error = NULL; EmpathyIdlePriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (idle, EMPATHY_TYPE_IDLE, EmpathyIdlePriv); idle->priv = priv; priv->is_idle = FALSE; - priv->mc = empathy_mission_control_dup_singleton (); - priv->state = empathy_idle_get_actual_presence (idle, &error); - if (error) { - DEBUG ("Error getting actual presence: %s", error->message); - - /* Fallback to OFFLINE as that's what mission_control_get_presence_actual - does. This also ensure to always display the status icon (there is no - unset presence icon). */ - priv->state = TP_CONNECTION_PRESENCE_TYPE_OFFLINE; - g_clear_error (&error); - } - priv->status = mission_control_get_presence_message_actual (priv->mc, &error); - if (error || EMP_STR_EMPTY (priv->status)) { - g_free (priv->status); - priv->status = NULL; - if (error) { - DEBUG ("Error getting actual presence message: %s", error->message); - g_clear_error (&error); - } - } + priv->manager = empathy_account_manager_dup_singleton (); + priv->state = empathy_account_manager_get_global_presence (priv->manager, + NULL, &priv->status); - dbus_g_proxy_connect_signal (DBUS_G_PROXY (priv->mc), - "PresenceChanged", - G_CALLBACK (idle_presence_changed_cb), - idle, NULL); + + g_signal_connect (priv->manager, "global-presence-changed", + G_CALLBACK (idle_presence_changed_cb), idle); priv->gs_proxy = dbus_g_proxy_new_for_name (tp_get_bus (), "org.gnome.SessionManager", @@ -568,36 +525,31 @@ empathy_idle_set_flash_state (EmpathyIdle *idle, static void empathy_idle_do_set_presence (EmpathyIdle *idle, - TpConnectionPresenceType state, - const gchar *status) + TpConnectionPresenceType status_type, + const gchar *status_message) { - McPresence mc_state = MC_PRESENCE_UNSET; EmpathyIdlePriv *priv = GET_PRIV (idle); + const gchar *statuses[NUM_TP_CONNECTION_PRESENCE_TYPES] = { + NULL, + "offline", + "available", + "away", + "xa", + "hidden", + "busy", + NULL, + NULL, + }; + const gchar *status; - switch (state) { - case TP_CONNECTION_PRESENCE_TYPE_OFFLINE: - mc_state = MC_PRESENCE_OFFLINE; - break; - case TP_CONNECTION_PRESENCE_TYPE_AVAILABLE: - mc_state = MC_PRESENCE_AVAILABLE; - break; - case TP_CONNECTION_PRESENCE_TYPE_AWAY: - mc_state = MC_PRESENCE_AWAY; - break; - case TP_CONNECTION_PRESENCE_TYPE_EXTENDED_AWAY: - mc_state = MC_PRESENCE_EXTENDED_AWAY; - break; - case TP_CONNECTION_PRESENCE_TYPE_HIDDEN: - mc_state = MC_PRESENCE_HIDDEN; - break; - case TP_CONNECTION_PRESENCE_TYPE_BUSY: - mc_state = MC_PRESENCE_DO_NOT_DISTURB; - break; - default: - g_assert_not_reached (); - } + g_assert (status_type > 0 && status_type < NUM_TP_CONNECTION_PRESENCE_TYPES); + + status = statuses[status_type]; + + g_return_if_fail (status != NULL); - mission_control_set_presence (priv->mc, mc_state, status, NULL, NULL); + empathy_account_manager_request_global_presence (priv->manager, + status_type, status, status_message); } void diff --git a/libempathy/empathy-idle.h b/libempathy/empathy-idle.h index d0b426e59..47dcfee23 100644 --- a/libempathy/empathy-idle.h +++ b/libempathy/empathy-idle.h @@ -24,7 +24,7 @@ #include <glib.h> -#include <libmissioncontrol/mission-control.h> +#include <telepathy-glib/enums.h> G_BEGIN_DECLS diff --git a/libempathy/empathy-log-manager.c b/libempathy/empathy-log-manager.c index c1e20f487..309b3b60f 100644 --- a/libempathy/empathy-log-manager.c +++ b/libempathy/empathy-log-manager.c @@ -29,6 +29,7 @@ #include <glib/gstdio.h> #include <telepathy-glib/util.h> +#include <telepathy-glib/interfaces.h> #include "empathy-log-manager.h" #include "empathy-log-store-empathy.h" diff --git a/libempathy/empathy-log-manager.h b/libempathy/empathy-log-manager.h index 6907e2ede..a67f6e8dd 100644 --- a/libempathy/empathy-log-manager.h +++ b/libempathy/empathy-log-manager.h @@ -26,8 +26,6 @@ #include <glib-object.h> -#include <libmissioncontrol/mc-account.h> - #include "empathy-message.h" #include "empathy-dispatcher.h" diff --git a/libempathy/empathy-log-store-empathy.c b/libempathy/empathy-log-store-empathy.c index b814defe7..9963bfc44 100644 --- a/libempathy/empathy-log-store-empathy.c +++ b/libempathy/empathy-log-store-empathy.c @@ -36,6 +36,9 @@ #include <glib/gstdio.h> #define G_DISABLE_DEPRECATED +#include <telepathy-glib/util.h> +#include <telepathy-glib/defs.h> + #include "empathy-log-store.h" #include "empathy-log-store-empathy.h" #include "empathy-log-manager.h" @@ -105,33 +108,48 @@ empathy_log_store_empathy_init (EmpathyLogStoreEmpathy *self) self->priv = priv; - priv->basedir = g_build_path (G_DIR_SEPARATOR_S, g_get_home_dir (), - ".gnome2", PACKAGE_NAME, "logs", NULL); + priv->basedir = g_build_path (G_DIR_SEPARATOR_S, g_get_user_data_dir (), + PACKAGE_NAME, "logs", NULL); priv->name = g_strdup ("Empathy"); priv->account_manager = empathy_account_manager_dup_singleton (); } static gchar * +log_store_account_to_dirname (EmpathyAccount *account) +{ + const gchar *name; + + name = empathy_account_get_unique_name (account); + if (g_str_has_prefix (name, TP_ACCOUNT_OBJECT_PATH_BASE)) + name += strlen (TP_ACCOUNT_OBJECT_PATH_BASE); + + return g_strdelimit (g_strdup (name), "/", '_'); +} + + +static gchar * log_store_empathy_get_dir (EmpathyLogStore *self, EmpathyAccount *account, const gchar *chat_id, gboolean chatroom) { - const gchar *account_id; gchar *basedir; + gchar *escaped; EmpathyLogStoreEmpathyPriv *priv; priv = GET_PRIV (self); - account_id = empathy_account_get_unique_name (account); + escaped = log_store_account_to_dirname (account); if (chatroom) - basedir = g_build_path (G_DIR_SEPARATOR_S, priv->basedir, account_id, + basedir = g_build_path (G_DIR_SEPARATOR_S, priv->basedir, escaped, LOG_DIR_CHATROOMS, chat_id, NULL); else basedir = g_build_path (G_DIR_SEPARATOR_S, priv->basedir, - account_id, chat_id, NULL); + escaped, chat_id, NULL); + + g_free (escaped); return basedir; } @@ -371,10 +389,11 @@ log_store_empathy_search_hit_new (EmpathyLogStore *self, { EmpathyLogStoreEmpathyPriv *priv = GET_PRIV (self); EmpathyLogSearchHit *hit; - const gchar *account_name; + gchar *account_name; const gchar *end; gchar **strv; guint len; + GList *accounts, *l; if (!g_str_has_suffix (filename, LOG_FILENAME_SUFFIX)) return NULL; @@ -394,8 +413,25 @@ log_store_empathy_search_hit_new (EmpathyLogStore *self, else account_name = strv[len-3]; - hit->account = empathy_account_manager_lookup (priv->account_manager, - account_name); + accounts = empathy_account_manager_dup_accounts (priv->account_manager); + + for (l = accounts; l != NULL; l = g_list_next (l)) + { + EmpathyAccount *account = EMPATHY_ACCOUNT (l->data); + gchar *name; + + name = log_store_account_to_dirname (account); + if (!tp_strdiff (name, account_name)) + { + g_assert (hit->account == NULL); + hit->account = account; + g_object_ref (account); + } + g_object_unref (account); + g_free (name); + } + g_list_free (accounts); + hit->filename = g_strdup (filename); g_strfreev (strv); @@ -428,9 +464,15 @@ log_store_empathy_get_messages_for_file (EmpathyLogStore *self, /* Get the account from the filename */ hit = log_store_empathy_search_hit_new (self, filename); - account = g_object_ref (hit->account); + + if (hit->account != NULL) + account = g_object_ref (hit->account); + empathy_log_manager_search_hit_free (hit); + if (hit->account == NULL) + return NULL; + /* Create parser. */ ctxt = xmlNewParserCtxt (); @@ -708,8 +750,7 @@ log_store_empathy_get_chats (EmpathyLogStore *self, priv = GET_PRIV (self); - dir = g_build_filename (priv->basedir, - empathy_account_get_unique_name (account), NULL); + dir = log_store_empathy_get_dir (self, account, NULL, FALSE); hits = log_store_empathy_get_chats_for_dir (self, dir, FALSE); diff --git a/libempathy/empathy-tp-chat.c b/libempathy/empathy-tp-chat.c index 9300364d5..69057a878 100644 --- a/libempathy/empathy-tp-chat.c +++ b/libempathy/empathy-tp-chat.c @@ -26,6 +26,7 @@ #include <telepathy-glib/channel.h> #include <telepathy-glib/dbus.h> #include <telepathy-glib/util.h> +#include <telepathy-glib/interfaces.h> #include "empathy-tp-chat.h" #include "empathy-tp-contact-factory.h" diff --git a/libempathy/empathy-tp-contact-factory.c b/libempathy/empathy-tp-contact-factory.c index f62c7f12f..6b4c20b53 100644 --- a/libempathy/empathy-tp-contact-factory.c +++ b/libempathy/empathy-tp-contact-factory.c @@ -26,6 +26,8 @@ #include <telepathy-glib/util.h> #include <telepathy-glib/gtypes.h> #include <telepathy-glib/dbus.h> +#include <telepathy-glib/interfaces.h> + #if HAVE_GEOCLUE #include <geoclue/geoclue-geocode.h> #endif diff --git a/libempathy/empathy-tp-contact-list.c b/libempathy/empathy-tp-contact-list.c index 71d8efa67..2bf2ec416 100644 --- a/libempathy/empathy-tp-contact-list.c +++ b/libempathy/empathy-tp-contact-list.c @@ -29,6 +29,7 @@ #include <telepathy-glib/connection.h> #include <telepathy-glib/util.h> #include <telepathy-glib/dbus.h> +#include <telepathy-glib/interfaces.h> #include "empathy-tp-contact-list.h" #include "empathy-tp-contact-factory.h" diff --git a/libempathy/empathy-tp-file.c b/libempathy/empathy-tp-file.c index e60b2999d..c43fa0be7 100644 --- a/libempathy/empathy-tp-file.c +++ b/libempathy/empathy-tp-file.c @@ -40,6 +40,7 @@ #include <telepathy-glib/gtypes.h> #include <telepathy-glib/proxy-subclass.h> #include <telepathy-glib/util.h> +#include <telepathy-glib/interfaces.h> #include "empathy-tp-file.h" #include "empathy-marshal.h" diff --git a/libempathy/empathy-tp-roomlist.c b/libempathy/empathy-tp-roomlist.c index b3d955ee4..54d232339 100644 --- a/libempathy/empathy-tp-roomlist.c +++ b/libempathy/empathy-tp-roomlist.c @@ -26,6 +26,7 @@ #include <telepathy-glib/channel.h> #include <telepathy-glib/dbus.h> #include <telepathy-glib/util.h> +#include <telepathy-glib/interfaces.h> #include "empathy-account.h" @@ -517,6 +518,10 @@ empathy_tp_roomlist_stop (EmpathyTpRoomlist *list) EmpathyTpRoomlistPriv *priv = GET_PRIV (list); g_return_if_fail (EMPATHY_IS_TP_ROOMLIST (list)); + + if (priv->channel == NULL) + return; + g_return_if_fail (TP_IS_CHANNEL (priv->channel)); tp_cli_channel_type_room_list_call_stop_listing (priv->channel, -1, diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c index fd54c9a98..92d12cb63 100644 --- a/libempathy/empathy-utils.c +++ b/libempathy/empathy-utils.c @@ -227,36 +227,6 @@ empathy_xml_node_find_child_prop_value (xmlNodePtr node, return found; } -guint -empathy_account_hash (gconstpointer key) -{ - g_return_val_if_fail (EMPATHY_IS_ACCOUNT (key), 0); - - return g_str_hash (empathy_account_get_unique_name (EMPATHY_ACCOUNT (key))); -} - -gboolean -empathy_account_equal (gconstpointer a, - gconstpointer b) -{ - return a == b; -} - -MissionControl * -empathy_mission_control_dup_singleton (void) -{ - static MissionControl *mc = NULL; - - if (!mc) { - mc = mission_control_new (tp_get_bus ()); - g_object_add_weak_pointer (G_OBJECT (mc), (gpointer) &mc); - } else { - g_object_ref (mc); - } - - return mc; -} - const gchar * empathy_presence_get_default_message (TpConnectionPresenceType presence) { @@ -378,3 +348,57 @@ empathy_uint_compare (gconstpointer a, return *(guint *) a - *(guint *) b; } +gchar * +empathy_protocol_icon_name (const gchar *protocol) +{ + return g_strdup_printf ("im-%s", protocol); +} + +GType +empathy_type_dbus_ao (void) +{ + static GType t = 0; + + if (G_UNLIKELY (t == 0)) + t = dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH); + + return t; +} + +const char * +empathy_protocol_name_to_display_name (const gchar *proto_name) +{ + int i; + static struct { + const gchar *proto; + const gchar *display; + gboolean translated; + } names[] = { + { "jabber", "Jabber", FALSE }, + { "msn", "MSN", FALSE, }, + { "local-xmpp", N_("People Nearby"), TRUE }, + { "irc", "IRC", FALSE }, + { "icq", "ICQ", FALSE }, + { "aim", "AIM", FALSE }, + { "yahoo", "Yahoo!", FALSE }, + { "yahoojp", N_("Yahoo! Japan"), TRUE }, + { "facebook", N_("Facebook Chat"), TRUE }, + { "groupwise", "GroupWise", FALSE }, + { "sip", "SIP", FALSE }, + { NULL, NULL } + }; + + for (i = 0; names[i].proto != NULL; i++) + { + if (!tp_strdiff (proto_name, names[i].proto)) + { + if (names[i].translated) + return _(names[i].display); + else + return names[i].display; + } + } + + return NULL; +} + diff --git a/libempathy/empathy-utils.h b/libempathy/empathy-utils.h index 42acbc8e3..9015b3889 100644 --- a/libempathy/empathy-utils.h +++ b/libempathy/empathy-utils.h @@ -32,8 +32,6 @@ #include <libxml/parser.h> #include <libxml/tree.h> -#include <libmissioncontrol/mission-control.h> - #include "empathy-contact.h" #define EMPATHY_GET_PRIV(obj,type) ((type##Priv *) ((type *) obj)->priv) @@ -64,10 +62,6 @@ xmlNodePtr empathy_xml_node_find_child_prop_value (xmlNodePtr node, const gchar *prop_value); /* Others */ -guint empathy_account_hash (gconstpointer key); -gboolean empathy_account_equal (gconstpointer a, - gconstpointer b); -MissionControl *empathy_mission_control_dup_singleton (void); const gchar * empathy_presence_get_default_message (TpConnectionPresenceType presence); const gchar * empathy_presence_to_str (TpConnectionPresenceType presence); TpConnectionPresenceType empathy_presence_from_str (const gchar *str); @@ -80,6 +74,12 @@ gboolean empathy_check_available_state (void); gint empathy_uint_compare (gconstpointer a, gconstpointer b); +gchar *empathy_protocol_icon_name (const gchar *protocol); +const gchar *empathy_protocol_name_to_display_name (const gchar *proto_name); + +#define EMPATHY_ARRAY_TYPE_OBJECT (empathy_type_dbus_ao ()) +GType empathy_type_dbus_ao (void); + G_END_DECLS #endif /* __EMPATHY_UTILS_H__ */ diff --git a/megaphone/src/megaphone-applet.c b/megaphone/src/megaphone-applet.c index 132e8b74f..c269c7c7d 100644 --- a/megaphone/src/megaphone-applet.c +++ b/megaphone/src/megaphone-applet.c @@ -31,8 +31,6 @@ #include <panel-2.0/panel-applet-gconf.h> #include <gconf/gconf-client.h> -#include <libmissioncontrol/mission-control.h> - #include <libempathy/empathy-tp-contact-factory.h> #include <libempathy/empathy-account-manager.h> #include <libempathy/empathy-dispatcher.h> @@ -199,7 +197,7 @@ megaphone_applet_new_connection_cb (EmpathyAccountManager *manager, { MegaphoneAppletPriv *priv = GET_PRIV (applet); - if (priv->contact || !empathy_account_equal (account, priv->account)) { + if (priv->contact || account != priv->account) { return; } @@ -445,7 +443,7 @@ megaphone_applet_set_contact (MegaphoneApplet *applet, /* Lookup the new contact */ if (str) { strv = g_strsplit (str, "/", 2); - priv->account = empathy_account_manager_lookup (priv->account_manager, + priv->account = empathy_account_manager_get_account (priv->account_manager, strv[0]); priv->id = strv[1]; g_free (strv[0]); @@ -453,6 +451,7 @@ megaphone_applet_set_contact (MegaphoneApplet *applet, } if (priv->account) { + g_object_ref (priv->account); connection = empathy_account_get_connection (priv->account); if (connection) { megaphone_applet_new_connection_cb (priv->account_manager, diff --git a/nothere/src/nothere-applet.c b/nothere/src/nothere-applet.c index 243272e67..8cdde3e97 100644 --- a/nothere/src/nothere-applet.c +++ b/nothere/src/nothere-applet.c @@ -27,7 +27,6 @@ #include <gtk/gtk.h> #include <bonobo/bonobo-ui-component.h> -#include <libmissioncontrol/mission-control.h> #include <libempathy-gtk/empathy-presence-chooser.h> #include <libempathy-gtk/empathy-ui-utils.h> diff --git a/po/POTFILES.in b/po/POTFILES.in index 9d36f245b..b7dcd7828 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -4,6 +4,7 @@ data/empathy.desktop.in.in data/empathy.schemas.in +libempathy/empathy-account.c libempathy/empathy-ft-handler.c libempathy/empathy-tp-contact-list.c libempathy/empathy-tp-file.c @@ -20,7 +21,7 @@ libempathy-gtk/empathy-account-widget-irc.c [type: gettext/glade]libempathy-gtk/empathy-account-widget-irc.ui [type: gettext/glade]libempathy-gtk/empathy-account-widget-jabber.ui [type: gettext/glade]libempathy-gtk/empathy-account-widget-msn.ui -[type: gettext/glade]libempathy-gtk/empathy-account-widget-salut.ui +[type: gettext/glade]libempathy-gtk/empathy-account-widget-local-xmpp.ui [type: gettext/glade]libempathy-gtk/empathy-account-widget-sip.ui [type: gettext/glade]libempathy-gtk/empathy-account-widget-yahoo.ui libempathy-gtk/empathy-avatar-chooser.c @@ -61,6 +62,7 @@ nothere/src/nothere-applet.c src/empathy.c src/empathy-about-dialog.c +src/empathy-account-assistant.c src/empathy-accounts-dialog.c [type: gettext/glade]src/empathy-accounts-dialog.ui src/empathy-call-window.c @@ -73,7 +75,10 @@ src/empathy-event-manager.c src/empathy-ft-manager.c [type: gettext/glade]src/empathy-ft-manager.ui src/empathy-import-dialog.c +src/empathy-import-widget.c [type: gettext/glade]src/empathy-import-dialog.ui +src/empathy-import-widget.c +src/empathy-import-mc4-accounts.c src/empathy-main-window.c [type: gettext/glade]src/empathy-main-window.ui src/empathy-new-chatroom-dialog.c @@ -7,10 +7,10 @@ # msgid "" msgstr "" -"Project-Id-Version: empathy trunk\n" +"Project-Id-Version: empathy master\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-03-16 12:43+0200\n" -"PO-Revision-Date: 2009-03-16 12:43+0200\n" +"POT-Creation-Date: 2009-08-23 23:22+0300\n" +"PO-Revision-Date: 2009-08-23 23:22+0300\n" "Last-Translator: Alexander Shopov <ash@contact.bg>\n" "Language-Team: Bulgarian <dict@fsa-bg.org>\n" "MIME-Version: 1.0\n" @@ -19,12 +19,12 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: ../data/empathy.desktop.in.in.h:1 -msgid "Empathy Instant Messenger" -msgstr "Бързи ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñ Empathy" +msgid "Empathy IM Client" +msgstr "Клиент за бързи ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Empathy" #: ../data/empathy.desktop.in.in.h:2 -msgid "Send and receive instant messages" -msgstr "Изпращане и получаване на бързи ÑъобщениÑ" +msgid "Send and receive messages" +msgstr "Изпращане и получаване на ÑъобщениÑ" #: ../data/empathy.schemas.in.h:1 msgid "Always open a separate chat window for new chats." @@ -54,156 +54,239 @@ msgid "Compact contact list" msgstr "Стегнат ÑпиÑък Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¸" #: ../data/empathy.schemas.in.h:6 +msgid "Connection managers should be used" +msgstr "Да Ñе използва управление на връзката" + +#: ../data/empathy.schemas.in.h:7 msgid "Contact list sort criterium" msgstr "Критерий за подредбата на ÑпиÑъка Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¸Ñ‚Ðµ" -#: ../data/empathy.schemas.in.h:7 +#: ../data/empathy.schemas.in.h:8 msgid "Default directory to select an avatar image from" msgstr "Стандартна папка, в коÑто да Ñе Ñ‚ÑŠÑ€ÑÑÑ‚ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð·Ð° аватари" -#: ../data/empathy.schemas.in.h:8 +#: ../data/empathy.schemas.in.h:9 msgid "Disable popup notifications when away" msgstr "Без извеÑÑ‚Ñване Ñ Ð¸Ð·Ñкачащи прозорци в ÑÑŠÑтоÑние „ОтÑÑŠÑтващ“" -#: ../data/empathy.schemas.in.h:9 +#: ../data/empathy.schemas.in.h:10 msgid "Disable sounds when away" msgstr "Без звуци звуци в ÑÑŠÑтоÑние „ОтÑÑŠÑтващ“" -#: ../data/empathy.schemas.in.h:10 +#: ../data/empathy.schemas.in.h:11 +msgid "Empathy can publish the user's location" +msgstr "Empathy може да публикува меÑтоположението на потребителÑ" + +#: ../data/empathy.schemas.in.h:12 +msgid "Empathy can use the GPS to guess the location" +msgstr "Empathy може да ползва GPS, за да отгатне меÑтоположението" + +#: ../data/empathy.schemas.in.h:13 +msgid "Empathy can use the cellular network to guess the location" +msgstr "" +"Empathy може да използва мобилна телефонна мрежа, за да отгатне " +"меÑтоположението" + +#: ../data/empathy.schemas.in.h:14 +msgid "Empathy can use the network to guess the location" +msgstr "Empathy може да ползва мрежата, за да отгатне меÑтоположението" + +#: ../data/empathy.schemas.in.h:15 msgid "Empathy default download folder" msgstr "Стандартна папка за получените файлове от Empathy" -#: ../data/empathy.schemas.in.h:11 +#: ../data/empathy.schemas.in.h:16 msgid "Empathy has asked about importing accounts" msgstr "Empathy запита за внаÑÑнето на региÑтрации" -#: ../data/empathy.schemas.in.h:12 +#: ../data/empathy.schemas.in.h:17 msgid "Empathy should auto-connect on startup" msgstr "Ðвтоматично Ñвързване при Ñтартиране" -#: ../data/empathy.schemas.in.h:13 +#: ../data/empathy.schemas.in.h:18 +msgid "Empathy should reduce the location's accuracy" +msgstr "ÐамалÑване на точноÑтта на меÑтоположението" + +#: ../data/empathy.schemas.in.h:19 msgid "Empathy should use the avatar of the contact as the chat window icon" msgstr "Иконата на прозореца за разговори да е аватарът на контакта" -#: ../data/empathy.schemas.in.h:14 +#: ../data/empathy.schemas.in.h:20 +msgid "Enable WebKit Developer Tools" +msgstr "Включване на инÑтрументите за разработка на WebKit" + +#: ../data/empathy.schemas.in.h:21 msgid "Enable popup notifications for new messages" msgstr "ИзвеÑÑ‚Ñване Ñ Ð¸Ð·Ñкачащи прозорци при нови ÑъобщениÑ" -#: ../data/empathy.schemas.in.h:15 +#: ../data/empathy.schemas.in.h:22 msgid "Enable spell checker" msgstr "Да Ñе ползва проверка на правопиÑа" -#: ../data/empathy.schemas.in.h:16 +#: ../data/empathy.schemas.in.h:23 msgid "Hide main window" msgstr "Скриване на оÑÐ½Ð¾Ð²Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ†" -#: ../data/empathy.schemas.in.h:17 +#: ../data/empathy.schemas.in.h:24 msgid "Hide the main window." msgstr "Скриване на оÑÐ½Ð¾Ð²Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ†." -#: ../data/empathy.schemas.in.h:18 -msgid "NetworkManager should be used" -msgstr "Да Ñе използва NetworkManager" - -#: ../data/empathy.schemas.in.h:19 +#: ../data/empathy.schemas.in.h:25 msgid "Nick completed character" msgstr "Знак за допиÑване на пÑевдоними" -#: ../data/empathy.schemas.in.h:20 +#: ../data/empathy.schemas.in.h:26 msgid "Open new chats in separate windows" msgstr "ОтварÑне на разговорите в отделни прозорци" -#: ../data/empathy.schemas.in.h:21 +#: ../data/empathy.schemas.in.h:27 +msgid "Path of the adium theme to use" +msgstr "Път до темата на adium, коÑто да Ñе ползва" + +#: ../data/empathy.schemas.in.h:28 +msgid "Path of the adium theme to use if the theme used for chat is adium." +msgstr "" +"Път до темата на adium, коÑто да Ñе ползва, ако клиентът за ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ðµ " +"adium." + +#: ../data/empathy.schemas.in.h:29 msgid "Play a sound for incoming messages" msgstr "ИзвеÑÑ‚Ñване ÑÑŠÑ Ð·Ð²ÑƒÐº при приÑтигане на Ñъобщение" -#: ../data/empathy.schemas.in.h:22 +#: ../data/empathy.schemas.in.h:30 msgid "Play a sound for new conversations" msgstr "ИзвеÑÑ‚Ñване ÑÑŠÑ Ð·Ð²ÑƒÐº при нов разговор" -#: ../data/empathy.schemas.in.h:23 +#: ../data/empathy.schemas.in.h:31 msgid "Play a sound for outgoing messages" msgstr "ИзвеÑÑ‚Ñване ÑÑŠÑ Ð·Ð²ÑƒÐº при изпращане на Ñъобщение" -#: ../data/empathy.schemas.in.h:24 +#: ../data/empathy.schemas.in.h:32 msgid "Play a sound when a contact logs in" msgstr "ИзвеÑÑ‚Ñване ÑÑŠÑ Ð·Ð²ÑƒÐº при влизане на контакт в мрежата" -#: ../data/empathy.schemas.in.h:25 +#: ../data/empathy.schemas.in.h:33 msgid "Play a sound when a contact logs out" msgstr "ИзвеÑÑ‚Ñване ÑÑŠÑ Ð·Ð²ÑƒÐº при излизане на контакт от мрежата" -#: ../data/empathy.schemas.in.h:26 +#: ../data/empathy.schemas.in.h:34 msgid "Play a sound when we log in" msgstr "ИзвеÑÑ‚Ñване ÑÑŠÑ Ð·Ð²ÑƒÐº при влизането ви в мрежата" -#: ../data/empathy.schemas.in.h:27 +#: ../data/empathy.schemas.in.h:35 msgid "Play a sound when we log out" msgstr "ИзвеÑÑ‚Ñване ÑÑŠÑ Ð·Ð²ÑƒÐº при излизането ви от мрежата" -#: ../data/empathy.schemas.in.h:28 +#: ../data/empathy.schemas.in.h:36 msgid "Popup notifications if the chat isn't focused" msgstr "ИзвеÑÑ‚Ñване Ñ Ð¸Ð·Ñкачащи прозорци, когато разговорът не е на фокуÑ" -#: ../data/empathy.schemas.in.h:29 +#: ../data/empathy.schemas.in.h:37 +msgid "Popup notifications when a contact sign in" +msgstr "ИзвеÑÑ‚Ñване Ñ Ð¸Ð·Ñкачащи прозорци, когато контакт влезе в мрежата" + +#: ../data/empathy.schemas.in.h:38 +msgid "Popup notifications when a contact sign out" +msgstr "ИзвеÑÑ‚Ñване Ñ Ð¸Ð·Ñкачащи прозорци, когато контакт излезе извън мрежата" + +#: ../data/empathy.schemas.in.h:39 msgid "Salut account is created" msgstr "Създадена е региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð·Ð° Salut" -#: ../data/empathy.schemas.in.h:30 +#: ../data/empathy.schemas.in.h:40 msgid "Show avatars" msgstr "Показване на аватари" -#: ../data/empathy.schemas.in.h:31 +#: ../data/empathy.schemas.in.h:41 +msgid "Show contact list in rooms" +msgstr "Показване на ÑпиÑъка Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¸ в Ñтаите" + +#: ../data/empathy.schemas.in.h:42 msgid "Show hint about closing the main window" msgstr "Показване на Ñъвет за затварÑне на оÑÐ½Ð¾Ð²Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ†" -#: ../data/empathy.schemas.in.h:32 +#: ../data/empathy.schemas.in.h:43 msgid "Show offline contacts" msgstr "Показване на контактите, които не Ñа в мрежата" -#: ../data/empathy.schemas.in.h:33 +#: ../data/empathy.schemas.in.h:44 msgid "Spell checking languages" msgstr "Езици Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° на правопиÑа" -#: ../data/empathy.schemas.in.h:34 +#: ../data/empathy.schemas.in.h:45 msgid "The default folder to save file transfers in." msgstr "Стандартната папка, в коÑто да Ñе запазват получените файлове." -#: ../data/empathy.schemas.in.h:35 +#: ../data/empathy.schemas.in.h:46 msgid "The last directory that an avatar image was chosen from." msgstr "ПоÑледната папка, от коÑто е взето изображение за аватар." -#: ../data/empathy.schemas.in.h:36 +#: ../data/empathy.schemas.in.h:47 msgid "The theme that is used to display the conversation in chat windows." msgstr "Графичната тема за прозорците за разговори." -#: ../data/empathy.schemas.in.h:37 +#: ../data/empathy.schemas.in.h:48 msgid "Use graphical smileys" msgstr "Ð˜Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð·Ð° емотикони" -#: ../data/empathy.schemas.in.h:38 +#: ../data/empathy.schemas.in.h:49 msgid "Use notification sounds" msgstr "ИзвеÑÑ‚Ñване ÑÑŠÑ Ð·Ð²ÑƒÑ†Ð¸" -#: ../data/empathy.schemas.in.h:39 +#: ../data/empathy.schemas.in.h:50 msgid "Use theme for chat rooms" msgstr "Графична тема за прозорците за разговори" -#: ../data/empathy.schemas.in.h:40 +#: ../data/empathy.schemas.in.h:51 +msgid "" +"Whether WebKit developer tools, such as the Web Inspector, should be enabled." +msgstr "" +"Дали инÑтрументите към WebKit за разработка (напр. уеб инÑпекторът) да Ñе " +"включат." + +#: ../data/empathy.schemas.in.h:52 +msgid "Whether or not Empathy can publish the user's location to his contacts." +msgstr "" +"Дали Empathy да публикува меÑтоположението на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ ÐºÑŠÐ¼ контактите." + +#: ../data/empathy.schemas.in.h:53 +msgid "Whether or not Empathy can use the GPS to guess the location." +msgstr "Дали Empathy да използва GPS за изчиÑлÑване на меÑтоположението." + +#: ../data/empathy.schemas.in.h:54 +msgid "" +"Whether or not Empathy can use the cellular network to guess the location." +msgstr "" +"Дали Empathy да използва мрежа за мобилни телефони за изчиÑлÑване на " +"меÑтоположението." + +#: ../data/empathy.schemas.in.h:55 +msgid "Whether or not Empathy can use the network to guess the location." +msgstr "Дали Empathy да използва мрежата за изчиÑлÑване на меÑтоположението." + +#: ../data/empathy.schemas.in.h:56 msgid "" "Whether or not Empathy has asked about importing accounts from other " "programs." msgstr "" -"Дали Empathy вече е запитвала за внаÑÑнето на региÑтрациите от другите " -"програми." +"Дали програмата Empathy вече е запитвала за внаÑÑнето на региÑтрациите от " +"другите програми." -#: ../data/empathy.schemas.in.h:41 +#: ../data/empathy.schemas.in.h:57 msgid "" "Whether or not Empathy should automatically log in to your accounts on " "startup." msgstr "Дали Empathy автоматично да включва региÑтрациите ви при Ñтартиране." -#: ../data/empathy.schemas.in.h:42 +#: ../data/empathy.schemas.in.h:58 +msgid "" +"Whether or not Empathy should reduce the location's accuracy for privacy " +"reasons." +msgstr "" +"Дали Empathy да намалÑва точноÑтта на меÑтоположението, за да защитава " +"личните данни." + +#: ../data/empathy.schemas.in.h:59 msgid "" "Whether or not Empathy should use the avatar of the contact as the chat " "window icon." @@ -211,21 +294,21 @@ msgstr "" "Дали Empathy да ползва аватара на контакта за икона на прозореца за " "разговори." -#: ../data/empathy.schemas.in.h:43 +#: ../data/empathy.schemas.in.h:60 msgid "" -"Whether or not the Salut account has been created on the first Empathy run." +"Whether or not connectivity managers should be used to automatically " +"disconnect/reconnect." msgstr "" -"Дали при първото Ñтартиране на Empathy е Ñъздадена региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð·Ð° Salut." +"Дали да Ñе използват програми за управление на връзките за автоматичното им " +"прекъÑване и възÑтановÑване." -#: ../data/empathy.schemas.in.h:44 +#: ../data/empathy.schemas.in.h:61 msgid "" -"Whether or not the network manager should be used to automatically " -"disconnect/reconnect." +"Whether or not the Salut account has been created on the first Empathy run." msgstr "" -"Дали да Ñе използва NetworkManager за автоматично прекъÑване и " -"възÑтановÑване на връзката." +"Дали при първото Ñтартиране на Empathy е Ñъздадена региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð·Ð° Salut." -#: ../data/empathy.schemas.in.h:45 +#: ../data/empathy.schemas.in.h:62 msgid "" "Whether or not to check words typed against the languages you want to check " "with." @@ -233,51 +316,63 @@ msgstr "" "Дали да Ñе прави проверка на правопиÑа на Ð²ÑŠÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑÑ‚ ÑпрÑмо избраните " "езици." -#: ../data/empathy.schemas.in.h:46 +#: ../data/empathy.schemas.in.h:63 msgid "" "Whether or not to convert smileys into graphical images in conversations." msgstr "Дали емотиконите да Ñе преобразуват от ASCII в картинки." -#: ../data/empathy.schemas.in.h:47 +#: ../data/empathy.schemas.in.h:64 msgid "" "Whether or not to play a sound to notify for contacts logging in the network." msgstr "Дали влизането на контакти в мрежата да Ñе извеÑÑ‚Ñва ÑÑŠÑ Ð·Ð²ÑƒÐº." -#: ../data/empathy.schemas.in.h:48 +#: ../data/empathy.schemas.in.h:65 msgid "" "Whether or not to play a sound to notify for contacts logging off the " "network." msgstr "Дали излизането на контакти от мрежата да Ñе извеÑÑ‚Ñва ÑÑŠÑ Ð·Ð²ÑƒÐº." -#: ../data/empathy.schemas.in.h:49 +#: ../data/empathy.schemas.in.h:66 msgid "Whether or not to play a sound to notify for events." msgstr "Дали ÑъбитиÑта да Ñе извеÑÑ‚Ñват ÑÑŠÑ Ð·Ð²ÑƒÐº." -#: ../data/empathy.schemas.in.h:50 +#: ../data/empathy.schemas.in.h:67 msgid "Whether or not to play a sound to notify for incoming messages." msgstr "Дали приÑтигането на ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð´Ð° Ñе извеÑÑ‚Ñва ÑÑŠÑ Ð·Ð²ÑƒÐº." -#: ../data/empathy.schemas.in.h:51 +#: ../data/empathy.schemas.in.h:68 msgid "Whether or not to play a sound to notify for new conversations." msgstr "Дали новите разговори да Ñе извеÑÑ‚Ñват ÑÑŠÑ Ð·Ð²ÑƒÐº." -#: ../data/empathy.schemas.in.h:52 +#: ../data/empathy.schemas.in.h:69 msgid "Whether or not to play a sound to notify for outgoing messages." msgstr "Дали изпращането на ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð´Ð° Ñе извеÑÑ‚Ñва ÑÑŠÑ Ð·Ð²ÑƒÐº." -#: ../data/empathy.schemas.in.h:53 +#: ../data/empathy.schemas.in.h:70 msgid "Whether or not to play a sound when logging in a network." msgstr "Дали влизането ви в мрежата да Ñе извеÑÑ‚Ñва ÑÑŠÑ Ð·Ð²ÑƒÐº." -#: ../data/empathy.schemas.in.h:54 +#: ../data/empathy.schemas.in.h:71 msgid "Whether or not to play a sound when logging off a network." -msgstr "Дали излизането ви от мрежата на ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð´Ð° Ñе извеÑÑ‚Ñва ÑÑŠÑ Ð·Ð²ÑƒÐº." +msgstr "Дали излизането ви от мрежата да Ñе извеÑÑ‚Ñва ÑÑŠÑ Ð·Ð²ÑƒÐº." -#: ../data/empathy.schemas.in.h:55 +#: ../data/empathy.schemas.in.h:72 msgid "Whether or not to play sound notifications when away or busy." msgstr "Дали в ÑÑŠÑтоÑние „Зает“ или „ОтÑÑŠÑтващ“ да Ñе извеÑÑ‚Ñва ÑÑŠÑ Ð·Ð²ÑƒÐº." -#: ../data/empathy.schemas.in.h:56 +#: ../data/empathy.schemas.in.h:73 +msgid "" +"Whether or not to show a popup notification when a contact goes offline." +msgstr "" +"Дали излизането на контакт извън мрежата да Ñе извеÑÑ‚Ñва Ñ Ð¸Ð·Ñкачащи " +"прозорци." + +#: ../data/empathy.schemas.in.h:74 +msgid "Whether or not to show a popup notification when a contact goes online." +msgstr "" +"Дали влизането на контакт в мрежата да Ñе извеÑÑ‚Ñва Ñ Ð¸Ð·Ñкачащи прозорци." + +#: ../data/empathy.schemas.in.h:75 msgid "" "Whether or not to show a popup notification when receiving a new message " "even if the chat is already opened, but not focused." @@ -285,13 +380,13 @@ msgstr "" "Дали получаването на ново Ñъобщение, когато отворениÑÑ‚ прозорец за разговори " "не е на фокуÑ, да Ñе извеÑÑ‚Ñва Ñ Ð¸Ð·Ñкачащи прозорци." -#: ../data/empathy.schemas.in.h:57 +#: ../data/empathy.schemas.in.h:76 msgid "" "Whether or not to show a popup notification when receiving a new message." msgstr "" "Дали получаването на ново Ñъобщение да Ñе извеÑÑ‚Ñва Ñ Ð¸Ð·Ñкачащи прозорци." -#: ../data/empathy.schemas.in.h:58 +#: ../data/empathy.schemas.in.h:77 msgid "" "Whether or not to show avatars for contacts in the contact list and chat " "windows." @@ -299,17 +394,21 @@ msgstr "" "Дали да Ñе показват аватари в ÑпиÑъците за контакти и прозорците за " "разговори." -#: ../data/empathy.schemas.in.h:59 +#: ../data/empathy.schemas.in.h:78 msgid "Whether or not to show contacts that are offline in the contact list." msgstr "" -"Дали контактите, които в момента не Ñа включени да Ñе показват в ÑпиÑъка." +"Дали контактите, които в момента не Ñа включени да Ñе показват в ÑпиÑъка." -#: ../data/empathy.schemas.in.h:60 +#: ../data/empathy.schemas.in.h:79 msgid "Whether or not to show popup notifications when away or busy." msgstr "" "Дали в ÑÑŠÑтоÑние „Зает“ или „ОтÑÑŠÑтващ“ да Ñе извеÑÑ‚Ñва Ñ Ð¸Ð·Ñкачащи прозорци." -#: ../data/empathy.schemas.in.h:61 +#: ../data/empathy.schemas.in.h:80 +msgid "Whether or not to show the contact list in chat rooms." +msgstr "Дали ÑпиÑъкът Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¸ да Ñе показва в Ñтаите за разговори." + +#: ../data/empathy.schemas.in.h:81 msgid "" "Whether or not to show the message dialog about closing the main window with " "the 'x' button in the title bar." @@ -317,15 +416,15 @@ msgstr "" "Дали да Ñе показва Ñъобщение за затварÑнето на оÑÐ½Ð¾Ð²Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ† при " "натиÑкане на бутона „ד в заглавната лента." -#: ../data/empathy.schemas.in.h:62 +#: ../data/empathy.schemas.in.h:82 msgid "Whether to show the contact list in compact mode or not." msgstr "Дали да Ñе ползва Ñтегнат изглед за ÑпиÑъка Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¸Ñ‚Ðµ." -#: ../data/empathy.schemas.in.h:63 +#: ../data/empathy.schemas.in.h:83 msgid "Whether to use the theme for chat rooms or not." msgstr "Дали да Ñе ползва графична тема за Ñтаите за разговори." -#: ../data/empathy.schemas.in.h:64 +#: ../data/empathy.schemas.in.h:84 msgid "" "Which criterium to use when sorting the contact list. Default is to use sort " "by the contact's name with the value \"name\". A value of \"state\" will " @@ -335,547 +434,775 @@ msgstr "" "Стандартната ÑтойноÑÑ‚ е „name“ — подредба по име. СтойноÑÑ‚ „state“ означава " "подреждане по ÑÑŠÑтоÑние." -#: ../libempathy/empathy-tp-contact-list.c:731 ../src/empathy.c:271 +#: ../libempathy/empathy-ft-handler.c:838 +msgid "The hash of the received file and the sent one do not match" +msgstr "Извадките от Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸ Ð¸Ð·Ð¿Ñ€Ð°Ñ‚ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð» не Ñъвпадат" + +#: ../libempathy/empathy-ft-handler.c:1098 +msgid "File transfer not supported by remote contact" +msgstr "ОтдалечениÑÑ‚ контакт не поддържа прехвърлÑне на файлове" + +#: ../libempathy/empathy-ft-handler.c:1156 +msgid "The selected file is not a regular file" +msgstr "ИзбраниÑÑ‚ файл не е обикновен файл" + +#: ../libempathy/empathy-ft-handler.c:1165 +msgid "The selected file is empty" +msgstr "ИзбраниÑÑ‚ файл е празен" + +#: ../libempathy/empathy-tp-contact-list.c:843 ../src/empathy.c:290 msgid "People nearby" msgstr "Хора наблизо" -#: ../libempathy/empathy-utils.c:252 +#: ../libempathy/empathy-tp-file.c:279 +msgid "Socket type not supported" +msgstr "Този вид гнездо не Ñе поддържа" + +#: ../libempathy/empathy-tp-file.c:398 +msgid "No reason was specified" +msgstr "Ðе е указана причина" + +#: ../libempathy/empathy-tp-file.c:401 +msgid "The change in state was requested" +msgstr "ЗаÑвена бе промÑна в ÑÑŠÑтоÑнието" + +#: ../libempathy/empathy-tp-file.c:404 +msgid "You canceled the file transfer" +msgstr "ПреуÑтановихте прехвърлÑнето на файл" + +#: ../libempathy/empathy-tp-file.c:407 +msgid "The other participant canceled the file transfer" +msgstr "ОтÑрещната Ñтрана преуÑтанови прехвърлÑнето на файл" + +#: ../libempathy/empathy-tp-file.c:410 +msgid "Error while trying to transfer the file" +msgstr "Грешка по време на прехвърлÑнето на файл" + +#: ../libempathy/empathy-tp-file.c:413 +msgid "The other participant is unable to transfer the file" +msgstr "ОтÑрещната Ñтрана не може да Ð¿Ñ€ÐµÑ…Ð²ÑŠÑ€Ð»Ñ Ñ„Ð°Ð¹Ð»" + +#: ../libempathy/empathy-tp-file.c:416 +msgid "Unknown reason" +msgstr "ÐеизвеÑтна причина" + +#: ../libempathy/empathy-utils.c:265 msgid "Available" msgstr "Ðа линиÑ" -#: ../libempathy/empathy-utils.c:254 +#: ../libempathy/empathy-utils.c:267 msgid "Busy" msgstr "Зает" -#: ../libempathy/empathy-utils.c:257 +#: ../libempathy/empathy-utils.c:270 msgid "Away" msgstr "ОтÑÑŠÑтващ" -#: ../libempathy/empathy-utils.c:259 +#: ../libempathy/empathy-utils.c:272 msgid "Hidden" msgstr "Ðевидим" -#: ../libempathy/empathy-utils.c:262 +#: ../libempathy/empathy-utils.c:274 msgid "Offline" msgstr "Изключен" -#: ../libempathy-gtk/empathy-account-chooser.c:326 +#: ../libempathy/empathy-time.c:137 +#, c-format +msgid "%d second ago" +msgid_plural "%d seconds ago" +msgstr[0] "преди %d Ñекунда" +msgstr[1] "преди %d Ñекунди" + +#: ../libempathy/empathy-time.c:142 +#, c-format +msgid "%d minute ago" +msgid_plural "%d minutes ago" +msgstr[0] "преди %d минута" +msgstr[1] "преди %d минути" + +#: ../libempathy/empathy-time.c:147 +#, c-format +msgid "%d hour ago" +msgid_plural "%d hours ago" +msgstr[0] "преди %d чаÑ" +msgstr[1] "преди %d чаÑа" + +#: ../libempathy/empathy-time.c:152 +#, c-format +msgid "%d day ago" +msgid_plural "%d days ago" +msgstr[0] "преди %d ден" +msgstr[1] "преди %d дни" + +#: ../libempathy/empathy-time.c:157 +#, c-format +msgid "%d week ago" +msgid_plural "%d weeks ago" +msgstr[0] "преди %d Ñедмица" +msgstr[1] "преди %d Ñедмици" + +#: ../libempathy/empathy-time.c:162 +#, c-format +msgid "%d month ago" +msgid_plural "%d months ago" +msgstr[0] "преди %d меÑец" +msgstr[1] "преди %d меÑеца" + +#: ../libempathy/empathy-time.c:167 +msgid "in the future" +msgstr "в бъдеще" + +#: ../libempathy-gtk/empathy-account-chooser.c:426 msgid "All" msgstr "Ð’Ñички" #: ../libempathy-gtk/empathy-account-widget.c:302 -#: ../libempathy-gtk/empathy-account-widget.c:347 +#: ../libempathy-gtk/empathy-account-widget.c:354 #, c-format msgid "%s:" msgstr "%s:" -#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1 -msgid "<b>Advanced</b>" -msgstr "<b>Допълнителни</b>" - -#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:2 -#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:2 -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2 -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3 -#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2 -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:4 -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2 -msgid "Forget password and clear the entry." -msgstr "ИзчиÑтване на полето и забравÑне на паролата." - -#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:3 -#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:4 -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4 -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5 -#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4 -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:5 -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-generic.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:1 +msgid "Advanced" +msgstr "Допълнителни" + +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:2 msgid "Pass_word:" msgstr "П_арола:" -#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:4 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:3 msgid "Screen _Name:" msgstr "_ПÑевдоним:" -#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:5 -#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:5 -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6 -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11 -#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5 -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:10 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:7 msgid "_Port:" msgstr "_Порт:" -#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:6 -#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:6 -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7 -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12 -#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6 -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10 -#: ../src/empathy-new-chatroom-dialog.glade.h:10 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:6 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:11 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9 +#: ../src/empathy-new-chatroom-dialog.ui.h:9 msgid "_Server:" msgstr "_Сървър:" -#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:3 -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4 -#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:2 msgid "Login I_D:" msgstr "_Идентификатор:" -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:2 msgid "ICQ _UIN:" msgstr "И_дентификатор за ICQ:" -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5 -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:5 msgid "_Charset:" msgstr "_Кодиране:" -#: ../libempathy-gtk/empathy-account-widget-irc.c:245 +#: ../libempathy-gtk/empathy-account-widget-irc.c:240 msgid "New Network" msgstr "Ðова мрежа" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1 -msgid "<b>Network</b>" -msgstr "<b>Мрежа</b>" - -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2 -msgid "<b>Servers</b>" -msgstr "<b>Сървъри</b>" - -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:1 msgid "Charset:" msgstr "Кодиране:" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4 -msgid "Create a new IRC network" -msgstr "Създаване на нова мрежа в IRC" - -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5 -msgid "Edit the selected IRC network" -msgstr "Редактиране на избраната мрежа в IRC" - -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:2 msgid "Network" msgstr "Мрежа" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:3 msgid "Network:" msgstr "Мрежа:" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:4 msgid "Nickname:" msgstr "ПÑевдоним:" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:5 msgid "Password:" msgstr "Парола:" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:6 msgid "Quit message:" msgstr "Съобщение при напуÑкане:" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:7 msgid "Real name:" msgstr "ИÑтинÑко име:" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12 -msgid "Remove the selected IRC network" -msgstr "Премахване на избраната мрежа в IRC" +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:8 +msgid "Servers" +msgstr "Сървъри" -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2 -msgid "<b>Override server settings</b>" -msgstr "<b>Използване на ÑобÑтвените наÑтройки</b>" +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:3 +msgid "Override server settings" +msgstr "Използване на ÑобÑтвените наÑтройки" -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:5 msgid "Pri_ority:" msgstr "_Приоритет:" -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:6 msgid "Reso_urce:" msgstr "_РеÑурÑ:" -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7 msgid "Use old SS_L" msgstr "Използване на _Ñтар SSL" -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:8 msgid "_Encryption required (TLS/SSL)" msgstr "_Шифрирането е задължително (TLS/SSL)" -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:9 msgid "_Ignore SSL certificate errors" msgstr "_Пренебрегване на грешките в Ñертификата" -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2 +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:2 msgid "_Email:" msgstr "_Е-поща:" -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3 +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:3 msgid "_First Name:" msgstr "_Лично име:" -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4 +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:4 msgid "_Jabber ID:" msgstr "Ид_ентификатор за Jabber:" -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5 +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:5 msgid "_Last Name:" msgstr "_Фамилно име:" -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6 -#: ../src/empathy-chatrooms-window.glade.h:8 +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:6 msgid "_Nickname:" msgstr "_ПÑевдоним:" -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7 +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:7 msgid "_Published Name:" msgstr "Име за п_убликуване:" #. look up the DNS SRV record at the service's domain for the host name of a STUN server. -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:3 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:3 msgid "Discover STUN" msgstr "Откриване на STUN" -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:6 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:5 msgid "STUN Server:" msgstr "Сървър за STUN:" -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:7 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:6 msgid "STUN port:" msgstr "Порт за STUN:" -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:8 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:7 msgid "_Username:" msgstr "ПотребителÑко _име:" -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:3 msgid "Use _Yahoo Japan" msgstr "Ползване на Yahoo _от ЯпониÑ" -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:4 msgid "Yahoo I_D:" msgstr "И_дентификатор на Yahoo:" -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:6 msgid "_Ignore conference and chatroom invitations" msgstr "_Да не Ñе обръща внимание на поканите за конферентни разговори" -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:8 msgid "_Room List locale:" msgstr "_Локал на ÑпиÑъка ÑÑŠÑ Ñтаи:" -#: ../libempathy-gtk/empathy-avatar-chooser.c:462 -#: ../libempathy-gtk/empathy-avatar-chooser.c:537 +#: ../libempathy-gtk/empathy-avatar-chooser.c:449 +#: ../libempathy-gtk/empathy-avatar-chooser.c:525 msgid "Couldn't convert image" msgstr "Изображението не може да бъде преобразувано" -#: ../libempathy-gtk/empathy-avatar-chooser.c:463 +#: ../libempathy-gtk/empathy-avatar-chooser.c:450 msgid "None of the accepted image formats is supported on your system" msgstr "СиÑтемата ви не поддържа никой от приетите формати за изображениÑ" -#: ../libempathy-gtk/empathy-avatar-chooser.c:956 +#: ../libempathy-gtk/empathy-avatar-chooser.c:933 msgid "Select Your Avatar Image" msgstr "Избор на изображение за аватар" -#: ../libempathy-gtk/empathy-avatar-chooser.c:959 +#: ../libempathy-gtk/empathy-avatar-chooser.c:936 msgid "No Image" msgstr "Без изображение" -#: ../libempathy-gtk/empathy-avatar-chooser.c:1021 +#: ../libempathy-gtk/empathy-avatar-chooser.c:998 msgid "Images" msgstr "ИзображениÑ" -#: ../libempathy-gtk/empathy-avatar-chooser.c:1025 +#: ../libempathy-gtk/empathy-avatar-chooser.c:1002 msgid "All Files" msgstr "Ð’Ñички файлове" -#: ../libempathy-gtk/empathy-avatar-image.c:294 +#: ../libempathy-gtk/empathy-avatar-image.c:324 msgid "Click to enlarge" msgstr "ÐатиÑнете за увеличаване" -#: ../libempathy-gtk/empathy-chat.c:498 +#: ../libempathy-gtk/empathy-chat.c:186 +msgid "Failed to reconnect this chat" +msgstr "ÐеуÑпешно Ñвързване към този разговор" + +#: ../libempathy-gtk/empathy-chat.c:412 +msgid "Unsupported command" +msgstr "Ðеподдържана команда" + +#: ../libempathy-gtk/empathy-chat.c:548 msgid "offline" msgstr "изключен" -#: ../libempathy-gtk/empathy-chat.c:501 +#: ../libempathy-gtk/empathy-chat.c:551 msgid "invalid contact" msgstr "грешен контакт" -#: ../libempathy-gtk/empathy-chat.c:504 +#: ../libempathy-gtk/empathy-chat.c:554 msgid "permission denied" msgstr "липÑват права" -#: ../libempathy-gtk/empathy-chat.c:507 +#: ../libempathy-gtk/empathy-chat.c:557 msgid "too long message" msgstr "прекалено дълго Ñъобщение" -#: ../libempathy-gtk/empathy-chat.c:510 +#: ../libempathy-gtk/empathy-chat.c:560 msgid "not implemented" msgstr "не е реализирано" -#: ../libempathy-gtk/empathy-chat.c:513 +#: ../libempathy-gtk/empathy-chat.c:563 msgid "unknown" msgstr "неизвеÑтна грешка" -#: ../libempathy-gtk/empathy-chat.c:517 +#: ../libempathy-gtk/empathy-chat.c:567 #, c-format msgid "Error sending message '%s': %s" msgstr "Грешка при изпращането на Ñъобщението „%s“: %s" -#: ../libempathy-gtk/empathy-chat.c:547 +#: ../libempathy-gtk/empathy-chat.c:597 #, c-format msgid "Topic set to: %s" msgstr "Темата вече е: „%s“" -#: ../libempathy-gtk/empathy-chat.c:549 +#: ../libempathy-gtk/empathy-chat.c:599 msgid "No topic defined" msgstr "Ðе е зададена тема" -#: ../libempathy-gtk/empathy-chat.c:964 +#: ../libempathy-gtk/empathy-chat.c:969 +msgid "(No Suggestions)" +msgstr "(нÑма предложениÑ)" + +#: ../libempathy-gtk/empathy-chat.c:1023 msgid "Insert Smiley" msgstr "Вмъкване на емотикон" #. send button -#: ../libempathy-gtk/empathy-chat.c:982 -#: ../libempathy-gtk/empathy-ui-utils.c:1559 +#: ../libempathy-gtk/empathy-chat.c:1041 +#: ../libempathy-gtk/empathy-ui-utils.c:1483 msgid "_Send" msgstr "_Изпращане" -#: ../libempathy-gtk/empathy-chat.c:1016 -msgid "_Check Word Spelling..." -msgstr "_Проверка на правопиÑ…" +#: ../libempathy-gtk/empathy-chat.c:1075 +msgid "_Spelling Suggestions" +msgstr "_ÐŸÑ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð° правопиÑ" -#: ../libempathy-gtk/empathy-chat.c:1134 +#: ../libempathy-gtk/empathy-chat.c:1190 #, c-format -msgid "%s has joined the room" -msgstr "%s влезе в ÑтаÑта" +msgid "%s has disconnected" +msgstr "%s не е в мрежата" + +#. translators: reverse the order of these arguments +#. * if the kicked should come before the kicker in your locale. +#. +#: ../libempathy-gtk/empathy-chat.c:1197 +#, c-format +msgid "%1$s was kicked by %2$s" +msgstr "%1$s е изритан от %2$s" + +#: ../libempathy-gtk/empathy-chat.c:1200 +#, c-format +msgid "%s was kicked" +msgstr "%s бе изритан" + +#. translators: reverse the order of these arguments +#. * if the banned should come before the banner in your locale. +#. +#: ../libempathy-gtk/empathy-chat.c:1208 +#, c-format +msgid "%1$s was banned by %2$s" +msgstr "%1$s бе поÑтавен под запрет от %2$s" + +#: ../libempathy-gtk/empathy-chat.c:1211 +#, c-format +msgid "%s was banned" +msgstr "%s бе поÑтавен под запрет" -#: ../libempathy-gtk/empathy-chat.c:1137 +#: ../libempathy-gtk/empathy-chat.c:1215 #, c-format msgid "%s has left the room" msgstr "%s излезе от ÑтаÑта" -#: ../libempathy-gtk/empathy-chat.c:1251 ../src/empathy-call-window.c:764 +#. Note to translators: this string is appended to +#. * notifications like "foo has left the room", with the message +#. * given by the user living the room. If this poses a problem, +#. * please let us know. :-) +#. +#: ../libempathy-gtk/empathy-chat.c:1224 +#, c-format +msgid " (%s)" +msgstr " (%s)" + +#: ../libempathy-gtk/empathy-chat.c:1247 +#, c-format +msgid "%s has joined the room" +msgstr "%s влезе в ÑтаÑта" + +#: ../libempathy-gtk/empathy-chat.c:1380 ../src/empathy-call-window.c:1277 msgid "Disconnected" msgstr "Изключен" -#: ../libempathy-gtk/empathy-chat.c:1647 +#: ../libempathy-gtk/empathy-chat.c:1815 msgid "Connected" msgstr "Свързан" -#: ../libempathy-gtk/empathy-chat.c:1697 -#: ../libempathy-gtk/empathy-log-window.c:505 +#: ../libempathy-gtk/empathy-chat.c:1865 +#: ../libempathy-gtk/empathy-log-window.c:502 msgid "Conversation" msgstr "Разговор" -#: ../libempathy-gtk/empathy-chat.glade.h:1 -msgid "<b>Topic:</b>" -msgstr "<b>Тема:</b>" - -#: ../libempathy-gtk/empathy-chat.glade.h:2 -msgid "Group Chat" -msgstr "Разговор в група" +#: ../libempathy-gtk/empathy-chat.ui.h:1 ../src/empathy-chat-window.c:472 +msgid "Topic:" +msgstr "Тема:" -#: ../libempathy-gtk/empathy-chat-text-view.c:331 +#. Copy Link Address menu item +#: ../libempathy-gtk/empathy-chat-text-view.c:316 +#: ../libempathy-gtk/empathy-theme-adium.c:267 msgid "_Copy Link Address" msgstr "_Копиране на адреÑа" -#: ../libempathy-gtk/empathy-chat-text-view.c:339 +#. Open Link menu item +#: ../libempathy-gtk/empathy-chat-text-view.c:323 +#: ../libempathy-gtk/empathy-theme-adium.c:275 msgid "_Open Link" msgstr "_ОтварÑне на адреÑа" #. Translators: timestamp displayed between conversations in #. * chat windows (strftime format string) -#: ../libempathy-gtk/empathy-chat-text-view.c:432 +#: ../libempathy-gtk/empathy-chat-text-view.c:421 msgid "%A %B %d %Y" msgstr "%d.%m.%Y, %A" -#: ../libempathy-gtk/empathy-contact-dialogs.c:180 -msgid "Personal Information" -msgstr "Лични данни" - -#: ../libempathy-gtk/empathy-contact-dialogs.c:183 +#: ../libempathy-gtk/empathy-contact-dialogs.c:179 +#: ../libempathy-gtk/empathy-contact-dialogs.c:238 msgid "Edit Contact Information" msgstr "Редактиране на данните за контакта" -#: ../libempathy-gtk/empathy-contact-dialogs.c:186 -msgid "Contact Information" -msgstr "Данни за контакта" - -#: ../libempathy-gtk/empathy-contact-dialogs.c:267 -msgid "I would like to add you to my contact list." -msgstr "" -"bg: ИÑкам да ви Ð´Ð¾Ð±Ð°Ð²Ñ ÐºÑŠÐ¼ ÑпиÑъка Ñи Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¸.\n" -"en: I would like to add you to my contact list." +#: ../libempathy-gtk/empathy-contact-dialogs.c:289 +msgid "Personal Information" +msgstr "Лични данни" -#: ../libempathy-gtk/empathy-contact-dialogs.c:291 +#: ../libempathy-gtk/empathy-contact-dialogs.c:394 msgid "New Contact" msgstr "Ðов контакт" -#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1 +#: ../libempathy-gtk/empathy-contact-dialogs.ui.h:1 msgid "Decide _Later" msgstr "Отлагане на _решението" -#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2 +#: ../libempathy-gtk/empathy-contact-dialogs.ui.h:2 msgid "Subscription Request" msgstr "ИÑкане за запиÑване" -#: ../libempathy-gtk/empathy-contact-list-view.c:1255 +#: ../libempathy-gtk/empathy-contact-list-view.c:1412 #, c-format msgid "Do you really want to remove the group '%s'?" msgstr "Сигурни ли Ñте, че иÑкате да изтриете групата „%s“?" -#: ../libempathy-gtk/empathy-contact-list-view.c:1257 +#: ../libempathy-gtk/empathy-contact-list-view.c:1414 msgid "Removing group" msgstr "Изтриване на група" -#: ../libempathy-gtk/empathy-contact-list-view.c:1304 -#: ../libempathy-gtk/empathy-contact-list-view.c:1383 +#. Remove +#: ../libempathy-gtk/empathy-contact-list-view.c:1461 +#: ../libempathy-gtk/empathy-contact-list-view.c:1538 msgid "_Remove" msgstr "_Изтриване" -#: ../libempathy-gtk/empathy-contact-list-view.c:1334 +#: ../libempathy-gtk/empathy-contact-list-view.c:1491 #, c-format msgid "Do you really want to remove the contact '%s'?" msgstr "Сигурни ли Ñте, че иÑкате да изтриете контакта „%s“?" -#: ../libempathy-gtk/empathy-contact-list-view.c:1336 +#: ../libempathy-gtk/empathy-contact-list-view.c:1493 msgid "Removing contact" msgstr "Изтриване на контакт" -#: ../libempathy-gtk/empathy-contact-list-view.c:1341 -msgid "Sorry, I don't want you in my contact list anymore." -msgstr "" -"bg: СъжалÑвам, вече не Ð¶ÐµÐ»Ð°Ñ Ð´Ð° Ñте в ÑпиÑъка ми Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¸.\n" -"en: Sorry, I don't want you in my contact list anymore." +#: ../libempathy-gtk/empathy-contact-menu.c:195 +#: ../src/empathy-main-window.ui.h:11 +msgid "_Add Contact..." +msgstr "_ДобавÑне на контакт…" -#: ../libempathy-gtk/empathy-contact-menu.c:130 -#: ../src/empathy-main-window.glade.h:9 +#: ../libempathy-gtk/empathy-contact-menu.c:222 +#: ../src/empathy-main-window.ui.h:12 msgid "_Chat" msgstr "_Разговор" -#: ../libempathy-gtk/empathy-contact-menu.c:161 -#: ../src/empathy-call-window.glade.h:5 -msgid "_Call" -msgstr "_Разговор" +#: ../libempathy-gtk/empathy-contact-menu.c:253 +msgctxt "menu item" +msgid "_Audio Call" +msgstr "_Ðудио разговор" -#: ../libempathy-gtk/empathy-contact-menu.c:200 -#: ../src/empathy-main-window.glade.h:17 +#: ../libempathy-gtk/empathy-contact-menu.c:285 +msgctxt "menu item" +msgid "_Video Call" +msgstr "_Видео разговор" + +#: ../libempathy-gtk/empathy-contact-menu.c:324 msgid "_View Previous Conversations" msgstr "_Преглед на предишни разговори" -#: ../libempathy-gtk/empathy-contact-menu.c:222 +#: ../libempathy-gtk/empathy-contact-menu.c:346 msgid "Send file" msgstr "Изпращане на файл" -#: ../libempathy-gtk/empathy-contact-menu.c:250 +#: ../libempathy-gtk/empathy-contact-menu.c:369 +msgid "Share my desktop" +msgstr "СподелÑне на работното мÑÑто" + +#: ../libempathy-gtk/empathy-contact-menu.c:397 msgid "Infor_mation" msgstr "_Данни за контакта" -#: ../libempathy-gtk/empathy-contact-menu.c:277 -#: ../src/empathy-chat-window.glade.h:14 ../src/empathy-main-window.glade.h:11 +#: ../libempathy-gtk/empathy-contact-menu.c:441 +#: ../src/empathy-chat-window.ui.h:10 ../src/empathy-main-window.ui.h:16 msgid "_Edit" msgstr "_Редактиране" -#: ../libempathy-gtk/empathy-contact-menu.c:336 +#: ../libempathy-gtk/empathy-contact-menu.c:501 msgid "Inviting to this room" msgstr "Покана за тази ÑтаÑ" -#: ../libempathy-gtk/empathy-contact-menu.c:369 +#: ../libempathy-gtk/empathy-contact-menu.c:532 msgid "_Invite to chatroom" msgstr "_Покана за ÑтаÑта" -#: ../libempathy-gtk/empathy-contact-selector.c:111 +#: ../libempathy-gtk/empathy-contact-selector.c:129 msgid "Select a contact" msgstr "Избор на контакт" -#: ../libempathy-gtk/empathy-contact-widget.c:358 +#: ../libempathy-gtk/empathy-contact-widget.c:447 msgid "Save Avatar" msgstr "Запазване на аватар" -#: ../libempathy-gtk/empathy-contact-widget.c:414 +#: ../libempathy-gtk/empathy-contact-widget.c:503 msgid "Unable to save avatar" msgstr "ÐеуÑпех при запазването на аватар" -#: ../libempathy-gtk/empathy-contact-widget.c:895 +#: ../libempathy-gtk/empathy-contact-widget.c:1000 msgid "Select" msgstr "Избор" -#: ../libempathy-gtk/empathy-contact-widget.c:904 -#: ../src/empathy-main-window.c:991 +#: ../libempathy-gtk/empathy-contact-widget.c:1009 +#: ../src/empathy-main-window.c:1023 msgid "Group" msgstr "Група" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:1 -msgid "<b>Client Information</b>" -msgstr "<b>Данни за клиента</b>" +#: ../libempathy-gtk/empathy-contact-widget.c:1260 +msgid "Country ISO Code:" +msgstr "Код на държавата по ISO:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1262 +msgid "Country:" +msgstr "Държава:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1264 +msgid "State:" +msgstr "Щат:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:2 -msgid "<b>Contact Details</b>" -msgstr "<b>Данни за контакта</b>" +#: ../libempathy-gtk/empathy-contact-widget.c:1266 +msgid "City:" +msgstr "Град:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:3 -msgid "<b>Contact</b>" -msgstr "<b>Контакт</b>" +#: ../libempathy-gtk/empathy-contact-widget.c:1268 +msgid "Area:" +msgstr "ОблаÑÑ‚:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:4 -msgid "<b>Groups</b>" -msgstr "<b>Групи</b>" +#: ../libempathy-gtk/empathy-contact-widget.c:1270 +msgid "Postal Code:" +msgstr "ПощенÑки код:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:5 -#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1 -#: ../src/empathy-chatrooms-window.glade.h:1 -#: ../src/empathy-new-chatroom-dialog.glade.h:1 +#: ../libempathy-gtk/empathy-contact-widget.c:1272 +msgid "Street:" +msgstr "Улица:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1274 +msgid "Building:" +msgstr "Сграда:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1276 +msgid "Floor:" +msgstr "Етаж:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1278 +msgid "Room:" +msgstr "СтаÑ:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1280 +msgid "Text:" +msgstr "ТекÑÑ‚:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1282 +msgid "Description:" +msgstr "ОпиÑание:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1284 +msgid "URI:" +msgstr "ÐÐ´Ñ€ÐµÑ Ð² Интернет:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1286 +msgid "Accuracy Level:" +msgstr "Ðиво на точноÑÑ‚:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1288 +msgid "Error:" +msgstr "Грешка:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1290 +msgid "Vertical Error (meters):" +msgstr "Вертикална грешка (метри):" + +#: ../libempathy-gtk/empathy-contact-widget.c:1292 +msgid "Horizontal Error (meters):" +msgstr "Хоризонтална грешка (метри):" + +#: ../libempathy-gtk/empathy-contact-widget.c:1294 +msgid "Speed:" +msgstr "СкороÑÑ‚:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1296 +msgid "Bearing:" +msgstr "ПоÑока:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1298 +msgid "Climb Speed:" +msgstr "СкороÑÑ‚ на изкачване:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1300 +msgid "Last Updated on:" +msgstr "ПоÑледно обновÑване на:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1302 +msgid "Longitude:" +msgstr "Дължина:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1304 +msgid "Latitude:" +msgstr "Широчина:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1306 +msgid "Altitude:" +msgstr "ВиÑочина:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1353 +msgid "<b>Location</b>" +msgstr "<b>МеÑтоположение</b>" + +#: ../libempathy-gtk/empathy-contact-widget.c:1366 +msgid "<b>Location</b>, " +msgstr "<b>МеÑтоположение</b>, " + +#: ../libempathy-gtk/empathy-contact-widget.c:1416 +msgid "%B %e, %Y at %R UTC" +msgstr "%e %B, %Y в %R UTC" + +#: ../libempathy-gtk/empathy-contact-widget.ui.h:1 +msgid "<b>Location</b> at (date)\t" +msgstr "<b>МеÑтоположение</b> на (дата)\t" + +#: ../libempathy-gtk/empathy-contact-widget.ui.h:2 +#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:1 +#: ../src/empathy-chatrooms-window.ui.h:1 +#: ../src/empathy-new-chatroom-dialog.ui.h:1 msgid "Account:" msgstr "РегиÑтрациÑ:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:6 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:3 msgid "Alias:" msgstr "ПÑевдоним:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:7 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:4 msgid "Birthday:" msgstr "Рожден ден:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:8 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:5 +msgid "Client Information" +msgstr "Данни за клиента" + +#: ../libempathy-gtk/empathy-contact-widget.ui.h:6 msgid "Client:" msgstr "Клиент:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:9 -msgid "Contact information" -msgstr "Данни за контакта" +#: ../libempathy-gtk/empathy-contact-widget.ui.h:7 +#: ../src/empathy-main-window.c:1006 +msgid "Contact" +msgstr "Контакт" + +#: ../libempathy-gtk/empathy-contact-widget.ui.h:8 +msgid "Contact Details" +msgstr "Подробни данни за контакта" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:10 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:9 msgid "Email:" msgstr "Е-поща:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:11 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:10 msgid "Fullname:" msgstr "Пълно име:" +#: ../libempathy-gtk/empathy-contact-widget.ui.h:11 +msgid "Groups" +msgstr "Групи" + #. Identifier to connect to Instant Messaging network -#: ../libempathy-gtk/empathy-contact-widget.glade.h:13 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:13 msgid "Identifier:" msgstr "Идентификатор:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:14 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:14 msgid "Information requested..." msgstr "Данните Ñа поиÑкани…" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:15 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:15 msgid "OS:" msgstr "ОС:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:16 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:16 msgid "" "Select the groups you want this contact to appear in. Note that you can " "select more than one group or no groups." @@ -883,179 +1210,196 @@ msgstr "" "Изберете групите, в които контактът да Ñе поÑвÑва. Можете да изберете 0 или " "повече групи." -#: ../libempathy-gtk/empathy-contact-widget.glade.h:17 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:17 msgid "Version:" msgstr "ВерÑиÑ:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:18 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:18 msgid "Web site:" msgstr "Страница в Интернет:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:19 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:19 msgid "_Add Group" msgstr "_ДобавÑне на група" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:284 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:283 msgid "new server" msgstr "нов Ñървър" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:513 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:510 msgid "Server" msgstr "Сървър" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:528 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:525 msgid "Port" msgstr "Порт" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:541 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:538 msgid "SSL" msgstr "SSL" -#: ../libempathy-gtk/empathy-log-window.c:498 -#: ../src/empathy-import-dialog.c:277 +#: ../libempathy-gtk/empathy-log-window.c:495 +#: ../src/empathy-import-dialog.c:285 msgid "Account" msgstr "РегиÑтрациÑ" -#: ../libempathy-gtk/empathy-log-window.c:515 +#: ../libempathy-gtk/empathy-log-window.c:512 msgid "Date" msgstr "Дата" -#. Tab Label -#: ../libempathy-gtk/empathy-log-window.glade.h:2 +#: ../libempathy-gtk/empathy-log-window.ui.h:1 msgid "Conversations" msgstr "Разговори" -#: ../libempathy-gtk/empathy-log-window.glade.h:3 +#: ../libempathy-gtk/empathy-log-window.ui.h:2 msgid "Previous Conversations" msgstr "Предишни разговори" -#. Tab Label -#: ../libempathy-gtk/empathy-log-window.glade.h:5 +#: ../libempathy-gtk/empathy-log-window.ui.h:3 msgid "Search" msgstr "ТърÑене" -#. Searching *for* something -#: ../libempathy-gtk/empathy-log-window.glade.h:7 +#: ../libempathy-gtk/empathy-log-window.ui.h:4 msgid "_For:" msgstr "_За:" -#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2 +#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:2 msgid "C_all" msgstr "_Обаждане" -#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3 +#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:3 msgid "C_hat" msgstr "_Разговор" -#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4 +#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:4 msgid "Contact ID:" msgstr "Идентификатор:" -#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5 +#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:5 msgid "New Conversation" msgstr "Ðов разговор" +#. COL_STATUS_TEXT +#. COL_STATE_ICON_NAME +#. COL_STATE +#. COL_DISPLAY_MARKUP +#. COL_STATUS_CUSTOMISABLE +#. COL_TYPE +#: ../libempathy-gtk/empathy-presence-chooser.c:176 +#: ../libempathy-gtk/empathy-presence-chooser.c:212 +msgid "Custom Message..." +msgstr "Друго Ñъобщение…" + +#: ../libempathy-gtk/empathy-presence-chooser.c:229 +#: ../libempathy-gtk/empathy-presence-chooser.c:231 +msgid "Edit Custom Messages..." +msgstr "Редактиране на другите ÑъобщениÑ…" + +#: ../libempathy-gtk/empathy-presence-chooser.c:330 +msgid "Click to remove this status as a favorite" +msgstr "ÐатиÑнете, за да премахнете това ÑÑŠÑтоÑние като любимо" + +#: ../libempathy-gtk/empathy-presence-chooser.c:339 +msgid "Click to make this status a favorite" +msgstr "ÐатиÑнете, за да направите това ÑÑŠÑтоÑние любимо" + +#: ../libempathy-gtk/empathy-presence-chooser.c:373 +msgid "Set status" +msgstr "Задаване на ÑÑŠÑтоÑние" + +#: ../libempathy-gtk/empathy-presence-chooser.c:794 +msgid "Set your presence and current status" +msgstr "Задайте приÑÑŠÑтвието и текущото Ñи ÑÑŠÑтоÑние" + #. Custom messages -#: ../libempathy-gtk/empathy-presence-chooser.c:685 +#: ../libempathy-gtk/empathy-presence-chooser.c:1043 msgid "Custom messages..." msgstr "Други ÑъобщениÑ…" -#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1 -msgid "Custom message" -msgstr "Други ÑъобщениÑ" - -#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2 -msgid "Message:" -msgstr "Съобщение:" - -#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3 -msgid "Save message" -msgstr "Запазване на Ñъобщение" - -#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4 -msgid "Status:" -msgstr "СъÑтоÑние:" - -#: ../libempathy-gtk/empathy-spell-dialog.c:88 -msgid "Word" -msgstr "Дума" - -#: ../libempathy-gtk/empathy-spell-dialog.c:265 -msgid "Suggestions for the word" -msgstr "ÐŸÑ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð° думата" - -#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1 -msgid "Spell Checker" -msgstr "Проверка на правопиÑа" - -#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2 -msgid "Suggestions for the word:" -msgstr "ÐŸÑ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð° думата:" - -#: ../libempathy-gtk/empathy-theme-manager.c:60 -msgid "Classic" -msgstr "КлаÑичеÑка" - -#: ../libempathy-gtk/empathy-theme-manager.c:61 -msgid "Simple" -msgstr "ПроÑта" - -#: ../libempathy-gtk/empathy-theme-manager.c:62 -msgid "Clean" -msgstr "ИзчиÑтена" - -#: ../libempathy-gtk/empathy-theme-manager.c:63 -msgid "Blue" -msgstr "СинÑ" - -#: ../libempathy-gtk/empathy-ui-utils.c:1406 -msgid "Unable to open URI" -msgstr "ÐдреÑÑŠÑ‚ не може да бъде отворен" - -#: ../libempathy-gtk/empathy-ui-utils.c:1551 -msgid "Select a file" -msgstr "Избор на файл" - -#: ../libempathy-gtk/empathy-ui-utils.c:1587 +#: ../libempathy-gtk/empathy-sound.c:51 msgid "Received an instant message" msgstr "Получено е бързо Ñъобщение" -#: ../libempathy-gtk/empathy-ui-utils.c:1589 +#: ../libempathy-gtk/empathy-sound.c:53 msgid "Sent an instant message" msgstr "Изпратено е бързо Ñъобщение" -#: ../libempathy-gtk/empathy-ui-utils.c:1591 +#: ../libempathy-gtk/empathy-sound.c:55 msgid "Incoming chat request" msgstr "ВходÑща заÑвка за разговор" -#: ../libempathy-gtk/empathy-ui-utils.c:1593 +#: ../libempathy-gtk/empathy-sound.c:57 msgid "Contact connected" msgstr "Контактът е в мрежата" -#: ../libempathy-gtk/empathy-ui-utils.c:1595 +#: ../libempathy-gtk/empathy-sound.c:59 msgid "Contact disconnected" msgstr "Контактът не е в мрежата" -#: ../libempathy-gtk/empathy-ui-utils.c:1597 +#: ../libempathy-gtk/empathy-sound.c:61 msgid "Connected to server" msgstr "Има връзка ÑÑŠÑ Ñървър" -#: ../libempathy-gtk/empathy-ui-utils.c:1599 +#: ../libempathy-gtk/empathy-sound.c:63 msgid "Disconnected from server" msgstr "ÐÑма връзка ÑÑŠÑ Ñървър" -#: ../libempathy-gtk/empathy-ui-utils.c:1601 +#: ../libempathy-gtk/empathy-sound.c:65 msgid "Incoming voice call" msgstr "ВходÑщ аудио разговор" -#: ../libempathy-gtk/empathy-ui-utils.c:1603 +#: ../libempathy-gtk/empathy-sound.c:67 msgid "Outgoing voice call" msgstr "ИзходÑщ аудио разговор" -#: ../libempathy-gtk/empathy-ui-utils.c:1605 +#: ../libempathy-gtk/empathy-sound.c:69 msgid "Voice call ended" msgstr "Ðудио разговорът завърши" +#: ../libempathy-gtk/empathy-status-preset-dialog.c:362 +msgid "Enter Custom Message" +msgstr "Въвеждане на друго Ñъобщение" + +#: ../libempathy-gtk/empathy-status-preset-dialog.c:521 +msgid "Edit Custom Messages" +msgstr "Редактиране на други ÑъобщениÑ" + +#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:1 +msgid "Add _New Preset" +msgstr "_ДобавÑне на нова тема" + +#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:2 +msgid "Saved Presets" +msgstr "Запазени теми" + +#: ../libempathy-gtk/empathy-theme-manager.c:67 +msgid "Classic" +msgstr "КлаÑичеÑка" + +#: ../libempathy-gtk/empathy-theme-manager.c:68 +msgid "Simple" +msgstr "ПроÑта" + +#: ../libempathy-gtk/empathy-theme-manager.c:69 +msgid "Clean" +msgstr "ИзчиÑтена" + +#: ../libempathy-gtk/empathy-theme-manager.c:70 +msgid "Blue" +msgstr "СинÑ" + +#: ../libempathy-gtk/empathy-ui-utils.c:1385 +msgid "Unable to open URI" +msgstr "ÐдреÑÑŠÑ‚ не може да бъде отворен" + +#: ../libempathy-gtk/empathy-ui-utils.c:1475 +msgid "Select a file" +msgstr "Избор на файл" + +#: ../libempathy-gtk/empathy-ui-utils.c:1535 +msgid "Select a destination" +msgstr "Избор на получател" + #: ../libempathy-gtk/totem-subtitle-encoding.c:158 msgid "Current Locale" msgstr "текущ локал" @@ -1244,7 +1588,7 @@ msgid "Megaphone" msgstr "Мегафон" #: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2 -#: ../megaphone/src/megaphone-applet.c:417 +#: ../megaphone/src/megaphone-applet.c:519 msgid "Talk!" msgstr "РазговарÑйте!" @@ -1258,15 +1602,15 @@ msgid "_Information" msgstr "_Данни за контакта" #: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3 -#: ../src/empathy-main-window.glade.h:15 +#: ../src/empathy-main-window.ui.h:23 msgid "_Preferences" msgstr "_ÐаÑтройки" -#: ../megaphone/src/megaphone-applet.c:255 +#: ../megaphone/src/megaphone-applet.c:168 msgid "Please configure a contact." msgstr "ÐаÑтройте контакт." -#: ../megaphone/src/megaphone-applet.c:348 +#: ../megaphone/src/megaphone-applet.c:258 msgid "Select contact..." msgstr "Избор на контакт…" @@ -1279,23 +1623,23 @@ msgstr "ПриÑÑŠÑтвие" msgid "Set your own presence" msgstr "Задайте приÑÑŠÑтвието Ñи" -#: ../src/empathy.c:430 +#: ../src/empathy.c:569 msgid "Don't connect on startup" msgstr "Без автоматично Ñвързване при Ñтартиране" -#: ../src/empathy.c:434 +#: ../src/empathy.c:573 msgid "Don't show the contact list on startup" msgstr "Без показване на ÑпиÑъка Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¸ при Ñтартиране" -#: ../src/empathy.c:438 +#: ../src/empathy.c:577 msgid "Show the accounts dialog" msgstr "Показване на диалоговата ÐºÑƒÑ‚Ð¸Ñ Ð·Ð° региÑтрации" -#: ../src/empathy.c:450 -msgid "- Empathy Instant Messenger" +#: ../src/empathy.c:589 +msgid "- Empathy IM Client" msgstr "— бързи ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñ Empathy" -#: ../src/empathy-about-dialog.c:84 +#: ../src/empathy-about-dialog.c:83 msgid "" "Empathy 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 " @@ -1307,7 +1651,7 @@ msgstr "" "е публикуван от ФондациÑта за Ñвободен Ñофтуер — верÑÐ¸Ñ 2 на лиценза или (по " "ваше решение) по-къÑна верÑиÑ." -#: ../src/empathy-about-dialog.c:88 +#: ../src/empathy-about-dialog.c:87 msgid "" "Empathy is distributed in the hope that it will be useful, but WITHOUT ANY " "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " @@ -1318,7 +1662,7 @@ msgstr "" "ÐИКÐКВИ ГÐÐ ÐÐЦИИ, дори и коÑвените за ПРОДÐЖБРили СЪОТВЕТСТВИЕ С КÐКВÐТО И " "ДРЕ УПОТРЕБÐ. За подробноÑти погледнете ÐžÐ±Ñ‰Ð¸Ñ Ð¿ÑƒÐ±Ð»Ð¸Ñ‡ÐµÐ½ лиценз на GNU." -#: ../src/empathy-about-dialog.c:92 +#: ../src/empathy-about-dialog.c:91 msgid "" "You should have received a copy of the GNU General Public License along with " "Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin " @@ -1328,11 +1672,11 @@ msgstr "" "заедно Ñ Ñ‚Ð°Ð·Ð¸ програма. Ðко не Ñте, пишете до Free Software Foundation, " "Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA." -#: ../src/empathy-about-dialog.c:120 +#: ../src/empathy-about-dialog.c:119 msgid "An Instant Messaging client for GNOME" msgstr "Програма за бързи ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð·Ð° GNOME" -#: ../src/empathy-about-dialog.c:126 +#: ../src/empathy-about-dialog.c:125 msgid "translator-credits" msgstr "" "ЯÑен Праматаров <yasen@lindeas.com>\n" @@ -1342,22 +1686,21 @@ msgstr "" "Ðаучете повече за Ð½Ð°Ñ Ð½Ð° http://gnome.cult.bg\n" "Докладвайте за грешки на http://gnome.cult.bg/bugs" -#: ../src/empathy-accounts-dialog.c:391 +#: ../src/empathy-accounts-dialog.c:392 msgid "Enabled" msgstr "Включена" -#: ../src/empathy-accounts-dialog.c:401 -#: ../src/empathy-accounts-dialog.glade.h:4 +#: ../src/empathy-accounts-dialog.c:402 ../src/empathy-accounts-dialog.ui.h:1 msgid "Accounts" msgstr "РегиÑтрации" #. To translator: %s is the protocol name -#: ../src/empathy-accounts-dialog.c:833 +#: ../src/empathy-accounts-dialog.c:837 #, c-format msgid "New %s account" -msgstr "Ðова региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð½Ð° %s" +msgstr "Ðова региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð² %s" -#: ../src/empathy-accounts-dialog.c:943 +#: ../src/empathy-accounts-dialog.c:950 #, c-format msgid "" "You are about to remove your %s account!\n" @@ -1366,7 +1709,7 @@ msgstr "" "Ще изтриете региÑтрациÑта „%s“!\n" "ИÑкате ли да продължите?" -#: ../src/empathy-accounts-dialog.c:949 +#: ../src/empathy-accounts-dialog.c:956 msgid "" "Any associated conversations and chat rooms will NOT be removed if you " "decide to proceed.\n" @@ -1377,33 +1720,33 @@ msgstr "" "ÐИКОИ принадлежащи на тази региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ñ€Ð°Ð·Ð³Ð¾Ð²Ð¾Ñ€Ð¸ или Ñтаи ÐЯМРда бъдат " "премахнати.\n" "\n" -"Те ще бъдат доÑтъпни, ако решите да добавите отново тази региÑтрациÑ." - -#: ../src/empathy-accounts-dialog.glade.h:1 -msgid "<b>New Account</b>" -msgstr "<b>Ðова региÑтрациÑ</b>" +"Те ще бъдат доÑтъпни, ако решите да отново да Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚Ðµ." -#: ../src/empathy-accounts-dialog.glade.h:2 -msgid "<b>No protocol installed</b>" -msgstr "<b>ÐÑма инÑталиран протокол</b>" +#: ../src/empathy-accounts-dialog.ui.h:2 +msgid "Add Account" +msgstr "ДобавÑне на региÑтрациÑ" -#: ../src/empathy-accounts-dialog.glade.h:3 -msgid "<b>Settings</b>" -msgstr "<b>ÐаÑтройки</b>" - -#: ../src/empathy-accounts-dialog.glade.h:5 +#: ../src/empathy-accounts-dialog.ui.h:3 msgid "Cr_eate" msgstr "_Създаване" -#: ../src/empathy-accounts-dialog.glade.h:6 -msgid "I already have an account I want to use" -msgstr "Вече имам региÑтрациÑ, коÑто иÑкам да ползвам" +#: ../src/empathy-accounts-dialog.ui.h:4 +msgid "Gmail" +msgstr "Е-поща в Gmail" -#: ../src/empathy-accounts-dialog.glade.h:7 +#: ../src/empathy-accounts-dialog.ui.h:5 msgid "Import Accounts..." msgstr "ВнаÑÑне на региÑтрации…" -#: ../src/empathy-accounts-dialog.glade.h:8 +#: ../src/empathy-accounts-dialog.ui.h:6 +msgid "No protocol installed" +msgstr "Ðе е инÑталиран протокол" + +#: ../src/empathy-accounts-dialog.ui.h:7 +msgid "Settings" +msgstr "ÐаÑтройки" + +#: ../src/empathy-accounts-dialog.ui.h:8 msgid "" "To add a new account, you first have to install a backend for each protocol " "you want to use." @@ -1411,272 +1754,258 @@ msgstr "" "За да добавите нова региÑтрациÑ, Ñ‚Ñ€Ñбва да имате модул, който поддържа " "Ð½ÐµÐ¹Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»." -#: ../src/empathy-accounts-dialog.glade.h:9 +#: ../src/empathy-accounts-dialog.ui.h:9 msgid "Type:" msgstr "Вид:" -#: ../src/empathy-call-window.c:346 +#: ../src/empathy-accounts-dialog.ui.h:10 +msgid "_Add..." +msgstr "_ДобавÑне…" + +#: ../src/empathy-accounts-dialog.ui.h:11 +msgid "_Create a new account" +msgstr "_Създаване на нова региÑтрациÑ" + +#: ../src/empathy-accounts-dialog.ui.h:12 +msgid "_Reuse an existing account" +msgstr "_Използване на ÑъщеÑтвуваща региÑтрациÑ" + +#: ../src/empathy-call-window.c:426 msgid "Contrast" msgstr "КонтраÑÑ‚" -#: ../src/empathy-call-window.c:349 +#: ../src/empathy-call-window.c:429 msgid "Brightness" msgstr "ЯркоÑÑ‚" -#: ../src/empathy-call-window.c:352 +#: ../src/empathy-call-window.c:432 msgid "Gamma" msgstr "Гама корекциÑ" -#: ../src/empathy-call-window.c:456 +#: ../src/empathy-call-window.c:539 msgid "Volume" msgstr "Сила на звука" -#: ../src/empathy-call-window.c:547 +#: ../src/empathy-call-window.c:671 +msgid "Connecting..." +msgstr "Свързване…" + +#: ../src/empathy-call-window.c:778 msgid "_Sidebar" msgstr "_Странична лента" -#: ../src/empathy-call-window.c:565 +#: ../src/empathy-call-window.c:797 msgid "Dialpad" msgstr "Циферблат" -#: ../src/empathy-call-window.c:571 +#: ../src/empathy-call-window.c:803 msgid "Audio input" msgstr "Ðудио вход" -#: ../src/empathy-call-window.c:575 +#: ../src/empathy-call-window.c:807 msgid "Video input" msgstr "Видео вход" -#: ../src/empathy-call-window.c:588 -msgid "Connecting..." -msgstr "Свързване…" +#. translators: Call is a noun and %s is the contact name. This string is used +#. * in the window title +#: ../src/empathy-call-window.c:868 +#, c-format +msgid "Call with %s" +msgstr "Разговор Ñ %s" + +#. translators: Call is a noun. This string is used in the window title +#: ../src/empathy-call-window.c:938 +msgid "Call" +msgstr "Разговор" #. Translators: number of minutes:seconds the caller has been connected -#: ../src/empathy-call-window.c:844 +#: ../src/empathy-call-window.c:1390 #, c-format -msgid "Connected -- %d:%02dm" +msgid "Connected — %d:%02dm" msgstr "Връзка — %d:%02dm" -#: ../src/empathy-call-window.glade.h:1 +#: ../src/empathy-call-window.ui.h:1 msgid "Hang up" msgstr "ЗатварÑне" -#: ../src/empathy-call-window.glade.h:2 +#: ../src/empathy-call-window.ui.h:2 +msgid "Redial" +msgstr "Повторно набиране" + +#: ../src/empathy-call-window.ui.h:3 msgid "Send Audio" msgstr "Изпращане на аудио" -#: ../src/empathy-call-window.glade.h:3 +#: ../src/empathy-call-window.ui.h:4 msgid "Send video" msgstr "Изпращане на видео" -#: ../src/empathy-call-window.glade.h:4 +#: ../src/empathy-call-window.ui.h:5 msgid "Video preview" msgstr "Преглед на видеото" -#: ../src/empathy-call-window.glade.h:6 +#: ../src/empathy-call-window.ui.h:6 +msgid "_Call" +msgstr "_Разговор" + +#: ../src/empathy-call-window.ui.h:7 ../src/empathy-main-window.ui.h:26 msgid "_View" msgstr "_Преглед" -#: ../src/empathy-chat-window.c:313 +#: ../src/empathy-chat-window.c:344 #, c-format msgid "Conversations (%d)" msgstr "Разговори (%d)" -#: ../src/empathy-chat-window.c:418 -msgid "Topic:" -msgstr "Тема:" - -#: ../src/empathy-chat-window.c:423 +#: ../src/empathy-chat-window.c:476 msgid "Typing a message." msgstr "Пише Ñъобщение." -#: ../src/empathy-chat-window.c:892 ../src/empathy-event-manager.c:429 -#, c-format -msgid "New message from %s" -msgstr "Ðово Ñъобщение от %s" - -#: ../src/empathy-chat-window.glade.h:1 +#: ../src/empathy-chat-window.ui.h:1 msgid "C_lear" msgstr "_ИзчиÑтване на прозореца" -#: ../src/empathy-chat-window.glade.h:2 +#: ../src/empathy-chat-window.ui.h:2 msgid "Chat" msgstr "Разговор" -#: ../src/empathy-chat-window.glade.h:3 +#: ../src/empathy-chat-window.ui.h:3 msgid "Insert _Smiley" msgstr "_Вмъкване на емотикон" -#: ../src/empathy-chat-window.glade.h:4 -msgid "Invitation _message:" -msgstr "_Съобщение за поканата:" - -#: ../src/empathy-chat-window.glade.h:5 -msgid "Invite" -msgstr "Покана" - -#: ../src/empathy-chat-window.glade.h:6 +#: ../src/empathy-chat-window.ui.h:4 msgid "Move Tab _Left" msgstr "ПремеÑтване на подпрозореца на_лÑво" -#: ../src/empathy-chat-window.glade.h:7 +#: ../src/empathy-chat-window.ui.h:5 msgid "Move Tab _Right" msgstr "ПремеÑтване на подпрозореца на_дÑÑно" -#: ../src/empathy-chat-window.glade.h:8 -msgid "Select who would you like to invite:" -msgstr "Изберете кого ще поканите:" - -#: ../src/empathy-chat-window.glade.h:9 -msgid "You have been invited to join a chat conference." -msgstr "Поканени Ñте да Ñе приÑъедините към конферентен разговор." - -#: ../src/empathy-chat-window.glade.h:10 +#: ../src/empathy-chat-window.ui.h:6 msgid "_Contact" msgstr "_Контакт" -#: ../src/empathy-chat-window.glade.h:11 ../src/empathy-main-window.glade.h:10 +#: ../src/empathy-chat-window.ui.h:7 ../src/empathy-main-window.ui.h:14 msgid "_Contents" msgstr "_РъководÑтво" -#: ../src/empathy-chat-window.glade.h:12 +#: ../src/empathy-chat-window.ui.h:8 msgid "_Conversation" msgstr "_Разговор" -#: ../src/empathy-chat-window.glade.h:13 +#: ../src/empathy-chat-window.ui.h:9 msgid "_Detach Tab" msgstr "_ОтделÑне на подпрозореца" -#: ../src/empathy-chat-window.glade.h:15 +#: ../src/empathy-chat-window.ui.h:11 msgid "_Favorite Chatroom" msgstr "_Любима ÑтаÑ" -#: ../src/empathy-chat-window.glade.h:16 ../src/empathy-main-window.glade.h:12 +#: ../src/empathy-chat-window.ui.h:12 ../src/empathy-main-window.ui.h:18 msgid "_Help" msgstr "Помо_щ" -#: ../src/empathy-chat-window.glade.h:17 +#: ../src/empathy-chat-window.ui.h:13 msgid "_Next Tab" msgstr "_Следващ подпрозорец" -#: ../src/empathy-chat-window.glade.h:18 +#: ../src/empathy-chat-window.ui.h:14 msgid "_Previous Tab" msgstr "_Предишен подпрозорец" -#: ../src/empathy-chat-window.glade.h:19 +#: ../src/empathy-chat-window.ui.h:15 ../src/empathy-status-icon.ui.h:4 +msgid "_Show Contact List" +msgstr "_Показване на ÑпиÑъка Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¸" + +#: ../src/empathy-chat-window.ui.h:16 msgid "_Tabs" -msgstr "_Страници" +msgstr "_Подпрозорци" -#: ../src/empathy-chatrooms-window.c:262 +#: ../src/empathy-chatrooms-window.c:258 msgid "Name" msgstr "Име" -#: ../src/empathy-chatrooms-window.c:280 +#: ../src/empathy-chatrooms-window.c:276 msgid "Room" msgstr "СтаÑ" -#: ../src/empathy-chatrooms-window.c:289 +#: ../src/empathy-chatrooms-window.c:285 msgid "Auto-Connect" msgstr "Ðвтоматично Ñвързване" -#: ../src/empathy-chatrooms-window.glade.h:2 -msgid "Edit Favorite Room" -msgstr "Редактиране на ÑÑ‚Ð°Ñ Ð² отметките" - -#: ../src/empathy-chatrooms-window.glade.h:3 -msgid "Join room on start_up" -msgstr "_Ðвтоматично влизане в Ñтаи при Ñтартиране" - -#: ../src/empathy-chatrooms-window.glade.h:4 -msgid "Join this chat room when Empathy starts and you are connected" -msgstr "Влизане в тази ÑÑ‚Ð°Ñ Ð¿Ñ€Ð¸ Ñтартиране на Empathy, ако Ñте Ñвързани" - -#: ../src/empathy-chatrooms-window.glade.h:5 +#: ../src/empathy-chatrooms-window.ui.h:2 msgid "Manage Favorite Rooms" msgstr "Управление на Ñтаите в отметките" -#: ../src/empathy-chatrooms-window.glade.h:6 -msgid "N_ame:" -msgstr "_Име:" - -#: ../src/empathy-chatrooms-window.glade.h:7 -msgid "S_erver:" -msgstr "_Сървър:" - -#: ../src/empathy-chatrooms-window.glade.h:9 -#: ../src/empathy-new-chatroom-dialog.glade.h:9 -msgid "_Room:" -msgstr "_СтаÑ:" - -#: ../src/empathy-event-manager.c:377 +#: ../src/empathy-event-manager.c:321 msgid "Incoming call" msgstr "ВходÑщ разговор" -#: ../src/empathy-event-manager.c:380 +#: ../src/empathy-event-manager.c:324 #, c-format msgid "%s is calling you, do you want to answer?" msgstr "%s ви Ñ‚ÑŠÑ€Ñи, иÑкате ли да отговорите?" -#: ../src/empathy-event-manager.c:387 +#: ../src/empathy-event-manager.c:331 msgid "_Reject" msgstr "От_казване" -#: ../src/empathy-event-manager.c:393 +#: ../src/empathy-event-manager.c:337 msgid "_Answer" msgstr "_ОтговарÑне" -#: ../src/empathy-event-manager.c:516 +#: ../src/empathy-event-manager.c:452 #, c-format msgid "Incoming call from %s" msgstr "ВходÑщ разговор от %s" -#: ../src/empathy-event-manager.c:564 +#: ../src/empathy-event-manager.c:496 #, c-format msgid "%s is offering you an invitation" msgstr "%s ви праща покана" -#: ../src/empathy-event-manager.c:570 +#: ../src/empathy-event-manager.c:502 msgid "An external application will be started to handle it." msgstr "За обработката Ñ Ñ‰Ðµ бъде Ñтартирана външна програма." -#: ../src/empathy-event-manager.c:575 +#: ../src/empathy-event-manager.c:507 msgid "You don't have the needed external application to handle it." msgstr "ЛипÑва външната програма за обработката Ñ." -#: ../src/empathy-event-manager.c:698 +#: ../src/empathy-event-manager.c:634 msgid "Room invitation" msgstr "Покана за ÑтаÑ" -#: ../src/empathy-event-manager.c:701 +#: ../src/empathy-event-manager.c:637 #, c-format msgid "%s is inviting you to join %s" msgstr "%s ви кани да Ñе приÑъедините към %s" -#. Decline button -#: ../src/empathy-event-manager.c:709 ../src/empathy-ft-manager.c:1031 +#: ../src/empathy-event-manager.c:645 msgid "_Decline" msgstr "_Отказване" -#: ../src/empathy-event-manager.c:714 +#: ../src/empathy-event-manager.c:650 +#: ../src/empathy-new-chatroom-dialog.ui.h:7 msgid "_Join" msgstr "_ПриÑъединÑване" -#: ../src/empathy-event-manager.c:744 +#: ../src/empathy-event-manager.c:689 #, c-format msgid "%s invited you to join %s" msgstr "%s ви кани да Ñе приÑъедините към %s" -#: ../src/empathy-event-manager.c:867 +#: ../src/empathy-event-manager.c:715 #, c-format msgid "Incoming file transfer from %s" msgstr "ВходÑщ файл от %s" -#: ../src/empathy-event-manager.c:961 +#: ../src/empathy-event-manager.c:895 #, c-format msgid "Subscription requested by %s" msgstr "ИÑкане за запиÑване от %s" -#: ../src/empathy-event-manager.c:965 +#: ../src/empathy-event-manager.c:899 #, c-format msgid "" "\n" @@ -1685,176 +2014,145 @@ msgstr "" "\n" "Съобщение: %s" +#. someone is logging off +#: ../src/empathy-event-manager.c:935 +#, c-format +msgid "%s is now offline." +msgstr "%s в момента е извън мрежата." + +#. someone is logging in +#: ../src/empathy-event-manager.c:951 +#, c-format +msgid "%s is now online." +msgstr "%s в момента е в мрежата." + #. Translators: time left, when it is more than one hour -#: ../src/empathy-ft-manager.c:114 +#: ../src/empathy-ft-manager.c:101 #, c-format msgid "%u:%02u.%02u" msgstr "%u ч., %02u м. и %02u Ñ." #. Translators: time left, when is is less than one hour -#: ../src/empathy-ft-manager.c:117 +#: ../src/empathy-ft-manager.c:104 #, c-format msgid "%02u.%02u" msgstr "%02u м. и %02u Ñ." -#: ../src/empathy-ft-manager.c:166 -msgid "No reason was specified" -msgstr "Ðе е указана причина" - -#: ../src/empathy-ft-manager.c:168 -msgid "The change in state was requested" -msgstr "ЗаÑвена бе промÑна в ÑÑŠÑтоÑнието" - -#: ../src/empathy-ft-manager.c:170 -msgid "You canceled the file transfer" -msgstr "ПреуÑтановихте прехвърлÑнето на файл" - -#: ../src/empathy-ft-manager.c:172 -msgid "The other participant canceled the file transfer" -msgstr "ОтÑрещната Ñтрана преуÑтанови прехвърлÑнето на файл" - -#: ../src/empathy-ft-manager.c:174 -msgid "Error while trying to transfer the file" -msgstr "Грешка по време на прехвърлÑнето на файл" +#: ../src/empathy-ft-manager.c:180 +msgctxt "file transfer percent" +msgid "Unknown" +msgstr "ÐеизвеÑтно" -#: ../src/empathy-ft-manager.c:176 -msgid "The other participant is unable to transfer the file" -msgstr "ОтÑрещната Ñтрана не може да Ð¿Ñ€ÐµÑ…Ð²ÑŠÑ€Ð»Ñ Ñ„Ð°Ð¹Ð»" +#: ../src/empathy-ft-manager.c:275 +#, c-format +msgid "%s of %s at %s/s" +msgstr "%s от общо %s, Ñ %s/s" -#: ../src/empathy-ft-manager.c:178 -msgid "Unknown reason" -msgstr "ÐеизвеÑтна причина" +#: ../src/empathy-ft-manager.c:276 +#, c-format +msgid "%s of %s" +msgstr "%s от общо %s" #. translators: first %s is filename, second %s is the contact name -#: ../src/empathy-ft-manager.c:226 +#: ../src/empathy-ft-manager.c:307 #, c-format msgid "Receiving \"%s\" from %s" msgstr "Получаване на файла „%s“ от %s" #. translators: first %s is filename, second %s is the contact name -#: ../src/empathy-ft-manager.c:229 +#: ../src/empathy-ft-manager.c:310 #, c-format msgid "Sending \"%s\" to %s" msgstr "Изпращане на файла „%s“ до %s" -#: ../src/empathy-ft-manager.c:239 -msgctxt "file size" -msgid "Unknown" -msgstr "ÐеизвеÑтен" +#. translators: first %s is filename, second %s +#. * is the contact name +#: ../src/empathy-ft-manager.c:340 +#, c-format +msgid "Error receiving \"%s\" from %s" +msgstr "Грешка при получаване на „%s“ от %s" -#. translators: first %s is the transferred size, second %s is -#. * the total file size -#: ../src/empathy-ft-manager.c:247 +#: ../src/empathy-ft-manager.c:343 +msgid "Error receiving a file" +msgstr "Грешка при получаване на файл" + +#: ../src/empathy-ft-manager.c:348 #, c-format -msgid "%s of %s" -msgstr "%s от общо %s" +msgid "Error sending \"%s\" to %s" +msgstr "Грешка при изпращане на „%s“ до %s" -#: ../src/empathy-ft-manager.c:254 -msgid "Waiting the other participant's response" -msgstr "Изчакване на отговора на отÑрещната Ñтрана" +#: ../src/empathy-ft-manager.c:351 +msgid "Error sending a file" +msgstr "Грешка при изпращане на файл" -#: ../src/empathy-ft-manager.c:264 +#. translators: first %s is filename, second %s +#. * is the contact name +#: ../src/empathy-ft-manager.c:490 #, c-format msgid "\"%s\" received from %s" msgstr "„%s“ получен от %s" -#: ../src/empathy-ft-manager.c:270 +#. translators: first %s is filename, second %s +#. * is the contact name +#: ../src/empathy-ft-manager.c:495 #, c-format msgid "\"%s\" sent to %s" msgstr "„%s“ изпратен до %s" -#: ../src/empathy-ft-manager.c:273 +#: ../src/empathy-ft-manager.c:498 msgid "File transfer completed" msgstr "ПрехвърлÑнето на файл завърши" -#: ../src/empathy-ft-manager.c:282 -#, c-format -msgid "\"%s\" receiving from %s" -msgstr "Получаване на „%s“ от %s" +#: ../src/empathy-ft-manager.c:617 ../src/empathy-ft-manager.c:784 +msgid "Waiting for the other participant's response" +msgstr "Изчакване на отговора на Ð´Ñ€ÑƒÐ³Ð¸Ñ ÑƒÑ‡Ð°Ñтник" -#: ../src/empathy-ft-manager.c:288 +#: ../src/empathy-ft-manager.c:643 ../src/empathy-ft-manager.c:681 #, c-format -msgid "\"%s\" sending to %s" -msgstr "Изпращане на „%s“ до %s" +msgid "Checking integrity of \"%s\"" +msgstr "Проверка на целоÑтта на „%s“" -#: ../src/empathy-ft-manager.c:291 +#: ../src/empathy-ft-manager.c:646 ../src/empathy-ft-manager.c:684 #, c-format -msgid "File transfer canceled: %s" -msgstr "ПреуÑтановено прехвърлÑне на файл: %s" - -#: ../src/empathy-ft-manager.c:306 -msgctxt "remaining time" -msgid "Unknown" -msgstr "ÐеизвеÑтно" - -#: ../src/empathy-ft-manager.c:366 -msgctxt "file transfer percent" -msgid "Unknown" -msgstr "ÐеизвеÑтно" +msgid "Hashing \"%s\"" +msgstr "ИзчиÑлÑване на извадката на „%s“" -#: ../src/empathy-ft-manager.c:663 +#: ../src/empathy-ft-manager.c:1024 msgid "%" msgstr "%" -#: ../src/empathy-ft-manager.c:675 +#: ../src/empathy-ft-manager.c:1036 msgid "File" msgstr "Файл" -#: ../src/empathy-ft-manager.c:697 +#: ../src/empathy-ft-manager.c:1058 msgid "Remaining" msgstr "ОÑтават" -#: ../src/empathy-ft-manager.c:895 -msgid "Cannot save file to this location" -msgstr "Файлът не може да бъде запазен там" - -#: ../src/empathy-ft-manager.c:941 -msgid "Save file as..." -msgstr "Запазване на файла като…" - -#: ../src/empathy-ft-manager.c:1011 -msgid "unknown size" -msgstr "неизвеÑтен размер" - -#: ../src/empathy-ft-manager.c:1017 -#, c-format -msgid "%s would like to send you a file" -msgstr "%s иÑка да ви изпрати файл" - -#: ../src/empathy-ft-manager.c:1022 -#, c-format -msgid "Do you want to accept the file \"%s\" (%s)?" -msgstr "Приемате ли файла %s“ (%s)?" - -#. Accept button -#: ../src/empathy-ft-manager.c:1040 -msgid "_Accept" -msgstr "_Приемане" - -#: ../src/empathy-ft-manager.glade.h:1 -msgid "File transfers" +#: ../src/empathy-ft-manager.ui.h:1 +msgid "File Transfers" msgstr "ПрехвърлÑÐ½Ð¸Ñ Ð½Ð° файлове" -#: ../src/empathy-ft-manager.glade.h:2 +#: ../src/empathy-ft-manager.ui.h:2 msgid "Remove completed, canceled and failed file transfers from the list" msgstr "" "ИзчиÑтване на завършените, отменените и неуÑпешните прехвърлÑÐ½Ð¸Ñ Ð½Ð° файлове " "от ÑпиÑъка" #. Translators: this is the header of a treeview column -#: ../src/empathy-import-dialog.c:255 +#: ../src/empathy-import-dialog.c:263 msgid "Import" msgstr "ВнаÑÑне" -#: ../src/empathy-import-dialog.c:264 +#: ../src/empathy-import-dialog.c:272 msgid "Protocol" msgstr "Протокол" -#: ../src/empathy-import-dialog.c:290 +#: ../src/empathy-import-dialog.c:298 msgid "Source" msgstr "Източник" -#: ../src/empathy-import-dialog.c:384 +#: ../src/empathy-import-dialog.c:392 msgid "" "No accounts to import could be found. Empathy currently only supports " "importing accounts from Pidgin." @@ -1862,138 +2160,204 @@ msgstr "" "Ðе Ñа открити региÑтрации за внаÑÑне. Empathy поддържа в момента внаÑÑне " "Ñамо от Pidgin." -#: ../src/empathy-import-dialog.glade.h:1 +#: ../src/empathy-import-dialog.ui.h:1 msgid "Import Accounts" msgstr "ВнаÑÑне на региÑтрации" -#: ../src/empathy-main-window.c:391 +#: ../src/empathy-main-window.c:402 +msgid "_Edit account" +msgstr "_Редактиране на региÑтрациÑ" + +#: ../src/empathy-main-window.c:505 msgid "No error specified" msgstr "Ðе е указана грешка" -#: ../src/empathy-main-window.c:394 +#: ../src/empathy-main-window.c:508 msgid "Network error" msgstr "Мрежова грешка" -#: ../src/empathy-main-window.c:397 +#: ../src/empathy-main-window.c:511 msgid "Authentication failed" msgstr "ÐеуÑпешно идентифициране" -#: ../src/empathy-main-window.c:400 +#: ../src/empathy-main-window.c:514 msgid "Encryption error" msgstr "Грешка в шифрирането" -#: ../src/empathy-main-window.c:403 +#: ../src/empathy-main-window.c:517 msgid "Name in use" msgstr "Името е заето" -#: ../src/empathy-main-window.c:406 +#: ../src/empathy-main-window.c:520 msgid "Certificate not provided" msgstr "Ðе е предоÑтавен Ñертификат" -#: ../src/empathy-main-window.c:409 +#: ../src/empathy-main-window.c:523 msgid "Certificate untrusted" msgstr "Сертификатът не е доверен" -#: ../src/empathy-main-window.c:412 +#: ../src/empathy-main-window.c:526 msgid "Certificate expired" msgstr "Сертификатът е изтекъл" -#: ../src/empathy-main-window.c:415 +#: ../src/empathy-main-window.c:529 msgid "Certificate not activated" msgstr "Сертификатът не е влÑзъл в Ñила" -#: ../src/empathy-main-window.c:418 +#: ../src/empathy-main-window.c:532 msgid "Certificate hostname mismatch" msgstr "ÐеÑъвпадение на името Ñ Ñ‚Ð¾Ð²Ð° в Ñертификата" -#: ../src/empathy-main-window.c:421 +#: ../src/empathy-main-window.c:535 msgid "Certificate fingerprint mismatch" msgstr "ÐеÑъвпадение на отпечатъка на Ñертификата" -#: ../src/empathy-main-window.c:424 +#: ../src/empathy-main-window.c:538 msgid "Certificate self-signed" msgstr "Сертификатът е ÑамоподпиÑан" -#: ../src/empathy-main-window.c:427 +#: ../src/empathy-main-window.c:541 msgid "Certificate error" msgstr "Грешка в Ñертификата" -#: ../src/empathy-main-window.c:430 +#: ../src/empathy-main-window.c:544 msgid "Unknown error" msgstr "ÐеизвеÑтна грешка" -#: ../src/empathy-main-window.c:594 +#: ../src/empathy-main-window.c:1293 msgid "Show and edit accounts" msgstr "Показване и редактиране на региÑтрации" -#: ../src/empathy-main-window.c:974 -msgid "Contact" -msgstr "Контакт" - -#: ../src/empathy-main-window.c:1176 -msgid "_Edit account" -msgstr "_Редактиране на региÑтрациÑ" - -#: ../src/empathy-main-window.glade.h:1 +#: ../src/empathy-main-window.ui.h:1 msgid "Contact List" msgstr "СпиÑък Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¸" -#: ../src/empathy-main-window.glade.h:2 +#: ../src/empathy-main-window.ui.h:2 +msgid "Contacts on a _Map" +msgstr "_Контакти на карта" + +#: ../src/empathy-main-window.ui.h:3 msgid "Context" msgstr "КонтекÑÑ‚" -#: ../src/empathy-main-window.glade.h:3 +#: ../src/empathy-main-window.ui.h:4 msgid "Join _Favorites" msgstr "_ДобавÑне към отметките" -#: ../src/empathy-main-window.glade.h:4 -msgid "Join _New..." -msgstr "Влизане в _нова…" - -#: ../src/empathy-main-window.glade.h:5 +#: ../src/empathy-main-window.ui.h:5 msgid "Manage Favorites" msgstr "Редактиране на отметките" -#: ../src/empathy-main-window.glade.h:6 -msgid "Show _Offline Contacts" -msgstr "Показване на _изключените контакти" +#: ../src/empathy-main-window.ui.h:6 +msgid "N_ormal Size" +msgstr "_Ðормален размер" + +#: ../src/empathy-main-window.ui.h:7 +msgid "Normal Size With _Avatars" +msgstr "Ðормален размер Ñ _аватари" + +#: ../src/empathy-main-window.ui.h:8 +msgid "Sort by _Name" +msgstr "Подреждане по _име" + +#: ../src/empathy-main-window.ui.h:9 +msgid "Sort by _Status" +msgstr "Подреждане по _ÑÑŠÑтоÑние" -#: ../src/empathy-main-window.glade.h:7 +#: ../src/empathy-main-window.ui.h:10 msgid "_Accounts" msgstr "_РегиÑтрации" -#: ../src/empathy-main-window.glade.h:8 -msgid "_Add Contact..." -msgstr "_ДобавÑне на контакт…" +#: ../src/empathy-main-window.ui.h:13 +msgid "_Compact Size" +msgstr "_Стегнат режим" -#: ../src/empathy-main-window.glade.h:13 ../src/empathy-status-icon.glade.h:2 +#: ../src/empathy-main-window.ui.h:15 +msgid "_Debug" +msgstr "_ИзчиÑтване на грешки" + +#: ../src/empathy-main-window.ui.h:17 +msgid "_File Transfers" +msgstr "_ПрехвърлÑÐ½Ð¸Ñ Ð½Ð° файлове" + +#: ../src/empathy-main-window.ui.h:19 +msgid "_Join..." +msgstr "_ПриÑъединÑване…" + +#: ../src/empathy-main-window.ui.h:20 ../src/empathy-status-icon.ui.h:2 msgid "_New Conversation..." msgstr "_Ðов разговор…" -#: ../src/empathy-main-window.glade.h:14 +#: ../src/empathy-main-window.ui.h:21 +msgid "_Offline Contacts" +msgstr "_Изключени контакти" + +#: ../src/empathy-main-window.ui.h:22 msgid "_Personal Information" msgstr "_Лични данни" -#: ../src/empathy-main-window.glade.h:16 +#: ../src/empathy-main-window.ui.h:24 +msgid "_Previous Conversations" +msgstr "_Предишни разговори" + +#: ../src/empathy-main-window.ui.h:25 msgid "_Room" msgstr "_СтаÑ:" -#: ../src/empathy-new-chatroom-dialog.c:291 -msgid "Chat Rooms" -msgstr "Стаи за разговор" +#: ../src/empathy-new-chatroom-dialog.c:331 +msgid "Chat Room" +msgstr "Ð¡Ñ‚Ð°Ñ Ð·Ð° разговор" -#: ../src/empathy-new-chatroom-dialog.glade.h:2 -msgid "Browse:" -msgstr "Избор:" +#: ../src/empathy-new-chatroom-dialog.c:347 +msgid "Members" +msgstr "УчаÑтници" -#: ../src/empathy-new-chatroom-dialog.glade.h:3 +#: ../src/empathy-new-chatroom-dialog.c:496 +#, c-format +msgctxt "" +"Room/Join's roomlist tooltip. Parametersare a channel name, yes/no, yes/no " +"and a number." +msgid "" +"<b>%s</b>\n" +"Invite required: %s\n" +"Password required: %s\n" +"Members: %s" +msgstr "" +"<b>%s</b>\n" +"ИзиÑкване на покана: %s\n" +"ИзиÑкване на парола: %s\n" +"Брой учаÑтници: %s" + +#: ../src/empathy-new-chatroom-dialog.c:498 +#: ../src/empathy-new-chatroom-dialog.c:499 +msgid "Yes" +msgstr "да" + +#: ../src/empathy-new-chatroom-dialog.c:498 +#: ../src/empathy-new-chatroom-dialog.c:499 +msgid "No" +msgstr "не" + +#: ../src/empathy-new-chatroom-dialog.c:526 +msgid "Could not start room listing" +msgstr "ИзброÑването на Ñтаите не може да започне" + +#: ../src/empathy-new-chatroom-dialog.c:536 +msgid "Could not stop room listing" +msgstr "ИзброÑването на Ñтаите не може да Ñпре" + +#: ../src/empathy-new-chatroom-dialog.ui.h:2 +msgid "Couldn't load room list" +msgstr "СпиÑъкът ÑÑŠÑ Ñтаи не може да бъде зареден" + +#: ../src/empathy-new-chatroom-dialog.ui.h:3 msgid "" "Enter the room name to join here or click on one or more rooms in the list." msgstr "" "Въведете името на ÑтаÑта, в коÑто да влезете, или натиÑнете една или повече " "Ñтаи от ÑпиÑъка." -#: ../src/empathy-new-chatroom-dialog.glade.h:4 +#: ../src/empathy-new-chatroom-dialog.ui.h:4 msgid "" "Enter the server which hosts the room, or leave it empty if the room is on " "the current account's server" @@ -2001,188 +2365,273 @@ msgstr "" "Попълнете Ñървъра, на който е ÑтаÑта. Ðко Ñ‚Ñ Ðµ на Ñървъра на текущата " "региÑтрациÑ, оÑтавете полето празно." -#: ../src/empathy-new-chatroom-dialog.glade.h:5 -msgid "Join" -msgstr "Влизане" +#: ../src/empathy-new-chatroom-dialog.ui.h:5 +msgid "Join Room" +msgstr "Влизане в ÑтаÑ" -#: ../src/empathy-new-chatroom-dialog.glade.h:6 -msgid "Join New" -msgstr "Влизане в нова" +#: ../src/empathy-new-chatroom-dialog.ui.h:6 +msgid "Room List" +msgstr "СпиÑък ÑÑŠÑ Ñтаи" -#: ../src/empathy-new-chatroom-dialog.glade.h:7 -msgid "Re_fresh" -msgstr "_ОбновÑване" - -#: ../src/empathy-new-chatroom-dialog.glade.h:8 -msgid "" -"This list represents all chat rooms hosted on the server you have entered." -msgstr "" -"Този ÑпиÑък показва вÑички Ñтаи, които Ñе намират на Ñървъра, към който Ñе " -"включихте." +#: ../src/empathy-new-chatroom-dialog.ui.h:8 +msgid "_Room:" +msgstr "_СтаÑ:" -#: ../src/empathy-preferences.c:157 +#: ../src/empathy-preferences.c:148 msgid "Message received" msgstr "Съобщението е получено" -#: ../src/empathy-preferences.c:158 +#: ../src/empathy-preferences.c:149 msgid "Message sent" msgstr "Съобщението е изпратено" -#: ../src/empathy-preferences.c:159 +#: ../src/empathy-preferences.c:150 msgid "New conversation" msgstr "Ðов разговор" -#: ../src/empathy-preferences.c:160 +#: ../src/empathy-preferences.c:151 msgid "Contact goes online" msgstr "Контактът е в мрежата" -#: ../src/empathy-preferences.c:161 +#: ../src/empathy-preferences.c:152 msgid "Contact goes offline" msgstr "Контактът е извън мрежата" -#: ../src/empathy-preferences.c:162 +#: ../src/empathy-preferences.c:153 msgid "Account connected" msgstr "РегиÑтрациÑта е включена" -#: ../src/empathy-preferences.c:163 +#: ../src/empathy-preferences.c:154 msgid "Account disconnected" msgstr "РегиÑтрациÑта е изключена" -#: ../src/empathy-preferences.c:397 +#: ../src/empathy-preferences.c:394 msgid "Language" msgstr "Език" -#: ../src/empathy-preferences.glade.h:1 -msgid "<b>Appearance</b>" -msgstr "<b>Изглед</b>" - -#: ../src/empathy-preferences.glade.h:2 -msgid "<b>Behavior</b>" -msgstr "<b>Поведение</b>" +#: ../src/empathy-preferences.ui.h:1 +msgid "Allow _GPS usage" +msgstr "_Ползване на GPS" -#: ../src/empathy-preferences.glade.h:3 -msgid "<b>Contact List</b>" -msgstr "<b>СпиÑък Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¸</b>" +#: ../src/empathy-preferences.ui.h:2 +msgid "Allow _cellphone usage" +msgstr "Ползване на мобилни _телефони" -#: ../src/empathy-preferences.glade.h:4 -msgid "<b>Enable spell checking for languages:</b>" -msgstr "<b>Езици Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° на правопиÑа:</b>" +#: ../src/empathy-preferences.ui.h:3 +msgid "Allow _network usage" +msgstr "Ползване на _мрежа" -#: ../src/empathy-preferences.glade.h:5 -msgid "<b>Play sound for events</b>" -msgstr "<b>Звуци при ÑъбитиÑ</b>" - -#: ../src/empathy-preferences.glade.h:6 -msgid "" -"<small>The list of languages reflects only the languages for which you have " -"a dictionary installed.</small>" -msgstr "" -"<small>Ð’ ÑпиÑъка Ñа Ñамо езиците, за които е инÑталиран речник.</small>" +#: ../src/empathy-preferences.ui.h:4 +msgid "Appearance" +msgstr "Изглед" -#: ../src/empathy-preferences.glade.h:7 +#: ../src/empathy-preferences.ui.h:5 msgid "Automatically _connect on startup " msgstr "_Ðвтоматично Ñвързване при Ñтартиране" -#: ../src/empathy-preferences.glade.h:8 -msgid "Avatars are user chosen images shown in the contact list" -msgstr "" -"Ðватарите Ñа изображениÑта, които Ñе избират от потребителите, за да Ñе " -"показват в ÑпиÑъка Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¸" +#: ../src/empathy-preferences.ui.h:6 +msgid "Behavior" +msgstr "Поведение" -#: ../src/empathy-preferences.glade.h:9 +#: ../src/empathy-preferences.ui.h:7 msgid "Chat Th_eme:" msgstr "_Тема за прозорците за разговори:" -#: ../src/empathy-preferences.glade.h:10 +#: ../src/empathy-preferences.ui.h:8 msgid "Disable notifications when _away or busy" msgstr "Без _извеÑÑ‚Ñване в ÑÑŠÑтоÑние „Зает“ или „ОтÑÑŠÑтващ“" -#: ../src/empathy-preferences.glade.h:11 +#: ../src/empathy-preferences.ui.h:9 msgid "Disable sounds when _away or busy" msgstr "Без _звуци в ÑÑŠÑтоÑние „Зает“ или „ОтÑÑŠÑтващ“" -#: ../src/empathy-preferences.glade.h:12 +#: ../src/empathy-preferences.ui.h:10 +msgid "Enable notifications when a contact comes online" +msgstr "ИзвеÑÑ‚Ñване, когато контактът влезе в мрежата" + +#: ../src/empathy-preferences.ui.h:11 +msgid "Enable notifications when a contact goes offline" +msgstr "ИзвеÑÑ‚Ñване, когато контактът излезе извън мрежата" + +#: ../src/empathy-preferences.ui.h:12 msgid "Enable notifications when the _chat is not focused" msgstr "ИзвеÑÑ‚Ñване, когато прозорецът за разговори не е на _фокуÑ" -#: ../src/empathy-preferences.glade.h:13 +#: ../src/empathy-preferences.ui.h:13 +msgid "Enable spell checking for languages:" +msgstr "Езици Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° на правопиÑа:" + +#: ../src/empathy-preferences.ui.h:14 msgid "General" msgstr "Общи" -#: ../src/empathy-preferences.glade.h:14 +#: ../src/empathy-preferences.ui.h:15 +msgid "Geoclue Settings" +msgstr "ÐаÑтройки за меÑтоположението" + +#: ../src/empathy-preferences.ui.h:16 +msgid "Location" +msgstr "МеÑтоположение" + +#: ../src/empathy-preferences.ui.h:17 msgid "Notifications" msgstr "ИзвеÑÑ‚Ñване" -#: ../src/empathy-preferences.glade.h:15 +#: ../src/empathy-preferences.ui.h:18 +msgid "Play sound for events" +msgstr "Звуци при ÑъбитиÑ" + +#: ../src/empathy-preferences.ui.h:19 msgid "Preferences" msgstr "ÐаÑтройки" -#: ../src/empathy-preferences.glade.h:16 -msgid "Show _avatars" -msgstr "Показване на _аватари" +#: ../src/empathy-preferences.ui.h:20 +msgid "Privacy" +msgstr "Лични данни" -#: ../src/empathy-preferences.glade.h:17 +#: ../src/empathy-preferences.ui.h:21 +msgid "" +"Reduced location accuracy means that nothing more precise than your city, " +"state and country will be published. GPS coordinates will be accurate to 1 " +"decimal place." +msgstr "" +"Ðамалената точноÑÑ‚ на меÑтоположението означава, че нÑма да Ñе публикуват по-" +"точни данни от град, щат, държава. Координатите от GPS ще Ñа точни до едно " +"мÑÑто зад деÑетичната запетаÑ." + +#: ../src/empathy-preferences.ui.h:22 msgid "Show _smileys as images" msgstr "Използване на _картинки за емотикони" -#: ../src/empathy-preferences.glade.h:18 -msgid "Show co_mpact contact list" -msgstr "_Стегнат ÑпиÑък Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¸" - -#: ../src/empathy-preferences.glade.h:19 -msgid "Sort by _name" -msgstr "Подреждане по _име" - -#: ../src/empathy-preferences.glade.h:20 -msgid "Sort by s_tate" -msgstr "Подреждане по _ÑÑŠÑтоÑние" +#: ../src/empathy-preferences.ui.h:23 +msgid "Show contact _list in rooms" +msgstr "_Показване на контактите в Ñтаите" -#: ../src/empathy-preferences.glade.h:21 +#: ../src/empathy-preferences.ui.h:24 msgid "Sounds" msgstr "Звуци" -#: ../src/empathy-preferences.glade.h:22 +#: ../src/empathy-preferences.ui.h:25 msgid "Spell Checking" msgstr "Проверка на правопиÑа" -#: ../src/empathy-preferences.glade.h:23 +#: ../src/empathy-preferences.ui.h:26 +msgid "" +"The list of languages reflects only the languages for which you have a " +"dictionary installed." +msgstr "Ð’ ÑпиÑъка Ñа Ñамо езиците, за които е инÑталиран речник." + +#: ../src/empathy-preferences.ui.h:27 msgid "Themes" msgstr "Графични теми" -#: ../src/empathy-preferences.glade.h:24 +#: ../src/empathy-preferences.ui.h:28 msgid "_Enable bubble notifications" msgstr "Включване на извеÑÑ‚Ñването Ñ _прозорци" -#: ../src/empathy-preferences.glade.h:25 +#: ../src/empathy-preferences.ui.h:29 msgid "_Enable sound notifications" msgstr "Включване на уведомÑването ÑÑŠÑ _звук" -#: ../src/empathy-preferences.glade.h:26 +#: ../src/empathy-preferences.ui.h:30 msgid "_Open new chats in separate windows" msgstr "_ОтварÑне на разговорите в отделни прозорци" -#: ../src/empathy-status-icon.glade.h:1 +#: ../src/empathy-preferences.ui.h:31 +msgid "_Publish location to my contacts" +msgstr "_Публикуване на меÑтоположението ви към контактите ви" + +#: ../src/empathy-preferences.ui.h:32 +msgid "_Reduce location accuracy" +msgstr "_ÐиÑка точноÑÑ‚ на меÑтоположението" + +#: ../src/empathy-status-icon.ui.h:1 msgid "Status" msgstr "СъÑтоÑние" -#: ../src/empathy-status-icon.glade.h:3 +#: ../src/empathy-status-icon.ui.h:3 msgid "_Quit" msgstr "_Спиране на програмата" -#: ../src/empathy-status-icon.glade.h:4 -msgid "_Show Contact List" -msgstr "_Показване на ÑпиÑъка Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¸" - -#: ../src/empathy-tube-dispatch.c:364 +#: ../src/empathy-tube-dispatch.c:375 #, c-format msgid "Unable to start application for service %s: %s" msgstr "Ðе може да Ñе Ñтартира приложение за уÑлугата „%s“: %s" -#: ../src/empathy-tube-dispatch.c:435 +#: ../src/empathy-tube-dispatch.c:446 #, c-format msgid "" "An invitation was offered for service %s, but you don't have the needed " "application to handle it" msgstr "" -"Изпратена ви бе покана за уÑлугата „%s“, но необходимата програма за " +"Изпратена ви бе покана за уÑлугата „%s“, но необходимата програма за " "обработката Ñ Ð»Ð¸Ð¿Ñва." + +#: ../src/empathy-map-view.ui.h:1 +msgid "Contact Map View" +msgstr "Карта Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¸Ñ‚Ðµ" + +#: ../src/empathy-debug-dialog.c:111 ../src/empathy-debug-dialog.c:1083 +msgid "Error" +msgstr "Грешка" + +#: ../src/empathy-debug-dialog.c:114 ../src/empathy-debug-dialog.c:1077 +msgid "Critical" +msgstr "Критична" + +#: ../src/empathy-debug-dialog.c:117 ../src/empathy-debug-dialog.c:1071 +msgid "Warning" +msgstr "Предупреждение" + +#: ../src/empathy-debug-dialog.c:120 ../src/empathy-debug-dialog.c:1065 +#: ../src/empathy-debug-dialog.c:1113 +msgid "Message" +msgstr "Съобщение" + +#: ../src/empathy-debug-dialog.c:123 ../src/empathy-debug-dialog.c:1059 +msgid "Info" +msgstr "ИнформациÑ" + +#: ../src/empathy-debug-dialog.c:126 ../src/empathy-debug-dialog.c:1053 +msgid "Debug" +msgstr "ПодробноÑÑ‚" + +#: ../src/empathy-debug-dialog.c:845 +msgid "Save" +msgstr "Запазване" + +#: ../src/empathy-debug-dialog.c:948 +msgid "Debug Window" +msgstr "Прозорец за изчиÑтване на грешки" + +#: ../src/empathy-debug-dialog.c:1021 +msgid "Pause" +msgstr "Пауза" + +#: ../src/empathy-debug-dialog.c:1033 +msgid "Level " +msgstr "Ðиво" + +#: ../src/empathy-debug-dialog.c:1102 +msgid "Time" +msgstr "Време" + +#: ../src/empathy-debug-dialog.c:1104 +msgid "Domain" +msgstr "ОблаÑÑ‚" + +#: ../src/empathy-debug-dialog.c:1106 +msgid "Category" +msgstr "КатегориÑ" + +#: ../src/empathy-debug-dialog.c:1108 +msgid "Level" +msgstr "Ðиво" + +#: ../src/empathy-debug-dialog.c:1140 +msgid "" +"The selected connection manager does not support the remote debugging " +"extension." +msgstr "" +"Избраната програма за управление на връзките не поддържа разширението за " +"отдалечено изчиÑтване на грешки." @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: empathy\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=empathy&component=general\n" "POT-Creation-Date: 2009-08-06 04:15+0000\n" -"PO-Revision-Date: 2009-08-09 23:04+0100\n" +"PO-Revision-Date: 2009-08-20 10:59+0100\n" "Last-Translator: denis <denisarnuad@yahoo.fr>\n" "Language-Team: Brenux <brenux@free.fr>\n" "MIME-Version: 1.0\n" @@ -21,7 +21,6 @@ msgid "Empathy IM Client" msgstr "Arval postelerezh prim Empathy" #: ../data/empathy.desktop.in.in.h:2 -#, fuzzy msgid "Send and receive instant messages" msgstr "Kas ha resev posteloù prim" @@ -98,14 +97,12 @@ msgid "Empathy should use the avatar of the contact as the chat window icon" msgstr "" #: ../data/empathy.schemas.in.h:19 -#, fuzzy msgid "Enable WebKit Developer Tools" -msgstr "Gweredekaat binvioù an developer Webkit" +msgstr "Gweredekaat binvioù Webkit an diorrenour" #: ../data/empathy.schemas.in.h:20 -#, fuzzy msgid "Enable popup notifications for new messages" -msgstr "Gweredekaat rebuzadurioù evit kemennadennoù nevez" +msgstr "Gweredekaat rebuzadurioù dre ziflugelloù evit ar c'hemennadennoù nevez" #: ../data/empathy.schemas.in.h:21 msgid "Enable spell checker" @@ -381,7 +378,6 @@ msgstr "Goullo eo ar restr diuzet" #: ../libempathy/empathy-tp-contact-list.c:843 #: ../src/empathy.c:289 -#, fuzzy msgid "People nearby" msgstr "Tud e-kichen" @@ -752,7 +748,7 @@ msgstr "(Kinnig ebet)" #: ../libempathy-gtk/empathy-chat.c:1014 #, fuzzy msgid "Insert Smiley" -msgstr "Enlakaat ur smiley" +msgstr "Enlakaat ur _smiley" #. send button #: ../libempathy-gtk/empathy-chat.c:1032 @@ -772,22 +768,22 @@ msgstr "Digennasket eo %s" #: ../libempathy-gtk/empathy-chat.c:1185 #, fuzzy, c-format msgid "%s was kicked by %s" -msgstr "%s oa bet kicked gant %s" +msgstr "%s oa bet darc'havet gant %s" #: ../libempathy-gtk/empathy-chat.c:1188 #, fuzzy, c-format msgid "%s was kicked" -msgstr "%s oa bet kicked" +msgstr "%s oa bet darc'havet" #: ../libempathy-gtk/empathy-chat.c:1193 #, fussy, c-format msgid "%s was banned by %s" -msgstr "%s oa bet baniset gant %s" +msgstr "%s oa bet argaset gant %s" #: ../libempathy-gtk/empathy-chat.c:1196 #, fuzzy, c-format msgid "%s was banned" -msgstr "%s oa bet baniset" +msgstr "%s oa bet argaset" #: ../libempathy-gtk/empathy-chat.c:1200 #, c-format @@ -920,7 +916,6 @@ msgid "Send file" msgstr "Kas ar restr" #: ../libempathy-gtk/empathy-contact-menu.c:369 -#, fuzzy msgid "Share my desktop" msgstr "Rannañ ma burev" @@ -984,8 +979,9 @@ msgid "Area:" msgstr "Maez :" #: ../libempathy-gtk/empathy-contact-widget.c:1266 +#, fuzzy msgid "Postal Code:" -msgstr "" +msgstr "Kod ar post :" #: ../libempathy-gtk/empathy-contact-widget.c:1268 msgid "Street:" @@ -997,7 +993,7 @@ msgstr "Saverezh :" #: ../libempathy-gtk/empathy-contact-widget.c:1272 msgid "Floor:" -msgstr "" +msgstr "Estaj :" #: ../libempathy-gtk/empathy-contact-widget.c:1274 msgid "Room:" @@ -1567,9 +1563,8 @@ msgid "Don't show the contact list on startup" msgstr "Na diskouez ket roll an darempredoù e-pad al loc'hañ" #: ../src/empathy.c:575 -#, fuzzy msgid "Show the accounts dialog" -msgstr "Diskouez emziviz ar kontoù" +msgstr "Diskouez boestad emziviz ar c'hontoù" #: ../src/empathy.c:587 msgid "- Empathy IM Client" @@ -1792,7 +1787,6 @@ msgid "_Conversation" msgstr "_Kaozadenn" #: ../src/empathy-chat-window.ui.h:9 -#, fuzzy msgid "_Detach Tab" msgstr "_Distagañ an ivinell" @@ -1839,8 +1833,9 @@ msgid "Manage Favorite Rooms" msgstr "" #: ../src/empathy-event-manager.c:321 +#, fuzzy msgid "Incoming call" -msgstr "" +msgstr "Glav" #: ../src/empathy-event-manager.c:324 #, c-format @@ -1883,8 +1878,9 @@ msgid "%s is inviting you to join %s" msgstr "" #: ../src/empathy-event-manager.c:645 +#, fuzzy msgid "_Decline" -msgstr "" +msgstr "_Nac'h" #: ../src/empathy-event-manager.c:650 #: ../src/empathy-new-chatroom-dialog.ui.h:7 @@ -1974,8 +1970,9 @@ msgid "Error receiving \"%s\" from %s" msgstr "" #: ../src/empathy-ft-manager.c:343 +#, fuzzy msgid "Error receiving a file" -msgstr "" +msgstr "Fazi en ur resev ur restr" #: ../src/empathy-ft-manager.c:348 #, c-format @@ -2034,9 +2031,8 @@ msgid "Remaining" msgstr "O chom" #: ../src/empathy-ft-manager.ui.h:1 -#, fuzzy msgid "File Transfers" -msgstr "Treuzkasadoù restroù" +msgstr "Treuzkasadurioù restroù" #: ../src/empathy-ft-manager.ui.h:2 msgid "Remove completed, canceled and failed file transfers from the list" @@ -2097,7 +2093,7 @@ msgstr "" #: ../src/empathy-main-window.c:526 msgid "Certificate expired" -msgstr "" +msgstr "Testeni diamzeret" #: ../src/empathy-main-window.c:529 msgid "Certificate not activated" @@ -2176,9 +2172,8 @@ msgid "_Debug" msgstr "_Diveugañ" #: ../src/empathy-main-window.ui.h:17 -#, fuzzy msgid "_File Transfers" -msgstr "Treuzkasadoù restroù" +msgstr "Treuzkasadurioù _restroù" #: ../src/empathy-main-window.ui.h:19 msgid "_Join..." @@ -2258,9 +2253,8 @@ msgid "Enter the server which hosts the room, or leave it empty if the room is o msgstr "" #: ../src/empathy-new-chatroom-dialog.ui.h:5 -#, fuzzy msgid "Join Room" -msgstr "Kenstagañ ar sal" +msgstr "Mont er sal" #: ../src/empathy-new-chatroom-dialog.ui.h:6 msgid "Room List" @@ -2271,7 +2265,6 @@ msgid "_Room:" msgstr "_Sal :" #: ../src/empathy-preferences.c:147 -#, fuzzy msgid "Message received" msgstr "Kemennadenn resevet" @@ -2284,12 +2277,10 @@ msgid "New conversation" msgstr "Kaozadenn nevez" #: ../src/empathy-preferences.c:150 -#, fuzzy msgid "Contact goes online" msgstr "Un darempred a ya enlinenn" #: ../src/empathy-preferences.c:151 -#, fuzzy msgid "Contact goes offline" msgstr "Un darempred a ya ezlinenn" @@ -2391,8 +2382,9 @@ msgid "Reduced location accuracy means that nothing more precise than your city, msgstr "" #: ../src/empathy-preferences.ui.h:22 +#, fuzzy msgid "Show _smileys as images" -msgstr "" +msgstr "Diskouez _smileys evel skeudennoù" #: ../src/empathy-preferences.ui.h:23 msgid "Show contact _list in rooms" @@ -2,14 +2,14 @@ # Copyright (C) 2003 Free Software Foundation # This file is distributed under the same license as the Gossip package. # -# Jorge González <jorgegonz@svn.gnome.org>, 2007, 200, 2009. +# Jorge González <jorgegonz@svn.gnome.org>, 2007, 2008, 2009. msgid "" msgstr "" "Project-Id-Version: empathy.HEAD\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=empathy&component=general\n" -"POT-Creation-Date: 2009-08-14 16:13+0000\n" -"PO-Revision-Date: 2009-08-15 13:12+0200\n" +"POT-Creation-Date: 2009-08-20 13:44+0000\n" +"PO-Revision-Date: 2009-08-22 11:45+0200\n" "Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n" "Language-Team: Español <gnome-es-list@gnome.org>\n" "MIME-Version: 1.0\n" @@ -54,82 +54,83 @@ msgid "Compact contact list" msgstr "Lista compacta de contactos" #: ../data/empathy.schemas.in.h:6 +#| msgid "NetworkManager should be used" +msgid "Connection managers should be used" +msgstr "Se deberÃan usar gestores de conexión" + +#: ../data/empathy.schemas.in.h:7 msgid "Contact list sort criterium" msgstr "Criterio de ordenamiento de la lista de contactos" -#: ../data/empathy.schemas.in.h:7 +#: ../data/empathy.schemas.in.h:8 msgid "Default directory to select an avatar image from" msgstr "Directorio predeterminado para seleccionar un avatar" -#: ../data/empathy.schemas.in.h:8 +#: ../data/empathy.schemas.in.h:9 msgid "Disable popup notifications when away" msgstr "Desactivar las notificaciones emergentes al estar ausente" -#: ../data/empathy.schemas.in.h:9 +#: ../data/empathy.schemas.in.h:10 msgid "Disable sounds when away" msgstr "Desactivar los sonidos al ausentarse" -#: ../data/empathy.schemas.in.h:10 +#: ../data/empathy.schemas.in.h:11 msgid "Empathy can publish the user's location" msgstr "Empathy puede publicar la ubicación del usuario" -#: ../data/empathy.schemas.in.h:11 +#: ../data/empathy.schemas.in.h:12 msgid "Empathy can use the GPS to guess the location" msgstr "Empathy puede usar el GPS para deducir la ubicación" -#: ../data/empathy.schemas.in.h:12 +#: ../data/empathy.schemas.in.h:13 msgid "Empathy can use the cellular network to guess the location" msgstr "Empathy puede usar la red telefónica móvil para deducir la ubicación" -#: ../data/empathy.schemas.in.h:13 +#: ../data/empathy.schemas.in.h:14 msgid "Empathy can use the network to guess the location" msgstr "Empathy puede usar la red para deducir la ubicación" -#: ../data/empathy.schemas.in.h:14 +#: ../data/empathy.schemas.in.h:15 msgid "Empathy default download folder" msgstr "Carpeta de descargas predeterminada de Epiphany" -#: ../data/empathy.schemas.in.h:15 +#: ../data/empathy.schemas.in.h:16 msgid "Empathy has asked about importing accounts" msgstr "Empathy le ha preguntado acerca de importar cuentas" -#: ../data/empathy.schemas.in.h:16 +#: ../data/empathy.schemas.in.h:17 msgid "Empathy should auto-connect on startup" msgstr "Empathy se deberÃa autoconectar al inicio" -#: ../data/empathy.schemas.in.h:17 +#: ../data/empathy.schemas.in.h:18 msgid "Empathy should reduce the location's accuracy" msgstr "Empathy deberÃa reducir la precisión de la ubicación" -#: ../data/empathy.schemas.in.h:18 +#: ../data/empathy.schemas.in.h:19 msgid "Empathy should use the avatar of the contact as the chat window icon" msgstr "" "Empathy deberÃa usar el avatar del contacto como icono de la ventana de chat" -#: ../data/empathy.schemas.in.h:19 +#: ../data/empathy.schemas.in.h:20 msgid "Enable WebKit Developer Tools" msgstr "Activar las herramientas de desarrollo de WebKit" -#: ../data/empathy.schemas.in.h:20 +#: ../data/empathy.schemas.in.h:21 msgid "Enable popup notifications for new messages" msgstr "Activar notificaciones emergentes para mensajes nuevos" -#: ../data/empathy.schemas.in.h:21 +#: ../data/empathy.schemas.in.h:22 msgid "Enable spell checker" msgstr "Activar revisor ortográfico" -#: ../data/empathy.schemas.in.h:22 +#: ../data/empathy.schemas.in.h:23 msgid "Hide main window" msgstr "Ocultar la ventana principal" -#: ../data/empathy.schemas.in.h:23 +#: ../data/empathy.schemas.in.h:24 msgid "Hide the main window." msgstr "Ocultar la ventana principal." -#: ../data/empathy.schemas.in.h:24 -msgid "NetworkManager should be used" -msgstr "Se deberÃa usar NetworkManager" - #: ../data/empathy.schemas.in.h:25 msgid "Nick completed character" msgstr "Carácter de completado de apodo" @@ -296,19 +297,22 @@ msgstr "" "ventana de chat." #: ../data/empathy.schemas.in.h:60 +#| msgid "" +#| "Whether or not the network manager should be used to automatically " +#| "disconnect/reconnect." msgid "" -"Whether or not the Salut account has been created on the first Empathy run." +"Whether or not connectivity managers should be used to automatically " +"disconnect/reconnect." msgstr "" -"Indica si la cuenta Salut se ha creado cuando ejecutó por primera vez " -"Empathy." +"Indica si se debe usan usar gestores de conectividad para desconectarse/" +"reconectarse automáticamente." #: ../data/empathy.schemas.in.h:61 msgid "" -"Whether or not the network manager should be used to automatically " -"disconnect/reconnect." +"Whether or not the Salut account has been created on the first Empathy run." msgstr "" -"Indica si se debe usar el gestor de la red para desconectarse/reconectarse " -"automáticamente." +"Indica si la cuenta Salut se ha creado cuando ejecutó por primera vez " +"Empathy." #: ../data/empathy.schemas.in.h:62 msgid "" @@ -466,7 +470,7 @@ msgstr "El archivo seleccionado no es un archivo regular" msgid "The selected file is empty" msgstr "El archivo seleccionado está vacÃo" -#: ../libempathy/empathy-tp-contact-list.c:843 ../src/empathy.c:289 +#: ../libempathy/empathy-tp-contact-list.c:843 ../src/empathy.c:290 msgid "People nearby" msgstr "Gente cerca" @@ -840,7 +844,7 @@ msgstr "Insertar emoticono" #. send button #: ../libempathy-gtk/empathy-chat.c:1041 -#: ../libempathy-gtk/empathy-ui-utils.c:1480 +#: ../libempathy-gtk/empathy-ui-utils.c:1483 msgid "_Send" msgstr "E_nviar" @@ -853,27 +857,35 @@ msgstr "_Sugerencias ortográficas" msgid "%s has disconnected" msgstr "%s se ha desconectado" -#: ../libempathy-gtk/empathy-chat.c:1194 +#. translators: reverse the order of these arguments +#. * if the kicked should come before the kicker in your locale. +#. +#: ../libempathy-gtk/empathy-chat.c:1197 #, c-format -msgid "%s was kicked by %s" -msgstr "%s fue expulsado por %s" +#| msgid "%s was kicked by %s" +msgid "%1$s was kicked by %2$s" +msgstr "%2$s expulsó a %1$s" -#: ../libempathy-gtk/empathy-chat.c:1197 +#: ../libempathy-gtk/empathy-chat.c:1200 #, c-format msgid "%s was kicked" msgstr "%s fue expulsado" -#: ../libempathy-gtk/empathy-chat.c:1202 +#. translators: reverse the order of these arguments +#. * if the banned should come before the banner in your locale. +#. +#: ../libempathy-gtk/empathy-chat.c:1208 #, c-format -msgid "%s was banned by %s" -msgstr "%s fue vetado por %s" +#| msgid "%s was banned by %s" +msgid "%1$s was banned by %2$s" +msgstr "%2$s vetó a %1$s" -#: ../libempathy-gtk/empathy-chat.c:1205 +#: ../libempathy-gtk/empathy-chat.c:1211 #, c-format msgid "%s was banned" msgstr "%s fue vetado" -#: ../libempathy-gtk/empathy-chat.c:1209 +#: ../libempathy-gtk/empathy-chat.c:1215 #, c-format msgid "%s has left the room" msgstr "%s ha dejado la sala" @@ -883,25 +895,25 @@ msgstr "%s ha dejado la sala" #. * given by the user living the room. If this poses a problem, #. * please let us know. :-) #. -#: ../libempathy-gtk/empathy-chat.c:1218 +#: ../libempathy-gtk/empathy-chat.c:1224 #, c-format msgid " (%s)" msgstr " (%s)" -#: ../libempathy-gtk/empathy-chat.c:1241 +#: ../libempathy-gtk/empathy-chat.c:1247 #, c-format msgid "%s has joined the room" msgstr "%s ha entrado en la sala" -#: ../libempathy-gtk/empathy-chat.c:1374 ../src/empathy-call-window.c:1274 +#: ../libempathy-gtk/empathy-chat.c:1380 ../src/empathy-call-window.c:1277 msgid "Disconnected" msgstr "Desconectado" -#: ../libempathy-gtk/empathy-chat.c:1809 +#: ../libempathy-gtk/empathy-chat.c:1815 msgid "Connected" msgstr "Conectado" -#: ../libempathy-gtk/empathy-chat.c:1859 +#: ../libempathy-gtk/empathy-chat.c:1865 #: ../libempathy-gtk/empathy-log-window.c:502 msgid "Conversation" msgstr "Conversación" @@ -1295,34 +1307,34 @@ msgstr "Conversación nueva" #. COL_DISPLAY_MARKUP #. COL_STATUS_CUSTOMISABLE #. COL_TYPE -#: ../libempathy-gtk/empathy-presence-chooser.c:172 -#: ../libempathy-gtk/empathy-presence-chooser.c:208 +#: ../libempathy-gtk/empathy-presence-chooser.c:176 +#: ../libempathy-gtk/empathy-presence-chooser.c:212 msgid "Custom Message..." msgstr "Mensaje personalizado…" -#: ../libempathy-gtk/empathy-presence-chooser.c:225 -#: ../libempathy-gtk/empathy-presence-chooser.c:227 +#: ../libempathy-gtk/empathy-presence-chooser.c:229 +#: ../libempathy-gtk/empathy-presence-chooser.c:231 msgid "Edit Custom Messages..." msgstr "Editar mensajes personalizados…" -#: ../libempathy-gtk/empathy-presence-chooser.c:326 +#: ../libempathy-gtk/empathy-presence-chooser.c:330 msgid "Click to remove this status as a favorite" msgstr "Pulse pare eliminar este estado de los favoritos" -#: ../libempathy-gtk/empathy-presence-chooser.c:335 +#: ../libempathy-gtk/empathy-presence-chooser.c:339 msgid "Click to make this status a favorite" msgstr "Pulse para hacer este estado uno favorito" -#: ../libempathy-gtk/empathy-presence-chooser.c:369 +#: ../libempathy-gtk/empathy-presence-chooser.c:373 msgid "Set status" msgstr "Establecer estado" -#: ../libempathy-gtk/empathy-presence-chooser.c:782 +#: ../libempathy-gtk/empathy-presence-chooser.c:794 msgid "Set your presence and current status" msgstr "Establecer su presencia y estado actual" #. Custom messages -#: ../libempathy-gtk/empathy-presence-chooser.c:1017 +#: ../libempathy-gtk/empathy-presence-chooser.c:1043 msgid "Custom messages..." msgstr "Mensajes personalizados…" @@ -1382,14 +1394,6 @@ msgstr "Añadir esta_do guardado" msgid "Saved Presets" msgstr "Estados guardados" -#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:3 -msgid "gtk-add" -msgstr "gtk-add" - -#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:4 -msgid "gtk-remove" -msgstr "gtk-remove" - #: ../libempathy-gtk/empathy-theme-manager.c:67 msgid "Classic" msgstr "Clásico" @@ -1406,15 +1410,15 @@ msgstr "Limpio" msgid "Blue" msgstr "Azul" -#: ../libempathy-gtk/empathy-ui-utils.c:1382 +#: ../libempathy-gtk/empathy-ui-utils.c:1385 msgid "Unable to open URI" msgstr "No se pudo abrir el URI" -#: ../libempathy-gtk/empathy-ui-utils.c:1472 +#: ../libempathy-gtk/empathy-ui-utils.c:1475 msgid "Select a file" msgstr "Seleccionar un archivo" -#: ../libempathy-gtk/empathy-ui-utils.c:1532 +#: ../libempathy-gtk/empathy-ui-utils.c:1535 msgid "Select a destination" msgstr "Seleccionar un destino" @@ -1639,19 +1643,19 @@ msgstr "Presencia" msgid "Set your own presence" msgstr "Establezca su propia presencia" -#: ../src/empathy.c:567 +#: ../src/empathy.c:569 msgid "Don't connect on startup" msgstr "No conectarse automáticamente al inicio" -#: ../src/empathy.c:571 +#: ../src/empathy.c:573 msgid "Don't show the contact list on startup" msgstr "No mostrar la lista de contactos al inicio" -#: ../src/empathy.c:575 +#: ../src/empathy.c:577 msgid "Show the accounts dialog" msgstr "Mostrar el diálogo de las cuentas" -#: ../src/empathy.c:587 +#: ../src/empathy.c:589 msgid "- Empathy IM Client" msgstr "- Cliente de mensajerÃa instantánea Empathy" @@ -1817,17 +1821,20 @@ msgstr "Entrada de sonido" msgid "Video input" msgstr "Entrada de vÃdeo" -#: ../src/empathy-call-window.c:866 +#. translators: Call is a noun and %s is the contact name. This string is used +#. * in the window title +#: ../src/empathy-call-window.c:868 #, c-format msgid "Call with %s" msgstr "Llamar con %s" -#: ../src/empathy-call-window.c:935 +#. translators: Call is a noun. This string is used in the window title +#: ../src/empathy-call-window.c:938 msgid "Call" msgstr "Llamar" #. Translators: number of minutes:seconds the caller has been connected -#: ../src/empathy-call-window.c:1387 +#: ../src/empathy-call-window.c:1390 #, c-format msgid "Connected — %d:%02dm" msgstr "Conectado — %d:%02dm" @@ -2577,10 +2584,6 @@ msgstr "" "Se le ha ofrecido una invitación para el servicio %s pero no tiene la " "aplicación necesaria para manejarla" -#: ../src/empathy-call-window-fullscreen.ui.h:1 -msgid "gtk-leave-fullscreen" -msgstr "gtk-leave-fullscreen" - #: ../src/empathy-map-view.ui.h:1 msgid "Contact Map View" msgstr "Vista del mapa de contactos" @@ -2650,6 +2653,15 @@ msgstr "" "El gestor de conexiones seleccionado no soporta la extensión de depuración " "remota." +#~ msgid "gtk-add" +#~ msgstr "gtk-add" + +#~ msgid "gtk-remove" +#~ msgstr "gtk-remove" + +#~ msgid "gtk-leave-fullscreen" +#~ msgstr "gtk-leave-fullscreen" + #~ msgid "Empathy Instant Messenger" #~ msgstr "MensajerÃa instantánea Empathy" @@ -11,8 +11,8 @@ msgstr "" "Project-Id-Version: empathy master\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=empathy&component=general\n" -"POT-Creation-Date: 2009-08-12 19:28+0000\n" -"PO-Revision-Date: 2009-08-16 17:49+0300\n" +"POT-Creation-Date: 2009-08-20 13:44+0000\n" +"PO-Revision-Date: 2009-08-21 15:26+0300\n" "Last-Translator: Ivar Smolin <okul@linux.ee>\n" "Language-Team: Estonian <et@li.org>\n" "MIME-Version: 1.0\n" @@ -47,6 +47,9 @@ msgstr "" msgid "Compact contact list" msgstr "Kompaktne sõbranimekiri" +msgid "Connection managers should be used" +msgstr "Kas peab ühenduste haldureid kasutama" + msgid "Contact list sort criterium" msgstr "Kontaktide nimekirja sortimise alus" @@ -101,9 +104,6 @@ msgstr "Peida peaaken" msgid "Hide the main window." msgstr "Peaakna peitmine." -msgid "NetworkManager should be used" -msgstr "Tuleks kasutada NetworkManager-i" - msgid "Nick completed character" msgstr "Nimele lisamise märk" @@ -221,14 +221,15 @@ msgid "" msgstr "Kas Empathy peaks kasutama kontakti avatari vestlusakna ikoonina." msgid "" -"Whether or not the Salut account has been created on the first Empathy run." -msgstr "Kas Salut konto loodi Empathy esimesel käivitumisel." - -msgid "" -"Whether or not the network manager should be used to automatically " +"Whether or not connectivity managers should be used to automatically " "disconnect/reconnect." msgstr "" -"Kas võrguhaldurit tuleks kasutada automaatseks lahti- või taasühendumiseks." +"Kas automaatseks lahti- või taasühendumiseks tuleks kasutada ühenduste " +"haldurit või mitte." + +msgid "" +"Whether or not the Salut account has been created on the first Empathy run." +msgstr "Kas Salut konto loodi Empathy esimesel käivitumisel." msgid "" "Whether or not to check words typed against the languages you want to check " @@ -609,21 +610,27 @@ msgstr "_Õigekirja soovitused" msgid "%s has disconnected" msgstr "%s lahkus" +#. translators: reverse the order of these arguments +#. * if the kicked should come before the kicker in your locale. +#. #, c-format -msgid "%s was kicked by %s" -msgstr "%s visati välja kasutaja %s poolt" +msgid "%1$s was kicked by %2$s" +msgstr "%1$s visati kasutaja %2$s poolt välja" #, c-format msgid "%s was kicked" msgstr "%s visati välja" +#. translators: reverse the order of these arguments +#. * if the banned should come before the banner in your locale. +#. #, c-format -msgid "%s was banned by %s" -msgstr "%s sai kasutajalt %s bänni" +msgid "%1$s was banned by %2$s" +msgstr "%1$s tõrjuti kasutaja %2$s poolt" #, c-format msgid "%s was banned" -msgstr "%s sai bänni" +msgstr "%s on nüüd tõrjutud" #, c-format msgid "%s has left the room" @@ -1002,12 +1009,6 @@ msgstr "_Uue oleku lisamine" msgid "Saved Presets" msgstr "Salvestatud olekud" -msgid "gtk-add" -msgstr "_Lisa" - -msgid "gtk-remove" -msgstr "Eemalda" - msgid "Classic" msgstr "Klassikaline" @@ -1304,10 +1305,13 @@ msgstr "Helisisend" msgid "Video input" msgstr "Videosisend" +#. translators: Call is a noun and %s is the contact name. This string is used +#. * in the window title #, c-format msgid "Call with %s" msgstr "Kõne kasutajaga %s" +#. translators: Call is a noun. This string is used in the window title msgid "Call" msgstr "Kõne" @@ -1890,9 +1894,6 @@ msgstr "" "Teenuse %s jaoks pakuti kutset, kuid sul pole selle kasutamiseks vajalikku " "rakendust" -msgid "gtk-leave-fullscreen" -msgstr "gtk-leave-fullscreen" - msgid "Contact Map View" msgstr "Kontaktide kaardivaade" @@ -9,6 +9,7 @@ msgstr "" "PO-Revision-Date: 2007-08-25 20:40+CET\n" "Last-Translator: Senko Rasic <senko.rasic@collabora.co.uk>\n" "MIME-Version: 1.0\n" +"Language-Team: Croatian\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" @@ -535,7 +536,7 @@ msgstr "Soba za razgovor" #, c-format msgid "Conversation" msgid_plural "Conversations (%d)" -msgstr[0] "Razgovor" +msgstr[0] "Razgovor (%d)" msgstr[1] "Razgovora (%d)" msgstr[2] "Razgovora (%d)" @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: empathy 0.24.x\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-08-03 00:44+0200\n" -"PO-Revision-Date: 2009-08-03 00:48+0200\n" +"POT-Creation-Date: 2009-08-21 14:47+0200\n" +"PO-Revision-Date: 2009-08-21 15:46+0200\n" "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n" "Language-Team: Norwegian <i18n-nb@lister.ping.uio.no>\n" "MIME-Version: 1.0\n" @@ -51,84 +51,85 @@ msgid "Compact contact list" msgstr "Kompakt kontaktliste" #: ../data/empathy.schemas.in.h:6 +#, fuzzy +msgid "Connection managers should be used" +msgstr "NetworkManager skal brukes" + +#: ../data/empathy.schemas.in.h:7 msgid "Contact list sort criterium" msgstr "Sorteringskriterier for kontaktliste" -#: ../data/empathy.schemas.in.h:7 +#: ../data/empathy.schemas.in.h:8 msgid "Default directory to select an avatar image from" msgstr "Forvalgt mappe for personbilde" -#: ../data/empathy.schemas.in.h:8 +#: ../data/empathy.schemas.in.h:9 msgid "Disable popup notifications when away" msgstr "SlÃ¥ av varsling nÃ¥r du er borte" -#: ../data/empathy.schemas.in.h:9 +#: ../data/empathy.schemas.in.h:10 msgid "Disable sounds when away" msgstr "SlÃ¥ av lyder nÃ¥r du er borte" -#: ../data/empathy.schemas.in.h:10 +#: ../data/empathy.schemas.in.h:11 msgid "Empathy can publish the user's location" msgstr "Empathy kan publisere brukers lokasjon" -#: ../data/empathy.schemas.in.h:11 +#: ../data/empathy.schemas.in.h:12 msgid "Empathy can use the GPS to guess the location" msgstr "Empathy kan bruke GPS til Ã¥ gjette lokasjonen" -#: ../data/empathy.schemas.in.h:12 +#: ../data/empathy.schemas.in.h:13 msgid "Empathy can use the cellular network to guess the location" msgstr "" -#: ../data/empathy.schemas.in.h:13 +#: ../data/empathy.schemas.in.h:14 msgid "Empathy can use the network to guess the location" msgstr "" -#: ../data/empathy.schemas.in.h:14 +#: ../data/empathy.schemas.in.h:15 msgid "Empathy default download folder" msgstr "Forvalgt nedlastingsmappe for Empathy" -#: ../data/empathy.schemas.in.h:15 +#: ../data/empathy.schemas.in.h:16 msgid "Empathy has asked about importing accounts" msgstr "Empathy har spurt om import av kontoer" -#: ../data/empathy.schemas.in.h:16 +#: ../data/empathy.schemas.in.h:17 msgid "Empathy should auto-connect on startup" msgstr "Empathy skal koble til automatisk ved oppstart" -#: ../data/empathy.schemas.in.h:17 +#: ../data/empathy.schemas.in.h:18 #, fuzzy msgid "Empathy should reduce the location's accuracy" msgstr "Empathy skal koble til automatisk ved oppstart" -#: ../data/empathy.schemas.in.h:18 +#: ../data/empathy.schemas.in.h:19 msgid "Empathy should use the avatar of the contact as the chat window icon" msgstr "" "Empathy skal bruke personbildet for kontakten som ikon for pratevinduet" -#: ../data/empathy.schemas.in.h:19 +#: ../data/empathy.schemas.in.h:20 msgid "Enable WebKit Developer Tools" msgstr "" -#: ../data/empathy.schemas.in.h:20 +#: ../data/empathy.schemas.in.h:21 #, fuzzy msgid "Enable popup notifications for new messages" msgstr "_Aktiver varsling med lyder" -#: ../data/empathy.schemas.in.h:21 +#: ../data/empathy.schemas.in.h:22 msgid "Enable spell checker" msgstr "Bruk stavekontroll" -#: ../data/empathy.schemas.in.h:22 +#: ../data/empathy.schemas.in.h:23 msgid "Hide main window" msgstr "Skjul hovedvinduet" -#: ../data/empathy.schemas.in.h:23 +#: ../data/empathy.schemas.in.h:24 msgid "Hide the main window." msgstr "Skjul hovedvinduet." -#: ../data/empathy.schemas.in.h:24 -msgid "NetworkManager should be used" -msgstr "NetworkManager skal brukes" - #: ../data/empathy.schemas.in.h:25 msgid "Nick completed character" msgstr "Tegn for fullføring av kallenavn" @@ -294,15 +295,16 @@ msgstr "" "Om Empathy skal bruke personbilde for kontakten som ikon for pratevinduet." #: ../data/empathy.schemas.in.h:60 +#, fuzzy msgid "" -"Whether or not the Salut account has been created on the first Empathy run." -msgstr "Om Salut-konto ble opprettet første gang Empathy ble kjørt." +"Whether or not connectivity managers should be used to automatically " +"disconnect/reconnect." +msgstr "Om NetworkManager skal brukes til Ã¥ koble til/fra automatisk." #: ../data/empathy.schemas.in.h:61 msgid "" -"Whether or not the network manager should be used to automatically " -"disconnect/reconnect." -msgstr "Om NetworkManager skal brukes til Ã¥ koble til/fra automatisk." +"Whether or not the Salut account has been created on the first Empathy run." +msgstr "Om Salut-konto ble opprettet første gang Empathy ble kjørt." #: ../data/empathy.schemas.in.h:62 msgid "" @@ -438,17 +440,17 @@ msgstr "" #: ../libempathy/empathy-ft-handler.c:1098 msgid "File transfer not supported by remote contact" -msgstr "" +msgstr "Filoverføring støttes ikke av ekstern kontakt" #: ../libempathy/empathy-ft-handler.c:1156 msgid "The selected file is not a regular file" -msgstr "" +msgstr "Valgt fil er ikke en vanlig fil" #: ../libempathy/empathy-ft-handler.c:1165 msgid "The selected file is empty" -msgstr "" +msgstr "Valgt fil er tom" -#: ../libempathy/empathy-tp-contact-list.c:843 ../src/empathy.c:289 +#: ../libempathy/empathy-tp-contact-list.c:843 ../src/empathy.c:290 msgid "People nearby" msgstr "Personer i nærheten" @@ -508,47 +510,47 @@ msgstr "Frakoblet" #, c-format msgid "%d second ago" msgid_plural "%d seconds ago" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d sekund siden" +msgstr[1] "%d sekunder siden" #: ../libempathy/empathy-time.c:142 #, c-format msgid "%d minute ago" msgid_plural "%d minutes ago" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d minutt siden" +msgstr[1] "%d minutter siden" #: ../libempathy/empathy-time.c:147 #, c-format msgid "%d hour ago" msgid_plural "%d hours ago" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d time siden" +msgstr[1] "%d timer siden" #: ../libempathy/empathy-time.c:152 #, c-format msgid "%d day ago" msgid_plural "%d days ago" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d dag siden" +msgstr[1] "%d dager siden" #: ../libempathy/empathy-time.c:157 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d uke siden" +msgstr[1] "%d uker siden" #: ../libempathy/empathy-time.c:162 #, c-format msgid "%d month ago" msgid_plural "%d months ago" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d mÃ¥ned siden" +msgstr[1] "%d mÃ¥neder siden" #: ../libempathy/empathy-time.c:167 msgid "in the future" -msgstr "" +msgstr "i fremtiden" #: ../libempathy-gtk/empathy-account-chooser.c:426 msgid "All" @@ -770,92 +772,98 @@ msgstr "Klikk for Ã¥ forstørre" msgid "Failed to reconnect this chat" msgstr "" -#: ../libempathy-gtk/empathy-chat.c:404 +#: ../libempathy-gtk/empathy-chat.c:412 msgid "Unsupported command" -msgstr "" +msgstr "Ikke støttet kommando" -#: ../libempathy-gtk/empathy-chat.c:539 +#: ../libempathy-gtk/empathy-chat.c:548 msgid "offline" msgstr "frakoblet" -#: ../libempathy-gtk/empathy-chat.c:542 +#: ../libempathy-gtk/empathy-chat.c:551 msgid "invalid contact" msgstr "ugyldig kontakt" -#: ../libempathy-gtk/empathy-chat.c:545 +#: ../libempathy-gtk/empathy-chat.c:554 msgid "permission denied" msgstr "tilgang nektet" -#: ../libempathy-gtk/empathy-chat.c:548 +#: ../libempathy-gtk/empathy-chat.c:557 msgid "too long message" msgstr "meldingen er for lang" -#: ../libempathy-gtk/empathy-chat.c:551 +#: ../libempathy-gtk/empathy-chat.c:560 msgid "not implemented" msgstr "ikke implementert" -#: ../libempathy-gtk/empathy-chat.c:554 +#: ../libempathy-gtk/empathy-chat.c:563 msgid "unknown" msgstr "ukjent" -#: ../libempathy-gtk/empathy-chat.c:558 +#: ../libempathy-gtk/empathy-chat.c:567 #, c-format msgid "Error sending message '%s': %s" msgstr "Feil ved sending av melding «%s»: %s" -#: ../libempathy-gtk/empathy-chat.c:588 +#: ../libempathy-gtk/empathy-chat.c:597 #, c-format msgid "Topic set to: %s" msgstr "Emnet er satt til: %s" -#: ../libempathy-gtk/empathy-chat.c:590 +#: ../libempathy-gtk/empathy-chat.c:599 msgid "No topic defined" msgstr "Emne ikke definert" -#: ../libempathy-gtk/empathy-chat.c:960 +#: ../libempathy-gtk/empathy-chat.c:969 msgid "(No Suggestions)" -msgstr "" +msgstr "(Ingen forslag)" -#: ../libempathy-gtk/empathy-chat.c:1014 +#: ../libempathy-gtk/empathy-chat.c:1023 msgid "Insert Smiley" msgstr "Sett inn smilefjes" #. send button -#: ../libempathy-gtk/empathy-chat.c:1032 -#: ../libempathy-gtk/empathy-ui-utils.c:1480 +#: ../libempathy-gtk/empathy-chat.c:1041 +#: ../libempathy-gtk/empathy-ui-utils.c:1483 msgid "_Send" msgstr "_Send" -#: ../libempathy-gtk/empathy-chat.c:1066 +#: ../libempathy-gtk/empathy-chat.c:1075 msgid "_Spelling Suggestions" msgstr "_Staveforslag" -#: ../libempathy-gtk/empathy-chat.c:1181 +#: ../libempathy-gtk/empathy-chat.c:1190 #, c-format msgid "%s has disconnected" msgstr "%s har koblet fra" -#: ../libempathy-gtk/empathy-chat.c:1185 +#. translators: reverse the order of these arguments +#. * if the kicked should come before the kicker in your locale. +#. +#: ../libempathy-gtk/empathy-chat.c:1197 #, c-format -msgid "%s was kicked by %s" -msgstr "%s ble sparket av %s" +msgid "%1$s was kicked by %2$s" +msgstr "%1$s ble sparket av %2$s" -#: ../libempathy-gtk/empathy-chat.c:1188 +#: ../libempathy-gtk/empathy-chat.c:1200 #, c-format msgid "%s was kicked" msgstr "%s ble sparket" -#: ../libempathy-gtk/empathy-chat.c:1193 +#. translators: reverse the order of these arguments +#. * if the banned should come before the banner in your locale. +#. +#: ../libempathy-gtk/empathy-chat.c:1208 #, c-format -msgid "%s was banned by %s" -msgstr "" +msgid "%1$s was banned by %2$s" +msgstr "%1$s ble bannlyst av %2$s" -#: ../libempathy-gtk/empathy-chat.c:1196 +#: ../libempathy-gtk/empathy-chat.c:1211 #, c-format msgid "%s was banned" -msgstr "" +msgstr "%s ble bannlyst" -#: ../libempathy-gtk/empathy-chat.c:1200 +#: ../libempathy-gtk/empathy-chat.c:1215 #, c-format msgid "%s has left the room" msgstr "%s har forlatt rommet" @@ -865,25 +873,25 @@ msgstr "%s har forlatt rommet" #. * given by the user living the room. If this poses a problem, #. * please let us know. :-) #. -#: ../libempathy-gtk/empathy-chat.c:1209 +#: ../libempathy-gtk/empathy-chat.c:1224 #, c-format msgid " (%s)" -msgstr "" +msgstr " (%s)" -#: ../libempathy-gtk/empathy-chat.c:1232 +#: ../libempathy-gtk/empathy-chat.c:1247 #, c-format msgid "%s has joined the room" msgstr "%s har blitt med i rommet" -#: ../libempathy-gtk/empathy-chat.c:1365 ../src/empathy-call-window.c:1225 +#: ../libempathy-gtk/empathy-chat.c:1380 ../src/empathy-call-window.c:1277 msgid "Disconnected" msgstr "Koblet fra" -#: ../libempathy-gtk/empathy-chat.c:1800 +#: ../libempathy-gtk/empathy-chat.c:1815 msgid "Connected" msgstr "Koblet til" -#: ../libempathy-gtk/empathy-chat.c:1850 +#: ../libempathy-gtk/empathy-chat.c:1865 #: ../libempathy-gtk/empathy-log-window.c:502 msgid "Conversation" msgstr "Samtale" @@ -931,27 +939,27 @@ msgstr "A_vgjør senere" msgid "Subscription Request" msgstr "Abonnementsforespørsel" -#: ../libempathy-gtk/empathy-contact-list-view.c:1404 +#: ../libempathy-gtk/empathy-contact-list-view.c:1412 #, c-format msgid "Do you really want to remove the group '%s'?" msgstr "Vil du virkelig fjerne gruppen «%s»?" -#: ../libempathy-gtk/empathy-contact-list-view.c:1406 +#: ../libempathy-gtk/empathy-contact-list-view.c:1414 msgid "Removing group" msgstr "Fjerner gruppe" #. Remove -#: ../libempathy-gtk/empathy-contact-list-view.c:1453 -#: ../libempathy-gtk/empathy-contact-list-view.c:1530 +#: ../libempathy-gtk/empathy-contact-list-view.c:1461 +#: ../libempathy-gtk/empathy-contact-list-view.c:1538 msgid "_Remove" msgstr "Fje_rn" -#: ../libempathy-gtk/empathy-contact-list-view.c:1483 +#: ../libempathy-gtk/empathy-contact-list-view.c:1491 #, c-format msgid "Do you really want to remove the contact '%s'?" msgstr "Vil du virkelig fjerne kontakten «%s»?" -#: ../libempathy-gtk/empathy-contact-list-view.c:1485 +#: ../libempathy-gtk/empathy-contact-list-view.c:1493 msgid "Removing contact" msgstr "Fjerner kontakt" @@ -985,7 +993,7 @@ msgstr "Send fil" #: ../libempathy-gtk/empathy-contact-menu.c:369 msgid "Share my desktop" -msgstr "" +msgstr "Del mitt skrivebord" #: ../libempathy-gtk/empathy-contact-menu.c:397 msgid "Infor_mation" @@ -1016,120 +1024,120 @@ msgstr "Lagre personbilder" msgid "Unable to save avatar" msgstr "Kan ikke lagre personbilde" -#: ../libempathy-gtk/empathy-contact-widget.c:996 +#: ../libempathy-gtk/empathy-contact-widget.c:1000 msgid "Select" msgstr "Velg" -#: ../libempathy-gtk/empathy-contact-widget.c:1005 +#: ../libempathy-gtk/empathy-contact-widget.c:1009 #: ../src/empathy-main-window.c:1023 msgid "Group" msgstr "Gruppe" -#: ../libempathy-gtk/empathy-contact-widget.c:1256 +#: ../libempathy-gtk/empathy-contact-widget.c:1260 msgid "Country ISO Code:" msgstr "ISO-kode for land:" -#: ../libempathy-gtk/empathy-contact-widget.c:1258 +#: ../libempathy-gtk/empathy-contact-widget.c:1262 msgid "Country:" msgstr "Land:" -#: ../libempathy-gtk/empathy-contact-widget.c:1260 +#: ../libempathy-gtk/empathy-contact-widget.c:1264 msgid "State:" msgstr "Tilstand:" -#: ../libempathy-gtk/empathy-contact-widget.c:1262 +#: ../libempathy-gtk/empathy-contact-widget.c:1266 msgid "City:" msgstr "By:" -#: ../libempathy-gtk/empathy-contact-widget.c:1264 +#: ../libempathy-gtk/empathy-contact-widget.c:1268 msgid "Area:" msgstr "OmrÃ¥de:" -#: ../libempathy-gtk/empathy-contact-widget.c:1266 +#: ../libempathy-gtk/empathy-contact-widget.c:1270 msgid "Postal Code:" msgstr "Postkode:" -#: ../libempathy-gtk/empathy-contact-widget.c:1268 +#: ../libempathy-gtk/empathy-contact-widget.c:1272 msgid "Street:" msgstr "Gate:" -#: ../libempathy-gtk/empathy-contact-widget.c:1270 +#: ../libempathy-gtk/empathy-contact-widget.c:1274 msgid "Building:" msgstr "Bygning:" -#: ../libempathy-gtk/empathy-contact-widget.c:1272 +#: ../libempathy-gtk/empathy-contact-widget.c:1276 msgid "Floor:" msgstr "Etasje:" -#: ../libempathy-gtk/empathy-contact-widget.c:1274 +#: ../libempathy-gtk/empathy-contact-widget.c:1278 msgid "Room:" msgstr "Rom:" -#: ../libempathy-gtk/empathy-contact-widget.c:1276 +#: ../libempathy-gtk/empathy-contact-widget.c:1280 msgid "Text:" msgstr "Tekst:" -#: ../libempathy-gtk/empathy-contact-widget.c:1278 +#: ../libempathy-gtk/empathy-contact-widget.c:1282 msgid "Description:" msgstr "Beskrivelse:" -#: ../libempathy-gtk/empathy-contact-widget.c:1280 +#: ../libempathy-gtk/empathy-contact-widget.c:1284 msgid "URI:" msgstr "URI:" -#: ../libempathy-gtk/empathy-contact-widget.c:1282 +#: ../libempathy-gtk/empathy-contact-widget.c:1286 msgid "Accuracy Level:" -msgstr "" +msgstr "NøyaktighetsnivÃ¥:" -#: ../libempathy-gtk/empathy-contact-widget.c:1284 +#: ../libempathy-gtk/empathy-contact-widget.c:1288 msgid "Error:" msgstr "Feil:" -#: ../libempathy-gtk/empathy-contact-widget.c:1286 +#: ../libempathy-gtk/empathy-contact-widget.c:1290 msgid "Vertical Error (meters):" msgstr "Vertikal feil (meter):" -#: ../libempathy-gtk/empathy-contact-widget.c:1288 +#: ../libempathy-gtk/empathy-contact-widget.c:1292 msgid "Horizontal Error (meters):" msgstr "Horisontal feil (meter):" -#: ../libempathy-gtk/empathy-contact-widget.c:1290 +#: ../libempathy-gtk/empathy-contact-widget.c:1294 msgid "Speed:" msgstr "Hastighet:" -#: ../libempathy-gtk/empathy-contact-widget.c:1292 +#: ../libempathy-gtk/empathy-contact-widget.c:1296 msgid "Bearing:" msgstr "Retning:" -#: ../libempathy-gtk/empathy-contact-widget.c:1294 +#: ../libempathy-gtk/empathy-contact-widget.c:1298 msgid "Climb Speed:" -msgstr "" +msgstr "Klatrehastighet:" -#: ../libempathy-gtk/empathy-contact-widget.c:1296 +#: ../libempathy-gtk/empathy-contact-widget.c:1300 msgid "Last Updated on:" msgstr "Sist oppdatert:" -#: ../libempathy-gtk/empathy-contact-widget.c:1298 +#: ../libempathy-gtk/empathy-contact-widget.c:1302 msgid "Longitude:" msgstr "Lengdegrad:" -#: ../libempathy-gtk/empathy-contact-widget.c:1300 +#: ../libempathy-gtk/empathy-contact-widget.c:1304 msgid "Latitude:" msgstr "Breddegrad:" -#: ../libempathy-gtk/empathy-contact-widget.c:1302 +#: ../libempathy-gtk/empathy-contact-widget.c:1306 msgid "Altitude:" msgstr "Høyde:" -#: ../libempathy-gtk/empathy-contact-widget.c:1349 +#: ../libempathy-gtk/empathy-contact-widget.c:1353 msgid "<b>Location</b>" msgstr "<b>Lokasjon</b>" -#: ../libempathy-gtk/empathy-contact-widget.c:1362 +#: ../libempathy-gtk/empathy-contact-widget.c:1366 msgid "<b>Location</b>, " msgstr "<b>Lokasjon</b>, " -#: ../libempathy-gtk/empathy-contact-widget.c:1412 +#: ../libempathy-gtk/empathy-contact-widget.c:1416 msgid "%B %e, %Y at %R UTC" msgstr "%B %e, %Y, %R UTC" @@ -1277,34 +1285,34 @@ msgstr "Ny samtale" #. COL_DISPLAY_MARKUP #. COL_STATUS_CUSTOMISABLE #. COL_TYPE -#: ../libempathy-gtk/empathy-presence-chooser.c:172 -#: ../libempathy-gtk/empathy-presence-chooser.c:208 +#: ../libempathy-gtk/empathy-presence-chooser.c:176 +#: ../libempathy-gtk/empathy-presence-chooser.c:212 msgid "Custom Message..." msgstr "Egendefinert melding..." -#: ../libempathy-gtk/empathy-presence-chooser.c:225 -#: ../libempathy-gtk/empathy-presence-chooser.c:227 +#: ../libempathy-gtk/empathy-presence-chooser.c:229 +#: ../libempathy-gtk/empathy-presence-chooser.c:231 msgid "Edit Custom Messages..." msgstr "Rediger egendefinerte meldinger..." -#: ../libempathy-gtk/empathy-presence-chooser.c:326 +#: ../libempathy-gtk/empathy-presence-chooser.c:330 msgid "Click to remove this status as a favorite" msgstr "" -#: ../libempathy-gtk/empathy-presence-chooser.c:335 +#: ../libempathy-gtk/empathy-presence-chooser.c:339 msgid "Click to make this status a favorite" msgstr "" -#: ../libempathy-gtk/empathy-presence-chooser.c:369 +#: ../libempathy-gtk/empathy-presence-chooser.c:373 msgid "Set status" msgstr "Sett status" -#: ../libempathy-gtk/empathy-presence-chooser.c:782 +#: ../libempathy-gtk/empathy-presence-chooser.c:794 msgid "Set your presence and current status" msgstr "" #. Custom messages -#: ../libempathy-gtk/empathy-presence-chooser.c:1017 +#: ../libempathy-gtk/empathy-presence-chooser.c:1043 msgid "Custom messages..." msgstr "Egendefinerte meldinger ..." @@ -1358,20 +1366,12 @@ msgstr "Rediger egendefinerte meldinger" #: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:1 msgid "Add _New Preset" -msgstr "" +msgstr "Legg til _ny forhÃ¥ndsverdi" #: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:2 msgid "Saved Presets" msgstr "Lagrede forhÃ¥ndsverdier" -#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:3 -msgid "gtk-add" -msgstr "" - -#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:4 -msgid "gtk-remove" -msgstr "" - #: ../libempathy-gtk/empathy-theme-manager.c:67 msgid "Classic" msgstr "Klassisk" @@ -1388,15 +1388,15 @@ msgstr "Tøm" msgid "Blue" msgstr "BlÃ¥" -#: ../libempathy-gtk/empathy-ui-utils.c:1382 +#: ../libempathy-gtk/empathy-ui-utils.c:1385 msgid "Unable to open URI" msgstr "Kan ikke Ã¥pne URI" -#: ../libempathy-gtk/empathy-ui-utils.c:1472 +#: ../libempathy-gtk/empathy-ui-utils.c:1475 msgid "Select a file" msgstr "Velg en fil" -#: ../libempathy-gtk/empathy-ui-utils.c:1530 +#: ../libempathy-gtk/empathy-ui-utils.c:1535 msgid "Select a destination" msgstr "Velg en destinasjon" @@ -1620,19 +1620,19 @@ msgstr "Tilstedeværelse" msgid "Set your own presence" msgstr "Velg din egen tilstedeværelse" -#: ../src/empathy.c:567 +#: ../src/empathy.c:569 msgid "Don't connect on startup" msgstr "Ikke koble til ved oppstart" -#: ../src/empathy.c:571 +#: ../src/empathy.c:573 msgid "Don't show the contact list on startup" msgstr "Ikke vis kontaktlisten ved oppstart" -#: ../src/empathy.c:575 +#: ../src/empathy.c:577 msgid "Show the accounts dialog" msgstr "Vis kontovinduet" -#: ../src/empathy.c:587 +#: ../src/empathy.c:589 msgid "- Empathy IM Client" msgstr "- Empathy lynmeldingsprogram" @@ -1758,60 +1758,62 @@ msgstr "_Legg til..." #: ../src/empathy-accounts-dialog.ui.h:11 msgid "_Create a new account" -msgstr "" +msgstr "_Lag en ny konto" #: ../src/empathy-accounts-dialog.ui.h:12 -#, fuzzy msgid "_Reuse an existing account" -msgstr "Vis og rediger kontoer" +msgstr "Gjenb_ruk en eksisterende konto" -#: ../src/empathy-call-window.c:420 +#: ../src/empathy-call-window.c:426 msgid "Contrast" msgstr "Kontrast" -#: ../src/empathy-call-window.c:423 +#: ../src/empathy-call-window.c:429 msgid "Brightness" msgstr "Lysstyrke" -#: ../src/empathy-call-window.c:426 +#: ../src/empathy-call-window.c:432 msgid "Gamma" msgstr "Gamma" -#: ../src/empathy-call-window.c:531 +#: ../src/empathy-call-window.c:539 msgid "Volume" msgstr "Volum" -#: ../src/empathy-call-window.c:662 +#: ../src/empathy-call-window.c:671 msgid "Connecting..." msgstr "Kobler til..." -#: ../src/empathy-call-window.c:746 +#: ../src/empathy-call-window.c:778 msgid "_Sidebar" msgstr "_Sidelinje" -#: ../src/empathy-call-window.c:765 +#: ../src/empathy-call-window.c:797 msgid "Dialpad" msgstr "Nummertavle" -#: ../src/empathy-call-window.c:771 +#: ../src/empathy-call-window.c:803 msgid "Audio input" -msgstr "" +msgstr "Lydinngang" -#: ../src/empathy-call-window.c:775 +#: ../src/empathy-call-window.c:807 msgid "Video input" -msgstr "" +msgstr "Videoinngang" -#: ../src/empathy-call-window.c:835 +#. translators: Call is a noun and %s is the contact name. This string is used +#. * in the window title +#: ../src/empathy-call-window.c:868 #, c-format msgid "Call with %s" msgstr "Samtale med %s" -#: ../src/empathy-call-window.c:904 +#. translators: Call is a noun. This string is used in the window title +#: ../src/empathy-call-window.c:938 msgid "Call" msgstr "Ring" #. Translators: number of minutes:seconds the caller has been connected -#: ../src/empathy-call-window.c:1335 +#: ../src/empathy-call-window.c:1390 #, c-format msgid "Connected — %d:%02dm" msgstr "Koblet til - %d:%02dm" @@ -1867,11 +1869,11 @@ msgstr "Sett inn _smilefjes" #: ../src/empathy-chat-window.ui.h:4 msgid "Move Tab _Left" -msgstr "" +msgstr "Flytt fane til _venstre" #: ../src/empathy-chat-window.ui.h:5 msgid "Move Tab _Right" -msgstr "" +msgstr "Flytt fane til høy_re" #: ../src/empathy-chat-window.ui.h:6 msgid "_Contact" @@ -1887,7 +1889,7 @@ msgstr "_Samtale" #: ../src/empathy-chat-window.ui.h:9 msgid "_Detach Tab" -msgstr "" +msgstr "Riv _løs fane" #: ../src/empathy-chat-window.ui.h:11 #, fuzzy @@ -1900,12 +1902,11 @@ msgstr "_Hjelp" #: ../src/empathy-chat-window.ui.h:13 msgid "_Next Tab" -msgstr "" +msgstr "_Neste fane" #: ../src/empathy-chat-window.ui.h:14 -#, fuzzy msgid "_Previous Tab" -msgstr "_Tidligere samtaler" +msgstr "_Forrige samtaler" #: ../src/empathy-chat-window.ui.h:15 ../src/empathy-status-icon.ui.h:4 msgid "_Show Contact List" @@ -1913,7 +1914,7 @@ msgstr "Vi_s kontaktliste" #: ../src/empathy-chat-window.ui.h:16 msgid "_Tabs" -msgstr "" +msgstr "_Faner" #: ../src/empathy-chatrooms-window.c:258 msgid "Name" @@ -2012,13 +2013,13 @@ msgstr "" #: ../src/empathy-event-manager.c:935 #, c-format msgid "%s is now offline." -msgstr "" +msgstr "%s er nÃ¥ frakoblet." #. someone is logging in #: ../src/empathy-event-manager.c:951 #, c-format msgid "%s is now online." -msgstr "" +msgstr "%s er nÃ¥ tilkoblet." #. Translators: time left, when it is more than one hour #: ../src/empathy-ft-manager.c:101 @@ -2240,11 +2241,11 @@ msgstr "HÃ¥ndter favoritter" #: ../src/empathy-main-window.ui.h:6 msgid "N_ormal Size" -msgstr "" +msgstr "N_ormal størrelse" #: ../src/empathy-main-window.ui.h:7 msgid "Normal Size With _Avatars" -msgstr "" +msgstr "Normal størrelse med _avatarer" #: ../src/empathy-main-window.ui.h:8 msgid "Sort by _Name" @@ -2260,7 +2261,7 @@ msgstr "_Kontoer" #: ../src/empathy-main-window.ui.h:13 msgid "_Compact Size" -msgstr "" +msgstr "_Kompakt størrelse" #: ../src/empathy-main-window.ui.h:15 msgid "_Debug" @@ -2326,15 +2327,15 @@ msgstr "Nei" #: ../src/empathy-new-chatroom-dialog.c:526 msgid "Could not start room listing" -msgstr "" +msgstr "Kunne ikke starte romliste" #: ../src/empathy-new-chatroom-dialog.c:536 msgid "Could not stop room listing" -msgstr "" +msgstr "Kune ikke stoppe romliste" #: ../src/empathy-new-chatroom-dialog.ui.h:2 msgid "Couldn't load room list" -msgstr "" +msgstr "Kunne ikke laste romliste" #: ../src/empathy-new-chatroom-dialog.ui.h:3 msgid "" @@ -2357,57 +2358,56 @@ msgid "Join Room" msgstr "Rom" #: ../src/empathy-new-chatroom-dialog.ui.h:6 -#, fuzzy msgid "Room List" -msgstr "Locale for _romliste:" +msgstr "Romliste" #: ../src/empathy-new-chatroom-dialog.ui.h:8 msgid "_Room:" msgstr "_Rom:" -#: ../src/empathy-preferences.c:147 +#: ../src/empathy-preferences.c:148 msgid "Message received" msgstr "Melding mottatt" -#: ../src/empathy-preferences.c:148 +#: ../src/empathy-preferences.c:149 msgid "Message sent" msgstr "Melding sendt" -#: ../src/empathy-preferences.c:149 +#: ../src/empathy-preferences.c:150 msgid "New conversation" msgstr "Ny samtale" -#: ../src/empathy-preferences.c:150 +#: ../src/empathy-preferences.c:151 msgid "Contact goes online" msgstr "Kontakt kobler til" -#: ../src/empathy-preferences.c:151 +#: ../src/empathy-preferences.c:152 msgid "Contact goes offline" msgstr "Kontakt kobler fra" -#: ../src/empathy-preferences.c:152 +#: ../src/empathy-preferences.c:153 msgid "Account connected" msgstr "Konto koblet til" -#: ../src/empathy-preferences.c:153 +#: ../src/empathy-preferences.c:154 msgid "Account disconnected" msgstr "Konto koblet fra" -#: ../src/empathy-preferences.c:393 +#: ../src/empathy-preferences.c:394 msgid "Language" msgstr "SprÃ¥k" #: ../src/empathy-preferences.ui.h:1 msgid "Allow _GPS usage" -msgstr "" +msgstr "Tillat bruk av _GPS" #: ../src/empathy-preferences.ui.h:2 msgid "Allow _cellphone usage" -msgstr "" +msgstr "Tillat bruk av _mobiltelefon" #: ../src/empathy-preferences.ui.h:3 msgid "Allow _network usage" -msgstr "" +msgstr "Tillat bruk av _nettverk" #: ../src/empathy-preferences.ui.h:4 msgid "Appearance" @@ -2426,41 +2426,36 @@ msgid "Chat Th_eme:" msgstr "Samtale_tema:" #: ../src/empathy-preferences.ui.h:8 -#, fuzzy msgid "Disable notifications when _away or busy" -msgstr "SlÃ¥ av lyder nÃ¥r du er b_orte eller opptatt" +msgstr "SlÃ¥ av varsling nÃ¥r du er borte eller oppt_att" #: ../src/empathy-preferences.ui.h:9 msgid "Disable sounds when _away or busy" msgstr "SlÃ¥ av lyder nÃ¥r du er b_orte eller opptatt" #: ../src/empathy-preferences.ui.h:10 -#, fuzzy msgid "Enable notifications when a contact comes online" -msgstr "SlÃ¥ av lyder nÃ¥r du er b_orte eller opptatt" +msgstr "SlÃ¥ pÃ¥ varsling nÃ¥r en kontakt kobler seg til" #: ../src/empathy-preferences.ui.h:11 -#, fuzzy msgid "Enable notifications when a contact goes offline" -msgstr "SlÃ¥ av lyder nÃ¥r du er b_orte eller opptatt" +msgstr "SlÃ¥ pÃ¥ varsling nÃ¥r en kontakt kobler seg fra" #: ../src/empathy-preferences.ui.h:12 msgid "Enable notifications when the _chat is not focused" msgstr "" #: ../src/empathy-preferences.ui.h:13 -#, fuzzy msgid "Enable spell checking for languages:" -msgstr "<b>SlÃ¥ pÃ¥ stavekontroll for sprÃ¥kene:</b>" +msgstr "SlÃ¥ pÃ¥ stavekontroll for sprÃ¥k:" #: ../src/empathy-preferences.ui.h:14 msgid "General" msgstr "Generelt" #: ../src/empathy-preferences.ui.h:15 -#, fuzzy msgid "Geoclue Settings" -msgstr "<b>Innstillinger</b>" +msgstr "Innstillinger for Geoclue" #: ../src/empathy-preferences.ui.h:16 msgid "Location" @@ -2486,8 +2481,8 @@ msgstr "<b>Avansert</b>" #: ../src/empathy-preferences.ui.h:21 msgid "" "Reduced location accuracy means that nothing more precise than your city, " -"state and country will be published. GPS coordinates will have a random " -"value added (±0.25°)." +"state and country will be published. GPS coordinates will be accurate to 1 " +"decimal place." msgstr "" #: ../src/empathy-preferences.ui.h:22 @@ -2495,9 +2490,8 @@ msgid "Show _smileys as images" msgstr "Vis _smilefjes som bilder" #: ../src/empathy-preferences.ui.h:23 -#, fuzzy msgid "Show contact _list in rooms" -msgstr "Vi_s kontaktliste" +msgstr "Vis kontakt_liste i rom" #: ../src/empathy-preferences.ui.h:24 msgid "Sounds" @@ -2535,7 +2529,7 @@ msgstr "_Ã…pne nye samtaler i egne vinduer" #: ../src/empathy-preferences.ui.h:31 msgid "_Publish location to my contacts" -msgstr "" +msgstr "_Publiser lokasjon til mine kontakter" #: ../src/empathy-preferences.ui.h:32 msgid "_Reduce location accuracy" @@ -2563,10 +2557,6 @@ msgstr "" "En invitasjon ble sendt for tjeneste %s, men du har ikke programmet som " "kreves for denne." -#: ../src/empathy-call-window-fullscreen.ui.h:1 -msgid "gtk-leave-fullscreen" -msgstr "" - #: ../src/empathy-map-view.ui.h:1 #, fuzzy msgid "Contact Map View" @@ -1,4 +1,4 @@ -# translation of empathy.master.or.po to Oriya +# translation of or.po to Oriya # Oriya translation of empathy. # Copyright (C) 2009 empathy's COPYRIGHT HOLDER # This file is distributed under the same license as the empathy package. @@ -6,10 +6,10 @@ # Manoj Kumar Giri <mgiri@redhat.com>, 2009. msgid "" msgstr "" -"Project-Id-Version: empathy.master.or\n" +"Project-Id-Version: or\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=empathy&component=general\n" -"POT-Creation-Date: 2009-08-09 09:28+0000\n" -"PO-Revision-Date: 2009-08-12 14:55+0530\n" +"POT-Creation-Date: 2009-08-25 10:36+0000\n" +"PO-Revision-Date: 2009-08-25 18:06+0530\n" "Last-Translator: Manoj Kumar Giri <mgiri@redhat.com>\n" "Language-Team: Oriya <oriya-it@googlegroups.com>\n" "MIME-Version: 1.0\n" @@ -17,17 +17,17 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n\n" "\n" +"\n" "X-Generator: KBabel 1.11.4\n" #: ../data/empathy.desktop.in.in.h:1 msgid "Empathy IM Client" -msgstr "" +msgstr "Empathy IM କàଲାà¬à¬£àଟ" #: ../data/empathy.desktop.in.in.h:2 -#, fuzzy #| msgid "Send and receive instant messages" msgid "Send and receive messages" -msgstr "ତàରନàତ ସନàଦà‡à¬¶à¬—àଡ଼ିକà ପଠାନàତà à¬à¬¬à¬‚ ଗàରହଣ କରନàତà" +msgstr "ସନàଦà‡à¬¶à¬—àଡ଼ିକà ପଠାନàତà à¬à¬¬à¬‚ ଗàରହଣ କରନàତà" #: ../data/empathy.schemas.in.h:1 msgid "Always open a separate chat window for new chats." @@ -54,296 +54,309 @@ msgid "Compact contact list" msgstr "ସàସଂଗତ ସମàପରàକ ତାଲିକା" #: ../data/empathy.schemas.in.h:6 +#| msgid "NetworkManager should be used" +msgid "Connection managers should be used" +msgstr "ସଂଯà‹à¬— ପରିଚାଳକଙàକà ବààŸà¬¬à¬¹à¬¾à¬° କରିବା ଉଚିତ" + +#: ../data/empathy.schemas.in.h:7 msgid "Contact list sort criterium" msgstr "ସମàପରàକ ତାଲିକା ସଜାàœà¬¿à¬¬à¬¾ ମାନଦଣàଡ" -#: ../data/empathy.schemas.in.h:7 +#: ../data/empathy.schemas.in.h:8 msgid "Default directory to select an avatar image from" msgstr "ଅବତାର ଚିତàର ଚàŸà¬¨ କରିବା ପାଇଠପà‚ରàବ ନିରàଦàଧାରିତ ଡ଼ିରà‡à¬•àଟରà€" -#: ../data/empathy.schemas.in.h:8 +#: ../data/empathy.schemas.in.h:9 msgid "Disable popup notifications when away" msgstr "ଦà‚à¬°à¬°à‡ à¬¥à¬¿à¬¬à¬¾ ସମàŸà¬°à‡ ପପଅପ à±à¬¿à¬£àà¬¡à‹ à¬¬à¬¿à¬œàଞପàତିଗàଡ଼ିକà ନିଷàକàà¬°à¬¿àŸ à¬•à¬°à¬¨àତà" -#: ../data/empathy.schemas.in.h:9 +#: ../data/empathy.schemas.in.h:10 msgid "Disable sounds when away" msgstr "ଦà‚à¬°à¬°à‡ à¬¥à¬¿à¬¬à¬¾ ସମàŸà¬°à‡ ଧàà±à¬¨à¬¿à¬•à ନିଷàକàà¬°à¬¿àŸ à¬•à¬°à¬¨àତà" -#: ../data/empathy.schemas.in.h:10 +#: ../data/empathy.schemas.in.h:11 msgid "Empathy can publish the user's location" -msgstr "" +msgstr "Empathy ଚାଳକର ଅବସàଥାନକà ପàରକାଶନ କରିପାରିବ" -#: ../data/empathy.schemas.in.h:11 +#: ../data/empathy.schemas.in.h:12 msgid "Empathy can use the GPS to guess the location" -msgstr "" +msgstr "Empathy ଅବସàଥାନକà ଅନàମାନ କରିବା ପାଇଠGPS କà ବààŸà¬¬à¬¹à¬¾à¬° କରିପାରିବ" -#: ../data/empathy.schemas.in.h:12 +#: ../data/empathy.schemas.in.h:13 msgid "Empathy can use the cellular network to guess the location" -msgstr "" +msgstr "Empathy ଅବସàଥାନକà ଅନàମାନ କରିବା ପାଇଠସà‡à¬²ààŸàଲାର ନà‡à¬Ÿà±à¬°àକକà ବààŸà¬¬à¬¹à¬¾à¬° କରିପାରିବ" -#: ../data/empathy.schemas.in.h:13 +#: ../data/empathy.schemas.in.h:14 msgid "Empathy can use the network to guess the location" -msgstr "" +msgstr "Empathy ଅବସàଥାନକà ଅନàମାନ କରିବା ପାଇଠନà‡à¬Ÿà±à¬°àକକà ବààŸà¬¬à¬¹à¬¾à¬° କରିପାରିବ" -#: ../data/empathy.schemas.in.h:14 +#: ../data/empathy.schemas.in.h:15 msgid "Empathy default download folder" msgstr "Empathy ପà‚ରàବନିରàଦàଧାରିତ ଆହରଣ ଫà‹à¬²à¬¡à¬°" -#: ../data/empathy.schemas.in.h:15 +#: ../data/empathy.schemas.in.h:16 msgid "Empathy has asked about importing accounts" msgstr "Empathy ଖାତାଗàଡ଼ିକà ରପàତାନି କରିବା ବିଷàŸà¬°à‡ ପଚାରିଥାà¬" -#: ../data/empathy.schemas.in.h:16 +#: ../data/empathy.schemas.in.h:17 msgid "Empathy should auto-connect on startup" msgstr "Empathy ଆରମàà¬à¬°à‡ ପଚାରିବା ଉଚିତ" -#: ../data/empathy.schemas.in.h:17 +#: ../data/empathy.schemas.in.h:18 msgid "Empathy should reduce the location's accuracy" -msgstr "" +msgstr "Empathy ଅବସàଥାନର ସଠିକତାକà କମ କରିବା ଉଚିତ" -#: ../data/empathy.schemas.in.h:18 +#: ../data/empathy.schemas.in.h:19 msgid "Empathy should use the avatar of the contact as the chat window icon" msgstr "Empathy ଚାରàଟ à±à¬¿à¬£àà¬¡à‹ à¬šà¬¿à¬¤àର ସଂକà‡à¬¤ ପରି ସମàପରàକର ଅବତାରକà ବààŸà¬¬à¬¹à¬¾à¬° କରିବା ଉଚିତ" -#: ../data/empathy.schemas.in.h:19 +#: ../data/empathy.schemas.in.h:20 msgid "Enable WebKit Developer Tools" -msgstr "" +msgstr "WebKit ବିକାଶ ସାଧନଗàଡ଼ିକà ସକàà¬°à¬¿àŸ à¬•à¬°à¬¨àତà" -#: ../data/empathy.schemas.in.h:20 +#: ../data/empathy.schemas.in.h:21 msgid "Enable popup notifications for new messages" msgstr "ନà‚ତନ ସନàଦà‡à¬¶à¬—àଡ଼ିକ ପାଇଠପପଅପ ବିଜàଞପàତିଗàଡ଼ିକà ସକàà¬°à¬¿àŸ à¬•à¬°à¬¨àତà" -#: ../data/empathy.schemas.in.h:21 +#: ../data/empathy.schemas.in.h:22 msgid "Enable spell checker" msgstr "ବନାନ ଯାଞàଚକରàତàତାକà ସକàà¬°à¬¿àŸ à¬•à¬°à¬¨àତà" -#: ../data/empathy.schemas.in.h:22 +#: ../data/empathy.schemas.in.h:23 msgid "Hide main window" msgstr "ମàଖàଯ à±à¬¿à¬£àà¬¡à‹ à¬²àଚାନàତà" -#: ../data/empathy.schemas.in.h:23 +#: ../data/empathy.schemas.in.h:24 msgid "Hide the main window." msgstr "ମàଖàଯ à±à¬¿à¬£àà¬¡à‹ à¬²àଚାନàତà" -#: ../data/empathy.schemas.in.h:24 -msgid "NetworkManager should be used" -msgstr "ନà‡à¬Ÿà±à¬°àକ ପରିଚାଳକଙàକà ବààŸà¬¬à¬¹à¬¾à¬° କରିବା ଉଚିତ" - #: ../data/empathy.schemas.in.h:25 +msgid "MC 4 accounts have been imported" +msgstr "MC 4 ଖାତାକà à¬†à¬®à¬¦à¬¾à¬¨à€ à¬•à¬°à¬¾à¬¸à¬°à¬¿à¬›à¬¿" + +#: ../data/empathy.schemas.in.h:26 +msgid "MC 4 accounts have been imported." +msgstr "MC 4 ଖାତାଗàଡ଼ିକà à¬†à¬®à¬¦à¬¾à¬¨à€ à¬•à¬°à¬¾à¬¸à¬°à¬¿à¬›à¬¿à¥¤" + +#: ../data/empathy.schemas.in.h:27 msgid "Nick completed character" msgstr "ଉପନାମ ସମàପà‚ରàଣàଣ ଅକàଷର" -#: ../data/empathy.schemas.in.h:26 +#: ../data/empathy.schemas.in.h:28 msgid "Open new chats in separate windows" msgstr "ନàଆ ଚାଟଗààœà¬¿à¬• ଅଲଗା à±à¬¿à¬£àଡà‹à¬°à‡ ଖà‹à¬²à¬¨àତà" -#: ../data/empathy.schemas.in.h:27 +#: ../data/empathy.schemas.in.h:29 msgid "Path of the adium theme to use" msgstr "" -#: ../data/empathy.schemas.in.h:28 +#: ../data/empathy.schemas.in.h:30 msgid "Path of the adium theme to use if the theme used for chat is adium." msgstr "" -#: ../data/empathy.schemas.in.h:29 +#: ../data/empathy.schemas.in.h:31 msgid "Play a sound for incoming messages" msgstr "ଆଗତ ସନàଦà‡à¬¶ ପାଇଠà¬à¬• ଶବàଦ ଚଲାନàତà" -#: ../data/empathy.schemas.in.h:30 +#: ../data/empathy.schemas.in.h:32 msgid "Play a sound for new conversations" msgstr "ନà‚ତନ ବାରàତàତାଳାପ ପାଇଠଧàà±à¬¨à¬¿ ଚଲାନàତà" -#: ../data/empathy.schemas.in.h:31 +#: ../data/empathy.schemas.in.h:33 msgid "Play a sound for outgoing messages" msgstr "ଯାଉଥିବା ସନàଦà‡à¬¶à¬—àଡ଼ିକ ପାଇଠଧàà±à¬¨à¬¿ ଚଲାନàତà" -#: ../data/empathy.schemas.in.h:32 +#: ../data/empathy.schemas.in.h:34 msgid "Play a sound when a contact logs in" msgstr "ଗà‹à¬Ÿà¬¿à¬ ସମàପରàକ ଲଗ ଇନ ହà‹à¬‡à¬¸à¬¾à¬°à¬¿à¬¬à¬¾ à¬ªà¬°à‡ à¬§àà±à¬¨à¬¿ ଚଲାନàତà" -#: ../data/empathy.schemas.in.h:33 +#: ../data/empathy.schemas.in.h:35 msgid "Play a sound when a contact logs out" msgstr "ଗà‹à¬Ÿà¬¿à¬ ସମàପରàକ ଲଗ ଆଉଟ ହà‹à¬‡à¬¸à¬¾à¬°à¬¿à¬¬à¬¾ à¬ªà¬°à‡ à¬§àà±à¬¨à¬¿ ଚଲାନàତà" -#: ../data/empathy.schemas.in.h:34 +#: ../data/empathy.schemas.in.h:36 msgid "Play a sound when we log in" msgstr "ଆମàà¬à‡ ଲଗଇନà କରିବାବà‡à¬³à‡ à¬à¬• ଶବàଦ ଚଲାନàତà" -#: ../data/empathy.schemas.in.h:35 +#: ../data/empathy.schemas.in.h:37 msgid "Play a sound when we log out" msgstr "ଆମàà¬à‡ ଲଗଆଉଟ କରିବାବà‡à¬³à‡ à¬à¬• ଶବàଦ ଚଲାନàତà" -#: ../data/empathy.schemas.in.h:36 +#: ../data/empathy.schemas.in.h:38 msgid "Popup notifications if the chat isn't focused" msgstr "ପପଅପ ବିଜàଞପàତି ଯଦି ଚାରàଟ ଲକàଷààŸ à¬¹à‹à¬‡à¬¨à¬¾à¬¹à¬¿à¬" -#: ../data/empathy.schemas.in.h:37 +#: ../data/empathy.schemas.in.h:39 msgid "Popup notifications when a contact sign in" msgstr "" -#: ../data/empathy.schemas.in.h:38 +#: ../data/empathy.schemas.in.h:40 msgid "Popup notifications when a contact sign out" msgstr "" -#: ../data/empathy.schemas.in.h:39 +#: ../data/empathy.schemas.in.h:41 msgid "Salut account is created" msgstr "ସà‡à¬²ààŸàଟ ଖାତା ନିରàମିତ ହà‹à¬‡à¬›à¬¿" -#: ../data/empathy.schemas.in.h:40 +#: ../data/empathy.schemas.in.h:42 msgid "Show avatars" msgstr "ଅବତାର ଦà‡à¬–ାନàତà" -#: ../data/empathy.schemas.in.h:41 +#: ../data/empathy.schemas.in.h:43 msgid "Show contact list in rooms" msgstr "" -#: ../data/empathy.schemas.in.h:42 +#: ../data/empathy.schemas.in.h:44 msgid "Show hint about closing the main window" msgstr "ମàଖàଯ à±à¬¿à¬£àà¬¡à‹ à¬¬à¬¨àଦ କରିବା ପାଇଠଆà¬à¬¾à¬¸ ଦିଅନàତà" -#: ../data/empathy.schemas.in.h:43 +#: ../data/empathy.schemas.in.h:45 msgid "Show offline contacts" msgstr "ଅଫଲାଇନ ସମàପରàକ ଦà‡à¬–ାଅ" -#: ../data/empathy.schemas.in.h:44 +#: ../data/empathy.schemas.in.h:46 msgid "Spell checking languages" msgstr "ବନାନ ଯାଞàà¬šà¬•à¬¾à¬°à€ à¬à¬¾à¬·à¬¾à¬—àଡ଼ିକ" -#: ../data/empathy.schemas.in.h:45 +#: ../data/empathy.schemas.in.h:47 msgid "The default folder to save file transfers in." msgstr "ଫାଇଲ ପରିବହନକà ସଂରକàଷଣ କରିବା ପାଇଠପà‚ରàବନିରàଦàଧାରିତ ଫà‹à¬²à¬¡à¬°à¥¤" -#: ../data/empathy.schemas.in.h:46 +#: ../data/empathy.schemas.in.h:48 msgid "The last directory that an avatar image was chosen from." msgstr "ଅà¬à¬¤à¬¾à¬° ପàରତିଛବି ଦàà±à¬¾à¬°à¬¾ ବଛାଯାଇଥିବା ଶà‡à¬· ଡିରà‡à¬•àଟà‹à¬°à€à¥¤" -#: ../data/empathy.schemas.in.h:47 +#: ../data/empathy.schemas.in.h:49 msgid "The theme that is used to display the conversation in chat windows." msgstr "ଚାରàଟ à±à¬¿à¬£àଡà‹à¬°à‡ ବାରàତàତାଳାପକà ଦରàଶାଯାଇବା ପାଇଠବààŸà¬¬à¬¹àƒà¬¤ ପàରସଙàଗ।" -#: ../data/empathy.schemas.in.h:48 +#: ../data/empathy.schemas.in.h:50 msgid "Use graphical smileys" msgstr "ଆଲà‡à¬–à€ à¬¸àମାଇଲିଗàଡ଼ିକà ବààŸà¬¬à¬¹à¬¾à¬° କରନàତà" -#: ../data/empathy.schemas.in.h:49 +#: ../data/empathy.schemas.in.h:51 msgid "Use notification sounds" msgstr "ବିଜàଞପàତ ଶବàଦ ଉପଯà‹à¬— କରନàତà" -#: ../data/empathy.schemas.in.h:50 +#: ../data/empathy.schemas.in.h:52 msgid "Use theme for chat rooms" msgstr "ଚାଟ ଘରଗààœà¬¿à¬• ପାଇଠପàରସଙàଗ ଉପଯà‹à¬— କରନàତà" -#: ../data/empathy.schemas.in.h:51 +#: ../data/empathy.schemas.in.h:53 msgid "Whether WebKit developer tools, such as the Web Inspector, should be enabled." msgstr "" -#: ../data/empathy.schemas.in.h:52 +#: ../data/empathy.schemas.in.h:54 msgid "Whether or not Empathy can publish the user's location to his contacts." msgstr "" -#: ../data/empathy.schemas.in.h:53 +#: ../data/empathy.schemas.in.h:55 msgid "Whether or not Empathy can use the GPS to guess the location." msgstr "" -#: ../data/empathy.schemas.in.h:54 +#: ../data/empathy.schemas.in.h:56 msgid "Whether or not Empathy can use the cellular network to guess the location." msgstr "" -#: ../data/empathy.schemas.in.h:55 +#: ../data/empathy.schemas.in.h:57 msgid "Whether or not Empathy can use the network to guess the location." msgstr "" -#: ../data/empathy.schemas.in.h:56 +#: ../data/empathy.schemas.in.h:58 msgid "" "Whether or not Empathy has asked about importing accounts from other " "programs." msgstr "Empathy ଅନààŸ à¬ªàରଗàରାମଗàଡ଼ିକରà ଖାତା à¬†à¬®à¬¦à¬¾à¬¨à€ à¬ªà¬¾à¬‡à¬ à¬…à¬¨àରà‹à¬§ କରିବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:57 +#: ../data/empathy.schemas.in.h:59 msgid "" "Whether or not Empathy should automatically log in to your accounts on " "startup." msgstr "ଆରମàà¬à¬°à‡ Empathy ସàà±àŸà¬‚ଚାଳିତ à¬à¬¾à¬¬à¬°à‡ ଆପଣଙàକ à¬–à¬¾à¬¤à¬¾à¬°à‡ à¬²à¬—à¬‡à¬¨ ହà‡à¬¬à¬¾ ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:58 +#: ../data/empathy.schemas.in.h:60 msgid "" "Whether or not Empathy should reduce the location's accuracy for privacy " "reasons." msgstr "" -#: ../data/empathy.schemas.in.h:59 +#: ../data/empathy.schemas.in.h:61 msgid "" "Whether or not Empathy should use the avatar of the contact as the chat " "window icon." msgstr "Empathy ସମàପରàକର ଅà¬à¬¤à¬¾à¬°à¬•à ଚାରàଟ à±à¬¿à¬£àà¬¡à‹ à¬šà¬¿à¬¤àରସଂକà‡à¬¤ à¬à¬¾à¬¬à¬°à‡ ବààŸà¬¬à¬¹à¬¾à¬° କରିବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:60 -msgid "Whether or not the Salut account has been created on the first Empathy run." -msgstr "ପàରଥମ Empathy à¬šà¬¾à¬³à¬¨à¬¾à¬°à‡ à¬¸à‡à¬²ààŸàଟ ଖାତା ନିରàମାଣ କରିବା ଉଚିତ କି ନàହà¬à¥¤" - -#: ../data/empathy.schemas.in.h:61 +#: ../data/empathy.schemas.in.h:62 +#, fuzzy +#| msgid "" +#| "Whether or not the network manager should be used to automatically " +#| "disconnect/reconnect." msgid "" -"Whether or not the network manager should be used to automatically " +"Whether or not connectivity managers should be used to automatically " "disconnect/reconnect." msgstr "ନà‡à¬Ÿà±à¬°àକ ପରିଚାଳକ ସàà±àŸà¬‚ଚାଳିତ à¬à¬¾à¬¬à¬°à‡ ସଂଯà‹à¬— ବିଚàଛିନàନ/ସଂଯà‹à¬— ସàଥାପନ କରିବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:62 +#: ../data/empathy.schemas.in.h:63 +msgid "Whether or not the Salut account has been created on the first Empathy run." +msgstr "ପàରଥମ Empathy à¬šà¬¾à¬³à¬¨à¬¾à¬°à‡ à¬¸à‡à¬²ààŸàଟ ଖାତା ନିରàମାଣ କରିବା ଉଚିତ କି ନàହà¬à¥¤" + +#: ../data/empathy.schemas.in.h:64 msgid "" "Whether or not to check words typed against the languages you want to check " "with." msgstr "ଆପଣ ଯାଞàଚ କରିବାକà ଚାହàà¬à¬¥à¬¿à¬¬à¬¾ à¬à¬¾à¬·à¬¾à¬° ଶବàଦ ପàରକାରକà ଯାଞàଚ କରିବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:63 +#: ../data/empathy.schemas.in.h:65 msgid "Whether or not to convert smileys into graphical images in conversations." msgstr "ବାରàତàà¬¤à¬¾à¬³à¬¾à¬ªà¬°à‡ à¬†à¬²à‡à¬–à€ à¬ªàରତିଛବିଗàଡ଼ିକà ସàମାଇଲି ପରିବରàତàତନ କରିବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:64 +#: ../data/empathy.schemas.in.h:66 msgid "Whether or not to play a sound to notify for contacts logging in the network." msgstr "ନà‡à¬Ÿà±à¬°àà¬•à¬°à‡ à¬²à¬—à¬‡à¬¨ ହà‡à¬‰à¬¥à¬¿à¬¬à¬¾ ସମàପରàକଗàଡ଼ିକà ବିଜàଞପàତି ଦà‡à¬¬à¬¾ ପାଇଠଧàà±à¬¨à¬¿ ଚଲାଇବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:65 +#: ../data/empathy.schemas.in.h:67 msgid "" "Whether or not to play a sound to notify for contacts logging off the " "network." msgstr "ନà‡à¬Ÿà±à¬°àà¬•à¬°à‡ à¬²à¬—à¬…à¬« ହà‡à¬‰à¬¥à¬¿à¬¬à¬¾ ସମàପରàକଗàଡ଼ିକà ବିଜàଞପàତି ଦà‡à¬¬à¬¾ ପାଇଠଧàà±à¬¨à¬¿ ଚଲାଇବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:66 +#: ../data/empathy.schemas.in.h:68 msgid "Whether or not to play a sound to notify for events." msgstr "ଘଟଣାଗàଡ଼ିକ ପାଇଠବିଜàଞପàତି ଦà‡à¬¬à¬¾à¬•à ଧàà±à¬¨à¬¿ ଚାଲାଇବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:67 +#: ../data/empathy.schemas.in.h:69 msgid "Whether or not to play a sound to notify for incoming messages." msgstr "ଆସàଥିବା ସନàଦà‡à¬¶à¬—àଡ଼ିକ ପାଇଠବିଜàଞପàତି ଦà‡à¬¬à¬¾à¬•à ଧàà±à¬¨à¬¿ ଚାଲାଇବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:68 +#: ../data/empathy.schemas.in.h:70 msgid "Whether or not to play a sound to notify for new conversations." msgstr "ନà‚ତନ ବାରàତàତାଳାପ ପାଇଠବିଜàଞପàତି ଦà‡à¬¬à¬¾à¬•à ଧàà±à¬¨à¬¿ ଚାଲାଇବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:69 +#: ../data/empathy.schemas.in.h:71 msgid "Whether or not to play a sound to notify for outgoing messages." msgstr "ପଠାଯାଉଥିବା ସନàଦà‡à¬¶à¬—àଡ଼ିକ ପାଇଠବିଜàଞପàତି ଦà‡à¬¬à¬¾à¬•à ଧàà±à¬¨à¬¿ ଚାଲାଇବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:70 +#: ../data/empathy.schemas.in.h:72 msgid "Whether or not to play a sound when logging in a network." msgstr "ନà‡à¬Ÿà±à¬°àà¬•à¬°à‡ à¬²à¬—à¬‡à¬¨ ହà‡à¬¬à¬¾ ସମàŸà¬°à‡ ବିଜàଞପàତି ଦà‡à¬¬à¬¾à¬•à ଧàà±à¬¨à¬¿ ଚାଲାଇବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:71 +#: ../data/empathy.schemas.in.h:73 msgid "Whether or not to play a sound when logging off a network." msgstr "ନà‡à¬Ÿà±à¬°àà¬•à¬°à‡ à¬²à¬—à¬…à¬« ହà‡à¬¬à¬¾ ସମàŸà¬°à‡ ବିଜàଞପàତି ଦà‡à¬¬à¬¾à¬•à ଧàà±à¬¨à¬¿ ଚାଲାଇବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:72 +#: ../data/empathy.schemas.in.h:74 msgid "Whether or not to play sound notifications when away or busy." msgstr "ଦà‚à¬°à¬°à‡ à¬¥à¬¿à¬¬à¬¾ ସମàŸà¬°à‡ କିମàବା ବààŸà¬¸àତ ଥିବା ସମàŸà¬°à‡ ବିଜàଞପàତି ଦà‡à¬¬à¬¾à¬•à ଧàà±à¬¨à¬¿ ଚାଲାଇବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:73 +#: ../data/empathy.schemas.in.h:75 msgid "Whether or not to show a popup notification when a contact goes offline." msgstr "" -#: ../data/empathy.schemas.in.h:74 +#: ../data/empathy.schemas.in.h:76 msgid "Whether or not to show a popup notification when a contact goes online." msgstr "" -#: ../data/empathy.schemas.in.h:75 +#: ../data/empathy.schemas.in.h:77 msgid "" "Whether or not to show a popup notification when receiving a new message " "even if the chat is already opened, but not focused." @@ -351,43 +364,43 @@ msgstr "" "ଗà‹à¬Ÿà¬¿à¬ ନà‚ତନ ସନàଦà‡à¬¶ ଗàରହଣ କରିସାରିବା à¬ªà¬°à‡ à¬—à‹à¬Ÿà¬¿à¬ ପପଅପ ବିଜàଞପàତି ଦରàଶାଇବା ଉଚିତ କି ନàହଠଯଦି ଚାଟଟି " "ପà‚ରàବରà ଖà‹à¬²à¬¾à¬…ଛି, କିନàତà ଲକàଷààŸ à¬•à¬°à¬¾à¬¯à¬¾à¬‡à¬¨à¬¾à¬¹à¬¿à¬à¥¤" -#: ../data/empathy.schemas.in.h:76 +#: ../data/empathy.schemas.in.h:78 msgid "Whether or not to show a popup notification when receiving a new message." msgstr "ନà‚ତନ ସନàଦà‡à¬¶ ଗàରହଣ କରିବା ସମàŸà¬°à‡ ପପଅପ ବିଜàଞପàତି ଦରàଶାଇବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:77 +#: ../data/empathy.schemas.in.h:79 msgid "" "Whether or not to show avatars for contacts in the contact list and chat " "windows." msgstr "ସମàପରàକ ତାଲିକା à¬à¬¬à¬‚ ଚାରàଟ à±à¬¿à¬£àଡà‹à¬°à‡ ସମàପରàକଗàଡ଼ିକ ପାଇଠଅà¬à¬¤à¬¾à¬°à¬—àଡ଼ିକà ଦରàଶାଇବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:78 +#: ../data/empathy.schemas.in.h:80 msgid "Whether or not to show contacts that are offline in the contact list." msgstr "ସମàପରàକ à¬¤à¬¾à¬²à¬¿à¬•à¬¾à¬°à‡ à¬…à¬«à¬²à¬¾à¬‡à¬¨ ଥିବା ସମàପରàକଗàଡ଼ିକà ଦରàଶାଇବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:79 +#: ../data/empathy.schemas.in.h:81 msgid "Whether or not to show popup notifications when away or busy." msgstr "ଦà‚à¬°à¬°à‡ à¬¥à¬¿à¬¬à¬¾ ସମàŸà¬°à‡ କିମàବା ବààŸà¬¸àତ ଥିବା ସମàŸà¬°à‡ ପପଅପ ବିଜàଞପàତିକà ଦରàଶାଇବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:80 +#: ../data/empathy.schemas.in.h:82 msgid "Whether or not to show the contact list in chat rooms." msgstr "" -#: ../data/empathy.schemas.in.h:81 +#: ../data/empathy.schemas.in.h:83 msgid "" "Whether or not to show the message dialog about closing the main window with " "the 'x' button in the title bar." msgstr "ଶà€à¬°àଷକ à¬ªà¬Ÿà¬¿à¬°à‡ 'x' ବଟନ ସହିତ ମà‚ଖààŸ à±à¬¿à¬£àଡà‹à¬•à ବନàଦ କରିବା à¬ªà¬°à‡ à¬¸à¬¨àଦà‡à¬¶ ସଂଳାପକà ଦରàଶାଇବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:82 +#: ../data/empathy.schemas.in.h:84 msgid "Whether to show the contact list in compact mode or not." msgstr "ସମàପରàକ ତାଲିକାକà ସଂଗàପàତ à¬§à¬¾à¬°à¬¾à¬°à‡ à¬¦à¬°àଶାଇବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:83 +#: ../data/empathy.schemas.in.h:85 msgid "Whether to use the theme for chat rooms or not." msgstr "ଚାରàଟରàମ ପାଇଠପàରସଙàଗକà ବààŸà¬¬à¬¹à¬¾à¬° କରିବା ଉଚିତ କି ନàହà¬à¥¤" -#: ../data/empathy.schemas.in.h:84 +#: ../data/empathy.schemas.in.h:86 msgid "" "Which criterium to use when sorting the contact list. Default is to use sort " "by the contact's name with the value \"name\". A value of \"state\" will " @@ -397,75 +410,79 @@ msgstr "" "ସମàପରàକନାମ ସହିତ ମà‚ଲààŸ \"ନାମ\"କà ସଜାଡ଼ିବା। \"state\" ର ଗà‹à¬Ÿà¬¿à¬ ମà‚ଲààŸà¬•à ଅବସàଥା ଦàà±à¬¾à¬°à¬¾ ଯà‹à¬—ାଯà‹à¬— " "ତାଲିକା ଅନàà¬¸à¬¾à¬°à‡ à¬¸à¬œà¬¾à¬¡à¬¼à¬¿à¬¬à¬¾à¥¤" -#: ../libempathy/empathy-ft-handler.c:838 +#: ../libempathy/empathy-account.c:1095 +msgid "Can't set an empty display name" +msgstr "" + +#: ../libempathy/empathy-ft-handler.c:839 msgid "The hash of the received file and the sent one do not match" msgstr "" -#: ../libempathy/empathy-ft-handler.c:1098 +#: ../libempathy/empathy-ft-handler.c:1099 msgid "File transfer not supported by remote contact" msgstr "" -#: ../libempathy/empathy-ft-handler.c:1156 +#: ../libempathy/empathy-ft-handler.c:1157 msgid "The selected file is not a regular file" -msgstr "" +msgstr "ବଚàଛିତ ଫାଇଲଟି ଗà‹à¬Ÿà¬¿à¬ ନିàŸà¬®à¬¿à¬¤ ଫାଇଲ ନàହà¬" -#: ../libempathy/empathy-ft-handler.c:1165 +#: ../libempathy/empathy-ft-handler.c:1166 msgid "The selected file is empty" -msgstr "" +msgstr "ବଚàଛିତ ପାଇଲଟି ଖାଲି ଅଛି" -#: ../libempathy/empathy-tp-contact-list.c:843 ../src/empathy.c:289 +#: ../libempathy/empathy-tp-contact-list.c:844 ../src/empathy.c:285 msgid "People nearby" msgstr "ନିକଟବରàà¬¤à€ à¬²à‹à¬•" -#: ../libempathy/empathy-tp-file.c:279 +#: ../libempathy/empathy-tp-file.c:280 msgid "Socket type not supported" -msgstr "" +msgstr "ସକà‡à¬Ÿ ପàରକାର ସମରàଥିତ ନàହà¬" -#: ../libempathy/empathy-tp-file.c:398 +#: ../libempathy/empathy-tp-file.c:399 msgid "No reason was specified" msgstr "କàŒà¬£à¬¸à¬¿ କାରଣ ଉଲàଲà‡à¬– କରାଯାଇନାହିà¬" -#: ../libempathy/empathy-tp-file.c:401 +#: ../libempathy/empathy-tp-file.c:402 msgid "The change in state was requested" msgstr "ଅବସàଥିତିର ପରିବରàତàତନକà ଅନàରà‹à¬§ କରାଯାଇଥିଲା" -#: ../libempathy/empathy-tp-file.c:404 +#: ../libempathy/empathy-tp-file.c:405 msgid "You canceled the file transfer" msgstr "ଆପଣ ଫାଇଲ ପରିବହନକà ବାତିଲ କରିଛନàତି" -#: ../libempathy/empathy-tp-file.c:407 +#: ../libempathy/empathy-tp-file.c:408 msgid "The other participant canceled the file transfer" msgstr "ଅନààŸ à¬…à¬‚à¬¶à¬¦à¬¾à¬¤à¬¾ ଫାଇଲ ପରିବହନକà ବାତିଲ କରିଛନàତି" -#: ../libempathy/empathy-tp-file.c:410 +#: ../libempathy/empathy-tp-file.c:411 msgid "Error while trying to transfer the file" msgstr "ଫାଇଲକà ପରିବହନ କରିବା ସମàŸà¬°à‡ ତàରàଟି" -#: ../libempathy/empathy-tp-file.c:413 +#: ../libempathy/empathy-tp-file.c:414 msgid "The other participant is unable to transfer the file" msgstr "ଅନààŸ à¬…à¬‚à¬¶à¬—àà¬°à¬¹à¬£à¬•à¬¾à¬°à€ à¬à¬¹à¬¿ ଫାଇଲକà ସàଥାନାନàତରଣ à¬•à¬°à¬¿à¬¬à¬¾à¬°à‡ à¬…à¬¸à¬®à¬°àଥ" -#: ../libempathy/empathy-tp-file.c:416 +#: ../libempathy/empathy-tp-file.c:417 msgid "Unknown reason" msgstr "ଅଜàଞାତ କାରଣ" -#: ../libempathy/empathy-utils.c:265 +#: ../libempathy/empathy-utils.c:235 msgid "Available" msgstr "ଉପଲବàଧ" -#: ../libempathy/empathy-utils.c:267 +#: ../libempathy/empathy-utils.c:237 msgid "Busy" msgstr "ବàଯସàତ" -#: ../libempathy/empathy-utils.c:270 +#: ../libempathy/empathy-utils.c:240 msgid "Away" msgstr "ଅନàପସàଥିତ" -#: ../libempathy/empathy-utils.c:272 +#: ../libempathy/empathy-utils.c:242 msgid "Hidden" msgstr "ଲàକàକାଇତ" -#: ../libempathy/empathy-utils.c:274 +#: ../libempathy/empathy-utils.c:244 msgid "Offline" msgstr "ଅଫଲାଇନ" @@ -473,8 +490,8 @@ msgstr "ଅଫଲାଇନ" #, c-format msgid "%d second ago" msgid_plural "%d seconds ago" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d ସà‡à¬•à¬£àଡ ପà‚ରàବରà" +msgstr[1] "%d ସà‡à¬•à¬£àଡ ପà‚ରàବରà" #: ../libempathy/empathy-time.c:142 #, c-format @@ -487,8 +504,8 @@ msgstr[1] "%d ମିନଟ ପà‚ରàବà‡" #, c-format msgid "%d hour ago" msgid_plural "%d hours ago" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d ଘଣàଟା ପà‚ରàବରà" +msgstr[1] "%d ଘଣàଟା ପà‚ରàବରà" #: ../libempathy/empathy-time.c:152 #, c-format @@ -501,8 +518,8 @@ msgstr[1] "%d ଦିନ ପà‚ରàବà‡" #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d ସପàତାହ ପà‚ରàବà‡" +msgstr[1] "%d ସପàତାହ ପà‚ରàବà‡" #: ../libempathy/empathy-time.c:162 #, c-format @@ -515,77 +532,118 @@ msgstr[1] "%d ମାସ ପà‚ରàବà‡" msgid "in the future" msgstr "à¬à¬¬à¬¿à¬·ààŸà¬¤à¬°à‡" -#: ../libempathy-gtk/empathy-account-chooser.c:426 +#: ../libempathy-gtk/empathy-account-chooser.c:424 msgid "All" msgstr "ସମସàତ" -#: ../libempathy-gtk/empathy-account-widget.c:302 -#: ../libempathy-gtk/empathy-account-widget.c:354 +#: ../libempathy-gtk/empathy-account-widget.c:448 +#: ../libempathy-gtk/empathy-account-widget.c:504 #, c-format msgid "%s:" msgstr "%s:" +#: ../libempathy-gtk/empathy-account-widget.c:1224 +msgid "Enabled" +msgstr "ସକàରିàŸ" + #: ../libempathy-gtk/empathy-account-widget-aim.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> MyScreenName</span>" +msgstr "<span size=\"small\"><b>ଉଦାହରଣ:</b> MyScreenName</span>" + +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:2 #: ../libempathy-gtk/empathy-account-widget-generic.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:2 msgid "Advanced" msgstr "ଉନàନତ" -#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:2 -#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:3 -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:3 -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:3 -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:3 msgid "Pass_word:" msgstr "ପàରବà‡à¬¶ ସଙàକà‡à¬¤ (_w):" -#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:4 msgid "Screen _Name:" msgstr "ପରଦା ନାମ (_N):" -#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:5 -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:10 -#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:5 +msgid "What is your AIM password?" +msgstr "ଆପଣଙàକର AIM ପàରବà‡à¬¶ ସଂକà‡à¬¤ କଣ?" + +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:6 +msgid "What is your AIM screen name?" +msgstr "ଆପଣଙàକର AIM ପରଦା ନାମ କଣ?" + +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:15 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:10 msgid "_Port:" msgstr "ସଂଯà‹à¬—à¬¿à¬•à€ (_P):" -#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:5 -#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:5 -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:6 -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:11 -#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:5 -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:9 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:16 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:12 #: ../src/empathy-new-chatroom-dialog.ui.h:9 msgid "_Server:" msgstr "ସà‡à¬¬à¬• (_S):" -#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:2 -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:2 -#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> username</span>" +msgstr "<span size=\"small\"><b>ଉଦାହରଣ:</b> username</span>" + +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:3 msgid "Login I_D:" msgstr "ଲଗଇନà I_D: " -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:5 +msgid "What is your GroupWise User ID?" +msgstr "ଆପଣଙàକର GroupWise ଚାଳକ ID କଣ?" + +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:6 +msgid "What is your GroupWise password?" +msgstr "ଆପଣଙàକର GroupWise ପàରବà‡à¬¶ ସଂକà‡à¬¤ କଣ?" + +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> 123456789</span>" +msgstr "<span size=\"small\"><b>ଉଦାହରଣ:</b> 123456789</span>" + +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:3 msgid "ICQ _UIN:" msgstr "ICS_UIN:" -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:5 +msgid "What is your ICQ UIN?" +msgstr "ଆପଣଙàକର ICQ UIN କଣ?" + +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:6 +msgid "What is your ICQ password?" +msgstr "ଆପଣଙàକର ICQ ପàରବà‡à¬¶à¬¸à¬‚କà‡à¬¤ କଣ?" + +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:8 msgid "_Charset:" msgstr "ଅକàଷରମାଳା (_C):" -#: ../libempathy-gtk/empathy-account-widget-irc.c:240 +#: ../libempathy-gtk/empathy-account-widget-irc.c:244 msgid "New Network" msgstr "ନàଆ ଜାଲକ" @@ -621,84 +679,136 @@ msgstr "ପàରକàରàତ ନାମ:" msgid "Servers" msgstr "ସà‡à¬¬à¬• ମାନà‡" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> user@jabber.org</span>" +msgstr "<span size=\"small\"><b>ଉଦାହରଣ:</b> user@jabber.org</span>" + +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:4 msgid "Override server settings" -msgstr "" +msgstr "ସରàà¬à¬° ବିନààŸà¬¾à¬¸à¬•à ଦାବିଦà‡à¬‡ ଯାଆନàତà" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:6 msgid "Pri_ority:" msgstr "ଅଗàରାଧିକାର (_o):" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:6 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7 msgid "Reso_urce:" msgstr "ସମàବଳ (_u):" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:8 msgid "Use old SS_L" msgstr "ପàରàଣା SSL ଉପଯà‹à¬— କରନàତà (_L)" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:9 +msgid "What is your Jabber ID?" +msgstr "ଆପଣଙàକର ଜବàବର ID କଣ?" + +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:10 +msgid "What is your Jabber password?" +msgstr "ଆପଣଙàକର ଜବàବର ପàରବà‡à¬¶à¬¸à¬‚କà‡à¬¤ କଣ?" + +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:11 +msgid "What is your desired Jabber ID?" +msgstr "ଆପଣଙàକର ଆଶାମàତାବକ ଜବàବର ID କଣ?" + +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:12 +msgid "What is your desired Jabber password?" +msgstr "ଆପଣଙàକର ଆଶାମàତାବକ ଜବàବର ପàରବà‡à¬¶ ସଂକà‡à¬¤ କଣ?" + +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:13 msgid "_Encryption required (TLS/SSL)" msgstr "ସଂଗàପàତ ଆବଶààŸà¬• (TLS/SSL) (_E)" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:9 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:14 msgid "_Ignore SSL certificate errors" msgstr "SSL ପàରମାଣପତàର ତàରàଟିଗàଡ଼ିକà ଅଗàରାହààŸ à¬•à¬°à¬¨àତà (_I)" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> user@hotmail.com</span>" +msgstr "<span size=\"small\"><b>ଉଦାହରଣ:</b> user@hotmail.com</span>" + +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:5 +msgid "What is your Windows Live password?" +msgstr "ଆପଣଙàକର Windows ଜà€à¬¬à¬¨àତ ପàରବà‡à¬¶ ସଂକà‡à¬¤ କଣ?" + +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:6 +msgid "What is your Windows Live user name?" +msgstr "ଆପଣଙàକର Windows ଜà€à¬¬à¬¨àତ ଚାଳକ ନାମ କଣ?" + +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:2 msgid "_Email:" msgstr "ଇ-ମà‡à¬² (_E):" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:3 msgid "_First Name:" msgstr "ପàରଥମ ନାମ (_F):" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:4 msgid "_Jabber ID:" msgstr "ଜବàବର ID (_J):" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:5 msgid "_Last Name:" msgstr "ଶà‡à¬· ନାମ (_L):" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:6 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:6 msgid "_Nickname:" msgstr "ଡାକ ନାମ (_N):" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:7 msgid "_Published Name:" msgstr "ପàରକାଶିତ ନାମ (_P):" +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> user@my.sip.server</span>" +msgstr "<span size=\"small\"><b>ଉଦାହରଣ:</b> user@my.sip.server</span>" + #. look up the DNS SRV record at the service's domain for the host name of a STUN server. -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:4 msgid "Discover STUN" msgstr "STUN କà ଆବିଷàକାର କରନàତà" -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:6 msgid "STUN Server:" msgstr " STUN ସରàà¬à¬°" -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:6 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:7 msgid "STUN port:" msgstr "STUN ସଂଯà‹à¬—ିକà€:" -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:8 +msgid "What is your SIP account password?" +msgstr "ଆପଣଙàକର SIP ଖାତା ପàରବà‡à¬¶ ସଂକà‡à¬¤ କଣ?" + +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:9 +msgid "What is your SIP login ID?" +msgstr "ଆପଣଙàକର SIP ଲଗଇନ ID କଣ?" + +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:10 msgid "_Username:" msgstr "ଚାଳକ ନାମ (_U):" -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:4 msgid "Use _Yahoo Japan" msgstr "Yahoo ଜାପାନ ଉପଯà‹à¬— କରନàତà (_Y)" -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:5 +msgid "What is your Yahoo! ID?" +msgstr "ଆପଣଙàକର Yahoo! ID କଣ?" + +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:6 +msgid "What is your Yahoo! password?" +msgstr "ଆପଣଙàକର Yahoo! ପàରବà‡à¬¶ ସଂକà‡à¬¤ କଣ?" + +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:7 msgid "Yahoo I_D:" msgstr "Yahoo I_D:" -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:6 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9 msgid "_Ignore conference and chatroom invitations" msgstr "ସମàମà‡à¬³à¬¨ à¬à¬¬à¬‚ ଚାରàଟକକàଷ ଆମନàତàରଣଗàଡ଼ିକà ଅଗàରାହààŸ à¬•à¬°à¬¨àତà (_I)" -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:11 msgid "_Room List locale:" msgstr "କକàଷ ତାଲିକା ଲà‹à¬•à‡à¬² (_R):" @@ -733,95 +843,101 @@ msgstr "ବଡ଼କରିବା ପାଇଠକàଲିକ କରନàତà #: ../libempathy-gtk/empathy-chat.c:186 msgid "Failed to reconnect this chat" -msgstr "" +msgstr "à¬à¬¹à¬¿ ବାରàତàତାଳାପ ସହିତ ସଂଯà‹à¬— à¬•à¬°à¬¿à¬¬à¬¾à¬°à‡ à¬¬à¬¿à¬«à¬³" -#: ../libempathy-gtk/empathy-chat.c:412 +#: ../libempathy-gtk/empathy-chat.c:413 msgid "Unsupported command" -msgstr "" +msgstr "ଅସମରàଥିତ ନିରàଦàଦà‡à¬¶" -#: ../libempathy-gtk/empathy-chat.c:548 +#: ../libempathy-gtk/empathy-chat.c:549 msgid "offline" msgstr "ଅଫ ଲାଇନ" -#: ../libempathy-gtk/empathy-chat.c:551 +#: ../libempathy-gtk/empathy-chat.c:552 msgid "invalid contact" msgstr "ତàରàଟିପàରàଣàଣ ସମàପରàକ" -#: ../libempathy-gtk/empathy-chat.c:554 +#: ../libempathy-gtk/empathy-chat.c:555 msgid "permission denied" msgstr "ଅନàମତି ନାହିà¬" -#: ../libempathy-gtk/empathy-chat.c:557 +#: ../libempathy-gtk/empathy-chat.c:558 msgid "too long message" msgstr "ଅତàଯାଧିକ ଲମàବା ସନàଦà‡à¬¶" -#: ../libempathy-gtk/empathy-chat.c:560 +#: ../libempathy-gtk/empathy-chat.c:561 msgid "not implemented" msgstr "ନିଷàପାଦନ କରାଯାଇ ନାହିà¬" -#: ../libempathy-gtk/empathy-chat.c:563 +#: ../libempathy-gtk/empathy-chat.c:564 msgid "unknown" msgstr "ଅଜଣା" -#: ../libempathy-gtk/empathy-chat.c:567 +#: ../libempathy-gtk/empathy-chat.c:568 #, c-format msgid "Error sending message '%s': %s" msgstr "ସନàଦà‡à¬¶ à¬ªà¬ à¬¾à¬‡à¬¬à¬¾à¬°à‡ à¬¤àରàଟି '%s': %s" -#: ../libempathy-gtk/empathy-chat.c:597 +#: ../libempathy-gtk/empathy-chat.c:598 #, c-format msgid "Topic set to: %s" msgstr "à¬°à‡ à¬¬à¬¿à¬·àŸ à¬¸à‡à¬Ÿ କରାଯାଇଥାà¬: %s" -#: ../libempathy-gtk/empathy-chat.c:599 +#: ../libempathy-gtk/empathy-chat.c:600 msgid "No topic defined" msgstr "କàŒà¬£à¬¸à¬¿ à¬¬à¬¿à¬·àŸ à¬¬ààŸà¬¾à¬–ààŸà¬¾ କରାଯାଇନାହିà¬" -#: ../libempathy-gtk/empathy-chat.c:969 +#: ../libempathy-gtk/empathy-chat.c:970 msgid "(No Suggestions)" -msgstr "" +msgstr "(କàŒà¬£à¬¸à¬¿ ପàରସàତାବ ନାହିà¬)" -#: ../libempathy-gtk/empathy-chat.c:1023 +#: ../libempathy-gtk/empathy-chat.c:1024 msgid "Insert Smiley" msgstr "Smiley କà à¬à¬°àତàତି କରନàତà" #. send button -#: ../libempathy-gtk/empathy-chat.c:1041 -#: ../libempathy-gtk/empathy-ui-utils.c:1480 +#: ../libempathy-gtk/empathy-chat.c:1042 +#: ../libempathy-gtk/empathy-ui-utils.c:1471 msgid "_Send" msgstr "ପଠାନàତà (_S)" -#: ../libempathy-gtk/empathy-chat.c:1075 +#: ../libempathy-gtk/empathy-chat.c:1076 msgid "_Spelling Suggestions" -msgstr "" +msgstr "ବନାନ ପàରସàତାବ (_S)" -#: ../libempathy-gtk/empathy-chat.c:1190 -#, fuzzy, c-format +#: ../libempathy-gtk/empathy-chat.c:1191 +#, c-format #| msgid "Contact disconnected" msgid "%s has disconnected" -msgstr "ସମàପରàକ ବିଚàଛିନàନ" +msgstr "%s ସମàପରàକ ବିଚàଛିନàନ ହà‹à¬‡à¬›à¬¿" -#: ../libempathy-gtk/empathy-chat.c:1194 +#. translators: reverse the order of these arguments +#. * if the kicked should come before the kicker in your locale. +#. +#: ../libempathy-gtk/empathy-chat.c:1198 #, c-format -msgid "%s was kicked by %s" -msgstr "" +msgid "%1$s was kicked by %2$s" +msgstr "%1$s %2$s ଦàà±à¬¾à¬°à¬¾ ବାହାର କରାଯାଇଥିଲା" -#: ../libempathy-gtk/empathy-chat.c:1197 +#: ../libempathy-gtk/empathy-chat.c:1201 #, c-format msgid "%s was kicked" -msgstr "" +msgstr "%s କà ବାହାର କରାଯାଇଥିଲା" -#: ../libempathy-gtk/empathy-chat.c:1202 +#. translators: reverse the order of these arguments +#. * if the banned should come before the banner in your locale. +#. +#: ../libempathy-gtk/empathy-chat.c:1209 #, c-format -msgid "%s was banned by %s" -msgstr "" +msgid "%1$s was banned by %2$s" +msgstr "%1$s %2$s ଦàà±à¬¾à¬°à¬¾ ଅଗàରାହààŸ à¬•à¬°à¬¾à¬¯à¬¾à¬‡à¬¥à¬¿à¬²à¬¾" -#: ../libempathy-gtk/empathy-chat.c:1205 +#: ../libempathy-gtk/empathy-chat.c:1212 #, c-format msgid "%s was banned" -msgstr "" +msgstr "%s ଅଗàରାହààŸ à¬•à¬°à¬¾à¬¯à¬¾à¬‡à¬¥à¬¿à¬²à¬¾" -#: ../libempathy-gtk/empathy-chat.c:1209 +#: ../libempathy-gtk/empathy-chat.c:1216 #, c-format msgid "%s has left the room" msgstr "%s କଠà‹à¬°à¬¿à¬•à ପàରସàଥାନ କରିସାରିଛନàତି" @@ -831,42 +947,42 @@ msgstr "%s କଠà‹à¬°à¬¿à¬•à ପàରସàଥାନ କରିସାରିà #. * given by the user living the room. If this poses a problem, #. * please let us know. :-) #. -#: ../libempathy-gtk/empathy-chat.c:1218 +#: ../libempathy-gtk/empathy-chat.c:1225 #, c-format msgid " (%s)" -msgstr "" +msgstr " (%s)" -#: ../libempathy-gtk/empathy-chat.c:1241 +#: ../libempathy-gtk/empathy-chat.c:1248 #, c-format msgid "%s has joined the room" msgstr "%s କଠà‹à¬°à¬¿à¬°à‡ ଯà‹à¬—ଦାନ କରିଛନàତି" -#: ../libempathy-gtk/empathy-chat.c:1374 ../src/empathy-call-window.c:1274 +#: ../libempathy-gtk/empathy-chat.c:1381 ../src/empathy-call-window.c:1277 msgid "Disconnected" msgstr "ଅସଂଯà‹à¬œà¬¿à¬¤" -#: ../libempathy-gtk/empathy-chat.c:1809 +#: ../libempathy-gtk/empathy-chat.c:1817 msgid "Connected" msgstr "ସଂଯà‹à¬—ିତ" -#: ../libempathy-gtk/empathy-chat.c:1859 +#: ../libempathy-gtk/empathy-chat.c:1867 #: ../libempathy-gtk/empathy-log-window.c:502 msgid "Conversation" msgstr "କଥà‹à¬ªà¬•à¬¥à¬¨" -#: ../libempathy-gtk/empathy-chat.ui.h:1 ../src/empathy-chat-window.c:472 +#: ../libempathy-gtk/empathy-chat.ui.h:1 ../src/empathy-chat-window.c:471 msgid "Topic:" msgstr "ବିଷàŸ:" #. Copy Link Address menu item #: ../libempathy-gtk/empathy-chat-text-view.c:316 -#: ../libempathy-gtk/empathy-theme-adium.c:267 +#: ../libempathy-gtk/empathy-theme-adium.c:266 msgid "_Copy Link Address" msgstr "ସଂଯà‹à¬— ଠିକଣାକà ନକଲ କରନàତà (_C)" #. Open Link menu item #: ../libempathy-gtk/empathy-chat-text-view.c:323 -#: ../libempathy-gtk/empathy-theme-adium.c:275 +#: ../libempathy-gtk/empathy-theme-adium.c:274 msgid "_Open Link" msgstr "ସଂଯà‹à¬—କà ଖà‹à¬²à¬¨àତà (_O)" @@ -876,16 +992,16 @@ msgstr "ସଂଯà‹à¬—କà ଖà‹à¬²à¬¨àତà (_O)" msgid "%A %B %d %Y" msgstr "%A %B %d %Y" -#: ../libempathy-gtk/empathy-contact-dialogs.c:179 -#: ../libempathy-gtk/empathy-contact-dialogs.c:238 +#: ../libempathy-gtk/empathy-contact-dialogs.c:177 +#: ../libempathy-gtk/empathy-contact-dialogs.c:236 msgid "Edit Contact Information" msgstr "ସମàପରàକ ସà‚ଚନା ସମàପାଦିତ କରନàତà" -#: ../libempathy-gtk/empathy-contact-dialogs.c:289 +#: ../libempathy-gtk/empathy-contact-dialogs.c:287 msgid "Personal Information" msgstr "ବàଯକàତିଗତ ସà‚ଚନା" -#: ../libempathy-gtk/empathy-contact-dialogs.c:394 +#: ../libempathy-gtk/empathy-contact-dialogs.c:392 msgid "New Contact" msgstr "ନà‚ତନ ସମàପରàକ" @@ -934,12 +1050,12 @@ msgstr "ଆଳାପ (_C)" #: ../libempathy-gtk/empathy-contact-menu.c:253 msgctxt "menu item" msgid "_Audio Call" -msgstr "" +msgstr "ଧàà±à¬¨à¬¿ ଡାକ (_A)" #: ../libempathy-gtk/empathy-contact-menu.c:285 msgctxt "menu item" msgid "_Video Call" -msgstr "" +msgstr "à¬à¬¿à¬¡à¬¿à¬“ ଡାକ (_V)" #: ../libempathy-gtk/empathy-contact-menu.c:324 msgid "_View Previous Conversations" @@ -951,7 +1067,7 @@ msgstr "ଫାଇଲ ପଠାନàତà" #: ../libempathy-gtk/empathy-contact-menu.c:369 msgid "Share my desktop" -msgstr "" +msgstr "ମà‹à¬° ଡà‡à¬¸àକଟପକà ସହà¬à¬¾à¬— କରନàତà" #: ../libempathy-gtk/empathy-contact-menu.c:397 msgid "Infor_mation" @@ -987,13 +1103,13 @@ msgid "Select" msgstr "ମନà‹à¬¨à€à¬¤ କର" #: ../libempathy-gtk/empathy-contact-widget.c:1009 -#: ../src/empathy-main-window.c:1023 +#: ../src/empathy-main-window.c:1019 msgid "Group" msgstr "ସମà‚ହ" #: ../libempathy-gtk/empathy-contact-widget.c:1260 msgid "Country ISO Code:" -msgstr "" +msgstr "ଦà‡à¬¶à¬° ISO ସଂକà‡à¬¤:" #: ../libempathy-gtk/empathy-contact-widget.c:1262 msgid "Country:" @@ -1013,7 +1129,7 @@ msgstr "ଅଂଚଳ:" #: ../libempathy-gtk/empathy-contact-widget.c:1270 msgid "Postal Code:" -msgstr "" +msgstr "ଡାକଘର ସଂକà‡à¬¤:" #: ../libempathy-gtk/empathy-contact-widget.c:1272 msgid "Street:" @@ -1021,15 +1137,15 @@ msgstr "ସାହି:" #: ../libempathy-gtk/empathy-contact-widget.c:1274 msgid "Building:" -msgstr "" +msgstr "ଅଟàଟାଳିକା:" #: ../libempathy-gtk/empathy-contact-widget.c:1276 msgid "Floor:" -msgstr "" +msgstr "ମà‡à¬œà¬¿à¬†:" #: ../libempathy-gtk/empathy-contact-widget.c:1278 msgid "Room:" -msgstr "" +msgstr "କà‹à¬ ରà€:" #: ../libempathy-gtk/empathy-contact-widget.c:1280 msgid "Text:" @@ -1045,7 +1161,7 @@ msgstr "àŸà.ଆର.ଆଇ.:" #: ../libempathy-gtk/empathy-contact-widget.c:1286 msgid "Accuracy Level:" -msgstr "" +msgstr "ସଠିକତା ସàତର:" #: ../libempathy-gtk/empathy-contact-widget.c:1288 msgid "Error:" @@ -1053,11 +1169,11 @@ msgstr "ତàƒà¬Ÿà¬¿:" #: ../libempathy-gtk/empathy-contact-widget.c:1290 msgid "Vertical Error (meters):" -msgstr "" +msgstr "à¬à‚ଲମàବ ତàରàଟି (ମିଟର):" #: ../libempathy-gtk/empathy-contact-widget.c:1292 msgid "Horizontal Error (meters):" -msgstr "" +msgstr "ସମାନàତରାଳ ତàରàଟି (ମିଟର):" #: ../libempathy-gtk/empathy-contact-widget.c:1294 msgid "Speed:" @@ -1065,15 +1181,15 @@ msgstr "ବà‡à¬—:" #: ../libempathy-gtk/empathy-contact-widget.c:1296 msgid "Bearing:" -msgstr "" +msgstr "ବà‡à¬°à¬¿à¬™àଗ:" #: ../libempathy-gtk/empathy-contact-widget.c:1298 msgid "Climb Speed:" -msgstr "" +msgstr "ଚଢ଼ିବା ଗତି:" #: ../libempathy-gtk/empathy-contact-widget.c:1300 msgid "Last Updated on:" -msgstr "" +msgstr "ଅନàତିମଥର ଅଦààŸà¬¤à¬¿à¬¤ ତାରିଖ:" #: ../libempathy-gtk/empathy-contact-widget.c:1302 msgid "Longitude:" @@ -1085,23 +1201,23 @@ msgstr "ଅକàଷାଂଶ:" #: ../libempathy-gtk/empathy-contact-widget.c:1306 msgid "Altitude:" -msgstr "" +msgstr "ଉଚàଚତା:" #: ../libempathy-gtk/empathy-contact-widget.c:1353 msgid "<b>Location</b>" -msgstr "" +msgstr "<b>ଅବସàଥାନ</b>" #: ../libempathy-gtk/empathy-contact-widget.c:1366 msgid "<b>Location</b>, " -msgstr "" +msgstr "<b>ଅବସàଥାନ</b>, " #: ../libempathy-gtk/empathy-contact-widget.c:1416 msgid "%B %e, %Y at %R UTC" -msgstr "" +msgstr "%B %e, %Y at %R UTC" #: ../libempathy-gtk/empathy-contact-widget.ui.h:1 msgid "<b>Location</b> at (date)\t" -msgstr "" +msgstr "<b>ଅବସàଥାନ</b> à¬°à‡ (ତାରିଖ)\t" #: ../libempathy-gtk/empathy-contact-widget.ui.h:2 #: ../libempathy-gtk/empathy-new-message-dialog.ui.h:1 @@ -1120,20 +1236,20 @@ msgstr "ଜନàମଦିନ:" #: ../libempathy-gtk/empathy-contact-widget.ui.h:5 msgid "Client Information" -msgstr "" +msgstr "ଗàରାହକ ସà‚ଚନା" #: ../libempathy-gtk/empathy-contact-widget.ui.h:6 msgid "Client:" msgstr "ଗàରାହକ:" #: ../libempathy-gtk/empathy-contact-widget.ui.h:7 -#: ../src/empathy-main-window.c:1006 +#: ../src/empathy-main-window.c:1002 msgid "Contact" msgstr "ସମàପରàକ" #: ../libempathy-gtk/empathy-contact-widget.ui.h:8 msgid "Contact Details" -msgstr "" +msgstr "ଯà‹à¬—ାଯà‹à¬— ବିବରଣà€" #: ../libempathy-gtk/empathy-contact-widget.ui.h:9 msgid "Email:" @@ -1180,24 +1296,24 @@ msgstr "ଉà¬à¬¬à¬¸à¬¾à¬‡à¬Ÿ:" msgid "_Add Group" msgstr "ସମà‚ହକà ଯà‹à¬— କରନàତà (_A)" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:283 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:281 msgid "new server" msgstr "ନàଆ ସରàà¬à¬°" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:510 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:508 msgid "Server" msgstr "ସà‡à¬¬à¬•" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:525 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:523 msgid "Port" msgstr "ସଂଯà‹à¬—ିକà€" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:538 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:536 msgid "SSL" msgstr "SSL" #: ../libempathy-gtk/empathy-log-window.c:495 -#: ../src/empathy-import-dialog.c:285 +#: ../src/empathy-import-widget.c:321 msgid "Account" msgstr "ହିସାବ ଖାତା" @@ -1243,34 +1359,34 @@ msgstr "ନàଆ କଥà‹à¬ªà¬•à¬¥à¬¨" #. COL_DISPLAY_MARKUP #. COL_STATUS_CUSTOMISABLE #. COL_TYPE -#: ../libempathy-gtk/empathy-presence-chooser.c:172 -#: ../libempathy-gtk/empathy-presence-chooser.c:208 +#: ../libempathy-gtk/empathy-presence-chooser.c:176 +#: ../libempathy-gtk/empathy-presence-chooser.c:212 msgid "Custom Message..." -msgstr "" +msgstr "ସନàଦà‡à¬¶à¬•à ଇଚàଛାମàତାବକ କରନàତà..." -#: ../libempathy-gtk/empathy-presence-chooser.c:225 -#: ../libempathy-gtk/empathy-presence-chooser.c:227 +#: ../libempathy-gtk/empathy-presence-chooser.c:229 +#: ../libempathy-gtk/empathy-presence-chooser.c:231 msgid "Edit Custom Messages..." -msgstr "" +msgstr "ଇଚàଛାମàତାବକ ସନàଦà‡à¬¶à¬—àଡ଼ିକà ସମàପାଦନ କରନàତà..." -#: ../libempathy-gtk/empathy-presence-chooser.c:326 +#: ../libempathy-gtk/empathy-presence-chooser.c:330 msgid "Click to remove this status as a favorite" msgstr "" -#: ../libempathy-gtk/empathy-presence-chooser.c:335 +#: ../libempathy-gtk/empathy-presence-chooser.c:339 msgid "Click to make this status a favorite" msgstr "" -#: ../libempathy-gtk/empathy-presence-chooser.c:369 +#: ../libempathy-gtk/empathy-presence-chooser.c:373 msgid "Set status" -msgstr "" +msgstr "ସàଥିତି ସà‡à¬Ÿ କରନàତà" -#: ../libempathy-gtk/empathy-presence-chooser.c:782 +#: ../libempathy-gtk/empathy-presence-chooser.c:794 msgid "Set your presence and current status" -msgstr "" +msgstr "ଆପଣଙàକର ଉପସàଥିତି à¬à¬¬à¬‚ ବରàତàତମାନର ସàଥିତିକà ସà‡à¬Ÿà¬•à¬°à¬¨àତà" #. Custom messages -#: ../libempathy-gtk/empathy-presence-chooser.c:1017 +#: ../libempathy-gtk/empathy-presence-chooser.c:1043 msgid "Custom messages..." msgstr "ଇଚàଛାରà‚ପ ସନàଦà‡à¬¶à¬—ààœà¬¿à¬•..." @@ -1316,27 +1432,19 @@ msgstr "ସàà±à¬° କଲ ସମାପàତ ହà‹à¬‡à¬›à¬¿" #: ../libempathy-gtk/empathy-status-preset-dialog.c:362 msgid "Enter Custom Message" -msgstr "" +msgstr "ଇଚàଛାମàତାବକ ସନàଦà‡à¬¶ à¬à¬°à¬£ କରନàତà" #: ../libempathy-gtk/empathy-status-preset-dialog.c:521 msgid "Edit Custom Messages" -msgstr "" +msgstr "ଇଚàଛାମàତାବକ ସନàଦà‡à¬¶ ସମàପାଦନ କରନàତà" #: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:1 msgid "Add _New Preset" -msgstr "" +msgstr "ନà‚ତନ ପà‚ରàବନିଶàଚିତ (_N)" #: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:2 msgid "Saved Presets" -msgstr "" - -#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:3 -msgid "gtk-add" -msgstr "" - -#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:4 -msgid "gtk-remove" -msgstr "" +msgstr "ସଂରକàଷିତ ପà‚ରàବନିଶàଚିତ" #: ../libempathy-gtk/empathy-theme-manager.c:67 msgid "Classic" @@ -1354,17 +1462,17 @@ msgstr "ସଫା" msgid "Blue" msgstr "ନà€à¬³" -#: ../libempathy-gtk/empathy-ui-utils.c:1382 +#: ../libempathy-gtk/empathy-ui-utils.c:1373 msgid "Unable to open URI" msgstr "àŸà.ଆରà.ଆଇ. ଖà‹à¬²à¬¿à¬¬à¬¾à¬°à‡ ଅସମରàଥ" -#: ../libempathy-gtk/empathy-ui-utils.c:1472 +#: ../libempathy-gtk/empathy-ui-utils.c:1463 msgid "Select a file" msgstr "à¬à¬• ଫାଇଲ ମନà‹à¬¨à€à¬¤ କର" -#: ../libempathy-gtk/empathy-ui-utils.c:1532 +#: ../libempathy-gtk/empathy-ui-utils.c:1523 msgid "Select a destination" -msgstr "" +msgstr "ଗà‹à¬Ÿà¬¿à¬ ଲକàଷààŸà¬¸àଥଳ ବାଛନàତà" #: ../libempathy-gtk/totem-subtitle-encoding.c:158 msgid "Current Locale" @@ -1549,7 +1657,7 @@ msgid "Megaphone" msgstr "Megaphone" #: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2 -#: ../megaphone/src/megaphone-applet.c:519 +#: ../megaphone/src/megaphone-applet.c:518 msgid "Talk!" msgstr "କàହନàତà!" @@ -1567,11 +1675,11 @@ msgstr "ସà‚ଚନା (_I)" msgid "_Preferences" msgstr "ପସନàଦ (_P)" -#: ../megaphone/src/megaphone-applet.c:168 +#: ../megaphone/src/megaphone-applet.c:166 msgid "Please configure a contact." msgstr "ଦàŸà¬¾à¬•à¬°à¬¿ à¬à¬• ସମàପରàକକà ବିନààŸà¬¾à¬¸ କରନàତà" -#: ../megaphone/src/megaphone-applet.c:258 +#: ../megaphone/src/megaphone-applet.c:256 msgid "Select contact..." msgstr "à¬à¬• ସମàପରàକ ଚàŸà¬¨ କରନàତà..." @@ -1580,27 +1688,26 @@ msgid "Presence" msgstr "ଉପସàଥିତି" #: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2 -#: ../nothere/src/nothere-applet.c:106 +#: ../nothere/src/nothere-applet.c:105 msgid "Set your own presence" msgstr "ଆପଣଙàକର ନିଜର ଉପସàଥିତିକà ସà‡à¬Ÿà¬•à¬°à¬¨àତà" -#: ../src/empathy.c:567 +#: ../src/empathy.c:588 msgid "Don't connect on startup" msgstr "ଆରମàà¬à¬°à‡ ସଂଯà‹à¬— କରନàତà ନାହିà¬" -#: ../src/empathy.c:571 +#: ../src/empathy.c:592 msgid "Don't show the contact list on startup" msgstr "ଆରମàà¬à¬°à‡ ସମàପରàକ ତାଲିକା ଦରàଶାନàତà ନାହିà¬" -#: ../src/empathy.c:575 +#: ../src/empathy.c:596 msgid "Show the accounts dialog" msgstr "ଖାତା ସଂଳାପ ଦରàଶାନàତà" -#: ../src/empathy.c:587 -#, fuzzy +#: ../src/empathy.c:608 #| msgid "- Empathy Instant Messenger" msgid "- Empathy IM Client" -msgstr "- Empathy ତà€à¬¬àର ସନàଦà‡à¬¶ ବାହକ" +msgstr "- Empathy IM ଗàରାହକ" #: ../src/empathy-about-dialog.c:83 msgid "" @@ -1644,21 +1751,134 @@ msgstr "GNOME ପାଇଠଗà‹à¬Ÿà¬¿à¬ ତà€à¬¬àର ସନàଦà‡à¬¶ ଠmsgid "translator-credits" msgstr "ଶàà¬àରାଂଶà ବà‡à¬¹à‡à¬°à¬¾ <arya_subhransu@yahoo.co.in>" -#: ../src/empathy-accounts-dialog.c:392 -msgid "Enabled" -msgstr "ସକàରିàŸ" +#. translators: this is followed by the "while ..." strings some lines +#. * down this file. +#. +#: ../src/empathy-account-assistant.c:121 +msgid "There has been an error " +msgstr "ସà‡à¬ à¬¾à¬°à‡ à¬—à‹à¬Ÿà¬¿à¬ ତàରàଟି ରହିଛି" -#: ../src/empathy-accounts-dialog.c:402 ../src/empathy-accounts-dialog.ui.h:1 -msgid "Accounts" -msgstr "ଆକାଉଣàଟଗàଡିକ" +#. translators: this follows the "There has been an error " string +#: ../src/empathy-account-assistant.c:125 +msgid "while importing the accounts." +msgstr "" + +#. translators: this follows the "There has been an error " string +#: ../src/empathy-account-assistant.c:129 +msgid "while parsing the account details." +msgstr "" + +#. translators: this follows the "There has been an error " string +#: ../src/empathy-account-assistant.c:133 +msgid "while creating the account." +msgstr "" + +#: ../src/empathy-account-assistant.c:151 +#, c-format +msgid "The error message was: <span style=\"italic\">%s</span>" +msgstr "" +#: ../src/empathy-account-assistant.c:159 +msgid "" +"You can either go back and try to enter your accounts' details again or quit " +"this wizard and add accounts later from the Edit menu." +msgstr "" + +#: ../src/empathy-account-assistant.c:194 +msgid "An error occurred" +msgstr "ଗà‹à¬Ÿà¬¿à¬ ତàରàଟି ପରିଲିଖିତ ହà‡à¬²à¬¾" + +#. Create account #. To translator: %s is the protocol name -#: ../src/empathy-accounts-dialog.c:837 +#: ../src/empathy-account-assistant.c:330 +#: ../src/empathy-accounts-dialog.c:1084 #, c-format msgid "New %s account" msgstr "ନàଆ %s ଖାତା" -#: ../src/empathy-accounts-dialog.c:950 +#: ../src/empathy-account-assistant.c:397 +msgid "What kind of chat account do you have?" +msgstr "" + +#: ../src/empathy-account-assistant.c:403 +msgid "Do you have any other chat accounts you want to set up?" +msgstr "" + +#: ../src/empathy-account-assistant.c:409 +msgid "Enter your account details" +msgstr "" + +#: ../src/empathy-account-assistant.c:414 +#, fuzzy +#| msgid "%s is calling you, do you want to answer?" +msgid "What kind of chat account do you want to create?" +msgstr "%s ଆପଣଙàକà ଡାକàଅଛି, ଆପଣ ଉତàତର ଦà‡à¬¬à¬¾à¬•à ଚାହàà¬à¬›à¬¨àତି କି?" + +#: ../src/empathy-account-assistant.c:420 +#, fuzzy +#| msgid "Do you really want to remove the contact '%s'?" +msgid "Do you want to create other chat accounts?" +msgstr "ଆପଣ ପàରକàƒà¬¤à¬°à‡ ସà‡à¬¹à¬¿ ସମàପରàକ '%s'କà କାଢ଼ିବାକà ଚାହàà¬à¬›à¬¨àତି କି?" + +#: ../src/empathy-account-assistant.c:427 +msgid "Enter the details for the new account" +msgstr "" + +#: ../src/empathy-account-assistant.c:513 +msgid "" +"With Empathy you can chat with people online nearby and with friends and " +"colleagues who use Google Talk, AIM, Windows Live and many other chat " +"programs. With a microphone or a webcam you can also have audio or video " +"calls." +msgstr "" + +#: ../src/empathy-account-assistant.c:530 +msgid "Do you have an account you've been using with another chat program?" +msgstr "" + +#: ../src/empathy-account-assistant.c:553 +msgid "Yes, import my account details from " +msgstr "" + +#: ../src/empathy-account-assistant.c:574 +msgid "Yes, I'll enter my account details now" +msgstr "" + +#: ../src/empathy-account-assistant.c:596 +#, fuzzy +#| msgid "Show and edit accounts" +msgid "No, I want a new account" +msgstr "ଖାତା ଦà‡à¬–ନàତà à¬à¬¬à¬‚ ସମàପାଦନ କରନàତà" + +#: ../src/empathy-account-assistant.c:606 +msgid "No, I just want to see people online nearby for now" +msgstr "" + +#: ../src/empathy-account-assistant.c:627 +msgid "Select the accounts you want to import:" +msgstr "" + +#: ../src/empathy-account-assistant.c:714 +#: ../src/empathy-new-chatroom-dialog.c:496 +#: ../src/empathy-new-chatroom-dialog.c:497 +msgid "Yes" +msgstr "ହà¬" + +#: ../src/empathy-account-assistant.c:721 +msgid "No, that's all for now" +msgstr "" + +#: ../src/empathy-account-assistant.c:914 +msgid "Welcome to Empathy" +msgstr "" + +#: ../src/empathy-account-assistant.c:923 +#, fuzzy +#| msgid "Import Accounts" +msgid "Import your existing accounts" +msgstr "ଖାତାଗàଡ଼ିକà ଆମଦାନି କରନàତà" + +#: ../src/empathy-accounts-dialog.c:606 #, c-format msgid "" "You are about to remove your %s account!\n" @@ -1667,7 +1887,7 @@ msgstr "" "ଆପଣ ଆପଣଙàକର %s ଖାତାକà କାଢ଼ିବାକà ଯାଉଛନàତି!\n" "ଆପଣ ନିଶàଚିତ କି ଆପଣ ଅଗàରସର ହà‡à¬¬à¬¾à¬•à ଚାହàà¬à¬›à¬¨àତି?" -#: ../src/empathy-accounts-dialog.c:956 +#: ../src/empathy-accounts-dialog.c:612 msgid "" "Any associated conversations and chat rooms will NOT be removed if you " "decide to proceed.\n" @@ -1681,31 +1901,23 @@ msgstr "" "ଆପଣ ସà‡à¬¹à¬¿ ଖାତାକà ପରବରàତàତି ସମàŸà¬°à‡ ଯà‹à¬— କରିବା ପାଇଠଉଚିତ à¬®à¬¨à‡ à¬•à¬²à‡, ସà‡à¬®à¬¾à¬¨à‡ ସà‡à¬ªà¬°àଯààŸà¬¨àତ ଉପଲବàଧ " "ରହିବà‡à¥¤" +#: ../src/empathy-accounts-dialog.ui.h:1 +msgid "Accounts" +msgstr "ଆକାଉଣàଟଗàଡିକ" + #: ../src/empathy-accounts-dialog.ui.h:2 -msgid "Add Account" -msgstr "ଆକାଉଣàଟ àŸà‹à¬— କର" +msgid "Add new" +msgstr "" #: ../src/empathy-accounts-dialog.ui.h:3 msgid "Cr_eate" msgstr "ସàƒà¬·àଟି କରନàତà (_r)" #: ../src/empathy-accounts-dialog.ui.h:4 -msgid "Gmail" -msgstr "" - -#: ../src/empathy-accounts-dialog.ui.h:5 -msgid "Import Accounts..." -msgstr "ଖାତାଗàଡ଼ିକà ଆମଦାନି କରନàତà..." - -#: ../src/empathy-accounts-dialog.ui.h:6 msgid "No protocol installed" msgstr "" -#: ../src/empathy-accounts-dialog.ui.h:7 -msgid "Settings" -msgstr "ସà‡à¬Ÿà¬¿à¬™àଗଗàଡିକ" - -#: ../src/empathy-accounts-dialog.ui.h:8 +#: ../src/empathy-accounts-dialog.ui.h:5 msgid "" "To add a new account, you first have to install a backend for each protocol " "you want to use." @@ -1713,22 +1925,24 @@ msgstr "" "ଗà‹à¬Ÿà¬¿à¬ ନà‚ତନ ଖାତା ଯà‹à¬— କରିବା ପାଇà¬, ଆପଣଙàକà ପàà¬°à¬¥à¬®à‡ à¬¬ààŸà¬¬à¬¹à¬¾à¬° କରିବାକà ଚାହàà¬à¬¥à¬¿à¬¬à¬¾ ପàରତààŸà‡à¬• ପàରà‹à¬Ÿà‹à¬•à¬² " "ପାଇଠଗà‹à¬Ÿà¬¿à¬ ପàƒà¬·àଠà¬à‚ମି ସàଥାପନ କରିବାକà ହà‡à¬¬à¥¤" -#: ../src/empathy-accounts-dialog.ui.h:9 -msgid "Type:" -msgstr "ପàରକାର:" - -#: ../src/empathy-accounts-dialog.ui.h:10 +#: ../src/empathy-accounts-dialog.ui.h:6 msgid "_Add..." msgstr "ଯà‹à¬— କରନàତà (_A)..." -#: ../src/empathy-accounts-dialog.ui.h:11 +#: ../src/empathy-accounts-dialog.ui.h:7 msgid "_Create a new account" msgstr "" -#: ../src/empathy-accounts-dialog.ui.h:12 +#: ../src/empathy-accounts-dialog.ui.h:8 msgid "_Reuse an existing account" msgstr "" +#: ../src/empathy-accounts-dialog.ui.h:9 +#, fuzzy +#| msgid "Account" +msgid "account" +msgstr "ହିସାବ ଖାତା" + #: ../src/empathy-call-window.c:426 msgid "Contrast" msgstr "ସàପଷàଟତା" @@ -1765,17 +1979,20 @@ msgstr "ଧàବନି ନିବà‡à¬¶" msgid "Video input" msgstr "à¬à¬¿àœà¬¿à¬“ ନିବà‡à¬¶" -#: ../src/empathy-call-window.c:866 +#. translators: Call is a noun and %s is the contact name. This string is used +#. * in the window title +#: ../src/empathy-call-window.c:868 #, c-format msgid "Call with %s" msgstr "" -#: ../src/empathy-call-window.c:935 +#. translators: Call is a noun. This string is used in the window title +#: ../src/empathy-call-window.c:938 msgid "Call" msgstr "ଡାକରା" #. Translators: number of minutes:seconds the caller has been connected -#: ../src/empathy-call-window.c:1387 +#: ../src/empathy-call-window.c:1390 #, c-format msgid "Connected — %d:%02dm" msgstr "" @@ -1808,12 +2025,12 @@ msgstr "_କଲ" msgid "_View" msgstr "ଦàରàଶàଯ (_V)" -#: ../src/empathy-chat-window.c:344 +#: ../src/empathy-chat-window.c:343 #, c-format msgid "Conversations (%d)" msgstr "କଥà‹à¬ªà¬•à¬¥à¬¨ (%d)" -#: ../src/empathy-chat-window.c:476 +#: ../src/empathy-chat-window.c:475 msgid "Typing a message." msgstr "à¬à¬• ସନàଦà‡à¬¶ ଟାଇପ କରàଅଛି." @@ -1905,75 +2122,75 @@ msgstr "ସàବàŸà¬‚-ସଂଯà‹à¬—" msgid "Manage Favorite Rooms" msgstr "ମନପସନàଦ କଠà‹à¬°à¬¿à¬—àଡ଼ିକà ପରିଚାଳନା କରନàତà" -#: ../src/empathy-event-manager.c:321 +#: ../src/empathy-event-manager.c:322 msgid "Incoming call" msgstr "ଆଗତ କଲ" -#: ../src/empathy-event-manager.c:324 +#: ../src/empathy-event-manager.c:325 #, c-format msgid "%s is calling you, do you want to answer?" msgstr "%s ଆପଣଙàକà ଡାକàଅଛି, ଆପଣ ଉତàତର ଦà‡à¬¬à¬¾à¬•à ଚାହàà¬à¬›à¬¨àତି କି?" -#: ../src/empathy-event-manager.c:331 +#: ../src/empathy-event-manager.c:332 msgid "_Reject" msgstr "ଅସàà±à€à¬•à¬¾à¬° କରନàତà (_R)" -#: ../src/empathy-event-manager.c:337 +#: ../src/empathy-event-manager.c:338 msgid "_Answer" msgstr "ଉତàତର ଦିଅନàତà (_A)" -#: ../src/empathy-event-manager.c:452 +#: ../src/empathy-event-manager.c:453 #, c-format msgid "Incoming call from %s" msgstr "%s ଠାରà ଆଗତ କଲ" -#: ../src/empathy-event-manager.c:496 +#: ../src/empathy-event-manager.c:497 #, c-format msgid "%s is offering you an invitation" msgstr "%s ଆପଣଙàକà ଆମନàତàରଣ କରàଅଛି" -#: ../src/empathy-event-manager.c:502 +#: ../src/empathy-event-manager.c:503 msgid "An external application will be started to handle it." msgstr "à¬à¬¹à¬¾à¬•à ନିàŸà¬¨àତàରଣ କରିବା ପାଇଠଗà‹à¬Ÿà¬¿à¬ ବାହààŸ à¬ªàରàŸà‹à¬—କà ଆରମàଠକରାଯିବ।" -#: ../src/empathy-event-manager.c:507 +#: ../src/empathy-event-manager.c:508 msgid "You don't have the needed external application to handle it." msgstr "ଆପଣଙàକ à¬ªà¬¾à¬–à¬°à‡ à¬à¬¹à¬¾à¬•à ନିàŸà¬¨àତàରଣ କରିବା ପାଇଠଆବଶààŸà¬•à€àŸ ବାହààŸ à¬ªàରàŸà‹à¬— ନାହିà¬à¥¤" -#: ../src/empathy-event-manager.c:634 +#: ../src/empathy-event-manager.c:635 msgid "Room invitation" msgstr "କଠà‹à¬°à¬¿ ଆମନàତàରଣ" -#: ../src/empathy-event-manager.c:637 +#: ../src/empathy-event-manager.c:638 #, c-format msgid "%s is inviting you to join %s" msgstr "%s ଆପଣଙàକà %s à¬°à‡ à¬¯à‹à¬—ଦାନ କରିବା ପାଇଠଆମନàତàରଣ କରàଛନàତି" -#: ../src/empathy-event-manager.c:645 +#: ../src/empathy-event-manager.c:646 msgid "_Decline" msgstr "_ଅସàବà€à¬•à¬¾à¬°" -#: ../src/empathy-event-manager.c:650 +#: ../src/empathy-event-manager.c:651 #: ../src/empathy-new-chatroom-dialog.ui.h:7 msgid "_Join" msgstr "ଯà‹à¬—ଦାନ କରନàତà (_J)" -#: ../src/empathy-event-manager.c:689 +#: ../src/empathy-event-manager.c:690 #, c-format msgid "%s invited you to join %s" msgstr "%s ଆପଣଙàକà %s à¬°à‡ à¬¯à‹à¬—ଦାନ କରିବା ପାଇଠଆମନàତàରଣ କରିଛନàତି" -#: ../src/empathy-event-manager.c:715 +#: ../src/empathy-event-manager.c:716 #, c-format msgid "Incoming file transfer from %s" msgstr "%sରà ଆସàଥିବା ଫାଇଲ ସàଥାନାନàତରଣ" -#: ../src/empathy-event-manager.c:895 +#: ../src/empathy-event-manager.c:896 #, c-format msgid "Subscription requested by %s" msgstr "%s ଦàà±à¬¾à¬°à¬¾ ଅନàରà‹à¬§ କରାଯାଇଥିବା ସଦସààŸà¬¤à¬¾" -#: ../src/empathy-event-manager.c:899 +#: ../src/empathy-event-manager.c:900 #, c-format msgid "" "\n" @@ -1983,13 +2200,13 @@ msgstr "" "ସନàଦà‡à¬¶: %s" #. someone is logging off -#: ../src/empathy-event-manager.c:935 +#: ../src/empathy-event-manager.c:936 #, c-format msgid "%s is now offline." msgstr "" #. someone is logging in -#: ../src/empathy-event-manager.c:951 +#: ../src/empathy-event-manager.c:952 #, c-format msgid "%s is now online." msgstr "" @@ -2105,92 +2322,104 @@ msgstr "ଫାଇଲ ସàଥାନାନàତରଣ" msgid "Remove completed, canceled and failed file transfers from the list" msgstr "କାଢ଼ିବା ସମàପà‚ରàଣàଣ ହà‹à¬‡à¬›à¬¿, ତାଲିକାରà ବାତିଲ à¬à¬¬à¬‚ ବିଫଳ ଫାଇଲ ସàଥାନାନàତରଣ" +#: ../src/empathy-import-dialog.c:84 +msgid "" +"No accounts to import could be found. Empathy currently only supports " +"importing accounts from Pidgin." +msgstr "" +"à¬†à¬®à¬¦à¬¾à¬¨à€ à¬•à¬°à¬¿à¬¬à¬¾ ପାଇଠକàŒà¬£à¬¸à¬¿ ଖାତା ମିଳàନାହିà¬à¥¤ Empathy ବରàତàତମାନ କà‡à¬¬à¬³ ଖାତାଗàଡ଼ିକà Pidginରà à¬†à¬®à¬¦à¬¾à¬¨à€ " +"କରିବାକà ସମରàଥନ କରିଥାà¬à¥¤" + +#: ../src/empathy-import-dialog.c:199 +msgid "Import Accounts" +msgstr "ଖାତାଗàଡ଼ିକà ଆମଦାନି କରନàତà" + #. Translators: this is the header of a treeview column -#: ../src/empathy-import-dialog.c:263 +#: ../src/empathy-import-widget.c:301 msgid "Import" msgstr "ଆàŸà¬¤ କରନàତà" -#: ../src/empathy-import-dialog.c:272 +#: ../src/empathy-import-widget.c:310 msgid "Protocol" msgstr "ପàରà‹à¬Ÿà‹à¬•à¬²" -#: ../src/empathy-import-dialog.c:298 +#: ../src/empathy-import-widget.c:334 msgid "Source" msgstr "ଉତàସ" -#: ../src/empathy-import-dialog.c:392 -msgid "" -"No accounts to import could be found. Empathy currently only supports " -"importing accounts from Pidgin." -msgstr "" -"à¬†à¬®à¬¦à¬¾à¬¨à€ à¬•à¬°à¬¿à¬¬à¬¾ ପାଇଠକàŒà¬£à¬¸à¬¿ ଖାତା ମିଳàନାହିà¬à¥¤ Empathy ବରàତàତମାନ କà‡à¬¬à¬³ ଖାତାଗàଡ଼ିକà Pidginରà à¬†à¬®à¬¦à¬¾à¬¨à€ " -"କରିବାକà ସମରàଥନ କରିଥାà¬à¥¤" +#: ../src/empathy-import-mc4-accounts.c:104 +#, fuzzy +#| msgid "People nearby" +msgid "People Nearby" +msgstr "ନିକଟବରàà¬¤à€ à¬²à‹à¬•" -#: ../src/empathy-import-dialog.ui.h:1 -msgid "Import Accounts" -msgstr "ଖାତାଗàଡ଼ିକà ଆମଦାନି କରନàତà" +#: ../src/empathy-import-mc4-accounts.c:106 +#, fuzzy, c-format +#| msgid "New %s account" +msgid "%s account" +msgstr "ନàଆ %s ଖାତା" -#: ../src/empathy-main-window.c:402 +#: ../src/empathy-main-window.c:399 msgid "_Edit account" msgstr "ଖାତା ସମàପାଦନ କରନàତà (_E)" -#: ../src/empathy-main-window.c:505 +#: ../src/empathy-main-window.c:502 msgid "No error specified" msgstr "କିଛି ତàରàଟି ଦରàଶାଯାଇନାହିà¬" -#: ../src/empathy-main-window.c:508 +#: ../src/empathy-main-window.c:505 msgid "Network error" msgstr "ନà‡à¬Ÿà±à¬¾à¬°àକ ତàରàଟି" -#: ../src/empathy-main-window.c:511 +#: ../src/empathy-main-window.c:508 msgid "Authentication failed" msgstr "ବàˆà¬§à¬¿à¬•à¬°à¬£ ବିଫଳ" -#: ../src/empathy-main-window.c:514 +#: ../src/empathy-main-window.c:511 msgid "Encryption error" msgstr "ସଂଗàପàତ ତàରàଟି" -#: ../src/empathy-main-window.c:517 +#: ../src/empathy-main-window.c:514 msgid "Name in use" msgstr "ନାମ ଯାହାକି ବàଯବହàƒà¬¤ ହà‡à¬‰à¬…ଛି" -#: ../src/empathy-main-window.c:520 +#: ../src/empathy-main-window.c:517 msgid "Certificate not provided" msgstr "ପàରମାଣପତàର ଦିଆଯାଇନାହିà¬" -#: ../src/empathy-main-window.c:523 +#: ../src/empathy-main-window.c:520 msgid "Certificate untrusted" msgstr "ପàରମାଣପତàର ବିଶàà±à¬¸àଥ ନàହà¬" -#: ../src/empathy-main-window.c:526 +#: ../src/empathy-main-window.c:523 msgid "Certificate expired" msgstr "ପàରମାଣପତàରର à¬¸à¬®àŸ à¬¸à¬®à¬¾à¬ªàତ" -#: ../src/empathy-main-window.c:529 +#: ../src/empathy-main-window.c:526 msgid "Certificate not activated" msgstr "ପàରମାଣପତàର ସକàà¬°à¬¿àŸ à¬•à¬°à¬¾à¬¯à¬¾à¬‡à¬¨à¬¾à¬¹à¬¿à¬" -#: ../src/empathy-main-window.c:532 +#: ../src/empathy-main-window.c:529 msgid "Certificate hostname mismatch" msgstr "ପàରମାଣପତàର ହà‹à¬·àଟ ନାମ ଅମà‡à¬³" -#: ../src/empathy-main-window.c:535 +#: ../src/empathy-main-window.c:532 msgid "Certificate fingerprint mismatch" msgstr "ପàରମାଣପତàର ଅଙàଗàଳିଚିହàନ ମà‡à¬³à¬–ାଉନାହିà¬" -#: ../src/empathy-main-window.c:538 +#: ../src/empathy-main-window.c:535 msgid "Certificate self-signed" msgstr "ପàରମାଣପତàର ନିଜ ଦàà±à¬¾à¬°à¬¾ ହସàତାକàଷର ହà‹à¬‡à¬›à¬¿" -#: ../src/empathy-main-window.c:541 +#: ../src/empathy-main-window.c:538 msgid "Certificate error" msgstr "ପàରମାଣପତàର ତàରàଟି" -#: ../src/empathy-main-window.c:544 +#: ../src/empathy-main-window.c:541 msgid "Unknown error" msgstr "ଅଜଣା ତàରàଟି" -#: ../src/empathy-main-window.c:1293 +#: ../src/empathy-main-window.c:1288 msgid "Show and edit accounts" msgstr "ଖାତା ଦà‡à¬–ନàତà à¬à¬¬à¬‚ ସମàପାଦନ କରନàତà" @@ -2274,15 +2503,15 @@ msgstr "" msgid "_Room" msgstr "କକàଷ (_R)" -#: ../src/empathy-new-chatroom-dialog.c:331 +#: ../src/empathy-new-chatroom-dialog.c:328 msgid "Chat Room" msgstr "" -#: ../src/empathy-new-chatroom-dialog.c:347 +#: ../src/empathy-new-chatroom-dialog.c:344 msgid "Members" msgstr "ସଦସàଯ ମାନà‡" -#: ../src/empathy-new-chatroom-dialog.c:496 +#: ../src/empathy-new-chatroom-dialog.c:494 #, c-format msgctxt "" "Room/Join's roomlist tooltip. Parametersare a channel name, yes/no, yes/no " @@ -2294,21 +2523,16 @@ msgid "" "Members: %s" msgstr "" -#: ../src/empathy-new-chatroom-dialog.c:498 -#: ../src/empathy-new-chatroom-dialog.c:499 -msgid "Yes" -msgstr "ହà¬" - -#: ../src/empathy-new-chatroom-dialog.c:498 -#: ../src/empathy-new-chatroom-dialog.c:499 +#: ../src/empathy-new-chatroom-dialog.c:496 +#: ../src/empathy-new-chatroom-dialog.c:497 msgid "No" msgstr "ନାà¬" -#: ../src/empathy-new-chatroom-dialog.c:526 +#: ../src/empathy-new-chatroom-dialog.c:524 msgid "Could not start room listing" msgstr "" -#: ../src/empathy-new-chatroom-dialog.c:536 +#: ../src/empathy-new-chatroom-dialog.c:534 msgid "Could not stop room listing" msgstr "" @@ -2342,35 +2566,35 @@ msgstr "କକàଷତାଲିକା" msgid "_Room:" msgstr "କଠà‹à¬°à¬¿ (_R):" -#: ../src/empathy-preferences.c:147 +#: ../src/empathy-preferences.c:148 msgid "Message received" msgstr "ସନàଦà‡à¬¶ ପàରାପàତ" -#: ../src/empathy-preferences.c:148 +#: ../src/empathy-preferences.c:149 msgid "Message sent" msgstr "ସନàଦà‡à¬¶ ପଠାଯାଇଅଛି" -#: ../src/empathy-preferences.c:149 +#: ../src/empathy-preferences.c:150 msgid "New conversation" msgstr "ନàଆ କଥà‹à¬ªà¬•à¬¥à¬¨" -#: ../src/empathy-preferences.c:150 +#: ../src/empathy-preferences.c:151 msgid "Contact goes online" msgstr "ସମàପରàକ ଅନଲାଇନ ଆସିଲà‡" -#: ../src/empathy-preferences.c:151 +#: ../src/empathy-preferences.c:152 msgid "Contact goes offline" msgstr "ସମàପରàକ ଅଫଲାଇନ ଗଲà‡" -#: ../src/empathy-preferences.c:152 +#: ../src/empathy-preferences.c:153 msgid "Account connected" msgstr "ଖାତା ସଂଯà‹à¬—ିତ" -#: ../src/empathy-preferences.c:153 +#: ../src/empathy-preferences.c:154 msgid "Account disconnected" msgstr "ଖାତା ବିଚàଛିନàନ" -#: ../src/empathy-preferences.c:393 +#: ../src/empathy-preferences.c:394 msgid "Language" msgstr "à¬à¬¾à¬·à¬¾" @@ -2515,12 +2739,12 @@ msgstr "ଅବସàଥିତି" msgid "_Quit" msgstr "à¬¬à¬¿à¬¦à¬¾àŸ à¬¨à¬¿à¬…à¬¨àତà (_Q)" -#: ../src/empathy-tube-dispatch.c:375 +#: ../src/empathy-tube-dispatch.c:376 #, c-format msgid "Unable to start application for service %s: %s" msgstr "ସରàà¬à¬¿à¬¸ %s ପାଇଠପàରàŸà‹à¬— ଆରମàà¬ à¬•à¬°à¬¿à¬¬à¬¾à¬°à‡ à¬…à¬¸à¬®à¬°àଥ: %s" -#: ../src/empathy-tube-dispatch.c:446 +#: ../src/empathy-tube-dispatch.c:447 #, c-format msgid "" "An invitation was offered for service %s, but you don't have the needed " @@ -2529,72 +2753,68 @@ msgstr "" "ସରàà¬à¬¿à¬¸ %s ପାଇଠଗà‹à¬Ÿà¬¿à¬ ଆମନàତàରଣ ପଠାଯାଇଛି, କିନàତà ଆପଣଙàକ à¬ªà¬¾à¬–à¬°à‡ à¬à¬¹à¬¾à¬•à ନିàŸà¬¨àତàରଣ କରିବା ପାଇଠ" "ଆବଶààŸà¬•à€àŸ ପàରàŸà‹à¬— ନାହିà¬" -#: ../src/empathy-call-window-fullscreen.ui.h:1 -msgid "gtk-leave-fullscreen" -msgstr "" - #: ../src/empathy-map-view.ui.h:1 msgid "Contact Map View" msgstr "" -#: ../src/empathy-debug-dialog.c:111 ../src/empathy-debug-dialog.c:1083 +#: ../src/empathy-debug-dialog.c:111 ../src/empathy-debug-dialog.c:1079 msgid "Error" msgstr "ତàରàଟି" -#: ../src/empathy-debug-dialog.c:114 ../src/empathy-debug-dialog.c:1077 +#: ../src/empathy-debug-dialog.c:114 ../src/empathy-debug-dialog.c:1073 msgid "Critical" msgstr "ଗàରàତର" -#: ../src/empathy-debug-dialog.c:117 ../src/empathy-debug-dialog.c:1071 +#: ../src/empathy-debug-dialog.c:117 ../src/empathy-debug-dialog.c:1067 msgid "Warning" msgstr "ଚà‡à¬¤à¬¾à¬¬à¬¨à€" -#: ../src/empathy-debug-dialog.c:120 ../src/empathy-debug-dialog.c:1065 -#: ../src/empathy-debug-dialog.c:1113 +#: ../src/empathy-debug-dialog.c:120 ../src/empathy-debug-dialog.c:1061 +#: ../src/empathy-debug-dialog.c:1109 msgid "Message" msgstr "ସନàଦà‡à¬¶" -#: ../src/empathy-debug-dialog.c:123 ../src/empathy-debug-dialog.c:1059 +#: ../src/empathy-debug-dialog.c:123 ../src/empathy-debug-dialog.c:1055 msgid "Info" msgstr "ସà‚ଚନା" -#: ../src/empathy-debug-dialog.c:126 ../src/empathy-debug-dialog.c:1053 +#: ../src/empathy-debug-dialog.c:126 ../src/empathy-debug-dialog.c:1049 msgid "Debug" msgstr "ତàƒà¬Ÿà¬¿à¬®àକàତ କରନàତà" -#: ../src/empathy-debug-dialog.c:845 +#: ../src/empathy-debug-dialog.c:841 msgid "Save" msgstr "ସଂରକàଷଣ କରନàତà" -#: ../src/empathy-debug-dialog.c:948 +#: ../src/empathy-debug-dialog.c:944 msgid "Debug Window" msgstr "ଡିବଗ ଉଇଣàଡà‹" -#: ../src/empathy-debug-dialog.c:1021 +#: ../src/empathy-debug-dialog.c:1017 msgid "Pause" msgstr "ବିରତି" -#: ../src/empathy-debug-dialog.c:1033 +#: ../src/empathy-debug-dialog.c:1029 msgid "Level " msgstr "ସàତର" -#: ../src/empathy-debug-dialog.c:1102 +#: ../src/empathy-debug-dialog.c:1098 msgid "Time" msgstr "ସମଯ" -#: ../src/empathy-debug-dialog.c:1104 +#: ../src/empathy-debug-dialog.c:1100 msgid "Domain" msgstr "ପରିସର" -#: ../src/empathy-debug-dialog.c:1106 +#: ../src/empathy-debug-dialog.c:1102 msgid "Category" msgstr "ବିà¬à¬¾à¬—" -#: ../src/empathy-debug-dialog.c:1108 +#: ../src/empathy-debug-dialog.c:1104 msgid "Level" msgstr "ସàତର" -#: ../src/empathy-debug-dialog.c:1140 +#: ../src/empathy-debug-dialog.c:1136 msgid "" "The selected connection manager does not support the remote debugging " "extension." @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: empathy\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-08-20 23:39+0200\n" -"PO-Revision-Date: 2009-08-20 23:40+0100\n" +"POT-Creation-Date: 2009-08-25 20:05+0200\n" +"PO-Revision-Date: 2009-08-25 20:35+0100\n" "Last-Translator: Daniel Nylander <po@danielnylander.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "MIME-Version: 1.0\n" @@ -21,7 +21,7 @@ msgstr "" #: ../data/empathy.desktop.in.in.h:1 msgid "Empathy IM Client" -msgstr "Empathy snabbmeddelandeklient" +msgstr "Snabbmeddelandeklienten Empathy" #: ../data/empathy.desktop.in.in.h:2 msgid "Send and receive messages" @@ -128,318 +128,343 @@ msgid "Hide the main window." msgstr "Dölj huvudfönstret." #: ../data/empathy.schemas.in.h:25 +msgid "MC 4 accounts have been imported" +msgstr "MC 4-konton har importerats" + +#: ../data/empathy.schemas.in.h:26 +msgid "MC 4 accounts have been imported." +msgstr "MC 4-konton har importerats." + +#: ../data/empathy.schemas.in.h:27 msgid "Nick completed character" msgstr "Tecken för smeknamnskomplettering" -#: ../data/empathy.schemas.in.h:26 +#: ../data/empathy.schemas.in.h:28 msgid "Open new chats in separate windows" msgstr "Öppna nya chattar i separata fönster" -#: ../data/empathy.schemas.in.h:27 +#: ../data/empathy.schemas.in.h:29 msgid "Path of the adium theme to use" msgstr "Sökväg för adium-temat att använda" -#: ../data/empathy.schemas.in.h:28 +#: ../data/empathy.schemas.in.h:30 msgid "Path of the adium theme to use if the theme used for chat is adium." msgstr "Sökväg för adium-temat som ska användas om temat som används för chatt är adium." -#: ../data/empathy.schemas.in.h:29 +#: ../data/empathy.schemas.in.h:31 msgid "Play a sound for incoming messages" msgstr "Spela upp ljud för inkommande meddelanden" -#: ../data/empathy.schemas.in.h:30 +#: ../data/empathy.schemas.in.h:32 msgid "Play a sound for new conversations" msgstr "Spela upp ett ljud för nya samtal" -#: ../data/empathy.schemas.in.h:31 +#: ../data/empathy.schemas.in.h:33 msgid "Play a sound for outgoing messages" msgstr "Spela upp ljud för utgÃ¥ende meddelanden" -#: ../data/empathy.schemas.in.h:32 +#: ../data/empathy.schemas.in.h:34 msgid "Play a sound when a contact logs in" msgstr "Spela upp ljud när en kontakt loggar in" -#: ../data/empathy.schemas.in.h:33 +#: ../data/empathy.schemas.in.h:35 msgid "Play a sound when a contact logs out" msgstr "Spela upp ett ljud när en kontakt loggar ut" -#: ../data/empathy.schemas.in.h:34 +#: ../data/empathy.schemas.in.h:36 msgid "Play a sound when we log in" msgstr "Spela upp ljud när vi loggar in" -#: ../data/empathy.schemas.in.h:35 +#: ../data/empathy.schemas.in.h:37 msgid "Play a sound when we log out" msgstr "Spela upp ljud när vi loggar ut" -#: ../data/empathy.schemas.in.h:36 +#: ../data/empathy.schemas.in.h:38 msgid "Popup notifications if the chat isn't focused" msgstr "Visa popupnotifieringar om chatten inte är fokuserad" -#: ../data/empathy.schemas.in.h:37 +#: ../data/empathy.schemas.in.h:39 msgid "Popup notifications when a contact sign in" msgstr "Visa popupnotifieringar när en kontakt loggar in" -#: ../data/empathy.schemas.in.h:38 +#: ../data/empathy.schemas.in.h:40 msgid "Popup notifications when a contact sign out" msgstr "Visa popupnotifieringar när en kontakt loggar ut" -#: ../data/empathy.schemas.in.h:39 +#: ../data/empathy.schemas.in.h:41 msgid "Salut account is created" msgstr "Salut-konto har skapats" -#: ../data/empathy.schemas.in.h:40 +#: ../data/empathy.schemas.in.h:42 msgid "Show avatars" msgstr "Visa avatarer" -#: ../data/empathy.schemas.in.h:41 +#: ../data/empathy.schemas.in.h:43 msgid "Show contact list in rooms" msgstr "Visa kontaktlista i rum" -#: ../data/empathy.schemas.in.h:42 +#: ../data/empathy.schemas.in.h:44 msgid "Show hint about closing the main window" msgstr "Visa tips om att stänga huvudfönstret" -#: ../data/empathy.schemas.in.h:43 +#: ../data/empathy.schemas.in.h:45 msgid "Show offline contacts" msgstr "Visa frÃ¥nkopplade kontakter" -#: ../data/empathy.schemas.in.h:44 +#: ../data/empathy.schemas.in.h:46 msgid "Spell checking languages" msgstr "RättstavningssprÃ¥k" -#: ../data/empathy.schemas.in.h:45 +#: ../data/empathy.schemas.in.h:47 msgid "The default folder to save file transfers in." msgstr "Standardmappen att spara filöverföringar i." -#: ../data/empathy.schemas.in.h:46 +#: ../data/empathy.schemas.in.h:48 msgid "The last directory that an avatar image was chosen from." msgstr "Den senaste katalogen som en avatarbild valdes frÃ¥n." -#: ../data/empathy.schemas.in.h:47 +#: ../data/empathy.schemas.in.h:49 msgid "The theme that is used to display the conversation in chat windows." msgstr "Det tema som används för att visa samtal i chattfönster." -#: ../data/empathy.schemas.in.h:48 +#: ../data/empathy.schemas.in.h:50 msgid "Use graphical smileys" msgstr "Använd grafiska smilisar" -#: ../data/empathy.schemas.in.h:49 +#: ../data/empathy.schemas.in.h:51 msgid "Use notification sounds" msgstr "Använd notifieringsljud" -#: ../data/empathy.schemas.in.h:50 +#: ../data/empathy.schemas.in.h:52 msgid "Use theme for chat rooms" msgstr "Använd tema för chattrum" -#: ../data/empathy.schemas.in.h:51 +#: ../data/empathy.schemas.in.h:53 msgid "Whether WebKit developer tools, such as the Web Inspector, should be enabled." msgstr "Huruvida utvecklingsverktyg för WebKit, sÃ¥som Webbinspekteraren, ska aktiveras." -#: ../data/empathy.schemas.in.h:52 +#: ../data/empathy.schemas.in.h:54 msgid "Whether or not Empathy can publish the user's location to his contacts." msgstr "Huruvida Empathy kan publicera användarens plats till kontakter eller inte." -#: ../data/empathy.schemas.in.h:53 +#: ../data/empathy.schemas.in.h:55 msgid "Whether or not Empathy can use the GPS to guess the location." msgstr "Huruvida Empathy kan använda GPS:en för att gissa platsen eller inte." -#: ../data/empathy.schemas.in.h:54 +#: ../data/empathy.schemas.in.h:56 msgid "Whether or not Empathy can use the cellular network to guess the location." msgstr "Huruvida Empathy kan använda mobiltelefonnätet för att gissa platsen eller inte." -#: ../data/empathy.schemas.in.h:55 +#: ../data/empathy.schemas.in.h:57 msgid "Whether or not Empathy can use the network to guess the location." msgstr "Huruvida Empathy kan använda nätverket för att gissa platsen eller inte." -#: ../data/empathy.schemas.in.h:56 +#: ../data/empathy.schemas.in.h:58 msgid "Whether or not Empathy has asked about importing accounts from other programs." msgstr "Huruvida Empathy har frÃ¥gat om att importera konton frÃ¥n andra program eller inte." -#: ../data/empathy.schemas.in.h:57 +#: ../data/empathy.schemas.in.h:59 msgid "Whether or not Empathy should automatically log in to your accounts on startup." msgstr "Huruvida Empathy automatiskt ska logga in med dina konton vid uppstart eller inte." -#: ../data/empathy.schemas.in.h:58 +#: ../data/empathy.schemas.in.h:60 msgid "Whether or not Empathy should reduce the location's accuracy for privacy reasons." msgstr "Huruvida Empathy ska minska platsens precision av integritetsskäl eller inte." -#: ../data/empathy.schemas.in.h:59 +#: ../data/empathy.schemas.in.h:61 msgid "Whether or not Empathy should use the avatar of the contact as the chat window icon." msgstr "Huruvida Empathy ska använda avataren för kontakten som chattfönsterikon eller inte." -#: ../data/empathy.schemas.in.h:60 +#: ../data/empathy.schemas.in.h:62 msgid "Whether or not connectivity managers should be used to automatically disconnect/reconnect." msgstr "Huruvida anslutningshanterare ska användas för att automatiskt koppla frÃ¥n/Ã¥teransluta eller inte." -#: ../data/empathy.schemas.in.h:61 +#: ../data/empathy.schemas.in.h:63 msgid "Whether or not the Salut account has been created on the first Empathy run." msgstr "Huruvida Salut-kontot har skapats eller inte vid första starten av Empathy." -#: ../data/empathy.schemas.in.h:62 +#: ../data/empathy.schemas.in.h:64 msgid "Whether or not to check words typed against the languages you want to check with." msgstr "Huruvida ord som skrivs ska kontrolleras mot sprÃ¥ken du valt." -#: ../data/empathy.schemas.in.h:63 +#: ../data/empathy.schemas.in.h:65 msgid "Whether or not to convert smileys into graphical images in conversations." msgstr "Huruvida smilisar ska omvandlas till grafiska bilder eller inte i samtal." -#: ../data/empathy.schemas.in.h:64 +#: ../data/empathy.schemas.in.h:66 msgid "Whether or not to play a sound to notify for contacts logging in the network." msgstr "Huruvida ett ljud ska spelas upp eller inte för kontakter som loggar in i nätverket." -#: ../data/empathy.schemas.in.h:65 +#: ../data/empathy.schemas.in.h:67 msgid "Whether or not to play a sound to notify for contacts logging off the network." msgstr "Huruvida ett ljud ska spelas upp eller inte för kontakter som loggar ut frÃ¥n nätverket." -#: ../data/empathy.schemas.in.h:66 +#: ../data/empathy.schemas.in.h:68 msgid "Whether or not to play a sound to notify for events." msgstr "Huruvida ett ljud ska spelas upp eller inte för att notifiera om händelser." -#: ../data/empathy.schemas.in.h:67 +#: ../data/empathy.schemas.in.h:69 msgid "Whether or not to play a sound to notify for incoming messages." msgstr "Huruvida ett ljud ska spelas upp eller inte för inkommande meddelanden." -#: ../data/empathy.schemas.in.h:68 +#: ../data/empathy.schemas.in.h:70 msgid "Whether or not to play a sound to notify for new conversations." msgstr "Huruvida ett ljud ska spelas upp eller inte för nya samtal." -#: ../data/empathy.schemas.in.h:69 +#: ../data/empathy.schemas.in.h:71 msgid "Whether or not to play a sound to notify for outgoing messages." msgstr "Huruvida ett ljud ska spelas upp eller inte för utgÃ¥ende meddelanden." -#: ../data/empathy.schemas.in.h:70 +#: ../data/empathy.schemas.in.h:72 msgid "Whether or not to play a sound when logging in a network." msgstr "Huruvida ett ljud ska spelas upp eller inte vid inloggning i ett nätverk." -#: ../data/empathy.schemas.in.h:71 +#: ../data/empathy.schemas.in.h:73 msgid "Whether or not to play a sound when logging off a network." msgstr "Huruvida ett ljud ska spelas upp eller inte vid utloggning frÃ¥n ett nätverk." -#: ../data/empathy.schemas.in.h:72 +#: ../data/empathy.schemas.in.h:74 msgid "Whether or not to play sound notifications when away or busy." msgstr "Huruvida ljudnotifieringar ska spelas upp eller inte vid frÃ¥nvaro eller upptagen." -#: ../data/empathy.schemas.in.h:73 +#: ../data/empathy.schemas.in.h:75 msgid "Whether or not to show a popup notification when a contact goes offline." msgstr "Huruvida popupnotifieringar ska visas eller inte när en kontakt kopplar frÃ¥n." -#: ../data/empathy.schemas.in.h:74 +#: ../data/empathy.schemas.in.h:76 msgid "Whether or not to show a popup notification when a contact goes online." msgstr "Huruvida popupnotifieringar ska visas eller inte när en kontakt ansluter." -#: ../data/empathy.schemas.in.h:75 +#: ../data/empathy.schemas.in.h:77 msgid "Whether or not to show a popup notification when receiving a new message even if the chat is already opened, but not focused." msgstr "Huruvida en popupnotifiering ska visas när ett nytt meddelande tas emot, även om chatten redan är öppnad, men inte fokuserad." -#: ../data/empathy.schemas.in.h:76 +#: ../data/empathy.schemas.in.h:78 msgid "Whether or not to show a popup notification when receiving a new message." msgstr "Huruvida en popupnotifiering ska visas eller inte när ett nytt meddelande tas emot." -#: ../data/empathy.schemas.in.h:77 +#: ../data/empathy.schemas.in.h:79 msgid "Whether or not to show avatars for contacts in the contact list and chat windows." msgstr "Huruvida avatarer ska visas i kontaktlistan och chattfönster eller inte." -#: ../data/empathy.schemas.in.h:78 +#: ../data/empathy.schemas.in.h:80 msgid "Whether or not to show contacts that are offline in the contact list." msgstr "Huruvida frÃ¥nkopplade kontakter ska visas i kontaktlistan eller inte." -#: ../data/empathy.schemas.in.h:79 +#: ../data/empathy.schemas.in.h:81 msgid "Whether or not to show popup notifications when away or busy." msgstr "Huruvida popupnotifieringar ska visas eller inte under frÃ¥nvaro eller upptagen." -#: ../data/empathy.schemas.in.h:80 +#: ../data/empathy.schemas.in.h:82 msgid "Whether or not to show the contact list in chat rooms." msgstr "Huruvida kontaktlistan ska visas i chattrum eller inte." -#: ../data/empathy.schemas.in.h:81 +#: ../data/empathy.schemas.in.h:83 msgid "Whether or not to show the message dialog about closing the main window with the 'x' button in the title bar." msgstr "Huruvida meddelandedialogen om att stänga huvudfönstret ska visas eller inte när man klickar pÃ¥ \"x\"-knappen i titelraden." -#: ../data/empathy.schemas.in.h:82 +#: ../data/empathy.schemas.in.h:84 msgid "Whether to show the contact list in compact mode or not." msgstr "Huruvida kontaktlistan ska visas i kompakt läge eller inte." -#: ../data/empathy.schemas.in.h:83 +#: ../data/empathy.schemas.in.h:85 msgid "Whether to use the theme for chat rooms or not." msgstr "Huruvida tema ska användas för chattrum eller inte." -#: ../data/empathy.schemas.in.h:84 +#: ../data/empathy.schemas.in.h:86 msgid "Which criterium to use when sorting the contact list. Default is to use sort by the contact's name with the value \"name\". A value of \"state\" will sort the contact list by state." msgstr "Vilket kriteria som ska användas när kontaktlistan sorteras. Standard är att sortera efter kontaktens namn med värdet \"name\". Värdet \"state\" kommer att sortera kontaktlistan efter tillstÃ¥nd." -#: ../libempathy/empathy-ft-handler.c:838 +#: ../libempathy/empathy-account.c:1086 +msgid "Can't set an empty display name" +msgstr "Kan inte ställa in ett tomt visningsnamn" + +#: ../libempathy/empathy-ft-handler.c:839 msgid "The hash of the received file and the sent one do not match" msgstr "Hashsumman för den mottagna filen och den som skickades stämmer inte överens" -#: ../libempathy/empathy-ft-handler.c:1098 +#: ../libempathy/empathy-ft-handler.c:1099 msgid "File transfer not supported by remote contact" msgstr "Filöverföringar stöds inte fjärrkontakten" -#: ../libempathy/empathy-ft-handler.c:1156 +#: ../libempathy/empathy-ft-handler.c:1157 msgid "The selected file is not a regular file" msgstr "Den valda filen är inte en vanlig fil" -#: ../libempathy/empathy-ft-handler.c:1165 +#: ../libempathy/empathy-ft-handler.c:1166 msgid "The selected file is empty" msgstr "Den valda filen är tom" -#: ../libempathy/empathy-tp-contact-list.c:843 -#: ../src/empathy.c:290 +#: ../libempathy/empathy-tp-contact-list.c:844 +#: ../src/empathy.c:285 msgid "People nearby" msgstr "Personer i närheten" -#: ../libempathy/empathy-tp-file.c:279 +#: ../libempathy/empathy-tp-file.c:280 msgid "Socket type not supported" msgstr "Uttagstypen stöds inte" -#: ../libempathy/empathy-tp-file.c:398 +#: ../libempathy/empathy-tp-file.c:399 msgid "No reason was specified" msgstr "Ingen anledning angavs" -#: ../libempathy/empathy-tp-file.c:401 +#: ../libempathy/empathy-tp-file.c:402 msgid "The change in state was requested" msgstr "Ändring i tillstÃ¥nd begärdes" -#: ../libempathy/empathy-tp-file.c:404 +#: ../libempathy/empathy-tp-file.c:405 msgid "You canceled the file transfer" msgstr "Du avbröt filöverföringen" -#: ../libempathy/empathy-tp-file.c:407 +#: ../libempathy/empathy-tp-file.c:408 msgid "The other participant canceled the file transfer" msgstr "Den andra deltagaren avbröt filöverföringen" -#: ../libempathy/empathy-tp-file.c:410 +#: ../libempathy/empathy-tp-file.c:411 msgid "Error while trying to transfer the file" msgstr "Fel vid försök att överföra filen" -#: ../libempathy/empathy-tp-file.c:413 +#: ../libempathy/empathy-tp-file.c:414 msgid "The other participant is unable to transfer the file" msgstr "Den andra deltagaren kunde inte överföra filen" -#: ../libempathy/empathy-tp-file.c:416 +#: ../libempathy/empathy-tp-file.c:417 msgid "Unknown reason" msgstr "Okänd anledning" -#: ../libempathy/empathy-utils.c:265 +#: ../libempathy/empathy-utils.c:235 msgid "Available" msgstr "Tillgänglig" -#: ../libempathy/empathy-utils.c:267 +#: ../libempathy/empathy-utils.c:237 msgid "Busy" msgstr "Upptagen" -#: ../libempathy/empathy-utils.c:270 +#: ../libempathy/empathy-utils.c:240 msgid "Away" msgstr "FrÃ¥nvarande" -#: ../libempathy/empathy-utils.c:272 +#: ../libempathy/empathy-utils.c:242 msgid "Hidden" msgstr "Dold" -#: ../libempathy/empathy-utils.c:274 +#: ../libempathy/empathy-utils.c:244 msgid "Offline" msgstr "FrÃ¥nkopplad" +#: ../libempathy/empathy-utils.c:379 +#: ../src/empathy-import-mc4-accounts.c:104 +msgid "People Nearby" +msgstr "Personer i närheten" + +#: ../libempathy/empathy-utils.c:384 +msgid "Yahoo! Japan" +msgstr "Yahoo! Japan" + +#: ../libempathy/empathy-utils.c:385 +msgid "Facebook Chat" +msgstr "Facebook-chatt" + #: ../libempathy/empathy-time.c:137 #, c-format msgid "%d second ago" @@ -486,77 +511,118 @@ msgstr[1] "%d mÃ¥nader sedan" msgid "in the future" msgstr "i framtiden" -#: ../libempathy-gtk/empathy-account-chooser.c:426 +#: ../libempathy-gtk/empathy-account-chooser.c:424 msgid "All" msgstr "Alla" -#: ../libempathy-gtk/empathy-account-widget.c:302 -#: ../libempathy-gtk/empathy-account-widget.c:354 +#: ../libempathy-gtk/empathy-account-widget.c:448 +#: ../libempathy-gtk/empathy-account-widget.c:504 #, c-format msgid "%s:" msgstr "%s:" +#: ../libempathy-gtk/empathy-account-widget.c:1224 +msgid "Enabled" +msgstr "Aktiverad" + #: ../libempathy-gtk/empathy-account-widget-aim.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> MyScreenName</span>" +msgstr "<span size=\"small\"><b>Exempel:</b> MittSkärmnamn</span>" + +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:2 #: ../libempathy-gtk/empathy-account-widget-generic.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:2 msgid "Advanced" msgstr "Avancerat" -#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:2 -#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:3 -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:3 -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:3 -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:3 msgid "Pass_word:" msgstr "L_ösenord:" -#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:4 msgid "Screen _Name:" msgstr "Skärm_namn:" -#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:5 -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:10 -#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:5 +msgid "What is your AIM password?" +msgstr "Vad är ditt AIM-lösenord?" + +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:6 +msgid "What is your AIM screen name?" +msgstr "Vad är ditt AIM-skärmnamn?" + +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:15 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:10 msgid "_Port:" msgstr "_Port:" -#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:5 -#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:5 -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:6 -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:11 -#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:5 -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:9 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:16 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:12 #: ../src/empathy-new-chatroom-dialog.ui.h:9 msgid "_Server:" msgstr "_Server:" -#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:2 -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:2 -#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> username</span>" +msgstr "<span size=\"small\"><b>Exempel:</b> användarnamn</span>" + +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:3 msgid "Login I_D:" msgstr "Inloggningsi_d:" -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:5 +msgid "What is your GroupWise User ID?" +msgstr "Vad är ditt användar-id för GroupWise?" + +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:6 +msgid "What is your GroupWise password?" +msgstr "Vad är ditt lösenord för GroupWise?" + +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> 123456789</span>" +msgstr "<span size=\"small\"><b>Exempel:</b> 123456789</span>" + +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:3 msgid "ICQ _UIN:" msgstr "ICQ _UIN:" -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:5 +msgid "What is your ICQ UIN?" +msgstr "Vad är ditt ICQ UIN?" + +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:6 +msgid "What is your ICQ password?" +msgstr "Vad är ditt ICQ-lösenord?" + +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:8 msgid "_Charset:" msgstr "Tec_kenuppsättning:" -#: ../libempathy-gtk/empathy-account-widget-irc.c:240 +#: ../libempathy-gtk/empathy-account-widget-irc.c:244 msgid "New Network" msgstr "Nytt nätverk" @@ -592,84 +658,136 @@ msgstr "Verkligt namn:" msgid "Servers" msgstr "Servrar" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> user@jabber.org</span>" +msgstr "<span size=\"small\"><b>Exempel:</b> användare@jabber.org</span>" + +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:4 msgid "Override server settings" msgstr "Ã…sidosätt serverinställningar" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:6 msgid "Pri_ority:" msgstr "Pri_oritet:" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:6 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7 msgid "Reso_urce:" msgstr "_Resurs:" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:8 msgid "Use old SS_L" msgstr "Använd gammal SS_L" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:9 +msgid "What is your Jabber ID?" +msgstr "Vad är ditt Jabber ID?" + +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:10 +msgid "What is your Jabber password?" +msgstr "Vad är ditt Jabber-lösenord?" + +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:11 +msgid "What is your desired Jabber ID?" +msgstr "Vilket Jabber ID vill du använda?" + +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:12 +msgid "What is your desired Jabber password?" +msgstr "Vilket lösenord vill du använda för Jabber?" + +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:13 msgid "_Encryption required (TLS/SSL)" msgstr "_Kryptering krävs (TLS/SSL)" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:9 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:14 msgid "_Ignore SSL certificate errors" msgstr "_Ignorera SSL-certifikatfel" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> user@hotmail.com</span>" +msgstr "<span size=\"small\"><b>Exempel:</b> användare@hotmail.com</span>" + +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:5 +msgid "What is your Windows Live password?" +msgstr "Vad är ditt lösenord för Windows Live?" + +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:6 +msgid "What is your Windows Live user name?" +msgstr "Vad är ditt användarnamn för Windows Live?" + +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:2 msgid "_Email:" msgstr "_E-post:" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:3 msgid "_First Name:" msgstr "_Förnamn:" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:4 msgid "_Jabber ID:" msgstr "_Jabber-id:" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:5 msgid "_Last Name:" msgstr "_Efternamn:" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:6 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:6 msgid "_Nickname:" msgstr "Smek_namn:" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:7 msgid "_Published Name:" msgstr "_Publikt namn:" +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> user@my.sip.server</span>" +msgstr "<span size=\"small\"><b>Exempel:</b> användare@min.sip.server</span>" + #. look up the DNS SRV record at the service's domain for the host name of a STUN server. -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:4 msgid "Discover STUN" msgstr "Upptäck STUN" -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:6 msgid "STUN Server:" msgstr "STUN-server:" -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:6 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:7 msgid "STUN port:" msgstr "STUN-port:" -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:8 +msgid "What is your SIP account password?" +msgstr "Vad är lösenordet för ditt SIP-konto?" + +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:9 +msgid "What is your SIP login ID?" +msgstr "Vad är ditt inloggnings-id för SIP?" + +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:10 msgid "_Username:" msgstr "A_nvändarnamn:" -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:4 msgid "Use _Yahoo Japan" msgstr "Använd _Yahoo Japan" -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:5 +msgid "What is your Yahoo! ID?" +msgstr "Vad är ditt Yahoo! ID?" + +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:6 +msgid "What is your Yahoo! password?" +msgstr "Vad är ditt Yahoo!-lösenord?" + +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:7 msgid "Yahoo I_D:" msgstr "Yahoo-I_D:" -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:6 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9 msgid "_Ignore conference and chatroom invitations" msgstr "_Ignorera inbjudningar till konferenser och chattrum" -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:11 msgid "_Room List locale:" msgstr "Lokalanpassning för _rumslista:" @@ -706,67 +824,67 @@ msgstr "Klicka för att förstora" msgid "Failed to reconnect this chat" msgstr "Misslyckades med att Ã¥teransluta till denna chatt" -#: ../libempathy-gtk/empathy-chat.c:412 +#: ../libempathy-gtk/empathy-chat.c:413 msgid "Unsupported command" msgstr "Kommandot stöds inte" -#: ../libempathy-gtk/empathy-chat.c:548 +#: ../libempathy-gtk/empathy-chat.c:549 msgid "offline" msgstr "frÃ¥nkopplad" -#: ../libempathy-gtk/empathy-chat.c:551 +#: ../libempathy-gtk/empathy-chat.c:552 msgid "invalid contact" msgstr "ogiltig kontakt" -#: ../libempathy-gtk/empathy-chat.c:554 +#: ../libempathy-gtk/empathy-chat.c:555 msgid "permission denied" msgstr "Ã¥tkomst nekad" -#: ../libempathy-gtk/empathy-chat.c:557 +#: ../libempathy-gtk/empathy-chat.c:558 msgid "too long message" msgstr "för lÃ¥ngt meddelande" -#: ../libempathy-gtk/empathy-chat.c:560 +#: ../libempathy-gtk/empathy-chat.c:561 msgid "not implemented" msgstr "inte implementerat" -#: ../libempathy-gtk/empathy-chat.c:563 +#: ../libempathy-gtk/empathy-chat.c:564 msgid "unknown" msgstr "okänt" -#: ../libempathy-gtk/empathy-chat.c:567 +#: ../libempathy-gtk/empathy-chat.c:568 #, c-format msgid "Error sending message '%s': %s" msgstr "Fel vid sändning av meddelandet \"%s\": %s" -#: ../libempathy-gtk/empathy-chat.c:597 +#: ../libempathy-gtk/empathy-chat.c:598 #, c-format msgid "Topic set to: %s" msgstr "Ämnet inställt till: %s" -#: ../libempathy-gtk/empathy-chat.c:599 +#: ../libempathy-gtk/empathy-chat.c:600 msgid "No topic defined" msgstr "Inget ämne definierat" -#: ../libempathy-gtk/empathy-chat.c:969 +#: ../libempathy-gtk/empathy-chat.c:970 msgid "(No Suggestions)" msgstr "(Inga förslag)" -#: ../libempathy-gtk/empathy-chat.c:1023 +#: ../libempathy-gtk/empathy-chat.c:1024 msgid "Insert Smiley" msgstr "Infoga smilis" #. send button -#: ../libempathy-gtk/empathy-chat.c:1041 -#: ../libempathy-gtk/empathy-ui-utils.c:1483 +#: ../libempathy-gtk/empathy-chat.c:1042 +#: ../libempathy-gtk/empathy-ui-utils.c:1471 msgid "_Send" msgstr "_Skicka" -#: ../libempathy-gtk/empathy-chat.c:1075 +#: ../libempathy-gtk/empathy-chat.c:1076 msgid "_Spelling Suggestions" msgstr "Sta_vningsförslag" -#: ../libempathy-gtk/empathy-chat.c:1190 +#: ../libempathy-gtk/empathy-chat.c:1191 #, c-format msgid "%s has disconnected" msgstr "%s har kopplat frÃ¥n" @@ -774,12 +892,12 @@ msgstr "%s har kopplat frÃ¥n" #. translators: reverse the order of these arguments #. * if the kicked should come before the kicker in your locale. #. -#: ../libempathy-gtk/empathy-chat.c:1197 +#: ../libempathy-gtk/empathy-chat.c:1198 #, c-format msgid "%1$s was kicked by %2$s" msgstr "%1$s sparkades ut av %2$s" -#: ../libempathy-gtk/empathy-chat.c:1200 +#: ../libempathy-gtk/empathy-chat.c:1201 #, c-format msgid "%s was kicked" msgstr "%s sparkades ut" @@ -787,17 +905,17 @@ msgstr "%s sparkades ut" #. translators: reverse the order of these arguments #. * if the banned should come before the banner in your locale. #. -#: ../libempathy-gtk/empathy-chat.c:1208 +#: ../libempathy-gtk/empathy-chat.c:1209 #, c-format msgid "%1$s was banned by %2$s" msgstr "%1$s blev bannlyst av %2$s" -#: ../libempathy-gtk/empathy-chat.c:1211 +#: ../libempathy-gtk/empathy-chat.c:1212 #, c-format msgid "%s was banned" msgstr "%s blev bannlyst" -#: ../libempathy-gtk/empathy-chat.c:1215 +#: ../libempathy-gtk/empathy-chat.c:1216 #, c-format msgid "%s has left the room" msgstr "%s har lämnat rummet" @@ -807,44 +925,44 @@ msgstr "%s har lämnat rummet" #. * given by the user living the room. If this poses a problem, #. * please let us know. :-) #. -#: ../libempathy-gtk/empathy-chat.c:1224 +#: ../libempathy-gtk/empathy-chat.c:1225 #, c-format msgid " (%s)" msgstr " (%s)" -#: ../libempathy-gtk/empathy-chat.c:1247 +#: ../libempathy-gtk/empathy-chat.c:1248 #, c-format msgid "%s has joined the room" msgstr "%s har gÃ¥tt in i rummet" -#: ../libempathy-gtk/empathy-chat.c:1380 +#: ../libempathy-gtk/empathy-chat.c:1381 #: ../src/empathy-call-window.c:1277 msgid "Disconnected" msgstr "FrÃ¥nkopplad" -#: ../libempathy-gtk/empathy-chat.c:1815 +#: ../libempathy-gtk/empathy-chat.c:1817 msgid "Connected" msgstr "Ansluten" -#: ../libempathy-gtk/empathy-chat.c:1865 +#: ../libempathy-gtk/empathy-chat.c:1867 #: ../libempathy-gtk/empathy-log-window.c:502 msgid "Conversation" msgstr "Samtal" #: ../libempathy-gtk/empathy-chat.ui.h:1 -#: ../src/empathy-chat-window.c:472 +#: ../src/empathy-chat-window.c:471 msgid "Topic:" msgstr "Ämne:" #. Copy Link Address menu item #: ../libempathy-gtk/empathy-chat-text-view.c:316 -#: ../libempathy-gtk/empathy-theme-adium.c:267 +#: ../libempathy-gtk/empathy-theme-adium.c:266 msgid "_Copy Link Address" msgstr "_Kopiera länkadress" #. Open Link menu item #: ../libempathy-gtk/empathy-chat-text-view.c:323 -#: ../libempathy-gtk/empathy-theme-adium.c:275 +#: ../libempathy-gtk/empathy-theme-adium.c:274 msgid "_Open Link" msgstr "_Öppna länk" @@ -854,16 +972,16 @@ msgstr "_Öppna länk" msgid "%A %B %d %Y" msgstr "%A %e %B %Y" -#: ../libempathy-gtk/empathy-contact-dialogs.c:179 -#: ../libempathy-gtk/empathy-contact-dialogs.c:238 +#: ../libempathy-gtk/empathy-contact-dialogs.c:177 +#: ../libempathy-gtk/empathy-contact-dialogs.c:236 msgid "Edit Contact Information" msgstr "Redigera kontaktinformation" -#: ../libempathy-gtk/empathy-contact-dialogs.c:289 +#: ../libempathy-gtk/empathy-contact-dialogs.c:287 msgid "Personal Information" msgstr "Personlig information" -#: ../libempathy-gtk/empathy-contact-dialogs.c:394 +#: ../libempathy-gtk/empathy-contact-dialogs.c:392 msgid "New Contact" msgstr "Ny kontakt" @@ -966,7 +1084,7 @@ msgid "Select" msgstr "Markera" #: ../libempathy-gtk/empathy-contact-widget.c:1009 -#: ../src/empathy-main-window.c:1023 +#: ../src/empathy-main-window.c:1019 msgid "Group" msgstr "Grupp" @@ -1106,13 +1224,13 @@ msgid "Client:" msgstr "Klient:" #: ../libempathy-gtk/empathy-contact-widget.ui.h:7 -#: ../src/empathy-main-window.c:1006 +#: ../src/empathy-main-window.c:1002 msgid "Contact" msgstr "Kontakt" #: ../libempathy-gtk/empathy-contact-widget.ui.h:8 msgid "Contact Details" -msgstr "Kontaktdetaljer" +msgstr "Kontaktuppgifter" #: ../libempathy-gtk/empathy-contact-widget.ui.h:9 msgid "Email:" @@ -1156,24 +1274,24 @@ msgstr "Webbplats:" msgid "_Add Group" msgstr "_Lägg till grupp" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:283 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:281 msgid "new server" msgstr "ny server" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:510 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:508 msgid "Server" msgstr "Server" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:525 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:523 msgid "Port" msgstr "Port" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:538 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:536 msgid "SSL" msgstr "SSL" #: ../libempathy-gtk/empathy-log-window.c:495 -#: ../src/empathy-import-dialog.c:285 +#: ../src/empathy-import-widget.c:321 msgid "Account" msgstr "Konto" @@ -1322,15 +1440,15 @@ msgstr "Rent" msgid "Blue" msgstr "BlÃ¥tt" -#: ../libempathy-gtk/empathy-ui-utils.c:1385 +#: ../libempathy-gtk/empathy-ui-utils.c:1373 msgid "Unable to open URI" msgstr "Kunde inte öppna uri" -#: ../libempathy-gtk/empathy-ui-utils.c:1475 +#: ../libempathy-gtk/empathy-ui-utils.c:1463 msgid "Select a file" msgstr "Välj en fil" -#: ../libempathy-gtk/empathy-ui-utils.c:1535 +#: ../libempathy-gtk/empathy-ui-utils.c:1523 msgid "Select a destination" msgstr "Välj ett mÃ¥l" @@ -1518,7 +1636,7 @@ msgid "Megaphone" msgstr "Megaphone" #: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2 -#: ../megaphone/src/megaphone-applet.c:519 +#: ../megaphone/src/megaphone-applet.c:518 msgid "Talk!" msgstr "Prata!" @@ -1536,11 +1654,11 @@ msgstr "_Information" msgid "_Preferences" msgstr "In_ställningar" -#: ../megaphone/src/megaphone-applet.c:168 +#: ../megaphone/src/megaphone-applet.c:166 msgid "Please configure a contact." msgstr "Konfigurera en kontakt." -#: ../megaphone/src/megaphone-applet.c:258 +#: ../megaphone/src/megaphone-applet.c:256 msgid "Select contact..." msgstr "Välj kontakt..." @@ -1549,23 +1667,23 @@ msgid "Presence" msgstr "Närvaro" #: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2 -#: ../nothere/src/nothere-applet.c:106 +#: ../nothere/src/nothere-applet.c:105 msgid "Set your own presence" msgstr "Ställ in din egna närvaro" -#: ../src/empathy.c:569 +#: ../src/empathy.c:588 msgid "Don't connect on startup" msgstr "Anslut inte vid uppstart" -#: ../src/empathy.c:573 +#: ../src/empathy.c:592 msgid "Don't show the contact list on startup" msgstr "Visa inte kontaktlistan vid uppstart" -#: ../src/empathy.c:577 +#: ../src/empathy.c:596 msgid "Show the accounts dialog" msgstr "Visa kontodialogrutan" -#: ../src/empathy.c:589 +#: ../src/empathy.c:608 msgid "- Empathy IM Client" msgstr "- Empathy snabbmeddelandeklient" @@ -1595,22 +1713,124 @@ msgstr "" "Skicka synpunkter pÃ¥ översättningen till\n" "tp-sv@listor.tp-sv.se" -#: ../src/empathy-accounts-dialog.c:392 -msgid "Enabled" -msgstr "Aktiverad" +#. translators: this is followed by the "while ..." strings some lines +#. * down this file. +#. +#: ../src/empathy-account-assistant.c:121 +msgid "There has been an error " +msgstr "Det inträffade ett fel " + +#. translators: this follows the "There has been an error " string +#: ../src/empathy-account-assistant.c:125 +msgid "while importing the accounts." +msgstr "när konton importerades." + +#. translators: this follows the "There has been an error " string +#: ../src/empathy-account-assistant.c:129 +msgid "while parsing the account details." +msgstr "vid tolkning av kontouppgifterna." + +#. translators: this follows the "There has been an error " string +#: ../src/empathy-account-assistant.c:133 +msgid "while creating the account." +msgstr "när kontot skapades." + +#: ../src/empathy-account-assistant.c:151 +#, c-format +msgid "The error message was: <span style=\"italic\">%s</span>" +msgstr "Felmeddelandet var: <span style=\"italic\">%s</span>" -#: ../src/empathy-accounts-dialog.c:402 -#: ../src/empathy-accounts-dialog.ui.h:1 -msgid "Accounts" -msgstr "Konton" +#: ../src/empathy-account-assistant.c:159 +msgid "You can either go back and try to enter your accounts' details again or quit this wizard and add accounts later from the Edit menu." +msgstr "Du kan antingen gÃ¥ tillbaka och försöka att ange dina kontouppgifter igen eller avsluta denna guide och lägga till konton senare frÃ¥n Redigera-menyn." +#: ../src/empathy-account-assistant.c:194 +msgid "An error occurred" +msgstr "Ett fel inträffade" + +#. Create account #. To translator: %s is the protocol name -#: ../src/empathy-accounts-dialog.c:837 +#. Create account +#. To translator: %s is the name of the protocol, such as "Google Talk" or +#. * "Yahoo! +#. +#: ../src/empathy-account-assistant.c:330 +#: ../src/empathy-accounts-dialog.c:1101 #, c-format msgid "New %s account" msgstr "Nytt %s-konto" -#: ../src/empathy-accounts-dialog.c:950 +#: ../src/empathy-account-assistant.c:397 +msgid "What kind of chat account do you have?" +msgstr "Vilken typ av chattkonto har du?" + +#: ../src/empathy-account-assistant.c:403 +msgid "Do you have any other chat accounts you want to set up?" +msgstr "Har du ytterligare chattkonton som du vill konfigurera?" + +#: ../src/empathy-account-assistant.c:409 +msgid "Enter your account details" +msgstr "Ange dina kontouppgifter" + +#: ../src/empathy-account-assistant.c:414 +msgid "What kind of chat account do you want to create?" +msgstr "Vilken typ av chattkonto vill du skapa?" + +#: ../src/empathy-account-assistant.c:420 +msgid "Do you want to create other chat accounts?" +msgstr "Vill du skapa andra chattkonton?" + +#: ../src/empathy-account-assistant.c:427 +msgid "Enter the details for the new account" +msgstr "Ange uppgifterna för det nya kontot" + +#: ../src/empathy-account-assistant.c:513 +msgid "With Empathy you can chat with people online nearby and with friends and colleagues who use Google Talk, AIM, Windows Live and many other chat programs. With a microphone or a webcam you can also have audio or video calls." +msgstr "Med Empathy kan du chatta med anslutna personer i närheten och med vänner och kollegor som använder Google Talk, AIM, Windows Live och mÃ¥nga andra chattprogram. Du kan även använda ljud- och videosamtal om du har en mikrofon eller webbkamera." + +#: ../src/empathy-account-assistant.c:530 +msgid "Do you have an account you've been using with another chat program?" +msgstr "Har du ett konto som du har använt med andra chattprogram?" + +#: ../src/empathy-account-assistant.c:553 +msgid "Yes, import my account details from " +msgstr "Ja, importera mina kontouppgifter frÃ¥n " + +#: ../src/empathy-account-assistant.c:574 +msgid "Yes, I'll enter my account details now" +msgstr "Ja, jag vill ange mina kontouppgifter nu" + +#: ../src/empathy-account-assistant.c:596 +msgid "No, I want a new account" +msgstr "Nej, jag vill ha ett nytt konto" + +#: ../src/empathy-account-assistant.c:606 +msgid "No, I just want to see people online nearby for now" +msgstr "Nej, jag vill bara se anslutna personer i närheten just nu" + +#: ../src/empathy-account-assistant.c:627 +msgid "Select the accounts you want to import:" +msgstr "Välj de konton som du vill importera:" + +#: ../src/empathy-account-assistant.c:714 +#: ../src/empathy-new-chatroom-dialog.c:496 +#: ../src/empathy-new-chatroom-dialog.c:497 +msgid "Yes" +msgstr "Ja" + +#: ../src/empathy-account-assistant.c:721 +msgid "No, that's all for now" +msgstr "Nej, det är allt för stunden" + +#: ../src/empathy-account-assistant.c:914 +msgid "Welcome to Empathy" +msgstr "Välkommen till Empathy" + +#: ../src/empathy-account-assistant.c:923 +msgid "Import your existing accounts" +msgstr "Importera dina befintliga konton" + +#: ../src/empathy-accounts-dialog.c:616 #, c-format msgid "" "You are about to remove your %s account!\n" @@ -1619,7 +1839,7 @@ msgstr "" "Du hÃ¥ller pÃ¥ att ta bort kontot %s!\n" "Är du säker att du vill fortsätta?" -#: ../src/empathy-accounts-dialog.c:956 +#: ../src/empathy-accounts-dialog.c:622 msgid "" "Any associated conversations and chat rooms will NOT be removed if you decide to proceed.\n" "\n" @@ -1629,50 +1849,42 @@ msgstr "" "\n" "Om du senare lägger till kontot igen, kommer dessa fortfarande vara tillgängliga." +#: ../src/empathy-accounts-dialog.ui.h:1 +msgid "Accounts" +msgstr "Konton" + #: ../src/empathy-accounts-dialog.ui.h:2 -msgid "Add Account" -msgstr "Lägg till konto" +msgid "Add new" +msgstr "Lägg till ny" #: ../src/empathy-accounts-dialog.ui.h:3 msgid "Cr_eate" msgstr "Ska_pa" #: ../src/empathy-accounts-dialog.ui.h:4 -msgid "Gmail" -msgstr "Gmail" - -#: ../src/empathy-accounts-dialog.ui.h:5 -msgid "Import Accounts..." -msgstr "Importera konton..." - -#: ../src/empathy-accounts-dialog.ui.h:6 msgid "No protocol installed" msgstr "Inga protokoll installerade" -#: ../src/empathy-accounts-dialog.ui.h:7 -msgid "Settings" -msgstr "Inställningar" - -#: ../src/empathy-accounts-dialog.ui.h:8 +#: ../src/empathy-accounts-dialog.ui.h:5 msgid "To add a new account, you first have to install a backend for each protocol you want to use." msgstr "För att lägga till ett nytt konto mÃ¥ste du först installera en bakände för varje protokoll som du vill använda." -#: ../src/empathy-accounts-dialog.ui.h:9 -msgid "Type:" -msgstr "Typ:" - -#: ../src/empathy-accounts-dialog.ui.h:10 +#: ../src/empathy-accounts-dialog.ui.h:6 msgid "_Add..." msgstr "_Lägg till..." -#: ../src/empathy-accounts-dialog.ui.h:11 +#: ../src/empathy-accounts-dialog.ui.h:7 msgid "_Create a new account" msgstr "_Skapa ett nytt konto" -#: ../src/empathy-accounts-dialog.ui.h:12 +#: ../src/empathy-accounts-dialog.ui.h:8 msgid "_Reuse an existing account" msgstr "_Ã…teranvänd ett befintligt konto" +#: ../src/empathy-accounts-dialog.ui.h:9 +msgid "account" +msgstr "konto" + #: ../src/empathy-call-window.c:426 msgid "Contrast" msgstr "Kontrast" @@ -1756,12 +1968,12 @@ msgstr "_Ring" msgid "_View" msgstr "_Visa" -#: ../src/empathy-chat-window.c:344 +#: ../src/empathy-chat-window.c:343 #, c-format msgid "Conversations (%d)" msgstr "Samtal (%d)" -#: ../src/empathy-chat-window.c:476 +#: ../src/empathy-chat-window.c:475 msgid "Typing a message." msgstr "Skriver ett meddelande." @@ -1844,75 +2056,75 @@ msgstr "Anslut automatiskt" msgid "Manage Favorite Rooms" msgstr "Hantera favoritrum" -#: ../src/empathy-event-manager.c:321 +#: ../src/empathy-event-manager.c:322 msgid "Incoming call" msgstr "Inkommande samtal" -#: ../src/empathy-event-manager.c:324 +#: ../src/empathy-event-manager.c:325 #, c-format msgid "%s is calling you, do you want to answer?" msgstr "%s ringer dig. Vill du svara?" -#: ../src/empathy-event-manager.c:331 +#: ../src/empathy-event-manager.c:332 msgid "_Reject" msgstr "Avv_isa" -#: ../src/empathy-event-manager.c:337 +#: ../src/empathy-event-manager.c:338 msgid "_Answer" msgstr "_Svara" -#: ../src/empathy-event-manager.c:452 +#: ../src/empathy-event-manager.c:453 #, c-format msgid "Incoming call from %s" msgstr "Inkommande samtal frÃ¥n %s" -#: ../src/empathy-event-manager.c:496 +#: ../src/empathy-event-manager.c:497 #, c-format msgid "%s is offering you an invitation" msgstr "%s erbjuder dig en inbjudan" -#: ../src/empathy-event-manager.c:502 +#: ../src/empathy-event-manager.c:503 msgid "An external application will be started to handle it." msgstr "Ett externt program kommer att startas för att hantera den." -#: ../src/empathy-event-manager.c:507 +#: ../src/empathy-event-manager.c:508 msgid "You don't have the needed external application to handle it." msgstr "Du har inte det nödvändiga externa programmet att hantera den med." -#: ../src/empathy-event-manager.c:634 +#: ../src/empathy-event-manager.c:635 msgid "Room invitation" msgstr "Rumsinbjudan" -#: ../src/empathy-event-manager.c:637 +#: ../src/empathy-event-manager.c:638 #, c-format msgid "%s is inviting you to join %s" msgstr "%s bjuder in dig till %s" -#: ../src/empathy-event-manager.c:645 +#: ../src/empathy-event-manager.c:646 msgid "_Decline" msgstr "_Neka" -#: ../src/empathy-event-manager.c:650 +#: ../src/empathy-event-manager.c:651 #: ../src/empathy-new-chatroom-dialog.ui.h:7 msgid "_Join" msgstr "_GÃ¥ in" -#: ../src/empathy-event-manager.c:689 +#: ../src/empathy-event-manager.c:690 #, c-format msgid "%s invited you to join %s" msgstr "%s har bjudit in dig till %s" -#: ../src/empathy-event-manager.c:715 +#: ../src/empathy-event-manager.c:716 #, c-format msgid "Incoming file transfer from %s" msgstr "Inkommande filöverföring frÃ¥n %s" -#: ../src/empathy-event-manager.c:895 +#: ../src/empathy-event-manager.c:896 #, c-format msgid "Subscription requested by %s" msgstr "Prenumeration begärd av %s" -#: ../src/empathy-event-manager.c:899 +#: ../src/empathy-event-manager.c:900 #, c-format msgid "" "\n" @@ -1922,13 +2134,13 @@ msgstr "" "Meddelande: %s" #. someone is logging off -#: ../src/empathy-event-manager.c:935 +#: ../src/empathy-event-manager.c:936 #, c-format msgid "%s is now offline." msgstr "%s är nu frÃ¥nkopplad." #. someone is logging in -#: ../src/empathy-event-manager.c:951 +#: ../src/empathy-event-manager.c:952 #, c-format msgid "%s is now online." msgstr "%s är nu ansluten." @@ -2047,88 +2259,93 @@ msgstr "Filöverföringar" msgid "Remove completed, canceled and failed file transfers from the list" msgstr "Ta bort färdiga, avbrutna och misslyckade filöverföringar frÃ¥n listan" +#: ../src/empathy-import-dialog.c:84 +msgid "No accounts to import could be found. Empathy currently only supports importing accounts from Pidgin." +msgstr "Inga konton att importera kunde hittas. Empathy har för närvarande endast stöd för att importera konton frÃ¥n Pidgin." + +#: ../src/empathy-import-dialog.c:199 +msgid "Import Accounts" +msgstr "Importera konton" + #. Translators: this is the header of a treeview column -#: ../src/empathy-import-dialog.c:263 +#: ../src/empathy-import-widget.c:301 msgid "Import" msgstr "Importera" -#: ../src/empathy-import-dialog.c:272 +#: ../src/empathy-import-widget.c:310 msgid "Protocol" msgstr "Protokoll" -#: ../src/empathy-import-dialog.c:298 +#: ../src/empathy-import-widget.c:334 msgid "Source" msgstr "Källa" -#: ../src/empathy-import-dialog.c:392 -msgid "No accounts to import could be found. Empathy currently only supports importing accounts from Pidgin." -msgstr "Inga konton att importera kunde hittas. Empathy har för närvarande endast stöd för att importera konton frÃ¥n Pidgin." - -#: ../src/empathy-import-dialog.ui.h:1 -msgid "Import Accounts" -msgstr "Importera konton" +#: ../src/empathy-import-mc4-accounts.c:106 +#, c-format +msgid "%s account" +msgstr "%s konto" -#: ../src/empathy-main-window.c:402 +#: ../src/empathy-main-window.c:399 msgid "_Edit account" msgstr "_Redigera konto" -#: ../src/empathy-main-window.c:505 +#: ../src/empathy-main-window.c:502 msgid "No error specified" msgstr "Inget fel angivet" -#: ../src/empathy-main-window.c:508 +#: ../src/empathy-main-window.c:505 msgid "Network error" msgstr "Nätverksfel" -#: ../src/empathy-main-window.c:511 +#: ../src/empathy-main-window.c:508 msgid "Authentication failed" msgstr "Autentisering misslyckades" -#: ../src/empathy-main-window.c:514 +#: ../src/empathy-main-window.c:511 msgid "Encryption error" msgstr "Krypteringsfel" -#: ../src/empathy-main-window.c:517 +#: ../src/empathy-main-window.c:514 msgid "Name in use" msgstr "Namnet används" -#: ../src/empathy-main-window.c:520 +#: ../src/empathy-main-window.c:517 msgid "Certificate not provided" msgstr "Certifikat inte tillhandahÃ¥llet" -#: ../src/empathy-main-window.c:523 +#: ../src/empathy-main-window.c:520 msgid "Certificate untrusted" msgstr "Certifikatet är inte betrott" -#: ../src/empathy-main-window.c:526 +#: ../src/empathy-main-window.c:523 msgid "Certificate expired" msgstr "Certifikatet har gÃ¥tt ut" -#: ../src/empathy-main-window.c:529 +#: ../src/empathy-main-window.c:526 msgid "Certificate not activated" msgstr "Certifikatet är inte aktiverat" -#: ../src/empathy-main-window.c:532 +#: ../src/empathy-main-window.c:529 msgid "Certificate hostname mismatch" msgstr "Värdnamnet i certifikatet stämmer inte" -#: ../src/empathy-main-window.c:535 +#: ../src/empathy-main-window.c:532 msgid "Certificate fingerprint mismatch" msgstr "Certifikatets fingeravtryck stämmer inte" -#: ../src/empathy-main-window.c:538 +#: ../src/empathy-main-window.c:535 msgid "Certificate self-signed" msgstr "Självsignerat certifikat" -#: ../src/empathy-main-window.c:541 +#: ../src/empathy-main-window.c:538 msgid "Certificate error" msgstr "Certifikatfel" -#: ../src/empathy-main-window.c:544 +#: ../src/empathy-main-window.c:541 msgid "Unknown error" msgstr "Okänt fel" -#: ../src/empathy-main-window.c:1293 +#: ../src/empathy-main-window.c:1288 msgid "Show and edit accounts" msgstr "Visa och redigera konton" @@ -2210,15 +2427,15 @@ msgstr "Ti_digare samtal" msgid "_Room" msgstr "_Rum" -#: ../src/empathy-new-chatroom-dialog.c:331 +#: ../src/empathy-new-chatroom-dialog.c:328 msgid "Chat Room" msgstr "Chattrum" -#: ../src/empathy-new-chatroom-dialog.c:347 +#: ../src/empathy-new-chatroom-dialog.c:344 msgid "Members" msgstr "Medlemmar" -#: ../src/empathy-new-chatroom-dialog.c:496 +#: ../src/empathy-new-chatroom-dialog.c:494 #, c-format msgctxt "Room/Join's roomlist tooltip. Parametersare a channel name, yes/no, yes/no and a number." msgid "" @@ -2232,21 +2449,16 @@ msgstr "" "Lösenord krävs: %s\n" "Medlemmar: %s" -#: ../src/empathy-new-chatroom-dialog.c:498 -#: ../src/empathy-new-chatroom-dialog.c:499 -msgid "Yes" -msgstr "Ja" - -#: ../src/empathy-new-chatroom-dialog.c:498 -#: ../src/empathy-new-chatroom-dialog.c:499 +#: ../src/empathy-new-chatroom-dialog.c:496 +#: ../src/empathy-new-chatroom-dialog.c:497 msgid "No" msgstr "Nej" -#: ../src/empathy-new-chatroom-dialog.c:526 +#: ../src/empathy-new-chatroom-dialog.c:524 msgid "Could not start room listing" msgstr "Kunde inte starta rumslistningen" -#: ../src/empathy-new-chatroom-dialog.c:536 +#: ../src/empathy-new-chatroom-dialog.c:534 msgid "Could not stop room listing" msgstr "Kunde inte stoppa rumslistningen" @@ -2442,12 +2654,12 @@ msgstr "Status" msgid "_Quit" msgstr "_Avsluta" -#: ../src/empathy-tube-dispatch.c:375 +#: ../src/empathy-tube-dispatch.c:376 #, c-format msgid "Unable to start application for service %s: %s" msgstr "Kunde inte starta program för tjänsten %s: %s" -#: ../src/empathy-tube-dispatch.c:446 +#: ../src/empathy-tube-dispatch.c:447 #, c-format msgid "An invitation was offered for service %s, but you don't have the needed application to handle it" msgstr "Du blev erbjuden en inbjudan för tjänsten %s, men du har inte det nödvändiga programmet att hantera den med" @@ -2457,72 +2669,82 @@ msgid "Contact Map View" msgstr "Kartvy för kontakter" #: ../src/empathy-debug-dialog.c:111 -#: ../src/empathy-debug-dialog.c:1083 +#: ../src/empathy-debug-dialog.c:1079 msgid "Error" msgstr "Fel" #: ../src/empathy-debug-dialog.c:114 -#: ../src/empathy-debug-dialog.c:1077 +#: ../src/empathy-debug-dialog.c:1073 msgid "Critical" msgstr "Kritiskt" #: ../src/empathy-debug-dialog.c:117 -#: ../src/empathy-debug-dialog.c:1071 +#: ../src/empathy-debug-dialog.c:1067 msgid "Warning" msgstr "Varning" #: ../src/empathy-debug-dialog.c:120 -#: ../src/empathy-debug-dialog.c:1065 -#: ../src/empathy-debug-dialog.c:1113 +#: ../src/empathy-debug-dialog.c:1061 +#: ../src/empathy-debug-dialog.c:1109 msgid "Message" msgstr "Meddelande" #: ../src/empathy-debug-dialog.c:123 -#: ../src/empathy-debug-dialog.c:1059 +#: ../src/empathy-debug-dialog.c:1055 msgid "Info" msgstr "Info" #: ../src/empathy-debug-dialog.c:126 -#: ../src/empathy-debug-dialog.c:1053 +#: ../src/empathy-debug-dialog.c:1049 msgid "Debug" msgstr "Felsökning" -#: ../src/empathy-debug-dialog.c:845 +#: ../src/empathy-debug-dialog.c:841 msgid "Save" msgstr "Spara" -#: ../src/empathy-debug-dialog.c:948 +#: ../src/empathy-debug-dialog.c:944 msgid "Debug Window" msgstr "Felsökningsfönster" -#: ../src/empathy-debug-dialog.c:1021 +#: ../src/empathy-debug-dialog.c:1017 msgid "Pause" msgstr "Gör paus" -#: ../src/empathy-debug-dialog.c:1033 +#: ../src/empathy-debug-dialog.c:1029 msgid "Level " msgstr "NivÃ¥ " -#: ../src/empathy-debug-dialog.c:1102 +#: ../src/empathy-debug-dialog.c:1098 msgid "Time" msgstr "Tid" -#: ../src/empathy-debug-dialog.c:1104 +#: ../src/empathy-debug-dialog.c:1100 msgid "Domain" msgstr "Domän" -#: ../src/empathy-debug-dialog.c:1106 +#: ../src/empathy-debug-dialog.c:1102 msgid "Category" msgstr "Kategori" -#: ../src/empathy-debug-dialog.c:1108 +#: ../src/empathy-debug-dialog.c:1104 msgid "Level" msgstr "NivÃ¥" -#: ../src/empathy-debug-dialog.c:1140 +#: ../src/empathy-debug-dialog.c:1136 msgid "The selected connection manager does not support the remote debugging extension." msgstr "Den valda anslutningshanteraren saknar stöd för tillägg för fjärrfelsökning." +#~ msgid "Add Account" +#~ msgstr "Lägg till konto" +#~ msgid "Gmail" +#~ msgstr "Gmail" +#~ msgid "Import Accounts..." +#~ msgstr "Importera konton..." +#~ msgid "Settings" +#~ msgstr "Inställningar" +#~ msgid "Type:" +#~ msgstr "Typ:" #~ msgid "gtk-add" #~ msgstr "Lägg till" #~ msgid "gtk-remove" @@ -2587,14 +2809,10 @@ msgstr "Den valda anslutningshanteraren saknar stöd för tillägg för fjärrfe #~ msgstr "Förslag för ordet:" #~ msgid "<b>New Account</b>" #~ msgstr "<b>Nytt konto</b>" -#~ msgid "I already have an account I want to use" -#~ msgstr "Jag har redan ett konto som jag vill använda" #~ msgid "Invitation _message:" #~ msgstr "Inbjudnings_meddelande:" #~ msgid "Invite" #~ msgstr "Bjud in" -#~ msgid "Select who would you like to invite:" -#~ msgstr "Välj vem du vill bjuda in:" #~ msgid "You have been invited to join a chat conference." #~ msgstr "Du har blivit inbjuden till en chattkonferens." #~ msgid "Edit Favorite Room" @@ -2842,8 +3060,6 @@ msgstr "Den valda anslutningshanteraren saknar stöd för tillägg för fjärrfe #~ msgstr "%s kopplade frÃ¥n" #~ msgid "Disable" #~ msgstr "Inaktivera" -#~ msgid "Edit Account _Details" -#~ msgstr "Redigera konto_detaljer" #~ msgid "_New Message..." #~ msgstr "_Nytt meddelande..." #~ msgid "New message" @@ -2907,9 +3123,6 @@ msgstr "Den valda anslutningshanteraren saknar stöd för tillägg för fjärrfe #~ msgstr "<b>Status</b>" #~ msgid "<b>Subscription</b>" #~ msgstr "<b>Prenumeration</b>" -#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>" -#~ msgstr "" -#~ "<span size=\"smaller\">Exempel: Mikael eller användare@server.org</span>" #~ msgid "" #~ "<span size=\"smaller\">Note: You must select an account if the contact is " #~ "unknown</span>" @@ -3063,8 +3276,6 @@ msgstr "Den valda anslutningshanteraren saknar stöd för tillägg för fjärrfe #~ msgstr "GÃ¥ in i chattrummet avbröts." #~ msgid "Unavailable" #~ msgstr "Otillgänglig" -#~ msgid "An unknown error occurred." -#~ msgstr "Ett okänt fel inträffade." #~ msgid "Connection refused." #~ msgstr "Anslutning vägrades." #~ msgid "Server address could not be resolved." @@ -3105,8 +3316,6 @@ msgstr "Den valda anslutningshanteraren saknar stöd för tillägg för fjärrfe #~ msgstr "" #~ "Det inträffade en intressekonflikt vid försök att använda den här " #~ "tjänsten " -#~ msgid "There was an internal service error" -#~ msgstr "Det inträffade ett internt fel i tjänsten" #~ msgid "This feature is not implemented" #~ msgstr "Den här funktionen är inte implementerad" #~ msgid "The remote service timed out" @@ -3259,16 +3468,12 @@ msgstr "Den valda anslutningshanteraren saknar stöd för tillägg för fjärrfe #~ msgstr "NÃ¥gon vill bli tillagd till din kontaktlista." #~ msgid "Show" #~ msgstr "Visa" -#~ msgid "Contact has been removed" -#~ msgstr "Kontakten har tagits bort" #~ msgid "Subject: %s" #~ msgstr "Ämne: %s" #~ msgid "Do you want to add this person to your contact list?" #~ msgstr "Vill du lägga till denna person till din kontaktlista?" #~ msgid "Do you want to add %s to your contact list?" #~ msgstr "Vill du lägga till %s till din kontaktlista?" -#~ msgid "Please enter your %s account password" -#~ msgstr "Ange lösenordet för kontot %s" #~ msgid "Logging in to account '%s'" #~ msgstr "Loggar in mot kontot \"%s\"" #~ msgid "Remember Password?" @@ -3356,14 +3561,10 @@ msgstr "Den valda anslutningshanteraren saknar stöd för tillägg för fjärrfe #~ msgstr "" #~ "Kontoinformationsdialogen kommer nu att visas sÃ¥ att du kan mata in din " #~ "information." -#~ msgid "<span size=\"smaller\">Example:</span>" -#~ msgstr "<span size=\"smaller\">Exempel:</span>" #~ msgid "Account Name" #~ msgstr "Kontonamn" #~ msgid "Connection Details" #~ msgstr "Anslutningsdetaljer" -#~ msgid "Enter a name for this account" -#~ msgstr "Ange ett namn för detta konto" #~ msgid "Enter the port used in the connection for this account" #~ msgstr "Ange porten att ansluta till för detta konto" #~ msgid "Enter the server used in the connection for this account" @@ -3411,10 +3612,6 @@ msgstr "Den valda anslutningshanteraren saknar stöd för tillägg för fjärrfe #~ "gÃ¥ng du ansluter" #~ msgid "Registering Account" #~ msgstr "Registrerar konto" -#~ msgid "Welcome to Gossip" -#~ msgstr "Välkommen till Gossip" -#~ msgid "What is your name?" -#~ msgstr "Vad heter du?" #~ msgid "" #~ "What name do you want to use to identify this account?\n" #~ "\n" @@ -3476,8 +3673,6 @@ msgstr "Den valda anslutningshanteraren saknar stöd för tillägg för fjärrfe #~ msgstr "Jabber-id:" #~ msgid "What instant messaging system does the contact use?" #~ msgstr "Vilket meddelandesystem använder kontakten?" -#~ msgid "Which account do you want to add this contact to?" -#~ msgstr "Till vilket konto vill du lägga till denna kontakt?" #~ msgid "_Search..." #~ msgstr "_Sök..." #~ msgid "_Compact contact list" @@ -3771,12 +3966,6 @@ msgstr "Den valda anslutningshanteraren saknar stöd för tillägg för fjärrfe #~ msgstr "Söker lokala tjänster..." #, fuzzy -#~ msgid "This will be used to configure your account details." -#~ msgstr "" -#~ "Denna guide kommer att lÃ¥ta dig konfigurera dina kontoinställningar för " -#~ "ytterligare ett protokoll." - -#, fuzzy #~ msgid "Configuring Roster" #~ msgstr "Konfigurerar tjänst" @@ -1,30 +1,34 @@ +# translation of ta.po to Tamil # translation of ta.po to # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Dr.T.vasudevan <agnihot3@gmail.com>, 2009. # Dr.T.Vasudevan <agnihot3@gmail.com>, 2009. +# I. Felix <ifelix@redhat.com>, 2009. msgid "" msgstr "" "Project-Id-Version: ta\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-21 20:24+0530\n" -"PO-Revision-Date: 2009-07-21 20:26+0530\n" -"Last-Translator: Dr.T.Vasudevan <agnihot3@gmail.com>\n" -"Language-Team: Tamil <Ubuntu-l10n-tam@lists.ubuntu.com>\n" +"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=empathy&component=general\n" +"POT-Creation-Date: 2009-08-20 13:44+0000\n" +"PO-Revision-Date: 2009-08-25 16:06+0530\n" +"Last-Translator: I. Felix <ifelix@redhat.com>\n" +"Language-Team: Tamil <fedora-trans-ta@redhat.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Lokalize 0.3\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\\n\n" +"\n" #: ../data/empathy.desktop.in.in.h:1 -msgid "Empathy Instant Messenger" -msgstr "எமà¯à®ªà®¤à®¿ தà¯à®°à®¿à®¤ செயà¯à®¤à®¿à®¯à®¾à®³à®°à¯" +msgid "Empathy IM Client" +msgstr "Empathy IM கிளையனà¯" #: ../data/empathy.desktop.in.in.h:2 -msgid "Send and receive instant messages" -msgstr "செயà¯à®¤à®¿à®•à®³à¯ˆ உடனà¯à®•à¯à®•à¯à®Ÿà®©à¯ அனà¯à®ªà¯à®ªà¯à®• மறà¯à®±à¯à®®à¯ பெறà¯à®•" +#| msgid "Send and receive instant messages" +msgid "Send and receive messages" +msgstr "செயà¯à®¤à®¿à®•à®³à¯ˆ அனà¯à®ªà¯à®ªà¯à®• மறà¯à®±à¯à®®à¯ பெறà¯à®•" #: ../data/empathy.schemas.in.h:1 msgid "Always open a separate chat window for new chats." @@ -49,81 +53,82 @@ msgid "Compact contact list" msgstr "அடகà¯à®•à®®à®¾à®© தொடரà¯à®ªà¯ படà¯à®Ÿà®¿à®¯à®²à¯" #: ../data/empathy.schemas.in.h:6 +#| msgid "NetworkManager should be used" +msgid "Connection managers should be used" +msgstr "இணைபà¯à®ªà¯ மேலாளரை பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ வேணà¯à®Ÿà¯à®®à¯" + +#: ../data/empathy.schemas.in.h:7 msgid "Contact list sort criterium" msgstr "தொடரà¯à®ªà¯ படà¯à®Ÿà®¿à®¯à®²à¯ வரிசைபà¯à®ªà®Ÿà¯à®¤à¯à®¤ கடà¯à®Ÿà®³à¯ˆ விதி" -#: ../data/empathy.schemas.in.h:7 +#: ../data/empathy.schemas.in.h:8 msgid "Default directory to select an avatar image from" msgstr "அவதாரம௠படம௠தேநà¯à®¤à¯†à®Ÿà¯à®•à¯à®• à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ அடைவà¯" -#: ../data/empathy.schemas.in.h:8 +#: ../data/empathy.schemas.in.h:9 msgid "Disable popup notifications when away" msgstr "வெளியே உளà¯à®³ போத௠தà¯à®³à¯à®³à¯ அறிவிபà¯à®ªà¯à®•à®³à¯ˆ செயல௠நீகà¯à®•à¯à®•" -#: ../data/empathy.schemas.in.h:9 +#: ../data/empathy.schemas.in.h:10 msgid "Disable sounds when away" msgstr "வெளியே உளà¯à®³ போத௠ஒலியை செயல௠நீகà¯à®•à¯à®•" -#: ../data/empathy.schemas.in.h:10 +#: ../data/empathy.schemas.in.h:11 msgid "Empathy can publish the user's location" msgstr "பயனரின௠இடதà¯à®¤à¯ˆ தொடரà¯à®ªà¯à®•à®³à¯à®•à¯à®•à¯ எமà¯à®ªà®¤à®¿à®¯à®¾à®²à¯ காடà¯à®Ÿ இயலà¯à®®à¯" -#: ../data/empathy.schemas.in.h:11 +#: ../data/empathy.schemas.in.h:12 msgid "Empathy can use the GPS to guess the location" msgstr "எமà¯à®ªà®¤à®¿à®¯à®¾à®²à¯ பயனரின௠இடதà¯à®¤à¯ˆ ஊகிகà¯à®• ஜிபிஎஸ௠஠பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ இயலà¯à®®à¯" -#: ../data/empathy.schemas.in.h:12 +#: ../data/empathy.schemas.in.h:13 msgid "Empathy can use the cellular network to guess the location" msgstr "எமà¯à®ªà®¤à®¿à®¯à®¾à®²à¯ பயனரின௠இடதà¯à®¤à¯ˆ ஊகிகà¯à®• அலைபேசி வலையை பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ இயலà¯à®®à¯" -#: ../data/empathy.schemas.in.h:13 +#: ../data/empathy.schemas.in.h:14 msgid "Empathy can use the network to guess the location" msgstr "எமà¯à®ªà®¤à®¿à®¯à®¾à®²à¯ பயனரின௠இடதà¯à®¤à¯ˆ ஊகிகà¯à®• வலையை பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ இயலà¯à®®à¯" -#: ../data/empathy.schemas.in.h:14 +#: ../data/empathy.schemas.in.h:15 msgid "Empathy default download folder" msgstr "எமà¯à®ªà®¤à®¿ à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ தரவிறகà¯à®• அடைவà¯" -#: ../data/empathy.schemas.in.h:15 +#: ../data/empathy.schemas.in.h:16 msgid "Empathy has asked about importing accounts" msgstr "எமà¯à®ªà®¤à®¿ கணகà¯à®•à¯à®•à®³à¯ˆ இறகà¯à®•à¯à®®à®¤à®¿ செயà¯à®¯ கேடà¯à®•à®¿à®±à®¤à¯" -#: ../data/empathy.schemas.in.h:16 +#: ../data/empathy.schemas.in.h:17 msgid "Empathy should auto-connect on startup" msgstr "தà¯à®µà®™à¯à®•à¯à®®à¯ போத௠எமà¯à®ªà®¤à®¿ தானியஙà¯à®•à®¿à®¯à®¾à®• இணைகà¯à®• வேணà¯à®Ÿà¯à®®à¯." -#: ../data/empathy.schemas.in.h:17 +#: ../data/empathy.schemas.in.h:18 msgid "Empathy should reduce the location's accuracy" msgstr "தà¯à®µà®™à¯à®•à¯à®®à¯ போத௠எமà¯à®ªà®¤à®¿ இடததின௠கà¯à®±à®¿à®ªà¯à®ªà¯ˆ கà¯à®±à¯ˆà®•à¯à®• வேணà¯à®Ÿà¯à®®à¯." -#: ../data/empathy.schemas.in.h:18 +#: ../data/empathy.schemas.in.h:19 msgid "Empathy should use the avatar of the contact as the chat window icon" msgstr "தà¯à®µà®™à¯à®•à¯à®®à¯ போத௠எமà¯à®ªà®¤à®¿ அரடà¯à®Ÿà¯ˆ சாரளதà¯à®¤à®¿à®²à¯ சினà¯à®©à®®à®¾à®• தொடரà¯à®ªà®¿à®©à¯ அவதாரதà¯à®¤à¯ˆ காடà¯à®Ÿ வேணà¯à®Ÿà¯à®®à¯." -#: ../data/empathy.schemas.in.h:19 +#: ../data/empathy.schemas.in.h:20 msgid "Enable WebKit Developer Tools" msgstr "வெபà¯à®•à®¿à®Ÿà¯ உரà¯à®µà®¾à®•à¯à®•à¯à®µà¯‹à®°à¯ கரà¯à®µà®¿à®•à®³à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯" -#: ../data/empathy.schemas.in.h:20 +#: ../data/empathy.schemas.in.h:21 msgid "Enable popup notifications for new messages" msgstr "பà¯à®¤à®¿à®¯ செயà¯à®¤à®¿à®•à®³à¯à®•à¯à®•à¯ தà¯à®³à¯à®³à¯ அறிவிபà¯à®ªà¯à®•à®³à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯ " -#: ../data/empathy.schemas.in.h:21 +#: ../data/empathy.schemas.in.h:22 msgid "Enable spell checker" msgstr "சொல௠திரà¯à®¤à¯à®¤à®¿à®¯à¯ˆ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯" -#: ../data/empathy.schemas.in.h:22 +#: ../data/empathy.schemas.in.h:23 msgid "Hide main window" msgstr "à®®à¯à®¤à®©à¯à®®à¯ˆ சாளரதà¯à®¤à¯ˆ மறை " -#: ../data/empathy.schemas.in.h:23 +#: ../data/empathy.schemas.in.h:24 msgid "Hide the main window." msgstr "à®®à¯à®¤à®©à¯à®®à¯ˆ சாளரதà¯à®¤à¯ˆ மறை " -#: ../data/empathy.schemas.in.h:24 -msgid "NetworkManager should be used" -msgstr "வலைபà¯à®ªà®¿à®©à¯à®©à®²à¯ மேலாளரை பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ வேணà¯à®Ÿà¯à®®à¯" - #: ../data/empathy.schemas.in.h:25 msgid "Nick completed character" msgstr "செலà¯à®²à®ªà¯à®ªà¯†à®¯à®°à¯ˆ பூரà¯à®¤à¯à®¤à®¿ செயà¯à®¯à¯à®®à¯ எழà¯à®¤à¯à®¤à¯à®°à¯" @@ -264,8 +269,7 @@ msgstr "எமà¯à®ªà®¤à®¿ தà¯à®µà®™à¯à®•à¯à®®à¯à®ªà¯‹à®¤à¯ கணகà¯à msgid "" "Whether or not Empathy should reduce the location's accuracy for privacy " "reasons." -msgstr "" -"அநà¯à®¤à®°à®™à¯à®•à®¤à¯à®¤à¯ˆ காபà¯à®ªà®¾à®±à¯à®± தà¯à®µà®™à¯à®•à¯à®®à¯ போத௠எமà¯à®ªà®¤à®¿ இடதà¯à®¤à®¿à®©à¯ கà¯à®±à®¿à®ªà¯à®ªà¯ˆ கà¯à®±à¯ˆà®•à¯à®• வேணà¯à®Ÿà¯à®®à®¾ இலà¯à®²à¯ˆà®¯à®¾" +msgstr "அநà¯à®¤à®°à®™à¯à®•à®¤à¯à®¤à¯ˆ காபà¯à®ªà®¾à®±à¯à®± தà¯à®µà®™à¯à®•à¯à®®à¯ போத௠எமà¯à®ªà®¤à®¿ இடதà¯à®¤à®¿à®©à¯ கà¯à®±à®¿à®ªà¯à®ªà¯ˆ கà¯à®±à¯ˆà®•à¯à®• வேணà¯à®Ÿà¯à®®à®¾ இலà¯à®²à¯ˆà®¯à®¾" #: ../data/empathy.schemas.in.h:59 msgid "" @@ -274,16 +278,17 @@ msgid "" msgstr "எமà¯à®ªà®¤à®¿ தொடரà¯à®ªà®¿à®©à¯ அவதாரதà¯à®¤à¯ˆ அரடà¯à®Ÿà¯ˆ அறை சினà¯à®©à®®à®¾à®• பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ வேணà¯à®Ÿà¯à®®à®¾ இலà¯à®²à¯ˆà®¯à®¾." #: ../data/empathy.schemas.in.h:60 -msgid "Whether or not the Salut account has been created on the first Empathy run." -msgstr "à®®à¯à®¤à®²à¯ ஓடà¯à®Ÿà®¤à¯à®¤à®¿à®²à¯ எமà¯à®ªà®¤à®¿ சலூட௠கணகà¯à®•à¯ˆ உரà¯à®µà®¾à®•à¯à®•à®¿à®¯à®¤à®¾ இலà¯à®²à¯ˆà®¯à®¾." - -#: ../data/empathy.schemas.in.h:61 +#| msgid "" +#| "Whether or not the network manager should be used to automatically " +#| "disconnect/reconnect." msgid "" -"Whether or not the network manager should be used to automatically " +"Whether or not connectivity managers should be used to automatically " "disconnect/reconnect." -msgstr "" -"வலைபà¯à®ªà®¿à®©à¯à®©à®²à¯ மேலாளர௠஠தானியஙà¯à®•à®¿à®¯à®¾à®• இணைகà¯à®•à®µà¯à®®à¯ இணைபà¯à®ªà¯ விலகவà¯à®®à¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ வேணà¯à®Ÿà¯à®®à®¾ " -"இலà¯à®²à¯ˆà®¯à®¾" +msgstr "இணைபà¯à®ªà¯ மேலாளரà¯à®•à®³à¯ தானியஙà¯à®•à®¿à®¯à®¾à®• இணைகà¯à®•/ மீணà¯à®Ÿà¯à®®à¯ இணைகà¯à®• பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ வேணà¯à®Ÿà¯à®®à®¾ இலà¯à®²à¯ˆà®¯à®¾" + +#: ../data/empathy.schemas.in.h:61 +msgid "Whether or not the Salut account has been created on the first Empathy run." +msgstr "à®®à¯à®¤à®²à¯ ஓடà¯à®Ÿà®¤à¯à®¤à®¿à®²à¯ எமà¯à®ªà®¤à®¿ சலூட௠கணகà¯à®•à¯ˆ உரà¯à®µà®¾à®•à¯à®•à®¿à®¯à®¤à®¾ இலà¯à®²à¯ˆà®¯à®¾." #: ../data/empathy.schemas.in.h:62 msgid "" @@ -413,7 +418,7 @@ msgstr "தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®¤à¯à®¤ கோபà¯à®ªà¯ வழகà¯à msgid "The selected file is empty" msgstr "தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®¤à¯à®¤ கோபà¯à®ªà¯ காலியாக உளà¯à®³à®¤à¯" -#: ../libempathy/empathy-tp-contact-list.c:843 ../src/empathy.c:289 +#: ../libempathy/empathy-tp-contact-list.c:843 ../src/empathy.c:290 msgid "People nearby" msgstr "à®…à®°à¯à®•à®¿à®²à¯ உளà¯à®³ மகà¯à®•à®³à¯" @@ -735,92 +740,100 @@ msgstr "பெரியதாகà¯à®• சொடà¯à®•à¯à®•à¯à®•" msgid "Failed to reconnect this chat" msgstr "இநà¯à®¤ அரடà¯à®Ÿà¯ˆà®•à¯à®•à¯ மீள௠இணைபà¯à®ªà¯ தோறà¯à®±à®¤à¯ " -#: ../libempathy-gtk/empathy-chat.c:404 +#: ../libempathy-gtk/empathy-chat.c:412 msgid "Unsupported command" msgstr "ஆதரவிலà¯à®²à®¾à®¤ கடà¯à®Ÿà®³à¯ˆ" -#: ../libempathy-gtk/empathy-chat.c:539 +#: ../libempathy-gtk/empathy-chat.c:548 msgid "offline" msgstr "இணைபà¯à®ªà¯ விலகி " -#: ../libempathy-gtk/empathy-chat.c:542 +#: ../libempathy-gtk/empathy-chat.c:551 msgid "invalid contact" msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à®¾à®¤ தொடரà¯à®ªà¯" -#: ../libempathy-gtk/empathy-chat.c:545 +#: ../libempathy-gtk/empathy-chat.c:554 msgid "permission denied" msgstr "அனà¯à®®à®¤à®¿ மறà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯" -#: ../libempathy-gtk/empathy-chat.c:548 +#: ../libempathy-gtk/empathy-chat.c:557 msgid "too long message" msgstr "மிக நீள செயà¯à®¤à®¿" -#: ../libempathy-gtk/empathy-chat.c:551 +#: ../libempathy-gtk/empathy-chat.c:560 msgid "not implemented" msgstr "à®…à®®à¯à®²à®¾à®•à¯à®•à®µà®¿à®²à¯à®²à¯ˆ" -#: ../libempathy-gtk/empathy-chat.c:554 +#: ../libempathy-gtk/empathy-chat.c:563 msgid "unknown" msgstr "தெரியாத" -#: ../libempathy-gtk/empathy-chat.c:558 +#: ../libempathy-gtk/empathy-chat.c:567 #, c-format msgid "Error sending message '%s': %s" msgstr "செயà¯à®¤à®¿ '%s' அனà¯à®ªà¯à®ªà¯à®µà®¤à®¿à®²à¯ பிழை: %s" -#: ../libempathy-gtk/empathy-chat.c:588 +#: ../libempathy-gtk/empathy-chat.c:597 #, c-format msgid "Topic set to: %s" msgstr "தலைபà¯à®ªà¯ இதறà¯à®•à¯ அமை: %s" -#: ../libempathy-gtk/empathy-chat.c:590 +#: ../libempathy-gtk/empathy-chat.c:599 msgid "No topic defined" msgstr "தலைபà¯à®ªà¯ à®à®¤à¯à®®à¯ வரையறà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ" -#: ../libempathy-gtk/empathy-chat.c:960 +#: ../libempathy-gtk/empathy-chat.c:969 msgid "(No Suggestions)" msgstr "(பரிநà¯à®¤à¯à®°à¯ˆà®•à®³à¯ இலà¯à®²à¯ˆ )" -#: ../libempathy-gtk/empathy-chat.c:1014 +#: ../libempathy-gtk/empathy-chat.c:1023 msgid "Insert Smiley" msgstr "சிரிபà¯à®ªà®¾à®©à¯ˆ சொரà¯à®•à¯" #. send button -#: ../libempathy-gtk/empathy-chat.c:1032 -#: ../libempathy-gtk/empathy-ui-utils.c:1480 +#: ../libempathy-gtk/empathy-chat.c:1041 +#: ../libempathy-gtk/empathy-ui-utils.c:1483 msgid "_Send" msgstr "அனà¯à®ªà¯à®ªà¯ (_S)" -#: ../libempathy-gtk/empathy-chat.c:1066 +#: ../libempathy-gtk/empathy-chat.c:1075 msgid "_Spelling Suggestions" msgstr "_S எழà¯à®¤à¯à®¤à®¾à®•à¯à®• பரிநà¯à®¤à¯à®°à¯ˆà®•à®³à¯ " -#: ../libempathy-gtk/empathy-chat.c:1181 +#: ../libempathy-gtk/empathy-chat.c:1190 #, c-format msgid "%s has disconnected" msgstr "%s தொடரà¯à®ªà¯ˆ தà¯à®£à¯à®Ÿà®¿à®¤à¯à®¤à®¾à®°à¯" -#: ../libempathy-gtk/empathy-chat.c:1185 +#. translators: reverse the order of these arguments +#. * if the kicked should come before the kicker in your locale. +#. +#: ../libempathy-gtk/empathy-chat.c:1197 #, c-format -msgid "%s was kicked by %s" -msgstr "%s %s ஆல௠உதைதà¯à®¤à¯ வெளியேறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¾à®°à¯" +#| msgid "%s was kicked by %s" +msgid "%1$s was kicked by %2$s" +msgstr "%1$s %2$sஆல௠உதைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯" -#: ../libempathy-gtk/empathy-chat.c:1188 +#: ../libempathy-gtk/empathy-chat.c:1200 #, c-format msgid "%s was kicked" msgstr "%s உதைதà¯à®¤à¯ வெளியேறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¾à®°à¯" -#: ../libempathy-gtk/empathy-chat.c:1193 +#. translators: reverse the order of these arguments +#. * if the banned should come before the banner in your locale. +#. +#: ../libempathy-gtk/empathy-chat.c:1208 #, c-format -msgid "%s was banned by %s" -msgstr "%s %s ஆல௠தடை செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿà®¾à®°à¯" +#| msgid "%s was banned by %s" +msgid "%1$s was banned by %2$s" +msgstr "%1$s %2$sஆல௠தடை செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿà®¾à®°à¯" -#: ../libempathy-gtk/empathy-chat.c:1196 +#: ../libempathy-gtk/empathy-chat.c:1211 #, c-format msgid "%s was banned" msgstr "%s தடை செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿà®¾à®°à¯" -#: ../libempathy-gtk/empathy-chat.c:1200 +#: ../libempathy-gtk/empathy-chat.c:1215 #, c-format msgid "%s has left the room" msgstr "%s அறையில௠இரà¯à®¨à¯à®¤à¯ வெளியேறினாரà¯" @@ -830,25 +843,25 @@ msgstr "%s அறையில௠இரà¯à®¨à¯à®¤à¯ வெளியேறிà #. * given by the user living the room. If this poses a problem, #. * please let us know. :-) #. -#: ../libempathy-gtk/empathy-chat.c:1209 +#: ../libempathy-gtk/empathy-chat.c:1224 #, c-format msgid " (%s)" msgstr " (%s)" -#: ../libempathy-gtk/empathy-chat.c:1232 +#: ../libempathy-gtk/empathy-chat.c:1247 #, c-format msgid "%s has joined the room" msgstr "%s அறையில௠சேரà¯à®¨à¯à®¤à®¾à®°à¯" -#: ../libempathy-gtk/empathy-chat.c:1365 ../src/empathy-call-window.c:1225 +#: ../libempathy-gtk/empathy-chat.c:1380 ../src/empathy-call-window.c:1277 msgid "Disconnected" msgstr "தà¯à®£à¯à®Ÿà®¿à®•à¯à®•à®ªà®Ÿà¯à®Ÿà®¤à¯" -#: ../libempathy-gtk/empathy-chat.c:1800 +#: ../libempathy-gtk/empathy-chat.c:1815 msgid "Connected" msgstr "இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯" -#: ../libempathy-gtk/empathy-chat.c:1850 +#: ../libempathy-gtk/empathy-chat.c:1865 #: ../libempathy-gtk/empathy-log-window.c:502 msgid "Conversation" msgstr "உரையாடலà¯" @@ -859,13 +872,13 @@ msgstr "தலைபà¯à®ªà¯:" #. Copy Link Address menu item #: ../libempathy-gtk/empathy-chat-text-view.c:316 -#: ../libempathy-gtk/empathy-theme-adium.c:264 +#: ../libempathy-gtk/empathy-theme-adium.c:267 msgid "_Copy Link Address" msgstr "இணைபà¯à®ªà¯ à®®à¯à®•à®µà®°à®¿à®¯à¯ˆ நகலெட௠(_C)" #. Open Link menu item #: ../libempathy-gtk/empathy-chat-text-view.c:323 -#: ../libempathy-gtk/empathy-theme-adium.c:272 +#: ../libempathy-gtk/empathy-theme-adium.c:275 msgid "_Open Link" msgstr "இணைபà¯à®ªà®¿à®©à¯ˆ திற (_O)" @@ -884,7 +897,7 @@ msgstr "தொடரà¯à®ªà®¿à®©à¯ தகவல௠஠திரà¯à®¤à¯à®¤à¯ msgid "Personal Information" msgstr "தனிபà¯à®ªà®Ÿà¯à®Ÿ தகவலà¯" -#: ../libempathy-gtk/empathy-contact-dialogs.c:393 +#: ../libempathy-gtk/empathy-contact-dialogs.c:394 msgid "New Contact" msgstr "பà¯à®¤à®¿à®¯ தொடரà¯à®ªà¯" @@ -896,27 +909,27 @@ msgstr "(_L) பிறக௠மà¯à®Ÿà®¿à®µà¯ எடà¯à®•à¯à®•à®²à®¾à®®à¯" msgid "Subscription Request" msgstr "சநà¯à®¤à®¾ வேணà¯à®Ÿà¯à®¤à®²à¯" -#: ../libempathy-gtk/empathy-contact-list-view.c:1400 +#: ../libempathy-gtk/empathy-contact-list-view.c:1412 #, c-format msgid "Do you really want to remove the group '%s'?" msgstr "நீஙà¯à®•à®³à¯ நிசà¯à®šà®¯à®®à¯ கà¯à®´à¯ '%s' ஠நீகà¯à®• விரà¯à®®à¯à®ªà¯à®•à®¿à®±à¯€à®°à¯à®•à®³à®¾?" -#: ../libempathy-gtk/empathy-contact-list-view.c:1402 +#: ../libempathy-gtk/empathy-contact-list-view.c:1414 msgid "Removing group" msgstr "கà¯à®´à¯à®µà¯ˆ நீகà¯à®•à¯à®¤à®²à¯" #. Remove -#: ../libempathy-gtk/empathy-contact-list-view.c:1449 -#: ../libempathy-gtk/empathy-contact-list-view.c:1526 +#: ../libempathy-gtk/empathy-contact-list-view.c:1461 +#: ../libempathy-gtk/empathy-contact-list-view.c:1538 msgid "_Remove" msgstr "நீகà¯à®•à®µà¯à®®à¯ (_R)" -#: ../libempathy-gtk/empathy-contact-list-view.c:1479 +#: ../libempathy-gtk/empathy-contact-list-view.c:1491 #, c-format msgid "Do you really want to remove the contact '%s'?" msgstr "நீஙà¯à®•à®³à¯ நிசà¯à®šà®¯à®®à¯ தொடரà¯à®ªà¯ '%s' ஠நீகà¯à®• விரà¯à®®à¯à®ªà¯à®•à®¿à®±à¯€à®°à¯à®•à®³à®¾?" -#: ../libempathy-gtk/empathy-contact-list-view.c:1481 +#: ../libempathy-gtk/empathy-contact-list-view.c:1493 msgid "Removing contact" msgstr "தொடரà¯à®ªà¯ ஠நீகà¯à®•à¯à®¤à®²à¯" @@ -957,7 +970,7 @@ msgid "Infor_mation" msgstr "(_m) தகவலà¯" #: ../libempathy-gtk/empathy-contact-menu.c:441 -#: ../src/empathy-main-window.ui.h:16 +#: ../src/empathy-chat-window.ui.h:10 ../src/empathy-main-window.ui.h:16 msgid "_Edit" msgstr "திரà¯à®¤à¯à®¤à¯ (_E)" @@ -981,120 +994,120 @@ msgstr "அவதாரதà¯à®¤à¯ˆ சேமி" msgid "Unable to save avatar" msgstr "அவதாரதà¯à®¤à¯ˆ சேமிகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ" -#: ../libempathy-gtk/empathy-contact-widget.c:992 +#: ../libempathy-gtk/empathy-contact-widget.c:1000 msgid "Select" msgstr "தேரà¯à®µà¯" -#: ../libempathy-gtk/empathy-contact-widget.c:1001 +#: ../libempathy-gtk/empathy-contact-widget.c:1009 #: ../src/empathy-main-window.c:1023 msgid "Group" msgstr "கà¯à®´à¯" -#: ../libempathy-gtk/empathy-contact-widget.c:1252 +#: ../libempathy-gtk/empathy-contact-widget.c:1260 msgid "Country ISO Code:" msgstr "நாடà¯à®Ÿà®¿à®©à¯ à®à®Žà®¸à¯à®“ கà¯à®±à®¿:" -#: ../libempathy-gtk/empathy-contact-widget.c:1254 +#: ../libempathy-gtk/empathy-contact-widget.c:1262 msgid "Country:" msgstr "நாடà¯:" -#: ../libempathy-gtk/empathy-contact-widget.c:1256 +#: ../libempathy-gtk/empathy-contact-widget.c:1264 msgid "State:" msgstr "மாநிலமà¯:" -#: ../libempathy-gtk/empathy-contact-widget.c:1258 +#: ../libempathy-gtk/empathy-contact-widget.c:1266 msgid "City:" msgstr "மாநகரமà¯:" -#: ../libempathy-gtk/empathy-contact-widget.c:1260 +#: ../libempathy-gtk/empathy-contact-widget.c:1268 msgid "Area:" msgstr "வடà¯à®Ÿà®¾à®°à®®à¯" -#: ../libempathy-gtk/empathy-contact-widget.c:1262 +#: ../libempathy-gtk/empathy-contact-widget.c:1270 msgid "Postal Code:" msgstr "அஞà¯à®šà®²à¯ கà¯à®±à®¿:" -#: ../libempathy-gtk/empathy-contact-widget.c:1264 +#: ../libempathy-gtk/empathy-contact-widget.c:1272 msgid "Street:" msgstr "தெரà¯:" -#: ../libempathy-gtk/empathy-contact-widget.c:1266 +#: ../libempathy-gtk/empathy-contact-widget.c:1274 msgid "Building:" msgstr "கடà¯à®Ÿà®¿à®Ÿà®®à¯:" -#: ../libempathy-gtk/empathy-contact-widget.c:1268 +#: ../libempathy-gtk/empathy-contact-widget.c:1276 msgid "Floor:" msgstr "தளமà¯:" -#: ../libempathy-gtk/empathy-contact-widget.c:1270 +#: ../libempathy-gtk/empathy-contact-widget.c:1278 msgid "Room:" msgstr "அறை:" -#: ../libempathy-gtk/empathy-contact-widget.c:1272 +#: ../libempathy-gtk/empathy-contact-widget.c:1280 msgid "Text:" msgstr "உரை:" -#: ../libempathy-gtk/empathy-contact-widget.c:1274 +#: ../libempathy-gtk/empathy-contact-widget.c:1282 msgid "Description:" msgstr "விவரணமà¯:" -#: ../libempathy-gtk/empathy-contact-widget.c:1276 +#: ../libempathy-gtk/empathy-contact-widget.c:1284 msgid "URI:" msgstr "யூஆரà¯à®:" -#: ../libempathy-gtk/empathy-contact-widget.c:1278 +#: ../libempathy-gtk/empathy-contact-widget.c:1286 msgid "Accuracy Level:" msgstr "பிழையினà¯à®®à¯ˆ மடà¯à®Ÿà®®à¯:" -#: ../libempathy-gtk/empathy-contact-widget.c:1280 +#: ../libempathy-gtk/empathy-contact-widget.c:1288 msgid "Error:" msgstr " பிழை:" -#: ../libempathy-gtk/empathy-contact-widget.c:1282 +#: ../libempathy-gtk/empathy-contact-widget.c:1290 msgid "Vertical Error (meters):" msgstr "செஙà¯à®•à¯à®¤à¯à®¤à¯ பிழை (மீடà¯à®Ÿà®°à¯à®•à®³à¯):" -#: ../libempathy-gtk/empathy-contact-widget.c:1284 +#: ../libempathy-gtk/empathy-contact-widget.c:1292 msgid "Horizontal Error (meters):" msgstr "கிடைமடà¯à®Ÿ பிழை (மீடà¯à®Ÿà®°à¯à®•à®³à¯):" -#: ../libempathy-gtk/empathy-contact-widget.c:1286 +#: ../libempathy-gtk/empathy-contact-widget.c:1294 msgid "Speed:" msgstr "வேகமà¯:" -#: ../libempathy-gtk/empathy-contact-widget.c:1288 +#: ../libempathy-gtk/empathy-contact-widget.c:1296 msgid "Bearing:" msgstr "திசை கோணமà¯:" -#: ../libempathy-gtk/empathy-contact-widget.c:1290 +#: ../libempathy-gtk/empathy-contact-widget.c:1298 msgid "Climb Speed:" msgstr "à®à®±à¯à®®à¯ வேகமà¯:" -#: ../libempathy-gtk/empathy-contact-widget.c:1292 +#: ../libempathy-gtk/empathy-contact-widget.c:1300 msgid "Last Updated on:" msgstr "கடைசியாக இறà¯à®±à¯ˆà®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿à®¯à®¤à¯:" -#: ../libempathy-gtk/empathy-contact-widget.c:1294 +#: ../libempathy-gtk/empathy-contact-widget.c:1302 msgid "Longitude:" msgstr "தீரà¯à®•à®°à¯‡à®•à¯ˆ:" -#: ../libempathy-gtk/empathy-contact-widget.c:1296 +#: ../libempathy-gtk/empathy-contact-widget.c:1304 msgid "Latitude:" msgstr "அடà¯à®šà®°à¯‡à®•à¯ˆ:" -#: ../libempathy-gtk/empathy-contact-widget.c:1298 +#: ../libempathy-gtk/empathy-contact-widget.c:1306 msgid "Altitude:" msgstr "கà¯à®¤à¯à®¤à¯à®¯à®°à®®à¯:" -#: ../libempathy-gtk/empathy-contact-widget.c:1345 +#: ../libempathy-gtk/empathy-contact-widget.c:1353 msgid "<b>Location</b>" msgstr "<b>இடமà¯</b>" -#: ../libempathy-gtk/empathy-contact-widget.c:1358 +#: ../libempathy-gtk/empathy-contact-widget.c:1366 msgid "<b>Location</b>, " msgstr "<b>இடமà¯</b>" -#: ../libempathy-gtk/empathy-contact-widget.c:1408 +#: ../libempathy-gtk/empathy-contact-widget.c:1416 msgid "%B %e, %Y at %R UTC" msgstr "%B %e, %Y %R யூடà¯à®šà®¿ (UTC) இலà¯" @@ -1236,38 +1249,40 @@ msgstr "தொடரà¯à®ªà¯ à®à®Ÿà®¿ (ID):" msgid "New Conversation" msgstr "பà¯à®¤à®¿à®¯ உரையாடலà¯" +#. COL_STATUS_TEXT #. COL_STATE_ICON_NAME #. COL_STATE -#. COL_STATUS_TEXT #. COL_DISPLAY_MARKUP #. COL_STATUS_CUSTOMISABLE #. COL_TYPE -#: ../libempathy-gtk/empathy-presence-chooser.c:172 +#: ../libempathy-gtk/empathy-presence-chooser.c:176 +#: ../libempathy-gtk/empathy-presence-chooser.c:212 msgid "Custom Message..." msgstr "தனிபà¯à®ªà®¯à®©à¯ செயà¯à®¤à®¿..." -#: ../libempathy-gtk/empathy-presence-chooser.c:227 +#: ../libempathy-gtk/empathy-presence-chooser.c:229 +#: ../libempathy-gtk/empathy-presence-chooser.c:231 msgid "Edit Custom Messages..." msgstr "திரà¯à®¤à¯à®¤à¯- தனிபà¯à®ªà®¯à®©à¯ செயà¯à®¤à®¿à®•à®³à¯..." -#: ../libempathy-gtk/empathy-presence-chooser.c:326 +#: ../libempathy-gtk/empathy-presence-chooser.c:330 msgid "Click to remove this status as a favorite" msgstr "இநà¯à®¤ நிலை பிடிதà¯à®¤ நிலையாக இரà¯à®ªà¯à®ªà®¤à¯ˆ நீகà¯à®• சொடà¯à®•à¯à®•à®µà¯à®®à¯ " -#: ../libempathy-gtk/empathy-presence-chooser.c:335 +#: ../libempathy-gtk/empathy-presence-chooser.c:339 msgid "Click to make this status a favorite" msgstr "இநà¯à®¤ நிலை பிடிதà¯à®¤ நிலையாக ஆகà¯à®• சொடà¯à®•à¯à®•à®µà¯à®®à¯ " -#: ../libempathy-gtk/empathy-presence-chooser.c:369 +#: ../libempathy-gtk/empathy-presence-chooser.c:373 msgid "Set status" msgstr "நிலையை அமை" -#: ../libempathy-gtk/empathy-presence-chooser.c:782 +#: ../libempathy-gtk/empathy-presence-chooser.c:794 msgid "Set your presence and current status" msgstr "உஙà¯à®•à®³à¯ நடபà¯à®ªà¯ நிலையையà¯à®®à¯ இரà¯à®ªà¯à®ªà¯ˆà®¯à¯Œà®®à¯ அமை " #. Custom messages -#: ../libempathy-gtk/empathy-presence-chooser.c:1017 +#: ../libempathy-gtk/empathy-presence-chooser.c:1043 msgid "Custom messages..." msgstr "தனிபà¯à®ªà®¯à®©à¯ செயà¯à®¤à®¿à®•à®³à¯..." @@ -1327,14 +1342,6 @@ msgstr "(_N) பà¯à®¤à®¿à®¯ à®®à¯à®©à¯à®©à®¿à®°à¯à®ªà¯à®ªà¯ˆ சேர௠" msgid "Saved Presets" msgstr "சேமிகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ à®®à¯à®©à¯ அமைபà¯à®ªà¯à®•à®³à¯" -#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:3 -msgid "gtk-add" -msgstr "ஜிடிகே-சேரà¯" - -#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:4 -msgid "gtk-remove" -msgstr "ஜிடிகே-நீகà¯à®•à¯" - #: ../libempathy-gtk/empathy-theme-manager.c:67 msgid "Classic" msgstr "தொனà¯à®®à¯ˆà®¯à®¾à®©" @@ -1351,15 +1358,15 @@ msgstr "சà¯à®¤à¯à®¤à®®à®¾à®©" msgid "Blue" msgstr "நீலமà¯" -#: ../libempathy-gtk/empathy-ui-utils.c:1382 +#: ../libempathy-gtk/empathy-ui-utils.c:1385 msgid "Unable to open URI" msgstr "யூஆரà¯à® ஠திறகà¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ" -#: ../libempathy-gtk/empathy-ui-utils.c:1472 +#: ../libempathy-gtk/empathy-ui-utils.c:1475 msgid "Select a file" msgstr "கோபà¯à®ªà¯ˆ தேரà¯à®µà¯ செயà¯" -#: ../libempathy-gtk/empathy-ui-utils.c:1530 +#: ../libempathy-gtk/empathy-ui-utils.c:1535 msgid "Select a destination" msgstr "ஒர௠இலகà¯à®•à®¿à®Ÿà®®à¯ தேரà¯à®µà¯ செயà¯à®•" @@ -1581,21 +1588,22 @@ msgstr "இரà¯à®ªà¯à®ªà¯" msgid "Set your own presence" msgstr "உஙà¯à®•à®³à¯ இரà¯à®ªà¯à®ªà¯ˆ அமைகà¯à®•à®µà¯à®®à¯" -#: ../src/empathy.c:506 +#: ../src/empathy.c:569 msgid "Don't connect on startup" msgstr "தà¯à®µà®™à¯à®•à¯à®®à¯à®ªà¯‹à®¤à¯ இணைகà¯à®• வேணà¯à®Ÿà®¾à®®à¯" -#: ../src/empathy.c:510 +#: ../src/empathy.c:573 msgid "Don't show the contact list on startup" msgstr "தà¯à®µà®™à¯à®•à¯à®®à¯à®ªà¯‹à®¤à¯ தொடரà¯à®ªà¯ படà¯à®Ÿà®¿à®¯à®²à¯ ஠காடà¯à®Ÿ வேணà¯à®Ÿà®¾à®®à¯" -#: ../src/empathy.c:514 +#: ../src/empathy.c:577 msgid "Show the accounts dialog" msgstr "கணகà¯à®•à¯à®•à®³à¯ உரையாடல௠஠காடà¯à®Ÿà¯ " -#: ../src/empathy.c:526 -msgid "- Empathy Instant Messenger" -msgstr "- எமà¯à®ªà®¤à®¿ உடனடி செயà¯à®¤à®¿à®¯à®¾à®³à®°à¯" +#: ../src/empathy.c:589 +#| msgid "- Empathy Instant Messenger" +msgid "- Empathy IM Client" +msgstr "- Empathy IM கிளையனà¯" #: ../src/empathy-about-dialog.c:83 msgid "" @@ -1721,53 +1729,56 @@ msgstr "(_C) ஒர௠பà¯à®¤à®¿à®¯ கணகà¯à®•à¯ˆ தà¯à®µà®•à¯à®•à¯" msgid "_Reuse an existing account" msgstr "(_R) இரà¯à®•à¯à®•à¯à®®à¯ ஒர௠கணகà¯à®•à¯ˆ மற௠உபயோகம௠செயà¯à®•" -#: ../src/empathy-call-window.c:420 +#: ../src/empathy-call-window.c:426 msgid "Contrast" msgstr "வேறà¯à®ªà®¾à®Ÿà¯" -#: ../src/empathy-call-window.c:423 +#: ../src/empathy-call-window.c:429 msgid "Brightness" msgstr "வெளிசà¯à®šà®®à¯" -#: ../src/empathy-call-window.c:426 +#: ../src/empathy-call-window.c:432 msgid "Gamma" msgstr "காமா" -#: ../src/empathy-call-window.c:531 +#: ../src/empathy-call-window.c:539 msgid "Volume" msgstr "ஒலி அளவà¯" -#: ../src/empathy-call-window.c:662 +#: ../src/empathy-call-window.c:671 msgid "Connecting..." msgstr "இணைகà¯à®•à®¿à®±à®¤à¯...." -#: ../src/empathy-call-window.c:746 +#: ../src/empathy-call-window.c:778 msgid "_Sidebar" msgstr "பகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà¯ˆ(_S)" -#: ../src/empathy-call-window.c:765 +#: ../src/empathy-call-window.c:797 msgid "Dialpad" msgstr "டயல௠அடà¯à®Ÿà¯ˆ" -#: ../src/empathy-call-window.c:771 +#: ../src/empathy-call-window.c:803 msgid "Audio input" msgstr "ஒலி உளà¯à®³à¯€à®Ÿà¯" -#: ../src/empathy-call-window.c:775 +#: ../src/empathy-call-window.c:807 msgid "Video input" msgstr "வீடியோ உளà¯à®³à¯€à®Ÿà¯" -#: ../src/empathy-call-window.c:835 +#. translators: Call is a noun and %s is the contact name. This string is used +#. * in the window title +#: ../src/empathy-call-window.c:868 #, c-format msgid "Call with %s" msgstr "%s ஆல௠அழை " -#: ../src/empathy-call-window.c:904 +#. translators: Call is a noun. This string is used in the window title +#: ../src/empathy-call-window.c:938 msgid "Call" msgstr "அழை" #. Translators: number of minutes:seconds the caller has been connected -#: ../src/empathy-call-window.c:1335 +#: ../src/empathy-call-window.c:1390 #, c-format msgid "Connected — %d:%02dm" msgstr "இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯ — %d:%02dm" @@ -1809,6 +1820,73 @@ msgstr "உரையாடலà¯à®•à®³à¯ (%d)" msgid "Typing a message." msgstr "செயà¯à®¤à®¿à®•à®³à¯ தடà¯à®Ÿà®šà¯à®šà®¿à®Ÿà®²à¯" +#: ../src/empathy-chat-window.ui.h:1 +#| msgid "Clean" +msgid "C_lear" +msgstr "தà¯à®Ÿà¯ˆ (_l)" + +#: ../src/empathy-chat-window.ui.h:2 +#| msgid "_Chat" +msgid "Chat" +msgstr "அரடà¯à®Ÿà¯ˆ" + +#: ../src/empathy-chat-window.ui.h:3 +#| msgid "Insert Smiley" +msgid "Insert _Smiley" +msgstr "ஸà¯à®®à¯ˆà®²à®¿à®¯à¯ˆ நà¯à®´à¯ˆ (_S)" + +#: ../src/empathy-chat-window.ui.h:4 +msgid "Move Tab _Left" +msgstr "ததà¯à®¤à®²à¯ˆ இடபà¯à®ªà®•à¯à®•à®®à¯ நகரà¯à®¤à¯à®¤à¯ (_L)" + +#: ../src/empathy-chat-window.ui.h:5 +msgid "Move Tab _Right" +msgstr "ததà¯à®¤à®²à¯ˆ வலபà¯à®ªà®•à¯à®•à®®à¯ நகரà¯à®¤à¯à®¤à¯ (_R)" + +#: ../src/empathy-chat-window.ui.h:6 +#| msgid "Contact" +msgid "_Contact" +msgstr "தொடரà¯à®ªà¯ (_C)" + +#: ../src/empathy-chat-window.ui.h:7 ../src/empathy-main-window.ui.h:14 +msgid "_Contents" +msgstr "உளà¯à®³à®Ÿà®•à¯à®•à®™à¯à®•à®³à¯ (_C)" + +#: ../src/empathy-chat-window.ui.h:8 +#| msgid "Conversation" +msgid "_Conversation" +msgstr "உரையாடல௠(_C)" + +#: ../src/empathy-chat-window.ui.h:9 +msgid "_Detach Tab" +msgstr "ததà¯à®¤à®²à¯ˆ தà¯à®£à¯à®Ÿà®¿ (_D)" + +#: ../src/empathy-chat-window.ui.h:11 +#| msgid "_Invite to chatroom" +msgid "_Favorite Chatroom" +msgstr "பிடிதà¯à®¤à®®à®¾à®© அரடà¯à®Ÿà¯ˆ அறை (_F)" + +#: ../src/empathy-chat-window.ui.h:12 ../src/empathy-main-window.ui.h:18 +msgid "_Help" +msgstr "உதவி (_H)" + +#: ../src/empathy-chat-window.ui.h:13 +msgid "_Next Tab" +msgstr "அடà¯à®¤à¯à®¤ ததà¯à®¤à®²à¯ˆ (_N)" + +#: ../src/empathy-chat-window.ui.h:14 +#| msgid "_Previous Conversations" +msgid "_Previous Tab" +msgstr "à®®à¯à®¨à¯à®¤à¯ˆà®¯ ததà¯à®¤à®²à¯ (_P)" + +#: ../src/empathy-chat-window.ui.h:15 ../src/empathy-status-icon.ui.h:4 +msgid "_Show Contact List" +msgstr "(_S) தொடரà¯à®ªà¯ படà¯à®Ÿà®¿à®¯à®²à¯ ஠காடà¯à®Ÿà¯ " + +#: ../src/empathy-chat-window.ui.h:16 +msgid "_Tabs" +msgstr "ததà¯à®¤à®²à¯à®•à®³à¯ (_T)" + #: ../src/empathy-chatrooms-window.c:258 msgid "Name" msgstr "பெயரà¯" @@ -2160,10 +2238,6 @@ msgstr "கணகà¯à®•à¯à®•à®³à¯ (_A)" msgid "_Compact Size" msgstr "(_C) அடகà¯à®•à®®à®¾à®© அளவà¯" -#: ../src/empathy-main-window.ui.h:14 -msgid "_Contents" -msgstr "உளà¯à®³à®Ÿà®•à¯à®•à®™à¯à®•à®³à¯ (_C)" - #: ../src/empathy-main-window.ui.h:15 msgid "_Debug" msgstr "(_D) வழ௠நீகà¯à®•à¯" @@ -2172,10 +2246,6 @@ msgstr "(_D) வழ௠நீகà¯à®•à¯" msgid "_File Transfers" msgstr "(_F) கோபà¯à®ªà¯ பறிமாறà¯à®±à®™à¯à®•à®³à¯ " -#: ../src/empathy-main-window.ui.h:18 -msgid "_Help" -msgstr "உதவி (_H)" - #: ../src/empathy-main-window.ui.h:19 msgid "_Join..." msgstr "(_J) சேரà¯..." @@ -2272,35 +2342,35 @@ msgstr "அறை படà¯à®Ÿà®¿à®¯à®²à¯" msgid "_Room:" msgstr "(_R) அறை:" -#: ../src/empathy-preferences.c:147 +#: ../src/empathy-preferences.c:148 msgid "Message received" msgstr "தகவல௠பெறபà¯à®ªà®Ÿà¯à®Ÿà®¤à¯" -#: ../src/empathy-preferences.c:148 +#: ../src/empathy-preferences.c:149 msgid "Message sent" msgstr "தகவல௠அனà¯à®ªà¯à®ªà®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯" -#: ../src/empathy-preferences.c:149 +#: ../src/empathy-preferences.c:150 msgid "New conversation" msgstr "பà¯à®¤à®¿à®¯ உரையாடலà¯" -#: ../src/empathy-preferences.c:150 +#: ../src/empathy-preferences.c:151 msgid "Contact goes online" msgstr "தொடரà¯à®ªà¯ இணைபில௠வரà¯à®•à®¿à®±à®¾à®°à¯" -#: ../src/empathy-preferences.c:151 +#: ../src/empathy-preferences.c:152 msgid "Contact goes offline" msgstr "தொடரà¯à®ªà¯ இணைபà¯à®ªà¯ விலகி செலà¯à®•à®¿à®±à®¾à®°à¯" -#: ../src/empathy-preferences.c:152 +#: ../src/empathy-preferences.c:153 msgid "Account connected" msgstr "கணகà¯à®•à¯ இணைகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯" -#: ../src/empathy-preferences.c:153 +#: ../src/empathy-preferences.c:154 msgid "Account disconnected" msgstr "கணகà¯à®•à¯ இணைபà¯à®ªà¯ நீகà¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯" -#: ../src/empathy-preferences.c:393 +#: ../src/empathy-preferences.c:394 msgid "Language" msgstr "மொழி" @@ -2385,13 +2455,17 @@ msgid "Privacy" msgstr "அநà¯à®¤à®°à®™à¯à®•à®®à¯" #: ../src/empathy-preferences.ui.h:21 +#| msgid "" +#| "Reduced location accuracy means that nothing more precise than your city, " +#| "state and country will be published. GPS coordinates will have a random " +#| "value added (±0.25°)." msgid "" "Reduced location accuracy means that nothing more precise than your city, " -"state and country will be published. GPS coordinates will have a random " -"value added (±0.25°)." +"state and country will be published. GPS coordinates will be accurate to 1 " +"decimal place." msgstr "" "கà¯à®±à¯ˆà®¤à¯à®¤ இட கà¯à®±à®¿à®ªà¯à®ªà¯ எனில௠உஙà¯à®•à®³à¯ மாநகரமà¯, மாநிலமà¯, நாட௠தவிர ஒனà¯à®±à¯à®®à¯ வெளியிடபà¯à®ªà®Ÿà®¾à®¤à¯. " -"ஜிபிஎஸ௠ஆயதà¯à®¤à¯Šà®²à¯ˆà®µà¯à®•à®³à¯à®•à¯à®•à¯ தறà¯à®ªà¯‹à®•à¯à®•à¯ மதிபà¯à®ªà¯ சேரà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®®à¯ (±0.25°)." +"ஜிபிஎஸ௠ஆயதà¯à®¤à¯Šà®²à¯ˆà®µà¯à®•à®³à¯à®•à¯à®•à¯ 1 தசம இடம௠திரà¯à®¤à¯à®¤à®®à®¾à®• இரà¯à®•à¯à®•à¯à®®à¯." #: ../src/empathy-preferences.ui.h:22 msgid "Show _smileys as images" @@ -2449,10 +2523,6 @@ msgstr "நிலை" msgid "_Quit" msgstr "வெளியேற௠(_Q)" -#: ../src/empathy-status-icon.ui.h:4 -msgid "_Show Contact List" -msgstr "(_S) தொடரà¯à®ªà¯ படà¯à®Ÿà®¿à®¯à®²à¯ ஠காடà¯à®Ÿà¯ " - #: ../src/empathy-tube-dispatch.c:375 #, c-format msgid "Unable to start application for service %s: %s" @@ -2467,10 +2537,6 @@ msgstr "" " %s சேவைகà¯à®•à¯ அழைபà¯à®ªà¯ கொடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯. ஆனால௠அதை கையாள உஙà¯à®•à®³à¯ கணினியில௠தேவையான " "பயனà¯à®ªà®¾à®Ÿà¯ இலà¯à®²à¯ˆ" -#: ../src/empathy-call-window-fullscreen.ui.h:1 -msgid "gtk-leave-fullscreen" -msgstr "ஜிடிகே à®®à¯à®´à¯à®¤à¯à®¤à®¿à®°à¯ˆà®¯à¯ˆ விடà¯à®Ÿà¯à®µà®¿à®²à®•à¯" - #: ../src/empathy-map-view.ui.h:1 msgid "Contact Map View" msgstr "தொடரà¯à®ªà¯à®•à®³à¯ படகà¯à®•à®¾à®Ÿà¯à®šà®¿" @@ -2538,20 +2604,3 @@ msgid "" "extension." msgstr "தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®¤à¯à®¤ இணைபà¯à®ªà¯ மேலாளர௠தொலை வழ௠நீகà¯à®•à®¤à¯à®¤à¯ˆ ஆதரிகà¯à®•à®µà®¿à®²à¯à®²à¯ˆ" -#~ msgid "Avatars are user chosen images shown in the contact list" -#~ msgstr "அவதாரஙà¯à®•à®³à¯ எனà¯à®ªà®¤à¯ தொடரà¯à®ªà¯ படà¯à®Ÿà®¿à®¯à®²à®¿à®²à¯ காணபà¯à®ªà®Ÿà¯à®®à¯ பயனர௠தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®¤à¯à®¤ பிமà¯à®ªà®™à¯à®•à®³à¯" - -#~ msgid "Show _avatars" -#~ msgstr "(_a) அவதாரஙà¯à®•à®³à¯ˆ காடà¯à®Ÿà¯" - -#~ msgid "Show co_mpact contact list" -#~ msgstr "(_m) அடகà¯à®•à®®à®¾à®© தொடரà¯à®ªà¯ படà¯à®Ÿà®¿à®¯à®²à¯ ஠காடà¯à®Ÿà¯ " - -#~ msgid "Adium" -#~ msgstr "à®à®Ÿà®¿à®¯à®®à¯" - -#~ msgid "Adium theme to use:" -#~ msgstr "பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ வேணà¯à®Ÿà®¿à®¯ à®à®Ÿà®¿à®¯à®®à¯ கரà¯à®¤à¯à®¤à¯:" - -#~ msgid "Not a valid adium theme" -#~ msgstr "செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•à¯à®®à¯ à®à®Ÿà®¿à®¯à®®à¯ கரà¯à®¤à¯à®¤à¯ அலà¯à®²" @@ -8,23 +8,22 @@ msgid "" msgstr "" "Project-Id-Version: empathy\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-08-13 19:26+0300\n" -"PO-Revision-Date: 2009-03-01 20:01+0200\n" +"POT-Creation-Date: 2009-08-25 18:24+0300\n" +"PO-Revision-Date: 2009-08-25 18:24+0300\n" "Last-Translator: Baris Cicek <baris@teamforce.name.tr>\n" "Language-Team: Turkish <gnome-turk@gnome.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" #: ../data/empathy.desktop.in.in.h:1 -#, fuzzy msgid "Empathy IM Client" -msgstr "Empathy ÇaÄŸrısı" +msgstr "Empati MesajlaÅŸma Ä°stemcisi" #: ../data/empathy.desktop.in.in.h:2 -#, fuzzy msgid "Send and receive messages" -msgstr "Anında mesaj al ve gönder" +msgstr "Mesaj gönderme ve alma" #: ../data/empathy.schemas.in.h:1 msgid "Always open a separate chat window for new chats." @@ -54,337 +53,326 @@ msgid "Compact contact list" msgstr "Sıkışık baÄŸlantı listesi" #: ../data/empathy.schemas.in.h:6 +msgid "Connection managers should be used" +msgstr "BaÄŸlantı yöneticileri kullanılmalıdır" + +#: ../data/empathy.schemas.in.h:7 msgid "Contact list sort criterium" msgstr "BaÄŸlantı listesi sıralama kriteri" -#: ../data/empathy.schemas.in.h:7 +#: ../data/empathy.schemas.in.h:8 msgid "Default directory to select an avatar image from" msgstr "Bir avatar resmi seçmek için öntanımlı dizin" -#: ../data/empathy.schemas.in.h:8 +#: ../data/empathy.schemas.in.h:9 msgid "Disable popup notifications when away" msgstr "Uzaktayken açılır uyarıları etkisizleÅŸtir" -#: ../data/empathy.schemas.in.h:9 +#: ../data/empathy.schemas.in.h:10 msgid "Disable sounds when away" msgstr "Uzaktayken sesleri etkisizleÅŸtir" -#: ../data/empathy.schemas.in.h:10 +#: ../data/empathy.schemas.in.h:11 msgid "Empathy can publish the user's location" -msgstr "" +msgstr "Empati kullanıcının yerini yayınlayabilirsiniz" -#: ../data/empathy.schemas.in.h:11 +#: ../data/empathy.schemas.in.h:12 msgid "Empathy can use the GPS to guess the location" -msgstr "" +msgstr "Empati konumu tahmin etmek için GPS kullanabilir" -#: ../data/empathy.schemas.in.h:12 +#: ../data/empathy.schemas.in.h:13 msgid "Empathy can use the cellular network to guess the location" -msgstr "" +msgstr "Empati konumu tahmin etmek için hücresel aÄŸ kullanabilir" -#: ../data/empathy.schemas.in.h:13 +#: ../data/empathy.schemas.in.h:14 msgid "Empathy can use the network to guess the location" -msgstr "" +msgstr "Empati konumu tahmin etmek için aÄŸ kullanabilir" -#: ../data/empathy.schemas.in.h:14 +#: ../data/empathy.schemas.in.h:15 msgid "Empathy default download folder" -msgstr "Empathy öntanımlı indirme klasörü" +msgstr "Empati öntanımlı indirme klasörü" -#: ../data/empathy.schemas.in.h:15 +#: ../data/empathy.schemas.in.h:16 msgid "Empathy has asked about importing accounts" -msgstr "Empathy içe aktarılan hesaplar hakkında sordu" +msgstr "Empati içe aktarılan hesaplar hakkında sordu" -#: ../data/empathy.schemas.in.h:16 +#: ../data/empathy.schemas.in.h:17 msgid "Empathy should auto-connect on startup" -msgstr "BaÅŸlangıçta Empathy otomatik baÄŸlanmalı" +msgstr "BaÅŸlangıçta Empati otomatik baÄŸlanmalı" -#: ../data/empathy.schemas.in.h:17 -#, fuzzy +#: ../data/empathy.schemas.in.h:18 msgid "Empathy should reduce the location's accuracy" -msgstr "BaÅŸlangıçta Empathy otomatik baÄŸlanmalı" +msgstr "Empati konumun hassasiyetini azaltmalı" -#: ../data/empathy.schemas.in.h:18 +#: ../data/empathy.schemas.in.h:19 msgid "Empathy should use the avatar of the contact as the chat window icon" msgstr "" -"Empathy sohbet penceresi simgesi olarak baÄŸlantının avatarını kullanmalı" +"Empati sohbet penceresi simgesi olarak baÄŸlantının avatarını kullanmalı" -#: ../data/empathy.schemas.in.h:19 +#: ../data/empathy.schemas.in.h:20 msgid "Enable WebKit Developer Tools" -msgstr "" +msgstr "WebKit GeliÅŸtirici Araçlarını EtkinleÅŸtir" -#: ../data/empathy.schemas.in.h:20 +#: ../data/empathy.schemas.in.h:21 msgid "Enable popup notifications for new messages" msgstr "Yeni mesajlar için açılır uyarıları etkinleÅŸtir" -#: ../data/empathy.schemas.in.h:21 +#: ../data/empathy.schemas.in.h:22 msgid "Enable spell checker" msgstr "Ä°mla denetçisini etkinleÅŸtir" -#: ../data/empathy.schemas.in.h:22 +#: ../data/empathy.schemas.in.h:23 msgid "Hide main window" msgstr "Ana pencereyi gizle" -#: ../data/empathy.schemas.in.h:23 +#: ../data/empathy.schemas.in.h:24 msgid "Hide the main window." msgstr "Ana pencereyi gizle." -#: ../data/empathy.schemas.in.h:24 -msgid "NetworkManager should be used" -msgstr "AÄŸ Yöneticisi kullanılmalı" - #: ../data/empathy.schemas.in.h:25 +msgid "MC 4 accounts have been imported" +msgstr "MC 4 hesapları içe aktarıldı" + +#: ../data/empathy.schemas.in.h:26 +msgid "MC 4 accounts have been imported." +msgstr "MC 4 hesapları içe aktarıldı." + +#: ../data/empathy.schemas.in.h:27 msgid "Nick completed character" msgstr "Takma ad tamamlama karakteri" -#: ../data/empathy.schemas.in.h:26 +#: ../data/empathy.schemas.in.h:28 msgid "Open new chats in separate windows" msgstr "Yeni sohbetleri ayrı pencerelerde aç" -#: ../data/empathy.schemas.in.h:27 +#: ../data/empathy.schemas.in.h:29 msgid "Path of the adium theme to use" -msgstr "" +msgstr "Kullanılacak Adium temasının yolu" -#: ../data/empathy.schemas.in.h:28 -#, fuzzy +#: ../data/empathy.schemas.in.h:30 msgid "Path of the adium theme to use if the theme used for chat is adium." -msgstr "Sohbet odaları için tema kullanılıp kullanılmayacağı." +msgstr "" +"EÄŸer sohbet için kullanılan tema adium ise kullanılacak adium temasının yolu." -#: ../data/empathy.schemas.in.h:29 +#: ../data/empathy.schemas.in.h:31 msgid "Play a sound for incoming messages" msgstr "Gelen mesajlar için bir ses çal" -#: ../data/empathy.schemas.in.h:30 +#: ../data/empathy.schemas.in.h:32 msgid "Play a sound for new conversations" msgstr "Yeni sohbetler için bir ses çal" -#: ../data/empathy.schemas.in.h:31 +#: ../data/empathy.schemas.in.h:33 msgid "Play a sound for outgoing messages" msgstr "Giden mesajlar için bir ses çal" -#: ../data/empathy.schemas.in.h:32 +#: ../data/empathy.schemas.in.h:34 msgid "Play a sound when a contact logs in" msgstr "Bir baÄŸlantı giriÅŸ yaptığında bir ses çal" -#: ../data/empathy.schemas.in.h:33 +#: ../data/empathy.schemas.in.h:35 msgid "Play a sound when a contact logs out" msgstr "Bir kiÅŸi çıkış yaptığında bir ses çal" -#: ../data/empathy.schemas.in.h:34 +#: ../data/empathy.schemas.in.h:36 msgid "Play a sound when we log in" msgstr "GiriÅŸ yaptığımızda bir ses çal" -#: ../data/empathy.schemas.in.h:35 +#: ../data/empathy.schemas.in.h:37 msgid "Play a sound when we log out" msgstr "Çıkış yaptığımızda bir ses çal" -#: ../data/empathy.schemas.in.h:36 +#: ../data/empathy.schemas.in.h:38 msgid "Popup notifications if the chat isn't focused" msgstr "Sohbet odaklanmamışsa uyarıları açılır yap" -#: ../data/empathy.schemas.in.h:37 -#, fuzzy +#: ../data/empathy.schemas.in.h:39 msgid "Popup notifications when a contact sign in" -msgstr "Sohbet odaklanmamışsa uyarıları açılır yap" +msgstr "Bir kiÅŸi oturum açtığında uyarılarılar belirsin" -#: ../data/empathy.schemas.in.h:38 -#, fuzzy +#: ../data/empathy.schemas.in.h:40 msgid "Popup notifications when a contact sign out" -msgstr "Sohbet odaklanmamışsa uyarıları açılır yap" +msgstr "Bir kiÅŸi çıkış yaptığında uyarılar belirsin" -#: ../data/empathy.schemas.in.h:39 +#: ../data/empathy.schemas.in.h:41 msgid "Salut account is created" msgstr "Salut hesabı yaratıldı" -#: ../data/empathy.schemas.in.h:40 +#: ../data/empathy.schemas.in.h:42 msgid "Show avatars" msgstr "Avatarları göster" -#: ../data/empathy.schemas.in.h:41 -#, fuzzy +#: ../data/empathy.schemas.in.h:43 msgid "Show contact list in rooms" -msgstr "BaÄŸlantı Listesini Gö_ster" +msgstr "Odalarda baÄŸlantı listesini göster" -#: ../data/empathy.schemas.in.h:42 +#: ../data/empathy.schemas.in.h:44 msgid "Show hint about closing the main window" msgstr "Ana pencereyi kapatırken ipucu göster" -#: ../data/empathy.schemas.in.h:43 +#: ../data/empathy.schemas.in.h:45 msgid "Show offline contacts" msgstr "Çevrimdışı baÄŸlantıları göster" -#: ../data/empathy.schemas.in.h:44 +#: ../data/empathy.schemas.in.h:46 msgid "Spell checking languages" msgstr "Ä°mla denetimi dilleri" -#: ../data/empathy.schemas.in.h:45 +#: ../data/empathy.schemas.in.h:47 msgid "The default folder to save file transfers in." msgstr "Dosya transferlerini içine kaydetmek için öntanımlı klasör." -#: ../data/empathy.schemas.in.h:46 +#: ../data/empathy.schemas.in.h:48 msgid "The last directory that an avatar image was chosen from." msgstr "Bir avatar resminin seçildiÄŸi son dizin." -#: ../data/empathy.schemas.in.h:47 +#: ../data/empathy.schemas.in.h:49 msgid "The theme that is used to display the conversation in chat windows." msgstr "Sohbet pencerelerinde konuÅŸmayı göstermek için kullanılan tema." -#: ../data/empathy.schemas.in.h:48 +#: ../data/empathy.schemas.in.h:50 msgid "Use graphical smileys" msgstr "Grafiksel gülümsemeleri kullan" -#: ../data/empathy.schemas.in.h:49 +#: ../data/empathy.schemas.in.h:51 msgid "Use notification sounds" msgstr "Uyarı seslerini kullan" -#: ../data/empathy.schemas.in.h:50 +#: ../data/empathy.schemas.in.h:52 msgid "Use theme for chat rooms" msgstr "Sohbet odaları için tema kullan" -#: ../data/empathy.schemas.in.h:51 +#: ../data/empathy.schemas.in.h:53 msgid "" "Whether WebKit developer tools, such as the Web Inspector, should be enabled." -msgstr "" +msgstr "Web Inspector gibi WebKit geliÅŸtirici araçlarının etkin olması." -#: ../data/empathy.schemas.in.h:52 -#, fuzzy +#: ../data/empathy.schemas.in.h:54 msgid "Whether or not Empathy can publish the user's location to his contacts." msgstr "" -"BaÄŸlantı listesindeki çevrimdışı baÄŸlantıların gösterilip gösterilmeyeceÄŸi." +"Empati'nin baÄŸlantılara kullanıcının yerini yayınlayıp yayınlamayacağı." -#: ../data/empathy.schemas.in.h:53 -#, fuzzy +#: ../data/empathy.schemas.in.h:55 msgid "Whether or not Empathy can use the GPS to guess the location." -msgstr "" -"Empathy'nin baÄŸlantının avatarını sohbet penceresi simgesi olarak kullanıp " -"kullanmayacağı." +msgstr "Empati'nin konumu tahmin etmek için GPS kullanıp kullanmaması." -#: ../data/empathy.schemas.in.h:54 -#, fuzzy +#: ../data/empathy.schemas.in.h:56 msgid "" "Whether or not Empathy can use the cellular network to guess the location." -msgstr "" -"Empathy'nin baÄŸlantının avatarını sohbet penceresi simgesi olarak kullanıp " -"kullanmayacağı." +msgstr "Empati'nin konumu tahmin etmek için hücresel aÄŸ kullanıp kullanmaması." -#: ../data/empathy.schemas.in.h:55 -#, fuzzy +#: ../data/empathy.schemas.in.h:57 msgid "Whether or not Empathy can use the network to guess the location." -msgstr "" -"Empathy'nin baÄŸlantının avatarını sohbet penceresi simgesi olarak kullanıp " -"kullanmayacağı." +msgstr "Empati'nin konumu tahmin etmek için ağı kullanıp kullanmaması." -#: ../data/empathy.schemas.in.h:56 +#: ../data/empathy.schemas.in.h:58 msgid "" "Whether or not Empathy has asked about importing accounts from other " "programs." msgstr "" -"Empathy'nin diÄŸer programlardan hesapları içe aktarmasi için sorup " +"Empati'nin diÄŸer programlardan hesapları içe aktarmasi için sorup " "sormayacağı." -#: ../data/empathy.schemas.in.h:57 +#: ../data/empathy.schemas.in.h:59 msgid "" "Whether or not Empathy should automatically log in to your accounts on " "startup." msgstr "" -"BaÅŸlangıçta Empathy'nin hesabınıza otomatik olarak giriÅŸ yapıp yapmayacağı." +"BaÅŸlangıçta Empati'nin hesabınıza otomatik olarak giriÅŸ yapıp yapmayacağı." -#: ../data/empathy.schemas.in.h:58 -#, fuzzy +#: ../data/empathy.schemas.in.h:60 msgid "" "Whether or not Empathy should reduce the location's accuracy for privacy " "reasons." -msgstr "" -"Empathy'nin baÄŸlantının avatarını sohbet penceresi simgesi olarak kullanıp " -"kullanmayacağı." +msgstr "Empati'nin gizlilik nedenleriyle yerin doÄŸruluÄŸunu azaltması." -#: ../data/empathy.schemas.in.h:59 +#: ../data/empathy.schemas.in.h:61 msgid "" "Whether or not Empathy should use the avatar of the contact as the chat " "window icon." msgstr "" -"Empathy'nin baÄŸlantının avatarını sohbet penceresi simgesi olarak kullanıp " +"Empati'nin baÄŸlantının avatarını sohbet penceresi simgesi olarak kullanıp " "kullanmayacağı." -#: ../data/empathy.schemas.in.h:60 +#: ../data/empathy.schemas.in.h:62 msgid "" -"Whether or not the Salut account has been created on the first Empathy run." +"Whether or not connectivity managers should be used to automatically " +"disconnect/reconnect." msgstr "" -"Empathy ilk kez çalıştırıldığında Salut hesabının oluÅŸturulup " -"oluÅŸturulmayacağı." +"BaÄŸlantı yöneticilerinin kendiliÄŸinden baÄŸlantıyı kesmek/yeniden baÄŸlanmak " +"için kullanılması." -#: ../data/empathy.schemas.in.h:61 +#: ../data/empathy.schemas.in.h:63 msgid "" -"Whether or not the network manager should be used to automatically " -"disconnect/reconnect." +"Whether or not the Salut account has been created on the first Empathy run." msgstr "" -"Otomatik olarak baÄŸlanma/baÄŸlantı kesme için aÄŸ yöneticisinin kullanılıp " -"kullanılmayacağı." +"Empati ilk kez çalıştırıldığında Salut hesabının oluÅŸturulup " +"oluÅŸturulmayacağı." -#: ../data/empathy.schemas.in.h:62 +#: ../data/empathy.schemas.in.h:64 msgid "" "Whether or not to check words typed against the languages you want to check " "with." msgstr "" "Yazılan kelimelerin seçtiÄŸiniz dile göre imla denetiminden geçip geçmeyeceÄŸi." -#: ../data/empathy.schemas.in.h:63 +#: ../data/empathy.schemas.in.h:65 msgid "" "Whether or not to convert smileys into graphical images in conversations." msgstr "" "KonuÅŸmalarda gülümsemelerin grafiksel görüntülere çevrilip çevrilmeyeceÄŸi." -#: ../data/empathy.schemas.in.h:64 +#: ../data/empathy.schemas.in.h:66 msgid "" "Whether or not to play a sound to notify for contacts logging in the network." msgstr "" "BaÄŸlantılar aÄŸa giriÅŸ yaparken uyarı amaçlı bir ses çalınıp çalınmayacağı." -#: ../data/empathy.schemas.in.h:65 +#: ../data/empathy.schemas.in.h:67 msgid "" "Whether or not to play a sound to notify for contacts logging off the " "network." msgstr "" "BaÄŸlantılar aÄŸdan çıkış yaparken uyarı amaçlı bir ses çalınıp çalınmayacağı." -#: ../data/empathy.schemas.in.h:66 +#: ../data/empathy.schemas.in.h:68 msgid "Whether or not to play a sound to notify for events." msgstr "Olaylar için uyarı amaçlı bir ses çalınıp çalınmayacağı." -#: ../data/empathy.schemas.in.h:67 +#: ../data/empathy.schemas.in.h:69 msgid "Whether or not to play a sound to notify for incoming messages." msgstr "Gelen mesajlar için uyarı amaçlı bir ses çalınıp çalınmayacağı." -#: ../data/empathy.schemas.in.h:68 +#: ../data/empathy.schemas.in.h:70 msgid "Whether or not to play a sound to notify for new conversations." msgstr "Yeni sohbetler için uyarı amaçlı bir ses çalınıp çalınmayacağı." -#: ../data/empathy.schemas.in.h:69 +#: ../data/empathy.schemas.in.h:71 msgid "Whether or not to play a sound to notify for outgoing messages." msgstr "Giden mesajlar için uyarı amaçlı bir ses çalınıp çalınmayacağı." -#: ../data/empathy.schemas.in.h:70 +#: ../data/empathy.schemas.in.h:72 msgid "Whether or not to play a sound when logging in a network." msgstr "Bir aÄŸa giriÅŸ yapılırken uyarı amaçlı bir ses çalınıp çalınmayacağı." -#: ../data/empathy.schemas.in.h:71 +#: ../data/empathy.schemas.in.h:73 msgid "Whether or not to play a sound when logging off a network." msgstr "Bir aÄŸdan çıkış yapılırken uyarı amaçlı bir ses çalınıp çalınmayacağı." -#: ../data/empathy.schemas.in.h:72 +#: ../data/empathy.schemas.in.h:74 msgid "Whether or not to play sound notifications when away or busy." msgstr "Uzakta veya meÅŸgul iken uyarı amaçlı bir ses çalınıp çalınmayacağı." -#: ../data/empathy.schemas.in.h:73 -#, fuzzy +#: ../data/empathy.schemas.in.h:75 msgid "" "Whether or not to show a popup notification when a contact goes offline." -msgstr "Uzakta veya meÅŸgul iken açılır uyarıların gösterilip gösterilmeyeceÄŸi." +msgstr "Bir kiÅŸi çevrimdışı kalırsa bir uyarı belirtilip belirtilmemesi." -#: ../data/empathy.schemas.in.h:74 -#, fuzzy +#: ../data/empathy.schemas.in.h:76 msgid "Whether or not to show a popup notification when a contact goes online." -msgstr "Uzakta veya meÅŸgul iken açılır uyarıların gösterilip gösterilmeyeceÄŸi." +msgstr "Bir kiÅŸi çevrimiçi olursa bir uyarı belirtilip belirtilmemesi" -#: ../data/empathy.schemas.in.h:75 +#: ../data/empathy.schemas.in.h:77 msgid "" "Whether or not to show a popup notification when receiving a new message " "even if the chat is already opened, but not focused." @@ -392,13 +380,13 @@ msgstr "" "Sohbet halen açık fakat odaklanmamış olsa dahi yeni bir mesaj alınırken " "açılır bir uyarı gösterilip gösterilmeyeceÄŸi." -#: ../data/empathy.schemas.in.h:76 +#: ../data/empathy.schemas.in.h:78 msgid "" "Whether or not to show a popup notification when receiving a new message." msgstr "" "Yeni bir mesaj alınırken açılır uyarıların gösterilip gösterilmeyeceÄŸi." -#: ../data/empathy.schemas.in.h:77 +#: ../data/empathy.schemas.in.h:79 msgid "" "Whether or not to show avatars for contacts in the contact list and chat " "windows." @@ -406,21 +394,20 @@ msgstr "" "Sohbet pencerelerindeki ve baÄŸlantı listesindeki baÄŸlantılar için avatar " "gösterilip gösterilmeyeceÄŸi." -#: ../data/empathy.schemas.in.h:78 +#: ../data/empathy.schemas.in.h:80 msgid "Whether or not to show contacts that are offline in the contact list." msgstr "" "BaÄŸlantı listesindeki çevrimdışı baÄŸlantıların gösterilip gösterilmeyeceÄŸi." -#: ../data/empathy.schemas.in.h:79 +#: ../data/empathy.schemas.in.h:81 msgid "Whether or not to show popup notifications when away or busy." msgstr "Uzakta veya meÅŸgul iken açılır uyarıların gösterilip gösterilmeyeceÄŸi." -#: ../data/empathy.schemas.in.h:80 -#, fuzzy +#: ../data/empathy.schemas.in.h:82 msgid "Whether or not to show the contact list in chat rooms." -msgstr "BaÄŸlantı listesinin sıkışık kipte gösterilip gösterilmeyeceÄŸi." +msgstr "Sohbet odalarında baÄŸlantı listesinin gösterilip gösterilmeyeceÄŸi." -#: ../data/empathy.schemas.in.h:81 +#: ../data/empathy.schemas.in.h:83 msgid "" "Whether or not to show the message dialog about closing the main window with " "the 'x' button in the title bar." @@ -428,15 +415,15 @@ msgstr "" "BaÅŸlık çubuÄŸundaki 'x' düğmesi ile ana pencerenin kapatılması hakkında mesaj " "penceresinin gösterilip gösterilmeyeceÄŸi." -#: ../data/empathy.schemas.in.h:82 +#: ../data/empathy.schemas.in.h:84 msgid "Whether to show the contact list in compact mode or not." msgstr "BaÄŸlantı listesinin sıkışık kipte gösterilip gösterilmeyeceÄŸi." -#: ../data/empathy.schemas.in.h:83 +#: ../data/empathy.schemas.in.h:85 msgid "Whether to use the theme for chat rooms or not." msgstr "Sohbet odaları için tema kullanılıp kullanılmayacağı." -#: ../data/empathy.schemas.in.h:84 +#: ../data/empathy.schemas.in.h:86 msgid "" "Which criterium to use when sorting the contact list. Default is to use sort " "by the contact's name with the value \"name\". A value of \"state\" will " @@ -446,196 +433,246 @@ msgstr "" "baÄŸlantı adına göre \"name\" (isim) deÄŸerine bakarak sıralamaktır. \"state" "\" (durum) deÄŸeri baÄŸlantı listesini duruma göre sıralayacaktır." -#: ../libempathy/empathy-ft-handler.c:838 +#: ../libempathy/empathy-account.c:1086 +msgid "Can't set an empty display name" +msgstr "BoÅŸ bir görüntülenecek isim atanamaz" + +#: ../libempathy/empathy-ft-handler.c:839 msgid "The hash of the received file and the sent one do not match" -msgstr "" +msgstr "Alınan dosyanın ve gönderilenin karması eÅŸleÅŸmiyor" -#: ../libempathy/empathy-ft-handler.c:1098 +#: ../libempathy/empathy-ft-handler.c:1099 msgid "File transfer not supported by remote contact" -msgstr "" +msgstr "Uzaktan baÄŸlantıda dosya aktarma desteklenmiyor" -#: ../libempathy/empathy-ft-handler.c:1156 +#: ../libempathy/empathy-ft-handler.c:1157 msgid "The selected file is not a regular file" -msgstr "" +msgstr "Seçilen dosya normal bir dosya deÄŸil" -#: ../libempathy/empathy-ft-handler.c:1165 +#: ../libempathy/empathy-ft-handler.c:1166 msgid "The selected file is empty" -msgstr "" +msgstr "Seçilen dosya boÅŸ" -#: ../libempathy/empathy-tp-contact-list.c:843 ../src/empathy.c:289 +#: ../libempathy/empathy-tp-contact-list.c:844 ../src/empathy.c:285 msgid "People nearby" msgstr "Yakındaki kiÅŸiler" -#: ../libempathy/empathy-tp-file.c:279 +#: ../libempathy/empathy-tp-file.c:280 msgid "Socket type not supported" -msgstr "" +msgstr "Soket türü desteklenmiyor" -#: ../libempathy/empathy-tp-file.c:398 +#: ../libempathy/empathy-tp-file.c:399 msgid "No reason was specified" msgstr "Sebep belirtilmemiÅŸ" -#: ../libempathy/empathy-tp-file.c:401 +#: ../libempathy/empathy-tp-file.c:402 msgid "The change in state was requested" msgstr "Durumda deÄŸiÅŸiklik istendi" -#: ../libempathy/empathy-tp-file.c:404 +#: ../libempathy/empathy-tp-file.c:405 msgid "You canceled the file transfer" msgstr "Dosya transferini iptal ettiniz" -#: ../libempathy/empathy-tp-file.c:407 +#: ../libempathy/empathy-tp-file.c:408 msgid "The other participant canceled the file transfer" msgstr "DiÄŸer katılımcı dosya transferini iptal etti" -#: ../libempathy/empathy-tp-file.c:410 +#: ../libempathy/empathy-tp-file.c:411 msgid "Error while trying to transfer the file" msgstr "Dosya transfer etmeye çalışılırken hata" -#: ../libempathy/empathy-tp-file.c:413 +#: ../libempathy/empathy-tp-file.c:414 msgid "The other participant is unable to transfer the file" msgstr "DiÄŸer katılımcı dosya transfer edemiyor" -#: ../libempathy/empathy-tp-file.c:416 +#: ../libempathy/empathy-tp-file.c:417 msgid "Unknown reason" msgstr "Bilinmeyen sebep" -#: ../libempathy/empathy-utils.c:265 +#: ../libempathy/empathy-utils.c:235 msgid "Available" msgstr "Ulaşılabilir" -#: ../libempathy/empathy-utils.c:267 +#: ../libempathy/empathy-utils.c:237 msgid "Busy" msgstr "MeÅŸgul" -#: ../libempathy/empathy-utils.c:270 +#: ../libempathy/empathy-utils.c:240 msgid "Away" msgstr "Uzakta" -#: ../libempathy/empathy-utils.c:272 +#: ../libempathy/empathy-utils.c:242 msgid "Hidden" msgstr "Gizli" -#: ../libempathy/empathy-utils.c:274 +#: ../libempathy/empathy-utils.c:244 msgid "Offline" msgstr "Çevrimdışı" +#: ../libempathy/empathy-utils.c:379 ../src/empathy-import-mc4-accounts.c:104 +msgid "People Nearby" +msgstr "Yakındaki Ä°nsanlar" + +#: ../libempathy/empathy-utils.c:384 +msgid "Yahoo! Japan" +msgstr "Yahoo! Japonya" + +#: ../libempathy/empathy-utils.c:385 +msgid "Facebook Chat" +msgstr "Facebook Sohbet" + #: ../libempathy/empathy-time.c:137 #, c-format msgid "%d second ago" msgid_plural "%d seconds ago" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d saniye önce" #: ../libempathy/empathy-time.c:142 #, c-format msgid "%d minute ago" msgid_plural "%d minutes ago" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d dakika önce" #: ../libempathy/empathy-time.c:147 #, c-format msgid "%d hour ago" msgid_plural "%d hours ago" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d saat önce" #: ../libempathy/empathy-time.c:152 #, c-format msgid "%d day ago" msgid_plural "%d days ago" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d gün önce" #: ../libempathy/empathy-time.c:157 #, c-format msgid "%d week ago" msgid_plural "%d weeks ago" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d hafta önce" #: ../libempathy/empathy-time.c:162 #, c-format msgid "%d month ago" msgid_plural "%d months ago" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%d ay önce" #: ../libempathy/empathy-time.c:167 msgid "in the future" -msgstr "" +msgstr "gelecekte" -#: ../libempathy-gtk/empathy-account-chooser.c:426 +#: ../libempathy-gtk/empathy-account-chooser.c:424 msgid "All" msgstr "Hepsi" -#: ../libempathy-gtk/empathy-account-widget.c:302 -#: ../libempathy-gtk/empathy-account-widget.c:354 +#: ../libempathy-gtk/empathy-account-widget.c:448 +#: ../libempathy-gtk/empathy-account-widget.c:504 #, c-format msgid "%s:" msgstr "%s:" +#: ../libempathy-gtk/empathy-account-widget.c:1224 +msgid "Enabled" +msgstr "EtkinleÅŸtirilmiÅŸ" + #: ../libempathy-gtk/empathy-account-widget-aim.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-generic.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:1 -#, fuzzy -msgid "Advanced" -msgstr "<b>GeliÅŸmiÅŸ</b>" +msgid "<span size=\"small\"><b>Example:</b> MyScreenName</span>" +msgstr "<span size=\"small\"><b>Örnek:</b> EkranÄ°smim</span>" #: ../libempathy-gtk/empathy-account-widget-aim.ui.h:2 -#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:3 -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:3 -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:3 -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-generic.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:2 #: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:2 +msgid "Advanced" +msgstr "GeliÅŸmiÅŸ" + +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:3 msgid "Pass_word:" msgstr "Par_ola:" -#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:4 msgid "Screen _Name:" msgstr "Görüne_n Ä°sim:" -#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:5 -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:10 -#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:5 +msgid "What is your AIM password?" +msgstr "AIM parolanız nedir?" + +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:6 +msgid "What is your AIM screen name?" +msgstr "AIM ekran isminiz nedir?" + +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:15 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:10 msgid "_Port:" msgstr "_Port:" -#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:5 -#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:5 -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:6 -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:11 -#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:5 -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:9 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:16 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:12 #: ../src/empathy-new-chatroom-dialog.ui.h:9 msgid "_Server:" msgstr "_Sunucu:" -#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:2 -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:2 -#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> username</span>" +msgstr "<span size=\"small\"><b>Örnek:</b> kullanıcı ismi</span>" + +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:3 msgid "Login I_D:" msgstr "GiriÅŸ I_D:" -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:5 +msgid "What is your GroupWise User ID?" +msgstr "GroupWise Kullanıcı kimliÄŸiniz nedir?" + +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:6 +msgid "What is your GroupWise password?" +msgstr "GroupWise parolanız nedir?" + +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> 123456789</span>" +msgstr "<span size=\"small\"><b>Örnek:</b> 123456789</span>" + +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:3 msgid "ICQ _UIN:" msgstr "ICQ _UIN:" -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:5 +msgid "What is your ICQ UIN?" +msgstr "ICQ UIN'iniz nedir?" + +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:6 +msgid "What is your ICQ password?" +msgstr "ICQ parolanız nedir?" + +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:8 msgid "_Charset:" msgstr "_Karakter Kümesi:" -#: ../libempathy-gtk/empathy-account-widget-irc.c:240 +#: ../libempathy-gtk/empathy-account-widget-irc.c:244 msgid "New Network" msgstr "Yeni AÄŸ" @@ -668,89 +705,139 @@ msgid "Real name:" msgstr "Geçek isim:" #: ../libempathy-gtk/empathy-account-widget-irc.ui.h:8 -#, fuzzy msgid "Servers" -msgstr "Sunucu" +msgstr "Sunucular" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:3 -#, fuzzy +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> user@jabber.org</span>" +msgstr "<span size=\"small\"><b>Örnek:</b> kullanici@jabber.org</span>" + +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:4 msgid "Override server settings" -msgstr "<b>Sunucu ayarlarının yerine geç</b>" +msgstr "Sunucu ayarlarının yerine geç" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:6 msgid "Pri_ority:" msgstr "Ö_ncelik:" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:6 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7 msgid "Reso_urce:" msgstr "Ka_ynak:" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:8 msgid "Use old SS_L" msgstr "Eski SS_L kullan" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:9 +msgid "What is your Jabber ID?" +msgstr "Jabber kimliÄŸiniz nedir?" + +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:10 +msgid "What is your Jabber password?" +msgstr "Jabber parolanız?" + +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:11 +msgid "What is your desired Jabber ID?" +msgstr "Arzu ettiÄŸiniz Jabber kimliÄŸiniz nedir?" + +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:12 +msgid "What is your desired Jabber password?" +msgstr "Arzu ettiÄŸiniz Jabber parolası nedir?" + +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:13 msgid "_Encryption required (TLS/SSL)" msgstr "Åžifr_eleme gerekli (TLS/SSL)" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:9 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:14 msgid "_Ignore SSL certificate errors" msgstr "SSL sertifika hatalarını _yoksay" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> user@hotmail.com</span>" +msgstr "<span size=\"small\"><b>Örnek:</b> kullanici@hotmail.com</span>" + +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:5 +msgid "What is your Windows Live password?" +msgstr "Windows Live parolanız nedir?" + +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:6 +msgid "What is your Windows Live user name?" +msgstr "Windows Live kullanıcı adınız nedir?" + +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:2 msgid "_Email:" msgstr "_E-posta:" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:3 msgid "_First Name:" msgstr "Ä°_lk Ad:" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:4 msgid "_Jabber ID:" msgstr "_Jabber ID:" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:5 msgid "_Last Name:" msgstr "_Soyad:" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:6 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:6 msgid "_Nickname:" msgstr "_Takma ad:" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:7 msgid "_Published Name:" msgstr "_Görünen Ä°sim:" +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> user@my.sip.server</span>" +msgstr "<span size=\"small\"><b>Örnek:</b> kullanici@sip.sunucum</span>" + #. look up the DNS SRV record at the service's domain for the host name of a STUN server. -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:4 msgid "Discover STUN" msgstr "STUN Bul" -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:6 msgid "STUN Server:" msgstr "STUN Sunucusu:" -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:6 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:7 msgid "STUN port:" msgstr "STUN portu:" -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:8 +msgid "What is your SIP account password?" +msgstr "SIP hesabı parolanız nedir?" + +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:9 +msgid "What is your SIP login ID?" +msgstr "SIP giriÅŸ kimliÄŸiniz nedir?" + +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:10 msgid "_Username:" msgstr "K_ullanıcı adı:" -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:4 msgid "Use _Yahoo Japan" msgstr "_Yahoo Japonya kullan" -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:5 +msgid "What is your Yahoo! ID?" +msgstr "Yahoo! kimliÄŸiniz nedir?" + +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:6 +msgid "What is your Yahoo! password?" +msgstr "Yahoo! parolanız nedir?" + +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:7 msgid "Yahoo I_D:" msgstr "Yahoo I_D:" -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:6 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9 msgid "_Ignore conference and chatroom invitations" msgstr "So_hbet odası ve konferans davetlerini yoksay" -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:11 msgid "_Room List locale:" msgstr "Oda Listesi ye_reli:" @@ -785,94 +872,100 @@ msgstr "Büyütmek için tıklayın" #: ../libempathy-gtk/empathy-chat.c:186 msgid "Failed to reconnect this chat" -msgstr "" +msgstr "Bu sohbete yeniden baÄŸlanma baÅŸarısız" -#: ../libempathy-gtk/empathy-chat.c:412 +#: ../libempathy-gtk/empathy-chat.c:413 msgid "Unsupported command" -msgstr "" +msgstr "Desteklenmeyen komut" -#: ../libempathy-gtk/empathy-chat.c:548 +#: ../libempathy-gtk/empathy-chat.c:549 msgid "offline" msgstr "çevrimdışı" -#: ../libempathy-gtk/empathy-chat.c:551 +#: ../libempathy-gtk/empathy-chat.c:552 msgid "invalid contact" msgstr "geçersiz baÄŸlantı" -#: ../libempathy-gtk/empathy-chat.c:554 +#: ../libempathy-gtk/empathy-chat.c:555 msgid "permission denied" msgstr "izin verilmedi" -#: ../libempathy-gtk/empathy-chat.c:557 +#: ../libempathy-gtk/empathy-chat.c:558 msgid "too long message" msgstr "çok uzun mesaj" -#: ../libempathy-gtk/empathy-chat.c:560 +#: ../libempathy-gtk/empathy-chat.c:561 msgid "not implemented" msgstr "uygulanmamış" -#: ../libempathy-gtk/empathy-chat.c:563 +#: ../libempathy-gtk/empathy-chat.c:564 msgid "unknown" msgstr "bilinmiyor" -#: ../libempathy-gtk/empathy-chat.c:567 +#: ../libempathy-gtk/empathy-chat.c:568 #, c-format msgid "Error sending message '%s': %s" msgstr "'%s' mesajı gönderilirken hata : %s" -#: ../libempathy-gtk/empathy-chat.c:597 +#: ../libempathy-gtk/empathy-chat.c:598 #, c-format msgid "Topic set to: %s" msgstr "BaÅŸlık deÄŸiÅŸtirildi: %s" -#: ../libempathy-gtk/empathy-chat.c:599 +#: ../libempathy-gtk/empathy-chat.c:600 msgid "No topic defined" msgstr "BaÅŸlık belirtilmemiÅŸ" -#: ../libempathy-gtk/empathy-chat.c:969 +#: ../libempathy-gtk/empathy-chat.c:970 msgid "(No Suggestions)" -msgstr "" +msgstr "(Öneri Yok)" -#: ../libempathy-gtk/empathy-chat.c:1023 +#: ../libempathy-gtk/empathy-chat.c:1024 msgid "Insert Smiley" msgstr "Gülümseme Ekle" #. send button -#: ../libempathy-gtk/empathy-chat.c:1041 -#: ../libempathy-gtk/empathy-ui-utils.c:1480 +#: ../libempathy-gtk/empathy-chat.c:1042 +#: ../libempathy-gtk/empathy-ui-utils.c:1471 msgid "_Send" msgstr "_Gönder" -#: ../libempathy-gtk/empathy-chat.c:1075 +#: ../libempathy-gtk/empathy-chat.c:1076 msgid "_Spelling Suggestions" -msgstr "" +msgstr "_Yazım Önerileri" -#: ../libempathy-gtk/empathy-chat.c:1190 -#, fuzzy, c-format +#: ../libempathy-gtk/empathy-chat.c:1191 +#, c-format msgid "%s has disconnected" -msgstr "BaÄŸlantı baÄŸlı deÄŸil" +msgstr "%s baÄŸlantısını kesti" -#: ../libempathy-gtk/empathy-chat.c:1194 +#. translators: reverse the order of these arguments +#. * if the kicked should come before the kicker in your locale. +#. +#: ../libempathy-gtk/empathy-chat.c:1198 #, c-format -msgid "%s was kicked by %s" -msgstr "" +msgid "%1$s was kicked by %2$s" +msgstr "%2$s tarafından %1$s kanaldan atıldı" -#: ../libempathy-gtk/empathy-chat.c:1197 +#: ../libempathy-gtk/empathy-chat.c:1201 #, c-format msgid "%s was kicked" -msgstr "" +msgstr "%s kanaldan atıldı" -#: ../libempathy-gtk/empathy-chat.c:1202 +#. translators: reverse the order of these arguments +#. * if the banned should come before the banner in your locale. +#. +#: ../libempathy-gtk/empathy-chat.c:1209 #, c-format -msgid "%s was banned by %s" -msgstr "" +msgid "%1$s was banned by %2$s" +msgstr "%2$s tarafından %1$s yasaklandı" -#: ../libempathy-gtk/empathy-chat.c:1205 +#: ../libempathy-gtk/empathy-chat.c:1212 #, c-format msgid "%s was banned" -msgstr "" +msgstr "%s yasaklandı" -#: ../libempathy-gtk/empathy-chat.c:1209 +#: ../libempathy-gtk/empathy-chat.c:1216 #, c-format msgid "%s has left the room" msgstr "%s odayı terk etti" @@ -882,42 +975,42 @@ msgstr "%s odayı terk etti" #. * given by the user living the room. If this poses a problem, #. * please let us know. :-) #. -#: ../libempathy-gtk/empathy-chat.c:1218 +#: ../libempathy-gtk/empathy-chat.c:1225 #, c-format msgid " (%s)" -msgstr "" +msgstr " (%s)" -#: ../libempathy-gtk/empathy-chat.c:1241 +#: ../libempathy-gtk/empathy-chat.c:1248 #, c-format msgid "%s has joined the room" msgstr "%s odaya katıldı" -#: ../libempathy-gtk/empathy-chat.c:1374 ../src/empathy-call-window.c:1274 +#: ../libempathy-gtk/empathy-chat.c:1381 ../src/empathy-call-window.c:1277 msgid "Disconnected" msgstr "BaÄŸlı DeÄŸil" -#: ../libempathy-gtk/empathy-chat.c:1809 +#: ../libempathy-gtk/empathy-chat.c:1817 msgid "Connected" msgstr "BaÄŸlı" -#: ../libempathy-gtk/empathy-chat.c:1859 +#: ../libempathy-gtk/empathy-chat.c:1867 #: ../libempathy-gtk/empathy-log-window.c:502 msgid "Conversation" msgstr "KonuÅŸma" -#: ../libempathy-gtk/empathy-chat.ui.h:1 ../src/empathy-chat-window.c:472 +#: ../libempathy-gtk/empathy-chat.ui.h:1 ../src/empathy-chat-window.c:471 msgid "Topic:" msgstr "BaÅŸlık:" #. Copy Link Address menu item #: ../libempathy-gtk/empathy-chat-text-view.c:316 -#: ../libempathy-gtk/empathy-theme-adium.c:267 +#: ../libempathy-gtk/empathy-theme-adium.c:266 msgid "_Copy Link Address" msgstr "BaÄŸ Adresini _Kopyala" #. Open Link menu item #: ../libempathy-gtk/empathy-chat-text-view.c:323 -#: ../libempathy-gtk/empathy-theme-adium.c:275 +#: ../libempathy-gtk/empathy-theme-adium.c:274 msgid "_Open Link" msgstr "_Bağı Aç" @@ -927,16 +1020,16 @@ msgstr "_Bağı Aç" msgid "%A %B %d %Y" msgstr "%A %B %d %Y" -#: ../libempathy-gtk/empathy-contact-dialogs.c:179 -#: ../libempathy-gtk/empathy-contact-dialogs.c:238 +#: ../libempathy-gtk/empathy-contact-dialogs.c:177 +#: ../libempathy-gtk/empathy-contact-dialogs.c:236 msgid "Edit Contact Information" msgstr "BaÄŸlantı Bilgisini Düzenle" -#: ../libempathy-gtk/empathy-contact-dialogs.c:289 +#: ../libempathy-gtk/empathy-contact-dialogs.c:287 msgid "Personal Information" msgstr "KiÅŸisel Bilgi" -#: ../libempathy-gtk/empathy-contact-dialogs.c:394 +#: ../libempathy-gtk/empathy-contact-dialogs.c:392 msgid "New Contact" msgstr "Yeni BaÄŸlantı" @@ -983,16 +1076,14 @@ msgid "_Chat" msgstr "S_ohbet" #: ../libempathy-gtk/empathy-contact-menu.c:253 -#, fuzzy msgctxt "menu item" msgid "_Audio Call" -msgstr "ÇaÄŸrıyı _Sonlandır" +msgstr "_Sesli Arama" #: ../libempathy-gtk/empathy-contact-menu.c:285 -#, fuzzy msgctxt "menu item" msgid "_Video Call" -msgstr "ÇaÄŸrıyı _Sonlandır" +msgstr "_Video Arama" #: ../libempathy-gtk/empathy-contact-menu.c:324 msgid "_View Previous Conversations" @@ -1004,7 +1095,7 @@ msgstr "Dosya gönder" #: ../libempathy-gtk/empathy-contact-menu.c:369 msgid "Share my desktop" -msgstr "" +msgstr "Masaüstümü paylaÅŸ" #: ../libempathy-gtk/empathy-contact-menu.c:397 msgid "Infor_mation" @@ -1040,133 +1131,121 @@ msgid "Select" msgstr "Seç" #: ../libempathy-gtk/empathy-contact-widget.c:1009 -#: ../src/empathy-main-window.c:1023 +#: ../src/empathy-main-window.c:1019 msgid "Group" msgstr "Grup" #: ../libempathy-gtk/empathy-contact-widget.c:1260 msgid "Country ISO Code:" -msgstr "" +msgstr "Ãœlke ISO Kodu:" #: ../libempathy-gtk/empathy-contact-widget.c:1262 -#, fuzzy msgid "Country:" -msgstr "Hesap:" +msgstr "Ãœlke:" #: ../libempathy-gtk/empathy-contact-widget.c:1264 -#, fuzzy msgid "State:" -msgstr "Durum:" +msgstr "Eyalet:" #: ../libempathy-gtk/empathy-contact-widget.c:1266 -#, fuzzy msgid "City:" -msgstr "Ä°stemci:" +msgstr "Åžehir:" #: ../libempathy-gtk/empathy-contact-widget.c:1268 -#, fuzzy msgid "Area:" -msgstr "Ermenice" +msgstr "Alan:" #: ../libempathy-gtk/empathy-contact-widget.c:1270 msgid "Postal Code:" -msgstr "" +msgstr "Posta Kodu:" #: ../libempathy-gtk/empathy-contact-widget.c:1272 -#, fuzzy msgid "Street:" -msgstr "Seç" +msgstr "Sokak:" #: ../libempathy-gtk/empathy-contact-widget.c:1274 msgid "Building:" -msgstr "" +msgstr "Bina:" #: ../libempathy-gtk/empathy-contact-widget.c:1276 -#, fuzzy msgid "Floor:" -msgstr "_Aranan:" +msgstr "Kat:" #: ../libempathy-gtk/empathy-contact-widget.c:1278 -#, fuzzy msgid "Room:" -msgstr "_Oda:" +msgstr "Oda:" #: ../libempathy-gtk/empathy-contact-widget.c:1280 -#, fuzzy msgid "Text:" -msgstr "Tür:" +msgstr "Metin:" #: ../libempathy-gtk/empathy-contact-widget.c:1282 -#, fuzzy msgid "Description:" -msgstr "Sürüm:" +msgstr "Açıklama:" #: ../libempathy-gtk/empathy-contact-widget.c:1284 msgid "URI:" -msgstr "" +msgstr "URI:" #: ../libempathy-gtk/empathy-contact-widget.c:1286 msgid "Accuracy Level:" -msgstr "" +msgstr "DoÄŸruluk Seviyesi:" #: ../libempathy-gtk/empathy-contact-widget.c:1288 msgid "Error:" -msgstr "" +msgstr "Hata:" #: ../libempathy-gtk/empathy-contact-widget.c:1290 msgid "Vertical Error (meters):" -msgstr "" +msgstr "Dikey Hata (metre):" #: ../libempathy-gtk/empathy-contact-widget.c:1292 msgid "Horizontal Error (meters):" -msgstr "" +msgstr "Yatay Hata (metre):" #: ../libempathy-gtk/empathy-contact-widget.c:1294 msgid "Speed:" -msgstr "" +msgstr "Hız:" #: ../libempathy-gtk/empathy-contact-widget.c:1296 -#, fuzzy msgid "Bearing:" -msgstr "Sürüm:" +msgstr "Yatak:" #: ../libempathy-gtk/empathy-contact-widget.c:1298 msgid "Climb Speed:" -msgstr "" +msgstr "Tırmanma Hızı:" #: ../libempathy-gtk/empathy-contact-widget.c:1300 msgid "Last Updated on:" -msgstr "" +msgstr "Son Güncelleme Tarihi:" #: ../libempathy-gtk/empathy-contact-widget.c:1302 msgid "Longitude:" -msgstr "" +msgstr "Boylam:" #: ../libempathy-gtk/empathy-contact-widget.c:1304 msgid "Latitude:" -msgstr "" +msgstr "Enlem:" #: ../libempathy-gtk/empathy-contact-widget.c:1306 msgid "Altitude:" -msgstr "" +msgstr "Rakım:" #: ../libempathy-gtk/empathy-contact-widget.c:1353 -#, fuzzy msgid "<b>Location</b>" -msgstr "<b>BaÄŸlantı</b>" +msgstr "<b>Konum</b>" #: ../libempathy-gtk/empathy-contact-widget.c:1366 -#, fuzzy msgid "<b>Location</b>, " -msgstr "<b>BaÄŸlantı</b>" +msgstr "<b>Konum</b>," #: ../libempathy-gtk/empathy-contact-widget.c:1416 msgid "%B %e, %Y at %R UTC" -msgstr "" +msgstr "%B %e, %Y tarih %R UTC" #: ../libempathy-gtk/empathy-contact-widget.ui.h:1 msgid "<b>Location</b> at (date)\t" -msgstr "" +msgstr "<b>Konum</b> (tarih) de \t" #: ../libempathy-gtk/empathy-contact-widget.ui.h:2 #: ../libempathy-gtk/empathy-new-message-dialog.ui.h:1 @@ -1184,23 +1263,21 @@ msgid "Birthday:" msgstr "DoÄŸum günü:" #: ../libempathy-gtk/empathy-contact-widget.ui.h:5 -#, fuzzy msgid "Client Information" -msgstr "<b>Ä°stemci Bilgisi</b>" +msgstr "Ä°stemci Bilgileri" #: ../libempathy-gtk/empathy-contact-widget.ui.h:6 msgid "Client:" msgstr "Ä°stemci:" #: ../libempathy-gtk/empathy-contact-widget.ui.h:7 -#: ../src/empathy-main-window.c:1006 +#: ../src/empathy-main-window.c:1002 msgid "Contact" msgstr "BaÄŸlantı" #: ../libempathy-gtk/empathy-contact-widget.ui.h:8 -#, fuzzy msgid "Contact Details" -msgstr "<b>BaÄŸlantı Ayrıntıları</b>" +msgstr "BaÄŸlantı Ayrıntıları" #: ../libempathy-gtk/empathy-contact-widget.ui.h:9 msgid "Email:" @@ -1211,9 +1288,8 @@ msgid "Fullname:" msgstr "Tam isim:" #: ../libempathy-gtk/empathy-contact-widget.ui.h:11 -#, fuzzy msgid "Groups" -msgstr "Grup" +msgstr "Gruplar" #. Identifier to connect to Instant Messaging network #: ../libempathy-gtk/empathy-contact-widget.ui.h:13 @@ -1248,24 +1324,24 @@ msgstr "Web sitesi:" msgid "_Add Group" msgstr "Grup Ek_le" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:283 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:281 msgid "new server" msgstr "yeni sunucu" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:510 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:508 msgid "Server" msgstr "Sunucu" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:525 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:523 msgid "Port" msgstr "Port" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:538 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:536 msgid "SSL" msgstr "SSL" #: ../libempathy-gtk/empathy-log-window.c:495 -#: ../src/empathy-import-dialog.c:285 +#: ../src/empathy-import-widget.c:321 msgid "Account" msgstr "Hesap" @@ -1311,37 +1387,34 @@ msgstr "Yeni KonuÅŸma" #. COL_DISPLAY_MARKUP #. COL_STATUS_CUSTOMISABLE #. COL_TYPE -#: ../libempathy-gtk/empathy-presence-chooser.c:172 -#: ../libempathy-gtk/empathy-presence-chooser.c:208 -#, fuzzy +#: ../libempathy-gtk/empathy-presence-chooser.c:176 +#: ../libempathy-gtk/empathy-presence-chooser.c:212 msgid "Custom Message..." -msgstr "Özel mesaj..." +msgstr "Özel Mesaj..." -#: ../libempathy-gtk/empathy-presence-chooser.c:225 -#: ../libempathy-gtk/empathy-presence-chooser.c:227 -#, fuzzy +#: ../libempathy-gtk/empathy-presence-chooser.c:229 +#: ../libempathy-gtk/empathy-presence-chooser.c:231 msgid "Edit Custom Messages..." -msgstr "Özel mesaj..." +msgstr "Özel Mesajları DeÄŸiÅŸtir..." -#: ../libempathy-gtk/empathy-presence-chooser.c:326 +#: ../libempathy-gtk/empathy-presence-chooser.c:330 msgid "Click to remove this status as a favorite" -msgstr "" +msgstr "Bu durumu favorilerden çıkartmak için tıklayın" -#: ../libempathy-gtk/empathy-presence-chooser.c:335 +#: ../libempathy-gtk/empathy-presence-chooser.c:339 msgid "Click to make this status a favorite" -msgstr "" +msgstr "Bu durumu favorilere eklemek için tıklayın" -#: ../libempathy-gtk/empathy-presence-chooser.c:369 -#, fuzzy +#: ../libempathy-gtk/empathy-presence-chooser.c:373 msgid "Set status" -msgstr "Durum" +msgstr "Durum ayarı" -#: ../libempathy-gtk/empathy-presence-chooser.c:782 +#: ../libempathy-gtk/empathy-presence-chooser.c:794 msgid "Set your presence and current status" -msgstr "" +msgstr "Gösterim ve mevcut durum ayarı" #. Custom messages -#: ../libempathy-gtk/empathy-presence-chooser.c:1017 +#: ../libempathy-gtk/empathy-presence-chooser.c:1043 msgid "Custom messages..." msgstr "Özel mesaj..." @@ -1386,33 +1459,20 @@ msgid "Voice call ended" msgstr "Sesli çaÄŸrı sonlandı" #: ../libempathy-gtk/empathy-status-preset-dialog.c:362 -#, fuzzy msgid "Enter Custom Message" -msgstr "Özel mesaj" +msgstr "Özel Mesaj Girin" #: ../libempathy-gtk/empathy-status-preset-dialog.c:521 -#, fuzzy msgid "Edit Custom Messages" -msgstr "Özel mesaj" +msgstr "Özel Mesajları DeÄŸiÅŸtir" #: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:1 msgid "Add _New Preset" -msgstr "" +msgstr "Yeni Önayar _Ekle" #: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:2 -#, fuzzy msgid "Saved Presets" -msgstr "Mesajı kaydet" - -#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:3 -#, fuzzy -msgid "gtk-add" -msgstr "gtk-clear" - -#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:4 -#, fuzzy -msgid "gtk-remove" -msgstr "gtk-ok" +msgstr "Kayıtlı Önayarlar" #: ../libempathy-gtk/empathy-theme-manager.c:67 msgid "Classic" @@ -1430,18 +1490,17 @@ msgstr "Temiz" msgid "Blue" msgstr "Mavi" -#: ../libempathy-gtk/empathy-ui-utils.c:1382 +#: ../libempathy-gtk/empathy-ui-utils.c:1373 msgid "Unable to open URI" msgstr "URI açılamıyor" -#: ../libempathy-gtk/empathy-ui-utils.c:1472 +#: ../libempathy-gtk/empathy-ui-utils.c:1463 msgid "Select a file" msgstr "Bir dosya seçin" -#: ../libempathy-gtk/empathy-ui-utils.c:1532 -#, fuzzy +#: ../libempathy-gtk/empathy-ui-utils.c:1523 msgid "Select a destination" -msgstr "Bir baÄŸlantı seç" +msgstr "Bir hedef seçin" #: ../libempathy-gtk/totem-subtitle-encoding.c:158 msgid "Current Locale" @@ -1630,7 +1689,7 @@ msgid "Megaphone" msgstr "Megafon" #: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2 -#: ../megaphone/src/megaphone-applet.c:519 +#: ../megaphone/src/megaphone-applet.c:518 msgid "Talk!" msgstr "KonuÅŸ!" @@ -1648,11 +1707,11 @@ msgstr "_Bilgi" msgid "_Preferences" msgstr "_Tercihler" -#: ../megaphone/src/megaphone-applet.c:168 +#: ../megaphone/src/megaphone-applet.c:166 msgid "Please configure a contact." msgstr "Lütfen bir baÄŸlantı yapılandırın." -#: ../megaphone/src/megaphone-applet.c:258 +#: ../megaphone/src/megaphone-applet.c:256 msgid "Select contact..." msgstr "BaÄŸlantı seç..." @@ -1661,26 +1720,25 @@ msgid "Presence" msgstr "Durum" #: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2 -#: ../nothere/src/nothere-applet.c:106 +#: ../nothere/src/nothere-applet.c:105 msgid "Set your own presence" msgstr "Kendi durumunuzu belirtin" -#: ../src/empathy.c:567 +#: ../src/empathy.c:588 msgid "Don't connect on startup" msgstr "BaÅŸlangıçta baÄŸlanma" -#: ../src/empathy.c:571 +#: ../src/empathy.c:592 msgid "Don't show the contact list on startup" msgstr "BaÅŸlangıçta baÄŸlantı listesini gösterme" -#: ../src/empathy.c:575 +#: ../src/empathy.c:596 msgid "Show the accounts dialog" msgstr "Hesaplar penceresini göster" -#: ../src/empathy.c:587 -#, fuzzy +#: ../src/empathy.c:608 msgid "- Empathy IM Client" -msgstr "%s - Empathy ÇaÄŸrısı" +msgstr "- Empati MesajlaÅŸma Ä°stemcisi" #: ../src/empathy-about-dialog.c:83 msgid "" @@ -1689,7 +1747,7 @@ msgid "" "Foundation; either version 2 of the License, or (at your option) any later " "version." msgstr "" -"Empathy özgür yazılımdır ve Özgür Yazılım Vakfı tarafından yayınlanan GNU " +"Empati özgür yazılımdır ve Özgür Yazılım Vakfı tarafından yayınlanan GNU " "Genel Kamu Lisansı sürüm 2 veya daha sonraki bir sürümün ÅŸartları altında " "yeniden dağıtabilir ve/veya deÄŸiÅŸtirebilirsiniz." @@ -1700,7 +1758,7 @@ msgid "" "FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " "details." msgstr "" -"Empathy HERHANGÄ° BÄ°R GARANTÄ° OLMADAN; hatta dolaylı olarak ORTALAMA BÄ°R " +"Empati HERHANGÄ° BÄ°R GARANTÄ° OLMADAN; hatta dolaylı olarak ORTALAMA BÄ°R " "KALÄ°TE GARANTÄ°SÄ° veya ÖZEL BÄ°R AMAÇ İÇİN UYGUNLUÄžU bile olmadan faydalı " "olması umuduyla dağıtılmaktadır." @@ -1710,7 +1768,7 @@ msgid "" "Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin " "Street, Fifth Floor, Boston, MA 02110-130159 USA" msgstr "" -"Empathy ile birlikte GNU Genel Kamu Lisansının bir kopyasını almış olmanız " +"Empati ile birlikte GNU Genel Kamu Lisansının bir kopyasını almış olmanız " "gereklidir; eÄŸer almadıysanız Free Software Foundation, Inc., 51 Franklin " "Street, Fifth Floor, Boston, MA 02110-130159 USA adresine yazın." @@ -1724,21 +1782,136 @@ msgstr "" "Deniz Koçak <deniz.kocak@linux.org.tr>\n" "Barış Çiçek <baris@teamforce.name.tr>" -#: ../src/empathy-accounts-dialog.c:392 -msgid "Enabled" -msgstr "EtkinleÅŸtirilmiÅŸ" +#. translators: this is followed by the "while ..." strings some lines +#. * down this file. +#. +#: ../src/empathy-account-assistant.c:121 +msgid "There has been an error " +msgstr "OluÅŸan hata " + +#. translators: this follows the "There has been an error " string +#: ../src/empathy-account-assistant.c:125 +msgid "while importing the accounts." +msgstr "hesaplar içe aktarılırken gerçekleÅŸti." + +#. translators: this follows the "There has been an error " string +#: ../src/empathy-account-assistant.c:129 +msgid "while parsing the account details." +msgstr "hesap bilgileri ayrıştırılırken gerçekleÅŸti." + +#. translators: this follows the "There has been an error " string +#: ../src/empathy-account-assistant.c:133 +msgid "while creating the account." +msgstr "hesap oluÅŸtururken gerçekleÅŸti." + +#: ../src/empathy-account-assistant.c:151 +#, c-format +msgid "The error message was: <span style=\"italic\">%s</span>" +msgstr "Hata mesajı: <span style=\"italic\">%s</span>" -#: ../src/empathy-accounts-dialog.c:402 ../src/empathy-accounts-dialog.ui.h:1 -msgid "Accounts" -msgstr "Hesaplar" +#: ../src/empathy-account-assistant.c:159 +msgid "" +"You can either go back and try to enter your accounts' details again or quit " +"this wizard and add accounts later from the Edit menu." +msgstr "" +"Geri dönüp tekrar hesaplarınızın ayrıntılarını girmeyi deneyin ya da bu " +"sihirbazdan çıkın ve daha sonra Düzen menüsünden hesapları eklemeyin." + +#: ../src/empathy-account-assistant.c:194 +msgid "An error occurred" +msgstr "Bir hata oluÅŸtu" +#. Create account #. To translator: %s is the protocol name -#: ../src/empathy-accounts-dialog.c:837 +#. Create account +#. To translator: %s is the name of the protocol, such as "Google Talk" or +#. * "Yahoo! +#. +#: ../src/empathy-account-assistant.c:330 +#: ../src/empathy-accounts-dialog.c:1101 #, c-format msgid "New %s account" msgstr "Yeni %s hesabı" -#: ../src/empathy-accounts-dialog.c:950 +#: ../src/empathy-account-assistant.c:397 +msgid "What kind of chat account do you have?" +msgstr "Ne tür bir sohbet hesabınız var?" + +#: ../src/empathy-account-assistant.c:403 +msgid "Do you have any other chat accounts you want to set up?" +msgstr "Kurmak istediÄŸiniz herhangi bir baÅŸka sohbet hesabınız var mı?" + +#: ../src/empathy-account-assistant.c:409 +msgid "Enter your account details" +msgstr "Hesap bilgilerinizi girin" + +#: ../src/empathy-account-assistant.c:414 +msgid "What kind of chat account do you want to create?" +msgstr "Ne tür bir sohbet hesabı oluÅŸturmak istiyorsunuz?" + +#: ../src/empathy-account-assistant.c:420 +msgid "Do you want to create other chat accounts?" +msgstr "BaÅŸka sohbet hesapları oluÅŸturmak ister misiniz?" + +#: ../src/empathy-account-assistant.c:427 +msgid "Enter the details for the new account" +msgstr "Yeni hesap için ayrıntıları girin" + +#: ../src/empathy-account-assistant.c:513 +msgid "" +"With Empathy you can chat with people online nearby and with friends and " +"colleagues who use Google Talk, AIM, Windows Live and many other chat " +"programs. With a microphone or a webcam you can also have audio or video " +"calls." +msgstr "" +"Empati ile, yakındaki çevirim içi insanlar ve Google Talk, AIM, Windows Live " +"ve diÄŸer pek çok sohbet programlarını kullanan dostlarınız ve iÅŸ " +"arkadaÅŸlarınızla sohbet edebilirsiniz. Bir mikrofon ya da bir web kamerası " +"ile ses veya video aramaları yapabilirsiniz." + +#: ../src/empathy-account-assistant.c:530 +msgid "Do you have an account you've been using with another chat program?" +msgstr "BaÅŸka sohbet programları ile kullandığınız bir hesabınız var mı?" + +#: ../src/empathy-account-assistant.c:553 +msgid "Yes, import my account details from " +msgstr "Evet, hesabımı bilgirimi aktar" + +#: ../src/empathy-account-assistant.c:574 +msgid "Yes, I'll enter my account details now" +msgstr "Evet, ÅŸimdi hesap bilgilerimi gireceÄŸim" + +#: ../src/empathy-account-assistant.c:596 +msgid "No, I want a new account" +msgstr "Hayır, yeni bir hesap istiyorum" + +#: ../src/empathy-account-assistant.c:606 +msgid "No, I just want to see people online nearby for now" +msgstr "Hayır, sadece yakındaki insanları çevirim içi görmek istiyorum" + +#: ../src/empathy-account-assistant.c:627 +msgid "Select the accounts you want to import:" +msgstr "İçe aktarmak istediÄŸiniz hesapları seçin:" + +#: ../src/empathy-account-assistant.c:714 +#: ../src/empathy-new-chatroom-dialog.c:496 +#: ../src/empathy-new-chatroom-dialog.c:497 +msgid "Yes" +msgstr "Evet" + +#: ../src/empathy-account-assistant.c:721 +msgid "No, that's all for now" +msgstr "Hayır ÅŸimdilik hepsi bu" + +#: ../src/empathy-account-assistant.c:914 +msgid "Welcome to Empathy" +msgstr "Empati'ye HoÅŸgeldiniz" + +#: ../src/empathy-account-assistant.c:923 +msgid "Import your existing accounts" +msgstr "Varolan hesaplarınızı içe aktarın" + +#: ../src/empathy-accounts-dialog.c:616 #, c-format msgid "" "You are about to remove your %s account!\n" @@ -1747,7 +1920,7 @@ msgstr "" "%s hesabınızı kaldırmak üzeresiniz!\n" "Devam etmek istediÄŸinize emin misiniz?" -#: ../src/empathy-accounts-dialog.c:956 +#: ../src/empathy-accounts-dialog.c:622 msgid "" "Any associated conversations and chat rooms will NOT be removed if you " "decide to proceed.\n" @@ -1761,35 +1934,23 @@ msgstr "" "Daha sonraki bir zamanda hesabı geri eklemeye karar verirseniz yine de " "eriÅŸilebilir olacaklardır." +#: ../src/empathy-accounts-dialog.ui.h:1 +msgid "Accounts" +msgstr "Hesaplar" + #: ../src/empathy-accounts-dialog.ui.h:2 -#, fuzzy -msgid "Add Account" -msgstr "Hesap" +msgid "Add new" +msgstr "Yeni ekle" #: ../src/empathy-accounts-dialog.ui.h:3 msgid "Cr_eate" msgstr "O_luÅŸtur" #: ../src/empathy-accounts-dialog.ui.h:4 -#, fuzzy -msgid "Gmail" -msgstr "E-posta:" - -#: ../src/empathy-accounts-dialog.ui.h:5 -msgid "Import Accounts..." -msgstr "Hesapları İçe Aktar..." - -#: ../src/empathy-accounts-dialog.ui.h:6 -#, fuzzy msgid "No protocol installed" -msgstr "<b>Bir protokol kurulmamış</b>" +msgstr "Hiçbir protokol yüklü deÄŸil" -#: ../src/empathy-accounts-dialog.ui.h:7 -#, fuzzy -msgid "Settings" -msgstr "<b>Ayarlar</b>" - -#: ../src/empathy-accounts-dialog.ui.h:8 +#: ../src/empathy-accounts-dialog.ui.h:5 msgid "" "To add a new account, you first have to install a backend for each protocol " "you want to use." @@ -1797,24 +1958,21 @@ msgstr "" "Yeni bir hesap eklemek için önce kullanmak istediÄŸiniz protokollerin her " "biri için sisteminize bir arka uç kurmalısınız." -#: ../src/empathy-accounts-dialog.ui.h:9 -msgid "Type:" -msgstr "Tür:" - -#: ../src/empathy-accounts-dialog.ui.h:10 -#, fuzzy +#: ../src/empathy-accounts-dialog.ui.h:6 msgid "_Add..." -msgstr "BaÄŸlantı _Ekle..." +msgstr "_Ekle..." -#: ../src/empathy-accounts-dialog.ui.h:11 -#, fuzzy +#: ../src/empathy-accounts-dialog.ui.h:7 msgid "_Create a new account" -msgstr "Yeni bir IRC ağı oluÅŸtur" +msgstr "_Yeni bir hesap oluÅŸtur" -#: ../src/empathy-accounts-dialog.ui.h:12 -#, fuzzy +#: ../src/empathy-accounts-dialog.ui.h:8 msgid "_Reuse an existing account" -msgstr "Hesapları göster ve düzenle" +msgstr "Varolan bir hesabı yeniden _kullan" + +#: ../src/empathy-accounts-dialog.ui.h:9 +msgid "account" +msgstr "hesap" #: ../src/empathy-call-window.c:426 msgid "Contrast" @@ -1852,21 +2010,23 @@ msgstr "Ses giriÅŸi" msgid "Video input" msgstr "Video giriÅŸi" -#: ../src/empathy-call-window.c:866 +#. translators: Call is a noun and %s is the contact name. This string is used +#. * in the window title +#: ../src/empathy-call-window.c:868 #, c-format msgid "Call with %s" -msgstr "" +msgstr "%s ile çaÄŸrı" -#: ../src/empathy-call-window.c:935 -#, fuzzy +#. translators: Call is a noun. This string is used in the window title +#: ../src/empathy-call-window.c:938 msgid "Call" -msgstr "_Ara" +msgstr "ÇaÄŸrı" #. Translators: number of minutes:seconds the caller has been connected -#: ../src/empathy-call-window.c:1387 -#, fuzzy, c-format +#: ../src/empathy-call-window.c:1390 +#, c-format msgid "Connected — %d:%02dm" -msgstr "BaÄŸlı -- %d:%02dm" +msgstr "BaÄŸlı - %d:%02dd" #: ../src/empathy-call-window.ui.h:1 msgid "Hang up" @@ -1874,7 +2034,7 @@ msgstr "Askıya al" #: ../src/empathy-call-window.ui.h:2 msgid "Redial" -msgstr "" +msgstr "Tekrar arama" #: ../src/empathy-call-window.ui.h:3 msgid "Send Audio" @@ -1896,12 +2056,12 @@ msgstr "_Ara" msgid "_View" msgstr "_Görünüm" -#: ../src/empathy-chat-window.c:344 +#: ../src/empathy-chat-window.c:343 #, c-format msgid "Conversations (%d)" msgstr "KonuÅŸmalar (%d)" -#: ../src/empathy-chat-window.c:476 +#: ../src/empathy-chat-window.c:475 msgid "Typing a message." msgstr "Bir mesaj yazıyor." @@ -1981,75 +2141,75 @@ msgstr "Otomatik-BaÄŸlan" msgid "Manage Favorite Rooms" msgstr "Sık Kullanılan Odaları Yönet" -#: ../src/empathy-event-manager.c:321 +#: ../src/empathy-event-manager.c:322 msgid "Incoming call" msgstr "Gelen çaÄŸrı" -#: ../src/empathy-event-manager.c:324 +#: ../src/empathy-event-manager.c:325 #, c-format msgid "%s is calling you, do you want to answer?" msgstr "%s sizi arıyor, cevap vermek istiyor musunuz?" -#: ../src/empathy-event-manager.c:331 +#: ../src/empathy-event-manager.c:332 msgid "_Reject" msgstr "_Reddet" -#: ../src/empathy-event-manager.c:337 +#: ../src/empathy-event-manager.c:338 msgid "_Answer" msgstr "Cev_apla" -#: ../src/empathy-event-manager.c:452 +#: ../src/empathy-event-manager.c:453 #, c-format msgid "Incoming call from %s" msgstr "%s kiÅŸisinden gelen çaÄŸrı" -#: ../src/empathy-event-manager.c:496 +#: ../src/empathy-event-manager.c:497 #, c-format msgid "%s is offering you an invitation" msgstr "%s size bir davet öneriyor" -#: ../src/empathy-event-manager.c:502 +#: ../src/empathy-event-manager.c:503 msgid "An external application will be started to handle it." msgstr "Yönetebilmek için harici bir uygulama baÅŸlatılacak." -#: ../src/empathy-event-manager.c:507 +#: ../src/empathy-event-manager.c:508 msgid "You don't have the needed external application to handle it." msgstr "Yönetebilecek harici bir uygulamaya ihtiyacınız yok." -#: ../src/empathy-event-manager.c:634 +#: ../src/empathy-event-manager.c:635 msgid "Room invitation" msgstr "Oda daveti" -#: ../src/empathy-event-manager.c:637 +#: ../src/empathy-event-manager.c:638 #, c-format msgid "%s is inviting you to join %s" msgstr "%s sizi %s 'e katılmanız için davet ediyor" -#: ../src/empathy-event-manager.c:645 +#: ../src/empathy-event-manager.c:646 msgid "_Decline" msgstr "_Reddet" -#: ../src/empathy-event-manager.c:650 +#: ../src/empathy-event-manager.c:651 #: ../src/empathy-new-chatroom-dialog.ui.h:7 msgid "_Join" msgstr "_Katıl" -#: ../src/empathy-event-manager.c:689 +#: ../src/empathy-event-manager.c:690 #, c-format msgid "%s invited you to join %s" msgstr "%s sizi %s 'e katılmanız için davet etti" -#: ../src/empathy-event-manager.c:715 +#: ../src/empathy-event-manager.c:716 #, c-format msgid "Incoming file transfer from %s" msgstr "%s kiÅŸisinden gelen dosya transferi" -#: ../src/empathy-event-manager.c:895 +#: ../src/empathy-event-manager.c:896 #, c-format msgid "Subscription requested by %s" msgstr "%s tarafından kayıt istendi" -#: ../src/empathy-event-manager.c:899 +#: ../src/empathy-event-manager.c:900 #, c-format msgid "" "\n" @@ -2059,16 +2219,16 @@ msgstr "" "Mesaj: %s" #. someone is logging off -#: ../src/empathy-event-manager.c:935 +#: ../src/empathy-event-manager.c:936 #, c-format msgid "%s is now offline." -msgstr "" +msgstr "%s ÅŸimdi çevrimdışı." #. someone is logging in -#: ../src/empathy-event-manager.c:951 +#: ../src/empathy-event-manager.c:952 #, c-format msgid "%s is now online." -msgstr "" +msgstr "%s ÅŸimdi çevrimiçi." #. Translators: time left, when it is more than one hour #: ../src/empathy-ft-manager.c:101 @@ -2088,9 +2248,9 @@ msgid "Unknown" msgstr "Bilinmiyor" #: ../src/empathy-ft-manager.c:275 -#, fuzzy, c-format +#, c-format msgid "%s of %s at %s/s" -msgstr "%s / %s" +msgstr "%s / %s hız %s/s" #: ../src/empathy-ft-manager.c:276 #, c-format @@ -2112,23 +2272,22 @@ msgstr "\"%s\" dosyası %s kiÅŸisine gönderiliyor" #. translators: first %s is filename, second %s #. * is the contact name #: ../src/empathy-ft-manager.c:340 -#, fuzzy, c-format +#, c-format msgid "Error receiving \"%s\" from %s" -msgstr "\"%s\" dosyası %s kiÅŸisinden alınıyor" +msgstr "\"%s\" dosyası %s kullanıcısından alınırken hata" #: ../src/empathy-ft-manager.c:343 msgid "Error receiving a file" -msgstr "" +msgstr "Dosya alırken hata" #: ../src/empathy-ft-manager.c:348 -#, fuzzy, c-format +#, c-format msgid "Error sending \"%s\" to %s" -msgstr "\"%s\" dosyası %s kiÅŸisine gönderiliyor" +msgstr "\"%s\" dosyası %s kullanıcısına gönderilirken hata" #: ../src/empathy-ft-manager.c:351 -#, fuzzy msgid "Error sending a file" -msgstr "'%s' mesajı gönderilirken hata : %s" +msgstr "Dosya gönderirken hata" #. translators: first %s is filename, second %s #. * is the contact name @@ -2149,19 +2308,18 @@ msgid "File transfer completed" msgstr "Dosya transferi tamamlandı" #: ../src/empathy-ft-manager.c:617 ../src/empathy-ft-manager.c:784 -#, fuzzy msgid "Waiting for the other participant's response" -msgstr "DiÄŸer katılımcının cevabı bekleniyor" +msgstr "DiÄŸer katılımcının yanıtı bekleniyor" #: ../src/empathy-ft-manager.c:643 ../src/empathy-ft-manager.c:681 #, c-format msgid "Checking integrity of \"%s\"" -msgstr "" +msgstr "\"%s\" bütünlüğünü kontrol ediliyor" #: ../src/empathy-ft-manager.c:646 ../src/empathy-ft-manager.c:684 #, c-format msgid "Hashing \"%s\"" -msgstr "" +msgstr "Karma \"%s\"" #: ../src/empathy-ft-manager.c:1024 msgid "%" @@ -2176,101 +2334,105 @@ msgid "Remaining" msgstr "Kalan" #: ../src/empathy-ft-manager.ui.h:1 -#, fuzzy msgid "File Transfers" -msgstr "Dosya transferleri" +msgstr "Dosya Transferleri" #: ../src/empathy-ft-manager.ui.h:2 msgid "Remove completed, canceled and failed file transfers from the list" msgstr "" "Listeden tamamlanmış, iptal edilmiÅŸ ve baÅŸarısız dosya transferlerini kaldı" +#: ../src/empathy-import-dialog.c:84 +msgid "" +"No accounts to import could be found. Empathy currently only supports " +"importing accounts from Pidgin." +msgstr "" +"İçe aktarmak için hiçbir hesap bulunamadı. Empati ÅŸu anda sadece Pidgin'den " +"hesapları içe aktarmayı destekliyor." + +#: ../src/empathy-import-dialog.c:199 +msgid "Import Accounts" +msgstr "Hesapları İçe Aktar" + #. Translators: this is the header of a treeview column -#: ../src/empathy-import-dialog.c:263 +#: ../src/empathy-import-widget.c:301 msgid "Import" msgstr "İçe Aktar" -#: ../src/empathy-import-dialog.c:272 +#: ../src/empathy-import-widget.c:310 msgid "Protocol" msgstr "Protokol" -#: ../src/empathy-import-dialog.c:298 +#: ../src/empathy-import-widget.c:334 msgid "Source" msgstr "Kaynak" -#: ../src/empathy-import-dialog.c:392 -msgid "" -"No accounts to import could be found. Empathy currently only supports " -"importing accounts from Pidgin." -msgstr "" -"İçe aktarmak için hiçbir hesap bulunamadı. Empathy ÅŸu anda sadece Pidgin'den " -"hesapları içe aktarmayı destekliyor." - -#: ../src/empathy-import-dialog.ui.h:1 -msgid "Import Accounts" -msgstr "Hesapları İçe Aktar" +#: ../src/empathy-import-mc4-accounts.c:106 +#, c-format +msgid "%s account" +msgstr "%s hesabı" -#: ../src/empathy-main-window.c:402 +#: ../src/empathy-main-window.c:399 msgid "_Edit account" msgstr "Hesabı düz_enle" -#: ../src/empathy-main-window.c:505 +#: ../src/empathy-main-window.c:502 msgid "No error specified" msgstr "Hata belirtilmemiÅŸ" -#: ../src/empathy-main-window.c:508 +#: ../src/empathy-main-window.c:505 msgid "Network error" msgstr "AÄŸ hatası" -#: ../src/empathy-main-window.c:511 +#: ../src/empathy-main-window.c:508 msgid "Authentication failed" msgstr "Kimlik denetimi baÅŸarısız" -#: ../src/empathy-main-window.c:514 +#: ../src/empathy-main-window.c:511 msgid "Encryption error" msgstr "Åžifreleme hatası" -#: ../src/empathy-main-window.c:517 +#: ../src/empathy-main-window.c:514 msgid "Name in use" msgstr "Ä°sim kullanımda" -#: ../src/empathy-main-window.c:520 +#: ../src/empathy-main-window.c:517 msgid "Certificate not provided" msgstr "Sertifika saÄŸlanmamış" -#: ../src/empathy-main-window.c:523 +#: ../src/empathy-main-window.c:520 msgid "Certificate untrusted" msgstr "Sertifika güvenilmez" -#: ../src/empathy-main-window.c:526 +#: ../src/empathy-main-window.c:523 msgid "Certificate expired" msgstr "Sertifikanın süresi dolmuÅŸ" -#: ../src/empathy-main-window.c:529 +#: ../src/empathy-main-window.c:526 msgid "Certificate not activated" msgstr "Sertifika etkinleÅŸtirilmemiÅŸ" -#: ../src/empathy-main-window.c:532 +#: ../src/empathy-main-window.c:529 msgid "Certificate hostname mismatch" msgstr "Sertifikanın makine adı uyuÅŸmuyor" -#: ../src/empathy-main-window.c:535 +#: ../src/empathy-main-window.c:532 msgid "Certificate fingerprint mismatch" msgstr "Sertifikanın parmak izi uyuÅŸmuyor" -#: ../src/empathy-main-window.c:538 +#: ../src/empathy-main-window.c:535 msgid "Certificate self-signed" msgstr "Sertifika kendinden-imzalı" -#: ../src/empathy-main-window.c:541 +#: ../src/empathy-main-window.c:538 msgid "Certificate error" msgstr "Sertifika hatası" -#: ../src/empathy-main-window.c:544 +#: ../src/empathy-main-window.c:541 msgid "Unknown error" msgstr "Bilinmeyen hata" -#: ../src/empathy-main-window.c:1293 +#: ../src/empathy-main-window.c:1288 msgid "Show and edit accounts" msgstr "Hesapları göster ve düzenle" @@ -2280,7 +2442,7 @@ msgstr "BaÄŸlantı Listesi" #: ../src/empathy-main-window.ui.h:2 msgid "Contacts on a _Map" -msgstr "" +msgstr "_Haritada BaÄŸlantılar" #: ../src/empathy-main-window.ui.h:3 msgid "Context" @@ -2296,21 +2458,19 @@ msgstr "Sık Kullanılanları Yönet" #: ../src/empathy-main-window.ui.h:6 msgid "N_ormal Size" -msgstr "" +msgstr "_Normal Boyut" #: ../src/empathy-main-window.ui.h:7 msgid "Normal Size With _Avatars" -msgstr "" +msgstr "_Avatarlar ile Normal Boyut" #: ../src/empathy-main-window.ui.h:8 -#, fuzzy msgid "Sort by _Name" -msgstr "_Ada göre sırala" +msgstr "_Ada Göre Sırala" #: ../src/empathy-main-window.ui.h:9 -#, fuzzy msgid "Sort by _Status" -msgstr "_Duruma göre sırala" +msgstr "_Duruma Göre Sırala" #: ../src/empathy-main-window.ui.h:10 msgid "_Accounts" @@ -2318,55 +2478,49 @@ msgstr "Hes_aplar" #: ../src/empathy-main-window.ui.h:13 msgid "_Compact Size" -msgstr "" +msgstr "_Sıkışık Boyut" #: ../src/empathy-main-window.ui.h:15 msgid "_Debug" -msgstr "" +msgstr "_Hata Ayıklama" #: ../src/empathy-main-window.ui.h:17 -#, fuzzy msgid "_File Transfers" -msgstr "Dosya transferleri" +msgstr "_Dosya Transferleri" #: ../src/empathy-main-window.ui.h:19 -#, fuzzy msgid "_Join..." -msgstr "_Katıl" +msgstr "_Katıl..." #: ../src/empathy-main-window.ui.h:20 ../src/empathy-status-icon.ui.h:2 msgid "_New Conversation..." msgstr "Ye_ni KonuÅŸma..." #: ../src/empathy-main-window.ui.h:21 -#, fuzzy msgid "_Offline Contacts" -msgstr "Çevrimdışı _BaÄŸlantıları Göster" +msgstr "Ç_evrim Dışı BaÄŸlantılar" #: ../src/empathy-main-window.ui.h:22 msgid "_Personal Information" msgstr "_KiÅŸisel Bilgi" #: ../src/empathy-main-window.ui.h:24 -#, fuzzy msgid "_Previous Conversations" -msgstr "Önceki KonuÅŸmalar" +msgstr "Önceki _KonuÅŸmalar" #: ../src/empathy-main-window.ui.h:25 msgid "_Room" msgstr "_Oda" -#: ../src/empathy-new-chatroom-dialog.c:331 -#, fuzzy +#: ../src/empathy-new-chatroom-dialog.c:328 msgid "Chat Room" -msgstr "Sohbet Odaları" +msgstr "Sohbet Odası" -#: ../src/empathy-new-chatroom-dialog.c:347 -#, fuzzy +#: ../src/empathy-new-chatroom-dialog.c:344 msgid "Members" -msgstr "Temalar" +msgstr "Ãœyeler" -#: ../src/empathy-new-chatroom-dialog.c:496 +#: ../src/empathy-new-chatroom-dialog.c:494 #, c-format msgctxt "" "Room/Join's roomlist tooltip. Parametersare a channel name, yes/no, yes/no " @@ -2377,28 +2531,27 @@ msgid "" "Password required: %s\n" "Members: %s" msgstr "" +"<b>%s</b>\n" +"Davet gerekli: %s\n" +"Parola gerekli: %s\n" +"Kanaldakiler: %s" -#: ../src/empathy-new-chatroom-dialog.c:498 -#: ../src/empathy-new-chatroom-dialog.c:499 -msgid "Yes" -msgstr "" - -#: ../src/empathy-new-chatroom-dialog.c:498 -#: ../src/empathy-new-chatroom-dialog.c:499 +#: ../src/empathy-new-chatroom-dialog.c:496 +#: ../src/empathy-new-chatroom-dialog.c:497 msgid "No" -msgstr "" +msgstr "Hayır" -#: ../src/empathy-new-chatroom-dialog.c:526 +#: ../src/empathy-new-chatroom-dialog.c:524 msgid "Could not start room listing" -msgstr "" +msgstr "Oda listesi baÅŸlatılamadı" -#: ../src/empathy-new-chatroom-dialog.c:536 +#: ../src/empathy-new-chatroom-dialog.c:534 msgid "Could not stop room listing" -msgstr "" +msgstr "Oda listesi durdurulamadı" #: ../src/empathy-new-chatroom-dialog.ui.h:2 msgid "Couldn't load room list" -msgstr "" +msgstr "Oda listesi yüklenemedi" #: ../src/empathy-new-chatroom-dialog.ui.h:3 msgid "" @@ -2416,14 +2569,12 @@ msgstr "" "boÅŸ bırakın." #: ../src/empathy-new-chatroom-dialog.ui.h:5 -#, fuzzy msgid "Join Room" -msgstr "Oda" +msgstr "Odaya Katıl" #: ../src/empathy-new-chatroom-dialog.ui.h:6 -#, fuzzy msgid "Room List" -msgstr "Oda Listesi ye_reli:" +msgstr "Oda Listesi" #: ../src/empathy-new-chatroom-dialog.ui.h:8 msgid "_Room:" @@ -2463,29 +2614,27 @@ msgstr "Dil" #: ../src/empathy-preferences.ui.h:1 msgid "Allow _GPS usage" -msgstr "" +msgstr "_GPS kullanımına izin ver" #: ../src/empathy-preferences.ui.h:2 msgid "Allow _cellphone usage" -msgstr "" +msgstr "_Cep telefonu kullanımına izin ver" #: ../src/empathy-preferences.ui.h:3 msgid "Allow _network usage" -msgstr "" +msgstr "_AÄŸ kullanımına izin ver" #: ../src/empathy-preferences.ui.h:4 -#, fuzzy msgid "Appearance" -msgstr "<b>Görünüm</b>" +msgstr "Görünüm" #: ../src/empathy-preferences.ui.h:5 msgid "Automatically _connect on startup " msgstr "_BaÅŸlangıçta otomatik olarak baÄŸlan." #: ../src/empathy-preferences.ui.h:6 -#, fuzzy msgid "Behavior" -msgstr "<b>Davranış</b>" +msgstr "Davranış" #: ../src/empathy-preferences.ui.h:7 msgid "Chat Th_eme:" @@ -2500,23 +2649,20 @@ msgid "Disable sounds when _away or busy" msgstr "Uz_akta veya meÅŸgul iken sesleri etkisizleÅŸtir" #: ../src/empathy-preferences.ui.h:10 -#, fuzzy msgid "Enable notifications when a contact comes online" -msgstr "_Sohbet odaklı deÄŸilken uyarıları etkinleÅŸtir" +msgstr "Bir kiÅŸi çevrimiçi olduÄŸunda uyarıları etkinleÅŸtir" #: ../src/empathy-preferences.ui.h:11 -#, fuzzy msgid "Enable notifications when a contact goes offline" -msgstr "_Sohbet odaklı deÄŸilken uyarıları etkinleÅŸtir" +msgstr "Bir kiÅŸi çevrimdışı kalırsa uyarıları etkinleÅŸtir" #: ../src/empathy-preferences.ui.h:12 msgid "Enable notifications when the _chat is not focused" msgstr "_Sohbet odaklı deÄŸilken uyarıları etkinleÅŸtir" #: ../src/empathy-preferences.ui.h:13 -#, fuzzy msgid "Enable spell checking for languages:" -msgstr "<b>Ä°mla denetiminin etkinleÅŸtirileceÄŸi diller:</b>" +msgstr "Diller için yazım denetimini etkinleÅŸtir:" #: ../src/empathy-preferences.ui.h:14 msgid "General" @@ -2524,21 +2670,19 @@ msgstr "Genel" #: ../src/empathy-preferences.ui.h:15 msgid "Geoclue Settings" -msgstr "" +msgstr "Geoclue Ayarlar" #: ../src/empathy-preferences.ui.h:16 -#, fuzzy msgid "Location" -msgstr "Uyarılar" +msgstr "Konum" #: ../src/empathy-preferences.ui.h:17 msgid "Notifications" msgstr "Uyarılar" #: ../src/empathy-preferences.ui.h:18 -#, fuzzy msgid "Play sound for events" -msgstr "<b>Olaylar için ses çal</b>" +msgstr "Etkinlikler için ses çal" #: ../src/empathy-preferences.ui.h:19 msgid "Preferences" @@ -2546,7 +2690,7 @@ msgstr "Tercihler" #: ../src/empathy-preferences.ui.h:20 msgid "Privacy" -msgstr "" +msgstr "Gizlilik" #: ../src/empathy-preferences.ui.h:21 msgid "" @@ -2554,15 +2698,17 @@ msgid "" "state and country will be published. GPS coordinates will be accurate to 1 " "decimal place." msgstr "" +"Ä°ndirimli yer hassasiyeti yayınlanacak hiçbir ÅŸeyin ÅŸehir, eyalet ve ülke " +"bilgisinden daha fazla kesin olmayacak demektir. GPS koordinatları 1 ondalık " +"basamaÄŸa kadar doÄŸru olacaktır." #: ../src/empathy-preferences.ui.h:22 msgid "Show _smileys as images" msgstr "Gülüm_semeleri görüntü olarak göster" #: ../src/empathy-preferences.ui.h:23 -#, fuzzy msgid "Show contact _list in rooms" -msgstr "BaÄŸlantı Listesini Gö_ster" +msgstr "Odalarda kiÅŸi _listesini göster" #: ../src/empathy-preferences.ui.h:24 msgid "Sounds" @@ -2573,13 +2719,10 @@ msgid "Spell Checking" msgstr "Ä°mla Denetimi" #: ../src/empathy-preferences.ui.h:26 -#, fuzzy msgid "" "The list of languages reflects only the languages for which you have a " "dictionary installed." -msgstr "" -"<small>Diller listesi sadece gerekli sözlüğü kurduÄŸunuz dilleri " -"yansıtmaktadır.</small>" +msgstr "Dillerin listesi sadece sözlük yüklü dilleri yansıtır." #: ../src/empathy-preferences.ui.h:27 msgid "Themes" @@ -2599,11 +2742,11 @@ msgstr "Yeni s_ohbetleri ayrı pencerelerde aç" #: ../src/empathy-preferences.ui.h:31 msgid "_Publish location to my contacts" -msgstr "" +msgstr "BaÄŸlantılarıma _konumumu yayınla" #: ../src/empathy-preferences.ui.h:32 msgid "_Reduce location accuracy" -msgstr "" +msgstr "_Konum hassasiyetini indirge" #: ../src/empathy-status-icon.ui.h:1 msgid "Status" @@ -2613,12 +2756,12 @@ msgstr "Durum" msgid "_Quit" msgstr "Çı_k" -#: ../src/empathy-tube-dispatch.c:375 +#: ../src/empathy-tube-dispatch.c:376 #, c-format msgid "Unable to start application for service %s: %s" msgstr "%s servisi için uygulama baÅŸlatılamıyor: %s" -#: ../src/empathy-tube-dispatch.c:446 +#: ../src/empathy-tube-dispatch.c:447 #, c-format msgid "" "An invitation was offered for service %s, but you don't have the needed " @@ -2627,321 +2770,70 @@ msgstr "" "%s servisi için bir davet önerildi, fakat bunu yönetebilmek için gerekli " "olan uygulamaya sahip deÄŸilsiniz." -#: ../src/empathy-call-window-fullscreen.ui.h:1 -msgid "gtk-leave-fullscreen" -msgstr "" - #: ../src/empathy-map-view.ui.h:1 -#, fuzzy msgid "Contact Map View" -msgstr "BaÄŸlantı Listesi" +msgstr "BaÄŸlantı Harita Görünümü" -#: ../src/empathy-debug-dialog.c:111 ../src/empathy-debug-dialog.c:1083 +#: ../src/empathy-debug-dialog.c:111 ../src/empathy-debug-dialog.c:1079 msgid "Error" -msgstr "" +msgstr "Hata" -#: ../src/empathy-debug-dialog.c:114 ../src/empathy-debug-dialog.c:1077 -#, fuzzy +#: ../src/empathy-debug-dialog.c:114 ../src/empathy-debug-dialog.c:1073 msgid "Critical" -msgstr "Hırvatça" +msgstr "Kritik" -#: ../src/empathy-debug-dialog.c:117 ../src/empathy-debug-dialog.c:1071 -#, fuzzy +#: ../src/empathy-debug-dialog.c:117 ../src/empathy-debug-dialog.c:1067 msgid "Warning" -msgstr "Kalan" +msgstr "Uyarı" -#: ../src/empathy-debug-dialog.c:120 ../src/empathy-debug-dialog.c:1065 -#: ../src/empathy-debug-dialog.c:1113 -#, fuzzy +#: ../src/empathy-debug-dialog.c:120 ../src/empathy-debug-dialog.c:1061 +#: ../src/empathy-debug-dialog.c:1109 msgid "Message" -msgstr "Mesaj:" +msgstr "Mesaj" -#: ../src/empathy-debug-dialog.c:123 ../src/empathy-debug-dialog.c:1059 +#: ../src/empathy-debug-dialog.c:123 ../src/empathy-debug-dialog.c:1055 msgid "Info" -msgstr "" +msgstr "Bilgi" -#: ../src/empathy-debug-dialog.c:126 ../src/empathy-debug-dialog.c:1053 +#: ../src/empathy-debug-dialog.c:126 ../src/empathy-debug-dialog.c:1049 msgid "Debug" -msgstr "" +msgstr "Debug" -#: ../src/empathy-debug-dialog.c:845 -#, fuzzy +#: ../src/empathy-debug-dialog.c:841 msgid "Save" -msgstr "Sunucu" +msgstr "Kayıt" -#: ../src/empathy-debug-dialog.c:948 +#: ../src/empathy-debug-dialog.c:944 msgid "Debug Window" -msgstr "" +msgstr "Debug Penceresi" -#: ../src/empathy-debug-dialog.c:1021 +#: ../src/empathy-debug-dialog.c:1017 msgid "Pause" -msgstr "" +msgstr "Duraklat" -#: ../src/empathy-debug-dialog.c:1033 +#: ../src/empathy-debug-dialog.c:1029 msgid "Level " -msgstr "" +msgstr "Seviye" -#: ../src/empathy-debug-dialog.c:1102 -#, fuzzy +#: ../src/empathy-debug-dialog.c:1098 msgid "Time" -msgstr "Basit" +msgstr "Zaman" -#: ../src/empathy-debug-dialog.c:1104 -#, fuzzy +#: ../src/empathy-debug-dialog.c:1100 msgid "Domain" -msgstr "Rumence" +msgstr "Alan" -#: ../src/empathy-debug-dialog.c:1106 +#: ../src/empathy-debug-dialog.c:1102 msgid "Category" -msgstr "" +msgstr "Kategori" -#: ../src/empathy-debug-dialog.c:1108 +#: ../src/empathy-debug-dialog.c:1104 msgid "Level" -msgstr "" +msgstr "Seviye" -#: ../src/empathy-debug-dialog.c:1140 +#: ../src/empathy-debug-dialog.c:1136 msgid "" "The selected connection manager does not support the remote debugging " "extension." msgstr "" - -#~ msgid "Empathy Instant Messenger" -#~ msgstr "Empathy Anında MesajlaÅŸma Aracı" - -#~ msgid "Forget password and clear the entry." -#~ msgstr "Parolayı unut ve girdi alanını temizle." - -#~ msgid "<b>Network</b>" -#~ msgstr "<b>AÄŸ</b>" - -#~ msgid "<b>Servers</b>" -#~ msgstr "<b>Sunucular</b>" - -#~ msgid "Edit the selected IRC network" -#~ msgstr "Seçili IRC ağını düzenle" - -#~ msgid "Remove the selected IRC network" -#~ msgstr "Seçili IRC ağını kaldır" - -#~ msgid "_Check Word Spelling..." -#~ msgstr "Kelime Yazımını _Kontrol Et..." - -#~ msgid "<b>Topic:</b>" -#~ msgstr "<b>BaÅŸlık:</b>" - -#~ msgid "Group Chat" -#~ msgstr "Grup Sohbeti" - -#~ msgid "Contact Information" -#~ msgstr "BaÄŸlantı Bilgisi" - -#~ msgid "I would like to add you to my contact list." -#~ msgstr "Sizi baÄŸlantı listeme eklemek istiyorum." - -#~ msgid "Sorry, I don't want you in my contact list anymore." -#~ msgstr "Ãœzgünüm, sizi baÄŸlantı listemde daha fazla istemiyorum." - -#~ msgid "<b>Groups</b>" -#~ msgstr "<b>Gruplar</b>" - -#~ msgid "Contact information" -#~ msgstr "BaÄŸlantı bilgisi" - -#~ msgid "Word" -#~ msgstr "Kelime" - -#~ msgid "Suggestions for the word" -#~ msgstr "Kelime için öneriler" - -#~ msgid "Spell Checker" -#~ msgstr "Ä°mla Denetçisi" - -#~ msgid "Suggestions for the word:" -#~ msgstr "Kelime için öneriler:" - -#~ msgid "- Empathy Instant Messenger" -#~ msgstr "- Empathy Anında MesajlaÅŸma Aracı" - -#~ msgid "<b>New Account</b>" -#~ msgstr "<b>Yeni Hesap</b>" - -#~ msgid "I already have an account I want to use" -#~ msgstr "Zaten kullanmak istediÄŸim bir hesabım mevcut" - -#~ msgid "New message from %s" -#~ msgstr "%s kiÅŸisinden yeni mesaj" - -#~ msgid "Invitation _message:" -#~ msgstr "Davet _mesajı:" - -#~ msgid "Invite" -#~ msgstr "Davet et" - -#~ msgid "Select who would you like to invite:" -#~ msgstr "Davet etmek istediÄŸiniz kiÅŸiyi seçin:" - -#~ msgid "You have been invited to join a chat conference." -#~ msgstr "Bir sohbet konferansına katılmak için davet edildiniz." - -#~ msgid "Edit Favorite Room" -#~ msgstr "Sık Kullanılan Odayı Düzenle" - -#~ msgid "Join room on start_up" -#~ msgstr "_BaÅŸlangıçta odaya katıl" - -#~ msgid "Join this chat room when Empathy starts and you are connected" -#~ msgstr "Empathy baÅŸladığında ve baÄŸlı olduÄŸunda bu odaya katıl" - -#~ msgid "N_ame:" -#~ msgstr "_Ad:" - -#~ msgid "S_erver:" -#~ msgstr "S_unucu:" - -#~ msgctxt "file size" -#~ msgid "Unknown" -#~ msgstr "Bilinmiyor" - -#~ msgid "\"%s\" receiving from %s" -#~ msgstr "\"%s\" dosyası %s kiÅŸisinden alınıyor" - -#~ msgid "\"%s\" sending to %s" -#~ msgstr "\"%s\" dosyası %s kiÅŸisine gönderiliyor" - -#~ msgid "File transfer canceled: %s" -#~ msgstr "Dosya transferi iptal edildi: %s" - -#~ msgctxt "remaining time" -#~ msgid "Unknown" -#~ msgstr "Bilinmiyor" - -#~ msgid "Cannot save file to this location" -#~ msgstr "Dosya bu konuma kaydedilemiyor" - -#~ msgid "Save file as..." -#~ msgstr "Dosyayı farklı kaydet..." - -#~ msgid "unknown size" -#~ msgstr "bilinmeyen boyut" - -#~ msgid "%s would like to send you a file" -#~ msgstr "%s size bir dosya göndermek istiyor" - -#~ msgid "Do you want to accept the file \"%s\" (%s)?" -#~ msgstr "\"%s\" (%s) dosyasını kabul etmek ister misiniz?" - -#~ msgid "_Accept" -#~ msgstr "_Kabul et" - -#~ msgid "Join _New..." -#~ msgstr "Ye_ni Katıl..." - -#~ msgid "Browse:" -#~ msgstr "Gözat:" - -#~ msgid "Join" -#~ msgstr "Katıl" - -#~ msgid "Join New" -#~ msgstr "Yeni katıl" - -#~ msgid "Re_fresh" -#~ msgstr "_Tazele" - -#~ msgid "" -#~ "This list represents all chat rooms hosted on the server you have entered." -#~ msgstr "" -#~ "Bu liste girdiÄŸiniz sunucuda barındırılan tüm sohbet odalarını gösterir." - -#~ msgid "<b>Contact List</b>" -#~ msgstr "<b>BaÄŸlantı Listesi</b>" - -#~ msgid "Avatars are user chosen images shown in the contact list" -#~ msgstr "" -#~ "Avatarlar baÄŸlantı listesinde görünen kullanıcının seçtiÄŸi resimlerdir" - -#~ msgid "Show _avatars" -#~ msgstr "Av_atarları göster" - -#~ msgid "Show co_mpact contact list" -#~ msgstr "_Sıkışık baÄŸlantı listesini göster" - -#~ msgid "Enable popup when contact is available" -#~ msgstr "BaÄŸlantı uygun olduÄŸunda açılır pencereyi etkinleÅŸtir" - -#~ msgid "Enable sound when busy" -#~ msgstr "MeÅŸgulken sesi etkinleÅŸtir" - -#~ msgid "Closed" -#~ msgstr "Kapandı" - -#~ msgid "End this call?" -#~ msgstr "Bu çaÄŸrı sonlandırılsın mı?" - -#~ msgid "Closing this window will end the call in progress." -#~ msgstr "Bu pencereyi kapatmak aktif çaÄŸrıyı sonlandıracaktır." - -#~ msgid "Readying" -#~ msgstr "Hazırlanıyor" - -#~ msgid "Ringing" -#~ msgstr "Çalıyor" - -#~ msgid "" -#~ "Incoming call from %s rejected because there is already a running call." -#~ msgstr "" -#~ "%s kiÅŸisinden gelen çaÄŸrı reddedildi, çünkü halen aktif bir çaÄŸrı var." - -#~ msgid "#" -#~ msgstr "#" - -#~ msgid "*" -#~ msgstr "*" - -#~ msgid "0" -#~ msgstr "0" - -#~ msgid "1" -#~ msgstr "1" - -#~ msgid "2" -#~ msgstr "2" - -#~ msgid "3" -#~ msgstr "3" - -#~ msgid "4" -#~ msgstr "4" - -#~ msgid "5" -#~ msgstr "5" - -#~ msgid "6" -#~ msgstr "6" - -#~ msgid "7" -#~ msgstr "7" - -#~ msgid "8" -#~ msgstr "8" - -#~ msgid "9" -#~ msgstr "9" - -#~ msgid "<b>Keypad</b>" -#~ msgstr "<b>TuÅŸ Takımı</b>" - -#~ msgid "Invitation Error" -#~ msgstr "Davet Hatası" - -#~ msgid "gtk-cancel" -#~ msgstr "gtk-cancel" - -#~ msgid "<b>Audio</b>" -#~ msgstr "<b>Ses</b>" - -#~ msgid "<b>Visual</b>" -#~ msgstr "<b>Görsel</b>" - -#~ msgid "Enable sounds when _busy" -#~ msgstr "_MeÅŸgulken sesleri etkinleÅŸtir" +"Seçilen baÄŸlantı yöneticisi uzaktan hata ayıklama eklentisini desteklemiyor." diff --git a/po/zh_CN.po b/po/zh_CN.po index 66efcb6d1..70d8f33c0 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -14,12 +14,11 @@ msgid "" msgstr "" "Project-Id-Version: gossip\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" -"product=empathy&component=general\n" -"POT-Creation-Date: 2009-07-30 18:04+0000\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-08-25 19:26+0800\n" "PO-Revision-Date: 2009-07-25 21:28+0000\n" -"Last-Translator: Aron Xu <aronxu@gnome.org>\n" -"Language-Team: Simplified Chinese <i18n-translation@lists.linux.net.cn>\n" +"Last-Translator: Aron Xu <happyaron.xu@gmail.com>\n" +"Language-Team: Simplified Chinese <i18n-zh@googlegroups.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -57,345 +56,355 @@ msgid "Compact contact list" msgstr "紧凑显示è”系人列表" #: ../data/empathy.schemas.in.h:6 -msgid "Contact list sort criterium" -msgstr "è”系人列表排åºå‡†åˆ™" +#, fuzzy +msgid "Connection managers should be used" +msgstr "是å¦ä½¿ç”¨ NetworkManager" #: ../data/empathy.schemas.in.h:7 +msgid "Contact list sort criterium" +msgstr "è”系人列表排åºè§„则" + +#: ../data/empathy.schemas.in.h:8 msgid "Default directory to select an avatar image from" msgstr "默认的选å–头åƒå›¾ç‰‡çš„目录" -#: ../data/empathy.schemas.in.h:8 +#: ../data/empathy.schemas.in.h:9 msgid "Disable popup notifications when away" msgstr "离开时ç¦ç”¨å¼¹å‡ºæ示" -#: ../data/empathy.schemas.in.h:9 +#: ../data/empathy.schemas.in.h:10 msgid "Disable sounds when away" msgstr "离开时ç¦ç”¨å£°éŸ³" -#: ../data/empathy.schemas.in.h:10 +#: ../data/empathy.schemas.in.h:11 msgid "Empathy can publish the user's location" msgstr "Empathy 能够å‘布用户的ä½ç½®" -#: ../data/empathy.schemas.in.h:11 +#: ../data/empathy.schemas.in.h:12 msgid "Empathy can use the GPS to guess the location" msgstr "Empathy 能够通过 GPS æ¥ä¼°ç®—ä½ç½®" -#: ../data/empathy.schemas.in.h:12 +#: ../data/empathy.schemas.in.h:13 msgid "Empathy can use the cellular network to guess the location" msgstr "Empathy 能够通过手机æ¥ä¼°ç®—ä½ç½®" -#: ../data/empathy.schemas.in.h:13 +#: ../data/empathy.schemas.in.h:14 msgid "Empathy can use the network to guess the location" msgstr "Empathy 能够通过网络æ¥ä¼°ç®—ä½ç½®" -#: ../data/empathy.schemas.in.h:14 +#: ../data/empathy.schemas.in.h:15 msgid "Empathy default download folder" msgstr "Empathy 默认下载文件夹" -#: ../data/empathy.schemas.in.h:15 +#: ../data/empathy.schemas.in.h:16 msgid "Empathy has asked about importing accounts" msgstr "Empathy å·²ç»è¯¢é—®å¯¼å…¥è´¦æˆ·" -#: ../data/empathy.schemas.in.h:16 +#: ../data/empathy.schemas.in.h:17 msgid "Empathy should auto-connect on startup" msgstr "Empathy å¯åŠ¨æ—¶æ˜¯å¦è‡ªåŠ¨è¿žæŽ¥" -#: ../data/empathy.schemas.in.h:17 +#: ../data/empathy.schemas.in.h:18 msgid "Empathy should reduce the location's accuracy" msgstr "é™ä½Ž Emapthy ä½ç½®ä¿¡æ¯çš„准确度" -#: ../data/empathy.schemas.in.h:18 +#: ../data/empathy.schemas.in.h:19 msgid "Empathy should use the avatar of the contact as the chat window icon" msgstr "Empathy 是å¦ä½¿ç”¨è”系人头åƒä½œä¸ºèŠå¤©çª—å£å›¾æ ‡" -#: ../data/empathy.schemas.in.h:19 +#: ../data/empathy.schemas.in.h:20 msgid "Enable WebKit Developer Tools" msgstr "å¯ç”¨ WebKit å¼€å‘工具" -#: ../data/empathy.schemas.in.h:20 +#: ../data/empathy.schemas.in.h:21 msgid "Enable popup notifications for new messages" msgstr "å¯ç”¨æ–°æ¶ˆæ¯å¼¹å‡ºæ示" -#: ../data/empathy.schemas.in.h:21 +#: ../data/empathy.schemas.in.h:22 msgid "Enable spell checker" msgstr "å¯ç”¨æ‹¼å†™æ£€æŸ¥å™¨" -#: ../data/empathy.schemas.in.h:22 +#: ../data/empathy.schemas.in.h:23 msgid "Hide main window" msgstr "éšè—主窗å£" -#: ../data/empathy.schemas.in.h:23 +#: ../data/empathy.schemas.in.h:24 msgid "Hide the main window." msgstr "éšè—主窗å£ã€‚" -#: ../data/empathy.schemas.in.h:24 -msgid "NetworkManager should be used" -msgstr "是å¦ä½¿ç”¨ NetworkManager" - #: ../data/empathy.schemas.in.h:25 +msgid "MC 4 accounts have been imported" +msgstr "" + +#: ../data/empathy.schemas.in.h:26 +msgid "MC 4 accounts have been imported." +msgstr "" + +#: ../data/empathy.schemas.in.h:27 msgid "Nick completed character" msgstr "昵称补全å—符" -#: ../data/empathy.schemas.in.h:26 +#: ../data/empathy.schemas.in.h:28 msgid "Open new chats in separate windows" msgstr "在å•ç‹¬çª—å£ä¸æ‰“开新èŠå¤©" -#: ../data/empathy.schemas.in.h:27 +#: ../data/empathy.schemas.in.h:29 msgid "Path of the adium theme to use" msgstr "Adium 主题的路径" -#: ../data/empathy.schemas.in.h:28 +#: ../data/empathy.schemas.in.h:30 msgid "Path of the adium theme to use if the theme used for chat is adium." msgstr "如果èŠå¤©ä½¿ç”¨ Adium 主题,使用 Adium 主题的路径" -#: ../data/empathy.schemas.in.h:29 +#: ../data/empathy.schemas.in.h:31 msgid "Play a sound for incoming messages" msgstr "收到消æ¯æ—¶æ’放声音" -#: ../data/empathy.schemas.in.h:30 +#: ../data/empathy.schemas.in.h:32 msgid "Play a sound for new conversations" msgstr "新对è¯æ—¶æ’放声音" -#: ../data/empathy.schemas.in.h:31 +#: ../data/empathy.schemas.in.h:33 msgid "Play a sound for outgoing messages" msgstr "å‘出消æ¯æ—¶æ’放声音" -#: ../data/empathy.schemas.in.h:32 +#: ../data/empathy.schemas.in.h:34 msgid "Play a sound when a contact logs in" msgstr "è”系人登录时æ’放声音" -#: ../data/empathy.schemas.in.h:33 +#: ../data/empathy.schemas.in.h:35 msgid "Play a sound when a contact logs out" msgstr "è”系人注销时æ’放声音" -#: ../data/empathy.schemas.in.h:34 +#: ../data/empathy.schemas.in.h:36 msgid "Play a sound when we log in" msgstr "登录时æ’放声音" -#: ../data/empathy.schemas.in.h:35 +#: ../data/empathy.schemas.in.h:37 msgid "Play a sound when we log out" msgstr "注销时æ’放声音" -#: ../data/empathy.schemas.in.h:36 +#: ../data/empathy.schemas.in.h:38 msgid "Popup notifications if the chat isn't focused" msgstr "如果èŠå¤©çª—å£ä¸æ˜¯ç„¦ç‚¹åˆ™å¼¹å‡ºæ¶ˆæ¯é€šçŸ¥" -#: ../data/empathy.schemas.in.h:37 +#: ../data/empathy.schemas.in.h:39 msgid "Popup notifications when a contact sign in" msgstr "当è”系人登录时弹出通知" -#: ../data/empathy.schemas.in.h:38 +#: ../data/empathy.schemas.in.h:40 msgid "Popup notifications when a contact sign out" msgstr "当è”系人注销时弹出通知" -#: ../data/empathy.schemas.in.h:39 +#: ../data/empathy.schemas.in.h:41 msgid "Salut account is created" msgstr "已创建 Salut 账户" -#: ../data/empathy.schemas.in.h:40 +#: ../data/empathy.schemas.in.h:42 msgid "Show avatars" msgstr "显示头åƒ" -#: ../data/empathy.schemas.in.h:41 +#: ../data/empathy.schemas.in.h:43 msgid "Show contact list in rooms" msgstr "在èŠå¤©å®¤æ˜¾ç¤ºè”系人列表" -#: ../data/empathy.schemas.in.h:42 +#: ../data/empathy.schemas.in.h:44 msgid "Show hint about closing the main window" msgstr "å…³é—主窗å£æ—¶æ˜¾ç¤ºæ示" -#: ../data/empathy.schemas.in.h:43 +#: ../data/empathy.schemas.in.h:45 msgid "Show offline contacts" msgstr "显示离线è”系人" -#: ../data/empathy.schemas.in.h:44 +#: ../data/empathy.schemas.in.h:46 msgid "Spell checking languages" msgstr "拼写检查器è¯è¨€" -#: ../data/empathy.schemas.in.h:45 +#: ../data/empathy.schemas.in.h:47 msgid "The default folder to save file transfers in." msgstr "ä¿å˜ä¼ é€æ–‡ä»¶çš„默认文件夹。" -#: ../data/empathy.schemas.in.h:46 +#: ../data/empathy.schemas.in.h:48 msgid "The last directory that an avatar image was chosen from." msgstr "上次选å–头åƒå›¾ç‰‡çš„目录。" -#: ../data/empathy.schemas.in.h:47 +#: ../data/empathy.schemas.in.h:49 msgid "The theme that is used to display the conversation in chat windows." msgstr "用于在èŠå¤©çª—å£ä¸æ˜¾ç¤ºä¼šè¯çš„主题。" -#: ../data/empathy.schemas.in.h:48 +#: ../data/empathy.schemas.in.h:50 msgid "Use graphical smileys" msgstr "ä½¿ç”¨è¡¨æƒ…å›¾æ ‡" -#: ../data/empathy.schemas.in.h:49 +#: ../data/empathy.schemas.in.h:51 msgid "Use notification sounds" msgstr "使用通知声音" -#: ../data/empathy.schemas.in.h:50 +#: ../data/empathy.schemas.in.h:52 msgid "Use theme for chat rooms" msgstr "为èŠå¤©å®¤ä½¿ç”¨ä¸»é¢˜" -#: ../data/empathy.schemas.in.h:51 +#: ../data/empathy.schemas.in.h:53 msgid "" "Whether WebKit developer tools, such as the Web Inspector, should be enabled." msgstr "WebKit å¼€å‘工具,例如 Web Inspector 是å¦åº”该å¯ç”¨ã€‚" -#: ../data/empathy.schemas.in.h:52 +#: ../data/empathy.schemas.in.h:54 msgid "Whether or not Empathy can publish the user's location to his contacts." msgstr "是å¦å…许 Empathy 将用户的ä½ç½®å…±äº«ç»™è”系人" -#: ../data/empathy.schemas.in.h:53 +#: ../data/empathy.schemas.in.h:55 msgid "Whether or not Empathy can use the GPS to guess the location." msgstr "是å¦å…许 Empathy 通过 GPS ä¼°ç®—ä½ç½®" -#: ../data/empathy.schemas.in.h:54 +#: ../data/empathy.schemas.in.h:56 msgid "" "Whether or not Empathy can use the cellular network to guess the location." msgstr "是å¦å…许 Empathy 通过手机估算ä½ç½®" -#: ../data/empathy.schemas.in.h:55 +#: ../data/empathy.schemas.in.h:57 msgid "Whether or not Empathy can use the network to guess the location." msgstr "是å¦å…许 Empathy 通过网络估算ä½ç½®" -#: ../data/empathy.schemas.in.h:56 +#: ../data/empathy.schemas.in.h:58 msgid "" "Whether or not Empathy has asked about importing accounts from other " "programs." msgstr "Empathy 是å¦åº”该已ç»è¯¢é—®è¿‡è¦ä»Žå…¶å®ƒç¨‹åºä¸å¯¼å…¥è´¦æˆ·ã€‚" -#: ../data/empathy.schemas.in.h:57 +#: ../data/empathy.schemas.in.h:59 msgid "" "Whether or not Empathy should automatically log in to your accounts on " "startup." msgstr "Empathy 是å¦åœ¨å¯åŠ¨æ—¶è‡ªåŠ¨ç™»å…¥æ‚¨çš„账户。" -#: ../data/empathy.schemas.in.h:58 +#: ../data/empathy.schemas.in.h:60 msgid "" "Whether or not Empathy should reduce the location's accuracy for privacy " "reasons." msgstr "是å¦å‡ºäºŽéšç§åŽŸå› é™ä½Ž Empathy ä½ç½®ä¿¡æ¯çš„准确度。" -#: ../data/empathy.schemas.in.h:59 +#: ../data/empathy.schemas.in.h:61 msgid "" "Whether or not Empathy should use the avatar of the contact as the chat " "window icon." msgstr "是å¦ä½¿ç”¨è”系人的头åƒä½œä¸ºèŠå¤©çª—å£çš„å›¾æ ‡ã€‚" -#: ../data/empathy.schemas.in.h:60 -msgid "" -"Whether or not the Salut account has been created on the first Empathy run." -msgstr "是å¦åœ¨ Empathy 第一次è¿è¡Œæ—¶åˆ›å»º Salut 账户。" - -#: ../data/empathy.schemas.in.h:61 +#: ../data/empathy.schemas.in.h:62 +#, fuzzy msgid "" -"Whether or not the network manager should be used to automatically " +"Whether or not connectivity managers should be used to automatically " "disconnect/reconnect." msgstr "是å¦ä½¿ç”¨ NetworkManager(网络管ç†å™¨) 自动æ–开连接/é‡æ–°è¿žæŽ¥ã€‚" -#: ../data/empathy.schemas.in.h:62 +#: ../data/empathy.schemas.in.h:63 +msgid "" +"Whether or not the Salut account has been created on the first Empathy run." +msgstr "是å¦åœ¨ Empathy 第一次è¿è¡Œæ—¶åˆ›å»º Salut 账户。" + +#: ../data/empathy.schemas.in.h:64 msgid "" "Whether or not to check words typed against the languages you want to check " "with." msgstr "是å¦å¯¹æ‚¨æƒ³è¦ä½œæ‹¼å†™æ£€æŸ¥çš„å•è¯ä½œæ‹¼å†™æ£€æŸ¥ã€‚" -#: ../data/empathy.schemas.in.h:63 +#: ../data/empathy.schemas.in.h:65 msgid "" "Whether or not to convert smileys into graphical images in conversations." msgstr "对è¯æ—¶æ˜¯å¦å°†è¡¨æƒ…符å·è½¬æ¢ä¸ºçœŸæ£çš„å›¾æ ‡ã€‚" -#: ../data/empathy.schemas.in.h:64 +#: ../data/empathy.schemas.in.h:66 msgid "" "Whether or not to play a sound to notify for contacts logging in the network." msgstr "是å¦éœ€è¦è”系人上线æ示音。" -#: ../data/empathy.schemas.in.h:65 +#: ../data/empathy.schemas.in.h:67 msgid "" "Whether or not to play a sound to notify for contacts logging off the " "network." msgstr "是å¦éœ€è¦è”系人下线æ示音。" -#: ../data/empathy.schemas.in.h:66 +#: ../data/empathy.schemas.in.h:68 msgid "Whether or not to play a sound to notify for events." msgstr "是å¦éœ€è¦äº‹ä»¶æ示音。" -#: ../data/empathy.schemas.in.h:67 +#: ../data/empathy.schemas.in.h:69 msgid "Whether or not to play a sound to notify for incoming messages." msgstr "是å¦éœ€è¦æ¶ˆæ¯åˆ°è¾¾æ示音。" -#: ../data/empathy.schemas.in.h:68 +#: ../data/empathy.schemas.in.h:70 msgid "Whether or not to play a sound to notify for new conversations." msgstr "是å¦éœ€è¦æ–°ä¼šè¯æ示音。" -#: ../data/empathy.schemas.in.h:69 +#: ../data/empathy.schemas.in.h:71 msgid "Whether or not to play a sound to notify for outgoing messages." msgstr "是å¦ä¸ºå¤–出消æ¯ä½¿ç”¨è¯éŸ³æ示。" -#: ../data/empathy.schemas.in.h:70 +#: ../data/empathy.schemas.in.h:72 msgid "Whether or not to play a sound when logging in a network." msgstr "当è”网登录时是å¦æ’放æ示音。" -#: ../data/empathy.schemas.in.h:71 +#: ../data/empathy.schemas.in.h:73 msgid "Whether or not to play a sound when logging off a network." msgstr "当网络æ–开时是å¦æ’放æ示音。" -#: ../data/empathy.schemas.in.h:72 +#: ../data/empathy.schemas.in.h:74 msgid "Whether or not to play sound notifications when away or busy." msgstr "当离开或忙碌时是å¦ä½¿ç”¨è¯éŸ³é€šçŸ¥ã€‚" -#: ../data/empathy.schemas.in.h:73 +#: ../data/empathy.schemas.in.h:75 msgid "" "Whether or not to show a popup notification when a contact goes offline." msgstr "当è”系人离线时是å¦æ˜¾ç¤ºå¼¹å‡ºé€šçŸ¥ã€‚" -#: ../data/empathy.schemas.in.h:74 +#: ../data/empathy.schemas.in.h:76 msgid "Whether or not to show a popup notification when a contact goes online." msgstr "当è”系人上线时是å¦æ˜¾ç¤ºå¼¹å‡ºé€šçŸ¥" -#: ../data/empathy.schemas.in.h:75 +#: ../data/empathy.schemas.in.h:77 msgid "" "Whether or not to show a popup notification when receiving a new message " "even if the chat is already opened, but not focused." msgstr "当接收新消æ¯æ—¶æ˜¯å¦æ˜¾ç¤ºå¼¹å‡ºæ示å³èŠå¤©çª—å£å·²å¼€å¯ï¼Œä½†æœªé—²ç½®ã€‚" -#: ../data/empathy.schemas.in.h:76 +#: ../data/empathy.schemas.in.h:78 msgid "" "Whether or not to show a popup notification when receiving a new message." msgstr "当收到新消æ¯æ—¶æ˜¯å¦å¼¹å‡ºæ˜¾ç¤ºæ示框。" -#: ../data/empathy.schemas.in.h:77 +#: ../data/empathy.schemas.in.h:79 msgid "" "Whether or not to show avatars for contacts in the contact list and chat " "windows." msgstr "是å¦åœ¨è”系人列表和èŠå¤©çª—å£ä¸æ˜¾ç¤ºå¤´åƒã€‚" -#: ../data/empathy.schemas.in.h:78 +#: ../data/empathy.schemas.in.h:80 msgid "Whether or not to show contacts that are offline in the contact list." msgstr "是å¦æ˜¾ç¤ºè”系人清å•ä¸ç¦»çº¿çš„è”系人。" -#: ../data/empathy.schemas.in.h:79 +#: ../data/empathy.schemas.in.h:81 msgid "Whether or not to show popup notifications when away or busy." msgstr "当离开活忙碌时是å¦å¼¹å‡ºæ˜¾ç¤ºæ示框。" -#: ../data/empathy.schemas.in.h:80 +#: ../data/empathy.schemas.in.h:82 msgid "Whether or not to show the contact list in chat rooms." msgstr "是å¦åœ¨èŠå¤©å®¤æ˜¾ç¤ºè”系人列表。" -#: ../data/empathy.schemas.in.h:81 +#: ../data/empathy.schemas.in.h:83 msgid "" "Whether or not to show the message dialog about closing the main window with " "the 'x' button in the title bar." msgstr "是å¦å¯¹ä½¿ç”¨æ ‡é¢˜æ ä¸çš„“Xâ€æŒ‰é’®å…³é—主窗å£æ˜¾ç¤ºæ¶ˆæ¯å¯¹è¯æ¡†ã€‚" -#: ../data/empathy.schemas.in.h:82 +#: ../data/empathy.schemas.in.h:84 msgid "Whether to show the contact list in compact mode or not." msgstr "是å¦ä»¥ç´§å‡‘æ ¼å¼æ˜¾ç¤ºè”系人列表。" -#: ../data/empathy.schemas.in.h:83 +#: ../data/empathy.schemas.in.h:85 msgid "Whether to use the theme for chat rooms or not." msgstr "是å¦å¯¹èŠå¤©å®¤ä½¿ç”¨ä¸»é¢˜ã€‚" -#: ../data/empathy.schemas.in.h:84 +#: ../data/empathy.schemas.in.h:86 msgid "" "Which criterium to use when sorting the contact list. Default is to use sort " "by the contact's name with the value \"name\". A value of \"state\" will " @@ -404,78 +413,86 @@ msgstr "" "使用何ç§å‡†åˆ™æ¥æŽ’åºè”系人列表。默认情况下使用值\"name\"以按è”系人姓å\n" "排åºã€‚å–值为\"state\"时将按状æ€æŽ’åºè”系人列表。" -#: ../libempathy/empathy-ft-handler.c:838 +#: ../libempathy/empathy-account.c:1086 +msgid "Can't set an empty display name" +msgstr "" + +#: ../libempathy/empathy-ft-handler.c:839 msgid "The hash of the received file and the sent one do not match" msgstr "接收到的文件和å‘é€çš„那个文件哈希值ä¸åŒ¹é…" -#: ../libempathy/empathy-ft-handler.c:1098 +#: ../libempathy/empathy-ft-handler.c:1099 msgid "File transfer not supported by remote contact" msgstr "æ–‡ä»¶ä¼ è¾“ä¸æ”¯æŒè¿œç¨‹è¿žæŽ¥" -#: ../libempathy/empathy-ft-handler.c:1156 +#: ../libempathy/empathy-ft-handler.c:1157 msgid "The selected file is not a regular file" msgstr "所选文件是éžæ£å¸¸çš„文件" -#: ../libempathy/empathy-ft-handler.c:1165 +#: ../libempathy/empathy-ft-handler.c:1166 msgid "The selected file is empty" msgstr "所选文件是空的" -#: ../libempathy/empathy-tp-contact-list.c:843 ../src/empathy.c:289 +#: ../libempathy/empathy-tp-contact-list.c:844 ../src/empathy.c:285 msgid "People nearby" msgstr "附近的人" -#: ../libempathy/empathy-tp-file.c:279 +#: ../libempathy/empathy-tp-file.c:280 msgid "Socket type not supported" msgstr "ä¸æ”¯æŒSocket类型" -#: ../libempathy/empathy-tp-file.c:398 +#: ../libempathy/empathy-tp-file.c:399 msgid "No reason was specified" msgstr "æœªæŒ‡å®šåŽŸå› " -#: ../libempathy/empathy-tp-file.c:401 +#: ../libempathy/empathy-tp-file.c:402 msgid "The change in state was requested" msgstr "需è¦çŠ¶æ€æ”¹å˜ä¿¡æ¯" -#: ../libempathy/empathy-tp-file.c:404 +#: ../libempathy/empathy-tp-file.c:405 msgid "You canceled the file transfer" msgstr "您å–æ¶ˆäº†æ–‡ä»¶ä¼ è¾“" -#: ../libempathy/empathy-tp-file.c:407 +#: ../libempathy/empathy-tp-file.c:408 msgid "The other participant canceled the file transfer" msgstr "å¦å¤–çš„å‚与者å–æ¶ˆäº†æ–‡ä»¶çš„ä¼ è¾“" -#: ../libempathy/empathy-tp-file.c:410 +#: ../libempathy/empathy-tp-file.c:411 msgid "Error while trying to transfer the file" msgstr "å½“ä¼ è¾“è¿™ä¸ªæ–‡ä»¶çš„æ—¶å€™å‘生错误" -#: ../libempathy/empathy-tp-file.c:413 +#: ../libempathy/empathy-tp-file.c:414 msgid "The other participant is unable to transfer the file" msgstr "å¦å¤–çš„å‚ä¸Žè€…æ— æ³•ä¼ è¾“è¿™ä¸ªæ–‡ä»¶" -#: ../libempathy/empathy-tp-file.c:416 +#: ../libempathy/empathy-tp-file.c:417 msgid "Unknown reason" msgstr "æœªçŸ¥åŽŸå› " -#: ../libempathy/empathy-utils.c:265 +#: ../libempathy/empathy-utils.c:235 msgid "Available" msgstr "在线" -#: ../libempathy/empathy-utils.c:267 +#: ../libempathy/empathy-utils.c:237 msgid "Busy" msgstr "忙碌" -#: ../libempathy/empathy-utils.c:270 +#: ../libempathy/empathy-utils.c:240 msgid "Away" msgstr "离开" -#: ../libempathy/empathy-utils.c:272 +#: ../libempathy/empathy-utils.c:242 msgid "Hidden" msgstr "éšèº«" -#: ../libempathy/empathy-utils.c:274 +#: ../libempathy/empathy-utils.c:244 msgid "Offline" msgstr "离线" +#: ../libempathy/empathy-utils.c:378 ../src/empathy-import-mc4-accounts.c:104 +msgid "People Nearby" +msgstr "附近的人" + #: ../libempathy/empathy-time.c:137 #, c-format msgid "%d second ago" @@ -516,77 +533,118 @@ msgstr[0] "%d 月å‰" msgid "in the future" msgstr "å°†æ¥" -#: ../libempathy-gtk/empathy-account-chooser.c:426 +#: ../libempathy-gtk/empathy-account-chooser.c:424 msgid "All" msgstr "全部" -#: ../libempathy-gtk/empathy-account-widget.c:302 -#: ../libempathy-gtk/empathy-account-widget.c:354 +#: ../libempathy-gtk/empathy-account-widget.c:448 +#: ../libempathy-gtk/empathy-account-widget.c:504 #, c-format msgid "%s:" msgstr "%s:" +#: ../libempathy-gtk/empathy-account-widget.c:1224 +msgid "Enabled" +msgstr "å¯ç”¨" + #: ../libempathy-gtk/empathy-account-widget-aim.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> MyScreenName</span>" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:2 #: ../libempathy-gtk/empathy-account-widget-generic.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:1 -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:2 msgid "Advanced" msgstr "高级" -#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:2 -#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:3 -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:3 -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:3 -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:3 msgid "Pass_word:" msgstr "密ç (_W):" -#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:4 msgid "Screen _Name:" msgstr "用户å(_N):" -#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:5 -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:10 -#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:5 +msgid "What is your AIM password?" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:6 +msgid "What is your AIM screen name?" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:15 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:10 msgid "_Port:" msgstr "端å£(_P):" -#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:5 -#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:5 -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:6 -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:11 -#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:5 -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:9 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:16 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:12 #: ../src/empathy-new-chatroom-dialog.ui.h:9 msgid "_Server:" msgstr "æœåŠ¡å™¨(_S):" -#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:2 -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:2 -#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> username</span>" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:3 msgid "Login I_D:" msgstr "登录 I_D:" -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:5 +msgid "What is your GroupWise User ID?" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:6 +msgid "What is your GroupWise password?" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> 123456789</span>" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:3 msgid "ICQ _UIN:" msgstr "ICQ _UIN:" -#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:4 -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:5 +msgid "What is your ICQ UIN?" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:6 +msgid "What is your ICQ password?" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:8 msgid "_Charset:" msgstr "å—符集(_C):" -#: ../libempathy-gtk/empathy-account-widget-irc.c:240 +#: ../libempathy-gtk/empathy-account-widget-irc.c:244 msgid "New Network" msgstr "新建网络" @@ -622,84 +680,136 @@ msgstr "å…¨å:" msgid "Servers" msgstr "æœåŠ¡å™¨" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> user@jabber.org</span>" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:4 msgid "Override server settings" msgstr "覆盖æœåŠ¡å™¨è®¾ç½®" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:6 msgid "Pri_ority:" msgstr "优先级(_O):" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:6 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7 msgid "Reso_urce:" msgstr "资æº(_U):" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:8 msgid "Use old SS_L" msgstr "使用旧的 SS_L" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:9 +msgid "What is your Jabber ID?" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:10 +msgid "What is your Jabber password?" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:11 +msgid "What is your desired Jabber ID?" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:12 +msgid "What is your desired Jabber password?" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:13 msgid "_Encryption required (TLS/SSL)" msgstr "需è¦åŠ 密(TLS/SSL)(_E)" -#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:9 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:14 msgid "_Ignore SSL certificate errors" msgstr "忽略 SSL è¯ä¹¦é”™è¯¯(_I)" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> user@hotmail.com</span>" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:5 +msgid "What is your Windows Live password?" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:6 +msgid "What is your Windows Live user name?" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:2 msgid "_Email:" msgstr "电å邮件(_E):" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:3 msgid "_First Name:" msgstr "å(_F)" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:4 msgid "_Jabber ID:" msgstr "_Jabber ID:" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:5 msgid "_Last Name:" msgstr "姓(_L):" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:6 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:6 msgid "_Nickname:" msgstr "昵称(_N):" -#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-local-xmpp.ui.h:7 msgid "_Published Name:" msgstr "公开的åå—(_P):" +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:1 +msgid "<span size=\"small\"><b>Example:</b> user@my.sip.server</span>" +msgstr "" + #. look up the DNS SRV record at the service's domain for the host name of a STUN server. -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:4 msgid "Discover STUN" msgstr "æœç´¢ STUN" -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:6 msgid "STUN Server:" msgstr "STUN æœåŠ¡å™¨ï¼š" -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:6 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:7 msgid "STUN port:" msgstr "STUN 端å£ï¼š" -#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:7 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:8 +msgid "What is your SIP account password?" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:9 +msgid "What is your SIP login ID?" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:10 msgid "_Username:" msgstr "用户å(_U):" -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:4 msgid "Use _Yahoo Japan" msgstr "使用 _Yahoo 日本" -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:5 +msgid "What is your Yahoo! ID?" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:6 +msgid "What is your Yahoo! password?" +msgstr "" + +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:7 msgid "Yahoo I_D:" msgstr "Yahoo I_D:" -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:6 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9 msgid "_Ignore conference and chatroom invitations" msgstr "忽略会议和èŠå¤©å®¤é‚€è¯·(_I)" -#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:8 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:11 msgid "_Room List locale:" msgstr "èŠå¤©å®¤åˆ—表 locale(_R):" @@ -736,92 +846,98 @@ msgstr "å•å‡»ä»¥æ”¾å¤§" msgid "Failed to reconnect this chat" msgstr "é‡æ–°è¿žæŽ¥åˆ°å¯¹è¯å¤±è´¥" -#: ../libempathy-gtk/empathy-chat.c:404 +#: ../libempathy-gtk/empathy-chat.c:413 msgid "Unsupported command" msgstr "ä¸æ”¯æŒçš„命令" -#: ../libempathy-gtk/empathy-chat.c:539 +#: ../libempathy-gtk/empathy-chat.c:549 msgid "offline" msgstr "离线" -#: ../libempathy-gtk/empathy-chat.c:542 +#: ../libempathy-gtk/empathy-chat.c:552 msgid "invalid contact" msgstr "æ— æ•ˆè”系人" -#: ../libempathy-gtk/empathy-chat.c:545 +#: ../libempathy-gtk/empathy-chat.c:555 msgid "permission denied" msgstr "æƒé™ä¸è¶³" -#: ../libempathy-gtk/empathy-chat.c:548 +#: ../libempathy-gtk/empathy-chat.c:558 msgid "too long message" msgstr "消æ¯å¤ªé•¿" -#: ../libempathy-gtk/empathy-chat.c:551 +#: ../libempathy-gtk/empathy-chat.c:561 msgid "not implemented" msgstr "尚未实现" -#: ../libempathy-gtk/empathy-chat.c:554 +#: ../libempathy-gtk/empathy-chat.c:564 msgid "unknown" msgstr "未知" -#: ../libempathy-gtk/empathy-chat.c:558 +#: ../libempathy-gtk/empathy-chat.c:568 #, c-format msgid "Error sending message '%s': %s" msgstr "å‘é€æ¶ˆæ¯â€œ%sâ€å‡ºé”™ï¼š%s" -#: ../libempathy-gtk/empathy-chat.c:588 +#: ../libempathy-gtk/empathy-chat.c:598 #, c-format msgid "Topic set to: %s" msgstr "è¯é¢˜è¢«è®¾ç½®ä¸ºï¼š%s" -#: ../libempathy-gtk/empathy-chat.c:590 +#: ../libempathy-gtk/empathy-chat.c:600 msgid "No topic defined" msgstr "未设置è¯é¢˜" -#: ../libempathy-gtk/empathy-chat.c:960 +#: ../libempathy-gtk/empathy-chat.c:970 msgid "(No Suggestions)" msgstr "(没有建议)" -#: ../libempathy-gtk/empathy-chat.c:1014 +#: ../libempathy-gtk/empathy-chat.c:1024 msgid "Insert Smiley" msgstr "æ’入表情" #. send button -#: ../libempathy-gtk/empathy-chat.c:1032 -#: ../libempathy-gtk/empathy-ui-utils.c:1480 +#: ../libempathy-gtk/empathy-chat.c:1042 +#: ../libempathy-gtk/empathy-ui-utils.c:1471 msgid "_Send" msgstr "å‘é€(_S)" -#: ../libempathy-gtk/empathy-chat.c:1066 +#: ../libempathy-gtk/empathy-chat.c:1076 msgid "_Spelling Suggestions" msgstr "拼写建议(_S)" -#: ../libempathy-gtk/empathy-chat.c:1181 +#: ../libempathy-gtk/empathy-chat.c:1191 #, c-format msgid "%s has disconnected" msgstr "%s å·²æ–开连接" -#: ../libempathy-gtk/empathy-chat.c:1185 +#. translators: reverse the order of these arguments +#. * if the kicked should come before the kicker in your locale. +#. +#: ../libempathy-gtk/empathy-chat.c:1198 #, c-format -msgid "%s was kicked by %s" -msgstr "%s 被 %s 踢出" +msgid "%1$s was kicked by %2$s" +msgstr "%1$s 被 %2$s 踢出" -#: ../libempathy-gtk/empathy-chat.c:1188 +#: ../libempathy-gtk/empathy-chat.c:1201 #, c-format msgid "%s was kicked" msgstr "%s 被踢出" -#: ../libempathy-gtk/empathy-chat.c:1193 +#. translators: reverse the order of these arguments +#. * if the banned should come before the banner in your locale. +#. +#: ../libempathy-gtk/empathy-chat.c:1209 #, c-format -msgid "%s was banned by %s" -msgstr "%s 被 %s ç¦æ¢" +msgid "%1$s was banned by %2$s" +msgstr "%s 已被 %s ç¦æ¢" -#: ../libempathy-gtk/empathy-chat.c:1196 +#: ../libempathy-gtk/empathy-chat.c:1212 #, c-format msgid "%s was banned" msgstr "%s 被ç¦æ¢" -#: ../libempathy-gtk/empathy-chat.c:1200 +#: ../libempathy-gtk/empathy-chat.c:1216 #, c-format msgid "%s has left the room" msgstr "%s 离开了èŠå¤©å®¤" @@ -831,42 +947,42 @@ msgstr "%s 离开了èŠå¤©å®¤" #. * given by the user living the room. If this poses a problem, #. * please let us know. :-) #. -#: ../libempathy-gtk/empathy-chat.c:1209 +#: ../libempathy-gtk/empathy-chat.c:1225 #, c-format msgid " (%s)" msgstr " (%s)" -#: ../libempathy-gtk/empathy-chat.c:1232 +#: ../libempathy-gtk/empathy-chat.c:1248 #, c-format msgid "%s has joined the room" msgstr "%s åŠ å…¥äº†èŠå¤©å®¤" -#: ../libempathy-gtk/empathy-chat.c:1365 ../src/empathy-call-window.c:1225 +#: ../libempathy-gtk/empathy-chat.c:1381 ../src/empathy-call-window.c:1277 msgid "Disconnected" msgstr "å·²æ–开连接" -#: ../libempathy-gtk/empathy-chat.c:1800 +#: ../libempathy-gtk/empathy-chat.c:1817 msgid "Connected" msgstr "已连接" -#: ../libempathy-gtk/empathy-chat.c:1850 +#: ../libempathy-gtk/empathy-chat.c:1867 #: ../libempathy-gtk/empathy-log-window.c:502 msgid "Conversation" msgstr "对è¯" -#: ../libempathy-gtk/empathy-chat.ui.h:1 ../src/empathy-chat-window.c:472 +#: ../libempathy-gtk/empathy-chat.ui.h:1 ../src/empathy-chat-window.c:471 msgid "Topic:" msgstr "è¯é¢˜ï¼š" #. Copy Link Address menu item #: ../libempathy-gtk/empathy-chat-text-view.c:316 -#: ../libempathy-gtk/empathy-theme-adium.c:267 +#: ../libempathy-gtk/empathy-theme-adium.c:266 msgid "_Copy Link Address" msgstr "å¤åˆ¶é“¾æŽ¥åœ°å€(_C)" #. Open Link menu item #: ../libempathy-gtk/empathy-chat-text-view.c:323 -#: ../libempathy-gtk/empathy-theme-adium.c:275 +#: ../libempathy-gtk/empathy-theme-adium.c:274 msgid "_Open Link" msgstr "打开链接(_O)" @@ -876,16 +992,16 @@ msgstr "打开链接(_O)" msgid "%A %B %d %Y" msgstr "%A %B %d %Y" -#: ../libempathy-gtk/empathy-contact-dialogs.c:179 -#: ../libempathy-gtk/empathy-contact-dialogs.c:238 +#: ../libempathy-gtk/empathy-contact-dialogs.c:177 +#: ../libempathy-gtk/empathy-contact-dialogs.c:236 msgid "Edit Contact Information" msgstr "编辑è”系人信æ¯" -#: ../libempathy-gtk/empathy-contact-dialogs.c:289 +#: ../libempathy-gtk/empathy-contact-dialogs.c:287 msgid "Personal Information" msgstr "个人信æ¯" -#: ../libempathy-gtk/empathy-contact-dialogs.c:394 +#: ../libempathy-gtk/empathy-contact-dialogs.c:392 msgid "New Contact" msgstr "新建è”系人" @@ -897,27 +1013,27 @@ msgstr "以åŽå†å†³å®š(_L)" msgid "Subscription Request" msgstr "订阅请求" -#: ../libempathy-gtk/empathy-contact-list-view.c:1404 +#: ../libempathy-gtk/empathy-contact-list-view.c:1412 #, c-format msgid "Do you really want to remove the group '%s'?" msgstr "您真的è¦åˆ 除群组“%sâ€å—?" -#: ../libempathy-gtk/empathy-contact-list-view.c:1406 +#: ../libempathy-gtk/empathy-contact-list-view.c:1414 msgid "Removing group" msgstr "åˆ é™¤ç¾¤ç»„" #. Remove -#: ../libempathy-gtk/empathy-contact-list-view.c:1453 -#: ../libempathy-gtk/empathy-contact-list-view.c:1530 +#: ../libempathy-gtk/empathy-contact-list-view.c:1461 +#: ../libempathy-gtk/empathy-contact-list-view.c:1538 msgid "_Remove" msgstr "åˆ é™¤(_R)" -#: ../libempathy-gtk/empathy-contact-list-view.c:1483 +#: ../libempathy-gtk/empathy-contact-list-view.c:1491 #, c-format msgid "Do you really want to remove the contact '%s'?" msgstr "您真的想è¦åˆ 除è”系人“%sâ€å—?" -#: ../libempathy-gtk/empathy-contact-list-view.c:1485 +#: ../libempathy-gtk/empathy-contact-list-view.c:1493 msgid "Removing contact" msgstr "åˆ é™¤è”系人" @@ -958,7 +1074,7 @@ msgid "Infor_mation" msgstr "ä¿¡æ¯(_M)" #: ../libempathy-gtk/empathy-contact-menu.c:441 -#: ../src/empathy-main-window.ui.h:16 +#: ../src/empathy-chat-window.ui.h:10 ../src/empathy-main-window.ui.h:16 msgid "_Edit" msgstr "编辑(_E)" @@ -982,120 +1098,120 @@ msgstr "ä¿å˜å¤´åƒ" msgid "Unable to save avatar" msgstr "æ— æ³•ä¿å˜å¤´åƒ" -#: ../libempathy-gtk/empathy-contact-widget.c:996 +#: ../libempathy-gtk/empathy-contact-widget.c:1000 msgid "Select" msgstr "选择" -#: ../libempathy-gtk/empathy-contact-widget.c:1005 -#: ../src/empathy-main-window.c:1023 +#: ../libempathy-gtk/empathy-contact-widget.c:1009 +#: ../src/empathy-main-window.c:1019 msgid "Group" msgstr "群组" -#: ../libempathy-gtk/empathy-contact-widget.c:1256 +#: ../libempathy-gtk/empathy-contact-widget.c:1260 msgid "Country ISO Code:" msgstr "包括 ISO ç¼–ç " -#: ../libempathy-gtk/empathy-contact-widget.c:1258 +#: ../libempathy-gtk/empathy-contact-widget.c:1262 msgid "Country:" msgstr "国家" -#: ../libempathy-gtk/empathy-contact-widget.c:1260 +#: ../libempathy-gtk/empathy-contact-widget.c:1264 msgid "State:" msgstr "çœ" -#: ../libempathy-gtk/empathy-contact-widget.c:1262 +#: ../libempathy-gtk/empathy-contact-widget.c:1266 msgid "City:" msgstr "市" -#: ../libempathy-gtk/empathy-contact-widget.c:1264 +#: ../libempathy-gtk/empathy-contact-widget.c:1268 msgid "Area:" msgstr "地区" -#: ../libempathy-gtk/empathy-contact-widget.c:1266 +#: ../libempathy-gtk/empathy-contact-widget.c:1270 msgid "Postal Code:" msgstr "邮政编ç " -#: ../libempathy-gtk/empathy-contact-widget.c:1268 +#: ../libempathy-gtk/empathy-contact-widget.c:1272 msgid "Street:" msgstr "è¡—" -#: ../libempathy-gtk/empathy-contact-widget.c:1270 +#: ../libempathy-gtk/empathy-contact-widget.c:1274 msgid "Building:" msgstr "建ç‘物" -#: ../libempathy-gtk/empathy-contact-widget.c:1272 +#: ../libempathy-gtk/empathy-contact-widget.c:1276 msgid "Floor:" msgstr "楼层:" -#: ../libempathy-gtk/empathy-contact-widget.c:1274 +#: ../libempathy-gtk/empathy-contact-widget.c:1278 msgid "Room:" msgstr "房间:" -#: ../libempathy-gtk/empathy-contact-widget.c:1276 +#: ../libempathy-gtk/empathy-contact-widget.c:1280 msgid "Text:" msgstr "文本:" -#: ../libempathy-gtk/empathy-contact-widget.c:1278 +#: ../libempathy-gtk/empathy-contact-widget.c:1282 msgid "Description:" msgstr "æ述:" -#: ../libempathy-gtk/empathy-contact-widget.c:1280 +#: ../libempathy-gtk/empathy-contact-widget.c:1284 msgid "URI:" msgstr "URI:" -#: ../libempathy-gtk/empathy-contact-widget.c:1282 +#: ../libempathy-gtk/empathy-contact-widget.c:1286 msgid "Accuracy Level:" msgstr "准确程度:" -#: ../libempathy-gtk/empathy-contact-widget.c:1284 +#: ../libempathy-gtk/empathy-contact-widget.c:1288 msgid "Error:" msgstr "错误:" -#: ../libempathy-gtk/empathy-contact-widget.c:1286 +#: ../libempathy-gtk/empathy-contact-widget.c:1290 msgid "Vertical Error (meters):" msgstr "垂直误差(ç±³):" -#: ../libempathy-gtk/empathy-contact-widget.c:1288 +#: ../libempathy-gtk/empathy-contact-widget.c:1292 msgid "Horizontal Error (meters):" msgstr "水平误差(ç±³):" -#: ../libempathy-gtk/empathy-contact-widget.c:1290 +#: ../libempathy-gtk/empathy-contact-widget.c:1294 msgid "Speed:" msgstr "速度:" -#: ../libempathy-gtk/empathy-contact-widget.c:1292 +#: ../libempathy-gtk/empathy-contact-widget.c:1296 msgid "Bearing:" msgstr "æ–¹ä½æœå‘:" -#: ../libempathy-gtk/empathy-contact-widget.c:1294 +#: ../libempathy-gtk/empathy-contact-widget.c:1298 msgid "Climb Speed:" msgstr "爬å‡é€Ÿåº¦:" -#: ../libempathy-gtk/empathy-contact-widget.c:1296 +#: ../libempathy-gtk/empathy-contact-widget.c:1300 msgid "Last Updated on:" msgstr "最近更新于:" -#: ../libempathy-gtk/empathy-contact-widget.c:1298 +#: ../libempathy-gtk/empathy-contact-widget.c:1302 msgid "Longitude:" msgstr "ç»åº¦ï¼š" -#: ../libempathy-gtk/empathy-contact-widget.c:1300 +#: ../libempathy-gtk/empathy-contact-widget.c:1304 msgid "Latitude:" msgstr "纬度:" -#: ../libempathy-gtk/empathy-contact-widget.c:1302 +#: ../libempathy-gtk/empathy-contact-widget.c:1306 msgid "Altitude:" msgstr "海拔:" -#: ../libempathy-gtk/empathy-contact-widget.c:1349 +#: ../libempathy-gtk/empathy-contact-widget.c:1353 msgid "<b>Location</b>" msgstr "<b>ä½ç½®</b>" -#: ../libempathy-gtk/empathy-contact-widget.c:1362 +#: ../libempathy-gtk/empathy-contact-widget.c:1366 msgid "<b>Location</b>, " msgstr "<b>ä½ç½®</b>," -#: ../libempathy-gtk/empathy-contact-widget.c:1412 +#: ../libempathy-gtk/empathy-contact-widget.c:1416 msgid "%B %e, %Y at %R UTC" msgstr "%B %e,%Y 于 %R UTC 时间" @@ -1127,7 +1243,7 @@ msgid "Client:" msgstr "客户端:" #: ../libempathy-gtk/empathy-contact-widget.ui.h:7 -#: ../src/empathy-main-window.c:1006 +#: ../src/empathy-main-window.c:1002 msgid "Contact" msgstr "è”系人" @@ -1178,24 +1294,24 @@ msgstr "网站:" msgid "_Add Group" msgstr "æ·»åŠ ç¾¤ç»„(_A)" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:283 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:281 msgid "new server" msgstr "新建æœåŠ¡å™¨" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:510 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:508 msgid "Server" msgstr "æœåŠ¡å™¨" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:525 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:523 msgid "Port" msgstr "端å£" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:538 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:536 msgid "SSL" msgstr "SSL" #: ../libempathy-gtk/empathy-log-window.c:495 -#: ../src/empathy-import-dialog.c:285 +#: ../src/empathy-import-widget.c:321 msgid "Account" msgstr "账户" @@ -1241,34 +1357,34 @@ msgstr "新建对è¯" #. COL_DISPLAY_MARKUP #. COL_STATUS_CUSTOMISABLE #. COL_TYPE -#: ../libempathy-gtk/empathy-presence-chooser.c:172 -#: ../libempathy-gtk/empathy-presence-chooser.c:208 +#: ../libempathy-gtk/empathy-presence-chooser.c:176 +#: ../libempathy-gtk/empathy-presence-chooser.c:212 msgid "Custom Message..." msgstr "自定义状æ€..." -#: ../libempathy-gtk/empathy-presence-chooser.c:225 -#: ../libempathy-gtk/empathy-presence-chooser.c:227 +#: ../libempathy-gtk/empathy-presence-chooser.c:229 +#: ../libempathy-gtk/empathy-presence-chooser.c:231 msgid "Edit Custom Messages..." msgstr "编辑自定义状æ€..." -#: ../libempathy-gtk/empathy-presence-chooser.c:326 +#: ../libempathy-gtk/empathy-presence-chooser.c:330 msgid "Click to remove this status as a favorite" msgstr "点击移除自定义状æ€" -#: ../libempathy-gtk/empathy-presence-chooser.c:335 +#: ../libempathy-gtk/empathy-presence-chooser.c:339 msgid "Click to make this status a favorite" msgstr "点击设置自定义状æ€" -#: ../libempathy-gtk/empathy-presence-chooser.c:369 +#: ../libempathy-gtk/empathy-presence-chooser.c:373 msgid "Set status" msgstr "设置状æ€" -#: ../libempathy-gtk/empathy-presence-chooser.c:782 +#: ../libempathy-gtk/empathy-presence-chooser.c:794 msgid "Set your presence and current status" msgstr "è®¾ç½®ä½ çš„çŠ¶æ€ä¿¡æ¯å’ŒçŽ°åœ¨çš„状æ€" #. Custom messages -#: ../libempathy-gtk/empathy-presence-chooser.c:1017 +#: ../libempathy-gtk/empathy-presence-chooser.c:1043 msgid "Custom messages..." msgstr "自定义状æ€..." @@ -1328,14 +1444,6 @@ msgstr "æ·»åŠ æ–°è‡ªå®šä¹‰çŠ¶æ€(_N)" msgid "Saved Presets" msgstr "å·²ä¿å˜çš„自定义状æ€" -#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:3 -msgid "gtk-add" -msgstr "gtk-add" - -#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:4 -msgid "gtk-remove" -msgstr "gtk-remove" - #: ../libempathy-gtk/empathy-theme-manager.c:67 msgid "Classic" msgstr "ç»å…¸" @@ -1352,15 +1460,15 @@ msgstr "清爽" msgid "Blue" msgstr "è“色" -#: ../libempathy-gtk/empathy-ui-utils.c:1382 +#: ../libempathy-gtk/empathy-ui-utils.c:1373 msgid "Unable to open URI" msgstr "æ— æ³•æ‰“å¼€ URI" -#: ../libempathy-gtk/empathy-ui-utils.c:1472 +#: ../libempathy-gtk/empathy-ui-utils.c:1463 msgid "Select a file" msgstr "选择文件" -#: ../libempathy-gtk/empathy-ui-utils.c:1530 +#: ../libempathy-gtk/empathy-ui-utils.c:1523 msgid "Select a destination" msgstr "选择目的地" @@ -1548,7 +1656,7 @@ msgid "Megaphone" msgstr "è¯ç’" #: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2 -#: ../megaphone/src/megaphone-applet.c:519 +#: ../megaphone/src/megaphone-applet.c:518 msgid "Talk!" msgstr "说å§ï¼" @@ -1566,11 +1674,11 @@ msgstr "ä¿¡æ¯(_I)" msgid "_Preferences" msgstr "首选项(_P)" -#: ../megaphone/src/megaphone-applet.c:168 +#: ../megaphone/src/megaphone-applet.c:166 msgid "Please configure a contact." msgstr "请é…置一个è”系人。" -#: ../megaphone/src/megaphone-applet.c:258 +#: ../megaphone/src/megaphone-applet.c:256 msgid "Select contact..." msgstr "选择è”系人..." @@ -1579,23 +1687,23 @@ msgid "Presence" msgstr "状æ€" #: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2 -#: ../nothere/src/nothere-applet.c:106 +#: ../nothere/src/nothere-applet.c:105 msgid "Set your own presence" msgstr "设置您的状æ€" -#: ../src/empathy.c:567 +#: ../src/empathy.c:588 msgid "Don't connect on startup" msgstr "å¯åŠ¨æ—¶ä¸è‡ªåŠ¨ç™»å½•" -#: ../src/empathy.c:571 +#: ../src/empathy.c:592 msgid "Don't show the contact list on startup" msgstr "å¯åŠ¨æ—¶ä¸æ˜¾ç¤ºè”系人列表" -#: ../src/empathy.c:575 +#: ../src/empathy.c:596 msgid "Show the accounts dialog" msgstr "显示账户对è¯æ¡†" -#: ../src/empathy.c:587 +#: ../src/empathy.c:608 msgid "- Empathy IM Client" msgstr " - Empathy IM 客户端" @@ -1647,21 +1755,131 @@ msgstr "" " fujianwzh https://launchpad.net/~fujianwzh\n" " yuane https://launchpad.net/~yuane" -#: ../src/empathy-accounts-dialog.c:392 -msgid "Enabled" -msgstr "å¯ç”¨" +#. translators: this is followed by the "while ..." strings some lines +#. * down this file. +#. +#: ../src/empathy-account-assistant.c:121 +msgid "There has been an error " +msgstr "" -#: ../src/empathy-accounts-dialog.c:402 ../src/empathy-accounts-dialog.ui.h:1 -msgid "Accounts" -msgstr "账户" +#. translators: this follows the "There has been an error " string +#: ../src/empathy-account-assistant.c:125 +msgid "while importing the accounts." +msgstr "" + +#. translators: this follows the "There has been an error " string +#: ../src/empathy-account-assistant.c:129 +msgid "while parsing the account details." +msgstr "" + +#. translators: this follows the "There has been an error " string +#: ../src/empathy-account-assistant.c:133 +msgid "while creating the account." +msgstr "" + +#: ../src/empathy-account-assistant.c:151 +#, c-format +msgid "The error message was: <span style=\"italic\">%s</span>" +msgstr "" + +#: ../src/empathy-account-assistant.c:159 +msgid "" +"You can either go back and try to enter your accounts' details again or quit " +"this wizard and add accounts later from the Edit menu." +msgstr "" +#: ../src/empathy-account-assistant.c:194 +msgid "An error occurred" +msgstr "" + +#. Create account #. To translator: %s is the protocol name -#: ../src/empathy-accounts-dialog.c:837 +#: ../src/empathy-account-assistant.c:330 +#: ../src/empathy-accounts-dialog.c:1094 #, c-format msgid "New %s account" msgstr "新建 %s 账户" -#: ../src/empathy-accounts-dialog.c:950 +#: ../src/empathy-account-assistant.c:397 +msgid "What kind of chat account do you have?" +msgstr "" + +#: ../src/empathy-account-assistant.c:403 +#, fuzzy +msgid "Do you have any other chat accounts you want to set up?" +msgstr "我已ç»æ‹¥æœ‰è´¦æˆ·ï¼Œæˆ‘想使用它" + +#: ../src/empathy-account-assistant.c:409 +msgid "Enter your account details" +msgstr "输入您的å¸æˆ·è¯¦æƒ…" + +#: ../src/empathy-account-assistant.c:414 +#, fuzzy +msgid "What kind of chat account do you want to create?" +msgstr "%s æ¥ç”µï¼Œæ‚¨æƒ³è¦æŽ¥å¬å—?" + +#: ../src/empathy-account-assistant.c:420 +#, fuzzy +msgid "Do you want to create other chat accounts?" +msgstr "您真的想è¦åˆ 除è”系人“%sâ€å—?" + +#: ../src/empathy-account-assistant.c:427 +msgid "Enter the details for the new account" +msgstr "" + +#: ../src/empathy-account-assistant.c:513 +msgid "" +"With Empathy you can chat with people online nearby and with friends and " +"colleagues who use Google Talk, AIM, Windows Live and many other chat " +"programs. With a microphone or a webcam you can also have audio or video " +"calls." +msgstr "" + +#: ../src/empathy-account-assistant.c:530 +msgid "Do you have an account you've been using with another chat program?" +msgstr "" + +#: ../src/empathy-account-assistant.c:553 +msgid "Yes, import my account details from " +msgstr "" + +#: ../src/empathy-account-assistant.c:574 +msgid "Yes, I'll enter my account details now" +msgstr "" + +#: ../src/empathy-account-assistant.c:596 +#, fuzzy +msgid "No, I want a new account" +msgstr "创建新的å¸æˆ·(_C)" + +#: ../src/empathy-account-assistant.c:606 +msgid "No, I just want to see people online nearby for now" +msgstr "" + +#: ../src/empathy-account-assistant.c:627 +#, fuzzy +msgid "Select the accounts you want to import:" +msgstr "选择您è¦é‚€è¯·çš„人:" + +#: ../src/empathy-account-assistant.c:714 +#: ../src/empathy-new-chatroom-dialog.c:496 +#: ../src/empathy-new-chatroom-dialog.c:497 +msgid "Yes" +msgstr "是" + +#: ../src/empathy-account-assistant.c:721 +msgid "No, that's all for now" +msgstr "" + +#: ../src/empathy-account-assistant.c:914 +msgid "Welcome to Empathy" +msgstr "欢迎使用 Empathy" + +#: ../src/empathy-account-assistant.c:923 +msgid "Import your existing accounts" +msgstr "导入现有å¸æˆ·" + +#: ../src/empathy-accounts-dialog.c:616 #, c-format msgid "" "You are about to remove your %s account!\n" @@ -1670,7 +1888,7 @@ msgstr "" "您将è¦åˆ 除您的 %s 账户ï¼\n" "您确定è¦ç»§ç»å—?" -#: ../src/empathy-accounts-dialog.c:956 +#: ../src/empathy-accounts-dialog.c:622 msgid "" "Any associated conversations and chat rooms will NOT be removed if you " "decide to proceed.\n" @@ -1682,99 +1900,94 @@ msgstr "" "\n" "如果将æ¥æ‚¨é‡æ–°æ·»åŠ æ¤è´¦æˆ·ï¼Œå®ƒä»¬å°†ä»ç„¶å˜åœ¨ã€‚" +#: ../src/empathy-accounts-dialog.ui.h:1 +msgid "Accounts" +msgstr "账户" + #: ../src/empathy-accounts-dialog.ui.h:2 -msgid "Add Account" -msgstr "æ·»åŠ å¸æˆ·" +msgid "Add new" +msgstr "" #: ../src/empathy-accounts-dialog.ui.h:3 msgid "Cr_eate" msgstr "创建(_E)" #: ../src/empathy-accounts-dialog.ui.h:4 -msgid "Gmail" -msgstr "Gmail" - -#: ../src/empathy-accounts-dialog.ui.h:5 -msgid "Import Accounts..." -msgstr "导入账户..." - -#: ../src/empathy-accounts-dialog.ui.h:6 msgid "No protocol installed" msgstr "尚未安装åè®®" -#: ../src/empathy-accounts-dialog.ui.h:7 -msgid "Settings" -msgstr "设置" - -#: ../src/empathy-accounts-dialog.ui.h:8 +#: ../src/empathy-accounts-dialog.ui.h:5 msgid "" "To add a new account, you first have to install a backend for each protocol " "you want to use." msgstr "è¦æ·»åŠ 一个新账户,您首先需è¦ä¸ºæ‚¨æƒ³è¦ä½¿ç”¨çš„æ¯ä¸ªå议安装åŽç«¯ã€‚" -#: ../src/empathy-accounts-dialog.ui.h:9 -msgid "Type:" -msgstr "类型:" - -#: ../src/empathy-accounts-dialog.ui.h:10 +#: ../src/empathy-accounts-dialog.ui.h:6 msgid "_Add..." msgstr "æ·»åŠ (_A)..." -#: ../src/empathy-accounts-dialog.ui.h:11 +#: ../src/empathy-accounts-dialog.ui.h:7 msgid "_Create a new account" msgstr "创建新的å¸æˆ·(_C)" -#: ../src/empathy-accounts-dialog.ui.h:12 +#: ../src/empathy-accounts-dialog.ui.h:8 msgid "_Reuse an existing account" msgstr "å¯ç”¨çŽ°æœ‰å¸æˆ·(_R)" -#: ../src/empathy-call-window.c:420 +#: ../src/empathy-accounts-dialog.ui.h:9 +msgid "account" +msgstr "账户" + +#: ../src/empathy-call-window.c:426 msgid "Contrast" msgstr "对比度" -#: ../src/empathy-call-window.c:423 +#: ../src/empathy-call-window.c:429 msgid "Brightness" msgstr "亮度" -#: ../src/empathy-call-window.c:426 +#: ../src/empathy-call-window.c:432 msgid "Gamma" msgstr "伽马" -#: ../src/empathy-call-window.c:531 +#: ../src/empathy-call-window.c:539 msgid "Volume" msgstr "音é‡" -#: ../src/empathy-call-window.c:662 +#: ../src/empathy-call-window.c:671 msgid "Connecting..." msgstr "æ£åœ¨è¿žæŽ¥..." -#: ../src/empathy-call-window.c:746 +#: ../src/empathy-call-window.c:778 msgid "_Sidebar" msgstr "侧边æ (_S)" -#: ../src/empathy-call-window.c:765 +#: ../src/empathy-call-window.c:797 msgid "Dialpad" msgstr "电è¯é”®ç›˜" -#: ../src/empathy-call-window.c:771 +#: ../src/empathy-call-window.c:803 msgid "Audio input" msgstr "音频输入" -#: ../src/empathy-call-window.c:775 +#: ../src/empathy-call-window.c:807 msgid "Video input" msgstr "视频输入" -#: ../src/empathy-call-window.c:835 +#. translators: Call is a noun and %s is the contact name. This string is used +#. * in the window title +#: ../src/empathy-call-window.c:868 #, c-format msgid "Call with %s" msgstr "与 %s 通è¯" -#: ../src/empathy-call-window.c:904 +#. translators: Call is a noun. This string is used in the window title +#: ../src/empathy-call-window.c:938 msgid "Call" msgstr "通è¯" #. Translators: number of minutes:seconds the caller has been connected -#: ../src/empathy-call-window.c:1335 +#: ../src/empathy-call-window.c:1390 #, c-format msgid "Connected — %d:%02dm" msgstr "已连接 — %d:%02dm" @@ -1807,15 +2020,75 @@ msgstr "通è¯(_C)" msgid "_View" msgstr "查看(_V)" -#: ../src/empathy-chat-window.c:344 +#: ../src/empathy-chat-window.c:343 #, c-format msgid "Conversations (%d)" msgstr "å¯¹è¯ (%d)" -#: ../src/empathy-chat-window.c:476 +#: ../src/empathy-chat-window.c:475 msgid "Typing a message." msgstr "输入消æ¯ã€‚" +#: ../src/empathy-chat-window.ui.h:1 +msgid "C_lear" +msgstr "清除(_L)" + +#: ../src/empathy-chat-window.ui.h:2 +msgid "Chat" +msgstr "èŠå¤©" + +#: ../src/empathy-chat-window.ui.h:3 +msgid "Insert _Smiley" +msgstr "æ’入表情(_M)" + +#: ../src/empathy-chat-window.ui.h:4 +msgid "Move Tab _Left" +msgstr "å·¦ç§»æ ‡ç¾(_L)" + +#: ../src/empathy-chat-window.ui.h:5 +msgid "Move Tab _Right" +msgstr "å³ç§»æ ‡ç¾(_R)" + +#: ../src/empathy-chat-window.ui.h:6 +msgid "_Contact" +msgstr "è”系人(_C)" + +#: ../src/empathy-chat-window.ui.h:7 ../src/empathy-main-window.ui.h:14 +msgid "_Contents" +msgstr "内容(_C)" + +#: ../src/empathy-chat-window.ui.h:8 +msgid "_Conversation" +msgstr "对è¯(_C)" + +#: ../src/empathy-chat-window.ui.h:9 +msgid "_Detach Tab" +msgstr "æ¼‚ç§»æ ‡ç¾(_D)" + +#: ../src/empathy-chat-window.ui.h:11 +msgid "_Favorite Chatroom" +msgstr "收è—èŠå¤©å®¤(_F)" + +#: ../src/empathy-chat-window.ui.h:12 ../src/empathy-main-window.ui.h:18 +msgid "_Help" +msgstr "帮助(_H)" + +#: ../src/empathy-chat-window.ui.h:13 +msgid "_Next Tab" +msgstr "ä¸‹ä¸€æ ‡ç¾(_N)" + +#: ../src/empathy-chat-window.ui.h:14 +msgid "_Previous Tab" +msgstr "ä¸Šä¸€æ ‡ç¾(_P)" + +#: ../src/empathy-chat-window.ui.h:15 ../src/empathy-status-icon.ui.h:4 +msgid "_Show Contact List" +msgstr "显示è”系人列表(_S)" + +#: ../src/empathy-chat-window.ui.h:16 +msgid "_Tabs" +msgstr "æ ‡ç¾(_T)" + #: ../src/empathy-chatrooms-window.c:258 msgid "Name" msgstr "å称" @@ -1832,75 +2105,75 @@ msgstr "自动连接" msgid "Manage Favorite Rooms" msgstr "管ç†èŠå¤©å®¤æ”¶è—" -#: ../src/empathy-event-manager.c:321 +#: ../src/empathy-event-manager.c:322 msgid "Incoming call" msgstr "æ¥ç”µ" -#: ../src/empathy-event-manager.c:324 +#: ../src/empathy-event-manager.c:325 #, c-format msgid "%s is calling you, do you want to answer?" msgstr "%s æ¥ç”µï¼Œæ‚¨æƒ³è¦æŽ¥å¬å—?" -#: ../src/empathy-event-manager.c:331 +#: ../src/empathy-event-manager.c:332 msgid "_Reject" msgstr "æ‹’ç»(_R)" -#: ../src/empathy-event-manager.c:337 +#: ../src/empathy-event-manager.c:338 msgid "_Answer" msgstr "接å¬(_A)" -#: ../src/empathy-event-manager.c:452 +#: ../src/empathy-event-manager.c:453 #, c-format msgid "Incoming call from %s" msgstr "%s çš„æ¥ç”µ" -#: ../src/empathy-event-manager.c:496 +#: ../src/empathy-event-manager.c:497 #, c-format msgid "%s is offering you an invitation" msgstr "%s æ£å‘é€é‚€è¯·ç»™æ‚¨" -#: ../src/empathy-event-manager.c:502 +#: ../src/empathy-event-manager.c:503 msgid "An external application will be started to handle it." msgstr "å°†å¯åŠ¨ä¸€ä¸ªå¤–部应用程åºæ¥å¤„ç†å®ƒ." -#: ../src/empathy-event-manager.c:507 +#: ../src/empathy-event-manager.c:508 msgid "You don't have the needed external application to handle it." msgstr "您没有必需的外部应用程åºæ¥å¤„ç†å®ƒ." -#: ../src/empathy-event-manager.c:634 +#: ../src/empathy-event-manager.c:635 msgid "Room invitation" msgstr "èŠå¤©å®¤é‚€è¯·" -#: ../src/empathy-event-manager.c:637 +#: ../src/empathy-event-manager.c:638 #, c-format msgid "%s is inviting you to join %s" msgstr "%s æ£é‚€è¯·æ‚¨åŠ å…¥ %s" -#: ../src/empathy-event-manager.c:645 +#: ../src/empathy-event-manager.c:646 msgid "_Decline" msgstr "æ‹’ç»(_D)" -#: ../src/empathy-event-manager.c:650 +#: ../src/empathy-event-manager.c:651 #: ../src/empathy-new-chatroom-dialog.ui.h:7 msgid "_Join" msgstr "åŠ å…¥(_J)" -#: ../src/empathy-event-manager.c:689 +#: ../src/empathy-event-manager.c:690 #, c-format msgid "%s invited you to join %s" msgstr "%s å·²é‚€è¯·æ‚¨åŠ å…¥ %s" -#: ../src/empathy-event-manager.c:715 +#: ../src/empathy-event-manager.c:716 #, c-format msgid "Incoming file transfer from %s" msgstr "接收 %s æ–‡ä»¶ä¼ è¾“" -#: ../src/empathy-event-manager.c:895 +#: ../src/empathy-event-manager.c:896 #, c-format msgid "Subscription requested by %s" msgstr "%s 的订阅请求" -#: ../src/empathy-event-manager.c:899 +#: ../src/empathy-event-manager.c:900 #, c-format msgid "" "\n" @@ -1910,13 +2183,13 @@ msgstr "" "消æ¯ï¼š%s" #. someone is logging off -#: ../src/empathy-event-manager.c:935 +#: ../src/empathy-event-manager.c:936 #, c-format msgid "%s is now offline." msgstr "%s 当å‰ç¦»çº¿ã€‚" #. someone is logging in -#: ../src/empathy-event-manager.c:951 +#: ../src/empathy-event-manager.c:952 #, c-format msgid "%s is now online." msgstr "%s 当å‰åœ¨çº¿ã€‚" @@ -2032,90 +2305,95 @@ msgstr "æ–‡ä»¶ä¼ è¾“" msgid "Remove completed, canceled and failed file transfers from the list" msgstr "从列表移除已完æˆã€å·²å–消åŠå·²å¤±è´¥çš„æ–‡ä»¶ä¼ è¾“" +#: ../src/empathy-import-dialog.c:84 +msgid "" +"No accounts to import could be found. Empathy currently only supports " +"importing accounts from Pidgin." +msgstr "未找到å¯å¯¼å…¥çš„账户。Empathy ç›®å‰åªèƒ½æ”¯æŒä»Ž Pidgin 导入账户。" + +#: ../src/empathy-import-dialog.c:199 +msgid "Import Accounts" +msgstr "导入账户" + #. Translators: this is the header of a treeview column -#: ../src/empathy-import-dialog.c:263 +#: ../src/empathy-import-widget.c:301 msgid "Import" msgstr "导入" -#: ../src/empathy-import-dialog.c:272 +#: ../src/empathy-import-widget.c:310 msgid "Protocol" msgstr "åè®®" -#: ../src/empathy-import-dialog.c:298 +#: ../src/empathy-import-widget.c:334 msgid "Source" msgstr "æº" -#: ../src/empathy-import-dialog.c:392 -msgid "" -"No accounts to import could be found. Empathy currently only supports " -"importing accounts from Pidgin." -msgstr "未找到å¯å¯¼å…¥çš„账户。Empathy ç›®å‰åªèƒ½æ”¯æŒä»Ž Pidgin 导入账户。" - -#: ../src/empathy-import-dialog.ui.h:1 -msgid "Import Accounts" -msgstr "导入账户" +#: ../src/empathy-import-mc4-accounts.c:106 +#, c-format +msgid "%s account" +msgstr "%s 账户" -#: ../src/empathy-main-window.c:402 +#: ../src/empathy-main-window.c:399 msgid "_Edit account" msgstr "编辑账户(_E)" -#: ../src/empathy-main-window.c:505 +#: ../src/empathy-main-window.c:502 msgid "No error specified" msgstr "没有说明错误" -#: ../src/empathy-main-window.c:508 +#: ../src/empathy-main-window.c:505 msgid "Network error" msgstr "网络错误" -#: ../src/empathy-main-window.c:511 +#: ../src/empathy-main-window.c:508 msgid "Authentication failed" msgstr "验è¯å¤±è´¥" -#: ../src/empathy-main-window.c:514 +#: ../src/empathy-main-window.c:511 msgid "Encryption error" msgstr "åŠ å¯†é”™è¯¯" -#: ../src/empathy-main-window.c:517 +#: ../src/empathy-main-window.c:514 msgid "Name in use" msgstr "用户åå·²ç»è¢«å 用" -#: ../src/empathy-main-window.c:520 +#: ../src/empathy-main-window.c:517 msgid "Certificate not provided" msgstr "未æä¾›è¯ä¹¦" -#: ../src/empathy-main-window.c:523 +#: ../src/empathy-main-window.c:520 msgid "Certificate untrusted" msgstr "è¯ä¹¦ä¸è¢«ä¿¡ä»»" -#: ../src/empathy-main-window.c:526 +#: ../src/empathy-main-window.c:523 msgid "Certificate expired" msgstr "è¯ä¹¦å·²è¿‡æœŸ" -#: ../src/empathy-main-window.c:529 +#: ../src/empathy-main-window.c:526 msgid "Certificate not activated" msgstr "è¯ä¹¦å°šæœªæ¿€æ´»" -#: ../src/empathy-main-window.c:532 +#: ../src/empathy-main-window.c:529 msgid "Certificate hostname mismatch" msgstr "è¯ä¹¦ä¸»æœºåä¸åŒ¹é…" -#: ../src/empathy-main-window.c:535 +#: ../src/empathy-main-window.c:532 msgid "Certificate fingerprint mismatch" msgstr "è¯ä¹¦æŒ‡çº¹ä¸åŒ¹é…" -#: ../src/empathy-main-window.c:538 +#: ../src/empathy-main-window.c:535 msgid "Certificate self-signed" msgstr "è¯ä¹¦æ˜¯è‡ªç¾å±žçš„" -#: ../src/empathy-main-window.c:541 +#: ../src/empathy-main-window.c:538 msgid "Certificate error" msgstr "è¯ä¹¦é”™è¯¯" -#: ../src/empathy-main-window.c:544 +#: ../src/empathy-main-window.c:541 msgid "Unknown error" msgstr "未知的错误" -#: ../src/empathy-main-window.c:1293 +#: ../src/empathy-main-window.c:1288 msgid "Show and edit accounts" msgstr "显示和编辑账户" @@ -2163,10 +2441,6 @@ msgstr "账户(_A)" msgid "_Compact Size" msgstr "紧凑视图(_C)" -#: ../src/empathy-main-window.ui.h:14 -msgid "_Contents" -msgstr "内容(_C)" - #: ../src/empathy-main-window.ui.h:15 msgid "_Debug" msgstr "调试(_D)" @@ -2175,10 +2449,6 @@ msgstr "调试(_D)" msgid "_File Transfers" msgstr "æ–‡ä»¶ä¼ è¾“(_F)" -#: ../src/empathy-main-window.ui.h:18 -msgid "_Help" -msgstr "帮助(_H)" - #: ../src/empathy-main-window.ui.h:19 msgid "_Join..." msgstr "åŠ å…¥(_J)..." @@ -2203,15 +2473,15 @@ msgstr "最近会è¯(_P)" msgid "_Room" msgstr "èŠå¤©å®¤(_R)" -#: ../src/empathy-new-chatroom-dialog.c:331 +#: ../src/empathy-new-chatroom-dialog.c:328 msgid "Chat Room" msgstr "èŠå¤©å®¤" -#: ../src/empathy-new-chatroom-dialog.c:347 +#: ../src/empathy-new-chatroom-dialog.c:344 msgid "Members" msgstr "æˆå‘˜" -#: ../src/empathy-new-chatroom-dialog.c:496 +#: ../src/empathy-new-chatroom-dialog.c:494 #, c-format msgctxt "" "Room/Join's roomlist tooltip. Parametersare a channel name, yes/no, yes/no " @@ -2227,21 +2497,16 @@ msgstr "" "需è¦é‚€è¯·ï¼š%s\n" "æˆå‘˜ï¼š%s" -#: ../src/empathy-new-chatroom-dialog.c:498 -#: ../src/empathy-new-chatroom-dialog.c:499 -msgid "Yes" -msgstr "是" - -#: ../src/empathy-new-chatroom-dialog.c:498 -#: ../src/empathy-new-chatroom-dialog.c:499 +#: ../src/empathy-new-chatroom-dialog.c:496 +#: ../src/empathy-new-chatroom-dialog.c:497 msgid "No" msgstr "å¦" -#: ../src/empathy-new-chatroom-dialog.c:526 +#: ../src/empathy-new-chatroom-dialog.c:524 msgid "Could not start room listing" msgstr "æ— æ³•å¼€å§‹èŠå¤©å®¤åˆ—表" -#: ../src/empathy-new-chatroom-dialog.c:536 +#: ../src/empathy-new-chatroom-dialog.c:534 msgid "Could not stop room listing" msgstr "æ— æ³•åœæ¢èŠå¤©å®¤åˆ—表" @@ -2272,35 +2537,35 @@ msgstr "èŠå¤©å®¤åˆ—表" msgid "_Room:" msgstr "èŠå¤©å®¤(_R):" -#: ../src/empathy-preferences.c:147 +#: ../src/empathy-preferences.c:148 msgid "Message received" msgstr "收到了消æ¯" -#: ../src/empathy-preferences.c:148 +#: ../src/empathy-preferences.c:149 msgid "Message sent" msgstr "å‘出了消æ¯" -#: ../src/empathy-preferences.c:149 +#: ../src/empathy-preferences.c:150 msgid "New conversation" msgstr "新对è¯" -#: ../src/empathy-preferences.c:150 +#: ../src/empathy-preferences.c:151 msgid "Contact goes online" msgstr "离线人上线" -#: ../src/empathy-preferences.c:151 +#: ../src/empathy-preferences.c:152 msgid "Contact goes offline" msgstr "è”系人离线" -#: ../src/empathy-preferences.c:152 +#: ../src/empathy-preferences.c:153 msgid "Account connected" msgstr "账户已连接" -#: ../src/empathy-preferences.c:153 +#: ../src/empathy-preferences.c:154 msgid "Account disconnected" msgstr "账户已æ–å¼€" -#: ../src/empathy-preferences.c:393 +#: ../src/empathy-preferences.c:394 msgid "Language" msgstr "è¯è¨€" @@ -2385,10 +2650,11 @@ msgid "Privacy" msgstr "éšç§" #: ../src/empathy-preferences.ui.h:21 +#, fuzzy msgid "" "Reduced location accuracy means that nothing more precise than your city, " -"state and country will be published. GPS coordinates will have a random " -"value added (±0.25°)." +"state and country will be published. GPS coordinates will be accurate to 1 " +"decimal place." msgstr "" "é™ä½Žä½ç½®ç²¾åº¦æ„味ç€ä½ 公开的城市ã€å·žå’Œå›½å®¶ä¿¡æ¯ä¸åœ¨ç²¾ç¡®ã€‚ GPS åº§æ ‡ä¼šæœ‰ä¸€ä¸ªéšæœºæ•°" "åŠ å…¥ (±0.25°) 。" @@ -2447,93 +2713,109 @@ msgstr "状æ€" msgid "_Quit" msgstr "退出(_Q)" -#: ../src/empathy-status-icon.ui.h:4 -msgid "_Show Contact List" -msgstr "显示è”系人列表(_S)" - -#: ../src/empathy-tube-dispatch.c:375 +#: ../src/empathy-tube-dispatch.c:376 #, c-format msgid "Unable to start application for service %s: %s" msgstr "ä¸èƒ½å¯åŠ¨åº”用程åºä¸º %s: %s æœåŠ¡" -#: ../src/empathy-tube-dispatch.c:446 +#: ../src/empathy-tube-dispatch.c:447 #, c-format msgid "" "An invitation was offered for service %s, but you don't have the needed " "application to handle it" msgstr "一个由 %s æœåŠ¡æä¾›é‚€è¯·ï¼Œä½†æ˜¯ä½ ä¸éœ€è¦åº”用程åºå¤„ç†å®ƒ" -#: ../src/empathy-call-window-fullscreen.ui.h:1 -msgid "gtk-leave-fullscreen" -msgstr "gtk-leave-fullscreen" - #: ../src/empathy-map-view.ui.h:1 msgid "Contact Map View" msgstr "è”系地图视图" -#: ../src/empathy-debug-dialog.c:111 ../src/empathy-debug-dialog.c:1083 +#: ../src/empathy-debug-dialog.c:111 ../src/empathy-debug-dialog.c:1079 msgid "Error" msgstr "错误" -#: ../src/empathy-debug-dialog.c:114 ../src/empathy-debug-dialog.c:1077 +#: ../src/empathy-debug-dialog.c:114 ../src/empathy-debug-dialog.c:1073 msgid "Critical" msgstr "å±æ€¥" -#: ../src/empathy-debug-dialog.c:117 ../src/empathy-debug-dialog.c:1071 +#: ../src/empathy-debug-dialog.c:117 ../src/empathy-debug-dialog.c:1067 msgid "Warning" msgstr "è¦å‘Š" -#: ../src/empathy-debug-dialog.c:120 ../src/empathy-debug-dialog.c:1065 -#: ../src/empathy-debug-dialog.c:1113 +#: ../src/empathy-debug-dialog.c:120 ../src/empathy-debug-dialog.c:1061 +#: ../src/empathy-debug-dialog.c:1109 msgid "Message" msgstr "消æ¯" -#: ../src/empathy-debug-dialog.c:123 ../src/empathy-debug-dialog.c:1059 +#: ../src/empathy-debug-dialog.c:123 ../src/empathy-debug-dialog.c:1055 msgid "Info" msgstr "ä¿¡æ¯" -#: ../src/empathy-debug-dialog.c:126 ../src/empathy-debug-dialog.c:1053 +#: ../src/empathy-debug-dialog.c:126 ../src/empathy-debug-dialog.c:1049 msgid "Debug" msgstr "调试" -#: ../src/empathy-debug-dialog.c:845 +#: ../src/empathy-debug-dialog.c:841 msgid "Save" msgstr "ä¿å˜" -#: ../src/empathy-debug-dialog.c:948 +#: ../src/empathy-debug-dialog.c:944 msgid "Debug Window" msgstr "调试窗å£" -#: ../src/empathy-debug-dialog.c:1021 +#: ../src/empathy-debug-dialog.c:1017 msgid "Pause" msgstr "æš‚åœ" -#: ../src/empathy-debug-dialog.c:1033 +#: ../src/empathy-debug-dialog.c:1029 msgid "Level " msgstr "级别 " -#: ../src/empathy-debug-dialog.c:1102 +#: ../src/empathy-debug-dialog.c:1098 msgid "Time" msgstr "时间" -#: ../src/empathy-debug-dialog.c:1104 +#: ../src/empathy-debug-dialog.c:1100 msgid "Domain" msgstr "域" -#: ../src/empathy-debug-dialog.c:1106 +#: ../src/empathy-debug-dialog.c:1102 msgid "Category" msgstr "类别" -#: ../src/empathy-debug-dialog.c:1108 +#: ../src/empathy-debug-dialog.c:1104 msgid "Level" msgstr "级别" -#: ../src/empathy-debug-dialog.c:1140 +#: ../src/empathy-debug-dialog.c:1136 msgid "" "The selected connection manager does not support the remote debugging " "extension." msgstr "已选定的连接管ç†ä¸æ”¯æŒè¿œç¨‹è°ƒè¯•æ‰©å±•" +#~ msgid "gtk-add" +#~ msgstr "gtk-add" + +#~ msgid "gtk-remove" +#~ msgstr "gtk-remove" + +#~ msgid "Add Account" +#~ msgstr "æ·»åŠ å¸æˆ·" + +#~ msgid "Gmail" +#~ msgstr "Gmail" + +#~ msgid "Import Accounts..." +#~ msgstr "导入账户..." + +#~ msgid "Settings" +#~ msgstr "设置" + +#~ msgid "Type:" +#~ msgstr "类型:" + +#~ msgid "gtk-leave-fullscreen" +#~ msgstr "gtk-leave-fullscreen" + #~ msgid "Empathy Instant Messenger" #~ msgstr "Empathy å³æ—¶é€šè®¯ç¨‹åº" @@ -2630,57 +2912,15 @@ msgstr "已选定的连接管ç†ä¸æ”¯æŒè¿œç¨‹è°ƒè¯•æ‰©å±•" #~ msgid "<b>Settings</b>" #~ msgstr "<b>设置</b>" -#~ msgid "I already have an account I want to use" -#~ msgstr "我已ç»æ‹¥æœ‰è´¦æˆ·ï¼Œæˆ‘想使用它" - -#~ msgid "C_lear" -#~ msgstr "清除(_L)" - -#~ msgid "Chat" -#~ msgstr "èŠå¤©" - -#~ msgid "Insert _Smiley" -#~ msgstr "æ’入表情(_M)" - #~ msgid "Invitation _message:" #~ msgstr "邀请消æ¯(_M):" #~ msgid "Invite" #~ msgstr "邀请" -#~ msgid "Move Tab _Left" -#~ msgstr "å·¦ç§»æ ‡ç¾(_L)" - -#~ msgid "Move Tab _Right" -#~ msgstr "å³ç§»æ ‡ç¾(_R)" - -#~ msgid "Select who would you like to invite:" -#~ msgstr "选择您è¦é‚€è¯·çš„人:" - #~ msgid "You have been invited to join a chat conference." #~ msgstr "æ‚¨è¢«é‚€è¯·åŠ å…¥ä¸€ä¸ªèŠå¤©ä¼šè®®ã€‚" -#~ msgid "_Contact" -#~ msgstr "è”系人(_C)" - -#~ msgid "_Conversation" -#~ msgstr "对è¯(_C)" - -#~ msgid "_Detach Tab" -#~ msgstr "æ¼‚ç§»æ ‡ç¾(_D)" - -#~ msgid "_Favorite Chatroom" -#~ msgstr "收è—èŠå¤©å®¤(_F)" - -#~ msgid "_Next Tab" -#~ msgstr "ä¸‹ä¸€æ ‡ç¾(_N)" - -#~ msgid "_Previous Tab" -#~ msgstr "ä¸Šä¸€æ ‡ç¾(_P)" - -#~ msgid "_Tabs" -#~ msgstr "æ ‡ç¾(_T)" - #~ msgid "Edit Favorite Room" #~ msgstr "编辑èŠå¤©å®¤æ”¶è—" diff --git a/python/pyempathy/pyempathy.defs b/python/pyempathy/pyempathy.defs index 488f5b3ac..3a8b3a9f6 100644 --- a/python/pyempathy/pyempathy.defs +++ b/python/pyempathy/pyempathy.defs @@ -1,5 +1,12 @@ ;; -*- scheme -*- ; object definitions ... +(define-object Account + (in-module "Empathy") + (parent "GObject") + (c-name "EmpathyAccount") + (gtype-id "EMPATHY_TYPE_ACCOUNT") +) + (define-object AccountManager (in-module "Empathy") (parent "GObject") @@ -7,6 +14,13 @@ (gtype-id "EMPATHY_TYPE_ACCOUNT_MANAGER") ) +(define-object AccountSettings + (in-module "Empathy") + (parent "GObject") + (c-name "EmpathyAccountSettings") + (gtype-id "EMPATHY_TYPE_ACCOUNT_SETTINGS") +) + (define-object CallFactory (in-module "Empathy") (parent "GObject") @@ -35,6 +49,20 @@ (gtype-id "EMPATHY_TYPE_CHATROOM_MANAGER") ) +(define-object ConnectionManagers + (in-module "Empathy") + (parent "GObject") + (c-name "EmpathyConnectionManagers") + (gtype-id "EMPATHY_TYPE_CONNECTION_MANAGERS") +) + +(define-object Connectivity + (in-module "Empathy") + (parent "GObject") + (c-name "EmpathyConnectivity") + (gtype-id "EMPATHY_TYPE_CONNECTIVITY") +) + (define-object Contact (in-module "Empathy") (parent "GObject") @@ -63,6 +91,13 @@ (gtype-id "EMPATHY_TYPE_CONTACT_MONITOR") ) +(define-object Debugger + (in-module "Empathy") + (parent "GObject") + (c-name "EmpathyDebugger") + (gtype-id "EMPATHY_TYPE_DEBUGGER") +) + (define-object DispatchOperation (in-module "Empathy") (parent "GObject") @@ -234,6 +269,7 @@ '("other" "EMPATHY_DEBUG_OTHER") '("share-desktop" "EMPATHY_DEBUG_SHARE_DESKTOP") '("connectivity" "EMPATHY_DEBUG_CONNECTIVITY") + '("import-mc4-accounts" "EMPATHY_DEBUG_IMPORT_MC4_ACCOUNTS") ) ) @@ -279,6 +315,475 @@ ) +;; From empathy-account-settings.h + +(define-function account_settings_get_type + (c-name "empathy_account_settings_get_type") + (return-type "GType") +) + +(define-function account_settings_new + (c-name "empathy_account_settings_new") + (is-constructor-of "EmpathyAccountSettings") + (return-type "EmpathyAccountSettings*") + (parameters + '("const-gchar*" "connection_manager") + '("const-gchar*" "protocol") + '("const-char*" "display_name") + ) +) + +(define-method settings_new_for_account + (of-object "EmpathyAccount") + (c-name "empathy_account_settings_new_for_account") + (return-type "EmpathyAccountSettings*") +) + +(define-method is_ready + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_is_ready") + (return-type "gboolean") +) + +(define-method get_cm + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_get_cm") + (return-type "const-gchar*") +) + +(define-method get_protocol + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_get_protocol") + (return-type "const-gchar*") +) + +(define-method get_account + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_get_account") + (return-type "EmpathyAccount*") +) + +(define-method has_account + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_has_account") + (return-type "gboolean") + (parameters + '("EmpathyAccount*" "account") + ) +) + +(define-method get_tp_params + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_get_tp_params") + (return-type "TpConnectionManagerParam*") +) + +(define-method unset + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_unset") + (return-type "none") + (parameters + '("const-gchar*" "param") + ) +) + +(define-method discard_changes + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_discard_changes") + (return-type "none") +) + +(define-method get + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_get") + (return-type "const-GValue*") + (parameters + '("const-gchar*" "param") + ) +) + +(define-method get_dbus_signature + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_get_dbus_signature") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "param") + ) +) + +(define-method get_default + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_get_default") + (return-type "const-GValue*") + (parameters + '("const-gchar*" "param") + ) +) + +(define-method get_string + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_get_string") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "param") + ) +) + +(define-method get_int32 + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_get_int32") + (return-type "gint32") + (parameters + '("const-gchar*" "param") + ) +) + +(define-method get_int64 + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_get_int64") + (return-type "gint64") + (parameters + '("const-gchar*" "param") + ) +) + +(define-method get_uint32 + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_get_uint32") + (return-type "guint32") + (parameters + '("const-gchar*" "param") + ) +) + +(define-method get_uint64 + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_get_uint64") + (return-type "guint64") + (parameters + '("const-gchar*" "param") + ) +) + +(define-method get_boolean + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_get_boolean") + (return-type "gboolean") + (parameters + '("const-gchar*" "param") + ) +) + +(define-method set_string + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_set_string") + (return-type "none") + (parameters + '("const-gchar*" "param") + '("const-gchar*" "value") + ) +) + +(define-method set_int32 + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_set_int32") + (return-type "none") + (parameters + '("const-gchar*" "param") + '("gint32" "value") + ) +) + +(define-method set_int64 + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_set_int64") + (return-type "none") + (parameters + '("const-gchar*" "param") + '("gint64" "value") + ) +) + +(define-method set_uint32 + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_set_uint32") + (return-type "none") + (parameters + '("const-gchar*" "param") + '("guint32" "value") + ) +) + +(define-method set_uint64 + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_set_uint64") + (return-type "none") + (parameters + '("const-gchar*" "param") + '("guint64" "value") + ) +) + +(define-method set_boolean + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_set_boolean") + (return-type "none") + (parameters + '("const-gchar*" "param") + '("gboolean" "value") + ) +) + +(define-method get_icon_name + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_get_icon_name") + (return-type "gchar*") +) + +(define-method get_display_name + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_get_display_name") + (return-type "const-gchar*") +) + +(define-method set_display_name_async + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_set_display_name_async") + (return-type "none") + (parameters + '("const-gchar*" "name") + '("GAsyncReadyCallback" "callback") + '("gpointer" "user_data") + ) +) + +(define-method set_display_name_finish + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_set_display_name_finish") + (return-type "gboolean") + (parameters + '("GAsyncResult*" "result") + '("GError**" "error") + ) +) + +(define-method apply_async + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_apply_async") + (return-type "none") + (parameters + '("GAsyncReadyCallback" "callback") + '("gpointer" "user_data") + ) +) + +(define-method apply_finish + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_apply_finish") + (return-type "gboolean") + (parameters + '("GAsyncResult*" "result") + '("GError**" "error") + ) +) + +(define-method is_valid + (of-object "EmpathyAccountSettings") + (c-name "empathy_account_settings_is_valid") + (return-type "gboolean") +) + + + +;; From empathy-account.h + +(define-function account_get_type + (c-name "empathy_account_get_type") + (return-type "GType") +) + +(define-method is_just_connected + (of-object "EmpathyAccount") + (c-name "empathy_account_is_just_connected") + (return-type "gboolean") +) + +(define-method get_connection + (of-object "EmpathyAccount") + (c-name "empathy_account_get_connection") + (return-type "TpConnection*") +) + +(define-method get_connection_for_path + (of-object "EmpathyAccount") + (c-name "empathy_account_get_connection_for_path") + (return-type "TpConnection*") + (parameters + '("const-gchar*" "path") + ) +) + +(define-method get_unique_name + (of-object "EmpathyAccount") + (c-name "empathy_account_get_unique_name") + (return-type "const-gchar*") +) + +(define-method get_display_name + (of-object "EmpathyAccount") + (c-name "empathy_account_get_display_name") + (return-type "const-gchar*") +) + +(define-method get_connection_manager + (of-object "EmpathyAccount") + (c-name "empathy_account_get_connection_manager") + (return-type "const-gchar*") +) + +(define-method get_protocol + (of-object "EmpathyAccount") + (c-name "empathy_account_get_protocol") + (return-type "const-gchar*") +) + +(define-method get_icon_name + (of-object "EmpathyAccount") + (c-name "empathy_account_get_icon_name") + (return-type "const-gchar*") +) + +(define-method set_enabled_async + (of-object "EmpathyAccount") + (c-name "empathy_account_set_enabled_async") + (return-type "none") + (parameters + '("gboolean" "enabled") + '("GAsyncReadyCallback" "callback") + '("gpointer" "user_data") + ) +) + +(define-method set_enabled_finish + (of-object "EmpathyAccount") + (c-name "empathy_account_set_enabled_finish") + (return-type "gboolean") + (parameters + '("GAsyncResult*" "result") + '("GError**" "error") + ) +) + +(define-method is_enabled + (of-object "EmpathyAccount") + (c-name "empathy_account_is_enabled") + (return-type "gboolean") +) + +(define-method is_valid + (of-object "EmpathyAccount") + (c-name "empathy_account_is_valid") + (return-type "gboolean") +) + +(define-method is_ready + (of-object "EmpathyAccount") + (c-name "empathy_account_is_ready") + (return-type "gboolean") +) + +(define-method update_settings_async + (of-object "EmpathyAccount") + (c-name "empathy_account_update_settings_async") + (return-type "none") + (parameters + '("GHashTable*" "parameters") + '("const-gchar**" "unset_parameters") + '("GAsyncReadyCallback" "callback") + '("gpointer" "user_data") + ) +) + +(define-method update_settings_finish + (of-object "EmpathyAccount") + (c-name "empathy_account_update_settings_finish") + (return-type "gboolean") + (parameters + '("GAsyncResult*" "result") + '("GError**" "error") + ) +) + +(define-method remove_async + (of-object "EmpathyAccount") + (c-name "empathy_account_remove_async") + (return-type "none") + (parameters + '("GAsyncReadyCallback" "callback") + '("gpointer" "user_data") + ) +) + +(define-method remove_finish + (of-object "EmpathyAccount") + (c-name "empathy_account_remove_finish") + (return-type "gboolean") + (parameters + '("GAsyncResult*" "result") + '("GError**" "error") + ) +) + +(define-method set_display_name_async + (of-object "EmpathyAccount") + (c-name "empathy_account_set_display_name_async") + (return-type "none") + (parameters + '("const-gchar*" "display_name") + '("GAsyncReadyCallback" "callback") + '("gpointer" "user_data") + ) +) + +(define-method set_display_name_finish + (of-object "EmpathyAccount") + (c-name "empathy_account_set_display_name_finish") + (return-type "gboolean") + (parameters + '("GAsyncResult*" "result") + '("GError**" "error") + ) +) + +(define-function account_new + (c-name "empathy_account_new") + (is-constructor-of "EmpathyAccount") + (return-type "EmpathyAccount*") + (parameters + '("TpDBusDaemon*" "bus_daemon") + '("const-gchar*" "unique_name") + ) +) + +(define-method request_presence + (of-object "EmpathyAccount") + (c-name "empathy_account_request_presence") + (return-type "none") + (parameters + '("TpConnectionPresenceType" "type") + '("const-gchar*" "status") + '("const-gchar*" "message") + ) +) + +(define-method get_parameters + (of-object "EmpathyAccount") + (c-name "empathy_account_get_parameters") + (return-type "const-GHashTable*") +) + + + ;; From empathy-account-manager.h (define-function account_manager_get_type @@ -291,13 +796,10 @@ (return-type "EmpathyAccountManager*") ) -(define-method create +(define-method is_ready (of-object "EmpathyAccountManager") - (c-name "empathy_account_manager_create") - (return-type "EmpathyAccount*") - (parameters - '("McProfile*" "profile") - ) + (c-name "empathy_account_manager_is_ready") + (return-type "gboolean") ) (define-method get_connected_accounts @@ -318,18 +820,27 @@ (return-type "int") ) -(define-method get_account +(define-method get_account_for_connection (of-object "EmpathyAccountManager") - (c-name "empathy_account_manager_get_account") + (c-name "empathy_account_manager_get_account_for_connection") (return-type "EmpathyAccount*") (parameters '("TpConnection*" "connection") ) ) -(define-method lookup +(define-method ensure_account (of-object "EmpathyAccountManager") - (c-name "empathy_account_manager_lookup") + (c-name "empathy_account_manager_ensure_account") + (return-type "EmpathyAccount*") + (parameters + '("const-gchar*" "unique_name") + ) +) + +(define-method get_account + (of-object "EmpathyAccountManager") + (c-name "empathy_account_manager_get_account") (return-type "EmpathyAccount*") (parameters '("const-gchar*" "unique_name") @@ -357,6 +868,62 @@ ) ) +(define-method request_global_presence + (of-object "EmpathyAccountManager") + (c-name "empathy_account_manager_request_global_presence") + (return-type "none") + (parameters + '("TpConnectionPresenceType" "type") + '("const-gchar*" "status") + '("const-gchar*" "message") + ) +) + +(define-method get_requested_global_presence + (of-object "EmpathyAccountManager") + (c-name "empathy_account_manager_get_requested_global_presence") + (return-type "TpConnectionPresenceType") + (parameters + '("gchar**" "status") + '("gchar**" "message") + ) +) + +(define-method get_global_presence + (of-object "EmpathyAccountManager") + (c-name "empathy_account_manager_get_global_presence") + (return-type "TpConnectionPresenceType") + (parameters + '("gchar**" "status") + '("gchar**" "message") + ) +) + +(define-method create_account_async + (of-object "EmpathyAccountManager") + (c-name "empathy_account_manager_create_account_async") + (return-type "none") + (parameters + '("const-gchar*" "connection_manager") + '("const-gchar*" "protocol") + '("const-gchar*" "display_name") + '("GHashTable*" "parameters") + '("GHashTable*" "properties") + '("GAsyncReadyCallback" "callback") + '("gpointer" "user_data") + ) +) + +(define-method create_account_finish + (of-object "EmpathyAccountManager") + (c-name "empathy_account_manager_create_account_finish") + (return-type "EmpathyAccount*") + (parameters + '("GAsyncResult*" "result") + '("GError**" "error") + ) +) + ;; From empathy-chatroom.h @@ -730,6 +1297,41 @@ +;; From empathy-connectivity.h + +(define-function connectivity_get_type + (c-name "empathy_connectivity_get_type") + (return-type "GType") +) + +(define-function connectivity_dup_singleton + (c-name "empathy_connectivity_dup_singleton") + (return-type "EmpathyConnectivity*") +) + +(define-method is_online + (of-object "EmpathyConnectivity") + (c-name "empathy_connectivity_is_online") + (return-type "gboolean") +) + +(define-method get_use_conn + (of-object "EmpathyConnectivity") + (c-name "empathy_connectivity_get_use_conn") + (return-type "gboolean") +) + +(define-method set_use_conn + (of-object "EmpathyConnectivity") + (c-name "empathy_connectivity_set_use_conn") + (return-type "none") + (parameters + '("gboolean" "use_conn") + ) +) + + + ;; From empathy-contact.h (define-function contact_get_type @@ -1228,6 +1830,53 @@ +;; From empathy-connection-managers.h + +(define-function connection_managers_get_type + (c-name "empathy_connection_managers_get_type") + (return-type "GType") +) + +(define-function connection_managers_dup_singleton + (c-name "empathy_connection_managers_dup_singleton") + (return-type "EmpathyConnectionManagers*") +) + +(define-method is_ready + (of-object "EmpathyConnectionManagers") + (c-name "empathy_connection_managers_is_ready") + (return-type "gboolean") +) + +(define-method update + (of-object "EmpathyConnectionManagers") + (c-name "empathy_connection_managers_update") + (return-type "none") +) + +(define-method get_cms + (of-object "EmpathyConnectionManagers") + (c-name "empathy_connection_managers_get_cms") + (return-type "GList*") +) + +(define-method get_cms_num + (of-object "EmpathyConnectionManagers") + (c-name "empathy_connection_managers_get_cms_num") + (return-type "guint") +) + +(define-method get_cm + (of-object "EmpathyConnectionManagers") + (c-name "empathy_connection_managers_get_cm") + (return-type "TpConnectionManager*") + (parameters + '("const-gchar*" "cm") + ) +) + + + ;; From empathy-debug.h (define-function debug_flag_is_set @@ -1263,6 +1912,32 @@ +;; From empathy-debugger.h + +(define-function debugger_get_type + (c-name "empathy_debugger_get_type") + (return-type "GType") +) + +(define-function debugger_get_singleton + (c-name "empathy_debugger_get_singleton") + (return-type "EmpathyDebugger*") +) + +(define-method add_message + (of-object "EmpathyDebugger") + (c-name "empathy_debugger_add_message") + (return-type "none") + (parameters + '("GTimeVal*" "timestamp") + '("const-gchar*" "domain") + '("GLogLevelFlags" "level") + '("const-gchar*" "string") + ) +) + + + ;; From empathy-dispatcher.h (define-function dispatcher_get_type @@ -1824,6 +2499,10 @@ +;; From empathy-location.h + + + ;; From empathy-log-manager.h (define-function log_manager_get_type @@ -2893,28 +3572,6 @@ ) ) -(define-function account_hash - (c-name "empathy_account_hash") - (return-type "guint") - (parameters - '("gconstpointer" "key") - ) -) - -(define-function account_equal - (c-name "empathy_account_equal") - (return-type "gboolean") - (parameters - '("gconstpointer" "a") - '("gconstpointer" "b") - ) -) - -(define-function mission_control_dup_singleton - (c-name "empathy_mission_control_dup_singleton") - (return-type "MissionControl*") -) - (define-function presence_get_default_message (c-name "empathy_presence_get_default_message") (return-type "const-gchar*") @@ -2979,4 +3636,25 @@ ) ) +(define-function protocol_icon_name + (c-name "empathy_protocol_icon_name") + (return-type "gchar*") + (parameters + '("const-gchar*" "protocol") + ) +) + +(define-function protocol_name_to_display_name + (c-name "empathy_protocol_name_to_display_name") + (return-type "const-gchar*") + (parameters + '("const-gchar*" "proto_name") + ) +) + +(define-function type_dbus_ao + (c-name "empathy_type_dbus_ao") + (return-type "GType") +) + diff --git a/python/pyempathy/pyempathy.override b/python/pyempathy/pyempathy.override index 6f46405a3..a96c7c6f3 100644 --- a/python/pyempathy/pyempathy.override +++ b/python/pyempathy/pyempathy.override @@ -3,15 +3,19 @@ headers #include <Python.h> #include <pygobject.h> #include "empathy-account-manager.h" +#include "empathy-account-settings.h" #include "empathy-call-factory.h" #include "empathy-chatroom.h" #include "empathy-chatroom-manager.h" +#include "empathy-connection-managers.h" +#include "empathy-connectivity.h" #include "empathy-contact.h" #include "empathy-contact-groups.h" #include "empathy-contact-list.h" #include "empathy-contact-manager.h" #include "empathy-contact-monitor.h" #include "empathy-debug.h" +#include "empathy-debugger.h" #include "empathy-dispatcher.h" #include "empathy-enum-types.h" #include "empathy-ft-factory.h" diff --git a/python/pyempathygtk/pyempathygtk.defs b/python/pyempathygtk/pyempathygtk.defs index d4601b211..d931fcc4d 100644 --- a/python/pyempathygtk/pyempathygtk.defs +++ b/python/pyempathygtk/pyempathygtk.defs @@ -7,6 +7,13 @@ (gtype-id "EMPATHY_TYPE_ACCOUNT_CHOOSER") ) +(define-object AccountWidget + (in-module "Empathy") + (parent "GObject") + (c-name "EmpathyAccountWidget") + (gtype-id "EMPATHY_TYPE_ACCOUNT_WIDGET") +) + (define-object AvatarChooser (in-module "Empathy") (parent "GtkButton") @@ -111,6 +118,13 @@ (gtype-id "EMPATHY_TYPE_GST_VIDEO_SRC") ) +(define-object KludgeLabel + (in-module "Empathy") + (parent "GtkLabel") + (c-name "EmpathyKludgeLabel") + (gtype-id "EMPATHY_TYPE_KLUDGE_LABEL") +) + (define-object PresenceChooser (in-module "Empathy") (parent "GtkComboBoxEntry") @@ -118,11 +132,11 @@ (gtype-id "EMPATHY_TYPE_PRESENCE_CHOOSER") ) -(define-object ProfileChooser +(define-object ProtocolChooser (in-module "Empathy") (parent "GtkComboBox") - (c-name "EmpathyProfileChooser") - (gtype-id "EMPATHY_TYPE_PROFILE_CHOOSER") + (c-name "EmpathyProtocolChooser") + (gtype-id "EMPATHY_TYPE_PROTOCOL_CHOOSER") ) (define-object SmileyManager @@ -132,6 +146,13 @@ (gtype-id "EMPATHY_TYPE_SMILEY_MANAGER") ) +(define-object StatusPresetDialog + (in-module "Empathy") + (parent "GtkDialog") + (c-name "EmpathyStatusPresetDialog") + (gtype-id "EMPATHY_TYPE_STATUS_PRESET_DIALOG") +) + (define-object ThemeBoxes (in-module "Empathy") (parent "EmpathyChatTextView") @@ -255,6 +276,25 @@ ) ) +(define-enum Sound + (in-module "Empathy") + (c-name "EmpathySound") + (gtype-id "EMPATHY_TYPE_SOUND") + (values + '("empathy-sound-message-incoming" "EMPATHY_SOUND_MESSAGE_INCOMING") + '("empathy-sound-message-outgoing" "EMPATHY_SOUND_MESSAGE_OUTGOING") + '("empathy-sound-conversation-new" "EMPATHY_SOUND_CONVERSATION_NEW") + '("empathy-sound-contact-connected" "EMPATHY_SOUND_CONTACT_CONNECTED") + '("empathy-sound-contact-disconnected" "EMPATHY_SOUND_CONTACT_DISCONNECTED") + '("empathy-sound-account-connected" "EMPATHY_SOUND_ACCOUNT_CONNECTED") + '("empathy-sound-account-disconnected" "EMPATHY_SOUND_ACCOUNT_DISCONNECTED") + '("empathy-sound-phone-incoming" "EMPATHY_SOUND_PHONE_INCOMING") + '("empathy-sound-phone-outgoing" "EMPATHY_SOUND_PHONE_OUTGOING") + '("empathy-sound-phone-hangup" "EMPATHY_SOUND_PHONE_HANGUP") + '("last-empathy-sound" "LAST_EMPATHY_SOUND") + ) +) + ;; From empathy-account-chooser.h @@ -328,103 +368,53 @@ ;; From empathy-account-widget.h -(define-method widget_handle_params - (of-object "EmpathyAccount") - (c-name "empathy_account_widget_handle_params") - (return-type "none") - (parameters - '("GtkBuilder*" "gui") - '("const-gchar*" "first_widget") - ) - (varargs #t) +(define-function account_widget_get_type + (c-name "empathy_account_widget_get_type") + (return-type "GType") ) -(define-method widget_add_forget_button - (of-object "EmpathyAccount") - (c-name "empathy_account_widget_add_forget_button") - (return-type "none") - (parameters - '("GtkBuilder*" "gui") - '("const-gchar*" "button") - '("const-gchar*" "entry") - ) +(define-method get_widget + (of-object "EmpathyAccountWidget") + (c-name "empathy_account_widget_get_widget") + (return-type "GtkWidget*") ) -(define-function account_widget_set_default_focus - (c-name "empathy_account_widget_set_default_focus") - (return-type "none") +(define-function account_widget_new_for_protocol + (c-name "empathy_account_widget_new_for_protocol") + (return-type "EmpathyAccountWidget*") (parameters - '("GtkBuilder*" "gui") - '("const-gchar*" "entry") + '("const-char*" "protocol") + '("EmpathyAccountSettings*" "settings") + '("gboolean" "simple") ) ) -(define-method widget_generic_new - (of-object "EmpathyAccount") - (c-name "empathy_account_widget_generic_new") - (return-type "GtkWidget*") -) - -(define-method widget_salut_new - (of-object "EmpathyAccount") - (c-name "empathy_account_widget_salut_new") - (return-type "GtkWidget*") -) - -(define-method widget_msn_new - (of-object "EmpathyAccount") - (c-name "empathy_account_widget_msn_new") - (return-type "GtkWidget*") -) - -(define-method widget_jabber_new - (of-object "EmpathyAccount") - (c-name "empathy_account_widget_jabber_new") - (return-type "GtkWidget*") -) - -(define-method widget_icq_new - (of-object "EmpathyAccount") - (c-name "empathy_account_widget_icq_new") - (return-type "GtkWidget*") -) - -(define-method widget_aim_new - (of-object "EmpathyAccount") - (c-name "empathy_account_widget_aim_new") - (return-type "GtkWidget*") -) - -(define-method widget_yahoo_new - (of-object "EmpathyAccount") - (c-name "empathy_account_widget_yahoo_new") - (return-type "GtkWidget*") -) - -(define-method widget_groupwise_new - (of-object "EmpathyAccount") - (c-name "empathy_account_widget_groupwise_new") - (return-type "GtkWidget*") -) - ;; From empathy-account-widget-irc.h -(define-method widget_irc_new - (of-object "EmpathyAccount") - (c-name "empathy_account_widget_irc_new") - (return-type "GtkWidget*") +(define-method irc_build + (of-object "EmpathyAccountWidget") + (c-name "empathy_account_widget_irc_build") + (return-type "none") + (parameters + '("const-char*" "filename") + '("GtkWidget**" "table_common_settings") + ) ) ;; From empathy-account-widget-sip.h -(define-method widget_sip_new - (of-object "EmpathyAccount") - (c-name "empathy_account_widget_sip_new") - (return-type "GtkWidget*") +(define-method sip_build + (of-object "EmpathyAccountWidget") + (c-name "empathy_account_widget_sip_build") + (return-type "none") + (parameters + '("const-char*" "filename") + '("GtkWidget**" "table_common_settings") + ) ) @@ -1238,6 +1228,18 @@ +;; From empathy-share-my-desktop.h + +(define-function share_my_desktop_share_with_contact + (c-name "empathy_share_my_desktop_share_with_contact") + (return-type "none") + (parameters + '("EmpathyContact*" "contact") + ) +) + + + ;; From empathy-contact-selector.h (define-function contact_selector_get_type @@ -1550,29 +1552,36 @@ -;; From empathy-profile-chooser.h +;; From empathy-protocol-chooser.h -(define-function profile_chooser_get_type - (c-name "empathy_profile_chooser_get_type") +(define-function protocol_chooser_get_type + (c-name "empathy_protocol_chooser_get_type") (return-type "GType") ) -(define-function profile_chooser_new - (c-name "empathy_profile_chooser_new") - (is-constructor-of "EmpathyProfileChooser") +(define-function protocol_chooser_new + (c-name "empathy_protocol_chooser_new") + (is-constructor-of "EmpathyProtocolChooser") (return-type "GtkWidget*") ) (define-method dup_selected - (of-object "EmpathyProfileChooser") - (c-name "empathy_profile_chooser_dup_selected") - (return-type "McProfile*") + (of-object "EmpathyProtocolChooser") + (c-name "empathy_protocol_chooser_dup_selected") + (return-type "TpConnectionManager*") + (parameters + '("TpConnectionManagerProtocol**" "protocol") + ) ) -(define-method n_profiles - (of-object "EmpathyProfileChooser") - (c-name "empathy_profile_chooser_n_profiles") - (return-type "gint") +(define-method set_visible + (of-object "EmpathyProtocolChooser") + (c-name "empathy_protocol_chooser_set_visible") + (return-type "none") + (parameters + '("EmpathyProtocolChooserFilterFunc" "func") + '("gpointer" "user_data") + ) ) @@ -1640,6 +1649,46 @@ +;; From empathy-sound.h + +(define-function sound_play + (c-name "empathy_sound_play") + (return-type "gboolean") + (parameters + '("GtkWidget*" "widget") + '("EmpathySound" "sound_id") + ) +) + +(define-method stop + (of-object "EmpathySound") + (c-name "empathy_sound_stop") + (return-type "none") +) + +(define-function sound_start_playing + (c-name "empathy_sound_start_playing") + (return-type "gboolean") + (parameters + '("GtkWidget*" "widget") + '("EmpathySound" "sound_id") + '("guint" "timeout_before_replay") + ) +) + +(define-function sound_play_full + (c-name "empathy_sound_play_full") + (return-type "gboolean") + (parameters + '("GtkWidget*" "widget") + '("EmpathySound" "sound_id") + '("ca_finish_callback_t" "callback") + '("gpointer" "user_data") + ) +) + + + ;; From empathy-spell.h (define-function spell_supported @@ -1694,6 +1743,24 @@ +;; From empathy-status-preset-dialog.h + +(define-function status_preset_dialog_get_type + (c-name "empathy_status_preset_dialog_get_type") + (return-type "GType") +) + +(define-function status_preset_dialog_new + (c-name "empathy_status_preset_dialog_new") + (is-constructor-of "EmpathyStatusPresetDialog") + (return-type "GtkWidget*") + (parameters + '("GtkWindow*" "parent") + ) +) + + + ;; From empathy-theme-boxes.h (define-function theme_boxes_get_type @@ -1754,6 +1821,24 @@ +;; From empathy-kludge-label.h + +(define-function kludge_label_get_type + (c-name "empathy_kludge_label_get_type") + (return-type "GType") +) + +(define-function kludge_label_new + (c-name "empathy_kludge_label_new") + (is-constructor-of "EmpathyKludgeLabel") + (return-type "GtkWidget*") + (parameters + '("const-char*" "str") + ) +) + + + ;; From empathy-ui-utils.h (define-function gtk_init @@ -1796,14 +1881,6 @@ ) ) -(define-function icon_name_from_account - (c-name "empathy_icon_name_from_account") - (return-type "const-gchar*") - (parameters - '("EmpathyAccount*" "account") - ) -) - (define-function icon_name_for_presence (c-name "empathy_icon_name_for_presence") (return-type "const-gchar*") diff --git a/python/pyempathygtk/pyempathygtk.override b/python/pyempathygtk/pyempathygtk.override index 3229cbac2..378fe3684 100644 --- a/python/pyempathygtk/pyempathygtk.override +++ b/python/pyempathygtk/pyempathygtk.override @@ -2,6 +2,7 @@ headers #include <Python.h> #include <pygobject.h> +#include <libempathy/empathy-enum-types.h> #include "empathy-account-chooser.h" #include "empathy-account-widget.h" #include "empathy-account-widget-irc.h" @@ -24,12 +25,14 @@ headers #include "empathy-gtk-enum-types.h" #include "empathy-images.h" #include "empathy-irc-network-dialog.h" +#include "empathy-kludge-label.h" #include "empathy-log-window.h" #include "empathy-new-message-dialog.h" #include "empathy-presence-chooser.h" -#include "empathy-profile-chooser.h" +#include "empathy-protocol-chooser.h" #include "empathy-smiley-manager.h" #include "empathy-spell.h" +#include "empathy-status-preset-dialog.h" #include "empathy-theme-boxes.h" #include "empathy-theme-irc.h" #include "empathy-theme-manager.h" @@ -61,6 +64,8 @@ import gtk.Bin as PyGtkBin_Type import gtk.DrawingArea as PyGtkDrawingArea_Type import gtk.ComboBoxEntry as PyGtkComboBoxEntry_Type import gtk.Builder as PyGtkBuilder_Type +import gtk.Label as PyGtkLabel_Type +import gtk.Dialog as PyGtkDialog_Type import gst.Bin as PyGstBin_Type import empathy.Contact as PyEmpathyContact_Type import empathy.ContactList as PyEmpathyContactList_Type @@ -68,6 +73,8 @@ import empathy.TpChat as PyEmpathyTpChat_Type import empathy.Message as PyEmpathyMessage_Type import empathy.TpCall as PyEmpathyTpCall_Type import empathy.FTHandler as PyEmpathyFTHandler_Type +import empathy.Account as PyEmpathyAccount_Type +import empathy.AccountSettings as PyEmpathyAccountSettings_Type %% ignore-glob *_get_type diff --git a/python/update-binding.sh b/python/update-binding.sh index 854c33159..34b28200a 100755 --- a/python/update-binding.sh +++ b/python/update-binding.sh @@ -5,17 +5,22 @@ cd ../libempathy python /usr/share/pygobject/2.0/codegen/h2def.py \ -m empathy \ + empathy-account-settings.h \ + empathy-account.h \ empathy-account-manager.h \ empathy-chatroom.h \ empathy-chatroom-manager.h \ empathy-call-factory.h \ empathy-call-handler.h \ + empathy-connectivity.h \ empathy-contact.h \ empathy-contact-groups.h \ empathy-contact-list.h \ empathy-contact-manager.h \ empathy-contact-monitor.h \ + empathy-connection-managers.h \ empathy-debug.h \ + empathy-debugger.h \ empathy-dispatcher.h \ empathy-dispatch-operation.h \ empathy-ft-factory.h \ @@ -24,6 +29,7 @@ python /usr/share/pygobject/2.0/codegen/h2def.py \ empathy-irc-network.h \ empathy-irc-network-manager.h \ empathy-irc-server.h \ + empathy-location.h \ empathy-log-manager.h \ empathy-log-store.h \ empathy-log-store-empathy.h \ @@ -62,6 +68,7 @@ python /usr/share/pygobject/2.0/codegen/h2def.py \ empathy-contact-list-store.h \ empathy-contact-list-view.h \ empathy-contact-menu.h \ + empathy-share-my-desktop.h \ empathy-contact-selector.h \ empathy-contact-widget.h \ empathy-geometry.h \ @@ -74,12 +81,15 @@ python /usr/share/pygobject/2.0/codegen/h2def.py \ empathy-log-window.h \ empathy-new-message-dialog.h \ empathy-presence-chooser.h \ - empathy-profile-chooser.h \ + empathy-protocol-chooser.h \ empathy-smiley-manager.h \ + empathy-sound.h \ empathy-spell.h \ + empathy-status-preset-dialog.h \ empathy-theme-boxes.h \ empathy-theme-irc.h \ empathy-theme-manager.h \ + empathy-kludge-label.h \ empathy-ui-utils.h \ > ../python/pyempathygtk/pyempathygtk.defs diff --git a/src/Makefile.am b/src/Makefile.am index 9faea8630..980f0029e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -31,6 +31,7 @@ BUILT_SOURCES= \ empathy_handwritten_source = \ empathy.c \ empathy-about-dialog.c empathy-about-dialog.h \ + empathy-account-assistant.c empathy-account-assistant.h \ empathy-accounts-dialog.c empathy-accounts-dialog.h \ empathy-call-window.c empathy-call-window.h \ empathy-call-window-fullscreen.c empathy-call-window-fullscreen.h \ @@ -38,9 +39,12 @@ empathy_handwritten_source = \ empathy-debug-window.c empathy-debug-window.h \ empathy-chat-window.c empathy-chat-window.h \ empathy-event-manager.c empathy-event-manager.h \ + empathy-import-mc4-accounts.c empathy-import-mc4-accounts.h \ empathy-ft-manager.c empathy-ft-manager.h \ empathy-import-dialog.c empathy-import-dialog.h \ + empathy-import-widget.c empathy-import-widget.h \ empathy-import-pidgin.c empathy-import-pidgin.h \ + empathy-import-utils.c empathy-import-utils.h \ empathy-main-window.c empathy-main-window.h \ empathy-misc.c empathy-misc.h \ empathy-new-chatroom-dialog.c empathy-new-chatroom-dialog.h \ @@ -51,7 +55,6 @@ empathy_handwritten_source = \ empathy_SOURCES = \ $(empathy_handwritten_source) \ - bacon-message-connection.c bacon-message-connection.h \ ephy-spinner.c ephy-spinner.h nodist_empathy_SOURCES = $(BUILT_SOURCES) diff --git a/src/bacon-message-connection.c b/src/bacon-message-connection.c deleted file mode 100644 index c9fda4aeb..000000000 --- a/src/bacon-message-connection.c +++ /dev/null @@ -1,412 +0,0 @@ -/* - * Copyright (C) 2003 Bastien Nocera <hadess@hadess.net> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Totem project hereby grant permission for non-gpl compatible GStreamer - * plugins to be used and distributed together with GStreamer and Totem. This - * permission are above and beyond the permissions granted by the GPL license - * Totem is covered by. - * - * Monday 7th February 2005: Christian Schaller: Add excemption clause. - * See license_change file for details. - * - */ - -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <sys/un.h> -#include <errno.h> - -#include "bacon-message-connection.h" - -#ifndef UNIX_PATH_MAX -#define UNIX_PATH_MAX 108 -#endif - -struct BaconMessageConnection { - /* A server accepts connections */ - gboolean is_server; - - /* The socket path itself */ - char *path; - - /* File descriptor of the socket */ - int fd; - /* Channel to watch */ - GIOChannel *chan; - /* Event id returned by g_io_add_watch() */ - int conn_id; - - /* Connections accepted by this connection */ - GSList *accepted_connections; - - /* callback */ - void (*func) (const char *message, gpointer user_data); - gpointer data; -}; - -static gboolean -test_is_socket (const char *path) -{ - struct stat s; - - if (stat (path, &s) == -1) - return FALSE; - - if (S_ISSOCK (s.st_mode)) - return TRUE; - - return FALSE; -} - -static gboolean -is_owned_by_user_and_socket (const char *path) -{ - struct stat s; - - if (stat (path, &s) == -1) - return FALSE; - - if (s.st_uid != geteuid ()) - return FALSE; - - if ((s.st_mode & S_IFSOCK) != S_IFSOCK) - return FALSE; - - return TRUE; -} - -static gboolean server_cb (GIOChannel *source, - GIOCondition condition, gpointer data); - -static gboolean -setup_connection (BaconMessageConnection *conn) -{ - int fdflags; - - g_return_val_if_fail (conn->chan == NULL, FALSE); - - /* Add CLOEXEC flag on the fd to make sure the socket get closed - * if exec is called. */ - fdflags = fcntl (conn->fd, F_GETFD, 0); - if (fdflags >= 0) { - fdflags |= FD_CLOEXEC; - fcntl (conn->fd, F_SETFD, fdflags); - } - - conn->chan = g_io_channel_unix_new (conn->fd); - if (!conn->chan) { - return FALSE; - } - g_io_channel_set_line_term (conn->chan, "\n", 1); - conn->conn_id = g_io_add_watch (conn->chan, G_IO_IN, server_cb, conn); - - return TRUE; -} - -static void -accept_new_connection (BaconMessageConnection *server_conn) -{ - BaconMessageConnection *conn; - int alen; - - g_return_if_fail (server_conn->is_server); - - conn = g_new0 (BaconMessageConnection, 1); - conn->is_server = FALSE; - conn->func = server_conn->func; - conn->data = server_conn->data; - - conn->fd = accept (server_conn->fd, NULL, (guint *)&alen); - - server_conn->accepted_connections = - g_slist_prepend (server_conn->accepted_connections, conn); - - setup_connection (conn); -} - -static gboolean -server_cb (GIOChannel *source, GIOCondition condition, gpointer data) -{ - BaconMessageConnection *conn = (BaconMessageConnection *)data; - char *message, *subs, buf; - int cd, rc, offset; - gboolean finished; - - offset = 0; - if (conn->is_server && conn->fd == g_io_channel_unix_get_fd (source)) { - accept_new_connection (conn); - return TRUE; - } - message = g_malloc (1); - cd = conn->fd; - rc = read (cd, &buf, 1); - while (rc > 0 && buf != '\n') - { - message = g_realloc (message, rc + offset + 1); - message[offset] = buf; - offset = offset + rc; - rc = read (cd, &buf, 1); - } - if (rc <= 0) { - g_io_channel_shutdown (conn->chan, FALSE, NULL); - g_io_channel_unref (conn->chan); - conn->chan = NULL; - close (conn->fd); - conn->fd = -1; - g_free (message); - conn->conn_id = 0; - - return FALSE; - } - message[offset] = '\0'; - - subs = message; - finished = FALSE; - - while (finished == FALSE && *subs != '\0') - { - if (conn->func != NULL) - (*conn->func) (subs, conn->data); - - subs += strlen (subs) + 1; - if (subs - message >= offset) - finished = TRUE; - } - - g_free (message); - - return TRUE; -} - -static char * -find_file_with_pattern (const char *dir, const char *pattern) -{ - GDir *filedir; - char *found_filename; - const char *filename; - GPatternSpec *pat; - - filedir = g_dir_open (dir, 0, NULL); - if (filedir == NULL) - return NULL; - - pat = g_pattern_spec_new (pattern); - if (pat == NULL) - { - g_dir_close (filedir); - return NULL; - } - - found_filename = NULL; - - while ((filename = g_dir_read_name (filedir))) - { - if (g_pattern_match_string (pat, filename)) - { - char *tmp = g_build_filename (dir, filename, NULL); - if (is_owned_by_user_and_socket (tmp)) - found_filename = g_strdup (filename); - g_free (tmp); - } - - if (found_filename != NULL) - break; - } - - g_pattern_spec_free (pat); - g_dir_close (filedir); - - return found_filename; -} - -static char * -socket_filename (const char *prefix) -{ - char *pattern, *newfile, *path, *filename; - const char *tmpdir; - - pattern = g_strdup_printf ("%s.%s.*", prefix, g_get_user_name ()); - tmpdir = g_get_tmp_dir (); - filename = find_file_with_pattern (tmpdir, pattern); - if (filename == NULL) - { - newfile = g_strdup_printf ("%s.%s.%u", prefix, - g_get_user_name (), g_random_int ()); - path = g_build_filename (tmpdir, newfile, NULL); - g_free (newfile); - } else { - path = g_build_filename (tmpdir, filename, NULL); - g_free (filename); - } - - g_free (pattern); - return path; -} - -static gboolean -try_server (BaconMessageConnection *conn) -{ - struct sockaddr_un uaddr; - - uaddr.sun_family = AF_UNIX; - strncpy (uaddr.sun_path, conn->path, - MIN (strlen(conn->path)+1, UNIX_PATH_MAX)); - conn->fd = socket (PF_UNIX, SOCK_STREAM, 0); - if (bind (conn->fd, (struct sockaddr *) &uaddr, sizeof (uaddr)) == -1) - { - conn->fd = -1; - return FALSE; - } - listen (conn->fd, 5); - - return setup_connection (conn); -} - -static gboolean -try_client (BaconMessageConnection *conn) -{ - struct sockaddr_un uaddr; - - uaddr.sun_family = AF_UNIX; - strncpy (uaddr.sun_path, conn->path, - MIN(strlen(conn->path)+1, UNIX_PATH_MAX)); - conn->fd = socket (PF_UNIX, SOCK_STREAM, 0); - if (connect (conn->fd, (struct sockaddr *) &uaddr, - sizeof (uaddr)) == -1) - { - conn->fd = -1; - return FALSE; - } - - return setup_connection (conn); -} - -BaconMessageConnection * -bacon_message_connection_new (const char *prefix) -{ - BaconMessageConnection *conn; - - g_return_val_if_fail (prefix != NULL, NULL); - - conn = g_new0 (BaconMessageConnection, 1); - conn->path = socket_filename (prefix); - - if (test_is_socket (conn->path) == FALSE) - { - if (!try_server (conn)) - { - bacon_message_connection_free (conn); - return NULL; - } - - conn->is_server = TRUE; - return conn; - } - - if (try_client (conn) == FALSE) - { - unlink (conn->path); - try_server (conn); - if (conn->fd == -1) - { - bacon_message_connection_free (conn); - return NULL; - } - - conn->is_server = TRUE; - return conn; - } - - conn->is_server = FALSE; - return conn; -} - -void -bacon_message_connection_free (BaconMessageConnection *conn) -{ - GSList *child_conn; - - g_return_if_fail (conn != NULL); - /* Only servers can accept other connections */ - g_return_if_fail (conn->is_server != FALSE || - conn->accepted_connections == NULL); - - child_conn = conn->accepted_connections; - while (child_conn != NULL) { - bacon_message_connection_free (child_conn->data); - child_conn = g_slist_next (child_conn); - } - g_slist_free (conn->accepted_connections); - - if (conn->conn_id) { - g_source_remove (conn->conn_id); - conn->conn_id = 0; - } - if (conn->chan) { - g_io_channel_shutdown (conn->chan, FALSE, NULL); - g_io_channel_unref (conn->chan); - } - - if (conn->is_server != FALSE) { - unlink (conn->path); - } - if (conn->fd != -1) { - close (conn->fd); - } - - g_free (conn->path); - g_free (conn); -} - -void -bacon_message_connection_set_callback (BaconMessageConnection *conn, - BaconMessageReceivedFunc func, - gpointer user_data) -{ - g_return_if_fail (conn != NULL); - - conn->func = func; - conn->data = user_data; -} - -void -bacon_message_connection_send (BaconMessageConnection *conn, - const char *message) -{ - g_return_if_fail (conn != NULL); - g_return_if_fail (message != NULL); - - g_io_channel_write_chars (conn->chan, message, strlen (message), - NULL, NULL); - g_io_channel_write_chars (conn->chan, "\n", 1, NULL, NULL); - g_io_channel_flush (conn->chan, NULL); -} - -gboolean -bacon_message_connection_get_is_server (BaconMessageConnection *conn) -{ - g_return_val_if_fail (conn != NULL, FALSE); - - return conn->is_server; -} - diff --git a/src/bacon-message-connection.h b/src/bacon-message-connection.h deleted file mode 100644 index db4a91262..000000000 --- a/src/bacon-message-connection.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2003 Bastien Nocera <hadess@hadess.net> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Totem project hereby grant permission for non-gpl compatible GStreamer - * plugins to be used and distributed together with GStreamer and Totem. This - * permission are above and beyond the permissions granted by the GPL license - * Totem is covered by. - * - * Monday 7th February 2005: Christian Schaller: Add excemption clause. - * See license_change file for details. - * - */ - -#ifndef BACON_MESSAGE_CONNECTION_H -#define BACON_MESSAGE_CONNECTION_H - -#include <glib.h> - -G_BEGIN_DECLS - -typedef void (*BaconMessageReceivedFunc) (const char *message, - gpointer user_data); - -typedef struct BaconMessageConnection BaconMessageConnection; - -BaconMessageConnection *bacon_message_connection_new (const char *prefix); -void bacon_message_connection_free (BaconMessageConnection *conn); -void bacon_message_connection_set_callback (BaconMessageConnection *conn, - BaconMessageReceivedFunc func, - gpointer user_data); -void bacon_message_connection_send (BaconMessageConnection *conn, - const char *message); -gboolean bacon_message_connection_get_is_server (BaconMessageConnection *conn); - -G_END_DECLS - -#endif /* BACON_MESSAGE_CONNECTION_H */ diff --git a/src/empathy-account-assistant.c b/src/empathy-account-assistant.c new file mode 100644 index 000000000..d8aa46f1d --- /dev/null +++ b/src/empathy-account-assistant.c @@ -0,0 +1,941 @@ +/* + * Copyright (C) 2009 Collabora Ltd. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Authors: Cosimo Cecchi <cosimo.cecchi@collabora.co.uk> + */ + +/* empathy-account-assistant.c */ + +#include <glib/gi18n.h> +#include <telepathy-glib/util.h> +#include <gdk/gdkkeysyms.h> + +#include "empathy-account-assistant.h" +#include "empathy-import-widget.h" +#include "empathy-import-utils.h" + +#include <libempathy/empathy-account-settings.h> +#include <libempathy/empathy-utils.h> + +#include <libempathy-gtk/empathy-account-widget.h> +#include <libempathy-gtk/empathy-protocol-chooser.h> +#include <libempathy-gtk/empathy-ui-utils.h> + +G_DEFINE_TYPE (EmpathyAccountAssistant, empathy_account_assistant, + GTK_TYPE_ASSISTANT) + +#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyAccountAssistant) + +typedef enum { + RESPONSE_IMPORT = 1, + RESPONSE_ENTER_ACCOUNT = 2, + RESPONSE_CREATE_ACCOUNT = 3, + RESPONSE_SALUT_ONLY = 4 +} FirstPageResponse; + +typedef enum { + RESPONSE_CREATE_AGAIN = 1, + RESPONSE_CREATE_STOP = 2 +} CreateEnterPageResponse; + +enum { + PAGE_INTRO = 0, + PAGE_IMPORT = 1, + PAGE_ENTER_CREATE = 2, +}; + +enum { + PROP_PARENT = 1 +}; + +typedef struct { + FirstPageResponse first_resp; + CreateEnterPageResponse create_enter_resp; + gboolean enter_create_forward; + + /* enter or create page */ + GtkWidget *enter_or_create_page; + GtkWidget *current_account_widget; + EmpathyAccountWidget *current_widget_object; + GtkWidget *first_label; + GtkWidget *second_label; + GtkWidget *chooser; + GtkWidget *create_again_radio; + EmpathyAccountSettings *settings; + gboolean is_creating; + + /* import page */ + EmpathyImportWidget *iw; + + GtkWindow *parent_window; + + gboolean dispose_run; +} EmpathyAccountAssistantPriv; + +static GtkWidget * account_assistant_build_enter_or_create_page ( + EmpathyAccountAssistant *self); +static void account_assistant_finish_enter_or_create_page ( + EmpathyAccountAssistant *self, + gboolean is_enter); + +static GtkWidget * +account_assistant_build_error_page (EmpathyAccountAssistant *self, + GError *error, gint page_num) +{ + GtkWidget *main_vbox, *w, *hbox; + GString *str; + char *message; + PangoAttrList *list; + EmpathyAccountAssistantPriv *priv = GET_PRIV (self); + + main_vbox = gtk_vbox_new (FALSE, 12); + gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12); + gtk_widget_show (main_vbox); + + hbox = gtk_hbox_new (FALSE, 12); + gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 0); + gtk_widget_show (hbox); + + w = gtk_image_new_from_stock (GTK_STOCK_DIALOG_ERROR, + GTK_ICON_SIZE_DIALOG); + gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 0); + gtk_widget_show (w); + + /* translators: this is followed by the "while ..." strings some lines + * down this file. + */ + str = g_string_new (_("There has been an error ")); + + if (page_num == PAGE_IMPORT) + /* translators: this follows the "There has been an error " string */ + str = g_string_append (str, _("while importing the accounts.")); + else if (page_num >= PAGE_ENTER_CREATE && + priv->first_resp == RESPONSE_ENTER_ACCOUNT) + /* translators: this follows the "There has been an error " string */ + str = g_string_append (str, _("while parsing the account details.")); + else if (page_num >= PAGE_ENTER_CREATE && + priv->first_resp == RESPONSE_CREATE_ACCOUNT) + /* translators: this follows the "There has been an error " string */ + str = g_string_append (str, _("while creating the account.")); + + message = g_string_free (str, FALSE); + + w = gtk_label_new (message); + gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 0); + list = pango_attr_list_new (); + pango_attr_list_insert (list, pango_attr_scale_new (PANGO_SCALE_LARGE)); + pango_attr_list_insert (list, pango_attr_weight_new (PANGO_WEIGHT_BOLD)); + gtk_label_set_attributes (GTK_LABEL (w), list); + gtk_misc_set_alignment (GTK_MISC (w), 0, 0.5); + gtk_label_set_line_wrap (GTK_LABEL (w), TRUE); + gtk_widget_show (w); + + g_free (message); + pango_attr_list_unref (list); + + message = g_markup_printf_escaped + (_("The error message was: <span style=\"italic\">%s</span>"), + error->message); + w = gtk_label_new (message); + gtk_label_set_use_markup (GTK_LABEL (w), TRUE); + gtk_box_pack_start (GTK_BOX (main_vbox), w, FALSE, FALSE, 0); + gtk_misc_set_alignment (GTK_MISC (w), 0, 0.5); + gtk_widget_show (w); + + w = gtk_label_new (_("You can either go back and try to enter your " + "accounts' details again or quit this wizard and add accounts " + "later from the Edit menu.")); + gtk_box_pack_start (GTK_BOX (main_vbox), w, FALSE, FALSE, 6); + gtk_misc_set_alignment (GTK_MISC (w), 0, 0.5); + gtk_label_set_line_wrap (GTK_LABEL (w), TRUE); + gtk_widget_show (w); + + return main_vbox; +} + +static void +account_assistant_back_button_clicked_cb (GtkButton *button, + EmpathyAccountAssistant *self) +{ + gint page_num; + + page_num = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button), + "page-num")); + gtk_assistant_remove_action_widget (GTK_ASSISTANT (self), + GTK_WIDGET (button)); + gtk_assistant_set_current_page (GTK_ASSISTANT (self), page_num); +} + +static void +account_assistant_present_error_page (EmpathyAccountAssistant *self, + GError *error, gint page_num) +{ + GtkWidget *error_page, *back_button; + gint num; + + error_page = account_assistant_build_error_page (self, error, + page_num); + num = gtk_assistant_append_page (GTK_ASSISTANT (self), error_page); + gtk_assistant_set_page_title (GTK_ASSISTANT (self), error_page, + _("An error occurred")); + gtk_assistant_set_page_type (GTK_ASSISTANT (self), error_page, + GTK_ASSISTANT_PAGE_SUMMARY); + + back_button = gtk_button_new_from_stock (GTK_STOCK_GO_BACK); + gtk_assistant_add_action_widget (GTK_ASSISTANT (self), back_button); + g_object_set_data (G_OBJECT (back_button), + "page-num", GINT_TO_POINTER (page_num)); + g_signal_connect (back_button, "clicked", + G_CALLBACK (account_assistant_back_button_clicked_cb), self); + gtk_widget_show (back_button); + + gtk_assistant_set_current_page (GTK_ASSISTANT (self), num); +} + +static void +account_assistant_reset_enter_create_page (EmpathyAccountAssistant *self) +{ + EmpathyAccountAssistantPriv *priv = GET_PRIV (self); + GtkWidget *page; + gint idx; + + page = account_assistant_build_enter_or_create_page (self); + idx = gtk_assistant_append_page (GTK_ASSISTANT (self), page); + gtk_assistant_set_page_type (GTK_ASSISTANT (self), page, + GTK_ASSISTANT_PAGE_CONFIRM); + priv->enter_or_create_page = page; + + gtk_assistant_set_current_page (GTK_ASSISTANT (self), idx); + + account_assistant_finish_enter_or_create_page (self, + priv->first_resp == RESPONSE_ENTER_ACCOUNT ? + TRUE : FALSE); +} + +static void +account_assistant_account_enabled_cb (GObject *source, + GAsyncResult *result, + gpointer user_data) +{ + GError *error = NULL; + EmpathyAccountAssistant *self = user_data; + EmpathyAccountAssistantPriv *priv = GET_PRIV (self); + + empathy_account_set_enabled_finish (EMPATHY_ACCOUNT (source), + result, &error); + + if (error) + { + g_warning ("Error enabling an account: %s", error->message); + g_error_free (error); + } + + if (priv->create_enter_resp == RESPONSE_CREATE_STOP) + g_signal_emit_by_name (self, "close"); + else + account_assistant_reset_enter_create_page (self); +} + +static void +account_assistant_apply_account_cb (GObject *source, + GAsyncResult *result, + gpointer user_data) +{ + GError *error = NULL; + EmpathyAccountAssistant *self = user_data; + EmpathyAccountAssistantPriv *priv = GET_PRIV (self); + EmpathyAccountSettings *settings = EMPATHY_ACCOUNT_SETTINGS (source); + EmpathyAccount *account; + + empathy_account_settings_apply_finish (settings, result, &error); + + priv->is_creating = FALSE; + + if (error != NULL) + { + account_assistant_present_error_page (self, error, + gtk_assistant_get_current_page (GTK_ASSISTANT (self))); + g_error_free (error); + return; + } + + /* enable the newly created account */ + account = empathy_account_settings_get_account (settings); + empathy_account_set_enabled_async (account, TRUE, + account_assistant_account_enabled_cb, self); +} + +static void +account_assistant_apply_account_and_finish (EmpathyAccountAssistant *self) +{ + EmpathyAccountAssistantPriv *priv = GET_PRIV (self); + + if (priv->settings == NULL) + return; + + priv->is_creating = TRUE; + + empathy_account_settings_apply_async (priv->settings, + account_assistant_apply_account_cb, self); +} + +static void +account_assistant_handle_apply_cb (EmpathyAccountWidget *widget_object, + gboolean is_valid, + EmpathyAccountAssistant *self) +{ + EmpathyAccountAssistantPriv *priv = GET_PRIV (self); + + gtk_assistant_set_page_complete (GTK_ASSISTANT (self), + priv->enter_or_create_page, is_valid); +} + +static void +account_assistant_protocol_changed_cb (GtkComboBox *chooser, + EmpathyAccountAssistant *self) +{ + TpConnectionManager *cm; + TpConnectionManagerProtocol *proto; + EmpathyAccountSettings *settings; + EmpathyAccountAssistantPriv *priv; + char *str; + GtkWidget *account_widget; + EmpathyAccountWidget *widget_object = NULL; + + priv = GET_PRIV (self); + + cm = empathy_protocol_chooser_dup_selected ( + EMPATHY_PROTOCOL_CHOOSER (chooser), &proto); + + if (cm == NULL || proto == NULL) + /* we are not ready yet */ + return; + + /* Create account */ + /* To translator: %s is the protocol name */ + str = g_strdup_printf (_("New %s account"), proto->name); + + settings = empathy_account_settings_new (cm->name, proto->name, str); + + if (priv->first_resp == RESPONSE_CREATE_ACCOUNT) + empathy_account_settings_set_boolean (settings, "register", TRUE); + + widget_object = empathy_account_widget_new_for_protocol (proto->name, + settings, TRUE); + account_widget = empathy_account_widget_get_widget (widget_object); + + if (priv->current_account_widget != NULL) + { + g_signal_handlers_disconnect_by_func (priv->current_widget_object, + account_assistant_handle_apply_cb, self); + gtk_widget_destroy (priv->current_account_widget); + } + + priv->current_account_widget = account_widget; + priv->current_widget_object = widget_object; + + if (priv->settings != NULL) + g_object_unref (priv->settings); + + priv->settings = settings; + + g_signal_connect (priv->current_widget_object, "handle-apply", + G_CALLBACK (account_assistant_handle_apply_cb), self); + + gtk_box_pack_start (GTK_BOX (priv->enter_or_create_page), account_widget, + FALSE, FALSE, 0); + gtk_widget_show (account_widget); + + g_free (str); +} + +static gboolean +account_assistant_chooser_enter_details_filter_func ( + TpConnectionManager *cm, + TpConnectionManagerProtocol *protocol, + gpointer user_data) +{ + if (!tp_strdiff (protocol->name, "local-xmpp") || + !tp_strdiff (protocol->name, "irc")) + return FALSE; + + return TRUE; +} + +static gboolean +account_assistant_chooser_create_account_filter_func ( + TpConnectionManager *cm, + TpConnectionManagerProtocol *protocol, + gpointer user_data) +{ + return tp_connection_manager_protocol_can_register (protocol); +} + +static void +account_assistant_finish_enter_or_create_page (EmpathyAccountAssistant *self, + gboolean is_enter) +{ + EmpathyAccountAssistantPriv *priv = GET_PRIV (self); + + if (is_enter) + { + gtk_label_set_label (GTK_LABEL (priv->first_label), + _("What kind of chat account do you have?")); + /* gtk_label_set_label (GTK_LABEL (priv->second_label), + _("If you have other accounts to set up, you can do " + "that at any time from the Edit menu.")); + */ + gtk_label_set_label (GTK_LABEL (priv->second_label), + _("Do you have any other chat accounts you want to set up?")); + empathy_protocol_chooser_set_visible ( + EMPATHY_PROTOCOL_CHOOSER (priv->chooser), + account_assistant_chooser_enter_details_filter_func, self); + + gtk_assistant_set_page_title (GTK_ASSISTANT (self), + priv->enter_or_create_page, _("Enter your account details")); + } + else + { + gtk_label_set_label (GTK_LABEL (priv->first_label), + _("What kind of chat account do you want to create?")); + /* gtk_label_set_label (GTK_LABEL (priv->second_label), + _("You can register other accounts, or setup " + "an existing one at any time from the Edit menu.")); + */ + gtk_label_set_label (GTK_LABEL (priv->second_label), + _("Do you want to create other chat accounts?")); + empathy_protocol_chooser_set_visible ( + EMPATHY_PROTOCOL_CHOOSER (priv->chooser), + account_assistant_chooser_create_account_filter_func, self); + + gtk_assistant_set_page_title (GTK_ASSISTANT (self), + priv->enter_or_create_page, + _("Enter the details for the new account")); + } + + g_signal_connect (priv->chooser, "changed", + G_CALLBACK (account_assistant_protocol_changed_cb), self); + + /* trigger show the first account widget */ + account_assistant_protocol_changed_cb (GTK_COMBO_BOX (priv->chooser), self); +} + +static gint +account_assistant_page_forward_func (gint current_page, + gpointer user_data) +{ + EmpathyAccountAssistant *self = user_data; + EmpathyAccountAssistantPriv *priv = GET_PRIV (self); + gint retval; + + retval = current_page; + + if (current_page == PAGE_INTRO) + { + if (priv->first_resp == RESPONSE_ENTER_ACCOUNT || + priv->first_resp == RESPONSE_CREATE_ACCOUNT) + retval = PAGE_ENTER_CREATE; + if (priv->first_resp == RESPONSE_IMPORT) + retval = PAGE_IMPORT; + } + + if (current_page == PAGE_IMPORT || + current_page >= PAGE_ENTER_CREATE) + /* don't forward anymore */ + retval = -1; + + if (current_page >= PAGE_ENTER_CREATE && + priv->create_enter_resp == RESPONSE_CREATE_AGAIN) + { + priv->enter_create_forward = TRUE; + retval = current_page; + } + + return retval; +} + +static void +account_assistant_radio_choice_toggled_cb (GtkToggleButton *button, + EmpathyAccountAssistant *self) +{ + FirstPageResponse response; + EmpathyAccountAssistantPriv *priv = GET_PRIV (self); + GtkWidget *intro_page; + + response = GPOINTER_TO_INT (g_object_get_data + (G_OBJECT (button), "response")); + + priv->first_resp = response; + + intro_page = gtk_assistant_get_nth_page (GTK_ASSISTANT (self), + PAGE_INTRO); + + if (response == RESPONSE_SALUT_ONLY) + gtk_assistant_set_page_type (GTK_ASSISTANT (self), intro_page, + GTK_ASSISTANT_PAGE_SUMMARY); + else + gtk_assistant_set_page_type (GTK_ASSISTANT (self), intro_page, + GTK_ASSISTANT_PAGE_INTRO); +} + +static GtkWidget * +account_assistant_build_introduction_page (EmpathyAccountAssistant *self) +{ + EmpathyAccountAssistantPriv *priv = GET_PRIV (self); + GtkWidget *main_vbox, *hbox_1, *w, *vbox_1; + GtkWidget *radio = NULL; + GdkPixbuf *pix; + const gchar *str; + + main_vbox = gtk_vbox_new (FALSE, 12); + gtk_widget_show (main_vbox); + gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12); + + hbox_1 = gtk_hbox_new (FALSE, 12); + gtk_box_pack_start (GTK_BOX (main_vbox), hbox_1, TRUE, TRUE, 0); + gtk_widget_show (hbox_1); + + w = gtk_label_new ( + _("With Empathy you can chat with people " + "online nearby and with friends and colleagues " + "who use Google Talk, AIM, Windows Live " + "and many other chat programs. With a microphone " + "or a webcam you can also have audio or video calls.")); + gtk_misc_set_alignment (GTK_MISC (w), 0, 0.5); + gtk_label_set_line_wrap (GTK_LABEL (w), TRUE); + gtk_box_pack_start (GTK_BOX (hbox_1), w, FALSE, FALSE, 0); + gtk_widget_show (w); + + pix = empathy_pixbuf_from_icon_name_sized ("empathy", 80); + w = gtk_image_new_from_pixbuf (pix); + gtk_box_pack_start (GTK_BOX (hbox_1), w, FALSE, FALSE, 6); + gtk_widget_show (w); + + g_object_unref (pix); + + w = gtk_label_new (_("Do you have an account you've been using " + "with another chat program?")); + gtk_misc_set_alignment (GTK_MISC (w), 0, 0); + gtk_label_set_line_wrap (GTK_LABEL (w), TRUE); + gtk_box_pack_start (GTK_BOX (main_vbox), w, FALSE, FALSE, 0); + gtk_widget_show (w); + + w = gtk_alignment_new (0, 0, 0, 0); + gtk_alignment_set_padding (GTK_ALIGNMENT (w), 0, 0, 12, 0); + gtk_box_pack_start (GTK_BOX (main_vbox), w, TRUE, TRUE, 0); + gtk_widget_show (w); + + vbox_1 = gtk_vbox_new (TRUE, 0); + gtk_container_add (GTK_CONTAINER (w), vbox_1); + gtk_widget_show (vbox_1); + + if (empathy_import_accounts_to_import ()) + { + hbox_1 = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox_1), hbox_1, TRUE, TRUE, 0); + gtk_widget_show (hbox_1); + + radio = gtk_radio_button_new_with_label (NULL, + _("Yes, import my account details from ")); + gtk_box_pack_start (GTK_BOX (hbox_1), radio, TRUE, TRUE, 0); + g_object_set_data (G_OBJECT (radio), "response", + GINT_TO_POINTER (RESPONSE_IMPORT)); + gtk_widget_show (radio); + + w = gtk_combo_box_new_text (); + gtk_combo_box_append_text (GTK_COMBO_BOX (w), "Pidgin"); + gtk_box_pack_start (GTK_BOX (hbox_1), w, TRUE, TRUE, 0); + gtk_combo_box_set_active (GTK_COMBO_BOX (w), 0); + gtk_widget_show (w); + + g_signal_connect (radio, "clicked", + G_CALLBACK (account_assistant_radio_choice_toggled_cb), self); + priv->first_resp = RESPONSE_IMPORT; + } + else + { + priv->first_resp = RESPONSE_ENTER_ACCOUNT; + } + + str = _("Yes, I'll enter my account details now"); + + if (radio == NULL) + { + radio = gtk_radio_button_new_with_label (NULL, str); + w = radio; + } + else + { + w = gtk_radio_button_new_with_label_from_widget ( + GTK_RADIO_BUTTON (radio), str); + } + + gtk_box_pack_start (GTK_BOX (vbox_1), w, TRUE, TRUE, 0); + g_object_set_data (G_OBJECT (w), "response", + GINT_TO_POINTER (RESPONSE_ENTER_ACCOUNT)); + gtk_widget_show (w); + + g_signal_connect (w, "clicked", + G_CALLBACK (account_assistant_radio_choice_toggled_cb), self); + + w = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (radio), + _("No, I want a new account")); + gtk_box_pack_start (GTK_BOX (vbox_1), w, TRUE, TRUE, 0); + g_object_set_data (G_OBJECT (w), "response", + GINT_TO_POINTER (RESPONSE_CREATE_ACCOUNT)); + gtk_widget_show (w); + + g_signal_connect (w, "clicked", + G_CALLBACK (account_assistant_radio_choice_toggled_cb), self); + + w = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (radio), + _("No, I just want to see people online nearby for now")); + gtk_box_pack_start (GTK_BOX (vbox_1), w, TRUE, TRUE, 0); + g_object_set_data (G_OBJECT (w), "response", + GINT_TO_POINTER (RESPONSE_SALUT_ONLY)); + gtk_widget_show (w); + + g_signal_connect (w, "clicked", + G_CALLBACK (account_assistant_radio_choice_toggled_cb), self); + + return main_vbox; +} + +static GtkWidget * +account_assistant_build_import_page (EmpathyAccountAssistant *self) +{ + GtkWidget *main_vbox, *w, *import; + EmpathyImportWidget *iw; + EmpathyAccountAssistantPriv *priv = GET_PRIV (self); + + main_vbox = gtk_vbox_new (FALSE, 12); + gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12); + w = gtk_label_new (_("Select the accounts you want to import:")); + gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.5); + gtk_widget_show (w); + gtk_box_pack_start (GTK_BOX (main_vbox), w, FALSE, FALSE, 6); + + w = gtk_alignment_new (0, 0, 0, 0); + gtk_alignment_set_padding (GTK_ALIGNMENT (w), 0, 0, 12, 0); + gtk_box_pack_start (GTK_BOX (main_vbox), w, FALSE, FALSE, 0); + gtk_widget_show (w); + + /* NOTE: this is hardcoded as we support pidgin only */ + iw = empathy_import_widget_new (EMPATHY_IMPORT_APPLICATION_PIDGIN); + import = empathy_import_widget_get_widget (iw); + gtk_container_add (GTK_CONTAINER (w), import); + gtk_widget_show (import); + + priv->iw = iw; + + gtk_widget_show (main_vbox); + + return main_vbox; +} + +static void +account_assistant_radio_create_again_clicked_cb (GtkButton *button, + EmpathyAccountAssistant *self) +{ + CreateEnterPageResponse response; + EmpathyAccountAssistantPriv *priv = GET_PRIV (self); + + response = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button), + "response")); + + priv->create_enter_resp = response; + + gtk_assistant_set_page_type (GTK_ASSISTANT (self), + priv->enter_or_create_page, + (response == RESPONSE_CREATE_AGAIN) ? + GTK_ASSISTANT_PAGE_CONTENT : GTK_ASSISTANT_PAGE_CONFIRM); +} + +static GtkWidget * +account_assistant_build_enter_or_create_page (EmpathyAccountAssistant *self) +{ + EmpathyAccountAssistantPriv *priv = GET_PRIV (self); + GtkWidget *main_vbox, *w, *chooser, *vbox, *hbox, *radio; + + main_vbox = gtk_vbox_new (FALSE, 12); + gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12); + gtk_widget_show (main_vbox); + + w = gtk_label_new (NULL); + gtk_misc_set_alignment (GTK_MISC (w), 0, 0); + gtk_box_pack_start (GTK_BOX (main_vbox), w, FALSE, FALSE, 0); + gtk_widget_show (w); + priv->first_label = w; + + w = gtk_alignment_new (0, 0, 0, 0); + gtk_alignment_set_padding (GTK_ALIGNMENT (w), 0, 0, 12, 0); + gtk_box_pack_start (GTK_BOX (main_vbox), w, FALSE, FALSE, 0); + gtk_widget_show (w); + + chooser = empathy_protocol_chooser_new (); + gtk_container_add (GTK_CONTAINER (w), chooser); + gtk_widget_show (chooser); + priv->chooser = chooser; + + vbox = gtk_vbox_new (FALSE, 6); + gtk_box_pack_end (GTK_BOX (main_vbox), vbox, FALSE, FALSE, 0); + gtk_widget_show (vbox); + + w = gtk_label_new (NULL); + gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0); + gtk_label_set_line_wrap (GTK_LABEL (w), TRUE); + gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.5); + gtk_widget_show (w); + priv->second_label = w; + + w = gtk_alignment_new (0, 0, 0, 0); + gtk_alignment_set_padding (GTK_ALIGNMENT (w), 0, 0, 12, 0); + gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0); + gtk_widget_show (w); + + hbox = gtk_hbox_new (FALSE, 6); + gtk_container_add (GTK_CONTAINER (w), hbox); + gtk_widget_show (hbox); + + radio = gtk_radio_button_new_with_label (NULL, _("Yes")); + gtk_box_pack_start (GTK_BOX (hbox), radio, FALSE, FALSE, 0); + g_object_set_data (G_OBJECT (radio), "response", + GINT_TO_POINTER (RESPONSE_CREATE_AGAIN)); + gtk_widget_show (radio); + + w = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (radio), + _("No, that's all for now")); + gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 0); + g_object_set_data (G_OBJECT (w), "response", + GINT_TO_POINTER (RESPONSE_CREATE_STOP)); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), TRUE); + priv->create_enter_resp = RESPONSE_CREATE_STOP; + priv->create_again_radio = w; + gtk_widget_show (w); + + g_signal_connect (w, "clicked", + G_CALLBACK (account_assistant_radio_create_again_clicked_cb), self); + g_signal_connect (radio, "clicked", + G_CALLBACK (account_assistant_radio_create_again_clicked_cb), self); + + return main_vbox; +} + +static void +account_assistant_close_cb (GtkAssistant *assistant, + gpointer user_data) +{ + EmpathyAccountAssistantPriv *priv = GET_PRIV (assistant); + + if (priv->is_creating) + return; + + gtk_widget_destroy (GTK_WIDGET (assistant)); +} + +static void +impl_signal_apply (GtkAssistant *assistant) +{ + EmpathyAccountAssistant *self = EMPATHY_ACCOUNT_ASSISTANT (assistant); + EmpathyAccountAssistantPriv *priv = GET_PRIV (self); + gint current_page; + + current_page = gtk_assistant_get_current_page (assistant); + + if (current_page >= PAGE_ENTER_CREATE) + account_assistant_apply_account_and_finish (self); + + if (current_page == PAGE_IMPORT) + empathy_import_widget_add_selected_accounts (priv->iw); +} + +static void +impl_signal_cancel (GtkAssistant *assistant) +{ + gtk_widget_destroy (GTK_WIDGET (assistant)); +} + +static void +impl_signal_prepare (GtkAssistant *assistant, + GtkWidget *current_page) +{ + EmpathyAccountAssistant *self = EMPATHY_ACCOUNT_ASSISTANT (assistant); + EmpathyAccountAssistantPriv *priv = GET_PRIV (self); + gint current_idx; + + current_idx = gtk_assistant_get_current_page (assistant); + + if (current_idx >= PAGE_ENTER_CREATE) + { + if (!priv->enter_create_forward) + { + account_assistant_finish_enter_or_create_page (self, + priv->first_resp == RESPONSE_ENTER_ACCOUNT ? + TRUE : FALSE); + } + else + { + priv->enter_create_forward = FALSE; + account_assistant_apply_account_and_finish (self); + } + } +} + +static void +do_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + EmpathyAccountAssistantPriv *priv = GET_PRIV (object); + + switch (property_id) + { + case PROP_PARENT: + g_value_set_object (value, priv->parent_window); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +do_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + EmpathyAccountAssistantPriv *priv = GET_PRIV (object); + + switch (property_id) + { + case PROP_PARENT: + priv->parent_window = g_value_get_object (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +do_constructed (GObject *object) +{ + EmpathyAccountAssistantPriv *priv = GET_PRIV (object); + + /* set us as transient for the parent window if any */ + if (priv->parent_window) + gtk_window_set_transient_for (GTK_WINDOW (object), + priv->parent_window); + + /* set the dialog hint, so this will be centered over the parent window */ + gtk_window_set_type_hint (GTK_WINDOW (object), GDK_WINDOW_TYPE_HINT_DIALOG); +} + +static void +do_dispose (GObject *obj) +{ + EmpathyAccountAssistantPriv *priv = GET_PRIV (obj); + + if (priv->dispose_run) + return; + + priv->dispose_run = TRUE; + + if (priv->settings != NULL) + { + g_object_unref (priv->settings); + priv->settings = NULL; + } + + if (G_OBJECT_CLASS (empathy_account_assistant_parent_class)->dispose != NULL) + G_OBJECT_CLASS (empathy_account_assistant_parent_class)->dispose (obj); +} + +static void +empathy_account_assistant_class_init (EmpathyAccountAssistantClass *klass) +{ + GObjectClass *oclass = G_OBJECT_CLASS (klass); + GtkAssistantClass *gtkclass = GTK_ASSISTANT_CLASS (klass); + GParamSpec *param_spec; + + oclass->get_property = do_get_property; + oclass->set_property = do_set_property; + oclass->constructed = do_constructed; + oclass->dispose = do_dispose; + + gtkclass->apply = impl_signal_apply; + gtkclass->prepare = impl_signal_prepare; + gtkclass->cancel = impl_signal_cancel; + + param_spec = g_param_spec_object ("parent-window", + "parent-window", "The parent window", + GTK_TYPE_WINDOW, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); + g_object_class_install_property (oclass, PROP_PARENT, param_spec); + + g_type_class_add_private (klass, sizeof (EmpathyAccountAssistantPriv)); +} + +static void +empathy_account_assistant_init (EmpathyAccountAssistant *self) +{ + EmpathyAccountAssistantPriv *priv; + GtkAssistant *assistant = GTK_ASSISTANT (self); + GtkWidget *page; + + priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EMPATHY_TYPE_ACCOUNT_ASSISTANT, + EmpathyAccountAssistantPriv); + self->priv = priv; + + g_signal_connect (self, "close", + G_CALLBACK (account_assistant_close_cb), NULL); + + gtk_assistant_set_forward_page_func (assistant, + account_assistant_page_forward_func, self, NULL); + + /* first page (introduction) */ + page = account_assistant_build_introduction_page (self); + gtk_assistant_append_page (assistant, page); + gtk_assistant_set_page_title (assistant, page, + _("Welcome to Empathy")); + gtk_assistant_set_page_type (assistant, page, + GTK_ASSISTANT_PAGE_INTRO); + gtk_assistant_set_page_complete (assistant, page, TRUE); + + /* second page (import accounts) */ + page = account_assistant_build_import_page (self); + gtk_assistant_append_page (assistant, page); + gtk_assistant_set_page_title (assistant, page, + _("Import your existing accounts")); + gtk_assistant_set_page_complete (assistant, page, TRUE); + gtk_assistant_set_page_type (assistant, page, GTK_ASSISTANT_PAGE_CONFIRM); + + /* third page (enter account details) */ + page = account_assistant_build_enter_or_create_page (self); + gtk_assistant_append_page (assistant, page); + gtk_assistant_set_page_type (assistant, page, GTK_ASSISTANT_PAGE_CONFIRM); + priv->enter_or_create_page = page; + + gtk_window_set_resizable (GTK_WINDOW (self), FALSE); +} + +GtkWidget * +empathy_account_assistant_new (GtkWindow *window) +{ + return g_object_new (EMPATHY_TYPE_ACCOUNT_ASSISTANT, "parent-window", + window, NULL); +} diff --git a/src/empathy-account-assistant.h b/src/empathy-account-assistant.h new file mode 100644 index 000000000..857460201 --- /dev/null +++ b/src/empathy-account-assistant.h @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2009 Collabora Ltd. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Authors: Cosimo Cecchi <cosimo.cecchi@collabora.co.uk> + */ + +/* empathy-account-assistant.h */ + +#ifndef __EMPATHY_ACCOUNT_ASSISTANT_H__ +#define __EMPATHY_ACCOUNT_ASSISTANT_H__ + +#include <glib-object.h> +#include <gtk/gtk.h> + +G_BEGIN_DECLS + +#define EMPATHY_TYPE_ACCOUNT_ASSISTANT empathy_account_assistant_get_type() +#define EMPATHY_ACCOUNT_ASSISTANT(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_ACCOUNT_ASSISTANT,\ + EmpathyAccountAssistant)) +#define EMPATHY_ACCOUNT_ASSISTANT_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), EMPATHY_TYPE_ACCOUNT_ASSISTANT,\ + EmpathyAccountAssistantClass)) +#define EMPATHY_IS_ACCOUNT_ASSISTANT(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_ACCOUNT_ASSISTANT)) +#define EMPATHY_IS_ACCOUNT_ASSISTANT_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), EMPATHY_TYPE_ACCOUNT_ASSISTANT)) +#define EMPATHY_ACCOUNT_ASSISTANT_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_ACCOUNT_ASSISTANT,\ + EmpathyAccountAssistantClass)) + +typedef struct { + GtkAssistant parent; + + /* private */ + gpointer priv; +} EmpathyAccountAssistant; + +typedef struct { + GtkAssistantClass parent_class; +} EmpathyAccountAssistantClass; + +GType empathy_account_assistant_get_type (void); + +GtkWidget *empathy_account_assistant_new (GtkWindow *parent); + +G_END_DECLS + +#endif /* __EMPATHY_ACCOUNT_ASSISTANT_H__ */ diff --git a/src/empathy-accounts-dialog.c b/src/empathy-accounts-dialog.c index 5948a58ff..6fa484924 100644 --- a/src/empathy-accounts-dialog.c +++ b/src/empathy-accounts-dialog.c @@ -1,7 +1,6 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* * Copyright (C) 2005-2007 Imendio AB - * Copyright (C) 2007-2008 Collabora Ltd. + * Copyright (C) 2007-2009 Collabora Ltd. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -20,6 +19,8 @@ * * Authors: Martyn Russell <martyn@imendio.com> * Xavier Claessens <xclaesse@gmail.com> + * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk> + * Jonathan Tellier <jonathan.tellier@gmail.com> */ #include <config.h> @@ -31,20 +32,24 @@ #include <glib/gi18n.h> #include <dbus/dbus-glib.h> -#include <libmissioncontrol/mc-profile.h> #include <telepathy-glib/util.h> #include <libempathy/empathy-utils.h> #include <libempathy/empathy-account-manager.h> +#include <libempathy/empathy-connection-managers.h> #include <libempathy-gtk/empathy-ui-utils.h> -#include <libempathy-gtk/empathy-profile-chooser.h> + +#include <libempathy-gtk/empathy-protocol-chooser.h> #include <libempathy-gtk/empathy-account-widget.h> #include <libempathy-gtk/empathy-account-widget-irc.h> #include <libempathy-gtk/empathy-account-widget-sip.h> +#include <libempathy-gtk/empathy-cell-renderer-activatable.h> #include <libempathy-gtk/empathy-conf.h> +#include <libempathy-gtk/empathy-images.h> #include "empathy-accounts-dialog.h" #include "empathy-import-dialog.h" +#include "empathy-import-utils.h" #define DEBUG_FLAG EMPATHY_DEBUG_ACCOUNT #include <libempathy/empathy-debug.h> @@ -52,1125 +57,1430 @@ /* Flashing delay for icons (milliseconds). */ #define FLASH_TIMEOUT 500 +#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyAccountsDialog) +G_DEFINE_TYPE (EmpathyAccountsDialog, empathy_accounts_dialog, G_TYPE_OBJECT); + +static EmpathyAccountsDialog *dialog_singleton = NULL; + typedef struct { - GtkWidget *window; + GtkWidget *window; + + GtkWidget *alignment_settings; + + GtkWidget *vbox_details; + GtkWidget *frame_no_protocol; - GtkWidget *alignment_settings; + GtkWidget *treeview; - GtkWidget *vbox_details; - GtkWidget *frame_no_profile; + GtkWidget *button_add; - GtkWidget *treeview; + GtkWidget *frame_new_account; + GtkWidget *combobox_protocol; + GtkWidget *hbox_type; + GtkWidget *button_create; + GtkWidget *button_back; + GtkWidget *radiobutton_reuse; + GtkWidget *radiobutton_register; - GtkWidget *button_add; - GtkWidget *button_remove; - GtkWidget *button_import; + GtkWidget *image_type; + GtkWidget *label_name; + GtkWidget *label_type; + GtkWidget *settings_widget; - GtkWidget *frame_new_account; - GtkWidget *combobox_profile; - GtkWidget *hbox_type; - GtkWidget *button_create; - GtkWidget *button_back; - GtkWidget *radiobutton_reuse; - GtkWidget *radiobutton_register; + gboolean connecting_show; + guint connecting_id; - GtkWidget *image_type; - GtkWidget *label_name; - GtkWidget *label_type; - GtkWidget *settings_widget; + gulong settings_ready_id; + EmpathyAccountSettings *settings_ready; - gboolean connecting_show; - guint connecting_id; + EmpathyAccountManager *account_manager; + EmpathyConnectionManagers *cms; - EmpathyAccountManager *account_manager; - MissionControl *mc; -} EmpathyAccountsDialog; + GtkWindow *parent_window; + EmpathyAccount *initial_selection; +} EmpathyAccountsDialogPriv; enum { - COL_ENABLED, - COL_NAME, - COL_STATUS, - COL_ACCOUNT_POINTER, - COL_COUNT + COL_NAME, + COL_STATUS, + COL_ACCOUNT_POINTER, + COL_ACCOUNT_SETTINGS_POINTER, + COL_COUNT }; -static void accounts_dialog_update_account (EmpathyAccountsDialog *dialog, - EmpathyAccount *account); -static void accounts_dialog_model_setup (EmpathyAccountsDialog *dialog); -static void accounts_dialog_model_add_columns (EmpathyAccountsDialog *dialog); -static void accounts_dialog_name_editing_started_cb (GtkCellRenderer *renderer, - GtkCellEditable *editable, - gchar *path, - EmpathyAccountsDialog *dialog); -static void accounts_dialog_model_select_first (EmpathyAccountsDialog *dialog); -static void accounts_dialog_model_pixbuf_data_func (GtkTreeViewColumn *tree_column, - GtkCellRenderer *cell, - GtkTreeModel *model, - GtkTreeIter *iter, - EmpathyAccountsDialog *dialog); -static EmpathyAccount *accounts_dialog_model_get_selected (EmpathyAccountsDialog *dialog); -static void accounts_dialog_model_set_selected (EmpathyAccountsDialog *dialog, - EmpathyAccount *account); -static gboolean accounts_dialog_model_remove_selected (EmpathyAccountsDialog *dialog); -static void accounts_dialog_model_selection_changed (GtkTreeSelection *selection, - EmpathyAccountsDialog *dialog); -static void accounts_dialog_add_or_update_account (EmpathyAccountsDialog *dialog, - EmpathyAccount *account); -static void accounts_dialog_account_added_cb (EmpathyAccountManager *manager, - EmpathyAccount *account, - EmpathyAccountsDialog *dialog); -static void accounts_dialog_account_removed_cb (EmpathyAccountManager *manager, - EmpathyAccount *account, - EmpathyAccountsDialog *dialog); -static gboolean accounts_dialog_row_changed_foreach (GtkTreeModel *model, - GtkTreePath *path, - GtkTreeIter *iter, - gpointer user_data); -static gboolean accounts_dialog_flash_connecting_cb (EmpathyAccountsDialog *dialog); -static void accounts_dialog_connection_changed_cb (EmpathyAccountManager *manager, - EmpathyAccount *account, - TpConnectionStatusReason reason, - TpConnectionStatus current, - TpConnectionStatus previous, - EmpathyAccountsDialog *dialog); -static void accounts_dialog_button_create_clicked_cb (GtkWidget *button, - EmpathyAccountsDialog *dialog); -static void accounts_dialog_button_back_clicked_cb (GtkWidget *button, - EmpathyAccountsDialog *dialog); -static void accounts_dialog_button_add_clicked_cb (GtkWidget *button, - EmpathyAccountsDialog *dialog); -static void accounts_dialog_button_help_clicked_cb (GtkWidget *button, - EmpathyAccountsDialog *dialog); -static void accounts_dialog_button_remove_clicked_cb (GtkWidget *button, - EmpathyAccountsDialog *dialog); -static void accounts_dialog_button_import_clicked_cb (GtkWidget *button, - EmpathyAccountsDialog *dialog); -static void accounts_dialog_response_cb (GtkWidget *widget, - gint response, - EmpathyAccountsDialog *dialog); -static void accounts_dialog_destroy_cb (GtkWidget *widget, - EmpathyAccountsDialog *dialog); +enum { + PROP_PARENT = 1 +}; + +static EmpathyAccountSettings * accounts_dialog_model_get_selected_settings ( + EmpathyAccountsDialog *dialog); + +static void accounts_dialog_model_select_first (EmpathyAccountsDialog *dialog); + +static void accounts_dialog_update (EmpathyAccountsDialog *dialog, + EmpathyAccountSettings *settings); + +static void accounts_dialog_update_settings (EmpathyAccountsDialog *dialog, + EmpathyAccountSettings *settings); static void accounts_dialog_update_name_label (EmpathyAccountsDialog *dialog, - EmpathyAccount *account) + const gchar *display_name) { - gchar *text; + gchar *text; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); - text = g_markup_printf_escaped ("<big><b>%s</b></big>", - empathy_account_get_display_name (account)); - gtk_label_set_markup (GTK_LABEL (dialog->label_name), text); + text = g_markup_printf_escaped ("<big><b>%s</b></big>", display_name); + gtk_label_set_markup (GTK_LABEL (priv->label_name), text); - g_free (text); + g_free (text); } static void -accounts_dialog_update_account (EmpathyAccountsDialog *dialog, - EmpathyAccount *account) +empathy_account_dialog_widget_cancelled_cb (EmpathyAccountWidget *widget_object, + EmpathyAccountsDialog *dialog) { - McProfile *profile; - const gchar *config_ui; - - if (!account) { - GtkTreeView *view; - GtkTreeModel *model; - - view = GTK_TREE_VIEW (dialog->treeview); - model = gtk_tree_view_get_model (view); - - if (gtk_tree_model_iter_n_children (model, NULL) > 0) { - /* We have configured accounts, select the first one */ - accounts_dialog_model_select_first (dialog); - return; - } - if (empathy_profile_chooser_n_profiles ( - EMPATHY_PROFILE_CHOOSER (dialog->combobox_profile)) > 0) { - /* We have no account configured but we have some - * profiles instsalled. The user obviously wants to add - * an account. Click on the Add button for him. */ - accounts_dialog_button_add_clicked_cb (dialog->button_add, - dialog); - return; - } - - /* No account and no profile, warn the user */ - gtk_widget_hide (dialog->vbox_details); - gtk_widget_hide (dialog->frame_new_account); - gtk_widget_show (dialog->frame_no_profile); - gtk_widget_set_sensitive (dialog->button_add, FALSE); - gtk_widget_set_sensitive (dialog->button_remove, FALSE); - return; - } - - /* We have an account selected, destroy old settings and create a new - * one for the account selected */ - gtk_widget_hide (dialog->frame_new_account); - gtk_widget_hide (dialog->frame_no_profile); - gtk_widget_show (dialog->vbox_details); - gtk_widget_set_sensitive (dialog->button_add, TRUE); - gtk_widget_set_sensitive (dialog->button_remove, TRUE); - - if (dialog->settings_widget) { - gtk_widget_destroy (dialog->settings_widget); - dialog->settings_widget = NULL; - } - - profile = empathy_account_get_profile (account); - config_ui = mc_profile_get_configuration_ui (profile); - if (!tp_strdiff (config_ui, "jabber")) { - dialog->settings_widget = - empathy_account_widget_jabber_new (account); - } - else if (!tp_strdiff (config_ui, "msn")) { - dialog ->settings_widget = - empathy_account_widget_msn_new (account); - } - else if (!tp_strdiff (config_ui, "local-xmpp")) { - dialog->settings_widget = - empathy_account_widget_salut_new (account); - } - else if (!tp_strdiff (config_ui, "irc")) { - dialog->settings_widget = - empathy_account_widget_irc_new (account); - } - else if (!tp_strdiff (config_ui, "icq")) { - dialog->settings_widget = - empathy_account_widget_icq_new (account); - } - else if (!tp_strdiff (config_ui, "aim")) { - dialog->settings_widget = - empathy_account_widget_aim_new (account); - } - else if (!tp_strdiff (config_ui, "yahoo")) { - dialog->settings_widget = - empathy_account_widget_yahoo_new (account); - } - else if (!tp_strdiff (config_ui, "sofiasip")) { - dialog->settings_widget = - empathy_account_widget_sip_new (account); - } - else if (!tp_strdiff (config_ui, "groupwise")) { - dialog->settings_widget = - empathy_account_widget_groupwise_new (account); - } - else { - dialog->settings_widget = - empathy_account_widget_generic_new (account); - } - - gtk_container_add (GTK_CONTAINER (dialog->alignment_settings), - dialog->settings_widget); - gtk_widget_show (dialog->settings_widget); - - - gtk_image_set_from_icon_name (GTK_IMAGE (dialog->image_type), - mc_profile_get_icon_name (profile), - GTK_ICON_SIZE_DIALOG); - gtk_widget_set_tooltip_text (dialog->image_type, - mc_profile_get_display_name (profile)); - - accounts_dialog_update_name_label (dialog, account); - - g_object_unref (profile); + GtkTreeView *view; + GtkTreeModel *model; + GtkTreeSelection *selection; + GtkTreeIter iter; + EmpathyAccountSettings *settings; + EmpathyAccount *account; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + view = GTK_TREE_VIEW (priv->treeview); + selection = gtk_tree_view_get_selection (view); + + if (!gtk_tree_selection_get_selected (selection, &model, &iter)) + return; + + gtk_tree_model_get (model, &iter, + COL_ACCOUNT_SETTINGS_POINTER, &settings, + COL_ACCOUNT_POINTER, &account, -1); + + empathy_account_settings_discard_changes (settings); + + if (account == NULL) + { + /* We were creating an account. We remove the selected row */ + gtk_list_store_remove (GTK_LIST_STORE (model), &iter); + } + else + { + /* We were modifying an account. We discard the changes by reloading the + * settings and the UI. */ + accounts_dialog_update_settings (dialog, settings); + g_object_unref (account); + } + + if (settings != NULL) + g_object_unref (settings); } static void -accounts_dialog_model_setup (EmpathyAccountsDialog *dialog) +empathy_account_dialog_account_created_cb (EmpathyAccountWidget *widget_object, + EmpathyAccountsDialog *dialog) { - GtkListStore *store; - GtkTreeSelection *selection; + EmpathyAccountSettings *settings = + accounts_dialog_model_get_selected_settings (dialog); + accounts_dialog_update_settings (dialog, settings); - store = gtk_list_store_new (COL_COUNT, - G_TYPE_BOOLEAN, /* enabled */ - G_TYPE_STRING, /* name */ - G_TYPE_UINT, /* status */ - EMPATHY_TYPE_ACCOUNT); /* account */ + if (settings) + g_object_unref (settings); +} - gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->treeview), - GTK_TREE_MODEL (store)); +static GtkWidget * +get_account_setup_widget (EmpathyAccountSettings *settings, + EmpathyAccountWidget **widget_object) +{ + const gchar *proto = empathy_account_settings_get_protocol (settings); + EmpathyConnectionManagers *cm = + empathy_connection_managers_dup_singleton (); + GList *cms = empathy_connection_managers_get_cms (cm); + GList *l; + + for (l = cms; l; l = l->next) + { + TpConnectionManager *tp_cm = l->data; + if (tp_connection_manager_has_protocol (tp_cm, proto)) + { + g_object_unref (cm); + *widget_object = empathy_account_widget_new_for_protocol (proto, + settings, FALSE); + return empathy_account_widget_get_widget (*widget_object); + } + } + + g_object_unref (cm); + *widget_object = empathy_account_widget_new_for_protocol ("generic", settings, + FALSE); + return empathy_account_widget_get_widget (*widget_object); +} - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->treeview)); - gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); +static void +account_dialog_create_settings_widget (EmpathyAccountsDialog *dialog, + EmpathyAccountSettings *settings) +{ + EmpathyAccountWidget *widget_object = NULL; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + gchar *icon_name; + + priv->settings_widget = get_account_setup_widget (settings, &widget_object); + g_signal_connect (widget_object, "account-created", + G_CALLBACK (empathy_account_dialog_account_created_cb), dialog); + g_signal_connect (widget_object, "cancelled", + G_CALLBACK (empathy_account_dialog_widget_cancelled_cb), dialog); + + gtk_container_add (GTK_CONTAINER (priv->alignment_settings), + priv->settings_widget); + gtk_widget_show (priv->settings_widget); + + icon_name = empathy_account_settings_get_icon_name (settings); + + gtk_image_set_from_icon_name (GTK_IMAGE (priv->image_type), + icon_name, GTK_ICON_SIZE_DIALOG); + gtk_widget_set_tooltip_text (priv->image_type, + empathy_protocol_name_to_display_name + (empathy_account_settings_get_protocol (settings))); + + accounts_dialog_update_name_label (dialog, + empathy_account_settings_get_display_name (settings)); +} - g_signal_connect (selection, "changed", - G_CALLBACK (accounts_dialog_model_selection_changed), - dialog); +static void +account_dialog_settings_ready_cb (EmpathyAccountSettings *settings, + GParamSpec *spec, + EmpathyAccountsDialog *dialog) +{ + if (empathy_account_settings_is_ready (settings)) + account_dialog_create_settings_widget (dialog, settings); +} - gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store), - COL_NAME, GTK_SORT_ASCENDING); +static void +accounts_dialog_model_select_first (EmpathyAccountsDialog *dialog) +{ + GtkTreeView *view; + GtkTreeModel *model; + GtkTreeSelection *selection; + GtkTreeIter iter; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + /* select first */ + view = GTK_TREE_VIEW (priv->treeview); + model = gtk_tree_view_get_model (view); + + if (gtk_tree_model_get_iter_first (model, &iter)) + { + selection = gtk_tree_view_get_selection (view); + gtk_tree_selection_select_iter (selection, &iter); + } + else + { + accounts_dialog_update_settings (dialog, NULL); + } +} - accounts_dialog_model_add_columns (dialog); +static void +accounts_dialog_protocol_changed_cb (GtkWidget *widget, + EmpathyAccountsDialog *dialog) +{ + TpConnectionManager *cm; + TpConnectionManagerProtocol *proto; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + cm = empathy_protocol_chooser_dup_selected ( + EMPATHY_PROTOCOL_CHOOSER (priv->combobox_protocol), &proto); + + if (cm == NULL) + return; + + if (proto == NULL) + { + g_object_unref (cm); + return; + } + + if (tp_connection_manager_protocol_can_register (proto)) + { + gtk_widget_show (priv->radiobutton_register); + gtk_widget_show (priv->radiobutton_reuse); + } + else + { + gtk_widget_hide (priv->radiobutton_register); + gtk_widget_hide (priv->radiobutton_reuse); + } + g_object_unref (cm); +} - g_object_unref (store); +static void +accounts_dialog_button_add_clicked_cb (GtkWidget *button, + EmpathyAccountsDialog *dialog) +{ + GtkTreeView *view; + GtkTreeModel *model; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + view = GTK_TREE_VIEW (priv->treeview); + model = gtk_tree_view_get_model (view); + + gtk_widget_set_sensitive (priv->button_add, FALSE); + gtk_widget_hide (priv->vbox_details); + gtk_widget_hide (priv->frame_no_protocol); + gtk_widget_show (priv->frame_new_account); + + /* If we have no account, no need of a back button */ + if (gtk_tree_model_iter_n_children (model, NULL) > 0) + gtk_widget_show (priv->button_back); + else + gtk_widget_hide (priv->button_back); + + accounts_dialog_protocol_changed_cb (priv->radiobutton_register, dialog); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->radiobutton_reuse), + TRUE); + gtk_combo_box_set_active (GTK_COMBO_BOX (priv->combobox_protocol), 0); + gtk_widget_grab_focus (priv->combobox_protocol); } static void -accounts_dialog_name_edited_cb (GtkCellRendererText *renderer, - gchar *path, - gchar *new_text, - EmpathyAccountsDialog *dialog) +accounts_dialog_update_settings (EmpathyAccountsDialog *dialog, + EmpathyAccountSettings *settings) { - EmpathyAccount *account; - GtkTreeModel *model; - GtkTreePath *treepath; - GtkTreeIter iter; - - if (empathy_account_manager_get_connecting_accounts (dialog->account_manager) > 0) { - dialog->connecting_id = g_timeout_add (FLASH_TIMEOUT, - (GSourceFunc) accounts_dialog_flash_connecting_cb, - dialog); - } - - model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview)); - treepath = gtk_tree_path_new_from_string (path); - gtk_tree_model_get_iter (model, &iter, treepath); - gtk_tree_model_get (model, &iter, - COL_ACCOUNT_POINTER, &account, - -1); - gtk_list_store_set (GTK_LIST_STORE (model), &iter, - COL_NAME, new_text, - -1); - gtk_tree_path_free (treepath); - - empathy_account_set_display_name (account, new_text); - g_object_unref (account); + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + if (priv->settings_ready != NULL) + { + g_signal_handler_disconnect (priv->settings_ready, + priv->settings_ready_id); + priv->settings_ready = NULL; + priv->settings_ready_id = 0; + } + + if (!settings) + { + GtkTreeView *view; + GtkTreeModel *model; + + view = GTK_TREE_VIEW (priv->treeview); + model = gtk_tree_view_get_model (view); + + if (gtk_tree_model_iter_n_children (model, NULL) > 0) + { + /* We have configured accounts, select the first one */ + accounts_dialog_model_select_first (dialog); + return; + } + if (empathy_connection_managers_get_cms_num (priv->cms) > 0) + { + /* We have no account configured but we have some + * profiles installed. The user obviously wants to add + * an account. Click on the Add button for him. */ + accounts_dialog_button_add_clicked_cb (priv->button_add, + dialog); + return; + } + + /* No account and no profile, warn the user */ + gtk_widget_hide (priv->vbox_details); + gtk_widget_hide (priv->frame_new_account); + gtk_widget_show (priv->frame_no_protocol); + gtk_widget_set_sensitive (priv->button_add, FALSE); + return; + } + + /* We have an account selected, destroy old settings and create a new + * one for the account selected */ + gtk_widget_hide (priv->frame_new_account); + gtk_widget_hide (priv->frame_no_protocol); + gtk_widget_show (priv->vbox_details); + gtk_widget_set_sensitive (priv->button_add, TRUE); + + if (priv->settings_widget) + { + gtk_widget_destroy (priv->settings_widget); + priv->settings_widget = NULL; + } + + if (empathy_account_settings_is_ready (settings)) + { + account_dialog_create_settings_widget (dialog, settings); + } + else + { + priv->settings_ready = settings; + priv->settings_ready_id = + g_signal_connect (settings, "notify::ready", + G_CALLBACK (account_dialog_settings_ready_cb), dialog); + } + } static void -accounts_dialog_enable_toggled_cb (GtkCellRendererToggle *cell_renderer, - gchar *path, - EmpathyAccountsDialog *dialog) +accounts_dialog_name_editing_started_cb (GtkCellRenderer *renderer, + GtkCellEditable *editable, + gchar *path, + EmpathyAccountsDialog *dialog) { - EmpathyAccount *account; - GtkTreeModel *model; - GtkTreePath *treepath; - GtkTreeIter iter; - gboolean enabled; - - model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview)); - treepath = gtk_tree_path_new_from_string (path); - gtk_tree_model_get_iter (model, &iter, treepath); - gtk_tree_model_get (model, &iter, - COL_ACCOUNT_POINTER, &account, - -1); - gtk_tree_path_free (treepath); - - enabled = empathy_account_is_enabled (account); - empathy_account_set_enabled (account, !enabled); - - DEBUG ("%s account %s", enabled ? "Disabled" : "Enable", - empathy_account_get_display_name (account)); - - g_object_unref (account); + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + if (priv->connecting_id) + g_source_remove (priv->connecting_id); + + DEBUG ("Editing account name started; stopping flashing"); } static void -accounts_dialog_name_editing_started_cb (GtkCellRenderer *renderer, - GtkCellEditable *editable, - gchar *path, - EmpathyAccountsDialog *dialog) +accounts_dialog_model_pixbuf_data_func (GtkTreeViewColumn *tree_column, + GtkCellRenderer *cell, + GtkTreeModel *model, + GtkTreeIter *iter, + EmpathyAccountsDialog *dialog) { - if (dialog->connecting_id) { - g_source_remove (dialog->connecting_id); - } - DEBUG ("Editing account name started; stopping flashing"); + EmpathyAccountSettings *settings; + gchar *icon_name; + GdkPixbuf *pixbuf; + TpConnectionStatus status; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + gtk_tree_model_get (model, iter, + COL_STATUS, &status, + COL_ACCOUNT_SETTINGS_POINTER, &settings, + -1); + + icon_name = empathy_account_settings_get_icon_name (settings); + pixbuf = empathy_pixbuf_from_icon_name (icon_name, GTK_ICON_SIZE_BUTTON); + + if (pixbuf) + { + if (status == TP_CONNECTION_STATUS_DISCONNECTED || + (status == TP_CONNECTION_STATUS_CONNECTING && + !priv->connecting_show)) + { + GdkPixbuf *modded_pixbuf; + + modded_pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, + TRUE, + 8, + gdk_pixbuf_get_width (pixbuf), + gdk_pixbuf_get_height (pixbuf)); + + gdk_pixbuf_saturate_and_pixelate (pixbuf, + modded_pixbuf, + 1.0, + TRUE); + g_object_unref (pixbuf); + pixbuf = modded_pixbuf; + } + } + + g_object_set (cell, + "visible", TRUE, + "pixbuf", pixbuf, + NULL); + + g_object_unref (settings); + + if (pixbuf) + g_object_unref (pixbuf); +} + +static gboolean +accounts_dialog_row_changed_foreach (GtkTreeModel *model, + GtkTreePath *path, + GtkTreeIter *iter, + gpointer user_data) +{ + gtk_tree_model_row_changed (model, path, iter); + + return FALSE; +} + +static gboolean +accounts_dialog_flash_connecting_cb (EmpathyAccountsDialog *dialog) +{ + GtkTreeView *view; + GtkTreeModel *model; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + priv->connecting_show = !priv->connecting_show; + + view = GTK_TREE_VIEW (priv->treeview); + model = gtk_tree_view_get_model (view); + + gtk_tree_model_foreach (model, accounts_dialog_row_changed_foreach, NULL); + + return TRUE; } static void -accounts_dialog_model_add_columns (EmpathyAccountsDialog *dialog) +accounts_dialog_name_edited_cb (GtkCellRendererText *renderer, + gchar *path, + gchar *new_text, + EmpathyAccountsDialog *dialog) { - GtkTreeView *view; - GtkTreeViewColumn *column; - GtkCellRenderer *cell; - - view = GTK_TREE_VIEW (dialog->treeview); - gtk_tree_view_set_headers_visible (view, TRUE); - - /* Enabled column */ - cell = gtk_cell_renderer_toggle_new (); - gtk_tree_view_insert_column_with_attributes (view, -1, - _("Enabled"), - cell, - "active", COL_ENABLED, - NULL); - g_signal_connect (cell, "toggled", - G_CALLBACK (accounts_dialog_enable_toggled_cb), - dialog); - - /* Account column */ - column = gtk_tree_view_column_new (); - gtk_tree_view_column_set_title (column, _("Accounts")); - gtk_tree_view_column_set_expand (column, TRUE); - gtk_tree_view_append_column (view, column); - - /* Icon renderer */ - cell = gtk_cell_renderer_pixbuf_new (); - gtk_tree_view_column_pack_start (column, cell, FALSE); - gtk_tree_view_column_set_cell_data_func (column, cell, - (GtkTreeCellDataFunc) - accounts_dialog_model_pixbuf_data_func, - dialog, - NULL); - - /* Name renderer */ - cell = gtk_cell_renderer_text_new (); - g_object_set (cell, - "ellipsize", PANGO_ELLIPSIZE_END, - "width-chars", 25, - "editable", TRUE, - NULL); - gtk_tree_view_column_pack_start (column, cell, TRUE); - gtk_tree_view_column_add_attribute (column, cell, "text", COL_NAME); - g_signal_connect (cell, "edited", - G_CALLBACK (accounts_dialog_name_edited_cb), - dialog); - g_signal_connect (cell, "editing-started", - G_CALLBACK (accounts_dialog_name_editing_started_cb), - dialog); + EmpathyAccountSettings *settings; + GtkTreeModel *model; + GtkTreePath *treepath; + GtkTreeIter iter; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + if (empathy_account_manager_get_connecting_accounts + (priv->account_manager) > 0) + { + priv->connecting_id = g_timeout_add (FLASH_TIMEOUT, + (GSourceFunc) accounts_dialog_flash_connecting_cb, + dialog); + } + + model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview)); + treepath = gtk_tree_path_new_from_string (path); + gtk_tree_model_get_iter (model, &iter, treepath); + gtk_tree_model_get (model, &iter, + COL_ACCOUNT_SETTINGS_POINTER, &settings, + -1); + gtk_list_store_set (GTK_LIST_STORE (model), &iter, + COL_NAME, new_text, + -1); + gtk_tree_path_free (treepath); + + empathy_account_settings_set_display_name_async (settings, new_text, + NULL, NULL); + g_object_set (settings, "display-name-overridden", TRUE, NULL); + g_object_unref (settings); } static void -accounts_dialog_model_select_first (EmpathyAccountsDialog *dialog) +accounts_dialog_delete_account_response_cb (GtkDialog *message_dialog, + gint response_id, + gpointer user_data) { - GtkTreeView *view; - GtkTreeModel *model; - GtkTreeSelection *selection; - GtkTreeIter iter; - - /* select first */ - view = GTK_TREE_VIEW (dialog->treeview); - model = gtk_tree_view_get_model (view); - - if (gtk_tree_model_get_iter_first (model, &iter)) { - selection = gtk_tree_view_get_selection (view); - gtk_tree_selection_select_iter (selection, &iter); - } else { - accounts_dialog_update_account (dialog, NULL); - } + EmpathyAccount *account; + GtkTreeModel *model; + GtkTreeIter iter; + GtkTreeSelection *selection; + EmpathyAccountsDialog *account_dialog = EMPATHY_ACCOUNTS_DIALOG (user_data); + EmpathyAccountsDialogPriv *priv = GET_PRIV (account_dialog); + + if (response_id == GTK_RESPONSE_YES) + { + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview)); + + if (!gtk_tree_selection_get_selected (selection, &model, &iter)) + return; + + gtk_tree_model_get (model, &iter, COL_ACCOUNT_POINTER, &account, -1); + + if (account != NULL) + { + empathy_account_remove_async (account, NULL, NULL); + g_object_unref (account); + } + + gtk_list_store_remove (GTK_LIST_STORE (model), &iter); + accounts_dialog_model_select_first (account_dialog); + } + + gtk_widget_destroy (GTK_WIDGET (message_dialog)); } static void -accounts_dialog_model_pixbuf_data_func (GtkTreeViewColumn *tree_column, - GtkCellRenderer *cell, - GtkTreeModel *model, - GtkTreeIter *iter, - EmpathyAccountsDialog *dialog) +accounts_dialog_view_delete_activated_cb (EmpathyCellRendererActivatable *cell, + const gchar *path_string, + EmpathyAccountsDialog *dialog) { - EmpathyAccount *account; - const gchar *icon_name; - GdkPixbuf *pixbuf; - TpConnectionStatus status; - - gtk_tree_model_get (model, iter, - COL_STATUS, &status, - COL_ACCOUNT_POINTER, &account, - -1); - - icon_name = empathy_icon_name_from_account (account); - pixbuf = empathy_pixbuf_from_icon_name (icon_name, GTK_ICON_SIZE_BUTTON); - - if (pixbuf) { - if (status == TP_CONNECTION_STATUS_DISCONNECTED || - (status == TP_CONNECTION_STATUS_CONNECTING && - !dialog->connecting_show)) { - GdkPixbuf *modded_pixbuf; - - modded_pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, - TRUE, - 8, - gdk_pixbuf_get_width (pixbuf), - gdk_pixbuf_get_height (pixbuf)); - - gdk_pixbuf_saturate_and_pixelate (pixbuf, - modded_pixbuf, - 1.0, - TRUE); - g_object_unref (pixbuf); - pixbuf = modded_pixbuf; - } - } - - g_object_set (cell, - "visible", TRUE, - "pixbuf", pixbuf, - NULL); - - g_object_unref (account); - if (pixbuf) { - g_object_unref (pixbuf); - } + EmpathyAccount *account; + GtkTreeModel *model; + GtkTreeIter iter; + GtkWidget *message_dialog; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview)); + + if (!gtk_tree_model_get_iter_from_string (model, &iter, path_string)) + return; + + gtk_tree_model_get (model, &iter, COL_ACCOUNT_POINTER, &account, -1); + + if (account == NULL || !empathy_account_is_valid (account)) + { + gtk_list_store_remove (GTK_LIST_STORE (model), &iter); + accounts_dialog_model_select_first (dialog); + return; + } + + message_dialog = gtk_message_dialog_new + (GTK_WINDOW (priv->window), + GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_QUESTION, + GTK_BUTTONS_NONE, + _("You are about to remove your %s account!\n" + "Are you sure you want to proceed?"), + empathy_account_get_display_name (account)); + + gtk_message_dialog_format_secondary_text + (GTK_MESSAGE_DIALOG (message_dialog), + _("Any associated conversations and chat rooms will NOT be " + "removed if you decide to proceed.\n" + "\n" + "Should you decide to add the account back at a later time, " + "they will still be available.")); + + gtk_dialog_add_button (GTK_DIALOG (message_dialog), + GTK_STOCK_CANCEL, + GTK_RESPONSE_NO); + gtk_dialog_add_button (GTK_DIALOG (message_dialog), + GTK_STOCK_REMOVE, + GTK_RESPONSE_YES); + + g_signal_connect (message_dialog, "response", + G_CALLBACK (accounts_dialog_delete_account_response_cb), dialog); + + gtk_widget_show (message_dialog); + + if (account != NULL) + g_object_unref (account); } -static gboolean -accounts_dialog_get_account_iter (EmpathyAccountsDialog *dialog, - EmpathyAccount *account, - GtkTreeIter *iter) +static void +accounts_dialog_model_add_columns (EmpathyAccountsDialog *dialog) { - GtkTreeView *view; - GtkTreeSelection *selection; - GtkTreeModel *model; - gboolean ok; - - /* Update the status in the model */ - view = GTK_TREE_VIEW (dialog->treeview); - selection = gtk_tree_view_get_selection (view); - model = gtk_tree_view_get_model (view); - - for (ok = gtk_tree_model_get_iter_first (model, iter); - ok; - ok = gtk_tree_model_iter_next (model, iter)) { - EmpathyAccount *this_account; - gboolean equal; - - gtk_tree_model_get (model, iter, - COL_ACCOUNT_POINTER, &this_account, - -1); - - equal = empathy_account_equal (this_account, account); - g_object_unref (this_account); - - if (equal) { - return TRUE; - } - } - - return FALSE; + GtkTreeView *view; + GtkTreeViewColumn *column; + GtkCellRenderer *cell; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + view = GTK_TREE_VIEW (priv->treeview); + gtk_tree_view_set_headers_visible (view, FALSE); + + /* Account column */ + column = gtk_tree_view_column_new (); + gtk_tree_view_column_set_expand (column, TRUE); + gtk_tree_view_append_column (view, column); + + /* Icon renderer */ + cell = gtk_cell_renderer_pixbuf_new (); + gtk_tree_view_column_pack_start (column, cell, FALSE); + gtk_tree_view_column_set_cell_data_func (column, cell, + (GtkTreeCellDataFunc) + accounts_dialog_model_pixbuf_data_func, + dialog, + NULL); + + /* Name renderer */ + cell = gtk_cell_renderer_text_new (); + g_object_set (cell, + "ellipsize", PANGO_ELLIPSIZE_END, + "width-chars", 25, + "editable", TRUE, + NULL); + gtk_tree_view_column_pack_start (column, cell, TRUE); + gtk_tree_view_column_add_attribute (column, cell, "text", COL_NAME); + g_signal_connect (cell, "edited", + G_CALLBACK (accounts_dialog_name_edited_cb), + dialog); + g_signal_connect (cell, "editing-started", + G_CALLBACK (accounts_dialog_name_editing_started_cb), + dialog); + + /* Delete column */ + cell = empathy_cell_renderer_activatable_new (); + gtk_tree_view_column_pack_start (column, cell, FALSE); + g_object_set (cell, + "icon-name", GTK_STOCK_DELETE, + NULL); + + g_signal_connect (cell, "path-activated", + G_CALLBACK (accounts_dialog_view_delete_activated_cb), + dialog); } -static EmpathyAccount * -accounts_dialog_model_get_selected (EmpathyAccountsDialog *dialog) +static EmpathyAccountSettings * +accounts_dialog_model_get_selected_settings (EmpathyAccountsDialog *dialog) { - GtkTreeView *view; - GtkTreeModel *model; - GtkTreeSelection *selection; - GtkTreeIter iter; - EmpathyAccount *account; + GtkTreeView *view; + GtkTreeModel *model; + GtkTreeSelection *selection; + GtkTreeIter iter; + EmpathyAccountSettings *settings; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); - view = GTK_TREE_VIEW (dialog->treeview); - selection = gtk_tree_view_get_selection (view); + view = GTK_TREE_VIEW (priv->treeview); + selection = gtk_tree_view_get_selection (view); - if (!gtk_tree_selection_get_selected (selection, &model, &iter)) { - return NULL; - } + if (!gtk_tree_selection_get_selected (selection, &model, &iter)) + return NULL; - gtk_tree_model_get (model, &iter, COL_ACCOUNT_POINTER, &account, -1); + gtk_tree_model_get (model, &iter, + COL_ACCOUNT_SETTINGS_POINTER, &settings, -1); - return account; + return settings; } static void -accounts_dialog_model_set_selected (EmpathyAccountsDialog *dialog, - EmpathyAccount *account) +accounts_dialog_model_selection_changed (GtkTreeSelection *selection, + EmpathyAccountsDialog *dialog) +{ + EmpathyAccountSettings *settings; + GtkTreeModel *model; + GtkTreeIter iter; + gboolean is_selection; + + is_selection = gtk_tree_selection_get_selected (selection, &model, &iter); + + settings = accounts_dialog_model_get_selected_settings (dialog); + + if (settings != NULL) + empathy_account_settings_discard_changes (settings); + + accounts_dialog_update_settings (dialog, settings); + + if (settings != NULL) + g_object_unref (settings); +} + +static void +accounts_dialog_model_setup (EmpathyAccountsDialog *dialog) { - GtkTreeSelection *selection; - GtkTreeIter iter; + GtkListStore *store; + GtkTreeSelection *selection; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + store = gtk_list_store_new (COL_COUNT, + G_TYPE_STRING, /* name */ + G_TYPE_UINT, /* status */ + EMPATHY_TYPE_ACCOUNT, /* account */ + EMPATHY_TYPE_ACCOUNT_SETTINGS); /* settings */ + + gtk_tree_view_set_model (GTK_TREE_VIEW (priv->treeview), + GTK_TREE_MODEL (store)); + + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview)); + gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->treeview)); - if (accounts_dialog_get_account_iter (dialog, account, &iter)) { - gtk_tree_selection_select_iter (selection, &iter); - } + g_signal_connect (selection, "changed", + G_CALLBACK (accounts_dialog_model_selection_changed), + dialog); + + gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store), + COL_NAME, GTK_SORT_ASCENDING); + + accounts_dialog_model_add_columns (dialog); + + g_object_unref (store); } static gboolean -accounts_dialog_model_remove_selected (EmpathyAccountsDialog *dialog) +accounts_dialog_get_settings_iter (EmpathyAccountsDialog *dialog, + EmpathyAccountSettings *settings, + GtkTreeIter *iter) { - GtkTreeView *view; - GtkTreeModel *model; - GtkTreeSelection *selection; - GtkTreeIter iter; + GtkTreeView *view; + GtkTreeSelection *selection; + GtkTreeModel *model; + gboolean ok; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + /* Update the status in the model */ + view = GTK_TREE_VIEW (priv->treeview); + selection = gtk_tree_view_get_selection (view); + model = gtk_tree_view_get_model (view); + + for (ok = gtk_tree_model_get_iter_first (model, iter); + ok; + ok = gtk_tree_model_iter_next (model, iter)) + { + EmpathyAccountSettings *this_settings; + gboolean equal; + + gtk_tree_model_get (model, iter, + COL_ACCOUNT_SETTINGS_POINTER, &this_settings, + -1); + + equal = (this_settings == settings); + g_object_unref (this_settings); + + if (equal) + return TRUE; + } + + return FALSE; +} - view = GTK_TREE_VIEW (dialog->treeview); - selection = gtk_tree_view_get_selection (view); +static gboolean +accounts_dialog_get_account_iter (EmpathyAccountsDialog *dialog, + EmpathyAccount *account, + GtkTreeIter *iter) +{ + GtkTreeView *view; + GtkTreeSelection *selection; + GtkTreeModel *model; + gboolean ok; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + /* Update the status in the model */ + view = GTK_TREE_VIEW (priv->treeview); + selection = gtk_tree_view_get_selection (view); + model = gtk_tree_view_get_model (view); + + for (ok = gtk_tree_model_get_iter_first (model, iter); + ok; + ok = gtk_tree_model_iter_next (model, iter)) + { + EmpathyAccountSettings *settings; + gboolean equal; + + gtk_tree_model_get (model, iter, + COL_ACCOUNT_SETTINGS_POINTER, &settings, + -1); + + equal = empathy_account_settings_has_account (settings, account); + g_object_unref (settings); + + if (equal) + return TRUE; + } + + return FALSE; +} - if (!gtk_tree_selection_get_selected (selection, &model, &iter)) { - return FALSE; - } +static void +accounts_dialog_model_set_selected (EmpathyAccountsDialog *dialog, + EmpathyAccountSettings *settings) +{ + GtkTreeSelection *selection; + GtkTreeIter iter; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); - return gtk_list_store_remove (GTK_LIST_STORE (model), &iter); + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview)); + if (accounts_dialog_get_settings_iter (dialog, settings, &iter)) + gtk_tree_selection_select_iter (selection, &iter); } - static void -accounts_dialog_model_selection_changed (GtkTreeSelection *selection, - EmpathyAccountsDialog *dialog) +accounts_dialog_add (EmpathyAccountsDialog *dialog, + EmpathyAccountSettings *settings) { - EmpathyAccount *account; - GtkTreeModel *model; - GtkTreeIter iter; - gboolean is_selection; + GtkTreeModel *model; + GtkTreeIter iter; + const gchar *name; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); - is_selection = gtk_tree_selection_get_selected (selection, &model, &iter); + model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview)); + name = empathy_account_settings_get_display_name (settings); - account = accounts_dialog_model_get_selected (dialog); - accounts_dialog_update_account (dialog, account); + gtk_list_store_append (GTK_LIST_STORE (model), &iter); - if (account) { - g_object_unref (account); - } + gtk_list_store_set (GTK_LIST_STORE (model), &iter, + COL_NAME, name, + COL_STATUS, TP_CONNECTION_STATUS_DISCONNECTED, + COL_ACCOUNT_SETTINGS_POINTER, settings, + -1); } static void -accounts_dialog_add_or_update_account (EmpathyAccountsDialog *dialog, - EmpathyAccount *account) +accounts_dialog_connection_changed_cb (EmpathyAccountManager *manager, + EmpathyAccount *account, + TpConnectionStatusReason reason, + TpConnectionStatus current, + TpConnectionStatus previous, + EmpathyAccountsDialog *dialog) { - GtkTreeModel *model; - GtkTreeIter iter; - TpConnectionStatus status; - const gchar *name; - gboolean enabled; - - model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview)); - g_object_get (account, "status", &status, NULL); - name = empathy_account_get_display_name (account); - enabled = empathy_account_is_enabled (account); - - if (!accounts_dialog_get_account_iter (dialog, account, &iter)) { - DEBUG ("Adding new account"); - gtk_list_store_append (GTK_LIST_STORE (model), &iter); - } - - gtk_list_store_set (GTK_LIST_STORE (model), &iter, - COL_ENABLED, enabled, - COL_NAME, name, - COL_STATUS, status, - COL_ACCOUNT_POINTER, account, - -1); - - accounts_dialog_connection_changed_cb (dialog->account_manager, - account, - TP_CONNECTION_STATUS_REASON_NONE_SPECIFIED, - status, - TP_CONNECTION_STATUS_DISCONNECTED, - dialog); + GtkTreeModel *model; + GtkTreeIter iter; + gboolean found; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + /* Update the status in the model */ + model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview)); + + if (accounts_dialog_get_account_iter (dialog, account, &iter)) + { + GtkTreePath *path; + + gtk_list_store_set (GTK_LIST_STORE (model), &iter, + COL_STATUS, current, + -1); + + path = gtk_tree_model_get_path (model, &iter); + gtk_tree_model_row_changed (model, path, &iter); + gtk_tree_path_free (path); + } + + found = (empathy_account_manager_get_connecting_accounts (manager) > 0); + + if (!found && priv->connecting_id) + { + g_source_remove (priv->connecting_id); + priv->connecting_id = 0; + } + + if (found && !priv->connecting_id) + priv->connecting_id = g_timeout_add (FLASH_TIMEOUT, + (GSourceFunc) accounts_dialog_flash_connecting_cb, + dialog); } static void -accounts_dialog_account_added_cb (EmpathyAccountManager *manager, - EmpathyAccount *account, - EmpathyAccountsDialog *dialog) +accounts_dialog_add_account (EmpathyAccountsDialog *dialog, + EmpathyAccount *account) { - const gchar *current_name; - gchar *account_param = NULL; - - accounts_dialog_add_or_update_account (dialog, account); - - /* Change the display name to "%s (%s)" % (protocol, account). - * - The protocol is the display name of the profile. - * - The account should be the normalized name of the EmpathyAccount but - * it's not set until first connection, so we get the "account" - * parameter for CM that have it. */ - current_name = empathy_account_get_display_name (account); - account_param = empathy_account_get_param_string (account, "account"); - if (!EMP_STR_EMPTY (account_param)) { - McProfile *profile; - const gchar *profile_name; - gchar *new_name; - - profile = empathy_account_get_profile (account); - profile_name = mc_profile_get_display_name (profile); - new_name = g_strdup_printf ("%s (%s)", profile_name, - account_param); - - DEBUG ("Setting new display name for account %s: '%s'", - empathy_account_get_unique_name (account), new_name); - - empathy_account_set_display_name (account, new_name); - g_free (new_name); - g_object_unref (profile); - } else { - /* FIXME: This CM has no account parameter, what can be done? */ - } - g_free (account_param); + EmpathyAccountSettings *settings; + GtkTreeModel *model; + GtkTreeIter iter; + TpConnectionStatus status; + const gchar *name; + gboolean enabled; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview)); + g_object_get (account, "connection-status", &status, NULL); + name = empathy_account_get_display_name (account); + enabled = empathy_account_is_enabled (account); + + if (!accounts_dialog_get_account_iter (dialog, account, &iter)) + gtk_list_store_append (GTK_LIST_STORE (model), &iter); + + settings = empathy_account_settings_new_for_account (account); + + gtk_list_store_set (GTK_LIST_STORE (model), &iter, + COL_NAME, name, + COL_STATUS, status, + COL_ACCOUNT_POINTER, account, + COL_ACCOUNT_SETTINGS_POINTER, settings, + -1); + + accounts_dialog_connection_changed_cb (priv->account_manager, + account, + TP_CONNECTION_STATUS_REASON_NONE_SPECIFIED, + status, + TP_CONNECTION_STATUS_DISCONNECTED, + dialog); + + g_object_unref (settings); } static void -accounts_dialog_account_removed_cb (EmpathyAccountManager *manager, - EmpathyAccount *account, - EmpathyAccountsDialog *dialog) +accounts_dialog_update (EmpathyAccountsDialog *dialog, + EmpathyAccountSettings *settings) { + GtkTreeModel *model; + GtkTreeIter iter; + TpConnectionStatus status = TP_CONNECTION_STATUS_DISCONNECTED; + const gchar *name; + gboolean enabled = FALSE; + EmpathyAccount *account; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview)); + name = empathy_account_settings_get_display_name (settings); + + account = empathy_account_settings_get_account (settings); + if (account != NULL) + { + enabled = empathy_account_is_enabled (account); + g_object_get (account, "connection-status", &status, NULL); + } + + accounts_dialog_get_settings_iter (dialog, settings, &iter); + gtk_list_store_set (GTK_LIST_STORE (model), &iter, + COL_NAME, name, + COL_STATUS, status, + COL_ACCOUNT_POINTER, account, + COL_ACCOUNT_SETTINGS_POINTER, settings, + -1); +} - accounts_dialog_model_set_selected (dialog, account); - accounts_dialog_model_remove_selected (dialog); +static void +accounts_dialog_account_added_cb (EmpathyAccountManager *manager, + EmpathyAccount *account, + EmpathyAccountsDialog *dialog) +{ + accounts_dialog_add_account (dialog, account); } -static gboolean -accounts_dialog_row_changed_foreach (GtkTreeModel *model, - GtkTreePath *path, - GtkTreeIter *iter, - gpointer user_data) + +static void +accounts_dialog_account_removed_cb (EmpathyAccountManager *manager, + EmpathyAccount *account, + EmpathyAccountsDialog *dialog) { - gtk_tree_model_row_changed (model, path, iter); + GtkTreeIter iter; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); - return FALSE; + if (accounts_dialog_get_account_iter (dialog, account, &iter)) + gtk_list_store_remove (GTK_LIST_STORE ( + gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview))), &iter); } -static gboolean -accounts_dialog_flash_connecting_cb (EmpathyAccountsDialog *dialog) +static void +enable_or_disable_account (EmpathyAccountsDialog *dialog, + EmpathyAccount *account, + gboolean enabled) { - GtkTreeView *view; - GtkTreeModel *model; + GtkTreeModel *model; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); - dialog->connecting_show = !dialog->connecting_show; + /* Update the status in the model */ + model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview)); - view = GTK_TREE_VIEW (dialog->treeview); - model = gtk_tree_view_get_model (view); + DEBUG ("Account %s is now %s", + empathy_account_get_display_name (account), + enabled ? "enabled" : "disabled"); +} - gtk_tree_model_foreach (model, accounts_dialog_row_changed_foreach, NULL); +static void +accounts_dialog_account_disabled_cb (EmpathyAccountManager *manager, + EmpathyAccount *account, + EmpathyAccountsDialog *dialog) +{ + enable_or_disable_account (dialog, account, FALSE); +} - return TRUE; +static void +accounts_dialog_account_enabled_cb (EmpathyAccountManager *manager, + EmpathyAccount *account, + EmpathyAccountsDialog *dialog) +{ + enable_or_disable_account (dialog, account, TRUE); } static void -accounts_dialog_connection_changed_cb (EmpathyAccountManager *manager, - EmpathyAccount *account, - TpConnectionStatusReason reason, - TpConnectionStatus current, - TpConnectionStatus previous, - EmpathyAccountsDialog *dialog) +accounts_dialog_account_changed_cb (EmpathyAccountManager *manager, + EmpathyAccount *account, + EmpathyAccountsDialog *dialog) { - GtkTreeModel *model; - GtkTreeIter iter; - gboolean found; + EmpathyAccountSettings *settings, *selected_settings; + GtkTreeModel *model; + GtkTreeIter iter; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); - /* Update the status in the model */ - model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview)); + model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview)); - if (accounts_dialog_get_account_iter (dialog, account, &iter)) { - GtkTreePath *path; + if (!accounts_dialog_get_account_iter (dialog, account, &iter)) + return; - gtk_list_store_set (GTK_LIST_STORE (model), &iter, - COL_STATUS, current, - -1); + gtk_tree_model_get (model, &iter, + COL_ACCOUNT_SETTINGS_POINTER, &settings, + -1); - path = gtk_tree_model_get_path (model, &iter); - gtk_tree_model_row_changed (model, path, &iter); - gtk_tree_path_free (path); - } + accounts_dialog_update (dialog, settings); + selected_settings = accounts_dialog_model_get_selected_settings (dialog); - found = (empathy_account_manager_get_connecting_accounts (manager) > 0); + if (settings == selected_settings) + accounts_dialog_update_name_label (dialog, + empathy_account_settings_get_display_name (settings)); - if (!found && dialog->connecting_id) { - g_source_remove (dialog->connecting_id); - dialog->connecting_id = 0; - } + if (settings) + g_object_unref (settings); - if (found && !dialog->connecting_id) { - dialog->connecting_id = g_timeout_add (FLASH_TIMEOUT, - (GSourceFunc) accounts_dialog_flash_connecting_cb, - dialog); - } + if (selected_settings) + g_object_unref (selected_settings); } static void -enable_or_disable_account (EmpathyAccountsDialog *dialog, - EmpathyAccount *account, - gboolean enabled) +accounts_dialog_button_create_clicked_cb (GtkWidget *button, + EmpathyAccountsDialog *dialog) { - GtkTreeModel *model; - GtkTreeIter iter; + EmpathyAccountSettings *settings; + gchar *str; + const gchar *display_name; + TpConnectionManager *cm; + TpConnectionManagerProtocol *proto; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + cm = empathy_protocol_chooser_dup_selected ( + EMPATHY_PROTOCOL_CHOOSER (priv->combobox_protocol), &proto); + display_name = empathy_protocol_name_to_display_name (proto->name); + + if (display_name == NULL) + display_name = proto->name; + + /* Create account */ + /* To translator: %s is the name of the protocol, such as "Google Talk" or + * "Yahoo! + */ + str = g_strdup_printf (_("New %s account"), display_name); + settings = empathy_account_settings_new (cm->name, proto->name, str); + + g_free (str); + + if (tp_connection_manager_protocol_can_register (proto)) + { + gboolean active; + + active = gtk_toggle_button_get_active + (GTK_TOGGLE_BUTTON (priv->radiobutton_register)); + if (active) + empathy_account_settings_set_boolean (settings, "register", TRUE); + } + + accounts_dialog_add (dialog, settings); + accounts_dialog_model_set_selected (dialog, settings); + + g_object_unref (settings); + g_object_unref (cm); +} - /* Update the status in the model */ - model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview)); +static void +accounts_dialog_button_back_clicked_cb (GtkWidget *button, + EmpathyAccountsDialog *dialog) +{ + EmpathyAccountSettings *settings; - DEBUG ("Account %s is now %s", - empathy_account_get_display_name (account), - enabled ? "enabled" : "disabled"); + settings = accounts_dialog_model_get_selected_settings (dialog); + accounts_dialog_update_settings (dialog, settings); - if (accounts_dialog_get_account_iter (dialog, account, &iter)) { - gtk_list_store_set (GTK_LIST_STORE (model), &iter, - COL_ENABLED, enabled, - -1); - } + if (settings) + g_object_unref (settings); } static void -accounts_dialog_account_disabled_cb (EmpathyAccountManager *manager, - EmpathyAccount *account, - EmpathyAccountsDialog *dialog) +accounts_dialog_button_help_clicked_cb (GtkWidget *button, + EmpathyAccountsDialog *dialog) { - enable_or_disable_account (dialog, account, FALSE); + empathy_url_show (button, "ghelp:empathy?empathy-create-account"); } static void -accounts_dialog_account_enabled_cb (EmpathyAccountManager *manager, - EmpathyAccount *account, - EmpathyAccountsDialog *dialog) +accounts_dialog_response_cb (GtkWidget *widget, + gint response, + EmpathyAccountsDialog *dialog) { - enable_or_disable_account (dialog, account, TRUE); + if (response == GTK_RESPONSE_CLOSE) + gtk_widget_destroy (widget); } static void -accounts_dialog_account_changed_cb (EmpathyAccountManager *manager, - EmpathyAccount *account, - EmpathyAccountsDialog *dialog) +accounts_dialog_destroy_cb (GtkObject *obj, + EmpathyAccountsDialog *dialog) { - EmpathyAccount *selected_account; + DEBUG ("%p", obj); - accounts_dialog_add_or_update_account (dialog, account); - selected_account = accounts_dialog_model_get_selected (dialog); - if (empathy_account_equal (account, selected_account)) { - accounts_dialog_update_name_label (dialog, account); - } + g_object_unref (dialog); } static void -accounts_dialog_button_create_clicked_cb (GtkWidget *button, - EmpathyAccountsDialog *dialog) +accounts_dialog_set_selected_account (EmpathyAccountsDialog *dialog, + EmpathyAccount *account) { - McProfile *profile; - EmpathyAccount *account; - gchar *str; - McProfileCapabilityFlags cap; - - profile = empathy_profile_chooser_dup_selected ( - EMPATHY_PROFILE_CHOOSER (dialog->combobox_profile)); - - /* Create account */ - account = empathy_account_manager_create (dialog->account_manager, profile); - if (account == NULL) { - /* We can't display an error to the user as MC doesn't give us - * any clue about the reason of the failure... */ - g_object_unref (profile); - return; - } - - /* To translator: %s is the protocol name */ - str = g_strdup_printf (_("New %s account"), - mc_profile_get_display_name (profile)); - empathy_account_set_display_name (account, str); - g_free (str); - - cap = mc_profile_get_capabilities (profile); - if (cap & MC_PROFILE_CAPABILITY_REGISTRATION_UI) { - gboolean active; - - active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->radiobutton_register)); - if (active) { - empathy_account_set_param_boolean (account, "register", TRUE); - } - } - - accounts_dialog_add_or_update_account (dialog, account); - accounts_dialog_model_set_selected (dialog, account); - - g_object_unref (account); - g_object_unref (profile); + GtkTreeSelection *selection; + GtkTreeIter iter; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview)); + if (accounts_dialog_get_account_iter (dialog, account, &iter)) + gtk_tree_selection_select_iter (selection, &iter); } static void -accounts_dialog_button_back_clicked_cb (GtkWidget *button, - EmpathyAccountsDialog *dialog) +accounts_dialog_cms_ready_cb (EmpathyConnectionManagers *cms, + GParamSpec *pspec, + EmpathyAccountsDialog *dialog) { - EmpathyAccount *account; - - account = accounts_dialog_model_get_selected (dialog); - accounts_dialog_update_account (dialog, account); + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + if (empathy_connection_managers_is_ready (cms)) + { + accounts_dialog_update_settings (dialog, NULL); + + if (priv->initial_selection != NULL) + { + accounts_dialog_set_selected_account + (dialog, priv->initial_selection); + g_object_unref (priv->initial_selection); + priv->initial_selection = NULL; + } + } } static void -accounts_dialog_profile_changed_cb (GtkWidget *widget, - EmpathyAccountsDialog *dialog) +accounts_dialog_build_ui (EmpathyAccountsDialog *dialog) { - McProfile *profile; - McProfileCapabilityFlags cap; - - profile = empathy_profile_chooser_dup_selected ( - EMPATHY_PROFILE_CHOOSER (dialog->combobox_profile)); - cap = mc_profile_get_capabilities (profile); - - if (cap & MC_PROFILE_CAPABILITY_REGISTRATION_UI) { - gtk_widget_show (dialog->radiobutton_register); - gtk_widget_show (dialog->radiobutton_reuse); - } else { - gtk_widget_hide (dialog->radiobutton_register); - gtk_widget_hide (dialog->radiobutton_reuse); - } - g_object_unref (profile); + GtkBuilder *gui; + gchar *filename; + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + filename = empathy_file_lookup ("empathy-accounts-dialog.ui", "src"); + + gui = empathy_builder_get_file (filename, + "accounts_dialog", &priv->window, + "vbox_details", &priv->vbox_details, + "frame_no_protocol", &priv->frame_no_protocol, + "alignment_settings", &priv->alignment_settings, + "treeview", &priv->treeview, + "frame_new_account", &priv->frame_new_account, + "hbox_type", &priv->hbox_type, + "button_create", &priv->button_create, + "button_back", &priv->button_back, + "radiobutton_reuse", &priv->radiobutton_reuse, + "radiobutton_register", &priv->radiobutton_register, + "image_type", &priv->image_type, + "label_name", &priv->label_name, + "button_add", &priv->button_add, + NULL); + g_free (filename); + + empathy_builder_connect (gui, dialog, + "accounts_dialog", "response", accounts_dialog_response_cb, + "accounts_dialog", "destroy", accounts_dialog_destroy_cb, + "button_create", "clicked", accounts_dialog_button_create_clicked_cb, + "button_back", "clicked", accounts_dialog_button_back_clicked_cb, + "button_add", "clicked", accounts_dialog_button_add_clicked_cb, + "button_help", "clicked", accounts_dialog_button_help_clicked_cb, + NULL); + + g_object_unref (gui); + + priv->combobox_protocol = empathy_protocol_chooser_new (); + gtk_box_pack_start (GTK_BOX (priv->hbox_type), + priv->combobox_protocol, + TRUE, TRUE, 0); + gtk_widget_show (priv->combobox_protocol); + g_signal_connect (priv->combobox_protocol, "changed", + G_CALLBACK (accounts_dialog_protocol_changed_cb), + dialog); + + if (priv->parent_window) + gtk_window_set_transient_for (GTK_WINDOW (priv->window), + priv->parent_window); } static void -accounts_dialog_button_add_clicked_cb (GtkWidget *button, - EmpathyAccountsDialog *dialog) +do_dispose (GObject *obj) +{ + EmpathyAccountsDialog *dialog = EMPATHY_ACCOUNTS_DIALOG (obj); + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + + /* Disconnect signals */ + g_signal_handlers_disconnect_by_func (priv->account_manager, + accounts_dialog_account_added_cb, + dialog); + g_signal_handlers_disconnect_by_func (priv->account_manager, + accounts_dialog_account_removed_cb, + dialog); + g_signal_handlers_disconnect_by_func (priv->account_manager, + accounts_dialog_account_enabled_cb, + dialog); + g_signal_handlers_disconnect_by_func (priv->account_manager, + accounts_dialog_account_disabled_cb, + dialog); + g_signal_handlers_disconnect_by_func (priv->account_manager, + accounts_dialog_account_changed_cb, + dialog); + g_signal_handlers_disconnect_by_func (priv->account_manager, + accounts_dialog_connection_changed_cb, + dialog); + + if (priv->connecting_id) + g_source_remove (priv->connecting_id); + + if (priv->account_manager != NULL) + { + g_object_unref (priv->account_manager); + priv->account_manager = NULL; + } + + if (priv->cms != NULL) + { + g_object_unref (priv->cms); + priv->cms = NULL; + } + + if (priv->initial_selection != NULL) + g_object_unref (priv->initial_selection); + priv->initial_selection = NULL; + + G_OBJECT_CLASS (empathy_accounts_dialog_parent_class)->dispose (obj); +} + +static GObject * +do_constructor (GType type, + guint n_props, + GObjectConstructParam *props) { - GtkTreeView *view; - GtkTreeSelection *selection; - GtkTreeModel *model; - - view = GTK_TREE_VIEW (dialog->treeview); - model = gtk_tree_view_get_model (view); - selection = gtk_tree_view_get_selection (view); - gtk_tree_selection_unselect_all (selection); - - gtk_widget_set_sensitive (dialog->button_add, FALSE); - gtk_widget_set_sensitive (dialog->button_remove, FALSE); - gtk_widget_hide (dialog->vbox_details); - gtk_widget_hide (dialog->frame_no_profile); - gtk_widget_show (dialog->frame_new_account); - - /* If we have no account, no need of a back button */ - if (gtk_tree_model_iter_n_children (model, NULL) > 0) { - gtk_widget_show (dialog->button_back); - } else { - gtk_widget_hide (dialog->button_back); - } - - accounts_dialog_profile_changed_cb (dialog->radiobutton_register, dialog); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->radiobutton_reuse), - TRUE); - gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->combobox_profile), 0); - gtk_widget_grab_focus (dialog->combobox_profile); + GObject *retval; + + if (dialog_singleton) + { + retval = G_OBJECT (dialog_singleton); + g_object_ref (retval); + } + else + { + retval = + G_OBJECT_CLASS (empathy_accounts_dialog_parent_class)->constructor + (type, n_props, props); + + dialog_singleton = EMPATHY_ACCOUNTS_DIALOG (retval); + g_object_add_weak_pointer (retval, (gpointer) &dialog_singleton); + } + + return retval; } static void -accounts_dialog_button_help_clicked_cb (GtkWidget *button, - EmpathyAccountsDialog *dialog) +do_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) { - empathy_url_show (button, "ghelp:empathy#add-account"); + EmpathyAccountsDialogPriv *priv = GET_PRIV (object); + + switch (property_id) + { + case PROP_PARENT: + g_value_set_object (value, priv->parent_window); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } } static void -accounts_dialog_button_remove_clicked_cb (GtkWidget *button, - EmpathyAccountsDialog *dialog) +do_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) { - EmpathyAccount *account; - GtkWidget *message_dialog; - gint res; - - account = accounts_dialog_model_get_selected (dialog); - - if (!empathy_account_is_valid (account)) { - accounts_dialog_model_remove_selected (dialog); - accounts_dialog_model_select_first (dialog); - return; - } - message_dialog = gtk_message_dialog_new - (GTK_WINDOW (dialog->window), - GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_QUESTION, - GTK_BUTTONS_NONE, - _("You are about to remove your %s account!\n" - "Are you sure you want to proceed?"), - empathy_account_get_display_name (account)); - - gtk_message_dialog_format_secondary_text - (GTK_MESSAGE_DIALOG (message_dialog), - _("Any associated conversations and chat rooms will NOT be " - "removed if you decide to proceed.\n" - "\n" - "Should you decide to add the account back at a later time, " - "they will still be available.")); - - gtk_dialog_add_button (GTK_DIALOG (message_dialog), - GTK_STOCK_CANCEL, - GTK_RESPONSE_NO); - gtk_dialog_add_button (GTK_DIALOG (message_dialog), - GTK_STOCK_REMOVE, - GTK_RESPONSE_YES); - - gtk_widget_show (message_dialog); - res = gtk_dialog_run (GTK_DIALOG (message_dialog)); - - if (res == GTK_RESPONSE_YES) { - empathy_account_manager_remove (dialog->account_manager, account); - accounts_dialog_model_select_first (dialog); - } - gtk_widget_destroy (message_dialog); + EmpathyAccountsDialogPriv *priv = GET_PRIV (object); + + switch (property_id) + { + case PROP_PARENT: + priv->parent_window = g_value_get_object (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } } static void -accounts_dialog_button_import_clicked_cb (GtkWidget *button, - EmpathyAccountsDialog *dialog) +do_constructed (GObject *object) { - empathy_import_dialog_show (GTK_WINDOW (dialog->window), TRUE); + EmpathyAccountsDialog *dialog = EMPATHY_ACCOUNTS_DIALOG (object); + EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog); + GList *accounts, *l; + gboolean import_asked; + + accounts_dialog_build_ui (dialog); + + /* Set up signalling */ + priv->account_manager = empathy_account_manager_dup_singleton (); + + g_signal_connect (priv->account_manager, "account-created", + G_CALLBACK (accounts_dialog_account_added_cb), + dialog); + g_signal_connect (priv->account_manager, "account-deleted", + G_CALLBACK (accounts_dialog_account_removed_cb), + dialog); + g_signal_connect (priv->account_manager, "account-enabled", + G_CALLBACK (accounts_dialog_account_enabled_cb), + dialog); + g_signal_connect (priv->account_manager, "account-disabled", + G_CALLBACK (accounts_dialog_account_disabled_cb), + dialog); + g_signal_connect (priv->account_manager, "account-changed", + G_CALLBACK (accounts_dialog_account_changed_cb), + dialog); + g_signal_connect (priv->account_manager, "account-connection-changed", + G_CALLBACK (accounts_dialog_connection_changed_cb), + dialog); + + accounts_dialog_model_setup (dialog); + + /* Add existing accounts */ + accounts = empathy_account_manager_dup_accounts (priv->account_manager); + for (l = accounts; l; l = l->next) + { + accounts_dialog_add_account (dialog, l->data); + g_object_unref (l->data); + } + g_list_free (accounts); + + priv->cms = empathy_connection_managers_dup_singleton (); + if (!empathy_connection_managers_is_ready (priv->cms)) + g_signal_connect (priv->cms, "notify::ready", + G_CALLBACK (accounts_dialog_cms_ready_cb), dialog); + + accounts_dialog_model_select_first (dialog); + + empathy_conf_get_bool (empathy_conf_get (), + EMPATHY_PREFS_IMPORT_ASKED, &import_asked); + + + if (empathy_import_accounts_to_import ()) + { + + if (!import_asked) + { + GtkWidget *import_dialog; + + empathy_conf_set_bool (empathy_conf_get (), + EMPATHY_PREFS_IMPORT_ASKED, TRUE); + import_dialog = empathy_import_dialog_new (GTK_WINDOW (priv->window), + FALSE); + gtk_widget_show (import_dialog); + } + } } static void -accounts_dialog_response_cb (GtkWidget *widget, - gint response, - EmpathyAccountsDialog *dialog) +empathy_accounts_dialog_class_init (EmpathyAccountsDialogClass *klass) { - if (response == GTK_RESPONSE_CLOSE) { - gtk_widget_destroy (widget); - } + GObjectClass *oclass = G_OBJECT_CLASS (klass); + GParamSpec *param_spec; + + oclass->constructor = do_constructor; + oclass->dispose = do_dispose; + oclass->constructed = do_constructed; + oclass->set_property = do_set_property; + oclass->get_property = do_get_property; + + param_spec = g_param_spec_object ("parent", + "parent", "The parent window", + GTK_TYPE_WINDOW, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); + g_object_class_install_property (oclass, PROP_PARENT, param_spec); + + g_type_class_add_private (klass, sizeof (EmpathyAccountsDialogPriv)); } static void -accounts_dialog_destroy_cb (GtkWidget *widget, - EmpathyAccountsDialog *dialog) +empathy_accounts_dialog_init (EmpathyAccountsDialog *dialog) { - GList *accounts, *l; - - /* Disconnect signals */ - g_signal_handlers_disconnect_by_func (dialog->account_manager, - accounts_dialog_account_added_cb, - dialog); - g_signal_handlers_disconnect_by_func (dialog->account_manager, - accounts_dialog_account_removed_cb, - dialog); - g_signal_handlers_disconnect_by_func (dialog->account_manager, - accounts_dialog_account_enabled_cb, - dialog); - g_signal_handlers_disconnect_by_func (dialog->account_manager, - accounts_dialog_account_disabled_cb, - dialog); - g_signal_handlers_disconnect_by_func (dialog->account_manager, - accounts_dialog_account_changed_cb, - dialog); - g_signal_handlers_disconnect_by_func (dialog->account_manager, - accounts_dialog_connection_changed_cb, - dialog); - - /* Delete incomplete accounts */ - accounts = empathy_account_manager_dup_accounts (dialog->account_manager); - for (l = accounts; l; l = l->next) { - EmpathyAccount *account; - - account = l->data; - if (!empathy_account_is_valid (account)) { - /* FIXME: Warn the user the account is not complete - * and is going to be removed. */ - empathy_account_manager_remove (dialog->account_manager, account); - } - - g_object_unref (account); - } - g_list_free (accounts); - - if (dialog->connecting_id) { - g_source_remove (dialog->connecting_id); - } - - g_object_unref (dialog->account_manager); - g_object_unref (dialog->mc); - - g_free (dialog); + EmpathyAccountsDialogPriv *priv; + + priv = G_TYPE_INSTANCE_GET_PRIVATE ((dialog), + EMPATHY_TYPE_ACCOUNTS_DIALOG, + EmpathyAccountsDialogPriv); + dialog->priv = priv; } +/* public methods */ + GtkWidget * empathy_accounts_dialog_show (GtkWindow *parent, - EmpathyAccount *selected_account) + EmpathyAccount *selected_account) { - static EmpathyAccountsDialog *dialog = NULL; - GtkBuilder *gui; - gchar *filename; - GList *accounts, *l; - gboolean import_asked; - - if (dialog) { - gtk_window_present (GTK_WINDOW (dialog->window)); - return dialog->window; - } - - dialog = g_new0 (EmpathyAccountsDialog, 1); - - filename = empathy_file_lookup ("empathy-accounts-dialog.ui", - "src"); - gui = empathy_builder_get_file (filename, - "accounts_dialog", &dialog->window, - "vbox_details", &dialog->vbox_details, - "frame_no_profile", &dialog->frame_no_profile, - "alignment_settings", &dialog->alignment_settings, - "treeview", &dialog->treeview, - "frame_new_account", &dialog->frame_new_account, - "hbox_type", &dialog->hbox_type, - "button_create", &dialog->button_create, - "button_back", &dialog->button_back, - "radiobutton_reuse", &dialog->radiobutton_reuse, - "radiobutton_register", &dialog->radiobutton_register, - "image_type", &dialog->image_type, - "label_name", &dialog->label_name, - "button_add", &dialog->button_add, - "button_remove", &dialog->button_remove, - "button_import", &dialog->button_import, - NULL); - g_free (filename); - - empathy_builder_connect (gui, dialog, - "accounts_dialog", "destroy", accounts_dialog_destroy_cb, - "accounts_dialog", "response", accounts_dialog_response_cb, - "button_create", "clicked", accounts_dialog_button_create_clicked_cb, - "button_back", "clicked", accounts_dialog_button_back_clicked_cb, - "button_add", "clicked", accounts_dialog_button_add_clicked_cb, - "button_remove", "clicked", accounts_dialog_button_remove_clicked_cb, - "button_import", "clicked", accounts_dialog_button_import_clicked_cb, - "button_help", "clicked", accounts_dialog_button_help_clicked_cb, - NULL); - - g_object_add_weak_pointer (G_OBJECT (dialog->window), (gpointer) &dialog); - - g_object_unref (gui); - - /* Create profile chooser */ - dialog->combobox_profile = empathy_profile_chooser_new (); - gtk_box_pack_end (GTK_BOX (dialog->hbox_type), - dialog->combobox_profile, - TRUE, TRUE, 0); - gtk_widget_show (dialog->combobox_profile); - g_signal_connect (dialog->combobox_profile, "changed", - G_CALLBACK (accounts_dialog_profile_changed_cb), - dialog); - - /* Set up signalling */ - dialog->account_manager = empathy_account_manager_dup_singleton (); - dialog->mc = empathy_mission_control_dup_singleton (); - - g_signal_connect (dialog->account_manager, "account-created", - G_CALLBACK (accounts_dialog_account_added_cb), - dialog); - g_signal_connect (dialog->account_manager, "account-deleted", - G_CALLBACK (accounts_dialog_account_removed_cb), - dialog); - g_signal_connect (dialog->account_manager, "account-enabled", - G_CALLBACK (accounts_dialog_account_enabled_cb), - dialog); - g_signal_connect (dialog->account_manager, "account-disabled", - G_CALLBACK (accounts_dialog_account_disabled_cb), - dialog); - g_signal_connect (dialog->account_manager, "account-changed", - G_CALLBACK (accounts_dialog_account_changed_cb), - dialog); - g_signal_connect (dialog->account_manager, "account-connection-changed", - G_CALLBACK (accounts_dialog_connection_changed_cb), - dialog); - - accounts_dialog_model_setup (dialog); - - /* Add existing accounts */ - accounts = empathy_account_manager_dup_accounts (dialog->account_manager); - for (l = accounts; l; l = l->next) { - accounts_dialog_add_or_update_account (dialog, l->data); - g_object_unref (l->data); - } - g_list_free (accounts); - - if (selected_account) { - accounts_dialog_model_set_selected (dialog, selected_account); - } else { - accounts_dialog_model_select_first (dialog); - } - - if (parent) { - gtk_window_set_transient_for (GTK_WINDOW (dialog->window), - GTK_WINDOW (parent)); - } - - gtk_widget_show (dialog->window); - - empathy_conf_get_bool (empathy_conf_get (), - EMPATHY_PREFS_IMPORT_ASKED, &import_asked); - - - if (empathy_import_dialog_accounts_to_import ()) { - - if (!import_asked) { - empathy_conf_set_bool (empathy_conf_get (), - EMPATHY_PREFS_IMPORT_ASKED, TRUE); - empathy_import_dialog_show (GTK_WINDOW (dialog->window), - FALSE); - } - } else { - gtk_widget_set_sensitive (dialog->button_import, FALSE); - } - - return dialog->window; -} + EmpathyAccountsDialog *dialog; + EmpathyAccountsDialogPriv *priv; + + dialog = g_object_new (EMPATHY_TYPE_ACCOUNTS_DIALOG, + "parent", parent, NULL); + priv = GET_PRIV (dialog); + + if (selected_account) + { + if (empathy_connection_managers_is_ready (priv->cms)) + accounts_dialog_set_selected_account (dialog, selected_account); + else + /* save the selection to set it later when the cms + * becomes ready. + */ + priv->initial_selection = g_object_ref (selected_account); + } + + gtk_window_present (GTK_WINDOW (priv->window)); + + return priv->window; +} diff --git a/src/empathy-accounts-dialog.h b/src/empathy-accounts-dialog.h index 11e237c8f..aa8f7c06b 100644 --- a/src/empathy-accounts-dialog.h +++ b/src/empathy-accounts-dialog.h @@ -1,4 +1,3 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* * Copyright (C) 2005-2007 Imendio AB * Copyright (C) 2007-2008 Collabora Ltd. @@ -31,8 +30,32 @@ G_BEGIN_DECLS +#define EMPATHY_TYPE_ACCOUNTS_DIALOG empathy_accounts_dialog_get_type() +#define EMPATHY_ACCOUNTS_DIALOG(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_ACCOUNTS_DIALOG, EmpathyAccountsDialog)) +#define EMPATHY_ACCOUNTS_DIALOG_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), EMPATHY_TYPE_ACCOUNTS_DIALOG, EmpathyAccountsDialogClass)) +#define EMPATHY_IS_ACCOUNTS_DIALOG(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_ACCOUNTS_DIALOG)) +#define EMPATHY_IS_ACCOUNTS_DIALOG_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), EMPATHY_TYPE_ACCOUNTS_DIALOG)) +#define EMPATHY_ACCOUNTS_DIALOG_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_ACCOUNTS_DIALOG, EmpathyAccountsDialogClass)) + +typedef struct { + GObject parent; + + /* private */ + gpointer priv; +} EmpathyAccountsDialog; + +typedef struct { + GObjectClass parent_class; +} EmpathyAccountsDialogClass; + +GType empathy_accounts_dialog_get_type (void); GtkWidget *empathy_accounts_dialog_show (GtkWindow *parent, - EmpathyAccount *selected_account); + EmpathyAccount *selected_account); G_END_DECLS diff --git a/src/empathy-accounts-dialog.ui b/src/empathy-accounts-dialog.ui index da00f45d7..e5226b270 100644 --- a/src/empathy-accounts-dialog.ui +++ b/src/empathy-accounts-dialog.ui @@ -2,14 +2,11 @@ <interface> <requires lib="gtk+" version="2.16"/> <!-- interface-naming-policy toplevel-contextual --> - <object class="GtkImage" id="add_image"> - <property name="stock">gtk-add</property> - <property name="icon-size">4</property> - </object> <object class="GtkDialog" id="accounts_dialog"> <property name="border_width">5</property> <property name="title" translatable="yes">Accounts</property> <property name="role">accounts</property> + <property name="default_width">640</property> <property name="type_hint">dialog</property> <property name="has_separator">False</property> <child internal-child="vbox"> @@ -46,62 +43,18 @@ </packing> </child> <child> - <object class="GtkVBox" id="vbox1"> + <object class="GtkButton" id="button_add"> + <property name="label" translatable="yes">_Add...</property> <property name="visible">True</property> - <property name="spacing">6</property> - <property name="homogeneous">True</property> - <child> - <object class="GtkHBox" id="hbox148"> - <property name="visible">True</property> - <property name="spacing">6</property> - <property name="homogeneous">True</property> - <child> - <object class="GtkButton" id="button_add"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="image">add_image</property> - <property name="label" translatable="yes">_Add...</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="button_remove"> - <property name="label">gtk-remove</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_stock">True</property> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="button_import"> - <property name="label" translatable="yes">Import Accounts...</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="image">add_image</property> + <property name="use_underline">True</property> </object> <packing> <property name="expand">False</property> - <property name="position">1</property> + <property name="fill">False</property> + <property name="position">2</property> </packing> </child> </object> @@ -127,12 +80,11 @@ <object class="GtkLabel" id="label_name"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="label" translatable="yes">Gmail</property> + <property name="selectable">True</property> <attributes> <attribute name="weight" value="bold"/> - <attribute name="scale" value="1.2"/> + <attribute name="scale" value="1.200000"/> </attributes> - <property name="selectable">True</property> </object> <packing> <property name="position">0</property> @@ -159,28 +111,12 @@ </packing> </child> <child> - <object class="GtkFrame" id="frame2"> + <object class="GtkAlignment" id="alignment_settings"> <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> + <property name="top_padding">6</property> + <property name="left_padding">20</property> <child> - <object class="GtkAlignment" id="alignment_settings"> - <property name="visible">True</property> - <property name="top_padding">6</property> - <property name="left_padding">20</property> - <child> - <placeholder/> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="label599"> - <property name="visible">True</property> - <property name="label" translatable="yes">Settings</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </object> + <placeholder/> </child> </object> <packing> @@ -206,29 +142,6 @@ <property name="visible">True</property> <property name="spacing">12</property> <child> - <object class="GtkHBox" id="hbox_type"> - <property name="visible">True</property> - <property name="spacing">6</property> - <child> - <object class="GtkLabel" id="label645"> - <property name="visible">True</property> - <property name="label" translatable="yes">Type:</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <placeholder/> - </child> - </object> - <packing> - <property name="position">0</property> - </packing> - </child> - <child> <object class="GtkVBox" id="vbox2"> <property name="visible">True</property> <property name="orientation">vertical</property> @@ -347,12 +260,45 @@ </object> </child> <child type="label"> - <object class="GtkLabel" id="label643"> + <object class="GtkHBox" id="hbox_add_account"> <property name="visible">True</property> - <property name="label" translatable="yes">Add Account</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> + <child> + <object class="GtkLabel" id="label643"> + <property name="visible">True</property> + <property name="label" translatable="yes">Add new</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="padding">5</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox_type"> + <property name="visible">True</property> + <property name="spacing">6</property> + <child> + <placeholder/> + </child> + <child> + <object class="GtkLabel" id="label645"> + <property name="visible">True</property> + <property name="label" translatable="yes">account</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="pack_type">end</property> + <property name="position">0</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> </object> </child> </object> @@ -362,7 +308,7 @@ </packing> </child> <child> - <object class="GtkFrame" id="frame_no_profile"> + <object class="GtkFrame" id="frame_no_protocol"> <property name="label_xalign">0</property> <property name="shadow_type">none</property> <child> @@ -454,4 +400,7 @@ <action-widget response="-7">button_close</action-widget> </action-widgets> </object> + <object class="GtkImage" id="add_image"> + <property name="stock">gtk-add</property> + </object> </interface> diff --git a/src/empathy-chat-window.c b/src/empathy-chat-window.c index fb5a5c796..5f81ac167 100644 --- a/src/empathy-chat-window.c +++ b/src/empathy-chat-window.c @@ -35,7 +35,6 @@ #include <libnotify/notification.h> #include <telepathy-glib/util.h> -#include <libmissioncontrol/mission-control.h> #include <libempathy/empathy-contact.h> #include <libempathy/empathy-message.h> @@ -1268,7 +1267,7 @@ chat_window_drag_data_received (GtkWidget *widget, strv = g_strsplit (id, "/", 2); account_id = strv[0]; contact_id = strv[1]; - account = empathy_account_manager_lookup (account_manager, account_id); + account = empathy_account_manager_get_account (account_manager, account_id); chat = empathy_chat_window_find_chat (account, contact_id); if (!chat) { @@ -1281,11 +1280,9 @@ chat_window_drag_data_received (GtkWidget *widget, connection, contact_id, NULL, NULL); } - g_object_unref (account); g_strfreev (strv); return; } - g_object_unref (account); g_object_unref (account_manager); g_strfreev (strv); @@ -1777,7 +1774,7 @@ empathy_chat_window_find_chat (EmpathyAccount *account, chat = ll->data; - if (empathy_account_equal (account, empathy_chat_get_account (chat)) && + if (account == empathy_chat_get_account (chat) && !tp_strdiff (id, empathy_chat_get_id (chat))) { return chat; } diff --git a/src/empathy-chatrooms-window.c b/src/empathy-chatrooms-window.c index 3b5dd1f77..4ec71ec49 100644 --- a/src/empathy-chatrooms-window.c +++ b/src/empathy-chatrooms-window.c @@ -514,7 +514,7 @@ chatrooms_window_chatroom_added_cb (EmpathyChatroomManager *manager, if (!account) { chatrooms_window_model_add (window, chatroom, FALSE); } else { - if (empathy_account_equal (account, empathy_chatroom_get_account (chatroom))) { + if (account == empathy_chatroom_get_account (chatroom)) { chatrooms_window_model_add (window, chatroom, FALSE); } diff --git a/src/empathy-debug-window.c b/src/empathy-debug-window.c index 12b7eeb38..e2f7202e9 100644 --- a/src/empathy-debug-window.c +++ b/src/empathy-debug-window.c @@ -284,7 +284,6 @@ debug_window_cm_chooser_changed_cb (GtkComboBox *cm_chooser, EmpathyDebugWindow *debug_window) { EmpathyDebugWindowPriv *priv = GET_PRIV (debug_window); - MissionControl *mc; TpDBusDaemon *dbus; GError *error = NULL; gchar *bus_name; @@ -302,13 +301,11 @@ debug_window_cm_chooser_changed_cb (GtkComboBox *cm_chooser, return; } - mc = empathy_mission_control_dup_singleton (); dbus = tp_dbus_daemon_dup (&error); if (error != NULL) { DEBUG ("Failed at duping the dbus daemon: %s", error->message); - g_object_unref (mc); } gtk_tree_model_get (GTK_TREE_MODEL (priv->cms), &iter, @@ -344,7 +341,6 @@ debug_window_cm_chooser_changed_cb (GtkComboBox *cm_chooser, debug_window_get_messages_cb, debug_window, NULL, NULL); g_object_unref (dbus); - g_object_unref (mc); } typedef struct diff --git a/src/empathy-event-manager.c b/src/empathy-event-manager.c index 1a7ec09cb..1be3ff7ce 100644 --- a/src/empathy-event-manager.c +++ b/src/empathy-event-manager.c @@ -25,6 +25,7 @@ #include <glib/gi18n.h> #include <telepathy-glib/util.h> +#include <telepathy-glib/interfaces.h> #include <libempathy/empathy-account-manager.h> #include <libempathy/empathy-dispatcher.h> diff --git a/src/empathy-import-dialog.c b/src/empathy-import-dialog.c index 1e135892d..94c6fd765 100644 --- a/src/empathy-import-dialog.c +++ b/src/empathy-import-dialog.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008 Collabora Ltd. + * Copyright (C) 2008-2009 Collabora Ltd. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -17,12 +17,11 @@ * Boston, MA 02110-1301 USA * * Authors: Jonny Lamb <jonny.lamb@collabora.co.uk> - * */ + * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk> + */ #include <config.h> -#include <string.h> - #include <glib.h> #include <gtk/gtk.h> #include <glib/gi18n.h> @@ -31,401 +30,210 @@ #include "empathy-import-dialog.h" #include "empathy-import-pidgin.h" +#include "empathy-import-widget.h" #define DEBUG_FLAG EMPATHY_DEBUG_OTHER #include <libempathy/empathy-debug.h> #include <libempathy/empathy-utils.h> -#include <libempathy/empathy-account-manager.h> - #include <libempathy-gtk/empathy-ui-utils.h> -typedef struct -{ - GtkWidget *window; - GtkWidget *treeview; - GtkWidget *button_ok; - GtkWidget *button_cancel; - GList *accounts; -} EmpathyImportDialog; - -enum -{ - COL_IMPORT = 0, - COL_PROTOCOL, - COL_NAME, - COL_SOURCE, - COL_ACCOUNT_DATA, - COL_COUNT +enum { + PROP_PARENT = 1, + PROP_SHOW_WARNING }; -EmpathyImportAccountData * -empathy_import_account_data_new (const gchar *source) -{ - EmpathyImportAccountData *data; +typedef struct { + GtkWindow *parent_window; - g_return_val_if_fail (!EMP_STR_EMPTY (source), NULL); + EmpathyImportWidget *iw; - data = g_slice_new0 (EmpathyImportAccountData); - data->settings = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, - (GDestroyNotify) tp_g_value_slice_free); - data->source = g_strdup (source); + gboolean show_warning; +} EmpathyImportDialogPriv; - return data; -} - -void -empathy_import_account_data_free (EmpathyImportAccountData *data) -{ - if (data == NULL) - return; - if (data->profile != NULL) - g_object_unref (data->profile); - if (data->settings != NULL) - g_hash_table_destroy (data->settings); - if (data->source != NULL) - g_free (data->source); - - g_slice_free (EmpathyImportAccountData, data); -} +G_DEFINE_TYPE (EmpathyImportDialog, empathy_import_dialog, GTK_TYPE_DIALOG) +#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyImportDialog) static void -import_dialog_add_account (EmpathyImportAccountData *data) +import_dialog_add_import_widget (EmpathyImportDialog *self) { - EmpathyAccountManager *account_manager; - EmpathyAccount *account; - GHashTableIter iter; - gpointer key, value; - gchar *display_name; - GValue *username; - - account_manager = empathy_account_manager_dup_singleton (); - account = empathy_account_manager_create (account_manager, data->profile); - g_object_unref (account_manager); - if (account == NULL) - { - DEBUG ("Failed to create account"); - return; - } + EmpathyImportWidget *iw; + EmpathyImportDialogPriv *priv = GET_PRIV (self); + GtkWidget *widget, *area; - g_hash_table_iter_init (&iter, data->settings); - while (g_hash_table_iter_next (&iter, &key, &value)) - { - const gchar *param = key; - GValue *gvalue = value; + area = gtk_dialog_get_content_area (GTK_DIALOG (self)); - switch (G_VALUE_TYPE (gvalue)) - { - case G_TYPE_STRING: - DEBUG ("Set param '%s' to '%s' (string)", - param, g_value_get_string (gvalue)); - empathy_account_set_param_string (account, - param, g_value_get_string (gvalue)); - break; - - case G_TYPE_BOOLEAN: - DEBUG ("Set param '%s' to %s (boolean)", - param, g_value_get_boolean (gvalue) ? "TRUE" : "FALSE"); - empathy_account_set_param_boolean (account, - param, g_value_get_boolean (gvalue)); - break; - - case G_TYPE_INT: - DEBUG ("Set param '%s' to '%i' (integer)", - param, g_value_get_int (gvalue)); - empathy_account_set_param_int (account, - param, g_value_get_int (gvalue)); - break; - } - } + iw = empathy_import_widget_new (EMPATHY_IMPORT_APPLICATION_ALL); + widget = empathy_import_widget_get_widget (iw); + gtk_box_pack_start (GTK_BOX (area), widget, FALSE, FALSE, 0); + gtk_widget_show (widget); - /* Set the display name of the account */ - username = g_hash_table_lookup (data->settings, "account"); - display_name = g_strdup_printf ("%s (%s)", - mc_profile_get_display_name (data->profile), - g_value_get_string (username)); - empathy_account_set_display_name (account, display_name); + priv->iw = iw; - g_free (display_name); - g_object_unref (account); -} - -static gboolean -import_dialog_account_id_in_list (GList *accounts, - const gchar *account_id) -{ - GList *l; - - for (l = accounts; l; l = l->next) - { - McAccount *account = l->data; - gchar *value = NULL; - gboolean result; - - mc_account_get_param_string (account, "account", &value); - - if (value == NULL) - continue; - - result = tp_strdiff (value, account_id); - - g_free (value); - - if (!result) - return TRUE; - } - - return FALSE; + gtk_dialog_add_buttons (GTK_DIALOG (self), GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); } static void -import_dialog_add_accounts_to_model (EmpathyImportDialog *dialog) +import_dialog_show_warning_message (EmpathyImportDialog *self) { - GtkTreeModel *model; - GtkTreeIter iter; - GList *l; + GtkWidget *hbox, *vbox, *w; - model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview)); + vbox = gtk_vbox_new (FALSE, 12); + hbox = gtk_hbox_new (FALSE, 12); - for (l = dialog->accounts; l; l = l->next) - { - GValue *value; - EmpathyImportAccountData *data = l->data; - gboolean import; - GList *accounts; + w = gtk_label_new (_("No accounts to import could be found. Empathy " + "currently only supports importing accounts from Pidgin.")); + gtk_label_set_line_wrap (GTK_LABEL (w), TRUE); + gtk_label_set_selectable (GTK_LABEL (w), TRUE); + gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.0); + gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0); - value = g_hash_table_lookup (data->settings, "account"); + w = gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING, + GTK_ICON_SIZE_DIALOG); + gtk_misc_set_alignment (GTK_MISC (w), 0.5, 0.0); + gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 0); - accounts = mc_accounts_list_by_profile (data->profile); + gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0); - /* Only set the "Import" cell to be active if there isn't already an - * account set up with the same account id. */ - import = !import_dialog_account_id_in_list (accounts, - g_value_get_string (value)); + w = gtk_dialog_get_content_area (GTK_DIALOG (self)); + gtk_box_pack_start (GTK_BOX (w), hbox, FALSE, FALSE, 0); - mc_accounts_list_free (accounts); + gtk_box_set_spacing (GTK_BOX (w), 14); /* 14 + 2 * 5 = 24 */ - gtk_list_store_append (GTK_LIST_STORE (model), &iter); + gtk_dialog_add_button (GTK_DIALOG (self), GTK_STOCK_CLOSE, + GTK_RESPONSE_CLOSE); - gtk_list_store_set (GTK_LIST_STORE (model), &iter, - COL_IMPORT, import, - COL_PROTOCOL, mc_profile_get_display_name (data->profile), - COL_NAME, g_value_get_string (value), - COL_SOURCE, data->source, - COL_ACCOUNT_DATA, data, - -1); - } + gtk_widget_show_all (w); } static void -import_dialog_cell_toggled_cb (GtkCellRendererToggle *cell_renderer, - const gchar *path_str, - EmpathyImportDialog *dialog) +impl_signal_response (GtkDialog *dialog, + gint response_id) { - GtkTreeModel *model; - GtkTreeIter iter; - GtkTreePath *path; + EmpathyImportDialogPriv *priv = GET_PRIV (dialog); - path = gtk_tree_path_new_from_string (path_str); - model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview)); + if (response_id == GTK_RESPONSE_OK) + empathy_import_widget_add_selected_accounts (priv->iw); - gtk_tree_model_get_iter (model, &iter, path); - - gtk_list_store_set (GTK_LIST_STORE (model), &iter, - COL_IMPORT, !gtk_cell_renderer_toggle_get_active (cell_renderer), - -1); - - gtk_tree_path_free (path); + gtk_widget_destroy (GTK_WIDGET (dialog)); } static void -import_dialog_set_up_account_list (EmpathyImportDialog *dialog) -{ - GtkListStore *store; - GtkTreeView *view; - GtkTreeViewColumn *column; - GtkCellRenderer *cell; - - store = gtk_list_store_new (COL_COUNT, G_TYPE_BOOLEAN, G_TYPE_STRING, - G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER); - - gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->treeview), - GTK_TREE_MODEL (store)); - - g_object_unref (store); - - view = GTK_TREE_VIEW (dialog->treeview); - gtk_tree_view_set_headers_visible (view, TRUE); - - /* Import column */ - cell = gtk_cell_renderer_toggle_new (); - gtk_tree_view_insert_column_with_attributes (view, -1, - /* Translators: this is the header of a treeview column */ - _("Import"), cell, - "active", COL_IMPORT, - NULL); - - g_signal_connect (cell, "toggled", - G_CALLBACK (import_dialog_cell_toggled_cb), dialog); - - /* Protocol column */ - column = gtk_tree_view_column_new (); - gtk_tree_view_column_set_title (column, _("Protocol")); - gtk_tree_view_column_set_expand (column, TRUE); - gtk_tree_view_append_column (view, column); - - cell = gtk_cell_renderer_text_new (); - g_object_set (cell, - "editable", FALSE, - NULL); - gtk_tree_view_column_pack_start (column, cell, TRUE); - gtk_tree_view_column_add_attribute (column, cell, "text", COL_PROTOCOL); - - /* Account column */ - column = gtk_tree_view_column_new (); - gtk_tree_view_column_set_title (column, _("Account")); - gtk_tree_view_column_set_expand (column, TRUE); - gtk_tree_view_append_column (view, column); - - cell = gtk_cell_renderer_text_new (); - g_object_set (cell, - "editable", FALSE, - NULL); - gtk_tree_view_column_pack_start (column, cell, TRUE); - gtk_tree_view_column_add_attribute (column, cell, "text", COL_NAME); - - /* Source column */ - column = gtk_tree_view_column_new (); - gtk_tree_view_column_set_title (column, _("Source")); - gtk_tree_view_column_set_expand (column, TRUE); - gtk_tree_view_append_column (view, column); - - cell = gtk_cell_renderer_text_new (); - g_object_set (cell, - "editable", FALSE, - NULL); - gtk_tree_view_column_pack_start (column, cell, TRUE); - gtk_tree_view_column_add_attribute (column, cell, "text", COL_SOURCE); - - import_dialog_add_accounts_to_model (dialog); -} - -static gboolean -import_dialog_tree_model_foreach (GtkTreeModel *model, - GtkTreePath *path, - GtkTreeIter *iter, - gpointer user_data) +do_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) { - gboolean to_import; - EmpathyImportAccountData *data; - - gtk_tree_model_get (model, iter, - COL_IMPORT, &to_import, - COL_ACCOUNT_DATA, &data, - -1); - - if (to_import) - import_dialog_add_account (data); - - return FALSE; -} + EmpathyImportDialogPriv *priv = GET_PRIV (object); -static void -import_dialog_response_cb (GtkWidget *widget, - gint response, - EmpathyImportDialog *dialog) -{ - if (response == GTK_RESPONSE_OK) + switch (property_id) { - GtkTreeModel *model; - - model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview)); - gtk_tree_model_foreach (model, import_dialog_tree_model_foreach, dialog); + case PROP_PARENT: + g_value_set_object (value, priv->parent_window); + break; + case PROP_SHOW_WARNING: + g_value_set_boolean (value, priv->show_warning); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } - - gtk_widget_destroy (dialog->window); } static void -import_dialog_destroy_cb (GtkWidget *widget, - EmpathyImportDialog *dialog) +do_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) { - g_list_foreach (dialog->accounts, (GFunc) empathy_import_account_data_free, - NULL); - g_list_free (dialog->accounts); - g_slice_free (EmpathyImportDialog, dialog); -} + EmpathyImportDialogPriv *priv = GET_PRIV (object); -gboolean -empathy_import_dialog_accounts_to_import (void) -{ - return empathy_import_pidgin_accounts_to_import (); + switch (property_id) + { + case PROP_PARENT: + priv->parent_window = g_value_get_object (value); + break; + case PROP_SHOW_WARNING: + priv->show_warning = g_value_get_boolean (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } } -void -empathy_import_dialog_show (GtkWindow *parent, - gboolean warning) +static void +do_constructed (GObject *obj) { - static EmpathyImportDialog *dialog = NULL; - GtkBuilder *gui; - gchar *filename; - GList *accounts = NULL; - - /* This window is a singleton. If it already exist, present it */ - if (dialog) - { - gtk_window_present (GTK_WINDOW (dialog->window)); - return; - } + EmpathyImportDialog *self = EMPATHY_IMPORT_DIALOG (obj); + EmpathyImportDialogPriv *priv = GET_PRIV (self); + gboolean have_accounts; - /* Load all accounts from all supported applications */ - accounts = g_list_concat (accounts, empathy_import_pidgin_load ()); + have_accounts = empathy_import_accounts_to_import (); - /* Check if we have accounts to import before creating the window */ - if (!accounts) + if (!have_accounts) { - GtkWidget *message; - - if (warning) + if (priv->show_warning) { - message = gtk_message_dialog_new (parent, - GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, - _("No accounts to import could be found. Empathy currently only " - "supports importing accounts from Pidgin.")); - - gtk_dialog_run (GTK_DIALOG (message)); - gtk_widget_destroy (message); + import_dialog_show_warning_message (self); } else DEBUG ("No accounts to import; closing dialog silently."); - - return; + } + else + { + import_dialog_add_import_widget (self); } - /* We have accounts, let's display the window with them */ - dialog = g_slice_new0 (EmpathyImportDialog); - dialog->accounts = accounts; - - filename = empathy_file_lookup ("empathy-import-dialog.ui", "src"); - gui = empathy_builder_get_file (filename, - "import_dialog", &dialog->window, - "treeview", &dialog->treeview, - NULL); - - empathy_builder_connect (gui, dialog, - "import_dialog", "destroy", import_dialog_destroy_cb, - "import_dialog", "response", import_dialog_response_cb, - NULL); - - g_object_add_weak_pointer (G_OBJECT (dialog->window), (gpointer) &dialog); + if (priv->parent_window) + gtk_window_set_transient_for (GTK_WINDOW (self), priv->parent_window); +} - g_free (filename); - g_object_unref (gui); +static void +empathy_import_dialog_init (EmpathyImportDialog *self) +{ + EmpathyImportDialogPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (self, + EMPATHY_TYPE_IMPORT_DIALOG, EmpathyImportDialogPriv); - if (parent) - gtk_window_set_transient_for (GTK_WINDOW (dialog->window), parent); + self->priv = priv; - import_dialog_set_up_account_list (dialog); + gtk_container_set_border_width (GTK_CONTAINER (self), 5); + gtk_window_set_title (GTK_WINDOW (self), _("Import Accounts")); + gtk_window_set_modal (GTK_WINDOW (self), TRUE); + gtk_dialog_set_has_separator (GTK_DIALOG (self), FALSE); +} - gtk_widget_show (dialog->window); +static void +empathy_import_dialog_class_init (EmpathyImportDialogClass *klass) +{ + GObjectClass *oclass = G_OBJECT_CLASS (klass); + GtkDialogClass *gtkclass = GTK_DIALOG_CLASS (klass); + GParamSpec *param_spec; + + oclass->constructed = do_constructed; + oclass->get_property = do_get_property; + oclass->set_property = do_set_property; + + gtkclass->response = impl_signal_response; + + param_spec = g_param_spec_object ("parent-window", + "parent-window", "The parent window", + GTK_TYPE_WINDOW, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); + g_object_class_install_property (oclass, PROP_PARENT, param_spec); + + param_spec = g_param_spec_boolean ("show-warning", + "show-warning", "Whether a warning should be shown when there are no " + "sources for importing accounts.", + FALSE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); + g_object_class_install_property (oclass, PROP_SHOW_WARNING, param_spec); + + g_type_class_add_private (klass, sizeof (EmpathyImportDialogPriv)); } +GtkWidget * +empathy_import_dialog_new (GtkWindow *parent, + gboolean warning) +{ + return g_object_new (EMPATHY_TYPE_IMPORT_DIALOG, "parent-window", + parent, "show-warning", warning, NULL); +} diff --git a/src/empathy-import-dialog.h b/src/empathy-import-dialog.h index 0e3fd148f..0e9d225c4 100644 --- a/src/empathy-import-dialog.h +++ b/src/empathy-import-dialog.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008 Collabora Ltd. + * Copyright (C) 2008-2009 Collabora Ltd. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -17,30 +17,46 @@ * Boston, MA 02110-1301 USA * * Authors: Jonny Lamb <jonny.lamb@collabora.co.uk> + * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk> */ #include <gtk/gtk.h> -#include <libmissioncontrol/mc-profile.h> #ifndef __EMPATHY_IMPORT_DIALOG_H__ #define __EMPATHY_IMPORT_DIALOG_H__ G_BEGIN_DECLS -typedef struct -{ - /* Table mapping CM param string to a GValue */ - GHashTable *settings; - /* The profile to use for this account */ - McProfile *profile; - /* The name of the account import source */ - gchar *source; -} EmpathyImportAccountData; - -EmpathyImportAccountData *empathy_import_account_data_new (const gchar *source); -void empathy_import_account_data_free (EmpathyImportAccountData *data); -gboolean empathy_import_dialog_accounts_to_import (void); -void empathy_import_dialog_show (GtkWindow *parent, gboolean warning); +#define EMPATHY_TYPE_IMPORT_DIALOG empathy_import_dialog_get_type() +#define EMPATHY_IMPORT_DIALOG(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_IMPORT_DIALOG,\ + EmpathyImportDialog)) +#define EMPATHY_IMPORT_DIALOG_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), EMPATHY_TYPE_IMPORT_DIALOG,\ + EmpathyImportDialogClass)) +#define EMPATHY_IS_IMPORT_DIALOG(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_IMPORT_DIALOG)) +#define EMPATHY_IS_IMPORT_DIALOG_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), EMPATHY_TYPE_IMPORT_DIALOG)) +#define EMPATHY_IMPORT_DIALOG_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_IMPORT_DIALOG,\ + EmpathyImportDialogClass)) + +typedef struct { + GtkDialog parent; + + /* private */ + gpointer priv; +} EmpathyImportDialog; + +typedef struct { + GtkDialogClass parent_class; +} EmpathyImportDialogClass; + +GType empathy_import_dialog_get_type (void); + +GtkWidget* empathy_import_dialog_new (GtkWindow *parent_window, + gboolean show_warning); G_END_DECLS diff --git a/src/empathy-import-dialog.ui b/src/empathy-import-dialog.ui index 38ba434e4..ce7a56a74 100644 --- a/src/empathy-import-dialog.ui +++ b/src/empathy-import-dialog.ui @@ -1,73 +1,29 @@ <?xml version="1.0"?> -<!--Generated with glade3 3.4.5 on Fri Oct 17 11:01:30 2008 --> <interface> - <object class="GtkDialog" id="import_dialog"> - <property name="border_width">5</property> - <property name="title" translatable="yes">Import Accounts</property> - <property name="modal">True</property> - <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property> - <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> - <property name="has_separator">False</property> - <child internal-child="vbox"> - <object class="GtkVBox" id="dialog-vbox1"> + <!-- interface-requires gtk+ 2.12 --> + <!-- interface-naming-policy toplevel-contextual --> + <object class="GtkVBox" id="widget_vbox"> + <property name="visible">True</property> + <property name="spacing">2</property> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow17"> <property name="visible">True</property> - <property name="spacing">2</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">never</property> + <property name="vscrollbar_policy">automatic</property> + <property name="shadow_type">in</property> <child> - <object class="GtkScrolledWindow" id="scrolledwindow17"> + <object class="GtkTreeView" id="treeview"> + <property name="height_request">200</property> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_NEVER</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">GTK_SHADOW_IN</property> - <child> - <object class="GtkTreeView" id="treeview"> - <property name="height_request">200</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="enable_search">False</property> - </object> - </child> + <property name="enable_search">False</property> </object> - <packing> - <property name="position">1</property> - </packing> - </child> - <child internal-child="action_area"> - <object class="GtkHButtonBox" id="dialog-action_area1"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_END</property> - <child> - <object class="GtkButton" id="button_cancel"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="label">gtk-cancel</property> - <property name="use_stock">True</property> - </object> - </child> - <child> - <object class="GtkButton" id="button_ok"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="label">gtk-ok</property> - <property name="use_stock">True</property> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="pack_type">GTK_PACK_END</property> - </packing> </child> </object> + <packing> + <property name="position">1</property> + </packing> </child> - <action-widgets> - <action-widget response="0">button_cancel</action-widget> - <action-widget response="-5">button_ok</action-widget> - </action-widgets> </object> </interface> diff --git a/src/empathy-import-mc4-accounts.c b/src/empathy-import-mc4-accounts.c new file mode 100644 index 000000000..968293bd2 --- /dev/null +++ b/src/empathy-import-mc4-accounts.c @@ -0,0 +1,531 @@ +/* + * Copyright (C) 2009 Collabora Ltd. + * + * 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 St, Fifth Floor, + * Boston, MA 02110-1301 USA + * + * Authors: Arnaud Maillet <arnaud.maillet@collabora.co.uk> + */ + +#include <stdio.h> +#include <string.h> +#include <glib.h> +#include <glib/gi18n.h> +#include <gconf/gconf-client.h> +#include <telepathy-glib/util.h> +#include <telepathy-glib/defs.h> +#include <dbus/dbus-protocol.h> +#include <gnome-keyring.h> +#include <libempathy/empathy-account-manager.h> +#include <libempathy/empathy-account-settings.h> +#include <libempathy/empathy-connection-managers.h> + +#include "empathy-import-mc4-accounts.h" + +#define DEBUG_FLAG EMPATHY_DEBUG_IMPORT_MC4_ACCOUNTS +#include <libempathy/empathy-debug.h> + +#define MC_ACCOUNTS_GCONF_BASE "/apps/telepathy/mc/accounts" +#define IMPORTED_MC4_ACCOUNTS "/apps/empathy/accounts/imported_mc4_accounts" + +typedef struct +{ + gchar *profile; + gchar *protocol; +} ProfileProtocolMapItem; + +static ProfileProtocolMapItem profile_protocol_map[] = +{ + { "ekiga", "sip" }, + { "fwd", "sip" }, + { "gtalk", "jabber" }, + { "msn-haze", "msn" }, + { "salut", "local-xmpp" }, + { "sipphone", "sip" }, + { "sofiasip", "sip" }, +}; + +typedef struct { + gchar *account_name; + gboolean enable; +} Misc; + +static gchar * +_account_name_from_key (const gchar *key) +{ + guint base_len = strlen (MC_ACCOUNTS_GCONF_BASE); + const gchar *base, *slash; + + g_assert (g_str_has_prefix (key, MC_ACCOUNTS_GCONF_BASE)); + g_assert (strlen (key) > base_len + 1); + + base = key + base_len + 1; + slash = strchr (base, '/'); + + if (slash == NULL) + return g_strdup (base); + else + return g_strndup (base, slash - base); +} + +static gchar * +_param_name_from_key (const gchar *key) +{ + const gchar *base, *slash; + gchar *account_name; + gchar *ret; + + account_name = _account_name_from_key (key); + base = strstr (key, account_name); + slash = strchr (base, '/'); + + ret = g_strdup (slash+1); + g_free (account_name); + + return ret; +} + +static gchar * +_create_default_display_name (const gchar *protocol) +{ + if (!tp_strdiff (protocol, "local-xmpp")) + return g_strdup (_("People Nearby")); + + return g_strdup_printf (_("%s account"), protocol); +} + +static const gchar * +_get_manager_for_protocol (EmpathyConnectionManagers *managers, + const gchar *protocol) +{ + GList *cms = empathy_connection_managers_get_cms (managers); + GList *l; + TpConnectionManager *haze = NULL; + TpConnectionManager *cm = NULL; + + for (l = cms; l; l = l->next) + { + TpConnectionManager *tp_cm = l->data; + + /* Only use haze if no other cm provides this protocol */ + if (!tp_strdiff (tp_connection_manager_get_name (tp_cm), "haze")) + { + haze = tp_cm; + continue; + } + + if (tp_connection_manager_has_protocol (tp_cm, protocol)) + { + cm = tp_cm; + goto out; + } + } + + if (haze != NULL && tp_connection_manager_has_protocol (haze, protocol)) + return tp_connection_manager_get_name (haze); + +out: + return cm != NULL ? tp_connection_manager_get_name (cm) : NULL; +} + +static void +_move_contents (const gchar *old, const gchar *new) +{ + GDir *source; + const gchar *f; + int ret; + + ret = g_mkdir_with_parents (new, 0777); + if (ret == -1) + return; + + source = g_dir_open (old, 0, NULL); + if (source == NULL) + return; + + while ((f = g_dir_read_name (source)) != NULL) + { + gchar *old_path; + gchar *new_path; + + old_path = g_build_path (G_DIR_SEPARATOR_S, old, f, NULL); + new_path = g_build_path (G_DIR_SEPARATOR_S, new, f, NULL); + + if (g_file_test (old_path, G_FILE_TEST_IS_DIR)) + { + _move_contents (old_path, new_path); + } + else + { + GFile *f_old, *f_new; + + f_old = g_file_new_for_path (old_path); + f_new = g_file_new_for_path (new_path); + + g_file_move (f_old, f_new, G_FILE_COPY_NONE, + NULL, NULL, NULL, NULL); + + g_object_unref (f_old); + g_object_unref (f_new); + } + + g_free (old_path); + g_free (new_path); + } + + g_dir_close (source); +} + +static void +_move_logs (EmpathyAccount *account, const gchar *account_name) +{ + gchar *old_path, *new_path, *escaped; + const gchar *name; + + name = empathy_account_get_unique_name (account); + if (g_str_has_prefix (name, TP_ACCOUNT_OBJECT_PATH_BASE)) + name += strlen (TP_ACCOUNT_OBJECT_PATH_BASE); + + escaped = g_strdelimit (g_strdup (name), "/", '_'); + new_path = g_build_path (G_DIR_SEPARATOR_S, g_get_user_data_dir (), + PACKAGE_NAME, "logs", escaped, NULL); + g_free (escaped); + + old_path = g_build_path (G_DIR_SEPARATOR_S, + g_get_home_dir (), + ".gnome2", PACKAGE_NAME, "logs", account_name, NULL); + + _move_contents (old_path, new_path); +} + +static void +_create_account_cb (GObject *source, + GAsyncResult *result, + gpointer user_data) +{ + EmpathyAccount *account; + GError *error = NULL; + Misc *misc = (Misc *) user_data; + + if (!empathy_account_settings_apply_finish ( + EMPATHY_ACCOUNT_SETTINGS (source), result, &error)) + { + DEBUG ("Failed to create account: %s", error->message); + g_error_free (error); + goto out; + } + + DEBUG ("account created\n"); + account = empathy_account_settings_get_account ( + EMPATHY_ACCOUNT_SETTINGS (source)); + + _move_logs (account, misc->account_name); + + empathy_account_set_enabled_async (account, + misc->enable, NULL, NULL); + + g_free (misc->account_name); + g_slice_free (Misc, misc); + +out: + g_object_unref (source); +} + +static gchar * +_get_protocol_from_profile (const gchar *profile) +{ + gint i; + + DEBUG ("profile: %s\n", profile); + + for (i = 0; i < G_N_ELEMENTS (profile_protocol_map); i++) + if (!tp_strdiff (profile, profile_protocol_map[i].profile)) + return g_strdup (profile_protocol_map[i].protocol); + + return g_strdup (profile); +} + +static void +_set_password_from_keyring (EmpathyAccountSettings *settings, + const gchar *account_name, const gchar *key) +{ + GnomeKeyringResult res; + gchar *password; + GnomeKeyringPasswordSchema keyring_schema = { + GNOME_KEYRING_ITEM_GENERIC_SECRET, + { + { "account", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, + { "param", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, + { NULL, 0 } + } + }; + + res = gnome_keyring_find_password_sync (&keyring_schema, + &password, + "account", account_name, + "param", key, + NULL); + + if (res == GNOME_KEYRING_RESULT_OK) + { + empathy_account_settings_set_string (settings, key, password); + gnome_keyring_free_password (password); + } +} + +static void +_handle_entry (EmpathyAccountSettings *settings, const gchar *account_name, + const gchar *key, + GConfEntry *entry) +{ + const gchar *signature; + + signature = empathy_account_settings_get_dbus_signature (settings, key); + if (signature == NULL) + { + DEBUG ("Parameter %s is unknown", signature); + return; + } + + switch ((int)*signature) + { + case DBUS_TYPE_INT16: + case DBUS_TYPE_INT32: + { + gint v = gconf_value_get_int (gconf_entry_get_value (entry)); + empathy_account_settings_set_int32 (settings, key, v); + break; + } + case DBUS_TYPE_UINT16: + case DBUS_TYPE_UINT32: + { + gint v = gconf_value_get_int (gconf_entry_get_value (entry)); + empathy_account_settings_set_uint32 (settings, key, v); + break; + } + case DBUS_TYPE_STRING: + { + const gchar *v = gconf_value_get_string ( + gconf_entry_get_value (entry)); + + /* MC 4 would put password in the keyring and leave the password in + * gconf keyring */ + + if (!tp_strdiff (key, "password") && !tp_strdiff (v, "keyring")) + _set_password_from_keyring (settings, account_name, key); + else + empathy_account_settings_set_string (settings, key, v); + break; + } + case DBUS_TYPE_BOOLEAN: + { + gboolean v = gconf_value_get_bool ( + gconf_entry_get_value (entry)); + + empathy_account_settings_set_boolean (settings, key, v); + break; + } + default: + DEBUG ("Unsupported type in signature: %s", signature); + } +} + +static void +_recurse_account (GSList *entries, EmpathyAccountSettings *settings, + const gchar *account_name) +{ + GSList *tmp; + + for (tmp = entries; tmp != NULL; tmp = tmp->next) + { + + GConfEntry *entry; + gchar *param; + + entry = (GConfEntry *) tmp->data; + param = _param_name_from_key (gconf_entry_get_key (entry)); + + if (g_str_has_prefix (param, "param-")) + { + _handle_entry (settings, account_name, param + strlen ("param-"), + entry); + } + + g_free (param); + gconf_entry_unref (entry); + } +} + +static gboolean +import_one_account (const char *path, + EmpathyConnectionManagers *managers, + GConfClient *client) +{ + gchar *account_name = _account_name_from_key (path); + EmpathyAccountSettings *settings; + GError *error = NULL; + GSList *entries = NULL; + gchar *profile = NULL; + gchar *protocol = NULL; + const gchar *manager; + gchar *display_name; + gchar *key; + gboolean enabled = FALSE; + gboolean ret = FALSE; + Misc *misc; + + DEBUG ("Starting import of %s (%s)", path, account_name); + + key = g_strdup_printf ("%s/profile", path); + profile = gconf_client_get_string (client, key, NULL); + g_free (key); + + if (profile == NULL) + { + DEBUG ("Account is missing a profile entry\n"); + goto failed; + } + + protocol = _get_protocol_from_profile (profile); + manager = _get_manager_for_protocol (managers, protocol); + if (manager == NULL) + { + DEBUG ("No manager available for this protocol %s", protocol); + goto failed; + } + + key = g_strdup_printf ("%s/display_name", path); + display_name = gconf_client_get_string (client, key, NULL); + g_free (key); + + if (display_name == NULL) + display_name = _create_default_display_name (protocol); + + settings = empathy_account_settings_new (manager, protocol, display_name); + g_free (display_name); + + /* Bit of a hack, as we know EmpathyConnectionManagers is ready the + * EmpathyAccountSettings should be ready right away as well */ + g_assert (empathy_account_settings_is_ready (settings)); + + entries = gconf_client_all_entries (client, path, &error); + + if (entries == NULL) + { + DEBUG ("Failed to get all entries: %s\n", error->message); + g_error_free (error); + goto failed; + } + + _recurse_account (entries, settings, account_name); + + key = g_strdup_printf ("%s/enabled", path); + enabled = gconf_client_get_bool (client, key, NULL); + g_free (key); + + misc = g_slice_new (Misc); + misc->account_name = account_name; + misc->enable = enabled; + + empathy_account_settings_apply_async (settings, + _create_account_cb, misc); + ret = TRUE; + +out: + g_free (protocol); + g_free (profile); + g_slist_free (entries); + + return ret; + +failed: + DEBUG ("Failed to import %s", path); + g_free (account_name); + if (settings != NULL) + g_object_unref (settings); + goto out; +} + +gboolean +empathy_import_mc4_has_imported (void) +{ + GConfClient *client; + gboolean ret; + + client = gconf_client_get_default (); + + ret = gconf_client_get_bool (client, IMPORTED_MC4_ACCOUNTS, NULL); + g_object_unref (client); + + return ret; +} + +gboolean +empathy_import_mc4_accounts (EmpathyConnectionManagers *managers) +{ + GConfClient *client; + GError *error = NULL; + GSList *dir, *dirs = NULL; + gboolean imported_mc4_accounts; + gboolean imported = FALSE; + + g_return_val_if_fail (empathy_connection_managers_is_ready (managers), + FALSE); + + client = gconf_client_get_default (); + + imported_mc4_accounts = gconf_client_get_bool (client, + IMPORTED_MC4_ACCOUNTS, &error); + + if (error != NULL) + { + DEBUG ("Failed to get import_mc4_accounts key: %s\n", error->message); + g_error_free (error); + goto out; + } + + if (imported_mc4_accounts) + { + DEBUG ("Mc4 accounts previously imported"); + goto out; + } + + DEBUG ("MC 4 accounts are going to be imported\n"); + + dirs = gconf_client_all_dirs (client, MC_ACCOUNTS_GCONF_BASE, &error); + + if (error != NULL) + { + DEBUG ("Failed to get MC4 account dirs: %s\n", + error->message); + g_clear_error (&error); + g_object_unref (client); + goto out; + } + + for (dir = dirs; NULL != dir; dir = dir->next) + { + if (import_one_account ((gchar *) dir->data, managers, client)) + imported = TRUE; + g_free (dir->data); + } + +out: + gconf_client_set_bool (client, IMPORTED_MC4_ACCOUNTS, TRUE, NULL); + + g_slist_free (dirs); + g_object_unref (client); + return imported; +} diff --git a/src/empathy-import-mc4-accounts.h b/src/empathy-import-mc4-accounts.h new file mode 100644 index 000000000..0a30fdff7 --- /dev/null +++ b/src/empathy-import-mc4-accounts.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2009 Collabora Ltd. + * + * 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 St, Fifth Floor, + * Boston, MA 02110-1301 USA + * + * Authors: Arnaud Maillet <arnaud.maillet@collabora.co.uk> + */ + +#ifndef __EMPATHY_IMPORT_MC4_ACCOUNTS_H__ +#define __EMPATHY_IMPORT_MC4_ACCOUNTS_H__ + +G_BEGIN_DECLS + +#include <libempathy/empathy-connection-managers.h> + +gboolean empathy_import_mc4_accounts (EmpathyConnectionManagers *managers); +gboolean empathy_import_mc4_has_imported (void); + +G_END_DECLS + +#endif /* __EMPATHY_IMPORT_MC4_ACCOUNTS_H__ */ diff --git a/src/empathy-import-pidgin.c b/src/empathy-import-pidgin.c index 935c022ea..23b1d84f5 100644 --- a/src/empathy-import-pidgin.c +++ b/src/empathy-import-pidgin.c @@ -22,6 +22,7 @@ #include <config.h> #include <string.h> +#include <unistd.h> #include <glib.h> #include <glib/gstdio.h> @@ -31,7 +32,7 @@ #include <telepathy-glib/util.h> #include <telepathy-glib/dbus.h> -#include "empathy-import-dialog.h" +#include "empathy-import-utils.h" #include "empathy-import-pidgin.h" #define DEBUG_FLAG EMPATHY_DEBUG_OTHER @@ -114,8 +115,7 @@ import_dialog_pidgin_parse_setting (EmpathyImportAccountData *data, /* Search for the map corresponding to setting we are parsing */ for (i = 0; i < G_N_ELEMENTS (pidgin_cm_map); i++) { - if (!tp_strdiff (mc_profile_get_protocol_name (data->profile), - pidgin_cm_map[i].protocol) && + if (!tp_strdiff (data->protocol, pidgin_cm_map[i].protocol) && !tp_strdiff (tag_name, pidgin_cm_map[i].pidgin_name)) { item = pidgin_cm_map + i; @@ -199,23 +199,26 @@ empathy_import_pidgin_load (void) if (!tp_strdiff ((gchar *) child->name, PIDGIN_ACCOUNT_TAG_PROTOCOL)) { - gchar *content; + xmlChar *content; const gchar *protocol; - protocol = content = (gchar *) xmlNodeGetContent (child); + content = xmlNodeGetContent (child); + + protocol = (const gchar *) content; if (g_str_has_prefix (protocol, "prpl-")) protocol += 5; if (!tp_strdiff (protocol, PIDGIN_PROTOCOL_BONJOUR)) - protocol = "salut"; + data->protocol = g_strdup ("salut"); else if (!tp_strdiff (protocol, PIDGIN_PROTOCOL_NOVELL)) - protocol = "groupwise"; + data->protocol = g_strdup ("groupwise"); + else + data->protocol = g_strdup (protocol); - data->profile = mc_profile_lookup (protocol); - g_free (content); + xmlFree (content); - if (data->profile == NULL) + if (data->protocol == NULL) break; } @@ -240,8 +243,7 @@ empathy_import_pidgin_load (void) username = name; /* Split "username@server" if it is an IRC account */ - if (strstr (name, "@") && !tp_strdiff ( - mc_profile_get_protocol_name (data->profile), "irc")) + if (strstr (name, "@") && !tp_strdiff (data->protocol, "irc")) { nick_server = g_strsplit (name, "@", 2); username = nick_server[0]; @@ -287,12 +289,11 @@ empathy_import_pidgin_load (void) /* If we have the needed settings, add the account data to the list, * otherwise free the data */ - if (data->profile != NULL && g_hash_table_size (data->settings) > 0) + if (data->protocol != NULL && g_hash_table_size (data->settings) > 0) { /* Special-case XMPP: * http://bugzilla.gnome.org/show_bug.cgi?id=579992 */ - if (!tp_strdiff ( - mc_profile_get_protocol_name (data->profile), "jabber")) + if (!tp_strdiff (data->protocol, "jabber")) { if (EMP_STR_EMPTY (tp_asv_get_string (data->settings, "server"))) { diff --git a/src/empathy-import-utils.c b/src/empathy-import-utils.c new file mode 100644 index 000000000..f84b20609 --- /dev/null +++ b/src/empathy-import-utils.c @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2009 Collabora Ltd. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Authors: Jonny Lamb <jonny.lamb@collabora.co.uk> + * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk> + */ + +#include <telepathy-glib/util.h> + +#include <libempathy/empathy-utils.h> + +#include "empathy-import-utils.h" +#include "empathy-import-pidgin.h" + +EmpathyImportAccountData * +empathy_import_account_data_new (const gchar *source) +{ + EmpathyImportAccountData *data; + + g_return_val_if_fail (!EMP_STR_EMPTY (source), NULL); + + data = g_slice_new0 (EmpathyImportAccountData); + data->settings = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, + (GDestroyNotify) tp_g_value_slice_free); + data->source = g_strdup (source); + data->protocol = NULL; + data->connection_manager = NULL; + + return data; +} + +void +empathy_import_account_data_free (EmpathyImportAccountData *data) +{ + if (data == NULL) + return; + if (data->protocol != NULL) + g_free (data->protocol); + if (data->connection_manager != NULL) + g_free (data->connection_manager); + if (data->settings != NULL) + g_hash_table_destroy (data->settings); + if (data->source != NULL) + g_free (data->source); + + g_slice_free (EmpathyImportAccountData, data); +} + +gboolean +empathy_import_accounts_to_import (void) +{ + return empathy_import_pidgin_accounts_to_import (); +} + +GList * +empathy_import_accounts_load (EmpathyImportApplication id) +{ + if (id == EMPATHY_IMPORT_APPLICATION_PIDGIN) + return empathy_import_pidgin_load (); + + return empathy_import_pidgin_load (); +} diff --git a/src/empathy-import-utils.h b/src/empathy-import-utils.h new file mode 100644 index 000000000..8c971a04d --- /dev/null +++ b/src/empathy-import-utils.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2009 Collabora Ltd. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Authors: Jonny Lamb <jonny.lamb@collabora.co.uk> + * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk> + */ + +#ifndef __EMPATHY_IMPORT_UTILS_H__ +#define __EMPATHY_IMPORT_UTILS_H__ + +#include <glib.h> + +G_BEGIN_DECLS + +typedef struct +{ + /* Table mapping CM param string to a GValue */ + GHashTable *settings; + /* Protocol name */ + gchar *protocol; + /* Connection manager name */ + gchar *connection_manager; + /* The name of the account import source */ + gchar *source; +} EmpathyImportAccountData; + +typedef enum { + EMPATHY_IMPORT_APPLICATION_ALL = 0, + EMPATHY_IMPORT_APPLICATION_PIDGIN, + EMPATHY_IMPORT_APPLICATION_INVALID +} EmpathyImportApplication; + +EmpathyImportAccountData *empathy_import_account_data_new ( + const gchar *source); +void empathy_import_account_data_free (EmpathyImportAccountData *data); + +gboolean empathy_import_accounts_to_import (void); +GList *empathy_import_accounts_load (EmpathyImportApplication id); + +G_END_DECLS + +#endif /* __EMPATHY_IMPORT_UTILS_H__ */ diff --git a/src/empathy-import-widget.c b/src/empathy-import-widget.c new file mode 100644 index 000000000..17f196229 --- /dev/null +++ b/src/empathy-import-widget.c @@ -0,0 +1,516 @@ +/* + * Copyright (C) 2008-2009 Collabora Ltd. + * + * 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 St, Fifth Floor, + * Boston, MA 02110-1301 USA + * + * Authors: Jonny Lamb <jonny.lamb@collabora.co.uk> + * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk> + */ + +/* empathy-import-widget.c */ + +#include "empathy-import-dialog.h" +#include "empathy-import-widget.h" +#include "empathy-import-pidgin.h" + +#define DEBUG_FLAG EMPATHY_DEBUG_OTHER +#include <libempathy/empathy-debug.h> +#include <libempathy/empathy-account.h> +#include <libempathy/empathy-account-manager.h> +#include <libempathy/empathy-connection-managers.h> +#include <libempathy/empathy-utils.h> + +#include <libempathy-gtk/empathy-ui-utils.h> + +#include <telepathy-glib/util.h> + +#include <glib/gi18n.h> + +G_DEFINE_TYPE (EmpathyImportWidget, empathy_import_widget, G_TYPE_OBJECT) + +#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyImportWidget) + +enum +{ + COL_IMPORT = 0, + COL_PROTOCOL, + COL_NAME, + COL_SOURCE, + COL_ACCOUNT_DATA, + COL_COUNT +}; + +enum { + PROP_APPLICATION_ID = 1 +}; + +typedef struct { + GtkWidget *vbox; + GtkWidget *treeview; + + GList *accounts; + EmpathyImportApplication app_id; + + EmpathyConnectionManagers *cms; + + gboolean dispose_run; +} EmpathyImportWidgetPriv; + +static gboolean +import_widget_account_id_in_list (GList *accounts, + const gchar *account_id) +{ + GList *l; + + for (l = accounts; l; l = l->next) + { + EmpathyAccount *account = l->data; + const gchar *account_string; + GValue *value; + gboolean result; + const GHashTable *parameters; + + parameters = empathy_account_get_parameters (account); + + value = g_hash_table_lookup ((GHashTable *) parameters, "account"); + + if (value == NULL) + continue; + + account_string = g_value_get_string (value); + + result = tp_strdiff (account_string, account_id); + + if (!result) + return TRUE; + } + + return FALSE; +} + +static gboolean +protocol_is_supported (EmpathyImportWidget *self, + EmpathyImportAccountData *data) +{ + EmpathyImportWidgetPriv *priv = GET_PRIV (self); + GList *cms = empathy_connection_managers_get_cms (priv->cms); + GList *l; + gboolean proto_is_supported = FALSE; + + for (l = cms; l; l = l->next) + { + TpConnectionManager *tp_cm = l->data; + const gchar *cm_name = tp_connection_manager_get_name (tp_cm); + if (tp_connection_manager_has_protocol (tp_cm, + (const gchar*) data->protocol)) + { + data->connection_manager = g_strdup (cm_name); + proto_is_supported = TRUE; + break; + } + } + + return proto_is_supported; +} + +static void +import_widget_add_accounts_to_model (EmpathyImportWidget *self) +{ + GtkTreeModel *model; + GtkTreeIter iter; + GList *l; + EmpathyImportWidgetPriv *priv = GET_PRIV (self); + EmpathyAccountManager *manager = empathy_account_manager_dup_singleton (); + + model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview)); + + for (l = priv->accounts; l; l = l->next) + { + GValue *value; + EmpathyImportAccountData *data = l->data; + gboolean import; + GList *accounts; + + if (!protocol_is_supported (self, data)) + continue; + + value = g_hash_table_lookup (data->settings, "account"); + + accounts = empathy_account_manager_dup_accounts (manager); + + /* Only set the "Import" cell to be active if there isn't already an + * account set up with the same account id. */ + import = !import_widget_account_id_in_list (accounts, + g_value_get_string (value)); + + g_list_foreach (accounts, (GFunc) g_object_unref, NULL); + g_list_free (accounts); + + gtk_list_store_append (GTK_LIST_STORE (model), &iter); + + gtk_list_store_set (GTK_LIST_STORE (model), &iter, + COL_IMPORT, import, + COL_PROTOCOL, data->protocol, + COL_NAME, g_value_get_string (value), + COL_SOURCE, data->source, + COL_ACCOUNT_DATA, data, + -1); + } + + g_object_unref (manager); +} + +static void +import_widget_create_account_cb (GObject *source, + GAsyncResult *result, + gpointer user_data) +{ + EmpathyAccount *account; + GError *error = NULL; + EmpathyImportWidget *self = user_data; + + account = empathy_account_manager_create_account_finish ( + EMPATHY_ACCOUNT_MANAGER (source), result, &error); + + if (account == NULL) + { + DEBUG ("Failed to create account: %s", + error ? error->message : "No error given"); + g_clear_error (&error); + return; + } + + DEBUG ("account created\n"); + + g_object_unref (self); +} + +static void +import_widget_add_account (EmpathyImportWidget *self, + EmpathyImportAccountData *data) +{ + EmpathyAccountManager *account_manager; + gchar *display_name; + GHashTable *properties; + GValue *username; + + account_manager = empathy_account_manager_dup_singleton (); + + DEBUG ("connection_manager: %s\n", data->connection_manager); + + /* Set the display name of the account */ + username = g_hash_table_lookup (data->settings, "account"); + display_name = g_strdup_printf ("%s (%s)", + data->protocol, + g_value_get_string (username)); + + DEBUG ("display name: %s\n", display_name); + + properties = g_hash_table_new (NULL, NULL); + + empathy_account_manager_create_account_async (account_manager, + (const gchar*) data->connection_manager, data->protocol, display_name, + data->settings, properties, import_widget_create_account_cb, + g_object_ref (self)); + + g_hash_table_unref (properties); + g_free (display_name); + g_object_unref (account_manager); +} + +static gboolean +import_widget_tree_model_foreach (GtkTreeModel *model, + GtkTreePath *path, + GtkTreeIter *iter, + gpointer user_data) +{ + gboolean to_import; + EmpathyImportAccountData *data; + EmpathyImportWidget *self = user_data; + + gtk_tree_model_get (model, iter, + COL_IMPORT, &to_import, + COL_ACCOUNT_DATA, &data, + -1); + + if (to_import) + import_widget_add_account (self, data); + + return FALSE; +} + +static void +import_widget_cell_toggled_cb (GtkCellRendererToggle *cell_renderer, + const gchar *path_str, + EmpathyImportWidget *self) +{ + GtkTreeModel *model; + GtkTreeIter iter; + GtkTreePath *path; + EmpathyImportWidgetPriv *priv = GET_PRIV (self); + + path = gtk_tree_path_new_from_string (path_str); + model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview)); + + gtk_tree_model_get_iter (model, &iter, path); + + gtk_list_store_set (GTK_LIST_STORE (model), &iter, + COL_IMPORT, !gtk_cell_renderer_toggle_get_active (cell_renderer), + -1); + + gtk_tree_path_free (path); +} + +static void +import_widget_set_up_account_list (EmpathyImportWidget *self) +{ + EmpathyImportWidgetPriv *priv = GET_PRIV (self); + GtkListStore *store; + GtkTreeView *view; + GtkTreeViewColumn *column; + GtkCellRenderer *cell; + + store = gtk_list_store_new (COL_COUNT, G_TYPE_BOOLEAN, G_TYPE_STRING, + G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER); + + gtk_tree_view_set_model (GTK_TREE_VIEW (priv->treeview), + GTK_TREE_MODEL (store)); + + g_object_unref (store); + + view = GTK_TREE_VIEW (priv->treeview); + gtk_tree_view_set_headers_visible (view, TRUE); + + /* Import column */ + cell = gtk_cell_renderer_toggle_new (); + gtk_tree_view_insert_column_with_attributes (view, -1, + /* Translators: this is the header of a treeview column */ + _("Import"), cell, + "active", COL_IMPORT, + NULL); + + g_signal_connect (cell, "toggled", + G_CALLBACK (import_widget_cell_toggled_cb), self); + + /* Protocol column */ + column = gtk_tree_view_column_new (); + gtk_tree_view_column_set_title (column, _("Protocol")); + gtk_tree_view_column_set_expand (column, TRUE); + gtk_tree_view_append_column (view, column); + + cell = gtk_cell_renderer_text_new (); + g_object_set (cell, "editable", FALSE, NULL); + gtk_tree_view_column_pack_start (column, cell, TRUE); + gtk_tree_view_column_add_attribute (column, cell, "text", COL_PROTOCOL); + + /* Account column */ + column = gtk_tree_view_column_new (); + gtk_tree_view_column_set_title (column, _("Account")); + gtk_tree_view_column_set_expand (column, TRUE); + gtk_tree_view_append_column (view, column); + + cell = gtk_cell_renderer_text_new (); + g_object_set (cell, "editable", FALSE, NULL); + gtk_tree_view_column_pack_start (column, cell, TRUE); + gtk_tree_view_column_add_attribute (column, cell, "text", COL_NAME); + + if (priv->app_id == EMPATHY_IMPORT_APPLICATION_ALL) + { + /* Source column */ + column = gtk_tree_view_column_new (); + gtk_tree_view_column_set_title (column, _("Source")); + gtk_tree_view_column_set_expand (column, TRUE); + gtk_tree_view_append_column (view, column); + + cell = gtk_cell_renderer_text_new (); + g_object_set (cell, "editable", FALSE, NULL); + gtk_tree_view_column_pack_start (column, cell, TRUE); + gtk_tree_view_column_add_attribute (column, cell, "text", COL_SOURCE); + } + + import_widget_add_accounts_to_model (self); +} + +static void +import_widget_cms_ready_cb (EmpathyConnectionManagers *cms, + GParamSpec *pspec, + EmpathyImportWidget *self) +{ + if (empathy_connection_managers_is_ready (cms)) + import_widget_set_up_account_list (self); +} + +static void +import_widget_destroy_cb (GtkWidget *w, + EmpathyImportWidget *self) +{ + g_object_unref (self); +} + +static void +do_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + EmpathyImportWidgetPriv *priv = GET_PRIV (object); + + switch (property_id) + { + case PROP_APPLICATION_ID: + g_value_set_int (value, priv->app_id); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +do_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + EmpathyImportWidgetPriv *priv = GET_PRIV (object); + + switch (property_id) + { + case PROP_APPLICATION_ID: + priv->app_id = g_value_get_int (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +do_finalize (GObject *obj) +{ + EmpathyImportWidgetPriv *priv = GET_PRIV (obj); + + g_list_foreach (priv->accounts, (GFunc) empathy_import_account_data_free, + NULL); + g_list_free (priv->accounts); + + if (G_OBJECT_CLASS (empathy_import_widget_parent_class)->finalize != NULL) + G_OBJECT_CLASS (empathy_import_widget_parent_class)->finalize (obj); +} + +static void +do_dispose (GObject *obj) +{ + EmpathyImportWidgetPriv *priv = GET_PRIV (obj); + + if (priv->dispose_run) + return; + + priv->dispose_run = TRUE; + + if (priv->cms != NULL) + { + g_object_unref (priv->cms); + priv->cms = NULL; + } + + if (G_OBJECT_CLASS (empathy_import_widget_parent_class)->dispose != NULL) + G_OBJECT_CLASS (empathy_import_widget_parent_class)->dispose (obj); +} + +static void +do_constructed (GObject *obj) +{ + EmpathyImportWidget *self = EMPATHY_IMPORT_WIDGET (obj); + EmpathyImportWidgetPriv *priv = GET_PRIV (self); + GtkBuilder *gui; + gchar *filename; + + priv->accounts = empathy_import_accounts_load (priv->app_id); + + filename = empathy_file_lookup ("empathy-import-dialog.ui", "src"); + gui = empathy_builder_get_file (filename, + "widget_vbox", &priv->vbox, + "treeview", &priv->treeview, + NULL); + + g_free (filename); + empathy_builder_unref_and_keep_widget (gui, priv->vbox); + + g_signal_connect (priv->vbox, "destroy", + G_CALLBACK (import_widget_destroy_cb), self); + + if (empathy_connection_managers_is_ready (priv->cms)) + import_widget_set_up_account_list (self); + else + g_signal_connect (priv->cms, "notify::ready", + G_CALLBACK (import_widget_cms_ready_cb), self); +} + +static void +empathy_import_widget_class_init (EmpathyImportWidgetClass *klass) +{ + GObjectClass *oclass = G_OBJECT_CLASS (klass); + GParamSpec *param_spec; + + oclass->constructed = do_constructed; + oclass->finalize = do_finalize; + oclass->dispose = do_dispose; + oclass->set_property = do_set_property; + oclass->get_property = do_get_property; + + param_spec = g_param_spec_int ("application-id", + "application-id", "The application id to import from", + 0, EMPATHY_IMPORT_APPLICATION_INVALID, EMPATHY_IMPORT_APPLICATION_ALL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); + g_object_class_install_property (oclass, PROP_APPLICATION_ID, param_spec); + + g_type_class_add_private (klass, sizeof (EmpathyImportWidgetPriv)); +} + +static void +empathy_import_widget_init (EmpathyImportWidget *self) +{ + EmpathyImportWidgetPriv *priv = + G_TYPE_INSTANCE_GET_PRIVATE (self, EMPATHY_TYPE_IMPORT_WIDGET, + EmpathyImportWidgetPriv); + + self->priv = priv; + + priv->cms = empathy_connection_managers_dup_singleton (); +} + +EmpathyImportWidget * +empathy_import_widget_new (EmpathyImportApplication id) +{ + return g_object_new (EMPATHY_TYPE_IMPORT_WIDGET, "application-id", id, NULL); +} + +GtkWidget * +empathy_import_widget_get_widget (EmpathyImportWidget *self) +{ + EmpathyImportWidgetPriv *priv = GET_PRIV (self); + + return priv->vbox; +} + +void +empathy_import_widget_add_selected_accounts (EmpathyImportWidget *self) +{ + GtkTreeModel *model; + EmpathyImportWidgetPriv *priv = GET_PRIV (self); + + model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview)); + gtk_tree_model_foreach (model, import_widget_tree_model_foreach, self); +} diff --git a/src/empathy-import-widget.h b/src/empathy-import-widget.h new file mode 100644 index 000000000..48f2e1d48 --- /dev/null +++ b/src/empathy-import-widget.h @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2008-2009 Collabora Ltd. + * + * 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 St, Fifth Floor, + * Boston, MA 02110-1301 USA + * + * Authors: Jonny Lamb <jonny.lamb@collabora.co.uk> + * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk> + */ + +/* empathy-import-widget.h */ + +#ifndef __EMPATHY_IMPORT_WIDGET_H__ +#define __EMPATHY_IMPORT_WIDGET_H__ + +#include <glib-object.h> + +#include "empathy-import-utils.h" + +G_BEGIN_DECLS + +#define EMPATHY_TYPE_IMPORT_WIDGET empathy_import_widget_get_type() +#define EMPATHY_IMPORT_WIDGET(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_IMPORT_WIDGET,\ + EmpathyImportWidget)) +#define EMPATHY_IMPORT_WIDGET_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), EMPATHY_TYPE_IMPORT_WIDGET,\ + EmpathyImportWidgetClass)) +#define EMPATHY_IS_IMPORT_WIDGET(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_IMPORT_WIDGET)) +#define EMPATHY_IS_IMPORT_WIDGET_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), EMPATHY_TYPE_IMPORT_WIDGET)) +#define EMPATHY_IMPORT_WIDGET_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_IMPORT_WIDGET,\ + EmpathyImportWidgetClass)) + +typedef struct { + GObject parent; + + /* private */ + gpointer priv; +} EmpathyImportWidget; + +typedef struct { + GObjectClass parent_class; +} EmpathyImportWidgetClass; + +GType empathy_import_widget_get_type (void); + +EmpathyImportWidget* empathy_import_widget_new (EmpathyImportApplication id); + +GtkWidget * empathy_import_widget_get_widget (EmpathyImportWidget *self); + +void empathy_import_widget_add_selected_accounts (EmpathyImportWidget *self); + +G_END_DECLS + +#endif /* __EMPATHY_IMPORT_WIDGET_H__ */ diff --git a/src/empathy-main-window.c b/src/empathy-main-window.c index 7dbe2ec81..8fb127b90 100644 --- a/src/empathy-main-window.c +++ b/src/empathy-main-window.c @@ -49,8 +49,6 @@ #include <libempathy-gtk/empathy-sound.h> #include <libempathy-gtk/empathy-ui-utils.h> -#include <libmissioncontrol/mission-control.h> - #include "empathy-accounts-dialog.h" #include "empathy-main-window.h" #include "ephy-spinner.h" @@ -81,7 +79,6 @@ typedef struct { EmpathyContactListView *list_view; EmpathyContactListStore *list_store; - MissionControl *mc; EmpathyAccountManager *account_manager; EmpathyChatroomManager *chatroom_manager; EmpathyEventManager *event_manager; @@ -654,7 +651,6 @@ main_window_destroy_cb (GtkWidget *widget, g_list_free (window->actions_connected); - g_object_unref (window->mc); g_object_unref (window->account_manager); g_object_unref (window->list_store); g_hash_table_destroy (window->errors); @@ -1252,15 +1248,14 @@ empathy_main_window_show (void) gtk_action_set_visible (show_map_widget, FALSE); #endif - window->mc = empathy_mission_control_dup_singleton (); window->account_manager = empathy_account_manager_dup_singleton (); g_signal_connect (window->account_manager, "account-connection-changed", G_CALLBACK (main_window_connection_changed_cb), window); - window->errors = g_hash_table_new_full (empathy_account_hash, - empathy_account_equal, + window->errors = g_hash_table_new_full (g_direct_hash, + g_direct_equal, g_object_unref, NULL); @@ -1409,6 +1404,8 @@ empathy_main_window_show (void) main_window_update_status (window, window->account_manager); + gtk_widget_show (window->window); + return window->window; } diff --git a/src/empathy-map-view.c b/src/empathy-map-view.c index 8df13922a..9eadee756 100644 --- a/src/empathy-map-view.c +++ b/src/empathy-map-view.c @@ -54,6 +54,7 @@ typedef struct { GtkWidget *throbber; ChamplainView *map_view; ChamplainLayer *layer; + guint timeout_id; } EmpathyMapView; static void @@ -155,6 +156,48 @@ marker_clicked_cb (ChamplainMarker *marker, return FALSE; } +static void +map_view_contacts_update_label (ChamplainMarker *marker) +{ + const gchar *name; + gchar *date; + gchar *label; + GValue *gtime; + time_t loctime; + GHashTable *location; + EmpathyContact *contact; + + contact = g_object_get_data (G_OBJECT (marker), "contact"); + location = empathy_contact_get_location (contact); + name = empathy_contact_get_name (contact); + gtime = g_hash_table_lookup (location, EMPATHY_LOCATION_TIMESTAMP); + + if (gtime != NULL) + { + time_t now; + + loctime = g_value_get_int64 (gtime); + date = empathy_time_to_string_relative (loctime); + label = g_strconcat ("<b>", name, "</b>\n<small>", date, "</small>", NULL); + g_free (date); + + now = time (NULL); + + /* if location is older than a week */ + if (now - loctime > (60 * 60 * 24 * 7)) + clutter_actor_set_opacity (CLUTTER_ACTOR (marker), 0.75 * 255); + } + else + { + label = g_strconcat ("<b>", name, "</b>\n", NULL); + } + + champlain_marker_set_use_markup (CHAMPLAIN_MARKER (marker), TRUE); + champlain_marker_set_text (CHAMPLAIN_MARKER (marker), label); + + g_free (label); +} + static gboolean map_view_contacts_foreach (GtkTreeModel *model, GtkTreePath *path, @@ -167,11 +210,6 @@ map_view_contacts_foreach (GtkTreeModel *model, ClutterActor *texture; GHashTable *location; GdkPixbuf *avatar; - const gchar *name; - gchar *date; - gchar *label; - GValue *gtime; - time_t loctime; gtk_tree_model_get (model, iter, EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, &contact, -1); @@ -198,30 +236,10 @@ map_view_contacts_foreach (GtkTreeModel *model, else champlain_marker_set_image (CHAMPLAIN_MARKER (marker), NULL); - name = empathy_contact_get_name (contact); - gtime = g_hash_table_lookup (location, EMPATHY_LOCATION_TIMESTAMP); - if (gtime != NULL) - { - time_t now; - - loctime = g_value_get_int64 (gtime); - date = empathy_time_to_string_relative (loctime); - label = g_strconcat ("<b>", name, "</b>\n<small>", date, "</small>", NULL); - g_free (date); + g_object_set_data_full (G_OBJECT (marker), "contact", + g_object_ref (contact), g_object_unref); - now = time (NULL); - - /* if location is older than a week */ - if (now - loctime > (60 * 60 * 24 * 7)) - clutter_actor_set_opacity (CLUTTER_ACTOR (marker), 0.75 * 255); - } - else - { - label = g_strconcat ("<b>", name, "</b>\n", NULL); - } - champlain_marker_set_use_markup (CHAMPLAIN_MARKER (marker), TRUE); - champlain_marker_set_text (CHAMPLAIN_MARKER (marker), label); - g_free (label); + map_view_contacts_update_label (CHAMPLAIN_MARKER (marker)); clutter_actor_set_reactive (CLUTTER_ACTOR (marker), TRUE); g_signal_connect (marker, "button-release-event", @@ -231,8 +249,6 @@ map_view_contacts_foreach (GtkTreeModel *model, g_signal_connect (contact, "notify::location", G_CALLBACK (map_view_contact_location_notify), marker); - g_object_set_data_full (G_OBJECT (marker), "contact", - g_object_ref (contact), g_object_unref); map_view_marker_update_position (CHAMPLAIN_MARKER (marker), contact); @@ -246,6 +262,8 @@ map_view_destroy_cb (GtkWidget *widget, { GList *item; + g_source_remove (window->timeout_id); + item = clutter_container_get_children (CLUTTER_CONTAINER (window->layer)); while (item != NULL) { @@ -265,6 +283,19 @@ map_view_destroy_cb (GtkWidget *widget, g_slice_free (EmpathyMapView, window); } +static gboolean +map_view_tick (EmpathyMapView *window) +{ + GList *marker; + + marker = clutter_container_get_children (CLUTTER_CONTAINER (window->layer)); + + for (; marker; marker = marker->next) + map_view_contacts_update_label (marker->data); + + return TRUE; +} + GtkWidget * empathy_map_view_show (void) { @@ -343,6 +374,11 @@ empathy_map_view_show (void) gtk_tree_model_foreach (model, map_view_contacts_foreach, window); empathy_window_present (GTK_WINDOW (window->window), TRUE); + + /* Set up time updating loop */ + window->timeout_id = g_timeout_add_seconds (5, + (GSourceFunc) map_view_tick, window); + return window->window; } diff --git a/src/empathy-map-view.ui b/src/empathy-map-view.ui index 545136d4d..7d3e3cefc 100644 --- a/src/empathy-map-view.ui +++ b/src/empathy-map-view.ui @@ -69,9 +69,11 @@ </packing> </child> <child> - <object class="GtkViewport" id="map_scrolledwindow"> + <object class="GtkFrame" id="map_scrolledwindow"> <property name="visible">True</property> <property name="resize_mode">queue</property> + <property name="label_xalign">0</property> + <property name="shadow_type">in</property> <child> <placeholder/> </child> diff --git a/src/empathy-new-chatroom-dialog.c b/src/empathy-new-chatroom-dialog.c index e16da91a7..219be371d 100644 --- a/src/empathy-new-chatroom-dialog.c +++ b/src/empathy-new-chatroom-dialog.c @@ -32,9 +32,6 @@ #include <glib/gi18n.h> #include <glib/gprintf.h> -#include <libmissioncontrol/mission-control.h> -#include <libmissioncontrol/mc-profile.h> - #include <libempathy/empathy-tp-roomlist.h> #include <libempathy/empathy-chatroom.h> #include <libempathy/empathy-utils.h> @@ -358,14 +355,16 @@ new_chatroom_dialog_update_widgets (EmpathyNewChatroomDialog *dialog) { EmpathyAccountChooser *account_chooser; EmpathyAccount *account; - McProfile *profile; const gchar *protocol; const gchar *room; account_chooser = EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser); account = empathy_account_chooser_dup_account (account_chooser); - profile = empathy_account_get_profile (account); - protocol = mc_profile_get_protocol_name (profile); + + if (account == NULL) + return; + + protocol = empathy_account_get_protocol (account); gtk_entry_set_text (GTK_ENTRY (dialog->entry_server), ""); @@ -390,7 +389,6 @@ new_chatroom_dialog_update_widgets (EmpathyNewChatroomDialog *dialog) gtk_widget_grab_focus (dialog->entry_room); g_object_unref (account); - g_object_unref (profile); } static void diff --git a/src/empathy-status-icon.c b/src/empathy-status-icon.c index bbb97f410..430c93343 100644 --- a/src/empathy-status-icon.c +++ b/src/empathy-status-icon.c @@ -314,24 +314,7 @@ status_icon_set_visibility (EmpathyStatusIcon *icon, if (!visible) { empathy_window_iconify (priv->window, priv->icon); } else { - GList *accounts; - GList *l; - gboolean one_enabled = FALSE; - empathy_window_present (GTK_WINDOW (priv->window), TRUE); - - /* Show the accounts dialog if there is no enabled accounts */ - accounts = empathy_account_manager_dup_accounts (priv->account_manager); - for (l = accounts ; l != NULL ; l = g_list_next (l)) { - one_enabled = empathy_account_is_enabled (EMPATHY_ACCOUNT (l->data)) - || one_enabled; - g_object_unref (l->data); - } - g_list_free (accounts); - if (!one_enabled) { - DEBUG ("No enabled account, Showing account dialog"); - empathy_accounts_dialog_show (GTK_WINDOW (priv->window), NULL); - } } } diff --git a/src/empathy-tube-dispatch.c b/src/empathy-tube-dispatch.c index 67db5a3a3..66efa217d 100644 --- a/src/empathy-tube-dispatch.c +++ b/src/empathy-tube-dispatch.c @@ -25,6 +25,7 @@ #include <telepathy-glib/dbus.h> #include <telepathy-glib/util.h> #include <telepathy-glib/proxy-subclass.h> +#include <telepathy-glib/interfaces.h> #include <gtk/gtk.h> #include <glib/gi18n.h> diff --git a/src/empathy.c b/src/empathy.c index 660e47cea..38fd56c54 100644 --- a/src/empathy.c +++ b/src/empathy.c @@ -1,6 +1,5 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* - * Copyright (C) 2007-2008 Collabora Ltd. + * Copyright (C) 2007-2009 Collabora Ltd. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -30,6 +29,7 @@ #include <glib/gi18n.h> #include <gtk/gtk.h> #include <gdk/gdkx.h> +#include <unique/unique.h> #if HAVE_LIBCHAMPLAIN #include <clutter-gtk/clutter-gtk.h> @@ -40,14 +40,17 @@ #include <telepathy-glib/dbus.h> #include <telepathy-glib/util.h> -#include <libmissioncontrol/mission-control.h> +#include <telepathy-glib/connection-manager.h> +#include <telepathy-glib/interfaces.h> #include <libempathy/empathy-idle.h> #include <libempathy/empathy-utils.h> #include <libempathy/empathy-call-factory.h> #include <libempathy/empathy-chatroom-manager.h> +#include <libempathy/empathy-account-settings.h> #include <libempathy/empathy-connectivity.h> #include <libempathy/empathy-account-manager.h> +#include <libempathy/empathy-connection-managers.h> #include <libempathy/empathy-debugger.h> #include <libempathy/empathy-dispatcher.h> #include <libempathy/empathy-dispatch-operation.h> @@ -60,13 +63,14 @@ #include <libempathy-gtk/empathy-ui-utils.h> #include <libempathy-gtk/empathy-location-manager.h> +#include "empathy-account-assistant.h" #include "empathy-accounts-dialog.h" #include "empathy-main-window.h" #include "empathy-status-icon.h" #include "empathy-call-window.h" #include "empathy-chat-window.h" #include "empathy-ft-manager.h" -#include "bacon-message-connection.h" +#include "empathy-import-mc4-accounts.h" #include "extensions/extensions.h" @@ -75,444 +79,432 @@ #include <gst/gst.h> -static BaconMessageConnection *connection = NULL; +#define COMMAND_ACCOUNTS_DIALOG 1 static void dispatch_cb (EmpathyDispatcher *dispatcher, - EmpathyDispatchOperation *operation, - gpointer user_data) + EmpathyDispatchOperation *operation, + gpointer user_data) { - GQuark channel_type; - - channel_type = empathy_dispatch_operation_get_channel_type_id (operation); - - if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_TEXT) { - EmpathyTpChat *tp_chat; - EmpathyChat *chat = NULL; - const gchar *id; - - tp_chat = EMPATHY_TP_CHAT ( - empathy_dispatch_operation_get_channel_wrapper (operation)); - - id = empathy_tp_chat_get_id (tp_chat); - if (!id) { - EmpathyContact *contact; - - contact = empathy_tp_chat_get_remote_contact (tp_chat); - if (contact) { - id = empathy_contact_get_id (contact); - } - } - - if (id) { - EmpathyAccountManager *manager; - TpConnection *connection; - EmpathyAccount *account; - - manager = empathy_account_manager_dup_singleton (); - connection = empathy_tp_chat_get_connection (tp_chat); - account = empathy_account_manager_get_account (manager, - connection); - chat = empathy_chat_window_find_chat (account, id); - g_object_unref (manager); - } - - if (chat) { - empathy_chat_set_tp_chat (chat, tp_chat); - } else { - chat = empathy_chat_new (tp_chat); - } - - empathy_chat_window_present_chat (chat); - - empathy_dispatch_operation_claim (operation); - } else if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_STREAMED_MEDIA) { - EmpathyCallFactory *factory; - - factory = empathy_call_factory_get (); - empathy_call_factory_claim_channel (factory, operation); - } else if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_FILE_TRANSFER) { - EmpathyFTFactory *factory; - - factory = empathy_ft_factory_dup_singleton (); - - /* if the operation is not incoming, don't claim it, - * as it might have been triggered by another client, and - * we are observing it. - */ - if (empathy_dispatch_operation_is_incoming (operation)) { - empathy_ft_factory_claim_channel (factory, operation); - } - } + GQuark channel_type; + + channel_type = empathy_dispatch_operation_get_channel_type_id (operation); + + if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_TEXT) + { + EmpathyTpChat *tp_chat; + EmpathyChat *chat = NULL; + const gchar *id; + + tp_chat = EMPATHY_TP_CHAT + (empathy_dispatch_operation_get_channel_wrapper (operation)); + + id = empathy_tp_chat_get_id (tp_chat); + if (!id) + { + EmpathyContact *contact; + + contact = empathy_tp_chat_get_remote_contact (tp_chat); + if (contact) + id = empathy_contact_get_id (contact); + } + + if (id) + { + EmpathyAccountManager *manager; + TpConnection *connection; + EmpathyAccount *account; + + manager = empathy_account_manager_dup_singleton (); + connection = empathy_tp_chat_get_connection (tp_chat); + account = empathy_account_manager_get_account_for_connection ( + manager, connection); + chat = empathy_chat_window_find_chat (account, id); + g_object_unref (manager); + } + + if (chat) + empathy_chat_set_tp_chat (chat, tp_chat); + else + chat = empathy_chat_new (tp_chat); + + empathy_chat_window_present_chat (chat); + + empathy_dispatch_operation_claim (operation); + } + else if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_STREAMED_MEDIA) + { + EmpathyCallFactory *factory; + + factory = empathy_call_factory_get (); + empathy_call_factory_claim_channel (factory, operation); + } + else if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_FILE_TRANSFER) + { + EmpathyFTFactory *factory; + + factory = empathy_ft_factory_dup_singleton (); + + /* if the operation is not incoming, don't claim it, + * as it might have been triggered by another client, and + * we are observing it. + */ + if (empathy_dispatch_operation_is_incoming (operation)) + empathy_ft_factory_claim_channel (factory, operation); + } } -static void -service_ended_cb (MissionControl *mc, - gpointer user_data) +/* Salut account creation */ +static gboolean +should_create_salut_account (void) { - DEBUG ("Mission Control stopped"); + EmpathyAccountManager *manager; + gboolean salut_created = FALSE; + GList *accounts, *l; + + /* Check if we already created a salut account */ + empathy_conf_get_bool (empathy_conf_get (), + EMPATHY_PREFS_SALUT_ACCOUNT_CREATED, + &salut_created); + + if (salut_created) + { + DEBUG ("Gconf says we already created a salut account once"); + return FALSE; + } + + manager = empathy_account_manager_dup_singleton (); + accounts = empathy_account_manager_dup_accounts (manager); + + for (l = accounts; l != NULL; l = g_list_next (l)) + { + EmpathyAccount *account = EMPATHY_ACCOUNT (l->data); + + if (!tp_strdiff (empathy_account_get_protocol (account), "local-xmpp")) + salut_created = TRUE; + + g_object_unref (account); + } + + g_object_unref (manager); + + if (salut_created) + { + DEBUG ("Existing salut account already exists, flagging so in gconf"); + empathy_conf_set_bool (empathy_conf_get (), + EMPATHY_PREFS_SALUT_ACCOUNT_CREATED, + TRUE); + } + + return !salut_created; } static void -operation_error_cb (MissionControl *mc, - guint operation_id, - guint error_code, - gpointer user_data) +salut_account_created (GObject *source, + GAsyncResult *result, + gpointer user_data) { - const gchar *message; - - switch (error_code) { - case MC_DISCONNECTED_ERROR: - message = "Disconnected"; - break; - case MC_INVALID_HANDLE_ERROR: - message = "Invalid handle"; - break; - case MC_NO_MATCHING_CONNECTION_ERROR: - message = "No matching connection"; - break; - case MC_INVALID_ACCOUNT_ERROR: - message = "Invalid account"; - break; - case MC_PRESENCE_FAILURE_ERROR: - message = "Presence failure"; - break; - case MC_NO_ACCOUNTS_ERROR: - message = "No accounts"; - break; - case MC_NETWORK_ERROR: - message = "Network error"; - break; - case MC_CONTACT_DOES_NOT_SUPPORT_VOICE_ERROR: - message = "Contact does not support voice"; - break; - case MC_LOWMEM_ERROR: - message = "Lowmem"; - break; - case MC_CHANNEL_REQUEST_GENERIC_ERROR: - message = "Channel request generic error"; - break; - case MC_CHANNEL_BANNED_ERROR: - message = "Channel banned"; - break; - case MC_CHANNEL_FULL_ERROR: - message = "Channel full"; - break; - case MC_CHANNEL_INVITE_ONLY_ERROR: - message = "Channel invite only"; - break; - default: - message = "Unknown error code"; - } - - DEBUG ("Error during operation %d: %s", operation_id, message); + EmpathyAccountSettings *settings = EMPATHY_ACCOUNT_SETTINGS (source); + EmpathyAccount *account; + GError *error = NULL; + + if (!empathy_account_settings_apply_finish (settings, result, &error)) + { + DEBUG ("Failed to create salut account: %s", error->message); + g_error_free (error); + return; + } + + account = empathy_account_settings_get_account (settings); + + empathy_account_set_enabled_async (account, TRUE, NULL, NULL); + empathy_conf_set_bool (empathy_conf_get (), + EMPATHY_PREFS_SALUT_ACCOUNT_CREATED, + TRUE); } static void use_conn_notify_cb (EmpathyConf *conf, - const gchar *key, - gpointer user_data) + const gchar *key, + gpointer user_data) { - EmpathyConnectivity *connectivity = user_data; - gboolean use_conn; + EmpathyConnectivity *connectivity = user_data; + gboolean use_conn; - if (empathy_conf_get_bool (conf, key, &use_conn)) { - empathy_connectivity_set_use_conn (connectivity, use_conn); - } + if (empathy_conf_get_bool (conf, key, &use_conn)) + { + empathy_connectivity_set_use_conn (connectivity, use_conn); + } } static void -create_salut_account (void) +create_salut_account_if_needed (EmpathyConnectionManagers *managers) { - McProfile *profile; - McProtocol *protocol; - gboolean salut_created = FALSE; - EmpathyAccount *account; - EmpathyAccountManager *account_manager; - GList *accounts; - EBook *book; - EContact *contact; - gchar *nickname = NULL; - gchar *first_name = NULL; - gchar *last_name = NULL; - gchar *email = NULL; - gchar *jid = NULL; - GError *error = NULL; - - /* Check if we already created a salut account */ - empathy_conf_get_bool (empathy_conf_get (), - EMPATHY_PREFS_SALUT_ACCOUNT_CREATED, - &salut_created); - if (salut_created) { - return; - } - - DEBUG ("Try to add a salut account..."); - - /* Check if the salut CM is installed */ - profile = mc_profile_lookup ("salut"); - if (!profile) { - DEBUG ("No salut profile"); - return; - } - protocol = mc_profile_get_protocol (profile); - if (!protocol) { - DEBUG ("Salut not installed"); - g_object_unref (profile); - return; - } - g_object_unref (protocol); - - /* Get self EContact from EDS */ - if (!e_book_get_self (&contact, &book, &error)) { - DEBUG ("Failed to get self econtact: %s", - error ? error->message : "No error given"); - g_clear_error (&error); - g_object_unref (profile); - return; - } - - empathy_conf_set_bool (empathy_conf_get (), - EMPATHY_PREFS_SALUT_ACCOUNT_CREATED, - TRUE); - - /* Check if there is already a salut account */ - accounts = mc_accounts_list_by_profile (profile); - if (accounts) { - DEBUG ("There is already a salut account"); - mc_accounts_list_free (accounts); - g_object_unref (profile); - return; - } - - account_manager = empathy_account_manager_dup_singleton (); - account = empathy_account_manager_create (account_manager, profile); - empathy_account_set_display_name (account, _("People nearby")); - g_object_unref (account_manager); - - nickname = e_contact_get (contact, E_CONTACT_NICKNAME); - first_name = e_contact_get (contact, E_CONTACT_GIVEN_NAME); - last_name = e_contact_get (contact, E_CONTACT_FAMILY_NAME); - email = e_contact_get (contact, E_CONTACT_EMAIL_1); - jid = e_contact_get (contact, E_CONTACT_IM_JABBER_HOME_1); - - if (!tp_strdiff (nickname, "nickname")) { - g_free (nickname); - nickname = NULL; - } - - DEBUG ("Salut account created:\nnickname=%s\nfirst-name=%s\n" - "last-name=%s\nemail=%s\njid=%s\n", - nickname, first_name, last_name, email, jid); - - empathy_account_set_param_string (account, "nickname", nickname ? nickname : ""); - empathy_account_set_param_string (account, "first-name", first_name ? first_name : ""); - empathy_account_set_param_string (account, "last-name", last_name ? last_name : ""); - empathy_account_set_param_string (account, "email", email ? email : ""); - empathy_account_set_param_string (account, "jid", jid ? jid : ""); - - g_free (nickname); - g_free (first_name); - g_free (last_name); - g_free (email); - g_free (jid); - g_object_unref (account); - g_object_unref (profile); - g_object_unref (contact); - g_object_unref (book); + EmpathyAccountSettings *settings; + TpConnectionManager *manager; + const TpConnectionManagerProtocol *protocol; + EBook *book; + EContact *contact; + gchar *nickname = NULL; + gchar *first_name = NULL; + gchar *last_name = NULL; + gchar *email = NULL; + gchar *jid = NULL; + GError *error = NULL; + + + if (!should_create_salut_account ()) + return; + + manager = empathy_connection_managers_get_cm (managers, "salut"); + if (manager == NULL) + { + DEBUG ("Salut not installed, not making a salut account"); + return; + } + + protocol = tp_connection_manager_get_protocol (manager, "local-xmpp"); + if (protocol == NULL) + { + DEBUG ("Salut doesn't support local-xmpp!!"); + return; + } + + DEBUG ("Trying to add a salut account..."); + + /* Get self EContact from EDS */ + if (!e_book_get_self (&contact, &book, &error)) + { + DEBUG ("Failed to get self econtact: %s", + error ? error->message : "No error given"); + g_clear_error (&error); + return; + } + + settings = empathy_account_settings_new ("salut", "local-xmpp", + _("People nearby")); + + nickname = e_contact_get (contact, E_CONTACT_NICKNAME); + first_name = e_contact_get (contact, E_CONTACT_GIVEN_NAME); + last_name = e_contact_get (contact, E_CONTACT_FAMILY_NAME); + email = e_contact_get (contact, E_CONTACT_EMAIL_1); + jid = e_contact_get (contact, E_CONTACT_IM_JABBER_HOME_1); + + if (!tp_strdiff (nickname, "nickname")) + { + g_free (nickname); + nickname = NULL; + } + + DEBUG ("Salut account created:\nnickname=%s\nfirst-name=%s\n" + "last-name=%s\nemail=%s\njid=%s\n", + nickname, first_name, last_name, email, jid); + + empathy_account_settings_set_string (settings, + "nickname", nickname ? nickname : ""); + empathy_account_settings_set_string (settings, + "first-name", first_name ? first_name : ""); + empathy_account_settings_set_string (settings, + "last-name", last_name ? last_name : ""); + empathy_account_settings_set_string (settings, "email", email ? email : ""); + empathy_account_settings_set_string (settings, "jid", jid ? jid : ""); + + empathy_account_settings_apply_async (settings, + salut_account_created, NULL); + + g_free (nickname); + g_free (first_name); + g_free (last_name); + g_free (email); + g_free (jid); + g_object_unref (settings); + g_object_unref (contact); + g_object_unref (book); } static void -migrate_config_to_xdg_dir (void) +maybe_show_account_assistant (void) { - gchar *xdg_dir, *old_dir, *xdg_filename, *old_filename; - int i; - GFile *xdg_file, *old_file; - static const gchar* filenames[] = { - "geometry.ini", - "irc-networks.xml", - "chatrooms.xml", - "contact-groups.xml", - "status-presets.xml", - "accels.txt", - NULL - }; - - xdg_dir = g_build_filename (g_get_user_config_dir (), PACKAGE_NAME, NULL); - if (g_file_test (xdg_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) { - /* xdg config dir already exists */ - g_free (xdg_dir); - return; - } - - old_dir = g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME, NULL); - if (!g_file_test (old_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) { - /* old config dir didn't exist */ - g_free (xdg_dir); - g_free (old_dir); - return; - } - - if (g_mkdir_with_parents (xdg_dir, (S_IRUSR | S_IWUSR | S_IXUSR)) == -1) { - DEBUG ("Failed to create configuration directory; aborting migration"); - g_free (xdg_dir); - g_free (old_dir); - return; - } - - for (i = 0; filenames[i]; i++) { - old_filename = g_build_filename (old_dir, filenames[i], NULL); - if (!g_file_test (old_filename, G_FILE_TEST_EXISTS)) { - g_free (old_filename); - continue; - } - xdg_filename = g_build_filename (xdg_dir, filenames[i], NULL); - old_file = g_file_new_for_path (old_filename); - xdg_file = g_file_new_for_path (xdg_filename); - if (!g_file_move (old_file, xdg_file, G_FILE_COPY_NONE, - NULL, NULL, NULL, NULL)) { - DEBUG ("Failed to migrate %s", filenames[i]); - } - g_free (old_filename); - g_free (xdg_filename); - g_object_unref (old_file); - g_object_unref (xdg_file); - } - - g_free (xdg_dir); - g_free (old_dir); + EmpathyAccountManager *manager; + manager = empathy_account_manager_dup_singleton (); + + if (empathy_account_manager_get_count (manager) == 0) + { + GtkWidget * assistant = empathy_account_assistant_new ( + GTK_WINDOW (empathy_main_window_get ())); + gtk_window_present (GTK_WINDOW (assistant)); + } } -/* The code that handles single-instance and startup notification is - * copied from gedit. - * - * Copyright (C) 2005 - Paolo Maggi - */ -static void -on_bacon_message_received (const char *message, - gpointer data) +static gboolean +check_connection_managers_ready (EmpathyConnectionManagers *managers) { - GtkWidget *window = data; - guint32 startup_timestamp; - - g_return_if_fail (message != NULL); - - DEBUG ("Other instance launched, presenting the main window. message='%s'", - message); - - if (strcmp (message, "accounts") == 0) { - /* accounts dialog requested */ - empathy_accounts_dialog_show (GTK_WINDOW (window), NULL); - } else { - startup_timestamp = atoi (message); - - /* Set the proper interaction time on the window. - * Fall back to roundtripping to the X server when we - * don't have the timestamp, e.g. when launched from - * terminal. We also need to make sure that the window - * has been realized otherwise it will not work. lame. */ - if (startup_timestamp == 0) { - /* Work if launched from the terminal */ - DEBUG ("Using X server timestamp as a fallback"); - - if (!GTK_WIDGET_REALIZED (window)) { - gtk_widget_realize (GTK_WIDGET (window)); - } - - startup_timestamp = gdk_x11_get_server_time (gtk_widget_get_window (window)); - } - - gtk_window_present_with_time (GTK_WINDOW (window), startup_timestamp); - } + if (empathy_connection_managers_is_ready (managers)) + { + if (!empathy_import_mc4_accounts (managers)) + maybe_show_account_assistant (); + + create_salut_account_if_needed (managers); + g_object_unref (managers); + managers = NULL; + return TRUE; + } + return FALSE; } -static guint32 -get_startup_timestamp () +static void +connection_managers_ready_cb (EmpathyConnectionManagers *managers, + GParamSpec *spec, + gpointer user_data) { - const gchar *startup_id_env; - gchar *startup_id = NULL; - gchar *time_str; - gchar *end; - gulong retval = 0; - - /* we don't unset the env, since startup-notification - * may still need it */ - startup_id_env = g_getenv ("DESKTOP_STARTUP_ID"); - if (startup_id_env == NULL) { - goto out; - } - - startup_id = g_strdup (startup_id_env); - - time_str = g_strrstr (startup_id, "_TIME"); - if (time_str == NULL) { - goto out; - } - - errno = 0; - - /* Skip past the "_TIME" part */ - time_str += 5; - - retval = strtoul (time_str, &end, 0); - if (end == time_str || errno != 0) - retval = 0; + check_connection_managers_ready (managers); +} - out: - g_free (startup_id); +static void +migrate_config_to_xdg_dir (void) +{ + gchar *xdg_dir, *old_dir, *xdg_filename, *old_filename; + int i; + GFile *xdg_file, *old_file; + static const gchar* filenames[] = { + "geometry.ini", + "irc-networks.xml", + "chatrooms.xml", + "contact-groups.xml", + "status-presets.xml", + "accels.txt", + NULL + }; + + xdg_dir = g_build_filename (g_get_user_config_dir (), PACKAGE_NAME, NULL); + if (g_file_test (xdg_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) + { + /* xdg config dir already exists */ + g_free (xdg_dir); + return; + } + + old_dir = g_build_filename (g_get_home_dir (), ".gnome2", + PACKAGE_NAME, NULL); + if (!g_file_test (old_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) + { + /* old config dir didn't exist */ + g_free (xdg_dir); + g_free (old_dir); + return; + } + + if (g_mkdir_with_parents (xdg_dir, (S_IRUSR | S_IWUSR | S_IXUSR)) == -1) + { + DEBUG ("Failed to create configuration directory; aborting migration"); + g_free (xdg_dir); + g_free (old_dir); + return; + } + + for (i = 0; filenames[i]; i++) + { + old_filename = g_build_filename (old_dir, filenames[i], NULL); + if (!g_file_test (old_filename, G_FILE_TEST_EXISTS)) + { + g_free (old_filename); + continue; + } + xdg_filename = g_build_filename (xdg_dir, filenames[i], NULL); + old_file = g_file_new_for_path (old_filename); + xdg_file = g_file_new_for_path (xdg_filename); + + if (!g_file_move (old_file, xdg_file, G_FILE_COPY_NONE, + NULL, NULL, NULL, NULL)) + DEBUG ("Failed to migrate %s", filenames[i]); + + g_free (old_filename); + g_free (xdg_filename); + g_object_unref (old_file); + g_object_unref (xdg_file); + } + + g_free (xdg_dir); + g_free (old_dir); +} - return (retval > 0) ? retval : 0; +static UniqueResponse +unique_app_message_cb (UniqueApp *unique_app, + gint command, + UniqueMessageData *data, + guint timestamp, + gpointer user_data) +{ + GtkWidget *window = user_data; + + DEBUG ("Other instance launched, presenting the main window. " + "Command=%d, timestamp %u", command, timestamp); + + if (command == COMMAND_ACCOUNTS_DIALOG) + { + empathy_accounts_dialog_show (GTK_WINDOW (window), NULL); + } + else + { + gtk_window_set_screen (GTK_WINDOW (window), + unique_message_data_get_screen (data)); + gtk_window_set_startup_id (GTK_WINDOW (window), + unique_message_data_get_startup_id (data)); + gtk_window_present_with_time (GTK_WINDOW (window), timestamp); + } + + return UNIQUE_RESPONSE_OK; } static gboolean show_version_cb (const char *option_name, - const char *value, - gpointer data, - GError **error) + const char *value, + gpointer data, + GError **error) { - g_print ("%s\n", PACKAGE_STRING); + g_print ("%s\n", PACKAGE_STRING); - exit (EXIT_SUCCESS); + exit (EXIT_SUCCESS); - return FALSE; + return FALSE; } static void new_incoming_transfer_cb (EmpathyFTFactory *factory, - EmpathyFTHandler *handler, - GError *error, - gpointer user_data) + EmpathyFTHandler *handler, + GError *error, + gpointer user_data) { - if (error) { - empathy_ft_manager_display_error (handler, error); - } else { - empathy_receive_file_with_file_chooser (handler); - } + if (error) + empathy_ft_manager_display_error (handler, error); + else + empathy_receive_file_with_file_chooser (handler); } static void new_ft_handler_cb (EmpathyFTFactory *factory, - EmpathyFTHandler *handler, - GError *error, - gpointer user_data) + EmpathyFTHandler *handler, + GError *error, + gpointer user_data) { - if (error) { - empathy_ft_manager_display_error (handler, error); - } else { - empathy_ft_manager_add_handler (handler); - } + if (error) + empathy_ft_manager_display_error (handler, error); + else + empathy_ft_manager_add_handler (handler); - g_object_unref (handler); + g_object_unref (handler); } static void -new_call_handler_cb (EmpathyCallFactory *factory, EmpathyCallHandler *handler, - gboolean outgoing, gpointer user_data) +new_call_handler_cb (EmpathyCallFactory *factory, + EmpathyCallHandler *handler, + gboolean outgoing, + gpointer user_data) { - EmpathyCallWindow *window; + EmpathyCallWindow *window; - window = empathy_call_window_new (handler); - gtk_widget_show (GTK_WIDGET (window)); + window = empathy_call_window_new (handler); + gtk_widget_show (GTK_WIDGET (window)); } #ifdef ENABLE_DEBUG @@ -522,249 +514,246 @@ default_log_handler (const gchar *log_domain, const gchar *message, gpointer user_data) { - g_log_default_handler (log_domain, log_level, message, NULL); - - /* G_LOG_DOMAIN = "empathy". No need to send empathy messages to the - * debugger as they already have in empathy_debug. */ - if (log_level != G_LOG_LEVEL_DEBUG - || tp_strdiff (log_domain, G_LOG_DOMAIN)) { - EmpathyDebugger *dbg; - GTimeVal now; - - dbg = empathy_debugger_get_singleton (); - g_get_current_time (&now); - - empathy_debugger_add_message (dbg, &now, log_domain, - log_level, message); - } + g_log_default_handler (log_domain, log_level, message, NULL); + + /* G_LOG_DOMAIN = "empathy". No need to send empathy messages to the + * debugger as they already have in empathy_debug. */ + if (log_level != G_LOG_LEVEL_DEBUG + || tp_strdiff (log_domain, G_LOG_DOMAIN)) + { + EmpathyDebugger *dbg; + GTimeVal now; + + dbg = empathy_debugger_get_singleton (); + g_get_current_time (&now); + + empathy_debugger_add_message (dbg, &now, log_domain, + log_level, message); + } } #endif /* ENABLE_DEBUG */ +static void +account_manager_ready_cb (EmpathyAccountManager *manager, + GParamSpec *spec, + gpointer user_data) +{ + if (!empathy_account_manager_is_ready (manager)) + return; + + if (should_create_salut_account () || !empathy_import_mc4_has_imported ()) + { + EmpathyConnectionManagers *managers; + managers = empathy_connection_managers_dup_singleton (); + + if (!check_connection_managers_ready (managers)) + { + g_signal_connect (managers, "notify::ready", + G_CALLBACK (connection_managers_ready_cb), NULL); + } + } + else + { + maybe_show_account_assistant (); + } +} + int main (int argc, char *argv[]) { - guint32 startup_timestamp; #if HAVE_GEOCLUE - EmpathyLocationManager *location_manager = NULL; + EmpathyLocationManager *location_manager = NULL; #endif - EmpathyStatusIcon *icon; - EmpathyDispatcher *dispatcher; - EmpathyLogManager *log_manager; - EmpathyChatroomManager *chatroom_manager; - EmpathyCallFactory *call_factory; - EmpathyFTFactory *ft_factory; - GtkWidget *window; - MissionControl *mc; - EmpathyIdle *idle; - EmpathyConnectivity *connectivity; - gboolean autoconnect = TRUE; - gboolean no_connect = FALSE; - gboolean hide_contact_list = FALSE; - gboolean accounts_dialog = FALSE; - GError *error = NULL; - TpDBusDaemon *dbus_daemon; - GOptionEntry options[] = { - { "no-connect", 'n', - 0, G_OPTION_ARG_NONE, &no_connect, - N_("Don't connect on startup"), - NULL }, - { "hide-contact-list", 'h', - 0, G_OPTION_ARG_NONE, &hide_contact_list, - N_("Don't show the contact list on startup"), - NULL }, - { "accounts", 'a', - 0, G_OPTION_ARG_NONE, &accounts_dialog, - N_("Show the accounts dialog"), - NULL }, - { "version", 'v', - G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, show_version_cb, NULL, NULL }, - { NULL } - }; - - /* Init */ - g_thread_init (NULL); - empathy_init (); - - if (!gtk_init_with_args (&argc, &argv, - N_("- Empathy IM Client"), - options, GETTEXT_PACKAGE, &error)) { - g_warning ("Error in empathy init: %s", error->message); - return EXIT_FAILURE; - } - - empathy_gtk_init (); - g_set_application_name (_(PACKAGE_NAME)); - g_setenv ("PULSE_PROP_media.role", "phone", TRUE); - - gst_init (&argc, &argv); + EmpathyStatusIcon *icon; + EmpathyDispatcher *dispatcher; + EmpathyAccountManager *account_manager; + EmpathyLogManager *log_manager; + EmpathyChatroomManager *chatroom_manager; + EmpathyCallFactory *call_factory; + EmpathyFTFactory *ft_factory; + GtkWidget *window; + EmpathyIdle *idle; + EmpathyConnectivity *connectivity; + gboolean autoconnect = TRUE; + gboolean no_connect = FALSE; + gboolean hide_contact_list = FALSE; + gboolean accounts_dialog = FALSE; + GError *error = NULL; + TpDBusDaemon *dbus_daemon; + UniqueApp *unique_app; + + GOptionEntry options[] = { + { "no-connect", 'n', + 0, G_OPTION_ARG_NONE, &no_connect, + N_("Don't connect on startup"), + NULL }, + { "hide-contact-list", 'h', + 0, G_OPTION_ARG_NONE, &hide_contact_list, + N_("Don't show the contact list on startup"), + NULL }, + { "accounts", 'a', + 0, G_OPTION_ARG_NONE, &accounts_dialog, + N_("Show the accounts dialog"), + NULL }, + { "version", 'v', + G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, show_version_cb, + NULL, NULL }, + { NULL } + }; + + /* Init */ + g_thread_init (NULL); + empathy_init (); + + if (!gtk_init_with_args (&argc, &argv, N_("- Empathy IM Client"), + options, GETTEXT_PACKAGE, &error)) + { + g_warning ("Error in empathy init: %s", error->message); + return EXIT_FAILURE; + } + + empathy_gtk_init (); + g_set_application_name (_(PACKAGE_NAME)); + g_setenv ("PULSE_PROP_media.role", "phone", TRUE); + + gst_init (&argc, &argv); #if HAVE_LIBCHAMPLAIN - gtk_clutter_init (&argc, &argv); + gtk_clutter_init (&argc, &argv); #endif - gtk_window_set_default_icon_name ("empathy"); - textdomain (GETTEXT_PACKAGE); + gtk_window_set_default_icon_name ("empathy"); + textdomain (GETTEXT_PACKAGE); #ifdef ENABLE_DEBUG - /* Set up debugger */ - g_log_set_default_handler (default_log_handler, NULL); + /* Set up debugger */ + g_log_set_default_handler (default_log_handler, NULL); #endif - /* Setting up the bacon connection */ - startup_timestamp = get_startup_timestamp (); - connection = bacon_message_connection_new ("empathy"); - if (connection != NULL) { - if (!bacon_message_connection_get_is_server (connection)) { - gchar *message; - - if (accounts_dialog) { - DEBUG ("Showing accounts dialog from existing Empathy instance"); - - message = g_strdup ("accounts"); - - } else { - - DEBUG ("Activating existing instance"); - - message = g_strdup_printf ("%" G_GUINT32_FORMAT, - startup_timestamp); - } - - bacon_message_connection_send (connection, message); - - /* We never popup a window, so tell startup-notification - * that we are done. */ - gdk_notify_startup_complete (); - - g_free (message); - bacon_message_connection_free (connection); - - return EXIT_SUCCESS; - } - } else { - g_warning ("Cannot create the 'empathy' bacon connection."); - } - - /* Take well-known name */ - dbus_daemon = tp_dbus_daemon_dup (&error); - if (error == NULL) { - if (!tp_dbus_daemon_request_name (dbus_daemon, - "org.gnome.Empathy", - TRUE, &error)) { - DEBUG ("Failed to request well-known name: %s", - error ? error->message : "no message"); - g_clear_error (&error); - } - g_object_unref (dbus_daemon); - } else { - DEBUG ("Failed to dup dbus daemon: %s", - error ? error->message : "no message"); - g_clear_error (&error); - } - - /* Setting up MC */ - mc = empathy_mission_control_dup_singleton (); - g_signal_connect (mc, "ServiceEnded", - G_CALLBACK (service_ended_cb), - NULL); - g_signal_connect (mc, "Error", - G_CALLBACK (operation_error_cb), - NULL); - - if (accounts_dialog) { - GtkWidget *dialog; - - dialog = empathy_accounts_dialog_show (NULL, NULL); - g_signal_connect (dialog, "destroy", - G_CALLBACK (gtk_main_quit), - NULL); - - gtk_main (); - return 0; - } - - /* Setting up Idle */ - idle = empathy_idle_dup_singleton (); - empathy_idle_set_auto_away (idle, TRUE); - - /* Setting up Connectivity */ - connectivity = empathy_connectivity_dup_singleton (); - use_conn_notify_cb (empathy_conf_get (), EMPATHY_PREFS_USE_CONN, - connectivity); - empathy_conf_notify_add (empathy_conf_get (), EMPATHY_PREFS_USE_CONN, - use_conn_notify_cb, connectivity); - - /* Autoconnect */ - empathy_conf_get_bool (empathy_conf_get (), - EMPATHY_PREFS_AUTOCONNECT, - &autoconnect); - if (autoconnect && ! no_connect && - tp_connection_presence_type_cmp_availability (empathy_idle_get_state - (idle), TP_CONNECTION_PRESENCE_TYPE_OFFLINE) <= 0) { - empathy_idle_set_state (idle, MC_PRESENCE_AVAILABLE); - } - - - migrate_config_to_xdg_dir (); - create_salut_account (); - - /* Setting up UI */ - window = empathy_main_window_show (); - icon = empathy_status_icon_new (GTK_WINDOW (window), hide_contact_list); - - if (connection) { - /* We se the callback here because we need window */ - bacon_message_connection_set_callback (connection, - on_bacon_message_received, - window); - } - - /* Handle channels */ - dispatcher = empathy_dispatcher_dup_singleton (); - g_signal_connect (dispatcher, "dispatch", G_CALLBACK (dispatch_cb), NULL); - - /* Logging */ - log_manager = empathy_log_manager_dup_singleton (); - empathy_log_manager_observe (log_manager, dispatcher); - - chatroom_manager = empathy_chatroom_manager_dup_singleton (NULL); - empathy_chatroom_manager_observe (chatroom_manager, dispatcher); - - notify_init (_(PACKAGE_NAME)); - /* Create the call factory */ - call_factory = empathy_call_factory_initialise (); - g_signal_connect (G_OBJECT (call_factory), "new-call-handler", - G_CALLBACK (new_call_handler_cb), NULL); - /* Create the FT factory */ - ft_factory = empathy_ft_factory_dup_singleton (); - g_signal_connect (ft_factory, "new-ft-handler", - G_CALLBACK (new_ft_handler_cb), NULL); - g_signal_connect (ft_factory, "new-incoming-transfer", - G_CALLBACK (new_incoming_transfer_cb), NULL); - - /* Location mananger */ + unique_app = unique_app_new_with_commands ("org.gnome.Empathy", + NULL, "accounts_dialog", COMMAND_ACCOUNTS_DIALOG, NULL); + + if (unique_app_is_running (unique_app)) + { + unique_app_send_message (unique_app, accounts_dialog ? + COMMAND_ACCOUNTS_DIALOG : UNIQUE_ACTIVATE, NULL); + + g_object_unref (unique_app); + return EXIT_SUCCESS; + } + + /* Take well-known name */ + dbus_daemon = tp_dbus_daemon_dup (&error); + if (error == NULL) + { + if (!tp_dbus_daemon_request_name (dbus_daemon, + "org.gnome.Empathy", TRUE, &error)) + { + DEBUG ("Failed to request well-known name: %s", + error ? error->message : "no message"); + g_clear_error (&error); + } + g_object_unref (dbus_daemon); + } + else + { + DEBUG ("Failed to dup dbus daemon: %s", + error ? error->message : "no message"); + g_clear_error (&error); + } + + if (accounts_dialog) + { + GtkWidget *dialog; + + dialog = empathy_accounts_dialog_show (NULL, NULL); + g_signal_connect (dialog, "destroy", + G_CALLBACK (gtk_main_quit), NULL); + + gtk_main (); + return 0; + } + + /* Setting up Idle */ + idle = empathy_idle_dup_singleton (); + empathy_idle_set_auto_away (idle, TRUE); + + /* Setting up Connectivity */ + connectivity = empathy_connectivity_dup_singleton (); + use_conn_notify_cb (empathy_conf_get (), EMPATHY_PREFS_USE_CONN, + connectivity); + empathy_conf_notify_add (empathy_conf_get (), EMPATHY_PREFS_USE_CONN, + use_conn_notify_cb, connectivity); + + /* Autoconnect */ + empathy_conf_get_bool (empathy_conf_get (), + EMPATHY_PREFS_AUTOCONNECT, &autoconnect); + if (autoconnect && !no_connect && + tp_connection_presence_type_cmp_availability + (empathy_idle_get_state (idle), TP_CONNECTION_PRESENCE_TYPE_OFFLINE) + <= 0) + empathy_idle_set_state (idle, TP_CONNECTION_PRESENCE_TYPE_AVAILABLE); + + /* account management */ + account_manager = empathy_account_manager_dup_singleton (); + g_signal_connect (account_manager, "notify::ready", + G_CALLBACK (account_manager_ready_cb), NULL); + + migrate_config_to_xdg_dir (); + + /* Setting up UI */ + window = empathy_main_window_show (); + icon = empathy_status_icon_new (GTK_WINDOW (window), hide_contact_list); + + g_signal_connect (unique_app, "message-received", + G_CALLBACK (unique_app_message_cb), window); + + /* Handle channels */ + dispatcher = empathy_dispatcher_dup_singleton (); + g_signal_connect (dispatcher, "dispatch", G_CALLBACK (dispatch_cb), NULL); + + /* Logging */ + log_manager = empathy_log_manager_dup_singleton (); + empathy_log_manager_observe (log_manager, dispatcher); + + chatroom_manager = empathy_chatroom_manager_dup_singleton (NULL); + empathy_chatroom_manager_observe (chatroom_manager, dispatcher); + + notify_init (_(PACKAGE_NAME)); + /* Create the call factory */ + call_factory = empathy_call_factory_initialise (); + g_signal_connect (G_OBJECT (call_factory), "new-call-handler", + G_CALLBACK (new_call_handler_cb), NULL); + /* Create the FT factory */ + ft_factory = empathy_ft_factory_dup_singleton (); + g_signal_connect (ft_factory, "new-ft-handler", + G_CALLBACK (new_ft_handler_cb), NULL); + g_signal_connect (ft_factory, "new-incoming-transfer", + G_CALLBACK (new_incoming_transfer_cb), NULL); + + /* Location mananger */ #if HAVE_GEOCLUE - location_manager = empathy_location_manager_dup_singleton (); + location_manager = empathy_location_manager_dup_singleton (); #endif - gtk_main (); + gtk_main (); - empathy_idle_set_state (idle, TP_CONNECTION_PRESENCE_TYPE_OFFLINE); + empathy_idle_set_state (idle, TP_CONNECTION_PRESENCE_TYPE_OFFLINE); - g_object_unref (mc); - g_object_unref (idle); - g_object_unref (connectivity); - g_object_unref (icon); - g_object_unref (log_manager); - g_object_unref (dispatcher); - g_object_unref (chatroom_manager); + g_object_unref (idle); + g_object_unref (connectivity); + g_object_unref (icon); + g_object_unref (account_manager); + g_object_unref (log_manager); + g_object_unref (dispatcher); + g_object_unref (chatroom_manager); #if HAVE_GEOCLUE - g_object_unref (location_manager); + g_object_unref (location_manager); #endif - g_object_unref (ft_factory); + g_object_unref (ft_factory); + g_object_unref (unique_app); - notify_uninit (); + notify_uninit (); - return EXIT_SUCCESS; + return EXIT_SUCCESS; } - diff --git a/tests/.gitignore b/tests/.gitignore index eac793465..a522514bd 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -4,6 +4,7 @@ contact-run-until-ready contact-run-until-ready-2 *.log empetit +test-empathy-account-assistant test-empathy-presence-chooser test-empathy-status-preset-dialog -test-empathy-profile-chooser +test-empathy-protocol-chooser diff --git a/tests/Makefile.am b/tests/Makefile.am index f96650e79..8832181dd 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -25,15 +25,25 @@ LDADD = \ noinst_PROGRAMS = \ contact-manager \ empetit \ + test-empathy-account-assistant \ test-empathy-presence-chooser \ test-empathy-status-preset-dialog \ - test-empathy-profile-chooser + test-empathy-protocol-chooser contact_manager_SOURCES = contact-manager.c empetit_SOURCES = empetit.c test_empathy_presence_chooser_SOURCES = test-empathy-presence-chooser.c test_empathy_status_preset_dialog_SOURCES = test-empathy-status-preset-dialog.c -test_empathy_profile_chooser_SOURCES = test-empathy-profile-chooser.c +test_empathy_protocol_chooser_SOURCES = test-empathy-protocol-chooser.c +test_empathy_account_assistant_SOURCES = test-empathy-account-assistant.c + +test_empathy_account_assistant_CFLAGS = -I$(top_srcdir)/src +test_empathy_account_assistant_LDADD = \ + $(top_builddir)/src/empathy-account-assistant.o \ + $(top_builddir)/src/empathy-import-utils.o \ + $(top_builddir)/src/empathy-import-pidgin.o \ + $(top_builddir)/src/empathy-import-widget.o \ + $(LDADD) check_PROGRAMS = check-main TESTS = check-main diff --git a/tests/check-empathy-chatroom-manager.c b/tests/check-empathy-chatroom-manager.c index 1c0f924a2..5a3384fe4 100644 --- a/tests/check-empathy-chatroom-manager.c +++ b/tests/check-empathy-chatroom-manager.c @@ -18,6 +18,7 @@ #define CHATROOM_SAMPLE "chatrooms-sample.xml" #define CHATROOM_FILE "chatrooms.xml" +#if 0 static void check_chatroom (EmpathyChatroom *chatroom, const gchar *name, @@ -384,15 +385,18 @@ START_TEST (test_empathy_chatroom_manager_change_chatroom) g_object_unref (account_manager); } END_TEST +#endif TCase * make_empathy_chatroom_manager_tcase (void) { TCase *tc = tcase_create ("empathy-chatroom-manager"); + /* tcase_add_test (tc, test_empathy_chatroom_manager_dup_singleton); tcase_add_test (tc, test_empathy_chatroom_manager_add); tcase_add_test (tc, test_empathy_chatroom_manager_remove); tcase_add_test (tc, test_empathy_chatroom_manager_change_favorite); tcase_add_test (tc, test_empathy_chatroom_manager_change_chatroom); + */ return tc; } diff --git a/tests/check-empathy-chatroom.c b/tests/check-empathy-chatroom.c index f2110a8f8..4d0b7e1ee 100644 --- a/tests/check-empathy-chatroom.c +++ b/tests/check-empathy-chatroom.c @@ -9,6 +9,7 @@ #include <libempathy/empathy-chatroom.h> +#if 0 static EmpathyChatroom * create_chatroom (void) { @@ -143,13 +144,16 @@ START_TEST (test_change_favorite) fail_if (!changed); } END_TEST +#endif TCase * make_empathy_chatroom_tcase (void) { TCase *tc = tcase_create ("empathy-chatroom"); + /* tcase_add_test (tc, test_empathy_chatroom_new); tcase_add_test (tc, test_favorite_and_auto_connect); tcase_add_test (tc, test_change_favorite); + */ return tc; } diff --git a/tests/check-empathy-helpers.c b/tests/check-empathy-helpers.c index c77cf9b75..5fb8b4a35 100644 --- a/tests/check-empathy-helpers.c +++ b/tests/check-empathy-helpers.c @@ -65,6 +65,7 @@ copy_xml_file (const gchar *orig, g_free (buffer); } +#if 0 EmpathyAccount * get_test_account (void) { @@ -79,7 +80,8 @@ get_test_account (void) if (g_list_length (accounts) == 0) { /* need to create a test account */ - account = empathy_account_manager_create (account_manager, profile); + account = empathy_account_manager_create_by_profile (account_manager, + profile); } else { @@ -165,3 +167,4 @@ destroy_test_account (EmpathyAccount *account) g_object_unref (account); g_object_unref (manager); } +#endif diff --git a/tests/test-empathy-account-assistant.c b/tests/test-empathy-account-assistant.c new file mode 100644 index 000000000..6d1330eeb --- /dev/null +++ b/tests/test-empathy-account-assistant.c @@ -0,0 +1,25 @@ +#include <config.h> + +#include <gtk/gtk.h> + +#include <libempathy-gtk/empathy-ui-utils.h> +#include "empathy-account-assistant.h" + +int main (int argc, char **argv) +{ + GtkWidget *assistant; + + gtk_init (&argc, &argv); + empathy_gtk_init (); + + assistant = empathy_account_assistant_new (NULL); + + gtk_widget_show_all (assistant); + + g_signal_connect_swapped (assistant, "destroy", + G_CALLBACK (gtk_main_quit), NULL); + + gtk_main (); + + return 0; +} diff --git a/tests/test-empathy-profile-chooser.c b/tests/test-empathy-protocol-chooser.c index 9078bbde4..90b1797a3 100644 --- a/tests/test-empathy-profile-chooser.c +++ b/tests/test-empathy-protocol-chooser.c @@ -3,21 +3,21 @@ #include <gtk/gtk.h> #include <libempathy-gtk/empathy-ui-utils.h> -#include <libempathy-gtk/empathy-profile-chooser.h> +#include <libempathy-gtk/empathy-protocol-chooser.h> int main (int argc, char **argv) { - GtkWidget *window; - GtkWidget *chooser; + GtkWidget *window, *c; gtk_init (&argc, &argv); empathy_gtk_init (); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - chooser = empathy_profile_chooser_new (); - gtk_container_add (GTK_CONTAINER (window), chooser); + c = empathy_protocol_chooser_new (); + + gtk_container_add (GTK_CONTAINER (window), c); /* gtk_window_set_default_size (GTK_WINDOW (window), 150, -1);*/ gtk_widget_show_all (window); |