Mercurial > pidgin
changeset 19499:47a2d00ab060
propagate from branch 'im.pidgin.pidgin' (head 1ade185e4daf699979b517ddb70cee47cd15e7ee)
to branch 'im.pidgin.soc.2007.certmgr' (head 59d49a3a37747b811f234de6931e7c575bf885fb)
author | William Ehlhardt <williamehlhardt@gmail.com> |
---|---|
date | Tue, 28 Aug 2007 01:14:08 +0000 |
parents | 8c00833b9959 (diff) 7589b218f89a (current diff) |
children | 6e4b16081dff |
files | configure.ac libpurple/Makefile.am libpurple/util.c libpurple/util.h pidgin/gtkblist.c pidgin/pixmaps/emotes/default/24/madtongue.png |
diffstat | 125 files changed, 12374 insertions(+), 3757 deletions(-) [+] |
line wrap: on
line diff
--- a/AUTHORS Sat Aug 25 20:32:15 2007 +0000 +++ b/AUTHORS Tue Aug 28 01:14:08 2007 +0000 @@ -22,7 +22,7 @@ Ka-Hing Cheung - Developer Sadrul Habib Chowdhury - Developer Mark 'KingAnt' Doliner - Developer -Christian 'ChipX86' Hammond - Developer & Webmaster +Casey Harkins - Developer Gary 'grim' Kramlich - Developer Richard 'rlaager' Laager - Developer Richard 'wabz' Nelson - Developer @@ -31,21 +31,16 @@ Etan 'deryni' Reisner - Developer Tim 'marv' Ringenbach - Developer Luke 'LSchiere' Schierer - Support -Megan 'Cae' Schneider (support/QA) +Megan 'Cae' Schneider - support/QA Evan Schoenberg - Developer +Kevin 'SimGuy' Stange - Developer & Webmaster Stu 'nosnilmot' Tomlinson - Developer Nathan 'faceprint' Walp - Developer Crazy Patch Writers: ------------------- John 'rekkanoryo' Bailey -Felipe 'shx' Contreras -Decklin Foster -Casey Harkins Peter 'Bleeter' Lawler -Robert 'Robot101' McQueen -Benjamin Miller -Kevin 'SimGuy' Stange Retired Developers: ------------------ @@ -53,11 +48,19 @@ Jim Duchek <jim@linuxpimps.com> - maintainer Rob Flynn <gaim@robflynn.com> - maintainer Adam Fritzler - libfaim maintainer +Christian 'ChipX86' Hammond - Developer & Webmaster Syd Logan - hacker and designated driver [lazy bum] Jim Seymour - XMPP developer Mark Spencer <markster@marko.net> - original author Eric Warmenhoven <eric@warmenhoven.org> - lead developer +Retired Crazy Patch Writers: +--------------------------- +Felipe 'shx' Contreras +Decklin Foster +Robert 'Robot101' McQueen +Benjamin Miller + Artists: ------- Hylke Bons - Icons
--- a/COPYRIGHT Sat Aug 25 20:32:15 2007 +0000 +++ b/COPYRIGHT Tue Aug 28 01:14:08 2007 +0000 @@ -156,12 +156,14 @@ Casey Harkins Andy Harrison Andrew Hart (arhart) +Anders Hasselqvist Rene Hausleitner Will Hawkins G. Sumner Hayes Michael R. Head Nick Hebner Mike Heffner +Justin Heiner Benjamin Herrenschmidt Fernando Herrera hjheins @@ -214,6 +216,7 @@ Nicolas Lichtmaier Wesley Lin Artem Litvinovich +Josh Littlefield Syd Logan Lokheed Norberto Lopes @@ -304,6 +307,7 @@ Bob Rossi Jason Roth Jean-Francois Roy +Peter Ruibal Sam S. Pradyumna Sampath Arvind Samptur
--- a/ChangeLog Sat Aug 25 20:32:15 2007 +0000 +++ b/ChangeLog Tue Aug 28 01:14:08 2007 +0000 @@ -1,6 +1,21 @@ Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul -version 2.1.1 (08/17/2007): +version 2.2.0: + Libpurple: + * New protocol plugin: MySpaceIM (Jeff Connelly, Google Summer of + Code) + + Pidgin: + * Insert Horizontal Rules and Strikethrough text from toolbar + * Option to show protocol icons in the buddy list, from the + Buddies > Show menu (Justin Heiner) + * Ability to build with native, non-X11 GTK+ on OSX (Anders + Hasselqvist) + + Finch: + * Per-conversation mute and logging options (accessible from the menu) + +version 2.1.1 (08/20/2007): Yahoo: * Added an account action to open your inbox in the yahoo prpl. * Added support for Unicode status messages in Yahoo.
--- a/ChangeLog.API Sat Aug 25 20:32:15 2007 +0000 +++ b/ChangeLog.API Tue Aug 28 01:14:08 2007 +0000 @@ -1,6 +1,24 @@ Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul -Version 2.1.1 (08/17/2007): +Version 2.2.0 (??/??/????): + Pidgin: + Added: + * pidgin_set_accessible_relations, sets up label-for and labelled-by + ATK relations (broken out from pidgin_set_accessible_label) + + Finch: + Added: + * finch_sound_is_enabled + * The reserved field in the FinchConv is now used to store information + about the conversation (using FinchConversationFlag) + + libgnt: + * gnt_slider_set_small_step, gnt_slider_set_large_step to allow more + fine tuned updates of a GntSlider + * gnt_util_parse_xhtml_to_textview to parse XHTML strings in a + GntTextView (this works only if libxml2 is available) + +Version 2.1.1 (08/20/2007): libpurple: Changed: * PurpleAccountUiOps.request_authorize's authorize_cb and
--- a/ChangeLog.win32 Sat Aug 25 20:32:15 2007 +0000 +++ b/ChangeLog.win32 Tue Aug 28 01:14:08 2007 +0000 @@ -1,4 +1,4 @@ -version 2.1.1 (08/17/2007): +version 2.1.1 (08/20/2007): * No changes version 2.1.0 (7/28/2007):
--- a/NEWS Sat Aug 25 20:32:15 2007 +0000 +++ b/NEWS Tue Aug 28 01:14:08 2007 +0000 @@ -1,6 +1,6 @@ Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul -2.1.1 (8/17/2007): +2.1.1 (8/20/2007): Sean: Continuing our schedule of frequent releases, Pidgin 2.1.1 is out. In it, we've addressed a lot of UI issues from our experimental new changes introduced in 2.1.0, and gave a lot of
--- a/configure.ac Sat Aug 25 20:32:15 2007 +0000 +++ b/configure.ac Tue Aug 28 01:14:08 2007 +0000 @@ -43,18 +43,18 @@ # # Make sure to update finch/libgnt/configure.ac with libgnt version changes. # -m4_define([purple_lt_current], [1]) +m4_define([purple_lt_current], [2]) m4_define([purple_major_version], [2]) -m4_define([purple_minor_version], [1]) -m4_define([purple_micro_version], [1]) +m4_define([purple_minor_version], [2]) +m4_define([purple_micro_version], [0]) m4_define([purple_version_suffix], [devel]) m4_define([purple_version], [purple_major_version.purple_minor_version.purple_micro_version]) m4_define([purple_display_version], purple_version[]m4_ifdef([purple_version_suffix],[purple_version_suffix])) -m4_define([gnt_lt_current], [1]) +m4_define([gnt_lt_current], [2]) m4_define([gnt_major_version], [2]) -m4_define([gnt_minor_version], [1]) +m4_define([gnt_minor_version], [2]) m4_define([gnt_micro_version], [0]) m4_define([gnt_version_suffix], [devel]) m4_define([gnt_version], @@ -275,6 +275,8 @@ AC_SUBST(GLIB_CFLAGS) AC_SUBST(GLIB_LIBS) +AC_ARG_WITH(x, [], + with_x="$withval", with_x="yes") AC_ARG_ENABLE(gtkui, [AC_HELP_STRING([--disable-gtkui], [compile without GTK+ user interface])], enable_gtkui="$enableval", enable_gtkui="yes") @@ -309,7 +311,10 @@ [AC_HELP_STRING([--disable-cap], [compile without Contact Availability Prediction plugin])], enable_cap="$enableval", enable_cap="yes") - +AC_ARG_ENABLE(gestures, + [AC_HELP_STRING([--disable-gestures], + [compile without the gestures plugin])], + enable_gestures="$enableval", enable_gestures="yes") AC_PATH_XTRA # We can't assume that $x_libraries will be set, because autoconf does not @@ -343,50 +348,79 @@ AC_DEFINE(HAVE_PANGO14, 1, [Define if we have Pango 1.4 or newer.]),:) dnl ####################################################################### + dnl # Check if we should compile with X support + dnl ####################################################################### + if test "x$with_x" = "xyes" ; then + PKG_CHECK_MODULES(X11, x11, + [AC_DEFINE(HAVE_X, 1, [Define to 1 if you have X11])], + [AC_MSG_RESULT(no) + with_x=no]) + AC_SUBST(X11_LIBS) + AC_SUBST(X11_CFLAGS) + fi + + dnl ####################################################################### dnl # Check for XScreenSaver dnl ####################################################################### if test "x$enable_screensaver" = "xyes" ; then - old_LIBS="$LIBS" - LIBS="$LIBS $GTK_LIBS $x_libpath_add" - XSS_LIBS="" - XSS_HEADERS="" - AC_CHECK_LIB(Xext, XScreenSaverRegister,[XSS_LIBS="$X_LIBS $X_PRE_LIBS -lX11 -lXext $X_EXTRA_LIBS"],[],[-lX11 -lXext -lm]) - AC_CHECK_LIB(Xss, XScreenSaverRegister,[XSS_LIBS="$X_LIBS $X_PRE_LIBS -lX11 -lXext $X_LIBS $X_EXTRA_LIBS -lXss"],[],[-lX11 -lXext -lm]) - if test "x$XSS_LIBS" != "x"; then - oldCPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $x_incpath_add" - AC_TRY_COMPILE([ + if test "x$with_x" = "xyes" ; then + old_LIBS="$LIBS" + LIBS="$LIBS $GTK_LIBS $x_libpath_add" + XSS_LIBS="" + XSS_HEADERS="" + AC_CHECK_LIB(Xext, XScreenSaverRegister,[XSS_LIBS="$X_LIBS $X_PRE_LIBS -lX11 -lXext $X_EXTRA_LIBS"],[],[-lX11 -lXext -lm]) + AC_CHECK_LIB(Xss, XScreenSaverRegister,[XSS_LIBS="$X_LIBS $X_PRE_LIBS -lX11 -lXext $X_LIBS $X_EXTRA_LIBS -lXss"],[],[-lX11 -lXext -lm]) + if test "x$XSS_LIBS" != "x"; then + oldCPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $x_incpath_add" + AC_TRY_COMPILE([ #include <X11/Xlib.h> #include <X11/extensions/scrnsaver.h> - ], [], [], [enable_screensaver=no]) - CPPFLAGS="$oldCPPFLAGS" + ], [], [], [enable_screensaver=no]) + CPPFLAGS="$oldCPPFLAGS" + else + enable_screensaver=no + fi + LIBS="$old_LIBS" + + if test "x$enable_screensaver" = "xyes" ; then + AC_DEFINE(USE_SCREENSAVER, 1, [Define if we're using XScreenSaver.]) + AC_SUBST(XSS_LIBS) + fi else enable_screensaver=no fi - LIBS="$old_LIBS" - - if test "x$enable_screensaver" = "xyes" ; then - AC_DEFINE(USE_SCREENSAVER, 1, [Define if we're using XScreenSaver.]) - AC_SUBST(XSS_LIBS) - fi fi dnl ####################################################################### dnl # Check for X session management libs dnl ####################################################################### if test "x$enable_sm" = "xyes"; then - enable_sm=no - AC_CHECK_LIB(SM, SmcSaveYourselfDone, found_sm_lib=true, , [$x_libpath_add -lICE]) - if test "x$found_sm_lib" = "xtrue"; then - oldCPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $x_incpath_add" - AC_CHECK_HEADERS(X11/SM/SMlib.h, SM_LIBS="$x_libpath_add -lSM -lICE" enable_sm=yes) - CPPFLAGS="$oldCPPFLAGS" + if test "x$with_x" = "xyes" ; then + enable_sm=no + AC_CHECK_LIB(SM, SmcSaveYourselfDone, found_sm_lib=true, , [$x_libpath_add -lICE]) + if test "x$found_sm_lib" = "xtrue"; then + oldCPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $x_incpath_add" + AC_CHECK_HEADERS(X11/SM/SMlib.h, SM_LIBS="$x_libpath_add -lSM -lICE" enable_sm=yes) + CPPFLAGS="$oldCPPFLAGS" + fi + + if test "x$enable_sm" = "xyes"; then + AC_DEFINE(USE_SM, 1, [Define if we're using X Session Management.]) + AC_SUBST(SM_LIBS) + fi + else + enable_sm=no fi + fi - if test "x$enable_sm" = "xyes"; then - AC_DEFINE(USE_SM, 1, [Define if we're using X Session Management.]) - AC_SUBST(SM_LIBS) + dnl ####################################################################### + dnl # Check for X11 to allow the gestures plugin + dnl ####################################################################### + if test "x$enable_gestures" = "xyes"; then + if test "x$with_x" = "xno" ; then + enable_gestures=no fi fi @@ -450,10 +484,11 @@ dnl ####################################################################### if test "x$enable_cap" = "xyes"; then PKG_CHECK_MODULES(SQLITE3, sqlite3 >= 3.3,,[ - AC_MSG_RESULT(no) - enable_cap="no" - ]) + AC_MSG_RESULT(no) + enable_cap="no" + ]) fi + else # GTK enable_cap=no @@ -467,6 +502,8 @@ AM_CONDITIONAL(ENABLE_GTK, test "x$enable_gtkui" = "xyes") AM_CONDITIONAL(BUILD_GEVOLUTION, test "x$enable_gevolution" = "xyes") AM_CONDITIONAL(ENABLE_CAP, test "x$enable_cap" = "xyes") +AM_CONDITIONAL(ENABLE_GESTURES, test "x$enable_gestures" = "xyes") + dnl ####################################################################### dnl # Check for ncurses and other things used by the console UI @@ -531,11 +568,6 @@ fi fi fi - - PKG_CHECK_MODULES(X11, x11, - [AC_DEFINE(HAVE_X11, 1, [Define to 1 if you have X11])], [AC_MSG_RESULT(no)]) - AC_SUBST(X11_LIBS) - AC_SUBST(X11_CFLAGS) fi AC_SUBST(GNT_LIBS) @@ -858,7 +890,7 @@ fi if test "x$STATIC_PRPLS" = "xall" ; then - STATIC_PRPLS="bonjour gg irc jabber msn novell oscar qq sametime silc simple yahoo zephyr" + STATIC_PRPLS="bonjour gg irc jabber msn myspace novell oscar qq sametime silc simple yahoo zephyr" fi if test "x$have_meanwhile" != "xyes" ; then STATIC_PRPLS=`echo $STATIC_PRPLS | $sedpath 's/sametime//'` @@ -904,6 +936,7 @@ irc) static_irc=yes ;; jabber) static_jabber=yes ;; msn) static_msn=yes ;; + myspace) static_myspace=yes ;; novell) static_novell=yes ;; oscar) static_oscar=yes ;; aim) static_oscar=yes ;; @@ -924,6 +957,7 @@ AM_CONDITIONAL(STATIC_IRC, test "x$static_irc" = "xyes") AM_CONDITIONAL(STATIC_JABBER, test "x$static_jabber" = "xyes") AM_CONDITIONAL(STATIC_MSN, test "x$static_msn" = "xyes") +AM_CONDITIONAL(STATIC_MYSPACE, test "x$static_myspace" = "xyes") AM_CONDITIONAL(STATIC_NOVELL, test "x$static_novell" = "xyes") AM_CONDITIONAL(STATIC_OSCAR, test "x$static_oscar" = "xyes") AM_CONDITIONAL(STATIC_QQ, test "x$static_qq" = "xyes") @@ -939,7 +973,7 @@ AC_ARG_WITH(dynamic_prpls, [AC_HELP_STRING([--with-dynamic-prpls], [specify which protocols to build dynamically])], [DYNAMIC_PRPLS=`echo $withval | $sedpath 's/,/ /g'`]) if test "x$DYNAMIC_PRPLS" = "xall" ; then - DYNAMIC_PRPLS="bonjour gg irc jabber msn novell oscar qq sametime silc simple yahoo zephyr" + DYNAMIC_PRPLS="bonjour gg irc jabber msn myspace novell oscar qq sametime silc simple yahoo zephyr" fi if test "x$have_meanwhile" != "xyes"; then DYNAMIC_PRPLS=`echo $DYNAMIC_PRPLS | $sedpath 's/sametime//'` @@ -963,6 +997,7 @@ irc) dynamic_irc=yes ;; jabber) dynamic_jabber=yes ;; msn) dynamic_msn=yes ;; + myspace) dynamic_myspace=yes ;; novell) dynamic_novell=yes ;; oscar) dynamic_oscar=yes ;; aim) dynamic_oscar=yes ;; @@ -983,6 +1018,7 @@ AM_CONDITIONAL(DYNAMIC_IRC, test "x$dynamic_irc" = "xyes") AM_CONDITIONAL(DYNAMIC_JABBER, test "x$dynamic_jabber" = "xyes") AM_CONDITIONAL(DYNAMIC_MSN, test "x$dynamic_msn" = "xyes") +AM_CONDITIONAL(DYNAMIC_MYSPACE, test "x$dynamic_myspace" = "xyes") AM_CONDITIONAL(DYNAMIC_NOVELL, test "x$dynamic_novell" = "xyes") AM_CONDITIONAL(DYNAMIC_OSCAR, test "x$dynamic_oscar" = "xyes") AM_CONDITIONAL(DYNAMIC_QQ, test "x$dynamic_qq" = "xyes") @@ -2137,6 +2173,7 @@ pidgin/pixmaps/status/Makefile pidgin/pixmaps/status/11/Makefile pidgin/pixmaps/status/11/scalable/Makefile + pidgin/pixmaps/status/11/rtl/Makefile pidgin/pixmaps/status/16/Makefile pidgin/pixmaps/status/16/rtl/Makefile pidgin/pixmaps/status/16/scalable/Makefile @@ -2187,6 +2224,7 @@ libpurple/protocols/irc/Makefile libpurple/protocols/jabber/Makefile libpurple/protocols/msn/Makefile + libpurple/protocols/myspace/Makefile libpurple/protocols/novell/Makefile libpurple/protocols/null/Makefile libpurple/protocols/oscar/Makefile @@ -2206,6 +2244,7 @@ finch/Makefile finch/libgnt/Makefile finch/libgnt/gnt.pc + finch/libgnt/pygnt/Makefile finch/libgnt/wms/Makefile finch/plugins/Makefile po/Makefile.in @@ -2218,7 +2257,9 @@ echo echo Build GTK+ 2.x UI............. : $enable_gtkui echo Build console UI.............. : $enable_consoleui +echo Build for X11................. : $with_x echo +echo Enable Gestures............... : $enable_gestures echo Protocols to build dynamically : $DYNAMIC_PRPLS echo Protocols to link statically.. : $STATIC_PRPLS echo
--- a/doc/funniest_home_convos.txt Sat Aug 25 20:32:15 2007 +0000 +++ b/doc/funniest_home_convos.txt Tue Aug 28 01:14:08 2007 +0000 @@ -474,3 +474,16 @@ 19:23 <-- elb has quit (K-lined) +19:01 <user> whoa +19:01 <user> okay +19:01 <user> now when i try to go into the left over files after the + uninstall +19:01 <user> something is seriously wrong because it says "the files on the + c drive are not formatted, would you like to format?" +19:03 <user> manually deleting the folder from command gives me a "Data + error (cyclic redundancy check)." +19:03 <elb> remember, one line per thought +19:03 <elb> and yes, you have something wrong with your computer, we've + established that +19:03 <user> its functioning just fine +
--- a/finch/gntaccount.c Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/gntaccount.c Tue Aug 28 01:14:08 2007 +0000 @@ -222,6 +222,11 @@ /* XXX: Proxy options */ + if (accounts.window && accounts.tree) { + gnt_tree_set_selected(GNT_TREE(accounts.tree), account); + gnt_box_give_focus_to_child(GNT_BOX(accounts.window), accounts.tree); + } + gnt_widget_destroy(dialog->window); }
--- a/finch/gntblist.c Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/gntblist.c Tue Aug 28 01:14:08 2007 +0000 @@ -2139,20 +2139,29 @@ } } -static void -account_signed_on_cb(PurpleConnection *pc, gpointer null) +static gboolean +auto_join_chats(gpointer data) { PurpleBlistNode *node; + PurpleConnection *pc = data; + PurpleAccount *account = purple_connection_get_account(pc); for (node = purple_blist_get_root(); node; node = purple_blist_node_next(node, FALSE)) { if (PURPLE_BLIST_NODE_IS_CHAT(node)) { PurpleChat *chat = (PurpleChat*)node; - if (chat->account == purple_connection_get_account(pc) && + if (chat->account == account && purple_blist_node_get_bool(node, "gnt-autojoin")) serv_join_chat(purple_account_get_connection(chat->account), chat->components); } } + return FALSE; +} + +static void +account_signed_on_cb(PurpleConnection *gc, gpointer null) +{ + g_idle_add(auto_join_chats, gc); } static void toggle_pref_cb(GntMenuItem *item, gpointer n)
--- a/finch/gntconv.c Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/gntconv.c Tue Aug 28 01:14:08 2007 +0000 @@ -37,6 +37,7 @@ #include "gntdebug.h" #include "gntplugin.h" #include "gntprefs.h" +#include "gntsound.h" #include "gntstatus.h" #include "gntpounce.h" @@ -142,6 +143,11 @@ } g_free(error); } + else if (!purple_account_is_connected(ggconv->active_conv->account)) + { + purple_conversation_write(ggconv->active_conv, "", _("Message was not sent, because you are not signed on."), + PURPLE_MESSAGE_ERROR | PURPLE_MESSAGE_NO_LOG, time(NULL)); + } else { char *escape = g_markup_escape_text(text, -1); @@ -342,6 +348,53 @@ } static void +toggle_logging_cb(GntMenuItem *item, gpointer ggconv) +{ + FinchConv *fc = ggconv; + PurpleConversation *conv = fc->active_conv; + gboolean logging = gnt_menuitem_check_get_checked(GNT_MENU_ITEM_CHECK(item)); + GList *iter; + + if (logging == purple_conversation_is_logging(conv)) + return; + + /* Xerox */ + if (logging) { + /* Enable logging first so the message below can be logged. */ + purple_conversation_set_logging(conv, TRUE); + + purple_conversation_write(conv, NULL, + _("Logging started. Future messages in this conversation will be logged."), + conv->logs ? (PURPLE_MESSAGE_SYSTEM) : + (PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_NO_LOG), + time(NULL)); + } else { + purple_conversation_write(conv, NULL, + _("Logging stopped. Future messages in this conversation will not be logged."), + conv->logs ? (PURPLE_MESSAGE_SYSTEM) : + (PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_NO_LOG), + time(NULL)); + + /* Disable the logging second, so that the above message can be logged. */ + purple_conversation_set_logging(conv, FALSE); + } + + /* Each conversation with the same person will have the same logging setting */ + for (iter = fc->list; iter; iter = iter->next) { + if (iter->data == conv) + continue; + purple_conversation_set_logging(iter->data, logging); + } +} + +static void +toggle_sound_cb(GntMenuItem *item, gpointer ggconv) +{ + FinchConv *fc = ggconv; + fc->flags ^= FINCH_CONV_NO_SOUND; +} + +static void send_to_cb(GntMenuItem *m, gpointer n) { PurpleAccount *account = g_object_get_data(G_OBJECT(m), "purple_account"); @@ -447,6 +500,18 @@ generate_send_to_menu(ggc); } + + item = gnt_menuitem_check_new(_("Enable Logging")); + gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item), + purple_conversation_is_logging(ggc->active_conv)); + gnt_menu_add_item(GNT_MENU(sub), item); + gnt_menuitem_set_callback(item, toggle_logging_cb, ggc); + + item = gnt_menuitem_check_new(_("Enable Sounds")); + gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item), + !(ggc->flags & FINCH_CONV_NO_SOUND)); + gnt_menu_add_item(GNT_MENU(sub), item); + gnt_menuitem_set_callback(item, toggle_sound_cb, ggc); } static void @@ -492,6 +557,12 @@ else ggc = g_new0(FinchConv, 1); + /* Each conversation with the same person will have the same logging setting */ + if (ggc->list) { + purple_conversation_set_logging(conv, + purple_conversation_is_logging(ggc->list->data)); + } + ggc->list = g_list_prepend(ggc->list, conv); ggc->active_conv = conv; conv->ui_data = ggc; @@ -581,6 +652,9 @@ g_signal_connect(G_OBJECT(ggc->entry), "text_changed", G_CALLBACK(send_typing_notification), ggc); } + if (!finch_sound_is_enabled()) + ggc->flags |= FINCH_CONV_NO_SOUND; + gg_create_menu(ggc); g_free(title); @@ -825,6 +899,23 @@ gnt_tree_change_text(GNT_TREE(ggc->u.chat->userlist), (gpointer)user, 0, chat_flag_text(cb->flags)); } +static void +finch_conv_present(PurpleConversation *conv) +{ + FinchConv *fc = FINCH_CONV(conv); + if (fc && fc->window) + return gnt_window_present(fc->window); +} + +static gboolean +finch_conv_has_focus(PurpleConversation *conv) +{ + FinchConv *fc = FINCH_CONV(conv); + if (fc && fc->window) + return gnt_widget_has_focus(fc->window); + return FALSE; +} + static PurpleConversationUiOps conv_ui_ops = { finch_create_conversation, @@ -836,8 +927,8 @@ finch_chat_rename_user, finch_chat_remove_users, finch_chat_update_user, - NULL, /* present */ - NULL, /* has_focus */ + finch_conv_present, /* present */ + finch_conv_has_focus, /* has_focus */ NULL, /* custom_smiley_add */ NULL, /* custom_smiley_write */ NULL, /* custom_smiley_close */
--- a/finch/gntconv.h Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/gntconv.h Tue Aug 28 01:14:08 2007 +0000 @@ -43,6 +43,11 @@ typedef struct _FinchConvChat FinchConvChat; typedef struct _FinchConvIm FinchConvIm; +typedef enum +{ + FINCH_CONV_NO_SOUND = 1 << 0, +} FinchConversationFlag; + struct _FinchConv { GList *list; @@ -53,7 +58,7 @@ GntWidget *tv; /* text-view */ GntWidget *menu; GntWidget *info; - void *pad; + FinchConversationFlag flags; union {
--- a/finch/gntft.c Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/gntft.c Tue Aug 28 01:14:08 2007 +0000 @@ -193,6 +193,8 @@ g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(finch_xfer_dialog_destroy), NULL); gnt_box_set_toplevel(GNT_BOX(window), TRUE); gnt_box_set_title(GNT_BOX(window), _("File Transfers")); + gnt_box_set_fill(GNT_BOX(window), TRUE); + gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_MID); xfer_dialog->tree = tree = gnt_tree_new_with_columns(NUM_COLUMNS); gnt_tree_set_column_titles(GNT_TREE(tree), _("Progress"), _("Filename"), _("Size"), _("Speed"), _("Remaining"), _("Status")); @@ -219,7 +221,7 @@ G_CALLBACK(toggle_clear_finished_cb), NULL); gnt_box_add_widget(GNT_BOX(window), checkbox); - bbox = gnt_hbox_new(TRUE); + bbox = gnt_hbox_new(FALSE); xfer_dialog->remove_button = button = gnt_button_new(_("Remove")); g_signal_connect(G_OBJECT(button), "activate", @@ -425,8 +427,11 @@ g_free(remaining_str); g_free(kbsec); if (purple_xfer_is_completed(xfer)) { + char *msg = g_strdup_printf(_("The file was saved as %s."), purple_xfer_get_local_filename(xfer)); gnt_tree_change_text(GNT_TREE(xfer_dialog->tree), xfer, COLUMN_STATUS, _("Finished")); gnt_tree_change_text(GNT_TREE(xfer_dialog->tree), xfer, COLUMN_REMAINING, _("Finished")); + purple_xfer_conversation_write(xfer, msg, FALSE); + g_free(msg); } else { gnt_tree_change_text(GNT_TREE(xfer_dialog->tree), xfer, COLUMN_STATUS, _("Transferring")); }
--- a/finch/gntpounce.c Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/gntpounce.c Tue Aug 28 01:14:08 2007 +0000 @@ -452,7 +452,7 @@ gnt_box_add_widget(GNT_BOX(window), gnt_line_new(FALSE)); /* Now the button box! */ - bbox = gnt_hbox_new(TRUE); + bbox = gnt_hbox_new(FALSE); /* Cancel button */ button = gnt_button_new(_("Cancel")); @@ -613,6 +613,12 @@ static void pounces_manager_add_cb(GntButton *button, gpointer user_data) { + if (purple_accounts_get_all() == NULL) { + purple_notify_error(NULL, _("Cannot create pounce"), + _("You do not have any accounts."), + _("You must create an account first before you can create a pounce.")); + return; + } finch_pounce_editor_show(NULL, NULL, NULL); } @@ -622,7 +628,8 @@ { PouncesManager *dialog = user_data; PurplePounce *pounce = gnt_tree_get_selection_data(GNT_TREE(dialog->tree)); - finch_pounce_editor_show(NULL, NULL, pounce); + if (pounce) + finch_pounce_editor_show(NULL, NULL, pounce); } static void @@ -645,6 +652,9 @@ char *buf; pounce = (PurplePounce *)gnt_tree_get_selection_data(GNT_TREE(dialog->tree)); + if (pounce == NULL) + return; + account = purple_pounce_get_pouncer(pounce); pouncer = purple_account_get_username(account); pouncee = purple_pounce_get_pouncee(pounce); @@ -696,7 +706,7 @@ gnt_box_add_widget(GNT_BOX(win), tree); /* Button box. */ - bbox = gnt_hbox_new(TRUE); + bbox = gnt_hbox_new(FALSE); /* Add button */ button = gnt_button_new(_("Add"));
--- a/finch/gntsound.c Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/gntsound.c Tue Aug 28 01:14:08 2007 +0000 @@ -40,6 +40,8 @@ #include "sound.h" #include "util.h" +#include "gntconv.h" + #include "gntbox.h" #include "gntwindow.h" #include "gntcombobox.h" @@ -173,7 +175,8 @@ has_focus = purple_conversation_has_focus(conv); - if (has_focus && !purple_prefs_get_bool(make_pref("/conv_focus"))) + if ((gntconv->flags & FINCH_CONV_NO_SOUND) || + (has_focus && !purple_prefs_get_bool(make_pref("/conv_focus")))) { return; } @@ -409,14 +412,14 @@ GError *err = NULL; switch (GST_MESSAGE_TYPE (msg)) { - case GST_MESSAGE_EOS: - gst_element_set_state(play, GST_STATE_NULL); - gst_object_unref(GST_OBJECT(play)); - break; case GST_MESSAGE_ERROR: gst_message_parse_error(msg, &err, NULL); purple_debug_error("gstreamer", "%s\n", err->message); g_error_free(err); + /* fall-through and clean up */ + case GST_MESSAGE_EOS: + gst_element_set_state(play, GST_STATE_NULL); + gst_object_unref(GST_OBJECT(play)); break; case GST_MESSAGE_WARNING: gst_message_parse_warning(msg, &err, NULL); @@ -670,28 +673,34 @@ { PurpleSoundEventID id = GPOINTER_TO_INT(gnt_tree_get_selection_data(GNT_TREE(pref_dialog->events))); FinchSoundEvent * event = &sounds[id]; - char *enabled, *file, *tmpfile; + char *enabled, *file, *tmpfile, *volpref; gboolean temp_value; + int volume; enabled = g_strdup_printf(FINCH_PREFS_ROOT "/sound/profiles/%s/enabled/%s", finch_sound_get_active_profile(), event->pref); file = g_strdup_printf(FINCH_PREFS_ROOT "/sound/profiles/%s/file/%s", finch_sound_get_active_profile(), event->pref); + volpref = g_strdup(make_pref("/volume")); temp_value = purple_prefs_get_bool(enabled); tmpfile = g_strdup(purple_prefs_get_string(file)); + volume = purple_prefs_get_int(volpref); purple_prefs_set_string(file, event->file); if (!temp_value) purple_prefs_set_bool(enabled, TRUE); + purple_prefs_set_int(volpref, gnt_slider_get_value(GNT_SLIDER(pref_dialog->volume))); purple_sound_play_event(id, NULL); if (!temp_value) purple_prefs_set_bool(enabled, FALSE); purple_prefs_set_string(file, tmpfile); + purple_prefs_set_int(volpref, volume); g_free(enabled); g_free(file); g_free(tmpfile); + g_free(volpref); } static void @@ -990,6 +999,8 @@ pref_dialog->volume = slider = gnt_slider_new(FALSE, 100, 0); gnt_slider_set_step(GNT_SLIDER(slider), 5); + gnt_slider_set_small_step(GNT_SLIDER(slider), 1); + gnt_slider_set_large_step(GNT_SLIDER(slider), 20); label = gnt_label_new(""); gnt_slider_reflect_label(GNT_SLIDER(slider), GNT_LABEL(label)); gnt_box_set_pad(GNT_BOX(tmpbox), 1); @@ -1053,7 +1064,22 @@ load_pref_window(finch_sound_get_active_profile()); gnt_widget_show(win); -} +} + +gboolean finch_sound_is_enabled(void) +{ + const char *pref = make_pref("/method"); + const char *method = purple_prefs_get_string(pref); + + if (!method) + return FALSE; + if (strcmp(method, "nosound") == 0) + return FALSE; + if (purple_prefs_get_int(make_pref("/volume")) <= 0) + return FALSE; + + return TRUE; +} static PurpleSoundUiOps sound_ui_ops = {
--- a/finch/gntsound.h Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/gntsound.h Tue Aug 28 01:14:08 2007 +0000 @@ -55,6 +55,14 @@ GList *finch_sound_get_profiles(void); /** + * Determine whether any sound will be played or not. + * + * @return Returns FALSE if preference is set to 'No sound', or if volume is + * set to zero. + */ +gboolean finch_sound_is_enabled(void); + +/** * Gets GNT sound UI ops. * * @return The UI operations structure.
--- a/finch/gntstatus.c Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/gntstatus.c Tue Aug 28 01:14:08 2007 +0000 @@ -299,6 +299,7 @@ { purple_notify_error(edit, _("Error"), _("Invalid title"), _("Please enter a non-empty title for the status.")); + gnt_box_give_focus_to_child(GNT_BOX(edit->window), edit->title); return; } @@ -307,6 +308,7 @@ { purple_notify_error(edit, _("Error"), _("Duplicate title"), _("Please enter a different title for the status.")); + gnt_box_give_focus_to_child(GNT_BOX(edit->window), edit->title); return; } @@ -447,6 +449,7 @@ sub->window = window = gnt_vbox_new(FALSE); gnt_box_set_toplevel(GNT_BOX(window), TRUE); gnt_box_set_title(GNT_BOX(window), _("Substatus")); /* XXX: a better title */ + gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_MID); box = gnt_hbox_new(FALSE); gnt_box_add_widget(GNT_BOX(box), gnt_label_new(_("Account:"))); @@ -523,7 +526,7 @@ gnt_box_set_toplevel(GNT_BOX(window), TRUE); gnt_box_set_title(GNT_BOX(window), _("Edit Status")); gnt_box_set_fill(GNT_BOX(window), TRUE); - gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_LEFT); + gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_MID); gnt_box_set_pad(GNT_BOX(window), 0); edits = g_list_append(edits, edit);
--- a/finch/libgnt/configure.ac Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/libgnt/configure.ac Tue Aug 28 01:14:08 2007 +0000 @@ -24,9 +24,9 @@ # Make sure to update ../../configure.ac with libgnt version changes. # -m4_define([gnt_lt_current], [1]) +m4_define([gnt_lt_current], [2]) m4_define([gnt_major_version], [2]) -m4_define([gnt_minor_version], [1]) +m4_define([gnt_minor_version], [2]) m4_define([gnt_micro_version], [0]) m4_define([gnt_version_suffix], [devel]) m4_define([gnt_version],
--- a/finch/libgnt/gnt.h Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/libgnt/gnt.h Tue Aug 28 01:14:08 2007 +0000 @@ -37,6 +37,15 @@ #include "gntkeys.h" /** + * Get things to compile in Glib < 2.8 + */ +#if !GLIB_CHECK_VERSION(2,8,0) + #define G_PARAM_STATIC_NAME G_PARAM_PRIVATE + #define G_PARAM_STATIC_NICK G_PARAM_PRIVATE + #define G_PARAM_STATIC_BLURB G_PARAM_PRIVATE +#endif + +/** * */ void gnt_init(void);
--- a/finch/libgnt/gntcolors.c Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/libgnt/gntcolors.c Tue Aug 28 01:14:08 2007 +0000 @@ -133,6 +133,7 @@ restore_colors(); } +#if GLIB_CHECK_VERSION(2,6,0) static int get_color(char *key) { @@ -164,7 +165,6 @@ return color; } -#if GLIB_CHECK_VERSION(2,6,0) void gnt_colors_parse(GKeyFile *kfile) { GError *error = NULL;
--- a/finch/libgnt/gntfilesel.c Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/libgnt/gntfilesel.c Tue Aug 28 01:14:08 2007 +0000 @@ -200,7 +200,7 @@ const char *tmp; tmp = sel->suggest ? sel->suggest : (const char*)gnt_tree_get_selection_data(sel->dirsonly ? GNT_TREE(sel->dirs) : GNT_TREE(sel->files)); - old = g_strdup_printf("%s%s%s", sel->current, sel->current[1] ? G_DIR_SEPARATOR_S : "", tmp ? tmp : ""); + old = g_strdup_printf("%s%s%s", SAFE(sel->current), SAFE(sel->current)[1] ? G_DIR_SEPARATOR_S : "", tmp ? tmp : ""); gnt_entry_set_text(GNT_ENTRY(sel->location), old); g_free(old); }
--- a/finch/libgnt/gntslider.c Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/libgnt/gntslider.c Tue Aug 28 01:14:08 2007 +0000 @@ -125,22 +125,66 @@ step_back(GntBindable *bindable, GList *null) { GntSlider *slider = GNT_SLIDER(bindable); - if (slider->current <= slider->min) - return FALSE; gnt_slider_advance_step(slider, -1); return TRUE; } static gboolean +small_step_back(GntBindable *bindable, GList *null) +{ + GntSlider *slider = GNT_SLIDER(bindable); + gnt_slider_set_value(slider, slider->current - slider->smallstep); + return TRUE; +} + +static gboolean +large_step_back(GntBindable *bindable, GList *null) +{ + GntSlider *slider = GNT_SLIDER(bindable); + gnt_slider_set_value(slider, slider->current - slider->largestep); + return TRUE; +} + +static gboolean step_forward(GntBindable *bindable, GList *list) { GntSlider *slider = GNT_SLIDER(bindable); - if (slider->current >= slider->max) - return FALSE; gnt_slider_advance_step(slider, 1); return TRUE; } +static gboolean +small_step_forward(GntBindable *bindable, GList *null) +{ + GntSlider *slider = GNT_SLIDER(bindable); + gnt_slider_set_value(slider, slider->current + slider->smallstep); + return TRUE; +} + +static gboolean +large_step_forward(GntBindable *bindable, GList *null) +{ + GntSlider *slider = GNT_SLIDER(bindable); + gnt_slider_set_value(slider, slider->current + slider->largestep); + return TRUE; +} + +static gboolean +move_min_value(GntBindable *bindable, GList *null) +{ + GntSlider *slider = GNT_SLIDER(bindable); + gnt_slider_set_value(slider, slider->min); + return TRUE; +} + +static gboolean +move_max_value(GntBindable *bindable, GList *null) +{ + GntSlider *slider = GNT_SLIDER(bindable); + gnt_slider_set_value(slider, slider->max); + return TRUE; +} + static void gnt_slider_class_init(GntSliderClass *klass) { @@ -165,8 +209,14 @@ gnt_bindable_register_binding(bindable, "step-backward", GNT_KEY_DOWN, NULL); gnt_bindable_class_register_action(bindable, "step-forward", step_forward, GNT_KEY_RIGHT, NULL); gnt_bindable_register_binding(bindable, "step-forward", GNT_KEY_UP, NULL); - - /* XXX: how would home/end work? */ + gnt_bindable_class_register_action(bindable, "small-step-backward", small_step_back, GNT_KEY_CTRL_LEFT, NULL); + gnt_bindable_register_binding(bindable, "small-step-backward", GNT_KEY_CTRL_DOWN, NULL); + gnt_bindable_class_register_action(bindable, "small-step-forward", small_step_forward, GNT_KEY_CTRL_RIGHT, NULL); + gnt_bindable_register_binding(bindable, "small-step-forward", GNT_KEY_CTRL_UP, NULL); + gnt_bindable_class_register_action(bindable, "large-step-backward", large_step_back, GNT_KEY_PGDOWN, NULL); + gnt_bindable_class_register_action(bindable, "large-step-forward", large_step_forward, GNT_KEY_PGUP, NULL); + gnt_bindable_class_register_action(bindable, "min-value", move_min_value, GNT_KEY_HOME, NULL); + gnt_bindable_class_register_action(bindable, "max-value", move_max_value, GNT_KEY_END, NULL); gnt_style_read_actions(G_OBJECT_CLASS_TYPE(klass), GNT_BINDABLE_CLASS(klass)); } @@ -233,10 +283,14 @@ void gnt_slider_set_value(GntSlider *slider, int value) { + int old; if (slider->current == value) return; + old = slider->current; slider->current = value; sanitize_value(slider); + if (old == slider->current) + return; redraw_slider(slider); slider_value_changed(slider); } @@ -248,10 +302,7 @@ int gnt_slider_advance_step(GntSlider *slider, int steps) { - slider->current += steps * slider->step; - sanitize_value(slider); - redraw_slider(slider); - slider_value_changed(slider); + gnt_slider_set_value(slider, slider->current + steps * slider->step); return slider->current; } @@ -260,6 +311,16 @@ slider->step = step; } +void gnt_slider_set_small_step(GntSlider *slider, int step) +{ + slider->smallstep = step; +} + +void gnt_slider_set_large_step(GntSlider *slider, int step) +{ + slider->largestep = step; +} + void gnt_slider_set_range(GntSlider *slider, int max, int min) { slider->max = MAX(max, min);
--- a/finch/libgnt/gntslider.h Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/libgnt/gntslider.h Tue Aug 28 01:14:08 2007 +0000 @@ -56,6 +56,8 @@ int min; /* minimum value */ int step; /* amount to change at each step */ int current; /* current value */ + int smallstep; + int largestep; }; struct _GntSliderClass @@ -103,11 +105,27 @@ * Sets the amount of change at each step. * * @param slider The slider - * @param step The amount for each ste + * @param step The amount for each step */ void gnt_slider_set_step(GntSlider *slider, int step); /** + * Sets the amount of change a small step. + * + * @param slider The slider + * @param step The amount for a small step (for the slider) + */ +void gnt_slider_set_small_step(GntSlider *slider, int step); + +/** + * Sets the amount of change a large step. + * + * @param slider The slider + * @param step The amount for a large step (for the slider) + */ +void gnt_slider_set_large_step(GntSlider *slider, int step); + +/** * Advance the slider forward or backward. * * @param slider The slider
--- a/finch/libgnt/gntstyle.c Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/libgnt/gntstyle.c Tue Aug 28 01:14:08 2007 +0000 @@ -55,6 +55,8 @@ if (!group) group = "general"; return g_key_file_get_value(gkfile, group, key, NULL); +#else + return NULL; #endif } @@ -93,6 +95,7 @@ return def; } +#if GLIB_CHECK_VERSION(2,6,0) static void refine(char *text) { @@ -133,6 +136,7 @@ { return (char *)gnt_key_translate(key); } +#endif void gnt_style_read_workspaces(GntWM *wm) {
--- a/finch/libgnt/gnttextview.c Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/libgnt/gnttextview.c Tue Aug 28 01:14:08 2007 +0000 @@ -549,7 +549,8 @@ if ((end = strchr(start, '\r')) != NULL || (end = strchr(start, '\n')) != NULL) { len = gnt_util_onscreen_width(start, end - has_scroll); - if (len >= widget->priv.width - line->length - has_scroll) { + if (widget->priv.width > 0 && + len >= widget->priv.width - line->length - has_scroll) { end = NULL; } }
--- a/finch/libgnt/gnttree.c Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/libgnt/gnttree.c Tue Aug 28 01:14:08 2007 +0000 @@ -985,11 +985,7 @@ g_param_spec_int("columns", "Columns", "Number of columns in the tree.", 1, G_MAXINT, 1, -#if GLIB_CHECK_VERSION(2,8,0) G_PARAM_READWRITE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB -#else - G_PARAM_READWRITE|G_PARAM_PRIVATE -#endif ) );
--- a/finch/libgnt/gntutils.c Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/libgnt/gntutils.c Tue Aug 28 01:14:08 2007 +0000 @@ -376,6 +376,101 @@ #endif } +#ifndef NO_LIBXML +static void +util_parse_html_to_tv(xmlNode *node, GntTextView *tv, GntTextFormatFlags flag) +{ + const char *name; + char *content; + xmlNode *ch; + gboolean processed = FALSE; + char *url = NULL; + gboolean insert_nl_s = FALSE, insert_nl_e = FALSE; + + if (node == NULL || node->name == NULL || node->type != XML_ELEMENT_NODE) + return; + + name = (char*)node->name; + if (g_ascii_strcasecmp(name, "b") == 0 || + g_ascii_strcasecmp(name, "strong") == 0 || + g_ascii_strcasecmp(name, "i") == 0 || + g_ascii_strcasecmp(name, "blockquote") == 0) { + flag |= GNT_TEXT_FLAG_BOLD; + } else if (g_ascii_strcasecmp(name, "u") == 0) { + flag |= GNT_TEXT_FLAG_UNDERLINE; + } else if (g_ascii_strcasecmp(name, "br") == 0) { + insert_nl_e = TRUE; + } else if (g_ascii_strcasecmp(name, "a") == 0) { + flag |= GNT_TEXT_FLAG_UNDERLINE; + url = (char *)xmlGetProp(node, (xmlChar*)"href"); + } else if (g_ascii_strcasecmp(name, "h1") == 0 || + g_ascii_strcasecmp(name, "h2") == 0 || + g_ascii_strcasecmp(name, "h3") == 0 || + g_ascii_strcasecmp(name, "h4") == 0 || + g_ascii_strcasecmp(name, "h5") == 0 || + g_ascii_strcasecmp(name, "h6") == 0) { + insert_nl_s = TRUE; + insert_nl_e = TRUE; + } else if (g_ascii_strcasecmp(name, "title") == 0) { + insert_nl_s = TRUE; + insert_nl_e = TRUE; + flag |= GNT_TEXT_FLAG_BOLD | GNT_TEXT_FLAG_UNDERLINE; + } else { + /* XXX: Process other possible tags */ + } + + if (insert_nl_s) + gnt_text_view_append_text_with_flags(tv, "\n", flag); + + for (ch = node->children; ch; ch = ch->next) { + if (ch->type == XML_ELEMENT_NODE) { + processed = TRUE; + util_parse_html_to_tv(ch, tv, flag); + } + } + + if (!processed) { + content = (char*)xmlNodeGetContent(node); + gnt_text_view_append_text_with_flags(tv, content, flag); + xmlFree(content); + } + + if (url) { + char *href = g_strdup_printf(" (%s)", url); + gnt_text_view_append_text_with_flags(tv, href, flag); + g_free(href); + xmlFree(url); + } + + if (insert_nl_e) + gnt_text_view_append_text_with_flags(tv, "\n", flag); +} +#endif + +gboolean gnt_util_parse_xhtml_to_textview(const char *string, GntTextView *tv) +{ +#ifdef NO_LIBXML + return FALSE; +#else + xmlParserCtxtPtr ctxt; + xmlDocPtr doc; + xmlNodePtr node; + GntTextFormatFlags flag = GNT_TEXT_FLAG_NORMAL; + gboolean ret = FALSE; + + ctxt = xmlNewParserCtxt(); + doc = xmlCtxtReadDoc(ctxt, (xmlChar*)string, NULL, NULL, XML_PARSE_NOBLANKS | XML_PARSE_RECOVER); + if (doc) { + node = xmlDocGetRootElement(doc); + util_parse_html_to_tv(node, tv, flag); + xmlFreeDoc(doc); + ret = TRUE; + } + xmlCleanupParser(); + return ret; +#endif +} + /* Setup trigger widget */ typedef struct { char *text; @@ -408,4 +503,3 @@ g_signal_connect(G_OBJECT(wid), "key_pressed", G_CALLBACK(key_pressed), tb); g_signal_connect_swapped(G_OBJECT(button), "destroy", G_CALLBACK(free_trigger_button), tb); } -
--- a/finch/libgnt/gntutils.h Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/libgnt/gntutils.h Tue Aug 28 01:14:08 2007 +0000 @@ -27,6 +27,7 @@ #include <glib.h> #include "gnt.h" +#include "gnttextview.h" #include "gntwidget.h" typedef gpointer (*GDupFunc)(gconstpointer data); @@ -132,6 +133,16 @@ void gnt_util_parse_widgets(const char *string, int num, ...); /** + * Parse an XHTML string and add it in a GntTextView with + * appropriate text flags. + * + * @param string The XHTML string + * @param tv The GntTextView + * @return @c TRUE if the string was added to the textview properly, @c FALSE otherwise. + */ +gboolean gnt_util_parse_xhtml_to_textview(const char *string, GntTextView *tv); + +/** * Make some keypress activate a button when some key is pressed with 'wid' in focus. * * @param widget The widget
--- a/finch/libgnt/gntwm.c Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/libgnt/gntwm.c Tue Aug 28 01:14:08 2007 +0000 @@ -738,7 +738,7 @@ print = ch; #ifndef NO_WIDECHAR if (wch.chars[0] > 255) { - snprintf(unicode, sizeof(unicode), "&#x%x;", wch.chars[0]); + snprintf(unicode, sizeof(unicode), "&#x%x;", (unsigned int)wch.chars[0]); print = unicode; } #endif
--- a/finch/libgnt/test/tv.c Sat Aug 25 20:32:15 2007 +0000 +++ b/finch/libgnt/test/tv.c Tue Aug 28 01:14:08 2007 +0000 @@ -5,6 +5,7 @@ #include "gntbox.h" #include "gntentry.h" #include "gnttextview.h" +#include "gntutils.h" static gboolean key_pressed(GntWidget *w, const char *key, GntWidget *view) @@ -117,6 +118,8 @@ gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(view), "plugins: ", GNT_TEXT_FLAG_BOLD); gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(view), "this is the 4th line\n", GNT_TEXT_FLAG_NORMAL); + gnt_util_parse_xhtml_to_textview("<p><b>Ohoy hoy!!</b><br/><p>I think this is going to</p> <u> WORK!!! </u><a href='www.google.com'>check this out!!</a></p>", GNT_TEXT_VIEW(view)); + #ifdef STANDALONE gnt_main();
--- a/libpurple/Makefile.am Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/Makefile.am Tue Aug 28 01:14:08 2007 +0000 @@ -22,9 +22,9 @@ win32/giowin32.c \ win32/win32dep.h -if USE_GCONFTOOL -GCONF_DIR=gconf -endif +# if USE_GCONFTOOL +# GCONF_DIR=gconf +# endif pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = purple.pc
--- a/libpurple/blist.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/blist.c Tue Aug 28 01:14:08 2007 +0000 @@ -1190,6 +1190,12 @@ group = purple_group_new(_("Chats")); purple_blist_add_group(group, purple_blist_get_last_sibling(purplebuddylist->root)); + } else { + /* Add group to blist if isn't already on it. Fixes #2752. */ + if (!purple_find_group(group->name)) { + purple_blist_add_group(group, + purple_blist_get_last_sibling(purplebuddylist->root)); + } } } else { group = (PurpleGroup*)node->parent; @@ -1284,6 +1290,12 @@ g = (PurpleGroup *)((PurpleBlistNode *)c)->parent; } else { if (group) { + /* Add chat to blist if isn't already on it. Fixes #2752. */ + if (!purple_find_group(group->name)) { + purple_blist_add_group(group, + purple_blist_get_last_sibling(purplebuddylist->root)); + } + g = group; } else { g = purple_group_new(_("Buddies"));
--- a/libpurple/example/nullclient.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/example/nullclient.c Tue Aug 28 01:14:08 2007 +0000 @@ -197,7 +197,7 @@ purple_util_set_user_dir(CUSTOM_USER_DIRECTORY); /* We do not want any debugging for now to keep the noise to a minimum. */ - purple_debug_set_enabled(FALSE); + purple_debug_set_enabled(TRUE); /* Set the core-uiops, which is used to * - initialize the ui specific preferences. @@ -257,6 +257,24 @@ PURPLE_CALLBACK(signed_on), NULL); } + + + +void signedOn( PurpleConnection *gc, gpointer dummy ) { + + + if( gc ) { + + PurpleAccount* a = purple_connection_get_account( gc ); + + if( a ) { + + purple_presence_set_idle( purple_account_get_presence( a ), TRUE, time( NULL ) ); + } + } +} + + int main() { GList *iter; @@ -282,30 +300,26 @@ names = g_list_append(names, info->id); } } - printf("Select the protocol [0-%d]: ", i-1); - fgets(name, sizeof(name), stdin); - sscanf(name, "%d", &num); - prpl = g_list_nth_data(names, num); - - printf("Username: "); - fgets(name, sizeof(name), stdin); - name[strlen(name) - 1] = 0; /* strip the \n at the end */ /* Create the account */ - account = purple_account_new(name, prpl); - - /* Get the password for the account */ - password = getpass("Password: "); - purple_account_set_password(account, password); + account = purple_account_new("msimprpl@xyzzy.cjb.net", "prpl-myspace" ); + purple_account_set_password(account, "4224jc" ); /* It's necessary to enable the account first. */ purple_account_set_enabled(account, UI_ID, TRUE); +#if 0 + static int handle; + purple_signal_connect( purple_connections_get_handle(), + "signed-on", &handle, + PURPLE_CALLBACK( signedOn ), + NULL ); + /* Now, to connect the account(s), create a status and activate it. */ - status = purple_savedstatus_new(NULL, PURPLE_STATUS_AVAILABLE); - purple_savedstatus_activate(status); + purple_savedstatus_activate( purple_savedstatus_get_default() ); connect_to_signals_for_demonstration_purposes_only(); +#endif g_main_loop_run(loop);
--- a/libpurple/idle.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/idle.c Tue Aug 28 01:14:08 2007 +0000 @@ -163,8 +163,8 @@ { if (!no_away) { + no_away = TRUE; purple_savedstatus_set_idleaway(FALSE); - no_away = TRUE; } time_until_next_idle_event = 0; return;
--- a/libpurple/network.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/network.c Tue Aug 28 01:14:08 2007 +0000 @@ -436,7 +436,7 @@ static gint wpurple_get_connected_network_count(void) { - guint net_cnt = 0; + gint net_cnt = 0; WSAQUERYSET qs; HANDLE h; @@ -521,7 +521,7 @@ HANDLE hLookup, DWORD dwControlCode, LPVOID lpvInBuffer, DWORD cbInBuffer, LPVOID lpvOutBuffer, DWORD cbOutBuffer, LPDWORD lpcbBytesReturned, LPWSACOMPLETION lpCompletion) = NULL; - + if (!(MyWSANSPIoctl = (void*) wpurple_find_and_loadproc("ws2_32.dll", "WSANSPIoctl"))) { g_thread_exit(NULL); return NULL; @@ -636,7 +636,7 @@ purple_network_get_handle(void) { static int handle; - + return &handle; } @@ -675,7 +675,7 @@ purple_signal_register(purple_network_get_handle(), "network-configuration-changed", purple_marshal_VOID, NULL, 0); - + purple_pmp_init(); purple_upnp_init(); }
--- a/libpurple/protocols/Makefile.am Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/protocols/Makefile.am Tue Aug 28 01:14:08 2007 +0000 @@ -1,5 +1,5 @@ EXTRA_DIST = Makefile.mingw -DIST_SUBDIRS = bonjour gg irc jabber msn novell null oscar qq sametime silc silc10 toc simple yahoo zephyr +DIST_SUBDIRS = bonjour gg irc jabber msn myspace novell null oscar qq sametime silc silc10 toc simple yahoo zephyr SUBDIRS = $(DYNAMIC_PRPLS) $(STATIC_PRPLS)
--- a/libpurple/protocols/Makefile.mingw Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/protocols/Makefile.mingw Tue Aug 28 01:14:08 2007 +0000 @@ -8,7 +8,7 @@ PIDGIN_TREE_TOP := ../.. include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak -SUBDIRS = gg irc jabber msn novell null oscar qq sametime silc10 simple yahoo bonjour +SUBDIRS = gg irc jabber msn novell null oscar qq sametime silc10 simple yahoo bonjour myspace .PHONY: all install clean
--- a/libpurple/protocols/bonjour/jabber.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/protocols/bonjour/jabber.c Tue Aug 28 01:14:08 2007 +0000 @@ -82,8 +82,8 @@ BonjourJabberConversation *bconv = g_new0(BonjourJabberConversation, 1); bconv->socket = -1; bconv->tx_buf = purple_circ_buffer_new(512); - bconv->tx_handler = -1; - bconv->rx_handler = -1; + bconv->tx_handler = 0; + bconv->rx_handler = 0; return bconv; } @@ -234,7 +234,7 @@ if (writelen == 0) { purple_input_remove(bconv->tx_handler); - bconv->tx_handler = -1; + bconv->tx_handler = 0; return; } @@ -272,7 +272,7 @@ BonjourJabberConversation *bconv = bb->conversation; /* If we're not ready to actually send, append it to the buffer */ - if (bconv->tx_handler != -1 + if (bconv->tx_handler != 0 || bconv->connect_data != NULL || !bconv->sent_stream_start || !bconv->recv_stream_start @@ -304,7 +304,7 @@ } if (ret < len) { - if (bconv->tx_handler == -1) + if (bconv->tx_handler == 0) bconv->tx_handler = purple_input_add(bconv->socket, PURPLE_INPUT_WRITE, _send_data_write_cb, pb); purple_circ_buffer_append(bconv->tx_buf, message + ret, len - ret); @@ -455,7 +455,7 @@ /* Stream started; process the send buffer if there is one */ purple_input_remove(bconv->tx_handler); - bconv->tx_handler= -1; + bconv->tx_handler= 0; bconv->sent_stream_start = TRUE; bonjour_jabber_stream_started(pb); @@ -779,7 +779,7 @@ /* TODO: We're really supposed to wait for "</stream:stream>" before closing the socket */ close(bconv->socket); } - if (bconv->rx_handler != -1) + if (bconv->rx_handler != 0) purple_input_remove(bconv->rx_handler); if (bconv->tx_handler > 0) purple_input_remove(bconv->tx_handler);
--- a/libpurple/protocols/bonjour/mdns_win32.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/protocols/bonjour/mdns_win32.c Tue Aug 28 01:14:08 2007 +0000 @@ -99,7 +99,7 @@ /* We've got what we need; stop listening */ purple_input_remove(idata->null_query_handler); - idata->null_query_handler = -1; + idata->null_query_handler = 0; DNSServiceRefDeallocate(idata->null_query); idata->null_query = NULL; }
--- a/libpurple/protocols/jabber/roster.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/protocols/jabber/roster.c Tue Aug 28 01:14:08 2007 +0000 @@ -58,6 +58,7 @@ { GSList *buddies, *g2, *l; gchar *my_bare_jid; + GList *pool = NULL; buddies = purple_find_buddies(js->gc->account, jid); @@ -89,13 +90,20 @@ g_free(l->data); g2 = g_slist_delete_link(g2, l); } else { - purple_blist_remove_buddy(b); + pool = g_list_prepend(pool, b); } } while(g2) { - PurpleBuddy *b = purple_buddy_new(js->gc->account, jid, alias); PurpleGroup *g = purple_find_group(g2->data); + PurpleBuddy *b = NULL; + + if (pool) { + b = pool->data; + pool = g_list_delete_link(pool, pool); + } else { + b = purple_buddy_new(js->gc->account, jid, alias); + } if(!g) { g = purple_group_new(g2->data); @@ -121,6 +129,12 @@ g2 = g_slist_delete_link(g2, g2); } + while (pool) { + PurpleBuddy *b = pool->data; + purple_blist_remove_buddy(b); + pool = g_list_delete_link(pool, pool); + } + g_free(my_bare_jid); g_slist_free(buddies); }
--- a/libpurple/protocols/msn/msn.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/protocols/msn/msn.c Tue Aug 28 01:14:08 2007 +0000 @@ -100,25 +100,62 @@ return buf; } -static PurpleCmdRet -msn_cmd_nudge(PurpleConversation *conv, const gchar *cmd, gchar **args, gchar **error, void *data) +static gboolean +msn_send_attention(PurpleConnection *gc, const char *username, guint type) { - PurpleAccount *account = purple_conversation_get_account(conv); - PurpleConnection *gc = purple_account_get_connection(account); MsnMessage *msg; MsnSession *session; MsnSwitchBoard *swboard; msg = msn_message_new_nudge(); session = gc->proto_data; - swboard = msn_session_get_swboard(session, purple_conversation_get_name(conv), MSN_SB_FLAG_IM); + swboard = msn_session_get_swboard(session, username, MSN_SB_FLAG_IM); if (swboard == NULL) - return PURPLE_CMD_RET_FAILED; + return FALSE; msn_switchboard_send_msg(swboard, msg, TRUE); + return TRUE; +} + +#ifdef MSN_USE_ATTENTION_API +static GList * +msn_attention_types(PurpleAccount *account) +{ + PurpleAttentionType *attn; + static GList *list = NULL; + + if (!list) { + attn = g_new0(PurpleAttentionType, 1); + attn->name = _("nudge"); + attn->incoming_description = _("nudged"); + attn->outgoing_description = _("Nudging"); + list = g_list_append(list, attn); + } + + return list; +} +#endif + + +static PurpleCmdRet +msn_cmd_nudge(PurpleConversation *conv, const gchar *cmd, gchar **args, gchar **error, void *data) +{ + PurpleAccount *account = purple_conversation_get_account(conv); + PurpleConnection *gc = purple_account_get_connection(account); + const gchar *username; + + username = purple_conversation_get_name(conv); + +#ifdef MSN_USE_ATTENTION_API + serv_send_attention(gc, username, MSN_NUDGE); +#else + if (!msn_send_attention(gc, username, MSN_NUDGE)) + return PURPLE_CMD_RET_FAILED; + purple_conversation_write(conv, NULL, _("You have just sent a Nudge!"), PURPLE_MESSAGE_SYSTEM, time(NULL)); +#endif return PURPLE_CMD_RET_OK; } @@ -2102,9 +2139,14 @@ NULL, /* send_raw */ NULL, /* roomlist_room_serialize */ +#ifdef MSN_USE_ATTENTION_API + msn_send_attention, /* send_attention */ + msn_attention_types, /* attention_types */ +#else /* padding */ NULL, NULL, +#endif NULL, NULL };
--- a/libpurple/protocols/msn/msn.h Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/protocols/msn/msn.h Tue Aug 28 01:14:08 2007 +0000 @@ -79,6 +79,10 @@ "Client-Name: Purple/" VERSION "\r\n" \ "Chat-Logging: Y\r\n" +/* Index into attention_types */ +#define MSN_NUDGE 0 + +#define MSN_USE_ATTENTION_API typedef enum {
--- a/libpurple/protocols/msn/servconn.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/protocols/msn/servconn.c Tue Aug 28 01:14:08 2007 +0000 @@ -51,7 +51,7 @@ servconn->num = session->servconns_count++; servconn->tx_buf = purple_circ_buffer_new(MSN_BUF_LEN); - servconn->tx_handler = -1; + servconn->tx_handler = 0; return servconn; } @@ -303,7 +303,7 @@ if (writelen == 0) { purple_input_remove(servconn->tx_handler); - servconn->tx_handler = -1; + servconn->tx_handler = 0; return; } @@ -328,7 +328,7 @@ if (!servconn->session->http_method) { - if (servconn->tx_handler == -1) { + if (servconn->tx_handler == 0) { switch (servconn->type) { case MSN_SERVCONN_NS: @@ -353,7 +353,7 @@ if (ret < 0 && errno == EAGAIN) ret = 0; if (ret >= 0 && ret < len) { - if (servconn->tx_handler == -1) + if (servconn->tx_handler == 0) servconn->tx_handler = purple_input_add( servconn->fd, PURPLE_INPUT_WRITE, servconn_write_cb, servconn);
--- a/libpurple/protocols/msn/switchboard.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/protocols/msn/switchboard.c Tue Aug 28 01:14:08 2007 +0000 @@ -951,6 +951,8 @@ PurpleBuddy *buddy; const char *user; + str = NULL; + swboard = cmdproc->data; account = cmdproc->session->account; user = msg->remote_user; @@ -960,9 +962,13 @@ else username = g_markup_escape_text(user, -1); +#ifdef MSN_USE_ATTENTION_API + serv_got_attention(account->gc, buddy->name, MSN_NUDGE); +#else str = g_strdup_printf(_("%s just sent you a Nudge!"), username); + msn_switchboard_report_user(swboard, PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NOTIFY, str); +#endif g_free(username); - msn_switchboard_report_user(swboard, PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NOTIFY, str); g_free(str); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/myspace/CHANGES Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,145 @@ +2007-08-23 Jeff Connelly <pidgin@xyzzy.cjb.net> - 0.16 +* Add option to add all friends from myspace.com to your buddy list (#2660) +* If a user doesn't have a picture, don't display an icon (instead of + displaying MySpace's "no photo" icon) +* Fix #2725, a common crash related to buddy icon data +* Fix #2752, which led to duplicate groups +* Fix #2720, crash/disconnect when adding a buddy that doesn't exist + (You'll now receive an error when looking up invalid usernames). + +2007-08-22 Jeff Connelly <pidgin@xyzzy.cjb.net> - 0.15 +* Incomplete implementation of adding friends from myspace.com. +* Change msim_msg_get() to start at the given node instead of the beginning. +* Add msim_msg_get_*_from_element() to access data in MsimMessagElement *'s. +* Use MsimMessage dictionaries everywhere in incoming messages, instead of + the old GHashTable method. Dictionary type is now fully implemented. +* Add functions to loop over MsimMessages. +* Link to myspace.com profile in Get Info. +* Conditionally use my proposed attention API if defined. +* Propagate to im.pidgin.pidgin branch for 2.1.2. +* GSoC ended on 2007-08-20. The code in this release hasn't changed since + then. I did, however, bump the version number to 0.15 to distinguish this + release from the previous one. But there were no code changes. I updated + the text files, too. +* Note: msimprpl will continue to be developed as time permits. + +2007-08-12 Jeff Connelly <jeff2@soc.pidgin.im> - 0.14 +* Full emoticon support (except no difference between nerd and geek emoticons), + thanks to a number of new icons from Hylke Bons. +* Package Win32 release archive so that it can easily be extracted directly + into the folder Pidgin was installed to. +* Better password handling, may now support Unicode passwords. +* Much general clean-up and restructuring of the code. +* Resolve user ID from buddy list, if it exists. Greatly improves speed of + receiving messages from user IDs. +* Support sending and receiving hyperlinks. +* Fix #2521 by reimplementing protocol message escaping to work correctly. +* Fix #2520 by indicating sign-on at the correct time. + +2007-08-04 Jeff Connelly <jeff2@soc.pidgin.im> - 0.13 +* Fix crash when deleting buddies, on Windows. +* Disable sending client version to oncoming buddies (compile-time option). +* Updated login process (more closely resembles official client). +* Zaps, sending and receiving +* Emoticons, mapped to Pidgin-supported smileys +* Show official client build in buddy profiles. + +2007-07-15 Jeff Connelly <jeff2@soc.pidgin.im> - 0.12 +* Allow logging in with passwords containing uppercase letters (bug #2066) +* Add /3 -> | translation to escaping. +* Allow setting status string. +* Disable keepalive timeout. +* Remove faking self online, instead show real status (now that it exists). +* Support font sizes in incoming instant messages. +* Add support for mail notifications. + +2007-07-09 Jeff Connelly <jeff2@soc.pidgin.im> - 0.11 +* Allow going idle (tested with I'dle Ma'ker) and viewing idle status of + buddies (thanks to Scott Ellis, developing a MySpaceIM plugin for Miranda IM, + for finding the idle status code.) +* Time out if no data from server within a certain amount of time + (keep alives). +* Remove "Sign on as hidden" option, and always set status to current status + when signing on. +* Some support for sending formatted text. +* Fix build process on Unix, bug #2086. + +2007-07-03 Jeff Connelly <jeff2@soc.pidgin.im> - 0.10 +* On incoming instant messages, add support for: + * Text color + * Font face +* Add option to sign on as hidden, default off (previously, always was hidden) +* Add ability to change status to hidden, available, away +* Increase password length limit to 10 to match official client (bug #2010) + +2007-07-01 Jeff Connelly <jeff2@soc.pidgin.im> - 0.9 +* Fix crash on Windows when logging in (bug #1990) +* Fix crash on Windows when viewing tooltip text (bug #1999) + +2007-06-30 Jeff Connelly <jeff2@soc.pidgin.im> - 0.8 +* Allow "Get Info" on all users, by uid or username +* Fix crash when re-logging in, if login failed. +* Show descriptive error message if login password is too long. +* Fake self from being online, since can't add self to buddy list. +* Update for Libpurple 2.0.2. +* Partial support for formatting on incoming instant messages. + +2007-06-14 Jeff Connelly <jeff2@soc.pidgin.im> - 0.7 +* Add/delete buddy now functional (required many other code improvements). +* Show improved buddy information in tooltip text. +* Show user profile (in "Get Info" option) for buddies on buddy list. +* Fix crash when re-logging in, if login succeeded. + +2007-06-12 Jeff Connelly <jeff2@soc.pidgin.im> - 0.6 +* Use RC4 code from Libpurple 2.0.1 +* Use a new implementation for sending and receiving messages (MsimMessage). + This infrastructural change significantly improves extensibility. +* Show online buddies as online. +* Send and receive typing notifications (along with other required changes). + +2007-05-22 Jeff Connelly <jeff2@soc.pidgin.im> - 0.5 +* Add protocol escaping, so can now send and receive / and \ characters +* Designed Pidgin 2.0.0beta7 +* Use RC4 code from Samba +* Use translations (_ macro) +* No major changes to code, still getting familiar with tools & community + +2007-04-29 Jeff Connelly <jeff2@soc.pidgin.im> + +* NOTE: This code is now being developed under Monotone, in the + im.pidgin.soc.2007.msimprpl branch on my local computer, which + is periodically sync'd with pidgin.im's Monotone database. + + Changes will be logged to Monotone. + +2007-04-15 Jeff Connelly <myspaceim@xyzzy.cjb.net> - 0.4 + +* Gracefully handle a full receive buffer +* Handle fatal errors +* Last version for Gaim 2.0.0beta6 + +2007-04-14 Jeff Connelly <myspaceim@xyzzy.cjb.net> - 0.3 + +* Win32 support +* Add a large number of precondition checks and a handful of assertions +* Add documentation to each function, for doxygen. + +2007-04-10 Jeff Connelly <myspaceim@xyzzy.cjb.net> - 0.2 + +* Add ability to IM by email address. +* Show usernames on buddy list instead of userids. +* Show incoming messages as coming from username, instead of userid. +* Add status messages and tooltip text. + +2007-04-09 Jeff Connelly <myspaceim@xyzzy.cjb.net> - 0.1 + +* Parsing most of the protocol. +* Logging in using RC4/SHA1-based authentication. +* Sending messages, by numeric userid or username. +* Receiving messages, currently only by numeric userid. +* Some buddy list support (show all users on buddy list as online, by uid). + +2007-04-07 Jeff Connelly <myspaceim@xyzzy.cjb.net> - 0.0 + +* Initial version. Login only. Not publicly released. +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/myspace/ChangeLog Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,39 @@ + +2007-04-29 Jeff Connelly <jeff2@soc.pidgin.com> + +* NOTE: This code is now being developed under Monotone, in the + im.pidgin.soc.2007.msimprpl branch on my local computer, which + is periodically sync'd with pidgin.im's Monotone database. + + Changes will be logged to Monotone. + +2007-04-15 Jeff Connelly <myspaceim@xyzzy.cjb.net> - 0.4 + +* Gracefully handle a full receive buffer +* Handle fatal errors + +2007-04-14 Jeff Connelly <myspaceim@xyzzy.cjb.net> - 0.3 + +* Win32 support +* Add a large number of precondition checks and a handful of assertions +* Add documentation to each function, for doxygen. + +2007-04-10 Jeff Connelly <myspaceim@xyzzy.cjb.net> - 0.2 + +* Add ability to IM by email address. +* Show usernames on buddy list instead of userids. +* Show incoming messages as coming from username, instead of userid. +* Add status messages and tooltip text. + +2007-04-09 Jeff Connelly <myspaceim@xyzzy.cjb.net> - 0.1 + +* Parsing most of the protocol. +* Logging in using RC4/SHA1-based authentication. +* Sending messages, by numeric userid or username. +* Receiving messages, currently only by numeric userid. +* Some buddy list support (show all users on buddy list as online, by uid). + +2007-04-07 Jeff Connelly <myspaceim@xyzzy.cjb.net> - 0.0 + +* Initial version. Login only. Not publicly released. +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/myspace/LICENSE Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/myspace/Makefile.am Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,41 @@ +EXTRA_DIST = Makefile.mingw + +pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION) + +SOURCES = myspace.c \ + myspace.h \ + persist.h \ + message.c \ + message.h \ + zap.c \ + session.c \ + session.h \ + markup.c \ + markup.h \ + user.c \ + user.h + +AM_CFLAGS = $(st) + +libmyspace_la_LDFLAGS = -module -avoid-version + +if STATIC_MYSPACE + +st = -DPURPLE_STATIC_PRPL +noinst_LIBRARIES = libmyspace.a +libmyspace_a_SOURCES = $(SOURCES) +libmyspace_a_CFLAGS = $(AM_CFLAGS) + +else + +st = +pkg_LTLIBRARIES = libmyspace.la +libmyspace_la_SOURCES = $(SOURCES) +libmyspace_la_LIBADD = $(GLIB_LIBS) + +endif + +AM_CPPFLAGS = \ + -I$(top_srcdir)/libpurple \ + $(GLIB_CFLAGS) \ + $(DEBUG_CFLAGS)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/myspace/Makefile.mingw Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,81 @@ +# +# Makefile.mingw +# +# Description: Makefile for win32 (mingw) version of libmyspace +# + +PIDGIN_TREE_TOP := ../../.. +include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak + +TARGET = libmyspace +TYPE = PLUGIN + +# Static or Plugin... +ifeq ($(TYPE),STATIC) + DEFINES += -DSTATIC + DLL_INSTALL_DIR = $(PURPLE_INSTALL_DIR) +else +ifeq ($(TYPE),PLUGIN) + DLL_INSTALL_DIR = $(PURPLE_INSTALL_PLUGINS_DIR) +endif +endif + +## +## INCLUDE PATHS +## +INCLUDE_PATHS += -I. \ + -I$(GTK_TOP)/include \ + -I$(GTK_TOP)/include/glib-2.0 \ + -I$(GTK_TOP)/lib/glib-2.0/include \ + -I$(PURPLE_TOP) \ + -I$(PURPLE_TOP)/win32 \ + -I$(PIDGIN_TREE_TOP) + +LIB_PATHS = -L$(GTK_TOP)/lib \ + -L$(PURPLE_TOP) + +## +## SOURCES, OBJECTS +## +C_SRC = myspace.c message.c zap.c session.c markup.c user.c + +OBJECTS = $(C_SRC:%.c=%.o) + +## +## LIBRARIES +## +LIBS = \ + -lglib-2.0 \ + -lws2_32 \ + -lintl \ + -lpurple + +include $(PIDGIN_COMMON_RULES) + +## +## TARGET DEFINITIONS +## +.PHONY: all install clean + +all: $(TARGET).dll + +install: all $(DLL_INSTALL_DIR) + cp $(TARGET).dll $(DLL_INSTALL_DIR) + +$(OBJECTS): $(PURPLE_CONFIG_H) + +## +## BUILD DLL +## +$(TARGET).dll: $(PURPLE_DLL).a $(OBJECTS) + $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll + +## +## CLEAN RULES +## + +clean: + rm -f $(OBJECTS) + rm -f $(TARGET).dll + +include $(PIDGIN_COMMON_TARGETS)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/myspace/README Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,32 @@ +MySpaceIM Protocol Plugin for Libpurple by Jeff Connelly 20070807 + + +Greetings. This package contains a plugin for libpurple (as used in +Pidgin, formerly Gaim) to connect to the new MySpaceIM instant messaging +network and send/receive messages. Functionality is only basic as of yet, +and this code should be considered alpha quality. + +This code was initially developed under Google Summer of Code 2007. + +For features and TODO, see http://developer.pidgin.im/wiki/MySpaceIM + +Windows installation: Unzip the archive to C:\Program Files\Pidgin +Unix/source installation: run "make install" + +Usage: + +Login using your _email address_ you use to login to myspace.com. You can't +login using your numeric ID or alias. + +To test it out, send a message to yourself (by your username or numeric +uid (email not yet supported)) or tom (6221). In either case you should +get a reply. You should also be able to talk to other MySpaceIM users if +you desire. Replies will always be shown as coming from a user's username, +even if you IM by email or userid. + +Feedback welcome. You can IM my test account at "msimprpl" if you feel like it. + +Enjoy, +-Jeff Connelly +msimprpl@xyzzy.cjb.net +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/myspace/markup.c Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,689 @@ +/* MySpaceIM Protocol Plugin - markup + * + * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im> + * + * 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 + */ + +#include "myspace.h" + +typedef void (*MSIM_XMLNODE_CONVERT)(MsimSession *, xmlnode *, gchar **, gchar **); + +/* Internal functions */ + +static guint msim_point_to_purple_size(MsimSession *session, guint point); +static guint msim_purple_size_to_point(MsimSession *session, guint size); +static guint msim_height_to_point(MsimSession *session, guint height); +static guint msim_point_to_height(MsimSession *session, guint point); + +static void msim_markup_tag_to_html(MsimSession *, xmlnode *root, gchar **begin, gchar **end); +static void html_tag_to_msim_markup(MsimSession *, xmlnode *root, gchar **begin, gchar **end); +static gchar *msim_convert_xml(MsimSession *, const gchar *raw, MSIM_XMLNODE_CONVERT f); +static gchar *msim_convert_smileys_to_markup(gchar *before); +static double msim_round(double round); + + +/* Globals */ + +/* The names in in emoticon_names (for <i n=whatever>) map to corresponding + * entries in emoticon_symbols (for the ASCII representation of the emoticon). + * + * Multiple emoticon symbols in Pidgin can map to one name. List the + * canonical form, as inserted by the "Smile!" dialog, first. For example, + * :) comes before :-), because although both are recognized as 'happy', + * the first is inserted by the smiley button (first symbol in theme). + * + * Note that symbols are case-sensitive in Pidgin -- :-X is not :-x. */ +static struct MSIM_EMOTICON +{ + gchar *name; + gchar *symbol; +} msim_emoticons[] = { + /* Unfortunately, this list duplicates much of the file + * pidgin/pidgin/pixmaps/emotes/default/22/default.theme.in, because + * that file is part of Pidgin, but we're part of libpurple. + */ + { "bigsmile", ":D" }, + { "bigsmile", ":-D" }, + { "devil", "}:)" }, + { "frazzled", ":Z" }, + { "geek", "B)" }, + { "googles", "%)" }, + { "growl", ":E" }, + { "laugh", ":))" }, /* Must be before ':)' */ + { "happy", ":)" }, + { "happy", ":-)" }, + { "happi", ":)" }, + { "heart", ":X" }, + { "mohawk", "-:" }, + { "mad", "X(" }, + { "messed", "X)" }, + { "nerd", "Q)" }, + { "oops", ":G" }, + { "pirate", "P)" }, + { "scared", ":O" }, + { "sidefrown", ":{" }, + { "sinister", ":B" }, + { "smirk", ":," }, + { "straight", ":|" }, + { "tongue", ":P" }, + { "tongue", ":p" }, + { "tongy", ":P" }, + { "upset", "B|" }, + { "wink", ";-)" }, + { "wink", ";)" }, + { "winc", ";)" }, + { "worried", ":[" }, + { "kiss", ":x" }, + { NULL, NULL } +}; + + + +/* Indexes of this array + 1 map HTML font size to scale of normal font size. * + * Based on _point_sizes from libpurple/gtkimhtml.c + * 1 2 3 4 5 6 7 */ +static gdouble _font_scale[] = { .85, .95, 1, 1.2, 1.44, 1.728, 2.0736 }; + +#define MAX_FONT_SIZE 7 /* Purple maximum font size */ +#define POINTS_PER_INCH 72 /* How many pt's in an inch */ + +/* Text formatting bits for <f s=#> */ +#define MSIM_TEXT_BOLD 1 +#define MSIM_TEXT_ITALIC 2 +#define MSIM_TEXT_UNDERLINE 4 + +/* Default baseline size of purple's fonts, in points. What is size 3 in points. + * _font_scale specifies scaling factor relative to this point size. Note this + * is only the default; it is configurable in account options. */ +#define MSIM_BASE_FONT_POINT_SIZE 8 + +/* Default display's DPI. 96 is common but it can differ. Also configurable + * in account options. */ +#define MSIM_DEFAULT_DPI 96 + + +/* round is part of C99, but sometimes is unavailable before then. + * Based on http://forums.belution.com/en/cpp/000/050/13.shtml + */ +double msim_round(double value) +{ + if (value < 0) { + return -(floor(-value + 0.5)); + } else { + return floor( value + 0.5); + } +} + + +/** Convert typographical font point size to HTML font size. + * Based on libpurple/gtkimhtml.c */ +static guint +msim_point_to_purple_size(MsimSession *session, guint point) +{ + guint size, this_point, base; + gdouble scale; + + base = purple_account_get_int(session->account, "base_font_size", MSIM_BASE_FONT_POINT_SIZE); + + for (size = 0; + size < sizeof(_font_scale) / sizeof(_font_scale[0]); + ++size) { + scale = _font_scale[CLAMP(size, 1, MAX_FONT_SIZE) - 1]; + this_point = (guint)msim_round(scale * base); + + if (this_point >= point) { + purple_debug_info("msim", "msim_point_to_purple_size: %d pt -> size=%d\n", + point, size); + return size; + } + } + + /* No HTML font size was this big; return largest possible. */ + return this_point; +} + +/** Convert HTML font size to point size. */ +static guint +msim_purple_size_to_point(MsimSession *session, guint size) +{ + gdouble scale; + guint point; + guint base; + + scale = _font_scale[CLAMP(size, 1, MAX_FONT_SIZE) - 1]; + + base = purple_account_get_int(session->account, "base_font_size", MSIM_BASE_FONT_POINT_SIZE); + + point = (guint)msim_round(scale * base); + + purple_debug_info("msim", "msim_purple_size_to_point: size=%d -> %d pt\n", + size, point); + + return point; +} + +/** Convert a msim markup font pixel height to the more usual point size, for incoming messages. */ +static guint +msim_height_to_point(MsimSession *session, guint height) +{ + guint dpi; + + dpi = purple_account_get_int(session->account, "port", MSIM_DEFAULT_DPI); + + return (guint)msim_round((POINTS_PER_INCH * 1. / dpi) * height); + + /* See also: libpurple/protocols/bonjour/jabber.c + * _font_size_ichat_to_purple */ +} + +/** Convert point size to msim pixel height font size specification, for outgoing messages. */ +static guint +msim_point_to_height(MsimSession *session, guint point) +{ + guint dpi; + + dpi = purple_account_get_int(session->account, "port", MSIM_DEFAULT_DPI); + + return (guint)msim_round((dpi * 1. / POINTS_PER_INCH) * point); +} + +/** Convert the msim markup <f> (font) tag into HTML. */ +static void +msim_markup_f_to_html(MsimSession *session, xmlnode *root, gchar **begin, gchar **end) +{ + const gchar *face, *height_str, *decor_str; + GString *gs_end, *gs_begin; + guint decor, height; + + face = xmlnode_get_attrib(root, "f"); + height_str = xmlnode_get_attrib(root, "h"); + decor_str = xmlnode_get_attrib(root, "s"); + + if (height_str) { + height = atol(height_str); + } else { + height = 12; + } + + if (decor_str) { + decor = atol(decor_str); + } else { + decor = 0; + } + + gs_begin = g_string_new(""); + /* TODO: get font size working */ + if (height && !face) { + g_string_printf(gs_begin, "<font size='%d'>", + msim_point_to_purple_size(session, msim_height_to_point(session, height))); + } else if (height && face) { + g_string_printf(gs_begin, "<font face='%s' size='%d'>", face, + msim_point_to_purple_size(session, msim_height_to_point(session, height))); + } else { + g_string_printf(gs_begin, "<font>"); + } + + /* No support for font-size CSS? */ + /* g_string_printf(gs_begin, "<span style='font-family: %s; font-size: %dpt'>", face, + msim_height_to_point(height)); */ + + gs_end = g_string_new("</font>"); + + if (decor & MSIM_TEXT_BOLD) { + g_string_append(gs_begin, "<b>"); + g_string_prepend(gs_end, "</b>"); + } + + if (decor & MSIM_TEXT_ITALIC) { + g_string_append(gs_begin, "<i>"); + g_string_append(gs_end, "</i>"); + } + + if (decor & MSIM_TEXT_UNDERLINE) { + g_string_append(gs_begin, "<u>"); + g_string_append(gs_end, "</u>"); + } + + + *begin = gs_begin->str; + *end = gs_end->str; +} + +/** Convert a msim markup color to a color suitable for libpurple. + * + * @param msim Either a color name, or an rgb(x,y,z) code. + * + * @return A new string, either a color name or #rrggbb code. Must g_free(). + */ +static char * +msim_color_to_purple(const char *msim) +{ + guint red, green, blue; + + if (!msim) { + return g_strdup("black"); + } + + if (sscanf(msim, "rgb(%d,%d,%d)", &red, &green, &blue) != 3) { + /* Color name. */ + return g_strdup(msim); + } + /* TODO: rgba (alpha). */ + + return g_strdup_printf("#%.2x%.2x%.2x", red, green, blue); +} + +/** Convert the msim markup <a> (anchor) tag into HTML. */ +static void +msim_markup_a_to_html(MsimSession *session, xmlnode *root, gchar **begin, gchar **end) +{ + const gchar *href; + + href = xmlnode_get_attrib(root, "h"); + if (!href) { + href = ""; + } + + *begin = g_strdup_printf("<a href=\"%s\">%s", href, href); + *end = g_strdup("</a>"); +} + +/** Convert the msim markup <p> (paragraph) tag into HTML. */ +static void +msim_markup_p_to_html(MsimSession *session, xmlnode *root, gchar **begin, gchar **end) +{ + /* Just pass through unchanged. + * + * Note: attributes currently aren't passed, if there are any. */ + *begin = g_strdup("<p>"); + *end = g_strdup("</p>"); +} + +/** Convert the msim markup <c> tag (text color) into HTML. TODO: Test */ +static void +msim_markup_c_to_html(MsimSession *session, xmlnode *root, gchar **begin, gchar **end) +{ + const gchar *color; + gchar *purple_color; + + color = xmlnode_get_attrib(root, "v"); + if (!color) { + purple_debug_info("msim", "msim_markup_c_to_html: <c> tag w/o v attr"); + *begin = g_strdup(""); + *end = g_strdup(""); + /* TODO: log as unrecognized */ + return; + } + + purple_color = msim_color_to_purple(color); + + *begin = g_strdup_printf("<font color='%s'>", purple_color); + + g_free(purple_color); + + /* *begin = g_strdup_printf("<span style='color: %s'>", color); */ + *end = g_strdup("</font>"); +} + +/** Convert the msim markup <b> tag (background color) into HTML. TODO: Test */ +static void +msim_markup_b_to_html(MsimSession *session, xmlnode *root, gchar **begin, gchar **end) +{ + const gchar *color; + gchar *purple_color; + + color = xmlnode_get_attrib(root, "v"); + if (!color) { + *begin = g_strdup(""); + *end = g_strdup(""); + purple_debug_info("msim", "msim_markup_b_to_html: <b> w/o v attr"); + /* TODO: log as unrecognized. */ + return; + } + + purple_color = msim_color_to_purple(color); + + /* TODO: find out how to set background color. */ + *begin = g_strdup_printf("<span style='background-color: %s'>", + purple_color); + g_free(purple_color); + + *end = g_strdup("</p>"); +} + +/** Convert the msim markup <i> tag (emoticon image) into HTML. */ +static void +msim_markup_i_to_html(MsimSession *session, xmlnode *root, gchar **begin, gchar **end) +{ + const gchar *name; + guint i; + struct MSIM_EMOTICON *emote; + + name = xmlnode_get_attrib(root, "n"); + if (!name) { + purple_debug_info("msim", "msim_markup_i_to_html: <i> w/o n"); + *begin = g_strdup(""); + *end = g_strdup(""); + /* TODO: log as unrecognized */ + return; + } + + /* Find and use canonical form of smiley symbol. */ + for (i = 0; (emote = &msim_emoticons[i]) && emote->name != NULL; ++i) { + if (g_str_equal(name, emote->name)) { + *begin = g_strdup(emote->symbol); + *end = g_strdup(""); + return; + } + } + + /* Couldn't find it, sorry. Try to degrade gracefully. */ + *begin = g_strdup_printf("**%s**", name); + *end = g_strdup(""); +} + +/** Convert an individual msim markup tag to HTML. */ +static void +msim_markup_tag_to_html(MsimSession *session, xmlnode *root, gchar **begin, + gchar **end) +{ + if (g_str_equal(root->name, "f")) { + msim_markup_f_to_html(session, root, begin, end); + } else if (g_str_equal(root->name, "a")) { + msim_markup_a_to_html(session, root, begin, end); + } else if (g_str_equal(root->name, "p")) { + msim_markup_p_to_html(session, root, begin, end); + } else if (g_str_equal(root->name, "c")) { + msim_markup_c_to_html(session, root, begin, end); + } else if (g_str_equal(root->name, "b")) { + msim_markup_b_to_html(session, root, begin, end); + } else if (g_str_equal(root->name, "i")) { + msim_markup_i_to_html(session, root, begin, end); + } else { + purple_debug_info("msim", "msim_markup_tag_to_html: " + "unknown tag name=%s, ignoring", + (root && root->name) ? root->name : "(NULL)"); + *begin = g_strdup(""); + *end = g_strdup(""); + } +} + +/** Convert an individual HTML tag to msim markup. */ +static void +html_tag_to_msim_markup(MsimSession *session, xmlnode *root, gchar **begin, + gchar **end) +{ + /* TODO: Coalesce nested tags into one <f> tag! + * Currently, the 's' value will be overwritten when b/i/u is nested + * within another one, and only the inner-most formatting will be + * applied to the text. */ + if (!purple_utf8_strcasecmp(root->name, "root")) { + *begin = g_strdup(""); + *end = g_strdup(""); + } else if (!purple_utf8_strcasecmp(root->name, "b")) { + *begin = g_strdup_printf("<f s='%d'>", MSIM_TEXT_BOLD); + *end = g_strdup("</f>"); + } else if (!purple_utf8_strcasecmp(root->name, "i")) { + *begin = g_strdup_printf("<f s='%d'>", MSIM_TEXT_ITALIC); + *end = g_strdup("</f>"); + } else if (!purple_utf8_strcasecmp(root->name, "u")) { + *begin = g_strdup_printf("<f s='%d'>", MSIM_TEXT_UNDERLINE); + *end = g_strdup("</f>"); + } else if (!purple_utf8_strcasecmp(root->name, "a")) { + const gchar *href, *link_text; + + href = xmlnode_get_attrib(root, "href"); + + if (!href) { + href = xmlnode_get_attrib(root, "HREF"); + } + + link_text = xmlnode_get_data(root); + + if (href) { + if (g_str_equal(link_text, href)) { + /* Purple gives us: <a href="URL">URL</a> + * Translate to <a h='URL' /> + * Displayed as text of URL with link to URL + */ + *begin = g_strdup_printf("<a h='%s' />", href); + } else { + /* But if we get: <a href="URL">text</a> + * Translate to: text: <a h='URL' /> + * + * Because official client only supports self-closed <a> + * tags; you can't change the link text. + */ + *begin = g_strdup_printf("%s: <a h='%s' />", link_text, href); + } + } else { + *begin = g_strdup("<a />"); + } + + /* Sorry, kid. MySpace doesn't support you within <a> tags. */ + xmlnode_free(root->child); + root->child = NULL; + + *end = g_strdup(""); + } else if (!purple_utf8_strcasecmp(root->name, "font")) { + const gchar *size; + const gchar *face; + + size = xmlnode_get_attrib(root, "size"); + face = xmlnode_get_attrib(root, "face"); + + if (face && size) { + *begin = g_strdup_printf("<f f='%s' h='%d'>", face, + msim_point_to_height(session, + msim_purple_size_to_point(session, atoi(size)))); + } else if (face) { + *begin = g_strdup_printf("<f f='%s'>", face); + } else if (size) { + *begin = g_strdup_printf("<f h='%d'>", + msim_point_to_height(session, + msim_purple_size_to_point(session, atoi(size)))); + } else { + *begin = g_strdup("<f>"); + } + + *end = g_strdup("</f>"); + + /* TODO: color (bg uses <body>), emoticons */ + } else { + *begin = g_strdup_printf("[%s]", root->name); + *end = g_strdup_printf("[/%s]", root->name); + } +} + +/** Convert an xmlnode of msim markup or HTML to an HTML string or msim markup. + * + * @param f Function to convert tags. + * + * @return An HTML string. Caller frees. + */ +static gchar * +msim_convert_xmlnode(MsimSession *session, xmlnode *root, MSIM_XMLNODE_CONVERT f) +{ + xmlnode *node; + gchar *begin, *inner, *end; + GString *final; + + if (!root || !root->name) { + return g_strdup(""); + } + + purple_debug_info("msim", "msim_convert_xmlnode: got root=%s\n", + root->name); + + begin = inner = end = NULL; + + final = g_string_new(""); + + f(session, root, &begin, &end); + + g_string_append(final, begin); + + /* Loop over all child nodes. */ + for (node = root->child; node != NULL; node = node->next) { + switch (node->type) { + case XMLNODE_TYPE_ATTRIB: + /* Attributes handled above. */ + break; + + case XMLNODE_TYPE_TAG: + /* A tag or tag with attributes. Recursively descend. */ + inner = msim_convert_xmlnode(session, node, f); + g_return_val_if_fail(inner != NULL, NULL); + + purple_debug_info("msim", " ** node name=%s\n", + (node && node->name) ? node->name : "(NULL)"); + break; + + case XMLNODE_TYPE_DATA: + /* Literal text. */ + inner = g_new0(char, node->data_sz + 1); + strncpy(inner, node->data, node->data_sz); + inner[node->data_sz] = 0; + + purple_debug_info("msim", " ** node data=%s\n", + inner ? inner : "(NULL)"); + break; + + default: + purple_debug_info("msim", + "msim_convert_xmlnode: strange node\n"); + inner = g_strdup(""); + } + + if (inner) { + g_string_append(final, inner); + } + } + + /* TODO: Note that msim counts each piece of text enclosed by <f> as + * a paragraph and will display each on its own line. You actually have + * to _nest_ <f> tags to intersperse different text in one paragraph! + * Comment out this line below to see. */ + g_string_append(final, end); + + purple_debug_info("msim", "msim_markup_xmlnode_to_gtkhtml: RETURNING %s\n", + (final && final->str) ? final->str : "(NULL)"); + + return final->str; +} + +/** Convert XML to something based on MSIM_XMLNODE_CONVERT. */ +static gchar * +msim_convert_xml(MsimSession *session, const gchar *raw, MSIM_XMLNODE_CONVERT f) +{ + xmlnode *root; + gchar *str; + gchar *enclosed_raw; + + g_return_val_if_fail(raw != NULL, NULL); + + /* Enclose text in one root tag, to try to make it valid XML for parsing. */ + enclosed_raw = g_strconcat("<root>", raw, "</root>", NULL); + + root = xmlnode_from_str(enclosed_raw, -1); + + if (!root) { + purple_debug_info("msim", "msim_markup_to_html: couldn't parse " + "%s as XML, returning raw: %s\n", enclosed_raw, raw); + /* TODO: msim_unrecognized */ + g_free(enclosed_raw); + return g_strdup(raw); + } + + g_free(enclosed_raw); + + str = msim_convert_xmlnode(session, root, f); + g_return_val_if_fail(str != NULL, NULL); + purple_debug_info("msim", "msim_markup_to_html: returning %s\n", str); + + xmlnode_free(root); + + return str; +} + +/** Convert plaintext smileys to <i> markup tags. + * + * @param before Original text with ASCII smileys. Will be freed. + * @return A new string with <i> tags, if applicable. Must be g_free()'d. + */ +static gchar * +msim_convert_smileys_to_markup(gchar *before) +{ + gchar *old, *new, *replacement; + guint i; + struct MSIM_EMOTICON *emote; + + old = before; + new = NULL; + + for (i = 0; (emote = &msim_emoticons[i]) && emote->name != NULL; ++i) { + gchar *name, *symbol; + + name = emote->name; + symbol = emote->symbol; + + replacement = g_strdup_printf("<i n=\"%s\"/>", name); + + purple_debug_info("msim", "msim_convert_smileys_to_markup: %s->%s\n", + symbol ? symbol : "(NULL)", + replacement ? replacement : "(NULL)"); + new = purple_strreplace(old, symbol, replacement); + + g_free(replacement); + g_free(old); + + old = new; + } + + return new; +} + + +/** High-level function to convert MySpaceIM markup to Purple (HTML) markup. + * + * @return Purple markup string, must be g_free()'d. */ +gchar * +msim_markup_to_html(MsimSession *session, const gchar *raw) +{ + return msim_convert_xml(session, raw, + (MSIM_XMLNODE_CONVERT)(msim_markup_tag_to_html)); +} + +/** High-level function to convert Purple (HTML) to MySpaceIM markup. + * + * @return HTML markup string, must be g_free()'d. */ +gchar * +html_to_msim_markup(MsimSession *session, const gchar *raw) +{ + gchar *markup; + + markup = msim_convert_xml(session, raw, + (MSIM_XMLNODE_CONVERT)(html_tag_to_msim_markup)); + + if (purple_account_get_bool(session->account, "emoticons", TRUE)) { + /* Frees markup and allocates a new one. */ + markup = msim_convert_smileys_to_markup(markup); + } + + return markup; +} + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/myspace/markup.h Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,27 @@ +/* MySpaceIM Protocol Plugin - markup + * + * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im> + * + * 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 + */ + +#ifndef _MYSPACE_MARKUP_H +#define _MYSPACE_MARKUP_H + +/* High-level msim markup <=> Purple html conversion functions. */ +gchar *msim_markup_to_html(MsimSession *, const gchar *raw); +gchar *html_to_msim_markup(MsimSession *, const gchar *raw); + +#endif /* !_MYSPACE_MARKUP_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/myspace/message.c Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,1358 @@ +/** MySpaceIM protocol messages + * + * \author Jeff Connelly + * + * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im> + * + * 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 + */ + +#include "myspace.h" +#include "message.h" + +static void msim_msg_free_element(gpointer data, gpointer user_data); +static void msim_msg_debug_string_element(gpointer data, gpointer user_data); +static gchar *msim_msg_pack_using(MsimMessage *msg, GFunc gf, const gchar *sep, const gchar *begin, const gchar *end); +static GList *msim_msg_get_node(MsimMessage *msg, const gchar *name); +static MsimMessage *msim_msg_new_v(gchar *first_key, va_list argp); + +/* Escape codes and associated replacement text, used for protocol message + * escaping and unescaping. */ +static struct MSIM_ESCAPE_REPLACEMENT { + gchar *code; + gchar text; +} msim_escape_replacements[] = { + { "/1", '/' }, + { "/2", '\\' }, + /* { "/3", "|" }, */ /* Not used here -- only for within arrays */ + { NULL, 0 } +}; + +/** + * Escape a protocol message. + * + * @return The escaped message. Caller must g_free(). + */ +gchar * +msim_escape(const gchar *msg) +{ + GString *gs; + guint i, j; + + gs = g_string_new(""); + + + for (i = 0; i < strlen(msg); ++i) { + struct MSIM_ESCAPE_REPLACEMENT *replacement; + gchar *replace; + + replace = NULL; + + /* Check for characters that need to be escaped, and escape them. */ + for (j = 0; (replacement = &msim_escape_replacements[j]) && + replacement->code != NULL; ++j) { + if (msg[i] == replacement->text) { + replace = replacement->code; + break; + } + } + + if (replace) { + g_string_append(gs, replace); + } else { + g_string_append_c(gs, msg[i]); + } + } + +#ifdef MSIM_DEBUG_ESCAPE + purple_debug_info("msim", "msim_escape: msg=%s, ret=%s\n", msg, gs->str); +#endif + + return gs->str; +} + +/** + * Unescape a protocol message. + * + * @return The unescaped message, caller must g_free(). + */ +gchar * +msim_unescape(const gchar *msg) +{ + GString *gs; + guint i, j; + + gs = g_string_new(""); + + for (i = 0; i < strlen(msg); ++i) { + struct MSIM_ESCAPE_REPLACEMENT *replacement; + gchar replace; + + replace = msg[i]; + + for (j = 0; (replacement = &msim_escape_replacements[j]) && + replacement->code != NULL; ++j) { + if (msg[i] == replacement->code[0] && + i + 1 < strlen(msg) && + msg[i + 1] == replacement->code[1]) { + replace = replacement->text; + ++i; + break; + } + } + + g_string_append_c(gs, replace); + } + +#ifdef MSIM_DEBUG_ESCAPE + purple_debug_info("msim", "msim_unescape: msg=%s, ret=%s\n", msg, gs->str); +#endif + + return gs->str; +} + +/** Create a new MsimMessage. + * + * @param first_key The first key in the sequence, or NULL for an empty message. + * @param ... A sequence of gchar* key/type/value triplets, terminated with NULL. + * + * See msim_msg_append() documentation for details on types. + */ +MsimMessage * +msim_msg_new(gchar *first_key, ...) +{ + va_list argp; + + if (first_key) { + va_start(argp, first_key); + return msim_msg_new_v(first_key, argp); + } else { + return NULL; + } +} + +/** Create a new message from va_list and its first argument. + * + * @param first_key The first argument (a key), or NULL to take all arguments + * from argp. + * @param argp A va_list of variadic arguments, already started with va_start(). Will be va_end()'d. + * @return New MsimMessage *, must be freed with msim_msg_free(). + * + * For internal use - users probably want msim_msg_new() or msim_send(). + */ +static MsimMessage * +msim_msg_new_v(gchar *first_key, va_list argp) +{ + gchar *key, *value; + MsimMessageType type; + MsimMessage *msg; + gboolean first; + + GString *gs; + GList *gl; + MsimMessage *dict; + + /* Begin with an empty message. */ + msg = NULL; + + /* First parameter can be given explicitly. */ + first = first_key != NULL; + + /* Read key, type, value triplets until NULL. */ + do { + if (first) { + key = first_key; + first = FALSE; + } else { + key = va_arg(argp, gchar *); + if (!key) { + break; + } + } + + type = va_arg(argp, int); + + /* Interpret variadic arguments. */ + switch (type) { + case MSIM_TYPE_INTEGER: + case MSIM_TYPE_BOOLEAN: + msg = msim_msg_append(msg, key, type, GUINT_TO_POINTER(va_arg(argp, int))); + break; + + case MSIM_TYPE_STRING: + value = va_arg(argp, char *); + + g_return_val_if_fail(value != NULL, FALSE); + + msg = msim_msg_append(msg, key, type, value); + break; + + case MSIM_TYPE_BINARY: + gs = va_arg(argp, GString *); + + g_return_val_if_fail(gs != NULL, FALSE); + + /* msim_msg_free() will free this GString the caller created. */ + msg = msim_msg_append(msg, key, type, gs); + break; + + case MSIM_TYPE_LIST: + gl = va_arg(argp, GList *); + + g_return_val_if_fail(gl != NULL, FALSE); + + msg = msim_msg_append(msg, key, type, gl); + break; + + case MSIM_TYPE_DICTIONARY: + dict = va_arg(argp, MsimMessage *); + + g_return_val_if_fail(dict != NULL, FALSE); + + msg = msim_msg_append(msg, key, type, dict); + break; + + default: + purple_debug_info("msim", "msim_send: unknown type %d\n", type); + break; + } + } while(key); + va_end(argp); + + return msg; +} + +/** Perform a deep copy on a GList * of gchar * strings. Free with msim_msg_list_free(). */ +GList * +msim_msg_list_copy(GList *old) +{ + GList *new_list; + + new_list = NULL; + + /* Deep copy (g_list_copy is shallow). Copy each string. */ + for (; old != NULL; old = g_list_next(old)) { + new_list = g_list_append(new_list, g_strdup(old->data)); + } + + return new_list; +} + +/** Free a GList * of MsimMessageElement *'s. */ +void +msim_msg_list_free(GList *l) +{ + + for (; l != NULL; l = g_list_next(l)) { + MsimMessageElement *elem; + + elem = (MsimMessageElement *)l->data; + + /* Note that name is almost never dynamically allocated elsewhere; + * it is usually a static string, but not in lists. So cast it. */ + g_free((gchar *)elem->name); + g_free(elem->data); + g_free(elem); + } + g_list_free(l); +} + +/** Parse a |-separated string into a new GList. Free with msim_msg_list_free(). */ +GList * +msim_msg_list_parse(const gchar *raw) +{ + gchar **array; + GList *list; + guint i; + + array = g_strsplit(raw, "|", 0); + list = NULL; + + /* TODO: escape/unescape /3 <-> | within list elements */ + + for (i = 0; array[i] != NULL; ++i) { + MsimMessageElement *elem; + + /* Freed in msim_msg_list_free() */ + elem = g_new0(MsimMessageElement, 1); + + /* Give the element a name for debugging purposes. + * Not supposed to be looked up by this name; instead, + * lookup the elements by indexing the array. */ + elem->name = g_strdup_printf("(list item #%d)", i); + elem->type = MSIM_TYPE_RAW; + elem->data = g_strdup(array[i]); + + list = g_list_append(list, elem); + } + + g_strfreev(array); + + return list; +} + +/** Clone an individual element. + * + * @param data MsimMessageElement * to clone. + * @param user_data Pointer to MsimMessage * to add cloned element to. + */ +static void +msim_msg_clone_element(gpointer data, gpointer user_data) +{ + MsimMessageElement *elem; + MsimMessage **new; + gpointer new_data; + + GString *gs; + MsimMessage *dict; + + elem = (MsimMessageElement *)data; + new = (MsimMessage **)user_data; + + switch (elem->type) { + case MSIM_TYPE_BOOLEAN: + case MSIM_TYPE_INTEGER: + new_data = elem->data; + break; + + case MSIM_TYPE_RAW: + case MSIM_TYPE_STRING: + new_data = g_strdup((gchar *)elem->data); + break; + + case MSIM_TYPE_LIST: + new_data = (gpointer)msim_msg_list_copy((GList *)(elem->data)); + break; + + case MSIM_TYPE_BINARY: + gs = (GString *)elem->data; + + new_data = g_string_new_len(gs->str, gs->len); + break; + case MSIM_TYPE_DICTIONARY: + dict = (MsimMessage *)elem->data; + + new_data = msim_msg_clone(dict); + break; + + default: + purple_debug_info("msim", "msim_msg_clone_element: unknown type %d\n", elem->type); + g_return_if_fail(NULL); + } + + /* Append cloned data. Note that the 'name' field is a static string, so it + * never needs to be copied nor freed. */ + *new = msim_msg_append(*new, elem->name, elem->type, new_data); +} + +/** Clone an existing MsimMessage. + * + * @return Cloned message; caller should free with msim_msg_free(). + */ +MsimMessage * +msim_msg_clone(MsimMessage *old) +{ + MsimMessage *new; + + if (old == NULL) { + return NULL; + } + + new = msim_msg_new(FALSE); + + g_list_foreach(old, msim_msg_clone_element, &new); + + return new; +} + +/** Free the data of a message element. + * + * @param elem The MsimMessageElement * + * + * Note this only frees the element data; you may also want to free the + * element itself with g_free() (see msim_msg_free_element()). + */ +void +msim_msg_free_element_data(MsimMessageElement *elem) +{ + switch (elem->type) { + case MSIM_TYPE_BOOLEAN: + case MSIM_TYPE_INTEGER: + /* Integer value stored in gpointer - no need to free(). */ + break; + + case MSIM_TYPE_RAW: + case MSIM_TYPE_STRING: + /* Always free strings - caller should have g_strdup()'d if + * string was static or temporary and not to be freed. */ + g_free(elem->data); + break; + + case MSIM_TYPE_BINARY: + /* Free the GString itself and the binary data. */ + g_string_free((GString *)elem->data, TRUE); + break; + + case MSIM_TYPE_DICTIONARY: + msim_msg_free((MsimMessage *)elem->data); + break; + + case MSIM_TYPE_LIST: + g_list_free((GList *)elem->data); + break; + + default: + purple_debug_info("msim", "msim_msg_free_element_data: " + "not freeing unknown type %d\n", elem->type); + break; + } +} + +/** Free an individual message element. + * + * @param data MsimMessageElement * to free. + * @param user_data Not used; required to match g_list_foreach() callback prototype. + * + * Frees both the element data and the element itself. + */ +static void +msim_msg_free_element(gpointer data, gpointer user_data) +{ + MsimMessageElement *elem; + + elem = (MsimMessageElement *)data; + + msim_msg_free_element_data(elem); + + g_free(elem); +} + +/** Free a complete message. */ +void +msim_msg_free(MsimMessage *msg) +{ + if (!msg) { + /* already free as can be */ + return; + } + +#ifdef MSIM_MSG_DEBUG_FREE + msim_msg_dump("msim_msg_free: freeing %s", msg); +#endif + + g_list_foreach(msg, msim_msg_free_element, NULL); + g_list_free(msg); +} + +/** Send an existing MsimMessage. */ +gboolean +msim_msg_send(MsimSession *session, MsimMessage *msg) +{ + gchar *raw; + gboolean success; + + raw = msim_msg_pack(msg); + g_return_val_if_fail(raw != NULL, FALSE); + success = msim_send_raw(session, raw); + g_free(raw); + + msim_msg_dump("msim_msg_send()ing %s\n", msg); + + return success; +} + +/** + * + * Send a message to the server, whose contents is specified using + * variable arguments. + * + * @param session + * @param ... A sequence of gchar* key/type/value triplets, terminated with NULL. + * + * This function exists for coding convenience: it allows a message to be created + * and sent in one line of code. Internally it calls msim_msg_send(). + * + * IMPORTANT: See msim_msg_append() documentation for details on element types. + * + */ +gboolean +msim_send(MsimSession *session, ...) +{ + gboolean success; + MsimMessage *msg; + va_list argp; + + va_start(argp, session); + msg = msim_msg_new_v(NULL, argp); + + /* Actually send the message. */ + success = msim_msg_send(session, msg); + + /* Cleanup. */ + msim_msg_free(msg); + + return success; +} + +/** Create a new MsimMessageElement * - must be g_free()'d. + * + * For internal use; users probably want msim_msg_append() or msim_msg_insert_before(). + */ +static MsimMessageElement * +msim_msg_element_new(const gchar *name, MsimMessageType type, gpointer data) +{ + MsimMessageElement *elem; + + elem = g_new0(MsimMessageElement, 1); + + elem->name = name; + elem->type = type; + elem->data = data; + + return elem; +} + + +/** Append a new element to a message. + * + * @param name Textual name of element (static string, neither copied nor freed). + * @param type An MSIM_TYPE_* code. + * @param data Pointer to data, see below. + * + * @return The new message - must be assigned to as with GList*. For example: + * + * msg = msim_msg_append(msg, ...) + * + * The data parameter depends on the type given: + * + * * MSIM_TYPE_INTEGER: Use GUINT_TO_POINTER(x). + * + * * MSIM_TYPE_BINARY: Same as integer, non-zero is TRUE and zero is FALSE. + * + * * MSIM_TYPE_STRING: gchar *. The data WILL BE FREED - use g_strdup() if needed. + * + * * MSIM_TYPE_RAW: gchar *. The data WILL BE FREED - use g_strdup() if needed. + * + * * MSIM_TYPE_BINARY: g_string_new_len(data, length). The data AND GString will be freed. + * + * * MSIM_TYPE_DICTIONARY: An MsimMessage *. Freed when message is destroyed. + * + * * MSIM_TYPE_LIST: GList * of gchar *. Again, everything will be freed. + * + * */ +MsimMessage * +msim_msg_append(MsimMessage *msg, const gchar *name, + MsimMessageType type, gpointer data) +{ + return g_list_append(msg, msim_msg_element_new(name, type, data)); +} + +/** Insert a new element into a message, before the given element name. + * + * @param name_before Name of the element to insert the new element before. If + * could not be found or NULL, new element will be inserted at end. + * + * See msim_msg_append() for usage of other parameters, and an important note about return value. + */ +MsimMessage * +msim_msg_insert_before(MsimMessage *msg, const gchar *name_before, + const gchar *name, MsimMessageType type, gpointer data) +{ + MsimMessageElement *new_elem; + GList *node_before; + + new_elem = msim_msg_element_new(name, type, data); + + node_before = msim_msg_get_node(msg, name_before); + + return g_list_insert_before(msg, node_before, new_elem); +} + +/** Pack a string using the given GFunc and seperator. + * Used by msim_msg_dump() and msim_msg_pack(). + */ +gchar * +msim_msg_pack_using(MsimMessage *msg, + GFunc gf, + const gchar *sep, + const gchar *begin, const gchar *end) +{ + gchar **strings; + gchar **strings_tmp; + gchar *joined; + gchar *final; + int i; + + g_return_val_if_fail(msg != NULL, NULL); + + /* Add one for NULL terminator for g_strjoinv(). */ + strings = (gchar **)g_new0(gchar *, g_list_length(msg) + 1); + + strings_tmp = strings; + g_list_foreach(msg, gf, &strings_tmp); + + joined = g_strjoinv(sep, strings); + final = g_strconcat(begin, joined, end, NULL); + g_free(joined); + + /* Clean up. */ + for (i = 0; i < g_list_length(msg); ++i) { + g_free(strings[i]); + } + + g_free(strings); + + return final; +} +/** Store a human-readable string describing the element. + * + * @param data Pointer to an MsimMessageElement. + * @param user_data + */ +static void +msim_msg_debug_string_element(gpointer data, gpointer user_data) +{ + MsimMessageElement *elem; + gchar *string; + GString *gs; + gchar *binary; + gchar ***items; /* wow, a pointer to a pointer to a pointer */ + + gchar *s; + GList *gl; + guint i; + + elem = (MsimMessageElement *)data; + items = user_data; + + switch (elem->type) { + case MSIM_TYPE_INTEGER: + string = g_strdup_printf("%s(integer): %d", elem->name, + GPOINTER_TO_UINT(elem->data)); + break; + + case MSIM_TYPE_RAW: + string = g_strdup_printf("%s(raw): %s", elem->name, + elem->data ? (gchar *)elem->data : "(NULL)"); + break; + + case MSIM_TYPE_STRING: + string = g_strdup_printf("%s(string): %s", elem->name, + elem->data ? (gchar *)elem->data : "(NULL)"); + break; + + case MSIM_TYPE_BINARY: + gs = (GString *)elem->data; + binary = purple_base64_encode((guchar*)gs->str, gs->len); + string = g_strdup_printf("%s(binary, %d bytes): %s", elem->name, (int)gs->len, binary); + g_free(binary); + break; + + case MSIM_TYPE_BOOLEAN: + string = g_strdup_printf("%s(boolean): %s", elem->name, + elem->data ? "TRUE" : "FALSE"); + break; + + case MSIM_TYPE_DICTIONARY: + if (!elem->data) { + s = g_strdup("(NULL)"); + } else { + s = msim_msg_dump_to_str((MsimMessage *)elem->data); + } + + if (!s) { + s = g_strdup("(NULL, couldn't msim_msg_dump_to_str)"); + } + + string = g_strdup_printf("%s(dict): %s", elem->name, s); + + g_free(s); + break; + + case MSIM_TYPE_LIST: + gs = g_string_new(""); + g_string_append_printf(gs, "%s(list): \n", elem->name); + + i = 0; + for (gl = (GList *)elem->data; gl != NULL; gl = g_list_next(gl)) { + g_string_append_printf(gs, " %d. %s\n", i, (gchar *)(gl->data)); + ++i; + } + + string = gs->str; + break; + + default: + string = g_strdup_printf("%s(unknown type %d", + elem->name ? elem->name : "(NULL)", elem->type); + break; + } + + **items = string; + ++(*items); +} + +/** Print a human-readable string of the message to Purple's debug log. + * + * @param fmt_string A static string, in which '%s' will be replaced. + */ +void +msim_msg_dump(const gchar *fmt_string, MsimMessage *msg) +{ + gchar *debug_str; + + g_return_if_fail(fmt_string != NULL); + + debug_str = msim_msg_dump_to_str(msg); + + g_return_if_fail(debug_str != NULL); + + purple_debug_info("msim", fmt_string, debug_str); + + g_free(debug_str); +} + +/** Return a human-readable string of the message. + * + * @return A new gchar *, must be g_free()'d. + */ +gchar * +msim_msg_dump_to_str(MsimMessage *msg) +{ + gchar *debug_str; + + if (!msg) { + debug_str = g_strdup("<MsimMessage: empty>"); + } else { + debug_str = msim_msg_pack_using(msg, msim_msg_debug_string_element, + "\n", "<MsimMessage: \n", "\n/MsimMessage>"); + } + + return debug_str; +} + +/** Return a message element data as a new string for a raw protocol message, converting from other types (integer, etc.) if necessary. + * + * @return const gchar * The data as a string, or NULL. Caller must g_free(). + * + * Returns a string suitable for inclusion in a raw protocol message, not necessarily + * optimal for human consumption. For example, strings are escaped. Use + * msim_msg_get_string() if you want a string, which in some cases is same as this. + */ +gchar * +msim_msg_pack_element_data(MsimMessageElement *elem) +{ + GString *gs; + GList *gl; + + g_return_val_if_fail(elem != NULL, NULL); + + switch (elem->type) { + case MSIM_TYPE_INTEGER: + return g_strdup_printf("%d", GPOINTER_TO_UINT(elem->data)); + + case MSIM_TYPE_RAW: + /* Not un-escaped - this is a raw element, already escaped if necessary. */ + return (gchar *)g_strdup((gchar *)elem->data); + + case MSIM_TYPE_STRING: + /* Strings get escaped. msim_escape() creates a new string. */ + g_return_val_if_fail(elem->data != NULL, NULL); + return elem->data ? msim_escape((gchar *)elem->data) : + g_strdup("(NULL)"); + + case MSIM_TYPE_BINARY: + gs = (GString *)elem->data; + /* Do not escape! */ + return purple_base64_encode((guchar *)gs->str, gs->len); + + case MSIM_TYPE_BOOLEAN: + /* Not used by messages in the wire protocol * -- see msim_msg_pack_element. + * Only used by dictionaries, see msim_msg_pack_element_dict. */ + return elem->data ? g_strdup("On") : g_strdup("Off"); + + case MSIM_TYPE_DICTIONARY: + return msim_msg_pack_dict((MsimMessage *)elem->data); + + case MSIM_TYPE_LIST: + /* Pack using a|b|c|d|... */ + gs = g_string_new(""); + + for (gl = (GList *)elem->data; gl != NULL; gl = g_list_next(gl)) { + g_string_append_printf(gs, "%s", (gchar*)(gl->data)); + + /* All but last element is separated by a bar. */ + if (g_list_next(gl)) + g_string_append(gs, "|"); + } + + return gs->str; + + default: + purple_debug_info("msim", "field %s, unknown type %d\n", + elem->name ? elem->name : "(NULL)", + elem->type); + return NULL; + } +} + +/** Pack an element into its protcol representation inside a dictionary. + * + * See msim_msg_pack_element(). + */ +static void +msim_msg_pack_element_dict(gpointer data, gpointer user_data) +{ + MsimMessageElement *elem; + gchar *string, *data_string, ***items; + + elem = (MsimMessageElement *)data; + items = (gchar ***)user_data; + + /* Exclude elements beginning with '_' from packed protocol messages. */ + if (elem->name[0] == '_') { + return; + } + + data_string = msim_msg_pack_element_data(elem); + + g_return_if_fail(data_string != NULL); + + switch (elem->type) { + /* These types are represented by key name/value pairs (converted above). */ + case MSIM_TYPE_INTEGER: + case MSIM_TYPE_RAW: + case MSIM_TYPE_STRING: + case MSIM_TYPE_BINARY: + case MSIM_TYPE_DICTIONARY: + case MSIM_TYPE_LIST: + case MSIM_TYPE_BOOLEAN: /* Boolean is On or Off */ + string = g_strconcat(elem->name, "=", data_string, NULL); + break; + + default: + g_free(data_string); + g_return_if_fail(FALSE); + break; + } + + g_free(data_string); + + **items = string; + ++(*items); +} + +/** Pack an element into its protocol representation. + * + * @param data Pointer to an MsimMessageElement. + * @param user_data Pointer to a gchar ** array of string items. + * + * Called by msim_msg_pack(). Will pack the MsimMessageElement into + * a part of the protocol string and append it to the array. Caller + * is responsible for creating array to correct dimensions, and + * freeing each string element of the array added by this function. + */ +static void +msim_msg_pack_element(gpointer data, gpointer user_data) +{ + MsimMessageElement *elem; + gchar *string, *data_string; + gchar ***items; + + elem = (MsimMessageElement *)data; + items = (gchar ***)user_data; + + /* Exclude elements beginning with '_' from packed protocol messages. */ + if (elem->name[0] == '_') { + return; + } + + data_string = msim_msg_pack_element_data(elem); + + switch (elem->type) { + /* These types are represented by key name/value pairs (converted above). */ + case MSIM_TYPE_INTEGER: + case MSIM_TYPE_RAW: + case MSIM_TYPE_STRING: + case MSIM_TYPE_BINARY: + case MSIM_TYPE_DICTIONARY: + case MSIM_TYPE_LIST: + string = g_strconcat(elem->name, "\\", data_string, NULL); + break; + + /* Boolean is represented by absence or presence of name. */ + case MSIM_TYPE_BOOLEAN: + if (GPOINTER_TO_UINT(elem->data)) { + /* True - leave in, with blank value. */ + string = g_strdup_printf("%s\\", elem->name); + } else { + /* False - leave out. */ + string = g_strdup(""); + } + break; + + default: + g_free(data_string); + g_return_if_fail(FALSE); + break; + } + + g_free(data_string); + + **items = string; + ++(*items); +} + + +/** Return a packed string of a message suitable for sending over the wire. + * + * @return A string. Caller must g_free(). + */ +gchar * +msim_msg_pack(MsimMessage *msg) +{ + g_return_val_if_fail(msg != NULL, NULL); + + return msim_msg_pack_using(msg, msim_msg_pack_element, "\\", "\\", "\\final\\"); +} + +/** Return a packed string of a dictionary, suitable for embedding in MSIM_TYPE_DICTIONARY. + * + * @return A string; caller must g_free(). + */ +gchar * +msim_msg_pack_dict(MsimMessage *msg) +{ + g_return_val_if_fail(msg != NULL, NULL); + + return msim_msg_pack_using(msg, msim_msg_pack_element_dict, "\034", "", ""); +} + +/** + * Parse a raw protocol message string into a MsimMessage *. + * + * @param raw The raw message string to parse, will be g_free()'d. + * + * @return MsimMessage *. Caller should msim_msg_free() when done. + */ +MsimMessage * +msim_parse(gchar *raw) +{ + MsimMessage *msg; + gchar *token; + gchar **tokens; + gchar *key; + gchar *value; + int i; + + g_return_val_if_fail(raw != NULL, NULL); + + purple_debug_info("msim", "msim_parse: got <%s>\n", raw); + + key = NULL; + + /* All messages begin with a \. */ + if (raw[0] != '\\' || raw[1] == 0) { + purple_debug_info("msim", "msim_parse: incomplete/bad string, " + "missing initial backslash: <%s>\n", raw); + /* XXX: Should we try to recover, and read to first backslash? */ + + g_free(raw); + return NULL; + } + + msg = msim_msg_new(FALSE); + + for (tokens = g_strsplit(raw + 1, "\\", 0), i = 0; + (token = tokens[i]); + i++) { +#ifdef MSIM_DEBUG_PARSE + purple_debug_info("msim", "tok=<%s>, i%2=%d\n", token, i % 2); +#endif + if (i % 2) { + /* Odd-numbered ordinal is a value. */ + + value = token; + + /* Incoming protocol messages get tagged as MSIM_TYPE_RAW, which + * represents an untyped piece of data. msim_msg_get_* will + * convert to appropriate types for caller, and handle unescaping if needed. */ + msg = msim_msg_append(msg, g_strdup(key), MSIM_TYPE_RAW, g_strdup(value)); +#ifdef MSIM_DEBUG_PARSE + purple_debug_info("msim", "insert string: |%s|=|%s|\n", key, value); +#endif + } else { + /* Even numbered indexes are key names. */ + key = token; + } + } + g_strfreev(tokens); + + /* Can free now since all data was copied to hash key/values */ + g_free(raw); + + return msg; +} + +/** Search for and return the node in msg, matching name, or NULL. + * + * @param msg Message to search within. + * @param name Field name to search for. + * + * @return The GList * node for the MsimMessageElement with the given name, or NULL if not found or name is NULL. + * + * For internal use - users probably want to use msim_msg_get() to + * access the MsimMessageElement *, instead of the GList * container. + * + */ +static GList * +msim_msg_get_node(MsimMessage *msg, const gchar *name) +{ + GList *node; + + if (!name || !msg) { + return NULL; + } + + /* Linear search for the given name. O(n) but n is small. */ + for (node = msg; node != NULL; node = g_list_next(node)) { + MsimMessageElement *elem; + + elem = (MsimMessageElement *)node->data; + + g_return_val_if_fail(elem != NULL, NULL); + g_return_val_if_fail(elem->name != NULL, NULL); + + if (strcmp(elem->name, name) == 0) { + return node; + } + } + return NULL; +} + +/** Return the first MsimMessageElement * with given name in the MsimMessage *. + * + * @param name Name to search for. + * + * @return MsimMessageElement * matching name, or NULL. + * + * Note: useful fields of MsimMessageElement are 'data' and 'type', which + * you can access directly. But it is often more convenient to use + * another msim_msg_get_* that converts the data to what type you want. + */ +MsimMessageElement * +msim_msg_get(MsimMessage *msg, const gchar *name) +{ + GList *node; + + node = msim_msg_get_node(msg, name); + if (node) { + return (MsimMessageElement *)node->data; + } else { + return NULL; + } +} + +/** Return the data of an element of a given name, as a string. + * + * @param name Name of element. + * + * @return gchar * The data as a string, or NULL if not found. + * Caller must g_free(). + * + * Note that msim_msg_pack_element_data() is similar, but returns a string + * for inclusion into a raw protocol string (escaped and everything). + * This function unescapes the string for you, if needed. + */ +gchar * +msim_msg_get_string(MsimMessage *msg, const gchar *name) +{ + MsimMessageElement *elem; + + elem = msim_msg_get(msg, name); + if (!elem) { + return NULL; + } + + return msim_msg_get_string_from_element(elem); +} + +gchar * +msim_msg_get_string_from_element(MsimMessageElement *elem) +{ + g_return_val_if_fail(elem != NULL, NULL); + switch (elem->type) { + case MSIM_TYPE_INTEGER: + return g_strdup_printf("%d", GPOINTER_TO_UINT(elem->data)); + + case MSIM_TYPE_RAW: + /* Raw element from incoming message - if its a string, it'll + * be escaped. */ + return msim_unescape((gchar *)elem->data); + + case MSIM_TYPE_STRING: + /* Already unescaped. */ + return g_strdup((gchar *)elem->data); + + default: + purple_debug_info("msim", "msim_msg_get_string_element: type %d unknown, name %s\n", + elem->type, elem->name ? elem->name : "(NULL)"); + return NULL; + } +} + +/** Return an element as a new list. Caller frees with msim_msg_list_free(). */ +GList * +msim_msg_get_list(MsimMessage *msg, const gchar *name) +{ + MsimMessageElement *elem; + + elem = msim_msg_get(msg, name); + if (!elem) { + return NULL; + } + + return msim_msg_get_list_from_element(elem); +} + +GList * +msim_msg_get_list_from_element(MsimMessageElement *elem) +{ + g_return_val_if_fail(elem != NULL, NULL); + switch (elem->type) { + case MSIM_TYPE_LIST: + return msim_msg_list_copy((GList *)elem->data); + + case MSIM_TYPE_RAW: + return msim_msg_list_parse((gchar *)elem->data); + + default: + purple_debug_info("msim_msg_get_list", "type %d unknown, name %s\n", + elem->type, elem->name ? elem->name : "(NULL)"); + return NULL; + } +} + +/** + * Parse a \x1c-separated "dictionary" of key=value pairs into a hash table. + * + * @param raw The text of the dictionary to parse. Often the + * value for the 'body' field. + * + * @return A new MsimMessage *. Must msim_msg_free() when done. + */ +MsimMessage * +msim_msg_dictionary_parse(gchar *raw) +{ + MsimMessage *dict; + gchar *item; + gchar **items; + gchar **elements; + guint i; + + g_return_val_if_fail(raw != NULL, NULL); + + dict = msim_msg_new(NULL); + + for (items = g_strsplit(raw, "\x1c", 0), i = 0; + (item = items[i]); + i++) { + gchar *key, *value; + + elements = g_strsplit(item, "=", 2); + + key = elements[0]; + if (!key) { + purple_debug_info("msim", "msim_msg_parse_dictionary(%s): null key\n", + raw); + g_strfreev(elements); + break; + } + + value = elements[1]; + if (!value) { + purple_debug_info("msim", "msim_msg_parse_dictionary(%s): null value\n", + raw); + g_strfreev(elements); + break; + } + +#ifdef MSIM_DEBUG_PARSE + purple_debug_info("msim_msg_parse_dictionary","-- %s: %s\n", key ? key : "(NULL)", + value ? value : "(NULL)"); +#endif + /* TODO: free key; right now it is treated as static */ + dict = msim_msg_append(dict, g_strdup(key), MSIM_TYPE_RAW, g_strdup(value)); + + g_strfreev(elements); + } + + g_strfreev(items); + + return dict; +} + +/** Return an element as a new dictionary. Caller frees with msim_msg_free(). */ +MsimMessage * +msim_msg_get_dictionary(MsimMessage *msg, const gchar *name) +{ + MsimMessageElement *elem; + + elem = msim_msg_get(msg, name); + if (!elem) { + return NULL; + } + + return msim_msg_get_dictionary_from_element(elem); +} + +MsimMessage * +msim_msg_get_dictionary_from_element(MsimMessageElement *elem) +{ + g_return_val_if_fail(elem != NULL, NULL); + switch (elem->type) { + case MSIM_TYPE_DICTIONARY: + return msim_msg_clone((MsimMessage *)elem->data); + + case MSIM_TYPE_RAW: + return msim_msg_dictionary_parse((gchar *)elem->data); + + default: + purple_debug_info("msim_msg_get_dictionary", "type %d unknown, name %s\n", + elem->type, elem->name ? elem->name : "(NULL)"); + return NULL; + } +} + +/** Return the data of an element of a given name, as an unsigned integer. + * + * @param name Name of element. + * + * @return guint Numeric representation of data, or 0 if could not be converted / not found. + * + * Useful to obtain an element's data if you know it should be an integer, + * even if it is not stored as an MSIM_TYPE_INTEGER. MSIM_TYPE_STRING will + * be converted handled correctly, for example. + */ +guint +msim_msg_get_integer(MsimMessage *msg, const gchar *name) +{ + MsimMessageElement *elem; + + elem = msim_msg_get(msg, name); + + if (!elem) { + return 0; + } + + return msim_msg_get_integer_from_element(elem); +} + + +guint +msim_msg_get_integer_from_element(MsimMessageElement *elem) +{ + g_return_val_if_fail(elem != NULL, 0); + switch (elem->type) { + case MSIM_TYPE_INTEGER: + return GPOINTER_TO_UINT(elem->data); + + case MSIM_TYPE_RAW: + case MSIM_TYPE_STRING: + /* TODO: find out if we need larger integers */ + return (guint)atoi((gchar *)elem->data); + + default: + return 0; + } +} + +/** Return the data of an element of a given name, as a binary GString. + * + * @param binary_data A pointer to a new pointer, which will be filled in with the binary data. CALLER MUST g_free(). + * + * @param binary_length A pointer to an integer, which will be set to the binary data length. + * + * @return TRUE if successful, FALSE if not. + */ +gboolean +msim_msg_get_binary(MsimMessage *msg, const gchar *name, + gchar **binary_data, gsize *binary_length) +{ + MsimMessageElement *elem; + + elem = msim_msg_get(msg, name); + if (!elem) { + return FALSE; + } + + return msim_msg_get_binary_from_element(elem, binary_data, binary_length); +} + +gboolean +msim_msg_get_binary_from_element(MsimMessageElement *elem, gchar **binary_data, gsize *binary_length) +{ + GString *gs; + + g_return_val_if_fail(elem != NULL, FALSE); + + switch (elem->type) { + case MSIM_TYPE_RAW: + /* Incoming messages are tagged with MSIM_TYPE_RAW, and + * converted appropriately. They can still be "strings", just they won't + * be tagged as MSIM_TYPE_STRING (as MSIM_TYPE_STRING is intended to be used + * by msimprpl code for things like instant messages - stuff that should be + * escaped if needed). DWIM. + */ + + /* Previously, incoming messages were stored as MSIM_TYPE_STRING. + * This was fine for integers and strings, since they can easily be + * converted in msim_get_*, as desirable. However, it does not work + * well for binary strings. Consider: + * + * If incoming base64'd elements were tagged as MSIM_TYPE_STRING. + * msim_msg_get_binary() sees MSIM_TYPE_STRING, base64 decodes, returns. + * everything is fine. + * But then, msim_send() is called on the incoming message, which has + * a base64'd MSIM_TYPE_STRING that really is encoded binary. The values + * will be escaped since strings are escaped, and / becomes /2; no good. + * + */ + *binary_data = (gchar *)purple_base64_decode((const gchar *)elem->data, binary_length); + return TRUE; + + case MSIM_TYPE_BINARY: + gs = (GString *)elem->data; + + /* Duplicate data, so caller can g_free() it. */ + *binary_data = g_new0(char, gs->len); + memcpy(*binary_data, gs->str, gs->len); + + *binary_length = gs->len; + + return TRUE; + + + /* Rejected because if it isn't already a GString, have to g_new0 it and + * then caller has to ALSO free the GString! + * + * return (GString *)elem->data; */ + + default: + purple_debug_info("msim", "msim_msg_get_binary: unhandled type %d for key %s\n", + elem->type, elem->name ? elem->name : "(NULL)"); + return FALSE; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/myspace/message.h Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,117 @@ +/** MySpaceIM protocol messages + * + * \author Jeff Connelly + * + * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im> + * + * 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 + */ + +#ifndef _MYSPACE_MESSAGE_H +#define _MYSPACE_MESSAGE_H + +#include <glib.h> + +/* Types */ +#define MsimMessage GList /* #define instead of typedef to avoid casting */ +typedef struct _MsimMessageElement +{ + const gchar *name; /**< Textual name of element. */ + guint type; /**< MSIM_TYPE_* code. */ + gpointer data; /**< Pointer to data, or GUINT_TO_POINTER for int/bool. */ +} MsimMessageElement; + +typedef gchar MsimMessageType; + +#define msim_msg_get_next_element_node(msg) ((MsimMessage *)(msg->next)) + +/* Protocol field types */ +#define MSIM_TYPE_RAW '-' +#define MSIM_TYPE_INTEGER 'i' +#define MSIM_TYPE_STRING 's' +#define MSIM_TYPE_BINARY 'b' +#define MSIM_TYPE_BOOLEAN 'f' +#define MSIM_TYPE_DICTIONARY 'd' +#define MSIM_TYPE_LIST 'l' + +gchar *msim_escape(const gchar *msg); +gchar *msim_unescape(const gchar *msg); + +MsimMessage *msim_msg_new(gchar *first_key, ...); +/* No sentinel attribute, because can leave off varargs if not_empty is FALSE. */ + +MsimMessage *msim_msg_clone(MsimMessage *old); +void msim_msg_free_element_data(MsimMessageElement *elem); +void msim_msg_free(MsimMessage *msg); +MsimMessage *msim_msg_append(MsimMessage *msg, const gchar *name, MsimMessageType type, gpointer data); +MsimMessage *msim_msg_insert_before(MsimMessage *msg, const gchar *name_before, const gchar *name, MsimMessageType type, gpointer data); +gchar *msim_msg_dump_to_str(MsimMessage *msg); +gchar *msim_msg_pack_element_data(MsimMessageElement *elem); +void msim_msg_dump(const char *fmt_string, MsimMessage *msg); +gchar *msim_msg_pack(MsimMessage *msg); +gchar *msim_msg_pack_dict(MsimMessage *msg); + +GList *msim_msg_list_copy(GList *old); +void msim_msg_list_free(GList *l); +GList *msim_msg_list_parse(const gchar *raw); + +/* Defined in myspace.h */ +struct _MsimSession; + +/* Based on http://permalink.gmane.org/gmane.comp.parsers.sparse/695 + * Define macros for useful gcc attributes. */ +#ifdef __GNUC__ +#define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__) +#define FORMAT_ATTR(pos) __attribute__ ((__format__ (__printf__, pos, pos+1))) +#define NORETURN_ATTR __attribute__ ((__noreturn__)) +/* __sentinel__ attribute was introduced in gcc 3.5 */ +#if (GCC_VERSION >= 3005) + #define SENTINEL_ATTR __attribute__ ((__sentinel__(0))) +#else + #define SENTINEL_ATTR +#endif /* gcc >= 3.5 */ +#else + #define FORMAT_ATTR(pos) + #define NORETURN_ATTR + #define SENTINEL_ATTR +#endif + +/* Cause gcc to emit "a missing sentinel in function call" if forgot + * to write NULL as last, terminating parameter. */ +gboolean msim_send(struct _MsimSession *session, ...) SENTINEL_ATTR; + +gboolean msim_msg_send(struct _MsimSession *session, MsimMessage *msg); + +MsimMessage *msim_parse(gchar *raw); +MsimMessage *msim_msg_dictionary_parse(gchar *raw); + +MsimMessageElement *msim_msg_get(MsimMessage *msg, const gchar *name); + +/* Retrieve data by name */ +gchar *msim_msg_get_string(MsimMessage *msg, const gchar *name); +GList *msim_msg_get_list(MsimMessage *msg, const gchar *name); +MsimMessage *msim_msg_get_dictionary(MsimMessage *msg, const gchar *name); +guint msim_msg_get_integer(MsimMessage *msg, const gchar *name); +gboolean msim_msg_get_binary(MsimMessage *msg, const gchar *name, gchar **binary_data, gsize *binary_length); + +/* Retrieve data by element (MsimMessageElement *), returned from msim_msg_get() */ +gchar *msim_msg_get_string_from_element(MsimMessageElement *elem); +GList *msim_msg_get_list_from_element(MsimMessageElement *elem); +MsimMessage *msim_msg_get_dictionary_from_element(MsimMessageElement *elem); +guint msim_msg_get_integer_from_element(MsimMessageElement *elem); +gboolean msim_msg_get_binary_from_element(MsimMessageElement *elem, + gchar **binary_data, gsize *binary_length); + +#endif /* _MYSPACE_MESSAGE_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/myspace/myspace.c Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,3181 @@ +/* MySpaceIM Protocol Plugin + * + * \author Jeff Connelly + * + * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im> + * + * Based on Purple's "C Plugin HOWTO" hello world example. + * + * Code also drawn from mockprpl: + * http://snarfed.org/space/purple+mock+protocol+plugin + * Copyright (C) 2004-2007, Ryan Barrett <mockprpl@ryanb.org> + * + * and some constructs also based on existing Purple plugins, which are: + * Copyright (C) 2003, Robbert Haarman <purple@inglorion.net> + * Copyright (C) 2003, Ethan Blanton <eblanton@cs.purdue.edu> + * Copyright (C) 2000-2003, Rob Flynn <rob@tgflinux.com> + * Copyright (C) 1998-1999, Mark Spencer <markster@marko.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 + */ + +#define PURPLE_PLUGIN + +#include "myspace.h" + +/* Internal functions */ + +#ifdef MSIM_DEBUG_MSG +static void print_hash_item(gpointer key, gpointer value, gpointer user_data); +#endif + +static int msim_send_really_raw(PurpleConnection *gc, const char *buf, int total_bytes); +static gboolean msim_login_challenge(MsimSession *session, MsimMessage *msg); +static const gchar *msim_compute_login_response(const gchar nonce[2 * NONCE_SIZE], const gchar *email, const gchar *password, guint *response_len); + +static gboolean msim_incoming_bm_record_cv(MsimSession *session, MsimMessage *msg); +static gboolean msim_incoming_bm(MsimSession *session, MsimMessage *msg); +static gboolean msim_incoming_status(MsimSession *session, MsimMessage *msg); +static gboolean msim_incoming_im(MsimSession *session, MsimMessage *msg); +/* static gboolean msim_incoming_zap(MsimSession *session, MsimMessage *msg); - in zap.c */ +static gboolean msim_incoming_action(MsimSession *session, MsimMessage *msg); +static gboolean msim_incoming_media(MsimSession *session, MsimMessage *msg); +static gboolean msim_incoming_unofficial_client(MsimSession *session, + MsimMessage *msg); + +#ifdef MSIM_SEND_CLIENT_VERSION +static gboolean msim_send_unofficial_client(MsimSession *session, gchar *username); +#endif + +static void msim_get_info_cb(MsimSession *session, MsimMessage *userinfo, gpointer data); + +static void msim_set_status_code(MsimSession *session, guint code, gchar *statstring); + +static gboolean msim_process_server_info(MsimSession *session, MsimMessage *msg); +static gboolean msim_web_challenge(MsimSession *session, MsimMessage *msg); +static gboolean msim_process_reply(MsimSession *session, MsimMessage *msg); + +static gboolean msim_preprocess_incoming(MsimSession *session, MsimMessage *msg); + +#ifdef MSIM_USE_KEEPALIVE +static gboolean msim_check_alive(gpointer data); +#endif + +static gboolean msim_we_are_logged_on(MsimSession *session, MsimMessage *msg); + +static gboolean msim_process(MsimSession *session, MsimMessage *msg); + +static MsimMessage *msim_do_postprocessing(MsimMessage *msg, const gchar *uid_field_name, const gchar *uid_before, guint uid); +static void msim_postprocess_outgoing_cb(MsimSession *session, MsimMessage *userinfo, gpointer data); +static gboolean msim_postprocess_outgoing(MsimSession *session, MsimMessage *msg, const gchar *username, const gchar *uid_field_name, const gchar *uid_before); + +static gboolean msim_error(MsimSession *session, MsimMessage *msg); + +static void msim_check_inbox_cb(MsimSession *session, MsimMessage *userinfo, gpointer data); +static gboolean msim_check_inbox(gpointer data); + +static void msim_input_cb(gpointer gc_uncasted, gint source, PurpleInputCondition cond); + + +static void msim_connect_cb(gpointer data, gint source, const gchar *error_message); + +static void msim_import_friends(PurplePluginAction *action); +static void msim_import_friends_cb(MsimSession *session, MsimMessage *reply, gpointer user_data); +static gboolean msim_get_contact_list(MsimSession *session, int what_to_do_after); + +static gboolean msim_uri_handler(const gchar *proto, const gchar *cmd, GHashTable *params); +static void msim_uri_handler_addContact_cb(MsimSession *session, MsimMessage *userinfo, gpointer data); +static void msim_uri_handler_sendIM_cb(MsimSession *session, MsimMessage *userinfo, gpointer data); + +/** + * Load the plugin. + */ +gboolean +msim_load(PurplePlugin *plugin) +{ + /* If compiled to use RC4 from libpurple, check if it is really there. */ + if (!purple_ciphers_find_cipher("rc4")) { + purple_debug_error("msim", "rc4 not in libpurple, but it is required - not loading MySpaceIM plugin!\n"); + purple_notify_error(plugin, _("Missing Cipher"), + _("The RC4 cipher could not be found"), + _("Upgrade " + "to a libpurple with RC4 support (>= 2.0.1). MySpaceIM " + "plugin will not be loaded.")); + return FALSE; + } + return TRUE; +} + +/** + * Get possible user status types. Based on mockprpl. + * + * @return GList of status types. + */ +GList * +msim_status_types(PurpleAccount *acct) +{ + GList *types; + PurpleStatusType *status; + + purple_debug_info("myspace", "returning status types\n"); + + types = NULL; + + /* Statuses are almost all the same. Define a macro to reduce code repetition. */ +#define _MSIM_ADD_NEW_STATUS(prim) status = \ + purple_status_type_new_with_attrs( \ + prim, /* PurpleStatusPrimitive */ \ + NULL, /* id - use default */ \ + NULL, /* name - use default */ \ + TRUE, /* savable */ \ + TRUE, /* user_settable */ \ + FALSE, /* not independent */ \ + \ + /* Attributes - each status can have a message. */ \ + "message", \ + _("Message"), \ + purple_value_new(PURPLE_TYPE_STRING), \ + NULL); \ + \ + \ + types = g_list_append(types, status) + + + _MSIM_ADD_NEW_STATUS(PURPLE_STATUS_AVAILABLE); + _MSIM_ADD_NEW_STATUS(PURPLE_STATUS_AWAY); + _MSIM_ADD_NEW_STATUS(PURPLE_STATUS_OFFLINE); + _MSIM_ADD_NEW_STATUS(PURPLE_STATUS_INVISIBLE); + + + return types; +} + +/** + * Return the icon name for a buddy and account. + * + * @param acct The account to find the icon for, or NULL for protocol icon. + * @param buddy The buddy to find the icon for, or NULL for the account icon. + * + * @return The base icon name string. + */ +const gchar * +msim_list_icon(PurpleAccount *acct, PurpleBuddy *buddy) +{ + /* Use a MySpace icon submitted by hbons at + * http://developer.pidgin.im/wiki/MySpaceIM. */ + return "myspace"; +} + +#ifdef MSIM_DEBUG_MSG +static void +print_hash_item(gpointer key, gpointer value, gpointer user_data) +{ + purple_debug_info("msim", "%s=%s\n", + key ? (gchar *)key : "(NULL)", + value ? (gchar *)value : "(NULL)"); +} +#endif + +/** + * Send raw data (given as a NUL-terminated string) to the server. + * + * @param session + * @param msg The raw data to send, in a NUL-terminated string. + * + * @return TRUE if succeeded, FALSE if not. + * + */ +gboolean +msim_send_raw(MsimSession *session, const gchar *msg) +{ + g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE); + g_return_val_if_fail(msg != NULL, FALSE); + + purple_debug_info("msim", "msim_send_raw: writing <%s>\n", msg); + + return msim_send_really_raw(session->gc, msg, strlen(msg)) == + strlen(msg); +} + +/** Send raw data to the server, possibly with embedded NULs. + * + * Used in prpl_info struct, so that plugins can have the most possible + * control of what is sent over the connection. Inside this prpl, + * msim_send_raw() is used, since it sends NUL-terminated strings (easier). + * + * @param gc PurpleConnection + * @param buf Buffer to send + * @param total_bytes Size of buffer to send + * + * @return Bytes successfully sent, or -1 on error. + */ +static int +msim_send_really_raw(PurpleConnection *gc, const char *buf, int total_bytes) +{ + int total_bytes_sent; + MsimSession *session; + + g_return_val_if_fail(gc != NULL, -1); + g_return_val_if_fail(buf != NULL, -1); + g_return_val_if_fail(total_bytes >= 0, -1); + + session = (MsimSession *)gc->proto_data; + + g_return_val_if_fail(MSIM_SESSION_VALID(session), -1); + + /* Loop until all data is sent, or a failure occurs. */ + total_bytes_sent = 0; + do { + int bytes_sent; + + bytes_sent = send(session->fd, buf + total_bytes_sent, + total_bytes - total_bytes_sent, 0); + + if (bytes_sent < 0) { + purple_debug_info("msim", "msim_send_raw(%s): send() failed: %s\n", + buf, g_strerror(errno)); + return total_bytes_sent; + } + total_bytes_sent += bytes_sent; + + } while(total_bytes_sent < total_bytes); + + return total_bytes_sent; +} + + +/** + * Start logging in to the MSIM servers. + * + * @param acct Account information to use to login. + */ +void +msim_login(PurpleAccount *acct) +{ + PurpleConnection *gc; + const gchar *host; + int port; + + g_return_if_fail(acct != NULL); + g_return_if_fail(acct->username != NULL); + + purple_debug_info("msim", "logging in %s\n", acct->username); + + gc = purple_account_get_connection(acct); + gc->proto_data = msim_session_new(acct); + gc->flags |= PURPLE_CONNECTION_HTML | PURPLE_CONNECTION_NO_URLDESC; + +#ifdef MSIM_MAX_PASSWORD_LENGTH + /* Passwords are limited in length. */ + if (strlen(acct->password) > MSIM_MAX_PASSWORD_LENGTH) { + gchar *str; + + str = g_strdup_printf( + _("Sorry, passwords over %d characters in length (yours is " + "%d) are not supported by MySpace."), + MSIM_MAX_PASSWORD_LENGTH, + (int)strlen(acct->password)); + + /* Notify an error message also, because this is important! */ + purple_notify_error(acct, g_strdup(_("MySpaceIM Error")), str, NULL); + + purple_connection_error(gc, str); + + g_free(str); + } +#endif + + /* 1. connect to server */ + purple_connection_update_progress(gc, _("Connecting"), + 0, /* which connection step this is */ + 4); /* total number of steps */ + + host = purple_account_get_string(acct, "server", MSIM_SERVER); + port = purple_account_get_int(acct, "port", MSIM_PORT); + + /* From purple.sf.net/api: + * """Note that this function name can be misleading--although it is called + * "proxy connect," it is used for establishing any outgoing TCP connection, + * whether through a proxy or not.""" */ + + /* Calls msim_connect_cb when connected. */ + if (!purple_proxy_connect(gc, acct, host, port, msim_connect_cb, gc)) { + /* TODO: try other ports if in auto mode, then save + * working port and try that first next time. */ + purple_connection_error(gc, _("Couldn't create socket")); + return; + } +} + +/** + * Process a login challenge, sending a response. + * + * @param session + * @param msg Login challenge message. + * + * @return TRUE if successful, FALSE if not + */ +static gboolean +msim_login_challenge(MsimSession *session, MsimMessage *msg) +{ + PurpleAccount *account; + const gchar *response; + guint response_len; + gchar *nc; + gsize nc_len; + + g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE); + g_return_val_if_fail(msg != NULL, FALSE); + + g_return_val_if_fail(msim_msg_get_binary(msg, "nc", &nc, &nc_len), FALSE); + + account = session->account; + + g_return_val_if_fail(account != NULL, FALSE); + + purple_connection_update_progress(session->gc, _("Reading challenge"), 1, 4); + + purple_debug_info("msim", "nc is %d bytes, decoded\n", nc_len); + + if (nc_len != MSIM_AUTH_CHALLENGE_LENGTH) { + purple_debug_info("msim", "bad nc length: %x != 0x%x\n", nc_len, MSIM_AUTH_CHALLENGE_LENGTH); + purple_connection_error(session->gc, _("Unexpected challenge length from server")); + return FALSE; + } + + purple_connection_update_progress(session->gc, _("Logging in"), 2, 4); + + response_len = 0; + response = msim_compute_login_response(nc, account->username, account->password, &response_len); + + g_free(nc); + + return msim_send(session, + "login2", MSIM_TYPE_INTEGER, MSIM_AUTH_ALGORITHM, + /* This is actually user's email address. */ + "username", MSIM_TYPE_STRING, g_strdup(account->username), + /* GString and gchar * response will be freed in msim_msg_free() in msim_send(). */ + "response", MSIM_TYPE_BINARY, g_string_new_len(response, response_len), + "clientver", MSIM_TYPE_INTEGER, MSIM_CLIENT_VERSION, + "langid", MSIM_TYPE_INTEGER, MSIM_LANGUAGE_ID_ENGLISH, + "imlang", MSIM_TYPE_STRING, g_strdup(MSIM_LANGUAGE_NAME_ENGLISH), + "reconn", MSIM_TYPE_INTEGER, 0, + "status", MSIM_TYPE_INTEGER, 100, + "id", MSIM_TYPE_INTEGER, 1, + NULL); +} + +/** + * Compute the base64'd login challenge response based on username, password, nonce, and IPs. + * + * @param nonce The base64 encoded nonce ('nc') field from the server. + * @param email User's email address (used as login name). + * @param password User's cleartext password. + * @param response_len Will be written with response length. + * + * @return Binary login challenge response, ready to send to the server. + * Must be g_free()'d when finished. NULL if error. + */ +static const gchar * +msim_compute_login_response(const gchar nonce[2 * NONCE_SIZE], + const gchar *email, const gchar *password, guint *response_len) +{ + PurpleCipherContext *key_context; + PurpleCipher *sha1; + PurpleCipherContext *rc4; + + guchar hash_pw[HASH_SIZE]; + guchar key[HASH_SIZE]; + gchar *password_utf16le, *password_utf8_lc; + guchar *data; + guchar *data_out; + size_t data_len, data_out_len; + gsize conv_bytes_read, conv_bytes_written; + GError *conv_error; +#ifdef MSIM_DEBUG_LOGIN_CHALLENGE + int i; +#endif + + g_return_val_if_fail(nonce != NULL, NULL); + g_return_val_if_fail(email != NULL, NULL); + g_return_val_if_fail(password != NULL, NULL); + g_return_val_if_fail(response_len != NULL, NULL); + + /* Convert password to lowercase (required for passwords containing + * uppercase characters). MySpace passwords are lowercase, + * see ticket #2066. */ + password_utf8_lc = g_utf8_strdown(password, -1); + + /* Convert ASCII password to UTF16 little endian */ + purple_debug_info("msim", "converting password to UTF-16LE\n"); + conv_error = NULL; + password_utf16le = g_convert(password_utf8_lc, -1, "UTF-16LE", "UTF-8", + &conv_bytes_read, &conv_bytes_written, &conv_error); + g_free(password_utf8_lc); + + g_return_val_if_fail(conv_bytes_read == strlen(password), NULL); + + if (conv_error != NULL) { + purple_debug_error("msim", + "g_convert password UTF8->UTF16LE failed: %s", + conv_error->message); + g_error_free(conv_error); + return NULL; + } + + /* Compute password hash */ + purple_cipher_digest_region("sha1", (guchar *)password_utf16le, + conv_bytes_written, sizeof(hash_pw), hash_pw, NULL); + g_free(password_utf16le); + +#ifdef MSIM_DEBUG_LOGIN_CHALLENGE + purple_debug_info("msim", "pwhash = "); + for (i = 0; i < sizeof(hash_pw); i++) + purple_debug_info("msim", "%.2x ", hash_pw[i]); + purple_debug_info("msim", "\n"); +#endif + + /* key = sha1(sha1(pw) + nonce2) */ + sha1 = purple_ciphers_find_cipher("sha1"); + key_context = purple_cipher_context_new(sha1, NULL); + purple_cipher_context_append(key_context, hash_pw, HASH_SIZE); + purple_cipher_context_append(key_context, (guchar *)(nonce + NONCE_SIZE), NONCE_SIZE); + purple_cipher_context_digest(key_context, sizeof(key), key, NULL); + +#ifdef MSIM_DEBUG_LOGIN_CHALLENGE + purple_debug_info("msim", "key = "); + for (i = 0; i < sizeof(key); i++) { + purple_debug_info("msim", "%.2x ", key[i]); + } + purple_debug_info("msim", "\n"); +#endif + + rc4 = purple_cipher_context_new_by_name("rc4", NULL); + + /* Note: 'key' variable is 0x14 bytes (from SHA-1 hash), + * but only first 0x10 used for the RC4 key. */ + purple_cipher_context_set_option(rc4, "key_len", (gpointer)0x10); + purple_cipher_context_set_key(rc4, key); + + /* TODO: obtain IPs of network interfaces */ + + /* rc4 encrypt: + * nonce1+email+IP list */ + + data_len = NONCE_SIZE + strlen(email) + MSIM_LOGIN_IP_LIST_LEN; + data = g_new0(guchar, data_len); + memcpy(data, nonce, NONCE_SIZE); + memcpy(data + NONCE_SIZE, email, strlen(email)); + memcpy(data + NONCE_SIZE + strlen(email), MSIM_LOGIN_IP_LIST, MSIM_LOGIN_IP_LIST_LEN); + + data_out = g_new0(guchar, data_len); + + purple_cipher_context_encrypt(rc4, (const guchar *)data, + data_len, data_out, &data_out_len); + purple_cipher_context_destroy(rc4); + + g_assert(data_out_len == data_len); + +#ifdef MSIM_DEBUG_LOGIN_CHALLENGE + purple_debug_info("msim", "response=<%s>\n", data_out); +#endif + + *response_len = data_out_len; + + return (const gchar *)data_out; +} + +/** + * Schedule an IM to be sent once the user ID is looked up. + * + * @param gc Connection. + * @param who A user id, email, or username to send the message to. + * @param message Instant message text to send. + * @param flags Flags. + * + * @return 1 if successful or postponed, -1 if failed + * + * Allows sending to a user by username, email address, or userid. If + * a username or email address is given, the userid must be looked up. + * This function does that by calling msim_postprocess_outgoing(). + */ +int +msim_send_im(PurpleConnection *gc, const gchar *who, const gchar *message, + PurpleMessageFlags flags) +{ + MsimSession *session; + gchar *message_msim; + int rc; + + g_return_val_if_fail(gc != NULL, -1); + g_return_val_if_fail(who != NULL, -1); + g_return_val_if_fail(message != NULL, -1); + + /* 'flags' has many options, not used here. */ + + session = (MsimSession *)gc->proto_data; + + g_return_val_if_fail(MSIM_SESSION_VALID(session), -1); + + message_msim = html_to_msim_markup(session, message); + + if (msim_send_bm(session, who, message_msim, MSIM_BM_INSTANT)) { + /* Return 1 to have Purple show this IM as being sent, 0 to not. I always + * return 1 even if the message could not be sent, since I don't know if + * it has failed yet--because the IM is only sent after the userid is + * retrieved from the server (which happens after this function returns). + */ + /* TODO: maybe if message is delayed, don't echo to conv window, + * but do echo it to conv window manually once it is actually + * sent? Would be complicated. */ + rc = 1; + } else { + rc = -1; + } + + g_free(message_msim); + + /* + * In MySpace, you login with your email address, but don't talk to other + * users using their email address. So there is currently an asymmetry in the + * IM windows when using this plugin: + * + * you@example.com: hello + * some_other_user: what's going on? + * you@example.com: just coding a prpl + * + * TODO: Make the sent IM's appear as from the user's username, instead of + * their email address. Purple uses the login (in MSIM, the email)--change this. + */ + + return rc; +} + +/** Send a buddy message of a given type. + * + * @param session + * @param who Username to send message to. + * @param text Message text to send. Not freed; will be copied. + * @param type A MSIM_BM_* constant. + * + * @return TRUE if success, FALSE if fail. + * + * Buddy messages ('bm') include instant messages, action messages, status messages, etc. + * + */ +gboolean +msim_send_bm(MsimSession *session, const gchar *who, const gchar *text, + int type) +{ + gboolean rc; + MsimMessage *msg; + const gchar *from_username; + + g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE); + g_return_val_if_fail(who != NULL, FALSE); + g_return_val_if_fail(text != NULL, FALSE); + + from_username = session->account->username; + + g_return_val_if_fail(from_username != NULL, FALSE); + + purple_debug_info("msim", "sending %d message from %s to %s: %s\n", + type, from_username, who, text); + + msg = msim_msg_new( + "bm", MSIM_TYPE_INTEGER, GUINT_TO_POINTER(type), + "sesskey", MSIM_TYPE_INTEGER, GUINT_TO_POINTER(session->sesskey), + /* 't' will be inserted here */ + "cv", MSIM_TYPE_INTEGER, GUINT_TO_POINTER(MSIM_CLIENT_VERSION), + "msg", MSIM_TYPE_STRING, g_strdup(text), + NULL); + + rc = msim_postprocess_outgoing(session, msg, who, "t", "cv"); + + msim_msg_free(msg); + + return rc; +} + + +/** Record the client version in the buddy list, from an incoming message. */ +static gboolean +msim_incoming_bm_record_cv(MsimSession *session, MsimMessage *msg) +{ + gchar *username, *cv; + gboolean ret; + MsimUser *user; + + username = msim_msg_get_string(msg, "_username"); + cv = msim_msg_get_string(msg, "cv"); + + g_return_val_if_fail(username != NULL, FALSE); + if (!cv) { + /* No client version to record, don't worry about it. */ + return FALSE; + } + + user = msim_find_user(session, username); + + if (user) { + user->client_cv = atol(cv); + ret = TRUE; + } else { + ret = FALSE; + } + + g_free(username); + g_free(cv); + + return ret; +} + +/** Handle an incoming buddy message. */ +static gboolean +msim_incoming_bm(MsimSession *session, MsimMessage *msg) +{ + guint bm; + + bm = msim_msg_get_integer(msg, "bm"); + + msim_incoming_bm_record_cv(session, msg); + + switch (bm) { + case MSIM_BM_STATUS: + return msim_incoming_status(session, msg); + case MSIM_BM_INSTANT: + return msim_incoming_im(session, msg); + case MSIM_BM_ACTION: + return msim_incoming_action(session, msg); + case MSIM_BM_MEDIA: + return msim_incoming_media(session, msg); + case MSIM_BM_UNOFFICIAL_CLIENT: + return msim_incoming_unofficial_client(session, msg); + default: + /* Not really an IM, but show it for informational + * purposes during development. */ + return msim_incoming_im(session, msg); + } +} + +/** + * Handle an incoming instant message. + * + * @param session The session + * @param msg Message from the server, containing 'f' (userid from) and 'msg'. + * Should also contain username in _username from preprocessing. + * + * @return TRUE if successful. + */ +static gboolean +msim_incoming_im(MsimSession *session, MsimMessage *msg) +{ + gchar *username, *msg_msim_markup, *msg_purple_markup; + + g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE); + g_return_val_if_fail(msg != NULL, FALSE); + + username = msim_msg_get_string(msg, "_username"); + g_return_val_if_fail(username != NULL, FALSE); + + msg_msim_markup = msim_msg_get_string(msg, "msg"); + g_return_val_if_fail(msg_msim_markup != NULL, FALSE); + + msg_purple_markup = msim_markup_to_html(session, msg_msim_markup); + g_free(msg_msim_markup); + + serv_got_im(session->gc, username, msg_purple_markup, + PURPLE_MESSAGE_RECV, time(NULL)); + + g_free(username); + g_free(msg_purple_markup); + + return TRUE; +} + +/** + * Process unrecognized information. + * + * @param session + * @param msg An MsimMessage that was unrecognized, or NULL. + * @param note Information on what was unrecognized, or NULL. + */ +void +msim_unrecognized(MsimSession *session, MsimMessage *msg, gchar *note) +{ + /* TODO: Some more context, outwardly equivalent to a backtrace, + * for helping figure out what this msg is for. What was going on? + * But not too much information so that a user + * posting this dump reveals confidential information. + */ + + /* TODO: dump unknown msgs to file, so user can send them to me + * if they wish, to help add support for new messages (inspired + * by Alexandr Shutko, who maintains OSCAR protocol documentation). */ + + purple_debug_info("msim", "Unrecognized data on account for %s\n", + (session && session->account && session->account->username) ? + session->account->username : "(NULL)"); + if (note) { + purple_debug_info("msim", "(Note: %s)\n", note); + } + + if (msg) { + msim_msg_dump("Unrecognized message dump: %s\n", msg); + } +} + +/** + * Handle an incoming action message. + * + * @param session + * @param msg + * + * @return TRUE if successful. + * + */ +static gboolean +msim_incoming_action(MsimSession *session, MsimMessage *msg) +{ + gchar *msg_text, *username; + gboolean rc; + + g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE); + g_return_val_if_fail(msg != NULL, FALSE); + + msg_text = msim_msg_get_string(msg, "msg"); + g_return_val_if_fail(msg_text != NULL, FALSE); + + username = msim_msg_get_string(msg, "_username"); + g_return_val_if_fail(username != NULL, FALSE); + + purple_debug_info("msim", "msim_incoming_action: action <%s> from <%d>\n", + msg_text, username); + + if (g_str_equal(msg_text, "%typing%")) { + /* TODO: find out if msim repeatedly sends typing messages, so we can + * give it a timeout. Right now, there does seem to be an inordinately + * amount of time between typing stopped-typing notifications. */ + serv_got_typing(session->gc, username, 0, PURPLE_TYPING); + rc = TRUE; + } else if (g_str_equal(msg_text, "%stoptyping%")) { + serv_got_typing_stopped(session->gc, username); + rc = TRUE; + } else if (strstr(msg_text, "!!!ZAP_SEND!!!=RTE_BTN_ZAPS_")) { + rc = msim_incoming_zap(session, msg); + } else { + msim_unrecognized(session, msg, + "got to msim_incoming_action but unrecognized value for 'msg'"); + rc = FALSE; + } + + g_free(msg_text); + g_free(username); + + return rc; +} + +/* Process an incoming media (message background?) message. */ +static gboolean +msim_incoming_media(MsimSession *session, MsimMessage *msg) +{ + gchar *username, *text; + + username = msim_msg_get_string(msg, "_username"); + text = msim_msg_get_string(msg, "msg"); + + g_return_val_if_fail(username != NULL, FALSE); + g_return_val_if_fail(text != NULL, FALSE); + + purple_debug_info("msim", "msim_incoming_media: from %s, got msg=%s\n", username, text); + + /* Media messages are sent when the user opens a window to someone. + * Tell libpurple they started typing and stopped typing, to inform the Psychic + * Mode plugin so it too can open a window to the user. */ + serv_got_typing(session->gc, username, 0, PURPLE_TYPING); + serv_got_typing_stopped(session->gc, username); + + g_free(username); + + return TRUE; +} + +/* Process an incoming "unofficial client" message. The plugin for + * Miranda IM sends this message with the plugin information. */ +static gboolean +msim_incoming_unofficial_client(MsimSession *session, MsimMessage *msg) +{ + MsimUser *user; + gchar *username, *client_info; + + username = msim_msg_get_string(msg, "_username"); + client_info = msim_msg_get_string(msg, "msg"); + + g_return_val_if_fail(username != NULL, FALSE); + g_return_val_if_fail(client_info != NULL, FALSE); + + purple_debug_info("msim", "msim_incoming_unofficial_client: %s is using client %s\n", + username, client_info); + + user = msim_find_user(session, username); + + g_return_val_if_fail(user != NULL, FALSE); + + if (user->client_info) { + g_free(user->client_info); + } + user->client_info = client_info; + + g_free(username); + /* Do not free client_info - the MsimUser now owns it. */ + + return TRUE; +} + + +#ifdef MSIM_SEND_CLIENT_VERSION +/** Send our client version to another unofficial client that understands it. */ +static gboolean +msim_send_unofficial_client(MsimSession *session, gchar *username) +{ + gchar *our_info; + gboolean ret; + + our_info = g_strdup_printf("Libpurple %d.%d.%d - msimprpl %s", + PURPLE_MAJOR_VERSION, + PURPLE_MINOR_VERSION, + PURPLE_MICRO_VERSION, + MSIM_PRPL_VERSION_STRING); + + ret = msim_send_bm(session, username, our_info, MSIM_BM_UNOFFICIAL_CLIENT); + + return ret; +} +#endif + +/** + * Handle when our user starts or stops typing to another user. + * + * @param gc + * @param name The buddy name to which our user is typing to + * @param state PURPLE_TYPING, PURPLE_TYPED, PURPLE_NOT_TYPING + * + * @return 0 + */ +unsigned int +msim_send_typing(PurpleConnection *gc, const gchar *name, + PurpleTypingState state) +{ + const gchar *typing_str; + MsimSession *session; + + g_return_val_if_fail(gc != NULL, 0); + g_return_val_if_fail(name != NULL, 0); + + session = (MsimSession *)gc->proto_data; + + g_return_val_if_fail(MSIM_SESSION_VALID(session), 0); + + switch (state) { + case PURPLE_TYPING: + typing_str = "%typing%"; + break; + + case PURPLE_TYPED: + case PURPLE_NOT_TYPING: + default: + typing_str = "%stoptyping%"; + break; + } + + purple_debug_info("msim", "msim_send_typing(%s): %d (%s)\n", name, state, typing_str); + msim_send_bm(session, name, typing_str, MSIM_BM_ACTION); + return 0; +} + + + +/** Callback for msim_get_info(), for when user info is received. */ +static void +msim_get_info_cb(MsimSession *session, MsimMessage *user_info_msg, + gpointer data) +{ + MsimMessage *msg; + gchar *username; + PurpleNotifyUserInfo *user_info; + MsimUser *user; + gboolean temporary_user; + + g_return_if_fail(MSIM_SESSION_VALID(session)); + + /* Get user{name,id} from msim_get_info, passed as an MsimMessage for + orthogonality. */ + msg = (MsimMessage *)data; + g_return_if_fail(msg != NULL); + + username = msim_msg_get_string(msg, "user"); + if (!username) { + purple_debug_info("msim", "msim_get_info_cb: no 'user' in msg"); + return; + } + + msim_msg_free(msg); + purple_debug_info("msim", "msim_get_info_cb: got for user: %s\n", username); + + user = msim_find_user(session, username); + + if (!user) { + /* User isn't on blist, create a temporary user to store info. */ + temporary_user = TRUE; + user = g_new0(MsimUser, 1); + } else { + temporary_user = FALSE; + } + + /* Update user structure with new information */ + msim_store_user_info(session, user_info_msg, user); + + user_info = purple_notify_user_info_new(); + + /* Append data from MsimUser to PurpleNotifyUserInfo for display, full */ + msim_append_user_info(session, user_info, user, TRUE); + + purple_notify_userinfo(session->gc, username, user_info, NULL, NULL); + purple_debug_info("msim", "msim_get_info_cb: username=%s\n", username); + + purple_notify_user_info_destroy(user_info); + /* TODO: do not free username, since it will be used by user_info? */ + + if (temporary_user) { + g_free(user->client_info); + g_free(user->gender); + g_free(user->location); + g_free(user->headline); + g_free(user->display_name); + g_free(user->username); + g_free(user->band_name); + g_free(user->song_name); + g_free(user->image_url); + g_free(user); + } + +} + +/** Retrieve a user's profile. + * @param username Username, user ID, or email address to lookup. + */ +void +msim_get_info(PurpleConnection *gc, const gchar *username) +{ + MsimSession *session; + MsimUser *user; + guint uid; + gchar *user_to_lookup; + MsimMessage *user_msg; + + g_return_if_fail(gc != NULL); + g_return_if_fail(username != NULL); + + session = (MsimSession *)gc->proto_data; + + g_return_if_fail(MSIM_SESSION_VALID(session)); + + /* Obtain uid of buddy. */ + user = msim_find_user(session, username); + + /* If is on buddy list, lookup by uid since it is faster. */ + if (user && (uid = purple_blist_node_get_int(&user->buddy->node, "UserID"))) { + user_to_lookup = g_strdup_printf("%d", uid); + } else { + /* Looking up buddy not on blist. Lookup by whatever user entered. */ + user_to_lookup = g_strdup(username); + } + + /* Pass the username to msim_get_info_cb(), because since we lookup + * by userid, the userinfo message will only contain the uid (not + * the username) but it would be useful to display the username too. + */ + user_msg = msim_msg_new( + "user", MSIM_TYPE_STRING, g_strdup(username), + NULL); + purple_debug_info("msim", "msim_get_info, setting up lookup, user=%s\n", username); + + msim_lookup_user(session, user_to_lookup, msim_get_info_cb, user_msg); + + g_free(user_to_lookup); +} + +/** Set your status - callback for when user manually sets it. */ +void +msim_set_status(PurpleAccount *account, PurpleStatus *status) +{ + PurpleStatusType *type; + MsimSession *session; + guint status_code; + const gchar *statstring; + + session = (MsimSession *)account->gc->proto_data; + + g_return_if_fail(MSIM_SESSION_VALID(session)); + + type = purple_status_get_type(status); + + switch (purple_status_type_get_primitive(type)) { + case PURPLE_STATUS_AVAILABLE: + purple_debug_info("msim", "msim_set_status: available (%d->%d)\n", PURPLE_STATUS_AVAILABLE, + MSIM_STATUS_CODE_ONLINE); + status_code = MSIM_STATUS_CODE_ONLINE; + break; + + case PURPLE_STATUS_INVISIBLE: + purple_debug_info("msim", "msim_set_status: invisible (%d->%d)\n", PURPLE_STATUS_INVISIBLE, + MSIM_STATUS_CODE_OFFLINE_OR_HIDDEN); + status_code = MSIM_STATUS_CODE_OFFLINE_OR_HIDDEN; + break; + + case PURPLE_STATUS_AWAY: + purple_debug_info("msim", "msim_set_status: away (%d->%d)\n", PURPLE_STATUS_AWAY, + MSIM_STATUS_CODE_AWAY); + status_code = MSIM_STATUS_CODE_AWAY; + break; + + default: + purple_debug_info("msim", "msim_set_status: unknown " + "status interpreting as online"); + status_code = MSIM_STATUS_CODE_ONLINE; + break; + } + + statstring = purple_status_get_attr_string(status, "message"); + + if (!statstring) { + statstring = g_strdup(""); + } + + msim_set_status_code(session, status_code, g_strdup(statstring)); +} + +/** Go idle. */ +void +msim_set_idle(PurpleConnection *gc, int time) +{ + MsimSession *session; + + g_return_if_fail(gc != NULL); + + session = (MsimSession *)gc->proto_data; + + g_return_if_fail(MSIM_SESSION_VALID(session)); + + if (time == 0) { + /* Going back from idle. In msim, idle is mutually exclusive + * from the other states (you can only be away or idle, but not + * both, for example), so by going non-idle I go online. + */ + /* TODO: find out how to keep old status string? */ + msim_set_status_code(session, MSIM_STATUS_CODE_ONLINE, g_strdup("")); + } else { + /* msim doesn't support idle time, so just go idle */ + msim_set_status_code(session, MSIM_STATUS_CODE_IDLE, g_strdup("")); + } +} + +/** Set status using an MSIM_STATUS_CODE_* value. + * @param status_code An MSIM_STATUS_CODE_* value. + * @param statstring Status string, must be a dynamic string (will be freed by msim_send). + */ +static void +msim_set_status_code(MsimSession *session, guint status_code, gchar *statstring) +{ + g_return_if_fail(MSIM_SESSION_VALID(session)); + g_return_if_fail(statstring != NULL); + + purple_debug_info("msim", "msim_set_status_code: going to set status to code=%d,str=%s\n", + status_code, statstring); + + if (!msim_send(session, + "status", MSIM_TYPE_INTEGER, status_code, + "sesskey", MSIM_TYPE_INTEGER, session->sesskey, + "statstring", MSIM_TYPE_STRING, statstring, + "locstring", MSIM_TYPE_STRING, g_strdup(""), + NULL)) + { + purple_debug_info("msim", "msim_set_status: failed to set status"); + } + +} + +/** After a uid is resolved to username, tag it with the username and submit for processing. + * + * @param session + * @param userinfo Response messsage to resolving request. + * @param data MsimMessage *, the message to attach information to. + */ +static void +msim_incoming_resolved(MsimSession *session, MsimMessage *userinfo, + gpointer data) +{ + gchar *username; + MsimMessage *msg, *body; + + g_return_if_fail(MSIM_SESSION_VALID(session)); + g_return_if_fail(userinfo != NULL); + + body = msim_msg_get_dictionary(userinfo, "body"); + g_return_if_fail(body != NULL); + + username = msim_msg_get_string(body, "UserName"); + g_return_if_fail(username != NULL); + /* Note: username will be owned by 'msg' below. */ + + msg = (MsimMessage *)data; + g_return_if_fail(msg != NULL); + + /* TODO: more elegant solution than below. attach whole message? */ + /* Special elements name beginning with '_', we'll use internally within the + * program (did not come directly from the wire). */ + msg = msim_msg_append(msg, "_username", MSIM_TYPE_STRING, username); + + /* TODO: attach more useful information, like ImageURL */ + + msim_process(session, msg); + + /* TODO: Free copy cloned from msim_preprocess_incoming(). */ + //XXX msim_msg_free(msg); + msim_msg_free(body); +} + +/* Lookup a username by userid, from buddy list. + * + * @param wanted_uid + * + * @return Username of wanted_uid, if on blist, or NULL. Static string. + * + */ +static const gchar * +msim_uid2username_from_blist(MsimSession *session, guint wanted_uid) +{ + GSList *buddies, *cur; + gchar *ret; + + buddies = purple_find_buddies(session->account, NULL); + + if (!buddies) + { + purple_debug_info("msim", "msim_uid2username_from_blist: no buddies?"); + return NULL; + } + + ret = NULL; + + for (cur = buddies; cur != NULL; cur = g_slist_next(cur)) + { + PurpleBuddy *buddy; + guint uid; + const gchar *name; + + /* See finch/gnthistory.c */ + buddy = cur->data; + + uid = purple_blist_node_get_int(&buddy->node, "UserID"); + name = purple_buddy_get_name(buddy); + + if (uid == wanted_uid) + { + ret = g_strdup(name); + break; + } + } + + g_slist_free(buddies); + return ret; +} + +/** Preprocess incoming messages, resolving as needed, calling msim_process() when ready to process. + * + * @param session + * @param msg MsimMessage *, freed by caller. + */ +static gboolean +msim_preprocess_incoming(MsimSession *session, MsimMessage *msg) +{ + g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE); + g_return_val_if_fail(msg != NULL, FALSE); + + if (msim_msg_get(msg, "bm") && msim_msg_get(msg, "f")) { + guint uid; + const gchar *username; + + /* 'f' = userid message is from, in buddy messages */ + uid = msim_msg_get_integer(msg, "f"); + + username = msim_uid2username_from_blist(session, uid); + + if (username) { + /* Know username already, use it. */ + purple_debug_info("msim", "msim_preprocess_incoming: tagging with _username=%s\n", + username); + msg = msim_msg_append(msg, "_username", MSIM_TYPE_STRING, g_strdup(username)); + return msim_process(session, msg); + + } else { + gchar *from; + + /* Send lookup request. */ + /* XXX: where is msim_msg_get_string() freed? make _strdup and _nonstrdup. */ + purple_debug_info("msim", "msim_incoming: sending lookup, setting up callback\n"); + from = msim_msg_get_string(msg, "f"); + msim_lookup_user(session, from, msim_incoming_resolved, msim_msg_clone(msg)); + g_free(from); + + /* indeterminate */ + return TRUE; + } + } else { + /* Nothing to resolve - send directly to processing. */ + return msim_process(session, msg); + } +} + +#ifdef MSIM_USE_KEEPALIVE +/** Check if the connection is still alive, based on last communication. */ +static gboolean +msim_check_alive(gpointer data) +{ + MsimSession *session; + time_t delta; + gchar *errmsg; + + session = (MsimSession *)data; + + g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE); + + delta = time(NULL) - session->last_comm; + //purple_debug_info("msim", "msim_check_alive: delta=%d\n", delta); + if (delta >= MSIM_KEEPALIVE_INTERVAL) { + errmsg = g_strdup_printf(_("Connection to server lost (no data received within %d seconds)"), (int)delta); + + purple_debug_info("msim", "msim_check_alive: %s > interval of %d, presumed dead\n", + errmsg, MSIM_KEEPALIVE_INTERVAL); + purple_connection_error(session->gc, errmsg); + + purple_notify_error(session->gc, NULL, errmsg, NULL); + + g_free(errmsg); + + return FALSE; + } + + return TRUE; +} +#endif + +/** Handle mail reply checks. */ +static void +msim_check_inbox_cb(MsimSession *session, MsimMessage *reply, gpointer data) +{ + MsimMessage *body; + GString *notification; + guint old_inbox_status; + guint i, n; + const gchar *froms[5], *tos[5], *urls[5], *subjects[5]; + + /* Information for each new inbox message type. */ + static struct + { + const gchar *key; + guint bit; + const gchar *url; + const gchar *text; + } message_types[] = { + { "Mail", MSIM_INBOX_MAIL, "http://messaging.myspace.com/index.cfm?fuseaction=mail.inbox", NULL }, + { "BlogComment", MSIM_INBOX_BLOG_COMMENT, "http://blog.myspace.com/index.cfm?fuseaction=blog", NULL }, + { "ProfileComment", MSIM_INBOX_PROFILE_COMMENT, "http://home.myspace.com/index.cfm?fuseaction=user", NULL }, + { "FriendRequest", MSIM_INBOX_FRIEND_REQUEST, "http://messaging.myspace.com/index.cfm?fuseaction=mail.friendRequests", NULL }, + { "PictureComment", MSIM_INBOX_PICTURE_COMMENT, "http://home.myspace.com/index.cfm?fuseaction=user", NULL } + }; + + /* Can't write _()'d strings in array initializers. Workaround. */ + message_types[0].text = _("New mail messages"); + message_types[1].text = _("New blog comments"); + message_types[2].text = _("New profile comments"); + message_types[3].text = _("New friend requests!"); + message_types[4].text = _("New picture comments"); + + g_return_if_fail(reply != NULL); + + msim_msg_dump("msim_check_inbox_cb: reply=%s\n", reply); + + body = msim_msg_get_dictionary(reply, "body"); + g_return_if_fail(body != NULL); + + notification = g_string_new(""); + + old_inbox_status = session->inbox_status; + + n = 0; + + for (i = 0; i < sizeof(message_types) / sizeof(message_types[0]); ++i) { + const gchar *key; + guint bit; + + key = message_types[i].key; + bit = message_types[i].bit; + + if (msim_msg_get(body, key)) { + /* Notify only on when _changes_ from no mail -> has mail + * (edge triggered) */ + if (!(session->inbox_status & bit)) { + purple_debug_info("msim", "msim_check_inbox_cb: got %s, at %d\n", + key ? key : "(NULL)", n); + + subjects[n] = message_types[i].text; + froms[n] = _("MySpace"); + tos[n] = session->username; + /* TODO: append token, web challenge, so automatically logs in. + * Would also need to free strings because they won't be static + */ + urls[n] = message_types[i].url; + + ++n; + } else { + purple_debug_info("msim", + "msim_check_inbox_cb: already notified of %s\n", + key ? key : "(NULL)"); + } + + session->inbox_status |= bit; + } + } + + if (n) { + purple_debug_info("msim", + "msim_check_inbox_cb: notifying of %d\n", n); + + /* TODO: free strings with callback _if_ change to dynamic (w/ token) */ + purple_notify_emails(session->gc, /* handle */ + n, /* count */ + TRUE, /* detailed */ + subjects, froms, tos, urls, + NULL, /* PurpleNotifyCloseCallback cb */ + NULL); /* gpointer user_data */ + + } + + msim_msg_free(body); +} + +/* Send request to check if there is new mail. */ +static gboolean +msim_check_inbox(gpointer data) +{ + MsimSession *session; + + session = (MsimSession *)data; + + purple_debug_info("msim", "msim_check_inbox: checking mail\n"); + g_return_val_if_fail(msim_send(session, + "persist", MSIM_TYPE_INTEGER, 1, + "sesskey", MSIM_TYPE_INTEGER, session->sesskey, + "cmd", MSIM_TYPE_INTEGER, MSIM_CMD_GET, + "dsn", MSIM_TYPE_INTEGER, MG_CHECK_MAIL_DSN, + "lid", MSIM_TYPE_INTEGER, MG_CHECK_MAIL_LID, + "uid", MSIM_TYPE_INTEGER, session->userid, + "rid", MSIM_TYPE_INTEGER, + msim_new_reply_callback(session, msim_check_inbox_cb, NULL), + "body", MSIM_TYPE_STRING, g_strdup(""), + NULL), TRUE); + + /* Always return true, so that we keep checking for mail. */ + return TRUE; +} + +/** Called when the session key arrives. */ +static gboolean +msim_we_are_logged_on(MsimSession *session, MsimMessage *msg) +{ + MsimMessage *body; + + g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE); + g_return_val_if_fail(msg != NULL, FALSE); + + session->sesskey = msim_msg_get_integer(msg, "sesskey"); + purple_debug_info("msim", "SESSKEY=<%d>\n", session->sesskey); + + /* What is proof? Used to be uid, but now is 52 base64'd bytes... */ + + /* Comes with: proof,profileid,userid,uniquenick -- all same values + * some of the time, but can vary. This is our own user ID. */ + session->userid = msim_msg_get_integer(msg, "userid"); + + /* Save uid to account so this account can be looked up by uid. */ + purple_account_set_int(session->account, "uid", session->userid); + + /* Not sure what profileid is used for. */ + if (msim_msg_get_integer(msg, "profileid") != session->userid) { + msim_unrecognized(session, msg, + "Profile ID didn't match user ID, don't know why"); + } + + /* We now know are our own username, only after we're logged in.. + * which is weird, but happens because you login with your email + * address and not username. Will be freed in msim_session_destroy(). */ + session->username = msim_msg_get_string(msg, "uniquenick"); + + /* If a local alias wasn't set, set it to user's username. */ + if (!session->account->alias || !strlen(session->account->alias)) + session->account->alias = session->username; + + /* The session is now set up, ready to be connected. This emits the + * signedOn signal, so clients can now do anything with msimprpl, and + * we're ready for it (session key, userid, username all setup). */ + purple_connection_update_progress(session->gc, _("Connected"), 3, 4); + purple_connection_set_state(session->gc, PURPLE_CONNECTED); + + + /* Additional post-connect operations */ + + + if (msim_msg_get_integer(msg, "uniquenick") == session->userid) { + purple_debug_info("msim_we_are_logged_on", "TODO: pick username"); + } + + body = msim_msg_new( + "UserID", MSIM_TYPE_INTEGER, session->userid, + NULL); + + /* Request IM info about ourself. */ + msim_send(session, + "persist", MSIM_TYPE_STRING, g_strdup("persist"), + "sesskey", MSIM_TYPE_INTEGER, session->sesskey, + "dsn", MSIM_TYPE_INTEGER, MG_OWN_MYSPACE_INFO_DSN, + "uid", MSIM_TYPE_INTEGER, session->userid, + "lid", MSIM_TYPE_INTEGER, MG_OWN_MYSPACE_INFO_LID, + "rid", MSIM_TYPE_INTEGER, session->next_rid++, + "body", MSIM_TYPE_DICTIONARY, body, + NULL); + + /* Request MySpace info about ourself. */ + msim_send(session, + "persist", MSIM_TYPE_STRING, g_strdup("persist"), + "sesskey", MSIM_TYPE_INTEGER, session->sesskey, + "dsn", MSIM_TYPE_INTEGER, MG_OWN_IM_INFO_DSN, + "uid", MSIM_TYPE_INTEGER, session->userid, + "lid", MSIM_TYPE_INTEGER, MG_OWN_IM_INFO_LID, + "rid", MSIM_TYPE_INTEGER, session->next_rid++, + "body", MSIM_TYPE_STRING, g_strdup(""), + NULL); + + /* TODO: set options (persist cmd=514,dsn=1,lid=10) */ + /* TODO: set blocklist */ + + /* Notify servers of our current status. */ + purple_debug_info("msim", "msim_we_are_logged_on: notifying servers of status\n"); + msim_set_status(session->account, + purple_account_get_active_status(session->account)); + + /* TODO: setinfo */ + /* + body = msim_msg_new( + "TotalFriends", MSIM_TYPE_INTEGER, 666, + NULL); + msim_send(session, + "setinfo", MSIM_TYPE_BOOLEAN, TRUE, + "sesskey", MSIM_TYPE_INTEGER, session->sesskey, + "info", MSIM_TYPE_DICTIONARY, body, + NULL); + */ + + /* Disable due to problems with timeouts. TODO: fix. */ +#ifdef MSIM_USE_KEEPALIVE + purple_timeout_add(MSIM_KEEPALIVE_INTERVAL_CHECK, + (GSourceFunc)msim_check_alive, session); +#endif + + /* Check mail if they want to. */ + if (purple_account_get_check_mail(session->account)) { + purple_timeout_add(MSIM_MAIL_INTERVAL_CHECK, + (GSourceFunc)msim_check_inbox, session); + msim_check_inbox(session); + } + + msim_get_contact_list(session, MSIM_CONTACT_LIST_INITIAL_FRIENDS); + + return TRUE; +} + +/** + * Process a message. + * + * @param session + * @param msg A message from the server, ready for processing (possibly with resolved username information attached). Caller frees. + * + * @return TRUE if successful. FALSE if processing failed. + */ +static gboolean +msim_process(MsimSession *session, MsimMessage *msg) +{ + g_return_val_if_fail(session != NULL, FALSE); + g_return_val_if_fail(msg != NULL, FALSE); + +#ifdef MSIM_DEBUG_MSG + msim_msg_dump("ready to process: %s\n", msg); +#endif + + if (msim_msg_get_integer(msg, "lc") == 1) { + return msim_login_challenge(session, msg); + } else if (msim_msg_get_integer(msg, "lc") == 2) { + return msim_we_are_logged_on(session, msg); + } else if (msim_msg_get(msg, "bm")) { + return msim_incoming_bm(session, msg); + } else if (msim_msg_get(msg, "rid")) { + return msim_process_reply(session, msg); + } else if (msim_msg_get(msg, "error")) { + return msim_error(session, msg); + } else if (msim_msg_get(msg, "ka")) { + return TRUE; + } else { + msim_unrecognized(session, msg, "in msim_process"); + return FALSE; + } +} + +/** Process the initial server information from the server. */ +static gboolean +msim_process_server_info(MsimSession *session, MsimMessage *msg) +{ + MsimMessage *body; + + body = msim_msg_get_dictionary(msg, "body"); + g_return_val_if_fail(body != NULL, FALSE); + + /* Example body: +AdUnitRefreshInterval=10. +AlertPollInterval=360. +AllowChatRoomEmoticonSharing=False. +ChatRoomUserIDs=78744676;163733130;1300326231;123521495;142663391. +CurClientVersion=673. +EnableIMBrowse=True. +EnableIMStuffAvatars=False. +EnableIMStuffZaps=False. +MaxAddAllFriends=100. +MaxContacts=1000. +MinClientVersion=594. +MySpaceIM_ENGLISH=78744676. +MySpaceNowTimer=720. +PersistenceDataTimeout=900. +UseWebChallenge=1. +WebTicketGoHome=False + + Anything useful? TODO: use what is useful, and use it. +*/ + purple_debug_info("msim_process_server_info", + "maximum contacts: %d\n", + msim_msg_get_integer(body, "MaxContacts")); + + session->server_info = body; + /* session->server_info freed in msim_session_destroy */ + + return TRUE; +} + +/** Process a web challenge, used to login to the web site. */ +static gboolean +msim_web_challenge(MsimSession *session, MsimMessage *msg) +{ + /* TODO: web challenge, store token */ + return FALSE; +} + +/** + * Process a persistance message reply from the server. + * + * @param session + * @param msg Message reply from server. + * + * @return TRUE if successful. + * + * msim_lookup_user sets callback for here + */ +static gboolean +msim_process_reply(MsimSession *session, MsimMessage *msg) +{ + MSIM_USER_LOOKUP_CB cb; + gpointer data; + guint rid, cmd, dsn, lid; + + g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE); + g_return_val_if_fail(msg != NULL, FALSE); + + msim_store_user_info(session, msg, NULL); + + rid = msim_msg_get_integer(msg, "rid"); + cmd = msim_msg_get_integer(msg, "cmd"); + dsn = msim_msg_get_integer(msg, "dsn"); + lid = msim_msg_get_integer(msg, "lid"); + + /* Unsolicited messages */ + if (cmd == (MSIM_CMD_BIT_REPLY | MSIM_CMD_GET)) { + if (dsn == MG_SERVER_INFO_DSN && lid == MG_SERVER_INFO_LID) { + return msim_process_server_info(session, msg); + } else if (dsn == MG_WEB_CHALLENGE_DSN && lid == MG_WEB_CHALLENGE_LID) { + return msim_web_challenge(session, msg); + } + } + + /* If a callback is registered for this userid lookup, call it. */ + cb = g_hash_table_lookup(session->user_lookup_cb, GUINT_TO_POINTER(rid)); + data = g_hash_table_lookup(session->user_lookup_cb_data, GUINT_TO_POINTER(rid)); + + if (cb) { + purple_debug_info("msim", "msim_process_reply: calling callback now\n"); + msim_msg_dump("for msg=%s\n", msg); + /* Clone message, so that the callback 'cb' can use it (needs to free it also). */ + cb(session, msim_msg_clone(msg), data); + g_hash_table_remove(session->user_lookup_cb, GUINT_TO_POINTER(rid)); + g_hash_table_remove(session->user_lookup_cb_data, GUINT_TO_POINTER(rid)); + } else { + purple_debug_info("msim", + "msim_process_reply: no callback for rid %d\n", rid); + } + + return TRUE; +} + +/** + * Handle an error from the server. + * + * @param session + * @param msg The message. + * + * @return TRUE if successfully reported error. + */ +static gboolean +msim_error(MsimSession *session, MsimMessage *msg) +{ + gchar *errmsg, *full_errmsg; + guint err; + + g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE); + g_return_val_if_fail(msg != NULL, FALSE); + + err = msim_msg_get_integer(msg, "err"); + errmsg = msim_msg_get_string(msg, "errmsg"); + + full_errmsg = g_strdup_printf(_("Protocol error, code %d: %s"), err, + errmsg ? errmsg : "no 'errmsg' given"); + + g_free(errmsg); + + purple_debug_info("msim", "msim_error (sesskey=%d): %s\n", + session->sesskey, full_errmsg); + + purple_notify_error(session->account, g_strdup(_("MySpaceIM Error")), + full_errmsg, NULL); + + /* Destroy session if fatal. */ + if (msim_msg_get(msg, "fatal")) { + purple_debug_info("msim", "fatal error, closing\n"); + purple_connection_error(session->gc, full_errmsg); + } + + return TRUE; +} + +/** + * Process incoming status messages. + * + * @param session + * @param msg Status update message. Caller frees. + * + * @return TRUE if successful. + */ +static gboolean +msim_incoming_status(MsimSession *session, MsimMessage *msg) +{ + PurpleBuddyList *blist; + MsimUser *user; + GList *list; + gchar *status_headline; + gint status_code, purple_status_code; + gchar *username; + + g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE); + g_return_val_if_fail(msg != NULL, FALSE); + + msim_msg_dump("msim_status msg=%s\n", msg); + + /* Helpfully looked up by msim_incoming_resolve() for us. */ + username = msim_msg_get_string(msg, "_username"); + g_return_val_if_fail(username != NULL, FALSE); + + { + gchar *ss; + + ss = msim_msg_get_string(msg, "msg"); + purple_debug_info("msim", + "msim_status: updating status for <%s> to <%s>\n", + username, ss ? ss : "(NULL)"); + g_free(ss); + } + + /* Example fields: + * |s|0|ss|Offline + * |s|1|ss|:-)|ls||ip|0|p|0 + */ + list = msim_msg_get_list(msg, "msg"); + + status_code = msim_msg_get_integer_from_element(g_list_nth_data(list, MSIM_STATUS_ORDINAL_ONLINE)); + purple_debug_info("msim", "msim_status: %s's status code = %d\n", username, status_code); + status_headline = msim_msg_get_string_from_element(g_list_nth_data(list, MSIM_STATUS_ORDINAL_HEADLINE)); + + blist = purple_get_blist(); + + /* Add buddy if not found */ + user = msim_find_user(session, username); + if (!user) { + PurpleBuddy *buddy; + + purple_debug_info("msim", + "msim_status: making new buddy for %s\n", username); + buddy = purple_buddy_new(session->account, username, NULL); + purple_blist_add_buddy(buddy, NULL, NULL, NULL); + + user = msim_get_user_from_buddy(buddy); + + /* All buddies on list should have 'uid' integer associated with them. */ + purple_blist_node_set_int(&buddy->node, "UserID", msim_msg_get_integer(msg, "f")); + + msim_store_user_info(session, msg, NULL); + } else { + purple_debug_info("msim", "msim_status: found buddy %s\n", username); + } + + /* don't copy; let the MsimUser own the headline, memory-wise */ + user->headline = status_headline; + + /* Set user status */ + switch (status_code) { + case MSIM_STATUS_CODE_OFFLINE_OR_HIDDEN: + purple_status_code = PURPLE_STATUS_OFFLINE; + break; + + case MSIM_STATUS_CODE_ONLINE: + purple_status_code = PURPLE_STATUS_AVAILABLE; + break; + + case MSIM_STATUS_CODE_AWAY: + purple_status_code = PURPLE_STATUS_AWAY; + break; + + case MSIM_STATUS_CODE_IDLE: + /* will be handled below */ + purple_status_code = -1; + break; + + default: + purple_debug_info("msim", "msim_status for %s, unknown status code %d, treating as available\n", + username, status_code); + purple_status_code = PURPLE_STATUS_AVAILABLE; + } + + purple_prpl_got_user_status(session->account, username, purple_primitive_get_id_from_type(purple_status_code), NULL); + + if (status_code == MSIM_STATUS_CODE_IDLE) { + purple_debug_info("msim", "msim_status: got idle: %s\n", username); + purple_prpl_got_user_idle(session->account, username, TRUE, time(NULL)); + } else { + /* All other statuses indicate going back to non-idle. */ + purple_prpl_got_user_idle(session->account, username, FALSE, time(NULL)); + } + +#ifdef MSIM_SEND_CLIENT_VERSION + if (status_code == MSIM_STATUS_CODE_ONLINE) { + /* Secretly whisper to unofficial clients our own version as they come online */ + msim_send_unofficial_client(session, username); + } +#endif + + if (status_code != MSIM_STATUS_CODE_OFFLINE_OR_HIDDEN) { + /* Get information when they come online. + * TODO: periodically refresh? + */ + purple_debug_info("msim_incoming_status", "%s came online, looking up\n", username); + msim_lookup_user(session, username, NULL, NULL); + } + + g_free(username); + msim_msg_list_free(list); + + return TRUE; +} + +/** Add a buddy to user's buddy list. */ +void +msim_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) +{ + MsimSession *session; + MsimMessage *msg; + /* MsimMessage *msg_persist; */ + MsimMessage *body; + + session = (MsimSession *)gc->proto_data; + purple_debug_info("msim", "msim_add_buddy: want to add %s to %s\n", + buddy->name, (group && group->name) ? group->name : "(no group)"); + + msg = msim_msg_new( + "addbuddy", MSIM_TYPE_BOOLEAN, TRUE, + "sesskey", MSIM_TYPE_INTEGER, session->sesskey, + /* "newprofileid" will be inserted here with uid. */ + "reason", MSIM_TYPE_STRING, g_strdup(""), + NULL); + + if (!msim_postprocess_outgoing(session, msg, buddy->name, "newprofileid", "reason")) { + purple_notify_error(NULL, NULL, _("Failed to add buddy"), _("'addbuddy' command failed.")); + msim_msg_free(msg); + return; + } + msim_msg_free(msg); + + /* TODO: if addbuddy fails ('error' message is returned), delete added buddy from + * buddy list since Purple adds it locally. */ + + body = msim_msg_new( + "ContactID", MSIM_TYPE_STRING, g_strdup("<uid>"), + "GroupName", MSIM_TYPE_STRING, g_strdup(group->name), + "Position", MSIM_TYPE_INTEGER, 1000, + "Visibility", MSIM_TYPE_INTEGER, 1, + "NickName", MSIM_TYPE_STRING, g_strdup(""), + "NameSelect", MSIM_TYPE_INTEGER, 0, + NULL); + + /* TODO: Update blocklist. */ + +#if 0 + msg_persist = msim_msg_new( + "persist", MSIM_TYPE_INTEGER, 1, + "sesskey", MSIM_TYPE_INTEGER, session->sesskey, + "cmd", MSIM_TYPE_INTEGER, MSIM_CMD_BIT_ACTION | MSIM_CMD_PUT, + "dsn", MSIM_TYPE_INTEGER, MC_CONTACT_INFO_DSN, + "lid", MSIM_TYPE_INTEGER, MC_CONTACT_INFO_LID, + /* TODO: Use msim_new_reply_callback to get rid. */ + "rid", MSIM_TYPE_INTEGER, session->next_rid++, + "body", MSIM_TYPE_DICTIONARY, body, + NULL); + + if (!msim_postprocess_outgoing(session, msg_persist, buddy->name, "body", NULL)) + { + purple_notify_error(NULL, NULL, _("Failed to add buddy"), _("persist command failed")); + msim_msg_free(msg_persist); + return; + } + msim_msg_free(msg_persist); +#endif + +} + +/** Perform actual postprocessing on a message, adding userid as specified. + * + * @param msg The message to postprocess. + * @param uid_before Name of field where to insert new field before, or NULL for end. + * @param uid_field_name Name of field to add uid to. + * @param uid The userid to insert. + * + * If the field named by uid_field_name already exists, then its string contents will + * be used for the field, except "<uid>" will be replaced by the userid. + * + * If the field named by uid_field_name does not exist, it will be added before the + * field named by uid_before, as an integer, with the userid. + * + * Does not handle sending, or scheduling userid lookup. For that, see msim_postprocess_outgoing(). + */ +static MsimMessage * +msim_do_postprocessing(MsimMessage *msg, const gchar *uid_before, + const gchar *uid_field_name, guint uid) +{ + msim_msg_dump("msim_do_postprocessing msg: %s\n", msg); + + /* First, check - if the field already exists, replace <uid> within it */ + if (msim_msg_get(msg, uid_field_name)) { + MsimMessageElement *elem; + gchar *fmt_string; + gchar *uid_str, *new_str; + + /* Warning: this is a delicate, but safe, operation */ + + elem = msim_msg_get(msg, uid_field_name); + + /* Get the packed element, flattening it. This allows <uid> to be + * replaced within nested data structures, since the replacement is done + * on the linear, packed data, not on a complicated data structure. + * + * For example, if the field was originally a dictionary or a list, you + * would have to iterate over all the items in it to see what needs to + * be replaced. But by packing it first, the <uid> marker is easily replaced + * just by a string replacement. + */ + fmt_string = msim_msg_pack_element_data(elem); + + uid_str = g_strdup_printf("%d", uid); + new_str = purple_strreplace(fmt_string, "<uid>", uid_str); + g_free(uid_str); + g_free(fmt_string); + + /* Free the old element data */ + msim_msg_free_element_data(elem->data); + + /* Replace it with our new data */ + elem->data = new_str; + elem->type = MSIM_TYPE_RAW; + + } else { + /* Otherwise, insert new field into outgoing message. */ + msg = msim_msg_insert_before(msg, uid_before, uid_field_name, MSIM_TYPE_INTEGER, GUINT_TO_POINTER(uid)); + } + + msim_msg_dump("msim_postprocess_outgoing_cb: postprocessed msg=%s\n", msg); + + return msg; +} + +/** Callback for msim_postprocess_outgoing() to add a userid to a message, and send it (once receiving userid). + * + * @param session + * @param userinfo The user information reply message, containing the user ID + * @param data The message to postprocess and send. + * + * The data message should contain these fields: + * + * _uid_field_name: string, name of field to add with userid from userinfo message + * _uid_before: string, name of field before field to insert, or NULL for end + * + * +*/ +static void +msim_postprocess_outgoing_cb(MsimSession *session, MsimMessage *userinfo, + gpointer data) +{ + gchar *uid_field_name, *uid_before, *username; + guint uid; + MsimMessage *msg, *body; + + msg = (MsimMessage *)data; + + msim_msg_dump("msim_postprocess_outgoing_cb() got msg=%s\n", msg); + + /* Obtain userid from userinfo message. */ + body = msim_msg_get_dictionary(userinfo, "body"); + g_return_if_fail(body != NULL); + + uid = msim_msg_get_integer(body, "UserID"); + msim_msg_free(body); + + username = msim_msg_get_string(msg, "_username"); + + if (!uid) { + gchar *msg; + + msg = g_strdup_printf(_("No such user: %s"), username); + purple_notify_error(NULL, NULL, _("User lookup"), msg); + g_free(msg); + g_free(username); + //msim_msg_free(msg); + return; + } + + uid_field_name = msim_msg_get_string(msg, "_uid_field_name"); + uid_before = msim_msg_get_string(msg, "_uid_before"); + + msg = msim_do_postprocessing(msg, uid_before, uid_field_name, uid); + + /* Send */ + if (!msim_msg_send(session, msg)) { + msim_msg_dump("msim_postprocess_outgoing_cb: sending failed for message: %s\n", msg); + } + + + /* Free field names AFTER sending message, because MsimMessage does NOT copy + * field names - instead, treats them as static strings (which they usually are). + */ + g_free(uid_field_name); + g_free(uid_before); + g_free(username); + //msim_msg_free(msg); +} + +/** Postprocess and send a message. + * + * @param session + * @param msg Message to postprocess. Will NOT be freed. + * @param username Username to resolve. Assumed to be a static string (will not be freed or copied). + * @param uid_field_name Name of new field to add, containing uid of username. Static string. + * @param uid_before Name of existing field to insert username field before. Static string. + * + * @return TRUE if successful. + */ +gboolean +msim_postprocess_outgoing(MsimSession *session, MsimMessage *msg, + const gchar *username, const gchar *uid_field_name, + const gchar *uid_before) +{ + PurpleBuddy *buddy; + guint uid; + gboolean rc; + + g_return_val_if_fail(msg != NULL, FALSE); + + /* Store information for msim_postprocess_outgoing_cb(). */ + msim_msg_dump("msim_postprocess_outgoing: msg before=%s\n", msg); + msg = msim_msg_append(msg, "_username", MSIM_TYPE_STRING, g_strdup(username)); + msg = msim_msg_append(msg, "_uid_field_name", MSIM_TYPE_STRING, g_strdup(uid_field_name)); + msg = msim_msg_append(msg, "_uid_before", MSIM_TYPE_STRING, g_strdup(uid_before)); + + /* First, try the most obvious. If numeric userid is given, use that directly. */ + if (msim_is_userid(username)) { + uid = atol(username); + } else { + /* Next, see if on buddy list and know uid. */ + buddy = purple_find_buddy(session->account, username); + if (buddy) { + uid = purple_blist_node_get_int(&buddy->node, "UserID"); + } else { + uid = 0; + } + + if (!buddy || !uid) + { + /* Don't have uid offhand - need to ask for it, and wait until hear back before sending. */ + purple_debug_info("msim", ">>> msim_postprocess_outgoing: couldn't find username %s in blist\n", + username ? username : "(NULL)"); + msim_msg_dump("msim_postprocess_outgoing - scheduling lookup, msg=%s\n", msg); + /* TODO: where is cloned message freed? Should be in _cb. */ + msim_lookup_user(session, username, msim_postprocess_outgoing_cb, msim_msg_clone(msg)); + return TRUE; /* not sure of status yet - haven't sent! */ + } + } + + /* Already have uid, postprocess and send msg immediately. */ + purple_debug_info("msim", "msim_postprocess_outgoing: found username %s has uid %d\n", + username ? username : "(NULL)", uid); + + msg = msim_do_postprocessing(msg, uid_before, uid_field_name, uid); + + msim_msg_dump("msim_postprocess_outgoing: msg after (uid immediate)=%s\n", msg); + + rc = msim_msg_send(session, msg); + + //msim_msg_free(msg); + + return rc; +} + +/** Remove a buddy from the user's buddy list. */ +void +msim_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) +{ + MsimSession *session; + MsimMessage *delbuddy_msg; + MsimMessage *persist_msg; + MsimMessage *blocklist_msg; + GList *blocklist_updates; + + session = (MsimSession *)gc->proto_data; + + delbuddy_msg = msim_msg_new( + "delbuddy", MSIM_TYPE_BOOLEAN, TRUE, + "sesskey", MSIM_TYPE_INTEGER, session->sesskey, + /* 'delprofileid' with uid will be inserted here. */ + NULL); + + if (!msim_postprocess_outgoing(session, delbuddy_msg, buddy->name, "delprofileid", NULL)) { + purple_notify_error(NULL, NULL, _("Failed to remove buddy"), _("'delbuddy' command failed")); + msim_msg_free(delbuddy_msg); + return; + } + msim_msg_free(delbuddy_msg); + + persist_msg = msim_msg_new( + "persist", MSIM_TYPE_INTEGER, 1, + "sesskey", MSIM_TYPE_INTEGER, session->sesskey, + "cmd", MSIM_TYPE_INTEGER, MSIM_CMD_BIT_ACTION | MSIM_CMD_DELETE, + "dsn", MSIM_TYPE_INTEGER, MD_DELETE_BUDDY_DSN, + "lid", MSIM_TYPE_INTEGER, MD_DELETE_BUDDY_LID, + "uid", MSIM_TYPE_INTEGER, session->userid, + "rid", MSIM_TYPE_INTEGER, session->next_rid++, + /* <uid> will be replaced by postprocessing */ + "body", MSIM_TYPE_STRING, g_strdup("ContactID=<uid>"), + NULL); + + if (!msim_postprocess_outgoing(session, persist_msg, buddy->name, "body", NULL)) { + purple_notify_error(NULL, NULL, _("Failed to remove buddy"), _("persist command failed")); + msim_msg_free(persist_msg); + return; + } + msim_msg_free(persist_msg); + + blocklist_updates = NULL; + blocklist_updates = g_list_prepend(blocklist_updates, "a-"); + blocklist_updates = g_list_prepend(blocklist_updates, "<uid>"); + blocklist_updates = g_list_prepend(blocklist_updates, "b-"); + blocklist_updates = g_list_prepend(blocklist_updates, "<uid>"); + blocklist_updates = g_list_reverse(blocklist_updates); + + blocklist_msg = msim_msg_new( + "blocklist", MSIM_TYPE_BOOLEAN, TRUE, + "sesskey", MSIM_TYPE_INTEGER, session->sesskey, + /* TODO: MsimMessage lists. Currently <uid> isn't replaced in lists. */ + //"idlist", MSIM_TYPE_STRING, g_strdup("a-|<uid>|b-|<uid>"), + "idlist", MSIM_TYPE_LIST, blocklist_updates, + NULL); + + if (!msim_postprocess_outgoing(session, blocklist_msg, buddy->name, "idlist", NULL)) { + purple_notify_error(NULL, NULL, _("Failed to remove buddy"), _("blocklist command failed")); + msim_msg_free(blocklist_msg); + return; + } + msim_msg_free(blocklist_msg); +} + +/** Return whether the buddy can be messaged while offline. + * + * The protocol supports offline messages in just the same way as online + * messages. + */ +gboolean +msim_offline_message(const PurpleBuddy *buddy) +{ + return TRUE; +} + +/** + * Callback when input available. + * + * @param gc_uncasted A PurpleConnection pointer. + * @param source File descriptor. + * @param cond PURPLE_INPUT_READ + * + * Reads the input, and calls msim_preprocess_incoming() to handle it. + */ +static void +msim_input_cb(gpointer gc_uncasted, gint source, PurpleInputCondition cond) +{ + PurpleConnection *gc; + PurpleAccount *account; + MsimSession *session; + gchar *end; + int n; + + g_return_if_fail(gc_uncasted != NULL); + g_return_if_fail(source >= 0); /* Note: 0 is a valid fd */ + + gc = (PurpleConnection *)(gc_uncasted); + account = purple_connection_get_account(gc); + session = gc->proto_data; + + /* libpurple/eventloop.h only defines these two */ + if (cond != PURPLE_INPUT_READ && cond != PURPLE_INPUT_WRITE) { + purple_debug_info("msim_input_cb", "unknown condition=%d\n", cond); + purple_connection_error(gc, _("Invalid input condition")); + return; + } + + g_return_if_fail(cond == PURPLE_INPUT_READ); + g_return_if_fail(MSIM_SESSION_VALID(session)); + + /* Mark down that we got data, so don't timeout. */ + session->last_comm = time(NULL); + + /* Only can handle so much data at once... + * If this happens, try recompiling with a higher MSIM_READ_BUF_SIZE. + * Should be large enough to hold the largest protocol message. + */ + if (session->rxoff >= MSIM_READ_BUF_SIZE) { + purple_debug_error("msim", + "msim_input_cb: %d-byte read buffer full! rxoff=%d\n", + MSIM_READ_BUF_SIZE, session->rxoff); + purple_connection_error(gc, _("Read buffer full")); + return; + } + + purple_debug_info("msim", "buffer at %d (max %d), reading up to %d\n", + session->rxoff, MSIM_READ_BUF_SIZE, + MSIM_READ_BUF_SIZE - session->rxoff); + + /* Read into buffer. On Win32, need recv() not read(). session->fd also holds + * the file descriptor, but it sometimes differs from the 'source' parameter. + */ + n = recv(session->fd, session->rxbuf + session->rxoff, MSIM_READ_BUF_SIZE - session->rxoff, 0); + + if (n < 0 && errno == EAGAIN) { + return; + } else if (n < 0) { + purple_debug_error("msim", "msim_input_cb: read error, ret=%d, " + "error=%s, source=%d, fd=%d (%X))\n", + n, strerror(errno), source, session->fd, session->fd); + purple_connection_error(gc, _("Read error")); + return; + } else if (n == 0) { + purple_debug_info("msim", "msim_input_cb: server disconnected\n"); + purple_connection_error(gc, _("Server has disconnected")); + return; + } + + if (n + session->rxoff >= MSIM_READ_BUF_SIZE) { + purple_debug_info("msim_input_cb", "received %d bytes, pushing rxoff to %d, over buffer size of %d\n", + n, n + session->rxoff, MSIM_READ_BUF_SIZE); + /* TODO: g_realloc like msn, yahoo, irc, jabber? */ + purple_connection_error(gc, _("Read buffer full")); + } + + /* Null terminate */ + purple_debug_info("msim", "msim_input_cb: going to null terminate " + "at n=%d\n", n); + session->rxbuf[session->rxoff + n] = 0; + +#ifdef MSIM_CHECK_EMBEDDED_NULLS + /* Check for embedded NULs. I don't handle them, and they shouldn't occur. */ + if (strlen(session->rxbuf + session->rxoff) != n) { + /* Occurs after login, but it is not a null byte. */ + purple_debug_info("msim", "msim_input_cb: strlen=%d, but read %d bytes" + "--null byte encountered?\n", + strlen(session->rxbuf + session->rxoff), n); + //purple_connection_error(gc, "Invalid message - null byte on input"); + return; + } +#endif + + session->rxoff += n; + purple_debug_info("msim", "msim_input_cb: read=%d\n", n); + +#ifdef MSIM_DEBUG_RXBUF + purple_debug_info("msim", "buf=<%s>\n", session->rxbuf); +#endif + + /* Look for \\final\\ end markers. If found, process message. */ + while((end = strstr(session->rxbuf, MSIM_FINAL_STRING))) { + MsimMessage *msg; + +#ifdef MSIM_DEBUG_RXBUF + purple_debug_info("msim", "in loop: buf=<%s>\n", session->rxbuf); +#endif + *end = 0; + msg = msim_parse(g_strdup(session->rxbuf)); + if (!msg) { + purple_debug_info("msim", "msim_input_cb: couldn't parse rxbuf\n"); + purple_connection_error(gc, _("Unparseable message")); + } else { + /* Process message and then free it (processing function should + * clone message if it wants to keep it afterwards.) */ + if (!msim_preprocess_incoming(session, msg)) { + msim_msg_dump("msim_input_cb: preprocessing message failed on msg: %s\n", msg); + } + msim_msg_free(msg); + } + + /* Move remaining part of buffer to beginning. */ + session->rxoff -= strlen(session->rxbuf) + strlen(MSIM_FINAL_STRING); + memmove(session->rxbuf, end + strlen(MSIM_FINAL_STRING), + MSIM_READ_BUF_SIZE - (end + strlen(MSIM_FINAL_STRING) - session->rxbuf)); + + /* Clear end of buffer */ + //memset(end, 0, MSIM_READ_BUF_SIZE - (end - session->rxbuf)); + } +} + +/* Setup a callback, to be called when a reply is received with the returned rid. + * + * @param cb The callback, an MSIM_USER_LOOKUP_CB. + * @param data Arbitrary user data to be passed to callback (probably an MsimMessage *). + * + * @return The request/reply ID, used to link replies with requests, or -1. + * Put the rid in your request, 'rid' field. + * + * TODO: Make more generic and more specific: + * 1) MSIM_USER_LOOKUP_CB - make it for PERSIST_REPLY, not just user lookup + * 2) data - make it an MsimMessage? + */ +guint +msim_new_reply_callback(MsimSession *session, MSIM_USER_LOOKUP_CB cb, + gpointer data) +{ + guint rid; + + g_return_val_if_fail(MSIM_SESSION_VALID(session), -1); + + rid = session->next_rid++; + + g_hash_table_insert(session->user_lookup_cb, GUINT_TO_POINTER(rid), cb); + g_hash_table_insert(session->user_lookup_cb_data, GUINT_TO_POINTER(rid), data); + + return rid; +} + +/** + * Callback when connected. Sets up input handlers. + * + * @param data A PurpleConnection pointer. + * @param source File descriptor. + * @param error_message + */ +static void +msim_connect_cb(gpointer data, gint source, const gchar *error_message) +{ + PurpleConnection *gc; + MsimSession *session; + + g_return_if_fail(data != NULL); + + gc = (PurpleConnection *)data; + session = (MsimSession *)gc->proto_data; + + if (source < 0) { + purple_connection_error(gc, _("Couldn't connect to host")); + purple_connection_error(gc, g_strdup_printf( + _("Couldn't connect to host: %s (%d)"), + error_message ? error_message : "no message given", + source)); + return; + } + + session->fd = source; + + gc->inpa = purple_input_add(source, PURPLE_INPUT_READ, msim_input_cb, gc); +} + + +/** + * Close the connection. + * + * @param gc The connection. + */ +void +msim_close(PurpleConnection *gc) +{ + MsimSession *session; + + if (gc == NULL) { + return; + } + + session = (MsimSession *)gc->proto_data; + if (session == NULL) + return; + + gc->proto_data = NULL; + + if (!MSIM_SESSION_VALID(session)) { + return; + } + + if (session->gc->inpa) { + purple_input_remove(session->gc->inpa); + } + + msim_session_destroy(session); +} + + +/** + * Obtain the status text for a buddy. + * + * @param buddy The buddy to obtain status text for. + * + * @return Status text, or NULL if error. Caller g_free()'s. + * + */ +char * +msim_status_text(PurpleBuddy *buddy) +{ + MsimSession *session; + MsimUser *user; + const gchar *display_name, *headline; + + g_return_val_if_fail(buddy != NULL, NULL); + + user = msim_get_user_from_buddy(buddy); + + session = (MsimSession *)buddy->account->gc->proto_data; + g_return_val_if_fail(MSIM_SESSION_VALID(session), NULL); + + display_name = headline = NULL; + + /* Retrieve display name and/or headline, depending on user preference. */ + if (purple_account_get_bool(session->account, "show_display_name", TRUE)) { + display_name = user->display_name; + } + + if (purple_account_get_bool(session->account, "show_headline", FALSE)) { + headline = user->headline; + } + + /* Return appropriate combination of display name and/or headline, or neither. */ + + if (display_name && headline) { + return g_strconcat(display_name, " ", headline, NULL); + } else if (display_name) { + return g_strdup(display_name); + } else if (headline) { + return g_strdup(headline); + } + + return NULL; +} + +/** + * Obtain the tooltip text for a buddy. + * + * @param buddy Buddy to obtain tooltip text on. + * @param user_info Variable modified to have the tooltip text. + * @param full TRUE if should obtain full tooltip text. + * + */ +void +msim_tooltip_text(PurpleBuddy *buddy, PurpleNotifyUserInfo *user_info, + gboolean full) +{ + MsimUser *user; + + g_return_if_fail(buddy != NULL); + g_return_if_fail(user_info != NULL); + + user = msim_get_user_from_buddy(buddy); + + if (PURPLE_BUDDY_IS_ONLINE(buddy)) { + MsimSession *session; + + session = (MsimSession *)buddy->account->gc->proto_data; + + g_return_if_fail(MSIM_SESSION_VALID(session)); + + /* TODO: if (full), do something different? */ + + /* TODO: request information? have to figure out how to do + * the asynchronous lookup like oscar does (tooltip shows + * 'retrieving...' if not yet available, then changes when it is). + * + * Right now, only show what we have on hand. + */ + + /* Show abbreviated user info. */ + msim_append_user_info(session, user_info, user, FALSE); + } +} + +/** Add contact from server to buddy list, after looking up username. + * Callback from msim_add_contact_from_server(). + * + * @param data An MsimMessage * of the contact information. Will be freed. + */ +static void +msim_add_contact_from_server_cb(MsimSession *session, MsimMessage *user_lookup_info, gpointer data) +{ + MsimMessage *contact_info, *user_lookup_info_body; + PurpleGroup *group; + PurpleBuddy *buddy; + MsimUser *user; + gchar *username, *group_name; + guint uid; + + contact_info = (MsimMessage *)data; + purple_debug_info("msim_add_contact_from_server_cb", "contact_info addr=%X\n", contact_info); + uid = msim_msg_get_integer(contact_info, "ContactID"); + + if (!user_lookup_info) { + username = g_strdup(msim_uid2username_from_blist(session, uid)); + g_return_if_fail(username != NULL); + } else { + user_lookup_info_body = msim_msg_get_dictionary(user_lookup_info, "body"); + username = msim_msg_get_string(user_lookup_info_body, "UserName"); + msim_msg_free(user_lookup_info_body); + g_return_if_fail(username != NULL); + } + + purple_debug_info("msim_add_contact_from_server_cb", + "*** about to add/update username=%s\n", username); + + /* 1. Creates a new group, or gets existing group if it exists (or so + * the documentation claims). */ + group_name = msim_msg_get_string(contact_info, "GroupName"); + if (group_name) { + group = purple_group_new(group_name); + purple_debug_info("msim_add_contact_from_server_cb", + "adding to GroupName: %s\n", group_name); + g_free(group_name); + } else { + group = purple_group_new(_("IM Friends")); + } + + /* 2. Get or create buddy */ + buddy = purple_find_buddy(session->account, username); + if (!buddy) { + purple_debug_info("msim_add_contact_from_server_cb", + "creating new buddy: %s\n", username); + buddy = purple_buddy_new(session->account, username, NULL); + } + + /* Add group to beginning. See #2752. */ + purple_blist_add_group(group, NULL); + + /* TODO: use 'Position' in contact_info to take into account where buddy is */ + purple_blist_add_buddy(buddy, NULL, group, NULL /* insertion point */); + + /* 3. Update buddy information */ + user = msim_get_user_from_buddy(buddy); + + /* All buddies on list should have 'uid' integer associated with them. */ + purple_blist_node_set_int(&buddy->node, "UserID", uid); + + /* Stores a few fields in the MsimUser, relevant to the buddy itself. + * AvatarURL, Headline, ContactID. */ + msim_store_user_info(session, contact_info, NULL); + + /* TODO: other fields, store in 'user' */ + + msim_msg_free(contact_info); +} + +/** Add first ContactID in contact_info to buddy's list. Used to add + * server-side buddies to client-side list. + * + * @return TRUE if added. + * */ +static gboolean +msim_add_contact_from_server(MsimSession *session, MsimMessage *contact_info) +{ + guint uid; + const gchar *username; + + uid = msim_msg_get_integer(contact_info, "ContactID"); + g_return_val_if_fail(uid != 0, FALSE); + + /* Lookup the username, since NickName and IMName is unreliable */ + username = msim_uid2username_from_blist(session, uid); + if (!username) { + gchar *uid_str; + + uid_str = g_strdup_printf("%d", uid); + purple_debug_info("msim_add_contact_from_server", + "contact_info addr=%X\n", contact_info); + msim_lookup_user(session, uid_str, msim_add_contact_from_server_cb, (gpointer)msim_msg_clone(contact_info)); + g_free(uid_str); + } else { + msim_add_contact_from_server_cb(session, NULL, (gpointer)msim_msg_clone(contact_info)); + } + + /* Say that the contact was added, even if we're still looking up + * their username. */ + return TRUE; +} + +/** Called when contact list is received from server. */ +static void +msim_got_contact_list(MsimSession *session, MsimMessage *reply, gpointer user_data) +{ + MsimMessage *body, *body_node; + gchar *msg; + guint buddy_count; + + msim_msg_dump("msim_got_contact_list: reply=%s", reply); + + body = msim_msg_get_dictionary(reply, "body"); + g_return_if_fail(body != NULL); + + buddy_count = 0; + + for (body_node = body; + body_node != NULL; + body_node = msim_msg_get_next_element_node(body_node)) + { + MsimMessageElement *elem; + + elem = (MsimMessageElement *)body_node->data; + + if (g_str_equal(elem->name, "ContactID")) + { + /* Will look for first contact in body_node */ + if (msim_add_contact_from_server(session, body_node)) { + ++buddy_count; + } + } + } + + switch (GPOINTER_TO_UINT(user_data)) { + case MSIM_CONTACT_LIST_IMPORT_ALL_FRIENDS: + msg = g_strdup_printf(_("%d buddies were added or updated"), buddy_count); + purple_notify_info(session->account, _("Add contacts from server"), msg, NULL); + g_free(msg); + break; + + case MSIM_CONTACT_LIST_IMPORT_TOP_FRIENDS: + /* TODO */ + break; + + case MSIM_CONTACT_LIST_INITIAL_FRIENDS: + /* Nothing */ + break; + } + + msim_msg_free(body); +} + +/* Get contact list, calling msim_got_contact_list() with what_to_do_after as user_data gpointer. */ +static gboolean +msim_get_contact_list(MsimSession *session, int what_to_do_after) +{ + return msim_send(session, + "persist", MSIM_TYPE_INTEGER, 1, + "sesskey", MSIM_TYPE_INTEGER, session->sesskey, + "cmd", MSIM_TYPE_INTEGER, MSIM_CMD_GET, + "dsn", MSIM_TYPE_INTEGER, MG_LIST_ALL_CONTACTS_DSN, + "lid", MSIM_TYPE_INTEGER, MG_LIST_ALL_CONTACTS_LID, + "uid", MSIM_TYPE_INTEGER, session->userid, + "rid", MSIM_TYPE_INTEGER, + msim_new_reply_callback(session, msim_got_contact_list, GUINT_TO_POINTER(what_to_do_after)), + "body", MSIM_TYPE_STRING, g_strdup(""), + NULL); +} + + +/** Called when friends have been imported to buddy list on server. */ +static void +msim_import_friends_cb(MsimSession *session, MsimMessage *reply, gpointer user_data) +{ + MsimMessage *body; + gchar *completed; + msim_msg_dump("msim_import_friends_cb=%s", reply); + + /* Check if the friends were imported successfully. */ + body = msim_msg_get_dictionary(reply, "body"); + g_return_if_fail(body != NULL); + completed = msim_msg_get_string(body, "Completed"); + g_return_if_fail(body != NULL); + msim_msg_free(body); + if (!g_str_equal(completed, "True")) + { + purple_debug_info("msim_import_friends_cb", + "failed to import friends: %s", completed); + purple_notify_error(session->account, _("Add friends from MySpace.com"), + _("Importing friends failed"), NULL); + g_free(completed); + return; + } + g_free(completed); + + purple_debug_info("msim_import_friends_cb", + "added friends to server-side buddy list, requesting new contacts from server"); + + msim_get_contact_list(session, MSIM_CONTACT_LIST_IMPORT_ALL_FRIENDS); + + /* TODO: show, X friends have been added */ +} + +/** Import friends from myspace.com. */ +static void msim_import_friends(PurplePluginAction *action) +{ + PurpleConnection *gc; + MsimSession *session; + gchar *group_name; + + gc = (PurpleConnection *)action->context; + session = (MsimSession *)gc->proto_data; + + group_name = "MySpace Friends"; + + g_return_if_fail(msim_send(session, + "persist", MSIM_TYPE_INTEGER, 1, + "sesskey", MSIM_TYPE_INTEGER, session->sesskey, + "cmd", MSIM_TYPE_INTEGER, MSIM_CMD_PUT, + "dsn", MSIM_TYPE_INTEGER, MC_IMPORT_ALL_FRIENDS_DSN, + "lid", MSIM_TYPE_INTEGER, MC_IMPORT_ALL_FRIENDS_LID, + "uid", MSIM_TYPE_INTEGER, session->userid, + "rid", MSIM_TYPE_INTEGER, + msim_new_reply_callback(session, msim_import_friends_cb, NULL), + "body", MSIM_TYPE_STRING, + g_strdup_printf("GroupName=%s", group_name), + NULL)); + + +} + +/** Actions menu for account. */ +GList * +msim_actions(PurplePlugin *plugin, gpointer context) +{ + PurpleConnection *gc; + GList *menu; + PurplePluginAction *act; + + gc = (PurpleConnection *)context; + + menu = NULL; + +#if 0 + /* TODO: find out how */ + act = purple_plugin_action_new(_("Find people..."), msim_); + menu = g_list_append(menu, act); + + act = purple_plugin_action_new(_("Change IM name..."), NULL); + menu = g_list_append(menu, act); +#endif + + act = purple_plugin_action_new(g_strdup_printf("%s", + _("Add friends from MySpace.com")), msim_import_friends); + menu = g_list_append(menu, act); + + return menu; +} + +/** Callbacks called by Purple, to access this plugin. */ +PurplePluginProtocolInfo prpl_info = { + /* options */ + OPT_PROTO_USE_POINTSIZE /* specify font size in sane point size */ + | OPT_PROTO_MAIL_CHECK, + + /* | OPT_PROTO_IM_IMAGE - TODO: direct images. */ + NULL, /* user_splits */ + NULL, /* protocol_options */ + NO_BUDDY_ICONS, /* icon_spec - TODO: eventually should add this */ + msim_list_icon, /* list_icon */ + NULL, /* list_emblems */ + msim_status_text, /* status_text */ + msim_tooltip_text, /* tooltip_text */ + msim_status_types, /* status_types */ + msim_blist_node_menu, /* blist_node_menu */ + NULL, /* chat_info */ + NULL, /* chat_info_defaults */ + msim_login, /* login */ + msim_close, /* close */ + msim_send_im, /* send_im */ + NULL, /* set_info */ + msim_send_typing, /* send_typing */ + msim_get_info, /* get_info */ + msim_set_status, /* set_status */ + msim_set_idle, /* set_idle */ + NULL, /* change_passwd */ + msim_add_buddy, /* add_buddy */ + NULL, /* add_buddies */ + msim_remove_buddy, /* remove_buddy */ + NULL, /* remove_buddies */ + NULL, /* add_permit */ + NULL, /* add_deny */ + NULL, /* rem_permit */ + NULL, /* rem_deny */ + NULL, /* set_permit_deny */ + NULL, /* join_chat */ + NULL, /* reject chat invite */ + NULL, /* get_chat_name */ + NULL, /* chat_invite */ + NULL, /* chat_leave */ + NULL, /* chat_whisper */ + NULL, /* chat_send */ + NULL, /* keepalive */ + NULL, /* register_user */ + NULL, /* get_cb_info */ + NULL, /* get_cb_away */ + NULL, /* alias_buddy */ + NULL, /* group_buddy */ + NULL, /* rename_group */ + NULL, /* buddy_free */ + NULL, /* convo_closed */ + NULL, /* normalize */ + NULL, /* set_buddy_icon */ + NULL, /* remove_group */ + NULL, /* get_cb_real_name */ + NULL, /* set_chat_topic */ + NULL, /* find_blist_chat */ + NULL, /* roomlist_get_list */ + NULL, /* roomlist_cancel */ + NULL, /* roomlist_expand_category */ + NULL, /* can_receive_file */ + NULL, /* send_file */ + NULL, /* new_xfer */ + msim_offline_message, /* offline_message */ + NULL, /* whiteboard_prpl_ops */ + msim_send_really_raw, /* send_raw */ + NULL, /* roomlist_room_serialize */ +#ifdef MSIM_USE_ATTENTION_API + msim_send_attention, /* send_attention */ + msim_attention_types, /* attention_types */ +#else + NULL, /* _purple_reserved1 */ + NULL, /* _purple_reserved2 */ +#endif + NULL, /* _purple_reserved3 */ + NULL /* _purple_reserved4 */ +}; + + + +/** Based on MSN's plugin info comments. */ +PurplePluginInfo info = { + PURPLE_PLUGIN_MAGIC, + PURPLE_MAJOR_VERSION, + PURPLE_MINOR_VERSION, + PURPLE_PLUGIN_PROTOCOL, /**< type */ + NULL, /**< ui_requirement */ + 0, /**< flags */ + NULL, /**< dependencies */ + PURPLE_PRIORITY_DEFAULT, /**< priority */ + + "prpl-myspace", /**< id */ + "MySpaceIM", /**< name */ + MSIM_PRPL_VERSION_STRING, /**< version */ + /** summary */ + "MySpaceIM Protocol Plugin", + /** description */ + "MySpaceIM Protocol Plugin", + "Jeff Connelly <jeff2@soc.pidgin.im>", /**< author */ + "http://developer.pidgin.im/wiki/MySpaceIM/", /**< homepage */ + + msim_load, /**< load */ + NULL, /**< unload */ + NULL, /**< destroy */ + NULL, /**< ui_info */ + &prpl_info, /**< extra_info */ + NULL, /**< prefs_info */ + msim_actions, /**< msim_actions */ + NULL, /**< reserved1 */ + NULL, /**< reserved2 */ + NULL, /**< reserved3 */ + NULL /**< reserved4 */ +}; + + +#ifdef MSIM_SELF_TEST +/** Test functions. + * Used to test or try out the internal workings of msimprpl. If you're reading + * this code for the first time, these functions can be instructive in learning + * how msimprpl is architected. + */ +void +msim_test_all(void) { + guint failures; + + + failures = 0; + failures += msim_test_msg(); + failures += msim_test_escaping(); + + if (failures) { + purple_debug_info("msim", "msim_test_all HAD FAILURES: %d\n", failures); + } else { + purple_debug_info("msim", "msim_test_all - all tests passed!\n"); + } + exit(0); +} + +/** Test MsimMessage for basic functionality. */ +int +msim_test_msg(void) +{ + MsimMessage *msg, *msg_cloned, *msg2; + GList *list; + gchar *packed, *packed_expected, *packed_cloned; + guint failures; + + failures = 0; + + purple_debug_info("msim", "\n\nTesting MsimMessage\n"); + msg = msim_msg_new(NULL); /* Create a new, empty message. */ + + /* Append some new elements. */ + msg = msim_msg_append(msg, "bx", MSIM_TYPE_BINARY, g_string_new_len(g_strdup("XXX"), 3)); + msg = msim_msg_append(msg, "k1", MSIM_TYPE_STRING, g_strdup("v1")); + msg = msim_msg_append(msg, "k1", MSIM_TYPE_INTEGER, GUINT_TO_POINTER(42)); + msg = msim_msg_append(msg, "k1", MSIM_TYPE_STRING, g_strdup("v43")); + msg = msim_msg_append(msg, "k1", MSIM_TYPE_STRING, g_strdup("v52/xxx\\yyy")); + msg = msim_msg_append(msg, "k1", MSIM_TYPE_STRING, g_strdup("v7")); + msim_msg_dump("msg debug str=%s\n", msg); + packed = msim_msg_pack(msg); + + purple_debug_info("msim", "msg packed=%s\n", packed); + + packed_expected = "\\bx\\WFhY\\k1\\v1\\k1\\42\\k1" + "\\v43\\k1\\v52/1xxx/2yyy\\k1\\v7\\final\\"; + + if (!g_str_equal(packed, packed_expected)) { + purple_debug_info("msim", "!!!(%d), msim_msg_pack not what expected: %s != %s\n", + ++failures, packed, packed_expected); + } + + + msg_cloned = msim_msg_clone(msg); + packed_cloned = msim_msg_pack(msg_cloned); + + purple_debug_info("msim", "msg cloned=%s\n", packed_cloned); + if (!g_str_equal(packed, packed_cloned)) { + purple_debug_info("msim", "!!!(%d), msim_msg_pack on cloned message not equal to original: %s != %s\n", + ++failures, packed_cloned, packed); + } + + g_free(packed); + g_free(packed_cloned); + msim_msg_free(msg_cloned); + msim_msg_free(msg); + + /* Try some of the more advanced functionality */ + list = NULL; + + list = g_list_prepend(list, "item3"); + list = g_list_prepend(list, "item2"); + list = g_list_prepend(list, "item1"); + list = g_list_prepend(list, "item0"); + + msg = msim_msg_new(NULL); + msg = msim_msg_append(msg, "string", MSIM_TYPE_STRING, g_strdup("string value")); + msg = msim_msg_append(msg, "raw", MSIM_TYPE_RAW, g_strdup("raw value")); + msg = msim_msg_append(msg, "integer", MSIM_TYPE_INTEGER, GUINT_TO_POINTER(3140)); + msg = msim_msg_append(msg, "boolean", MSIM_TYPE_BOOLEAN, GUINT_TO_POINTER(FALSE)); + msg = msim_msg_append(msg, "list", MSIM_TYPE_LIST, list); + + msim_msg_dump("msg with list=%s\n", msg); + purple_debug_info("msim", "msg with list packed=%s\n", msim_msg_pack(msg)); + + msg2 = msim_msg_new(NULL); + msg2 = msim_msg_append(msg2, "outer", MSIM_TYPE_STRING, g_strdup("outer value")); + msg2 = msim_msg_append(msg2, "body", MSIM_TYPE_DICTIONARY, msg); + msim_msg_dump("msg with dict=%s\n", msg2); /* msg2 now 'owns' msg */ + purple_debug_info("msim", "msg with dict packed=%s\n", msim_msg_pack(msg2)); + + msim_msg_free(msg2); + + return failures; +} + +/** Test protocol-level escaping/unescaping. */ +int +msim_test_escaping(void) +{ + guint failures; + gchar *raw, *escaped, *unescaped, *expected; + + failures = 0; + + purple_debug_info("msim", "\n\nTesting escaping\n"); + + raw = "hello/world\\hello/world"; + + escaped = msim_escape(raw); + purple_debug_info("msim", "msim_test_escaping: raw=%s, escaped=%s\n", raw, escaped); + expected = "hello/1world/2hello/1world"; + if (!g_str_equal(escaped, expected)) { + purple_debug_info("msim", "!!!(%d), msim_escape failed: %s != %s\n", + ++failures, escaped, expected); + } + + + unescaped = msim_unescape(escaped); + g_free(escaped); + purple_debug_info("msim", "msim_test_escaping: unescaped=%s\n", unescaped); + if (!g_str_equal(raw, unescaped)) { + purple_debug_info("msim", "!!!(%d), msim_unescape failed: %s != %s\n", + ++failures, raw, unescaped); + } + + return failures; +} +#endif + +static gboolean +msim_uri_handler(const gchar *proto, const gchar *cmd, GHashTable *params) +{ + PurpleAccount *account; + MsimSession *session; + GList *l; + gchar *uid_str, *cid_str; + guint uid, cid; + + if (g_ascii_strcasecmp(proto, "myim")) + return FALSE; + + /* Parameters are case-insensitive. */ + uid_str = g_hash_table_lookup(params, "uid"); + cid_str = g_hash_table_lookup(params, "cid"); + + uid = uid_str ? atol(uid_str) : 0; + cid = cid_str ? atol(cid_str) : 0; + + /* Need a contact. */ + g_return_val_if_fail(cid != 0, FALSE); + + /* TODO: if auto=true, "Add all the people on this page to my IM List!", on + * http://collect.myspace.com/index.cfm?fuseaction=im.friendslist. Don't need a cid. */ + + /* Convert numeric contact ID back to a string. Needed for looking up. Don't just + * directly use cid directly from parameters, because it might not be numeric. + * It is trivial to change this to allow cID to be a username, but that's not how + * the official MySpaceIM client works, so don't provide that functionality. */ + cid_str = g_strdup_printf("%d", cid); + + + /* Find our account with specified user id, or use first connected account if uid=0. */ + account = NULL; + l = purple_accounts_get_all(); + while (l) { + if (purple_account_is_connected(l->data) && + (uid == 0 || purple_account_get_int(l->data, "uid", 0) == uid)) { + account = l->data; + break; + } + l = l->next; + } + + if (!account) { + purple_notify_error(NULL, _("myim URL handler"), + _("No suitable MySpaceIM account could be found to open this myim URL."), + _("Enable the proper MySpaceIM account and try again.")); + g_free(cid_str); + return FALSE; + } + + session = (MsimSession *)account->gc->proto_data; + g_return_val_if_fail(session != NULL, FALSE); + + /* Lookup userid to username. TODO: push this down, to IM sending/contact + * adding functions. */ + + /* myim:sendIM?uID=USERID&cID=CONTACTID */ + if (!g_ascii_strcasecmp(cmd, "sendIM")) { + msim_lookup_user(session, cid_str, (MSIM_USER_LOOKUP_CB)msim_uri_handler_sendIM_cb, NULL); + g_free(cid_str); + return TRUE; + + /* myim:addContact?uID=USERID&cID=CONTACTID */ + } else if (!g_ascii_strcasecmp(cmd, "addContact")) { + msim_lookup_user(session, cid_str, (MSIM_USER_LOOKUP_CB)msim_uri_handler_addContact_cb, NULL); + g_free(cid_str); + return TRUE; + } + + return FALSE; +} + +/* TODO: move uid->username resolving to IM sending and buddy adding functions, + * so that user can manually add or IM by userid and username automatically + * looked up if possible? */ + +/** Handle a myim:sendIM URI command, after username has been looked up. */ +static void +msim_uri_handler_sendIM_cb(MsimSession *session, MsimMessage *userinfo, gpointer data) +{ + PurpleConversation *conv; + MsimMessage *body; + gchar *username; + + body = msim_msg_get_dictionary(userinfo, "body"); + username = msim_msg_get_string(body, "UserName"); + msim_msg_free(body); + + if (!username) { + guint uid; + + uid = msim_msg_get_integer(userinfo, "UserID"); + g_return_if_fail(uid != 0); + + username = g_strdup_printf("%d", uid); + } + + + conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, username, session->account); + if (!conv) { + purple_debug_info("msim_uri_handler", "creating new conversation for %s\n", username); + conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, session->account, username); + } + + /* Just open the window so the user can send an IM. */ + purple_conversation_present(conv); + + g_free(username); +} + +/** Handle a myim:addContact command, after username has been looked up. */ +static void +msim_uri_handler_addContact_cb(MsimSession *session, MsimMessage *userinfo, gpointer data) +{ + MsimMessage *body; + gchar *username; + + body = msim_msg_get_dictionary(userinfo, "body"); + username = msim_msg_get_string(body, "UserName"); + msim_msg_free(body); + + if (!username) { + guint uid; + + uid = msim_msg_get_integer(userinfo, "UserID"); + g_return_if_fail(uid != 0); + + username = g_strdup_printf("%d", uid); + } + + + purple_blist_request_add_buddy(session->account, username, _("Buddies"), NULL); + + g_free(username); +} + +/** Initialize plugin. */ +void +init_plugin(PurplePlugin *plugin) +{ +#ifdef MSIM_SELF_TEST + msim_test_all(); + exit(0); +#endif /* MSIM_SELF_TEST */ + + PurpleAccountOption *option; + static gboolean initialized = FALSE; + + + /* TODO: default to automatically try different ports. Make the user be + * able to set the first port to try (like LastConnectedPort in Windows client). */ + option = purple_account_option_string_new(_("Connect server"), "server", MSIM_SERVER); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + + option = purple_account_option_int_new(_("Connect port"), "port", MSIM_PORT); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + +#ifdef MSIM_USER_WANTS_TO_CONFIGURE_STATUS_TEXT + option = purple_account_option_bool_new(_("Show display name in status text"), "show_display_name", TRUE); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + + option = purple_account_option_bool_new(_("Show headline in status text"), "show_headline", TRUE); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); +#endif + +#ifdef MSIM_USER_WANTS_TO_DISABLE_EMOTICONS + option = purple_account_option_bool_new(_("Send emoticons"), "emoticons", FALSE); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); +#endif + +#ifdef MSIM_USER_REALLY_CARES_ABOUT_PRECISE_FONT_SIZES + option = purple_account_option_int_new(_("Screen resolution (dots per inch)"), "dpi", MSIM_DEFAULT_DPI); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + + option = purple_account_option_int_new(_("Base font size (points)"), "base_font_size", MSIM_BASE_FONT_POINT_SIZE); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); +#endif + + /* Code below only runs once. Based on oscar.c's oscar_init(). */ + if (initialized) + return; + + initialized = TRUE; + + purple_signal_connect(purple_get_core(), "uri-handler", &initialized, + PURPLE_CALLBACK(msim_uri_handler), NULL); +} + +PURPLE_INIT_PLUGIN(myspace, init_plugin, info);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/myspace/myspace.h Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,238 @@ +/* MySpaceIM Protocol Plugin, header file + * + * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im> + * + * 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 + */ + +#ifndef _MYSPACE_MYSPACE_H +#define _MYSPACE_MYSPACE_H + +/* Other includes */ +#include <string.h> +#include <errno.h>/* for EAGAIN */ +#include <stdarg.h> +#include <math.h> + +#include <glib.h> + +#ifdef _WIN32 +#include "win32dep.h" +#else +/* For recv() and send(); needed to match Win32 */ +#include <sys/types.h> +#include <sys/socket.h> +#endif + +#include "internal.h" + +#include "notify.h" +#include "plugin.h" +#include "accountopt.h" +#include "version.h" +#include "cipher.h" /* for SHA-1 */ +#include "util.h" /* for base64 */ +#include "debug.h" /* for purple_debug_info */ +#include "xmlnode.h" +#include "core.h" + +/* MySpaceIM includes */ +#include "persist.h" +#include "message.h" +#include "session.h" +#include "zap.h" +#include "markup.h" +#include "user.h" + +/* Conditional compilation options */ +/* Send third-party client version? (Recognized by us and Miranda's plugin) */ +/*#define MSIM_SEND_CLIENT_VERSION */ + +/* Debugging options */ +/*#define MSIM_DEBUG_MSG */ +/* Low-level and rarely needed */ +/*#define MSIM_DEBUG_PARSE */ +/*#define MSIM_DEBUG_LOGIN_CHALLENGE*/ +/*#define MSIM_DEBUG_RXBUF */ + +/* Define to cause init_plugin() to run some tests and print + * the results to the Purple debug log, then exit. Useful to + * run with 'pidgin -d' to see the output. Don't define if + * you want to actually use the plugin! */ +/*#define MSIM_SELF_TEST */ + +/* Use the attention API for zaps? */ +/* Can't have until >=2.2.0, since is a new API. */ +#define MSIM_USE_ATTENTION_API + +/* Constants */ + +/* Maximum length of a password that is acceptable. This is the limit + * on the official client (build 679) and on the 'new password' field at + * http://settings.myspace.com/index.cfm?fuseaction=user.changepassword + * (though curiously, not on the 'current password' field). */ + +/* Not defined; instead have the client reject the password, until libpurple + * supports specifying a length limit on the protocol's password. */ +/* #define MSIM_MAX_PASSWORD_LENGTH 10 */ + +/* Build version of MySpaceIM to report to servers (1.0.xxx.0) */ +#define MSIM_CLIENT_VERSION 697 + +/* Language codes from http://www.microsoft.com/globaldev/reference/oslocversion.mspx */ +#define MSIM_LANGUAGE_ID_ENGLISH 1033 +#define MSIM_LANGUAGE_NAME_ENGLISH "ENGLISH" + +/* msimprpl version string of this plugin */ +#define MSIM_PRPL_VERSION_STRING "0.16" + +/* Default server */ +#define MSIM_SERVER "im.myspace.akadns.net" +#define MSIM_PORT 1863 /* TODO: alternate ports and automatic */ + +/* Time between keepalives (seconds) - if no data within this time, is dead. */ +#define MSIM_KEEPALIVE_INTERVAL (3 * 60) + +/* Time to check if alive (milliseconds) */ +#define MSIM_KEEPALIVE_INTERVAL_CHECK (30 * 1000) + +/* Time to check for new mail (milliseconds) */ +#define MSIM_MAIL_INTERVAL_CHECK (60 * 1000) + + +/* Constants */ +#define HASH_SIZE 0x14 /**< Size of SHA-1 hash for login */ +#define NONCE_SIZE 0x20 /**< Half of decoded 'nc' field */ +#define MSIM_READ_BUF_SIZE (15 * 1024) /**< Receive buffer size */ +#define MSIM_FINAL_STRING "\\final\\" /**< Message end marker */ + +/* Messages */ +#define MSIM_BM_INSTANT 1 +#define MSIM_BM_STATUS 100 +#define MSIM_BM_ACTION 121 +#define MSIM_BM_MEDIA 122 +#define MSIM_BM_PROFILE 124 +#define MSIM_BM_UNOFFICIAL_CLIENT 200 + +/* Authentication algorithm for login2 */ +#define MSIM_AUTH_ALGORITHM 196610 + +/* Recognized challenge length */ +#define MSIM_AUTH_CHALLENGE_LENGTH 0x40 + +/* TODO: obtain IPs of network interfaces from user's machine, instead of + * hardcoding these values below (used in msim_compute_login_response). + * This is not immediately + * important because you can still connect and perform basic + * functions of the protocol. There is also a high chance that the addreses + * are RFC1918 private, so the servers couldn't do anything with them + * anyways except make note of that fact. Probably important for any + * kind of direct connection, or file transfer functionality. + */ + +#define MSIM_LOGIN_IP_LIST "\x00\x00\x00\x00\x05\x7f\x00\x00\x01\x00\x00\x00\x00\x0a\x00\x00\x40\xc0\xa8\x58\x01\xc0\xa8\x3c\x01" +#define MSIM_LOGIN_IP_LIST_LEN 25 + +/* Indexes into status string (0|1|2|3|..., but 0 always empty) */ +#define MSIM_STATUS_ORDINAL_EMPTY 0 +#define MSIM_STATUS_ORDINAL_UNKNOWNs 1 +#define MSIM_STATUS_ORDINAL_ONLINE 2 +#define MSIM_STATUS_ORDINAL_UNKNOWNss 3 +#define MSIM_STATUS_ORDINAL_HEADLINE 4 +#define MSIM_STATUS_ORDINAL_UNKNOWNls 5 +#define MSIM_STATUS_ORDINAL_UNKNOWN 6 +#define MSIM_STATUS_ORDINAL_UNKNOWN1 7 +#define MSIM_STATUS_ORDINAL_UNKNOWNp 8 +#define MSIM_STATUS_ORDINAL_UNKNOWN2 9 + +/* Status codes - states a buddy (or you!) can be in. */ +#define MSIM_STATUS_CODE_OFFLINE_OR_HIDDEN 0 +#define MSIM_STATUS_CODE_ONLINE 1 +#define MSIM_STATUS_CODE_IDLE 2 +#define MSIM_STATUS_CODE_AWAY 5 + + +/* Inbox status bitfield values for MsimSession.inbox_status. */ +#define MSIM_INBOX_MAIL (1 << 0) +#define MSIM_INBOX_BLOG_COMMENT (1 << 1) +#define MSIM_INBOX_PROFILE_COMMENT (1 << 2) +#define MSIM_INBOX_FRIEND_REQUEST (1 << 3) +#define MSIM_INBOX_PICTURE_COMMENT (1 << 4) + +/* Codes for msim_got_contact_list(), to tell what to do afterwards. */ +#define MSIM_CONTACT_LIST_INITIAL_FRIENDS 0 +#define MSIM_CONTACT_LIST_IMPORT_ALL_FRIENDS 1 +#define MSIM_CONTACT_LIST_IMPORT_TOP_FRIENDS 2 + +#ifdef MSIM_USE_ATTENTION_API +#define MsimAttentionType PurpleAttentionType +#else +/* Different kinds of attention alerts. Not yet in libpurple, so define + * our own structure here. */ +typedef struct _MsimAttentionType MsimAttentionType; + +/** A type of "attention" message (zap, nudge, buzz, etc. depending on the + * protocol) that can be sent and received. */ +struct _MsimAttentionType { + PurpleStoredImage *icon; + const gchar *description; /**< Shown before sending. */ + const gchar *incoming_description; /**< Shown when sent. */ + const gchar *outgoing_description; /**< Shown when received. */ +}; +#endif + +/* Functions */ +gboolean msim_load(PurplePlugin *plugin); +GList *msim_status_types(PurpleAccount *acct); + +const gchar *msim_list_icon(PurpleAccount *acct, PurpleBuddy *buddy); +gboolean msim_send_raw(MsimSession *session, const gchar *msg); + +void msim_login(PurpleAccount *acct); +int msim_send_im(PurpleConnection *gc, const gchar *who, const gchar *message, PurpleMessageFlags flags); +unsigned int msim_send_typing(PurpleConnection *gc, const gchar *name, PurpleTypingState state); + +void msim_get_info(PurpleConnection *gc, const gchar *name); + +void msim_set_status(PurpleAccount *account, PurpleStatus *status); +void msim_set_idle(PurpleConnection *gc, int time); + +void msim_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group); +void msim_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group); + +gboolean msim_offline_message(const PurpleBuddy *buddy); + +void msim_close(PurpleConnection *gc); + +char *msim_status_text(PurpleBuddy *buddy); +void msim_tooltip_text(PurpleBuddy *buddy, PurpleNotifyUserInfo *user_info, gboolean full); +GList *msim_actions(PurplePlugin *plugin, gpointer context); + +#ifdef MSIM_SELF_TEST +void msim_test_all(void) __attribute__((__noreturn__)); +int msim_test_msg(void); +int msim_test_escaping(void); +#endif + +gboolean msim_send_bm(MsimSession *session, const gchar *who, const gchar *text, int type); + + +void msim_unrecognized(MsimSession *session, MsimMessage *msg, gchar *note); +guint msim_new_reply_callback(MsimSession *session, MSIM_USER_LOOKUP_CB cb, gpointer data); + + +void init_plugin(PurplePlugin *plugin); + +#endif /* !_MYSPACE_MYSPACE_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/myspace/persist.h Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,90 @@ +/* MySpaceIM Protocol Plugin, persist commands + * + * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im> + * + * 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 + */ + +#ifndef _MYSPACE_PERSIST_H +#define _MYSPACE_PERSIST_H + +/** Command codes */ +#define MSIM_CMD_GET 1 +#define MSIM_CMD_PUT 2 +#define MSIM_CMD_DELETE 3 + +/** Command bit fields */ +#define MSIM_CMD_BIT_CODE 255 /*< Bits specifying command code */ +#define MSIM_CMD_BIT_REPLY 256 /**< 1=reply, 0=request */ +#define MSIM_CMD_BIT_ACTION 512 /**< 1=action, 0=information */ +#define MSIM_CMD_BIT_ERROR 1024 /**< 1=error, 0=normal */ + +/** Macros to read cmd bitfield. */ +#define MSIM_CMD_GET_CODE(x) (x & MSIM_CMD_BIT_CODE) +#define MSIM_CMD_IS_REPLY(x) (x & MSIM_CMD_BIT_REPLY) +#define MSIM_CMD_IS_REQUEST(x) !(x & MSIM_CMD_BIT_REPLY) +#define MSIM_CMD_IS_ACTION(x) (x & MSIM_CMD_BIT_ACTION) +#define MSIM_CMD_IS_INFO(x) !(x & MSIM_CMD_BIT_ACTION) +#define MSIM_CMD_IS_ERROR(x) (x & MSIM_CMD_BIT_ERROR) +#define MSIM_CMD_IS_NORMAL(x) !(x & MSIM_CMD_BIT_ERROR) + +/** Define a set of _DSN and _LID constants for a persistance request. */ +#define MSIM_PERSIST_DSN_LID(name,dsn,lid) \ + static const int name##_DSN = dsn; \ + static const int name##_LID = lid; + +/* Can't do this, errors: + * persist.h:51:3: error: '#' is not followed by a macro parameter + * In file included from myspace.c:37: + * persist.h:56: error: expected ')' before numeric constant + * So instead, I define const ints above. +#define MSIM_PERSIST_DSN_LID(name,dsn,lid) \ + #define name##_DSN dsn \ + #define name##_LID lid +#endif +*/ + +/** Messages to Get information dsn lid */ +MSIM_PERSIST_DSN_LID(MG_LIST_ALL_CONTACTS, 0, 1) +MSIM_PERSIST_DSN_LID(MG_USER_INFO_BY_ID, 0, 2) +MSIM_PERSIST_DSN_LID(MG_OWN_IM_INFO, 1, 4) +MSIM_PERSIST_DSN_LID(MG_IM_INFO_BY_ID, 1, 17) +MSIM_PERSIST_DSN_LID(MG_LIST_ALL_GROUPS, 2, 6) +MSIM_PERSIST_DSN_LID(MG_MYSPACE_INFO_BY_ID, 4, 3) +MSIM_PERSIST_DSN_LID(MG_OWN_MYSPACE_INFO, 4, 5) +MSIM_PERSIST_DSN_LID(MG_MYSPACE_INFO_BY_STRING, 5, 7) +MSIM_PERSIST_DSN_LID(MG_CHECK_MAIL, 7, 18) +MSIM_PERSIST_DSN_LID(MG_WEB_CHALLENGE, 17, 26) +MSIM_PERSIST_DSN_LID(MG_USER_SONG, 21, 28) +MSIM_PERSIST_DSN_LID(MG_SERVER_INFO, 101, 20) + +/** Messages to Change/send information */ +MSIM_PERSIST_DSN_LID(MC_USER_PREFERENCES, 1, 10) +MSIM_PERSIST_DSN_LID(MC_CONTACT_INFO, 0, 9) +MSIM_PERSIST_DSN_LID(MC_IMPORT_ALL_FRIENDS, 14, 21) +MSIM_PERSIST_DSN_LID(MC_INVITE, 16, 25) + +/** Messages to Delete information */ +MSIM_PERSIST_DSN_LID(MD_DELETE_BUDDY, 0, 8) + +/** Error codes */ +#define MERR_PARSE 1 +#define MERR_NOT_LOGGED_IN 2 +#define MERR_ANOTHER_LOGIN 6 +#define MERR_BAD_EMAIL 259 +#define MERR_BAD_PASSWORD 260 +#define MERR_BAD_UID_IN_PERSISTR 4352 + +#endif /* !_MYSPACE_PERSIST_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/myspace/release.sh Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,48 @@ +#!/bin/bash +# Created:20070618 +# By Jeff Connelly + +# Package a new msimprpl for release. Must be run with bash. + +VERSION=0.16 +make +# Include 'myspace' directory in archive, so it can easily be unextracted +# into ~/pidgin/libpurple/protocols at the correct location. +# (if this command fails, run it manually). +# This convenient command requires bash. +cd ../../.. +tar -cf libpurple/protocols/msimprpl-$VERSION.tar libpurple/protocols/myspace/{CHANGES,ChangeLog,LICENSE,Makefile.*,*.c,*.h,README,release.sh,.deps/*} autogen.sh configure.ac +cd libpurple/protocols/myspace +gzip ../msimprpl-$VERSION.tar + +mv ~/pidgin/config.h ~/pidgin/config.h- +make -f Makefile.mingw +mv ~/pidgin/config.h- ~/pidgin/config.h +cp ~/pidgin/win32-install-dir/plugins/libmyspace.dll . +# Zip is more common with Win32 users. Just include a few files in this archive, +# but (importantly) preserve the install directory structure! +mkdir -p win32-archive/plugins +cp libmyspace.dll win32-archive/plugins +mkdir -p win32-archive/pixmaps/pidgin/protocols/{48,22,16} +cp ~/pidgin/win32-install-dir/pixmaps/pidgin/protocols/48/myspace.png \ + win32-archive/pixmaps/pidgin/protocols/48/ +cp ~/pidgin/win32-install-dir/pixmaps/pidgin/protocols/22/myspace.png \ + win32-archive/pixmaps/pidgin/protocols/22/ +cp ~/pidgin/win32-install-dir/pixmaps/pidgin/protocols/16/myspace.png \ + win32-archive/pixmaps/pidgin/protocols/16/ +mkdir -p win32-archive/pixmaps/pidgin/emotes/default +cp ~/pidgin/win32-install-dir/pixmaps/pidgin/emotes/default/theme \ + win32-archive/pixmaps/pidgin/emotes/default/theme +# Emoticons in MySpaceIM but not Pidgin 2.1.0 +cp ~/pidgin/win32-install-dir/pixmaps/pidgin/emotes/default/{sinister,sidefrown,pirate,mohawk,messed,bulgy-eyes}.png \ + win32-archive/pixmaps/pidgin/emotes/default/ + +# Use DOS line endings and .txt file extension for convenience +u2d < README > win32-archive/msimprpl-README.txt +u2d < LICENSE > win32-archive/msimprpl-LICENSE.txt +u2d < CHANGES > win32-archive/msimprpl-CHANGES.txt +cd win32-archive +zip -r ../../msimprpl-$VERSION-win32.zip * +cd .. +rm -rf win32-archive +ls -l ../msimprpl-$VERSION*
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/myspace/session.c Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,95 @@ +/* MySpaceIM Protocol Plugin, session + * + * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im> + * + * 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 + */ + + +#include "myspace.h" + +/* Session methods */ + +/** + * Create a new MSIM session. + * + * @param acct The account to create the session from. + * + * @return Pointer to a new session. Free with msim_session_destroy. + */ +MsimSession * +msim_session_new(PurpleAccount *acct) +{ + MsimSession *session; + + g_return_val_if_fail(acct != NULL, NULL); + + session = g_new0(MsimSession, 1); + + session->magic = MSIM_SESSION_STRUCT_MAGIC; + session->account = acct; + session->gc = purple_account_get_connection(acct); + session->sesskey = 0; + session->userid = 0; + session->username = NULL; + session->fd = -1; + + /* TODO: Remove. */ + session->user_lookup_cb = g_hash_table_new_full(g_direct_hash, + g_direct_equal, NULL, NULL); /* do NOT free function pointers! (values) */ + session->user_lookup_cb_data = g_hash_table_new_full(g_direct_hash, + g_direct_equal, NULL, NULL);/* TODO: we don't know what the values are, + they could be integers inside gpointers + or strings, so I don't freed them. + Figure this out, once free cache. */ + + /* Created in msim_process_server_info() */ + session->server_info = NULL; + + session->rxoff = 0; + session->rxbuf = g_new0(gchar, MSIM_READ_BUF_SIZE); + session->next_rid = 1; + session->last_comm = time(NULL); + session->inbox_status = 0; + + return session; +} + +/** + * Free a session. + * + * @param session The session to destroy. + */ +void +msim_session_destroy(MsimSession *session) +{ + g_return_if_fail(MSIM_SESSION_VALID(session)); + + session->magic = -1; + + g_free(session->rxbuf); + g_free(session->username); + + /* TODO: Remove. */ + g_hash_table_destroy(session->user_lookup_cb); + g_hash_table_destroy(session->user_lookup_cb_data); + + if (session->server_info) { + msim_msg_free(session->server_info); + } + + g_free(session); +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/myspace/session.h Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,57 @@ +/* MySpaceIM Protocol Plugin, session + * + * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im> + * + * 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 + */ + +#ifndef _MYSPACE_SESSION_H +#define _MYSPACE_SESSION_H + +/* Random number in every MsimSession, to ensure it is valid. */ +#define MSIM_SESSION_STRUCT_MAGIC 0xe4a6752b + +/* Everything needed to keep track of a session (proto_data field in PurpleConnection) */ +typedef struct _MsimSession +{ + guint magic; /**< MSIM_SESSION_STRUCT_MAGIC */ + PurpleAccount *account; + PurpleConnection *gc; + guint sesskey; /**< Session key from server */ + guint userid; /**< This user's numeric user ID */ + gchar *username; /**< This user's unique username */ + gint fd; /**< File descriptor to/from server */ + + /* TODO: Remove. */ + GHashTable *user_lookup_cb; /**< Username -> userid lookup callback */ + GHashTable *user_lookup_cb_data; /**< Username -> userid lookup callback data */ + + MsimMessage *server_info; /**< Parameters from server */ + + gchar *rxbuf; /**< Receive buffer */ + guint rxoff; /**< Receive buffer offset */ + guint next_rid; /**< Next request/response ID */ + time_t last_comm; /**< Time received last communication */ + guint inbox_status; /**< Bit field of inbox notifications */ +} MsimSession; + +/* Check if an MsimSession is valid */ +#define MSIM_SESSION_VALID(s) (session != NULL && session->magic == MSIM_SESSION_STRUCT_MAGIC) + + +MsimSession *msim_session_new(PurpleAccount *acct); +void msim_session_destroy(MsimSession *session); + +#endif /* !_MYSPACE_SESSION_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/myspace/user.c Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,437 @@ +/* MySpaceIM Protocol Plugin, header file + * + * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im> + * + * 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 + */ + +#include "myspace.h" + +static void msim_store_user_info_each(const gchar *key_str, gchar *value_str, MsimUser *user); +static gchar *msim_format_now_playing(gchar *band, gchar *song); +static void msim_downloaded_buddy_icon(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, + gsize len, const gchar *error_message); + +/** Format the "now playing" indicator, showing the artist and song. + * @return Return a new string (must be g_free()'d), or NULL. + */ +static gchar * +msim_format_now_playing(gchar *band, gchar *song) +{ + if ((band && strlen(band)) || (song && strlen(song))) { + return g_strdup_printf("%s - %s", + (band && strlen(band)) ? band : "Unknown Artist", + (song && strlen(song)) ? song : "Unknown Song"); + } else { + return NULL; + } +} +/** Get the MsimUser from a PurpleBuddy, creating it if needed. */ +MsimUser * +msim_get_user_from_buddy(PurpleBuddy *buddy) +{ + MsimUser *user; + + if (!buddy) { + return NULL; + } + + if (!buddy->proto_data) { + /* No MsimUser for this buddy; make one. */ + + /* TODO: where is this freed? */ + user = g_new0(MsimUser, 1); + user->buddy = buddy; + buddy->proto_data = (gpointer)user; + } + + user = (MsimUser *)(buddy->proto_data); + + return user; +} + +/** Find and return an MsimUser * representing a user on the buddy list, or NULL. */ +MsimUser * +msim_find_user(MsimSession *session, const gchar *username) +{ + PurpleBuddy *buddy; + MsimUser *user; + + buddy = purple_find_buddy(session->account, username); + if (!buddy) { + return NULL; + } + + user = msim_get_user_from_buddy(buddy); + + return user; +} + +/** Append user information to a PurpleNotifyUserInfo, given an MsimUser. + * Used by msim_tooltip_text() and msim_get_info_cb() to show a user's profile. + */ +void +msim_append_user_info(MsimSession *session, PurpleNotifyUserInfo *user_info, MsimUser *user, gboolean full) +{ + gchar *str; + guint uid; + guint cv; + + /* Useful to identify the account the tooltip refers to. + * Other prpls show this. */ + if (user->username) { + purple_notify_user_info_add_pair(user_info, _("User"), user->username); + } + + uid = purple_blist_node_get_int(&user->buddy->node, "UserID"); + + if (full) { + /* TODO: link to username, if available */ + purple_notify_user_info_add_pair(user_info, _("Profile"), + g_strdup_printf("<a href=\"http://myspace.com/%d\">http://myspace.com/%d</a>", + uid, uid)); + } + + + /* a/s/l...the vitals */ + if (user->age) { + purple_notify_user_info_add_pair(user_info, _("Age"), + g_strdup_printf("%d", user->age)); + } + + if (user->gender && strlen(user->gender)) { + purple_notify_user_info_add_pair(user_info, _("Gender"), user->gender); + } + + if (user->location && strlen(user->location)) { + purple_notify_user_info_add_pair(user_info, _("Location"), user->location); + } + + /* Other information */ + if (user->headline && strlen(user->headline)) { + purple_notify_user_info_add_pair(user_info, _("Headline"), user->headline); + } + + str = msim_format_now_playing(user->band_name, user->song_name); + if (str && strlen(str)) { + purple_notify_user_info_add_pair(user_info, _("Song"), str); + } + + /* Note: total friends only available if looked up by uid, not username. */ + if (user->total_friends) { + purple_notify_user_info_add_pair(user_info, _("Total Friends"), + g_strdup_printf("%d", user->total_friends)); + } + + if (full) { + /* Client information */ + + str = user->client_info; + cv = user->client_cv; + + if (str && cv != 0) { + purple_notify_user_info_add_pair(user_info, _("Client Version"), + g_strdup_printf("%s (build %d)", str, cv)); + } else if (str) { + purple_notify_user_info_add_pair(user_info, _("Client Version"), + g_strdup(str)); + } else if (cv) { + purple_notify_user_info_add_pair(user_info, _("Client Version"), + g_strdup_printf("Build %d", cv)); + } + } +} + +/** Store a field of information about a buddy. */ +void +msim_store_user_info_each(const gchar *key_str, gchar *value_str, MsimUser *user) +{ + if (g_str_equal(key_str, "UserID") || g_str_equal(key_str, "ContactID")) { + /* Save to buddy list, if it exists, for quick cached uid lookup with msim_uid2username_from_blist(). */ + if (user->buddy) + { + purple_debug_info("msim", "associating uid %s with username %s\n", key_str, user->buddy->name); + purple_blist_node_set_int(&user->buddy->node, "UserID", atol(value_str)); + } + /* Need to store in MsimUser, too? What if not on blist? */ + } else if (g_str_equal(key_str, "Age")) { + user->age = atol(value_str); + } else if (g_str_equal(key_str, "Gender")) { + user->gender = g_strdup(value_str); + } else if (g_str_equal(key_str, "Location")) { + user->location = g_strdup(value_str); + } else if (g_str_equal(key_str, "TotalFriends")) { + user->total_friends = atol(value_str); + } else if (g_str_equal(key_str, "DisplayName")) { + user->display_name = g_strdup(value_str); + } else if (g_str_equal(key_str, "BandName")) { + user->band_name = g_strdup(value_str); + } else if (g_str_equal(key_str, "SongName")) { + user->song_name = g_strdup(value_str); + } else if (g_str_equal(key_str, "UserName") || g_str_equal(key_str, "IMName") || g_str_equal(key_str, "NickName")) { + /* Ignore because PurpleBuddy knows this already */ + ; + } else if (g_str_equal(key_str, "ImageURL") || g_str_equal(key_str, "AvatarURL")) { + const gchar *previous_url; + + user->image_url = g_strdup(value_str); + + /* Instead of showing 'no photo' picture, show nothing. */ + if (g_str_equal(user->image_url, "http://x.myspace.com/images/no_pic.gif")) + { + purple_buddy_icons_set_for_user(user->buddy->account, + user->buddy->name, + NULL, 0, NULL); + return; + } + + /* TODO: use ETag for checksum */ + previous_url = purple_buddy_icons_get_checksum_for_user(user->buddy); + + /* Only download if URL changed */ + if (!previous_url || !g_str_equal(previous_url, user->image_url)) { + purple_util_fetch_url(user->image_url, TRUE, NULL, TRUE, msim_downloaded_buddy_icon, (gpointer)user); + } + } else if (g_str_equal(key_str, "LastImageUpdated")) { + /* TODO: use somewhere */ + user->last_image_updated = atol(value_str); + } else if (g_str_equal(key_str, "Headline")) { + user->headline = g_strdup(value_str); + } else { + /* TODO: other fields in MsimUser */ + gchar *msg; + + msg = g_strdup_printf("msim_store_user_info_each: unknown field %s=%s", + key_str, value_str); + + msim_unrecognized(NULL, NULL, msg); + + g_free(msg); + } +} + +/** Save buddy information to the buddy list from a user info reply message. + * + * @param session + * @param msg The user information reply, with any amount of information. + * @param user The structure to save to, or NULL to save in PurpleBuddy->proto_data. + * + * Variable information is saved to the passed MsimUser structure. Permanent + * information (UserID) is stored in the blist node of the buddy list (and + * ends up in blist.xml, persisted to disk) if it exists. + * + * If the function has no buddy information, this function + * is a no-op (and returns FALSE). + * + */ +gboolean +msim_store_user_info(MsimSession *session, MsimMessage *msg, MsimUser *user) +{ + gchar *username; + MsimMessage *body, *body_node; + + g_return_val_if_fail(MSIM_SESSION_VALID(session), FALSE); + g_return_val_if_fail(msg != NULL, FALSE); + + body = msim_msg_get_dictionary(msg, "body"); + if (!body) { + return FALSE; + } + + username = msim_msg_get_string(body, "UserName"); + + if (!username) { + purple_debug_info("msim", + "msim_process_reply: not caching body, no UserName\n"); + msim_msg_free(body); + g_free(username); + return FALSE; + } + + /* Null user = find and store in PurpleBuddy's proto_data */ + if (!user) { + user = msim_find_user(session, username); + if (!user) { + msim_msg_free(body); + g_free(username); + return FALSE; + } + } + + /* TODO: make looping over MsimMessage's easier. */ + for (body_node = body; + body_node != NULL; + body_node = msim_msg_get_next_element_node(body_node)) + { + const gchar *key_str; + gchar *value_str; + MsimMessageElement *elem; + + elem = (MsimMessageElement *)body_node->data; + key_str = elem->name; + + value_str = msim_msg_get_string_from_element(elem); + msim_store_user_info_each(key_str, value_str, user); + g_free(value_str); + } + + if (msim_msg_get_integer(msg, "dsn") == MG_OWN_IM_INFO_DSN && + msim_msg_get_integer(msg, "lid") == MG_OWN_IM_INFO_LID) { + /* TODO: do something with our own IM info, if we need it for some + * specific purpose. Otherwise it is available on the buddy list, + * if the user has themselves as their own buddy. + * + * However, much of the info is already available in MsimSession, + * stored in msim_we_are_logged_on(). */ + } else if (msim_msg_get_integer(msg, "dsn") == MG_OWN_MYSPACE_INFO_DSN && + msim_msg_get_integer(msg, "lid") == MG_OWN_MYSPACE_INFO_LID) { + /* TODO: same as above, but for MySpace info. */ + } + + msim_msg_free(body); + + return TRUE; +} + +/** + * Asynchronously lookup user information, calling callback when receive result. + * + * @param session + * @param user The user id, email address, or username. Not freed. + * @param cb Callback, called with user information when available. + * @param data An arbitray data pointer passed to the callback. + */ +/* TODO: change to not use callbacks */ +void +msim_lookup_user(MsimSession *session, const gchar *user, MSIM_USER_LOOKUP_CB cb, gpointer data) +{ + MsimMessage *body; + gchar *field_name; + guint rid, cmd, dsn, lid; + + g_return_if_fail(MSIM_SESSION_VALID(session)); + g_return_if_fail(user != NULL); + /* Callback can be null to not call anything, just lookup & store information. */ + /*g_return_if_fail(cb != NULL);*/ + + purple_debug_info("msim", "msim_lookup_userid: " + "asynchronously looking up <%s>\n", user); + + msim_msg_dump("msim_lookup_user: data=%s\n", (MsimMessage *)data); + + /* Setup callback. Response will be associated with request using 'rid'. */ + rid = msim_new_reply_callback(session, cb, data); + + /* Send request */ + + cmd = MSIM_CMD_GET; + + if (msim_is_userid(user)) { + field_name = "UserID"; + dsn = MG_MYSPACE_INFO_BY_ID_DSN; + lid = MG_MYSPACE_INFO_BY_ID_LID; + } else if (msim_is_email(user)) { + field_name = "Email"; + dsn = MG_MYSPACE_INFO_BY_STRING_DSN; + lid = MG_MYSPACE_INFO_BY_STRING_LID; + } else { + field_name = "UserName"; + dsn = MG_MYSPACE_INFO_BY_STRING_DSN; + lid = MG_MYSPACE_INFO_BY_STRING_LID; + } + + body = msim_msg_new( + field_name, MSIM_TYPE_STRING, g_strdup(user), + NULL); + + g_return_if_fail(msim_send(session, + "persist", MSIM_TYPE_INTEGER, 1, + "sesskey", MSIM_TYPE_INTEGER, session->sesskey, + "cmd", MSIM_TYPE_INTEGER, 1, + "dsn", MSIM_TYPE_INTEGER, dsn, + "uid", MSIM_TYPE_INTEGER, session->userid, + "lid", MSIM_TYPE_INTEGER, lid, + "rid", MSIM_TYPE_INTEGER, rid, + "body", MSIM_TYPE_DICTIONARY, body, + NULL)); +} + + +/** + * Check if a string is a userid (all numeric). + * + * @param user The user id, email, or name. + * + * @return TRUE if is userid, FALSE if not. + */ +gboolean +msim_is_userid(const gchar *user) +{ + g_return_val_if_fail(user != NULL, FALSE); + + return strspn(user, "0123456789") == strlen(user); +} + +/** + * Check if a string is an email address (contains an @). + * + * @param user The user id, email, or name. + * + * @return TRUE if is an email, FALSE if not. + * + * This function is not intended to be used as a generic + * means of validating email addresses, but to distinguish + * between a user represented by an email address from + * other forms of identification. + */ +gboolean +msim_is_email(const gchar *user) +{ + g_return_val_if_fail(user != NULL, FALSE); + + return strchr(user, '@') != NULL; +} + + +/** Callback for when a buddy icon finished being downloaded. */ +static void +msim_downloaded_buddy_icon(PurpleUtilFetchUrlData *url_data, + gpointer user_data, + const gchar *url_text, + gsize len, + const gchar *error_message) +{ + MsimUser *user; + + user = (MsimUser *)user_data; + + purple_debug_info("msim_downloaded_buddy_icon", + "Downloaded %d bytes\n", len); + + if (!url_text) { + purple_debug_info("msim_downloaded_buddy_icon", + "failed to download icon for %s", + user->buddy->name); + return; + } + + purple_buddy_icons_set_for_user(user->buddy->account, + user->buddy->name, + g_memdup((gchar *)url_text, len), len, + /* Use URL itself as buddy icon "checksum" (TODO: ETag) */ + user->image_url); /* checksum */ +} + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/myspace/user.h Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,55 @@ +/* MySpaceIM Protocol Plugin, header file + * + * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im> + * + * 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 + */ + +#ifndef _MYSPACE_USER_H +#define _MYSPACE_USER_H + +/* Hold ephemeral information about buddies, for proto_data of PurpleBuddy. */ +/* GHashTable? */ +typedef struct _MsimUser +{ + PurpleBuddy *buddy; + guint client_cv; + gchar *client_info; + guint age; + gchar *gender; + gchar *location; + guint total_friends; + gchar *headline; + gchar *display_name; + /* Note: uid is in &buddy->node (set_blist_node_int), since it never changes */ + gchar *username; + gchar *band_name, *song_name; + gchar *image_url; + guint last_image_updated; +} MsimUser; + +/* Callback function pointer type for when a user's information is received, + * initiated from a user lookup. */ +typedef void (*MSIM_USER_LOOKUP_CB)(MsimSession *session, MsimMessage *userinfo, gpointer data); + +MsimUser *msim_get_user_from_buddy(PurpleBuddy *buddy); +MsimUser *msim_find_user(MsimSession *session, const gchar *username); +void msim_append_user_info(MsimSession *session, PurpleNotifyUserInfo *user_info, MsimUser *user, gboolean full); +gboolean msim_store_user_info(MsimSession *session, MsimMessage *msg, MsimUser *user); +gboolean msim_is_userid(const gchar *user); +gboolean msim_is_email(const gchar *user); +void msim_lookup_user(MsimSession *session, const gchar *user, MSIM_USER_LOOKUP_CB cb, gpointer data); + +#endif /* !_MYSPACE_USER_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/myspace/zap.c Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,265 @@ +/* MySpaceIM Protocol Plugin - zap support + * + * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im> + * + * 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 + */ + +#include "myspace.h" +#include "zap.h" + +static gboolean msim_send_zap(MsimSession *session, const gchar *username, guint code); +static void msim_send_zap_from_menu(PurpleBlistNode *node, gpointer zap_num_ptr); + + +/** Get zap types. */ +GList * +msim_attention_types(PurpleAccount *acct) +{ + static GList *types = NULL; + MsimAttentionType* attn; + + if (!types) { +#define _MSIM_ADD_NEW_ATTENTION(icn, nme, incoming, outgoing) \ + attn = g_new0(MsimAttentionType, 1); \ + attn->icon_name = icn; \ + attn->name = nme; \ + attn->incoming_description = incoming; \ + attn->outgoing_description = outgoing; \ + types = g_list_append(types, attn); + + /* TODO: icons for each zap */ + _MSIM_ADD_NEW_ATTENTION(NULL, _("zap"), _("zapped"), _("Zapping")); + _MSIM_ADD_NEW_ATTENTION(NULL, _("whack"), _("whacked"), _("Whacking")); + _MSIM_ADD_NEW_ATTENTION(NULL, _("torch"), _("torched"), _("Torching")); + _MSIM_ADD_NEW_ATTENTION(NULL, _("smooch"), _("smooched"), _("Smooching")); + _MSIM_ADD_NEW_ATTENTION(NULL, _("hug"), _("hugged"), _("Hugging")); + _MSIM_ADD_NEW_ATTENTION(NULL, _("bslap"), _("bslapped"), _("Bslapping")); + _MSIM_ADD_NEW_ATTENTION(NULL, _("goose"), _("goosed"), _("Goosing")); + _MSIM_ADD_NEW_ATTENTION(NULL, _("hi-five"), _("hi-fived"), _("Hi-fiving")); + _MSIM_ADD_NEW_ATTENTION(NULL, _("punk"), _("punk'd"), _("Punking")); + _MSIM_ADD_NEW_ATTENTION(NULL, _("raspberry"), _("raspberried"), _("Raspberry'ing")); + } + + return types; +} + +/** Send a zap */ +gboolean +msim_send_attention(PurpleConnection *gc, const gchar *username, guint code) +{ + GList *types; + MsimSession *session; + MsimAttentionType *attn; + PurpleBuddy *buddy; + + session = (MsimSession *)gc->proto_data; + + /* Look for this attention type, by the code index given. */ + types = msim_attention_types(gc->account); + attn = (MsimAttentionType *)g_list_nth_data(types, code); + + if (!attn) { + purple_debug_info("msim_send_attention", "got invalid zap code %d\n", code); + return FALSE; + } + + buddy = purple_find_buddy(session->account, username); + if (!buddy) { + return FALSE; + } + + msim_send_zap(session, username, code); + + return TRUE; +} + +/** Send a zap to a user. */ +static gboolean +msim_send_zap(MsimSession *session, const gchar *username, guint code) +{ + gchar *zap_string; + gboolean rc; +#ifndef MSIM_USE_ATTENTION_API + GList *types; + MsimAttentionType *attn; + gchar *zap_description; +#endif + + g_return_val_if_fail(session != NULL, FALSE); + g_return_val_if_fail(username != NULL, FALSE); + + +#ifdef MSIM_USE_ATTENTION_API + /* serv_send_attention(session->gc, username, code); */ +#else + types = msim_attention_types(session->account); + + attn = g_list_nth_data(types, code); + if (!attn) { + return FALSE; + } + + + zap_description = g_strdup_printf("*** Attention: %s %s ***", attn->outgoing_description, + username); + + serv_got_im(session->gc, username, zap_description, + PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_SYSTEM, time(NULL)); + + g_free(zap_description); +#endif + + /* Construct and send the actual zap command. */ + zap_string = g_strdup_printf("!!!ZAP_SEND!!!=RTE_BTN_ZAPS_%d", code); + + if (!msim_send_bm(session, username, zap_string, MSIM_BM_ACTION)) { + purple_debug_info("msim_send_zap_from_menu", "msim_send_bm failed: zapping %s with %s", + username, zap_string); + rc = FALSE; + } else { + rc = TRUE; + } + + g_free(zap_string); + + return rc; + +} + +/** Zap someone. Callback from msim_blist_node_menu zap menu. */ +static void +msim_send_zap_from_menu(PurpleBlistNode *node, gpointer zap_num_ptr) +{ + PurpleBuddy *buddy; + PurpleAccount *account; + PurpleConnection *gc; + MsimSession *session; + guint zap; + + if (!PURPLE_BLIST_NODE_IS_BUDDY(node)) { + /* Only know about buddies for now. */ + return; + } + + g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); + + buddy = (PurpleBuddy *)node; + + /* Find the session */ + account = buddy->account; + gc = purple_account_get_connection(account); + session = (MsimSession *)gc->proto_data; + + zap = GPOINTER_TO_INT(zap_num_ptr); + +#ifdef MSIM_USE_ATTENTION_API + serv_send_attention(session->gc, buddy->name, zap); +#else + g_return_if_fail(msim_send_zap(session, buddy->name, zap)); +#endif +} + +/** Return menu, if any, for a buddy list node. */ +GList * +msim_blist_node_menu(PurpleBlistNode *node) +{ + GList *menu, *zap_menu; + GList *types; + PurpleMenuAction *act; + /* Warning: hardcoded to match that in msim_attention_types. */ + const gchar *zap_names[10]; + guint i; + + if (!PURPLE_BLIST_NODE_IS_BUDDY(node)) { + /* Only know about buddies for now. */ + return NULL; + } + + /* Names from official client. */ + types = msim_attention_types(NULL); + i = 0; + do + { + MsimAttentionType *attn; + + attn = (MsimAttentionType *)types->data; + zap_names[i] = attn->name; + ++i; + } while ((types = g_list_next(types))); + + menu = zap_menu = NULL; + + /* TODO: get rid of once is accessible directly in GUI */ + for (i = 0; i < sizeof(zap_names) / sizeof(zap_names[0]); ++i) { + act = purple_menu_action_new(zap_names[i], PURPLE_CALLBACK(msim_send_zap_from_menu), + GUINT_TO_POINTER(i), NULL); + zap_menu = g_list_append(zap_menu, act); + } + + act = purple_menu_action_new(_("Zap"), NULL, NULL, zap_menu); + menu = g_list_append(menu, act); + + return menu; +} + +/** Process an incoming zap. */ +gboolean +msim_incoming_zap(MsimSession *session, MsimMessage *msg) +{ + gchar *msg_text, *username; + gint zap; +#ifndef MSIM_USE_ATTENTION_API + const gchar *zap_past_tense[10]; + gchar *zap_text; + + zap_past_tense[0] = _("zapped"); + zap_past_tense[1] = _("whacked"); + zap_past_tense[2] = _("torched"); + zap_past_tense[3] = _("smooched"); + zap_past_tense[4] = _("hugged"); + zap_past_tense[5] = _("bslapped"); + zap_past_tense[6] = _("goosed"); + zap_past_tense[7] = _("hi-fived"); + zap_past_tense[8] = _("punk'd"); + zap_past_tense[9] = _("raspberried"); +#endif + + msg_text = msim_msg_get_string(msg, "msg"); + username = msim_msg_get_string(msg, "_username"); + + g_return_val_if_fail(msg_text != NULL, FALSE); + g_return_val_if_fail(username != NULL, FALSE); + + g_return_val_if_fail(sscanf(msg_text, "!!!ZAP_SEND!!!=RTE_BTN_ZAPS_%d", &zap) == 1, FALSE); + + zap = CLAMP(zap, 0, 9); + +#ifdef MSIM_USE_ATTENTION_API + serv_got_attention(session->gc, username, zap); +#else + zap_text = g_strdup_printf(_("*** You have been %s! ***"), zap_past_tense[zap]); + serv_got_im(session->gc, username, zap_text, + PURPLE_MESSAGE_RECV | PURPLE_MESSAGE_SYSTEM, time(NULL)); + g_free(zap_text); +#endif + + g_free(msg_text); + g_free(username); + + return TRUE; +} + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/myspace/zap.h Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,28 @@ +/* MySpaceIM Protocol Plugin - zap support + * + * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im> + * + * 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 + */ + +#ifndef _MYSPACE_ZAP_H +#define _MYSPACE_ZAP_H + +GList *msim_attention_types(PurpleAccount *acct); +gboolean msim_send_attention(PurpleConnection *gc, const gchar *username, guint code); +GList *msim_blist_node_menu(PurpleBlistNode *node); +gboolean msim_incoming_zap(MsimSession *session, MsimMessage *msg); + +#endif /* !_MYSPACE_ZAP_H */
--- a/libpurple/protocols/oscar/oscar.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/protocols/oscar/oscar.c Tue Aug 28 01:14:08 2007 +0000 @@ -3529,6 +3529,7 @@ PurpleConnection *gc; PurpleAccount *account; PurpleStatus *status; + PurplePresence *presence; const char *message, *itmsurl; char *tmp; va_list ap; @@ -3572,7 +3573,8 @@ aim_srv_setextrainfo(od, FALSE, 0, TRUE, tmp, itmsurl); g_free(tmp); - aim_srv_setidle(od, 0); + presence = purple_status_get_presence(status); + aim_srv_setidle(od, purple_presence_is_idle(presence) ? 0 : time(NULL) - purple_presence_get_idle_time(presence)); if (od->icq) { aim_icq_reqofflinemsgs(od);
--- a/libpurple/protocols/qq/sys_msg.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/protocols/qq/sys_msg.c Tue Aug 28 01:14:08 2007 +0000 @@ -166,7 +166,7 @@ message = g_strdup_printf(_("You have been added by %s"), from); _qq_sys_msg_log_write(gc, message, from); purple_request_action(gc, NULL, message, - _("Would like to add him?"), 2, + _("Would you like to add him?"), 2, purple_connection_get_account(gc), name, NULL, g, 3, _("Cancel"), NULL,
--- a/libpurple/protocols/sametime/sametime.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/protocols/sametime/sametime.c Tue Aug 28 01:14:08 2007 +0000 @@ -3183,13 +3183,12 @@ PurpleConnection *gc; struct mwPurplePluginData *pd; struct mwAwareIdBlock t = { mwAware_USER, b->name, NULL }; - const char *ret; - - gc = b->account->gc; - pd = gc->proto_data; - - ret = mwServiceAware_getText(pd->srvc_aware, &t); - + const char *ret = NULL; + + if ((gc = purple_account_get_connection(b->account)) + && (pd = gc->proto_data)) + ret = mwServiceAware_getText(pd->srvc_aware, &t); + return (ret && g_utf8_validate(ret, -1, NULL)) ? g_markup_escape_text(ret, -1): NULL; } @@ -3242,17 +3241,17 @@ static void mw_prpl_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full) { PurpleConnection *gc; - struct mwPurplePluginData *pd; + struct mwPurplePluginData *pd = NULL; struct mwAwareIdBlock idb = { mwAware_USER, b->name, NULL }; - const char *message; + const char *message = NULL; const char *status; char *tmp; - gc = b->account->gc; - pd = gc->proto_data; - - message = mwServiceAware_getText(pd->srvc_aware, &idb); + if ((gc = purple_account_get_connection(b->account)) + && (pd = gc->proto_data)) + message = mwServiceAware_getText(pd->srvc_aware, &idb); + status = status_text(b); if(message != NULL && g_utf8_validate(message, -1, NULL) && purple_utf8_strcasecmp(status, message)) { @@ -3264,7 +3263,7 @@ purple_notify_user_info_add_pair(user_info, _("Status"), status); } - if(full) { + if(full && pd != NULL) { tmp = user_supports_text(pd->srvc_aware, b->name); if(tmp) { purple_notify_user_info_add_pair(user_info, _("Supports"), tmp);
--- a/libpurple/protocols/yahoo/Makefile.am Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/protocols/yahoo/Makefile.am Tue Aug 28 01:14:08 2007 +0000 @@ -10,7 +10,7 @@ yahoochat.h \ yahoochat.c \ yahoo_aliases.c \ - yahoo_alisaes.h \ + yahoo_aliases.h \ yahoo_auth.c \ yahoo_auth.h \ yahoo_crypt.h \
--- a/libpurple/protocols/yahoo/yahoo.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/protocols/yahoo/yahoo.c Tue Aug 28 01:14:08 2007 +0000 @@ -238,14 +238,18 @@ case 8: /* how many online buddies we have */ break; case 7: /* the current buddy */ - if (name && f) /* update the previous buddy before changing the variables */ - yahoo_update_status(gc, name, f); - name = pair->value; - if (name && g_utf8_validate(name, -1, NULL)) + /* update the previous buddy before changing the variables */ + if (f) { + if (message) + yahoo_friend_set_status_message(f, yahoo_string_decode(gc, message, unicode)); + if (name) + yahoo_update_status(gc, name, f); + } + name = message = NULL; + f = NULL; + if (pair->value && g_utf8_validate(pair->value, -1, NULL)) { + name = pair->value; f = yahoo_friend_find_or_new(gc, name); - else { - f = NULL; - name = NULL; } break; case 10: /* state */ @@ -568,6 +572,11 @@ purple_debug_info("yahoo", "Setting protocol to %d\n", f->protocol); } break; + case 317: /* Stealth Setting */ + if (f && (strtol(pair->value, NULL, 10) == 2)) { + f->presence = YAHOO_PRESENCE_PERM_OFFLINE; + } + break; /* case 242: */ /* this seems related to 241 */ /* break; */ } @@ -768,7 +777,13 @@ if (bud) yahoo_update_status(gc, from, f); } + } else if (!g_ascii_strncasecmp(msg, "WEBCAMINVITE", strlen("WEBCAMINVITE"))) { + PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, from, gc->account); + char *buf = g_strdup_printf(_("%s has sent you a webcam invite, which is not yet supported."), from); + purple_conversation_write(conv, NULL, buf, PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NOTIFY, time(NULL)); + g_free(buf); } + } @@ -884,6 +899,8 @@ PurpleConversation *c; char *username, *str; + str = NULL; + account = purple_connection_get_account(gc); c = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, im->from); @@ -892,10 +909,13 @@ else username = g_markup_escape_text(im->from, -1); +#ifdef YAHOO_USE_ATTENTION_API + serv_got_attention(gc, username, YAHOO_BUZZ); +#else str = g_strdup_printf(_("%s just sent you a Buzz!"), username); purple_conversation_write(c, NULL, str, PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NOTIFY, im->time); - +#endif g_free(username); g_free(str); g_free(m); @@ -964,7 +984,7 @@ yahoo_packet_hash(pkt, "ssiii", 1, add_req->id, 5, add_req->who, 241, add_req->protocol, 13, 1, 334, 0); yahoo_packet_send_and_free(pkt, yd); - + g_free(add_req->id); g_free(add_req->who); g_free(add_req->msg); @@ -976,19 +996,20 @@ struct yahoo_packet *pkt; char *encoded_msg = NULL; struct yahoo_data *yd = add_req->gc->proto_data; - - if (msg) + PurpleAccount *account = purple_connection_get_account(add_req->gc); + + if (msg && *msg) encoded_msg = yahoo_string_encode(add_req->gc, msg, NULL); - pkt = yahoo_packet_new(YAHOO_SERVICE_REJECTCONTACT, + pkt = yahoo_packet_new(YAHOO_SERVICE_AUTH_REQ_15, YAHOO_STATUS_AVAILABLE, 0); - yahoo_packet_hash(pkt, "sss", - 1, purple_normalize(add_req->gc->account, - purple_account_get_username( - purple_connection_get_account( - add_req->gc))), - 7, add_req->who, + yahoo_packet_hash(pkt, "ssiiis", + 1, purple_normalize(account, purple_account_get_username(account)), + 5, add_req->who, + 13, 2, + 334, 0, + 97, 1, 14, encoded_msg ? encoded_msg : ""); yahoo_packet_send_and_free(pkt, yd); @@ -1018,51 +1039,129 @@ add_req); } +static void yahoo_buddy_denied_our_add(PurpleConnection *gc, const char *who, const char *reason) +{ + char *notify_msg; + struct yahoo_data *yd = gc->proto_data; + + if (who == NULL) + return; + + if (reason != NULL) { + char *msg2 = yahoo_string_decode(gc, reason, FALSE); + notify_msg = g_strdup_printf(_("%s has (retroactively) denied your request to add them to your list for the following reason: %s."), who, msg2); + g_free(msg2); + } else + notify_msg = g_strdup_printf(_("%s has (retroactively) denied your request to add them to your list."), who); + + purple_notify_info(gc, NULL, _("Add buddy rejected"), notify_msg); + g_free(notify_msg); + + g_hash_table_remove(yd->friends, who); + purple_prpl_got_user_status(purple_connection_get_account(gc), who, "offline", NULL); /* FIXME: make this set not on list status instead */ + /* TODO: Shouldn't we remove the buddy from our local list? */ +} + static void yahoo_buddy_auth_req_15(PurpleConnection *gc, struct yahoo_packet *pkt) { - struct yahoo_add_request *add_req; - char *msg = NULL; GSList *l = pkt->hash; - - add_req = g_new0(struct yahoo_add_request, 1); - add_req->gc = gc; - - while (l) { - struct yahoo_pair *pair = l->data; - - switch (pair->key) { - case 5: - add_req->id = g_strdup(pair->value); - break; - case 4: - add_req->who = g_strdup(pair->value); - break; - case 241: - add_req->protocol = strtol(pair->value, NULL, 10); - break; - case 14: - msg = pair->value; - break; + const char *msg = NULL; + + /* Buddy authorized/declined our addition */ + if (pkt->status == 1) { + const char *who = NULL; + int response = 0; + + while (l) { + struct yahoo_pair *pair = l->data; + + switch (pair->key) { + case 4: + who = pair->value; + break; + case 13: + response = strtol(pair->value, NULL, 10); + break; + case 14: + msg = pair->value; + break; + } + l = l->next; } - l = l->next; + + if (response == 1) /* Authorized */ + purple_debug_info("yahoo", "Received authorization from buddy '%s'.\n", who ? who : "(Unknown Buddy)"); + else if (response == 2) { /* Declined */ + purple_debug_info("yahoo", "Received authorization decline from buddy '%s'.\n", who ? who : "(Unknown Buddy)"); + yahoo_buddy_denied_our_add(gc, who, msg); + } else + purple_debug_error("yahoo", "Received unknown authorization response of %d from buddy '%s'.\n", response, who ? who : "(Unknown Buddy)"); + } - - if (add_req->id) { - if (msg) - add_req->msg = yahoo_string_decode(gc, msg, FALSE); - - /* DONE! this is almost exactly the same as what MSN does, - * this should probably be moved to the core. - */ - purple_account_request_authorization(purple_connection_get_account(gc), add_req->who, add_req->id, - NULL, add_req->msg, purple_find_buddy(purple_connection_get_account(gc),add_req->who) != NULL, + /* Buddy requested authorization to add us. */ + else if (pkt->status == 3) { + struct yahoo_add_request *add_req; + const char *firstname = NULL, *lastname = NULL; + + add_req = g_new0(struct yahoo_add_request, 1); + add_req->gc = gc; + + while (l) { + struct yahoo_pair *pair = l->data; + + switch (pair->key) { + case 4: + add_req->who = g_strdup(pair->value); + break; + case 5: + add_req->id = g_strdup(pair->value); + break; + case 14: + msg = pair->value; + break; + case 216: + firstname = pair->value; + break; + case 241: + add_req->protocol = strtol(pair->value, NULL, 10); + break; + case 254: + lastname = pair->value; + break; + + } + l = l->next; + } + + if (add_req->id) { + char *alias = NULL; + if (msg) + add_req->msg = yahoo_string_decode(gc, msg, FALSE); + + if (firstname && lastname) + alias = g_strdup_printf("%s %s", firstname, lastname); + else if (firstname) + alias = g_strdup(firstname); + else if (lastname) + alias = g_strdup(lastname); + + + /* DONE! this is almost exactly the same as what MSN does, + * this should probably be moved to the core. + */ + purple_account_request_authorization(purple_connection_get_account(gc), add_req->who, add_req->id, + alias, add_req->msg, purple_find_buddy(purple_connection_get_account(gc),add_req->who) != NULL, yahoo_buddy_add_authorize_cb, yahoo_buddy_add_deny_reason_cb, - add_req); + add_req); + g_free(alias); + } else { + g_free(add_req->id); + g_free(add_req->who); + /*g_free(add_req->msg);*/ + g_free(add_req); + } } else { - g_free(add_req->id); - g_free(add_req->who); - /*g_free(add_req->msg);*/ - g_free(add_req); + purple_debug_error("yahoo", "Received authorization of unknown status (%d).\n", pkt->status); } } @@ -1113,13 +1212,12 @@ } } -static void yahoo_buddy_denied_our_add(PurpleConnection *gc, struct yahoo_packet *pkt) +/* I have no idea if this every gets called in version 15 */ +static void yahoo_buddy_denied_our_add_old(PurpleConnection *gc, struct yahoo_packet *pkt) { char *who = NULL; char *msg = NULL; GSList *l = pkt->hash; - GString *buf = NULL; - struct yahoo_data *yd = gc->proto_data; while (l) { struct yahoo_pair *pair = l->data; @@ -1135,22 +1233,7 @@ l = l->next; } - if (who) { - char *msg2; - buf = g_string_sized_new(0); - if (!msg) { - g_string_printf(buf, _("%s has (retroactively) denied your request to add them to your list."), who); - } else { - msg2 = yahoo_string_decode(gc, msg, FALSE); - g_string_printf(buf, _("%s has (retroactively) denied your request to add them to your list for the following reason: %s."), who, msg2); - g_free(msg2); - } - purple_notify_info(gc, NULL, _("Add buddy rejected"), buf->str); - g_string_free(buf, TRUE); - g_hash_table_remove(yd->friends, who); - purple_prpl_got_user_status(purple_connection_get_account(gc), who, "offline", NULL); /* FIXME: make this set not on list status instead */ - /* TODO: Shouldn't we remove the buddy from our local list? */ - } + yahoo_buddy_denied_our_add(gc, who, msg); } static void yahoo_process_contact(PurpleConnection *gc, struct yahoo_packet *pkt) @@ -1163,7 +1246,7 @@ yahoo_buddy_added_us(gc, pkt); break; case 7: - yahoo_buddy_denied_our_add(gc, pkt); + yahoo_buddy_denied_our_add_old(gc, pkt); break; default: break; @@ -2265,7 +2348,7 @@ break; case YAHOO_SERVICE_AUTH_REQ_15: yahoo_buddy_auth_req_15(gc, pkt); - break; + break; case YAHOO_SERVICE_ADDBUDDY: yahoo_process_addbuddy(gc, pkt); break; @@ -2846,7 +2929,7 @@ purple_connection_set_display_name(gc, purple_account_get_username(account)); yd->fd = -1; - yd->txhandler = -1; + yd->txhandler = 0; /* TODO: Is there a good grow size for the buffer? */ yd->txbuf = purple_circ_buffer_new(0); yd->friends = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, yahoo_friend_free); @@ -3723,10 +3806,10 @@ struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; struct yahoo_packet *pkt; PurpleGroup *g; - char *group = NULL; - char *group2 = NULL; + const char *group = NULL; + char *group2; YahooFriend *f; - + if (!yd->logged_in) return; @@ -3734,7 +3817,7 @@ return; f = yahoo_friend_find(gc, purple_buddy_get_name(buddy)); - + if (foo) group = foo->name; if (!group) { @@ -3934,17 +4017,24 @@ static PurpleCmdRet yahoopurple_cmd_buzz(PurpleConversation *c, const gchar *cmd, gchar **args, gchar **error, void *data) { - PurpleAccount *account = purple_conversation_get_account(c); +#ifndef YAHOO_USE_ATTENTION_API const char *username = purple_account_get_username(account); +#endif if (*args && args[0]) return PURPLE_CMD_RET_FAILED; +#ifdef YAHOO_USE_ATTENTION_API + serv_send_attention(account->gc, c->name, YAHOO_BUZZ); +#else + purple_debug(PURPLE_DEBUG_INFO, "yahoo", "Sending <ding> on account %s to buddy %s.\n", username, c->name); purple_conv_im_send(PURPLE_CONV_IM(c), "<ding>"); purple_conversation_write(c, NULL, _("You have just sent a Buzz!"), PURPLE_MESSAGE_SYSTEM, time(NULL)); +#endif + return PURPLE_CMD_RET_OK; } @@ -3994,6 +4084,42 @@ { return TRUE; } + +gboolean yahoo_send_attention(PurpleConnection *gc, const char *username, guint type) +{ + PurpleConversation *c; + + c = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, + username, gc->account); + + g_return_val_if_fail(c != NULL, FALSE); + + purple_debug(PURPLE_DEBUG_INFO, "yahoo", + "Sending <ding> on account %s to buddy %s.\n", username, c->name); + /* TODO: find out how to send a <ding> without showing up as a blank line on + * the conversation window. */ + purple_conv_im_send(PURPLE_CONV_IM(c), "<ding>"); + + return TRUE; +} + +GList *yahoo_attention_types(PurpleAccount *account) +{ + PurpleAttentionType *attn; + static GList *list = NULL; + + if (!list) { + /* Yahoo only supports one attention command: the 'buzz'. */ + /* This is index number YAHOO_BUZZ. */ + attn = g_new0(PurpleAttentionType, 1); + attn->name = _("buzz"); + attn->incoming_description = _("buzzed"); + attn->outgoing_description = _("Buzzing"); + list = g_list_append(list, attn); + } + + return list; +} /************************** Plugin Initialization ****************************/ static void @@ -4203,9 +4329,15 @@ NULL, /* send_raw */ NULL, /* roomlist_room_serialize */ - /* padding */ +#ifdef YAHOO_USE_ATTENTION_API + yahoo_send_attention, + yahoo_attention_types, +#else NULL, NULL, +#endif + + /* padding */ NULL, NULL };
--- a/libpurple/protocols/yahoo/yahoo.h Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/protocols/yahoo/yahoo.h Tue Aug 28 01:14:08 2007 +0000 @@ -67,6 +67,13 @@ #define YAHOO_STATUS_TYPE_INVISIBLE "invisible" #define YAHOO_STATUS_TYPE_MOBILE "mobile" +#define YAHOO_USE_ATTENTION_API + +#ifdef YAHOO_USE_ATTENTION_API +/* Index into attention types list. */ +#define YAHOO_BUZZ 0 +#endif + enum yahoo_status { YAHOO_STATUS_AVAILABLE = 0, YAHOO_STATUS_BRB, @@ -213,4 +220,7 @@ gboolean yahoo_privacy_check (PurpleConnection *gc, const char *who); +gboolean yahoo_send_attention(PurpleConnection *gc, const char *username, guint type); +GList *yahoo_attention_types(PurpleAccount *account); + #endif /* _YAHOO_H_ */
--- a/libpurple/protocols/yahoo/yahoo_friend.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/protocols/yahoo/yahoo_friend.c Tue Aug 28 01:14:08 2007 +0000 @@ -196,6 +196,8 @@ struct yahoo_data *yd = gc->proto_data; struct yahoo_packet *pkt = NULL; YahooFriend *f; + const char *thirtyone, *thirteen; + int service = -1; if (!yd->logged_in) return; @@ -211,44 +213,48 @@ } if (presence == YAHOO_PRESENCE_PERM_OFFLINE) { - pkt = yahoo_packet_new(YAHOO_SERVICE_PRESENCE_PERM, - YAHOO_STATUS_AVAILABLE, yd->session_id); - - yahoo_packet_hash(pkt, "ssss", - 1, purple_connection_get_display_name(gc), - 31, "1", 13, "2", 7, name); + service = YAHOO_SERVICE_PRESENCE_PERM; + thirtyone = "1"; + thirteen = "2"; } else if (presence == YAHOO_PRESENCE_DEFAULT) { if (f->presence == YAHOO_PRESENCE_PERM_OFFLINE) { - pkt = yahoo_packet_new(YAHOO_SERVICE_PRESENCE_PERM, - YAHOO_STATUS_AVAILABLE, yd->session_id); - - yahoo_packet_hash(pkt, "ssss", - 1, purple_connection_get_display_name(gc), - 31, "2", 13, "2", 7, name); + service = YAHOO_SERVICE_PRESENCE_PERM; + thirtyone = "2"; + thirteen = "2"; } else if (yd->current_status == YAHOO_STATUS_INVISIBLE) { - pkt = yahoo_packet_new(YAHOO_SERVICE_PRESENCE_SESSION, - YAHOO_STATUS_AVAILABLE, yd->session_id); - yahoo_packet_hash(pkt, "ssss", - 1, purple_connection_get_display_name(gc), - 31, "2", 13, "1", 7, name); + service = YAHOO_SERVICE_PRESENCE_SESSION; + thirtyone = "2"; + thirteen = "1"; } } else if (presence == YAHOO_PRESENCE_ONLINE) { if (f->presence == YAHOO_PRESENCE_PERM_OFFLINE) { pkt = yahoo_packet_new(YAHOO_SERVICE_PRESENCE_PERM, YAHOO_STATUS_AVAILABLE, yd->session_id); - yahoo_packet_hash(pkt, "ssss", + yahoo_packet_hash(pkt, "ssssssss", 1, purple_connection_get_display_name(gc), - 31, "2", 13, "2", 7, name); + 31, "2", 13, "2", + 302, "319", 300, "319", + 7, name, + 301, "319", 303, "319"); yahoo_packet_send_and_free(pkt, yd); } - pkt = yahoo_packet_new(YAHOO_SERVICE_PRESENCE_SESSION, - YAHOO_STATUS_AVAILABLE, yd->session_id); - yahoo_packet_hash(pkt, "ssss", - 1, purple_connection_get_display_name(gc), - 31, "1", 13, "1", 7, name); + service = YAHOO_SERVICE_PRESENCE_SESSION; + thirtyone = "1"; + thirteen = "1"; } - if (pkt) + if (service > 0) { + pkt = yahoo_packet_new(service, + YAHOO_STATUS_AVAILABLE, yd->session_id); + + yahoo_packet_hash(pkt, "ssssssss", + 1, purple_connection_get_display_name(gc), + 31, thirtyone, 13, thirteen, + 302, "319", 300, "319", + 7, name, + 301, "319", 303, "319"); + yahoo_packet_send_and_free(pkt, yd); + } }
--- a/libpurple/protocols/yahoo/yahoo_packet.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/protocols/yahoo/yahoo_packet.c Tue Aug 28 01:14:08 2007 +0000 @@ -294,7 +294,7 @@ if (writelen == 0) { purple_input_remove(yd->txhandler); - yd->txhandler = -1; + yd->txhandler = 0; return; } @@ -355,7 +355,7 @@ len = yahoo_packet_build(pkt, 0, yd->wm, yd->jp, &data); yahoo_packet_dump(data, len); - if (yd->txhandler == -1) + if (yd->txhandler == 0) ret = write(yd->fd, data, len); else { ret = -1; @@ -371,7 +371,7 @@ } if (ret < len) { - if (yd->txhandler == -1) + if (yd->txhandler == 0) yd->txhandler = purple_input_add(yd->fd, PURPLE_INPUT_WRITE, yahoo_packet_send_can_write, yd); purple_circ_buffer_append(yd->txbuf, data + ret, len - ret);
--- a/libpurple/protocols/yahoo/yahoochat.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/protocols/yahoo/yahoochat.c Tue Aug 28 01:14:08 2007 +0000 @@ -62,8 +62,9 @@ } pkt = yahoo_packet_new(YAHOO_SERVICE_CHATONLINE, YAHOO_STATUS_AVAILABLE,0); - yahoo_packet_hash(pkt, "sss", 1, purple_connection_get_display_name(gc), - 109, purple_connection_get_display_name(gc), 6, "abcde"); + yahoo_packet_hash(pkt, "ssss", 1, purple_connection_get_display_name(gc), + 109, purple_connection_get_display_name(gc), 6, "abcde", + 135, "ym8.1.0.415"); yahoo_packet_send_and_free(pkt, yd); } @@ -155,7 +156,7 @@ if (members) { g_hash_table_replace(components, g_strdup("members"), g_strdup(members->str)); } - if (!yahoo_privacy_check(gc, who) || + if (!yahoo_privacy_check(gc, who) || (purple_account_get_bool(purple_connection_get_account(gc), "ignore_invites", FALSE))) { purple_debug_info("yahoo", "Invite to conference %s from %s has been dropped.\n", room, who); @@ -640,7 +641,7 @@ GList *w; purple_debug_misc("yahoo", "leaving conference %s\n", room); - + pkt = yahoo_packet_new(YAHOO_SERVICE_CONFLOGOFF, YAHOO_STATUS_AVAILABLE, 0); yahoo_packet_hash_str(pkt, 1, dn); @@ -732,7 +733,7 @@ continue; yahoo_packet_hash(pkt, "ss", 52, name, 53, name); } - + yahoo_packet_send_and_free(pkt, yd); g_free(msg2); }
--- a/libpurple/prpl.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/prpl.c Tue Aug 28 01:14:08 2007 +0000 @@ -200,6 +200,7 @@ continue; purple_status_set_active(status, FALSE); + purple_blist_update_buddy_status(buddy, status); } g_slist_free(list);
--- a/libpurple/prpl.h Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/prpl.h Tue Aug 28 01:14:08 2007 +0000 @@ -30,6 +30,7 @@ #define _PURPLE_PRPL_H_ typedef struct _PurplePluginProtocolInfo PurplePluginProtocolInfo; +typedef struct _PurpleAttentionType PurpleAttentionType; /**************************************************************************/ /** @name Basic Protocol Information */ @@ -91,6 +92,20 @@ gboolean secret; }; +struct _PurpleAttentionType +{ + const char *name; /**< Shown in GUI elements */ + const char *incoming_description; /**< Shown when sent */ + const char *outgoing_description; /**< Shown when receied */ + const char *icon_name; /**< Icon to display (optional) */ + + /* Reserved fields for future purposes */ + gpointer _reserved1; + gpointer _reserved2; + gpointer _reserved3; + gpointer _reserved4; +}; + /** * Protocol options * @@ -332,8 +347,10 @@ /* room list serialize */ char *(*roomlist_room_serialize)(PurpleRoomlistRoom *room); - void (*_purple_reserved1)(void); - void (*_purple_reserved2)(void); + /* Attention API for sending & receiving zaps/nudges/buzzes etc. */ + gboolean (*send_attention)(PurpleConnection *gc, const char *username, guint type); + GList *(*attention_types)(PurpleAccount *acct); + void (*_purple_reserved3)(void); void (*_purple_reserved4)(void); };
--- a/libpurple/purple-url-handler Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/purple-url-handler Tue Aug 28 01:14:08 2007 +0000 @@ -44,6 +44,12 @@ else: return list +def convert(value): + try: + return int(value) + except: + return value + def findaccount(protocolname, accountname=""): # prefer connected accounts account = cpurple.PurpleAccountsFindConnected(accountname, protocolname) @@ -84,6 +90,32 @@ cpurple.PurpleBlistRequestAddBuddy(account, screenname, group, alias) +def aim(uri): + protocol = "prpl-aim" + match = re.match(r"^aim:([^?]*)(\?(.*))", uri) + if not match: + print "Invalid aim URI: %s" % uri + return + + command = urllib.unquote_plus(match.group(1)) + paramstring = match.group(3) + params = {} + if paramstring: + for param in paramstring.split("&"): + key, value = extendlist(param.split("=", 1), 2, "") + params[key] = urllib.unquote_plus(value) + accountname = params.get("account", "") + screenname = params.get("screenname", "") + + account = findaccount(protocol, accountname) + + if command.lower() == "goim": + goim(account, screenname, params.get("message")) + elif command.lower() == "gochat": + gochat(account, params) + elif command.lower() == "addbuddy": + addbuddy(account, screenname, params.get("group", "")) + def gg(uri): protocol = "prpl-gg" match = re.match(r"^gg:(.*)", uri) @@ -95,6 +127,32 @@ account = findaccount(protocol) goim(account, screenname) +def icq(uri): + protocol = "prpl-icq" + match = re.match(r"^icq:([^?]*)(\?(.*))", uri) + if not match: + print "Invalid icq URI: %s" % uri + return + + command = urllib.unquote_plus(match.group(1)) + paramstring = match.group(3) + params = {} + if paramstring: + for param in paramstring.split("&"): + key, value = extendlist(param.split("=", 1), 2, "") + params[key] = urllib.unquote_plus(value) + accountname = params.get("account", "") + screenname = params.get("screenname", "") + + account = findaccount(protocol, accountname) + + if command.lower() == "goim": + goim(account, screenname, params.get("message")) + elif command.lower() == "gochat": + gochat(account, params) + elif command.lower() == "addbuddy": + addbuddy(account, screenname, params.get("group", "")) + def irc(uri): protocol = "prpl-irc" match = re.match(r"^irc:(//([^/]*)/)?([^?]*)(\?(.*))?", uri) @@ -131,6 +189,34 @@ channel = "#" + channel gochat(account, {"server": server, "channel": channel, "password": params.get("key", "")}, params.get("msg")) +def msnim(uri): + protocol = "prpl-msn" + match = re.match(r"^msnim:([^?]*)(\?(.*))", uri) + if not match: + print "Invalid msnim URI: %s" % uri + return + + command = urllib.unquote_plus(match.group(1)) + paramstring = match.group(3) + params = {} + if paramstring: + for param in paramstring.split("&"): + key, value = extendlist(param.split("=", 1), 2, "") + params[key] = urllib.unquote_plus(value) + screenname = params.get("contact", "") + + account = findaccount(protocol) + + if command.lower() == "chat": + goim(account, screenname) + elif command.lower() == "add": + addbuddy(account, screenname) + +def myim(uri): + protocol = "prpl-myspace" + print "TODO: send uri: ", uri + assert False, "Not implemented" + def sip(uri): protocol = "prpl-simple" match = re.match(r"^sip:(.*)", uri) @@ -182,6 +268,32 @@ else: goim(account, screenname) +def ymsgr(uri): + protocol = "prpl-yahoo" + match = re.match(r"^ymsgr:([^?]*)(\?([^&]*)(&(.*))?)", uri) + if not match: + print "Invalid ymsgr URI: %s" % uri + return + + command = urllib.unquote_plus(match.group(1)) + screenname = urllib.unquote_plus(match.group(3)) + paramstring = match.group(5) + params = {} + if paramstring: + for param in paramstring.split("&"): + key, value = extendlist(param.split("=", 1), 2, "") + params[key] = urllib.unquote_plus(value) + + account = findaccount(protocol) + + if command.lower() == "sendim": + goim(account, screenname, params.get("m")) + elif command.lower() == "chat": + gochat(account, {"room": screenname}) + elif command.lower() == "addfriend": + addbuddy(account, screenname) + + def main(argv=sys.argv): if len(argv) != 2: print "Usage: %s URI" % argv[0] @@ -192,16 +304,26 @@ type = uri.split(":")[0] try: - if type == "gg": + if type == "aim": + aim(uri) + elif type == "gg": gg(uri) + elif type == "icq": + icq(uri) elif type == "irc": irc(uri) + elif type == "msnim": + msnim(uri) + elif type == "myim": + myim(uri) elif type == "sip": sip(uri) elif type == "xmpp": xmpp(uri) + elif type == "ymsgr": + ymsgr(uri) else: - cpurple.PurpleGotProtocolHandlerUri(uri) + print "Unknown protocol: %s" % type except dbus.dbus_bindings.DBusException: print "ERROR: Is there a libpurple-powered client (e.g. Pidgin or Finch) running?"
--- a/libpurple/request.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/request.c Tue Aug 28 01:14:08 2007 +0000 @@ -1172,7 +1172,7 @@ void * purple_request_choice(void *handle, const char *title, const char *primary, - const char *secondary, unsigned int default_value, + const char *secondary, int default_value, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, PurpleAccount *account, const char *who, PurpleConversation *conv, @@ -1197,7 +1197,7 @@ void * purple_request_choice_varg(void *handle, const char *title, const char *primary, const char *secondary, - unsigned int default_value, + int default_value, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, PurpleAccount *account, const char *who, PurpleConversation *conv, @@ -1233,7 +1233,7 @@ void * purple_request_action(void *handle, const char *title, const char *primary, - const char *secondary, unsigned int default_action, + const char *secondary, int default_action, PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data, size_t action_count, ...) { @@ -1254,7 +1254,7 @@ void * purple_request_action_varg(void *handle, const char *title, const char *primary, const char *secondary, - unsigned int default_action, + int default_action, PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data, size_t action_count, va_list actions) {
--- a/libpurple/request.h Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/request.h Tue Aug 28 01:14:08 2007 +0000 @@ -190,13 +190,13 @@ PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data); void *(*request_choice)(const char *title, const char *primary, - const char *secondary, unsigned int default_value, + const char *secondary, int default_value, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data, va_list choices); void *(*request_action)(const char *title, const char *primary, - const char *secondary, unsigned int default_action, + const char *secondary, int default_action, PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data, size_t action_count, va_list actions); @@ -1215,7 +1215,7 @@ * @param cancel_cb The callback for the @c Cancel button. * @param account The PurpleAccount associated with this request, or NULL if none is * @param who The username of the buddy assocaited with this request, or NULL if none is - * @param conv The PurpleConversation associated with this request, or NULL if none is + * @param conv The PurpleConversation associated with this request, or NULL if none is * @param user_data The data to pass to the callback. * @param ... The choices. This argument list should be * terminated with a NULL parameter. @@ -1224,7 +1224,7 @@ */ void *purple_request_choice(void *handle, const char *title, const char *primary, const char *secondary, - unsigned int default_value, + int default_value, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, PurpleAccount *account, const char *who, PurpleConversation *conv, @@ -1246,7 +1246,7 @@ * @param cancel_cb The callback for the @c Cancel button. * @param account The PurpleAccount associated with this request, or NULL if none is * @param who The username of the buddy assocaited with this request, or NULL if none is - * @param conv The PurpleConversation associated with this request, or NULL if none is + * @param conv The PurpleConversation associated with this request, or NULL if none is * @param user_data The data to pass to the callback. * @param choices The choices. This argument list should be * terminated with a @c NULL parameter. @@ -1255,7 +1255,7 @@ */ void *purple_request_choice_varg(void *handle, const char *title, const char *primary, const char *secondary, - unsigned int default_value, + int default_value, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, PurpleAccount *account, const char *who, PurpleConversation *conv, @@ -1275,7 +1275,7 @@ * @param default_action The default value. * @param account The PurpleAccount associated with this request, or NULL if none is * @param who The username of the buddy assocaited with this request, or NULL if none is - * @param conv The PurpleConversation associated with this request, or NULL if none is + * @param conv The PurpleConversation associated with this request, or NULL if none is * @param user_data The data to pass to the callback. * @param action_count The number of actions. * @param ... A list of actions. These are pairs of @@ -1290,7 +1290,7 @@ */ void *purple_request_action(void *handle, const char *title, const char *primary, const char *secondary, - unsigned int default_action, + int default_action, PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data, size_t action_count, ...); @@ -1308,7 +1308,7 @@ * @param default_action The default value. * @param account The PurpleAccount associated with this request, or NULL if none is * @param who The username of the buddy assocaited with this request, or NULL if none is - * @param conv The PurpleConversation associated with this request, or NULL if none is + * @param conv The PurpleConversation associated with this request, or NULL if none is * @param user_data The data to pass to the callback. * @param action_count The number of actions. * @param actions A list of actions and callbacks. @@ -1317,7 +1317,7 @@ */ void *purple_request_action_varg(void *handle, const char *title, const char *primary, const char *secondary, - unsigned int default_action, + int default_action, PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data, size_t action_count, va_list actions); @@ -1338,7 +1338,7 @@ * @param cancel_cb The callback for the @c Cancel button. * @param account The PurpleAccount associated with this request, or NULL if none is * @param who The username of the buddy associated with this request, or NULL if none is - * @param conv The PurpleConversation associated with this request, or NULL if none is + * @param conv The PurpleConversation associated with this request, or NULL if none is * @param user_data The data to pass to the callback. * * @return A UI-specific handle. @@ -1411,7 +1411,7 @@ * @param cancel_cb The callback for the @c Cancel button. * @param account The PurpleAccount associated with this request, or NULL if none is * @param who The username of the buddy assocaited with this request, or NULL if none is - * @param conv The PurpleConversation associated with this request, or NULL if none is + * @param conv The PurpleConversation associated with this request, or NULL if none is * @param user_data The data to pass to the callback. * * @return A UI-specific handle. @@ -1435,7 +1435,7 @@ * @param cancel_cb The callback for the @c Cancel button. * @param account The PurpleAccount associated with this request, or NULL if none is * @param who The username of the buddy assocaited with this request, or NULL if none is - * @param conv The PurpleConversation associated with this request, or NULL if none is + * @param conv The PurpleConversation associated with this request, or NULL if none is * @param user_data The data to pass to the callback. * * @return A UI-specific handle.
--- a/libpurple/server.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/server.c Tue Aug 28 01:14:08 2007 +0000 @@ -242,6 +242,107 @@ } } +PurpleAttentionType *purple_get_attention_type_from_code(PurpleAccount *account, guint type_code) +{ + PurplePlugin *prpl; + PurpleAttentionType* attn; + GList *(*get_attention_types)(PurpleAccount *); + + g_return_val_if_fail(account != NULL, NULL); + + prpl = purple_find_prpl(purple_account_get_protocol_id(account)); + + /* Lookup the attention type in the protocol's attention_types list, if any. */ + get_attention_types = PURPLE_PLUGIN_PROTOCOL_INFO(prpl)->attention_types; + if (get_attention_types) { + GList *attention_types; + + attention_types = get_attention_types(account); + attn = (PurpleAttentionType *)g_list_nth_data(attention_types, type_code); + } else { + attn = NULL; + } + + return attn; +} + +void +serv_send_attention(PurpleConnection *gc, const char *who, guint type_code) +{ + PurpleAttentionType *attn; + PurpleMessageFlags flags; + PurplePlugin *prpl; + gboolean (*send_attention)(PurpleConnection *, const char *, guint); + + gchar *description; + time_t mtime; + + g_return_if_fail(gc != NULL); + g_return_if_fail(who != NULL); + + prpl = purple_find_prpl(purple_account_get_protocol_id(gc->account)); + send_attention = PURPLE_PLUGIN_PROTOCOL_INFO(prpl)->send_attention; + g_return_if_fail(send_attention != NULL); + + mtime = time(NULL); + + attn = purple_get_attention_type_from_code(gc->account, type_code); + + if (attn && attn->outgoing_description) { + description = g_strdup_printf(_("Attention! %s %s."), attn->outgoing_description, who); + } else { + description = g_strdup(_("Attention!")); + } + + flags = PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_NOTIFY | PURPLE_MESSAGE_SYSTEM; + + purple_debug_info("server", "serv_send_attention: sending '%s' to %s\n", + description, who); + + if (!send_attention(gc, who, type_code)) + return; + + /* TODO: icons, sound, shaking... same as serv_got_attention(). */ + serv_got_im(gc, who, description, flags, mtime); + + g_free(description); +} + +void +serv_got_attention(PurpleConnection *gc, const char *who, guint type_code) +{ + PurpleMessageFlags flags; + PurpleAttentionType *attn; + gchar *description; + time_t mtime; + + mtime = time(NULL); + + attn = purple_get_attention_type_from_code(gc->account, type_code); + + /* PURPLE_MESSAGE_NOTIFY is for attention messages. */ + flags = PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_NOTIFY | PURPLE_MESSAGE_RECV; + + /* TODO: if (attn->icon_name) is non-null, use it to lookup an emoticon and display + * it next to the attention command. And if it is null, display a generic icon. */ + + if (attn && attn->incoming_description) { + description = g_strdup_printf(_("Attention! You have been %s."), attn->incoming_description); + } else { + description = g_strdup(_("Attention!")); + } + + purple_debug_info("server", "serv_got_attention: got '%s' from %s\n", + description, who); + + serv_got_im(gc, who, description, flags, mtime); + + /* TODO: sounds (depending on PurpleAttentionType), shaking, etc. */ + + g_free(description); +} + + /* * Move a buddy from one group to another on server. *
--- a/libpurple/server.h Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/server.h Tue Aug 28 01:14:08 2007 +0000 @@ -53,6 +53,35 @@ void serv_move_buddy(PurpleBuddy *, PurpleGroup *, PurpleGroup *); int serv_send_im(PurpleConnection *, const char *, const char *, PurpleMessageFlags flags); + +/** Get information about an account's attention commands, from the prpl. + * + * @return The attention command numbered 'code' from the prpl's attention_types, or NULL. + */ +PurpleAttentionType *purple_get_attention_type_from_code(PurpleAccount *account, guint type_code); + +/** Send an attention request message. + * + * @param gc The connection to send the message on. + * @param who Whose attention to request. + * @param type An index into the prpl's attention_types list determining the type + * of the attention request command to send. 0 if prpl only defines one + * (for example, Yahoo and MSN), but some protocols define more (MySpaceIM). + * + * Note that you can't send arbitrary PurpleAttentionType's, because there is + * only a fixed set of attention commands. + */ +void serv_send_attention(PurpleConnection *gc, const char *who, guint type_code); + +/** Process an incoming attention message. + * + * @param gc The connection that received the attention message. + * @param who Who requested your attention. + * @param type An index into the prpl's attention_types list determining the type + * of the attention request command to send. + */ +void serv_got_attention(PurpleConnection *gc, const char *who, guint type_code); + void serv_get_info(PurpleConnection *, const char *); void serv_set_info(PurpleConnection *, const char *); @@ -68,6 +97,7 @@ void serv_alias_buddy(PurpleBuddy *); void serv_got_alias(PurpleConnection *gc, const char *who, const char *alias); + /** * Receive a typing message from a remote user. Either PURPLE_TYPING * or PURPLE_TYPED. If the user has stopped typing then use
--- a/libpurple/util.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/util.c Tue Aug 28 01:14:08 2007 +0000 @@ -1374,7 +1374,7 @@ g_string_free(cdata, TRUE); cdata = NULL; } - + } if(tags == tag) break; @@ -1425,7 +1425,7 @@ ALLOW_TAG("strong"); ALLOW_TAG("ul"); - + /* we skip <HR> because it's not legal in XHTML-IM. However, * we still want to send something sensible, so we put a * linebreak in its place. <BR> also needs special handling @@ -2539,7 +2539,7 @@ * people's settings if there is a problem writing the new values. */ gboolean -purple_util_write_data_to_file(const char *filename, const char *data, size_t size) +purple_util_write_data_to_file(const char *filename, const char *data, gssize size) { const char *user_dir = purple_user_dir(); gchar *filename_full; @@ -4323,7 +4323,7 @@ } } -gboolean purple_message_meify(char *message, size_t len) +gboolean purple_message_meify(char *message, gssize len) { char *c; gboolean inside_html = FALSE;
--- a/libpurple/util.h Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/util.h Tue Aug 28 01:14:08 2007 +0000 @@ -1133,7 +1133,7 @@ * @return TRUE if it starts with "/me ", and it has been removed, otherwise * FALSE */ -gboolean purple_message_meify(char *message, size_t len); +gboolean purple_message_meify(char *message, gssize len); /** * Removes the underscore characters from a string used identify the mnemonic
--- a/libpurple/win32/global.mak Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/win32/global.mak Tue Aug 28 01:14:08 2007 +0000 @@ -11,7 +11,7 @@ # Locations of our various dependencies WIN32_DEV_TOP ?= $(PIDGIN_TREE_TOP)/../win32-dev ASPELL_TOP ?= $(WIN32_DEV_TOP)/aspell-dev-0-50-3-3 -GTKSPELL_TOP ?= $(WIN32_DEV_TOP)/gtkspell-2.0.6 +GTKSPELL_TOP ?= $(WIN32_DEV_TOP)/gtkspell-2.0.11 GTK_TOP ?= $(WIN32_DEV_TOP)/gtk_2_0 GTK_BIN ?= $(GTK_TOP)/bin BONJOUR_TOP ?= $(WIN32_DEV_TOP)/Bonjour_SDK
--- a/libpurple/xmlnode.c Sat Aug 25 20:32:15 2007 +0000 +++ b/libpurple/xmlnode.c Tue Aug 28 01:14:08 2007 +0000 @@ -272,6 +272,8 @@ if(NULL != node->parent) { if(node->parent->child == node) { node->parent->child = node->next; + if (node->parent->lastchild == node) + node->parent->lastchild = node->next; } else { xmlnode *prev = node->parent->child; while(prev && prev->next != node) { @@ -279,6 +281,8 @@ } if(prev) { prev->next = node->next; + if (node->parent->lastchild == node) + node->parent->lastchild = prev; } } }
--- a/pidgin/gtkaccount.c Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/gtkaccount.c Tue Aug 28 01:14:08 2007 +0000 @@ -272,7 +272,8 @@ add_user_options(dialog, dialog->top_vbox); add_protocol_options(dialog, dialog->bottom_vbox); - if (!dialog->prpl_info || !dialog->prpl_info->register_user) { + if (!dialog->prpl_info || !dialog->prpl_info->register_user || + g_object_get_data(G_OBJECT(item), "fake")) { gtk_widget_hide(dialog->register_button); } else { if (dialog->prpl_info != NULL && @@ -1394,7 +1395,9 @@ purple_signal_emit(pidgin_account_get_handle(), "account-modified", account); /* If this is a new account, then sign on! */ - if (new && !dialog->registering) { + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->register_button))) { + purple_account_register(account); + } else if (new) { const PurpleSavedStatus *saved_status; saved_status = purple_savedstatus_get_current(); @@ -1410,19 +1413,6 @@ return account; } -static void -register_account_prefs_cb(GtkWidget *w, AccountPrefsDialog *dialog) -{ - PurpleAccount *account; - - dialog->registering = TRUE; - - account = ok_account_prefs_cb(NULL, dialog); - - purple_account_register(account); -} - - static const GtkTargetEntry dnd_targets[] = { {"text/plain", 0, 0}, {"text/uri-list", 0, 1}, @@ -1501,6 +1491,18 @@ add_login_options(dialog, vbox); add_user_options(dialog, vbox); + button = gtk_check_button_new_with_label(_("Create this new account on the server")); + gtk_box_pack_start(GTK_BOX(main_vbox), button, FALSE, FALSE, 0); + gtk_widget_show(button); + dialog->register_button = button; + if (dialog->account == NULL) + gtk_widget_set_sensitive(button, FALSE); + + if (!dialog->prpl_info || !dialog->prpl_info->register_user) + gtk_widget_hide(button); + + + /* Setup the page with 'Advanced'. */ dialog->bottom_vbox = dbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER); gtk_container_set_border_width(GTK_CONTAINER(dbox), PIDGIN_HIG_BORDER); @@ -1519,22 +1521,6 @@ gtk_box_pack_end(GTK_BOX(main_vbox), bbox, FALSE, TRUE, 0); gtk_widget_show(bbox); - /* Register button */ - button = gtk_button_new_with_label(_("Register")); - gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); - gtk_widget_show(button); - - g_signal_connect(G_OBJECT(button), "clicked", - G_CALLBACK(register_account_prefs_cb), dialog); - - dialog->register_button = button; - - if (dialog->account == NULL) - gtk_widget_set_sensitive(button, FALSE); - - if (!dialog->prpl_info || !dialog->prpl_info->register_user) - gtk_widget_hide(button); - /* Cancel button */ button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
--- a/pidgin/gtkblist.c Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/gtkblist.c Tue Aug 28 01:14:08 2007 +0000 @@ -1539,6 +1539,12 @@ pidgin_clear_cursor(gtkblist->window); } +static void pidgin_blist_show_protocol_icons_cb(gpointer data, guint action, GtkWidget *item) +{ + purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons", + gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(item))); +} + static void pidgin_blist_show_empty_groups_cb(gpointer data, guint action, GtkWidget *item) { pidgin_set_cursor(gtkblist->window, GDK_WATCH); @@ -2529,7 +2535,8 @@ GValue val; struct _pidgin_blist_node *gtknode; - if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), gtkblist->tip_rect.x, gtkblist->tip_rect.y, &path, NULL, NULL, NULL)) + if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), gtkblist->tip_rect.x, gtkblist->tip_rect.y + (gtkblist->tip_rect.height/2), + &path, NULL, NULL, NULL)) return FALSE; gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path); val.g_type = 0; @@ -2586,7 +2593,8 @@ PurpleBlistNode *node; GValue val; - if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), gtkblist->tip_rect.x, gtkblist->tip_rect.y, &path, NULL, NULL, NULL)) + if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), gtkblist->tip_rect.x, gtkblist->tip_rect.y + (gtkblist->tip_rect.height/2), + &path, NULL, NULL, NULL)) return FALSE; gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path); val.g_type = 0; @@ -2854,10 +2862,12 @@ { N_("/Buddies/Get User _Info..."), "<CTL>I", pidgin_dialogs_info, 0, "<StockItem>", PIDGIN_STOCK_TOOLBAR_USER_INFO }, { N_("/Buddies/View User _Log..."), "<CTL>L", pidgin_dialogs_log, 0, "<Item>", NULL }, { "/Buddies/sep1", NULL, NULL, 0, "<Separator>", NULL }, - { N_("/Buddies/Show _Offline Buddies"), NULL, pidgin_blist_edit_mode_cb, 1, "<CheckItem>", NULL }, - { N_("/Buddies/Show _Empty Groups"), NULL, pidgin_blist_show_empty_groups_cb, 1, "<CheckItem>", NULL }, - { N_("/Buddies/Show Buddy _Details"), NULL, pidgin_blist_buddy_details_cb, 1, "<CheckItem>", NULL }, - { N_("/Buddies/Show Idle _Times"), NULL, pidgin_blist_show_idle_time_cb, 1, "<CheckItem>", NULL }, + { N_("/Buddies/Show"), NULL, NULL, 0, "<Branch>", NULL}, + { N_("/Buddies/Show/Show _Offline Buddies"), NULL, pidgin_blist_edit_mode_cb, 1, "<CheckItem>", NULL }, + { N_("/Buddies/Show/Show _Empty Groups"), NULL, pidgin_blist_show_empty_groups_cb, 1, "<CheckItem>", NULL }, + { N_("/Buddies/Show/Show Buddy _Details"), NULL, pidgin_blist_buddy_details_cb, 1, "<CheckItem>", NULL }, + { N_("/Buddies/Show/Show Idle _Times"), NULL, pidgin_blist_show_idle_time_cb, 1, "<CheckItem>", NULL }, + { N_("/Buddies/Show/Show _Protocol Icons"), NULL, pidgin_blist_show_protocol_icons_cb, 1, "<CheckItem>", NULL }, { N_("/Buddies/_Sort Buddies"), NULL, NULL, 0, "<Branch>", NULL }, { "/Buddies/sep2", NULL, NULL, 0, "<Separator>", NULL }, { N_("/Buddies/_Add Buddy..."), "<CTL>B", pidgin_blist_add_buddy_cb, 0, "<StockItem>", GTK_STOCK_ADD }, @@ -3143,10 +3153,11 @@ return ret; } - if (((struct _pidgin_blist_node*)(node->parent->ui_data))->contact_expanded) + if (((struct _pidgin_blist_node*)(node->parent->ui_data))->contact_expanded) { + if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons")) + return NULL; return pidgin_create_prpl_icon(((PurpleBuddy*)node)->account, PIDGIN_PRPL_ICON_SMALL); - } else if(PURPLE_BLIST_NODE_IS_CHAT(node)) { - return pidgin_create_prpl_icon(((PurpleChat*)node)->account, PIDGIN_PRPL_ICON_SMALL); + } } else { return NULL; } @@ -4405,7 +4416,10 @@ G_TYPE_BOOLEAN, /* Contact expander */ G_TYPE_BOOLEAN, /* Contact expander visible */ GDK_TYPE_PIXBUF, /* Emblem */ - G_TYPE_BOOLEAN); /* Emblem visible */ + G_TYPE_BOOLEAN, /* Emblem visible */ + GDK_TYPE_PIXBUF, /* Protocol icon */ + G_TYPE_BOOLEAN /* Protocol visible */ + ); gtkblist->treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(gtkblist->treemodel)); @@ -4520,6 +4534,17 @@ "visible", EMBLEM_VISIBLE_COLUMN, NULL); rend = gtk_cell_renderer_pixbuf_new(); + gtk_tree_view_column_pack_start(column, rend, FALSE); + gtk_tree_view_column_set_attributes(column, rend, + "pixbuf", PROTOCOL_ICON_COLUMN, + "visible", PROTOCOL_ICON_VISIBLE_COLUMN, +#if GTK_CHECK_VERSION(2,6,0) + "cell-background-gdk", BGCOLOR_COLUMN, +#endif + NULL); + g_object_set(rend, "xalign", 0.0, "xpad", 3, "ypad", 0, NULL); + + rend = gtk_cell_renderer_pixbuf_new(); g_object_set(rend, "xalign", 1.0, "ypad", 0, NULL); gtk_tree_view_column_pack_start(column, rend, FALSE); gtk_tree_view_column_set_attributes(column, rend, "pixbuf", BUDDY_ICON_COLUMN, @@ -4565,21 +4590,24 @@ /* set the Show Offline Buddies option. must be done * after the treeview or faceprint gets mad. -Robot101 */ - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show Offline Buddies"))), + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show/Show Offline Buddies"))), purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_offline_buddies")); - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show Empty Groups"))), + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show/Show Empty Groups"))), purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_empty_groups")); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Tools/Mute Sounds"))), purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/sound/mute")); - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show Buddy Details"))), + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show/Show Buddy Details"))), purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons")); - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show Idle Times"))), + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show/Show Idle Times"))), purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_idle_time")); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show/Show Protocol Icons"))), + purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons")); + if(!strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/sound/method"), "none")) gtk_widget_set_sensitive(gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Mute Sounds")), FALSE); @@ -4609,6 +4637,8 @@ _prefs_change_redo_list, NULL); purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/blist/show_offline_buddies", _prefs_change_redo_list, NULL); + purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/blist/show_protocol_icons", + _prefs_change_redo_list, NULL); /* sorting */ purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/blist/sort_type", @@ -5040,6 +5070,8 @@ BUDDY_ICON_VISIBLE_COLUMN, biglist, EMBLEM_COLUMN, emblem, EMBLEM_VISIBLE_COLUMN, emblem, + PROTOCOL_ICON_COLUMN, pidgin_create_prpl_icon(buddy->account, PIDGIN_PRPL_ICON_SMALL), + PROTOCOL_ICON_VISIBLE_COLUMN, purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons"), BGCOLOR_COLUMN, NULL, CONTACT_EXPANDER_COLUMN, NULL, CONTACT_EXPANDER_VISIBLE_COLUMN, expanded, @@ -5200,6 +5232,8 @@ BUDDY_ICON_VISIBLE_COLUMN, purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons"), EMBLEM_COLUMN, emblem, EMBLEM_VISIBLE_COLUMN, emblem != NULL, + PROTOCOL_ICON_COLUMN, pidgin_create_prpl_icon(chat->account, PIDGIN_PRPL_ICON_SMALL), + PROTOCOL_ICON_VISIBLE_COLUMN, purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons"), NAME_COLUMN, mark, GROUP_EXPANDER_VISIBLE_COLUMN, FALSE, -1); @@ -6093,6 +6127,7 @@ purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/blist/show_empty_groups", FALSE); purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/blist/show_idle_time", TRUE); purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/blist/show_offline_buddies", FALSE); + purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons", FALSE); purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/blist/list_visible", FALSE); purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/blist/list_maximized", FALSE); purple_prefs_add_string(PIDGIN_PREFS_ROOT "/blist/sort_type", "alphabetical");
--- a/pidgin/gtkblist.h Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/gtkblist.h Tue Aug 28 01:14:08 2007 +0000 @@ -43,6 +43,8 @@ CONTACT_EXPANDER_VISIBLE_COLUMN, EMBLEM_COLUMN, EMBLEM_VISIBLE_COLUMN, + PROTOCOL_ICON_COLUMN, + PROTOCOL_ICON_VISIBLE_COLUMN, BLIST_COLUMNS };
--- a/pidgin/gtkconv.c Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/gtkconv.c Tue Aug 28 01:14:08 2007 +0000 @@ -86,6 +86,7 @@ CONV_ICON_COLUMN, CONV_TEXT_COLUMN, CONV_EMBLEM_COLUMN, + CONV_PROTOCOL_ICON_COLUMN, CONV_NUM_COLUMNS } PidginInfopaneColumns; @@ -100,36 +101,6 @@ #define LUMINANCE(c) (float)((0.3*(c.red))+(0.59*(c.green))+(0.11*(c.blue))) -#if 0 -/* These colors come from the default GNOME palette */ -static GdkColor nick_colors[] = { - {0, 47616, 46336, 43776}, /* Basic 3D Medium */ - {0, 32768, 32000, 29696}, /* Basic 3D Dark */ - {0, 22016, 20992, 18432}, /* 3D Shadow */ - {0, 33536, 42496, 32512}, /* Green Medium */ - {0, 23808, 29952, 21760}, /* Green Dark */ - {0, 17408, 22016, 12800}, /* Green Shadow */ - {0, 57344, 46592, 44800}, /* Red Hilight */ - {0, 49408, 26112, 23040}, /* Red Medium */ - {0, 34816, 17920, 12544}, /* Red Dark */ - {0, 49408, 14336, 8704}, /* Red Shadow */ - {0, 34816, 32512, 41728}, /* Purple Medium */ - {0, 25088, 23296, 33024}, /* Purple Dark */ - {0, 18688, 16384, 26112}, /* Purple Shadow */ - {0, 40192, 47104, 53760}, /* Blue Hilight */ - {0, 29952, 36864, 44544}, /* Blue Medium */ - {0, 57344, 49920, 40448}, /* Face Skin Medium */ - {0, 45824, 37120, 26880}, /* Face skin Dark */ - {0, 33280, 26112, 18176}, /* Face Skin Shadow */ - {0, 57088, 16896, 7680}, /* Accent Red */ - {0, 39168, 0, 0}, /* Accent Red Dark */ - {0, 17920, 40960, 17920}, /* Accent Green */ - {0, 9728, 50944, 9728} /* Accent Green Dark */ -}; - -#define NUM_NICK_COLORS (sizeof(nick_colors) / sizeof(*nick_colors)) -#endif - /* From http://www.w3.org/TR/AERT#color-contrast */ #define MIN_BRIGHTNESS_CONTRAST 75 #define MIN_COLOR_CONTRAST 200 @@ -2301,7 +2272,7 @@ const char *name = NULL; GdkPixbuf *status = NULL; PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); - const char *icon_size = small_icon ? "pidgin-icon-size-tango-microscopic" : PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL; + const char *icon_size = small_icon ? PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC : PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL; g_return_val_if_fail(conv != NULL, NULL); account = purple_conversation_get_account(conv); @@ -2391,6 +2362,12 @@ &(gtkconv->infopane_iter), CONV_EMBLEM_COLUMN, emblem, -1); + if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons")) { + gtk_list_store_set(GTK_LIST_STORE(gtkconv->infopane_model), + &(gtkconv->infopane_iter), + CONV_PROTOCOL_ICON_COLUMN, pidgin_create_prpl_icon(gtkconv->active_conv->account, PIDGIN_PRPL_ICON_SMALL), -1); + } + /* XXX seanegan Why do I have to do this? */ gtk_widget_queue_draw(gtkconv->infopane); @@ -4537,7 +4514,7 @@ G_CALLBACK(pidgin_conv_leave_cb), gtkconv); gtkconv->infopane = gtk_cell_view_new(); - gtkconv->infopane_model = gtk_list_store_new(CONV_NUM_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, GDK_TYPE_PIXBUF); + gtkconv->infopane_model = gtk_list_store_new(CONV_NUM_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, GDK_TYPE_PIXBUF, GDK_TYPE_PIXBUF); gtk_cell_view_set_model(GTK_CELL_VIEW(gtkconv->infopane), GTK_TREE_MODEL(gtkconv->infopane_model)); gtk_list_store_append(gtkconv->infopane_model, &(gtkconv->infopane_iter)); @@ -4562,6 +4539,12 @@ g_object_set(rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); #endif + + rend = gtk_cell_renderer_pixbuf_new(); + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(gtkconv->infopane), rend, FALSE); + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gtkconv->infopane), rend, "pixbuf", CONV_PROTOCOL_ICON_COLUMN, NULL); + g_object_set(rend, "xalign", 0.0, "xpad", 3, "ypad", 0, NULL); + rend = gtk_cell_renderer_pixbuf_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(gtkconv->infopane), rend, FALSE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gtkconv->infopane), rend, "pixbuf", CONV_EMBLEM_COLUMN, NULL); @@ -6918,6 +6901,17 @@ } static void +show_protocol_icons_pref_cb(const char *name, PurplePrefType type, + gconstpointer value, gpointer data) +{ + GList *l; + for (l = purple_get_conversations(); l != NULL; l = l->next) { + PurpleConversation *conv = l->data; + update_tab_icon(conv); + } +} + +static void conv_placement_usetabs_cb(const char *name, PurplePrefType type, gconstpointer value, gpointer data) { @@ -7258,6 +7252,8 @@ animate_buddy_icons_pref_cb, NULL); purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons", show_buddy_icons_pref_cb, NULL); + purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/im/show_protocol_icons", + show_protocol_icons_pref_cb, NULL); purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/im/hide_new", hide_new_pref_cb, NULL); @@ -8736,7 +8732,7 @@ angle = 270; #if GTK_CHECK_VERSION(2,6,0) - if (!angle && pidgin_conv_window_get_gtkconv_count(win) > 1) { + if (!angle) { g_object_set(G_OBJECT(gtkconv->tab_label), "ellipsize", PANGO_ELLIPSIZE_END, NULL); gtk_label_set_width_chars(GTK_LABEL(gtkconv->tab_label), 4); } else { @@ -8801,14 +8797,15 @@ } gtk_notebook_set_tab_label_packing(GTK_NOTEBOOK(win->notebook), gtkconv->tab_cont, - !tabs_side && !angle && pidgin_conv_window_get_gtkconv_count(win) > 1, + !tabs_side && !angle, TRUE, GTK_PACK_START); if (pidgin_conv_window_get_gtkconv_count(win) == 1) gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook), - !purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons") || + purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/tabs") && + (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons") || purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/tab_side") == GTK_POS_LEFT || - purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/tab_side") == GTK_POS_RIGHT); + purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/tab_side") == GTK_POS_RIGHT)); /* show the widgets */ /* gtk_widget_show(gtkconv->icon); */
--- a/pidgin/gtkdialogs.c Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/gtkdialogs.c Tue Aug 28 01:14:08 2007 +0000 @@ -86,6 +86,7 @@ {"Luke 'LSchiere' Schierer", N_("support"), "lschiere@users.sf.net"}, {"Megan 'Cae' Schneider", N_("support/QA"), NULL}, {"Evan Schoenberg", N_("developer"), NULL}, + {"Kevin 'SimGuy' Stange", N_("developer & webmaster"), NULL}, {"Stu 'nosnilmot' Tomlinson", N_("developer"), NULL}, {"Nathan 'faceprint' Walp", N_("developer"), NULL}, {NULL, NULL, NULL} @@ -95,7 +96,9 @@ static struct developer patch_writers[] = { {"John 'rekkanoryo' Bailey", NULL, NULL}, {"Peter 'Bleeter' Lawler", NULL, NULL}, - {"Kevin 'SimGuy' Stange", NULL, NULL}, + {"Dennis 'EvilDennisR' Ristuccia", N_("Senior Contributor/QA"), NULL}, + {"Peter 'Fmoo' Ruibal", NULL, NULL}, + {"Gabriel 'Nix' Schulhof", NULL, NULL}, {NULL, NULL, NULL} }; @@ -381,7 +384,7 @@ "libpurple which is capable of connecting to " "AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, " "Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, " - "Gadu-Gadu, and QQ all at once. " + "MySpaceIM, Gadu-Gadu, and QQ all at once. " "It is written using GTK+.<BR><BR>" "You may modify and redistribute the program under " "the terms of the GPL (version 2 or later). A copy of the GPL is "
--- a/pidgin/gtkimhtmltoolbar.c Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/gtkimhtmltoolbar.c Tue Aug 28 01:14:08 2007 +0000 @@ -70,6 +70,14 @@ } static void +do_strikethrough(GtkWidget *strikethrough, GtkIMHtmlToolbar *toolbar) +{ + g_return_if_fail(toolbar != NULL); + gtk_imhtml_toggle_strike(GTK_IMHTML(toolbar->imhtml)); + gtk_widget_grab_focus(toolbar->imhtml); +} + +static void do_small(GtkWidget *smalltb, GtkIMHtmlToolbar *toolbar) { g_return_if_fail(toolbar != NULL); @@ -433,6 +441,17 @@ gtk_widget_grab_focus(toolbar->imhtml); } +static void insert_hr_cb(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) +{ + GtkTextIter iter; + GtkTextMark *ins; + GtkIMHtmlScalable *hr; + + ins = gtk_text_buffer_get_insert(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->imhtml))); + gtk_text_buffer_get_iter_at_mark(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->imhtml)), &iter, ins); + hr = gtk_imhtml_hr_new(); + gtk_imhtml_hr_add_to(hr, GTK_IMHTML(toolbar->imhtml), &iter); +} static void do_insert_image_cb(GtkWidget *widget, int response, GtkIMHtmlToolbar *toolbar) @@ -1027,6 +1046,13 @@ G_CALLBACK(do_underline), toolbar); toolbar->underline = button; + + /* Strikethrough */ + button = pidgin_pixbuf_toolbar_button_from_stock(GTK_STOCK_STRIKETHROUGH); + g_signal_connect(G_OBJECT(button), "clicked", + G_CALLBACK(do_strikethrough), toolbar); + toolbar->strikethrough = button; + /* Increase font size */ button = pidgin_pixbuf_toolbar_button_from_stock(PIDGIN_STOCK_TOOLBAR_TEXT_LARGER); g_signal_connect(G_OBJECT(button), "clicked", @@ -1124,6 +1150,7 @@ {_("<b>_Bold</b>"), &toolbar->bold, TRUE}, {_("<i>_Italic</i>"), &toolbar->italic, TRUE}, {_("<u>_Underline</u>"), &toolbar->underline, TRUE}, + {_("<span strikethrough='true'>Strikethrough</span>"), &toolbar->strikethrough, TRUE}, {_("<span size='larger'>_Larger</span>"), &toolbar->larger_size, TRUE}, #if 0 {_("_Normal"), &toolbar->normal_size, TRUE}, @@ -1230,6 +1257,11 @@ g_signal_connect(G_OBJECT(toolbar->link), "notify::sensitive", G_CALLBACK(button_sensitiveness_changed), menuitem); + menuitem = gtk_menu_item_new_with_mnemonic(_("_Horizontal rule")); + g_signal_connect(G_OBJECT(menuitem), "activate" , G_CALLBACK(insert_hr_cb), toolbar); + gtk_menu_shell_append(GTK_MENU_SHELL(insert_menu), menuitem); + toolbar->insert_hr = menuitem; + g_signal_connect_swapped(G_OBJECT(insert_button), "button-press-event", G_CALLBACK(gtk_widget_activate), insert_button); g_signal_connect(G_OBJECT(insert_button), "activate", G_CALLBACK(pidgin_menu_clicked), insert_menu); g_signal_connect(G_OBJECT(insert_menu), "deactivate", G_CALLBACK(pidgin_menu_deactivate), insert_button);
--- a/pidgin/gtkimhtmltoolbar.h Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/gtkimhtmltoolbar.h Tue Aug 28 01:14:08 2007 +0000 @@ -74,6 +74,8 @@ GtkWidget *image_dialog; char *sml; + GtkWidget *strikethrough; + GtkWidget *insert_hr; }; struct _GtkIMHtmlToolbarClass {
--- a/pidgin/gtknotify.c Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/gtknotify.c Tue Aug 28 01:14:08 2007 +0000 @@ -589,16 +589,16 @@ char label_text[2048]; char *linked_text, *primary_esc, *secondary_esc; - window = pidgin_create_window(title, PIDGIN_HIG_BORDER, NULL, TRUE); - gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG); + window = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(window), title); + gtk_container_set_border_width(GTK_CONTAINER(window), PIDGIN_HIG_BORDER); + gtk_window_set_resizable(GTK_WINDOW(window), TRUE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(formatted_close_cb), NULL); /* Setup the main vbox */ - vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(window), vbox); - gtk_widget_show(vbox); + vbox = GTK_DIALOG(window)->vbox; /* Setup the descriptive label */ primary_esc = g_markup_escape_text(primary, -1); @@ -630,9 +630,7 @@ gtk_widget_show(frame); /* Add the Close button. */ - button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); - gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0); - gtk_widget_show(button); + button = gtk_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE); gtk_widget_grab_focus(button); g_signal_connect_swapped(G_OBJECT(button), "clicked", @@ -708,7 +706,6 @@ guint i; GtkWidget *vbox; - GtkWidget *button_area; GtkWidget *label; GtkWidget *sw; PidginNotifySearchResultsData *data; @@ -723,16 +720,16 @@ data->results = results; /* Create the window */ - window = pidgin_create_window(title ? title :_("Search Results"), PIDGIN_HIG_BORDER, NULL, TRUE); - gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG); + window = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(window), title ? title :_("Search Results")); + gtk_container_set_border_width(GTK_CONTAINER(window), PIDGIN_HIG_BORDER); + gtk_window_set_resizable(GTK_WINDOW(window), TRUE); g_signal_connect_swapped(G_OBJECT(window), "delete_event", G_CALLBACK(searchresults_close_cb), data); /* Setup the main vbox */ - vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(window), vbox); - gtk_widget_show(vbox); + vbox = GTK_DIALOG(window)->vbox; /* Setup the descriptive label */ primary_esc = (primary != NULL) ? g_markup_escape_text(primary, -1) : NULL; @@ -796,13 +793,6 @@ renderer, "text", i, NULL); } - /* Setup the button area */ - button_area = gtk_hbutton_box_new(); - gtk_box_pack_start(GTK_BOX(vbox), button_area, FALSE, FALSE, 0); - gtk_button_box_set_layout(GTK_BUTTON_BOX(button_area), GTK_BUTTONBOX_END); - gtk_box_set_spacing(GTK_BOX(button_area), PIDGIN_HIG_BORDER); - gtk_widget_show(button_area); - for (i = 0; i < g_list_length(results->buttons); i++) { PurpleNotifySearchButton *b = g_list_nth_data(results->buttons, i); GtkWidget *button = NULL; @@ -815,22 +805,22 @@ } break; case PURPLE_NOTIFY_BUTTON_CONTINUE: - button = gtk_button_new_from_stock(GTK_STOCK_GO_FORWARD); + button = gtk_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_GO_FORWARD, GTK_RESPONSE_NONE); break; case PURPLE_NOTIFY_BUTTON_ADD: - button = gtk_button_new_from_stock(GTK_STOCK_ADD); + button = gtk_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_ADD, GTK_RESPONSE_NONE); break; case PURPLE_NOTIFY_BUTTON_INFO: - button = gtk_button_new_from_stock(PIDGIN_STOCK_TOOLBAR_USER_INFO); + button = gtk_dialog_add_button(GTK_DIALOG(window), PIDGIN_STOCK_TOOLBAR_USER_INFO, GTK_RESPONSE_NONE); break; case PURPLE_NOTIFY_BUTTON_IM: - button = gtk_button_new_from_stock(PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW); + button = gtk_dialog_add_button(GTK_DIALOG(window), PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, GTK_RESPONSE_NONE); break; case PURPLE_NOTIFY_BUTTON_JOIN: - button = gtk_button_new_from_stock(PIDGIN_STOCK_CHAT); + button = gtk_dialog_add_button(GTK_DIALOG(window), PIDGIN_STOCK_CHAT, GTK_RESPONSE_NONE); break; case PURPLE_NOTIFY_BUTTON_INVITE: - button = gtk_button_new_from_stock(PIDGIN_STOCK_INVITE); + button = gtk_dialog_add_button(GTK_DIALOG(window), PIDGIN_STOCK_INVITE, GTK_RESPONSE_NONE); break; default: purple_debug_warning("gtknotify", "Incorrect button type: %d\n", b->type); @@ -838,9 +828,6 @@ if (button != NULL) { PidginNotifySearchResultsButtonData *bd; - gtk_box_pack_start(GTK_BOX(button_area), button, FALSE, FALSE, 0); - gtk_widget_show(button); - bd = g_new0(PidginNotifySearchResultsButtonData, 1); bd->button = b; bd->data = data; @@ -852,9 +839,7 @@ } /* Add the Close button */ - close_button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); - gtk_box_pack_start(GTK_BOX(button_area), close_button, FALSE, FALSE, 0); - gtk_widget_show(close_button); + close_button = gtk_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE); g_signal_connect_swapped(G_OBJECT(close_button), "clicked", G_CALLBACK(searchresults_close_cb), data);
--- a/pidgin/gtkpounce.c Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/gtkpounce.c Tue Aug 28 01:14:08 2007 +0000 @@ -467,7 +467,6 @@ PidginPounceDialog *dialog; GtkWidget *window; GtkWidget *label; - GtkWidget *bbox; GtkWidget *vbox1, *vbox2; GtkWidget *hbox; GtkWidget *button; @@ -513,17 +512,16 @@ sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); /* Create the window. */ - dialog->window = window = pidgin_create_window((cur_pounce == NULL ? _("New Buddy Pounce") : _("Edit Buddy Pounce")), - PIDGIN_HIG_BORDER, "buddy_pounce", FALSE) ; - gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG); + dialog->window = window = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(window), (cur_pounce == NULL ? _("New Buddy Pounce") : _("Edit Buddy Pounce"))); + gtk_window_set_role(GTK_WINDOW(window), "buddy_pounce"); + gtk_container_set_border_width(GTK_CONTAINER(dialog->window), PIDGIN_HIG_BORDER); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(delete_win_cb), dialog); /* Create the parent vbox for everything. */ - vbox1 = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(window), vbox1); - gtk_widget_show(vbox1); + vbox1 = GTK_DIALOG(window)->vbox; /* Create the vbox that will contain all the prefs stuff. */ vbox2 = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); @@ -808,26 +806,13 @@ gtk_widget_show(dialog->on_away); gtk_widget_show(dialog->save_pounce); - /* Now the button box! */ - bbox = gtk_hbutton_box_new(); - gtk_box_set_spacing(GTK_BOX(bbox), PIDGIN_HIG_BOX_SPACE); - gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); - gtk_box_pack_end(GTK_BOX(vbox1), bbox, FALSE, FALSE, 0); - gtk_widget_show(bbox); - /* Cancel button */ - button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); - gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); - gtk_widget_show(button); - + button = gtk_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(cancel_cb), dialog); /* Save button */ - dialog->save_button = button = gtk_button_new_from_stock(GTK_STOCK_SAVE); - gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); - gtk_widget_show(button); - + dialog->save_button = button = gtk_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_SAVE, GTK_RESPONSE_OK); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(save_pounce_cb), dialog);
--- a/pidgin/gtkprefs.c Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/gtkprefs.c Tue Aug 28 01:14:08 2007 +0000 @@ -240,7 +240,7 @@ if (label != NULL) { gtk_label_set_mnemonic_widget(GTK_LABEL(label), dropdown); - pidgin_set_accessible_label (dropdown, label); + pidgin_set_accessible_relations (dropdown, label); } if (type == PURPLE_PREF_INT)
--- a/pidgin/gtkrequest.c Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/gtkrequest.c Tue Aug 28 01:14:08 2007 +0000 @@ -442,7 +442,7 @@ static void * pidgin_request_choice(const char *title, const char *primary, - const char *secondary, unsigned int default_value, + const char *secondary, int default_value, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, PurpleAccount *account, const char *who, PurpleConversation *conv, @@ -548,7 +548,7 @@ static void * pidgin_request_action(const char *title, const char *primary, - const char *secondary, unsigned int default_action, + const char *secondary, int default_action, PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data, size_t action_count, va_list actions) { @@ -1083,7 +1083,7 @@ data->cbs[0] = ok_cb; data->cbs[1] = cancel_cb; - + #ifdef _WIN32 data->dialog = win = pidgin_create_window(PIDGIN_ALERT_TITLE, PIDGIN_HIG_BORDER, "multifield", TRUE) ; #else /* !_WIN32 */
--- a/pidgin/gtksavedstatuses.c Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/gtksavedstatuses.c Tue Aug 28 01:14:08 2007 +0000 @@ -1450,7 +1450,9 @@ GtkWidget *win; GtkTreeIter iter; GtkCellRenderer *rend; - const char *status_id = NULL; + char *status_id = NULL; + char *message = NULL; + gboolean parent_dialog_has_substatus = FALSE; GList *list; gboolean select = FALSE; @@ -1553,25 +1555,29 @@ G_CALLBACK(substatus_editor_ok_cb), dialog); /* Seed the input widgets with the current values */ - /* TODO: Get the current values from our parent's list store, not the saved_status! */ - if (status_editor->original_title != NULL) - { + + /* Only look at the saved status if we can't find it in the parent status dialog's substatuses model */ + gtk_tree_model_get(GTK_TREE_MODEL(status_editor->model), &iter, + STATUS_EDITOR_COLUMN_ENABLE_SUBSTATUS, &parent_dialog_has_substatus, -1); + if (parent_dialog_has_substatus) { + gtk_tree_model_get(GTK_TREE_MODEL(status_editor->model), &iter, + STATUS_EDITOR_COLUMN_STATUS_ID, &status_id, + STATUS_EDITOR_COLUMN_STATUS_MESSAGE, &message, -1); + } else if (status_editor->original_title != NULL) { PurpleSavedStatus *saved_status = NULL; PurpleSavedStatusSub *substatus = NULL; - saved_status = purple_savedstatus_find(status_editor->original_title); - if (saved_status != NULL) - substatus = purple_savedstatus_get_substatus(saved_status, account); + if ((saved_status = purple_savedstatus_find(status_editor->original_title)) != NULL) { + if ((substatus = purple_savedstatus_get_substatus(saved_status, account)) != NULL) { + message = (char *)purple_savedstatus_substatus_get_message(substatus); + status_id = (char *)purple_status_type_get_id(purple_savedstatus_substatus_get_type(substatus)); + } + } + } + /* TODO: Else get the generic status type from our parent */ - if (substatus != NULL) - { - gtk_imhtml_append_text(dialog->message, - purple_savedstatus_substatus_get_message(substatus), - 0); - status_id = purple_status_type_get_id(purple_savedstatus_substatus_get_type(substatus)); - } - /* TODO: Else get the generic status type from our parent */ - } + if (message) + gtk_imhtml_append_text(dialog->message, message, 0); for (list = purple_account_get_status_types(account); list; list = list->next) { @@ -1607,6 +1613,12 @@ if (!select) gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0); + if (parent_dialog_has_substatus) { + /* These two were gotten from the parent tree model, so they need to be freed */ + g_free(status_id); + g_free(message); + } + gtk_widget_show_all(win); }
--- a/pidgin/gtksound.c Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/gtksound.c Tue Aug 28 01:14:08 2007 +0000 @@ -364,14 +364,14 @@ GError *err = NULL; switch (GST_MESSAGE_TYPE (msg)) { - case GST_MESSAGE_EOS: - gst_element_set_state(play, GST_STATE_NULL); - gst_object_unref(GST_OBJECT(play)); - break; case GST_MESSAGE_ERROR: gst_message_parse_error(msg, &err, NULL); purple_debug_error("gstreamer", "%s\n", err->message); g_error_free(err); + /* fall-through and clean up */ + case GST_MESSAGE_EOS: + gst_element_set_state(play, GST_STATE_NULL); + gst_object_unref(GST_OBJECT(play)); break; case GST_MESSAGE_WARNING: gst_message_parse_warning(msg, &err, NULL);
--- a/pidgin/gtkstatusbox.c Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/gtkstatusbox.c Tue Aug 28 01:14:08 2007 +0000 @@ -1415,15 +1415,15 @@ } -static void -toggled_cb(GtkWidget *widget, PidginStatusBox *box) +static +gboolean +toggled_cb(GtkWidget *widget, GdkEventButton *event, PidginStatusBox *box) { - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) { if (!box->popup_in_progress) pidgin_status_box_popup (box); - } else { - pidgin_status_box_popdown(box); - } + else + pidgin_status_box_popdown(box); +return TRUE; } static void @@ -1773,7 +1773,7 @@ g_signal_connect(G_OBJECT(status_box->toggle_button), "button-release-event", G_CALLBACK(button_released_cb), status_box); #endif - g_signal_connect(G_OBJECT(status_box->toggle_button), "toggled", + g_signal_connect(G_OBJECT(status_box->toggle_button), "button-press-event", G_CALLBACK(toggled_cb), status_box); g_signal_connect(G_OBJECT(buffer), "changed", G_CALLBACK(imhtml_changed_cb), status_box); g_signal_connect(G_OBJECT(status_box->imhtml), "format_function_toggle",
--- a/pidgin/gtkutils.c Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/gtkutils.c Tue Aug 28 01:14:08 2007 +0000 @@ -1147,12 +1147,30 @@ void pidgin_set_accessible_label (GtkWidget *w, GtkWidget *l) { + AtkObject *acc; + const gchar *label_text; + const gchar *existing_name; + + acc = gtk_widget_get_accessible (w); + + /* If this object has no name, set it's name with the label text */ + existing_name = atk_object_get_name (acc); + if (!existing_name) { + label_text = gtk_label_get_text (GTK_LABEL(l)); + if (label_text) + atk_object_set_name (acc, label_text); + } + + pidgin_set_accessible_relations(w, l); +} + +void +pidgin_set_accessible_relations (GtkWidget *w, GtkWidget *l) +{ AtkObject *acc, *label; AtkObject *rel_obj[1]; AtkRelationSet *set; AtkRelation *relation; - const gchar *label_text; - const gchar *existing_name; acc = gtk_widget_get_accessible (w); label = gtk_widget_get_accessible (l); @@ -1160,14 +1178,6 @@ /* Make sure mnemonics work */ gtk_label_set_mnemonic_widget(GTK_LABEL(l), w); - /* If this object has no name, set it's name with the label text */ - existing_name = atk_object_get_name (acc); - if (!existing_name) { - label_text = gtk_label_get_text (GTK_LABEL(l)); - if (label_text) - atk_object_set_name (acc, label_text); - } - /* Create the labeled-by relation */ set = atk_object_ref_relation_set (acc); rel_obj[0] = label;
--- a/pidgin/gtkutils.h Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/gtkutils.h Tue Aug 28 01:14:08 2007 +0000 @@ -418,6 +418,14 @@ void pidgin_set_accessible_label(GtkWidget *w, GtkWidget *l); /** + * Sets the labelled-by and label-for ATK relationships. + * + * @param w The widget that we want to label. + * @param l A GtkLabel that we want to use as the label for the widget. + */ +void pidgin_set_accessible_relations(GtkWidget *w, GtkWidget *l); + +/** * A helper function for GtkMenuPositionFuncs. This ensures the menu will * be kept on screen if possible. *
--- a/pidgin/pidgin.h Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/pidgin.h Tue Aug 28 01:14:08 2007 +0000 @@ -26,7 +26,7 @@ #ifndef _PIDGIN_H_ #define _PIDGIN_H_ -#ifndef _WIN32 +#ifdef GDK_WINDOWING_X11 # include <gdk/gdkx.h> #endif
--- a/pidgin/pidginstock.c Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/pidginstock.c Tue Aug 28 01:14:08 2007 +0000 @@ -105,7 +105,7 @@ { PIDGIN_STOCK_STATUS_AVAILABLE, "status", "available.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AVAILABLE_I }, { PIDGIN_STOCK_STATUS_AWAY, "status", "away.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AWAY_I }, { PIDGIN_STOCK_STATUS_BUSY, "status", "busy.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_BUSY_I }, - { PIDGIN_STOCK_STATUS_CHAT, "status", "chat.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, + { PIDGIN_STOCK_STATUS_CHAT, "status", "chat.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, { PIDGIN_STOCK_STATUS_INVISIBLE,"status", "invisible.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, { PIDGIN_STOCK_STATUS_XA, "status", "extended-away.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, PIDGIN_STOCK_STATUS_XA_I }, { PIDGIN_STOCK_STATUS_LOGIN, "status", "log-in.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, @@ -396,7 +396,7 @@ /* register custom icon sizes */ - microscopic = gtk_icon_size_register("pidgin-icon-size-tango-microscopic", 11, 11); + microscopic = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC, 11, 11); extra_small = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL, 16, 16); small = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_SMALL, 22, 22); medium = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_MEDIUM, 32, 32);
--- a/pidgin/pidginstock.h Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/pidginstock.h Tue Aug 28 01:14:08 2007 +0000 @@ -145,6 +145,7 @@ /** * For using icons that aren't one of the default GTK_ICON_SIZEs */ +#define PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC "pidgin-icon-size-tango-microscopic" #define PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL "pidgin-icon-size-tango-extra-small" #define PIDGIN_ICON_SIZE_TANGO_SMALL "pidgin-icon-size-tango-small" #define PIDGIN_ICON_SIZE_TANGO_MEDIUM "pidgin-icon-size-tango-medium"
--- a/pidgin/pixmaps/emotes/default/24/Makefile.am Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/pixmaps/emotes/default/24/Makefile.am Tue Aug 28 01:14:08 2007 +0000 @@ -95,7 +95,7 @@ love-over.png \ love.png \ lying.png \ - madtongue.png \ + mad-tongue.png \ mail.png \ male-fighter1.png \ male-fighter2.png \
--- a/pidgin/pixmaps/protocols/16/Makefile.am Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/pixmaps/protocols/16/Makefile.am Tue Aug 28 01:14:08 2007 +0000 @@ -10,6 +10,7 @@ jabber.png \ meanwhile.png \ msn.png \ + myspace.png \ qq.png \ silc.png \ simple.png \
--- a/pidgin/pixmaps/protocols/22/Makefile.am Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/pixmaps/protocols/22/Makefile.am Tue Aug 28 01:14:08 2007 +0000 @@ -10,6 +10,7 @@ jabber.png \ meanwhile.png \ msn.png \ + myspace.png \ qq.png \ silc.png \ simple.png \
--- a/pidgin/pixmaps/protocols/48/Makefile.am Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/pixmaps/protocols/48/Makefile.am Tue Aug 28 01:14:08 2007 +0000 @@ -9,6 +9,7 @@ jabber.png \ meanwhile.png \ msn.png \ + myspace.png \ qq.png \ silc.png \ simple.png \
--- a/pidgin/pixmaps/status/11/Makefile.am Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/pixmaps/status/11/Makefile.am Tue Aug 28 01:14:08 2007 +0000 @@ -1,4 +1,4 @@ -SUBDIRS = scalable +SUBDIRS = scalable rtl EXTRA_DIST = available.png \ away.png \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/pixmaps/status/11/rtl/Makefile.am Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,6 @@ +EXTRA_DIST = extended-away.png + +pidginstatuspixdir = $(datadir)/pixmaps/pidgin/status/11/rtl + +pidginstatuspix_DATA = $(EXTRA_DIST) +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/pixmaps/status/11/rtl/Makefile.mingw Tue Aug 28 01:14:08 2007 +0000 @@ -0,0 +1,20 @@ +# +# Makefile.mingw +# +# Description: Makefile for win32 (mingw) version of Pidgin pixmaps +# + +PIDGIN_TREE_TOP := ../../../../.. +include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak + +datadir = $(PIDGIN_INSTALL_DIR) +include ./Makefile.am + +.PHONY: install + +install: + if test '$(pidginstatuspix_DATA)'; then \ + mkdir -p $(pidginstatuspixdir); \ + cp $(pidginstatuspix_DATA) $(pidginstatuspixdir); \ + fi; +
--- a/pidgin/plugins/Makefile.am Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/plugins/Makefile.am Tue Aug 28 01:14:08 2007 +0000 @@ -16,9 +16,13 @@ PERL_DIR = perl endif +if ENABLE_GESTURES +GESTURE_DIR = gestures +endif + SUBDIRS = \ $(CAP_DIR) \ - gestures \ + $(GESTURE_DIR) \ $(GEVOLUTION_DIR) \ $(MUSICMESSAGING_DIR) \ $(PERL_DIR) \
--- a/pidgin/plugins/musicmessaging/musicmessaging.c Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/plugins/musicmessaging/musicmessaging.c Tue Aug 28 01:14:08 2007 +0000 @@ -71,10 +71,10 @@ /* Globals */ /* List of sessions */ -GList *conversations; +static GList *conversations; /* Pointer to this plugin */ -PurplePlugin *plugin_pointer; +static PurplePlugin *plugin_pointer; /* Define types needed for DBus */ DBusGConnection *connection; @@ -350,7 +350,16 @@ static gboolean intercept_received(PurpleAccount *account, char **sender, char **message, PurpleConversation *conv, int *flags) { - MMConversation *mmconv = mmconv_from_conv(conv); + MMConversation *mmconv; + + if (conv == NULL) { + /* XXX: This is just to avoid a crash (#2726). + * We may want to create the conversation instead of returning from here + */ + return FALSE; + } + + mmconv = mmconv_from_conv(conv); purple_debug_misc("purple-musicmessaging", "Intercepted: %s\n", *message); if (strstr(*message, MUSICMESSAGING_PREFIX))
--- a/pidgin/plugins/spellchk.c Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/plugins/spellchk.c Tue Aug 28 01:14:08 2007 +0000 @@ -667,7 +667,7 @@ return; } -static int buf_get_line(char *ibuf, char **buf, int *position, int len) +static int buf_get_line(char *ibuf, char **buf, int *position, gsize len) { int pos = *position; int spos = pos;
--- a/pidgin/plugins/win32/transparency/win2ktrans.c Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/plugins/win32/transparency/win2ktrans.c Tue Aug 28 01:14:08 2007 +0000 @@ -396,8 +396,12 @@ && pconv->unseen_state == PIDGIN_UNSEEN_NONE && pidgin_conv_window_get_gtkconv_count(win) == 1) { GtkWidget *window = win->window; + gboolean has_focus; - set_conv_window_trans(NULL, win); + g_object_get(G_OBJECT(window), "has-toplevel-focus", &has_focus, NULL); + + if (!has_focus || !purple_prefs_get_bool(OPT_WINTRANS_IM_ONFOCUS)) + set_conv_window_trans(NULL, win); if (g_signal_handler_find(G_OBJECT(window), G_SIGNAL_MATCH_FUNC, 0, 0, NULL, G_CALLBACK(focus_conv_win_cb), NULL) == 0) {
--- a/pidgin/win32/nsis/pidgin-installer.nsi Sat Aug 25 20:32:15 2007 +0000 +++ b/pidgin/win32/nsis/pidgin-installer.nsi Tue Aug 28 01:14:08 2007 +0000 @@ -554,6 +554,10 @@ Push "msnim" Call RegisterURIHandler SectionEnd + Section /o "myim:" SecURI_MYIM + Push "myim" + Call RegisterURIHandler + SectionEnd Section /o "ymsgr:" SecURI_YMSGR Push "ymsgr" Call RegisterURIHandler @@ -706,6 +710,7 @@ Delete "$INSTDIR\plugins\libicq.dll" Delete "$INSTDIR\plugins\libirc.dll" Delete "$INSTDIR\plugins\libmsn.dll" + Delete "$INSTDIR\plugins\libmyspace.dll" Delete "$INSTDIR\plugins\libnapster.dll" Delete "$INSTDIR\plugins\libnovell.dll" Delete "$INSTDIR\plugins\libqq.dll"
--- a/po/POTFILES.in Sat Aug 25 20:32:15 2007 +0000 +++ b/po/POTFILES.in Tue Aug 28 01:14:08 2007 +0000 @@ -96,6 +96,7 @@ libpurple/protocols/msn/state.c libpurple/protocols/msn/switchboard.c libpurple/protocols/msn/userlist.c +libpurple/protocols/myspace/myspace.c libpurple/protocols/novell/nmuser.c libpurple/protocols/novell/novell.c libpurple/protocols/oscar/flap_connection.c
--- a/po/gl.po Sat Aug 25 20:32:15 2007 +0000 +++ b/po/gl.po Tue Aug 28 01:14:08 2007 +0000 @@ -7,8 +7,8 @@ msgstr "" "Project-Id-Version: pidgin\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-08-01 03:21-0400\n" -"PO-Revision-Date: 2007-08-02 14:19+0200\n" +"POT-Creation-Date: 2007-08-20 03:22-0400\n" +"PO-Revision-Date: 2007-08-20 13:55+0200\n" "Last-Translator: Frco. Javier Rial Rodríguez <fjrial@cesga.es>\n" "Language-Team: Galician <mancomun@mancomun.org>\n" "MIME-Version: 1.0\n" @@ -19,17 +19,17 @@ #. Translators may want to transliterate the name. #. It is not to be translated. -#: ../finch/finch.c:70 ../finch/finch.c:298 ../finch/finch.c:327 -#: ../finch/finch.c:404 +#: ../finch/finch.c:64 ../finch/finch.c:300 ../finch/finch.c:329 +#: ../finch/finch.c:417 msgid "Finch" msgstr "Pidgin" -#: ../finch/finch.c:204 +#: ../finch/finch.c:206 #, c-format msgid "%s. Try `%s -h' for more information.\n" msgstr "%s. Tente `%s -h' para máis información.\n" -#: ../finch/finch.c:206 +#: ../finch/finch.c:208 #, c-format msgid "" "%s\n" @@ -50,7 +50,7 @@ " -n, --nologin non iniciar a sesión automaticamente\n" " -v, --version mostrar a versión actual e saír\n" -#: ../finch/finch.c:325 ../pidgin/gtkmain.c:709 +#: ../finch/finch.c:327 ../pidgin/gtkmain.c:711 #, c-format msgid "" "%s encountered errors migrating your settings from %s to %s. Please " @@ -69,7 +69,8 @@ #: ../libpurple/protocols/jabber/chat.c:688 #: ../libpurple/protocols/jabber/jabber.c:1227 #: ../libpurple/protocols/qq/group_join.c:328 -#: ../libpurple/protocols/silc/ops.c:57 ../libpurple/protocols/silc/ops.c:1456 +#: ../libpurple/protocols/qq/im.c:576 ../libpurple/protocols/silc/ops.c:57 +#: ../libpurple/protocols/silc/ops.c:1456 #: ../libpurple/protocols/silc10/ops.c:1451 msgid "Error" msgstr "Erro" @@ -99,7 +100,7 @@ msgstr "(Probablemente olvidaches executar 'make install'.)" #: ../finch/gntaccount.c:490 ../pidgin/gtkaccount.c:1478 -#: ../pidgin/gtkblist.c:4024 +#: ../pidgin/gtkblist.c:4023 msgid "Modify Account" msgstr "Modificar a conta" @@ -129,14 +130,14 @@ #: ../finch/gntaccount.c:569 ../finch/gntaccount.c:632 #: ../finch/gntaccount.c:878 ../finch/gntblist.c:343 ../finch/gntblist.c:420 #: ../finch/gntblist.c:455 ../finch/gntblist.c:802 ../finch/gntblist.c:1004 -#: ../finch/gntblist.c:1100 ../finch/gntblist.c:2209 ../finch/gntplugin.c:378 +#: ../finch/gntblist.c:1100 ../finch/gntblist.c:2212 ../finch/gntplugin.c:378 #: ../finch/gntpounce.c:458 ../finch/gntpounce.c:656 ../finch/gntprefs.c:264 -#: ../finch/gntstatus.c:144 ../finch/gntstatus.c:481 ../finch/gntstatus.c:606 -#: ../libpurple/account.c:984 ../libpurple/account.c:1234 -#: ../libpurple/account.c:1269 ../libpurple/conversation.c:1173 -#: ../libpurple/plugins/buddynote.c:51 ../libpurple/protocols/gg/gg.c:502 -#: ../libpurple/protocols/gg/gg.c:661 ../libpurple/protocols/gg/gg.c:798 -#: ../libpurple/protocols/gg/gg.c:879 +#: ../finch/gntsound.c:1046 ../finch/gntstatus.c:144 ../finch/gntstatus.c:481 +#: ../finch/gntstatus.c:606 ../libpurple/account.c:984 +#: ../libpurple/account.c:1234 ../libpurple/account.c:1269 +#: ../libpurple/conversation.c:1173 ../libpurple/plugins/buddynote.c:51 +#: ../libpurple/protocols/gg/gg.c:502 ../libpurple/protocols/gg/gg.c:661 +#: ../libpurple/protocols/gg/gg.c:798 ../libpurple/protocols/gg/gg.c:879 #: ../libpurple/protocols/jabber/buddy.c:588 #: ../libpurple/protocols/jabber/buddy.c:1826 #: ../libpurple/protocols/jabber/buddy.c:1862 @@ -148,19 +149,19 @@ #: ../libpurple/protocols/msn/msn.c:259 ../libpurple/protocols/msn/msn.c:276 #: ../libpurple/protocols/msn/msn.c:293 ../libpurple/protocols/msn/msn.c:310 #: ../libpurple/protocols/msn/msn.c:331 -#: ../libpurple/protocols/oscar/oscar.c:6083 +#: ../libpurple/protocols/oscar/oscar.c:6042 #: ../libpurple/protocols/oscar/peer.c:1023 #: ../libpurple/protocols/qq/buddy_info.c:484 #: ../libpurple/protocols/qq/buddy_opt.c:214 -#: ../libpurple/protocols/qq/buddy_opt.c:409 +#: ../libpurple/protocols/qq/buddy_opt.c:411 #: ../libpurple/protocols/qq/group.c:124 #: ../libpurple/protocols/qq/group_join.c:140 #: ../libpurple/protocols/qq/group_join.c:365 #: ../libpurple/protocols/qq/group_opt.c:144 #: ../libpurple/protocols/qq/group_opt.c:399 -#: ../libpurple/protocols/qq/sys_msg.c:115 -#: ../libpurple/protocols/qq/sys_msg.c:174 -#: ../libpurple/protocols/qq/sys_msg.c:269 +#: ../libpurple/protocols/qq/sys_msg.c:113 +#: ../libpurple/protocols/qq/sys_msg.c:172 +#: ../libpurple/protocols/qq/sys_msg.c:266 #: ../libpurple/protocols/sametime/sametime.c:3389 #: ../libpurple/protocols/sametime/sametime.c:3475 #: ../libpurple/protocols/sametime/sametime.c:3646 @@ -183,36 +184,37 @@ #: ../libpurple/protocols/silc10/ops.c:1904 #: ../libpurple/protocols/silc10/silc.c:736 #: ../libpurple/protocols/silc10/silc.c:942 -#: ../libpurple/protocols/yahoo/yahoo.c:1002 -#: ../libpurple/protocols/yahoo/yahoo.c:3333 -#: ../libpurple/protocols/yahoo/yahoo.c:3344 ../pidgin/gtkaccount.c:1917 -#: ../pidgin/gtkaccount.c:2511 ../pidgin/gtkblist.c:5926 -#: ../pidgin/gtkdialogs.c:747 ../pidgin/gtkdialogs.c:885 -#: ../pidgin/gtkdialogs.c:977 ../pidgin/gtkdialogs.c:997 -#: ../pidgin/gtkdialogs.c:1021 ../pidgin/gtkdialogs.c:1043 -#: ../pidgin/gtkdialogs.c:1091 ../pidgin/gtkdialogs.c:1132 -#: ../pidgin/gtkdialogs.c:1188 ../pidgin/gtkdialogs.c:1227 -#: ../pidgin/gtkdialogs.c:1254 ../pidgin/gtkimhtmltoolbar.c:425 +#: ../libpurple/protocols/yahoo/yahoo.c:1016 +#: ../libpurple/protocols/yahoo/yahoo.c:3398 +#: ../libpurple/protocols/yahoo/yahoo.c:3409 ../pidgin/gtkaccount.c:1917 +#: ../pidgin/gtkaccount.c:2511 ../pidgin/gtkblist.c:5925 +#: ../pidgin/gtkdialogs.c:750 ../pidgin/gtkdialogs.c:888 +#: ../pidgin/gtkdialogs.c:980 ../pidgin/gtkdialogs.c:1000 +#: ../pidgin/gtkdialogs.c:1024 ../pidgin/gtkdialogs.c:1046 +#: ../pidgin/gtkdialogs.c:1094 ../pidgin/gtkdialogs.c:1135 +#: ../pidgin/gtkdialogs.c:1191 ../pidgin/gtkdialogs.c:1230 +#: ../pidgin/gtkdialogs.c:1257 ../pidgin/gtkimhtmltoolbar.c:425 #: ../pidgin/gtklog.c:327 ../pidgin/gtkplugin.c:288 ../pidgin/gtkpounce.c:1115 #: ../pidgin/gtkprivacy.c:562 ../pidgin/gtkprivacy.c:578 #: ../pidgin/gtkprivacy.c:603 ../pidgin/gtkprivacy.c:617 #: ../pidgin/gtkrequest.c:270 ../pidgin/gtksavedstatuses.c:344 -#: ../pidgin/gtkstatusbox.c:1572 +#: ../pidgin/gtkstatusbox.c:1573 msgid "Cancel" msgstr "Cancelar" #. Save button #. Save #: ../finch/gntaccount.c:573 ../finch/gntplugin.c:378 ../finch/gntpounce.c:464 -#: ../finch/gntprefs.c:264 ../finch/gntstatus.c:484 ../finch/gntstatus.c:594 -#: ../libpurple/account.c:1268 ../libpurple/plugins/buddynote.c:50 +#: ../finch/gntprefs.c:264 ../finch/gntsound.c:1043 ../finch/gntstatus.c:484 +#: ../finch/gntstatus.c:594 ../libpurple/account.c:1268 +#: ../libpurple/plugins/buddynote.c:50 #: ../libpurple/protocols/jabber/buddy.c:587 ../pidgin/gtkdebug.c:748 #: ../pidgin/gtkrequest.c:276 msgid "Save" msgstr "Gardar" #: ../finch/gntaccount.c:626 ../pidgin/gtkaccount.c:1909 -#: ../pidgin/gtksavedstatuses.c:332 ../pidgin/gtkstatusbox.c:1566 +#: ../pidgin/gtksavedstatuses.c:332 ../pidgin/gtkstatusbox.c:1567 #, c-format msgid "Are you sure you want to delete %s?" msgstr "Está seguro de que quere borrar %s?" @@ -226,11 +228,11 @@ #: ../finch/gntpounce.c:655 ../finch/gntpounce.c:718 ../finch/gntstatus.c:143 #: ../finch/gntstatus.c:209 ../pidgin/gtkaccount.c:1916 ../pidgin/gtklog.c:326 #: ../pidgin/gtkpounce.c:1114 ../pidgin/gtkrequest.c:273 -#: ../pidgin/gtksavedstatuses.c:343 ../pidgin/gtkstatusbox.c:1571 +#: ../pidgin/gtksavedstatuses.c:343 ../pidgin/gtkstatusbox.c:1572 msgid "Delete" msgstr "Borrar" -#: ../finch/gntaccount.c:663 ../finch/gntblist.c:2115 ../finch/gntui.c:77 +#: ../finch/gntaccount.c:663 ../finch/gntblist.c:2118 ../finch/gntui.c:81 #: ../pidgin/gtkaccount.c:2334 ../pidgin/gtkdocklet.c:522 msgid "Accounts" msgstr "Contas" @@ -243,13 +245,13 @@ #: ../finch/gntaccount.c:692 ../finch/gntaccount.c:877 ../finch/gntblist.c:342 #: ../finch/gntblist.c:420 ../finch/gntblist.c:455 ../finch/gntnotify.c:379 #: ../finch/gntpounce.c:702 ../finch/gntstatus.c:198 -#: ../libpurple/protocols/gg/gg.c:878 ../libpurple/protocols/qq/sys_msg.c:116 -#: ../libpurple/protocols/qq/sys_msg.c:175 -#: ../libpurple/protocols/qq/sys_msg.c:270 +#: ../libpurple/protocols/gg/gg.c:878 ../libpurple/protocols/qq/sys_msg.c:114 +#: ../libpurple/protocols/qq/sys_msg.c:173 +#: ../libpurple/protocols/qq/sys_msg.c:267 #: ../libpurple/protocols/sametime/sametime.c:5487 #: ../libpurple/protocols/silc/chat.c:615 #: ../libpurple/protocols/silc10/chat.c:599 ../pidgin/gtkaccount.c:2510 -#: ../pidgin/gtkblist.c:5925 ../pidgin/gtkconv.c:1650 +#: ../pidgin/gtkblist.c:5924 ../pidgin/gtkconv.c:1654 #: ../pidgin/gtkrequest.c:274 msgid "Add" msgstr "Engadir" @@ -268,24 +270,24 @@ msgid "Add buddy to your list?" msgstr "Quere engadir o contacto á súa lista?" -#: ../finch/gntaccount.c:927 ../pidgin/gtkaccount.c:2561 +#: ../finch/gntaccount.c:933 ../pidgin/gtkaccount.c:2567 #, c-format msgid "%s%s%s%s wants to add %s to his or her buddy list%s%s" msgstr "%s%s%s%s quere engadir a %s á súa lista de contactos%s%s" -#: ../finch/gntaccount.c:952 ../finch/gntaccount.c:955 -#: ../finch/gntaccount.c:982 ../pidgin/gtkaccount.c:2584 -#: ../pidgin/gtkaccount.c:2590 +#: ../finch/gntaccount.c:958 ../finch/gntaccount.c:961 +#: ../finch/gntaccount.c:988 ../pidgin/gtkaccount.c:2590 +#: ../pidgin/gtkaccount.c:2596 msgid "Authorize buddy?" msgstr "Autorizar o contacto?" -#: ../finch/gntaccount.c:959 ../finch/gntaccount.c:986 -#: ../pidgin/gtkaccount.c:2585 ../pidgin/gtkaccount.c:2591 +#: ../finch/gntaccount.c:965 ../finch/gntaccount.c:992 +#: ../pidgin/gtkaccount.c:2591 ../pidgin/gtkaccount.c:2597 msgid "Authorize" msgstr "Autorizar" -#: ../finch/gntaccount.c:960 ../finch/gntaccount.c:987 -#: ../pidgin/gtkaccount.c:2586 ../pidgin/gtkaccount.c:2592 +#: ../finch/gntaccount.c:966 ../finch/gntaccount.c:993 +#: ../pidgin/gtkaccount.c:2592 ../pidgin/gtkaccount.c:2598 msgid "Deny" msgstr "Rexeitar" @@ -309,7 +311,7 @@ msgid "Error adding buddy" msgstr "Erro ao engadir un contacto" -#: ../finch/gntblist.c:324 ../libpurple/protocols/oscar/oscar.c:2860 +#: ../finch/gntblist.c:324 ../libpurple/protocols/oscar/oscar.c:2858 #: ../pidgin/gtkaccount.c:1990 ../pidgin/gtksavedstatuses.c:979 msgid "Screen Name" msgstr "Nome de usuario" @@ -320,8 +322,8 @@ #: ../libpurple/protocols/silc10/chat.c:590 #: ../libpurple/protocols/yahoo/yahoo_profile.c:704 #: ../libpurple/protocols/zephyr/zephyr.c:788 -#: ../libpurple/protocols/zephyr/zephyr.c:1207 ../pidgin/gtkdialogs.c:996 -#: ../pidgin/gtkdialogs.c:1020 ../pidgin/gtkdialogs.c:1042 +#: ../libpurple/protocols/zephyr/zephyr.c:1207 ../pidgin/gtkdialogs.c:999 +#: ../pidgin/gtkdialogs.c:1023 ../pidgin/gtkdialogs.c:1045 #: ../pidgin/gtkrequest.c:277 msgid "Alias" msgstr "Alias" @@ -330,10 +332,10 @@ msgid "Group" msgstr "Grupo" -#: ../finch/gntblist.c:334 ../finch/gntblist.c:400 ../finch/gntblist.c:1301 +#: ../finch/gntblist.c:334 ../finch/gntblist.c:400 ../finch/gntblist.c:1304 #: ../finch/gntnotify.c:173 ../finch/gntstatus.c:572 #: ../libpurple/plugins/idle.c:153 ../libpurple/plugins/idle.c:190 -#: ../pidgin/gtkblist.c:2983 ../pidgin/gtknotify.c:482 +#: ../pidgin/gtkblist.c:2986 ../pidgin/gtknotify.c:488 #: ../pidgin/gtkpounce.c:1282 ../pidgin/plugins/gevolution/gevolution.c:445 msgid "Account" msgstr "Conta" @@ -347,7 +349,7 @@ #: ../libpurple/protocols/silc10/buddy.c:1033 #: ../libpurple/protocols/silc10/buddy.c:1080 #: ../libpurple/protocols/silc10/buddy.c:1180 -#: ../libpurple/protocols/yahoo/yahoo.c:3178 ../pidgin/gtkblist.c:5432 +#: ../libpurple/protocols/yahoo/yahoo.c:3243 ../pidgin/gtkblist.c:5431 #: ../pidgin/plugins/gevolution/add_buddy_dialog.c:445 msgid "Add Buddy" msgstr "Engadir contacto" @@ -375,7 +377,7 @@ msgid "Auto-join" msgstr "Conectar automaticamente" -#: ../finch/gntblist.c:418 ../finch/gntblist.c:853 ../pidgin/gtkblist.c:5811 +#: ../finch/gntblist.c:418 ../finch/gntblist.c:853 ../pidgin/gtkblist.c:5810 msgid "Add Chat" msgstr "Engadir conversa" @@ -397,7 +399,7 @@ #: ../finch/gntblist.c:453 ../finch/gntblist.c:855 #: ../libpurple/protocols/sametime/sametime.c:5397 -#: ../libpurple/protocols/sametime/sametime.c:5485 ../pidgin/gtkblist.c:5922 +#: ../libpurple/protocols/sametime/sametime.c:5485 ../pidgin/gtkblist.c:5921 msgid "Add Group" msgstr "Engadir un grupo" @@ -429,7 +431,7 @@ msgid "Retrieving..." msgstr "Recuperando..." -#: ../finch/gntblist.c:903 ../finch/gntconv.c:407 +#: ../finch/gntblist.c:903 ../finch/gntconv.c:431 #: ../libpurple/protocols/silc/chat.c:899 #: ../libpurple/protocols/silc10/chat.c:883 msgid "Get Info" @@ -440,10 +442,10 @@ msgstr "Engadir aviso de contacto" #. if (q_bud && is_online(q_bud->status)) { -#: ../finch/gntblist.c:914 ../finch/gntconv.c:419 +#: ../finch/gntblist.c:914 ../finch/gntconv.c:443 #: ../libpurple/protocols/jabber/si.c:868 -#: ../libpurple/protocols/oscar/oscar.c:654 ../libpurple/protocols/qq/qq.c:585 -#: ../pidgin/gtkconv.c:1598 +#: ../libpurple/protocols/oscar/oscar.c:653 ../libpurple/protocols/qq/qq.c:587 +#: ../pidgin/gtkconv.c:1602 msgid "Send File" msgstr "Enviar o ficheiro" @@ -487,15 +489,15 @@ msgstr "Confirmar a eliminación" #: ../finch/gntblist.c:1099 ../finch/gntblist.c:1251 ../finch/gntft.c:224 -#: ../pidgin/gtkconv.c:1647 ../pidgin/gtkrequest.c:275 +#: ../pidgin/gtkconv.c:1651 ../pidgin/gtkrequest.c:275 #: ../pidgin/gtkstatusbox.c:263 msgid "Remove" msgstr "Eliminar" #. Buddy List -#: ../finch/gntblist.c:1225 ../finch/gntblist.c:2294 ../finch/gntprefs.c:257 -#: ../finch/gntui.c:78 ../pidgin/gtkblist.c:4268 -#: ../pidgin/plugins/win32/winprefs/winprefs.c:330 +#: ../finch/gntblist.c:1225 ../finch/gntblist.c:2297 ../finch/gntprefs.c:257 +#: ../finch/gntui.c:82 ../pidgin/gtkblist.c:4267 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:326 msgid "Buddy List" msgstr "Lista de contactos" @@ -508,7 +510,7 @@ msgstr "Cambiar etiqueta" #. General -#: ../finch/gntblist.c:1296 ../libpurple/protocols/gg/gg.c:632 +#: ../finch/gntblist.c:1297 ../libpurple/protocols/gg/gg.c:632 #: ../libpurple/protocols/gg/gg.c:1045 ../libpurple/protocols/gg/gg.c:1118 #: ../libpurple/protocols/gg/gg.c:2202 #: ../libpurple/protocols/jabber/buddy.c:274 @@ -526,29 +528,29 @@ #: ../libpurple/protocols/silc10/ops.c:1036 #: ../libpurple/protocols/silc10/ops.c:1179 #: ../libpurple/protocols/silc10/ops.c:1328 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1066 ../pidgin/gtkblist.c:3007 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1066 ../pidgin/gtkblist.c:3010 msgid "Nickname" msgstr "Alias" #. Idle stuff -#: ../finch/gntblist.c:1316 ../finch/gntprefs.c:260 -#: ../libpurple/protocols/bonjour/bonjour.c:314 +#: ../finch/gntblist.c:1319 ../finch/gntprefs.c:260 +#: ../libpurple/protocols/bonjour/bonjour.c:333 #: ../libpurple/protocols/jabber/buddy.c:647 #: ../libpurple/protocols/jabber/buddy.c:687 #: ../libpurple/protocols/msn/msn.c:516 ../libpurple/protocols/msn/state.c:32 #: ../libpurple/protocols/novell/novell.c:2825 -#: ../libpurple/protocols/oscar/oscar.c:2884 -#: ../libpurple/protocols/yahoo/yahoo.c:2932 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:710 ../pidgin/gtkblist.c:3035 -#: ../pidgin/gtkblist.c:3444 ../pidgin/gtkprefs.c:1918 +#: ../libpurple/protocols/oscar/oscar.c:2882 +#: ../libpurple/protocols/yahoo/yahoo.c:2997 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:710 ../pidgin/gtkblist.c:3038 +#: ../pidgin/gtkblist.c:3443 ../pidgin/gtkprefs.c:1920 msgid "Idle" msgstr "Inactivo" -#: ../finch/gntblist.c:1330 +#: ../finch/gntblist.c:1333 msgid "On Mobile" msgstr "No móbil" -#: ../finch/gntblist.c:1411 +#: ../finch/gntblist.c:1414 #, c-format msgid "" "Online: %d\n" @@ -557,12 +559,12 @@ "Conectado: %d\n" "Total: %d" -#: ../finch/gntblist.c:1420 +#: ../finch/gntblist.c:1423 #, c-format msgid "Account: %s (%s)" msgstr "Conta: %s (%s)" -#: ../finch/gntblist.c:1432 +#: ../finch/gntblist.c:1435 #, c-format msgid "" "\n" @@ -571,47 +573,47 @@ "\n" "Visto por última vez: hai %s" -#: ../finch/gntblist.c:1698 ../pidgin/gtkdocklet.c:470 -#: ../pidgin/gtkstatusbox.c:1070 +#: ../finch/gntblist.c:1701 ../pidgin/gtkdocklet.c:470 +#: ../pidgin/gtkstatusbox.c:1071 msgid "New..." msgstr "Novo..." -#: ../finch/gntblist.c:1705 ../pidgin/gtkdocklet.c:471 -#: ../pidgin/gtkstatusbox.c:1071 +#: ../finch/gntblist.c:1708 ../pidgin/gtkdocklet.c:471 +#: ../pidgin/gtkstatusbox.c:1072 msgid "Saved..." msgstr "Gardado..." -#: ../finch/gntblist.c:2083 ../finch/gntplugin.c:254 ../finch/gntui.c:82 +#: ../finch/gntblist.c:2086 ../finch/gntplugin.c:254 ../finch/gntui.c:86 #: ../pidgin/gtkdocklet.c:523 ../pidgin/gtkplugin.c:530 msgid "Plugins" msgstr "Complementos" -#: ../finch/gntblist.c:2190 ../pidgin/gtkdialogs.c:728 -#: ../pidgin/gtkdialogs.c:866 ../pidgin/gtkdialogs.c:947 +#: ../finch/gntblist.c:2193 ../pidgin/gtkdialogs.c:731 +#: ../pidgin/gtkdialogs.c:869 ../pidgin/gtkdialogs.c:950 msgid "_Name" msgstr "_Nome" -#: ../finch/gntblist.c:2195 ../pidgin/gtkdialogs.c:733 -#: ../pidgin/gtkdialogs.c:871 ../pidgin/gtkdialogs.c:952 +#: ../finch/gntblist.c:2198 ../pidgin/gtkdialogs.c:736 +#: ../pidgin/gtkdialogs.c:874 ../pidgin/gtkdialogs.c:955 msgid "_Account" msgstr "_Conta" -#: ../finch/gntblist.c:2203 ../pidgin/gtkdialogs.c:741 +#: ../finch/gntblist.c:2206 ../pidgin/gtkdialogs.c:744 msgid "New Instant Message" msgstr "Mensaxe instantánea nova" -#: ../finch/gntblist.c:2205 ../pidgin/gtkdialogs.c:743 +#: ../finch/gntblist.c:2208 ../pidgin/gtkdialogs.c:746 msgid "Please enter the screen name or alias of the person you would like to IM." msgstr "Introduza o nome de usuario ou o alias da persoa con quen quere comunicarse." -#: ../finch/gntblist.c:2208 ../finch/gntnotify.c:79 ../libpurple/account.c:983 +#: ../finch/gntblist.c:2211 ../finch/gntnotify.c:79 ../libpurple/account.c:983 #: ../libpurple/account.c:1233 ../libpurple/protocols/gg/gg.c:501 #: ../libpurple/protocols/gg/gg.c:660 ../libpurple/protocols/gg/gg.c:797 #: ../libpurple/protocols/jabber/jabber.c:1383 #: ../libpurple/protocols/jabber/xdata.c:336 #: ../libpurple/protocols/msn/msn.c:258 ../libpurple/protocols/msn/msn.c:275 #: ../libpurple/protocols/msn/msn.c:292 ../libpurple/protocols/msn/msn.c:309 -#: ../libpurple/protocols/oscar/oscar.c:6082 +#: ../libpurple/protocols/oscar/oscar.c:6041 #: ../libpurple/protocols/silc/buddy.c:454 #: ../libpurple/protocols/silc/buddy.c:1190 #: ../libpurple/protocols/silc/chat.c:447 @@ -628,40 +630,40 @@ #: ../libpurple/protocols/silc10/ops.c:1297 #: ../libpurple/protocols/silc10/ops.c:1903 #: ../libpurple/protocols/silc10/silc.c:735 -#: ../libpurple/protocols/yahoo/yahoo.c:1001 -#: ../libpurple/protocols/yahoo/yahoo.c:3332 -#: ../libpurple/protocols/yahoo/yahoo.c:3343 ../pidgin/gtkblist.c:4023 -#: ../pidgin/gtkdialogs.c:746 ../pidgin/gtkdialogs.c:884 -#: ../pidgin/gtkdialogs.c:976 ../pidgin/gtkrequest.c:269 +#: ../libpurple/protocols/yahoo/yahoo.c:1015 +#: ../libpurple/protocols/yahoo/yahoo.c:3397 +#: ../libpurple/protocols/yahoo/yahoo.c:3408 ../pidgin/gtkblist.c:4022 +#: ../pidgin/gtkdialogs.c:749 ../pidgin/gtkdialogs.c:887 +#: ../pidgin/gtkdialogs.c:979 ../pidgin/gtkrequest.c:269 msgid "OK" msgstr "Aceptar" #. Create the "Options" frame. -#: ../finch/gntblist.c:2228 ../finch/gntpounce.c:446 ../pidgin/gtkpounce.c:791 +#: ../finch/gntblist.c:2231 ../finch/gntpounce.c:446 ../pidgin/gtkpounce.c:791 msgid "Options" msgstr "Opcións" -#: ../finch/gntblist.c:2234 +#: ../finch/gntblist.c:2237 msgid "Send IM..." msgstr "Enviar MI..." -#: ../finch/gntblist.c:2238 +#: ../finch/gntblist.c:2241 msgid "Show empty groups" msgstr "Mostrar grupos baleiros" -#: ../finch/gntblist.c:2244 +#: ../finch/gntblist.c:2247 msgid "Show offline buddies" msgstr "Mostrar contactos desconectados" -#: ../finch/gntblist.c:2250 +#: ../finch/gntblist.c:2253 msgid "Sort by status" msgstr "Ordenar por estado" -#: ../finch/gntblist.c:2254 +#: ../finch/gntblist.c:2257 msgid "Sort alphabetically" msgstr "Ordenar alfabeticamente" -#: ../finch/gntblist.c:2258 +#: ../finch/gntblist.c:2261 msgid "Sort by log size" msgstr "Ordenar por tamaño de rexistro" @@ -688,41 +690,41 @@ "Pidgin non tentará reconectar a conta ata que vostede corrixa o erro " "e a volva activar." -#: ../finch/gntconv.c:117 +#: ../finch/gntconv.c:118 msgid "No such command." msgstr "Non existe o comando." -#: ../finch/gntconv.c:121 ../pidgin/gtkconv.c:491 +#: ../finch/gntconv.c:122 ../pidgin/gtkconv.c:495 msgid "Syntax Error: You typed the wrong number of arguments to that command." msgstr "Erro de sintaxe: O número de argumentos para ese comando non é correcto." -#: ../finch/gntconv.c:126 ../pidgin/gtkconv.c:497 +#: ../finch/gntconv.c:127 ../pidgin/gtkconv.c:501 msgid "Your command failed for an unknown reason." msgstr "O seu comando fallou por motivos descoñecidos." -#: ../finch/gntconv.c:131 ../pidgin/gtkconv.c:504 +#: ../finch/gntconv.c:132 ../pidgin/gtkconv.c:508 msgid "That command only works in chats, not IMs." msgstr "Ese comando só funciona en conversas, non en MI." -#: ../finch/gntconv.c:134 ../pidgin/gtkconv.c:507 +#: ../finch/gntconv.c:135 ../pidgin/gtkconv.c:511 msgid "That command only works in IMs, not chats." msgstr "Ese comando só funciona en MI, non en conversas." -#: ../finch/gntconv.c:138 ../pidgin/gtkconv.c:512 +#: ../finch/gntconv.c:139 ../pidgin/gtkconv.c:516 msgid "That command doesn't work on this protocol." msgstr "Ese comando non funciona neste protocolo." -#: ../finch/gntconv.c:224 +#: ../finch/gntconv.c:225 #, c-format msgid "%s (%s -- %s)" msgstr "%s (%s -- %s)" -#: ../finch/gntconv.c:247 +#: ../finch/gntconv.c:248 #, c-format msgid "%s [%s]" msgstr "%s [%s]" -#: ../finch/gntconv.c:252 ../finch/gntconv.c:647 +#: ../finch/gntconv.c:253 ../finch/gntconv.c:672 #, c-format msgid "" "\n" @@ -731,48 +733,48 @@ "\n" "%s está a escribir..." -#: ../finch/gntconv.c:271 +#: ../finch/gntconv.c:272 msgid "You have left this chat." msgstr "Abandonou esta conversa." -#: ../finch/gntconv.c:342 +#: ../finch/gntconv.c:366 msgid "Send To" msgstr "Enviar a" -#: ../finch/gntconv.c:386 +#: ../finch/gntconv.c:410 msgid "Conversation" msgstr "Conversa" -#: ../finch/gntconv.c:392 +#: ../finch/gntconv.c:416 msgid "Clear Scrollback" msgstr "Limpar o historial da conversa" -#: ../finch/gntconv.c:396 ../finch/gntprefs.c:190 +#: ../finch/gntconv.c:420 ../finch/gntprefs.c:190 msgid "Show Timestamps" msgstr "Mostrar marcas de tempo" -#: ../finch/gntconv.c:412 +#: ../finch/gntconv.c:436 msgid "Add Buddy Pounce..." msgstr "Engadir aviso de contacto..." -#: ../finch/gntconv.c:613 +#: ../finch/gntconv.c:638 msgid "<AUTO-REPLY> " msgstr "<RESPOSTA AUTOMÁTICA>" #. Print the list of users in the room -#: ../finch/gntconv.c:735 +#: ../finch/gntconv.c:760 msgid "List of users:\n" msgstr "Lista de usuarios:\n" -#: ../finch/gntconv.c:880 ../pidgin/gtkconv.c:334 +#: ../finch/gntconv.c:905 ../pidgin/gtkconv.c:338 msgid "Supported debug options are: version" msgstr "As opcións de depuración soportadas son: version" -#: ../finch/gntconv.c:915 ../pidgin/gtkconv.c:383 +#: ../finch/gntconv.c:940 ../pidgin/gtkconv.c:387 msgid "No such command (in this context)." msgstr "Non existe o comando (neste contexto)." -#: ../finch/gntconv.c:918 ../pidgin/gtkconv.c:386 +#: ../finch/gntconv.c:943 ../pidgin/gtkconv.c:390 msgid "" "Use \"/help <command>\" for help on a specific command.\n" "The following commands are available in this context:\n" @@ -780,7 +782,7 @@ "Usar \"/help <comando>\" para obter axuda dun comando específico.\n" "Os seguintes comandos están dispoñibles neste contexto:\n" -#: ../finch/gntconv.c:976 ../pidgin/gtkconv.c:7291 +#: ../finch/gntconv.c:1001 ../pidgin/gtkconv.c:7350 msgid "" "say <message>: Send a message normally as if you weren't using a " "command." @@ -788,13 +790,13 @@ "say <mensaxe>: Envía unha mensaxe como se non se estivese a utilizar" "un comando." -#: ../finch/gntconv.c:979 ../pidgin/gtkconv.c:7294 +#: ../finch/gntconv.c:1004 ../pidgin/gtkconv.c:7353 msgid "me <action>: Send an IRC style action to a buddy or chat." msgstr "" "me <acción>: Envía unha acción estilo IRC a un contacto ou a unha " "conversa." -#: ../finch/gntconv.c:982 ../pidgin/gtkconv.c:7297 +#: ../finch/gntconv.c:1007 ../pidgin/gtkconv.c:7356 msgid "" "debug <option>: Send various debug information to the current " "conversation." @@ -802,43 +804,43 @@ "debug<opción>: Envía información de depuración sobre a conversa " "actual." -#: ../finch/gntconv.c:985 ../pidgin/gtkconv.c:7300 +#: ../finch/gntconv.c:1010 ../pidgin/gtkconv.c:7359 msgid "clear: Clears the conversation scrollback." msgstr "clear: Limpa o historial da conversa." -#: ../finch/gntconv.c:988 ../pidgin/gtkconv.c:7306 +#: ../finch/gntconv.c:1013 ../pidgin/gtkconv.c:7365 msgid "help <command>: Help on a specific command." msgstr "help <comando>: Axuda sobre un comando específico." -#: ../finch/gntconv.c:991 +#: ../finch/gntconv.c:1016 msgid "users: Show the list of users in the chat." msgstr "users: Amosa a lista de usuarios na conversa" -#: ../finch/gntconv.c:996 +#: ../finch/gntconv.c:1021 msgid "plugins: Show the plugins window." msgstr "complementos: Mostra a ventá de complementos." -#: ../finch/gntconv.c:999 +#: ../finch/gntconv.c:1024 msgid "buddylist: Show the buddylist." msgstr "buddylist: Mostra a lista de contactos." -#: ../finch/gntconv.c:1002 +#: ../finch/gntconv.c:1027 msgid "accounts: Show the accounts window." msgstr "contas: Mostra a ventá de contas." -#: ../finch/gntconv.c:1005 +#: ../finch/gntconv.c:1030 msgid "debugwin: Show the debug window." msgstr "depuración: Mostra a ventá de depuración." -#: ../finch/gntconv.c:1008 +#: ../finch/gntconv.c:1033 msgid "prefs: Show the preference window." msgstr "preferencias: Mostra a ventá de preferencias." -#: ../finch/gntconv.c:1011 +#: ../finch/gntconv.c:1036 msgid "statuses: Show the savedstatuses window." msgstr "estados: Mostrar a ventá de estados gardardos." -#: ../finch/gntdebug.c:234 ../finch/gntui.c:80 ../pidgin/gtkdebug.c:694 +#: ../finch/gntdebug.c:234 ../finch/gntui.c:84 ../pidgin/gtkdebug.c:694 msgid "Debug Window" msgstr "Ventá de depuración" @@ -864,7 +866,7 @@ msgstr "Transferencia de ficheiros - %d%% de %d ficheiros" #. Create the window. -#: ../finch/gntft.c:122 ../finch/gntft.c:195 ../finch/gntui.c:81 +#: ../finch/gntft.c:122 ../finch/gntft.c:195 ../finch/gntui.c:85 #: ../pidgin/gtkft.c:233 ../pidgin/gtkft.c:761 msgid "File Transfers" msgstr "Transferencia de ficheiros" @@ -891,7 +893,7 @@ #. XXX: Use of ggp_str_to_uin() is an ugly hack! #: ../finch/gntft.c:198 ../finch/gntstatus.c:543 ../finch/gntstatus.c:572 -#: ../libpurple/protocols/bonjour/bonjour.c:318 +#: ../libpurple/protocols/bonjour/bonjour.c:337 #: ../libpurple/protocols/gg/gg.c:1034 ../libpurple/protocols/gg/gg.c:1571 #: ../libpurple/protocols/gg/gg.c:1579 #: ../libpurple/protocols/jabber/buddy.c:638 @@ -900,15 +902,15 @@ #: ../libpurple/protocols/jabber/jabber.c:1212 #: ../libpurple/protocols/msn/msn.c:515 #: ../libpurple/protocols/novell/novell.c:2835 -#: ../libpurple/protocols/oscar/oscar.c:821 -#: ../libpurple/protocols/oscar/oscar.c:826 -#: ../libpurple/protocols/oscar/oscar.c:828 -#: ../libpurple/protocols/oscar/oscar.c:2672 -#: ../libpurple/protocols/oscar/oscar.c:3789 +#: ../libpurple/protocols/oscar/oscar.c:820 +#: ../libpurple/protocols/oscar/oscar.c:825 +#: ../libpurple/protocols/oscar/oscar.c:827 +#: ../libpurple/protocols/oscar/oscar.c:2670 +#: ../libpurple/protocols/oscar/oscar.c:3748 #: ../libpurple/protocols/sametime/sametime.c:3264 #: ../libpurple/protocols/sametime/sametime.c:4151 -#: ../libpurple/protocols/yahoo/yahoo.c:3083 ../pidgin/gtkblist.c:3079 -#: ../pidgin/gtkblist.c:3092 ../pidgin/gtkblist.c:3094 +#: ../libpurple/protocols/yahoo/yahoo.c:3148 ../pidgin/gtkblist.c:3082 +#: ../pidgin/gtkblist.c:3095 ../pidgin/gtkblist.c:3097 #: ../pidgin/gtksavedstatuses.c:998 ../pidgin/gtksavedstatuses.c:1143 msgid "Status" msgstr "Estado" @@ -968,11 +970,11 @@ msgid "You have mail!" msgstr "Ten un correo!" -#: ../finch/gntnotify.c:173 ../pidgin/gtknotify.c:489 +#: ../finch/gntnotify.c:173 ../pidgin/gtknotify.c:495 msgid "Sender" msgstr "Remitente" -#: ../finch/gntnotify.c:173 ../pidgin/gtknotify.c:496 +#: ../finch/gntnotify.c:173 ../pidgin/gtknotify.c:502 msgid "Subject" msgstr "Asunto" @@ -983,29 +985,29 @@ msgstr[0] "%s (%s) ten %d mensaxe nova." msgstr[1] "%s (%s) ten %d mensaxe nova." -#: ../finch/gntnotify.c:224 ../pidgin/gtknotify.c:335 +#: ../finch/gntnotify.c:224 ../pidgin/gtknotify.c:340 msgid "New Mail" msgstr "Correo novo" -#: ../finch/gntnotify.c:289 ../pidgin/gtknotify.c:915 +#: ../finch/gntnotify.c:289 ../pidgin/gtknotify.c:923 #, c-format msgid "Info for %s" msgstr "Información sobre %s" #: ../finch/gntnotify.c:290 ../libpurple/protocols/toc/toc.c:476 -#: ../pidgin/gtknotify.c:916 +#: ../pidgin/gtknotify.c:924 msgid "Buddy Information" msgstr "Información do contacto" -#: ../finch/gntnotify.c:376 +#: ../finch/gntnotify.c:376 ../libpurple/protocols/qq/group_join.c:367 msgid "Continue" msgstr "Continuar" -#: ../finch/gntnotify.c:382 ../pidgin/gtkconv.c:1626 ../pidgin/gtkdebug.c:834 +#: ../finch/gntnotify.c:382 ../pidgin/gtkconv.c:1630 ../pidgin/gtkdebug.c:834 msgid "Info" msgstr "Info" -#: ../finch/gntnotify.c:385 ../pidgin/gtkconv.c:1587 +#: ../finch/gntnotify.c:385 ../pidgin/gtkconv.c:1591 msgid "IM" msgstr "MI" @@ -1072,7 +1074,7 @@ #. Back to instant-apply! I win! BU-HAHAHA! #. Create the window #: ../finch/gntplugin.c:370 ../finch/gntplugin.c:377 ../finch/gntprefs.c:263 -#: ../finch/gntui.c:83 ../pidgin/gtkdocklet.c:524 ../pidgin/gtkprefs.c:2060 +#: ../finch/gntui.c:88 ../pidgin/gtkdocklet.c:524 ../pidgin/gtkprefs.c:2062 msgid "Preferences" msgstr "Preferencias" @@ -1185,7 +1187,7 @@ msgid "Are you sure you want to delete the pounce on %s for %s?" msgstr "Está seguro de que quere borrar o aviso sobre %s para %s?" -#: ../finch/gntpounce.c:685 ../finch/gntui.c:79 ../pidgin/gtkpounce.c:1339 +#: ../finch/gntpounce.c:685 ../finch/gntui.c:83 ../pidgin/gtkpounce.c:1339 msgid "Buddy Pounces" msgstr "Avisos de contacto" @@ -1247,13 +1249,13 @@ msgid "Based on keyboard use" msgstr "Baseado no uso do teclado" -#: ../finch/gntprefs.c:93 ../pidgin/gtkprefs.c:1923 +#: ../finch/gntprefs.c:93 ../pidgin/gtkprefs.c:1925 msgid "From last sent message" msgstr "Desde a última mensaxe enviada" #: ../finch/gntprefs.c:95 ../pidgin/gtkprefs.c:897 ../pidgin/gtkprefs.c:906 -#: ../pidgin/gtkprefs.c:1922 ../pidgin/gtkprefs.c:1936 -#: ../pidgin/plugins/win32/winprefs/winprefs.c:337 +#: ../pidgin/gtkprefs.c:1924 ../pidgin/gtkprefs.c:1938 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:333 msgid "Never" msgstr "Nunca" @@ -1302,12 +1304,12 @@ msgstr "Cambiar o estado a" #. Conversations -#: ../finch/gntprefs.c:258 ../pidgin/gtkprefs.c:992 ../pidgin/gtkprefs.c:2026 -#: ../pidgin/plugins/win32/winprefs/winprefs.c:344 +#: ../finch/gntprefs.c:258 ../pidgin/gtkprefs.c:992 ../pidgin/gtkprefs.c:2028 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:340 msgid "Conversations" msgstr "Conversas" -#: ../finch/gntprefs.c:259 ../pidgin/gtkprefs.c:1462 ../pidgin/gtkprefs.c:2037 +#: ../finch/gntprefs.c:259 ../pidgin/gtkprefs.c:1464 ../pidgin/gtkprefs.c:2039 msgid "Logging" msgstr "Rexistro" @@ -1315,16 +1317,167 @@ msgid "Not implemented yet." msgstr "Funcionalidade non implementada." -#: ../finch/gntrequest.c:635 ../pidgin/gtkrequest.c:1539 -#: ../pidgin/gtkrequest.c:1585 +#: ../finch/gntrequest.c:635 ../pidgin/gtkrequest.c:1552 +#: ../pidgin/gtkrequest.c:1598 msgid "Save File..." msgstr "Gardar ficheiro..." -#: ../finch/gntrequest.c:635 ../pidgin/gtkrequest.c:1540 -#: ../pidgin/gtkrequest.c:1586 +#: ../finch/gntrequest.c:635 ../pidgin/gtkrequest.c:1553 +#: ../pidgin/gtkrequest.c:1599 msgid "Open File..." msgstr "Abrir ficheiro..." +#: ../finch/gntsound.c:94 ../pidgin/gtksound.c:63 +msgid "Buddy logs in" +msgstr "Conéctase un contacto" + +#: ../finch/gntsound.c:95 ../pidgin/gtksound.c:64 +msgid "Buddy logs out" +msgstr "Desconéctase un contacto" + +#: ../finch/gntsound.c:96 ../pidgin/gtksound.c:65 +msgid "Message received" +msgstr "Mensaxe recibida" + +#: ../finch/gntsound.c:97 ../pidgin/gtksound.c:66 +msgid "Message received begins conversation" +msgstr "Mensaxe recibida que comeza unha conversa" + +#: ../finch/gntsound.c:98 ../pidgin/gtksound.c:67 +msgid "Message sent" +msgstr "Mensaxe enviada" + +#: ../finch/gntsound.c:99 ../pidgin/gtksound.c:68 +msgid "Person enters chat" +msgstr "Alguén entra na conversa" + +#: ../finch/gntsound.c:100 ../pidgin/gtksound.c:69 +msgid "Person leaves chat" +msgstr "Alguén deixa a conversa" + +#: ../finch/gntsound.c:101 ../pidgin/gtksound.c:70 +msgid "You talk in chat" +msgstr "Participa na conversa" + +#: ../finch/gntsound.c:102 ../pidgin/gtksound.c:71 +msgid "Others talk in chat" +msgstr "Conversan outros" + +#: ../finch/gntsound.c:104 ../pidgin/gtksound.c:74 +msgid "Someone says your screen name in chat" +msgstr "Alguén menciona o seu nome na conversa" + +#: ../finch/gntsound.c:357 ../pidgin/gtksound.c:310 +msgid "GStreamer Failure" +msgstr "Fallo de GStreamer" + +#: ../finch/gntsound.c:358 ../pidgin/gtksound.c:311 +msgid "GStreamer failed to initialize." +msgstr "O GStreamer errou ao iniciar." + +#: ../finch/gntsound.c:706 ../finch/gntsound.c:792 ../pidgin/gtkprefs.c:1584 +#: ../pidgin/gtkprefs.c:1673 ../pidgin/gtkprefs.c:1867 +msgid "(default)" +msgstr "(por defecto)" + +#: ../finch/gntsound.c:719 +msgid "Select Sound File ..." +msgstr "Elixir ficheiro de son ..." + +#: ../finch/gntsound.c:894 +msgid "Sound Preferences" +msgstr "Preferencias de son" + +#: ../finch/gntsound.c:905 +msgid "Profiles" +msgstr "Perfís" + +#: ../finch/gntsound.c:944 ../pidgin/gtkprefs.c:1712 +msgid "Automatic" +msgstr "Automático" + +#: ../finch/gntsound.c:947 +msgid "Console Beep" +msgstr "Bip da consola" + +#: ../finch/gntsound.c:948 ../pidgin/gtkprefs.c:1716 +msgid "Command" +msgstr "Comando" + +#: ../finch/gntsound.c:949 +msgid "No Sound" +msgstr "Sen son" + +#: ../finch/gntsound.c:951 ../pidgin/gtkprefs.c:1707 +msgid "Sound Method" +msgstr "Método para reproducir sons" + +#: ../finch/gntsound.c:956 +msgid "Method: " +msgstr "Método:" + +#: ../finch/gntsound.c:963 +#, c-format +msgid "" +"Sound Command\n" +"(%s for filename)" +msgstr "" +"Comandos de son\n" +"(%s para nome de ficheiro)" + +#. Sound options +#: ../finch/gntsound.c:971 ../pidgin/gtkprefs.c:1751 +msgid "Sound Options" +msgstr "Opcións de son" + +#: ../finch/gntsound.c:972 +msgid "Sounds when conversation has focus" +msgstr "Sons cando a conversa ten o _foco" + +#: ../finch/gntsound.c:980 ../pidgin/gtkprefs.c:896 ../pidgin/gtkprefs.c:908 +#: ../pidgin/gtkprefs.c:1758 ../pidgin/plugins/timestamp_format.c:42 +#: ../pidgin/plugins/timestamp_format.c:51 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:334 +msgid "Always" +msgstr "Sempre" + +#: ../finch/gntsound.c:981 ../pidgin/gtkprefs.c:1756 +msgid "Only when available" +msgstr "Só cando estea dispoñible" + +#: ../finch/gntsound.c:982 ../pidgin/gtkprefs.c:1757 +msgid "Only when not available" +msgstr "Só cando estea non dispoñible" + +#: ../finch/gntsound.c:989 +msgid "Volume(0-100):" +msgstr "Volume(0-100):" + +#. Sound events +#: ../finch/gntsound.c:1006 ../pidgin/gtkprefs.c:1793 +msgid "Sound Events" +msgstr "Eventos de son" + +#: ../finch/gntsound.c:1008 ../pidgin/gtkprefs.c:1852 +msgid "Event" +msgstr "Evento" + +#: ../finch/gntsound.c:1008 +msgid "File" +msgstr "Ficheiro" + +#: ../finch/gntsound.c:1027 ../pidgin/gtkprefs.c:1871 +msgid "Test" +msgstr "Probar" + +#: ../finch/gntsound.c:1030 ../pidgin/gtkprefs.c:1875 +msgid "Reset" +msgstr "Reiniciar" + +#: ../finch/gntsound.c:1033 ../pidgin/gtkprefs.c:1879 +msgid "Choose..." +msgstr "Escoller..." + #: ../finch/gntstatus.c:137 #, c-format msgid "Are you sure you want to delete \"%s\"" @@ -1351,9 +1504,9 @@ msgstr "Tipo" #: ../finch/gntstatus.c:182 ../finch/gntstatus.c:560 ../finch/gntstatus.c:572 -#: ../libpurple/protocols/bonjour/bonjour.c:247 -#: ../libpurple/protocols/bonjour/bonjour.c:254 -#: ../libpurple/protocols/bonjour/bonjour.c:320 +#: ../libpurple/protocols/bonjour/bonjour.c:249 +#: ../libpurple/protocols/bonjour/bonjour.c:256 +#: ../libpurple/protocols/bonjour/bonjour.c:339 #: ../libpurple/protocols/gg/gg.c:1072 ../libpurple/protocols/gg/gg.c:1574 #: ../libpurple/protocols/gg/gg.c:1592 ../libpurple/protocols/gg/gg.c:1602 #: ../libpurple/protocols/gg/gg.c:1608 ../libpurple/protocols/gg/gg.c:1617 @@ -1368,12 +1521,12 @@ #: ../libpurple/protocols/novell/novell.c:2941 #: ../libpurple/protocols/novell/novell.c:2947 #: ../libpurple/protocols/novell/novell.c:2953 -#: ../libpurple/protocols/oscar/oscar.c:5543 -#: ../libpurple/protocols/oscar/oscar.c:5761 -#: ../libpurple/protocols/oscar/oscar.c:5775 -#: ../libpurple/protocols/oscar/oscar.c:5791 -#: ../libpurple/protocols/oscar/oscar.c:5798 -#: ../libpurple/protocols/oscar/oscar.c:5805 +#: ../libpurple/protocols/oscar/oscar.c:5502 +#: ../libpurple/protocols/oscar/oscar.c:5720 +#: ../libpurple/protocols/oscar/oscar.c:5734 +#: ../libpurple/protocols/oscar/oscar.c:5750 +#: ../libpurple/protocols/oscar/oscar.c:5757 +#: ../libpurple/protocols/oscar/oscar.c:5764 #: ../libpurple/protocols/sametime/sametime.c:3287 #: ../libpurple/protocols/sametime/sametime.c:3293 #: ../libpurple/protocols/sametime/sametime.c:3299 @@ -1381,8 +1534,8 @@ #: ../libpurple/protocols/silc/buddy.c:1551 #: ../libpurple/protocols/silc10/buddy.c:1551 #: ../libpurple/protocols/simple/simple.c:246 -#: ../libpurple/protocols/yahoo/yahoo.c:3586 -#: ../libpurple/protocols/yahoo/yahoo.c:3592 +#: ../libpurple/protocols/yahoo/yahoo.c:3651 +#: ../libpurple/protocols/yahoo/yahoo.c:3657 #: ../libpurple/protocols/zephyr/zephyr.c:2337 #: ../pidgin/gtksavedstatuses.c:525 ../pidgin/gtksavedstatuses.c:1009 msgid "Message" @@ -1434,7 +1587,11 @@ msgid "Save & Use" msgstr "Gardar e usar" -#: ../finch/gntui.c:84 +#: ../finch/gntui.c:87 ../pidgin/gtkprefs.c:2030 +msgid "Sounds" +msgstr "Sons" + +#: ../finch/gntui.c:89 msgid "Statuses" msgstr "Estados" @@ -1596,7 +1753,7 @@ msgstr "Falta o complemento de protocolo para %s" #: ../libpurple/account.c:1012 ../libpurple/connection.c:107 -#: ../pidgin/gtkblist.c:4020 +#: ../pidgin/gtkblist.c:4019 msgid "Connection Error" msgstr "Erro de conexión" @@ -1644,13 +1801,13 @@ #: ../libpurple/protocols/jabber/buddy.c:1462 #: ../libpurple/protocols/jabber/buddy.c:1479 #: ../libpurple/protocols/novell/novell.c:2831 -#: ../libpurple/protocols/qq/qq.c:230 ../pidgin/gtkft.c:159 +#: ../libpurple/protocols/qq/qq.c:232 ../pidgin/gtkft.c:159 msgid "Unknown" msgstr "Descoñecido" #: ../libpurple/blist.c:521 ../libpurple/blist.c:1289 #: ../libpurple/blist.c:1518 ../libpurple/protocols/jabber/roster.c:68 -#: ../pidgin/gtkblist.c:5322 ../pidgin/plugins/gevolution/gevolution.c:96 +#: ../pidgin/gtkblist.c:5321 ../pidgin/plugins/gevolution/gevolution.c:96 #: ../pidgin/plugins/gevolution/gevo-util.c:64 msgid "Buddies" msgstr "Contactos" @@ -2102,15 +2259,15 @@ msgid "Old flat format" msgstr "Formato plano antigo" -#: ../libpurple/log.c:837 +#: ../libpurple/log.c:838 msgid "Logging of this conversation failed." msgstr "O rexistro desta conversa fallou." -#: ../libpurple/log.c:1280 +#: ../libpurple/log.c:1281 msgid "XML" msgstr "XML" -#: ../libpurple/log.c:1364 +#: ../libpurple/log.c:1365 #, c-format msgid "" "<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" @@ -2119,7 +2276,7 @@ "<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <RESPOSTA " "AUTOMÁTICA>:</b></font> %s<br/>\n" -#: ../libpurple/log.c:1366 +#: ../libpurple/log.c:1367 #, c-format msgid "" "<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" @@ -2128,16 +2285,16 @@ "<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <RESPOSTA " "AUTOMÁTICA>:</b></font> %s<br/>\n" -#: ../libpurple/log.c:1424 ../libpurple/log.c:1557 +#: ../libpurple/log.c:1425 ../libpurple/log.c:1558 msgid "<font color=\"red\"><b>Unable to find log path!</b></font>" msgstr "<font color=\"red\"><b>Non se puido encontrar o camiño do rexistro!</b></font>" -#: ../libpurple/log.c:1436 ../libpurple/log.c:1566 +#: ../libpurple/log.c:1437 ../libpurple/log.c:1567 #, c-format msgid "<font color=\"red\"><b>Could not read file: %s</b></font>" msgstr "<font color=\"red\"><b>Non se puido ler o ficheiro: %s</b></font>" -#: ../libpurple/log.c:1498 +#: ../libpurple/log.c:1499 #, c-format msgid "(%s) %s <AUTO-REPLY>: %s\n" msgstr "(%s) %s <RESPOSTA AUTOMÁTICA>: %s\n" @@ -2228,13 +2385,13 @@ #: ../libpurple/plugins/autoaccept.c:165 ../libpurple/plugins/idle.c:170 #: ../libpurple/plugins/idle.c:204 ../libpurple/plugins/idle.c:230 -#: ../libpurple/protocols/oscar/oscar.c:1454 -#: ../libpurple/protocols/oscar/oscar.c:2247 -#: ../libpurple/protocols/oscar/oscar.c:2294 -#: ../libpurple/protocols/oscar/oscar.c:5875 -#: ../libpurple/protocols/oscar/oscar.c:5930 -#: ../libpurple/protocols/oscar/oscar.c:6156 -#: ../libpurple/protocols/oscar/oscar.c:6226 ../libpurple/request.h:1387 +#: ../libpurple/protocols/oscar/oscar.c:1451 +#: ../libpurple/protocols/oscar/oscar.c:2243 +#: ../libpurple/protocols/oscar/oscar.c:2292 +#: ../libpurple/protocols/oscar/oscar.c:5834 +#: ../libpurple/protocols/oscar/oscar.c:5889 +#: ../libpurple/protocols/oscar/oscar.c:6115 +#: ../libpurple/protocols/oscar/oscar.c:6185 ../libpurple/request.h:1387 #: ../libpurple/request.h:1397 msgid "_Cancel" msgstr "_Cancelar" @@ -2297,18 +2454,18 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/buddynote.c:90 +#: ../libpurple/plugins/buddynote.c:90 ../pidgin/plugins/gtkbuddynote.c:71 msgid "Buddy Notes" msgstr "Anotacións de contactos" #. *< name #. *< version -#: ../libpurple/plugins/buddynote.c:92 +#: ../libpurple/plugins/buddynote.c:92 ../pidgin/plugins/gtkbuddynote.c:73 msgid "Store notes on particular buddies." msgstr "Almacenar anotacións de contactos particulares." #. *< summary -#: ../libpurple/plugins/buddynote.c:93 +#: ../libpurple/plugins/buddynote.c:93 ../pidgin/plugins/gtkbuddynote.c:74 msgid "Adds the option to store notes for buddies on your buddy list." msgstr "Engade a opción para almacenar anotacións para os contactos da súa lista de amigos." @@ -2502,110 +2659,110 @@ #. * offset is way off. The user should never really see it, but #. * it's here just in case. The parens are to make it clear it's #. * not a real timezone. -#: ../libpurple/plugins/log_reader.c:492 +#: ../libpurple/plugins/log_reader.c:493 msgid "(UTC)" msgstr "(UTC)" -#: ../libpurple/plugins/log_reader.c:1574 +#: ../libpurple/plugins/log_reader.c:1577 msgid "User is offline." msgstr "O usuario está desconectado." -#: ../libpurple/plugins/log_reader.c:1580 +#: ../libpurple/plugins/log_reader.c:1583 msgid "Auto-response sent:" msgstr "Resposta automática enviada:" -#: ../libpurple/plugins/log_reader.c:1590 #: ../libpurple/plugins/log_reader.c:1593 +#: ../libpurple/plugins/log_reader.c:1596 #: ../libpurple/plugins/statenotify.c:80 #, c-format msgid "%s has signed off." msgstr "%s desconectouse." -#: ../libpurple/plugins/log_reader.c:1607 +#: ../libpurple/plugins/log_reader.c:1610 msgid "One or more messages may have been undeliverable." msgstr "Unha ou máis mensaxes puideron non chegar ao destino." -#: ../libpurple/plugins/log_reader.c:1617 +#: ../libpurple/plugins/log_reader.c:1620 msgid "You were disconnected from the server." msgstr "Foi desconectado do servidor." -#: ../libpurple/plugins/log_reader.c:1625 +#: ../libpurple/plugins/log_reader.c:1628 msgid "" "You are currently disconnected. Messages will not be received unless you are " "logged in." msgstr "Está actualmente desconectado. As mensaxes non se recibirán a non ser que inicie sesión." -#: ../libpurple/plugins/log_reader.c:1640 +#: ../libpurple/plugins/log_reader.c:1643 msgid "Message could not be sent because the maximum length was exceeded." msgstr "Non se puido enviar a mensaxe porque excedeu a lonxitude máxima." -#: ../libpurple/plugins/log_reader.c:1645 +#: ../libpurple/plugins/log_reader.c:1648 msgid "Message could not be sent." msgstr "Non se puido enviar a mensaxe." #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2344 -#: ../libpurple/plugins/log_reader.c:2467 +#: ../libpurple/plugins/log_reader.c:2349 +#: ../libpurple/plugins/log_reader.c:2472 msgid "Adium" msgstr "Adium" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2357 -#: ../libpurple/plugins/log_reader.c:2472 +#: ../libpurple/plugins/log_reader.c:2362 +#: ../libpurple/plugins/log_reader.c:2477 msgid "Fire" msgstr "Fire" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2369 -#: ../libpurple/plugins/log_reader.c:2476 +#: ../libpurple/plugins/log_reader.c:2374 +#: ../libpurple/plugins/log_reader.c:2481 msgid "Messenger Plus!" msgstr "Messenger Plus!" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2383 -#: ../libpurple/plugins/log_reader.c:2481 +#: ../libpurple/plugins/log_reader.c:2388 +#: ../libpurple/plugins/log_reader.c:2486 msgid "QIP" msgstr "QIP" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2395 -#: ../libpurple/plugins/log_reader.c:2485 +#: ../libpurple/plugins/log_reader.c:2400 +#: ../libpurple/plugins/log_reader.c:2490 msgid "MSN Messenger" msgstr "MSN Messenger" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2407 -#: ../libpurple/plugins/log_reader.c:2489 +#: ../libpurple/plugins/log_reader.c:2412 +#: ../libpurple/plugins/log_reader.c:2494 msgid "Trillian" msgstr "Trillian" #. Add general preferences. -#: ../libpurple/plugins/log_reader.c:2449 +#: ../libpurple/plugins/log_reader.c:2454 msgid "General Log Reading Configuration" msgstr "Configuración de lectura de rexistro xeral" -#: ../libpurple/plugins/log_reader.c:2453 +#: ../libpurple/plugins/log_reader.c:2458 msgid "Fast size calculations" msgstr "Cálculos de tamaño rápido" -#: ../libpurple/plugins/log_reader.c:2457 +#: ../libpurple/plugins/log_reader.c:2462 msgid "Use name heuristics" msgstr "Usar nomes heurísticos" #. Add Log Directory preferences. -#: ../libpurple/plugins/log_reader.c:2463 +#: ../libpurple/plugins/log_reader.c:2468 msgid "Log Directory" msgstr "Directorio de rexistro" @@ -2615,19 +2772,19 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/log_reader.c:2518 +#: ../libpurple/plugins/log_reader.c:2523 msgid "Log Reader" msgstr "Lector de rexistro" #. *< name #. *< version #. * summary -#: ../libpurple/plugins/log_reader.c:2522 +#: ../libpurple/plugins/log_reader.c:2527 msgid "Includes other IM clients' logs in the log viewer." msgstr "Incluír outros rexistros de clientes de MI no visor de rexistro." #. * description -#: ../libpurple/plugins/log_reader.c:2526 +#: ../libpurple/plugins/log_reader.c:2531 msgid "" "When viewing logs, this plugin will include logs from other IM clients. " "Currently, this includes Adium, MSN Messenger, and Trillian.\n" @@ -2977,25 +3134,43 @@ msgid "Unable to establish connection with the local mDNS server. Is it running?" msgstr "Imposible establecer a conexión co servidor local mDNS. Estase a executar?" -#. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for -#. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message -#. Away stuff -#: ../libpurple/protocols/bonjour/bonjour.c:294 -#: ../libpurple/protocols/gg/gg.c:1009 ../libpurple/protocols/irc/irc.c:530 -#: ../libpurple/protocols/irc/msgs.c:310 -#: ../libpurple/protocols/jabber/buddy.c:1472 -#: ../libpurple/protocols/novell/novell.c:2819 -#: ../libpurple/protocols/oscar/oscar.c:733 -#: ../libpurple/protocols/oscar/oscar.c:4545 -#: ../libpurple/protocols/oscar/oscar.c:5621 -#: ../libpurple/protocols/qq/qq.c:180 ../libpurple/protocols/silc/buddy.c:1476 -#: ../libpurple/protocols/silc10/buddy.c:1476 -#: ../libpurple/protocols/yahoo/yahoo.c:3488 -#: ../libpurple/protocols/yahoo/yahoo.c:3562 ../libpurple/status.c:157 -#: ../pidgin/gtkdocklet.c:442 ../pidgin/gtkprefs.c:1932 -#: ../pidgin/gtkstatusbox.c:1056 -msgid "Away" -msgstr "Ausente" +#. Creating the options for the protocol +#: ../libpurple/protocols/bonjour/bonjour.c:344 +#: ../libpurple/protocols/bonjour/bonjour.c:614 +#: ../libpurple/protocols/gg/gg.c:627 +#: ../libpurple/protocols/jabber/jabber.c:828 +msgid "First name" +msgstr "Nome" + +#: ../libpurple/protocols/bonjour/bonjour.c:346 +#: ../libpurple/protocols/bonjour/bonjour.c:617 +#: ../libpurple/protocols/gg/gg.c:622 +#: ../libpurple/protocols/jabber/jabber.c:833 +msgid "Last name" +msgstr "Apelidos" + +#: ../libpurple/protocols/bonjour/bonjour.c:350 +#: ../libpurple/protocols/jabber/buddy.c:283 +#: ../libpurple/protocols/jabber/buddy.c:940 +#: ../libpurple/protocols/jabber/buddy.c:948 +#: ../libpurple/protocols/jabber/buddy.c:1629 +#: ../libpurple/protocols/silc/ops.c:1041 +#: ../libpurple/protocols/silc/util.c:555 +#: ../libpurple/protocols/silc10/ops.c:1075 +#: ../libpurple/protocols/silc10/util.c:551 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1061 +msgid "E-Mail" +msgstr "Correo electrónico" + +#: ../libpurple/protocols/bonjour/bonjour.c:353 +#: ../libpurple/protocols/bonjour/bonjour.c:623 +msgid "AIM Account" +msgstr "Conta de AIM" + +#: ../libpurple/protocols/bonjour/bonjour.c:356 +#: ../libpurple/protocols/bonjour/bonjour.c:626 +msgid "XMPP Account" +msgstr "Conta de XMPP" #. *< type #. *< ui_requirement @@ -3007,38 +3182,25 @@ #. *< version #. * summary #. * description -#: ../libpurple/protocols/bonjour/bonjour.c:425 -#: ../libpurple/protocols/bonjour/bonjour.c:427 +#: ../libpurple/protocols/bonjour/bonjour.c:460 +#: ../libpurple/protocols/bonjour/bonjour.c:462 msgid "Bonjour Protocol Plugin" msgstr "Complemento de protocolo Bonjour" -#: ../libpurple/protocols/bonjour/bonjour.c:470 -#: ../libpurple/protocols/bonjour/bonjour.c:477 -#: ../libpurple/protocols/bonjour/bonjour.c:526 +#: ../libpurple/protocols/bonjour/bonjour.c:505 +#: ../libpurple/protocols/bonjour/bonjour.c:512 +#: ../libpurple/protocols/bonjour/bonjour.c:561 msgid "Purple Person" msgstr "Persoa Purple" #. Creating the user splits -#: ../libpurple/protocols/bonjour/bonjour.c:575 +#: ../libpurple/protocols/bonjour/bonjour.c:610 #: ../libpurple/protocols/silc/silc.c:1007 #: ../libpurple/protocols/silc10/silc.c:918 msgid "Hostname" msgstr "Nome do servidor" -#. Creating the options for the protocol -#: ../libpurple/protocols/bonjour/bonjour.c:579 -#: ../libpurple/protocols/gg/gg.c:627 -#: ../libpurple/protocols/jabber/jabber.c:828 -msgid "First name" -msgstr "Nome" - -#: ../libpurple/protocols/bonjour/bonjour.c:582 -#: ../libpurple/protocols/gg/gg.c:622 -#: ../libpurple/protocols/jabber/jabber.c:833 -msgid "Last name" -msgstr "Apelidos" - -#: ../libpurple/protocols/bonjour/bonjour.c:585 +#: ../libpurple/protocols/bonjour/bonjour.c:620 #: ../libpurple/protocols/gg/gg.c:472 #: ../libpurple/protocols/jabber/jabber.c:818 #: ../libpurple/protocols/silc/silc.c:770 @@ -3048,42 +3210,34 @@ msgid "E-mail" msgstr "Correo electrónico" -#: ../libpurple/protocols/bonjour/bonjour.c:588 -msgid "AIM Account" -msgstr "Conta de AIM" - -#: ../libpurple/protocols/bonjour/bonjour.c:591 -msgid "XMPP Account" -msgstr "Conta de XMPP" - #: ../libpurple/protocols/bonjour/bonjour.h:33 msgid "Bonjour" msgstr "Bonjour" -#: ../libpurple/protocols/bonjour/jabber.c:381 +#: ../libpurple/protocols/bonjour/jabber.c:383 #, c-format msgid "%s has closed the conversation." msgstr "%s pechou a conversa." -#: ../libpurple/protocols/bonjour/jabber.c:433 -#: ../libpurple/protocols/bonjour/jabber.c:656 -#: ../libpurple/protocols/bonjour/jabber.c:674 +#: ../libpurple/protocols/bonjour/jabber.c:435 +#: ../libpurple/protocols/bonjour/jabber.c:658 +#: ../libpurple/protocols/bonjour/jabber.c:676 msgid "Unable to send the message, the conversation couldn't be started." msgstr "Non se puido enviar a mensaxe, non se puido iniciar a conversa." -#: ../libpurple/protocols/bonjour/jabber.c:579 +#: ../libpurple/protocols/bonjour/jabber.c:581 msgid "Cannot open socket" msgstr "Non se puido abrir o conectador" -#: ../libpurple/protocols/bonjour/jabber.c:587 +#: ../libpurple/protocols/bonjour/jabber.c:589 msgid "Error setting socket options" msgstr "Erro ao establecer as opcións do conectador" -#: ../libpurple/protocols/bonjour/jabber.c:611 +#: ../libpurple/protocols/bonjour/jabber.c:613 msgid "Could not bind socket to port" msgstr "Non se pode ligar o conectador ao porto" -#: ../libpurple/protocols/bonjour/jabber.c:619 +#: ../libpurple/protocols/bonjour/jabber.c:621 msgid "Could not listen on socket" msgstr "Non se pode escoitar o conectador" @@ -3190,8 +3344,8 @@ #: ../libpurple/protocols/gg/gg.c:637 ../libpurple/protocols/gg/gg.c:1049 #: ../libpurple/protocols/gg/gg.c:1121 #: ../libpurple/protocols/jabber/jabber.c:843 -#: ../libpurple/protocols/oscar/oscar.c:3798 -#: ../libpurple/protocols/oscar/oscar.c:3811 +#: ../libpurple/protocols/oscar/oscar.c:3757 +#: ../libpurple/protocols/oscar/oscar.c:3770 #: ../libpurple/protocols/qq/buddy_info.c:49 msgid "City" msgstr "Cidade" @@ -3201,10 +3355,10 @@ msgstr "Data de nacemento" #: ../libpurple/protocols/gg/gg.c:645 ../libpurple/protocols/msn/msn.c:1558 -#: ../libpurple/protocols/oscar/oscar.c:3741 +#: ../libpurple/protocols/oscar/oscar.c:3700 #: ../libpurple/protocols/qq/buddy_info.c:46 -#: ../libpurple/protocols/qq/qq.c:224 ../libpurple/protocols/qq/qq.c:227 -#: ../libpurple/protocols/qq/qq.c:230 ../libpurple/protocols/qq/qq.c:234 +#: ../libpurple/protocols/qq/qq.c:226 ../libpurple/protocols/qq/qq.c:229 +#: ../libpurple/protocols/qq/qq.c:232 ../libpurple/protocols/qq/qq.c:236 #: ../libpurple/protocols/yahoo/yahoo_profile.c:1091 msgid "Gender" msgstr "Sexo" @@ -3214,16 +3368,16 @@ msgstr "Home ou muller" #: ../libpurple/protocols/gg/gg.c:647 -#: ../libpurple/protocols/oscar/oscar.c:3741 +#: ../libpurple/protocols/oscar/oscar.c:3700 #: ../libpurple/protocols/qq/buddy_info.c:83 -#: ../libpurple/protocols/qq/qq.c:224 +#: ../libpurple/protocols/qq/qq.c:226 msgid "Male" msgstr "Home" #: ../libpurple/protocols/gg/gg.c:648 -#: ../libpurple/protocols/oscar/oscar.c:3741 +#: ../libpurple/protocols/oscar/oscar.c:3700 #: ../libpurple/protocols/qq/buddy_info.c:84 -#: ../libpurple/protocols/qq/qq.c:227 +#: ../libpurple/protocols/qq/qq.c:229 msgid "Female" msgstr "Muller" @@ -3283,12 +3437,13 @@ #: ../libpurple/protocols/gg/gg.c:1003 #: ../libpurple/protocols/jabber/buddy.c:1466 #: ../libpurple/protocols/novell/novell.c:2828 -#: ../libpurple/protocols/oscar/oscar.c:828 -#: ../libpurple/protocols/oscar/oscar.c:5593 +#: ../libpurple/protocols/oscar/oscar.c:827 +#: ../libpurple/protocols/oscar/oscar.c:5552 #: ../libpurple/protocols/qq/qq.c:170 ../libpurple/protocols/qq/qq.c:177 -#: ../libpurple/protocols/yahoo/yahoo.c:2934 ../libpurple/status.c:153 -#: ../pidgin/gtkblist.c:3079 ../pidgin/gtkblist.c:3420 -#: ../pidgin/gtkdocklet.c:450 ../pidgin/gtkstatusbox.c:1059 +#: ../libpurple/protocols/qq/qq.c:292 +#: ../libpurple/protocols/yahoo/yahoo.c:2999 ../libpurple/status.c:153 +#: ../pidgin/gtkblist.c:3082 ../pidgin/gtkblist.c:3419 +#: ../pidgin/gtkdocklet.c:450 ../pidgin/gtkstatusbox.c:1060 msgid "Offline" msgstr "Desconectado" @@ -3297,21 +3452,42 @@ #: ../libpurple/protocols/msn/state.c:29 ../libpurple/protocols/msn/state.c:30 #: ../libpurple/protocols/msn/state.c:37 ../libpurple/protocols/msn/state.c:38 #: ../libpurple/protocols/novell/novell.c:2816 -#: ../libpurple/protocols/yahoo/yahoo.c:2936 ../libpurple/status.c:154 -#: ../pidgin/gtkdocklet.c:438 ../pidgin/gtkstatusbox.c:1055 +#: ../libpurple/protocols/qq/qq.c:280 +#: ../libpurple/protocols/yahoo/yahoo.c:3001 ../libpurple/status.c:154 +#: ../pidgin/gtkdocklet.c:438 ../pidgin/gtkstatusbox.c:1056 msgid "Available" msgstr "Dispoñible" +#. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for +#. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message +#. Away stuff +#: ../libpurple/protocols/gg/gg.c:1009 ../libpurple/protocols/irc/irc.c:530 +#: ../libpurple/protocols/irc/msgs.c:310 +#: ../libpurple/protocols/jabber/buddy.c:1472 +#: ../libpurple/protocols/novell/novell.c:2819 +#: ../libpurple/protocols/oscar/oscar.c:732 +#: ../libpurple/protocols/oscar/oscar.c:4504 +#: ../libpurple/protocols/oscar/oscar.c:5580 +#: ../libpurple/protocols/qq/qq.c:180 ../libpurple/protocols/qq/qq.c:284 +#: ../libpurple/protocols/silc/buddy.c:1476 +#: ../libpurple/protocols/silc10/buddy.c:1476 +#: ../libpurple/protocols/yahoo/yahoo.c:3553 +#: ../libpurple/protocols/yahoo/yahoo.c:3627 ../libpurple/status.c:157 +#: ../pidgin/gtkdocklet.c:442 ../pidgin/gtkprefs.c:1934 +#: ../pidgin/gtkstatusbox.c:1057 +msgid "Away" +msgstr "Ausente" + #: ../libpurple/protocols/gg/gg.c:1038 ../libpurple/protocols/gg/gg.c:1112 -#: ../libpurple/protocols/oscar/oscar.c:2671 -#: ../libpurple/protocols/oscar/oscar.c:3708 +#: ../libpurple/protocols/oscar/oscar.c:2669 +#: ../libpurple/protocols/oscar/oscar.c:3667 msgid "UIN" msgstr "UIN" #: ../libpurple/protocols/gg/gg.c:1041 ../libpurple/protocols/gg/gg.c:1115 #: ../libpurple/protocols/jabber/buddy.c:1623 #: ../libpurple/protocols/jabber/buddy.c:1799 -#: ../libpurple/protocols/oscar/oscar.c:3719 +#: ../libpurple/protocols/oscar/oscar.c:3678 #: ../libpurple/protocols/silc/ops.c:990 #: ../libpurple/protocols/silc10/ops.c:1024 msgid "First Name" @@ -3322,7 +3498,7 @@ msgstr "Data de nacemento" #: ../libpurple/protocols/gg/gg.c:1106 ../libpurple/protocols/gg/gg.c:1175 -#: ../libpurple/protocols/oscar/oscar.c:3920 +#: ../libpurple/protocols/oscar/oscar.c:3879 msgid "Unable to display the search results." msgstr "Non se poden mostrar os resultados da busca." @@ -3530,11 +3706,11 @@ #: ../libpurple/protocols/jabber/jabber.c:1046 #: ../libpurple/protocols/msn/session.c:345 #: ../libpurple/protocols/novell/novell.c:2182 -#: ../libpurple/protocols/oscar/oscar.c:1288 +#: ../libpurple/protocols/oscar/oscar.c:1285 #: ../libpurple/protocols/qq/qq.c:136 #: ../libpurple/protocols/sametime/sametime.c:3724 #: ../libpurple/protocols/simple/simple.c:1676 -#: ../libpurple/protocols/yahoo/yahoo.c:2779 +#: ../libpurple/protocols/yahoo/yahoo.c:2844 #: ../libpurple/protocols/zephyr/zephyr.c:1621 ../pidgin/gtkstatusbox.c:661 msgid "Connecting" msgstr "Conectando" @@ -3552,7 +3728,7 @@ msgstr "Non se puido crear o conectador " #: ../libpurple/protocols/irc/irc.c:416 -#: ../libpurple/protocols/oscar/oscar.c:1284 +#: ../libpurple/protocols/oscar/oscar.c:1281 msgid "Couldn't connect to host" msgstr "Non se puido conectar ao servidor" @@ -3607,8 +3783,8 @@ #. host to connect to #: ../libpurple/protocols/irc/irc.c:942 ../libpurple/protocols/irc/msgs.c:323 #: ../libpurple/protocols/msn/msn.c:2154 -#: ../libpurple/protocols/oscar/oscar.c:6660 -#: ../libpurple/protocols/qq/qq.c:753 +#: ../libpurple/protocols/oscar/oscar.c:6619 +#: ../libpurple/protocols/qq/qq.c:755 #: ../libpurple/protocols/sametime/sametime.c:5728 #: ../libpurple/protocols/silc/ops.c:1249 #: ../libpurple/protocols/silc/ops.c:1341 @@ -3621,8 +3797,8 @@ #. port to connect to #: ../libpurple/protocols/irc/irc.c:945 ../libpurple/protocols/msn/msn.c:2159 -#: ../libpurple/protocols/oscar/oscar.c:6663 -#: ../libpurple/protocols/qq/qq.c:756 +#: ../libpurple/protocols/oscar/oscar.c:6622 +#: ../libpurple/protocols/qq/qq.c:758 #: ../libpurple/protocols/sametime/sametime.c:5733 #: ../libpurple/protocols/silc/silc.c:1918 #: ../libpurple/protocols/silc10/silc.c:1861 @@ -3692,7 +3868,7 @@ msgstr " <i>(identificado)</i>" #: ../libpurple/protocols/irc/msgs.c:303 -#: ../libpurple/protocols/oscar/oscar.c:3709 +#: ../libpurple/protocols/oscar/oscar.c:3668 #: ../libpurple/protocols/silc/ops.c:1418 #: ../libpurple/protocols/silc10/ops.c:1414 msgid "Nick" @@ -3972,7 +4148,7 @@ msgstr "names [canle]: Obter a lista dos usuarios que están na canle." #: ../libpurple/protocols/irc/parse.c:137 -#: ../libpurple/protocols/jabber/jabber.c:1832 +#: ../libpurple/protocols/jabber/jabber.c:1830 msgid "nick <new nickname>: Change your nickname." msgstr "nick <novo alias>: Cambia o seu alias." @@ -4226,18 +4402,6 @@ msgid "Telephone" msgstr "Teléfono" -#: ../libpurple/protocols/jabber/buddy.c:283 -#: ../libpurple/protocols/jabber/buddy.c:940 -#: ../libpurple/protocols/jabber/buddy.c:948 -#: ../libpurple/protocols/jabber/buddy.c:1629 -#: ../libpurple/protocols/silc/ops.c:1041 -#: ../libpurple/protocols/silc/util.c:555 -#: ../libpurple/protocols/silc10/ops.c:1075 -#: ../libpurple/protocols/silc10/util.c:551 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1061 -msgid "E-Mail" -msgstr "Correo electrónico" - #: ../libpurple/protocols/jabber/buddy.c:284 #: ../libpurple/protocols/jabber/buddy.c:963 msgid "Organization Name" @@ -4256,13 +4420,13 @@ #: ../libpurple/protocols/jabber/buddy.c:288 #: ../libpurple/protocols/jabber/buddy.c:859 #: ../libpurple/protocols/msn/msn.c:1627 -#: ../libpurple/protocols/oscar/oscar.c:3758 +#: ../libpurple/protocols/oscar/oscar.c:3717 msgid "Birthday" msgstr "Ano de nacemento" #: ../libpurple/protocols/jabber/buddy.c:289 #: ../libpurple/protocols/jabber/buddy.c:979 -#: ../libpurple/protocols/jabber/chat.c:775 ../pidgin/gtkblist.c:3090 +#: ../libpurple/protocols/jabber/chat.c:775 ../pidgin/gtkblist.c:3093 #: ../pidgin/gtkprefs.c:738 msgid "Description" msgstr "Descrición" @@ -4313,8 +4477,8 @@ #: ../libpurple/protocols/jabber/buddy.c:879 #: ../libpurple/protocols/jabber/jabber.c:838 -#: ../libpurple/protocols/oscar/oscar.c:3797 -#: ../libpurple/protocols/oscar/oscar.c:3810 +#: ../libpurple/protocols/oscar/oscar.c:3756 +#: ../libpurple/protocols/oscar/oscar.c:3769 #: ../libpurple/protocols/qq/buddy_info.c:56 #: ../libpurple/protocols/silc/ops.c:1030 #: ../libpurple/protocols/silc10/ops.c:1064 @@ -4368,8 +4532,8 @@ #: ../libpurple/protocols/jabber/buddy.c:1476 #: ../libpurple/protocols/jabber/jabber.c:1282 -#: ../libpurple/protocols/oscar/oscar.c:727 -#: ../libpurple/protocols/oscar/oscar.c:5797 +#: ../libpurple/protocols/oscar/oscar.c:726 +#: ../libpurple/protocols/oscar/oscar.c:5756 #: ../libpurple/protocols/sametime/sametime.c:3298 msgid "Do Not Disturb" msgstr "Non molestar" @@ -4380,7 +4544,7 @@ #: ../libpurple/protocols/jabber/buddy.c:1625 #: ../libpurple/protocols/jabber/buddy.c:1804 -#: ../libpurple/protocols/oscar/oscar.c:3720 +#: ../libpurple/protocols/oscar/oscar.c:3679 msgid "Last Name" msgstr "Apelidos" @@ -4418,8 +4582,8 @@ #: ../libpurple/protocols/jabber/buddy.c:1814 #: ../libpurple/protocols/novell/novell.c:1488 -#: ../libpurple/protocols/oscar/oscar.c:3723 -#: ../libpurple/protocols/oscar/oscar.c:3732 +#: ../libpurple/protocols/oscar/oscar.c:3682 +#: ../libpurple/protocols/oscar/oscar.c:3691 msgid "E-Mail Address" msgstr "Enderezo de correo electrónico" @@ -4432,9 +4596,9 @@ #: ../libpurple/protocols/jabber/buddy.c:1825 #: ../libpurple/protocols/qq/group.c:123 #: ../libpurple/protocols/qq/group_im.c:147 -#: ../libpurple/protocols/qq/sys_msg.c:176 -#: ../libpurple/protocols/qq/sys_msg.c:253 -#: ../libpurple/protocols/qq/sys_msg.c:271 +#: ../libpurple/protocols/qq/sys_msg.c:174 +#: ../libpurple/protocols/qq/sys_msg.c:250 +#: ../libpurple/protocols/qq/sys_msg.c:268 #: ../libpurple/protocols/sametime/sametime.c:5612 #: ../pidgin/plugins/gevolution/add_buddy_dialog.c:470 #: ../pidgin/plugins/gevolution/assoc-buddy.c:356 @@ -4458,7 +4622,7 @@ msgstr "Buscar directorio" #: ../libpurple/protocols/jabber/chat.c:41 -#: ../libpurple/protocols/oscar/oscar.c:5283 +#: ../libpurple/protocols/oscar/oscar.c:5242 #: ../libpurple/protocols/yahoo/yahoochat.c:962 msgid "_Room:" msgstr "_Sala:" @@ -4566,8 +4730,8 @@ #: ../libpurple/protocols/jabber/jabber.c:467 #: ../libpurple/protocols/oscar/flap_connection.c:394 -#: ../libpurple/protocols/yahoo/yahoo.c:2398 -#: ../libpurple/protocols/yahoo/yahoo.c:2430 +#: ../libpurple/protocols/yahoo/yahoo.c:2463 +#: ../libpurple/protocols/yahoo/yahoo.c:2495 #, c-format msgid "" "Could not establish a connection with the server:\n" @@ -4615,8 +4779,8 @@ msgstr "Xa está rexistrado" #: ../libpurple/protocols/jabber/jabber.c:848 -#: ../libpurple/protocols/oscar/oscar.c:3799 -#: ../libpurple/protocols/oscar/oscar.c:3812 +#: ../libpurple/protocols/oscar/oscar.c:3758 +#: ../libpurple/protocols/oscar/oscar.c:3771 msgid "State" msgstr "Estado" @@ -4669,8 +4833,8 @@ #: ../libpurple/protocols/jabber/jabber.c:1502 #: ../libpurple/protocols/jabber/jabber.c:1543 #: ../libpurple/protocols/jabber/jabber.c:1579 -#: ../libpurple/protocols/oscar/oscar.c:826 -#: ../libpurple/protocols/oscar/oscar.c:5591 +#: ../libpurple/protocols/oscar/oscar.c:825 +#: ../libpurple/protocols/oscar/oscar.c:5550 msgid "Not Authorized" msgstr "Non autorizado" @@ -4731,7 +4895,7 @@ msgstr "Introduza o novo contrasinal" #: ../libpurple/protocols/jabber/jabber.c:1394 -#: ../libpurple/protocols/oscar/oscar.c:6377 +#: ../libpurple/protocols/oscar/oscar.c:6336 #: ../libpurple/protocols/silc/silc.c:1093 #: ../libpurple/protocols/silc10/silc.c:1004 msgid "Set User Info..." @@ -4739,7 +4903,7 @@ #. if (js->protocol_options & CHANGE_PASSWORD) { #: ../libpurple/protocols/jabber/jabber.c:1399 -#: ../libpurple/protocols/oscar/oscar.c:6388 +#: ../libpurple/protocols/oscar/oscar.c:6347 #: ../libpurple/protocols/silc/silc.c:1089 #: ../libpurple/protocols/silc10/silc.c:1000 msgid "Change Password..." @@ -4969,41 +5133,41 @@ msgid "Unknown role: \"%s\"" msgstr "Papel descoñecido: \"%s\"" -#: ../libpurple/protocols/jabber/jabber.c:1737 +#: ../libpurple/protocols/jabber/jabber.c:1735 #, c-format msgid "Unable to set role \"%s\" for user: %s" msgstr "Non se puido establecer o papel \"%s\" para o usuario: %s" -#: ../libpurple/protocols/jabber/jabber.c:1790 +#: ../libpurple/protocols/jabber/jabber.c:1788 #, c-format msgid "Unable to kick user %s" msgstr "Non puido expulsar o usuario %s" -#: ../libpurple/protocols/jabber/jabber.c:1824 +#: ../libpurple/protocols/jabber/jabber.c:1822 msgid "config: Configure a chat room." msgstr "config: Configurar unha sala de conversa." -#: ../libpurple/protocols/jabber/jabber.c:1828 +#: ../libpurple/protocols/jabber/jabber.c:1826 msgid "configure: Configure a chat room." msgstr "configure: Configurar unha sala de conversa." -#: ../libpurple/protocols/jabber/jabber.c:1837 +#: ../libpurple/protocols/jabber/jabber.c:1835 msgid "part [room]: Leave the room." msgstr "part [sala]: Abandonar a sala." -#: ../libpurple/protocols/jabber/jabber.c:1842 +#: ../libpurple/protocols/jabber/jabber.c:1840 msgid "register: Register with a chat room." msgstr "register: Rexistrarse nunha sala de conversa." -#: ../libpurple/protocols/jabber/jabber.c:1848 +#: ../libpurple/protocols/jabber/jabber.c:1846 msgid "topic [new topic]: View or change the topic." msgstr "topic [novo asunto]: Ver ou cambiar o asunto." -#: ../libpurple/protocols/jabber/jabber.c:1854 +#: ../libpurple/protocols/jabber/jabber.c:1852 msgid "ban <user> [room]: Ban a user from the room." msgstr "ban <usuario> [sala]: Vedar un usuario da sala." -#: ../libpurple/protocols/jabber/jabber.c:1860 +#: ../libpurple/protocols/jabber/jabber.c:1858 msgid "" "affiliate <user> <owner|admin|member|outcast|none>: Set a user's " "affiliation with the room." @@ -5011,7 +5175,7 @@ "affiliate <usuario> <owner|admin|member|outcast|none>: " "Establecer a afiliación dun usuario coa sala." -#: ../libpurple/protocols/jabber/jabber.c:1866 +#: ../libpurple/protocols/jabber/jabber.c:1864 msgid "" "role <user> <moderator|participant|visitor|none>: Set a user's " "role in the room." @@ -5019,19 +5183,19 @@ "role <usuario> <moderator|participant|visitor|none>: Establecer " "o papel dun usuario na sala." -#: ../libpurple/protocols/jabber/jabber.c:1872 +#: ../libpurple/protocols/jabber/jabber.c:1870 msgid "invite <user> [message]: Invite a user to the room." msgstr "invite <usuario> [mensaxe]: Convidar un usuario á sala." -#: ../libpurple/protocols/jabber/jabber.c:1878 +#: ../libpurple/protocols/jabber/jabber.c:1876 msgid "join: <room> [server]: Join a chat on this server." msgstr "join: <sala> [servidor]: Unirse a unha sala no servidor indicado." -#: ../libpurple/protocols/jabber/jabber.c:1884 +#: ../libpurple/protocols/jabber/jabber.c:1882 msgid "kick <user> [room]: Kick a user from the room." msgstr "kick <usuario> [sala]: Botar un usuario da sala." -#: ../libpurple/protocols/jabber/jabber.c:1889 +#: ../libpurple/protocols/jabber/jabber.c:1887 msgid "msg <user> <message>: Send a private message to another user." msgstr "" "msg <usuario> <mensaxe>: Enviarlle unha mensaxe privada a un " @@ -5115,35 +5279,35 @@ msgid "XML Parse error" msgstr "Erro de tratamento XML" -#: ../libpurple/protocols/jabber/presence.c:290 +#: ../libpurple/protocols/jabber/presence.c:292 msgid "Unknown Error in presence" msgstr "Erro descoñecido en presenza" -#: ../libpurple/protocols/jabber/presence.c:364 -#: ../libpurple/protocols/jabber/presence.c:365 +#: ../libpurple/protocols/jabber/presence.c:366 +#: ../libpurple/protocols/jabber/presence.c:367 msgid "Create New Room" msgstr "Crear unha sala nova" -#: ../libpurple/protocols/jabber/presence.c:366 +#: ../libpurple/protocols/jabber/presence.c:368 msgid "" "You are creating a new room. Would you like to configure it, or accept the " "default settings?" msgstr "Vai crear unha sala nova. Desexa configurala ou aceptar os valores predeterminados?" -#: ../libpurple/protocols/jabber/presence.c:372 +#: ../libpurple/protocols/jabber/presence.c:374 msgid "_Configure Room" msgstr "_Configurar a sala" -#: ../libpurple/protocols/jabber/presence.c:373 +#: ../libpurple/protocols/jabber/presence.c:375 msgid "_Accept Defaults" msgstr "_Aceptar os valores predeterminados" -#: ../libpurple/protocols/jabber/presence.c:415 +#: ../libpurple/protocols/jabber/presence.c:417 #, c-format msgid "Error in chat %s" msgstr "Erro na conversa %s" -#: ../libpurple/protocols/jabber/presence.c:419 +#: ../libpurple/protocols/jabber/presence.c:421 #, c-format msgid "Error joining chat %s" msgstr "Erro ao unirse á conversa %s" @@ -5401,7 +5565,7 @@ msgstr "Servidor moi ocupado" #: ../libpurple/protocols/msn/error.c:222 -#: ../libpurple/protocols/oscar/oscar.c:1381 +#: ../libpurple/protocols/oscar/oscar.c:1378 #: ../libpurple/protocols/silc/silc.c:233 #: ../libpurple/protocols/silc10/ops.c:1709 #: ../libpurple/protocols/toc/toc.c:728 ../libpurple/proxy.c:1363 @@ -5504,8 +5668,8 @@ msgstr "Tenlle" #: ../libpurple/protocols/msn/msn.c:551 ../libpurple/protocols/msn/state.c:33 -#: ../libpurple/protocols/yahoo/yahoo.c:2912 -#: ../libpurple/protocols/yahoo/yahoo.c:3596 +#: ../libpurple/protocols/yahoo/yahoo.c:2977 +#: ../libpurple/protocols/yahoo/yahoo.c:3661 msgid "Be Right Back" msgstr "Volvo deseguida" @@ -5516,20 +5680,20 @@ #: ../libpurple/protocols/silc/silc.c:56 #: ../libpurple/protocols/silc10/buddy.c:1480 #: ../libpurple/protocols/silc10/silc.c:47 -#: ../libpurple/protocols/yahoo/yahoo.c:2914 -#: ../libpurple/protocols/yahoo/yahoo.c:3599 +#: ../libpurple/protocols/yahoo/yahoo.c:2979 +#: ../libpurple/protocols/yahoo/yahoo.c:3664 msgid "Busy" msgstr "Ocupado" #: ../libpurple/protocols/msn/msn.c:559 -#: ../libpurple/protocols/yahoo/yahoo.c:2922 -#: ../libpurple/protocols/yahoo/yahoo.c:3611 +#: ../libpurple/protocols/yahoo/yahoo.c:2987 +#: ../libpurple/protocols/yahoo/yahoo.c:3676 msgid "On the Phone" msgstr "Ao teléfono" #: ../libpurple/protocols/msn/msn.c:563 -#: ../libpurple/protocols/yahoo/yahoo.c:2926 -#: ../libpurple/protocols/yahoo/yahoo.c:3617 +#: ../libpurple/protocols/yahoo/yahoo.c:2991 +#: ../libpurple/protocols/yahoo/yahoo.c:3682 msgid "Out to Lunch" msgstr "Saín xantar" @@ -5589,9 +5753,9 @@ msgstr "Xeral" #: ../libpurple/protocols/msn/msn.c:1557 -#: ../libpurple/protocols/oscar/oscar.c:3764 +#: ../libpurple/protocols/oscar/oscar.c:3723 #: ../libpurple/protocols/qq/buddy_info.c:45 -#: ../libpurple/protocols/qq/qq.c:219 +#: ../libpurple/protocols/qq/qq.c:221 #: ../libpurple/protocols/yahoo/yahoo_profile.c:1081 msgid "Age" msgstr "Idade" @@ -5685,7 +5849,7 @@ msgstr "Teléfono da casa 2" #: ../libpurple/protocols/msn/msn.c:1622 -#: ../libpurple/protocols/oscar/oscar.c:3802 +#: ../libpurple/protocols/oscar/oscar.c:3761 msgid "Home Address" msgstr "Domicilio" @@ -5721,7 +5885,7 @@ msgstr "Posto de traballo" #: ../libpurple/protocols/msn/msn.c:1647 -#: ../libpurple/protocols/oscar/oscar.c:3823 +#: ../libpurple/protocols/oscar/oscar.c:3782 msgid "Company" msgstr "Compañía" @@ -5743,7 +5907,7 @@ msgstr "Teléfono do traballo 2" #: ../libpurple/protocols/msn/msn.c:1652 -#: ../libpurple/protocols/oscar/oscar.c:3815 +#: ../libpurple/protocols/oscar/oscar.c:3774 msgid "Work Address" msgstr "Enderezo do traballo" @@ -6066,22 +6230,22 @@ msgid "%s just sent you a Nudge!" msgstr "%s acáballe de dar un cobadazo!" -#: ../libpurple/protocols/msn/userlist.c:250 +#: ../libpurple/protocols/msn/userlist.c:252 #, c-format msgid "%s has added you to his or her buddy list." msgstr "O usuario %s engadiulle á súa lista de contactos." -#: ../libpurple/protocols/msn/userlist.c:319 +#: ../libpurple/protocols/msn/userlist.c:321 #, c-format msgid "%s has removed you from his or her buddy list." msgstr "O usuario %s eliminoulle da súa lista de contactos." -#: ../libpurple/protocols/msn/userlist.c:641 +#: ../libpurple/protocols/msn/userlist.c:643 #, c-format msgid "Unable to add \"%s\"." msgstr "Imposible engadir \"%s\"." -#: ../libpurple/protocols/msn/userlist.c:643 +#: ../libpurple/protocols/msn/userlist.c:645 msgid "The screen name specified is invalid." msgstr "O nome especificado é incorrecto." @@ -6441,8 +6605,8 @@ msgstr "Porto do servidor" #: ../libpurple/protocols/oscar/flap_connection.c:387 -#: ../libpurple/protocols/yahoo/yahoo.c:2309 -#: ../libpurple/protocols/yahoo/yahoo.c:2476 +#: ../libpurple/protocols/yahoo/yahoo.c:2374 +#: ../libpurple/protocols/yahoo/yahoo.c:2541 #: ../libpurple/protocols/yahoo/ycht.c:481 ../libpurple/proxy.c:580 #: ../libpurple/proxy.c:1099 ../libpurple/proxy.c:1208 #: ../libpurple/proxy.c:1308 ../libpurple/proxy.c:1436 @@ -6450,8 +6614,8 @@ msgstr "O servidor pechou a conexión." #: ../libpurple/protocols/oscar/flap_connection.c:389 -#: ../libpurple/protocols/yahoo/yahoo.c:2303 -#: ../libpurple/protocols/yahoo/yahoo.c:2470 ../libpurple/proxy.c:592 +#: ../libpurple/protocols/yahoo/yahoo.c:2368 +#: ../libpurple/protocols/yahoo/yahoo.c:2535 ../libpurple/proxy.c:592 #: ../libpurple/proxy.c:1111 ../libpurple/proxy.c:1220 #: ../libpurple/proxy.c:1320 ../libpurple/proxy.c:1448 #, c-format @@ -6500,7 +6664,7 @@ msgstr "Complemento de protocolo ICQ" #: ../libpurple/protocols/oscar/libicq.c:147 -#: ../libpurple/protocols/yahoo/yahoo.c:4203 +#: ../libpurple/protocols/yahoo/yahoo.c:4279 #: ../libpurple/protocols/zephyr/zephyr.c:2997 msgid "Encoding" msgstr "Codificación" @@ -6631,7 +6795,7 @@ msgid "Not while on AOL" msgstr "Non mentres está en AOL" -#: ../libpurple/protocols/oscar/oscar.c:348 +#: ../libpurple/protocols/oscar/oscar.c:347 msgid "" "(There was an error receiving this message. The buddy you are speaking with " "is probably using a different encoding than expected. If you know what " @@ -6642,7 +6806,7 @@ "empregar unha codificación diferente da esperada. Se sabe cal está " "empregando pode especificalo nas opcións avanzadas de conta para AIM/ICQ)" -#: ../libpurple/protocols/oscar/oscar.c:457 +#: ../libpurple/protocols/oscar/oscar.c:456 #, c-format msgid "" "(There was an error receiving this message. Either you and %s have " @@ -6652,21 +6816,21 @@ "unha codificación diferente ou que %s ten un cliente con erros.)" #. Label -#: ../libpurple/protocols/oscar/oscar.c:639 ../pidgin/gtkutils.c:2376 +#: ../libpurple/protocols/oscar/oscar.c:638 ../pidgin/gtkutils.c:2376 #: ../pidgin/gtkutils.c:2406 #: ../pidgin/plugins/gevolution/new_person_dialog.c:334 msgid "Buddy Icon" msgstr "Icona de contacto" -#: ../libpurple/protocols/oscar/oscar.c:642 +#: ../libpurple/protocols/oscar/oscar.c:641 msgid "Voice" msgstr "Voz" -#: ../libpurple/protocols/oscar/oscar.c:645 +#: ../libpurple/protocols/oscar/oscar.c:644 msgid "AIM Direct IM" msgstr "MI Directa AIM" -#: ../libpurple/protocols/oscar/oscar.c:648 +#: ../libpurple/protocols/oscar/oscar.c:647 #: ../libpurple/protocols/silc/silc.c:768 #: ../libpurple/protocols/silc/util.c:553 #: ../libpurple/protocols/silc10/silc.c:679 @@ -6674,124 +6838,125 @@ msgid "Chat" msgstr "Conversa" -#: ../libpurple/protocols/oscar/oscar.c:651 -#: ../libpurple/protocols/oscar/oscar.c:5999 +#: ../libpurple/protocols/oscar/oscar.c:650 +#: ../libpurple/protocols/oscar/oscar.c:5958 msgid "Get File" msgstr "Recibir ficheiro" -#: ../libpurple/protocols/oscar/oscar.c:658 +#: ../libpurple/protocols/oscar/oscar.c:657 msgid "Games" msgstr "Xogos" -#: ../libpurple/protocols/oscar/oscar.c:661 +#: ../libpurple/protocols/oscar/oscar.c:660 msgid "Add-Ins" msgstr "Extensións" -#: ../libpurple/protocols/oscar/oscar.c:664 +#: ../libpurple/protocols/oscar/oscar.c:663 msgid "Send Buddy List" msgstr "Enviar lista de contactos" -#: ../libpurple/protocols/oscar/oscar.c:667 +#: ../libpurple/protocols/oscar/oscar.c:666 msgid "ICQ Direct Connect" msgstr "Conexión directa ICQ" -#: ../libpurple/protocols/oscar/oscar.c:670 +#: ../libpurple/protocols/oscar/oscar.c:669 msgid "AP User" msgstr "Usuario de AP" -#: ../libpurple/protocols/oscar/oscar.c:673 +#: ../libpurple/protocols/oscar/oscar.c:672 msgid "ICQ RTF" msgstr "ICQ RTF" -#: ../libpurple/protocols/oscar/oscar.c:676 +#: ../libpurple/protocols/oscar/oscar.c:675 msgid "Nihilist" msgstr "Nihilista" -#: ../libpurple/protocols/oscar/oscar.c:679 +#: ../libpurple/protocols/oscar/oscar.c:678 msgid "ICQ Server Relay" msgstr "ICQ Server Relay" -#: ../libpurple/protocols/oscar/oscar.c:682 +#: ../libpurple/protocols/oscar/oscar.c:681 msgid "Old ICQ UTF8" msgstr "Antigo ICQ UTF8" -#: ../libpurple/protocols/oscar/oscar.c:685 +#: ../libpurple/protocols/oscar/oscar.c:684 msgid "Trillian Encryption" msgstr "Cifraxe Trillian" -#: ../libpurple/protocols/oscar/oscar.c:688 +#: ../libpurple/protocols/oscar/oscar.c:687 msgid "ICQ UTF8" msgstr "ICQ UTF8" -#: ../libpurple/protocols/oscar/oscar.c:691 +#: ../libpurple/protocols/oscar/oscar.c:690 msgid "Hiptop" msgstr "Hiptop" -#: ../libpurple/protocols/oscar/oscar.c:694 +#: ../libpurple/protocols/oscar/oscar.c:693 msgid "Security Enabled" msgstr "Seguridade activada" -#: ../libpurple/protocols/oscar/oscar.c:697 +#: ../libpurple/protocols/oscar/oscar.c:696 msgid "Video Chat" msgstr "Vídeoconversa" -#: ../libpurple/protocols/oscar/oscar.c:701 +#: ../libpurple/protocols/oscar/oscar.c:700 msgid "iChat AV" msgstr "iChat AV" -#: ../libpurple/protocols/oscar/oscar.c:704 +#: ../libpurple/protocols/oscar/oscar.c:703 msgid "Live Video" msgstr "Vídeo en directo" -#: ../libpurple/protocols/oscar/oscar.c:707 +#: ../libpurple/protocols/oscar/oscar.c:706 msgid "Camera" msgstr "Cámara" -#: ../libpurple/protocols/oscar/oscar.c:725 -#: ../libpurple/protocols/oscar/oscar.c:5769 +#: ../libpurple/protocols/oscar/oscar.c:724 +#: ../libpurple/protocols/oscar/oscar.c:5728 msgid "Free For Chat" msgstr "Dispoñible para conversar" -#: ../libpurple/protocols/oscar/oscar.c:729 -#: ../libpurple/protocols/oscar/oscar.c:5804 +#: ../libpurple/protocols/oscar/oscar.c:728 +#: ../libpurple/protocols/oscar/oscar.c:5763 msgid "Not Available" msgstr "Non dispoñible" -#: ../libpurple/protocols/oscar/oscar.c:731 -#: ../libpurple/protocols/oscar/oscar.c:5790 +#: ../libpurple/protocols/oscar/oscar.c:730 +#: ../libpurple/protocols/oscar/oscar.c:5749 msgid "Occupied" msgstr "Ocupado" -#: ../libpurple/protocols/oscar/oscar.c:735 +#: ../libpurple/protocols/oscar/oscar.c:734 msgid "Web Aware" msgstr "Visible na Web" -#: ../libpurple/protocols/oscar/oscar.c:737 ../libpurple/protocols/qq/qq.c:183 -#: ../libpurple/protocols/yahoo/yahoo.c:2930 ../libpurple/status.c:156 -#: ../pidgin/gtkdocklet.c:446 ../pidgin/gtkstatusbox.c:1058 +#: ../libpurple/protocols/oscar/oscar.c:736 ../libpurple/protocols/qq/qq.c:183 +#: ../libpurple/protocols/qq/qq.c:288 +#: ../libpurple/protocols/yahoo/yahoo.c:2995 ../libpurple/status.c:156 +#: ../pidgin/gtkdocklet.c:446 ../pidgin/gtkstatusbox.c:1059 msgid "Invisible" msgstr "Invisible" -#: ../libpurple/protocols/oscar/oscar.c:739 +#: ../libpurple/protocols/oscar/oscar.c:738 msgid "Online" msgstr "Conectado" -#: ../libpurple/protocols/oscar/oscar.c:838 -#: ../libpurple/protocols/oscar/oscar.c:3716 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:721 ../pidgin/gtkprefs.c:1121 +#: ../libpurple/protocols/oscar/oscar.c:837 +#: ../libpurple/protocols/oscar/oscar.c:3675 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:721 ../pidgin/gtkprefs.c:1123 msgid "IP Address" msgstr "Enderezo IP" -#: ../libpurple/protocols/oscar/oscar.c:845 -#: ../libpurple/protocols/oscar/oscar.c:2863 +#: ../libpurple/protocols/oscar/oscar.c:844 +#: ../libpurple/protocols/oscar/oscar.c:2861 msgid "Warning Level" msgstr "Nivel de aviso" -#: ../libpurple/protocols/oscar/oscar.c:855 +#: ../libpurple/protocols/oscar/oscar.c:854 msgid "Buddy Comment" msgstr "Comentario de contacto" -#: ../libpurple/protocols/oscar/oscar.c:995 +#: ../libpurple/protocols/oscar/oscar.c:994 #, c-format msgid "" "Could not connect to authentication server:\n" @@ -6800,7 +6965,7 @@ "Non se puido conectar ao servidor de autenticación:\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:1003 +#: ../libpurple/protocols/oscar/oscar.c:1002 #, c-format msgid "" "Could not connect to BOS server:\n" @@ -6809,20 +6974,20 @@ "Non se puido conectar ao servidor BOS:\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:1043 +#: ../libpurple/protocols/oscar/oscar.c:1042 msgid "Screen name sent" msgstr "Enviouse o nome de usuario" -#: ../libpurple/protocols/oscar/oscar.c:1048 +#: ../libpurple/protocols/oscar/oscar.c:1047 msgid "Connection established, cookie sent" msgstr "Conexión establecida, cookie enviada" #. TODO: Don't call this with ssi -#: ../libpurple/protocols/oscar/oscar.c:1077 +#: ../libpurple/protocols/oscar/oscar.c:1076 msgid "Finalizing connection" msgstr "Rematando a conexión" -#: ../libpurple/protocols/oscar/oscar.c:1261 +#: ../libpurple/protocols/oscar/oscar.c:1258 #, c-format msgid "" "Unable to login: Could not sign on as %s because the screen name is " @@ -6833,29 +6998,29 @@ "inválido. Os nomes de usuario teñen que ser unha dirección de correo electrónico válida ou " "comezar cunha letra e conter só letras, números e espazos, ou conter só números." -#: ../libpurple/protocols/oscar/oscar.c:1346 -#: ../libpurple/protocols/yahoo/yahoo.c:1948 +#: ../libpurple/protocols/oscar/oscar.c:1343 +#: ../libpurple/protocols/yahoo/yahoo.c:2010 msgid "Invalid screen name." msgstr "Nome de usuario incorrecto." -#: ../libpurple/protocols/oscar/oscar.c:1353 +#: ../libpurple/protocols/oscar/oscar.c:1350 #: ../libpurple/protocols/qq/login_logout.c:483 #: ../libpurple/protocols/simple/simple.c:1039 -#: ../libpurple/protocols/yahoo/yahoo.c:1969 +#: ../libpurple/protocols/yahoo/yahoo.c:2031 msgid "Incorrect password." msgstr "Contrasinal incorrecto." -#: ../libpurple/protocols/oscar/oscar.c:1358 +#: ../libpurple/protocols/oscar/oscar.c:1355 msgid "Your account is currently suspended." msgstr "A conta está deshabilitada actualmente." #. service temporarily unavailable -#: ../libpurple/protocols/oscar/oscar.c:1362 +#: ../libpurple/protocols/oscar/oscar.c:1359 msgid "The AOL Instant Messenger service is temporarily unavailable." msgstr "O servizo de mensaxería instantánea AOL non está dispoñible temporalmente." -#: ../libpurple/protocols/oscar/oscar.c:1367 -#: ../libpurple/protocols/oscar/oscar.c:1378 +#: ../libpurple/protocols/oscar/oscar.c:1364 +#: ../libpurple/protocols/oscar/oscar.c:1375 msgid "" "You have been connecting and disconnecting too frequently. Wait ten minutes " "and try again. If you continue to try, you will need to wait even longer." @@ -6863,44 +7028,44 @@ "Conectouse e desconectouse demasiadas veces. Agarde dez minutos e inténteo " "de novo. Se segue a intentalo, pode que necesite agardar máis tempo." -#: ../libpurple/protocols/oscar/oscar.c:1372 +#: ../libpurple/protocols/oscar/oscar.c:1369 #, c-format msgid "The client version you are using is too old. Please upgrade at %s" msgstr "A versión do cliente que usa é demasiado antiga. Actualízea en %s" -#: ../libpurple/protocols/oscar/oscar.c:1411 +#: ../libpurple/protocols/oscar/oscar.c:1408 msgid "Could Not Connect" msgstr "Non se puido conectar" -#: ../libpurple/protocols/oscar/oscar.c:1415 +#: ../libpurple/protocols/oscar/oscar.c:1412 msgid "Received authorization" msgstr "Recibiuse a autorización" -#: ../libpurple/protocols/oscar/oscar.c:1437 +#: ../libpurple/protocols/oscar/oscar.c:1434 msgid "The SecurID key entered is invalid." msgstr "A clave SecurID que se introduciu non é válida." -#: ../libpurple/protocols/oscar/oscar.c:1450 +#: ../libpurple/protocols/oscar/oscar.c:1447 msgid "Enter SecurID" msgstr "Introduza o SecurID" -#: ../libpurple/protocols/oscar/oscar.c:1451 +#: ../libpurple/protocols/oscar/oscar.c:1448 msgid "Enter the 6 digit number from the digital display." msgstr "Introduza o díxito de seis números que aparece na pantalla." #. * #. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons. #. -#: ../libpurple/protocols/oscar/oscar.c:1453 -#: ../libpurple/protocols/oscar/oscar.c:2246 -#: ../libpurple/protocols/oscar/oscar.c:2293 -#: ../libpurple/protocols/oscar/oscar.c:5874 -#: ../libpurple/protocols/oscar/oscar.c:6155 ../libpurple/request.h:1387 +#: ../libpurple/protocols/oscar/oscar.c:1450 +#: ../libpurple/protocols/oscar/oscar.c:2242 +#: ../libpurple/protocols/oscar/oscar.c:2291 +#: ../libpurple/protocols/oscar/oscar.c:5833 +#: ../libpurple/protocols/oscar/oscar.c:6114 ../libpurple/request.h:1387 msgid "_OK" msgstr "_Aceptar" -#: ../libpurple/protocols/oscar/oscar.c:1492 -#: ../libpurple/protocols/oscar/oscar.c:1535 +#: ../libpurple/protocols/oscar/oscar.c:1489 +#: ../libpurple/protocols/oscar/oscar.c:1532 #, c-format msgid "" "You may be disconnected shortly. You may want to use TOC until this is " @@ -6909,53 +7074,53 @@ "Talvez sexa desconectado en breve. Pode querer usar TOC ata que se resolva " "isto. Comprobe %s para as novidades." -#: ../libpurple/protocols/oscar/oscar.c:1495 -#: ../libpurple/protocols/oscar/oscar.c:1538 +#: ../libpurple/protocols/oscar/oscar.c:1492 +#: ../libpurple/protocols/oscar/oscar.c:1535 msgid "Unable to get a valid AIM login hash." msgstr "Non se puido obter un hash de inicio de sesión AIM válido." -#: ../libpurple/protocols/oscar/oscar.c:1623 +#: ../libpurple/protocols/oscar/oscar.c:1620 #, c-format msgid "You may be disconnected shortly. Check %s for updates." msgstr "Talvez sexa desconectado en breve. Comprobe %s para actualizacións." -#: ../libpurple/protocols/oscar/oscar.c:1626 +#: ../libpurple/protocols/oscar/oscar.c:1623 msgid "Unable to get a valid login hash." msgstr "Non se puido obter un hash de inicio de sesión válido." -#: ../libpurple/protocols/oscar/oscar.c:1655 +#: ../libpurple/protocols/oscar/oscar.c:1652 msgid "Password sent" msgstr "Contrasinal enviado" -#: ../libpurple/protocols/oscar/oscar.c:1711 +#: ../libpurple/protocols/oscar/oscar.c:1708 msgid "Unable to initialize connection" msgstr "Non é posible comezar a conexión" -#: ../libpurple/protocols/oscar/oscar.c:2216 +#: ../libpurple/protocols/oscar/oscar.c:2212 msgid "Please authorize me so I can add you to my buddy list." msgstr "Autoríceme para que poida engadirlle á miña lista de contactos." -#: ../libpurple/protocols/oscar/oscar.c:2244 +#: ../libpurple/protocols/oscar/oscar.c:2240 msgid "Authorization Request Message:" msgstr "Mensaxe de solicitude de autorización:" -#: ../libpurple/protocols/oscar/oscar.c:2245 +#: ../libpurple/protocols/oscar/oscar.c:2241 msgid "Please authorize me!" msgstr "Por favor, autoríceme!" -#: ../libpurple/protocols/oscar/oscar.c:2285 -#: ../libpurple/protocols/oscar/oscar.c:2292 -#: ../libpurple/protocols/oscar/oscar.c:2419 -#: ../libpurple/protocols/oscar/oscar.c:5252 -#: ../libpurple/protocols/yahoo/yahoo.c:1000 +#: ../libpurple/protocols/oscar/oscar.c:2282 +#: ../libpurple/protocols/oscar/oscar.c:2290 +#: ../libpurple/protocols/oscar/oscar.c:2417 +#: ../libpurple/protocols/oscar/oscar.c:5211 +#: ../libpurple/protocols/yahoo/yahoo.c:1014 msgid "No reason given." msgstr "Non se indicou unha razón." -#: ../libpurple/protocols/oscar/oscar.c:2291 +#: ../libpurple/protocols/oscar/oscar.c:2289 msgid "Authorization Denied Message:" msgstr "Mensaxe de autorización rexeitada:" -#: ../libpurple/protocols/oscar/oscar.c:2419 +#: ../libpurple/protocols/oscar/oscar.c:2417 #, c-format msgid "" "The user %u has denied your request to add them to your buddy list for the " @@ -6966,17 +7131,17 @@ "seguinte razón:\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:2420 +#: ../libpurple/protocols/oscar/oscar.c:2418 msgid "ICQ authorization denied." msgstr "Autorización ICQ rexeitada." #. Someone has granted you authorization -#: ../libpurple/protocols/oscar/oscar.c:2427 +#: ../libpurple/protocols/oscar/oscar.c:2425 #, c-format msgid "The user %u has granted your request to add them to your buddy list." msgstr "O usuario %u autorizou a súa solicitude de engadilos á súa lista de contactos." -#: ../libpurple/protocols/oscar/oscar.c:2435 +#: ../libpurple/protocols/oscar/oscar.c:2433 #, c-format msgid "" "You have received a special message\n" @@ -6989,7 +7154,7 @@ "De: %s [%s]\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:2443 +#: ../libpurple/protocols/oscar/oscar.c:2441 #, c-format msgid "" "You have received an ICQ page\n" @@ -7002,7 +7167,7 @@ "De: %s [%s]\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:2451 +#: ../libpurple/protocols/oscar/oscar.c:2449 #, c-format msgid "" "You have received an ICQ e-mail from %s [%s]\n" @@ -7015,59 +7180,59 @@ "A mensaxe é:\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:2472 +#: ../libpurple/protocols/oscar/oscar.c:2470 #, c-format msgid "ICQ user %u has sent you a buddy: %s (%s)" msgstr "O usuario ICQ %u envioulle un contacto: %s (%s)" -#: ../libpurple/protocols/oscar/oscar.c:2478 +#: ../libpurple/protocols/oscar/oscar.c:2476 msgid "Do you want to add this buddy to your buddy list?" msgstr "Desexa engadir este contacto á lista de contactos?" -#: ../libpurple/protocols/oscar/oscar.c:2483 ../pidgin/gtkroomlist.c:308 +#: ../libpurple/protocols/oscar/oscar.c:2481 ../pidgin/gtkroomlist.c:308 msgid "_Add" msgstr "_Engadir" -#: ../libpurple/protocols/oscar/oscar.c:2484 +#: ../libpurple/protocols/oscar/oscar.c:2482 msgid "_Decline" msgstr "_Rexeitar" -#: ../libpurple/protocols/oscar/oscar.c:2568 +#: ../libpurple/protocols/oscar/oscar.c:2566 #, c-format msgid "You missed %hu message from %s because it was invalid." msgid_plural "You missed %hu messages from %s because they were invalid." msgstr[0] "Perdeuse %hu mensaxe de %s porque non era válida." msgstr[1] "Perdeuse %hu mensaxe de %s porque non era válida." -#: ../libpurple/protocols/oscar/oscar.c:2577 +#: ../libpurple/protocols/oscar/oscar.c:2575 #, c-format msgid "You missed %hu message from %s because it was too large." msgid_plural "You missed %hu messages from %s because they were too large." msgstr[0] "Perdeuse %hu mensaxe de %s porque era demasiado longa." msgstr[1] "Perdeuse %hu mensaxe de %s porque era demasiado longa." -#: ../libpurple/protocols/oscar/oscar.c:2586 +#: ../libpurple/protocols/oscar/oscar.c:2584 #, c-format msgid "You missed %hu message from %s because the rate limit has been exceeded." msgid_plural "You missed %hu messages from %s because the rate limit has been exceeded." msgstr[0] "Perdeu %hu mensaxe de %s porque se mandou damasiado rápido." msgstr[1] "Perdeu %hu mensaxe de %s porque se mandou damasiado rápido." -#: ../libpurple/protocols/oscar/oscar.c:2595 +#: ../libpurple/protocols/oscar/oscar.c:2593 #, c-format msgid "You missed %hu message from %s because he/she was too evil." msgid_plural "You missed %hu messages from %s because he/she was too evil." msgstr[0] "Perdeuse %hu mensaxe de %s porque el/ela foi moi malvado/a." msgstr[1] "Perdeuse %hu mensaxe de %s porque el/ela foi moi malvado/a." -#: ../libpurple/protocols/oscar/oscar.c:2604 +#: ../libpurple/protocols/oscar/oscar.c:2602 #, c-format msgid "You missed %hu message from %s because you are too evil." msgid_plural "You missed %hu messages from %s because you are too evil." msgstr[0] "Perdeuse %hu mensaxe de %s porque es moi malvado/a." msgstr[1] "Perdeuse %hu mensaxe de %s porque es moi malvado/a." -#: ../libpurple/protocols/oscar/oscar.c:2613 +#: ../libpurple/protocols/oscar/oscar.c:2611 #, c-format msgid "You missed %hu message from %s for an unknown reason." msgid_plural "You missed %hu messages from %s for an unknown reason." @@ -7075,55 +7240,55 @@ msgstr[1] "Perdeuse %hu mensaxe de %s por motivos descoñecidos." #. Data is assumed to be the destination sn -#: ../libpurple/protocols/oscar/oscar.c:2768 +#: ../libpurple/protocols/oscar/oscar.c:2766 #, c-format msgid "Unable to send message: %s" msgstr "Non se puido enviar a mensaxe: %s" -#: ../libpurple/protocols/oscar/oscar.c:2768 -#: ../libpurple/protocols/oscar/oscar.c:2773 -#: ../libpurple/protocols/oscar/oscar.c:2837 +#: ../libpurple/protocols/oscar/oscar.c:2766 +#: ../libpurple/protocols/oscar/oscar.c:2771 +#: ../libpurple/protocols/oscar/oscar.c:2835 msgid "Unknown reason." msgstr "Razón descoñecida." -#: ../libpurple/protocols/oscar/oscar.c:2771 +#: ../libpurple/protocols/oscar/oscar.c:2769 #: ../libpurple/protocols/sametime/sametime.c:2409 #, c-format msgid "Unable to send message to %s:" msgstr "Non se puido enviar a mensaxe a %s:" -#: ../libpurple/protocols/oscar/oscar.c:2837 +#: ../libpurple/protocols/oscar/oscar.c:2835 #, c-format msgid "User information not available: %s" msgstr "Información de usuario non dispoñible: %s" -#: ../libpurple/protocols/oscar/oscar.c:2868 +#: ../libpurple/protocols/oscar/oscar.c:2866 msgid "Online Since" msgstr "Conectado desde" -#: ../libpurple/protocols/oscar/oscar.c:2873 +#: ../libpurple/protocols/oscar/oscar.c:2871 #: ../libpurple/protocols/yahoo/yahoo_profile.c:1185 msgid "Member Since" msgstr "Membro desde" -#: ../libpurple/protocols/oscar/oscar.c:2878 +#: ../libpurple/protocols/oscar/oscar.c:2876 msgid "Capabilities" msgstr "Capacidades" -#: ../libpurple/protocols/oscar/oscar.c:2908 +#: ../libpurple/protocols/oscar/oscar.c:2906 msgid "Available Message" msgstr "Mensaxe dispoñible" -#: ../libpurple/protocols/oscar/oscar.c:2936 +#: ../libpurple/protocols/oscar/oscar.c:2934 msgid "Profile" msgstr "Perfil" -#: ../libpurple/protocols/oscar/oscar.c:3016 +#: ../libpurple/protocols/oscar/oscar.c:3014 msgid "Your AIM connection may be lost." msgstr "Pode que se perdese a conexión AIM." #. The conversion failed! -#: ../libpurple/protocols/oscar/oscar.c:3204 +#: ../libpurple/protocols/oscar/oscar.c:3202 msgid "" "[Unable to display a message from this user because it contained invalid " "characters.]" @@ -7131,7 +7296,7 @@ "[Non se puido mostrar unha mensaxe deste usuario porque contén caracteres " "incorrectos.]" -#: ../libpurple/protocols/oscar/oscar.c:3407 +#: ../libpurple/protocols/oscar/oscar.c:3366 msgid "" "The last action you attempted could not be performed because you are over " "the rate limit. Please wait 10 seconds and try again." @@ -7140,82 +7305,82 @@ "na taxa de envío de mensaxes. Agarde 10 segundos e volva a " "intentalo." -#: ../libpurple/protocols/oscar/oscar.c:3490 +#: ../libpurple/protocols/oscar/oscar.c:3449 #: ../libpurple/protocols/toc/toc.c:977 #, c-format msgid "You have been disconnected from chat room %s." msgstr "Desconectouse da sala de conversa: %s." -#: ../libpurple/protocols/oscar/oscar.c:3738 +#: ../libpurple/protocols/oscar/oscar.c:3697 #: ../libpurple/protocols/silc/util.c:585 #: ../libpurple/protocols/silc10/util.c:581 msgid "Mobile Phone" msgstr "Teléfono móbil" -#: ../libpurple/protocols/oscar/oscar.c:3768 +#: ../libpurple/protocols/oscar/oscar.c:3727 msgid "Personal Web Page" msgstr "Sitio web persoal" -#: ../libpurple/protocols/oscar/oscar.c:3792 +#: ../libpurple/protocols/oscar/oscar.c:3751 #: ../libpurple/protocols/qq/buddy_info.c:40 msgid "Additional Information" msgstr "Información adicional" -#: ../libpurple/protocols/oscar/oscar.c:3800 -#: ../libpurple/protocols/oscar/oscar.c:3813 +#: ../libpurple/protocols/oscar/oscar.c:3759 +#: ../libpurple/protocols/oscar/oscar.c:3772 msgid "Zip Code" msgstr "Código postal" -#: ../libpurple/protocols/oscar/oscar.c:3824 +#: ../libpurple/protocols/oscar/oscar.c:3783 msgid "Division" msgstr "Sección" -#: ../libpurple/protocols/oscar/oscar.c:3825 +#: ../libpurple/protocols/oscar/oscar.c:3784 msgid "Position" msgstr "Cargo" -#: ../libpurple/protocols/oscar/oscar.c:3827 +#: ../libpurple/protocols/oscar/oscar.c:3786 msgid "Web Page" msgstr "Páxina web" -#: ../libpurple/protocols/oscar/oscar.c:3830 +#: ../libpurple/protocols/oscar/oscar.c:3789 msgid "Work Information" msgstr "Información do traballo" -#: ../libpurple/protocols/oscar/oscar.c:3886 +#: ../libpurple/protocols/oscar/oscar.c:3845 msgid "Pop-Up Message" msgstr "Mensaxe emerxente" -#: ../libpurple/protocols/oscar/oscar.c:3926 +#: ../libpurple/protocols/oscar/oscar.c:3885 #, c-format msgid "The following screen name is associated with %s" msgid_plural "The following screen names are associated with %s" msgstr[0] "O seguinte nome de usuario está asociado a %s" msgstr[1] "O seguinte nome de usuario está asociado a %s" -#: ../libpurple/protocols/oscar/oscar.c:3931 +#: ../libpurple/protocols/oscar/oscar.c:3890 msgid "Screen name" msgstr "Nome de usuario" -#: ../libpurple/protocols/oscar/oscar.c:3957 +#: ../libpurple/protocols/oscar/oscar.c:3916 #, c-format msgid "No results found for e-mail address %s" msgstr "Non se atoparon resultados para o enderezo de correo electrónico %s" -#: ../libpurple/protocols/oscar/oscar.c:3978 +#: ../libpurple/protocols/oscar/oscar.c:3937 #, c-format msgid "You should receive an e-mail asking to confirm %s." msgstr "Debería recibir un correo electrónico. solicitando confirmación de %s." -#: ../libpurple/protocols/oscar/oscar.c:3980 +#: ../libpurple/protocols/oscar/oscar.c:3939 msgid "Account Confirmation Requested" msgstr "Confirmación de conta solicitada" -#: ../libpurple/protocols/oscar/oscar.c:4011 +#: ../libpurple/protocols/oscar/oscar.c:3970 msgid "Error Changing Account Info" msgstr "Erro ao cambiar a información da conta" -#: ../libpurple/protocols/oscar/oscar.c:4014 +#: ../libpurple/protocols/oscar/oscar.c:3973 #, c-format msgid "" "Error 0x%04x: Unable to format screen name because the requested screen name " @@ -7224,12 +7389,12 @@ "Erro 0x%04x: Non se lle pode dar formato ao nome de usuario porque o nome " "solicitado difire do orixinal." -#: ../libpurple/protocols/oscar/oscar.c:4017 +#: ../libpurple/protocols/oscar/oscar.c:3976 #, c-format msgid "Error 0x%04x: Unable to format screen name because it is invalid." msgstr "Erro 0x%04x: Non se pode dar formato ao nome de usuario porque é incorrecto." -#: ../libpurple/protocols/oscar/oscar.c:4020 +#: ../libpurple/protocols/oscar/oscar.c:3979 #, c-format msgid "" "Error 0x%04x: Unable to format screen name because the requested screen name " @@ -7238,7 +7403,7 @@ "Erro 0x%04x: Non se pode dar formato ao nome de usuario porque o nome " "solicitado é demasiado longo." -#: ../libpurple/protocols/oscar/oscar.c:4023 +#: ../libpurple/protocols/oscar/oscar.c:3982 #, c-format msgid "" "Error 0x%04x: Unable to change e-mail address because there is already a " @@ -7247,7 +7412,7 @@ "Erro 0x%04x: Non se pode cambiar o enderezo de correo electrónico porque xa existe unha " "solicitude pendente para este usuario." -#: ../libpurple/protocols/oscar/oscar.c:4026 +#: ../libpurple/protocols/oscar/oscar.c:3985 #, c-format msgid "" "Error 0x%04x: Unable to change e-mail address because the given address has " @@ -7256,7 +7421,7 @@ "Erro 0x%04x: Non se pode cambiar o enderezo de correo electrónico porque o enderezo " "dado ten demasiados nomes asociados." -#: ../libpurple/protocols/oscar/oscar.c:4029 +#: ../libpurple/protocols/oscar/oscar.c:3988 #, c-format msgid "" "Error 0x%04x: Unable to change e-mail address because the given address is " @@ -7265,31 +7430,31 @@ "Erro 0x%04x: Non se pode cambiar o enderezo de correo electrónico porque o enderezo " "dado é incorrecto." -#: ../libpurple/protocols/oscar/oscar.c:4032 +#: ../libpurple/protocols/oscar/oscar.c:3991 #, c-format msgid "Error 0x%04x: Unknown error." msgstr "Erro 0x%04x: Erro descoñecido." -#: ../libpurple/protocols/oscar/oscar.c:4042 +#: ../libpurple/protocols/oscar/oscar.c:4001 #, c-format msgid "The e-mail address for %s is %s" msgstr "O enderezo de correo electrónico de %s é %s" -#: ../libpurple/protocols/oscar/oscar.c:4044 +#: ../libpurple/protocols/oscar/oscar.c:4003 msgid "Account Info" msgstr "Información da conta" -#: ../libpurple/protocols/oscar/oscar.c:4216 +#: ../libpurple/protocols/oscar/oscar.c:4175 msgid "Your IM Image was not sent. You must be Direct Connected to send IM Images." msgstr "" "Non se enviou a súa imaxe MI. Debe estar directamente conectado para enviar " "imaxes MI." -#: ../libpurple/protocols/oscar/oscar.c:4487 +#: ../libpurple/protocols/oscar/oscar.c:4446 msgid "Unable to set AIM profile." msgstr "Non se puido establecer o perfil AIM." -#: ../libpurple/protocols/oscar/oscar.c:4488 +#: ../libpurple/protocols/oscar/oscar.c:4447 msgid "" "You have probably requested to set your profile before the login procedure " "completed. Your profile remains unset; try setting it again when you are " @@ -7299,7 +7464,7 @@ "inicio de sesión se completase. O perfil non se establecerá, inténteo novamente cando xa " "estea conectado completamente." -#: ../libpurple/protocols/oscar/oscar.c:4502 +#: ../libpurple/protocols/oscar/oscar.c:4461 #, c-format msgid "" "The maximum profile length of %d byte has been exceeded. It has been " @@ -7311,14 +7476,14 @@ "Excedeuse a lonxitude máxima de %d byte do perfil de usuario. Eliminouse o " "excedente." msgstr[1] "" -"Excedeuse a lonxitude máxima de %d bytes do perfil de usuario. Eliminouse o " +"Excedeuse a lonxitude máxima de %d byte do perfil de usuario. Eliminouse o " "excedente." -#: ../libpurple/protocols/oscar/oscar.c:4507 +#: ../libpurple/protocols/oscar/oscar.c:4466 msgid "Profile too long." msgstr "Perfil demasiado longo." -#: ../libpurple/protocols/oscar/oscar.c:4552 +#: ../libpurple/protocols/oscar/oscar.c:4511 #, c-format msgid "" "The maximum away message length of %d byte has been exceeded. It has been " @@ -7330,14 +7495,14 @@ "Excedeuse a lonxitude máxima de %d byte da mensaxe de ausencia. Eliminouse o " "excedente." msgstr[1] "" -"Excedeuse a lonxitude máxima de %d bytes da mensaxe de ausencia. Eliminouse o " +"Excedeuse a lonxitude máxima de %d byte da mensaxe de ausencia. Eliminouse o " "excedente." -#: ../libpurple/protocols/oscar/oscar.c:4557 +#: ../libpurple/protocols/oscar/oscar.c:4516 msgid "Away message too long." msgstr "Mensaxe de ausencia demasiado longa." -#: ../libpurple/protocols/oscar/oscar.c:4626 +#: ../libpurple/protocols/oscar/oscar.c:4585 #, c-format msgid "" "Could not add the buddy %s because the screen name is invalid. Screen names " @@ -7348,17 +7513,17 @@ "deben ser un enderezo de correo electrónico válidos, ou comezar cunha letra e conter só " "letras, números e espazos, ou só conter números." -#: ../libpurple/protocols/oscar/oscar.c:4628 -#: ../libpurple/protocols/oscar/oscar.c:5061 -#: ../libpurple/protocols/oscar/oscar.c:5076 +#: ../libpurple/protocols/oscar/oscar.c:4587 +#: ../libpurple/protocols/oscar/oscar.c:5020 +#: ../libpurple/protocols/oscar/oscar.c:5035 msgid "Unable To Add" msgstr "Non se puido engadir" -#: ../libpurple/protocols/oscar/oscar.c:4737 +#: ../libpurple/protocols/oscar/oscar.c:4696 msgid "Unable To Retrieve Buddy List" msgstr "Non se puido obter a lista de contactos" -#: ../libpurple/protocols/oscar/oscar.c:4738 +#: ../libpurple/protocols/oscar/oscar.c:4697 msgid "" "The AIM servers were temporarily unable to send your buddy list. Your buddy " "list is not lost, and will probably become available in a few hours." @@ -7366,15 +7531,15 @@ "Os servidores de AIM non son capaces de enviar a súa lista de contactos. A súa lista " "de contactos non se perdeu, e probablemente volva a estar dispoñible nunhas horas." -#: ../libpurple/protocols/oscar/oscar.c:4920 -#: ../libpurple/protocols/oscar/oscar.c:4922 -#: ../libpurple/protocols/oscar/oscar.c:5130 -#: ../libpurple/protocols/oscar/oscar.c:5131 -#: ../libpurple/protocols/oscar/oscar.c:5136 +#: ../libpurple/protocols/oscar/oscar.c:4879 +#: ../libpurple/protocols/oscar/oscar.c:4881 +#: ../libpurple/protocols/oscar/oscar.c:5089 +#: ../libpurple/protocols/oscar/oscar.c:5090 +#: ../libpurple/protocols/oscar/oscar.c:5095 msgid "Orphans" msgstr "Orfos" -#: ../libpurple/protocols/oscar/oscar.c:5059 +#: ../libpurple/protocols/oscar/oscar.c:5018 #, c-format msgid "" "Could not add the buddy %s because you have too many buddies in your buddy " @@ -7383,17 +7548,17 @@ "Non se puido engadir o contacto %s porque hai demasiados contactos na " "lista de contactos. Elimina un e volve probar." -#: ../libpurple/protocols/oscar/oscar.c:5059 -#: ../libpurple/protocols/oscar/oscar.c:5074 +#: ../libpurple/protocols/oscar/oscar.c:5018 +#: ../libpurple/protocols/oscar/oscar.c:5033 msgid "(no name)" msgstr "(sen nome)" -#: ../libpurple/protocols/oscar/oscar.c:5073 +#: ../libpurple/protocols/oscar/oscar.c:5032 #, c-format msgid "Could not add the buddy %s for an unknown reason." msgstr "Non se puido engadir o contacto %s por unha razón descoñecida." -#: ../libpurple/protocols/oscar/oscar.c:5167 +#: ../libpurple/protocols/oscar/oscar.c:5126 #, c-format msgid "" "The user %s has given you permission to add you to their buddy list. Do you " @@ -7402,24 +7567,24 @@ "O usuario %s deulle permiso para engadilo nas súas listas de contactos. Desexa " "engadilos a eles?" -#: ../libpurple/protocols/oscar/oscar.c:5175 +#: ../libpurple/protocols/oscar/oscar.c:5134 msgid "Authorization Given" msgstr "Autorización concedida" #. Granted -#: ../libpurple/protocols/oscar/oscar.c:5248 +#: ../libpurple/protocols/oscar/oscar.c:5207 #, c-format msgid "The user %s has granted your request to add them to your buddy list." msgstr "" "O usuario %s autorizou a súa solicitude de engadilos á súa lista de " "contactos." -#: ../libpurple/protocols/oscar/oscar.c:5249 +#: ../libpurple/protocols/oscar/oscar.c:5208 msgid "Authorization Granted" msgstr "Autorización aceptada" #. Denied -#: ../libpurple/protocols/oscar/oscar.c:5252 +#: ../libpurple/protocols/oscar/oscar.c:5211 #, c-format msgid "" "The user %s has denied your request to add them to your buddy list for the " @@ -7430,51 +7595,51 @@ "seguinte razón:\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:5253 +#: ../libpurple/protocols/oscar/oscar.c:5212 msgid "Authorization Denied" msgstr "Autorización denegada" -#: ../libpurple/protocols/oscar/oscar.c:5289 +#: ../libpurple/protocols/oscar/oscar.c:5248 #: ../libpurple/protocols/toc/toc.c:1371 msgid "_Exchange:" msgstr "Int_ercambio:" -#: ../libpurple/protocols/oscar/oscar.c:5329 +#: ../libpurple/protocols/oscar/oscar.c:5288 msgid "Invalid chat name specified." msgstr "Especificouse un nome de conversa incorrecto." -#: ../libpurple/protocols/oscar/oscar.c:5398 +#: ../libpurple/protocols/oscar/oscar.c:5357 msgid "Your IM Image was not sent. You cannot send IM Images in AIM chats." msgstr "Non se enviou a imaxe MI. Non se poden enviar imaxes MI en conversas AIM." -#: ../libpurple/protocols/oscar/oscar.c:5558 -#: ../libpurple/protocols/oscar/oscar.c:5563 +#: ../libpurple/protocols/oscar/oscar.c:5517 +#: ../libpurple/protocols/oscar/oscar.c:5522 msgid "Away Message" msgstr "Mensaxe de ausencia" -#: ../libpurple/protocols/oscar/oscar.c:5563 +#: ../libpurple/protocols/oscar/oscar.c:5522 msgid "<i>(retrieving)</i>" msgstr " <i>(obtendo)</i>" -#: ../libpurple/protocols/oscar/oscar.c:5763 +#: ../libpurple/protocols/oscar/oscar.c:5722 msgid "iTunes Music Store Link" msgstr "LIgazón a tenda de música iTunes" -#: ../libpurple/protocols/oscar/oscar.c:5871 +#: ../libpurple/protocols/oscar/oscar.c:5830 #, c-format msgid "Buddy Comment for %s" msgstr "Comentario de contacto para %s" -#: ../libpurple/protocols/oscar/oscar.c:5872 +#: ../libpurple/protocols/oscar/oscar.c:5831 msgid "Buddy Comment:" msgstr "Comentario de contacto:" -#: ../libpurple/protocols/oscar/oscar.c:5919 +#: ../libpurple/protocols/oscar/oscar.c:5878 #, c-format msgid "You have selected to open a Direct IM connection with %s." msgstr "Pediu abrir unha conexión MI directa con %s." -#: ../libpurple/protocols/oscar/oscar.c:5923 +#: ../libpurple/protocols/oscar/oscar.c:5882 msgid "" "Because this reveals your IP address, it may be considered a security risk. " "Do you wish to continue?" @@ -7482,66 +7647,66 @@ "Como isto revela o seu enderezo IP, pode ser considerado como un risco de " "privacidade. Quere continuar?" -#: ../libpurple/protocols/oscar/oscar.c:5929 +#: ../libpurple/protocols/oscar/oscar.c:5888 #: ../libpurple/protocols/oscar/peer.c:1022 msgid "C_onnect" msgstr "C_onectar" -#: ../libpurple/protocols/oscar/oscar.c:5964 +#: ../libpurple/protocols/oscar/oscar.c:5923 msgid "Get AIM Info" msgstr "Obter informaciónde AIM" -#: ../libpurple/protocols/oscar/oscar.c:5970 +#: ../libpurple/protocols/oscar/oscar.c:5929 msgid "Edit Buddy Comment" msgstr "Editar comentario de contacto" -#: ../libpurple/protocols/oscar/oscar.c:5978 +#: ../libpurple/protocols/oscar/oscar.c:5937 msgid "Get Status Msg" msgstr "Obter mensaxe de estado" -#: ../libpurple/protocols/oscar/oscar.c:5991 +#: ../libpurple/protocols/oscar/oscar.c:5950 msgid "Direct IM" msgstr "MI directa" -#: ../libpurple/protocols/oscar/oscar.c:6013 +#: ../libpurple/protocols/oscar/oscar.c:5972 msgid "Re-request Authorization" msgstr "Solicitar unha autorización outra vez" -#: ../libpurple/protocols/oscar/oscar.c:6072 +#: ../libpurple/protocols/oscar/oscar.c:6031 msgid "Require authorization" msgstr "Pedir unha autorización" -#: ../libpurple/protocols/oscar/oscar.c:6075 +#: ../libpurple/protocols/oscar/oscar.c:6034 msgid "Web aware (enabling this will cause you to receive SPAM!)" msgstr "Capacidade web (habilitar isto pode provocar que reciba SPAM!)" -#: ../libpurple/protocols/oscar/oscar.c:6080 +#: ../libpurple/protocols/oscar/oscar.c:6039 msgid "ICQ Privacy Options" msgstr "Opcións de privacidade ICQ" -#: ../libpurple/protocols/oscar/oscar.c:6099 +#: ../libpurple/protocols/oscar/oscar.c:6058 msgid "The new formatting is invalid." msgstr "O novo formato é incorrecto." -#: ../libpurple/protocols/oscar/oscar.c:6100 +#: ../libpurple/protocols/oscar/oscar.c:6059 msgid "Screen name formatting can change only capitalization and whitespace." msgstr "" "O formato do nome de usuario só pode modificar a capitalización e espazos en " "branco." -#: ../libpurple/protocols/oscar/oscar.c:6153 +#: ../libpurple/protocols/oscar/oscar.c:6112 msgid "Change Address To:" msgstr "Cambiar o enderezo a:" -#: ../libpurple/protocols/oscar/oscar.c:6199 +#: ../libpurple/protocols/oscar/oscar.c:6158 msgid "<i>you are not waiting for authorization</i>" msgstr "<i>vostede non está agardando autorización</i>" -#: ../libpurple/protocols/oscar/oscar.c:6202 +#: ../libpurple/protocols/oscar/oscar.c:6161 msgid "You are awaiting authorization from the following buddies" msgstr "Agardando a autorización dos seguintes contactos" -#: ../libpurple/protocols/oscar/oscar.c:6203 +#: ../libpurple/protocols/oscar/oscar.c:6162 msgid "" "You can re-request authorization from these buddies by right-clicking on " "them and selecting \"Re-request Authorization.\"" @@ -7549,73 +7714,73 @@ "Pode volver pedir autorización a estes contactos ao premer o botón dereito do " "rato sobre eles e escoller\"Solicitar autorización outra vez.\"" -#: ../libpurple/protocols/oscar/oscar.c:6220 +#: ../libpurple/protocols/oscar/oscar.c:6179 msgid "Find Buddy by E-Mail" msgstr "Buscar un contacto polo correo electrónico" -#: ../libpurple/protocols/oscar/oscar.c:6221 +#: ../libpurple/protocols/oscar/oscar.c:6180 msgid "Search for a buddy by e-mail address" msgstr "Buscar un contacto polo enderezo de correo electrónico" -#: ../libpurple/protocols/oscar/oscar.c:6222 +#: ../libpurple/protocols/oscar/oscar.c:6181 msgid "Type the e-mail address of the buddy you are searching for." msgstr "Escriba o enderezo de correo electrónico do contacto que está a buscar." -#: ../libpurple/protocols/oscar/oscar.c:6225 +#: ../libpurple/protocols/oscar/oscar.c:6184 msgid "_Search" msgstr "_Buscar" -#: ../libpurple/protocols/oscar/oscar.c:6383 +#: ../libpurple/protocols/oscar/oscar.c:6342 msgid "Set User Info (URL)..." msgstr "Editar a información de usuario (URL)..." -#: ../libpurple/protocols/oscar/oscar.c:6394 +#: ../libpurple/protocols/oscar/oscar.c:6353 msgid "Change Password (URL)" msgstr "Modificar contrasinal (URL)" -#: ../libpurple/protocols/oscar/oscar.c:6398 +#: ../libpurple/protocols/oscar/oscar.c:6357 msgid "Configure IM Forwarding (URL)" msgstr "Configurar o reenvío de MI (URL)" #. ICQ actions -#: ../libpurple/protocols/oscar/oscar.c:6408 +#: ../libpurple/protocols/oscar/oscar.c:6367 msgid "Set Privacy Options..." msgstr "Editar opcións de privacidade..." #. AIM actions -#: ../libpurple/protocols/oscar/oscar.c:6415 +#: ../libpurple/protocols/oscar/oscar.c:6374 msgid "Confirm Account" msgstr "Confirmar conta" -#: ../libpurple/protocols/oscar/oscar.c:6419 +#: ../libpurple/protocols/oscar/oscar.c:6378 msgid "Display Currently Registered E-Mail Address" msgstr "Mostrar o enderezo rexistrado actualmente" -#: ../libpurple/protocols/oscar/oscar.c:6423 +#: ../libpurple/protocols/oscar/oscar.c:6382 msgid "Change Currently Registered E-Mail Address..." msgstr "Cambiar o enderezo de correo actualmente rexistrado..." -#: ../libpurple/protocols/oscar/oscar.c:6430 +#: ../libpurple/protocols/oscar/oscar.c:6389 msgid "Show Buddies Awaiting Authorization" msgstr "Mostrar contactos pendentes de autorización" -#: ../libpurple/protocols/oscar/oscar.c:6436 +#: ../libpurple/protocols/oscar/oscar.c:6395 msgid "Search for Buddy by E-Mail Address..." msgstr "Buscar un contacto polo enderezo de correo electrónico..." -#: ../libpurple/protocols/oscar/oscar.c:6441 +#: ../libpurple/protocols/oscar/oscar.c:6400 msgid "Search for Buddy by Information" msgstr "Localizar un contacto pola súa información" -#: ../libpurple/protocols/oscar/oscar.c:6509 +#: ../libpurple/protocols/oscar/oscar.c:6468 msgid "Use recent buddies group" msgstr "Usar un grupo de contactos recente" -#: ../libpurple/protocols/oscar/oscar.c:6512 +#: ../libpurple/protocols/oscar/oscar.c:6471 msgid "Show how long you have been idle" msgstr "Mostrar o tempo que estivo inactivo" -#: ../libpurple/protocols/oscar/oscar.c:6667 +#: ../libpurple/protocols/oscar/oscar.c:6626 msgid "" "Always use ICQ proxy server for file transfers\n" "(slower, but does not reveal your IP address)" @@ -7835,7 +8000,6 @@ msgstr "Rexeitou a solicitude de %d" #: ../libpurple/protocols/qq/buddy_opt.c:209 -#: ../libpurple/protocols/qq/group_opt.c:137 msgid "Input your reason:" msgstr "Introduza a súa razón:" @@ -7852,35 +8016,37 @@ #: ../libpurple/protocols/qq/buddy_opt.c:214 #: ../libpurple/protocols/qq/group_im.c:144 #: ../libpurple/protocols/qq/group_opt.c:127 -#: ../libpurple/protocols/qq/sys_msg.c:91 -#: ../libpurple/protocols/qq/sys_msg.c:249 +#: ../libpurple/protocols/qq/sys_msg.c:90 +#: ../libpurple/protocols/qq/sys_msg.c:246 msgid "Reject" msgstr "Rexeitar" #: ../libpurple/protocols/qq/buddy_opt.c:277 -msgid "Add buddy with auth request fails" -msgstr "Engadir contacto con solicitude de autorización fallida" - -#: ../libpurple/protocols/qq/buddy_opt.c:308 +msgid "Add buddy with auth request failed" +msgstr "Engadir contacto con fallo na solicitude de autorización" + +#. TODO: We don't really need to notify the user about this, do we? +#: ../libpurple/protocols/qq/buddy_opt.c:309 msgid "You have successfully removed a buddy" msgstr "Eliminou con éxito un contacto" -#: ../libpurple/protocols/qq/buddy_opt.c:336 -msgid "You have successfully removed yourself from a buddy" -msgstr "Eliminouse a vostede mesmo con éxito dun contacto" - -#: ../libpurple/protocols/qq/buddy_opt.c:402 +#. TODO: Does the user really need to be notified about this? +#: ../libpurple/protocols/qq/buddy_opt.c:338 +msgid "You have successfully removed yourself from your friend's buddy list" +msgstr "Eliminóuselle con éxito da lista de contactos do seu amigo." + +#: ../libpurple/protocols/qq/buddy_opt.c:404 #, c-format msgid "User %d needs authentication" msgstr "O usuario %d precisa unha autenticación" -#: ../libpurple/protocols/qq/buddy_opt.c:404 +#: ../libpurple/protocols/qq/buddy_opt.c:406 #: ../libpurple/protocols/qq/group_join.c:136 msgid "Input request here" msgstr "Introduza a solicitude aquí" #. TODO: Awkward string to fix post string freeze - standardize auth dialogues? -evands -#: ../libpurple/protocols/qq/buddy_opt.c:405 +#: ../libpurple/protocols/qq/buddy_opt.c:407 #: ../libpurple/protocols/qq/group_join.c:137 msgid "Would you be my friend?" msgstr "Quere ser o meu amigo?" @@ -7888,22 +8054,22 @@ #. multiline #. masked #. hint -#: ../libpurple/protocols/qq/buddy_opt.c:406 +#: ../libpurple/protocols/qq/buddy_opt.c:408 #: ../libpurple/protocols/qq/group_join.c:138 #: ../libpurple/protocols/qq/group_opt.c:143 msgid "Send" msgstr "Enviar" -#: ../libpurple/protocols/qq/buddy_opt.c:416 -#, c-format -msgid "You have added %d in buddy list" -msgstr "Engadiu %d á lista de amigos" - -#: ../libpurple/protocols/qq/buddy_opt.c:513 +#: ../libpurple/protocols/qq/buddy_opt.c:418 +#, c-format +msgid "You have added %d to buddy list" +msgstr "Engadiu a %d á súa lista de contactos." + +#: ../libpurple/protocols/qq/buddy_opt.c:515 msgid "QQid Error" msgstr "Erro de QQid" -#: ../libpurple/protocols/qq/buddy_opt.c:514 +#: ../libpurple/protocols/qq/buddy_opt.c:516 msgid "Invalid QQid" msgstr "QQid non válido" @@ -7932,7 +8098,7 @@ msgstr "QQ Qun" #: ../libpurple/protocols/qq/group.c:120 -msgid "Please input external group ID" +msgid "Please enter external group ID" msgstr "Introduza o ID do grupo externo" #: ../libpurple/protocols/qq/group.c:121 @@ -7941,12 +8107,12 @@ #: ../libpurple/protocols/qq/group_im.c:126 #, c-format -msgid "User %d applied to join group %d" -msgstr "O usuario %d solicita unirse ao grupo %d" +msgid "User %d requested to join group %d" +msgstr "O usuario %d pediu unirse ao grupo %d" #: ../libpurple/protocols/qq/group_im.c:127 #: ../libpurple/protocols/qq/group_im.c:181 -#: ../libpurple/protocols/qq/sys_msg.c:195 +#: ../libpurple/protocols/qq/sys_msg.c:193 #, c-format msgid "Reason: %s" msgstr "Razón: %s" @@ -7966,37 +8132,37 @@ #: ../libpurple/protocols/qq/group_im.c:141 #: ../libpurple/protocols/qq/group_opt.c:128 -#: ../libpurple/protocols/qq/sys_msg.c:92 -#: ../libpurple/protocols/qq/sys_msg.c:251 +#: ../libpurple/protocols/qq/sys_msg.c:91 +#: ../libpurple/protocols/qq/sys_msg.c:248 msgid "Approve" msgstr "Aprobar" #: ../libpurple/protocols/qq/group_im.c:180 #, c-format -msgid "You request to join group %d has been rejected by admin %d" -msgstr "A súa solicitude para se unir ao grupo%d foi rexeitada polo administrador %d" +msgid "Your request to join group %d has been rejected by admin %d" +msgstr "A súa petición para unirse ao grupo %d foi rexeitada polo administrador %d" #: ../libpurple/protocols/qq/group_im.c:221 #, c-format -msgid "You request to join group %d has been approved by admin %d" -msgstr "A súa solicitude para se unir ao grupo %d foi aprobada polo administrador %d" +msgid "Your request to join group %d has been approved by admin %d" +msgstr "A súa petición para unirse ao grupo %d foi aprobada polo administrador %d" #: ../libpurple/protocols/qq/group_im.c:257 #, c-format -msgid "You [%d] has exit group \"%d\"" -msgstr "Ti [%d] acabas de saír do grupo \"%d\"" +msgid "You [%d] have left group \"%d\"" +msgstr "Vostede [%d] abandoou o grupo \"%d\"" #: ../libpurple/protocols/qq/group_im.c:291 #, c-format -msgid "You [%d] has been added by group \"%d\"" -msgstr "Vostede [%d] foi engadido ao grupo\"%d\"" +msgid "You [%d] have been added to group \"%d\"" +msgstr "Vostede [%d] uniuse ao grupo \"%d\"" #: ../libpurple/protocols/qq/group_im.c:292 msgid "This group has been added to your buddy list" msgstr "Este grupo foi engadido á súa lista de contactos" #: ../libpurple/protocols/qq/group_internal.c:41 -msgid "I am not member" +msgid "I am not a member" msgstr "Non son un membro" #: ../libpurple/protocols/qq/group_internal.c:44 @@ -8020,24 +8186,24 @@ msgstr "Este grupo non permite que se unan outros membros" #: ../libpurple/protocols/qq/group_join.c:233 -msgid "You have successfully exited the group" -msgstr "Saíu con éxito do grupo" +msgid "You have successfully left the group" +msgstr "Abandoou o grupo con éxito" #: ../libpurple/protocols/qq/group_join.c:257 msgid "QQ Group Auth" msgstr "Autenticación de grupo QQ" #: ../libpurple/protocols/qq/group_join.c:258 -msgid "Your authorization operation has been accepted by the QQ server" -msgstr "A súa operación de autorización foi aceptada polo servidor QQ" +msgid "Your authorization request has been accepted by the QQ server" +msgstr "A súa solicitude de autorización foi aceptada polo servidor QQ" #: ../libpurple/protocols/qq/group_join.c:329 -msgid "You inputted a group id outside the acceptable range" -msgstr "Introduciu un id de grupo fóra dun intervalo aceptado" +msgid "You entered a group ID outside the acceptable range" +msgstr "Introduciu un ID de grupo fora do rango de aceptación" #: ../libpurple/protocols/qq/group_join.c:360 -msgid "Are you sure to exit this Qun?" -msgstr "Está seguro de que quere saír deste Qun?" +msgid "Are you sure you want to leave this Qun?" +msgstr "Está seguro que quera abandoar este Qun?" #: ../libpurple/protocols/qq/group_join.c:362 msgid "" @@ -8047,10 +8213,6 @@ "Nota: se vostede é o creador, \n" "esta operación eliminará finalmente este Qun." -#: ../libpurple/protocols/qq/group_join.c:367 -msgid "Go ahead" -msgstr "Seguir" - #: ../libpurple/protocols/qq/group_network.c:92 #, c-format msgid "Code [0x%02X]: %s" @@ -8060,18 +8222,22 @@ msgid "Group Operation Error" msgstr "Erro de operación do grupo" -#. we wanna see window +#. we want to see window #: ../libpurple/protocols/qq/group_opt.c:124 -#: ../libpurple/protocols/qq/sys_msg.c:88 -msgid "Do you wanna approve the request?" -msgstr "Quere aprobar a solicitude?" +#: ../libpurple/protocols/qq/sys_msg.c:87 +msgid "Do you want to approve the request?" +msgstr "Quere aprobar esta petición?" + +#: ../libpurple/protocols/qq/group_opt.c:137 +msgid "Enter your reason:" +msgstr "Introduza a súa razón:" #: ../libpurple/protocols/qq/group_opt.c:235 -msgid "You have successfully modify Qun member" +msgid "You have successfully modified Qun member" msgstr "Modificou con éxito o membro de Qun" #: ../libpurple/protocols/qq/group_opt.c:305 -msgid "You have successfully modify Qun information" +msgid "You have successfully modified Qun information" msgstr "Modificou con éxito a información de Qun" #: ../libpurple/protocols/qq/group_opt.c:392 @@ -8091,20 +8257,16 @@ msgstr "Mensaxe do sistema" #: ../libpurple/protocols/qq/im.c:576 -msgid "Server ACK" -msgstr "Servidor ACK" - -#: ../libpurple/protocols/qq/im.c:576 msgid "Failed to send IM." msgstr "Non se puido enviar MI." #: ../libpurple/protocols/qq/keep_alive.c:87 -msgid "Keep alive error, seems connection lost!" -msgstr "Produciuse un erro, semella que se perdeu a conexión!" +msgid "Keep alive error" +msgstr "Produciuse un erro" #: ../libpurple/protocols/qq/login_logout.c:408 -msgid "Request login token error!" -msgstr "Erro na solicitude de inicio de sesión!" +msgid "Error requesting login token" +msgstr "Erro na solicitude de inicio de sesión" #: ../libpurple/protocols/qq/login_logout.c:486 msgid "Unable to login, check debug log" @@ -8123,96 +8285,83 @@ msgid "Unknown-%d" msgstr "Descoñecido-%d" -#: ../libpurple/protocols/qq/qq.c:209 -#, c-format -msgid "%s Address" -msgstr "%s Enderezo" - -#: ../libpurple/protocols/qq/qq.c:240 +#: ../libpurple/protocols/qq/qq.c:211 +msgid "TCP Address" +msgstr "Enderezo TCP" + +#: ../libpurple/protocols/qq/qq.c:213 +msgid "UDP Address" +msgstr "Enderezo UDP" + +#: ../libpurple/protocols/qq/qq.c:242 msgid "Level" msgstr "Nivel" -#: ../libpurple/protocols/qq/qq.c:278 -msgid "QQ: Available" -msgstr "QQ: Dispoñible" - -#: ../libpurple/protocols/qq/qq.c:282 -msgid "QQ: Away" -msgstr "QQ: Ausente" - -#: ../libpurple/protocols/qq/qq.c:286 -msgid "QQ: Invisible" -msgstr "QQ: invisible" - -#: ../libpurple/protocols/qq/qq.c:290 -msgid "QQ: Offline" -msgstr "QQ: Desconectado" - -#: ../libpurple/protocols/qq/qq.c:371 +#: ../libpurple/protocols/qq/qq.c:373 msgid "Invalid name" msgstr "Nome non válido" -#: ../libpurple/protocols/qq/qq.c:437 +#: ../libpurple/protocols/qq/qq.c:439 #, c-format msgid "<b>Current Online</b>: %d<br>\n" msgstr "<b>Actualmente conectado</b>: %d<br>\n" -#: ../libpurple/protocols/qq/qq.c:438 +#: ../libpurple/protocols/qq/qq.c:440 #, c-format msgid "<b>Last Refresh</b>: %s<br>\n" msgstr "<b>Última actualización</b>: %s<br>\n" -#: ../libpurple/protocols/qq/qq.c:442 +#: ../libpurple/protocols/qq/qq.c:444 #, c-format msgid "<b>Connection Mode</b>: %s<br>\n" msgstr "<b>Modo de conexión:</b> %s<br>\n" -#: ../libpurple/protocols/qq/qq.c:443 +#: ../libpurple/protocols/qq/qq.c:445 #, c-format msgid "<b>Server IP</b>: %s: %d<br>\n" msgstr "<b>IP do servidor:</b> %s:%d<br>\n" -#: ../libpurple/protocols/qq/qq.c:444 +#: ../libpurple/protocols/qq/qq.c:446 #, c-format msgid "<b>My Public IP</b>: %s<br>\n" msgstr "<b>A miña IP pública:</b> %s<br>\n" -#: ../libpurple/protocols/qq/qq.c:449 +#: ../libpurple/protocols/qq/qq.c:451 #, c-format msgid "<b>Login Time</b>: %s<br>\n" msgstr "<b>Hora de inicio de sesión:</b>: %s<br>\n" -#: ../libpurple/protocols/qq/qq.c:450 +#: ../libpurple/protocols/qq/qq.c:452 #, c-format msgid "<b>Last Login IP</b>: %s<br>\n" msgstr "<b>Última IP de inicio de sesión</b> %s<br>\n" -#: ../libpurple/protocols/qq/qq.c:451 +#: ../libpurple/protocols/qq/qq.c:453 #, c-format msgid "<b>Last Login Time</b>: %s\n" msgstr "<b>Última hora de inicio de sesión</b>: %s\n" -#: ../libpurple/protocols/qq/qq.c:455 +#: ../libpurple/protocols/qq/qq.c:457 msgid "Login Information" msgstr "Información de inicio de sesión" -#: ../libpurple/protocols/qq/qq.c:531 -msgid "Modify My Information" -msgstr "Modificar a miña información" - -#: ../libpurple/protocols/qq/qq.c:534 ../libpurple/protocols/toc/toc.c:1680 +#: ../libpurple/protocols/qq/qq.c:533 +msgid "Set My Information" +msgstr "Establecer a miña información" + +#: ../libpurple/protocols/qq/qq.c:536 ../libpurple/protocols/toc/toc.c:1680 msgid "Change Password" msgstr "Modificar o contrasinal" -#: ../libpurple/protocols/qq/qq.c:537 +#: ../libpurple/protocols/qq/qq.c:539 msgid "Show Login Information" msgstr "Mostrar información de inicio de sesión" -#: ../libpurple/protocols/qq/qq.c:558 -msgid "Exit this QQ Qun" +#: ../libpurple/protocols/qq/qq.c:560 +msgid "Leave this QQ Qun" msgstr "Saír desta QQ Qun" -#: ../libpurple/protocols/qq/qq.c:582 +#: ../libpurple/protocols/qq/qq.c:584 msgid "Block this buddy" msgstr "Bloquear a este contacto" @@ -8226,22 +8375,14 @@ #. *< version #. * summary #. * description -#: ../libpurple/protocols/qq/qq.c:723 ../libpurple/protocols/qq/qq.c:725 +#: ../libpurple/protocols/qq/qq.c:725 ../libpurple/protocols/qq/qq.c:727 msgid "QQ Protocol\tPlugin" msgstr "Protocolo QQ\tComplemento" -#: ../libpurple/protocols/qq/qq.c:750 +#: ../libpurple/protocols/qq/qq.c:752 msgid "Connect using TCP" msgstr "Conectar usando TCP" -#: ../libpurple/protocols/qq/qq_proxy.c:497 -msgid "Socket send error" -msgstr "Erro de envio do conectador" - -#: ../libpurple/protocols/qq/qq_proxy.c:500 -msgid "Connection refused" -msgstr "Conexión rexeitada" - #: ../libpurple/protocols/qq/recv_core.c:309 msgid "Socket error" msgstr "Erro do conectador" @@ -8274,53 +8415,52 @@ msgid "Login failed, no reply" msgstr "Fallou o inicio de sesión , non responder" -#: ../libpurple/protocols/qq/sys_msg.c:112 -msgid "Do you wanna add this buddy?" -msgstr "Desexa engadir este contacto?" +#: ../libpurple/protocols/qq/sys_msg.c:110 +msgid "Do you want to add this buddy?" +msgstr "Quere engadir este contacto?" #. only need to get value -#: ../libpurple/protocols/qq/sys_msg.c:168 +#: ../libpurple/protocols/qq/sys_msg.c:166 #, c-format msgid "You have been added by %s" msgstr "Foi engadido por %s" -#: ../libpurple/protocols/qq/sys_msg.c:171 +#: ../libpurple/protocols/qq/sys_msg.c:169 msgid "Would like to add him?" msgstr "Quere engadilo?" -#: ../libpurple/protocols/qq/sys_msg.c:178 -#, c-format -msgid "%s has added you [%s]" -msgstr "%s engadiulle [%s]" - -#: ../libpurple/protocols/qq/sys_msg.c:194 +#: ../libpurple/protocols/qq/sys_msg.c:176 +#, c-format +msgid "%s has added you [%s] to his or her buddy list" +msgstr "%s engadiuno [%s] á súa lista de contactos" + +#: ../libpurple/protocols/qq/sys_msg.c:192 #, c-format msgid "User %s rejected your request" msgstr "O usuario %s rexeitou a súa solicitude" -#: ../libpurple/protocols/qq/sys_msg.c:214 -#, c-format -msgid "User %s has approved your request" +#: ../libpurple/protocols/qq/sys_msg.c:212 +#, c-format +msgid "User %s approved your request" msgstr "O usuario %s aprobou a súa solicitude" -#. TODO: 'wanna' is not an appropriate word for this string. Fix after string freeze #. TODO: this should go through purple_account_request_authorization() -#: ../libpurple/protocols/qq/sys_msg.c:241 -#, c-format -msgid "%s wanna add you [%s] as friends" -msgstr "%s quere engadirlle [%s] como amigo" - -#: ../libpurple/protocols/qq/sys_msg.c:242 +#: ../libpurple/protocols/qq/sys_msg.c:238 +#, c-format +msgid "%s wants to add you [%s] as a friend" +msgstr "%s quere engadilo [%s] como amigo" + +#: ../libpurple/protocols/qq/sys_msg.c:239 #, c-format msgid "Message: %s" msgstr "Mensaxe: %s" -#: ../libpurple/protocols/qq/sys_msg.c:264 +#: ../libpurple/protocols/qq/sys_msg.c:261 #, c-format msgid "%s is not in your buddy list" msgstr " %s non está na súa lista de contactos" -#: ../libpurple/protocols/qq/sys_msg.c:266 +#: ../libpurple/protocols/qq/sys_msg.c:263 msgid "Would you like to add him?" msgstr "Quere engadilo?" @@ -8514,7 +8654,7 @@ msgid "Send TEST Announcement" msgstr "Enviar anuncio de PROBA" -#: ../libpurple/protocols/sametime/sametime.c:3587 ../pidgin/gtkconv.c:4302 +#: ../libpurple/protocols/sametime/sametime.c:3587 ../pidgin/gtkconv.c:4329 msgid "Topic:" msgstr "Asunto:" @@ -8539,7 +8679,7 @@ msgid "No Sametime Community Server Specified" msgstr "Non se especificou un servidor de comunidade Sametime" -#: ../libpurple/protocols/sametime/sametime.c:3645 ../pidgin/gtkblist.c:4025 +#: ../libpurple/protocols/sametime/sametime.c:3645 ../pidgin/gtkblist.c:4024 msgid "Connect" msgstr "Conectar" @@ -8718,7 +8858,7 @@ "enviarlles mensaxes cos botóns de acción que se amosan abaixo." #. Create the window -#: ../libpurple/protocols/sametime/sametime.c:5539 ../pidgin/gtknotify.c:718 +#: ../libpurple/protocols/sametime/sametime.c:5539 ../pidgin/gtknotify.c:726 msgid "Search Results" msgstr "Resultados da busca" @@ -9992,7 +10132,7 @@ msgstr "O seu estado de ánimo actual" #: ../libpurple/protocols/silc/silc.c:741 -#: ../libpurple/protocols/silc10/silc.c:652 ../pidgin/gtkprefs.c:1636 +#: ../libpurple/protocols/silc10/silc.c:652 ../pidgin/gtkprefs.c:1638 msgid "Normal" msgstr "Normal" @@ -10388,7 +10528,7 @@ msgstr "Protocolo de conferencia segura en vivo na Internet (SILC)" #: ../libpurple/protocols/silc/silc.c:1910 -#: ../libpurple/protocols/silc10/silc.c:1853 ../pidgin/gtkprefs.c:2029 +#: ../libpurple/protocols/silc10/silc.c:1853 ../pidgin/gtkprefs.c:2031 msgid "Network" msgstr "Rede" @@ -10867,8 +11007,8 @@ msgid "Password Change Successful" msgstr "O contrasinal modificouse con éxito" -#: ../libpurple/protocols/toc/toc.c:1366 ../pidgin/gtkblist.c:5531 -#: ../pidgin/gtkblist.c:5884 +#: ../libpurple/protocols/toc/toc.c:1366 ../pidgin/gtkblist.c:5530 +#: ../pidgin/gtkblist.c:5883 msgid "_Group:" msgstr "_Grupo:" @@ -10936,28 +11076,28 @@ msgid "Your Yahoo! message did not get sent." msgstr "A súa mensaxe Yahoo! non se enviou." -#: ../libpurple/protocols/yahoo/yahoo.c:893 +#: ../libpurple/protocols/yahoo/yahoo.c:895 #, c-format msgid "%s just sent you a Buzz!" msgstr "%s acaba de darlle un cobadazo!" -#: ../libpurple/protocols/yahoo/yahoo.c:940 +#: ../libpurple/protocols/yahoo/yahoo.c:942 #, c-format msgid "Yahoo! system message for %s:" msgstr "Mensaxe do sistema Yahoo! para %s:" -#: ../libpurple/protocols/yahoo/yahoo.c:999 +#: ../libpurple/protocols/yahoo/yahoo.c:1013 msgid "Authorization denied message:" msgstr "Mensaxe de autorización rexeitada:" -#: ../libpurple/protocols/yahoo/yahoo.c:1080 +#: ../libpurple/protocols/yahoo/yahoo.c:1142 #, c-format msgid "%s has (retroactively) denied your request to add them to your list." msgstr "" "O usuario %s rexeitou a súa solicitude de engadilos á súa lista" "(de forma retroactiva)." -#: ../libpurple/protocols/yahoo/yahoo.c:1083 +#: ../libpurple/protocols/yahoo/yahoo.c:1145 #, c-format msgid "" "%s has (retroactively) denied your request to add them to your list for the " @@ -10966,11 +11106,11 @@ "O usuario %s rexeitou (de forma retroactiva) a súa solicitude de engadilos á súa " "lista pola seguinte razón: %s." -#: ../libpurple/protocols/yahoo/yahoo.c:1086 +#: ../libpurple/protocols/yahoo/yahoo.c:1148 msgid "Add buddy rejected" msgstr "Rexeitouse engadir o contacto" -#: ../libpurple/protocols/yahoo/yahoo.c:1837 +#: ../libpurple/protocols/yahoo/yahoo.c:1899 #, c-format msgid "" "The Yahoo server has requested the use of an unrecognized authentication " @@ -10981,11 +11121,11 @@ "Probablemente non será capaz de conectarse con Yahoo. " "Comprobe se hai actualizacións de %s." -#: ../libpurple/protocols/yahoo/yahoo.c:1840 +#: ../libpurple/protocols/yahoo/yahoo.c:1902 msgid "Failed Yahoo! Authentication" msgstr "Fallou a autenticación en Yahoo!" -#: ../libpurple/protocols/yahoo/yahoo.c:1906 +#: ../libpurple/protocols/yahoo/yahoo.c:1968 #, c-format msgid "" "You have tried to ignore %s, but the user is on your buddy list. Clicking " @@ -10994,52 +11134,52 @@ "Intentou ignorar a %s, mais o usuario está na súa lista de contactos. Se " "selecciona \"Si\" eliminarase e ignorarase este contacto." -#: ../libpurple/protocols/yahoo/yahoo.c:1909 +#: ../libpurple/protocols/yahoo/yahoo.c:1971 msgid "Ignore buddy?" msgstr "Ignorar o contacto?" -#: ../libpurple/protocols/yahoo/yahoo.c:1972 +#: ../libpurple/protocols/yahoo/yahoo.c:2034 msgid "Your account is locked, please log in to the Yahoo! website." msgstr "A conta está bloqueada. Inicie sesión no sitio web de Yahoo!." -#: ../libpurple/protocols/yahoo/yahoo.c:1975 +#: ../libpurple/protocols/yahoo/yahoo.c:2037 #, c-format msgid "Unknown error number %d. Logging into the Yahoo! website may fix this." msgstr "" "Erro descoñecido número %d. Se inicia sesión no sitio web de Yahoo! é " "posible que isto se arranxe." -#: ../libpurple/protocols/yahoo/yahoo.c:2029 +#: ../libpurple/protocols/yahoo/yahoo.c:2091 #, c-format msgid "Could not add buddy %s to group %s to the server list on account %s." msgstr "" "Non se puido engadir o contacto %s ao grupo %s á lista no servidor para a " "conta %s." -#: ../libpurple/protocols/yahoo/yahoo.c:2032 +#: ../libpurple/protocols/yahoo/yahoo.c:2094 msgid "Could not add buddy to server list" msgstr "Non se puido engadir o contacto á lista do servidor" -#: ../libpurple/protocols/yahoo/yahoo.c:2151 +#: ../libpurple/protocols/yahoo/yahoo.c:2213 #, c-format msgid "[ Audible %s/%s/%s.swf ] %s" msgstr "[ Audible %s/%s/%s.swf ] %s" -#: ../libpurple/protocols/yahoo/yahoo.c:2491 +#: ../libpurple/protocols/yahoo/yahoo.c:2556 msgid "Received unexpected HTTP response from server." msgstr "Recibiuse unha resposta HTTP inesperada do servidor." -#: ../libpurple/protocols/yahoo/yahoo.c:2515 -#: ../libpurple/protocols/yahoo/yahoo.c:2701 -#: ../libpurple/protocols/yahoo/yahoo.c:2804 -#: ../libpurple/protocols/yahoo/yahoo.c:2814 +#: ../libpurple/protocols/yahoo/yahoo.c:2580 +#: ../libpurple/protocols/yahoo/yahoo.c:2766 +#: ../libpurple/protocols/yahoo/yahoo.c:2869 +#: ../libpurple/protocols/yahoo/yahoo.c:2879 #: ../libpurple/protocols/yahoo/yahoochat.c:1418 #: ../libpurple/protocols/yahoo/yahoochat.c:1488 #: ../libpurple/protocols/yahoo/ycht.c:585 msgid "Connection problem" msgstr "Problema de conexión" -#: ../libpurple/protocols/yahoo/yahoo.c:2541 +#: ../libpurple/protocols/yahoo/yahoo.c:2606 #, c-format msgid "" "Lost connection with %s:\n" @@ -11048,7 +11188,7 @@ "Perdeuse a conexión con %s:\n" "%s" -#: ../libpurple/protocols/yahoo/yahoo.c:2566 +#: ../libpurple/protocols/yahoo/yahoo.c:2631 #, c-format msgid "" "Could not establish a connection with %s:\n" @@ -11057,111 +11197,111 @@ "Non se puido establecer unha conexión con %s:\n" "%s" -#: ../libpurple/protocols/yahoo/yahoo.c:2916 -#: ../libpurple/protocols/yahoo/yahoo.c:3602 +#: ../libpurple/protocols/yahoo/yahoo.c:2981 +#: ../libpurple/protocols/yahoo/yahoo.c:3667 msgid "Not at Home" msgstr "Fóra da casa" -#: ../libpurple/protocols/yahoo/yahoo.c:2918 -#: ../libpurple/protocols/yahoo/yahoo.c:3605 +#: ../libpurple/protocols/yahoo/yahoo.c:2983 +#: ../libpurple/protocols/yahoo/yahoo.c:3670 msgid "Not at Desk" msgstr "Lonxe do escritorio" -#: ../libpurple/protocols/yahoo/yahoo.c:2920 -#: ../libpurple/protocols/yahoo/yahoo.c:3608 +#: ../libpurple/protocols/yahoo/yahoo.c:2985 +#: ../libpurple/protocols/yahoo/yahoo.c:3673 msgid "Not in Office" msgstr "Fóra da oficina" -#: ../libpurple/protocols/yahoo/yahoo.c:2924 -#: ../libpurple/protocols/yahoo/yahoo.c:3614 +#: ../libpurple/protocols/yahoo/yahoo.c:2989 +#: ../libpurple/protocols/yahoo/yahoo.c:3679 msgid "On Vacation" msgstr "De vacacións" -#: ../libpurple/protocols/yahoo/yahoo.c:2928 -#: ../libpurple/protocols/yahoo/yahoo.c:3620 +#: ../libpurple/protocols/yahoo/yahoo.c:2993 +#: ../libpurple/protocols/yahoo/yahoo.c:3685 msgid "Stepped Out" msgstr "Abandonou" -#: ../libpurple/protocols/yahoo/yahoo.c:3021 -#: ../libpurple/protocols/yahoo/yahoo.c:3051 +#: ../libpurple/protocols/yahoo/yahoo.c:3086 +#: ../libpurple/protocols/yahoo/yahoo.c:3116 msgid "Not on server list" msgstr "Non incluído na lista do servidor" -#: ../libpurple/protocols/yahoo/yahoo.c:3068 -#: ../libpurple/protocols/yahoo/yahoo.c:3126 +#: ../libpurple/protocols/yahoo/yahoo.c:3133 +#: ../libpurple/protocols/yahoo/yahoo.c:3191 msgid "Appear Online" msgstr "Aparecer conectado" -#: ../libpurple/protocols/yahoo/yahoo.c:3071 -#: ../libpurple/protocols/yahoo/yahoo.c:3147 +#: ../libpurple/protocols/yahoo/yahoo.c:3136 +#: ../libpurple/protocols/yahoo/yahoo.c:3212 msgid "Appear Permanently Offline" msgstr "Aparecer permanentemente desconectado" -#: ../libpurple/protocols/yahoo/yahoo.c:3089 +#: ../libpurple/protocols/yahoo/yahoo.c:3154 msgid "Presence" msgstr "Presenza" -#: ../libpurple/protocols/yahoo/yahoo.c:3132 +#: ../libpurple/protocols/yahoo/yahoo.c:3197 msgid "Appear Offline" msgstr "Aparecer desconectado" -#: ../libpurple/protocols/yahoo/yahoo.c:3141 +#: ../libpurple/protocols/yahoo/yahoo.c:3206 msgid "Don't Appear Permanently Offline" msgstr "Non aparecer sempre desconectado" -#: ../libpurple/protocols/yahoo/yahoo.c:3189 +#: ../libpurple/protocols/yahoo/yahoo.c:3254 msgid "Join in Chat" msgstr "Unirse a unha conversa" -#: ../libpurple/protocols/yahoo/yahoo.c:3195 +#: ../libpurple/protocols/yahoo/yahoo.c:3260 msgid "Initiate Conference" msgstr "Iniciar unha conferencia" -#: ../libpurple/protocols/yahoo/yahoo.c:3223 +#: ../libpurple/protocols/yahoo/yahoo.c:3288 msgid "Presence Settings" msgstr "Configuración da presenza" -#: ../libpurple/protocols/yahoo/yahoo.c:3229 +#: ../libpurple/protocols/yahoo/yahoo.c:3294 msgid "Start Doodling" msgstr "Comezar Doodle" -#: ../libpurple/protocols/yahoo/yahoo.c:3330 +#: ../libpurple/protocols/yahoo/yahoo.c:3395 msgid "Activate which ID?" msgstr "Que ID activar?" -#: ../libpurple/protocols/yahoo/yahoo.c:3341 +#: ../libpurple/protocols/yahoo/yahoo.c:3406 msgid "Join who in chat?" msgstr "A quen quere unir á conversa?" -#: ../libpurple/protocols/yahoo/yahoo.c:3353 +#: ../libpurple/protocols/yahoo/yahoo.c:3418 msgid "Activate ID..." msgstr "Activar ID..." -#: ../libpurple/protocols/yahoo/yahoo.c:3357 +#: ../libpurple/protocols/yahoo/yahoo.c:3422 msgid "Join User in Chat..." msgstr "Unir a un usuario á conversa..." -#: ../libpurple/protocols/yahoo/yahoo.c:3362 +#: ../libpurple/protocols/yahoo/yahoo.c:3427 msgid "Open Inbox" msgstr "Abrir a caixa de entrada" -#: ../libpurple/protocols/yahoo/yahoo.c:3871 +#: ../libpurple/protocols/yahoo/yahoo.c:3947 msgid "You have just sent a Buzz!" msgstr "Acaba de enviar un cobadazo!" -#: ../libpurple/protocols/yahoo/yahoo.c:3930 +#: ../libpurple/protocols/yahoo/yahoo.c:4006 msgid "join <room>: Join a chat room on the Yahoo network" msgstr "join <sala>: Unirse a unha sala na rede de Yahoo" -#: ../libpurple/protocols/yahoo/yahoo.c:3935 +#: ../libpurple/protocols/yahoo/yahoo.c:4011 msgid "list: List rooms on the Yahoo network" msgstr "list: Mostrar as canles da rede Yahoo" -#: ../libpurple/protocols/yahoo/yahoo.c:3939 +#: ../libpurple/protocols/yahoo/yahoo.c:4015 msgid "buzz: Buzz a user to get their attention" msgstr "buzz: Avisar a un contacto para chamar a súa atención" -#: ../libpurple/protocols/yahoo/yahoo.c:3943 +#: ../libpurple/protocols/yahoo/yahoo.c:4019 msgid "doodle: Request user to start a Doodle session" msgstr "doodle: Solicitarlle ao usuario o comezo dunha sesión Doodle" @@ -11175,56 +11315,56 @@ #. *< version #. * summary #. * description -#: ../libpurple/protocols/yahoo/yahoo.c:4151 -#: ../libpurple/protocols/yahoo/yahoo.c:4153 +#: ../libpurple/protocols/yahoo/yahoo.c:4227 +#: ../libpurple/protocols/yahoo/yahoo.c:4229 msgid "Yahoo Protocol Plugin" msgstr "Complemento de protocolo Yahoo" -#: ../libpurple/protocols/yahoo/yahoo.c:4176 +#: ../libpurple/protocols/yahoo/yahoo.c:4252 msgid "Yahoo Japan" msgstr "Yahoo Xapón" -#: ../libpurple/protocols/yahoo/yahoo.c:4179 +#: ../libpurple/protocols/yahoo/yahoo.c:4255 msgid "Pager server" msgstr "Servidor do buscapersoas" -#: ../libpurple/protocols/yahoo/yahoo.c:4182 +#: ../libpurple/protocols/yahoo/yahoo.c:4258 msgid "Japan Pager server" msgstr "Servidor de buscapersoas xaponés" -#: ../libpurple/protocols/yahoo/yahoo.c:4185 +#: ../libpurple/protocols/yahoo/yahoo.c:4261 msgid "Pager port" msgstr "Porto do buscapersoas" -#: ../libpurple/protocols/yahoo/yahoo.c:4188 +#: ../libpurple/protocols/yahoo/yahoo.c:4264 msgid "File transfer server" msgstr "Servidor de transferencia de ficheiros" -#: ../libpurple/protocols/yahoo/yahoo.c:4191 +#: ../libpurple/protocols/yahoo/yahoo.c:4267 msgid "Japan file transfer server" msgstr "Servidor de transferencia de ficheiros xaponés" -#: ../libpurple/protocols/yahoo/yahoo.c:4194 +#: ../libpurple/protocols/yahoo/yahoo.c:4270 msgid "File transfer port" msgstr "Porto de transferencia de ficheiros" -#: ../libpurple/protocols/yahoo/yahoo.c:4197 +#: ../libpurple/protocols/yahoo/yahoo.c:4273 msgid "Chat room locale" msgstr "Localización da sala de conversa" -#: ../libpurple/protocols/yahoo/yahoo.c:4200 +#: ../libpurple/protocols/yahoo/yahoo.c:4276 msgid "Ignore conference and chatroom invitations" msgstr "Ignorar os convites a salas de conferencias ou de conversa" -#: ../libpurple/protocols/yahoo/yahoo.c:4208 +#: ../libpurple/protocols/yahoo/yahoo.c:4284 msgid "Chat room list URL" msgstr "Url de lista de salas da conversa" -#: ../libpurple/protocols/yahoo/yahoo.c:4211 +#: ../libpurple/protocols/yahoo/yahoo.c:4287 msgid "Yahoo Chat server" msgstr "Servidor de conversa de Yahoo" -#: ../libpurple/protocols/yahoo/yahoo.c:4214 +#: ../libpurple/protocols/yahoo/yahoo.c:4290 msgid "Yahoo Chat port" msgstr "Porto de conversa de Yahoo" @@ -11313,7 +11453,7 @@ msgstr "Non se puido establecer o descritor de ficheiro." #. TODO: what to do here - do we really have to disconnect? -#: ../libpurple/protocols/yahoo/yahoo_packet.c:302 +#: ../libpurple/protocols/yahoo/yahoo_packet.c:307 msgid "Write Error" msgstr "Erro de escritura" @@ -11677,7 +11817,7 @@ msgid "Unset" msgstr "Quitar" -#: ../libpurple/status.c:155 ../pidgin/gtkstatusbox.c:1057 +#: ../libpurple/status.c:155 ../pidgin/gtkstatusbox.c:1058 msgid "Do not disturb" msgstr "Non molestar" @@ -11729,12 +11869,12 @@ msgid "%x %X" msgstr "%x %X" -#: ../libpurple/util.c:2692 +#: ../libpurple/util.c:2702 #, c-format msgid "Error Reading %s" msgstr "Erro ao ler %s" -#: ../libpurple/util.c:2693 +#: ../libpurple/util.c:2703 #, c-format msgid "" "An error was encountered reading your %s. They have not been loaded, and " @@ -11743,84 +11883,84 @@ "Atopouse un erro ao ler o seu %s. Non se cargou e o ficheiro antigo foi " "renomeado a %s~." -#: ../libpurple/util.c:3193 +#: ../libpurple/util.c:3203 msgid "Calculating..." msgstr "Calculando..." -#: ../libpurple/util.c:3196 +#: ../libpurple/util.c:3206 msgid "Unknown." msgstr "Descoñecido." -#: ../libpurple/util.c:3222 +#: ../libpurple/util.c:3232 #, c-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d segundo" msgstr[1] "%d segundo" -#: ../libpurple/util.c:3234 +#: ../libpurple/util.c:3244 #, c-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d día" msgstr[1] "%d día" -#: ../libpurple/util.c:3242 +#: ../libpurple/util.c:3252 #, c-format msgid "%s, %d hour" msgid_plural "%s, %d hours" msgstr[0] "%s, %d hora" msgstr[1] "%s, %d hora" -#: ../libpurple/util.c:3248 +#: ../libpurple/util.c:3258 #, c-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d hora" msgstr[1] "%d hora" -#: ../libpurple/util.c:3256 +#: ../libpurple/util.c:3266 #, c-format msgid "%s, %d minute" msgid_plural "%s, %d minutes" msgstr[0] "%s, %d minuto" msgstr[1] "%s, %d minuto" -#: ../libpurple/util.c:3262 +#: ../libpurple/util.c:3272 #, c-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minuto" msgstr[1] "%d minuto" -#: ../libpurple/util.c:3522 +#: ../libpurple/util.c:3532 #, c-format msgid "Could not open %s: Redirected too many times" msgstr "Non se puido abrir %s: Demasiadas redireccións" -#: ../libpurple/util.c:3559 ../libpurple/util.c:3854 +#: ../libpurple/util.c:3569 ../libpurple/util.c:3864 #, c-format msgid "Unable to connect to %s" msgstr "Non se puido conectar a %s" -#: ../libpurple/util.c:3682 +#: ../libpurple/util.c:3692 #, c-format msgid "" "Unable to allocate enough memory to hold the contents from %s. The web " "server may be trying something malicious." msgstr "Non é posible asignar memoria suficiente para manter os contidos de %s. O servidor web talvez pode estar a intentar algo malintencionado." -#: ../libpurple/util.c:3717 +#: ../libpurple/util.c:3727 #, c-format msgid "Error reading from %s: %s" msgstr "Erro ao ler desde %s: %s" -#: ../libpurple/util.c:3748 +#: ../libpurple/util.c:3758 #, c-format msgid "Error writing to %s: %s" msgstr "Error ao escribir a %s: %s" -#: ../libpurple/util.c:3773 +#: ../libpurple/util.c:3783 #, c-format msgid "Unable to connect to %s: %s" msgstr "Non se pode conectar a %s: %s" @@ -11910,7 +12050,7 @@ msgid "SOCKS 5" msgstr "SOCKS 5" -#: ../pidgin/gtkaccount.c:967 ../pidgin/gtkprefs.c:1206 +#: ../pidgin/gtkaccount.c:967 ../pidgin/gtkprefs.c:1208 msgid "Use Environmental Settings" msgstr "Usar a configuración do contorno" @@ -11932,15 +12072,15 @@ msgid "Proxy Options" msgstr "Opcións do proxy" -#: ../pidgin/gtkaccount.c:1044 ../pidgin/gtkprefs.c:1200 +#: ../pidgin/gtkaccount.c:1044 ../pidgin/gtkprefs.c:1202 msgid "Proxy _type:" msgstr "_Tipo de proxy:" -#: ../pidgin/gtkaccount.c:1053 ../pidgin/gtkprefs.c:1221 +#: ../pidgin/gtkaccount.c:1053 ../pidgin/gtkprefs.c:1223 msgid "_Host:" msgstr "_Servidor:" -#: ../pidgin/gtkaccount.c:1057 ../pidgin/gtkprefs.c:1239 +#: ../pidgin/gtkaccount.c:1057 ../pidgin/gtkprefs.c:1241 msgid "_Port:" msgstr "_Porto:" @@ -11948,7 +12088,7 @@ msgid "_Username:" msgstr "Nome de _usuario:" -#: ../pidgin/gtkaccount.c:1072 ../pidgin/gtkprefs.c:1276 +#: ../pidgin/gtkaccount.c:1072 ../pidgin/gtkprefs.c:1278 msgid "Pa_ssword:" msgstr "Co_ntrasinal:" @@ -12005,8 +12145,8 @@ msgstr "Introduza a información apropiada da conversa á que desexaría unirse.\n" #. Set up stuff for the account box -#: ../pidgin/gtkblist.c:792 ../pidgin/gtkblist.c:5479 -#: ../pidgin/gtkblist.c:5845 ../pidgin/gtkpounce.c:540 +#: ../pidgin/gtkblist.c:792 ../pidgin/gtkblist.c:5478 +#: ../pidgin/gtkblist.c:5844 ../pidgin/gtkpounce.c:540 #: ../pidgin/gtkroomlist.c:395 msgid "_Account:" msgstr "Con_ta:" @@ -12086,136 +12226,136 @@ msgstr "_Expandir" #: ../pidgin/gtkblist.c:1572 ../pidgin/gtkblist.c:1584 -#: ../pidgin/gtkblist.c:4573 ../pidgin/gtkblist.c:4583 +#: ../pidgin/gtkblist.c:4572 ../pidgin/gtkblist.c:4582 msgid "/Tools/Mute Sounds" msgstr "/Ferramentas/Silenciar sons" -#: ../pidgin/gtkblist.c:2044 ../pidgin/gtkconv.c:4686 +#: ../pidgin/gtkblist.c:2044 ../pidgin/gtkconv.c:4731 #: ../pidgin/gtkpounce.c:429 msgid "You are not currently signed on with an account that can add that buddy." msgstr "Actualmente non está conectado con ningunha conta que poida engadir a ese contacto." #. Buddies menu -#: ../pidgin/gtkblist.c:2847 +#: ../pidgin/gtkblist.c:2850 msgid "/_Buddies" msgstr "/_Contactos" -#: ../pidgin/gtkblist.c:2848 +#: ../pidgin/gtkblist.c:2851 msgid "/Buddies/New Instant _Message..." msgstr "/Contactos/_Mensaxe instantánea nova..." -#: ../pidgin/gtkblist.c:2849 +#: ../pidgin/gtkblist.c:2852 msgid "/Buddies/Join a _Chat..." msgstr "/Contactos/_Unirse a unha conversa..." -#: ../pidgin/gtkblist.c:2850 +#: ../pidgin/gtkblist.c:2853 msgid "/Buddies/Get User _Info..." msgstr "/Contactos/Obter _información do usuario..." -#: ../pidgin/gtkblist.c:2851 +#: ../pidgin/gtkblist.c:2854 msgid "/Buddies/View User _Log..." msgstr "/Contactos/Ver _rexistro do usuario..." -#: ../pidgin/gtkblist.c:2853 +#: ../pidgin/gtkblist.c:2856 msgid "/Buddies/Show _Offline Buddies" msgstr "/Contactos/Mostrar contactos _desconectados" -#: ../pidgin/gtkblist.c:2854 +#: ../pidgin/gtkblist.c:2857 msgid "/Buddies/Show _Empty Groups" msgstr "/Contactos/Mostrar grupos _baleiros" -#: ../pidgin/gtkblist.c:2855 +#: ../pidgin/gtkblist.c:2858 msgid "/Buddies/Show Buddy _Details" msgstr "/Contactos/Mostrar detalles de _contactos" -#: ../pidgin/gtkblist.c:2856 -msgid "/Buddies/Show Idle _Times" -msgstr "/Contactos/Mostrar _tempo de ausencia" - -#: ../pidgin/gtkblist.c:2857 -msgid "/Buddies/_Sort Buddies" -msgstr "/Contactos/_Ordenar contactos" - #: ../pidgin/gtkblist.c:2859 +msgid "/Buddies/Show Idle _Times" +msgstr "/Contactos/Mostrar _tempo de ausencia" + +#: ../pidgin/gtkblist.c:2860 +msgid "/Buddies/_Sort Buddies" +msgstr "/Contactos/_Ordenar contactos" + +#: ../pidgin/gtkblist.c:2862 msgid "/Buddies/_Add Buddy..." msgstr "/Contactos/_Engadir un contacto..." -#: ../pidgin/gtkblist.c:2860 +#: ../pidgin/gtkblist.c:2863 msgid "/Buddies/Add C_hat..." msgstr "/Contactos/Engadir unha con_versa..." -#: ../pidgin/gtkblist.c:2861 +#: ../pidgin/gtkblist.c:2864 msgid "/Buddies/Add _Group..." msgstr "/Contactos/Engadir un _grupo..." -#: ../pidgin/gtkblist.c:2863 +#: ../pidgin/gtkblist.c:2866 msgid "/Buddies/_Quit" msgstr "/Contactos/_Saír" #. Accounts menu -#: ../pidgin/gtkblist.c:2866 +#: ../pidgin/gtkblist.c:2869 msgid "/_Accounts" msgstr "/Con_tas" -#: ../pidgin/gtkblist.c:2867 ../pidgin/gtkblist.c:6543 +#: ../pidgin/gtkblist.c:2870 ../pidgin/gtkblist.c:6542 msgid "/Accounts/Add\\/Edit" msgstr "/Contas/Engadir\\/Editar" #. Tools -#: ../pidgin/gtkblist.c:2870 +#: ../pidgin/gtkblist.c:2873 msgid "/_Tools" msgstr "/_Ferramentas" -#: ../pidgin/gtkblist.c:2871 -msgid "/Tools/Buddy _Pounces" -msgstr "/Ferramentas/_Avisos de contacto" - -#: ../pidgin/gtkblist.c:2872 -msgid "/Tools/Plu_gins" -msgstr "/Ferramentas/C_omplementos" - -#: ../pidgin/gtkblist.c:2873 -msgid "/Tools/Pr_eferences" -msgstr "/Ferramentas/Pr_eferencias" - #: ../pidgin/gtkblist.c:2874 -msgid "/Tools/Pr_ivacy" -msgstr "/Ferramentas/Pr_ivacidade" +msgid "/Tools/Buddy _Pounces" +msgstr "/Ferramentas/_Avisos de contacto" + +#: ../pidgin/gtkblist.c:2875 +msgid "/Tools/Plu_gins" +msgstr "/Ferramentas/C_omplementos" #: ../pidgin/gtkblist.c:2876 -msgid "/Tools/_File Transfers" -msgstr "/Ferramentas/Transferencias de _ficheiros" +msgid "/Tools/Pr_eferences" +msgstr "/Ferramentas/Pr_eferencias" #: ../pidgin/gtkblist.c:2877 +msgid "/Tools/Pr_ivacy" +msgstr "/Ferramentas/Pr_ivacidade" + +#: ../pidgin/gtkblist.c:2879 +msgid "/Tools/_File Transfers" +msgstr "/Ferramentas/Transferencias de _ficheiros" + +#: ../pidgin/gtkblist.c:2880 msgid "/Tools/R_oom List" msgstr "/Ferramentas/Lista de _salas" -#: ../pidgin/gtkblist.c:2878 +#: ../pidgin/gtkblist.c:2881 msgid "/Tools/System _Log" msgstr "/Ferramentas/_Rexistro do sistema" -#: ../pidgin/gtkblist.c:2880 +#: ../pidgin/gtkblist.c:2883 msgid "/Tools/Mute _Sounds" msgstr "/Ferramentas/Silenciar s_ons" #. Help -#: ../pidgin/gtkblist.c:2882 +#: ../pidgin/gtkblist.c:2885 msgid "/_Help" msgstr "/A_xuda" -#: ../pidgin/gtkblist.c:2883 +#: ../pidgin/gtkblist.c:2886 msgid "/Help/Online _Help" msgstr "/Axuda/A_xuda en liña" -#: ../pidgin/gtkblist.c:2884 +#: ../pidgin/gtkblist.c:2887 msgid "/Help/_Debug Window" msgstr "/Axuda/Ventá de _depuración" -#: ../pidgin/gtkblist.c:2886 ../pidgin/gtkblist.c:2888 +#: ../pidgin/gtkblist.c:2889 ../pidgin/gtkblist.c:2891 msgid "/Help/_About" msgstr "/Axuda/_Acerca de" -#: ../pidgin/gtkblist.c:2917 +#: ../pidgin/gtkblist.c:2920 #, c-format msgid "" "\n" @@ -12224,132 +12364,132 @@ "\n" "<b>Conta:</b> %s" -#: ../pidgin/gtkblist.c:2995 +#: ../pidgin/gtkblist.c:2998 msgid "Buddy Alias" msgstr "Alias de contacto" -#: ../pidgin/gtkblist.c:3024 +#: ../pidgin/gtkblist.c:3027 msgid "Logged In" msgstr "Xa está conectado" -#: ../pidgin/gtkblist.c:3070 +#: ../pidgin/gtkblist.c:3073 msgid "Last Seen" msgstr "Última vista" -#: ../pidgin/gtkblist.c:3090 +#: ../pidgin/gtkblist.c:3093 msgid "Spooky" msgstr "Espeluznante" -#: ../pidgin/gtkblist.c:3092 +#: ../pidgin/gtkblist.c:3095 msgid "Awesome" msgstr "Impresionante" -#: ../pidgin/gtkblist.c:3094 +#: ../pidgin/gtkblist.c:3097 msgid "Rockin'" msgstr "Brillante" -#: ../pidgin/gtkblist.c:3437 +#: ../pidgin/gtkblist.c:3436 #, c-format msgid "Idle %dd %dh %02dm" msgstr "Inactivo %dd %dh %02dm" -#: ../pidgin/gtkblist.c:3439 +#: ../pidgin/gtkblist.c:3438 #, c-format msgid "Idle %dh %02dm" msgstr "Inactivo %dh %02dm" -#: ../pidgin/gtkblist.c:3441 +#: ../pidgin/gtkblist.c:3440 #, c-format msgid "Idle %dm" msgstr "Inactivo %dm" -#: ../pidgin/gtkblist.c:3586 +#: ../pidgin/gtkblist.c:3585 msgid "/Buddies/New Instant Message..." msgstr "/Contacto/Mensaxe instantánea _nova..." -#: ../pidgin/gtkblist.c:3587 ../pidgin/gtkblist.c:3620 +#: ../pidgin/gtkblist.c:3586 ../pidgin/gtkblist.c:3619 msgid "/Buddies/Join a Chat..." msgstr "/Contacto/Unirse a unha conversa..." -#: ../pidgin/gtkblist.c:3588 +#: ../pidgin/gtkblist.c:3587 msgid "/Buddies/Get User Info..." msgstr "/Contacto/Obter información do usuario..." -#: ../pidgin/gtkblist.c:3589 +#: ../pidgin/gtkblist.c:3588 msgid "/Buddies/Add Buddy..." msgstr "/Contacto/Engadir un contacto..." -#: ../pidgin/gtkblist.c:3590 ../pidgin/gtkblist.c:3623 +#: ../pidgin/gtkblist.c:3589 ../pidgin/gtkblist.c:3622 msgid "/Buddies/Add Chat..." msgstr "/Contacto/Engadir unha conversa..." -#: ../pidgin/gtkblist.c:3591 +#: ../pidgin/gtkblist.c:3590 msgid "/Buddies/Add Group..." msgstr "/Contacto/Engadir un grupo..." -#: ../pidgin/gtkblist.c:3626 +#: ../pidgin/gtkblist.c:3625 msgid "/Tools/Privacy" msgstr "/Ferramentas/Privacidade" -#: ../pidgin/gtkblist.c:3629 +#: ../pidgin/gtkblist.c:3628 msgid "/Tools/Room List" msgstr "/Ferramentas/Lista de salas" -#: ../pidgin/gtkblist.c:3726 ../pidgin/gtkdocklet.c:153 +#: ../pidgin/gtkblist.c:3725 ../pidgin/gtkdocklet.c:153 #, c-format msgid "%d unread message from %s\n" msgid_plural "%d unread messages from %s\n" msgstr[0] "%d mensaxes sen ler de %s\n" msgstr[1] "%d mensaxes sen ler de %s\n" -#: ../pidgin/gtkblist.c:3806 +#: ../pidgin/gtkblist.c:3805 msgid "Manually" msgstr "Manualmente" -#: ../pidgin/gtkblist.c:3808 +#: ../pidgin/gtkblist.c:3807 msgid "Alphabetically" msgstr "Alfabeticamente" +#: ../pidgin/gtkblist.c:3808 +msgid "By status" +msgstr "Por estado" + #: ../pidgin/gtkblist.c:3809 -msgid "By status" -msgstr "Por estado" - -#: ../pidgin/gtkblist.c:3810 msgid "By log size" msgstr "Por tamaño de rexistro" -#: ../pidgin/gtkblist.c:4015 ../pidgin/gtkconn.c:178 +#: ../pidgin/gtkblist.c:4014 ../pidgin/gtkconn.c:178 #, c-format msgid "%s disconnected" msgstr "%s desconectado" -#: ../pidgin/gtkblist.c:4025 +#: ../pidgin/gtkblist.c:4024 msgid "Re-enable Account" msgstr "Reactivar conta" -#: ../pidgin/gtkblist.c:4051 +#: ../pidgin/gtkblist.c:4050 #, c-format msgid "<span color=\"red\">%s disconnected: %s</span>" msgstr "<span color=\"red\">%s desconectado: %s</span>" -#: ../pidgin/gtkblist.c:4203 +#: ../pidgin/gtkblist.c:4202 msgid "<b>Username:</b>" msgstr "<b>Nome de usuario:</b>" -#: ../pidgin/gtkblist.c:4210 +#: ../pidgin/gtkblist.c:4209 msgid "<b>Password:</b>" msgstr "<b>Contrasinal:</b>" -#: ../pidgin/gtkblist.c:4221 +#: ../pidgin/gtkblist.c:4220 msgid "_Login" msgstr "_Iniciar a sesión" -#: ../pidgin/gtkblist.c:4304 +#: ../pidgin/gtkblist.c:4303 msgid "/Accounts" msgstr "/Contas" #. Translators: Please maintain the use of -> and <- to refer to menu heirarchy -#: ../pidgin/gtkblist.c:4318 +#: ../pidgin/gtkblist.c:4317 #, c-format msgid "" "<span weight='bold' size='larger'>Welcome to %s!</span>\n" @@ -12367,23 +12507,23 @@ #. set the Show Offline Buddies option. must be done #. * after the treeview or faceprint gets mad. -Robot101 #. -#: ../pidgin/gtkblist.c:4567 +#: ../pidgin/gtkblist.c:4566 msgid "/Buddies/Show Offline Buddies" msgstr "/Contactos/Mostrar contactos desconectados" -#: ../pidgin/gtkblist.c:4570 +#: ../pidgin/gtkblist.c:4569 msgid "/Buddies/Show Empty Groups" msgstr "/Contactos/Mostrar grupos baleiros" -#: ../pidgin/gtkblist.c:4576 +#: ../pidgin/gtkblist.c:4575 msgid "/Buddies/Show Buddy Details" msgstr "/Contactos/Mostrar detalles de contactos" -#: ../pidgin/gtkblist.c:4579 +#: ../pidgin/gtkblist.c:4578 msgid "/Buddies/Show Idle Times" msgstr "/Contactos/Mostrar tempos de ausencia" -#: ../pidgin/gtkblist.c:5456 +#: ../pidgin/gtkblist.c:5455 msgid "" "Please enter the screen name of the person you would like to add to your " "buddy list. You may optionally enter an alias, or nickname, for the buddy. " @@ -12394,19 +12534,19 @@ "nome de usuario sempre que for posible.\n" #. End of account box -#: ../pidgin/gtkblist.c:5491 +#: ../pidgin/gtkblist.c:5490 msgid "_Screen name:" msgstr "_Nome de usuario:" -#: ../pidgin/gtkblist.c:5513 ../pidgin/gtkblist.c:5866 +#: ../pidgin/gtkblist.c:5512 ../pidgin/gtkblist.c:5865 msgid "A_lias:" msgstr "A_lias:" -#: ../pidgin/gtkblist.c:5778 +#: ../pidgin/gtkblist.c:5777 msgid "This protocol does not support chat rooms." msgstr "Este protocolo non está soportado nas salas de conversa." -#: ../pidgin/gtkblist.c:5794 +#: ../pidgin/gtkblist.c:5793 msgid "" "You are not currently signed on with any protocols that have the ability to " "chat." @@ -12414,7 +12554,7 @@ "Non está conectado con ningunha conta que teña capacidade de acceder a " "conversas." -#: ../pidgin/gtkblist.c:5835 +#: ../pidgin/gtkblist.c:5834 msgid "" "Please enter an alias, and the appropriate information about the chat you " "would like to add to your buddy list.\n" @@ -12422,39 +12562,39 @@ "Introduza un alias e a información que crea apropiada da conversa que " "desexaría engadir á lista de contactos.\n" -#: ../pidgin/gtkblist.c:5923 +#: ../pidgin/gtkblist.c:5922 msgid "Please enter the name of the group to be added." msgstr "Introduza o nome do grupo que quere engadir." -#: ../pidgin/gtkblist.c:6563 +#: ../pidgin/gtkblist.c:6562 msgid "<PurpleMain>/Accounts/" msgstr "<PurpleMain>/Contas/" -#: ../pidgin/gtkblist.c:6587 +#: ../pidgin/gtkblist.c:6586 msgid "_Edit Account" msgstr "_Editar a conta" -#: ../pidgin/gtkblist.c:6600 ../pidgin/gtkconv.c:3011 +#: ../pidgin/gtkblist.c:6599 ../pidgin/gtkconv.c:3037 msgid "No actions available" msgstr "Non hai accións dispoñibles" -#: ../pidgin/gtkblist.c:6608 +#: ../pidgin/gtkblist.c:6607 msgid "_Disable" msgstr "_Desactivar" -#: ../pidgin/gtkblist.c:6620 +#: ../pidgin/gtkblist.c:6619 msgid "Enable Account" msgstr "Activar a conta" -#: ../pidgin/gtkblist.c:6626 +#: ../pidgin/gtkblist.c:6625 msgid "<PurpleMain>/Accounts/Enable Account" msgstr "<PurpleMain>/Contas/Activar conta" -#: ../pidgin/gtkblist.c:6675 +#: ../pidgin/gtkblist.c:6674 msgid "/Tools" msgstr "/Ferramentas" -#: ../pidgin/gtkblist.c:6745 +#: ../pidgin/gtkblist.c:6744 msgid "/Buddies/Sort Buddies" msgstr "/Contactos/Ordenar contactos" @@ -12471,24 +12611,24 @@ "%s non tentará reconectar a conta até que vostede corrixa o erro e " "a volva activar." -#: ../pidgin/gtkconv.c:484 +#: ../pidgin/gtkconv.c:488 msgid "Unknown command." msgstr "Comando descoñecido." -#: ../pidgin/gtkconv.c:756 ../pidgin/gtkconv.c:782 +#: ../pidgin/gtkconv.c:760 ../pidgin/gtkconv.c:786 msgid "That buddy is not on the same protocol as this chat." msgstr "Ese contacto non utiliza o mesmo protocolo que esta conversa." -#: ../pidgin/gtkconv.c:776 +#: ../pidgin/gtkconv.c:780 msgid "You are not currently signed on with an account that can invite that buddy." msgstr "Non está conectado con ningunha conta coa que poida convidar a ese contacto." -#: ../pidgin/gtkconv.c:829 +#: ../pidgin/gtkconv.c:833 msgid "Invite Buddy Into Chat Room" msgstr "Convidar a un contacto á sala de conversa" #. Put our happy label in it. -#: ../pidgin/gtkconv.c:859 +#: ../pidgin/gtkconv.c:863 msgid "" "Please enter the name of the user you wish to invite, along with an optional " "invite message." @@ -12496,200 +12636,200 @@ "Introduza o nome de usuario que desexa convidar, xunto cunha mensaxe de " "convite opcional." -#: ../pidgin/gtkconv.c:880 +#: ../pidgin/gtkconv.c:884 msgid "_Buddy:" msgstr "_Contacto:" -#: ../pidgin/gtkconv.c:900 ../pidgin/gtksavedstatuses.c:1193 +#: ../pidgin/gtkconv.c:904 ../pidgin/gtksavedstatuses.c:1193 #: ../pidgin/gtksavedstatuses.c:1525 msgid "_Message:" msgstr "_Mensaxe:" -#: ../pidgin/gtkconv.c:957 ../pidgin/gtkconv.c:2518 ../pidgin/gtkdebug.c:218 +#: ../pidgin/gtkconv.c:961 ../pidgin/gtkconv.c:2544 ../pidgin/gtkdebug.c:218 #: ../pidgin/gtkft.c:542 msgid "Unable to open file." msgstr "Non se puido abrir o ficheiro." -#: ../pidgin/gtkconv.c:963 +#: ../pidgin/gtkconv.c:967 #, c-format msgid "<h1>Conversation with %s</h1>\n" msgstr "<h1>Conversa con %s</h1>\n" -#: ../pidgin/gtkconv.c:999 +#: ../pidgin/gtkconv.c:1003 msgid "Save Conversation" msgstr "Gardar conversa" -#: ../pidgin/gtkconv.c:1148 ../pidgin/gtkdebug.c:166 ../pidgin/gtkdebug.c:742 +#: ../pidgin/gtkconv.c:1152 ../pidgin/gtkdebug.c:166 ../pidgin/gtkdebug.c:742 msgid "Find" msgstr "Buscar" -#: ../pidgin/gtkconv.c:1174 ../pidgin/gtkdebug.c:194 +#: ../pidgin/gtkconv.c:1178 ../pidgin/gtkdebug.c:194 msgid "_Search for:" msgstr "_Buscar:" -#: ../pidgin/gtkconv.c:1357 +#: ../pidgin/gtkconv.c:1361 msgid "Logging started. Future messages in this conversation will be logged." msgstr "" "Iniciuose o rexistro. A partir de agora rexistraranse todas as mensaxes " "desta conversa." -#: ../pidgin/gtkconv.c:1365 +#: ../pidgin/gtkconv.c:1369 msgid "Logging stopped. Future messages in this conversation will not be logged." msgstr "" "Detívose o rexistro. Non se rexistrarán mensaxes desta conversa de agora " "en adiante." -#: ../pidgin/gtkconv.c:1613 +#: ../pidgin/gtkconv.c:1617 msgid "Un-Ignore" msgstr "Non ignorar" -#: ../pidgin/gtkconv.c:1616 +#: ../pidgin/gtkconv.c:1620 msgid "Ignore" msgstr "Ignorar" -#: ../pidgin/gtkconv.c:1636 +#: ../pidgin/gtkconv.c:1640 msgid "Get Away Message" msgstr "Mensaxe de ausencia" -#: ../pidgin/gtkconv.c:1659 +#: ../pidgin/gtkconv.c:1663 msgid "Last said" msgstr "Dito a última vez" -#: ../pidgin/gtkconv.c:2526 +#: ../pidgin/gtkconv.c:2552 msgid "Unable to save icon file to disk." msgstr "Non se puido gardar o ficheiro de iconas no disco." -#: ../pidgin/gtkconv.c:2577 +#: ../pidgin/gtkconv.c:2603 msgid "Save Icon" msgstr "Gardar icona" -#: ../pidgin/gtkconv.c:2629 +#: ../pidgin/gtkconv.c:2655 msgid "Animate" msgstr "Animar" -#: ../pidgin/gtkconv.c:2634 +#: ../pidgin/gtkconv.c:2660 msgid "Hide Icon" msgstr "Ocultar icona" -#: ../pidgin/gtkconv.c:2637 +#: ../pidgin/gtkconv.c:2663 msgid "Save Icon As..." msgstr "Gardar a icona como..." -#: ../pidgin/gtkconv.c:2641 +#: ../pidgin/gtkconv.c:2667 msgid "Set Custom Icon..." msgstr "Establecer iconas personalizadas..." -#: ../pidgin/gtkconv.c:2654 +#: ../pidgin/gtkconv.c:2680 msgid "Remove Custom Icon" msgstr "Eliminar as iconas personalizadas" #. Conversation menu -#: ../pidgin/gtkconv.c:2796 +#: ../pidgin/gtkconv.c:2822 msgid "/_Conversation" msgstr "/_Conversa" -#: ../pidgin/gtkconv.c:2798 +#: ../pidgin/gtkconv.c:2824 msgid "/Conversation/New Instant _Message..." msgstr "/Conversa/_Mensaxe instantánea nova..." -#: ../pidgin/gtkconv.c:2803 +#: ../pidgin/gtkconv.c:2829 msgid "/Conversation/_Find..." msgstr "/Conversa/_Buscar..." -#: ../pidgin/gtkconv.c:2805 +#: ../pidgin/gtkconv.c:2831 msgid "/Conversation/View _Log" msgstr "/Conversa/Ver _rexistro" -#: ../pidgin/gtkconv.c:2806 +#: ../pidgin/gtkconv.c:2832 msgid "/Conversation/_Save As..." msgstr "/Conversa/_Gardar como..." -#: ../pidgin/gtkconv.c:2808 +#: ../pidgin/gtkconv.c:2834 msgid "/Conversation/Clea_r Scrollback" msgstr "/Conversa/Limpar _historial" -#: ../pidgin/gtkconv.c:2812 +#: ../pidgin/gtkconv.c:2838 msgid "/Conversation/Se_nd File..." msgstr "/Conversa/E_nviar ficheiro..." -#: ../pidgin/gtkconv.c:2813 +#: ../pidgin/gtkconv.c:2839 msgid "/Conversation/Add Buddy _Pounce..." msgstr "/Conversa/Engadir _aviso de contacto..." -#: ../pidgin/gtkconv.c:2815 +#: ../pidgin/gtkconv.c:2841 msgid "/Conversation/_Get Info" msgstr "/Conversa/_Obter información" -#: ../pidgin/gtkconv.c:2817 +#: ../pidgin/gtkconv.c:2843 msgid "/Conversation/In_vite..." msgstr "/Conversa/Con_vidar..." -#: ../pidgin/gtkconv.c:2819 +#: ../pidgin/gtkconv.c:2845 msgid "/Conversation/M_ore" msgstr "/Conversa/Má_is" -#: ../pidgin/gtkconv.c:2823 +#: ../pidgin/gtkconv.c:2849 msgid "/Conversation/Al_ias..." msgstr "/Conversa/A_lias..." -#: ../pidgin/gtkconv.c:2825 +#: ../pidgin/gtkconv.c:2851 msgid "/Conversation/_Block..." msgstr "/Conversa/_Bloquear..." -#: ../pidgin/gtkconv.c:2827 +#: ../pidgin/gtkconv.c:2853 msgid "/Conversation/_Unblock..." msgstr "/Conversa/_Desbloquear..." -#: ../pidgin/gtkconv.c:2829 +#: ../pidgin/gtkconv.c:2855 msgid "/Conversation/_Add..." msgstr "/Conversa/Enga_dir..." -#: ../pidgin/gtkconv.c:2831 +#: ../pidgin/gtkconv.c:2857 msgid "/Conversation/_Remove..." msgstr "/Conversa/_Eliminar..." -#: ../pidgin/gtkconv.c:2836 +#: ../pidgin/gtkconv.c:2862 msgid "/Conversation/Insert Lin_k..." msgstr "/Conversa/Inserir liga_zón..." -#: ../pidgin/gtkconv.c:2838 +#: ../pidgin/gtkconv.c:2864 msgid "/Conversation/Insert Imag_e..." msgstr "/Conversa/Inserir ima_xe..." -#: ../pidgin/gtkconv.c:2844 +#: ../pidgin/gtkconv.c:2870 msgid "/Conversation/_Close" msgstr "/Conversa/_Pechar" #. Options -#: ../pidgin/gtkconv.c:2848 +#: ../pidgin/gtkconv.c:2874 msgid "/_Options" msgstr "/_Opcións" -#: ../pidgin/gtkconv.c:2849 +#: ../pidgin/gtkconv.c:2875 msgid "/Options/Enable _Logging" msgstr "/Opcións/Activar _rexistro" -#: ../pidgin/gtkconv.c:2850 +#: ../pidgin/gtkconv.c:2876 msgid "/Options/Enable _Sounds" msgstr "/Opcións/Activar _sons" -#: ../pidgin/gtkconv.c:2851 +#: ../pidgin/gtkconv.c:2877 msgid "/Options/Show Buddy _Icon" msgstr "/Opcións/Mostrar _iconas dos contactos" -#: ../pidgin/gtkconv.c:2853 +#: ../pidgin/gtkconv.c:2879 msgid "/Options/Show Formatting _Toolbars" msgstr "/Opcións/Mostrar _barra de formato" -#: ../pidgin/gtkconv.c:2854 +#: ../pidgin/gtkconv.c:2880 msgid "/Options/Show Ti_mestamps" msgstr "/Opcións/Mostrar _marcas de tempo" -#: ../pidgin/gtkconv.c:2999 +#: ../pidgin/gtkconv.c:3025 msgid "/Conversation/More" msgstr "/Conversa/Máis" -#: ../pidgin/gtkconv.c:3055 +#: ../pidgin/gtkconv.c:3081 msgid "/Options" msgstr "/Opcións" @@ -12698,176 +12838,176 @@ #. Make sure the 'Conversation -> More' menuitems are regenerated whenever #. * the 'Conversation' menu pops up because the entries can change after the #. * conversation is created. -#: ../pidgin/gtkconv.c:3090 ../pidgin/gtkconv.c:3122 +#: ../pidgin/gtkconv.c:3116 ../pidgin/gtkconv.c:3148 msgid "/Conversation" msgstr "/Conversa" -#: ../pidgin/gtkconv.c:3130 +#: ../pidgin/gtkconv.c:3156 msgid "/Conversation/View Log" msgstr "/Conversa/Ver o rexistro" -#: ../pidgin/gtkconv.c:3136 +#: ../pidgin/gtkconv.c:3162 msgid "/Conversation/Send File..." msgstr "/Conversa/Enviar o ficheiro..." -#: ../pidgin/gtkconv.c:3140 +#: ../pidgin/gtkconv.c:3166 msgid "/Conversation/Add Buddy Pounce..." msgstr "/Conversa/Engadir un aviso de contacto..." -#: ../pidgin/gtkconv.c:3146 +#: ../pidgin/gtkconv.c:3172 msgid "/Conversation/Get Info" msgstr "/Conversa/Obter información" -#: ../pidgin/gtkconv.c:3150 +#: ../pidgin/gtkconv.c:3176 msgid "/Conversation/Invite..." msgstr "/Conversa/Convidar..." -#: ../pidgin/gtkconv.c:3156 +#: ../pidgin/gtkconv.c:3182 msgid "/Conversation/Alias..." msgstr "/Conversa/Alias..." -#: ../pidgin/gtkconv.c:3160 +#: ../pidgin/gtkconv.c:3186 msgid "/Conversation/Block..." msgstr "/Conversa/Bloquear..." -#: ../pidgin/gtkconv.c:3164 +#: ../pidgin/gtkconv.c:3190 msgid "/Conversation/Unblock..." msgstr "/Conversa/Desbloquear..." -#: ../pidgin/gtkconv.c:3168 +#: ../pidgin/gtkconv.c:3194 msgid "/Conversation/Add..." msgstr "/Conversa/Engadir..." -#: ../pidgin/gtkconv.c:3172 +#: ../pidgin/gtkconv.c:3198 msgid "/Conversation/Remove..." msgstr "/Conversa/Eliminar..." -#: ../pidgin/gtkconv.c:3178 +#: ../pidgin/gtkconv.c:3204 msgid "/Conversation/Insert Link..." msgstr "/Conversa/Inserir ligazón..." -#: ../pidgin/gtkconv.c:3182 +#: ../pidgin/gtkconv.c:3208 msgid "/Conversation/Insert Image..." msgstr "/Conversa/Inserir unha imaxe..." -#: ../pidgin/gtkconv.c:3188 +#: ../pidgin/gtkconv.c:3214 msgid "/Options/Enable Logging" msgstr "/Opcións/Activar rexistro" -#: ../pidgin/gtkconv.c:3191 +#: ../pidgin/gtkconv.c:3217 msgid "/Options/Enable Sounds" msgstr "/Opcións/Activar sons" -#: ../pidgin/gtkconv.c:3204 +#: ../pidgin/gtkconv.c:3230 msgid "/Options/Show Formatting Toolbars" msgstr "/Opcións/Mostrar barra de formato" -#: ../pidgin/gtkconv.c:3207 +#: ../pidgin/gtkconv.c:3233 msgid "/Options/Show Timestamps" msgstr "/Opcións/Mostrar marcas de tempo" -#: ../pidgin/gtkconv.c:3210 +#: ../pidgin/gtkconv.c:3236 msgid "/Options/Show Buddy Icon" msgstr "/Opcións/Mostrar iconas dos contactos" -#: ../pidgin/gtkconv.c:3294 ../pidgin/gtkconv.c:3336 +#: ../pidgin/gtkconv.c:3320 ../pidgin/gtkconv.c:3362 msgid "User is typing..." msgstr "O usuario está a escribir..." -#: ../pidgin/gtkconv.c:3339 +#: ../pidgin/gtkconv.c:3365 msgid "User has typed something and stopped" msgstr "O usuario escribiu algo e parou" #. Build the Send To menu -#: ../pidgin/gtkconv.c:3520 ../pidgin/gtkconv.c:7732 +#: ../pidgin/gtkconv.c:3548 ../pidgin/gtkconv.c:7812 msgid "_Send To" msgstr "_Enviar a" -#: ../pidgin/gtkconv.c:4234 +#: ../pidgin/gtkconv.c:4261 msgid "_Send" msgstr "_Enviar" #. Setup the label telling how many people are in the room. -#: ../pidgin/gtkconv.c:4338 +#: ../pidgin/gtkconv.c:4365 msgid "0 people in room" msgstr "0 persoas na sala" -#: ../pidgin/gtkconv.c:5585 ../pidgin/gtkconv.c:5706 +#: ../pidgin/gtkconv.c:5633 ../pidgin/gtkconv.c:5754 #, c-format msgid "%d person in room" msgid_plural "%d people in room" msgstr[0] "%d persoa na sala" msgstr[1] "%d persoa na sala" -#: ../pidgin/gtkconv.c:6305 ../pidgin/gtkstatusbox.c:659 +#: ../pidgin/gtkconv.c:6357 ../pidgin/gtkstatusbox.c:659 msgid "Typing" msgstr "Escribindo" -#: ../pidgin/gtkconv.c:6311 +#: ../pidgin/gtkconv.c:6361 msgid "Stopped Typing" msgstr "Deixou de escribir" -#: ../pidgin/gtkconv.c:6316 +#: ../pidgin/gtkconv.c:6364 msgid "Nick Said" msgstr "Alias dixo" -#: ../pidgin/gtkconv.c:6321 ../pidgin/gtkdocklet.c:492 +#: ../pidgin/gtkconv.c:6367 ../pidgin/gtkdocklet.c:492 msgid "Unread Messages" msgstr "Mensaxes sen ler" -#: ../pidgin/gtkconv.c:6326 +#: ../pidgin/gtkconv.c:6370 msgid "New Event" msgstr "Evento novo" -#: ../pidgin/gtkconv.c:7303 +#: ../pidgin/gtkconv.c:7362 msgid "clear: Clears all conversation scrollbacks." msgstr "clear: Limpa todos os historiais de conversas." -#: ../pidgin/gtkconv.c:7467 +#: ../pidgin/gtkconv.c:7526 msgid "Confirm close" msgstr "Confirmar o peche" -#: ../pidgin/gtkconv.c:7499 +#: ../pidgin/gtkconv.c:7558 msgid "You have unread messages. Are you sure you want to close the window?" msgstr "Hai mensaxes sen ler. Seguro que quere pechar a ventá?" -#: ../pidgin/gtkconv.c:8059 +#: ../pidgin/gtkconv.c:8144 msgid "Close other tabs" msgstr "Pechar outros separadores" -#: ../pidgin/gtkconv.c:8065 +#: ../pidgin/gtkconv.c:8150 msgid "Close all tabs" msgstr "Pechar todas os separadores" -#: ../pidgin/gtkconv.c:8073 +#: ../pidgin/gtkconv.c:8158 msgid "Detach this tab" msgstr "Separar este separador" -#: ../pidgin/gtkconv.c:8079 +#: ../pidgin/gtkconv.c:8164 msgid "Close this tab" msgstr "Pechar este separador" -#: ../pidgin/gtkconv.c:8560 +#: ../pidgin/gtkconv.c:8662 msgid "Close conversation" msgstr "Pechar a conversa" -#: ../pidgin/gtkconv.c:9092 +#: ../pidgin/gtkconv.c:9261 msgid "Last created window" msgstr "Última ventá creada" -#: ../pidgin/gtkconv.c:9094 +#: ../pidgin/gtkconv.c:9263 msgid "Separate IM and Chat windows" msgstr "Separar as ventás de MI e de conversa" -#: ../pidgin/gtkconv.c:9096 ../pidgin/gtkprefs.c:1410 +#: ../pidgin/gtkconv.c:9265 ../pidgin/gtkprefs.c:1412 msgid "New window" msgstr "Nova ventá" -#: ../pidgin/gtkconv.c:9098 +#: ../pidgin/gtkconv.c:9267 msgid "By group" msgstr "Por grupo" -#: ../pidgin/gtkconv.c:9100 +#: ../pidgin/gtkconv.c:9269 msgid "By account" msgstr "Por conta" @@ -13059,121 +13199,122 @@ msgid "Spanish" msgstr "Español" -#: ../pidgin/gtkdialogs.c:155 ../pidgin/gtkdialogs.c:156 +#: ../pidgin/gtkdialogs.c:155 +msgid "Estonian" +msgstr "Estonio" + +#: ../pidgin/gtkdialogs.c:156 ../pidgin/gtkdialogs.c:157 msgid "Euskera(Basque)" msgstr "Euskera" -#: ../pidgin/gtkdialogs.c:157 ../pidgin/gtkdialogs.c:158 -#: ../pidgin/gtkdialogs.c:159 +#: ../pidgin/gtkdialogs.c:158 ../pidgin/gtkdialogs.c:159 +#: ../pidgin/gtkdialogs.c:160 msgid "Persian" msgstr "Persa" -#: ../pidgin/gtkdialogs.c:160 ../pidgin/gtkdialogs.c:227 +#: ../pidgin/gtkdialogs.c:161 ../pidgin/gtkdialogs.c:227 #: ../pidgin/gtkdialogs.c:228 msgid "Finnish" msgstr "Finlandés" -#: ../pidgin/gtkdialogs.c:161 ../pidgin/gtkdialogs.c:229 +#: ../pidgin/gtkdialogs.c:162 ../pidgin/gtkdialogs.c:229 #: ../pidgin/gtkdialogs.c:230 ../pidgin/gtkdialogs.c:231 #: ../pidgin/gtkdialogs.c:232 msgid "French" msgstr "Francés" -#: ../pidgin/gtkdialogs.c:162 ../pidgin/gtkdialogs.c:163 +#: ../pidgin/gtkdialogs.c:163 ../pidgin/gtkdialogs.c:164 +#: ../pidgin/gtkdialogs.c:233 msgid "Galician" msgstr "Galego" -#: ../pidgin/gtkdialogs.c:164 ../pidgin/gtkdialogs.c:165 +#: ../pidgin/gtkdialogs.c:165 ../pidgin/gtkdialogs.c:166 msgid "Gujarati" msgstr "Gujarati" -#: ../pidgin/gtkdialogs.c:165 +#: ../pidgin/gtkdialogs.c:166 msgid "Gujarati Language Team" msgstr "Equipo de idioma de Gujarati" -#: ../pidgin/gtkdialogs.c:166 ../pidgin/gtkdialogs.c:233 +#: ../pidgin/gtkdialogs.c:167 ../pidgin/gtkdialogs.c:234 msgid "Hebrew" msgstr "Hebreo" -#: ../pidgin/gtkdialogs.c:167 -msgid "Hindi" -msgstr "Hindú" - #: ../pidgin/gtkdialogs.c:168 -msgid "Hungarian" -msgstr "Húngaro" +msgid "Hindi" +msgstr "Hindú" #: ../pidgin/gtkdialogs.c:169 +msgid "Hungarian" +msgstr "Húngaro" + +#: ../pidgin/gtkdialogs.c:170 msgid "Indonesian" msgstr "Indonesio" -#: ../pidgin/gtkdialogs.c:170 ../pidgin/gtkdialogs.c:234 +#: ../pidgin/gtkdialogs.c:171 ../pidgin/gtkdialogs.c:235 msgid "Italian" msgstr "Italiano" -#: ../pidgin/gtkdialogs.c:171 ../pidgin/gtkdialogs.c:235 -#: ../pidgin/gtkdialogs.c:236 ../pidgin/gtkdialogs.c:237 +#: ../pidgin/gtkdialogs.c:172 ../pidgin/gtkdialogs.c:236 +#: ../pidgin/gtkdialogs.c:237 ../pidgin/gtkdialogs.c:238 msgid "Japanese" msgstr "Xaponés" -#: ../pidgin/gtkdialogs.c:172 ../pidgin/gtkdialogs.c:238 +#: ../pidgin/gtkdialogs.c:173 ../pidgin/gtkdialogs.c:239 msgid "Georgian" msgstr "Xeorxiano" -#: ../pidgin/gtkdialogs.c:172 +#: ../pidgin/gtkdialogs.c:173 msgid "Ubuntu Georgian Translators" msgstr "Tradutores xeorxianos de Ubuntu" -#: ../pidgin/gtkdialogs.c:173 +#: ../pidgin/gtkdialogs.c:174 msgid "Kannada" msgstr "Kannada" -#: ../pidgin/gtkdialogs.c:173 +#: ../pidgin/gtkdialogs.c:174 msgid "Kannada Translation team" msgstr "Equipo de tradución ao Kannada" -#: ../pidgin/gtkdialogs.c:174 ../pidgin/gtkdialogs.c:239 -#: ../pidgin/gtkdialogs.c:240 +#: ../pidgin/gtkdialogs.c:175 ../pidgin/gtkdialogs.c:240 +#: ../pidgin/gtkdialogs.c:241 msgid "Korean" msgstr "Coreano" -#: ../pidgin/gtkdialogs.c:175 ../pidgin/gtkdialogs.c:176 -#: ../pidgin/gtkdialogs.c:177 +#: ../pidgin/gtkdialogs.c:176 ../pidgin/gtkdialogs.c:177 +#: ../pidgin/gtkdialogs.c:178 msgid "Kurdish" msgstr "Curdo" -#: ../pidgin/gtkdialogs.c:178 ../pidgin/gtkdialogs.c:241 -#: ../pidgin/gtkdialogs.c:242 +#: ../pidgin/gtkdialogs.c:179 ../pidgin/gtkdialogs.c:242 +#: ../pidgin/gtkdialogs.c:243 msgid "Lithuanian" msgstr "Lituano" -#: ../pidgin/gtkdialogs.c:179 ../pidgin/gtkdialogs.c:180 -#: ../pidgin/gtkdialogs.c:243 +#: ../pidgin/gtkdialogs.c:180 ../pidgin/gtkdialogs.c:181 +#: ../pidgin/gtkdialogs.c:244 msgid "Macedonian" msgstr "Macedonio" -#: ../pidgin/gtkdialogs.c:181 +#: ../pidgin/gtkdialogs.c:182 ../pidgin/gtkdialogs.c:245 msgid "Bokmål Norwegian" msgstr "Bokmål noruegués" -#: ../pidgin/gtkdialogs.c:182 +#: ../pidgin/gtkdialogs.c:183 msgid "Nepali" msgstr "Bengalí" -#: ../pidgin/gtkdialogs.c:183 +#: ../pidgin/gtkdialogs.c:184 msgid "Dutch, Flemish" msgstr "Holandés, Flamenco" -#: ../pidgin/gtkdialogs.c:184 -msgid "Norwegian" -msgstr "Noruegués" - #: ../pidgin/gtkdialogs.c:185 msgid "Norwegian Nynorsk" msgstr "Nynorsk noruegués" #: ../pidgin/gtkdialogs.c:186 ../pidgin/gtkdialogs.c:187 -#: ../pidgin/gtkdialogs.c:188 ../pidgin/gtkdialogs.c:244 +#: ../pidgin/gtkdialogs.c:188 ../pidgin/gtkdialogs.c:246 msgid "Polish" msgstr "Polaco" @@ -13193,18 +13334,18 @@ msgid "Romanian" msgstr "Romeno" -#: ../pidgin/gtkdialogs.c:193 ../pidgin/gtkdialogs.c:245 -#: ../pidgin/gtkdialogs.c:246 +#: ../pidgin/gtkdialogs.c:193 ../pidgin/gtkdialogs.c:247 +#: ../pidgin/gtkdialogs.c:248 msgid "Russian" msgstr "Ruso" #: ../pidgin/gtkdialogs.c:194 ../pidgin/gtkdialogs.c:195 -#: ../pidgin/gtkdialogs.c:247 ../pidgin/gtkdialogs.c:248 -#: ../pidgin/gtkdialogs.c:249 +#: ../pidgin/gtkdialogs.c:249 ../pidgin/gtkdialogs.c:250 +#: ../pidgin/gtkdialogs.c:251 msgid "Slovak" msgstr "Eslovaco" -#: ../pidgin/gtkdialogs.c:196 ../pidgin/gtkdialogs.c:250 +#: ../pidgin/gtkdialogs.c:196 ../pidgin/gtkdialogs.c:252 msgid "Slovenian" msgstr "Esloveno" @@ -13216,7 +13357,8 @@ msgid "Serbian" msgstr "Serbio" -#: ../pidgin/gtkdialogs.c:200 ../pidgin/gtkdialogs.c:251 +#: ../pidgin/gtkdialogs.c:200 ../pidgin/gtkdialogs.c:253 +#: ../pidgin/gtkdialogs.c:254 msgid "Swedish" msgstr "Sueco" @@ -13232,7 +13374,7 @@ msgid "Thai" msgstr "Thai" -#: ../pidgin/gtkdialogs.c:204 ../pidgin/gtkdialogs.c:252 +#: ../pidgin/gtkdialogs.c:204 ../pidgin/gtkdialogs.c:255 msgid "Turkish" msgstr "Turco" @@ -13244,7 +13386,7 @@ msgid "T.M.Thanh and the Gnome-Vi Team" msgstr "T.M.Thanh e o equipo Gnome-Vi" -#: ../pidgin/gtkdialogs.c:206 ../pidgin/gtkdialogs.c:253 +#: ../pidgin/gtkdialogs.c:206 ../pidgin/gtkdialogs.c:256 msgid "Simplified Chinese" msgstr "Chinés simplificado" @@ -13254,7 +13396,7 @@ msgstr "Chinés de Hong Kong" #: ../pidgin/gtkdialogs.c:210 ../pidgin/gtkdialogs.c:211 -#: ../pidgin/gtkdialogs.c:254 +#: ../pidgin/gtkdialogs.c:257 msgid "Traditional Chinese" msgstr "Chinés tradicional" @@ -13262,12 +13404,12 @@ msgid "Amharic" msgstr "Amhárico" -#: ../pidgin/gtkdialogs.c:339 +#: ../pidgin/gtkdialogs.c:342 #, c-format msgid "About %s" msgstr "Acerca de %s" -#: ../pidgin/gtkdialogs.c:377 +#: ../pidgin/gtkdialogs.c:380 #, c-format msgid "" "%s is a graphical modular messaging client based on libpurple which is " @@ -13288,47 +13430,47 @@ "contribuíntes. Vexa o ficheiro de 'COPYRIGHT' para a lista completa de " "contribuíntes. Nós non damos ningún tipo de garantía sobre este programa.<BR><BR>" -#: ../pidgin/gtkdialogs.c:392 +#: ../pidgin/gtkdialogs.c:395 msgid "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>" msgstr "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>" -#: ../pidgin/gtkdialogs.c:397 +#: ../pidgin/gtkdialogs.c:400 msgid "Current Developers" msgstr "Desenvolvedores actuais" -#: ../pidgin/gtkdialogs.c:412 +#: ../pidgin/gtkdialogs.c:415 msgid "Crazy Patch Writers" msgstr "Tolos escritores de parches" -#: ../pidgin/gtkdialogs.c:427 +#: ../pidgin/gtkdialogs.c:430 msgid "Retired Developers" msgstr "Desenvolvedores retirados" -#: ../pidgin/gtkdialogs.c:442 +#: ../pidgin/gtkdialogs.c:445 msgid "Retired Crazy Patch Writers" msgstr "Desenvolvedores de parches tolos retirados" -#: ../pidgin/gtkdialogs.c:457 +#: ../pidgin/gtkdialogs.c:460 msgid "Artists" msgstr "Artistas" -#: ../pidgin/gtkdialogs.c:472 +#: ../pidgin/gtkdialogs.c:475 msgid "Current Translators" msgstr "Tradutores actuais" -#: ../pidgin/gtkdialogs.c:492 +#: ../pidgin/gtkdialogs.c:495 msgid "Past Translators" msgstr "Tradutores anteriores" -#: ../pidgin/gtkdialogs.c:510 +#: ../pidgin/gtkdialogs.c:513 msgid "Debugging Information" msgstr "Información de depuración" -#: ../pidgin/gtkdialogs.c:879 +#: ../pidgin/gtkdialogs.c:882 msgid "Get User Info" msgstr "Obter información do usuario" -#: ../pidgin/gtkdialogs.c:881 +#: ../pidgin/gtkdialogs.c:884 msgid "" "Please enter the screen name or alias of the person whose info you would " "like to view." @@ -13336,11 +13478,11 @@ "Introduza o nome de usuario ou o alias da persoa da que quere ver " "información." -#: ../pidgin/gtkdialogs.c:971 +#: ../pidgin/gtkdialogs.c:974 msgid "View User Log" msgstr "Ver rexistro do usuario" -#: ../pidgin/gtkdialogs.c:973 +#: ../pidgin/gtkdialogs.c:976 msgid "" "Please enter the screen name or alias of the person whose log you would like " "to view." @@ -13348,32 +13490,32 @@ "Introduza o nome de usuario ou o alias da persoa da que quere ver a " "información de rexistro." -#: ../pidgin/gtkdialogs.c:993 +#: ../pidgin/gtkdialogs.c:996 msgid "Alias Contact" msgstr "Alias para o contacto" -#: ../pidgin/gtkdialogs.c:994 +#: ../pidgin/gtkdialogs.c:997 msgid "Enter an alias for this contact." msgstr "Introduza un alias para este contacto." -#: ../pidgin/gtkdialogs.c:1016 +#: ../pidgin/gtkdialogs.c:1019 #, c-format msgid "Enter an alias for %s." msgstr "Introduza un alias para %s." -#: ../pidgin/gtkdialogs.c:1018 +#: ../pidgin/gtkdialogs.c:1021 msgid "Alias Buddy" msgstr "Alias do contacto" -#: ../pidgin/gtkdialogs.c:1039 +#: ../pidgin/gtkdialogs.c:1042 msgid "Alias Chat" msgstr "Alias na conversa" -#: ../pidgin/gtkdialogs.c:1040 +#: ../pidgin/gtkdialogs.c:1043 msgid "Enter an alias for this chat." msgstr "Introduza un alias para esta conversa." -#: ../pidgin/gtkdialogs.c:1079 +#: ../pidgin/gtkdialogs.c:1082 #, c-format msgid "" "You are about to remove the contact containing %s and %d other buddy from " @@ -13388,30 +13530,30 @@ "Está a punto de eliminar o contacto que contén a %s e %d contacto máis da lista de " "contactos. Quere continuar?" -#: ../pidgin/gtkdialogs.c:1087 +#: ../pidgin/gtkdialogs.c:1090 msgid "Remove Contact" msgstr "Eliminar o contacto" -#: ../pidgin/gtkdialogs.c:1090 +#: ../pidgin/gtkdialogs.c:1093 msgid "_Remove Contact" msgstr "_Eliminar o contacto" -#: ../pidgin/gtkdialogs.c:1121 +#: ../pidgin/gtkdialogs.c:1124 #, c-format msgid "" "You are about to merge the group called %s into the group called %s. Do you " "want to continue?" msgstr "Está a piques de combinar o grupo chamado %s dentro do grupo %s.Desexa continuar?" -#: ../pidgin/gtkdialogs.c:1128 +#: ../pidgin/gtkdialogs.c:1131 msgid "Merge Groups" msgstr "Combinar grupos" -#: ../pidgin/gtkdialogs.c:1131 +#: ../pidgin/gtkdialogs.c:1134 msgid "_Merge Groups" msgstr "_Combinar grupos" -#: ../pidgin/gtkdialogs.c:1181 +#: ../pidgin/gtkdialogs.c:1184 #, c-format msgid "" "You are about to remove the group %s and all its members from your buddy " @@ -13420,28 +13562,28 @@ "Está a piques de borrar o grupo %s e todos os seus membros da lista de " "contactos. Quere continuar?" -#: ../pidgin/gtkdialogs.c:1184 +#: ../pidgin/gtkdialogs.c:1187 msgid "Remove Group" msgstr "Eliminar o grupo" -#: ../pidgin/gtkdialogs.c:1187 +#: ../pidgin/gtkdialogs.c:1190 msgid "_Remove Group" msgstr "_Eliminar o grupo" -#: ../pidgin/gtkdialogs.c:1220 +#: ../pidgin/gtkdialogs.c:1223 #, c-format msgid "You are about to remove %s from your buddy list. Do you want to continue?" msgstr "Está a punto de eliminar a %s da lista de contactos. Quere continuar?" -#: ../pidgin/gtkdialogs.c:1223 +#: ../pidgin/gtkdialogs.c:1226 msgid "Remove Buddy" msgstr "Eliminar o contacto" -#: ../pidgin/gtkdialogs.c:1226 +#: ../pidgin/gtkdialogs.c:1229 msgid "_Remove Buddy" msgstr "_Eliminar o contacto" -#: ../pidgin/gtkdialogs.c:1247 +#: ../pidgin/gtkdialogs.c:1250 #, c-format msgid "" "You are about to remove the chat %s from your buddy list. Do you want to " @@ -13450,11 +13592,11 @@ "Está a punto de eliminar a conversa %s da lista de contactos. Quere " "continuar?" -#: ../pidgin/gtkdialogs.c:1250 +#: ../pidgin/gtkdialogs.c:1253 msgid "Remove Chat" msgstr "Eliminar a conversa" -#: ../pidgin/gtkdialogs.c:1253 +#: ../pidgin/gtkdialogs.c:1256 msgid "_Remove Chat" msgstr "_Eliminar a conversa" @@ -13572,43 +13714,43 @@ msgid "_Resume" msgstr "_Continuar" -#: ../pidgin/gtkimhtml.c:814 +#: ../pidgin/gtkimhtml.c:815 msgid "Paste as Plain _Text" msgstr "Pegar como _texto plano" -#: ../pidgin/gtkimhtml.c:831 +#: ../pidgin/gtkimhtml.c:832 ../pidgin/gtkimhtmltoolbar.c:1138 msgid "_Reset formatting" msgstr "_Reiniciar os formatos" -#: ../pidgin/gtkimhtml.c:1371 +#: ../pidgin/gtkimhtml.c:1372 msgid "Hyperlink color" msgstr "Cor da ligazón" -#: ../pidgin/gtkimhtml.c:1372 +#: ../pidgin/gtkimhtml.c:1373 msgid "Color to draw hyperlinks." msgstr "Cor para debuxar ligazóns." -#: ../pidgin/gtkimhtml.c:1375 +#: ../pidgin/gtkimhtml.c:1376 msgid "Hyperlink prelight color" msgstr "Cor de ligazón pre-iluminada" -#: ../pidgin/gtkimhtml.c:1376 +#: ../pidgin/gtkimhtml.c:1377 msgid "Color to draw hyperlinks when mouse is over them." msgstr "Cor para debuxar ligazóns cando o rato estea enriba." -#: ../pidgin/gtkimhtml.c:1596 +#: ../pidgin/gtkimhtml.c:1597 msgid "_Copy E-Mail Address" msgstr "_Copiar o enderezo de correo" -#: ../pidgin/gtkimhtml.c:1608 +#: ../pidgin/gtkimhtml.c:1609 msgid "_Open Link in Browser" msgstr "_Abrir a ligazón no navegador" -#: ../pidgin/gtkimhtml.c:1618 +#: ../pidgin/gtkimhtml.c:1619 msgid "_Copy Link Location" msgstr "_Copiar o destino da ligazón" -#: ../pidgin/gtkimhtml.c:3363 +#: ../pidgin/gtkimhtml.c:3365 msgid "" "<span size='larger' weight='bold'>Unrecognized file type</span>\n" "\n" @@ -13618,7 +13760,7 @@ "\n" "PNG é o predeterminado." -#: ../pidgin/gtkimhtml.c:3366 +#: ../pidgin/gtkimhtml.c:3368 msgid "" "Unrecognized file type\n" "\n" @@ -13628,7 +13770,7 @@ "\n" "PNG é o predeterminado." -#: ../pidgin/gtkimhtml.c:3395 +#: ../pidgin/gtkimhtml.c:3397 #, c-format msgid "" "<span size='larger' weight='bold'>Error saving image</span>\n" @@ -13639,7 +13781,7 @@ "\n" "%s" -#: ../pidgin/gtkimhtml.c:3398 +#: ../pidgin/gtkimhtml.c:3400 #, c-format msgid "" "Error saving image\n" @@ -13650,11 +13792,11 @@ "\n" "%s" -#: ../pidgin/gtkimhtml.c:3476 ../pidgin/gtkimhtml.c:3488 +#: ../pidgin/gtkimhtml.c:3478 ../pidgin/gtkimhtml.c:3490 msgid "Save Image" msgstr "Gardar a imaxe" -#: ../pidgin/gtkimhtml.c:3516 +#: ../pidgin/gtkimhtml.c:3518 msgid "_Save Image..." msgstr "_Gardar a imaxe..." @@ -13694,7 +13836,7 @@ msgid "Insert Link" msgstr "Inserir unha ligazón" -#: ../pidgin/gtkimhtmltoolbar.c:424 ../pidgin/gtkimhtmltoolbar.c:1157 +#: ../pidgin/gtkimhtmltoolbar.c:424 ../pidgin/gtkimhtmltoolbar.c:1207 msgid "_Insert" msgstr "_Inserir" @@ -13716,59 +13858,58 @@ msgid "Smile!" msgstr "Emoticona!" -#: ../pidgin/gtkimhtmltoolbar.c:1066 -msgid "_Bold" -msgstr "_Negra" - -#: ../pidgin/gtkimhtmltoolbar.c:1067 -msgid "_Italic" -msgstr "_Cursiva" - -#: ../pidgin/gtkimhtmltoolbar.c:1068 -msgid "_Underline" -msgstr "_Subraiado" - -#: ../pidgin/gtkimhtmltoolbar.c:1069 -msgid "_Larger" -msgstr "_Grande" - -#: ../pidgin/gtkimhtmltoolbar.c:1071 +#: ../pidgin/gtkimhtmltoolbar.c:820 ../pidgin/gtkimhtmltoolbar.c:1164 +msgid "_Font" +msgstr "_Tipo de letra" + +#: ../pidgin/gtkimhtmltoolbar.c:1124 +msgid "<b>_Bold</b>" +msgstr "<b>_Negra</b>" + +#: ../pidgin/gtkimhtmltoolbar.c:1125 +msgid "<i>_Italic</i>" +msgstr "<i>_Cursiva</i> " + +#: ../pidgin/gtkimhtmltoolbar.c:1126 +msgid "<u>_Underline</u>" +msgstr "<u>_Subliñado</u>" + +#: ../pidgin/gtkimhtmltoolbar.c:1127 +msgid "<span size='larger'>_Larger</span>" +msgstr "<span size='larger'>_Máis grande</span>" + +#: ../pidgin/gtkimhtmltoolbar.c:1129 msgid "_Normal" msgstr "_Normal" -#: ../pidgin/gtkimhtmltoolbar.c:1073 -msgid "_Smaller" -msgstr "_Pequena" - -#: ../pidgin/gtkimhtmltoolbar.c:1074 +#: ../pidgin/gtkimhtmltoolbar.c:1131 +msgid "<span size='smaller'>_Smaller</span>" +msgstr "<span size='smaller'>Máis _pequena</span>" + +#. If we want to show the formatting for the following items, we would +#. * need to update them when formatting changes. The above items don't need +#. * no updating nor nothin' +#: ../pidgin/gtkimhtmltoolbar.c:1135 msgid "_Font face" msgstr "_Estilo do tipo de letra" -#: ../pidgin/gtkimhtmltoolbar.c:1075 -msgid "_Foreground color" -msgstr "_Cor de primeiro plano" - -#: ../pidgin/gtkimhtmltoolbar.c:1076 -msgid "_Background color" -msgstr "_Cor de fondo" - -#: ../pidgin/gtkimhtmltoolbar.c:1102 -msgid "_Font" -msgstr "_Tipo de letra" +#: ../pidgin/gtkimhtmltoolbar.c:1136 +msgid "Foreground _color" +msgstr "Cor de primeiro plano" #: ../pidgin/gtkimhtmltoolbar.c:1137 -msgid "_Reset font" -msgstr "_Reiniciar tipo de letra" - -#: ../pidgin/gtkimhtmltoolbar.c:1164 +msgid "Bac_kground color" +msgstr "Cor de _fondo" + +#: ../pidgin/gtkimhtmltoolbar.c:1215 msgid "_Smiley" msgstr "_Emoticona" -#: ../pidgin/gtkimhtmltoolbar.c:1170 +#: ../pidgin/gtkimhtmltoolbar.c:1221 msgid "_Image" msgstr "_Imaxe" -#: ../pidgin/gtkimhtmltoolbar.c:1176 +#: ../pidgin/gtkimhtmltoolbar.c:1227 msgid "_Link" msgstr "_Ligazón" @@ -13933,48 +14074,48 @@ #. Translators may want to transliterate the name. #. It is not to be translated. -#: ../pidgin/gtkmain.c:698 ../pidgin/pidgin.h:50 +#: ../pidgin/gtkmain.c:699 ../pidgin/pidgin.h:50 msgid "Pidgin" msgstr "Pidgin" -#: ../pidgin/gtknotify.c:343 +#: ../pidgin/gtknotify.c:348 msgid "Open All Messages" msgstr "Abrir todas as mensaxes" -#: ../pidgin/gtknotify.c:395 +#: ../pidgin/gtknotify.c:401 msgid "<span weight=\"bold\" size=\"larger\">You have mail!</span>" msgstr "<span weight=\"bold\" size=\"larger\">Ten correo!</span>" -#: ../pidgin/gtknotify.c:515 +#: ../pidgin/gtknotify.c:521 #, c-format msgid "%s has %d new message." msgid_plural "%s has %d new messages." msgstr[0] "%s ten %d mensaxe nova." msgstr[1] "%s ten %d mensaxe nova." -#: ../pidgin/gtknotify.c:526 +#: ../pidgin/gtknotify.c:532 #, c-format msgid "<b>You have %d new e-mail.</b>" msgid_plural "<b>You have %d new e-mails.</b>" msgstr[0] "<b>Ten %d correo electrónico novo.</b>" msgstr[1] "<b>Ten %d correo electrónico novo.</b>" -#: ../pidgin/gtknotify.c:964 +#: ../pidgin/gtknotify.c:972 #, c-format msgid "The browser command \"%s\" is invalid." msgstr "O comando do navegador \"%s\" non é válido." -#: ../pidgin/gtknotify.c:966 ../pidgin/gtknotify.c:978 -#: ../pidgin/gtknotify.c:991 ../pidgin/gtknotify.c:1119 +#: ../pidgin/gtknotify.c:974 ../pidgin/gtknotify.c:986 +#: ../pidgin/gtknotify.c:999 ../pidgin/gtknotify.c:1127 msgid "Unable to open URL" msgstr "Non se puido abrir o URL" -#: ../pidgin/gtknotify.c:976 ../pidgin/gtknotify.c:989 +#: ../pidgin/gtknotify.c:984 ../pidgin/gtknotify.c:997 #, c-format msgid "Error launching \"%s\": %s" msgstr "Erro ao lanzar \"%s\": %s" -#: ../pidgin/gtknotify.c:1120 +#: ../pidgin/gtknotify.c:1128 msgid "The 'Manual' browser command has been chosen, but no command has been set." msgstr "" "Elixiuse o navegador 'Manual', mais non se definiu ningún " @@ -14120,7 +14261,7 @@ msgstr "Sobre quen avisar" #: ../pidgin/gtkprefs.c:385 -#: ../pidgin/pixmaps/emotes/default/22/default.theme.in.h:1 +#: ../pidgin/pixmaps/emotes/default/24/default.theme.in.h:1 msgid "Default" msgstr "Por defecto" @@ -14152,13 +14293,6 @@ msgid "_Show system tray icon:" msgstr "Mo_strar icona da área de notificación do sistema:" -#: ../pidgin/gtkprefs.c:896 ../pidgin/gtkprefs.c:908 ../pidgin/gtkprefs.c:1756 -#: ../pidgin/plugins/timestamp_format.c:42 -#: ../pidgin/plugins/timestamp_format.c:51 -#: ../pidgin/plugins/win32/winprefs/winprefs.c:338 -msgid "Always" -msgstr "Sempre" - #: ../pidgin/gtkprefs.c:898 msgid "On unread messages" msgstr "Se hai mensaxes sen ler" @@ -14171,7 +14305,7 @@ msgid "_Hide new IM conversations:" msgstr "_Ocultar as novas conversas de MI:" -#: ../pidgin/gtkprefs.c:907 ../pidgin/gtkprefs.c:1937 +#: ../pidgin/gtkprefs.c:907 ../pidgin/gtkprefs.c:1939 msgid "When away" msgstr "Cando estea ausente" @@ -14272,7 +14406,7 @@ msgid "Default Formatting" msgstr "Formato predeterminado" -#: ../pidgin/gtkprefs.c:1057 +#: ../pidgin/gtkprefs.c:1059 msgid "" "This is how your outgoing message text will appear when you use protocols " "that support formatting." @@ -14280,119 +14414,119 @@ "Isto é unha mostra de como aparecerá a súa mensaxe saínte cando use protocolos " "que soportan formatado." -#: ../pidgin/gtkprefs.c:1123 +#: ../pidgin/gtkprefs.c:1125 msgid "ST_UN server:" msgstr "Servidor ST_UN:" -#: ../pidgin/gtkprefs.c:1135 +#: ../pidgin/gtkprefs.c:1137 msgid "<span style=\"italic\">Example: stunserver.org</span>" msgstr "<span style=\"italic\">Exemplo: stunserver.org</span>" -#: ../pidgin/gtkprefs.c:1139 +#: ../pidgin/gtkprefs.c:1141 msgid "_Autodetect IP address" msgstr "_Autodetectar enderezo IP" -#: ../pidgin/gtkprefs.c:1148 +#: ../pidgin/gtkprefs.c:1150 msgid "Public _IP:" msgstr "_IP pública:" -#: ../pidgin/gtkprefs.c:1177 +#: ../pidgin/gtkprefs.c:1179 msgid "Ports" msgstr "Portos" -#: ../pidgin/gtkprefs.c:1180 +#: ../pidgin/gtkprefs.c:1182 msgid "_Manually specify range of ports to listen on" msgstr "Especificar _manualmente o rango de portos en que se escoitará" -#: ../pidgin/gtkprefs.c:1183 +#: ../pidgin/gtkprefs.c:1185 msgid "_Start port:" msgstr "Porto _inicial:" -#: ../pidgin/gtkprefs.c:1190 +#: ../pidgin/gtkprefs.c:1192 msgid "_End port:" msgstr "Porto _final:" -#: ../pidgin/gtkprefs.c:1198 +#: ../pidgin/gtkprefs.c:1200 msgid "Proxy Server" msgstr "Servidor proxy" -#: ../pidgin/gtkprefs.c:1202 +#: ../pidgin/gtkprefs.c:1204 msgid "No proxy" msgstr "Sen proxy" -#: ../pidgin/gtkprefs.c:1258 +#: ../pidgin/gtkprefs.c:1260 msgid "_User:" msgstr "_Usuario:" -#: ../pidgin/gtkprefs.c:1323 +#: ../pidgin/gtkprefs.c:1325 msgid "Seamonkey" msgstr "Seamonkey" -#: ../pidgin/gtkprefs.c:1324 -msgid "Opera" -msgstr "Opera" - -#: ../pidgin/gtkprefs.c:1325 -msgid "Netscape" -msgstr "Netscape" - #: ../pidgin/gtkprefs.c:1326 -msgid "Mozilla" -msgstr "Mozilla" +msgid "Opera" +msgstr "Opera" #: ../pidgin/gtkprefs.c:1327 -msgid "Konqueror" -msgstr "Konqueror" +msgid "Netscape" +msgstr "Netscape" #: ../pidgin/gtkprefs.c:1328 -msgid "GNOME Default" -msgstr "Predeterminado de Gnome" +msgid "Mozilla" +msgstr "Mozilla" #: ../pidgin/gtkprefs.c:1329 +msgid "Konqueror" +msgstr "Konqueror" + +#: ../pidgin/gtkprefs.c:1330 +msgid "GNOME Default" +msgstr "Predeterminado de Gnome" + +#: ../pidgin/gtkprefs.c:1331 msgid "Galeon" msgstr "Galeon" -#: ../pidgin/gtkprefs.c:1330 +#: ../pidgin/gtkprefs.c:1332 msgid "Firefox" msgstr "Firefox" -#: ../pidgin/gtkprefs.c:1331 +#: ../pidgin/gtkprefs.c:1333 msgid "Firebird" msgstr "Firebird" -#: ../pidgin/gtkprefs.c:1332 +#: ../pidgin/gtkprefs.c:1334 msgid "Epiphany" msgstr "Epiphany" -#: ../pidgin/gtkprefs.c:1341 +#: ../pidgin/gtkprefs.c:1343 msgid "Manual" msgstr "Manual" -#: ../pidgin/gtkprefs.c:1394 +#: ../pidgin/gtkprefs.c:1396 msgid "Browser Selection" msgstr "Selección de navegador" -#: ../pidgin/gtkprefs.c:1398 +#: ../pidgin/gtkprefs.c:1400 msgid "_Browser:" msgstr "_Navegador:" -#: ../pidgin/gtkprefs.c:1406 +#: ../pidgin/gtkprefs.c:1408 msgid "_Open link in:" msgstr "_Abrir ligazón en:" -#: ../pidgin/gtkprefs.c:1408 +#: ../pidgin/gtkprefs.c:1410 msgid "Browser default" msgstr "Navegador predeterminado" -#: ../pidgin/gtkprefs.c:1409 +#: ../pidgin/gtkprefs.c:1411 msgid "Existing window" msgstr "Ventá existente" -#: ../pidgin/gtkprefs.c:1411 +#: ../pidgin/gtkprefs.c:1413 msgid "New tab" msgstr "Novo separador" -#: ../pidgin/gtkprefs.c:1425 +#: ../pidgin/gtkprefs.c:1427 #, c-format msgid "" "_Manual:\n" @@ -14401,80 +14535,63 @@ "_Manual:\n" "(%s para URL)" -#: ../pidgin/gtkprefs.c:1465 +#: ../pidgin/gtkprefs.c:1467 msgid "Log _format:" msgstr "_Formato de rexistro:" -#: ../pidgin/gtkprefs.c:1470 +#: ../pidgin/gtkprefs.c:1472 msgid "Log all _instant messages" msgstr "Rexistrar todas as mensaxes _instantáneas" -#: ../pidgin/gtkprefs.c:1472 +#: ../pidgin/gtkprefs.c:1474 msgid "Log all c_hats" msgstr "Rexistrar todas as _conversas" -#: ../pidgin/gtkprefs.c:1474 +#: ../pidgin/gtkprefs.c:1476 msgid "Log all _status changes to system log" msgstr "Rexistrar todas os cambios de e_stado no rexistro do sistema" -#: ../pidgin/gtkprefs.c:1582 ../pidgin/gtkprefs.c:1671 -#: ../pidgin/gtkprefs.c:1865 -msgid "(default)" -msgstr "(por defecto)" - -#: ../pidgin/gtkprefs.c:1620 +#: ../pidgin/gtkprefs.c:1622 msgid "Sound Selection" msgstr "Selección de son" -#: ../pidgin/gtkprefs.c:1630 +#: ../pidgin/gtkprefs.c:1632 msgid "Quietest" msgstr "O máis silencioso" -#: ../pidgin/gtkprefs.c:1632 +#: ../pidgin/gtkprefs.c:1634 msgid "Quieter" msgstr "Máis silencioso" -#: ../pidgin/gtkprefs.c:1634 +#: ../pidgin/gtkprefs.c:1636 msgid "Quiet" msgstr "Silencioso" -#: ../pidgin/gtkprefs.c:1638 +#: ../pidgin/gtkprefs.c:1640 msgid "Loud" msgstr "Ruidoso" -#: ../pidgin/gtkprefs.c:1640 -msgid "Louder" -msgstr "Máis ruidoso" - #: ../pidgin/gtkprefs.c:1642 +msgid "Louder" +msgstr "Máis ruidoso" + +#: ../pidgin/gtkprefs.c:1644 msgid "Loudest" msgstr "O máis ruidoso" -#: ../pidgin/gtkprefs.c:1705 -msgid "Sound Method" -msgstr "Método para reproducir sons" - -#: ../pidgin/gtkprefs.c:1706 +#: ../pidgin/gtkprefs.c:1708 msgid "_Method:" msgstr "_Método:" -#: ../pidgin/gtkprefs.c:1708 +#: ../pidgin/gtkprefs.c:1710 msgid "Console beep" msgstr "Bip da consola" -#: ../pidgin/gtkprefs.c:1710 -msgid "Automatic" -msgstr "Automático" - -#: ../pidgin/gtkprefs.c:1714 -msgid "Command" -msgstr "Comando" - -#: ../pidgin/gtkprefs.c:1715 +#: ../pidgin/gtkprefs.c:1717 msgid "No sounds" msgstr "Sen sons" -#: ../pidgin/gtkprefs.c:1723 +#: ../pidgin/gtkprefs.c:1725 #, c-format msgid "" "Sound c_ommand:\n" @@ -14483,117 +14600,81 @@ "C_omando para son:\n" "(%s para nome de ficheiro)" -#: ../pidgin/gtkprefs.c:1749 -msgid "Sound Options" -msgstr "Opcións de son" - -#: ../pidgin/gtkprefs.c:1750 +#: ../pidgin/gtkprefs.c:1752 msgid "Sounds when conversation has _focus" msgstr "Sons cando a conversa ten o _foco" -#: ../pidgin/gtkprefs.c:1752 -msgid "Enable sounds:" -msgstr "Activar os sons:" - #: ../pidgin/gtkprefs.c:1754 -msgid "Only when available" -msgstr "Só cando estea dispoñible" - -#: ../pidgin/gtkprefs.c:1755 -msgid "Only when not available" -msgstr "Só cando estea non dispoñible" - -#: ../pidgin/gtkprefs.c:1763 +msgid "Enable sounds:" +msgstr "Activar os sons:" + +#: ../pidgin/gtkprefs.c:1765 msgid "Volume:" msgstr "Volume:" -#: ../pidgin/gtkprefs.c:1791 -msgid "Sound Events" -msgstr "Eventos de son" - -#: ../pidgin/gtkprefs.c:1843 +#: ../pidgin/gtkprefs.c:1845 msgid "Play" msgstr "Reproducir" -#: ../pidgin/gtkprefs.c:1850 -msgid "Event" -msgstr "Evento" - -#: ../pidgin/gtkprefs.c:1869 -msgid "Test" -msgstr "Probar" - -#: ../pidgin/gtkprefs.c:1873 -msgid "Reset" -msgstr "Reiniciar" - -#: ../pidgin/gtkprefs.c:1877 -msgid "Choose..." -msgstr "Escoller..." - -#: ../pidgin/gtkprefs.c:1920 +#: ../pidgin/gtkprefs.c:1922 msgid "_Report idle time:" msgstr "Mostrar o _tempo de inactividade:" -#: ../pidgin/gtkprefs.c:1925 +#: ../pidgin/gtkprefs.c:1927 msgid "Based on keyboard or mouse use" msgstr "Baseado no uso do teclado ou do rato" -#: ../pidgin/gtkprefs.c:1934 +#: ../pidgin/gtkprefs.c:1936 msgid "_Auto-reply:" msgstr "Resposta _automática:" -#: ../pidgin/gtkprefs.c:1938 +#: ../pidgin/gtkprefs.c:1940 msgid "When both away and idle" msgstr "Cando estea ausente e inactivo" #. Auto-away stuff -#: ../pidgin/gtkprefs.c:1944 +#: ../pidgin/gtkprefs.c:1946 msgid "Auto-away" msgstr "Auto-ausencia" -#: ../pidgin/gtkprefs.c:1946 +#: ../pidgin/gtkprefs.c:1948 msgid "Change status when _idle" msgstr "Cambiar o estado cando estea _inactivo" -#: ../pidgin/gtkprefs.c:1950 +#: ../pidgin/gtkprefs.c:1952 msgid "_Minutes before becoming idle:" msgstr "_Minutos antes de cambiar a inactivo:" -#: ../pidgin/gtkprefs.c:1958 +#: ../pidgin/gtkprefs.c:1960 msgid "Change _status to:" msgstr "Cambiar o e_stado a:" #. Signon status stuff -#: ../pidgin/gtkprefs.c:1979 +#: ../pidgin/gtkprefs.c:1981 msgid "Status at Startup" msgstr "Estado para o inicio" -#: ../pidgin/gtkprefs.c:1981 +#: ../pidgin/gtkprefs.c:1983 msgid "Use status from last _exit at startup" msgstr "Empregar o estado da última _saída ao comezar" -#: ../pidgin/gtkprefs.c:1987 +#: ../pidgin/gtkprefs.c:1989 msgid "Status to a_pply at startup:" msgstr "Estado para _aplicar ao comezar:" -#: ../pidgin/gtkprefs.c:2025 +#: ../pidgin/gtkprefs.c:2027 msgid "Interface" msgstr "Interface" -#: ../pidgin/gtkprefs.c:2027 +#: ../pidgin/gtkprefs.c:2029 msgid "Smiley Themes" msgstr "Temas das emoticonas" -#: ../pidgin/gtkprefs.c:2028 -msgid "Sounds" -msgstr "Sons" - -#: ../pidgin/gtkprefs.c:2034 +#: ../pidgin/gtkprefs.c:2036 msgid "Browser" msgstr "Navegador" -#: ../pidgin/gtkprefs.c:2038 +#: ../pidgin/gtkprefs.c:2040 msgid "Status / Idle" msgstr "Estado / Inactivo" @@ -14682,23 +14763,23 @@ msgid "Apply" msgstr "Aplicar" -#: ../pidgin/gtkrequest.c:1491 +#: ../pidgin/gtkrequest.c:1504 msgid "That file already exists" msgstr "Ese ficheiro xa existe" -#: ../pidgin/gtkrequest.c:1492 +#: ../pidgin/gtkrequest.c:1505 msgid "Would you like to overwrite it?" msgstr "Quere sobrescribilo?" -#: ../pidgin/gtkrequest.c:1495 +#: ../pidgin/gtkrequest.c:1508 msgid "Overwrite" msgstr "Sobrescribir" -#: ../pidgin/gtkrequest.c:1496 +#: ../pidgin/gtkrequest.c:1509 msgid "Choose New Name" msgstr "Escoller un novo nome" -#: ../pidgin/gtkrequest.c:1634 ../pidgin/gtkrequest.c:1648 +#: ../pidgin/gtkrequest.c:1647 ../pidgin/gtkrequest.c:1661 msgid "Select Folder..." msgstr "Seleccionar cartafol..." @@ -14757,54 +14838,6 @@ msgid "Status for %s" msgstr "Estado para %s" -#: ../pidgin/gtksound.c:63 -msgid "Buddy logs in" -msgstr "Conéctase un contacto" - -#: ../pidgin/gtksound.c:64 -msgid "Buddy logs out" -msgstr "Desconéctase un contacto" - -#: ../pidgin/gtksound.c:65 -msgid "Message received" -msgstr "Mensaxe recibida" - -#: ../pidgin/gtksound.c:66 -msgid "Message received begins conversation" -msgstr "Mensaxe recibida que comeza unha conversa" - -#: ../pidgin/gtksound.c:67 -msgid "Message sent" -msgstr "Mensaxe enviada" - -#: ../pidgin/gtksound.c:68 -msgid "Person enters chat" -msgstr "Alguén entra na conversa" - -#: ../pidgin/gtksound.c:69 -msgid "Person leaves chat" -msgstr "Alguén deixa a conversa" - -#: ../pidgin/gtksound.c:70 -msgid "You talk in chat" -msgstr "Participa na conversa" - -#: ../pidgin/gtksound.c:71 -msgid "Others talk in chat" -msgstr "Conversan outros" - -#: ../pidgin/gtksound.c:74 -msgid "Someone says your screen name in chat" -msgstr "Alguén menciona o seu nome na conversa" - -#: ../pidgin/gtksound.c:310 -msgid "GStreamer Failure" -msgstr "Fallo de GStreamer" - -#: ../pidgin/gtksound.c:311 -msgid "GStreamer failed to initialize." -msgstr "O GStreamer errou ao iniciar." - #: ../pidgin/gtkstatusbox.c:663 msgid "Waiting for network connection" msgstr "A agardar pola conexión á rede" @@ -14964,7 +14997,7 @@ msgid "_Open Mail" msgstr "_Abrir o correo" -#: ../pidgin/pixmaps/emotes/default/22/default.theme.in.h:2 +#: ../pidgin/pixmaps/emotes/default/24/default.theme.in.h:2 msgid "Pidgin smileys" msgstr "Emitocanas de Pidgin" @@ -15388,6 +15421,15 @@ msgid "E-mail:" msgstr "Correo electrónico:" +#: ../pidgin/plugins/gtkbuddynote.c:34 +#, c-format +msgid "" +"\n" +"<b>Buddy Note</b>: %s" +msgstr "" +"\n" +"<b>Nota do contacto</b>: %s" + #. *< type #. *< ui_requirement #. *< flags @@ -15989,43 +16031,43 @@ "tempo para as mensaxes de conversas e as mensaxes de rexistro." #: ../pidgin/plugins/win32/transparency/win2ktrans.c:174 -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:589 -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:636 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:593 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:640 msgid "Opacity:" msgstr "Opacidade:" #. IM Convo trans options -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:553 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:557 msgid "IM Conversation Windows" msgstr "Ventás de conversa de MI" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:554 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:558 msgid "_IM window transparency" msgstr "Transparencia das ventás de M_I" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:568 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:572 msgid "_Show slider bar in IM window" msgstr "M_ostrar barra de desprazamento na ventá MI" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:575 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:579 msgid "Remove IM window transparency on focus" msgstr "Eliminar a transparencia das ventás de MI ao ter o foco" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:578 -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:626 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:582 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:630 msgid "Always on top" msgstr "Sempre enriba" #. Buddy List trans options -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:610 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:614 msgid "Buddy List Window" msgstr "Ventá da lista de contactos" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:611 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:615 msgid "_Buddy List window transparency" msgstr "Transparencia da ventá de lista de _contactos" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:624 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:628 msgid "Remove Buddy List window transparency on focus" msgstr "Eliminar transparencia da ventá da lista de contactos ao ter o foco" @@ -16035,19 +16077,19 @@ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:684 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:688 msgid "Transparency" msgstr "Transparencia" #. *< name #. *< version #. * summary -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:687 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:691 msgid "Variable Transparency for the buddy list and conversations." msgstr "Transparencia variable para a lista de contactos e as conversas." #. * description -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:689 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:693 msgid "" "This plugin enables variable alpha transparency on conversation windows and " "the buddy list.\n" @@ -16059,47 +16101,47 @@ "\n" "* Nota: este complemento require Win2000 ou outro máis novo." -#: ../pidgin/plugins/win32/winprefs/winprefs.c:307 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:303 msgid "GTK+ Runtime Version" msgstr "GTK+ Runtime Version" #. Autostart -#: ../pidgin/plugins/win32/winprefs/winprefs.c:315 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:311 msgid "Startup" msgstr "Inicio" -#: ../pidgin/plugins/win32/winprefs/winprefs.c:316 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:312 #, c-format msgid "_Start %s on Windows startup" msgstr "_Iniciar %s ao comezo de Windows" -#: ../pidgin/plugins/win32/winprefs/winprefs.c:331 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:327 msgid "_Dockable Buddy List" msgstr "Lista de contactos a_ncorable" #. Blist On Top -#: ../pidgin/plugins/win32/winprefs/winprefs.c:335 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:331 msgid "_Keep Buddy List window on top:" msgstr "_Manter a ventá da lista de contactos por enriba:" #. XXX: Did this ever work? -#: ../pidgin/plugins/win32/winprefs/winprefs.c:340 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:336 msgid "Only when docked" msgstr "Só cando está ancorado" -#: ../pidgin/plugins/win32/winprefs/winprefs.c:345 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:341 msgid "_Flash window when chat messages are received" msgstr "_Ventá escintilante cando se reciben mensaxes nas conversas" -#: ../pidgin/plugins/win32/winprefs/winprefs.c:375 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:371 msgid "Windows Pidgin Options" msgstr "Opcións de Pidgin en Windows" -#: ../pidgin/plugins/win32/winprefs/winprefs.c:377 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:373 msgid "Options specific to Pidgin for Windows." msgstr "Opcións específicas de Pidgin en Windows." -#: ../pidgin/plugins/win32/winprefs/winprefs.c:378 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:374 msgid "Provides options specific to Pidgin for Windows , such as buddy list docking." msgstr "Prové opcións específicas para Pidgin en Windows , como o ancoraxe da ventá de contactos."
--- a/po/pt_BR.po Sat Aug 25 20:32:15 2007 +0000 +++ b/po/pt_BR.po Tue Aug 28 01:14:08 2007 +0000 @@ -14207,7 +14207,7 @@ "Favor especificar o que você estava fazendo na hora em que o erro ocorreu\n" "e enviar o backtrace do arquivo de core. Se você não sabe\n" "como obter o backtrace, favor ler as instruções em\n" -"%swiki/GetABackTrace\n" +"%swiki/GetABacktrace\n" "\n" "Se você precisa de assistência adicional, mande uma mensagem instantânea\n" "para o SeanEgn ou o LSchiere (via AIM e em inglês). Informações de contato\n"
--- a/po/sk.po Sat Aug 25 20:32:15 2007 +0000 +++ b/po/sk.po Tue Aug 28 01:14:08 2007 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: pidgin-1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-07-17 03:22-0400\n" +"POT-Creation-Date: 2007-08-19 03:21-0400\n" "PO-Revision-Date: 2007-07-18 19:59+0100\n" "Last-Translator: loptosko <loptosko@gmail.com>\n" "Language-Team: Slovak <kde-sk@linux.sk>\n" @@ -19,17 +19,17 @@ #. Translators may want to transliterate the name. #. It is not to be translated. -#: ../finch/finch.c:70 ../finch/finch.c:298 ../finch/finch.c:327 -#: ../finch/finch.c:404 +#: ../finch/finch.c:64 ../finch/finch.c:300 ../finch/finch.c:329 +#: ../finch/finch.c:417 msgid "Finch" msgstr "Finch" -#: ../finch/finch.c:204 +#: ../finch/finch.c:206 #, c-format msgid "%s. Try `%s -h' for more information.\n" msgstr "%s. Príkaz `%s -h' zobrazí viac informácií.\n" -#: ../finch/finch.c:206 +#: ../finch/finch.c:208 #, c-format msgid "" "%s\n" @@ -50,7 +50,7 @@ " -n, --nologin neprihlasovať automaticky\n" " -v, --version zobrazí verziu programu a skončí\n" -#: ../finch/finch.c:325 ../pidgin/gtkmain.c:708 +#: ../finch/finch.c:327 ../pidgin/gtkmain.c:711 #, c-format msgid "" "%s encountered errors migrating your settings from %s to %s. Please " @@ -58,17 +58,19 @@ "http://developer.pidgin.im" msgstr "" "V programe %s sa vyskytli chyby pri prenose nastavení z %s do %s. Prosím, " -"skúste dokončiť prenos nastavení sami. Prosím, ohláste túto chybu na adrese http://developer.pidgin.im" +"skúste dokončiť prenos nastavení sami. Prosím, ohláste túto chybu na adrese " +"http://developer.pidgin.im" #: ../finch/gntaccount.c:123 ../finch/gntaccount.c:478 ../finch/gntblist.c:299 -#: ../finch/gntblist.c:424 ../finch/gntblist.c:437 ../finch/gntplugin.c:185 +#: ../finch/gntblist.c:432 ../finch/gntblist.c:445 ../finch/gntplugin.c:185 #: ../finch/gntplugin.c:233 ../finch/gntstatus.c:300 ../finch/gntstatus.c:308 #: ../libpurple/protocols/jabber/buddy.c:1464 #: ../libpurple/protocols/jabber/chat.c:677 #: ../libpurple/protocols/jabber/chat.c:688 #: ../libpurple/protocols/jabber/jabber.c:1227 #: ../libpurple/protocols/qq/group_join.c:328 -#: ../libpurple/protocols/silc/ops.c:57 ../libpurple/protocols/silc/ops.c:1456 +#: ../libpurple/protocols/qq/im.c:576 ../libpurple/protocols/silc/ops.c:57 +#: ../libpurple/protocols/silc/ops.c:1456 #: ../libpurple/protocols/silc10/ops.c:1451 msgid "Error" msgstr "Chyba" @@ -97,8 +99,8 @@ msgid "(You probably forgot to 'make install'.)" msgstr "(Pravdepodobne ste zabudli na 'make install'.)" -#: ../finch/gntaccount.c:490 ../pidgin/gtkaccount.c:1473 -#: ../pidgin/gtkblist.c:4014 +#: ../finch/gntaccount.c:490 ../pidgin/gtkaccount.c:1478 +#: ../pidgin/gtkblist.c:4023 msgid "Modify Account" msgstr "Upraviť účet" @@ -126,16 +128,16 @@ #. Cancel button #. Cancel #: ../finch/gntaccount.c:569 ../finch/gntaccount.c:632 -#: ../finch/gntaccount.c:878 ../finch/gntblist.c:343 ../finch/gntblist.c:412 -#: ../finch/gntblist.c:447 ../finch/gntblist.c:794 ../finch/gntblist.c:996 -#: ../finch/gntblist.c:1092 ../finch/gntblist.c:2198 ../finch/gntplugin.c:378 +#: ../finch/gntaccount.c:878 ../finch/gntblist.c:343 ../finch/gntblist.c:420 +#: ../finch/gntblist.c:455 ../finch/gntblist.c:802 ../finch/gntblist.c:1004 +#: ../finch/gntblist.c:1100 ../finch/gntblist.c:2212 ../finch/gntplugin.c:378 #: ../finch/gntpounce.c:458 ../finch/gntpounce.c:656 ../finch/gntprefs.c:264 -#: ../finch/gntstatus.c:144 ../finch/gntstatus.c:481 ../finch/gntstatus.c:606 -#: ../libpurple/account.c:984 ../libpurple/account.c:1234 -#: ../libpurple/account.c:1269 ../libpurple/conversation.c:1173 -#: ../libpurple/plugins/buddynote.c:51 ../libpurple/protocols/gg/gg.c:502 -#: ../libpurple/protocols/gg/gg.c:661 ../libpurple/protocols/gg/gg.c:798 -#: ../libpurple/protocols/gg/gg.c:879 +#: ../finch/gntsound.c:1046 ../finch/gntstatus.c:144 ../finch/gntstatus.c:481 +#: ../finch/gntstatus.c:606 ../libpurple/account.c:984 +#: ../libpurple/account.c:1234 ../libpurple/account.c:1269 +#: ../libpurple/conversation.c:1173 ../libpurple/plugins/buddynote.c:51 +#: ../libpurple/protocols/gg/gg.c:502 ../libpurple/protocols/gg/gg.c:661 +#: ../libpurple/protocols/gg/gg.c:798 ../libpurple/protocols/gg/gg.c:879 #: ../libpurple/protocols/jabber/buddy.c:588 #: ../libpurple/protocols/jabber/buddy.c:1826 #: ../libpurple/protocols/jabber/buddy.c:1862 @@ -147,25 +149,25 @@ #: ../libpurple/protocols/msn/msn.c:259 ../libpurple/protocols/msn/msn.c:276 #: ../libpurple/protocols/msn/msn.c:293 ../libpurple/protocols/msn/msn.c:310 #: ../libpurple/protocols/msn/msn.c:331 -#: ../libpurple/protocols/oscar/oscar.c:6073 +#: ../libpurple/protocols/oscar/oscar.c:6042 #: ../libpurple/protocols/oscar/peer.c:1023 #: ../libpurple/protocols/qq/buddy_info.c:484 #: ../libpurple/protocols/qq/buddy_opt.c:214 -#: ../libpurple/protocols/qq/buddy_opt.c:409 +#: ../libpurple/protocols/qq/buddy_opt.c:411 #: ../libpurple/protocols/qq/group.c:124 #: ../libpurple/protocols/qq/group_join.c:140 #: ../libpurple/protocols/qq/group_join.c:365 #: ../libpurple/protocols/qq/group_opt.c:144 #: ../libpurple/protocols/qq/group_opt.c:399 -#: ../libpurple/protocols/qq/sys_msg.c:115 -#: ../libpurple/protocols/qq/sys_msg.c:174 -#: ../libpurple/protocols/qq/sys_msg.c:269 -#: ../libpurple/protocols/sametime/sametime.c:3388 -#: ../libpurple/protocols/sametime/sametime.c:3474 -#: ../libpurple/protocols/sametime/sametime.c:3645 -#: ../libpurple/protocols/sametime/sametime.c:5397 -#: ../libpurple/protocols/sametime/sametime.c:5487 -#: ../libpurple/protocols/sametime/sametime.c:5612 +#: ../libpurple/protocols/qq/sys_msg.c:113 +#: ../libpurple/protocols/qq/sys_msg.c:172 +#: ../libpurple/protocols/qq/sys_msg.c:266 +#: ../libpurple/protocols/sametime/sametime.c:3389 +#: ../libpurple/protocols/sametime/sametime.c:3475 +#: ../libpurple/protocols/sametime/sametime.c:3646 +#: ../libpurple/protocols/sametime/sametime.c:5398 +#: ../libpurple/protocols/sametime/sametime.c:5488 +#: ../libpurple/protocols/sametime/sametime.c:5613 #: ../libpurple/protocols/silc/buddy.c:455 #: ../libpurple/protocols/silc/buddy.c:1076 #: ../libpurple/protocols/silc/buddy.c:1191 @@ -182,36 +184,37 @@ #: ../libpurple/protocols/silc10/ops.c:1904 #: ../libpurple/protocols/silc10/silc.c:736 #: ../libpurple/protocols/silc10/silc.c:942 -#: ../libpurple/protocols/yahoo/yahoo.c:989 -#: ../libpurple/protocols/yahoo/yahoo.c:3248 -#: ../libpurple/protocols/yahoo/yahoo.c:3259 ../pidgin/gtkaccount.c:1908 -#: ../pidgin/gtkaccount.c:2501 ../pidgin/gtkblist.c:5915 -#: ../pidgin/gtkdialogs.c:727 ../pidgin/gtkdialogs.c:865 -#: ../pidgin/gtkdialogs.c:957 ../pidgin/gtkdialogs.c:977 -#: ../pidgin/gtkdialogs.c:1001 ../pidgin/gtkdialogs.c:1023 -#: ../pidgin/gtkdialogs.c:1071 ../pidgin/gtkdialogs.c:1112 -#: ../pidgin/gtkdialogs.c:1168 ../pidgin/gtkdialogs.c:1207 -#: ../pidgin/gtkdialogs.c:1234 ../pidgin/gtkimhtmltoolbar.c:425 +#: ../libpurple/protocols/yahoo/yahoo.c:1016 +#: ../libpurple/protocols/yahoo/yahoo.c:3398 +#: ../libpurple/protocols/yahoo/yahoo.c:3409 ../pidgin/gtkaccount.c:1917 +#: ../pidgin/gtkaccount.c:2511 ../pidgin/gtkblist.c:5925 +#: ../pidgin/gtkdialogs.c:750 ../pidgin/gtkdialogs.c:888 +#: ../pidgin/gtkdialogs.c:980 ../pidgin/gtkdialogs.c:1000 +#: ../pidgin/gtkdialogs.c:1024 ../pidgin/gtkdialogs.c:1046 +#: ../pidgin/gtkdialogs.c:1094 ../pidgin/gtkdialogs.c:1135 +#: ../pidgin/gtkdialogs.c:1191 ../pidgin/gtkdialogs.c:1230 +#: ../pidgin/gtkdialogs.c:1257 ../pidgin/gtkimhtmltoolbar.c:425 #: ../pidgin/gtklog.c:327 ../pidgin/gtkplugin.c:288 ../pidgin/gtkpounce.c:1115 #: ../pidgin/gtkprivacy.c:562 ../pidgin/gtkprivacy.c:578 #: ../pidgin/gtkprivacy.c:603 ../pidgin/gtkprivacy.c:617 #: ../pidgin/gtkrequest.c:270 ../pidgin/gtksavedstatuses.c:344 -#: ../pidgin/gtkstatusbox.c:1582 +#: ../pidgin/gtkstatusbox.c:1573 msgid "Cancel" msgstr "Zrušiť" #. Save button #. Save #: ../finch/gntaccount.c:573 ../finch/gntplugin.c:378 ../finch/gntpounce.c:464 -#: ../finch/gntprefs.c:264 ../finch/gntstatus.c:484 ../finch/gntstatus.c:594 -#: ../libpurple/account.c:1268 ../libpurple/plugins/buddynote.c:50 +#: ../finch/gntprefs.c:264 ../finch/gntsound.c:1043 ../finch/gntstatus.c:484 +#: ../finch/gntstatus.c:594 ../libpurple/account.c:1268 +#: ../libpurple/plugins/buddynote.c:50 #: ../libpurple/protocols/jabber/buddy.c:587 ../pidgin/gtkdebug.c:748 #: ../pidgin/gtkrequest.c:276 msgid "Save" msgstr "Uložiť" -#: ../finch/gntaccount.c:626 ../pidgin/gtkaccount.c:1900 -#: ../pidgin/gtksavedstatuses.c:332 ../pidgin/gtkstatusbox.c:1576 +#: ../finch/gntaccount.c:626 ../pidgin/gtkaccount.c:1909 +#: ../pidgin/gtksavedstatuses.c:332 ../pidgin/gtkstatusbox.c:1567 #, c-format msgid "Are you sure you want to delete %s?" msgstr "Naozaj chcete odstrániť %s?" @@ -223,14 +226,14 @@ #. Delete button #: ../finch/gntaccount.c:631 ../finch/gntaccount.c:701 #: ../finch/gntpounce.c:655 ../finch/gntpounce.c:718 ../finch/gntstatus.c:143 -#: ../finch/gntstatus.c:209 ../pidgin/gtkaccount.c:1907 ../pidgin/gtklog.c:326 +#: ../finch/gntstatus.c:209 ../pidgin/gtkaccount.c:1916 ../pidgin/gtklog.c:326 #: ../pidgin/gtkpounce.c:1114 ../pidgin/gtkrequest.c:273 -#: ../pidgin/gtksavedstatuses.c:343 ../pidgin/gtkstatusbox.c:1581 +#: ../pidgin/gtksavedstatuses.c:343 ../pidgin/gtkstatusbox.c:1572 msgid "Delete" msgstr "Odstrániť" -#: ../finch/gntaccount.c:663 ../finch/gntblist.c:2104 ../finch/gntui.c:77 -#: ../pidgin/gtkaccount.c:2327 ../pidgin/gtkdocklet.c:522 +#: ../finch/gntaccount.c:663 ../finch/gntblist.c:2118 ../finch/gntui.c:81 +#: ../pidgin/gtkaccount.c:2334 ../pidgin/gtkdocklet.c:522 msgid "Accounts" msgstr "Účty" @@ -240,15 +243,15 @@ #. Add button #: ../finch/gntaccount.c:692 ../finch/gntaccount.c:877 ../finch/gntblist.c:342 -#: ../finch/gntblist.c:412 ../finch/gntblist.c:447 ../finch/gntnotify.c:379 +#: ../finch/gntblist.c:420 ../finch/gntblist.c:455 ../finch/gntnotify.c:379 #: ../finch/gntpounce.c:702 ../finch/gntstatus.c:198 -#: ../libpurple/protocols/gg/gg.c:878 ../libpurple/protocols/qq/sys_msg.c:116 -#: ../libpurple/protocols/qq/sys_msg.c:175 -#: ../libpurple/protocols/qq/sys_msg.c:270 -#: ../libpurple/protocols/sametime/sametime.c:5486 +#: ../libpurple/protocols/gg/gg.c:878 ../libpurple/protocols/qq/sys_msg.c:114 +#: ../libpurple/protocols/qq/sys_msg.c:173 +#: ../libpurple/protocols/qq/sys_msg.c:267 +#: ../libpurple/protocols/sametime/sametime.c:5487 #: ../libpurple/protocols/silc/chat.c:615 -#: ../libpurple/protocols/silc10/chat.c:599 ../pidgin/gtkaccount.c:2500 -#: ../pidgin/gtkblist.c:5914 ../pidgin/gtkconv.c:1651 +#: ../libpurple/protocols/silc10/chat.c:599 ../pidgin/gtkaccount.c:2510 +#: ../pidgin/gtkblist.c:5924 ../pidgin/gtkconv.c:1654 #: ../pidgin/gtkrequest.c:274 msgid "Add" msgstr "Pridať" @@ -258,35 +261,35 @@ msgid "Modify" msgstr "Upraviť" -#: ../finch/gntaccount.c:800 ../pidgin/gtkaccount.c:2447 +#: ../finch/gntaccount.c:800 ../pidgin/gtkaccount.c:2457 #, c-format msgid "%s%s%s%s has made %s his or her buddy%s%s" msgstr "%s%s%s používateľ %s pridal %s medzi svojich priateľov%s%s" -#: ../finch/gntaccount.c:873 ../pidgin/gtkaccount.c:2499 +#: ../finch/gntaccount.c:873 ../pidgin/gtkaccount.c:2509 msgid "Add buddy to your list?" msgstr "Pridať priateľa do vášho zoznamu?" -#: ../finch/gntaccount.c:927 ../pidgin/gtkaccount.c:2551 +#: ../finch/gntaccount.c:933 ../pidgin/gtkaccount.c:2567 #, c-format msgid "%s%s%s%s wants to add %s to his or her buddy list%s%s" msgstr "" "%s%s%sPoužívateľ %s si chce pridať používateľa %s do svojho zoznamu priateľov" "%s%s" -#: ../finch/gntaccount.c:952 ../finch/gntaccount.c:955 -#: ../finch/gntaccount.c:982 ../pidgin/gtkaccount.c:2574 -#: ../pidgin/gtkaccount.c:2580 +#: ../finch/gntaccount.c:958 ../finch/gntaccount.c:961 +#: ../finch/gntaccount.c:988 ../pidgin/gtkaccount.c:2590 +#: ../pidgin/gtkaccount.c:2596 msgid "Authorize buddy?" msgstr "Autorizovať priateľa?" -#: ../finch/gntaccount.c:959 ../finch/gntaccount.c:986 -#: ../pidgin/gtkaccount.c:2575 ../pidgin/gtkaccount.c:2581 +#: ../finch/gntaccount.c:965 ../finch/gntaccount.c:992 +#: ../pidgin/gtkaccount.c:2591 ../pidgin/gtkaccount.c:2597 msgid "Authorize" msgstr "Autorizovať" -#: ../finch/gntaccount.c:960 ../finch/gntaccount.c:987 -#: ../pidgin/gtkaccount.c:2576 ../pidgin/gtkaccount.c:2582 +#: ../finch/gntaccount.c:966 ../finch/gntaccount.c:993 +#: ../pidgin/gtkaccount.c:2592 ../pidgin/gtkaccount.c:2598 msgid "Deny" msgstr "Odmietnuť" @@ -310,36 +313,36 @@ msgid "Error adding buddy" msgstr "Chyba počas pridávania priateľa" -#: ../finch/gntblist.c:324 ../libpurple/protocols/oscar/oscar.c:2864 -#: ../pidgin/gtkaccount.c:1983 ../pidgin/gtksavedstatuses.c:979 +#: ../finch/gntblist.c:324 ../libpurple/protocols/oscar/oscar.c:2858 +#: ../pidgin/gtkaccount.c:1990 ../pidgin/gtksavedstatuses.c:979 msgid "Screen Name" msgstr "Používateľské meno" -#: ../finch/gntblist.c:327 ../finch/gntblist.c:404 ../finch/gntblist.c:1240 +#: ../finch/gntblist.c:327 ../finch/gntblist.c:409 ../finch/gntblist.c:1249 #: ../libpurple/protocols/msn/msn.c:1364 #: ../libpurple/protocols/silc/chat.c:606 #: ../libpurple/protocols/silc10/chat.c:590 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:680 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:704 #: ../libpurple/protocols/zephyr/zephyr.c:788 -#: ../libpurple/protocols/zephyr/zephyr.c:1207 ../pidgin/gtkdialogs.c:976 -#: ../pidgin/gtkdialogs.c:1000 ../pidgin/gtkdialogs.c:1022 +#: ../libpurple/protocols/zephyr/zephyr.c:1207 ../pidgin/gtkdialogs.c:999 +#: ../pidgin/gtkdialogs.c:1023 ../pidgin/gtkdialogs.c:1045 #: ../pidgin/gtkrequest.c:277 msgid "Alias" msgstr "Prezývka" -#: ../finch/gntblist.c:330 ../finch/gntblist.c:407 +#: ../finch/gntblist.c:330 ../finch/gntblist.c:412 msgid "Group" msgstr "Skupina" -#: ../finch/gntblist.c:334 ../finch/gntblist.c:395 ../finch/gntblist.c:1292 +#: ../finch/gntblist.c:334 ../finch/gntblist.c:400 ../finch/gntblist.c:1304 #: ../finch/gntnotify.c:173 ../finch/gntstatus.c:572 #: ../libpurple/plugins/idle.c:153 ../libpurple/plugins/idle.c:190 -#: ../pidgin/gtkblist.c:2974 ../pidgin/gtknotify.c:482 -#: ../pidgin/gtkpounce.c:1282 ../pidgin/plugins/gevolution/gevolution.c:443 +#: ../pidgin/gtkblist.c:2986 ../pidgin/gtknotify.c:488 +#: ../pidgin/gtkpounce.c:1282 ../pidgin/plugins/gevolution/gevolution.c:445 msgid "Account" msgstr "Účet" -#: ../finch/gntblist.c:340 ../finch/gntblist.c:843 +#: ../finch/gntblist.c:340 ../finch/gntblist.c:851 #: ../libpurple/protocols/silc/buddy.c:725 #: ../libpurple/protocols/silc/buddy.c:1027 #: ../libpurple/protocols/silc/buddy.c:1072 @@ -348,7 +351,7 @@ #: ../libpurple/protocols/silc10/buddy.c:1033 #: ../libpurple/protocols/silc10/buddy.c:1080 #: ../libpurple/protocols/silc10/buddy.c:1180 -#: ../libpurple/protocols/yahoo/yahoo.c:3161 ../pidgin/gtkblist.c:5420 +#: ../libpurple/protocols/yahoo/yahoo.c:3243 ../pidgin/gtkblist.c:5431 #: ../pidgin/plugins/gevolution/add_buddy_dialog.c:445 msgid "Add Buddy" msgstr "Pridať priateľa" @@ -357,12 +360,12 @@ msgid "Please enter buddy information." msgstr "Zadajte, prosím, informáciu o priateľovi." -#: ../finch/gntblist.c:367 ../libpurple/blist.c:1190 +#: ../finch/gntblist.c:369 ../libpurple/blist.c:1190 msgid "Chats" msgstr "Chaty" #. Extract their Name and put it in -#: ../finch/gntblist.c:401 ../libpurple/protocols/jabber/jabber.c:813 +#: ../finch/gntblist.c:406 ../libpurple/protocols/jabber/jabber.c:813 #: ../libpurple/protocols/msn/msn.c:1553 ../libpurple/protocols/msn/msn.c:1618 #: ../libpurple/protocols/msn/msn.c:1645 #: ../libpurple/protocols/qq/buddy_info.c:44 ../pidgin/gtkplugin.c:581 @@ -372,146 +375,146 @@ msgid "Name" msgstr "Meno" -#: ../finch/gntblist.c:410 ../finch/gntblist.c:845 ../pidgin/gtkblist.c:5800 +#: ../finch/gntblist.c:415 ../finch/gntblist.c:818 +msgid "Auto-join" +msgstr "Prihlásiť automaticky" + +#: ../finch/gntblist.c:418 ../finch/gntblist.c:853 ../pidgin/gtkblist.c:5810 msgid "Add Chat" msgstr "Pridať chat" -#: ../finch/gntblist.c:411 +#: ../finch/gntblist.c:419 msgid "You can edit more information from the context menu later." msgstr "Viac informácií môžete zmeniť neskôr v kontextovej ponuke." -#: ../finch/gntblist.c:424 ../finch/gntblist.c:437 +#: ../finch/gntblist.c:432 ../finch/gntblist.c:445 msgid "Error adding group" msgstr "Chyba počas pridávania skupiny" -#: ../finch/gntblist.c:425 +#: ../finch/gntblist.c:433 msgid "You must give a name for the group to add." msgstr "Zadajte názov skupiny, ktorú chcete pridať." -#: ../finch/gntblist.c:438 +#: ../finch/gntblist.c:446 msgid "A group with the name already exists." msgstr "Skupina s týmto názvom už existuje." -#: ../finch/gntblist.c:445 ../finch/gntblist.c:847 -#: ../libpurple/protocols/sametime/sametime.c:5396 -#: ../libpurple/protocols/sametime/sametime.c:5484 ../pidgin/gtkblist.c:5911 +#: ../finch/gntblist.c:453 ../finch/gntblist.c:855 +#: ../libpurple/protocols/sametime/sametime.c:5397 +#: ../libpurple/protocols/sametime/sametime.c:5485 ../pidgin/gtkblist.c:5921 msgid "Add Group" msgstr "Pridať skupinu" -#: ../finch/gntblist.c:445 +#: ../finch/gntblist.c:453 msgid "Enter the name of the group" msgstr "Zadajte názov skupiny" -#: ../finch/gntblist.c:793 +#: ../finch/gntblist.c:801 msgid "Edit Chat" msgstr "Upraviť chat" -#: ../finch/gntblist.c:793 +#: ../finch/gntblist.c:801 msgid "Please Update the necessary fields." msgstr "Prosím, aktualizujte potrebné políčka." -#: ../finch/gntblist.c:794 ../finch/gntstatus.c:204 +#: ../finch/gntblist.c:802 ../finch/gntstatus.c:204 msgid "Edit" msgstr "Upraviť" -#: ../finch/gntblist.c:810 -msgid "Auto-join" -msgstr "Prihlásiť automaticky" - -#: ../finch/gntblist.c:819 +#: ../finch/gntblist.c:827 msgid "Edit Settings" msgstr "Upraviť nastavenia" -#: ../finch/gntblist.c:855 ../pidgin/gtkutils.c:926 +#: ../finch/gntblist.c:863 ../pidgin/gtkutils.c:930 msgid "Information" msgstr "Informácie" -#: ../finch/gntblist.c:855 ../pidgin/gtkutils.c:926 +#: ../finch/gntblist.c:863 ../pidgin/gtkutils.c:930 msgid "Retrieving..." msgstr "Prijíma sa..." -#: ../finch/gntblist.c:895 ../finch/gntconv.c:407 +#: ../finch/gntblist.c:903 ../finch/gntconv.c:431 #: ../libpurple/protocols/silc/chat.c:899 #: ../libpurple/protocols/silc10/chat.c:883 msgid "Get Info" msgstr "Zobraziť podrobnosti" -#: ../finch/gntblist.c:899 +#: ../finch/gntblist.c:907 msgid "Add Buddy Pounce" msgstr "Pridať sledovanie priateľa" #. if (q_bud && is_online(q_bud->status)) { -#: ../finch/gntblist.c:906 ../finch/gntconv.c:419 +#: ../finch/gntblist.c:914 ../finch/gntconv.c:443 #: ../libpurple/protocols/jabber/si.c:868 -#: ../libpurple/protocols/oscar/oscar.c:654 ../libpurple/protocols/qq/qq.c:585 -#: ../pidgin/gtkconv.c:1599 +#: ../libpurple/protocols/oscar/oscar.c:653 ../libpurple/protocols/qq/qq.c:587 +#: ../pidgin/gtkconv.c:1602 msgid "Send File" msgstr "Odoslať súbor" -#: ../finch/gntblist.c:910 +#: ../finch/gntblist.c:918 msgid "View Log" msgstr "Zobraziť záznam" -#: ../finch/gntblist.c:991 +#: ../finch/gntblist.c:999 #, c-format msgid "Please enter the new name for %s" msgstr "Zadajte, prosím, nový názov pre %s" -#: ../finch/gntblist.c:993 ../finch/gntblist.c:1240 +#: ../finch/gntblist.c:1001 ../finch/gntblist.c:1249 msgid "Rename" msgstr "Premenovať" -#: ../finch/gntblist.c:993 +#: ../finch/gntblist.c:1001 msgid "Set Alias" msgstr "Nastaviť prezývku" -#: ../finch/gntblist.c:994 +#: ../finch/gntblist.c:1002 msgid "Enter empty string to reset the name." msgstr "Zadajte prázdny reťazec pre obnovenie názvu." -#: ../finch/gntblist.c:1070 +#: ../finch/gntblist.c:1078 msgid "Removing this contact will also remove all the buddies in the contact" msgstr "" "Odstránením tohoto kontaktu odstránite všetkých priateľov, ktorí sa " "nachádzajú v kontakte" -#: ../finch/gntblist.c:1078 +#: ../finch/gntblist.c:1086 msgid "Removing this group will also remove all the buddies in the group" msgstr "Odstránením tejto skupiny odstránite všetkých priateľov v skupine" -#: ../finch/gntblist.c:1083 +#: ../finch/gntblist.c:1091 #, c-format msgid "Are you sure you want to remove %s?" msgstr "Naozaj chcete odstrániť %s?" #. XXX: anything to do with the returned ui-handle? -#: ../finch/gntblist.c:1086 +#: ../finch/gntblist.c:1094 msgid "Confirm Remove" msgstr "Potvrdiť odstránenie" -#: ../finch/gntblist.c:1091 ../finch/gntblist.c:1242 ../finch/gntft.c:224 -#: ../pidgin/gtkconv.c:1648 ../pidgin/gtkrequest.c:275 +#: ../finch/gntblist.c:1099 ../finch/gntblist.c:1251 ../finch/gntft.c:224 +#: ../pidgin/gtkconv.c:1651 ../pidgin/gtkrequest.c:275 #: ../pidgin/gtkstatusbox.c:263 msgid "Remove" msgstr "Odstrániť" #. Buddy List -#: ../finch/gntblist.c:1216 ../finch/gntblist.c:2283 ../finch/gntprefs.c:257 -#: ../finch/gntui.c:78 ../pidgin/gtkblist.c:4256 -#: ../pidgin/plugins/win32/winprefs/winprefs.c:330 +#: ../finch/gntblist.c:1225 ../finch/gntblist.c:2297 ../finch/gntprefs.c:257 +#: ../finch/gntui.c:82 ../pidgin/gtkblist.c:4267 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:326 msgid "Buddy List" msgstr "Zoznam priateľov" -#: ../finch/gntblist.c:1247 +#: ../finch/gntblist.c:1256 msgid "Place tagged" msgstr "Miesto bolo označené" -#: ../finch/gntblist.c:1252 +#: ../finch/gntblist.c:1261 msgid "Toggle Tag" msgstr "Prepnúť značku" #. General -#: ../finch/gntblist.c:1287 ../libpurple/protocols/gg/gg.c:632 +#: ../finch/gntblist.c:1297 ../libpurple/protocols/gg/gg.c:632 #: ../libpurple/protocols/gg/gg.c:1045 ../libpurple/protocols/gg/gg.c:1118 #: ../libpurple/protocols/gg/gg.c:2202 #: ../libpurple/protocols/jabber/buddy.c:274 @@ -529,29 +532,29 @@ #: ../libpurple/protocols/silc10/ops.c:1036 #: ../libpurple/protocols/silc10/ops.c:1179 #: ../libpurple/protocols/silc10/ops.c:1328 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1042 ../pidgin/gtkblist.c:2998 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1066 ../pidgin/gtkblist.c:3010 msgid "Nickname" msgstr "Prezývka" #. Idle stuff -#: ../finch/gntblist.c:1307 ../finch/gntprefs.c:260 -#: ../libpurple/protocols/bonjour/bonjour.c:314 +#: ../finch/gntblist.c:1319 ../finch/gntprefs.c:260 +#: ../libpurple/protocols/bonjour/bonjour.c:333 #: ../libpurple/protocols/jabber/buddy.c:647 #: ../libpurple/protocols/jabber/buddy.c:687 #: ../libpurple/protocols/msn/msn.c:516 ../libpurple/protocols/msn/state.c:32 #: ../libpurple/protocols/novell/novell.c:2825 -#: ../libpurple/protocols/oscar/oscar.c:2888 -#: ../libpurple/protocols/yahoo/yahoo.c:2915 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:686 ../pidgin/gtkblist.c:3026 -#: ../pidgin/gtkblist.c:3435 ../pidgin/gtkprefs.c:1918 +#: ../libpurple/protocols/oscar/oscar.c:2882 +#: ../libpurple/protocols/yahoo/yahoo.c:2997 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:710 ../pidgin/gtkblist.c:3038 +#: ../pidgin/gtkblist.c:3443 ../pidgin/gtkprefs.c:1920 msgid "Idle" msgstr "Nečinný" -#: ../finch/gntblist.c:1320 +#: ../finch/gntblist.c:1333 msgid "On Mobile" msgstr "Mobilný" -#: ../finch/gntblist.c:1400 +#: ../finch/gntblist.c:1414 #, c-format msgid "" "Online: %d\n" @@ -560,12 +563,12 @@ "Pripojený: %d\n" "Celkom: %d" -#: ../finch/gntblist.c:1409 +#: ../finch/gntblist.c:1423 #, c-format msgid "Account: %s (%s)" msgstr "Účet: %s (%s)" -#: ../finch/gntblist.c:1421 +#: ../finch/gntblist.c:1435 #, c-format msgid "" "\n" @@ -574,50 +577,50 @@ "\n" "Naposledy pripojený: %s dozadu" -#: ../finch/gntblist.c:1687 ../pidgin/gtkdocklet.c:470 -#: ../pidgin/gtkstatusbox.c:1070 +#: ../finch/gntblist.c:1701 ../pidgin/gtkdocklet.c:470 +#: ../pidgin/gtkstatusbox.c:1071 msgid "New..." msgstr "Nový..." -#: ../finch/gntblist.c:1694 ../pidgin/gtkdocklet.c:471 -#: ../pidgin/gtkstatusbox.c:1071 +#: ../finch/gntblist.c:1708 ../pidgin/gtkdocklet.c:471 +#: ../pidgin/gtkstatusbox.c:1072 msgid "Saved..." msgstr "Uložený..." -#: ../finch/gntblist.c:2072 ../finch/gntplugin.c:254 ../finch/gntui.c:82 +#: ../finch/gntblist.c:2086 ../finch/gntplugin.c:254 ../finch/gntui.c:86 #: ../pidgin/gtkdocklet.c:523 ../pidgin/gtkplugin.c:530 msgid "Plugins" msgstr "Moduly" -#: ../finch/gntblist.c:2179 ../pidgin/gtkdialogs.c:708 -#: ../pidgin/gtkdialogs.c:846 ../pidgin/gtkdialogs.c:927 +#: ../finch/gntblist.c:2193 ../pidgin/gtkdialogs.c:731 +#: ../pidgin/gtkdialogs.c:869 ../pidgin/gtkdialogs.c:950 msgid "_Name" msgstr "_Meno" -#: ../finch/gntblist.c:2184 ../pidgin/gtkdialogs.c:713 -#: ../pidgin/gtkdialogs.c:851 ../pidgin/gtkdialogs.c:932 +#: ../finch/gntblist.c:2198 ../pidgin/gtkdialogs.c:736 +#: ../pidgin/gtkdialogs.c:874 ../pidgin/gtkdialogs.c:955 msgid "_Account" msgstr "Úč_et" -#: ../finch/gntblist.c:2192 ../pidgin/gtkdialogs.c:721 +#: ../finch/gntblist.c:2206 ../pidgin/gtkdialogs.c:744 msgid "New Instant Message" msgstr "Nová správa" -#: ../finch/gntblist.c:2194 ../pidgin/gtkdialogs.c:723 +#: ../finch/gntblist.c:2208 ../pidgin/gtkdialogs.c:746 msgid "" "Please enter the screen name or alias of the person you would like to IM." msgstr "" "Zadajte, prosím, používateľské meno alebo prezývku osoby, ktorej chcete " "odoslať správu." -#: ../finch/gntblist.c:2197 ../finch/gntnotify.c:79 ../libpurple/account.c:983 +#: ../finch/gntblist.c:2211 ../finch/gntnotify.c:79 ../libpurple/account.c:983 #: ../libpurple/account.c:1233 ../libpurple/protocols/gg/gg.c:501 #: ../libpurple/protocols/gg/gg.c:660 ../libpurple/protocols/gg/gg.c:797 #: ../libpurple/protocols/jabber/jabber.c:1383 #: ../libpurple/protocols/jabber/xdata.c:336 #: ../libpurple/protocols/msn/msn.c:258 ../libpurple/protocols/msn/msn.c:275 #: ../libpurple/protocols/msn/msn.c:292 ../libpurple/protocols/msn/msn.c:309 -#: ../libpurple/protocols/oscar/oscar.c:6072 +#: ../libpurple/protocols/oscar/oscar.c:6041 #: ../libpurple/protocols/silc/buddy.c:454 #: ../libpurple/protocols/silc/buddy.c:1190 #: ../libpurple/protocols/silc/chat.c:447 @@ -634,40 +637,40 @@ #: ../libpurple/protocols/silc10/ops.c:1297 #: ../libpurple/protocols/silc10/ops.c:1903 #: ../libpurple/protocols/silc10/silc.c:735 -#: ../libpurple/protocols/yahoo/yahoo.c:988 -#: ../libpurple/protocols/yahoo/yahoo.c:3247 -#: ../libpurple/protocols/yahoo/yahoo.c:3258 ../pidgin/gtkblist.c:4013 -#: ../pidgin/gtkdialogs.c:726 ../pidgin/gtkdialogs.c:864 -#: ../pidgin/gtkdialogs.c:956 ../pidgin/gtkrequest.c:269 +#: ../libpurple/protocols/yahoo/yahoo.c:1015 +#: ../libpurple/protocols/yahoo/yahoo.c:3397 +#: ../libpurple/protocols/yahoo/yahoo.c:3408 ../pidgin/gtkblist.c:4022 +#: ../pidgin/gtkdialogs.c:749 ../pidgin/gtkdialogs.c:887 +#: ../pidgin/gtkdialogs.c:979 ../pidgin/gtkrequest.c:269 msgid "OK" msgstr "OK" #. Create the "Options" frame. -#: ../finch/gntblist.c:2217 ../finch/gntpounce.c:446 ../pidgin/gtkpounce.c:791 +#: ../finch/gntblist.c:2231 ../finch/gntpounce.c:446 ../pidgin/gtkpounce.c:791 msgid "Options" msgstr "Voľby" -#: ../finch/gntblist.c:2223 +#: ../finch/gntblist.c:2237 msgid "Send IM..." msgstr "Odoslať správu..." -#: ../finch/gntblist.c:2227 +#: ../finch/gntblist.c:2241 msgid "Show empty groups" msgstr "Zobraziť prázdne skupiny" -#: ../finch/gntblist.c:2233 +#: ../finch/gntblist.c:2247 msgid "Show offline buddies" msgstr "Zobraziť odpojených priateľov" -#: ../finch/gntblist.c:2239 +#: ../finch/gntblist.c:2253 msgid "Sort by status" msgstr "Zoradiť podľa stavu" -#: ../finch/gntblist.c:2243 +#: ../finch/gntblist.c:2257 msgid "Sort alphabetically" msgstr "Zoradiť podľa abecedy" -#: ../finch/gntblist.c:2247 +#: ../finch/gntblist.c:2261 msgid "Sort by log size" msgstr "Zoradiť podľa veľkosti záznamu" @@ -694,41 +697,41 @@ "Finch sa nebude pokúšať znovu pripojiť na tento účet, dokým neopravíte chybu " "a znovu nepovolíte tento účet." -#: ../finch/gntconv.c:117 +#: ../finch/gntconv.c:118 msgid "No such command." msgstr "Tento príkaz neexistuje." -#: ../finch/gntconv.c:121 ../pidgin/gtkconv.c:492 +#: ../finch/gntconv.c:122 ../pidgin/gtkconv.c:495 msgid "Syntax Error: You typed the wrong number of arguments to that command." msgstr "Chyba syntaxi: V príkaze ste zadali nesprávny počet argumentov." -#: ../finch/gntconv.c:126 ../pidgin/gtkconv.c:498 +#: ../finch/gntconv.c:127 ../pidgin/gtkconv.c:501 msgid "Your command failed for an unknown reason." msgstr "Váš príkaz zlyhal z neznámeho dôvodu." -#: ../finch/gntconv.c:131 ../pidgin/gtkconv.c:505 +#: ../finch/gntconv.c:132 ../pidgin/gtkconv.c:508 msgid "That command only works in chats, not IMs." msgstr "Tento príkaz funguje len v chatoch, nie v IM." -#: ../finch/gntconv.c:134 ../pidgin/gtkconv.c:508 +#: ../finch/gntconv.c:135 ../pidgin/gtkconv.c:511 msgid "That command only works in IMs, not chats." msgstr "Tento príkaz funguje len v IM, nie v chatoch." -#: ../finch/gntconv.c:138 ../pidgin/gtkconv.c:513 +#: ../finch/gntconv.c:139 ../pidgin/gtkconv.c:516 msgid "That command doesn't work on this protocol." msgstr "Tento príkaz nefunguje v tomto protokole." -#: ../finch/gntconv.c:224 +#: ../finch/gntconv.c:225 #, c-format msgid "%s (%s -- %s)" msgstr "%s (%s -- %s)" -#: ../finch/gntconv.c:247 +#: ../finch/gntconv.c:248 #, c-format msgid "%s [%s]" msgstr "%s [%s]" -#: ../finch/gntconv.c:252 ../finch/gntconv.c:647 +#: ../finch/gntconv.c:253 ../finch/gntconv.c:672 #, c-format msgid "" "\n" @@ -737,48 +740,48 @@ "\n" "%s píše..." -#: ../finch/gntconv.c:271 +#: ../finch/gntconv.c:272 msgid "You have left this chat." msgstr "Opustili ste tento chat." -#: ../finch/gntconv.c:342 +#: ../finch/gntconv.c:366 msgid "Send To" msgstr "Odoslať do" -#: ../finch/gntconv.c:386 +#: ../finch/gntconv.c:410 msgid "Conversation" msgstr "Rozhovor" -#: ../finch/gntconv.c:392 +#: ../finch/gntconv.c:416 msgid "Clear Scrollback" msgstr "Vymazať záznam" -#: ../finch/gntconv.c:396 ../finch/gntprefs.c:190 +#: ../finch/gntconv.c:420 ../finch/gntprefs.c:190 msgid "Show Timestamps" msgstr "Zobrazovať časové značky" -#: ../finch/gntconv.c:412 +#: ../finch/gntconv.c:436 msgid "Add Buddy Pounce..." msgstr "Pridať sledovanie priateľa..." -#: ../finch/gntconv.c:614 +#: ../finch/gntconv.c:638 msgid "<AUTO-REPLY> " msgstr "<AUTOMATICKÁ ODPOVEĎ> " #. Print the list of users in the room -#: ../finch/gntconv.c:735 +#: ../finch/gntconv.c:760 msgid "List of users:\n" msgstr "Zoznam používateľov:\n" -#: ../finch/gntconv.c:880 ../pidgin/gtkconv.c:335 +#: ../finch/gntconv.c:905 ../pidgin/gtkconv.c:338 msgid "Supported debug options are: version" msgstr "Podporované ladiace voľby sú: version" -#: ../finch/gntconv.c:915 ../pidgin/gtkconv.c:384 +#: ../finch/gntconv.c:940 ../pidgin/gtkconv.c:387 msgid "No such command (in this context)." msgstr "Tento príkaz neexistuje (v tejto situácii)." -#: ../finch/gntconv.c:918 ../pidgin/gtkconv.c:387 +#: ../finch/gntconv.c:943 ../pidgin/gtkconv.c:390 msgid "" "Use \"/help <command>\" for help on a specific command.\n" "The following commands are available in this context:\n" @@ -786,60 +789,60 @@ "Pomocníka ku zadanému príkazu zobrazíte zadaním \"/help <príkaz>\".\n" "V tomto kontexte sú dostupné nasledujúce príkazy:\n" -#: ../finch/gntconv.c:976 ../pidgin/gtkconv.c:7198 +#: ../finch/gntconv.c:1001 ../pidgin/gtkconv.c:7350 msgid "" "say <message>: Send a message normally as if you weren't using a " "command." msgstr "say <správa>: Odošle správu rovnako, ako bez použitia príkazu." -#: ../finch/gntconv.c:979 ../pidgin/gtkconv.c:7201 +#: ../finch/gntconv.c:1004 ../pidgin/gtkconv.c:7353 msgid "me <action>: Send an IRC style action to a buddy or chat." msgstr "me <akcia>: Odošle priateľovi alebo na chat akciu v štýle IRC." -#: ../finch/gntconv.c:982 ../pidgin/gtkconv.c:7204 +#: ../finch/gntconv.c:1007 ../pidgin/gtkconv.c:7356 msgid "" "debug <option>: Send various debug information to the current " "conversation." msgstr "" "debug <voľby>: Do aktuálneho rozhovoru vloží rôzne ladiace informácie." -#: ../finch/gntconv.c:985 ../pidgin/gtkconv.c:7207 +#: ../finch/gntconv.c:1010 ../pidgin/gtkconv.c:7359 msgid "clear: Clears the conversation scrollback." msgstr "clear: Vyčistí okno rozhovoru." -#: ../finch/gntconv.c:988 ../pidgin/gtkconv.c:7213 +#: ../finch/gntconv.c:1013 ../pidgin/gtkconv.c:7365 msgid "help <command>: Help on a specific command." msgstr "help <príkaz>: Zobrazí pomocníka ku zadanému príkazu." -#: ../finch/gntconv.c:991 +#: ../finch/gntconv.c:1016 msgid "users: Show the list of users in the chat." msgstr "users: Zobrazí zoznam používateľov na chate." -#: ../finch/gntconv.c:996 +#: ../finch/gntconv.c:1021 msgid "plugins: Show the plugins window." msgstr "plugins: Zobrazí okno modulov." -#: ../finch/gntconv.c:999 +#: ../finch/gntconv.c:1024 msgid "buddylist: Show the buddylist." msgstr "buddylist: Zobrazí zoznam priateľov." -#: ../finch/gntconv.c:1002 +#: ../finch/gntconv.c:1027 msgid "accounts: Show the accounts window." msgstr "accounts: Zobrazí okno účtov." -#: ../finch/gntconv.c:1005 +#: ../finch/gntconv.c:1030 msgid "debugwin: Show the debug window." msgstr "debugwin: Zobrazí ladiace okno." -#: ../finch/gntconv.c:1008 +#: ../finch/gntconv.c:1033 msgid "prefs: Show the preference window." msgstr "prefs: Zobrazí okno nastavení." -#: ../finch/gntconv.c:1011 +#: ../finch/gntconv.c:1036 msgid "statuses: Show the savedstatuses window." msgstr "statuses: Zobrazí okno uložených stavov." -#: ../finch/gntdebug.c:234 ../finch/gntui.c:80 ../pidgin/gtkdebug.c:694 +#: ../finch/gntdebug.c:234 ../finch/gntui.c:84 ../pidgin/gtkdebug.c:694 msgid "Debug Window" msgstr "Ladiace okno" @@ -865,7 +868,7 @@ msgstr "Prenosy súborov - %d%% z %d súborov" #. Create the window. -#: ../finch/gntft.c:122 ../finch/gntft.c:195 ../finch/gntui.c:81 +#: ../finch/gntft.c:122 ../finch/gntft.c:195 ../finch/gntui.c:85 #: ../pidgin/gtkft.c:233 ../pidgin/gtkft.c:761 msgid "File Transfers" msgstr "Prenosy súborov" @@ -892,7 +895,7 @@ #. XXX: Use of ggp_str_to_uin() is an ugly hack! #: ../finch/gntft.c:198 ../finch/gntstatus.c:543 ../finch/gntstatus.c:572 -#: ../libpurple/protocols/bonjour/bonjour.c:318 +#: ../libpurple/protocols/bonjour/bonjour.c:337 #: ../libpurple/protocols/gg/gg.c:1034 ../libpurple/protocols/gg/gg.c:1571 #: ../libpurple/protocols/gg/gg.c:1579 #: ../libpurple/protocols/jabber/buddy.c:638 @@ -901,15 +904,15 @@ #: ../libpurple/protocols/jabber/jabber.c:1212 #: ../libpurple/protocols/msn/msn.c:515 #: ../libpurple/protocols/novell/novell.c:2835 -#: ../libpurple/protocols/oscar/oscar.c:821 -#: ../libpurple/protocols/oscar/oscar.c:826 -#: ../libpurple/protocols/oscar/oscar.c:828 -#: ../libpurple/protocols/oscar/oscar.c:2676 -#: ../libpurple/protocols/oscar/oscar.c:3794 -#: ../libpurple/protocols/sametime/sametime.c:3263 -#: ../libpurple/protocols/sametime/sametime.c:4150 -#: ../libpurple/protocols/yahoo/yahoo.c:3066 ../pidgin/gtkblist.c:3070 -#: ../pidgin/gtkblist.c:3083 ../pidgin/gtkblist.c:3085 +#: ../libpurple/protocols/oscar/oscar.c:820 +#: ../libpurple/protocols/oscar/oscar.c:825 +#: ../libpurple/protocols/oscar/oscar.c:827 +#: ../libpurple/protocols/oscar/oscar.c:2670 +#: ../libpurple/protocols/oscar/oscar.c:3748 +#: ../libpurple/protocols/sametime/sametime.c:3264 +#: ../libpurple/protocols/sametime/sametime.c:4151 +#: ../libpurple/protocols/yahoo/yahoo.c:3148 ../pidgin/gtkblist.c:3082 +#: ../pidgin/gtkblist.c:3095 ../pidgin/gtkblist.c:3097 #: ../pidgin/gtksavedstatuses.c:998 ../pidgin/gtksavedstatuses.c:1143 msgid "Status" msgstr "Stav" @@ -930,7 +933,7 @@ #: ../finch/gntft.c:234 ../finch/gntnotify.c:181 ../finch/gntplugin.c:209 #: ../finch/gntplugin.c:309 ../finch/gntpounce.c:727 ../finch/gntstatus.c:215 #: ../libpurple/protocols/msn/msn.c:375 ../libpurple/protocols/silc/util.c:382 -#: ../libpurple/protocols/silc10/util.c:377 ../pidgin/gtkaccount.c:2474 +#: ../libpurple/protocols/silc10/util.c:377 ../pidgin/gtkaccount.c:2484 #: ../pidgin/gtkrequest.c:272 msgid "Close" msgstr "Zavrieť" @@ -969,11 +972,11 @@ msgid "You have mail!" msgstr "Máte poštu!" -#: ../finch/gntnotify.c:173 ../pidgin/gtknotify.c:489 +#: ../finch/gntnotify.c:173 ../pidgin/gtknotify.c:495 msgid "Sender" msgstr "Odosielateľ" -#: ../finch/gntnotify.c:173 ../pidgin/gtknotify.c:496 +#: ../finch/gntnotify.c:173 ../pidgin/gtknotify.c:502 msgid "Subject" msgstr "Predmet" @@ -985,29 +988,29 @@ msgstr[1] "%s (%s) má %d novú správu." msgstr[2] "%s (%s) má %d nové správy." -#: ../finch/gntnotify.c:224 ../pidgin/gtknotify.c:335 +#: ../finch/gntnotify.c:224 ../pidgin/gtknotify.c:340 msgid "New Mail" msgstr "Nová pošta" -#: ../finch/gntnotify.c:289 ../pidgin/gtknotify.c:916 +#: ../finch/gntnotify.c:289 ../pidgin/gtknotify.c:923 #, c-format msgid "Info for %s" msgstr "Podrobnosti o %s" #: ../finch/gntnotify.c:290 ../libpurple/protocols/toc/toc.c:476 -#: ../pidgin/gtknotify.c:917 +#: ../pidgin/gtknotify.c:924 msgid "Buddy Information" msgstr "Podrobnosti o priateľovi" -#: ../finch/gntnotify.c:376 +#: ../finch/gntnotify.c:376 ../libpurple/protocols/qq/group_join.c:367 msgid "Continue" msgstr "Pokračovať" -#: ../finch/gntnotify.c:382 ../pidgin/gtkconv.c:1627 ../pidgin/gtkdebug.c:834 +#: ../finch/gntnotify.c:382 ../pidgin/gtkconv.c:1630 ../pidgin/gtkdebug.c:834 msgid "Info" msgstr "Podrobnosti" -#: ../finch/gntnotify.c:385 ../pidgin/gtkconv.c:1588 +#: ../finch/gntnotify.c:385 ../pidgin/gtkconv.c:1591 msgid "IM" msgstr "Napísať správu" @@ -1015,7 +1018,7 @@ msgid "Join" msgstr "Pripojiť" -#: ../finch/gntnotify.c:391 ../libpurple/protocols/sametime/sametime.c:3473 +#: ../finch/gntnotify.c:391 ../libpurple/protocols/sametime/sametime.c:3474 msgid "Invite" msgstr "Pozvať" @@ -1074,7 +1077,7 @@ #. Back to instant-apply! I win! BU-HAHAHA! #. Create the window #: ../finch/gntplugin.c:370 ../finch/gntplugin.c:377 ../finch/gntprefs.c:263 -#: ../finch/gntui.c:83 ../pidgin/gtkdocklet.c:524 ../pidgin/gtkprefs.c:2060 +#: ../finch/gntui.c:88 ../pidgin/gtkdocklet.c:524 ../pidgin/gtkprefs.c:2062 msgid "Preferences" msgstr "Nastavenia" @@ -1187,7 +1190,7 @@ msgid "Are you sure you want to delete the pounce on %s for %s?" msgstr "Ste si istý, že chcete odstrániť sledovanie na %s pre %s?" -#: ../finch/gntpounce.c:685 ../finch/gntui.c:79 ../pidgin/gtkpounce.c:1339 +#: ../finch/gntpounce.c:685 ../finch/gntui.c:83 ../pidgin/gtkpounce.c:1339 msgid "Buddy Pounces" msgstr "Sledovanie priateľov" @@ -1249,13 +1252,13 @@ msgid "Based on keyboard use" msgstr "Podľa využitia klávesnice" -#: ../finch/gntprefs.c:93 ../pidgin/gtkprefs.c:1923 +#: ../finch/gntprefs.c:93 ../pidgin/gtkprefs.c:1925 msgid "From last sent message" msgstr "Podľa naposledy odoslanej správy" #: ../finch/gntprefs.c:95 ../pidgin/gtkprefs.c:897 ../pidgin/gtkprefs.c:906 -#: ../pidgin/gtkprefs.c:1922 ../pidgin/gtkprefs.c:1936 -#: ../pidgin/plugins/win32/winprefs/winprefs.c:337 +#: ../pidgin/gtkprefs.c:1924 ../pidgin/gtkprefs.c:1938 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:333 msgid "Never" msgstr "Nikdy" @@ -1304,12 +1307,12 @@ msgstr "Zmeniť stav na:" #. Conversations -#: ../finch/gntprefs.c:258 ../pidgin/gtkprefs.c:992 ../pidgin/gtkprefs.c:2026 -#: ../pidgin/plugins/win32/winprefs/winprefs.c:344 +#: ../finch/gntprefs.c:258 ../pidgin/gtkprefs.c:992 ../pidgin/gtkprefs.c:2028 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:340 msgid "Conversations" msgstr "Rozhovory" -#: ../finch/gntprefs.c:259 ../pidgin/gtkprefs.c:1462 ../pidgin/gtkprefs.c:2037 +#: ../finch/gntprefs.c:259 ../pidgin/gtkprefs.c:1464 ../pidgin/gtkprefs.c:2039 msgid "Logging" msgstr "Zaznamenávanie" @@ -1317,16 +1320,167 @@ msgid "Not implemented yet." msgstr "Zatiaľ nie je implementované." -#: ../finch/gntrequest.c:635 ../pidgin/gtkrequest.c:1526 -#: ../pidgin/gtkrequest.c:1572 +#: ../finch/gntrequest.c:635 ../pidgin/gtkrequest.c:1552 +#: ../pidgin/gtkrequest.c:1598 msgid "Save File..." msgstr "Uložiť súbor..." -#: ../finch/gntrequest.c:635 ../pidgin/gtkrequest.c:1527 -#: ../pidgin/gtkrequest.c:1573 +#: ../finch/gntrequest.c:635 ../pidgin/gtkrequest.c:1553 +#: ../pidgin/gtkrequest.c:1599 msgid "Open File..." msgstr "Otvoriť súbor..." +#: ../finch/gntsound.c:94 ../pidgin/gtksound.c:63 +msgid "Buddy logs in" +msgstr "Priateľ sa prihlási" + +#: ../finch/gntsound.c:95 ../pidgin/gtksound.c:64 +msgid "Buddy logs out" +msgstr "Priateľ sa odhlási" + +#: ../finch/gntsound.c:96 ../pidgin/gtksound.c:65 +msgid "Message received" +msgstr "Prijatie správy" + +#: ../finch/gntsound.c:97 ../pidgin/gtksound.c:66 +msgid "Message received begins conversation" +msgstr "Prijatá správa začína rozhovor" + +#: ../finch/gntsound.c:98 ../pidgin/gtksound.c:67 +msgid "Message sent" +msgstr "Odoslanie správy" + +#: ../finch/gntsound.c:99 ../pidgin/gtksound.c:68 +msgid "Person enters chat" +msgstr "Osoba vstúpi do chatu" + +#: ../finch/gntsound.c:100 ../pidgin/gtksound.c:69 +msgid "Person leaves chat" +msgstr "Osoba opustí chat" + +#: ../finch/gntsound.c:101 ../pidgin/gtksound.c:70 +msgid "You talk in chat" +msgstr "Vy hovoríte v chate" + +#: ../finch/gntsound.c:102 ../pidgin/gtksound.c:71 +msgid "Others talk in chat" +msgstr "Ostatní hovoria v chate" + +#: ../finch/gntsound.c:104 ../pidgin/gtksound.c:74 +msgid "Someone says your screen name in chat" +msgstr "Niekto v chate napíše vaše meno" + +#: ../finch/gntsound.c:357 ../pidgin/gtksound.c:310 +msgid "GStreamer Failure" +msgstr "Zlyhanie rozhrania GStreamer" + +#: ../finch/gntsound.c:358 ../pidgin/gtksound.c:311 +msgid "GStreamer failed to initialize." +msgstr "Nepodarilo sa inicializovať rozhranie GStreamer" + +#: ../finch/gntsound.c:706 ../finch/gntsound.c:792 ../pidgin/gtkprefs.c:1584 +#: ../pidgin/gtkprefs.c:1673 ../pidgin/gtkprefs.c:1867 +msgid "(default)" +msgstr "(štandardné)" + +#: ../finch/gntsound.c:719 +msgid "Select Sound File ..." +msgstr "Vyberte zvukový súbor..." + +#: ../finch/gntsound.c:894 +msgid "Sound Preferences" +msgstr "Nastavenia zvuku" + +#: ../finch/gntsound.c:905 +msgid "Profiles" +msgstr "Profily" + +#: ../finch/gntsound.c:944 ../pidgin/gtkprefs.c:1712 +msgid "Automatic" +msgstr "Automaticky" + +#: ../finch/gntsound.c:947 +msgid "Console Beep" +msgstr "Pípnutie konzoly" + +#: ../finch/gntsound.c:948 ../pidgin/gtkprefs.c:1716 +msgid "Command" +msgstr "Príkaz" + +#: ../finch/gntsound.c:949 +msgid "No Sound" +msgstr "Žiadne zvuky" + +#: ../finch/gntsound.c:951 ../pidgin/gtkprefs.c:1707 +msgid "Sound Method" +msgstr "Spôsob prehrávania zvukov" + +#: ../finch/gntsound.c:956 +msgid "Method: " +msgstr "Spôsob:" + +#: ../finch/gntsound.c:963 +#, c-format +msgid "" +"Sound Command\n" +"(%s for filename)" +msgstr "" +"Príkaz zvuku:\n" +"(%s pre názov súboru)" + +#. Sound options +#: ../finch/gntsound.c:971 ../pidgin/gtkprefs.c:1751 +msgid "Sound Options" +msgstr "Možnosti zvuku" + +#: ../finch/gntsound.c:972 +msgid "Sounds when conversation has focus" +msgstr "Prehrávať zvuky, keď je okno koverzácie aktívne" + +#: ../finch/gntsound.c:980 ../pidgin/gtkprefs.c:896 ../pidgin/gtkprefs.c:908 +#: ../pidgin/gtkprefs.c:1758 ../pidgin/plugins/timestamp_format.c:42 +#: ../pidgin/plugins/timestamp_format.c:51 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:334 +msgid "Always" +msgstr "Vždy" + +#: ../finch/gntsound.c:981 ../pidgin/gtkprefs.c:1756 +msgid "Only when available" +msgstr "Len ak sú dostupné" + +#: ../finch/gntsound.c:982 ../pidgin/gtkprefs.c:1757 +msgid "Only when not available" +msgstr "Len ak sú nedostupné" + +#: ../finch/gntsound.c:989 +msgid "Volume(0-100):" +msgstr "Hlasitosť(0-100):" + +#. Sound events +#: ../finch/gntsound.c:1006 ../pidgin/gtkprefs.c:1793 +msgid "Sound Events" +msgstr "Zvukové udalosti" + +#: ../finch/gntsound.c:1008 ../pidgin/gtkprefs.c:1852 +msgid "Event" +msgstr "Udalosť" + +#: ../finch/gntsound.c:1008 +msgid "File" +msgstr "Súbor" + +#: ../finch/gntsound.c:1027 ../pidgin/gtkprefs.c:1871 +msgid "Test" +msgstr "Ukážka" + +#: ../finch/gntsound.c:1030 ../pidgin/gtkprefs.c:1875 +msgid "Reset" +msgstr "Obnoviť" + +#: ../finch/gntsound.c:1033 ../pidgin/gtkprefs.c:1879 +msgid "Choose..." +msgstr "Vybrať..." + #: ../finch/gntstatus.c:137 #, c-format msgid "Are you sure you want to delete \"%s\"" @@ -1353,9 +1507,9 @@ msgstr "Typ" #: ../finch/gntstatus.c:182 ../finch/gntstatus.c:560 ../finch/gntstatus.c:572 -#: ../libpurple/protocols/bonjour/bonjour.c:247 -#: ../libpurple/protocols/bonjour/bonjour.c:254 -#: ../libpurple/protocols/bonjour/bonjour.c:320 +#: ../libpurple/protocols/bonjour/bonjour.c:249 +#: ../libpurple/protocols/bonjour/bonjour.c:256 +#: ../libpurple/protocols/bonjour/bonjour.c:339 #: ../libpurple/protocols/gg/gg.c:1072 ../libpurple/protocols/gg/gg.c:1574 #: ../libpurple/protocols/gg/gg.c:1592 ../libpurple/protocols/gg/gg.c:1602 #: ../libpurple/protocols/gg/gg.c:1608 ../libpurple/protocols/gg/gg.c:1617 @@ -1370,21 +1524,21 @@ #: ../libpurple/protocols/novell/novell.c:2941 #: ../libpurple/protocols/novell/novell.c:2947 #: ../libpurple/protocols/novell/novell.c:2953 -#: ../libpurple/protocols/oscar/oscar.c:5533 -#: ../libpurple/protocols/oscar/oscar.c:5751 -#: ../libpurple/protocols/oscar/oscar.c:5765 -#: ../libpurple/protocols/oscar/oscar.c:5781 -#: ../libpurple/protocols/oscar/oscar.c:5788 -#: ../libpurple/protocols/oscar/oscar.c:5795 -#: ../libpurple/protocols/sametime/sametime.c:3286 -#: ../libpurple/protocols/sametime/sametime.c:3292 -#: ../libpurple/protocols/sametime/sametime.c:3298 -#: ../libpurple/protocols/sametime/sametime.c:3377 +#: ../libpurple/protocols/oscar/oscar.c:5502 +#: ../libpurple/protocols/oscar/oscar.c:5720 +#: ../libpurple/protocols/oscar/oscar.c:5734 +#: ../libpurple/protocols/oscar/oscar.c:5750 +#: ../libpurple/protocols/oscar/oscar.c:5757 +#: ../libpurple/protocols/oscar/oscar.c:5764 +#: ../libpurple/protocols/sametime/sametime.c:3287 +#: ../libpurple/protocols/sametime/sametime.c:3293 +#: ../libpurple/protocols/sametime/sametime.c:3299 +#: ../libpurple/protocols/sametime/sametime.c:3378 #: ../libpurple/protocols/silc/buddy.c:1551 #: ../libpurple/protocols/silc10/buddy.c:1551 #: ../libpurple/protocols/simple/simple.c:246 -#: ../libpurple/protocols/yahoo/yahoo.c:3494 -#: ../libpurple/protocols/yahoo/yahoo.c:3500 +#: ../libpurple/protocols/yahoo/yahoo.c:3651 +#: ../libpurple/protocols/yahoo/yahoo.c:3657 #: ../libpurple/protocols/zephyr/zephyr.c:2337 #: ../pidgin/gtksavedstatuses.c:525 ../pidgin/gtksavedstatuses.c:1009 msgid "Message" @@ -1436,7 +1590,11 @@ msgid "Save & Use" msgstr "Uložiť & použiť" -#: ../finch/gntui.c:84 +#: ../finch/gntui.c:87 ../pidgin/gtkprefs.c:2030 +msgid "Sounds" +msgstr "Zvuky" + +#: ../finch/gntui.c:89 msgid "Statuses" msgstr "Stavy" @@ -1453,8 +1611,7 @@ "When the gnt clipboard contents change, the contents are made available to " "X, if possible." msgstr "" -"Keď sa obsah gnt schránky zmení, obsah bude dostupný " -"X, pokiaľ je to možné." +"Keď sa obsah gnt schránky zmení, obsah bude dostupný X, pokiaľ je to možné." #: ../finch/plugins/gntgf.c:231 #, c-format @@ -1520,7 +1677,7 @@ #: ../finch/plugins/gnthistory.c:116 ../pidgin/plugins/history.c:120 #, c-format msgid "<b>Conversation with %s on %s:</b><br>" -msgstr "<b>Rozhovor s %s na %s:</b><br>" +msgstr "<b>Rozhovor s %s, %s:</b><br>" #: ../finch/plugins/gnthistory.c:138 ../pidgin/plugins/history.c:147 msgid "History Plugin Requires Logging" @@ -1598,7 +1755,7 @@ msgstr "Chýba modul protokolu pre protokol %s" #: ../libpurple/account.c:1012 ../libpurple/connection.c:107 -#: ../pidgin/gtkblist.c:4010 +#: ../pidgin/gtkblist.c:4019 msgid "Connection Error" msgstr "Chyba pripojenia" @@ -1646,13 +1803,13 @@ #: ../libpurple/protocols/jabber/buddy.c:1462 #: ../libpurple/protocols/jabber/buddy.c:1479 #: ../libpurple/protocols/novell/novell.c:2831 -#: ../libpurple/protocols/qq/qq.c:230 ../pidgin/gtkft.c:159 +#: ../libpurple/protocols/qq/qq.c:232 ../pidgin/gtkft.c:159 msgid "Unknown" msgstr "Neznáma" #: ../libpurple/blist.c:521 ../libpurple/blist.c:1289 #: ../libpurple/blist.c:1518 ../libpurple/protocols/jabber/roster.c:68 -#: ../pidgin/gtkblist.c:5310 ../pidgin/plugins/gevolution/gevolution.c:96 +#: ../pidgin/gtkblist.c:5321 ../pidgin/plugins/gevolution/gevolution.c:96 #: ../pidgin/plugins/gevolution/gevo-util.c:64 msgid "Buddies" msgstr "Priatelia" @@ -1695,8 +1852,8 @@ msgid "The message is too large." msgstr "Správa je príliš dlhá." -#: ../libpurple/conversation.c:183 ../libpurple/protocols/bonjour/jabber.c:284 -#: ../libpurple/protocols/bonjour/jabber.c:326 +#: ../libpurple/conversation.c:183 ../libpurple/protocols/bonjour/jabber.c:255 +#: ../libpurple/protocols/bonjour/jabber.c:298 msgid "Unable to send message." msgstr "Nepodarilo sa odoslať správu." @@ -2122,15 +2279,15 @@ msgid "Old flat format" msgstr "Starý priamy formát" -#: ../libpurple/log.c:837 +#: ../libpurple/log.c:838 msgid "Logging of this conversation failed." msgstr "Zaznamenávanie tejto konverzácie zlyhalo." -#: ../libpurple/log.c:1280 +#: ../libpurple/log.c:1281 msgid "XML" msgstr "XML" -#: ../libpurple/log.c:1364 +#: ../libpurple/log.c:1365 #, c-format msgid "" "<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" @@ -2139,7 +2296,7 @@ "<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <AUTOMATICKÁ " "ODPOVEĎ>:</b></font> %s<br/>\n" -#: ../libpurple/log.c:1366 +#: ../libpurple/log.c:1367 #, c-format msgid "" "<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <AUTO-" @@ -2148,16 +2305,16 @@ "<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <AUTOMATICKÁ " "ODPOVEĎ>:</b></font> %s<br/>\n" -#: ../libpurple/log.c:1424 ../libpurple/log.c:1557 +#: ../libpurple/log.c:1425 ../libpurple/log.c:1558 msgid "<font color=\"red\"><b>Unable to find log path!</b></font>" msgstr "<font color=\"red\"><b>Nepodarilo sa nájsť cestu k záznamu!</b></font>" -#: ../libpurple/log.c:1436 ../libpurple/log.c:1566 +#: ../libpurple/log.c:1437 ../libpurple/log.c:1567 #, c-format msgid "<font color=\"red\"><b>Could not read file: %s</b></font>" msgstr "<font color=\"red\"><b>Nepodarilo sa čítať súbor: %s</b></font>" -#: ../libpurple/log.c:1498 +#: ../libpurple/log.c:1499 #, c-format msgid "(%s) %s <AUTO-REPLY>: %s\n" msgstr "(%s) %s <AUTOMATICKÁ ODPOVEĎ>: %s\n" @@ -2222,12 +2379,15 @@ #: ../libpurple/plugins/autoaccept.c:25 ../libpurple/plugins/autoaccept.c:26 msgid "Auto-accept file transfer requests from selected users." -msgstr "Automaticky potvrdiť požiadavky na prenos súborov od vybraných používateľov." +msgstr "" +"Automaticky potvrdiť požiadavky na prenos súborov od vybraných používateľov." #: ../libpurple/plugins/autoaccept.c:80 #, c-format msgid "Autoaccepted file transfer of \"%s\" from \"%s\" completed." -msgstr "Automaticky potvrdený prenos súboru \"%s\" od používateľa \"%s\" je dokončený." +msgstr "" +"Automaticky potvrdený prenos súboru \"%s\" od používateľa \"%s\" je " +"dokončený." #: ../libpurple/plugins/autoaccept.c:82 msgid "Autoaccept complete" @@ -2248,13 +2408,13 @@ #: ../libpurple/plugins/autoaccept.c:165 ../libpurple/plugins/idle.c:170 #: ../libpurple/plugins/idle.c:204 ../libpurple/plugins/idle.c:230 -#: ../libpurple/protocols/oscar/oscar.c:1458 -#: ../libpurple/protocols/oscar/oscar.c:2251 -#: ../libpurple/protocols/oscar/oscar.c:2298 -#: ../libpurple/protocols/oscar/oscar.c:5865 -#: ../libpurple/protocols/oscar/oscar.c:5920 -#: ../libpurple/protocols/oscar/oscar.c:6146 -#: ../libpurple/protocols/oscar/oscar.c:6216 ../libpurple/request.h:1387 +#: ../libpurple/protocols/oscar/oscar.c:1451 +#: ../libpurple/protocols/oscar/oscar.c:2243 +#: ../libpurple/protocols/oscar/oscar.c:2292 +#: ../libpurple/protocols/oscar/oscar.c:5834 +#: ../libpurple/protocols/oscar/oscar.c:5889 +#: ../libpurple/protocols/oscar/oscar.c:6115 +#: ../libpurple/protocols/oscar/oscar.c:6185 ../libpurple/request.h:1387 #: ../libpurple/request.h:1397 msgid "_Cancel" msgstr "_Zrušiť" @@ -2293,7 +2453,8 @@ "Notify with a popup when an autoaccepted file transfer is complete\n" "(only when there's no conversation with the sender)" msgstr "" -"Upozorniť vyskakovacím oknom, keď je dokončený automaticky potvrdený prenos súboru\n" +"Upozorniť vyskakovacím oknom, keď je dokončený automaticky potvrdený prenos " +"súboru\n" "(len ak neexistuje konverzácia s odosielateľom)" #: ../libpurple/plugins/buddynote.c:46 ../libpurple/protocols/msn/msn.c:1629 @@ -2317,20 +2478,21 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/buddynote.c:90 +#: ../libpurple/plugins/buddynote.c:90 ../pidgin/plugins/gtkbuddynote.c:71 msgid "Buddy Notes" msgstr "Poznámky o priateľovi" #. *< name #. *< version -#: ../libpurple/plugins/buddynote.c:92 +#: ../libpurple/plugins/buddynote.c:92 ../pidgin/plugins/gtkbuddynote.c:73 msgid "Store notes on particular buddies." msgstr "Ukladať poznámky do samotných priateľov." #. *< summary -#: ../libpurple/plugins/buddynote.c:93 +#: ../libpurple/plugins/buddynote.c:93 ../pidgin/plugins/gtkbuddynote.c:74 msgid "Adds the option to store notes for buddies on your buddy list." -msgstr "Pridáva možnosť ukladania poznámok o priateľoch vo vašom zozname priateľov." +msgstr "" +"Pridáva možnosť ukladania poznámok o priateľoch vo vašom zozname priateľov." #. *< type #. *< ui_requirement @@ -2480,7 +2642,7 @@ #: ../libpurple/plugins/joinpart.c:229 msgid "Join/Part Hiding Configuration" -msgstr "" +msgstr "Nastavenie skrývania prihlasovacích a odhlasovacích správ" #: ../libpurple/plugins/joinpart.c:233 msgid "Minimum Room Size" @@ -2498,14 +2660,14 @@ #. *< id #: ../libpurple/plugins/joinpart.c:270 msgid "Join/Part Hiding" -msgstr "" +msgstr "Skrývať prihlásenie a odhlásenie" #. *< name #. *< version #. * summary #: ../libpurple/plugins/joinpart.c:273 msgid "Hides extraneous join/part messages." -msgstr "" +msgstr "Skryť časté správy o prihlásení a odhlásení" #. * description #: ../libpurple/plugins/joinpart.c:275 @@ -2513,39 +2675,42 @@ "This plugin hides join/part messages in large rooms, except for those users " "actively taking part in a conversation." msgstr "" +"Tento modul skryje oznamy o prihlasovaní a odhlasovaní používateľov vo " +"veľkých diskusných miestnostiach, okrem používateľov, ktorí sa aktívne " +"zúčastňujú rozhovoru." #. This is used in the place of a timezone abbreviation if the #. * offset is way off. The user should never really see it, but #. * it's here just in case. The parens are to make it clear it's #. * not a real timezone. -#: ../libpurple/plugins/log_reader.c:492 +#: ../libpurple/plugins/log_reader.c:493 msgid "(UTC)" msgstr "(UTC)" -#: ../libpurple/plugins/log_reader.c:1573 +#: ../libpurple/plugins/log_reader.c:1577 msgid "User is offline." msgstr "Používateľ je odpojený." -#: ../libpurple/plugins/log_reader.c:1579 +#: ../libpurple/plugins/log_reader.c:1583 msgid "Auto-response sent:" msgstr "Odoslaná automatická odpoveď:" -#: ../libpurple/plugins/log_reader.c:1589 -#: ../libpurple/plugins/log_reader.c:1592 +#: ../libpurple/plugins/log_reader.c:1593 +#: ../libpurple/plugins/log_reader.c:1596 #: ../libpurple/plugins/statenotify.c:80 #, c-format msgid "%s has signed off." msgstr "Používateľ %s sa odhlásil." -#: ../libpurple/plugins/log_reader.c:1606 +#: ../libpurple/plugins/log_reader.c:1610 msgid "One or more messages may have been undeliverable." msgstr "Jedna alebo viac správ možno nebolo doručených." -#: ../libpurple/plugins/log_reader.c:1616 +#: ../libpurple/plugins/log_reader.c:1620 msgid "You were disconnected from the server." msgstr "Boli ste odpojený zo servra." -#: ../libpurple/plugins/log_reader.c:1624 +#: ../libpurple/plugins/log_reader.c:1628 msgid "" "You are currently disconnected. Messages will not be received unless you are " "logged in." @@ -2553,77 +2718,77 @@ "Momentálne ste odpojený. Až dokým sa neprihlásite vám nebudú doručované " "správy." -#: ../libpurple/plugins/log_reader.c:1639 +#: ../libpurple/plugins/log_reader.c:1643 msgid "Message could not be sent because the maximum length was exceeded." msgstr "Správa sa neodoslala, pretože bola prekročená maximálna dĺžka." -#: ../libpurple/plugins/log_reader.c:1644 +#: ../libpurple/plugins/log_reader.c:1648 msgid "Message could not be sent." msgstr "Vašu správu nebolo možné odoslať." #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2344 -#: ../libpurple/plugins/log_reader.c:2467 +#: ../libpurple/plugins/log_reader.c:2349 +#: ../libpurple/plugins/log_reader.c:2472 msgid "Adium" msgstr "Adium" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2357 -#: ../libpurple/plugins/log_reader.c:2472 +#: ../libpurple/plugins/log_reader.c:2362 +#: ../libpurple/plugins/log_reader.c:2477 msgid "Fire" msgstr "Fire" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2369 -#: ../libpurple/plugins/log_reader.c:2476 +#: ../libpurple/plugins/log_reader.c:2374 +#: ../libpurple/plugins/log_reader.c:2481 msgid "Messenger Plus!" msgstr "Messenger Plus!" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2383 -#: ../libpurple/plugins/log_reader.c:2481 +#: ../libpurple/plugins/log_reader.c:2388 +#: ../libpurple/plugins/log_reader.c:2486 msgid "QIP" msgstr "QIP" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2395 -#: ../libpurple/plugins/log_reader.c:2485 +#: ../libpurple/plugins/log_reader.c:2400 +#: ../libpurple/plugins/log_reader.c:2490 msgid "MSN Messenger" msgstr "MSN Messenger" #. The names of IM clients are marked for translation at the request of #. translators who wanted to transliterate them. Many translators #. choose to leave them alone. Choose what's best for your language. -#: ../libpurple/plugins/log_reader.c:2407 -#: ../libpurple/plugins/log_reader.c:2489 +#: ../libpurple/plugins/log_reader.c:2412 +#: ../libpurple/plugins/log_reader.c:2494 msgid "Trillian" msgstr "Trillian" #. Add general preferences. -#: ../libpurple/plugins/log_reader.c:2449 +#: ../libpurple/plugins/log_reader.c:2454 msgid "General Log Reading Configuration" msgstr "Všeobecné nastavenie čítania záznamov" -#: ../libpurple/plugins/log_reader.c:2453 +#: ../libpurple/plugins/log_reader.c:2458 msgid "Fast size calculations" msgstr "Rýchle výpočty veľkosti" -#: ../libpurple/plugins/log_reader.c:2457 +#: ../libpurple/plugins/log_reader.c:2462 msgid "Use name heuristics" msgstr "Použiť heurestiku pre názvy" #. Add Log Directory preferences. -#: ../libpurple/plugins/log_reader.c:2463 +#: ../libpurple/plugins/log_reader.c:2468 msgid "Log Directory" msgstr "Priečinok záznamov" @@ -2633,19 +2798,19 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/log_reader.c:2518 +#: ../libpurple/plugins/log_reader.c:2523 msgid "Log Reader" msgstr "Zobrazovač záznamov" #. *< name #. *< version #. * summary -#: ../libpurple/plugins/log_reader.c:2522 +#: ../libpurple/plugins/log_reader.c:2527 msgid "Includes other IM clients' logs in the log viewer." msgstr "V prehliadači záznamov prehliadať aj záznamy ostatných IM klientov." #. * description -#: ../libpurple/plugins/log_reader.c:2526 +#: ../libpurple/plugins/log_reader.c:2531 msgid "" "When viewing logs, this plugin will include logs from other IM clients. " "Currently, this includes Adium, MSN Messenger, and Trillian.\n" @@ -2693,21 +2858,22 @@ msgid "" "Prepends a newline to messages so that the rest of the message appears below " "the screen name in the conversation window." -msgstr "" +msgstr "Pridáva entery pred správy, čo spôsobí že správy sa zobrazujú pod používateľským menom priateľa" #: ../libpurple/plugins/offlinemsg.c:23 msgid "Offline Message Emulation" -msgstr "" +msgstr "Emulácia offline správ" #: ../libpurple/plugins/offlinemsg.c:25 ../libpurple/plugins/offlinemsg.c:26 msgid "Save messages sent to an offline user as pounce." -msgstr "" +msgstr "Ukladať správy ktoré boli odoslané odhláseným používateľom ako výzvu." #: ../libpurple/plugins/offlinemsg.c:95 msgid "" "The rest of the messages will be saved as pounce. You can edit/delete the " "pounce from the `Buddy Pounce' dialog." msgstr "" +"Zostatok správ bude uložený ako sledovanie. Sledovanie môžete pridať/odstrániť v dialógu `Sledovanie priateľov'." #: ../libpurple/plugins/offlinemsg.c:152 #, c-format @@ -2715,6 +2881,8 @@ "\"%s\" is currently offline. Do you want to save the rest of the messages in " "a pounce and automatically send them when \"%s\" logs back in?" msgstr "" +"Používateľ \"%s\" je momentálne odhlásený. Chcete uložiť zvyšok správ do sledovania, a " +"automaticky ich odoslať hneď, keď sa \"%s\" prihlási?" #: ../libpurple/plugins/offlinemsg.c:156 msgid "Offline Message" @@ -2722,7 +2890,7 @@ #: ../libpurple/plugins/offlinemsg.c:157 msgid "You can edit/delete the pounce from the `Buddy Pounces' dialog" -msgstr "" +msgstr "Sledovanie môžete pridať/odstrániť v dialógu `Sledovanie priateľov'" #: ../libpurple/plugins/offlinemsg.c:161 #: ../libpurple/protocols/msn/dialog.c:133 @@ -2787,8 +2955,8 @@ "This works for AIM, ICQ, XMPP, Sametime, and Yahoo!" msgstr "" "Spôsobí, že okná konverzácie sa objavia v momente, keď vám ostatní " -"používatelia začnú písať správu. " -"Funguje na AIM, ICQ, XMPP, Sametime, and Yahoo!" +"používatelia začnú písať správu. Funguje na AIM, ICQ, XMPP, Sametime, and " +"Yahoo!" #: ../libpurple/plugins/psychic.c:72 msgid "You feel a disturbance in the force..." @@ -2816,7 +2984,7 @@ #. *< dependencies #. *< priority #. *< id -#: ../libpurple/plugins/signals-test.c:684 +#: ../libpurple/plugins/signals-test.c:711 msgid "Signals Test" msgstr "Test signálov" @@ -2824,8 +2992,8 @@ #. *< version #. * summary #. * description -#: ../libpurple/plugins/signals-test.c:687 -#: ../libpurple/plugins/signals-test.c:689 +#: ../libpurple/plugins/signals-test.c:714 +#: ../libpurple/plugins/signals-test.c:716 msgid "Test to see that all signals are working properly." msgstr "Test, ktorý zisťuje, či všetky signály fungujú správne." @@ -2993,25 +3161,43 @@ "Unable to establish connection with the local mDNS server. Is it running?" msgstr "Nepodarilo sa založiť spojenie s miestnym mDNS serverom. Je spustený?" -#. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for -#. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message -#. Away stuff -#: ../libpurple/protocols/bonjour/bonjour.c:294 -#: ../libpurple/protocols/gg/gg.c:1009 ../libpurple/protocols/irc/irc.c:530 -#: ../libpurple/protocols/irc/msgs.c:310 -#: ../libpurple/protocols/jabber/buddy.c:1472 -#: ../libpurple/protocols/novell/novell.c:2819 -#: ../libpurple/protocols/oscar/oscar.c:733 -#: ../libpurple/protocols/oscar/oscar.c:4545 -#: ../libpurple/protocols/oscar/oscar.c:5611 -#: ../libpurple/protocols/qq/qq.c:180 ../libpurple/protocols/silc/buddy.c:1476 -#: ../libpurple/protocols/silc10/buddy.c:1476 -#: ../libpurple/protocols/yahoo/yahoo.c:3397 -#: ../libpurple/protocols/yahoo/yahoo.c:3470 ../libpurple/status.c:157 -#: ../pidgin/gtkdocklet.c:442 ../pidgin/gtkprefs.c:1932 -#: ../pidgin/gtkstatusbox.c:1056 -msgid "Away" -msgstr "Neprítomný" +#. Creating the options for the protocol +#: ../libpurple/protocols/bonjour/bonjour.c:344 +#: ../libpurple/protocols/bonjour/bonjour.c:614 +#: ../libpurple/protocols/gg/gg.c:627 +#: ../libpurple/protocols/jabber/jabber.c:828 +msgid "First name" +msgstr "Krstné meno" + +#: ../libpurple/protocols/bonjour/bonjour.c:346 +#: ../libpurple/protocols/bonjour/bonjour.c:617 +#: ../libpurple/protocols/gg/gg.c:622 +#: ../libpurple/protocols/jabber/jabber.c:833 +msgid "Last name" +msgstr "Priezvisko" + +#: ../libpurple/protocols/bonjour/bonjour.c:350 +#: ../libpurple/protocols/jabber/buddy.c:283 +#: ../libpurple/protocols/jabber/buddy.c:940 +#: ../libpurple/protocols/jabber/buddy.c:948 +#: ../libpurple/protocols/jabber/buddy.c:1629 +#: ../libpurple/protocols/silc/ops.c:1041 +#: ../libpurple/protocols/silc/util.c:555 +#: ../libpurple/protocols/silc10/ops.c:1075 +#: ../libpurple/protocols/silc10/util.c:551 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1061 +msgid "E-Mail" +msgstr "E-mail" + +#: ../libpurple/protocols/bonjour/bonjour.c:353 +#: ../libpurple/protocols/bonjour/bonjour.c:623 +msgid "AIM Account" +msgstr "AIM účet" + +#: ../libpurple/protocols/bonjour/bonjour.c:356 +#: ../libpurple/protocols/bonjour/bonjour.c:626 +msgid "XMPP Account" +msgstr "XMPP účet" #. *< type #. *< ui_requirement @@ -3023,38 +3209,25 @@ #. *< version #. * summary #. * description -#: ../libpurple/protocols/bonjour/bonjour.c:425 -#: ../libpurple/protocols/bonjour/bonjour.c:427 +#: ../libpurple/protocols/bonjour/bonjour.c:460 +#: ../libpurple/protocols/bonjour/bonjour.c:462 msgid "Bonjour Protocol Plugin" msgstr "Modul protokolu Bonjour" -#: ../libpurple/protocols/bonjour/bonjour.c:470 -#: ../libpurple/protocols/bonjour/bonjour.c:477 -#: ../libpurple/protocols/bonjour/bonjour.c:535 +#: ../libpurple/protocols/bonjour/bonjour.c:505 +#: ../libpurple/protocols/bonjour/bonjour.c:512 +#: ../libpurple/protocols/bonjour/bonjour.c:561 msgid "Purple Person" msgstr "Purple Osoba" #. Creating the user splits -#: ../libpurple/protocols/bonjour/bonjour.c:583 +#: ../libpurple/protocols/bonjour/bonjour.c:610 #: ../libpurple/protocols/silc/silc.c:1007 #: ../libpurple/protocols/silc10/silc.c:918 msgid "Hostname" msgstr "Názov hostiteľa" -#. Creating the options for the protocol -#: ../libpurple/protocols/bonjour/bonjour.c:587 -#: ../libpurple/protocols/gg/gg.c:627 -#: ../libpurple/protocols/jabber/jabber.c:828 -msgid "First name" -msgstr "Krstné meno" - -#: ../libpurple/protocols/bonjour/bonjour.c:590 -#: ../libpurple/protocols/gg/gg.c:622 -#: ../libpurple/protocols/jabber/jabber.c:833 -msgid "Last name" -msgstr "Priezvisko" - -#: ../libpurple/protocols/bonjour/bonjour.c:593 +#: ../libpurple/protocols/bonjour/bonjour.c:620 #: ../libpurple/protocols/gg/gg.c:472 #: ../libpurple/protocols/jabber/jabber.c:818 #: ../libpurple/protocols/silc/silc.c:770 @@ -3064,42 +3237,34 @@ msgid "E-mail" msgstr "E-mail" -#: ../libpurple/protocols/bonjour/bonjour.c:596 -msgid "AIM Account" -msgstr "AIM účet" - -#: ../libpurple/protocols/bonjour/bonjour.c:599 -msgid "XMPP Account" -msgstr "XMPP účet" - #: ../libpurple/protocols/bonjour/bonjour.h:33 msgid "Bonjour" msgstr "Bonjour" -#: ../libpurple/protocols/bonjour/jabber.c:395 +#: ../libpurple/protocols/bonjour/jabber.c:383 #, c-format msgid "%s has closed the conversation." msgstr "Používateľ %s uzavrel rozhovor." -#: ../libpurple/protocols/bonjour/jabber.c:441 -#: ../libpurple/protocols/bonjour/jabber.c:654 -#: ../libpurple/protocols/bonjour/jabber.c:679 +#: ../libpurple/protocols/bonjour/jabber.c:435 +#: ../libpurple/protocols/bonjour/jabber.c:658 +#: ../libpurple/protocols/bonjour/jabber.c:676 msgid "Unable to send the message, the conversation couldn't be started." msgstr "Nepodarilo sa odoslať správu, rozvor sa nezačal." -#: ../libpurple/protocols/bonjour/jabber.c:575 +#: ../libpurple/protocols/bonjour/jabber.c:581 msgid "Cannot open socket" msgstr "Nepodarilo sa otvoriť socket" -#: ../libpurple/protocols/bonjour/jabber.c:583 +#: ../libpurple/protocols/bonjour/jabber.c:589 msgid "Error setting socket options" msgstr "Chyba pri nastavovaní socketu" -#: ../libpurple/protocols/bonjour/jabber.c:607 +#: ../libpurple/protocols/bonjour/jabber.c:613 msgid "Could not bind socket to port" msgstr "Nepodarilo sa zviazať socket na port" -#: ../libpurple/protocols/bonjour/jabber.c:615 +#: ../libpurple/protocols/bonjour/jabber.c:621 msgid "Could not listen on socket" msgstr "Nepodarilo sa spustiť čakanie na sockete" @@ -3204,8 +3369,8 @@ #: ../libpurple/protocols/gg/gg.c:637 ../libpurple/protocols/gg/gg.c:1049 #: ../libpurple/protocols/gg/gg.c:1121 #: ../libpurple/protocols/jabber/jabber.c:843 -#: ../libpurple/protocols/oscar/oscar.c:3803 -#: ../libpurple/protocols/oscar/oscar.c:3816 +#: ../libpurple/protocols/oscar/oscar.c:3757 +#: ../libpurple/protocols/oscar/oscar.c:3770 #: ../libpurple/protocols/qq/buddy_info.c:49 msgid "City" msgstr "Mesto" @@ -3215,11 +3380,11 @@ msgstr "Rok narodenia" #: ../libpurple/protocols/gg/gg.c:645 ../libpurple/protocols/msn/msn.c:1558 -#: ../libpurple/protocols/oscar/oscar.c:3746 +#: ../libpurple/protocols/oscar/oscar.c:3700 #: ../libpurple/protocols/qq/buddy_info.c:46 -#: ../libpurple/protocols/qq/qq.c:224 ../libpurple/protocols/qq/qq.c:227 -#: ../libpurple/protocols/qq/qq.c:230 ../libpurple/protocols/qq/qq.c:234 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1067 +#: ../libpurple/protocols/qq/qq.c:226 ../libpurple/protocols/qq/qq.c:229 +#: ../libpurple/protocols/qq/qq.c:232 ../libpurple/protocols/qq/qq.c:236 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1091 msgid "Gender" msgstr "Pohlavie" @@ -3228,16 +3393,16 @@ msgstr "Muž alebo žena" #: ../libpurple/protocols/gg/gg.c:647 -#: ../libpurple/protocols/oscar/oscar.c:3746 +#: ../libpurple/protocols/oscar/oscar.c:3700 #: ../libpurple/protocols/qq/buddy_info.c:83 -#: ../libpurple/protocols/qq/qq.c:224 +#: ../libpurple/protocols/qq/qq.c:226 msgid "Male" msgstr "Muž" #: ../libpurple/protocols/gg/gg.c:648 -#: ../libpurple/protocols/oscar/oscar.c:3746 +#: ../libpurple/protocols/oscar/oscar.c:3700 #: ../libpurple/protocols/qq/buddy_info.c:84 -#: ../libpurple/protocols/qq/qq.c:227 +#: ../libpurple/protocols/qq/qq.c:229 msgid "Female" msgstr "Žena" @@ -3297,12 +3462,13 @@ #: ../libpurple/protocols/gg/gg.c:1003 #: ../libpurple/protocols/jabber/buddy.c:1466 #: ../libpurple/protocols/novell/novell.c:2828 -#: ../libpurple/protocols/oscar/oscar.c:828 -#: ../libpurple/protocols/oscar/oscar.c:5583 +#: ../libpurple/protocols/oscar/oscar.c:827 +#: ../libpurple/protocols/oscar/oscar.c:5552 #: ../libpurple/protocols/qq/qq.c:170 ../libpurple/protocols/qq/qq.c:177 -#: ../libpurple/protocols/yahoo/yahoo.c:2917 ../libpurple/status.c:153 -#: ../pidgin/gtkblist.c:3070 ../pidgin/gtkblist.c:3411 -#: ../pidgin/gtkdocklet.c:450 ../pidgin/gtkstatusbox.c:1059 +#: ../libpurple/protocols/qq/qq.c:292 +#: ../libpurple/protocols/yahoo/yahoo.c:2999 ../libpurple/status.c:153 +#: ../pidgin/gtkblist.c:3082 ../pidgin/gtkblist.c:3419 +#: ../pidgin/gtkdocklet.c:450 ../pidgin/gtkstatusbox.c:1060 msgid "Offline" msgstr "Odpojený" @@ -3311,21 +3477,42 @@ #: ../libpurple/protocols/msn/state.c:29 ../libpurple/protocols/msn/state.c:30 #: ../libpurple/protocols/msn/state.c:37 ../libpurple/protocols/msn/state.c:38 #: ../libpurple/protocols/novell/novell.c:2816 -#: ../libpurple/protocols/yahoo/yahoo.c:2919 ../libpurple/status.c:154 -#: ../pidgin/gtkdocklet.c:438 ../pidgin/gtkstatusbox.c:1055 +#: ../libpurple/protocols/qq/qq.c:280 +#: ../libpurple/protocols/yahoo/yahoo.c:3001 ../libpurple/status.c:154 +#: ../pidgin/gtkdocklet.c:438 ../pidgin/gtkstatusbox.c:1056 msgid "Available" msgstr "Pripojený" +#. get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for +#. * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message +#. Away stuff +#: ../libpurple/protocols/gg/gg.c:1009 ../libpurple/protocols/irc/irc.c:530 +#: ../libpurple/protocols/irc/msgs.c:310 +#: ../libpurple/protocols/jabber/buddy.c:1472 +#: ../libpurple/protocols/novell/novell.c:2819 +#: ../libpurple/protocols/oscar/oscar.c:732 +#: ../libpurple/protocols/oscar/oscar.c:4504 +#: ../libpurple/protocols/oscar/oscar.c:5580 +#: ../libpurple/protocols/qq/qq.c:180 ../libpurple/protocols/qq/qq.c:284 +#: ../libpurple/protocols/silc/buddy.c:1476 +#: ../libpurple/protocols/silc10/buddy.c:1476 +#: ../libpurple/protocols/yahoo/yahoo.c:3553 +#: ../libpurple/protocols/yahoo/yahoo.c:3627 ../libpurple/status.c:157 +#: ../pidgin/gtkdocklet.c:442 ../pidgin/gtkprefs.c:1934 +#: ../pidgin/gtkstatusbox.c:1057 +msgid "Away" +msgstr "Neprítomný" + #: ../libpurple/protocols/gg/gg.c:1038 ../libpurple/protocols/gg/gg.c:1112 -#: ../libpurple/protocols/oscar/oscar.c:2675 -#: ../libpurple/protocols/oscar/oscar.c:3713 +#: ../libpurple/protocols/oscar/oscar.c:2669 +#: ../libpurple/protocols/oscar/oscar.c:3667 msgid "UIN" msgstr "UIN" #: ../libpurple/protocols/gg/gg.c:1041 ../libpurple/protocols/gg/gg.c:1115 #: ../libpurple/protocols/jabber/buddy.c:1623 #: ../libpurple/protocols/jabber/buddy.c:1799 -#: ../libpurple/protocols/oscar/oscar.c:3724 +#: ../libpurple/protocols/oscar/oscar.c:3678 #: ../libpurple/protocols/silc/ops.c:990 #: ../libpurple/protocols/silc10/ops.c:1024 msgid "First Name" @@ -3336,7 +3523,7 @@ msgstr "Rok narodenia" #: ../libpurple/protocols/gg/gg.c:1106 ../libpurple/protocols/gg/gg.c:1175 -#: ../libpurple/protocols/oscar/oscar.c:3925 +#: ../libpurple/protocols/oscar/oscar.c:3879 msgid "Unable to display the search results." msgstr "Nebolo možné zobraziť výsledky vyhľadávania." @@ -3544,11 +3731,11 @@ #: ../libpurple/protocols/jabber/jabber.c:1046 #: ../libpurple/protocols/msn/session.c:345 #: ../libpurple/protocols/novell/novell.c:2182 -#: ../libpurple/protocols/oscar/oscar.c:1288 +#: ../libpurple/protocols/oscar/oscar.c:1285 #: ../libpurple/protocols/qq/qq.c:136 -#: ../libpurple/protocols/sametime/sametime.c:3723 -#: ../libpurple/protocols/simple/simple.c:1671 -#: ../libpurple/protocols/yahoo/yahoo.c:2762 +#: ../libpurple/protocols/sametime/sametime.c:3724 +#: ../libpurple/protocols/simple/simple.c:1676 +#: ../libpurple/protocols/yahoo/yahoo.c:2844 #: ../libpurple/protocols/zephyr/zephyr.c:1621 ../pidgin/gtkstatusbox.c:661 msgid "Connecting" msgstr "Pripája sa" @@ -3561,12 +3748,12 @@ #: ../libpurple/protocols/irc/irc.c:338 #: ../libpurple/protocols/simple/simple.c:464 -#: ../libpurple/protocols/simple/simple.c:1586 +#: ../libpurple/protocols/simple/simple.c:1591 msgid "Couldn't create socket" msgstr "Nepodarilo sa vytvoriť soket" #: ../libpurple/protocols/irc/irc.c:416 -#: ../libpurple/protocols/oscar/oscar.c:1284 +#: ../libpurple/protocols/oscar/oscar.c:1281 msgid "Couldn't connect to host" msgstr "Nepodarilo sa pripojiť ku hostiteľovi" @@ -3592,7 +3779,7 @@ msgstr "Užívatelia" #: ../libpurple/protocols/irc/irc.c:778 -#: ../libpurple/protocols/sametime/sametime.c:3374 +#: ../libpurple/protocols/sametime/sametime.c:3375 #: ../libpurple/protocols/silc/chat.c:1415 #: ../libpurple/protocols/silc/ops.c:1389 #: ../libpurple/protocols/silc10/chat.c:1429 @@ -3621,23 +3808,23 @@ #. host to connect to #: ../libpurple/protocols/irc/irc.c:942 ../libpurple/protocols/irc/msgs.c:323 #: ../libpurple/protocols/msn/msn.c:2154 -#: ../libpurple/protocols/oscar/oscar.c:6650 -#: ../libpurple/protocols/qq/qq.c:756 -#: ../libpurple/protocols/sametime/sametime.c:5727 +#: ../libpurple/protocols/oscar/oscar.c:6619 +#: ../libpurple/protocols/qq/qq.c:755 +#: ../libpurple/protocols/sametime/sametime.c:5728 #: ../libpurple/protocols/silc/ops.c:1249 #: ../libpurple/protocols/silc/ops.c:1341 #: ../libpurple/protocols/silc10/ops.c:1244 #: ../libpurple/protocols/silc10/ops.c:1347 -#: ../libpurple/protocols/simple/simple.c:1850 +#: ../libpurple/protocols/simple/simple.c:1855 #: ../libpurple/protocols/toc/toc.c:2327 msgid "Server" msgstr "Server" #. port to connect to #: ../libpurple/protocols/irc/irc.c:945 ../libpurple/protocols/msn/msn.c:2159 -#: ../libpurple/protocols/oscar/oscar.c:6653 -#: ../libpurple/protocols/qq/qq.c:759 -#: ../libpurple/protocols/sametime/sametime.c:5732 +#: ../libpurple/protocols/oscar/oscar.c:6622 +#: ../libpurple/protocols/qq/qq.c:758 +#: ../libpurple/protocols/sametime/sametime.c:5733 #: ../libpurple/protocols/silc/silc.c:1918 #: ../libpurple/protocols/silc10/silc.c:1861 #: ../libpurple/protocols/toc/toc.c:2331 @@ -3663,7 +3850,7 @@ #: ../libpurple/protocols/silc10/ops.c:1343 #: ../libpurple/protocols/silc10/silc.c:916 msgid "Username" -msgstr "Používateľské meno" +msgstr "Prihlasovacie meno" #: ../libpurple/protocols/irc/irc.c:954 ../libpurple/protocols/irc/msgs.c:317 #: ../libpurple/protocols/silc/silc.c:1009 @@ -3706,7 +3893,7 @@ msgstr " <i>(identifikovaný)</i>" #: ../libpurple/protocols/irc/msgs.c:303 -#: ../libpurple/protocols/oscar/oscar.c:3714 +#: ../libpurple/protocols/oscar/oscar.c:3668 #: ../libpurple/protocols/silc/ops.c:1418 #: ../libpurple/protocols/silc10/ops.c:1414 msgid "Nick" @@ -3989,7 +4176,7 @@ "names [kanál]: Zobrazí názvy používateľov nachádzajúcich sa na kanáli." #: ../libpurple/protocols/irc/parse.c:137 -#: ../libpurple/protocols/jabber/jabber.c:1813 +#: ../libpurple/protocols/jabber/jabber.c:1830 msgid "nick <new nickname>: Change your nickname." msgstr "nick <nová prezývka>: Zmení vašu prezývku." @@ -4096,7 +4283,8 @@ #: ../libpurple/protocols/irc/parse.c:155 msgid "whowas <nick>: Get information on a user that has logged off." -msgstr "whowas <nick>: Zobrazí informácie o používateľovi, ktorý sa odhlásil." +msgstr "" +"whowas <nick>: Zobrazí informácie o používateľovi, ktorý sa odhlásil." #: ../libpurple/protocols/irc/parse.c:465 #, c-format @@ -4183,7 +4371,7 @@ #: ../libpurple/protocols/jabber/buddy.c:271 #: ../libpurple/protocols/jabber/buddy.c:825 -#: ../libpurple/protocols/sametime/sametime.c:4128 +#: ../libpurple/protocols/sametime/sametime.c:4129 #: ../libpurple/protocols/silc/ops.c:986 #: ../libpurple/protocols/silc10/ops.c:1020 msgid "Full Name" @@ -4244,18 +4432,6 @@ msgid "Telephone" msgstr "Telefón" -#: ../libpurple/protocols/jabber/buddy.c:283 -#: ../libpurple/protocols/jabber/buddy.c:940 -#: ../libpurple/protocols/jabber/buddy.c:948 -#: ../libpurple/protocols/jabber/buddy.c:1629 -#: ../libpurple/protocols/silc/ops.c:1041 -#: ../libpurple/protocols/silc/util.c:555 -#: ../libpurple/protocols/silc10/ops.c:1075 -#: ../libpurple/protocols/silc10/util.c:551 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1037 -msgid "E-Mail" -msgstr "E-mail" - #: ../libpurple/protocols/jabber/buddy.c:284 #: ../libpurple/protocols/jabber/buddy.c:963 msgid "Organization Name" @@ -4274,13 +4450,13 @@ #: ../libpurple/protocols/jabber/buddy.c:288 #: ../libpurple/protocols/jabber/buddy.c:859 #: ../libpurple/protocols/msn/msn.c:1627 -#: ../libpurple/protocols/oscar/oscar.c:3763 +#: ../libpurple/protocols/oscar/oscar.c:3717 msgid "Birthday" msgstr "Narodeniny" #: ../libpurple/protocols/jabber/buddy.c:289 #: ../libpurple/protocols/jabber/buddy.c:979 -#: ../libpurple/protocols/jabber/chat.c:775 ../pidgin/gtkblist.c:3081 +#: ../libpurple/protocols/jabber/chat.c:775 ../pidgin/gtkblist.c:3093 #: ../pidgin/gtkprefs.c:738 msgid "Description" msgstr "Popis" @@ -4331,8 +4507,8 @@ #: ../libpurple/protocols/jabber/buddy.c:879 #: ../libpurple/protocols/jabber/jabber.c:838 -#: ../libpurple/protocols/oscar/oscar.c:3802 -#: ../libpurple/protocols/oscar/oscar.c:3815 +#: ../libpurple/protocols/oscar/oscar.c:3756 +#: ../libpurple/protocols/oscar/oscar.c:3769 #: ../libpurple/protocols/qq/buddy_info.c:56 #: ../libpurple/protocols/silc/ops.c:1030 #: ../libpurple/protocols/silc10/ops.c:1064 @@ -4386,9 +4562,9 @@ #: ../libpurple/protocols/jabber/buddy.c:1476 #: ../libpurple/protocols/jabber/jabber.c:1282 -#: ../libpurple/protocols/oscar/oscar.c:727 -#: ../libpurple/protocols/oscar/oscar.c:5787 -#: ../libpurple/protocols/sametime/sametime.c:3297 +#: ../libpurple/protocols/oscar/oscar.c:726 +#: ../libpurple/protocols/oscar/oscar.c:5756 +#: ../libpurple/protocols/sametime/sametime.c:3298 msgid "Do Not Disturb" msgstr "Nerušiť" @@ -4398,7 +4574,7 @@ #: ../libpurple/protocols/jabber/buddy.c:1625 #: ../libpurple/protocols/jabber/buddy.c:1804 -#: ../libpurple/protocols/oscar/oscar.c:3725 +#: ../libpurple/protocols/oscar/oscar.c:3679 msgid "Last Name" msgstr "Priezvisko" @@ -4432,12 +4608,13 @@ #: ../libpurple/protocols/jabber/buddy.c:1794 msgid "Fill in one or more fields to search for any matching XMPP users." -msgstr "Vyplňte jedno alebo viac políčok na hľadanie vyhovujúcich XMPP používateľov." +msgstr "" +"Vyplňte jedno alebo viac políčok na hľadanie vyhovujúcich XMPP používateľov." #: ../libpurple/protocols/jabber/buddy.c:1814 #: ../libpurple/protocols/novell/novell.c:1488 -#: ../libpurple/protocols/oscar/oscar.c:3728 -#: ../libpurple/protocols/oscar/oscar.c:3737 +#: ../libpurple/protocols/oscar/oscar.c:3682 +#: ../libpurple/protocols/oscar/oscar.c:3691 msgid "E-Mail Address" msgstr "E-mailová adresa" @@ -4450,10 +4627,10 @@ #: ../libpurple/protocols/jabber/buddy.c:1825 #: ../libpurple/protocols/qq/group.c:123 #: ../libpurple/protocols/qq/group_im.c:147 -#: ../libpurple/protocols/qq/sys_msg.c:176 -#: ../libpurple/protocols/qq/sys_msg.c:253 -#: ../libpurple/protocols/qq/sys_msg.c:271 -#: ../libpurple/protocols/sametime/sametime.c:5611 +#: ../libpurple/protocols/qq/sys_msg.c:174 +#: ../libpurple/protocols/qq/sys_msg.c:250 +#: ../libpurple/protocols/qq/sys_msg.c:268 +#: ../libpurple/protocols/sametime/sametime.c:5612 #: ../pidgin/plugins/gevolution/add_buddy_dialog.c:470 #: ../pidgin/plugins/gevolution/assoc-buddy.c:356 msgid "Search" @@ -4476,7 +4653,7 @@ msgstr "Prehľadávať priečinok" #: ../libpurple/protocols/jabber/chat.c:41 -#: ../libpurple/protocols/oscar/oscar.c:5273 +#: ../libpurple/protocols/oscar/oscar.c:5242 #: ../libpurple/protocols/yahoo/yahoochat.c:962 msgid "_Room:" msgstr "Miestnosť:" @@ -4584,9 +4761,9 @@ msgstr "Chyba čítania" #: ../libpurple/protocols/jabber/jabber.c:467 -#: ../libpurple/protocols/oscar/flap_connection.c:386 -#: ../libpurple/protocols/yahoo/yahoo.c:2381 -#: ../libpurple/protocols/yahoo/yahoo.c:2413 +#: ../libpurple/protocols/oscar/flap_connection.c:394 +#: ../libpurple/protocols/yahoo/yahoo.c:2463 +#: ../libpurple/protocols/yahoo/yahoo.c:2495 #, c-format msgid "" "Could not establish a connection with the server:\n" @@ -4634,8 +4811,8 @@ msgstr "Už registrovaný" #: ../libpurple/protocols/jabber/jabber.c:848 -#: ../libpurple/protocols/oscar/oscar.c:3804 -#: ../libpurple/protocols/oscar/oscar.c:3817 +#: ../libpurple/protocols/oscar/oscar.c:3758 +#: ../libpurple/protocols/oscar/oscar.c:3771 msgid "State" msgstr "Štát" @@ -4669,7 +4846,7 @@ msgstr "Registrovať nový XMPP účet" #. Register button -#: ../libpurple/protocols/jabber/jabber.c:881 ../pidgin/gtkaccount.c:1518 +#: ../libpurple/protocols/jabber/jabber.c:881 ../pidgin/gtkaccount.c:1523 msgid "Register" msgstr "Register" @@ -4690,8 +4867,8 @@ #: ../libpurple/protocols/jabber/jabber.c:1502 #: ../libpurple/protocols/jabber/jabber.c:1543 #: ../libpurple/protocols/jabber/jabber.c:1579 -#: ../libpurple/protocols/oscar/oscar.c:826 -#: ../libpurple/protocols/oscar/oscar.c:5581 +#: ../libpurple/protocols/oscar/oscar.c:825 +#: ../libpurple/protocols/oscar/oscar.c:5550 msgid "Not Authorized" msgstr "Neautorizovaný" @@ -4752,7 +4929,7 @@ msgstr "Zadajte, prosím, vaše nové heslo" #: ../libpurple/protocols/jabber/jabber.c:1394 -#: ../libpurple/protocols/oscar/oscar.c:6367 +#: ../libpurple/protocols/oscar/oscar.c:6336 #: ../libpurple/protocols/silc/silc.c:1093 #: ../libpurple/protocols/silc10/silc.c:1004 msgid "Set User Info..." @@ -4760,7 +4937,7 @@ #. if (js->protocol_options & CHANGE_PASSWORD) { #: ../libpurple/protocols/jabber/jabber.c:1399 -#: ../libpurple/protocols/oscar/oscar.c:6378 +#: ../libpurple/protocols/oscar/oscar.c:6347 #: ../libpurple/protocols/silc/silc.c:1089 #: ../libpurple/protocols/silc10/silc.c:1000 msgid "Change Password..." @@ -4970,61 +5147,61 @@ msgid "Stream Error" msgstr "Chyba prúdu" -#: ../libpurple/protocols/jabber/jabber.c:1670 +#: ../libpurple/protocols/jabber/jabber.c:1686 #, c-format msgid "Unable to ban user %s" msgstr "Nedá sa udeliť zákaz pre používateľa %s" -#: ../libpurple/protocols/jabber/jabber.c:1690 +#: ../libpurple/protocols/jabber/jabber.c:1706 #, c-format msgid "Unknown affiliation: \"%s\"" msgstr "Neznáme pričlenenie: \"%s\"" -#: ../libpurple/protocols/jabber/jabber.c:1695 +#: ../libpurple/protocols/jabber/jabber.c:1711 #, c-format msgid "Unable to affiliate user %s as \"%s\"" msgstr "Používateľ %s sa nedá pričleniť ako \"%s\"" -#: ../libpurple/protocols/jabber/jabber.c:1714 +#: ../libpurple/protocols/jabber/jabber.c:1730 #, c-format msgid "Unknown role: \"%s\"" msgstr "Neznáma úloha: \"%s\"" -#: ../libpurple/protocols/jabber/jabber.c:1721 +#: ../libpurple/protocols/jabber/jabber.c:1735 #, c-format msgid "Unable to set role \"%s\" for user: %s" msgstr "Nepodarilo sa nastaviť úlohu \"%s\" pre používateľa: %s" -#: ../libpurple/protocols/jabber/jabber.c:1774 +#: ../libpurple/protocols/jabber/jabber.c:1788 #, c-format msgid "Unable to kick user %s" msgstr "Nepodarilo sa vykopnúť používateľa %s" -#: ../libpurple/protocols/jabber/jabber.c:1805 +#: ../libpurple/protocols/jabber/jabber.c:1822 msgid "config: Configure a chat room." msgstr "config: Nastavenie miestnosti chatu." -#: ../libpurple/protocols/jabber/jabber.c:1809 +#: ../libpurple/protocols/jabber/jabber.c:1826 msgid "configure: Configure a chat room." msgstr "configure: Nastavenie miestnosti chatu." -#: ../libpurple/protocols/jabber/jabber.c:1818 +#: ../libpurple/protocols/jabber/jabber.c:1835 msgid "part [room]: Leave the room." msgstr "part [miestnosť]: Opustí miestnosť." -#: ../libpurple/protocols/jabber/jabber.c:1823 +#: ../libpurple/protocols/jabber/jabber.c:1840 msgid "register: Register with a chat room." msgstr "register: Zaregistrovať sa v chatovacej miestnosti." -#: ../libpurple/protocols/jabber/jabber.c:1829 +#: ../libpurple/protocols/jabber/jabber.c:1846 msgid "topic [new topic]: View or change the topic." msgstr "topic [nová téma]: Zobrazí alebo zmení tému." -#: ../libpurple/protocols/jabber/jabber.c:1835 +#: ../libpurple/protocols/jabber/jabber.c:1852 msgid "ban <user> [room]: Ban a user from the room." msgstr "ban <používateľ> [miestnosť]: Vykázať používateľa z miestnosti." -#: ../libpurple/protocols/jabber/jabber.c:1841 +#: ../libpurple/protocols/jabber/jabber.c:1858 msgid "" "affiliate <user> <owner|admin|member|outcast|none>: Set a user's " "affiliation with the room." @@ -5032,7 +5209,7 @@ "affiliate <používateľ> <owner|admin|member|outcast|none>: " "Nastaví používateľové pričlenenie v miestnosti." -#: ../libpurple/protocols/jabber/jabber.c:1847 +#: ../libpurple/protocols/jabber/jabber.c:1864 msgid "" "role <user> <moderator|participant|visitor|none>: Set a user's " "role in the room." @@ -5040,20 +5217,20 @@ "role <používateľ> <moderator|participant|visitor|none>: Nastaví " "postavenie používateľa v miestnosti." -#: ../libpurple/protocols/jabber/jabber.c:1853 +#: ../libpurple/protocols/jabber/jabber.c:1870 msgid "invite <user> [message]: Invite a user to the room." msgstr "invite <user> [správa]: Pozve používateľa do miestnosti." -#: ../libpurple/protocols/jabber/jabber.c:1859 +#: ../libpurple/protocols/jabber/jabber.c:1876 msgid "join: <room> [server]: Join a chat on this server." msgstr "join: <room> [server]: Pripojí sa na chat na tomto serveri." -#: ../libpurple/protocols/jabber/jabber.c:1865 +#: ../libpurple/protocols/jabber/jabber.c:1882 msgid "kick <user> [room]: Kick a user from the room." msgstr "" "kick <používateľ> [miestnosť]: Vykopne používateľa z miestnosti." -#: ../libpurple/protocols/jabber/jabber.c:1870 +#: ../libpurple/protocols/jabber/jabber.c:1887 msgid "" "msg <user> <message>: Send a private message to another user." msgstr "" @@ -5089,7 +5266,7 @@ msgstr "Povoliť plaintextovú autentifikáciu cez nezašifrované spojenia" #: ../libpurple/protocols/jabber/libxmpp.c:216 -#: ../libpurple/protocols/simple/simple.c:1856 +#: ../libpurple/protocols/simple/simple.c:1861 msgid "Connect port" msgstr "Port pripojenia" @@ -5138,16 +5315,16 @@ msgid "XML Parse error" msgstr "Chyba pri spracovaní XML" -#: ../libpurple/protocols/jabber/presence.c:290 +#: ../libpurple/protocols/jabber/presence.c:292 msgid "Unknown Error in presence" msgstr "Prítomná neznáma chyba" -#: ../libpurple/protocols/jabber/presence.c:364 -#: ../libpurple/protocols/jabber/presence.c:365 +#: ../libpurple/protocols/jabber/presence.c:366 +#: ../libpurple/protocols/jabber/presence.c:367 msgid "Create New Room" msgstr "Vytvoriť novú miestnosť" -#: ../libpurple/protocols/jabber/presence.c:366 +#: ../libpurple/protocols/jabber/presence.c:368 msgid "" "You are creating a new room. Would you like to configure it, or accept the " "default settings?" @@ -5155,20 +5332,20 @@ "Vytvárate novú miestnosť. Chceli by ste ju nastaviť, alebo prijmete " "štandardné nastavenia?" -#: ../libpurple/protocols/jabber/presence.c:372 +#: ../libpurple/protocols/jabber/presence.c:374 msgid "_Configure Room" msgstr "Konfigurovať miestnosť" -#: ../libpurple/protocols/jabber/presence.c:373 +#: ../libpurple/protocols/jabber/presence.c:375 msgid "_Accept Defaults" msgstr "_Prijať štandardné" -#: ../libpurple/protocols/jabber/presence.c:409 +#: ../libpurple/protocols/jabber/presence.c:417 #, c-format msgid "Error in chat %s" msgstr "Chyba v chate %s" -#: ../libpurple/protocols/jabber/presence.c:412 +#: ../libpurple/protocols/jabber/presence.c:421 #, c-format msgid "Error joining chat %s" msgstr "Chyba pripojenia na chat %s" @@ -5197,16 +5374,18 @@ #: ../libpurple/protocols/jabber/si.c:836 #, c-format msgid "Unable to send file to %s, not subscribed to user presence" -msgstr "Používateľovi %s nie je možné odoslať súbor, nie je zapísaný v prítomných používateľoch." +msgstr "" +"Používateľovi %s nie je možné odoslať súbor, nie je zapísaný v prítomných " +"používateľoch." #: ../libpurple/protocols/jabber/si.c:851 #, c-format msgid "Please select which resource of %s you would like to send a file to" -msgstr "" +msgstr "Vyberte, prosím, zdroj používateľa %s, na ktorý chcete odoslať súbor" #: ../libpurple/protocols/jabber/si.c:867 msgid "Select a Resource" -msgstr "" +msgstr "Vyberte zdroj" #: ../libpurple/protocols/msn/dialog.c:110 #, c-format @@ -5424,7 +5603,7 @@ msgstr "Server je príliš zaneprázdnený" #: ../libpurple/protocols/msn/error.c:222 -#: ../libpurple/protocols/oscar/oscar.c:1381 +#: ../libpurple/protocols/oscar/oscar.c:1378 #: ../libpurple/protocols/silc/silc.c:233 #: ../libpurple/protocols/silc10/ops.c:1709 #: ../libpurple/protocols/toc/toc.c:728 ../libpurple/proxy.c:1363 @@ -5526,8 +5705,8 @@ msgstr "Vás má" #: ../libpurple/protocols/msn/msn.c:551 ../libpurple/protocols/msn/state.c:33 -#: ../libpurple/protocols/yahoo/yahoo.c:2895 -#: ../libpurple/protocols/yahoo/yahoo.c:3504 +#: ../libpurple/protocols/yahoo/yahoo.c:2977 +#: ../libpurple/protocols/yahoo/yahoo.c:3661 msgid "Be Right Back" msgstr "Hneď som späť" @@ -5538,20 +5717,20 @@ #: ../libpurple/protocols/silc/silc.c:56 #: ../libpurple/protocols/silc10/buddy.c:1480 #: ../libpurple/protocols/silc10/silc.c:47 -#: ../libpurple/protocols/yahoo/yahoo.c:2897 -#: ../libpurple/protocols/yahoo/yahoo.c:3507 +#: ../libpurple/protocols/yahoo/yahoo.c:2979 +#: ../libpurple/protocols/yahoo/yahoo.c:3664 msgid "Busy" msgstr "Zaneprázdnený" #: ../libpurple/protocols/msn/msn.c:559 -#: ../libpurple/protocols/yahoo/yahoo.c:2905 -#: ../libpurple/protocols/yahoo/yahoo.c:3519 +#: ../libpurple/protocols/yahoo/yahoo.c:2987 +#: ../libpurple/protocols/yahoo/yahoo.c:3676 msgid "On the Phone" msgstr "Telefonujem" #: ../libpurple/protocols/msn/msn.c:563 -#: ../libpurple/protocols/yahoo/yahoo.c:2909 -#: ../libpurple/protocols/yahoo/yahoo.c:3525 +#: ../libpurple/protocols/yahoo/yahoo.c:2991 +#: ../libpurple/protocols/yahoo/yahoo.c:3682 msgid "Out to Lunch" msgstr "Na obede" @@ -5594,14 +5773,16 @@ #: ../libpurple/protocols/msn/msn.c:698 msgid "SSL support is needed for MSN. Please install a supported SSL library." -msgstr "Pre MSN je potrebná podpora SSL. Nainštalujte, prosím, podporovanú SSL knižnicu." +msgstr "" +"Pre MSN je potrebná podpora SSL. Nainštalujte, prosím, podporovanú SSL " +"knižnicu." #: ../libpurple/protocols/msn/msn.c:723 msgid "Failed to connect to server." msgstr "Nepodarilo sa spojiť so serverom." #: ../libpurple/protocols/msn/msn.c:1479 ../libpurple/protocols/msn/msn.c:1827 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:784 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:808 msgid "Error retrieving profile" msgstr "Chyba pri získavaní profilu" @@ -5611,22 +5792,22 @@ msgstr "Všeobecné" #: ../libpurple/protocols/msn/msn.c:1557 -#: ../libpurple/protocols/oscar/oscar.c:3769 +#: ../libpurple/protocols/oscar/oscar.c:3723 #: ../libpurple/protocols/qq/buddy_info.c:45 -#: ../libpurple/protocols/qq/qq.c:219 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1057 +#: ../libpurple/protocols/qq/qq.c:221 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1081 msgid "Age" msgstr "Vek" #: ../libpurple/protocols/msn/msn.c:1559 #: ../libpurple/protocols/qq/buddy_info.c:51 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1072 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1096 msgid "Occupation" msgstr "Zamestnanie" #: ../libpurple/protocols/msn/msn.c:1560 #: ../libpurple/protocols/novell/novell.c:1478 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1052 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1076 #: ../libpurple/protocols/zephyr/zephyr.c:798 #: ../libpurple/protocols/zephyr/zephyr.c:1215 msgid "Location" @@ -5645,10 +5826,10 @@ #: ../libpurple/protocols/msn/msn.c:1588 msgid "Social" -msgstr "" +msgstr "Sociálne" #: ../libpurple/protocols/msn/msn.c:1590 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1062 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1086 msgid "Marital Status" msgstr "Manželský stav" @@ -5682,7 +5863,7 @@ #: ../libpurple/protocols/msn/msn.c:1598 ../libpurple/protocols/msn/msn.c:1779 #: ../libpurple/protocols/msn/msn.c:1785 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1114 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1138 msgid "Favorite Quote" msgstr "Obľúbený citát" @@ -5707,7 +5888,7 @@ msgstr "Telefón domov 2" #: ../libpurple/protocols/msn/msn.c:1622 -#: ../libpurple/protocols/oscar/oscar.c:3807 +#: ../libpurple/protocols/oscar/oscar.c:3761 msgid "Home Address" msgstr "Adresa domov" @@ -5743,7 +5924,7 @@ msgstr "Názov zamestnania" #: ../libpurple/protocols/msn/msn.c:1647 -#: ../libpurple/protocols/oscar/oscar.c:3828 +#: ../libpurple/protocols/oscar/oscar.c:3782 msgid "Company" msgstr "Spoločnosť" @@ -5765,7 +5946,7 @@ msgstr "Telefón do práce 2" #: ../libpurple/protocols/msn/msn.c:1652 -#: ../libpurple/protocols/oscar/oscar.c:3820 +#: ../libpurple/protocols/oscar/oscar.c:3774 msgid "Work Address" msgstr "Adresa pracoviska" @@ -5831,7 +6012,7 @@ "pravdepodobne neexistuje." #: ../libpurple/protocols/msn/msn.c:1841 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1216 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1240 msgid "Profile URL" msgstr "Adresa profilu" @@ -5992,8 +6173,8 @@ msgstr "Chyba pri spracovávaní HTTP." #: ../libpurple/protocols/msn/session.c:307 -#: ../libpurple/protocols/oscar/oscar.c:3481 -#: ../libpurple/protocols/yahoo/yahoo.c:202 +#: ../libpurple/protocols/oscar/flap_connection.c:384 +#: ../libpurple/protocols/yahoo/yahoo.c:205 msgid "You have signed on from another location." msgstr "Prihlásili ste sa z iného miesta." @@ -6068,13 +6249,15 @@ #: ../libpurple/protocols/msn/switchboard.c:420 msgid "Message could not be sent because we are sending too quickly:" -msgstr "Správu sa nepodarilo odoslať, pretože posielami príliš rýchlo:" +msgstr "Správu sa nepodarilo odoslať, pretože posielame príliš rýchlo:" #: ../libpurple/protocols/msn/switchboard.c:424 msgid "" "Message could not be sent because we were unable to establish a session with " "the server. This is likely a server problem, try again in a few minutes:" msgstr "" +"Správu sa nepodarilo odoslať, pretože nebolo možné založiť sedenie na serveri. " +"Toto je pravdepodobne problém serveru, skúste to znovu o pár minút:" #: ../libpurple/protocols/msn/switchboard.c:431 msgid "" @@ -6090,22 +6273,22 @@ msgid "%s just sent you a Nudge!" msgstr "%s vám práve poslal Nudge!" -#: ../libpurple/protocols/msn/userlist.c:250 +#: ../libpurple/protocols/msn/userlist.c:252 #, c-format msgid "%s has added you to his or her buddy list." msgstr "Používateľ %s si vás pridal do svojho zoznamu priateľov." -#: ../libpurple/protocols/msn/userlist.c:319 +#: ../libpurple/protocols/msn/userlist.c:321 #, c-format msgid "%s has removed you from his or her buddy list." msgstr "Používateľ %s vás odstránil zo svojho zoznamu priateľov." -#: ../libpurple/protocols/msn/userlist.c:641 +#: ../libpurple/protocols/msn/userlist.c:643 #, c-format msgid "Unable to add \"%s\"." msgstr "Nepodarilo sa pridať \"%s\"." -#: ../libpurple/protocols/msn/userlist.c:643 +#: ../libpurple/protocols/msn/userlist.c:645 msgid "The screen name specified is invalid." msgstr "Zadané používateľské meno je chybné." @@ -6350,7 +6533,7 @@ msgstr "Pošta" #: ../libpurple/protocols/novell/novell.c:1502 -#: ../libpurple/protocols/sametime/sametime.c:4122 +#: ../libpurple/protocols/sametime/sametime.c:4123 msgid "User ID" msgstr "Používateľské ID" @@ -6466,18 +6649,18 @@ msgid "Server port" msgstr "Port serveru" -#: ../libpurple/protocols/oscar/flap_connection.c:379 -#: ../libpurple/protocols/yahoo/yahoo.c:2292 -#: ../libpurple/protocols/yahoo/yahoo.c:2459 +#: ../libpurple/protocols/oscar/flap_connection.c:387 +#: ../libpurple/protocols/yahoo/yahoo.c:2374 +#: ../libpurple/protocols/yahoo/yahoo.c:2541 #: ../libpurple/protocols/yahoo/ycht.c:481 ../libpurple/proxy.c:580 #: ../libpurple/proxy.c:1099 ../libpurple/proxy.c:1208 #: ../libpurple/proxy.c:1308 ../libpurple/proxy.c:1436 msgid "Server closed the connection." msgstr "Server zrušil pripojenie." -#: ../libpurple/protocols/oscar/flap_connection.c:381 -#: ../libpurple/protocols/yahoo/yahoo.c:2286 -#: ../libpurple/protocols/yahoo/yahoo.c:2453 ../libpurple/proxy.c:592 +#: ../libpurple/protocols/oscar/flap_connection.c:389 +#: ../libpurple/protocols/yahoo/yahoo.c:2368 +#: ../libpurple/protocols/yahoo/yahoo.c:2535 ../libpurple/proxy.c:592 #: ../libpurple/proxy.c:1111 ../libpurple/proxy.c:1220 #: ../libpurple/proxy.c:1320 ../libpurple/proxy.c:1448 #, c-format @@ -6488,7 +6671,7 @@ "Pripojenie k serveru bolo prerušené:\n" "%s" -#: ../libpurple/protocols/oscar/flap_connection.c:384 +#: ../libpurple/protocols/oscar/flap_connection.c:392 #: ../libpurple/proxy.c:1128 ../libpurple/proxy.c:1233 #: ../libpurple/proxy.c:1332 ../libpurple/proxy.c:1404 #: ../libpurple/proxy.c:1461 @@ -6526,7 +6709,7 @@ msgstr "Modul protokolu ICQ" #: ../libpurple/protocols/oscar/libicq.c:147 -#: ../libpurple/protocols/yahoo/yahoo.c:4111 +#: ../libpurple/protocols/yahoo/yahoo.c:4279 #: ../libpurple/protocols/zephyr/zephyr.c:2997 msgid "Encoding" msgstr "Kódovanie" @@ -6657,7 +6840,7 @@ msgid "Not while on AOL" msgstr "Nie, pokým ste na AOL" -#: ../libpurple/protocols/oscar/oscar.c:348 +#: ../libpurple/protocols/oscar/oscar.c:347 msgid "" "(There was an error receiving this message. The buddy you are speaking with " "is probably using a different encoding than expected. If you know what " @@ -6668,31 +6851,31 @@ "píšete zrejme používa neočakávané kódovanie. Ak viete, aké kódovanie " "používa, môžete ho nastaviť v pokročílých možnostiach vášho AIM/ICQ účtu.)" -#: ../libpurple/protocols/oscar/oscar.c:457 +#: ../libpurple/protocols/oscar/oscar.c:456 #, c-format msgid "" "(There was an error receiving this message. Either you and %s have " "different encodings selected, or %s has a buggy client.)" msgstr "" -"(Počas prijímania tejto správy sa vyskytla chyba. Buď máte nastavené " -"iné kódovanie ako %s, alebo má %s chybný klient.)" +"(Počas prijímania tejto správy sa vyskytla chyba. Buď máte nastavené iné " +"kódovanie ako %s, alebo má %s chybný klient.)" #. Label -#: ../libpurple/protocols/oscar/oscar.c:639 ../pidgin/gtkutils.c:2359 -#: ../pidgin/gtkutils.c:2389 +#: ../libpurple/protocols/oscar/oscar.c:638 ../pidgin/gtkutils.c:2376 +#: ../pidgin/gtkutils.c:2406 #: ../pidgin/plugins/gevolution/new_person_dialog.c:334 msgid "Buddy Icon" msgstr "Ikona priateľa" -#: ../libpurple/protocols/oscar/oscar.c:642 +#: ../libpurple/protocols/oscar/oscar.c:641 msgid "Voice" msgstr "Hlas" -#: ../libpurple/protocols/oscar/oscar.c:645 +#: ../libpurple/protocols/oscar/oscar.c:644 msgid "AIM Direct IM" msgstr "AIM - priame IM" -#: ../libpurple/protocols/oscar/oscar.c:648 +#: ../libpurple/protocols/oscar/oscar.c:647 #: ../libpurple/protocols/silc/silc.c:768 #: ../libpurple/protocols/silc/util.c:553 #: ../libpurple/protocols/silc10/silc.c:679 @@ -6700,124 +6883,125 @@ msgid "Chat" msgstr "Chat" -#: ../libpurple/protocols/oscar/oscar.c:651 -#: ../libpurple/protocols/oscar/oscar.c:5989 +#: ../libpurple/protocols/oscar/oscar.c:650 +#: ../libpurple/protocols/oscar/oscar.c:5958 msgid "Get File" msgstr "Získať súbor" -#: ../libpurple/protocols/oscar/oscar.c:658 +#: ../libpurple/protocols/oscar/oscar.c:657 msgid "Games" msgstr "Hry" -#: ../libpurple/protocols/oscar/oscar.c:661 +#: ../libpurple/protocols/oscar/oscar.c:660 msgid "Add-Ins" msgstr "Doplnky" -#: ../libpurple/protocols/oscar/oscar.c:664 +#: ../libpurple/protocols/oscar/oscar.c:663 msgid "Send Buddy List" msgstr "Odoslať zoznam priateľov" -#: ../libpurple/protocols/oscar/oscar.c:667 +#: ../libpurple/protocols/oscar/oscar.c:666 msgid "ICQ Direct Connect" msgstr "Priame spojenie ICQ" -#: ../libpurple/protocols/oscar/oscar.c:670 +#: ../libpurple/protocols/oscar/oscar.c:669 msgid "AP User" msgstr "AP používateľ" -#: ../libpurple/protocols/oscar/oscar.c:673 +#: ../libpurple/protocols/oscar/oscar.c:672 msgid "ICQ RTF" msgstr "ICQ RTF" -#: ../libpurple/protocols/oscar/oscar.c:676 +#: ../libpurple/protocols/oscar/oscar.c:675 msgid "Nihilist" msgstr "Nihilista" -#: ../libpurple/protocols/oscar/oscar.c:679 +#: ../libpurple/protocols/oscar/oscar.c:678 msgid "ICQ Server Relay" msgstr "ICQ Server Relay" -#: ../libpurple/protocols/oscar/oscar.c:682 +#: ../libpurple/protocols/oscar/oscar.c:681 msgid "Old ICQ UTF8" msgstr "Staré ICQ UTF8" -#: ../libpurple/protocols/oscar/oscar.c:685 +#: ../libpurple/protocols/oscar/oscar.c:684 msgid "Trillian Encryption" msgstr "Šifrovanie Trillian" -#: ../libpurple/protocols/oscar/oscar.c:688 +#: ../libpurple/protocols/oscar/oscar.c:687 msgid "ICQ UTF8" msgstr "ICQ UTF8" -#: ../libpurple/protocols/oscar/oscar.c:691 +#: ../libpurple/protocols/oscar/oscar.c:690 msgid "Hiptop" msgstr "Hiptom" -#: ../libpurple/protocols/oscar/oscar.c:694 +#: ../libpurple/protocols/oscar/oscar.c:693 msgid "Security Enabled" msgstr "Bezpečnosť zapnutá" -#: ../libpurple/protocols/oscar/oscar.c:697 +#: ../libpurple/protocols/oscar/oscar.c:696 msgid "Video Chat" msgstr "Video chat" -#: ../libpurple/protocols/oscar/oscar.c:701 +#: ../libpurple/protocols/oscar/oscar.c:700 msgid "iChat AV" msgstr "iChat AV" -#: ../libpurple/protocols/oscar/oscar.c:704 +#: ../libpurple/protocols/oscar/oscar.c:703 msgid "Live Video" msgstr "Živé video" -#: ../libpurple/protocols/oscar/oscar.c:707 +#: ../libpurple/protocols/oscar/oscar.c:706 msgid "Camera" msgstr "Kamera" -#: ../libpurple/protocols/oscar/oscar.c:725 -#: ../libpurple/protocols/oscar/oscar.c:5759 +#: ../libpurple/protocols/oscar/oscar.c:724 +#: ../libpurple/protocols/oscar/oscar.c:5728 msgid "Free For Chat" msgstr "Voľný pre rozhovor" -#: ../libpurple/protocols/oscar/oscar.c:729 -#: ../libpurple/protocols/oscar/oscar.c:5794 +#: ../libpurple/protocols/oscar/oscar.c:728 +#: ../libpurple/protocols/oscar/oscar.c:5763 msgid "Not Available" msgstr "Nedostupný" -#: ../libpurple/protocols/oscar/oscar.c:731 -#: ../libpurple/protocols/oscar/oscar.c:5780 +#: ../libpurple/protocols/oscar/oscar.c:730 +#: ../libpurple/protocols/oscar/oscar.c:5749 msgid "Occupied" msgstr "Zaneprázdnený" -#: ../libpurple/protocols/oscar/oscar.c:735 +#: ../libpurple/protocols/oscar/oscar.c:734 msgid "Web Aware" msgstr "Web aware" -#: ../libpurple/protocols/oscar/oscar.c:737 ../libpurple/protocols/qq/qq.c:183 -#: ../libpurple/protocols/yahoo/yahoo.c:2913 ../libpurple/status.c:156 -#: ../pidgin/gtkdocklet.c:446 ../pidgin/gtkstatusbox.c:1058 +#: ../libpurple/protocols/oscar/oscar.c:736 ../libpurple/protocols/qq/qq.c:183 +#: ../libpurple/protocols/qq/qq.c:288 +#: ../libpurple/protocols/yahoo/yahoo.c:2995 ../libpurple/status.c:156 +#: ../pidgin/gtkdocklet.c:446 ../pidgin/gtkstatusbox.c:1059 msgid "Invisible" msgstr "Neviditeľný" -#: ../libpurple/protocols/oscar/oscar.c:739 +#: ../libpurple/protocols/oscar/oscar.c:738 msgid "Online" msgstr "Pripojený" -#: ../libpurple/protocols/oscar/oscar.c:838 -#: ../libpurple/protocols/oscar/oscar.c:3721 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:697 ../pidgin/gtkprefs.c:1121 +#: ../libpurple/protocols/oscar/oscar.c:837 +#: ../libpurple/protocols/oscar/oscar.c:3675 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:721 ../pidgin/gtkprefs.c:1123 msgid "IP Address" msgstr "IP adresa" -#: ../libpurple/protocols/oscar/oscar.c:845 -#: ../libpurple/protocols/oscar/oscar.c:2867 +#: ../libpurple/protocols/oscar/oscar.c:844 +#: ../libpurple/protocols/oscar/oscar.c:2861 msgid "Warning Level" msgstr "Úroveň upozornenia" -#: ../libpurple/protocols/oscar/oscar.c:855 +#: ../libpurple/protocols/oscar/oscar.c:854 msgid "Buddy Comment" msgstr "Komentár priateľa" -#: ../libpurple/protocols/oscar/oscar.c:995 +#: ../libpurple/protocols/oscar/oscar.c:994 #, c-format msgid "" "Could not connect to authentication server:\n" @@ -6826,7 +7010,7 @@ "Nepodarilo sa pripojiť na autentifikačný server:\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:1003 +#: ../libpurple/protocols/oscar/oscar.c:1002 #, c-format msgid "" "Could not connect to BOS server:\n" @@ -6835,20 +7019,20 @@ "Nepodarilo sa pripojiť na BOS server:\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:1043 +#: ../libpurple/protocols/oscar/oscar.c:1042 msgid "Screen name sent" msgstr "Používateľské meno odoslané" -#: ../libpurple/protocols/oscar/oscar.c:1048 +#: ../libpurple/protocols/oscar/oscar.c:1047 msgid "Connection established, cookie sent" msgstr "Pripojenie založené, boli odoslané cookies" #. TODO: Don't call this with ssi -#: ../libpurple/protocols/oscar/oscar.c:1077 +#: ../libpurple/protocols/oscar/oscar.c:1076 msgid "Finalizing connection" msgstr "Dokončuje sa pripojenie" -#: ../libpurple/protocols/oscar/oscar.c:1261 +#: ../libpurple/protocols/oscar/oscar.c:1258 #, c-format msgid "" "Unable to login: Could not sign on as %s because the screen name is " @@ -6856,33 +7040,33 @@ "and contain only letters, numbers and spaces, or contain only numbers." msgstr "" "Nepodarilo sa prihlásiť: Nepodarilo sa prihlásiť ako %s, pretože " -"používateľské meno je chybné. Používateľské mená musia byť v tvare " -"e-mailovej adresy, čísla, alebo musí byť prvý znak písmeno a ostatné znaky " -"sú písmená, čísla a medzery." - -#: ../libpurple/protocols/oscar/oscar.c:1346 -#: ../libpurple/protocols/yahoo/yahoo.c:1934 +"používateľské meno je chybné. Používateľské mená musia byť v tvare e-" +"mailovej adresy, čísla, alebo musí byť prvý znak písmeno a ostatné znaky sú " +"písmená, čísla a medzery." + +#: ../libpurple/protocols/oscar/oscar.c:1343 +#: ../libpurple/protocols/yahoo/yahoo.c:2010 msgid "Invalid screen name." msgstr "Chybné používateľské meno." -#: ../libpurple/protocols/oscar/oscar.c:1353 +#: ../libpurple/protocols/oscar/oscar.c:1350 #: ../libpurple/protocols/qq/login_logout.c:483 -#: ../libpurple/protocols/simple/simple.c:1037 -#: ../libpurple/protocols/yahoo/yahoo.c:1952 +#: ../libpurple/protocols/simple/simple.c:1039 +#: ../libpurple/protocols/yahoo/yahoo.c:2031 msgid "Incorrect password." msgstr "Nesprávne heslo." -#: ../libpurple/protocols/oscar/oscar.c:1358 +#: ../libpurple/protocols/oscar/oscar.c:1355 msgid "Your account is currently suspended." msgstr "Váš účet je momentálne pozastavený" #. service temporarily unavailable -#: ../libpurple/protocols/oscar/oscar.c:1362 +#: ../libpurple/protocols/oscar/oscar.c:1359 msgid "The AOL Instant Messenger service is temporarily unavailable." msgstr "Služba AOL je dočasne nedostupná." -#: ../libpurple/protocols/oscar/oscar.c:1367 -#: ../libpurple/protocols/oscar/oscar.c:1378 +#: ../libpurple/protocols/oscar/oscar.c:1364 +#: ../libpurple/protocols/oscar/oscar.c:1375 msgid "" "You have been connecting and disconnecting too frequently. Wait ten minutes " "and try again. If you continue to try, you will need to wait even longer." @@ -6890,46 +7074,46 @@ "Pripájali a odpájali ste sa príliš často. Počkajte desať minút a skúste " "znova. Ak budete i naďalej skúšať, budete musieť čakať este dlhšie." -#: ../libpurple/protocols/oscar/oscar.c:1372 +#: ../libpurple/protocols/oscar/oscar.c:1369 #, c-format msgid "The client version you are using is too old. Please upgrade at %s" msgstr "" "Verzia klienta, ktorého používate, je príliš stará. Prosím, aktualizujte ho " "na %s" -#: ../libpurple/protocols/oscar/oscar.c:1412 +#: ../libpurple/protocols/oscar/oscar.c:1408 msgid "Could Not Connect" msgstr "Nepodarilo sa pripojiť" -#: ../libpurple/protocols/oscar/oscar.c:1417 +#: ../libpurple/protocols/oscar/oscar.c:1412 msgid "Received authorization" msgstr "Prijatá autorizácia" -#: ../libpurple/protocols/oscar/oscar.c:1440 +#: ../libpurple/protocols/oscar/oscar.c:1434 msgid "The SecurID key entered is invalid." msgstr "Zadaný kľúč SecurID je neplatný." -#: ../libpurple/protocols/oscar/oscar.c:1454 +#: ../libpurple/protocols/oscar/oscar.c:1447 msgid "Enter SecurID" msgstr "Zadajte SecurID" -#: ../libpurple/protocols/oscar/oscar.c:1455 +#: ../libpurple/protocols/oscar/oscar.c:1448 msgid "Enter the 6 digit number from the digital display." msgstr "Zadajte 6-ciferné číslo z digitálneho displeja." #. * #. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons. #. -#: ../libpurple/protocols/oscar/oscar.c:1457 -#: ../libpurple/protocols/oscar/oscar.c:2250 -#: ../libpurple/protocols/oscar/oscar.c:2297 -#: ../libpurple/protocols/oscar/oscar.c:5864 -#: ../libpurple/protocols/oscar/oscar.c:6145 ../libpurple/request.h:1387 +#: ../libpurple/protocols/oscar/oscar.c:1450 +#: ../libpurple/protocols/oscar/oscar.c:2242 +#: ../libpurple/protocols/oscar/oscar.c:2291 +#: ../libpurple/protocols/oscar/oscar.c:5833 +#: ../libpurple/protocols/oscar/oscar.c:6114 ../libpurple/request.h:1387 msgid "_OK" msgstr "_OK" -#: ../libpurple/protocols/oscar/oscar.c:1496 -#: ../libpurple/protocols/oscar/oscar.c:1539 +#: ../libpurple/protocols/oscar/oscar.c:1489 +#: ../libpurple/protocols/oscar/oscar.c:1532 #, c-format msgid "" "You may be disconnected shortly. You may want to use TOC until this is " @@ -6938,55 +7122,55 @@ "Zakrátko môžete byť odpojený. Možno budete chcieť použiť TOC kým sa toto " "neopraví. Navštívte %s pre aktualizácie." -#: ../libpurple/protocols/oscar/oscar.c:1499 -#: ../libpurple/protocols/oscar/oscar.c:1542 +#: ../libpurple/protocols/oscar/oscar.c:1492 +#: ../libpurple/protocols/oscar/oscar.c:1535 msgid "Unable to get a valid AIM login hash." msgstr "Nebolo možné získať platný AIM prihlasovací hash." -#: ../libpurple/protocols/oscar/oscar.c:1627 +#: ../libpurple/protocols/oscar/oscar.c:1620 #, c-format msgid "You may be disconnected shortly. Check %s for updates." msgstr "Zakrátko môžete byť odpojený. Skontrolujte aktualizácie na %s." -#: ../libpurple/protocols/oscar/oscar.c:1630 +#: ../libpurple/protocols/oscar/oscar.c:1623 msgid "Unable to get a valid login hash." msgstr "Nebolo možné získať platný prihlasovací hash." -#: ../libpurple/protocols/oscar/oscar.c:1659 +#: ../libpurple/protocols/oscar/oscar.c:1652 msgid "Password sent" msgstr "Heslo odoslané" -#: ../libpurple/protocols/oscar/oscar.c:1715 +#: ../libpurple/protocols/oscar/oscar.c:1708 msgid "Unable to initialize connection" msgstr "Spojenie sa nedá inicializovať" -#: ../libpurple/protocols/oscar/oscar.c:2220 +#: ../libpurple/protocols/oscar/oscar.c:2212 msgid "Please authorize me so I can add you to my buddy list." msgstr "" "Prosím, autorizujte ma, aby som si vás mohol pridať do svojho zoznamu " "priateľov." -#: ../libpurple/protocols/oscar/oscar.c:2248 +#: ../libpurple/protocols/oscar/oscar.c:2240 msgid "Authorization Request Message:" msgstr "Žiadosť o autorizáciu:" -#: ../libpurple/protocols/oscar/oscar.c:2249 +#: ../libpurple/protocols/oscar/oscar.c:2241 msgid "Please authorize me!" msgstr "Autorizujte ma, prosím!" +#: ../libpurple/protocols/oscar/oscar.c:2282 +#: ../libpurple/protocols/oscar/oscar.c:2290 +#: ../libpurple/protocols/oscar/oscar.c:2417 +#: ../libpurple/protocols/oscar/oscar.c:5211 +#: ../libpurple/protocols/yahoo/yahoo.c:1014 +msgid "No reason given." +msgstr "Nebol uvedený dôvod." + #: ../libpurple/protocols/oscar/oscar.c:2289 -#: ../libpurple/protocols/oscar/oscar.c:2296 -#: ../libpurple/protocols/oscar/oscar.c:2423 -#: ../libpurple/protocols/oscar/oscar.c:5242 -#: ../libpurple/protocols/yahoo/yahoo.c:987 -msgid "No reason given." -msgstr "Nebol uvedený dôvod." - -#: ../libpurple/protocols/oscar/oscar.c:2295 msgid "Authorization Denied Message:" msgstr "Správa zamietnutia autorizácie:" -#: ../libpurple/protocols/oscar/oscar.c:2423 +#: ../libpurple/protocols/oscar/oscar.c:2417 #, c-format msgid "" "The user %u has denied your request to add them to your buddy list for the " @@ -6997,18 +7181,18 @@ "nasledujúcich dôvodov:\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:2424 +#: ../libpurple/protocols/oscar/oscar.c:2418 msgid "ICQ authorization denied." msgstr "ICQ autorizácia zamietnutá." #. Someone has granted you authorization -#: ../libpurple/protocols/oscar/oscar.c:2431 +#: ../libpurple/protocols/oscar/oscar.c:2425 #, c-format msgid "The user %u has granted your request to add them to your buddy list." msgstr "" "Používateľ %u prijal vašu požiadavku o pridanie do vášho zoznamu priateľov." -#: ../libpurple/protocols/oscar/oscar.c:2439 +#: ../libpurple/protocols/oscar/oscar.c:2433 #, c-format msgid "" "You have received a special message\n" @@ -7021,7 +7205,7 @@ "od: %s [%s]\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:2447 +#: ../libpurple/protocols/oscar/oscar.c:2441 #, c-format msgid "" "You have received an ICQ page\n" @@ -7034,7 +7218,7 @@ "od: %s [%s]\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:2455 +#: ../libpurple/protocols/oscar/oscar.c:2449 #, c-format msgid "" "You have received an ICQ e-mail from %s [%s]\n" @@ -7047,24 +7231,24 @@ "Správa je:\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:2476 +#: ../libpurple/protocols/oscar/oscar.c:2470 #, c-format msgid "ICQ user %u has sent you a buddy: %s (%s)" msgstr "Používateľ protokolu ICQ, %u, vám poslal priateľa: %s (%s)" -#: ../libpurple/protocols/oscar/oscar.c:2482 +#: ../libpurple/protocols/oscar/oscar.c:2476 msgid "Do you want to add this buddy to your buddy list?" msgstr "Chcete pridať tohoto priateľa do svojho zoznamu priateľov?" -#: ../libpurple/protocols/oscar/oscar.c:2487 ../pidgin/gtkroomlist.c:308 +#: ../libpurple/protocols/oscar/oscar.c:2481 ../pidgin/gtkroomlist.c:308 msgid "_Add" msgstr "_Pridať" -#: ../libpurple/protocols/oscar/oscar.c:2488 +#: ../libpurple/protocols/oscar/oscar.c:2482 msgid "_Decline" msgstr "Odmietnuť" -#: ../libpurple/protocols/oscar/oscar.c:2572 +#: ../libpurple/protocols/oscar/oscar.c:2566 #, c-format msgid "You missed %hu message from %s because it was invalid." msgid_plural "You missed %hu messages from %s because they were invalid." @@ -7072,7 +7256,7 @@ msgstr[1] "Prišli ste o %hu správu od používateľa %s, pretože bola chybná." msgstr[2] "Prišli ste o %hu správy od používateľa %s, pretože boli chybné." -#: ../libpurple/protocols/oscar/oscar.c:2581 +#: ../libpurple/protocols/oscar/oscar.c:2575 #, c-format msgid "You missed %hu message from %s because it was too large." msgid_plural "You missed %hu messages from %s because they were too large." @@ -7083,7 +7267,7 @@ msgstr[2] "" "Prišli ste o %hu správy od používateľa %s, pretože boli príliš veľké." -#: ../libpurple/protocols/oscar/oscar.c:2590 +#: ../libpurple/protocols/oscar/oscar.c:2584 #, c-format msgid "" "You missed %hu message from %s because the rate limit has been exceeded." @@ -7099,7 +7283,7 @@ "Prišli ste o %hu správy od používateľa %s, pretože bol prekročený limit " "hodnotenia." -#: ../libpurple/protocols/oscar/oscar.c:2599 +#: ../libpurple/protocols/oscar/oscar.c:2593 #, c-format msgid "You missed %hu message from %s because he/she was too evil." msgid_plural "You missed %hu messages from %s because he/she was too evil." @@ -7107,7 +7291,7 @@ msgstr[1] "Prišli ste o %hu správu od používateľa %s, pretože je príliš zlý." msgstr[2] "Prišli ste o %hu správy od používateľa %s, pretože je príliš zlý." -#: ../libpurple/protocols/oscar/oscar.c:2608 +#: ../libpurple/protocols/oscar/oscar.c:2602 #, c-format msgid "You missed %hu message from %s because you are too evil." msgid_plural "You missed %hu messages from %s because you are too evil." @@ -7115,7 +7299,7 @@ msgstr[1] "Prišli ste o %hu správu od používateľa %s, pretože ste príliš zlý." msgstr[2] "Prišli ste o %hu správy od používateľa %s, pretože ste príliš zlý." -#: ../libpurple/protocols/oscar/oscar.c:2617 +#: ../libpurple/protocols/oscar/oscar.c:2611 #, c-format msgid "You missed %hu message from %s for an unknown reason." msgid_plural "You missed %hu messages from %s for an unknown reason." @@ -7124,55 +7308,55 @@ msgstr[2] "Z neznámeho dôvodu ste prišli o %hu správy od používateľa %s." #. Data is assumed to be the destination sn -#: ../libpurple/protocols/oscar/oscar.c:2772 +#: ../libpurple/protocols/oscar/oscar.c:2766 #, c-format msgid "Unable to send message: %s" msgstr "Nepodarilo sa odoslať správu: %s" -#: ../libpurple/protocols/oscar/oscar.c:2772 -#: ../libpurple/protocols/oscar/oscar.c:2777 -#: ../libpurple/protocols/oscar/oscar.c:2841 +#: ../libpurple/protocols/oscar/oscar.c:2766 +#: ../libpurple/protocols/oscar/oscar.c:2771 +#: ../libpurple/protocols/oscar/oscar.c:2835 msgid "Unknown reason." msgstr "Neznámy dôvod." -#: ../libpurple/protocols/oscar/oscar.c:2775 +#: ../libpurple/protocols/oscar/oscar.c:2769 #: ../libpurple/protocols/sametime/sametime.c:2409 #, c-format msgid "Unable to send message to %s:" msgstr "Nepodarilo sa odoslať správu používateľovi %s:" -#: ../libpurple/protocols/oscar/oscar.c:2841 +#: ../libpurple/protocols/oscar/oscar.c:2835 #, c-format msgid "User information not available: %s" msgstr "Podrobnosti o používateľovi nie sú dostupné: %s" -#: ../libpurple/protocols/oscar/oscar.c:2872 +#: ../libpurple/protocols/oscar/oscar.c:2866 msgid "Online Since" msgstr "Pripojený od" -#: ../libpurple/protocols/oscar/oscar.c:2877 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1161 +#: ../libpurple/protocols/oscar/oscar.c:2871 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1185 msgid "Member Since" msgstr "Členom od" -#: ../libpurple/protocols/oscar/oscar.c:2882 +#: ../libpurple/protocols/oscar/oscar.c:2876 msgid "Capabilities" msgstr "Schopnosti" -#: ../libpurple/protocols/oscar/oscar.c:2912 +#: ../libpurple/protocols/oscar/oscar.c:2906 msgid "Available Message" msgstr "Dostupná správa" -#: ../libpurple/protocols/oscar/oscar.c:2940 +#: ../libpurple/protocols/oscar/oscar.c:2934 msgid "Profile" msgstr "Profil" -#: ../libpurple/protocols/oscar/oscar.c:3020 +#: ../libpurple/protocols/oscar/oscar.c:3014 msgid "Your AIM connection may be lost." msgstr "Vaše AIM pripojenie môže byť stratené." #. The conversion failed! -#: ../libpurple/protocols/oscar/oscar.c:3208 +#: ../libpurple/protocols/oscar/oscar.c:3202 msgid "" "[Unable to display a message from this user because it contained invalid " "characters.]" @@ -7180,7 +7364,7 @@ "[Správa od používateľa obsahovala nesprávne znaky, preto ju nebolo možné " "zobraziť.]" -#: ../libpurple/protocols/oscar/oscar.c:3411 +#: ../libpurple/protocols/oscar/oscar.c:3366 msgid "" "The last action you attempted could not be performed because you are over " "the rate limit. Please wait 10 seconds and try again." @@ -7188,57 +7372,53 @@ "Akciu nebolo možné vykonať, pretože ste prekročili limit hodnotenia. Prosím, " "počkajte 10 sekúnd a skúste to znovu." -#: ../libpurple/protocols/oscar/oscar.c:3483 -msgid "You have been signed off for an unknown reason." -msgstr "Z neznámeho dôvodu ste boli odhlásení." - -#: ../libpurple/protocols/oscar/oscar.c:3496 +#: ../libpurple/protocols/oscar/oscar.c:3449 #: ../libpurple/protocols/toc/toc.c:977 #, c-format msgid "You have been disconnected from chat room %s." msgstr "Boli ste odpojení z miestnosti %s." -#: ../libpurple/protocols/oscar/oscar.c:3743 +#: ../libpurple/protocols/oscar/oscar.c:3697 #: ../libpurple/protocols/silc/util.c:585 #: ../libpurple/protocols/silc10/util.c:581 msgid "Mobile Phone" msgstr "Mobilný telefón" -#: ../libpurple/protocols/oscar/oscar.c:3773 +#: ../libpurple/protocols/oscar/oscar.c:3727 msgid "Personal Web Page" msgstr "Osobná web stránka" -#: ../libpurple/protocols/oscar/oscar.c:3797 +#: ../libpurple/protocols/oscar/oscar.c:3751 #: ../libpurple/protocols/qq/buddy_info.c:40 msgid "Additional Information" msgstr "Rozširujúce informácie" -#: ../libpurple/protocols/oscar/oscar.c:3805 -#: ../libpurple/protocols/oscar/oscar.c:3818 +#: ../libpurple/protocols/oscar/oscar.c:3759 +#: ../libpurple/protocols/oscar/oscar.c:3772 msgid "Zip Code" msgstr "Zip kód" -#: ../libpurple/protocols/oscar/oscar.c:3829 +#: ../libpurple/protocols/oscar/oscar.c:3783 msgid "Division" msgstr "Oddelenie" -#: ../libpurple/protocols/oscar/oscar.c:3830 +#: ../libpurple/protocols/oscar/oscar.c:3784 msgid "Position" msgstr "Pozícia" -#: ../libpurple/protocols/oscar/oscar.c:3832 +#: ../libpurple/protocols/oscar/oscar.c:3786 msgid "Web Page" msgstr "Webstránka" -#: ../libpurple/protocols/oscar/oscar.c:3835 +#: ../libpurple/protocols/oscar/oscar.c:3789 msgid "Work Information" msgstr "Pracovné informácie" -#: ../libpurple/protocols/oscar/oscar.c:3891 +#: ../libpurple/protocols/oscar/oscar.c:3845 msgid "Pop-Up Message" msgstr "Vyskakovacia správa" -#: ../libpurple/protocols/oscar/oscar.c:3931 +#: ../libpurple/protocols/oscar/oscar.c:3885 #, c-format msgid "The following screen name is associated with %s" msgid_plural "The following screen names are associated with %s" @@ -7246,29 +7426,29 @@ msgstr[1] "S %s je asociované nasledujúce používateľské meno" msgstr[2] "S %s sú asociované nasledujúce používateľské mená" -#: ../libpurple/protocols/oscar/oscar.c:3936 +#: ../libpurple/protocols/oscar/oscar.c:3890 msgid "Screen name" msgstr "Používateľské meno" -#: ../libpurple/protocols/oscar/oscar.c:3962 +#: ../libpurple/protocols/oscar/oscar.c:3916 #, c-format msgid "No results found for e-mail address %s" msgstr "Pre e-mailovú %s adresu neboli nájdené žiadne výsledky" -#: ../libpurple/protocols/oscar/oscar.c:3983 +#: ../libpurple/protocols/oscar/oscar.c:3937 #, c-format msgid "You should receive an e-mail asking to confirm %s." msgstr "Mali by ste prijať e-mail so žiadosťou o potvrdenie %s." -#: ../libpurple/protocols/oscar/oscar.c:3985 +#: ../libpurple/protocols/oscar/oscar.c:3939 msgid "Account Confirmation Requested" msgstr "Podvrdenie účtu bolo vyžiadané" -#: ../libpurple/protocols/oscar/oscar.c:4016 +#: ../libpurple/protocols/oscar/oscar.c:3970 msgid "Error Changing Account Info" msgstr "Chyba pri zmene podrobností účtu" -#: ../libpurple/protocols/oscar/oscar.c:4019 +#: ../libpurple/protocols/oscar/oscar.c:3973 #, c-format msgid "" "Error 0x%04x: Unable to format screen name because the requested screen name " @@ -7277,13 +7457,13 @@ "Chyba 0x%04x: Nepodarilo sa formátovať používateľské meno, pretože " "požadované používateľské meno sa líši od pôvodného." -#: ../libpurple/protocols/oscar/oscar.c:4022 +#: ../libpurple/protocols/oscar/oscar.c:3976 #, c-format msgid "Error 0x%04x: Unable to format screen name because it is invalid." msgstr "" "Chyba 0x%04x: Nepodarilo sa formátovať používateľské meno, pretože je chybné." -#: ../libpurple/protocols/oscar/oscar.c:4025 +#: ../libpurple/protocols/oscar/oscar.c:3979 #, c-format msgid "" "Error 0x%04x: Unable to format screen name because the requested screen name " @@ -7292,7 +7472,7 @@ "Chyba 0x%04x: Nepodarilo sa formátovať používateľské meno, pretože " "požadované používateľské meno je príliš dlhé." -#: ../libpurple/protocols/oscar/oscar.c:4028 +#: ../libpurple/protocols/oscar/oscar.c:3982 #, c-format msgid "" "Error 0x%04x: Unable to change e-mail address because there is already a " @@ -7301,7 +7481,7 @@ "Chyba 0x%04x: Nepodarilo sa zmeniť e-mailovú adresu, pretože toto " "používateľské meno už má požiadavku." -#: ../libpurple/protocols/oscar/oscar.c:4031 +#: ../libpurple/protocols/oscar/oscar.c:3985 #, c-format msgid "" "Error 0x%04x: Unable to change e-mail address because the given address has " @@ -7310,7 +7490,7 @@ "Chyba 0x%04x: e-mailová adresa sa nedá zmeniť, pretože daná adresa má so " "sebou asociovaných veľmi veľa zobrazovaných mien." -#: ../libpurple/protocols/oscar/oscar.c:4034 +#: ../libpurple/protocols/oscar/oscar.c:3988 #, c-format msgid "" "Error 0x%04x: Unable to change e-mail address because the given address is " @@ -7319,32 +7499,32 @@ "Chyba 0x%04x: Nepodarilo sa zmeniť e-mailovú adresu, pretože zadaná adresa " "je chybná." -#: ../libpurple/protocols/oscar/oscar.c:4037 +#: ../libpurple/protocols/oscar/oscar.c:3991 #, c-format msgid "Error 0x%04x: Unknown error." msgstr "Chyba 0x%04x: Neznáma chyba." -#: ../libpurple/protocols/oscar/oscar.c:4047 +#: ../libpurple/protocols/oscar/oscar.c:4001 #, c-format msgid "The e-mail address for %s is %s" msgstr "E-mailová adresa používateľa %s je %s" -#: ../libpurple/protocols/oscar/oscar.c:4049 +#: ../libpurple/protocols/oscar/oscar.c:4003 msgid "Account Info" msgstr "Podrobnosti o účte" -#: ../libpurple/protocols/oscar/oscar.c:4221 +#: ../libpurple/protocols/oscar/oscar.c:4175 msgid "" "Your IM Image was not sent. You must be Direct Connected to send IM Images." msgstr "" "Váš obrázok nebol odoslaný. Na odosielanie obrázkov v správach musíte byť " "priamo pripojený." -#: ../libpurple/protocols/oscar/oscar.c:4487 +#: ../libpurple/protocols/oscar/oscar.c:4446 msgid "Unable to set AIM profile." msgstr "Nepodarilo sa odoslať AIM profil." -#: ../libpurple/protocols/oscar/oscar.c:4488 +#: ../libpurple/protocols/oscar/oscar.c:4447 msgid "" "You have probably requested to set your profile before the login procedure " "completed. Your profile remains unset; try setting it again when you are " @@ -7354,7 +7534,7 @@ "procedúry prihlásenia. Váš profil zostáva nenastavený, skúste ho nastaviť " "znovu, keď budete plne pripojený." -#: ../libpurple/protocols/oscar/oscar.c:4502 +#: ../libpurple/protocols/oscar/oscar.c:4461 #, c-format msgid "" "The maximum profile length of %d byte has been exceeded. It has been " @@ -7363,17 +7543,20 @@ "The maximum profile length of %d bytes has been exceeded. It has been " "truncated for you." msgstr[0] "" -"Maximálna dĺžka profilu, %d bajtov, bola prekročená. Profil bol automaticky skrátený." +"Maximálna dĺžka profilu, %d bajtov, bola prekročená. Profil bol automaticky " +"skrátený." msgstr[1] "" -"Maximálna dĺžka profilu, %d bajt, bola prekročená. Profil bol automaticky skrátený." +"Maximálna dĺžka profilu, %d bajt, bola prekročená. Profil bol automaticky " +"skrátený." msgstr[2] "" -"Maximálna dĺžka profilu, %d bajty, bola prekročená. Profil bol automaticky skrátený." - -#: ../libpurple/protocols/oscar/oscar.c:4507 +"Maximálna dĺžka profilu, %d bajty, bola prekročená. Profil bol automaticky " +"skrátený." + +#: ../libpurple/protocols/oscar/oscar.c:4466 msgid "Profile too long." msgstr "Profil je príliš dlhý." -#: ../libpurple/protocols/oscar/oscar.c:4552 +#: ../libpurple/protocols/oscar/oscar.c:4511 #, c-format msgid "" "The maximum away message length of %d byte has been exceeded. It has been " @@ -7382,56 +7565,57 @@ "The maximum away message length of %d bytes has been exceeded. It has been " "truncated for you." msgstr[0] "" -"Maximálna dĺžka správy neprítomnosti, %d bajtov, bola prekročená. Správa bola automaticky skrátená." +"Maximálna dĺžka správy neprítomnosti, %d bajtov, bola prekročená. Správa " +"bola automaticky skrátená." msgstr[1] "" -"Maximálna dĺžka správy neprítomnosti, %d bajt, bola prekročená. Správa bola automaticky skrátená." +"Maximálna dĺžka správy neprítomnosti, %d bajt, bola prekročená. Správa bola " +"automaticky skrátená." msgstr[2] "" -"Maximálna dĺžka správy neprítomnosti, %d bajty, bola prekročená. Správa bola automaticky skrátená." - -#: ../libpurple/protocols/oscar/oscar.c:4557 +"Maximálna dĺžka správy neprítomnosti, %d bajty, bola prekročená. Správa " +"bola automaticky skrátená." + +#: ../libpurple/protocols/oscar/oscar.c:4516 msgid "Away message too long." msgstr "Správa neprítomnosti je príliš dlhá." -#: ../libpurple/protocols/oscar/oscar.c:4626 +#: ../libpurple/protocols/oscar/oscar.c:4585 #, c-format msgid "" "Could not add the buddy %s because the screen name is invalid. Screen names " "must be a valid email address, or start with a letter and contain only " "letters, numbers and spaces, or contain only numbers." msgstr "" -"Nepodarilo sa pridať priateľa %s, pretože " -"používateľské meno je chybné. Používateľské mená musia byť v tvare " -"e-mailovej adresy, čísla, alebo musí byť prvý znak písmeno a ostatné znaky " -"sú písmená, čísla a medzery." - -#: ../libpurple/protocols/oscar/oscar.c:4628 -#: ../libpurple/protocols/oscar/oscar.c:5051 -#: ../libpurple/protocols/oscar/oscar.c:5066 +"Nepodarilo sa pridať priateľa %s, pretože používateľské meno je chybné. " +"Používateľské mená musia byť v tvare e-mailovej adresy, čísla, alebo musí " +"byť prvý znak písmeno a ostatné znaky sú písmená, čísla a medzery." + +#: ../libpurple/protocols/oscar/oscar.c:4587 +#: ../libpurple/protocols/oscar/oscar.c:5020 +#: ../libpurple/protocols/oscar/oscar.c:5035 msgid "Unable To Add" msgstr "Nepodarilo sa pridať" -#: ../libpurple/protocols/oscar/oscar.c:4732 +#: ../libpurple/protocols/oscar/oscar.c:4696 msgid "Unable To Retrieve Buddy List" msgstr "Nepodarilo sa získať zoznam priateľov" -#: ../libpurple/protocols/oscar/oscar.c:4733 +#: ../libpurple/protocols/oscar/oscar.c:4697 msgid "" "The AIM servers were temporarily unable to send your buddy list. Your buddy " "list is not lost, and will probably become available in a few hours." msgstr "" -"AIM servery vám dočasne neposlali váš zoznam priateľov. Váš zoznam priateľov " -"nie je stratený, a mal by byť znovu dostupný o pár hodín." - -#: ../libpurple/protocols/oscar/oscar.c:4937 -#: ../libpurple/protocols/oscar/oscar.c:4938 -#: ../libpurple/protocols/oscar/oscar.c:4943 -#: ../libpurple/protocols/oscar/oscar.c:5120 -#: ../libpurple/protocols/oscar/oscar.c:5121 -#: ../libpurple/protocols/oscar/oscar.c:5126 +"AIM servery vám dočasne neposlali váš zoznam priateľov. Váš zoznam " +"priateľov nie je stratený, a mal by byť znovu dostupný o pár hodín." + +#: ../libpurple/protocols/oscar/oscar.c:4879 +#: ../libpurple/protocols/oscar/oscar.c:4881 +#: ../libpurple/protocols/oscar/oscar.c:5089 +#: ../libpurple/protocols/oscar/oscar.c:5090 +#: ../libpurple/protocols/oscar/oscar.c:5095 msgid "Orphans" msgstr "Siroty" -#: ../libpurple/protocols/oscar/oscar.c:5049 +#: ../libpurple/protocols/oscar/oscar.c:5018 #, c-format msgid "" "Could not add the buddy %s because you have too many buddies in your buddy " @@ -7440,17 +7624,17 @@ "Nepodarilo sa pridať priateľa %s, pretože vo vašom zozname priateľov máte " "príliš veľa priateľov. Odstránte, prosím, jedného a skúste to znovu" -#: ../libpurple/protocols/oscar/oscar.c:5049 -#: ../libpurple/protocols/oscar/oscar.c:5064 +#: ../libpurple/protocols/oscar/oscar.c:5018 +#: ../libpurple/protocols/oscar/oscar.c:5033 msgid "(no name)" msgstr "(bez názvu)" -#: ../libpurple/protocols/oscar/oscar.c:5063 +#: ../libpurple/protocols/oscar/oscar.c:5032 #, c-format msgid "Could not add the buddy %s for an unknown reason." msgstr "Nebolo možné pridať priateľa %s z neznámeho dôvodu." -#: ../libpurple/protocols/oscar/oscar.c:5157 +#: ../libpurple/protocols/oscar/oscar.c:5126 #, c-format msgid "" "The user %s has given you permission to add you to their buddy list. Do you " @@ -7459,22 +7643,22 @@ "Používateľ %s vám udelil oprávnenie, aby si vás mohol pridať do svojho " "zoznamu kamarátov. Chcete pridať jeho do svojho?" -#: ../libpurple/protocols/oscar/oscar.c:5165 +#: ../libpurple/protocols/oscar/oscar.c:5134 msgid "Authorization Given" msgstr "Udelená autorizácia" #. Granted -#: ../libpurple/protocols/oscar/oscar.c:5238 +#: ../libpurple/protocols/oscar/oscar.c:5207 #, c-format msgid "The user %s has granted your request to add them to your buddy list." msgstr "Používateľ %s vám dovolil pridať ho do vášho zoznamu priateľov." -#: ../libpurple/protocols/oscar/oscar.c:5239 +#: ../libpurple/protocols/oscar/oscar.c:5208 msgid "Authorization Granted" msgstr "Udelená autorizácia" #. Denied -#: ../libpurple/protocols/oscar/oscar.c:5242 +#: ../libpurple/protocols/oscar/oscar.c:5211 #, c-format msgid "" "The user %s has denied your request to add them to your buddy list for the " @@ -7485,52 +7669,52 @@ "nasledujúceho dôvodu:\n" "%s" -#: ../libpurple/protocols/oscar/oscar.c:5243 +#: ../libpurple/protocols/oscar/oscar.c:5212 msgid "Authorization Denied" msgstr "Autorizácia zamietnutá" -#: ../libpurple/protocols/oscar/oscar.c:5279 +#: ../libpurple/protocols/oscar/oscar.c:5248 #: ../libpurple/protocols/toc/toc.c:1371 msgid "_Exchange:" msgstr "_Výmena:" -#: ../libpurple/protocols/oscar/oscar.c:5319 +#: ../libpurple/protocols/oscar/oscar.c:5288 msgid "Invalid chat name specified." msgstr "Bol zadaný chybný názov chatu." -#: ../libpurple/protocols/oscar/oscar.c:5388 +#: ../libpurple/protocols/oscar/oscar.c:5357 msgid "Your IM Image was not sent. You cannot send IM Images in AIM chats." msgstr "" "Váš obrázok nebol odoslaný. V AIM chatoch nie je možné odosielať obrázky." -#: ../libpurple/protocols/oscar/oscar.c:5548 -#: ../libpurple/protocols/oscar/oscar.c:5553 +#: ../libpurple/protocols/oscar/oscar.c:5517 +#: ../libpurple/protocols/oscar/oscar.c:5522 msgid "Away Message" msgstr "Správa o neprítomnosti" -#: ../libpurple/protocols/oscar/oscar.c:5553 +#: ../libpurple/protocols/oscar/oscar.c:5522 msgid "<i>(retrieving)</i>" msgstr "<i>(prijíma sa)</i>" -#: ../libpurple/protocols/oscar/oscar.c:5753 +#: ../libpurple/protocols/oscar/oscar.c:5722 msgid "iTunes Music Store Link" msgstr "Odkaz na hudobný obchod iTunes" -#: ../libpurple/protocols/oscar/oscar.c:5861 +#: ../libpurple/protocols/oscar/oscar.c:5830 #, c-format msgid "Buddy Comment for %s" msgstr "Komentár priateľa %s" -#: ../libpurple/protocols/oscar/oscar.c:5862 +#: ../libpurple/protocols/oscar/oscar.c:5831 msgid "Buddy Comment:" msgstr "Komentár priateľa:" -#: ../libpurple/protocols/oscar/oscar.c:5909 +#: ../libpurple/protocols/oscar/oscar.c:5878 #, c-format msgid "You have selected to open a Direct IM connection with %s." msgstr "Rozhodli ste sa otvoriť Priame IM pripojenie s používateľom %s." -#: ../libpurple/protocols/oscar/oscar.c:5913 +#: ../libpurple/protocols/oscar/oscar.c:5882 msgid "" "Because this reveals your IP address, it may be considered a security risk. " "Do you wish to continue?" @@ -7538,65 +7722,65 @@ "Táto akcia odhalí vašu IP adresu, a preto môže byť hodnotená ako " "bezpečnostné riziko. Chcete pokračovať?" -#: ../libpurple/protocols/oscar/oscar.c:5919 +#: ../libpurple/protocols/oscar/oscar.c:5888 #: ../libpurple/protocols/oscar/peer.c:1022 msgid "C_onnect" msgstr "Prip_ojiť" -#: ../libpurple/protocols/oscar/oscar.c:5954 +#: ../libpurple/protocols/oscar/oscar.c:5923 msgid "Get AIM Info" msgstr "Získať info AIM" -#: ../libpurple/protocols/oscar/oscar.c:5960 +#: ../libpurple/protocols/oscar/oscar.c:5929 msgid "Edit Buddy Comment" msgstr "Upraviť komentár priateľa" -#: ../libpurple/protocols/oscar/oscar.c:5968 +#: ../libpurple/protocols/oscar/oscar.c:5937 msgid "Get Status Msg" msgstr "Získať správu o stave" -#: ../libpurple/protocols/oscar/oscar.c:5981 +#: ../libpurple/protocols/oscar/oscar.c:5950 msgid "Direct IM" msgstr "Priame IM" -#: ../libpurple/protocols/oscar/oscar.c:6003 +#: ../libpurple/protocols/oscar/oscar.c:5972 msgid "Re-request Authorization" msgstr "Znovu požiadať o autorizáciu" -#: ../libpurple/protocols/oscar/oscar.c:6062 +#: ../libpurple/protocols/oscar/oscar.c:6031 msgid "Require authorization" msgstr "Vyžadovať autorizáciu" -#: ../libpurple/protocols/oscar/oscar.c:6065 +#: ../libpurple/protocols/oscar/oscar.c:6034 msgid "Web aware (enabling this will cause you to receive SPAM!)" msgstr "Web aware (zapnutie tejto možnosti spôsobí, že budete dostávať SPAM!)" -#: ../libpurple/protocols/oscar/oscar.c:6070 +#: ../libpurple/protocols/oscar/oscar.c:6039 msgid "ICQ Privacy Options" msgstr "Nastavenie súkromia ICQ" -#: ../libpurple/protocols/oscar/oscar.c:6089 +#: ../libpurple/protocols/oscar/oscar.c:6058 msgid "The new formatting is invalid." msgstr "Nové formátovanie je chybné." -#: ../libpurple/protocols/oscar/oscar.c:6090 +#: ../libpurple/protocols/oscar/oscar.c:6059 msgid "Screen name formatting can change only capitalization and whitespace." msgstr "" "Formátovanie používateľského mena smie obsahovať len písmená a medzery." -#: ../libpurple/protocols/oscar/oscar.c:6143 +#: ../libpurple/protocols/oscar/oscar.c:6112 msgid "Change Address To:" msgstr "Zmeniť adresu na:" -#: ../libpurple/protocols/oscar/oscar.c:6189 +#: ../libpurple/protocols/oscar/oscar.c:6158 msgid "<i>you are not waiting for authorization</i>" msgstr "<i>nečakáte na autorizáciu</i>" -#: ../libpurple/protocols/oscar/oscar.c:6192 +#: ../libpurple/protocols/oscar/oscar.c:6161 msgid "You are awaiting authorization from the following buddies" msgstr "Očakávate autorizáciu od nasledujúcich priateľov" -#: ../libpurple/protocols/oscar/oscar.c:6193 +#: ../libpurple/protocols/oscar/oscar.c:6162 msgid "" "You can re-request authorization from these buddies by right-clicking on " "them and selecting \"Re-request Authorization.\"" @@ -7604,77 +7788,79 @@ "Týchto priateľov môžete znovu požiadať o autorizáciu, keď na nich kliknete " "pravým tlačidlom a vyberiete možnosť \"Znovu požiadať o autorizáciu.\"" -#: ../libpurple/protocols/oscar/oscar.c:6210 +#: ../libpurple/protocols/oscar/oscar.c:6179 msgid "Find Buddy by E-Mail" msgstr "Nájsť priateľa podľa E-mailu" -#: ../libpurple/protocols/oscar/oscar.c:6211 +#: ../libpurple/protocols/oscar/oscar.c:6180 msgid "Search for a buddy by e-mail address" msgstr "Vyhľadávať priateľov podľa e-mailovej adresy" -#: ../libpurple/protocols/oscar/oscar.c:6212 +#: ../libpurple/protocols/oscar/oscar.c:6181 msgid "Type the e-mail address of the buddy you are searching for." msgstr "Zadajte e-mailovú adresu priateľa, ktorého hľadáte." -#: ../libpurple/protocols/oscar/oscar.c:6215 +#: ../libpurple/protocols/oscar/oscar.c:6184 msgid "_Search" msgstr "_Hľadať" -#: ../libpurple/protocols/oscar/oscar.c:6373 +#: ../libpurple/protocols/oscar/oscar.c:6342 msgid "Set User Info (URL)..." msgstr "Nastaviť podrobnosti používateľa (URL)..." -#: ../libpurple/protocols/oscar/oscar.c:6384 +#: ../libpurple/protocols/oscar/oscar.c:6353 msgid "Change Password (URL)" msgstr "Zmeniť heslo (URL)" -#: ../libpurple/protocols/oscar/oscar.c:6388 +#: ../libpurple/protocols/oscar/oscar.c:6357 msgid "Configure IM Forwarding (URL)" msgstr "Konfiguravať preposielanie správ (URL)" #. ICQ actions -#: ../libpurple/protocols/oscar/oscar.c:6398 +#: ../libpurple/protocols/oscar/oscar.c:6367 msgid "Set Privacy Options..." msgstr "Nastaviť možnosti súkromia..." #. AIM actions -#: ../libpurple/protocols/oscar/oscar.c:6405 +#: ../libpurple/protocols/oscar/oscar.c:6374 msgid "Confirm Account" msgstr "Potvrdiť účet" -#: ../libpurple/protocols/oscar/oscar.c:6409 +#: ../libpurple/protocols/oscar/oscar.c:6378 msgid "Display Currently Registered E-Mail Address" msgstr "Zobraziť momentálne registrovanú e-maiovú adresu" -#: ../libpurple/protocols/oscar/oscar.c:6413 +#: ../libpurple/protocols/oscar/oscar.c:6382 msgid "Change Currently Registered E-Mail Address..." msgstr "Zmeniť momentálne registrovanú e-maiovú adresu..." -#: ../libpurple/protocols/oscar/oscar.c:6420 +#: ../libpurple/protocols/oscar/oscar.c:6389 msgid "Show Buddies Awaiting Authorization" msgstr "Zobraziť priateľov, ktorí čakajú na autorizáciu" -#: ../libpurple/protocols/oscar/oscar.c:6426 +#: ../libpurple/protocols/oscar/oscar.c:6395 msgid "Search for Buddy by E-Mail Address..." msgstr "Hľadať priateľa podľa e-maiovej adresy..." -#: ../libpurple/protocols/oscar/oscar.c:6431 +#: ../libpurple/protocols/oscar/oscar.c:6400 msgid "Search for Buddy by Information" msgstr "Hľadať priateľa podľa podrobností" -#: ../libpurple/protocols/oscar/oscar.c:6499 +#: ../libpurple/protocols/oscar/oscar.c:6468 msgid "Use recent buddies group" msgstr "Použiť naposledy použitú skupinu kamarátov" -#: ../libpurple/protocols/oscar/oscar.c:6502 +#: ../libpurple/protocols/oscar/oscar.c:6471 msgid "Show how long you have been idle" msgstr "Zobrazí ako dlho ste boli nečinní" -#: ../libpurple/protocols/oscar/oscar.c:6657 +#: ../libpurple/protocols/oscar/oscar.c:6626 msgid "" "Always use ICQ proxy server for file transfers\n" "(slower, but does not reveal your IP address)" msgstr "" +"Vždy používať ICQ proxy server na prenosy súborov\n" +"(pomalšie, ale neprezradí vašu IP adresu)" #: ../libpurple/protocols/oscar/peer.c:674 #, c-format @@ -7876,8 +8062,7 @@ "Setting custom faces is not currently supported. Please choose an image from " "%s." msgstr "" -"Nastavenie vlastných tvárí zatiaľ nefunguje. Prosím, vyberte si obrázok z " -"%s." +"Nastavenie vlastných tvárí zatiaľ nefunguje. Prosím, vyberte si obrázok z %s." #: ../libpurple/protocols/qq/buddy_info.c:577 #: ../libpurple/protocols/qq/buddy_info.c:590 @@ -7891,7 +8076,6 @@ msgstr "Odmietli ste požiadavku používateľa %d" #: ../libpurple/protocols/qq/buddy_opt.c:209 -#: ../libpurple/protocols/qq/group_opt.c:137 msgid "Input your reason:" msgstr "Zadajte váš dôvod:" @@ -7908,35 +8092,37 @@ #: ../libpurple/protocols/qq/buddy_opt.c:214 #: ../libpurple/protocols/qq/group_im.c:144 #: ../libpurple/protocols/qq/group_opt.c:127 -#: ../libpurple/protocols/qq/sys_msg.c:91 -#: ../libpurple/protocols/qq/sys_msg.c:249 +#: ../libpurple/protocols/qq/sys_msg.c:90 +#: ../libpurple/protocols/qq/sys_msg.c:246 msgid "Reject" msgstr "Odmietnuť" #: ../libpurple/protocols/qq/buddy_opt.c:277 -msgid "Add buddy with auth request fails" +msgid "Add buddy with auth request failed" msgstr "Pridanie kamaráta s požiadavkou na autentifikáciu zlyhalo" -#: ../libpurple/protocols/qq/buddy_opt.c:308 +#. TODO: We don't really need to notify the user about this, do we? +#: ../libpurple/protocols/qq/buddy_opt.c:309 msgid "You have successfully removed a buddy" msgstr "Úspešne ste odstránili priateľa" -#: ../libpurple/protocols/qq/buddy_opt.c:336 -msgid "You have successfully removed yourself from a buddy" -msgstr "Boli ste úspešne odstránený od kamaráta" - -#: ../libpurple/protocols/qq/buddy_opt.c:402 +#. TODO: Does the user really need to be notified about this? +#: ../libpurple/protocols/qq/buddy_opt.c:338 +msgid "You have successfully removed yourself from your friend's buddy list" +msgstr "Boli ste úspešne odstránený z priateľovho zoznamu kontaktov" + +#: ../libpurple/protocols/qq/buddy_opt.c:404 #, c-format msgid "User %d needs authentication" msgstr "Používateľ %d vyžaduje autentifikáciu" -#: ../libpurple/protocols/qq/buddy_opt.c:404 +#: ../libpurple/protocols/qq/buddy_opt.c:406 #: ../libpurple/protocols/qq/group_join.c:136 msgid "Input request here" msgstr "Sem zadajte požiadavku" #. TODO: Awkward string to fix post string freeze - standardize auth dialogues? -evands -#: ../libpurple/protocols/qq/buddy_opt.c:405 +#: ../libpurple/protocols/qq/buddy_opt.c:407 #: ../libpurple/protocols/qq/group_join.c:137 msgid "Would you be my friend?" msgstr "Chceš byť mojím priateľom?" @@ -7944,22 +8130,22 @@ #. multiline #. masked #. hint -#: ../libpurple/protocols/qq/buddy_opt.c:406 +#: ../libpurple/protocols/qq/buddy_opt.c:408 #: ../libpurple/protocols/qq/group_join.c:138 #: ../libpurple/protocols/qq/group_opt.c:143 msgid "Send" msgstr "Odoslať" -#: ../libpurple/protocols/qq/buddy_opt.c:416 -#, c-format -msgid "You have added %d in buddy list" -msgstr "Pridali ste %d do zoznamu kamarátov" - -#: ../libpurple/protocols/qq/buddy_opt.c:513 +#: ../libpurple/protocols/qq/buddy_opt.c:418 +#, c-format +msgid "You have added %d to buddy list" +msgstr "Pridali ste používateľa %d do zoznamu kamarátov" + +#: ../libpurple/protocols/qq/buddy_opt.c:515 msgid "QQid Error" msgstr "Chyba QQid" -#: ../libpurple/protocols/qq/buddy_opt.c:514 +#: ../libpurple/protocols/qq/buddy_opt.c:516 msgid "Invalid QQid" msgstr "Nesprávne QQid" @@ -7988,7 +8174,7 @@ msgstr "QQ Qun" #: ../libpurple/protocols/qq/group.c:120 -msgid "Please input external group ID" +msgid "Please enter external group ID" msgstr "Zadajte, prosím, ID externej skupiny" #: ../libpurple/protocols/qq/group.c:121 @@ -7997,12 +8183,12 @@ #: ../libpurple/protocols/qq/group_im.c:126 #, c-format -msgid "User %d applied to join group %d" -msgstr "Používateľ %d sa prihlásil pre pripojenie do skupiny %d" +msgid "User %d requested to join group %d" +msgstr "Používateľ %d požiadal o vstup do skupiny %d" #: ../libpurple/protocols/qq/group_im.c:127 #: ../libpurple/protocols/qq/group_im.c:181 -#: ../libpurple/protocols/qq/sys_msg.c:195 +#: ../libpurple/protocols/qq/sys_msg.c:193 #, c-format msgid "Reason: %s" msgstr "Dôvod: %s" @@ -8022,40 +8208,40 @@ #: ../libpurple/protocols/qq/group_im.c:141 #: ../libpurple/protocols/qq/group_opt.c:128 -#: ../libpurple/protocols/qq/sys_msg.c:92 -#: ../libpurple/protocols/qq/sys_msg.c:251 +#: ../libpurple/protocols/qq/sys_msg.c:91 +#: ../libpurple/protocols/qq/sys_msg.c:248 msgid "Approve" msgstr "Potvrdiť" #: ../libpurple/protocols/qq/group_im.c:180 #, c-format -msgid "You request to join group %d has been rejected by admin %d" -msgstr "" -"Vaša požiadavka pre zapojenie do skupiny %d bola odmietnutá administrátorom %" +msgid "Your request to join group %d has been rejected by admin %d" +msgstr "" +"Vaša požiadavka pre vstup do skupiny %d bola odmietnutá administrátorom %" "d" #: ../libpurple/protocols/qq/group_im.c:221 #, c-format -msgid "You request to join group %d has been approved by admin %d" -msgstr "" -"Vaša požiadavka pre zapojenie do skupiny %d bola potvrdená administrátorom %d" +msgid "Your request to join group %d has been approved by admin %d" +msgstr "" +"Vaša požiadavka pre vstup do skupiny %d bola vyhovená administrátorom %d" #: ../libpurple/protocols/qq/group_im.c:257 #, c-format -msgid "You [%d] has exit group \"%d\"" -msgstr "Opustili ste [%d] skupinu \"%d\"" +msgid "You [%d] have left group \"%d\"" +msgstr "[%d] Opustili ste skupinu \"%d\"" #: ../libpurple/protocols/qq/group_im.c:291 #, c-format -msgid "You [%d] has been added by group \"%d\"" -msgstr "Boli ste [%d] pridaný skupinou \"%d\"" +msgid "You [%d] have been added to group \"%d\"" +msgstr "[%d] Boli ste pridaný do skupiny \"%d\"" #: ../libpurple/protocols/qq/group_im.c:292 msgid "This group has been added to your buddy list" msgstr "Skupina bola pridaná do vášho zoznamu priateľov" #: ../libpurple/protocols/qq/group_internal.c:41 -msgid "I am not member" +msgid "I am not a member" msgstr "Nie som člen" #: ../libpurple/protocols/qq/group_internal.c:44 @@ -8079,7 +8265,7 @@ msgstr "Skupina neumožňuje iným pripojiť sa" #: ../libpurple/protocols/qq/group_join.c:233 -msgid "You have successfully exited the group" +msgid "You have successfully left the group" msgstr "Úspešne ste opustili skupinu" #: ../libpurple/protocols/qq/group_join.c:257 @@ -8087,15 +8273,15 @@ msgstr "QQ Skupinová autentifikácia" #: ../libpurple/protocols/qq/group_join.c:258 -msgid "Your authorization operation has been accepted by the QQ server" -msgstr "Vaša autorizačná operácia bola prijatá QQ serverom" +msgid "Your authorization request has been accepted by the QQ server" +msgstr "Vaša žiadosť o autorizáciu bola prijatá QQ serverom" #: ../libpurple/protocols/qq/group_join.c:329 -msgid "You inputted a group id outside the acceptable range" -msgstr "Zadali ste id skupiny mimo prijateľného rozsahu" +msgid "You entered a group ID outside the acceptable range" +msgstr "Zadali ste ID skupiny mimo prijateľného rozsahu" #: ../libpurple/protocols/qq/group_join.c:360 -msgid "Are you sure to exit this Qun?" +msgid "Are you sure you want to leave this Qun?" msgstr "Naozaj chcete opustiť toto Qun?" #: ../libpurple/protocols/qq/group_join.c:362 @@ -8106,10 +8292,6 @@ "Ak ste tvorca, \n" "táto operácia nakoniec odstráni tento Qun." -#: ../libpurple/protocols/qq/group_join.c:367 -msgid "Go ahead" -msgstr "Pokračovať" - #: ../libpurple/protocols/qq/group_network.c:92 #, c-format msgid "Code [0x%02X]: %s" @@ -8119,19 +8301,23 @@ msgid "Group Operation Error" msgstr "Chyba skupinovej operácie" -#. we wanna see window +#. we want to see window #: ../libpurple/protocols/qq/group_opt.c:124 -#: ../libpurple/protocols/qq/sys_msg.c:88 -msgid "Do you wanna approve the request?" +#: ../libpurple/protocols/qq/sys_msg.c:87 +msgid "Do you want to approve the request?" msgstr "Chcete potvrdiť požiadavku?" +#: ../libpurple/protocols/qq/group_opt.c:137 +msgid "Enter your reason:" +msgstr "Zadajte váš dôvod:" + #: ../libpurple/protocols/qq/group_opt.c:235 -msgid "You have successfully modify Qun member" +msgid "You have successfully modified Qun member" msgstr "Úspešne ste zmenili Qun číslo" #: ../libpurple/protocols/qq/group_opt.c:305 -msgid "You have successfully modify Qun information" -msgstr "Úspešne ste zmenili informácie o Qun" +msgid "You have successfully modified Qun information" +msgstr "Úspešne ste zmenili Qun informácie" #: ../libpurple/protocols/qq/group_opt.c:392 msgid "You have successfully created a Qun" @@ -8150,20 +8336,16 @@ msgstr "Systémová správa" #: ../libpurple/protocols/qq/im.c:576 -msgid "Server ACK" -msgstr "Server ACK" - -#: ../libpurple/protocols/qq/im.c:576 msgid "Failed to send IM." msgstr "Zlyhalo odoslanie IM." #: ../libpurple/protocols/qq/keep_alive.c:87 -msgid "Keep alive error, seems connection lost!" -msgstr "Chyba spojenia, asi padlo spojenie!" +msgid "Keep alive error" +msgstr "Chyba keep alive" #: ../libpurple/protocols/qq/login_logout.c:408 -msgid "Request login token error!" -msgstr "Vyžiadaná chyba pri prihlasovaní do tokenu!" +msgid "Error requesting login token" +msgstr "Chyba pri požadovaní prihlasovacieho tokenu" #: ../libpurple/protocols/qq/login_logout.c:486 msgid "Unable to login, check debug log" @@ -8182,96 +8364,83 @@ msgid "Unknown-%d" msgstr "Neznáme-%d" -#: ../libpurple/protocols/qq/qq.c:209 -#, c-format -msgid "%s Address" -msgstr "%s Adresa" - -#: ../libpurple/protocols/qq/qq.c:240 +#: ../libpurple/protocols/qq/qq.c:211 +msgid "TCP Address" +msgstr "TCP adresa" + +#: ../libpurple/protocols/qq/qq.c:213 +msgid "UDP Address" +msgstr "UDP adresa" + +#: ../libpurple/protocols/qq/qq.c:242 msgid "Level" msgstr "Úroveň" -#: ../libpurple/protocols/qq/qq.c:278 -msgid "QQ: Available" -msgstr "QQ: Prítomný" - -#: ../libpurple/protocols/qq/qq.c:282 -msgid "QQ: Away" -msgstr "QQ: Neprítomný" - -#: ../libpurple/protocols/qq/qq.c:286 -msgid "QQ: Invisible" -msgstr "QQ: Neviditeľný" - -#: ../libpurple/protocols/qq/qq.c:290 -msgid "QQ: Offline" -msgstr "QQ: Odpojený" - -#: ../libpurple/protocols/qq/qq.c:371 +#: ../libpurple/protocols/qq/qq.c:373 msgid "Invalid name" msgstr "Chybný názov" -#: ../libpurple/protocols/qq/qq.c:437 +#: ../libpurple/protocols/qq/qq.c:439 #, c-format msgid "<b>Current Online</b>: %d<br>\n" msgstr "<b>Momenálne pripojený</b>: %d<br>\n" -#: ../libpurple/protocols/qq/qq.c:438 +#: ../libpurple/protocols/qq/qq.c:440 #, c-format msgid "<b>Last Refresh</b>: %s<br>\n" msgstr "<b>Naposledy obnovené</b>: %s<br>\n" -#: ../libpurple/protocols/qq/qq.c:442 +#: ../libpurple/protocols/qq/qq.c:444 #, c-format msgid "<b>Connection Mode</b>: %s<br>\n" msgstr "<b>Režim pripojenia</b>: %s<br>\n" -#: ../libpurple/protocols/qq/qq.c:443 +#: ../libpurple/protocols/qq/qq.c:445 #, c-format msgid "<b>Server IP</b>: %s: %d<br>\n" msgstr "<b>IP serveru</b>: %s: %d<br>\n" -#: ../libpurple/protocols/qq/qq.c:444 +#: ../libpurple/protocols/qq/qq.c:446 #, c-format msgid "<b>My Public IP</b>: %s<br>\n" msgstr "<b>Moja verejná IP</b>: %s<br>\n" -#: ../libpurple/protocols/qq/qq.c:449 +#: ../libpurple/protocols/qq/qq.c:451 #, c-format msgid "<b>Login Time</b>: %s<br>\n" msgstr "<b>Čas pripojenia</b>: %s<br>\n" -#: ../libpurple/protocols/qq/qq.c:450 +#: ../libpurple/protocols/qq/qq.c:452 #, c-format msgid "<b>Last Login IP</b>: %s<br>\n" msgstr "<b>Naposledy prihlásená IP</b>: %s<br>\n" -#: ../libpurple/protocols/qq/qq.c:451 +#: ../libpurple/protocols/qq/qq.c:453 #, c-format msgid "<b>Last Login Time</b>: %s\n" msgstr "<b>Čas posledného prihlásenia</b>: %s\n" -#: ../libpurple/protocols/qq/qq.c:455 +#: ../libpurple/protocols/qq/qq.c:457 msgid "Login Information" msgstr "Informácie o prihlasení" -#: ../libpurple/protocols/qq/qq.c:531 -msgid "Modify My Information" -msgstr "Upraviť moje podrobnosti" - -#: ../libpurple/protocols/qq/qq.c:534 ../libpurple/protocols/toc/toc.c:1680 +#: ../libpurple/protocols/qq/qq.c:533 +msgid "Set My Information" +msgstr "Nastaviť moje informácie" + +#: ../libpurple/protocols/qq/qq.c:536 ../libpurple/protocols/toc/toc.c:1680 msgid "Change Password" msgstr "Zmeniť heslo" -#: ../libpurple/protocols/qq/qq.c:537 +#: ../libpurple/protocols/qq/qq.c:539 msgid "Show Login Information" msgstr "Zobraziť informácie o prihlasení" -#: ../libpurple/protocols/qq/qq.c:558 -msgid "Exit this QQ Qun" -msgstr "Ukončiť tento QQ Qun" - -#: ../libpurple/protocols/qq/qq.c:582 +#: ../libpurple/protocols/qq/qq.c:560 +msgid "Leave this QQ Qun" +msgstr "Opustiť toto QQ Qun" + +#: ../libpurple/protocols/qq/qq.c:584 msgid "Block this buddy" msgstr "Blokovať tohoto priateľa" @@ -8285,25 +8454,13 @@ #. *< version #. * summary #. * description -#: ../libpurple/protocols/qq/qq.c:723 ../libpurple/protocols/qq/qq.c:725 +#: ../libpurple/protocols/qq/qq.c:725 ../libpurple/protocols/qq/qq.c:727 msgid "QQ Protocol\tPlugin" msgstr "QQ Protokol\tModul" -#: ../libpurple/protocols/qq/qq.c:750 -msgid "Login in TCP" -msgstr "Prihlásenie v TCP" - -#: ../libpurple/protocols/qq/qq.c:753 -msgid "Login Hidden" -msgstr "Prihlasenie skryté" - -#: ../libpurple/protocols/qq/qq_proxy.c:497 -msgid "Socket send error" -msgstr "Chyba odoslania soketu" - -#: ../libpurple/protocols/qq/qq_proxy.c:500 -msgid "Connection refused" -msgstr "Spojenie odmietnuté" +#: ../libpurple/protocols/qq/qq.c:752 +msgid "Connect using TCP" +msgstr "Pripojiť sa pomocou TCP" #: ../libpurple/protocols/qq/recv_core.c:309 msgid "Socket error" @@ -8337,53 +8494,52 @@ msgid "Login failed, no reply" msgstr "Prihlásenie zlyhalo, žiadna odpoveď" -#: ../libpurple/protocols/qq/sys_msg.c:112 -msgid "Do you wanna add this buddy?" +#: ../libpurple/protocols/qq/sys_msg.c:110 +msgid "Do you want to add this buddy?" msgstr "Chcete pridať tohoto priateľa?" #. only need to get value -#: ../libpurple/protocols/qq/sys_msg.c:168 +#: ../libpurple/protocols/qq/sys_msg.c:166 #, c-format msgid "You have been added by %s" msgstr "%s vás pridal" -#: ../libpurple/protocols/qq/sys_msg.c:171 +#: ../libpurple/protocols/qq/sys_msg.c:169 msgid "Would like to add him?" msgstr "Chcete ho pridať?" -#: ../libpurple/protocols/qq/sys_msg.c:178 -#, c-format -msgid "%s has added you [%s]" -msgstr "%s vás pridal [%s]" - -#: ../libpurple/protocols/qq/sys_msg.c:194 +#: ../libpurple/protocols/qq/sys_msg.c:176 +#, c-format +msgid "%s has added you [%s] to his or her buddy list" +msgstr "Používateľ %s si vás [%s] pridal do svojho zoznamu priateľov" + +#: ../libpurple/protocols/qq/sys_msg.c:192 #, c-format msgid "User %s rejected your request" msgstr "Používateľ %s odmietol vašu požiadavku" -#: ../libpurple/protocols/qq/sys_msg.c:214 -#, c-format -msgid "User %s has approved your request" -msgstr "Používateľ %s potvrdil vašu požiadavku" - -#. TODO: 'wanna' is not an appropriate word for this string. Fix after string freeze +#: ../libpurple/protocols/qq/sys_msg.c:212 +#, c-format +msgid "User %s approved your request" +msgstr "Používateľ %s odsúhlasil vašu požiadavku" + #. TODO: this should go through purple_account_request_authorization() -#: ../libpurple/protocols/qq/sys_msg.c:241 -#, c-format -msgid "%s wanna add you [%s] as friends" -msgstr "%s vás chce pridať [%s] ako priateľa" - -#: ../libpurple/protocols/qq/sys_msg.c:242 +#: ../libpurple/protocols/qq/sys_msg.c:238 +#, c-format +msgid "%s wants to add you [%s] as a friend" +msgstr "%s chce pridať vás [%s] ako priateľa" + +#: ../libpurple/protocols/qq/sys_msg.c:239 #, c-format msgid "Message: %s" msgstr "Správa: %s" -#: ../libpurple/protocols/qq/sys_msg.c:264 +#: ../libpurple/protocols/qq/sys_msg.c:261 #, c-format msgid "%s is not in your buddy list" msgstr "%s sa nenachádza vo vašom zozname priateľov" -#: ../libpurple/protocols/qq/sys_msg.c:266 +#: ../libpurple/protocols/qq/sys_msg.c:263 msgid "Would you like to add him?" msgstr "Chcete pridať používateľa?" @@ -8475,7 +8631,7 @@ #. this is a regular connect, error out #: ../libpurple/protocols/sametime/sametime.c:1732 -#: ../libpurple/protocols/sametime/sametime.c:3726 +#: ../libpurple/protocols/sametime/sametime.c:3727 msgid "Unable to connect to host" msgstr "Nepodarilo sa pripojiť ku hostiteľovi" @@ -8496,37 +8652,37 @@ msgid "Place Closed" msgstr "Miesto uzavreté" -#: ../libpurple/protocols/sametime/sametime.c:3229 +#: ../libpurple/protocols/sametime/sametime.c:3230 msgid "Microphone" msgstr "Mikrofón" -#: ../libpurple/protocols/sametime/sametime.c:3230 +#: ../libpurple/protocols/sametime/sametime.c:3231 msgid "Speakers" msgstr "Reproduktory" -#: ../libpurple/protocols/sametime/sametime.c:3231 +#: ../libpurple/protocols/sametime/sametime.c:3232 msgid "Video Camera" msgstr "Kamera" -#: ../libpurple/protocols/sametime/sametime.c:3235 +#: ../libpurple/protocols/sametime/sametime.c:3236 msgid "File Transfer" msgstr "Prenos súborov" -#: ../libpurple/protocols/sametime/sametime.c:3269 -#: ../libpurple/protocols/sametime/sametime.c:4145 +#: ../libpurple/protocols/sametime/sametime.c:3270 +#: ../libpurple/protocols/sametime/sametime.c:4146 msgid "Supports" msgstr "Podporuje" -#: ../libpurple/protocols/sametime/sametime.c:3274 -#: ../libpurple/protocols/sametime/sametime.c:4119 +#: ../libpurple/protocols/sametime/sametime.c:3275 +#: ../libpurple/protocols/sametime/sametime.c:4120 msgid "External User" msgstr "Externý používateľ" -#: ../libpurple/protocols/sametime/sametime.c:3380 +#: ../libpurple/protocols/sametime/sametime.c:3381 msgid "Create conference with user" msgstr "Vytvoriť konferenciu s používateľom" -#: ../libpurple/protocols/sametime/sametime.c:3381 +#: ../libpurple/protocols/sametime/sametime.c:3382 #, c-format msgid "" "Please enter a topic for the new conference, and an invitation message to be " @@ -8535,27 +8691,27 @@ "Zadajte, prosím, tému pre novú konferenciu, a pozývaciu správu pre " "používateľa %s" -#: ../libpurple/protocols/sametime/sametime.c:3385 +#: ../libpurple/protocols/sametime/sametime.c:3386 msgid "New Conference" msgstr "Nová konferencia" -#: ../libpurple/protocols/sametime/sametime.c:3387 +#: ../libpurple/protocols/sametime/sametime.c:3388 msgid "Create" msgstr "Vytvoriť" -#: ../libpurple/protocols/sametime/sametime.c:3452 +#: ../libpurple/protocols/sametime/sametime.c:3453 msgid "Available Conferences" msgstr "Dostupné konferencie" -#: ../libpurple/protocols/sametime/sametime.c:3458 +#: ../libpurple/protocols/sametime/sametime.c:3459 msgid "Create New Conference..." msgstr "Vytvoriť novú konferenciu..." -#: ../libpurple/protocols/sametime/sametime.c:3465 +#: ../libpurple/protocols/sametime/sametime.c:3466 msgid "Invite user to a conference" msgstr "Pozvať používateľa na konferenciu" -#: ../libpurple/protocols/sametime/sametime.c:3466 +#: ../libpurple/protocols/sametime/sametime.c:3467 #, c-format msgid "" "Select a conference from the list below to send an invite to user %s. Select " @@ -8566,27 +8722,27 @@ "%s. Vyberte \"Vytvoriť novú konferenciu\", ak chcete vytvoriť novú " "konferenciu, kam chcete pozvať tohto používateľa." -#: ../libpurple/protocols/sametime/sametime.c:3471 +#: ../libpurple/protocols/sametime/sametime.c:3472 msgid "Invite to Conference" msgstr "Pozvať na konferenciu" -#: ../libpurple/protocols/sametime/sametime.c:3562 +#: ../libpurple/protocols/sametime/sametime.c:3563 msgid "Invite to Conference..." msgstr "Pozvať na konferenciu..." -#: ../libpurple/protocols/sametime/sametime.c:3567 +#: ../libpurple/protocols/sametime/sametime.c:3568 msgid "Send TEST Announcement" msgstr "Poslať ohlásenie TEST" -#: ../libpurple/protocols/sametime/sametime.c:3586 ../pidgin/gtkconv.c:4274 +#: ../libpurple/protocols/sametime/sametime.c:3587 ../pidgin/gtkconv.c:4329 msgid "Topic:" msgstr "Téma:" -#: ../libpurple/protocols/sametime/sametime.c:3614 +#: ../libpurple/protocols/sametime/sametime.c:3615 msgid "No Sametime Community Server specified" msgstr "Nebol určený žiadny server komunity rovnakého času" -#: ../libpurple/protocols/sametime/sametime.c:3636 +#: ../libpurple/protocols/sametime/sametime.c:3637 #, c-format msgid "" "No host or IP address has been configured for the Meanwhile account %s. " @@ -8595,42 +8751,42 @@ "Žiadny hostiteľ ani IP adresa neboli nastavené pre Meanwhile účet %s. " "Zadajte, prosím, jeden nižšie pre pokračovanie prihlásenia." -#: ../libpurple/protocols/sametime/sametime.c:3641 +#: ../libpurple/protocols/sametime/sametime.c:3642 msgid "Meanwhile Connection Setup" msgstr "Nastavenie spojenia Meanwhile" -#: ../libpurple/protocols/sametime/sametime.c:3642 +#: ../libpurple/protocols/sametime/sametime.c:3643 msgid "No Sametime Community Server Specified" msgstr "Nebol určený žiadny server komunity rovnakého času" -#: ../libpurple/protocols/sametime/sametime.c:3644 ../pidgin/gtkblist.c:4015 +#: ../libpurple/protocols/sametime/sametime.c:3645 ../pidgin/gtkblist.c:4024 msgid "Connect" msgstr "Pripojiť" -#: ../libpurple/protocols/sametime/sametime.c:4135 +#: ../libpurple/protocols/sametime/sametime.c:4136 #, c-format msgid "Unknown (0x%04x)<br>" msgstr "Neznáme (0x%04x)<br>" -#: ../libpurple/protocols/sametime/sametime.c:4137 +#: ../libpurple/protocols/sametime/sametime.c:4138 msgid "Last Known Client" msgstr "Posledný známy klient" -#: ../libpurple/protocols/sametime/sametime.c:4301 -#: ../libpurple/protocols/sametime/sametime.c:5506 +#: ../libpurple/protocols/sametime/sametime.c:4302 +#: ../libpurple/protocols/sametime/sametime.c:5507 msgid "User Name" msgstr "Meno používateľa" -#: ../libpurple/protocols/sametime/sametime.c:4304 -#: ../libpurple/protocols/sametime/sametime.c:5509 +#: ../libpurple/protocols/sametime/sametime.c:4305 +#: ../libpurple/protocols/sametime/sametime.c:5510 msgid "Sametime ID" msgstr "Sametime ID" -#: ../libpurple/protocols/sametime/sametime.c:4328 +#: ../libpurple/protocols/sametime/sametime.c:4329 msgid "An ambiguous user ID was entered" msgstr "Bolo zadané nejednoznačné používateľské ID" -#: ../libpurple/protocols/sametime/sametime.c:4329 +#: ../libpurple/protocols/sametime/sametime.c:4330 #, c-format msgid "" "The identifier '%s' may possibly refer to any of the following users. Please " @@ -8640,15 +8796,15 @@ "používateľov. Vyberte, prosím, správneho používateľa zo zoznamu nižšie a " "pridajte ho do svojho zoznamu kamarátov." -#: ../libpurple/protocols/sametime/sametime.c:4334 +#: ../libpurple/protocols/sametime/sametime.c:4335 msgid "Select User" msgstr "Vyberte používateľa" -#: ../libpurple/protocols/sametime/sametime.c:4418 +#: ../libpurple/protocols/sametime/sametime.c:4419 msgid "Unable to add user: user not found" msgstr "Nebolo možné priadať používateľa: používateľ nebol nájdený" -#: ../libpurple/protocols/sametime/sametime.c:4420 +#: ../libpurple/protocols/sametime/sametime.c:4421 #, c-format msgid "" "The identifier '%s' did not match any users in your Sametime community. This " @@ -8657,11 +8813,11 @@ "Identifikátoru '%s' nevyhovujú žiadni používatelia vo vašej Sametime " "komunite. Tento záznam bol odstránený z vášho zoznamu priateľov." -#: ../libpurple/protocols/sametime/sametime.c:4425 +#: ../libpurple/protocols/sametime/sametime.c:4426 msgid "Unable to add user" msgstr "Nebolo možné priadať používateľa" -#: ../libpurple/protocols/sametime/sametime.c:5011 +#: ../libpurple/protocols/sametime/sametime.c:5012 #, c-format msgid "" "Error reading file %s: \n" @@ -8670,63 +8826,63 @@ "Chyba pri čítaní súboru %s: \n" "%s\n" -#: ../libpurple/protocols/sametime/sametime.c:5146 +#: ../libpurple/protocols/sametime/sametime.c:5147 msgid "Remotely Stored Buddy List" msgstr "Vzdialene uložený zoznam kamarátov" -#: ../libpurple/protocols/sametime/sametime.c:5151 +#: ../libpurple/protocols/sametime/sametime.c:5152 msgid "Buddy List Storage Mode" msgstr "Umiestnenie zoznamu priateľov" -#: ../libpurple/protocols/sametime/sametime.c:5154 +#: ../libpurple/protocols/sametime/sametime.c:5155 msgid "Local Buddy List Only" msgstr "Iba miestny zoznam kamarátov" -#: ../libpurple/protocols/sametime/sametime.c:5156 +#: ../libpurple/protocols/sametime/sametime.c:5157 msgid "Merge List from Server" msgstr "Spojiť so zoznamom zo servera" -#: ../libpurple/protocols/sametime/sametime.c:5158 +#: ../libpurple/protocols/sametime/sametime.c:5159 msgid "Merge and Save List to Server" msgstr "Spojiť zoznam a uložiť na server" -#: ../libpurple/protocols/sametime/sametime.c:5160 +#: ../libpurple/protocols/sametime/sametime.c:5161 msgid "Synchronize List with Server" msgstr "Synchronizovať zoznam so serverom" -#: ../libpurple/protocols/sametime/sametime.c:5215 +#: ../libpurple/protocols/sametime/sametime.c:5216 #, c-format msgid "Import Sametime List for Account %s" msgstr "Importovať zoznam Sametime do účtu %s" -#: ../libpurple/protocols/sametime/sametime.c:5255 +#: ../libpurple/protocols/sametime/sametime.c:5256 #, c-format msgid "Export Sametime List for Account %s" msgstr "Exportovať zoznam Sametime z účtu %s" -#: ../libpurple/protocols/sametime/sametime.c:5309 +#: ../libpurple/protocols/sametime/sametime.c:5310 msgid "Unable to add group: group exists" msgstr "Nepodarilo sa pridať skupinu: skupina existuje" -#: ../libpurple/protocols/sametime/sametime.c:5310 +#: ../libpurple/protocols/sametime/sametime.c:5311 #, c-format msgid "A group named '%s' already exists in your buddy list." msgstr "Skupina pomenovaná '%s' sa už nachádza vo vašom zozname priateľov." -#: ../libpurple/protocols/sametime/sametime.c:5313 -#: ../libpurple/protocols/sametime/sametime.c:5443 +#: ../libpurple/protocols/sametime/sametime.c:5314 +#: ../libpurple/protocols/sametime/sametime.c:5444 msgid "Unable to add group" msgstr "Nepodarilo sa pridať skupinu" -#: ../libpurple/protocols/sametime/sametime.c:5372 +#: ../libpurple/protocols/sametime/sametime.c:5373 msgid "Possible Matches" msgstr "Možné výskyty" -#: ../libpurple/protocols/sametime/sametime.c:5388 +#: ../libpurple/protocols/sametime/sametime.c:5389 msgid "Notes Address Book group results" msgstr "Výsledky skupiny Notes zoznamu adries" -#: ../libpurple/protocols/sametime/sametime.c:5389 +#: ../libpurple/protocols/sametime/sametime.c:5390 #, c-format msgid "" "The identifier '%s' may possibly refer to any of the following Notes Address " @@ -8737,15 +8893,15 @@ "Notes zoznamu adries. Vyberte, prosím, správneho používateľa zo zoznamu " "nižšie a pridajte ho do svojho zoznamu kamarátov." -#: ../libpurple/protocols/sametime/sametime.c:5394 +#: ../libpurple/protocols/sametime/sametime.c:5395 msgid "Select Notes Address Book" msgstr "Vyberte Notes zoznam adries" -#: ../libpurple/protocols/sametime/sametime.c:5437 +#: ../libpurple/protocols/sametime/sametime.c:5438 msgid "Unable to add group: group not found" msgstr "Nepodarilo sa pridať skupinu: skupina nenájdená" -#: ../libpurple/protocols/sametime/sametime.c:5439 +#: ../libpurple/protocols/sametime/sametime.c:5440 #, c-format msgid "" "The identifier '%s' did not match any Notes Address Book groups in your " @@ -8754,11 +8910,11 @@ "Identifikátoru '%s' nevyhovujú žiadne skupiny Notes zoznamu adries vo vašej " "Sametime komunite. " -#: ../libpurple/protocols/sametime/sametime.c:5480 +#: ../libpurple/protocols/sametime/sametime.c:5481 msgid "Notes Address Book Group" msgstr "Skupina Notes zoznamu adries" -#: ../libpurple/protocols/sametime/sametime.c:5481 +#: ../libpurple/protocols/sametime/sametime.c:5482 msgid "" "Enter the name of a Notes Address Book group in the field below to add the " "group and its members to your buddy list." @@ -8766,12 +8922,12 @@ "Zadajte názov skupiny Notes zoznamu adries do políčka, ktoré sa nachádza " "nižšie, a skupina spolu s jej členmi sa pridá do vášho zoznamu priateľov." -#: ../libpurple/protocols/sametime/sametime.c:5530 +#: ../libpurple/protocols/sametime/sametime.c:5531 #, c-format msgid "Search results for '%s'" msgstr "Výsledky vyhľadávania '%s'" -#: ../libpurple/protocols/sametime/sametime.c:5531 +#: ../libpurple/protocols/sametime/sametime.c:5532 #, c-format msgid "" "The identifier '%s' may possibly refer to any of the following users. You " @@ -8783,30 +8939,30 @@ "tlačidiel, ktoré sú nižšie. " #. Create the window -#: ../libpurple/protocols/sametime/sametime.c:5538 ../pidgin/gtknotify.c:719 +#: ../libpurple/protocols/sametime/sametime.c:5539 ../pidgin/gtknotify.c:726 msgid "Search Results" msgstr "Výsledky vyhľadávania" -#: ../libpurple/protocols/sametime/sametime.c:5563 +#: ../libpurple/protocols/sametime/sametime.c:5564 msgid "No matches" msgstr "Žiadne výskyty" -#: ../libpurple/protocols/sametime/sametime.c:5564 +#: ../libpurple/protocols/sametime/sametime.c:5565 #, c-format msgid "The identifier '%s' did not match any users in your Sametime community." msgstr "" "Identifikátoru '%s' nevyhovujú žiadni používatelia vo vašej Sametime " "komunite. " -#: ../libpurple/protocols/sametime/sametime.c:5568 +#: ../libpurple/protocols/sametime/sametime.c:5569 msgid "No Matches" msgstr "Žiadne výskyty" -#: ../libpurple/protocols/sametime/sametime.c:5605 +#: ../libpurple/protocols/sametime/sametime.c:5606 msgid "Search for a user" msgstr "Hľadanie používateľa" -#: ../libpurple/protocols/sametime/sametime.c:5606 +#: ../libpurple/protocols/sametime/sametime.c:5607 msgid "" "Enter a name or partial ID in the field below to search for matching users " "in your Sametime community." @@ -8814,32 +8970,32 @@ "Zadajte meno, alebo čiastočné ID do políčka nachádzajúceho sa nižšie pre " "vyhľadanie vyhovujúcich používateľov vo vašej Sametime komunite." -#: ../libpurple/protocols/sametime/sametime.c:5609 +#: ../libpurple/protocols/sametime/sametime.c:5610 msgid "User Search" msgstr "Hľadanie používateľov" -#: ../libpurple/protocols/sametime/sametime.c:5622 +#: ../libpurple/protocols/sametime/sametime.c:5623 msgid "Import Sametime List..." msgstr "Importovať zoznam Sametime..." -#: ../libpurple/protocols/sametime/sametime.c:5626 +#: ../libpurple/protocols/sametime/sametime.c:5627 msgid "Export Sametime List..." msgstr "Exportovať zoznam Sametime..." -#: ../libpurple/protocols/sametime/sametime.c:5630 +#: ../libpurple/protocols/sametime/sametime.c:5631 msgid "Add Notes Address Book Group..." msgstr "Pridať skupinu Notes zoznamu adries...." -#: ../libpurple/protocols/sametime/sametime.c:5634 +#: ../libpurple/protocols/sametime/sametime.c:5635 msgid "User Search..." msgstr "Hľadanie používateľov..." -#: ../libpurple/protocols/sametime/sametime.c:5740 +#: ../libpurple/protocols/sametime/sametime.c:5741 msgid "Force login (ignore server redirects)" msgstr "Vynútiť prihlásenie (ignorovať presmerovania serverom)" #. pretend to be Sametime Connect -#: ../libpurple/protocols/sametime/sametime.c:5750 +#: ../libpurple/protocols/sametime/sametime.c:5751 msgid "Hide client identity" msgstr "Skryť identitu klienta" @@ -9764,7 +9920,7 @@ #: ../libpurple/protocols/silc/ops.c:1326 #: ../libpurple/protocols/silc10/ops.c:1183 #: ../libpurple/protocols/silc10/ops.c:1332 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1047 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1071 msgid "Real Name" msgstr "Skutočné meno" @@ -10061,7 +10217,7 @@ msgstr "Vaša aktuálna nálada" #: ../libpurple/protocols/silc/silc.c:741 -#: ../libpurple/protocols/silc10/silc.c:652 ../pidgin/gtkprefs.c:1636 +#: ../libpurple/protocols/silc10/silc.c:652 ../pidgin/gtkprefs.c:1638 msgid "Normal" msgstr "Normálna" @@ -10456,7 +10612,7 @@ msgstr "Protokol Secure Internet Live Conferencing (SILC)" #: ../libpurple/protocols/silc/silc.c:1910 -#: ../libpurple/protocols/silc10/silc.c:1853 ../pidgin/gtkprefs.c:2029 +#: ../libpurple/protocols/silc10/silc.c:1853 ../pidgin/gtkprefs.c:2031 msgid "Network" msgstr "Sieť" @@ -10482,7 +10638,7 @@ #: ../libpurple/protocols/silc/silc.c:1948 msgid "Use Perfect Forward Secrecy" -msgstr "" +msgstr "Použiť vlastnosť Perfect Forward Secrecy" #: ../libpurple/protocols/silc/silc.c:1952 #: ../libpurple/protocols/silc10/silc.c:1891 @@ -10534,7 +10690,7 @@ #: ../libpurple/protocols/silc10/util.c:357 #, c-format msgid "User Name: \t%s\n" -msgstr "Používateľské meno: \t%s\n" +msgstr "Prihlasovacie meno: \t%s\n" #: ../libpurple/protocols/silc/util.c:362 #: ../libpurple/protocols/silc10/util.c:359 @@ -10717,26 +10873,26 @@ msgstr "Nepodarilo sa zapisovať" #: ../libpurple/protocols/simple/simple.c:438 -#: ../libpurple/protocols/simple/simple.c:1484 +#: ../libpurple/protocols/simple/simple.c:1489 msgid "Could not connect" msgstr "Nepodarilo sa pripojiť" -#: ../libpurple/protocols/simple/simple.c:1518 -#: ../libpurple/protocols/simple/simple.c:1560 -#: ../libpurple/protocols/simple/simple.c:1573 -#: ../libpurple/protocols/simple/simple.c:1624 +#: ../libpurple/protocols/simple/simple.c:1523 +#: ../libpurple/protocols/simple/simple.c:1565 +#: ../libpurple/protocols/simple/simple.c:1578 +#: ../libpurple/protocols/simple/simple.c:1629 msgid "Could not create listen socket" msgstr "Nepodarilo sa vytvoriť socket pre príjem" -#: ../libpurple/protocols/simple/simple.c:1541 +#: ../libpurple/protocols/simple/simple.c:1546 msgid "Couldn't resolve host" msgstr "Nebolo možné preložiť názov hostiteľa" -#: ../libpurple/protocols/simple/simple.c:1632 +#: ../libpurple/protocols/simple/simple.c:1637 msgid "Could not resolve hostname" msgstr "Nebolo možné previesť názov hostiteľa na IP" -#: ../libpurple/protocols/simple/simple.c:1649 +#: ../libpurple/protocols/simple/simple.c:1654 msgid "SIP screen names may not contain whitespaces or @ symbols" msgstr "Používateľské mená SIP nemôžu obsahovať medzery alebo znaky @" @@ -10748,36 +10904,36 @@ #. *< id #. *< name #. *< version -#: ../libpurple/protocols/simple/simple.c:1824 +#: ../libpurple/protocols/simple/simple.c:1829 msgid "SIP/SIMPLE Protocol Plugin" msgstr "Modul protokolu SIP/SIMPLE" #. * summary -#: ../libpurple/protocols/simple/simple.c:1825 +#: ../libpurple/protocols/simple/simple.c:1830 msgid "The SIP/SIMPLE Protocol Plugin" msgstr "Modul pre protokol SIP/SIMPLE" -#: ../libpurple/protocols/simple/simple.c:1853 +#: ../libpurple/protocols/simple/simple.c:1858 msgid "Publish status (note: everyone may watch you)" msgstr "Zverejniť stav (poznámka: ktokoľvek vás môže sledovať)" -#: ../libpurple/protocols/simple/simple.c:1859 +#: ../libpurple/protocols/simple/simple.c:1864 msgid "Use UDP" msgstr "Používať UDP" -#: ../libpurple/protocols/simple/simple.c:1861 +#: ../libpurple/protocols/simple/simple.c:1866 msgid "Use proxy" msgstr "Používať proxy" -#: ../libpurple/protocols/simple/simple.c:1863 +#: ../libpurple/protocols/simple/simple.c:1868 msgid "Proxy" msgstr "Proxy" -#: ../libpurple/protocols/simple/simple.c:1865 +#: ../libpurple/protocols/simple/simple.c:1870 msgid "Auth User" msgstr "Autentifikačný používateľ" -#: ../libpurple/protocols/simple/simple.c:1867 +#: ../libpurple/protocols/simple/simple.c:1872 msgid "Auth Domain" msgstr "Autentifikačná doména" @@ -10939,8 +11095,8 @@ msgid "Password Change Successful" msgstr "Heslo bolo úspešne zmenené" -#: ../libpurple/protocols/toc/toc.c:1366 ../pidgin/gtkblist.c:5519 -#: ../pidgin/gtkblist.c:5873 +#: ../libpurple/protocols/toc/toc.c:1366 ../pidgin/gtkblist.c:5530 +#: ../pidgin/gtkblist.c:5883 msgid "_Group:" msgstr "Skupina:" @@ -11007,32 +11163,32 @@ msgid "TOC Protocol Plugin" msgstr "Modul protokolu TOC" -#: ../libpurple/protocols/yahoo/yahoo.c:810 +#: ../libpurple/protocols/yahoo/yahoo.c:823 msgid "Your Yahoo! message did not get sent." msgstr "Vaša Yahoo! správa sa neodoslala." -#: ../libpurple/protocols/yahoo/yahoo.c:880 +#: ../libpurple/protocols/yahoo/yahoo.c:895 #, c-format msgid "%s just sent you a Buzz!" msgstr "%s vám práve poslal bzzz!" -#: ../libpurple/protocols/yahoo/yahoo.c:927 +#: ../libpurple/protocols/yahoo/yahoo.c:942 #, c-format msgid "Yahoo! system message for %s:" msgstr "Systémová správa Yahoo! pre %s:" -#: ../libpurple/protocols/yahoo/yahoo.c:986 +#: ../libpurple/protocols/yahoo/yahoo.c:1013 msgid "Authorization denied message:" msgstr "Správa odmietnutia autorizácie" -#: ../libpurple/protocols/yahoo/yahoo.c:1067 +#: ../libpurple/protocols/yahoo/yahoo.c:1142 #, c-format msgid "%s has (retroactively) denied your request to add them to your list." msgstr "" "Používateľ %s (retroaktívne) zamietol vašu žiadosť o jeho pridanie do vášho " "zoznamu." -#: ../libpurple/protocols/yahoo/yahoo.c:1070 +#: ../libpurple/protocols/yahoo/yahoo.c:1145 #, c-format msgid "" "%s has (retroactively) denied your request to add them to your list for the " @@ -11041,11 +11197,11 @@ "Používateľ %s (retroaktívne) zamietol vašu žiadosť o jeho pridanie do vášho " "zoznamu z nasledujúceho dôvodu: %s." -#: ../libpurple/protocols/yahoo/yahoo.c:1073 +#: ../libpurple/protocols/yahoo/yahoo.c:1148 msgid "Add buddy rejected" msgstr "Pridanie kamaráta odmietnuté" -#: ../libpurple/protocols/yahoo/yahoo.c:1824 +#: ../libpurple/protocols/yahoo/yahoo.c:1899 #, c-format msgid "" "The Yahoo server has requested the use of an unrecognized authentication " @@ -11053,14 +11209,13 @@ "Check %s for updates." msgstr "" "Yahoo server vyžaduje neznámy spôsob autentifikácie. Zrejme sa nebude dať " -"úspešne prihlásiť na Yahoo. Na adrese %s " -"skontrolujte možnosť aktualizácie." - -#: ../libpurple/protocols/yahoo/yahoo.c:1827 +"úspešne prihlásiť na Yahoo. Na adrese %s skontrolujte možnosť aktualizácie." + +#: ../libpurple/protocols/yahoo/yahoo.c:1902 msgid "Failed Yahoo! Authentication" msgstr "Zlyhala Yahoo! autentifikácia" -#: ../libpurple/protocols/yahoo/yahoo.c:1893 +#: ../libpurple/protocols/yahoo/yahoo.c:1968 #, c-format msgid "" "You have tried to ignore %s, but the user is on your buddy list. Clicking " @@ -11070,51 +11225,51 @@ "vašom zozname priateľov. Kliknutím \"Áno\" odstránite používateľa zo zoznamu " "priateľov a ignorujete ho." -#: ../libpurple/protocols/yahoo/yahoo.c:1896 +#: ../libpurple/protocols/yahoo/yahoo.c:1971 msgid "Ignore buddy?" msgstr "Ignorovať priateľa?" -#: ../libpurple/protocols/yahoo/yahoo.c:1955 +#: ../libpurple/protocols/yahoo/yahoo.c:2034 msgid "Your account is locked, please log in to the Yahoo! website." msgstr "Váš účet je uzamknutý, prihláste sa, prosím, na webstránke Yahoo!." -#: ../libpurple/protocols/yahoo/yahoo.c:1958 +#: ../libpurple/protocols/yahoo/yahoo.c:2037 #, c-format msgid "Unknown error number %d. Logging into the Yahoo! website may fix this." msgstr "" "Neznáme číslo chyby %d. Prihlásenie sa na stránke Yahoo! to môže napraviť." -#: ../libpurple/protocols/yahoo/yahoo.c:2012 +#: ../libpurple/protocols/yahoo/yahoo.c:2091 #, c-format msgid "Could not add buddy %s to group %s to the server list on account %s." msgstr "" "Nepodarilo sa pridať kamaráta %s do skupiny %s do zoznamu na serveri na účte " "%s." -#: ../libpurple/protocols/yahoo/yahoo.c:2015 +#: ../libpurple/protocols/yahoo/yahoo.c:2094 msgid "Could not add buddy to server list" msgstr "Nepodarilo sa pridať priateľa do serverového zoznamu" -#: ../libpurple/protocols/yahoo/yahoo.c:2134 +#: ../libpurple/protocols/yahoo/yahoo.c:2213 #, c-format msgid "[ Audible %s/%s/%s.swf ] %s" msgstr "[ Počúvateľné %s/%s/%s.swf ] %s" -#: ../libpurple/protocols/yahoo/yahoo.c:2474 +#: ../libpurple/protocols/yahoo/yahoo.c:2556 msgid "Received unexpected HTTP response from server." msgstr "Zo serveru bola prijatá neočakávaná HTTP odpoveď." -#: ../libpurple/protocols/yahoo/yahoo.c:2498 -#: ../libpurple/protocols/yahoo/yahoo.c:2684 -#: ../libpurple/protocols/yahoo/yahoo.c:2787 -#: ../libpurple/protocols/yahoo/yahoo.c:2797 +#: ../libpurple/protocols/yahoo/yahoo.c:2580 +#: ../libpurple/protocols/yahoo/yahoo.c:2766 +#: ../libpurple/protocols/yahoo/yahoo.c:2869 +#: ../libpurple/protocols/yahoo/yahoo.c:2879 #: ../libpurple/protocols/yahoo/yahoochat.c:1418 #: ../libpurple/protocols/yahoo/yahoochat.c:1488 #: ../libpurple/protocols/yahoo/ycht.c:585 msgid "Connection problem" msgstr "Problém pripojenia" -#: ../libpurple/protocols/yahoo/yahoo.c:2524 +#: ../libpurple/protocols/yahoo/yahoo.c:2606 #, c-format msgid "" "Lost connection with %s:\n" @@ -11123,7 +11278,7 @@ "Prerušené pripojenie ku %s:\n" "%s" -#: ../libpurple/protocols/yahoo/yahoo.c:2549 +#: ../libpurple/protocols/yahoo/yahoo.c:2631 #, c-format msgid "" "Could not establish a connection with %s:\n" @@ -11132,109 +11287,112 @@ "Nebolo možné založiť spojenie s %s:\n" "%s" -#: ../libpurple/protocols/yahoo/yahoo.c:2899 -#: ../libpurple/protocols/yahoo/yahoo.c:3510 +#: ../libpurple/protocols/yahoo/yahoo.c:2981 +#: ../libpurple/protocols/yahoo/yahoo.c:3667 msgid "Not at Home" msgstr "Nie som doma" -#: ../libpurple/protocols/yahoo/yahoo.c:2901 -#: ../libpurple/protocols/yahoo/yahoo.c:3513 +#: ../libpurple/protocols/yahoo/yahoo.c:2983 +#: ../libpurple/protocols/yahoo/yahoo.c:3670 msgid "Not at Desk" msgstr "Nie som pri stole" -#: ../libpurple/protocols/yahoo/yahoo.c:2903 -#: ../libpurple/protocols/yahoo/yahoo.c:3516 +#: ../libpurple/protocols/yahoo/yahoo.c:2985 +#: ../libpurple/protocols/yahoo/yahoo.c:3673 msgid "Not in Office" msgstr "Nie som v kancelárii" -#: ../libpurple/protocols/yahoo/yahoo.c:2907 -#: ../libpurple/protocols/yahoo/yahoo.c:3522 +#: ../libpurple/protocols/yahoo/yahoo.c:2989 +#: ../libpurple/protocols/yahoo/yahoo.c:3679 msgid "On Vacation" msgstr "Na dovolenke" -#: ../libpurple/protocols/yahoo/yahoo.c:2911 -#: ../libpurple/protocols/yahoo/yahoo.c:3528 +#: ../libpurple/protocols/yahoo/yahoo.c:2993 +#: ../libpurple/protocols/yahoo/yahoo.c:3685 msgid "Stepped Out" msgstr "Vyrazil si von" -#: ../libpurple/protocols/yahoo/yahoo.c:3004 -#: ../libpurple/protocols/yahoo/yahoo.c:3034 +#: ../libpurple/protocols/yahoo/yahoo.c:3086 +#: ../libpurple/protocols/yahoo/yahoo.c:3116 msgid "Not on server list" msgstr "Nie je na zozname serverov" -#: ../libpurple/protocols/yahoo/yahoo.c:3051 -#: ../libpurple/protocols/yahoo/yahoo.c:3109 +#: ../libpurple/protocols/yahoo/yahoo.c:3133 +#: ../libpurple/protocols/yahoo/yahoo.c:3191 msgid "Appear Online" msgstr "Javí sa pripojený" -#: ../libpurple/protocols/yahoo/yahoo.c:3054 -#: ../libpurple/protocols/yahoo/yahoo.c:3130 +#: ../libpurple/protocols/yahoo/yahoo.c:3136 +#: ../libpurple/protocols/yahoo/yahoo.c:3212 msgid "Appear Permanently Offline" msgstr "Javí sa trvale odpojený" -#: ../libpurple/protocols/yahoo/yahoo.c:3072 +#: ../libpurple/protocols/yahoo/yahoo.c:3154 msgid "Presence" msgstr "Prítomnosť" -#: ../libpurple/protocols/yahoo/yahoo.c:3115 +#: ../libpurple/protocols/yahoo/yahoo.c:3197 msgid "Appear Offline" msgstr "Javí sa odpojený" -#: ../libpurple/protocols/yahoo/yahoo.c:3124 +#: ../libpurple/protocols/yahoo/yahoo.c:3206 msgid "Don't Appear Permanently Offline" msgstr "Nejaví sa trvale odpojený" -#: ../libpurple/protocols/yahoo/yahoo.c:3172 +#: ../libpurple/protocols/yahoo/yahoo.c:3254 msgid "Join in Chat" msgstr "Spojiť sa v chate" -#: ../libpurple/protocols/yahoo/yahoo.c:3178 +#: ../libpurple/protocols/yahoo/yahoo.c:3260 msgid "Initiate Conference" msgstr "Založiť konferenciu" -#: ../libpurple/protocols/yahoo/yahoo.c:3206 +#: ../libpurple/protocols/yahoo/yahoo.c:3288 msgid "Presence Settings" msgstr "Nastavenie prítomnosti" -#: ../libpurple/protocols/yahoo/yahoo.c:3212 +#: ../libpurple/protocols/yahoo/yahoo.c:3294 msgid "Start Doodling" msgstr "Začať \"Doodlovať\"" -#. XXX Typo: This should be _("Activate which ID?") - fix after string freeze is over -#: ../libpurple/protocols/yahoo/yahoo.c:3245 -msgid "Active which ID?" -msgstr "Aktivovať ktoré ID?" - -#: ../libpurple/protocols/yahoo/yahoo.c:3256 +#: ../libpurple/protocols/yahoo/yahoo.c:3395 +msgid "Activate which ID?" +msgstr "Aktivovať s ID?" + +#: ../libpurple/protocols/yahoo/yahoo.c:3406 msgid "Join who in chat?" msgstr "S kým sa spojiť v chate?" -#: ../libpurple/protocols/yahoo/yahoo.c:3268 +#: ../libpurple/protocols/yahoo/yahoo.c:3418 msgid "Activate ID..." msgstr "Aktivovať ID..." -#: ../libpurple/protocols/yahoo/yahoo.c:3272 +#: ../libpurple/protocols/yahoo/yahoo.c:3422 msgid "Join User in Chat..." msgstr "Spojiť sa s používateľom v chate..." -#: ../libpurple/protocols/yahoo/yahoo.c:3779 +#: ../libpurple/protocols/yahoo/yahoo.c:3427 +msgid "Open Inbox" +msgstr "Otvoriť schránku Inbox" + +#: ../libpurple/protocols/yahoo/yahoo.c:3947 msgid "You have just sent a Buzz!" msgstr "Práve ste odoslali bzzz!" -#: ../libpurple/protocols/yahoo/yahoo.c:3838 +#: ../libpurple/protocols/yahoo/yahoo.c:4006 msgid "join <room>: Join a chat room on the Yahoo network" msgstr "" "join <miestnosť>: Vstúpiť do chatovacej miestnosti na sieti Yahoo" -#: ../libpurple/protocols/yahoo/yahoo.c:3843 +#: ../libpurple/protocols/yahoo/yahoo.c:4011 msgid "list: List rooms on the Yahoo network" msgstr "list: Vypísať zoznam miestností na sieti Yahoo" -#: ../libpurple/protocols/yahoo/yahoo.c:3847 +#: ../libpurple/protocols/yahoo/yahoo.c:4015 msgid "buzz: Buzz a user to get their attention" msgstr "buzz: Pošlite používateľovi \"bzzz\" a tým si získajte jeho pozornosť" -#: ../libpurple/protocols/yahoo/yahoo.c:3851 +#: ../libpurple/protocols/yahoo/yahoo.c:4019 msgid "doodle: Request user to start a Doodle session" msgstr "doodle: Požiadať používateľa o sedenie Doodle" @@ -11248,56 +11406,56 @@ #. *< version #. * summary #. * description -#: ../libpurple/protocols/yahoo/yahoo.c:4059 -#: ../libpurple/protocols/yahoo/yahoo.c:4061 +#: ../libpurple/protocols/yahoo/yahoo.c:4227 +#: ../libpurple/protocols/yahoo/yahoo.c:4229 msgid "Yahoo Protocol Plugin" msgstr "Modul protokolu Yahoo" -#: ../libpurple/protocols/yahoo/yahoo.c:4084 +#: ../libpurple/protocols/yahoo/yahoo.c:4252 msgid "Yahoo Japan" msgstr "Yahoo Japonsko" -#: ../libpurple/protocols/yahoo/yahoo.c:4087 +#: ../libpurple/protocols/yahoo/yahoo.c:4255 msgid "Pager server" msgstr "Server pageru" -#: ../libpurple/protocols/yahoo/yahoo.c:4090 +#: ../libpurple/protocols/yahoo/yahoo.c:4258 msgid "Japan Pager server" msgstr "Server pageru pre Japonsko" -#: ../libpurple/protocols/yahoo/yahoo.c:4093 +#: ../libpurple/protocols/yahoo/yahoo.c:4261 msgid "Pager port" msgstr "Port pageru" -#: ../libpurple/protocols/yahoo/yahoo.c:4096 +#: ../libpurple/protocols/yahoo/yahoo.c:4264 msgid "File transfer server" msgstr "Server prenosu súborov" -#: ../libpurple/protocols/yahoo/yahoo.c:4099 +#: ../libpurple/protocols/yahoo/yahoo.c:4267 msgid "Japan file transfer server" msgstr "Japonský server prenosu súborov" -#: ../libpurple/protocols/yahoo/yahoo.c:4102 +#: ../libpurple/protocols/yahoo/yahoo.c:4270 msgid "File transfer port" msgstr "Port prenosu súborov" -#: ../libpurple/protocols/yahoo/yahoo.c:4105 +#: ../libpurple/protocols/yahoo/yahoo.c:4273 msgid "Chat room locale" msgstr "Jazyk chatovacej miestnosti" -#: ../libpurple/protocols/yahoo/yahoo.c:4108 +#: ../libpurple/protocols/yahoo/yahoo.c:4276 msgid "Ignore conference and chatroom invitations" msgstr "Ignorovať pozvánky na konferencie a chatovacie miestnosti" -#: ../libpurple/protocols/yahoo/yahoo.c:4116 +#: ../libpurple/protocols/yahoo/yahoo.c:4284 msgid "Chat room list URL" msgstr "URL zoznamu miestností chatu" -#: ../libpurple/protocols/yahoo/yahoo.c:4119 +#: ../libpurple/protocols/yahoo/yahoo.c:4287 msgid "Yahoo Chat server" msgstr "Server Yahoo chatu" -#: ../libpurple/protocols/yahoo/yahoo.c:4122 +#: ../libpurple/protocols/yahoo/yahoo.c:4290 msgid "Yahoo Chat port" msgstr "Port Yahoo chatu" @@ -11388,19 +11546,19 @@ msgstr "Nepodarilo sa založiť deskriptor súboru." #. TODO: what to do here - do we really have to disconnect? -#: ../libpurple/protocols/yahoo/yahoo_packet.c:302 +#: ../libpurple/protocols/yahoo/yahoo_packet.c:307 msgid "Write Error" msgstr "Chyba zápisu" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:773 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:797 msgid "Yahoo! Japan Profile" msgstr "Profil Yahoo! Japonsko" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:774 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:798 msgid "Yahoo! Profile" msgstr "Profil Yahoo!" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:814 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:838 msgid "" "Sorry, profiles marked as containing adult content are not supported at this " "time." @@ -11408,55 +11566,55 @@ "Žiaľ, profily označné ako obsahujúce obsah pre dospelých nie sú zatiaľ " "podporované." -#: ../libpurple/protocols/yahoo/yahoo_profile.c:816 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:840 msgid "" "If you wish to view this profile, you will need to visit this link in your " "web browser:" msgstr "" -"Ak si chcete prezrieť tento profil, musíte navštívíť tento odkaz vo " -"vašom internetovom prehliadači:" - -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1010 +"Ak si chcete prezrieť tento profil, musíte navštívíť tento odkaz vo vašom " +"internetovom prehliadači:" + +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1034 msgid "Yahoo! ID" msgstr "Yahoo! ID" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1085 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1089 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1093 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1109 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1113 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1117 msgid "Hobbies" msgstr "Koníčky" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1103 -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1107 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1127 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1131 msgid "Latest News" msgstr "Aktuálne novinky" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1128 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1152 msgid "Home Page" msgstr "Domovská stránka" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1143 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1167 msgid "Cool Link 1" msgstr "Super odkaz 1" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1148 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1172 msgid "Cool Link 2" msgstr "Super odkaz 2" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1152 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1176 msgid "Cool Link 3" msgstr "Super odkaz 3" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1166 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1190 msgid "Last Update" msgstr "Posledná aktualizácia" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1175 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1199 #, c-format msgid "User information for %s unavailable" msgstr "Podrobnosti o používateľovi %s nie sú dostupné" -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1181 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1205 msgid "" "Sorry, this profile seems to be in a language or format that is not " "supported at this time." @@ -11464,7 +11622,7 @@ "Prepáčte, ale tento profil je v jazyku alebo formáte, ktorý momentálne nie " "je podporovaný." -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1197 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1221 msgid "" "Could not retrieve the user's profile. This most likely is a temporary " "server-side problem. Please try again later." @@ -11472,7 +11630,7 @@ "Nepodarilo sa stiahnuť profil používateľa. Toto je zrejme krádkodobý problém " "na strane serveru. Skúste to, prosím, neskôr." -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1200 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1224 msgid "" "Could not retrieve the user's profile. This most likely means that the user " "does not exist; however, Yahoo! sometimes does fail to find a user's " @@ -11483,7 +11641,7 @@ "používateľa. Ak ste si istý, že tento používateľ existuje, skúste to znovu " "neskôr." -#: ../libpurple/protocols/yahoo/yahoo_profile.c:1207 +#: ../libpurple/protocols/yahoo/yahoo_profile.c:1231 msgid "The user's profile is empty." msgstr "Profil používateľa je prázdny." @@ -11760,7 +11918,7 @@ msgid "Unset" msgstr "Nenastavené" -#: ../libpurple/status.c:155 ../pidgin/gtkstatusbox.c:1057 +#: ../libpurple/status.c:155 ../pidgin/gtkstatusbox.c:1058 msgid "Do not disturb" msgstr "Nerušiť" @@ -11812,12 +11970,12 @@ msgid "%x %X" msgstr "%x %X" -#: ../libpurple/util.c:2691 +#: ../libpurple/util.c:2702 #, c-format msgid "Error Reading %s" msgstr "Chyba počas čítania %s" -#: ../libpurple/util.c:2692 +#: ../libpurple/util.c:2703 #, c-format msgid "" "An error was encountered reading your %s. They have not been loaded, and " @@ -11826,15 +11984,15 @@ "Počas načítavania vášho %s sa vyskytla chyba. Zoznam nebol načítaný a starý " "súbor bol premenovaný na %s~." -#: ../libpurple/util.c:3192 +#: ../libpurple/util.c:3203 msgid "Calculating..." msgstr "Počíta sa..." -#: ../libpurple/util.c:3195 +#: ../libpurple/util.c:3206 msgid "Unknown." msgstr "Neznáme." -#: ../libpurple/util.c:3221 +#: ../libpurple/util.c:3232 #, c-format msgid "%d second" msgid_plural "%d seconds" @@ -11842,7 +12000,7 @@ msgstr[1] "%d sekunda" msgstr[2] "%d sekundy" -#: ../libpurple/util.c:3233 +#: ../libpurple/util.c:3244 #, c-format msgid "%d day" msgid_plural "%d days" @@ -11850,7 +12008,7 @@ msgstr[1] "%d deň" msgstr[2] "%d dni" -#: ../libpurple/util.c:3241 +#: ../libpurple/util.c:3252 #, c-format msgid "%s, %d hour" msgid_plural "%s, %d hours" @@ -11858,7 +12016,7 @@ msgstr[1] "%s, %d hodina" msgstr[2] "%s, %d hodiny" -#: ../libpurple/util.c:3247 +#: ../libpurple/util.c:3258 #, c-format msgid "%d hour" msgid_plural "%d hours" @@ -11866,7 +12024,7 @@ msgstr[1] "%d hodina" msgstr[2] "%d hodiny" -#: ../libpurple/util.c:3255 +#: ../libpurple/util.c:3266 #, c-format msgid "%s, %d minute" msgid_plural "%s, %d minutes" @@ -11874,7 +12032,7 @@ msgstr[1] "%s, %d minúta" msgstr[2] "%s, %d minúty" -#: ../libpurple/util.c:3261 +#: ../libpurple/util.c:3272 #, c-format msgid "%d minute" msgid_plural "%d minutes" @@ -11882,17 +12040,17 @@ msgstr[1] "%d minúta" msgstr[2] "%d minúty" -#: ../libpurple/util.c:3521 +#: ../libpurple/util.c:3532 #, c-format msgid "Could not open %s: Redirected too many times" -msgstr "" - -#: ../libpurple/util.c:3558 ../libpurple/util.c:3853 +msgstr "Nepodarilo sa otvoriť %s: Presmerovaný príliš veľa kráť" + +#: ../libpurple/util.c:3569 ../libpurple/util.c:3864 #, c-format msgid "Unable to connect to %s" msgstr "Nepodarilo sa pripojiť na %s" -#: ../libpurple/util.c:3681 +#: ../libpurple/util.c:3692 #, c-format msgid "" "Unable to allocate enough memory to hold the contents from %s. The web " @@ -11901,17 +12059,17 @@ "Nebolo možné rezervovať dostatok pamäťového priestoru pre údaje z %s. " "Webový server sa možno pokúša o niečo nebezpečné." -#: ../libpurple/util.c:3716 +#: ../libpurple/util.c:3727 #, c-format msgid "Error reading from %s: %s" msgstr "Chyba pri čítaní z %s: %s" -#: ../libpurple/util.c:3747 +#: ../libpurple/util.c:3758 #, c-format msgid "Error writing to %s: %s" msgstr "Chyba pri zápise do %s: %s" -#: ../libpurple/util.c:3772 +#: ../libpurple/util.c:3783 #, c-format msgid "Unable to connect to %s: %s" msgstr "Nepodarilo sa pripojiť ku %s: %s" @@ -11922,7 +12080,7 @@ #: ../pidgin.desktop.in.h:2 msgid "Pidgin Internet Messenger" -msgstr "Internetový komunikátor Pidžin" +msgstr "Internetový komunikátor Pidgin" #: ../pidgin.desktop.in.h:3 msgid "Send instant messages over multiple protocols" @@ -12002,7 +12160,7 @@ msgid "SOCKS 5" msgstr "SOCKS 5" -#: ../pidgin/gtkaccount.c:967 ../pidgin/gtkprefs.c:1206 +#: ../pidgin/gtkaccount.c:967 ../pidgin/gtkprefs.c:1208 msgid "Use Environmental Settings" msgstr "Použiť nastavenie prostredia" @@ -12024,15 +12182,15 @@ msgid "Proxy Options" msgstr "Možnosti proxy" -#: ../pidgin/gtkaccount.c:1044 ../pidgin/gtkprefs.c:1200 +#: ../pidgin/gtkaccount.c:1044 ../pidgin/gtkprefs.c:1202 msgid "Proxy _type:" msgstr "_Typ proxy:" -#: ../pidgin/gtkaccount.c:1053 ../pidgin/gtkprefs.c:1221 +#: ../pidgin/gtkaccount.c:1053 ../pidgin/gtkprefs.c:1223 msgid "_Host:" msgstr "_Hostiteľ:" -#: ../pidgin/gtkaccount.c:1057 ../pidgin/gtkprefs.c:1239 +#: ../pidgin/gtkaccount.c:1057 ../pidgin/gtkprefs.c:1241 msgid "_Port:" msgstr "_Port:" @@ -12040,31 +12198,31 @@ msgid "_Username:" msgstr "Po_užívateľské meno:" -#: ../pidgin/gtkaccount.c:1072 ../pidgin/gtkprefs.c:1276 +#: ../pidgin/gtkaccount.c:1072 ../pidgin/gtkprefs.c:1278 msgid "Pa_ssword:" msgstr "He_slo:" -#: ../pidgin/gtkaccount.c:1473 +#: ../pidgin/gtkaccount.c:1478 msgid "Add Account" msgstr "Pridať účet" -#: ../pidgin/gtkaccount.c:1492 +#: ../pidgin/gtkaccount.c:1497 msgid "_Basic" msgstr "_Základné" -#: ../pidgin/gtkaccount.c:1503 +#: ../pidgin/gtkaccount.c:1508 msgid "_Advanced" msgstr "_Pokročilé" -#: ../pidgin/gtkaccount.c:1975 ../pidgin/gtkplugin.c:568 +#: ../pidgin/gtkaccount.c:1982 ../pidgin/gtkplugin.c:568 msgid "Enabled" -msgstr "Povolené" - -#: ../pidgin/gtkaccount.c:2003 +msgstr "Povolený" + +#: ../pidgin/gtkaccount.c:2010 msgid "Protocol" msgstr "Protokol" -#: ../pidgin/gtkaccount.c:2203 +#: ../pidgin/gtkaccount.c:2210 #, c-format msgid "" "<span size='larger' weight='bold'>Welcome to %s!</span>\n" @@ -12081,17 +12239,18 @@ "\n" "Ešte nemáte nastavené žiadne IM účty. Ak sa chcete pripojiť pomocou programu " "%s, stlačte tlačidlo <b>Pridať</b> a vyplňte príslušné údaje o vašom " -"internetovom účte. Ak sa chcete cez program %s pripájať na viaceré komunikačné " -"účty, kliknite znovu <b>Pridať</b> a nakonfigurujte aj ďalšie.\n" +"internetovom účte. Ak sa chcete cez program %s pripájať na viaceré " +"komunikačné účty, kliknite znovu <b>Pridať</b> a nakonfigurujte aj ďalšie.\n" "\n" "Ak budete chcieť neskôr pridať, upravovať alebo odstrániť niektoré účty, " -"toto okno otvoríte v ponuke <b>Účty->Pridať/Upraviťt</b> v okne Zoznam priateľov" - -#: ../pidgin/gtkblist.c:763 +"toto okno otvoríte v ponuke <b>Účty->Pridať/Upraviťt</b> v okne Zoznam " +"priateľov" + +#: ../pidgin/gtkblist.c:760 msgid "Join a Chat" msgstr "Pripojiť sa k chatu" -#: ../pidgin/gtkblist.c:784 +#: ../pidgin/gtkblist.c:781 msgid "" "Please enter the appropriate information about the chat you would like to " "join.\n" @@ -12100,65 +12259,65 @@ "pripojiť.\n" #. Set up stuff for the account box -#: ../pidgin/gtkblist.c:795 ../pidgin/gtkblist.c:5467 -#: ../pidgin/gtkblist.c:5834 ../pidgin/gtkpounce.c:540 +#: ../pidgin/gtkblist.c:792 ../pidgin/gtkblist.c:5478 +#: ../pidgin/gtkblist.c:5844 ../pidgin/gtkpounce.c:540 #: ../pidgin/gtkroomlist.c:395 msgid "_Account:" msgstr "_Účet:" -#: ../pidgin/gtkblist.c:1084 ../pidgin/gtkprivacy.c:602 +#: ../pidgin/gtkblist.c:1081 ../pidgin/gtkprivacy.c:602 #: ../pidgin/gtkprivacy.c:616 msgid "_Block" msgstr "_Blokovať" -#: ../pidgin/gtkblist.c:1084 +#: ../pidgin/gtkblist.c:1081 msgid "Un_block" msgstr "Od_blokovať" -#: ../pidgin/gtkblist.c:1135 +#: ../pidgin/gtkblist.c:1132 msgid "Get _Info" msgstr "Zobraziťo podrobnosti" -#: ../pidgin/gtkblist.c:1138 ../pidgin/pidginstock.c:84 +#: ../pidgin/gtkblist.c:1135 ../pidgin/pidginstock.c:84 msgid "I_M" msgstr "I_M" -#: ../pidgin/gtkblist.c:1144 +#: ../pidgin/gtkblist.c:1141 msgid "_Send File" msgstr "Odoslať _súbor" -#: ../pidgin/gtkblist.c:1151 +#: ../pidgin/gtkblist.c:1148 msgid "Add Buddy _Pounce" msgstr "Pridať _sledovanie priatela" -#: ../pidgin/gtkblist.c:1155 ../pidgin/gtkblist.c:1159 +#: ../pidgin/gtkblist.c:1153 ../pidgin/gtkblist.c:1157 #: ../pidgin/gtkblist.c:1262 ../pidgin/gtkblist.c:1285 msgid "View _Log" msgstr "Zobraziť _záznam" -#: ../pidgin/gtkblist.c:1171 ../pidgin/gtkblist.c:1180 +#: ../pidgin/gtkblist.c:1170 ../pidgin/gtkblist.c:1179 #: ../pidgin/gtkblist.c:1270 ../pidgin/gtkblist.c:1291 msgid "_Alias..." msgstr "_Prezývka..." -#: ../pidgin/gtkblist.c:1174 ../pidgin/gtkblist.c:1182 +#: ../pidgin/gtkblist.c:1173 ../pidgin/gtkblist.c:1181 #: ../pidgin/gtkblist.c:1272 ../pidgin/gtkblist.c:1293 msgid "_Remove" msgstr "Odst_rániť" -#: ../pidgin/gtkblist.c:1232 +#: ../pidgin/gtkblist.c:1231 msgid "Add a _Buddy" msgstr "Pridať priateľa" -#: ../pidgin/gtkblist.c:1235 +#: ../pidgin/gtkblist.c:1234 msgid "Add a C_hat" msgstr "Pridať chat" -#: ../pidgin/gtkblist.c:1238 +#: ../pidgin/gtkblist.c:1237 msgid "_Delete Group" msgstr "Odstrániť skupinu" -#: ../pidgin/gtkblist.c:1240 +#: ../pidgin/gtkblist.c:1239 msgid "_Rename" msgstr "Premenovať" @@ -12172,20 +12331,20 @@ msgid "Auto-Join" msgstr "Automatické prihlasovanie" -#: ../pidgin/gtkblist.c:1298 ../pidgin/gtkblist.c:1321 +#: ../pidgin/gtkblist.c:1298 ../pidgin/gtkblist.c:1322 msgid "_Collapse" msgstr "_Zabaliť" -#: ../pidgin/gtkblist.c:1326 +#: ../pidgin/gtkblist.c:1327 msgid "_Expand" msgstr "_Rozbaliť" -#: ../pidgin/gtkblist.c:1571 ../pidgin/gtkblist.c:1583 -#: ../pidgin/gtkblist.c:4561 ../pidgin/gtkblist.c:4571 +#: ../pidgin/gtkblist.c:1572 ../pidgin/gtkblist.c:1584 +#: ../pidgin/gtkblist.c:4572 ../pidgin/gtkblist.c:4582 msgid "/Tools/Mute Sounds" msgstr "/Nástroje/Vypnúť zvuky" -#: ../pidgin/gtkblist.c:2043 ../pidgin/gtkconv.c:4602 +#: ../pidgin/gtkblist.c:2044 ../pidgin/gtkconv.c:4731 #: ../pidgin/gtkpounce.c:429 msgid "" "You are not currently signed on with an account that can add that buddy." @@ -12194,126 +12353,126 @@ "priateľa." #. Buddies menu -#: ../pidgin/gtkblist.c:2838 +#: ../pidgin/gtkblist.c:2850 msgid "/_Buddies" msgstr "/_Priatelia" -#: ../pidgin/gtkblist.c:2839 +#: ../pidgin/gtkblist.c:2851 msgid "/Buddies/New Instant _Message..." msgstr "/Priatelia/Nová _správa..." -#: ../pidgin/gtkblist.c:2840 +#: ../pidgin/gtkblist.c:2852 msgid "/Buddies/Join a _Chat..." msgstr "/Priatelia/Pripojiť sa k _chatu..." -#: ../pidgin/gtkblist.c:2841 +#: ../pidgin/gtkblist.c:2853 msgid "/Buddies/Get User _Info..." -msgstr "/Priatelia/Získať _podrobnosti o používateľovi..." - -#: ../pidgin/gtkblist.c:2842 +msgstr "/Priatelia/_Podrobnosti o používateľovi..." + +#: ../pidgin/gtkblist.c:2854 msgid "/Buddies/View User _Log..." -msgstr "/Priatelia/Zobraziť _záznam používateľa..." - -#: ../pidgin/gtkblist.c:2844 +msgstr "/Priatelia/_Záznam používateľa..." + +#: ../pidgin/gtkblist.c:2856 msgid "/Buddies/Show _Offline Buddies" msgstr "/Priatelia/Zobraziť _nepripojených priateľov" -#: ../pidgin/gtkblist.c:2845 +#: ../pidgin/gtkblist.c:2857 msgid "/Buddies/Show _Empty Groups" msgstr "/Priateliai/Zobraziť prázdne s_kupiny" -#: ../pidgin/gtkblist.c:2846 +#: ../pidgin/gtkblist.c:2858 msgid "/Buddies/Show Buddy _Details" msgstr "/Priatelia/Zobraziť _detaily priateľov" -#: ../pidgin/gtkblist.c:2847 +#: ../pidgin/gtkblist.c:2859 msgid "/Buddies/Show Idle _Times" msgstr "/Priatelia/Zobraziť č_asy nečinnosti" -#: ../pidgin/gtkblist.c:2848 +#: ../pidgin/gtkblist.c:2860 msgid "/Buddies/_Sort Buddies" msgstr "/Priatelia/Zo_radiť priateľov" -#: ../pidgin/gtkblist.c:2850 +#: ../pidgin/gtkblist.c:2862 msgid "/Buddies/_Add Buddy..." msgstr "/Priatelia/Pridať priat_eľa..." -#: ../pidgin/gtkblist.c:2851 +#: ../pidgin/gtkblist.c:2863 msgid "/Buddies/Add C_hat..." msgstr "/Priatelia/Pridať cha_t..." -#: ../pidgin/gtkblist.c:2852 +#: ../pidgin/gtkblist.c:2864 msgid "/Buddies/Add _Group..." msgstr "/Priatelia/Pridať sk_upinu..." -#: ../pidgin/gtkblist.c:2854 +#: ../pidgin/gtkblist.c:2866 msgid "/Buddies/_Quit" msgstr "/Priatelia/_Ukončiť" #. Accounts menu -#: ../pidgin/gtkblist.c:2857 +#: ../pidgin/gtkblist.c:2869 msgid "/_Accounts" msgstr "/Úč_ty" -#: ../pidgin/gtkblist.c:2858 ../pidgin/gtkblist.c:6532 +#: ../pidgin/gtkblist.c:2870 ../pidgin/gtkblist.c:6542 msgid "/Accounts/Add\\/Edit" msgstr "/Účty/Pri_dať a upraviť" #. Tools -#: ../pidgin/gtkblist.c:2861 +#: ../pidgin/gtkblist.c:2873 msgid "/_Tools" msgstr "/_Nástroje" -#: ../pidgin/gtkblist.c:2862 +#: ../pidgin/gtkblist.c:2874 msgid "/Tools/Buddy _Pounces" msgstr "/Nástroje/_Sledovanie priateľov" -#: ../pidgin/gtkblist.c:2863 +#: ../pidgin/gtkblist.c:2875 msgid "/Tools/Plu_gins" msgstr "/Nástroje/_Moduly" -#: ../pidgin/gtkblist.c:2864 +#: ../pidgin/gtkblist.c:2876 msgid "/Tools/Pr_eferences" msgstr "/Nástroje/_Nastavenia" -#: ../pidgin/gtkblist.c:2865 +#: ../pidgin/gtkblist.c:2877 msgid "/Tools/Pr_ivacy" msgstr "/Nástroje/_Súkromie" -#: ../pidgin/gtkblist.c:2867 +#: ../pidgin/gtkblist.c:2879 msgid "/Tools/_File Transfers" msgstr "/Nástroje/_Prenosy súborov" -#: ../pidgin/gtkblist.c:2868 +#: ../pidgin/gtkblist.c:2880 msgid "/Tools/R_oom List" msgstr "/Nástroje/Zoznam _miestností" -#: ../pidgin/gtkblist.c:2869 +#: ../pidgin/gtkblist.c:2881 msgid "/Tools/System _Log" msgstr "/Nástroje/Systémový _záznam" -#: ../pidgin/gtkblist.c:2871 +#: ../pidgin/gtkblist.c:2883 msgid "/Tools/Mute _Sounds" msgstr "/Nástroje/Vypnúť _zvuky" #. Help -#: ../pidgin/gtkblist.c:2873 +#: ../pidgin/gtkblist.c:2885 msgid "/_Help" msgstr "/_Pomocník" -#: ../pidgin/gtkblist.c:2874 +#: ../pidgin/gtkblist.c:2886 msgid "/Help/Online _Help" msgstr "/Pomoc/Online _pomocník" -#: ../pidgin/gtkblist.c:2875 +#: ../pidgin/gtkblist.c:2887 msgid "/Help/_Debug Window" msgstr "/Pomoc/_Ladiace okno" -#: ../pidgin/gtkblist.c:2877 ../pidgin/gtkblist.c:2879 +#: ../pidgin/gtkblist.c:2889 ../pidgin/gtkblist.c:2891 msgid "/Help/_About" msgstr "/Pomoc/O _programe" -#: ../pidgin/gtkblist.c:2908 +#: ../pidgin/gtkblist.c:2920 #, c-format msgid "" "\n" @@ -12322,78 +12481,78 @@ "\n" "<b>Účet:</b> %s" -#: ../pidgin/gtkblist.c:2986 +#: ../pidgin/gtkblist.c:2998 msgid "Buddy Alias" msgstr "Prezývka priateľa" -#: ../pidgin/gtkblist.c:3015 +#: ../pidgin/gtkblist.c:3027 msgid "Logged In" msgstr "Prihlásený" -#: ../pidgin/gtkblist.c:3061 +#: ../pidgin/gtkblist.c:3073 msgid "Last Seen" msgstr "Naposledy tu" -#: ../pidgin/gtkblist.c:3081 +#: ../pidgin/gtkblist.c:3093 msgid "Spooky" msgstr "Strašidelné" -#: ../pidgin/gtkblist.c:3083 +#: ../pidgin/gtkblist.c:3095 msgid "Awesome" msgstr "Hrozné" -#: ../pidgin/gtkblist.c:3085 +#: ../pidgin/gtkblist.c:3097 msgid "Rockin'" msgstr "Super" -#: ../pidgin/gtkblist.c:3428 +#: ../pidgin/gtkblist.c:3436 #, c-format msgid "Idle %dd %dh %02dm" msgstr "Nečinný %dd %dh %02dm" -#: ../pidgin/gtkblist.c:3430 +#: ../pidgin/gtkblist.c:3438 #, c-format msgid "Idle %dh %02dm" msgstr "Nečinný %dh %02dm" -#: ../pidgin/gtkblist.c:3432 +#: ../pidgin/gtkblist.c:3440 #, c-format msgid "Idle %dm" msgstr "Nečinný %dm" -#: ../pidgin/gtkblist.c:3577 +#: ../pidgin/gtkblist.c:3585 msgid "/Buddies/New Instant Message..." msgstr "/Priatelia/Nová _správa..." -#: ../pidgin/gtkblist.c:3578 ../pidgin/gtkblist.c:3611 +#: ../pidgin/gtkblist.c:3586 ../pidgin/gtkblist.c:3619 msgid "/Buddies/Join a Chat..." msgstr "/Priatelia/Pripojiť sa k _chatu..." -#: ../pidgin/gtkblist.c:3579 +#: ../pidgin/gtkblist.c:3587 msgid "/Buddies/Get User Info..." msgstr "/Priatelia/Zobraziť podrobnosti..." -#: ../pidgin/gtkblist.c:3580 +#: ../pidgin/gtkblist.c:3588 msgid "/Buddies/Add Buddy..." msgstr "/Priatelia/Pridať priateľa..." -#: ../pidgin/gtkblist.c:3581 ../pidgin/gtkblist.c:3614 +#: ../pidgin/gtkblist.c:3589 ../pidgin/gtkblist.c:3622 msgid "/Buddies/Add Chat..." msgstr "/Priatelia/Pridať chat..." -#: ../pidgin/gtkblist.c:3582 +#: ../pidgin/gtkblist.c:3590 msgid "/Buddies/Add Group..." msgstr "/Priatelia/Pridať skupinu..." -#: ../pidgin/gtkblist.c:3617 +#: ../pidgin/gtkblist.c:3625 msgid "/Tools/Privacy" msgstr "/Nástroje/_Súkromie" -#: ../pidgin/gtkblist.c:3620 +#: ../pidgin/gtkblist.c:3628 msgid "/Tools/Room List" msgstr "/Nástroje/Zoznam _miestností" -#: ../pidgin/gtkblist.c:3717 ../pidgin/gtkdocklet.c:153 +#: ../pidgin/gtkblist.c:3725 ../pidgin/gtkdocklet.c:153 #, c-format msgid "%d unread message from %s\n" msgid_plural "%d unread messages from %s\n" @@ -12401,54 +12560,54 @@ msgstr[1] "%d neprečítaná správa od používateľa %s\n" msgstr[2] "%d neprečítané správy od používateľa %s\n" -#: ../pidgin/gtkblist.c:3797 +#: ../pidgin/gtkblist.c:3805 msgid "Manually" msgstr "Ručne" -#: ../pidgin/gtkblist.c:3799 +#: ../pidgin/gtkblist.c:3807 msgid "Alphabetically" msgstr "Podľa abecedy" -#: ../pidgin/gtkblist.c:3800 +#: ../pidgin/gtkblist.c:3808 msgid "By status" msgstr "Podľa stavu" -#: ../pidgin/gtkblist.c:3801 +#: ../pidgin/gtkblist.c:3809 msgid "By log size" msgstr "Podľa veľkosti záznamu" -#: ../pidgin/gtkblist.c:4005 ../pidgin/gtkconn.c:178 +#: ../pidgin/gtkblist.c:4014 ../pidgin/gtkconn.c:178 #, c-format msgid "%s disconnected" msgstr "%s bol odpojený" -#: ../pidgin/gtkblist.c:4015 +#: ../pidgin/gtkblist.c:4024 msgid "Re-enable Account" msgstr "Znovu povoliť účet" -#: ../pidgin/gtkblist.c:4039 +#: ../pidgin/gtkblist.c:4050 #, c-format msgid "<span color=\"red\">%s disconnected: %s</span>" msgstr "<span color=\"red\">%s bol odpojený: %s</span>" -#: ../pidgin/gtkblist.c:4191 +#: ../pidgin/gtkblist.c:4202 msgid "<b>Username:</b>" -msgstr "<b>Používateľské meno:</b>" - -#: ../pidgin/gtkblist.c:4198 +msgstr "<b>Prihlasovacie meno:</b>" + +#: ../pidgin/gtkblist.c:4209 msgid "<b>Password:</b>" msgstr "<b>Heslo:</b>" -#: ../pidgin/gtkblist.c:4209 +#: ../pidgin/gtkblist.c:4220 msgid "_Login" msgstr "Prihlásiť" -#: ../pidgin/gtkblist.c:4292 +#: ../pidgin/gtkblist.c:4303 msgid "/Accounts" msgstr "/Účty" #. Translators: Please maintain the use of -> and <- to refer to menu heirarchy -#: ../pidgin/gtkblist.c:4306 +#: ../pidgin/gtkblist.c:4317 #, c-format msgid "" "<span weight='bold' size='larger'>Welcome to %s!</span>\n" @@ -12459,31 +12618,31 @@ msgstr "" "<span weight='bold' size='larger'>Vitajte v programe %s!</span>\n" "\n" -"Zatiaľ nemáte pridané žiadne IM účty. Môžete ich pridať v okne <b>Účty</" -"b> ktoré nájdete v ponuke <b>Účty->Pridať a upraviť</b>. Po tom, ako " -"pridáte váš účet, budete sa môcť prihlásiť, zmeniť svoj stav a písať si s " -"vašimi priateľmi." +"Zatiaľ nemáte pridané žiadne IM účty. Môžete ich pridať v okne <b>Účty</b> " +"ktoré nájdete v ponuke <b>Účty->Pridať a upraviť</b>. Po tom, ako pridáte " +"váš účet, budete sa môcť prihlásiť, zmeniť svoj stav a písať si s vašimi " +"priateľmi." #. set the Show Offline Buddies option. must be done #. * after the treeview or faceprint gets mad. -Robot101 #. -#: ../pidgin/gtkblist.c:4555 +#: ../pidgin/gtkblist.c:4566 msgid "/Buddies/Show Offline Buddies" msgstr "/Priatelia/Zobraziť _nepripojených priateľov" -#: ../pidgin/gtkblist.c:4558 +#: ../pidgin/gtkblist.c:4569 msgid "/Buddies/Show Empty Groups" msgstr "/Priatelia/Zobraziť prázdne s_kupiny" -#: ../pidgin/gtkblist.c:4564 +#: ../pidgin/gtkblist.c:4575 msgid "/Buddies/Show Buddy Details" msgstr "/Nástroje/Zobraziť _detaily priateľov" -#: ../pidgin/gtkblist.c:4567 +#: ../pidgin/gtkblist.c:4578 msgid "/Buddies/Show Idle Times" msgstr "/Priatelia/Zobraziť č_asy nečinnosti" -#: ../pidgin/gtkblist.c:5444 +#: ../pidgin/gtkblist.c:5455 msgid "" "Please enter the screen name of the person you would like to add to your " "buddy list. You may optionally enter an alias, or nickname, for the buddy. " @@ -12494,25 +12653,25 @@ "v zozname priateľov namiesto mena používateľa vždy, keď to bude možné.\n" #. End of account box -#: ../pidgin/gtkblist.c:5479 +#: ../pidgin/gtkblist.c:5490 msgid "_Screen name:" msgstr "_Používateľské meno:" -#: ../pidgin/gtkblist.c:5501 ../pidgin/gtkblist.c:5855 +#: ../pidgin/gtkblist.c:5512 ../pidgin/gtkblist.c:5865 msgid "A_lias:" msgstr "P_rezývka:" -#: ../pidgin/gtkblist.c:5767 +#: ../pidgin/gtkblist.c:5777 msgid "This protocol does not support chat rooms." msgstr "Tento protokol nepodporuje miestnosti chatu." -#: ../pidgin/gtkblist.c:5783 +#: ../pidgin/gtkblist.c:5793 msgid "" "You are not currently signed on with any protocols that have the ability to " "chat." msgstr "Momentálne nie ste pripojený na protokole, ktorý by podporoval chat." -#: ../pidgin/gtkblist.c:5824 +#: ../pidgin/gtkblist.c:5834 msgid "" "Please enter an alias, and the appropriate information about the chat you " "would like to add to your buddy list.\n" @@ -12520,39 +12679,39 @@ "Prosím, zadajte prezývku a príslušné informácie o chate, ktorý chcete pridať " "do vášho zoznamu priateľov.\n" -#: ../pidgin/gtkblist.c:5912 +#: ../pidgin/gtkblist.c:5922 msgid "Please enter the name of the group to be added." msgstr "Prosím, zadajte názov skupiny ktorú chcete pridať." -#: ../pidgin/gtkblist.c:6552 +#: ../pidgin/gtkblist.c:6562 msgid "<PurpleMain>/Accounts/" msgstr "<PurpleMain>/Účty/" -#: ../pidgin/gtkblist.c:6576 +#: ../pidgin/gtkblist.c:6586 msgid "_Edit Account" msgstr "_Upraviť účet" -#: ../pidgin/gtkblist.c:6589 ../pidgin/gtkconv.c:2982 +#: ../pidgin/gtkblist.c:6599 ../pidgin/gtkconv.c:3037 msgid "No actions available" msgstr "Nie sú dostupné žiadne akcie" -#: ../pidgin/gtkblist.c:6597 +#: ../pidgin/gtkblist.c:6607 msgid "_Disable" msgstr "_Vypnúť" -#: ../pidgin/gtkblist.c:6609 +#: ../pidgin/gtkblist.c:6619 msgid "Enable Account" msgstr "Povoliť účet" -#: ../pidgin/gtkblist.c:6615 +#: ../pidgin/gtkblist.c:6625 msgid "<PurpleMain>/Accounts/Enable Account" msgstr "<PurpleMain>/Účty/Povoliť účet" -#: ../pidgin/gtkblist.c:6664 +#: ../pidgin/gtkblist.c:6674 msgid "/Tools" msgstr "/Nástroje" -#: ../pidgin/gtkblist.c:6734 +#: ../pidgin/gtkblist.c:6744 msgid "/Buddies/Sort Buddies" msgstr "/Priatelia/Zoradiť priateľov" @@ -12566,29 +12725,29 @@ msgstr "" "%s\n" "\n" -"%s sa nebude znovu pokúšať pripojiť na tento účet, kým neopravíte chybu " -"a znovu nepovolíte tento účet." - -#: ../pidgin/gtkconv.c:485 +"%s sa nebude znovu pokúšať pripojiť na tento účet, kým neopravíte chybu a " +"znovu nepovolíte tento účet." + +#: ../pidgin/gtkconv.c:488 msgid "Unknown command." msgstr "Neznámy príkaz." -#: ../pidgin/gtkconv.c:757 ../pidgin/gtkconv.c:783 +#: ../pidgin/gtkconv.c:760 ../pidgin/gtkconv.c:786 msgid "That buddy is not on the same protocol as this chat." msgstr "Priateľ nie je na tom istom protokole ako tento chat" -#: ../pidgin/gtkconv.c:777 +#: ../pidgin/gtkconv.c:780 msgid "" "You are not currently signed on with an account that can invite that buddy." msgstr "" "Momentálne nie ste prihlásený v účte, ktorý dokáže pozvať tohoto priateľa." -#: ../pidgin/gtkconv.c:830 +#: ../pidgin/gtkconv.c:833 msgid "Invite Buddy Into Chat Room" msgstr "Pozvať priateľa do miestnosti chatu" #. Put our happy label in it. -#: ../pidgin/gtkconv.c:860 +#: ../pidgin/gtkconv.c:863 msgid "" "Please enter the name of the user you wish to invite, along with an optional " "invite message." @@ -12596,201 +12755,201 @@ "Zadajte, prosím, meno používateľa, ktorého chcete pozvať, spolu s nepovinnou " "pozývacou správou." -#: ../pidgin/gtkconv.c:881 +#: ../pidgin/gtkconv.c:884 msgid "_Buddy:" msgstr "_Priateľ:" -#: ../pidgin/gtkconv.c:901 ../pidgin/gtksavedstatuses.c:1193 +#: ../pidgin/gtkconv.c:904 ../pidgin/gtksavedstatuses.c:1193 #: ../pidgin/gtksavedstatuses.c:1525 msgid "_Message:" msgstr "_Správa:" -#: ../pidgin/gtkconv.c:958 ../pidgin/gtkconv.c:2506 ../pidgin/gtkdebug.c:218 +#: ../pidgin/gtkconv.c:961 ../pidgin/gtkconv.c:2544 ../pidgin/gtkdebug.c:218 #: ../pidgin/gtkft.c:542 msgid "Unable to open file." msgstr "Nepodarilo sa otvoriť súbor." -#: ../pidgin/gtkconv.c:964 +#: ../pidgin/gtkconv.c:967 #, c-format msgid "<h1>Conversation with %s</h1>\n" msgstr "<h1>Rozhovor s %s</h1>\n" -#: ../pidgin/gtkconv.c:1000 +#: ../pidgin/gtkconv.c:1003 msgid "Save Conversation" msgstr "Uložiť konverzáciu" -#: ../pidgin/gtkconv.c:1149 ../pidgin/gtkdebug.c:166 ../pidgin/gtkdebug.c:742 +#: ../pidgin/gtkconv.c:1152 ../pidgin/gtkdebug.c:166 ../pidgin/gtkdebug.c:742 msgid "Find" msgstr "Nájsť" -#: ../pidgin/gtkconv.c:1175 ../pidgin/gtkdebug.c:194 +#: ../pidgin/gtkconv.c:1178 ../pidgin/gtkdebug.c:194 msgid "_Search for:" msgstr "Hľadať:" -#: ../pidgin/gtkconv.c:1358 +#: ../pidgin/gtkconv.c:1361 msgid "Logging started. Future messages in this conversation will be logged." msgstr "" "Zaznamenávanie bolo spustené. Nasledujúce správy v rozhovore budú " "zaznamenané." -#: ../pidgin/gtkconv.c:1366 +#: ../pidgin/gtkconv.c:1369 msgid "" "Logging stopped. Future messages in this conversation will not be logged." msgstr "" "Zaznamenávanie bolo zastavené. Nasledujúce správy v rozhovore už nebudú " "zaznamenané." -#: ../pidgin/gtkconv.c:1614 +#: ../pidgin/gtkconv.c:1617 msgid "Un-Ignore" msgstr "Neignorovať" -#: ../pidgin/gtkconv.c:1617 +#: ../pidgin/gtkconv.c:1620 msgid "Ignore" msgstr "Ignorovať" -#: ../pidgin/gtkconv.c:1637 +#: ../pidgin/gtkconv.c:1640 msgid "Get Away Message" msgstr "Získať správu o neprítomnosti" -#: ../pidgin/gtkconv.c:1660 +#: ../pidgin/gtkconv.c:1663 msgid "Last said" msgstr "Naposledy povedal" -#: ../pidgin/gtkconv.c:2514 +#: ../pidgin/gtkconv.c:2552 msgid "Unable to save icon file to disk." msgstr "Nepodarilo sa uložiť súbor ikony na disk." -#: ../pidgin/gtkconv.c:2565 +#: ../pidgin/gtkconv.c:2603 msgid "Save Icon" msgstr "Uložiť ikonu" -#: ../pidgin/gtkconv.c:2617 +#: ../pidgin/gtkconv.c:2655 msgid "Animate" msgstr "Animovať" -#: ../pidgin/gtkconv.c:2622 +#: ../pidgin/gtkconv.c:2660 msgid "Hide Icon" msgstr "Skryť ikonu" -#: ../pidgin/gtkconv.c:2625 +#: ../pidgin/gtkconv.c:2663 msgid "Save Icon As..." msgstr "Uložiť ikonu ako..." -#: ../pidgin/gtkconv.c:2629 +#: ../pidgin/gtkconv.c:2667 msgid "Set Custom Icon..." msgstr "Nastaviť vlastnú ikonu..." -#: ../pidgin/gtkconv.c:2642 +#: ../pidgin/gtkconv.c:2680 msgid "Remove Custom Icon" msgstr "Odstrániť vlastnú ikonu" #. Conversation menu -#: ../pidgin/gtkconv.c:2784 +#: ../pidgin/gtkconv.c:2822 msgid "/_Conversation" msgstr "/_Rozhovor" -#: ../pidgin/gtkconv.c:2786 +#: ../pidgin/gtkconv.c:2824 msgid "/Conversation/New Instant _Message..." msgstr "/Rozhovor/Nová správa..." -#: ../pidgin/gtkconv.c:2791 +#: ../pidgin/gtkconv.c:2829 msgid "/Conversation/_Find..." msgstr "/Rozhovor/_Hľadať..." -#: ../pidgin/gtkconv.c:2793 +#: ../pidgin/gtkconv.c:2831 msgid "/Conversation/View _Log" msgstr "/Rozhovor/Zobraziť _záznam" -#: ../pidgin/gtkconv.c:2794 +#: ../pidgin/gtkconv.c:2832 msgid "/Conversation/_Save As..." msgstr "/Rozhovor/_Uložiť ako..." -#: ../pidgin/gtkconv.c:2796 +#: ../pidgin/gtkconv.c:2834 msgid "/Conversation/Clea_r Scrollback" msgstr "/Rozhovor/Vymazať" -#: ../pidgin/gtkconv.c:2800 +#: ../pidgin/gtkconv.c:2838 msgid "/Conversation/Se_nd File..." msgstr "/Rozhovor/Odos_lať súbor..." -#: ../pidgin/gtkconv.c:2801 +#: ../pidgin/gtkconv.c:2839 msgid "/Conversation/Add Buddy _Pounce..." msgstr "/Rozhovor/Pridať _sledovanie priateľa..." -#: ../pidgin/gtkconv.c:2803 +#: ../pidgin/gtkconv.c:2841 msgid "/Conversation/_Get Info" msgstr "/Rozhovor/_Zobraziť podrobnosti" -#: ../pidgin/gtkconv.c:2805 +#: ../pidgin/gtkconv.c:2843 msgid "/Conversation/In_vite..." msgstr "/Rozhovor/Poz_vať..." -#: ../pidgin/gtkconv.c:2807 +#: ../pidgin/gtkconv.c:2845 msgid "/Conversation/M_ore" msgstr "/Conversation/Via_c" -#: ../pidgin/gtkconv.c:2811 +#: ../pidgin/gtkconv.c:2849 msgid "/Conversation/Al_ias..." msgstr "/Rozhovor/Pre_zývka..." -#: ../pidgin/gtkconv.c:2813 +#: ../pidgin/gtkconv.c:2851 msgid "/Conversation/_Block..." msgstr "/Rozhovor/_Blokovať..." -#: ../pidgin/gtkconv.c:2815 +#: ../pidgin/gtkconv.c:2853 msgid "/Conversation/_Unblock..." msgstr "/Rozhovor/_Odblokovať..." -#: ../pidgin/gtkconv.c:2817 +#: ../pidgin/gtkconv.c:2855 msgid "/Conversation/_Add..." msgstr "/Rozhovor/_Pridať..." -#: ../pidgin/gtkconv.c:2819 +#: ../pidgin/gtkconv.c:2857 msgid "/Conversation/_Remove..." msgstr "/Rozhovor/_Odstrániť..." -#: ../pidgin/gtkconv.c:2824 +#: ../pidgin/gtkconv.c:2862 msgid "/Conversation/Insert Lin_k..." msgstr "/Rozhovor/Vložiť od_kaz..." -#: ../pidgin/gtkconv.c:2826 +#: ../pidgin/gtkconv.c:2864 msgid "/Conversation/Insert Imag_e..." msgstr "/Rozhovor/Vložiť _obrázok..." -#: ../pidgin/gtkconv.c:2832 +#: ../pidgin/gtkconv.c:2870 msgid "/Conversation/_Close" msgstr "/Rozhovor/_Zavrieť" #. Options -#: ../pidgin/gtkconv.c:2836 +#: ../pidgin/gtkconv.c:2874 msgid "/_Options" msgstr "/_Možnosti" -#: ../pidgin/gtkconv.c:2837 +#: ../pidgin/gtkconv.c:2875 msgid "/Options/Enable _Logging" msgstr "/Možnosti/Povoliť zaz_namenávanie" -#: ../pidgin/gtkconv.c:2838 +#: ../pidgin/gtkconv.c:2876 msgid "/Options/Enable _Sounds" msgstr "/Možnosti/Povoliť _zvuky" -#: ../pidgin/gtkconv.c:2839 +#: ../pidgin/gtkconv.c:2877 msgid "/Options/Show Buddy _Icon" msgstr "/Možnosti/Zobraziť ikonu priateľa" -#: ../pidgin/gtkconv.c:2841 +#: ../pidgin/gtkconv.c:2879 msgid "/Options/Show Formatting _Toolbars" msgstr "/Možnosti/Zobraziť panely formá_tovania" -#: ../pidgin/gtkconv.c:2842 +#: ../pidgin/gtkconv.c:2880 msgid "/Options/Show Ti_mestamps" msgstr "/Možnosti/Zobrazovať ča_sové značky" -#: ../pidgin/gtkconv.c:2918 +#: ../pidgin/gtkconv.c:3025 msgid "/Conversation/More" msgstr "/Rozhovor/Viac" -#: ../pidgin/gtkconv.c:3026 +#: ../pidgin/gtkconv.c:3081 msgid "/Options" msgstr "/_Možnosti" @@ -12799,101 +12958,101 @@ #. Make sure the 'Conversation -> More' menuitems are regenerated whenever #. * the 'Conversation' menu pops up because the entries can change after the #. * conversation is created. -#: ../pidgin/gtkconv.c:3061 ../pidgin/gtkconv.c:3093 +#: ../pidgin/gtkconv.c:3116 ../pidgin/gtkconv.c:3148 msgid "/Conversation" msgstr "/Rozhovor" -#: ../pidgin/gtkconv.c:3101 +#: ../pidgin/gtkconv.c:3156 msgid "/Conversation/View Log" msgstr "/Rozhovor/Zobraziť _záznam" -#: ../pidgin/gtkconv.c:3107 +#: ../pidgin/gtkconv.c:3162 msgid "/Conversation/Send File..." msgstr "/Rozhovor/Odos_lať súbor..." -#: ../pidgin/gtkconv.c:3111 +#: ../pidgin/gtkconv.c:3166 msgid "/Conversation/Add Buddy Pounce..." msgstr "/Rozhovor/Pridať _sledovanie priateľa..." -#: ../pidgin/gtkconv.c:3117 +#: ../pidgin/gtkconv.c:3172 msgid "/Conversation/Get Info" msgstr "/Rozhovor/_Zobraziť podrobnosti" -#: ../pidgin/gtkconv.c:3121 +#: ../pidgin/gtkconv.c:3176 msgid "/Conversation/Invite..." msgstr "/Rozhovor/Poz_vať..." -#: ../pidgin/gtkconv.c:3127 +#: ../pidgin/gtkconv.c:3182 msgid "/Conversation/Alias..." msgstr "/Rozhovor/Pre_zývka..." -#: ../pidgin/gtkconv.c:3131 +#: ../pidgin/gtkconv.c:3186 msgid "/Conversation/Block..." msgstr "/Rozhovor/_Blokovať..." -#: ../pidgin/gtkconv.c:3135 +#: ../pidgin/gtkconv.c:3190 msgid "/Conversation/Unblock..." msgstr "/Rozhovor/_Odblokovať..." -#: ../pidgin/gtkconv.c:3139 +#: ../pidgin/gtkconv.c:3194 msgid "/Conversation/Add..." msgstr "/Rozhovor/_Pridať..." -#: ../pidgin/gtkconv.c:3143 +#: ../pidgin/gtkconv.c:3198 msgid "/Conversation/Remove..." msgstr "/Conversation/Remove..." -#: ../pidgin/gtkconv.c:3149 +#: ../pidgin/gtkconv.c:3204 msgid "/Conversation/Insert Link..." msgstr "/Rozhovor/Vložiť odkaz..." -#: ../pidgin/gtkconv.c:3153 +#: ../pidgin/gtkconv.c:3208 msgid "/Conversation/Insert Image..." msgstr "/Rozhovor/Vložiť obrázok..." -#: ../pidgin/gtkconv.c:3159 +#: ../pidgin/gtkconv.c:3214 msgid "/Options/Enable Logging" msgstr "/Možnosti/Povoliť zaz_namenávanie" -#: ../pidgin/gtkconv.c:3162 +#: ../pidgin/gtkconv.c:3217 msgid "/Options/Enable Sounds" msgstr "/Možnosti/Povoliť _zvuky" -#: ../pidgin/gtkconv.c:3175 +#: ../pidgin/gtkconv.c:3230 msgid "/Options/Show Formatting Toolbars" msgstr "/Možnosti/Zobraziť panely formá_tovania" -#: ../pidgin/gtkconv.c:3178 +#: ../pidgin/gtkconv.c:3233 msgid "/Options/Show Timestamps" msgstr "/Možnosti/Zobrazovať ča_sové značky" -#: ../pidgin/gtkconv.c:3181 +#: ../pidgin/gtkconv.c:3236 msgid "/Options/Show Buddy Icon" msgstr "/Možnosti/Zobraziť ikonu priateľa" -#: ../pidgin/gtkconv.c:3265 ../pidgin/gtkconv.c:3307 +#: ../pidgin/gtkconv.c:3320 ../pidgin/gtkconv.c:3362 msgid "User is typing..." msgstr "Používateľ píše..." -#: ../pidgin/gtkconv.c:3310 +#: ../pidgin/gtkconv.c:3365 msgid "User has typed something and stopped" msgstr "Používateľ niečo napísal a prestal" #. Build the Send To menu -#: ../pidgin/gtkconv.c:3492 +#: ../pidgin/gtkconv.c:3548 ../pidgin/gtkconv.c:7812 msgid "_Send To" -msgstr "Odo_slať kam" - -#: ../pidgin/gtkconv.c:4206 +msgstr "Po_slať cez" + +#: ../pidgin/gtkconv.c:4261 msgid "_Send" msgstr "Odo_slať" #. Setup the label telling how many people are in the room. -#: ../pidgin/gtkconv.c:4310 +#: ../pidgin/gtkconv.c:4365 msgid "0 people in room" msgstr "V miestnosti je 0 osôb" -#: ../pidgin/gtkconv.c:5496 ../pidgin/gtkconv.c:5617 +#: ../pidgin/gtkconv.c:5633 ../pidgin/gtkconv.c:5754 #, c-format msgid "%d person in room" msgid_plural "%d people in room" @@ -12901,75 +13060,75 @@ msgstr[1] "V miestnosti je %d osoba" msgstr[2] "V miestnosti sú %d osoby" -#: ../pidgin/gtkconv.c:6216 ../pidgin/gtkstatusbox.c:659 +#: ../pidgin/gtkconv.c:6357 ../pidgin/gtkstatusbox.c:659 msgid "Typing" msgstr "Píše" -#: ../pidgin/gtkconv.c:6222 +#: ../pidgin/gtkconv.c:6361 msgid "Stopped Typing" msgstr "Prestal písať" -#: ../pidgin/gtkconv.c:6227 +#: ../pidgin/gtkconv.c:6364 msgid "Nick Said" msgstr "Používateľ napísal" -#: ../pidgin/gtkconv.c:6232 ../pidgin/gtkdocklet.c:492 +#: ../pidgin/gtkconv.c:6367 ../pidgin/gtkdocklet.c:492 msgid "Unread Messages" msgstr "Neprečítané správy" -#: ../pidgin/gtkconv.c:6237 +#: ../pidgin/gtkconv.c:6370 msgid "New Event" msgstr "Nová udalosť" -#: ../pidgin/gtkconv.c:7210 +#: ../pidgin/gtkconv.c:7362 msgid "clear: Clears all conversation scrollbacks." msgstr "clear: Vyčistí všetky záznamy konverzácie." -#: ../pidgin/gtkconv.c:7374 +#: ../pidgin/gtkconv.c:7526 msgid "Confirm close" msgstr "Potvrdenie uzavrenia" -#: ../pidgin/gtkconv.c:7406 +#: ../pidgin/gtkconv.c:7558 msgid "You have unread messages. Are you sure you want to close the window?" msgstr "Máte neprečítané správy. Naozaj chcete zavrieť toto okno?" -#: ../pidgin/gtkconv.c:7978 +#: ../pidgin/gtkconv.c:8144 msgid "Close other tabs" msgstr "Zavrieť ostatné karty" -#: ../pidgin/gtkconv.c:7984 +#: ../pidgin/gtkconv.c:8150 msgid "Close all tabs" msgstr "Zavrieť všetky karty" -#: ../pidgin/gtkconv.c:7992 +#: ../pidgin/gtkconv.c:8158 msgid "Detach this tab" msgstr "Odpojiť túto kartu" -#: ../pidgin/gtkconv.c:7998 +#: ../pidgin/gtkconv.c:8164 msgid "Close this tab" msgstr "Zavrieť túto kartu" -#: ../pidgin/gtkconv.c:8444 +#: ../pidgin/gtkconv.c:8662 msgid "Close conversation" msgstr "Zavrieť rozhovor" -#: ../pidgin/gtkconv.c:8968 +#: ../pidgin/gtkconv.c:9261 msgid "Last created window" msgstr "Naposledy otvorené okno" -#: ../pidgin/gtkconv.c:8970 +#: ../pidgin/gtkconv.c:9263 msgid "Separate IM and Chat windows" msgstr "Oddeľovať okná pre IM a Chat" -#: ../pidgin/gtkconv.c:8972 ../pidgin/gtkprefs.c:1410 +#: ../pidgin/gtkconv.c:9265 ../pidgin/gtkprefs.c:1412 msgid "New window" msgstr "Nové okno" -#: ../pidgin/gtkconv.c:8974 +#: ../pidgin/gtkconv.c:9267 msgid "By group" msgstr "Podľa skupiny" -#: ../pidgin/gtkconv.c:8976 +#: ../pidgin/gtkconv.c:9269 msgid "By account" msgstr "Podľa účtu" @@ -13033,25 +13192,22 @@ msgid "Fatal Error" msgstr "Závažná chyba" -#: ../pidgin/gtkdialogs.c:71 ../pidgin/gtkdialogs.c:117 +#: ../pidgin/gtkdialogs.c:71 ../pidgin/gtkdialogs.c:113 msgid "lead developer" msgstr "vedúci vývojár" #: ../pidgin/gtkdialogs.c:72 ../pidgin/gtkdialogs.c:73 #: ../pidgin/gtkdialogs.c:74 ../pidgin/gtkdialogs.c:75 -#: ../pidgin/gtkdialogs.c:76 ../pidgin/gtkdialogs.c:78 -#: ../pidgin/gtkdialogs.c:79 ../pidgin/gtkdialogs.c:80 -#: ../pidgin/gtkdialogs.c:81 ../pidgin/gtkdialogs.c:82 -#: ../pidgin/gtkdialogs.c:83 ../pidgin/gtkdialogs.c:84 -#: ../pidgin/gtkdialogs.c:85 ../pidgin/gtkdialogs.c:88 -#: ../pidgin/gtkdialogs.c:89 ../pidgin/gtkdialogs.c:90 +#: ../pidgin/gtkdialogs.c:76 ../pidgin/gtkdialogs.c:77 +#: ../pidgin/gtkdialogs.c:78 ../pidgin/gtkdialogs.c:79 +#: ../pidgin/gtkdialogs.c:80 ../pidgin/gtkdialogs.c:81 +#: ../pidgin/gtkdialogs.c:82 ../pidgin/gtkdialogs.c:83 +#: ../pidgin/gtkdialogs.c:84 ../pidgin/gtkdialogs.c:85 +#: ../pidgin/gtkdialogs.c:88 ../pidgin/gtkdialogs.c:89 +#: ../pidgin/gtkdialogs.c:90 msgid "developer" msgstr "vývojár" -#: ../pidgin/gtkdialogs.c:77 -msgid "developer & webmaster" -msgstr "vývojár & webmaster" - #: ../pidgin/gtkdialogs.c:86 msgid "support" msgstr "podpora" @@ -13060,315 +13216,321 @@ msgid "support/QA" msgstr "podpora/testovanie" -#: ../pidgin/gtkdialogs.c:109 +#: ../pidgin/gtkdialogs.c:104 msgid "win32 port" msgstr "port na win32" -#: ../pidgin/gtkdialogs.c:110 ../pidgin/gtkdialogs.c:111 +#: ../pidgin/gtkdialogs.c:105 ../pidgin/gtkdialogs.c:106 msgid "maintainer" msgstr "správca" -#: ../pidgin/gtkdialogs.c:112 +#: ../pidgin/gtkdialogs.c:107 msgid "libfaim maintainer" msgstr "správca libfaim" +#: ../pidgin/gtkdialogs.c:108 +msgid "developer & webmaster" +msgstr "vývojár & webmaster" + #. If "lazy bum" translates literally into a serious insult, use something else or omit it. -#: ../pidgin/gtkdialogs.c:114 +#: ../pidgin/gtkdialogs.c:110 msgid "hacker and designated driver [lazy bum]" msgstr "hacker a vymenovaný šofér [lenivý zadok]" -#: ../pidgin/gtkdialogs.c:115 +#: ../pidgin/gtkdialogs.c:111 msgid "XMPP developer" msgstr "XMPP vývojár" -#: ../pidgin/gtkdialogs.c:116 +#: ../pidgin/gtkdialogs.c:112 msgid "original author" msgstr "pôvodný autor" -#: ../pidgin/gtkdialogs.c:123 +#: ../pidgin/gtkdialogs.c:128 msgid "Afrikaans" msgstr "Afrikánsky" -#: ../pidgin/gtkdialogs.c:124 +#: ../pidgin/gtkdialogs.c:129 msgid "Arabic" msgstr "Arabsky" -#: ../pidgin/gtkdialogs.c:125 ../pidgin/gtkdialogs.c:126 -#: ../pidgin/gtkdialogs.c:213 +#: ../pidgin/gtkdialogs.c:130 ../pidgin/gtkdialogs.c:131 +#: ../pidgin/gtkdialogs.c:218 msgid "Bulgarian" msgstr "Bulharsky" -#: ../pidgin/gtkdialogs.c:127 ../pidgin/gtkdialogs.c:128 -#: ../pidgin/gtkdialogs.c:129 ../pidgin/gtkdialogs.c:130 +#: ../pidgin/gtkdialogs.c:132 ../pidgin/gtkdialogs.c:133 +#: ../pidgin/gtkdialogs.c:134 ../pidgin/gtkdialogs.c:135 msgid "Bengali" msgstr "Bengálsky" -#: ../pidgin/gtkdialogs.c:131 +#: ../pidgin/gtkdialogs.c:136 msgid "Bosnian" msgstr "Bosniansky" -#: ../pidgin/gtkdialogs.c:132 ../pidgin/gtkdialogs.c:214 -#: ../pidgin/gtkdialogs.c:215 +#: ../pidgin/gtkdialogs.c:137 ../pidgin/gtkdialogs.c:219 +#: ../pidgin/gtkdialogs.c:220 msgid "Catalan" msgstr "Katalánsky" -#: ../pidgin/gtkdialogs.c:133 ../pidgin/gtkdialogs.c:134 +#: ../pidgin/gtkdialogs.c:138 ../pidgin/gtkdialogs.c:139 msgid "Valencian-Catalan" msgstr "Valencijsky-Katalánsky" -#: ../pidgin/gtkdialogs.c:135 ../pidgin/gtkdialogs.c:216 +#: ../pidgin/gtkdialogs.c:140 ../pidgin/gtkdialogs.c:221 msgid "Czech" msgstr "Česky" -#: ../pidgin/gtkdialogs.c:136 ../pidgin/gtkdialogs.c:137 +#: ../pidgin/gtkdialogs.c:141 ../pidgin/gtkdialogs.c:142 msgid "Danish" msgstr "Dánsky" -#: ../pidgin/gtkdialogs.c:138 ../pidgin/gtkdialogs.c:139 -#: ../pidgin/gtkdialogs.c:217 -msgid "German" -msgstr "Nemecky" - -#: ../pidgin/gtkdialogs.c:140 ../pidgin/gtkdialogs.c:141 -#: ../pidgin/gtkdialogs.c:142 -msgid "Dzongkha" -msgstr "Jazyk Dzonka" - #: ../pidgin/gtkdialogs.c:143 ../pidgin/gtkdialogs.c:144 +#: ../pidgin/gtkdialogs.c:222 +msgid "German" +msgstr "Nemecky" + +#: ../pidgin/gtkdialogs.c:145 ../pidgin/gtkdialogs.c:146 +#: ../pidgin/gtkdialogs.c:147 +msgid "Dzongkha" +msgstr "Jazyk Dzonka" + +#: ../pidgin/gtkdialogs.c:148 ../pidgin/gtkdialogs.c:149 msgid "Greek" msgstr "Grécky" -#: ../pidgin/gtkdialogs.c:145 +#: ../pidgin/gtkdialogs.c:150 msgid "Australian English" msgstr "Austrálska angličtina" -#: ../pidgin/gtkdialogs.c:146 +#: ../pidgin/gtkdialogs.c:151 msgid "Canadian English" msgstr "Kanadská angličtina" -#: ../pidgin/gtkdialogs.c:147 +#: ../pidgin/gtkdialogs.c:152 msgid "British English" msgstr "Britská angličtina" -#: ../pidgin/gtkdialogs.c:148 +#: ../pidgin/gtkdialogs.c:153 msgid "Esperanto" msgstr "Esperanto" -#: ../pidgin/gtkdialogs.c:149 ../pidgin/gtkdialogs.c:218 -#: ../pidgin/gtkdialogs.c:219 ../pidgin/gtkdialogs.c:220 -#: ../pidgin/gtkdialogs.c:221 +#: ../pidgin/gtkdialogs.c:154 ../pidgin/gtkdialogs.c:223 +#: ../pidgin/gtkdialogs.c:224 ../pidgin/gtkdialogs.c:225 +#: ../pidgin/gtkdialogs.c:226 msgid "Spanish" msgstr "Španielsky" -#: ../pidgin/gtkdialogs.c:150 ../pidgin/gtkdialogs.c:151 +#: ../pidgin/gtkdialogs.c:155 +msgid "Estonian" +msgstr "Estónsky" + +#: ../pidgin/gtkdialogs.c:156 ../pidgin/gtkdialogs.c:157 msgid "Euskera(Basque)" msgstr "Euskera(Baskitsky)" -#: ../pidgin/gtkdialogs.c:152 ../pidgin/gtkdialogs.c:153 -#: ../pidgin/gtkdialogs.c:154 +#: ../pidgin/gtkdialogs.c:158 ../pidgin/gtkdialogs.c:159 +#: ../pidgin/gtkdialogs.c:160 msgid "Persian" msgstr "Perzsky" -#: ../pidgin/gtkdialogs.c:155 ../pidgin/gtkdialogs.c:222 -#: ../pidgin/gtkdialogs.c:223 +#: ../pidgin/gtkdialogs.c:161 ../pidgin/gtkdialogs.c:227 +#: ../pidgin/gtkdialogs.c:228 msgid "Finnish" msgstr "Fínsky" -#: ../pidgin/gtkdialogs.c:156 ../pidgin/gtkdialogs.c:224 -#: ../pidgin/gtkdialogs.c:225 ../pidgin/gtkdialogs.c:226 -#: ../pidgin/gtkdialogs.c:227 +#: ../pidgin/gtkdialogs.c:162 ../pidgin/gtkdialogs.c:229 +#: ../pidgin/gtkdialogs.c:230 ../pidgin/gtkdialogs.c:231 +#: ../pidgin/gtkdialogs.c:232 msgid "French" msgstr "Francúzsky" -#: ../pidgin/gtkdialogs.c:157 ../pidgin/gtkdialogs.c:158 +#: ../pidgin/gtkdialogs.c:163 ../pidgin/gtkdialogs.c:164 +#: ../pidgin/gtkdialogs.c:233 msgid "Galician" msgstr "Galícijsky" -#: ../pidgin/gtkdialogs.c:159 ../pidgin/gtkdialogs.c:160 +#: ../pidgin/gtkdialogs.c:165 ../pidgin/gtkdialogs.c:166 msgid "Gujarati" msgstr "Guraratsky" -#: ../pidgin/gtkdialogs.c:160 +#: ../pidgin/gtkdialogs.c:166 msgid "Gujarati Language Team" msgstr "Jazykový tým Gujarati" -#: ../pidgin/gtkdialogs.c:161 ../pidgin/gtkdialogs.c:228 +#: ../pidgin/gtkdialogs.c:167 ../pidgin/gtkdialogs.c:234 msgid "Hebrew" msgstr "Hebrejsky" -#: ../pidgin/gtkdialogs.c:162 +#: ../pidgin/gtkdialogs.c:168 msgid "Hindi" msgstr "Hindsky" -#: ../pidgin/gtkdialogs.c:163 +#: ../pidgin/gtkdialogs.c:169 msgid "Hungarian" msgstr "Maďarsky" -#: ../pidgin/gtkdialogs.c:164 +#: ../pidgin/gtkdialogs.c:170 msgid "Indonesian" msgstr "Indonézsky" -#: ../pidgin/gtkdialogs.c:165 ../pidgin/gtkdialogs.c:229 +#: ../pidgin/gtkdialogs.c:171 ../pidgin/gtkdialogs.c:235 msgid "Italian" msgstr "Taliansky" -#: ../pidgin/gtkdialogs.c:166 ../pidgin/gtkdialogs.c:230 -#: ../pidgin/gtkdialogs.c:231 ../pidgin/gtkdialogs.c:232 +#: ../pidgin/gtkdialogs.c:172 ../pidgin/gtkdialogs.c:236 +#: ../pidgin/gtkdialogs.c:237 ../pidgin/gtkdialogs.c:238 msgid "Japanese" msgstr "Japonsky" -#: ../pidgin/gtkdialogs.c:167 ../pidgin/gtkdialogs.c:233 +#: ../pidgin/gtkdialogs.c:173 ../pidgin/gtkdialogs.c:239 msgid "Georgian" msgstr "Gruzínsky" -#: ../pidgin/gtkdialogs.c:167 +#: ../pidgin/gtkdialogs.c:173 msgid "Ubuntu Georgian Translators" -msgstr "" - -#: ../pidgin/gtkdialogs.c:168 +msgstr "Ubuntu Gruzínsky prekladatelia" + +#: ../pidgin/gtkdialogs.c:174 msgid "Kannada" msgstr "Kanada" -#: ../pidgin/gtkdialogs.c:168 +#: ../pidgin/gtkdialogs.c:174 msgid "Kannada Translation team" msgstr "Kanadský prekladateľský tým" -#: ../pidgin/gtkdialogs.c:169 ../pidgin/gtkdialogs.c:234 -#: ../pidgin/gtkdialogs.c:235 +#: ../pidgin/gtkdialogs.c:175 ../pidgin/gtkdialogs.c:240 +#: ../pidgin/gtkdialogs.c:241 msgid "Korean" msgstr "Kórejsky" -#: ../pidgin/gtkdialogs.c:170 ../pidgin/gtkdialogs.c:171 -#: ../pidgin/gtkdialogs.c:172 +#: ../pidgin/gtkdialogs.c:176 ../pidgin/gtkdialogs.c:177 +#: ../pidgin/gtkdialogs.c:178 msgid "Kurdish" msgstr "Kurdsky" -#: ../pidgin/gtkdialogs.c:173 ../pidgin/gtkdialogs.c:236 -#: ../pidgin/gtkdialogs.c:237 +#: ../pidgin/gtkdialogs.c:179 ../pidgin/gtkdialogs.c:242 +#: ../pidgin/gtkdialogs.c:243 msgid "Lithuanian" msgstr "Litovsky" -#: ../pidgin/gtkdialogs.c:174 ../pidgin/gtkdialogs.c:175 -#: ../pidgin/gtkdialogs.c:238 +#: ../pidgin/gtkdialogs.c:180 ../pidgin/gtkdialogs.c:181 +#: ../pidgin/gtkdialogs.c:244 msgid "Macedonian" msgstr "Macedónsky" -#: ../pidgin/gtkdialogs.c:176 +#: ../pidgin/gtkdialogs.c:182 ../pidgin/gtkdialogs.c:245 msgid "Bokmål Norwegian" msgstr "Nórsky" -#: ../pidgin/gtkdialogs.c:177 +#: ../pidgin/gtkdialogs.c:183 msgid "Nepali" msgstr "Nepálsky" -#: ../pidgin/gtkdialogs.c:178 +#: ../pidgin/gtkdialogs.c:184 msgid "Dutch, Flemish" msgstr "Holandsky, Flámsky" -#: ../pidgin/gtkdialogs.c:179 -msgid "Norwegian" -msgstr "Nórsky" - -#: ../pidgin/gtkdialogs.c:180 +#: ../pidgin/gtkdialogs.c:185 msgid "Norwegian Nynorsk" msgstr "Nórsky" -#: ../pidgin/gtkdialogs.c:181 ../pidgin/gtkdialogs.c:182 -#: ../pidgin/gtkdialogs.c:183 ../pidgin/gtkdialogs.c:239 +#: ../pidgin/gtkdialogs.c:186 ../pidgin/gtkdialogs.c:187 +#: ../pidgin/gtkdialogs.c:188 ../pidgin/gtkdialogs.c:246 msgid "Polish" msgstr "Poľsky" -#: ../pidgin/gtkdialogs.c:184 +#: ../pidgin/gtkdialogs.c:189 msgid "Portuguese" msgstr "Portugalsky" -#: ../pidgin/gtkdialogs.c:185 +#: ../pidgin/gtkdialogs.c:190 msgid "Portuguese-Brazil" msgstr "Portugalsky-Brazília" -#: ../pidgin/gtkdialogs.c:186 +#: ../pidgin/gtkdialogs.c:191 msgid "Pashto" msgstr "Pashto" -#: ../pidgin/gtkdialogs.c:187 +#: ../pidgin/gtkdialogs.c:192 msgid "Romanian" msgstr "Rumunsky" -#: ../pidgin/gtkdialogs.c:188 ../pidgin/gtkdialogs.c:240 -#: ../pidgin/gtkdialogs.c:241 +#: ../pidgin/gtkdialogs.c:193 ../pidgin/gtkdialogs.c:247 +#: ../pidgin/gtkdialogs.c:248 msgid "Russian" msgstr "Rusky" -#: ../pidgin/gtkdialogs.c:189 ../pidgin/gtkdialogs.c:190 -#: ../pidgin/gtkdialogs.c:242 ../pidgin/gtkdialogs.c:243 -#: ../pidgin/gtkdialogs.c:244 +#: ../pidgin/gtkdialogs.c:194 ../pidgin/gtkdialogs.c:195 +#: ../pidgin/gtkdialogs.c:249 ../pidgin/gtkdialogs.c:250 +#: ../pidgin/gtkdialogs.c:251 msgid "Slovak" msgstr "Slovensky" -#: ../pidgin/gtkdialogs.c:191 ../pidgin/gtkdialogs.c:245 +#: ../pidgin/gtkdialogs.c:196 ../pidgin/gtkdialogs.c:252 msgid "Slovenian" msgstr "Slovinsky" -#: ../pidgin/gtkdialogs.c:192 +#: ../pidgin/gtkdialogs.c:197 msgid "Albanian" msgstr "Albánsky" -#: ../pidgin/gtkdialogs.c:193 ../pidgin/gtkdialogs.c:194 +#: ../pidgin/gtkdialogs.c:198 ../pidgin/gtkdialogs.c:199 msgid "Serbian" msgstr "Srbsky" -#: ../pidgin/gtkdialogs.c:195 ../pidgin/gtkdialogs.c:246 +#: ../pidgin/gtkdialogs.c:200 ../pidgin/gtkdialogs.c:253 +#: ../pidgin/gtkdialogs.c:254 msgid "Swedish" msgstr "Švédsky" -#: ../pidgin/gtkdialogs.c:196 +#: ../pidgin/gtkdialogs.c:201 msgid "Tamil" msgstr "Tamilsky" -#: ../pidgin/gtkdialogs.c:197 +#: ../pidgin/gtkdialogs.c:202 msgid "Telugu" msgstr "Telugština" -#: ../pidgin/gtkdialogs.c:198 +#: ../pidgin/gtkdialogs.c:203 msgid "Thai" msgstr "Thajština" -#: ../pidgin/gtkdialogs.c:199 ../pidgin/gtkdialogs.c:247 +#: ../pidgin/gtkdialogs.c:204 ../pidgin/gtkdialogs.c:255 msgid "Turkish" msgstr "Turecký" -#: ../pidgin/gtkdialogs.c:200 +#: ../pidgin/gtkdialogs.c:205 msgid "Vietnamese" msgstr "Vietnamský" -#: ../pidgin/gtkdialogs.c:200 +#: ../pidgin/gtkdialogs.c:205 msgid "T.M.Thanh and the Gnome-Vi Team" msgstr "T.M.Thanh a Gnome-Vi tým" -#: ../pidgin/gtkdialogs.c:201 ../pidgin/gtkdialogs.c:248 +#: ../pidgin/gtkdialogs.c:206 ../pidgin/gtkdialogs.c:256 msgid "Simplified Chinese" msgstr "Zjednodušená Čínština" -#: ../pidgin/gtkdialogs.c:202 ../pidgin/gtkdialogs.c:203 -#: ../pidgin/gtkdialogs.c:204 +#: ../pidgin/gtkdialogs.c:207 ../pidgin/gtkdialogs.c:208 +#: ../pidgin/gtkdialogs.c:209 msgid "Hong Kong Chinese" msgstr "Hongkongská Čínština" -#: ../pidgin/gtkdialogs.c:205 ../pidgin/gtkdialogs.c:206 -#: ../pidgin/gtkdialogs.c:249 +#: ../pidgin/gtkdialogs.c:210 ../pidgin/gtkdialogs.c:211 +#: ../pidgin/gtkdialogs.c:257 msgid "Traditional Chinese" msgstr "Tradičná Čínština" -#: ../pidgin/gtkdialogs.c:212 +#: ../pidgin/gtkdialogs.c:217 msgid "Amharic" msgstr "Amharsky" -#: ../pidgin/gtkdialogs.c:334 +#: ../pidgin/gtkdialogs.c:342 #, c-format msgid "About %s" msgstr "O programe %s" -#: ../pidgin/gtkdialogs.c:372 +#: ../pidgin/gtkdialogs.c:380 #, c-format msgid "" "%s is a graphical modular messaging client based on libpurple which is " @@ -13381,52 +13543,56 @@ "contributors. We provide no warranty for this program.<BR><BR>" msgstr "" "%s je modulárny IM klient založený na knižnici libpurple, ktorý podporuje " -"protokoly AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, " -"Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, Gadu-Gadu, and QQ. Je " -"vytvorený pomocou knižnice GTK+.<BR><BR>Tento program môžete " -"upravovať a distribuovať podľa podmienok licencie GPL (vo verzii 2 alebo " -"novšej). Kópia licencie GPL sa nachádza v súbore 'COPYING', ktorý je " -"dodávaný spolu s programom %s. Vlastníkmi autorských práv programu %s " -"sú jeho prispievatelia. Kompletný zoznam prispievateľov si môžete pozrieť v " -"súbore 'COPYRIGHT'. Na tento program vám neposkytujeme žiadnu záruku.<BR><BR>" - -#: ../pidgin/gtkdialogs.c:387 +"protokoly AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, Novell " +"GroupWise, Lotus Sametime, Bonjour, Zephyr, Gadu-Gadu, and QQ. Je vytvorený " +"pomocou knižnice GTK+.<BR><BR>Tento program môžete upravovať a distribuovať " +"podľa podmienok licencie GPL (vo verzii 2 alebo novšej). Kópia licencie GPL " +"sa nachádza v súbore 'COPYING', ktorý je dodávaný spolu s programom %s. " +"Vlastníkmi autorských práv programu %s sú jeho prispievatelia. Kompletný " +"zoznam prispievateľov si môžete pozrieť v súbore 'COPYRIGHT'. Na tento " +"program vám neposkytujeme žiadnu záruku.<BR><BR>" + +#: ../pidgin/gtkdialogs.c:395 msgid "<FONT SIZE=\"4\">IRC:</FONT> #pidgin on irc.freenode.net<BR><BR>" msgstr "<FONT SIZE=\"4\">IRC:</FONT> #pidgin na irc.freenode.net<BR><BR>" -#: ../pidgin/gtkdialogs.c:392 +#: ../pidgin/gtkdialogs.c:400 msgid "Current Developers" msgstr "Aktívni vývojári" -#: ../pidgin/gtkdialogs.c:407 +#: ../pidgin/gtkdialogs.c:415 msgid "Crazy Patch Writers" msgstr "Blázniví autori patchov" -#: ../pidgin/gtkdialogs.c:422 +#: ../pidgin/gtkdialogs.c:430 msgid "Retired Developers" msgstr "Vývojári v ústraní" -#: ../pidgin/gtkdialogs.c:437 +#: ../pidgin/gtkdialogs.c:445 +msgid "Retired Crazy Patch Writers" +msgstr "Blázniví autori patchov v ústraní" + +#: ../pidgin/gtkdialogs.c:460 msgid "Artists" msgstr "Umelci" -#: ../pidgin/gtkdialogs.c:452 +#: ../pidgin/gtkdialogs.c:475 msgid "Current Translators" msgstr "Súčasní prekladatelia" -#: ../pidgin/gtkdialogs.c:472 +#: ../pidgin/gtkdialogs.c:495 msgid "Past Translators" msgstr "Bývalí prekladatelia" -#: ../pidgin/gtkdialogs.c:490 +#: ../pidgin/gtkdialogs.c:513 msgid "Debugging Information" msgstr "Ladiace informácie" -#: ../pidgin/gtkdialogs.c:859 +#: ../pidgin/gtkdialogs.c:882 msgid "Get User Info" msgstr "Zobraziť podrobnosti o používateľovi" -#: ../pidgin/gtkdialogs.c:861 +#: ../pidgin/gtkdialogs.c:884 msgid "" "Please enter the screen name or alias of the person whose info you would " "like to view." @@ -13434,11 +13600,11 @@ "Zadajte, prosím, meno používateľa alebo prezývku osoby, ktorej chcete poslať " "správu." -#: ../pidgin/gtkdialogs.c:951 +#: ../pidgin/gtkdialogs.c:974 msgid "View User Log" msgstr "Zobraziť záznam používateľa" -#: ../pidgin/gtkdialogs.c:953 +#: ../pidgin/gtkdialogs.c:976 msgid "" "Please enter the screen name or alias of the person whose log you would like " "to view." @@ -13446,32 +13612,32 @@ "Zadajte, prosím, meno používateľa alebo prezývku osoby, ktorej záznam chcete " "zobraziť." -#: ../pidgin/gtkdialogs.c:973 +#: ../pidgin/gtkdialogs.c:996 msgid "Alias Contact" msgstr "Prezývka kontaktu" -#: ../pidgin/gtkdialogs.c:974 +#: ../pidgin/gtkdialogs.c:997 msgid "Enter an alias for this contact." msgstr "Zadajte prezývku pre tento kontakt." -#: ../pidgin/gtkdialogs.c:996 +#: ../pidgin/gtkdialogs.c:1019 #, c-format msgid "Enter an alias for %s." msgstr "Zadajte prezývku pre kontakt %s." -#: ../pidgin/gtkdialogs.c:998 +#: ../pidgin/gtkdialogs.c:1021 msgid "Alias Buddy" msgstr "Prezývka priateľa" -#: ../pidgin/gtkdialogs.c:1019 +#: ../pidgin/gtkdialogs.c:1042 msgid "Alias Chat" msgstr "Prezývka pre chat" -#: ../pidgin/gtkdialogs.c:1020 +#: ../pidgin/gtkdialogs.c:1043 msgid "Enter an alias for this chat." msgstr "Zadajte prezývku pre tento chat." -#: ../pidgin/gtkdialogs.c:1059 +#: ../pidgin/gtkdialogs.c:1082 #, c-format msgid "" "You are about to remove the contact containing %s and %d other buddy from " @@ -13489,30 +13655,30 @@ "Z vášho zoznamu priateľov sa chystáte odstrániť kontakt, ktorý obsahuje %s a " "%d ďalších priateľov. Chcete pokračovať?" -#: ../pidgin/gtkdialogs.c:1067 +#: ../pidgin/gtkdialogs.c:1090 msgid "Remove Contact" msgstr "Odstrániť kontakt" -#: ../pidgin/gtkdialogs.c:1070 +#: ../pidgin/gtkdialogs.c:1093 msgid "_Remove Contact" msgstr "Odst_rániť kontakt" -#: ../pidgin/gtkdialogs.c:1101 +#: ../pidgin/gtkdialogs.c:1124 #, c-format msgid "" "You are about to merge the group called %s into the group called %s. Do you " "want to continue?" msgstr "Skupinu %s sa chystáte pripojiť do skupiny %s. Chcete pokračovať?" -#: ../pidgin/gtkdialogs.c:1108 +#: ../pidgin/gtkdialogs.c:1131 msgid "Merge Groups" msgstr "Spojenie skupín" -#: ../pidgin/gtkdialogs.c:1111 +#: ../pidgin/gtkdialogs.c:1134 msgid "_Merge Groups" msgstr "_Spojiť skupiny" -#: ../pidgin/gtkdialogs.c:1161 +#: ../pidgin/gtkdialogs.c:1184 #, c-format msgid "" "You are about to remove the group %s and all its members from your buddy " @@ -13520,15 +13686,15 @@ msgstr "" "Chystáte sa odstrániť skupinu %s a všetkých jej členov. Chcete pokračovať?" -#: ../pidgin/gtkdialogs.c:1164 +#: ../pidgin/gtkdialogs.c:1187 msgid "Remove Group" msgstr "Odstrániť skupinu" -#: ../pidgin/gtkdialogs.c:1167 +#: ../pidgin/gtkdialogs.c:1190 msgid "_Remove Group" msgstr "_Odstrániť skupinu" -#: ../pidgin/gtkdialogs.c:1200 +#: ../pidgin/gtkdialogs.c:1223 #, c-format msgid "" "You are about to remove %s from your buddy list. Do you want to continue?" @@ -13536,15 +13702,15 @@ "Chystáte sa odstrániť používateľa %s a všetkých jej členov. Chcete " "pokračovať?" -#: ../pidgin/gtkdialogs.c:1203 +#: ../pidgin/gtkdialogs.c:1226 msgid "Remove Buddy" msgstr "Odstrániť priateľa" -#: ../pidgin/gtkdialogs.c:1206 +#: ../pidgin/gtkdialogs.c:1229 msgid "_Remove Buddy" msgstr "Odstrániť _priateľa" -#: ../pidgin/gtkdialogs.c:1227 +#: ../pidgin/gtkdialogs.c:1250 #, c-format msgid "" "You are about to remove the chat %s from your buddy list. Do you want to " @@ -13552,11 +13718,11 @@ msgstr "" "Chystáte sa odstrániť chat %s a všetkých jej členov. Chcete pokračovať?" -#: ../pidgin/gtkdialogs.c:1230 +#: ../pidgin/gtkdialogs.c:1253 msgid "Remove Chat" msgstr "Odstrániť chat" -#: ../pidgin/gtkdialogs.c:1233 +#: ../pidgin/gtkdialogs.c:1256 msgid "_Remove Chat" msgstr "Odstrániť _chat" @@ -13675,43 +13841,43 @@ msgid "_Resume" msgstr "_Pokračovať" -#: ../pidgin/gtkimhtml.c:795 +#: ../pidgin/gtkimhtml.c:815 msgid "Paste as Plain _Text" msgstr "_Vložiť ako čistý text" -#: ../pidgin/gtkimhtml.c:812 +#: ../pidgin/gtkimhtml.c:832 ../pidgin/gtkimhtmltoolbar.c:1138 msgid "_Reset formatting" msgstr "Vymazať formátovanie" -#: ../pidgin/gtkimhtml.c:1349 +#: ../pidgin/gtkimhtml.c:1372 msgid "Hyperlink color" msgstr "Farba odkazu" -#: ../pidgin/gtkimhtml.c:1350 +#: ../pidgin/gtkimhtml.c:1373 msgid "Color to draw hyperlinks." msgstr "Farba na vykreslenie odkazov." -#: ../pidgin/gtkimhtml.c:1353 +#: ../pidgin/gtkimhtml.c:1376 msgid "Hyperlink prelight color" msgstr "Farba podsvieteného odkazu" -#: ../pidgin/gtkimhtml.c:1354 +#: ../pidgin/gtkimhtml.c:1377 msgid "Color to draw hyperlinks when mouse is over them." msgstr "Farba na vykreslenie odkazu, nad ktorým sa nachádza kurzor myši." -#: ../pidgin/gtkimhtml.c:1575 +#: ../pidgin/gtkimhtml.c:1597 msgid "_Copy E-Mail Address" msgstr "_Kopírovať e-mailovu adresu" -#: ../pidgin/gtkimhtml.c:1587 +#: ../pidgin/gtkimhtml.c:1609 msgid "_Open Link in Browser" msgstr "_Otvoriť odkaz v prehliadači" -#: ../pidgin/gtkimhtml.c:1597 +#: ../pidgin/gtkimhtml.c:1619 msgid "_Copy Link Location" msgstr "_Kopírovať adresu odkazu" -#: ../pidgin/gtkimhtml.c:3341 +#: ../pidgin/gtkimhtml.c:3365 msgid "" "<span size='larger' weight='bold'>Unrecognized file type</span>\n" "\n" @@ -13721,7 +13887,7 @@ "\n" "Nastavuje sa na PNG." -#: ../pidgin/gtkimhtml.c:3344 +#: ../pidgin/gtkimhtml.c:3368 msgid "" "Unrecognized file type\n" "\n" @@ -13731,7 +13897,7 @@ "\n" "Nastavuje sa na PNG." -#: ../pidgin/gtkimhtml.c:3373 +#: ../pidgin/gtkimhtml.c:3397 #, c-format msgid "" "<span size='larger' weight='bold'>Error saving image</span>\n" @@ -13742,7 +13908,7 @@ "\n" "%s" -#: ../pidgin/gtkimhtml.c:3376 +#: ../pidgin/gtkimhtml.c:3400 #, c-format msgid "" "Error saving image\n" @@ -13753,11 +13919,11 @@ "\n" "%s" -#: ../pidgin/gtkimhtml.c:3454 ../pidgin/gtkimhtml.c:3466 +#: ../pidgin/gtkimhtml.c:3478 ../pidgin/gtkimhtml.c:3490 msgid "Save Image" msgstr "Uložiť obrázok" -#: ../pidgin/gtkimhtml.c:3494 +#: ../pidgin/gtkimhtml.c:3518 msgid "_Save Image..." msgstr "_Uložiť obrázok..." @@ -13795,7 +13961,7 @@ msgid "Insert Link" msgstr "Vložiť odkaz" -#: ../pidgin/gtkimhtmltoolbar.c:424 ../pidgin/gtkimhtmltoolbar.c:1155 +#: ../pidgin/gtkimhtmltoolbar.c:424 ../pidgin/gtkimhtmltoolbar.c:1207 msgid "_Insert" msgstr "_Vložiť" @@ -13817,59 +13983,58 @@ msgid "Smile!" msgstr "Smajlík!" -#: ../pidgin/gtkimhtmltoolbar.c:1064 -msgid "_Bold" -msgstr "_Tučné" - -#: ../pidgin/gtkimhtmltoolbar.c:1065 -msgid "_Italic" -msgstr "_Kurzíva" - -#: ../pidgin/gtkimhtmltoolbar.c:1066 -msgid "_Underline" -msgstr "_Podčiarknuté" - -#: ../pidgin/gtkimhtmltoolbar.c:1067 -msgid "_Larger" -msgstr "_Väčšie" - -#: ../pidgin/gtkimhtmltoolbar.c:1069 +#: ../pidgin/gtkimhtmltoolbar.c:820 ../pidgin/gtkimhtmltoolbar.c:1164 +msgid "_Font" +msgstr "_Písmo" + +#: ../pidgin/gtkimhtmltoolbar.c:1124 +msgid "<b>_Bold</b>" +msgstr "<b>_Tučné:</b>" + +#: ../pidgin/gtkimhtmltoolbar.c:1125 +msgid "<i>_Italic</i>" +msgstr "<i>_Kurzíva</i>" + +#: ../pidgin/gtkimhtmltoolbar.c:1126 +msgid "<u>_Underline</u>" +msgstr "<u>_Podčiarknuté</u>" + +#: ../pidgin/gtkimhtmltoolbar.c:1127 +msgid "<span size='larger'>_Larger</span>" +msgstr "<span size='larger'>_Väčšie</span>" + +#: ../pidgin/gtkimhtmltoolbar.c:1129 msgid "_Normal" msgstr "_Normálne" -#: ../pidgin/gtkimhtmltoolbar.c:1071 -msgid "_Smaller" -msgstr "_Menšie" - -#: ../pidgin/gtkimhtmltoolbar.c:1072 +#: ../pidgin/gtkimhtmltoolbar.c:1131 +msgid "<span size='smaller'>_Smaller</span>" +msgstr "<span size='smaller'>_Menšie</span>" + +#. If we want to show the formatting for the following items, we would +#. * need to update them when formatting changes. The above items don't need +#. * no updating nor nothin' +#: ../pidgin/gtkimhtmltoolbar.c:1135 msgid "_Font face" msgstr "Rez písma" -#: ../pidgin/gtkimhtmltoolbar.c:1073 -msgid "_Foreground color" -msgstr "Farba _textu" - -#: ../pidgin/gtkimhtmltoolbar.c:1074 -msgid "_Background color" -msgstr "Farba _pozadia" - -#: ../pidgin/gtkimhtmltoolbar.c:1100 -msgid "_Font" -msgstr "_Písmo" - -#: ../pidgin/gtkimhtmltoolbar.c:1135 -msgid "_Reset font" -msgstr "Vymazať formátovanie" - -#: ../pidgin/gtkimhtmltoolbar.c:1162 +#: ../pidgin/gtkimhtmltoolbar.c:1136 +msgid "Foreground _color" +msgstr "Farba _popredia" + +#: ../pidgin/gtkimhtmltoolbar.c:1137 +msgid "Bac_kground color" +msgstr "Farba po_zadia" + +#: ../pidgin/gtkimhtmltoolbar.c:1215 msgid "_Smiley" msgstr "_Smajlík" -#: ../pidgin/gtkimhtmltoolbar.c:1168 +#: ../pidgin/gtkimhtmltoolbar.c:1221 msgid "_Image" msgstr "Obrázok" -#: ../pidgin/gtkimhtmltoolbar.c:1174 +#: ../pidgin/gtkimhtmltoolbar.c:1227 msgid "_Link" msgstr "Odkaz" @@ -13879,7 +14044,8 @@ "Are you sure you want to permanently delete the log of the conversation with " "%s which started at %s?" msgstr "" -"Naozaj chcete natrvalo odstrániť záznam konverzácie s používateľom %s, ktorá začala %s?" +"Naozaj chcete natrvalo odstrániť záznam konverzácie s používateľom %s, ktorá " +"začala %s?" #: ../pidgin/gtklog.c:303 #, c-format @@ -13960,12 +14126,12 @@ msgid "System Log" msgstr "Systémový záznam" -#: ../pidgin/gtkmain.c:385 +#: ../pidgin/gtkmain.c:386 #, c-format msgid "%s %s. Try `%s -h' for more information.\n" msgstr "%s %s. `%s -h' zobrazí viac informácií.\n" -#: ../pidgin/gtkmain.c:387 +#: ../pidgin/gtkmain.c:388 #, c-format msgid "" "%s %s\n" @@ -13987,11 +14153,12 @@ " -d, --debug vkladá ladiace informácie do stdout\n" " -h, --help zobrazí túto pomoc a skončí\n" " -n, --nologin neprihlasovať automaticky\n" -" -l, --login[=MENO] automatické prihlásenie (voliteľný argument MENO určuje\n" +" -l, --login[=MENO] automatické prihlásenie (voliteľný argument MENO " +"určuje\n" " účty oddeľované čiarkami)\n" " -v, --version zobrazí verziu programu a skončí\n" -#: ../pidgin/gtkmain.c:511 +#: ../pidgin/gtkmain.c:512 #, c-format msgid "" "%s has segfaulted and attempted to dump a core file.\n" @@ -14031,19 +14198,19 @@ #. Translators may want to transliterate the name. #. It is not to be translated. -#: ../pidgin/gtkmain.c:697 ../pidgin/pidgin.h:50 +#: ../pidgin/gtkmain.c:699 ../pidgin/pidgin.h:50 msgid "Pidgin" msgstr "Pidgin" -#: ../pidgin/gtknotify.c:343 +#: ../pidgin/gtknotify.c:348 msgid "Open All Messages" msgstr "Otvoriť všetky správy" -#: ../pidgin/gtknotify.c:395 +#: ../pidgin/gtknotify.c:401 msgid "<span weight=\"bold\" size=\"larger\">You have mail!</span>" msgstr "<span weight=\"bold\" size=\"larger\">Máte poštu!</span>" -#: ../pidgin/gtknotify.c:515 +#: ../pidgin/gtknotify.c:521 #, c-format msgid "%s has %d new message." msgid_plural "%s has %d new messages." @@ -14051,30 +14218,30 @@ msgstr[1] "Používateľ %s má %d novú správu." msgstr[2] "Používateľ %s má %d nové správy." -#: ../pidgin/gtknotify.c:526 +#: ../pidgin/gtknotify.c:532 #, c-format msgid "<b>You have %d new e-mail.</b>" msgid_plural "<b>You have %d new e-mails.</b>" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: ../pidgin/gtknotify.c:965 +msgstr[0] "<b>Máte %d nových e-mailov.</b>" +msgstr[1] "<b>Máte %d nový e-mail.</b>" +msgstr[2] "<b>Máte %d nové e-maily.</b>" + +#: ../pidgin/gtknotify.c:972 #, c-format msgid "The browser command \"%s\" is invalid." msgstr "Príkaz prehliadača \"%s\" je chybný." -#: ../pidgin/gtknotify.c:967 ../pidgin/gtknotify.c:979 -#: ../pidgin/gtknotify.c:992 ../pidgin/gtknotify.c:1120 +#: ../pidgin/gtknotify.c:974 ../pidgin/gtknotify.c:986 +#: ../pidgin/gtknotify.c:999 ../pidgin/gtknotify.c:1127 msgid "Unable to open URL" msgstr "Nepodarilo sa otvoriť URL" -#: ../pidgin/gtknotify.c:977 ../pidgin/gtknotify.c:990 +#: ../pidgin/gtknotify.c:984 ../pidgin/gtknotify.c:997 #, c-format msgid "Error launching \"%s\": %s" msgstr "Chyba počas spúšťania \"%s\": %s" -#: ../pidgin/gtknotify.c:1121 +#: ../pidgin/gtknotify.c:1128 msgid "" "The 'Manual' browser command has been chosen, but no command has been set." msgstr "Vybrali ste možnosť 'Ručne', ale nenastavili ste príkaz prehliadača." @@ -14164,7 +14331,7 @@ #: ../pidgin/gtkpounce.c:608 msgid "P_auses while typing" -msgstr "Prestane pí_sať" +msgstr "Preruší pís_anie" #: ../pidgin/gtkpounce.c:610 msgid "Stops t_yping" @@ -14219,7 +14386,7 @@ msgstr "Cieľ sledovania" #: ../pidgin/gtkprefs.c:385 -#: ../pidgin/pixmaps/emotes/default/22/default.theme.in.h:1 +#: ../pidgin/pixmaps/emotes/default/24/default.theme.in.h:1 msgid "Default" msgstr "Predvolená" @@ -14252,13 +14419,6 @@ msgid "_Show system tray icon:" msgstr "_Zobraziť ikonu v oznamovacej oblasti:" -#: ../pidgin/gtkprefs.c:896 ../pidgin/gtkprefs.c:908 ../pidgin/gtkprefs.c:1756 -#: ../pidgin/plugins/timestamp_format.c:42 -#: ../pidgin/plugins/timestamp_format.c:51 -#: ../pidgin/plugins/win32/winprefs/winprefs.c:338 -msgid "Always" -msgstr "Vždy" - #: ../pidgin/gtkprefs.c:898 msgid "On unread messages" msgstr "Pri neprečítaných správach" @@ -14271,7 +14431,7 @@ msgid "_Hide new IM conversations:" msgstr "_Skrývať nové rozhovory:" -#: ../pidgin/gtkprefs.c:907 ../pidgin/gtkprefs.c:1937 +#: ../pidgin/gtkprefs.c:907 ../pidgin/gtkprefs.c:1939 msgid "When away" msgstr "Pri neprítomnosti" @@ -14325,8 +14485,8 @@ msgstr "Zobrazovať _formátovanie v prichádzajúcich správach" #: ../pidgin/gtkprefs.c:997 -msgid "Show buddy _icons" -msgstr "Zobrazovať _ikony priateľov" +msgid "Show _detailed information" +msgstr "Zobraziť detailné informácie" #: ../pidgin/gtkprefs.c:999 msgid "Enable buddy ic_on animation" @@ -14372,7 +14532,7 @@ msgid "Default Formatting" msgstr "Štandardné formátovanie" -#: ../pidgin/gtkprefs.c:1057 +#: ../pidgin/gtkprefs.c:1059 msgid "" "This is how your outgoing message text will appear when you use protocols " "that support formatting." @@ -14380,119 +14540,119 @@ "Takto bude vyzerať text odchádzajúcich správ pri použití protokolu, ktorý " "podporuje formátovanie." -#: ../pidgin/gtkprefs.c:1123 +#: ../pidgin/gtkprefs.c:1125 msgid "ST_UN server:" msgstr "ST_UN server:" -#: ../pidgin/gtkprefs.c:1135 +#: ../pidgin/gtkprefs.c:1137 msgid "<span style=\"italic\">Example: stunserver.org</span>" msgstr "<span style=\"italic\">Príklad: stunserver.org</span>" -#: ../pidgin/gtkprefs.c:1139 +#: ../pidgin/gtkprefs.c:1141 msgid "_Autodetect IP address" msgstr "_Automaticky zistiť IP adresu" -#: ../pidgin/gtkprefs.c:1148 +#: ../pidgin/gtkprefs.c:1150 msgid "Public _IP:" msgstr "Verejná _IP adresa:" -#: ../pidgin/gtkprefs.c:1177 +#: ../pidgin/gtkprefs.c:1179 msgid "Ports" msgstr "Porty" -#: ../pidgin/gtkprefs.c:1180 +#: ../pidgin/gtkprefs.c:1182 msgid "_Manually specify range of ports to listen on" msgstr "_Ručne určiť rozsah portov, na ktorých počúvať" -#: ../pidgin/gtkprefs.c:1183 +#: ../pidgin/gtkprefs.c:1185 msgid "_Start port:" msgstr "_Prvý port:" -#: ../pidgin/gtkprefs.c:1190 +#: ../pidgin/gtkprefs.c:1192 msgid "_End port:" msgstr "Po_sledný port:" -#: ../pidgin/gtkprefs.c:1198 +#: ../pidgin/gtkprefs.c:1200 msgid "Proxy Server" msgstr "Proxy Server" -#: ../pidgin/gtkprefs.c:1202 +#: ../pidgin/gtkprefs.c:1204 msgid "No proxy" msgstr "Bez proxy" -#: ../pidgin/gtkprefs.c:1258 +#: ../pidgin/gtkprefs.c:1260 msgid "_User:" msgstr "Používateľ:" -#: ../pidgin/gtkprefs.c:1323 +#: ../pidgin/gtkprefs.c:1325 msgid "Seamonkey" msgstr "Seamonkey" -#: ../pidgin/gtkprefs.c:1324 -msgid "Opera" -msgstr "Opera" - -#: ../pidgin/gtkprefs.c:1325 -msgid "Netscape" -msgstr "Netscape" - #: ../pidgin/gtkprefs.c:1326 -msgid "Mozilla" -msgstr "Mozilla" +msgid "Opera" +msgstr "Opera" #: ../pidgin/gtkprefs.c:1327 -msgid "Konqueror" -msgstr "Konqueror" +msgid "Netscape" +msgstr "Netscape" #: ../pidgin/gtkprefs.c:1328 -msgid "GNOME Default" -msgstr "GNOME Default" +msgid "Mozilla" +msgstr "Mozilla" #: ../pidgin/gtkprefs.c:1329 +msgid "Konqueror" +msgstr "Konqueror" + +#: ../pidgin/gtkprefs.c:1330 +msgid "GNOME Default" +msgstr "GNOME Default" + +#: ../pidgin/gtkprefs.c:1331 msgid "Galeon" msgstr "Galeon" -#: ../pidgin/gtkprefs.c:1330 +#: ../pidgin/gtkprefs.c:1332 msgid "Firefox" msgstr "Firefox" -#: ../pidgin/gtkprefs.c:1331 +#: ../pidgin/gtkprefs.c:1333 msgid "Firebird" msgstr "Firebird" -#: ../pidgin/gtkprefs.c:1332 +#: ../pidgin/gtkprefs.c:1334 msgid "Epiphany" msgstr "Epiphany" -#: ../pidgin/gtkprefs.c:1341 +#: ../pidgin/gtkprefs.c:1343 msgid "Manual" msgstr "Manual" -#: ../pidgin/gtkprefs.c:1394 +#: ../pidgin/gtkprefs.c:1396 msgid "Browser Selection" msgstr "Výber prehliadača" -#: ../pidgin/gtkprefs.c:1398 +#: ../pidgin/gtkprefs.c:1400 msgid "_Browser:" msgstr "_Prehliadač:" -#: ../pidgin/gtkprefs.c:1406 +#: ../pidgin/gtkprefs.c:1408 msgid "_Open link in:" msgstr "_Otvoriť odkaz:" -#: ../pidgin/gtkprefs.c:1408 +#: ../pidgin/gtkprefs.c:1410 msgid "Browser default" msgstr "Podľa prehliadača" -#: ../pidgin/gtkprefs.c:1409 +#: ../pidgin/gtkprefs.c:1411 msgid "Existing window" msgstr "V otvorenom okne" -#: ../pidgin/gtkprefs.c:1411 +#: ../pidgin/gtkprefs.c:1413 msgid "New tab" msgstr "Na novej karte" -#: ../pidgin/gtkprefs.c:1425 +#: ../pidgin/gtkprefs.c:1427 #, c-format msgid "" "_Manual:\n" @@ -14501,80 +14661,63 @@ "_Ručne:\n" "(%s for URL)" -#: ../pidgin/gtkprefs.c:1465 +#: ../pidgin/gtkprefs.c:1467 msgid "Log _format:" msgstr "_Formát záznamu:" -#: ../pidgin/gtkprefs.c:1470 +#: ../pidgin/gtkprefs.c:1472 msgid "Log all _instant messages" msgstr "Zaznamenávať všetky _správy" -#: ../pidgin/gtkprefs.c:1472 +#: ../pidgin/gtkprefs.c:1474 msgid "Log all c_hats" msgstr "Zaznamenávať všetky c_haty" -#: ../pidgin/gtkprefs.c:1474 +#: ../pidgin/gtkprefs.c:1476 msgid "Log all _status changes to system log" msgstr "Zaznamenávať do systémového záznamu všetky zmeny _stavu" -#: ../pidgin/gtkprefs.c:1582 ../pidgin/gtkprefs.c:1671 -#: ../pidgin/gtkprefs.c:1865 -msgid "(default)" -msgstr "" - -#: ../pidgin/gtkprefs.c:1620 +#: ../pidgin/gtkprefs.c:1622 msgid "Sound Selection" msgstr "Výber zvuku" -#: ../pidgin/gtkprefs.c:1630 +#: ../pidgin/gtkprefs.c:1632 msgid "Quietest" msgstr "Najtichšia" -#: ../pidgin/gtkprefs.c:1632 +#: ../pidgin/gtkprefs.c:1634 msgid "Quieter" msgstr "Tichšia" -#: ../pidgin/gtkprefs.c:1634 +#: ../pidgin/gtkprefs.c:1636 msgid "Quiet" msgstr "Tichá" -#: ../pidgin/gtkprefs.c:1638 +#: ../pidgin/gtkprefs.c:1640 msgid "Loud" msgstr "Hlasná" -#: ../pidgin/gtkprefs.c:1640 -msgid "Louder" -msgstr "Hlasnejšia" - #: ../pidgin/gtkprefs.c:1642 +msgid "Louder" +msgstr "Hlasnejšia" + +#: ../pidgin/gtkprefs.c:1644 msgid "Loudest" msgstr "Najhlasnejšia" -#: ../pidgin/gtkprefs.c:1705 -msgid "Sound Method" -msgstr "Spôsob prehrávania zvukov" - -#: ../pidgin/gtkprefs.c:1706 +#: ../pidgin/gtkprefs.c:1708 msgid "_Method:" msgstr "_Spôsob:" -#: ../pidgin/gtkprefs.c:1708 +#: ../pidgin/gtkprefs.c:1710 msgid "Console beep" msgstr "Pípnutie konzoly" -#: ../pidgin/gtkprefs.c:1710 -msgid "Automatic" -msgstr "Automaticky" - -#: ../pidgin/gtkprefs.c:1714 -msgid "Command" -msgstr "Príkaz" - -#: ../pidgin/gtkprefs.c:1715 +#: ../pidgin/gtkprefs.c:1717 msgid "No sounds" msgstr "Žiadne zvuky" -#: ../pidgin/gtkprefs.c:1723 +#: ../pidgin/gtkprefs.c:1725 #, c-format msgid "" "Sound c_ommand:\n" @@ -14583,117 +14726,81 @@ "Príkaz zvuku:\n" "(%s pre názov súboru)" -#: ../pidgin/gtkprefs.c:1749 -msgid "Sound Options" -msgstr "Možnosti zvuku" - -#: ../pidgin/gtkprefs.c:1750 +#: ../pidgin/gtkprefs.c:1752 msgid "Sounds when conversation has _focus" msgstr "Prehrávať zvuky, keď je okno koverzácie _aktívne" -#: ../pidgin/gtkprefs.c:1752 -msgid "Enable sounds:" -msgstr "Povoliť zvuky:" - #: ../pidgin/gtkprefs.c:1754 -msgid "Only when available" -msgstr "Len ak sú dostupné" - -#: ../pidgin/gtkprefs.c:1755 -msgid "Only when not available" -msgstr "Len ak sú nedostupné" - -#: ../pidgin/gtkprefs.c:1763 +msgid "Enable sounds:" +msgstr "Povoliť zvuky:" + +#: ../pidgin/gtkprefs.c:1765 msgid "Volume:" msgstr "Hlasitosť:" -#: ../pidgin/gtkprefs.c:1791 -msgid "Sound Events" -msgstr "Zvukové udalosti" - -#: ../pidgin/gtkprefs.c:1843 +#: ../pidgin/gtkprefs.c:1845 msgid "Play" msgstr "Prehrať" -#: ../pidgin/gtkprefs.c:1850 -msgid "Event" -msgstr "Udalosť" - -#: ../pidgin/gtkprefs.c:1869 -msgid "Test" -msgstr "Ukážka" - -#: ../pidgin/gtkprefs.c:1873 -msgid "Reset" -msgstr "Obnoviť" - -#: ../pidgin/gtkprefs.c:1877 -msgid "Choose..." -msgstr "Vybrať..." - -#: ../pidgin/gtkprefs.c:1920 +#: ../pidgin/gtkprefs.c:1922 msgid "_Report idle time:" msgstr "_Oznamovať čas nečinnosti:" -#: ../pidgin/gtkprefs.c:1925 +#: ../pidgin/gtkprefs.c:1927 msgid "Based on keyboard or mouse use" msgstr "Podľa využitia klávesnice alebo myši" -#: ../pidgin/gtkprefs.c:1934 +#: ../pidgin/gtkprefs.c:1936 msgid "_Auto-reply:" msgstr "_Automatická odpoveď:" -#: ../pidgin/gtkprefs.c:1938 +#: ../pidgin/gtkprefs.c:1940 msgid "When both away and idle" msgstr "Pri neprítomnosti a nečinnosti" #. Auto-away stuff -#: ../pidgin/gtkprefs.c:1944 +#: ../pidgin/gtkprefs.c:1946 msgid "Auto-away" msgstr "Automatická neprítomnosť" -#: ../pidgin/gtkprefs.c:1946 +#: ../pidgin/gtkprefs.c:1948 msgid "Change status when _idle" msgstr "Zmeniť stav pri _nečinnosti" -#: ../pidgin/gtkprefs.c:1950 -msgid "_Minutes before changing status:" -msgstr "_Počet minút pred zmenou stavu:" - -#: ../pidgin/gtkprefs.c:1958 +#: ../pidgin/gtkprefs.c:1952 +msgid "_Minutes before becoming idle:" +msgstr "_Počet minút pred nečinnosťou:" + +#: ../pidgin/gtkprefs.c:1960 msgid "Change _status to:" msgstr "Zmeniť _stav na:" #. Signon status stuff -#: ../pidgin/gtkprefs.c:1979 +#: ../pidgin/gtkprefs.c:1981 msgid "Status at Startup" msgstr "Stav pri spustení" -#: ../pidgin/gtkprefs.c:1981 +#: ../pidgin/gtkprefs.c:1983 msgid "Use status from last _exit at startup" msgstr "Po spustení použiť stav ako pred odhlásením" -#: ../pidgin/gtkprefs.c:1987 +#: ../pidgin/gtkprefs.c:1989 msgid "Status to a_pply at startup:" msgstr "Po spustení použiť stav:" -#: ../pidgin/gtkprefs.c:2025 +#: ../pidgin/gtkprefs.c:2027 msgid "Interface" msgstr "Rozhranie" -#: ../pidgin/gtkprefs.c:2027 +#: ../pidgin/gtkprefs.c:2029 msgid "Smiley Themes" msgstr "Témy smajlíkov" -#: ../pidgin/gtkprefs.c:2028 -msgid "Sounds" -msgstr "Zvuky" - -#: ../pidgin/gtkprefs.c:2034 +#: ../pidgin/gtkprefs.c:2036 msgid "Browser" msgstr "Prehliadač" -#: ../pidgin/gtkprefs.c:2038 +#: ../pidgin/gtkprefs.c:2040 msgid "Status / Idle" msgstr "Stav / nečinný" @@ -14783,23 +14890,23 @@ msgid "Apply" msgstr "Použiť" -#: ../pidgin/gtkrequest.c:1478 +#: ../pidgin/gtkrequest.c:1504 msgid "That file already exists" msgstr "Tento súbor už existuje" -#: ../pidgin/gtkrequest.c:1479 +#: ../pidgin/gtkrequest.c:1505 msgid "Would you like to overwrite it?" msgstr "Chcete ho prepísať?" -#: ../pidgin/gtkrequest.c:1482 +#: ../pidgin/gtkrequest.c:1508 msgid "Overwrite" msgstr "Prepísať" -#: ../pidgin/gtkrequest.c:1483 +#: ../pidgin/gtkrequest.c:1509 msgid "Choose New Name" msgstr "Vybrať iný názov" -#: ../pidgin/gtkrequest.c:1621 ../pidgin/gtkrequest.c:1635 +#: ../pidgin/gtkrequest.c:1647 ../pidgin/gtkrequest.c:1661 msgid "Select Folder..." msgstr "Vyberte priečinok..." @@ -14858,91 +14965,43 @@ msgid "Status for %s" msgstr "Stav pre %s" -#: ../pidgin/gtksound.c:63 -msgid "Buddy logs in" -msgstr "Priateľ sa prihlási" - -#: ../pidgin/gtksound.c:64 -msgid "Buddy logs out" -msgstr "Priateľ sa odhlási" - -#: ../pidgin/gtksound.c:65 -msgid "Message received" -msgstr "Prijatie správy" - -#: ../pidgin/gtksound.c:66 -msgid "Message received begins conversation" -msgstr "Prijatá správa začína rozhovor" - -#: ../pidgin/gtksound.c:67 -msgid "Message sent" -msgstr "Odoslanie správy" - -#: ../pidgin/gtksound.c:68 -msgid "Person enters chat" -msgstr "Osoba vstúpi do chatu" - -#: ../pidgin/gtksound.c:69 -msgid "Person leaves chat" -msgstr "Osoba opustí chat" - -#: ../pidgin/gtksound.c:70 -msgid "You talk in chat" -msgstr "Vy hovoríte v chate" - -#: ../pidgin/gtksound.c:71 -msgid "Others talk in chat" -msgstr "Ostatní hovoria v chate" - -#: ../pidgin/gtksound.c:74 -msgid "Someone says your screen name in chat" -msgstr "Niekto v chate napíše vaše meno" - -#: ../pidgin/gtksound.c:310 -msgid "GStreamer Failure" -msgstr "Zlyhanie rozhrania GStreamer" - -#: ../pidgin/gtksound.c:311 -msgid "GStreamer failed to initialize." -msgstr "Nepodarilo sa inicializovať rozhranie GStreamer" - #: ../pidgin/gtkstatusbox.c:663 msgid "Waiting for network connection" msgstr "Čaká sa na sieťové pripojenie" -#: ../pidgin/gtkutils.c:627 +#: ../pidgin/gtkutils.c:631 msgid "Google Talk" msgstr "Google Talk" -#: ../pidgin/gtkutils.c:1384 ../pidgin/gtkutils.c:1407 +#: ../pidgin/gtkutils.c:1388 ../pidgin/gtkutils.c:1411 #, c-format msgid "The following error has occurred loading %s: %s" msgstr "Počas načítavania %s sa vyskytla nasledujúca chyba: %s" -#: ../pidgin/gtkutils.c:1387 ../pidgin/gtkutils.c:1409 +#: ../pidgin/gtkutils.c:1391 ../pidgin/gtkutils.c:1413 msgid "Failed to load image" msgstr "Nepodarilo sa načítať obrázok" -#: ../pidgin/gtkutils.c:1483 +#: ../pidgin/gtkutils.c:1487 #, c-format msgid "Cannot send folder %s." msgstr "Nepodarilo sa odoslať priečinok %s." -#: ../pidgin/gtkutils.c:1484 +#: ../pidgin/gtkutils.c:1488 #, c-format msgid "" "%s cannot transfer a folder. You will need to send the files within " "individually." msgstr "" -"Program %s nedokáže odoslať priečinok. Skúste posielať súbory v priečinku " -"po jednom. " - -#: ../pidgin/gtkutils.c:1516 ../pidgin/gtkutils.c:1528 -#: ../pidgin/gtkutils.c:1535 +"Program %s nedokáže odoslať priečinok. Skúste posielať súbory v priečinku po " +"jednom. " + +#: ../pidgin/gtkutils.c:1520 ../pidgin/gtkutils.c:1532 +#: ../pidgin/gtkutils.c:1539 msgid "You have dragged an image" msgstr "Vložili ste obrázok" -#: ../pidgin/gtkutils.c:1517 +#: ../pidgin/gtkutils.c:1521 msgid "" "You can send this image as a file transfer, embed it into this message, or " "use it as the buddy icon for this user." @@ -14950,48 +15009,48 @@ "Tento obrázok môžete odoslať cez prenos súborov, vložiť ho do správy alebo " "použiť ako ikonu priateľa pre tohto používateľa." -#: ../pidgin/gtkutils.c:1523 ../pidgin/gtkutils.c:1543 +#: ../pidgin/gtkutils.c:1527 ../pidgin/gtkutils.c:1547 msgid "Set as buddy icon" msgstr "Nastaviť ako ikonu priateľa" -#: ../pidgin/gtkutils.c:1524 ../pidgin/gtkutils.c:1544 +#: ../pidgin/gtkutils.c:1528 ../pidgin/gtkutils.c:1548 msgid "Send image file" msgstr "Odoslať obrázok ako súbor" -#: ../pidgin/gtkutils.c:1525 ../pidgin/gtkutils.c:1544 +#: ../pidgin/gtkutils.c:1529 ../pidgin/gtkutils.c:1548 msgid "Insert in message" msgstr "Vložiť do správy" -#: ../pidgin/gtkutils.c:1529 +#: ../pidgin/gtkutils.c:1533 msgid "Would you like to set it as the buddy icon for this user?" msgstr "Chcete nastaviť obrázok ako ikonu priateľa?" -#: ../pidgin/gtkutils.c:1536 +#: ../pidgin/gtkutils.c:1540 msgid "" "You can send this image as a file transfer, or use it as the buddy icon for " "this user." msgstr "" -"Tento obrázok môžete odoslať cez prenos súborov alebo ho " -"použiť ako ikonu pre tohto priateľa." - -#: ../pidgin/gtkutils.c:1537 +"Tento obrázok môžete odoslať cez prenos súborov alebo ho použiť ako ikonu " +"pre tohto priateľa." + +#: ../pidgin/gtkutils.c:1541 msgid "" "You can insert this image into this message, or use it as the buddy icon for " "this user" msgstr "" -"Tento obrázok môžete vložiť do správy alebo ho použiť ako ikonu pre " -"tohto priateľa." +"Tento obrázok môžete vložiť do správy alebo ho použiť ako ikonu pre tohto " +"priateľa." #. I don't know if we really want to do anything here. Most of the desktop item types are crap like #. * "MIME Type" (I have no clue how that would be a desktop item) and "Comment"... nothing we can really #. * send. The only logical one is "Application," but do we really want to send a binary and nothing else? #. * Probably not. I'll just give an error and return. #. The original patch sent the icon used by the launcher. That's probably wrong -#: ../pidgin/gtkutils.c:1595 +#: ../pidgin/gtkutils.c:1599 msgid "Cannot send launcher" msgstr "Nepodarilo sa odoslať spúšťač" -#: ../pidgin/gtkutils.c:1595 +#: ../pidgin/gtkutils.c:1599 msgid "" "You dragged a desktop launcher. Most likely you wanted to send whatever this " "launcher points to instead of this launcher itself." @@ -14999,7 +15058,7 @@ "Vložili ste spúšťač. Pravdepodobne ste chceli odoslať súbor, na ktorý tento " "spúšťač odkazuje, namiesto samotného spúšťača." -#: ../pidgin/gtkutils.c:2317 +#: ../pidgin/gtkutils.c:2334 #, c-format msgid "" "<b>File:</b> %s\n" @@ -15010,25 +15069,25 @@ "<b>Veľkosť súboru:</b> %s\n" "<b>Veľkosť obrázku:</b> %dx%d" -#: ../pidgin/gtkutils.c:2613 +#: ../pidgin/gtkutils.c:2630 #, c-format msgid "The file '%s' is too large for %s. Please try a smaller image.\n" msgstr "Súbor '%s' je príliš veľký na %s. Prosím, skúste menší obrázok.\n" -#: ../pidgin/gtkutils.c:2615 +#: ../pidgin/gtkutils.c:2632 msgid "Icon Error" msgstr "Chyba ikony" -#: ../pidgin/gtkutils.c:2616 +#: ../pidgin/gtkutils.c:2633 msgid "Could not set icon" msgstr "Nepodarilo sa odoslať ikonu" -#: ../pidgin/gtkutils.c:2716 +#: ../pidgin/gtkutils.c:2733 #, c-format msgid "Failed to open file '%s': %s" msgstr "Nepodarilo sa otvoriť súbor '%s': %s" -#: ../pidgin/gtkutils.c:2765 +#: ../pidgin/gtkutils.c:2782 #, c-format msgid "" "Failed to load image '%s': reason not known, probably a corrupt image file" @@ -15068,51 +15127,51 @@ msgid "_Open Mail" msgstr "_Otvoriť poštu" -#: ../pidgin/pixmaps/emotes/default/22/default.theme.in.h:2 +#: ../pidgin/pixmaps/emotes/default/24/default.theme.in.h:2 msgid "Pidgin smileys" -msgstr "" +msgstr "Smajlíci programu Pidgin" #: ../pidgin/pixmaps/emotes/none/none.theme.in.h:1 msgid "Penguin Pimps" -msgstr "" +msgstr "Autori Pidginu" #: ../pidgin/pixmaps/emotes/none/none.theme.in.h:2 msgid "Selecting this disables graphical emoticons." -msgstr "" +msgstr "Vyberte túto možnosť, ak nechcete grafických smajlíkov." #: ../pidgin/pixmaps/emotes/none/none.theme.in.h:3 msgid "none" msgstr "žiadne" -#: ../pidgin/plugins/cap/cap.c:449 +#: ../pidgin/plugins/cap/cap.c:450 msgid "Display Statistics" msgstr "Zobraziť štatistiky" -#: ../pidgin/plugins/cap/cap.c:461 ../pidgin/plugins/cap/cap.c:464 +#: ../pidgin/plugins/cap/cap.c:462 ../pidgin/plugins/cap/cap.c:465 msgid "Response Probability:" msgstr "Pravdepodobnosť odpovede:" -#: ../pidgin/plugins/cap/cap.c:810 +#: ../pidgin/plugins/cap/cap.c:811 msgid "Statistics Configuration" msgstr "Konfigurácia štatistík" #. msg_difference spinner -#: ../pidgin/plugins/cap/cap.c:813 +#: ../pidgin/plugins/cap/cap.c:814 msgid "Maximum response timeout:" msgstr "Najdlhší interval do odpovede:" -#: ../pidgin/plugins/cap/cap.c:816 ../pidgin/plugins/cap/cap.c:823 -#: ../pidgin/plugins/cap/cap.c:830 ../pidgin/plugins/timestamp.c:150 +#: ../pidgin/plugins/cap/cap.c:817 ../pidgin/plugins/cap/cap.c:824 +#: ../pidgin/plugins/cap/cap.c:831 ../pidgin/plugins/timestamp.c:150 msgid "minutes" msgstr "minút" #. last_seen spinner -#: ../pidgin/plugins/cap/cap.c:820 +#: ../pidgin/plugins/cap/cap.c:821 msgid "Maximum last-seen difference:" msgstr "Maximálny naposledy videný rozdiel:" #. threshold spinner -#: ../pidgin/plugins/cap/cap.c:827 +#: ../pidgin/plugins/cap/cap.c:828 msgid "Threshold:" msgstr "Prah:" @@ -15122,18 +15181,18 @@ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/cap/cap.c:935 +#: ../pidgin/plugins/cap/cap.c:936 msgid "Contact Availability Prediction" msgstr "Predpovedanie dostupnosti kontaktu." #. *< name #. *< version -#: ../pidgin/plugins/cap/cap.c:937 +#: ../pidgin/plugins/cap/cap.c:938 msgid "Contact Availability Prediction plugin." msgstr "Modul predpovedania dostupnosti kontaktu." #. * summary -#: ../pidgin/plugins/cap/cap.c:938 +#: ../pidgin/plugins/cap/cap.c:939 msgid "" "The contact availability plugin (cap) is used to display statistical " "information about buddies in a users contact list." @@ -15278,6 +15337,7 @@ "Note: The preference for \"New conversations\" must be set to \"By " "conversation count\"." msgstr "" +"Poznámka: Možnosť \"New conversations\" musí byť nastavená na \"Podľa počtu konverzácií\"." #: ../pidgin/plugins/extplacement.c:111 msgid "Number of conversations per window" @@ -15409,34 +15469,34 @@ msgid "_Associate Buddy" msgstr "_Priradiť priateľa" -#: ../pidgin/plugins/gevolution/gevolution.c:238 -#: ../pidgin/plugins/gevolution/gevolution.c:244 +#: ../pidgin/plugins/gevolution/gevolution.c:240 +#: ../pidgin/plugins/gevolution/gevolution.c:246 msgid "Unable to send e-mail" msgstr "Nepodarilo sa odoslať e-mail" -#: ../pidgin/plugins/gevolution/gevolution.c:239 +#: ../pidgin/plugins/gevolution/gevolution.c:241 msgid "The evolution executable was not found in the PATH." msgstr "Spúšťač programu evolution nebol nájdený v premennej PATH." -#: ../pidgin/plugins/gevolution/gevolution.c:245 +#: ../pidgin/plugins/gevolution/gevolution.c:247 msgid "An e-mail address was not found for this buddy." msgstr "Nebola nájdená e-mailová adresa tohoto priateľa." -#: ../pidgin/plugins/gevolution/gevolution.c:271 +#: ../pidgin/plugins/gevolution/gevolution.c:273 msgid "Add to Address Book" msgstr "Pridať do adresára" -#: ../pidgin/plugins/gevolution/gevolution.c:283 +#: ../pidgin/plugins/gevolution/gevolution.c:285 msgid "Send E-Mail" msgstr "Odoslať E-mail" #. Configuration frame -#: ../pidgin/plugins/gevolution/gevolution.c:410 +#: ../pidgin/plugins/gevolution/gevolution.c:412 msgid "Evolution Integration Configuration" msgstr "Nastavenie integrácie s Evoulution" #. Label -#: ../pidgin/plugins/gevolution/gevolution.c:413 +#: ../pidgin/plugins/gevolution/gevolution.c:415 msgid "Select all accounts that buddies should be auto-added to." msgstr "Vyberte všetky účty, ku ktorým sa majú automaticky pridávať priatelia." @@ -15446,7 +15506,7 @@ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/gevolution/gevolution.c:525 +#: ../pidgin/plugins/gevolution/gevolution.c:527 msgid "Evolution Integration" msgstr "Integrácia s Evolution" @@ -15454,8 +15514,8 @@ #. *< version #. * summary #. * description -#: ../pidgin/plugins/gevolution/gevolution.c:528 #: ../pidgin/plugins/gevolution/gevolution.c:530 +#: ../pidgin/plugins/gevolution/gevolution.c:532 msgid "Provides integration with Evolution." msgstr "Umožňuje integráciu s programom Evolution." @@ -15488,6 +15548,15 @@ msgid "E-mail:" msgstr "E-mail:" +#: ../pidgin/plugins/gtkbuddynote.c:34 +#, c-format +msgid "" +"\n" +"<b>Buddy Note</b>: %s" +msgstr "" +"\n" +"<b>Poznámka priateľa:</b> %s" + #. *< type #. *< ui_requirement #. *< flags @@ -15546,15 +15615,15 @@ #: ../pidgin/plugins/markerline.c:23 msgid "Markerline" -msgstr "" +msgstr "Deliaca čiara" #: ../pidgin/plugins/markerline.c:25 ../pidgin/plugins/markerline.c:26 msgid "Draw a line to indicate new messages in a conversation." -msgstr "" +msgstr "Nakresliť čiaru za novými správami v rozhovore" #: ../pidgin/plugins/markerline.c:246 msgid "Draw Markerline in " -msgstr "" +msgstr "Vykreslovať oddeľovaciu čiaru " #: ../pidgin/plugins/markerline.c:250 ../pidgin/plugins/notify.c:676 msgid "_IM windows" @@ -15869,9 +15938,9 @@ "Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit " "'Enter' in the entry box to send. Watch the debug window." msgstr "" -"Umožní vám odoslať priamy vstup v textovo-založených protokoloch (Jabber, MSN, " -"IRC, TOC). Pre odoslanie stlačte Enter vo vstupnom poli. Sledujte ladiace " -"okno." +"Umožní vám odoslať priamy vstup v textovo-založených protokoloch (Jabber, " +"MSN, IRC, TOC). Pre odoslanie stlačte Enter vo vstupnom poli. Sledujte " +"ladiace okno." #: ../pidgin/plugins/relnot.c:71 #, c-format @@ -15879,7 +15948,8 @@ "You are using %s version %s. The current version is %s. You can get it " "from <a href=\"%s\">%s</a><hr>" msgstr "" -"Používate program %s, verziu %s. Aktuálna verzia je %s. Môžete ju získať na adrese <a href=\"%s\">%s</a><hr>" +"Používate program %s, verziu %s. Aktuálna verzia je %s. Môžete ju získať " +"na adrese <a href=\"%s\">%s</a><hr>" #: ../pidgin/plugins/relnot.c:79 #, c-format @@ -16085,43 +16155,43 @@ "správach konverzácií a záznamoch." #: ../pidgin/plugins/win32/transparency/win2ktrans.c:174 -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:589 -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:636 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:593 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:640 msgid "Opacity:" msgstr "Krytie:" #. IM Convo trans options -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:553 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:557 msgid "IM Conversation Windows" msgstr "Okná rozhovoru" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:554 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:558 msgid "_IM window transparency" msgstr "Priehľadnosť okna správ" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:568 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:572 msgid "_Show slider bar in IM window" msgstr "_Zobrazovať posuvný pruh v okne správ" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:575 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:579 msgid "Remove IM window transparency on focus" msgstr "Odstrániť priehľadnosť okna správ pri fokuse" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:578 -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:626 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:582 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:630 msgid "Always on top" msgstr "Vždy navrchu" #. Buddy List trans options -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:610 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:614 msgid "Buddy List Window" msgstr "Okno zoznamu priateľov" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:611 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:615 msgid "_Buddy List window transparency" msgstr "Priehľadnosť okna _zoznamu priateľov" -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:624 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:628 msgid "Remove Buddy List window transparency on focus" msgstr "Vypnúť priesvitnosť okna zoznamu priateľov pri aktivovaní" @@ -16131,19 +16201,19 @@ #. *< dependencies #. *< priority #. *< id -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:684 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:688 msgid "Transparency" msgstr "Priehľadnosť" #. *< name #. *< version #. * summary -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:687 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:691 msgid "Variable Transparency for the buddy list and conversations." msgstr "Premenlivá priehľadnosť zoznamu priateľov a konverzácií." #. * description -#: ../pidgin/plugins/win32/transparency/win2ktrans.c:689 +#: ../pidgin/plugins/win32/transparency/win2ktrans.c:693 msgid "" "This plugin enables variable alpha transparency on conversation windows and " "the buddy list.\n" @@ -16155,51 +16225,52 @@ "\n" "* Poznámka: Tento plugin vyžaduje Win2000 alebo novší." -#: ../pidgin/plugins/win32/winprefs/winprefs.c:307 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:303 msgid "GTK+ Runtime Version" msgstr "Verzia GTK+ Runtime" #. Autostart -#: ../pidgin/plugins/win32/winprefs/winprefs.c:315 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:311 msgid "Startup" msgstr "Spustenie" -#: ../pidgin/plugins/win32/winprefs/winprefs.c:316 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:312 #, c-format msgid "_Start %s on Windows startup" msgstr "_Spustiť %s pri štarte Windows" -#: ../pidgin/plugins/win32/winprefs/winprefs.c:331 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:327 msgid "_Dockable Buddy List" msgstr "_Ukotviteľný zoznam priateľov" #. Blist On Top -#: ../pidgin/plugins/win32/winprefs/winprefs.c:335 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:331 msgid "_Keep Buddy List window on top:" msgstr "_Udržiavať okno so zoznamom priateľov navrchu:" #. XXX: Did this ever work? -#: ../pidgin/plugins/win32/winprefs/winprefs.c:340 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:336 msgid "Only when docked" msgstr "Len ak je ukotvené" -#: ../pidgin/plugins/win32/winprefs/winprefs.c:345 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:341 msgid "_Flash window when chat messages are received" msgstr "_Blikať oknom, keď sú prijaté správy" -#: ../pidgin/plugins/win32/winprefs/winprefs.c:375 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:371 msgid "Windows Pidgin Options" msgstr "Možnosti pre Windows verziu programu Pidgin" -#: ../pidgin/plugins/win32/winprefs/winprefs.c:377 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:373 msgid "Options specific to Pidgin for Windows." msgstr "Špecifické možnosti programu Pidgin pre Windows." -#: ../pidgin/plugins/win32/winprefs/winprefs.c:378 +#: ../pidgin/plugins/win32/winprefs/winprefs.c:374 msgid "" "Provides options specific to Pidgin for Windows , such as buddy list docking." msgstr "" -"Poskytuje možnosti špecifické pre Pidgin pre Windows, napríklad ukotvovanie zoznamu priateľov." +"Poskytuje možnosti špecifické pre Pidgin pre Windows, napríklad ukotvovanie " +"zoznamu priateľov." #: ../pidgin/plugins/xmppconsole.c:667 msgid "<font color='#777777'>Logged out.</font>" @@ -16248,6 +16319,75 @@ msgid "This plugin is useful for debbuging XMPP servers or clients." msgstr "Tento modul sa hodí na odlaďovanie XMPP serverov alebo klientov." +#~ msgid "You have been signed off for an unknown reason." +#~ msgstr "Z neznámeho dôvodu ste boli odhlásení." + +#~ msgid "Are you sure to exit this Qun?" +#~ msgstr "Naozaj chcete opustiť toto Qun?" + +#~ msgid "Go ahead" +#~ msgstr "Pokračovať" + +#~ msgid "Server ACK" +#~ msgstr "Server ACK" + +#~ msgid "Keep alive error, seems connection lost!" +#~ msgstr "Chyba spojenia, asi padlo spojenie!" + +#~ msgid "Request login token error!" +#~ msgstr "Vyžiadaná chyba pri prihlasovaní do tokenu!" + +#~ msgid "%s Address" +#~ msgstr "%s Adresa" + +#~ msgid "QQ: Available" +#~ msgstr "QQ: Prítomný" + +#~ msgid "QQ: Away" +#~ msgstr "QQ: Neprítomný" + +#~ msgid "QQ: Invisible" +#~ msgstr "QQ: Neviditeľný" + +#~ msgid "QQ: Offline" +#~ msgstr "QQ: Odpojený" + +#~ msgid "Modify My Information" +#~ msgstr "Upraviť moje podrobnosti" + +#~ msgid "Login in TCP" +#~ msgstr "Prihlásenie v TCP" + +#~ msgid "Login Hidden" +#~ msgstr "Prihlasenie skryté" + +#~ msgid "Socket send error" +#~ msgstr "Chyba odoslania soketu" + +#~ msgid "Connection refused" +#~ msgstr "Spojenie odmietnuté" + +#~ msgid "%s has added you [%s]" +#~ msgstr "%s vás pridal [%s]" + +#~ msgid "Norwegian" +#~ msgstr "Nórsky" + +#~ msgid "_Bold" +#~ msgstr "_Tučné" + +#~ msgid "_Larger" +#~ msgstr "_Väčšie" + +#~ msgid "_Smaller" +#~ msgstr "_Menšie" + +#~ msgid "_Reset font" +#~ msgstr "Vymazať formátovanie" + +#~ msgid "Show buddy _icons" +#~ msgstr "Zobrazovať _ikony priateľov" + #~ msgid "Gaim Internet Messenger" #~ msgstr "Gaim, IM klient" @@ -16288,13 +16428,6 @@ #~ msgid "" #~ "\n" -#~ "<b>Buddy Alias:</b> %s" -#~ msgstr "" -#~ "\n" -#~ "<b>Prezývka priateľa:</b> %s" - -#~ msgid "" -#~ "\n" #~ "<b>Nickname:</b> %s" #~ msgstr "" #~ "\n"